aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMario <mario@mariovavti.com>2023-03-19 13:55:18 +0000
committerMario <mario@mariovavti.com>2023-03-19 13:55:18 +0000
commit89285f1408d21091bb80d45b391ddcbe06ba8d0f (patch)
treeb2eb07d9f3d91d77f89a4565a58e6e5231b20c1c
parent0a679e503ef367eda3085c44af103ee53869a94f (diff)
parent17c0bb2069dcfe35d3febc5bfdb3a7295f15d49c (diff)
downloadvolse-hubzilla-89285f1408d21091bb80d45b391ddcbe06ba8d0f.tar.gz
volse-hubzilla-89285f1408d21091bb80d45b391ddcbe06ba8d0f.tar.bz2
volse-hubzilla-89285f1408d21091bb80d45b391ddcbe06ba8d0f.zip
Merge branch '8.2RC'8.2
-rw-r--r--.gitlab-ci.yml6
-rw-r--r--CHANGELOG92
-rw-r--r--Zotlabs/Daemon/Convo.php1
-rw-r--r--Zotlabs/Daemon/Externals.php1
-rw-r--r--Zotlabs/Daemon/Onepoll.php1
-rw-r--r--Zotlabs/Daemon/Queue.php77
-rw-r--r--Zotlabs/Lib/Activity.php64
-rw-r--r--Zotlabs/Lib/ActivityStreams.php62
-rw-r--r--Zotlabs/Lib/DReport.php19
-rw-r--r--Zotlabs/Lib/Enotify.php6
-rw-r--r--Zotlabs/Lib/Libsync.php19
-rw-r--r--Zotlabs/Lib/Libzot.php155
-rw-r--r--Zotlabs/Lib/MessageFilter.php4
-rw-r--r--Zotlabs/Lib/Queue.php63
-rw-r--r--Zotlabs/Lib/QueueWorker.php24
-rw-r--r--Zotlabs/Module/Acl.php1
-rw-r--r--Zotlabs/Module/Cal.php6
-rw-r--r--Zotlabs/Module/Cdav.php12
-rw-r--r--Zotlabs/Module/Channel.php17
-rw-r--r--Zotlabs/Module/Chanview.php16
-rw-r--r--Zotlabs/Module/Connections.php14
-rw-r--r--Zotlabs/Module/Dirsearch.php2
-rw-r--r--Zotlabs/Module/Hq.php59
-rw-r--r--Zotlabs/Module/Like.php1
-rw-r--r--Zotlabs/Module/Magic.php6
-rw-r--r--Zotlabs/Module/Notes.php2
-rw-r--r--Zotlabs/Module/Settings/Account.php1
-rw-r--r--Zotlabs/Module/Settings/Multifactor.php90
-rw-r--r--Zotlabs/Module/Totp_check.php86
-rw-r--r--Zotlabs/Widget/Channel_activities.php4
-rw-r--r--Zotlabs/Widget/Messages.php29
-rw-r--r--Zotlabs/Widget/Pinned.php10
-rw-r--r--boot.php5
-rw-r--r--composer.json6
-rw-r--r--composer.lock331
-rw-r--r--include/auth.php12
-rw-r--r--include/bbcode.php6
-rw-r--r--include/cdav.php2
-rw-r--r--include/channel.php2
-rw-r--r--include/conversation.php1
-rw-r--r--include/event.php4
-rw-r--r--include/hubloc.php8
-rw-r--r--include/items.php22
-rw-r--r--include/language.php6
-rw-r--r--include/nav.php5
-rw-r--r--include/oembed.php11
-rw-r--r--include/text.php75
-rw-r--r--library/fork-awesome/css/fork-awesome.css275
-rw-r--r--library/fork-awesome/css/fork-awesome.min.css14
-rw-r--r--library/fork-awesome/css/fork-awesome.min.css.map2
-rw-r--r--library/fork-awesome/css/v5-compat.css446
-rw-r--r--library/fork-awesome/css/v5-compat.min.css12
-rw-r--r--library/fork-awesome/css/v5-compat.min.css.map1
-rw-r--r--library/fork-awesome/fonts/forkawesome-webfont.eotbin182286 -> 219194 bytes
-rw-r--r--library/fork-awesome/fonts/forkawesome-webfont.svg5400
-rw-r--r--library/fork-awesome/fonts/forkawesome-webfont.ttfbin182096 -> 219004 bytes
-rw-r--r--library/fork-awesome/fonts/forkawesome-webfont.woffbin110252 -> 136120 bytes
-rw-r--r--library/fork-awesome/fonts/forkawesome-webfont.woff2bin87876 -> 109916 bytes
-rw-r--r--library/fullcalendar/LICENSE.md22
-rw-r--r--library/fullcalendar/LICENSE.txt20
-rw-r--r--library/fullcalendar/README.md77
-rw-r--r--library/fullcalendar/dist/index.global.js14083
-rw-r--r--library/fullcalendar/dist/index.global.min.js6
-rw-r--r--library/fullcalendar/examples/background-events.html52
-rw-r--r--library/fullcalendar/examples/daygrid-views.html45
-rw-r--r--library/fullcalendar/examples/external-dragging-2cals.html20
-rw-r--r--library/fullcalendar/examples/external-dragging-builtin.html68
-rw-r--r--library/fullcalendar/examples/full-height.html56
-rw-r--r--library/fullcalendar/examples/google-calendar.html86
-rw-r--r--library/fullcalendar/examples/js/theme-chooser.js141
-rw-r--r--library/fullcalendar/examples/json.html93
-rw-r--r--library/fullcalendar/examples/json/events.json56
-rw-r--r--library/fullcalendar/examples/list-sticky-header.html76
-rw-r--r--library/fullcalendar/examples/list-views.html48
-rw-r--r--library/fullcalendar/examples/locales.html152
-rw-r--r--library/fullcalendar/examples/month-view.html45
-rw-r--r--library/fullcalendar/examples/natural-height.html108
-rw-r--r--library/fullcalendar/examples/php/get-events.php50
-rw-r--r--library/fullcalendar/examples/php/get-time-zones.php9
-rw-r--r--library/fullcalendar/examples/php/utils.php130
-rw-r--r--library/fullcalendar/examples/rrule.html73
-rw-r--r--library/fullcalendar/examples/selectable.html52
-rw-r--r--library/fullcalendar/examples/theming.html215
-rw-r--r--library/fullcalendar/examples/time-zones.html145
-rw-r--r--library/fullcalendar/examples/timegrid-views.html53
-rw-r--r--library/fullcalendar/examples/week-numbers.html118
-rw-r--r--library/fullcalendar/packages/bootstrap/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/bootstrap/README.md8
-rw-r--r--library/fullcalendar/packages/bootstrap/main.css36
-rw-r--r--library/fullcalendar/packages/bootstrap/main.d.ts12
-rw-r--r--library/fullcalendar/packages/bootstrap/main.esm.js83
-rw-r--r--library/fullcalendar/packages/bootstrap/main.js91
-rw-r--r--library/fullcalendar/packages/bootstrap/main.min.css1
-rw-r--r--library/fullcalendar/packages/bootstrap/main.min.js6
-rw-r--r--library/fullcalendar/packages/bootstrap/package.json33
-rw-r--r--library/fullcalendar/packages/bootstrap4/index.global.js64
-rw-r--r--library/fullcalendar/packages/bootstrap4/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/bootstrap5/index.global.js64
-rw-r--r--library/fullcalendar/packages/bootstrap5/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/core/README.md8
-rw-r--r--library/fullcalendar/packages/core/index.global.js9646
-rw-r--r--library/fullcalendar/packages/core/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales-all.global.js1794
-rw-r--r--library/fullcalendar/packages/core/locales-all.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales-all.js1405
-rw-r--r--library/fullcalendar/packages/core/locales-all.min.js1
-rw-r--r--library/fullcalendar/packages/core/locales/af.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/af.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/af.js30
-rw-r--r--library/fullcalendar/packages/core/locales/ar-dz.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/ar-dz.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ar-dz.js31
-rw-r--r--library/fullcalendar/packages/core/locales/ar-kw.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/ar-kw.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ar-kw.js31
-rw-r--r--library/fullcalendar/packages/core/locales/ar-ly.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/ar-ly.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ar-ly.js31
-rw-r--r--library/fullcalendar/packages/core/locales/ar-ma.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/ar-ma.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ar-ma.js31
-rw-r--r--library/fullcalendar/packages/core/locales/ar-sa.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/ar-sa.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ar-sa.js31
-rw-r--r--library/fullcalendar/packages/core/locales/ar-tn.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/ar-tn.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ar-tn.js31
-rw-r--r--library/fullcalendar/packages/core/locales/ar.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/ar.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ar.js31
-rw-r--r--library/fullcalendar/packages/core/locales/az.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/az.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/az.js32
-rw-r--r--library/fullcalendar/packages/core/locales/bg.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/bg.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/bg.js31
-rw-r--r--library/fullcalendar/packages/core/locales/bn.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/bn.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/bs.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/bs.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/bs.js32
-rw-r--r--library/fullcalendar/packages/core/locales/ca.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/ca.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ca.js30
-rw-r--r--library/fullcalendar/packages/core/locales/cs.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/cs.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/cs.js32
-rw-r--r--library/fullcalendar/packages/core/locales/cy.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/cy.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/da.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/da.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/da.js30
-rw-r--r--library/fullcalendar/packages/core/locales/de-at.global.js69
-rw-r--r--library/fullcalendar/packages/core/locales/de-at.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/de.global.js69
-rw-r--r--library/fullcalendar/packages/core/locales/de.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/de.js33
-rw-r--r--library/fullcalendar/packages/core/locales/el.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/el.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/el.js30
-rw-r--r--library/fullcalendar/packages/core/locales/en-au.global.js29
-rw-r--r--library/fullcalendar/packages/core/locales/en-au.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/en-au.js17
-rw-r--r--library/fullcalendar/packages/core/locales/en-gb.global.js29
-rw-r--r--library/fullcalendar/packages/core/locales/en-gb.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/en-gb.js17
-rw-r--r--library/fullcalendar/packages/core/locales/en-nz.global.js29
-rw-r--r--library/fullcalendar/packages/core/locales/en-nz.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/en-nz.js17
-rw-r--r--library/fullcalendar/packages/core/locales/eo.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/eo.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/es-us.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/es-us.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/es-us.js30
-rw-r--r--library/fullcalendar/packages/core/locales/es.global.js51
-rw-r--r--library/fullcalendar/packages/core/locales/es.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/es.js30
-rw-r--r--library/fullcalendar/packages/core/locales/et.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/et.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/et.js32
-rw-r--r--library/fullcalendar/packages/core/locales/eu.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/eu.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/eu.js30
-rw-r--r--library/fullcalendar/packages/core/locales/fa.global.js35
-rw-r--r--library/fullcalendar/packages/core/locales/fa.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/fa.js33
-rw-r--r--library/fullcalendar/packages/core/locales/fi.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/fi.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/fi.js30
-rw-r--r--library/fullcalendar/packages/core/locales/fr-ca.global.js29
-rw-r--r--library/fullcalendar/packages/core/locales/fr-ca.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/fr-ca.js27
-rw-r--r--library/fullcalendar/packages/core/locales/fr-ch.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/fr-ch.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/fr-ch.js31
-rw-r--r--library/fullcalendar/packages/core/locales/fr.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/fr.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/fr.js31
-rw-r--r--library/fullcalendar/packages/core/locales/gl.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/gl.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/gl.js30
-rw-r--r--library/fullcalendar/packages/core/locales/he.global.js29
-rw-r--r--library/fullcalendar/packages/core/locales/he.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/he.js27
-rw-r--r--library/fullcalendar/packages/core/locales/hi.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/hi.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/hi.js32
-rw-r--r--library/fullcalendar/packages/core/locales/hr.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/hr.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/hr.js32
-rw-r--r--library/fullcalendar/packages/core/locales/hu.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/hu.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/hu.js30
-rw-r--r--library/fullcalendar/packages/core/locales/hy-am.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/hy-am.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/id.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/id.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/id.js30
-rw-r--r--library/fullcalendar/packages/core/locales/is.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/is.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/is.js30
-rw-r--r--library/fullcalendar/packages/core/locales/it.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/it.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/it.js32
-rw-r--r--library/fullcalendar/packages/core/locales/ja.global.js30
-rw-r--r--library/fullcalendar/packages/core/locales/ja.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ja.js28
-rw-r--r--library/fullcalendar/packages/core/locales/ka.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/ka.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ka.js32
-rw-r--r--library/fullcalendar/packages/core/locales/kk.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/kk.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/kk.js32
-rw-r--r--library/fullcalendar/packages/core/locales/km.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/km.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ko.global.js28
-rw-r--r--library/fullcalendar/packages/core/locales/ko.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ko.js26
-rw-r--r--library/fullcalendar/packages/core/locales/ku.global.js33
-rw-r--r--library/fullcalendar/packages/core/locales/ku.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/lb.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/lb.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/lb.js30
-rw-r--r--library/fullcalendar/packages/core/locales/lt.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/lt.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/lt.js30
-rw-r--r--library/fullcalendar/packages/core/locales/lv.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/lv.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/lv.js32
-rw-r--r--library/fullcalendar/packages/core/locales/mk.global.js30
-rw-r--r--library/fullcalendar/packages/core/locales/mk.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/mk.js28
-rw-r--r--library/fullcalendar/packages/core/locales/ms.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/ms.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ms.js32
-rw-r--r--library/fullcalendar/packages/core/locales/nb.global.js43
-rw-r--r--library/fullcalendar/packages/core/locales/nb.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/nb.js30
-rw-r--r--library/fullcalendar/packages/core/locales/ne.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/ne.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/nl.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/nl.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/nl.js30
-rw-r--r--library/fullcalendar/packages/core/locales/nn.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/nn.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/nn.js30
-rw-r--r--library/fullcalendar/packages/core/locales/pl.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/pl.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/pl.js30
-rw-r--r--library/fullcalendar/packages/core/locales/pt-br.global.js30
-rw-r--r--library/fullcalendar/packages/core/locales/pt-br.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/pt-br.js28
-rw-r--r--library/fullcalendar/packages/core/locales/pt.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/pt.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/pt.js30
-rw-r--r--library/fullcalendar/packages/core/locales/ro.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/ro.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ro.js32
-rw-r--r--library/fullcalendar/packages/core/locales/ru.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/ru.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ru.js32
-rw-r--r--library/fullcalendar/packages/core/locales/si-lk.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/si-lk.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/sk.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/sk.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/sk.js32
-rw-r--r--library/fullcalendar/packages/core/locales/sl.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/sl.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/sl.js30
-rw-r--r--library/fullcalendar/packages/core/locales/sm.global.js28
-rw-r--r--library/fullcalendar/packages/core/locales/sm.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/sq.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/sq.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/sq.js32
-rw-r--r--library/fullcalendar/packages/core/locales/sr-cyrl.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/sr-cyrl.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/sr-cyrl.js32
-rw-r--r--library/fullcalendar/packages/core/locales/sr.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/sr.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/sr.js32
-rw-r--r--library/fullcalendar/packages/core/locales/sv.global.js52
-rw-r--r--library/fullcalendar/packages/core/locales/sv.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/sv.js30
-rw-r--r--library/fullcalendar/packages/core/locales/ta-in.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/ta-in.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/th.global.js35
-rw-r--r--library/fullcalendar/packages/core/locales/th.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/th.js33
-rw-r--r--library/fullcalendar/packages/core/locales/tr.global.js32
-rw-r--r--library/fullcalendar/packages/core/locales/tr.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/tr.js30
-rw-r--r--library/fullcalendar/packages/core/locales/ug.global.js22
-rw-r--r--library/fullcalendar/packages/core/locales/ug.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/ug.js20
-rw-r--r--library/fullcalendar/packages/core/locales/uk.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/uk.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/uk.js32
-rw-r--r--library/fullcalendar/packages/core/locales/uz.global.js26
-rw-r--r--library/fullcalendar/packages/core/locales/uz.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/uz.js24
-rw-r--r--library/fullcalendar/packages/core/locales/vi.global.js34
-rw-r--r--library/fullcalendar/packages/core/locales/vi.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/vi.js32
-rw-r--r--library/fullcalendar/packages/core/locales/zh-cn.global.js35
-rw-r--r--library/fullcalendar/packages/core/locales/zh-cn.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/zh-cn.js33
-rw-r--r--library/fullcalendar/packages/core/locales/zh-tw.global.js28
-rw-r--r--library/fullcalendar/packages/core/locales/zh-tw.global.min.js6
-rw-r--r--library/fullcalendar/packages/core/locales/zh-tw.js26
-rw-r--r--library/fullcalendar/packages/core/main.css1052
-rw-r--r--library/fullcalendar/packages/core/main.d.ts2736
-rw-r--r--library/fullcalendar/packages/core/main.esm.js8582
-rw-r--r--library/fullcalendar/packages/core/main.js8745
-rw-r--r--library/fullcalendar/packages/core/main.min.css1
-rw-r--r--library/fullcalendar/packages/core/main.min.js6
-rw-r--r--library/fullcalendar/packages/core/package.json30
-rw-r--r--library/fullcalendar/packages/daygrid/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/daygrid/README.md8
-rw-r--r--library/fullcalendar/packages/daygrid/index.global.js909
-rw-r--r--library/fullcalendar/packages/daygrid/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/daygrid/main.css78
-rw-r--r--library/fullcalendar/packages/daygrid/main.d.ts316
-rw-r--r--library/fullcalendar/packages/daygrid/main.esm.js1655
-rw-r--r--library/fullcalendar/packages/daygrid/main.js1669
-rw-r--r--library/fullcalendar/packages/daygrid/main.min.css1
-rw-r--r--library/fullcalendar/packages/daygrid/main.min.js6
-rw-r--r--library/fullcalendar/packages/daygrid/package.json33
-rw-r--r--library/fullcalendar/packages/google-calendar/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/google-calendar/README.md8
-rw-r--r--library/fullcalendar/packages/google-calendar/index.global.js150
-rw-r--r--library/fullcalendar/packages/google-calendar/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/google-calendar/main.d.ts21
-rw-r--r--library/fullcalendar/packages/google-calendar/main.esm.js167
-rw-r--r--library/fullcalendar/packages/google-calendar/main.js175
-rw-r--r--library/fullcalendar/packages/google-calendar/main.min.js6
-rw-r--r--library/fullcalendar/packages/google-calendar/package.json33
-rw-r--r--library/fullcalendar/packages/icalendar/index.global.js225
-rw-r--r--library/fullcalendar/packages/icalendar/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/interaction/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/interaction/README.md8
-rw-r--r--library/fullcalendar/packages/interaction/index.global.js2114
-rw-r--r--library/fullcalendar/packages/interaction/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/interaction/main.d.ts323
-rw-r--r--library/fullcalendar/packages/interaction/main.esm.js2141
-rw-r--r--library/fullcalendar/packages/interaction/main.js2152
-rw-r--r--library/fullcalendar/packages/interaction/main.min.js6
-rw-r--r--library/fullcalendar/packages/interaction/package.json33
-rw-r--r--library/fullcalendar/packages/list/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/list/README.md8
-rw-r--r--library/fullcalendar/packages/list/index.global.js332
-rw-r--r--library/fullcalendar/packages/list/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/list/main.css118
-rw-r--r--library/fullcalendar/packages/list/main.d.ts36
-rw-r--r--library/fullcalendar/packages/list/main.esm.js348
-rw-r--r--library/fullcalendar/packages/list/main.js356
-rw-r--r--library/fullcalendar/packages/list/main.min.css1
-rw-r--r--library/fullcalendar/packages/list/main.min.js6
-rw-r--r--library/fullcalendar/packages/list/package.json33
-rw-r--r--library/fullcalendar/packages/luxon/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/luxon/README.md8
-rw-r--r--library/fullcalendar/packages/luxon/main.d.ts14
-rw-r--r--library/fullcalendar/packages/luxon/main.esm.js162
-rw-r--r--library/fullcalendar/packages/luxon/main.js170
-rw-r--r--library/fullcalendar/packages/luxon/main.min.js6
-rw-r--r--library/fullcalendar/packages/luxon/package.json34
-rw-r--r--library/fullcalendar/packages/luxon1/index.global.js128
-rw-r--r--library/fullcalendar/packages/luxon1/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/luxon2/index.global.js131
-rw-r--r--library/fullcalendar/packages/luxon2/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/moment-timezone/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/moment-timezone/README.md8
-rw-r--r--library/fullcalendar/packages/moment-timezone/index.global.js35
-rw-r--r--library/fullcalendar/packages/moment-timezone/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/moment-timezone/main.d.ts11
-rw-r--r--library/fullcalendar/packages/moment-timezone/main.esm.js58
-rw-r--r--library/fullcalendar/packages/moment-timezone/main.js64
-rw-r--r--library/fullcalendar/packages/moment-timezone/main.min.js6
-rw-r--r--library/fullcalendar/packages/moment-timezone/package.json35
-rw-r--r--library/fullcalendar/packages/moment/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/moment/README.md8
-rw-r--r--library/fullcalendar/packages/moment/index.global.js113
-rw-r--r--library/fullcalendar/packages/moment/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/moment/main.d.ts14
-rw-r--r--library/fullcalendar/packages/moment/main.esm.js102
-rw-r--r--library/fullcalendar/packages/moment/main.js110
-rw-r--r--library/fullcalendar/packages/moment/main.min.js6
-rw-r--r--library/fullcalendar/packages/moment/package.json34
-rw-r--r--library/fullcalendar/packages/rrule/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/rrule/README.md8
-rw-r--r--library/fullcalendar/packages/rrule/index.global.js145
-rw-r--r--library/fullcalendar/packages/rrule/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/rrule/main.d.ts9
-rw-r--r--library/fullcalendar/packages/rrule/main.esm.js121
-rw-r--r--library/fullcalendar/packages/rrule/main.js128
-rw-r--r--library/fullcalendar/packages/rrule/main.min.js6
-rw-r--r--library/fullcalendar/packages/rrule/package.json34
-rw-r--r--library/fullcalendar/packages/timegrid/LICENSE.txt20
-rw-r--r--library/fullcalendar/packages/timegrid/README.md8
-rw-r--r--library/fullcalendar/packages/timegrid/index.global.js1198
-rw-r--r--library/fullcalendar/packages/timegrid/index.global.min.js6
-rw-r--r--library/fullcalendar/packages/timegrid/main.css309
-rw-r--r--library/fullcalendar/packages/timegrid/main.d.ts224
-rw-r--r--library/fullcalendar/packages/timegrid/main.esm.js1391
-rw-r--r--library/fullcalendar/packages/timegrid/main.js1403
-rw-r--r--library/fullcalendar/packages/timegrid/main.min.css1
-rw-r--r--library/fullcalendar/packages/timegrid/main.min.js6
-rw-r--r--library/fullcalendar/packages/timegrid/package.json36
-rw-r--r--library/fullcalendar/packages/web-component/index.global.js70
-rw-r--r--library/fullcalendar/packages/web-component/index.global.min.js6
-rw-r--r--library/fullcalendar/vendor/rrule.js3808
-rw-r--r--library/textcomplete/textcomplete.js6
-rw-r--r--library/textcomplete/textcomplete.min.js4
-rw-r--r--util/hmessages.po16447
-rw-r--r--vendor/chillerlan/php-qrcode/.github/FUNDING.yml2
-rw-r--r--vendor/chillerlan/php-qrcode/.github/workflows/tests.yml82
-rw-r--r--vendor/chillerlan/php-qrcode/.gitignore5
-rw-r--r--vendor/chillerlan/php-qrcode/.phan/config.php55
-rw-r--r--vendor/chillerlan/php-qrcode/.phan/stubs/imagick.php6744
-rw-r--r--vendor/chillerlan/php-qrcode/.scrutinizer.yml16
-rw-r--r--vendor/chillerlan/php-qrcode/LICENSE21
-rw-r--r--vendor/chillerlan/php-qrcode/README.md422
-rw-r--r--vendor/chillerlan/php-qrcode/composer.json61
-rw-r--r--vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php38
-rw-r--r--vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php81
-rw-r--r--vendor/chillerlan/php-qrcode/examples/QRImageWithText.php100
-rw-r--r--vendor/chillerlan/php-qrcode/examples/custom_output.php38
-rw-r--r--vendor/chillerlan/php-qrcode/examples/example_image.pngbin0 -> 2279 bytes
-rw-r--r--vendor/chillerlan/php-qrcode/examples/example_svg.pngbin0 -> 15925 bytes
-rw-r--r--vendor/chillerlan/php-qrcode/examples/fpdf.php47
-rw-r--r--vendor/chillerlan/php-qrcode/examples/html.php102
-rw-r--r--vendor/chillerlan/php-qrcode/examples/image.php63
-rw-r--r--vendor/chillerlan/php-qrcode/examples/imageWithLogo.php45
-rw-r--r--vendor/chillerlan/php-qrcode/examples/imageWithText.php33
-rw-r--r--vendor/chillerlan/php-qrcode/examples/imagick.php59
-rw-r--r--vendor/chillerlan/php-qrcode/examples/octocat.pngbin0 -> 2468 bytes
-rw-r--r--vendor/chillerlan/php-qrcode/examples/svg.php78
-rw-r--r--vendor/chillerlan/php-qrcode/examples/text.php68
-rw-r--r--vendor/chillerlan/php-qrcode/phpdoc.xml20
-rw-r--r--vendor/chillerlan/php-qrcode/phpunit.xml26
-rw-r--r--vendor/chillerlan/php-qrcode/public/index.html163
-rw-r--r--vendor/chillerlan/php-qrcode/public/qrcode.php97
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/AlphaNum.php60
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/Byte.php44
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/Kanji.php69
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php203
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/Number.php77
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php17
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php311
-rw-r--r--vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php200
-rwxr-xr-xvendor/chillerlan/php-qrcode/src/Data/QRMatrix.php740
-rw-r--r--vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php89
-rw-r--r--vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php178
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php17
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php113
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRImage.php217
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRImagick.php119
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php160
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php129
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php54
-rw-r--r--vendor/chillerlan/php-qrcode/src/Output/QRString.php76
-rwxr-xr-xvendor/chillerlan/php-qrcode/src/QRCode.php313
-rw-r--r--vendor/chillerlan/php-qrcode/src/QRCodeException.php20
-rw-r--r--vendor/chillerlan/php-qrcode/src/QROptions.php54
-rw-r--r--vendor/chillerlan/php-qrcode/src/QROptionsTrait.php341
-rw-r--r--vendor/chillerlan/php-settings-container/.github/FUNDING.yml2
-rw-r--r--vendor/chillerlan/php-settings-container/.github/workflows/tests.yml105
-rw-r--r--vendor/chillerlan/php-settings-container/.gitignore4
-rw-r--r--vendor/chillerlan/php-settings-container/.phan/config.php54
-rw-r--r--vendor/chillerlan/php-settings-container/.scrutinizer.yml14
-rw-r--r--vendor/chillerlan/php-settings-container/LICENSE21
-rw-r--r--vendor/chillerlan/php-settings-container/README.md156
-rw-r--r--vendor/chillerlan/php-settings-container/composer.json50
-rw-r--r--vendor/chillerlan/php-settings-container/docs/Readme.md13
-rw-r--r--vendor/chillerlan/php-settings-container/examples/advanced.php51
-rw-r--r--vendor/chillerlan/php-settings-container/examples/simple.php29
-rw-r--r--vendor/chillerlan/php-settings-container/phpdoc.xml20
-rw-r--r--vendor/chillerlan/php-settings-container/phpunit.xml26
-rw-r--r--vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php162
-rw-r--r--vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php74
-rw-r--r--vendor/composer/ClassLoader.php40
-rw-r--r--vendor/composer/autoload_classmap.php55
-rw-r--r--vendor/composer/autoload_psr4.php4
-rw-r--r--vendor/composer/autoload_real.php6
-rw-r--r--vendor/composer/autoload_static.php81
-rw-r--r--vendor/composer/installed.json346
-rw-r--r--vendor/composer/installed.php60
-rw-r--r--vendor/composer/platform_check.php4
-rw-r--r--vendor/paragonie/constant_time_encoding/LICENSE.txt48
-rw-r--r--vendor/paragonie/constant_time_encoding/README.md84
-rw-r--r--vendor/paragonie/constant_time_encoding/composer.json56
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Base32.php519
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Base32Hex.php111
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Base64.php314
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php88
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php82
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php95
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Binary.php90
-rw-r--r--vendor/paragonie/constant_time_encoding/src/EncoderInterface.php52
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Encoding.php262
-rw-r--r--vendor/paragonie/constant_time_encoding/src/Hex.php146
-rw-r--r--vendor/paragonie/constant_time_encoding/src/RFC4648.php186
-rw-r--r--vendor/simplepie/simplepie/.php-cs-fixer.dist.php8
-rw-r--r--vendor/simplepie/simplepie/CHANGELOG.md53
-rw-r--r--vendor/simplepie/simplepie/README.markdown17
-rw-r--r--vendor/simplepie/simplepie/composer.json3
-rwxr-xr-xvendor/simplepie/simplepie/library/SimplePie.php146
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Author.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/File.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php6
-rwxr-xr-xvendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Caption.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Category.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Copyright.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Core.php2
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Credit.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php2
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Enclosure.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Exception.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/File.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/IRI.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Item.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Locator.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Misc.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Parser.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Rating.php6
-rwxr-xr-xvendor/simplepie/simplepie/library/SimplePie/Registry.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Restriction.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Sanitize.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Source.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/gzdecode.php6
-rw-r--r--vendor/simplepie/simplepie/src/Author.php2
-rw-r--r--vendor/simplepie/simplepie/src/Cache.php16
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Base.php11
-rw-r--r--vendor/simplepie/simplepie/src/Cache/BaseDataCache.php159
-rw-r--r--vendor/simplepie/simplepie/src/Cache/CallableNameFilter.php89
-rw-r--r--vendor/simplepie/simplepie/src/Cache/DB.php5
-rw-r--r--vendor/simplepie/simplepie/src/Cache/DataCache.php120
-rw-r--r--vendor/simplepie/simplepie/src/Cache/File.php7
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Memcache.php9
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Memcached.php11
-rw-r--r--vendor/simplepie/simplepie/src/Cache/MySQL.php11
-rw-r--r--vendor/simplepie/simplepie/src/Cache/NameFilter.php76
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Psr16.php147
-rw-r--r--vendor/simplepie/simplepie/src/Cache/Redis.php14
-rw-r--r--vendor/simplepie/simplepie/src/Caption.php2
-rw-r--r--vendor/simplepie/simplepie/src/Category.php2
-rw-r--r--vendor/simplepie/simplepie/src/Content/Type/Sniffer.php2
-rw-r--r--vendor/simplepie/simplepie/src/Copyright.php2
-rw-r--r--vendor/simplepie/simplepie/src/Credit.php2
-rw-r--r--vendor/simplepie/simplepie/src/Enclosure.php5
-rw-r--r--vendor/simplepie/simplepie/src/Exception.php2
-rw-r--r--vendor/simplepie/simplepie/src/File.php2
-rw-r--r--vendor/simplepie/simplepie/src/Gzdecode.php4
-rw-r--r--vendor/simplepie/simplepie/src/HTTP/Parser.php90
-rw-r--r--vendor/simplepie/simplepie/src/IRI.php79
-rw-r--r--vendor/simplepie/simplepie/src/Item.php162
-rw-r--r--vendor/simplepie/simplepie/src/Locator.php60
-rw-r--r--vendor/simplepie/simplepie/src/Misc.php33
-rw-r--r--vendor/simplepie/simplepie/src/Net/IPv6.php6
-rw-r--r--vendor/simplepie/simplepie/src/Parse/Date.php104
-rw-r--r--vendor/simplepie/simplepie/src/Parser.php22
-rw-r--r--vendor/simplepie/simplepie/src/Rating.php2
-rw-r--r--vendor/simplepie/simplepie/src/Registry.php144
-rw-r--r--vendor/simplepie/simplepie/src/RegistryAware.php65
-rw-r--r--vendor/simplepie/simplepie/src/Restriction.php2
-rw-r--r--vendor/simplepie/simplepie/src/Sanitize.php90
-rw-r--r--vendor/simplepie/simplepie/src/SimplePie.php637
-rw-r--r--vendor/simplepie/simplepie/src/Source.php42
-rw-r--r--vendor/simplepie/simplepie/src/XML/Declaration/Parser.php73
-rw-r--r--vendor/smarty/smarty/CHANGELOG.md26
-rw-r--r--vendor/smarty/smarty/README.md2
-rw-r--r--vendor/smarty/smarty/demo/configs/test.conf5
-rw-r--r--vendor/smarty/smarty/demo/index.php35
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.apc.php85
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.memcache.php99
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php183
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.pdo.php346
-rw-r--r--vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php42
-rw-r--r--vendor/smarty/smarty/demo/plugins/resource.extendsall.php62
-rw-r--r--vendor/smarty/smarty/demo/plugins/resource.mysql.php101
-rw-r--r--vendor/smarty/smarty/demo/plugins/resource.mysqls.php77
-rw-r--r--vendor/smarty/smarty/demo/templates/footer.tpl2
-rw-r--r--vendor/smarty/smarty/demo/templates/header.tpl5
-rw-r--r--vendor/smarty/smarty/demo/templates/index.tpl87
-rw-r--r--vendor/smarty/smarty/docs/_config.yml1
-rw-r--r--vendor/smarty/smarty/docs/appendixes/tips.md269
-rw-r--r--vendor/smarty/smarty/docs/appendixes/troubleshooting.md120
-rw-r--r--vendor/smarty/smarty/docs/designers/chapter-debugging-console.md41
-rw-r--r--vendor/smarty/smarty/docs/designers/config-files.md77
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax.md33
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md84
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md29
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md50
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md71
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md40
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md61
-rw-r--r--vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md111
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions.md38
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md49
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md148
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md191
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md76
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md82
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md91
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md18
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md37
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md97
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md407
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md88
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md121
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md192
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md86
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md55
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md36
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md23
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md644
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md42
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-shortform-assign.md84
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md48
-rw-r--r--vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md43
-rw-r--r--vendor/smarty/smarty/docs/designers/language-combining-modifiers.md35
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions.md21
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md41
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md57
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md15
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md84
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md59
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md113
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md56
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md155
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md112
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-date.md119
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-time.md98
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-table.md89
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md56
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-math.md104
-rw-r--r--vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md190
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers.md123
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-capitalize.md41
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-cat.md31
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-characters.md39
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-paragraphs.md38
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-sentences.md37
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-words.md33
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-date-format.md175
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-default.md41
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md74
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md19
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-indent.md62
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-lower.md33
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-nl2br.md35
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-regex-replace.md51
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-replace.md40
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-spacify.md40
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-string-format.md39
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip-tags.md41
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip.md40
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md19
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-truncate.md52
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-unescape.md39
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md31
-rw-r--r--vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-wordwrap.md69
-rw-r--r--vendor/smarty/smarty/docs/designers/language-variables.md37
-rw-r--r--vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md142
-rw-r--r--vendor/smarty/smarty/docs/designers/language-variables/language-config-variables.md83
-rw-r--r--vendor/smarty/smarty/docs/designers/language-variables/language-variable-scopes.md61
-rw-r--r--vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md176
-rw-r--r--vendor/smarty/smarty/docs/features.md152
-rw-r--r--vendor/smarty/smarty/docs/getting-started.md169
-rw-r--r--vendor/smarty/smarty/docs/index.md50
-rw-r--r--vendor/smarty/smarty/docs/philosophy.md108
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features.md14
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md99
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md43
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md40
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md36
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md144
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md27
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md15
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md128
-rw-r--r--vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md32
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions.md64
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md49
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-add-plugins-dir.md42
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md49
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md46
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-append.md61
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md42
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md84
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-assign.md34
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-cache.md37
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-clear-assign.md32
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-clear-cache.md60
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-clear-compiled-tpl.md44
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-clear-config.md35
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md61
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md71
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-config-load.md47
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md52
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md99
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-disable-security.md15
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-display.md82
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-enable-security.md41
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md91
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md23
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md23
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-dir.md40
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-vars.md37
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-plugins-dir.md31
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-registered-object.md36
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md40
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md40
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-vars.md37
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md81
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md42
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md21
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md40
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md65
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md93
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md45
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-object.md44
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md110
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md46
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md32
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md32
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md47
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-set-plugins-dir.md46
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md46
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md59
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md22
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-cacheresource.md28
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-filter.md23
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-object.md17
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-plugin.md36
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-resource.md28
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables.md63
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md18
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-auto-literal.md17
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md21
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-dir.md35
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-id.md11
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md30
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-locking.md11
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md12
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-caching-type.md9
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md38
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md27
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-dir.md29
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-id.md44
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-locking.md7
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-compiler-class.md6
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-config-booleanize.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-config-dir.md23
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-config-overwrite.md40
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-config-read-hidden.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md9
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging-ctrl.md20
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging.md17
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md50
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-type.md7
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-default-modifiers.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-default-resource-type.md7
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md50
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md13
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md17
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-escape-html.md21
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-force-cache.md6
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-force-compile.md9
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-locking-timeout.md7
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-merge-compiled-includes.md27
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md28
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-smarty-debug-id.md9
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md36
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md8
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md49
-rw-r--r--vendor/smarty/smarty/docs/programmers/api-variables/variable-use-sub-dirs.md31
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching.md24
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md176
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-custom.md296
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-groups.md60
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md87
-rw-r--r--vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md153
-rw-r--r--vendor/smarty/smarty/docs/programmers/charset.md44
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins.md44
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md95
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md66
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md94
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md18
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md48
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md86
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md51
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md48
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md89
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md128
-rw-r--r--vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md36
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources.md19
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-custom.md111
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-extends.md36
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-file.md160
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-streams.md27
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/resources-string.md73
-rw-r--r--vendor/smarty/smarty/docs/programmers/resources/template-resources.md130
-rw-r--r--vendor/smarty/smarty/docs/programmers/smarty-constants.md26
-rw-r--r--vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex1
-rw-r--r--vendor/smarty/smarty/libs/Autoloader.php9
-rw-r--r--vendor/smarty/smarty/libs/Smarty.class.php15
-rw-r--r--vendor/smarty/smarty/libs/bootstrap.php2
-rw-r--r--vendor/smarty/smarty/libs/functions.php51
-rw-r--r--vendor/smarty/smarty/libs/plugins/function.html_select_date.php4
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.capitalize.php2
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.count.php36
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.date_format.php3
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifier.escape.php81
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php41
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.nl2br.php23
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.round.php23
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.str_repeat.php23
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php4
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.strlen.php23
-rw-r--r--vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php4
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php4
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php4
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php6
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php3
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php6
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php4
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php28
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php4
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php2
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php2
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php6
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php5
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php2
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php12
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php2
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_resource.php4
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php15
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_security.php34
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smarty_variable.php1
-rw-r--r--vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php28
-rwxr-xr-xvendor/smarty/smarty/run-tests-for-all-php-versions.sh44
-rwxr-xr-xvendor/smarty/smarty/run-tests.sh13
-rw-r--r--vendor/spomky-labs/otphp/LICENSE20
-rw-r--r--vendor/spomky-labs/otphp/README.md42
-rw-r--r--vendor/spomky-labs/otphp/SECURITY.md87
-rw-r--r--vendor/spomky-labs/otphp/composer.json57
-rw-r--r--vendor/spomky-labs/otphp/src/Factory.php85
-rw-r--r--vendor/spomky-labs/otphp/src/FactoryInterface.php14
-rw-r--r--vendor/spomky-labs/otphp/src/HOTP.php124
-rw-r--r--vendor/spomky-labs/otphp/src/HOTPInterface.php34
-rw-r--r--vendor/spomky-labs/otphp/src/OTP.php129
-rw-r--r--vendor/spomky-labs/otphp/src/OTPInterface.php110
-rw-r--r--vendor/spomky-labs/otphp/src/ParameterTrait.php188
-rw-r--r--vendor/spomky-labs/otphp/src/TOTP.php172
-rw-r--r--vendor/spomky-labs/otphp/src/TOTPInterface.php47
-rw-r--r--vendor/spomky-labs/otphp/src/Url.php88
-rw-r--r--vendor/twbs/bootstrap/.bundlewatch.config.json26
-rw-r--r--vendor/twbs/bootstrap/.cspell.json1
-rw-r--r--vendor/twbs/bootstrap/.eslintrc.json2
-rw-r--r--vendor/twbs/bootstrap/.github/CONTRIBUTING.md18
-rw-r--r--vendor/twbs/bootstrap/.github/PULL_REQUEST_TEMPLATE.md2
-rw-r--r--vendor/twbs/bootstrap/.github/codeql/codeql-config.yml3
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/browserstack.yml7
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/bundlewatch.yml7
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/calibreapp-image-actions.yml2
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/codeql.yml10
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/cspell.yml10
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/css.yml7
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/docs.yml7
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/issue-close-require.yml7
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/issue-labeled.yml7
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/js.yml11
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/lint.yml7
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/node-sass.yml7
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/release-notes.yml7
-rw-r--r--vendor/twbs/bootstrap/.github/workflows/scorecards.yml65
-rw-r--r--vendor/twbs/bootstrap/CODE_OF_CONDUCT.md20
-rw-r--r--vendor/twbs/bootstrap/LICENSE1
-rw-r--r--vendor/twbs/bootstrap/README.md35
-rw-r--r--vendor/twbs/bootstrap/build/build-plugins.js5
-rw-r--r--vendor/twbs/bootstrap/build/change-version.js1
-rw-r--r--vendor/twbs/bootstrap/build/generate-sri.js1
-rw-r--r--vendor/twbs/bootstrap/build/rollup.config.js2
-rw-r--r--vendor/twbs/bootstrap/build/vnu-jar.js1
-rw-r--r--vendor/twbs/bootstrap/config.yml34
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-grid.css234
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css5
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css234
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css5
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css123
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css5
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css123
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css5
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css926
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css5
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css926
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css5
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap.css1737
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap.min.css5
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css1741
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css5
-rw-r--r--vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css.map2
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js1765
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map2
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js4
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map2
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.esm.js1763
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.esm.js.map2
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js4
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js.map2
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.js1770
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.js.map2
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.min.js4
-rw-r--r--vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/.eslintrc.json26
-rw-r--r--vendor/twbs/bootstrap/js/dist/alert.js47
-rw-r--r--vendor/twbs/bootstrap/js/dist/alert.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/base-component.js53
-rw-r--r--vendor/twbs/bootstrap/js/dist/base-component.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/button.js34
-rw-r--r--vendor/twbs/bootstrap/js/dist/button.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/carousel.js178
-rw-r--r--vendor/twbs/bootstrap/js/dist/carousel.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/collapse.js135
-rw-r--r--vendor/twbs/bootstrap/js/dist/collapse.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/dom/data.js18
-rw-r--r--vendor/twbs/bootstrap/js/dist/dom/data.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/dom/event-handler.js77
-rw-r--r--vendor/twbs/bootstrap/js/dist/dom/event-handler.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/dom/manipulator.js19
-rw-r--r--vendor/twbs/bootstrap/js/dist/dom/manipulator.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/dom/selector-engine.js63
-rw-r--r--vendor/twbs/bootstrap/js/dist/dom/selector-engine.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/dropdown.js212
-rw-r--r--vendor/twbs/bootstrap/js/dist/dropdown.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/modal.js175
-rw-r--r--vendor/twbs/bootstrap/js/dist/modal.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/offcanvas.js141
-rw-r--r--vendor/twbs/bootstrap/js/dist/offcanvas.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/popover.js45
-rw-r--r--vendor/twbs/bootstrap/js/dist/popover.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/scrollspy.js134
-rw-r--r--vendor/twbs/bootstrap/js/dist/scrollspy.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/tab.js150
-rw-r--r--vendor/twbs/bootstrap/js/dist/tab.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/toast.js97
-rw-r--r--vendor/twbs/bootstrap/js/dist/toast.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/tooltip.js262
-rw-r--r--vendor/twbs/bootstrap/js/dist/tooltip.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/backdrop.js75
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/backdrop.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/component-functions.js30
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/component-functions.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/config.js35
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/config.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/focustrap.js53
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/focustrap.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/index.js151
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/index.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/sanitizer.js26
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/sanitizer.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/scrollbar.js67
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/scrollbar.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/swipe.js68
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/swipe.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/template-factory.js70
-rw-r--r--vendor/twbs/bootstrap/js/dist/util/template-factory.js.map2
-rw-r--r--vendor/twbs/bootstrap/js/index.esm.js26
-rw-r--r--vendor/twbs/bootstrap/js/index.umd.js26
-rw-r--r--vendor/twbs/bootstrap/js/src/alert.js10
-rw-r--r--vendor/twbs/bootstrap/js/src/base-component.js12
-rw-r--r--vendor/twbs/bootstrap/js/src/button.js8
-rw-r--r--vendor/twbs/bootstrap/js/src/carousel.js17
-rw-r--r--vendor/twbs/bootstrap/js/src/collapse.js23
-rw-r--r--vendor/twbs/bootstrap/js/src/dom/data.js2
-rw-r--r--vendor/twbs/bootstrap/js/src/dom/event-handler.js14
-rw-r--r--vendor/twbs/bootstrap/js/src/dom/manipulator.js2
-rw-r--r--vendor/twbs/bootstrap/js/src/dom/selector-engine.js53
-rw-r--r--vendor/twbs/bootstrap/js/src/dropdown.js19
-rw-r--r--vendor/twbs/bootstrap/js/src/modal.js20
-rw-r--r--vendor/twbs/bootstrap/js/src/offcanvas.js21
-rw-r--r--vendor/twbs/bootstrap/js/src/popover.js6
-rw-r--r--vendor/twbs/bootstrap/js/src/scrollspy.js10
-rw-r--r--vendor/twbs/bootstrap/js/src/tab.js16
-rw-r--r--vendor/twbs/bootstrap/js/src/toast.js10
-rw-r--r--vendor/twbs/bootstrap/js/src/tooltip.js52
-rw-r--r--vendor/twbs/bootstrap/js/src/util/backdrop.js8
-rw-r--r--vendor/twbs/bootstrap/js/src/util/component-functions.js9
-rw-r--r--vendor/twbs/bootstrap/js/src/util/config.js9
-rw-r--r--vendor/twbs/bootstrap/js/src/util/focustrap.js8
-rw-r--r--vendor/twbs/bootstrap/js/src/util/index.js68
-rw-r--r--vendor/twbs/bootstrap/js/src/util/sanitizer.js2
-rw-r--r--vendor/twbs/bootstrap/js/src/util/scrollbar.js8
-rw-r--r--vendor/twbs/bootstrap/js/src/util/swipe.js8
-rw-r--r--vendor/twbs/bootstrap/js/src/util/template-factory.js12
-rw-r--r--vendor/twbs/bootstrap/nuget/bootstrap.nuspec5
-rw-r--r--vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec5
-rw-r--r--vendor/twbs/bootstrap/package-lock.json2560
-rw-r--r--vendor/twbs/bootstrap/package.js2
-rw-r--r--vendor/twbs/bootstrap/package.json54
-rw-r--r--vendor/twbs/bootstrap/scss/_accordion.scss9
-rw-r--r--vendor/twbs/bootstrap/scss/_alert.scss19
-rw-r--r--vendor/twbs/bootstrap/scss/_button-group.scss4
-rw-r--r--vendor/twbs/bootstrap/scss/_card.scss4
-rw-r--r--vendor/twbs/bootstrap/scss/_carousel.scss17
-rw-r--r--vendor/twbs/bootstrap/scss/_close.scss39
-rw-r--r--vendor/twbs/bootstrap/scss/_dropdown.scss1
-rw-r--r--vendor/twbs/bootstrap/scss/_functions.scss2
-rw-r--r--vendor/twbs/bootstrap/scss/_list-group.scss26
-rw-r--r--vendor/twbs/bootstrap/scss/_maps.scss67
-rw-r--r--vendor/twbs/bootstrap/scss/_mixins.scss3
-rw-r--r--vendor/twbs/bootstrap/scss/_navbar.scss8
-rw-r--r--vendor/twbs/bootstrap/scss/_offcanvas.scss6
-rw-r--r--vendor/twbs/bootstrap/scss/_pagination.scss2
-rw-r--r--vendor/twbs/bootstrap/scss/_progress.scss11
-rw-r--r--vendor/twbs/bootstrap/scss/_reboot.scss6
-rw-r--r--vendor/twbs/bootstrap/scss/_root.scss132
-rw-r--r--vendor/twbs/bootstrap/scss/_tables.scss2
-rw-r--r--vendor/twbs/bootstrap/scss/_utilities.scss119
-rw-r--r--vendor/twbs/bootstrap/scss/_variables-dark.scss70
-rw-r--r--vendor/twbs/bootstrap/scss/_variables.scss327
-rw-r--r--vendor/twbs/bootstrap/scss/bootstrap-grid.scss2
-rw-r--r--vendor/twbs/bootstrap/scss/bootstrap-reboot.scss1
-rw-r--r--vendor/twbs/bootstrap/scss/bootstrap-utilities.scss4
-rw-r--r--vendor/twbs/bootstrap/scss/bootstrap.scss1
-rw-r--r--vendor/twbs/bootstrap/scss/forms/_floating-labels.scss15
-rw-r--r--vendor/twbs/bootstrap/scss/forms/_form-check.scss35
-rw-r--r--vendor/twbs/bootstrap/scss/forms/_form-control.scss7
-rw-r--r--vendor/twbs/bootstrap/scss/forms/_form-select.scss12
-rw-r--r--vendor/twbs/bootstrap/scss/forms/_input-group.scss2
-rw-r--r--vendor/twbs/bootstrap/scss/helpers/_colored-links.scss4
-rw-r--r--vendor/twbs/bootstrap/scss/mixins/_alert.scss5
-rw-r--r--vendor/twbs/bootstrap/scss/mixins/_banner.scss4
-rw-r--r--vendor/twbs/bootstrap/scss/mixins/_caret.scss55
-rw-r--r--vendor/twbs/bootstrap/scss/mixins/_color-mode.scss21
-rw-r--r--vendor/twbs/bootstrap/scss/mixins/_forms.scss15
-rw-r--r--vendor/twbs/bootstrap/scss/mixins/_list-group.scss3
-rw-r--r--vendor/twbs/bootstrap/site/.eslintrc.json39
-rw-r--r--vendor/twbs/bootstrap/site/assets/js/code-examples.js2
-rw-r--r--vendor/twbs/bootstrap/site/assets/js/snippets.js9
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_ads.scss6
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_brand.scss4
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_buttons.scss14
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_callouts.scss6
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_clipboard-js.scss6
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_component-examples.scss82
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_content.scss65
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_footer.scss4
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_masthead.scss26
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_navbar.scss58
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_sidebar.scss19
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_syntax.scss26
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_toc.scss13
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/_variables.scss13
-rw-r--r--vendor/twbs/bootstrap/site/assets/scss/docs.scss1
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/_index.html5
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/about/brand.md47
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/about/license.md34
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/about/overview.md29
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/accordion.md165
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/alerts.md257
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/badge.md103
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/buttons.md242
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/card.md739
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/carousel.md385
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/close-button.md38
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/collapse.md198
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/dropdowns.md1124
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/list-group.md494
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/modal.md888
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/navbar.md813
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/navs-tabs.md671
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/offcanvas.md353
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/placeholders.md145
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/popovers.md284
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/progress.md154
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/scrollspy.md427
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/spinners.md213
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/toasts.md401
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/components/tooltips.md301
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/content/reboot.md446
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/content/tables.md835
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/customize/color.md151
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/customize/css-variables.md60
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/customize/options.md31
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/customize/overview.md51
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/customize/sass.md311
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet-rtl/index.html1618
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/index.html1602
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout-rtl/index.html232
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/index.html232
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/cover/cover.css50
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/cover/index.html34
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/index.html347
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-fixed/index.html40
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-static/index.html40
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars-offcanvas/index.html147
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars/index.html416
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/index.html140
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/examples/sign-in/index.html32
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/forms/checks-radios.md307
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/forms/floating-labels.md152
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/forms/form-control.md152
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/forms/input-group.md316
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/forms/overview.md154
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/forms/validation.md380
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/contribute.md67
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/download.md119
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/introduction.md162
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/javascript.md337
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/parcel.md159
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/vite.md198
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/helpers/clearfix.md36
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/helpers/color-background.md52
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/helpers/stacks.md85
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/helpers/stretched-link.md74
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/helpers/vertical-rule.md45
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/helpers/visually-hidden.md29
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/layout/breakpoints.md174
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/layout/columns.md317
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/layout/gutters.md165
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/migration.md504
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/api.md616
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/background.md124
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/borders.md166
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/colors.md113
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/display.md112
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/flex.md666
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/interactions.md42
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/overflow.md40
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/position.md130
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/shadows.md30
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/sizing.md60
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/spacing.md127
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.2/utilities/text.md155
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/_index.html5
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/about/brand.md47
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/about/license.md34
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/about/overview.md29
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/about/team.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/about/team.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/about/translations.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/about/translations.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/accordion.md165
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/alerts.md263
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/badge.md103
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/breadcrumb.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/components/breadcrumb.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/button-group.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/components/button-group.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/buttons.md242
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/card.md739
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/carousel.md448
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/close-button.md44
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/collapse.md198
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/dropdowns.md1134
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/list-group.md500
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/modal.md888
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/navbar.md817
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/navs-tabs.md671
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/offcanvas.md353
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/pagination.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/components/pagination.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/placeholders.md145
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/popovers.md284
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/progress.md169
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/scrollspy.md427
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/spinners.md211
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/toasts.md401
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/components/tooltips.md301
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/content/figures.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/content/figures.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/content/images.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/content/images.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/content/reboot.md475
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/content/tables.md839
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/content/typography.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/content/typography.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/customize/color-modes.md273
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/customize/color.md509
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/customize/components.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/customize/components.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/customize/css-variables.md64
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/customize/optimize.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/customize/optimize.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/customize/options.md32
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/customize/overview.md51
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/customize/sass.md314
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/.stylelintrc (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/.stylelintrc)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/_index.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/_index.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/album-rtl/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/album-rtl/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/album/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/album/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog-rtl/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog-rtl/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog/blog.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog/blog.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog/blog.rtl.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog/blog.rtl.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel-rtl/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel-rtl/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel/carousel.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel/carousel.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel/carousel.rtl.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel/carousel.rtl.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet-rtl/index.html1622
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/cheatsheet.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/cheatsheet.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/cheatsheet.js (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/cheatsheet.js)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/cheatsheet.rtl.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/cheatsheet.rtl.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/index.html1606
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout-rtl/index.html232
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/checkout.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/form-validation.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/checkout.js (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/form-validation.js)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/index.html232
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/cover/cover.css50
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/cover/index.html34
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard-rtl/dashboard.js (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard-rtl/dashboard.js)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard-rtl/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard-rtl/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/dashboard.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/dashboard.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/dashboard.js (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/dashboard.js)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/dashboard.rtl.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/dashboard.rtl.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/dropdowns/dropdowns.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/dropdowns/dropdowns.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/dropdowns/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/dropdowns/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/features.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/features.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/index.html346
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/unsplash-photo-1.jpg (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/unsplash-photo-1.jpg)bin10451 -> 10451 bytes
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/unsplash-photo-2.jpg (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/unsplash-photo-2.jpg)bin113018 -> 113018 bytes
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/unsplash-photo-3.jpg (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/unsplash-photo-3.jpg)bin40607 -> 40607 bytes
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/footers/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/footers/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/grid/grid.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/grid/grid.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/grid/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/grid/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/headers/headers.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/headers/headers.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/headers/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/headers/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/bootstrap-docs.png (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/bootstrap-docs.png)bin371399 -> 371399 bytes
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/bootstrap-themes.png (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/bootstrap-themes.png)bin278159 -> 278159 bytes
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/heroes.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/heroes.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/jumbotron/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/jumbotron/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/list-groups/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/list-groups/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/list-groups/list-groups.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/list-groups/list-groups.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/masonry/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/masonry/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/modals/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/modals/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/modals/modals.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/modals/modals.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-bottom/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-bottom/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-fixed/index.html40
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-fixed/navbar-fixed.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-fixed/navbar-top-fixed.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-static/index.html40
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-static/navbar-static.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-static/navbar-top.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars-offcanvas/index.html147
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars-offcanvas/navbars-offcanvas.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars-offcanvas/navbar.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars/index.html450
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars/navbars.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars/navbar.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/index.html140
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/offcanvas-navbar.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/offcanvas.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/offcanvas-navbar.js (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/offcanvas.js)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/pricing/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/pricing/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/pricing/pricing.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/pricing/pricing.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/product/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/product/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/product/product.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/product/product.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/sidebars/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/sidebars/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/sidebars/sidebars.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/sidebars/sidebars.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/sidebars/sidebars.js (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/sidebars/sidebars.js)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/sign-in/index.html32
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/sign-in/sign-in.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/sign-in/signin.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/starter-template/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/starter-template/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/starter-template/starter-template.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/starter-template/starter-template.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer-navbar/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer-navbar/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer-navbar/sticky-footer-navbar.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer-navbar/sticky-footer-navbar.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer/index.html (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer/index.html)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer/sticky-footer.css (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer/sticky-footer.css)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/forms/checks-radios.md313
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/forms/floating-labels.md180
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/forms/form-control.md160
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/forms/input-group.md319
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/forms/layout.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/forms/layout.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/forms/overview.md154
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/forms/range.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/forms/range.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/forms/select.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/forms/select.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/forms/validation.md380
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/accessibility.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/accessibility.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/best-practices.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/best-practices.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/browsers-devices.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/browsers-devices.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/contents.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/contents.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/contribute.md67
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/download.md119
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/introduction.md162
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/javascript.md342
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/parcel.md159
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/rfs.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/rfs.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/rtl.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/rtl.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/vite.md199
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/webpack.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/webpack.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/clearfix.md36
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/color-background.md50
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/colored-links.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/helpers/colored-links.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/position.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/helpers/position.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/ratio.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/helpers/ratio.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/stacks.md85
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/stretched-link.md74
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/text-truncation.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/helpers/text-truncation.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/vertical-rule.md45
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/helpers/visually-hidden.md29
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/layout/breakpoints.md174
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/layout/columns.md332
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/layout/containers.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/layout/containers.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/layout/css-grid.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/layout/css-grid.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/layout/grid.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/layout/grid.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/layout/gutters.md165
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/layout/utilities.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/layout/utilities.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/layout/z-index.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/layout/z-index.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/migration.md643
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/api.md616
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/background.md130
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/borders.md175
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/colors.md124
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/display.md112
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/flex.md664
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/float.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/utilities/float.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/interactions.md42
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/object-fit.md61
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/opacity.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/utilities/opacity.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/overflow.md99
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/position.md130
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/shadows.md30
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/sizing.md60
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/spacing.md154
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/text.md155
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/vertical-align.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/utilities/vertical-align.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/visibility.md (renamed from vendor/twbs/bootstrap/site/content/docs/5.2/utilities/visibility.md)0
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/5.3/utilities/z-index.md44
-rw-r--r--vendor/twbs/bootstrap/site/content/docs/_index.html2
-rw-r--r--vendor/twbs/bootstrap/site/data/core-team.yml15
-rw-r--r--vendor/twbs/bootstrap/site/data/docs-versions.yml3
-rw-r--r--vendor/twbs/bootstrap/site/data/sidebar.yml3
-rw-r--r--vendor/twbs/bootstrap/site/data/theme-colors.yml1
-rw-r--r--vendor/twbs/bootstrap/site/layouts/_default/baseof.html2
-rw-r--r--vendor/twbs/bootstrap/site/layouts/_default/docs.html15
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/callouts/danger-async-methods.md (renamed from vendor/twbs/bootstrap/site/layouts/partials/callout-danger-async-methods.md)0
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/callouts/info-mediaqueries-breakpoints.md (renamed from vendor/twbs/bootstrap/site/layouts/partials/callout-info-mediaqueries-breakpoints.md)0
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/callouts/info-npm-starter.md (renamed from vendor/twbs/bootstrap/site/layouts/partials/callout-info-npm-starter.md)0
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/callouts/info-prefersreducedmotion.md (renamed from vendor/twbs/bootstrap/site/layouts/partials/callout-info-prefersreducedmotion.md)0
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/callouts/info-sanitizer.md (renamed from vendor/twbs/bootstrap/site/layouts/partials/callout-info-sanitizer.md)0
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/callouts/warning-color-assistive-technologies.md (renamed from vendor/twbs/bootstrap/site/layouts/partials/callout-warning-color-assistive-technologies.md)0
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/callouts/warning-data-bs-title-vs-title.md (renamed from vendor/twbs/bootstrap/site/layouts/partials/callout-warning-data-bs-title-vs-title.md)0
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/callouts/warning-input-support.md (renamed from vendor/twbs/bootstrap/site/layouts/partials/callout-warning-input-support.md)0
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/docs-navbar.html47
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/docs-versions.html14
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/footer.html8
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/header.html3
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/home/components-utilities.html88
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/home/css-variables.html48
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/home/customize.html58
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/home/get-started.html58
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/home/icons.html23
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/home/masthead-followup.html356
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/home/masthead.html8
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/home/plugins.html65
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/home/themes.html23
-rw-r--r--vendor/twbs/bootstrap/site/layouts/partials/icons.html11
-rw-r--r--vendor/twbs/bootstrap/site/layouts/shortcodes/added-in.html2
-rw-r--r--vendor/twbs/bootstrap/site/layouts/shortcodes/callout-deprecated-dark-variants.html9
-rw-r--r--vendor/twbs/bootstrap/site/layouts/shortcodes/deprecated-in.html5
-rw-r--r--vendor/twbs/bootstrap/site/layouts/shortcodes/example.html10
-rw-r--r--vendor/twbs/bootstrap/site/layouts/shortcodes/placeholder.html23
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo-black.svg (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo-black.svg)0
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo-shadow.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo-shadow.png)bin48625 -> 48625 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo-white.svg (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo-white.svg)0
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo.svg (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo.svg)0
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-social-logo.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-social-logo.png)bin145590 -> 145590 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-social.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-social.png)bin724582 -> 724582 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-icons.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-icons.png)bin40798 -> 40798 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-icons@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-icons@2x.png)bin125442 -> 125442 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes-collage.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes-collage.png)bin74829 -> 74829 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes-collage@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes-collage@2x.png)bin244640 -> 244640 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes.png)bin88695 -> 88695 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes@2x.png)bin278159 -> 278159 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album-rtl.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album-rtl.png)bin6392 -> 6392 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album-rtl@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album-rtl@2x.png)bin15450 -> 15450 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album.png)bin10760 -> 10760 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album@2x.png)bin25026 -> 25026 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog-rtl.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog-rtl.png)bin12545 -> 12545 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog-rtl@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog-rtl@2x.png)bin31035 -> 31035 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog.png)bin15245 -> 15245 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog@2x.png)bin36944 -> 36944 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel-rtl.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel-rtl.png)bin10344 -> 10344 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel-rtl@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel-rtl@2x.png)bin24535 -> 24535 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel.png)bin13314 -> 13314 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel@2x.png)bin31465 -> 31465 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet-rtl.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet-rtl.png)bin6089 -> 6089 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet-rtl@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet-rtl@2x.png)bin13863 -> 13863 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet.png)bin8132 -> 8132 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet@2x.png)bin19324 -> 19324 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout-rtl.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout-rtl.png)bin8848 -> 8848 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout-rtl@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout-rtl@2x.png)bin21965 -> 21965 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout.png)bin7639 -> 7639 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout@2x.png)bin19105 -> 19105 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cover.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cover.png)bin7240 -> 7240 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cover@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cover@2x.png)bin17927 -> 17927 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard-rtl.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard-rtl.png)bin8261 -> 8261 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard-rtl@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard-rtl@2x.png)bin19399 -> 19399 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard.png)bin11914 -> 11914 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard@2x.png)bin26556 -> 26556 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dropdowns.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dropdowns.png)bin6146 -> 6146 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dropdowns@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dropdowns@2x.png)bin15203 -> 15203 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/features.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/features.png)bin6067 -> 6067 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/features@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/features@2x.png)bin15002 -> 15002 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/footers.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/footers.png)bin4324 -> 4324 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/footers@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/footers@2x.png)bin10238 -> 10238 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/grid.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/grid.png)bin14485 -> 14485 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/grid@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/grid@2x.png)bin34834 -> 34834 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/headers.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/headers.png)bin5197 -> 5197 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/headers@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/headers@2x.png)bin12639 -> 12639 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/heroes.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/heroes.png)bin9017 -> 9017 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/heroes@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/heroes@2x.png)bin23433 -> 23433 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/jumbotron.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/jumbotron.png)bin9155 -> 9155 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/jumbotron@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/jumbotron@2x.png)bin23316 -> 23316 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/list-groups.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/list-groups.png)bin7134 -> 7134 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/list-groups@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/list-groups@2x.png)bin17804 -> 17804 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/masonry.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/masonry.png)bin15253 -> 15253 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/masonry@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/masonry@2x.png)bin37733 -> 37733 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/modals.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/modals.png)bin4814 -> 4814 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/modals@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/modals@2x.png)bin11689 -> 11689 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-bottom.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-bottom.png)bin4873 -> 4873 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-bottom@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-bottom@2x.png)bin11666 -> 11666 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-fixed.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-fixed.png)bin5911 -> 5911 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-fixed@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-fixed@2x.png)bin14103 -> 14103 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-static.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-static.png)bin6624 -> 6624 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-static@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-static@2x.png)bin15155 -> 15155 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars-offcanvas.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars-offcanvas.png)bin6864 -> 6864 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars-offcanvas@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars-offcanvas@2x.png)bin17070 -> 17070 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars.png)bin13124 -> 13124 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars@2x.png)bin31168 -> 31168 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/offcanvas-navbar.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/offcanvas-navbar.png)bin9691 -> 9691 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/offcanvas-navbar@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/offcanvas-navbar@2x.png)bin23975 -> 23975 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/pricing.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/pricing.png)bin11621 -> 11621 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/pricing@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/pricing@2x.png)bin29088 -> 29088 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/product.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/product.png)bin12906 -> 12906 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/product@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/product@2x.png)bin27953 -> 27953 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sidebars.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sidebars.png)bin12287 -> 12287 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sidebars@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sidebars@2x.png)bin33499 -> 33499 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sign-in.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sign-in.png)bin2199 -> 2199 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sign-in@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sign-in@2x.png)bin4568 -> 4568 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/starter-template.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/starter-template.png)bin7753 -> 7753 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/starter-template@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/starter-template@2x.png)bin20134 -> 20134 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer-navbar.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer-navbar.png)bin6979 -> 6979 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer-navbar@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer-navbar@2x.png)bin15836 -> 15836 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer.png)bin4280 -> 4280 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer@2x.png)bin9665 -> 9665 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/android-chrome-192x192.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/android-chrome-192x192.png)bin8364 -> 8364 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/android-chrome-512x512.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/android-chrome-512x512.png)bin23832 -> 23832 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/apple-touch-icon.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/apple-touch-icon.png)bin7650 -> 7650 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/favicon-16x16.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/favicon-16x16.png)bin525 -> 525 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/favicon-32x32.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/favicon-32x32.png)bin1159 -> 1159 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/manifest.json (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/manifest.json)0
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/safari-pinned-tab.svg (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/safari-pinned-tab.svg)0
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-parcel.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-parcel.png)bin161826 -> 161826 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-parcel@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-parcel@2x.png)bin564766 -> 564766 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-vite.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-vite.png)bin169189 -> 169189 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-vite@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-vite@2x.png)bin558538 -> 558538 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-webpack.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-webpack.png)bin169872 -> 169872 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-webpack@2x.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-webpack@2x.png)bin572482 -> 572482 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/parcel-dev-server-bootstrap.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/parcel-dev-server-bootstrap.png)bin102674 -> 102674 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/parcel-dev-server.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/parcel-dev-server.png)bin75744 -> 75744 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/vite-dev-server-bootstrap.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/vite-dev-server-bootstrap.png)bin75894 -> 75894 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/vite-dev-server.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/vite-dev-server.png)bin74851 -> 74851 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/webpack-dev-server-bootstrap.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/webpack-dev-server-bootstrap.png)bin77318 -> 77318 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/webpack-dev-server.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/webpack-dev-server.png)bin76154 -> 76154 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/parcel.png (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/parcel.png)bin6042 -> 6042 bytes
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/vite.svg (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/vite.svg)0
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/webpack.svg (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/webpack.svg)0
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/js/color-modes.js62
-rw-r--r--vendor/twbs/bootstrap/site/static/docs/5.3/assets/js/validate-forms.js (renamed from vendor/twbs/bootstrap/site/static/docs/5.2/assets/js/validate-forms.js)0
-rw-r--r--view/css/bootstrap-red.css17
-rw-r--r--view/css/cdav_calendar.css49
-rw-r--r--view/css/conversation.css35
-rw-r--r--view/css/mod_cal.css58
-rw-r--r--view/css/widgets.css9
-rw-r--r--view/de-de/htconfig.tpl112
-rw-r--r--view/en-au/htconfig.tpl107
-rw-r--r--view/en-gb/htconfig.tpl106
-rw-r--r--view/en/htconfig.tpl6
-rw-r--r--view/es-es/hmessages.po21902
-rw-r--r--view/es-es/hstrings.php5288
-rw-r--r--view/fr/htconfig.tpl6
-rw-r--r--view/it/htconfig.tpl111
-rw-r--r--view/js/autocomplete.js21
-rw-r--r--view/js/main.js4
-rw-r--r--view/js/mod_cal.js22
-rw-r--r--view/js/mod_connections.js4
-rw-r--r--view/js/mod_poke.js6
-rw-r--r--view/nb-no/htconfig.tpl111
-rw-r--r--view/php/default.php2
-rw-r--r--view/pl/htconfig.tpl6
-rw-r--r--view/pt-br/htconfig.tpl112
-rw-r--r--view/ru/htconfig.tpl112
-rw-r--r--view/sv/htconfig.tpl112
-rw-r--r--view/theme/redbasic/css/narrow_navbar.css18
-rw-r--r--view/theme/redbasic/css/style.css350
-rw-r--r--view/theme/redbasic/js/redbasic.js65
-rw-r--r--view/theme/redbasic/php/config.php63
-rw-r--r--view/theme/redbasic/php/style.php103
-rw-r--r--view/theme/redbasic/php/theme.php23
-rw-r--r--view/theme/redbasic/schema/Focus-Boxy.css10
-rw-r--r--view/theme/redbasic/schema/Focus-Light.css5
-rw-r--r--view/theme/redbasic/schema/Focus-Light.php13
-rw-r--r--view/theme/redbasic/schema/dark.css51
-rw-r--r--view/theme/redbasic/schema/dark.php43
-rw-r--r--view/theme/redbasic/tpl/theme_settings.tpl33
-rw-r--r--view/tpl/cal_calendar.tpl8
-rw-r--r--view/tpl/cdav_calendar.tpl17
-rw-r--r--view/tpl/cdav_widget_calendar.tpl26
-rw-r--r--view/tpl/channel_activities.tpl4
-rw-r--r--view/tpl/cloud_directory.tpl2
-rw-r--r--view/tpl/connections.tpl1
-rw-r--r--view/tpl/conv_item.tpl56
-rw-r--r--view/tpl/conv_list.tpl58
-rw-r--r--view/tpl/messages_widget.tpl100
-rw-r--r--view/tpl/navbar_default.tpl38
-rw-r--r--view/tpl/notifications_widget.tpl65
-rw-r--r--view/tpl/pinned_item.tpl74
-rw-r--r--view/tpl/search_item.tpl58
-rw-r--r--view/tpl/settings_account.tpl1
-rw-r--r--view/tpl/totp.tpl27
-rw-r--r--view/tpl/totp_setup.tpl64
1558 files changed, 129821 insertions, 102664 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 782cd1d2a..938cb52ca 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,7 +3,7 @@
# Use a prepared Hubzilla image to optimise pipeline duration
# image: registry.gitlab.com/dawnbreak/hubzilla/core:php7.3
-image: php:8.0
+image: php:8.1
stages:
- test
@@ -96,8 +96,8 @@ before_script:
- tests/results/
-# PHP8.0
-php8.0:
+# PHP8.1
+php8.1:
<<: *job_definition_php
# PHP8.0 with MySQL 5.7
diff --git a/CHANGELOG b/CHANGELOG
index a20f40762..bd271040b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,22 +1,78 @@
+Hubzilla 8.2 (2023-03-19)
+ - Remove redundant untranslated htconfig templates
+ - Implement workaround for friendica image/attachment construct
+ - Implement notification exception for forum posts repeated by group actors
+ - Updated es translations
+ - Rewrite totp multifactor auth and move it from addon to core (ported from streams)
+ - Implement page load progress indicator for pwa standalone mode
+ - Improved mod HQ logic to save some DB lookups
+ - Default owner_xchan to sender in Activity::store() except for fetched items
+ - Improved contact search
+ - Do not force new thread if announce comes from group actor
+ - Disable oembed in notes app
+ - Improved queue handling
+ - Slightly restructure conv item head
+ - Implemet author images in HQ widget
+ - Implement author filter in HQ widget
+ - Add config option db_skip_locked_supported which should be set if the DB backend supports skip locked
+ - Updated simple pie library
+ - Updated smarty library
+ - Updated forkawesome library
+ - Updated fullcalendar library
+ - Implement native dark/light mode in favour of dark/light schema
+ - Updated bootstrap library
+
+ Bugfixes
+ - Fix channel calendar location html not interpreted - issue #1728
+ - Fix max oembed size check if content length header is an array
+ - Fix group actor wall posts turned into direct messages when posting article or card
+ - Fix non zot profile mentions using zrl tag
+ - Fix message filter > and < not decoded
+ - Fix deleted hublocs included in author lookup
+ - Fix some more PHP warnings
+ - Fix syntax for get_compund_property()
+ - Fix xchan_pubforum not set on actor updates
+ - Fix duplicate directory entries for xchans with bogus second primary entry
+ - Fix missing created timestamp in like activity - issue #1729
+ - Fix messages not signed when posting from non primary locations
+ - Fix pinned post regression
+ - Fix autocomplete items not selectable on mobile
+ - Fix hubloc confusion in Libzot::fetch_conversation()
+ - Fix valid duplicate notification entries deduplicated
+ - Fix ics file import
+ - Fix recipients deduplication in some places
+ - Fix hashtag encoded with href instead of id
+
+ Addons
+ - Pubcrawl: re-implement encrypted content which got lost in transition
+ - Pubcrawl: flag fetched items
+ - Totp: removed from addons in favor of implementation in core
+ - Pubcrawl: fix delivery issues for relayed activities
+ - Cart: fix missing bootstrap namespace
+ - Gallery: do not inject gallery code in webpages
+ - Pubcrawl: fix sql error if mentions string is empty
+ - Cart: fix paypal order hash size
+
+
Hubzilla 8.0 (2023-01-13)
- Updated ru strings
- Implement ability to edit addon PDL with pdledit_gui and pdledit
- Implement queueworker auto sleep time
- Always add sys channel to receivers for public items
- Improved server sent events loop
- Exclude not tagable xchan networks handle_tag()
- Add mark html tag to the html2bbcode parser
- Embed or attach uploaded files depending on file type
- Changed logic to enable site only public stream - please revisit admin setting
- Updated nb-no strings
- Moved queueworker to core
- Provide a PDL file for mod invite and set the profile
- Disabled outdated context help
- Mark unseen items seen after a certain amount of time (default 90 days)
- Slightly restructure lib webfinger
- Improved redbasic dark schema
- Implement unseen thread and unseen items count in HQ widget
- In unseen items notifications just count the first 99 and display 99+ if there are more
+ - Updated ru strings
+ - Implement ability to edit addon PDL with pdledit_gui and pdledit
+ - Implement queueworker auto sleep time
+ - Always add sys channel to receivers for public items
+ - Improved server sent events loop
+ - Exclude not tagable xchan networks handle_tag()
+ - Add mark html tag to the html2bbcode parser
+ - Embed or attach uploaded files depending on file type
+ - Changed logic to enable site only public stream - please revisit admin setting
+ - Updated nb-no strings
+ - Moved queueworker to core
+ - Provide a PDL file for mod invite and set the profile
+ - Disabled outdated context help
+ - Mark unseen items seen after a certain amount of time (default 90 days)
+ - Slightly restructure lib webfinger
+ - Improved redbasic dark schema
+ - Implement unseen thread and unseen items count in HQ widget
+ - In unseen items notifications just count the first 99 and display 99+ if there are more
Bugfixes
- Fix race conditions when processing multiple choice polls
diff --git a/Zotlabs/Daemon/Convo.php b/Zotlabs/Daemon/Convo.php
index d1a7e4f4d..e05f7539e 100644
--- a/Zotlabs/Daemon/Convo.php
+++ b/Zotlabs/Daemon/Convo.php
@@ -55,6 +55,7 @@ class Convo {
$AS = new ActivityStreams($message);
if ($AS->is_valid() && is_array($AS->obj)) {
$item = Activity::decode_note($AS);
+ $item['item_fetched'] = true;
Activity::store($channel, $contact['abook_xchan'], $AS, $item);
}
}
diff --git a/Zotlabs/Daemon/Externals.php b/Zotlabs/Daemon/Externals.php
index 2c7c7c172..b67a0e286 100644
--- a/Zotlabs/Daemon/Externals.php
+++ b/Zotlabs/Daemon/Externals.php
@@ -143,6 +143,7 @@ class Externals {
$AS = new ActivityStreams($message);
if ($AS->is_valid() && is_array($AS->obj)) {
$item = Activity::decode_note($AS);
+ $item['item_fetched'] = true;
Activity::store($importer, $contact['hubloc_hash'], $AS, $item);
$total++;
}
diff --git a/Zotlabs/Daemon/Onepoll.php b/Zotlabs/Daemon/Onepoll.php
index 0a30a0c7d..bde39007e 100644
--- a/Zotlabs/Daemon/Onepoll.php
+++ b/Zotlabs/Daemon/Onepoll.php
@@ -172,6 +172,7 @@ class Onepoll {
$AS = new ActivityStreams($message);
if ($AS->is_valid() && is_array($AS->obj)) {
$item = Activity::decode_note($AS);
+ $item['item_fetched'] = true;
Activity::store($importer, $contact['abook_xchan'], $AS, $item);
}
}
diff --git a/Zotlabs/Daemon/Queue.php b/Zotlabs/Daemon/Queue.php
index 3eb7d9d23..b07fe369c 100644
--- a/Zotlabs/Daemon/Queue.php
+++ b/Zotlabs/Daemon/Queue.php
@@ -7,79 +7,56 @@ use Zotlabs\Lib\Queue as LibQueue;
class Queue {
static public function run($argc, $argv) {
-
- require_once('include/items.php');
- require_once('include/bbcode.php');
-
- if ($argc > 1)
- $queue_id = $argv[1];
- else
- $queue_id = EMPTY_STR;
+ $queue_id = ($argc > 1) ? $argv[1] : '';
logger('queue: start');
// delete all queue items more than 3 days old
// but first mark these sites dead if we haven't heard from them in a month
- $r = q("select outq_posturl from outq where outq_created < %s - INTERVAL %s",
- db_utcnow(), db_quoteinterval('3 DAY')
+ $oldqItems = q("select outq_posturl from outq where outq_created < %s - INTERVAL %s",
+ db_utcnow(),
+ db_quoteinterval('3 DAY')
);
- if ($r) {
- foreach ($r as $rr) {
- $h = parse_url($rr['outq_posturl']);
- $desturl = $h['scheme'] . '://' . $h['host'] . (isset($h['port']) ? ':' . $h['port'] : '');
+
+ if ($oldqItems) {
+ foreach ($oldqItems as $qItem) {
+ $h = parse_url($qItem['outq_posturl']);
+ $site_url = $h['scheme'] . '://' . $h['host'] . ((!empty($h['port'])) ? ':' . $h['port'] : '');
q("update site set site_dead = 1 where site_dead = 0 and site_url = '%s' and site_update < %s - INTERVAL %s",
- dbesc($desturl),
- db_utcnow(), db_quoteinterval('1 MONTH')
+ dbesc($site_url),
+ db_utcnow(),
+ db_quoteinterval('1 MONTH')
);
}
}
+ logger('Removing ' . count($oldqItems) . ' old queue entries');
q("DELETE FROM outq WHERE outq_created < %s - INTERVAL %s",
- db_utcnow(), db_quoteinterval('3 DAY')
+ db_utcnow(),
+ db_quoteinterval('3 DAY')
);
+ $deliveries = [];
+
if ($queue_id) {
- $r = q("SELECT * FROM outq WHERE outq_hash = '%s' LIMIT 1",
+ $qItems = q("SELECT * FROM outq WHERE outq_hash = '%s' LIMIT 1",
dbesc($queue_id)
);
+ logger('queue deliver: ' . $qItems[0]['outq_hash'] . ' to ' . $qItems[0]['outq_posturl'], LOGGER_DEBUG);
+ LibQueue::deliver($qItems[0]);
}
else {
-
- // For the first 12 hours we'll try to deliver every 15 minutes
- // After that, we'll only attempt delivery once per hour.
- // This currently only handles the default queue drivers ('zot' or '') which we will group by posturl
- // so that we don't start off a thousand deliveries for a couple of dead hubs.
- // The zot driver will deliver everything destined for a single hub once contact is made (*if* contact is made).
- // Other drivers will have to do something different here and may need their own query.
-
- // Note: this requires some tweaking as new posts to long dead hubs once a day will keep them in the
- // "every 15 minutes" category. We probably need to prioritise them when inserted into the queue
- // or just prior to this query based on recent and long-term delivery history. If we have good reason to believe
- // the site is permanently down, there's no reason to attempt delivery at all, or at most not more than once
- // or twice a day.
-
- $sqlrandfunc = db_getfunc('rand');
-
- $r = q("SELECT *,$sqlrandfunc as rn FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s order by rn limit 1",
+ $qItems = q("SELECT * FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s ",
db_utcnow()
);
- while ($r) {
- foreach ($r as $rv) {
- LibQueue::deliver($rv);
+ if ($qItems) {
+ foreach ($qItems as $qItem) {
+ $deliveries[] = $qItem['outq_hash'];
}
- $r = q("SELECT *,$sqlrandfunc as rn FROM outq WHERE outq_delivered = 0 and outq_scheduled < %s order by rn limit 1",
- db_utcnow()
- );
+ do_delivery($deliveries, true);
}
- }
- if (!$r)
- return;
-
- foreach ($r as $rv) {
- LibQueue::deliver($rv);
- }
-
- return;
+ }
}
+
}
diff --git a/Zotlabs/Lib/Activity.php b/Zotlabs/Lib/Activity.php
index 1a1031909..226f50636 100644
--- a/Zotlabs/Lib/Activity.php
+++ b/Zotlabs/Lib/Activity.php
@@ -595,9 +595,9 @@ class Activity {
foreach ($item['term'] as $t) {
switch ($t['ttype']) {
case TERM_HASHTAG:
- // href is required so if we don't have a url in the taxonomy, ignore it and keep going.
+ // id is required so if we don't have a url in the taxonomy, ignore it and keep going.
if ($t['url']) {
- $ret[] = ['type' => 'Hashtag', 'href' => $t['url'], 'name' => '#' . $t['term']];
+ $ret[] = ['type' => 'Hashtag', 'id' => $t['url'], 'name' => '#' . $t['term']];
}
break;
@@ -700,6 +700,13 @@ class Activity {
if (array_key_exists('name', $att) && $att['name']) {
$entry['name'] = html2plain(purify_html($att['name']), 256);
}
+ // Friendica attachments don't match the URL in the body.
+ // This makes it more difficult to detect image duplication in bb_attach()
+ // which adds images to plaintext microblog software. For these we need to examine both the
+ // url and image properties.
+ if (isset($att['image']) && is_string($att['image']) && isset($att['url']) && $att['image'] !== $att['url']) {
+ $entry['image'] = $att['image'];
+ }
if ($entry) {
$ret[] = $entry;
}
@@ -822,7 +829,8 @@ class Activity {
];
}
- $ret['published'] = ((isset($i['created'])) ? datetime_convert('UTC', 'UTC', $i['created'], ATOM_TIME) : datetime_convert());
+ $ret['published'] = datetime_convert('UTC', 'UTC', $i['created'], ATOM_TIME);
+
if (isset($i['created'], $i['edited']) && $i['created'] !== $i['edited']) {
$ret['updated'] = datetime_convert('UTC', 'UTC', $i['edited'], ATOM_TIME);
if ($ret['type'] === 'Create') {
@@ -1690,6 +1698,8 @@ class Activity {
}
}
+ $group_actor = ($person_obj['type'] === 'Group');
+
$r = q("select * from xchan join hubloc on xchan_hash = hubloc_hash where xchan_hash = '%s'",
dbesc($url)
);
@@ -1708,11 +1718,12 @@ class Activity {
);
// update existing xchan record
- q("update xchan set xchan_name = '%s', xchan_pubkey = '%s', xchan_addr = '%s', xchan_network = 'activitypub', xchan_name_date = '%s' where xchan_hash = '%s'",
+ q("update xchan set xchan_name = '%s', xchan_pubkey = '%s', xchan_addr = '%s', xchan_network = 'activitypub', xchan_name_date = '%s', xchan_pubforum = %d where xchan_hash = '%s'",
dbesc(escape_tags($name)),
dbesc(escape_tags($pubkey)),
dbesc(escape_tags($webfinger_addr)),
dbescdate(datetime_convert()),
+ intval($group_actor),
dbesc($url)
);
@@ -1739,7 +1750,8 @@ class Activity {
'xchan_url' => $profile,
'xchan_name' => escape_tags($name),
'xchan_name_date' => datetime_convert(),
- 'xchan_network' => 'activitypub'
+ 'xchan_network' => 'activitypub',
+ 'xchan_pubforum' => intval($group_actor)
]
);
@@ -1768,6 +1780,10 @@ class Activity {
dbesc($url)
);
if (!$zx) {
+ // FIXME: we might need to fetch and store this url immediately
+ // otherwise at least the first post of a yet unknown author might
+ // be stored with the activitypub url instead of the portable id.
+ // Another solution could be to fix the items after Gprobe has done its work.
Master::Summon(['Gprobe', bin2hex($url)]);
}
}
@@ -2218,7 +2234,6 @@ class Activity {
) {
return false;
}
-
// Within our family of projects, Follow/Unfollow of a thread is an internal activity which should not be transmitted,
// hence if we receive it - ignore or reject it.
// Unfollow is not defined by ActivityStreams, which prefers Undo->Follow.
@@ -2514,7 +2529,11 @@ class Activity {
if ($act->type === 'Announce') {
$s['author_xchan'] = self::get_attributed_to_actor_url($act);
$s['mid'] = $act->obj['id'];
- $s['parent_mid'] = $act->obj['id'];
+
+ // Do not force new thread if the announce is from a group actor
+ if ($act->actor['type'] !== 'Group') {
+ $s['parent_mid'] = $act->obj['id'];
+ }
}
// we will need a hook here to extract magnet links e.g. peertube
@@ -2589,13 +2608,13 @@ class Activity {
if ($mps) {
usort($mps,[ '\Zotlabs\Lib\Activity', 'vid_sort' ]);
foreach ($mps as $m) {
- if (intval($m['height']) < 500 && Activity::media_not_in_body($m['href'],$s['body'])) {
+ if (intval($m['height']) < 500 && self::media_not_in_body($m['href'],$s['body'])) {
$s['body'] = $tag . $m['href'] . '[/video]' . "\r\n" . $s['body'];
break;
}
}
}
- elseif (is_string($act->obj['url']) && Activity::media_not_in_body($act->obj['url'],$s['body'])) {
+ elseif (is_string($act->obj['url']) && self::media_not_in_body($act->obj['url'],$s['body'])) {
$s['body'] = $tag . $act->obj['url'] . '[/video]' . "\r\n" . $s['body'];
}
@@ -2843,6 +2862,10 @@ class Activity {
$is_child_node = true;
}
+ if (empty($item['item_fetched'])) {
+ $item['owner_xchan'] = $observer_hash;
+ }
+
$allowed = false;
// TODO: not implemented
@@ -2919,7 +2942,7 @@ class Activity {
// The $item['item_fetched'] flag is set in fetch_and_store_parents().
// In this case we should check against author permissions because sender is not owner.
- if (perm_is_allowed($channel['channel_id'], ((isset($item['item_fetched']) && $item['item_fetched']) ? $item['author_xchan'] : $observer_hash), 'send_stream') || $is_sys_channel) {
+ if (perm_is_allowed($channel['channel_id'], ((!empty($item['item_fetched'])) ? $item['author_xchan'] : $observer_hash), 'send_stream') || $is_sys_channel) {
$allowed = true;
}
// TODO: not implemented
@@ -3228,7 +3251,7 @@ class Activity {
$item = $hookinfo['item'];
if ($item) {
- $item['item_fetched'] = 1;
+ $item['item_fetched'] = true;
if (intval($channel['channel_system']) && intval($item['item_private'])) {
$p = [];
@@ -3342,7 +3365,7 @@ class Activity {
return false;
}
- */
+
static public function fetch_and_store_replies($channel, $arr) {
logger('fetching replies');
@@ -3399,6 +3422,7 @@ class Activity {
}
}
+*/
/* this is deprecated and not used anymore
static function announce_note($channel, $observer_hash, $act) {
@@ -3674,7 +3698,21 @@ class Activity {
if ($a['type'] === 'image/svg+xml' && strpos($item['body'], '[/svg]')) {
continue;
}
- if (self::media_not_in_body($a['href'], $item['body'])) {
+ // Friendica attachment weirdness
+ // Check both the attachment image and href since they can be different and the one in the href is a different link with different resolution.
+ // Otheriwse you'll get duplicated images
+ if (isset($a['image'])) {
+ if (self::media_not_in_body($a['image'], $item['body']) && self::media_not_in_body($a['href'], $item['body'])) {
+ if (isset($a['name']) && $a['name']) {
+ $alt = htmlspecialchars($a['name'], ENT_QUOTES);
+ $item['body'] = '[img=' . $a['href'] . ']' . $alt . '[/img]' . "\r\n" . $item['body'];
+ } else {
+ $item['body'] = '[img]' . $a['href'] . '[/img]' . "\r\n" . $item['body'];
+ }
+ }
+ continue;
+ }
+ elseif (self::media_not_in_body($a['href'], $item['body'])) {
if (isset($a['name']) && $a['name']) {
$alt = htmlspecialchars($a['name'], ENT_QUOTES);
$item['body'] = '[img=' . $a['href'] . ']' . $alt . '[/img]' . "\r\n" . $item['body'];
diff --git a/Zotlabs/Lib/ActivityStreams.php b/Zotlabs/Lib/ActivityStreams.php
index a07fdacb7..cfed53b3c 100644
--- a/Zotlabs/Lib/ActivityStreams.php
+++ b/Zotlabs/Lib/ActivityStreams.php
@@ -113,7 +113,7 @@ class ActivityStreams {
// fetch recursive or embedded activities
if ($this->obj && is_array($this->obj) && array_key_exists('object', $this->obj)) {
- $this->obj['object'] = $this->get_compound_property($this->obj['object']);
+ $this->obj['object'] = $this->get_compound_property('object', $this->obj);
}
if ($this->obj && is_array($this->obj) && isset($this->obj['actor']))
@@ -146,35 +146,58 @@ class ActivityStreams {
}
/**
+ * @brief get single property from Activity object
+ *
+ * @param string $property
+ * @param mixed $default return value if property or object not set
+ * or object is a string id which could not be fetched.
+ * @return mixed
+ */
+ public function objprop(string $property, mixed $default = false): mixed {
+ $x = $this->get_property_obj($property,$this->obj);
+ return (isset($x)) ? $x : $default;
+ }
+
+ /**
* @brief Collects all recipients.
*
- * @param string $base
+ * @param mixed $base
* @param string $namespace (optional) default empty
* @return array
*/
- function collect_recips($base = '', $namespace = '') {
- $x = [];
+ public function collect_recips(mixed $base = '', string $namespace = ''): array {
+ $result = [];
+ $tmp = [];
$fields = ['to', 'cc', 'bto', 'bcc', 'audience'];
- foreach ($fields as $f) {
- $y = $this->get_compound_property($f, $base, $namespace);
- if ($y) {
- if (!is_array($this->raw_recips)) {
- $this->raw_recips = [];
- }
-
- if (!is_array($y)) {
- $y = [$y];
- }
- $this->raw_recips[$f] = $y;
- $x = array_merge($x, $y);
+ foreach ($fields as $field) {
+ // don't expand these yet
+ $values = $this->get_property_obj($field, $base, $namespace);
+ if ($values) {
+ $values = force_array($values);
+ $tmp[$field] = $values;
+ $result = array_values(array_unique(array_merge($result, $values)));
+ }
+ // Merge the object recipients if they exist.
+ $values = $this->objprop($field);
+ if ($values) {
+ $values = force_array($values);
+ $tmp[$field] = ((isset($tmp[$field])) ? array_merge($tmp[$field], $values) : $values);
+ $result = array_values(array_unique(array_merge($result, $values)));
+ }
+ // remove duplicates
+ if (isset($tmp[$field])) {
+ $tmp[$field] = array_values(array_unique($tmp[$field]));
}
}
-// not yet ready for prime time
-// $x = $this->expand($x,$base,$namespace);
- return $x;
+ $this->raw_recips = $tmp;
+
+ // not yet ready for prime time
+ // $result = $this->expand($result,$base,$namespace);
+ return $result;
}
+
function expand($arr, $base = '', $namespace = '') {
$ret = [];
@@ -341,6 +364,7 @@ class ActivityStreams {
*/
function get_compound_property($property, $base = '', $namespace = '', $first = false) {
$x = $this->get_property_obj($property, $base, $namespace);
+
if ($this->is_url($x)) {
$y = $this->fetch_property($x);
if (is_array($y)) {
diff --git a/Zotlabs/Lib/DReport.php b/Zotlabs/Lib/DReport.php
index 2263529b2..e22ed65be 100644
--- a/Zotlabs/Lib/DReport.php
+++ b/Zotlabs/Lib/DReport.php
@@ -94,19 +94,6 @@ class DReport {
if(! $c)
return false;
- // legacy zot recipients add a space and their name to the xchan. remove it if true.
-
- $legacy_recipient = strpos($dr['recipient'], ' ');
- if($legacy_recipient !== false) {
- $legacy_recipient_parts = explode(' ', $dr['recipient'], 2);
- $rxchan = $legacy_recipient_parts[0];
- }
- else {
- $rxchan = $dr['recipient'];
- }
-
-
-
// is the recipient one of our connections, or do we want to store every report?
$pcf = get_pconfig($c[0]['channel_id'],'system','dreport_store_all');
@@ -117,7 +104,7 @@ class DReport {
// So if a remote site says they can't find us, that's no big surprise
// and just creates a lot of extra report noise
- if(($dr['location'] !== z_root()) && ($dr['sender'] === $rxchan) && ($dr['status'] === 'recipient not found'))
+ if(($dr['location'] !== z_root()) && ($dr['sender'] === $dr['recipient']) && ($dr['status'] === 'recipient not found'))
return false;
// If you have a private post with a recipient list, every single site is going to report
@@ -126,14 +113,14 @@ class DReport {
// have a channel on that site.
$r = q("select hubloc_id from hubloc where hubloc_hash = '%s' and hubloc_url = '%s'",
- dbesc($rxchan),
+ dbesc($dr['recipient']),
dbesc($dr['location'])
);
if((! $r) && ($dr['status'] === 'recipient_not_found'))
return false;
$r = q("select abook_id from abook where abook_xchan = '%s' and abook_channel = %d limit 1",
- dbesc($rxchan),
+ dbesc($dr['recipient']),
intval($c[0]['channel_id'])
);
if($r)
diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php
index 2015b260d..585761cc4 100644
--- a/Zotlabs/Lib/Enotify.php
+++ b/Zotlabs/Lib/Enotify.php
@@ -828,7 +828,7 @@ class Enotify {
: (($item['obj_type'] === 'Answer') ? sprintf( t('voted on %s\'s poll'), '[bdi]' . $item['owner']['xchan_name'] . '[/bdi]') : sprintf( t('commented on %s\'s post'), '[bdi]' . $item['owner']['xchan_name'] . '[/bdi]'))
);
- if($item['verb'] === ACTIVITY_SHARE) {
+ if($item['verb'] === ACTIVITY_SHARE && empty($item['owner']['xchan_pubforum'])) {
$itemem_text = sprintf( t('repeated %s\'s post'), '[bdi]' . $item['author']['xchan_name'] . '[/bdi]');
}
@@ -860,7 +860,7 @@ class Enotify {
// convert this logic into a json array just like the system notifications
- $who = (($item['verb'] === ACTIVITY_SHARE) ? 'owner' : 'author');
+ $who = (($item['verb'] === ACTIVITY_SHARE && empty($item['owner']['xchan_pubforum'])) ? 'owner' : 'author');
$body = html2plain(bbcode($item['body'], ['drop_media' => true, 'tryoembed' => false]), 75, true);
if ($body) {
$body = htmlentities($body, ENT_QUOTES, 'UTF-8', false);
@@ -869,7 +869,7 @@ class Enotify {
$x = array(
'notify_link' => $item['llink'],
'name' => $item[$who]['xchan_name'],
- 'addr' => $item[$who]['xchan_addr'] ?? $item[$who]['xchan_url'],
+ 'addr' => $item[$who]['xchan_addr'] ? $item[$who]['xchan_addr'] : $item[$who]['xchan_url'],
'url' => $item[$who]['xchan_url'],
'photo' => $item[$who]['xchan_photo_s'],
'when' => (($edit) ? datetime_convert('UTC', date_default_timezone_get(), $item['edited']) : datetime_convert('UTC', date_default_timezone_get(), $item['created'])),
diff --git a/Zotlabs/Lib/Libsync.php b/Zotlabs/Lib/Libsync.php
index 19361c4ae..d52b501e4 100644
--- a/Zotlabs/Lib/Libsync.php
+++ b/Zotlabs/Lib/Libsync.php
@@ -766,11 +766,10 @@ class Libsync {
*
* @param array $sender
* @param array $arr
- * @param boolean $absolute (optional) default false
* @return array
*/
- static function sync_locations($sender, $arr, $absolute = false) {
+ static function sync_locations($sender, $arr) {
$ret = [];
$what = '';
@@ -787,9 +786,6 @@ class Libsync {
if (isset($arr['locations']) && $arr['locations']) {
- if ($absolute)
- Libzot::check_location_move($sender['hash'], $arr['locations']);
-
$xisting = q("select * from hubloc where hubloc_hash = '%s'",
dbesc($sender['hash'])
);
@@ -933,14 +929,7 @@ class Libsync {
$what .= 'primary_hub ';
$changed = true;
}
- elseif ($absolute) {
- // Absolute sync - make sure the current primary is correctly reflected in the xchan
- $pr = hubloc_change_primary($r[0]);
- if ($pr) {
- $what .= 'xchan_primary ';
- $changed = true;
- }
- }
+
if (intval($r[0]['hubloc_deleted']) && (!intval($location['deleted']))) {
q("update hubloc set hubloc_deleted = 0, hubloc_updated = '%s' where hubloc_id_url = '%s'",
dbesc(datetime_convert()),
@@ -1009,9 +998,9 @@ class Libsync {
}
}
- // get rid of any hubs we have for this channel which weren't reported.
+ // get rid of any hublocs we have for this channel which weren't reported.
- if ($absolute && $xisting) {
+ if ($xisting) {
foreach ($xisting as $x) {
if (!array_key_exists('updated', $x)) {
logger('Deleting unreferenced hub location ' . $x['hubloc_addr']);
diff --git a/Zotlabs/Lib/Libzot.php b/Zotlabs/Lib/Libzot.php
index c635fdb17..93d8a39c0 100644
--- a/Zotlabs/Lib/Libzot.php
+++ b/Zotlabs/Lib/Libzot.php
@@ -101,7 +101,6 @@ class Libzot {
static function build_packet($channel, $type = 'activity', $recipients = null, $msg = [], $encoding = 'activitystreams', $remote_key = null, $methods = '') {
$sig_method = get_config('system', 'signature_algorithm', 'sha256');
-
$data = [
'type' => $type,
'encoding' => $encoding,
@@ -115,9 +114,9 @@ class Libzot {
}
if ($msg) {
- $actor = channel_url($channel);
- if ($encoding === 'activitystreams' && array_key_exists('actor', $msg) && is_string($msg['actor']) && $actor === $msg['actor']) {
- $msg = JSalmon::sign($msg, $actor, $channel['channel_prvkey']);
+ $actors = get_hubloc_id_urls_by_x($channel['channel_hash']);
+ if ($encoding === 'activitystreams' && array_key_exists('actor', $msg) && is_string($msg['actor']) && in_array($msg['actor'], $actors)) {
+ $msg = JSalmon::sign($msg, $actors[0], $channel['channel_prvkey']);
}
$data['data'] = $msg;
}
@@ -1051,19 +1050,9 @@ class Libzot {
}
if (is_array($x) && array_key_exists('delivery_report', $x) && is_array($x['delivery_report'])) {
-
foreach ($x['delivery_report'] as $xx) {
call_hooks('dreport_process', $xx);
if (is_array($xx) && array_key_exists('message_id', $xx) && DReport::is_storable($xx)) {
-
- // legacy recipients add a space and their name to the xchan. split those if true.
- $legacy_recipient = strpos($xx['recipient'], ' ');
- if ($legacy_recipient !== false) {
- $legacy_recipient_parts = explode(' ', $xx['recipient'], 2);
- $xx['recipient'] = $legacy_recipient_parts[0];
- $xx['name'] = $legacy_recipient_parts[1];
- }
-
q("insert into dreport ( dreport_mid, dreport_site, dreport_recip, dreport_name, dreport_result, dreport_time, dreport_xchan ) values ( '%s', '%s', '%s','%s','%s','%s','%s' ) ",
dbesc($xx['message_id']),
dbesc($xx['location']),
@@ -1254,7 +1243,7 @@ class Libzot {
return;
}
- $r = q("select hubloc_hash, hubloc_network, hubloc_url from hubloc where hubloc_id_url = '%s' order by hubloc_id desc",
+ $r = q("select hubloc_hash, hubloc_network, hubloc_url from hubloc where hubloc_id_url = '%s' and hubloc_deleted = 0 order by hubloc_id desc",
dbesc($AS->actor['id'])
);
@@ -1262,7 +1251,7 @@ class Libzot {
// Author is unknown to this site. Perform channel discovery and try again.
$z = discover_by_webbie($AS->actor['id']);
if ($z) {
- $r = q("select hubloc_hash, hubloc_network, hubloc_url from hubloc where hubloc_id_url = '%s' order by hubloc_id desc",
+ $r = q("select hubloc_hash, hubloc_network, hubloc_url from hubloc where hubloc_id_url = '%s' and hubloc_deleted = 0 order by hubloc_id desc",
dbesc($AS->actor['id'])
);
}
@@ -1377,7 +1366,7 @@ class Libzot {
return false;
}
$x = self::find_parent($env, $act);
- if ($x === $act->id || $x === $act->obj['id']) {
+ if ($x === $act->id || (is_array($act->obj) && array_key_exists('id', $act->obj) && $x === $act->obj['id'])) {
return true;
}
}
@@ -1435,7 +1424,9 @@ class Libzot {
$r = [];
- $c = q("select channel_id, channel_hash from channel where channel_removed = 0");
+ $c = q("select channel_id, channel_hash from channel where channel_hash != '%s' and channel_removed = 0",
+ dbesc($msg['sender'])
+ );
if ($c) {
foreach ($c as $cc) {
@@ -1463,9 +1454,10 @@ class Libzot {
if ($tag['type'] === 'Mention' && (strpos($tag['href'], z_root()) !== false)) {
$address = basename($tag['href']);
if ($address) {
- $z = q("select channel_hash as hash from channel where channel_address = '%s'
+ $z = q("select channel_hash as hash from channel where channel_address = '%s' and channel_hash != '%s'
and channel_removed = 0 limit 1",
- dbesc($address)
+ dbesc($address),
+ dbesc($msg['sender'])
);
if ($z) {
$r[] = $z[0]['hash'];
@@ -1484,9 +1476,10 @@ class Libzot {
$thread_parent = self::find_parent($msg, $act);
if ($thread_parent) {
- $z = q("select channel_hash as hash from channel left join item on channel.channel_id = item.uid where ( item.thr_parent = '%s' OR item.parent_mid = '%s' ) ",
+ $z = q("select channel_hash as hash from channel left join item on channel.channel_id = item.uid where ( item.thr_parent = '%s' OR item.parent_mid = '%s' ) and channel_hash != '%s'",
+ dbesc($thread_parent),
dbesc($thread_parent),
- dbesc($thread_parent)
+ dbesc($msg['sender'])
);
if ($z) {
foreach ($z as $zv) {
@@ -1980,7 +1973,7 @@ class Libzot {
$ret = [];
- $signer = q("select hubloc_hash, hubloc_url from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6' limit 1",
+ $signer = q("select hubloc_hash, hubloc_url from hubloc where hubloc_id_url = '%s' and hubloc_network = 'zot6' order by hubloc_id desc limit 1",
dbesc($a['signature']['signer'])
);
@@ -2008,7 +2001,7 @@ class Libzot {
continue;
}
- $r = q("select hubloc_hash, hubloc_network from hubloc where hubloc_id_url = '%s'",
+ $r = q("select hubloc_hash, hubloc_network from hubloc where hubloc_id_url = '%s' order by hubloc_id desc",
dbesc($AS->actor['id'])
);
@@ -2313,120 +2306,6 @@ class Libzot {
/**
- * @brief Processes delivery of profile.
- *
- * @param string $sender
- * @param array $arr
- * @param array $deliveries (unused)
- * @return void
- * @see import_directory_profile()
- *
- */
- static function process_profile_delivery($sender, $arr, $deliveries) {
-
- logger('process_profile_delivery', LOGGER_DEBUG);
-
- $r = q("select xchan_addr from xchan where xchan_hash = '%s' limit 1",
- dbesc($sender)
- );
- if ($r) {
- Libzotdir::import_directory_profile($sender, $arr, $r[0]['xchan_addr'], UPDATE_FLAGS_UPDATED, 0);
- }
- }
-
-
- /**
- * @brief
- *
- * @param string $sender
- * @param array $arr
- * @param array $deliveries (unused) deliveries is irrelevant
- * @return void
- */
- static function process_location_delivery($sender, $arr, $deliveries) {
-
- // deliveries is irrelevant
- logger('process_location_delivery', LOGGER_DEBUG);
-
- $r = q("select * from xchan where xchan_hash = '%s' limit 1",
- dbesc($sender)
- );
- if ($r) {
- $xchan = ['id' => $r[0]['xchan_guid'], 'id_sig' => $r[0]['xchan_guid_sig'],
- 'hash' => $r[0]['xchan_hash'], 'public_key' => $r[0]['xchan_pubkey']];
- }
- if (array_key_exists('locations', $arr) && $arr['locations']) {
- $x = Libsync::sync_locations($xchan, $arr, true);
- logger('results: ' . print_r($x, true), LOGGER_DEBUG);
- if ($x['changed']) {
- //$guid = random_string() . '@' . App::get_hostname();
- Libzotdir::update_modtime($sender, $r[0]['xchan_guid'], $arr['locations'][0]['address'], UPDATE_FLAGS_UPDATED);
- }
- }
- }
-
- /**
- * @brief Checks for a moved channel and sets the channel_moved flag.
- *
- * Currently the effect of this flag is to turn the channel into 'read-only' mode.
- * New content will not be processed (there was still an issue with blocking the
- * ability to post comments as of 10-Mar-2016).
- * We do not physically remove the channel at this time. The hub admin may choose
- * to do so, but is encouraged to allow a grace period of several days in case there
- * are any issues migrating content. This packet will generally be received by the
- * original site when the basic channel import has been processed.
- *
- * This will only be executed on the old location
- * if a new location is reported and there is only one location record.
- * The rest of the hubloc syncronisation will be handled within
- * sync_locations
- *
- * @param string $sender_hash A channel hash
- * @param array $locations
- * @return void
- */
- static function check_location_move($sender_hash, $locations) {
-
- if (!$locations)
- return;
-
- if (count($locations) != 1)
- return;
-
- $loc = $locations[0];
-
- $r = q("select * from channel where channel_hash = '%s' limit 1",
- dbesc($sender_hash)
- );
-
- if (!$r)
- return;
-
- if ($loc['url'] !== z_root()) {
- $x = q("update channel set channel_moved = '%s' where channel_hash = '%s' limit 1",
- dbesc($loc['url']),
- dbesc($sender_hash)
- );
-
- // federation plugins may wish to notify connections
- // of the move on singleton networks
-
- $arr = [
- 'channel' => $r[0],
- 'locations' => $locations
- ];
- /**
- * @hooks location_move
- * Called when a new location has been provided to a UNO channel (indicating a move rather than a clone).
- * * \e array \b channel
- * * \e array \b locations
- */
- call_hooks('location_move', $arr);
- }
- }
-
-
- /**
* @brief Returns an array with all known distinct hubs for this channel.
*
* @param array $channel an associative array which must contain
diff --git a/Zotlabs/Lib/MessageFilter.php b/Zotlabs/Lib/MessageFilter.php
index 7d6dcbe8e..e7382c0d5 100644
--- a/Zotlabs/Lib/MessageFilter.php
+++ b/Zotlabs/Lib/MessageFilter.php
@@ -25,7 +25,7 @@ class MessageFilter {
if ($exclude) {
foreach ($exclude as $word) {
- $word = trim($word);
+ $word = html_entity_decode(trim($word));
if (! $word) {
continue;
}
@@ -73,7 +73,7 @@ class MessageFilter {
if ($include) {
foreach ($include as $word) {
- $word = trim($word);
+ $word = html_entity_decode(trim($word));
if (! $word) {
continue;
}
diff --git a/Zotlabs/Lib/Queue.php b/Zotlabs/Lib/Queue.php
index c3f9cda20..348a2a079 100644
--- a/Zotlabs/Lib/Queue.php
+++ b/Zotlabs/Lib/Queue.php
@@ -65,16 +65,51 @@ class Queue {
);
}
-
- static function remove($id,$channel_id = 0) {
- logger('queue: remove queue item ' . $id,LOGGER_DEBUG);
+ public static function remove($id, $channel_id = 0) {
+ logger('queue: remove queue item ' . $id, LOGGER_DEBUG);
$sql_extra = (($channel_id) ? " and outq_channel = " . intval($channel_id) . " " : '');
- q("DELETE FROM outq WHERE outq_hash = '%s' $sql_extra",
+ // figure out what endpoint it is going to.
+ $record = q("select outq_posturl from outq where outq_hash = '%s' $sql_extra",
dbesc($id)
);
- }
+ if ($record) {
+ q("DELETE FROM outq WHERE outq_hash = '%s' $sql_extra",
+ dbesc($id)
+ );
+
+ // If there's anything remaining in the queue for this site, move one of them to the next active
+ // queue run by setting outq_scheduled back to the present. We may be attempting to deliver it
+ // as a 'piled_up' delivery, but this ensures the site has an active queue entry as long as queued
+ // entries still exist for it. This fixes an issue where one immediate delivery left everything
+ // else for that site undeliverable since all the other entries had been pushed far into the future.
+
+ $x = null;
+ $sql_quirks = ((get_config('system', 'db_skip_locked_supported')) ? 'SKIP LOCKED' : 'NOWAIT');
+
+ q("START TRANSACTION");
+
+ $r = q("SELECT outq_hash FROM outq WHERE outq_posturl = '%s' LIMIT 1 FOR UPDATE $sql_quirks",
+ dbesc($record[0]['outq_posturl'])
+ );
+
+ if ($r) {
+ $x = q("UPDATE outq SET outq_scheduled = '%s' WHERE outq_hash = '%s'",
+ dbesc(datetime_convert()),
+ dbesc($r[0]['outq_hash'])
+ );
+ }
+
+ if ($x) {
+ q("COMMIT");
+ }
+ else {
+ q("ROLLBACK");
+ }
+
+ }
+ }
static function remove_by_posturl($posturl) {
logger('queue: remove queue posturl ' . $posturl,LOGGER_DEBUG);
@@ -84,8 +119,6 @@ class Queue {
);
}
-
-
static function set_delivered($id,$channel = 0) {
logger('queue: set delivered ' . $id,LOGGER_DEBUG);
$sql_extra = (($channel['channel_id']) ? " and outq_channel = " . intval($channel['channel_id']) . " " : '');
@@ -152,17 +185,19 @@ class Queue {
$y = q("select site_update, site_dead from site where site_url = '%s' ",
dbesc($base)
);
- if($y) {
- if(intval($y[0]['site_dead'])) {
+
+ if ($y) {
+ // Don't bother delivering if the site is dead.
+ // And if we haven't heard from the site in over a month - let them through but 3 strikes you're out.
+ if (intval($y[0]['site_dead']) || ($y[0]['site_update'] < datetime_convert('UTC', 'UTC', 'now - 1 month') && $outq['outq_priority'] > 20)) {
+ q("update dreport set dreport_result = '%s' where dreport_queue = '%s'",
+ dbesc('site dead'),
+ dbesc($outq['outq_hash'])
+ );
self::remove_by_posturl($outq['outq_posturl']);
logger('dead site ignored ' . $base);
return;
}
- if($y[0]['site_update'] < datetime_convert('UTC','UTC','now - 1 month')) {
- self::update($outq['outq_hash'], 10);
- logger('immediate delivery deferred for site ' . $base);
- return;
- }
}
else {
diff --git a/Zotlabs/Lib/QueueWorker.php b/Zotlabs/Lib/QueueWorker.php
index fd2ebd7e1..696fb79fc 100644
--- a/Zotlabs/Lib/QueueWorker.php
+++ b/Zotlabs/Lib/QueueWorker.php
@@ -137,10 +137,26 @@ class QueueWorker {
self::$workermaxage = self::$workermaxage > 120 ? self::$workermaxage : 300;
}
- q("update workerq set workerq_reservationid = null where workerq_reservationid is not null and workerq_processtimeout < %s",
+ self::qstart();
+
+ // skip locked is preferred but is not supported by mariadb < 10.6 which is still used a lot - hence make it optional
+ $sql_quirks = ((get_config('system', 'db_skip_locked_supported')) ? 'SKIP LOCKED' : 'NOWAIT');
+
+ $r = q("SELECT workerq_id FROM workerq WHERE workerq_reservationid IS NOT NULL AND workerq_processtimeout < %s FOR UPDATE $sql_quirks",
db_utcnow()
);
+ if ($r) {
+ $ids = ids_to_querystr($r, 'workerq_id');
+ $u = dbq("update workerq set workerq_reservationid = null where workerq_id in ($ids)");
+ }
+
+ self::qcommit();
+
+ //q("update workerq set workerq_reservationid = null where workerq_reservationid is not null and workerq_processtimeout < %s",
+ //db_utcnow()
+ //);
+
//usleep(self::$workersleep);
$workers = dbq("select count(distinct workerq_reservationid) as total from workerq where workerq_reservationid is not null");
@@ -175,10 +191,10 @@ class QueueWorker {
self::qstart();
- // This is probably the better solution but is not supported by mariadb < 10.6 which is still used a lot.
- // $work = dbq("SELECT workerq_id FROM workerq WHERE workerq_reservationid IS NULL ORDER BY workerq_priority DESC, workerq_id ASC LIMIT 1 FOR UPDATE SKIP LOCKED;");
+ // skip locked is preferred but is not supported by mariadb < 10.6 which is still used a lot - hence make it optional
+ $sql_quirks = ((get_config('system', 'db_skip_locked_supported')) ? 'SKIP LOCKED' : 'NOWAIT');
- $work = dbq("SELECT workerq_id, workerq_cmd FROM workerq WHERE workerq_reservationid IS NULL ORDER BY workerq_priority DESC, workerq_id ASC LIMIT 1 FOR UPDATE;");
+ $work = dbq("SELECT workerq_id, workerq_cmd FROM workerq WHERE workerq_reservationid IS NULL ORDER BY workerq_priority DESC, workerq_id ASC LIMIT 1 FOR UPDATE $sql_quirks");
if (!$work) {
self::qcommit();
diff --git a/Zotlabs/Module/Acl.php b/Zotlabs/Module/Acl.php
index bcd79c873..b98f5621e 100644
--- a/Zotlabs/Module/Acl.php
+++ b/Zotlabs/Module/Acl.php
@@ -378,6 +378,7 @@ class Acl extends \Zotlabs\Web\Controller {
"name" => $g['name'],
"id" => urlencode($g['id']),
"xid" => $g['hash'],
+ "url" => $g['url'],
"link" => $clink,
"nick" => ((strpos($g['nick'],'@')) ? substr($g['nick'],0,strpos($g['nick'],'@')) : $g['nick']),
"self" => (intval($g['abook_self']) ? 'abook-self' : ''),
diff --git a/Zotlabs/Module/Cal.php b/Zotlabs/Module/Cal.php
index 9049fe7d0..70d8aa755 100644
--- a/Zotlabs/Module/Cal.php
+++ b/Zotlabs/Module/Cal.php
@@ -65,13 +65,9 @@ class Cal extends Controller {
nav_set_selected('Calendar');
- head_add_css('/library/fullcalendar/packages/core/main.min.css');
- head_add_css('/library/fullcalendar/packages/daygrid/main.min.css');
+ head_add_js('/library/fullcalendar/dist/index.global.js');
head_add_css('cdav_calendar.css');
- head_add_js('/library/fullcalendar/packages/core/main.min.js');
- head_add_js('/library/fullcalendar/packages/daygrid/main.min.js');
-
$sql_extra = permissions_sql($channel['channel_id'], get_observer_hash(), 'event');
if(! perm_is_allowed($channel['channel_id'], get_observer_hash(), 'view_contacts') || App::$profile['hide_friends'])
diff --git a/Zotlabs/Module/Cdav.php b/Zotlabs/Module/Cdav.php
index 8e77515ce..b6d7ff5a3 100644
--- a/Zotlabs/Module/Cdav.php
+++ b/Zotlabs/Module/Cdav.php
@@ -901,19 +901,9 @@ class Cdav extends Controller {
//Display calendar(s) here
if(argc() <= 3 && argv(1) === 'calendar') {
-
- head_add_css('/library/fullcalendar/packages/core/main.min.css');
- head_add_css('/library/fullcalendar/packages/daygrid/main.min.css');
- head_add_css('/library/fullcalendar/packages/timegrid/main.min.css');
- head_add_css('/library/fullcalendar/packages/list/main.min.css');
+ head_add_js('/library/fullcalendar/dist/index.global.js');
head_add_css('cdav_calendar.css');
- head_add_js('/library/fullcalendar/packages/core/main.min.js');
- head_add_js('/library/fullcalendar/packages/interaction/main.min.js');
- head_add_js('/library/fullcalendar/packages/daygrid/main.min.js');
- head_add_js('/library/fullcalendar/packages/timegrid/main.min.js');
- head_add_js('/library/fullcalendar/packages/list/main.min.js');
-
$o = '';
$sources = '';
$resource_id = '';
diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php
index d3d72ca10..748d990cb 100644
--- a/Zotlabs/Module/Channel.php
+++ b/Zotlabs/Module/Channel.php
@@ -247,9 +247,7 @@ class Channel extends Controller {
$channel_acl = ['allow_cid' => '', 'allow_gid' => '', 'deny_cid' => '', 'deny_gid' => ''];
}
-
if ($perms['post_wall']) {
-
$x = [
'is_owner' => $is_owner,
'allow_location' => ((($is_owner || $observer) && (intval(get_pconfig(App::$profile['profile_uid'], 'system', 'use_browser_location')))) ? true : false),
@@ -273,6 +271,12 @@ class Channel extends Controller {
$o .= status_editor($a, $x, false, 'Channel');
}
+ // Add pinned content
+ if (!x($_REQUEST, 'mid') && !$search) {
+ $pinned = new \Zotlabs\Widget\Pinned;
+ $r = $pinned->widget(intval(App::$profile['profile_uid']), [ITEM_TYPE_POST]);
+ $o .= $r['html'];
+ }
}
@@ -423,17 +427,14 @@ class Channel extends Controller {
$items = [];
}
- // Add pinned content
- if (!x($_REQUEST, 'mid') && !$search) {
- $pinned = new \Zotlabs\Widget\Pinned;
- $r = $pinned->widget(intval(App::$profile['profile_uid']), [ITEM_TYPE_POST]);
- $o .= $r['html'];
- }
+
$mode = (($search) ? 'search' : 'channel');
if ((!$update) && (!$load)) {
+
+
//if we got a decoded hash we must encode it again before handing to javascript
$mid = gen_link_id($mid);
diff --git a/Zotlabs/Module/Chanview.php b/Zotlabs/Module/Chanview.php
index f43432376..e178b27df 100644
--- a/Zotlabs/Module/Chanview.php
+++ b/Zotlabs/Module/Chanview.php
@@ -16,17 +16,17 @@ class Chanview extends \Zotlabs\Web\Controller {
$r = null;
- if(isset($_REQUEST['hash']) && $_REQUEST['hash']) {
+ if(!empty($_REQUEST['hash'])) {
$r = q("select * from xchan where xchan_hash = '%s' and xchan_deleted = 0",
dbesc($_REQUEST['hash'])
);
}
- if(isset($_REQUEST['address']) && $_REQUEST['address']) {
+ if(!empty($_REQUEST['address'])) {
$r = q("select * from xchan where xchan_addr = '%s' and xchan_deleted = 0",
dbesc(punify($_REQUEST['address']))
);
}
- elseif(local_channel() && isset($_REQUEST['cid']) && $_REQUEST['cid']) {
+ elseif(local_channel() && !empty($_REQUEST['cid'])) {
$r = q("SELECT abook.*, xchan.*
FROM abook left join xchan on abook_xchan = xchan_hash
WHERE abook_channel = %d and abook_id = %d and xchan_deleted = 0",
@@ -34,8 +34,7 @@ class Chanview extends \Zotlabs\Web\Controller {
intval($_REQUEST['cid'])
);
}
- elseif(isset($_REQUEST['url']) && $_REQUEST['url']) {
-
+ elseif(!empty($_REQUEST['url'])) {
// if somebody re-installed they will have more than one xchan, use the most recent name date as this is
// the most useful consistently ascending table item we have.
@@ -56,7 +55,7 @@ class Chanview extends \Zotlabs\Web\Controller {
if(! App::$poi) {
logger('mod_chanview: fallback');
- if(isset($_REQUEST['address']) && $_REQUEST['address']) {
+ if(!empty($_REQUEST['address'])) {
$href = Webfinger::zot_url(punify($_REQUEST['address']));
if($href) {
$_REQUEST['url'] = $href;
@@ -65,9 +64,9 @@ class Chanview extends \Zotlabs\Web\Controller {
$r = null;
- if(isset($_REQUEST['url']) && $_REQUEST['url']) {
+ if(!empty($_REQUEST['url'])) {
- $zf = Zotfinger::exec($_REQUEST['url'], null);
+ $zf = Zotfinger::exec($_REQUEST['url']);
if(array_path_exists('signature/signer',$zf) && $zf['signature']['signer'] === $_REQUEST['url'] && intval($zf['signature']['header_valid'])) {
Libzot::import_xchan($zf['data']);
@@ -79,6 +78,7 @@ class Chanview extends \Zotlabs\Web\Controller {
}
}
if(! $r) {
+
if(discover_by_webbie($_REQUEST['url'])) {
$r = q("select * from xchan where xchan_url = '%s' and xchan_deleted = 0",
dbesc($_REQUEST['url'])
diff --git a/Zotlabs/Module/Connections.php b/Zotlabs/Module/Connections.php
index ea30b9b9e..e0f463c76 100644
--- a/Zotlabs/Module/Connections.php
+++ b/Zotlabs/Module/Connections.php
@@ -145,6 +145,7 @@ class Connections extends \Zotlabs\Web\Controller {
}
$search = ((x($_REQUEST,'search')) ? notags(trim($_REQUEST['search'])) : '');
+ $search_xchan = ((x($_REQUEST,'search_xchan')) ? notags(trim($_REQUEST['search_xchan'])) : '');
$tabs = array(
/*
@@ -233,10 +234,15 @@ class Connections extends \Zotlabs\Web\Controller {
if($search) {
$search_hdr = $search;
- $search_txt = dbesc(protect_sprintf(preg_quote($search)));
- $searching = true;
+ $search_txt = (($search_xchan) ? urldecode($search_xchan) : preg_quote($search));
+
+ if ($search_xchan) {
+ $sql_extra .= " AND xchan_hash = '" . protect_sprintf(dbesc($search_txt)) . "' ";
+ }
+ else {
+ $sql_extra .= " AND xchan_name LIKE '%%" . protect_sprintf(dbesc($search_txt)) . "%%' ";
+ }
}
- $sql_extra .= (($searching) ? protect_sprintf(" AND xchan_name like '%$search_txt%' ") : "");
if(isset($_REQUEST['gid']) && $_REQUEST['gid']) {
$sql_extra .= " and xchan_hash in ( select xchan from pgrp_member where gid = " . intval($_REQUEST['gid']) . " and uid = " . intval(local_channel()) . " ) ";
@@ -396,7 +402,7 @@ class Connections extends \Zotlabs\Web\Controller {
'$search' => $search_hdr,
'$label' => t('Search'),
'$role_label' => t('Contact role'),
- '$desc' => t('Search your connections'),
+ '$desc' => $search ?? t('Search your connections'),
'$finding' => (($searching) ? t('Contact search') . ": '" . $search . "'" : ""),
'$submit' => t('Find'),
'$edit' => t('Edit'),
diff --git a/Zotlabs/Module/Dirsearch.php b/Zotlabs/Module/Dirsearch.php
index 34678af57..c0df8a1e3 100644
--- a/Zotlabs/Module/Dirsearch.php
+++ b/Zotlabs/Module/Dirsearch.php
@@ -263,7 +263,7 @@ class Dirsearch extends Controller {
xprof.xprof_homepage as homepage,
xprof.xprof_hometown as hometown,
xprof.xprof_keywords as keywords
- from xchan left join xprof on xchan_hash = xprof_hash left join hubloc on hubloc_hash = xchan_hash
+ from xchan left join xprof on xchan_hash = xprof_hash left join hubloc on (hubloc_id_url = xchan_url and hubloc_hash = xchan_hash)
where hubloc_primary = 1 and hubloc_updated > %s - INTERVAL %s and ( $logic $sql_extra ) $hub_query and xchan_network = 'zot6' and xchan_system = 0 and xchan_hidden = 0 and xchan_orphan = 0 and xchan_deleted = 0
$safesql $order $qlimit",
db_utcnow(),
diff --git a/Zotlabs/Module/Hq.php b/Zotlabs/Module/Hq.php
index 0b2d0ea7d..77d56e9a2 100644
--- a/Zotlabs/Module/Hq.php
+++ b/Zotlabs/Module/Hq.php
@@ -51,13 +51,20 @@ class Hq extends \Zotlabs\Web\Controller {
$o = '';
if($item_hash) {
+ // select the target item with a bias to our own item
+ $sql_order = ((local_channel() > $sys['channel_id']) ? 'DESC' : 'ASC');
- $r = q("select id, uid, mid, parent_mid, thr_parent, verb, item_type, item_deleted, item_blocked from item where mid = '%s' limit 1",
+ $r = q("select id, uid, mid, parent_mid, thr_parent, verb, item_type, item_deleted, item_blocked from item where uid in (%d, %d) and mid = '%s' order by uid $sql_order limit 2",
+ intval(local_channel()),
+ intval($sys['channel_id']),
dbesc($item_hash)
);
if($r) {
$target_item = $r[0];
+ if (intval($target_item['uid']) === intval($sys['channel_id'])) {
+ $sys_item = true;
+ }
}
//if the item is to be moderated redirect to /moderate
@@ -158,19 +165,18 @@ class Hq extends \Zotlabs\Web\Controller {
}
if($load && $target_item) {
- $r = null;
-
- $r = q("SELECT item.id AS item_id FROM item
- WHERE uid = %d
- AND mid = '%s'
- $item_normal
- LIMIT 1",
- intval(local_channel()),
- dbesc($target_item['parent_mid'])
- );
- if(!$r) {
- $sys_item = true;
+ if (!$sys_item) {
+ $r = q("SELECT item.id AS item_id FROM item
+ WHERE uid = %d
+ AND mid = '%s'
+ $item_normal
+ LIMIT 1",
+ intval(local_channel()),
+ dbesc($target_item['parent_mid'])
+ );
+ }
+ else {
$sql_extra = item_permissions_sql($sys['channel_id']);
$r = q("SELECT item.id AS item_id FROM item
@@ -184,20 +190,18 @@ class Hq extends \Zotlabs\Web\Controller {
}
}
elseif($update && $target_item) {
- $r = null;
-
- $r = q("SELECT item.parent AS item_id FROM item
- WHERE uid = %d
- AND parent_mid = '%s'
- $item_normal_update
- $simple_update
- LIMIT 1",
- intval(local_channel()),
- dbesc($target_item['parent_mid'])
- );
-
- if(!$r) {
- $sys_item = true;
+ if (!$sys_item) {
+ $r = q("SELECT item.parent AS item_id FROM item
+ WHERE uid = %d
+ AND parent_mid = '%s'
+ $item_normal_update
+ $simple_update
+ LIMIT 1",
+ intval(local_channel()),
+ dbesc($target_item['parent_mid'])
+ );
+ }
+ else {
$sql_extra = item_permissions_sql($sys['channel_id']);
$r = q("SELECT item.parent AS item_id FROM item
@@ -245,6 +249,7 @@ class Hq extends \Zotlabs\Web\Controller {
$options['offset'] = $_REQUEST['offset'] ?? 0;
$options['type'] = $_REQUEST['type'] ?? '';
+ $options['author'] = ((isset($_REQUEST['author'])) ? urldecode($_REQUEST['author']) : '');
$ret = Messages::get_messages_page($options);
diff --git a/Zotlabs/Module/Like.php b/Zotlabs/Module/Like.php
index 98fa7db5a..ef41faedd 100644
--- a/Zotlabs/Module/Like.php
+++ b/Zotlabs/Module/Like.php
@@ -546,6 +546,7 @@ class Like extends Controller {
$arr['deny_cid'] = $deny_cid;
$arr['deny_gid'] = $deny_gid;
$arr['item_private'] = $private;
+ $arr['created'] = datetime_convert();
call_hooks('post_local', $arr);
diff --git a/Zotlabs/Module/Magic.php b/Zotlabs/Module/Magic.php
index bfd38d2fa..6d997c662 100644
--- a/Zotlabs/Module/Magic.php
+++ b/Zotlabs/Module/Magic.php
@@ -16,7 +16,7 @@ class Magic extends Controller {
'url' => '',
'message' => ''
];
-
+
logger('mod_magic: invoked', LOGGER_DEBUG);
logger('args: ' . print_r($_REQUEST,true),LOGGER_DATA);
@@ -43,12 +43,12 @@ class Magic extends Controller {
$basepath = $parsed['scheme'] . '://' . $parsed['host'] . (isset($parsed['port']) ? ':' . $parsed['port'] : '');
$owapath = SConfig::get($basepath,'system','openwebauth', $basepath . '/owa');
- // This is ready-made for a plugin that provides a blacklist or "ask me" before blindly authenticating.
+ // This is ready-made for a plugin that provides a blacklist or "ask me" before blindly authenticating.
// By default, we'll proceed without asking.
$arr = [
'channel_id' => local_channel(),
- 'destination' => $dest,
+ 'destination' => $dest,
'proceed' => true
];
diff --git a/Zotlabs/Module/Notes.php b/Zotlabs/Module/Notes.php
index 57b8f30db..2fd719f25 100644
--- a/Zotlabs/Module/Notes.php
+++ b/Zotlabs/Module/Notes.php
@@ -39,7 +39,7 @@ class Notes extends Controller {
}
set_pconfig(local_channel(),'notes','text',$body);
- $ret['html'] = bbcode($body);
+ $ret['html'] = bbcode($body, ['tryoembed' => false]);
$ret['success'] = true;
}
diff --git a/Zotlabs/Module/Settings/Account.php b/Zotlabs/Module/Settings/Account.php
index 5e1fb176e..85e7c793f 100644
--- a/Zotlabs/Module/Settings/Account.php
+++ b/Zotlabs/Module/Settings/Account.php
@@ -105,6 +105,7 @@ class Account {
'$password1' => array('npassword', t('Enter New Password'), '', ''),
'$password2' => array('confirm', t('Confirm New Password'), '', t('Leave password fields blank unless changing')),
'$submit' => t('Submit'),
+ '$mfa' => t('Multi-Factor Authentication'),
'$email' => array('email', t('DId2 or Email Address:'), $email, '', '', $attremail),
'$email_hidden' => (($attremail) ? $email : ''),
'$removeme' => t('Remove Account'),
diff --git a/Zotlabs/Module/Settings/Multifactor.php b/Zotlabs/Module/Settings/Multifactor.php
new file mode 100644
index 000000000..8b91bc87a
--- /dev/null
+++ b/Zotlabs/Module/Settings/Multifactor.php
@@ -0,0 +1,90 @@
+<?php
+
+namespace Zotlabs\Module\Settings;
+
+use App;
+use chillerlan\QRCode\QRCode;
+use Zotlabs\Lib\AConfig;
+use Zotlabs\Lib\System;
+use OTPHP\TOTP;
+use ParagonIE\ConstantTime\Base32;
+
+
+class Multifactor {
+ public function post() {
+ check_form_security_token_redirectOnErr('/settings/multifactor', 'settings_mfa');
+
+ $account = App::get_account();
+ if (!$account) {
+ return;
+ }
+
+ if (empty($_POST['password'])) {
+ notice(t('Password is required') . EOL);
+ return;
+ }
+
+ $password = trim($_POST['password']);
+ if(!account_verify_password($account['account_email'], $password)) {
+ notice(t('The provided password is not correct') . EOL);
+ return;
+ }
+
+ $enable_mfa = isset($_POST['enable_mfa']) ? (int) $_POST['enable_mfa'] : false;
+ AConfig::Set($account['account_id'], 'system', 'mfa_enabled', $enable_mfa);
+ if ($enable_mfa) {
+ $_SESSION['2FA_VERIFIED'] = true;
+ }
+ }
+
+ public function get() {
+ $account = App::get_account();
+ if (!$account) {
+ return '';
+ }
+
+ if (!$account['account_external']) {
+ $otp = TOTP::create();
+ $otp->setLabel($account['account_email']);
+ // $otp->setLabel(rawurlencode(System::get_platform_name()));
+ $otp->setIssuer(rawurlencode(System::get_platform_name()));
+
+ $mySecret = trim(Base32::encodeUpper(random_bytes(32)), '=');
+ $otp = TOTP::create($mySecret);
+ q("UPDATE account set account_external = '%s' where account_id = %d",
+ dbesc($otp->getSecret()),
+ intval($account['account_id'])
+ );
+ $account['account_external'] = $otp->getSecret();
+ }
+
+ $otp = TOTP::create($account['account_external']);
+ $otp->setLabel($account['account_email']);
+ $otp->setIssuer(rawurlencode(System::get_platform_name()));
+ $uri = $otp->getProvisioningUri();
+ return replace_macros(get_markup_template('totp_setup.tpl'),
+ [
+ '$form_security_token' => get_form_security_token("settings_mfa"),
+ '$title' => t('Account Multi-Factor Authentication'),
+ '$secret_text' => t('This is your generated secret. It may be used in some cases if the QR image cannot be read. Please store it in a safe place.'),
+ '$test_title' => t('Please enter the code from your authenticator app'),
+ '$test_title_sub' => t('You will only be able to enable MFA if the test passes'),
+ '$qrcode' => (new QRCode())->render($uri),
+ '$uri' => $uri,
+ '$secret' => ($account['account_external'] ?? ''),
+ '$test_pass' => t("Congratulations, the provided code was correct"),
+ '$test_fail' => t("Incorrect code"),
+ '$enable_mfa' => [
+ 'enable_mfa',
+ t('Enable Multi-Factor Authentication'),
+ AConfig::Get($account['account_id'], 'system', 'mfa_enabled'),
+ t('Logging in will require you to be in possession of your smartphone'),
+ [t('No'), t('Yes')]
+ ],
+ '$password' => ['password', t('Your account password'), '', t('Required')],
+ '$submit' => t('Submit'),
+ '$test' => t('Test')
+ ]
+ );
+ }
+}
diff --git a/Zotlabs/Module/Totp_check.php b/Zotlabs/Module/Totp_check.php
new file mode 100644
index 000000000..8212d3716
--- /dev/null
+++ b/Zotlabs/Module/Totp_check.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace Zotlabs\Module;
+
+use App;
+use Zotlabs\Web\Controller;
+use OTPHP\TOTP;
+
+class Totp_check extends Controller {
+
+ public function post() {
+ $retval = ['status' => false];
+ $static = $_POST['totp_code_static'] ?? false;
+
+ if (!local_channel()) {
+ if ($static) {
+ goaway(z_root());
+ }
+
+ json_return_and_die($retval);
+ }
+
+ $account = App::get_account();
+ if (!$account) {
+ json_return_and_die($retval);
+ }
+
+ $secret = $account['account_external'];
+ $input = (isset($_POST['totp_code'])) ? trim($_POST['totp_code']) : '';
+
+ if ($secret && $input) {
+ $otp = TOTP::create($secret); // create TOTP object from the secret.
+ if ($otp->verify($_POST['totp_code']) || $input === $secret ) {
+ logger('otp_success');
+ $_SESSION['2FA_VERIFIED'] = true;
+
+ if ($static) {
+ goaway(z_root());
+ }
+
+ $retval['status'] = true;
+ json_return_and_die($retval);
+ }
+ logger('otp_fail');
+ }
+
+ if ($static) {
+ if(empty($_SESSION['totp_try_count'])) {
+ $_SESSION['totp_try_count'] = 1;
+ }
+
+ if ($_SESSION['totp_try_count'] > 2) {
+ goaway('logout');
+ }
+
+ $_SESSION['totp_try_count']++;
+ goaway(z_root());
+ }
+
+ json_return_and_die($retval);
+ }
+
+ public function get() {
+
+ if (!local_channel() || App::$module === 'totp_check') {
+ goaway(z_root());
+ }
+
+ $account = App::get_account();
+ if (!$account) {
+ return t('Account not found.');
+ }
+
+ $id = $account['account_email'];
+
+ return replace_macros(get_markup_template('totp.tpl'),
+ [
+ '$header' => t('Multifactor Verification'),
+ '$id' => $id,
+ '$desc' => t('Please enter the verification key from your authenticator app'),
+ '$submit' => t('Verify')
+ ]
+ );
+ }
+}
+
diff --git a/Zotlabs/Widget/Channel_activities.php b/Zotlabs/Widget/Channel_activities.php
index 06080f8c8..a799ea81e 100644
--- a/Zotlabs/Widget/Channel_activities.php
+++ b/Zotlabs/Widget/Channel_activities.php
@@ -179,7 +179,7 @@ class Channel_activities {
$account = App::get_account();
- $r = q("SELECT channel_id, channel_name, xchan_photo_s FROM channel
+ $r = q("SELECT channel_id, channel_name, xchan_addr, xchan_photo_s FROM channel
LEFT JOIN xchan ON channel_hash = xchan_hash
WHERE channel_account_id = %d
AND channel_id != %d AND channel_removed = 0",
@@ -223,7 +223,7 @@ class Channel_activities {
$i[] = [
'url' => z_root() . '/manage/' . $rr['channel_id'],
'title' => '',
- 'summary' => '<img src="' . $rr['xchan_photo_s'] . '" class="menu-img-2">' . $rr['channel_name'],
+ 'summary' => '<div class="text-truncate lh-sm"><img src="' . $rr['xchan_photo_s'] . '" class="menu-img-2">' . '<strong>' . $rr['channel_name'] . '</strong><br><small class="opacity-75">' . $rr['xchan_addr'] . '</small></div>',
'footer' => $footer
];
diff --git a/Zotlabs/Widget/Messages.php b/Zotlabs/Widget/Messages.php
index 8c413e16e..0a8900c4f 100644
--- a/Zotlabs/Widget/Messages.php
+++ b/Zotlabs/Widget/Messages.php
@@ -35,7 +35,8 @@ class Messages {
'notice_messages_title' => t('Notices'),
'loading' => t('Loading'),
'empty' => t('No messages'),
- 'unseen_count' => t('Unseen')
+ 'unseen_count' => t('Unseen'),
+ 'filter' => t('Filter by name or address')
]
]);
@@ -47,7 +48,8 @@ class Messages {
return;
$offset = $options['offset'] ?? 0;
- $type = $options['type'] ?? 'default';
+ $type = $options['type'] ?? '';
+ $author = $options['author'] ?? '';
if ($offset == -1) {
return;
@@ -63,10 +65,12 @@ class Messages {
$entries = [];
$limit = 30;
$dummy_order_sql = '';
+ $author_sql = '';
$loadtime = (($offset) ? $_SESSION['messages_loadtime'] : datetime_convert());
$vnotify = get_pconfig(local_channel(), 'system', 'vnotify', -1);
- $vnotify_sql = '';
+ $vnotify_sql_c = '';
+ $vnotify_sql_i = '';
if (!($vnotify & VNOTIFY_LIKE)) {
$vnotify_sql_c = " AND c.verb NOT IN ('" . dbesc(ACTIVITY_LIKE) . "', '" . dbesc(ACTIVITY_DISLIKE) . "') ";
@@ -77,6 +81,10 @@ class Messages {
$vnotify_sql_i = " AND i.verb NOT IN ('" . dbesc(ACTIVITY_DISLIKE) . "') ";
}
+ if($author) {
+ $author_sql = " AND i.owner_xchan = '" . protect_sprintf(dbesc($author)) . "' ";
+ }
+
switch($type) {
case 'direct':
$type_sql = ' AND i.item_private = 2 ';
@@ -100,6 +108,7 @@ class Messages {
AND i.created <= '%s'
$type_sql
AND i.item_thread_top = 1
+ $author_sql
$item_normal_i
ORDER BY i.created DESC $dummy_order_sql
LIMIT $limit OFFSET $offset",
@@ -153,7 +162,7 @@ class Messages {
$summary = '...';
}
else {
- $summary = substr_words($summary, 68);
+ $summary = substr_words($summary, 140);
}
switch(intval($item['item_private'])) {
@@ -169,6 +178,7 @@ class Messages {
$entries[$i]['author_name'] = $item['author']['xchan_name'];
$entries[$i]['author_addr'] = (($item['author']['xchan_addr']) ? $item['author']['xchan_addr'] : $item['author']['xchan_url']);
+ $entries[$i]['author_img'] = $item['author']['xchan_photo_s'];
$entries[$i]['info'] = $info;
$entries[$i]['created'] = datetime_convert('UTC', date_default_timezone_get(), $item['created']);
$entries[$i]['summary'] = $summary;
@@ -240,6 +250,7 @@ class Messages {
if (!local_channel())
return;
+
$limit = 30;
$offset = 0;
@@ -247,7 +258,14 @@ class Messages {
$offset = intval($options['offset']);
}
- $notices = q("SELECT * FROM notify WHERE uid = %d
+ $author_url = $options['author'] ?? '';
+ $author_sql = '';
+
+ if($author_url) {
+ $author_sql = " AND url = '" . protect_sprintf(dbesc($author_url)) . "' ";
+ }
+
+ $notices = q("SELECT * FROM notify WHERE uid = %d $author_sql
ORDER BY created DESC LIMIT $limit OFFSET $offset",
intval(local_channel())
);
@@ -265,6 +283,7 @@ class Messages {
$entries[$i]['author_name'] = $notice['xname'];
$entries[$i]['author_addr'] = $notice['url'];
+ $entries[$i]['author_img'] = $notice['photo'];// $item['author']['xchan_photo_s'];
$entries[$i]['info'] = '';
$entries[$i]['created'] = datetime_convert('UTC', date_default_timezone_get(), $notice['created']);
$entries[$i]['summary'] = $summary;
diff --git a/Zotlabs/Widget/Pinned.php b/Zotlabs/Widget/Pinned.php
index 83036e98c..6d2618deb 100644
--- a/Zotlabs/Widget/Pinned.php
+++ b/Zotlabs/Widget/Pinned.php
@@ -42,6 +42,8 @@ class Pinned {
$observer = \App::get_observer();
+ xchan_query($items);
+
foreach($items as $item) {
$midb64 = gen_link_id($item['mid']);
@@ -49,8 +51,8 @@ class Pinned {
if(isset($observer['xchan_hash']) && in_array($observer['xchan_hash'], get_pconfig($item['uid'], 'pinned_hide', $midb64, [])))
continue;
- $author = channelx_by_hash($item['author_xchan']);
- $owner = channelx_by_hash($item['owner_xchan']);
+ $author = $item['author'];
+ $owner = $item['owner'];
$profile_avatar = $author['xchan_photo_m'];
$profile_link = chanlink_hash($item['author_xchan']);
@@ -159,7 +161,9 @@ class Pinned {
'hide' => (! $is_new && isset($observer['xchan_hash']) && $observer['xchan_hash'] != $owner['xchan_hash'] ? t("Don't show") : ''),
// end toolbar buttons
'modal_dismiss' => t('Close'),
- 'responses' => $conv_responses
+ 'responses' => $conv_responses,
+ 'author_id' => (($author['xchan_addr']) ? $author['xchan_addr'] : $author['xchan_url'])
+
];
$tpl = get_markup_template('pinned_item.tpl');
diff --git a/boot.php b/boot.php
index 0b19fb5b3..3da55d6f5 100644
--- a/boot.php
+++ b/boot.php
@@ -60,7 +60,7 @@ require_once('include/bbcode.php');
require_once('include/items.php');
define('PLATFORM_NAME', 'hubzilla');
-define('STD_VERSION', '8.0');
+define('STD_VERSION', '8.2');
define('ZOT_REVISION', '6.0');
define('DB_UPDATE_VERSION', 1255);
@@ -1862,10 +1862,9 @@ function can_view_public_stream() {
}
}
- $site_firehose = ((intval(get_config('system', 'site_firehose', 0))) ? true : false);
$net_firehose = ((get_config('system', 'disable_discover_tab', 1)) ? false : true);
- if (!($site_firehose || $net_firehose)) {
+ if (!$net_firehose) {
return false;
}
diff --git a/composer.json b/composer.json
index 98fa7f812..1831d35af 100644
--- a/composer.json
+++ b/composer.json
@@ -41,11 +41,13 @@
"lukasreschke/id3parser": "^0.0.3",
"smarty/smarty": "^4.1",
"ramsey/uuid": "^4.1",
- "twbs/bootstrap": "^5.0.1",
+ "twbs/bootstrap": "5.3.0-alpha1",
"blueimp/jquery-file-upload": "^10.3",
"desandro/imagesloaded": "^4.1",
"phpseclib/phpseclib": "~2.0",
- "jbroadway/urlify": "^1.2"
+ "jbroadway/urlify": "^1.2",
+ "chillerlan/php-qrcode": "^4.3",
+ "spomky-labs/otphp": "^11.1"
},
"require-dev": {
"phpunit/phpunit": "^9.4",
diff --git a/composer.lock b/composer.lock
index c7bb42b70..fea970011 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "b0942189dde4fd59450e03c6eae70758",
+ "content-hash": "12bbabd1d50360fa40c1bcd8d8458c2d",
"packages": [
{
"name": "blueimp/jquery-file-upload",
@@ -195,6 +195,148 @@
"time": "2022-05-31T16:12:58+00:00"
},
{
+ "name": "chillerlan/php-qrcode",
+ "version": "4.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-qrcode.git",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "shasum": ""
+ },
+ "require": {
+ "chillerlan/php-settings-container": "^2.1.4",
+ "ext-mbstring": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^5.3",
+ "phpunit/phpunit": "^9.5",
+ "setasign/fpdf": "^1.8.2"
+ },
+ "suggest": {
+ "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
+ "setasign/fpdf": "Required to use the QR FPDF output."
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\QRCode\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
+ }
+ ],
+ "description": "A QR code generator. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
+ "keywords": [
+ "phpqrcode",
+ "qr",
+ "qr code",
+ "qrcode",
+ "qrcode-generator"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-qrcode/issues",
+ "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2022-07-25T09:12:45+00:00"
+ },
+ {
+ "name": "chillerlan/php-settings-container",
+ "version": "2.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-settings-container.git",
+ "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
+ "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^5.3",
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\Settings\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ }
+ ],
+ "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-settings-container",
+ "keywords": [
+ "PHP7",
+ "Settings",
+ "configuration",
+ "container",
+ "helper"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-settings-container/issues",
+ "source": "https://github.com/chillerlan/php-settings-container"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "time": "2022-07-05T22:32:14+00:00"
+ },
+ {
"name": "commerceguys/intl",
"version": "v1.1.1",
"source": {
@@ -603,6 +745,73 @@
"time": "2022-09-26T12:21:08+00:00"
},
{
+ "name": "paragonie/constant_time_encoding",
+ "version": "v2.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/constant_time_encoding.git",
+ "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
+ "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7|^8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "vimeo/psalm": "^1|^2|^3|^4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Steve 'Sc00bz' Thomas",
+ "email": "steve@tobtu.com",
+ "homepage": "https://www.tobtu.com",
+ "role": "Original Developer"
+ }
+ ],
+ "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+ "keywords": [
+ "base16",
+ "base32",
+ "base32_decode",
+ "base32_encode",
+ "base64",
+ "base64_decode",
+ "base64_encode",
+ "bin2hex",
+ "encoding",
+ "hex",
+ "hex2bin",
+ "rfc4648"
+ ],
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+ "source": "https://github.com/paragonie/constant_time_encoding"
+ },
+ "time": "2022-06-14T06:56:20+00:00"
+ },
+ {
"name": "pear/text_languagedetect",
"version": "v1.0.1",
"source": {
@@ -1429,26 +1638,27 @@
},
{
"name": "simplepie/simplepie",
- "version": "1.7.0",
+ "version": "1.8.0",
"source": {
"type": "git",
"url": "https://github.com/simplepie/simplepie.git",
- "reference": "9e9add3428ce86aede874bcf9a59c78e272f8dc1"
+ "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/simplepie/simplepie/zipball/9e9add3428ce86aede874bcf9a59c78e272f8dc1",
- "reference": "9e9add3428ce86aede874bcf9a59c78e272f8dc1",
+ "url": "https://api.github.com/repos/simplepie/simplepie/zipball/65b095d87bc00898d8fa7737bdbcda93a3fbcc55",
+ "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55",
"shasum": ""
},
"require": {
"ext-pcre": "*",
"ext-xml": "*",
"ext-xmlreader": "*",
- "php": ">=5.6.0"
+ "php": ">=7.2.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.19 || ^3.8",
+ "psr/simple-cache": "^1 || ^2 || ^3",
"yoast/phpunit-polyfills": "^1.0.1"
},
"suggest": {
@@ -1507,23 +1717,23 @@
"rss"
],
"support": {
- "source": "https://github.com/simplepie/simplepie/tree/1.7.0",
+ "source": "https://github.com/simplepie/simplepie/tree/1.8.0",
"issues": "https://github.com/simplepie/simplepie/issues"
},
- "time": "2022-09-30T06:49:48+00:00"
+ "time": "2023-01-20T08:37:35+00:00"
},
{
"name": "smarty/smarty",
- "version": "v4.2.1",
+ "version": "v4.3.0",
"source": {
"type": "git",
"url": "https://github.com/smarty-php/smarty.git",
- "reference": "ffa2b81a8e354a49fd8a2f24742dc9dc399e8007"
+ "reference": "c02e9e135ea719b91f457a0072748ded0e852e7d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/smarty-php/smarty/zipball/ffa2b81a8e354a49fd8a2f24742dc9dc399e8007",
- "reference": "ffa2b81a8e354a49fd8a2f24742dc9dc399e8007",
+ "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c02e9e135ea719b91f457a0072748ded0e852e7d",
+ "reference": "c02e9e135ea719b91f457a0072748ded0e852e7d",
"shasum": ""
},
"require": {
@@ -1574,9 +1784,89 @@
"support": {
"forum": "https://github.com/smarty-php/smarty/discussions",
"issues": "https://github.com/smarty-php/smarty/issues",
- "source": "https://github.com/smarty-php/smarty/tree/v4.2.1"
+ "source": "https://github.com/smarty-php/smarty/tree/v4.3.0"
+ },
+ "time": "2022-11-22T21:47:32+00:00"
+ },
+ {
+ "name": "spomky-labs/otphp",
+ "version": "11.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Spomky-Labs/otphp.git",
+ "reference": "4849ac1aa560bfc56c0d1534b0d72532da4665ab"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/4849ac1aa560bfc56c0d1534b0d72532da4665ab",
+ "reference": "4849ac1aa560bfc56c0d1534b0d72532da4665ab",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "paragonie/constant_time_encoding": "^2.0",
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "ekino/phpstan-banned-code": "^1.0",
+ "infection/infection": "^0.26",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-deprecation-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.0",
+ "phpunit/phpunit": "^9.5.26",
+ "qossmic/deptrac-shim": "^1.0",
+ "rector/rector": "^0.14",
+ "symfony/phpunit-bridge": "^6.1",
+ "symplify/easy-coding-standard": "^11.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "OTPHP\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Florent Morselli",
+ "homepage": "https://github.com/Spomky"
+ },
+ {
+ "name": "All contributors",
+ "homepage": "https://github.com/Spomky-Labs/otphp/contributors"
+ }
+ ],
+ "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator",
+ "homepage": "https://github.com/Spomky-Labs/otphp",
+ "keywords": [
+ "FreeOTP",
+ "RFC 4226",
+ "RFC 6238",
+ "google authenticator",
+ "hotp",
+ "otp",
+ "totp"
+ ],
+ "support": {
+ "issues": "https://github.com/Spomky-Labs/otphp/issues",
+ "source": "https://github.com/Spomky-Labs/otphp/tree/11.1.0"
},
- "time": "2022-09-14T10:59:01+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/Spomky",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/FlorentMorselli",
+ "type": "patreon"
+ }
+ ],
+ "time": "2022-11-11T12:57:17+00:00"
},
{
"name": "symfony/polyfill-php81",
@@ -1659,16 +1949,16 @@
},
{
"name": "twbs/bootstrap",
- "version": "v5.2.2",
+ "version": "v5.3.0-alpha1",
"source": {
"type": "git",
"url": "https://github.com/twbs/bootstrap.git",
- "reference": "961d5ff9844372a4e294980c667bbe7e0651cdeb"
+ "reference": "cf9454caa00872899215603e5e036d9a824b1b11"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twbs/bootstrap/zipball/961d5ff9844372a4e294980c667bbe7e0651cdeb",
- "reference": "961d5ff9844372a4e294980c667bbe7e0651cdeb",
+ "url": "https://api.github.com/repos/twbs/bootstrap/zipball/cf9454caa00872899215603e5e036d9a824b1b11",
+ "reference": "cf9454caa00872899215603e5e036d9a824b1b11",
"shasum": ""
},
"replace": {
@@ -1703,9 +1993,9 @@
],
"support": {
"issues": "https://github.com/twbs/bootstrap/issues",
- "source": "https://github.com/twbs/bootstrap/tree/v5.2.2"
+ "source": "https://github.com/twbs/bootstrap/tree/v5.3.0-alpha1"
},
- "time": "2022-10-03T07:44:02+00:00"
+ "time": "2022-12-24T16:37:22+00:00"
},
{
"name": "voku/portable-ascii",
@@ -7095,6 +7385,7 @@
"aliases": [],
"minimum-stability": "stable",
"stability-flags": {
+ "twbs/bootstrap": 15,
"behat/behat": 0,
"behat/mink-extension": 0,
"behat/mink-goutte-driver": 0
diff --git a/include/auth.php b/include/auth.php
index 125aedffd..5956b89e2 100644
--- a/include/auth.php
+++ b/include/auth.php
@@ -10,6 +10,8 @@
*/
use Zotlabs\Lib\Libzot;
+use Zotlabs\Lib\AConfig;
+use Zotlabs\Module\Totp_check;
require_once('include/api_auth.php');
require_once('include/security.php');
@@ -263,8 +265,16 @@ if((isset($_SESSION)) && (x($_SESSION, 'authenticated')) &&
App::$session->extend_cookie();
$login_refresh = true;
}
+
+ $multiFactor = AConfig::Get(App::$account['account_id'], 'system', 'mfa_enabled');
+ if ($multiFactor && empty($_SESSION['2FA_VERIFIED']) && App::$module !== 'totp_check') {
+ $o = new Totp_check;
+ echo $o->get();
+ killme();
+ }
+
$ch = (($_SESSION['uid']) ? channelx_by_n($_SESSION['uid']) : null);
- authenticate_success($r[0], null, $ch, false, false, $login_refresh);
+ authenticate_success($r[0], $ch, false, false, $login_refresh);
}
else {
$_SESSION['account_id'] = 0;
diff --git a/include/bbcode.php b/include/bbcode.php
index 6ec24fa0b..735f267c3 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -295,9 +295,11 @@ function bb_parse_b64_crypt($match) {
if(empty($match[2]))
return;
- $r .= '----- ENCRYPTED CONTENT -----' . PHP_EOL;
- $r .= $match[2] . PHP_EOL;
+ $r .= '<code>';
+ $r .= '----- ENCRYPTED CONTENT -----' . '<br>';
+ $r .= $match[2] . '<br>';
$r .= '----- END ENCRYPTED CONTENT -----';
+ $r .= '</code>';
return $r;
diff --git a/include/cdav.php b/include/cdav.php
index fcce0ec4a..73977e624 100644
--- a/include/cdav.php
+++ b/include/cdav.php
@@ -132,7 +132,7 @@ function import_cdav_card($id, $ext, $table, $column, $objects, $profile, $backe
$objectUri = random_string(40) . '.' . $ext;
$r = q("SELECT uri FROM $table WHERE $column = %d AND uri = '%s' LIMIT 1",
- dbesc($id),
+ dbesc(is_array($id) ? $id[0] : $id),
dbesc($objectUri)
);
if (count($r))
diff --git a/include/channel.php b/include/channel.php
index 296615524..c36e50f19 100644
--- a/include/channel.php
+++ b/include/channel.php
@@ -3086,6 +3086,6 @@ function channel_url($channel) {
}
function get_channel_hashes() {
- $r = q("SELECT channel_hash FROM channel WHERE channel_removed = 0");
+ $r = dbq("SELECT channel_hash FROM channel WHERE channel_removed = 0");
return flatten_array_recursive($r);
}
diff --git a/include/conversation.php b/include/conversation.php
index caad5bb0e..2f0b6f6fd 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -802,6 +802,7 @@ function conversation($items, $mode, $update, $page_mode = 'traditional', $prepa
'mid' => gen_link_id($item['mid']),
'mids' => json_encode([gen_link_id($item['mid'])]),
'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, $profile_link),
+ 'author_id' => (($item['author']['xchan_addr']) ? $item['author']['xchan_addr'] : $item['author']['xchan_url']),
'profile_url' => $profile_link,
'thread_action_menu' => thread_action_menu($item,$mode),
'thread_author_menu' => thread_author_menu($item,$mode),
diff --git a/include/event.php b/include/event.php
index b27504296..6273279c2 100644
--- a/include/event.php
+++ b/include/event.php
@@ -1389,8 +1389,8 @@ function event_store_item($arr, $event) {
// 'summary' => bbcode($arr['summary']),
// RFC3339 Section 4.3
'startTime' => (($arr['adjust']) ? datetime_convert('UTC', 'UTC', $arr['dtstart'], ATOM_TIME) : datetime_convert('UTC', 'UTC', $arr['dtstart'], 'Y-m-d\\TH:i:s-00:00')),
- 'content' => bbcode($arr['description']),
- 'location' => [ 'type' => 'Place', 'name' => bbcode($arr['location']) ],
+ 'content' => $arr['description'],
+ 'location' => [ 'type' => 'Place', 'name' => $arr['location'] ],
'source' => [ 'content' => format_event_bbcode($arr), 'mediaType' => 'text/bbcode' ],
'url' => [ [ 'mediaType' => 'text/calendar', 'href' => z_root() . '/events/ical/' . $event['event_hash'] ] ],
'actor' => Activity::encode_person($z, false),
diff --git a/include/hubloc.php b/include/hubloc.php
index 0236e4ae7..4d2980a6b 100644
--- a/include/hubloc.php
+++ b/include/hubloc.php
@@ -392,3 +392,11 @@ function z6_discover() {
}
}
+
+function get_hubloc_id_urls_by_x($xchan) {
+ $r = q("SELECT hubloc_id_url FROM hubloc WHERE hubloc_deleted = 0 AND hubloc_hash = '%s' order by hubloc_primary desc",
+ dbesc($xchan)
+ );
+ return flatten_array_recursive($r);
+}
+
diff --git a/include/items.php b/include/items.php
index 900ffe2fa..b795df90d 100644
--- a/include/items.php
+++ b/include/items.php
@@ -149,14 +149,16 @@ function collect_recipients($item, &$private_envelope,$include_groups = true) {
// in the middle of a public thread. Unless we can guarantee beyond all doubt that
// this is public, don't allow it to go to thread listeners.
- if(! intval($item['item_private'])) {
+ if(!intval($item['item_private'])) {
$sys = get_sys_channel();
$recipients[] = $sys['xchan_hash'];
$r = ThreadListener::fetch_by_target($item['parent_mid']);
if($r) {
foreach($r as $rv) {
- $recipients[] = $rv['portable_id'];
+ if (!in_array($rv['portable_id'], $recipients)) {
+ $recipients[] = $rv['portable_id'];
+ }
}
}
}
@@ -172,9 +174,9 @@ function collect_recipients($item, &$private_envelope,$include_groups = true) {
$r = q("select author_xchan from item where parent = %d",
intval($item['parent'])
);
- if($r) {
+ if ($r) {
foreach($r as $rv) {
- if(! in_array($rv['author_xchan'],$recipients)) {
+ if (!in_array($rv['author_xchan'], $recipients)) {
$recipients[] = $rv['author_xchan'];
}
}
@@ -185,7 +187,7 @@ function collect_recipients($item, &$private_envelope,$include_groups = true) {
// This is a somewhat expensive operation but important.
// Don't send this item to anybody who isn't allowed to see it
- $recipients = check_list_permissions($item['uid'],$recipients,'view_stream');
+ $recipients = check_list_permissions($item['uid'], $recipients, 'view_stream');
// remove any upstream recipients from our list.
// If it is ourself we'll add it back in a second.
@@ -193,7 +195,7 @@ function collect_recipients($item, &$private_envelope,$include_groups = true) {
// sending to anybody who is on our list of those who sent it to us.
if($item['route']) {
- $route = explode(',',$item['route']);
+ $route = explode(',', $item['route']);
if(count($route)) {
$route = array_unique($route);
$recipients = array_diff($recipients,$route);
@@ -202,9 +204,13 @@ function collect_recipients($item, &$private_envelope,$include_groups = true) {
// add ourself just in case we have nomadic clones that need to get a copy.
- $recipients[] = $item['author_xchan'];
- if($item['owner_xchan'] != $item['author_xchan'])
+ if (!in_array($item['author_xchan'], $recipients)) {
+ $recipients[] = $item['author_xchan'];
+ }
+
+ if($item['owner_xchan'] !== $item['author_xchan'] && !in_array($item['owner_xchan'], $recipients)) {
$recipients[] = $item['owner_xchan'];
+ }
return $recipients;
}
diff --git a/include/language.php b/include/language.php
index 23aff0a02..e7363cffb 100644
--- a/include/language.php
+++ b/include/language.php
@@ -24,15 +24,15 @@ use CommerceGuys\Intl\Language\LanguageRepository;
* @return array with ordered list of preferred languages from browser
*/
function get_browser_language() {
- $langs = array();
- $lang_parse = array();
+ $langs = [];
+ $lang_parse = [];
if (x($_SERVER, 'HTTP_ACCEPT_LANGUAGE')) {
// break up string into pieces (languages and q factors)
preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i',
$_SERVER['HTTP_ACCEPT_LANGUAGE'], $lang_parse);
- if (count($lang_parse[1])) {
+ if (is_array($lang_parse[1])) {
// create a list like "en" => 0.8
$langs = array_combine($lang_parse[1], $lang_parse[4]);
diff --git a/include/nav.php b/include/nav.php
index 2cdf7d42b..31a447a84 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -201,6 +201,8 @@ function nav($template = 'default') {
$nav['admin'] = ['admin/', t('Admin'), "", t('Site Setup and Configuration'), 'admin_nav_btn'];
}
+ $theme_switch_icon = ((App::$page['color_mode'] === 'dark') ? 'sun' : 'moon');
+
$x = ['nav' => $nav, 'usermenu' => $userinfo];
call_hooks('nav', $x);
@@ -317,6 +319,9 @@ function nav($template = 'default') {
App::$page['nav'] .= replace_macros($tpl, [
'$baseurl' => z_root(),
+ '$color_mode' => App::$page['color_mode'] ?? '',
+ '$navbar_color_mode' => App::$page['navbar_color_mode'] ?? '',
+ '$theme_switch_icon' => $theme_switch_icon,
'$fulldocs' => t('Help'),
'$sitelocation' => $sitelocation,
'$nav' => $x['nav'],
diff --git a/include/oembed.php b/include/oembed.php
index bcf5d525c..fbe6a573b 100644
--- a/include/oembed.php
+++ b/include/oembed.php
@@ -147,6 +147,7 @@ function oembed_fetch_url($embedurl){
$txt = Cache::get('[' . App::$videowidth . '] ' . $furl);
}
+
if(strpos(strtolower($embedurl),'.pdf') !== false && get_config('system','inline_pdf')) {
$action = 'allow';
$j = [
@@ -158,7 +159,6 @@ function oembed_fetch_url($embedurl){
// set $txt to something so that we don't attempt to fetch what could be a lengthy pdf.
$txt = EMPTY_STR;
}
-
if(is_null($txt)) {
$txt = EMPTY_STR;
@@ -177,12 +177,17 @@ function oembed_fetch_url($embedurl){
$headers = get_headers($furl, true);
- if (isset($headers['Content-Length']) && $headers['Content-Length'] > $max_oembed_size) {
- $action = 'block';
+ if (isset($headers['Content-Length'])) {
+ $content_length = ((is_array($headers['Content-Length'])) ? array_key_last($headers['Content-Length']) : $headers['Content-Length']);
+
+ if ($content_length > $max_oembed_size) {
+ $action = 'block';
+ }
}
}
if ($action !== 'block') {
+
// try oembed autodiscovery
$redirects = 0;
$result = z_fetch_url($furl, false, $redirects,
diff --git a/include/text.php b/include/text.php
index 35ce465d6..705147e93 100644
--- a/include/text.php
+++ b/include/text.php
@@ -1795,7 +1795,6 @@ function prepare_body(&$item,$attach = false,$opts = false) {
}
$event = (($item['obj_type'] === ACTIVITY_OBJ_EVENT) ? format_event_obj($item['obj']) : []);
-
$prep_arr = [
'item' => $item,
'html' => $event ? $event['content'] : $s,
@@ -2621,13 +2620,13 @@ function xchan_query(&$items, $abook = true, $effective_uid = 0) {
if(count($arr)) {
if($abook) {
$chans = q("select * from xchan left join hubloc on hubloc_hash = xchan_hash left join abook on abook_xchan = xchan_hash and abook_channel = %d
- where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") and hubloc_primary = 1",
+ where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") and hubloc_deleted = 0 order by hubloc_primary desc",
intval($item['uid'])
);
}
else {
$chans = q("select xchan.*,hubloc.* from xchan left join hubloc on hubloc_hash = xchan_hash
- where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") and hubloc_primary = 1");
+ where xchan_hash in (" . protect_sprintf(implode(',', $arr)) . ") and hubloc_deleted = 0 order by hubloc_primary desc");
}
$xchans = q("select * from xchan where xchan_hash in (" . protect_sprintf(implode(',',$arr)) . ") and xchan_network in ('rss','unknown', 'anon', 'token')");
if(! $chans)
@@ -3033,46 +3032,44 @@ function handle_tag(&$body, &$str_tags, $profile_uid, $tag, $in_network = true)
if($r) {
- $xchan[0] = Libzot::zot_record_preferred($r, 'xchan_network');
+ $xc = Libzot::zot_record_preferred($r, 'xchan_network');
- foreach($xchan as $xc) {
- $profile = $xc['xchan_url'];
- $newname = $xc['xchan_name'];
- // add the channel's xchan_hash to $access_tag if exclusive
- if($exclusive) {
- $access_tag = 'cid:' . $xc['xchan_hash'];
- }
+ $profile = $xc['xchan_url'];
+ $newname = $xc['xchan_name'];
+ // add the channel's xchan_hash to $access_tag if exclusive
+ if($exclusive) {
+ $access_tag = 'cid:' . $xc['xchan_hash'];
+ }
- // if there is a url for this channel
+ // if there is a url for this channel
- if(isset($profile)) {
- $replaced = true;
- //create profile link
- $profile = str_replace(',','%2c',$profile);
- $url = $profile;
+ if(isset($profile)) {
+ $replaced = true;
+ //create profile link
+ $profile = str_replace(',','%2c',$profile);
+ $url = $profile;
+ $bb_tag = (($xc['xchan_network'] === 'zot6') ? 'zrl' : 'url');
- $newtag = '@' . (($exclusive) ? '!' : '') . '[zrl=' . $profile . ']' . $newname . '[/zrl]';
- $body = str_replace('@' . (($exclusive) ? '!' : '') . $name, $newtag, $body);
+ $newtag = '@' . (($exclusive) ? '!' : '') . '[' . $bb_tag . '=' . $profile . ']' . $newname . '[/' . $bb_tag . ']';
+ $body = str_replace('@' . (($exclusive) ? '!' : '') . $name, $newtag, $body);
- // append tag to str_tags
- if(! stristr($str_tags,$newtag)) {
- if(strlen($str_tags))
- $str_tags .= ',';
- $str_tags .= $newtag;
- }
+ // append tag to str_tags
+ if(! stristr($str_tags,$newtag)) {
+ if(strlen($str_tags))
+ $str_tags .= ',';
+ $str_tags .= $newtag;
}
+ }
- $fn_results[] = [
- 'replaced' => $replaced,
- 'termtype' => $termtype,
- 'term' => $newname,
- 'url' => $url,
- 'access_tag' => $access_tag,
- 'contact' => (($r) ? $xc : []),
- ];
-
- }
+ $fn_results[] = [
+ 'replaced' => $replaced,
+ 'termtype' => $termtype,
+ 'term' => $newname,
+ 'url' => $url,
+ 'access_tag' => $access_tag,
+ 'contact' => (($r) ? $xc : []),
+ ];
}
else {
@@ -3505,6 +3502,14 @@ function flatten_array_recursive($arr) {
return($ret);
}
+// Turn $element into an array if it isn't already.
+function force_array($element) {
+ if (empty($element)) {
+ return [];
+ }
+ return (is_array($element)) ? $element : [$element];
+}
+
/**
* @brief Highlight Text.
*
diff --git a/library/fork-awesome/css/fork-awesome.css b/library/fork-awesome/css/fork-awesome.css
index 820f8792f..2ad41f6ee 100644
--- a/library/fork-awesome/css/fork-awesome.css
+++ b/library/fork-awesome/css/fork-awesome.css
@@ -1,15 +1,24 @@
/*!
- * Fork Awesome 1.1.0, originaly by Dave Gandy - http://forkawesome.github.io/Fork-Awesome/
- * License - http://forkawesome.github.io/Fork-Awesome//license (Font: SIL OFL 1.1, CSS: MIT License)
+Fork Awesome 1.2.0
+License - https://forkaweso.me/Fork-Awesome/license
+
+Copyright 2018 Dave Gandy & Fork Awesome
+
+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.
*/
/* FONT PATH
* -------------------------- */
@font-face {
font-family: 'ForkAwesome';
- src: url('../fonts/forkawesome-webfont.eot?v=1.1.0');
- src: url('../fonts/forkawesome-webfont.eot?#iefix&v=1.1.0') format('embedded-opentype'), url('../fonts/forkawesome-webfont.woff2?v=1.1.0') format('woff2'), url('../fonts/forkawesome-webfont.woff?v=1.1.0') format('woff'), url('../fonts/forkawesome-webfont.ttf?v=1.1.0') format('truetype'), url('../fonts/forkawesome-webfont.svg?v=1.1.0#forkawesomeregular') format('svg');
+ src: url('../fonts/forkawesome-webfont.eot?v=1.2.0');
+ src: url('../fonts/forkawesome-webfont.eot?#iefix&v=1.2.0') format('embedded-opentype'), url('../fonts/forkawesome-webfont.woff2?v=1.2.0') format('woff2'), url('../fonts/forkawesome-webfont.woff?v=1.2.0') format('woff'), url('../fonts/forkawesome-webfont.ttf?v=1.2.0') format('truetype'), url('../fonts/forkawesome-webfont.svg?v=1.2.0#forkawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
+ font-display: block;
}
.fa {
display: inline-block;
@@ -274,6 +283,7 @@
.fa-repeat:before {
content: "\f01e";
}
+.fa-sync:before,
.fa-refresh:before {
content: "\f021";
}
@@ -359,6 +369,7 @@
.fa-indent:before {
content: "\f03c";
}
+.fa-video:before,
.fa-video-camera:before {
content: "\f03d";
}
@@ -650,7 +661,7 @@
.fa-bullhorn:before {
content: "\f0a1";
}
-.fa-bell:before {
+.fa-bell-o:before {
content: "\f0f3";
}
.fa-certificate:before {
@@ -772,6 +783,7 @@
.fa-google-plus-square:before {
content: "\f0d4";
}
+.fa-google-plus-g:before,
.fa-google-plus:before {
content: "\f0d5";
}
@@ -864,12 +876,13 @@
.fa-suitcase:before {
content: "\f0f2";
}
-.fa-bell-o:before {
+.fa-bell:before {
content: "\f0a2";
}
.fa-coffee:before {
content: "\f0f4";
}
+.fa-utensils:before,
.fa-cutlery:before {
content: "\f0f5";
}
@@ -1141,6 +1154,7 @@
.fa-eur:before {
content: "\f153";
}
+.fa-pound:before,
.fa-gbp:before {
content: "\f154";
}
@@ -1177,21 +1191,27 @@
.fa-file-text:before {
content: "\f15c";
}
+.fa-sort-alpha-down:before,
.fa-sort-alpha-asc:before {
content: "\f15d";
}
+.fa-sort-alpha-up:before,
.fa-sort-alpha-desc:before {
content: "\f15e";
}
+.fa-sort-amount-down:before,
.fa-sort-amount-asc:before {
content: "\f160";
}
+.fa-sort-amount-up:before,
.fa-sort-amount-desc:before {
content: "\f161";
}
+.fa-sort-numeric-down:before,
.fa-sort-numeric-asc:before {
content: "\f162";
}
+.fa-sort-numeric-up:before,
.fa-sort-numeric-desc:before {
content: "\f163";
}
@@ -1411,6 +1431,7 @@
.fa-paw:before {
content: "\f1b0";
}
+.fa-utensil-spoon:before,
.fa-spoon:before {
content: "\f1b1";
}
@@ -1553,6 +1574,7 @@
.fa-circle-thin:before {
content: "\f1db";
}
+.fa-heading:before,
.fa-header:before {
content: "\f1dc";
}
@@ -1683,6 +1705,7 @@
.fa-angellist:before {
content: "\f209";
}
+.fa-closed-captioning:before,
.fa-cc:before {
content: "\f20a";
}
@@ -1727,6 +1750,7 @@
.fa-cart-arrow-down:before {
content: "\f218";
}
+.fa-gem:before,
.fa-diamond:before {
content: "\f219";
}
@@ -2021,6 +2045,7 @@
.fa-houzz:before {
content: "\f27c";
}
+.fa-vimeo-v:before,
.fa-vimeo:before {
content: "\f27d";
}
@@ -2117,6 +2142,7 @@
.fa-audio-description:before {
content: "\f29e";
}
+.fa-phone-volume:before,
.fa-volume-control-phone:before {
content: "\f2a0";
}
@@ -2449,6 +2475,243 @@
.fa-joplin:before {
content: "\f310";
}
+.fa-syncthing:before {
+ content: "\f311";
+}
+.fa-inkscape:before {
+ content: "\f312";
+}
+.fa-matrix-org:before {
+ content: "\f313";
+}
+.fa-pixelfed:before {
+ content: "\f314";
+}
+.fa-bootstrap:before {
+ content: "\f315";
+}
+.fa-dev-to:before {
+ content: "\f316";
+}
+.fa-hashnode:before {
+ content: "\f317";
+}
+.fa-jirafeau:before {
+ content: "\f318";
+}
+.fa-emby:before {
+ content: "\f319";
+}
+.fa-wikidata:before {
+ content: "\f31a";
+}
+.fa-gimp:before {
+ content: "\f31b";
+}
+.fa-c:before {
+ content: "\f31c";
+}
+.fa-digitalocean:before {
+ content: "\f31d";
+}
+.fa-att:before {
+ content: "\f31e";
+}
+.fa-gitea:before {
+ content: "\f31f";
+}
+.fa-file-epub:before {
+ content: "\f321";
+}
+.fa-python:before {
+ content: "\f322";
+}
+.fa-archlinux:before {
+ content: "\f323";
+}
+.fa-pleroma:before {
+ content: "\f324";
+}
+.fa-unsplash:before {
+ content: "\f325";
+}
+.fa-hackster:before {
+ content: "\f326";
+}
+.fa-spell-check:before {
+ content: "\f327";
+}
+.fa-moon:before {
+ content: "\f328";
+}
+.fa-sun:before {
+ content: "\f329";
+}
+.fa-f-droid:before {
+ content: "\f32a";
+}
+.fa-biometric:before {
+ content: "\f32b";
+}
+.fa-wire:before {
+ content: "\f32c";
+}
+.fa-tor-onion:before {
+ content: "\f32e";
+}
+.fa-volume-mute:before {
+ content: "\f32f";
+}
+.fa-bell-ringing:before {
+ content: "\f32d";
+}
+.fa-bell-ringing-o:before {
+ content: "\f330";
+}
+.fa-hal:before {
+ content: "\f333";
+}
+.fa-jupyter:before {
+ content: "\f335";
+}
+.fa-julia:before {
+ content: "\f334";
+}
+.fa-classicpress:before {
+ content: "\f331";
+}
+.fa-classicpress-circle:before {
+ content: "\f332";
+}
+.fa-open-collective:before {
+ content: "\f336";
+}
+.fa-orcid:before {
+ content: "\f337";
+}
+.fa-researchgate:before {
+ content: "\f338";
+}
+.fa-funkwhale:before {
+ content: "\f339";
+}
+.fa-askfm:before {
+ content: "\f33a";
+}
+.fa-blockstack:before {
+ content: "\f33b";
+}
+.fa-boardgamegeek:before {
+ content: "\f33c";
+}
+.fa-bunny:before {
+ content: "\f35f";
+}
+.fa-buymeacoffee:before {
+ content: "\f33d";
+}
+.fa-cc-by:before {
+ content: "\f33e";
+}
+.fa-creative-commons-alt:before,
+.fa-cc-cc:before {
+ content: "\f33f";
+}
+.fa-cc-nc-eu:before {
+ content: "\f341";
+}
+.fa-cc-nc-jp:before {
+ content: "\f342";
+}
+.fa-cc-nc:before {
+ content: "\f340";
+}
+.fa-cc-nd:before {
+ content: "\f343";
+}
+.fa-cc-pd:before {
+ content: "\f344";
+}
+.fa-cc-remix:before {
+ content: "\f345";
+}
+.fa-cc-sa:before {
+ content: "\f346";
+}
+.fa-cc-share:before {
+ content: "\f347";
+}
+.fa-cc-zero:before {
+ content: "\f348";
+}
+.fa-conway-hacker:before,
+.fa-conway-glider:before {
+ content: "\f349";
+}
+.fa-csharp:before {
+ content: "\f34a";
+}
+.fa-email-bulk:before {
+ content: "\f34b";
+}
+.fa-email-bulk-o:before {
+ content: "\f34c";
+}
+.fa-gnu:before {
+ content: "\f34d";
+}
+.fa-google-play:before {
+ content: "\f34e";
+}
+.fa-heroku:before {
+ content: "\f34f";
+}
+.fa-hassio:before,
+.fa-home-assistant:before {
+ content: "\f350";
+}
+.fa-java:before {
+ content: "\f351";
+}
+.fa-mariadb:before {
+ content: "\f352";
+}
+.fa-markdown:before {
+ content: "\f353";
+}
+.fa-mysql:before {
+ content: "\f354";
+}
+.fa-nordcast:before {
+ content: "\f355";
+}
+.fa-plume:before {
+ content: "\f356";
+}
+.fa-postgresql:before {
+ content: "\f357";
+}
+.fa-sass-alt:before {
+ content: "\f359";
+}
+.fa-sass:before {
+ content: "\f358";
+}
+.fa-skate:before {
+ content: "\f35a";
+}
+.fa-sketchfab:before {
+ content: "\f35b";
+}
+.fa-tex:before {
+ content: "\f35c";
+}
+.fa-textpattern:before {
+ content: "\f35d";
+}
+.fa-unity:before {
+ content: "\f35e";
+}
.sr-only {
position: absolute;
width: 1px;
diff --git a/library/fork-awesome/css/fork-awesome.min.css b/library/fork-awesome/css/fork-awesome.min.css
index 5c2262588..fd154dc31 100644
--- a/library/fork-awesome/css/fork-awesome.min.css
+++ b/library/fork-awesome/css/fork-awesome.min.css
@@ -1,4 +1,12 @@
/*!
- * Fork Awesome 1.1.0, originaly by Dave Gandy - http://forkawesome.github.io/Fork-Awesome/
- * License - http://forkawesome.github.io/Fork-Awesome//license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:ForkAwesome;src:url(../fonts/forkawesome-webfont.eot?v=1.1.0);src:url(../fonts/forkawesome-webfont.eot?#iefix&v=1.1.0) format('embedded-opentype'),url(../fonts/forkawesome-webfont.woff2?v=1.1.0) format('woff2'),url(../fonts/forkawesome-webfont.woff?v=1.1.0) format('woff'),url(../fonts/forkawesome-webfont.ttf?v=1.1.0) format('truetype'),url(../fonts/forkawesome-webfont.svg?v=1.1.0#forkawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-globe-e:before{content:"\f304"}.fa-globe-w:before{content:"\f305"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-community:before,.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-medium-square:before{content:"\f2f8"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.fa-mastodon:before{content:"\f2e1"}.fa-mastodon-alt:before{content:"\f2e2"}.fa-fork-awesome:before,.fa-fork-circle:before{content:"\f2e3"}.fa-peertube:before{content:"\f2e4"}.fa-diaspora:before{content:"\f2e5"}.fa-friendica:before{content:"\f2e6"}.fa-gnu-social:before{content:"\f2e7"}.fa-liberapay-square:before{content:"\f2e8"}.fa-liberapay:before{content:"\f2e9"}.fa-scuttlebutt:before,.fa-ssb:before{content:"\f2ea"}.fa-hubzilla:before{content:"\f2eb"}.fa-social-home:before{content:"\f2ec"}.fa-artstation:before{content:"\f2ed"}.fa-discord:before{content:"\f2ee"}.fa-discord-alt:before{content:"\f2ef"}.fa-patreon:before{content:"\f2f0"}.fa-snowdrift:before{content:"\f2f1"}.fa-activitypub:before{content:"\f2f2"}.fa-ethereum:before{content:"\f2f3"}.fa-keybase:before{content:"\f2f4"}.fa-shaarli:before{content:"\f2f5"}.fa-shaarli-o:before{content:"\f2f6"}.fa-cut-key:before,.fa-key-modern:before{content:"\f2f7"}.fa-xmpp:before{content:"\f2f9"}.fa-archive-org:before{content:"\f2fc"}.fa-freedombox:before{content:"\f2fd"}.fa-facebook-messenger:before{content:"\f2fe"}.fa-debian:before{content:"\f2ff"}.fa-mastodon-square:before{content:"\f300"}.fa-tipeee:before{content:"\f301"}.fa-react:before{content:"\f302"}.fa-dogmazic:before{content:"\f303"}.fa-zotero:before{content:"\f309"}.fa-nodejs:before{content:"\f308"}.fa-nextcloud:before{content:"\f306"}.fa-nextcloud-square:before{content:"\f307"}.fa-hackaday:before{content:"\f30a"}.fa-laravel:before{content:"\f30b"}.fa-signalapp:before{content:"\f30c"}.fa-gnupg:before{content:"\f30d"}.fa-php:before{content:"\f30e"}.fa-ffmpeg:before{content:"\f30f"}.fa-joplin:before{content:"\f310"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}/*# sourceMappingURL=fork-awesome.min.css.map */ \ No newline at end of file
+Fork Awesome 1.2.0
+License - https://forkaweso.me/Fork-Awesome/license
+
+Copyright 2018 Dave Gandy & Fork Awesome
+
+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.
+ */@font-face{font-family:ForkAwesome;src:url(../fonts/forkawesome-webfont.eot?v=1.2.0);src:url(../fonts/forkawesome-webfont.eot?#iefix&v=1.2.0) format('embedded-opentype'),url(../fonts/forkawesome-webfont.woff2?v=1.2.0) format('woff2'),url(../fonts/forkawesome-webfont.woff?v=1.2.0) format('woff'),url(../fonts/forkawesome-webfont.ttf?v=1.2.0) format('truetype'),url(../fonts/forkawesome-webfont.svg?v=1.2.0#forkawesomeregular) format('svg');font-weight:400;font-style:normal;font-display:block}.fa{display:inline-block;font:normal normal normal 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell-o:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-globe-e:before{content:"\f304"}.fa-globe-w:before{content:"\f305"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-community:before,.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus-g:before,.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before,.fa-utensils:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before,.fa-pound:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-desc:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-desc:before,.fa-sort-amount-up:before{content:"\f161"}.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-desc:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before,.fa-closed-captioning:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before,.fa-gem:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-medium-square:before{content:"\f2f8"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo-v:before,.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.fa-mastodon:before{content:"\f2e1"}.fa-mastodon-alt:before{content:"\f2e2"}.fa-fork-awesome:before,.fa-fork-circle:before{content:"\f2e3"}.fa-peertube:before{content:"\f2e4"}.fa-diaspora:before{content:"\f2e5"}.fa-friendica:before{content:"\f2e6"}.fa-gnu-social:before{content:"\f2e7"}.fa-liberapay-square:before{content:"\f2e8"}.fa-liberapay:before{content:"\f2e9"}.fa-scuttlebutt:before,.fa-ssb:before{content:"\f2ea"}.fa-hubzilla:before{content:"\f2eb"}.fa-social-home:before{content:"\f2ec"}.fa-artstation:before{content:"\f2ed"}.fa-discord:before{content:"\f2ee"}.fa-discord-alt:before{content:"\f2ef"}.fa-patreon:before{content:"\f2f0"}.fa-snowdrift:before{content:"\f2f1"}.fa-activitypub:before{content:"\f2f2"}.fa-ethereum:before{content:"\f2f3"}.fa-keybase:before{content:"\f2f4"}.fa-shaarli:before{content:"\f2f5"}.fa-shaarli-o:before{content:"\f2f6"}.fa-cut-key:before,.fa-key-modern:before{content:"\f2f7"}.fa-xmpp:before{content:"\f2f9"}.fa-archive-org:before{content:"\f2fc"}.fa-freedombox:before{content:"\f2fd"}.fa-facebook-messenger:before{content:"\f2fe"}.fa-debian:before{content:"\f2ff"}.fa-mastodon-square:before{content:"\f300"}.fa-tipeee:before{content:"\f301"}.fa-react:before{content:"\f302"}.fa-dogmazic:before{content:"\f303"}.fa-zotero:before{content:"\f309"}.fa-nodejs:before{content:"\f308"}.fa-nextcloud:before{content:"\f306"}.fa-nextcloud-square:before{content:"\f307"}.fa-hackaday:before{content:"\f30a"}.fa-laravel:before{content:"\f30b"}.fa-signalapp:before{content:"\f30c"}.fa-gnupg:before{content:"\f30d"}.fa-php:before{content:"\f30e"}.fa-ffmpeg:before{content:"\f30f"}.fa-joplin:before{content:"\f310"}.fa-syncthing:before{content:"\f311"}.fa-inkscape:before{content:"\f312"}.fa-matrix-org:before{content:"\f313"}.fa-pixelfed:before{content:"\f314"}.fa-bootstrap:before{content:"\f315"}.fa-dev-to:before{content:"\f316"}.fa-hashnode:before{content:"\f317"}.fa-jirafeau:before{content:"\f318"}.fa-emby:before{content:"\f319"}.fa-wikidata:before{content:"\f31a"}.fa-gimp:before{content:"\f31b"}.fa-c:before{content:"\f31c"}.fa-digitalocean:before{content:"\f31d"}.fa-att:before{content:"\f31e"}.fa-gitea:before{content:"\f31f"}.fa-file-epub:before{content:"\f321"}.fa-python:before{content:"\f322"}.fa-archlinux:before{content:"\f323"}.fa-pleroma:before{content:"\f324"}.fa-unsplash:before{content:"\f325"}.fa-hackster:before{content:"\f326"}.fa-spell-check:before{content:"\f327"}.fa-moon:before{content:"\f328"}.fa-sun:before{content:"\f329"}.fa-f-droid:before{content:"\f32a"}.fa-biometric:before{content:"\f32b"}.fa-wire:before{content:"\f32c"}.fa-tor-onion:before{content:"\f32e"}.fa-volume-mute:before{content:"\f32f"}.fa-bell-ringing:before{content:"\f32d"}.fa-bell-ringing-o:before{content:"\f330"}.fa-hal:before{content:"\f333"}.fa-jupyter:before{content:"\f335"}.fa-julia:before{content:"\f334"}.fa-classicpress:before{content:"\f331"}.fa-classicpress-circle:before{content:"\f332"}.fa-open-collective:before{content:"\f336"}.fa-orcid:before{content:"\f337"}.fa-researchgate:before{content:"\f338"}.fa-funkwhale:before{content:"\f339"}.fa-askfm:before{content:"\f33a"}.fa-blockstack:before{content:"\f33b"}.fa-boardgamegeek:before{content:"\f33c"}.fa-bunny:before{content:"\f35f"}.fa-buymeacoffee:before{content:"\f33d"}.fa-cc-by:before{content:"\f33e"}.fa-cc-cc:before,.fa-creative-commons-alt:before{content:"\f33f"}.fa-cc-nc-eu:before{content:"\f341"}.fa-cc-nc-jp:before{content:"\f342"}.fa-cc-nc:before{content:"\f340"}.fa-cc-nd:before{content:"\f343"}.fa-cc-pd:before{content:"\f344"}.fa-cc-remix:before{content:"\f345"}.fa-cc-sa:before{content:"\f346"}.fa-cc-share:before{content:"\f347"}.fa-cc-zero:before{content:"\f348"}.fa-conway-glider:before,.fa-conway-hacker:before{content:"\f349"}.fa-csharp:before{content:"\f34a"}.fa-email-bulk:before{content:"\f34b"}.fa-email-bulk-o:before{content:"\f34c"}.fa-gnu:before{content:"\f34d"}.fa-google-play:before{content:"\f34e"}.fa-heroku:before{content:"\f34f"}.fa-hassio:before,.fa-home-assistant:before{content:"\f350"}.fa-java:before{content:"\f351"}.fa-mariadb:before{content:"\f352"}.fa-markdown:before{content:"\f353"}.fa-mysql:before{content:"\f354"}.fa-nordcast:before{content:"\f355"}.fa-plume:before{content:"\f356"}.fa-postgresql:before{content:"\f357"}.fa-sass-alt:before{content:"\f359"}.fa-sass:before{content:"\f358"}.fa-skate:before{content:"\f35a"}.fa-sketchfab:before{content:"\f35b"}.fa-tex:before{content:"\f35c"}.fa-textpattern:before{content:"\f35d"}.fa-unity:before{content:"\f35e"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}/*# sourceMappingURL=fork-awesome.min.css.map */ \ No newline at end of file
diff --git a/library/fork-awesome/css/fork-awesome.min.css.map b/library/fork-awesome/css/fork-awesome.min.css.map
index 14e800fde..6aa141d4e 100644
--- a/library/fork-awesome/css/fork-awesome.min.css.map
+++ b/library/fork-awesome/css/fork-awesome.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["fork-awesome.css"],"names":[],"mappings":"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"} \ No newline at end of file
+{"version":3,"sources":["fork-awesome.css"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/library/fork-awesome/css/v5-compat.css b/library/fork-awesome/css/v5-compat.css
new file mode 100644
index 000000000..f7c506f94
--- /dev/null
+++ b/library/fork-awesome/css/v5-compat.css
@@ -0,0 +1,446 @@
+/*!
+Fork Awesome 1.2.0
+License - https://forkaweso.me/Fork-Awesome/license
+
+Copyright 2018 Dave Gandy & Fork Awesome
+
+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.
+ */
+.fas,
+.fab,
+.far {
+ display: inline-block;
+ font: normal normal normal 14px/1 ForkAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.fas.fa-chart-area:before {
+ content: "\f1fe";
+}
+.fas.fa-arrows-alt:before {
+ content: "\f047";
+}
+.fas.fa-expand-arrows-alt:before {
+ content: "\f0b2";
+}
+.fas.fa-arrows-alt-h:before {
+ content: "\f07e";
+}
+.fas.fa-arrows-alt-v:before {
+ content: "\f07d";
+}
+.fas.fa-calendar-alt:before {
+ content: "\f073";
+}
+.fas.fa-circle-notch:before {
+ content: "\f1ce";
+}
+.fas.fa-cloud-download-alt:before {
+ content: "\f0ed";
+}
+.fas.fa-cloud-upload-alt:before {
+ content: "\f0ee";
+}
+.fas.fa-credit-card:before {
+ content: "\f283";
+}
+.fas.fa-dollar-sign:before {
+ content: "\f155";
+}
+.fas.fa-euro-sign:before {
+ content: "\f153";
+}
+.fas.fa-exchange-alt:before {
+ content: "\f0ec";
+}
+.fas.fa-external-link-alt:before {
+ content: "\f08e";
+}
+.fas.fa-external-link-square-alt:before {
+ content: "\f14c";
+}
+.fas.fa-eye-dropper:before {
+ content: "\f1fb";
+}
+.fas.fa-pound-sign:before {
+ content: "\f154";
+}
+.fas.fa-glass-martini:before {
+ content: "\f000";
+}
+.fas.fa-shekel-sign:before {
+ content: "\f20b";
+}
+.fas.fa-rupee-sign:before {
+ content: "\f156";
+}
+.fas.fa-won-sign:before {
+ content: "\f159";
+}
+.fas.fa-level-down-alt:before {
+ content: "\f149";
+}
+.fas.fa-level-up-alt:before {
+ content: "\f148";
+}
+.fas.fa-chart-line:before {
+ content: "\f201";
+}
+.fas.fa-long-arrow-alt-down:before {
+ content: "\f175";
+}
+.fas.fa-long-arrow-alt-left:before {
+ content: "\f177";
+}
+.fas.fa-long-arrow-alt-right:before {
+ content: "\f178";
+}
+.fas.fa-long-arrow-alt-up:before {
+ content: "\f176";
+}
+.fas.fa-map-marker-alt:before {
+ content: "\f041";
+}
+.fas.fa-mobile-alt:before {
+ content: "\f10b";
+}
+.fas.fa-pencil-alt:before {
+ content: "\f040";
+}
+.fas.fa-pen-square:before {
+ content: "\f14b";
+}
+.fas.fa-chart-pie:before {
+ content: "\f200";
+}
+.fas.fa-yen-sign:before {
+ content: "\f157";
+}
+.fas.fa-ruble-sign:before {
+ content: "\f158";
+}
+.fas.fa-shield-alt:before {
+ content: "\f132";
+}
+.fas.fa-sign-in-alt:before {
+ content: "\f090";
+}
+.fas.fa-sign-out-alt:before {
+ content: "\f08b";
+}
+.fas.fa-sliders-h:before {
+ content: "\f1de";
+}
+.fas.fa-tablet-alt:before {
+ content: "\f10a";
+}
+.fas.fa-tachometer-alt:before {
+ content: "\f0e4";
+}
+.fas.fa-thumbtack:before {
+ content: "\f08d";
+}
+.fas.fa-ticket-alt:before {
+ content: "\f145";
+}
+.fas.fa-trash-alt:before {
+ content: "\f1f8";
+}
+.fas.fa-lira-sign:before {
+ content: "\f195";
+}
+.fab.fa-linkedin-in:before {
+ content: "\fe01";
+}
+.fab.fa-linkedin:before {
+ content: "\f08c";
+}
+.far.fa-address-book:before {
+ content: "\f2ba";
+}
+.far.fa-address-card:before {
+ content: "\f2bc";
+}
+.far.fa-arrow-alt-circle-down:before {
+ content: "\f01a";
+}
+.far.fa-arrow-alt-circle-left:before {
+ content: "\f190";
+}
+.far.fa-arrow-alt-circle-right:before {
+ content: "\f18e";
+}
+.far.fa-arrow-alt-circle-up:before {
+ content: "\f01b";
+}
+.far.fa-bell:before {
+ content: "\f0f3";
+}
+.far.fa-bell-slash:before {
+ content: "\f1f7";
+}
+.far.fa-bookmark:before {
+ content: "\f097";
+}
+.far.fa-building:before {
+ content: "\f0f7";
+}
+.far.fa-calendar-check:before {
+ content: "\f274";
+}
+.far.fa-calendar-minus:before {
+ content: "\f272";
+}
+.far.fa-calendar:before {
+ content: "\f133";
+}
+.far.fa-calendar-plus:before {
+ content: "\f271";
+}
+.far.fa-calendar-times:before {
+ content: "\f273";
+}
+.far.fa-caret-square-down:before {
+ content: "\f150";
+}
+.far.fa-caret-square-left:before {
+ content: "\f191";
+}
+.far.fa-caret-square-right:before {
+ content: "\f152";
+}
+.far.fa-caret-square-up:before {
+ content: "\f151";
+}
+.far.fa-check-circle:before {
+ content: "\f05d";
+}
+.far.fa-check-square:before {
+ content: "\f046";
+}
+.far.fa-circle:before {
+ content: "\f10c";
+}
+.far.fa-clock:before {
+ content: "\f017";
+}
+.far.fa-comment:before {
+ content: "\f0e5";
+}
+.far.fa-comment-dots:before {
+ content: "\f27b";
+}
+.far.fa-comments:before {
+ content: "\f0e6";
+}
+.far.fa-dot-circle:before {
+ content: "\f192";
+}
+.far.fa-id-card:before {
+ content: "\f2c3";
+}
+.far.fa-envelope:before {
+ content: "\f003";
+}
+.far.fa-envelope-open:before {
+ content: "\f2b7";
+}
+.far.fa-file-archive:before {
+ content: "\f1c6";
+}
+.far.fa-file-audio:before {
+ content: "\f1c7";
+}
+.far.fa-file-code:before {
+ content: "\f1c9";
+}
+.far.fa-file-excel:before {
+ content: "\f1c3";
+}
+.far.fa-file-image:before {
+ content: "\f1c5";
+}
+.far.fa-file-video:before {
+ content: "\f1c8";
+}
+.far.fa-copy:before,
+.far.fa-file:before {
+ content: "\f016";
+}
+.far.fa-file-pdf:before {
+ content: "\f1c1";
+}
+.far.fa-file-powerpoint:before {
+ content: "\f1c4";
+}
+.far.fa-file-alt:before {
+ content: "\f0f6";
+}
+.far.fa-file-word:before {
+ content: "\f1c2";
+}
+.far.fa-flag:before {
+ content: "\f11d";
+}
+.far.fa-save:before {
+ content: "\f0c7";
+}
+.far.fa-folder:before {
+ content: "\f114";
+}
+.far.fa-folder-open:before {
+ content: "\f115";
+}
+.far.fa-frown:before {
+ content: "\f119";
+}
+.far.fa-futbol:before {
+ content: "\f1e3";
+}
+.far.fa-hand-rock:before {
+ content: "\f255";
+}
+.far.fa-hand-lizard:before {
+ content: "\f258";
+}
+.far.fa-hand-point-down:before {
+ content: "\f0a7";
+}
+.far.fa-hand-point-left:before {
+ content: "\f0a5";
+}
+.far.fa-hand-point-right:before {
+ content: "\f0a4";
+}
+.far.fa-hand-point-up:before {
+ content: "\f0a6";
+}
+.far.fa-hand-paper:before {
+ content: "\256";
+}
+.far.fa-hand-pointer:before {
+ content: "\f25a";
+}
+.far.fa-hand-scissors:before {
+ content: "\f257";
+}
+.far.fa-hand-spock:before {
+ content: "\f259";
+}
+.far.fa-handshake:before {
+ content: "\f2b5";
+}
+.far.fa-hdd:before {
+ content: "\f0a0";
+}
+.far.fa-heart:before {
+ content: "\f08a";
+}
+.far.fa-hospital:before {
+ content: "\f0f8";
+}
+.far.fa-hourglass:before {
+ content: "\f250";
+}
+.far.fa-id-card:before {
+ content: "\f2c3";
+}
+.far.fa-keyboard:before {
+ content: "\f11c";
+}
+.far.fa-lemon:before {
+ content: "\f094";
+}
+.far.fa-lightbulb:before {
+ content: "\f0eb";
+}
+.far.fa-meh:before {
+ content: "\f11a";
+}
+.far.fa-minus-square:before {
+ content: "\f147";
+}
+.far.fa-money-bill-alt:before {
+ content: "\f0d6";
+}
+.far.fa-moon:before {
+ content: "\f186";
+}
+.far.fa-newspaper:before {
+ content: "\f1ea";
+}
+.far.fa-paper-plane:before {
+ content: "\f1d9";
+}
+.far.fa-pause-circle:before {
+ content: "\f28c";
+}
+.far.fa-edit:before {
+ content: "\f044";
+}
+.far.fa-image:before {
+ content: "\f03e";
+}
+.far.fa-play-circle:before {
+ content: "\f01d";
+}
+.far.fa-plus-square:before {
+ content: "\f196";
+}
+.far.fa-question-circle:before {
+ content: "\f92c";
+}
+.far.fa-share-square:before {
+ content: "\f045";
+}
+.far.fa-smile:before {
+ content: "\f118";
+}
+.far.fa-snowflake:before {
+ content: "\f2dc";
+}
+.far.fa-futbol:before {
+ content: "\f1e3";
+}
+.far.fa-star-half:before {
+ content: "\f089";
+}
+.far.fa-star:before {
+ content: "\f006";
+}
+.far.fa-sticky-note:before {
+ content: "\f24a";
+}
+.far.fa-stop-circle:before {
+ content: "\f28e";
+}
+.far.fa-sun:before {
+ content: "\f185";
+}
+.far.fa-thumbs-down:before {
+ content: "\f088";
+}
+.far.fa-thumbs-up:before {
+ content: "\f087";
+}
+.far.fa-times-circle:before {
+ content: "\f05c";
+}
+.far.fa-window-close:before {
+ content: "\f2d4";
+}
+.far.fa-trash-alt:before {
+ content: "\f014";
+}
+.far.fa-user-circle:before {
+ content: "\f2be";
+}
+.far.fa-user:before {
+ content: "\f2c0";
+}
diff --git a/library/fork-awesome/css/v5-compat.min.css b/library/fork-awesome/css/v5-compat.min.css
new file mode 100644
index 000000000..d0917c231
--- /dev/null
+++ b/library/fork-awesome/css/v5-compat.min.css
@@ -0,0 +1,12 @@
+/*!
+Fork Awesome 1.2.0
+License - https://forkaweso.me/Fork-Awesome/license
+
+Copyright 2018 Dave Gandy & Fork Awesome
+
+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.
+ */.fab,.far,.fas{display:inline-block;font:normal normal normal 14px/1 ForkAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fas.fa-chart-area:before{content:"\f1fe"}.fas.fa-arrows-alt:before{content:"\f047"}.fas.fa-expand-arrows-alt:before{content:"\f0b2"}.fas.fa-arrows-alt-h:before{content:"\f07e"}.fas.fa-arrows-alt-v:before{content:"\f07d"}.fas.fa-calendar-alt:before{content:"\f073"}.fas.fa-circle-notch:before{content:"\f1ce"}.fas.fa-cloud-download-alt:before{content:"\f0ed"}.fas.fa-cloud-upload-alt:before{content:"\f0ee"}.fas.fa-credit-card:before{content:"\f283"}.fas.fa-dollar-sign:before{content:"\f155"}.fas.fa-euro-sign:before{content:"\f153"}.fas.fa-exchange-alt:before{content:"\f0ec"}.fas.fa-external-link-alt:before{content:"\f08e"}.fas.fa-external-link-square-alt:before{content:"\f14c"}.fas.fa-eye-dropper:before{content:"\f1fb"}.fas.fa-pound-sign:before{content:"\f154"}.fas.fa-glass-martini:before{content:"\f000"}.fas.fa-shekel-sign:before{content:"\f20b"}.fas.fa-rupee-sign:before{content:"\f156"}.fas.fa-won-sign:before{content:"\f159"}.fas.fa-level-down-alt:before{content:"\f149"}.fas.fa-level-up-alt:before{content:"\f148"}.fas.fa-chart-line:before{content:"\f201"}.fas.fa-long-arrow-alt-down:before{content:"\f175"}.fas.fa-long-arrow-alt-left:before{content:"\f177"}.fas.fa-long-arrow-alt-right:before{content:"\f178"}.fas.fa-long-arrow-alt-up:before{content:"\f176"}.fas.fa-map-marker-alt:before{content:"\f041"}.fas.fa-mobile-alt:before{content:"\f10b"}.fas.fa-pencil-alt:before{content:"\f040"}.fas.fa-pen-square:before{content:"\f14b"}.fas.fa-chart-pie:before{content:"\f200"}.fas.fa-yen-sign:before{content:"\f157"}.fas.fa-ruble-sign:before{content:"\f158"}.fas.fa-shield-alt:before{content:"\f132"}.fas.fa-sign-in-alt:before{content:"\f090"}.fas.fa-sign-out-alt:before{content:"\f08b"}.fas.fa-sliders-h:before{content:"\f1de"}.fas.fa-tablet-alt:before{content:"\f10a"}.fas.fa-tachometer-alt:before{content:"\f0e4"}.fas.fa-thumbtack:before{content:"\f08d"}.fas.fa-ticket-alt:before{content:"\f145"}.fas.fa-trash-alt:before{content:"\f1f8"}.fas.fa-lira-sign:before{content:"\f195"}.fab.fa-linkedin-in:before{content:"\fe01"}.fab.fa-linkedin:before{content:"\f08c"}.far.fa-address-book:before{content:"\f2ba"}.far.fa-address-card:before{content:"\f2bc"}.far.fa-arrow-alt-circle-down:before{content:"\f01a"}.far.fa-arrow-alt-circle-left:before{content:"\f190"}.far.fa-arrow-alt-circle-right:before{content:"\f18e"}.far.fa-arrow-alt-circle-up:before{content:"\f01b"}.far.fa-bell:before{content:"\f0f3"}.far.fa-bell-slash:before{content:"\f1f7"}.far.fa-bookmark:before{content:"\f097"}.far.fa-building:before{content:"\f0f7"}.far.fa-calendar-check:before{content:"\f274"}.far.fa-calendar-minus:before{content:"\f272"}.far.fa-calendar:before{content:"\f133"}.far.fa-calendar-plus:before{content:"\f271"}.far.fa-calendar-times:before{content:"\f273"}.far.fa-caret-square-down:before{content:"\f150"}.far.fa-caret-square-left:before{content:"\f191"}.far.fa-caret-square-right:before{content:"\f152"}.far.fa-caret-square-up:before{content:"\f151"}.far.fa-check-circle:before{content:"\f05d"}.far.fa-check-square:before{content:"\f046"}.far.fa-circle:before{content:"\f10c"}.far.fa-clock:before{content:"\f017"}.far.fa-comment:before{content:"\f0e5"}.far.fa-comment-dots:before{content:"\f27b"}.far.fa-comments:before{content:"\f0e6"}.far.fa-dot-circle:before{content:"\f192"}.far.fa-id-card:before{content:"\f2c3"}.far.fa-envelope:before{content:"\f003"}.far.fa-envelope-open:before{content:"\f2b7"}.far.fa-file-archive:before{content:"\f1c6"}.far.fa-file-audio:before{content:"\f1c7"}.far.fa-file-code:before{content:"\f1c9"}.far.fa-file-excel:before{content:"\f1c3"}.far.fa-file-image:before{content:"\f1c5"}.far.fa-file-video:before{content:"\f1c8"}.far.fa-copy:before,.far.fa-file:before{content:"\f016"}.far.fa-file-pdf:before{content:"\f1c1"}.far.fa-file-powerpoint:before{content:"\f1c4"}.far.fa-file-alt:before{content:"\f0f6"}.far.fa-file-word:before{content:"\f1c2"}.far.fa-flag:before{content:"\f11d"}.far.fa-save:before{content:"\f0c7"}.far.fa-folder:before{content:"\f114"}.far.fa-folder-open:before{content:"\f115"}.far.fa-frown:before{content:"\f119"}.far.fa-futbol:before{content:"\f1e3"}.far.fa-hand-rock:before{content:"\f255"}.far.fa-hand-lizard:before{content:"\f258"}.far.fa-hand-point-down:before{content:"\f0a7"}.far.fa-hand-point-left:before{content:"\f0a5"}.far.fa-hand-point-right:before{content:"\f0a4"}.far.fa-hand-point-up:before{content:"\f0a6"}.far.fa-hand-paper:before{content:"\256"}.far.fa-hand-pointer:before{content:"\f25a"}.far.fa-hand-scissors:before{content:"\f257"}.far.fa-hand-spock:before{content:"\f259"}.far.fa-handshake:before{content:"\f2b5"}.far.fa-hdd:before{content:"\f0a0"}.far.fa-heart:before{content:"\f08a"}.far.fa-hospital:before{content:"\f0f8"}.far.fa-hourglass:before{content:"\f250"}.far.fa-id-card:before{content:"\f2c3"}.far.fa-keyboard:before{content:"\f11c"}.far.fa-lemon:before{content:"\f094"}.far.fa-lightbulb:before{content:"\f0eb"}.far.fa-meh:before{content:"\f11a"}.far.fa-minus-square:before{content:"\f147"}.far.fa-money-bill-alt:before{content:"\f0d6"}.far.fa-moon:before{content:"\f186"}.far.fa-newspaper:before{content:"\f1ea"}.far.fa-paper-plane:before{content:"\f1d9"}.far.fa-pause-circle:before{content:"\f28c"}.far.fa-edit:before{content:"\f044"}.far.fa-image:before{content:"\f03e"}.far.fa-play-circle:before{content:"\f01d"}.far.fa-plus-square:before{content:"\f196"}.far.fa-question-circle:before{content:"\f92c"}.far.fa-share-square:before{content:"\f045"}.far.fa-smile:before{content:"\f118"}.far.fa-snowflake:before{content:"\f2dc"}.far.fa-futbol:before{content:"\f1e3"}.far.fa-star-half:before{content:"\f089"}.far.fa-star:before{content:"\f006"}.far.fa-sticky-note:before{content:"\f24a"}.far.fa-stop-circle:before{content:"\f28e"}.far.fa-sun:before{content:"\f185"}.far.fa-thumbs-down:before{content:"\f088"}.far.fa-thumbs-up:before{content:"\f087"}.far.fa-times-circle:before{content:"\f05c"}.far.fa-window-close:before{content:"\f2d4"}.far.fa-trash-alt:before{content:"\f014"}.far.fa-user-circle:before{content:"\f2be"}.far.fa-user:before{content:"\f2c0"}/*# sourceMappingURL=v5-compat.min.css.map */ \ No newline at end of file
diff --git a/library/fork-awesome/css/v5-compat.min.css.map b/library/fork-awesome/css/v5-compat.min.css.map
new file mode 100644
index 000000000..44c67907a
--- /dev/null
+++ b/library/fork-awesome/css/v5-compat.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["v5-compat.css"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/library/fork-awesome/fonts/forkawesome-webfont.eot b/library/fork-awesome/fonts/forkawesome-webfont.eot
index bd6eae7e5..c2c24b416 100644
--- a/library/fork-awesome/fonts/forkawesome-webfont.eot
+++ b/library/fork-awesome/fonts/forkawesome-webfont.eot
Binary files differ
diff --git a/library/fork-awesome/fonts/forkawesome-webfont.svg b/library/fork-awesome/fonts/forkawesome-webfont.svg
index 18a090301..bd45b3049 100644
--- a/library/fork-awesome/fonts/forkawesome-webfont.svg
+++ b/library/fork-awesome/fonts/forkawesome-webfont.svg
@@ -1,12 +1,12 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
-2018-5-12: Created with FontForge (http://fontforge.org)
+2021-8-27: Created with FontForge (http://fontforge.org)
-->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<metadata>
-Created by FontForge 20180321 at Sat May 12 14:32:04 2018
- By Julien Deswaef
+Created by FontForge 20190801 at Fri Aug 27 00:07:49 2021
+ By shine
The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/OFL). Fork Awesome is a fork based of off Font Awesome 4.7.0 by Dave Gandy. More info on licenses at https://forkawesome.github.io
</metadata>
<defs>
@@ -19,75 +19,119 @@ The Fork Awesome font is licensed under the SIL OFL 1.1 (http://scripts.sil.org/
panose-1="2 0 5 3 0 0 0 0 0 0"
ascent="1536"
descent="-256"
- bbox="-0.653061 -264 2304.01 1536.25"
+ bbox="-0.653061 -410 2304.15 1538"
underline-thickness="89.6"
underline-position="-179.2"
- unicode-range="U+0020-F310"
+ unicode-range="U+0020-F35F"
/>
<missing-glyph />
<glyph glyph-name="space" unicode=" " horiz-adv-x="200"
/>
- <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1830"
-d="M572 137l-50 -50c-13 -13 -33 -13 -46 0l-466 466c-13 13 -13 33 0 46l466 466c13 13 33 13 46 0l50 -50c13 -13 13 -33 0 -46l-393 -393l393 -393c13 -13 13 -33 0 -46zM1163 1204l-373 -1291c-5 -17 -23 -27 -39 -22l-62 17c-17 5 -27 23 -22 40l373 1291
-c5 17 23 27 39 22l62 -17c17 -5 27 -23 22 -40zM1820 553l-466 -466c-13 -13 -33 -13 -46 0l-50 50c-13 13 -13 33 0 46l393 393l-393 393c-13 13 -13 33 0 46l50 50c13 13 33 13 46 0l466 -466c13 -13 13 -33 0 -46z" />
- <glyph glyph-name="chevron-circle-right" unicode="&#xf138;"
-d="M717 141l454 454c25 25 25 65 0 90l-454 454c-25 25 -65 25 -90 0l-102 -102c-25 -25 -25 -65 0 -90l307 -307l-307 -307c-25 -25 -25 -65 0 -90l102 -102c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768
-s768 -344 768 -768z" />
- <glyph glyph-name="crosshairs" unicode="&#xf05b;"
-d="M1197 512h-109c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h109c-43 144 -157 258 -301 301v-109c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v109c-144 -43 -258 -157 -301 -301h109c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-109c43 -144 157 -258 301 -301
-v109c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-109c144 43 258 157 301 301zM1536 704v-128c0 -35 -29 -64 -64 -64h-143c-49 -215 -218 -384 -433 -433v-143c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v143c-215 49 -384 218 -433 433h-143c-35 0 -64 29 -64 64v128
-c0 35 29 64 64 64h143c49 215 218 384 433 433v143c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-143c215 -49 384 -218 433 -433h143c35 0 64 -29 64 -64z" />
- <glyph glyph-name="gg" unicode="&#xf260;" horiz-adv-x="1920"
-d="M672 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1248 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
- <glyph glyph-name="wpforms" unicode="&#xf298;"
-d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240c0 11 -9 20 -20 20h-32l-378 -256l-210 171l-210 -171l-378 256h-32c-11 0 -20 -9 -20 -20v-1240
-c0 -11 9 -20 20 -20h1240c11 0 20 9 20 20zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240c0 -82 -66 -148 -148 -148h-1240c-82 0 -148 66 -148 148v1240c0 82 66 148 148 148h1240c82 0 148 -66 148 -148z" />
+ <glyph glyph-name="500px" unicode="&#xf26e;" horiz-adv-x="1394"
+d="M1387 -11l-6 -6c-75 -75 -162 -134 -259 -175c-101 -42 -207 -64 -317 -64s-217 22 -317 64c-97 41 -185 100 -259 175c-75 74 -134 161 -175 258c-25 61 -45 124 -54 189c-4 28 35 34 48 36c31 5 52 3 56 -20c1 -1 1 -2 1 -4c4 -20 14 -80 46 -159
+c33 -82 84 -158 152 -226c65 -65 141 -116 226 -152c87 -37 180 -56 276 -56c95 0 188 19 276 56c84 36 160 87 225 152l6 6c7 7 15 9 25 6c9 -2 20 -10 33 -22c32 -33 25 -49 17 -58zM915 604l-66 -66l63 -63c7 -7 20 -22 -7 -49c-11 -11 -22 -17 -32 -17
+c-7 0 -13 3 -19 10l-62 61l-66 -66c-2 -2 -7 -5 -15 -5c-9 0 -20 5 -31 16l-2 2c-7 6 -18 17 -18 29c0 6 3 11 8 17l66 65l-66 66c-11 11 -6 25 14 45c12 12 22 18 31 18c5 0 9 -2 13 -5l65 -66l65 65c11 11 29 6 48 -13c12 -12 25 -29 11 -44zM1386 547
+c0 -79 -16 -156 -46 -228c-30 -70 -72 -132 -126 -186s-117 -96 -187 -126c-72 -31 -149 -46 -228 -46s-156 15 -228 46c-70 30 -133 72 -187 126s-96 116 -125 186c-6 13 -15 38 -15 40h-1c-9 28 31 40 43 44c29 9 51 13 60 -12c24 -64 61 -126 97 -167h1v341
+c2 84 37 169 102 232c67 66 157 103 253 103c196 0 355 -158 355 -352c0 -196 -160 -355 -355 -355c-39 0 -68 3 -112 16c-5 2 -28 12 -13 61c4 13 16 51 44 43c2 0 51 -12 77 -12c139 0 248 108 248 246c0 65 -26 126 -72 171c-46 46 -108 71 -175 71
+c-69 0 -132 -28 -178 -80c-40 -45 -64 -105 -64 -160v-413c72 -44 155 -67 242 -67c128 0 252 51 341 140c90 90 140 211 140 338c0 128 -50 248 -141 339c-90 90 -210 140 -339 140s-250 -50 -340 -140c-1 -1 -58 -60 -77 -87l-2 -2c-12 -17 -23 -33 -73 -22
+c-25 6 -52 21 -52 43v680c0 18 14 38 38 38h877c30 0 30 -42 30 -55c0 -14 0 -55 -30 -55h-811v-483h1c56 59 153 121 210 145c71 30 151 46 231 46c79 0 156 -15 228 -46c70 -30 133 -72 187 -126s96 -116 126 -186c30 -73 46 -149 46 -229zM1355 1128
+c19 -17 6 -35 -13 -57c-12 -12 -25 -26 -39 -26c-6 0 -11 2 -16 7c-72 62 -137 104 -207 133c-87 38 -180 56 -276 56c-85 0 -178 -17 -262 -49c-26 -10 -40 24 -45 37c-6 16 -9 29 -8 38c2 10 7 17 16 20c82 36 194 57 299 57c109 0 216 -22 316 -64
+c92 -39 167 -87 235 -152z" />
+ <glyph glyph-name="activitypub" unicode="&#xf2f2;" horiz-adv-x="2032"
+d="M924 1280v-1280l-185 107v853l-739 -427v214zM1109 1280l923 -533v-214l-923 -533v213l739 427l-739 427v213zM1109 853l369 -213l-369 -213v426zM554 640v-427l-369 214z" />
+ <glyph glyph-name="address-book" unicode="&#xf2b9;" horiz-adv-x="1664"
+d="M1201 298c0 177 -43 374 -221 374c-55 -32 -130 -87 -212 -87s-157 55 -212 87c-178 0 -221 -197 -221 -374c0 -99 65 -170 145 -170h576c80 0 145 71 145 170zM1028 892c0 144 -117 260 -260 260s-260 -116 -260 -260c0 -143 117 -259 260 -259s260 116 260 259z
+M1664 352v-192c0 -18 -14 -32 -32 -32h-96v-224c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1472c0 88 72 160 160 160h1216c88 0 160 -72 160 -160v-224h96c18 0 32 -14 32 -32v-192c0 -18 -14 -32 -32 -32h-96v-128h96c18 0 32 -14 32 -32v-192
+c0 -18 -14 -32 -32 -32h-96v-128h96c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="address-book-o" unicode="&#xf2ba;" horiz-adv-x="1664"
+d="M1028 892c0 -143 -117 -259 -260 -259s-260 116 -260 259c0 144 117 260 260 260s260 -116 260 -260zM980 672c191 0 221 -227 221 -374c0 -84 -53 -170 -145 -170h-576c-92 0 -145 86 -145 170c0 141 30 374 216 374h5c66 -39 133 -87 212 -87s146 48 212 87zM1664 928
+c0 -17 -15 -32 -32 -32h-96v-128h96c17 0 32 -15 32 -32v-192c0 -17 -15 -32 -32 -32h-96v-128h96c17 0 32 -15 32 -32v-192c0 -17 -15 -32 -32 -32h-96v-224c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1472c0 88 72 160 160 160h1216c88 0 160 -72 160 -160
+v-224h96c17 0 32 -15 32 -32v-192zM1408 -96v1472c0 17 -15 32 -32 32h-1216c-17 0 -32 -15 -32 -32v-1472c0 -17 15 -32 32 -32h1216c17 0 32 15 32 32z" />
+ <glyph glyph-name="address-card" unicode="&#xf2bb;" horiz-adv-x="2048"
+d="M1024 405c0 155 -38 327 -196 327c-49 -28 -115 -76 -188 -76s-139 48 -188 76c-158 0 -196 -172 -196 -327c0 -87 57 -149 128 -149h512c71 0 128 62 128 149zM867 925c0 125 -102 227 -227 227s-227 -102 -227 -227c0 -126 102 -227 227 -227s227 101 227 227z
+M1792 416v64c0 18 -14 32 -32 32h-576c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h576c18 0 32 14 32 32zM1792 676v56c0 20 -16 36 -36 36h-568c-20 0 -36 -16 -36 -36v-56c0 -20 16 -36 36 -36h568c20 0 36 16 36 36zM1792 928v64c0 18 -14 32 -32 32h-576
+c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h576c18 0 32 14 32 32zM2048 1248v-1216c0 -88 -72 -160 -160 -160h-352v96c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-96h-768v96c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-96h-352c-88 0 -160 72 -160 160
+v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="address-card-o" unicode="&#xf2bc;" horiz-adv-x="2048"
+d="M1024 405c0 -87 -57 -149 -128 -149h-512c-71 0 -128 62 -128 149c0 155 38 327 196 327c49 -28 115 -76 188 -76s139 48 188 76c158 0 196 -172 196 -327zM867 925c0 -126 -102 -227 -227 -227s-227 101 -227 227c0 125 102 227 227 227s227 -102 227 -227zM1792 480
+v-64c0 -18 -14 -32 -32 -32h-576c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h576c18 0 32 -14 32 -32zM1792 732v-56c0 -20 -16 -36 -36 -36h-568c-20 0 -36 16 -36 36v56c0 20 16 36 36 36h568c20 0 36 -16 36 -36zM1792 992v-64c0 -18 -14 -32 -32 -32h-576
+c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h576c18 0 32 -14 32 -32zM1920 32v1216c0 17 -15 32 -32 32h-1728c-17 0 -32 -15 -32 -32v-1216c0 -17 15 -32 32 -32h352v96c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-96h768v96c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-96h352
+c17 0 32 15 32 32zM2048 1248v-1216c0 -88 -72 -160 -160 -160h-1728c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="adjust" unicode="&#xf042;"
+d="M768 96v1088c-300 0 -544 -244 -544 -544s244 -544 544 -544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="adn" unicode="&#xf170;"
+d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="align-center" unicode="&#xf037;" horiz-adv-x="1792"
+d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1408 576v-128c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h896c35 0 64 -29 64 -64zM1664 960v-128c0 -35 -29 -64 -64 -64
+h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1280 1344v-128c0 -35 -29 -64 -64 -64h-640c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h640c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="align-justify" unicode="&#xf039;" horiz-adv-x="1792"
+d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 576v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 960v-128
+c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 1344v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="align-left" unicode="&#xf036;" horiz-adv-x="1792"
+d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1408 576v-128c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1280c35 0 64 -29 64 -64zM1664 960v-128
+c0 -35 -29 -64 -64 -64h-1536c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1536c35 0 64 -29 64 -64zM1280 1344v-128c0 -35 -29 -64 -64 -64h-1152c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="align-right" unicode="&#xf038;" horiz-adv-x="1792"
+d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 576v-128c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1280c35 0 64 -29 64 -64zM1792 960v-128
+c0 -35 -29 -64 -64 -64h-1536c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1536c35 0 64 -29 64 -64zM1792 1344v-128c0 -35 -29 -64 -64 -64h-1152c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="amazon" unicode="&#xf270;" horiz-adv-x="1736"
+d="M1523 60c30 15 53 -8 22 -48s-280 -268 -698 -268s-738 286 -836 404c-27 31 4 45 22 33c293 -178 751 -471 1490 -121zM1730 175c15 -20 0 -108 -26 -172c-26 -63 -64 -107 -85 -124c-22 -18 -38 -11 -26 15s77 186 51 220c-26 33 -148 17 -192 13c-43 -4 -52 -8 -56 1
+c-9 23 87 62 150 70c63 7 164 3 184 -23zM1336 618c0 -110 129 -211 129 -211l-227 -224c-89 84 -156 154 -156 154c-10 10 -18 22 -25 33c-181 -283 -734 -265 -734 173c0 408 483 463 678 470v127c0 27 10 150 -142 150c0 0 -152 0 -217 -198l-294 27
+c0 197 187 417 539 417c351 0 449 -228 449 -329v-589zM664 597c0 -203 337 -251 337 69v162c-135 -4 -337 -42 -337 -231z" />
+ <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1856"
+d="M576 128c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM192 640h384v256h-158c-6 -1 -17 -5 -22 -9l-195 -195c-3 -5 -8 -16 -9 -22v-30zM1472 128c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1600 800
+v192c0 18 -14 32 -32 32h-224v224c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32v-224h-224c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h224v-224c0 -18 14 -32 32 -32h192c18 0 32 14 32 32v224h224c18 0 32 14 32 32zM1856 1344v-1152c0 -35 -29 -64 -64 -64h-192
+c0 -141 -114 -256 -256 -256c-141 0 -256 115 -256 256h-384c0 -141 -114 -256 -256 -256s-256 115 -256 256h-128c-35 0 -64 29 -64 64s29 64 64 64v416c0 35 20 84 45 109l198 198c25 25 74 45 109 45h160v320c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="american-sign-language-interpreting" unicode="&#xf2a3;" horiz-adv-x="2303"
+d="M1032 576c-35 1 -68 21 -84 55c-22 45 -66 73 -116 73c-71 0 -128 -57 -128 -128c0 -34 12 -67 36 -89l10 -8c22 -20 51 -31 82 -31c50 0 94 28 116 73c16 34 49 54 84 55zM1600 704c0 34 -12 67 -36 89l-10 8c-22 20 -51 31 -82 31c-50 0 -94 -28 -116 -73
+c-16 -34 -49 -54 -84 -55c35 -1 68 -21 84 -55c22 -45 66 -73 116 -73c71 0 128 57 128 128zM1174 925c-23 -47 -81 -67 -128 -44c-42 21 -87 31 -134 31c-35 0 -68 -6 -99 -17c6 0 13 1 19 1c123 0 236 -72 289 -183c23 -48 2 -105 -46 -128c-12 -6 -25 -9 -39 -9
+c14 0 27 -3 39 -9c48 -23 69 -80 46 -128c-53 -111 -166 -183 -289 -183h-6c-15 2 -29 3 -44 4l-290 27l-239 -120c-10 -5 -19 -7 -29 -7c-23 0 -46 13 -57 35l-160 320c-15 31 -4 68 25 85l209 119l148 267c23 206 125 395 287 528c41 34 102 28 135 -13
+c34 -41 28 -101 -13 -135c-45 -38 -85 -81 -117 -128c78 53 168 89 267 101c53 7 101 -30 107 -83c7 -53 -30 -101 -83 -107c-58 -7 -112 -27 -159 -55c32 7 65 10 99 10c76 0 150 -17 218 -50c48 -24 68 -81 44 -129zM2137 1085l160 -320c15 -31 4 -68 -25 -85l-209 -119
+l-148 -267c-23 -206 -125 -395 -287 -528c-18 -15 -40 -22 -61 -22c-28 0 -55 12 -74 35c-34 41 -28 101 13 135c45 38 85 81 117 128c-78 -53 -168 -89 -267 -101c-4 -1 -8 -1 -12 -1c-48 0 -89 36 -95 84c-7 53 30 101 83 107c58 7 112 27 159 55c-32 -7 -65 -10 -99 -10
+c-76 0 -150 17 -218 50c-48 24 -68 81 -44 129c23 47 81 67 128 44c42 -21 87 -31 134 -31c35 0 68 6 99 17c-6 0 -13 -1 -19 -1c-123 0 -236 72 -289 183c-23 48 -2 105 46 128c12 6 25 9 39 9c-14 0 -27 3 -39 9c-48 23 -69 80 -46 128c53 111 166 183 289 183h7
+c14 -2 28 -3 42 -4l291 -27l239 120c10 5 19 7 29 7c23 0 46 -13 57 -35z" />
+ <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792"
+d="M960 1280c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1792 352v-352c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -16 3 -23 9l-93 93c-157 -189 -439 -310 -748 -310s-591 121 -748 310l-93 -93c-6 -6 -15 -9 -23 -9c-4 0 -8 1 -12 2
+c-12 5 -20 17 -20 30v352c0 18 14 32 32 32h352c13 0 25 -8 30 -20s2 -25 -7 -35l-100 -100c90 -121 263 -209 461 -236v647h-192c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h192v163c-76 44 -128 126 -128 221c0 141 115 256 256 256s256 -115 256 -256
+c0 -95 -52 -177 -128 -221v-163h192c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-192v-647c198 27 371 115 461 236l-100 100c-9 10 -12 23 -7 35s17 20 30 20h352c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408"
+d="M493 1053c22 0 39 18 39 39s-17 39 -39 39c-21 0 -38 -18 -38 -39s17 -39 38 -39zM915 1053c21 0 38 18 38 39s-17 39 -38 39c-22 0 -39 -18 -39 -39s17 -39 39 -39zM103 869c56 0 102 -46 102 -102v-430c0 -57 -45 -103 -102 -103s-103 46 -103 103v430
+c0 56 46 102 103 102zM1163 850v-666c0 -61 -49 -110 -109 -110h-75v-227c0 -57 -46 -103 -103 -103s-103 46 -103 103v227h-138v-227c0 -57 -46 -103 -103 -103c-56 0 -102 46 -102 103l-1 227h-74c-61 0 -110 49 -110 110v666h918zM931 1255c140 -72 235 -210 235 -369
+h-925c0 159 95 297 236 369l-71 131c-4 7 -2 16 5 20c7 3 16 1 20 -6l72 -132c61 27 129 42 201 42s140 -15 201 -42l72 132c4 7 13 9 20 6c7 -4 9 -13 5 -20zM1408 767v-430c0 -57 -46 -103 -103 -103c-56 0 -102 46 -102 103v430c0 57 46 102 102 102
+c57 0 103 -45 103 -102z" />
+ <glyph glyph-name="angellist" unicode="&#xf209;" horiz-adv-x="1258"
+d="M942 1158l-114 -328l117 -21c30 82 165 451 165 518c0 25 -8 56 -38 56c-56 0 -116 -182 -130 -225zM643 471c11 -29 23 -58 33 -88c22 25 45 48 71 67c-35 7 -70 10 -104 21zM351 1367c0 -102 121 -420 159 -521c14 8 32 10 49 10c24 0 51 -3 75 -5l-121 351
+c-13 38 -71 220 -123 220c-27 0 -39 -32 -39 -55zM272 608c0 -73 196 -342 269 -342c20 0 37 22 37 40c0 23 -23 80 -32 102c-26 67 -121 274 -203 274c-27 0 -71 -47 -71 -74zM114 273c0 -36 12 -71 25 -104c79 -195 257 -309 465 -309c152 0 280 58 382 170
+c108 120 152 268 152 427c0 56 1 145 -43 185c-84 74 -369 102 -482 102c-14 0 -38 -1 -49 -11c-12 -5 -12 -24 -12 -35c0 -153 323 -139 420 -139c19 0 28 -5 40 -19c13 -16 17 -35 19 -55c-26 -26 -62 -41 -96 -54c-33 -12 -65 -25 -93 -46c-77 -56 -153 -152 -153 -251
+c0 -62 37 -115 37 -176c0 -1 -7 -23 -7 -26c-114 8 -142 121 -146 216c-12 -3 -28 -2 -41 -2c2 -7 2 -14 2 -21c0 -73 -65 -126 -135 -126c-108 0 -251 127 -251 237c0 30 13 47 33 67c20 -25 41 -50 60 -76c29 -39 79 -104 133 -104c14 0 41 12 41 29
+c0 45 -164 256 -204 256c-63 0 -97 -83 -97 -135zM0 264c0 130 50 216 179 251c-11 29 -28 73 -28 104c0 82 101 184 183 184c24 0 48 -7 70 -15c-42 119 -163 454 -163 567c0 101 51 181 160 181c140 0 299 -504 333 -604c44 110 182 571 338 571c98 0 153 -78 153 -171
+c0 -106 -118 -436 -159 -550c168 -41 192 -177 192 -328c0 -400 -255 -710 -668 -710c-76 0 -151 15 -223 42c-190 72 -367 267 -367 478z" />
+ <glyph glyph-name="angle-double-down" unicode="&#xf103;" horiz-adv-x="998"
+d="M998 672c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 14 10 23 10c8 0 17 -4 23 -10l393 -393l393 393c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23zM998 1056
+c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 14 10 23 10c8 0 17 -4 23 -10l393 -393l393 393c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23z" />
<glyph glyph-name="angle-double-left" unicode="&#xf100;" horiz-adv-x="966"
d="M582 160c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23s-4 -17 -10 -23l-393 -393l393 -393c6 -6 10 -15 10 -23zM966 160
c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23s-4 -17 -10 -23l-393 -393l393 -393c6 -6 10 -15 10 -23z" />
- <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792"
-d="M256 224v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM256 608v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM256 992v-192c0 -17 -15 -32 -32 -32h-192
-c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 224v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM256 1376v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192
-c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 608v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344
-c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32z" />
- <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1192"
-d="M956 1102l37 194c7 32 -17 57 -44 57h-712c-32 0 -54 -29 -54 -54v-1101c0 -3 3 -4 6 -1c262 315 291 352 291 352c30 35 42 41 86 41h239c33 0 52 28 55 44s31 162 37 191s-21 59 -48 59h-294c-39 0 -67 28 -67 67v42c0 39 28 66 67 66h346c24 0 51 22 55 43zM1183 1324
-c-37 -180 -148 -749 -158 -790c-12 -47 -30 -129 -144 -129h-271c-11 0 -12 1 -22 -10c0 0 -7 -8 -426 -494c-33 -38 -87 -31 -107 -23s-55 32 -55 98v1410c0 58 36 150 158 150h888c130 0 165 -74 137 -212zM1183 1324l-158 -790c10 41 121 610 158 790z" />
- <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792"
-d="M512 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 288v-192c0 -53 -43 -96 -96 -96h-320
-c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96
-h320c53 0 96 -43 96 -96zM1792 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 800v-192
-c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="angle-double-right" unicode="&#xf101;" horiz-adv-x="966"
+d="M582 576c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l393 393l-393 393c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23zM966 576c0 -8 -4 -17 -10 -23
+l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l393 393l-393 393c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" />
+ <glyph glyph-name="angle-double-up" unicode="&#xf102;" horiz-adv-x="998"
+d="M998 224c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -14 -10 -23 -10c-8 0 -17 4 -23 10l-393 393l-393 -393c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23zM998 608
+c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -14 -10 -23 -10c-8 0 -17 4 -23 10l-393 393l-393 -393c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" />
+ <glyph glyph-name="angle-down" unicode="&#xf107;" horiz-adv-x="998"
+d="M998 800c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 14 10 23 10c8 0 17 -4 23 -10l393 -393l393 393c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23z" />
<glyph glyph-name="angle-left" unicode="&#xf104;" horiz-adv-x="582"
d="M582 992c0 -8 -4 -17 -10 -23l-393 -393l393 -393c6 -6 10 -15 10 -23s-4 -17 -10 -23l-50 -50c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -14 10 -23z" />
- <glyph glyph-name="recycle" unicode="&#xf1b8;" horiz-adv-x="1760"
-d="M820 367l-15 -368l-2 -22l-420 29c-52 4 -95 53 -114 97c-40 93 12 203 42 292c0 0 77 -12 509 -28zM433 953l180 -379l-147 92c-225 -257 -246 -448 -246 -448l-190 357c-39 58 -4 121 -4 121s35 63 114 188l-140 86zM1664 436l-188 -359c-26 -65 -98 -71 -98 -71
-s-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173c339 -41 509 50 509 50zM879 1360c0 0 -47 -62 -265 -435l-317 187l-19 12l225 356c28 44 91 60 140 55c100 -9 172 -106 236 -175zM1534 1053l212 -363c27 -45 11 -108 -15 -150c-54 -84 -174 -104 -264 -129
-c0 0 -34 71 -265 436l313 195zM1391 1279l142 83l-220 -373l-419 20l151 86c-120 319 -279 429 -279 429l405 -1c70 6 108 -54 108 -54s39 -61 112 -190z" />
- <glyph glyph-name="file-code-o" unicode="&#xf1c9;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280zM480 768c11 14 31 17 45 6l51 -38c14 -11 17 -31 6 -45l-182 -243l182 -243c11 -14 8 -34 -6 -45l-51 -38c-14 -11 -34 -8 -45 6l-226 301c-8 11 -8 27 0 38zM1282 467c8 -11 8 -27 0 -38l-226 -301c-11 -14 -31 -17 -45 -6l-51 38c-14 11 -17 31 -6 45
-l182 243l-182 243c-11 14 -8 34 6 45l51 38c14 11 34 8 45 -6zM662 6c-18 3 -29 20 -26 37l138 831c3 18 20 29 37 26l63 -10c18 -3 29 -20 26 -37l-138 -831c-3 -18 -20 -29 -37 -26z" />
- <glyph glyph-name="thumb-tack" unicode="&#xf08d;" horiz-adv-x="1152"
-d="M480 672v448c0 18 -14 32 -32 32s-32 -14 -32 -32v-448c0 -18 14 -32 32 -32s32 14 32 32zM1152 320c0 -35 -29 -64 -64 -64h-429l-51 -483c-2 -16 -15 -29 -31 -29h-1c-16 0 -29 11 -32 27l-76 485h-404c-35 0 -64 29 -64 64c0 164 124 320 256 320v512
-c-70 0 -128 58 -128 128s58 128 128 128h640c70 0 128 -58 128 -128s-58 -128 -128 -128v-512c132 0 256 -156 256 -320z" />
- <glyph glyph-name="fax" unicode="&#xf1ac;" horiz-adv-x="1792"
-d="M288 1152c88 0 160 -72 160 -160v-1088c0 -88 -72 -160 -160 -160h-128c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h128zM1664 989c76 -44 128 -127 128 -221v-768c0 -141 -115 -256 -256 -256h-864c-88 0 -160 72 -160 160v1536c0 53 43 96 96 96h672
-c53 0 127 -31 164 -68l152 -152c37 -37 68 -111 68 -164v-163zM928 0v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM928 256v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128
-c18 0 32 14 32 32zM928 512v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1184 0v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1184 256v128
-c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1184 512v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1440 0v128c0 18 -14 32 -32 32h-128
-c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1440 256v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1440 512v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128
-c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1536 896v256h-160c-53 0 -96 43 -96 96v160h-640v-512h896z" />
- <glyph glyph-name="xing-square" unicode="&#xf169;"
-d="M685 771c0 0 0 1 -126 222c-10 16 -24 34 -52 34h-184c-12 0 -21 -4 -26 -11c-5 -8 -4 -19 1 -29l125 -216v-1l-196 -346c-6 -10 -5 -20 0 -28s13 -13 24 -13h185c27 0 41 19 50 36c192 339 199 352 199 352zM1309 1268c-5 8 -13 12 -24 12h-187c-27 0 -39 -17 -49 -35
-c-398 -706 -411 -729 -411 -729s0 -1 262 -481c9 -16 23 -35 52 -35h184c11 0 20 4 25 12s5 18 -1 28l-260 476v1l409 723c5 10 5 20 0 28zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960
-c159 0 288 -129 288 -288z" />
- <glyph glyph-name="google-plus-official" unicode="&#xf2b3;"
-d="M917 631c0 22 -2 43 -6 64h-362v-132h217c-16 -106 -116 -165 -217 -165c-133 0 -239 110 -239 242s106 242 239 242c56 0 112 -19 153 -59l104 101c-71 66 -160 100 -257 100c-213 0 -384 -172 -384 -384s171 -384 384 -384c221 0 368 156 368 375zM1262 585h109v110
-h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="quora" unicode="&#xf2c4;" horiz-adv-x="1734"
-d="M1226 749c0 417 -130 631 -435 631c-300 0 -430 -214 -430 -631c0 -415 130 -627 430 -627c48 0 91 5 131 17c-62 122 -135 245 -277 245c-27 0 -54 -4 -79 -16l-49 97c59 51 154 91 276 91c191 0 288 -92 366 -209c45 100 67 235 67 402zM1616 117h117
-c7 -72 -29 -373 -356 -373c-198 0 -302 115 -381 249c-65 -18 -135 -27 -205 -27c-400 0 -791 319 -791 783c0 468 392 787 791 787c407 0 794 -317 794 -787c0 -262 -122 -475 -299 -612c57 -86 116 -143 198 -143c90 0 126 69 132 123z" />
+ <glyph glyph-name="angle-right" unicode="&#xf105;" horiz-adv-x="582"
+d="M582 576c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 14 -10 23c0 8 4 17 10 23l393 393l-393 393c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" />
+ <glyph glyph-name="angle-up" unicode="&#xf106;" horiz-adv-x="998"
+d="M998 352c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -14 -10 -23 -10c-8 0 -17 4 -23 10l-393 393l-393 -393c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" />
+ <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1393"
+d="M1393 321c-25 -79 -65 -163 -123 -250c-86 -131 -172 -196 -257 -196c-34 0 -80 11 -140 32c-59 22 -110 32 -151 32c-40 0 -88 -11 -142 -33c-55 -23 -99 -34 -132 -34c-103 0 -202 87 -301 259c-97 172 -147 339 -147 503c0 153 38 277 113 374c75 96 169 144 284 144
+c49 0 107 -10 177 -30c69 -20 115 -30 138 -30c29 0 77 11 143 34c66 22 124 34 173 34c80 0 151 -22 213 -65c35 -24 70 -58 104 -100c-52 -44 -90 -83 -114 -118c-43 -62 -65 -131 -65 -207c0 -82 23 -157 69 -223s99 -108 158 -126zM1017 1494c0 -41 -10 -87 -29 -136
+c-20 -50 -51 -96 -93 -138c-36 -36 -72 -60 -108 -72c-23 -7 -57 -13 -104 -17c2 99 28 185 78 257s134 121 250 148c2 -9 4 -16 5 -22c0 -7 1 -13 1 -20z" />
+ <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1664"
+d="M1024 704c0 35 -29 64 -64 64h-256c-35 0 -64 -29 -64 -64s29 -64 64 -64h256c35 0 64 29 64 64zM1600 896v-960c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v960c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1664 1344v-256c0 -35 -29 -64 -64 -64h-1536
+c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1536c35 0 64 -29 64 -64z" />
<glyph glyph-name="archive-org" unicode="&#xf2fc;" horiz-adv-x="1506"
d="M1459 1344l-27 -53h-1385l-24 53l717 189zM1430 1237v-140h-1380v140h1380zM1257 442c-3 65 -4 124 -3 178c0 25 1 61 3 108s3 77 3 91c1 22 3 57 5 104s4 82 5 107c0 1 1 3 1 7v10c47 10 93 10 138 0c21 -325 21 -630 0 -916c-41 -11 -82 -12 -123 -1c-6 1 -10 2 -11 2
s-3 2 -3 3s-1 4 -1 9c-3 34 -6 90 -10 165zM80 369v0c-1 9 -1 22 -1 38c0 5 -1 11 -1 21s-1 17 -1 22c0 26 0 45 -1 57v219c2 38 3 68 3 88c2 32 3 56 3 71c1 7 1 15 1 26c0 3 1 9 1 17s1 14 1 18c0 7 0 10 1 12c0 12 0 22 1 28c0 11 1 20 2 27c0 11 0 19 1 24c0 4 2 6 7 7
@@ -97,705 +141,1171 @@ s-1 21 -1 27v102c0 27 0 47 1 61c0 18 1 48 3 88c0 17 1 40 3 71c0 11 0 20 1 26c0 1
s-1 -79 -2 -102c-1 -47 -3 -112 -7 -194c0 -13 -1 -33 -3 -60c0 -3 -2 -5 -7 -6c-26 -10 -57 -12 -92 -8c-4 0 -7 1 -11 2s-8 3 -13 4s-8 3 -10 4c-2 0 -3 1 -3 4c-1 7 -1 15 -1 26c-1 7 -2 16 -2 27c-2 4 -3 10 -3 20zM1046 961v0c1 -26 3 -63 4 -114s2 -89 2 -114
c2 -67 3 -113 3 -140c0 -22 -1 -53 -1 -95s-1 -73 -2 -94c-1 -45 -3 -111 -7 -199c-1 -8 -2 -20 -2 -36s0 -28 -1 -36c0 -3 -2 -5 -7 -6c-27 -9 -58 -11 -93 -8c-5 1 -12 2 -20 5s-12 5 -13 5c-3 0 -5 1 -5 5c0 12 0 31 -2 56s-4 45 -5 58c0 15 -1 40 -2 73s-2 59 -3 77
c0 13 -1 33 -2 60s-1 47 -1 60v68c-1 46 -1 69 0 70c1 55 3 136 7 242c2 48 4 94 8 139c0 4 2 6 6 7c29 10 61 13 95 8c12 -2 23 -5 33 -9c3 0 4 -2 4 -6zM60 -18v98h1390v-98h-1390zM0 -128v73h1506v-73h-1506z" />
- <glyph glyph-name="volume-up" unicode="&#xf028;" horiz-adv-x="1664"
-d="M768 1184v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19c35 0 64 -29 64 -64zM1152 640c0 -100 -61 -197 -155 -235c-8 -4 -17 -5 -25 -5c-35 0 -64 28 -64 64
-c0 76 116 55 116 176s-116 100 -116 176c0 36 29 64 64 64c8 0 17 -1 25 -5c94 -37 155 -135 155 -235zM1408 640c0 -203 -122 -392 -310 -471c-8 -3 -17 -5 -25 -5c-36 0 -65 29 -65 64c0 28 16 47 39 59c27 14 52 26 76 44c99 72 157 187 157 309s-58 237 -157 309
-c-24 18 -49 30 -76 44c-23 12 -39 31 -39 59c0 35 29 64 64 64c9 0 18 -2 26 -5c188 -79 310 -268 310 -471zM1664 640c0 -307 -183 -585 -465 -706c-8 -3 -17 -5 -26 -5c-35 0 -64 29 -64 64c0 29 15 45 39 59c14 8 30 13 45 21c28 15 56 32 82 51c164 121 261 312 261 516
-s-97 395 -261 516c-26 19 -54 36 -82 51c-15 8 -31 13 -45 21c-24 14 -39 30 -39 59c0 35 29 64 64 64c9 0 18 -2 26 -5c282 -121 465 -399 465 -706z" />
- <glyph glyph-name="spoon" unicode="&#xf1b1;" horiz-adv-x="640"
-d="M640 1008c0 -200 -87 -331 -209 -379l45 -821c2 -35 -25 -64 -60 -64h-192c-35 0 -62 29 -60 64l45 821c-122 48 -209 179 -209 379c0 256 143 528 320 528s320 -272 320 -528z" />
- <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="864"
-d="M864 1524v-264h-157c-123 0 -146 -59 -146 -144v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218c0 253 155 391 381 391c108 0 201 -8 228 -12z" />
- <glyph glyph-name="universal-access" unicode="&#xf29a;" horiz-adv-x="1792"
-d="M1374 879c-8 34 -42 55 -77 47c-143 -34 -273 -62 -401 -62s-258 28 -401 62c-35 8 -69 -13 -77 -47c-8 -35 13 -69 47 -77c106 -25 205 -47 303 -58c-4 -338 -41 -432 -83 -540l-9 -21c-13 -33 4 -70 37 -83c7 -3 15 -4 23 -4c26 0 50 15 60 41l8 20
-c28 72 54 139 71 259h42c17 -120 43 -187 71 -259l8 -20c10 -26 34 -41 60 -41c8 0 16 1 23 4c33 13 50 50 37 83l-9 21c-42 108 -79 202 -83 540c98 11 197 33 303 58c34 8 55 42 47 77zM1024 1024c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128
-s128 57 128 128zM1600 640c0 -389 -315 -704 -704 -704s-704 315 -704 704s315 704 704 704s704 -315 704 -704zM896 1408c-423 0 -768 -345 -768 -768s345 -768 768 -768s768 345 768 768s-345 768 -768 768zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896
-s401 896 896 896s896 -401 896 -896z" />
- <glyph glyph-name="cloud-download" unicode="&#xf0ed;" horiz-adv-x="1920"
-d="M1280 608c0 18 -14 32 -32 32h-224v352c0 17 -15 32 -32 32h-192c-17 0 -32 -15 -32 -32v-352h-224c-18 0 -32 -15 -32 -32c0 -8 3 -17 9 -23l352 -352c6 -6 14 -9 23 -9c8 0 17 3 23 9l351 351c6 7 10 15 10 24zM1920 384c0 -212 -172 -384 -384 -384h-1088
-c-247 0 -448 201 -448 448c0 174 101 332 258 405c-1 15 -2 29 -2 43c0 283 229 512 512 512c208 0 395 -126 474 -318c46 40 105 62 166 62c141 0 256 -115 256 -256c0 -49 -14 -97 -41 -138c174 -41 297 -196 297 -374z" />
- <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664"
-d="M458 653c-42 92 -74 214 -74 371h-256v-96c0 -98 133 -234 330 -275zM1536 928v96h-256c0 -157 -32 -279 -74 -371c197 41 330 177 330 275zM1664 1056v-128c0 -190 -230 -400 -542 -415c-40 -51 -77 -81 -95 -95c-53 -48 -67 -98 -67 -162s32 -128 128 -128
-s192 -64 192 -160v-64c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v64c0 96 96 160 192 160s128 64 128 128s-14 114 -67 162c-18 14 -55 44 -95 95c-312 15 -542 225 -542 415v128c0 53 43 96 96 96h288v96c0 88 72 160 160 160h576c88 0 160 -72 160 -160v-96h288
-c53 0 96 -43 96 -96z" />
- <glyph glyph-name="caret-up" unicode="&#xf0d8;" horiz-adv-x="1024"
-d="M1024 320c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1637"
-d="M1163 955l293 293l-107 107l-293 -293zM1610 1248c0 -17 -6 -33 -18 -45l-1286 -1286c-12 -12 -28 -18 -45 -18s-33 6 -45 18l-198 198c-12 12 -18 28 -18 45s6 33 18 45l1286 1286c12 12 28 18 45 18s33 -6 45 -18l198 -198c12 -12 18 -28 18 -45zM259 1438l98 -30
-l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM609 1276l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1539 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM899 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
- <glyph glyph-name="hourglass-o" unicode="&#xf250;"
-d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64
-c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM874 700c202 76 406 343 406 708h-1024c0 -365 204 -632 406 -708c25 -9 42 -33 42 -60s-17 -51 -42 -60c-202 -76 -406 -343 -406 -708h1024c0 365 -204 632 -406 708c-25 9 -42 33 -42 60
-s17 51 42 60z" />
+ <glyph glyph-name="archlinux" unicode="&#xf323;" horiz-adv-x="1794"
+d="M897 1538c164 -386 203 -504 682 -1397c-61 36 -138 70 -247 98c158 -81 236 -156 310 -214c47 -87 97 -179 152 -281c-281 162 -499 263 -702 303c7 31 11 64 12 98c5 182 -83 337 -195 347s-207 -131 -212 -313v-9c0 -43 4 -84 13 -122c-205 -39 -426 -140 -710 -304
+c362 650 540 989 654 1226c60 -50 139 -99 256 -147c-109 76 -175 143 -230 201c89 190 137 318 217 514z" />
+ <glyph glyph-name="area-chart" unicode="&#xf1fe;" horiz-adv-x="2048"
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+ <glyph glyph-name="arrow-circle-down" unicode="&#xf0ab;"
+d="M1284 639c0 17 -6 33 -18 45l-91 91c-12 12 -28 18 -45 18s-33 -6 -45 -18l-189 -189v502c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-502l-189 189c-12 12 -28 19 -45 19s-33 -7 -45 -19l-91 -91c-12 -12 -18 -28 -18 -45s6 -33 18 -45l362 -362l91 -91
+c12 -12 28 -18 45 -18s33 6 45 18l91 91l362 362c12 12 18 28 18 45zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="arrow-circle-left" unicode="&#xf0a8;"
+d="M1280 576v128c0 35 -29 64 -64 64h-502l189 189c12 12 19 28 19 45s-7 33 -19 45l-91 91c-12 12 -28 18 -45 18s-33 -6 -45 -18l-362 -362l-91 -91c-12 -12 -18 -28 -18 -45s6 -33 18 -45l91 -91l362 -362c12 -12 28 -18 45 -18s33 6 45 18l91 91c12 12 18 28 18 45
+s-6 33 -18 45l-189 189h502c35 0 64 29 64 64zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="arrow-circle-o-down" unicode="&#xf01a;"
+d="M1120 608c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v352c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-352h192c18 0 32 -14 32 -32zM768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544
+s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="arrow-circle-o-left" unicode="&#xf190;"
+d="M1152 736v-192c0 -17 -15 -32 -32 -32h-352v-192c0 -18 -14 -32 -32 -32c-9 0 -17 4 -24 10l-319 319c-6 6 -9 15 -9 23s3 17 9 23l320 320c6 6 15 9 23 9c17 0 32 -15 32 -32v-192h352c17 0 32 -15 32 -32zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544
+s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="arrow-circle-o-right" unicode="&#xf18e;"
+d="M1152 640c0 -8 -3 -17 -9 -23l-320 -320c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v192h-352c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h352v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544
+s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="arrow-circle-o-up" unicode="&#xf01b;"
+d="M1118 660c-5 -12 -17 -20 -30 -20h-192v-352c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v352h-192c-18 0 -32 14 -32 32c0 9 4 17 10 24l319 319c7 6 15 9 23 9s16 -3 23 -9l320 -320c9 -10 12 -23 7 -35zM768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544
+s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="arrow-circle-right" unicode="&#xf0a9;"
+d="M1285 640c0 17 -6 33 -18 45l-91 91l-362 362c-12 12 -28 18 -45 18s-33 -6 -45 -18l-91 -91c-12 -12 -18 -28 -18 -45s6 -33 18 -45l189 -189h-502c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h502l-189 -189c-12 -12 -19 -28 -19 -45s7 -33 19 -45l91 -91
+c12 -12 28 -18 45 -18s33 6 45 18l362 362l91 91c12 12 18 28 18 45zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="arrow-circle-up" unicode="&#xf0aa;"
+d="M1284 641c0 17 -6 33 -18 45l-362 362l-91 91c-12 12 -28 18 -45 18s-33 -6 -45 -18l-91 -91l-362 -362c-12 -12 -18 -28 -18 -45s6 -33 18 -45l91 -91c12 -12 28 -18 45 -18s33 6 45 18l189 189v-502c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v502l189 -189
+c12 -12 28 -19 45 -19s33 7 45 19l91 91c12 12 18 28 18 45zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="arrow-down" unicode="&#xf063;" horiz-adv-x="1558"
+d="M1558 704c0 -34 -14 -67 -37 -90l-651 -652c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-651 652c-24 23 -38 56 -38 90s14 67 38 91l74 75c24 23 57 37 91 37s67 -14 90 -37l294 -294v704c0 70 58 128 128 128h128c70 0 128 -58 128 -128v-704l294 294c23 23 56 37 90 37
+s67 -14 91 -37l75 -75c23 -24 37 -57 37 -91z" />
+ <glyph glyph-name="arrow-left" unicode="&#xf060;" horiz-adv-x="1472"
+d="M1472 640v-128c0 -68 -45 -128 -117 -128h-704l293 -294c24 -23 38 -56 38 -90s-14 -67 -38 -90l-75 -76c-23 -23 -56 -37 -90 -37s-67 14 -91 37l-651 652c-23 23 -37 56 -37 90s14 67 37 91l651 650c24 24 57 38 91 38s66 -14 90 -38l75 -74c24 -24 38 -57 38 -91
+s-14 -67 -38 -91l-293 -293h704c72 0 117 -60 117 -128z" />
+ <glyph glyph-name="arrow-right" unicode="&#xf061;" horiz-adv-x="1472"
+d="M1472 576c0 -34 -13 -67 -37 -91l-651 -651c-24 -23 -57 -37 -91 -37s-66 14 -90 37l-75 75c-24 24 -38 57 -38 91s14 67 38 91l293 293h-704c-72 0 -117 60 -117 128v128c0 68 45 128 117 128h704l-293 294c-24 23 -38 56 -38 90s14 67 38 90l75 75c24 24 56 38 90 38
+s67 -14 91 -38l651 -651c24 -23 37 -56 37 -90z" />
+ <glyph glyph-name="arrow-up" unicode="&#xf062;" horiz-adv-x="1558"
+d="M1558 565c0 -34 -14 -66 -37 -90l-75 -75c-24 -24 -57 -38 -91 -38s-67 14 -90 38l-294 293v-704c0 -72 -60 -117 -128 -117h-128c-68 0 -128 45 -128 117v704l-294 -293c-23 -24 -56 -38 -90 -38s-67 14 -90 38l-75 75c-24 24 -38 56 -38 90s14 67 38 91l651 651
+c23 24 56 37 90 37s67 -13 91 -37l651 -651c23 -24 37 -57 37 -91z" />
+ <glyph glyph-name="arrows" unicode="&#xf047;" horiz-adv-x="1792"
+d="M1792 640c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v128h-384v-384h128c35 0 64 -29 64 -64c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-256 256c-12 12 -19 28 -19 45c0 35 29 64 64 64h128v384h-384
+v-128c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-256 256c-12 12 -19 28 -19 45s7 33 19 45l256 256c12 12 28 19 45 19c35 0 64 -29 64 -64v-128h384v384h-128c-35 0 -64 29 -64 64c0 17 7 33 19 45l256 256c12 12 28 19 45 19s33 -7 45 -19l256 -256
+c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-128v-384h384v128c0 35 29 64 64 64c17 0 33 -7 45 -19l256 -256c12 -12 19 -28 19 -45z" />
+ <glyph glyph-name="arrows-alt" unicode="&#xf0b2;"
+d="M1283 995l-355 -355l355 -355l144 144c18 19 46 24 70 14c23 -10 39 -33 39 -59v-448c0 -35 -29 -64 -64 -64h-448c-26 0 -49 16 -59 40c-10 23 -5 51 14 69l144 144l-355 355l-355 -355l144 -144c19 -18 24 -46 14 -69c-10 -24 -33 -40 -59 -40h-448
+c-35 0 -64 29 -64 64v448c0 26 16 49 40 59c23 10 51 5 69 -14l144 -144l355 355l-355 355l-144 -144c-12 -12 -28 -19 -45 -19c-8 0 -17 2 -24 5c-24 10 -40 33 -40 59v448c0 35 29 64 64 64h448c26 0 49 -16 59 -40c10 -23 5 -51 -14 -69l-144 -144l355 -355l355 355
+l-144 144c-19 18 -24 46 -14 69c10 24 33 40 59 40h448c35 0 64 -29 64 -64v-448c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 7 -45 19z" />
+ <glyph glyph-name="arrows-h" unicode="&#xf07e;" horiz-adv-x="1792"
+d="M1792 640c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v128h-1024v-128c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-256 256c-12 12 -19 28 -19 45s7 33 19 45l256 256c12 12 28 19 45 19c35 0 64 -29 64 -64v-128h1024v128
+c0 35 29 64 64 64c17 0 33 -7 45 -19l256 -256c12 -12 19 -28 19 -45z" />
+ <glyph glyph-name="arrows-v" unicode="&#xf07d;" horiz-adv-x="640"
+d="M640 1216c0 -35 -29 -64 -64 -64h-128v-1024h128c35 0 64 -29 64 -64c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-256 256c-12 12 -19 28 -19 45c0 35 29 64 64 64h128v1024h-128c-35 0 -64 29 -64 64c0 17 7 33 19 45l256 256
+c12 12 28 19 45 19s33 -7 45 -19l256 -256c12 -12 19 -28 19 -45z" />
+ <glyph glyph-name="artstation" unicode="&#xf2ed;" horiz-adv-x="1533"
+d="M601 1277v0h267c51 0 112 -37 136 -83l504 -878c16 -24 25 -53 25 -84c0 -35 -7 -53 -31 -94l-123 -213zM474 1058l348 -604h-695zM0 233v0h949l178 -309h-859c-53 0 -114 38 -138 85h-1z" />
+ <glyph glyph-name="askfm" unicode="&#xf33a;" horiz-adv-x="1776"
+d="M888 1526v0c79 0 158 -8 218 -24c316 -85 561 -330 646 -646c32 -120 32 -316 0 -436c-85 -314 -330 -561 -641 -644c-101 -27 -289 -34 -381 -15c-351 74 -615 320 -706 659c-32 120 -32 316 0 436c85 316 330 561 646 646c60 16 139 24 218 24zM1326 1231
+c-22 -1 -42 -26 -61 -72c-12 -30 -20 -61 -17 -69s24 -16 48 -20s69 -22 102 -40c74 -41 87 -43 75 -11c-5 13 -27 59 -49 103c-37 74 -69 110 -98 109zM295 1054c-16 -1 -29 -10 -38 -29c-16 -33 -29 -232 -15 -227c6 2 28 27 51 56s58 64 80 78s40 29 40 33s-20 26 -44 49
+c-29 28 -54 41 -74 40zM1189 914c-43 0 -83 -15 -116 -46c-200 -189 66 -669 313 -563c136 58 156 284 40 459c-65 97 -155 150 -237 150zM588 814v0c-130 0 -259 -168 -233 -401c22 -197 173 -304 305 -217s180 323 100 486c-45 92 -109 132 -172 132zM955 410
+c-20 0 -39 -7 -54 -21c-30 -29 -28 -48 9 -110c63 -106 75 -105 101 -2c20 81 20 90 -4 114c-13 13 -32 19 -52 19zM611 667c12 -4 30 -13 40 -21c40 -29 76 -98 80 -154c3 -34 -6 -84 -20 -113c-23 -48 -78 -89 -124 -93c-28 -2 -70 10 -94 28c-40 29 -76 98 -80 154
+c-1 17 0 44 3 60h8c32 0 66 25 76 55c2 6 3 17 3 24c0 13 -6 32 -13 43c17 12 47 22 67 24c15 1 39 -2 54 -7zM1222 793c12 0 33 -5 45 -9c47 -16 101 -70 122 -122c13 -31 20 -83 15 -115c-7 -52 -48 -108 -91 -125c-26 -10 -70 -11 -98 -1c-47 16 -101 70 -122 122
+c-6 16 -13 42 -15 59c35 7 63 41 63 77c0 21 -13 48 -29 61c13 16 39 36 57 43c14 6 37 10 53 10z" />
+ <glyph glyph-name="assistive-listening-systems" unicode="&#xf2a2;" horiz-adv-x="1792"
+d="M128 -192c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM320 0c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM365 365l256 -256l-90 -90l-256 256zM704 384c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64z
+M1411 704c0 -166 -78 -255 -146 -334c-63 -72 -113 -129 -113 -242c0 -212 -172 -384 -384 -384c-35 0 -64 29 -64 64s29 64 64 64c141 0 256 115 256 256c0 161 77 249 144 326c62 71 115 132 115 250c0 247 -201 448 -448 448s-448 -201 -448 -448c0 -35 -29 -64 -64 -64
+s-64 29 -64 64c0 318 258 576 576 576s576 -258 576 -576zM896 576c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM1184 704c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 124 -100 224 -224 224c-123 0 -224 -100 -224 -224c0 -35 -29 -64 -64 -64
+s-64 29 -64 64c0 194 158 352 352 352s352 -158 352 -352zM1578 993c13 -33 -4 -70 -37 -83c-7 -3 -15 -4 -23 -4c-25 0 -50 15 -59 41c-45 117 -123 219 -224 295c-28 21 -34 61 -13 89c22 28 62 34 90 13c120 -90 212 -212 266 -351zM1788 1074c12 -33 -4 -70 -37 -83
+c-8 -3 -15 -4 -23 -4c-26 0 -50 15 -60 41c-60 156 -163 292 -297 393c-29 21 -34 61 -13 89c21 29 61 34 89 13c154 -115 272 -271 341 -449z" />
+ <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1428"
+d="M1364 486c61 -35 82 -114 47 -175l-64 -110c-35 -61 -114 -82 -175 -47l-266 153v-307c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v307l-266 -153c-61 -35 -140 -14 -175 47l-64 110c-35 61 -14 140 47 175l266 154l-266 154c-61 35 -82 114 -47 175l64 110
+c35 61 114 82 175 47l266 -153v307c0 70 58 128 128 128h128c70 0 128 -58 128 -128v-307l266 153c61 35 140 14 175 -47l64 -110c35 -61 14 -140 -47 -175l-266 -154z" />
+ <glyph glyph-name="at" unicode="&#xf1fa;"
+d="M972 761c0 144 -75 230 -201 230c-166 0 -344 -165 -344 -432c0 -149 74 -234 204 -234c201 0 341 230 341 436zM1536 640c0 -311 -222 -428 -412 -434c-13 0 -18 -1 -32 -1c-62 0 -111 18 -142 53c-19 22 -30 50 -33 83c-62 -78 -170 -154 -305 -154
+c-215 0 -338 133 -338 365c0 319 221 578 491 578c117 0 211 -50 261 -135l2 19l11 56c1 8 8 18 15 18h118c5 0 10 -7 13 -11c3 -3 4 -11 3 -16l-120 -614c-4 -19 -5 -34 -5 -48c0 -54 16 -65 57 -65c68 2 288 30 288 306c0 389 -251 640 -640 640
+c-353 0 -640 -287 -640 -640s287 -640 640 -640c147 0 291 51 405 144c14 12 34 10 45 -4l41 -49c5 -7 8 -15 7 -24c-1 -8 -5 -16 -12 -22c-136 -111 -309 -173 -486 -173c-423 0 -768 345 -768 768s345 768 768 768c459 0 768 -309 768 -768z" />
+ <glyph glyph-name="att" unicode="&#xf31e;"
+d="M768 1407v0c144 0 278 -39 393 -108c31 -19 46 -30 46 -48c0 -73 -206 -150 -472 -150c-268 0 -419 70 -419 135c0 22 19 39 54 60c116 71 253 111 398 111zM273 1226v0c1 0 0 -1 -1 -2c-22 -27 -31 -53 -31 -79c0 -72 57 -185 362 -185c416 0 677 151 677 236
+c0 7 -2 13 -5 18c-1 1 0 2 1 1c25 -23 48 -46 73 -74c38 -43 53 -66 53 -104c0 -107 -166 -228 -539 -228c-350 0 -725 108 -725 257c0 10 10 28 25 47c32 41 68 78 108 112c1 0 2 1 2 1zM1456 979v0s1 0 1 -1c18 -36 40 -89 51 -133c10 -40 10 -69 2 -97
+c-43 -152 -307 -235 -646 -235c-556 0 -794 160 -841 260c-6 12 -7 20 -4 37c7 39 32 114 55 159c1 1 1 1 1 0c-4 -15 -6 -30 -6 -45c0 -153 253 -274 557 -274c281 0 837 129 830 328v1zM1534 683v0s1 -1 1 -2c1 -13 1 -25 1 -41c0 -67 -9 -146 -28 -190
+c-26 -61 -154 -248 -714 -248c-411 0 -649 139 -744 238c-21 22 -36 49 -39 67c-7 36 -11 91 -11 133c0 2 2 2 2 0c34 -125 219 -308 612 -308c413 0 891 200 919 350c0 1 1 1 1 1zM1482 360v0c1 0 1 -1 1 -2c-13 -33 -30 -67 -47 -96c-29 -50 -61 -86 -95 -114
+c-124 -102 -332 -154 -521 -154c-359 0 -649 111 -745 315c-1 2 0 2 1 1c103 -149 366 -227 610 -227c345 0 679 106 795 276c0 1 1 1 1 1zM1274 64v0c1 0 1 -1 0 -2c-135 -118 -312 -190 -506 -190c-177 0 -341 60 -471 161c-1 1 -1 3 1 2c84 -47 234 -100 470 -100
+c272 0 444 89 505 129h1z" />
+ <glyph glyph-name="audio-description" unicode="&#xf29e;" horiz-adv-x="2304"
+d="M504 542h171l-1 265zM1530 641c0 111 -64 193 -197 193h-54v-388h52c125 0 199 91 199 195zM956 1018l1 -756c0 -19 -15 -34 -33 -34h-216c-18 0 -33 15 -33 34v62h-291l-55 -81c-6 -9 -17 -15 -28 -15h-267c-28 0 -44 31 -27 53l556 757c6 9 16 14 27 14h332
+c19 0 34 -15 34 -34zM1783 641c0 -263 -192 -413 -450 -413h-270c-19 0 -34 15 -34 34v756c0 19 15 34 34 34h268c260 0 452 -148 452 -411zM1939 640c0 0 4 -260 -148 -413h-51c136 162 139 414 139 414s2 198 -135 410h43c148 -169 152 -411 152 -411zM2123 640
+c0 0 4 -260 -149 -413h-51c136 162 139 414 139 414s2 198 -134 410h43c148 -169 152 -411 152 -411zM2304 640c0 0 4 -260 -148 -413h-51c135 162 138 414 138 414s2 198 -134 410h43c148 -169 152 -411 152 -411z" />
+ <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1542"
+d="M1497 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-710c0 -35 -20 -44 -45 -19l-710 710c-25 25 -25 65 0 90l710 710c25 25 45 16 45 -19v-710c3 7 7 13 13 19z" />
<glyph glyph-name="balance-scale" unicode="&#xf24e;" horiz-adv-x="2176"
d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280c-19 -54 -63 -98 -117 -117v-1291h608c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1344c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h608v1291c-54 19 -98 63 -117 117h-491c-18 0 -32 14 -32 32v64
c0 18 14 32 32 32h491c27 75 97 128 181 128s154 -53 181 -128h491c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-491zM1088 1264c44 0 80 36 80 80s-36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80zM2176 384c0 -206 -285 -288 -448 -288s-448 82 -448 288
c0 39 349 657 392 735c11 20 33 33 56 33s45 -13 56 -33c43 -78 392 -696 392 -735zM896 384c0 -206 -285 -288 -448 -288s-448 82 -448 288c0 39 349 657 392 735c11 20 33 33 56 33s45 -13 56 -33c43 -78 392 -696 392 -735z" />
- <glyph glyph-name="upload" unicode="&#xf093;" horiz-adv-x="1664"
-d="M1280 64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1536 64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 288v-320c0 -53 -43 -96 -96 -96h-1472c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h427c27 -74 98 -128 181 -128
-h256c83 0 154 54 181 128h427c53 0 96 -43 96 -96zM1339 936c-10 -24 -33 -40 -59 -40h-256v-448c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v448h-256c-26 0 -49 16 -59 40c-10 23 -5 51 14 69l448 448c12 13 29 19 45 19s33 -6 45 -19l448 -448
-c19 -18 24 -46 14 -69z" />
- <glyph glyph-name="magnet" unicode="&#xf076;"
-d="M1536 704v-128c0 -408 -323 -704 -768 -704s-768 296 -768 704v128c0 35 29 64 64 64h384c35 0 64 -29 64 -64v-128c0 -183 213 -192 256 -192s256 9 256 192v128c0 35 29 64 64 64h384c35 0 64 -29 64 -64zM512 1344v-384c0 -35 -29 -64 -64 -64h-384
-c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h384c35 0 64 -29 64 -64zM1536 1344v-384c0 -35 -29 -64 -64 -64h-384c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h384c35 0 64 -29 64 -64z" />
- <glyph glyph-name="adjust" unicode="&#xf042;"
-d="M768 96v1088c-300 0 -544 -244 -544 -544s244 -544 544 -544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="subway" unicode="&#xf239;"
-d="M1088 1536c247 0 448 -143 448 -320v-896c0 -173 -191 -313 -431 -319l213 -202c21 -20 7 -55 -22 -55h-1056c-29 0 -43 35 -22 55l213 202c-240 6 -431 146 -431 319v896c0 177 201 320 448 320h640zM288 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160
-s72 -160 160 -160zM704 768v512h-544v-512h544zM1248 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM1408 768v512h-576v-512h576z" />
- <glyph glyph-name="chevron-down" unicode="&#xf078;" horiz-adv-x="1612"
-d="M1593 728l-742 -741c-25 -25 -65 -25 -90 0l-742 741c-25 25 -25 66 0 91l166 165c25 25 65 25 90 0l531 -531l531 531c25 25 65 25 90 0l166 -165c25 -25 25 -66 0 -91z" />
- <glyph glyph-name="location-arrow" unicode="&#xf124;" horiz-adv-x="1408"
-d="M1401 1187l-640 -1280c-11 -22 -33 -35 -57 -35c-5 0 -10 1 -15 2c-29 7 -49 32 -49 62v576h-576c-30 0 -55 20 -62 49s7 59 33 72l1280 640c9 5 19 7 29 7c17 0 33 -6 45 -19c20 -19 25 -49 12 -74z" />
- <glyph glyph-name="check-circle" unicode="&#xf058;"
-d="M1284 802c0 17 -6 34 -18 46l-91 90c-12 12 -28 19 -45 19s-33 -7 -45 -19l-408 -407l-226 226c-12 12 -28 19 -45 19s-33 -7 -45 -19l-91 -90c-12 -12 -18 -29 -18 -46s6 -33 18 -45l362 -362c12 -12 29 -19 45 -19c17 0 34 7 46 19l543 543c12 12 18 28 18 45z
-M1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="arrow-down" unicode="&#xf063;" horiz-adv-x="1558"
-d="M1558 704c0 -34 -14 -67 -37 -90l-651 -652c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-651 652c-24 23 -38 56 -38 90s14 67 38 91l74 75c24 23 57 37 91 37s67 -14 90 -37l294 -294v704c0 70 58 128 128 128h128c70 0 128 -58 128 -128v-704l294 294c23 23 56 37 90 37
-s67 -14 91 -37l75 -75c23 -24 37 -57 37 -91z" />
+ <glyph glyph-name="ban" unicode="&#xf05e;"
+d="M1312 643c0 109 -32 210 -87 295l-754 -753c86 -56 188 -89 297 -89c300 0 544 245 544 547zM313 344l755 754c-86 58 -189 91 -300 91c-300 0 -544 -245 -544 -546c0 -111 33 -213 89 -299zM1536 643c0 -426 -344 -771 -768 -771s-768 345 -768 771
+c0 425 344 770 768 770s768 -345 768 -770z" />
+ <glyph glyph-name="bandcamp" unicode="&#xf2d5;" horiz-adv-x="1792"
+d="M1070 358l306 564h-654l-306 -564h654zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
+ <glyph glyph-name="bar-chart" unicode="&#xf080;" horiz-adv-x="2048"
+d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+ <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="2176"
+d="M0 1404h128v-1532h-128v1532zM2048 1408h128v-1536h-128v1536zM256 1408h128v-1280h-128v1280zM512 1408h256v-1280h-256v1280zM1280 1408h256v-1280h-256v1280zM1792 1408h128v-1280h-128v1280zM1024 1408h128v-1280h-128v1280zM256 0h128v-128h-128v128zM512 0h128
+v-128h-128v128zM768 0h128v-128h-128v128zM1024 0h128v-128h-128v128zM1280 0h128v-128h-128v128zM1536 0h128v-128h-128v128zM1792 0h128v-128h-128v128z" />
+ <glyph glyph-name="bars" unicode="&#xf0c9;"
+d="M1536 192v-128c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1536 704v-128c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1536 1216v-128
+c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="bath" unicode="&#xf2cd;" horiz-adv-x="1792"
+d="M1664 448v-192c0 -114 -50 -215 -128 -286v-194c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v118c-40 -14 -83 -22 -128 -22h-768c-45 0 -88 8 -128 22v-110c0 -22 -14 -40 -32 -40h-64c-18 0 -32 18 -32 40v186c-78 71 -128 172 -128 286v192h1536zM704 864
+c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM768 928c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM704 992c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM832 992c0 -18 -14 -32 -32 -32s-32 14 -32 32
+s14 32 32 32s32 -14 32 -32zM768 1056c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM704 1120c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM1792 608v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32
+h96v640c0 141 115 256 256 256c72 0 137 -30 184 -78c62 25 136 16 191 -27l22 22c6 6 16 6 22 0l42 -42c6 -6 6 -16 0 -22l-314 -314c-6 -6 -16 -6 -22 0l-42 42c-6 6 -6 16 0 22l22 22c-48 61 -54 145 -17 212c-23 22 -54 35 -88 35c-71 0 -128 -57 -128 -128v-640h1504
+c18 0 32 -14 32 -32zM896 1056c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM832 1120c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM768 1184c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM960 1120
+c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM896 1184c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM832 1248c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM1024 1184c0 -18 -14 -32 -32 -32s-32 14 -32 32
+s14 32 32 32s32 -14 32 -32zM960 1248c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM1088 1248c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32z" />
+ <glyph glyph-name="battery-empty" unicode="&#xf244;" horiz-adv-x="2304"
+d="M2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32h-1856c-18 0 -32 -14 -32 -32v-960
+c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" />
+ <glyph glyph-name="battery-full" unicode="&#xf240;" horiz-adv-x="2304"
+d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288c0 18 -14 32 -32 32h-1856c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288zM2304 832v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856
+c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160c71 0 128 -57 128 -128z" />
+ <glyph glyph-name="battery-half" unicode="&#xf242;" horiz-adv-x="2304"
+d="M256 256v768h896v-768h-896zM2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32h-1856
+c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" />
+ <glyph glyph-name="battery-quarter" unicode="&#xf243;" horiz-adv-x="2304"
+d="M256 256v768h512v-768h-512zM2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32h-1856
+c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" />
+ <glyph glyph-name="battery-three-quarters" unicode="&#xf241;" horiz-adv-x="2304"
+d="M256 256v768h1280v-768h-1280zM2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32
+h-1856c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" />
+ <glyph glyph-name="bed" unicode="&#xf236;" horiz-adv-x="2048"
+d="M256 512h1728c35 0 64 -29 64 -64v-448h-256v256h-1536v-256h-256v1216c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-704zM832 832c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM2048 576h-1152v384c0 35 29 64 64 64h704
+c212 0 384 -172 384 -384v-64z" />
+ <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1600"
+d="M576 640v384h-256v-256c0 -71 57 -128 128 -128h128zM1600 192v-192h-1152v192l128 192h-128c-212 0 -384 172 -384 384v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+ <glyph glyph-name="behance" unicode="&#xf1b4;" horiz-adv-x="2048"
+d="M1848 1197v-124h-511v124h511zM1596 771c-120 0 -200 -75 -208 -195h408c-11 121 -74 195 -200 195zM1612 186c76 0 174 41 198 119h221c-68 -209 -209 -307 -427 -307c-288 0 -467 195 -467 479c0 274 189 483 467 483c286 0 444 -225 444 -495c0 -16 -1 -32 -2 -47
+h-658c0 -146 77 -232 224 -232zM277 236h296c113 0 205 40 205 167c0 129 -77 180 -199 180h-302v-347zM277 773h281c99 0 169 43 169 150c0 116 -90 144 -190 144h-260v-294zM0 1282h594c216 0 403 -61 403 -312c0 -127 -59 -209 -172 -263c155 -44 230 -161 230 -319
+c0 -256 -215 -366 -444 -366h-611v1260z" />
+ <glyph glyph-name="behance-square" unicode="&#xf1b5;"
+d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960zM499 1041h-371v-787h382c143 0 277 68 277 228c0 99 -47 172 -143 200c70 34 107 85 107 164c0 157 -117 195 -252 195zM477 723
+h-176v184h163c62 0 119 -17 119 -90c0 -67 -44 -94 -106 -94zM486 388h-185v217h189c76 0 124 -33 124 -113s-57 -104 -128 -104zM1136 356c-92 0 -140 54 -140 145h411c1 10 1 20 1 30c0 168 -99 309 -278 309c-173 0 -292 -131 -292 -302c0 -178 112 -299 292 -299
+c137 0 225 61 267 191h-138c-15 -48 -76 -74 -123 -74zM1126 722c78 0 117 -47 124 -122h-254c5 75 55 122 130 122zM964 988v-77h319v77h-319z" />
+ <glyph glyph-name="bell" unicode="&#xf0f3;" horiz-adv-x="1664"
+d="M848 -160c0 9 -7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16zM182 128h1300c-179 202 -266 476 -266 832c0 129 -122 320 -384 320s-384 -191 -384 -320c0 -356 -87 -630 -266 -832zM1664 128
+c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-256 115 -256 256h-448c-70 0 -128 58 -128 128c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c265 -39 424 -249 424 -441
+c0 -483 172 -707 320 -832z" />
+ <glyph glyph-name="bell-o" unicode="&#xf0a2;" horiz-adv-x="1664"
+d="M848 -160c0 9 -7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16zM1664 128c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-256 115 -256 256h-448c-70 0 -128 58 -128 128
+c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c265 -39 424 -249 424 -441c0 -483 172 -707 320 -832z" />
+ <glyph glyph-name="bell-rigning-o" unicode="&#xf330;" horiz-adv-x="1664"
+d="M832 1536c53 0 96 -43 96 -96c0 -14 -3 -27 -8 -39c265 -39 424 -249 424 -441c0 -483 172 -707 320 -832c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-256 115 -256 256h-448c-70 0 -128 58 -128 128c148 125 320 349 320 832c0 192 159 402 424 441
+c-5 12 -8 25 -8 39c0 53 43 96 96 96zM277 1455l86 -94c-120 -110 -172 -242 -171 -401h-128c-1 189 67 362 213 495zM1387 1455v0c146 -133 214 -306 213 -495h-128c1 159 -51 291 -171 401zM672 16c-9 0 -16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16
+s-7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16z" />
+ <glyph glyph-name="bell-ringing" unicode="&#xf32d;" horiz-adv-x="1664"
+d="M832 1536c53 0 96 -43 96 -96c0 -14 -3 -27 -8 -39c265 -39 424 -249 424 -441c0 -483 172 -707 320 -832c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-256 115 -256 256h-448c-70 0 -128 58 -128 128c148 125 320 349 320 832c0 192 159 402 424 441
+c-5 12 -8 25 -8 39c0 53 43 96 96 96zM277 1455l86 -94c-120 -110 -172 -242 -171 -401h-128c-1 189 67 362 213 495zM1387 1455v0c146 -133 214 -306 213 -495h-128c1 159 -51 291 -171 401zM832 1280c-262 0 -384 -191 -384 -320c0 -356 -87 -630 -266 -832h1300
+c-179 202 -266 476 -266 832c0 129 -122 320 -384 320zM672 16c-9 0 -16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16s-7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16z" />
+ <glyph glyph-name="bell-slash" unicode="&#xf1f6;" horiz-adv-x="2019"
+d="M1544 684c51 -298 182 -458 298 -556c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-255 114 -256 255zM1010 -176c9 0 16 7 16 16s-7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176zM2012 1424
+c11 -14 10 -34 -3 -46l-1872 -1622c-13 -11 -34 -10 -45 4l-84 96c-11 14 -10 34 3 45l186 161c-12 20 -19 42 -19 66c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c172 -25 299 -122 367 -240
+l418 363c13 11 34 10 45 -4z" />
+ <glyph glyph-name="bell-slash-o" unicode="&#xf1f7;" horiz-adv-x="2019"
+d="M1026 -160c0 9 -7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16zM489 315l877 760c-50 105 -166 205 -356 205c-262 0 -384 -191 -384 -320c0 -256 -45 -470 -137 -645zM1842 128c0 -70 -58 -128 -128 -128
+h-448c0 -141 -115 -256 -256 -256s-255 114 -256 255l149 129h757c-111 125 -186 277 -227 459l111 97c51 -298 182 -458 298 -556zM1928 1520l84 -96c11 -14 10 -34 -3 -46l-1872 -1622c-13 -11 -34 -10 -45 4l-84 96c-11 14 -10 34 3 45l186 161c-12 20 -19 42 -19 66
+c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c172 -25 299 -122 367 -240l418 363c13 11 34 10 45 -4z" />
<glyph glyph-name="bicycle" unicode="&#xf206;" horiz-adv-x="2304"
d="M762 384h-314c-53 0 -83 60 -51 102l188 251c-42 20 -88 31 -137 31c-176 0 -320 -144 -320 -320s144 -320 320 -320c155 0 284 110 314 256zM576 512h186c-12 56 -38 107 -75 148zM1056 512l288 384h-480l-99 -132c67 -66 112 -154 126 -252h165zM2176 448
c0 176 -144 320 -320 320c-43 0 -83 -9 -121 -24l174 -260c20 -30 12 -70 -17 -89c-11 -8 -24 -11 -36 -11c-21 0 -41 10 -53 29l-174 260c-57 -58 -93 -137 -93 -225c0 -176 144 -320 320 -320s320 144 320 320zM2304 448c0 -247 -201 -448 -448 -448s-448 201 -448 448
c0 132 58 251 149 333l-65 98l-353 -469c-12 -17 -31 -26 -51 -26h-197c-31 -217 -217 -384 -443 -384c-247 0 -448 201 -448 448s201 448 448 448c78 0 151 -20 215 -55l137 183h-224c-35 0 -64 29 -64 64s29 64 64 64h384v-128h435l-85 128h-222c-35 0 -64 29 -64 64
s29 64 64 64h256c21 0 41 -11 53 -28l267 -400c58 28 123 44 192 44c247 0 448 -201 448 -448z" />
- <glyph glyph-name="instagram" unicode="&#xf16d;"
-d="M1024 640c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1162 640c0 -218 -176 -394 -394 -394s-394 176 -394 394s176 394 394 394s394 -176 394 -394zM1270 1050c0 -51 -41 -92 -92 -92s-92 41 -92 92s41 92 92 92s92 -41 92 -92z
-M768 1270c-112 0 -352 9 -453 -31c-35 -14 -61 -31 -88 -58s-44 -53 -58 -88c-40 -101 -31 -341 -31 -453s-9 -352 31 -453c14 -35 31 -61 58 -88s53 -44 88 -58c101 -40 341 -31 453 -31s352 -9 453 31c35 14 61 31 88 58s44 53 58 88c40 101 31 341 31 453s9 352 -31 453
-c-14 35 -31 61 -58 88s-53 44 -88 58c-101 40 -341 31 -453 31zM1536 640c0 -106 1 -211 -5 -317c-6 -123 -34 -232 -124 -322s-199 -118 -322 -124c-106 -6 -211 -5 -317 -5s-211 -1 -317 5c-123 6 -232 34 -322 124s-118 199 -124 322c-6 106 -5 211 -5 317s-1 211 5 317
-c6 123 34 232 124 322s199 118 322 124c106 6 211 5 317 5s211 1 317 -5c123 -6 232 -34 322 -124s118 -199 124 -322c6 -106 5 -211 5 -317z" />
- <glyph glyph-name="caret-square-o-up" unicode="&#xf151;"
-d="M1145 419c-11 -22 -33 -35 -57 -35h-640c-24 0 -46 13 -57 35c-11 21 -9 47 5 66l320 448c12 17 31 27 52 27s40 -10 52 -27l320 -448c14 -19 16 -45 5 -66zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960c17 0 32 15 32 32
-zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664"
-d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v224h-864c-18 0 -32 14 -32 32v864h-224c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h224v224c0 18 14 32 32 32h192
-c18 0 32 -14 32 -32v-224h851l246 247c13 12 33 12 46 0c12 -13 12 -33 0 -46l-247 -246v-851h224c18 0 32 -14 32 -32z" />
- <glyph glyph-name="external-link" unicode="&#xf08e;" horiz-adv-x="1792"
-d="M1408 608v-320c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h704c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-704c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v320c0 18 14 32 32 32
-h64c18 0 32 -14 32 -32zM1792 1472v-512c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-176 176l-652 -652c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-114 114c-6 6 -10 15 -10 23s4 17 10 23l652 652l-176 176c-12 12 -19 28 -19 45c0 35 29 64 64 64h512c35 0 64 -29 64 -64z
+ <glyph glyph-name="binoculars" unicode="&#xf1e5;" horiz-adv-x="1792"
+d="M704 1216v-768c0 -35 -29 -64 -64 -64v-576c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v512l249 873c4 14 17 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v576c-35 0 -64 29 -64 64v768h424
+c14 0 27 -9 31 -23zM736 1504v-224h-352v224c0 18 14 32 32 32h288c18 0 32 -14 32 -32zM1408 1504v-224h-352v224c0 18 14 32 32 32h288c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="biometric" unicode="&#xf32b;" horiz-adv-x="2304"
+d="M1419 640c0 -147 -120 -267 -267 -267s-267 120 -267 267s120 267 267 267s267 -120 267 -267zM0 1222h2304v-521h-769c-29 185 -190 327 -383 327s-354 -142 -383 -327h-769v521zM0 579h769c29 -185 190 -327 383 -327s354 142 383 327h769v-521h-2304v521z" />
+ <glyph glyph-name="birthday-cake" unicode="&#xf1fd;" horiz-adv-x="1792"
+d="M1792 128v-384h-1792v384c98 0 150 44 191 79c34 30 57 49 108 49s73 -19 108 -49c41 -35 92 -79 191 -79c98 0 149 44 191 79c34 30 56 49 107 49s74 -19 108 -49c41 -35 93 -79 191 -79s150 44 191 79c34 30 57 49 108 49c50 0 73 -19 107 -49c41 -35 93 -79 191 -79z
+M1792 448v-192c-51 0 -73 19 -108 49c-41 35 -92 79 -190 79c-99 0 -150 -44 -191 -79c-35 -30 -57 -49 -108 -49s-74 19 -108 49c-41 35 -92 79 -191 79c-98 0 -149 -44 -191 -79c-34 -30 -56 -49 -107 -49s-74 19 -108 49c-41 35 -93 79 -191 79c-99 0 -150 -44 -191 -79
+c-34 -30 -57 -49 -108 -49v192c0 106 86 192 192 192h64v448h256v-448h256v448h256v-448h256v448h256v-448h64c106 0 192 -86 192 -192zM512 1312c0 -106 -57 -160 -128 -160s-128 57 -128 128c0 124 128 92 128 256c48 0 128 -118 128 -224zM1024 1312
+c0 -106 -57 -160 -128 -160s-128 57 -128 128c0 124 128 92 128 256c48 0 128 -118 128 -224zM1536 1312c0 -106 -57 -160 -128 -160s-128 57 -128 128c0 124 128 92 128 256c48 0 128 -118 128 -224z" />
+ <glyph glyph-name="bitbucket" unicode="&#xf171;" horiz-adv-x="1408"
+d="M815 677c11 -84 -91 -150 -162 -107c-80 35 -80 162 -2 198c67 41 164 -13 164 -91zM926 698c-18 142 -179 236 -310 177c-83 -37 -139 -125 -135 -218c5 -122 121 -222 243 -211s217 130 202 252zM1165 1240c-44 58 -119 68 -185 79c-187 30 -379 31 -566 -2
+c-62 -10 -132 -21 -171 -77c64 -60 155 -69 237 -79c148 -19 300 -20 448 -1c83 10 175 18 237 80zM1222 205c-28 -98 -12 -230 -116 -287c-179 -99 -396 -110 -593 -75c-104 19 -226 52 -283 150c-25 96 -41 194 -57 292l6 16l18 9c298 -197 715 -197 1014 0
+c47 -14 12 -71 11 -105zM1403 1166c-34 -219 -73 -437 -111 -655c-11 -64 -73 -100 -125 -127c-187 -94 -405 -110 -610 -88c-139 15 -281 52 -394 139c-53 41 -53 111 -63 170c-35 205 -75 410 -100 617c12 90 113 129 188 157c100 37 207 54 313 64c226 22 457 14 676 -50
+c78 -23 162 -55 215 -122c24 -31 16 -70 11 -105z" />
+ <glyph glyph-name="bitbucket-square" unicode="&#xf172;"
+d="M848 666c0 57 -70 96 -118 67c-57 -27 -57 -119 1 -143c52 -31 125 16 117 76zM928 682c11 -88 -58 -174 -146 -182s-171 64 -175 153c-3 66 38 130 98 157c94 42 210 -26 223 -128zM1100 1073c-44 -45 -111 -51 -170 -58c-107 -14 -216 -13 -324 0
+c-59 8 -124 15 -170 58c28 40 78 48 123 55c135 24 273 23 408 1c48 -7 102 -15 133 -56zM1142 327c0 24 25 65 -9 75c-215 -142 -515 -142 -731 0l-12 -6l-5 -12c12 -70 23 -141 41 -210c41 -71 129 -95 204 -108c142 -26 299 -18 428 53c75 42 63 137 84 208zM1272 1020
+c4 24 9 53 -8 75c-38 48 -98 71 -155 88c-158 46 -325 52 -487 36c-77 -7 -154 -20 -226 -46c-54 -21 -127 -49 -136 -113c18 -150 47 -297 72 -446c8 -42 8 -92 46 -122c81 -62 184 -89 284 -100c148 -16 305 -5 440 63c38 20 82 46 90 92c28 157 55 314 80 473zM1536 1120
+v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="black-tie" unicode="&#xf27e;"
+d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+ <glyph glyph-name="blind" unicode="&#xf29d;" horiz-adv-x="1330"
+d="M327 1225c-86 0 -156 70 -156 156c0 85 70 155 156 155s155 -70 155 -155c0 -86 -69 -156 -155 -156zM878 583c0 -108 -115 -84 -141 -40l-367 438c-16 26 -28 14 -28 14s-7 -8 4 -21l122 -139l1 -354c-86 -250 -161 -457 -161 -457c-47 -134 -86 -250 -120 -266
+c-41 -21 -71 -16 -103 -1c-42 19 -54 70 -51 100c0 0 2 16 197 618l5 416l-85 -164l35 -222c13 -84 -58 -95 -58 -95c-68 -11 -82 68 -82 70l-46 299c210 379 211 381 211 381c16 24 52 34 113 34c54 0 88 -16 107 -40l424 -521c6 -4 10 -10 14 -17l3 -3l-1 -1
+c5 -9 7 -19 7 -29zM475 433c96 -255 182 -448 182 -448c29 -74 79 -180 6 -222c-72 -42 -130 7 -146 41h-1c-3 8 -6 16 -8 25l-124 351zM1299 -159c21 -33 39 -57 28 -64c-19 -12 -25 23 -46 57c0 0 -113 171 -423 661c6 -2 17 7 17 7s11 9 11 17
+c308 -503 413 -678 413 -678z" />
+ <glyph glyph-name="blockstack" unicode="&#xf33b;" horiz-adv-x="1765"
+d="M1374 1525c121 0 182 -1 231 -22c53 -23 115 -85 138 -138c21 -49 22 -110 22 -231v-983c0 -121 -1 -182 -22 -231c-23 -53 -85 -115 -138 -138c-49 -21 -110 -22 -231 -22h-983c-121 0 -182 1 -231 22c-53 23 -115 85 -138 138c-21 49 -22 110 -22 231v983
+c0 121 1 182 22 231c23 53 85 115 138 138c46 21 110 22 231 22h983zM1164 520c-88 0 -159 -72 -159 -160s71 -159 159 -159s160 71 160 159s-72 160 -160 160zM601 520c-88 0 -160 -72 -160 -160s72 -159 160 -159s159 71 159 159s-71 160 -159 160v0zM1164 1084
+c-88 0 -159 -72 -159 -160s71 -159 159 -159s160 71 160 159s-72 160 -160 160zM601 1084c-88 0 -160 -72 -160 -160s72 -159 160 -159s159 71 159 159s-71 160 -159 160z" />
+ <glyph glyph-name="bluetooth" unicode="&#xf293;" horiz-adv-x="1322"
+d="M734 483l148 -148l-149 -149zM733 1094l149 -149l-148 -148zM603 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1322 640c0 -710 -270 -896 -661 -896s-661 186 -661 896s270 896 661 896s661 -186 661 -896z
" />
- <glyph glyph-name="arrow-circle-down" unicode="&#xf0ab;"
-d="M1284 639c0 17 -6 33 -18 45l-91 91c-12 12 -28 18 -45 18s-33 -6 -45 -18l-189 -189v502c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-502l-189 189c-12 12 -28 19 -45 19s-33 -7 -45 -19l-91 -91c-12 -12 -18 -28 -18 -45s6 -33 18 -45l362 -362l91 -91
-c12 -12 28 -18 45 -18s33 6 45 18l91 91l362 362c12 12 18 28 18 45zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="font-awesome" unicode="&#xf2b4;" horiz-adv-x="1499"
-d="M1499 1024v-839c0 -31 -20 -54 -49 -62c-107 -32 -227 -52 -338 -52c-150 0 -277 59 -443 59c-123 0 -250 -20 -370 -48v-338h-160v1368c-84 33 -139 115 -139 205c0 121 98 219 219 219s219 -98 219 -219c0 -90 -55 -172 -139 -205v-68c112 26 228 44 343 44
-c66 0 132 -5 198 -15c86 -13 173 -43 261 -43c55 0 111 7 165 18c41 8 135 40 169 40c35 0 64 -29 64 -64z" />
- <glyph glyph-name="paper-plane" unicode="&#xf1d8;" horiz-adv-x="1792"
-d="M1764 1525c21 -15 31 -39 27 -64l-256 -1536c-3 -19 -15 -35 -32 -45c-9 -5 -20 -8 -31 -8c-8 0 -16 2 -24 5l-453 185l-242 -295c-12 -15 -30 -23 -49 -23c-7 0 -15 1 -22 4c-25 9 -42 33 -42 60v349l864 1059l-1069 -925l-395 162c-23 9 -38 30 -40 55
-c-1 24 11 47 32 59l1664 960c10 6 21 9 32 9c13 0 26 -4 36 -11z" />
- <glyph glyph-name="meanpath" unicode="&#xf20c;"
-d="M1311 694v-114c0 -32 -19 -52 -51 -52h-202c-32 0 -52 20 -52 52v114c0 32 20 52 52 52h202c32 0 51 -20 51 -52zM821 464v250c0 71 -47 118 -118 118h-133c-45 0 -78 -19 -96 -52c-18 33 -51 52 -96 52h-130c-70 0 -118 -47 -118 -118v-250c0 -15 7 -22 21 -22h55
-c15 0 22 7 22 22v230c0 32 19 52 52 52h94c32 0 52 -20 52 -52v-230c0 -15 6 -22 21 -22h54c15 0 22 7 22 22v230c0 32 20 52 52 52h97c32 0 51 -20 51 -52v-230c0 -15 7 -22 22 -22h55c14 0 21 7 21 22zM1410 560v154c0 71 -48 118 -119 118h-264c-71 0 -119 -47 -119 -118
-v-410c0 -15 8 -21 22 -21h55c15 0 21 6 21 21v180c19 -26 49 -42 94 -42h191c71 0 119 48 119 118zM1536 1176v-1072c0 -128 -104 -232 -232 -232h-1072c-128 0 -232 104 -232 232v1072c0 128 104 232 232 232h1072c128 0 232 -104 232 -232z" />
- <glyph glyph-name="long-arrow-left" unicode="&#xf177;" horiz-adv-x="1728"
-d="M1728 736v-192c0 -18 -14 -32 -32 -32h-1248v-224c0 -13 -7 -24 -19 -29s-25 -3 -35 5l-384 350c-6 6 -10 14 -10 23s4 18 10 24l384 354c10 9 23 11 35 6c11 -5 19 -16 19 -29v-224h1248c18 0 32 -14 32 -32z" />
- <glyph glyph-name="download" unicode="&#xf019;" horiz-adv-x="1664"
-d="M1280 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1536 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 416v-320c0 -53 -43 -96 -96 -96h-1472c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h465l135 -136
-c37 -36 85 -56 136 -56s99 20 136 56l136 136h464c53 0 96 -43 96 -96zM1339 985c10 -24 5 -52 -14 -70l-448 -448c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-448 448c-19 18 -24 46 -14 70c10 23 33 39 59 39h256v448c0 35 29 64 64 64h256c35 0 64 -29 64 -64v-448h256
-c26 0 49 -16 59 -39z" />
+ <glyph glyph-name="bluetooth-b" unicode="&#xf294;" horiz-adv-x="944"
+d="M556 113l173 172l-173 172v-344zM556 823l173 172l-173 172v-344zM588 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+ <glyph glyph-name="boardgamegeek" unicode="&#xf33c;" horiz-adv-x="1165"
+d="M156 138c-121 285 -159 376 -156 379c2 3 29 27 59 53s56 50 56 53s-16 112 -35 243s-34 239 -33 240s241 90 533 198s536 198 540 200s7 3 6 1c-5 -8 -143 -366 -142 -367s38 10 82 23s81 24 81 24s-17 -126 -38 -280l-37 -280l47 -45c26 -24 46 -45 46 -47
+c0 -4 -201 -520 -204 -523c-2 -2 -164 -64 -624 -239l-21 -8z" />
<glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408"
d="M555 15c44 -19 92 -32 140 -32c228 0 376 91 376 335c0 62 -8 127 -41 180c-93 150 -227 158 -388 158c-30 0 -73 0 -101 -10c0 -106 -1 -212 -1 -317c0 -69 -9 -256 15 -314zM541 761c36 -6 73 -7 109 -7c206 0 353 58 353 289c0 195 -173 262 -340 262
c-44 0 -87 -6 -130 -13c0 -101 8 -202 8 -303c0 -53 -1 -106 -1 -159c0 -23 0 -46 1 -69zM0 -128l2 94c64 16 129 17 191 43c35 59 30 163 30 230c0 22 2 978 -22 1025c-15 29 -162 36 -195 40l-4 83c238 4 476 21 713 21c45 0 91 -1 136 -1c226 0 475 -108 475 -368
c0 -179 -136 -246 -277 -310c190 -43 359 -172 359 -382c0 -344 -313 -458 -606 -458c-88 0 -176 6 -264 6c-179 0 -360 -16 -538 -23z" />
+ <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896"
+d="M885 970c11 -12 14 -29 7 -44l-540 -1157c-8 -15 -24 -25 -42 -25c-4 0 -9 1 -14 2c-22 7 -35 28 -30 49l197 808l-406 -101c-4 -1 -8 -1 -12 -1c-11 0 -23 4 -31 11c-12 10 -16 25 -13 39l201 825c5 19 23 32 44 32h328c25 0 45 -19 45 -42c0 -6 -2 -12 -5 -18
+l-171 -463l396 98c4 1 8 2 12 2c13 0 25 -6 34 -15z" />
+ <glyph glyph-name="bomb" unicode="&#xf1e2;" horiz-adv-x="1792"
+d="M571 947c-13 33 -50 48 -83 35c-144 -58 -260 -174 -318 -318c-13 -33 2 -70 35 -83c8 -3 16 -5 24 -5c26 0 49 15 60 40c45 112 135 202 247 247c33 14 49 51 35 84zM1513 1303l46 -46l-244 -243l68 -68c25 -25 25 -66 0 -91l-64 -64c56 -101 89 -218 89 -343
+c0 -389 -315 -704 -704 -704s-704 315 -704 704s315 704 704 704c125 0 242 -33 343 -89l64 64c25 25 66 25 91 0l68 -68zM1521 1359c-6 -6 -14 -10 -22 -10c-9 0 -17 4 -23 10l-91 90c-12 13 -12 33 0 46c13 12 33 12 46 0l90 -91c13 -12 13 -33 0 -45zM1751 1129
+c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-90 91c-13 12 -13 33 0 45c12 13 33 13 45 0l91 -90c12 -13 12 -33 0 -46zM1792 1312c0 -18 -14 -32 -32 -32h-96c-18 0 -32 14 -32 32s14 32 32 32h96c18 0 32 -14 32 -32zM1600 1504v-96c0 -18 -14 -32 -32 -32s-32 14 -32 32v96
+c0 18 14 32 32 32s32 -14 32 -32zM1751 1449l-91 -90c-6 -6 -14 -10 -22 -10c-9 0 -17 4 -23 10c-13 12 -13 33 0 45l90 91c13 12 33 12 46 0c12 -13 12 -33 0 -46z" />
+ <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664"
+d="M1639 1058c25 -36 32 -83 18 -129l-275 -906c-25 -85 -113 -151 -199 -151h-923c-102 0 -211 81 -248 185c-16 45 -16 89 -2 127c2 20 6 40 7 64c1 16 -8 29 -6 41c4 24 25 41 41 68c30 50 64 131 75 183c5 19 -5 41 0 58c5 19 24 33 34 51c27 46 62 135 67 182
+c2 21 -8 44 -2 60c7 23 29 33 44 53c24 33 64 128 70 181c2 17 -8 34 -5 52c4 19 28 39 44 62c42 62 50 199 177 163l-1 -3c17 4 34 9 51 9h761c47 0 89 -21 114 -56c26 -36 32 -83 18 -130l-274 -906c-47 -154 -73 -188 -200 -188h-869c-13 0 -29 -3 -38 -15
+c-8 -12 -9 -21 -1 -43c20 -58 89 -70 144 -70h923c37 0 80 21 91 57l300 987c6 19 6 39 5 57c23 -9 44 -23 59 -43zM575 1056c-6 -18 4 -32 22 -32h608c17 0 36 14 42 32l21 64c6 18 -4 32 -22 32h-608c-17 0 -36 -14 -42 -32zM492 800c-6 -18 4 -32 22 -32h608
+c17 0 36 14 42 32l21 64c6 18 -4 32 -22 32h-608c-17 0 -36 -14 -42 -32z" />
+ <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280"
+d="M1164 1408c15 0 30 -3 44 -9c44 -17 72 -58 72 -103v-1289c0 -45 -28 -86 -72 -103c-14 -6 -29 -8 -44 -8c-31 0 -60 11 -83 32l-441 424l-441 -424c-23 -21 -52 -33 -83 -33c-15 0 -30 3 -44 9c-44 17 -72 58 -72 103v1289c0 45 28 86 72 103c14 6 29 9 44 9h1048z" />
+ <glyph glyph-name="bookmark-o" unicode="&#xf097;" horiz-adv-x="1280"
+d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408c15 0 30 -3 44 -9c44 -17 72 -58 72 -103v-1289c0 -45 -28 -86 -72 -103c-14 -6 -29 -8 -44 -8c-31 0 -60 11 -83 32l-441 424l-441 -424c-23 -21 -52 -33 -83 -33c-15 0 -30 3 -44 9
+c-44 17 -72 58 -72 103v1289c0 45 28 86 72 103c14 6 29 9 44 9h1048z" />
+ <glyph glyph-name="bootstrap" unicode="&#xf315;"
+d="M256 1408h1024c141 0 256 -115 256 -256v-1024c0 -141 -115 -256 -256 -256h-1024c-141 0 -256 115 -256 256v1024c0 141 115 256 256 256zM494 1020v-795h310c169 0 270 83 270 223c0 106 -69 182 -177 196v4c77 14 137 91 137 174c0 119 -93 198 -229 198h-311z
+M593 933h190c97 0 150 -44 150 -123c0 -86 -64 -133 -181 -133h-159v256zM593 592v0h187c127 0 192 -47 192 -139s-63 -141 -183 -141h-196v280z" />
+ <glyph glyph-name="braille" unicode="&#xf2a1;" horiz-adv-x="2176"
+d="M192 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM704 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM704 864c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160z
+M1472 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM1984 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM1472 864c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160z
+M1984 864c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM1984 1376c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM384 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192z
+M896 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM384 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM896 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192z
+M384 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM896 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192
+zM2176 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM2176 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192
+s192 -86 192 -192zM1664 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM2176 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192z" />
+ <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792"
+d="M640 1280h512v128h-512v-128zM1792 640v-480c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v480h672v-160c0 -35 29 -64 64 -64h320c35 0 64 29 64 64v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384c0 88 72 160 160 160h352v160
+c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h352c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1202"
+d="M1111 896c13 -133 -43 -213 -131 -258c146 -35 238 -122 220 -317c-23 -243 -203 -308 -461 -322v-255h-154v251c-39 0 -80 0 -122 1v-252h-154v255c-36 0 -72 1 -109 1h-200l31 183c113 -2 111 0 111 0c43 0 55 31 58 51v402h16c-6 1 -12 1 -16 1v287
+c-6 32 -26 68 -89 68c0 0 2 2 -111 0v164l212 -1c31 0 64 0 97 1v252h154v-247c41 1 82 2 122 2v245h154v-252c198 -17 355 -78 372 -260zM896 351c0 198 -326 169 -430 169v-338c104 0 430 -22 430 169zM825 827c0 181 -272 154 -359 154v-307c87 0 359 -20 359 153z" />
+ <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1600"
+d="M1600 576c0 -35 -29 -64 -64 -64h-224c0 -125 -27 -219 -67 -290l208 -209c25 -25 25 -65 0 -90c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-198 197s-131 -120 -301 -120v896h-128v-896c-181 0 -313 132 -313 132l-183 -207c-13 -14 -30 -21 -48 -21c-15 0 -30 5 -43 16
+c-26 24 -28 64 -5 91l202 227c-35 69 -58 158 -58 274h-224c-35 0 -64 29 -64 64s29 64 64 64h224v294l-173 173c-25 25 -25 65 0 90s65 25 90 0l173 -173h844l173 173c25 25 65 25 90 0s25 -65 0 -90l-173 -173v-294h224c35 0 64 -29 64 -64zM1120 1152h-640
+c0 177 143 320 320 320s320 -143 320 -320z" />
+ <glyph glyph-name="building" unicode="&#xf1ad;" horiz-adv-x="1408"
+d="M1344 1536c35 0 64 -29 64 -64v-1664c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v1664c0 35 29 64 64 64h1280zM512 1248v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM512 992v-64c0 -18 14 -32 32 -32h64
+c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM512 736v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM512 480v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64
+c-18 0 -32 -14 -32 -32zM384 160v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 416v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 672v64
+c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 928v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 1184v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64
+c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM896 -96v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM896 416v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32z
+M896 672v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM896 928v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM896 1184v64c0 18 -14 32 -32 32h-64
+c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 160v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 416v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64
+c18 0 32 14 32 32zM1152 672v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 928v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 1184v64c0 18 -14 32 -32 32
+h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32z" />
+ <glyph glyph-name="building-o" unicode="&#xf0f7;" horiz-adv-x="1408"
+d="M384 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 480v-64c0 -17 -15 -32 -32 -32h-64
+c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64
+c17 0 32 -15 32 -32zM896 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 992v-64
+c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64
+c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 992v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 736
+v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 992v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32
+v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 992v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32z
+M1152 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 -128h384v1536h-1152v-1536h384v224c0 17 15 32 32 32h320c17 0 32 -15 32 -32v-224zM1408 1472v-1664c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64
+v1664c0 35 29 64 64 64h1280c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792"
+d="M1664 896c71 0 128 -57 128 -128s-57 -128 -128 -128v-384c0 -70 -58 -128 -128 -128c-178 148 -465 351 -812 380c-119 -40 -160 -179 -82 -259c-70 -115 20 -196 126 -279c-62 -122 -320 -124 -412 -39c-58 178 -144 356 -74 581h-122c-88 0 -160 72 -160 160v192
+c0 88 72 160 160 160h480c384 0 704 224 896 384c70 0 128 -58 128 -128v-384zM1536 292v954c-261 -200 -514 -315 -768 -343v-270c254 -28 507 -141 768 -341z" />
+ <glyph glyph-name="bullseye" unicode="&#xf140;"
+d="M1024 640c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM1152 640c0 212 -172 384 -384 384s-384 -172 -384 -384s172 -384 384 -384s384 172 384 384zM1280 640c0 -283 -229 -512 -512 -512s-512 229 -512 512s229 512 512 512
+s512 -229 512 -512zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="bunny" unicode="&#xf35f;" horiz-adv-x="1159"
+d="M540 -256c-26 1 -53 4 -78 9h-2h-4c-16 -2 -32 -4 -51 -5c-11 -1 -26 -2 -39 -2c-18 -1 -39 -1 -57 0c-108 3 -204 23 -259 55c-29 17 -46 35 -49 56c0 3 -1 5 -1 8s0 5 1 8c3 15 11 29 27 42c25 21 67 37 121 50c2 0 4 1 4 1s-1 1 -2 3c-11 19 -21 37 -29 57
+c-28 66 -41 137 -37 208c4 63 33 158 65 212c30 50 70 94 116 130c17 13 36 25 55 36c2 1 3 2 3 2s0 1 -1 2c-15 20 -27 42 -36 65c-15 39 -22 82 -18 124c3 30 10 59 22 87c4 10 12 25 17 34c1 1 1 2 1 2v1c-1 2 -6 7 -8 10c-36 48 -70 121 -96 204c-23 73 -37 150 -40 216
+v21v25c2 49 12 86 28 108c10 13 23 21 37 23c9 1 18 0 27 -4c3 -1 4 -3 7 -4c14 -7 30 -19 45 -37c19 -22 39 -53 57 -89c28 -56 52 -124 68 -194c12 -53 20 -105 22 -151v-10v0s2 1 3 1c24 8 49 13 75 14h29c38 -2 73 -11 107 -27l4 -2c2 -1 5 -3 5 -3s0 1 1 2s2 4 3 5
+c35 65 94 139 163 203c62 58 128 103 182 126c32 14 59 20 81 17c12 -1 23 -5 31 -12l6 -6c7 -8 10 -17 12 -29c1 -4 1 -6 1 -12s0 -8 -1 -13c-4 -34 -23 -78 -55 -127c-44 -68 -109 -140 -178 -198c-42 -35 -82 -62 -120 -82c-1 -1 -3 -2 -3 -2s1 0 1 -1
+c14 -30 22 -62 25 -95c1 -17 2 -35 0 -52c-5 -50 -23 -97 -53 -137c-1 -1 -2 -3 -2 -3s0 -1 1 -1c2 -1 9 -5 13 -7c23 -14 57 -40 77 -58c8 -7 18 -17 25 -25c36 -39 66 -85 87 -134c18 -42 34 -112 36 -158c0 -6 1 -17 1 -23s-1 -17 -1 -23c-2 -33 -6 -65 -15 -97
+c-11 -41 -28 -82 -50 -119l-2 -3s1 -1 3 -1c4 -1 12 -3 17 -4c49 -13 87 -30 109 -50c2 -2 5 -6 7 -8c6 -7 11 -14 14 -22c4 -13 3 -25 -3 -38c-9 -19 -32 -38 -65 -53c-57 -26 -144 -41 -239 -44c-18 -1 -38 -1 -56 0c-30 1 -60 2 -88 6l-5 1h-1c-31 -6 -66 -10 -98 -9v0z
+M557 -170c5 1 10 1 15 2c22 5 41 19 55 37c10 14 17 30 19 47c0 4 1 6 1 11s0 8 -1 13c-5 39 -32 71 -70 82c-19 5 -39 5 -58 -1c-20 -6 -37 -18 -49 -35c-8 -11 -13 -25 -16 -38c-4 -17 -2 -34 3 -51c4 -13 10 -24 19 -34l8 -8c10 -9 22 -16 35 -20c7 -2 15 -4 23 -5h3h13
+v0z" />
+ <glyph glyph-name="bus" unicode="&#xf207;"
+d="M384 320c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1408 320c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1362 716l-72 384c-6 30 -32 52 -63 52h-918c-31 0 -57 -22 -63 -52l-72 -384
+c-7 -40 23 -76 63 -76h1062c40 0 70 36 63 76zM1136 1328c0 27 -21 48 -48 48h-640c-26 0 -48 -21 -48 -48s22 -48 48 -48h640c27 0 48 21 48 48zM1536 603v-603h-128v-128c0 -71 -57 -128 -128 -128s-128 57 -128 128v128h-768v-128c0 -71 -57 -128 -128 -128
+s-128 57 -128 128v128h-128v603c0 82 7 143 25 223l103 454c19 160 299 256 640 256s621 -96 640 -256l105 -454c18 -80 23 -141 23 -223z" />
+ <glyph glyph-name="buymeacoffee" unicode="&#xf33d;" horiz-adv-x="1238"
+d="M1108 1119l-1 1l-3 1c1 -1 3 -2 4 -2v0v0zM1126 991h-1zM1109 1119h-1v0h1v0v0zM1108 1119h1v0h-1v0zM1125 991l2 2h1l1 1c-1 -1 -3 -2 -4 -3v0v0zM1112 1116v0v0c-1 0 -2 2 -3 3l1 -1zM602 -126l-2 -2l-2 -1c1 1 2 2 4 3zM898 -68v-3v-2c0 7 0 7 0 5zM868 -126
+c-1 -1 -2 -1 -3 -2l-1 -1c1 1 2 2 4 3zM394 -140v0l-1 1c-1 0 -2 0 -3 1c2 0 3 -1 4 -2zM347 -95v0v0c0 2 0 4 -1 6c1 -2 1 -4 1 -6zM662 708c57 25 107 46 169 46c36 0 68 -7 99 -18l-71 -743c-2 -28 -14 -54 -35 -73s-48 -30 -76 -30c0 0 -101 -5 -134 -5
+c-31 0 -124 5 -124 5c-28 0 -55 11 -76 30s-34 45 -36 73l-65 673c38 -11 77 -17 117 -17c95 0 168 31 232 59zM110 995l1 -1h1c-1 1 -1 1 -2 1v0v0zM1232 1057c12 -48 6 -96 -28 -132c-21 -23 -51 -33 -81 -39c-8 -1 -14 -5 -19 -11s-9 -12 -10 -20l-16 -156l-35 -340
+c-11 -104 -21 -208 -32 -312c-3 -31 -6 -63 -9 -94c-11 -109 -91 -180 -196 -199c-71 -13 -143 -10 -215 -9c-56 1 -114 3 -169 12c-95 15 -172 69 -183 169c-2 18 -3 38 -5 56c-10 96 -20 191 -30 287l-35 338l-17 163c-3 28 25 50 50 51c29 1 48 -25 51 -51
+c0 -4 1 -7 1 -11l23 -220l35 -340c6 -61 13 -123 19 -184c5 -46 11 -100 46 -134c40 -39 104 -43 156 -43c49 0 98 -2 147 -2c44 0 88 6 131 16c47 11 79 39 88 87c6 30 6 62 9 93s7 62 10 93c11 110 23 221 34 331c11 105 21 210 32 315l6 52c1 5 0 11 -2 16s-5 10 -9 14
+s-8 6 -13 8s-11 3 -16 2c-17 -2 -35 -3 -52 -5c-211 -20 -424 -17 -635 9c-54 7 -107 14 -160 24c-57 10 -96 56 -102 112c-3 26 5 54 10 79s9 51 20 75c11 22 28 40 50 52c26 14 55 17 84 12c24 -4 49 -8 73 -12l21 -3c3 0 19 -2 10 -1c11 -1 23 -4 34 -5
+c105 -12 211 -18 317 -18c27 0 52 0 79 1c52 1 105 4 157 8c26 2 52 5 78 8c13 1 27 3 40 5h4l4 1v0c2 0 5 1 7 2s4 3 5 5s3 5 3 7s1 5 0 7c-7 32 -14 65 -21 97v0l-3 14c-2 11 -4 22 -8 32c-13 32 -51 35 -80 41c-20 4 -39 7 -59 10l-7 1c-3 0 -8 2 -11 2c-9 1 -17 2 -26 3
+c-41 4 -83 7 -124 8c-85 3 -171 0 -256 -9c-10 -1 -19 -3 -29 -4v0c-5 -1 -11 -1 -16 -2c-16 -2 -31 -6 -47 -9v0c-2 0 -4 -2 -5 -3s-2 -3 -2 -5s1 -4 2 -5s3 -3 5 -3c18 -4 36 -7 54 -10l9 -1h1l9 -1l27 -3c20 -2 39 -4 59 -5c44 -3 87 -4 131 -4s89 1 133 4
+c20 1 40 4 60 6c10 1 18 2 28 3h3c4 1 9 1 13 2c28 4 53 -6 62 -35c8 -24 -10 -58 -36 -62c-22 -3 -45 -7 -67 -9c-90 -10 -181 -13 -272 -9c-82 3 -165 10 -245 28c-29 6 -57 15 -84 27c-21 9 -40 23 -52 43c-16 28 -9 63 13 86c18 18 43 28 67 37c65 24 137 31 205 37
+c92 8 184 10 276 5c77 -4 155 -11 230 -31c16 -4 32 -8 47 -14c30 -12 60 -29 74 -59c11 -22 15 -50 19 -74c5 -28 9 -57 14 -85c3 -15 6 -31 17 -42s28 -13 43 -18c46 -16 65 -58 74 -103zM101 1023v-5c0 3 -1 5 0 5zM104 1001l2 -2l-2 2v0v0zM107 997v0v0c2 -3 1 -2 0 0z
+M113 992v0h1h-1v0v0zM1122 999v0v0c8 7 12 18 13 28c2 24 0 51 -12 72c-18 31 -51 21 -81 16c-33 -6 -67 -11 -101 -16c-184 -25 -372 -27 -557 -10c-43 4 -87 8 -130 15c-36 5 -78 21 -114 17c-23 -3 -31 -29 -35 -48c-4 -21 -12 -57 4 -75c9 -9 23 -11 36 -13
+c129 -18 258 -33 388 -37c182 -6 366 7 546 34c16 2 32 7 43 17z" />
+ <glyph glyph-name="buysellads" unicode="&#xf20d;"
+d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960c0 -158 -130 -288 -288 -288h-960c-158 0 -288 130 -288 288v960c0 158 130 288 288 288h960c158 0 288 -130 288 -288z" />
+ <glyph glyph-name="c" unicode="&#xf31c;" horiz-adv-x="1404"
+d="M996 819c0 0 -23 211 -232 217s-317 -157 -317 -392s119 -423 323 -423s226 235 226 235l391 -24s22 -211 -141 -373s-364 -188 -504 -187s-334 -2 -522 190s-220 379 -220 563s36 427 259 611c152 125 306 172 460 172c643 0 685 -593 685 -593l-408 4v0z" />
+ <glyph glyph-name="calculator" unicode="&#xf1ec;" horiz-adv-x="1664"
+d="M384 0c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM768 0c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM384 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1152 0
+c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM768 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM384 768c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1152 384
+c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM768 768c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1536 0v384c0 70 -58 128 -128 128s-128 -58 -128 -128v-384c0 -70 58 -128 128 -128s128 58 128 128z
+M1152 768c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1536 1088v256c0 35 -29 64 -64 64h-1280c-35 0 -64 -29 -64 -64v-256c0 -35 29 -64 64 -64h1280c35 0 64 29 64 64zM1536 768c0 71 -57 128 -128 128s-128 -57 -128 -128
+s57 -128 128 -128s128 57 128 128zM1664 1408v-1536c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1536c0 70 58 128 128 128h1408c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664"
+d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
+M512 1088v288c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-288c0 -17 15 -32 32 -32h64c17 0 32 15 32 32zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-288
+c0 -17 15 -32 32 -32h64c17 0 32 15 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128
+c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="calendar-check-o" unicode="&#xf274;" horiz-adv-x="1664"
+d="M1303 572l-512 -512c-13 -12 -33 -12 -46 0l-288 288c-12 13 -12 33 0 45l46 46c12 12 32 12 45 0l220 -220l444 444c13 12 33 12 45 0l46 -46c12 -12 12 -32 0 -45zM128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288
+c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96
+c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="calendar-minus-o" unicode="&#xf272;" horiz-adv-x="1664"
+d="M1152 416v-64c0 -18 -14 -32 -32 -32h-576c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h576c18 0 32 -14 32 -32zM128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088
+v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96
+c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="calendar-o" unicode="&#xf133;" horiz-adv-x="1664"
+d="M128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1664 1152
+v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="calendar-plus-o" unicode="&#xf271;" horiz-adv-x="1664"
+d="M1536 1280c70 0 128 -58 128 -128v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128zM1152 1376v-288
+c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM384 1376v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM1536 -128v1024h-1408v-1024h1408zM896 448h224
+c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-224c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v224c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-224z" />
+ <glyph glyph-name="calendar-times-o" unicode="&#xf273;" horiz-adv-x="1664"
+d="M1111 151l-46 -46c-12 -12 -32 -12 -45 0l-188 189l-188 -189c-13 -12 -33 -12 -45 0l-46 46c-12 12 -12 32 0 45l189 188l-189 188c-12 13 -12 33 0 45l46 46c12 12 32 12 45 0l188 -188l188 188c13 12 33 12 45 0l46 -46c12 -12 12 -32 0 -45l-188 -188l188 -188
+c12 -13 12 -33 0 -45zM128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64
+c18 0 32 14 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z
+" />
+ <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920"
+d="M960 864c159 0 288 -129 288 -288s-129 -288 -288 -288s-288 129 -288 288s129 288 288 288zM1664 1280c141 0 256 -115 256 -256v-896c0 -141 -115 -256 -256 -256h-1408c-141 0 -256 115 -256 256v896c0 141 115 256 256 256h224l51 136c25 66 103 120 173 120h512
+c70 0 148 -54 173 -120l51 -136h224zM960 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
+ <glyph glyph-name="camera-retro" unicode="&#xf083;" horiz-adv-x="1792"
+d="M928 704c0 18 -14 32 -32 32c-88 0 -160 -72 -160 -160c0 -18 14 -32 32 -32s32 14 32 32c0 53 43 96 96 96c18 0 32 14 32 32zM1152 574c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM128 0h1536v128h-1536v-128zM1280 574
+c0 212 -172 384 -384 384s-384 -172 -384 -384s172 -384 384 -384s384 172 384 384zM256 1216h384v128h-384v-128zM128 1024h1536v256h-828l-64 -128h-644v-128zM1792 1280v-1280c0 -71 -57 -128 -128 -128h-1536c-71 0 -128 57 -128 128v1280c0 71 57 128 128 128h1536
+c71 0 128 -57 128 -128z" />
+ <glyph glyph-name="car" unicode="&#xf1b9;" horiz-adv-x="2048"
+d="M480 448c0 88 -72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160s160 72 160 160zM516 768h1016l-89 357c-3 11 -23 27 -35 27h-768c-12 0 -32 -16 -35 -27zM1888 448c0 88 -72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160s160 72 160 160zM2048 544v-384
+c0 -18 -14 -32 -32 -32h-96v-128c0 -106 -86 -192 -192 -192s-192 86 -192 192v128h-1024v-128c0 -106 -86 -192 -192 -192s-192 86 -192 192v128h-96c-18 0 -32 14 -32 32v384c0 124 100 224 224 224h28l105 419c31 126 153 221 283 221h768c130 0 252 -95 283 -221
+l105 -419h28c124 0 224 -100 224 -224z" />
<glyph glyph-name="caret-down" unicode="&#xf0d7;" horiz-adv-x="1024"
d="M1024 832c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-448 448c-12 12 -19 28 -19 45c0 35 29 64 64 64h896c35 0 64 -29 64 -64z" />
- <glyph glyph-name="chevron-left" unicode="&#xf053;" horiz-adv-x="1036"
-d="M1017 1235l-531 -531l531 -531c25 -25 25 -65 0 -90l-166 -166c-25 -25 -65 -25 -90 0l-742 742c-25 25 -25 65 0 90l742 742c25 25 65 25 90 0l166 -166c25 -25 25 -65 0 -90z" />
- <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1152"
-d="M1152 960c0 -296 -224 -540 -512 -572v-260h224c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-224c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v260c-303 33 -535 302 -510 619
-c22 272 238 495 508 525c348 39 642 -232 642 -572zM128 960c0 -247 201 -448 448 -448s448 201 448 448s-201 448 -448 448s-448 -201 -448 -448z" />
- <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664"
-d="M725 977l-170 -450c99 -1 198 -4 297 -4c19 0 38 1 57 2c-52 152 -113 307 -184 452zM0 -128l2 79c94 29 196 9 238 117l237 616l280 724h128c4 -7 8 -14 11 -21l205 -480c75 -177 144 -356 220 -532c45 -104 80 -211 130 -313c7 -16 21 -46 35 -57
-c33 -26 125 -32 172 -50c3 -19 6 -38 6 -57c0 -9 -1 -17 -1 -26c-127 0 -254 16 -381 16c-131 0 -262 -11 -393 -15c0 26 1 52 4 78l131 28c27 6 80 13 80 50c0 36 -129 333 -145 374l-450 2c-26 -58 -127 -320 -127 -358c0 -77 147 -80 204 -88c1 -19 1 -38 1 -58
-c0 -9 -1 -18 -2 -27c-116 0 -233 20 -349 20c-14 0 -34 -6 -48 -8c-63 -11 -125 -14 -188 -14z" />
- <glyph glyph-name="pinterest" unicode="&#xf0d2;"
-d="M1536 640c0 -424 -344 -768 -768 -768c-76 0 -148 11 -218 32c29 46 62 105 78 164c0 0 9 34 54 211c26 -51 104 -96 187 -96c247 0 415 225 415 527c0 227 -193 440 -487 440c-364 0 -548 -262 -548 -480c0 -132 50 -250 157 -294c17 -7 33 0 38 20c4 13 12 47 16 61
-c5 20 3 26 -11 43c-31 37 -51 84 -51 151c0 194 145 368 378 368c206 0 320 -126 320 -295c0 -221 -98 -408 -244 -408c-80 0 -140 66 -121 148c23 97 68 202 68 272c0 63 -34 116 -104 116c-82 0 -148 -85 -148 -199c0 0 0 -73 25 -122c-84 -356 -99 -418 -99 -418
-c-14 -58 -15 -123 -13 -177c-271 119 -460 389 -460 704c0 424 344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="caret-left" unicode="&#xf0d9;" horiz-adv-x="576"
+d="M576 1088v-896c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-448 448c-12 12 -19 28 -19 45s7 33 19 45l448 448c12 12 28 19 45 19c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="caret-right" unicode="&#xf0da;" horiz-adv-x="576"
+d="M576 640c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v896c0 35 29 64 64 64c17 0 33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
+ <glyph glyph-name="caret-square-o-down" unicode="&#xf150;"
+d="M1145 861c11 -21 9 -47 -5 -66l-320 -448c-12 -17 -31 -27 -52 -27s-40 10 -52 27l-320 448c-14 19 -16 45 -5 66c11 22 33 35 57 35h640c24 0 46 -13 57 -35zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960
+c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="caret-square-o-left" unicode="&#xf191;"
+d="M1024 960v-640c0 -35 -29 -64 -64 -64c-13 0 -26 4 -37 12l-448 320c-17 12 -27 31 -27 52c0 20 10 40 27 52l448 320c11 8 24 12 37 12c35 0 64 -29 64 -64zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960
+c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="caret-square-o-right" unicode="&#xf152;"
+d="M1088 640c0 -21 -10 -40 -27 -52l-448 -320c-19 -14 -45 -16 -66 -5c-22 11 -35 33 -35 57v640c0 24 13 46 35 57c21 11 47 9 66 -5l448 -320c17 -12 27 -31 27 -52zM1280 160v960c0 18 -14 32 -32 32h-960c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h960
+c18 0 32 14 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="caret-square-o-up" unicode="&#xf151;"
+d="M1145 419c-11 -22 -33 -35 -57 -35h-640c-24 0 -46 13 -57 35c-11 21 -9 47 5 66l320 448c12 17 31 27 52 27s40 -10 52 -27l320 -448c14 -19 16 -45 5 -66zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960c17 0 32 15 32 32
+zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="caret-up" unicode="&#xf0d8;" horiz-adv-x="1024"
+d="M1024 320c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
+ <glyph glyph-name="cart-arrow-down" unicode="&#xf218;" horiz-adv-x="1664"
+d="M1280 832c0 35 -29 64 -64 64c-17 0 -33 -7 -45 -19l-147 -146v293c0 35 -29 64 -64 64s-64 -29 -64 -64v-293l-147 146c-12 12 -28 19 -45 19c-35 0 -64 -29 -64 -64c0 -17 7 -33 19 -45l256 -256c12 -12 28 -19 45 -19s33 7 45 19l256 256c12 12 19 28 19 45zM640 0
+c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1536 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1664 1088v-512c0 -32 -24 -60 -57 -64l-1044 -122c4 -22 13 -47 13 -70s-14 -44 -24 -64h920
+c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64c0 31 47 108 61 137l-177 823h-204c-35 0 -64 29 -64 64s29 64 64 64h256c68 0 69 -80 79 -128h1201c35 0 64 -29 64 -64z" />
<glyph glyph-name="cart-plus" unicode="&#xf217;" horiz-adv-x="1664"
d="M1216 832c0 35 -29 64 -64 64h-128v128c0 35 -29 64 -64 64s-64 -29 -64 -64v-128h-128c-35 0 -64 -29 -64 -64s29 -64 64 -64h128v-128c0 -35 29 -64 64 -64s64 29 64 64v128h128c35 0 64 29 64 64zM640 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
s128 -57 128 -128zM1536 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1664 1088v-512c0 -32 -24 -60 -57 -64l-1044 -122c4 -22 13 -47 13 -70s-14 -44 -24 -64h920c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64
c0 31 47 108 61 137l-177 823h-204c-35 0 -64 29 -64 64s29 64 64 64h256c68 0 69 -80 79 -128h1201c35 0 64 -29 64 -64z" />
- <glyph glyph-name="folder-open-o" unicode="&#xf115;" horiz-adv-x="1909"
-d="M1781 605c0 28 -31 35 -53 35h-1088c-53 0 -123 -33 -157 -74l-294 -363c-9 -12 -18 -25 -18 -40c0 -28 31 -35 53 -35h1088c53 0 123 33 157 75l294 363c9 11 18 24 18 39zM640 768h768v160c0 53 -43 96 -96 96h-576c-53 0 -96 43 -96 96v64c0 53 -43 96 -96 96h-320
-c-53 0 -96 -43 -96 -96v-853l256 315c58 71 165 122 256 122zM1909 605c0 -44 -19 -86 -46 -120l-295 -363c-57 -70 -166 -122 -256 -122h-1088c-123 0 -224 101 -224 224v960c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h544c123 0 224 -101 224 -224v-160h192
-c68 0 136 -31 166 -95c10 -21 15 -44 15 -68z" />
- <glyph glyph-name="tachometer" unicode="&#xf0e4;" horiz-adv-x="1792"
-d="M384 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM576 832c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1004 351l101 382c8 34 -12 69 -46 78s-69 -12 -78 -46l-101 -382
-c-79 -6 -148 -61 -170 -142c-27 -103 35 -208 137 -235c103 -27 208 35 235 137c21 81 -13 163 -78 208zM1664 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1024 1024c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128
-s128 57 128 128zM1472 832c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1792 384c0 -172 -49 -338 -141 -483c-12 -18 -32 -29 -54 -29h-1402c-22 0 -42 11 -54 29c-92 144 -141 311 -141 483c0 494 402 896 896 896s896 -402 896 -896z
+ <glyph glyph-name="cc" unicode="&#xf20a;" horiz-adv-x="2048"
+d="M785 528h207c-19 -211 -140 -339 -313 -339c-216 0 -347 166 -347 432c0 264 144 429 326 429c200 0 312 -124 329 -334h-203c-7 85 -49 134 -117 134c-75 0 -120 -80 -120 -238c0 -115 20 -223 129 -223c69 0 101 60 109 139zM1497 528h206
+c-19 -211 -139 -339 -312 -339c-216 0 -347 166 -347 432c0 264 144 429 326 429c200 0 312 -124 329 -334h-204c-6 85 -49 134 -116 134c-75 0 -120 -80 -120 -238c0 -115 19 -223 128 -223c69 0 102 60 110 139zM1856 647c0 268 -14 384 -76 468c-13 17 -34 28 -51 40
+c-63 46 -356 63 -697 63s-648 -17 -710 -63c-18 -13 -40 -23 -53 -40c-62 -83 -75 -200 -75 -468c0 -269 14 -385 75 -468c14 -19 35 -27 53 -41c62 -46 369 -65 710 -65s634 18 697 65c17 13 39 21 51 41c63 82 76 199 76 468zM2048 1408v-1536h-2048v1536h2048z" />
+ <glyph glyph-name="cc-amex" unicode="&#xf1f3;" horiz-adv-x="2304"
+d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453c0 24 -18 33 -40 33h-84v-69h83c23 0 41 11 41 36zM1475 457c0 25 -22 29 -42 29h-82v-61h81c22 0 43 5 43 32zM1197 923c0 25 -22 29 -42 29h-82v-60h81
+c22 0 43 5 43 31zM1656 854h89l-44 108zM699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453c0 -109 -119 -91 -193 -91v-91h-126l-80 90l-83 -90h-256v271h260l80 -89l82 89h207
+c61 0 109 -21 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229c0 -73 -59 -134 -132 -134h-2040c-73 0 -132 61 -132 134v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1c9 0 10 -7 10 -14v-86h279v23
+c65 -34 154 -23 222 -23l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249c-37 0 -76 -4 -109 -22v22h-172v-22c-20 18 -47 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391c0 73 59 134 132 134h2040c73 0 132 -61 132 -134
+v-678h-120c-28 0 -58 -5 -81 -22v22h-177c-25 0 -59 -4 -78 -22v22h-316v-22c-24 17 -59 22 -87 22h-209v-22c-21 20 -64 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21c30 0 61 1 90 13v-102h174v99h8c10 0 12 -1 12 -12v-87h529c29 0 65 6 88 24
+v-24h168c32 0 66 3 95 17zM1546 469c0 -30 -16 -60 -46 -72c36 -13 43 -37 43 -72v-54h-65v45c0 46 -15 54 -58 54h-69v-99h-65v271h154c51 0 106 -9 106 -73zM1269 936c0 -31 -17 -61 -46 -73c37 -13 43 -36 43 -72v-53h-65c-1 58 14 98 -58 98h-70v-98h-64v271l153 -1
+c52 0 107 -8 107 -72zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357c0 -64 -44 -86 -102 -86h-126v58h126c16 0 34 4 34 25c0 58 -167 -22 -167 107c0 55 42 81 92 81h130v-57h-119c-17 0 -36 -3 -36 -25
+c0 -59 168 27 168 -103zM2304 407v-101c-19 -28 -56 -35 -88 -35h-125v58h125c16 0 33 5 33 25c0 57 -167 -22 -167 107c0 55 43 81 93 81h129v-57h-118c-18 0 -36 -3 -36 -25c0 -48 113 1 154 -53zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75
+c-89 0 -129 46 -129 133c0 91 41 138 133 138h63v-59c-68 1 -130 16 -130 -77c0 -46 11 -78 63 -78h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+ <glyph glyph-name="cc-by" unicode="&#xf33e;" horiz-adv-x="1792"
+d="M894 1536c252 0 464 -86 637 -259c174 -174 261 -386 261 -637c0 -252 -85 -462 -256 -629c-181 -178 -396 -267 -642 -267c-242 0 -452 88 -630 264c-176 176 -264 387 -264 632s88 458 264 637c173 173 383 259 630 259zM898 1374c-204 0 -376 -71 -517 -214
+c-146 -149 -219 -323 -219 -520c0 -198 72 -370 217 -515s318 -218 519 -218c199 0 373 73 521 219c141 135 211 307 211 514c0 204 -71 377 -214 520s-315 214 -518 214zM1138 862v-366h-103v-435h-278v435h-103v366c0 16 6 30 17 41s25 17 41 17h368c15 0 28 -6 40 -17
+s18 -25 18 -41zM771 1093c0 84 42 126 125 126s125 -42 125 -126c0 -83 -42 -125 -125 -125s-125 42 -125 125z" />
+ <glyph glyph-name="cc-cc" unicode="&#xf33f;" horiz-adv-x="1792"
+d="M894 1536c251 0 464 -87 640 -262c84 -84 148 -181 192 -289s66 -223 66 -345c0 -123 -22 -238 -65 -345s-107 -202 -191 -284c-87 -86 -187 -152 -298 -198s-226 -69 -344 -69s-232 23 -340 68s-205 111 -291 197s-151 182 -196 290s-67 222 -67 341
+c0 118 23 233 68 342s112 207 198 293c171 174 379 261 628 261v0zM898 1374c-205 0 -377 -71 -517 -214c-70 -71 -125 -152 -163 -241s-56 -182 -56 -279c0 -96 18 -189 56 -278s93 -168 163 -238s149 -123 238 -160s182 -55 279 -55c96 0 189 19 279 56s171 91 244 161
+c140 137 209 308 209 514c0 99 -18 193 -54 282s-89 167 -158 236c-144 144 -317 216 -520 216zM886 789l-120 -63c-13 27 -28 45 -47 56s-36 16 -52 16c-80 0 -120 -52 -120 -158c0 -48 11 -86 31 -115s50 -43 89 -43c52 0 90 25 111 76l110 -56c-23 -44 -56 -78 -98 -103
+s-87 -37 -137 -37c-80 0 -145 24 -194 73s-73 118 -73 205c0 85 24 153 74 203s112 75 188 75c111 0 190 -43 238 -129v0zM1403 789l-118 -63c-13 27 -28 45 -47 56s-37 16 -54 16c-80 0 -120 -52 -120 -158c0 -48 10 -86 30 -115s50 -43 90 -43c52 0 89 25 110 76l112 -56
+c-24 -44 -57 -78 -99 -103s-87 -37 -136 -37c-81 0 -146 24 -194 73c-49 49 -73 118 -73 205c0 85 24 153 74 203s112 75 188 75c111 0 190 -43 237 -129z" />
+ <glyph glyph-name="cc-diners-club" unicode="&#xf24c;" horiz-adv-x="2304"
+d="M858 295v693c-139 -54 -238 -189 -238 -347s99 -293 238 -346zM1362 641c0 158 -99 293 -238 347v-694c139 54 238 189 238 347zM1577 641c0 -323 -262 -586 -586 -586c-323 0 -586 263 -586 586c0 324 263 586 586 586c324 0 586 -262 586 -586zM1960 634
+c0 382 -319 646 -669 646h-301c-354 0 -646 -264 -646 -646c0 -349 292 -634 646 -634h301c350 0 669 285 669 634zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="cc-discover" unicode="&#xf1f2;" horiz-adv-x="2304"
+d="M313 759c0 -32 -13 -63 -36 -84c-20 -18 -47 -26 -89 -26h-17v220h17c42 0 68 -7 89 -27c23 -20 36 -51 36 -83zM2089 824c0 -34 -22 -52 -64 -52h-19v101h20c41 0 63 -17 63 -49zM380 759c0 98 -73 167 -179 167h-95v-333h95c50 0 87 11 119 38c38 32 60 79 60 128z
+M410 593h65v333h-65v-333zM730 694c0 53 -22 77 -96 104c-39 14 -50 24 -50 42c0 21 20 37 48 37c20 0 36 -8 53 -27l34 44c-28 25 -62 37 -98 37c-59 0 -104 -41 -104 -95c0 -46 21 -70 82 -92c25 -9 38 -14 45 -19c13 -8 19 -20 19 -34c0 -27 -21 -47 -50 -47
+c-31 0 -56 15 -71 44l-42 -40c30 -44 66 -64 115 -64c68 0 115 45 115 110zM1008 604v77c-26 -26 -49 -37 -78 -37c-66 0 -112 48 -112 115c0 64 48 115 109 115c31 0 54 -11 81 -38v77c-28 14 -52 20 -80 20c-98 0 -177 -77 -177 -174c0 -98 77 -174 176 -174
+c28 0 52 5 81 19zM2240 0v527c-160 -100 -723 -420 -1633 -591h1569c35 0 64 29 64 64zM1389 757c0 100 -81 181 -181 181s-181 -81 -181 -181s81 -181 181 -181s181 81 181 181zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56
+h-115v74h119v57h-184v-333zM2105 593h80l-105 140c49 10 76 43 76 94c0 63 -43 99 -118 99h-97v-333h65v133h9zM2304 1274v-1268c0 -74 -59 -134 -132 -134h-2040c-73 0 -132 60 -132 134v1268c0 74 59 134 132 134h2040c73 0 132 -60 132 -134z" />
+ <glyph glyph-name="cc-jcb" unicode="&#xf24b;" horiz-adv-x="2304"
+d="M1951 538c0 -36 -24 -62 -54 -68c-4 -1 -13 -2 -18 -2h-153v140h153c5 0 14 -1 18 -2c30 -6 54 -33 54 -68zM1933 751c0 -35 -24 -58 -53 -63c-3 -1 -10 -1 -15 -1h-139v129h139c5 0 12 -1 15 -1c29 -5 53 -29 53 -64zM728 587v308h-228v-308c0 -75 -51 -131 -143 -131
+c-78 0 -155 23 -229 59v-112c120 -33 272 -33 272 -33c254 0 328 97 328 217zM1442 403v113c-52 -27 -118 -53 -200 -59c-144 -11 -230 59 -230 183s86 194 230 183c82 -6 147 -31 200 -58v112c-107 27 -208 31 -208 31c-352 16 -452 -123 -452 -268s100 -284 452 -268
+c0 0 101 4 208 31zM2176 518c0 74 -66 122 -152 128v3c78 11 121 62 121 121c0 76 -63 120 -148 124c-6 0 -17 1 -26 1h-455v-510h491c97 0 169 52 169 133zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048
+c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="cc-mastercard" unicode="&#xf1f1;" horiz-adv-x="2304"
+d="M1119 1195c-83 55 -181 85 -281 85c-281 0 -509 -228 -509 -508c0 -281 228 -509 509 -509c100 0 198 30 281 85c-268 218 -266 629 0 847zM1152 1171c-258 -203 -259 -597 0 -799c259 202 258 596 0 799zM1185 1195c265 -218 269 -630 0 -847c83 -55 182 -85 281 -85
+c281 0 509 228 509 509c0 280 -228 508 -509 508c-100 0 -198 -30 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17zM1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-5v3h5v-1zM1947 7h3l-4 5c2 0 2 1 3 1c1 1 1 2 1 3s0 2 -1 3c-1 0 -2 1 -4 1h-6
+v-13h3v5h1zM685 75c0 24 15 43 41 43c24 0 40 -19 40 -43c0 -25 -16 -43 -40 -43c-26 0 -41 19 -41 43zM1158 119c19 0 32 -11 35 -32h-70c3 19 15 32 35 32zM1514 75c0 24 15 43 40 43s41 -19 41 -43c0 -25 -16 -43 -41 -43s-40 19 -40 43zM1786 75c0 24 16 43 41 43
+c24 0 41 -19 41 -43c0 -25 -17 -43 -41 -43c-25 0 -41 19 -41 43zM1944 3c-1 0 -2 0 -4 1c-1 0 -2 1 -3 2s-2 2 -2 3c-1 2 -1 3 -1 4c0 2 0 3 1 4c0 2 1 3 2 4s2 1 3 2c2 1 3 1 4 1c2 0 3 0 4 -1c2 -1 3 -1 4 -2s1 -2 2 -4c0 -1 1 -2 1 -4c0 -1 -1 -2 -1 -4
+c-1 -1 -1 -2 -2 -3s-2 -2 -4 -2c-1 -1 -2 -1 -4 -1zM599 7h30v85c0 32 -21 53 -54 54c-17 0 -35 -5 -47 -24c-9 15 -24 24 -45 24c-14 0 -28 -5 -39 -20v16h-30v-135h30v75c0 24 13 36 33 36s30 -13 30 -36v-75h29v75c0 24 14 36 33 36c20 0 30 -13 30 -36v-75zM765 7h29
+v135h-29v-16c-10 12 -24 20 -43 20c-38 0 -67 -30 -67 -71s29 -71 67 -71c19 0 33 7 43 20v-17zM943 48c0 24 -18 36 -47 40l-14 2c-13 2 -23 5 -23 14s9 15 25 15c18 0 34 -6 43 -11l12 24c-14 9 -33 14 -55 14c-34 0 -56 -17 -56 -44c0 -22 16 -35 47 -39l13 -2
+c17 -3 24 -7 24 -14c0 -11 -11 -17 -31 -17s-35 7 -45 14l-13 -23c16 -11 36 -17 58 -17c39 0 62 18 62 44zM1073 14l-8 25c-9 -5 -18 -7 -26 -7c-15 0 -19 9 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61c0 -31 12 -50 47 -50c12 0 27 4 36 10zM1159 146
+c-39 0 -67 -29 -67 -71c0 -43 29 -71 69 -71c20 0 39 5 55 19l-14 22c-11 -9 -26 -15 -39 -15c-19 0 -36 9 -41 33h101v12c0 42 -26 71 -64 71zM1318 146c-17 0 -28 -8 -35 -20v16h-30v-135h30v76c0 22 9 35 29 35c6 0 12 -1 18 -4l9 28c-7 3 -15 4 -21 4zM1348 75
+c0 -41 28 -71 72 -71c20 0 34 4 48 16l-14 24c-11 -8 -22 -13 -35 -12c-24 0 -41 17 -41 43s17 43 41 43c13 0 24 -4 35 -12l14 24c-14 11 -28 16 -48 16c-44 0 -72 -30 -72 -71zM1593 7h30v135h-30v-16c-9 12 -23 20 -42 20c-38 0 -68 -30 -68 -71s30 -71 68 -71
+c19 0 33 7 42 20v-17zM1726 146c-17 0 -28 -8 -35 -20v16h-29v-135h29v76c0 22 10 35 29 35c6 0 12 -1 18 -4l9 28c-6 3 -15 4 -21 4zM1866 7h29v190h-29v-71c-9 12 -23 20 -43 20c-37 0 -67 -30 -67 -71s30 -71 67 -71c20 0 34 7 43 20v-17zM1944 27c-1 0 -3 -1 -5 -1
+c-2 -1 -3 -2 -4 -3c-2 -1 -3 -3 -3 -4c-1 -2 -1 -4 -1 -6c0 -1 0 -3 1 -5c0 -1 1 -3 3 -4c1 -1 2 -2 4 -3s4 -1 5 -1c2 0 4 0 6 1c1 1 3 2 4 3s2 3 3 4c1 2 1 4 1 5c0 2 0 4 -1 6c-1 1 -2 3 -3 4s-3 2 -4 3c-2 0 -4 1 -6 1zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048
+c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="cc-nc" unicode="&#xf340;" horiz-adv-x="1792"
+d="M894 1536c252 0 464 -86 637 -259c174 -173 261 -385 261 -637s-85 -462 -256 -629c-181 -178 -396 -267 -642 -267c-243 0 -453 89 -630 266c-176 176 -264 386 -264 630c0 245 88 458 264 637c173 173 383 259 630 259zM202 882c-27 -74 -40 -155 -40 -242
+c0 -198 72 -370 217 -515c146 -144 320 -216 519 -216c202 0 375 73 521 219c52 50 93 103 123 157l-337 150c-12 -57 -41 -102 -86 -138s-99 -57 -161 -62v-137h-104v137c-99 1 -190 37 -272 107l124 125c59 -54 125 -81 200 -81c31 0 57 6 79 20s33 37 33 69
+c0 22 -8 41 -24 55l-87 36l-105 48l-143 63zM898 1376c-204 0 -376 -72 -517 -216c-35 -35 -68 -75 -99 -120l342 -154c15 47 43 85 85 113s90 44 145 47v138h104v-138c82 -4 157 -32 224 -83l-116 -120c-50 35 -102 53 -154 53c-28 0 -52 -5 -74 -16s-33 -28 -33 -54
+c0 -7 3 -16 8 -23l113 -51l79 -35l144 -64l459 -205c15 63 22 127 22 192c0 206 -71 379 -214 520c-142 144 -314 216 -518 216z" />
+ <glyph glyph-name="cc-nc-eu" unicode="&#xf341;" horiz-adv-x="1792"
+d="M1532 1276c173 -173 260 -385 260 -636s-86 -460 -256 -629c-181 -178 -394 -267 -641 -267c-244 0 -454 88 -630 264s-265 387 -265 632s89 457 265 636c172 173 382 260 630 260c251 0 464 -87 637 -260zM1420 127c50 48 90 101 122 158l-463 205h-326
+c10 -45 27 -80 49 -105c48 -54 119 -77 194 -77c69 0 139 23 171 39l36 -166c-51 -29 -138 -57 -234 -57c-147 0 -282 60 -366 171c-40 51 -70 115 -84 195h-98v106h83v26c0 15 1 30 1 45h-84v106h17l-237 105c-26 -75 -40 -154 -40 -238c0 -199 73 -370 218 -515
+s318 -217 518 -217s375 73 523 219zM837 596l-2 2l3 -2h-1zM1116 667l492 -218c15 60 22 124 22 191c0 205 -72 378 -215 520c-142 143 -315 215 -518 215s-375 -72 -516 -215c-39 -39 -72 -80 -101 -123l295 -131c15 26 31 51 50 73c86 96 206 153 347 153
+c91 0 171 -21 225 -45l-42 -171c-39 16 -101 36 -167 36c-72 0 -137 -24 -184 -81c-12 -14 -23 -32 -32 -52l103 -46h254v-106h-13z" />
+ <glyph glyph-name="cc-nc-jp" unicode="&#xf342;" horiz-adv-x="1792"
+d="M1532 1276c173 -173 260 -385 260 -636s-86 -460 -256 -629c-181 -178 -394 -267 -641 -267c-244 0 -454 88 -630 264s-265 387 -265 632s89 457 265 636c172 173 382 260 630 260c251 0 464 -87 637 -260zM1420 127c43 42 80 87 110 136l-293 130v-129h-232v-202h-223
+v202h-230v140h230v67l-20 43h-210v139h101l-459 205c-22 -69 -32 -142 -32 -218c0 -199 72 -370 217 -515s318 -217 518 -217s375 73 523 219zM1213 404l-197 88l-11 -21v-67h208zM1237 589l365 -162c19 66 28 137 28 213c0 205 -71 378 -215 520
+c-142 143 -315 215 -518 215s-375 -72 -516 -215c-44 -44 -80 -91 -111 -140l295 -132l-98 185h238l143 -310l83 -37l156 347h238l-227 -420h139v-64z" />
+ <glyph glyph-name="cc-nd" unicode="&#xf343;" horiz-adv-x="1792"
+d="M894 1536c251 0 463 -87 637 -261c174 -173 261 -384 261 -635s-85 -460 -256 -630c-180 -177 -395 -266 -642 -266c-242 0 -452 88 -630 264c-176 176 -264 387 -264 632c0 244 88 456 264 635c174 174 384 261 630 261zM898 1374c-204 0 -376 -72 -517 -216
+c-146 -148 -219 -321 -219 -518c0 -199 72 -371 217 -515c145 -145 318 -218 519 -218c199 0 373 73 521 219c141 137 211 308 211 514c0 205 -71 377 -214 518c-142 144 -314 216 -518 216v0zM1235 851v-153h-651v153h651zM1235 563v-153h-651v153h651z" />
+ <glyph glyph-name="cc-paypal" unicode="&#xf1f4;" horiz-adv-x="2304"
+d="M745 630c0 -49 -39 -86 -88 -86c-37 0 -64 21 -64 60c0 49 38 88 87 88c37 0 65 -23 65 -62zM1530 779c0 -60 -36 -72 -88 -72l-32 -1l17 107c1 7 6 11 13 11h18c34 0 72 -2 72 -45zM1881 630c0 -49 -39 -86 -87 -86c-37 0 -65 21 -65 60c0 49 38 88 87 88
+c37 0 65 -23 65 -62zM513 801c0 84 -65 112 -139 112h-160c-10 0 -20 -8 -21 -19l-65 -408c-1 -8 5 -16 13 -16h76c11 0 21 8 22 19l18 110c4 29 53 19 72 19c114 0 184 68 184 183zM822 489l41 261c1 8 -5 16 -13 16h-76c-15 0 -16 -22 -17 -33c-23 34 -57 40 -95 40
+c-98 0 -173 -86 -173 -181c0 -78 49 -129 127 -129c36 0 81 16 106 44c-2 -6 -4 -15 -4 -21c0 -9 4 -16 13 -16h69c11 0 20 8 22 19zM1269 752c0 7 -6 14 -13 14h-77c-7 0 -14 -4 -18 -10l-106 -156l-44 150c-3 9 -12 16 -22 16h-75c-7 0 -13 -7 -13 -14
+c0 -5 78 -231 85 -252c-11 -15 -82 -108 -82 -120c0 -7 6 -13 13 -13h77c7 0 14 4 18 10l255 368c2 2 2 4 2 7zM1649 801c0 84 -65 112 -139 112h-159c-11 0 -21 -8 -22 -19l-65 -408c-1 -8 5 -16 13 -16h82c8 0 14 6 16 13l18 116c4 29 53 19 72 19c114 0 184 68 184 183z
+M1958 489l41 261c1 8 -5 16 -13 16h-76c-15 0 -16 -22 -17 -33c-22 34 -56 40 -95 40c-98 0 -173 -86 -173 -181c0 -78 49 -129 127 -129c37 0 82 16 106 44c-1 -6 -4 -15 -4 -21c0 -9 4 -16 13 -16h69c11 0 20 8 22 19zM2176 898v1c0 8 -6 14 -13 14h-74
+c-6 0 -12 -5 -13 -11l-65 -416l-1 -2c0 -7 6 -14 14 -14h66c10 0 20 8 21 19zM392 764c-8 -51 -42 -57 -86 -57l-33 -1l17 107c1 7 7 11 13 11h19c45 0 79 -6 70 -60zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128
+h2048c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="cc-pd" unicode="&#xf344;" horiz-adv-x="1792"
+d="M896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM896 -88c275 0 514 154 638 379h-2l-785 349c1 -116 58 -259 195 -259c12 0 68 0 119 48l12 12l130 -159c-11 -9 -21 -18 -34 -27c-67 -47 -153 -79 -252 -79
+c-168 0 -435 100 -435 458v0c0 33 5 87 12 119l-285 127c-26 -75 -41 -156 -41 -240c0 -401 327 -728 728 -728zM1598 454c1 -1 0 -1 1 -2c16 60 25 123 25 188c0 401 -327 728 -728 728c-254 0 -479 -131 -609 -329l271 -121c71 112 193 186 364 186c73 0 184 -15 282 -99
+l-146 -150c-8 8 -17 15 -27 23c-25 17 -58 30 -98 30c-70 0 -116 -40 -145 -93z" />
+ <glyph glyph-name="cc-remix" unicode="&#xf345;" horiz-adv-x="1792"
+d="M894 1536c251 0 463 -87 637 -261c174 -173 261 -384 261 -635s-85 -460 -256 -630c-180 -177 -395 -266 -642 -266c-242 0 -452 88 -630 264c-176 176 -264 387 -264 632c0 244 88 456 264 635c174 174 384 261 630 261zM898 1374c-204 0 -376 -72 -517 -216
+c-146 -148 -219 -321 -219 -518c0 -200 72 -371 217 -515c145 -145 318 -218 519 -218c199 0 373 73 521 219c141 137 211 308 211 514c0 205 -71 377 -214 518c-142 144 -314 216 -518 216zM1482 624l17 -8v-253l-16 -8l-217 -93l-10 -3l-11 3l-469 194l-16 6l-232 -96
+l-229 100v230l215 90l-2 1v253l243 107l549 -227v-222zM1227 330v158h-1v6l-412 168v-163l412 -169v1zM1254 538l144 59l-132 56l-141 -59zM1443 400v155l-160 -67v-157z" />
+ <glyph glyph-name="cc-sa" unicode="&#xf346;" horiz-adv-x="1792"
+d="M894 1536c251 0 463 -87 637 -261c174 -173 261 -384 261 -635s-85 -460 -256 -630c-180 -177 -395 -266 -642 -266c-242 0 -452 88 -630 264c-176 176 -264 387 -264 632c0 244 88 456 264 635c174 174 384 261 630 261zM898 1374c-204 0 -376 -72 -517 -216
+c-146 -148 -219 -321 -219 -518c0 -200 72 -371 217 -515c145 -145 318 -218 519 -218c199 0 373 73 521 219c141 137 211 308 211 514c0 205 -71 377 -214 518c-142 144 -314 216 -518 216zM498 766c17 110 61 196 132 256s159 90 261 90c141 0 253 -45 336 -136
+s125 -207 125 -349c0 -138 -44 -252 -130 -343s-198 -137 -336 -137c-101 0 -188 30 -262 91s-118 148 -133 260h226c5 -109 71 -164 197 -164c63 0 114 28 152 82s57 127 57 218c0 95 -18 166 -53 216s-86 75 -152 75c-120 0 -186 -53 -201 -159h65l-177 -177l-178 177h71z
+" />
+ <glyph glyph-name="cc-share" unicode="&#xf347;" horiz-adv-x="1792"
+d="M894 1536c251 0 463 -87 637 -261c174 -173 261 -384 261 -635s-85 -460 -256 -630c-180 -177 -395 -266 -642 -266c-242 0 -452 88 -630 264c-176 176 -264 387 -264 632c0 244 88 456 264 635c174 174 384 261 630 261zM898 1374c-204 0 -376 -72 -517 -216
+c-146 -148 -219 -321 -219 -518c0 -200 72 -371 217 -515c145 -145 318 -218 519 -218c199 0 373 73 521 219c141 137 211 308 211 514c0 205 -71 377 -214 518c-142 144 -314 216 -518 216zM1262 896c14 0 26 -4 36 -14s14 -22 14 -36v-659c0 -14 -4 -25 -14 -35
+s-22 -14 -36 -14h-488c-14 0 -25 4 -35 14s-14 21 -14 35v195h-195c-14 0 -26 5 -36 15s-14 21 -14 35v659c0 13 4 24 13 33c8 9 19 15 32 17h493c14 0 25 -5 35 -15s14 -21 14 -35v-195h195v0zM578 480h147v366c0 13 4 24 13 33s18 15 30 17h202v146h-392v-562zM1214 798
+h-392v-561h392v561z" />
+ <glyph glyph-name="cc-stripe" unicode="&#xf1f5;" horiz-adv-x="2304"
+d="M1597 633c0 -46 -7 -81 -21 -106c-12 -22 -31 -35 -52 -35c-15 0 -29 3 -41 9v224c26 27 49 30 57 30c38 0 57 -42 57 -122zM2035 669h-110c4 67 22 98 56 98s52 -32 54 -98zM476 534c0 84 -51 119 -134 149c-44 16 -68 29 -68 49c0 17 14 26 38 26c46 0 92 -17 124 -33
+l18 112c-25 12 -77 32 -149 32c-51 0 -93 -13 -123 -38c-32 -26 -48 -64 -48 -109c0 -82 50 -118 132 -147c52 -19 70 -32 70 -53c0 -20 -17 -31 -48 -31c-38 0 -101 19 -142 43l-18 -113c35 -20 100 -41 168 -41c54 0 98 13 129 37c34 27 51 66 51 117zM771 749l19 111h-96
+v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219c0 -57 15 -96 44 -120c25 -20 61 -30 111 -30c39 0 62 7 79 11v118c-9 -2 -30 -7 -44 -7c-29 0 -42 16 -42 50v197h77zM1087 724v139c-10 2 -19 3 -28 3c-42 0 -76 -22 -89 -62l-10 56h-131v-471h150v306c19 23 46 31 82 31
+c8 0 16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638c0 80 -15 141 -45 179c-27 35 -64 52 -111 52c-43 0 -81 -18 -117 -56l-8 47h-132v-645l150 25v151c23 -7 47 -11 68 -11c37 0 92 10 134 56c41 44 61 112 61 202zM1278 986c0 44 -35 79 -79 79s-79 -35 -79 -79
+s35 -80 79 -80s79 36 79 80zM2176 629c0 75 -16 134 -48 176c-33 42 -82 64 -144 64c-128 0 -207 -94 -207 -246c0 -84 21 -148 63 -188c37 -37 91 -55 161 -55c64 0 123 15 160 40l-16 103c-37 -20 -80 -31 -128 -31c-29 0 -49 6 -63 19c-16 13 -25 35 -28 66h248
+c1 7 2 41 2 52zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="cc-visa" unicode="&#xf1f0;" horiz-adv-x="2304"
+d="M1975 546h-138s14 37 66 179c-1 -1 14 37 22 61l12 -55c31 -153 38 -185 38 -185zM531 611l-58 295c-8 41 -39 54 -75 54h-268l-2 -13c184 -47 335 -147 403 -336zM710 960l-162 -438l-17 89c-35 93 -120 179 -216 218l135 -510h175l261 641h-176zM849 318h166l104 642
+h-166zM1617 944c-33 13 -85 27 -149 27c-164 0 -279 -87 -280 -212c-1 -92 82 -143 145 -174c65 -31 86 -52 86 -80c0 -43 -52 -62 -99 -62c-67 0 -103 8 -156 33l-22 11l-23 -144c39 -18 110 -34 185 -34c174 -1 287 86 289 219c0 73 -45 128 -140 174
+c-58 29 -93 50 -93 80c0 27 30 55 95 55c54 1 94 -10 124 -24l15 -8zM2042 960h-128c-40 0 -70 -12 -87 -54l-246 -588h174c28 79 35 96 35 96h212s5 -22 20 -96h154zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128
+h2048c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="cc-zero" unicode="&#xf348;" horiz-adv-x="1792"
+d="M896 1156c296 0 370 -279 370 -516s-74 -516 -370 -516s-370 279 -370 516s74 516 370 516zM896 961c-152 0 -159 -217 -159 -321c0 -34 1 -78 7 -124l197 362c20 35 9 61 -12 79c-10 3 -21 4 -33 4zM1043 794l-220 -380c-31 -46 -9 -73 25 -87l9 -3c2 -1 4 -1 6 -2
+c10 -3 21 -3 33 -3c152 0 159 217 159 321c0 41 -2 98 -12 154zM894 1536c251 0 465 -87 641 -262c84 -84 148 -181 192 -290c44 -108 65 -222 65 -344c0 -123 -21 -238 -65 -346c-43 -107 -107 -201 -191 -283c-88 -86 -186 -152 -297 -198s-227 -69 -345 -69
+s-232 22 -341 67c-108 46 -205 112 -291 197c-85 86 -150 183 -195 291s-67 221 -67 341c0 118 22 232 67 341c46 110 112 209 198 295c171 174 380 260 629 260zM898 1375c-205 0 -377 -72 -517 -215c-70 -72 -125 -151 -163 -241c-37 -89 -57 -182 -57 -279
+c0 -96 20 -188 57 -278c38 -89 93 -168 163 -238c70 -69 149 -123 238 -160c89 -36 182 -55 279 -55c96 0 188 19 278 56c91 37 172 92 245 162c140 137 210 307 210 513c0 99 -19 193 -55 282s-90 168 -159 237c-144 144 -316 216 -519 216z" />
+ <glyph glyph-name="certificate" unicode="&#xf0a3;"
+d="M1376 640l138 -135c19 -18 26 -45 20 -70c-7 -25 -27 -45 -52 -51l-188 -48l53 -186c7 -25 0 -52 -19 -70c-18 -19 -45 -26 -70 -19l-186 53l-48 -188c-6 -25 -26 -45 -51 -52c-6 -1 -13 -2 -19 -2c-19 0 -38 8 -51 22l-135 138l-135 -138c-18 -19 -45 -26 -70 -20
+c-26 7 -45 27 -51 52l-48 188l-186 -53c-25 -7 -52 0 -70 19c-19 18 -26 45 -19 70l53 186l-188 48c-25 6 -45 26 -52 51c-6 25 1 52 20 70l138 135l-138 135c-19 18 -26 45 -20 70c7 25 27 45 52 51l188 48l-53 186c-7 25 0 52 19 70c18 19 45 26 70 19l186 -53l48 188
+c6 25 26 45 51 51c25 7 52 0 70 -19l135 -139l135 139c18 19 44 26 70 19c25 -6 45 -26 51 -51l48 -188l186 53c25 7 52 0 70 -19c19 -18 26 -45 19 -70l-53 -186l188 -48c25 -6 45 -26 52 -51c6 -25 -1 -52 -20 -70z" />
+ <glyph glyph-name="chain-broken" unicode="&#xf127;" horiz-adv-x="1664"
+d="M439 265l-256 -256c-7 -6 -15 -9 -23 -9s-16 3 -23 9c-12 13 -12 33 0 46l256 256c13 12 33 12 46 0c12 -13 12 -33 0 -46zM608 224v-320c0 -18 -14 -32 -32 -32s-32 14 -32 32v320c0 18 14 32 32 32s32 -14 32 -32zM384 448c0 -18 -14 -32 -32 -32h-320
+c-18 0 -32 14 -32 32s14 32 32 32h320c18 0 32 -14 32 -32zM1648 320c0 -77 -30 -149 -85 -203l-147 -146c-54 -54 -126 -83 -203 -83s-150 30 -204 85l-334 335c-17 17 -30 36 -42 56l239 18l273 -274c36 -36 100 -37 136 -1l147 146c18 18 28 42 28 67c0 26 -10 50 -28 68
+l-274 275l18 239c20 -12 39 -25 56 -42l336 -336c54 -55 84 -127 84 -204zM1031 1044l-239 -18l-273 274c-18 18 -42 28 -68 28s-50 -10 -68 -27l-147 -146c-18 -18 -28 -42 -28 -67c0 -26 10 -50 28 -68l274 -274l-18 -240c-20 12 -39 25 -56 42l-336 336
+c-54 55 -84 127 -84 204s30 149 85 203l147 146c54 54 126 83 203 83s150 -30 204 -85l334 -335c17 -17 30 -36 42 -56zM1664 960c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32s14 32 32 32h320c18 0 32 -14 32 -32zM1120 1504v-320c0 -18 -14 -32 -32 -32
+s-32 14 -32 32v320c0 18 14 32 32 32s32 -14 32 -32zM1527 1353l-256 -256c-7 -6 -15 -9 -23 -9s-16 3 -23 9c-12 13 -12 33 0 46l256 256c13 12 33 12 46 0c12 -13 12 -33 0 -46z" />
+ <glyph glyph-name="check" unicode="&#xf00c;" horiz-adv-x="1550"
+d="M1550 970c0 -25 -10 -50 -28 -68l-724 -724l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136l-362 362c-18 18 -28 43 -28 68s10 50 28 68l136 136c18 18 43 28 68 28s50 -10 68 -28l294 -295l656 657c18 18 43 28 68 28s50 -10 68 -28l136 -136
+c18 -18 28 -43 28 -68z" />
+ <glyph glyph-name="check-circle" unicode="&#xf058;"
+d="M1284 802c0 17 -6 34 -18 46l-91 90c-12 12 -28 19 -45 19s-33 -7 -45 -19l-408 -407l-226 226c-12 12 -28 19 -45 19s-33 -7 -45 -19l-91 -90c-12 -12 -18 -29 -18 -46s6 -33 18 -45l362 -362c12 -12 29 -19 45 -19c17 0 34 7 46 19l543 543c12 12 18 28 18 45z
+M1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="check-circle-o" unicode="&#xf05d;"
+d="M1171 723l-422 -422c-25 -25 -65 -25 -90 0l-294 294c-25 25 -25 65 0 90l102 102c25 25 65 25 90 0l147 -147l275 275c25 25 65 25 90 0l102 -102c25 -25 25 -65 0 -90zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544z
+M1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="check-square" unicode="&#xf14a;"
+d="M685 237l614 614c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-467 -467l-211 211c-25 25 -65 25 -90 0l-102 -102c-25 -25 -25 -65 0 -90l358 -358c25 -25 65 -25 90 0zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960
+c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="check-square-o" unicode="&#xf046;" horiz-adv-x="1663"
+d="M1408 606v-318c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c40 0 80 -8 117 -25c9 -4 16 -13 18 -23c2 -11 -1 -21 -9 -29l-49 -49c-6 -6 -15 -10 -23 -10c-3 0 -6 1 -9 2c-15 4 -30 6 -45 6h-832
+c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v254c0 8 3 16 9 22l64 64c7 7 15 10 23 10c4 0 8 -1 12 -3c12 -5 20 -16 20 -29zM1639 1095l-814 -814c-32 -32 -82 -32 -114 0l-430 430c-32 32 -32 82 0 114l110 110c32 32 82 32 114 0
+l263 -263l647 647c32 32 82 32 114 0l110 -110c32 -32 32 -82 0 -114z" />
+ <glyph glyph-name="chevron-circle-down" unicode="&#xf13a;"
+d="M813 237l454 454c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-307 -307l-307 307c-25 25 -65 25 -90 0l-102 -102c-25 -25 -25 -65 0 -90l454 -454c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z
" />
+ <glyph glyph-name="chevron-circle-left" unicode="&#xf137;"
+d="M909 141l102 102c25 25 25 65 0 90l-307 307l307 307c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-454 -454c-25 -25 -25 -65 0 -90l454 -454c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="chevron-circle-right" unicode="&#xf138;"
+d="M717 141l454 454c25 25 25 65 0 90l-454 454c-25 25 -65 25 -90 0l-102 -102c-25 -25 -25 -65 0 -90l307 -307l-307 -307c-25 -25 -25 -65 0 -90l102 -102c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768
+s768 -344 768 -768z" />
+ <glyph glyph-name="chevron-circle-up" unicode="&#xf139;"
+d="M1165 397l102 102c25 25 25 65 0 90l-454 454c-25 25 -65 25 -90 0l-454 -454c-25 -25 -25 -65 0 -90l102 -102c25 -25 65 -25 90 0l307 307l307 -307c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z
+" />
+ <glyph glyph-name="chevron-down" unicode="&#xf078;" horiz-adv-x="1612"
+d="M1593 728l-742 -741c-25 -25 -65 -25 -90 0l-742 741c-25 25 -25 66 0 91l166 165c25 25 65 25 90 0l531 -531l531 531c25 25 65 25 90 0l166 -165c25 -25 25 -66 0 -91z" />
+ <glyph glyph-name="chevron-left" unicode="&#xf053;" horiz-adv-x="1036"
+d="M1017 1235l-531 -531l531 -531c25 -25 25 -65 0 -90l-166 -166c-25 -25 -65 -25 -90 0l-742 742c-25 25 -25 65 0 90l742 742c25 25 65 25 90 0l166 -166c25 -25 25 -65 0 -90z" />
+ <glyph glyph-name="chevron-right" unicode="&#xf054;" horiz-adv-x="1036"
+d="M1017 659l-742 -742c-25 -25 -65 -25 -90 0l-166 166c-25 25 -25 65 0 90l531 531l-531 531c-25 25 -25 65 0 90l166 166c25 25 65 25 90 0l742 -742c25 -25 25 -65 0 -90z" />
+ <glyph glyph-name="chevron-up" unicode="&#xf077;" horiz-adv-x="1612"
+d="M1593 205l-166 -165c-25 -25 -65 -25 -90 0l-531 531l-531 -531c-25 -25 -65 -25 -90 0l-166 165c-25 25 -25 66 0 91l742 741c25 25 65 25 90 0l742 -741c25 -25 25 -66 0 -91z" />
+ <glyph glyph-name="child" unicode="&#xf1ae;" horiz-adv-x="1152"
+d="M1124 988l-292 -292v-824c0 -62 -50 -112 -112 -112s-112 50 -112 112v384h-64v-384c0 -62 -50 -112 -112 -112s-112 50 -112 112v824l-292 292c-37 38 -37 98 0 136c38 37 98 37 136 0l228 -228h368l228 228c38 37 98 37 136 0c37 -38 37 -98 0 -136zM800 1152
+c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224z" />
+ <glyph glyph-name="chrome" unicode="&#xf268;" horiz-adv-x="1792"
+d="M893 1536c153 1 309 -38 451 -120c157 -91 276 -222 352 -372l-742 39c-210 12 -410 -106 -479 -304l-276 424c172 214 430 332 694 333zM146 1131l337 -663c95 -187 296 -301 504 -262l-230 -451c-429 66 -757 437 -757 885c0 181 54 350 146 491zM1732 962
+c157 -404 0 -874 -388 -1098c-157 -91 -330 -128 -498 -119l405 623c115 177 113 408 -24 568zM896 942c167 0 302 -135 302 -302s-135 -302 -302 -302s-302 135 -302 302s135 302 302 302z" />
+ <glyph glyph-name="circle" unicode="&#xf111;"
+d="M1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="circle-o" unicode="&#xf10c;"
+d="M768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="circle-o-notch" unicode="&#xf1ce;" horiz-adv-x="1728"
+d="M1728 640c0 -477 -387 -864 -864 -864s-864 387 -864 864c0 434 320 793 736 855v-228c-292 -59 -512 -318 -512 -627c0 -353 287 -640 640 -640s640 287 640 640c0 309 -220 568 -512 627v228c416 -62 736 -421 736 -855z" />
+ <glyph glyph-name="circle-thin" unicode="&#xf1db;"
+d="M768 1280c-353 0 -640 -287 -640 -640s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="classicpress" unicode="&#xf331;" horiz-adv-x="1792"
+d="M1785 1365c7 -12 9 -25 2 -37l-297 -597c-5 -10 -15 -18 -27 -20l-271 -45l124 -31c10 -3 19 -10 24 -19s7 -20 3 -30c-47 -133 -514 -546 -796 -546c-67 -3 -131 25 -173 77c-104 -157 -200 -326 -303 -508c-7 -12 -20 -19 -33 -19h-2c-6 0 -13 2 -18 5
+c-17 11 -23 33 -14 51c258 456 474 838 881 1136l9 6c17 14 36 27 54 39l10 7c42 29 85 56 131 82l17 10c17 10 36 20 55 30l18 11c24 14 48 26 73 38c17 9 24 30 16 48c-8 19 -30 27 -49 19c-370 -176 -686 -448 -915 -787c-57 308 218 555 231 567c9 8 20 10 31 8
+s22 -10 27 -20l26 -51c9 60 29 118 60 170c47 57 267 173 310 195c14 7 32 5 44 -6l39 -39l51 103c4 9 12 15 21 18c17 6 381 140 608 152c13 0 26 -6 33 -17z" />
+ <glyph glyph-name="classicpress-circle" unicode="&#xf332;" horiz-adv-x="1792"
+d="M1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896zM1398 1120v0c2 9 2 17 -5 24c-4 7 -12 9 -19 9c-128 -7 -337 -84 -346 -86c-4 -2 -9 -7 -11 -11l-29 -59l-22 22c-7 7 -15 8 -24 4c-24 -13 -150 -79 -176 -112
+c-18 -31 -31 -62 -35 -97l-13 29c-4 7 -9 9 -16 11h-5c-4 0 -9 -2 -12 -5c-7 -7 -163 -145 -130 -321c130 192 308 348 522 447c9 9 21 6 30 -3s7 -21 -2 -30c-2 -2 -7 -5 -9 -5c-15 -7 -28 -13 -41 -22l-11 -4l-31 -18l-11 -6c-26 -15 -51 -32 -75 -47l-7 -4
+c-11 -7 -20 -13 -31 -22l-4 -4c-233 -169 -354 -386 -502 -648c-4 -9 0 -21 9 -28c4 -2 7 -2 11 -2c7 0 13 4 17 11c57 103 113 198 172 288c24 -29 62 -46 99 -44c161 0 426 235 452 310c0 7 -1 14 -3 18c-2 7 -6 9 -13 11l-70 17l156 27c6 0 13 5 15 11z" />
+ <glyph glyph-name="clipboard" unicode="&#xf0ea;" horiz-adv-x="1792"
+d="M768 -128h896v640h-416c-53 0 -96 43 -96 96v416h-384v-1152zM1024 1312v64c0 17 -15 32 -32 32h-704c-17 0 -32 -15 -32 -32v-64c0 -17 15 -32 32 -32h704c17 0 32 15 32 32zM1280 640h299l-299 299v-299zM1792 512v-672c0 -53 -43 -96 -96 -96h-960
+c-53 0 -96 43 -96 96v160h-544c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1088c53 0 96 -43 96 -96v-328c13 -8 25 -17 36 -28l408 -408c38 -38 68 -111 68 -164z" />
+ <glyph glyph-name="clock-o" unicode="&#xf017;"
+d="M896 992v-448c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v352c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640
+c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="clone" unicode="&#xf24d;" horiz-adv-x="1792"
+d="M1664 -96v1088c0 17 -15 32 -32 32h-1088c-17 0 -32 -15 -32 -32v-1088c0 -17 15 -32 32 -32h1088c17 0 32 15 32 32zM1792 992v-1088c0 -88 -72 -160 -160 -160h-1088c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1088c88 0 160 -72 160 -160zM1408 1376v-160
+h-128v160c0 17 -15 32 -32 32h-1088c-17 0 -32 -15 -32 -32v-1088c0 -17 15 -32 32 -32h160v-128h-160c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1088c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920"
+d="M1920 384c0 -212 -172 -384 -384 -384h-1088c-247 0 -448 201 -448 448c0 179 106 334 258 405c-1 14 -2 29 -2 43c0 283 229 512 512 512c214 0 397 -131 474 -318c44 39 102 62 166 62c141 0 256 -115 256 -256c0 -51 -15 -98 -41 -138c170 -40 297 -192 297 -374z" />
+ <glyph glyph-name="cloud-download" unicode="&#xf0ed;" horiz-adv-x="1920"
+d="M1280 608c0 18 -14 32 -32 32h-224v352c0 17 -15 32 -32 32h-192c-17 0 -32 -15 -32 -32v-352h-224c-18 0 -32 -15 -32 -32c0 -8 3 -17 9 -23l352 -352c6 -6 14 -9 23 -9c8 0 17 3 23 9l351 351c6 7 10 15 10 24zM1920 384c0 -212 -172 -384 -384 -384h-1088
+c-247 0 -448 201 -448 448c0 174 101 332 258 405c-1 15 -2 29 -2 43c0 283 229 512 512 512c208 0 395 -126 474 -318c46 40 105 62 166 62c141 0 256 -115 256 -256c0 -49 -14 -97 -41 -138c174 -41 297 -196 297 -374z" />
+ <glyph glyph-name="cloud-upload" unicode="&#xf0ee;" horiz-adv-x="1920"
+d="M1280 672c0 8 -3 17 -9 23l-352 352c-6 6 -14 9 -23 9c-8 0 -17 -3 -23 -9l-351 -351c-6 -7 -10 -15 -10 -24c0 -18 14 -32 32 -32h224v-352c0 -17 15 -32 32 -32h192c17 0 32 15 32 32v352h224c18 0 32 15 32 32zM1920 384c0 -212 -172 -384 -384 -384h-1088
+c-247 0 -448 201 -448 448c0 174 101 332 258 405c-1 15 -2 29 -2 43c0 283 229 512 512 512c208 0 395 -126 474 -318c46 40 105 62 166 62c141 0 256 -115 256 -256c0 -49 -14 -97 -41 -138c174 -41 297 -196 297 -374z" />
+ <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1830"
+d="M572 137l-50 -50c-13 -13 -33 -13 -46 0l-466 466c-13 13 -13 33 0 46l466 466c13 13 33 13 46 0l50 -50c13 -13 13 -33 0 -46l-393 -393l393 -393c13 -13 13 -33 0 -46zM1163 1204l-373 -1291c-5 -17 -23 -27 -39 -22l-62 17c-17 5 -27 23 -22 40l373 1291
+c5 17 23 27 39 22l62 -17c17 -5 27 -23 22 -40zM1820 553l-466 -466c-13 -13 -33 -13 -46 0l-50 50c-13 13 -13 33 0 46l393 393l-393 393c-13 13 -13 33 0 46l50 50c13 13 33 13 46 0l466 -466c13 -13 13 -33 0 -46z" />
+ <glyph glyph-name="code-fork" unicode="&#xf126;" horiz-adv-x="1024"
+d="M288 64c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM288 1216c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM928 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1024 1088c0 -71 -39 -133 -96 -166
+c-3 -361 -259 -441 -429 -495c-159 -50 -211 -74 -211 -171v-26c57 -33 96 -95 96 -166c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 71 39 133 96 166v820c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192c0 -71 -39 -133 -96 -166v-497
+c51 25 105 42 154 57c186 59 292 103 294 312c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192z" />
+ <glyph glyph-name="codepen" unicode="&#xf1cb;" horiz-adv-x="1792"
+d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
+c0 -25 -13 -50 -34 -64l-819 -546c-13 -8 -28 -13 -43 -13s-30 5 -43 13l-819 546c-21 14 -34 39 -34 64v546c0 25 13 50 34 64l819 546c13 8 28 13 43 13s30 -5 43 -13l819 -546c21 -14 34 -39 34 -64z" />
+ <glyph glyph-name="codiepie" unicode="&#xf284;" horiz-adv-x="1723"
+d="M1584 246l-218 111c-98 -160 -272 -258 -460 -258c-298 0 -539 241 -539 538c0 298 241 539 539 539c175 0 339 -85 440 -229l215 125c-147 226 -396 361 -665 361c-438 0 -793 -355 -793 -793s355 -793 793 -793c284 0 547 152 688 399zM1030 643l693 -352
+c-152 -332 -457 -547 -827 -547c-495 0 -896 401 -896 896s401 896 896 896c352 0 642 -194 806 -500zM1543 640h-39v-160h-96v352h136c111 0 121 -192 -1 -192z" />
+ <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1856"
+d="M1664 896c0 106 -86 192 -192 192h-64v-384h64c106 0 192 86 192 192zM0 128h1792c0 -141 -115 -256 -256 -256h-1280c-141 0 -256 115 -256 256zM1856 896c0 -212 -172 -384 -384 -384h-64v-32c0 -123 -101 -224 -224 -224h-704c-123 0 -224 101 -224 224v736
+c0 35 29 64 64 64h1152c212 0 384 -172 384 -384z" />
+ <glyph glyph-name="cog" unicode="&#xf013;"
+d="M1024 640c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1536 749v-222c0 -15 -12 -33 -28 -36l-185 -28c-11 -32 -23 -62 -39 -91c34 -49 70 -93 107 -138c6 -7 10 -16 10 -25s-3 -16 -9 -23c-24 -32 -159 -179 -193 -179
+c-9 0 -18 4 -26 9l-138 108c-29 -15 -60 -28 -91 -38c-7 -61 -13 -126 -29 -186c-4 -16 -18 -28 -36 -28h-222c-18 0 -34 13 -36 30l-28 184c-31 10 -61 22 -90 37l-141 -107c-7 -6 -16 -9 -25 -9s-18 4 -25 11c-53 48 -123 110 -165 168c-5 7 -7 15 -7 23c0 9 3 16 8 23
+c34 46 71 90 105 137c-17 32 -31 65 -41 99l-183 27c-17 3 -29 19 -29 36v222c0 15 12 33 27 36l186 28c10 32 23 62 39 92c-34 48 -70 93 -107 138c-6 7 -10 15 -10 24s4 16 9 23c24 33 159 179 193 179c9 0 18 -4 26 -10l138 -107c29 15 60 28 91 38c7 61 13 126 29 186
+c4 16 18 28 36 28h222c18 0 34 -13 36 -30l28 -184c31 -10 61 -22 90 -37l142 107c6 6 15 9 24 9s18 -4 25 -10c53 -49 123 -111 165 -170c5 -6 7 -14 7 -22c0 -9 -3 -16 -8 -23c-34 -46 -71 -90 -105 -137c17 -32 31 -65 41 -98l183 -28c17 -3 29 -19 29 -36z" />
+ <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920"
+d="M896 640c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1664 128c0 70 -58 128 -128 128s-128 -58 -128 -128c0 -71 58 -128 128 -128c71 0 128 58 128 128zM1664 1152c0 70 -58 128 -128 128s-128 -58 -128 -128
+c0 -71 58 -128 128 -128c71 0 128 58 128 128zM1280 731v-185c0 -13 -10 -28 -23 -30l-155 -24c-8 -26 -19 -51 -32 -76c28 -40 58 -77 90 -115c4 -6 7 -12 7 -20c0 -7 -2 -14 -7 -19c-20 -27 -132 -149 -161 -149c-8 0 -15 3 -21 7l-115 90c-25 -13 -50 -23 -77 -31
+c-5 -51 -10 -106 -23 -155c-4 -14 -16 -24 -30 -24h-186c-14 0 -28 11 -30 25l-23 153c-26 8 -51 19 -75 31l-118 -89c-5 -5 -13 -7 -20 -7c-8 0 -15 3 -21 8c-26 24 -144 131 -144 160c0 7 3 13 7 19c29 38 59 75 88 114c-14 27 -26 54 -35 82l-152 24c-14 2 -24 15 -24 29
+v185c0 13 10 28 23 30l155 24c8 26 19 51 32 76c-28 40 -58 77 -90 115c-4 6 -7 13 -7 20s2 14 7 20c20 27 132 148 161 148c8 0 15 -3 21 -7l115 -90c25 13 50 23 77 32c5 50 10 105 23 154c4 14 16 24 30 24h186c14 0 28 -11 30 -25l23 -153c26 -8 51 -19 75 -31l118 89
+c6 5 13 7 20 7c8 0 15 -3 21 -8c26 -24 144 -132 144 -160c0 -7 -3 -13 -7 -19c-29 -39 -59 -75 -87 -114c13 -27 25 -54 34 -82l152 -23c14 -3 24 -16 24 -30zM1920 198v-140c0 -15 -129 -29 -149 -31c-8 -19 -18 -36 -30 -52c9 -20 51 -120 51 -138c0 -3 -1 -5 -4 -7
+c-12 -7 -119 -71 -124 -71c-13 0 -88 100 -98 115c-10 -1 -20 -2 -30 -2s-20 1 -30 2c-10 -15 -85 -115 -98 -115c-5 0 -112 64 -124 71c-3 2 -4 5 -4 7c0 17 42 118 51 138c-12 16 -22 33 -30 52c-20 2 -149 16 -149 31v140c0 15 129 29 149 31c8 18 18 36 30 52
+c-9 20 -51 121 -51 138c0 2 1 5 4 7c12 6 119 70 124 70c13 0 88 -99 98 -114c10 1 20 2 30 2s20 -1 30 -2c28 39 58 78 92 112l6 2c5 0 112 -63 124 -70c3 -2 4 -5 4 -7c0 -18 -42 -118 -51 -138c12 -16 22 -34 30 -52c20 -2 149 -16 149 -31zM1920 1222v-140
+c0 -15 -129 -29 -149 -31c-8 -19 -18 -36 -30 -52c9 -20 51 -120 51 -138c0 -3 -1 -5 -4 -7c-12 -7 -119 -71 -124 -71c-13 0 -88 100 -98 115c-10 -1 -20 -2 -30 -2s-20 1 -30 2c-10 -15 -85 -115 -98 -115c-5 0 -112 64 -124 71c-3 2 -4 5 -4 7c0 17 42 118 51 138
+c-12 16 -22 33 -30 52c-20 2 -149 16 -149 31v140c0 15 129 29 149 31c8 18 18 36 30 52c-9 20 -51 121 -51 138c0 2 1 5 4 7c12 6 119 70 124 70c13 0 88 -99 98 -114c10 1 20 2 30 2s20 -1 30 -2c28 39 58 78 92 112l6 2c5 0 112 -63 124 -70c3 -2 4 -5 4 -7
+c0 -18 -42 -118 -51 -138c12 -16 22 -34 30 -52c20 -2 149 -16 149 -31z" />
+ <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664"
+d="M160 0h608v1152h-640v-1120c0 -17 15 -32 32 -32zM1536 32v1120h-640v-1152h608c17 0 32 15 32 32zM1664 1248v-1216c0 -88 -72 -160 -160 -160h-1344c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1344c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792"
+d="M1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22c-22 -2 -43 14 -48 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 353 401 640 896 640s896 -286 896 -640z" />
+ <glyph glyph-name="comment-o" unicode="&#xf0e5;" horiz-adv-x="1792"
+d="M896 1152c-416 0 -768 -234 -768 -512c0 -149 100 -291 273 -389l87 -50l-27 -96c-19 -71 -44 -126 -70 -172c101 42 193 99 275 171l43 38l57 -6c43 -5 87 -8 130 -8c416 0 768 234 768 512s-352 512 -768 512zM1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8
+c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22h-5c-20 0 -38 16 -43 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 354 401 640 896 640s896 -286 896 -640z" />
+ <glyph glyph-name="commenting" unicode="&#xf27a;" horiz-adv-x="1792"
+d="M640 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1024 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1408 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128z
+M1792 640c0 -354 -401 -640 -896 -640c-73 0 -144 6 -211 18c-114 -114 -263 -192 -435 -229c-27 -5 -56 -10 -86 -13c-16 -2 -31 9 -35 24c-4 16 8 26 20 37c63 59 138 106 164 317c-191 117 -313 291 -313 486c0 354 401 640 896 640s896 -286 896 -640z" />
+ <glyph glyph-name="commenting-o" unicode="&#xf27b;" horiz-adv-x="1792"
+d="M640 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1024 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1408 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128z
+M896 1152c-416 0 -768 -234 -768 -512c0 -149 100 -291 273 -389l87 -50l-27 -96c-19 -71 -44 -126 -70 -172c101 42 193 99 275 171l43 38l57 -6c43 -5 87 -8 130 -8c416 0 768 234 768 512s-352 512 -768 512zM1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8
+c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22h-5c-20 0 -38 16 -43 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 353 401 640 896 640s896 -287 896 -640z" />
+ <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792"
+d="M1408 768c0 -283 -315 -512 -704 -512c-61 0 -120 6 -176 16c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512s704 -229 704 -512zM1792 512
+c0 -163 -104 -307 -266 -401c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29c-30 4 -59 9 -86 16c-101 26 -195 69 -278 128c-56 -10 -115 -16 -176 -16c-181 0 -347 50 -472 132c29 -2 59 -4 88 -4c215 0 418 62 573 174c167 122 259 287 259 466
+c0 52 -8 103 -23 152c169 -93 279 -241 279 -408z" />
+ <glyph glyph-name="comments-o" unicode="&#xf0e6;" horiz-adv-x="1792"
+d="M704 1152c-312 0 -576 -176 -576 -384c0 -110 74 -216 202 -290l97 -56l-35 -84c21 12 42 25 62 39l44 31l53 -10c50 -9 101 -14 153 -14c312 0 576 176 576 384s-264 384 -576 384zM704 1280c389 0 704 -229 704 -512s-315 -512 -704 -512c-61 0 -120 6 -176 16
+c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512zM1526 111c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29
+c-30 4 -59 9 -86 16c-101 26 -195 69 -278 128c-56 -10 -115 -16 -176 -16c-181 0 -347 50 -472 132c29 -2 59 -4 88 -4c215 0 418 62 573 174c167 122 259 287 259 466c0 52 -8 103 -23 152c169 -93 279 -241 279 -408c0 -163 -104 -307 -266 -401z" />
+ <glyph glyph-name="compass" unicode="&#xf14e;"
+d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="compress" unicode="&#xf066;" horiz-adv-x="1510"
+d="M755 576v-448c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-144 144l-332 -332c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-114 114c-6 6 -10 15 -10 23s4 17 10 23l332 332l-144 144c-12 12 -19 28 -19 45c0 35 29 64 64 64h448c35 0 64 -29 64 -64zM1510 1248
+c0 -8 -4 -17 -10 -23l-332 -332l144 -144c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-448c-35 0 -64 29 -64 64v448c0 35 29 64 64 64c17 0 33 -7 45 -19l144 -144l332 332c6 6 15 10 23 10s17 -4 23 -10l114 -114c6 -6 10 -15 10 -23z" />
+ <glyph glyph-name="connectdevelop" unicode="&#xf20e;" horiz-adv-x="2048"
+d="M2048 641c0 -28 -20 -51 -46 -56l-205 -356c2 -6 3 -12 3 -18c0 -27 -19 -50 -45 -55l-193 -337c2 -5 3 -10 3 -16c0 -31 -25 -57 -57 -57c-16 0 -31 7 -41 18h-400c-10 -12 -26 -20 -43 -20s-33 8 -43 20h-399c-10 -12 -25 -20 -43 -20c-31 0 -57 25 -57 57
+c0 7 2 14 4 20l-193 335c-26 5 -45 28 -45 55c0 7 1 12 3 18l-206 356c-26 6 -45 29 -45 56c0 28 20 51 47 56l199 344c0 2 -1 4 -1 6c0 23 14 42 34 51l209 363c-2 5 -4 12 -4 18c0 32 26 57 57 57c18 0 33 -8 44 -21h396c10 13 25 21 43 21s33 -8 43 -21h398
+c11 13 26 21 44 21c31 0 57 -25 57 -57c0 -6 -2 -12 -4 -18l207 -358c30 -1 55 -26 55 -56c0 -10 -3 -19 -7 -27l187 -324c25 -5 44 -28 44 -55zM1063 -158h389l-342 354h-143l-342 -354h360c10 9 24 16 39 16s29 -7 39 -16zM112 654c1 -4 1 -8 1 -13s0 -10 -2 -15l208 -360
+c5 -1 10 -4 15 -6l188 199v347l-187 194c-9 -6 -19 -9 -29 -10zM986 1438h-388l190 -200l554 200h-280c-10 -10 -23 -16 -38 -16s-28 6 -38 16zM1689 226c1 4 3 8 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427
+l333 -343c4 2 8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6c9 -3 16 -7 22 -13zM552 226h402l64 66l-309 321l-157 -166v-221zM359 226h163v189l-168 -177c2 -4 4 -8 5 -12zM358 1051c0 -1 1 -3 1 -4c0 -11 -3 -21 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314
+l-223 236zM556 1425l-4 -8v-264l205 74l-191 201c-3 -1 -6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018c-5 8 -8 18 -8 29v2
+l-216 376c-5 1 -9 3 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82zM1729 266l207 361c-1 5 -2 9 -2 14c0 6 2 11 3 16l-171 296l-129 -612l77 -82c5 3 10 5 15 7z" />
+ <glyph glyph-name="contao" unicode="&#xf26d;" horiz-adv-x="1748"
+d="M116 1408h197c-47 -43 -89 -93 -126 -149c-155 -239 -92 -501 -32 -783c49 -229 90 -447 233 -604h-272c-64 0 -116 52 -116 116v1304c0 64 52 116 116 116zM1324 1408h308c64 0 116 -52 116 -116v-1304c0 -64 -52 -116 -116 -116h-178c132 131 207 321 196 565
+l-469 -101c-6 -111 -44 -218 -196 -250c-85 -18 -155 2 -199 40c-54 46 -97 106 -169 448c-73 343 -58 415 -28 479c25 52 81 100 165 118c153 32 231 -51 282 -150l468 100c-46 118 -107 214 -180 287z" />
+ <glyph glyph-name="conway-glider" unicode="&#xf349;" horiz-adv-x="1792"
+d="M0 1536h610h1182v-1792h-1792v1792zM19 1517v-572h572v572h-572zM610 1517v-572h572v572h-572zM1201 1517v-572h572v572h-572zM896 1484v0v0c139 0 253 -114 253 -253v0v0c0 -139 -114 -253 -253 -253v0v0c-139 0 -253 114 -253 253v0v0c0 139 114 253 253 253v0zM19 926
+v-572h572v572h-572zM610 926v-572h572v572h-572zM1201 926v-572h572v572h-572zM1487 893v0c139 0 253 -114 253 -253v0c0 -139 -114 -253 -253 -253v0c-139 0 -253 114 -253 253v0c0 139 114 253 253 253zM19 335v-572h572v572h-572zM610 335v-572h572v572h-572zM1201 335
+v-572h572v572h-572zM305 302c139 0 253 -114 253 -253v0c0 -139 -114 -253 -253 -253v0c-139 0 -253 114 -253 253v0c0 139 114 253 253 253v0zM896 302v0c139 0 253 -114 253 -253v0c0 -139 -114 -253 -253 -253v0v0c-139 0 -253 114 -253 253v0c0 139 114 253 253 253v0z
+M1487 302v0c139 0 253 -114 253 -253v0c0 -139 -114 -253 -253 -253v0c-139 0 -253 114 -253 253v0c0 139 114 253 253 253z" />
+ <glyph glyph-name="copyright" unicode="&#xf1f9;"
+d="M1150 462v-109c0 -141 -225 -193 -366 -193c-274 0 -480 209 -480 485c0 271 204 475 475 475c99 0 358 -35 358 -194v-109c0 -9 -7 -16 -16 -16h-118c-9 0 -16 7 -16 16v70c0 63 -121 92 -203 92c-187 0 -317 -135 -317 -329c0 -201 136 -348 325 -348
+c72 0 208 27 208 90v70c0 9 7 16 15 16h119c8 0 16 -7 16 -16zM768 1280c-353 0 -640 -287 -640 -640s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
<glyph glyph-name="creative-commons" unicode="&#xf25e;" horiz-adv-x="1792"
d="M605 303c-200 0 -344 142 -344 337c0 192 147 337 344 337c159 0 240 -92 243 -96c9 -11 10 -27 2 -39l-53 -78c-5 -8 -14 -13 -24 -14s-19 3 -26 10c0 0 -55 56 -138 56c-99 0 -170 -73 -170 -175c0 -103 73 -177 174 -177c92 0 155 67 156 67c7 8 17 12 27 11
c10 -2 20 -8 24 -17l45 -82c7 -11 5 -26 -3 -36c-4 -4 -93 -104 -257 -104zM1235 303c-200 0 -344 142 -344 337c0 192 148 337 344 337c159 0 240 -92 243 -96c9 -11 10 -27 2 -39l-53 -78c-5 -8 -14 -13 -24 -14s-19 3 -26 10c0 0 -54 56 -138 56
c-99 0 -170 -73 -170 -175c0 -103 73 -177 174 -177c92 0 155 67 156 67c7 8 17 12 27 11c11 -2 20 -8 25 -17l45 -82c6 -11 4 -26 -4 -36c-4 -4 -92 -104 -257 -104zM896 1376c-406 0 -736 -330 -736 -736s330 -736 736 -736s736 330 736 736s-330 736 -736 736zM896 1536
c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896z" />
- <glyph glyph-name="clipboard" unicode="&#xf0ea;" horiz-adv-x="1792"
-d="M768 -128h896v640h-416c-53 0 -96 43 -96 96v416h-384v-1152zM1024 1312v64c0 17 -15 32 -32 32h-704c-17 0 -32 -15 -32 -32v-64c0 -17 15 -32 32 -32h704c17 0 32 15 32 32zM1280 640h299l-299 299v-299zM1792 512v-672c0 -53 -43 -96 -96 -96h-960
-c-53 0 -96 43 -96 96v160h-544c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1088c53 0 96 -43 96 -96v-328c13 -8 25 -17 36 -28l408 -408c38 -38 68 -111 68 -164z" />
+ <glyph glyph-name="credit-card" unicode="&#xf09d;" horiz-adv-x="1920"
+d="M1760 1408c88 0 160 -72 160 -160v-1216c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1600zM160 1280c-17 0 -32 -15 -32 -32v-224h1664v224c0 17 -15 32 -32 32h-1600zM1760 0c17 0 32 15 32 32v608h-1664v-608
+c0 -17 15 -32 32 -32h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+ <glyph glyph-name="credit-card-alt" unicode="&#xf283;" horiz-adv-x="2304"
+d="M0 32v608h2304v-608c0 -88 -72 -160 -160 -160h-1984c-88 0 -160 72 -160 160zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408c88 0 160 -72 160 -160v-224h-2304v224c0 88 72 160 160 160h1984z" />
+ <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664"
+d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v224h-864c-18 0 -32 14 -32 32v864h-224c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h224v224c0 18 14 32 32 32h192
+c18 0 32 -14 32 -32v-224h851l246 247c13 12 33 12 46 0c12 -13 12 -33 0 -46l-247 -246v-851h224c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="crosshairs" unicode="&#xf05b;"
+d="M1197 512h-109c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h109c-43 144 -157 258 -301 301v-109c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v109c-144 -43 -258 -157 -301 -301h109c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-109c43 -144 157 -258 301 -301
+v109c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-109c144 43 258 157 301 301zM1536 704v-128c0 -35 -29 -64 -64 -64h-143c-49 -215 -218 -384 -433 -433v-143c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v143c-215 49 -384 218 -433 433h-143c-35 0 -64 29 -64 64v128
+c0 35 29 64 64 64h143c49 215 218 384 433 433v143c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-143c215 -49 384 -218 433 -433h143c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="csharp" unicode="&#xf34a;" horiz-adv-x="1779"
+d="M2 -246l-2 1v0v1779h1779v-1779h-1c-2 0 -1775 -1 -1776 -1v0zM634 288c18 1 34 2 50 5c34 6 86 24 116 41l14 8s-18 25 -39 54l-38 53l-2 -1c-3 -1 -12 -6 -15 -7c-43 -19 -89 -26 -136 -19c-44 7 -85 26 -118 55c-7 6 -17 16 -23 22c-21 24 -37 50 -47 80
+c-6 17 -10 36 -12 54c-2 17 -2 34 0 51c5 48 24 93 55 129c6 7 16 18 23 24c36 32 78 51 125 58c20 3 42 3 62 1c37 -4 73 -17 104 -37c1 -1 3 -2 3 -2l71 110l-15 9c-44 27 -93 44 -144 50c-51 7 -103 3 -152 -12c-65 -19 -123 -57 -169 -108c-49 -54 -82 -122 -92 -194
+c-3 -18 -4 -34 -4 -53c0 -14 1 -25 2 -38c8 -75 39 -145 88 -203c11 -13 24 -27 37 -38c32 -28 68 -50 107 -66s81 -24 124 -26h25v0zM1047 400c16 47 29 86 29 86s4 1 58 1h57l-60 -173h60h60l29 86c16 47 30 87 30 87h63h62l20 56c11 31 19 56 19 56s-7 1 -62 1h-63l19 56
+l20 56h62c44 0 63 1 63 1l39 112h-63c-42 0 -62 1 -62 1l58 168h-60h-59l-30 -84l-29 -85h-57h-57s13 39 29 85l29 84h-59h-60s-12 -38 -28 -83s-30 -83 -30 -84v-2h-53h-52l-19 -56l-20 -56s18 -1 52 -1h53s-9 -25 -20 -56l-19 -56h-105v-1c0 -1 -39 -112 -39 -112h53h52
+v-1s-14 -39 -30 -86s-29 -85 -29 -85s2 -1 59 -1h60zM1116 600c0 0 8 25 19 56l19 56h57h57l-1 -3l-19 -57l-18 -52h-57h-57v0z" />
+ <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1768"
+d="M263 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+ <glyph glyph-name="cube" unicode="&#xf1b2;" horiz-adv-x="1664"
+d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768c0 -47 -26 -90 -67 -112l-704 -384c-19 -11 -40 -16 -61 -16s-42 5 -61 16l-704 384c-41 22 -67 65 -67 112v768c0 54 34 102 84 120l704 256c14 5 29 8 44 8s30 -3 44 -8
+l704 -256c50 -18 84 -66 84 -120z" />
+ <glyph glyph-name="cubes" unicode="&#xf1b3;" horiz-adv-x="2176"
+d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416
+c0 -48 -27 -93 -71 -114l-448 -224c-18 -10 -37 -14 -57 -14s-39 4 -57 14l-448 224c-3 1 -5 2 -7 4c-2 -2 -4 -3 -7 -4l-448 -224c-18 -10 -37 -14 -57 -14s-39 4 -57 14l-448 224c-44 21 -71 66 -71 114v416c0 51 31 97 78 118l434 186v400c0 51 31 97 78 118l448 192
+c16 7 33 10 50 10s34 -3 50 -10l448 -192c47 -21 78 -67 78 -118v-400l434 -186c48 -21 78 -67 78 -118z" />
+ <glyph glyph-name="cutlery" unicode="&#xf0f5;" horiz-adv-x="1408"
+d="M640 1472v-640c0 -81 -52 -154 -128 -181v-779c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v779c-76 27 -128 100 -128 181v640c0 35 29 64 64 64s64 -29 64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64v-416
+c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64zM1408 1472v-1600c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v512h-224c-17 0 -32 15 -32 32v800c0 176 144 320 320 320h256c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="dashcube" unicode="&#xf210;" horiz-adv-x="1408"
+d="M0 856c0 173 138 322 314 322h742l352 358v-1470c0 -174 -138 -322 -314 -322h-780c-176 0 -314 148 -314 322v790zM1232 102l-176 180v425c0 61 -49 112 -110 112h-484c-61 0 -110 -51 -110 -112v-492c0 -61 49 -113 110 -113h770z" />
+ <glyph glyph-name="database" unicode="&#xf1c0;"
+d="M768 768c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 0c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 384c301 0 603 54 768 170
+v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 1536c424 0 768 -115 768 -256v-128c0 -141 -344 -256 -768 -256s-768 115 -768 256v128c0 141 344 256 768 256z" />
+ <glyph glyph-name="deaf" unicode="&#xf2a4;" horiz-adv-x="1792"
+d="M1056 704c0 124 -101 224 -224 224s-224 -100 -224 -224c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 194 158 352 352 352s352 -158 352 -352c0 -35 -29 -64 -64 -64s-64 29 -64 64zM835 1280c318 0 576 -258 576 -576c0 -166 -78 -255 -146 -334
+c-63 -72 -113 -129 -113 -242c0 -212 -172 -384 -384 -384c-35 0 -64 29 -64 64s29 64 64 64c141 0 256 115 256 256c0 161 77 249 144 326c62 71 115 132 115 250c0 247 -201 448 -448 448s-448 -201 -448 -448c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 318 258 576 576 576
+zM591 561l226 -226l-579 -579c-16 -16 -42 -16 -58 0l-168 168c-16 16 -16 42 0 58zM1612 1524l168 -168c16 -16 16 -42 0 -59l-233 -233l-26 -25l-71 -71c-43 100 -109 188 -195 258l91 91l207 207c17 16 43 16 59 0z" />
+ <glyph glyph-name="debian" unicode="&#xf2ff;" horiz-adv-x="1440"
+d="M1 954c3 22 -11 29 15 62c-4 -17 -6 -33 -15 -62zM61 1152c0 -18 30 18 8 -31c-40 -28 -3 -12 -8 31zM754 1527c20 7 49 4 70 9c-28 -2 -55 -3 -82 -7l12 -2zM1399 728c-8 -61 -27 -121 -56 -176c26 52 43 108 51 165zM582 550l10 -27c-12 21 -26 42 -33 66
+c7 -14 13 -28 23 -39zM536 548c25 -47 38 -61 56 -96c-25 21 -40 49 -60 76zM1274 762c2 -48 -15 -72 -29 -113l-25 -13c-21 -41 2 -26 -13 -58c-33 -29 -100 -91 -121 -97c-16 0 11 19 14 26c-44 -30 -36 -46 -103 -64l-2 4c-166 -78 -395 76 -392 287
+c-2 -13 -5 -10 -9 -15c-9 108 50 218 149 262c97 48 210 28 279 -37c-38 50 -113 103 -203 98c-88 -1 -171 -57 -198 -118c-45 -28 -49 -109 -69 -124c-26 -194 49 -277 178 -376c20 -14 5 -16 8 -26c-43 20 -82 50 -114 87c17 -25 35 -49 59 -68c-40 14 -93 98 -109 101
+c69 -124 282 -218 393 -172c-51 -2 -117 -1 -175 20c-24 12 -57 39 -51 44c152 -57 308 -43 439 62c33 26 70 70 81 71c-16 -24 2 -12 -10 -33c33 54 -14 22 35 93l18 -25c-7 45 55 99 49 169c14 22 16 -23 1 -73c21 55 5 65 10 110c6 -15 14 -32 18 -48
+c-14 53 14 89 21 120c-7 3 -22 -23 -25 40c0 27 8 14 11 21c-5 3 -19 24 -28 64c6 9 17 -25 25 -26c-5 32 -15 57 -15 81c-25 51 -9 -7 -29 22c-26 82 22 19 25 56c40 -58 63 -147 73 -184c-8 45 -21 89 -37 131c12 -5 -19 93 16 28c-38 138 -161 266 -274 327
+c14 -13 31 -29 25 -31c-56 34 -46 37 -54 51c-46 19 -49 -1 -79 0c-86 46 -103 40 -183 69l4 -17c-57 19 -67 -7 -129 0c-4 3 20 11 39 14c-55 -7 -53 11 -107 -2c13 9 28 15 42 23c-45 -3 -107 -26 -88 -5c-74 -33 -205 -78 -278 -147l-2 15c-34 -40 -147 -121 -156 -173
+l-9 -2c-17 -30 -29 -64 -43 -94c-23 -39 -33 -15 -30 -21c-45 -91 -68 -168 -87 -231c14 -21 1 -123 6 -206c-23 -408 286 -804 624 -896c50 -18 123 -17 186 -19c-74 21 -84 11 -156 36c-52 24 -63 53 -100 85l15 -26c-72 26 -42 31 -101 50l16 20c-23 2 -62 40 -73 61
+l-25 -1c-31 38 -47 65 -46 86l-8 -15c-9 16 -114 142 -60 113c-10 9 -23 15 -37 41l11 13c-26 33 -48 76 -46 90c14 -19 23 -22 32 -25c-65 162 -68 9 -118 165l10 1c-8 12 -13 25 -19 38l5 45c-47 54 -14 232 -7 329c5 39 40 81 66 147l-16 3c31 53 174 214 241 206
+c32 41 -6 1 -12 11c71 74 93 52 141 65c52 31 -45 -13 -20 11c89 23 63 52 180 64c12 -7 -28 -11 -38 -20c75 36 235 28 340 -20c122 -57 259 -225 264 -383l6 -2c-3 -63 10 -135 -12 -202l15 32zM779 1504l-11 -2l11 1v1zM748 1513c53 -2 48 -5 31 -9c3 4 -15 6 -31 9z
+M1079 782c-5 -22 -10 13 -16 16c5 20 20 37 16 -16zM1020 629c18 24 30 51 35 79c-4 -20 -15 -37 -25 -55c-56 -35 -5 21 0 42c-60 -75 -8 -45 -10 -66zM860 589c-30 0 6 -15 45 -21c8 7 21 18 29 25c-24 -6 -49 -6 -74 -4z" />
+ <glyph glyph-name="delicious" unicode="&#xf1a5;"
+d="M1472 160v480h-704v704h-480c-124 0 -224 -100 -224 -224v-480h704v-704h480c124 0 224 100 224 224zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920"
+d="M1792 544v832c0 17 -15 32 -32 32h-1600c-17 0 -32 -15 -32 -32v-832c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32zM1920 1376v-1088c0 -88 -72 -160 -160 -160h-544c0 -85 64 -157 64 -192s-29 -64 -64 -64h-512c-35 0 -64 29 -64 64c0 37 64 105 64 192h-544
+c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="dev-to" unicode="&#xf316;"
+d="M39 1403v0c13 5 121 6 735 5c717 -1 721 -1 734 -9c7 -5 15 -14 20 -21c8 -13 8 -16 8 -739s0 -726 -8 -739c-5 -7 -13 -15 -20 -20c-13 -8 -16 -8 -739 -8s-726 0 -739 8c-7 5 -16 13 -21 20c-8 13 -8 16 -9 731c0 490 0 723 3 733c5 19 18 33 36 39zM404 935
+c-18 4 -53 6 -119 6h-93v-603h84c46 0 96 1 111 3c72 9 131 63 144 132c5 26 5 306 0 332c-6 31 -20 59 -43 83c-25 26 -50 40 -84 47zM897 886v55h-118c-92 0 -121 -2 -133 -6c-20 -7 -42 -30 -47 -50c-3 -11 -4 -89 -3 -254c1 -265 -1 -250 27 -274c20 -17 39 -19 163 -19
+h111v109l-95 1l-96 1l-1 69v69h116v109h-116v136h192v54zM1081 933c-3 8 -4 8 -62 8h-59l3 -10c26 -106 136 -514 143 -528c11 -23 33 -49 49 -57c18 -9 47 -7 67 4c16 9 45 45 50 62c8 25 138 522 138 525s-16 4 -60 3l-58 -1l-52 -198c-28 -109 -52 -199 -53 -202
+s-24 83 -52 190s-52 199 -54 204zM301 639v193l41 -1c37 -2 42 -2 56 -11c28 -18 27 -18 27 -178c0 -164 0 -166 -29 -183c-15 -9 -22 -10 -56 -11l-39 -2v193z" />
+ <glyph glyph-name="deviantart" unicode="&#xf1bd;" horiz-adv-x="1024"
+d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273c-1 0 -28 -28 -30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273c1 0 28 28 30 30h301v-303z" />
+ <glyph glyph-name="diamond" unicode="&#xf219;" horiz-adv-x="2048"
+d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512c19 -24 17 -59 -4 -82l-960 -1024c-12 -13 -29 -20 -47 -20
+s-35 7 -47 20l-960 1024c-21 23 -23 58 -4 82l384 512c12 17 31 26 51 26h1152c20 0 39 -9 51 -26z" />
+ <glyph glyph-name="diaspora" unicode="&#xf2e5;" horiz-adv-x="1581"
+d="M1005 -16c-42 59 -111 155 -153 214c-41 57 -75 102 -77 102s-66 -87 -152 -205c-82 -113 -150 -205 -151 -205c-2 0 -296 207 -297 209c0 1 65 99 147 217s149 217 149 219c0 4 -27 14 -234 83c-129 43 -235 78 -237 79s10 41 52 174c30 95 56 174 57 175
+s112 -35 248 -80s249 -81 250 -81s2 2 3 5s2 118 3 257s2 254 3 255c1 2 40 2 180 2c98 0 179 0 180 -1c2 -1 4 -78 8 -249c7 -281 9 -285 13 -285c2 0 109 36 239 80s236 79 237 78c3 -3 109 -350 108 -351s-109 -37 -241 -82c-181 -61 -240 -82 -240 -85
+c0 -2 62 -95 141 -211c78 -114 141 -208 141 -209c-1 -2 -293 -217 -295 -217c-1 0 -38 50 -82 112z" />
+ <glyph glyph-name="digg" unicode="&#xf1a6;" horiz-adv-x="2048"
+d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968h205v-697h-205v697zM614 1254h205v-204h-205v204zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
+v-369h123z" />
+ <glyph glyph-name="digitalocean" unicode="&#xf31d;" horiz-adv-x="1535"
+d="M245 169h-191v190h191v-190zM473 -59h-228v228h228v-228zM769 465v-296h-296v296h296zM768 -128v298c315 0 559 312 438 644c-44 123 -142 221 -265 265c-332 120 -644 -123 -644 -438h-297c0 502 485 894 1012 729c230 -72 414 -255 485 -485
+c165 -527 -226 -1013 -729 -1013z" />
+ <glyph glyph-name="discord" unicode="&#xf2ee;"
+d="M180 1516v0h1176c99 0 180 -81 180 -181v-1575l-189 167l-106 98l-112 105l46 -163h-995c-99 0 -180 81 -180 181v1187c0 100 81 181 180 181zM634 1107c0 0 -121 3 -247 -92c0 0 -126 -229 -126 -512c0 0 73 -128 267 -134c0 0 33 40 59 73c-111 33 -153 104 -153 104
+s8 -6 24 -15c1 -1 2 -2 4 -3c3 -2 5 -2 8 -4c22 -12 44 -22 64 -30c36 -14 79 -28 129 -38c66 -12 143 -17 227 -1c41 7 83 20 127 38c31 11 65 28 101 52c0 0 -44 -73 -159 -105c26 -33 58 -71 58 -71c194 6 269 134 269 134c0 283 -127 512 -127 512
+c-126 95 -246 92 -246 92l-12 -14c149 -46 218 -112 218 -112c-91 50 -181 75 -264 85c-63 7 -123 5 -177 -2c-5 0 -10 -1 -15 -2c-31 -3 -106 -14 -200 -55c-32 -15 -51 -26 -51 -26s72 69 230 115zM609 779c50 0 91 -43 90 -97c0 -54 -40 -98 -90 -98c-49 0 -89 44 -89 98
+s39 97 89 97zM930 779c50 0 89 -43 89 -97s-39 -98 -89 -98c-49 0 -90 44 -90 98s40 97 90 97z" />
+ <glyph glyph-name="discord-alt" unicode="&#xf2ef;"
+d="M559 1212v0l13 -16c-237 -68 -346 -172 -346 -172s29 16 78 38c141 62 252 79 298 83c8 1 15 3 23 3c80 11 170 13 265 2c125 -14 259 -51 396 -126c0 0 -103 99 -327 167l18 21s181 4 370 -138c0 0 189 -343 189 -766c0 0 -111 -191 -402 -200c0 0 -48 56 -87 106
+c172 49 238 157 238 157c-54 -35 -105 -61 -151 -78c-66 -28 -129 -45 -191 -56c-126 -24 -242 -17 -341 1c-75 14 -139 36 -193 57c-30 12 -63 26 -96 44c-4 3 -8 4 -12 7c-3 1 -4 3 -5 4c-24 13 -37 22 -37 22s63 -105 230 -155c-39 -50 -88 -109 -88 -109
+c-291 9 -401 200 -401 200c0 423 189 766 189 766c189 142 370 138 370 138zM522 722v0c-75 0 -134 -66 -134 -146s60 -146 134 -146c75 0 134 66 134 146c1 80 -59 146 -134 146zM1002 722v0c-75 0 -134 -66 -134 -146s60 -146 134 -146c75 0 134 66 134 146
+s-59 146 -134 146z" />
+ <glyph glyph-name="dogmazic" unicode="&#xf303;"
+d="M768 1404c423 0 768 -343 768 -766s-345 -766 -768 -766s-768 343 -768 766s345 766 768 766zM768 1302c-368 0 -666 -297 -666 -664s298 -664 666 -664s666 297 666 664s-298 664 -666 664zM768 1223c668 3 845 -918 212 -1148c-52 -19 -148 -29 -165 -17
+c-9 6 6 111 30 214c20 88 28 84 -78 37c-49 -22 -92 -40 -96 -41c-5 -1 -23 23 -60 78c-32 48 -54 78 -55 74s-21 -73 -44 -154c-50 -177 -38 -165 -111 -110c-452 340 -218 1052 351 1067h16zM803 1137c-251 0 -505 -261 -415 -458c14 -31 19 -30 9 1
+c-66 214 206 464 458 420c281 -49 436 -423 255 -613c-49 -51 -21 -53 31 -2c184 181 17 586 -267 645c-23 5 -47 7 -71 7zM435 998c-2 0 -6 0 -10 -1c-132 -18 -189 -193 -96 -296c27 -30 30 -29 22 5c-18 75 7 167 69 258c19 28 24 34 15 34zM805 958
+c-12 0 -35 -27 -35 -44c0 -20 -7 -22 -25 -6c-42 37 -123 53 -167 34c-14 -6 -14 -5 6 -8c61 -8 101 -75 69 -117c-27 -36 -40 -72 -44 -123c-4 -61 -30 -81 -51 -39c-27 54 10 135 62 135c11 0 0 8 -15 11c-89 17 -142 -140 -56 -167c14 -4 6 -11 -14 -11
+c-24 0 -48 11 -69 31c-23 22 -10 -6 24 -53c12 -16 57 -84 101 -150c94 -139 89 -132 95 -129c3 1 61 28 131 60s144 64 166 72c40 15 83 37 79 41c-1 1 -6 0 -11 -3c-24 -13 -80 -2 -98 18c-9 10 -9 9 15 9c97 0 121 145 28 173c-16 5 -18 7 -20 26c-1 11 -4 26 -5 33
+c-5 33 78 59 121 37c19 -10 15 0 -9 21c-37 33 -64 43 -119 43c-70 0 -77 6 -56 49c9 19 10 23 4 24c-10 2 -23 -11 -30 -29c-5 -15 -13 -20 -19 -11c-2 3 1 12 6 20c11 17 12 30 3 30c-8 0 -17 -11 -27 -30c-4 -8 -10 -15 -12 -15c-6 0 -4 18 3 31c4 6 6 16 6 20
+c0 16 -22 -2 -32 -25c-5 -12 -13 -22 -16 -22c-9 0 -7 12 6 37c6 13 10 24 9 25s-2 2 -4 2zM1242 756c-5 0 -5 -16 -5 -59c0 -100 -23 -174 -72 -226c-26 -27 -19 -29 32 -6c106 48 136 192 58 280c-6 7 -10 11 -13 11zM982 689c3 0 6 -3 10 -8c39 -45 25 -117 -28 -144
+c-24 -12 -28 -11 -37 8c-8 16 -8 16 3 28c16 17 34 55 40 86c4 21 8 30 12 30zM680 537c10 0 20 -8 21 -22c2 -25 -16 -39 -36 -27v0c-11 6 -11 32 1 43c4 4 9 6 14 6zM778 509c10 0 19 -11 19 -28c0 -22 -23 -33 -38 -18c-10 10 -9 27 2 38c6 6 12 8 17 8z" />
+ <glyph glyph-name="dot-circle-o" unicode="&#xf192;"
+d="M1024 640c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768
+s768 -344 768 -768z" />
+ <glyph glyph-name="download" unicode="&#xf019;" horiz-adv-x="1664"
+d="M1280 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1536 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 416v-320c0 -53 -43 -96 -96 -96h-1472c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h465l135 -136
+c37 -36 85 -56 136 -56s99 20 136 56l136 136h464c53 0 96 -43 96 -96zM1339 985c10 -24 5 -52 -14 -70l-448 -448c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-448 448c-19 18 -24 46 -14 70c10 23 33 39 59 39h256v448c0 35 29 64 64 64h256c35 0 64 -29 64 -64v-448h256
+c26 0 49 -16 59 -39z" />
+ <glyph glyph-name="dribbble" unicode="&#xf17d;"
+d="M1024 36c-10 58 -48 258 -140 498c-1 0 -3 -1 -4 -1c0 0 -389 -136 -515 -410c-6 5 -15 11 -15 11c114 -93 259 -150 418 -150c91 0 177 19 256 52zM839 643c-16 37 -34 74 -53 111c-338 -101 -662 -93 -673 -93c-1 -7 -1 -14 -1 -21c0 -168 64 -322 168 -438
+c179 319 533 433 533 433c9 3 18 5 26 8zM732 855c-114 202 -235 366 -244 378c-183 -86 -319 -255 -362 -458c17 0 291 -3 606 80zM1416 536c-14 4 -197 62 -409 29c86 -237 121 -430 128 -469c147 99 251 257 281 440zM611 1277c-1 0 -1 0 -2 -1c0 0 1 1 2 1zM1201 1132
+c-115 102 -267 164 -433 164c-53 0 -105 -7 -155 -19c10 -13 134 -176 246 -382c247 92 340 234 342 237zM1424 647c-2 155 -57 298 -149 410c-2 -2 -107 -154 -366 -260c15 -31 30 -63 44 -95c5 -11 9 -23 14 -34c226 29 449 -20 457 -21zM1536 640
+c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1664"
+d="M338 829l494 -305l-342 -285l-490 319zM1324 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM490 1418l342 -285l-494 -304l-338 270zM1326 829l338 -271l-489 -319l-343 285zM1175 1418l489 -319l-338 -270l-494 304z" />
+ <glyph glyph-name="drupal" unicode="&#xf1a9;"
+d="M1167 -50c-2 7 -8 17 -24 5c-34 -25 -110 -56 -218 -56s-159 23 -193 49c-5 4 -3 4 -13 4c-11 0 -17 -5 -26 -12c-8 -7 -12 -24 0 -36c74 -68 198 -62 289 -54c92 9 170 63 178 71c12 12 9 22 7 29zM1128 65c-7 17 -19 47 -39 61c-20 13 -49 15 -76 15s-42 2 -71 -10
+s-59 -39 -78 -56s-22 -30 -12 -44c10 -13 21 -5 49 19c29 23 48 44 107 44s69 -22 81 -44s13 -25 25 -19c14 7 21 17 14 34zM1483 346c0 52 -23 140 -108 140c-80 0 -242 -166 -327 -167c-99 -2 -236 196 -434 194c-156 -1 -279 -125 -281 -257c-1 -74 23 -129 74 -164
+c34 -23 65 -37 166 -37c168 0 381 208 479 205c78 -3 199 -194 260 -198c48 -4 73 18 114 77c40 60 57 154 57 207zM1536 506c0 -448 -354 -744 -761 -744c-408 0 -775 321 -775 758c0 436 340 638 403 671c75 40 129 61 214 129c42 33 77 81 88 198
+c61 -73 134 -158 186 -193c85 -56 170 -78 259 -134c54 -33 386 -236 386 -685z" />
+ <glyph glyph-name="edge" unicode="&#xf282;" horiz-adv-x="1654"
+d="M0 741h1c52 414 335 796 841 795c307 0 560 -144 708 -409c76 -137 104 -283 104 -442v-188h-1125c5 -464 682 -448 974 -244v-377c-171 -103 -557 -192 -858 -77c-255 98 -433 363 -436 621c-4 333 165 554 436 680c-57 -72 -101 -150 -124 -285h635
+c37 379 -359 379 -359 379c-374 -13 -644 -231 -797 -453z" />
<glyph glyph-name="eercast" unicode="&#xf2da;" horiz-adv-x="1719"
d="M1304 752c35 54 -6 191 -128 272c-121 81 -276 75 -312 21c-35 -53 40 -19 177 -70c226 -84 228 -277 263 -223zM1667 178c-283 -696 -1558 -520 -1531 383c3 115 35 192 68 302c-211 -864 966 -1367 1449 -685c18 25 23 23 14 0zM1428 627c0 -283 -228 -513 -509 -513
s-509 230 -509 513s228 513 509 513s509 -230 509 -513zM1715 915c-356 808 -1826 510 -1663 -589c-338 1101 1055 1606 1570 822c42 -64 90 -176 93 -233zM1653 573c17 338 -217 569 -533 656c-5 0 -27 9 14 13c772 -26 800 -1260 -41 -1274c274 76 543 266 560 605z" />
- <glyph glyph-name="bar-chart" unicode="&#xf080;" horiz-adv-x="2048"
-d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
- <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792"
-d="M1792 416c0 -140 -70 -323 -127 -451c-11 -23 -22 -55 -37 -76c-7 -10 -14 -17 -28 -17c-20 0 -32 16 -32 35c0 16 4 34 5 50c3 41 5 82 5 123c0 477 -283 560 -714 560h-224v-256c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-512 512c-12 12 -19 28 -19 45s7 33 19 45
-l512 512c12 12 28 19 45 19c35 0 64 -29 64 -64v-256h224c328 0 736 -58 875 -403c42 -106 53 -221 53 -333z" />
- <glyph glyph-name="hourglass-half" unicode="&#xf252;"
-d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64
-c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM1280 1408h-1024c0 -146 33 -275 85 -384h854c52 109 85 238 85 384zM1223 192c-74 193 -207 330 -340 384h-230c-133 -54 -266 -191 -340 -384h910z" />
- <glyph glyph-name="microchip" unicode="&#xf2db;"
-d="M192 256v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 512v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 768v-128h-112c-9 0 -16 7 -16 16v16
-h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 1024v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 1280v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16
-h48v16c0 9 7 16 16 16h112zM1280 1440v-1472c0 -53 -43 -96 -96 -96h-832c-53 0 -96 43 -96 96v1472c0 53 43 96 96 96h832c53 0 96 -43 96 -96zM1536 208v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16z
-M1536 464v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16zM1536 720v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16zM1536 976v-32
-c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16zM1536 1232v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16z" />
- <glyph glyph-name="graduation-cap" unicode="&#xf19d;" horiz-adv-x="2304"
-d="M1774 700l18 -316c8 -141 -287 -256 -640 -256s-648 115 -640 256l18 316l574 -181c16 -5 32 -7 48 -7s32 2 48 7zM2304 1024c0 -14 -9 -26 -22 -31l-1120 -352c-4 -1 -7 -1 -10 -1s-6 0 -10 1l-652 206c-57 -45 -97 -155 -105 -290c38 -22 63 -62 63 -109
-c0 -45 -23 -84 -58 -107l58 -433c1 -9 -2 -18 -8 -25s-15 -11 -24 -11h-192c-9 0 -18 4 -24 11s-9 16 -8 25l58 433c-35 23 -58 62 -58 107c0 48 27 89 65 111c6 117 36 243 98 330l-333 104c-13 5 -22 17 -22 31s9 26 22 31l1120 352c4 1 7 1 10 1s6 0 10 -1l1120 -352
-c13 -5 22 -17 22 -31z" />
- <glyph glyph-name="info-circle" unicode="&#xf05a;"
-d="M1024 160v160c0 18 -14 32 -32 32h-96v512c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-160c0 -18 14 -32 32 -32h96v-320h-96c-18 0 -32 -14 -32 -32v-160c0 -18 14 -32 32 -32h448c18 0 32 14 32 32zM896 1056v160c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32
-v-160c0 -18 14 -32 32 -32h192c18 0 32 14 32 32zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="2176"
-d="M0 1404h128v-1532h-128v1532zM2048 1408h128v-1536h-128v1536zM256 1408h128v-1280h-128v1280zM512 1408h256v-1280h-256v1280zM1280 1408h256v-1280h-256v1280zM1792 1408h128v-1280h-128v1280zM1024 1408h128v-1280h-128v1280zM256 0h128v-128h-128v128zM512 0h128
-v-128h-128v128zM768 0h128v-128h-128v128zM1024 0h128v-128h-128v128zM1280 0h128v-128h-128v128zM1536 0h128v-128h-128v128zM1792 0h128v-128h-128v128z" />
+ <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538"
+d="M14 557l710 710c25 25 65 25 90 0l710 -710c25 -25 16 -45 -19 -45h-1472c-35 0 -44 20 -19 45zM1473 0h-1408c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1408c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64z" />
+ <glyph glyph-name="ellipsis-h" unicode="&#xf141;" horiz-adv-x="1408"
+d="M384 800v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM896 800v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM1408 800v-192c0 -53 -43 -96 -96 -96h-192
+c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="ellipsis-v" unicode="&#xf142;" horiz-adv-x="384"
+d="M384 288v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM384 800v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM384 1312v-192c0 -53 -43 -96 -96 -96h-192
+c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="email-bulk" unicode="&#xf34b;" horiz-adv-x="2096"
+d="M139 -256h-5c-23 2 -46 9 -66 22c-29 18 -50 46 -61 78c-4 11 -6 22 -7 34v506v505c2 21 7 40 17 58c20 37 54 63 94 73c1 0 4 1 5 1v0v-568v-567l1 -2c1 -4 3 -8 5 -11l7 -7c3 -2 7 -4 11 -5l2 -1h1345l2 1c12 3 22 13 24 25v10v8h116v-9c0 -9 1 -15 0 -20
+c-3 -33 -18 -64 -42 -88c-26 -26 -60 -41 -96 -43h-677h-675v0zM371 -4c-17 1 -34 5 -50 12c-3 1 -11 5 -14 7c-12 7 -22 14 -31 24c-11 11 -20 24 -27 38c-9 17 -13 34 -15 54v1010c2 20 6 36 14 53c4 9 9 16 15 24c21 27 50 46 83 54c2 0 3 1 3 1v-540
+c0 -297 1 -552 1 -567v-30c1 -4 3 -8 5 -11l7 -7c3 -2 8 -4 12 -5c2 0 31 -1 674 -1c656 0 672 1 674 1c10 2 20 10 23 20c1 4 1 3 1 18v13h117v-13c0 -13 0 -18 -1 -24c-4 -39 -24 -75 -55 -100c-24 -19 -52 -29 -82 -31h-1354zM604 256c-14 1 -29 4 -42 9
+c-6 2 -10 3 -15 6c-14 7 -27 17 -38 28c-12 12 -21 24 -28 39c-9 18 -13 37 -14 57c0 3 -1 109 -1 366l1 362l3 -3c25 -27 54 -52 85 -74c2 -1 28 -19 58 -39c131 -89 179 -122 242 -166c60 -42 121 -86 162 -116c36 -26 59 -42 82 -56c56 -35 105 -56 151 -62
+c19 -3 38 -3 57 -1c27 3 55 11 84 24c15 7 32 15 48 24c29 17 58 36 104 70c35 26 102 74 163 116c74 52 152 105 272 186c27 18 30 21 37 26c30 21 55 43 80 70l1 1v-365c0 -344 -1 -366 -1 -369c-2 -20 -7 -36 -15 -53c-18 -35 -48 -61 -85 -73c-12 -4 -24 -6 -37 -7
+h-1354zM1275 721c-2 0 -7 2 -10 2c-28 4 -63 18 -105 44c-21 13 -40 26 -78 54c-22 16 -23 17 -46 33c-60 42 -128 90 -212 148c-99 69 -133 92 -172 119c-9 6 -24 17 -33 23c-2 1 -5 4 -8 6c-38 28 -75 67 -102 107c-18 27 -31 53 -37 77c-4 15 -5 27 -5 41c0 20 2 37 7 55
+c4 16 12 32 20 45c17 27 42 46 72 55c11 3 22 5 35 6h1360c10 -1 16 -2 25 -4c32 -8 61 -28 81 -55c16 -21 25 -46 28 -72c1 -10 1 -23 0 -35c-4 -41 -20 -81 -47 -121c-26 -38 -61 -75 -102 -104c-3 -2 -29 -20 -112 -77c-138 -96 -204 -141 -276 -192
+c-54 -38 -54 -38 -72 -51c-42 -31 -61 -43 -83 -57s-42 -25 -60 -32c-21 -9 -39 -13 -55 -14c-3 0 -10 -1 -13 -1v0z" />
+ <glyph glyph-name="email-bulk-o" unicode="&#xf34c;" horiz-adv-x="2096"
+d="M139 -256h-5c-23 2 -46 9 -66 22c-29 18 -50 46 -61 78c-4 11 -6 22 -7 34v506v505c2 21 7 40 17 58c20 37 54 63 94 73c1 0 4 1 5 1v0v-568v-567l1 -2c1 -4 3 -8 5 -11l7 -7c3 -2 7 -4 11 -5l2 -1h1345l2 1c12 3 22 13 24 25v10v8h116v-9c0 -9 1 -15 0 -20
+c-3 -33 -18 -64 -42 -88c-26 -26 -60 -41 -96 -43h-677h-675v0zM371 -4c-17 1 -34 5 -50 12c-3 1 -11 5 -14 7c-12 7 -22 14 -31 24c-11 11 -20 24 -27 38c-9 17 -13 34 -15 54v1010c2 20 6 36 14 53c4 9 9 16 15 24c21 27 50 46 83 54c1 0 2 1 3 1v-539
+c0 -297 1 -553 1 -568v-30c1 -4 3 -8 5 -11l7 -7c3 -2 8 -4 12 -5c2 0 31 -1 674 -1c656 0 672 1 674 1c10 2 20 10 23 20c1 4 1 3 1 18v13h117v-13c0 -13 0 -18 -1 -24c-4 -39 -24 -75 -55 -100c-24 -19 -52 -29 -82 -31h-1354zM604 256c-14 1 -29 4 -42 9
+c-6 2 -10 3 -15 6c-14 7 -27 17 -38 28c-12 12 -21 24 -28 39c-9 18 -13 36 -14 56v1004v7c5 54 41 101 92 121c14 5 27 9 43 10h1359c7 -1 15 -2 21 -3c34 -7 64 -27 85 -55c18 -23 27 -51 29 -80v-505c0 -473 -1 -501 -1 -504c-2 -20 -7 -36 -15 -53
+c-18 -35 -48 -61 -85 -73c-12 -4 -24 -6 -37 -7h-1354v0zM1956 373c6 2 11 4 15 8s6 9 8 15v1v351l1 352l-3 -3c-17 -19 -36 -38 -56 -54c-2 -2 -8 -6 -13 -10c-166 -127 -277 -217 -382 -304c-9 -8 -20 -16 -24 -19c-44 -36 -76 -59 -109 -76s-64 -25 -94 -28
+c-11 -1 -25 -1 -37 0c-40 4 -83 20 -129 50c-26 17 -51 35 -89 67c-110 92 -215 175 -385 306c-8 6 -15 12 -16 13c-21 17 -40 36 -59 57l-1 1v-351v-351v-3c1 -4 3 -7 5 -10c1 -2 5 -6 7 -7c4 -3 9 -5 13 -6h674h672zM1288 722c12 1 26 4 41 11c4 2 14 6 19 9
+c21 12 46 29 74 52c10 8 15 13 40 34c15 12 16 14 43 35c107 85 218 173 318 251c26 20 27 22 32 26c33 28 67 70 90 110c6 10 12 22 16 31c11 25 17 49 18 69c0 8 1 27 1 32c-1 12 -3 19 -6 25c-4 7 -11 11 -20 12c-2 0 -191 1 -674 1h-672l-2 -1c-5 -1 -9 -4 -13 -7
+s-6 -8 -8 -12c-1 -3 -2 -5 -2 -9s1 -14 1 -21c4 -66 30 -128 75 -182c11 -13 25 -28 39 -40c9 -8 12 -10 41 -33c100 -78 213 -168 322 -255c25 -20 24 -19 42 -34c33 -28 45 -38 62 -51c18 -14 32 -23 47 -31c24 -14 45 -22 63 -23c2 0 10 1 13 1v0z" />
+ <glyph glyph-name="emby" unicode="&#xf319;" horiz-adv-x="1534"
+d="M474 224l-62 -62l-412 415l356 356l-60 61l414 414l355 -355l58 57l411 -414l-352 -352l58 -58l-414 -414zM1091 633l-496 291v-578z" />
+ <glyph glyph-name="empire" unicode="&#xf1d1;" horiz-adv-x="1792"
+d="M874 -102v-66c-282 8 -529 160 -668 385l58 34c21 -35 46 -68 73 -99l65 57c94 -107 222 -183 368 -212l-17 -86c39 -7 80 -12 121 -13zM276 428l-83 -28c14 -39 30 -76 49 -112l-57 -33c-62 114 -98 246 -98 385s36 271 98 385l57 -33c-19 -35 -36 -73 -49 -112l82 -28
+c-23 -66 -35 -138 -35 -212s13 -146 36 -212zM1528 251l58 -34c-139 -225 -386 -377 -668 -385v66c41 1 82 6 121 13l-17 86c146 29 274 105 368 212l65 -57c27 31 52 64 73 99zM1377 805l-233 -80c9 -27 14 -55 14 -85s-5 -58 -14 -85l232 -80c-21 -63 -55 -120 -98 -169
+l-185 162c-37 -43 -88 -73 -147 -85l48 -241c-31 -6 -64 -10 -98 -10s-67 4 -98 10l48 241c-59 12 -110 42 -147 85l-185 -162c-43 49 -77 106 -98 169l232 80c-9 27 -14 55 -14 85s5 58 14 85l-233 80c22 63 56 120 99 169l185 -162c37 43 88 74 147 86l-48 240
+c31 7 64 10 98 10s67 -3 98 -10l-48 -240c59 -12 110 -43 147 -86l185 162c43 -49 77 -106 99 -169zM874 1448v-66c-41 -1 -82 -5 -121 -13l17 -86c-146 -28 -274 -104 -368 -211l-65 56c-27 -30 -51 -63 -73 -98l-57 33c139 226 385 377 667 385zM1705 640
+c0 -139 -36 -271 -98 -385l-57 33c19 36 35 73 49 112l-83 28c23 66 36 138 36 212s-12 146 -35 212l82 28c-13 39 -30 77 -49 112l57 33c62 -114 98 -246 98 -385zM1585 1063l-57 -33c-22 35 -46 68 -73 98l-65 -56c-94 107 -222 183 -368 211l17 86c-39 8 -80 12 -121 13
+v66c282 -8 528 -159 667 -385zM1748 640c0 470 -382 852 -852 852s-852 -382 -852 -852s382 -852 852 -852s852 382 852 852zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
+ <glyph glyph-name="envelope" unicode="&#xf0e0;" horiz-adv-x="1792"
+d="M1792 826v-794c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v794c30 -33 64 -62 101 -87c166 -113 334 -226 497 -345c84 -62 188 -138 297 -138h2c109 0 213 76 297 138c163 118 331 232 498 345c36 25 70 54 100 87zM1792 1120c0 -112 -83 -213 -171 -274
+c-156 -108 -313 -216 -468 -325c-65 -45 -175 -137 -256 -137h-2c-81 0 -191 92 -256 137c-155 109 -312 217 -467 325c-71 48 -172 161 -172 252c0 98 53 182 160 182h1472c87 0 160 -72 160 -160z" />
+ <glyph glyph-name="envelope-o" unicode="&#xf003;" horiz-adv-x="1792"
+d="M1664 32v768c-21 -24 -44 -46 -69 -66c-143 -110 -287 -222 -426 -338c-75 -63 -168 -140 -272 -140h-2c-104 0 -197 77 -272 140c-139 116 -283 228 -426 338c-25 20 -48 42 -69 66v-768c0 -17 15 -32 32 -32h1472c17 0 32 15 32 32zM1664 1083c0 25 6 69 -32 69h-1472
+c-17 0 -32 -15 -32 -32c0 -114 57 -213 147 -284c134 -105 268 -211 401 -317c53 -43 149 -135 219 -135h2c70 0 166 92 219 135c133 106 267 212 401 317c65 51 147 162 147 247zM1792 1120v-1088c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1088
+c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="envelope-open" unicode="&#xf2b6;" horiz-adv-x="1792"
+d="M1792 882v-978c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v978c0 9 4 18 11 24c105 92 106 103 628 484c63 46 174 146 257 146s195 -101 257 -146c522 -381 523 -392 628 -484c7 -6 11 -15 11 -24zM1228 297c156 113 265 192 345 252c14 10 17 30 6 44
+l-38 52c-11 14 -31 17 -45 6c-79 -58 -187 -138 -343 -250c-62 -45 -174 -145 -257 -145s-195 100 -257 145c-156 113 -264 192 -343 250c-14 11 -34 8 -45 -6l-38 -52c-11 -14 -8 -34 6 -44c80 -60 189 -139 345 -252c78 -56 201 -169 332 -169c132 0 258 115 332 169z" />
+ <glyph glyph-name="envelope-open-o" unicode="&#xf2b7;" horiz-adv-x="1792"
+d="M1474 623l39 -51c11 -14 8 -33 -5 -44c-100 -78 -330 -255 -340 -263c-71 -58 -167 -138 -271 -137h-2c-104 0 -200 79 -271 137c-11 9 -233 180 -331 256c-14 11 -17 30 -6 44l37 52c11 15 32 18 46 6c68 -53 164 -127 306 -236c50 -38 149 -131 219 -131h2
+c70 0 169 93 219 131c147 113 245 188 313 242c14 11 34 8 45 -6zM1664 -96v928c-100 93 -85 85 -548 443c-50 39 -149 133 -219 133h-2c-70 0 -169 -94 -219 -133c-463 -358 -448 -350 -548 -443v-928c0 -17 15 -32 32 -32h1472c17 0 32 15 32 32zM1792 832v-928
+c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v928c0 36 15 70 41 94c205 190 441 355 583 472c70 58 167 138 271 138h2c104 0 201 -80 271 -138c132 -109 383 -286 583 -472c26 -24 41 -58 41 -94z" />
+ <glyph glyph-name="envelope-square" unicode="&#xf199;"
+d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960zM1280 352v436c-19 -21 -40 -40 -64 -55c-94 -62 -191 -120 -284 -184c-47 -33 -105 -69 -164 -69s-117 36 -164 69
+c-93 64 -191 121 -284 185c-23 15 -41 37 -64 54v-436c0 -53 43 -96 96 -96h832c53 0 96 43 96 96zM1280 925c0 54 -40 99 -96 99h-832c-53 0 -96 -43 -96 -96c0 -54 56 -113 98 -141c88 -59 179 -114 267 -172c38 -25 101 -71 147 -71s109 46 147 71c89 58 178 115 267 174
+c39 26 98 86 98 136z" />
+ <glyph glyph-name="envira" unicode="&#xf299;" horiz-adv-x="1792"
+d="M896 720c-127 240 -244 474 -577 632c-199 94 -21 -37 -21 -37c181 -125 264 -294 361 -479c126 -241 316 -559 577 -671c260 -112 137 -50 24 34c-113 85 -273 348 -364 521zM549 177c-361 286 -341 628 -549 1359c1911 0 1467 -1269 1469 -1465l323 -327h-104l-281 285
+c-156 -17 -498 -138 -858 148z" />
+ <glyph glyph-name="eraser" unicode="&#xf12d;" horiz-adv-x="1920"
+d="M896 128l336 384h-768l-336 -384h768zM1909 1205c20 -46 12 -99 -21 -137l-896 -1024c-24 -28 -59 -44 -96 -44h-768c-50 0 -96 29 -117 75c-20 46 -12 99 21 137l896 1024c24 28 59 44 96 44h768c50 0 96 -29 117 -75z" />
+ <glyph glyph-name="ethereum" unicode="&#xf2f3;" horiz-adv-x="1064"
+d="M1064 623l-532 -325l-532 325l532 913zM532 194l532 325l-532 -775l-532 775z" />
+ <glyph glyph-name="etsy" unicode="&#xf2d7;"
+d="M518 1353v-655c232 -2 354 10 354 10c94 3 108 27 130 119l33 142h103l-14 -322l7 -319h-103l-29 127c-21 95 -62 118 -129 119c0 0 -86 8 -352 8v-556c0 -104 57 -153 177 -153h357c120 0 228 12 302 183l93 216h89c-7 -43 -55 -440 -62 -528c-329 12 -470 12 -470 12
+h-628l-376 -12v102l127 25c89 17 116 43 117 116c6 242 8 643 8 643s3 402 -8 645c-3 83 -28 103 -117 120l-127 24v102l376 -12h702s139 0 374 27c-14 -153 -31 -506 -31 -506h-93l-32 124c-39 155 -91 238 -187 238h-548c-41 0 -43 -14 -43 -39z" />
+ <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1012"
+d="M976 229l35 -159c4 -16 -5 -32 -20 -37c-4 -1 -97 -33 -217 -33c-312 0 -563 188 -647 482h-95c-18 0 -32 15 -32 32v113c0 17 14 32 32 32h66c-1 32 -1 70 1 105h-67c-18 0 -32 14 -32 32v114c0 18 14 32 32 32h98c89 280 345 466 644 466c104 0 190 -22 194 -23
+c8 -2 15 -8 20 -15c4 -7 5 -16 3 -24l-43 -159c-4 -17 -21 -27 -38 -22c-1 0 -69 17 -140 17c-168 0 -309 -91 -376 -240h468c10 0 19 -4 25 -12c6 -7 9 -17 7 -26l-24 -114c-3 -15 -16 -26 -32 -26h-488c-3 -32 -2 -66 0 -105h459c10 0 19 -5 25 -12c6 -8 8 -18 6 -27
+l-24 -112c-3 -15 -16 -26 -31 -26h-387c64 -156 208 -254 378 -254c87 0 158 24 159 24c8 3 18 2 26 -2c8 -5 13 -13 15 -21z" />
<glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792"
d="M1792 352v-192c0 -17 -15 -32 -32 -32h-1376v-192c0 -17 -14 -32 -32 -32c-9 0 -17 4 -24 10l-319 320c-6 6 -9 14 -9 22c0 9 3 17 9 23l320 320c6 6 15 9 23 9c17 0 32 -14 32 -32v-192h1376c17 0 32 -14 32 -32zM1792 896c0 -8 -3 -17 -9 -23l-320 -320
c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v192h-1376c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1376v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23z" />
- <glyph glyph-name="hand-o-up" unicode="&#xf0a6;"
-d="M1280 -64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 700c0 113 -46 189 -167 189c-19 0 -38 -2 -56 -5c-23 42 -80 65 -126 65c-24 0 -48 -6 -69 -18c-32 34 -72 53 -119 53c-32 0 -79 -14 -103 -35v331c0 69 -59 128 -128 128
-c-68 0 -128 -61 -128 -128v-576c-63 0 -128 96 -256 96c-96 0 -128 -75 -128 -160c0 -28 116 -79 139 -90c22 -12 44 -24 65 -37c53 -33 99 -71 145 -112c73 -64 163 -135 163 -241v-32h640v32c0 175 128 346 128 540zM1536 705c0 -112 -31 -218 -69 -322
-c-22 -61 -59 -160 -59 -223v-288c0 -71 -57 -128 -128 -128h-640c-71 0 -128 57 -128 128v288c0 48 -86 116 -119 145c-41 36 -82 70 -129 100c-93 58 -264 101 -264 235c0 159 87 288 256 288c44 0 87 -7 128 -22v374c0 138 117 256 255 256c140 0 257 -116 257 -256v-169
-c42 -3 82 -16 119 -37c14 2 29 3 43 3c64 0 128 -21 178 -60c189 2 300 -127 300 -312z" />
- <glyph glyph-name="pause" unicode="&#xf04c;"
-d="M1536 1344v-1408c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h512c35 0 64 -29 64 -64zM640 1344v-1408c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h512c35 0 64 -29 64 -64z" />
- <glyph glyph-name="github-square" unicode="&#xf092;"
-d="M519 336c2 3 1 9 -3 13c-5 4 -11 5 -14 2c-2 -3 -1 -9 3 -13c5 -4 11 -5 14 -2zM491 377c-3 4 -8 6 -12 4c-3 -2 -3 -8 0 -12c4 -5 9 -7 12 -5s3 8 0 13zM450 417c1 2 -1 6 -5 8c-3 1 -7 1 -8 -2c-2 -3 0 -6 4 -8c4 -1 8 -1 9 2zM471 394c2 2 2 7 -2 10c-3 4 -8 5 -10 3
-c-3 -3 -2 -7 1 -11c3 -3 8 -5 11 -2zM557 319c1 4 -3 9 -9 11s-11 0 -13 -4c-1 -4 3 -9 9 -11s11 0 13 4zM599 316c0 4 -5 8 -12 8c-6 0 -10 -4 -10 -8s5 -8 11 -8s11 4 11 8zM638 323c-1 4 -7 6 -13 5s-10 -5 -9 -9s6 -7 12 -6s10 6 10 10zM1280 640
-c0 283 -229 512 -512 512s-512 -229 -512 -512c0 -226 147 -418 350 -486c26 -5 35 11 35 25c0 12 0 52 -1 95c0 0 -142 -31 -172 61c0 0 -23 59 -57 74c0 0 -46 32 4 32c0 0 50 -4 78 -53c45 -79 120 -56 149 -43c5 33 18 56 33 69c-114 13 -234 57 -234 253
-c0 56 20 101 53 137c-5 13 -23 65 5 136c43 13 141 -53 141 -53c41 12 84 17 128 17s87 -5 128 -17c0 0 98 66 141 53c28 -71 10 -123 5 -136c33 -36 53 -81 53 -137c0 -197 -120 -240 -234 -253c18 -16 35 -47 35 -95c0 -68 -1 -123 -1 -140c0 -14 9 -30 35 -25
-c203 68 350 260 350 486zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664"
-d="M1152 704c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -70 -58 -128 -128 -128c-34 0 -67 14 -90 38l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704
-c0 -142 -43 -282 -124 -399l343 -343c23 -23 37 -56 37 -90z" />
- <glyph glyph-name="mixcloud" unicode="&#xf289;" horiz-adv-x="2304"
-d="M1645 438c0 80 -51 148 -121 175c-5 -31 -13 -62 -23 -92c-10 -32 -40 -52 -72 -52c-8 0 -16 1 -24 3c-41 14 -62 57 -49 97c15 46 23 94 23 143c0 250 -204 454 -455 454c-180 0 -342 -107 -414 -267c70 -18 135 -54 188 -106c30 -30 30 -79 0 -109s-79 -30 -109 0
-c-48 48 -112 75 -180 75c-141 0 -256 -114 -256 -255s115 -255 256 -255h1046c105 0 190 85 190 189zM1798 438c0 -189 -154 -342 -343 -342h-1046c-226 0 -409 183 -409 408c0 205 152 374 349 403c83 244 314 412 575 412c315 0 575 -241 605 -548
-c153 -33 269 -170 269 -333zM2048 438c0 -114 -33 -224 -97 -319c-15 -22 -39 -33 -64 -33c-15 0 -30 4 -43 13c-35 23 -44 71 -20 106c47 69 71 149 71 233c0 83 -24 164 -71 233c-24 35 -15 82 20 106s83 14 107 -21c64 -94 97 -204 97 -318zM2304 438
-c0 -159 -46 -312 -134 -443c-15 -22 -39 -34 -64 -34c-14 0 -29 4 -42 13c-35 24 -45 71 -21 106c70 106 108 230 108 358s-38 252 -108 357c-24 35 -14 83 21 106c35 24 82 15 106 -21c88 -130 134 -283 134 -442z" />
- <glyph glyph-name="snowflake-o" unicode="&#xf2dc;" horiz-adv-x="1570"
-d="M1519 419l-167 -33l186 -107c30 -17 41 -57 23 -87s-57 -41 -87 -23l-186 106l55 -160c28 -80 -94 -121 -121 -42l-102 300l-271 156v-313l208 -238c56 -63 -41 -148 -96 -84l-112 128v-214c0 -35 -29 -64 -64 -64s-64 29 -64 64v214l-112 -128c-55 -64 -152 21 -96 84
-l208 238v313l-271 -156l-102 -300c-27 -79 -149 -38 -121 42l55 160l-186 -106c-30 -18 -69 -7 -87 23s-7 70 23 87l186 107l-167 33c-83 17 -58 142 25 126l310 -62l271 157l-271 157l-310 -62c-4 -1 -9 -1 -13 -1c-76 0 -87 112 -12 127l167 33l-186 107
-c-30 17 -41 57 -23 87c18 31 57 41 87 23l186 -106l-55 160c-28 80 94 121 121 42l102 -300l271 -156v313l-208 238c-56 63 41 148 96 84l112 -128v214c0 35 29 64 64 64s64 -29 64 -64v-214l112 128c55 64 152 -21 96 -84l-208 -238v-313l271 156l102 300
-c27 79 149 38 121 -42l-55 -160l186 106c30 18 69 7 87 -23s7 -70 -23 -87l-186 -107l167 -33c75 -15 64 -127 -12 -127c-4 0 -9 0 -13 1l-310 62l-271 -157l271 -157l310 62c83 16 108 -109 25 -126z" />
- <glyph glyph-name="flask" unicode="&#xf0c3;" horiz-adv-x="1458"
-d="M1424 88c75 -119 22 -216 -119 -216h-1152c-141 0 -194 97 -119 216l503 793v399h-64c-35 0 -64 29 -64 64s29 64 64 64h512c35 0 64 -29 64 -64s-29 -64 -64 -64h-64v-399zM645 813l-272 -429h712l-272 429l-20 31v436h-128v-436z" />
- <glyph glyph-name="pinterest-square" unicode="&#xf0d3;"
-d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-725c33 47 87 128 108 210c0 0 9 34 53 209c27 -51 104 -95 186 -95c244 0 410 223 410 521c0 225 -191 435 -481 435c-361 0 -543 -259 -543 -475c0 -130 50 -246 156 -290c17 -7 33 0 38 19
-c3 13 11 47 15 61c5 19 3 26 -11 42c-30 37 -50 83 -50 150c0 192 144 363 374 363c204 0 316 -124 316 -291c0 -219 -97 -404 -241 -404c-79 0 -139 66 -120 147c23 96 67 200 67 269c0 62 -33 114 -102 114c-81 0 -146 -84 -146 -196c0 0 0 -72 24 -121
-c-83 -352 -98 -414 -98 -414c-22 -92 -13 -199 -7 -254h-183c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960z" />
+ <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="444"
+d="M414 288v-224c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v224c0 35 29 64 64 64h256c35 0 64 -29 64 -64zM444 1344l-28 -768c-1 -35 -31 -64 -66 -64h-256c-35 0 -65 29 -66 64l-28 768c-1 35 27 64 62 64h320c35 0 63 -29 62 -64z" />
+ <glyph glyph-name="exclamation-circle" unicode="&#xf06a;"
+d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM896 161v190c0 18 -14 33 -31 33h-192c-18 0 -33 -15 -33 -33v-190c0 -18 15 -33 33 -33h192c17 0 31 15 31 33zM894 505l18 621c0 7 -3 14 -10 18c-6 5 -15 8 -24 8h-220
+c-9 0 -18 -3 -24 -8c-7 -4 -10 -11 -10 -18l17 -621c0 -14 15 -25 34 -25h185c18 0 33 11 34 25z" />
+ <glyph glyph-name="exclamation-triangle" unicode="&#xf071;" horiz-adv-x="1792"
+d="M1024 161v190c0 18 -14 33 -32 33h-192c-18 0 -32 -15 -32 -33v-190c0 -18 14 -33 32 -33h192c18 0 32 15 32 33zM1022 535l18 459c0 6 -3 14 -10 19c-6 5 -15 11 -24 11h-220c-9 0 -18 -6 -24 -11c-7 -5 -10 -15 -10 -21l17 -457c0 -13 15 -23 34 -23h185
+c18 0 33 10 34 23zM1008 1469l768 -1408c22 -39 21 -87 -2 -126s-65 -63 -110 -63h-1536c-45 0 -87 24 -110 63s-24 87 -2 126l768 1408c22 41 65 67 112 67s90 -26 112 -67z" />
+ <glyph glyph-name="expand" unicode="&#xf065;"
+d="M755 480c0 -8 -4 -17 -10 -23l-332 -332l144 -144c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-448c-35 0 -64 29 -64 64v448c0 35 29 64 64 64c17 0 33 -7 45 -19l144 -144l332 332c6 6 15 10 23 10s17 -4 23 -10l114 -114c6 -6 10 -15 10 -23zM1536 1344v-448
+c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-144 144l-332 -332c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-114 114c-6 6 -10 15 -10 23s4 17 10 23l332 332l-144 144c-12 12 -19 28 -19 45c0 35 29 64 64 64h448c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="expeditedssl" unicode="&#xf23e;" horiz-adv-x="1792"
+d="M896 1472c-459 0 -832 -373 -832 -832s373 -832 832 -832s832 373 832 832s-373 832 -832 832zM896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM496 704c9 0 16 -7 16 -16v-480c0 -9 -7 -16 -16 -16h-32c-9 0 -16 7 -16 16
+v480c0 9 7 16 16 16h32zM896 640c71 0 128 -57 128 -128c0 -47 -26 -88 -64 -110v-114c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v114c-38 22 -64 63 -64 110c0 71 57 128 128 128zM896 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768
+s344 768 768 768zM544 928v-96c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v96c0 124 100 224 224 224s224 -100 224 -224v-96c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v96c0 194 -158 352 -352 352s-352 -158 -352 -352zM1408 192v512c0 35 -29 64 -64 64h-896
+c-35 0 -64 -29 -64 -64v-512c0 -35 29 -64 64 -64h896c35 0 64 29 64 64z" />
+ <glyph glyph-name="external-link" unicode="&#xf08e;" horiz-adv-x="1792"
+d="M1408 608v-320c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h704c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-704c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v320c0 18 14 32 32 32
+h64c18 0 32 -14 32 -32zM1792 1472v-512c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-176 176l-652 -652c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-114 114c-6 6 -10 15 -10 23s4 17 10 23l652 652l-176 176c-12 12 -19 28 -19 45c0 35 29 64 64 64h512c35 0 64 -29 64 -64z
+" />
+ <glyph glyph-name="external-link-square" unicode="&#xf14c;"
+d="M1280 608v480c0 35 -29 64 -64 64h-480c-26 0 -49 -16 -59 -39c-10 -24 -5 -52 14 -70l144 -144l-534 -534c-25 -25 -25 -65 0 -90l102 -102c25 -25 65 -25 90 0l534 534l144 -144c12 -13 28 -19 45 -19c8 0 17 2 25 5c23 10 39 33 39 59zM1536 1120v-960
+c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="eye" unicode="&#xf06e;" horiz-adv-x="1792"
+d="M1664 576c-95 147 -225 273 -381 353c40 -68 61 -146 61 -225c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 79 21 157 61 225c-156 -80 -286 -206 -381 -353c171 -264 447 -448 768 -448s597 184 768 448zM944 960c0 26 -22 48 -48 48c-167 0 -304 -137 -304 -304
+c0 -26 22 -48 48 -48s48 22 48 48c0 114 94 208 208 208c26 0 48 22 48 48zM1792 576c0 -25 -8 -48 -20 -69c-184 -303 -521 -507 -876 -507s-692 205 -876 507c-12 21 -20 44 -20 69s8 48 20 69c184 302 521 507 876 507s692 -205 876 -507c12 -21 20 -44 20 -69z" />
+ <glyph glyph-name="eye-slash" unicode="&#xf070;" horiz-adv-x="1792"
+d="M555 201l78 141c-116 84 -185 219 -185 362c0 79 21 157 61 225c-156 -80 -286 -206 -381 -353c104 -161 251 -296 427 -375zM944 960c0 26 -22 48 -48 48c-167 0 -304 -137 -304 -304c0 -26 22 -48 48 -48s48 22 48 48c0 115 94 208 208 208c26 0 48 22 48 48z
+M1307 1151c0 -2 0 -7 -1 -9c-211 -377 -420 -756 -631 -1133l-49 -89c-6 -10 -17 -16 -28 -16c-18 0 -113 58 -134 70c-10 6 -16 16 -16 28c0 16 34 70 44 87c-194 88 -357 238 -472 418c-13 20 -20 44 -20 69c0 24 7 49 20 69c198 304 507 507 876 507c60 0 121 -6 180 -17
+l54 97c6 10 16 16 28 16c18 0 112 -58 133 -70c10 -6 16 -16 16 -27zM1344 704c0 -186 -115 -352 -288 -418l280 502c5 -28 8 -56 8 -84zM1792 576c0 -26 -7 -47 -20 -69c-31 -51 -70 -100 -109 -145c-196 -225 -466 -362 -767 -362l74 132c291 25 538 202 694 444
+c-74 115 -169 216 -282 294l63 112c124 -83 249 -208 327 -337c13 -22 20 -43 20 -69z" />
+ <glyph glyph-name="eyedropper" unicode="&#xf1fb;" horiz-adv-x="1792"
+d="M1698 1442c125 -125 126 -328 0 -452l-225 -223l104 -104c13 -13 13 -33 0 -46l-210 -210c-13 -13 -33 -13 -46 0l-105 105l-603 -603c-24 -24 -56 -37 -90 -37h-203l-256 -128l-64 64l128 256v203c0 34 13 66 37 90l603 603l-105 105c-13 13 -13 33 0 46l210 210
+c13 13 33 13 46 0l104 -104l223 225c124 126 327 125 452 0zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+ <glyph glyph-name="f-droid" unicode="&#xf32a;" horiz-adv-x="1676"
+d="M47 1526v0c12 0 29 -8 36 -18l127 -164c10 3 27 6 37 6v0h1182v0c10 0 27 -3 37 -6l127 164c7 9 22 17 34 18h2h3c24 -1 44 -22 44 -46c0 -9 -4 -22 -10 -29l-133 -172c4 -11 7 -29 7 -40v0v-258c0 -61 -50 -111 -111 -111h-1182c-61 0 -111 50 -111 111v258v0
+c0 11 3 29 7 40l-133 172c-6 7 -10 20 -10 29c0 26 20 46 46 46h1zM482 1212v0c-69 0 -125 -56 -125 -125v0c0 -69 56 -125 125 -125v0c69 0 125 56 125 125v0c0 69 -56 125 -125 125v0zM1203 1212c-69 0 -125 -56 -125 -125v0c0 -69 56 -125 125 -125s125 56 125 125v0
+c0 69 -56 125 -125 125zM247 833h1182c61 0 111 -50 111 -111v-739c0 -61 -50 -111 -111 -111h-1182c-61 0 -111 50 -111 111v739c0 61 50 111 111 111zM838 740v0c-214 0 -388 -174 -388 -388s174 -388 388 -388s388 174 388 388s-174 388 -388 388zM838 670v0
+c176 0 318 -142 318 -318s-142 -317 -318 -317s-318 141 -318 317s142 318 318 318zM838 583v0c-106 0 -197 -72 -223 -171h119c20 36 59 61 104 61c67 0 120 -54 120 -121s-53 -120 -120 -120c-48 0 -89 28 -108 69h-117c24 -102 116 -180 225 -180c127 0 231 104 231 231
+s-104 231 -231 231z" />
+ <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="864"
+d="M864 1524v-264h-157c-123 0 -146 -59 -146 -144v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218c0 253 155 391 381 391c108 0 201 -8 228 -12z" />
+ <glyph glyph-name="facebook-messenger" unicode="&#xf2fe;" horiz-adv-x="1520"
+d="M760 1408c420 0 760 -318 760 -711c0 -476 -490 -817 -978 -681l-260 -144v272c-556 420 -235 1264 478 1264zM841 455l415 440l-379 -209l-197 204l-415 -441l379 210z" />
+ <glyph glyph-name="facebook-official" unicode="&#xf230;"
+d="M1451 1408c47 0 85 -38 85 -85v-1366c0 -47 -38 -85 -85 -85h-391v595h199l30 232h-229v148c0 67 18 112 115 112l122 1v207c-21 3 -94 9 -178 9c-177 0 -299 -108 -299 -306v-171h-200v-232h200v-595h-735c-47 0 -85 38 -85 85v1366c0 47 38 85 85 85h1366z" />
+ <glyph glyph-name="facebook-square" unicode="&#xf082;"
+d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-188v595h199l30 232h-229v148c0 67 18 112 115 112l122 1v207c-21 3 -94 9 -178 9c-177 0 -299 -108 -299 -306v-171h-200v-232h200v-595h-532c-159 0 -288 129 -288 288v960c0 159 129 288 288 288
+h960z" />
<glyph glyph-name="fast-backward" unicode="&#xf049;" horiz-adv-x="1792"
d="M1747 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-710c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-678c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-678
c3 7 7 13 13 19l710 710c25 25 45 16 45 -19v-710c3 7 7 13 13 19z" />
- <glyph glyph-name="volume-control-phone" unicode="&#xf2a0;" horiz-adv-x="1408"
-d="M617 -153c0 -34 -90 -84 -119 -95c-15 -6 -30 -8 -45 -8c-33 0 -66 9 -98 18c-164 49 -203 149 -268 290c-70 151 -87 295 -87 460s17 309 87 460c65 141 104 241 268 290c32 9 65 18 98 18c15 0 30 -2 45 -8c29 -11 119 -61 119 -95c0 -24 -53 -194 -64 -234
-c-6 -25 -8 -66 -27 -84c-13 -12 -34 -14 -51 -14c-47 0 -94 11 -141 11c-14 0 -35 -1 -47 -11c-16 -13 -24 -58 -30 -78c-24 -83 -37 -168 -37 -255s13 -172 37 -255c6 -20 14 -65 30 -78c12 -10 33 -11 47 -11c47 0 94 11 141 11c17 0 38 -2 51 -14c19 -18 21 -59 27 -84
-c11 -40 64 -210 64 -234zM776 760c-17 0 -33 7 -45 19c-25 25 -26 66 0 91c24 24 37 56 37 90s-13 66 -37 91c-26 25 -25 65 0 90s65 25 90 0c48 -48 75 -113 75 -181s-27 -133 -75 -181c-13 -12 -29 -19 -45 -19zM957 579c-17 0 -33 6 -45 19c-25 25 -25 65 0 90
-c72 73 112 169 112 272s-40 199 -112 272c-25 25 -25 65 0 90s65 25 90 0c97 -97 150 -225 150 -362s-53 -265 -150 -362c-12 -13 -29 -19 -45 -19zM1138 398c-17 0 -33 6 -45 19c-25 25 -25 65 0 90c120 121 187 282 187 453s-67 332 -187 453c-25 25 -25 65 0 90
-s65 25 90 0c145 -145 225 -338 225 -543s-80 -398 -225 -543c-12 -13 -29 -19 -45 -19z" />
- <glyph glyph-name="code-fork" unicode="&#xf126;" horiz-adv-x="1024"
-d="M288 64c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM288 1216c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM928 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1024 1088c0 -71 -39 -133 -96 -166
-c-3 -361 -259 -441 -429 -495c-159 -50 -211 -74 -211 -171v-26c57 -33 96 -95 96 -166c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 71 39 133 96 166v820c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192c0 -71 -39 -133 -96 -166v-497
-c51 25 105 42 154 57c186 59 292 103 294 312c-57 33 -96 95 -96 166c0 106 86 192 192 192s192 -86 192 -192z" />
- <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792"
-d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 832v-256c0 -35 -29 -64 -64 -64h-1664
-c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 1344v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="fast-forward" unicode="&#xf050;" horiz-adv-x="1792"
+d="M45 -115c-25 -25 -45 -16 -45 19v1472c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v710c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v678c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-1408c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v678
+c-3 -7 -7 -13 -13 -19l-710 -710c-25 -25 -45 -16 -45 19v710c-3 -7 -7 -13 -13 -19z" />
+ <glyph glyph-name="fax" unicode="&#xf1ac;" horiz-adv-x="1792"
+d="M288 1152c88 0 160 -72 160 -160v-1088c0 -88 -72 -160 -160 -160h-128c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h128zM1664 989c76 -44 128 -127 128 -221v-768c0 -141 -115 -256 -256 -256h-864c-88 0 -160 72 -160 160v1536c0 53 43 96 96 96h672
+c53 0 127 -31 164 -68l152 -152c37 -37 68 -111 68 -164v-163zM928 0v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM928 256v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128
+c18 0 32 14 32 32zM928 512v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1184 0v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1184 256v128
+c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1184 512v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1440 0v128c0 18 -14 32 -32 32h-128
+c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1440 256v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1440 512v128c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-128
+c0 -18 14 -32 32 -32h128c18 0 32 14 32 32zM1536 896v256h-160c-53 0 -96 43 -96 96v160h-640v-512h896z" />
+ <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280"
+d="M1280 480c0 -53 -43 -96 -96 -96c-32 0 -62 16 -80 43l-227 341h-45v-132l247 -411c6 -10 9 -21 9 -33c0 -35 -29 -64 -64 -64h-192v-272c0 -62 -50 -112 -112 -112h-160c-61 0 -112 50 -112 112v272h-192c-35 0 -64 29 -64 64c0 12 3 23 9 33l247 411v132h-45l-227 -341
+c-18 -27 -48 -43 -80 -43c-53 0 -96 43 -96 96c0 19 6 38 16 53l256 384c40 59 102 107 176 107h384c74 0 136 -48 176 -107l256 -384c10 -15 16 -34 16 -53zM864 1280c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224z" />
+ <glyph glyph-name="ffmpeg" unicode="&#xf30f;"
+d="M1158 323v179l-530 -527l-628 53l1010 1100l-167 -10l-730 -810v688l69 83l-169 -10v185l591 50l-325 -379v-161l483 553l774 66l-1134 -1194l149 -8l824 849v-806l-92 -87l234 -14v-223l-731 62z" />
+ <glyph glyph-name="fighter-jet" unicode="&#xf0fb;" horiz-adv-x="1920"
+d="M1920 576c0 0 0 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69c35 0 64 -7 64 -16s-29 -16 -64 -16h-320v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h320c35 0 64 -7 64 -16
+s-29 -16 -64 -16h-69l293 -352h64l224 -64l352 -32c288 -64 288 -96 288 -96z" />
+ <glyph glyph-name="file" unicode="&#xf15b;"
+d="M1024 1024v472c14 -9 26 -18 36 -28l408 -408c10 -10 19 -22 28 -36h-472zM896 992c0 -53 43 -96 96 -96h544v-1056c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h800v-544z" />
+ <glyph glyph-name="file-archive-o" unicode="&#xf1c6;"
+d="M640 1152h-128v128h128v-128zM768 1024h-128v128h128v-128zM640 896h-128v128h128v-128zM768 768h-128v128h128v-128zM1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68z
+M1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416h-128v-128h-128v128h-512v-1536h1280zM781 593c85 -287 107 -349 107 -349c5 -17 8 -34 8 -52c0 -111 -108 -192 -256 -192s-256 81 -256 192
+c0 18 3 35 8 52c0 0 21 62 120 396v128h128v-128h79c29 0 54 -19 62 -47zM640 128c71 0 128 29 128 64s-57 64 -128 64s-128 -29 -128 -64s57 -64 128 -64z" />
+ <glyph glyph-name="file-audio-o" unicode="&#xf1c7;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280zM620 686c12 -5 20 -17 20 -30v-544c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -16 3 -23 9l-166 167h-131c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h131l166 167c10 9 23 12 35 7zM1037 -3c-14 0 -28 5 -40 15c-28 22 -32 62 -9 90
+c65 80 100 178 100 282s-35 202 -100 282c-23 28 -19 68 9 91c27 22 68 18 90 -10c83 -102 129 -231 129 -363s-46 -261 -129 -363c-13 -16 -31 -24 -50 -24zM826 145c-15 0 -31 6 -44 17c-25 24 -27 65 -2 91c33 36 52 82 52 131s-19 95 -52 131c-25 26 -23 67 2 91
+c26 24 67 23 91 -3c56 -60 87 -137 87 -219s-31 -159 -87 -219c-13 -13 -30 -20 -47 -20z" />
+ <glyph glyph-name="file-code-o" unicode="&#xf1c9;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280zM480 768c11 14 31 17 45 6l51 -38c14 -11 17 -31 6 -45l-182 -243l182 -243c11 -14 8 -34 -6 -45l-51 -38c-14 -11 -34 -8 -45 6l-226 301c-8 11 -8 27 0 38zM1282 467c8 -11 8 -27 0 -38l-226 -301c-11 -14 -31 -17 -45 -6l-51 38c-14 11 -17 31 -6 45
+l182 243l-182 243c-11 14 -8 34 6 45l51 38c14 11 34 8 45 -6zM662 6c-18 3 -29 20 -26 37l138 831c3 18 20 29 37 26l63 -10c18 -3 29 -20 26 -37l-138 -831c-3 -18 -20 -29 -37 -26z" />
+ <glyph glyph-name="file-epub" unicode="&#xf321;"
+d="M723 132l458 458l70 -71c24 -24 24 -64 0 -88l-483 -483c-24 -24 -65 -24 -89 0l-483 483c-24 24 -24 64 0 88l483 484c24 24 65 24 89 0l298 -299l-343 -343l-114 114l229 229l-115 114l-343 -343zM1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344
+c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416h-768v-1536h1280z" />
+ <glyph glyph-name="file-excel-o" unicode="&#xf1c3;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280zM429 106h68l194 283l-189 272h-68v107h290v-107h-76l106 -159c8 -9 13 -16 17 -23c2 -3 4 -6 5 -10h2c0 -1 9 14 21 33l103 159h-74v107h279v-107h-67l-195 -282l192 -273h68v-106h-291v106h76l-107 161c-7 10 -13 16 -17 24c-2 3 -4 6 -5 10h-2
+c-3 0 -9 -15 -21 -34l-103 -161h75v-106h-281v106z" />
+ <glyph glyph-name="file-image-o" unicode="&#xf1c5;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280zM1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512c-106 0 -192 86 -192 192s86 192 192 192s192 -86 192 -192s-86 -192 -192 -192z" />
+ <glyph glyph-name="file-o" unicode="&#xf016;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280z" />
+ <glyph glyph-name="file-pdf-o" unicode="&#xf1c1;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280zM894 465c25 -20 53 -38 84 -56c42 5 81 7 117 7c67 0 152 -8 177 -49c7 -10 13 -28 2 -52c-1 -1 -2 -3 -3 -4v-1c-3 -18 -18 -38 -71 -38c-64 0 -161 29 -245 73c-139 -15 -285 -46 -392 -83c-103 -176 -182 -262 -242 -262c-10 0 -19 2 -28 7l-24 12
+c-3 1 -4 3 -6 5c-5 5 -9 16 -6 36c10 46 64 123 188 188c8 5 18 2 23 -6c1 -1 2 -3 2 -4c31 51 67 116 107 197c45 90 80 178 104 262c-32 109 -42 221 -24 287c7 25 22 40 42 40h22c15 0 27 -5 35 -15c12 -14 15 -36 9 -68c-1 -3 -2 -6 -4 -8c1 -3 1 -5 1 -8v-30
+c-1 -63 -2 -123 -14 -192c35 -105 87 -190 146 -238zM318 54c30 14 73 57 137 158c-75 -58 -122 -124 -137 -158zM716 974c-10 -28 -10 -76 -2 -132c3 16 5 31 7 44c2 17 5 31 7 43c1 3 2 5 4 8c-1 1 -1 3 -2 5c-1 18 -7 29 -13 36c0 -2 -1 -3 -1 -4zM592 313
+c88 35 186 63 284 81c-10 8 -20 15 -29 23c-49 43 -93 103 -127 176c-19 -61 -47 -126 -83 -197c-15 -28 -30 -56 -45 -83zM1238 329c-5 5 -31 24 -140 24c49 -18 94 -28 124 -28c9 0 14 0 18 1c0 1 -1 2 -2 3z" />
+ <glyph glyph-name="file-powerpoint-o" unicode="&#xf1c4;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280zM416 106h92v555h-92v107h368c46 0 92 -4 130 -19c83 -35 137 -119 137 -228s-56 -202 -146 -233c-36 -13 -75 -15 -118 -15h-137v-167h93v-106h-327v106zM769 386c31 0 57 5 78 15c42 21 62 64 62 120c0 53 -20 94 -56 115c-21 12 -48 18 -83 18h-120v-268
+h119z" />
+ <glyph glyph-name="file-text" unicode="&#xf15c;"
+d="M1468 1060c10 -10 19 -22 28 -36h-472v472c14 -9 26 -18 36 -28zM992 896h544v-1056c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h800v-544c0 -53 43 -96 96 -96zM1152 160v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64
+c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM1152 416v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM1152 672v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32z" />
+ <glyph glyph-name="file-text-o" unicode="&#xf0f6;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280zM384 736c0 18 14 32 32 32h704c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64zM1120 512c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704zM1120 256c18 0 32 -14 32 -32
+v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704z" />
+ <glyph glyph-name="file-video-o" unicode="&#xf1c8;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280zM768 768c70 0 128 -58 128 -128v-384c0 -70 -58 -128 -128 -128h-384c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h384zM1260 766c12 -5 20 -17 20 -30v-576c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -17 3 -23 9l-265 266v90l265 266
+c6 6 15 9 23 9c4 0 8 -1 12 -2z" />
+ <glyph glyph-name="file-word-o" unicode="&#xf1c2;"
+d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
+h-768v-1536h1280zM233 768h300v-107h-90l99 -438c4 -16 6 -33 7 -46l2 -21h4l4 21c3 13 4 30 8 46l144 545h114l144 -545c4 -16 6 -33 9 -46c1 -7 3 -15 3 -21h4l2 21c1 13 3 30 7 46l99 438h-90v107h300v-107h-70l-164 -661h-159l-128 485c-5 16 -6 32 -9 46l-3 24h-4
+c0 -8 -1 -16 -2 -24c-2 -16 -5 -31 -10 -46l-128 -485h-159l-164 661h-70v107z" />
+ <glyph glyph-name="files-o" unicode="&#xf0c5;" horiz-adv-x="1792"
+d="M1696 1152c53 0 96 -43 96 -96v-1216c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v288h-544c-53 0 -96 43 -96 96v672c0 53 31 127 68 164l408 408c37 37 111 68 164 68h416c53 0 96 -43 96 -96v-328c39 23 89 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323
+l-299 -299h299v299zM708 676l316 316v416h-384v-416c0 -53 -43 -96 -96 -96h-416v-640h512v256c0 53 31 127 68 164zM1664 -128v1152h-384v-416c0 -53 -43 -96 -96 -96h-416v-640h896z" />
+ <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920"
+d="M384 -64v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM384 320v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM384 704v128c0 35 -29 64 -64 64h-128
+c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1408 -64v512c0 35 -29 64 -64 64h-768c-35 0 -64 -29 -64 -64v-512c0 -35 29 -64 64 -64h768c35 0 64 29 64 64zM384 1088v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128
+c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1792 -64v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1408 704v512c0 35 -29 64 -64 64h-768c-35 0 -64 -29 -64 -64v-512c0 -35 29 -64 64 -64h768c35 0 64 29 64 64z
+M1792 320v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1792 704v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1792 1088v128c0 35 -29 64 -64 64h-128
+c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1920 1248v-1344c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1344c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408"
+d="M1403 1241c10 -24 5 -52 -14 -70l-493 -493v-742c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-256 256c-12 12 -19 28 -19 45v486l-493 493c-19 18 -24 46 -14 70c10 23 33 39 59 39h1280c26 0 49 -16 59 -39z" />
+ <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408"
+d="M1408 -160v-64c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM1152 896c0 -383 -448 -417 -448 -672c0 -70 35 -163 67 -224l-4 1l1 -1c-276 127 -512 302 -512 640c0 383 448 417 448 672c0 70 -35 163 -66 224l3 -1
+l-1 1c276 -127 512 -302 512 -640z" />
+ <glyph glyph-name="fire-extinguisher" unicode="&#xf134;" horiz-adv-x="1408"
+d="M512 1344c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 1376v-320c0 -10 -4 -19 -12 -25c-6 -5 -13 -7 -20 -7c-2 0 -4 0 -7 1l-448 96c-14 3 -25 16 -25 31h-256v-102c146 -30 256 -159 256 -314v-800c0 -35 -29 -64 -64 -64h-512
+c-35 0 -64 29 -64 64v800c0 143 94 265 224 305v111h-32c-212 0 -326 -219 -327 -221c-11 -22 -34 -35 -57 -35c-10 0 -20 2 -29 7c-31 16 -44 54 -28 86c5 10 105 204 306 269c-15 25 -25 54 -25 86c0 88 72 160 160 160s160 -72 160 -160c0 -23 -5 -44 -14 -64h302
+c0 15 11 28 25 31l448 96c3 1 5 1 7 1c7 0 14 -2 20 -7c8 -6 12 -15 12 -25z" />
<glyph glyph-name="firefox" unicode="&#xf269;" horiz-adv-x="1792"
d="M903 -256c-386 0 -693 226 -834 549c-158 359 -32 934 249 1188l-11 -281c14 18 121 23 138 0c58 111 245 194 395 197c-57 -48 -189 -223 -178 -312c73 -23 185 -24 244 -28c18 -10 15 -71 -21 -121c0 0 -47 -65 -174 -88l15 -189l-139 67c-45 -114 63 -215 175 -196
c124 21 168 102 255 97c86 -5 120 -53 109 -98c0 0 -14 -54 -107 -45c-79 -125 -184 -180 -354 -165c258 -214 606 -20 694 155c88 174 11 433 -77 506c104 -45 176 -91 214 -192c20 224 -83 478 -267 627c346 -101 557 -369 563 -797s-379 -874 -889 -874z" />
- <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1393"
-d="M1393 321c-25 -79 -65 -163 -123 -250c-86 -131 -172 -196 -257 -196c-34 0 -80 11 -140 32c-59 22 -110 32 -151 32c-40 0 -88 -11 -142 -33c-55 -23 -99 -34 -132 -34c-103 0 -202 87 -301 259c-97 172 -147 339 -147 503c0 153 38 277 113 374c75 96 169 144 284 144
-c49 0 107 -10 177 -30c69 -20 115 -30 138 -30c29 0 77 11 143 34c66 22 124 34 173 34c80 0 151 -22 213 -65c35 -24 70 -58 104 -100c-52 -44 -90 -83 -114 -118c-43 -62 -65 -131 -65 -207c0 -82 23 -157 69 -223s99 -108 158 -126zM1017 1494c0 -41 -10 -87 -29 -136
-c-20 -50 -51 -96 -93 -138c-36 -36 -72 -60 -108 -72c-23 -7 -57 -13 -104 -17c2 99 28 185 78 257s134 121 250 148c2 -9 4 -16 5 -22c0 -7 1 -13 1 -20z" />
+ <glyph glyph-name="first-order" unicode="&#xf2b0;"
+d="M1322 640c0 -26 -1 -51 -5 -76l-236 14l224 -78c-13 -51 -33 -98 -58 -141l-214 103l177 -158c-30 -41 -66 -77 -107 -108l-157 178l103 -215c-43 -26 -90 -45 -140 -59l-79 228l14 -240c-25 -4 -50 -6 -76 -6c-25 0 -51 2 -76 6l14 238l-78 -226c-50 13 -97 33 -140 59
+l103 215l-157 -178c-41 30 -77 67 -108 108l178 158l-214 -104c-25 44 -45 91 -58 141l224 79l-237 -14c-3 25 -5 50 -5 76s2 52 5 77l238 -14l-225 79c13 50 33 97 58 140l214 -104l-177 159c31 41 67 77 107 108l158 -178l-103 215c43 25 90 45 140 58l77 -224l-13 236
+c24 4 50 6 75 6c26 0 51 -2 76 -6l-14 -237l78 225c50 -13 97 -33 140 -59l-103 -214l158 178c40 -31 76 -67 107 -108l-177 -159l213 104c26 -43 45 -91 58 -141l-224 -78l237 14c4 -25 5 -51 5 -77zM1352 640c0 325 -262 588 -584 588c-323 0 -584 -263 -584 -588
+c0 -324 261 -587 584 -587c322 0 584 263 584 587zM1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
+ <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1728"
+d="M256 1280c0 -46 -25 -87 -64 -110v-1266c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v1266c-39 23 -64 64 -64 110c0 71 57 128 128 128s128 -57 128 -128zM1728 1216v-763c0 -37 -23 -51 -52 -66c-113 -61 -238 -116 -369 -116c-184 0 -272 140 -490 140
+c-159 0 -326 -72 -464 -146c-11 -6 -21 -9 -33 -9c-35 0 -64 29 -64 64v742c0 24 12 41 31 55c24 16 53 30 79 43c126 64 279 120 421 120c157 0 280 -52 419 -117c28 -14 57 -19 88 -19c157 0 326 136 370 136c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="flag-checkered" unicode="&#xf11e;" horiz-adv-x="1728"
+d="M768 536v192c-122 -11 -269 -60 -384 -117v-185c116 54 260 100 384 110zM768 954v197c-126 -6 -274 -65 -384 -126v-189c118 61 260 113 384 118zM1600 491v184c-91 -45 -250 -112 -384 -71v224c-13 4 -26 9 -39 15c-115 58 -209 112 -360 112c-16 0 -32 -1 -49 -3v-222
+h19c151 0 275 -54 390 -111c13 -6 26 -11 39 -15v-188c27 -11 57 -17 91 -17c111 0 231 59 293 92zM1600 918v189c-80 -43 -192 -91 -306 -91c-27 0 -53 2 -78 8v-196c134 -38 293 39 384 90zM256 1280c0 -47 -26 -88 -64 -110v-1266c0 -18 -14 -32 -32 -32h-64
+c-18 0 -32 14 -32 32v1266c-38 22 -64 63 -64 110c0 71 57 128 128 128s128 -57 128 -128zM1728 1216v-763c0 -24 -14 -46 -35 -57c-4 -2 -10 -5 -17 -9c-64 -34 -215 -116 -369 -116c-59 0 -112 12 -158 35l-28 14c-101 51 -181 91 -304 91c-144 0 -347 -75 -464 -146
+c-10 -6 -22 -9 -33 -9s-22 3 -32 8c-20 12 -32 33 -32 56v742c0 22 12 43 31 55c64 38 290 163 500 163c167 0 303 -61 418 -117c26 -13 56 -19 89 -19c118 0 248 75 310 112c13 7 24 13 31 17c20 10 43 9 62 -2c19 -12 31 -33 31 -55z" />
+ <glyph glyph-name="flag-o" unicode="&#xf11d;" horiz-adv-x="1728"
+d="M1600 491v616c-80 -43 -192 -91 -306 -91c-53 0 -102 10 -145 32c-107 53 -223 104 -362 104c-129 0 -287 -63 -403 -127v-599c132 61 300 113 433 113c154 0 254 -51 361 -104l28 -14c28 -14 62 -22 101 -22c111 0 231 59 293 92zM256 1280c0 -47 -26 -88 -64 -110
+v-1266c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v1266c-38 22 -64 63 -64 110c0 71 57 128 128 128s128 -57 128 -128zM1728 1216v-763c0 -24 -14 -46 -35 -57c-4 -2 -10 -5 -17 -9c-64 -34 -215 -116 -369 -116c-59 0 -112 12 -158 35l-28 14
+c-101 51 -181 91 -304 91c-144 0 -347 -75 -464 -146c-10 -6 -22 -9 -33 -9s-22 3 -32 8c-20 12 -32 33 -32 56v742c0 22 12 43 31 55c64 38 290 163 500 163c167 0 303 -61 418 -117c26 -13 56 -19 89 -19c118 0 248 75 310 112c13 7 24 13 31 17c20 10 43 9 62 -2
+c19 -12 31 -33 31 -55z" />
+ <glyph glyph-name="flask" unicode="&#xf0c3;" horiz-adv-x="1458"
+d="M1424 88c75 -119 22 -216 -119 -216h-1152c-141 0 -194 97 -119 216l503 793v399h-64c-35 0 -64 29 -64 64s29 64 64 64h512c35 0 64 -29 64 -64s-29 -64 -64 -64h-64v-399zM645 813l-272 -429h712l-272 429l-20 31v436h-128v-436z" />
+ <glyph glyph-name="flickr" unicode="&#xf16e;"
+d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960zM698 640c0 117 -95 212 -212 212s-212 -95 -212 -212s95 -212 212 -212s212 95 212 212zM1262 640c0 117 -95 212 -212 212
+s-212 -95 -212 -212s95 -212 212 -212s212 95 212 212z" />
+ <glyph glyph-name="floppy-o" unicode="&#xf0c7;"
+d="M384 0h768v384h-768v-384zM1280 0h128v896c0 19 -17 60 -30 73l-281 281c-14 14 -53 30 -73 30v-416c0 -53 -43 -96 -96 -96h-576c-53 0 -96 43 -96 96v416h-128v-1280h128v416c0 53 43 96 96 96h832c53 0 96 -43 96 -96v-416zM896 928v320c0 17 -15 32 -32 32h-192
+c-17 0 -32 -15 -32 -32v-320c0 -17 15 -32 32 -32h192c17 0 32 15 32 32zM1536 896v-928c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h928c53 0 126 -30 164 -68l280 -280c38 -38 68 -111 68 -164z" />
+ <glyph glyph-name="folder" unicode="&#xf07b;" horiz-adv-x="1664"
+d="M1664 928v-704c0 -123 -101 -224 -224 -224h-1216c-123 0 -224 101 -224 224v960c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h672c123 0 224 -101 224 -224z" />
+ <glyph glyph-name="folder-o" unicode="&#xf114;" horiz-adv-x="1664"
+d="M1536 224v704c0 53 -43 96 -96 96h-704c-53 0 -96 43 -96 96v64c0 53 -43 96 -96 96h-320c-53 0 -96 -43 -96 -96v-960c0 -53 43 -96 96 -96h1216c53 0 96 43 96 96zM1664 928v-704c0 -123 -101 -224 -224 -224h-1216c-123 0 -224 101 -224 224v960
+c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h672c123 0 224 -101 224 -224z" />
+ <glyph glyph-name="folder-open" unicode="&#xf07c;" horiz-adv-x="1879"
+d="M1879 584c0 -24 -15 -48 -31 -66l-336 -396c-58 -68 -176 -122 -264 -122h-1088c-36 0 -87 11 -87 56c0 24 15 48 31 66l336 396c58 68 176 122 264 122h1088c36 0 87 -11 87 -56zM1536 928v-160h-832c-125 0 -280 -71 -361 -167l-337 -396l-5 -6c0 8 -1 17 -1 25v960
+c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h544c123 0 224 -101 224 -224z" />
+ <glyph glyph-name="folder-open-o" unicode="&#xf115;" horiz-adv-x="1909"
+d="M1781 605c0 28 -31 35 -53 35h-1088c-53 0 -123 -33 -157 -74l-294 -363c-9 -12 -18 -25 -18 -40c0 -28 31 -35 53 -35h1088c53 0 123 33 157 75l294 363c9 11 18 24 18 39zM640 768h768v160c0 53 -43 96 -96 96h-576c-53 0 -96 43 -96 96v64c0 53 -43 96 -96 96h-320
+c-53 0 -96 -43 -96 -96v-853l256 315c58 71 165 122 256 122zM1909 605c0 -44 -19 -86 -46 -120l-295 -363c-57 -70 -166 -122 -256 -122h-1088c-123 0 -224 101 -224 224v960c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h544c123 0 224 -101 224 -224v-160h192
+c68 0 136 -31 166 -95c10 -21 15 -44 15 -68z" />
+ <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664"
+d="M725 977l-170 -450c99 -1 198 -4 297 -4c19 0 38 1 57 2c-52 152 -113 307 -184 452zM0 -128l2 79c94 29 196 9 238 117l237 616l280 724h128c4 -7 8 -14 11 -21l205 -480c75 -177 144 -356 220 -532c45 -104 80 -211 130 -313c7 -16 21 -46 35 -57
+c33 -26 125 -32 172 -50c3 -19 6 -38 6 -57c0 -9 -1 -17 -1 -26c-127 0 -254 16 -381 16c-131 0 -262 -11 -393 -15c0 26 1 52 4 78l131 28c27 6 80 13 80 50c0 36 -129 333 -145 374l-450 2c-26 -58 -127 -320 -127 -358c0 -77 147 -80 204 -88c1 -19 1 -38 1 -58
+c0 -9 -1 -18 -2 -27c-116 0 -233 20 -349 20c-14 0 -34 -6 -48 -8c-63 -11 -125 -14 -188 -14z" />
+ <glyph glyph-name="font-awesome" unicode="&#xf2b4;" horiz-adv-x="1499"
+d="M1499 1024v-839c0 -31 -20 -54 -49 -62c-107 -32 -227 -52 -338 -52c-150 0 -277 59 -443 59c-123 0 -250 -20 -370 -48v-338h-160v1368c-84 33 -139 115 -139 205c0 121 98 219 219 219s219 -98 219 -219c0 -90 -55 -172 -139 -205v-68c112 26 228 44 343 44
+c66 0 132 -5 198 -15c86 -13 173 -43 261 -43c55 0 111 7 165 18c41 8 135 40 169 40c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="fonticons" unicode="&#xf280;"
+d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925c41 0 57 -15 56 -79l174 21c0 153 -105 181 -222 181c-174 0 -265 -70 -265 -240v-72h-96v-128h76
+c10 0 20 0 20 -8v-382c0 -19 -5 -25 -23 -27l-73 -7v-88h448v86l-149 14c-18 2 -11 5 -11 25v387h191l38 128h-231c-10 0 2 7 2 15v80c0 60 2 94 65 94zM1248 96v86l-54 9c-19 3 -10 5 -10 25v520h-275l-23 -101l83 -22c13 -4 23 -13 23 -27v-370c0 -19 -8 -23 -26 -25
+l-70 -9v-86h352z" />
+ <glyph glyph-name="fork-awesome" unicode="&#xf2e3;" horiz-adv-x="1533"
+d="M766 1404v0c423 0 767 -343 767 -766v-1v-2c0 -8 -1 -17 -1 -25v-2c-14 -388 -318 -703 -701 -735v1c-18 -2 -47 -2 -65 -2s-47 1 -65 3v-2c-383 32 -685 347 -700 735v2c0 8 -1 17 -1 25v2v1c0 423 343 766 766 766zM594 1085h-66c-35 -251 -54 -525 -29 -712
+s145 -157 181 -351c5 -29 10 -59 14 -89c20 -2 52 -4 72 -4s52 2 72 4c4 30 9 60 14 89c36 194 156 164 181 351s6 456 -28 712h-65c3 -190 12 -430 -8 -640c-8 -89 -103 -87 -108 0c-13 208 -15 428 -26 639h-64c-11 -211 -18 -431 -26 -643c-3 -82 -100 -81 -108 0
+c-19 208 -10 453 -6 644z" />
+ <glyph glyph-name="fort-awesome" unicode="&#xf286;" horiz-adv-x="1664"
+d="M640 528v224c0 9 -7 16 -16 16h-96c-9 0 -16 -7 -16 -16v-224c0 -9 7 -16 16 -16h96c9 0 16 7 16 16zM1152 528v224c0 9 -7 16 -16 16h-96c-9 0 -16 -7 -16 -16v-224c0 -9 7 -16 16 -16h96c9 0 16 7 16 16zM1664 496v-752h-640v320c0 106 -86 192 -192 192
+s-192 -86 -192 -192v-320h-640v752c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v624c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 21 28 16 41 16v391c-19 9 -32 29 -32 50c0 30 25 55 55 55s55 -25 55 -55
+c0 -21 -13 -41 -32 -50v-17c27 6 55 10 83 10c41 0 80 -15 114 -15c31 0 66 15 84 15c9 0 16 -7 16 -16v-210c0 -24 -81 -28 -97 -28c-37 0 -72 15 -110 15c-30 0 -61 -5 -90 -12v-133c13 0 41 5 41 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112
+c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-624h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16z" />
+ <glyph glyph-name="forumbee" unicode="&#xf211;"
+d="M934 1386c-423 -161 -756 -499 -914 -923c-13 58 -20 117 -20 176c0 423 342 766 765 766c57 0 114 -7 169 -19zM1203 1267c62 -43 117 -95 164 -155c-518 -151 -923 -558 -1071 -1077c-59 46 -112 100 -155 162c149 514 549 918 1062 1070zM470 -67
+c154 475 526 849 999 1006c27 -62 45 -128 54 -195c-390 -160 -700 -472 -859 -863c-67 9 -132 26 -194 52zM1536 -125c-124 32 -247 70 -367 115c-88 -55 -187 -92 -290 -107c146 273 371 499 643 646c-14 -100 -49 -198 -101 -284c45 -121 83 -245 115 -370z" />
+ <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1542"
+d="M45 -115c-25 -25 -45 -16 -45 19v1472c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v710c0 35 20 44 45 19l710 -710c25 -25 25 -65 0 -90l-710 -710c-25 -25 -45 -16 -45 19v710c-3 -7 -7 -13 -13 -19z" />
+ <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1192"
+d="M956 1102l37 194c7 32 -17 57 -44 57h-712c-32 0 -54 -29 -54 -54v-1101c0 -3 3 -4 6 -1c262 315 291 352 291 352c30 35 42 41 86 41h239c33 0 52 28 55 44s31 162 37 191s-21 59 -48 59h-294c-39 0 -67 28 -67 67v42c0 39 28 66 67 66h346c24 0 51 22 55 43zM1183 1324
+c-37 -180 -148 -749 -158 -790c-12 -47 -30 -129 -144 -129h-271c-11 0 -12 1 -22 -10c0 0 -7 -8 -426 -494c-33 -38 -87 -31 -107 -23s-55 32 -55 98v1410c0 58 36 150 158 150h888c130 0 165 -74 137 -212zM1183 1324l-158 -790c10 41 121 610 158 790z" />
+ <glyph glyph-name="free-code-camp" unicode="&#xf2c5;" horiz-adv-x="2304"
+d="M453 -101c0 -28 -25 -54 -53 -54c-4 0 -9 2 -13 3c-56 13 -128 97 -162 140c-156 197 -225 427 -225 676c0 232 70 431 213 614c33 43 131 156 189 156c25 0 51 -20 51 -46c0 -30 -44 -71 -63 -90c-55 -57 -106 -115 -147 -184c-85 -142 -119 -284 -119 -449
+c0 -177 33 -337 123 -491c38 -65 83 -119 136 -173c21 -23 70 -68 70 -102zM1796 33c0 -37 -25 -68 -64 -68h-1081c-35 0 -64 29 -64 64c0 37 25 68 64 68h1081c35 0 64 -29 64 -64zM1581 644c0 -84 -19 -162 -67 -233c-33 -49 -100 -112 -153 -139c-8 -5 -18 -10 -27 -10
+c-8 0 -23 9 -23 18c0 29 122 98 122 232c0 44 -11 93 -35 130c-7 10 -32 42 -46 42c-3 0 -3 -2 -3 -5c0 -24 15 -47 15 -72c0 -32 -39 -48 -66 -48c-47 0 -66 33 -66 76c0 29 3 59 3 88c0 21 -1 27 -10 46c-14 27 -60 82 -93 82c-9 0 -12 0 -12 -9c0 -14 32 -29 32 -80
+c0 -133 -183 -157 -183 -290c0 -60 8 -110 42 -160c21 -31 44 -49 79 -63c9 -3 18 -4 18 -15s-9 -16 -18 -16c-5 0 -28 9 -33 11c-154 56 -271 190 -271 358c0 199 239 373 239 564c0 37 -6 63 -25 94c-11 18 -38 53 -56 64c-8 4 -19 11 -19 21c0 17 29 20 41 20
+c36 0 77 -13 110 -29c139 -66 168 -167 192 -307c6 -33 18 -138 66 -138c31 0 51 21 51 51c0 45 -40 94 -40 119c0 7 4 10 10 10c25 0 77 -53 93 -70c97 -103 133 -203 133 -342zM2304 615c0 -176 -47 -352 -138 -503c-42 -70 -180 -266 -271 -266c-21 0 -46 26 -46 47
+c0 34 117 143 146 180c124 156 183 332 183 531c0 164 -20 297 -93 446c-45 92 -92 154 -163 228c-23 24 -73 69 -73 105c0 25 26 52 51 52c66 0 161 -122 196 -169c134 -180 191 -365 206 -587c1 -21 2 -43 2 -64z" />
+ <glyph glyph-name="freedombox" unicode="&#xf2fd;" horiz-adv-x="1816"
+d="M152 1274v0h10c90 -2 180 -36 272 -79c4 -2 11 -5 15 -7c7 -3 13 -7 20 -10c116 -58 199 -126 267 -210l3 -3c2 -2 4 -7 6 -9l-255 -148l9 -492l37 465l50 -29l10 -491l37 464l49 -29l10 -490l37 463l50 -29l9 -488l37 461l50 -29l10 -487l37 466l422 245l-267 155
+c2 3 5 5 7 8s5 6 7 9c70 83 157 151 278 208c101 48 200 86 296 86h9c45 -1 84 -15 110 -44c80 -92 -8 -177 -39 -293c-41 -155 6 -321 -118 -429c-43 -37 -93 -47 -143 -52c65 -77 103 -183 82 -292c-4 -21 -10 -42 -18 -61c-6 -17 -13 -32 -22 -47l-9 -15
+c-2 -2 -3 -5 -5 -7c-63 -94 -168 -154 -281 -161c-6 0 -11 -1 -17 -1h-9c-15 0 -39 3 -53 5c-19 3 -49 12 -67 19c-3 1 -7 2 -9 3c-69 29 -124 80 -159 143c-2 3 -4 5 -5 8c-2 3 -5 3 -7 0c-1 -3 -3 -5 -5 -8s-2 -5 -4 -8c-48 -81 -131 -140 -231 -157c-12 -2 -23 -3 -35 -4
+c-6 0 -12 -1 -18 -1c-169 -3 -327 118 -361 292c-21 109 18 215 83 292c-50 5 -101 15 -144 52c-124 108 -78 274 -119 429c-31 116 -118 201 -38 293c26 29 65 43 110 44h9z" />
+ <glyph glyph-name="friendica" unicode="&#xf2e6;" horiz-adv-x="1520"
+d="M0 1128c0 152 123 276 274 276h973c151 0 273 -124 273 -276v-980c0 -152 -122 -276 -273 -276h-973c-151 0 -274 124 -274 276v980zM1247 1343h-244v-368h-486v-310l485 3l1 -367h-486v-368h730c118 0 212 95 212 215v980c0 120 -94 215 -212 215z" />
+ <glyph glyph-name="frown-o" unicode="&#xf119;"
+d="M1134 307c11 -34 -8 -69 -41 -80c-34 -11 -70 8 -81 42c-33 107 -132 179 -244 179s-211 -72 -244 -179c-11 -34 -47 -53 -80 -42c-34 11 -53 46 -42 80c50 161 197 269 366 269s316 -108 366 -269zM640 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
+s128 -57 128 -128zM1152 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768
+s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="funkwhale" unicode="&#xf339;"
+d="M331 1335v0c77 -3 156 -18 221 -53v0c60 -31 108 -42 144 -56c34 -13 57 -33 69 -74c12 41 35 61 69 74c36 14 84 25 143 56c87 47 199 58 297 53h3l1 -3c19 -57 2 -120 -32 -168s-85 -82 -136 -109c-52 -27 -107 -32 -155 -60v0v0c-32 -17 -51 -38 -71 -69v0v0
+c-30 -46 -29 -104 -29 -104v-1l-5 -65v-1s-5 -17 -18 -34s-35 -34 -66 -34c-29 0 -50 17 -64 34s-19 34 -19 34l-1 1l-4 65v1s1 58 -29 104v0v0c-20 31 -39 50 -71 69c-48 28 -104 33 -156 60c-51 26 -102 61 -139 109v0v0c-34 49 -50 111 -31 168v3h3c24 1 50 1 76 0z
+M330 1327c76 -3 156 -19 219 -53v0v0c61 -32 109 -42 144 -56s57 -30 67 -77l1 -3h8l1 3c10 46 32 63 67 77s84 24 144 56v0c84 45 194 58 290 53c16 -53 1 -114 -32 -159c-33 -46 -82 -79 -133 -105c-50 -26 -105 -32 -155 -61v0c-34 -18 -54 -40 -74 -72
+c-32 -49 -31 -109 -31 -109l-4 -64c0 -1 -5 -16 -17 -31c-12 -16 -31 -31 -59 -31c-26 0 -44 15 -57 31c-12 15 -19 30 -19 31l-4 65v-1s2 61 -30 109c-20 32 -41 53 -74 72v0v0c-50 29 -106 35 -156 61v0v0c-51 25 -100 58 -136 105c-33 46 -48 106 -31 159c23 1 47 1 71 0
+zM424 1059c51 -26 107 -31 156 -60c32 -19 53 -40 73 -71c31 -47 29 -106 29 -106l4 -66s25 -65 80 -65c59 0 80 65 80 65l4 66s-1 58 30 106c20 31 40 54 73 71c49 29 104 34 155 60s101 60 135 107s49 110 31 165c-97 5 -209 -7 -295 -53c-119 -63 -192 -41 -213 -136h-2
+c-21 96 -94 73 -214 136c-86 46 -198 58 -295 53c-19 -55 -2 -117 32 -165c36 -48 86 -81 137 -107zM18 733h98c10 0 18 -9 18 -19c0 -350 284 -632 633 -632c348 0 633 283 633 632c0 10 8 19 18 19h100c10 0 18 -9 18 -19c0 -423 -345 -768 -768 -768s-768 345 -768 768
+c0 10 8 19 18 19zM18 724h98c5 0 10 -5 10 -10c0 -354 288 -641 641 -641c352 0 641 288 641 641c0 5 5 10 10 10h100c5 0 10 -5 10 -10c0 -419 -341 -759 -760 -759s-760 340 -760 759c0 5 5 10 10 10zM1518 728h-100c-7 0 -14 -7 -14 -14c0 -351 -287 -637 -637 -637
+c-351 0 -637 285 -637 637c0 7 -7 14 -14 14h-98c-7 0 -14 -7 -14 -14c0 -421 343 -763 764 -763s764 342 764 763c0 7 -7 14 -14 14v0zM269 733h98c10 0 18 -9 18 -19c0 -211 171 -382 382 -382s383 171 383 382c0 10 8 19 18 19h99c10 0 19 -9 19 -19
+c0 -285 -233 -517 -518 -517c-287 0 -520 232 -518 517c0 10 9 19 19 19zM269 724h98c5 0 10 -5 10 -10c0 -216 174 -390 390 -390s391 174 391 390c0 5 5 10 10 10h99c5 0 10 -5 10 -10c0 -280 -229 -509 -509 -509c-282 0 -511 229 -509 509v0c0 5 5 10 10 10zM768 201
+c283 0 513 230 513 513c0 7 -7 14 -14 14h-99c-7 0 -14 -7 -14 -14c0 -213 -174 -386 -387 -386s-386 173 -386 386c0 7 -7 14 -14 14h-98c-7 0 -14 -7 -14 -14c-2 -283 229 -513 513 -513zM517 733h100c10 0 18 -8 18 -18c0 -74 60 -132 133 -132c74 0 133 59 133 132
+c0 10 8 18 18 18h100c10 0 18 -8 18 -18c0 -148 -121 -268 -269 -268s-269 119 -269 268c0 10 8 18 18 18zM517 725h100c5 0 10 -5 10 -10c0 -78 64 -141 141 -141c78 0 141 64 141 141c0 5 5 10 10 10h100c5 0 9 -5 9 -10c0 -144 -116 -260 -260 -260s-260 116 -260 260
+c0 5 4 10 9 10v0zM768 451c146 0 265 118 265 264c0 7 -7 14 -14 14h-100c-7 0 -14 -7 -14 -14c0 -75 -61 -137 -137 -137c-75 0 -137 61 -137 137c0 7 -7 14 -14 14h-100c-7 0 -14 -7 -14 -14c0 -147 119 -264 265 -264z" />
+ <glyph glyph-name="futbol-o" unicode="&#xf1e3;" horiz-adv-x="1792"
+d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM1515 186c94 128 149 284 149 454v3l-102 -89l-240 224l63 323l134 -12c-95 131 -231 232 -389 282l53 -124l-287 -159l-287 159
+l53 124c-158 -50 -294 -151 -389 -282l135 12l62 -323l-240 -224l-102 89v-3c0 -170 55 -326 149 -454l30 132l326 -40l139 -298l-116 -69c75 -25 156 -39 240 -39s165 14 240 39l-116 69l139 298l326 40z" />
<glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920"
d="M832 448v128c0 18 -14 32 -32 32h-192v192c0 18 -14 32 -32 32h-128c-18 0 -32 -14 -32 -32v-192h-192c-18 0 -32 -14 -32 -32v-128c0 -18 14 -32 32 -32h192v-192c0 -18 14 -32 32 -32h128c18 0 32 14 32 32v192h192c18 0 32 14 32 32zM1408 384c0 71 -57 128 -128 128
s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1664 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1920 512c0 -283 -229 -512 -512 -512c-130 0 -248 49 -338 128h-220c-90 -79 -208 -128 -338 -128c-283 0 -512 229 -512 512
s229 512 512 512h896c283 0 512 -229 512 -512z" />
- <glyph glyph-name="cc-stripe" unicode="&#xf1f5;" horiz-adv-x="2304"
-d="M1597 633c0 -46 -7 -81 -21 -106c-12 -22 -31 -35 -52 -35c-15 0 -29 3 -41 9v224c26 27 49 30 57 30c38 0 57 -42 57 -122zM2035 669h-110c4 67 22 98 56 98s52 -32 54 -98zM476 534c0 84 -51 119 -134 149c-44 16 -68 29 -68 49c0 17 14 26 38 26c46 0 92 -17 124 -33
-l18 112c-25 12 -77 32 -149 32c-51 0 -93 -13 -123 -38c-32 -26 -48 -64 -48 -109c0 -82 50 -118 132 -147c52 -19 70 -32 70 -53c0 -20 -17 -31 -48 -31c-38 0 -101 19 -142 43l-18 -113c35 -20 100 -41 168 -41c54 0 98 13 129 37c34 27 51 66 51 117zM771 749l19 111h-96
-v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219c0 -57 15 -96 44 -120c25 -20 61 -30 111 -30c39 0 62 7 79 11v118c-9 -2 -30 -7 -44 -7c-29 0 -42 16 -42 50v197h77zM1087 724v139c-10 2 -19 3 -28 3c-42 0 -76 -22 -89 -62l-10 56h-131v-471h150v306c19 23 46 31 82 31
-c8 0 16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638c0 80 -15 141 -45 179c-27 35 -64 52 -111 52c-43 0 -81 -18 -117 -56l-8 47h-132v-645l150 25v151c23 -7 47 -11 68 -11c37 0 92 10 134 56c41 44 61 112 61 202zM1278 986c0 44 -35 79 -79 79s-79 -35 -79 -79
-s35 -80 79 -80s79 36 79 80zM2176 629c0 75 -16 134 -48 176c-33 42 -82 64 -144 64c-128 0 -207 -94 -207 -246c0 -84 21 -148 63 -188c37 -37 91 -55 161 -55c64 0 123 15 160 40l-16 103c-37 -20 -80 -31 -128 -31c-29 0 -49 6 -63 19c-16 13 -25 35 -28 66h248
-c1 7 2 41 2 52zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048c70 0 128 -58 128 -128z" />
- <glyph glyph-name="quote-left" unicode="&#xf10d;" horiz-adv-x="1664"
-d="M768 576v-384c0 -106 -86 -192 -192 -192h-384c-106 0 -192 86 -192 192v704c0 282 230 512 512 512h64c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-64c-141 0 -256 -115 -256 -256v-32c0 -53 43 -96 96 -96h224c106 0 192 -86 192 -192zM1664 576v-384
-c0 -106 -86 -192 -192 -192h-384c-106 0 -192 86 -192 192v704c0 282 230 512 512 512h64c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-64c-141 0 -256 -115 -256 -256v-32c0 -53 43 -96 96 -96h224c106 0 192 -86 192 -192z" />
- <glyph glyph-name="user-times" unicode="&#xf235;" horiz-adv-x="2039"
-d="M704 640c-212 0 -384 172 -384 384s172 384 384 384s384 -172 384 -384s-172 -384 -384 -384zM1781 320l249 -249c6 -6 9 -14 9 -23c0 -8 -3 -16 -9 -22l-136 -136c-6 -6 -14 -9 -22 -9c-9 0 -17 3 -23 9l-249 249l-249 -249c-6 -6 -14 -9 -23 -9c-8 0 -16 3 -22 9
-l-136 136c-6 6 -9 14 -9 22c0 9 3 17 9 23l249 249l-249 249c-6 6 -9 14 -9 23c0 8 3 16 9 22l136 136c6 6 14 9 22 9c9 0 17 -3 23 -9l249 -249l249 249c6 6 14 9 23 9c8 0 16 -3 22 -9l136 -136c6 -6 9 -14 9 -22c0 -9 -3 -17 -9 -23zM1283 320l-181 -181
-c-24 -24 -37 -57 -37 -91c0 -33 13 -66 37 -90l83 -83c-14 -2 -29 -3 -44 -3h-874c-160 0 -267 96 -267 259c0 226 53 573 346 573c16 0 27 -7 39 -17c96 -76 194 -122 319 -122s223 46 319 122c12 10 23 17 39 17c19 0 38 -2 57 -6c-33 -32 -54 -58 -54 -106
-c0 -34 13 -67 37 -91z" />
- <glyph glyph-name="plus-square-o" unicode="&#xf196;" horiz-adv-x="1408"
-d="M1152 736v-64c0 -18 -14 -32 -32 -32h-352v-352c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v352h-352c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h352v352c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-352h352c18 0 32 -14 32 -32zM1280 288v832c0 88 -72 160 -160 160
-h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160zM1408 1120v-832c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c159 0 288 -129 288 -288z" />
- <glyph glyph-name="eye-slash" unicode="&#xf070;" horiz-adv-x="1792"
-d="M555 201l78 141c-116 84 -185 219 -185 362c0 79 21 157 61 225c-156 -80 -286 -206 -381 -353c104 -161 251 -296 427 -375zM944 960c0 26 -22 48 -48 48c-167 0 -304 -137 -304 -304c0 -26 22 -48 48 -48s48 22 48 48c0 115 94 208 208 208c26 0 48 22 48 48z
-M1307 1151c0 -2 0 -7 -1 -9c-211 -377 -420 -756 -631 -1133l-49 -89c-6 -10 -17 -16 -28 -16c-18 0 -113 58 -134 70c-10 6 -16 16 -16 28c0 16 34 70 44 87c-194 88 -357 238 -472 418c-13 20 -20 44 -20 69c0 24 7 49 20 69c198 304 507 507 876 507c60 0 121 -6 180 -17
-l54 97c6 10 16 16 28 16c18 0 112 -58 133 -70c10 -6 16 -16 16 -27zM1344 704c0 -186 -115 -352 -288 -418l280 502c5 -28 8 -56 8 -84zM1792 576c0 -26 -7 -47 -20 -69c-31 -51 -70 -100 -109 -145c-196 -225 -466 -362 -767 -362l74 132c291 25 538 202 694 444
-c-74 115 -169 216 -282 294l63 112c124 -83 249 -208 327 -337c13 -22 20 -43 20 -69z" />
- <glyph glyph-name="trello" unicode="&#xf181;"
-d="M704 192v1024c0 18 -14 32 -32 32h-480c-18 0 -32 -14 -32 -32v-1024c0 -18 14 -32 32 -32h480c18 0 32 14 32 32zM1376 576v640c0 18 -14 32 -32 32h-480c-18 0 -32 -14 -32 -32v-640c0 -18 14 -32 32 -32h480c18 0 32 14 32 32zM1536 1344v-1408c0 -35 -29 -64 -64 -64
-h-1408c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" />
- <glyph glyph-name="dribbble" unicode="&#xf17d;"
-d="M1024 36c-10 58 -48 258 -140 498c-1 0 -3 -1 -4 -1c0 0 -389 -136 -515 -410c-6 5 -15 11 -15 11c114 -93 259 -150 418 -150c91 0 177 19 256 52zM839 643c-16 37 -34 74 -53 111c-338 -101 -662 -93 -673 -93c-1 -7 -1 -14 -1 -21c0 -168 64 -322 168 -438
-c179 319 533 433 533 433c9 3 18 5 26 8zM732 855c-114 202 -235 366 -244 378c-183 -86 -319 -255 -362 -458c17 0 291 -3 606 80zM1416 536c-14 4 -197 62 -409 29c86 -237 121 -430 128 -469c147 99 251 257 281 440zM611 1277c-1 0 -1 0 -2 -1c0 0 1 1 2 1zM1201 1132
-c-115 102 -267 164 -433 164c-53 0 -105 -7 -155 -19c10 -13 134 -176 246 -382c247 92 340 234 342 237zM1424 647c-2 155 -57 298 -149 410c-2 -2 -107 -154 -366 -260c15 -31 30 -63 44 -95c5 -11 9 -23 14 -34c226 29 449 -20 457 -21zM1536 640
-c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="user-secret" unicode="&#xf21b;" horiz-adv-x="1408"
-d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010c-1 2 -2 4 -4 6c-9 7 -81 8 -96 8c-57 0 -111 -8 -167 -19c-7 -2 -14 -2 -21 -2s-14 0 -21 2c-56 11 -110 19 -167 19c-15 0 -87 -1 -96 -8c-2 -2 -3 -4 -4 -6c1 -9 2 -18 4 -27
-c6 -8 11 -5 15 -17c26 -71 38 -126 128 -126c129 0 93 119 135 119h12c42 0 6 -119 135 -119c90 0 102 55 128 126c4 12 9 9 15 17c2 9 3 18 4 27zM1408 131c0 -163 -107 -259 -267 -259h-874c-160 0 -267 96 -267 259c0 181 32 455 218 545l-90 220h214
-c-14 41 -22 84 -22 128c0 11 1 22 2 32c-39 8 -194 40 -194 96c0 59 170 91 210 99c21 75 71 189 122 248c20 23 45 37 76 37c60 0 108 -62 168 -62s108 62 168 62c31 0 56 -14 76 -37c51 -59 101 -173 122 -248c40 -8 210 -40 210 -99c0 -56 -155 -88 -194 -96
-c5 -54 -2 -108 -20 -160h214l-82 -225c179 -93 210 -362 210 -540z" />
- <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920"
-d="M1920 384c0 -212 -172 -384 -384 -384h-1088c-247 0 -448 201 -448 448c0 179 106 334 258 405c-1 14 -2 29 -2 43c0 283 229 512 512 512c214 0 397 -131 474 -318c44 39 102 62 166 62c141 0 256 -115 256 -256c0 -51 -15 -98 -41 -138c170 -40 297 -192 297 -374z" />
- <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="932"
-d="M932 351c0 -204 -146 -365 -358 -400v-175c0 -18 -14 -32 -32 -32h-135c-17 0 -32 14 -32 32v175c-234 33 -362 173 -367 179c-10 12 -11 29 -2 41l103 135c5 7 14 11 23 12s18 -2 24 -9c2 -1 142 -135 319 -135c98 0 204 52 204 165c0 96 -118 143 -253 197
-c-180 71 -404 161 -404 412c0 184 144 336 353 376v180c0 18 15 32 32 32h135c18 0 32 -14 32 -32v-176c203 -23 311 -133 315 -137c10 -11 12 -26 5 -38l-81 -146c-5 -9 -13 -15 -23 -16c-10 -2 -19 1 -27 7c-1 1 -122 108 -272 108c-127 0 -215 -63 -215 -154
-c0 -106 122 -153 264 -208c184 -71 392 -152 392 -393z" />
- <glyph glyph-name="eye" unicode="&#xf06e;" horiz-adv-x="1792"
-d="M1664 576c-95 147 -225 273 -381 353c40 -68 61 -146 61 -225c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 79 21 157 61 225c-156 -80 -286 -206 -381 -353c171 -264 447 -448 768 -448s597 184 768 448zM944 960c0 26 -22 48 -48 48c-167 0 -304 -137 -304 -304
-c0 -26 22 -48 48 -48s48 22 48 48c0 114 94 208 208 208c26 0 48 22 48 48zM1792 576c0 -25 -8 -48 -20 -69c-184 -303 -521 -507 -876 -507s-692 205 -876 507c-12 21 -20 44 -20 69s8 48 20 69c184 302 521 507 876 507s692 -205 876 -507c12 -21 20 -44 20 -69z" />
- <glyph glyph-name="usb" unicode="&#xf287;" horiz-adv-x="2304"
-d="M2288 731c10 -5 16 -16 16 -27s-6 -22 -16 -27l-320 -192c-5 -3 -10 -5 -16 -5c-5 0 -11 1 -16 4c-10 6 -16 16 -16 28v128h-858c32 -50 59 -109 83 -165c48 -108 97 -219 167 -219h96v96c0 18 14 32 32 32h320c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-320
-c-18 0 -32 14 -32 32v96h-96c-153 0 -222 157 -284 295c-47 107 -96 217 -164 217h-360c-29 -110 -129 -192 -248 -192c-141 0 -256 115 -256 256s115 256 256 256c119 0 219 -82 248 -192h104c68 0 117 110 164 217c62 138 131 295 284 295h107c27 75 97 128 181 128
-c106 0 192 -86 192 -192s-86 -192 -192 -192c-84 0 -154 53 -181 128h-107c-70 0 -119 -111 -167 -219c-24 -56 -51 -115 -83 -165h1114v128c0 12 6 22 16 28s23 5 32 -1z" />
- <glyph glyph-name="certificate" unicode="&#xf0a3;"
-d="M1376 640l138 -135c19 -18 26 -45 20 -70c-7 -25 -27 -45 -52 -51l-188 -48l53 -186c7 -25 0 -52 -19 -70c-18 -19 -45 -26 -70 -19l-186 53l-48 -188c-6 -25 -26 -45 -51 -52c-6 -1 -13 -2 -19 -2c-19 0 -38 8 -51 22l-135 138l-135 -138c-18 -19 -45 -26 -70 -20
-c-26 7 -45 27 -51 52l-48 188l-186 -53c-25 -7 -52 0 -70 19c-19 18 -26 45 -19 70l53 186l-188 48c-25 6 -45 26 -52 51c-6 25 1 52 20 70l138 135l-138 135c-19 18 -26 45 -20 70c7 25 27 45 52 51l188 48l-53 186c-7 25 0 52 19 70c18 19 45 26 70 19l186 -53l48 188
-c6 25 26 45 51 51c25 7 52 0 70 -19l135 -139l135 139c18 19 44 26 70 19c25 -6 45 -26 51 -51l48 -188l186 53c25 7 52 0 70 -19c19 -18 26 -45 19 -70l-53 -186l188 -48c25 -6 45 -26 52 -51c6 -25 -1 -52 -20 -70z" />
- <glyph glyph-name="500px" unicode="&#xf26e;" horiz-adv-x="1394"
-d="M1387 -11l-6 -6c-75 -75 -162 -134 -259 -175c-101 -42 -207 -64 -317 -64s-217 22 -317 64c-97 41 -185 100 -259 175c-75 74 -134 161 -175 258c-25 61 -45 124 -54 189c-4 28 35 34 48 36c31 5 52 3 56 -20c1 -1 1 -2 1 -4c4 -20 14 -80 46 -159
-c33 -82 84 -158 152 -226c65 -65 141 -116 226 -152c87 -37 180 -56 276 -56c95 0 188 19 276 56c84 36 160 87 225 152l6 6c7 7 15 9 25 6c9 -2 20 -10 33 -22c32 -33 25 -49 17 -58zM915 604l-66 -66l63 -63c7 -7 20 -22 -7 -49c-11 -11 -22 -17 -32 -17
-c-7 0 -13 3 -19 10l-62 61l-66 -66c-2 -2 -7 -5 -15 -5c-9 0 -20 5 -31 16l-2 2c-7 6 -18 17 -18 29c0 6 3 11 8 17l66 65l-66 66c-11 11 -6 25 14 45c12 12 22 18 31 18c5 0 9 -2 13 -5l65 -66l65 65c11 11 29 6 48 -13c12 -12 25 -29 11 -44zM1386 547
-c0 -79 -16 -156 -46 -228c-30 -70 -72 -132 -126 -186s-117 -96 -187 -126c-72 -31 -149 -46 -228 -46s-156 15 -228 46c-70 30 -133 72 -187 126s-96 116 -125 186c-6 13 -15 38 -15 40h-1c-9 28 31 40 43 44c29 9 51 13 60 -12c24 -64 61 -126 97 -167h1v341
-c2 84 37 169 102 232c67 66 157 103 253 103c196 0 355 -158 355 -352c0 -196 -160 -355 -355 -355c-39 0 -68 3 -112 16c-5 2 -28 12 -13 61c4 13 16 51 44 43c2 0 51 -12 77 -12c139 0 248 108 248 246c0 65 -26 126 -72 171c-46 46 -108 71 -175 71
-c-69 0 -132 -28 -178 -80c-40 -45 -64 -105 -64 -160v-413c72 -44 155 -67 242 -67c128 0 252 51 341 140c90 90 140 211 140 338c0 128 -50 248 -141 339c-90 90 -210 140 -339 140s-250 -50 -340 -140c-1 -1 -58 -60 -77 -87l-2 -2c-12 -17 -23 -33 -73 -22
-c-25 6 -52 21 -52 43v680c0 18 14 38 38 38h877c30 0 30 -42 30 -55c0 -14 0 -55 -30 -55h-811v-483h1c56 59 153 121 210 145c71 30 151 46 231 46c79 0 156 -15 228 -46c70 -30 133 -72 187 -126s96 -116 126 -186c30 -73 46 -149 46 -229zM1355 1128
-c19 -17 6 -35 -13 -57c-12 -12 -25 -26 -39 -26c-6 0 -11 2 -16 7c-72 62 -137 104 -207 133c-87 38 -180 56 -276 56c-85 0 -178 -17 -262 -49c-26 -10 -40 24 -45 37c-6 16 -9 29 -8 38c2 10 7 17 16 20c82 36 194 57 299 57c109 0 216 -22 316 -64
-c92 -39 167 -87 235 -152z" />
- <glyph glyph-name="liberapay-square" unicode="&#xf2e8;" horiz-adv-x="1533"
-d="M148 1404h1236c82 0 149 -66 149 -148v-1236c0 -82 -67 -148 -149 -148h-1236c-82 0 -148 66 -148 148v1236c0 82 66 148 148 148zM736 1150v0l-161 -25l-133 -553c-8 -33 -12 -64 -12 -93s6 -54 18 -76s32 -40 60 -53s68 -19 117 -19l31 128c-18 1 -32 4 -42 9
-s-18 12 -22 20s-5 17 -5 27s1 23 4 35zM985 902v0c-42 0 -80 -3 -116 -10s-67 -14 -95 -22l-174 -722h155l47 189c24 -4 47 -6 71 -6c49 0 94 8 135 25s76 41 106 72s52 67 69 109s25 88 25 139c0 31 -4 61 -13 88s-22 51 -40 72c-18 20 -41 36 -69 48s-62 18 -101 18z
-M965 772v0c33 0 56 -11 69 -32s20 -46 20 -76c0 -31 -4 -59 -13 -84s-21 -47 -37 -65s-34 -32 -56 -42s-47 -15 -74 -15c-17 0 -32 1 -44 4l73 303c19 4 40 7 62 7z" />
- <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920"
-d="M960 864c159 0 288 -129 288 -288s-129 -288 -288 -288s-288 129 -288 288s129 288 288 288zM1664 1280c141 0 256 -115 256 -256v-896c0 -141 -115 -256 -256 -256h-1408c-141 0 -256 115 -256 256v896c0 141 115 256 256 256h224l51 136c25 66 103 120 173 120h512
-c70 0 148 -54 173 -120l51 -136h224zM960 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
- <glyph glyph-name="music" unicode="&#xf001;"
-d="M1536 1312v-1120c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v537l-768 -237v-709c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v967c0 42 28 79 68 92l832 256c9 3 18 4 28 4
-c53 0 96 -43 96 -96z" />
- <glyph glyph-name="wpexplorer" unicode="&#xf2de;" horiz-adv-x="1792"
-d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640c0 432 -352 784 -784 784s-784 -352 -784 -784
-s352 -784 784 -784s784 352 784 784zM1792 640c0 -494 -402 -896 -896 -896s-896 402 -896 896s402 896 896 896s896 -402 896 -896z" />
+ <glyph glyph-name="gavel" unicode="&#xf0e3;" horiz-adv-x="1731"
+d="M1731 0c0 -34 -14 -67 -37 -90l-107 -108c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-363 364c-24 23 -38 56 -38 90c0 38 16 69 43 96l-256 256l-126 -126c-9 -9 -21 -14 -34 -14s-25 5 -34 14c30 -30 58 -52 58 -98c0 -26 -10 -49 -28 -68c-34 -36 -70 -84 -124 -84
+c-25 0 -50 10 -68 28l-408 408c-18 18 -28 43 -28 68c0 54 48 90 84 124c19 18 42 28 68 28c46 0 68 -28 98 -58c-9 9 -14 21 -14 34s5 25 14 34l348 348c9 9 21 14 34 14s25 -5 34 -14c-30 30 -58 52 -58 98c0 26 10 49 28 68c34 36 70 84 124 84c25 0 50 -10 68 -28
+l408 -408c18 -18 28 -43 28 -68c0 -54 -48 -90 -84 -124c-19 -18 -42 -28 -68 -28c-46 0 -68 28 -98 58c9 -9 14 -21 14 -34s-5 -25 -14 -34l-126 -126l256 -256c27 27 58 43 96 43c34 0 67 -14 91 -37l363 -363c23 -24 37 -57 37 -91z" />
+ <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1020"
+d="M1020 399v-367c0 -18 -14 -32 -32 -32h-956c-18 0 -32 14 -32 32v150c0 17 14 32 32 32h97v383h-95c-18 0 -32 14 -32 32v131c0 18 14 32 32 32h95v223c0 228 184 393 438 393c200 0 329 -120 335 -125c12 -11 13 -30 3 -43l-103 -127c-6 -7 -13 -11 -22 -12
+c-8 -1 -17 2 -23 7c-1 1 -87 69 -188 69c-113 0 -189 -68 -189 -170v-215h305c18 0 32 -14 32 -32v-131c0 -18 -14 -32 -32 -32h-305v-379h414v181c0 18 14 32 32 32h162c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="genderless" unicode="&#xf22d;" horiz-adv-x="1152"
+d="M1024 576c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1152 576c0 -318 -258 -576 -576 -576s-576 258 -576 576s258 576 576 576s576 -258 576 -576z" />
+ <glyph glyph-name="get-pocket" unicode="&#xf265;" horiz-adv-x="1720"
+d="M1565 1408c87 0 155 -70 155 -156v-519c0 -479 -383 -861 -859 -861c-478 0 -861 382 -861 861v519c0 85 71 156 156 156h1409zM861 344c30 0 60 12 82 33l404 388c23 22 37 53 37 85c0 65 -53 118 -118 118c-31 0 -60 -12 -82 -33l-323 -310l-323 310
+c-22 21 -51 33 -81 33c-65 0 -118 -53 -118 -118c0 -32 13 -63 36 -85l405 -388c21 -21 51 -33 81 -33z" />
+ <glyph glyph-name="gg" unicode="&#xf260;" horiz-adv-x="1920"
+d="M672 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1248 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
<glyph glyph-name="gg-circle" unicode="&#xf261;" horiz-adv-x="1792"
d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640c0 -495 -401 -896 -896 -896
s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
- <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024"
-d="M1024 448c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-448 448c-12 12 -19 28 -19 45c0 35 29 64 64 64h896c35 0 64 -29 64 -64zM1024 832c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19
-s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="pencil" unicode="&#xf040;" horiz-adv-x="1515"
-d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928c0 13 -9 22 -22 22c-6 0 -12 -2 -17 -7l-542 -542c-5 -5 -7 -11 -7 -17c0 -13 9 -22 22 -22c6 0 12 2 17 7l542 542c5 5 7 11 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024c0 -34 -14 -67 -37 -90
-l-166 -166l-416 416l166 165c23 24 56 38 90 38s67 -14 91 -38l235 -234c23 -24 37 -57 37 -91z" />
- <glyph glyph-name="bookmark-o" unicode="&#xf097;" horiz-adv-x="1280"
-d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408c15 0 30 -3 44 -9c44 -17 72 -58 72 -103v-1289c0 -45 -28 -86 -72 -103c-14 -6 -29 -8 -44 -8c-31 0 -60 11 -83 32l-441 424l-441 -424c-23 -21 -52 -33 -83 -33c-15 0 -30 3 -44 9
-c-44 17 -72 58 -72 103v1289c0 45 28 86 72 103c14 6 29 9 44 9h1048z" />
- <glyph glyph-name="diamond" unicode="&#xf219;" horiz-adv-x="2048"
-d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512c19 -24 17 -59 -4 -82l-960 -1024c-12 -13 -29 -20 -47 -20
-s-35 7 -47 20l-960 1024c-21 23 -23 58 -4 82l384 512c12 17 31 26 51 26h1152c20 0 39 -9 51 -26z" />
- <glyph glyph-name="share" unicode="&#xf064;" horiz-adv-x="1792"
-d="M1792 896c0 -17 -7 -33 -19 -45l-512 -512c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v256h-224c-431 0 -714 -83 -714 -560c0 -41 2 -82 5 -123c1 -16 5 -34 5 -50c0 -19 -12 -35 -32 -35c-14 0 -21 7 -28 17c-15 21 -26 53 -37 76c-57 128 -127 311 -127 451
-c0 112 11 227 53 333c139 345 547 403 875 403h224v256c0 35 29 64 64 64c17 0 33 -7 45 -19l512 -512c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="envelope" unicode="&#xf0e0;" horiz-adv-x="1792"
-d="M1792 826v-794c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v794c30 -33 64 -62 101 -87c166 -113 334 -226 497 -345c84 -62 188 -138 297 -138h2c109 0 213 76 297 138c163 118 331 232 498 345c36 25 70 54 100 87zM1792 1120c0 -112 -83 -213 -171 -274
-c-156 -108 -313 -216 -468 -325c-65 -45 -175 -137 -256 -137h-2c-81 0 -191 92 -256 137c-155 109 -312 217 -467 325c-71 48 -172 161 -172 252c0 98 53 182 160 182h1472c87 0 160 -72 160 -160z" />
- <glyph glyph-name="yahoo" unicode="&#xf19e;" horiz-adv-x="1318"
-d="M750 579l13 -707c-34 6 -69 11 -105 11c-35 0 -70 -5 -105 -11l13 707c-186 321 -361 648 -566 957c35 -9 71 -15 108 -15s75 7 111 15c140 -248 292 -489 439 -733c148 242 305 483 439 733c35 -9 71 -14 107 -14c38 0 77 5 114 14c-80 -110 -146 -230 -215 -347
-c-119 -203 -236 -406 -353 -610z" />
- <glyph glyph-name="window-restore" unicode="&#xf2d2;" horiz-adv-x="2048"
-d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96c88 0 160 -72 160 -160v-352zM2048 1376v-960c0 -88 -72 -160 -160 -160h-608v-352c0 -88 -72 -160 -160 -160h-960c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h608v352c0 88 72 160 160 160h960
-c88 0 160 -72 160 -160z" />
- <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1606"
-d="M1606 1350c0 -29 -23 -58 -43 -78l-632 -632v-768h320c35 0 64 -29 64 -64s-29 -64 -64 -64h-896c-35 0 -64 29 -64 64s29 64 64 64h320v768l-632 632c-20 20 -43 49 -43 78c0 49 62 58 99 58h1408c37 0 99 -9 99 -58z" />
- <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1728"
-d="M256 1280c0 -46 -25 -87 -64 -110v-1266c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v1266c-39 23 -64 64 -64 110c0 71 57 128 128 128s128 -57 128 -128zM1728 1216v-763c0 -37 -23 -51 -52 -66c-113 -61 -238 -116 -369 -116c-184 0 -272 140 -490 140
-c-159 0 -326 -72 -464 -146c-11 -6 -21 -9 -33 -9c-35 0 -64 29 -64 64v742c0 24 12 41 31 55c24 16 53 30 79 43c126 64 279 120 421 120c157 0 280 -52 419 -117c28 -14 57 -19 88 -19c157 0 326 136 370 136c35 0 64 -29 64 -64z" />
- <glyph glyph-name="train" unicode="&#xf238;"
-d="M1088 1536c247 0 448 -143 448 -320v-896c0 -173 -191 -313 -431 -319l213 -202c21 -20 7 -55 -22 -55h-1056c-29 0 -43 35 -22 55l213 202c-240 6 -431 146 -431 319v896c0 177 201 320 448 320h640zM768 192c106 0 192 86 192 192s-86 192 -192 192s-192 -86 -192 -192
-s86 -192 192 -192zM1344 768v512h-1152v-512h1152z" />
- <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792"
-d="M1664 896c71 0 128 -57 128 -128s-57 -128 -128 -128v-384c0 -70 -58 -128 -128 -128c-178 148 -465 351 -812 380c-119 -40 -160 -179 -82 -259c-70 -115 20 -196 126 -279c-62 -122 -320 -124 -412 -39c-58 178 -144 356 -74 581h-122c-88 0 -160 72 -160 160v192
-c0 88 72 160 160 160h480c384 0 704 224 896 384c70 0 128 -58 128 -128v-384zM1536 292v954c-261 -200 -514 -315 -768 -343v-270c254 -28 507 -141 768 -341z" />
- <glyph glyph-name="pause-circle-o" unicode="&#xf28c;"
-d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM768 96c300 0 544 244 544 544s-244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544zM864 320c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-576
-c0 -18 -14 -32 -32 -32h-192zM480 320c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-576c0 -18 -14 -32 -32 -32h-192z" />
- <glyph glyph-name="snapchat-ghost" unicode="&#xf2ac;" horiz-adv-x="1634"
-d="M833 1408c180 2 329 -99 404 -261c23 -49 27 -125 27 -179c0 -64 -5 -127 -9 -191c8 -4 19 -7 28 -7c36 0 66 27 102 27c34 0 83 -24 83 -64c0 -96 -201 -78 -201 -162c0 -15 6 -29 12 -43c48 -105 139 -206 247 -251c26 -11 52 -17 80 -23c18 -4 28 -17 28 -35
-c0 -68 -173 -96 -219 -103c-20 -31 -5 -104 -58 -104c-41 0 -82 13 -126 13c-21 0 -42 -1 -62 -5c-119 -20 -159 -148 -354 -148c-188 0 -233 128 -349 148c-21 4 -42 5 -63 5c-45 0 -88 -15 -124 -15c-56 0 -39 74 -60 106c-46 7 -219 35 -219 103c0 18 10 31 28 35
-c28 6 54 12 80 23c107 44 200 146 247 251c6 14 12 28 12 43c0 84 -202 68 -202 161c0 39 46 64 81 64c31 0 62 -26 101 -26c11 0 22 2 32 7c-4 63 -9 126 -9 190c0 54 4 131 27 180c88 190 237 259 436 261z" />
- <glyph glyph-name="folder" unicode="&#xf07b;" horiz-adv-x="1664"
-d="M1664 928v-704c0 -123 -101 -224 -224 -224h-1216c-123 0 -224 101 -224 224v960c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h672c123 0 224 -101 224 -224z" />
- <glyph glyph-name="outdent" unicode="&#xf03b;" horiz-adv-x="1792"
-d="M384 992v-576c0 -17 -15 -32 -32 -32c-8 0 -17 3 -23 9l-288 288c-6 6 -9 15 -9 23s3 17 9 23l288 288c6 6 15 9 23 9c17 0 32 -15 32 -32zM1792 224v-192c0 -17 -15 -32 -32 -32h-1728c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32zM1792 608
-v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32h-1728
-c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32z" />
- <glyph glyph-name="stumbleupon" unicode="&#xf1a4;" horiz-adv-x="1920"
-d="M1062 824v118c0 56 -46 102 -102 102s-102 -46 -102 -102v-612c0 -234 -194 -423 -429 -423c-237 0 -429 192 -429 429v266h328v-262c0 -57 46 -102 102 -102s102 45 102 102v620c0 229 196 413 428 413c233 0 428 -185 428 -416v-136l-195 -58zM1592 602h328v-266
-c0 -237 -192 -429 -429 -429c-236 0 -429 190 -429 425v268l131 -61l195 58v-270c0 -56 46 -101 102 -101s102 45 102 101v275z" />
- <glyph glyph-name="address-card" unicode="&#xf2bb;" horiz-adv-x="2048"
-d="M1024 405c0 155 -38 327 -196 327c-49 -28 -115 -76 -188 -76s-139 48 -188 76c-158 0 -196 -172 -196 -327c0 -87 57 -149 128 -149h512c71 0 128 62 128 149zM867 925c0 125 -102 227 -227 227s-227 -102 -227 -227c0 -126 102 -227 227 -227s227 101 227 227z
-M1792 416v64c0 18 -14 32 -32 32h-576c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h576c18 0 32 14 32 32zM1792 676v56c0 20 -16 36 -36 36h-568c-20 0 -36 -16 -36 -36v-56c0 -20 16 -36 36 -36h568c20 0 36 16 36 36zM1792 928v64c0 18 -14 32 -32 32h-576
-c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h576c18 0 32 14 32 32zM2048 1248v-1216c0 -88 -72 -160 -160 -160h-352v96c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-96h-768v96c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-96h-352c-88 0 -160 72 -160 160
-v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" />
- <glyph glyph-name="i-cursor" unicode="&#xf246;" horiz-adv-x="896"
-d="M832 1408c-212 0 -320 -75 -320 -224v-416h128v-128h-128v-544c0 -149 108 -224 320 -224h64v-128h-64c-180 0 -312 52 -384 146c-72 -94 -204 -146 -384 -146h-64v128h64c212 0 320 75 320 224v544h-128v128h128v416c0 149 -108 224 -320 224h-64v128h64
-c180 0 312 -52 384 -146c72 94 204 146 384 146h64v-128h-64z" />
- <glyph glyph-name="car" unicode="&#xf1b9;" horiz-adv-x="2048"
-d="M480 448c0 88 -72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160s160 72 160 160zM516 768h1016l-89 357c-3 11 -23 27 -35 27h-768c-12 0 -32 -16 -35 -27zM1888 448c0 88 -72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160s160 72 160 160zM2048 544v-384
-c0 -18 -14 -32 -32 -32h-96v-128c0 -106 -86 -192 -192 -192s-192 86 -192 192v128h-1024v-128c0 -106 -86 -192 -192 -192s-192 86 -192 192v128h-96c-18 0 -32 14 -32 32v384c0 124 100 224 224 224h28l105 419c31 126 153 221 283 221h768c130 0 252 -95 283 -221
-l105 -419h28c124 0 224 -100 224 -224z" />
- <glyph glyph-name="file-excel-o" unicode="&#xf1c3;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280zM429 106h68l194 283l-189 272h-68v107h290v-107h-76l106 -159c8 -9 13 -16 17 -23c2 -3 4 -6 5 -10h2c0 -1 9 14 21 33l103 159h-74v107h279v-107h-67l-195 -282l192 -273h68v-106h-291v106h76l-107 161c-7 10 -13 16 -17 24c-2 3 -4 6 -5 10h-2
-c-3 0 -9 -15 -21 -34l-103 -161h75v-106h-281v106z" />
- <glyph glyph-name="arrow-circle-o-left" unicode="&#xf190;"
-d="M1152 736v-192c0 -17 -15 -32 -32 -32h-352v-192c0 -18 -14 -32 -32 -32c-9 0 -17 4 -24 10l-319 319c-6 6 -9 15 -9 23s3 17 9 23l320 320c6 6 15 9 23 9c17 0 32 -15 32 -32v-192h352c17 0 32 -15 32 -32zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544
-s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="paragraph" unicode="&#xf1dd;" horiz-adv-x="1254"
-d="M1254 1347v-73c0 -34 -27 -93 -61 -93c-17 0 -37 3 -54 -1c-16 -4 -28 -15 -32 -31c-5 -19 -3 -43 -3 -64v-1152c0 -34 -27 -61 -61 -61h-108c-34 0 -61 27 -61 61v1218h-143v-1218c0 -34 -27 -61 -61 -61h-108c-34 0 -61 27 -61 61v496c-97 8 -180 28 -245 59
-c-84 39 -148 99 -192 179c-42 77 -64 164 -64 259c0 111 30 207 88 286c59 79 129 132 209 159c75 25 233 37 417 37h479c34 0 61 -27 61 -61z" />
- <glyph glyph-name="y-combinator" unicode="&#xf23b;"
-d="M809 532l266 499h-112l-157 -312s-24 -48 -44 -92c-19 46 -42 92 -42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
- <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024"
-d="M1024 832v-416c0 -53 -43 -96 -96 -96s-96 43 -96 96v352h-64v-912c0 -62 -50 -112 -112 -112s-112 50 -112 112v464h-64v-464c0 -62 -50 -112 -112 -112s-112 50 -112 112v912h-64v-352c0 -53 -43 -96 -96 -96s-96 43 -96 96v416c0 106 86 192 192 192h640
-c106 0 192 -86 192 -192zM736 1280c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224z" />
- <glyph glyph-name="history" unicode="&#xf1da;"
-d="M1536 640c0 -423 -345 -768 -768 -768c-229 0 -445 101 -591 277c-10 13 -9 32 2 43l137 138c7 6 16 9 25 9c9 -1 18 -5 23 -12c98 -127 245 -199 404 -199c282 0 512 230 512 512s-230 512 -512 512c-131 0 -255 -50 -348 -137l137 -138c19 -18 24 -46 14 -69
-c-10 -24 -33 -40 -59 -40h-448c-35 0 -64 29 -64 64v448c0 26 16 49 40 59c23 10 51 5 69 -14l130 -129c141 133 332 212 529 212c423 0 768 -345 768 -768zM896 928v-448c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v352c0 18 14 32 32 32h64
-c18 0 32 -14 32 -32z" />
- <glyph glyph-name="h-square" unicode="&#xf0fd;"
-d="M1280 192v896c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-320h-512v320c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-896c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v320h512v-320c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1536 1120v-960
-c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792"
-d="M896 -128c-16 0 -32 6 -44 18l-624 602c-8 7 -228 208 -228 448c0 293 179 468 478 468c175 0 339 -138 418 -216c79 78 243 216 418 216c299 0 478 -175 478 -468c0 -240 -220 -441 -229 -450l-623 -600c-12 -12 -28 -18 -44 -18z" />
- <glyph glyph-name="sort-amount-desc" unicode="&#xf161;" horiz-adv-x="1760"
-d="M1184 -32v-192c0 -18 -14 -32 -32 -32h-256c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h256c18 0 32 -14 32 -32zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192
-c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1376 480v-192c0 -18 -14 -32 -32 -32h-448c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h448c18 0 32 -14 32 -32zM1568 992v-192c0 -18 -14 -32 -32 -32h-640c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h640
-c18 0 32 -14 32 -32zM1760 1504v-192c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h832c18 0 32 -14 32 -32z" />
- <glyph glyph-name="search-plus" unicode="&#xf00e;" horiz-adv-x="1664"
-d="M1024 736v-64c0 -17 -15 -32 -32 -32h-224v-224c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v224h-224c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h224v224c0 17 15 32 32 32h64c17 0 32 -15 32 -32v-224h224c17 0 32 -15 32 -32zM1152 704c0 247 -201 448 -448 448
-s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -71 -57 -128 -128 -128c-34 0 -67 14 -90 38l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704c0 -142 -43 -282 -124 -399l343 -343
-c23 -23 37 -56 37 -90z" />
- <glyph glyph-name="life-ring" unicode="&#xf1cd;" horiz-adv-x="1792"
-d="M896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM896 1408c-130 0 -253 -33 -361 -90l194 -194c53 18 109 28 167 28c59 0 114 -10 167 -28l194 194c-108 57 -231 90 -361 90zM218 279l194 194c-18 53 -28 109 -28 167
-c0 59 10 114 28 167l-194 194c-57 -108 -90 -231 -90 -361s33 -253 90 -361zM896 -128c130 0 253 33 361 90l-194 194c-53 -18 -108 -28 -167 -28c-58 0 -114 10 -167 28l-194 -194c108 -57 231 -90 361 -90zM896 256c212 0 384 172 384 384s-172 384 -384 384
-s-384 -172 -384 -384s172 -384 384 -384zM1380 473l194 -194c57 108 90 231 90 361s-33 253 -90 361l-194 -194c18 -53 28 -109 28 -167s-10 -114 -28 -167z" />
- <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152"
-d="M320 768h512v192c0 141 -115 256 -256 256s-256 -115 -256 -256v-192zM1152 672v-576c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v576c0 53 43 96 96 96h32v192c0 246 202 448 448 448s448 -202 448 -448v-192h32c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="gift" unicode="&#xf06b;"
+d="M928 180v716h-320v-716c0 -35 29 -52 64 -52h192c35 0 64 17 64 52zM472 1024h195l-126 161c-11 13 -35 31 -69 31c-53 0 -96 -43 -96 -96s43 -96 96 -96zM1160 1120c0 53 -43 96 -96 96c-34 0 -58 -18 -69 -31l-125 -161h194c53 0 96 43 96 96zM1536 864v-320
+c0 -18 -14 -32 -32 -32h-96v-416c0 -53 -43 -96 -96 -96h-1088c-53 0 -96 43 -96 96v416h-96c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h440c-124 0 -224 100 -224 224s100 224 224 224c67 0 129 -28 168 -77l128 -165l128 165c39 49 101 77 168 77
+c124 0 224 -100 224 -224s-100 -224 -224 -224h440c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="gimp" unicode="&#xf31b;" horiz-adv-x="1792"
+d="M1760 1453c243 -1827 -975 -1550 -1432 -1186c28 4 55 13 78 30c50 38 74 102 73 173s-25 150 -73 220c-6 9 -13 17 -20 25l26 588s159 -366 481 -358c674 18 794 417 867 508zM612 937c-97 0 -177 -85 -177 -193s80 -194 177 -194c16 0 31 4 46 8
+c-67 3 -122 62 -122 133v0c0 73 57 133 127 133v0c56 0 112 -47 124 -104c1 8 2 16 2 24c0 108 -80 193 -177 193zM1031 928v0c-119 0 -216 -102 -216 -228s97 -227 216 -227c45 0 87 14 122 39c-17 -8 -47 -15 -66 -15c-90 0 -162 77 -162 171v0c0 94 72 170 162 170
+c75 0 147 -63 160 -141v3c0 126 -97 228 -216 228zM158 822v0c79 -2 166 -58 227 -146c46 -67 70 -141 70 -206s-21 -121 -64 -153s-100 -37 -158 -16s-118 67 -164 134s-69 141 -69 206s21 121 64 153c26 20 58 29 94 28zM1042 804c-42 0 -76 -36 -76 -80v0
+c0 -44 34 -80 76 -80s76 36 76 80v0c0 44 -34 80 -76 80zM615 787c-28 0 -50 -23 -50 -52v0v0c0 -29 22 -53 50 -53s50 24 50 53v0v0c0 29 -22 52 -50 52zM130 770c-47 0 -85 -47 -85 -106v0c0 -59 38 -107 85 -107s84 48 84 107v0c0 59 -37 106 -84 106zM1202 468
+c0 0 44 -38 69 -72c-96 -78 -261 -141 -583 -73c163 -60 300 -88 406 -81c-64 -22 -146 -39 -250 -44c233 -23 407 22 468 117c16 -18 32 -49 47 -89c10 69 36 101 -4 155s-153 87 -153 87z" />
+ <glyph glyph-name="git" unicode="&#xf1d3;" horiz-adv-x="1656"
+d="M527 22c0 88 -97 100 -165 100c-71 0 -158 -15 -158 -104c0 -90 103 -101 172 -101c73 0 151 18 151 105zM468 777c0 75 -36 143 -119 143c-92 0 -124 -61 -124 -145c0 -83 36 -135 124 -135c87 0 119 56 119 137zM737 1101v-202c-26 -9 -52 -16 -79 -22
+c10 -27 16 -55 16 -84c0 -169 -104 -298 -270 -329c-50 -10 -79 -31 -79 -85c0 -153 404 -49 404 -331c0 -229 -155 -304 -363 -304c-171 0 -366 57 -366 263c0 120 73 189 182 225v4c-46 28 -67 72 -67 126c0 51 11 114 63 137v4c-101 34 -167 173 -167 274
+c0 187 145 324 330 324c62 0 124 -16 178 -47c75 0 149 20 218 47zM1055 220h-222c4 45 4 89 4 134v609c0 43 1 86 -4 128h222c-5 -41 -4 -83 -4 -124v-613c0 -45 0 -89 4 -134zM1656 442v-196c-53 -29 -114 -39 -174 -39c-214 0 -239 169 -239 343v351h2v4
+c-13 0 -25 2 -37 2c-20 0 -40 -3 -59 -6v190h96v76c0 30 -1 60 -6 89h227c-8 -55 -6 -110 -6 -165h171v-190c-29 0 -58 4 -86 4h-85v-365c0 -59 13 -131 87 -131c39 0 77 11 109 33zM1080 1389c0 -75 -58 -145 -135 -145c-79 0 -138 69 -138 145c0 77 58 147 138 147
+c79 0 135 -72 135 -147z" />
<glyph glyph-name="git-square" unicode="&#xf1d2;"
d="M582 228c0 -54 -49 -66 -93 -66c-43 0 -107 7 -107 63c0 55 54 64 98 64c42 0 102 -7 102 -61zM546 694c0 -50 -20 -85 -74 -85c-55 0 -77 32 -77 84s20 90 77 90c51 0 74 -42 74 -89zM712 769v125c-43 -16 -89 -29 -135 -29c-33 19 -71 29 -110 29
c-114 0 -204 -84 -204 -200c0 -62 41 -148 103 -169v-3c-32 -14 -38 -53 -38 -85c0 -33 12 -60 41 -77v-3c-68 -22 -113 -65 -113 -139c0 -127 121 -163 227 -163c128 0 224 47 224 188c0 100 -91 130 -174 145c-28 5 -76 25 -76 60c0 33 18 47 49 52c102 20 167 99 167 204
c0 18 -4 35 -10 52c16 4 33 8 49 13zM771 350h137c-2 27 -2 55 -2 82v387c0 23 0 46 2 69h-137c3 -23 3 -48 3 -71v-392c0 -25 0 -50 -3 -75zM1280 366v121c-20 -14 -44 -21 -68 -21c-45 0 -53 45 -53 82v225h52c18 0 35 -2 53 -2v117h-105c0 34 -2 68 3 102h-140
c3 -18 4 -36 4 -55v-47h-60v-117c12 1 24 3 37 3c7 0 15 -1 23 -1v-2h-2v-217c0 -108 16 -212 148 -212c37 0 75 6 108 24zM924 1072c0 47 -35 91 -84 91s-85 -43 -85 -91c0 -47 37 -89 85 -89s84 43 84 89zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960
c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="mouse-pointer" unicode="&#xf245;" horiz-adv-x="1152"
-d="M1133 493c19 -18 24 -46 14 -69c-10 -24 -33 -40 -59 -40h-382l201 -476c14 -33 -2 -70 -34 -84l-177 -75c-33 -14 -70 2 -84 34l-191 452l-312 -312c-12 -12 -28 -19 -45 -19c-8 0 -17 2 -24 5c-24 10 -40 33 -40 59v1504c0 26 16 49 40 59c7 3 16 5 24 5
-c17 0 33 -6 45 -19z" />
- <glyph glyph-name="sign-in" unicode="&#xf090;"
-d="M1184 640c0 -17 -7 -33 -19 -45l-544 -544c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v288h-448c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h448v288c0 35 29 64 64 64c17 0 33 -7 45 -19l544 -544c12 -12 19 -28 19 -45zM1536 992v-704c0 -159 -129 -288 -288 -288
-h-320c-17 0 -32 15 -32 32c0 28 -13 96 32 96h320c88 0 160 72 160 160v704c0 88 -72 160 -160 160h-288c-25 0 -64 -5 -64 32c0 28 -13 96 32 96h320c159 0 288 -129 288 -288z" />
- <glyph glyph-name="odnoklassniki-square" unicode="&#xf264;"
-d="M927 956c0 -88 -71 -159 -159 -159s-159 71 -159 159s71 159 159 159s159 -71 159 -159zM1141 593c-18 36 -69 67 -136 14c0 0 -91 -72 -237 -72s-237 72 -237 72c-67 53 -118 22 -136 -14c-32 -64 4 -95 85 -148c69 -44 165 -61 226 -67l-51 -52
-c-72 -72 -142 -142 -191 -190c-29 -29 -29 -76 0 -105l9 -9c29 -29 76 -29 105 0l191 191c72 -73 142 -143 191 -191c29 -29 76 -29 105 0l9 9c29 29 29 76 0 105l-191 190l-52 52c62 6 156 23 225 67c81 53 117 84 85 148zM1092 956c0 179 -145 324 -324 324
-s-324 -145 -324 -324s145 -324 324 -324s324 145 324 324zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="tag" unicode="&#xf02b;" horiz-adv-x="1515"
-d="M448 1088c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1515 512c0 -34 -14 -67 -37 -90l-491 -492c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-715 716c-51 50 -91 147 -91 218v416c0 70 58 128 128 128h416c71 0 168 -40 219 -91
-l715 -714c23 -24 37 -57 37 -91z" />
- <glyph glyph-name="align-justify" unicode="&#xf039;" horiz-adv-x="1792"
-d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 576v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 960v-128
-c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 1344v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64z" />
- <glyph glyph-name="hospital-o" unicode="&#xf0f8;" horiz-adv-x="1408"
-d="M384 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 480v-64c0 -17 -15 -32 -32 -32h-64
-c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64
-c17 0 32 -15 32 -32zM896 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 480v-64
-c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64
-c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 -128h384v1152h-256v-32c0 -53 -43 -96 -96 -96h-448c-53 0 -96 43 -96 96v32h-256v-1152h384v224c0 17 15 32 32 32h320c17 0 32 -15 32 -32v-224zM896 1056v320c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-96h-128v96
-c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-320c0 -17 15 -32 32 -32h64c17 0 32 15 32 32v96h128v-96c0 -17 15 -32 32 -32h64c17 0 32 15 32 32zM1408 1088v-1280c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v1280c0 35 29 64 64 64h320v288c0 53 43 96 96 96
-h448c53 0 96 -43 96 -96v-288h320c35 0 64 -29 64 -64z" />
- <glyph glyph-name="chevron-circle-down" unicode="&#xf13a;"
-d="M813 237l454 454c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-307 -307l-307 307c-25 25 -65 25 -90 0l-102 -102c-25 -25 -25 -65 0 -90l454 -454c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z
-" />
- <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408"
-d="M1403 1241c10 -24 5 -52 -14 -70l-493 -493v-742c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-256 256c-12 12 -19 28 -19 45v486l-493 493c-19 18 -24 46 -14 70c10 23 33 39 59 39h1280c26 0 49 -16 59 -39z" />
- <glyph glyph-name="google-plus" unicode="&#xf0d5;" horiz-adv-x="2304"
-d="M1437 623c0 -419 -281 -716 -704 -716c-405 0 -733 328 -733 733s328 733 733 733c198 0 363 -72 491 -192l-199 -191c-54 52 -149 113 -292 113c-250 0 -454 -207 -454 -463s204 -463 454 -463c290 0 399 209 416 316h-416v252h692c7 -37 12 -74 12 -122zM2304 745v-210
-h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
- <glyph glyph-name="sticky-note-o" unicode="&#xf24a;"
-d="M1400 256h-248v-248c17 6 34 15 41 22l185 185c7 7 16 24 22 41zM1120 384h288v896h-1280v-1280h896v288c0 53 43 96 96 96zM1536 1312v-1024c0 -53 -31 -127 -68 -164l-184 -184c-37 -37 -111 -68 -164 -68h-1024c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344
-c53 0 96 -43 96 -96z" />
- <glyph glyph-name="moon-o" unicode="&#xf186;" horiz-adv-x="1471"
-d="M1262 233c-36 -6 -73 -9 -110 -9c-371 0 -672 301 -672 672c0 127 37 251 104 357c-266 -79 -456 -323 -456 -613c0 -353 287 -640 640 -640c193 0 374 88 494 233zM1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767
-c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" />
- <glyph glyph-name="comments-o" unicode="&#xf0e6;" horiz-adv-x="1792"
-d="M704 1152c-312 0 -576 -176 -576 -384c0 -110 74 -216 202 -290l97 -56l-35 -84c21 12 42 25 62 39l44 31l53 -10c50 -9 101 -14 153 -14c312 0 576 176 576 384s-264 384 -576 384zM704 1280c389 0 704 -229 704 -512s-315 -512 -704 -512c-61 0 -120 6 -176 16
-c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512zM1526 111c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29
-c-30 4 -59 9 -86 16c-101 26 -195 69 -278 128c-56 -10 -115 -16 -176 -16c-181 0 -347 50 -472 132c29 -2 59 -4 88 -4c215 0 418 62 573 174c167 122 259 287 259 466c0 52 -8 103 -23 152c169 -93 279 -241 279 -408c0 -163 -104 -307 -266 -401z" />
- <glyph glyph-name="lastfm" unicode="&#xf202;" horiz-adv-x="1792"
-d="M1292 832c0 -6 8 -34 10 -41c27 -82 90 -99 165 -120c167 -47 325 -136 325 -332c0 -199 -166 -339 -360 -339c-322 0 -422 394 -515 634c-77 198 -158 314 -381 314c-198 0 -372 -190 -372 -385c0 -207 155 -399 370 -399c95 0 194 20 258 95c31 35 61 73 83 116
-l84 -152c-11 -25 -27 -49 -44 -70l1 -1c-101 -117 -239 -152 -388 -152c-302 0 -528 267 -528 561c0 285 248 550 536 550c478 0 502 -414 664 -747c44 -92 119 -200 233 -200c104 0 196 67 196 177c0 238 -437 76 -499 467c-2 11 -3 22 -3 33c0 148 139 275 286 270
-c88 -3 141 -6 211 -68h-1c27 -25 47 -59 68 -88l-129 -99c-15 28 -29 51 -54 70v1c-24 22 -67 21 -97 21c-65 0 -119 -49 -119 -116z" />
- <glyph glyph-name="peertube" unicode="&#xf2e4;" horiz-adv-x="1350"
-d="M0 1536l675 -450l-675 -450v900zM675 1086l675 -450l-675 -450v900zM0 636l675 -450l-675 -450v900z" />
- <glyph glyph-name="pagelines" unicode="&#xf18c;" horiz-adv-x="1402"
-d="M1402 433c-201 -499 -683 -197 -683 -197c-148 -299 -392 -491 -674 -492c-25 0 -45 20 -45 45s20 44 45 44c235 1 440 156 574 402c-150 -58 -433 -102 -590 300c398 164 581 -41 651 -166c36 89 62 186 79 291c0 0 -510 -80 -546 358c435 175 557 -280 557 -280
-c6 61 12 192 12 195c0 0 -388 269 -139 603c455 -157 224 -593 224 -593c2 -6 2 -87 0 -122c0 0 165 325 498 210c-15 -489 -518 -388 -518 -388c-16 -100 -41 -195 -73 -283c0 0 303 335 628 73z" />
- <glyph glyph-name="credit-card-alt" unicode="&#xf283;" horiz-adv-x="2304"
-d="M0 32v608h2304v-608c0 -88 -72 -160 -160 -160h-1984c-88 0 -160 72 -160 160zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408c88 0 160 -72 160 -160v-224h-2304v224c0 88 72 160 160 160h1984z" />
- <glyph glyph-name="file-word-o" unicode="&#xf1c2;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280zM233 768h300v-107h-90l99 -438c4 -16 6 -33 7 -46l2 -21h4l4 21c3 13 4 30 8 46l144 545h114l144 -545c4 -16 6 -33 9 -46c1 -7 3 -15 3 -21h4l2 21c1 13 3 30 7 46l99 438h-90v107h300v-107h-70l-164 -661h-159l-128 485c-5 16 -6 32 -9 46l-3 24h-4
-c0 -8 -1 -16 -2 -24c-2 -16 -5 -31 -10 -46l-128 -485h-159l-164 661h-70v107z" />
- <glyph glyph-name="map" unicode="&#xf279;" horiz-adv-x="1792"
-d="M512 1536c17 0 32 -15 32 -32v-1472c0 -12 -7 -23 -17 -28l-480 -256c-5 -3 -10 -4 -15 -4c-17 0 -32 15 -32 32v1472c0 12 7 23 17 28l480 256c5 3 10 4 15 4zM1760 1536c17 0 32 -15 32 -32v-1472c0 -12 -7 -23 -17 -28l-480 -256c-5 -3 -10 -4 -15 -4
-c-17 0 -32 15 -32 32v1472c0 12 7 23 17 28l480 256c5 3 10 4 15 4zM640 1536c5 0 10 -1 14 -3l512 -256c11 -6 18 -17 18 -29v-1472c0 -17 -15 -32 -32 -32c-5 0 -10 1 -14 3l-512 256c-11 6 -18 17 -18 29v1472c0 17 15 32 32 32z" />
- <glyph glyph-name="object-ungroup" unicode="&#xf248;" horiz-adv-x="2304"
-d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
-v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
- <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792"
-d="M640 1280h512v128h-512v-128zM1792 640v-480c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v480h672v-160c0 -35 29 -64 64 -64h320c35 0 64 29 64 64v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384c0 88 72 160 160 160h352v160
-c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h352c88 0 160 -72 160 -160z" />
- <glyph glyph-name="stop" unicode="&#xf04d;"
-d="M1536 1344v-1408c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" />
- <glyph glyph-name="clone" unicode="&#xf24d;" horiz-adv-x="1792"
-d="M1664 -96v1088c0 17 -15 32 -32 32h-1088c-17 0 -32 -15 -32 -32v-1088c0 -17 15 -32 32 -32h1088c17 0 32 15 32 32zM1792 992v-1088c0 -88 -72 -160 -160 -160h-1088c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1088c88 0 160 -72 160 -160zM1408 1376v-160
-h-128v160c0 17 -15 32 -32 32h-1088c-17 0 -32 -15 -32 -32v-1088c0 -17 15 -32 32 -32h160v-128h-160c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1088c88 0 160 -72 160 -160z" />
- <glyph glyph-name="thermometer-full" unicode="&#xf2c7;" horiz-adv-x="1024"
-d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v907h128v-907c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320
-s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z
-" />
- <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1402"
-d="M1376 1376c64 -64 0 -224 -96 -320l-161 -161l160 -696c3 -12 -2 -25 -12 -33l-128 -96c-5 -4 -12 -6 -19 -6c-2 0 -4 0 -7 1c-9 2 -17 7 -21 16l-279 508l-259 -259l53 -194c3 -11 0 -22 -8 -31l-96 -96c-6 -6 -15 -9 -23 -9h-2c-10 1 -18 5 -24 13l-189 252l-252 189
-c-8 5 -12 14 -13 23s3 18 9 25l96 97c6 6 15 9 23 9c3 0 6 0 8 -1l194 -53l259 259l-508 279c-9 5 -15 14 -17 24c-1 9 2 20 9 27l128 128c8 7 20 11 30 8l665 -159l160 160c96 96 256 160 320 96z" />
- <glyph glyph-name="check-square" unicode="&#xf14a;"
-d="M685 237l614 614c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-467 -467l-211 211c-25 25 -65 25 -90 0l-102 -102c-25 -25 -25 -65 0 -90l358 -358c25 -25 65 -25 90 0zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960
-c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="window-maximize" unicode="&#xf2d0;" horiz-adv-x="1792"
-d="M256 128h1280v768h-1280v-768zM1792 1248v-1216c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="gitea" unicode="&#xf31f;" horiz-adv-x="2066"
+d="M366 1280v0c62 0 120 -8 160 -8v0v0c329 -18 502 -29 699 -29l1 -363l53 -27v390c171 2 371 11 709 29v0h1c15 0 28 -7 38 -17s18 -25 24 -43c12 -36 16 -85 15 -143c-3 -117 -30 -272 -75 -427s-107 -311 -182 -431s-163 -204 -259 -211h-615c-75 8 -156 85 -224 169
+c-34 42 -64 87 -87 126c-21 36 -35 66 -41 88c-82 2 -219 15 -341 80c-125 67 -233 191 -242 414c-6 143 45 245 118 310s167 93 248 93zM388 1107v0c-90 -1 -147 -29 -180 -71c-36 -44 -46 -104 -38 -164c14 -113 61 -183 126 -229c62 -44 143 -65 231 -78
+c-70 193 -106 325 -128 542h-11zM1118 893c-34 0 -66 -19 -82 -51l-172 -353c-22 -45 -3 -99 42 -121l354 -172c45 -22 99 -3 121 42l171 354c22 45 3 99 -42 121l-249 121l-45 -93c5 -5 10 -14 12 -20c2 -5 3 -13 3 -19v-4c30 -14 54 -25 74 -36c30 -17 52 -34 59 -62
+s-1 -57 -17 -95c-12 -29 -29 -65 -51 -111c4 -5 9 -13 11 -19c2 -5 4 -13 4 -19c0 -22 -17 -46 -38 -54c-5 -2 -14 -4 -20 -4c-22 0 -46 17 -54 38c-2 5 -3 14 -3 20c0 22 17 46 38 54c5 2 14 3 19 3h2c22 46 41 82 52 109c15 36 18 55 15 66s-13 20 -39 35
+c-18 10 -41 22 -71 36c-4 -4 -13 -9 -19 -11c-5 -2 -14 -3 -19 -3h-6l-77 -158c5 -5 12 -14 14 -21c2 -5 3 -13 3 -19c0 -22 -17 -46 -38 -54c-5 -2 -13 -4 -19 -4c-22 0 -46 17 -54 38c-2 5 -3 14 -3 20c0 22 16 46 37 54c5 2 15 3 20 3l79 162c-3 4 -8 11 -10 16
+s-3 14 -3 20c0 22 17 46 38 54c5 2 14 3 19 3h1l46 94l-64 31c-13 6 -26 9 -39 9z" />
<glyph glyph-name="github" unicode="&#xf09b;"
d="M768 1408c424 0 768 -344 768 -768c0 -339 -220 -627 -525 -729c-39 -7 -53 17 -53 37c0 25 1 108 1 211c0 72 -24 118 -52 142c171 19 351 84 351 379c0 84 -30 152 -79 206c8 20 34 98 -8 204c-64 20 -211 -79 -211 -79c-61 17 -127 26 -192 26s-131 -9 -192 -26
c0 0 -147 99 -211 79c-42 -106 -16 -184 -8 -204c-49 -54 -79 -122 -79 -206c0 -294 179 -360 350 -379c-22 -20 -42 -54 -49 -103c-44 -20 -156 -54 -223 64c-42 73 -118 79 -118 79c-75 1 -5 -47 -5 -47c50 -23 85 -112 85 -112c45 -137 259 -91 259 -91
c0 -64 1 -124 1 -143c0 -20 -14 -44 -53 -37c-305 102 -525 390 -525 729c0 424 344 768 768 768zM291 305c-2 -4 -8 -5 -13 -2c-6 3 -9 8 -7 12c2 3 7 4 13 2c6 -3 9 -8 7 -12zM322 271c-4 -4 -11 -2 -16 3c-5 6 -6 13 -2 16c4 4 11 2 16 -3c5 -6 6 -13 2 -16zM352 226
c-4 -3 -12 0 -17 7s-5 15 0 18c5 4 13 1 17 -6c5 -7 5 -15 0 -19zM394 184c-4 -5 -13 -4 -20 3c-7 6 -9 15 -4 19c4 5 13 4 20 -3c6 -6 8 -15 4 -19zM451 159c-2 -6 -11 -9 -19 -6c-9 2 -15 9 -13 15s11 9 19 7c9 -3 15 -10 13 -16zM514 154c0 -6 -7 -11 -16 -11
c-10 -1 -17 4 -17 11c0 6 7 11 16 11c9 1 17 -4 17 -11zM572 164c1 -6 -5 -12 -14 -14s-17 2 -18 8c-1 7 5 13 14 15c9 1 17 -3 18 -9z" />
- <glyph glyph-name="mastodon" unicode="&#xf2e1;"
-d="M1503 425c-23 -116 -202 -243 -408 -268c-108 -13 -214 -25 -327 -20c-185 8 -330 44 -330 44c0 -18 1 -35 3 -51c24 -182 181 -193 329 -198c150 -5 284 37 284 37l6 -136s-105 -56 -292 -66c-103 -6 -230 3 -379 42c-323 85 -379 430 -388 779c-3 104 -1 201 -1 283
-c0 357 235 462 235 462c118 54 320 77 531 79h5c211 -2 413 -25 531 -79c0 0 234 -105 234 -462c0 0 3 -263 -33 -446zM1260 843c0 88 -22 160 -68 211c-47 52 -107 79 -183 79c-88 0 -154 -34 -198 -101l-43 -72l-43 72c-44 67 -110 101 -198 101c-76 0 -136 -27 -183 -79
-c-45 -52 -68 -123 -68 -211v-432h171v420c0 88 38 133 112 133c82 0 124 -54 124 -159v-229h170v229c0 105 42 159 124 159c74 0 112 -45 112 -133v-420h171v432v0z" />
- <glyph glyph-name="envelope-open" unicode="&#xf2b6;" horiz-adv-x="1792"
-d="M1792 882v-978c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v978c0 9 4 18 11 24c105 92 106 103 628 484c63 46 174 146 257 146s195 -101 257 -146c522 -381 523 -392 628 -484c7 -6 11 -15 11 -24zM1228 297c156 113 265 192 345 252c14 10 17 30 6 44
-l-38 52c-11 14 -31 17 -45 6c-79 -58 -187 -138 -343 -250c-62 -45 -174 -145 -257 -145s-195 100 -257 145c-156 113 -264 192 -343 250c-14 11 -34 8 -45 -6l-38 -52c-11 -14 -8 -34 6 -44c80 -60 189 -139 345 -252c78 -56 201 -169 332 -169c132 0 258 115 332 169z" />
- <glyph glyph-name="step-backward" unicode="&#xf048;" horiz-adv-x="1024"
-d="M979 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-678c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-678c3 7 7 13 13 19z" />
- <glyph glyph-name="wheelchair" unicode="&#xf193;" horiz-adv-x="1629"
-d="M1023 349l102 -204c-77 -238 -299 -401 -549 -401c-317 0 -576 259 -576 576c0 242 152 458 379 541l17 -131c-163 -72 -268 -232 -268 -410c0 -247 201 -448 448 -448c257 0 465 220 447 477zM1571 249l58 -114l-256 -128c-9 -5 -19 -7 -29 -7c-24 0 -47 14 -57 35
-l-239 477h-472c-32 0 -60 25 -64 57l-96 779c-1 10 3 32 6 42c19 69 83 114 154 114c88 0 160 -72 160 -160c0 -91 -80 -169 -172 -159l37 -289h423v-128h-407l16 -128h455c24 0 47 -14 57 -35l228 -455z" />
- <glyph glyph-name="cutlery" unicode="&#xf0f5;" horiz-adv-x="1408"
-d="M640 1472v-640c0 -81 -52 -154 -128 -181v-779c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v779c-76 27 -128 100 -128 181v640c0 35 29 64 64 64s64 -29 64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64v-416
-c0 -35 29 -64 64 -64s64 29 64 64v416c0 35 29 64 64 64s64 -29 64 -64zM1408 1472v-1600c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v512h-224c-17 0 -32 15 -32 32v800c0 176 144 320 320 320h256c35 0 64 -29 64 -64z" />
- <glyph glyph-name="microphone-slash" unicode="&#xf131;" horiz-adv-x="1382"
-d="M258 591l-101 -101c-27 66 -42 138 -42 214v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -39 6 -77 15 -113zM1372 1193l-361 -361v-128c0 -176 -144 -320 -320 -320c-38 0 -75 7 -109 19l-96 -96c61 -32 131 -51 205 -51c247 0 448 201 448 448v128c0 35 29 64 64 64
-s64 -29 64 -64v-128c0 -296 -224 -540 -512 -572v-132h256c35 0 64 -29 64 -64s-29 -64 -64 -64h-640c-35 0 -64 29 -64 64s29 64 64 64h256v132c-85 9 -165 38 -235 81l-254 -254c-13 -13 -33 -13 -46 0l-82 82c-13 13 -13 33 0 46l1234 1234c13 13 33 13 46 0l82 -82
-c13 -13 13 -33 0 -46zM992 1325l-621 -621v512c0 176 144 320 320 320c138 0 256 -89 301 -211z" />
- <glyph glyph-name="user-plus" unicode="&#xf234;" horiz-adv-x="2048"
-d="M704 640c-212 0 -384 172 -384 384s172 384 384 384s384 -172 384 -384s-172 -384 -384 -384zM1664 512h352c17 0 32 -15 32 -32v-192c0 -17 -15 -32 -32 -32h-352v-352c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v352h-352c-17 0 -32 15 -32 32v192
-c0 17 15 32 32 32h352v352c0 17 15 32 32 32h192c17 0 32 -15 32 -32v-352zM928 288c0 -70 58 -128 128 -128h256v-238c-49 -36 -111 -50 -171 -50h-874c-160 0 -267 96 -267 259c0 226 53 573 346 573c16 0 27 -7 39 -17c98 -75 193 -122 319 -122s221 47 319 122
-c12 10 23 17 39 17c85 0 160 -32 217 -96h-223c-70 0 -128 -58 -128 -128v-192z" />
- <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1728"
-d="M576 128c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM192 640h384v256h-158c-4 0 -19 -6 -22 -9l-195 -195c-3 -3 -9 -18 -9 -22v-30zM1472 128c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM1728 1216
-v-1024c0 -74 -78 -64 -128 -64c0 -141 -115 -256 -256 -256s-256 115 -256 256h-384c0 -141 -115 -256 -256 -256s-256 115 -256 256h-64c-50 0 -128 -10 -128 64c0 35 29 64 64 64v320c0 71 -10 150 45 205l198 198c25 25 73 45 109 45h160v192c0 35 29 64 64 64h1024
-c35 0 64 -29 64 -64z" />
- <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1641"
-d="M363 64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1007 484l-682 -682c-23 -23 -56 -37 -90 -37s-67 14 -91 37l-106 108c-24 23 -38 56 -38 90s14 67 38 91l681 681c52 -131 157 -236 288 -288zM1641 919c0 -33 -12 -74 -23 -106
-c-63 -178 -234 -301 -423 -301c-247 0 -448 201 -448 448s201 448 448 448c73 0 168 -22 229 -63c10 -7 16 -16 16 -28c0 -11 -7 -22 -16 -28l-293 -169v-224l193 -107c33 19 265 165 285 165s32 -15 32 -35z" />
- <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1856"
-d="M576 128c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM192 640h384v256h-158c-6 -1 -17 -5 -22 -9l-195 -195c-3 -5 -8 -16 -9 -22v-30zM1472 128c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1600 800
-v192c0 18 -14 32 -32 32h-224v224c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32v-224h-224c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h224v-224c0 -18 14 -32 32 -32h192c18 0 32 14 32 32v224h224c18 0 32 14 32 32zM1856 1344v-1152c0 -35 -29 -64 -64 -64h-192
-c0 -141 -114 -256 -256 -256c-141 0 -256 115 -256 256h-384c0 -141 -114 -256 -256 -256s-256 115 -256 256h-128c-35 0 -64 29 -64 64s29 64 64 64v416c0 35 20 84 45 109l198 198c25 25 74 45 109 45h160v320c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" />
- <glyph glyph-name="cc-visa" unicode="&#xf1f0;" horiz-adv-x="2304"
-d="M1975 546h-138s14 37 66 179c-1 -1 14 37 22 61l12 -55c31 -153 38 -185 38 -185zM531 611l-58 295c-8 41 -39 54 -75 54h-268l-2 -13c184 -47 335 -147 403 -336zM710 960l-162 -438l-17 89c-35 93 -120 179 -216 218l135 -510h175l261 641h-176zM849 318h166l104 642
-h-166zM1617 944c-33 13 -85 27 -149 27c-164 0 -279 -87 -280 -212c-1 -92 82 -143 145 -174c65 -31 86 -52 86 -80c0 -43 -52 -62 -99 -62c-67 0 -103 8 -156 33l-22 11l-23 -144c39 -18 110 -34 185 -34c174 -1 287 86 289 219c0 73 -45 128 -140 174
-c-58 29 -93 50 -93 80c0 27 30 55 95 55c54 1 94 -10 124 -24l15 -8zM2042 960h-128c-40 0 -70 -12 -87 -54l-246 -588h174c28 79 35 96 35 96h212s5 -22 20 -96h154zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128
-h2048c70 0 128 -58 128 -128z" />
- <glyph glyph-name="superscript" unicode="&#xf12b;" horiz-adv-x="1529"
-d="M892 167v-167h-248l-159 252l-24 42c-6 7 -9 14 -11 21h-3c-2 -7 -6 -14 -9 -21c-6 -12 -15 -28 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228c9 -14 16 -29 23 -42c6 -7 9 -14 11 -21h3c2 7 6 14 11 21l25 42l140 228h257v-168h-125
-l-184 -267l204 -296h109zM1529 846v-206h-514l-3 27c-2 14 -4 33 -4 46c0 273 350 296 350 441c0 52 -47 87 -100 87c-38 0 -72 -18 -97 -39c-13 -11 -25 -25 -36 -38l-105 92c18 25 38 46 63 66c42 33 103 65 188 65c145 0 246 -85 246 -218c0 -240 -332 -260 -346 -403
-h232v80h126z" />
- <glyph glyph-name="tty" unicode="&#xf1e4;" horiz-adv-x="1792"
-d="M448 224v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM256 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM832 224v-192c0 -18 -14 -32 -32 -32h-192
-c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM640 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM66 768c-37 0 -66 29 -66 65v129h514v-129c0 -36 -29 -65 -65 -65h-383zM1216 224v-192
-c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1024 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1600 224v-192c0 -18 -14 -32 -32 -32h-192
-c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1408 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 1016v-13h-514v10c0 37 -32 104 -382 102c-350 -1 -382 -65 -382 -102v-10h-514v13
-c0 67 120 392 896 392c775 0 896 -325 896 -392zM1792 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 962v-129c0 -36 -29 -65 -65 -65h-384c-36 0 -65 29 -65 65v129h514z" />
- <glyph glyph-name="linode" unicode="&#xf2b8;" horiz-adv-x="1494"
-d="M309 1l202 -214l-34 236l-216 213zM535 -225l274 218l-11 245l-300 -215zM224 413l227 -213l-48 327l-245 204zM474 189l317 214l-14 324l-352 -200zM822 178l95 -80l-2 239l-103 79c0 -8 4 -22 -4 -28l-78 -52l85 -70c10 -8 7 -76 7 -88zM117 930l256 -200l-68 465
-l-279 173zM1152 267l15 234l-230 -164l2 -240zM396 722l373 194l-19 441l-423 -163zM1249 357l20 233l-226 142l-2 -105l144 -95c3 -2 5 -6 4 -9l-7 -119zM1440 496l30 222l-179 -128l-20 -228zM1252 329l-71 49l-8 -117c0 -3 -1 -6 -4 -8l-234 -187c-4 -3 -10 -3 -14 0
-l-98 83l7 -161c0 -3 -1 -6 -4 -8l-293 -234c-2 -1 -4 -2 -6 -2c-3 1 -6 1 -8 3l-228 242c-5 5 -54 252 -59 277c-1 4 2 9 5 11l61 37c-12 11 -93 82 -95 92l-72 351c-1 4 1 9 6 12l94 45c-16 12 -132 96 -135 108l-96 466c-1 6 2 11 7 13l433 135c2 0 5 0 8 -1l317 -153
-c3 -2 6 -6 6 -9l20 -463c0 -4 -2 -8 -6 -10l-118 -61l126 -85c3 -1 5 -5 5 -8l5 -123l121 74c3 2 8 2 11 0l84 -56l3 110c0 3 2 7 5 9l206 126c4 2 8 2 11 0l245 -135c2 -2 4 -4 5 -7c2 -7 -31 -232 -34 -255c0 -3 -2 -6 -4 -7l-191 -153c-4 -3 -9 -3 -13 0z" />
- <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280"
-d="M1088 576v640h-448v-1137c51 27 133 74 213 137c107 84 235 215 235 360zM1280 1344v-768c0 -421 -589 -687 -614 -698c-8 -4 -17 -6 -26 -6s-18 2 -26 6c-25 11 -614 277 -614 698v768c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" />
- <glyph glyph-name="user-md" unicode="&#xf0f0;" horiz-adv-x="1408"
-d="M384 192c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM1408 131c0 -163 -107 -259 -267 -259h-874c-160 0 -267 96 -267 259c0 199 40 513 278 565c-16 -38 -22 -79 -22 -120v-203c-77 -27 -128 -100 -128 -181c0 -106 86 -192 192 -192
-s192 86 192 192c0 81 -52 154 -128 181v203c0 33 3 66 25 93c84 -66 188 -104 295 -104s211 38 295 104c22 -27 25 -60 25 -93v-64c-141 0 -256 -115 -256 -256v-89c-20 -18 -32 -44 -32 -71c0 -53 43 -96 96 -96s96 43 96 96c0 27 -12 53 -32 71v89c0 70 58 128 128 128
-s128 -58 128 -128v-89c-20 -18 -32 -44 -32 -71c0 -53 43 -96 96 -96s96 43 96 96c0 27 -12 53 -32 71v89c0 91 -49 176 -128 221c0 73 7 151 -22 219c238 -52 278 -366 278 -565zM1088 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384
-s384 -172 384 -384z" />
- <glyph glyph-name="xmpp" unicode="&#xf2f9;" horiz-adv-x="1542"
-d="M1536 1314c47 -398 -206 -904 -657 -1199c122 -101 261 -177 414 -216v-27c-165 14 -320 59 -461 128l-30 15l-1 1l-6 3c-11 6 -30 16 -41 22c-94 -51 -193 -90 -297 -116c-68 -19 -139 -33 -211 -42v28c145 37 279 107 396 201c-426 296 -682 805 -637 1192l93 -33v0
-l273 -81c-1 -16 -1 -32 -1 -49c0 -296 147 -656 394 -917c254 262 406 628 406 929c0 17 0 33 -1 49l274 81z" />
- <glyph glyph-name="pie-chart" unicode="&#xf200;" horiz-adv-x="1728"
-d="M768 646l546 -546c-139 -141 -333 -228 -546 -228c-424 0 -768 344 -768 768s344 768 768 768v-762zM955 640h773c0 -213 -87 -407 -228 -546zM1664 768h-768v768c424 0 768 -344 768 -768z" />
- <glyph glyph-name="align-left" unicode="&#xf036;" horiz-adv-x="1792"
-d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1408 576v-128c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1280c35 0 64 -29 64 -64zM1664 960v-128
-c0 -35 -29 -64 -64 -64h-1536c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1536c35 0 64 -29 64 -64zM1280 1344v-128c0 -35 -29 -64 -64 -64h-1152c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" />
- <glyph glyph-name="motorcycle" unicode="&#xf21c;" horiz-adv-x="2304"
-d="M2301 500c32 -281 -197 -517 -476 -499c-214 14 -392 185 -414 399c-16 152 44 289 146 381l-71 107c-126 -105 -206 -262 -206 -438c0 -36 -28 -66 -64 -66h-325c-31 -217 -217 -384 -443 -384c-247 0 -448 201 -448 448s201 448 448 448c53 0 104 -10 152 -27l24 45
-c-77 69 -178 110 -304 110h-64c-35 0 -64 29 -64 64s29 64 64 64h128c224 0 338 -92 384 -128h627l-85 128h-222c-39 0 -70 35 -63 75c5 31 35 53 66 53h253c21 0 41 -11 53 -28l70 -105l114 114c12 12 29 19 46 19h101c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-179
-l115 -172c81 39 175 55 275 36c191 -35 340 -195 362 -388zM448 128c155 0 284 110 314 256h-314c-22 0 -43 12 -55 31c-11 19 -12 43 -1 63l147 277c-29 8 -59 13 -91 13c-176 0 -320 -144 -320 -320s144 -320 320 -320zM1856 128c176 0 320 144 320 320s-144 320 -320 320
-c-43 0 -83 -9 -121 -24l174 -260c20 -30 12 -70 -17 -89c-11 -8 -24 -11 -36 -11c-21 0 -41 10 -53 29l-174 260c-57 -58 -93 -137 -93 -225c0 -176 144 -320 320 -320z" />
- <glyph glyph-name="nextcloud-square" unicode="&#xf307;"
-d="M257 1408h1022c142 0 257 -115 257 -257v-1022c0 -142 -115 -257 -257 -257h-1022c-142 0 -257 115 -257 257v1022c0 142 115 257 257 257zM772 969v0c-145 0 -268 -98 -307 -230c-34 69 -105 118 -187 118c-114 0 -208 -94 -208 -208s94 -207 208 -207
-c82 0 153 48 187 117c39 -132 162 -230 307 -230s267 98 306 230c34 -69 105 -117 187 -117c114 0 208 93 208 207s-94 208 -208 208c-82 0 -153 -49 -187 -118c-39 132 -161 230 -306 230zM772 846v0c106 0 196 -88 196 -197s-87 -196 -196 -196s-197 87 -197 196
-s88 197 197 197zM278 733c47 0 84 -37 84 -84s-37 -84 -84 -84s-84 37 -84 84s37 84 84 84zM1265 733c47 0 84 -37 84 -84s-37 -84 -84 -84s-84 37 -84 84s37 84 84 84z" />
- <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1685"
-d="M970 1084l316 -316l-572 -572l-316 316zM760 105l618 618c25 25 25 65 0 90l-362 362c-24 24 -66 24 -90 0l-618 -618c-25 -25 -25 -65 0 -90l362 -362c12 -12 27 -18 44 -18s34 6 46 18zM1648 742l-906 -908c-50 -49 -133 -49 -182 0l-126 126c75 75 75 197 0 272
-s-197 75 -272 0l-124 126c-50 49 -50 131 0 181l906 906c49 50 132 50 182 0l124 -125c-75 -75 -75 -197 0 -272s197 -75 272 0l126 -125c49 -50 49 -132 0 -181z" />
- <glyph glyph-name="battery-half" unicode="&#xf242;" horiz-adv-x="2304"
-d="M256 256v768h896v-768h-896zM2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32h-1856
-c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" />
- <glyph glyph-name="spotify" unicode="&#xf1bc;"
-d="M1127 326c0 28 -11 39 -30 51c-129 77 -279 115 -447 115c-98 0 -192 -13 -287 -34c-23 -5 -42 -20 -42 -52c0 -25 19 -49 49 -49c9 0 25 5 37 8c78 16 160 27 243 27c147 0 286 -36 397 -103c12 -7 20 -11 33 -11c25 0 47 20 47 48zM1223 541c0 27 -10 46 -35 61
-c-153 91 -347 141 -548 141c-129 0 -217 -18 -303 -42c-32 -9 -48 -31 -48 -64s27 -60 60 -60c14 0 22 4 37 8c70 19 154 33 251 33c190 0 363 -50 488 -124c11 -6 22 -13 38 -13c34 0 60 27 60 60zM1331 789c0 37 -16 56 -40 70c-173 101 -410 148 -636 148
-c-133 0 -255 -15 -364 -47c-28 -8 -54 -32 -54 -74c0 -41 31 -73 72 -73c15 0 29 5 40 8c97 27 202 37 307 37c208 0 424 -46 563 -129c14 -8 24 -12 40 -12c38 0 72 30 72 72zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z
-" />
- <glyph glyph-name="dot-circle-o" unicode="&#xf192;"
-d="M1024 640c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768
-s768 -344 768 -768z" />
- <glyph glyph-name="facebook-square" unicode="&#xf082;"
-d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-188v595h199l30 232h-229v148c0 67 18 112 115 112l122 1v207c-21 3 -94 9 -178 9c-177 0 -299 -108 -299 -306v-171h-200v-232h200v-595h-532c-159 0 -288 129 -288 288v960c0 159 129 288 288 288
-h960z" />
- <glyph glyph-name="facebook-messenger" unicode="&#xf2fe;" horiz-adv-x="1520"
-d="M760 1408c420 0 760 -318 760 -711c0 -476 -490 -817 -978 -681l-260 -144v272c-556 420 -235 1264 478 1264zM841 455l415 440l-379 -209l-197 204l-415 -441l379 210z" />
- <glyph glyph-name="angle-up" unicode="&#xf106;" horiz-adv-x="998"
-d="M998 352c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -14 -10 -23 -10c-8 0 -17 4 -23 10l-393 393l-393 -393c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" />
+ <glyph glyph-name="github-alt" unicode="&#xf113;" horiz-adv-x="1664"
+d="M640 320c0 -73 -38 -192 -128 -192s-128 119 -128 192s38 192 128 192s128 -119 128 -192zM1280 320c0 -73 -38 -192 -128 -192s-128 119 -128 192s38 192 128 192s128 -119 128 -192zM1440 320c0 153 -93 288 -256 288c-66 0 -129 -12 -195 -21
+c-52 -8 -104 -11 -157 -11s-105 3 -157 11c-65 9 -129 21 -195 21c-163 0 -256 -135 -256 -288c0 -306 280 -353 524 -353h168c244 0 524 47 524 353zM1664 496c0 -111 -11 -229 -61 -331c-132 -267 -495 -293 -755 -293c-264 0 -649 23 -786 293c-51 101 -62 220 -62 331
+c0 146 40 284 136 396c-18 55 -27 113 -27 170c0 75 17 150 51 218c158 0 259 -69 379 -163c101 24 205 35 309 35c94 0 189 -10 280 -32c119 93 220 160 376 160c34 -68 51 -143 51 -218c0 -57 -9 -114 -27 -168c96 -113 136 -252 136 -398z" />
+ <glyph glyph-name="github-square" unicode="&#xf092;"
+d="M519 336c2 3 1 9 -3 13c-5 4 -11 5 -14 2c-2 -3 -1 -9 3 -13c5 -4 11 -5 14 -2zM491 377c-3 4 -8 6 -12 4c-3 -2 -3 -8 0 -12c4 -5 9 -7 12 -5s3 8 0 13zM450 417c1 2 -1 6 -5 8c-3 1 -7 1 -8 -2c-2 -3 0 -6 4 -8c4 -1 8 -1 9 2zM471 394c2 2 2 7 -2 10c-3 4 -8 5 -10 3
+c-3 -3 -2 -7 1 -11c3 -3 8 -5 11 -2zM557 319c1 4 -3 9 -9 11s-11 0 -13 -4c-1 -4 3 -9 9 -11s11 0 13 4zM599 316c0 4 -5 8 -12 8c-6 0 -10 -4 -10 -8s5 -8 11 -8s11 4 11 8zM638 323c-1 4 -7 6 -13 5s-10 -5 -9 -9s6 -7 12 -6s10 6 10 10zM1280 640
+c0 283 -229 512 -512 512s-512 -229 -512 -512c0 -226 147 -418 350 -486c26 -5 35 11 35 25c0 12 0 52 -1 95c0 0 -142 -31 -172 61c0 0 -23 59 -57 74c0 0 -46 32 4 32c0 0 50 -4 78 -53c45 -79 120 -56 149 -43c5 33 18 56 33 69c-114 13 -234 57 -234 253
+c0 56 20 101 53 137c-5 13 -23 65 5 136c43 13 141 -53 141 -53c41 12 84 17 128 17s87 -5 128 -17c0 0 98 66 141 53c28 -71 10 -123 5 -136c33 -36 53 -81 53 -137c0 -197 -120 -240 -234 -253c18 -16 35 -47 35 -95c0 -68 -1 -123 -1 -140c0 -14 9 -30 35 -25
+c203 68 350 260 350 486zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="gitlab" unicode="&#xf296;" horiz-adv-x="1793"
+d="M104 830l792 -1015l-868 630c-24 18 -34 49 -25 77zM566 830h660l-330 -1015zM368 1442l198 -612h-462l198 612c11 31 55 31 66 0zM1688 830l101 -308c9 -28 -1 -59 -25 -77l-868 -630zM1688 830h-462l198 612c11 31 55 31 66 0z" />
+ <glyph glyph-name="glass" unicode="&#xf000;" horiz-adv-x="1606"
+d="M1606 1350c0 -29 -23 -58 -43 -78l-632 -632v-768h320c35 0 64 -29 64 -64s-29 -64 -64 -64h-896c-35 0 -64 29 -64 64s29 64 64 64h320v768l-632 632c-20 20 -43 49 -43 78c0 49 62 58 99 58h1408c37 0 99 -9 99 -58z" />
<glyph glyph-name="glide" unicode="&#xf2a5;"
d="M866 1021c0 -32 -7 -63 -13 -94c-21 -100 -41 -200 -62 -300c-3 -14 -3 -14 -18 -15c-10 -1 -21 -2 -31 -2c-86 0 -110 93 -110 163c0 104 41 243 138 298c16 8 33 14 51 14c41 0 45 -30 45 -64zM1352 597c0 18 -74 135 -91 142c-8 3 -25 8 -34 8
c-82 0 -156 -37 -226 -77l-2 2c16 107 52 202 52 313c0 159 -85 233 -242 233c-23 0 -46 -3 -68 -6c-197 -35 -317 -260 -317 -445c0 -196 113 -304 308 -304c4 0 25 2 25 -3c0 -2 0 -3 -1 -5c-4 -38 -16 -80 -26 -117c-15 -55 -67 -150 -134 -150c-29 0 -42 20 -42 47
c0 87 100 139 102 144c0 4 -5 8 -7 10c-31 28 -82 51 -124 51c-76 0 -117 -122 -117 -184c0 -116 73 -196 190 -196c173 0 299 182 338 332c11 44 19 89 30 133c2 9 5 13 14 18c71 36 146 60 227 60c44 0 83 -8 127 -18c1 -1 3 -1 4 -1c6 0 14 7 14 13zM1536 1120v-960
c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="shopping-basket" unicode="&#xf291;" horiz-adv-x="2048"
-d="M1920 768c71 0 128 -57 128 -128s-57 -128 -128 -128h-15l-115 -662c-11 -61 -64 -106 -126 -106h-1280c-62 0 -115 45 -126 106l-115 662h-15c-71 0 -128 57 -128 128s57 128 128 128h1792zM485 -32c35 3 62 34 59 69l-32 416c-3 35 -34 62 -69 59s-62 -34 -59 -69
-l32 -416c3 -33 31 -59 64 -59h5zM896 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1280 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1632 27l32 416c3 35 -24 66 -59 69s-66 -24 -69 -59
-l-32 -416c-3 -35 24 -66 59 -69h5c33 0 61 26 64 59zM476 1244l-93 -412h-132l101 441c26 117 129 199 249 199h167c0 35 29 64 64 64h384c35 0 64 -29 64 -64h167c120 0 223 -82 249 -199l101 -441h-132l-93 412c-14 59 -65 100 -125 100h-167c0 -35 -29 -64 -64 -64h-384
-c-35 0 -64 29 -64 64h-167c-60 0 -111 -41 -125 -100z" />
- <glyph glyph-name="user-o" unicode="&#xf2c0;"
-d="M1201 752c141 -41 335 -180 335 -635c0 -206 -153 -373 -341 -373h-854c-188 0 -341 167 -341 373c0 455 194 594 335 635c-50 79 -79 172 -79 272c0 282 230 512 512 512s512 -230 512 -512c0 -100 -29 -193 -79 -272zM768 1408c-212 0 -384 -172 -384 -384
-s172 -384 384 -384s384 172 384 384s-172 384 -384 384zM1195 -128c117 0 213 109 213 245c0 315 -106 512 -304 522c-90 -79 -207 -127 -336 -127s-246 48 -336 127c-198 -10 -304 -207 -304 -522c0 -136 96 -245 213 -245h854z" />
- <glyph glyph-name="paperclip" unicode="&#xf0c6;" horiz-adv-x="1400"
-d="M1400 151c0 -156 -119 -275 -275 -275c-88 0 -173 38 -235 100l-777 776c-71 72 -113 170 -113 271c0 212 167 381 379 381c102 0 200 -41 273 -113l605 -606c6 -6 10 -14 10 -22c0 -21 -56 -77 -77 -77c-9 0 -17 4 -23 10l-606 607c-48 47 -113 77 -181 77
-c-142 0 -252 -115 -252 -256c0 -68 28 -133 76 -181l776 -777c38 -38 91 -63 145 -63c85 0 148 63 148 148c0 55 -25 107 -63 145l-581 581c-16 15 -38 24 -60 24c-38 0 -67 -28 -67 -67c0 -22 10 -43 25 -59l410 -410c6 -6 10 -14 10 -22c0 -21 -57 -78 -78 -78
-c-8 0 -16 4 -22 10l-410 410c-40 39 -63 94 -63 149c0 110 86 196 196 196c56 0 110 -23 149 -63l581 -581c63 -62 100 -147 100 -235z" />
- <glyph glyph-name="deviantart" unicode="&#xf1bd;" horiz-adv-x="1024"
-d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273c-1 0 -28 -28 -30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273c1 0 28 28 30 30h301v-303z" />
- <glyph glyph-name="file-audio-o" unicode="&#xf1c7;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280zM620 686c12 -5 20 -17 20 -30v-544c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -16 3 -23 9l-166 167h-131c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h131l166 167c10 9 23 12 35 7zM1037 -3c-14 0 -28 5 -40 15c-28 22 -32 62 -9 90
-c65 80 100 178 100 282s-35 202 -100 282c-23 28 -19 68 9 91c27 22 68 18 90 -10c83 -102 129 -231 129 -363s-46 -261 -129 -363c-13 -16 -31 -24 -50 -24zM826 145c-15 0 -31 6 -44 17c-25 24 -27 65 -2 91c33 36 52 82 52 131s-19 95 -52 131c-25 26 -23 67 2 91
-c26 24 67 23 91 -3c56 -60 87 -137 87 -219s-31 -159 -87 -219c-13 -13 -30 -20 -47 -20z" />
- <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1012"
-d="M976 229l35 -159c4 -16 -5 -32 -20 -37c-4 -1 -97 -33 -217 -33c-312 0 -563 188 -647 482h-95c-18 0 -32 15 -32 32v113c0 17 14 32 32 32h66c-1 32 -1 70 1 105h-67c-18 0 -32 14 -32 32v114c0 18 14 32 32 32h98c89 280 345 466 644 466c104 0 190 -22 194 -23
-c8 -2 15 -8 20 -15c4 -7 5 -16 3 -24l-43 -159c-4 -17 -21 -27 -38 -22c-1 0 -69 17 -140 17c-168 0 -309 -91 -376 -240h468c10 0 19 -4 25 -12c6 -7 9 -17 7 -26l-24 -114c-3 -15 -16 -26 -32 -26h-488c-3 -32 -2 -66 0 -105h459c10 0 19 -5 25 -12c6 -8 8 -18 6 -27
-l-24 -112c-3 -15 -16 -26 -31 -26h-387c64 -156 208 -254 378 -254c87 0 158 24 159 24c8 3 18 2 26 -2c8 -5 13 -13 15 -21z" />
- <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1856"
-d="M1664 896c0 106 -86 192 -192 192h-64v-384h64c106 0 192 86 192 192zM0 128h1792c0 -141 -115 -256 -256 -256h-1280c-141 0 -256 115 -256 256zM1856 896c0 -212 -172 -384 -384 -384h-64v-32c0 -123 -101 -224 -224 -224h-704c-123 0 -224 101 -224 224v736
-c0 35 29 64 64 64h1152c212 0 384 -172 384 -384z" />
- <glyph glyph-name="university" unicode="&#xf19c;" horiz-adv-x="1920"
-d="M960 1536l960 -384v-128h-128c0 -35 -31 -64 -69 -64h-1526c-38 0 -69 29 -69 64h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59c38 0 69 -29 69 -64v-64h-1664v64c0 35 31 64 69 64h59v768zM1851 -64c38 0 69 -29 69 -64v-128
-h-1920v128c0 35 31 64 69 64h1782z" />
- <glyph glyph-name="times-circle-o" unicode="&#xf05c;"
-d="M1097 457l-146 -146c-13 -13 -33 -13 -46 0l-137 137l-137 -137c-13 -13 -33 -13 -46 0l-146 146c-13 13 -13 33 0 46l137 137l-137 137c-13 13 -13 33 0 46l146 146c13 13 33 13 46 0l137 -137l137 137c13 13 33 13 46 0l146 -146c13 -13 13 -33 0 -46l-137 -137
-l137 -137c13 -13 13 -33 0 -46zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="weixin" unicode="&#xf1d7;" horiz-adv-x="2048"
-d="M580 1075c0 55 -36 91 -91 91c-54 0 -109 -36 -109 -91c0 -54 55 -90 109 -90c55 0 91 36 91 90zM1323 568c0 36 -36 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c55 0 91 36 91 73zM1087 1075c0 55 -36 91 -90 91c-55 0 -109 -36 -109 -91
-c0 -54 54 -90 109 -90c54 0 90 36 90 90zM1722 568c0 36 -37 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c54 0 91 36 91 73zM1456 965c-23 3 -46 4 -70 4c-344 0 -616 -257 -616 -573c0 -53 8 -104 23 -152c-23 -2 -45 -3 -68 -3c-91 0 -163 18 -254 36
-l-253 -127l72 218c-181 127 -290 291 -290 490c0 345 326 616 725 616c356 0 669 -217 731 -509zM2048 404c0 -163 -108 -308 -254 -417l55 -181l-199 109c-73 -18 -146 -37 -218 -37c-345 0 -616 236 -616 526s271 526 616 526c326 0 616 -236 616 -526z" />
- <glyph glyph-name="internet-explorer" unicode="&#xf26b;" horiz-adv-x="1792"
-d="M1792 599c0 -35 -2 -70 -7 -104h-1151c0 -199 175 -343 367 -343c130 0 255 64 322 177h423c-114 -321 -419 -536 -759 -536c-123 0 -246 29 -356 83c-112 -57 -269 -116 -394 -116c-168 0 -237 103 -237 263c0 93 20 186 45 275c16 58 80 176 109 229
-c123 223 285 437 475 606c-153 -66 -319 -232 -427 -354c84 366 410 625 785 625c15 0 30 0 45 -1c124 57 297 117 433 117c162 0 301 -62 301 -245c0 -96 -37 -200 -75 -286c66 -119 101 -254 101 -390zM1722 1239c0 112 -80 181 -190 181c-84 0 -179 -34 -254 -70
-c162 -63 301 -179 393 -327c25 66 51 146 51 216zM128 2c0 -116 69 -179 183 -179c89 0 188 40 266 83c-163 96 -289 249 -351 428c-46 -96 -98 -224 -98 -332zM632 715h728c-7 193 -177 332 -364 332c-188 0 -357 -139 -364 -332z" />
- <glyph glyph-name="file-video-o" unicode="&#xf1c8;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280zM768 768c70 0 128 -58 128 -128v-384c0 -70 -58 -128 -128 -128h-384c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h384zM1260 766c12 -5 20 -17 20 -30v-576c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -17 3 -23 9l-265 266v90l265 266
-c6 6 15 9 23 9c4 0 8 -1 12 -2z" />
- <glyph glyph-name="angle-double-right" unicode="&#xf101;" horiz-adv-x="966"
-d="M582 576c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l393 393l-393 393c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23zM966 576c0 -8 -4 -17 -10 -23
-l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l393 393l-393 393c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" />
- <glyph glyph-name="safari" unicode="&#xf267;" horiz-adv-x="1792"
-d="M949 643c0 -33 -23 -64 -58 -64c-33 0 -64 24 -64 58c0 33 24 64 59 64c32 0 63 -23 63 -58zM964 585l350 581c-47 -44 -485 -447 -497 -468l-349 -580c46 43 485 448 496 467zM1611 640c0 -131 -36 -260 -104 -371c-10 5 -52 35 -60 35c-7 0 -13 -6 -13 -13
-c0 -13 47 -37 59 -44c-99 -150 -252 -258 -426 -301l-16 67c-1 9 -7 10 -15 10c-7 0 -11 -10 -10 -15l16 -68c-48 -10 -97 -15 -146 -15c-131 0 -260 37 -372 105c6 10 44 65 44 73c0 7 -6 13 -13 13c-14 0 -44 -60 -53 -72c-151 100 -260 255 -302 432l69 15
-c8 2 10 8 10 15s-10 11 -16 10l-68 -15c-9 46 -14 92 -14 139c0 134 38 266 109 379c10 -6 58 -39 66 -39c7 0 13 5 13 12c0 14 -53 41 -65 49c102 149 257 256 433 296l15 -67c2 -8 8 -10 15 -10s11 10 10 16l-15 66c44 8 89 13 134 13c134 0 265 -38 379 -109
-c-7 -10 -39 -57 -39 -65c0 -7 5 -13 12 -13c14 0 41 52 48 64c148 -100 254 -253 295 -427l-56 -12c-9 -2 -10 -8 -10 -16c0 -7 10 -11 15 -10l57 13c9 -46 14 -93 14 -140zM1696 640c0 442 -358 800 -800 800s-800 -358 -800 -800s358 -800 800 -800s800 358 800 800z
-M1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
- <glyph glyph-name="commenting-o" unicode="&#xf27b;" horiz-adv-x="1792"
-d="M640 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1024 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1408 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128z
-M896 1152c-416 0 -768 -234 -768 -512c0 -149 100 -291 273 -389l87 -50l-27 -96c-19 -71 -44 -126 -70 -172c101 42 193 99 275 171l43 38l57 -6c43 -5 87 -8 130 -8c416 0 768 234 768 512s-352 512 -768 512zM1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8
-c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22h-5c-20 0 -38 16 -43 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 353 401 640 896 640s896 -287 896 -640z" />
- <glyph glyph-name="snowdrift" unicode="&#xf2f1;" horiz-adv-x="1448"
-d="M1007 384c104 116 30 287 -165 383c7 -6 44 24 83 67s65 84 58 90c-195 96 -438 80 -542 -36s-30 -287 165 -383c-7 6 -44 -24 -83 -67s-65 -84 -58 -90c195 -96 438 -80 542 36zM103 1188v0c228 253 760 288 1188 78c15 -14 -42 -101 -127 -196s-167 -161 -182 -147
-c428 -210 591 -585 363 -839c-228 -253 -760 -288 -1188 -78c-15 14 42 101 127 196s167 161 182 147c-428 210 -591 585 -363 839z" />
- <glyph glyph-name="black-tie" unicode="&#xf27e;"
-d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
- <glyph glyph-name="youtube-play" unicode="&#xf16a;" horiz-adv-x="1792"
-d="M711 408l484 250l-484 253v-503zM896 1270c377 0 627 -18 627 -18c35 -4 112 -4 180 -76c0 0 55 -54 71 -178c19 -145 18 -290 18 -290v-136s1 -145 -18 -290c-16 -123 -71 -178 -71 -178c-68 -71 -145 -71 -180 -75c0 0 -250 -19 -627 -19c-466 4 -609 18 -609 18
-c-40 7 -130 5 -198 76c0 0 -55 55 -71 178c-19 145 -18 290 -18 290v136s-1 145 18 290c16 124 71 178 71 178c68 72 145 72 180 76c0 0 250 18 627 18z" />
- <glyph glyph-name="modx" unicode="&#xf285;" horiz-adv-x="1728"
-d="M1395 827l-614 386l92 151h855zM373 562l-184 116v858l1183 -743zM1392 697l147 -95v-858l-532 335zM1355 718l-500 -802h-855l356 571z" />
- <glyph glyph-name="caret-square-o-right" unicode="&#xf152;"
-d="M1088 640c0 -21 -10 -40 -27 -52l-448 -320c-19 -14 -45 -16 -66 -5c-22 11 -35 33 -35 57v640c0 24 13 46 35 57c21 11 47 9 66 -5l448 -320c17 -12 27 -31 27 -52zM1280 160v960c0 18 -14 32 -32 32h-960c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h960
-c18 0 32 14 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="gitlab" unicode="&#xf296;" horiz-adv-x="1793"
-d="M104 830l792 -1015l-868 630c-24 18 -34 49 -25 77zM566 830h660l-330 -1015zM368 1442l198 -612h-462l198 612c11 31 55 31 66 0zM1688 830l101 -308c9 -28 -1 -59 -25 -77l-868 -630zM1688 830h-462l198 612c11 31 55 31 66 0z" />
- <glyph glyph-name="arrows" unicode="&#xf047;" horiz-adv-x="1792"
-d="M1792 640c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v128h-384v-384h128c35 0 64 -29 64 -64c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-256 256c-12 12 -19 28 -19 45c0 35 29 64 64 64h128v384h-384
-v-128c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-256 256c-12 12 -19 28 -19 45s7 33 19 45l256 256c12 12 28 19 45 19c35 0 64 -29 64 -64v-128h384v384h-128c-35 0 -64 29 -64 64c0 17 7 33 19 45l256 256c12 12 28 19 45 19s33 -7 45 -19l256 -256
-c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-128v-384h384v128c0 35 29 64 64 64c17 0 33 -7 45 -19l256 -256c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="refresh" unicode="&#xf021;"
-d="M1511 480c0 -2 0 -5 -1 -7c-85 -354 -377 -601 -746 -601c-195 0 -384 77 -526 212l-129 -129c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v448c0 35 29 64 64 64h448c35 0 64 -29 64 -64c0 -17 -7 -33 -19 -45l-137 -137c94 -88 219 -138 348 -138
-c178 0 343 92 436 244c24 39 36 77 53 117c5 14 15 23 30 23h192c18 0 32 -15 32 -32zM1536 1280v-448c0 -35 -29 -64 -64 -64h-448c-35 0 -64 29 -64 64c0 17 7 33 19 45l138 138c-95 88 -220 137 -349 137c-178 0 -343 -92 -436 -244c-24 -39 -36 -77 -53 -117
-c-5 -14 -15 -23 -30 -23h-199c-18 0 -32 15 -32 32v7c86 355 381 601 750 601c196 0 387 -78 529 -212l130 129c12 12 28 19 45 19c35 0 64 -29 64 -64z" />
- <glyph glyph-name="file-o" unicode="&#xf016;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280z" />
- <glyph glyph-name="battery-three-quarters" unicode="&#xf241;" horiz-adv-x="2304"
-d="M256 256v768h1280v-768h-1280zM2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32
-h-1856c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" />
- <glyph glyph-name="reddit-alien" unicode="&#xf281;" horiz-adv-x="1792"
-d="M1792 690c0 -78 -44 -145 -109 -178c8 -31 12 -63 12 -96c0 -316 -357 -572 -797 -572c-439 0 -796 256 -796 572c0 32 4 64 11 94c-67 33 -113 101 -113 180c0 110 89 199 199 199c57 0 108 -24 145 -63c135 94 315 155 515 162l116 521c4 18 23 30 41 26l369 -81
-c24 48 75 82 133 82c83 0 150 -67 150 -149c0 -83 -67 -150 -150 -150c-82 0 -149 67 -149 149l-334 74l-104 -472c201 -6 383 -66 519 -160c36 38 87 61 143 61c110 0 199 -89 199 -199zM418 491c0 -83 67 -150 149 -150c83 0 150 67 150 150c0 82 -67 149 -150 149
-c-82 0 -149 -67 -149 -149zM1228 136c15 15 15 37 0 52c-14 14 -37 14 -51 0c-60 -61 -189 -82 -281 -82s-221 21 -281 82c-14 14 -37 14 -51 0c-15 -14 -15 -37 0 -52c95 -95 278 -102 332 -102s237 7 332 102zM1225 341c82 0 149 67 149 150c0 82 -67 149 -149 149
-c-83 0 -150 -67 -150 -149c0 -83 67 -150 150 -150z" />
- <glyph glyph-name="square" unicode="&#xf0c8;"
-d="M1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="ellipsis-v" unicode="&#xf142;" horiz-adv-x="384"
-d="M384 288v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM384 800v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM384 1312v-192c0 -53 -43 -96 -96 -96h-192
-c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96z" />
<glyph glyph-name="glide-g" unicode="&#xf2a6;" horiz-adv-x="1461"
d="M707 1231c0 53 -5 99 -69 99c-27 0 -54 -9 -78 -23c-151 -83 -213 -298 -213 -460c0 -108 37 -252 169 -252c30 0 68 -8 76 27c32 154 64 309 96 463c10 48 19 97 19 146zM1461 575c0 -10 -13 -20 -23 -20l-6 1c-68 10 -128 28 -197 28c-125 0 -240 -37 -351 -93
c-14 -7 -17 -13 -21 -27c-18 -68 -30 -138 -47 -206c-60 -233 -255 -514 -522 -514c-182 0 -294 124 -294 303c0 97 63 286 180 286c41 0 202 -53 203 -95c-2 -8 -157 -88 -157 -223c0 -41 20 -73 65 -73c159 0 232 290 248 412v9c0 8 -32 4 -38 4c-301 0 -477 168 -477 471
@@ -807,437 +1317,385 @@ c7 37 13 109 27 135s19 19 28 28s18 15 28 28s17 34 26 52s30 31 26 53s-36 37 -54 5
s-46 -30 -111 -30s76 103 85 112s23 17 27 27s0 18 0 27s12 22 8 25c-2 1 -4 1 -6 1zM1212 1096c-62 -8 -139 -10 -182 -26c-45 -17 -54 -36 -81 -54s-67 -28 -81 -54s0 -54 0 -81s-26 -68 0 -82s55 37 82 55s63 64 81 54s6 -7 0 -27s-51 -41 -52 -81s102 -73 68 -126
s-188 46 -232 17s-19 -54 -28 -81s-37 -52 -27 -81s52 -34 81 -54s81 -56 82 -58s20 -99 27 -135c14 -73 -27 -199 76 -231c31 14 78 41 106 60c13 34 24 72 35 94c22 44 71 123 80 161s0 37 0 55s7 30 0 54s-36 54 -54 81s-34 64 -54 81s-46 18 -54 27s-4 8 -4 13
s-4 7 5 14s34 8 54 0s36 -36 54 -54s25 -51 54 -54s54 36 81 54c25 17 52 56 76 55c-12 131 -98 312 -193 404z" />
- <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792"
-d="M1760 640c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1728zM483 704c-19 24 -36 51 -51 80c-32 65 -48 128 -48 188c0 122 45 224 134 309s220 127 393 127c38 0 93 -7 167 -19c44 -8 103 -24 177 -48
-c7 -26 14 -66 21 -118c9 -79 14 -140 14 -183c0 -14 -2 -29 -5 -45l-12 -3l-84 6l-14 2c-34 101 -69 169 -103 205c-59 61 -130 91 -210 91c-76 0 -137 -20 -182 -59s-67 -88 -67 -146c0 -49 22 -95 66 -140s137 -88 279 -129c48 -14 105 -36 173 -66c36 -17 68 -34 95 -52
-h-743zM990 448h411c5 -28 7 -59 7 -92c0 -72 -13 -143 -41 -212c-15 -37 -38 -71 -71 -104c-24 -23 -60 -50 -109 -81c-50 -30 -100 -53 -153 -66c-53 -14 -120 -21 -203 -21c-55 0 -121 2 -195 23l-140 40c-39 11 -62 20 -72 28c-4 4 -8 11 -8 22v13c0 8 2 60 -2 156
-c-2 50 2 85 2 105v44l102 2c37 -85 54 -136 65 -154c24 -39 51 -70 80 -94s64 -43 105 -57c40 -15 85 -22 132 -22c42 0 89 9 139 27c51 17 92 46 122 86c31 40 47 83 47 129c0 56 -27 108 -81 157c-22 19 -68 43 -137 71z" />
- <glyph glyph-name="comment-o" unicode="&#xf0e5;" horiz-adv-x="1792"
-d="M896 1152c-416 0 -768 -234 -768 -512c0 -149 100 -291 273 -389l87 -50l-27 -96c-19 -71 -44 -126 -70 -172c101 42 193 99 275 171l43 38l57 -6c43 -5 87 -8 130 -8c416 0 768 234 768 512s-352 512 -768 512zM1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8
-c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22h-5c-20 0 -38 16 -43 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 354 401 640 896 640s896 -286 896 -640z" />
- <glyph glyph-name="bluetooth" unicode="&#xf293;" horiz-adv-x="1322"
-d="M734 483l148 -148l-149 -149zM733 1094l149 -149l-148 -148zM603 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1322 640c0 -710 -270 -896 -661 -896s-661 186 -661 896s270 896 661 896s661 -186 661 -896z
+ <glyph glyph-name="globe-e" unicode="&#xf304;"
+d="M768 1404c204 0 399 -81 543 -225s225 -339 225 -543s-81 -399 -225 -543s-339 -225 -543 -225s-399 81 -543 225s-225 339 -225 543s81 399 225 543s339 225 543 225zM863 1165h-1h-6c-78 -1 -136 -19 -204 -29s-157 -10 -205 -29s-58 -39 -87 -58s-72 -30 -87 -58
+s0 -58 0 -87s-28 -73 0 -88s58 39 87 58s68 70 88 59s6 -8 0 -29s-54 -44 -56 -87s110 -78 73 -135c-37 -56 -202 50 -250 18s-19 -58 -29 -87s-40 -57 -29 -88s55 -37 87 -58s87 -59 88 -62s21 -106 29 -145c6 -34 3 -78 4 -120c44 -36 123 -82 176 -102
+c21 41 37 107 53 139c24 48 77 133 87 174s0 39 0 58s8 32 0 58s-40 58 -59 87s-37 69 -58 88s-49 19 -58 29s-4 9 -4 14s-5 8 5 15s36 9 58 0s39 -39 58 -58s27 -55 58 -58s58 39 87 58c29 20 74 35 107 -22c8 -16 43 -35 68 -35s22 42 30 58s24 37 48 41s28 -14 44 -30
+s30 -69 53 -69s22 43 30 59c15 34 6 65 57 116c19 19 50 29 57 57s-21 62 -29 86s-28 63 -28 88c0 21 27 25 63 44c-24 30 -67 73 -97 97c-22 1 -41 2 -55 4c-69 8 -176 29 -253 29zM1251 411c-32 1 -70 -43 -105 -60c-39 -19 -100 -32 -116 -59s0 -39 0 -58s-14 -44 0 -58
+s38 0 58 0s37 9 59 0c12 -5 23 -17 33 -29c40 34 96 98 125 142c-5 11 -10 21 -14 32c-10 29 5 74 -29 88c-4 2 -7 2 -11 2z" />
+ <glyph glyph-name="globe-w" unicode="&#xf305;"
+d="M768 1404c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM924 1238v0c-3 0 -6 -1 -7 -1c-2 0 -153 -25 -208 -34s-156 -30 -201 -34s-46 0 -69 0c-7 0 -14 1 -21 2c-65 -43 -152 -132 -193 -198c0 -4 2 -7 6 -11c12 -12 46 0 69 0
+s59 8 69 0s1 -7 2 -9s-16 -108 -7 -144s10 -88 33 -129s110 -63 145 -98s106 -34 112 -71s-30 -79 -42 -102s-40 -40 -35 -69s46 -47 69 -70s47 -29 69 -69s25 -125 35 -173c2 -9 5 -22 7 -31c3 0 8 -1 11 -1c57 0 146 15 200 33c6 41 13 83 24 103c18 33 24 24 36 36
+s23 18 35 35s23 46 34 68s38 38 33 67s-47 47 -70 70s-35 50 -69 69s-94 24 -130 33s-163 15 -165 16s0 -8 -8 2s-3 50 -3 73s13 44 30 85c17 23 7 12 33 31c13 12 55 -57 73 -57s-4 117 7 128c46 46 163 125 163 174s-46 46 -69 69s-60 -39 -143 -39s97 131 109 143
+s30 22 35 35s0 23 0 34s14 28 9 32c-2 2 -5 2 -8 2zM1041 1214v0c-6 -14 -7 -31 -14 -45c-12 -23 -35 -43 -35 -69s23 -46 35 -69s1 -60 34 -69s69 46 104 69c21 14 50 26 72 40c-46 50 -134 114 -196 143z" />
+ <glyph glyph-name="gnu" unicode="&#xf34d;" horiz-adv-x="1833"
+d="M387 493c-12 -1 -28 -6 -39 -26c-9 -16 -30 -19 -40 -16c-16 5 -36 9 -56 -5s-42 -3 -38 23s13 49 38 63c54 31 16 54 46 85c30 32 24 41 23 84c-101 15 -159 44 -223 124s-89 147 -96 247s0 165 43 248s89 124 168 166s156 51 228 50s119 -7 160 -30
+c40 -23 77 -52 101 -52s41 6 52 15c3 -78 -67 -85 -130 -87s-101 25 -159 15s-152 -36 -198 -116s-48 -109 -44 -176s61 -116 94 -117s40 8 69 27s174 199 224 240s99 53 152 54s67 -1 110 -19s69 -50 103 -70c18 10 29 26 45 38c58 42 87 54 156 47c40 -4 90 -26 120 -52
+c53 -46 97 -110 132 -159c28 -38 60 -83 106 -97c50 -15 88 50 94 86c3 21 7 38 7 61s-2 50 -9 74s-17 47 -29 66c-20 32 -52 65 -86 82c-19 10 -63 26 -91 27c-34 1 -60 -10 -92 -12c-38 -3 -106 -12 -136 18c-19 19 -22 31 -25 56c8 -7 21 -12 31 -13c24 -2 47 18 66 29
+c16 9 38 27 59 35c54 22 119 21 176 15c45 -5 105 -25 145 -48s79 -60 107 -96c36 -45 55 -84 68 -141c16 -72 21 -181 1 -252c-16 -56 -68 -143 -112 -185s-95 -61 -152 -72c2 -12 2 -22 5 -32c4 -13 12 -29 29 -24c7 2 10 4 19 -4s5 -38 -20 -51c-12 -7 -26 -8 -46 -8
+s-50 -1 -72 3s-35 21 -59 24c-37 4 -65 31 -95 50c-12 8 -17 8 -24 12c4 -12 9 -24 12 -35s2 -22 3 -31s4 -17 5 -24c6 -5 8 -13 18 -16s26 2 36 3s17 7 25 5s15 -7 22 -12s13 -7 18 -20s10 -41 11 -59s-2 -34 -7 -49s-10 -22 -25 -36s-38 -35 -62 -50c4 -7 6 -13 13 -20
+s22 -15 28 -22s9 -13 9 -21s0 -20 -7 -29c-17 -23 -37 -26 -61 -37c4 -26 7 -44 1 -70c-2 -10 -7 -34 -20 -40s-38 -3 -54 -5s-24 -6 -36 -8c-7 -11 -18 -22 -22 -32s-3 -13 0 -23s14 -23 17 -35s4 -24 1 -36s-8 -20 -18 -30s-28 -19 -38 -27s-20 -9 -17 -23
+c4 -19 31 -49 51 -56c12 -4 28 -3 43 3c-1 -16 -15 -27 -24 -38c25 7 48 21 65 39c-5 -16 -23 -41 -49 -63s-27 -17 -40 -26c24 -5 46 -3 65 0c-10 -6 -27 -14 -49 -16s-36 -1 -56 4s-38 23 -62 35c2 -9 4 -19 14 -28s26 -14 42 -22c-21 2 -43 2 -63 7c-15 3 -25 8 -36 13
+s-20 13 -30 20c5 -9 6 -20 14 -27s22 -10 32 -15c-11 0 -22 -3 -33 0s-22 7 -34 16s-24 20 -34 31s-22 25 -26 35s2 17 3 26c-7 -5 -16 -7 -21 -14s-9 -12 -7 -24s12 -26 20 -39c-23 18 -35 26 -40 48c-5 21 8 39 18 55c5 8 12 15 17 23c-10 10 -22 19 -31 30s-12 26 -21 37
+s-22 18 -32 27c9 -20 25 -44 28 -59s-4 -25 -9 -33s-15 -10 -23 -15s-21 -1 -26 -9s-6 -19 -1 -26l19 -30c-7 4 -19 14 -25 21s-14 15 -15 25s-1 18 5 27s24 12 32 19s12 11 12 20s-10 15 -17 21c-23 17 -52 32 -71 53c-11 12 -16 21 -18 29s0 15 5 25s25 22 27 33
+s-8 13 -16 17s-24 -2 -32 5s2 20 -7 28s-30 3 -40 11s-14 18 -18 30s-3 25 -1 34s10 10 14 14s8 8 2 15s-25 0 -36 8s-4 28 -12 37s-23 5 -30 8s-10 -6 -15 9s-5 60 -11 77s-17 1 -23 18s0 44 -3 70l-12 69c-40 -27 -66 -34 -109 -42c-4 -105 -14 -167 22 -283
+s108 -186 205 -284c-128 96 -190 175 -228 275s-31 184 -27 280zM1069 535c10 0 21 -4 28 -8s15 -8 21 -14c16 -16 28 -36 33 -58c3 -14 4 -32 5 -49c-5 15 -8 32 -15 46c-11 22 -29 42 -51 52c-7 3 -13 3 -17 2c2 -3 5 -6 5 -10s0 -13 -8 -17c-12 -6 -27 -1 -36 7
+c-10 8 -13 23 -8 35c6 15 30 15 43 14zM945 556c1 25 10 46 33 58c12 6 29 15 46 17c16 2 55 1 78 -10c18 -8 29 -21 45 -30s27 -16 42 -26c23 -16 36 -33 52 -44c8 -5 19 -5 29 -8c-8 -2 -19 -5 -27 -2c-11 3 -26 13 -34 20c-15 12 -22 19 -38 28c-9 6 -25 12 -35 19
+s-28 21 -38 26c-13 6 -36 10 -50 10c-19 -1 -48 -4 -63 -18s-20 -25 -17 -43c6 6 9 15 15 20c12 10 24 10 39 8c16 -2 25 -11 30 -27c-4 3 -10 8 -15 10c-12 4 -22 3 -34 -3c-14 -7 -9 -18 -11 -30c-1 -6 -3 -10 -5 -15c-5 1 -10 3 -14 7c0 -6 0 -11 1 -17s4 -14 6 -21
+c-10 10 -19 19 -25 31s-11 26 -10 40zM961 739c7 10 10 26 14 39c-2 -16 1 -34 -7 -46s-22 -11 -34 -14c9 7 20 11 27 21v0zM793 494c9 7 34 1 52 0l-40 -10c-1 -4 0 -9 -3 -13s-9 -5 -13 -8c0 12 -5 24 4 31zM921 1002c11 -6 25 -14 35 -14s12 6 18 10c9 -29 19 -61 34 -87
+c6 -11 10 -6 15 -17s7 -34 12 -48s10 -24 15 -36c-13 19 -31 43 -38 59s-2 17 -8 32s-19 38 -28 57c-7 -1 -14 -2 -19 0s-5 7 -9 10s-12 3 -18 8s-8 16 -9 26zM863 859c10 1 22 -2 32 -1s17 2 25 4c-2 14 0 41 -13 51c-9 6 -45 1 -54 -1c-21 -5 -45 -17 -66 -25
+c20 14 36 27 60 34c14 4 47 10 62 6c7 -2 8 -5 12 -11c14 -19 14 -36 18 -59c4 -6 7 -9 10 -15s4 -15 5 -22c-4 5 -1 12 -11 16s-26 0 -40 -1c10 -7 16 -14 16 -29c0 -18 -15 -31 -31 -32c-22 -2 -33 3 -42 22c-4 8 -1 18 -1 26c-26 -2 -26 -1 -45 -17c10 -15 17 -24 34 -33
+c10 -5 21 -11 33 -13s31 -4 44 -2s20 5 29 14s10 21 14 31c-1 -9 -2 -21 -5 -28c-11 -21 -29 -27 -51 -27c-21 0 -47 5 -67 13c-16 6 -42 25 -48 41c-4 11 -1 24 -1 36c22 14 26 11 52 15c11 2 19 6 29 7zM736 957c1 9 2 8 3 12c-20 5 -27 -7 -39 -31c-4 -9 0 -14 -5 -20
+s-12 -5 -20 -11s-15 -16 -22 -22c-14 -12 -34 -19 -51 -27c11 8 34 21 41 33c4 7 3 19 9 25s8 10 16 11s5 11 7 18s8 12 13 19s12 18 22 22s26 -1 34 1s3 9 9 12s17 1 25 5c13 6 20 17 28 29c1 -25 1 -43 -8 -66c-10 -26 -20 -42 -49 -58c-10 -6 -20 -8 -28 -11
+c5 7 11 10 14 20s0 30 1 39v0zM1199 835c-14 -1 -16 1 -27 -7c6 -9 11 -18 17 -27c-1 18 1 21 10 34zM1164 848c19 8 35 15 56 16c8 1 21 -1 29 -1c7 10 16 18 19 30c2 8 2 45 -2 55c-11 28 -22 28 -38 44c-11 12 -12 29 -15 49c-1 7 -5 17 -7 24c-20 3 -42 4 -65 3
+c11 11 22 21 25 37s0 36 -9 51s-23 27 -37 39s-33 22 -46 32c17 6 34 15 50 18c43 8 80 -4 121 -29c24 -15 44 -29 69 -55s56 -74 80 -103s45 -51 66 -68s40 -22 60 -33l32 -33l25 31l41 -4l8 45l38 11l-6 62l27 19l-20 39l20 42l-27 48l11 46l-31 27l-5 49l-43 17l-17 42
+l-49 1l-24 32l-33 -2l-37 4l-21 15l-30 -20l-36 19l-72 -28l47 41l49 8l37 10l51 -17l44 11l43 -25l46 3l22 -40l45 -6l25 -44l28 -16l8 -57l25 -24l-11 -50l30 -37l-28 -41l30 -25l-39 -34l39 -41l-47 -15l31 -43l-38 -7l25 -47h-43l21 -35l-47 6l11 -52l-35 32l-13 -63
+l-24 45l-14 -56l-30 42l1 -59l-34 53c7 -30 5 -63 25 -91c61 8 101 23 147 68c42 41 92 126 106 180c16 61 16 173 1 236c-15 60 -34 89 -68 138c-33 35 -65 72 -107 97c-61 37 -140 47 -210 46c-39 -1 -64 -9 -87 -17c-40 -15 -73 -46 -114 -62c-13 -5 -24 -6 -35 0
+c10 -21 22 -29 48 -37c19 -5 62 -3 93 0c33 3 50 14 95 13c44 -1 78 -17 97 -28c39 -22 68 -48 92 -87c13 -22 22 -45 29 -70s10 -53 10 -77s-2 -46 -8 -68c-14 -51 -44 -103 -107 -95c-39 5 -97 77 -116 104c-39 54 -80 112 -129 157c-30 27 -72 45 -112 49
+c-76 7 -98 -7 -155 -54c12 -4 23 -6 35 -11c26 -12 51 -27 72 -47c22 -21 31 -34 32 -64c1 -20 -15 -35 -30 -49c-9 -9 -22 -16 -29 -23c-10 -9 -21 -19 -9 -33c5 -5 12 -10 19 -15c11 -8 6 -37 -8 -45c-18 -10 -40 -9 -55 4c19 3 31 6 31 21c0 9 -12 16 -23 21
+c-27 12 -47 11 -74 30s-27 30 -34 60c-13 -1 -26 -1 -43 -7s-36 -20 -52 -23c-40 -9 -47 -6 -69 0c-38 10 -89 -7 -138 -23c-8 -3 -42 0 -64 -8c-35 -12 -83 -41 -111 -65c-42 -36 -97 -143 -129 -266c-3 -37 7 -62 -17 -80s-22 -65 -30 -78s-18 -8 -35 -26s-25 -15 -25 -50
+c15 10 36 20 55 21c17 1 17 -21 60 22c23 23 67 23 98 33s86 31 141 93s82 127 93 221c2 -17 4 -36 -3 -82s-22 -97 10 -159l21 -39c-12 16 -36 43 -43 62l-16 44c-37 -57 -45 -67 -96 -108c-2 -26 -2 -53 6 -77s-5 -53 1 -69s21 -7 26 -23s-2 -48 5 -64s25 -7 34 -12
+s12 -11 17 -18s-2 -23 8 -28s24 -1 34 -6s11 -17 9 -28s-13 -15 -18 -26s-4 -19 2 -29s18 -15 30 -20s30 -2 43 -9s24 -21 31 -31s9 -17 9 -28s-5 -23 -11 -33s-18 -22 2 -42s19 -11 30 -24c-1 22 -11 39 -4 56s26 20 37 27s17 17 25 26c0 -11 1 -23 0 -32
+c-3 -17 -8 -32 18 -35c12 -1 23 6 35 11c-6 -12 -17 -21 -19 -35s0 -29 10 -43s26 -24 38 -32s19 -9 28 -13c0 -14 -3 -27 -1 -40s6 -24 13 -35s19 -16 30 -24c-6 14 -18 27 -18 42s4 26 19 39s49 25 65 38s21 20 27 33s4 33 5 44c5 -16 6 -20 8 -37s-9 -40 -14 -52
+c20 10 33 25 39 40c4 -3 1 -10 3 -23c7 7 16 13 23 20s14 12 18 21s3 20 0 31s-14 23 -21 35s0 23 0 37c-13 2 -24 9 -39 7s-32 -19 -47 -19s-24 14 -37 18s-25 3 -38 5c16 15 79 23 121 30c37 6 74 9 112 10c17 0 39 -5 51 -2s9 11 12 20c10 24 5 46 0 71
+c-34 4 -70 9 -104 6c-33 -3 -72 -19 -107 -20c-30 -1 -75 6 -101 22c-31 19 -55 61 -64 74c-14 22 -32 64 -43 83s-13 25 -22 33s-21 9 -32 13c12 -1 26 2 37 -4c17 -10 36 -50 46 -67c11 37 8 51 40 72c-26 -29 -26 -50 -32 -84c21 -35 51 -91 90 -107c14 -6 38 -9 53 -11
+c47 -6 93 10 140 21c34 8 69 4 110 2c14 -1 47 8 54 22c4 8 3 17 -2 25s-19 13 -27 20s-12 16 -18 24c-32 -6 -58 -8 -81 -9c17 7 32 10 50 17s38 19 52 28s23 14 33 25s23 23 31 36s9 28 9 44s0 40 -6 53s-19 17 -29 20s-16 -5 -26 -6s-20 -7 -35 0s-32 21 -47 42
+s-26 55 -41 81c-26 45 -59 88 -90 130c-3 10 -7 25 -8 39c-2 25 -3 50 5 74c6 18 15 37 34 45c8 3 17 5 24 2s14 -10 11 -19c-3 -10 -10 -10 -15 -15c-8 -8 -11 -14 -14 -25c8 0 20 1 27 -1c9 -2 18 -9 23 -22c-11 10 -16 15 -30 15c-6 0 -14 -2 -21 -3c-3 -8 -4 -20 -8 -26
+s-10 -4 -13 -12s-2 -20 -1 -30zM1259 860c4 -2 6 -2 11 -6s12 -8 16 -18s5 -25 4 -31c-4 1 -9 1 -13 4s-6 11 -11 14s-9 2 -14 3c3 -8 4 -16 3 -23c-3 -16 -12 -23 -27 -25c-6 -1 -17 1 -23 2c3 -6 7 -11 10 -17c13 2 22 2 29 5s13 10 22 13s17 4 26 5
+c-7 -6 -13 -14 -20 -20c5 -16 12 -31 17 -47c12 -7 22 -11 37 -20s32 -25 51 -34s30 -13 50 -17s35 -20 55 -23s56 -2 71 -1c17 2 40 10 42 29c-14 -4 -37 0 -48 27c-5 12 -2 34 -10 48s-17 19 -30 36s-34 45 -45 68s-13 50 -23 71s-25 38 -36 54c-25 35 -45 59 -86 77
+c-20 9 -42 12 -63 17c-9 -4 -20 -8 -22 -18s2 -25 9 -33c12 -13 30 -26 37 -46c5 -13 6 -55 2 -67s-13 -19 -21 -27zM1263 758c-4 -3 -7 -6 -13 -9s-15 -4 -23 -6c11 -18 23 -35 34 -54s21 -39 31 -58c0 11 1 23 -1 33s-6 19 -11 35s-10 37 -17 59zM957 1146
+c-2 -17 1 -44 5 -61c4 -20 8 -31 25 -43c30 -22 50 -19 73 -32c11 -6 25 -17 29 -28s-3 -22 -11 -27c15 -2 31 14 24 31c-3 8 -19 13 -24 21s-5 16 -3 25c4 15 35 30 46 42c17 19 23 35 14 59c-13 34 -64 62 -95 75c-14 6 -22 6 -33 9c22 -13 46 -23 57 -52
+c9 -24 2 -34 2 -55c0 -10 13 -16 19 -22c5 -5 4 -9 0 -16c0 7 -3 11 -8 15c-9 6 -18 5 -23 17c-7 19 7 37 -8 58c-12 16 -27 34 -48 34c-10 0 -18 -1 -28 -4l-13 17h-1c-28 26 -48 47 -88 65s-59 21 -105 20s-91 -5 -144 -51s-189 -220 -222 -242s-41 -30 -82 -30
+s-105 59 -108 132s-4 99 47 187s143 115 211 124s110 -15 160 -15s100 9 115 49c-7 -4 -17 -9 -44 -8s-65 33 -107 54s-90 23 -150 24s-135 -3 -210 -43s-126 -83 -169 -162s-50 -143 -43 -239s36 -167 93 -237s114 -104 216 -117l21 95l-38 -55l1 62l-35 -44l-15 59
+l-28 -47l-14 65l-41 -33l13 54l-54 -6l25 38l-50 -1l29 50l-44 7l35 45l-53 16l44 43l-44 35l34 27l-31 42l34 40l-13 53l29 25l8 60l33 16l28 47l52 5l25 42l52 -2l49 26l51 -11l58 17l43 -10l55 -8l54 -43l-82 29l-42 -20l-34 21l-24 -16l-42 -5l-38 3l-27 -34h-56
+l-20 -45l-49 -18l-5 -51l-36 -28l12 -49l-30 -51l23 -44l-23 -41l31 -20l-7 -65l43 -11l9 -48l47 5l29 -33l36 35c66 33 93 51 144 106c58 63 92 121 169 164c56 31 101 42 163 31c59 -10 78 -45 121 -82c5 8 5 11 13 17c-2 -11 -6 -23 -7 -33v0z" />
+ <glyph glyph-name="gnu-social" unicode="&#xf2e7;" horiz-adv-x="1513"
+d="M218 1404v0h1077c121 0 218 -97 218 -218v-873c0 -121 -97 -218 -218 -218h-118c-80 -349 -645 -351 -645 -351s334 104 335 351h-649c-121 0 -218 97 -218 218v873c0 121 97 218 218 218zM532 1229c-35 -5 -114 -89 -114 -150c0 -49 -3 -127 70 -167
+c-69 -67 -82 -163 -81 -247c2 -154 67 -382 357 -397s352 214 352 360h-305l50 -134l89 5s17 -107 -174 -100c-122 5 -200 68 -200 249s22 211 193 218s203 -139 203 -139l142 -3s-11 107 -93 188c73 40 72 118 69 167c-2 47 -102 169 -125 148s39 -41 34 -143
+c-2 -45 11 -79 -75 -79c-57 0 -33 51 -105 51c-43 0 -59 -28 -65 -50c-6 22 -21 50 -64 50c-72 0 -49 -51 -106 -51c-86 0 -72 34 -74 79c-5 102 56 122 33 143c-1 1 -3 2 -5 2h-6z" />
+ <glyph glyph-name="gnupg" unicode="&#xf30d;" horiz-adv-x="1156"
+d="M0 667h81v244c0 274 223 497 497 497s497 -223 497 -497v-242c-1 -1 -3 -1 -4 -2v0l-1 -1v0v0v0h-1v-1v0v0v0h-1v0v0v-1v0h-1v0v0v0l-1 -1v0v0h-1v0l-1 -1v0v0v0v0l-1 -1v0v0v0h-1v0v0v0l-1 -1v0v0v0v0v0h-1v0v-1v0v0v0v0h-1v0v0v0l-2 -1v0v0l-1 -1v0h-1v0v-1v0v0v0h-1v0
+v0v0v0h-1v-1h-1l-1 -1h-1v-1l-2 -1h-1l-1 -1v0l-3 -1l-1 -1l-1 -1h-1l-1 -1l-1 -1h-1l-4 -2v0l-1 -1h-1v-1h-2l-3 -2l-1 -1c-1 -1 -3 -1 -4 -2h-1v0l-2 -2h-1h-1l-1 -1v0l-2 -1v0l-2 -1h-1l-1 -1c-1 -1 -3 -1 -4 -2l-1 -1c-2 -1 -3 -1 -5 -2v0l-4 -2l-2 -1
+c-2 -1 -3 -2 -5 -3v0c-99 -47 -257 -97 -557 -119c-215 -15 -346 -110 -431 -224v390v0zM310 667h536v244c0 148 -120 268 -268 268s-268 -120 -268 -268v-244zM1004 628c-1 -1 -4 -1 -5 -2zM803 1288c-64 38 -138 60 -218 60c-218 0 -398 -164 -422 -376
+c64 200 251 345 472 345c59 0 116 -10 168 -29v0zM1156 573v-701h-989c109 61 190 54 325 50c183 -6 385 71 485 173s-9 24 -122 -5s-330 -31 -476 7c459 -6 637 142 739 275s-44 24 -138 -22s-258 -79 -439 -55c273 1 482 137 615 278v0z" />
+ <glyph glyph-name="google" unicode="&#xf1a0;" horiz-adv-x="1505"
+d="M768 750h725c7 -39 12 -77 12 -128c0 -438 -294 -750 -737 -750c-425 0 -768 343 -768 768s343 768 768 768c207 0 381 -76 515 -201l-209 -201c-57 55 -157 119 -306 119c-262 0 -476 -217 -476 -485s214 -485 476 -485c304 0 418 218 436 331h-436v264z" />
+ <glyph glyph-name="google-play" unicode="&#xf34e;" horiz-adv-x="1615"
+d="M0 -133v1546c0 54 31 101 76 123l896 -896l-896 -896c-45 23 -76 69 -76 123zM1256 356l-979 -566l773 773zM1561 748c31 -25 54 -63 54 -108s-20 -82 -52 -107l-209 -120l-227 227l227 227zM277 1490l979 -566l-206 -207z" />
+ <glyph glyph-name="google-plus" unicode="&#xf0d5;" horiz-adv-x="2304"
+d="M1437 623c0 -419 -281 -716 -704 -716c-405 0 -733 328 -733 733s328 733 733 733c198 0 363 -72 491 -192l-199 -191c-54 52 -149 113 -292 113c-250 0 -454 -207 -454 -463s204 -463 454 -463c290 0 399 209 416 316h-416v252h692c7 -37 12 -74 12 -122zM2304 745v-210
+h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
+ <glyph glyph-name="google-plus-official" unicode="&#xf2b3;"
+d="M917 631c0 22 -2 43 -6 64h-362v-132h217c-16 -106 -116 -165 -217 -165c-133 0 -239 110 -239 242s106 242 239 242c56 0 112 -19 153 -59l104 101c-71 66 -160 100 -257 100c-213 0 -384 -172 -384 -384s171 -384 384 -384c221 0 368 156 368 375zM1262 585h109v110
+h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="google-plus-square" unicode="&#xf0d4;"
+d="M917 631c0 25 -3 45 -6 64h-362v-132h217c-8 -56 -65 -165 -217 -165c-132 0 -239 108 -239 242s107 242 239 242c74 0 124 -31 153 -59l104 101c-67 62 -154 100 -257 100c-213 0 -384 -172 -384 -384s171 -384 384 -384c221 0 368 156 368 375zM1262 585h109v110h-109
+v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="google-wallet" unicode="&#xf1ee;" horiz-adv-x="1756"
+d="M405 864c20 0 40 -10 52 -26c175 -239 297 -495 362 -774h-446c-80 278 -198 532 -367 749c-16 21 0 51 26 51h373zM964 507c-33 -135 -75 -266 -125 -393c-53 209 -138 405 -256 594c26 145 41 294 44 449c141 -227 253 -443 337 -650zM1063 1216
+c299 -412 521 -920 569 -1472h-451c-33 534 -279 1040 -553 1472h435zM1756 640c0 -278 -38 -570 -101 -812c-44 370 -166 738 -359 1083c-17 202 -53 398 -106 584c-5 21 10 41 31 41h359c28 0 54 -19 61 -46c76 -270 115 -556 115 -850z" />
+ <glyph glyph-name="graduation-cap" unicode="&#xf19d;" horiz-adv-x="2304"
+d="M1774 700l18 -316c8 -141 -287 -256 -640 -256s-648 115 -640 256l18 316l574 -181c16 -5 32 -7 48 -7s32 2 48 7zM2304 1024c0 -14 -9 -26 -22 -31l-1120 -352c-4 -1 -7 -1 -10 -1s-6 0 -10 1l-652 206c-57 -45 -97 -155 -105 -290c38 -22 63 -62 63 -109
+c0 -45 -23 -84 -58 -107l58 -433c1 -9 -2 -18 -8 -25s-15 -11 -24 -11h-192c-9 0 -18 4 -24 11s-9 16 -8 25l58 433c-35 23 -58 62 -58 107c0 48 27 89 65 111c6 117 36 243 98 330l-333 104c-13 5 -22 17 -22 31s9 26 22 31l1120 352c4 1 7 1 10 1s6 0 10 -1l1120 -352
+c13 -5 22 -17 22 -31z" />
+ <glyph glyph-name="gratipay" unicode="&#xf184;"
+d="M773 234l350 473c27 37 59 156 -43 223c-86 56 -168 13 -211 -37c-16 -18 -44 -40 -96 -40s-79 22 -95 40c-43 50 -125 93 -212 37c-101 -67 -69 -186 -42 -223zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="grav" unicode="&#xf2d6;" horiz-adv-x="1794"
+d="M1291 1060c-32 36 -84 -25 -56 -58c27 -33 116 -9 56 58zM895 814c-11 -11 -28 -11 -38 0c-11 10 -11 27 0 37c10 11 27 11 38 0c10 -10 10 -27 0 -37zM1060 740l-35 -35c-16 -17 -43 -17 -60 0l-38 38c-16 17 -16 43 0 60l35 35c16 16 43 16 60 0l38 -39
+c16 -16 16 -43 0 -59zM951 870c-10 -10 -27 -10 -38 0c-10 11 -10 28 0 38c11 11 28 11 38 0c11 -10 11 -27 0 -38zM1354 968c-45 -85 -163 -120 -235 -69c-72 52 -122 156 -43 246c78 90 147 62 216 -3c43 -41 106 -90 62 -174zM1555 486c9 58 -74 60 -92 93
+c-49 87 -100 133 -197 110c42 29 85 22 85 22c1 23 0 47 -34 90c14 45 1 81 1 81c56 31 97 88 105 156c13 112 -68 214 -180 227c-80 9 -158 -28 -196 -93c-84 -145 5 -256 81 -294c-52 5 -124 43 -145 124c-24 93 10 180 32 222c0 0 -16 21 -29 32c0 0 -50 0 -89 -19
+c43 55 91 52 91 52c0 23 -2 54 -13 78c-20 41 -90 47 -117 -15c1 3 2 5 4 7c-18 -43 -4 -202 61 -315c-9 -5 -33 -22 -47 -36c-78 -35 -203 -218 -203 -218c-102 -39 -280 -184 -256 -288c1 -11 5 -20 11 -27c-10 -8 -20 -18 -30 -30c-43 -50 -19 -127 64 -88
+c57 26 108 73 132 110c0 0 -21 18 -60 16c100 24 125 34 168 33c29 -14 29 124 29 124c0 53 -8 112 -40 150c45 -44 105 -118 101 -219c-3 -66 -55 -83 -55 -83c-33 -60 -156 -238 -110 -383c0 0 -35 54 -37 80c-63 -70 -169 -189 -90 -233c96 -53 394 320 457 514
+c125 75 200 171 231 235c80 -159 346 -343 367 -215zM1794 640c0 -495 -402 -896 -897 -896s-897 401 -897 896s402 896 897 896s897 -401 897 -896z" />
+ <glyph glyph-name="h-square" unicode="&#xf0fd;"
+d="M1280 192v896c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-320h-512v320c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-896c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v320h512v-320c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1536 1120v-960
+c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="hackaday" unicode="&#xf30a;" horiz-adv-x="1686"
+d="M215 1408c118 0 214 -95 215 -213v-2c0 -11 -1 -21 -3 -31l168 -149c-60 -45 -109 -106 -142 -178l-173 154c-21 -7 -42 -11 -65 -11c-119 0 -215 96 -215 215c0 14 1 28 4 42l138 -122l150 167l-134 120c18 5 37 8 57 8zM1247 436l162 -143c17 5 45 9 62 9v0
+c118 0 214 -95 215 -213v-2c0 -13 -2 -26 -4 -39l-139 123l-150 -166l140 -124c-20 -6 -41 -9 -62 -9c-119 0 -215 96 -215 215c0 12 1 24 3 35l-140 124c56 50 100 115 128 190zM1471 1408c20 0 39 -3 57 -8l-134 -120l150 -167l138 122c3 -14 4 -28 4 -42
+c0 -119 -96 -215 -215 -215c-23 0 -44 4 -65 11l-174 -154c-33 72 -81 133 -141 178l167 149c-2 10 -2 20 -2 31v2c1 118 97 213 215 213zM439 436v0c28 -75 71 -140 127 -190l-139 -124c2 -11 3 -23 3 -35c0 -119 -96 -215 -215 -215c-21 0 -42 3 -62 9l140 124l-150 166
+l-139 -123c-2 13 -4 26 -4 39v2c1 118 97 213 215 213v0c17 0 45 -4 62 -9zM843 1062c222 0 401 -199 401 -445c0 -153 -69 -288 -175 -368c8 -12 12 -26 12 -41c0 -42 -33 -76 -75 -76s-76 34 -76 76c0 4 0 8 1 12h-13c1 -3 0 -9 0 -12v0c0 -42 -33 -76 -75 -76
+s-76 34 -76 76c0 4 0 8 1 12h-10v-9c0 -43 -35 -79 -77 -79s-77 36 -77 79c0 15 4 28 11 40c-105 80 -173 214 -173 366c0 246 179 445 401 445zM670 730c-8 0 -15 -1 -22 -3c-28 -4 -52 -23 -69 -45c-15 -18 -26 -40 -26 -64c-2 -20 1 -39 5 -58c5 -23 21 -41 39 -54
+c8 -7 20 -16 31 -8c7 9 1 23 7 33c2 10 9 18 18 23c18 9 37 18 57 25c16 5 29 15 43 24c18 14 30 40 21 62c-10 18 -22 34 -39 46c-19 12 -42 19 -65 19zM1015 730c-23 0 -45 -7 -64 -19c-17 -12 -29 -28 -39 -46c-9 -22 3 -48 21 -62c14 -9 27 -19 43 -24
+c20 -7 38 -16 56 -25c9 -5 17 -13 19 -23c6 -10 0 -24 7 -33c11 -8 23 1 31 8c18 13 34 31 39 54c4 19 7 38 5 58c0 24 -11 46 -26 64c-17 22 -41 41 -69 45c-7 2 -15 3 -23 3zM844 502c-20 1 -44 -88 -40 -126c12 -51 16 36 40 36c23 -1 19 -88 37 -35
+c5 35 -16 124 -37 125z" />
+ <glyph glyph-name="hacker-news" unicode="&#xf1d4;"
+d="M809 532l266 499h-112l-157 -312s-24 -48 -44 -92c-19 46 -42 92 -42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="hackster" unicode="&#xf326;"
+d="M768 -128c-424 0 -768 344 -768 768s344 768 768 768s768 -344 768 -768s-344 -768 -768 -768zM517 887c-10 -3 -17 -13 -17 -23s8 -18 18 -18h113c17 0 31 14 31 31v9c0 3 0 5 -1 8c-4 16 -22 26 -38 22zM661 739v59v5c-2 9 -12 13 -21 11l-325 -88c-5 -1 -9 -7 -9 -12
+s4 -9 9 -9h151c17 0 31 -14 31 -31v-86c0 -9 8 -17 17 -17h324c17 0 31 -13 31 -30v-59v-5c2 -9 12 -13 21 -11l325 88c5 1 9 7 9 12s-4 9 -9 9h-152c-17 0 -30 14 -30 31v85c0 9 -8 17 -17 17h-324c-17 0 -31 14 -31 31v0zM891 989c-13 -4 -23 -16 -23 -30v-176
+c0 -17 14 -31 31 -31h101c17 0 30 14 30 31v203v0c0 2 0 6 -1 8c-4 16 -21 26 -37 22zM1013 386c10 3 17 13 17 23s-8 19 -18 19h-113c-17 0 -31 -14 -31 -31v-9c0 -3 0 -5 1 -8c4 -16 22 -26 38 -22zM639 285c13 4 23 16 23 30v176c0 17 -14 30 -31 30h-101
+c-17 0 -30 -13 -30 -30v-204c0 -3 0 -5 1 -8c4 -16 21 -25 37 -21z" />
+ <glyph glyph-name="hal" unicode="&#xf333;" horiz-adv-x="1704"
+d="M806 1536v0c480 0 899 -385 898 -897c0 -104 -12 -156 -25 -207h-194v564c0 38 -52 56 -84 56c-33 0 -83 -25 -84 -56c-2 -106 -2 -587 0 -668c2 -59 14 -76 91 -76c43 0 132 -2 207 0c-53 -117 -284 -508 -812 -508c-536 0 -775 438 -803 508c26 -6 99 13 99 51
+c0 59 1 169 0 257c87 0 189 -1 282 0v-231s46 -77 84 -77s83 35 84 77c3 174 0 597 0 667c0 36 -50 56 -83 56c-34 0 -84 -15 -85 -56c-1 -49 0 -208 0 -282c-87 0 -197 1 -282 0c0 66 -1 210 0 282c0 41 -53 64 -88 56c75 174 359 484 795 484zM931 1052
+c-53 0 -81 -33 -93 -56s-251 -564 -251 -641s44 -103 86 -103s102 46 102 92h307c0 -37 49 -92 95 -92s103 34 103 92c0 62 -103 267 -103 267c-26 61 -142 359 -154 385s-39 56 -92 56zM1177 611l-128 -128h-231l102 257s167 -78 257 -129z" />
+ <glyph glyph-name="hand-lizard-o" unicode="&#xf258;" horiz-adv-x="2048"
+d="M1151 1536c81 0 159 -39 207 -105l572 -781c77 -104 118 -229 118 -359v-355c0 -106 -86 -192 -192 -192h-384c-106 0 -192 86 -192 192v177l-286 143h-546c-106 0 -192 86 -192 192v32c0 159 129 288 288 288h420l42 128h-686c-133 0 -244 102 -255 234
+c-42 51 -65 116 -65 182v32c0 106 86 192 192 192h959zM1920 -64v355c0 101 -33 202 -93 284l-573 781c-24 32 -62 52 -103 52h-959c-35 0 -64 -29 -64 -64c0 -53 1 -90 36 -133c13 41 50 69 92 69h832v-32h-832c-35 0 -64 -29 -64 -64c0 -19 -1 -39 3 -58
+c11 -59 65 -102 125 -102h731c53 0 96 -43 96 -96c0 -10 -2 -21 -5 -30l-64 -192c-13 -39 -50 -66 -91 -66h-443c-88 0 -160 -72 -160 -160v-32c0 -35 29 -64 64 -64h561c10 0 20 -2 29 -7l317 -158c32 -17 53 -50 53 -86v-197c0 -35 29 -64 64 -64h384c35 0 64 29 64 64z
" />
+ <glyph glyph-name="hand-o-down" unicode="&#xf0a7;"
+d="M1408 576c0 199 -128 369 -128 544v32h-640v-32c0 -106 -90 -177 -163 -241c-46 -41 -92 -79 -145 -112c-22 -14 -45 -26 -68 -38s-136 -62 -136 -89c0 -85 32 -160 128 -160c128 0 193 96 256 96v-576c0 -67 60 -128 128 -128c69 0 128 59 128 128v331
+c26 -20 70 -35 103 -35c47 0 87 19 119 53c21 -12 45 -18 69 -18c46 0 103 23 126 65c18 -3 37 -4 56 -4c118 0 167 73 167 184zM1280 1344c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1536 580c0 -184 -104 -318 -295 -317l-5 1
+c-50 -40 -114 -61 -178 -61c-14 0 -29 1 -43 3c-34 -19 -80 -33 -119 -37v-169c0 -140 -117 -256 -257 -256c-138 0 -255 118 -255 256v374c-39 -16 -86 -22 -128 -22c-168 0 -256 129 -256 288c0 134 171 177 264 235c47 30 88 64 129 100c33 29 119 97 119 145v288
+c0 71 57 128 128 128h640c71 0 128 -57 128 -128v-288c0 -63 37 -162 59 -223c37 -102 69 -207 69 -317z" />
+ <glyph glyph-name="hand-o-left" unicode="&#xf0a5;" horiz-adv-x="1792"
+d="M1376 128h32v640h-32c-106 0 -177 90 -241 163c-41 46 -79 92 -112 145c-14 22 -26 45 -38 68s-62 136 -89 136c-85 0 -160 -32 -160 -128c0 -128 96 -193 96 -256h-576c-67 0 -128 -60 -128 -128c0 -69 59 -128 128 -128h331c-21 -24 -35 -71 -35 -103
+c0 -47 19 -87 53 -119c-12 -21 -18 -45 -18 -69c0 -46 23 -103 65 -126c-3 -18 -4 -37 -4 -56c0 -118 73 -167 184 -167c199 0 369 128 544 128zM1664 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1792 768v-640c0 -71 -57 -128 -128 -128h-288
+c-63 0 -162 -37 -223 -59c-102 -37 -207 -69 -317 -69c-184 0 -318 104 -317 295l1 5c-40 50 -61 114 -61 178c0 14 1 29 3 43c-21 37 -34 77 -37 119h-169c-140 0 -256 117 -256 257c0 138 118 255 256 255h374c-15 41 -22 84 -22 128c0 169 129 256 288 256
+c134 0 177 -171 235 -264c30 -47 64 -88 100 -129c29 -33 97 -119 145 -119h288c71 0 128 -57 128 -128z" />
+ <glyph glyph-name="hand-o-right" unicode="&#xf0a4;" horiz-adv-x="1792"
+d="M256 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 768c0 68 -61 128 -128 128h-576c0 63 96 128 96 256c0 96 -75 128 -160 128c-28 0 -79 -116 -90 -139c-12 -22 -24 -44 -37 -65c-33 -53 -71 -99 -112 -145c-64 -73 -135 -163 -241 -163
+h-32v-640h32c175 0 346 -128 540 -128c112 0 189 47 189 167c0 19 -2 38 -5 56c42 23 65 80 65 126c0 24 -6 48 -18 69c34 32 53 72 53 119c0 32 -14 79 -35 103h331c69 0 128 59 128 128zM1792 769c0 -140 -116 -257 -256 -257h-169c-3 -42 -16 -82 -37 -119
+c2 -14 3 -29 3 -43c0 -64 -21 -128 -60 -178c2 -189 -127 -300 -312 -300c-112 0 -218 31 -322 69c-61 22 -160 59 -223 59h-288c-71 0 -128 57 -128 128v640c0 71 57 128 128 128h288c48 0 116 86 145 119c36 41 70 82 100 129c58 93 101 264 235 264
+c159 0 288 -87 288 -256c0 -44 -7 -87 -22 -128h374c138 0 256 -117 256 -255z" />
+ <glyph glyph-name="hand-o-up" unicode="&#xf0a6;"
+d="M1280 -64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 700c0 113 -46 189 -167 189c-19 0 -38 -2 -56 -5c-23 42 -80 65 -126 65c-24 0 -48 -6 -69 -18c-32 34 -72 53 -119 53c-32 0 -79 -14 -103 -35v331c0 69 -59 128 -128 128
+c-68 0 -128 -61 -128 -128v-576c-63 0 -128 96 -256 96c-96 0 -128 -75 -128 -160c0 -28 116 -79 139 -90c22 -12 44 -24 65 -37c53 -33 99 -71 145 -112c73 -64 163 -135 163 -241v-32h640v32c0 175 128 346 128 540zM1536 705c0 -112 -31 -218 -69 -322
+c-22 -61 -59 -160 -59 -223v-288c0 -71 -57 -128 -128 -128h-640c-71 0 -128 57 -128 128v288c0 48 -86 116 -119 145c-41 36 -82 70 -129 100c-93 58 -264 101 -264 235c0 159 87 288 256 288c44 0 87 -7 128 -22v374c0 138 117 256 255 256c140 0 257 -116 257 -256v-169
+c42 -3 82 -16 119 -37c14 2 29 3 43 3c64 0 128 -21 178 -60c189 2 300 -127 300 -312z" />
+ <glyph glyph-name="hand-paper-o" unicode="&#xf256;" horiz-adv-x="1632"
+d="M880 1408c-62 0 -112 -50 -112 -112v-656h-32v528c0 62 -50 112 -112 112s-112 -50 -112 -112v-784l-154 205c-24 32 -62 51 -102 51c-71 0 -128 -58 -128 -128c0 -28 9 -55 26 -77l384 -512c24 -32 62 -51 102 -51h688c46 0 86 33 95 78l76 405c3 19 5 39 5 59v498
+c0 62 -50 112 -112 112s-112 -50 -112 -112v-272h-32v528c0 62 -50 112 -112 112s-112 -50 -112 -112v-528h-32v656c0 62 -50 112 -112 112zM880 1536c90 0 173 -51 214 -132c14 3 28 4 42 4c132 0 240 -108 240 -240v-17c139 8 256 -99 256 -239v-498c0 -28 -3 -56 -8 -83
+l-76 -404c-19 -106 -112 -183 -220 -183h-688c-80 0 -157 39 -205 102l-384 512c-33 44 -51 99 -51 154c0 141 114 256 256 256c42 0 93 -10 128 -34v434c0 132 108 240 240 240c14 0 28 -1 42 -4c41 81 124 132 214 132z" />
+ <glyph glyph-name="hand-peace-o" unicode="&#xf25b;"
+d="M1288 889c37 0 74 -7 107 -23c96 -43 141 -122 141 -226v-177c0 -63 -8 -126 -23 -186l-85 -339c-28 -114 -130 -194 -248 -194h-668c-141 0 -256 115 -256 256v401l-239 628c-11 29 -17 60 -17 91c0 141 115 256 256 256c106 0 202 -66 239 -165l17 -44v113
+c0 141 115 256 256 256s256 -115 256 -256v-261c16 3 32 5 48 5c92 0 176 -53 216 -135zM1072 896c-44 0 -84 -26 -102 -66l-74 -163l-71 -155h55c67 0 126 -47 140 -112l154 338c7 14 10 30 10 46c0 62 -50 112 -112 112zM1293 761c-76 0 -100 -61 -127 -121l-132 -290
+c-7 -14 -10 -30 -10 -46c0 -62 50 -112 112 -112c44 0 84 26 102 66l160 352c5 10 9 26 9 38c0 67 -48 113 -114 113zM128 1120c0 -16 3 -31 8 -46l248 -650v-69l102 111c27 29 66 46 106 46h198l106 233v535c0 71 -57 128 -128 128s-128 -57 -128 -128v-640h-64l-200 526
+c-19 49 -67 82 -120 82c-71 0 -128 -58 -128 -128zM1180 -128c59 0 110 40 124 97l85 339c13 50 19 103 19 155v91l-141 -310c-23 -51 -75 -84 -131 -84c-70 0 -131 51 -142 121c-27 -35 -69 -57 -114 -57h-208v32h208c61 0 116 50 116 112c0 61 -46 112 -108 112h-296
+c-31 0 -61 -13 -82 -36l-126 -136v-308c0 -71 57 -128 128 -128h668z" />
<glyph glyph-name="hand-pointer-o" unicode="&#xf25a;" horiz-adv-x="1664"
d="M640 1408c-71 0 -128 -57 -128 -128v-896l-151 202c-25 33 -65 54 -107 54c-70 0 -126 -59 -126 -128c0 -28 9 -55 26 -77l384 -512c24 -32 62 -51 102 -51h718c29 0 55 20 62 48l92 368c16 64 24 129 24 194v217c0 53 -41 101 -96 101c-53 0 -96 -43 -96 -96h-32v61
c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-64h-32v90c0 72 -55 134 -128 134c-71 0 -128 -57 -128 -128v-96h-32v570c0 72 -55 134 -128 134zM640 1536c143 0 256 -120 256 -262v-220c11 1 21 2 32 2c65 0 126 -25 173 -69c31 14 65 21 99 21c72 0 139 -32 184 -87
c19 5 37 7 56 7c126 0 224 -105 224 -229v-217c0 -75 -9 -151 -28 -225l-92 -368c-21 -85 -98 -145 -186 -145h-718c-80 0 -157 39 -205 102l-384 512c-33 44 -51 99 -51 154c0 140 114 256 254 256c46 0 91 -12 130 -35v547c0 141 115 256 256 256zM768 128h-32v384h32
v-384zM1024 128h-32v384h32v-384zM1280 128h-32v384h32v-384z" />
- <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664"
-d="M1664 960v-256c0 -35 -29 -64 -64 -64h-64c-35 0 -64 29 -64 64v256c0 141 -115 256 -256 256s-256 -115 -256 -256v-192h96c53 0 96 -43 96 -96v-576c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v576c0 53 43 96 96 96h672v192c0 247 201 448 448 448
-s448 -201 448 -448z" />
- <glyph glyph-name="quote-right" unicode="&#xf10e;" horiz-adv-x="1664"
-d="M768 1216v-704c0 -282 -230 -512 -512 -512h-64c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h64c141 0 256 115 256 256v32c0 53 -43 96 -96 96h-224c-106 0 -192 86 -192 192v384c0 106 86 192 192 192h384c106 0 192 -86 192 -192zM1664 1216v-704
-c0 -282 -230 -512 -512 -512h-64c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h64c141 0 256 115 256 256v32c0 53 -43 96 -96 96h-224c-106 0 -192 86 -192 192v384c0 106 86 192 192 192h384c106 0 192 -86 192 -192z" />
- <glyph glyph-name="arrow-left" unicode="&#xf060;" horiz-adv-x="1472"
-d="M1472 640v-128c0 -68 -45 -128 -117 -128h-704l293 -294c24 -23 38 -56 38 -90s-14 -67 -38 -90l-75 -76c-23 -23 -56 -37 -90 -37s-67 14 -91 37l-651 652c-23 23 -37 56 -37 90s14 67 37 91l651 650c24 24 57 38 91 38s66 -14 90 -38l75 -74c24 -24 38 -57 38 -91
-s-14 -67 -38 -91l-293 -293h704c72 0 117 -60 117 -128z" />
- <glyph glyph-name="scissors" unicode="&#xf0c4;" horiz-adv-x="1792"
-d="M960 640c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1260 576l507 -398c18 -13 27 -35 25 -56c-3 -22 -16 -41 -35 -51l-128 -64c-9 -5 -19 -7 -29 -7c-11 0 -22 3 -31 8l-690 387l-110 -66c-4 -2 -8 -4 -12 -5c9 -31 13 -64 10 -97
-c-9 -103 -78 -201 -188 -271c-85 -54 -183 -84 -277 -84c-90 0 -166 27 -222 78c-57 53 -86 129 -79 207c9 102 78 201 187 271c85 54 184 84 278 84c56 0 107 -11 151 -31c6 9 13 16 22 22l122 73l-122 73c-9 6 -16 13 -22 22c-44 -20 -95 -31 -151 -31
-c-94 0 -193 30 -278 84c-109 70 -178 169 -187 271c-7 78 22 154 79 206c56 52 132 79 222 79c94 0 192 -30 277 -84c110 -69 179 -168 188 -271c3 -33 -1 -66 -10 -97c4 -1 8 -3 12 -5l110 -66l690 387c9 5 20 8 31 8c10 0 20 -2 29 -7l128 -64c19 -10 32 -29 35 -51
-c2 -21 -7 -43 -25 -56zM579 836c61 56 23 157 -85 225c-61 39 -132 59 -192 59c-46 0 -87 -12 -113 -36c-61 -56 -23 -157 85 -225c61 -39 131 -59 192 -59c46 0 87 12 113 36zM494 91c108 68 146 169 85 225c-26 24 -67 36 -113 36c-61 0 -131 -20 -192 -59
-c-108 -68 -146 -169 -85 -225c26 -24 67 -36 113 -36c60 0 131 20 192 59zM672 704l96 -58v11c0 23 13 44 33 56l14 8l-79 47l-26 -26c-8 -8 -14 -16 -22 -23c-3 -3 -5 -4 -7 -6zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8c2 -3 4 -4 7 -6
-c8 -8 14 -16 22 -24l26 -26zM1600 64l128 64l-520 408l-177 -138c-3 -4 -8 -5 -13 -7z" />
- <glyph glyph-name="ellipsis-h" unicode="&#xf141;" horiz-adv-x="1408"
-d="M384 800v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM896 800v-192c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96zM1408 800v-192c0 -53 -43 -96 -96 -96h-192
-c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h192c53 0 96 -43 96 -96z" />
- <glyph glyph-name="scribd" unicode="&#xf28a;" horiz-adv-x="1464"
-d="M1464 -13c0 -119 -96 -216 -216 -216s-217 97 -217 216c0 120 97 217 217 217s216 -97 216 -217zM1231 268c-152 -20 -270 -150 -270 -308c0 -49 12 -97 33 -138c-90 -48 -212 -78 -379 -78c-532 0 -615 376 -615 426c0 51 30 218 218 218s214 -161 214 -194
-c0 0 0 -34 -23 -81c64 -60 215 -60 215 -60c151 0 265 74 265 184c0 111 -128 165 -420 302c-292 138 -402 239 -402 490c0 252 168 507 587 507s577 -235 577 -396s-137 -201 -188 -201c-50 0 -235 -17 -235 261c-33 37 -177 37 -177 37c-145 0 -209 -110 -209 -177
-c0 -68 27 -152 329 -252c463 -154 480 -355 480 -540z" />
- <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="444"
-d="M414 288v-224c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v224c0 35 29 64 64 64h256c35 0 64 -29 64 -64zM444 1344l-28 -768c-1 -35 -31 -64 -66 -64h-256c-35 0 -65 29 -66 64l-28 768c-1 35 27 64 62 64h320c35 0 63 -29 62 -64z" />
- <glyph glyph-name="try" unicode="&#xf195;" horiz-adv-x="1152"
-d="M1152 704c0 -388 -316 -704 -704 -704h-160c-18 0 -32 14 -32 32v611l-215 -66c-3 -1 -6 -1 -9 -1c-7 0 -13 2 -19 6c-8 6 -13 16 -13 26v128c0 14 9 26 23 31l233 71v93l-215 -66c-3 -1 -6 -1 -9 -1c-7 0 -13 2 -19 6c-8 6 -13 16 -13 26v128c0 14 9 26 23 31l233 71
-v250c0 18 14 32 32 32h160c18 0 32 -14 32 -32v-181l375 116c9 3 20 1 28 -5s13 -16 13 -26v-128c0 -14 -9 -26 -23 -31l-393 -121v-93l375 116c9 3 20 1 28 -5s13 -16 13 -26v-128c0 -14 -9 -26 -23 -31l-393 -121v-487c250 17 448 225 448 479c0 18 14 32 32 32h160
-c18 0 32 -14 32 -32z" />
- <glyph glyph-name="assistive-listening-systems" unicode="&#xf2a2;" horiz-adv-x="1792"
-d="M128 -192c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM320 0c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM365 365l256 -256l-90 -90l-256 256zM704 384c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64z
-M1411 704c0 -166 -78 -255 -146 -334c-63 -72 -113 -129 -113 -242c0 -212 -172 -384 -384 -384c-35 0 -64 29 -64 64s29 64 64 64c141 0 256 115 256 256c0 161 77 249 144 326c62 71 115 132 115 250c0 247 -201 448 -448 448s-448 -201 -448 -448c0 -35 -29 -64 -64 -64
-s-64 29 -64 64c0 318 258 576 576 576s576 -258 576 -576zM896 576c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM1184 704c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 124 -100 224 -224 224c-123 0 -224 -100 -224 -224c0 -35 -29 -64 -64 -64
-s-64 29 -64 64c0 194 158 352 352 352s352 -158 352 -352zM1578 993c13 -33 -4 -70 -37 -83c-7 -3 -15 -4 -23 -4c-25 0 -50 15 -59 41c-45 117 -123 219 -224 295c-28 21 -34 61 -13 89c22 28 62 34 90 13c120 -90 212 -212 266 -351zM1788 1074c12 -33 -4 -70 -37 -83
-c-8 -3 -15 -4 -23 -4c-26 0 -50 15 -60 41c-60 156 -163 292 -297 393c-29 21 -34 61 -13 89c21 29 61 34 89 13c154 -115 272 -271 341 -449z" />
- <glyph glyph-name="flag-o" unicode="&#xf11d;" horiz-adv-x="1728"
-d="M1600 491v616c-80 -43 -192 -91 -306 -91c-53 0 -102 10 -145 32c-107 53 -223 104 -362 104c-129 0 -287 -63 -403 -127v-599c132 61 300 113 433 113c154 0 254 -51 361 -104l28 -14c28 -14 62 -22 101 -22c111 0 231 59 293 92zM256 1280c0 -47 -26 -88 -64 -110
-v-1266c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v1266c-38 22 -64 63 -64 110c0 71 57 128 128 128s128 -57 128 -128zM1728 1216v-763c0 -24 -14 -46 -35 -57c-4 -2 -10 -5 -17 -9c-64 -34 -215 -116 -369 -116c-59 0 -112 12 -158 35l-28 14
-c-101 51 -181 91 -304 91c-144 0 -347 -75 -464 -146c-10 -6 -22 -9 -33 -9s-22 3 -32 8c-20 12 -32 33 -32 56v742c0 22 12 43 31 55c64 38 290 163 500 163c167 0 303 -61 418 -117c26 -13 56 -19 89 -19c118 0 248 75 310 112c13 7 24 13 31 17c20 10 43 9 62 -2
-c19 -12 31 -33 31 -55z" />
- <glyph glyph-name="wikipedia-w" unicode="&#xf266;" horiz-adv-x="2304"
-d="M1494 -103l-295 695c-117 -229 -246 -468 -357 -695c-1 -1 -54 0 -54 1c-169 395 -346 787 -515 1183c-41 96 -178 252 -272 251c0 11 -1 36 -1 51h583v-50c-69 -4 -190 -48 -156 -123c79 -179 373 -865 452 -1039c54 107 208 393 271 514c-50 102 -211 482 -262 576
-c-35 64 -130 70 -201 71v50l513 -1v-47c-70 -2 -137 -28 -106 -94c68 -144 110 -245 173 -377c20 39 125 250 173 363c32 74 -14 103 -139 106c1 13 0 37 1 49c160 1 400 1 443 2v-49c-81 -3 -165 -46 -209 -114l-213 -442c23 -58 228 -514 249 -564l441 1017
-c-31 83 -131 101 -170 102v50l460 -4l1 -2l-1 -44c-101 -3 -162 -57 -201 -145c-90 -208 -372 -864 -559 -1291h-49z" />
- <glyph glyph-name="battery-quarter" unicode="&#xf243;" horiz-adv-x="2304"
-d="M256 256v768h512v-768h-512zM2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32h-1856
-c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" />
- <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664"
-d="M384 0h896v256h-896v-256zM384 640h896v384h-160c-53 0 -96 43 -96 96v160h-640v-640zM1536 576c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 576v-416c0 -17 -15 -32 -32 -32h-224v-160c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v160
-h-224c-17 0 -32 15 -32 32v416c0 105 87 192 192 192h64v544c0 53 43 96 96 96h672c53 0 126 -30 164 -68l152 -152c38 -38 68 -111 68 -164v-256h64c105 0 192 -87 192 -192z" />
- <glyph glyph-name="tipeee" unicode="&#xf301;" horiz-adv-x="2304"
-d="M116 1259h2072c64 0 116 -52 116 -116v-1006c0 -64 -52 -116 -116 -116h-2072c-64 0 -116 52 -116 116v1006c0 64 52 116 116 116zM756 1006v0c-59 0 -90 -47 -90 -85c0 -40 37 -84 90 -84c59 0 92 38 92 84c0 38 -34 85 -92 85zM1672 966v-159l45 -211h110l45 211v159
-h-200zM534 925l-154 -49v-77h-45v-109h45v-148c3 -107 7 -176 132 -176c19 0 77 6 102 16v107c-16 -7 -42 -14 -53 -14c-33 0 -27 39 -27 67v148h80v109h-80v126zM1212 806v0c-50 0 -85 -24 -101 -36l-14 29h-192v-111h35v-368h-35v-109h250v109h-45v85c6 -5 40 -33 109 -33
-c108 0 190 82 190 215c0 119 -67 219 -197 219zM643 799v-109h35v-199h-35v-110h234v110h-40v308h-194zM1169 688v0c37 0 61 -53 61 -103c0 -64 -25 -104 -60 -104c-32 0 -60 43 -60 100c-3 66 26 107 59 107zM1764 555c-60 0 -95 -47 -95 -89c0 -43 41 -86 95 -86
-c61 0 99 39 99 86c0 48 -40 89 -99 89z" />
- <glyph glyph-name="check-circle-o" unicode="&#xf05d;"
-d="M1171 723l-422 -422c-25 -25 -65 -25 -90 0l-294 294c-25 25 -25 65 0 90l102 102c25 25 65 25 90 0l147 -147l275 275c25 25 65 25 90 0l102 -102c25 -25 25 -65 0 -90zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544z
-M1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="level-up" unicode="&#xf148;" horiz-adv-x="1024"
-d="M1018 933c-11 -23 -33 -37 -58 -37h-192v-864c0 -18 -14 -32 -32 -32h-704c-12 0 -24 7 -29 18c-5 12 -4 25 4 35l160 192c6 7 16 11 25 11h320v640h-192c-25 0 -47 14 -58 37c-10 22 -7 49 9 68l320 384c24 29 74 29 98 0l320 -384c16 -19 20 -46 9 -68z" />
- <glyph glyph-name="houzz" unicode="&#xf27c;" horiz-adv-x="1024"
-d="M512 345l512 295v-591l-512 -296v592zM0 640l512 -295l-512 -296v591zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
- <glyph glyph-name="lemon-o" unicode="&#xf094;" horiz-adv-x="1535"
-d="M1407 710c0 47 -9 170 -25 210c-19 48 -30 75 -30 129c0 46 10 91 10 136c0 19 -1 39 -10 55c-4 1 -9 1 -13 1c-39 0 -78 -9 -117 -9c-119 0 -232 48 -351 48c-93 0 -183 -35 -269 -69c-68 -27 -143 -59 -202 -103c-202 -153 -272 -433 -272 -674c0 -81 25 -160 25 -241
-c0 -46 -22 -88 -22 -132c0 -28 16 -51 46 -51c49 0 96 22 146 22c114 0 225 -31 339 -31c89 0 201 7 284 36c263 93 461 397 461 673zM1535 712c0 -333 -231 -684 -547 -796c-99 -35 -222 -44 -326 -44c-114 0 -226 29 -339 29c-48 0 -96 -29 -146 -29
-c-99 0 -174 89 -174 184c0 47 22 89 22 135c0 81 -25 160 -25 242c0 284 87 598 323 777c68 52 153 89 232 120c102 41 205 78 316 78c119 0 232 -48 349 -48c38 0 76 10 115 10c114 0 155 -81 155 -185c0 -45 -10 -91 -10 -136c0 -36 9 -50 21 -82c23 -58 34 -191 34 -255z
-" />
- <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664"
-d="M896 708v-580c0 -139 -117 -256 -256 -256s-256 117 -256 256c0 35 29 64 64 64s64 -29 64 -64c0 -67 61 -128 128 -128s128 61 128 128v580c21 7 42 11 64 11s43 -4 64 -11zM1664 681c0 -17 -15 -32 -32 -32c-9 0 -16 4 -23 10c-58 54 -112 92 -195 92
-c-95 0 -177 -59 -231 -134c-12 -17 -21 -35 -32 -52c-7 -11 -15 -17 -28 -17c-14 0 -22 6 -29 17c-11 17 -20 35 -32 52c-54 75 -135 134 -230 134s-176 -59 -230 -134c-12 -17 -21 -35 -32 -52c-7 -11 -15 -17 -29 -17c-13 0 -21 6 -28 17c-11 17 -20 35 -32 52
-c-54 75 -136 134 -231 134c-83 0 -137 -38 -195 -92c-7 -6 -14 -10 -23 -10c-17 0 -32 15 -32 32c0 3 0 5 1 7c92 378 457 592 831 592c372 0 741 -214 831 -592c1 -2 1 -4 1 -7zM896 1408v-98c-21 1 -43 2 -64 2s-43 -1 -64 -2v98c0 35 29 64 64 64s64 -29 64 -64z" />
- <glyph glyph-name="bell-o" unicode="&#xf0a2;" horiz-adv-x="1664"
-d="M848 -160c0 9 -7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16zM1664 128c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-256 115 -256 256h-448c-70 0 -128 58 -128 128
-c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c265 -39 424 -249 424 -441c0 -483 172 -707 320 -832z" />
- <glyph glyph-name="shaarli" unicode="&#xf2f5;" horiz-adv-x="1651"
-d="M878 1408c161 0 254 -160 278 -479h66c287 -44 429 -135 426 -273c24 -163 -80 -238 -312 -226c178 -156 241 -302 191 -437c-39 -108 -133 -143 -282 -107c-164 82 -281 176 -349 282h-43c-64 -188 -188 -282 -372 -282h-64c-153 47 -209 140 -166 278l80 221h-23
-c-225 32 -326 131 -305 298c6 153 160 231 462 233c84 9 119 36 105 80c0 275 103 412 308 412zM830 1182c-56 4 -83 -72 -82 -227l-5 -128c-5 -64 -25 -96 -61 -96l-360 -20c-56 -2 -85 -25 -85 -69c0 -43 31 -65 92 -68c211 11 310 -4 296 -43l-64 -137
-c-108 -163 -135 -258 -80 -287c73 -44 176 70 310 342c32 29 59 29 80 0c94 -100 171 -182 232 -246c62 -64 113 -83 151 -57c46 49 33 101 -37 157c-68 58 -146 137 -234 237c-9 33 -8 50 6 50c298 -20 441 -1 429 57c9 64 -121 96 -388 96c-41 -8 -74 2 -100 29v224
-c0 125 -30 186 -89 184c-3 1 -8 2 -11 2v0z" />
- <glyph glyph-name="cc-diners-club" unicode="&#xf24c;" horiz-adv-x="2304"
-d="M858 295v693c-139 -54 -238 -189 -238 -347s99 -293 238 -346zM1362 641c0 158 -99 293 -238 347v-694c139 54 238 189 238 347zM1577 641c0 -323 -262 -586 -586 -586c-323 0 -586 263 -586 586c0 324 263 586 586 586c324 0 586 -262 586 -586zM1960 634
-c0 382 -319 646 -669 646h-301c-354 0 -646 -264 -646 -646c0 -349 292 -634 646 -634h301c350 0 669 285 669 634zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048c70 0 128 -58 128 -128z" />
- <glyph glyph-name="undo" unicode="&#xf0e2;"
-d="M1536 640c0 -423 -345 -768 -768 -768c-229 0 -445 101 -591 277c-10 13 -9 32 2 43l137 138c7 6 16 9 25 9c9 -1 18 -5 23 -12c98 -127 245 -199 404 -199c282 0 512 230 512 512s-230 512 -512 512c-131 0 -255 -50 -348 -137l137 -138c19 -18 24 -46 14 -69
-c-10 -24 -33 -40 -59 -40h-448c-35 0 -64 29 -64 64v448c0 26 16 49 40 59c23 10 51 5 69 -14l130 -129c141 133 332 212 529 212c423 0 768 -345 768 -768z" />
- <glyph glyph-name="rebel" unicode="&#xf1d0;" horiz-adv-x="1756"
-d="M0 662c10 286 156 550 421 724c1 0 7 2 4 -3c-21 -20 -402 -469 -51 -818c180 -179 325 -9 325 -9c139 181 -2 455 -2 455c-36 90 -165 145 -165 145l104 115c88 -38 156 -140 156 -140c3 107 -79 222 -79 222l161 183l160 -181c-74 -104 -79 -226 -79 -226
-c50 83 157 142 157 142l103 -115c-99 -32 -164 -144 -164 -144c-57 -103 -98 -323 2 -460c117 -161 317 10 317 10c371 332 -38 813 -38 813c-22 20 3 10 3 10c181 -132 414 -305 420 -740c7 -526 -361 -901 -876 -901c-503 0 -894 420 -879 918z" />
- <glyph glyph-name="codiepie" unicode="&#xf284;" horiz-adv-x="1723"
-d="M1584 246l-218 111c-98 -160 -272 -258 -460 -258c-298 0 -539 241 -539 538c0 298 241 539 539 539c175 0 339 -85 440 -229l215 125c-147 226 -396 361 -665 361c-438 0 -793 -355 -793 -793s355 -793 793 -793c284 0 547 152 688 399zM1030 643l693 -352
-c-152 -332 -457 -547 -827 -547c-495 0 -896 401 -896 896s401 896 896 896c352 0 642 -194 806 -500zM1543 640h-39v-160h-96v352h136c111 0 121 -192 -1 -192z" />
- <glyph glyph-name="soundcloud" unicode="&#xf1be;" horiz-adv-x="2304"
-d="M784 164c-1 -13 -11 -23 -24 -23c-12 0 -22 10 -23 23l-14 241l14 523c0 13 11 24 23 24c13 0 23 -11 24 -24l16 -523zM1080 193l-1 -24c0 -8 -3 -15 -9 -20c-5 -5 -12 -9 -20 -9c-9 0 -17 4 -23 11c-4 5 -6 11 -6 17v1c-11 235 -11 236 -11 236l10 579l1 6
-c0 10 5 19 13 24c5 3 10 5 16 5s11 -2 16 -5c8 -5 13 -14 13 -24l12 -586zM35 533l20 -128l-20 -126c-1 -5 -4 -9 -9 -9s-8 4 -9 9l-17 126l17 128c1 5 4 9 9 9s8 -4 9 -9zM121 612l26 -207l-26 -203c-1 -5 -5 -9 -10 -9s-9 4 -9 10l-23 202l23 207c0 5 4 9 9 9s9 -4 10 -9z
-M401 159zM213 650l25 -245l-25 -237c0 -6 -5 -11 -11 -11s-11 5 -12 11l-21 237l21 245c1 7 6 12 12 12s11 -5 11 -12zM307 657l23 -252l-23 -244c-1 -8 -7 -13 -14 -13s-13 5 -13 13l-21 244l21 252c0 8 6 13 13 13s13 -5 14 -13zM401 639l21 -234l-21 -246
-c-1 -9 -8 -16 -16 -16s-15 7 -15 16l-20 246l20 234c0 8 7 15 15 15s15 -7 16 -15zM784 164zM495 785l21 -380l-21 -246c0 -10 -8 -18 -17 -18c-10 0 -17 8 -18 18l-18 246l18 380c1 10 8 18 18 18c9 0 17 -8 17 -18zM589 871l19 -468l-19 -244c0 -11 -9 -19 -19 -19
-c-11 0 -19 8 -20 19l-16 244l16 468c1 11 9 19 20 19c10 0 19 -8 19 -19zM687 911l18 -506l-18 -242c-1 -12 -10 -21 -22 -21c-11 0 -20 9 -21 21l-16 242l16 506c0 12 10 22 21 22c12 0 21 -10 22 -22zM1079 169zM881 915l15 -510l-15 -239c0 -14 -11 -25 -25 -25
-s-24 11 -25 25l-14 239l14 510c0 14 11 25 25 25s25 -11 25 -25zM980 896l14 -492l-14 -236c0 -15 -12 -27 -27 -27s-27 12 -28 27l-12 236l12 492c1 16 13 28 28 28s26 -12 27 -28zM1192 404l-14 -231c0 -17 -14 -31 -31 -31s-31 14 -32 31l-6 114l-6 117l12 636v3
-c1 9 5 18 12 24c5 4 12 7 20 7c5 0 11 -2 15 -5c9 -5 15 -15 16 -26zM2304 423c0 -156 -127 -282 -283 -282h-786c-17 2 -31 15 -31 33v899c0 17 6 25 28 33c55 22 117 34 181 34c261 0 475 -200 498 -455c34 14 71 22 110 22c156 0 283 -127 283 -284z" />
- <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152"
-d="M1152 832v-128c0 -296 -224 -540 -512 -572v-132h256c35 0 64 -29 64 -64s-29 -64 -64 -64h-640c-35 0 -64 29 -64 64s29 64 64 64h256v132c-288 32 -512 276 -512 572v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -247 201 -448 448 -448s448 201 448 448v128
-c0 35 29 64 64 64s64 -29 64 -64zM896 1216v-512c0 -176 -144 -320 -320 -320s-320 144 -320 320v512c0 176 144 320 320 320s320 -144 320 -320z" />
- <glyph glyph-name="laravel" unicode="&#xf30b;" horiz-adv-x="1870"
-d="M1863 682v0c13 -14 10 -25 -13 -31c-20 -6 -203 -54 -255 -68c76 -101 219 -294 231 -312c17 -25 2 -32 -23 -42s-571 -207 -608 -218c-48 -14 -69 -21 -100 22c-23 33 -149 259 -211 371c-117 -30 -330 -86 -392 -101c-60 -14 -86 22 -96 44s-365 786 -387 839
-c-23 53 2 62 24 64s335 28 376 30s44 -8 62 -34l450 -753l566 136c-31 44 -173 246 -187 265c-15 22 0 32 25 36s242 41 261 44s33 9 63 -27s201 -251 214 -265zM834 472c7 1 10 5 3 18s-422 729 -422 729c-4 7 -3 9 -13 9s-305 -27 -310 -27s-5 -8 0 -18s380 -783 382 -789
-s2 -8 19 -4s334 81 341 82zM1728 304c-5 8 -178 244 -187 258s-13 10 -27 6l-552 -143s169 -293 182 -312s21 -17 31 -13s531 179 547 185s11 11 6 19zM1763 696c13 3 22 7 16 14s-149 189 -159 203s-18 12 -27 10c-8 -2 -196 -36 -208 -38s-8 -8 -3 -15l166 -227
-s202 50 215 53z" />
- <glyph glyph-name="indent" unicode="&#xf03c;" horiz-adv-x="1792"
-d="M352 704c0 -8 -3 -17 -9 -23l-288 -288c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v576c0 17 15 32 32 32c8 0 17 -3 23 -9l288 -288c6 -6 9 -15 9 -23zM1792 224v-192c0 -17 -15 -32 -32 -32h-1728c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32z
-M1792 608v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32
-h-1728c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32z" />
- <glyph glyph-name="address-card-o" unicode="&#xf2bc;" horiz-adv-x="2048"
-d="M1024 405c0 -87 -57 -149 -128 -149h-512c-71 0 -128 62 -128 149c0 155 38 327 196 327c49 -28 115 -76 188 -76s139 48 188 76c158 0 196 -172 196 -327zM867 925c0 -126 -102 -227 -227 -227s-227 101 -227 227c0 125 102 227 227 227s227 -102 227 -227zM1792 480
-v-64c0 -18 -14 -32 -32 -32h-576c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h576c18 0 32 -14 32 -32zM1792 732v-56c0 -20 -16 -36 -36 -36h-568c-20 0 -36 16 -36 36v56c0 20 16 36 36 36h568c20 0 36 -16 36 -36zM1792 992v-64c0 -18 -14 -32 -32 -32h-576
-c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h576c18 0 32 -14 32 -32zM1920 32v1216c0 17 -15 32 -32 32h-1728c-17 0 -32 -15 -32 -32v-1216c0 -17 15 -32 32 -32h352v96c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-96h768v96c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-96h352
-c17 0 32 15 32 32zM2048 1248v-1216c0 -88 -72 -160 -160 -160h-1728c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" />
- <glyph glyph-name="language" unicode="&#xf1ab;"
-d="M654 458c-2 -7 -51 16 -64 21c-13 6 -72 39 -87 49s-72 57 -79 60c-36 -55 -82 -120 -134 -181c-18 -21 -72 -89 -105 -110c-5 -3 -34 -6 -38 -4c16 12 62 69 82 92c25 29 144 195 164 233c21 38 84 164 87 176c-10 1 -89 -26 -110 -33c-20 -6 -75 -19 -79 -22
-c-4 -4 -1 -16 -3 -20s-20 -13 -31 -15c-10 -3 -33 -4 -47 0c-13 3 -25 16 -28 21c0 0 -4 6 -5 23c12 4 32 5 54 11s76 22 105 32s85 31 102 35c18 3 63 33 87 41s41 18 42 13s0 -27 -1 -33c-1 -5 -49 -99 -56 -114c-4 -8 -32 -61 -77 -131c16 -7 50 -21 64 -28
-c17 -8 136 -58 142 -60s17 -48 15 -56zM449 944c3 -17 -2 -24 -4 -28c-10 -19 -35 -32 -50 -38s-40 -12 -60 -12c-9 1 -27 4 -49 26c-12 13 -21 48 -17 44s33 -8 46 -5s44 12 58 16c15 5 45 13 55 14c10 0 18 -4 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032
-l-694 -233v-1031zM1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66c-81 -52 -181 -92 -276 -108c-29 -6 -62 -12 -91 -12h-84c-106 0 -299 63 -383 124c-6 5 -8 9 -8 16c0 11 8 19 18 19
-c9 0 56 -29 69 -35c90 -45 216 -86 317 -86c125 0 210 16 324 65c33 15 62 34 93 51zM1536 1050v-1079c-773 246 -774 246 -774 246c-16 -7 -733 -249 -743 -249c-8 0 -15 5 -18 13c0 1 -1 2 -1 3v1078c1 3 2 8 4 10c6 7 14 9 20 11c3 1 64 21 149 50v384l558 -198
-c7 2 629 217 638 217c11 0 20 -8 20 -21v-418z" />
- <glyph glyph-name="circle-thin" unicode="&#xf1db;"
-d="M768 1280c-353 0 -640 -287 -640 -640s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="drupal" unicode="&#xf1a9;"
-d="M1167 -50c-2 7 -8 17 -24 5c-34 -25 -110 -56 -218 -56s-159 23 -193 49c-5 4 -3 4 -13 4c-11 0 -17 -5 -26 -12c-8 -7 -12 -24 0 -36c74 -68 198 -62 289 -54c92 9 170 63 178 71c12 12 9 22 7 29zM1128 65c-7 17 -19 47 -39 61c-20 13 -49 15 -76 15s-42 2 -71 -10
-s-59 -39 -78 -56s-22 -30 -12 -44c10 -13 21 -5 49 19c29 23 48 44 107 44s69 -22 81 -44s13 -25 25 -19c14 7 21 17 14 34zM1483 346c0 52 -23 140 -108 140c-80 0 -242 -166 -327 -167c-99 -2 -236 196 -434 194c-156 -1 -279 -125 -281 -257c-1 -74 23 -129 74 -164
-c34 -23 65 -37 166 -37c168 0 381 208 479 205c78 -3 199 -194 260 -198c48 -4 73 18 114 77c40 60 57 154 57 207zM1536 506c0 -448 -354 -744 -761 -744c-408 0 -775 321 -775 758c0 436 340 638 403 671c75 40 129 61 214 129c42 33 77 81 88 198
-c61 -73 134 -158 186 -193c85 -56 170 -78 259 -134c54 -33 386 -236 386 -685z" />
+ <glyph glyph-name="hand-rock-o" unicode="&#xf255;"
+d="M768 1152c-71 0 -128 -57 -128 -128v-128h-32v93c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-429l-32 30v172c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-224c0 -31 13 -60 35 -82l310 -296c29 -29 39 -62 39 -102c0 -35 29 -64 64 -64h640
+c35 0 64 29 64 64v25c0 26 3 52 10 77l108 436c7 25 10 51 10 77v246c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-32h-32v125c0 53 -36 102 -89 113c-7 1 -15 2 -23 2c-62 0 -112 -50 -112 -112v-128h-32v122c0 67 -48 126 -115 133c-5 1 -9 1 -13 1zM768 1280
+c54 0 106 -17 149 -50c37 22 80 34 123 34c79 0 152 -38 197 -103c19 5 39 7 59 7c134 0 240 -110 240 -243v-246c0 -36 -5 -73 -13 -108l-109 -436c-6 -24 -6 -47 -6 -71c0 -106 -86 -192 -192 -192h-640c-114 0 -192 91 -192 201l-308 296c-47 45 -76 109 -76 175v224
+c0 132 108 240 240 240c6 0 11 0 16 -1c8 127 114 225 240 225c34 0 67 -7 98 -21c47 45 109 69 174 69z" />
+ <glyph glyph-name="hand-scissors-o" unicode="&#xf257;" horiz-adv-x="1792"
+d="M1073 -128h-177c-104 0 -183 45 -226 141c-15 32 -23 67 -23 102v5c-82 40 -135 124 -135 216c0 11 0 38 5 48h-261c-141 0 -256 115 -256 256s115 256 256 256h113l-44 17c-99 37 -165 133 -165 239c0 141 115 256 256 256c31 0 62 -6 91 -17l628 -239h401
+c141 0 256 -115 256 -256v-668c0 -118 -80 -220 -194 -248l-339 -85c-60 -15 -123 -23 -186 -23zM1024 583l-155 -71l-163 -74c-40 -18 -66 -58 -66 -102c0 -62 50 -112 112 -112c16 0 32 3 46 10l338 154c-65 14 -112 73 -112 140v55zM1344 272c0 62 -50 112 -112 112
+c-16 0 -32 -3 -46 -10l-290 -132c-60 -27 -121 -51 -121 -127c0 -66 46 -114 113 -114c12 0 28 4 38 9l352 160c40 18 66 58 66 102zM1112 1024l-650 248c-15 5 -30 8 -46 8c-70 0 -128 -57 -128 -128c0 -53 33 -101 82 -120l526 -200v-64h-640c-71 0 -128 -57 -128 -128
+s57 -128 128 -128h535l233 106v198c0 40 17 79 46 106l111 102h-69zM1073 0c52 0 105 6 155 19l339 85c57 14 97 65 97 124v668c0 71 -57 128 -128 128h-308l-136 -126c-23 -21 -36 -51 -36 -82v-296c0 -62 51 -108 112 -108c62 0 112 55 112 116v208h32v-208
+c0 -45 -22 -87 -57 -114c70 -11 121 -72 121 -142c0 -56 -33 -108 -84 -131l-310 -141h91z" />
+ <glyph glyph-name="hand-spock-o" unicode="&#xf259;" horiz-adv-x="1920"
+d="M459 -256c-103 0 -192 70 -217 170l-101 401c-8 35 -13 72 -13 108c0 23 0 45 -5 67l-116 477c-5 19 -7 38 -7 57c0 124 94 226 217 239c22 113 119 193 235 193c111 0 207 -76 233 -184l83 -348l103 428c26 108 122 184 233 184c119 0 217 -86 236 -202
+c123 -14 212 -118 212 -241c0 -19 -3 -39 -7 -59l-123 -512c80 60 138 118 243 118c139 0 255 -113 255 -253c0 -84 -41 -162 -107 -212l-507 -380c-44 -33 -98 -51 -153 -51h-694zM1104 1408c-51 0 -96 -36 -108 -86l-164 -682h-127l-145 602c-12 50 -57 86 -108 86
+c-64 0 -112 -51 -112 -113c0 -10 1 -19 3 -28l132 -547h-26l-99 408c-12 49 -57 88 -109 88c-62 0 -113 -50 -113 -112c0 -9 1 -18 3 -26l116 -478c14 -58 4 -116 19 -174l100 -401c11 -43 49 -73 93 -73h694c27 0 54 9 76 26l507 379c34 26 56 67 56 110
+c0 70 -58 125 -127 125c-28 0 -55 -9 -77 -26l-307 -230v227c0 8 129 538 139 581c2 9 4 19 4 29c0 62 -47 115 -111 115c-52 0 -97 -36 -109 -86l-116 -482h-26l150 624c2 9 3 19 3 28c0 63 -46 116 -111 116z" />
+ <glyph glyph-name="handshake-o" unicode="&#xf2b5;" horiz-adv-x="2304"
+d="M192 384c84 0 84 128 0 128s-84 -128 0 -128zM1665 442c-79 103 -156 208 -246 302l-125 -140c-110 -125 -307 -122 -414 6c-76 92 -76 224 2 315l177 206c-62 32 -137 21 -204 21c-59 0 -116 -24 -158 -66l-158 -158h-155v-544c44 0 84 6 119 -28l297 -292
+c61 -59 140 -111 227 -111c45 0 93 15 125 47c75 -26 162 16 185 93c48 -4 92 11 127 44c23 21 53 63 50 96c9 -9 31 -10 43 -10c119 0 181 125 108 219zM1824 384h96v512h-93l-157 180c-42 48 -105 76 -169 76h-167c-56 0 -110 -25 -146 -67l-209 -243
+c-37 -44 -37 -106 -1 -150c57 -68 162 -69 221 -3l193 218c46 51 130 3 109 -62c38 -44 79 -87 116 -131c50 -62 98 -127 147 -190c31 -40 54 -88 60 -140zM2112 384c84 0 84 128 0 128s-84 -128 0 -128zM2304 960v-640c0 -35 -29 -64 -64 -64h-434
+c-36 -87 -115 -145 -207 -158c-43 -63 -109 -111 -183 -127c-55 -70 -144 -112 -233 -106c-165 -93 -351 -12 -474 109l-287 282h-358c-35 0 -64 29 -64 64v672c0 35 29 64 64 64h421c116 116 196 224 370 224h117c65 0 128 -20 181 -56c53 36 116 56 181 56h167
+c190 0 269 -124 384 -256h355c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="hashnode" unicode="&#xf317;"
+d="M246 1408h1044c136 0 246 -110 246 -246v-1044c0 -136 -110 -246 -246 -246h-1044c-136 0 -246 110 -246 246v1044c0 136 110 246 246 246zM1153 23v0c87 1 158 71 162 158s-62 162 -149 171l-315 556c-46 83 -135 78 -167 -39c-28 -111 -20 -216 -28 -342
+c0 -1 -1 -2 -2 -2s-2 1 -2 1l-281 560c20 16 37 50 37 75c0 52 -41 93 -93 93s-94 -41 -94 -93s42 -93 94 -93c4 0 7 1 11 1c118 -304 250 -659 297 -741c32 -78 141 -53 144 31l12 444c0 3 3 3 4 1l226 -537c-11 -20 -21 -55 -21 -78v-1c0 -91 74 -165 165 -165z" />
+ <glyph glyph-name="hashtag" unicode="&#xf292;" horiz-adv-x="1728"
+d="M959 512l64 256h-254l-64 -256h254zM1727 1016l-56 -224c-4 -14 -16 -24 -31 -24h-327l-64 -256h311c10 0 19 -5 25 -12c6 -8 9 -18 6 -28l-56 -224c-3 -14 -16 -24 -31 -24h-327l-81 -328c-4 -14 -17 -24 -31 -24h-224c-10 0 -20 5 -26 12c-6 8 -8 18 -6 28l78 312h-254
+l-81 -328c-4 -14 -17 -24 -31 -24h-225c-9 0 -19 5 -25 12c-6 8 -8 18 -6 28l78 312h-311c-10 0 -19 5 -25 12c-6 8 -8 18 -6 28l56 224c4 14 16 24 31 24h327l64 256h-311c-10 0 -19 5 -25 12c-6 8 -9 18 -6 28l56 224c3 14 16 24 31 24h327l81 328c4 14 17 24 32 24h224
+c9 0 19 -5 25 -12c6 -8 8 -18 6 -28l-78 -312h254l81 328c4 14 17 24 32 24h224c9 0 19 -5 25 -12c6 -8 8 -18 6 -28l-78 -312h311c10 0 19 -5 25 -12c6 -8 8 -18 6 -28z" />
+ <glyph glyph-name="hdd-o" unicode="&#xf0a0;"
+d="M1040 320c0 -44 -36 -80 -80 -80s-80 36 -80 80s36 80 80 80s80 -36 80 -80zM1296 320c0 -44 -36 -80 -80 -80s-80 36 -80 80s36 80 80 80s80 -36 80 -80zM1408 160v320c0 17 -15 32 -32 32h-1216c-17 0 -32 -15 -32 -32v-320c0 -17 15 -32 32 -32h1216c17 0 32 15 32 32
+zM178 640h1180l-157 482c-5 17 -24 30 -42 30h-782c-18 0 -37 -13 -42 -30zM1536 480v-320c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v320c0 27 8 50 16 75l197 606c23 70 90 119 164 119h782c74 0 141 -49 164 -119l197 -606c8 -25 16 -48 16 -75z" />
+ <glyph glyph-name="header" unicode="&#xf1dc;" horiz-adv-x="1668"
+d="M1620 -128c-88 0 -177 7 -266 7c-88 0 -176 -7 -264 -7c-34 0 -50 37 -50 66c0 89 100 51 152 85c33 21 33 105 33 140l-1 391c0 11 0 21 -1 31c-16 5 -34 4 -50 4h-675c-17 0 -35 1 -51 -4c-1 -10 -1 -20 -1 -31l-1 -371c0 -38 0 -142 37 -164c52 -32 170 13 170 -77
+c0 -30 -14 -70 -49 -70c-93 0 -186 7 -278 7c-85 0 -170 -7 -255 -7c-33 0 -48 38 -48 66c0 87 92 51 141 85c32 22 33 108 33 143l-1 57v813c0 48 7 202 -38 229c-50 31 -157 -17 -157 73c0 29 13 70 48 70c92 0 185 -7 277 -7c84 0 169 7 253 7c36 0 50 -40 50 -70
+c0 -86 -99 -44 -148 -75c-35 -21 -35 -124 -35 -160l1 -320c0 -11 0 -21 1 -32c13 -3 26 -3 39 -3h699c12 0 25 0 38 3c1 11 1 21 1 32l1 320c0 37 0 139 -35 160c-50 30 -150 -10 -150 75c0 30 14 70 50 70c88 0 176 -7 264 -7c86 0 172 7 258 7c36 0 50 -40 50 -70
+c0 -87 -103 -43 -153 -74c-34 -22 -35 -125 -35 -161l1 -943c0 -33 2 -120 34 -140c51 -32 159 9 159 -78c0 -29 -13 -70 -48 -70z" />
<glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664"
d="M1664 650c0 -109 -20 -215 -60 -314l-20 -49l-185 -33c-29 -109 -128 -190 -247 -190v-32c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-32c96 0 179 -53 223 -131l68 12c19 62 29 126 29 193c0 302 -299 566 -640 566
s-640 -264 -640 -566c0 -67 10 -131 29 -193l68 -12c44 78 127 131 223 131v32c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-576c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v32c-119 0 -218 81 -247 190l-185 33l-20 49c-40 99 -60 205 -60 314c0 411 381 758 832 758
s832 -347 832 -758z" />
- <glyph glyph-name="cc-mastercard" unicode="&#xf1f1;" horiz-adv-x="2304"
-d="M1119 1195c-83 55 -181 85 -281 85c-281 0 -509 -228 -509 -508c0 -281 228 -509 509 -509c100 0 198 30 281 85c-268 218 -266 629 0 847zM1152 1171c-258 -203 -259 -597 0 -799c259 202 258 596 0 799zM1185 1195c265 -218 269 -630 0 -847c83 -55 182 -85 281 -85
-c281 0 509 228 509 509c0 280 -228 508 -509 508c-100 0 -198 -30 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17zM1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-5v3h5v-1zM1947 7h3l-4 5c2 0 2 1 3 1c1 1 1 2 1 3s0 2 -1 3c-1 0 -2 1 -4 1h-6
-v-13h3v5h1zM685 75c0 24 15 43 41 43c24 0 40 -19 40 -43c0 -25 -16 -43 -40 -43c-26 0 -41 19 -41 43zM1158 119c19 0 32 -11 35 -32h-70c3 19 15 32 35 32zM1514 75c0 24 15 43 40 43s41 -19 41 -43c0 -25 -16 -43 -41 -43s-40 19 -40 43zM1786 75c0 24 16 43 41 43
-c24 0 41 -19 41 -43c0 -25 -17 -43 -41 -43c-25 0 -41 19 -41 43zM1944 3c-1 0 -2 0 -4 1c-1 0 -2 1 -3 2s-2 2 -2 3c-1 2 -1 3 -1 4c0 2 0 3 1 4c0 2 1 3 2 4s2 1 3 2c2 1 3 1 4 1c2 0 3 0 4 -1c2 -1 3 -1 4 -2s1 -2 2 -4c0 -1 1 -2 1 -4c0 -1 -1 -2 -1 -4
-c-1 -1 -1 -2 -2 -3s-2 -2 -4 -2c-1 -1 -2 -1 -4 -1zM599 7h30v85c0 32 -21 53 -54 54c-17 0 -35 -5 -47 -24c-9 15 -24 24 -45 24c-14 0 -28 -5 -39 -20v16h-30v-135h30v75c0 24 13 36 33 36s30 -13 30 -36v-75h29v75c0 24 14 36 33 36c20 0 30 -13 30 -36v-75zM765 7h29
-v135h-29v-16c-10 12 -24 20 -43 20c-38 0 -67 -30 -67 -71s29 -71 67 -71c19 0 33 7 43 20v-17zM943 48c0 24 -18 36 -47 40l-14 2c-13 2 -23 5 -23 14s9 15 25 15c18 0 34 -6 43 -11l12 24c-14 9 -33 14 -55 14c-34 0 -56 -17 -56 -44c0 -22 16 -35 47 -39l13 -2
-c17 -3 24 -7 24 -14c0 -11 -11 -17 -31 -17s-35 7 -45 14l-13 -23c16 -11 36 -17 58 -17c39 0 62 18 62 44zM1073 14l-8 25c-9 -5 -18 -7 -26 -7c-15 0 -19 9 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61c0 -31 12 -50 47 -50c12 0 27 4 36 10zM1159 146
-c-39 0 -67 -29 -67 -71c0 -43 29 -71 69 -71c20 0 39 5 55 19l-14 22c-11 -9 -26 -15 -39 -15c-19 0 -36 9 -41 33h101v12c0 42 -26 71 -64 71zM1318 146c-17 0 -28 -8 -35 -20v16h-30v-135h30v76c0 22 9 35 29 35c6 0 12 -1 18 -4l9 28c-7 3 -15 4 -21 4zM1348 75
-c0 -41 28 -71 72 -71c20 0 34 4 48 16l-14 24c-11 -8 -22 -13 -35 -12c-24 0 -41 17 -41 43s17 43 41 43c13 0 24 -4 35 -12l14 24c-14 11 -28 16 -48 16c-44 0 -72 -30 -72 -71zM1593 7h30v135h-30v-16c-9 12 -23 20 -42 20c-38 0 -68 -30 -68 -71s30 -71 68 -71
-c19 0 33 7 42 20v-17zM1726 146c-17 0 -28 -8 -35 -20v16h-29v-135h29v76c0 22 10 35 29 35c6 0 12 -1 18 -4l9 28c-6 3 -15 4 -21 4zM1866 7h29v190h-29v-71c-9 12 -23 20 -43 20c-37 0 -67 -30 -67 -71s30 -71 67 -71c20 0 34 7 43 20v-17zM1944 27c-1 0 -3 -1 -5 -1
-c-2 -1 -3 -2 -4 -3c-2 -1 -3 -3 -3 -4c-1 -2 -1 -4 -1 -6c0 -1 0 -3 1 -5c0 -1 1 -3 3 -4c1 -1 2 -2 4 -3s4 -1 5 -1c2 0 4 0 6 1c1 1 3 2 4 3s2 3 3 4c1 2 1 4 1 5c0 2 0 4 -1 6c-1 1 -2 3 -3 4s-3 2 -4 3c-2 0 -4 1 -6 1zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048
-c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048c70 0 128 -58 128 -128z" />
- <glyph glyph-name="times" unicode="&#xf00d;" horiz-adv-x="1188"
-d="M1188 214c0 -25 -10 -50 -28 -68l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-294 294l-294 -294c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136c-18 18 -28 43 -28 68s10 50 28 68l294 294l-294 294c-18 18 -28 43 -28 68s10 50 28 68l136 136
-c18 18 43 28 68 28s50 -10 68 -28l294 -294l294 294c18 18 43 28 68 28s50 -10 68 -28l136 -136c18 -18 28 -43 28 -68s-10 -50 -28 -68l-294 -294l294 -294c18 -18 28 -43 28 -68z" />
- <glyph glyph-name="buysellads" unicode="&#xf20d;"
-d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960c0 -158 -130 -288 -288 -288h-960c-158 0 -288 130 -288 288v960c0 158 130 288 288 288h960c158 0 288 -130 288 -288z" />
- <glyph glyph-name="diaspora" unicode="&#xf2e5;" horiz-adv-x="1581"
-d="M1005 -16c-42 59 -111 155 -153 214c-41 57 -75 102 -77 102s-66 -87 -152 -205c-82 -113 -150 -205 -151 -205c-2 0 -296 207 -297 209c0 1 65 99 147 217s149 217 149 219c0 4 -27 14 -234 83c-129 43 -235 78 -237 79s10 41 52 174c30 95 56 174 57 175
-s112 -35 248 -80s249 -81 250 -81s2 2 3 5s2 118 3 257s2 254 3 255c1 2 40 2 180 2c98 0 179 0 180 -1c2 -1 4 -78 8 -249c7 -281 9 -285 13 -285c2 0 109 36 239 80s236 79 237 78c3 -3 109 -350 108 -351s-109 -37 -241 -82c-181 -61 -240 -82 -240 -85
-c0 -2 62 -95 141 -211c78 -114 141 -208 141 -209c-1 -2 -293 -217 -295 -217c-1 0 -38 50 -82 112z" />
- <glyph glyph-name="fonticons" unicode="&#xf280;"
-d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925c41 0 57 -15 56 -79l174 21c0 153 -105 181 -222 181c-174 0 -265 -70 -265 -240v-72h-96v-128h76
-c10 0 20 0 20 -8v-382c0 -19 -5 -25 -23 -27l-73 -7v-88h448v86l-149 14c-18 2 -11 5 -11 25v387h191l38 128h-231c-10 0 2 7 2 15v80c0 60 2 94 65 94zM1248 96v86l-54 9c-19 3 -10 5 -10 25v520h-275l-23 -101l83 -22c13 -4 23 -13 23 -27v-370c0 -19 -8 -23 -26 -25
-l-70 -9v-86h352z" />
- <glyph glyph-name="sort-asc" unicode="&#xf0de;" horiz-adv-x="1024"
-d="M1024 832c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="folder-open" unicode="&#xf07c;" horiz-adv-x="1879"
-d="M1879 584c0 -24 -15 -48 -31 -66l-336 -396c-58 -68 -176 -122 -264 -122h-1088c-36 0 -87 11 -87 56c0 24 15 48 31 66l336 396c58 68 176 122 264 122h1088c36 0 87 -11 87 -56zM1536 928v-160h-832c-125 0 -280 -71 -361 -167l-337 -396l-5 -6c0 8 -1 17 -1 25v960
-c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h544c123 0 224 -101 224 -224z" />
+ <glyph glyph-name="heart" unicode="&#xf004;" horiz-adv-x="1792"
+d="M896 -128c-16 0 -32 6 -44 18l-624 602c-8 7 -228 208 -228 448c0 293 179 468 478 468c175 0 339 -138 418 -216c79 78 243 216 418 216c299 0 478 -175 478 -468c0 -240 -220 -441 -229 -450l-623 -600c-12 -12 -28 -18 -44 -18z" />
+ <glyph glyph-name="heart-o" unicode="&#xf08a;" horiz-adv-x="1792"
+d="M1664 940c0 281 -190 340 -350 340c-149 0 -317 -161 -369 -223c-24 -29 -74 -29 -98 0c-52 62 -220 223 -369 223c-160 0 -350 -59 -350 -340c0 -183 185 -353 187 -355l581 -560l580 559c3 3 188 173 188 356zM1792 940c0 -240 -220 -441 -229 -450l-623 -600
+c-12 -12 -28 -18 -44 -18s-32 6 -44 18l-624 602c-8 7 -228 208 -228 448c0 293 179 468 478 468c175 0 339 -138 418 -216c79 78 243 216 418 216c299 0 478 -175 478 -468z" />
<glyph glyph-name="heartbeat" unicode="&#xf21e;" horiz-adv-x="1792"
d="M1280 512h305c-12 -13 -20 -20 -22 -22l-623 -600c-12 -12 -28 -18 -44 -18s-32 6 -44 18l-624 602c-2 1 -10 8 -21 20h369c29 0 55 20 62 48l70 281l190 -667c8 -27 33 -46 62 -46c28 0 53 19 61 46l146 485l56 -112c11 -21 33 -35 57 -35zM1792 940
c0 -115 -50 -220 -103 -300h-369l-111 221c-11 23 -37 37 -62 35c-27 -3 -49 -20 -56 -46l-129 -430l-196 686c-8 27 -33 46 -63 46c-29 0 -54 -20 -61 -48l-116 -464h-423c-53 80 -103 185 -103 300c0 293 179 468 478 468c175 0 339 -138 418 -216c79 78 243 216 418 216
c299 0 478 -175 478 -468z" />
- <glyph glyph-name="blind" unicode="&#xf29d;" horiz-adv-x="1330"
-d="M327 1225c-86 0 -156 70 -156 156c0 85 70 155 156 155s155 -70 155 -155c0 -86 -69 -156 -155 -156zM878 583c0 -108 -115 -84 -141 -40l-367 438c-16 26 -28 14 -28 14s-7 -8 4 -21l122 -139l1 -354c-86 -250 -161 -457 -161 -457c-47 -134 -86 -250 -120 -266
-c-41 -21 -71 -16 -103 -1c-42 19 -54 70 -51 100c0 0 2 16 197 618l5 416l-85 -164l35 -222c13 -84 -58 -95 -58 -95c-68 -11 -82 68 -82 70l-46 299c210 379 211 381 211 381c16 24 52 34 113 34c54 0 88 -16 107 -40l424 -521c6 -4 10 -10 14 -17l3 -3l-1 -1
-c5 -9 7 -19 7 -29zM475 433c96 -255 182 -448 182 -448c29 -74 79 -180 6 -222c-72 -42 -130 7 -146 41h-1c-3 8 -6 16 -8 25l-124 351zM1299 -159c21 -33 39 -57 28 -64c-19 -12 -25 23 -46 57c0 0 -113 171 -423 661c6 -2 17 7 17 7s11 9 11 17
-c308 -503 413 -678 413 -678z" />
- <glyph glyph-name="arrows-v" unicode="&#xf07d;" horiz-adv-x="640"
-d="M640 1216c0 -35 -29 -64 -64 -64h-128v-1024h128c35 0 64 -29 64 -64c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-256 256c-12 12 -19 28 -19 45c0 35 29 64 64 64h128v1024h-128c-35 0 -64 29 -64 64c0 17 7 33 19 45l256 256
-c12 12 28 19 45 19s33 -7 45 -19l256 -256c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="phone-square" unicode="&#xf098;"
-d="M1280 343c0 5 0 11 -2 16c-6 18 -152 92 -180 108c-19 11 -42 33 -65 33c-44 0 -109 -131 -148 -131c-20 0 -45 18 -63 28c-132 74 -223 165 -297 297c-10 18 -28 43 -28 63c0 39 131 104 131 148c0 23 -22 46 -33 65c-16 28 -90 174 -108 180c-5 2 -11 2 -16 2
-c-26 0 -77 -12 -101 -22c-66 -30 -114 -156 -114 -225c0 -67 27 -128 50 -190c80 -219 318 -457 537 -537c62 -23 123 -50 190 -50c69 0 195 48 225 114c10 24 22 75 22 101zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960
-c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="text-height" unicode="&#xf034;" horiz-adv-x="1789"
-d="M1744 128c44 0 58 -28 31 -63l-126 -162c-27 -35 -71 -35 -98 0l-126 162c-27 35 -13 63 31 63h80v1024h-80c-44 0 -58 28 -31 63l126 162c27 35 71 35 98 0l126 -162c27 -35 13 -63 -31 -63h-80v-1024h80zM81 1407l54 -27c7 -3 190 -5 211 -5c88 0 176 4 264 4
-c72 0 143 -1 215 -1h293c40 0 63 -9 90 29l42 1c9 0 19 -1 28 -1c2 -112 2 -224 2 -336c0 -35 1 -74 -5 -109c-22 -8 -45 -15 -68 -18c-23 40 -39 84 -54 128c-7 20 -31 155 -33 157c-21 26 -44 21 -75 21c-91 0 -186 4 -276 -7c-5 -44 -9 -91 -8 -136c1 -281 4 -562 4 -843
-c0 -77 -12 -158 10 -232c76 -39 166 -45 244 -80c2 -16 5 -33 5 -50c0 -9 -1 -19 -3 -29l-34 -1c-142 -4 -282 18 -425 18c-101 0 -202 -18 -303 -18c-1 17 -3 35 -3 52v9c38 61 175 62 238 99c22 49 19 320 19 383c0 202 -6 404 -6 606v117c0 18 4 90 -8 104
-c-14 15 -145 12 -162 12c-37 0 -144 -17 -173 -38c-48 -33 -48 -233 -108 -237c-18 11 -43 27 -56 44v383z" />
- <glyph glyph-name="linkedin-square" unicode="&#xf08c;"
-d="M237 122h231v694h-231v-694zM483 1030c-1 68 -50 120 -129 120s-131 -52 -131 -120c0 -66 50 -120 128 -120h1c81 0 131 54 131 120zM1068 122h231v398c0 213 -114 312 -266 312c-124 0 -179 -69 -209 -117h2v101h-231s3 -65 0 -694h231v388c0 20 1 41 7 56
-c17 41 55 84 119 84c83 0 116 -63 116 -157v-371zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="delicious" unicode="&#xf1a5;"
-d="M1472 160v480h-704v704h-480c-124 0 -224 -100 -224 -224v-480h704v-704h480c124 0 224 100 224 224zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="qrcode" unicode="&#xf029;"
-d="M0 1408h768v-704h-128v576h-512v-512h640v-128h-768v768zM0 -128v640h640v-640h-576v128h448v384h-384v-512h-128zM896 768v640h640v-640h-576v128h448v384h-384v-512h-128zM256 1152h256v-256h-256v256zM1152 1152h128v-128h-128v128zM256 256h128v-128h-128v128z
-M768 512h128v-128h-128v128zM1152 384h128v-128h-128v128zM1152 128h128v-128h-128v128zM1024 640h384v-256h-128v128h-256v128zM1536 256v-384h-256v128h128v256h128zM1024 384v-256h-256v128h128v128h128zM768 0h384v-128h-384v128z" />
- <glyph glyph-name="arrows-h" unicode="&#xf07e;" horiz-adv-x="1792"
-d="M1792 640c0 -17 -7 -33 -19 -45l-256 -256c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v128h-1024v-128c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-256 256c-12 12 -19 28 -19 45s7 33 19 45l256 256c12 12 28 19 45 19c35 0 64 -29 64 -64v-128h1024v128
-c0 35 29 64 64 64c17 0 33 -7 45 -19l256 -256c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="mercury" unicode="&#xf223;" horiz-adv-x="1152"
-d="M830 1220c190 -94 322 -290 322 -516c0 -296 -224 -540 -512 -572v-132h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-288 32 -512 276 -512 572
-c0 226 132 422 322 516c-105 61 -187 157 -228 273c-8 21 8 43 30 43h69c13 0 24 -8 29 -20c58 -139 195 -236 354 -236s296 97 354 236c5 12 16 20 37 20h61c22 0 38 -22 30 -43c-41 -116 -123 -212 -228 -273zM576 256c247 0 448 201 448 448s-201 448 -448 448
-s-448 -201 -448 -448s201 -448 448 -448z" />
- <glyph glyph-name="text-width" unicode="&#xf035;"
-d="M81 1407l54 -27c7 -3 190 -5 211 -5c88 0 176 4 264 4c265 0 533 6 798 -3c22 -1 43 13 56 31l42 1c9 0 19 -1 28 -1c2 -112 2 -224 2 -336c0 -36 1 -74 -5 -109c-22 -8 -45 -15 -68 -18c-23 40 -39 84 -54 128c-7 20 -32 155 -33 157c-7 9 -16 15 -27 19
-c-8 3 -56 2 -66 2c-123 0 -265 7 -386 -7c-5 -44 -9 -91 -8 -136l1 -152v52c1 -163 3 -325 3 -487c0 -77 -12 -158 10 -232c76 -39 166 -45 244 -80c2 -16 5 -33 5 -50c0 -9 -1 -19 -3 -29l-34 -1c-142 -4 -282 18 -425 18c-101 0 -202 -18 -303 -18c-1 17 -3 35 -3 52v9
-c38 61 175 62 238 99c25 56 18 529 18 617c0 14 -5 29 -5 44c0 41 7 276 -8 293c-14 15 -145 12 -162 12c-42 0 -277 -22 -301 -38c-47 -31 -48 -232 -108 -237c-18 11 -43 27 -56 44v383zM1310 125c35 0 168 -119 195 -140c15 -12 26 -29 26 -49s-11 -37 -26 -49
-c-27 -21 -160 -140 -195 -140c-46 0 -30 107 -30 125h-1024c0 -18 16 -125 -30 -125c-35 0 -168 119 -195 140c-15 12 -26 29 -26 49s11 37 26 49c27 21 160 140 195 140c46 0 30 -107 30 -125h1024c0 18 -16 125 30 125z" />
- <glyph glyph-name="envelope-o" unicode="&#xf003;" horiz-adv-x="1792"
-d="M1664 32v768c-21 -24 -44 -46 -69 -66c-143 -110 -287 -222 -426 -338c-75 -63 -168 -140 -272 -140h-2c-104 0 -197 77 -272 140c-139 116 -283 228 -426 338c-25 20 -48 42 -69 66v-768c0 -17 15 -32 32 -32h1472c17 0 32 15 32 32zM1664 1083c0 25 6 69 -32 69h-1472
-c-17 0 -32 -15 -32 -32c0 -114 57 -213 147 -284c134 -105 268 -211 401 -317c53 -43 149 -135 219 -135h2c70 0 166 92 219 135c133 106 267 212 401 317c65 51 147 162 147 247zM1792 1120v-1088c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1088
-c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
- <glyph glyph-name="rss-square" unicode="&#xf143;"
-d="M512 256c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM863 162c-17 310 -263 556 -573 573c-9 1 -18 -3 -24 -9s-10 -14 -10 -23v-128c0 -17 13 -31 30 -32c205 -15 370 -180 385 -385c1 -17 15 -30 32 -30h128c9 0 17 4 23 10
-s10 15 9 24zM1247 161c-17 520 -438 941 -958 958c-10 1 -17 -2 -23 -9c-6 -6 -10 -14 -10 -23v-128c0 -17 14 -31 31 -32c415 -15 753 -353 768 -768c1 -17 15 -31 32 -31h128c9 0 17 4 23 10c7 6 10 14 9 23zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960
-c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280"
-d="M1164 1408c15 0 30 -3 44 -9c44 -17 72 -58 72 -103v-1289c0 -45 -28 -86 -72 -103c-14 -6 -29 -8 -44 -8c-31 0 -60 11 -83 32l-441 424l-441 -424c-23 -21 -52 -33 -83 -33c-15 0 -30 3 -44 9c-44 17 -72 58 -72 103v1289c0 45 28 86 72 103c14 6 29 9 44 9h1048z" />
- <glyph glyph-name="behance" unicode="&#xf1b4;" horiz-adv-x="2048"
-d="M1848 1197v-124h-511v124h511zM1596 771c-120 0 -200 -75 -208 -195h408c-11 121 -74 195 -200 195zM1612 186c76 0 174 41 198 119h221c-68 -209 -209 -307 -427 -307c-288 0 -467 195 -467 479c0 274 189 483 467 483c286 0 444 -225 444 -495c0 -16 -1 -32 -2 -47
-h-658c0 -146 77 -232 224 -232zM277 236h296c113 0 205 40 205 167c0 129 -77 180 -199 180h-302v-347zM277 773h281c99 0 169 43 169 150c0 116 -90 144 -190 144h-260v-294zM0 1282h594c216 0 403 -61 403 -312c0 -127 -59 -209 -172 -263c155 -44 230 -161 230 -319
-c0 -256 -215 -366 -444 -366h-611v1260z" />
- <glyph glyph-name="wpbeginner" unicode="&#xf297;" horiz-adv-x="1792"
-d="M384 704h160v224h-160v-224zM1221 372v92c-86 -30 -157 -37 -243 -38c-193 -1 -364 79 -480 169l1 -96c109 -99 276 -177 484 -176c87 0 169 18 238 49zM640 704h640v224h-640v-224zM1792 736c0 -127 -36 -247 -99 -352c56 -64 89 -143 89 -229
-c0 -209 -198 -379 -443 -379c-166 0 -310 78 -386 193c-19 -1 -38 -1 -57 -1s-38 0 -57 1c-76 -115 -220 -193 -386 -193c-245 0 -443 170 -443 379c0 86 33 165 89 229c-63 105 -99 225 -99 352c0 424 401 768 896 768s896 -344 896 -768z" />
- <glyph glyph-name="star-half-o" unicode="&#xf123;" horiz-adv-x="1664"
-d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500c7 -44 -9 -70 -40 -70c-11 0 -25 4 -40 12l-449 236l-449 -236c-15 -8 -29 -12 -40 -12c-31 0 -47 26 -40 70l86 500l-364 354c-43 43 -29 85 31 94
-l502 73l225 455c13 27 31 41 49 41s35 -14 49 -41l225 -455l502 -73c60 -9 74 -51 30 -94z" />
- <glyph glyph-name="keyboard-o" unicode="&#xf11c;" horiz-adv-x="1920"
-d="M384 368v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM512 624v-96c0 -9 -7 -16 -16 -16h-224c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h224c9 0 16 -7 16 -16zM384 880v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96
-c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1408 368v-96c0 -9 -7 -16 -16 -16h-864c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h864c9 0 16 -7 16 -16zM768 624v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM640 880v-96
-c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1024 624v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM896 880v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96
-c9 0 16 -7 16 -16zM1280 624v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1664 368v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1152 880v-96c0 -9 -7 -16 -16 -16h-96
-c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1408 880v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1664 880v-352c0 -9 -7 -16 -16 -16h-224c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h112v240c0 9 7 16 16 16h96
-c9 0 16 -7 16 -16zM1792 128v896h-1664v-896h1664zM1920 1024v-896c0 -71 -57 -128 -128 -128h-1664c-71 0 -128 57 -128 128v896c0 71 57 128 128 128h1664c71 0 128 -57 128 -128z" />
- <glyph glyph-name="minus-circle" unicode="&#xf056;"
-d="M1216 576v128c0 35 -29 64 -64 64h-768c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h768c35 0 64 29 64 64zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="hand-o-down" unicode="&#xf0a7;"
-d="M1408 576c0 199 -128 369 -128 544v32h-640v-32c0 -106 -90 -177 -163 -241c-46 -41 -92 -79 -145 -112c-22 -14 -45 -26 -68 -38s-136 -62 -136 -89c0 -85 32 -160 128 -160c128 0 193 96 256 96v-576c0 -67 60 -128 128 -128c69 0 128 59 128 128v331
-c26 -20 70 -35 103 -35c47 0 87 19 119 53c21 -12 45 -18 69 -18c46 0 103 23 126 65c18 -3 37 -4 56 -4c118 0 167 73 167 184zM1280 1344c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1536 580c0 -184 -104 -318 -295 -317l-5 1
-c-50 -40 -114 -61 -178 -61c-14 0 -29 1 -43 3c-34 -19 -80 -33 -119 -37v-169c0 -140 -117 -256 -257 -256c-138 0 -255 118 -255 256v374c-39 -16 -86 -22 -128 -22c-168 0 -256 129 -256 288c0 134 171 177 264 235c47 30 88 64 129 100c33 29 119 97 119 145v288
-c0 71 57 128 128 128h640c71 0 128 -57 128 -128v-288c0 -63 37 -162 59 -223c37 -102 69 -207 69 -317z" />
- <glyph glyph-name="sort-numeric-asc" unicode="&#xf162;" horiz-adv-x="1454"
-d="M1314 223c0 82 -67 169 -147 169c-70 0 -114 -57 -114 -131c0 -72 46 -133 141 -133c65 0 120 39 120 95zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192
-c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1454 165c0 -202 -110 -421 -348 -421c-45 0 -82 7 -108 16c-16 5 -30 10 -42 15l39 113c9 -4 20 -8 31 -11c20 -7 46 -13 75 -13c120 0 182 100 201 204h-2c-28 -30 -87 -51 -146 -51c-145 0 -240 114 -240 244
-c0 138 106 251 253 251c159 0 287 -130 287 -347zM1424 882v-114h-469v114h167v432c0 13 1 26 1 36v16h-2l-7 -12c-5 -8 -13 -18 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
- <glyph glyph-name="share-alt" unicode="&#xf1e0;"
-d="M1216 512c177 0 320 -143 320 -320s-143 -320 -320 -320s-320 143 -320 320c0 11 1 23 2 34l-360 180c-57 -53 -134 -86 -218 -86c-177 0 -320 143 -320 320s143 320 320 320c84 0 161 -33 218 -86l360 180c-1 11 -2 23 -2 34c0 177 143 320 320 320s320 -143 320 -320
-s-143 -320 -320 -320c-84 0 -161 33 -218 86l-360 -180c1 -11 2 -23 2 -34s-1 -23 -2 -34l360 -180c57 53 134 86 218 86z" />
- <glyph glyph-name="shirtsinbulk" unicode="&#xf214;"
-d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
-l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
-v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
-M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
-v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265c-172 0 -313 140 -313 313c0 172 141 313 313 313c173 0 313 -141 313 -313c0 -173 -140 -313 -313 -313zM595 646c0 -152 266 -41 266 -130c0 -45 -82 -49 -112 -49c-42 0 -102 9 -123 51h-3l-31 -63
-c51 -32 100 -42 162 -42c67 0 175 20 175 107c0 165 -269 56 -269 130c0 45 71 51 102 51c37 0 100 -11 122 -45h3l30 58c-52 21 -94 41 -152 41c-69 0 -170 -22 -170 -109z" />
- <glyph glyph-name="viacoin" unicode="&#xf237;"
-d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
- <glyph glyph-name="dogmazic" unicode="&#xf303;"
-d="M768 1404c423 0 768 -343 768 -766s-345 -766 -768 -766s-768 343 -768 766s345 766 768 766zM768 1302c-368 0 -666 -297 -666 -664s298 -664 666 -664s666 297 666 664s-298 664 -666 664zM768 1223c668 3 845 -918 212 -1148c-52 -19 -148 -29 -165 -17
-c-9 6 6 111 30 214c20 88 28 84 -78 37c-49 -22 -92 -40 -96 -41c-5 -1 -23 23 -60 78c-32 48 -54 78 -55 74s-21 -73 -44 -154c-50 -177 -38 -165 -111 -110c-452 340 -218 1052 351 1067h16zM803 1137c-251 0 -505 -261 -415 -458c14 -31 19 -30 9 1
-c-66 214 206 464 458 420c281 -49 436 -423 255 -613c-49 -51 -21 -53 31 -2c184 181 17 586 -267 645c-23 5 -47 7 -71 7zM435 998c-2 0 -6 0 -10 -1c-132 -18 -189 -193 -96 -296c27 -30 30 -29 22 5c-18 75 7 167 69 258c19 28 24 34 15 34zM805 958
-c-12 0 -35 -27 -35 -44c0 -20 -7 -22 -25 -6c-42 37 -123 53 -167 34c-14 -6 -14 -5 6 -8c61 -8 101 -75 69 -117c-27 -36 -40 -72 -44 -123c-4 -61 -30 -81 -51 -39c-27 54 10 135 62 135c11 0 0 8 -15 11c-89 17 -142 -140 -56 -167c14 -4 6 -11 -14 -11
-c-24 0 -48 11 -69 31c-23 22 -10 -6 24 -53c12 -16 57 -84 101 -150c94 -139 89 -132 95 -129c3 1 61 28 131 60s144 64 166 72c40 15 83 37 79 41c-1 1 -6 0 -11 -3c-24 -13 -80 -2 -98 18c-9 10 -9 9 15 9c97 0 121 145 28 173c-16 5 -18 7 -20 26c-1 11 -4 26 -5 33
-c-5 33 78 59 121 37c19 -10 15 0 -9 21c-37 33 -64 43 -119 43c-70 0 -77 6 -56 49c9 19 10 23 4 24c-10 2 -23 -11 -30 -29c-5 -15 -13 -20 -19 -11c-2 3 1 12 6 20c11 17 12 30 3 30c-8 0 -17 -11 -27 -30c-4 -8 -10 -15 -12 -15c-6 0 -4 18 3 31c4 6 6 16 6 20
-c0 16 -22 -2 -32 -25c-5 -12 -13 -22 -16 -22c-9 0 -7 12 6 37c6 13 10 24 9 25s-2 2 -4 2zM1242 756c-5 0 -5 -16 -5 -59c0 -100 -23 -174 -72 -226c-26 -27 -19 -29 32 -6c106 48 136 192 58 280c-6 7 -10 11 -13 11zM982 689c3 0 6 -3 10 -8c39 -45 25 -117 -28 -144
-c-24 -12 -28 -11 -37 8c-8 16 -8 16 3 28c16 17 34 55 40 86c4 21 8 30 12 30zM680 537c10 0 20 -8 21 -22c2 -25 -16 -39 -36 -27v0c-11 6 -11 32 1 43c4 4 9 6 14 6zM778 509c10 0 19 -11 19 -28c0 -22 -23 -33 -38 -18c-10 10 -9 27 2 38c6 6 12 8 17 8z" />
- <glyph glyph-name="digg" unicode="&#xf1a6;" horiz-adv-x="2048"
-d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968h205v-697h-205v697zM614 1254h205v-204h-205v204zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
-v-369h123z" />
- <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408"
-d="M384 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM896 69c1 -18 -5 -35 -17 -48c-12 -14 -29 -21 -47 -21h-135c-33 0 -60 25 -63 58c-29 305 -271 547 -576 576c-33 3 -58 30 -58 63v135c0 18 7 35 21 47c11 11 27 17 43 17h5
-c213 -17 414 -110 565 -262c152 -151 245 -352 262 -565zM1408 67c1 -17 -5 -34 -18 -47c-12 -13 -28 -20 -46 -20h-143c-34 0 -62 26 -64 60c-33 581 -496 1044 -1077 1078c-34 2 -60 30 -60 63v143c0 18 7 34 20 46c12 12 28 18 44 18h3c350 -18 679 -165 927 -414
-c249 -248 396 -577 414 -927z" />
- <glyph glyph-name="television" unicode="&#xf26c;" horiz-adv-x="1920"
-d="M1792 288v960c0 17 -15 32 -32 32h-1600c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32zM1920 1248v-960c0 -88 -72 -160 -160 -160h-736v-128h352c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v64
-c0 18 14 32 32 32h352v128h-736c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
- <glyph glyph-name="ffmpeg" unicode="&#xf30f;"
-d="M1158 323v179l-530 -527l-628 53l1010 1100l-167 -10l-730 -810v688l69 83l-169 -10v185l591 50l-325 -379v-161l483 553l774 66l-1134 -1194l149 -8l824 849v-806l-92 -87l234 -14v-223l-731 62z" />
- <glyph glyph-name="folder-o" unicode="&#xf114;" horiz-adv-x="1664"
-d="M1536 224v704c0 53 -43 96 -96 96h-704c-53 0 -96 43 -96 96v64c0 53 -43 96 -96 96h-320c-53 0 -96 -43 -96 -96v-960c0 -53 43 -96 96 -96h1216c53 0 96 43 96 96zM1664 928v-704c0 -123 -101 -224 -224 -224h-1216c-123 0 -224 101 -224 224v960
-c0 123 101 224 224 224h320c123 0 224 -101 224 -224v-32h672c123 0 224 -101 224 -224z" />
- <glyph glyph-name="bed" unicode="&#xf236;" horiz-adv-x="2048"
-d="M256 512h1728c35 0 64 -29 64 -64v-448h-256v256h-1536v-256h-256v1216c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-704zM832 832c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM2048 576h-1152v384c0 35 29 64 64 64h704
-c212 0 384 -172 384 -384v-64z" />
- <glyph glyph-name="caret-square-o-down" unicode="&#xf150;"
-d="M1145 861c11 -21 9 -47 -5 -66l-320 -448c-12 -17 -31 -27 -52 -27s-40 10 -52 27l-320 448c-14 19 -16 45 -5 66c11 22 33 35 57 35h640c24 0 46 -13 57 -35zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960
-c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="shower" unicode="&#xf2cc;" horiz-adv-x="1920"
-d="M1433 1287c13 -13 13 -33 0 -46l-626 -626c-13 -13 -33 -13 -46 0l-82 82c-13 13 -13 33 0 46l44 44c-97 122 -109 289 -35 422c-46 44 -108 71 -176 71c-141 0 -256 -115 -256 -256v-1280h-256v1280c0 282 230 512 512 512c144 0 274 -60 367 -156
-c126 51 272 32 382 -55l44 44c13 13 33 13 46 0zM1344 1024c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1600 896c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM1856 1024c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64
-s29 64 64 64zM1216 896c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1408 832c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64zM1728 896c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1088 768c35 0 64 -29 64 -64
-s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1344 640c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM1600 768c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1216 512c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64
-s-29 -64 -64 -64zM1472 640c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1088 512c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1344 512c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1216 384
-c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1088 256c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64z" />
- <glyph glyph-name="paper-plane-o" unicode="&#xf1d9;" horiz-adv-x="1792"
-d="M1764 1525c21 -15 31 -39 27 -64l-256 -1536c-3 -19 -15 -35 -32 -45c-9 -5 -20 -8 -31 -8c-8 0 -16 2 -24 5l-527 215l-298 -327c-12 -14 -29 -21 -47 -21c-8 0 -16 1 -23 4c-25 10 -41 34 -41 60v452l-472 193c-23 9 -38 30 -40 55c-2 24 11 47 32 59l1664 960
-c21 13 48 12 68 -2zM1422 26l221 1323l-1434 -827l336 -137l863 639l-478 -797z" />
- <glyph glyph-name="circle-o-notch" unicode="&#xf1ce;" horiz-adv-x="1728"
-d="M1728 640c0 -477 -387 -864 -864 -864s-864 387 -864 864c0 434 320 793 736 855v-228c-292 -59 -512 -318 -512 -627c0 -353 287 -640 640 -640s640 287 640 640c0 309 -220 568 -512 627v228c416 -62 736 -421 736 -855z" />
- <glyph glyph-name="gnupg" unicode="&#xf30d;" horiz-adv-x="1156"
-d="M0 667h81v244c0 274 223 497 497 497s497 -223 497 -497v-242c-1 -1 -3 -1 -4 -2v0l-1 -1v0v0v0h-1v-1v0v0v0h-1v0v0v-1v0h-1v0v0v0l-1 -1v0v0h-1v0l-1 -1v0v0v0v0l-1 -1v0v0v0h-1v0v0v0l-1 -1v0v0v0v0v0h-1v0v-1v0v0v0v0h-1v0v0v0l-2 -1v0v0l-1 -1v0h-1v0v-1v0v0v0h-1v0
-v0v0v0h-1v-1h-1l-1 -1h-1v-1l-2 -1h-1l-1 -1v0l-3 -1l-1 -1l-1 -1h-1l-1 -1l-1 -1h-1l-4 -2v0l-1 -1h-1v-1h-2l-3 -2l-1 -1c-1 -1 -3 -1 -4 -2h-1v0l-2 -2h-1h-1l-1 -1v0l-2 -1v0l-2 -1h-1l-1 -1c-1 -1 -3 -1 -4 -2l-1 -1c-2 -1 -3 -1 -5 -2v0l-4 -2l-2 -1
-c-2 -1 -3 -2 -5 -3v0c-99 -47 -257 -97 -557 -119c-215 -15 -346 -110 -431 -224v390v0zM310 667h536v244c0 148 -120 268 -268 268s-268 -120 -268 -268v-244zM1004 628c-1 -1 -4 -1 -5 -2zM803 1288c-64 38 -138 60 -218 60c-218 0 -398 -164 -422 -376
-c64 200 251 345 472 345c59 0 116 -10 168 -29v0zM1156 573v-701h-989c109 61 190 54 325 50c183 -6 385 71 485 173s-9 24 -122 -5s-330 -31 -476 7c459 -6 637 142 739 275s-44 24 -138 -22s-258 -79 -439 -55c273 1 482 137 615 278v0z" />
- <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792"
-d="M1280 416v192c0 18 -14 32 -32 32h-224v224c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32v-224h-224c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h224v-224c0 -18 14 -32 32 -32h192c18 0 32 14 32 32v224h224c18 0 32 14 32 32zM640 1152h512v128h-512v-128z
-M256 1152v-1280h-32c-123 0 -224 101 -224 224v832c0 123 101 224 224 224h32zM1440 1152v-1280h-1088v1280h160v160c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h160zM1792 928v-832c0 -123 -101 -224 -224 -224h-32v1280h32c123 0 224 -101 224 -224z" />
- <glyph glyph-name="toggle-off" unicode="&#xf204;" horiz-adv-x="2048"
-d="M1152 640c0 282 -230 512 -512 512s-512 -230 -512 -512s230 -512 512 -512s512 230 512 512zM1920 640c0 282 -230 512 -512 512h-386c156 -117 258 -303 258 -512s-102 -395 -258 -512h386c282 0 512 230 512 512zM2048 640c0 -353 -287 -640 -640 -640h-768
-c-353 0 -640 287 -640 640s287 640 640 640h768c353 0 640 -287 640 -640z" />
- <glyph glyph-name="calendar-minus-o" unicode="&#xf272;" horiz-adv-x="1664"
-d="M1152 416v-64c0 -18 -14 -32 -32 -32h-576c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h576c18 0 32 -14 32 -32zM128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088
-v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96
-c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="heroku" unicode="&#xf34f;" horiz-adv-x="1588"
+d="M152 -248c-40 2 -77 17 -105 45c-25 25 -41 57 -46 92c0 3 -1 6 -1 10v736v736c0 8 2 15 3 22c7 36 27 70 56 93c24 20 54 31 85 34c1 0 3 1 4 1h1290c34 -2 67 -14 93 -36c5 -4 12 -11 16 -16c19 -22 32 -48 38 -76c2 -9 3 -17 3 -26v-1463c-1 -27 -8 -52 -22 -75
+c-9 -15 -21 -29 -34 -40c-23 -19 -51 -32 -80 -36c-5 -1 -10 -1 -15 -1h-1285v0zM1439 -160c6 1 9 1 14 3c11 3 20 9 28 17c11 11 17 25 19 40c0 3 1 7 1 9v1l-1 1v0v729v732c-2 12 -6 21 -12 30c-8 12 -19 21 -32 26c-6 2 -10 3 -17 4c-2 0 -27 1 -643 1
+c-466 0 -641 -1 -643 -1c-27 -2 -51 -19 -61 -45c-2 -5 -2 -10 -3 -16c0 -2 -1 -44 -1 -733v-734c1 -13 6 -26 14 -37c3 -4 7 -9 11 -12c11 -9 25 -14 39 -15h644h643v0zM1010 285v272c-1 14 -4 24 -9 34c-2 4 -3 6 -5 9c-5 7 -11 13 -18 18c-15 12 -35 19 -61 21
+c-10 1 -25 1 -41 0c-76 -3 -166 -22 -263 -55c-30 -10 -61 -23 -86 -34c-7 -3 -8 -3 -71 -32c-34 -16 -62 -29 -62 -29v383v383h177v-252v-252s1 0 3 1c14 5 31 11 46 16c86 26 177 41 270 45c21 1 31 1 43 0c57 -4 111 -23 156 -57c22 -17 39 -34 54 -55
+c27 -38 43 -84 45 -132v-283v-270h-178v269zM399 195v178l199 -178s-198 -177 -199 -178v178zM883 969c4 5 11 15 15 21c25 35 48 73 66 112c20 44 36 89 46 136c1 4 3 17 3 17s40 1 89 1h89v-1c0 -1 -2 -12 -3 -19c-11 -68 -36 -134 -73 -193c-15 -25 -33 -50 -52 -71
+c-2 -2 -3 -4 -3 -4v0h-178z" />
+ <glyph glyph-name="history" unicode="&#xf1da;"
+d="M1536 640c0 -423 -345 -768 -768 -768c-229 0 -445 101 -591 277c-10 13 -9 32 2 43l137 138c7 6 16 9 25 9c9 -1 18 -5 23 -12c98 -127 245 -199 404 -199c282 0 512 230 512 512s-230 512 -512 512c-131 0 -255 -50 -348 -137l137 -138c19 -18 24 -46 14 -69
+c-10 -24 -33 -40 -59 -40h-448c-35 0 -64 29 -64 64v448c0 26 16 49 40 59c23 10 51 5 69 -14l130 -129c141 133 332 212 529 212c423 0 768 -345 768 -768zM896 928v-448c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v352c0 18 14 32 32 32h64
+c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1612"
+d="M1382 544v-480c0 -35 -29 -64 -64 -64h-384v384h-256v-384h-384c-35 0 -64 29 -64 64v480c0 2 1 4 1 6l575 474l575 -474c1 -2 1 -4 1 -6zM1605 613l-62 -74c-5 -6 -13 -10 -21 -11h-3c-8 0 -15 2 -21 7l-692 577l-692 -577c-7 -5 -15 -8 -24 -7c-8 1 -16 5 -21 11
+l-62 74c-11 13 -9 34 4 45l719 599c42 35 110 35 152 0l244 -204v195c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-408l219 -182c13 -11 15 -32 4 -45z" />
+ <glyph glyph-name="home-assistant" unicode="&#xf350;" horiz-adv-x="1765"
+d="M118 -245c-53 8 -96 43 -112 95l-6 19v765c0 719 1 766 5 782c11 40 35 71 67 88c36 19 -31 17 809 17c529 0 762 -1 773 -3c39 -7 75 -34 94 -70s17 27 17 -812c0 -529 -1 -762 -3 -773c-10 -55 -59 -101 -115 -108c-23 -3 -1509 -3 -1529 0zM865 50c1 1 -20 24 -46 50
+l-48 48h-53c-29 0 -54 -2 -54 -3s-4 -6 -10 -12c-18 -19 -45 -21 -66 -6c-14 10 -23 34 -18 51c11 41 62 51 89 17l8 -11h31c23 0 30 2 29 4c0 2 -27 28 -58 59l-57 56l-11 -2c-54 -8 -82 60 -37 91c21 14 54 8 68 -14c6 -9 8 -14 8 -30v-19l56 -57c31 -31 57 -56 59 -56
+s4 7 4 29v30l-12 10c-20 17 -25 38 -14 61c10 20 32 30 56 26c19 -4 38 -27 38 -48c0 -13 -9 -31 -21 -40l-11 -8v-103l37 -37c20 -20 37 -35 38 -34s1 59 1 129v127l-36 37c-20 20 -54 54 -77 75l-41 39h-95l-12 -13c-14 -15 -22 -18 -39 -18c-16 0 -27 5 -37 17
+c-7 8 -14 23 -14 31s7 24 14 32c10 12 22 17 38 17s28 -6 39 -20l10 -11h27c18 0 27 1 28 3s-18 23 -49 54l-52 51v56c0 31 -1 58 -2 60s-5 5 -10 8c-12 8 -19 24 -19 41c0 39 43 62 76 40c27 -18 28 -64 1 -81c-5 -3 -10 -8 -11 -11s0 -26 0 -51l1 -44l48 -47
+c27 -26 50 -47 51 -46s2 14 2 30v30l-12 10c-20 16 -26 39 -15 61c19 40 80 33 92 -10c5 -19 -4 -44 -21 -54l-8 -5v-105l59 -58c32 -32 59 -58 61 -58c3 0 3 37 3 180v180l-35 35l-36 34h-17c-14 0 -19 0 -29 6c-31 18 -33 63 -3 83c15 10 38 10 53 1c19 -12 27 -31 23 -51
+l-2 -11l31 -32c18 -18 33 -32 35 -32s17 14 34 31l31 31l-2 12c-5 30 20 59 49 59c12 0 28 -7 37 -17c32 -34 0 -88 -47 -81l-12 2l-35 -35l-35 -35v-256c0 -141 1 -256 2 -256s20 18 42 40l40 40v105l-12 10c-14 12 -20 22 -20 39c0 16 5 28 17 38c17 15 46 15 63 0
+c25 -22 25 -53 -1 -76l-13 -12v-30c0 -16 1 -32 2 -34c2 -3 12 5 49 42l46 46v86l-36 36l-36 36l-13 -1c-18 -2 -29 1 -40 10c-22 20 -25 47 -6 69c21 24 59 22 78 -3c7 -9 7 -12 7 -30v-21l19 -21c10 -12 21 -20 22 -19s2 33 2 75v73l-11 11c-19 17 -24 37 -15 58
+c8 17 26 30 44 30s37 -13 45 -30c9 -20 4 -43 -14 -58l-10 -8l1 -77l1 -77l21 21l22 21l-2 14c-5 43 41 72 76 49c44 -30 18 -96 -35 -89l-14 1l-35 -35l-35 -34v-100l-48 -48c-27 -27 -49 -50 -49 -52s18 -4 71 -4h70l10 13c12 14 22 19 39 19c21 0 42 -15 48 -34
+c13 -42 -31 -79 -70 -59c-4 2 -11 8 -16 14l-9 11h-186l-57 -57l-57 -58v-51c0 -35 1 -52 3 -53s20 15 44 39l41 41h118l9 11c24 30 68 26 84 -7c15 -31 -4 -67 -38 -71c-17 -2 -34 4 -46 19l-9 11h-102l-47 -47c-32 -32 -47 -47 -44 -48c2 -1 115 -1 250 -1h246l7 8l7 7
+l1 250l2 249l76 1c82 1 85 2 92 16c8 16 6 19 -86 112l-86 86v118c0 125 0 128 -13 135c-3 2 -31 3 -71 3c-73 0 -76 -1 -81 -17c-2 -4 -3 -21 -3 -37s-1 -30 -2 -30s-82 80 -180 178l-178 178h-24l-352 -352c-342 -342 -352 -352 -352 -361c0 -7 2 -13 8 -19l8 -8l76 -1
+c56 -1 78 -2 79 -4s2 -114 2 -249c0 -163 1 -248 3 -251c7 -13 -1 -13 265 -13c136 0 249 1 250 2v0zM631 150c2 3 5 7 6 11c1 6 0 10 -6 16c-9 9 -16 9 -25 2c-14 -11 -5 -34 13 -34c5 0 10 2 12 5zM1175 152c6 5 8 9 8 14c0 17 -20 24 -32 12c-10 -10 -8 -25 4 -30
+c9 -4 11 -3 20 4zM789 308c4 3 6 9 6 13c0 9 -10 21 -19 21c-8 0 -20 -10 -20 -17c0 -6 5 -15 10 -19c6 -5 16 -4 23 2zM1269 329c3 3 6 9 6 14c0 17 -21 25 -33 11c-8 -9 -8 -15 -1 -24s19 -9 28 -1zM604 334c4 4 8 10 8 13c0 7 -14 21 -21 21c-3 0 -9 -4 -13 -8
+s-8 -10 -8 -13s4 -9 8 -13s10 -8 13 -8s9 4 13 8zM1022 483c5 4 7 8 7 14c0 19 -23 27 -34 13c-7 -9 -7 -15 2 -24s16 -10 25 -3zM580 509c8 4 11 18 7 27c-6 12 -22 14 -31 5c-14 -16 5 -42 24 -32v0zM1040 662c6 3 12 12 12 19c0 2 -2 6 -5 10c-7 9 -21 10 -29 2
+s-7 -22 2 -29c8 -6 11 -6 20 -2zM1269 665c18 18 -8 45 -27 27c-4 -3 -6 -9 -6 -13c0 -9 10 -20 19 -20c4 0 10 2 14 6zM739 669c9 7 11 15 6 24c-8 15 -28 15 -35 -1c-4 -9 -1 -20 9 -25c9 -4 12 -4 20 2zM1158 799c3 3 4 9 4 15c0 18 -20 27 -33 14c-5 -5 -5 -21 1 -27
+c6 -7 21 -8 28 -2zM604 802c13 9 3 35 -14 35c-4 0 -9 -2 -13 -6s-7 -10 -7 -14c0 -15 21 -24 34 -15zM792 882c4 3 6 9 6 13c0 9 -11 21 -20 21c-4 0 -9 -3 -13 -7c-18 -18 8 -45 27 -27zM1015 882c12 11 3 34 -13 34c-12 0 -20 -10 -18 -25c1 -14 20 -19 31 -9v0z" />
+ <glyph glyph-name="hospital-o" unicode="&#xf0f8;" horiz-adv-x="1408"
+d="M384 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 480v-64c0 -17 -15 -32 -32 -32h-64
+c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64
+c17 0 32 -15 32 -32zM896 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 480v-64
+c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64
+c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 -128h384v1152h-256v-32c0 -53 -43 -96 -96 -96h-448c-53 0 -96 43 -96 96v32h-256v-1152h384v224c0 17 15 32 32 32h320c17 0 32 -15 32 -32v-224zM896 1056v320c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-96h-128v96
+c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-320c0 -17 15 -32 32 -32h64c17 0 32 15 32 32v96h128v-96c0 -17 15 -32 32 -32h64c17 0 32 15 32 32zM1408 1088v-1280c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v1280c0 35 29 64 64 64h320v288c0 53 43 96 96 96
+h448c53 0 96 -43 96 -96v-288h320c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="hourglass" unicode="&#xf254;"
+d="M1504 -64c18 0 32 -14 32 -32v-128c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v128c0 18 14 32 32 32h1472zM130 0c19 337 294 518 478 640c-184 122 -459 303 -478 640h1276c-19 -337 -294 -518 -478 -640c184 -122 459 -303 478 -640h-1276zM1504 1536
+c18 0 32 -14 32 -32v-128c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v128c0 18 14 32 32 32h1472z" />
+ <glyph glyph-name="hourglass-end" unicode="&#xf253;"
+d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64
+c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM874 700c202 76 406 343 406 708h-1024c0 -365 204 -632 406 -708c25 -9 42 -33 42 -60s-17 -51 -42 -60c-86 -32 -173 -100 -244 -196h700c-71 96 -158 164 -244 196c-25 9 -42 33 -42 60
+s17 51 42 60z" />
+ <glyph glyph-name="hourglass-half" unicode="&#xf252;"
+d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64
+c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM1280 1408h-1024c0 -146 33 -275 85 -384h854c52 109 85 238 85 384zM1223 192c-74 193 -207 330 -340 384h-230c-133 -54 -266 -191 -340 -384h910z" />
+ <glyph glyph-name="hourglass-o" unicode="&#xf250;"
+d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64
+c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM874 700c202 76 406 343 406 708h-1024c0 -365 204 -632 406 -708c25 -9 42 -33 42 -60s-17 -51 -42 -60c-202 -76 -406 -343 -406 -708h1024c0 365 -204 632 -406 708c-25 9 -42 33 -42 60
+s17 51 42 60z" />
+ <glyph glyph-name="hourglass-start" unicode="&#xf251;"
+d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64
+c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM1280 1408h-1024c0 -44 3 -87 9 -128h1006c6 41 9 84 9 128zM1280 -128c0 359 -198 624 -397 704h-230c-199 -80 -397 -345 -397 -704h1024z" />
+ <glyph glyph-name="houzz" unicode="&#xf27c;" horiz-adv-x="1024"
+d="M512 345l512 295v-591l-512 -296v592zM0 640l512 -295l-512 -296v591zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+ <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408"
+d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+ <glyph glyph-name="hubzilla" unicode="&#xf2eb;" horiz-adv-x="1587"
+d="M1349 1363c86 -43 165 -125 207 -213c16 -40 34 -78 30 -170c-3 -83 -8 -115 -34 -170c-68 -146 -203 -243 -356 -253l-83 -6l-29 -115c-24 -96 -27 -129 -27 -129c28 -29 91 -47 117 -115c36 -69 32 -168 -14 -225c-75 -93 -187 -121 -286 -70c-90 47 -136 164 -108 266
+c7 26 -2 34 -109 104l-116 77l-43 -35c-203 -162 -499 -19 -498 242c0 168 133 299 304 298c86 0 138 -20 202 -78l47 -42l104 53l105 51l-11 37c-16 55 -12 176 7 238c21 74 87 166 150 212c128 94 302 111 441 43v0zM580 413l233 -160s71 60 167 68l60 254
+s-185 59 -237 189l-217 -102s52 -128 -6 -248v-1z" />
+ <glyph glyph-name="i-cursor" unicode="&#xf246;" horiz-adv-x="896"
+d="M832 1408c-212 0 -320 -75 -320 -224v-416h128v-128h-128v-544c0 -149 108 -224 320 -224h64v-128h-64c-180 0 -312 52 -384 146c-72 -94 -204 -146 -384 -146h-64v128h64c212 0 320 75 320 224v544h-128v128h128v416c0 149 -108 224 -320 224h-64v128h64
+c180 0 312 -52 384 -146c72 94 204 146 384 146h64v-128h-64z" />
<glyph glyph-name="id-badge" unicode="&#xf2c1;" horiz-adv-x="1280"
d="M1024 278c0 -86 -57 -150 -128 -150h-512c-71 0 -128 64 -128 150c0 156 39 329 196 329c49 -46 115 -75 188 -75s139 29 188 75c157 0 196 -173 196 -329zM870 797c0 -126 -103 -227 -230 -227s-230 101 -230 227c0 125 103 227 230 227s230 -102 230 -227zM1152 -96
v1376h-1024v-1376c0 -17 15 -32 32 -32h960c17 0 32 15 32 32zM1280 1376v-1472c0 -88 -72 -160 -160 -160h-960c-88 0 -160 72 -160 160v1472c0 88 72 160 160 160h352v-96c0 -18 14 -32 32 -32h192c18 0 32 14 32 32v96h352c88 0 160 -72 160 -160z" />
- <glyph glyph-name="tencent-weibo" unicode="&#xf1d5;" horiz-adv-x="1166"
-d="M785 964c0 -106 -87 -193 -193 -193c-41 0 -79 13 -111 35c-36 -39 -76 -88 -115 -146c-163 -245 -232 -534 -202 -859c2 -29 -19 -54 -47 -57h-5c-26 0 -49 20 -52 47c-39 438 100 748 223 931c45 67 90 121 132 165c-11 24 -16 50 -16 77c0 107 86 193 193 193
-c106 0 193 -86 193 -193zM1166 953c0 -321 -261 -582 -583 -582c-44 0 -88 5 -131 14c-28 7 -45 35 -39 63c7 27 34 45 62 39c35 -9 72 -13 108 -13c264 0 479 215 479 479s-215 479 -479 479s-479 -215 -479 -479c0 -77 18 -150 52 -218c13 -26 3 -57 -22 -70
-c-26 -13 -57 -3 -70 23c-42 81 -64 173 -64 265c0 322 262 583 583 583c322 0 583 -261 583 -583z" />
- <glyph glyph-name="file-archive-o" unicode="&#xf1c6;"
-d="M640 1152h-128v128h128v-128zM768 1024h-128v128h128v-128zM640 896h-128v128h128v-128zM768 768h-128v128h128v-128zM1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68z
-M1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416h-128v-128h-128v128h-512v-1536h1280zM781 593c85 -287 107 -349 107 -349c5 -17 8 -34 8 -52c0 -111 -108 -192 -256 -192s-256 81 -256 192
-c0 18 3 35 8 52c0 0 21 62 120 396v128h128v-128h79c29 0 54 -19 62 -47zM640 128c71 0 128 29 128 64s-57 64 -128 64s-128 -29 -128 -64s57 -64 128 -64z" />
- <glyph glyph-name="yoast" unicode="&#xf2b1;" horiz-adv-x="1664"
-d="M339 1318h691l-26 -72h-665c-147 0 -267 -121 -267 -268v-771c0 -126 90 -237 214 -263c32 -7 65 -5 98 -5v-72h-45c-187 0 -339 153 -339 340v771c0 187 152 340 339 340zM1190 1536h247l-482 -1294c-90 -240 -199 -490 -495 -498v195c111 18 182 79 220 182
-c13 34 20 69 20 105s-7 72 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795c16 24 33 47 45 73h678v1038c0 114 -72 216 -179 254l25 67c136 -46 226 -178 226 -321z" />
- <glyph glyph-name="share-alt-square" unicode="&#xf1e1;"
-d="M1280 341c0 118 -96 214 -213 214c-56 0 -107 -22 -145 -58l-241 120c1 8 2 15 2 23s-1 15 -2 23l241 120c38 -36 89 -58 145 -58c117 0 213 96 213 214c0 117 -96 213 -213 213c-118 0 -214 -96 -214 -213c0 -8 1 -15 2 -23l-241 -120c-38 35 -89 57 -145 57
-c-117 0 -213 -95 -213 -213s96 -213 213 -213c56 0 107 22 145 57l241 -120c-1 -8 -2 -15 -2 -23c0 -117 96 -213 214 -213c117 0 213 96 213 213zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960
-c159 0 288 -129 288 -288z" />
- <glyph glyph-name="imdb" unicode="&#xf2d8;"
-d="M922 739v-182c0 -36 7 -69 -38 -68v309c44 0 38 -23 38 -59zM1238 643v-121c0 -20 6 -53 -23 -53c-6 0 -11 3 -14 9c-8 19 -4 163 -4 165c0 14 -4 47 18 47c27 0 23 -27 23 -47zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221c-10 74 -20 148 -32 221h-158
-v-472h107v312l45 -312h76l43 319v-319zM1039 712c0 30 1 62 -5 90c-16 83 -116 77 -181 77h-91v-472c318 0 277 -22 277 305zM1356 515v133c0 64 -3 111 -82 111c-33 0 -55 -10 -77 -34v154h-117v-472h110l7 30c21 -25 44 -36 77 -36c73 0 82 56 82 114zM1536 1248v-1216
-c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1216c88 0 160 -72 160 -160z" />
- <glyph glyph-name="snapchat-square" unicode="&#xf2ad;"
-d="M1280 388c0 14 -8 24 -22 27c-91 19 -160 83 -198 167c-4 8 -7 16 -7 25c0 45 124 36 124 100c0 27 -33 44 -57 44c-22 0 -40 -16 -63 -16c-4 0 -8 1 -12 2c3 38 5 77 5 115c0 34 -2 82 -17 114c-48 104 -140 165 -255 165c-125 0 -220 -47 -275 -165
-c-15 -32 -18 -80 -18 -115c0 -38 3 -76 6 -114c-5 -1 -10 -2 -15 -2c-22 0 -41 16 -62 16c-25 0 -55 -17 -55 -45c0 -62 124 -54 124 -99c0 -9 -3 -17 -7 -25c-39 -84 -106 -147 -198 -167c-14 -3 -22 -13 -22 -27c0 -47 106 -64 138 -69c9 -24 5 -66 40 -66
-c26 0 51 10 77 10c106 0 134 -95 256 -95c127 0 151 95 258 95c26 0 52 -9 78 -9c34 0 31 42 39 65c32 5 138 22 138 69zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="building-o" unicode="&#xf0f7;" horiz-adv-x="1408"
-d="M384 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 480v-64c0 -17 -15 -32 -32 -32h-64
-c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 224v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64
-c17 0 32 -15 32 -32zM896 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 992v-64
-c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 480v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 736v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64
-c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 992v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 736
-v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 992v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM640 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32
-v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1152 992v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32z
-M1152 1248v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM896 -128h384v1536h-1152v-1536h384v224c0 17 15 32 32 32h320c17 0 32 -15 32 -32v-224zM1408 1472v-1664c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64
-v1664c0 35 29 64 64 64h1280c35 0 64 -29 64 -64z" />
- <glyph glyph-name="sort-alpha-desc" unicode="&#xf15e;" horiz-adv-x="1629"
-d="M1159 104h177l-72 218l-12 47c-1 8 -2 14 -2 20h-4l-3 -20c-3 -12 -4 -27 -11 -47zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1376h192
-c18 0 32 -14 32 -32zM1629 -150v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1540 1001v-233h-584v90l369 529c8 12 16 22 21 27l11 9v3c-4 0 -8 -1 -14 -1c-8 -2 -18 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530
-c-6 -9 -14 -18 -21 -26l-11 -10v-3l14 3c9 1 18 1 30 1h248v119h121z" />
- <glyph glyph-name="map-signs" unicode="&#xf277;" horiz-adv-x="1718"
-d="M1708 1239c13 -13 13 -33 0 -46l-141 -141c-18 -18 -43 -28 -68 -28h-1344c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h576v64c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-64h512c25 0 50 -10 68 -28zM731 320h256v-512c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64
-v512zM1563 768c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64h-1344c-25 0 -50 10 -68 28l-141 141c-13 13 -13 33 0 46l141 141c18 18 43 28 68 28h512v192h256v-192h576z" />
- <glyph glyph-name="long-arrow-right" unicode="&#xf178;" horiz-adv-x="1728"
-d="M1728 643c0 -9 -4 -18 -10 -24l-384 -354c-10 -9 -23 -11 -35 -6c-11 5 -19 16 -19 29v224h-1248c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h1248v224c0 13 7 24 19 29s25 3 35 -5l384 -350c6 -6 10 -14 10 -23z" />
- <glyph glyph-name="first-order" unicode="&#xf2b0;"
-d="M1322 640c0 -26 -1 -51 -5 -76l-236 14l224 -78c-13 -51 -33 -98 -58 -141l-214 103l177 -158c-30 -41 -66 -77 -107 -108l-157 178l103 -215c-43 -26 -90 -45 -140 -59l-79 228l14 -240c-25 -4 -50 -6 -76 -6c-25 0 -51 2 -76 6l14 238l-78 -226c-50 13 -97 33 -140 59
-l103 215l-157 -178c-41 30 -77 67 -108 108l178 158l-214 -104c-25 44 -45 91 -58 141l224 79l-237 -14c-3 25 -5 50 -5 76s2 52 5 77l238 -14l-225 79c13 50 33 97 58 140l214 -104l-177 159c31 41 67 77 107 108l158 -178l-103 215c43 25 90 45 140 58l77 -224l-13 236
-c24 4 50 6 75 6c26 0 51 -2 76 -6l-14 -237l78 225c50 -13 97 -33 140 -59l-103 -214l158 178c40 -31 76 -67 107 -108l-177 -159l213 104c26 -43 45 -91 58 -141l-224 -78l237 14c4 -25 5 -51 5 -77zM1352 640c0 325 -262 588 -584 588c-323 0 -584 -263 -584 -588
-c0 -324 261 -587 584 -587c322 0 584 263 584 587zM1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
- <glyph glyph-name="calendar-check-o" unicode="&#xf274;" horiz-adv-x="1664"
-d="M1303 572l-512 -512c-13 -12 -33 -12 -46 0l-288 288c-12 13 -12 33 0 45l46 46c12 12 32 12 45 0l220 -220l444 444c13 12 33 12 45 0l46 -46c12 -12 12 -32 0 -45zM128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288
-c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96
-c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z" />
<glyph glyph-name="id-card" unicode="&#xf2c2;" horiz-adv-x="2048"
d="M896 324c0 132 -32 284 -164 284c-40 -40 -95 -64 -156 -64s-116 24 -156 64c-132 0 -164 -152 -164 -284c0 -73 48 -132 107 -132h426c59 0 107 59 107 132zM768 768c0 106 -86 192 -192 192s-192 -86 -192 -192s86 -192 192 -192s192 86 192 192zM1792 288v64
c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM1408 544v64c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1792 544v64c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32
v-64c0 -18 14 -32 32 -32h192c18 0 32 14 32 32zM1792 800v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM128 1152h1792v96c0 18 -14 32 -32 32h-1728c-18 0 -32 -14 -32 -32v-96zM2048 1248v-1216
c0 -88 -72 -160 -160 -160h-1728c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" />
- <glyph glyph-name="globe-w" unicode="&#xf305;"
-d="M768 1404c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM924 1238v0c-3 0 -6 -1 -7 -1c-2 0 -153 -25 -208 -34s-156 -30 -201 -34s-46 0 -69 0c-7 0 -14 1 -21 2c-65 -43 -152 -132 -193 -198c0 -4 2 -7 6 -11c12 -12 46 0 69 0
-s59 8 69 0s1 -7 2 -9s-16 -108 -7 -144s10 -88 33 -129s110 -63 145 -98s106 -34 112 -71s-30 -79 -42 -102s-40 -40 -35 -69s46 -47 69 -70s47 -29 69 -69s25 -125 35 -173c2 -9 5 -22 7 -31c3 0 8 -1 11 -1c57 0 146 15 200 33c6 41 13 83 24 103c18 33 24 24 36 36
-s23 18 35 35s23 46 34 68s38 38 33 67s-47 47 -70 70s-35 50 -69 69s-94 24 -130 33s-163 15 -165 16s0 -8 -8 2s-3 50 -3 73s13 44 30 85c17 23 7 12 33 31c13 12 55 -57 73 -57s-4 117 7 128c46 46 163 125 163 174s-46 46 -69 69s-60 -39 -143 -39s97 131 109 143
-s30 22 35 35s0 23 0 34s14 28 9 32c-2 2 -5 2 -8 2zM1041 1214v0c-6 -14 -7 -31 -14 -45c-12 -23 -35 -43 -35 -69s23 -46 35 -69s1 -60 34 -69s69 46 104 69c21 14 50 26 72 40c-46 50 -134 114 -196 143z" />
- <glyph glyph-name="github-alt" unicode="&#xf113;" horiz-adv-x="1664"
-d="M640 320c0 -73 -38 -192 -128 -192s-128 119 -128 192s38 192 128 192s128 -119 128 -192zM1280 320c0 -73 -38 -192 -128 -192s-128 119 -128 192s38 192 128 192s128 -119 128 -192zM1440 320c0 153 -93 288 -256 288c-66 0 -129 -12 -195 -21
-c-52 -8 -104 -11 -157 -11s-105 3 -157 11c-65 9 -129 21 -195 21c-163 0 -256 -135 -256 -288c0 -306 280 -353 524 -353h168c244 0 524 47 524 353zM1664 496c0 -111 -11 -229 -61 -331c-132 -267 -495 -293 -755 -293c-264 0 -649 23 -786 293c-51 101 -62 220 -62 331
-c0 146 40 284 136 396c-18 55 -27 113 -27 170c0 75 17 150 51 218c158 0 259 -69 379 -163c101 24 205 35 309 35c94 0 189 -10 280 -32c119 93 220 160 376 160c34 -68 51 -143 51 -218c0 -57 -9 -114 -27 -168c96 -113 136 -252 136 -398z" />
- <glyph glyph-name="sign-language" unicode="&#xf2a7;" horiz-adv-x="1664"
-d="M831 863c21 0 41 -6 59 -18l222 -148c41 -27 78 -60 110 -97l146 -170c25 -29 36 -68 29 -106l-72 -413c-8 -42 -42 -74 -85 -79l-527 -56l-352 -32h-9c-52 0 -96 42 -96 96c0 50 42 90 92 96l260 32h-448c-55 0 -99 46 -96 101c3 52 49 91 101 91l442 1l-521 64
-c-54 6 -93 55 -85 110c8 48 52 80 100 80h10l481 -60l-351 94c-50 13 -88 59 -80 110c8 48 49 81 95 81c7 0 13 -1 20 -2l448 -96l217 -37c2 0 4 -1 6 -1c30 0 45 41 18 59l-186 125c-46 31 -57 93 -24 137c18 25 47 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
-l-238 262c-2 2 -3 5 -5 7c-31 41 -24 101 19 134c40 31 97 21 132 -16l142 -147c-3 -3 -6 -5 -9 -8c-21 -29 -29 -64 -23 -99c6 -34 26 -65 55 -85zM1648 1115l15 -266c3 -49 -1 -99 -11 -147l-48 -219c-8 -38 -32 -69 -67 -87l-106 -54c1 40 -12 78 -39 109l-146 170
-c-34 39 -73 74 -117 103l-222 148c-22 15 -48 23 -76 23c-34 0 -65 -14 -88 -37l-235 312c-33 44 -23 106 23 137c43 30 102 16 134 -26l266 -352l-262 455c-28 47 -12 108 37 134c46 24 104 5 130 -40l241 -420l-136 337c-19 48 -6 106 40 130c49 26 109 5 132 -45
-l193 -415l101 -196c16 -31 63 -18 61 16l-12 224c-3 55 40 101 95 102c52 0 94 -44 97 -96z" />
- <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1407"
-d="M1384 609l-1328 -738c-31 -17 -56 -2 -56 33v1472c0 35 25 50 56 33l1328 -738c31 -17 31 -45 0 -62z" />
- <glyph glyph-name="heart-o" unicode="&#xf08a;" horiz-adv-x="1792"
-d="M1664 940c0 281 -190 340 -350 340c-149 0 -317 -161 -369 -223c-24 -29 -74 -29 -98 0c-52 62 -220 223 -369 223c-160 0 -350 -59 -350 -340c0 -183 185 -353 187 -355l581 -560l580 559c3 3 188 173 188 356zM1792 940c0 -240 -220 -441 -229 -450l-623 -600
-c-12 -12 -28 -18 -44 -18s-32 6 -44 18l-624 602c-8 7 -228 208 -228 448c0 293 179 468 478 468c175 0 339 -138 418 -216c79 78 243 216 418 216c299 0 478 -175 478 -468z" />
- <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792"
-d="M675 252c28 46 13 99 -34 119c-45 19 -105 -1 -133 -45c-29 -45 -15 -98 30 -119c46 -21 108 -1 137 45zM769 373c10 18 4 38 -14 45c-18 6 -40 -2 -50 -19c-10 -18 -5 -37 13 -45c18 -7 41 1 51 19zM943 266c-60 -136 -234 -210 -382 -162c-143 46 -203 187 -141 314
-c62 124 221 194 362 158c147 -38 221 -176 161 -310zM1255 426c-19 195 -275 329 -572 300c-297 -30 -521 -211 -502 -406s275 -329 572 -300c297 30 521 211 502 406zM1563 422c0 -225 -324 -508 -811 -508c-372 0 -752 180 -752 477c0 155 98 334 267 503
-c226 226 489 328 588 229c44 -43 48 -119 20 -209c-14 -46 43 -20 43 -21c182 77 341 81 399 -2c31 -44 28 -106 0 -178c-13 -33 4 -38 29 -46c103 -32 217 -109 217 -245zM1489 1046c57 -63 73 -150 48 -226c-10 -31 -43 -48 -74 -38s-48 43 -38 74c12 38 4 80 -24 111
-s-69 43 -107 35c-32 -7 -64 13 -70 45c-7 32 13 63 45 70c78 17 163 -7 220 -71zM1670 1209c118 -130 149 -308 99 -464c-12 -36 -50 -56 -86 -44s-56 50 -45 86c36 111 14 238 -70 330c-84 93 -207 128 -321 104c-37 -8 -74 16 -82 53s16 73 53 81c161 34 334 -15 452 -146
-z" />
- <glyph glyph-name="angle-down" unicode="&#xf107;" horiz-adv-x="998"
-d="M998 800c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 14 10 23 10c8 0 17 -4 23 -10l393 -393l393 393c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23z" />
- <glyph glyph-name="cc-jcb" unicode="&#xf24b;" horiz-adv-x="2304"
-d="M1951 538c0 -36 -24 -62 -54 -68c-4 -1 -13 -2 -18 -2h-153v140h153c5 0 14 -1 18 -2c30 -6 54 -33 54 -68zM1933 751c0 -35 -24 -58 -53 -63c-3 -1 -10 -1 -15 -1h-139v129h139c5 0 12 -1 15 -1c29 -5 53 -29 53 -64zM728 587v308h-228v-308c0 -75 -51 -131 -143 -131
-c-78 0 -155 23 -229 59v-112c120 -33 272 -33 272 -33c254 0 328 97 328 217zM1442 403v113c-52 -27 -118 -53 -200 -59c-144 -11 -230 59 -230 183s86 194 230 183c82 -6 147 -31 200 -58v112c-107 27 -208 31 -208 31c-352 16 -452 -123 -452 -268s100 -284 452 -268
-c0 0 101 4 208 31zM2176 518c0 74 -66 122 -152 128v3c78 11 121 62 121 121c0 76 -63 120 -148 124c-6 0 -17 1 -26 1h-455v-510h491c97 0 169 52 169 133zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h2048
-c70 0 128 -58 128 -128z" />
- <glyph glyph-name="compress" unicode="&#xf066;" horiz-adv-x="1510"
-d="M755 576v-448c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-144 144l-332 -332c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-114 114c-6 6 -10 15 -10 23s4 17 10 23l332 332l-144 144c-12 12 -19 28 -19 45c0 35 29 64 64 64h448c35 0 64 -29 64 -64zM1510 1248
-c0 -8 -4 -17 -10 -23l-332 -332l144 -144c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-448c-35 0 -64 29 -64 64v448c0 35 29 64 64 64c17 0 33 -7 45 -19l144 -144l332 332c6 6 15 10 23 10s17 -4 23 -10l114 -114c6 -6 10 -15 10 -23z" />
- <glyph glyph-name="pencil-square-o" unicode="&#xf044;" horiz-adv-x="1784"
-d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072c-9 9 -24 8 -33 -1l-350 -350c-9 -9 -10 -24 -1 -33s24 -8 33 1l350 350c9 9 10 24 1 33zM1408 478v-190c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832
-c40 0 80 -8 117 -25c9 -4 16 -13 18 -23c2 -11 -1 -21 -9 -29l-49 -49c-9 -9 -21 -12 -32 -8c-15 4 -30 6 -45 6h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v126c0 8 3 16 9 22l64 64c10 10 23 12 35 7s20 -16 20 -29zM1312 1216
-l288 -288l-672 -672h-288v288zM1756 1084l-92 -92l-288 288l92 92c37 37 99 37 136 0l152 -152c37 -37 37 -99 0 -136z" />
- <glyph glyph-name="google-plus-square" unicode="&#xf0d4;"
-d="M917 631c0 25 -3 45 -6 64h-362v-132h217c-8 -56 -65 -165 -217 -165c-132 0 -239 108 -239 242s107 242 239 242c74 0 124 -31 153 -59l104 101c-67 62 -154 100 -257 100c-213 0 -384 -172 -384 -384s171 -384 384 -384c221 0 368 156 368 375zM1262 585h109v110h-109
-v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="id-card-o" unicode="&#xf2c3;" horiz-adv-x="2048"
+d="M896 324c0 -73 -48 -132 -107 -132h-426c-59 0 -107 59 -107 132c0 132 32 284 164 284c40 -40 95 -64 156 -64s116 24 156 64c132 0 164 -152 164 -284zM768 768c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1792 352v-64
+c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704c18 0 32 -14 32 -32zM1408 608v-64c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h320c18 0 32 -14 32 -32zM1792 608v-64c0 -18 -14 -32 -32 -32h-192
+c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 864v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704c18 0 32 -14 32 -32zM1920 32v1120h-1792v-1120c0 -17 15 -32 32 -32h1728c17 0 32 15 32 32zM2048 1248v-1216
+c0 -88 -72 -160 -160 -160h-1728c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="ils" unicode="&#xf20b;" horiz-adv-x="1376"
+d="M992 912v-496c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v496c0 150 -122 272 -272 272h-272v-1152c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v1344c0 18 14 32 32 32h464c274 0 496 -222 496 -496zM1376 1376v-880c0 -274 -222 -496 -496 -496h-464
+c-18 0 -32 14 -32 32v960c0 18 14 32 32 32h160c18 0 32 -14 32 -32v-768h272c150 0 272 122 272 272v880c0 18 14 32 32 32h160c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="imdb" unicode="&#xf2d8;"
+d="M922 739v-182c0 -36 7 -69 -38 -68v309c44 0 38 -23 38 -59zM1238 643v-121c0 -20 6 -53 -23 -53c-6 0 -11 3 -14 9c-8 19 -4 163 -4 165c0 14 -4 47 18 47c27 0 23 -27 23 -47zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221c-10 74 -20 148 -32 221h-158
+v-472h107v312l45 -312h76l43 319v-319zM1039 712c0 30 1 62 -5 90c-16 83 -116 77 -181 77h-91v-472c318 0 277 -22 277 305zM1356 515v133c0 64 -3 111 -82 111c-33 0 -55 -10 -77 -34v154h-117v-472h110l7 30c21 -25 44 -36 77 -36c73 0 82 56 82 114zM1536 1248v-1216
+c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1216c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="inbox" unicode="&#xf01c;"
+d="M1023 576h316c-2 5 -3 11 -5 16l-212 496h-708l-212 -496c-2 -5 -3 -11 -5 -16h316l95 -192h320zM1536 546v-482c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v482c0 36 11 89 25 123l238 552c14 33 54 59 89 59h832c35 0 75 -26 89 -59l238 -552
+c14 -34 25 -87 25 -123z" />
+ <glyph glyph-name="indent" unicode="&#xf03c;" horiz-adv-x="1792"
+d="M352 704c0 -8 -3 -17 -9 -23l-288 -288c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v576c0 17 15 32 32 32c8 0 17 -3 23 -9l288 -288c6 -6 9 -15 9 -23zM1792 224v-192c0 -17 -15 -32 -32 -32h-1728c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32z
+M1792 608v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32
+h-1728c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32z" />
+ <glyph glyph-name="industry" unicode="&#xf275;" horiz-adv-x="1792"
+d="M448 1536c35 0 64 -29 64 -64v-891l536 429c11 9 26 14 40 14c35 0 64 -29 64 -64v-379l536 429c11 9 26 14 40 14c35 0 64 -29 64 -64v-1152c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v1664c0 35 29 64 64 64h384z" />
+ <glyph glyph-name="info" unicode="&#xf129;" horiz-adv-x="640"
+d="M640 192v-128c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h64v384h-64c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h384c35 0 64 -29 64 -64v-576h64c35 0 64 -29 64 -64zM512 1344v-192c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v192
+c0 35 29 64 64 64h256c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="info-circle" unicode="&#xf05a;"
+d="M1024 160v160c0 18 -14 32 -32 32h-96v512c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-160c0 -18 14 -32 32 -32h96v-320h-96c-18 0 -32 -14 -32 -32v-160c0 -18 14 -32 32 -32h448c18 0 32 14 32 32zM896 1056v160c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32
+v-160c0 -18 14 -32 32 -32h192c18 0 32 14 32 32zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="inkscape" unicode="&#xf312;"
+d="M755 1398v0c47 0 95 -17 131 -52l588 -601c234 -234 -259 -288 -401 -371c-50 -51 153 -85 132 -147c-42 -126 -157 -45 -280 -171c-50 -51 95 -46 45 -97c-93 -68 -285 -115 -300 -32c-21 117 -135 68 -185 119s101 104 51 155s-299 97 -349 148s191 88 141 139
+c-138 68 -461 41 -269 278l567 580c34 35 82 52 129 52zM760 1343v0c-34 0 -68 -13 -93 -38c-49 -50 -140 -138 -219 -223c-45 -45 -40 -109 10 -109h123l80 139l49 -199l149 95l93 -49l22 131l111 -89c12 12 12 54 -9 76l-224 228c-24 25 -58 38 -92 38zM491 456
+c-74 0 219 -119 279 -103c27 14 40 34 21 38c-56 9 -285 56 -300 65zM1390 297c43 -1 86 -22 100 -63c0 -54 -212 -36 -212 -7c13 47 63 71 112 70zM409 172c26 0 50 -8 64 -26c-23 -61 -101 -115 -151 -72c-57 50 21 99 87 98zM1251 168c71 -14 85 -65 71 -79
+c-64 -38 -136 21 -71 79z" />
+ <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898"
+d="M898 1066v-102c0 -18 -14 -32 -32 -32h-168c-31 -192 -178 -317 -405 -344c149 -159 308 -351 459 -536c8 -9 10 -23 4 -34c-5 -11 -16 -18 -29 -18h-195c-10 0 -19 4 -25 12c-161 193 -309 370 -498 571c-6 6 -9 14 -9 22v127c0 17 14 32 32 32h112
+c176 0 286 59 315 168h-427c-18 0 -32 14 -32 32v102c0 18 14 32 32 32h413c-38 75 -128 113 -268 113h-145c-18 0 -32 15 -32 32v133c0 18 14 32 32 32h832c18 0 32 -14 32 -32v-102c0 -18 -14 -32 -32 -32h-233c32 -41 53 -89 64 -144h171c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="instagram" unicode="&#xf16d;"
+d="M1024 640c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1162 640c0 -218 -176 -394 -394 -394s-394 176 -394 394s176 394 394 394s394 -176 394 -394zM1270 1050c0 -51 -41 -92 -92 -92s-92 41 -92 92s41 92 92 92s92 -41 92 -92z
+M768 1270c-112 0 -352 9 -453 -31c-35 -14 -61 -31 -88 -58s-44 -53 -58 -88c-40 -101 -31 -341 -31 -453s-9 -352 31 -453c14 -35 31 -61 58 -88s53 -44 88 -58c101 -40 341 -31 453 -31s352 -9 453 31c35 14 61 31 88 58s44 53 58 88c40 101 31 341 31 453s9 352 -31 453
+c-14 35 -31 61 -58 88s-53 44 -88 58c-101 40 -341 31 -453 31zM1536 640c0 -106 1 -211 -5 -317c-6 -123 -34 -232 -124 -322s-199 -118 -322 -124c-106 -6 -211 -5 -317 -5s-211 -1 -317 5c-123 6 -232 34 -322 124s-118 199 -124 322c-6 106 -5 211 -5 317s-1 211 5 317
+c6 123 34 232 124 322s199 118 322 124c106 6 211 5 317 5s211 1 317 -5c123 -6 232 -34 322 -124s118 -199 124 -322c6 -106 5 -211 5 -317z" />
+ <glyph glyph-name="internet-explorer" unicode="&#xf26b;" horiz-adv-x="1792"
+d="M1792 599c0 -35 -2 -70 -7 -104h-1151c0 -199 175 -343 367 -343c130 0 255 64 322 177h423c-114 -321 -419 -536 -759 -536c-123 0 -246 29 -356 83c-112 -57 -269 -116 -394 -116c-168 0 -237 103 -237 263c0 93 20 186 45 275c16 58 80 176 109 229
+c123 223 285 437 475 606c-153 -66 -319 -232 -427 -354c84 366 410 625 785 625c15 0 30 0 45 -1c124 57 297 117 433 117c162 0 301 -62 301 -245c0 -96 -37 -200 -75 -286c66 -119 101 -254 101 -390zM1722 1239c0 112 -80 181 -190 181c-84 0 -179 -34 -254 -70
+c162 -63 301 -179 393 -327c25 66 51 146 51 216zM128 2c0 -116 69 -179 183 -179c89 0 188 40 266 83c-163 96 -289 249 -351 428c-46 -96 -98 -224 -98 -332zM632 715h728c-7 193 -177 332 -364 332c-188 0 -357 -139 -364 -332z" />
+ <glyph glyph-name="ioxhost" unicode="&#xf208;" horiz-adv-x="2048"
+d="M1463 704c0 -47 -38 -86 -86 -86h-702c-48 0 -86 39 -86 86s38 86 86 86h702c48 0 86 -39 86 -86zM1677 704c0 59 -8 115 -23 170h-982c-48 0 -86 38 -86 85c0 48 38 86 86 86h908c-115 187 -321 311 -555 311c-360 0 -653 -292 -653 -652c0 -59 8 -115 23 -170h982
+c48 0 86 -38 86 -85c0 -48 -38 -86 -86 -86h-908c115 -187 321 -311 556 -311c359 0 652 292 652 652zM2048 959c0 -47 -38 -85 -86 -85h-131c11 -55 17 -112 17 -170c0 -454 -369 -824 -823 -824c-333 0 -620 198 -750 483h-189c-48 0 -86 38 -86 86c0 47 38 85 86 85h132
+c-11 55 -17 112 -17 170c0 454 369 824 824 824c332 0 619 -198 749 -483h188c48 0 86 -38 86 -86z" />
+ <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024"
+d="M0 -126l17 85c64 20 133 28 193 59c23 29 34 66 41 101c13 68 231 1049 228 1129v25c-55 30 -122 22 -182 32l19 103c129 -6 260 -16 390 -16c106 0 212 10 318 16c-4 -30 -11 -60 -19 -89c-69 -24 -142 -35 -210 -62c-22 -54 -27 -113 -37 -170
+c-48 -259 -112 -518 -165 -775c-10 -48 -59 -247 -55 -289l1 -18c61 -14 123 -21 185 -31c-2 -33 -8 -66 -16 -99c-22 0 -43 -3 -65 -3c-57 0 -116 19 -173 20c-69 1 -138 2 -206 2c-89 0 -176 -15 -264 -20z" />
+ <glyph glyph-name="java" unicode="&#xf351;" horiz-adv-x="1301"
+d="M419 163c0 0 -67 -39 48 -52c140 -16 211 -14 365 15c0 0 40 -25 97 -47c-345 -148 -781 8 -510 84zM377 356c0 0 -75 -56 40 -68c149 -15 267 -16 471 23c0 0 28 -28 72 -44c-417 -122 -882 -10 -583 89zM732 684v0c-288 332 316 483 316 483
+c-385 -223 -314 -288 -221 -418c99 -140 -117 -251 -117 -251s107 88 22 186zM1189 20c183 -82 -397 -247 -1101 -133c-258 42 125 187 195 138c0 0 -22 1 -61 -7c-37 -8 -155 -46 -92 -73c175 -76 805 -57 1004 3c105 32 55 72 55 72zM451 556c0 0 -320 -75 -113 -103
+c87 -12 262 -10 424 4c133 11 266 35 266 35s-47 -20 -81 -43c-326 -86 -954 -46 -773 42c153 74 277 65 277 65zM1026 235c331 172 178 337 71 315c-26 -5 -38 -10 -38 -10s10 14 29 21c211 74 374 -219 -68 -335c0 0 4 5 6 9zM827 1527c0 0 183 -183 -174 -465
+c-286 -226 -65 -355 0 -502c-167 151 -290 283 -208 407c121 181 456 269 382 560zM484 -231c-209 13 -250 47 -250 47c198 -33 533 -39 804 12c240 45 263 103 263 103c-12 -150 -499 -182 -817 -162z" />
+ <glyph glyph-name="jirafeau" unicode="&#xf318;"
+d="M1459 1408c43 0 77 -34 77 -77v-1382c0 -43 -34 -77 -77 -77h-923c18 109 27 134 50 210c31 103 92 108 92 108c49 11 74 31 224 -36s270 -72 270 -72v0c15 -19 71 -80 137 -85c90 -7 128 19 128 19s31 91 -38 176s-336 376 -343 403c0 0 -40 47 -69 58s-119 63 -135 130
+s-42 168 -33 215s22 152 -32 130s-31 -74 -40 -137s-52 -190 -112 -190c0 0 -87 150 -145 132s-108 -181 -63 -275c0 0 -210 -295 -393 -772c-20 14 -34 37 -34 63v1382c0 43 34 77 77 77h1382z" />
+ <glyph glyph-name="joomla" unicode="&#xf1aa;"
+d="M1070 463l-160 -160l-151 -152l-30 -30c-88 -87 -211 -117 -323 -89c-21 -92 -103 -160 -201 -160c-113 0 -205 92 -205 206c0 97 67 179 158 200c-29 113 1 237 89 325l12 12l151 -152l-11 -11c-50 -49 -49 -129 0 -179c49 -49 129 -49 178 0l30 30l151 152l161 160z
+M729 1145l12 -12l-152 -152l-12 12c-49 49 -129 49 -178 0s-49 -130 0 -179l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30c-92 91 -120 222 -85 339c-92 20 -160 102 -160 200c0 114 92 206 205 206c103 0 187 -75 203 -172c111 26 232 -5 319 -91z
+M1536 78c0 -114 -92 -206 -205 -206c-100 0 -183 71 -202 165c-116 -36 -249 -8 -341 84l-11 12l151 152l12 -12c49 -49 129 -49 178 0s49 129 0 178l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30c87 -87 118 -210 90 -322c100 -14 177 -99 177 -203z
+M1534 1202c0 -104 -78 -190 -178 -204c33 -115 4 -244 -87 -335l-12 -12l-151 152l12 12c49 49 49 129 0 178s-129 49 -178 0l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30c91 91 221 120 337 86c14 100 100 177 204 177c113 0 205 -92 205 -206z" />
+ <glyph glyph-name="joplin" unicode="&#xf310;"
+d="M374 1408h788c206 0 374 -168 374 -374v-788c0 -206 -168 -374 -374 -374h-788c-206 0 -374 168 -374 374v788c0 206 168 374 374 374zM771 1203v0c-4 0 -7 -4 -7 -8v0v-132v0c0 -4 4 -8 8 -8v0h57c23 0 42 -18 44 -41v-627v0v-15c0 -1 -1 -1 -1 -2c0 -3 0 -5 -1 -8
+c0 -2 -1 -3 -1 -5c-1 -2 -1 -4 -2 -6c-4 -12 -10 -23 -18 -33l-1 -1c-3 -3 -5 -6 -8 -9c-2 -2 -6 -5 -9 -7c-23 -17 -55 -24 -90 -21c-45 4 -89 24 -125 57s-58 73 -63 114c-4 36 7 69 31 91v0c1 1 2 1 3 2c17 14 39 24 65 26h1h8h4h2h2h13c1 0 0 -1 1 -1h1
+c23 -2 47 -9 69 -20h1c7 -4 9 0 9 3v199c0 6 -4 11 -10 12c-118 26 -234 0 -316 -75c-72 -65 -107 -159 -96 -258c10 -88 56 -172 128 -238c70 -64 159 -104 251 -113c13 -1 26 -2 38 -2c88 0 170 30 230 85c57 52 91 123 96 201l1 510v0v136v0v2c1 24 20 44 44 44h58
+c4 0 8 4 8 8v132v0c0 4 -4 8 -8 8v0h-417z" />
+ <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1026"
+d="M603 0h-172c-18 0 -32 14 -32 32v330h-288c-18 0 -32 14 -32 32v103c0 18 14 32 32 32h288v85h-288c-18 0 -32 14 -32 32v104c0 17 14 32 32 32h214l-321 578c-5 10 -5 22 0 32c6 10 17 16 28 16h194c12 0 23 -7 29 -18l215 -425c24 -47 40 -87 56 -125
+c17 43 39 85 58 129l191 420c5 12 17 19 29 19h191c11 0 21 -6 27 -16c6 -9 6 -21 1 -31l-313 -579h215c18 0 32 -15 32 -32v-104c0 -18 -14 -32 -32 -32h-290v-85h290c18 0 32 -14 32 -32v-103c0 -18 -14 -32 -32 -32h-290v-330c0 -18 -15 -32 -32 -32z" />
+ <glyph glyph-name="jsfiddle" unicode="&#xf1cc;" horiz-adv-x="2048"
+d="M1800 764c145 -60 248 -202 248 -367c0 -219 -181 -397 -403 -397c-8 0 -15 1 -22 1h-1217c-224 13 -406 184 -406 406c0 149 81 279 202 350c-8 26 -12 53 -12 82c0 153 125 277 281 277c64 0 124 -22 172 -58c98 202 306 342 549 342c337 0 609 -269 609 -600
+c0 -12 -1 -24 -1 -36zM468 498c0 -169 133 -264 292 -264c98 0 169 31 240 99c-29 36 -61 71 -91 107c-41 -40 -86 -65 -144 -65c-71 0 -132 47 -132 121c0 73 61 121 130 121c220 0 267 -384 587 -384c156 0 288 98 288 262c0 166 -133 263 -291 263
+c-98 0 -171 -28 -241 -97c32 -35 62 -72 93 -108c40 39 85 64 142 64c66 0 132 -47 132 -117c0 -77 -56 -126 -131 -126c-213 0 -270 384 -582 384c-155 0 -292 -95 -292 -260z" />
+ <glyph glyph-name="julia" unicode="&#xf334;" horiz-adv-x="2304"
+d="M1760 1536c75 0 135 -60 135 -135s-60 -136 -135 -136v0c-75 0 -136 61 -136 136s61 135 136 135zM346 1258v0c75 0 135 -60 135 -135v0c0 -75 -60 -135 -135 -135v0c-75 0 -135 60 -135 135s60 135 135 135zM1598 1258c75 0 135 -60 135 -135s-60 -135 -135 -135v0v0
+c-75 0 -136 60 -136 135s61 135 136 135v0zM1922 1258v0c75 0 135 -60 135 -135s-60 -135 -135 -135s-136 60 -136 135s61 135 136 135v0zM1405 1250v-976h-198v920zM448 950v-676c0 -58 -6 -105 -19 -141s-32 -63 -56 -83s-53 -33 -87 -40s-72 -10 -113 -10
+c-56 0 -98 9 -128 26s-45 39 -45 63c0 20 8 38 25 52s39 21 67 21c21 0 37 -6 50 -17s23 -23 31 -34c9 -12 18 -20 24 -24s12 -7 17 -7c11 0 19 7 25 20s9 39 9 77v718zM1684 950v-676h-200v621zM2033 946c47 0 88 -4 122 -12s62 -21 84 -37s39 -34 49 -56s16 -48 16 -75
+v-492h-200v53c-11 -9 -22 -18 -32 -26s-23 -15 -36 -21s-28 -10 -44 -13s-36 -5 -58 -5c-30 0 -57 4 -81 13s-45 21 -62 36s-30 33 -39 54s-13 44 -13 68c0 25 4 48 14 68s22 39 39 55s36 30 58 43s47 25 72 36s52 21 79 30c22 7 58 18 81 25l22 6v64c0 42 -8 72 -24 89
+s-37 27 -64 27c-31 0 -54 -8 -66 -23s-18 -33 -18 -55c0 -12 -1 -24 -4 -36s-8 -22 -14 -31s-15 -16 -27 -21s-27 -7 -45 -7c-28 0 -51 8 -68 24s-27 36 -27 60c0 23 9 44 24 64s36 36 62 50s57 25 91 33s71 12 109 12zM527 931v0h199v-463c0 -13 3 -25 8 -36s11 -21 20 -29
+s19 -15 31 -20s24 -7 37 -7c15 0 34 8 54 23s38 35 53 58v474h199v-657h-199v62c-26 -22 -54 -41 -84 -54s-58 -20 -86 -20c-33 0 -63 5 -91 16s-53 25 -74 44s-37 41 -49 66s-18 51 -18 80v463zM2104 613c-19 -8 -38 -17 -58 -28s-38 -22 -54 -35s-28 -26 -38 -41
+s-15 -30 -15 -46c0 -12 2 -24 5 -35s7 -22 13 -30s12 -14 19 -19s15 -8 23 -8c16 0 32 5 49 15s36 23 56 38v189z" />
+ <glyph glyph-name="jupyter" unicode="&#xf335;" horiz-adv-x="1473"
+d="M1236 1536v0c14 1 27 -1 40 -5s25 -11 35 -19s18 -17 24 -28s9 -23 10 -35c1 -18 -4 -37 -14 -53s-26 -28 -45 -36s-40 -12 -60 -9s-40 11 -55 23s-26 29 -31 47s-4 37 3 54s19 32 36 43s36 17 57 18zM737 1407c141 0 278 -38 393 -110s203 -173 252 -290
+c-126 130 -369 219 -645 219c-278 0 -519 -88 -645 -219c49 117 137 218 252 290s252 110 393 110zM126 1390v0c6 0 16 -2 22 -4c14 -5 26 -12 35 -23s13 -24 14 -37c1 -18 -7 -36 -21 -49s-32 -20 -52 -21v0c-15 0 -30 3 -43 10s-22 18 -28 30s-8 25 -6 38s9 25 19 35
+s23 17 38 20c5 1 13 1 18 1h4zM1008 957v-57h59v-28h-59v-108c0 -25 7 -38 30 -38c8 0 16 0 24 2l2 -27c-12 -4 -25 -5 -37 -5c-8 0 -16 0 -24 3s-14 7 -20 12c-13 15 -18 34 -16 52v109h-35v28h36v48zM1461 904v0c2 0 4 1 6 1s4 -1 6 -1v-34c-2 0 -5 1 -7 1s-5 -1 -7 -1
+c-14 0 -28 -5 -38 -14s-16 -20 -17 -32c-1 -5 -2 -12 -2 -17v-107h-41v137h2c0 24 0 44 -2 63h37v-39h2c4 12 11 22 22 30s25 12 39 13zM563 904v0c55 0 95 -40 95 -101c0 -72 -50 -108 -103 -108c-14 -1 -27 2 -39 8s-22 14 -30 24v-109h-41v216c0 25 0 46 -2 65h37l2 -34
+c8 12 20 23 34 30s31 10 47 9zM1208 903v0c74 0 92 -57 92 -94v-17h-158c-1 -9 2 -18 5 -26c4 -9 9 -16 16 -23s16 -12 26 -15s21 -5 31 -4c21 0 42 3 61 10l8 -27c-24 -9 -50 -13 -76 -12c-15 -1 -30 1 -44 6s-26 11 -37 21s-19 21 -24 34s-7 27 -6 40c0 60 40 107 106 107
+zM60 901h41v-181c2 -15 1 -29 -4 -43s-13 -28 -23 -39c-19 -15 -44 -23 -70 -23l-4 28c17 0 33 5 45 15c11 11 15 27 15 75v168zM327 901h41v-145l-1 -2c0 -21 0 -38 2 -54h-36l-3 32c-8 -12 -19 -20 -32 -27s-28 -10 -43 -10c-36 0 -78 18 -78 88v116h42v-109
+c0 -38 13 -63 50 -63c8 0 15 0 22 3s14 7 19 12s10 10 13 16s4 13 4 20v123zM686 900h45h1l49 -118c5 -13 11 -29 15 -41c4 12 8 28 14 42l45 117h43l-61 -143c-31 -68 -50 -104 -78 -125c-14 -12 -31 -19 -50 -23l-10 31c13 4 25 9 36 17c15 11 26 25 34 41c1 2 4 6 4 9
+s-2 6 -3 9zM1206 880v0c-17 -1 -33 -8 -45 -19s-18 -25 -18 -40h120c1 7 0 14 -2 21s-7 14 -12 20s-11 10 -19 13s-16 5 -24 5zM551 875v0c-17 -1 -34 -8 -46 -19s-18 -26 -19 -41v-34c0 -5 1 -10 2 -15c3 -12 11 -22 22 -30s25 -12 39 -12c43 0 69 31 69 77
+c0 40 -24 74 -67 74zM92 597c126 -130 369 -219 645 -219c278 0 520 89 645 219c-49 -117 -137 -218 -252 -290s-252 -110 -393 -110s-278 38 -393 110s-203 173 -252 290zM220 233c17 1 34 -1 50 -6s31 -13 44 -23s23 -22 30 -36s12 -29 13 -44c2 -23 -5 -46 -18 -66
+s-33 -36 -56 -46s-50 -14 -76 -11s-50 13 -69 29s-33 36 -39 58s-6 46 3 68s25 41 46 55s46 21 72 22z" />
+ <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1683"
+d="M832 1024c0 106 -86 192 -192 192s-192 -86 -192 -192c0 -29 7 -57 19 -83c-26 12 -54 19 -83 19c-106 0 -192 -86 -192 -192s86 -192 192 -192s192 86 192 192c0 29 -7 57 -19 83c26 -12 54 -19 83 -19c106 0 192 86 192 192zM1683 320c0 -23 -92 -115 -115 -115
+c-26 0 -107 94 -128 115l-96 -96l220 -220c18 -18 28 -43 28 -68c0 -56 -64 -120 -120 -120c-25 0 -50 10 -68 28l-671 671c-105 -78 -233 -131 -365 -131c-218 0 -368 151 -368 368c0 328 328 656 656 656c217 0 368 -150 368 -368c0 -132 -53 -260 -131 -365l355 -355
+l96 96c-21 21 -115 102 -115 128c0 23 92 115 115 115c8 0 17 -4 23 -10c37 -37 316 -300 316 -329z" />
+ <glyph glyph-name="key-modern" unicode="&#xf2f7;" horiz-adv-x="1792"
+d="M546 1536v0c139 1 278 -52 383 -158c142 -141 187 -343 137 -525l726 -726v-319c0 -35 -29 -64 -64 -64h-300l-45 45l135 226l-46 45l-225 -135l-45 46l134 225l-45 45l-225 -134l-46 45l135 225l-45 46l-243 -139l-186 186c-182 -50 -382 -5 -524 136
+c-211 212 -209 556 4 770c107 106 246 159 385 160zM405 1290v0c-41 0 -82 -16 -113 -47c-63 -63 -63 -163 0 -226s164 -63 227 0s63 163 0 226c-31 31 -73 47 -114 47z" />
<glyph glyph-name="keybase" unicode="&#xf2f4;" horiz-adv-x="1547"
d="M146 -80c-13 28 -30 67 -39 87l-13 38l-44 -49l-44 -48l-4 92c-7 131 4 267 26 363c50 214 208 408 411 511l45 21l-10 33c-7 17 -14 55 -16 79l-4 46l-46 4c-70 7 -107 26 -131 76c-13 26 -13 31 -9 101c4 92 12 111 40 142c35 39 59 45 146 41c63 -4 77 -6 105 -19
c17 -9 33 -18 35 -18s22 24 46 57l41 59l26 -15c15 -9 33 -20 42 -24l15 -9l-13 -33c-7 -17 -16 -48 -18 -63l-4 -31l37 -4c133 -13 234 -94 271 -216c11 -39 11 -116 0 -153c-11 -35 -11 -37 -2 -37c15 0 118 -51 159 -77c81 -52 175 -143 227 -222
@@ -1249,376 +1707,92 @@ c2 0 9 -6 16 -15c11 -17 30 -17 39 -2c7 11 7 13 -122 170c-76 94 -92 110 -103 110c
c7 -13 18 -8 55 20zM679 920c13 39 56 70 100 70c24 0 59 -20 83 -46l22 -26l20 24c55 61 61 147 17 221c-33 55 -94 87 -179 96c-46 4 -57 8 -81 32l-17 18l-9 -13c-17 -26 -54 -111 -65 -144c-15 -50 -9 -129 11 -168c20 -37 72 -88 87 -81c2 -2 7 6 11 17zM484 1217
c4 11 16 39 27 61s19 44 19 51c0 20 -21 28 -80 32c-52 4 -57 3 -68 -8c-9 -9 -13 -20 -13 -35c0 -13 -3 -37 -5 -57c-4 -46 2 -54 48 -61c68 -4 65 -5 72 17zM417 1270c0 37 4 41 35 41h28v-61h-61v20h-2zM554 -4c-13 13 -17 22 -17 44c0 41 24 66 63 66
c37 0 64 -27 64 -64c0 -39 -25 -61 -66 -63c-22 0 -31 4 -44 17zM976 -10c-50 39 -24 116 39 116c39 0 61 -25 63 -66c0 -24 -2 -31 -17 -44s-22 -17 -44 -17c-20 0 -32 4 -41 11z" />
- <glyph glyph-name="angle-right" unicode="&#xf105;" horiz-adv-x="582"
-d="M582 576c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 14 -10 23c0 8 4 17 10 23l393 393l-393 393c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" />
- <glyph glyph-name="forumbee" unicode="&#xf211;"
-d="M934 1386c-423 -161 -756 -499 -914 -923c-13 58 -20 117 -20 176c0 423 342 766 765 766c57 0 114 -7 169 -19zM1203 1267c62 -43 117 -95 164 -155c-518 -151 -923 -558 -1071 -1077c-59 46 -112 100 -155 162c149 514 549 918 1062 1070zM470 -67
-c154 475 526 849 999 1006c27 -62 45 -128 54 -195c-390 -160 -700 -472 -859 -863c-67 9 -132 26 -194 52zM1536 -125c-124 32 -247 70 -367 115c-88 -55 -187 -92 -290 -107c146 273 371 499 643 646c-14 -100 -49 -198 -101 -284c45 -121 83 -245 115 -370z" />
- <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538"
-d="M14 557l710 710c25 25 65 25 90 0l710 -710c25 -25 16 -45 -19 -45h-1472c-35 0 -44 20 -19 45zM1473 0h-1408c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1408c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64z" />
- <glyph glyph-name="mobile" unicode="&#xf10b;" horiz-adv-x="768"
-d="M464 128c0 44 -36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80s80 36 80 80zM672 288v704c0 17 -15 32 -32 32h-512c-17 0 -32 -15 -32 -32v-704c0 -17 15 -32 32 -32h512c17 0 32 15 32 32zM480 1136c0 9 -7 16 -16 16h-160c-9 0 -16 -7 -16 -16s7 -16 16 -16h160
-c9 0 16 7 16 16zM768 1152v-1024c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v1024c0 70 58 128 128 128h512c70 0 128 -58 128 -128z" />
- <glyph glyph-name="hourglass-end" unicode="&#xf253;"
-d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64
-c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM874 700c202 76 406 343 406 708h-1024c0 -365 204 -632 406 -708c25 -9 42 -33 42 -60s-17 -51 -42 -60c-86 -32 -173 -100 -244 -196h700c-71 96 -158 164 -244 196c-25 9 -42 33 -42 60
-s17 51 42 60z" />
- <glyph glyph-name="trash-o" unicode="&#xf014;" horiz-adv-x="1408"
-d="M512 800v-576c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM768 800v-576c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1024 800v-576c0 -18 -14 -32 -32 -32h-64
-c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1152 76v948h-896v-948c0 -48 27 -76 32 -76h832c5 0 32 28 32 76zM480 1152h448l-48 117c-3 4 -12 10 -17 11h-317c-6 -1 -14 -7 -17 -11zM1408 1120v-64c0 -18 -14 -32 -32 -32h-96v-948
-c0 -110 -72 -204 -160 -204h-832c-88 0 -160 90 -160 200v952h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h309l70 167c20 49 80 89 133 89h320c53 0 113 -40 133 -89l70 -167h309c18 0 32 -14 32 -32z" />
- <glyph glyph-name="star-o" unicode="&#xf006;" horiz-adv-x="1664"
-d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889c0 -18 -13 -35 -26 -48l-363 -354l86 -500c1 -7 1 -13 1 -20c0 -27 -12 -50 -41 -50c-14 0 -28 5 -40 12l-449 236l-449 -236c-13 -7 -26 -12 -40 -12
-c-29 0 -42 24 -42 50c0 7 1 13 2 20l86 500l-364 354c-12 13 -25 30 -25 48c0 30 31 42 56 46l502 73l225 455c9 19 26 41 49 41s40 -22 49 -41l225 -455l502 -73c24 -4 56 -16 56 -46z" />
- <glyph glyph-name="floppy-o" unicode="&#xf0c7;"
-d="M384 0h768v384h-768v-384zM1280 0h128v896c0 19 -17 60 -30 73l-281 281c-14 14 -53 30 -73 30v-416c0 -53 -43 -96 -96 -96h-576c-53 0 -96 43 -96 96v416h-128v-1280h128v416c0 53 43 96 96 96h832c53 0 96 -43 96 -96v-416zM896 928v320c0 17 -15 32 -32 32h-192
-c-17 0 -32 -15 -32 -32v-320c0 -17 15 -32 32 -32h192c17 0 32 15 32 32zM1536 896v-928c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h928c53 0 126 -30 164 -68l280 -280c38 -38 68 -111 68 -164z" />
- <glyph glyph-name="file-powerpoint-o" unicode="&#xf1c4;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280zM416 106h92v555h-92v107h368c46 0 92 -4 130 -19c83 -35 137 -119 137 -228s-56 -202 -146 -233c-36 -13 -75 -15 -118 -15h-137v-167h93v-106h-327v106zM769 386c31 0 57 5 78 15c42 21 62 64 62 120c0 53 -20 94 -56 115c-21 12 -48 18 -83 18h-120v-268
-h119z" />
- <glyph glyph-name="cc-discover" unicode="&#xf1f2;" horiz-adv-x="2304"
-d="M313 759c0 -32 -13 -63 -36 -84c-20 -18 -47 -26 -89 -26h-17v220h17c42 0 68 -7 89 -27c23 -20 36 -51 36 -83zM2089 824c0 -34 -22 -52 -64 -52h-19v101h20c41 0 63 -17 63 -49zM380 759c0 98 -73 167 -179 167h-95v-333h95c50 0 87 11 119 38c38 32 60 79 60 128z
-M410 593h65v333h-65v-333zM730 694c0 53 -22 77 -96 104c-39 14 -50 24 -50 42c0 21 20 37 48 37c20 0 36 -8 53 -27l34 44c-28 25 -62 37 -98 37c-59 0 -104 -41 -104 -95c0 -46 21 -70 82 -92c25 -9 38 -14 45 -19c13 -8 19 -20 19 -34c0 -27 -21 -47 -50 -47
-c-31 0 -56 15 -71 44l-42 -40c30 -44 66 -64 115 -64c68 0 115 45 115 110zM1008 604v77c-26 -26 -49 -37 -78 -37c-66 0 -112 48 -112 115c0 64 48 115 109 115c31 0 54 -11 81 -38v77c-28 14 -52 20 -80 20c-98 0 -177 -77 -177 -174c0 -98 77 -174 176 -174
-c28 0 52 5 81 19zM2240 0v527c-160 -100 -723 -420 -1633 -591h1569c35 0 64 29 64 64zM1389 757c0 100 -81 181 -181 181s-181 -81 -181 -181s81 -181 181 -181s181 81 181 181zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56
-h-115v74h119v57h-184v-333zM2105 593h80l-105 140c49 10 76 43 76 94c0 63 -43 99 -118 99h-97v-333h65v133h9zM2304 1274v-1268c0 -74 -59 -134 -132 -134h-2040c-73 0 -132 60 -132 134v1268c0 74 59 134 132 134h2040c73 0 132 -60 132 -134z" />
- <glyph glyph-name="bomb" unicode="&#xf1e2;" horiz-adv-x="1792"
-d="M571 947c-13 33 -50 48 -83 35c-144 -58 -260 -174 -318 -318c-13 -33 2 -70 35 -83c8 -3 16 -5 24 -5c26 0 49 15 60 40c45 112 135 202 247 247c33 14 49 51 35 84zM1513 1303l46 -46l-244 -243l68 -68c25 -25 25 -66 0 -91l-64 -64c56 -101 89 -218 89 -343
-c0 -389 -315 -704 -704 -704s-704 315 -704 704s315 704 704 704c125 0 242 -33 343 -89l64 64c25 25 66 25 91 0l68 -68zM1521 1359c-6 -6 -14 -10 -22 -10c-9 0 -17 4 -23 10l-91 90c-12 13 -12 33 0 46c13 12 33 12 46 0l90 -91c13 -12 13 -33 0 -45zM1751 1129
-c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-90 91c-13 12 -13 33 0 45c12 13 33 13 45 0l91 -90c12 -13 12 -33 0 -46zM1792 1312c0 -18 -14 -32 -32 -32h-96c-18 0 -32 14 -32 32s14 32 32 32h96c18 0 32 -14 32 -32zM1600 1504v-96c0 -18 -14 -32 -32 -32s-32 14 -32 32v96
-c0 18 14 32 32 32s32 -14 32 -32zM1751 1449l-91 -90c-6 -6 -14 -10 -22 -10c-9 0 -17 4 -23 10c-13 12 -13 33 0 45l90 91c13 12 33 12 46 0c12 -13 12 -33 0 -46z" />
- <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792"
-d="M666 1055c-56 -86 -97 -179 -137 -273c-58 121 -122 242 -273 242h-224c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h224c178 0 309 -83 410 -225zM1792 256c0 -8 -3 -17 -9 -23l-320 -320c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v192c-297 0 -480 -35 -665 225
-c55 86 96 179 136 273c58 -121 122 -242 273 -242h256v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23zM1792 1152c0 -8 -3 -17 -9 -23l-320 -320c-6 -6 -15 -9 -23 -9c-17 0 -32 14 -32 32v192h-256c-133 0 -196 -91 -252 -199
-c-29 -56 -54 -114 -78 -171c-111 -258 -241 -526 -566 -526h-224c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h224c133 0 196 91 252 199c29 56 54 114 78 171c111 258 241 526 566 526h256v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23z" />
- <glyph glyph-name="fire-extinguisher" unicode="&#xf134;" horiz-adv-x="1408"
-d="M512 1344c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 1376v-320c0 -10 -4 -19 -12 -25c-6 -5 -13 -7 -20 -7c-2 0 -4 0 -7 1l-448 96c-14 3 -25 16 -25 31h-256v-102c146 -30 256 -159 256 -314v-800c0 -35 -29 -64 -64 -64h-512
-c-35 0 -64 29 -64 64v800c0 143 94 265 224 305v111h-32c-212 0 -326 -219 -327 -221c-11 -22 -34 -35 -57 -35c-10 0 -20 2 -29 7c-31 16 -44 54 -28 86c5 10 105 204 306 269c-15 25 -25 54 -25 86c0 88 72 160 160 160s160 -72 160 -160c0 -23 -5 -44 -14 -64h302
-c0 15 11 28 25 31l448 96c3 1 5 1 7 1c7 0 14 -2 20 -7c8 -6 12 -15 12 -25z" />
- <glyph glyph-name="gnu-social" unicode="&#xf2e7;" horiz-adv-x="1513"
-d="M218 1404v0h1077c121 0 218 -97 218 -218v-873c0 -121 -97 -218 -218 -218h-118c-80 -349 -645 -351 -645 -351s334 104 335 351h-649c-121 0 -218 97 -218 218v873c0 121 97 218 218 218zM532 1229c-35 -5 -114 -89 -114 -150c0 -49 -3 -127 70 -167
-c-69 -67 -82 -163 -81 -247c2 -154 67 -382 357 -397s352 214 352 360h-305l50 -134l89 5s17 -107 -174 -100c-122 5 -200 68 -200 249s22 211 193 218s203 -139 203 -139l142 -3s-11 107 -93 188c73 40 72 118 69 167c-2 47 -102 169 -125 148s39 -41 34 -143
-c-2 -45 11 -79 -75 -79c-57 0 -33 51 -105 51c-43 0 -59 -28 -65 -50c-6 22 -21 50 -64 50c-72 0 -49 -51 -106 -51c-86 0 -72 34 -74 79c-5 102 56 122 33 143c-1 1 -3 2 -5 2h-6z" />
- <glyph glyph-name="pencil-square" unicode="&#xf14b;"
-d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818c8 -7 6 -21 -3 -30l-291 -291c-9 -9 -23 -11 -30 -3c-8 7 -6 21 3 30l291 291c9 9 23 11 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92c37 37 37 99 0 136l-152 152c-37 37 -99 37 -136 0
-l-92 -92zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="reddit-square" unicode="&#xf1a2;"
-d="M939 407c7 -7 7 -19 0 -26c-49 -49 -143 -53 -171 -53s-122 4 -171 53c-7 7 -7 19 0 26c7 8 19 8 26 0c31 -31 98 -42 145 -42s114 11 145 42c7 8 19 8 26 0zM676 563c0 -42 -35 -77 -77 -77s-77 35 -77 77c0 43 35 77 77 77s77 -34 77 -77zM1014 563
-c0 -42 -35 -77 -77 -77s-77 35 -77 77c0 43 35 77 77 77s77 -34 77 -77zM1229 666c0 56 -46 102 -103 102c-28 0 -54 -12 -73 -31c-70 48 -164 79 -267 82l54 243l171 -39c1 -42 35 -76 77 -76s77 35 77 77s-35 77 -77 77c-30 0 -56 -17 -69 -43l-189 42
-c-10 3 -19 -4 -21 -13l-60 -268c-103 -4 -196 -35 -265 -83c-19 20 -45 32 -74 32c-57 0 -103 -46 -103 -102c0 -41 24 -76 58 -93c-3 -15 -5 -32 -5 -48c0 -163 183 -295 409 -295s410 132 410 295c0 17 -2 33 -6 49c33 17 56 52 56 92zM1536 1120v-960
-c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="arrow-circle-o-down" unicode="&#xf01a;"
-d="M1120 608c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v352c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-352h192c18 0 32 -14 32 -32zM768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544
-s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="caret-left" unicode="&#xf0d9;" horiz-adv-x="576"
-d="M576 1088v-896c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-448 448c-12 12 -19 28 -19 45s7 33 19 45l448 448c12 12 28 19 45 19c35 0 64 -29 64 -64z" />
- <glyph glyph-name="camera-retro" unicode="&#xf083;" horiz-adv-x="1792"
-d="M928 704c0 18 -14 32 -32 32c-88 0 -160 -72 -160 -160c0 -18 14 -32 32 -32s32 14 32 32c0 53 43 96 96 96c18 0 32 14 32 32zM1152 574c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM128 0h1536v128h-1536v-128zM1280 574
-c0 212 -172 384 -384 384s-384 -172 -384 -384s172 -384 384 -384s384 172 384 384zM256 1216h384v128h-384v-128zM128 1024h1536v256h-828l-64 -128h-644v-128zM1792 1280v-1280c0 -71 -57 -128 -128 -128h-1536c-71 0 -128 57 -128 128v1280c0 71 57 128 128 128h1536
-c71 0 128 -57 128 -128z" />
- <glyph glyph-name="thumbs-o-up" unicode="&#xf087;"
-d="M256 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 768c0 68 -61 128 -128 128h-352c0 117 96 202 96 320c0 117 -23 192 -160 192c-64 -65 -31 -218 -128 -320c-28 -29 -52 -60 -77 -91c-45 -58 -164 -229 -243 -229h-32v-640h32
-c56 0 148 -36 202 -55c110 -38 224 -73 342 -73h121c113 0 192 45 192 167c0 19 -2 38 -5 56c42 23 65 80 65 126c0 24 -6 48 -18 69c34 32 53 72 53 119c0 32 -14 79 -35 103c47 1 75 91 75 128zM1536 769c0 -58 -17 -115 -49 -163c6 -22 9 -46 9 -69
-c0 -50 -13 -100 -38 -144c2 -14 3 -29 3 -43c0 -64 -21 -128 -60 -178c2 -189 -127 -300 -312 -300h-129c-142 0 -274 42 -406 88c-29 10 -110 40 -138 40h-288c-71 0 -128 57 -128 128v640c0 71 57 128 128 128h274c39 26 107 116 137 155c34 44 69 87 107 128
-c60 64 28 222 128 320c24 23 56 37 90 37c104 0 204 -37 253 -134c31 -61 35 -119 35 -186c0 -70 -18 -130 -48 -192h176c138 0 256 -117 256 -255z" />
- <glyph glyph-name="product-hunt" unicode="&#xf288;" horiz-adv-x="1792"
-d="M1150 774c0 -74 -60 -134 -135 -134h-253v269h253c75 0 135 -60 135 -135zM1329 774c0 174 -140 314 -314 314h-433v-896h180v269h253c174 0 314 140 314 313zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
- <glyph glyph-name="etsy" unicode="&#xf2d7;"
-d="M518 1353v-655c232 -2 354 10 354 10c94 3 108 27 130 119l33 142h103l-14 -322l7 -319h-103l-29 127c-21 95 -62 118 -129 119c0 0 -86 8 -352 8v-556c0 -104 57 -153 177 -153h357c120 0 228 12 302 183l93 216h89c-7 -43 -55 -440 -62 -528c-329 12 -470 12 -470 12
-h-628l-376 -12v102l127 25c89 17 116 43 117 116c6 242 8 643 8 643s3 402 -8 645c-3 83 -28 103 -117 120l-127 24v102l376 -12h702s139 0 374 27c-14 -153 -31 -506 -31 -506h-93l-32 124c-39 155 -91 238 -187 238h-548c-41 0 -43 -14 -43 -39z" />
- <glyph glyph-name="copyright" unicode="&#xf1f9;"
-d="M1150 462v-109c0 -141 -225 -193 -366 -193c-274 0 -480 209 -480 485c0 271 204 475 475 475c99 0 358 -35 358 -194v-109c0 -9 -7 -16 -16 -16h-118c-9 0 -16 7 -16 16v70c0 63 -121 92 -203 92c-187 0 -317 -135 -317 -329c0 -201 136 -348 325 -348
-c72 0 208 27 208 90v70c0 9 7 16 15 16h119c8 0 16 -7 16 -16zM768 1280c-353 0 -640 -287 -640 -640s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1651"
-d="M572 553l-466 -466c-13 -13 -33 -13 -46 0l-50 50c-13 13 -13 33 0 46l393 393l-393 393c-13 13 -13 33 0 46l50 50c13 13 33 13 46 0l466 -466c13 -13 13 -33 0 -46zM1651 96v-64c0 -18 -14 -32 -32 -32h-960c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h960
-c18 0 32 -14 32 -32z" />
- <glyph glyph-name="twitter-square" unicode="&#xf081;"
-d="M1280 926c-38 -17 -78 -28 -121 -34c44 26 77 68 93 117c-41 -24 -86 -42 -134 -51c-38 41 -93 66 -153 66c-116 0 -210 -94 -210 -210c0 -16 1 -33 5 -48c-175 9 -330 92 -434 220c-18 -31 -29 -68 -29 -106c0 -73 34 -137 91 -175c-35 1 -68 11 -100 26v-2
-c0 -102 77 -187 173 -206c-18 -5 -32 -8 -51 -8c-13 0 -26 2 -39 4c27 -83 104 -144 196 -146c-72 -56 -162 -90 -261 -90c-17 0 -34 1 -50 3c93 -59 203 -94 322 -94c386 0 598 320 598 598c0 9 0 18 -1 27c41 29 77 66 105 109zM1536 1120v-960
-c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="shopping-bag" unicode="&#xf290;" horiz-adv-x="1793"
-d="M1757 128l35 -313c2 -18 -4 -36 -16 -50c-12 -13 -30 -21 -48 -21h-1664c-18 0 -36 8 -48 21c-12 14 -18 32 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775c4 32 31 57 64 57h256v-128c0 -71 57 -128 128 -128s128 57 128 128v128h384v-128c0 -71 57 -128 128 -128
-s128 57 128 128v128h256c33 0 60 -25 64 -57zM1280 1152v-256c0 -35 -29 -64 -64 -64s-64 29 -64 64v256c0 141 -115 256 -256 256s-256 -115 -256 -256v-256c0 -35 -29 -64 -64 -64s-64 29 -64 64v256c0 212 172 384 384 384s384 -172 384 -384z" />
- <glyph glyph-name="stop-circle" unicode="&#xf28d;"
-d="M1088 352v576c0 18 -14 32 -32 32h-576c-18 0 -32 -14 -32 -32v-576c0 -18 14 -32 32 -32h576c18 0 32 14 32 32zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="telegram" unicode="&#xf2c6;" horiz-adv-x="1792"
-d="M1189 229l147 693c13 61 -22 85 -62 70l-864 -333c-59 -23 -58 -56 -10 -71l221 -69l513 323c24 16 46 7 28 -9l-415 -375l-16 -228c23 0 33 10 45 22l108 104l224 -165c41 -23 70 -11 81 38zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896
-s896 -401 896 -896z" />
- <glyph glyph-name="circle" unicode="&#xf111;"
-d="M1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664"
-d="M160 0h608v1152h-640v-1120c0 -17 15 -32 32 -32zM1536 32v1120h-640v-1152h608c17 0 32 15 32 32zM1664 1248v-1216c0 -88 -72 -160 -160 -160h-1344c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1344c88 0 160 -72 160 -160z" />
- <glyph glyph-name="zotero" unicode="&#xf309;" horiz-adv-x="1330"
-d="M662 -127l-662 310v924l662 301l668 -301v-924zM314 152h723v221l-63 78h-275l338 379v218l-63 78h-601l-59 -82v-214h377l-352 -379l-25 -97v-202z" />
- <glyph glyph-name="sign-out" unicode="&#xf08b;" horiz-adv-x="1568"
-d="M640 96c0 -28 13 -96 -32 -96h-320c-159 0 -288 129 -288 288v704c0 159 129 288 288 288h320c17 0 32 -15 32 -32c0 -28 13 -96 -32 -96h-320c-88 0 -160 -72 -160 -160v-704c0 -88 72 -160 160 -160h288c25 0 64 5 64 -32zM1568 640c0 -17 -7 -33 -19 -45l-544 -544
-c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v288h-448c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h448v288c0 35 29 64 64 64c17 0 33 -7 45 -19l544 -544c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="cube" unicode="&#xf1b2;" horiz-adv-x="1664"
-d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768c0 -47 -26 -90 -67 -112l-704 -384c-19 -11 -40 -16 -61 -16s-42 5 -61 16l-704 384c-41 22 -67 65 -67 112v768c0 54 34 102 84 120l704 256c14 5 29 8 44 8s30 -3 44 -8
-l704 -256c50 -18 84 -66 84 -120z" />
- <glyph glyph-name="mars-stroke-v" unicode="&#xf22a;" horiz-adv-x="1152"
-d="M640 892c288 -32 512 -276 512 -572c0 -340 -294 -611 -642 -572c-270 30 -486 253 -508 525c-25 317 207 586 510 619v132h-160c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h160v165l-92 -92c-13 -12 -33 -12 -45 0l-46 46c-12 12 -12 32 0 45l202 201c25 25 65 25 90 0
-l202 -201c12 -13 12 -33 0 -45l-46 -46c-12 -12 -32 -12 -45 0l-92 92v-165h160c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-160v-132zM576 -128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
- <glyph glyph-name="file-text" unicode="&#xf15c;"
-d="M1468 1060c10 -10 19 -22 28 -36h-472v472c14 -9 26 -18 36 -28zM992 896h544v-1056c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h800v-544c0 -53 43 -96 96 -96zM1152 160v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64
-c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM1152 416v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32zM1152 672v64c0 18 -14 32 -32 32h-704c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h704c18 0 32 14 32 32z" />
- <glyph glyph-name="amazon" unicode="&#xf270;" horiz-adv-x="1736"
-d="M1523 60c30 15 53 -8 22 -48s-280 -268 -698 -268s-738 286 -836 404c-27 31 4 45 22 33c293 -178 751 -471 1490 -121zM1730 175c15 -20 0 -108 -26 -172c-26 -63 -64 -107 -85 -124c-22 -18 -38 -11 -26 15s77 186 51 220c-26 33 -148 17 -192 13c-43 -4 -52 -8 -56 1
-c-9 23 87 62 150 70c63 7 164 3 184 -23zM1336 618c0 -110 129 -211 129 -211l-227 -224c-89 84 -156 154 -156 154c-10 10 -18 22 -25 33c-181 -283 -734 -265 -734 173c0 408 483 463 678 470v127c0 27 10 150 -142 150c0 0 -152 0 -217 -198l-294 27
-c0 197 187 417 539 417c351 0 449 -228 449 -329v-589zM664 597c0 -203 337 -251 337 69v162c-135 -4 -337 -42 -337 -231z" />
- <glyph glyph-name="smile-o" unicode="&#xf118;"
-d="M1134 461c-50 -161 -197 -269 -366 -269s-316 108 -366 269c-11 34 8 69 42 80c33 11 69 -8 80 -42c33 -107 132 -179 244 -179s211 72 244 179c11 34 47 53 81 42c33 -11 52 -46 41 -80zM640 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
-s128 -57 128 -128zM1152 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768
-s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="compass" unicode="&#xf14e;"
-d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="address-book" unicode="&#xf2b9;" horiz-adv-x="1664"
-d="M1201 298c0 177 -43 374 -221 374c-55 -32 -130 -87 -212 -87s-157 55 -212 87c-178 0 -221 -197 -221 -374c0 -99 65 -170 145 -170h576c80 0 145 71 145 170zM1028 892c0 144 -117 260 -260 260s-260 -116 -260 -260c0 -143 117 -259 260 -259s260 116 260 259z
-M1664 352v-192c0 -18 -14 -32 -32 -32h-96v-224c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1472c0 88 72 160 160 160h1216c88 0 160 -72 160 -160v-224h96c18 0 32 -14 32 -32v-192c0 -18 -14 -32 -32 -32h-96v-128h96c18 0 32 -14 32 -32v-192
-c0 -18 -14 -32 -32 -32h-96v-128h96c18 0 32 -14 32 -32z" />
- <glyph glyph-name="list-ol" unicode="&#xf0cb;" horiz-adv-x="1777"
-d="M366 -84c0 -110 -86 -172 -190 -172c-63 0 -127 21 -172 66l57 88c27 -25 68 -45 106 -45c35 0 72 17 72 57c0 56 -64 59 -105 56l-26 56c36 46 69 97 112 136v1c-32 0 -65 -2 -97 -2v-53h-106v152h333v-88l-95 -115c67 -16 111 -68 111 -137zM368 543v-159h-362
-c-3 18 -6 36 -6 54c0 185 226 213 226 297c0 34 -21 52 -54 52c-35 0 -64 -30 -81 -58l-85 59c33 69 101 108 177 108c93 0 173 -55 173 -154c0 -148 -217 -181 -220 -259h127v60h105zM1777 224v-192c0 -17 -15 -32 -32 -32h-1216c-18 0 -32 15 -32 32v192c0 18 14 32 32 32
-h1216c17 0 32 -14 32 -32zM369 1123v-99h-335v99h107c0 81 1 162 1 243v12h-2c-11 -22 -31 -37 -50 -54l-71 76l136 127h106v-404h108zM1777 736v-192c0 -17 -15 -32 -32 -32h-1216c-18 0 -32 15 -32 32v192c0 18 14 32 32 32h1216c17 0 32 -14 32 -32zM1777 1248v-192
-c0 -17 -15 -32 -32 -32h-1216c-18 0 -32 15 -32 32v192c0 17 14 32 32 32h1216c17 0 32 -15 32 -32z" />
- <glyph glyph-name="stumbleupon-circle" unicode="&#xf1a3;"
-d="M866 697l90 27v62c0 106 -90 191 -196 191s-196 -84 -196 -190v-283c0 -26 -21 -47 -47 -47s-46 21 -46 47v120h-151v-122c0 -109 88 -196 197 -196c107 0 196 86 196 193v280c0 26 21 47 47 47c25 0 46 -21 46 -47v-54zM1199 502v122h-150v-126c0 -26 -21 -47 -47 -47
-c-25 0 -46 21 -46 47v123l-90 -26l-60 28v-123c0 -107 89 -194 197 -194s196 87 196 196zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="slack" unicode="&#xf198;"
-d="M837 508l-205 69l66 197l205 -68zM979 1344c528 -158 651 -387 493 -915s-387 -651 -915 -493s-651 387 -493 915s387 651 915 493zM1256 671v0c13 41 -9 87 -51 101l-99 34l34 103c13 42 -8 88 -50 101c-47 13 -88 -14 -101 -51l-34 -103l-206 69l35 103
-c13 42 -9 88 -51 101c-47 13 -87 -13 -100 -50l-35 -104c-100 33 -111 39 -126 37c-32 -1 -63 -22 -74 -54c-13 -42 8 -88 50 -101l100 -33l-66 -198c-100 33 -112 39 -127 37c-32 -1 -63 -23 -74 -55c-13 -42 9 -87 51 -100l99 -34l-34 -103c-13 -42 8 -88 50 -101
-s88 9 101 51l34 103l206 -69l-35 -103c-13 -42 9 -88 51 -101s87 8 100 50l35 104l99 -34c42 -13 88 9 101 51s-8 88 -50 101l-100 33l66 198l100 -34c42 -13 88 9 101 51z" />
- <glyph glyph-name="qq" unicode="&#xf1d6;" horiz-adv-x="1756"
-d="M252 730c-7 17 -8 34 -8 52c0 28 18 73 35 94c-1 26 10 79 30 96c0 185 143 418 310 498c103 49 211 66 324 66c88 0 184 -21 266 -55c235 -99 288 -283 338 -518l1 -5c29 -44 55 -96 55 -150c0 -27 -18 -54 -18 -78c0 -2 6 -10 7 -12c86 -127 164 -265 164 -423
-c0 -35 -19 -157 -75 -157c-39 0 -82 95 -96 121c-1 1 -2 1 -3 1l-5 -4c-32 -83 -67 -161 -132 -223c57 -55 149 -50 166 -145c-5 -11 -3 -23 -11 -34c-57 -86 -210 -97 -302 -97c-122 0 -221 32 -336 66c-24 7 -60 3 -86 6c-61 -67 -210 -85 -296 -85c-76 0 -370 5 -370 135
-c0 56 12 72 51 108c31 6 54 23 90 25c5 0 9 1 14 2c1 1 2 1 2 4l-2 3c-69 16 -166 190 -181 262l-5 3c-7 0 -10 -15 -12 -20c-22 -51 -74 -106 -132 -112h-1c-8 0 -5 8 -11 10c-14 33 -23 63 -23 100c0 200 96 348 252 466z" />
- <glyph glyph-name="audio-description" unicode="&#xf29e;" horiz-adv-x="2304"
-d="M504 542h171l-1 265zM1530 641c0 111 -64 193 -197 193h-54v-388h52c125 0 199 91 199 195zM956 1018l1 -756c0 -19 -15 -34 -33 -34h-216c-18 0 -33 15 -33 34v62h-291l-55 -81c-6 -9 -17 -15 -28 -15h-267c-28 0 -44 31 -27 53l556 757c6 9 16 14 27 14h332
-c19 0 34 -15 34 -34zM1783 641c0 -263 -192 -413 -450 -413h-270c-19 0 -34 15 -34 34v756c0 19 15 34 34 34h268c260 0 452 -148 452 -411zM1939 640c0 0 4 -260 -148 -413h-51c136 162 139 414 139 414s2 198 -135 410h43c148 -169 152 -411 152 -411zM2123 640
-c0 0 4 -260 -149 -413h-51c136 162 139 414 139 414s2 198 -134 410h43c148 -169 152 -411 152 -411zM2304 640c0 0 4 -260 -148 -413h-51c135 162 138 414 138 414s2 198 -134 410h43c148 -169 152 -411 152 -411z" />
- <glyph glyph-name="stop-circle-o" unicode="&#xf28e;"
-d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM768 96c300 0 544 244 544 544s-244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544zM480 320c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h576c18 0 32 -14 32 -32v-576
-c0 -18 -14 -32 -32 -32h-576z" />
- <glyph glyph-name="grav" unicode="&#xf2d6;" horiz-adv-x="1794"
-d="M1291 1060c-32 36 -84 -25 -56 -58c27 -33 116 -9 56 58zM895 814c-11 -11 -28 -11 -38 0c-11 10 -11 27 0 37c10 11 27 11 38 0c10 -10 10 -27 0 -37zM1060 740l-35 -35c-16 -17 -43 -17 -60 0l-38 38c-16 17 -16 43 0 60l35 35c16 16 43 16 60 0l38 -39
-c16 -16 16 -43 0 -59zM951 870c-10 -10 -27 -10 -38 0c-10 11 -10 28 0 38c11 11 28 11 38 0c11 -10 11 -27 0 -38zM1354 968c-45 -85 -163 -120 -235 -69c-72 52 -122 156 -43 246c78 90 147 62 216 -3c43 -41 106 -90 62 -174zM1555 486c9 58 -74 60 -92 93
-c-49 87 -100 133 -197 110c42 29 85 22 85 22c1 23 0 47 -34 90c14 45 1 81 1 81c56 31 97 88 105 156c13 112 -68 214 -180 227c-80 9 -158 -28 -196 -93c-84 -145 5 -256 81 -294c-52 5 -124 43 -145 124c-24 93 10 180 32 222c0 0 -16 21 -29 32c0 0 -50 0 -89 -19
-c43 55 91 52 91 52c0 23 -2 54 -13 78c-20 41 -90 47 -117 -15c1 3 2 5 4 7c-18 -43 -4 -202 61 -315c-9 -5 -33 -22 -47 -36c-78 -35 -203 -218 -203 -218c-102 -39 -280 -184 -256 -288c1 -11 5 -20 11 -27c-10 -8 -20 -18 -30 -30c-43 -50 -19 -127 64 -88
-c57 26 108 73 132 110c0 0 -21 18 -60 16c100 24 125 34 168 33c29 -14 29 124 29 124c0 53 -8 112 -40 150c45 -44 105 -118 101 -219c-3 -66 -55 -83 -55 -83c-33 -60 -156 -238 -110 -383c0 0 -35 54 -37 80c-63 -70 -169 -189 -90 -233c96 -53 394 320 457 514
-c125 75 200 171 231 235c80 -159 346 -343 367 -215zM1794 640c0 -495 -402 -896 -897 -896s-897 401 -897 896s402 896 897 896s897 -401 897 -896z" />
- <glyph glyph-name="mars-stroke-h" unicode="&#xf22b;" horiz-adv-x="1919"
-d="M1901 621c25 -25 25 -65 0 -90l-294 -294c-12 -13 -33 -13 -45 0l-45 45c-13 12 -13 33 0 45l185 185h-294v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-132c-32 -288 -276 -512 -572 -512c-340 0 -611 294 -572 642c30 270 253 486 525 508
-c317 25 586 -207 619 -510h132v224c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-224h294l-185 185c-13 12 -13 33 0 45l45 45c12 13 33 13 45 0zM576 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
- <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1020"
-d="M1020 399v-367c0 -18 -14 -32 -32 -32h-956c-18 0 -32 14 -32 32v150c0 17 14 32 32 32h97v383h-95c-18 0 -32 14 -32 32v131c0 18 14 32 32 32h95v223c0 228 184 393 438 393c200 0 329 -120 335 -125c12 -11 13 -30 3 -43l-103 -127c-6 -7 -13 -11 -22 -12
-c-8 -1 -17 2 -23 7c-1 1 -87 69 -188 69c-113 0 -189 -68 -189 -170v-215h305c18 0 32 -14 32 -32v-131c0 -18 -14 -32 -32 -32h-305v-379h414v181c0 18 14 32 32 32h162c18 0 32 -14 32 -32z" />
- <glyph glyph-name="shaarli-o" unicode="&#xf2f6;" horiz-adv-x="1630"
-d="M859 1408v0c107 0 210 -67 264 -160c40 -69 61 -156 75 -252c115 -20 212 -47 288 -96c78 -50 134 -137 140 -229l3 -20c7 -91 -25 -191 -100 -245c-18 -13 -36 -22 -55 -30c11 -19 25 -36 34 -56c37 -84 43 -181 12 -267v-1h-1c-26 -70 -82 -133 -154 -160
-s-147 -24 -224 -5c-9 3 -17 5 -25 10c-94 47 -174 101 -239 162c-25 -34 -53 -66 -86 -91c-75 -57 -168 -84 -266 -84c-31 0 -62 -4 -90 5c-82 25 -155 68 -199 141s-44 164 -20 243l1 3l1 3l21 58c-57 19 -109 45 -151 86c-67 66 -95 165 -86 259h-1c0 1 1 2 1 3v7h1
-c8 100 75 193 165 238c87 43 192 57 317 60c6 109 27 206 84 283c66 89 177 135 290 135zM859 1288c-173 0 -260 -116 -260 -348c12 -37 -17 -59 -88 -67c-255 -1 -386 -66 -391 -196c-18 -141 68 -226 258 -253h19l-67 -186c-36 -117 11 -195 141 -235h53
-c155 0 260 80 314 239h37c58 -90 155 -170 294 -239c126 -31 206 -1 239 90c42 114 -12 238 -162 370c196 -10 285 53 264 190c3 117 -118 194 -360 231h-56c-21 269 -99 404 -235 404zM819 1097v0c3 0 6 0 9 -1c50 1 76 -51 76 -156v-188c22 -23 49 -31 84 -25
-c226 0 335 -27 327 -81c10 -49 -110 -65 -361 -48c-12 0 -14 -15 -6 -43c74 -85 140 -151 198 -200c59 -47 69 -92 31 -133c-32 -22 -74 -5 -127 49c-51 54 -117 122 -197 207c-18 24 -40 24 -67 0c-113 -230 -200 -325 -262 -288c-46 24 -23 105 68 242l54 116
-c12 33 -72 45 -250 36c-51 3 -77 22 -77 58c0 37 24 57 71 58l304 17c31 0 48 27 52 81l4 107c-1 131 22 195 69 192z" />
- <glyph glyph-name="ban" unicode="&#xf05e;"
-d="M1312 643c0 109 -32 210 -87 295l-754 -753c86 -56 188 -89 297 -89c300 0 544 245 544 547zM313 344l755 754c-86 58 -189 91 -300 91c-300 0 -544 -245 -544 -546c0 -111 33 -213 89 -299zM1536 643c0 -426 -344 -771 -768 -771s-768 345 -768 771
-c0 425 344 770 768 770s768 -345 768 -770z" />
- <glyph glyph-name="fighter-jet" unicode="&#xf0fb;" horiz-adv-x="1920"
-d="M1920 576c0 0 0 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69c35 0 64 -7 64 -16s-29 -16 -64 -16h-320v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h320c35 0 64 -7 64 -16
-s-29 -16 -64 -16h-69l293 -352h64l224 -64l352 -32c288 -64 288 -96 288 -96z" />
- <glyph glyph-name="space-shuttle" unicode="&#xf197;" horiz-adv-x="2176"
-d="M620 416c-69 -40 -163 -64 -268 -64h-128v64h-64c-18 0 -32 36 -32 80c0 18 3 35 7 49c-77 2 -135 15 -135 31s58 29 135 31c-4 14 -7 31 -7 49c0 44 14 80 32 80h64v64h128c105 0 199 -24 268 -64h1113c74 -13 141 -24 187 -32c192 -32 256 -96 256 -128
-s-64 -96 -256 -128c-46 -8 -113 -19 -187 -32h-1113zM1739 668c32 -22 53 -55 53 -92s-21 -70 -53 -92l81 -30c41 29 68 73 68 122s-27 93 -68 122zM625 400h1015s-217 -38 -456 -80c-128 0 -224 -96 -224 -96l-288 -288s-97 -64 -160 -64h-96l-93 464h29
-c102 0 199 23 273 64zM352 816h-29l93 464h96c65 0 128 -32 160 -64l288 -288s96 -96 224 -96c239 -42 456 -80 456 -80h-1015c-74 41 -171 64 -273 64z" />
- <glyph glyph-name="steam" unicode="&#xf1b6;" horiz-adv-x="1792"
-d="M1582 954c0 -135 -110 -244 -244 -244c-135 0 -244 109 -244 244s109 244 244 244c134 0 244 -109 244 -244zM812 212c0 139 -111 250 -250 250c-18 0 -36 -2 -54 -6l104 -42c102 -41 152 -156 111 -258s-157 -152 -259 -110c-41 16 -82 33 -123 49
-c42 -79 125 -133 221 -133c139 0 250 111 250 250zM1642 953c0 168 -137 305 -305 305c-169 0 -306 -137 -306 -305c0 -169 137 -305 306 -305c168 0 305 136 305 305zM1792 953c0 -252 -204 -455 -455 -455l-437 -319c-16 -172 -162 -307 -338 -307
-c-162 0 -299 115 -332 268l-230 92v429l389 -157c51 31 110 48 173 48c12 0 24 -1 35 -2l284 407c2 249 206 451 456 451c251 0 455 -204 455 -455z" />
- <glyph glyph-name="bars" unicode="&#xf0c9;"
-d="M1536 192v-128c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1536 704v-128c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1536 1216v-128
-c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="keyboard-o" unicode="&#xf11c;" horiz-adv-x="1920"
+d="M384 368v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM512 624v-96c0 -9 -7 -16 -16 -16h-224c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h224c9 0 16 -7 16 -16zM384 880v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96
+c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1408 368v-96c0 -9 -7 -16 -16 -16h-864c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h864c9 0 16 -7 16 -16zM768 624v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM640 880v-96
+c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1024 624v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM896 880v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96
+c9 0 16 -7 16 -16zM1280 624v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1664 368v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1152 880v-96c0 -9 -7 -16 -16 -16h-96
+c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1408 880v-96c0 -9 -7 -16 -16 -16h-96c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h96c9 0 16 -7 16 -16zM1664 880v-352c0 -9 -7 -16 -16 -16h-224c-9 0 -16 7 -16 16v96c0 9 7 16 16 16h112v240c0 9 7 16 16 16h96
+c9 0 16 -7 16 -16zM1792 128v896h-1664v-896h1664zM1920 1024v-896c0 -71 -57 -128 -128 -128h-1664c-71 0 -128 57 -128 128v896c0 71 57 128 128 128h1664c71 0 128 -57 128 -128z" />
+ <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792"
+d="M514 341l81 299h-159l75 -300c1 -2 1 -4 2 -6c0 2 1 5 1 7zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299c1 -3 1 -5 2 -7c0 2 1 4 1 6zM1382 768l33 128h-297l34 -128h230zM1792 736v-64c0 -18 -14 -32 -32 -32h-213
+l-164 -616c-4 -14 -17 -24 -31 -24h-159c-14 0 -27 10 -31 24l-166 616h-209l-167 -616c-4 -14 -16 -24 -31 -24h-159c-14 0 -27 10 -30 24l-160 616h-208c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h175l-33 128h-142c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h109l-89 344
+c-3 10 -1 20 5 28c6 7 16 12 26 12h137c15 0 28 -10 31 -24l90 -360h359l97 360c4 14 17 24 31 24h126c15 0 27 -10 31 -24l98 -360h365l93 360c3 14 16 24 31 24h137c10 0 20 -5 26 -12c6 -8 8 -19 5 -28l-91 -344h111c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-145
+l-34 -128h179c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="language" unicode="&#xf1ab;"
+d="M654 458c-2 -7 -51 16 -64 21c-13 6 -72 39 -87 49s-72 57 -79 60c-36 -55 -82 -120 -134 -181c-18 -21 -72 -89 -105 -110c-5 -3 -34 -6 -38 -4c16 12 62 69 82 92c25 29 144 195 164 233c21 38 84 164 87 176c-10 1 -89 -26 -110 -33c-20 -6 -75 -19 -79 -22
+c-4 -4 -1 -16 -3 -20s-20 -13 -31 -15c-10 -3 -33 -4 -47 0c-13 3 -25 16 -28 21c0 0 -4 6 -5 23c12 4 32 5 54 11s76 22 105 32s85 31 102 35c18 3 63 33 87 41s41 18 42 13s0 -27 -1 -33c-1 -5 -49 -99 -56 -114c-4 -8 -32 -61 -77 -131c16 -7 50 -21 64 -28
+c17 -8 136 -58 142 -60s17 -48 15 -56zM449 944c3 -17 -2 -24 -4 -28c-10 -19 -35 -32 -50 -38s-40 -12 -60 -12c-9 1 -27 4 -49 26c-12 13 -21 48 -17 44s33 -8 46 -5s44 12 58 16c15 5 45 13 55 14c10 0 18 -4 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032
+l-694 -233v-1031zM1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66c-81 -52 -181 -92 -276 -108c-29 -6 -62 -12 -91 -12h-84c-106 0 -299 63 -383 124c-6 5 -8 9 -8 16c0 11 8 19 18 19
+c9 0 56 -29 69 -35c90 -45 216 -86 317 -86c125 0 210 16 324 65c33 15 62 34 93 51zM1536 1050v-1079c-773 246 -774 246 -774 246c-16 -7 -733 -249 -743 -249c-8 0 -15 5 -18 13c0 1 -1 2 -1 3v1078c1 3 2 8 4 10c6 7 14 9 20 11c3 1 64 21 149 50v384l558 -198
+c7 2 629 217 638 217c11 0 20 -8 20 -21v-418z" />
+ <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920"
+d="M416 256c-88 0 -160 72 -160 160v704c0 88 72 160 160 160h1088c88 0 160 -72 160 -160v-704c0 -88 -72 -160 -160 -160h-1088zM384 1120v-704c0 -17 15 -32 32 -32h1088c17 0 32 15 32 32v704c0 17 -15 32 -32 32h-1088c-17 0 -32 -15 -32 -32zM1760 192h160v-96
+c0 -53 -72 -96 -160 -96h-1600c-88 0 -160 43 -160 96v96h1760zM1040 96c9 0 16 7 16 16s-7 16 -16 16h-160c-9 0 -16 -7 -16 -16s7 -16 16 -16h160z" />
+ <glyph glyph-name="laravel" unicode="&#xf30b;" horiz-adv-x="1870"
+d="M1863 682v0c13 -14 10 -25 -13 -31c-20 -6 -203 -54 -255 -68c76 -101 219 -294 231 -312c17 -25 2 -32 -23 -42s-571 -207 -608 -218c-48 -14 -69 -21 -100 22c-23 33 -149 259 -211 371c-117 -30 -330 -86 -392 -101c-60 -14 -86 22 -96 44s-365 786 -387 839
+c-23 53 2 62 24 64s335 28 376 30s44 -8 62 -34l450 -753l566 136c-31 44 -173 246 -187 265c-15 22 0 32 25 36s242 41 261 44s33 9 63 -27s201 -251 214 -265zM834 472c7 1 10 5 3 18s-422 729 -422 729c-4 7 -3 9 -13 9s-305 -27 -310 -27s-5 -8 0 -18s380 -783 382 -789
+s2 -8 19 -4s334 81 341 82zM1728 304c-5 8 -178 244 -187 258s-13 10 -27 6l-552 -143s169 -293 182 -312s21 -17 31 -13s531 179 547 185s11 11 6 19zM1763 696c13 3 22 7 16 14s-149 189 -159 203s-18 12 -27 10c-8 -2 -196 -36 -208 -38s-8 -8 -3 -15l166 -227
+s202 50 215 53z" />
+ <glyph glyph-name="lastfm" unicode="&#xf202;" horiz-adv-x="1792"
+d="M1292 832c0 -6 8 -34 10 -41c27 -82 90 -99 165 -120c167 -47 325 -136 325 -332c0 -199 -166 -339 -360 -339c-322 0 -422 394 -515 634c-77 198 -158 314 -381 314c-198 0 -372 -190 -372 -385c0 -207 155 -399 370 -399c95 0 194 20 258 95c31 35 61 73 83 116
+l84 -152c-11 -25 -27 -49 -44 -70l1 -1c-101 -117 -239 -152 -388 -152c-302 0 -528 267 -528 561c0 285 248 550 536 550c478 0 502 -414 664 -747c44 -92 119 -200 233 -200c104 0 196 67 196 177c0 238 -437 76 -499 467c-2 11 -3 22 -3 33c0 148 139 275 286 270
+c88 -3 141 -6 211 -68h-1c27 -25 47 -59 68 -88l-129 -99c-15 28 -29 51 -54 70v1c-24 22 -67 21 -97 21c-65 0 -119 -49 -119 -116z" />
+ <glyph glyph-name="lastfm-square" unicode="&#xf203;"
+d="M1432 484c0 141 -114 205 -234 239c-55 15 -100 28 -120 88c-1 5 -6 24 -6 28c0 48 38 83 85 83c22 0 53 1 71 -15h-1c19 -14 28 -30 39 -51l93 71c-15 21 -30 46 -49 64c-47 42 -91 49 -153 49c-105 0 -204 -86 -204 -195c0 -8 1 -15 2 -23c22 -136 91 -178 213 -213
+c60 -17 145 -44 146 -118v-5c1 -80 -66 -128 -141 -128c-82 0 -135 78 -167 144c-116 239 -134 538 -478 538c-207 0 -393 -191 -386 -396v-1c7 -214 154 -403 380 -403c107 0 207 25 279 110c12 16 23 33 31 51l-60 109c-56 -106 -125 -152 -245 -152
+c-158 0 -267 140 -267 291c0 139 128 273 268 273c160 0 218 -83 274 -226c67 -172 139 -456 371 -456c139 0 259 101 259 244zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792"
+d="M1280 832c0 35 -29 64 -64 64c-354 0 -582 -148 -813 -403c-12 -13 -19 -27 -19 -45c0 -35 29 -64 64 -64c18 0 32 7 45 19c49 44 93 92 141 137c181 163 336 228 582 228c35 0 64 29 64 64zM1792 1030c0 -64 -7 -129 -20 -193c-64 -311 -264 -513 -542 -651
+c-135 -68 -286 -108 -438 -108c-96 0 -195 16 -286 47c-48 16 -144 79 -184 79c-50 0 -110 -204 -197 -204c-63 0 -82 31 -109 77c-9 17 -16 23 -16 44c0 104 198 185 198 243c0 9 -26 62 -30 82c-6 34 -9 69 -9 104c0 318 253 545 537 639c205 68 641 -11 780 121
+c55 51 82 98 166 98c113 0 150 -293 150 -378z" />
+ <glyph glyph-name="leanpub" unicode="&#xf212;" horiz-adv-x="2048"
+d="M1893 1144l155 -1272c-93 0 -173 19 -257 57c-125 57 -255 91 -393 91c-142 0 -273 -47 -374 -148c-101 101 -232 148 -374 148c-138 0 -268 -34 -393 -91c-81 -36 -163 -57 -252 -57h-5l155 1272c143 81 317 127 482 127c135 0 274 -28 387 -106c113 78 252 106 387 106
+c165 0 339 -46 482 -127zM1398 157c190 0 320 -51 492 -122l-124 1021c-112 51 -245 78 -368 78c-140 0 -271 -44 -374 -141c-103 97 -234 141 -374 141c-123 0 -256 -27 -368 -78l-124 -1021c172 71 302 122 492 122c137 0 258 -35 374 -108c116 73 237 108 374 108z
+M1438 191l-40 1c-132 3 -261 -32 -374 -102c-113 70 -242 102 -374 102c-166 0 -299 -39 -450 -101l114 941c104 43 224 66 336 66c150 0 269 -48 374 -155c101 103 215 152 359 155z" />
+ <glyph glyph-name="lemon-o" unicode="&#xf094;" horiz-adv-x="1535"
+d="M1407 710c0 47 -9 170 -25 210c-19 48 -30 75 -30 129c0 46 10 91 10 136c0 19 -1 39 -10 55c-4 1 -9 1 -13 1c-39 0 -78 -9 -117 -9c-119 0 -232 48 -351 48c-93 0 -183 -35 -269 -69c-68 -27 -143 -59 -202 -103c-202 -153 -272 -433 -272 -674c0 -81 25 -160 25 -241
+c0 -46 -22 -88 -22 -132c0 -28 16 -51 46 -51c49 0 96 22 146 22c114 0 225 -31 339 -31c89 0 201 7 284 36c263 93 461 397 461 673zM1535 712c0 -333 -231 -684 -547 -796c-99 -35 -222 -44 -326 -44c-114 0 -226 29 -339 29c-48 0 -96 -29 -146 -29
+c-99 0 -174 89 -174 184c0 47 22 89 22 135c0 81 -25 160 -25 242c0 284 87 598 323 777c68 52 153 89 232 120c102 41 205 78 316 78c119 0 232 -48 349 -48c38 0 76 10 115 10c114 0 155 -81 155 -185c0 -45 -10 -91 -10 -136c0 -36 9 -50 21 -82c23 -58 34 -191 34 -255z
+" />
+ <glyph glyph-name="level-down" unicode="&#xf149;" horiz-adv-x="1024"
+d="M32 1280h704c18 0 32 -15 32 -33v-863h192c25 0 47 -15 58 -37c11 -23 7 -50 -9 -69l-320 -384c-24 -29 -74 -29 -98 0l-320 384c-16 19 -19 46 -9 69c11 22 33 37 58 37h192v640h-320c-9 0 -18 4 -25 11l-160 192c-8 9 -9 23 -4 34s17 19 29 19z" />
+ <glyph glyph-name="level-up" unicode="&#xf148;" horiz-adv-x="1024"
+d="M1018 933c-11 -23 -33 -37 -58 -37h-192v-864c0 -18 -14 -32 -32 -32h-704c-12 0 -24 7 -29 18c-5 12 -4 25 4 35l160 192c6 7 16 11 25 11h320v640h-192c-25 0 -47 14 -58 37c-10 22 -7 49 9 68l320 384c24 29 74 29 98 0l320 -384c16 -19 20 -46 9 -68z" />
+ <glyph glyph-name="liberapay" unicode="&#xf2e9;" horiz-adv-x="1191"
+d="M468 1404v0l-222 -918c-4 -19 -6 -37 -7 -53s3 -30 9 -42s18 -23 33 -30s36 -12 64 -14l-48 -196c-75 0 -134 9 -177 29s-74 47 -93 81s-28 73 -27 117s6 91 18 141l203 847zM849 1025v0c60 0 111 -9 154 -27s78 -44 106 -75s49 -68 62 -110s20 -86 20 -134h-1
+c0 -78 -12 -149 -38 -213s-61 -120 -106 -167s-99 -83 -162 -109s-133 -39 -207 -39c-36 0 -72 3 -108 9l-72 -288h-236l265 1103c42 13 91 24 146 34s113 16 177 16zM819 825v0c-34 0 -66 -3 -96 -9l-111 -464c18 -4 40 -7 67 -7c41 0 79 8 113 23s63 37 87 65
+s43 61 56 100s20 81 20 128c0 46 -11 84 -31 116s-55 48 -105 48z" />
+ <glyph glyph-name="liberapay-square" unicode="&#xf2e8;" horiz-adv-x="1533"
+d="M148 1404h1236c82 0 149 -66 149 -148v-1236c0 -82 -67 -148 -149 -148h-1236c-82 0 -148 66 -148 148v1236c0 82 66 148 148 148zM736 1150v0l-161 -25l-133 -553c-8 -33 -12 -64 -12 -93s6 -54 18 -76s32 -40 60 -53s68 -19 117 -19l31 128c-18 1 -32 4 -42 9
+s-18 12 -22 20s-5 17 -5 27s1 23 4 35zM985 902v0c-42 0 -80 -3 -116 -10s-67 -14 -95 -22l-174 -722h155l47 189c24 -4 47 -6 71 -6c49 0 94 8 135 25s76 41 106 72s52 67 69 109s25 88 25 139c0 31 -4 61 -13 88s-22 51 -40 72c-18 20 -41 36 -69 48s-62 18 -101 18z
+M965 772v0c33 0 56 -11 69 -32s20 -46 20 -76c0 -31 -4 -59 -13 -84s-21 -47 -37 -65s-34 -32 -56 -42s-47 -15 -74 -15c-17 0 -32 1 -44 4l73 303c19 4 40 7 62 7z" />
+ <glyph glyph-name="life-ring" unicode="&#xf1cd;" horiz-adv-x="1792"
+d="M896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM896 1408c-130 0 -253 -33 -361 -90l194 -194c53 18 109 28 167 28c59 0 114 -10 167 -28l194 194c-108 57 -231 90 -361 90zM218 279l194 194c-18 53 -28 109 -28 167
+c0 59 10 114 28 167l-194 194c-57 -108 -90 -231 -90 -361s33 -253 90 -361zM896 -128c130 0 253 33 361 90l-194 194c-53 -18 -108 -28 -167 -28c-58 0 -114 10 -167 28l-194 -194c108 -57 231 -90 361 -90zM896 256c212 0 384 172 384 384s-172 384 -384 384
+s-384 -172 -384 -384s172 -384 384 -384zM1380 473l194 -194c57 108 90 231 90 361s-33 253 -90 361l-194 -194c18 -53 28 -109 28 -167s-10 -114 -28 -167z" />
<glyph glyph-name="lightbulb-o" unicode="&#xf0eb;" horiz-adv-x="1024"
d="M736 960c0 -17 -15 -32 -32 -32s-32 15 -32 32c0 69 -107 96 -160 96c-17 0 -32 15 -32 32s15 32 32 32c93 0 224 -49 224 -160zM896 960c0 200 -203 320 -384 320s-384 -120 -384 -320c0 -64 26 -131 68 -180c19 -22 41 -43 61 -66c71 -85 131 -185 141 -298h228
c10 113 70 213 141 298c20 23 42 44 61 66c42 49 68 116 68 180zM1024 960c0 -103 -34 -192 -103 -268s-160 -183 -168 -290c29 -17 47 -49 47 -82c0 -24 -9 -47 -25 -64c16 -17 25 -40 25 -64c0 -33 -17 -63 -45 -81c8 -14 13 -31 13 -47c0 -65 -51 -96 -109 -96
c-26 -58 -84 -96 -147 -96s-121 38 -147 96c-58 0 -109 31 -109 96c0 16 5 33 13 47c-28 18 -45 48 -45 81c0 24 9 47 25 64c-16 17 -25 40 -25 64c0 33 18 65 47 82c-8 107 -99 214 -168 290s-103 165 -103 268c0 272 259 448 512 448s512 -176 512 -448z" />
- <glyph glyph-name="map-pin" unicode="&#xf276;" horiz-adv-x="1024"
-d="M512 448c44 0 87 5 128 15v-655c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v655c41 -10 84 -15 128 -15zM512 1536c283 0 512 -229 512 -512s-229 -512 -512 -512s-512 229 -512 512s229 512 512 512zM512 1312c18 0 32 14 32 32s-14 32 -32 32
-c-194 0 -352 -158 -352 -352c0 -18 14 -32 32 -32s32 14 32 32c0 159 129 288 288 288z" />
- <glyph glyph-name="circle-o" unicode="&#xf10c;"
-d="M768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="contao" unicode="&#xf26d;" horiz-adv-x="1748"
-d="M116 1408h197c-47 -43 -89 -93 -126 -149c-155 -239 -92 -501 -32 -783c49 -229 90 -447 233 -604h-272c-64 0 -116 52 -116 116v1304c0 64 52 116 116 116zM1324 1408h308c64 0 116 -52 116 -116v-1304c0 -64 -52 -116 -116 -116h-178c132 131 207 321 196 565
-l-469 -101c-6 -111 -44 -218 -196 -250c-85 -18 -155 2 -199 40c-54 46 -97 106 -169 448c-73 343 -58 415 -28 479c25 52 81 100 165 118c153 32 231 -51 282 -150l468 100c-46 118 -107 214 -180 287z" />
- <glyph glyph-name="vine" unicode="&#xf1ca;" horiz-adv-x="1458"
-d="M1458 709v-198c-70 -16 -140 -23 -198 -23c-140 -294 -391 -546 -475 -593c-53 -30 -103 -32 -162 3c-103 62 -493 382 -623 1388h283c71 -604 245 -914 436 -1146c106 106 208 247 287 406c-189 96 -304 307 -304 553c0 249 143 437 388 437c238 0 368 -148 368 -403
-c0 -95 -20 -203 -58 -286c0 0 -176 -35 -241 78c13 43 31 117 31 184c0 119 -43 177 -108 177c-69 0 -117 -65 -117 -190c0 -255 162 -401 372 -401c37 0 79 4 121 14z" />
- <glyph glyph-name="align-center" unicode="&#xf037;" horiz-adv-x="1792"
-d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1408 576v-128c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h896c35 0 64 -29 64 -64zM1664 960v-128c0 -35 -29 -64 -64 -64
-h-1408c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1280 1344v-128c0 -35 -29 -64 -64 -64h-640c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h640c35 0 64 -29 64 -64z" />
- <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1202"
-d="M1111 896c13 -133 -43 -213 -131 -258c146 -35 238 -122 220 -317c-23 -243 -203 -308 -461 -322v-255h-154v251c-39 0 -80 0 -122 1v-252h-154v255c-36 0 -72 1 -109 1h-200l31 183c113 -2 111 0 111 0c43 0 55 31 58 51v402h16c-6 1 -12 1 -16 1v287
-c-6 32 -26 68 -89 68c0 0 2 2 -111 0v164l212 -1c31 0 64 0 97 1v252h154v-247c41 1 82 2 122 2v245h154v-252c198 -17 355 -78 372 -260zM896 351c0 198 -326 169 -430 169v-338c104 0 430 -22 430 169zM825 827c0 181 -272 154 -359 154v-307c87 0 359 -20 359 153z" />
- <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664"
-d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
-M512 1088v288c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-288c0 -17 15 -32 32 -32h64c17 0 32 15 32 32zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288c0 17 -15 32 -32 32h-64c-17 0 -32 -15 -32 -32v-288
-c0 -17 15 -32 32 -32h64c17 0 32 15 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128
-c70 0 128 -58 128 -128z" />
- <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920"
-d="M1280 32c0 -17 -15 -32 -32 -32h-960c-37 0 -32 39 -32 64v576h-192c-35 0 -64 29 -64 64c0 15 5 30 15 41l320 384c12 14 30 22 49 22s37 -8 49 -22l320 -384c10 -11 15 -26 15 -41c0 -35 -29 -64 -64 -64h-192v-384h576c9 0 19 -4 25 -11l160 -192c4 -6 7 -14 7 -21z
-M1920 448c0 -15 -5 -30 -15 -41l-320 -384c-12 -14 -30 -23 -49 -23s-37 9 -49 23l-320 384c-10 11 -15 26 -15 41c0 35 29 64 64 64h192v384h-576c-9 0 -19 4 -25 12l-160 192c-4 5 -7 13 -7 20c0 17 15 32 32 32h960c37 0 32 -39 32 -64v-576h192c35 0 64 -29 64 -64z" />
- <glyph glyph-name="hourglass" unicode="&#xf254;"
-d="M1504 -64c18 0 32 -14 32 -32v-128c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v128c0 18 14 32 32 32h1472zM130 0c19 337 294 518 478 640c-184 122 -459 303 -478 640h1276c-19 -337 -294 -518 -478 -640c184 -122 459 -303 478 -640h-1276zM1504 1536
-c18 0 32 -14 32 -32v-128c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v128c0 18 14 32 32 32h1472z" />
- <glyph glyph-name="paint-brush" unicode="&#xf1fc;" horiz-adv-x="1790"
-d="M1615 1536c91 0 175 -68 175 -163c0 -53 -21 -104 -45 -151c-78 -148 -340 -637 -465 -752c-61 -57 -133 -91 -218 -91c-169 0 -307 144 -307 312c0 80 33 158 92 212l638 579c35 32 81 54 130 54zM706 502c52 -101 147 -177 257 -206l1 -71c6 -285 -192 -481 -478 -481
-c-339 0 -486 270 -486 577c37 -25 166 -128 208 -128c25 0 46 14 55 37c85 222 218 262 443 272z" />
- <glyph glyph-name="viadeo-square" unicode="&#xf2aa;"
-d="M1050 495c0 50 -9 100 -28 147c-26 -16 -55 -28 -85 -34c16 -36 22 -75 22 -114c0 -154 -114 -280 -270 -280c-157 0 -271 126 -271 280c0 151 115 284 271 284c34 0 67 -6 98 -19c3 30 13 60 27 87c-40 14 -82 21 -125 21c-207 0 -361 -167 -361 -372s155 -367 361 -367
-s361 163 361 367zM872 850c25 -72 38 -148 38 -225c0 -173 -71 -317 -219 -411h-10c-14 0 -28 1 -42 3c199 76 235 377 235 562c0 23 0 47 -2 71zM872 850c-5 97 -60 247 -142 302c56 -95 106 -197 142 -302zM1207 955c0 61 -15 123 -51 174c-24 -51 -69 -94 -124 -109
-c-79 -22 -149 -59 -149 -153c0 -27 9 -54 24 -77c95 22 196 92 236 182c-6 -80 -155 -177 -213 -209c29 -29 67 -52 110 -52c73 0 125 65 150 127c12 30 17 86 17 117zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288
-h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1899"
-d="M448 1088c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1515 512c0 -34 -14 -67 -37 -90l-491 -492c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-715 716c-51 50 -91 147 -91 218v416c0 70 58 128 128 128h416c71 0 168 -40 219 -91
-l715 -714c23 -24 37 -57 37 -91zM1899 512c0 -34 -14 -67 -37 -90l-491 -492c-24 -23 -57 -37 -91 -37c-52 0 -78 24 -112 59l470 470c23 23 37 56 37 90s-14 67 -37 91l-715 714c-51 51 -148 91 -219 91h224c71 0 168 -40 219 -91l715 -714c23 -24 37 -57 37 -91z" />
- <glyph glyph-name="minus-square-o" unicode="&#xf147;" horiz-adv-x="1408"
-d="M1152 736v-64c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h832c18 0 32 -14 32 -32zM1280 288v832c0 88 -72 160 -160 160h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160zM1408 1120v-832
-c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c159 0 288 -129 288 -288z" />
- <glyph glyph-name="user-circle" unicode="&#xf2bd;" horiz-adv-x="1792"
-d="M1523 197c-26 187 -102 353 -272 376c-88 -96 -215 -157 -355 -157s-267 61 -355 157c-170 -23 -246 -189 -272 -376c139 -196 368 -325 627 -325s488 129 627 325zM1280 896c0 212 -172 384 -384 384s-384 -172 -384 -384s172 -384 384 -384s384 172 384 384zM1792 640
-c0 -493 -400 -896 -896 -896c-495 0 -896 402 -896 896c0 495 401 896 896 896s896 -401 896 -896z" />
- <glyph glyph-name="thumbs-o-down" unicode="&#xf088;"
-d="M256 1088c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 512c0 37 -28 127 -75 128c21 24 35 71 35 103c0 47 -19 87 -53 119c12 21 18 45 18 69c0 46 -23 103 -65 126c3 18 5 37 5 56c0 117 -74 167 -185 167h-128c-118 0 -232 -35 -342 -73
-c-54 -19 -146 -55 -202 -55h-32v-640h32c79 0 198 -171 243 -229c25 -31 49 -62 77 -91c97 -102 64 -255 128 -320c137 0 160 75 160 192c0 118 -96 203 -96 320h352c67 0 128 60 128 128zM1536 511c0 -138 -118 -255 -256 -255h-176c30 -62 48 -122 48 -192
-c0 -66 -4 -126 -35 -186c-49 -97 -149 -134 -253 -134c-34 0 -66 14 -90 37c-100 98 -69 256 -128 321c-38 40 -73 83 -107 127c-30 39 -98 129 -137 155h-274c-71 0 -128 57 -128 128v640c0 71 57 128 128 128h288c28 0 109 30 138 40c144 50 269 88 423 88h112
-c182 0 313 -108 312 -295v-5c39 -50 60 -114 60 -178c0 -14 -1 -29 -3 -43c25 -44 38 -94 38 -144c0 -23 -3 -47 -9 -69c32 -48 49 -105 49 -163z" />
- <glyph glyph-name="subscript" unicode="&#xf12c;" horiz-adv-x="1531"
-d="M892 167v-167h-248l-159 252l-24 42c-6 7 -9 14 -11 21h-3c-2 -7 -6 -14 -9 -21c-6 -12 -15 -28 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228c9 -14 16 -29 23 -42c6 -7 9 -14 11 -21h3c2 7 6 14 11 21l25 42l140 228h257v-168h-125
-l-184 -267l204 -296h109zM1531 -50v-206h-514l-4 27c-1 15 -3 33 -3 46c0 273 350 296 350 441c0 52 -47 87 -100 87c-39 0 -72 -18 -97 -39c-13 -11 -25 -25 -36 -38l-105 92c18 25 38 46 63 66c42 34 103 65 188 65c145 0 246 -85 246 -218c0 -239 -332 -259 -346 -403
-h232v80h126z" />
- <glyph glyph-name="flickr" unicode="&#xf16e;"
-d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960zM698 640c0 117 -95 212 -212 212s-212 -95 -212 -212s95 -212 212 -212s212 95 212 212zM1262 640c0 117 -95 212 -212 212
-s-212 -95 -212 -212s95 -212 212 -212s212 95 212 212z" />
- <glyph glyph-name="cc-amex" unicode="&#xf1f3;" horiz-adv-x="2304"
-d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453c0 24 -18 33 -40 33h-84v-69h83c23 0 41 11 41 36zM1475 457c0 25 -22 29 -42 29h-82v-61h81c22 0 43 5 43 32zM1197 923c0 25 -22 29 -42 29h-82v-60h81
-c22 0 43 5 43 31zM1656 854h89l-44 108zM699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453c0 -109 -119 -91 -193 -91v-91h-126l-80 90l-83 -90h-256v271h260l80 -89l82 89h207
-c61 0 109 -21 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229c0 -73 -59 -134 -132 -134h-2040c-73 0 -132 61 -132 134v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1c9 0 10 -7 10 -14v-86h279v23
-c65 -34 154 -23 222 -23l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249c-37 0 -76 -4 -109 -22v22h-172v-22c-20 18 -47 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391c0 73 59 134 132 134h2040c73 0 132 -61 132 -134
-v-678h-120c-28 0 -58 -5 -81 -22v22h-177c-25 0 -59 -4 -78 -22v22h-316v-22c-24 17 -59 22 -87 22h-209v-22c-21 20 -64 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21c30 0 61 1 90 13v-102h174v99h8c10 0 12 -1 12 -12v-87h529c29 0 65 6 88 24
-v-24h168c32 0 66 3 95 17zM1546 469c0 -30 -16 -60 -46 -72c36 -13 43 -37 43 -72v-54h-65v45c0 46 -15 54 -58 54h-69v-99h-65v271h154c51 0 106 -9 106 -73zM1269 936c0 -31 -17 -61 -46 -73c37 -13 43 -36 43 -72v-53h-65c-1 58 14 98 -58 98h-70v-98h-64v271l153 -1
-c52 0 107 -8 107 -72zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357c0 -64 -44 -86 -102 -86h-126v58h126c16 0 34 4 34 25c0 58 -167 -22 -167 107c0 55 42 81 92 81h130v-57h-119c-17 0 -36 -3 -36 -25
-c0 -59 168 27 168 -103zM2304 407v-101c-19 -28 -56 -35 -88 -35h-125v58h125c16 0 33 5 33 25c0 57 -167 -22 -167 107c0 55 43 81 93 81h129v-57h-118c-18 0 -36 -3 -36 -25c0 -48 113 1 154 -53zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75
-c-89 0 -129 46 -129 133c0 91 41 138 133 138h63v-59c-68 1 -130 16 -130 -77c0 -46 11 -78 63 -78h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
- <glyph glyph-name="reddit" unicode="&#xf1a1;" horiz-adv-x="1792"
-d="M1095 369c9 -9 9 -23 0 -31c-57 -57 -167 -62 -199 -62s-142 5 -199 62c-9 8 -9 22 0 31c8 8 22 8 30 0c36 -37 114 -49 169 -49s132 12 169 49c8 8 22 8 30 0zM788 550c0 -49 -40 -89 -89 -89c-50 0 -90 40 -90 89c0 50 40 90 90 90c49 0 89 -40 89 -90zM1183 550
-c0 -49 -40 -89 -90 -89c-49 0 -89 40 -89 89c0 50 40 90 89 90c50 0 90 -40 90 -90zM1434 670c0 66 -54 119 -120 119c-34 0 -64 -14 -86 -36c-81 56 -190 92 -311 96l63 283l200 -45c0 -49 40 -89 89 -89c50 0 90 41 90 90s-40 90 -90 90c-35 0 -65 -21 -80 -50l-221 49
-c-11 3 -22 -5 -25 -16l-69 -312c-120 -5 -228 -41 -309 -97c-22 23 -53 37 -87 37c-66 0 -120 -53 -120 -119c0 -48 28 -88 68 -108c-4 -18 -6 -37 -6 -56c0 -190 214 -344 477 -344c264 0 478 154 478 344c0 19 -2 39 -7 57c39 20 66 60 66 107zM1792 640
-c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
- <glyph glyph-name="times-circle" unicode="&#xf057;"
-d="M1149 414c0 17 -7 33 -19 45l-181 181l181 181c12 12 19 28 19 45s-7 34 -19 46l-90 90c-12 12 -29 19 -46 19s-33 -7 -45 -19l-181 -181l-181 181c-12 12 -28 19 -45 19s-34 -7 -46 -19l-90 -90c-12 -12 -19 -29 -19 -46s7 -33 19 -45l181 -181l-181 -181
-c-12 -12 -19 -28 -19 -45s7 -34 19 -46l90 -90c12 -12 29 -19 46 -19s33 7 45 19l181 181l181 -181c12 -12 28 -19 45 -19s34 7 46 19l90 90c12 12 19 29 19 46zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="tripadvisor" unicode="&#xf262;" horiz-adv-x="2304"
-d="M651 539c0 -52 -42 -94 -93 -94c-52 0 -94 42 -94 94c0 51 42 93 94 93c51 0 93 -42 93 -93zM1805 540c0 -52 -42 -94 -94 -94s-94 42 -94 94s42 93 94 93s94 -41 94 -93zM765 539c0 106 -87 193 -193 193c-107 0 -193 -87 -193 -193c0 -107 86 -193 193 -193
-c106 0 193 86 193 193zM1918 540c0 106 -86 193 -193 193c-106 0 -193 -87 -193 -193c0 -107 87 -193 193 -193c107 0 193 86 193 193zM850 539c0 -154 -124 -279 -278 -279s-279 125 -279 279c0 153 125 278 279 278s278 -125 278 -278zM2004 540
-c0 -154 -125 -278 -279 -278c-153 0 -278 124 -278 278s125 278 278 278c154 0 279 -124 279 -278zM1040 537c0 255 -207 462 -462 462c-254 0 -461 -207 -461 -462s207 -462 461 -462c255 0 462 207 462 462zM1708 1110c-165 72 -351 111 -556 111s-409 -39 -573 -110
-c317 -1 573 -257 573 -574c0 311 247 564 556 573zM2187 537c0 255 -206 462 -461 462s-462 -207 -462 -462s207 -462 462 -462s461 207 461 462zM1921 1103h383c-60 -70 -104 -164 -115 -229c69 -95 110 -211 110 -337c0 -317 -257 -573 -573 -573c-180 0 -340 82 -445 211
-c0 0 -47 -56 -129 -179c-14 29 -85 130 -128 180c-105 -130 -266 -212 -446 -212c-316 0 -573 256 -573 573c0 126 41 242 110 337c-11 65 -55 159 -115 229h365c196 131 481 213 787 213s573 -82 769 -213z" />
- <glyph glyph-name="sort-amount-asc" unicode="&#xf160;" horiz-adv-x="1760"
-d="M704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1760 -32v-192c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32
-v192c0 18 14 32 32 32h832c18 0 32 -14 32 -32zM1568 480v-192c0 -18 -14 -32 -32 -32h-640c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h640c18 0 32 -14 32 -32zM1376 992v-192c0 -18 -14 -32 -32 -32h-448c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h448
-c18 0 32 -14 32 -32zM1184 1504v-192c0 -18 -14 -32 -32 -32h-256c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h256c18 0 32 -14 32 -32z" />
- <glyph glyph-name="renren" unicode="&#xf18b;"
-d="M1133 -34c-109 -60 -234 -94 -368 -94c-133 0 -258 34 -367 94c177 112 320 281 367 479c48 -198 191 -367 368 -479zM638 1394v-485c0 -342 -189 -636 -457 -766c-113 134 -181 306 -181 495c0 380 276 695 638 756zM1536 638c0 -189 -68 -361 -181 -495
-c-268 130 -457 424 -457 766v485c362 -61 638 -376 638 -756z" />
- <glyph glyph-name="key-modern" unicode="&#xf2f7;" horiz-adv-x="1792"
-d="M546 1536v0c139 1 278 -52 383 -158c142 -141 187 -343 137 -525l726 -726v-319c0 -35 -29 -64 -64 -64h-300l-45 45l135 226l-46 45l-225 -135l-45 46l134 225l-45 45l-225 -134l-46 45l135 225l-45 46l-243 -139l-186 186c-182 -50 -382 -5 -524 136
-c-211 212 -209 556 4 770c107 106 246 159 385 160zM405 1290v0c-41 0 -82 -16 -113 -47c-63 -63 -63 -163 0 -226s164 -63 227 0s63 163 0 226c-31 31 -73 47 -114 47z" />
- <glyph glyph-name="arrow-circle-o-right" unicode="&#xf18e;"
-d="M1152 640c0 -8 -3 -17 -9 -23l-320 -320c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v192h-352c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h352v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544
-s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="pinterest-p" unicode="&#xf231;" horiz-adv-x="1280"
-d="M0 939c0 369 338 597 680 597c314 0 600 -216 600 -547c0 -311 -159 -656 -513 -656c-84 0 -190 42 -231 120c-76 -301 -70 -346 -238 -576l-14 -5l-9 10c-6 63 -15 125 -15 188c0 204 94 499 140 697c-25 51 -32 113 -32 169c0 101 70 229 184 229
-c84 0 129 -64 129 -143c0 -130 -88 -252 -88 -378c0 -86 71 -146 154 -146c230 0 301 332 301 509c0 237 -168 366 -395 366c-264 0 -468 -190 -468 -458c0 -129 79 -195 79 -226c0 -26 -19 -118 -52 -118c-5 0 -12 2 -17 3c-143 43 -195 234 -195 365z" />
- <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408"
-d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
- <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1683"
-d="M832 1024c0 106 -86 192 -192 192s-192 -86 -192 -192c0 -29 7 -57 19 -83c-26 12 -54 19 -83 19c-106 0 -192 -86 -192 -192s86 -192 192 -192s192 86 192 192c0 29 -7 57 -19 83c26 -12 54 -19 83 -19c106 0 192 86 192 192zM1683 320c0 -23 -92 -115 -115 -115
-c-26 0 -107 94 -128 115l-96 -96l220 -220c18 -18 28 -43 28 -68c0 -56 -64 -120 -120 -120c-25 0 -50 10 -68 28l-671 671c-105 -78 -233 -131 -365 -131c-218 0 -368 151 -368 368c0 328 328 656 656 656c217 0 368 -150 368 -368c0 -132 -53 -260 -131 -365l355 -355
-l96 96c-21 21 -115 102 -115 128c0 23 92 115 115 115c8 0 17 -4 23 -10c37 -37 316 -300 316 -329z" />
- <glyph glyph-name="picture-o" unicode="&#xf03e;" horiz-adv-x="1920"
-d="M640 960c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600c-17 0 -32 -15 -32 -32v-1216c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32v1216c0 17 -15 32 -32 32z
-M1920 1248v-1216c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
- <glyph glyph-name="list-alt" unicode="&#xf022;" horiz-adv-x="1792"
-d="M384 352v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 608v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 864v-64c0 -17 -15 -32 -32 -32h-64
-c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1536 352v-64c0 -17 -15 -32 -32 -32h-960c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h960c17 0 32 -15 32 -32zM1536 608v-64c0 -17 -15 -32 -32 -32h-960c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h960
-c17 0 32 -15 32 -32zM1536 864v-64c0 -17 -15 -32 -32 -32h-960c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h960c17 0 32 -15 32 -32zM1664 160v832c0 17 -15 32 -32 32h-1472c-17 0 -32 -15 -32 -32v-832c0 -17 15 -32 32 -32h1472c17 0 32 15 32 32zM1792 1248v-1088
-c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
- <glyph glyph-name="fort-awesome" unicode="&#xf286;" horiz-adv-x="1664"
-d="M640 528v224c0 9 -7 16 -16 16h-96c-9 0 -16 -7 -16 -16v-224c0 -9 7 -16 16 -16h96c9 0 16 7 16 16zM1152 528v224c0 9 -7 16 -16 16h-96c-9 0 -16 -7 -16 -16v-224c0 -9 7 -16 16 -16h96c9 0 16 7 16 16zM1664 496v-752h-640v320c0 106 -86 192 -192 192
-s-192 -86 -192 -192v-320h-640v752c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v624c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112c0 21 28 16 41 16v391c-19 9 -32 29 -32 50c0 30 25 55 55 55s55 -25 55 -55
-c0 -21 -13 -41 -32 -50v-17c27 6 55 10 83 10c41 0 80 -15 114 -15c31 0 66 15 84 15c9 0 16 -7 16 -16v-210c0 -24 -81 -28 -97 -28c-37 0 -72 15 -110 15c-30 0 -61 -5 -90 -12v-133c13 0 41 5 41 -16v-112h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-112h128v112
-c0 9 7 16 16 16h96c9 0 16 -7 16 -16v-624h128v112c0 9 7 16 16 16h96c9 0 16 -7 16 -16z" />
- <glyph glyph-name="commenting" unicode="&#xf27a;" horiz-adv-x="1792"
-d="M640 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1024 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1408 640c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128z
-M1792 640c0 -354 -401 -640 -896 -640c-73 0 -144 6 -211 18c-114 -114 -263 -192 -435 -229c-27 -5 -56 -10 -86 -13c-16 -2 -31 9 -35 24c-4 16 8 26 20 37c63 59 138 106 164 317c-191 117 -313 291 -313 486c0 354 401 640 896 640s896 -286 896 -640z" />
- <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152"
-d="M640 128c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1024 288v960c0 17 -15 32 -32 32h-832c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h832c17 0 32 15 32 32zM1152 1248v-1088c0 -88 -72 -160 -160 -160h-832c-88 0 -160 72 -160 160v1088
-c0 88 72 160 160 160h832c88 0 160 -72 160 -160z" />
- <glyph glyph-name="credit-card" unicode="&#xf09d;" horiz-adv-x="1920"
-d="M1760 1408c88 0 160 -72 160 -160v-1216c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1600zM160 1280c-17 0 -32 -15 -32 -32v-224h1664v224c0 17 -15 32 -32 32h-1600zM1760 0c17 0 32 15 32 32v608h-1664v-608
-c0 -17 15 -32 32 -32h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
- <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408"
-d="M1408 800v-192c0 -53 -43 -96 -96 -96h-1216c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h1216c53 0 96 -43 96 -96z" />
- <glyph glyph-name="unlock-alt" unicode="&#xf13e;" horiz-adv-x="1152"
-d="M1056 768c53 0 96 -43 96 -96v-576c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v576c0 53 43 96 96 96h32v320c0 247 201 448 448 448s448 -201 448 -448c0 -35 -29 -64 -64 -64h-64c-35 0 -64 29 -64 64c0 141 -115 256 -256 256s-256 -115 -256 -256v-320h736z
-" />
- <glyph glyph-name="ils" unicode="&#xf20b;" horiz-adv-x="1376"
-d="M992 912v-496c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v496c0 150 -122 272 -272 272h-272v-1152c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v1344c0 18 14 32 32 32h464c274 0 496 -222 496 -496zM1376 1376v-880c0 -274 -222 -496 -496 -496h-464
-c-18 0 -32 14 -32 32v960c0 18 14 32 32 32h160c18 0 32 -14 32 -32v-768h272c150 0 272 122 272 272v880c0 18 14 32 32 32h160c18 0 32 -14 32 -32z" />
- <glyph glyph-name="cog" unicode="&#xf013;"
-d="M1024 640c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1536 749v-222c0 -15 -12 -33 -28 -36l-185 -28c-11 -32 -23 -62 -39 -91c34 -49 70 -93 107 -138c6 -7 10 -16 10 -25s-3 -16 -9 -23c-24 -32 -159 -179 -193 -179
-c-9 0 -18 4 -26 9l-138 108c-29 -15 -60 -28 -91 -38c-7 -61 -13 -126 -29 -186c-4 -16 -18 -28 -36 -28h-222c-18 0 -34 13 -36 30l-28 184c-31 10 -61 22 -90 37l-141 -107c-7 -6 -16 -9 -25 -9s-18 4 -25 11c-53 48 -123 110 -165 168c-5 7 -7 15 -7 23c0 9 3 16 8 23
-c34 46 71 90 105 137c-17 32 -31 65 -41 99l-183 27c-17 3 -29 19 -29 36v222c0 15 12 33 27 36l186 28c10 32 23 62 39 92c-34 48 -70 93 -107 138c-6 7 -10 15 -10 24s4 16 9 23c24 33 159 179 193 179c9 0 18 -4 26 -10l138 -107c29 15 60 28 91 38c7 61 13 126 29 186
-c4 16 18 28 36 28h222c18 0 34 -13 36 -30l28 -184c31 -10 61 -22 90 -37l142 107c6 6 15 9 24 9s18 -4 25 -10c53 -49 123 -111 165 -170c5 -6 7 -14 7 -22c0 -9 -3 -16 -8 -23c-34 -46 -71 -90 -105 -137c17 -32 31 -65 41 -98l183 -28c17 -3 29 -19 29 -36z" />
- <glyph glyph-name="arrow-right" unicode="&#xf061;" horiz-adv-x="1472"
-d="M1472 576c0 -34 -13 -67 -37 -91l-651 -651c-24 -23 -57 -37 -91 -37s-66 14 -90 37l-75 75c-24 24 -38 57 -38 91s14 67 38 91l293 293h-704c-72 0 -117 60 -117 128v128c0 68 45 128 117 128h704l-293 294c-24 23 -38 56 -38 90s14 67 38 90l75 75c24 24 56 38 90 38
-s67 -14 91 -38l651 -651c24 -23 37 -56 37 -90z" />
- <glyph glyph-name="cc-paypal" unicode="&#xf1f4;" horiz-adv-x="2304"
-d="M745 630c0 -49 -39 -86 -88 -86c-37 0 -64 21 -64 60c0 49 38 88 87 88c37 0 65 -23 65 -62zM1530 779c0 -60 -36 -72 -88 -72l-32 -1l17 107c1 7 6 11 13 11h18c34 0 72 -2 72 -45zM1881 630c0 -49 -39 -86 -87 -86c-37 0 -65 21 -65 60c0 49 38 88 87 88
-c37 0 65 -23 65 -62zM513 801c0 84 -65 112 -139 112h-160c-10 0 -20 -8 -21 -19l-65 -408c-1 -8 5 -16 13 -16h76c11 0 21 8 22 19l18 110c4 29 53 19 72 19c114 0 184 68 184 183zM822 489l41 261c1 8 -5 16 -13 16h-76c-15 0 -16 -22 -17 -33c-23 34 -57 40 -95 40
-c-98 0 -173 -86 -173 -181c0 -78 49 -129 127 -129c36 0 81 16 106 44c-2 -6 -4 -15 -4 -21c0 -9 4 -16 13 -16h69c11 0 20 8 22 19zM1269 752c0 7 -6 14 -13 14h-77c-7 0 -14 -4 -18 -10l-106 -156l-44 150c-3 9 -12 16 -22 16h-75c-7 0 -13 -7 -13 -14
-c0 -5 78 -231 85 -252c-11 -15 -82 -108 -82 -120c0 -7 6 -13 13 -13h77c7 0 14 4 18 10l255 368c2 2 2 4 2 7zM1649 801c0 84 -65 112 -139 112h-159c-11 0 -21 -8 -22 -19l-65 -408c-1 -8 5 -16 13 -16h82c8 0 14 6 16 13l18 116c4 29 53 19 72 19c114 0 184 68 184 183z
-M1958 489l41 261c1 8 -5 16 -13 16h-76c-15 0 -16 -22 -17 -33c-22 34 -56 40 -95 40c-98 0 -173 -86 -173 -181c0 -78 49 -129 127 -129c37 0 82 16 106 44c-1 -6 -4 -15 -4 -21c0 -9 4 -16 13 -16h69c11 0 20 8 22 19zM2176 898v1c0 8 -6 14 -13 14h-74
-c-6 0 -12 -5 -13 -11l-65 -416l-1 -2c0 -7 6 -14 14 -14h66c10 0 20 8 21 19zM392 764c-8 -51 -42 -57 -86 -57l-33 -1l17 107c1 7 7 11 13 11h19c45 0 79 -6 70 -60zM2304 1280v-1280c0 -70 -58 -128 -128 -128h-2048c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128
-h2048c70 0 128 -58 128 -128z" />
- <glyph glyph-name="birthday-cake" unicode="&#xf1fd;" horiz-adv-x="1792"
-d="M1792 128v-384h-1792v384c98 0 150 44 191 79c34 30 57 49 108 49s73 -19 108 -49c41 -35 92 -79 191 -79c98 0 149 44 191 79c34 30 56 49 107 49s74 -19 108 -49c41 -35 93 -79 191 -79s150 44 191 79c34 30 57 49 108 49c50 0 73 -19 107 -49c41 -35 93 -79 191 -79z
-M1792 448v-192c-51 0 -73 19 -108 49c-41 35 -92 79 -190 79c-99 0 -150 -44 -191 -79c-35 -30 -57 -49 -108 -49s-74 19 -108 49c-41 35 -92 79 -191 79c-98 0 -149 -44 -191 -79c-34 -30 -56 -49 -107 -49s-74 19 -108 49c-41 35 -93 79 -191 79c-99 0 -150 -44 -191 -79
-c-34 -30 -57 -49 -108 -49v192c0 106 86 192 192 192h64v448h256v-448h256v448h256v-448h256v448h256v-448h64c106 0 192 -86 192 -192zM512 1312c0 -106 -57 -160 -128 -160s-128 57 -128 128c0 124 128 92 128 256c48 0 128 -118 128 -224zM1024 1312
-c0 -106 -57 -160 -128 -160s-128 57 -128 128c0 124 128 92 128 256c48 0 128 -118 128 -224zM1536 1312c0 -106 -57 -160 -128 -160s-128 57 -128 128c0 124 128 92 128 256c48 0 128 -118 128 -224z" />
- <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792"
-d="M1792 640c0 -354 -401 -640 -896 -640c-49 0 -98 3 -145 8c-131 -116 -287 -198 -460 -242c-36 -10 -75 -17 -114 -22c-22 -2 -43 14 -48 38v1c-5 25 12 40 27 58c63 71 135 131 182 298c-206 117 -338 298 -338 501c0 353 401 640 896 640s896 -286 896 -640z" />
- <glyph glyph-name="bell" unicode="&#xf0f3;" horiz-adv-x="1664"
-d="M848 -160c0 9 -7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16zM182 128h1300c-179 202 -266 476 -266 832c0 129 -122 320 -384 320s-384 -191 -384 -320c0 -356 -87 -630 -266 -832zM1664 128
-c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-256 115 -256 256h-448c-70 0 -128 58 -128 128c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c265 -39 424 -249 424 -441
-c0 -483 172 -707 320 -832z" />
- <glyph glyph-name="cc" unicode="&#xf20a;" horiz-adv-x="2048"
-d="M785 528h207c-19 -211 -140 -339 -313 -339c-216 0 -347 166 -347 432c0 264 144 429 326 429c200 0 312 -124 329 -334h-203c-7 85 -49 134 -117 134c-75 0 -120 -80 -120 -238c0 -115 20 -223 129 -223c69 0 101 60 109 139zM1497 528h206
-c-19 -211 -139 -339 -312 -339c-216 0 -347 166 -347 432c0 264 144 429 326 429c200 0 312 -124 329 -334h-204c-6 85 -49 134 -116 134c-75 0 -120 -80 -120 -238c0 -115 19 -223 128 -223c69 0 102 60 110 139zM1856 647c0 268 -14 384 -76 468c-13 17 -34 28 -51 40
-c-63 46 -356 63 -697 63s-648 -17 -710 -63c-18 -13 -40 -23 -53 -40c-62 -83 -75 -200 -75 -468c0 -269 14 -385 75 -468c14 -19 35 -27 53 -41c62 -46 369 -65 710 -65s634 18 697 65c17 13 39 21 51 41c63 82 76 199 76 468zM2048 1408v-1536h-2048v1536h2048z" />
- <glyph glyph-name="get-pocket" unicode="&#xf265;" horiz-adv-x="1720"
-d="M1565 1408c87 0 155 -70 155 -156v-519c0 -479 -383 -861 -859 -861c-478 0 -861 382 -861 861v519c0 85 71 156 156 156h1409zM861 344c30 0 60 12 82 33l404 388c23 22 37 53 37 85c0 65 -53 118 -118 118c-31 0 -60 -12 -82 -33l-323 -310l-323 310
-c-22 21 -51 33 -81 33c-65 0 -118 -53 -118 -118c0 -32 13 -63 36 -85l405 -388c21 -21 51 -33 81 -33z" />
- <glyph glyph-name="bell-slash-o" unicode="&#xf1f7;" horiz-adv-x="2019"
-d="M1026 -160c0 9 -7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176c9 0 16 7 16 16zM489 315l877 760c-50 105 -166 205 -356 205c-262 0 -384 -191 -384 -320c0 -256 -45 -470 -137 -645zM1842 128c0 -70 -58 -128 -128 -128
-h-448c0 -141 -115 -256 -256 -256s-255 114 -256 255l149 129h757c-111 125 -186 277 -227 459l111 97c51 -298 182 -458 298 -556zM1928 1520l84 -96c11 -14 10 -34 -3 -46l-1872 -1622c-13 -11 -34 -10 -45 4l-84 96c-11 14 -10 34 3 45l186 161c-12 20 -19 42 -19 66
-c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c172 -25 299 -122 367 -240l418 363c13 11 34 10 45 -4z" />
- <glyph glyph-name="header" unicode="&#xf1dc;" horiz-adv-x="1668"
-d="M1620 -128c-88 0 -177 7 -266 7c-88 0 -176 -7 -264 -7c-34 0 -50 37 -50 66c0 89 100 51 152 85c33 21 33 105 33 140l-1 391c0 11 0 21 -1 31c-16 5 -34 4 -50 4h-675c-17 0 -35 1 -51 -4c-1 -10 -1 -20 -1 -31l-1 -371c0 -38 0 -142 37 -164c52 -32 170 13 170 -77
-c0 -30 -14 -70 -49 -70c-93 0 -186 7 -278 7c-85 0 -170 -7 -255 -7c-33 0 -48 38 -48 66c0 87 92 51 141 85c32 22 33 108 33 143l-1 57v813c0 48 7 202 -38 229c-50 31 -157 -17 -157 73c0 29 13 70 48 70c92 0 185 -7 277 -7c84 0 169 7 253 7c36 0 50 -40 50 -70
-c0 -86 -99 -44 -148 -75c-35 -21 -35 -124 -35 -160l1 -320c0 -11 0 -21 1 -32c13 -3 26 -3 39 -3h699c12 0 25 0 38 3c1 11 1 21 1 32l1 320c0 37 0 139 -35 160c-50 30 -150 -10 -150 75c0 30 14 70 50 70c88 0 176 -7 264 -7c86 0 172 7 258 7c36 0 50 -40 50 -70
-c0 -87 -103 -43 -153 -74c-34 -22 -35 -125 -35 -161l1 -943c0 -33 2 -120 34 -140c51 -32 159 9 159 -78c0 -29 -13 -70 -48 -70z" />
- <glyph glyph-name="bluetooth-b" unicode="&#xf294;" horiz-adv-x="944"
-d="M556 113l173 172l-173 172v-344zM556 823l173 172l-173 172v-344zM588 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+ <glyph glyph-name="line-chart" unicode="&#xf201;" horiz-adv-x="2048"
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435c0 -28 -34 -43 -55 -22l-121 121l-633 -633c-13 -13 -33 -13 -46 0l-233 233l-416 -416l-192 192l585 585c13 13 33 13 46 0l233 -233l464 464l-121 121c-21 21 -6 55 22 55h435c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1632"
+d="M1440 320c0 26 -10 50 -28 68l-208 208c-18 18 -43 28 -68 28c-29 0 -52 -11 -72 -32c33 -33 72 -61 72 -112c0 -53 -43 -96 -96 -96c-51 0 -79 39 -112 72c-21 -20 -33 -43 -33 -73c0 -25 10 -50 28 -68l206 -207c18 -18 43 -27 68 -27s50 9 68 26l147 146
+c18 18 28 42 28 67zM737 1025c0 25 -10 50 -28 68l-206 207c-18 18 -43 28 -68 28s-50 -10 -68 -27l-147 -146c-18 -18 -28 -42 -28 -67c0 -26 10 -50 28 -68l208 -208c18 -18 43 -27 68 -27c29 0 52 10 72 31c-33 33 -72 61 -72 112c0 53 43 96 96 96c51 0 79 -39 112 -72
+c21 20 33 43 33 73zM1632 320c0 -76 -31 -150 -85 -203l-147 -146c-54 -54 -127 -83 -203 -83c-77 0 -150 30 -204 85l-206 207c-54 54 -83 127 -83 203c0 79 32 154 88 209l-88 88c-55 -56 -129 -88 -208 -88c-76 0 -150 30 -204 84l-208 208c-55 55 -84 127 -84 204
+c0 76 31 150 85 203l147 146c54 54 127 83 203 83c77 0 150 -30 204 -85l206 -207c54 -54 83 -127 83 -203c0 -79 -32 -154 -88 -209l88 -88c55 56 129 88 208 88c76 0 150 -30 204 -84l208 -208c55 -55 84 -127 84 -204z" />
+ <glyph glyph-name="linkedin" unicode="&#xf0e1;"
+d="M349 911v-991h-330v991h330zM370 1217c1 -95 -71 -171 -186 -171h-2c-111 0 -182 76 -182 171c0 97 74 171 186 171c113 0 183 -74 184 -171zM1536 488v-568h-329v530c0 133 -48 224 -167 224c-91 0 -145 -61 -169 -120c-8 -22 -11 -51 -11 -81v-553h-329
+c4 898 0 991 0 991h329v-144h-2c43 68 121 167 299 167c217 0 379 -142 379 -446z" />
+ <glyph glyph-name="linkedin-square" unicode="&#xf08c;"
+d="M237 122h231v694h-231v-694zM483 1030c-1 68 -50 120 -129 120s-131 -52 -131 -120c0 -66 50 -120 128 -120h1c81 0 131 54 131 120zM1068 122h231v398c0 213 -114 312 -266 312c-124 0 -179 -69 -209 -117h2v101h-231s3 -65 0 -694h231v388c0 20 1 41 7 56
+c17 41 55 84 119 84c83 0 116 -63 116 -157v-371zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="linode" unicode="&#xf2b8;" horiz-adv-x="1494"
+d="M309 1l202 -214l-34 236l-216 213zM535 -225l274 218l-11 245l-300 -215zM224 413l227 -213l-48 327l-245 204zM474 189l317 214l-14 324l-352 -200zM822 178l95 -80l-2 239l-103 79c0 -8 4 -22 -4 -28l-78 -52l85 -70c10 -8 7 -76 7 -88zM117 930l256 -200l-68 465
+l-279 173zM1152 267l15 234l-230 -164l2 -240zM396 722l373 194l-19 441l-423 -163zM1249 357l20 233l-226 142l-2 -105l144 -95c3 -2 5 -6 4 -9l-7 -119zM1440 496l30 222l-179 -128l-20 -228zM1252 329l-71 49l-8 -117c0 -3 -1 -6 -4 -8l-234 -187c-4 -3 -10 -3 -14 0
+l-98 83l7 -161c0 -3 -1 -6 -4 -8l-293 -234c-2 -1 -4 -2 -6 -2c-3 1 -6 1 -8 3l-228 242c-5 5 -54 252 -59 277c-1 4 2 9 5 11l61 37c-12 11 -93 82 -95 92l-72 351c-1 4 1 9 6 12l94 45c-16 12 -132 96 -135 108l-96 466c-1 6 2 11 7 13l433 135c2 0 5 0 8 -1l317 -153
+c3 -2 6 -6 6 -9l20 -463c0 -4 -2 -8 -6 -10l-118 -61l126 -85c3 -1 5 -5 5 -8l5 -123l121 74c3 2 8 2 11 0l84 -56l3 110c0 3 2 7 5 9l206 126c4 2 8 2 11 0l245 -135c2 -2 4 -4 5 -7c2 -7 -31 -232 -34 -255c0 -3 -2 -6 -4 -7l-191 -153c-4 -3 -9 -3 -13 0z" />
<glyph glyph-name="linux" unicode="&#xf17c;" horiz-adv-x="1523"
d="M657 1125c-20 -2 -13 -20 -24 -20c-10 -1 -8 22 24 20zM744 1111c-10 -3 -11 16 -29 11c29 13 39 -7 29 -11zM393 684c-9 3 -7 -15 -16 -29c-7 -13 -25 -23 -11 -25c5 -1 19 11 25 25c5 17 10 26 2 29zM1248 325c0 18 -39 35 -55 42c27 90 15 126 -3 211
c-14 64 -73 151 -119 178c12 -10 34 -39 57 -83c40 -75 80 -186 54 -278c-10 -36 -34 -41 -50 -42c-70 -8 -29 84 -58 209c-33 140 -67 150 -75 161c-41 182 -86 164 -99 232c-11 61 53 111 -34 128c-27 5 -65 32 -80 34s-23 101 33 104c55 4 65 -62 55 -88
@@ -1633,189 +1807,258 @@ c26 23 81 6 117 26c38 22 54 39 54 86c14 -48 -1 -87 -32 -106c-19 -12 -54 -18 -83
c-129 202 -214 334 -282 282c-17 -14 -18 34 -17 53c3 66 36 90 56 141c38 97 67 208 125 265c43 56 111 147 124 195c-11 104 -14 214 -16 310c-2 103 14 193 130 256c28 15 65 21 104 21c69 1 146 -19 195 -55c78 -58 127 -181 121 -269c-4 -69 8 -140 30 -214
c26 -87 67 -148 133 -218c79 -84 141 -249 159 -354c16 -98 -6 -159 -27 -162c-32 -5 -52 -106 -152 -102c-64 3 -70 41 -88 74c-29 51 -58 35 -69 -19c-6 -27 -2 -67 7 -97c18 -63 12 -122 1 -195c-21 -138 97 -164 176 -98c78 65 95 75 193 109c149 51 99 96 19 123
c-72 24 -75 145 -49 168c6 -130 74 -149 102 -167z" />
- <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664"
-d="M512 160v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM512 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 160v192c0 18 -14 32 -32 32h-320
-c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM512 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192
-c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 160v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32z
-M1536 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1664 1248v-1088c0 -88 -72 -160 -160 -160
-h-1344c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1344c88 0 160 -72 160 -160z" />
- <glyph glyph-name="caret-square-o-left" unicode="&#xf191;"
-d="M1024 960v-640c0 -35 -29 -64 -64 -64c-13 0 -26 4 -37 12l-448 320c-17 12 -27 31 -27 52c0 20 10 40 27 52l448 320c11 8 24 12 37 12c35 0 64 -29 64 -64zM1280 160v960c0 17 -15 32 -32 32h-960c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h960
-c17 0 32 15 32 32zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1664"
-d="M462 142c0 -70 -57 -128 -128 -128c-70 0 -128 58 -128 128c0 71 58 128 128 128c71 0 128 -57 128 -128zM960 -64c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM256 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
-s128 -57 128 -128zM1458 142c0 -70 -58 -128 -128 -128c-71 0 -128 58 -128 128c0 71 57 128 128 128c70 0 128 -57 128 -128zM494 1138c0 -88 -72 -160 -160 -160s-160 72 -160 160s72 160 160 160s160 -72 160 -160zM1664 640c0 -71 -57 -128 -128 -128s-128 57 -128 128
-s57 128 128 128s128 -57 128 -128zM1024 1344c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1554 1138c0 -124 -101 -224 -224 -224c-124 0 -224 100 -224 224c0 123 100 224 224 224c123 0 224 -101 224 -224z" />
- <glyph glyph-name="snapchat" unicode="&#xf2ab;"
-d="M1279 388c0 14 -8 24 -22 27c-91 20 -160 83 -198 167c-3 8 -7 16 -7 25c0 45 125 36 125 100c0 27 -33 44 -57 44c-23 0 -41 -16 -63 -16c-4 0 -8 1 -12 2c2 38 5 76 5 114c0 35 -2 83 -17 114c-48 104 -141 165 -255 165c-125 0 -220 -46 -275 -165
-c-15 -31 -17 -79 -17 -114c0 -38 3 -76 5 -114c-4 -2 -9 -2 -14 -2c-23 0 -41 15 -62 15c-25 0 -56 -16 -56 -44c0 -62 125 -54 125 -99c0 -9 -4 -17 -7 -25c-39 -84 -106 -147 -198 -167c-14 -3 -22 -13 -22 -27c0 -46 106 -63 137 -68c9 -24 5 -66 41 -66c25 0 50 9 77 9
-c105 0 133 -95 255 -95c127 0 151 95 257 95c27 0 52 -8 78 -8c35 0 31 42 40 65c31 5 137 22 137 68zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024"
-d="M512 384c0 25 -8 49 -20 69c-13 20 -66 88 -87 155c-3 11 -13 16 -21 16s-18 -5 -21 -16c-21 -67 -74 -135 -87 -155c-12 -20 -20 -44 -20 -69c0 -71 57 -128 128 -128s128 57 128 128zM1024 512c0 -283 -229 -512 -512 -512s-512 229 -512 512c0 101 31 195 81 275
-c51 80 265 351 346 621c13 43 53 64 85 64s73 -21 85 -64c81 -270 295 -541 346 -621s81 -174 81 -275z" />
- <glyph glyph-name="connectdevelop" unicode="&#xf20e;" horiz-adv-x="2048"
-d="M2048 641c0 -28 -20 -51 -46 -56l-205 -356c2 -6 3 -12 3 -18c0 -27 -19 -50 -45 -55l-193 -337c2 -5 3 -10 3 -16c0 -31 -25 -57 -57 -57c-16 0 -31 7 -41 18h-400c-10 -12 -26 -20 -43 -20s-33 8 -43 20h-399c-10 -12 -25 -20 -43 -20c-31 0 -57 25 -57 57
-c0 7 2 14 4 20l-193 335c-26 5 -45 28 -45 55c0 7 1 12 3 18l-206 356c-26 6 -45 29 -45 56c0 28 20 51 47 56l199 344c0 2 -1 4 -1 6c0 23 14 42 34 51l209 363c-2 5 -4 12 -4 18c0 32 26 57 57 57c18 0 33 -8 44 -21h396c10 13 25 21 43 21s33 -8 43 -21h398
-c11 13 26 21 44 21c31 0 57 -25 57 -57c0 -6 -2 -12 -4 -18l207 -358c30 -1 55 -26 55 -56c0 -10 -3 -19 -7 -27l187 -324c25 -5 44 -28 44 -55zM1063 -158h389l-342 354h-143l-342 -354h360c10 9 24 16 39 16s29 -7 39 -16zM112 654c1 -4 1 -8 1 -13s0 -10 -2 -15l208 -360
-c5 -1 10 -4 15 -6l188 199v347l-187 194c-9 -6 -19 -9 -29 -10zM986 1438h-388l190 -200l554 200h-280c-10 -10 -23 -16 -38 -16s-28 6 -38 16zM1689 226c1 4 3 8 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427
-l333 -343c4 2 8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6c9 -3 16 -7 22 -13zM552 226h402l64 66l-309 321l-157 -166v-221zM359 226h163v189l-168 -177c2 -4 4 -8 5 -12zM358 1051c0 -1 1 -3 1 -4c0 -11 -3 -21 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314
-l-223 236zM556 1425l-4 -8v-264l205 74l-191 201c-3 -1 -6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018c-5 8 -8 18 -8 29v2
-l-216 376c-5 1 -9 3 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82zM1729 266l207 361c-1 5 -2 9 -2 14c0 6 2 11 3 16l-171 296l-129 -612l77 -82c5 3 10 5 15 7z" />
- <glyph glyph-name="chrome" unicode="&#xf268;" horiz-adv-x="1792"
-d="M893 1536c153 1 309 -38 451 -120c157 -91 276 -222 352 -372l-742 39c-210 12 -410 -106 -479 -304l-276 424c172 214 430 332 694 333zM146 1131l337 -663c95 -187 296 -301 504 -262l-230 -451c-429 66 -757 437 -757 885c0 181 54 350 146 491zM1732 962
-c157 -404 0 -874 -388 -1098c-157 -91 -330 -128 -498 -119l405 623c115 177 113 408 -24 568zM896 942c167 0 302 -135 302 -302s-135 -302 -302 -302s-302 135 -302 302s135 302 302 302z" />
- <glyph glyph-name="trademark" unicode="&#xf25c;" horiz-adv-x="1972"
-d="M857 992v-117c0 -17 -15 -31 -32 -31h-298v-812c0 -18 -14 -32 -31 -32h-135c-18 0 -32 14 -32 32v812h-297c-18 0 -32 14 -32 31v117c0 18 14 32 32 32h793c17 0 32 -14 32 -32zM1895 995l77 -961c1 -9 -2 -17 -8 -24c-6 -6 -14 -10 -23 -10h-134c-16 0 -30 13 -31 29
-l-46 588l-189 -425c-5 -12 -16 -19 -29 -19h-120c-12 0 -23 7 -29 19l-188 427l-45 -590c-1 -16 -15 -29 -31 -29h-135c-9 0 -17 4 -23 10c-6 7 -9 15 -9 24l78 961c1 16 15 29 31 29h142c13 0 24 -8 29 -19l220 -520c7 -16 14 -34 20 -51c7 17 13 35 20 51l221 520
-c5 11 16 19 29 19h141c17 0 31 -13 32 -29z" />
- <glyph glyph-name="align-right" unicode="&#xf038;" horiz-adv-x="1792"
-d="M1792 192v-128c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 576v-128c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1280c35 0 64 -29 64 -64zM1792 960v-128
-c0 -35 -29 -64 -64 -64h-1536c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1536c35 0 64 -29 64 -64zM1792 1344v-128c0 -35 -29 -64 -64 -64h-1152c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" />
- <glyph glyph-name="bandcamp" unicode="&#xf2d5;" horiz-adv-x="1792"
-d="M1070 358l306 564h-654l-306 -564h654zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
+ <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792"
+d="M256 224v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM256 608v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM256 992v-192c0 -17 -15 -32 -32 -32h-192
+c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 224v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM256 1376v-192c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v192
+c0 17 15 32 32 32h192c17 0 32 -15 32 -32zM1792 608v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344
+c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1344c17 0 32 -15 32 -32z" />
+ <glyph glyph-name="list-alt" unicode="&#xf022;" horiz-adv-x="1792"
+d="M384 352v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 608v-64c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM384 864v-64c0 -17 -15 -32 -32 -32h-64
+c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h64c17 0 32 -15 32 -32zM1536 352v-64c0 -17 -15 -32 -32 -32h-960c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h960c17 0 32 -15 32 -32zM1536 608v-64c0 -17 -15 -32 -32 -32h-960c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h960
+c17 0 32 -15 32 -32zM1536 864v-64c0 -17 -15 -32 -32 -32h-960c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h960c17 0 32 -15 32 -32zM1664 160v832c0 17 -15 32 -32 32h-1472c-17 0 -32 -15 -32 -32v-832c0 -17 15 -32 32 -32h1472c17 0 32 15 32 32zM1792 1248v-1088
+c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="list-ol" unicode="&#xf0cb;" horiz-adv-x="1777"
+d="M366 -84c0 -110 -86 -172 -190 -172c-63 0 -127 21 -172 66l57 88c27 -25 68 -45 106 -45c35 0 72 17 72 57c0 56 -64 59 -105 56l-26 56c36 46 69 97 112 136v1c-32 0 -65 -2 -97 -2v-53h-106v152h333v-88l-95 -115c67 -16 111 -68 111 -137zM368 543v-159h-362
+c-3 18 -6 36 -6 54c0 185 226 213 226 297c0 34 -21 52 -54 52c-35 0 -64 -30 -81 -58l-85 59c33 69 101 108 177 108c93 0 173 -55 173 -154c0 -148 -217 -181 -220 -259h127v60h105zM1777 224v-192c0 -17 -15 -32 -32 -32h-1216c-18 0 -32 15 -32 32v192c0 18 14 32 32 32
+h1216c17 0 32 -14 32 -32zM369 1123v-99h-335v99h107c0 81 1 162 1 243v12h-2c-11 -22 -31 -37 -50 -54l-71 76l136 127h106v-404h108zM1777 736v-192c0 -17 -15 -32 -32 -32h-1216c-18 0 -32 15 -32 32v192c0 18 14 32 32 32h1216c17 0 32 -14 32 -32zM1777 1248v-192
+c0 -17 -15 -32 -32 -32h-1216c-18 0 -32 15 -32 32v192c0 17 14 32 32 32h1216c17 0 32 -15 32 -32z" />
+ <glyph glyph-name="list-ul" unicode="&#xf0ca;" horiz-adv-x="1792"
+d="M384 128c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM384 640c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1792 224v-192c0 -17 -15 -32 -32 -32h-1216c-17 0 -32 15 -32 32v192c0 17 15 32 32 32
+h1216c17 0 32 -15 32 -32zM384 1152c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1792 736v-192c0 -17 -15 -32 -32 -32h-1216c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1216c17 0 32 -15 32 -32zM1792 1248v-192
+c0 -17 -15 -32 -32 -32h-1216c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1216c17 0 32 -15 32 -32z" />
+ <glyph glyph-name="location-arrow" unicode="&#xf124;" horiz-adv-x="1408"
+d="M1401 1187l-640 -1280c-11 -22 -33 -35 -57 -35c-5 0 -10 1 -15 2c-29 7 -49 32 -49 62v576h-576c-30 0 -55 20 -62 49s7 59 33 72l1280 640c9 5 19 7 29 7c17 0 33 -6 45 -19c20 -19 25 -49 12 -74z" />
+ <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152"
+d="M320 768h512v192c0 141 -115 256 -256 256s-256 -115 -256 -256v-192zM1152 672v-576c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v576c0 53 43 96 96 96h32v192c0 246 202 448 448 448s448 -202 448 -448v-192h32c53 0 96 -43 96 -96z" />
<glyph glyph-name="long-arrow-down" unicode="&#xf175;" horiz-adv-x="767"
d="M765 237c5 -12 3 -25 -5 -35l-350 -384c-6 -6 -14 -10 -23 -10s-18 4 -24 10l-355 384c-8 10 -10 23 -5 35c5 11 16 19 29 19h224v1248c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1248h224c13 0 24 -7 29 -19z" />
- <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1600"
-d="M576 640v384h-256v-256c0 -71 57 -128 128 -128h128zM1600 192v-192h-1152v192l128 192h-128c-212 0 -384 172 -384 384v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
- <glyph glyph-name="th-list" unicode="&#xf00b;" horiz-adv-x="1792"
-d="M512 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 288v-192c0 -53 -43 -96 -96 -96h-960
-c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h960c53 0 96 -43 96 -96zM512 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 800v-192c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v192c0 53 43 96 96 96
-h960c53 0 96 -43 96 -96zM1792 1312v-192c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h960c53 0 96 -43 96 -96z" />
- <glyph glyph-name="eraser" unicode="&#xf12d;" horiz-adv-x="1920"
-d="M896 128l336 384h-768l-336 -384h768zM1909 1205c20 -46 12 -99 -21 -137l-896 -1024c-24 -28 -59 -44 -96 -44h-768c-50 0 -96 29 -117 75c-20 46 -12 99 21 137l896 1024c24 28 59 44 96 44h768c50 0 96 -29 117 -75z" />
- <glyph glyph-name="codepen" unicode="&#xf1cb;" horiz-adv-x="1792"
-d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
-c0 -25 -13 -50 -34 -64l-819 -546c-13 -8 -28 -13 -43 -13s-30 5 -43 13l-819 546c-21 14 -34 39 -34 64v546c0 25 13 50 34 64l819 546c13 8 28 13 43 13s30 -5 43 -13l819 -546c21 -14 34 -39 34 -64z" />
- <glyph glyph-name="slideshare" unicode="&#xf1e7;" horiz-adv-x="1758"
-d="M856 796c0 -111 -97 -202 -216 -202s-216 91 -216 202c0 112 97 202 216 202s216 -90 216 -202zM1358 796c0 -111 -96 -202 -216 -202c-119 0 -216 91 -216 202c0 112 97 202 216 202c120 0 216 -90 216 -202zM1583 616v667c0 115 -37 160 -143 160h-1112
-c-111 0 -142 -38 -142 -160v-673c237 -124 440 -102 551 -98c47 1 77 -8 95 -27c3 -3 6 -6 10 -9c21 -20 41 -36 61 -51c4 55 35 90 118 87c113 -5 321 -27 562 104zM1746 621c-64 -79 -186 -176 -372 -252c197 -671 -481 -778 -470 -434c0 -6 -1 185 -1 327
-c-15 3 -30 7 -48 11c0 -143 -1 -344 -1 -338c11 -344 -667 -237 -470 434c-186 76 -308 173 -372 252c-32 48 3 99 56 62c7 -5 15 -10 22 -15v694c0 96 72 174 161 174h1257c89 0 161 -78 161 -174v-694l21 15c53 37 88 -14 56 -62z" />
- <glyph glyph-name="square-o" unicode="&#xf096;" horiz-adv-x="1408"
-d="M1120 1280h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v832c0 88 -72 160 -160 160zM1408 1120v-832c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c159 0 288 -129 288 -288z" />
- <glyph glyph-name="hourglass-start" unicode="&#xf251;"
-d="M1408 1408c0 -370 -177 -638 -373 -768c196 -130 373 -398 373 -768h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96c0 370 177 638 373 768c-196 130 -373 398 -373 768h-96c-18 0 -32 14 -32 32v64
-c0 18 14 32 32 32h1472c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96zM1280 1408h-1024c0 -44 3 -87 9 -128h1006c6 41 9 84 9 128zM1280 -128c0 359 -198 624 -397 704h-230c-199 -80 -397 -345 -397 -704h1024z" />
- <glyph glyph-name="superpowers" unicode="&#xf2dd;" horiz-adv-x="1792"
-d="M1473 607c18 320 -227 585 -544 604c-315 19 -594 -221 -612 -538c-18 -320 227 -585 545 -604c315 -19 594 220 611 538zM1792 1536l-349 -348c159 -155 245 -371 231 -593c-22 -372 -308 -669 -675 -719l-999 -132l347 347c-159 155 -244 371 -231 593
-c23 373 308 670 676 720c333 44 667 88 1000 132z" />
- <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408"
-d="M1408 -160v-64c0 -17 -15 -32 -32 -32h-1344c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h1344c17 0 32 -15 32 -32zM1152 896c0 -383 -448 -417 -448 -672c0 -70 35 -163 67 -224l-4 1l1 -1c-276 127 -512 302 -512 640c0 383 448 417 448 672c0 70 -35 163 -66 224l3 -1
-l-1 1c276 -127 512 -302 512 -640z" />
- <glyph glyph-name="sellsy" unicode="&#xf213;" horiz-adv-x="2048"
-d="M1500 165v733c0 28 -23 51 -50 51h-93c-27 0 -50 -23 -50 -51v-733c0 -27 23 -50 50 -50h93c27 0 50 23 50 50zM1216 165v531c0 27 -23 50 -50 50h-101c-27 0 -50 -23 -50 -50v-531c0 -27 23 -50 50 -50h101c27 0 50 23 50 50zM924 165v429c0 27 -23 50 -50 50h-101
-c-27 0 -50 -23 -50 -50v-429c0 -27 23 -50 50 -50h101c27 0 50 23 50 50zM632 165v362c0 27 -23 50 -50 50h-101c-27 0 -50 -23 -50 -50v-362c0 -27 23 -50 50 -50h101c27 0 50 23 50 50zM2048 311c0 -222 -181 -402 -402 -402h-1244c-221 0 -402 180 -402 402
-c0 155 91 297 231 363c-7 24 -10 49 -10 73c0 151 123 274 274 274c66 0 130 -24 180 -67c60 244 280 417 532 417c302 0 548 -246 548 -548c0 -41 -4 -82 -14 -122c180 -44 307 -206 307 -390z" />
- <glyph glyph-name="fast-forward" unicode="&#xf050;" horiz-adv-x="1792"
-d="M45 -115c-25 -25 -45 -16 -45 19v1472c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v710c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v678c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-1408c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v678
-c-3 -7 -7 -13 -13 -19l-710 -710c-25 -25 -45 -16 -45 19v710c-3 -7 -7 -13 -13 -19z" />
- <glyph glyph-name="bell-slash" unicode="&#xf1f6;" horiz-adv-x="2019"
-d="M1544 684c51 -298 182 -458 298 -556c0 -70 -58 -128 -128 -128h-448c0 -141 -115 -256 -256 -256s-255 114 -256 255zM1010 -176c9 0 16 7 16 16s-7 16 -16 16c-79 0 -144 65 -144 144c0 9 -7 16 -16 16s-16 -7 -16 -16c0 -97 79 -176 176 -176zM2012 1424
-c11 -14 10 -34 -3 -46l-1872 -1622c-13 -11 -34 -10 -45 4l-84 96c-11 14 -10 34 3 45l186 161c-12 20 -19 42 -19 66c148 125 320 349 320 832c0 192 159 402 424 441c-5 12 -8 25 -8 39c0 53 43 96 96 96s96 -43 96 -96c0 -14 -3 -27 -8 -39c172 -25 299 -122 367 -240
-l418 363c13 11 34 10 45 -4z" />
- <glyph glyph-name="cubes" unicode="&#xf1b3;" horiz-adv-x="2176"
-d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416
-c0 -48 -27 -93 -71 -114l-448 -224c-18 -10 -37 -14 -57 -14s-39 4 -57 14l-448 224c-3 1 -5 2 -7 4c-2 -2 -4 -3 -7 -4l-448 -224c-18 -10 -37 -14 -57 -14s-39 4 -57 14l-448 224c-44 21 -71 66 -71 114v416c0 51 31 97 78 118l434 186v400c0 51 31 97 78 118l448 192
-c16 7 33 10 50 10s34 -3 50 -10l448 -192c47 -21 78 -67 78 -118v-400l434 -186c48 -21 78 -67 78 -118z" />
- <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898"
-d="M898 1066v-102c0 -18 -14 -32 -32 -32h-168c-31 -192 -178 -317 -405 -344c149 -159 308 -351 459 -536c8 -9 10 -23 4 -34c-5 -11 -16 -18 -29 -18h-195c-10 0 -19 4 -25 12c-161 193 -309 370 -498 571c-6 6 -9 14 -9 22v127c0 17 14 32 32 32h112
-c176 0 286 59 315 168h-427c-18 0 -32 14 -32 32v102c0 18 14 32 32 32h413c-38 75 -128 113 -268 113h-145c-18 0 -32 15 -32 32v133c0 18 14 32 32 32h832c18 0 32 -14 32 -32v-102c0 -18 -14 -32 -32 -32h-233c32 -41 53 -89 64 -144h171c18 0 32 -14 32 -32z" />
- <glyph glyph-name="hashtag" unicode="&#xf292;" horiz-adv-x="1728"
-d="M959 512l64 256h-254l-64 -256h254zM1727 1016l-56 -224c-4 -14 -16 -24 -31 -24h-327l-64 -256h311c10 0 19 -5 25 -12c6 -8 9 -18 6 -28l-56 -224c-3 -14 -16 -24 -31 -24h-327l-81 -328c-4 -14 -17 -24 -31 -24h-224c-10 0 -20 5 -26 12c-6 8 -8 18 -6 28l78 312h-254
-l-81 -328c-4 -14 -17 -24 -31 -24h-225c-9 0 -19 5 -25 12c-6 8 -8 18 -6 28l78 312h-311c-10 0 -19 5 -25 12c-6 8 -8 18 -6 28l56 224c4 14 16 24 31 24h327l64 256h-311c-10 0 -19 5 -25 12c-6 8 -9 18 -6 28l56 224c3 14 16 24 31 24h327l81 328c4 14 17 24 32 24h224
-c9 0 19 -5 25 -12c6 -8 8 -18 6 -28l-78 -312h254l81 328c4 14 17 24 32 24h224c9 0 19 -5 25 -12c6 -8 8 -18 6 -28l-78 -312h311c10 0 19 -5 25 -12c6 -8 8 -18 6 -28z" />
- <glyph glyph-name="file-text-o" unicode="&#xf0f6;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280zM384 736c0 18 14 32 32 32h704c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64zM1120 512c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704zM1120 256c18 0 32 -14 32 -32
-v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704z" />
- <glyph glyph-name="nextcloud" unicode="&#xf306;" horiz-adv-x="1792"
-d="M896 1049c225 0 409 -184 409 -409s-184 -409 -409 -409s-409 184 -409 409s184 409 409 409zM896 891c-139 0 -251 -112 -251 -251s112 -251 251 -251s251 112 251 251s-112 251 -251 251zM265 905c146 0 265 -119 265 -265s-119 -265 -265 -265s-265 119 -265 265
-s119 265 265 265zM265 748c-60 0 -107 -48 -107 -108s47 -108 107 -108s108 48 108 108s-48 108 -108 108zM1527 905c146 0 265 -119 265 -265s-119 -265 -265 -265s-265 119 -265 265s119 265 265 265zM1527 748c-60 0 -108 -48 -108 -108s48 -108 108 -108s107 48 107 108
-s-47 108 -107 108z" />
- <glyph glyph-name="hand-o-left" unicode="&#xf0a5;" horiz-adv-x="1792"
-d="M1376 128h32v640h-32c-106 0 -177 90 -241 163c-41 46 -79 92 -112 145c-14 22 -26 45 -38 68s-62 136 -89 136c-85 0 -160 -32 -160 -128c0 -128 96 -193 96 -256h-576c-67 0 -128 -60 -128 -128c0 -69 59 -128 128 -128h331c-21 -24 -35 -71 -35 -103
-c0 -47 19 -87 53 -119c-12 -21 -18 -45 -18 -69c0 -46 23 -103 65 -126c-3 -18 -4 -37 -4 -56c0 -118 73 -167 184 -167c199 0 369 128 544 128zM1664 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1792 768v-640c0 -71 -57 -128 -128 -128h-288
-c-63 0 -162 -37 -223 -59c-102 -37 -207 -69 -317 -69c-184 0 -318 104 -317 295l1 5c-40 50 -61 114 -61 178c0 14 1 29 3 43c-21 37 -34 77 -37 119h-169c-140 0 -256 117 -256 257c0 138 118 255 256 255h374c-15 41 -22 84 -22 128c0 169 129 256 288 256
-c134 0 177 -171 235 -264c30 -47 64 -88 100 -129c29 -33 97 -119 145 -119h288c71 0 128 -57 128 -128z" />
- <glyph glyph-name="vimeo" unicode="&#xf27d;" horiz-adv-x="1628"
-d="M1627 1018c-7 -158 -118 -375 -332 -651c-222 -287 -408 -431 -562 -431c-95 0 -175 88 -240 263c-44 160 -88 321 -132 482c-48 175 -101 262 -157 262c-12 0 -54 -25 -127 -76l-77 98c80 71 159 143 238 212c106 94 187 141 241 146c127 12 204 -74 234 -259
-c31 -200 54 -325 66 -373c37 -166 76 -249 120 -249c34 0 85 53 154 161c68 108 104 190 109 246c9 93 -27 139 -109 139c-39 0 -79 -9 -121 -26c80 262 233 389 459 382c167 -5 246 -114 236 -326z" />
+ <glyph glyph-name="long-arrow-left" unicode="&#xf177;" horiz-adv-x="1728"
+d="M1728 736v-192c0 -18 -14 -32 -32 -32h-1248v-224c0 -13 -7 -24 -19 -29s-25 -3 -35 5l-384 350c-6 6 -10 14 -10 23s4 18 10 24l384 354c10 9 23 11 35 6c11 -5 19 -16 19 -29v-224h1248c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="long-arrow-right" unicode="&#xf178;" horiz-adv-x="1728"
+d="M1728 643c0 -9 -4 -18 -10 -24l-384 -354c-10 -9 -23 -11 -35 -6c-11 5 -19 16 -19 29v224h-1248c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h1248v224c0 13 7 24 19 29s25 3 35 -5l384 -350c6 -6 10 -14 10 -23z" />
+ <glyph glyph-name="long-arrow-up" unicode="&#xf176;" horiz-adv-x="767"
+d="M765 1043c-5 -11 -16 -19 -29 -19h-224v-1248c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v1248h-224c-13 0 -24 7 -29 19s-3 25 5 35l350 384c6 6 14 10 23 10s18 -4 24 -10l355 -384c8 -10 10 -23 5 -35z" />
+ <glyph glyph-name="low-vision" unicode="&#xf2a8;" horiz-adv-x="1792"
+d="M335 180c-2 0 -4 1 -6 2c-117 78 -234 206 -308 325c-14 20 -21 44 -21 69c0 52 36 94 65 133c116 158 271 288 452 365c-15 27 -110 193 -110 211c0 12 7 23 17 29c20 11 110 64 128 64c11 0 22 -6 28 -16l124 -229c63 13 128 19 192 19c362 0 684 -205 876 -507
+c13 -20 20 -44 20 -69s-7 -49 -20 -69c-119 -187 -293 -342 -497 -429c15 -27 110 -193 110 -211c0 -12 -6 -23 -17 -29c-20 -11 -110 -64 -127 -64c-12 0 -23 6 -29 16l-124 229l-64 119l-444 820l7 7c-34 -14 -67 -29 -99 -47c12 -23 489 -899 489 -906c0 -5 -4 -8 -9 -9
+c-22 -5 -50 -3 -72 -3c-11 0 -56 -2 -60 7l-456 841c-29 -21 -56 -44 -82 -68c22 -39 404 -742 404 -748c0 -8 -5 -10 -11 -10c-17 0 -150 41 -155 50l-106 197l-224 413c-28 -34 -54 -69 -78 -106c13 -19 30 -39 41 -59c14 -26 176 -321 176 -327c0 -5 -5 -10 -10 -10z
+M1165 282l49 -91c187 76 341 216 450 385c-111 171 -269 313 -459 389c89 -85 139 -202 139 -325c0 -141 -66 -274 -179 -358zM848 896c0 -26 22 -48 48 -48c55 0 108 -22 147 -61s61 -92 61 -147c0 -26 22 -48 48 -48s48 22 48 48c0 168 -136 304 -304 304
+c-26 0 -48 -22 -48 -48zM1214 961l-9 4l7 -7z" />
+ <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1637"
+d="M1163 955l293 293l-107 107l-293 -293zM1610 1248c0 -17 -6 -33 -18 -45l-1286 -1286c-12 -12 -28 -18 -45 -18s-33 6 -45 18l-198 198c-12 12 -18 28 -18 45s6 33 18 45l1286 1286c12 12 28 18 45 18s33 -6 45 -18l198 -198c12 -12 18 -28 18 -45zM259 1438l98 -30
+l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM609 1276l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1539 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM899 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+ <glyph glyph-name="magnet" unicode="&#xf076;"
+d="M1536 704v-128c0 -408 -323 -704 -768 -704s-768 296 -768 704v128c0 35 29 64 64 64h384c35 0 64 -29 64 -64v-128c0 -183 213 -192 256 -192s256 9 256 192v128c0 35 29 64 64 64h384c35 0 64 -29 64 -64zM512 1344v-384c0 -35 -29 -64 -64 -64h-384
+c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h384c35 0 64 -29 64 -64zM1536 1344v-384c0 -35 -29 -64 -64 -64h-384c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h384c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024"
+d="M1024 832v-416c0 -53 -43 -96 -96 -96s-96 43 -96 96v352h-64v-912c0 -62 -50 -112 -112 -112s-112 50 -112 112v464h-64v-464c0 -62 -50 -112 -112 -112s-112 50 -112 112v912h-64v-352c0 -53 -43 -96 -96 -96s-96 43 -96 96v416c0 106 86 192 192 192h640
+c106 0 192 -86 192 -192zM736 1280c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224z" />
+ <glyph glyph-name="map" unicode="&#xf279;" horiz-adv-x="1792"
+d="M512 1536c17 0 32 -15 32 -32v-1472c0 -12 -7 -23 -17 -28l-480 -256c-5 -3 -10 -4 -15 -4c-17 0 -32 15 -32 32v1472c0 12 7 23 17 28l480 256c5 3 10 4 15 4zM1760 1536c17 0 32 -15 32 -32v-1472c0 -12 -7 -23 -17 -28l-480 -256c-5 -3 -10 -4 -15 -4
+c-17 0 -32 15 -32 32v1472c0 12 7 23 17 28l480 256c5 3 10 4 15 4zM640 1536c5 0 10 -1 14 -3l512 -256c11 -6 18 -17 18 -29v-1472c0 -17 -15 -32 -32 -32c-5 0 -10 1 -14 3l-512 256c-11 6 -18 17 -18 29v1472c0 17 15 32 32 32z" />
+ <glyph glyph-name="map-marker" unicode="&#xf041;" horiz-adv-x="1024"
+d="M768 896c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1024 896c0 -61 -7 -124 -33 -179l-364 -774c-21 -44 -67 -71 -115 -71s-94 27 -114 71l-365 774c-26 55 -33 118 -33 179c0 283 229 512 512 512s512 -229 512 -512z" />
+ <glyph glyph-name="map-o" unicode="&#xf278;" horiz-adv-x="2048"
+d="M2020 1525c17 -12 28 -32 28 -53v-1408c0 -26 -16 -50 -40 -59l-640 -256c-16 -7 -32 -7 -48 0l-616 246l-616 -246c-8 -4 -16 -5 -24 -5c-13 0 -25 4 -36 11c-17 12 -28 32 -28 53v1408c0 26 16 50 40 59l640 256c16 7 32 7 48 0l616 -246l616 246c20 8 42 6 60 -6z
+M736 1390v-1270l576 -230v1270zM128 1173v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+ <glyph glyph-name="map-pin" unicode="&#xf276;" horiz-adv-x="1024"
+d="M512 448c44 0 87 5 128 15v-655c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v655c41 -10 84 -15 128 -15zM512 1536c283 0 512 -229 512 -512s-229 -512 -512 -512s-512 229 -512 512s229 512 512 512zM512 1312c18 0 32 14 32 32s-14 32 -32 32
+c-194 0 -352 -158 -352 -352c0 -18 14 -32 32 -32s32 14 32 32c0 159 129 288 288 288z" />
+ <glyph glyph-name="map-signs" unicode="&#xf277;" horiz-adv-x="1718"
+d="M1708 1239c13 -13 13 -33 0 -46l-141 -141c-18 -18 -43 -28 -68 -28h-1344c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h576v64c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-64h512c25 0 50 -10 68 -28zM731 320h256v-512c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64
+v512zM1563 768c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64h-1344c-25 0 -50 10 -68 28l-141 141c-13 13 -13 33 0 46l141 141c18 18 43 28 68 28h512v192h256v-192h576z" />
+ <glyph glyph-name="mariadb" unicode="&#xf352;" horiz-adv-x="2276"
+d="M2266 1355c8 -7 15 -22 6 -82v-2c-12 -80 -65 -124 -118 -161c-6 -4 -11 -8 -17 -12c-42 -29 -85 -59 -114 -104c-18 -28 -35 -102 -53 -187c-15 -71 -33 -152 -57 -233c-57 -195 -133 -320 -231 -382l-41 -22s6 50 8 73v10c0 6 1 10 1 15c1 16 -10 11 -11 8
+c-12 -31 -33 -81 -48 -110c-72 -139 -172 -226 -304 -265c-36 -14 -100 -14 -100 -14l46 49c68 94 135 200 143 367v0v1c-1 1 -1 1 -2 1h-2c-1 -1 -1 -2 -2 -3c-13 -16 -21 -40 -31 -67c-15 -43 -30 -87 -64 -108l-6 -2c-18 -2 -47 -3 -65 -3h-2c-17 0 -33 0 -52 1
+c-48 3 -96 10 -143 16c-63 8 -129 16 -191 16h-8c-40 0 -103 -9 -141 -21c-59 -19 -119 -57 -178 -95c-44 -28 -86 -55 -125 -72c-23 -10 -43 -20 -62 -29c-66 -32 -118 -57 -216 -57h-2c-6 0 -16 2 -22 5c-15 20 11 57 56 116c8 11 17 20 22 28c-4 4 -13 9 -18 11
+c-17 9 -42 27 -56 40c-13 13 -37 30 -53 39l-13 6c13 23 43 40 43 40c18 10 42 16 74 16c39 0 85 -9 128 -16s82 -14 115 -14c28 0 47 6 58 16c27 27 67 74 88 106c25 35 72 84 105 111c13 11 33 26 53 39c50 35 85 46 133 62c18 6 37 12 61 21c52 20 110 38 170 57
+c66 21 134 42 197 66c65 25 148 59 215 109c12 9 32 25 43 36c64 63 111 144 156 222c83 144 170 292 364 312c33 3 58 5 87 6c24 1 61 11 82 21l6 3c15 8 44 23 66 23h1c7 0 16 -3 21 -7z" />
+ <glyph glyph-name="markdown" unicode="&#xf353;" horiz-adv-x="2265"
+d="M2102 1331c90 0 163 -73 163 -163v-1089c0 -90 -73 -164 -163 -164h-1939c-90 0 -163 74 -163 164v1089c0 90 73 163 163 163h1939zM1274 199v849h-283l-212 -283l-213 283h-283v-850h283v425l213 -272l212 272v-425zM1697 128l356 495h-212v425h-283v-425h-213z" />
+ <glyph glyph-name="mars" unicode="&#xf222;"
+d="M1472 1408c35 0 64 -29 64 -64v-416c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v262l-382 -383c79 -98 126 -223 126 -359c0 -318 -258 -576 -576 -576s-576 258 -576 576s258 576 576 576c136 0 261 -47 359 -126l382 382h-261c-18 0 -32 14 -32 32v64
+c0 18 14 32 32 32h416zM576 0c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
+ <glyph glyph-name="mars-double" unicode="&#xf227;" horiz-adv-x="1920"
+d="M1536 1120c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c98 -123 147 -286 117 -461c-42 -243 -240 -434 -484 -468c-286 -40 -539 131 -626 380c-316 16 -565 288 -544 613c18 274 235 502 508 533
+c161 19 311 -31 426 -122l255 254h-134c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c40 -50 71 -107 93 -169c124 -6 237 -52 328 -124l255 254h-134c-18 0 -32 14 -32 32v64z
+M1024 704c0 20 -2 39 -4 58c-215 -33 -380 -218 -380 -442c0 -20 2 -39 4 -58c215 33 380 218 380 442zM128 704c0 -226 169 -413 387 -443c-2 19 -3 39 -3 59c0 282 204 517 473 566c-70 157 -227 266 -409 266c-247 0 -448 -201 -448 -448zM1088 -128
+c247 0 448 201 448 448c0 226 -169 413 -387 443c2 -19 3 -39 3 -59c0 -282 -204 -517 -473 -566c70 -157 227 -266 409 -266z" />
+ <glyph glyph-name="mars-stroke" unicode="&#xf229;"
+d="M1472 1408c35 0 64 -29 64 -64v-416c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v262l-213 -214l140 -140c12 -13 12 -33 0 -45l-46 -46c-12 -12 -32 -12 -45 0l-140 141l-78 -79c79 -98 126 -223 126 -359c0 -318 -258 -576 -576 -576s-576 258 -576 576
+s258 576 576 576c136 0 261 -47 359 -126l78 78l-172 172c-12 13 -12 33 0 45l46 46c12 12 32 12 45 0l172 -172l213 213h-261c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h416zM576 0c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
+ <glyph glyph-name="mars-stroke-h" unicode="&#xf22b;" horiz-adv-x="1919"
+d="M1901 621c25 -25 25 -65 0 -90l-294 -294c-12 -13 -33 -13 -45 0l-45 45c-13 12 -13 33 0 45l185 185h-294v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-132c-32 -288 -276 -512 -572 -512c-340 0 -611 294 -572 642c30 270 253 486 525 508
+c317 25 586 -207 619 -510h132v224c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-224h294l-185 185c-13 12 -13 33 0 45l45 45c12 13 33 13 45 0zM576 128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
+ <glyph glyph-name="mars-stroke-v" unicode="&#xf22a;" horiz-adv-x="1152"
+d="M640 892c288 -32 512 -276 512 -572c0 -340 -294 -611 -642 -572c-270 30 -486 253 -508 525c-25 317 207 586 510 619v132h-160c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h160v165l-92 -92c-13 -12 -33 -12 -45 0l-46 46c-12 12 -12 32 0 45l202 201c25 25 65 25 90 0
+l202 -201c12 -13 12 -33 0 -45l-46 -46c-12 -12 -32 -12 -45 0l-92 92v-165h160c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-160v-132zM576 -128c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
+ <glyph glyph-name="mastodon" unicode="&#xf2e1;"
+d="M1503 425c-23 -116 -202 -243 -408 -268c-108 -13 -214 -25 -327 -20c-185 8 -330 44 -330 44c0 -18 1 -35 3 -51c24 -182 181 -193 329 -198c150 -5 284 37 284 37l6 -136s-105 -56 -292 -66c-103 -6 -230 3 -379 42c-323 85 -379 430 -388 779c-3 104 -1 201 -1 283
+c0 357 235 462 235 462c118 54 320 77 531 79h5c211 -2 413 -25 531 -79c0 0 234 -105 234 -462c0 0 3 -263 -33 -446zM1260 843c0 88 -22 160 -68 211c-47 52 -107 79 -183 79c-88 0 -154 -34 -198 -101l-43 -72l-43 72c-44 67 -110 101 -198 101c-76 0 -136 -27 -183 -79
+c-45 -52 -68 -123 -68 -211v-432h171v420c0 88 38 133 112 133c82 0 124 -54 124 -159v-229h170v229c0 105 42 159 124 159c74 0 112 -45 112 -133v-420h171v432v0z" />
<glyph glyph-name="mastodon-alt" unicode="&#xf2e2;"
d="M766 1408h5c211 -2 413 -25 531 -79c0 0 234 -105 234 -462c0 0 3 -263 -33 -446c-23 -116 -202 -243 -408 -268c-108 -13 -214 -25 -327 -20c-185 8 -330 45 -330 45c0 -18 1 -36 3 -52c24 -182 181 -193 329 -198c150 -5 284 37 284 37l6 -135s-105 -57 -292 -67
c-103 -6 -230 3 -379 42c-323 85 -380 430 -388 779c-3 104 -1 201 -1 283c0 357 235 462 235 462c118 54 320 77 531 79v0zM350 839c-64 0 -115 -52 -115 -116s51 -115 115 -115s116 51 116 115s-52 116 -116 116v0zM768 839c-64 0 -116 -52 -116 -116s52 -115 116 -115
s116 51 116 115s-52 116 -116 116v0zM1186 839c-64 0 -116 -52 -116 -116s52 -115 116 -115s115 51 115 115s-51 116 -115 116v0z" />
- <glyph glyph-name="ravelry" unicode="&#xf2d9;" horiz-adv-x="2080"
-d="M1095 -197c-4 1 -7 2 -11 4c0 0 -329 193 -440 505c-37 6 -115 24 -175 37c87 -283 329 -499 626 -546zM454 409l168 -28c-57 171 -64 366 -64 366c-67 -65 -103 -154 -121 -224c3 -39 8 -77 17 -114zM564 1018c-31 -46 -56 -96 -77 -148c33 35 60 58 74 68
-c-2 30 3 80 3 80zM2001 584c0 436 -352 790 -784 790c-200 0 -382 -76 -521 -201c-21 -41 -35 -93 -45 -160c213 181 593 136 593 136c95 -4 84 -88 83 -114c-346 29 -516 -70 -684 -213c0 0 33 -320 109 -450c438 -20 771 218 771 218c42 30 79 33 87 -19
-c6 -42 9 -99 -39 -121c-146 -68 -307 -111 -467 -134c-104 -15 -162 -19 -317 -16c148 -344 518 -438 518 -438c116 -19 204 -4 263 15c256 130 433 398 433 707zM2075 621c-7 -68 -18 -147 -40 -212c-90 -267 -215 -441 -500 -600c-26 -18 -54 -35 -82 -44
-c-51 -18 -106 -22 -163 -16c-24 -2 -48 -3 -73 -3c-381 0 -703 260 -800 615c-3 0 -6 1 -9 1c-23 -180 110 -423 110 -423s8 -12 54 -82c-255 135 -262 533 -262 533c-61 23 -273 95 -310 154c0 0 166 -91 309 -109c-1 1 2 32 2 32c9 122 51 217 94 290
-c28 137 90 261 176 365c15 62 39 136 81 214c18 34 35 56 81 77c304 142 604 178 912 18c295 -154 455 -476 420 -810z" />
- <glyph glyph-name="hand-o-right" unicode="&#xf0a4;" horiz-adv-x="1792"
-d="M256 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 768c0 68 -61 128 -128 128h-576c0 63 96 128 96 256c0 96 -75 128 -160 128c-28 0 -79 -116 -90 -139c-12 -22 -24 -44 -37 -65c-33 -53 -71 -99 -112 -145c-64 -73 -135 -163 -241 -163
-h-32v-640h32c175 0 346 -128 540 -128c112 0 189 47 189 167c0 19 -2 38 -5 56c42 23 65 80 65 126c0 24 -6 48 -18 69c34 32 53 72 53 119c0 32 -14 79 -35 103h331c69 0 128 59 128 128zM1792 769c0 -140 -116 -257 -256 -257h-169c-3 -42 -16 -82 -37 -119
-c2 -14 3 -29 3 -43c0 -64 -21 -128 -60 -178c2 -189 -127 -300 -312 -300c-112 0 -218 31 -322 69c-61 22 -160 59 -223 59h-288c-71 0 -128 57 -128 128v640c0 71 57 128 128 128h288c48 0 116 86 145 119c36 41 70 82 100 129c58 93 101 264 235 264
-c159 0 288 -87 288 -256c0 -44 -7 -87 -22 -128h374c138 0 256 -117 256 -255z" />
- <glyph glyph-name="object-group" unicode="&#xf247;" horiz-adv-x="2048"
-d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
-h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
- <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792"
-d="M960 1280c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1792 352v-352c0 -13 -8 -25 -20 -30c-4 -1 -8 -2 -12 -2c-8 0 -16 3 -23 9l-93 93c-157 -189 -439 -310 -748 -310s-591 121 -748 310l-93 -93c-6 -6 -15 -9 -23 -9c-4 0 -8 1 -12 2
-c-12 5 -20 17 -20 30v352c0 18 14 32 32 32h352c13 0 25 -8 30 -20s2 -25 -7 -35l-100 -100c90 -121 263 -209 461 -236v647h-192c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h192v163c-76 44 -128 126 -128 221c0 141 115 256 256 256s256 -115 256 -256
-c0 -95 -52 -177 -128 -221v-163h192c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-192v-647c198 27 371 115 461 236l-100 100c-9 10 -12 23 -7 35s17 20 30 20h352c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="mastodon-square" unicode="&#xf300;"
+d="M288 1408h960c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288zM766 1189v0c-140 -1 -275 -17 -354 -53c0 0 -156 -70 -156 -308c0 -55 -1 -119 1 -188c6 -233 43 -463 258 -520
+c99 -26 184 -32 253 -28c124 7 195 45 195 45l-5 90s-88 -28 -188 -25c-99 3 -204 11 -220 133c-1 11 -2 22 -2 34c0 0 97 -24 220 -30c75 -3 146 4 218 13c138 16 257 102 272 179c24 122 22 297 22 297c0 238 -156 308 -156 308c-79 36 -214 52 -354 53h-4zM608 1003v0
+c58 0 103 -23 132 -68l28 -47l28 47c29 45 74 68 132 68c51 0 92 -18 123 -53c31 -34 45 -81 45 -140v-288h-114v280c0 59 -25 88 -75 88c-55 0 -82 -35 -82 -105v-153h-114v153c0 70 -27 105 -82 105c-50 0 -75 -29 -75 -88v-280h-114v288c0 59 15 105 45 140
+c31 35 72 53 123 53z" />
+ <glyph glyph-name="matrix-org" unicode="&#xf313;"
+d="M40 1373v-1466h106v-35h-146v1536h146v-35h-106zM491 908v-74h2c20 28 44 51 72 66c28 16 60 23 96 23c35 0 66 -7 95 -20s50 -37 65 -71c16 24 38 46 66 64s61 27 99 27c29 0 56 -4 81 -11s45 -18 63 -34s31 -35 41 -60s15 -56 15 -91v-367h-150v311c0 18 -1 36 -2 52
+s-6 30 -12 42s-16 22 -28 29s-29 10 -50 10s-38 -4 -51 -12s-24 -19 -31 -32s-13 -27 -15 -44s-4 -34 -4 -51v-305h-150v307c0 16 0 33 -1 49s-4 30 -9 44c-5 13 -15 24 -27 32s-31 12 -55 12c-7 0 -16 -2 -28 -5s-23 -9 -34 -18s-20 -21 -28 -38s-11 -38 -11 -65v-318h-151
+v548h142zM1496 -93v1466h-106v35h146v-1536h-146v35h106z" />
+ <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1755"
+d="M1745 763l-164 -763h-334l178 832c8 35 3 67 -15 88c-17 21 -47 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276c135 0 258 -56 337 -154c80 -98 109 -231 81 -363z" />
+ <glyph glyph-name="meanpath" unicode="&#xf20c;"
+d="M1311 694v-114c0 -32 -19 -52 -51 -52h-202c-32 0 -52 20 -52 52v114c0 32 20 52 52 52h202c32 0 51 -20 51 -52zM821 464v250c0 71 -47 118 -118 118h-133c-45 0 -78 -19 -96 -52c-18 33 -51 52 -96 52h-130c-70 0 -118 -47 -118 -118v-250c0 -15 7 -22 21 -22h55
+c15 0 22 7 22 22v230c0 32 19 52 52 52h94c32 0 52 -20 52 -52v-230c0 -15 6 -22 21 -22h54c15 0 22 7 22 22v230c0 32 20 52 52 52h97c32 0 51 -20 51 -52v-230c0 -15 7 -22 22 -22h55c14 0 21 7 21 22zM1410 560v154c0 71 -48 118 -119 118h-264c-71 0 -119 -47 -119 -118
+v-410c0 -15 8 -21 22 -21h55c15 0 21 6 21 21v180c19 -26 49 -42 94 -42h191c71 0 119 48 119 118zM1536 1176v-1072c0 -128 -104 -232 -232 -232h-1072c-128 0 -232 104 -232 232v1072c0 128 104 232 232 232h1072c128 0 232 -104 232 -232z" />
+ <glyph glyph-name="medium" unicode="&#xf23a;"
+d="M182 999v6c0 15 -8 34 -19 44l-144 173v26h446l344 -755l302 755h425v-26l-123 -117c-8 -6 -14 -19 -14 -29c0 -2 1 -4 1 -6v-864c0 -2 -1 -4 -1 -6c0 -10 6 -23 14 -29l120 -117v-26h-602v26l124 120c12 12 12 16 12 35v698l-345 -876h-47l-401 876v-587
+c0 -3 -1 -8 -1 -11c0 -18 10 -44 23 -57l162 -195v-26h-458v26l161 195c12 13 22 38 22 55c0 4 0 9 -1 13v679z" />
+ <glyph glyph-name="medium-square" unicode="&#xf2f8;"
+d="M0 1404h1536v-1536h-1536v1536zM257 1057v-17l97 -116c7 -7 13 -20 13 -30v-4v-456v-9c0 -12 -6 -28 -14 -36l-109 -132v-17h308v17l-109 132c-9 9 -15 26 -15 38v7v395l270 -589h31l232 589v-469c0 -13 0 -16 -8 -24l-84 -80v-18h405v18l-80 79c-5 4 -10 12 -10 19
+c0 1 1 3 1 4v580c0 1 -1 3 -1 4c0 7 5 15 10 19l82 79v17h-285l-203 -507l-232 507h-299z" />
+ <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792"
+d="M1280 416v192c0 18 -14 32 -32 32h-224v224c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32v-224h-224c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h224v-224c0 -18 14 -32 32 -32h192c18 0 32 14 32 32v224h224c18 0 32 14 32 32zM640 1152h512v128h-512v-128z
+M256 1152v-1280h-32c-123 0 -224 101 -224 224v832c0 123 101 224 224 224h32zM1440 1152v-1280h-1088v1280h160v160c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h160zM1792 928v-832c0 -123 -101 -224 -224 -224h-32v1280h32c123 0 224 -101 224 -224z" />
+ <glyph glyph-name="meetup" unicode="&#xf2e0;" horiz-adv-x="1847"
+d="M1297 302c-11 72 -143 16 -151 95c-11 112 153 354 140 448c-12 84 -68 102 -117 103c-47 1 -59 -7 -75 -16c-10 -6 -23 -17 -41 1c-22 21 -39 41 -68 45c-43 7 -62 -7 -93 -34c-12 -10 -42 -45 -70 -32c-12 6 -54 27 -84 40c-57 25 -140 -16 -170 -70
+c-45 -80 -133 -396 -146 -438c-30 -93 38 -170 129 -165c39 2 64 16 89 61c14 26 146 377 156 394c7 12 31 28 51 18c20 -11 24 -33 21 -53c-4 -34 -98 -248 -101 -272c-12 -80 94 -93 135 -14c13 25 160 324 173 344c15 22 26 29 41 28c11 0 29 -3 25 -38
+c-5 -33 -123 -253 -136 -307c-16 -72 23 -145 87 -177c40 -20 219 -55 205 39zM346 86c4 -20 -8 -39 -28 -43c-19 -4 -38 8 -42 28c-4 19 8 39 27 43s39 -8 43 -28zM916 -177c16 -23 10 -54 -12 -70c-23 -16 -54 -10 -70 13c-15 23 -9 54 13 70c23 16 54 10 69 -13zM140 635
+c-24 -36 -72 -45 -107 -20c-35 24 -44 73 -20 108c24 36 72 45 107 21c35 -25 44 -73 20 -109zM1430 -42c25 -37 16 -88 -21 -114c-37 -25 -87 -16 -112 21s-16 88 20 114c37 26 87 16 113 -21zM1542 562c92 -151 53 -350 -92 -452c-61 -43 -130 -62 -199 -60
+c-42 -165 -243 -226 -368 -114c-4 -3 -9 -6 -13 -10c-137 -95 -323 -61 -418 78c-34 50 -51 107 -53 164c-229 38 -315 329 -144 489c-99 164 2 376 187 402c88 232 377 342 573 190c236 78 477 -103 458 -354c144 -44 185 -234 69 -333zM418 1222c18 -27 12 -64 -15 -83
+c-26 -18 -63 -12 -81 15s-12 64 15 83c26 18 63 12 81 -15zM577 1503c5 -22 -9 -44 -31 -49s-44 9 -49 32c-4 22 10 44 32 49s44 -9 48 -32zM1763 555c6 -27 -11 -53 -37 -58c-26 -6 -52 11 -57 37c-6 27 11 53 37 59c26 5 52 -12 57 -38zM1099 1448c21 -36 10 -84 -27 -106
+c-36 -22 -83 -10 -104 26c-22 37 -10 85 26 107s83 10 105 -27zM1845 792c5 -20 -8 -39 -27 -44c-20 -4 -39 9 -43 28c-4 20 8 40 28 44c19 4 38 -8 42 -28zM1654 1033c20 -30 13 -71 -16 -92c-30 -20 -71 -13 -91 17s-13 71 17 92c29 21 70 13 90 -17z" />
<glyph glyph-name="meh-o" unicode="&#xf11a;"
d="M1152 448c0 -35 -29 -64 -64 -64h-640c-35 0 -64 29 -64 64s29 64 64 64h640c35 0 64 -29 64 -64zM640 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1152 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
s128 -57 128 -128zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="file-image-o" unicode="&#xf1c5;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280zM1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512c-106 0 -192 86 -192 192s86 192 192 192s192 -86 192 -192s-86 -192 -192 -192z" />
- <glyph glyph-name="liberapay" unicode="&#xf2e9;" horiz-adv-x="1191"
-d="M468 1404v0l-222 -918c-4 -19 -6 -37 -7 -53s3 -30 9 -42s18 -23 33 -30s36 -12 64 -14l-48 -196c-75 0 -134 9 -177 29s-74 47 -93 81s-28 73 -27 117s6 91 18 141l203 847zM849 1025v0c60 0 111 -9 154 -27s78 -44 106 -75s49 -68 62 -110s20 -86 20 -134h-1
-c0 -78 -12 -149 -38 -213s-61 -120 -106 -167s-99 -83 -162 -109s-133 -39 -207 -39c-36 0 -72 3 -108 9l-72 -288h-236l265 1103c42 13 91 24 146 34s113 16 177 16zM819 825v0c-34 0 -66 -3 -96 -9l-111 -464c18 -4 40 -7 67 -7c41 0 79 8 113 23s63 37 87 65
-s43 61 56 100s20 81 20 128c0 46 -11 84 -31 116s-55 48 -105 48z" />
+ <glyph glyph-name="mercury" unicode="&#xf223;" horiz-adv-x="1152"
+d="M830 1220c190 -94 322 -290 322 -516c0 -296 -224 -540 -512 -572v-132h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-288 32 -512 276 -512 572
+c0 226 132 422 322 516c-105 61 -187 157 -228 273c-8 21 8 43 30 43h69c13 0 24 -8 29 -20c58 -139 195 -236 354 -236s296 97 354 236c5 12 16 20 37 20h61c22 0 38 -22 30 -43c-41 -116 -123 -212 -228 -273zM576 256c247 0 448 201 448 448s-201 448 -448 448
+s-448 -201 -448 -448s201 -448 448 -448z" />
+ <glyph glyph-name="microchip" unicode="&#xf2db;"
+d="M192 256v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 512v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 768v-128h-112c-9 0 -16 7 -16 16v16
+h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 1024v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16h48v16c0 9 7 16 16 16h112zM192 1280v-128h-112c-9 0 -16 7 -16 16v16h-48c-9 0 -16 7 -16 16v32c0 9 7 16 16 16
+h48v16c0 9 7 16 16 16h112zM1280 1440v-1472c0 -53 -43 -96 -96 -96h-832c-53 0 -96 43 -96 96v1472c0 53 43 96 96 96h832c53 0 96 -43 96 -96zM1536 208v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16z
+M1536 464v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16zM1536 720v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16zM1536 976v-32
+c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16zM1536 1232v-32c0 -9 -7 -16 -16 -16h-48v-16c0 -9 -7 -16 -16 -16h-112v128h112c9 0 16 -7 16 -16v-16h48c9 0 16 -7 16 -16z" />
+ <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152"
+d="M1152 832v-128c0 -296 -224 -540 -512 -572v-132h256c35 0 64 -29 64 -64s-29 -64 -64 -64h-640c-35 0 -64 29 -64 64s29 64 64 64h256v132c-288 32 -512 276 -512 572v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -247 201 -448 448 -448s448 201 448 448v128
+c0 35 29 64 64 64s64 -29 64 -64zM896 1216v-512c0 -176 -144 -320 -320 -320s-320 144 -320 320v512c0 176 144 320 320 320s320 -144 320 -320z" />
+ <glyph glyph-name="microphone-slash" unicode="&#xf131;" horiz-adv-x="1382"
+d="M258 591l-101 -101c-27 66 -42 138 -42 214v128c0 35 29 64 64 64s64 -29 64 -64v-128c0 -39 6 -77 15 -113zM1372 1193l-361 -361v-128c0 -176 -144 -320 -320 -320c-38 0 -75 7 -109 19l-96 -96c61 -32 131 -51 205 -51c247 0 448 201 448 448v128c0 35 29 64 64 64
+s64 -29 64 -64v-128c0 -296 -224 -540 -512 -572v-132h256c35 0 64 -29 64 -64s-29 -64 -64 -64h-640c-35 0 -64 29 -64 64s29 64 64 64h256v132c-85 9 -165 38 -235 81l-254 -254c-13 -13 -33 -13 -46 0l-82 82c-13 13 -13 33 0 46l1234 1234c13 13 33 13 46 0l82 -82
+c13 -13 13 -33 0 -46zM992 1325l-621 -621v512c0 176 144 320 320 320c138 0 256 -89 301 -211z" />
+ <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408"
+d="M1408 800v-192c0 -53 -43 -96 -96 -96h-1216c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h1216c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="minus-circle" unicode="&#xf056;"
+d="M1216 576v128c0 35 -29 64 -64 64h-768c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h768c35 0 64 29 64 64zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="minus-square" unicode="&#xf146;"
+d="M1280 576v128c0 35 -29 64 -64 64h-896c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h896c35 0 64 29 64 64zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="minus-square-o" unicode="&#xf147;" horiz-adv-x="1408"
+d="M1152 736v-64c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h832c18 0 32 -14 32 -32zM1280 288v832c0 88 -72 160 -160 160h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160zM1408 1120v-832
+c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="mixcloud" unicode="&#xf289;" horiz-adv-x="2304"
+d="M1645 438c0 80 -51 148 -121 175c-5 -31 -13 -62 -23 -92c-10 -32 -40 -52 -72 -52c-8 0 -16 1 -24 3c-41 14 -62 57 -49 97c15 46 23 94 23 143c0 250 -204 454 -455 454c-180 0 -342 -107 -414 -267c70 -18 135 -54 188 -106c30 -30 30 -79 0 -109s-79 -30 -109 0
+c-48 48 -112 75 -180 75c-141 0 -256 -114 -256 -255s115 -255 256 -255h1046c105 0 190 85 190 189zM1798 438c0 -189 -154 -342 -343 -342h-1046c-226 0 -409 183 -409 408c0 205 152 374 349 403c83 244 314 412 575 412c315 0 575 -241 605 -548
+c153 -33 269 -170 269 -333zM2048 438c0 -114 -33 -224 -97 -319c-15 -22 -39 -33 -64 -33c-15 0 -30 4 -43 13c-35 23 -44 71 -20 106c47 69 71 149 71 233c0 83 -24 164 -71 233c-24 35 -15 82 20 106s83 14 107 -21c64 -94 97 -204 97 -318zM2304 438
+c0 -159 -46 -312 -134 -443c-15 -22 -39 -34 -64 -34c-14 0 -29 4 -42 13c-35 24 -45 71 -21 106c70 106 108 230 108 358s-38 252 -108 357c-24 35 -14 83 21 106c35 24 82 15 106 -21c88 -130 134 -283 134 -442z" />
+ <glyph glyph-name="mobile" unicode="&#xf10b;" horiz-adv-x="768"
+d="M464 128c0 44 -36 80 -80 80s-80 -36 -80 -80s36 -80 80 -80s80 36 80 80zM672 288v704c0 17 -15 32 -32 32h-512c-17 0 -32 -15 -32 -32v-704c0 -17 15 -32 32 -32h512c17 0 32 15 32 32zM480 1136c0 9 -7 16 -16 16h-160c-9 0 -16 -7 -16 -16s7 -16 16 -16h160
+c9 0 16 7 16 16zM768 1152v-1024c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v1024c0 70 58 128 128 128h512c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="modx" unicode="&#xf285;" horiz-adv-x="1728"
+d="M1395 827l-614 386l92 151h855zM373 562l-184 116v858l1183 -743zM1392 697l147 -95v-858l-532 335zM1355 718l-500 -802h-855l356 571z" />
+ <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920"
+d="M768 384h384v96h-128v448h-114l-148 -137l77 -80c24 21 39 32 55 57h2v-288h-128v-96zM1280 640c0 -182 -110 -416 -320 -416s-320 234 -320 416s110 416 320 416s320 -234 320 -416zM1792 384v512c-141 0 -256 115 -256 256h-1152c0 -141 -115 -256 -256 -256v-512
+c141 0 256 -115 256 -256h1152c0 141 115 256 256 256zM1920 1216v-1152c0 -35 -29 -64 -64 -64h-1792c-35 0 -64 29 -64 64v1152c0 35 29 64 64 64h1792c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="moon" unicode="&#xf328;" horiz-adv-x="1471"
+d="M1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" />
+ <glyph glyph-name="moon-o" unicode="&#xf186;" horiz-adv-x="1471"
+d="M1262 233c-36 -6 -73 -9 -110 -9c-371 0 -672 301 -672 672c0 127 37 251 104 357c-266 -79 -456 -323 -456 -613c0 -353 287 -640 640 -640c193 0 374 88 494 233zM1465 318c-125 -271 -399 -446 -697 -446c-423 0 -768 345 -768 768c0 415 325 752 739 767
+c28 1 51 -15 61 -39c11 -25 4 -54 -15 -72c-114 -104 -177 -246 -177 -400c0 -300 244 -544 544 -544c79 0 155 17 228 51c25 11 53 6 72 -13s24 -48 13 -72z" />
+ <glyph glyph-name="motorcycle" unicode="&#xf21c;" horiz-adv-x="2304"
+d="M2301 500c32 -281 -197 -517 -476 -499c-214 14 -392 185 -414 399c-16 152 44 289 146 381l-71 107c-126 -105 -206 -262 -206 -438c0 -36 -28 -66 -64 -66h-325c-31 -217 -217 -384 -443 -384c-247 0 -448 201 -448 448s201 448 448 448c53 0 104 -10 152 -27l24 45
+c-77 69 -178 110 -304 110h-64c-35 0 -64 29 -64 64s29 64 64 64h128c224 0 338 -92 384 -128h627l-85 128h-222c-39 0 -70 35 -63 75c5 31 35 53 66 53h253c21 0 41 -11 53 -28l70 -105l114 114c12 12 29 19 46 19h101c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-179
+l115 -172c81 39 175 55 275 36c191 -35 340 -195 362 -388zM448 128c155 0 284 110 314 256h-314c-22 0 -43 12 -55 31c-11 19 -12 43 -1 63l147 277c-29 8 -59 13 -91 13c-176 0 -320 -144 -320 -320s144 -320 320 -320zM1856 128c176 0 320 144 320 320s-144 320 -320 320
+c-43 0 -83 -9 -121 -24l174 -260c20 -30 12 -70 -17 -89c-11 -8 -24 -11 -36 -11c-21 0 -41 10 -53 29l-174 260c-57 -58 -93 -137 -93 -225c0 -176 144 -320 320 -320z" />
+ <glyph glyph-name="mouse-pointer" unicode="&#xf245;" horiz-adv-x="1152"
+d="M1133 493c19 -18 24 -46 14 -69c-10 -24 -33 -40 -59 -40h-382l201 -476c14 -33 -2 -70 -34 -84l-177 -75c-33 -14 -70 2 -84 34l-191 452l-312 -312c-12 -12 -28 -19 -45 -19c-8 0 -17 2 -24 5c-24 10 -40 33 -40 59v1504c0 26 16 49 40 59c7 3 16 5 24 5
+c17 0 33 -6 45 -19z" />
+ <glyph glyph-name="music" unicode="&#xf001;"
+d="M1536 1312v-1120c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v537l-768 -237v-709c0 -141 -211 -192 -320 -192s-320 51 -320 192s211 192 320 192c66 0 132 -12 192 -39v967c0 42 28 79 68 92l832 256c9 3 18 4 28 4
+c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="mysql" unicode="&#xf354;" horiz-adv-x="1767"
+d="M1627 160c-4 24 -64 54 -83 68c-38 28 -79 57 -120 82c-22 13 -59 23 -83 34c-32 13 -104 26 -122 51c-36 47 -61 105 -86 161c-25 58 -56 118 -81 177c-13 29 -20 54 -34 82c-88 169 -218 311 -375 411c-52 32 -109 63 -173 83c-36 11 -80 5 -118 13h-25
+c-22 6 -39 29 -56 41c-37 25 -75 42 -119 60c-16 7 -60 24 -76 11c-10 -2 -15 -6 -17 -16c-10 -14 -1 -36 5 -49c18 -38 43 -62 66 -94c20 -29 46 -62 60 -93c31 -67 46 -142 75 -209c11 -25 27 -54 43 -77c13 -18 37 -31 44 -54c14 -24 -22 -103 -30 -128
+c-31 -99 -25 -236 11 -321c14 -34 28 -73 66 -83c2 2 0 2 5 3c8 66 11 129 34 181c13 32 39 56 57 82c12 -7 13 -30 20 -44c16 -37 32 -78 51 -115c40 -77 85 -152 135 -219c17 -24 40 -50 62 -72c10 -8 21 -13 28 -24h2v-3c-36 13 -58 50 -87 72c-54 41 -120 102 -157 161
+c-16 34 -32 65 -49 99v3c-7 -10 -4 -20 -8 -34c-16 -60 -4 -128 -58 -150c-61 -25 -107 41 -126 71c-61 100 -78 268 -35 404c10 30 11 66 28 90c-4 22 -20 28 -30 41c-17 23 -32 49 -45 74c-25 49 -43 108 -62 161c-8 22 -11 44 -19 64c-14 31 -42 62 -62 90
+c-28 40 -107 117 -75 195c50 124 227 29 295 -14c17 -11 36 -34 55 -42c30 -1 61 -3 91 -4c56 -13 109 -25 153 -50c207 -121 341 -245 465 -449c26 -43 40 -90 62 -137c30 -70 63 -143 98 -209c16 -31 27 -67 49 -93c8 -12 33 -16 47 -23c40 -20 88 -36 125 -60
+c70 -43 138 -94 199 -147c23 -20 38 -49 60 -71v-11c-19 -6 -39 -12 -58 -17c-42 -11 -79 -8 -120 -19c-25 -7 -57 -17 -83 -19c1 -1 2 -3 2 -3c16 -44 100 -81 138 -107c47 -34 90 -74 125 -121c12 -12 24 -23 36 -35c8 -12 12 -27 20 -38v-4c-17 6 -26 21 -39 31
+c-26 18 -53 40 -79 57c-46 29 -98 45 -145 74c-26 17 -52 36 -77 55c-23 17 -49 50 -63 74c-8 13 -9 28 -19 38c2 23 31 23 49 30c62 26 137 36 233 34zM402 1204c10 -10 25 -16 32 -28c6 -8 8 -17 15 -25c0 -29 -9 -48 -26 -60l-2 -2c-10 19 -18 38 -28 57
+c-12 17 -28 31 -38 50h-3v2c14 4 30 6 50 6z" />
+ <glyph glyph-name="neuter" unicode="&#xf22c;" horiz-adv-x="1152"
+d="M1152 960c0 -296 -224 -540 -512 -572v-612c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v612c-288 32 -512 276 -512 572c0 318 258 576 576 576s576 -258 576 -576zM576 512c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
+ <glyph glyph-name="newspaper-o" unicode="&#xf1ea;" horiz-adv-x="2048"
+d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960c0 -35 29 -64 64 -64
+s64 29 64 64zM1920 192v1088h-1536v-1088c0 -22 -4 -44 -11 -64h1483c35 0 64 29 64 64zM2048 1408v-1216c0 -106 -86 -192 -192 -192h-1664c-106 0 -192 86 -192 192v1088h256v128h1792z" />
+ <glyph glyph-name="nextcloud" unicode="&#xf306;" horiz-adv-x="1792"
+d="M896 1049c225 0 409 -184 409 -409s-184 -409 -409 -409s-409 184 -409 409s184 409 409 409zM896 891c-139 0 -251 -112 -251 -251s112 -251 251 -251s251 112 251 251s-112 251 -251 251zM265 905c146 0 265 -119 265 -265s-119 -265 -265 -265s-265 119 -265 265
+s119 265 265 265zM265 748c-60 0 -107 -48 -107 -108s47 -108 107 -108s108 48 108 108s-48 108 -108 108zM1527 905c146 0 265 -119 265 -265s-119 -265 -265 -265s-265 119 -265 265s119 265 265 265zM1527 748c-60 0 -108 -48 -108 -108s48 -108 108 -108s107 48 107 108
+s-47 108 -107 108z" />
+ <glyph glyph-name="nextcloud-square" unicode="&#xf307;"
+d="M257 1408h1022c142 0 257 -115 257 -257v-1022c0 -142 -115 -257 -257 -257h-1022c-142 0 -257 115 -257 257v1022c0 142 115 257 257 257zM772 969v0c-145 0 -268 -98 -307 -230c-34 69 -105 118 -187 118c-114 0 -208 -94 -208 -208s94 -207 208 -207
+c82 0 153 48 187 117c39 -132 162 -230 307 -230s267 98 306 230c34 -69 105 -117 187 -117c114 0 208 93 208 207s-94 208 -208 208c-82 0 -153 -49 -187 -118c-39 132 -161 230 -306 230zM772 846v0c106 0 196 -88 196 -197s-87 -196 -196 -196s-197 87 -197 196
+s88 197 197 197zM278 733c47 0 84 -37 84 -84s-37 -84 -84 -84s-84 37 -84 84s37 84 84 84zM1265 733c47 0 84 -37 84 -84s-37 -84 -84 -84s-84 37 -84 84s37 84 84 84z" />
<glyph glyph-name="nodejs" unicode="&#xf308;"
d="M768 -225c-24 0 -46 6 -67 17l-211 126c-32 17 -17 24 -7 27c43 14 51 18 96 43c5 3 11 1 16 -2l162 -97c6 -3 14 -3 19 0l634 367c6 3 10 10 10 18v733c0 8 -4 14 -10 17l-634 366c-6 3 -14 3 -19 0l-635 -366c-6 -3 -9 -11 -9 -17v-733c0 -6 3 -15 9 -18l174 -100
c94 -48 152 8 152 64v723c0 10 8 19 19 19h82c10 0 19 -8 19 -19v-723c0 -126 -69 -199 -188 -199c-37 0 -65 0 -146 40l-167 95c-41 24 -67 68 -67 116v733c0 48 26 92 67 116l634 368c40 22 94 22 134 0l634 -368c41 -24 67 -68 67 -116v-733c0 -48 -26 -92 -67 -116
l-634 -367c-21 -10 -45 -14 -67 -14zM964 279c-278 0 -336 127 -336 235c0 10 8 19 19 19h83c10 0 17 -6 17 -16c13 -84 49 -125 218 -125c134 0 191 29 191 101c0 41 -16 72 -224 93c-173 17 -282 56 -282 194c0 129 109 205 290 205c204 0 303 -70 316 -223
c0 -5 -2 -9 -5 -14c-3 -3 -7 -7 -12 -7h-83c-8 0 -16 7 -18 15c-19 87 -68 116 -198 116c-146 0 -164 -51 -164 -89c0 -46 21 -61 218 -86c196 -25 288 -62 288 -199c-2 -140 -116 -219 -318 -219z" />
- <glyph glyph-name="calculator" unicode="&#xf1ec;" horiz-adv-x="1664"
-d="M384 0c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM768 0c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM384 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1152 0
-c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM768 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM384 768c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1152 384
-c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM768 768c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1536 0v384c0 70 -58 128 -128 128s-128 -58 -128 -128v-384c0 -70 58 -128 128 -128s128 58 128 128z
-M1152 768c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1536 1088v256c0 35 -29 64 -64 64h-1280c-35 0 -64 -29 -64 -64v-256c0 -35 29 -64 64 -64h1280c35 0 64 29 64 64zM1536 768c0 71 -57 128 -128 128s-128 -57 -128 -128
-s57 -128 128 -128s128 57 128 128zM1664 1408v-1536c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1536c0 70 58 128 128 128h1408c70 0 128 -58 128 -128z" />
- <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1921"
-d="M1918 1016c15 -41 -32 -137 -150 -294c-194 -258 -215 -234 -55 -383c154 -143 186 -212 191 -221c0 0 64 -112 -71 -113l-256 -4c-55 -11 -128 39 -128 39c-96 66 -186 237 -256 215c0 0 -72 -23 -70 -177c1 -33 -15 -51 -15 -51s-18 -19 -53 -22h-115
-c-253 -16 -476 217 -476 217s-244 252 -458 755c-14 33 1 49 1 49s15 19 57 19l274 2c26 -4 44 -18 44 -18s16 -11 24 -32c45 -112 103 -214 103 -214c100 -206 168 -241 207 -220c0 0 51 31 40 280c-4 90 -29 131 -29 131c-23 31 -66 40 -85 43c-15 2 10 38 43 54
-c49 24 136 25 239 24c81 -1 104 -6 135 -13c95 -23 63 -111 63 -323c0 -68 -13 -163 36 -194c21 -14 73 -2 201 216c0 0 60 104 107 225c8 22 25 31 25 31s16 9 38 6l288 2c87 11 101 -29 101 -29z" />
+ <glyph glyph-name="nordcast" unicode="&#xf355;" horiz-adv-x="2279"
+d="M1935 80c-32 0 -60 3 -89 6c-82 10 -154 32 -218 66c-49 26 -93 60 -130 100c-38 41 -68 88 -90 139c-28 66 -44 141 -46 225v47v3l-2 5c-2 6 -1 2 -16 38c-11 25 -13 32 -18 43l-6 13l-7 13c-8 15 -7 14 -14 29c-4 9 -8 15 -12 23c-6 11 -6 11 -10 18l-4 7l-7 9
+c-4 5 -7 9 -7 9v1l-1 -2c-1 -1 -4 -5 -7 -9l-6 -8l-4 -7c-4 -7 -4 -8 -10 -19l-12 -24s-9 -17 -14 -27l-7 -13l-5 -13c-5 -11 -8 -19 -19 -45c-7 -17 -14 -33 -15 -35c-2 -4 -5 -12 -7 -16l-6 -13l-7 -19c-4 -9 -10 -23 -14 -32l-5 -15l-8 -17c-7 -17 -7 -16 -20 -47
+c-7 -17 -14 -32 -14 -33c-2 -6 -14 -31 -15 -33c0 -1 -4 -8 -8 -16c-6 -11 -9 -17 -14 -28c-6 -12 -8 -17 -14 -28c-4 -8 -8 -14 -8 -15c-1 -1 -14 -25 -15 -27s-4 -4 -5 -6c-1 -1 -4 -6 -8 -11s-10 -15 -14 -20c-7 -9 -8 -11 -10 -13c-1 -2 -15 -17 -17 -19s-5 -5 -13 -12
+c-11 -10 -12 -10 -15 -13c-3 -2 -3 -2 -14 -10c-8 -5 -10 -7 -15 -9c-3 -1 -4 -3 -13 -7c-8 -4 -11 -5 -15 -6c-5 -2 -7 -3 -18 -5c-10 -2 -13 -2 -17 -3c-6 -1 -7 -1 -21 -1h-14c-5 0 -10 1 -14 2c-2 0 -16 4 -18 5c-5 1 -10 2 -15 4c-2 1 -15 8 -18 9c-5 2 -9 4 -14 7
+c-4 3 -15 11 -16 12c-2 2 -6 4 -8 6c-3 3 -17 16 -19 18c-3 3 -4 4 -12 13c-10 12 -9 10 -19 23c-4 5 -10 14 -14 19c-9 12 -10 13 -12 17c-1 2 -15 25 -16 27c-1 1 -4 7 -8 15c-6 11 -8 17 -14 28c-5 11 -8 17 -14 28c-4 8 -8 15 -8 16s-4 9 -8 18c-6 14 -8 18 -20 47
+c-13 31 -14 32 -21 48c-4 9 -8 17 -8 18s-6 15 -13 33l-13 32l-7 17c-7 16 -8 16 -21 47c-11 26 -14 34 -19 45l-5 13l-7 14c-5 10 -9 16 -14 26l-12 24c-6 11 -6 12 -10 19l-4 7l-6 8c-2 3 -5 6 -7 9l-1 1s-3 -4 -7 -9l-7 -9l-4 -7c-4 -7 -4 -8 -10 -19l-12 -24
+s-9 -17 -14 -27l-7 -13l-6 -13c-4 -10 -7 -18 -14 -34c-5 -11 -9 -21 -10 -23s-20 -50 -43 -109s-43 -107 -43 -107l-183 112s6 17 14 37l15 36v2c1 8 3 16 6 23c1 2 14 34 15 37c0 1 3 9 7 18c7 16 8 17 21 48c10 23 15 34 18 41c6 13 5 12 7 18c1 1 1 5 2 6l1 -1s-1 1 0 2
+c0 1 4 7 8 15c6 11 9 17 14 28c4 8 8 17 10 20l7 14c2 4 5 8 5 9c1 2 15 26 16 27c2 4 3 5 13 18c4 5 10 14 14 19c7 10 8 11 10 13s15 17 17 19c2 3 4 5 13 13c9 9 10 9 13 11s4 3 11 8c13 9 15 10 21 13c2 1 16 8 19 9c5 2 12 5 18 6c3 1 14 3 16 3c4 1 9 2 14 2
+c2 0 3 1 13 1c12 0 14 -1 18 -1s8 0 12 -1c2 0 16 -3 18 -4c5 -1 11 -4 16 -6c3 -1 18 -8 20 -9c6 -3 7 -4 18 -11c10 -7 11 -8 15 -11c2 -2 3 -3 12 -11l14 -14c5 -5 15 -16 16 -17c2 -2 3 -4 10 -13c4 -5 10 -14 14 -19s8 -10 8 -11c1 -1 3 -5 4 -7s15 -25 16 -27
+c0 -1 4 -7 8 -15c6 -11 8 -16 14 -28c5 -11 9 -17 15 -28c4 -8 8 -15 8 -16s4 -9 8 -18c6 -14 8 -18 20 -47c13 -31 13 -32 20 -48c4 -9 8 -17 8 -18s7 -16 14 -34l12 -32l8 -16c7 -16 7 -16 20 -47c11 -27 14 -34 19 -45l6 -13l7 -14l13 -26l12 -24c6 -11 6 -11 10 -19
+l5 -7l6 -8c3 -4 6 -8 7 -9s1 -2 1 -2s2 5 6 10l7 9l5 7c4 7 4 8 10 19c4 9 7 14 12 24l13 26l7 14l6 13c5 11 8 18 19 44c4 9 9 23 13 32c0 1 4 8 8 17l7 16l8 21c5 12 10 26 13 33l5 12l8 17c7 17 7 17 20 48s16 38 27 62c1 3 2 5 10 20c6 11 9 17 14 27c5 11 8 16 14 28
+c4 8 8 14 8 15c1 2 14 25 15 27c2 4 4 5 13 17c4 5 9 13 13 18c10 14 9 12 20 25c8 9 9 10 12 13c2 2 17 15 19 17s5 4 7 6c2 1 2 1 10 7c13 9 14 10 28 16c10 5 12 5 16 7c5 2 7 3 18 5c11 3 14 2 20 3c5 0 5 1 18 1c14 0 14 0 19 -1c6 -1 8 0 19 -3s14 -4 20 -6
+c3 -1 5 -2 13 -6c10 -5 14 -6 18 -9c2 -1 4 -2 12 -8c9 -6 10 -6 13 -9c3 -2 3 -2 14 -12c8 -7 10 -9 12 -11s15 -18 17 -20s3 -4 10 -14c4 -5 11 -14 15 -19s7 -10 8 -11s3 -5 4 -6v0l1 1s3 4 4 5c20 29 44 55 71 80c13 12 34 29 48 39c66 47 145 78 235 93
+c38 6 78 9 121 10c64 1 125 -5 183 -19c47 -11 92 -28 136 -48c7 -3 9 -5 18 -9l9 -4v-112v-111c-1 1 -14 9 -16 10c-30 20 -59 35 -88 48c-60 27 -121 41 -188 43h-38c-48 -2 -90 -11 -127 -29c-24 -11 -46 -26 -66 -44c-6 -6 -14 -13 -20 -20c-24 -26 -43 -58 -57 -93
+c-16 -39 -26 -83 -29 -133c-1 -13 -1 -24 -1 -39c0 -13 0 -20 1 -32c1 -26 5 -52 10 -76c13 -61 37 -112 73 -153c7 -8 15 -16 23 -23c16 -15 35 -27 54 -37c3 -1 9 -5 12 -6c36 -17 77 -26 122 -29c8 0 12 -1 21 -1c33 0 66 2 97 8c35 6 67 16 100 30c37 15 73 35 111 60
+l6 4v-224l-9 -4c-9 -4 -12 -6 -18 -9c-63 -30 -130 -49 -198 -59c-30 -4 -58 -6 -90 -7c-4 0 -25 -1 -29 -1z" />
+ <glyph glyph-name="object-group" unicode="&#xf247;" horiz-adv-x="2048"
+d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
+h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+ <glyph glyph-name="object-ungroup" unicode="&#xf248;" horiz-adv-x="2304"
+d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
+v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
<glyph glyph-name="odnoklassniki" unicode="&#xf263;" horiz-adv-x="1078"
d="M539 629c-250 0 -454 203 -454 453c0 251 204 454 454 454s454 -203 454 -454c0 -250 -204 -453 -454 -453zM539 1306c-123 0 -223 -100 -223 -224c0 -123 100 -223 223 -223s223 100 223 223c0 124 -100 224 -223 224zM1062 574c44 -90 -6 -133 -120 -207
c-96 -61 -228 -85 -315 -94l73 -72l267 -267c40 -41 40 -107 0 -147l-12 -13c-41 -40 -107 -40 -148 0c-67 68 -165 166 -267 268l-267 -268c-41 -40 -107 -40 -147 0l-12 13c-41 40 -41 106 0 147c68 68 165 166 267 267l72 72c-86 9 -220 32 -317 94
c-114 74 -164 117 -120 207c26 51 97 94 191 20c0 0 127 -101 332 -101s332 101 332 101c94 74 165 31 191 -20z" />
- <glyph glyph-name="linkedin" unicode="&#xf0e1;"
-d="M349 911v-991h-330v991h330zM370 1217c1 -95 -71 -171 -186 -171h-2c-111 0 -182 76 -182 171c0 97 74 171 186 171c113 0 183 -74 184 -171zM1536 488v-568h-329v530c0 133 -48 224 -167 224c-91 0 -145 -61 -169 -120c-8 -22 -11 -51 -11 -81v-553h-329
-c4 898 0 991 0 991h329v-144h-2c43 68 121 167 299 167c217 0 379 -142 379 -446z" />
- <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1026"
-d="M603 0h-172c-18 0 -32 14 -32 32v330h-288c-18 0 -32 14 -32 32v103c0 18 14 32 32 32h288v85h-288c-18 0 -32 14 -32 32v104c0 17 14 32 32 32h214l-321 578c-5 10 -5 22 0 32c6 10 17 16 28 16h194c12 0 23 -7 29 -18l215 -425c24 -47 40 -87 56 -125
-c17 43 39 85 58 129l191 420c5 12 17 19 29 19h191c11 0 21 -6 27 -16c6 -9 6 -21 1 -31l-313 -579h215c18 0 32 -15 32 -32v-104c0 -18 -14 -32 -32 -32h-290v-85h290c18 0 32 -14 32 -32v-103c0 -18 -14 -32 -32 -32h-290v-330c0 -18 -15 -32 -32 -32z" />
- <glyph glyph-name="skype" unicode="&#xf17e;"
-d="M1173 473c0 174 -169 234 -311 266l-104 24c-76 18 -133 31 -133 89c0 53 56 77 144 77c157 0 160 -115 257 -115c65 0 104 51 104 109c0 115 -191 190 -380 190c-173 0 -374 -75 -374 -278c0 -168 112 -228 258 -263l146 -36c89 -22 144 -32 144 -96
-c0 -51 -57 -90 -145 -90c-185 0 -195 154 -302 154c-70 0 -101 -50 -101 -105c0 -123 188 -223 413 -223c188 0 384 94 384 297zM1536 256c0 -212 -172 -384 -384 -384c-88 0 -169 30 -234 80c-48 -10 -99 -16 -150 -16c-389 0 -704 315 -704 704c0 51 6 102 16 150
-c-50 65 -80 146 -80 234c0 212 172 384 384 384c88 0 169 -30 234 -80c48 10 99 16 150 16c389 0 704 -315 704 -704c0 -51 -6 -102 -16 -150c50 -65 80 -146 80 -234z" />
- <glyph glyph-name="envelope-square" unicode="&#xf199;"
-d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960zM1280 352v436c-19 -21 -40 -40 -64 -55c-94 -62 -191 -120 -284 -184c-47 -33 -105 -69 -164 -69s-117 36 -164 69
-c-93 64 -191 121 -284 185c-23 15 -41 37 -64 54v-436c0 -53 43 -96 96 -96h832c53 0 96 43 96 96zM1280 925c0 54 -40 99 -96 99h-832c-53 0 -96 -43 -96 -96c0 -54 56 -113 98 -141c88 -59 179 -114 267 -172c38 -25 101 -71 147 -71s109 46 147 71c89 58 178 115 267 174
-c39 26 98 86 98 136z" />
- <glyph glyph-name="question-circle-o" unicode="&#xf29c;"
-d="M880 336v-160c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v160c0 18 14 32 32 32h160c18 0 32 -14 32 -32zM1136 832c0 -142 -99 -198 -172 -239c-52 -30 -84 -49 -84 -81v-32c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v68c0 123 88 162 159 194
-c60 28 97 47 97 92c0 58 -73 101 -139 101c-35 0 -72 -11 -95 -27c-22 -15 -43 -37 -80 -83c-6 -8 -15 -12 -25 -12c-7 0 -14 2 -19 6l-108 82c-13 10 -16 29 -7 43c82 129 197 192 349 192c164 0 348 -130 348 -304zM768 1280c-353 0 -640 -287 -640 -640
-s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="ship" unicode="&#xf21a;" horiz-adv-x="2010"
-d="M1792 -19c25 25 65 25 90 0l128 -128l-90 -90l-83 83l-83 -83c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83
-l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-128 128l90 90l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83
-c25 25 65 25 90 0l83 -83zM218 19c-25 -25 -65 -25 -90 0l-128 128l90 90l83 -82l83 82c25 25 65 25 90 0l83 -82l64 64v293l-210 314c-23 35 -7 83 33 97l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58c40 -14 56 -62 33 -97l-210 -314v-293l19 18
-c25 25 65 25 90 0l83 -82l83 82c25 25 65 25 90 0l128 -128l-90 -90l-83 83l-83 -83c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83
-c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83zM621 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
- <glyph glyph-name="dashcube" unicode="&#xf210;" horiz-adv-x="1408"
-d="M0 856c0 173 138 322 314 322h742l352 358v-1470c0 -174 -138 -322 -314 -322h-780c-176 0 -314 148 -314 322v790zM1232 102l-176 180v425c0 61 -49 112 -110 112h-484c-61 0 -110 -51 -110 -112v-492c0 -61 49 -113 110 -113h770z" />
+ <glyph glyph-name="odnoklassniki-square" unicode="&#xf264;"
+d="M927 956c0 -88 -71 -159 -159 -159s-159 71 -159 159s71 159 159 159s159 -71 159 -159zM1141 593c-18 36 -69 67 -136 14c0 0 -91 -72 -237 -72s-237 72 -237 72c-67 53 -118 22 -136 -14c-32 -64 4 -95 85 -148c69 -44 165 -61 226 -67l-51 -52
+c-72 -72 -142 -142 -191 -190c-29 -29 -29 -76 0 -105l9 -9c29 -29 76 -29 105 0l191 191c72 -73 142 -143 191 -191c29 -29 76 -29 105 0l9 9c29 29 29 76 0 105l-191 190l-52 52c62 6 156 23 225 67c81 53 117 84 85 148zM1092 956c0 179 -145 324 -324 324
+s-324 -145 -324 -324s145 -324 324 -324s324 145 324 324zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="open-collective" unicode="&#xf336;" horiz-adv-x="1789"
+d="M1466 642c0 118 -33 222 -89 311l229 230c112 -151 183 -339 183 -541s-71 -390 -183 -541l-229 231c56 89 89 197 89 310zM895 69v0c117 0 224 33 313 89l230 -231c-150 -113 -337 -183 -543 -183c-492 0 -895 395 -895 894s403 898 895 898c201 0 388 -70 538 -183
+l-229 -231c-89 61 -192 94 -309 94c-314 0 -572 -259 -572 -574s258 -573 572 -573z" />
+ <glyph glyph-name="opencart" unicode="&#xf23d;" horiz-adv-x="2304"
+d="M1524 -25c0 -91 -73 -164 -164 -164s-165 73 -165 164s74 165 165 165s164 -74 164 -165zM775 -25c0 -91 -74 -164 -165 -164s-164 73 -164 164s73 165 164 165s165 -74 165 -165zM0 1469c295 -311 572 -357 1660 -357s610 -242 -62 -842c213 370 945 698 -255 680
+c-1151 -17 -1219 333 -1343 519z" />
+ <glyph glyph-name="openid" unicode="&#xf19b;" horiz-adv-x="1792"
+d="M1086 1536v-1536l-272 -128c-460 41 -814 286 -814 583c0 286 330 524 767 577v-172c-286 -50 -496 -212 -496 -405c0 -204 234 -373 543 -412v1360zM1755 954l37 -390l-525 114l147 83c-78 46 -174 80 -280 99v172c185 -22 351 -78 481 -157z" />
+ <glyph glyph-name="opera" unicode="&#xf26a;" horiz-adv-x="1792"
+d="M1493 1308c-105 70 -228 110 -359 110c-213 0 -401 -109 -533 -273c-96 -120 -163 -290 -168 -484v-42c5 -194 72 -364 168 -484c132 -164 320 -273 533 -273c131 0 254 40 359 110c-158 -142 -368 -228 -597 -228c-14 0 -29 0 -43 1c-475 22 -853 414 -853 895
+c0 495 401 896 896 896h3c228 -1 436 -87 594 -228zM1792 640c0 -261 -112 -495 -290 -659c-68 -41 -143 -63 -222 -63c-92 0 -179 30 -255 84c203 74 353 331 353 638c0 306 -149 563 -352 638c76 53 162 83 254 83c81 0 157 -23 226 -65c176 -164 286 -397 286 -656z" />
<glyph glyph-name="optin-monster" unicode="&#xf23c;" horiz-adv-x="2132"
d="M396 -139c-10 -21 -39 -50 -64 -60c-35 -12 -78 11 -80 35c-2 31 75 87 108 93c32 6 47 -42 36 -68zM1737 -139c-11 26 4 74 35 68c33 -6 111 -62 108 -93c-1 -24 -45 -47 -79 -35c-26 10 -55 39 -64 60zM1785 -30c-21 43 15 121 70 114c58 -6 183 -94 183 -160
c0 -43 -58 -72 -119 -55c-45 12 -116 65 -134 101zM346 -30c-18 -36 -88 -89 -133 -101c-61 -17 -119 12 -119 55c0 66 125 154 183 160c55 7 91 -71 69 -114zM1076 1094c106 0 192 -80 192 -179s-86 -179 -192 -179s-191 80 -191 179c0 15 2 28 5 42c16 -25 46 -43 80 -43
@@ -1835,247 +2078,331 @@ c-29 -3 -58 -6 -87 -10c2 -3 3 -7 4 -10zM425 -118c2 9 3 19 3 30c-21 86 -69 184 -1
c-8 -5 -19 -9 -29 -13c-1 -3 -1 -6 -2 -9c17 -10 29 -22 22 -37c-8 -15 -32 -28 -56 -34c-8 -10 -19 -18 -29 -24h-1c-1 -50 -1 -100 1 -150c14 -25 26 -51 35 -73zM497 -113c382 -15 764 -13 1145 0c-136 79 -274 153 -428 196c-51 -23 -103 -42 -156 -57
c-8 -3 -8 -3 -16 0c-44 14 -86 30 -129 49c-149 -43 -286 -108 -416 -188h-1v-1c1 0 1 0 1 1zM1681 -67c3 42 16 87 28 120c8 22 19 47 33 71l-1 -1c2 51 3 102 3 153c-11 6 -21 15 -30 25c-24 5 -48 19 -56 33c-7 15 5 28 22 38c-1 2 -2 6 -2 9c-11 3 -20 7 -28 12
c-117 -109 -242 -210 -383 -284c144 -43 281 -104 414 -176zM2073 -90c11 115 -161 227 -245 202c-54 -16 -103 -114 -124 -200c0 -11 1 -21 3 -30c14 -66 81 -110 147 -107c71 3 172 63 219 135z" />
+ <glyph glyph-name="orcid" unicode="&#xf337;" horiz-adv-x="1792"
+d="M1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896zM604 233v411v338h-108v-749h108zM762 982v-750h293c247 0 397 183 397 375c0 177 -121 375 -398 375h-292zM870 329v556h166c210 0 306 -128 306 -278
+c0 -92 -56 -278 -300 -278h-172zM621 1138c0 38 -32 71 -71 71s-70 -32 -70 -71c0 -38 31 -70 70 -70s71 32 71 70z" />
+ <glyph glyph-name="outdent" unicode="&#xf03b;" horiz-adv-x="1792"
+d="M384 992v-576c0 -17 -15 -32 -32 -32c-8 0 -17 3 -23 9l-288 288c-6 6 -9 15 -9 23s3 17 9 23l288 288c6 6 15 9 23 9c17 0 32 -15 32 -32zM1792 224v-192c0 -17 -15 -32 -32 -32h-1728c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32zM1792 608
+v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 992v-192c0 -17 -15 -32 -32 -32h-1088c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1088c17 0 32 -15 32 -32zM1792 1376v-192c0 -17 -15 -32 -32 -32h-1728
+c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1728c17 0 32 -15 32 -32z" />
+ <glyph glyph-name="pagelines" unicode="&#xf18c;" horiz-adv-x="1402"
+d="M1402 433c-201 -499 -683 -197 -683 -197c-148 -299 -392 -491 -674 -492c-25 0 -45 20 -45 45s20 44 45 44c235 1 440 156 574 402c-150 -58 -433 -102 -590 300c398 164 581 -41 651 -166c36 89 62 186 79 291c0 0 -510 -80 -546 358c435 175 557 -280 557 -280
+c6 61 12 192 12 195c0 0 -388 269 -139 603c455 -157 224 -593 224 -593c2 -6 2 -87 0 -122c0 0 165 325 498 210c-15 -489 -518 -388 -518 -388c-16 -100 -41 -195 -73 -283c0 0 303 335 628 73z" />
+ <glyph glyph-name="paint-brush" unicode="&#xf1fc;" horiz-adv-x="1790"
+d="M1615 1536c91 0 175 -68 175 -163c0 -53 -21 -104 -45 -151c-78 -148 -340 -637 -465 -752c-61 -57 -133 -91 -218 -91c-169 0 -307 144 -307 312c0 80 33 158 92 212l638 579c35 32 81 54 130 54zM706 502c52 -101 147 -177 257 -206l1 -71c6 -285 -192 -481 -478 -481
+c-339 0 -486 270 -486 577c37 -25 166 -128 208 -128c25 0 46 14 55 37c85 222 218 262 443 272z" />
+ <glyph glyph-name="paper-plane" unicode="&#xf1d8;" horiz-adv-x="1792"
+d="M1764 1525c21 -15 31 -39 27 -64l-256 -1536c-3 -19 -15 -35 -32 -45c-9 -5 -20 -8 -31 -8c-8 0 -16 2 -24 5l-453 185l-242 -295c-12 -15 -30 -23 -49 -23c-7 0 -15 1 -22 4c-25 9 -42 33 -42 60v349l864 1059l-1069 -925l-395 162c-23 9 -38 30 -40 55
+c-1 24 11 47 32 59l1664 960c10 6 21 9 32 9c13 0 26 -4 36 -11z" />
+ <glyph glyph-name="paper-plane-o" unicode="&#xf1d9;" horiz-adv-x="1792"
+d="M1764 1525c21 -15 31 -39 27 -64l-256 -1536c-3 -19 -15 -35 -32 -45c-9 -5 -20 -8 -31 -8c-8 0 -16 2 -24 5l-527 215l-298 -327c-12 -14 -29 -21 -47 -21c-8 0 -16 1 -23 4c-25 10 -41 34 -41 60v452l-472 193c-23 9 -38 30 -40 55c-2 24 11 47 32 59l1664 960
+c21 13 48 12 68 -2zM1422 26l221 1323l-1434 -827l336 -137l863 639l-478 -797z" />
+ <glyph glyph-name="paperclip" unicode="&#xf0c6;" horiz-adv-x="1400"
+d="M1400 151c0 -156 -119 -275 -275 -275c-88 0 -173 38 -235 100l-777 776c-71 72 -113 170 -113 271c0 212 167 381 379 381c102 0 200 -41 273 -113l605 -606c6 -6 10 -14 10 -22c0 -21 -56 -77 -77 -77c-9 0 -17 4 -23 10l-606 607c-48 47 -113 77 -181 77
+c-142 0 -252 -115 -252 -256c0 -68 28 -133 76 -181l776 -777c38 -38 91 -63 145 -63c85 0 148 63 148 148c0 55 -25 107 -63 145l-581 581c-16 15 -38 24 -60 24c-38 0 -67 -28 -67 -67c0 -22 10 -43 25 -59l410 -410c6 -6 10 -14 10 -22c0 -21 -57 -78 -78 -78
+c-8 0 -16 4 -22 10l-410 410c-40 39 -63 94 -63 149c0 110 86 196 196 196c56 0 110 -23 149 -63l581 -581c63 -62 100 -147 100 -235z" />
+ <glyph glyph-name="paragraph" unicode="&#xf1dd;" horiz-adv-x="1254"
+d="M1254 1347v-73c0 -34 -27 -93 -61 -93c-17 0 -37 3 -54 -1c-16 -4 -28 -15 -32 -31c-5 -19 -3 -43 -3 -64v-1152c0 -34 -27 -61 -61 -61h-108c-34 0 -61 27 -61 61v1218h-143v-1218c0 -34 -27 -61 -61 -61h-108c-34 0 -61 27 -61 61v496c-97 8 -180 28 -245 59
+c-84 39 -148 99 -192 179c-42 77 -64 164 -64 259c0 111 30 207 88 286c59 79 129 132 209 159c75 25 233 37 417 37h479c34 0 61 -27 61 -61z" />
+ <glyph glyph-name="patreon" unicode="&#xf2f0;"
+d="M985 1341c-305 0 -553 -248 -553 -553c0 -304 248 -551 553 -551c304 0 551 247 551 551c0 305 -247 553 -551 553zM270 -132h-270v1473h270v-1473z" />
+ <glyph glyph-name="pause" unicode="&#xf04c;"
+d="M1536 1344v-1408c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h512c35 0 64 -29 64 -64zM640 1344v-1408c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h512c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="pause-circle" unicode="&#xf28b;"
+d="M704 352v576c0 18 -14 32 -32 32h-256c-18 0 -32 -14 -32 -32v-576c0 -18 14 -32 32 -32h256c18 0 32 14 32 32zM1152 352v576c0 18 -14 32 -32 32h-256c-18 0 -32 -14 -32 -32v-576c0 -18 14 -32 32 -32h256c18 0 32 14 32 32zM1536 640c0 -424 -344 -768 -768 -768
+s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="pause-circle-o" unicode="&#xf28c;"
+d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM768 96c300 0 544 244 544 544s-244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544zM864 320c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-576
+c0 -18 -14 -32 -32 -32h-192zM480 320c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-576c0 -18 -14 -32 -32 -32h-192z" />
<glyph glyph-name="paw" unicode="&#xf1b0;" horiz-adv-x="1664"
d="M780 1064c0 -112 -58 -245 -187 -245c-162 0 -260 204 -260 344c0 112 58 245 187 245c163 0 260 -204 260 -344zM438 581c0 -97 -51 -198 -161 -198c-160 0 -277 196 -277 341c0 97 52 199 161 199c160 0 277 -197 277 -342zM832 608c245 0 576 -353 576 -589
c0 -127 -104 -147 -206 -147c-134 0 -242 90 -370 90c-134 0 -248 -89 -393 -89c-97 0 -183 33 -183 146c0 237 331 589 576 589zM1071 819c-129 0 -187 133 -187 245c0 140 97 344 260 344c129 0 187 -133 187 -245c0 -140 -98 -344 -260 -344zM1503 923
c109 0 161 -102 161 -199c0 -145 -117 -341 -277 -341c-110 0 -161 101 -161 198c0 145 117 342 277 342z" />
- <glyph glyph-name="venus-double" unicode="&#xf226;" horiz-adv-x="1792"
-d="M1790 1007c25 -317 -207 -586 -510 -619v-260h224c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-512v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-224c-18 0 -32 14 -32 32v64
-c0 18 14 32 32 32h224v260c-303 33 -535 302 -510 619c22 275 243 500 517 526c140 14 271 -23 377 -94c106 71 237 108 377 94c274 -26 495 -251 517 -526zM896 647c79 81 128 191 128 313s-49 232 -128 313c-79 -81 -128 -191 -128 -313s49 -232 128 -313zM576 512
-c79 0 153 21 218 57c-96 103 -154 240 -154 391s59 288 154 391c-65 36 -139 57 -218 57c-247 0 -448 -201 -448 -448s201 -448 448 -448zM1152 128v260c-94 10 -181 44 -256 94c-75 -50 -162 -84 -256 -94v-260h512zM1216 512c247 0 448 201 448 448s-201 448 -448 448
-c-79 0 -153 -21 -218 -57c95 -103 154 -240 154 -391s-58 -288 -154 -391c65 -36 139 -57 218 -57z" />
- <glyph glyph-name="calendar-times-o" unicode="&#xf273;" horiz-adv-x="1664"
-d="M1111 151l-46 -46c-12 -12 -32 -12 -45 0l-188 189l-188 -189c-13 -12 -33 -12 -45 0l-46 46c-12 12 -12 32 0 45l189 188l-189 188c-12 13 -12 33 0 45l46 46c12 12 32 12 45 0l188 -188l188 188c13 12 33 12 45 0l46 -46c12 -12 12 -32 0 -45l-188 -188l188 -188
-c12 -13 12 -33 0 -45zM128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64
-c18 0 32 14 32 32zM1664 1152v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z
-" />
- <glyph glyph-name="address-book-o" unicode="&#xf2ba;" horiz-adv-x="1664"
-d="M1028 892c0 -143 -117 -259 -260 -259s-260 116 -260 259c0 144 117 260 260 260s260 -116 260 -260zM980 672c191 0 221 -227 221 -374c0 -84 -53 -170 -145 -170h-576c-92 0 -145 86 -145 170c0 141 30 374 216 374h5c66 -39 133 -87 212 -87s146 48 212 87zM1664 928
-c0 -17 -15 -32 -32 -32h-96v-128h96c17 0 32 -15 32 -32v-192c0 -17 -15 -32 -32 -32h-96v-128h96c17 0 32 -15 32 -32v-192c0 -17 -15 -32 -32 -32h-96v-224c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v1472c0 88 72 160 160 160h1216c88 0 160 -72 160 -160
-v-224h96c17 0 32 -15 32 -32v-192zM1408 -96v1472c0 17 -15 32 -32 32h-1216c-17 0 -32 -15 -32 -32v-1472c0 -17 15 -32 32 -32h1216c17 0 32 15 32 32z" />
- <glyph glyph-name="check" unicode="&#xf00c;" horiz-adv-x="1550"
-d="M1550 970c0 -25 -10 -50 -28 -68l-724 -724l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136l-362 362c-18 18 -28 43 -28 68s10 50 28 68l136 136c18 18 43 28 68 28s50 -10 68 -28l294 -295l656 657c18 18 43 28 68 28s50 -10 68 -28l136 -136
-c18 -18 28 -43 28 -68z" />
- <glyph glyph-name="meetup" unicode="&#xf2e0;" horiz-adv-x="1847"
-d="M1297 302c-11 72 -143 16 -151 95c-11 112 153 354 140 448c-12 84 -68 102 -117 103c-47 1 -59 -7 -75 -16c-10 -6 -23 -17 -41 1c-22 21 -39 41 -68 45c-43 7 -62 -7 -93 -34c-12 -10 -42 -45 -70 -32c-12 6 -54 27 -84 40c-57 25 -140 -16 -170 -70
-c-45 -80 -133 -396 -146 -438c-30 -93 38 -170 129 -165c39 2 64 16 89 61c14 26 146 377 156 394c7 12 31 28 51 18c20 -11 24 -33 21 -53c-4 -34 -98 -248 -101 -272c-12 -80 94 -93 135 -14c13 25 160 324 173 344c15 22 26 29 41 28c11 0 29 -3 25 -38
-c-5 -33 -123 -253 -136 -307c-16 -72 23 -145 87 -177c40 -20 219 -55 205 39zM346 86c4 -20 -8 -39 -28 -43c-19 -4 -38 8 -42 28c-4 19 8 39 27 43s39 -8 43 -28zM916 -177c16 -23 10 -54 -12 -70c-23 -16 -54 -10 -70 13c-15 23 -9 54 13 70c23 16 54 10 69 -13zM140 635
-c-24 -36 -72 -45 -107 -20c-35 24 -44 73 -20 108c24 36 72 45 107 21c35 -25 44 -73 20 -109zM1430 -42c25 -37 16 -88 -21 -114c-37 -25 -87 -16 -112 21s-16 88 20 114c37 26 87 16 113 -21zM1542 562c92 -151 53 -350 -92 -452c-61 -43 -130 -62 -199 -60
-c-42 -165 -243 -226 -368 -114c-4 -3 -9 -6 -13 -10c-137 -95 -323 -61 -418 78c-34 50 -51 107 -53 164c-229 38 -315 329 -144 489c-99 164 2 376 187 402c88 232 377 342 573 190c236 78 477 -103 458 -354c144 -44 185 -234 69 -333zM418 1222c18 -27 12 -64 -15 -83
-c-26 -18 -63 -12 -81 15s-12 64 15 83c26 18 63 12 81 -15zM577 1503c5 -22 -9 -44 -31 -49s-44 9 -49 32c-4 22 10 44 32 49s44 -9 48 -32zM1763 555c6 -27 -11 -53 -37 -58c-26 -6 -52 11 -57 37c-6 27 11 53 37 59c26 5 52 -12 57 -38zM1099 1448c21 -36 10 -84 -27 -106
-c-36 -22 -83 -10 -104 26c-22 37 -10 85 26 107s83 10 105 -27zM1845 792c5 -20 -8 -39 -27 -44c-20 -4 -39 9 -43 28c-4 20 8 40 28 44c19 4 38 -8 42 -28zM1654 1033c20 -30 13 -71 -16 -92c-30 -20 -71 -13 -91 17s-13 71 17 92c29 21 70 13 90 -17z" />
- <glyph glyph-name="sliders" unicode="&#xf1de;"
-d="M352 128v-128h-352v128h352zM704 256c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280c35 0 64 -29 64 -64v-256
-c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h256zM1216 768c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
- <glyph glyph-name="file-pdf-o" unicode="&#xf1c1;"
-d="M1468 1156c37 -37 68 -111 68 -164v-1152c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h896c53 0 127 -31 164 -68zM1024 1400v-376h376c-6 17 -15 34 -22 41l-313 313c-7 7 -24 16 -41 22zM1408 -128v1024h-416c-53 0 -96 43 -96 96v416
-h-768v-1536h1280zM894 465c25 -20 53 -38 84 -56c42 5 81 7 117 7c67 0 152 -8 177 -49c7 -10 13 -28 2 -52c-1 -1 -2 -3 -3 -4v-1c-3 -18 -18 -38 -71 -38c-64 0 -161 29 -245 73c-139 -15 -285 -46 -392 -83c-103 -176 -182 -262 -242 -262c-10 0 -19 2 -28 7l-24 12
-c-3 1 -4 3 -6 5c-5 5 -9 16 -6 36c10 46 64 123 188 188c8 5 18 2 23 -6c1 -1 2 -3 2 -4c31 51 67 116 107 197c45 90 80 178 104 262c-32 109 -42 221 -24 287c7 25 22 40 42 40h22c15 0 27 -5 35 -15c12 -14 15 -36 9 -68c-1 -3 -2 -6 -4 -8c1 -3 1 -5 1 -8v-30
-c-1 -63 -2 -123 -14 -192c35 -105 87 -190 146 -238zM318 54c30 14 73 57 137 158c-75 -58 -122 -124 -137 -158zM716 974c-10 -28 -10 -76 -2 -132c3 16 5 31 7 44c2 17 5 31 7 43c1 3 2 5 4 8c-1 1 -1 3 -2 5c-1 18 -7 29 -13 36c0 -2 -1 -3 -1 -4zM592 313
-c88 35 186 63 284 81c-10 8 -20 15 -29 23c-49 43 -93 103 -127 176c-19 -61 -47 -126 -83 -197c-15 -28 -30 -56 -45 -83zM1238 329c-5 5 -31 24 -140 24c49 -18 94 -28 124 -28c9 0 14 0 18 1c0 1 -1 2 -2 3z" />
- <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408"
-d="M493 1053c22 0 39 18 39 39s-17 39 -39 39c-21 0 -38 -18 -38 -39s17 -39 38 -39zM915 1053c21 0 38 18 38 39s-17 39 -38 39c-22 0 -39 -18 -39 -39s17 -39 39 -39zM103 869c56 0 102 -46 102 -102v-430c0 -57 -45 -103 -102 -103s-103 46 -103 103v430
-c0 56 46 102 103 102zM1163 850v-666c0 -61 -49 -110 -109 -110h-75v-227c0 -57 -46 -103 -103 -103s-103 46 -103 103v227h-138v-227c0 -57 -46 -103 -103 -103c-56 0 -102 46 -102 103l-1 227h-74c-61 0 -110 49 -110 110v666h918zM931 1255c140 -72 235 -210 235 -369
-h-925c0 159 95 297 236 369l-71 131c-4 7 -2 16 5 20c7 3 16 1 20 -6l72 -132c61 27 129 42 201 42s140 -15 201 -42l72 132c4 7 13 9 20 6c7 -4 9 -13 5 -20zM1408 767v-430c0 -57 -46 -103 -103 -103c-56 0 -102 46 -102 103v430c0 57 46 102 102 102
-c57 0 103 -45 103 -102z" />
- <glyph glyph-name="hubzilla" unicode="&#xf2eb;" horiz-adv-x="1587"
-d="M1349 1363c86 -43 165 -125 207 -213c16 -40 34 -78 30 -170c-3 -83 -8 -115 -34 -170c-68 -146 -203 -243 -356 -253l-83 -6l-29 -115c-24 -96 -27 -129 -27 -129c28 -29 91 -47 117 -115c36 -69 32 -168 -14 -225c-75 -93 -187 -121 -286 -70c-90 47 -136 164 -108 266
-c7 26 -2 34 -109 104l-116 77l-43 -35c-203 -162 -499 -19 -498 242c0 168 133 299 304 298c86 0 138 -20 202 -78l47 -42l104 53l105 51l-11 37c-16 55 -12 176 7 238c21 74 87 166 150 212c128 94 302 111 441 43v0zM580 413l233 -160s71 60 167 68l60 254
-s-185 59 -237 189l-217 -102s52 -128 -6 -248v-1z" />
- <glyph glyph-name="stack-exchange" unicode="&#xf18d;" horiz-adv-x="1238"
-d="M1238 283v-66c0 -113 -88 -204 -196 -204h-57l-260 -269v269h-529c-108 0 -196 91 -196 204v66h1238zM1238 609v-255h-1238v255h1238zM1238 937v-255h-1238v255h1238zM1238 1077v-67h-1238v67c0 112 88 203 196 203h846c108 0 196 -91 196 -203z" />
- <glyph glyph-name="twitch" unicode="&#xf1e8;" horiz-adv-x="1592"
-d="M796 1102v-434h-145v434h145zM1194 1102v-434h-145v434h145zM1194 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1592 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
- <glyph glyph-name="caret-right" unicode="&#xf0da;" horiz-adv-x="576"
-d="M576 640c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v896c0 35 29 64 64 64c17 0 33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="tree" unicode="&#xf1bb;" horiz-adv-x="1472"
-d="M1472 64c0 -35 -29 -64 -64 -64h-462c3 -64 11 -131 11 -196c0 -33 -27 -60 -61 -60h-320c-34 0 -61 27 -61 60c0 65 8 132 11 196h-462c-35 0 -64 29 -64 64c0 17 7 33 19 45l402 403h-229c-35 0 -64 29 -64 64c0 17 7 33 19 45l402 403h-197c-35 0 -64 29 -64 64
-c0 17 7 33 19 45l384 384c12 12 28 19 45 19s33 -7 45 -19l384 -384c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-197l402 -403c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-229l402 -403c12 -12 19 -28 19 -45z" />
- <glyph glyph-name="friendica" unicode="&#xf2e6;" horiz-adv-x="1520"
-d="M0 1128c0 152 123 276 274 276h973c151 0 273 -124 273 -276v-980c0 -152 -122 -276 -273 -276h-973c-151 0 -274 124 -274 276v980zM1247 1343h-244v-368h-486v-310l485 3l1 -367h-486v-368h730c118 0 212 95 212 215v980c0 120 -94 215 -212 215z" />
- <glyph glyph-name="gratipay" unicode="&#xf184;"
-d="M773 234l350 473c27 37 59 156 -43 223c-86 56 -168 13 -211 -37c-16 -18 -44 -40 -96 -40s-79 22 -95 40c-43 50 -125 93 -212 37c-101 -67 -69 -186 -42 -223zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="map-marker" unicode="&#xf041;" horiz-adv-x="1024"
-d="M768 896c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1024 896c0 -61 -7 -124 -33 -179l-364 -774c-21 -44 -67 -71 -115 -71s-94 27 -114 71l-365 774c-26 55 -33 118 -33 179c0 283 229 512 512 512s512 -229 512 -512z" />
- <glyph glyph-name="globe-e" unicode="&#xf304;"
-d="M768 1404c204 0 399 -81 543 -225s225 -339 225 -543s-81 -399 -225 -543s-339 -225 -543 -225s-399 81 -543 225s-225 339 -225 543s81 399 225 543s339 225 543 225zM863 1165h-1h-6c-78 -1 -136 -19 -204 -29s-157 -10 -205 -29s-58 -39 -87 -58s-72 -30 -87 -58
-s0 -58 0 -87s-28 -73 0 -88s58 39 87 58s68 70 88 59s6 -8 0 -29s-54 -44 -56 -87s110 -78 73 -135c-37 -56 -202 50 -250 18s-19 -58 -29 -87s-40 -57 -29 -88s55 -37 87 -58s87 -59 88 -62s21 -106 29 -145c6 -34 3 -78 4 -120c44 -36 123 -82 176 -102
-c21 41 37 107 53 139c24 48 77 133 87 174s0 39 0 58s8 32 0 58s-40 58 -59 87s-37 69 -58 88s-49 19 -58 29s-4 9 -4 14s-5 8 5 15s36 9 58 0s39 -39 58 -58s27 -55 58 -58s58 39 87 58c29 20 74 35 107 -22c8 -16 43 -35 68 -35s22 42 30 58s24 37 48 41s28 -14 44 -30
-s30 -69 53 -69s22 43 30 59c15 34 6 65 57 116c19 19 50 29 57 57s-21 62 -29 86s-28 63 -28 88c0 21 27 25 63 44c-24 30 -67 73 -97 97c-22 1 -41 2 -55 4c-69 8 -176 29 -253 29zM1251 411c-32 1 -70 -43 -105 -60c-39 -19 -100 -32 -116 -59s0 -39 0 -58s-14 -44 0 -58
-s38 0 58 0s37 9 59 0c12 -5 23 -17 33 -29c40 34 96 98 125 142c-5 11 -10 21 -14 32c-10 29 5 74 -29 88c-4 2 -7 2 -11 2z" />
- <glyph glyph-name="american-sign-language-interpreting" unicode="&#xf2a3;" horiz-adv-x="2303"
-d="M1032 576c-35 1 -68 21 -84 55c-22 45 -66 73 -116 73c-71 0 -128 -57 -128 -128c0 -34 12 -67 36 -89l10 -8c22 -20 51 -31 82 -31c50 0 94 28 116 73c16 34 49 54 84 55zM1600 704c0 34 -12 67 -36 89l-10 8c-22 20 -51 31 -82 31c-50 0 -94 -28 -116 -73
-c-16 -34 -49 -54 -84 -55c35 -1 68 -21 84 -55c22 -45 66 -73 116 -73c71 0 128 57 128 128zM1174 925c-23 -47 -81 -67 -128 -44c-42 21 -87 31 -134 31c-35 0 -68 -6 -99 -17c6 0 13 1 19 1c123 0 236 -72 289 -183c23 -48 2 -105 -46 -128c-12 -6 -25 -9 -39 -9
-c14 0 27 -3 39 -9c48 -23 69 -80 46 -128c-53 -111 -166 -183 -289 -183h-6c-15 2 -29 3 -44 4l-290 27l-239 -120c-10 -5 -19 -7 -29 -7c-23 0 -46 13 -57 35l-160 320c-15 31 -4 68 25 85l209 119l148 267c23 206 125 395 287 528c41 34 102 28 135 -13
-c34 -41 28 -101 -13 -135c-45 -38 -85 -81 -117 -128c78 53 168 89 267 101c53 7 101 -30 107 -83c7 -53 -30 -101 -83 -107c-58 -7 -112 -27 -159 -55c32 7 65 10 99 10c76 0 150 -17 218 -50c48 -24 68 -81 44 -129zM2137 1085l160 -320c15 -31 4 -68 -25 -85l-209 -119
-l-148 -267c-23 -206 -125 -395 -287 -528c-18 -15 -40 -22 -61 -22c-28 0 -55 12 -74 35c-34 41 -28 101 13 135c45 38 85 81 117 128c-78 -53 -168 -89 -267 -101c-4 -1 -8 -1 -12 -1c-48 0 -89 36 -95 84c-7 53 30 101 83 107c58 7 112 27 159 55c-32 -7 -65 -10 -99 -10
-c-76 0 -150 17 -218 50c-48 24 -68 81 -44 129c23 47 81 67 128 44c42 -21 87 -31 134 -31c35 0 68 6 99 17c-6 0 -13 -1 -19 -1c-123 0 -236 72 -289 183c-23 48 -2 105 46 128c12 6 25 9 39 9c-14 0 -27 3 -39 9c-48 23 -69 80 -46 128c53 111 166 183 289 183h7
-c14 -2 28 -3 42 -4l291 -27l239 120c10 5 19 7 29 7c23 0 46 -13 57 -35z" />
- <glyph glyph-name="binoculars" unicode="&#xf1e5;" horiz-adv-x="1792"
-d="M704 1216v-768c0 -35 -29 -64 -64 -64v-576c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v512l249 873c4 14 17 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v576c-35 0 -64 29 -64 64v768h424
-c14 0 27 -9 31 -23zM736 1504v-224h-352v224c0 18 14 32 32 32h288c18 0 32 -14 32 -32zM1408 1504v-224h-352v224c0 18 14 32 32 32h288c18 0 32 -14 32 -32z" />
- <glyph glyph-name="sticky-note" unicode="&#xf249;"
-d="M1024 288v-416h-928c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344c53 0 96 -43 96 -96v-928h-416c-53 0 -96 -43 -96 -96zM1152 256h381c-9 -48 -35 -102 -65 -132l-184 -184c-30 -30 -84 -56 -132 -65v381z" />
- <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280"
-d="M1280 137c0 -146 -96 -265 -213 -265h-854c-117 0 -213 119 -213 265c0 263 65 567 327 567c81 -79 191 -128 313 -128s232 49 313 128c262 0 327 -304 327 -567zM1024 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" />
- <glyph glyph-name="php" unicode="&#xf30e;"
-d="M768 1044c424 0 768 -181 768 -404s-344 -404 -768 -404s-768 181 -768 404s344 404 768 404zM701 934l-87 -418h83l50 239h67c21 0 35 -4 41 -12s8 -23 4 -42l-39 -185h85l40 194c8 44 3 73 -18 89c-20 16 -50 23 -91 24h-75l23 111h-83zM320 823v0l-87 -418h84l23 111
-h72c25 0 49 3 72 8s44 19 64 39c16 16 30 33 39 53c10 20 16 40 19 61c7 45 -1 80 -22 106s-56 40 -103 40h-161zM1035 823l-87 -418h84l23 111h73c25 0 48 3 71 8s44 19 64 39c16 16 30 33 39 53c10 20 16 40 19 61c7 45 0 80 -21 106s-57 40 -104 40h-161zM416 757v0
-c32 0 59 -3 80 -9c22 -6 29 -30 22 -71c-9 -49 -26 -77 -52 -85s-57 -11 -96 -11h-9c-2 0 -5 1 -7 1l36 174h12c4 0 9 1 14 1zM1131 757v0c32 0 59 -3 80 -9c22 -6 29 -30 22 -71c-9 -49 -26 -77 -52 -85s-57 -11 -96 -11h-9c-2 0 -5 1 -7 1l36 174h12c4 0 9 1 14 1z" />
- <glyph glyph-name="ioxhost" unicode="&#xf208;" horiz-adv-x="2048"
-d="M1463 704c0 -47 -38 -86 -86 -86h-702c-48 0 -86 39 -86 86s38 86 86 86h702c48 0 86 -39 86 -86zM1677 704c0 59 -8 115 -23 170h-982c-48 0 -86 38 -86 85c0 48 38 86 86 86h908c-115 187 -321 311 -555 311c-360 0 -653 -292 -653 -652c0 -59 8 -115 23 -170h982
-c48 0 86 -38 86 -85c0 -48 -38 -86 -86 -86h-908c115 -187 321 -311 556 -311c359 0 652 292 652 652zM2048 959c0 -47 -38 -85 -86 -85h-131c11 -55 17 -112 17 -170c0 -454 -369 -824 -823 -824c-333 0 -620 198 -750 483h-189c-48 0 -86 38 -86 86c0 47 38 85 86 85h132
-c-11 55 -17 112 -17 170c0 454 369 824 824 824c332 0 619 -198 749 -483h188c48 0 86 -38 86 -86z" />
- <glyph glyph-name="expand" unicode="&#xf065;"
-d="M755 480c0 -8 -4 -17 -10 -23l-332 -332l144 -144c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-448c-35 0 -64 29 -64 64v448c0 35 29 64 64 64c17 0 33 -7 45 -19l144 -144l332 332c6 6 15 10 23 10s17 -4 23 -10l114 -114c6 -6 10 -15 10 -23zM1536 1344v-448
-c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-144 144l-332 -332c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-114 114c-6 6 -10 15 -10 23s4 17 10 23l332 332l-144 144c-12 12 -19 28 -19 45c0 35 29 64 64 64h448c35 0 64 -29 64 -64z" />
- <glyph glyph-name="discord-alt" unicode="&#xf2ef;"
-d="M559 1212v0l13 -16c-237 -68 -346 -172 -346 -172s29 16 78 38c141 62 252 79 298 83c8 1 15 3 23 3c80 11 170 13 265 2c125 -14 259 -51 396 -126c0 0 -103 99 -327 167l18 21s181 4 370 -138c0 0 189 -343 189 -766c0 0 -111 -191 -402 -200c0 0 -48 56 -87 106
-c172 49 238 157 238 157c-54 -35 -105 -61 -151 -78c-66 -28 -129 -45 -191 -56c-126 -24 -242 -17 -341 1c-75 14 -139 36 -193 57c-30 12 -63 26 -96 44c-4 3 -8 4 -12 7c-3 1 -4 3 -5 4c-24 13 -37 22 -37 22s63 -105 230 -155c-39 -50 -88 -109 -88 -109
-c-291 9 -401 200 -401 200c0 423 189 766 189 766c189 142 370 138 370 138zM522 722v0c-75 0 -134 -66 -134 -146s60 -146 134 -146c75 0 134 66 134 146c1 80 -59 146 -134 146zM1002 722v0c-75 0 -134 -66 -134 -146s60 -146 134 -146c75 0 134 66 134 146
-s-59 146 -134 146z" />
- <glyph glyph-name="bitbucket-square" unicode="&#xf172;"
-d="M848 666c0 57 -70 96 -118 67c-57 -27 -57 -119 1 -143c52 -31 125 16 117 76zM928 682c11 -88 -58 -174 -146 -182s-171 64 -175 153c-3 66 38 130 98 157c94 42 210 -26 223 -128zM1100 1073c-44 -45 -111 -51 -170 -58c-107 -14 -216 -13 -324 0
-c-59 8 -124 15 -170 58c28 40 78 48 123 55c135 24 273 23 408 1c48 -7 102 -15 133 -56zM1142 327c0 24 25 65 -9 75c-215 -142 -515 -142 -731 0l-12 -6l-5 -12c12 -70 23 -141 41 -210c41 -71 129 -95 204 -108c142 -26 299 -18 428 53c75 42 63 137 84 208zM1272 1020
-c4 24 9 53 -8 75c-38 48 -98 71 -155 88c-158 46 -325 52 -487 36c-77 -7 -154 -20 -226 -46c-54 -21 -127 -49 -136 -113c18 -150 47 -297 72 -446c8 -42 8 -92 46 -122c81 -62 184 -89 284 -100c148 -16 305 -5 440 63c38 20 82 46 90 92c28 157 55 314 80 473zM1536 1120
-v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="hand-paper-o" unicode="&#xf256;" horiz-adv-x="1632"
-d="M880 1408c-62 0 -112 -50 -112 -112v-656h-32v528c0 62 -50 112 -112 112s-112 -50 -112 -112v-784l-154 205c-24 32 -62 51 -102 51c-71 0 -128 -58 -128 -128c0 -28 9 -55 26 -77l384 -512c24 -32 62 -51 102 -51h688c46 0 86 33 95 78l76 405c3 19 5 39 5 59v498
-c0 62 -50 112 -112 112s-112 -50 -112 -112v-272h-32v528c0 62 -50 112 -112 112s-112 -50 -112 -112v-528h-32v656c0 62 -50 112 -112 112zM880 1536c90 0 173 -51 214 -132c14 3 28 4 42 4c132 0 240 -108 240 -240v-17c139 8 256 -99 256 -239v-498c0 -28 -3 -56 -8 -83
-l-76 -404c-19 -106 -112 -183 -220 -183h-688c-80 0 -157 39 -205 102l-384 512c-33 44 -51 99 -51 154c0 141 114 256 256 256c42 0 93 -10 128 -34v434c0 132 108 240 240 240c14 0 28 -1 42 -4c41 81 124 132 214 132z" />
- <glyph glyph-name="database" unicode="&#xf1c0;"
-d="M768 768c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 0c301 0 603 54 768 170v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 384c301 0 603 54 768 170
-v-170c0 -141 -344 -256 -768 -256s-768 115 -768 256v170c165 -116 467 -170 768 -170zM768 1536c424 0 768 -115 768 -256v-128c0 -141 -344 -256 -768 -256s-768 115 -768 256v128c0 141 344 256 768 256z" />
- <glyph glyph-name="user-circle-o" unicode="&#xf2be;" horiz-adv-x="1792"
-d="M896 1536c495 0 896 -401 896 -896c0 -492 -399 -896 -896 -896c-496 0 -896 403 -896 896c0 495 401 896 896 896zM1515 185c93 128 149 285 149 455c0 423 -345 768 -768 768s-768 -345 -768 -768c0 -170 56 -327 149 -455c36 179 123 327 306 327
-c81 -79 191 -128 313 -128s232 49 313 128c183 0 270 -148 306 -327zM1280 832c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" />
- <glyph glyph-name="hacker-news" unicode="&#xf1d4;"
-d="M809 532l266 499h-112l-157 -312s-24 -48 -44 -92c-19 46 -42 92 -42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="edge" unicode="&#xf282;" horiz-adv-x="1654"
-d="M0 741h1c52 414 335 796 841 795c307 0 560 -144 708 -409c76 -137 104 -283 104 -442v-188h-1125c5 -464 682 -448 974 -244v-377c-171 -103 -557 -192 -858 -77c-255 98 -433 363 -436 621c-4 333 165 554 436 680c-57 -72 -101 -150 -124 -285h635
-c37 379 -359 379 -359 379c-374 -13 -644 -231 -797 -453z" />
- <glyph glyph-name="calendar-plus-o" unicode="&#xf271;" horiz-adv-x="1664"
-d="M1536 1280c70 0 128 -58 128 -128v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128zM1152 1376v-288
-c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM384 1376v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM1536 -128v1024h-1408v-1024h1408zM896 448h224
-c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-224c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v224c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-224z" />
- <glyph glyph-name="hand-lizard-o" unicode="&#xf258;" horiz-adv-x="2048"
-d="M1151 1536c81 0 159 -39 207 -105l572 -781c77 -104 118 -229 118 -359v-355c0 -106 -86 -192 -192 -192h-384c-106 0 -192 86 -192 192v177l-286 143h-546c-106 0 -192 86 -192 192v32c0 159 129 288 288 288h420l42 128h-686c-133 0 -244 102 -255 234
-c-42 51 -65 116 -65 182v32c0 106 86 192 192 192h959zM1920 -64v355c0 101 -33 202 -93 284l-573 781c-24 32 -62 52 -103 52h-959c-35 0 -64 -29 -64 -64c0 -53 1 -90 36 -133c13 41 50 69 92 69h832v-32h-832c-35 0 -64 -29 -64 -64c0 -19 -1 -39 3 -58
-c11 -59 65 -102 125 -102h731c53 0 96 -43 96 -96c0 -10 -2 -21 -5 -30l-64 -192c-13 -39 -50 -66 -91 -66h-443c-88 0 -160 -72 -160 -160v-32c0 -35 29 -64 64 -64h561c10 0 20 -2 29 -7l317 -158c32 -17 53 -50 53 -86v-197c0 -35 29 -64 64 -64h384c35 0 64 29 64 64z
-" />
- <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408"
-d="M597 869c0 0 -10 -17 -257 -456c-13 -22 -30 -46 -65 -46h-239c-14 0 -25 7 -31 17s-7 23 0 36l253 448c1 0 1 0 0 1l-161 279c-7 13 -8 27 -1 37c6 10 18 15 32 15h239c36 0 54 -24 66 -45c163 -285 164 -286 164 -286zM1403 1511c7 -10 7 -24 0 -37l-528 -934
-c-1 0 -1 -1 0 -1l336 -615c7 -13 7 -27 1 -37c-7 -10 -18 -15 -32 -15h-239c-36 0 -55 24 -66 45c-339 621 -339 622 -339 622s17 30 531 942c13 23 28 45 64 45h241c14 0 25 -5 31 -15z" />
- <glyph glyph-name="youtube-square" unicode="&#xf166;"
-d="M919 233v157c0 33 -10 50 -29 50c-11 0 -22 -5 -33 -16v-224c11 -11 22 -16 33 -16c19 0 29 16 29 49zM1103 355h66v34c0 34 -11 51 -33 51s-33 -17 -33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40c-26 -30 -51 -45 -76 -45
-c-21 0 -36 9 -42 28c-4 11 -6 28 -6 54v290h66v-270c0 -15 0 -24 1 -26c1 -10 6 -15 15 -15c14 0 27 10 42 31v280h67zM985 384v-146c0 -33 -2 -58 -7 -73c-8 -28 -26 -42 -53 -42c-23 0 -46 14 -68 41v-36h-67v493h67v-161c21 26 44 40 68 40c27 0 45 -14 53 -42
-c5 -15 7 -39 7 -74zM1236 255v-9c0 -22 -1 -36 -2 -43c-2 -15 -7 -28 -15 -40c-18 -27 -46 -40 -80 -40c-35 0 -62 13 -81 38c-14 18 -21 47 -21 86v129c0 39 6 67 20 86c19 25 46 38 80 38c33 0 60 -13 78 -38c14 -19 21 -47 21 -86v-76h-133v-65c0 -34 11 -51 34 -51
-c16 0 26 9 30 26c0 4 1 19 1 45h68zM785 1079v-156c0 -34 -11 -51 -32 -51c-22 0 -32 17 -32 51v156c0 34 10 52 32 52c21 0 32 -18 32 -52zM1318 366c0 86 0 177 -19 260c-14 59 -62 102 -119 108c-136 15 -274 15 -412 15c-137 0 -275 0 -411 -15
-c-58 -6 -106 -49 -119 -108c-19 -83 -20 -174 -20 -260c0 -85 0 -176 20 -260c13 -58 61 -101 118 -108c137 -15 275 -15 412 -15s275 0 412 15c57 7 105 50 118 108c20 84 20 175 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78c15 -46 32 -92 47 -138
-c24 -70 39 -122 46 -158v-201h74v201zM852 936v130c0 39 -7 68 -21 87c-19 25 -45 38 -78 38c-34 0 -60 -13 -78 -38c-14 -19 -21 -48 -21 -87v-130c0 -39 7 -68 21 -87c18 -25 44 -38 78 -38c33 0 59 13 78 38c14 18 21 48 21 87zM1033 816h67v370h-67v-283
-c-15 -21 -29 -31 -42 -31c-9 0 -15 5 -16 16c-1 2 -1 10 -1 26v272h-67v-293c0 -26 2 -43 6 -55c7 -18 22 -27 43 -27c25 0 50 15 77 45v-40zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960
-c159 0 288 -129 288 -288z" />
- <glyph glyph-name="taxi" unicode="&#xf1ba;" horiz-adv-x="2048"
-d="M1824 640c124 0 224 -100 224 -224v-384c0 -18 -14 -32 -32 -32h-96v-64c0 -106 -86 -192 -192 -192s-192 86 -192 192v64h-1024v-64c0 -106 -86 -192 -192 -192s-192 86 -192 192v64h-96c-18 0 -32 14 -32 32v384c0 124 100 224 224 224h28l105 419
-c31 126 153 221 283 221h128v224c0 18 14 32 32 32h448c18 0 32 -14 32 -32v-224h128c130 0 252 -95 283 -221l105 -419h28zM320 160c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM516 640h1016l-89 357c-3 11 -23 27 -35 27h-768
-c-12 0 -32 -16 -35 -27zM1728 160c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160z" />
- <glyph glyph-name="sort-desc" unicode="&#xf0dd;" horiz-adv-x="1024"
-d="M1024 448c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-448 448c-12 12 -19 28 -19 45c0 35 29 64 64 64h896c35 0 64 -29 64 -64z" />
- <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1632"
-d="M1408 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1632 1376c0 -332 -92 -553 -329 -791c-58 -57 -124 -116 -195 -176l-20 -379c-1 -10 -7 -20 -16 -26l-384 -224c-5 -3 -10 -4 -16 -4c-8 0 -16 3 -23 9l-64 64c-8 9 -11 21 -8 32l85 276
-l-281 281l-276 -85c-3 -1 -6 -1 -9 -1c-8 0 -17 3 -23 9l-64 64c-10 11 -12 27 -5 39l224 384c6 9 16 15 26 16l379 20c60 71 119 137 176 195c250 249 441 329 789 329c18 0 34 -14 34 -32z" />
- <glyph glyph-name="discord" unicode="&#xf2ee;"
-d="M180 1516v0h1176c99 0 180 -81 180 -181v-1575l-189 167l-106 98l-112 105l46 -163h-995c-99 0 -180 81 -180 181v1187c0 100 81 181 180 181zM634 1107c0 0 -121 3 -247 -92c0 0 -126 -229 -126 -512c0 0 73 -128 267 -134c0 0 33 40 59 73c-111 33 -153 104 -153 104
-s8 -6 24 -15c1 -1 2 -2 4 -3c3 -2 5 -2 8 -4c22 -12 44 -22 64 -30c36 -14 79 -28 129 -38c66 -12 143 -17 227 -1c41 7 83 20 127 38c31 11 65 28 101 52c0 0 -44 -73 -159 -105c26 -33 58 -71 58 -71c194 6 269 134 269 134c0 283 -127 512 -127 512
-c-126 95 -246 92 -246 92l-12 -14c149 -46 218 -112 218 -112c-91 50 -181 75 -264 85c-63 7 -123 5 -177 -2c-5 0 -10 -1 -15 -2c-31 -3 -106 -14 -200 -55c-32 -15 -51 -26 -51 -26s72 69 230 115zM609 779c50 0 91 -43 90 -97c0 -54 -40 -98 -90 -98c-49 0 -89 44 -89 98
-s39 97 89 97zM930 779c50 0 89 -43 89 -97s-39 -98 -89 -98c-49 0 -90 44 -90 98s40 97 90 97z" />
- <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920"
-d="M768 384h384v96h-128v448h-114l-148 -137l77 -80c24 21 39 32 55 57h2v-288h-128v-96zM1280 640c0 -182 -110 -416 -320 -416s-320 234 -320 416s110 416 320 416s320 -234 320 -416zM1792 384v512c-141 0 -256 115 -256 256h-1152c0 -141 -115 -256 -256 -256v-512
-c141 0 256 -115 256 -256h1152c0 141 115 256 256 256zM1920 1216v-1152c0 -35 -29 -64 -64 -64h-1792c-35 0 -64 29 -64 64v1152c0 35 29 64 64 64h1792c35 0 64 -29 64 -64z" />
- <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920"
-d="M416 256c-88 0 -160 72 -160 160v704c0 88 72 160 160 160h1088c88 0 160 -72 160 -160v-704c0 -88 -72 -160 -160 -160h-1088zM384 1120v-704c0 -17 15 -32 32 -32h1088c17 0 32 15 32 32v704c0 17 -15 32 -32 32h-1088c-17 0 -32 -15 -32 -32zM1760 192h160v-96
-c0 -53 -72 -96 -160 -96h-1600c-88 0 -160 43 -160 96v96h1760zM1040 96c9 0 16 7 16 16s-7 16 -16 16h-160c-9 0 -16 -7 -16 -16s7 -16 16 -16h160z" />
- <glyph glyph-name="arrows-alt" unicode="&#xf0b2;"
-d="M1283 995l-355 -355l355 -355l144 144c18 19 46 24 70 14c23 -10 39 -33 39 -59v-448c0 -35 -29 -64 -64 -64h-448c-26 0 -49 16 -59 40c-10 23 -5 51 14 69l144 144l-355 355l-355 -355l144 -144c19 -18 24 -46 14 -69c-10 -24 -33 -40 -59 -40h-448
-c-35 0 -64 29 -64 64v448c0 26 16 49 40 59c23 10 51 5 69 -14l144 -144l355 355l-355 355l-144 -144c-12 -12 -28 -19 -45 -19c-8 0 -17 2 -24 5c-24 10 -40 33 -40 59v448c0 35 29 64 64 64h448c26 0 49 -16 59 -40c10 -23 5 -51 -14 -69l-144 -144l355 -355l355 355
-l-144 144c-19 18 -24 46 -14 69c10 24 33 40 59 40h448c35 0 64 -29 64 -64v-448c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 7 -45 19z" />
- <glyph glyph-name="thermometer-empty" unicode="&#xf2cb;" horiz-adv-x="1024"
-d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 105 85 192 192 192s192 -88 192 -192zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320s320 143 320 320zM896 192
-c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
- <glyph glyph-name="underline" unicode="&#xf0cd;"
-d="M48 1313c-18 1 -33 1 -45 4l-3 88c13 1 26 1 40 1c35 0 73 -1 112 -4c94 -5 150 -7 166 -7c57 0 113 1 168 3c54 2 103 4 146 5c42 0 71 1 86 2l-1 -14l2 -64v-9c-40 -6 -81 -9 -124 -9c-40 0 -66 -8 -79 -25c-9 -10 -13 -54 -13 -132c0 -24 1 -43 1 -58l1 -229l14 -280
-c4 -81 20 -148 51 -202c23 -39 55 -70 96 -92c60 -32 119 -47 177 -47c68 0 132 9 191 28c35 11 68 27 99 51c31 23 53 44 65 64c26 40 43 79 53 114c14 49 21 125 21 229c0 179 -13 184 -28 410l-4 59c-3 43 -10 73 -24 88c-22 23 -48 35 -77 34l-100 -2l-14 3l2 86h84
-l205 -10c68 -3 133 3 196 10l18 -2c4 -25 6 -42 6 -51s-2 -19 -4 -31c-27 -7 -55 -12 -84 -13c-47 -7 -74 -12 -79 -17c-9 -9 -15 -22 -15 -41c0 -13 2 -33 3 -58c0 0 8 -18 22 -396c5 -151 -5 -253 -15 -304s-24 -92 -41 -122c-26 -44 -64 -85 -112 -123
-c-49 -37 -109 -67 -182 -89s-158 -33 -255 -33c-110 0 -205 15 -284 46s-139 72 -179 122s-68 115 -83 195c-11 55 -16 134 -16 237v333c0 126 -6 197 -17 213c-16 23 -65 37 -147 39zM1536 -96c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1472
-c18 0 32 -14 32 -32v-64z" />
- <glyph glyph-name="sun-o" unicode="&#xf185;" horiz-adv-x="1707"
-d="M1430 640c0 318 -258 576 -576 576s-576 -258 -576 -576s258 -576 576 -576s576 258 576 576zM1706 363c-3 -10 -11 -17 -20 -20l-292 -96v-306c0 -10 -5 -20 -13 -26c-9 -6 -19 -8 -29 -4l-292 94l-180 -248c-6 -8 -16 -13 -26 -13s-20 5 -26 13l-180 248l-292 -94
-c-10 -4 -20 -2 -29 4c-8 6 -13 16 -13 26v306l-292 96c-9 3 -17 10 -20 20s-2 21 4 29l180 248l-180 248c-6 9 -7 19 -4 29s11 17 20 20l292 96v306c0 10 5 20 13 26c9 6 19 8 29 4l292 -94l180 248c12 16 40 16 52 0l180 -248l292 94c10 4 20 2 29 -4c8 -6 13 -16 13 -26
-v-306l292 -96c9 -3 17 -10 20 -20s2 -20 -4 -29l-180 -248l180 -248c6 -8 7 -19 4 -29z" />
- <glyph glyph-name="activitypub" unicode="&#xf2f2;" horiz-adv-x="2032"
-d="M924 1280v-1280l-185 107v853l-739 -427v214zM1109 1280l923 -533v-214l-923 -533v213l739 427l-739 427v213zM1109 853l369 -213l-369 -213v426zM554 640v-427l-369 214z" />
+ <glyph glyph-name="paypal" unicode="&#xf1ed;" horiz-adv-x="1519"
+d="M1510 890c13 -60 10 -129 -4 -204c-65 -330 -284 -444 -565 -444h-44c-34 0 -62 -25 -68 -59l-4 -19l-55 -346l-2 -15c-7 -34 -35 -59 -69 -59h-251c-28 0 -46 23 -42 51c18 112 35 224 53 336s36 223 54 335c3 24 19 37 43 37c40 0 80 1 131 0c72 -1 155 3 236 21
+c108 24 206 68 287 144c73 68 122 152 155 246c15 44 27 88 35 133c2 12 5 10 12 5c55 -41 86 -96 98 -162zM1338 1172c0 -82 -19 -160 -46 -236c-52 -151 -150 -259 -302 -315c-81 -29 -166 -41 -252 -42c-60 -1 -120 0 -180 0c-65 0 -106 -32 -118 -96
+c-14 -76 -69 -430 -85 -530c-1 -7 -4 -10 -12 -10h-295c-30 0 -52 26 -48 55l232 1471c6 38 40 67 79 67h598c43 0 142 -19 209 -45c142 -55 220 -167 220 -319z" />
+ <glyph glyph-name="peertube" unicode="&#xf2e4;" horiz-adv-x="1350"
+d="M0 1536l675 -450l-675 -450v900zM675 1086l675 -450l-675 -450v900zM0 636l675 -450l-675 -450v900z" />
+ <glyph glyph-name="pencil" unicode="&#xf040;" horiz-adv-x="1515"
+d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928c0 13 -9 22 -22 22c-6 0 -12 -2 -17 -7l-542 -542c-5 -5 -7 -11 -7 -17c0 -13 9 -22 22 -22c6 0 12 2 17 7l542 542c5 5 7 11 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024c0 -34 -14 -67 -37 -90
+l-166 -166l-416 416l166 165c23 24 56 38 90 38s67 -14 91 -38l235 -234c23 -24 37 -57 37 -91z" />
+ <glyph glyph-name="pencil-square" unicode="&#xf14b;"
+d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818c8 -7 6 -21 -3 -30l-291 -291c-9 -9 -23 -11 -30 -3c-8 7 -6 21 3 30l291 291c9 9 23 11 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92c37 37 37 99 0 136l-152 152c-37 37 -99 37 -136 0
+l-92 -92zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="pencil-square-o" unicode="&#xf044;" horiz-adv-x="1784"
+d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072c-9 9 -24 8 -33 -1l-350 -350c-9 -9 -10 -24 -1 -33s24 -8 33 1l350 350c9 9 10 24 1 33zM1408 478v-190c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832
+c40 0 80 -8 117 -25c9 -4 16 -13 18 -23c2 -11 -1 -21 -9 -29l-49 -49c-9 -9 -21 -12 -32 -8c-15 4 -30 6 -45 6h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v126c0 8 3 16 9 22l64 64c10 10 23 12 35 7s20 -16 20 -29zM1312 1216
+l288 -288l-672 -672h-288v288zM1756 1084l-92 -92l-288 288l92 92c37 37 99 37 136 0l152 -152c37 -37 37 -99 0 -136z" />
+ <glyph glyph-name="percent" unicode="&#xf295;"
+d="M1280 256c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM512 1024c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM1536 256c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384
+s384 -172 384 -384zM1440 1344c0 -14 -5 -27 -13 -38l-1056 -1408c-12 -16 -31 -26 -51 -26h-160c-35 0 -64 29 -64 64c0 14 5 27 13 38l1056 1408c12 16 31 26 51 26h160c35 0 64 -29 64 -64zM768 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384
+s384 -172 384 -384z" />
+ <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408"
+d="M1408 296c0 -36 -16 -106 -31 -139c-21 -49 -77 -81 -122 -106c-59 -32 -119 -51 -186 -51c-93 0 -177 38 -262 69c-61 22 -120 49 -175 83c-170 105 -375 310 -480 480c-34 55 -61 114 -83 175c-31 85 -69 169 -69 262c0 67 19 127 51 186c25 45 57 101 106 122
+c33 15 103 31 139 31c7 0 14 0 21 -3c21 -7 43 -56 53 -76c32 -57 63 -115 96 -171c16 -26 46 -58 46 -89c0 -61 -181 -150 -181 -204c0 -27 25 -62 39 -86c101 -182 227 -308 409 -409c24 -14 59 -39 86 -39c54 0 143 181 204 181c31 0 63 -30 89 -46
+c56 -33 114 -64 171 -96c20 -10 69 -32 76 -53c3 -7 3 -14 3 -21z" />
+ <glyph glyph-name="phone-square" unicode="&#xf098;"
+d="M1280 343c0 5 0 11 -2 16c-6 18 -152 92 -180 108c-19 11 -42 33 -65 33c-44 0 -109 -131 -148 -131c-20 0 -45 18 -63 28c-132 74 -223 165 -297 297c-10 18 -28 43 -28 63c0 39 131 104 131 148c0 23 -22 46 -33 65c-16 28 -90 174 -108 180c-5 2 -11 2 -16 2
+c-26 0 -77 -12 -101 -22c-66 -30 -114 -156 -114 -225c0 -67 27 -128 50 -190c80 -219 318 -457 537 -537c62 -23 123 -50 190 -50c69 0 195 48 225 114c10 24 22 75 22 101zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960
+c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="php" unicode="&#xf30e;" horiz-adv-x="2299"
+d="M1149 1245c635 0 1150 -271 1150 -605s-515 -605 -1150 -605s-1149 271 -1149 605s514 605 1149 605zM1049 1081l-130 -627h125l74 359l100 -1c32 0 52 -6 62 -18s12 -33 6 -62l-58 -278h126l61 291c13 65 4 109 -27 132c-30 23 -77 36 -138 37h-111l35 167h-125z
+M478 914v0l-129 -625h126l34 165h108c37 0 73 5 107 13s66 27 96 57c25 24 44 50 58 80s24 60 28 91c11 67 1 121 -31 160s-84 58 -155 59h-242zM1549 914l-130 -625h126l34 165h109c37 0 72 5 106 13s67 27 97 57c25 24 43 50 57 80s24 60 28 91c11 67 1 121 -31 160
+s-84 58 -155 59h-241zM623 815v0c48 1 88 -4 120 -13s43 -45 32 -106c-13 -73 -38 -115 -77 -127s-87 -18 -145 -17h-12c-3 0 -8 1 -11 1l54 261h18c7 0 14 0 21 1zM1693 815v0c48 1 88 -4 120 -13s44 -45 33 -106c-13 -73 -39 -115 -78 -127s-87 -18 -145 -17h-12
+c-3 0 -8 1 -11 1l54 261h18c7 0 14 0 21 1z" />
+ <glyph glyph-name="picture-o" unicode="&#xf03e;" horiz-adv-x="1920"
+d="M640 960c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600c-17 0 -32 -15 -32 -32v-1216c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32v1216c0 17 -15 32 -32 32z
+M1920 1248v-1216c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="pie-chart" unicode="&#xf200;" horiz-adv-x="1728"
+d="M768 646l546 -546c-139 -141 -333 -228 -546 -228c-424 0 -768 344 -768 768s344 768 768 768v-762zM955 640h773c0 -213 -87 -407 -228 -546zM1664 768h-768v768c424 0 768 -344 768 -768z" />
+ <glyph glyph-name="pinterest" unicode="&#xf0d2;"
+d="M1536 640c0 -424 -344 -768 -768 -768c-76 0 -148 11 -218 32c29 46 62 105 78 164c0 0 9 34 54 211c26 -51 104 -96 187 -96c247 0 415 225 415 527c0 227 -193 440 -487 440c-364 0 -548 -262 -548 -480c0 -132 50 -250 157 -294c17 -7 33 0 38 20c4 13 12 47 16 61
+c5 20 3 26 -11 43c-31 37 -51 84 -51 151c0 194 145 368 378 368c206 0 320 -126 320 -295c0 -221 -98 -408 -244 -408c-80 0 -140 66 -121 148c23 97 68 202 68 272c0 63 -34 116 -104 116c-82 0 -148 -85 -148 -199c0 0 0 -73 25 -122c-84 -356 -99 -418 -99 -418
+c-14 -58 -15 -123 -13 -177c-271 119 -460 389 -460 704c0 424 344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="pinterest-p" unicode="&#xf231;" horiz-adv-x="1280"
+d="M0 939c0 369 338 597 680 597c314 0 600 -216 600 -547c0 -311 -159 -656 -513 -656c-84 0 -190 42 -231 120c-76 -301 -70 -346 -238 -576l-14 -5l-9 10c-6 63 -15 125 -15 188c0 204 94 499 140 697c-25 51 -32 113 -32 169c0 101 70 229 184 229
+c84 0 129 -64 129 -143c0 -130 -88 -252 -88 -378c0 -86 71 -146 154 -146c230 0 301 332 301 509c0 237 -168 366 -395 366c-264 0 -468 -190 -468 -458c0 -129 79 -195 79 -226c0 -26 -19 -118 -52 -118c-5 0 -12 2 -17 3c-143 43 -195 234 -195 365z" />
+ <glyph glyph-name="pinterest-square" unicode="&#xf0d3;"
+d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-725c33 47 87 128 108 210c0 0 9 34 53 209c27 -51 104 -95 186 -95c244 0 410 223 410 521c0 225 -191 435 -481 435c-361 0 -543 -259 -543 -475c0 -130 50 -246 156 -290c17 -7 33 0 38 19
+c3 13 11 47 15 61c5 19 3 26 -11 42c-30 37 -50 83 -50 150c0 192 144 363 374 363c204 0 316 -124 316 -291c0 -219 -97 -404 -241 -404c-79 0 -139 66 -120 147c23 96 67 200 67 269c0 62 -33 114 -102 114c-81 0 -146 -84 -146 -196c0 0 0 -72 24 -121
+c-83 -352 -98 -414 -98 -414c-22 -92 -13 -199 -7 -254h-183c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960z" />
+ <glyph glyph-name="pixelfed" unicode="&#xf314;"
+d="M768 -128c-424 0 -768 344 -768 768s344 768 768 768s768 -344 768 -768s-344 -768 -768 -768zM707 472h141c133 0 240 105 240 234s-107 234 -240 234h-203c-77 0 -139 -60 -139 -135v-525z" />
+ <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1402"
+d="M1376 1376c64 -64 0 -224 -96 -320l-161 -161l160 -696c3 -12 -2 -25 -12 -33l-128 -96c-5 -4 -12 -6 -19 -6c-2 0 -4 0 -7 1c-9 2 -17 7 -21 16l-279 508l-259 -259l53 -194c3 -11 0 -22 -8 -31l-96 -96c-6 -6 -15 -9 -23 -9h-2c-10 1 -18 5 -24 13l-189 252l-252 189
+c-8 5 -12 14 -13 23s3 18 9 25l96 97c6 6 15 9 23 9c3 0 6 0 8 -1l194 -53l259 259l-508 279c-9 5 -15 14 -17 24c-1 9 2 20 9 27l128 128c8 7 20 11 30 8l665 -159l160 160c96 96 256 160 320 96z" />
+ <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1407"
+d="M1384 609l-1328 -738c-31 -17 -56 -2 -56 33v1472c0 35 25 50 56 33l1328 -738c31 -17 31 -45 0 -62z" />
<glyph glyph-name="play-circle" unicode="&#xf144;"
d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM1152 585c20 11 32 32 32 55s-12 44 -32 55l-544 320c-19 12 -44 12 -64 1c-20 -12 -32 -33 -32 -56v-640c0 -23 12 -44 32 -56c10 -5 21 -8 32 -8s22 3 32 9z" />
- <glyph glyph-name="share-square-o" unicode="&#xf045;" horiz-adv-x="1664"
-d="M1408 547v-259c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h255c17 0 32 -14 32 -32c0 -16 -11 -29 -26 -32c-50 -17 -95 -37 -133 -60c-5 -2 -10 -4 -16 -4h-112c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832
-c88 0 160 72 160 160v214c0 12 7 23 18 29c20 9 38 22 54 37c9 9 23 13 35 8s21 -16 21 -29zM1645 1043l-384 -384c-12 -13 -28 -19 -45 -19c-8 0 -17 2 -25 5c-23 10 -39 33 -39 59v192h-160c-220 0 -360 -42 -438 -131c-81 -93 -105 -243 -74 -473c2 -14 -7 -28 -20 -34
-c-4 -1 -8 -2 -12 -2c-10 0 -20 5 -26 13c-7 10 -166 235 -166 435c0 268 84 576 736 576h160v192c0 26 16 49 39 59c8 3 17 5 25 5c17 0 33 -7 45 -19l384 -384c25 -25 25 -65 0 -90z" />
- <glyph glyph-name="street-view" unicode="&#xf21d;" horiz-adv-x="1408"
-d="M1408 0c0 -176 -365 -256 -704 -256s-704 80 -704 256c0 136 203 200 373 229c35 6 68 -17 74 -52s-17 -68 -52 -74c-206 -36 -264 -92 -267 -104c10 -34 202 -127 576 -127s566 93 576 129c-3 10 -61 66 -267 102c-35 6 -58 39 -52 74s39 58 74 52
-c170 -29 373 -93 373 -229zM1024 896v-384c0 -35 -29 -64 -64 -64h-64v-384c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v384h-64c-35 0 -64 29 -64 64v384c0 71 57 128 128 128h384c71 0 128 -57 128 -128zM928 1280c0 -124 -100 -224 -224 -224s-224 100 -224 224
-s100 224 224 224s224 -100 224 -224z" />
- <glyph glyph-name="arrow-circle-up" unicode="&#xf0aa;"
-d="M1284 641c0 17 -6 33 -18 45l-362 362l-91 91c-12 12 -28 18 -45 18s-33 -6 -45 -18l-91 -91l-362 -362c-12 -12 -18 -28 -18 -45s6 -33 18 -45l91 -91c12 -12 28 -18 45 -18s33 6 45 18l189 189v-502c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v502l189 -189
-c12 -12 28 -19 45 -19s33 7 45 19l91 91c12 12 18 28 18 45zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="play-circle-o" unicode="&#xf01d;"
+d="M1184 640c0 -23 -12 -44 -32 -55l-544 -320c-10 -6 -21 -9 -32 -9s-22 3 -32 8c-20 12 -32 33 -32 56v640c0 23 12 44 32 56c20 11 45 11 64 -1l544 -320c20 -11 32 -32 32 -55zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544
+s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="pleroma" unicode="&#xf324;" horiz-adv-x="961"
+d="M120 1408h262v-1536h-382v1416c0 66 54 120 120 120zM575 1408h386v-648c0 -66 -53 -120 -119 -120v0h-267v768zM575 254h386v-262c0 -66 -53 -120 -119 -120v0h-267v382z" />
+ <glyph glyph-name="plug" unicode="&#xf1e6;" horiz-adv-x="1792"
+d="M1755 1083c49 -50 49 -131 0 -181l-401 -400l150 -150l-160 -160c-219 -219 -553 -250 -801 -86l-362 -362h-181v181l362 362c-164 248 -133 582 86 801l160 160l150 -150l400 401c50 49 131 49 181 0c50 -50 50 -132 0 -181l-400 -401l234 -234l401 400
+c50 50 131 50 181 0z" />
+ <glyph glyph-name="plume" unicode="&#xf356;" horiz-adv-x="1761"
+d="M12 -222c-11 11 -12 14 -12 34c0 24 8 57 23 94c8 20 122 221 159 280c5 9 21 46 35 84c84 234 163 401 267 559c118 180 256 325 406 426c25 17 40 18 52 6c4 -4 7 -10 7 -12c0 -8 7 -3 40 30c84 84 198 136 395 184c103 25 313 64 347 64c18 0 30 -10 30 -28
+c0 -11 -3 -16 -23 -35c-44 -42 -62 -74 -115 -206c-40 -99 -70 -159 -102 -207l-22 -34l11 -9c10 -8 11 -12 11 -27c-1 -23 -22 -85 -43 -124c-84 -157 -267 -337 -497 -491c-191 -127 -384 -215 -546 -247l-30 -6l-125 -135c-131 -141 -146 -156 -178 -182
+c-27 -22 -44 -30 -63 -30c-14 0 -17 2 -27 12v0zM90 -136c9 8 77 79 150 158s135 144 138 145s22 5 42 9c183 36 415 149 624 306c106 80 217 183 286 265c40 47 90 121 90 131c0 6 0 5 -14 -3c-24 -14 -100 -52 -129 -64c-66 -27 -173 -58 -197 -58c-14 0 -28 13 -28 27
+c0 16 11 28 37 36c99 33 200 86 268 141c62 51 122 128 160 206c11 22 36 79 55 127c34 85 48 117 66 147c5 9 8 15 6 16s-30 -3 -63 -9c-238 -43 -391 -92 -487 -156c-85 -57 -135 -129 -183 -266c-16 -46 -23 -55 -42 -55c-7 0 -14 4 -23 13c-24 24 -30 66 -17 120
+c8 35 9 40 2 36c-3 -2 -26 -21 -50 -43c-134 -121 -261 -296 -363 -498c-56 -111 -89 -188 -145 -342c-16 -45 -34 -87 -38 -94c-25 -38 -153 -265 -159 -281c-7 -19 -9 -29 -5 -29c1 0 10 7 19 15z" />
+ <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408"
+d="M1408 800v-192c0 -53 -43 -96 -96 -96h-416v-416c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v416h-416c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h416v416c0 53 43 96 96 96h192c53 0 96 -43 96 -96v-416h416c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="plus-circle" unicode="&#xf055;"
+d="M1216 576v128c0 35 -29 64 -64 64h-256v256c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-256h-256c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h256v-256c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v256h256c35 0 64 29 64 64zM1536 640
+c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="plus-square" unicode="&#xf0fe;"
+d="M1280 576v128c0 35 -29 64 -64 64h-320v320c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-320h-320c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h320v-320c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v320h320c35 0 64 29 64 64zM1536 1120v-960
+c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="plus-square-o" unicode="&#xf196;" horiz-adv-x="1408"
+d="M1152 736v-64c0 -18 -14 -32 -32 -32h-352v-352c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v352h-352c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h352v352c0 18 14 32 32 32h64c18 0 32 -14 32 -32v-352h352c18 0 32 -14 32 -32zM1280 288v832c0 88 -72 160 -160 160
+h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160zM1408 1120v-832c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c159 0 288 -129 288 -288z" />
<glyph glyph-name="podcast" unicode="&#xf2ce;"
d="M994 344c0 -66 -7 -132 -17 -197c-15 -104 -30 -211 -55 -313c-18 -73 -86 -90 -152 -90s-134 17 -152 90c-25 102 -40 209 -55 313c-10 65 -17 131 -17 197c0 135 109 168 224 168s224 -33 224 -168zM1536 768c0 -324 -200 -601 -484 -714c-11 -4 -23 6 -21 18
c3 21 6 43 10 66c2 16 4 32 6 47c1 6 4 10 9 12c208 106 352 322 352 571c0 365 -306 659 -675 639c-338 -18 -607 -306 -605 -644c2 -249 147 -464 356 -568c5 -2 8 -7 9 -12c2 -14 4 -29 6 -45c4 -24 7 -46 11 -68c2 -12 -11 -22 -22 -17c-297 116 -504 412 -487 753
c19 387 331 704 718 728c446 28 817 -326 817 -766zM994 800c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224zM1282 768c0 -165 -79 -313 -200 -406c-10 -8 -24 -1 -26 12c-3 28 -11 61 -29 92c-4 6 -3 14 3 20c76 70 124 170 124 282
c0 226 -197 407 -428 382c-177 -20 -321 -166 -338 -344c-13 -126 37 -242 122 -320c6 -6 7 -14 3 -20c-18 -31 -26 -64 -29 -93c-2 -12 -16 -19 -26 -11c-124 96 -203 247 -200 417c6 266 222 488 487 500c294 14 537 -220 537 -511z" />
- <glyph glyph-name="plus-square" unicode="&#xf0fe;"
-d="M1280 576v128c0 35 -29 64 -64 64h-320v320c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-320h-320c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h320v-320c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v320h320c35 0 64 29 64 64zM1536 1120v-960
-c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920"
-d="M1792 544v832c0 17 -15 32 -32 32h-1600c-17 0 -32 -15 -32 -32v-832c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32zM1920 1376v-1088c0 -88 -72 -160 -160 -160h-544c0 -85 64 -157 64 -192s-29 -64 -64 -64h-512c-35 0 -64 29 -64 64c0 37 64 105 64 192h-544
-c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
- <glyph glyph-name="expeditedssl" unicode="&#xf23e;" horiz-adv-x="1792"
-d="M896 1472c-459 0 -832 -373 -832 -832s373 -832 832 -832s832 373 832 832s-373 832 -832 832zM896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM496 704c9 0 16 -7 16 -16v-480c0 -9 -7 -16 -16 -16h-32c-9 0 -16 7 -16 16
-v480c0 9 7 16 16 16h32zM896 640c71 0 128 -57 128 -128c0 -47 -26 -88 -64 -110v-114c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v114c-38 22 -64 63 -64 110c0 71 57 128 128 128zM896 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768
-s344 768 768 768zM544 928v-96c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v96c0 124 100 224 224 224s224 -100 224 -224v-96c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v96c0 194 -158 352 -352 352s-352 -158 -352 -352zM1408 192v512c0 35 -29 64 -64 64h-896
-c-35 0 -64 -29 -64 -64v-512c0 -35 29 -64 64 -64h896c35 0 64 29 64 64z" />
- <glyph glyph-name="toggle-on" unicode="&#xf205;" horiz-adv-x="2048"
-d="M0 640c0 353 287 640 640 640h768c353 0 640 -287 640 -640s-287 -640 -640 -640h-768c-353 0 -640 287 -640 640zM1408 128c282 0 512 230 512 512s-230 512 -512 512s-512 -230 -512 -512s230 -512 512 -512z" />
- <glyph glyph-name="minus-square" unicode="&#xf146;"
-d="M1280 576v128c0 35 -29 64 -64 64h-896c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h896c35 0 64 29 64 64zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="adn" unicode="&#xf170;"
-d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="whatsapp" unicode="&#xf232;"
-d="M985 562c17 0 180 -85 187 -97c2 -5 2 -11 2 -15c0 -25 -8 -53 -17 -76c-23 -56 -116 -92 -173 -92c-48 0 -147 42 -190 62c-143 65 -232 176 -318 303c-38 56 -72 125 -71 194v8c2 66 26 113 74 158c15 14 31 22 52 22c12 0 24 -3 37 -3c27 0 32 -8 42 -34
-c7 -17 58 -153 58 -163c0 -38 -69 -81 -69 -104c0 -5 2 -10 5 -15c22 -47 64 -101 102 -137c46 -44 95 -73 151 -101c7 -4 14 -7 22 -7c30 0 80 97 106 97zM782 32c346 0 628 282 628 628s-282 628 -628 628s-628 -282 -628 -628c0 -132 42 -261 120 -368l-79 -233l242 77
-c102 -67 223 -104 345 -104zM782 1414c416 0 754 -338 754 -754s-338 -754 -754 -754c-127 0 -253 32 -365 94l-417 -134l136 405c-71 117 -108 252 -108 389c0 416 338 754 754 754z" />
+ <glyph glyph-name="postgresql" unicode="&#xf357;" horiz-adv-x="1727"
+d="M999 -247c-29 3 -56 11 -78 25c-34 21 -59 53 -77 95c-5 11 -8 18 -15 39c-2 6 -4 14 -5 16c-13 37 -21 89 -25 169c-1 27 -2 43 -3 85c-1 20 -1 23 -1 23s-1 -1 -2 -1c-9 -4 -21 -8 -32 -11c-47 -14 -100 -16 -155 -5c-9 2 -21 5 -28 7c-22 6 -42 16 -59 28
+c-9 6 -18 14 -24 21l-1 1s-1 -1 -3 -2c-26 -21 -54 -33 -84 -37c-6 -1 -9 -1 -18 -1s-10 0 -16 1c-33 4 -65 19 -94 44c-9 8 -19 18 -28 28c-43 49 -83 124 -122 228c-30 80 -58 177 -83 280c-22 94 -40 189 -44 240c-2 21 -2 58 -1 84c5 119 37 212 98 280c6 6 15 16 21 22
+c27 25 58 46 94 61c44 19 94 31 149 34c14 1 20 1 38 1c16 0 21 0 33 -1c76 -4 159 -20 243 -48l4 -1l3 1c16 9 34 19 52 26c42 16 87 25 136 27c20 1 49 1 77 -1s57 -5 81 -9l3 -1l3 1c16 5 36 10 55 14c70 14 141 19 207 14c89 -7 169 -32 239 -74c22 -13 43 -27 63 -44
+c11 -9 20 -18 31 -29c15 -15 28 -29 41 -46c10 -12 15 -20 21 -32c3 -5 3 -7 5 -12c17 -43 23 -100 18 -171c-6 -73 -23 -159 -51 -250c-2 -6 -3 -6 -7 -19c-15 -47 -33 -97 -54 -145c-29 -67 -63 -133 -99 -195c-1 -2 -3 -4 -3 -4s17 1 27 2c18 2 35 4 59 9c13 3 19 3 27 4
+c31 3 57 -2 77 -17c5 -3 11 -8 15 -13c11 -13 17 -30 19 -48c0 -4 1 -14 0 -18c-1 -10 -4 -19 -8 -29c-11 -24 -32 -48 -64 -71c-17 -13 -36 -24 -57 -35c-15 -8 -25 -12 -40 -17c-38 -13 -86 -22 -133 -24c-16 -1 -35 0 -46 1h-8h-2s-1 -5 -2 -12c-1 -11 -1 -12 -1 -16
+c0 -6 -1 -18 -1 -27c-5 -118 -21 -205 -49 -270c-3 -7 -5 -11 -8 -18c-12 -24 -26 -44 -43 -63c-4 -4 -14 -15 -18 -18c-17 -15 -34 -27 -55 -37c-23 -12 -49 -21 -83 -29c-24 -6 -40 -8 -56 -10c-3 0 -5 -1 -27 -1s-23 1 -26 1v0zM1043 -202c17 1 33 3 53 7
+c70 16 115 40 146 79c19 23 33 52 42 90c5 19 8 37 14 79c9 61 23 173 32 250c1 5 1 10 1 10s1 -1 3 -1c14 -4 32 -7 53 -8c9 0 25 0 36 1c46 2 93 12 127 25c15 6 35 16 52 27c19 12 34 23 46 35c9 8 15 16 19 23c6 9 9 18 9 26c0 5 -1 8 -3 13c-2 4 -5 9 -8 12
+c-7 7 -14 10 -26 11h-19c-7 -1 -12 -1 -22 -3c-15 -3 -25 -5 -36 -7c-29 -4 -52 -5 -75 -5c-25 1 -46 4 -60 11c-2 1 -6 4 -6 4s1 3 3 5c77 118 142 253 186 390c33 100 52 197 56 274c1 17 2 36 1 51c-3 47 -13 82 -31 106c-3 4 -9 12 -15 19c-14 17 -31 33 -47 47
+c-45 40 -97 70 -155 89c-45 15 -94 23 -146 26c-10 1 -15 0 -30 0c-17 0 -26 0 -40 -1c-50 -3 -103 -12 -149 -25c-10 -3 -21 -6 -25 -8h-1l-5 1c-33 8 -66 12 -101 14c-11 1 -18 0 -31 0s-16 1 -25 0c-66 -4 -124 -23 -174 -56l-4 -2s-3 0 -5 1c-37 13 -78 25 -118 34
+c-73 16 -141 22 -202 18c-82 -6 -149 -29 -200 -72c-36 -30 -64 -70 -83 -118c-18 -45 -28 -96 -31 -156c-1 -18 -1 -43 0 -63c1 -13 1 -20 2 -32c7 -62 28 -167 52 -262c40 -159 87 -287 135 -372c17 -29 34 -55 51 -74c9 -10 19 -20 28 -27c27 -21 56 -30 85 -26
+c17 3 34 10 50 22c7 5 13 10 20 17s10 10 20 22c36 42 72 85 111 128c11 12 21 22 21 22l4 -2c26 -13 54 -22 82 -24c4 0 9 -1 11 -1h2v-1v-1l-2 -3c-3 -4 -8 -9 -15 -18c-12 -15 -16 -20 -21 -24c-13 -11 -33 -19 -82 -29c-16 -3 -23 -5 -33 -8c-17 -6 -30 -12 -38 -21
+c-7 -7 -11 -15 -12 -24v-10c1 -5 2 -9 4 -13c6 -13 19 -24 38 -34c12 -6 24 -10 37 -13c22 -5 41 -8 62 -9c9 -1 24 -1 33 0c46 3 86 18 121 43c6 4 13 10 18 14l1 1v-34c0 -47 1 -77 2 -114c1 -30 3 -63 4 -85c4 -60 9 -98 16 -121l10 -25c14 -31 30 -55 50 -73
+c27 -25 62 -39 102 -42h25v0zM1026 -152c-52 2 -88 28 -113 83c-4 8 -8 19 -9 23c-6 19 -12 62 -15 120c-2 38 -4 73 -5 127v112c0 25 2 50 2 63c0 11 0 15 -1 17v3c-1 6 -3 12 -5 18c-9 25 -27 47 -48 58c-6 3 -16 6 -22 8s-12 2 -18 2c-5 0 -8 0 -13 -1c-1 0 -2 -1 -2 -1
+s1 7 2 11c3 11 8 24 16 45c11 29 11 30 21 53c6 14 7 15 10 21c10 23 16 42 22 62c18 66 20 142 5 234c-4 21 -9 48 -12 58c-14 51 -47 83 -95 94c-28 6 -61 5 -98 -4c-31 -8 -65 -21 -94 -37l-1 -1s0 8 1 14c8 82 29 157 60 216s72 104 122 132c18 10 37 18 57 24
+c6 2 8 2 13 3c20 5 41 9 63 10c15 1 32 1 48 0c106 -5 199 -39 280 -104c15 -12 26 -22 41 -37c11 -11 17 -18 27 -29c40 -46 76 -104 98 -158c3 -8 7 -19 7 -19h-5c-30 3 -56 3 -79 0c-30 -4 -54 -12 -74 -25c-10 -7 -19 -16 -26 -25c-15 -19 -24 -42 -27 -70
+c-1 -11 -1 -23 0 -35c4 -56 29 -128 74 -215c11 -21 19 -36 38 -70c17 -30 18 -34 22 -42c11 -25 22 -44 39 -67c4 -5 6 -8 15 -19c8 -10 13 -17 13 -17s-1 0 -3 -1c-9 -3 -16 -6 -22 -9c-13 -7 -24 -16 -32 -28c-9 -13 -14 -29 -16 -49c-1 -8 -1 -15 -1 -26v-9l-1 -6
+c-5 -50 -20 -178 -31 -260c-5 -37 -10 -66 -13 -82c-7 -36 -15 -63 -28 -84c-10 -16 -23 -30 -39 -41c-9 -6 -20 -12 -32 -17c-17 -7 -36 -13 -60 -18c-13 -3 -25 -4 -37 -5h-19v0zM669 283c-16 1 -31 3 -48 6c-4 1 -13 3 -16 4c-8 2 -17 6 -23 9c-2 1 -6 3 -7 4v0l1 1
+c5 2 15 6 24 8c4 1 8 2 15 3c35 7 57 14 73 21c14 6 26 14 36 24c5 5 10 10 18 21c14 17 21 26 29 35c6 7 13 12 18 13c3 1 6 1 9 0s9 -4 12 -5c7 -4 14 -11 19 -21c6 -12 8 -25 5 -35c-1 -3 -2 -6 -5 -10c-29 -40 -67 -65 -112 -74c-15 -3 -32 -5 -48 -4zM386 307
+c-8 0 -14 3 -22 7c-13 6 -27 18 -41 34c-59 68 -119 218 -171 421c-23 92 -44 194 -51 254c-1 10 -2 16 -2 25c-1 22 -1 44 0 63c2 49 10 92 23 129c17 47 41 84 76 112c39 31 91 50 153 57c18 2 34 3 55 3c12 0 15 -1 24 -1c61 -3 129 -16 197 -37c6 -2 16 -5 16 -5
+s-2 -1 -3 -2c-8 -8 -14 -16 -21 -24c-30 -36 -56 -81 -75 -132c-21 -57 -35 -123 -41 -191c-1 -11 -1 -20 -2 -33v-36c2 -34 2 -48 3 -69v-56c-1 -36 -3 -62 -7 -93c-1 -11 -2 -15 -3 -23v-17c0 -13 2 -33 4 -46c8 -46 28 -90 59 -125c6 -7 16 -15 22 -21c3 -3 3 -4 3 -4
+s-2 -3 -5 -6c-39 -41 -85 -93 -124 -140c-4 -4 -7 -9 -8 -10c-11 -13 -22 -22 -33 -28c-8 -4 -15 -6 -23 -6h-3v0zM1389 354c-18 1 -34 3 -44 7c-3 1 -6 2 -8 3l-1 1l-1 5c0 5 1 12 1 17c1 12 4 21 8 28c4 6 7 11 14 14c4 2 9 4 19 7c4 1 8 3 9 3h2l1 -1c8 -7 20 -13 33 -17
+c42 -14 104 -12 186 4c2 0 4 1 4 1s-6 -5 -8 -7c-15 -13 -34 -24 -56 -35c-9 -4 -14 -7 -22 -10c-18 -7 -41 -11 -66 -15c-15 -2 -27 -4 -43 -5h-28zM725 492c-20 0 -41 5 -60 13c-29 12 -55 31 -75 56c-26 32 -41 71 -45 112c-1 7 -1 9 -1 17c0 13 0 22 2 38
+c8 58 10 116 7 184c0 7 -1 18 -2 33v9v1l1 1c6 5 18 13 30 19c28 15 60 26 88 32c9 2 18 3 27 4c4 0 17 1 21 1c33 -2 54 -16 67 -41c5 -9 8 -17 11 -33c10 -49 16 -92 17 -133v-36c-1 -13 -2 -23 -3 -33c-4 -32 -11 -60 -24 -92c-4 -9 -7 -16 -18 -41
+c-7 -16 -10 -23 -17 -42c-13 -36 -18 -50 -22 -67c0 -1 -1 -2 -1 -2h-3v0zM732 924c12 1 23 6 32 15c7 7 9 15 7 22c-4 12 -22 20 -47 23h-18c-7 -1 -12 -3 -16 -5c-2 -1 -4 -2 -6 -4l-1 -1h-1c-1 0 -1 1 -2 -5c0 -4 -1 -4 -1 -6c1 -7 6 -15 13 -22c12 -12 26 -18 40 -17v0z
+M1387 529l-4 5l2 4c6 11 12 23 17 34c11 28 18 57 20 89c1 15 1 31 0 48c-1 18 -3 33 -7 68c-2 17 -2 21 -3 28c-3 32 -4 52 -2 78c1 15 3 28 7 53c3 21 5 30 6 40c2 18 2 34 2 50c0 7 1 8 1 10v11c-2 22 -17 64 -37 103c-24 48 -55 91 -89 130c-14 16 -31 34 -46 48
+c-42 38 -88 68 -138 91l-4 2c1 0 13 3 18 4c63 11 124 13 181 6c106 -13 195 -57 262 -130c8 -9 20 -24 24 -29c9 -12 15 -32 18 -57c2 -15 2 -29 2 -47c0 -12 0 -18 -1 -30c-3 -51 -14 -112 -31 -175c-38 -142 -102 -292 -182 -421c-5 -8 -11 -18 -11 -18s-2 1 -5 5z
+M1350 582c-2 3 -6 13 -8 16c-1 2 -2 6 -3 8c-4 10 -6 15 -25 48c-21 39 -32 56 -44 81c-36 72 -56 130 -61 176c-1 12 -1 23 0 33c2 17 6 30 14 41c14 20 41 31 80 34c6 1 9 1 18 1c13 0 23 0 38 -1c5 0 15 -2 16 -2h1v-2c0 -4 -1 -14 -2 -22c-1 -12 -2 -22 -6 -47
+c-6 -38 -8 -52 -9 -76v-28c1 -20 2 -33 7 -76c4 -30 5 -43 6 -59c1 -15 1 -30 0 -43c-2 -30 -8 -58 -20 -83l-1 -1l-1 2v0zM1289 945c12 1 24 9 33 20c5 7 8 14 7 18s-3 7 -8 9c-6 3 -14 4 -25 4c-13 0 -27 -3 -37 -8c-8 -4 -13 -8 -14 -13v-5c1 -4 5 -9 9 -13
+c10 -9 23 -13 35 -12z" />
+ <glyph glyph-name="power-off" unicode="&#xf011;"
+d="M1536 640c0 -423 -345 -768 -768 -768s-768 345 -768 768c0 243 112 467 307 613c57 43 137 32 179 -25c43 -56 31 -137 -25 -179c-130 -98 -205 -247 -205 -409c0 -282 230 -512 512 -512s512 230 512 512c0 162 -75 311 -205 409c-56 42 -68 123 -25 179
+c42 57 123 68 179 25c195 -146 307 -370 307 -613zM896 1408v-640c0 -70 -58 -128 -128 -128s-128 58 -128 128v640c0 70 58 128 128 128s128 -58 128 -128z" />
+ <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664"
+d="M384 0h896v256h-896v-256zM384 640h896v384h-160c-53 0 -96 43 -96 96v160h-640v-640zM1536 576c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 576v-416c0 -17 -15 -32 -32 -32h-224v-160c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v160
+h-224c-17 0 -32 15 -32 32v416c0 105 87 192 192 192h64v544c0 53 43 96 96 96h672c53 0 126 -30 164 -68l152 -152c38 -38 68 -111 68 -164v-256h64c105 0 192 -87 192 -192z" />
+ <glyph glyph-name="product-hunt" unicode="&#xf288;" horiz-adv-x="1792"
+d="M1150 774c0 -74 -60 -134 -135 -134h-253v269h253c75 0 135 -60 135 -135zM1329 774c0 174 -140 314 -314 314h-433v-896h180v269h253c174 0 314 140 314 313zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
<glyph glyph-name="puzzle-piece" unicode="&#xf12e;" horiz-adv-x="1664"
d="M1664 438c0 -103 -59 -189 -168 -189c-122 0 -154 111 -264 111c-80 0 -110 -50 -110 -124c0 -78 32 -153 31 -230v-5c-11 0 -22 0 -33 -1c-103 -10 -207 -30 -311 -30c-71 0 -145 28 -145 110c0 110 111 142 111 264c0 109 -86 168 -189 168c-105 0 -202 -58 -202 -173
c0 -127 97 -182 97 -251c0 -35 -22 -66 -46 -89c-31 -29 -75 -35 -117 -35c-82 0 -164 11 -245 24c-18 3 -37 5 -55 8l-13 2c-2 1 -5 1 -5 2v1024c4 -3 63 -10 73 -12c81 -13 163 -24 245 -24c42 0 86 6 117 35c24 23 46 54 46 89c0 69 -97 124 -97 251
c0 115 97 173 203 173c102 0 188 -59 188 -168c0 -122 -111 -154 -111 -264c0 -82 74 -110 145 -110c115 0 229 26 343 32v-2c-3 -4 -10 -63 -12 -73c-13 -81 -24 -163 -24 -245c0 -42 6 -86 35 -117c23 -24 54 -46 89 -46c69 0 124 97 251 97c115 0 173 -97 173 -202z" />
- <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1768"
-d="M263 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
- <glyph glyph-name="skyatlas" unicode="&#xf216;" horiz-adv-x="2048"
-d="M1430 953c0 0 -1 1 0 0zM1690 749c194 0 358 -145 358 -343c0 -211 -168 -366 -376 -366c-531 0 -629 799 -1151 799c-202 0 -349 -129 -349 -336c0 -214 160 -343 367 -343c136 0 291 57 401 136c18 13 54 52 73 52s35 -16 35 -35c0 -25 -42 -61 -60 -77
-c-131 -114 -321 -196 -495 -196c-267 0 -493 189 -493 464s216 477 489 477c593 0 712 -787 1158 -787c134 0 235 87 235 224c0 127 -98 223 -224 223c-56 0 -112 -37 -150 -37c-27 0 -51 23 -51 50c0 37 17 76 17 116c0 213 -163 367 -374 367c-170 0 -256 -118 -284 -118
-c-20 0 -36 16 -36 36c0 18 13 33 25 46c81 92 207 140 329 140c254 0 445 -187 445 -441c0 -22 -1 -44 -4 -66c38 10 77 15 115 15z" />
- <glyph glyph-name="level-down" unicode="&#xf149;" horiz-adv-x="1024"
-d="M32 1280h704c18 0 32 -15 32 -33v-863h192c25 0 47 -15 58 -37c11 -23 7 -50 -9 -69l-320 -384c-24 -29 -74 -29 -98 0l-320 384c-16 19 -19 46 -9 69c11 22 33 37 58 37h192v640h-320c-9 0 -18 4 -25 11l-160 192c-8 9 -9 23 -4 34s17 19 29 19z" />
- <glyph glyph-name="stack-overflow" unicode="&#xf16c;" horiz-adv-x="1514"
-d="M1278 -96v480h160v-640h-1438v640h160v-480h1118zM336 428l33 157l783 -165l-33 -156zM439 802l67 146l725 -339l-67 -145zM640 1158l102 123l614 -513l-102 -123zM1037 1536l477 -641l-128 -96l-477 641zM319 65v159h800v-159h-800z" />
- <glyph glyph-name="check-square-o" unicode="&#xf046;" horiz-adv-x="1663"
-d="M1408 606v-318c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c40 0 80 -8 117 -25c9 -4 16 -13 18 -23c2 -11 -1 -21 -9 -29l-49 -49c-6 -6 -15 -10 -23 -10c-3 0 -6 1 -9 2c-15 4 -30 6 -45 6h-832
-c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v254c0 8 3 16 9 22l64 64c7 7 15 10 23 10c4 0 8 -1 12 -3c12 -5 20 -16 20 -29zM1639 1095l-814 -814c-32 -32 -82 -32 -114 0l-430 430c-32 32 -32 82 0 114l110 110c32 32 82 32 114 0
-l263 -263l647 647c32 32 82 32 114 0l110 -110c32 -32 32 -82 0 -114z" />
- <glyph glyph-name="hand-spock-o" unicode="&#xf259;" horiz-adv-x="1920"
-d="M459 -256c-103 0 -192 70 -217 170l-101 401c-8 35 -13 72 -13 108c0 23 0 45 -5 67l-116 477c-5 19 -7 38 -7 57c0 124 94 226 217 239c22 113 119 193 235 193c111 0 207 -76 233 -184l83 -348l103 428c26 108 122 184 233 184c119 0 217 -86 236 -202
-c123 -14 212 -118 212 -241c0 -19 -3 -39 -7 -59l-123 -512c80 60 138 118 243 118c139 0 255 -113 255 -253c0 -84 -41 -162 -107 -212l-507 -380c-44 -33 -98 -51 -153 -51h-694zM1104 1408c-51 0 -96 -36 -108 -86l-164 -682h-127l-145 602c-12 50 -57 86 -108 86
-c-64 0 -112 -51 -112 -113c0 -10 1 -19 3 -28l132 -547h-26l-99 408c-12 49 -57 88 -109 88c-62 0 -113 -50 -113 -112c0 -9 1 -18 3 -26l116 -478c14 -58 4 -116 19 -174l100 -401c11 -43 49 -73 93 -73h694c27 0 54 9 76 26l507 379c34 26 56 67 56 110
-c0 70 -58 125 -127 125c-28 0 -55 -9 -77 -26l-307 -230v227c0 8 129 538 139 581c2 9 4 19 4 29c0 62 -47 115 -111 115c-52 0 -97 -36 -109 -86l-116 -482h-26l150 624c2 9 3 19 3 28c0 63 -46 116 -111 116z" />
+ <glyph glyph-name="python" unicode="&#xf322;"
+d="M759 1416v0c63 0 129 -4 193 -15c101 -17 185 -92 185 -192v-353c0 -103 -82 -188 -185 -188h-370c-126 0 -232 -108 -232 -230v-170h-127c-108 0 -171 78 -197 188c-36 147 -34 236 0 377c29 123 124 188 232 188h509v47h-370v141c0 107 28 164 185 192
+c53 9 114 15 177 15zM558 1303c-38 0 -69 -32 -69 -71s31 -70 69 -70s70 31 70 70s-32 71 -70 71zM1183 1021h139c108 0 159 -81 186 -188c37 -149 39 -261 0 -377c-37 -113 -78 -188 -186 -188h-555v-47h370v-141c0 -107 -92 -161 -185 -188c-140 -41 -253 -34 -370 0
+c-98 29 -185 88 -185 188v353c0 102 84 188 185 188h370c123 0 231 107 231 235v165zM975 127v0c-38 0 -69 -31 -69 -70s31 -71 69 -71s70 32 70 71s-32 70 -70 70zM1389 366v0c0 -17 -70 -30 -156 -30s-156 13 -156 30v0c0 17 70 30 156 30s156 -13 156 -30z" />
+ <glyph glyph-name="qq" unicode="&#xf1d6;" horiz-adv-x="1756"
+d="M252 730c-7 17 -8 34 -8 52c0 28 18 73 35 94c-1 26 10 79 30 96c0 185 143 418 310 498c103 49 211 66 324 66c88 0 184 -21 266 -55c235 -99 288 -283 338 -518l1 -5c29 -44 55 -96 55 -150c0 -27 -18 -54 -18 -78c0 -2 6 -10 7 -12c86 -127 164 -265 164 -423
+c0 -35 -19 -157 -75 -157c-39 0 -82 95 -96 121c-1 1 -2 1 -3 1l-5 -4c-32 -83 -67 -161 -132 -223c57 -55 149 -50 166 -145c-5 -11 -3 -23 -11 -34c-57 -86 -210 -97 -302 -97c-122 0 -221 32 -336 66c-24 7 -60 3 -86 6c-61 -67 -210 -85 -296 -85c-76 0 -370 5 -370 135
+c0 56 12 72 51 108c31 6 54 23 90 25c5 0 9 1 14 2c1 1 2 1 2 4l-2 3c-69 16 -166 190 -181 262l-5 3c-7 0 -10 -15 -12 -20c-22 -51 -74 -106 -132 -112h-1c-8 0 -5 8 -11 10c-14 33 -23 63 -23 100c0 200 96 348 252 466z" />
+ <glyph glyph-name="qrcode" unicode="&#xf029;"
+d="M0 1408h768v-704h-128v576h-512v-512h640v-128h-768v768zM0 -128v640h640v-640h-576v128h448v384h-384v-512h-128zM896 768v640h640v-640h-576v128h448v384h-384v-512h-128zM256 1152h256v-256h-256v256zM1152 1152h128v-128h-128v128zM256 256h128v-128h-128v128z
+M768 512h128v-128h-128v128zM1152 384h128v-128h-128v128zM1152 128h128v-128h-128v128zM1024 640h384v-256h-128v128h-256v128zM1536 256v-384h-256v128h128v256h128zM1024 384v-256h-256v128h128v128h128zM768 0h384v-128h-384v128z" />
+ <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="924"
+d="M608 280v-240c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v240c0 22 18 40 40 40h240c22 0 40 -18 40 -40zM924 880c0 -190 -129 -263 -224 -316c-59 -34 -96 -103 -96 -132c0 -22 -17 -48 -40 -48h-240c-22 0 -36 34 -36 56v45c0 121 120 225 208 265
+c77 35 109 68 109 132c0 56 -73 106 -154 106c-45 0 -86 -14 -108 -29c-24 -17 -48 -41 -107 -115c-8 -10 -20 -16 -31 -16c-9 0 -17 3 -25 8l-164 125c-17 13 -21 35 -10 53c108 179 260 266 464 266c214 0 454 -171 454 -400z" />
+ <glyph glyph-name="question-circle" unicode="&#xf059;"
+d="M896 160v192c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h192c18 0 32 14 32 32zM1152 832c0 183 -192 320 -364 320c-163 0 -285 -70 -371 -213c-9 -14 -5 -32 8 -42l132 -100c5 -4 12 -6 19 -6c9 0 19 4 25 12c47 60 67 78 86 92
+c17 12 50 24 86 24c64 0 123 -41 123 -85c0 -52 -27 -78 -88 -106c-71 -32 -168 -115 -168 -212v-36c0 -18 14 -32 32 -32h192c18 0 32 14 32 32c0 23 29 72 76 99c76 43 180 101 180 253zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768
+s768 -344 768 -768z" />
+ <glyph glyph-name="question-circle-o" unicode="&#xf29c;"
+d="M880 336v-160c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v160c0 18 14 32 32 32h160c18 0 32 -14 32 -32zM1136 832c0 -142 -99 -198 -172 -239c-52 -30 -84 -49 -84 -81v-32c0 -18 -14 -32 -32 -32h-160c-18 0 -32 14 -32 32v68c0 123 88 162 159 194
+c60 28 97 47 97 92c0 58 -73 101 -139 101c-35 0 -72 -11 -95 -27c-22 -15 -43 -37 -80 -83c-6 -8 -15 -12 -25 -12c-7 0 -14 2 -19 6l-108 82c-13 10 -16 29 -7 43c82 129 197 192 349 192c164 0 348 -130 348 -304zM768 1280c-353 0 -640 -287 -640 -640
+s287 -640 640 -640s640 287 640 640s-287 640 -640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="quora" unicode="&#xf2c4;" horiz-adv-x="1734"
+d="M1226 749c0 417 -130 631 -435 631c-300 0 -430 -214 -430 -631c0 -415 130 -627 430 -627c48 0 91 5 131 17c-62 122 -135 245 -277 245c-27 0 -54 -4 -79 -16l-49 97c59 51 154 91 276 91c191 0 288 -92 366 -209c45 100 67 235 67 402zM1616 117h117
+c7 -72 -29 -373 -356 -373c-198 0 -302 115 -381 249c-65 -18 -135 -27 -205 -27c-400 0 -791 319 -791 783c0 468 392 787 791 787c407 0 794 -317 794 -787c0 -262 -122 -475 -299 -612c57 -86 116 -143 198 -143c90 0 126 69 132 123z" />
+ <glyph glyph-name="quote-left" unicode="&#xf10d;" horiz-adv-x="1664"
+d="M768 576v-384c0 -106 -86 -192 -192 -192h-384c-106 0 -192 86 -192 192v704c0 282 230 512 512 512h64c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-64c-141 0 -256 -115 -256 -256v-32c0 -53 43 -96 96 -96h224c106 0 192 -86 192 -192zM1664 576v-384
+c0 -106 -86 -192 -192 -192h-384c-106 0 -192 86 -192 192v704c0 282 230 512 512 512h64c35 0 64 -29 64 -64v-128c0 -35 -29 -64 -64 -64h-64c-141 0 -256 -115 -256 -256v-32c0 -53 43 -96 96 -96h224c106 0 192 -86 192 -192z" />
+ <glyph glyph-name="quote-right" unicode="&#xf10e;" horiz-adv-x="1664"
+d="M768 1216v-704c0 -282 -230 -512 -512 -512h-64c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h64c141 0 256 115 256 256v32c0 53 -43 96 -96 96h-224c-106 0 -192 86 -192 192v384c0 106 86 192 192 192h384c106 0 192 -86 192 -192zM1664 1216v-704
+c0 -282 -230 -512 -512 -512h-64c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h64c141 0 256 115 256 256v32c0 53 -43 96 -96 96h-224c-106 0 -192 86 -192 192v384c0 106 86 192 192 192h384c106 0 192 -86 192 -192z" />
+ <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792"
+d="M666 1055c-56 -86 -97 -179 -137 -273c-58 121 -122 242 -273 242h-224c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h224c178 0 309 -83 410 -225zM1792 256c0 -8 -3 -17 -9 -23l-320 -320c-6 -6 -15 -9 -23 -9c-17 0 -32 15 -32 32v192c-297 0 -480 -35 -665 225
+c55 86 96 179 136 273c58 -121 122 -242 273 -242h256v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23zM1792 1152c0 -8 -3 -17 -9 -23l-320 -320c-6 -6 -15 -9 -23 -9c-17 0 -32 14 -32 32v192h-256c-133 0 -196 -91 -252 -199
+c-29 -56 -54 -114 -78 -171c-111 -258 -241 -526 -566 -526h-224c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h224c133 0 196 91 252 199c29 56 54 114 78 171c111 258 241 526 566 526h256v192c0 18 14 32 32 32c9 0 17 -4 24 -10l319 -319c6 -6 9 -15 9 -23z" />
+ <glyph glyph-name="ravelry" unicode="&#xf2d9;" horiz-adv-x="2080"
+d="M1095 -197c-4 1 -7 2 -11 4c0 0 -329 193 -440 505c-37 6 -115 24 -175 37c87 -283 329 -499 626 -546zM454 409l168 -28c-57 171 -64 366 -64 366c-67 -65 -103 -154 -121 -224c3 -39 8 -77 17 -114zM564 1018c-31 -46 -56 -96 -77 -148c33 35 60 58 74 68
+c-2 30 3 80 3 80zM2001 584c0 436 -352 790 -784 790c-200 0 -382 -76 -521 -201c-21 -41 -35 -93 -45 -160c213 181 593 136 593 136c95 -4 84 -88 83 -114c-346 29 -516 -70 -684 -213c0 0 33 -320 109 -450c438 -20 771 218 771 218c42 30 79 33 87 -19
+c6 -42 9 -99 -39 -121c-146 -68 -307 -111 -467 -134c-104 -15 -162 -19 -317 -16c148 -344 518 -438 518 -438c116 -19 204 -4 263 15c256 130 433 398 433 707zM2075 621c-7 -68 -18 -147 -40 -212c-90 -267 -215 -441 -500 -600c-26 -18 -54 -35 -82 -44
+c-51 -18 -106 -22 -163 -16c-24 -2 -48 -3 -73 -3c-381 0 -703 260 -800 615c-3 0 -6 1 -9 1c-23 -180 110 -423 110 -423s8 -12 54 -82c-255 135 -262 533 -262 533c-61 23 -273 95 -310 154c0 0 166 -91 309 -109c-1 1 2 32 2 32c9 122 51 217 94 290
+c28 137 90 261 176 365c15 62 39 136 81 214c18 34 35 56 81 77c304 142 604 178 912 18c295 -154 455 -476 420 -810z" />
+ <glyph glyph-name="react" unicode="&#xf302;" horiz-adv-x="1755"
+d="M1434 910v0c187 -64 321 -165 321 -269c0 -109 -143 -215 -341 -280c-11 -3 -21 -7 -32 -10c3 -13 7 -33 10 -46c39 -197 10 -360 -83 -413c-89 -52 -235 -1 -382 125c-16 14 -31 28 -46 43c-12 -12 -24 -22 -36 -33c-152 -133 -307 -187 -400 -134
+c-90 52 -118 203 -82 393c4 21 9 40 14 61c-16 4 -32 10 -47 15c-190 65 -330 172 -330 279c0 104 131 205 314 268c20 7 42 14 64 20c-5 19 -9 38 -13 57c-38 193 -11 348 79 400c94 55 250 -3 406 -142c8 -7 21 -20 29 -27c14 13 28 27 43 40c149 130 296 184 386 132
+c94 -54 121 -219 79 -423c-3 -13 -6 -25 -9 -38c15 -5 41 -13 56 -18zM970 1201v0c-14 -12 -27 -23 -40 -36c53 -57 101 -118 146 -182c77 -7 155 -20 231 -37c3 11 5 23 7 35c36 177 15 311 -43 344c-54 31 -173 -13 -301 -124zM524 553c-22 -52 -41 -104 -56 -153
+c52 -11 106 -19 159 -25c-19 29 -37 59 -54 89c-17 29 -33 59 -49 89zM524 726c15 30 32 61 49 90s35 59 53 87c-55 -7 -108 -16 -157 -27c15 -48 33 -99 55 -150zM563 640v0c23 -47 48 -93 74 -139c22 -38 59 -98 84 -134c50 -3 103 -5 157 -5s107 2 158 6
+c29 44 57 87 83 133c22 38 55 101 74 140c-23 47 -49 94 -75 139c-22 37 -59 96 -83 132c-51 4 -104 6 -157 6s-107 -2 -158 -6c-29 -44 -57 -87 -83 -133s-51 -92 -74 -139zM1182 464c-17 -29 -34 -59 -53 -88c54 6 108 16 161 28c-17 52 -35 102 -57 152
+c-16 -31 -34 -62 -51 -92zM1232 726c21 49 39 98 55 149c-49 11 -102 21 -157 28c15 -24 38 -63 52 -87c17 -29 34 -60 50 -90zM878 1112v0c-34 -37 -68 -79 -102 -123c28 1 74 3 102 3s74 -2 102 -3c-32 43 -66 84 -102 123zM481 1322c-54 -31 -76 -156 -44 -322
+c4 -18 8 -36 12 -53c76 17 154 29 231 36c45 64 94 125 147 182c-9 8 -17 16 -26 24c-135 119 -262 167 -320 133zM397 419c24 75 52 149 85 221c-33 71 -61 144 -84 218c-20 -6 -40 -12 -60 -19c-156 -55 -264 -135 -264 -198c7 -41 29 -78 64 -102
+c60 -48 143 -84 216 -107c14 -5 29 -9 43 -13zM796 83c11 10 22 19 33 30c-53 58 -103 119 -148 183c-79 6 -156 18 -233 34c-5 -19 -8 -38 -12 -57c-31 -163 -9 -284 46 -316c39 -15 83 -13 121 5c71 28 136 69 193 121zM880 166c36 40 70 81 102 125
+c-34 -2 -69 -3 -104 -3c-34 0 -68 1 -101 2c34 -45 68 -86 103 -124zM1328 63c11 76 9 153 -8 227c-2 12 -6 31 -9 42c-64 -14 -169 -31 -234 -36c-44 -64 -93 -126 -145 -184c15 -14 30 -27 44 -39c125 -108 241 -149 296 -117c33 26 53 65 56 107zM1391 432
+c171 57 291 143 291 210c0 62 -112 144 -272 199c-16 5 -34 11 -52 16c-23 -74 -51 -146 -84 -216c34 -71 64 -143 88 -218c10 3 19 6 29 9zM878 797c87 0 157 -70 157 -157s-70 -157 -157 -157s-157 70 -157 157s70 157 157 157z" />
+ <glyph glyph-name="rebel" unicode="&#xf1d0;" horiz-adv-x="1756"
+d="M0 662c10 286 156 550 421 724c1 0 7 2 4 -3c-21 -20 -402 -469 -51 -818c180 -179 325 -9 325 -9c139 181 -2 455 -2 455c-36 90 -165 145 -165 145l104 115c88 -38 156 -140 156 -140c3 107 -79 222 -79 222l161 183l160 -181c-74 -104 -79 -226 -79 -226
+c50 83 157 142 157 142l103 -115c-99 -32 -164 -144 -164 -144c-57 -103 -98 -323 2 -460c117 -161 317 10 317 10c371 332 -38 813 -38 813c-22 20 3 10 3 10c181 -132 414 -305 420 -740c7 -526 -361 -901 -876 -901c-503 0 -894 420 -879 918z" />
+ <glyph glyph-name="recycle" unicode="&#xf1b8;" horiz-adv-x="1760"
+d="M820 367l-15 -368l-2 -22l-420 29c-52 4 -95 53 -114 97c-40 93 12 203 42 292c0 0 77 -12 509 -28zM433 953l180 -379l-147 92c-225 -257 -246 -448 -246 -448l-190 357c-39 58 -4 121 -4 121s35 63 114 188l-140 86zM1664 436l-188 -359c-26 -65 -98 -71 -98 -71
+s-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173c339 -41 509 50 509 50zM879 1360c0 0 -47 -62 -265 -435l-317 187l-19 12l225 356c28 44 91 60 140 55c100 -9 172 -106 236 -175zM1534 1053l212 -363c27 -45 11 -108 -15 -150c-54 -84 -174 -104 -264 -129
+c0 0 -34 71 -265 436l313 195zM1391 1279l142 83l-220 -373l-419 20l151 86c-120 319 -279 429 -279 429l405 -1c70 6 108 -54 108 -54s39 -61 112 -190z" />
+ <glyph glyph-name="reddit" unicode="&#xf1a1;" horiz-adv-x="1792"
+d="M1095 369c9 -9 9 -23 0 -31c-57 -57 -167 -62 -199 -62s-142 5 -199 62c-9 8 -9 22 0 31c8 8 22 8 30 0c36 -37 114 -49 169 -49s132 12 169 49c8 8 22 8 30 0zM788 550c0 -49 -40 -89 -89 -89c-50 0 -90 40 -90 89c0 50 40 90 90 90c49 0 89 -40 89 -90zM1183 550
+c0 -49 -40 -89 -90 -89c-49 0 -89 40 -89 89c0 50 40 90 89 90c50 0 90 -40 90 -90zM1434 670c0 66 -54 119 -120 119c-34 0 -64 -14 -86 -36c-81 56 -190 92 -311 96l63 283l200 -45c0 -49 40 -89 89 -89c50 0 90 41 90 90s-40 90 -90 90c-35 0 -65 -21 -80 -50l-221 49
+c-11 3 -22 -5 -25 -16l-69 -312c-120 -5 -228 -41 -309 -97c-22 23 -53 37 -87 37c-66 0 -120 -53 -120 -119c0 -48 28 -88 68 -108c-4 -18 -6 -37 -6 -56c0 -190 214 -344 477 -344c264 0 478 154 478 344c0 19 -2 39 -7 57c39 20 66 60 66 107zM1792 640
+c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
+ <glyph glyph-name="reddit-alien" unicode="&#xf281;" horiz-adv-x="1792"
+d="M1792 690c0 -78 -44 -145 -109 -178c8 -31 12 -63 12 -96c0 -316 -357 -572 -797 -572c-439 0 -796 256 -796 572c0 32 4 64 11 94c-67 33 -113 101 -113 180c0 110 89 199 199 199c57 0 108 -24 145 -63c135 94 315 155 515 162l116 521c4 18 23 30 41 26l369 -81
+c24 48 75 82 133 82c83 0 150 -67 150 -149c0 -83 -67 -150 -150 -150c-82 0 -149 67 -149 149l-334 74l-104 -472c201 -6 383 -66 519 -160c36 38 87 61 143 61c110 0 199 -89 199 -199zM418 491c0 -83 67 -150 149 -150c83 0 150 67 150 150c0 82 -67 149 -150 149
+c-82 0 -149 -67 -149 -149zM1228 136c15 15 15 37 0 52c-14 14 -37 14 -51 0c-60 -61 -189 -82 -281 -82s-221 21 -281 82c-14 14 -37 14 -51 0c-15 -14 -15 -37 0 -52c95 -95 278 -102 332 -102s237 7 332 102zM1225 341c82 0 149 67 149 150c0 82 -67 149 -149 149
+c-83 0 -150 -67 -150 -149c0 -83 67 -150 150 -150z" />
+ <glyph glyph-name="reddit-square" unicode="&#xf1a2;"
+d="M939 407c7 -7 7 -19 0 -26c-49 -49 -143 -53 -171 -53s-122 4 -171 53c-7 7 -7 19 0 26c7 8 19 8 26 0c31 -31 98 -42 145 -42s114 11 145 42c7 8 19 8 26 0zM676 563c0 -42 -35 -77 -77 -77s-77 35 -77 77c0 43 35 77 77 77s77 -34 77 -77zM1014 563
+c0 -42 -35 -77 -77 -77s-77 35 -77 77c0 43 35 77 77 77s77 -34 77 -77zM1229 666c0 56 -46 102 -103 102c-28 0 -54 -12 -73 -31c-70 48 -164 79 -267 82l54 243l171 -39c1 -42 35 -76 77 -76s77 35 77 77s-35 77 -77 77c-30 0 -56 -17 -69 -43l-189 42
+c-10 3 -19 -4 -21 -13l-60 -268c-103 -4 -196 -35 -265 -83c-19 20 -45 32 -74 32c-57 0 -103 -46 -103 -102c0 -41 24 -76 58 -93c-3 -15 -5 -32 -5 -48c0 -163 183 -295 409 -295s410 132 410 295c0 17 -2 33 -6 49c33 17 56 52 56 92zM1536 1120v-960
+c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="refresh" unicode="&#xf021;"
+d="M1511 480c0 -2 0 -5 -1 -7c-85 -354 -377 -601 -746 -601c-195 0 -384 77 -526 212l-129 -129c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v448c0 35 29 64 64 64h448c35 0 64 -29 64 -64c0 -17 -7 -33 -19 -45l-137 -137c94 -88 219 -138 348 -138
+c178 0 343 92 436 244c24 39 36 77 53 117c5 14 15 23 30 23h192c18 0 32 -15 32 -32zM1536 1280v-448c0 -35 -29 -64 -64 -64h-448c-35 0 -64 29 -64 64c0 17 7 33 19 45l138 138c-95 88 -220 137 -349 137c-178 0 -343 -92 -436 -244c-24 -39 -36 -77 -53 -117
+c-5 -14 -15 -23 -30 -23h-199c-18 0 -32 15 -32 32v7c86 355 381 601 750 601c196 0 387 -78 529 -212l130 129c12 12 28 19 45 19c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="registered" unicode="&#xf25d;" horiz-adv-x="1792"
+d="M1042 833c0 58 -20 99 -60 121c-20 11 -48 18 -117 18h-123v-281h162c88 0 138 52 138 142zM1094 548l205 -373c5 -10 5 -22 -1 -31c-5 -10 -16 -16 -27 -16h-152c-12 0 -23 6 -28 17l-194 365h-155v-350c0 -18 -14 -32 -32 -32h-134c-18 0 -32 14 -32 32v960
+c0 18 14 32 32 32h294c105 0 151 -9 190 -24c113 -42 183 -153 183 -289c0 -123 -61 -227 -158 -275c3 -5 6 -10 9 -16zM896 1376c-406 0 -736 -330 -736 -736s330 -736 736 -736s736 330 736 736s-330 736 -736 736zM1792 640c0 -495 -401 -896 -896 -896
+s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
+ <glyph glyph-name="renren" unicode="&#xf18b;"
+d="M1133 -34c-109 -60 -234 -94 -368 -94c-133 0 -258 34 -367 94c177 112 320 281 367 479c48 -198 191 -367 368 -479zM638 1394v-485c0 -342 -189 -636 -457 -766c-113 134 -181 306 -181 495c0 380 276 695 638 756zM1536 638c0 -189 -68 -361 -181 -495
+c-268 130 -457 424 -457 766v485c362 -61 638 -376 638 -756z" />
+ <glyph glyph-name="repeat" unicode="&#xf01e;"
+d="M1536 1280v-448c0 -35 -29 -64 -64 -64h-448c-26 0 -49 16 -59 40c-10 23 -5 51 14 69l138 138c-94 87 -218 137 -349 137c-282 0 -512 -230 -512 -512s230 -512 512 -512c159 0 306 72 404 199c5 7 14 11 23 12c9 0 18 -3 25 -9l137 -138c12 -11 12 -30 2 -43
+c-146 -176 -362 -277 -591 -277c-423 0 -768 345 -768 768s345 768 768 768c197 0 388 -79 529 -212l130 129c18 19 46 24 70 14c23 -10 39 -33 39 -59z" />
+ <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792"
+d="M1792 416c0 -140 -70 -323 -127 -451c-11 -23 -22 -55 -37 -76c-7 -10 -14 -17 -28 -17c-20 0 -32 16 -32 35c0 16 4 34 5 50c3 41 5 82 5 123c0 477 -283 560 -714 560h-224v-256c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-512 512c-12 12 -19 28 -19 45s7 33 19 45
+l512 512c12 12 28 19 45 19c35 0 64 -29 64 -64v-256h224c328 0 736 -58 875 -403c42 -106 53 -221 53 -333z" />
+ <glyph glyph-name="reply-all" unicode="&#xf122;" horiz-adv-x="1792"
+d="M640 454v-70c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-512 512c-25 25 -25 65 0 90l512 512c18 19 46 24 70 14c23 -10 39 -33 39 -59v-69l-397 -398c-25 -25 -25 -65 0 -90zM1792 416c0 -208 -157 -514 -164 -527c-5 -11 -16 -17 -28 -17
+c-3 0 -6 0 -9 1c-15 5 -24 19 -23 34c29 273 -5 453 -106 565c-85 95 -223 146 -438 163v-251c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-512 512c-25 25 -25 65 0 90l512 512c18 19 46 24 70 14c23 -10 39 -33 39 -59v-262c276 -19 473 -92 599 -221
+c151 -155 169 -365 169 -509z" />
+ <glyph glyph-name="researchgate" unicode="&#xf338;" horiz-adv-x="1655"
+d="M1056 -253c-129 14 -204 69 -326 240c-60 85 -148 223 -200 314l-32 56h-155v-207c0 -128 3 -219 8 -236c12 -46 35 -62 91 -71c105 -16 94 -11 94 -47v-33h-536v33c0 18 1 33 3 33c21 0 110 23 123 31c9 6 23 25 30 43c12 30 12 66 12 526c0 391 -2 500 -9 520
+c-13 36 -41 58 -88 67c-77 15 -71 11 -71 49v34h319c338 0 367 -2 450 -34c91 -35 165 -112 192 -198c20 -64 21 -160 1 -223c-19 -60 -74 -141 -123 -181c-40 -33 -125 -78 -147 -78c-10 0 -8 -7 13 -43c77 -132 241 -352 316 -425c44 -43 104 -79 150 -89l37 -8v-30
+c0 -25 -2 -31 -15 -36c-25 -9 -87 -12 -137 -7v0zM564 467c53 10 117 43 150 76c92 92 102 273 20 366c-61 70 -115 87 -276 87h-115v-528l16 -3c31 -6 169 -5 205 2v0zM1325 797c-105 22 -174 98 -192 212c-9 57 -9 251 0 309c15 95 71 170 148 199c75 28 174 25 240 -8
+c48 -24 113 -98 113 -128c0 -7 -94 -46 -98 -41c-1 2 -12 16 -24 34c-28 42 -67 61 -123 61c-57 0 -97 -26 -124 -81c-19 -38 -19 -42 -21 -174c-2 -109 0 -144 9 -174c21 -74 75 -111 154 -105c80 6 131 66 131 158v40h-137v96h254v-74c0 -140 -22 -210 -83 -265
+c-19 -17 -52 -38 -73 -46c-44 -17 -129 -23 -174 -13v0z" />
+ <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920"
+d="M1280 32c0 -17 -15 -32 -32 -32h-960c-37 0 -32 39 -32 64v576h-192c-35 0 -64 29 -64 64c0 15 5 30 15 41l320 384c12 14 30 22 49 22s37 -8 49 -22l320 -384c10 -11 15 -26 15 -41c0 -35 -29 -64 -64 -64h-192v-384h576c9 0 19 -4 25 -11l160 -192c4 -6 7 -14 7 -21z
+M1920 448c0 -15 -5 -30 -15 -41l-320 -384c-12 -14 -30 -23 -49 -23s-37 9 -49 23l-320 384c-10 11 -15 26 -15 41c0 35 29 64 64 64h192v384h-576c-9 0 -19 4 -25 12l-160 192c-4 5 -7 13 -7 20c0 17 15 32 32 32h960c37 0 32 -39 32 -64v-576h192c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1820"
+d="M1061 540v4l-24 320c-1 18 -17 32 -34 32h-186c-17 0 -33 -14 -34 -32l-24 -320v-4c-1 -16 14 -28 29 -28h244c15 0 30 12 29 28zM1820 73c0 -29 -8 -73 -46 -73h-704c17 0 31 14 30 32l-20 256c-1 18 -17 32 -34 32h-272c-17 0 -33 -14 -34 -32l-20 -256
+c-1 -18 13 -32 30 -32h-704c-38 0 -46 44 -46 73c0 40 11 80 26 116l417 1044c10 25 37 47 64 47h339c-17 0 -33 -14 -34 -32l-15 -192c-1 -18 12 -32 30 -32h166c18 0 31 14 30 32l-15 192c-1 18 -17 32 -34 32h339c27 0 54 -22 64 -47l417 -1044c15 -36 26 -76 26 -116z
+" />
+ <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1632"
+d="M1408 1088c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1632 1376c0 -332 -92 -553 -329 -791c-58 -57 -124 -116 -195 -176l-20 -379c-1 -10 -7 -20 -16 -26l-384 -224c-5 -3 -10 -4 -16 -4c-8 0 -16 3 -23 9l-64 64c-8 9 -11 21 -8 32l85 276
+l-281 281l-276 -85c-3 -1 -6 -1 -9 -1c-8 0 -17 3 -23 9l-64 64c-10 11 -12 27 -5 39l224 384c6 9 16 15 26 16l379 20c60 71 119 137 176 195c250 249 441 329 789 329c18 0 34 -14 34 -32z" />
+ <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408"
+d="M384 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM896 69c1 -18 -5 -35 -17 -48c-12 -14 -29 -21 -47 -21h-135c-33 0 -60 25 -63 58c-29 305 -271 547 -576 576c-33 3 -58 30 -58 63v135c0 18 7 35 21 47c11 11 27 17 43 17h5
+c213 -17 414 -110 565 -262c152 -151 245 -352 262 -565zM1408 67c1 -17 -5 -34 -18 -47c-12 -13 -28 -20 -46 -20h-143c-34 0 -62 26 -64 60c-33 581 -496 1044 -1077 1078c-34 2 -60 30 -60 63v143c0 18 7 34 20 46c12 12 28 18 44 18h3c350 -18 679 -165 927 -414
+c249 -248 396 -577 414 -927z" />
+ <glyph glyph-name="rss-square" unicode="&#xf143;"
+d="M512 256c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM863 162c-17 310 -263 556 -573 573c-9 1 -18 -3 -24 -9s-10 -14 -10 -23v-128c0 -17 13 -31 30 -32c205 -15 370 -180 385 -385c1 -17 15 -30 32 -30h128c9 0 17 4 23 10
+s10 15 9 24zM1247 161c-17 520 -438 941 -958 958c-10 1 -17 -2 -23 -9c-6 -6 -10 -14 -10 -23v-128c0 -17 14 -31 31 -32c415 -15 753 -353 768 -768c1 -17 15 -31 32 -31h128c9 0 17 4 23 10c7 6 10 14 9 23zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960
+c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280"
+d="M1043 971c0 134 -95 224 -236 224h-320v-448h320c141 0 236 90 236 224zM1280 971c0 -257 -186 -437 -453 -437h-340v-118h505c18 0 32 -14 32 -32v-128c0 -18 -14 -32 -32 -32h-505v-192c0 -18 -14 -32 -32 -32h-167c-18 0 -32 14 -32 32v192h-224c-18 0 -32 14 -32 32
+v128c0 18 14 32 32 32h224v118h-224c-18 0 -32 14 -32 32v149c0 18 14 32 32 32h224v629c0 18 14 32 32 32h539c267 0 453 -180 453 -437z" />
+ <glyph glyph-name="safari" unicode="&#xf267;" horiz-adv-x="1792"
+d="M949 643c0 -33 -23 -64 -58 -64c-33 0 -64 24 -64 58c0 33 24 64 59 64c32 0 63 -23 63 -58zM964 585l350 581c-47 -44 -485 -447 -497 -468l-349 -580c46 43 485 448 496 467zM1611 640c0 -131 -36 -260 -104 -371c-10 5 -52 35 -60 35c-7 0 -13 -6 -13 -13
+c0 -13 47 -37 59 -44c-99 -150 -252 -258 -426 -301l-16 67c-1 9 -7 10 -15 10c-7 0 -11 -10 -10 -15l16 -68c-48 -10 -97 -15 -146 -15c-131 0 -260 37 -372 105c6 10 44 65 44 73c0 7 -6 13 -13 13c-14 0 -44 -60 -53 -72c-151 100 -260 255 -302 432l69 15
+c8 2 10 8 10 15s-10 11 -16 10l-68 -15c-9 46 -14 92 -14 139c0 134 38 266 109 379c10 -6 58 -39 66 -39c7 0 13 5 13 12c0 14 -53 41 -65 49c102 149 257 256 433 296l15 -67c2 -8 8 -10 15 -10s11 10 10 16l-15 66c44 8 89 13 134 13c134 0 265 -38 379 -109
+c-7 -10 -39 -57 -39 -65c0 -7 5 -13 12 -13c14 0 41 52 48 64c148 -100 254 -253 295 -427l-56 -12c-9 -2 -10 -8 -10 -16c0 -7 10 -11 15 -10l57 13c9 -46 14 -93 14 -140zM1696 640c0 442 -358 800 -800 800s-800 -358 -800 -800s358 -800 800 -800s800 358 800 800z
+M1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
+ <glyph glyph-name="sass" unicode="&#xf358;" horiz-adv-x="1792"
+d="M896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM1146 1318c-77 0 -160 -14 -242 -43c-149 -53 -309 -136 -425 -244c-138 -129 -160 -240 -151 -287c32 -165 258 -273 351 -353v-1c-27 -13 -228 -115 -275 -219
+c-50 -110 8 -187 46 -198c118 -33 239 26 304 123c63 94 57 214 30 274c38 10 81 15 137 8c157 -18 188 -116 182 -157s-38 -64 -49 -71s-15 -9 -14 -14c1 -7 7 -8 16 -6c13 2 82 34 85 110c4 96 -88 204 -251 201c-67 -1 -109 -8 -140 -19l-7 7c-101 108 -288 184 -280 329
+c3 53 21 192 359 360c276 138 498 99 536 15c55 -120 -119 -343 -406 -375c-109 -12 -167 30 -181 46c-15 17 -17 17 -23 14c-9 -5 -3 -19 0 -28c9 -22 44 -62 104 -82c53 -17 181 -26 336 34c174 67 310 255 270 411c-27 107 -155 165 -312 165zM718 342v0
+c13 -48 11 -93 -2 -134c-2 -8 -8 -20 -11 -27c-10 -22 -24 -41 -41 -60c-52 -57 -125 -78 -156 -60c-34 20 -16 99 44 163c65 69 158 113 158 113v0c2 1 6 4 8 5z" />
+ <glyph glyph-name="sass-alt" unicode="&#xf359;" horiz-adv-x="2304"
+d="M1629 198c-7 5 -6 23 18 75c9 21 31 55 68 88c4 -14 7 -27 7 -39c0 -81 -58 -111 -93 -124zM1321 128c-10 -5 -19 -8 -23 -6c-3 2 4 9 4 9s50 54 70 78c11 14 25 31 39 50v-5c0 -64 -62 -109 -90 -126zM922 319c-23 -56 -72 -201 -101 -193c-25 7 -41 116 -5 224
+c18 54 56 120 79 145c36 41 75 53 85 37c12 -21 -44 -178 -58 -213v0zM438 -10c-66 -72 -159 -100 -199 -77c-43 25 -25 132 56 209c50 47 113 89 156 116c10 6 24 15 41 25c3 2 5 3 5 3v0c3 2 6 4 10 6c30 -109 1 -206 -69 -282zM1983 511c-81 0 -151 -20 -209 -49
+c-21 43 -43 80 -47 108c-4 33 -9 52 -4 91s28 94 28 98s-6 24 -52 24s-86 -9 -91 -21s-13 -39 -19 -68c-8 -42 -93 -192 -141 -271c-16 31 -28 58 -31 79c-4 33 -10 52 -5 91s28 94 28 98s-6 24 -52 24s-86 -9 -91 -21s-9 -41 -19 -69s-122 -278 -151 -343
+c-15 -33 -28 -60 -37 -78h-1s0 -1 -1 -3c-8 -15 -13 -24 -13 -24v-1c-6 -11 -13 -21 -16 -21c-2 0 -7 30 1 71c17 87 57 222 57 227c0 2 7 27 -27 39c-33 12 -44 -8 -47 -8s-5 -7 -5 -7s36 152 -70 152c-66 0 -158 -72 -203 -138c-43 -23 -112 -62 -155 -85
+c-21 -11 -54 -30 -75 -41l-5 5c-129 137 -366 235 -356 420c4 67 27 244 457 458c352 176 635 127 684 20c70 -153 -151 -437 -517 -478c-139 -16 -213 38 -231 58c-19 21 -23 22 -30 18c-12 -6 -4 -25 0 -36c11 -28 57 -79 133 -104c67 -22 231 -35 429 42
+c222 86 395 325 344 524c-52 203 -389 270 -707 157c-189 -67 -395 -173 -542 -311c-175 -164 -204 -307 -192 -367c41 -212 333 -350 450 -452c-6 -3 -11 -6 -16 -9c-59 -29 -281 -146 -337 -269c-63 -140 11 -240 59 -253c150 -42 304 33 387 157s73 285 35 358
+c0 1 -2 2 -2 3c13 7 33 20 46 27c30 18 60 33 85 47c-14 -39 -25 -86 -30 -153c-6 -79 25 -182 68 -222c19 -18 42 -18 56 -18c49 0 72 41 97 90c30 60 57 129 57 129s-34 -188 59 -188c34 0 67 44 82 66h1s0 1 2 4c4 5 6 9 6 9v1c14 24 43 78 88 166
+c58 114 115 257 115 257s5 -35 22 -93c10 -34 31 -72 48 -108c-14 -19 -22 -29 -22 -29v-1c-11 -14 -22 -30 -35 -45c-46 -55 -101 -117 -108 -135c-9 -21 -7 -36 10 -49c12 -9 33 -11 56 -9c41 3 71 13 85 19c22 8 49 20 73 38c45 33 72 80 69 143c-1 35 -12 70 -26 102
+l12 18c71 104 126 218 126 218s6 -35 23 -93c9 -29 26 -62 41 -93c-67 -54 -109 -118 -123 -159c-27 -77 -6 -111 33 -119c18 -4 43 5 62 13c23 8 52 21 78 40c45 33 88 79 85 142c-1 29 -8 57 -19 84c57 24 130 37 223 26c200 -23 240 -149 232 -201s-49 -81 -63 -90
+s-18 -12 -17 -18c2 -9 8 -9 20 -7c16 3 105 42 109 139c5 123 -113 258 -321 257z" />
+ <glyph glyph-name="scissors" unicode="&#xf0c4;" horiz-adv-x="1792"
+d="M960 640c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1260 576l507 -398c18 -13 27 -35 25 -56c-3 -22 -16 -41 -35 -51l-128 -64c-9 -5 -19 -7 -29 -7c-11 0 -22 3 -31 8l-690 387l-110 -66c-4 -2 -8 -4 -12 -5c9 -31 13 -64 10 -97
+c-9 -103 -78 -201 -188 -271c-85 -54 -183 -84 -277 -84c-90 0 -166 27 -222 78c-57 53 -86 129 -79 207c9 102 78 201 187 271c85 54 184 84 278 84c56 0 107 -11 151 -31c6 9 13 16 22 22l122 73l-122 73c-9 6 -16 13 -22 22c-44 -20 -95 -31 -151 -31
+c-94 0 -193 30 -278 84c-109 70 -178 169 -187 271c-7 78 22 154 79 206c56 52 132 79 222 79c94 0 192 -30 277 -84c110 -69 179 -168 188 -271c3 -33 -1 -66 -10 -97c4 -1 8 -3 12 -5l110 -66l690 387c9 5 20 8 31 8c10 0 20 -2 29 -7l128 -64c19 -10 32 -29 35 -51
+c2 -21 -7 -43 -25 -56zM579 836c61 56 23 157 -85 225c-61 39 -132 59 -192 59c-46 0 -87 -12 -113 -36c-61 -56 -23 -157 85 -225c61 -39 131 -59 192 -59c46 0 87 12 113 36zM494 91c108 68 146 169 85 225c-26 24 -67 36 -113 36c-61 0 -131 -20 -192 -59
+c-108 -68 -146 -169 -85 -225c26 -24 67 -36 113 -36c60 0 131 20 192 59zM672 704l96 -58v11c0 23 13 44 33 56l14 8l-79 47l-26 -26c-8 -8 -14 -16 -22 -23c-3 -3 -5 -4 -7 -6zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8c2 -3 4 -4 7 -6
+c8 -8 14 -16 22 -24l26 -26zM1600 64l128 64l-520 408l-177 -138c-3 -4 -8 -5 -13 -7z" />
+ <glyph glyph-name="scribd" unicode="&#xf28a;" horiz-adv-x="1464"
+d="M1464 -13c0 -119 -96 -216 -216 -216s-217 97 -217 216c0 120 97 217 217 217s216 -97 216 -217zM1231 268c-152 -20 -270 -150 -270 -308c0 -49 12 -97 33 -138c-90 -48 -212 -78 -379 -78c-532 0 -615 376 -615 426c0 51 30 218 218 218s214 -161 214 -194
+c0 0 0 -34 -23 -81c64 -60 215 -60 215 -60c151 0 265 74 265 184c0 111 -128 165 -420 302c-292 138 -402 239 -402 490c0 252 168 507 587 507s577 -235 577 -396s-137 -201 -188 -201c-50 0 -235 -17 -235 261c-33 37 -177 37 -177 37c-145 0 -209 -110 -209 -177
+c0 -68 27 -152 329 -252c463 -154 480 -355 480 -540z" />
<glyph glyph-name="scuttlebutt" unicode="&#xf2ea;" horiz-adv-x="1709"
d="M760 -126c-31 4 -114 28 -131 38c-5 3 -12 10 -16 16l-8 10l-7 -5c-14 -9 -14 -9 -151 60c-70 36 -134 68 -141 71c-21 10 -30 25 -45 74c-5 17 -6 19 -12 21c-18 7 -84 50 -121 78c-27 21 -66 60 -70 70c-10 25 -31 91 -37 112c-18 60 -21 88 -21 178c0 60 0 68 4 76
c5 11 24 29 46 43c29 19 128 68 192 96l8 4l-4 8c-3 5 -16 24 -29 42l-24 33h-10c-21 1 -28 3 -48 16s-21 13 -39 41c-56 87 -91 163 -95 205c-4 46 23 129 52 160c9 9 17 16 28 22c16 8 17 8 40 8c19 0 25 -1 35 -5c27 -11 44 -29 49 -50c2 -11 2 -17 -1 -43
@@ -2099,223 +2426,405 @@ c-4 -7 -5 -9 -2 -15c1 -4 8 -12 14 -19c11 -11 12 -12 20 -11c5 1 17 6 26 12zM525 8
c0 -3 5 -4 15 -7c8 -2 18 -7 23 -10s14 -7 20 -11s16 -10 21 -13s24 -10 41 -16c23 -8 35 -14 47 -22l16 -11v11c0 6 0 26 -2 44zM210 969c12 6 27 21 27 26c0 1 -11 11 -24 23c-40 34 -56 64 -67 125c-5 27 -5 80 0 114c4 24 4 25 0 27c-14 9 -30 11 -43 4
c-9 -4 -10 -7 -21 -30c-22 -47 -28 -86 -19 -114c10 -32 40 -90 75 -146c26 -41 40 -47 72 -29zM519 1007c20 5 27 8 36 14c2 2 2 6 -4 22c-12 30 -23 69 -29 103c-7 36 -7 79 -3 124c3 27 2 70 -1 73c-5 5 -72 -1 -79 -7c-4 -4 -6 -29 -3 -62c-2 -41 16 -99 14 -134
c-2 -25 0 -32 22 -93c14 -39 16 -45 20 -45c2 0 15 2 27 5z" />
- <glyph glyph-name="social-home" unicode="&#xf2ec;" horiz-adv-x="1486"
-d="M491 894h482v-621h-482v621v0zM1050 538h341v-666h-341v666zM91 273v0v620h318v-620h-318zM975 -128h-882v326h882v-326v0zM1053 894h340v-279h-340v279zM1452 1109v0c20 -5 34 -22 34 -44c0 -26 -93 -93 -93 -93h-1300s-87 62 -92 83s5 42 25 51l624 292
-c16 9 99 9 112 0z" />
- <glyph glyph-name="leanpub" unicode="&#xf212;" horiz-adv-x="2048"
-d="M1893 1144l155 -1272c-93 0 -173 19 -257 57c-125 57 -255 91 -393 91c-142 0 -273 -47 -374 -148c-101 101 -232 148 -374 148c-138 0 -268 -34 -393 -91c-81 -36 -163 -57 -252 -57h-5l155 1272c143 81 317 127 482 127c135 0 274 -28 387 -106c113 78 252 106 387 106
-c165 0 339 -46 482 -127zM1398 157c190 0 320 -51 492 -122l-124 1021c-112 51 -245 78 -368 78c-140 0 -271 -44 -374 -141c-103 97 -234 141 -374 141c-123 0 -256 -27 -368 -78l-124 -1021c172 71 302 122 492 122c137 0 258 -35 374 -108c116 73 237 108 374 108z
-M1438 191l-40 1c-132 3 -261 -32 -374 -102c-113 70 -242 102 -374 102c-166 0 -299 -39 -450 -101l114 941c104 43 224 66 336 66c150 0 269 -48 374 -155c101 103 215 152 359 155z" />
- <glyph glyph-name="arrow-circle-left" unicode="&#xf0a8;"
-d="M1280 576v128c0 35 -29 64 -64 64h-502l189 189c12 12 19 28 19 45s-7 33 -19 45l-91 91c-12 12 -28 18 -45 18s-33 -6 -45 -18l-362 -362l-91 -91c-12 -12 -18 -28 -18 -45s6 -33 18 -45l91 -91l362 -362c12 -12 28 -18 45 -18s33 6 45 18l91 91c12 12 18 28 18 45
-s-6 33 -18 45l-189 189h502c35 0 64 29 64 64zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="exclamation-triangle" unicode="&#xf071;" horiz-adv-x="1792"
-d="M1024 161v190c0 18 -14 33 -32 33h-192c-18 0 -32 -15 -32 -33v-190c0 -18 14 -33 32 -33h192c18 0 32 15 32 33zM1022 535l18 459c0 6 -3 14 -10 19c-6 5 -15 11 -24 11h-220c-9 0 -18 -6 -24 -11c-7 -5 -10 -15 -10 -21l17 -457c0 -13 15 -23 34 -23h185
-c18 0 33 10 34 23zM1008 1469l768 -1408c22 -39 21 -87 -2 -126s-65 -63 -110 -63h-1536c-45 0 -87 24 -110 63s-24 87 -2 126l768 1408c22 41 65 67 112 67s90 -26 112 -67z" />
- <glyph glyph-name="gift" unicode="&#xf06b;"
-d="M928 180v716h-320v-716c0 -35 29 -52 64 -52h192c35 0 64 17 64 52zM472 1024h195l-126 161c-11 13 -35 31 -69 31c-53 0 -96 -43 -96 -96s43 -96 96 -96zM1160 1120c0 53 -43 96 -96 96c-34 0 -58 -18 -69 -31l-125 -161h194c53 0 96 43 96 96zM1536 864v-320
-c0 -18 -14 -32 -32 -32h-96v-416c0 -53 -43 -96 -96 -96h-1088c-53 0 -96 43 -96 96v416h-96c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h440c-124 0 -224 100 -224 224s100 224 224 224c67 0 129 -28 168 -77l128 -165l128 165c39 49 101 77 168 77
-c124 0 224 -100 224 -224s-100 -224 -224 -224h440c18 0 32 -14 32 -32z" />
- <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920"
-d="M896 640c0 141 -115 256 -256 256s-256 -115 -256 -256s115 -256 256 -256s256 115 256 256zM1664 128c0 70 -58 128 -128 128s-128 -58 -128 -128c0 -71 58 -128 128 -128c71 0 128 58 128 128zM1664 1152c0 70 -58 128 -128 128s-128 -58 -128 -128
-c0 -71 58 -128 128 -128c71 0 128 58 128 128zM1280 731v-185c0 -13 -10 -28 -23 -30l-155 -24c-8 -26 -19 -51 -32 -76c28 -40 58 -77 90 -115c4 -6 7 -12 7 -20c0 -7 -2 -14 -7 -19c-20 -27 -132 -149 -161 -149c-8 0 -15 3 -21 7l-115 90c-25 -13 -50 -23 -77 -31
-c-5 -51 -10 -106 -23 -155c-4 -14 -16 -24 -30 -24h-186c-14 0 -28 11 -30 25l-23 153c-26 8 -51 19 -75 31l-118 -89c-5 -5 -13 -7 -20 -7c-8 0 -15 3 -21 8c-26 24 -144 131 -144 160c0 7 3 13 7 19c29 38 59 75 88 114c-14 27 -26 54 -35 82l-152 24c-14 2 -24 15 -24 29
-v185c0 13 10 28 23 30l155 24c8 26 19 51 32 76c-28 40 -58 77 -90 115c-4 6 -7 13 -7 20s2 14 7 20c20 27 132 148 161 148c8 0 15 -3 21 -7l115 -90c25 13 50 23 77 32c5 50 10 105 23 154c4 14 16 24 30 24h186c14 0 28 -11 30 -25l23 -153c26 -8 51 -19 75 -31l118 89
-c6 5 13 7 20 7c8 0 15 -3 21 -8c26 -24 144 -132 144 -160c0 -7 -3 -13 -7 -19c-29 -39 -59 -75 -87 -114c13 -27 25 -54 34 -82l152 -23c14 -3 24 -16 24 -30zM1920 198v-140c0 -15 -129 -29 -149 -31c-8 -19 -18 -36 -30 -52c9 -20 51 -120 51 -138c0 -3 -1 -5 -4 -7
-c-12 -7 -119 -71 -124 -71c-13 0 -88 100 -98 115c-10 -1 -20 -2 -30 -2s-20 1 -30 2c-10 -15 -85 -115 -98 -115c-5 0 -112 64 -124 71c-3 2 -4 5 -4 7c0 17 42 118 51 138c-12 16 -22 33 -30 52c-20 2 -149 16 -149 31v140c0 15 129 29 149 31c8 18 18 36 30 52
-c-9 20 -51 121 -51 138c0 2 1 5 4 7c12 6 119 70 124 70c13 0 88 -99 98 -114c10 1 20 2 30 2s20 -1 30 -2c28 39 58 78 92 112l6 2c5 0 112 -63 124 -70c3 -2 4 -5 4 -7c0 -18 -42 -118 -51 -138c12 -16 22 -34 30 -52c20 -2 149 -16 149 -31zM1920 1222v-140
-c0 -15 -129 -29 -149 -31c-8 -19 -18 -36 -30 -52c9 -20 51 -120 51 -138c0 -3 -1 -5 -4 -7c-12 -7 -119 -71 -124 -71c-13 0 -88 100 -98 115c-10 -1 -20 -2 -30 -2s-20 1 -30 2c-10 -15 -85 -115 -98 -115c-5 0 -112 64 -124 71c-3 2 -4 5 -4 7c0 17 42 118 51 138
-c-12 16 -22 33 -30 52c-20 2 -149 16 -149 31v140c0 15 129 29 149 31c8 18 18 36 30 52c-9 20 -51 121 -51 138c0 2 1 5 4 7c12 6 119 70 124 70c13 0 88 -99 98 -114c10 1 20 2 30 2s20 -1 30 -2c28 39 58 78 92 112l6 2c5 0 112 -63 124 -70c3 -2 4 -5 4 -7
-c0 -18 -42 -118 -51 -138c12 -16 22 -34 30 -52c20 -2 149 -16 149 -31z" />
- <glyph glyph-name="hackaday" unicode="&#xf30a;" horiz-adv-x="1686"
-d="M215 1408c118 0 214 -95 215 -213v-2c0 -11 -1 -21 -3 -31l168 -149c-60 -45 -109 -106 -142 -178l-173 154c-21 -7 -42 -11 -65 -11c-119 0 -215 96 -215 215c0 14 1 28 4 42l138 -122l150 167l-134 120c18 5 37 8 57 8zM1247 436l162 -143c17 5 45 9 62 9v0
-c118 0 214 -95 215 -213v-2c0 -13 -2 -26 -4 -39l-139 123l-150 -166l140 -124c-20 -6 -41 -9 -62 -9c-119 0 -215 96 -215 215c0 12 1 24 3 35l-140 124c56 50 100 115 128 190zM1471 1408c20 0 39 -3 57 -8l-134 -120l150 -167l138 122c3 -14 4 -28 4 -42
-c0 -119 -96 -215 -215 -215c-23 0 -44 4 -65 11l-174 -154c-33 72 -81 133 -141 178l167 149c-2 10 -2 20 -2 31v2c1 118 97 213 215 213zM439 436v0c28 -75 71 -140 127 -190l-139 -124c2 -11 3 -23 3 -35c0 -119 -96 -215 -215 -215c-21 0 -42 3 -62 9l140 124l-150 166
-l-139 -123c-2 13 -4 26 -4 39v2c1 118 97 213 215 213v0c17 0 45 -4 62 -9zM843 1062c222 0 401 -199 401 -445c0 -153 -69 -288 -175 -368c8 -12 12 -26 12 -41c0 -42 -33 -76 -75 -76s-76 34 -76 76c0 4 0 8 1 12h-13c1 -3 0 -9 0 -12v0c0 -42 -33 -76 -75 -76
-s-76 34 -76 76c0 4 0 8 1 12h-10v-9c0 -43 -35 -79 -77 -79s-77 36 -77 79c0 15 4 28 11 40c-105 80 -173 214 -173 366c0 246 179 445 401 445zM670 730c-8 0 -15 -1 -22 -3c-28 -4 -52 -23 -69 -45c-15 -18 -26 -40 -26 -64c-2 -20 1 -39 5 -58c5 -23 21 -41 39 -54
-c8 -7 20 -16 31 -8c7 9 1 23 7 33c2 10 9 18 18 23c18 9 37 18 57 25c16 5 29 15 43 24c18 14 30 40 21 62c-10 18 -22 34 -39 46c-19 12 -42 19 -65 19zM1015 730c-23 0 -45 -7 -64 -19c-17 -12 -29 -28 -39 -46c-9 -22 3 -48 21 -62c14 -9 27 -19 43 -24
-c20 -7 38 -16 56 -25c9 -5 17 -13 19 -23c6 -10 0 -24 7 -33c11 -8 23 1 31 8c18 13 34 31 39 54c4 19 7 38 5 58c0 24 -11 46 -26 64c-17 22 -41 41 -69 45c-7 2 -15 3 -23 3zM844 502c-20 1 -44 -88 -40 -126c12 -51 16 36 40 36c23 -1 19 -88 37 -35
-c5 35 -16 124 -37 125z" />
- <glyph glyph-name="frown-o" unicode="&#xf119;"
-d="M1134 307c11 -34 -8 -69 -41 -80c-34 -11 -70 8 -81 42c-33 107 -132 179 -244 179s-211 -72 -244 -179c-11 -34 -47 -53 -80 -42c-34 11 -53 46 -42 80c50 161 197 269 366 269s316 -108 366 -269zM640 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
-s128 -57 128 -128zM1152 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768
-s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="opera" unicode="&#xf26a;" horiz-adv-x="1792"
-d="M1493 1308c-105 70 -228 110 -359 110c-213 0 -401 -109 -533 -273c-96 -120 -163 -290 -168 -484v-42c5 -194 72 -364 168 -484c132 -164 320 -273 533 -273c131 0 254 40 359 110c-158 -142 -368 -228 -597 -228c-14 0 -29 0 -43 1c-475 22 -853 414 -853 895
-c0 495 401 896 896 896h3c228 -1 436 -87 594 -228zM1792 640c0 -261 -112 -495 -290 -659c-68 -41 -143 -63 -222 -63c-92 0 -179 30 -255 84c203 74 353 331 353 638c0 306 -149 563 -352 638c76 53 162 83 254 83c81 0 157 -23 226 -65c176 -164 286 -397 286 -656z" />
- <glyph glyph-name="viadeo" unicode="&#xf2a9;" horiz-adv-x="1278"
-d="M1050 430c0 -143 -50 -269 -147 -374c-101 -110 -229 -161 -378 -161c-148 0 -277 50 -378 161c-97 105 -147 231 -147 374c0 297 224 540 525 540c62 0 124 -10 182 -31c-20 -39 -34 -82 -39 -126c-45 19 -94 28 -143 28c-227 0 -394 -194 -394 -414
-c0 -224 166 -407 394 -407s393 183 393 407c0 57 -10 113 -32 166c44 9 86 26 123 49c28 -67 41 -140 41 -212zM846 619c0 111 -19 221 -55 326c3 -34 3 -69 3 -103c0 -268 -53 -707 -342 -817c20 -3 41 -5 62 -5l14 1c216 136 318 346 318 598zM791 947v-2
-c-52 153 -124 301 -206 440c126 -85 195 -291 206 -438zM1035 744c-62 0 -117 33 -160 75c102 56 231 143 290 247c7 14 19 40 21 56c-58 -130 -206 -232 -344 -264c-22 34 -35 72 -35 113c0 48 24 112 60 147c41 39 102 59 157 74c80 22 145 84 180 159
-c52 -74 74 -164 74 -253c0 -45 -7 -127 -24 -170c-37 -90 -112 -184 -219 -184z" />
- <glyph glyph-name="battery-empty" unicode="&#xf244;" horiz-adv-x="2304"
-d="M2176 960c71 0 128 -57 128 -128v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160zM2176 448v384h-128v288c0 18 -14 32 -32 32h-1856c-18 0 -32 -14 -32 -32v-960
-c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288h128z" />
- <glyph glyph-name="freedombox" unicode="&#xf2fd;" horiz-adv-x="1816"
-d="M152 1274v0h10c90 -2 180 -36 272 -79c4 -2 11 -5 15 -7c7 -3 13 -7 20 -10c116 -58 199 -126 267 -210l3 -3c2 -2 4 -7 6 -9l-255 -148l9 -492l37 465l50 -29l10 -491l37 464l49 -29l10 -490l37 463l50 -29l9 -488l37 461l50 -29l10 -487l37 466l422 245l-267 155
-c2 3 5 5 7 8s5 6 7 9c70 83 157 151 278 208c101 48 200 86 296 86h9c45 -1 84 -15 110 -44c80 -92 -8 -177 -39 -293c-41 -155 6 -321 -118 -429c-43 -37 -93 -47 -143 -52c65 -77 103 -183 82 -292c-4 -21 -10 -42 -18 -61c-6 -17 -13 -32 -22 -47l-9 -15
-c-2 -2 -3 -5 -5 -7c-63 -94 -168 -154 -281 -161c-6 0 -11 -1 -17 -1h-9c-15 0 -39 3 -53 5c-19 3 -49 12 -67 19c-3 1 -7 2 -9 3c-69 29 -124 80 -159 143c-2 3 -4 5 -5 8c-2 3 -5 3 -7 0c-1 -3 -3 -5 -5 -8s-2 -5 -4 -8c-48 -81 -131 -140 -231 -157c-12 -2 -23 -3 -35 -4
-c-6 0 -12 -1 -18 -1c-169 -3 -327 118 -361 292c-21 109 18 215 83 292c-50 5 -101 15 -144 52c-124 108 -78 274 -119 429c-31 116 -118 201 -38 293c26 29 65 43 110 44h9z" />
- <glyph glyph-name="chevron-circle-left" unicode="&#xf137;"
-d="M909 141l102 102c25 25 25 65 0 90l-307 307l307 307c25 25 25 65 0 90l-102 102c-25 25 -65 25 -90 0l-454 -454c-25 -25 -25 -65 0 -90l454 -454c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="search" unicode="&#xf002;" horiz-adv-x="1664"
+d="M1152 704c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -70 -58 -128 -128 -128c-34 0 -67 14 -90 38l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704
+c0 -142 -43 -282 -124 -399l343 -343c23 -23 37 -56 37 -90z" />
+ <glyph glyph-name="search-minus" unicode="&#xf010;" horiz-adv-x="1664"
+d="M1024 736v-64c0 -17 -15 -32 -32 -32h-576c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h576c17 0 32 -15 32 -32zM1152 704c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -71 -57 -128 -128 -128c-34 0 -67 14 -90 38
+l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704c0 -142 -43 -282 -124 -399l343 -343c23 -23 37 -56 37 -90z" />
+ <glyph glyph-name="search-plus" unicode="&#xf00e;" horiz-adv-x="1664"
+d="M1024 736v-64c0 -17 -15 -32 -32 -32h-224v-224c0 -17 -15 -32 -32 -32h-64c-17 0 -32 15 -32 32v224h-224c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h224v224c0 17 15 32 32 32h64c17 0 32 -15 32 -32v-224h224c17 0 32 -15 32 -32zM1152 704c0 247 -201 448 -448 448
+s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -71 -57 -128 -128 -128c-34 0 -67 14 -90 38l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704c0 -142 -43 -282 -124 -399l343 -343
+c23 -23 37 -56 37 -90z" />
+ <glyph glyph-name="sellsy" unicode="&#xf213;" horiz-adv-x="2048"
+d="M1500 165v733c0 28 -23 51 -50 51h-93c-27 0 -50 -23 -50 -51v-733c0 -27 23 -50 50 -50h93c27 0 50 23 50 50zM1216 165v531c0 27 -23 50 -50 50h-101c-27 0 -50 -23 -50 -50v-531c0 -27 23 -50 50 -50h101c27 0 50 23 50 50zM924 165v429c0 27 -23 50 -50 50h-101
+c-27 0 -50 -23 -50 -50v-429c0 -27 23 -50 50 -50h101c27 0 50 23 50 50zM632 165v362c0 27 -23 50 -50 50h-101c-27 0 -50 -23 -50 -50v-362c0 -27 23 -50 50 -50h101c27 0 50 23 50 50zM2048 311c0 -222 -181 -402 -402 -402h-1244c-221 0 -402 180 -402 402
+c0 155 91 297 231 363c-7 24 -10 49 -10 73c0 151 123 274 274 274c66 0 130 -24 180 -67c60 244 280 417 532 417c302 0 548 -246 548 -548c0 -41 -4 -82 -14 -122c180 -44 307 -206 307 -390z" />
+ <glyph glyph-name="server" unicode="&#xf233;" horiz-adv-x="1792"
+d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM128 1152h1024v128h-1024v-128zM1696 704c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1696 1216
+c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+ <glyph glyph-name="shaarli" unicode="&#xf2f5;" horiz-adv-x="1651"
+d="M878 1408c161 0 254 -160 278 -479h66c287 -44 429 -135 426 -273c24 -163 -80 -238 -312 -226c178 -156 241 -302 191 -437c-39 -108 -133 -143 -282 -107c-164 82 -281 176 -349 282h-43c-64 -188 -188 -282 -372 -282h-64c-153 47 -209 140 -166 278l80 221h-23
+c-225 32 -326 131 -305 298c6 153 160 231 462 233c84 9 119 36 105 80c0 275 103 412 308 412zM830 1182c-56 4 -83 -72 -82 -227l-5 -128c-5 -64 -25 -96 -61 -96l-360 -20c-56 -2 -85 -25 -85 -69c0 -43 31 -65 92 -68c211 11 310 -4 296 -43l-64 -137
+c-108 -163 -135 -258 -80 -287c73 -44 176 70 310 342c32 29 59 29 80 0c94 -100 171 -182 232 -246c62 -64 113 -83 151 -57c46 49 33 101 -37 157c-68 58 -146 137 -234 237c-9 33 -8 50 6 50c298 -20 441 -1 429 57c9 64 -121 96 -388 96c-41 -8 -74 2 -100 29v224
+c0 125 -30 186 -89 184c-3 1 -8 2 -11 2v0z" />
+ <glyph glyph-name="shaarli-o" unicode="&#xf2f6;" horiz-adv-x="1630"
+d="M859 1408v0c107 0 210 -67 264 -160c40 -69 61 -156 75 -252c115 -20 212 -47 288 -96c78 -50 134 -137 140 -229l3 -20c7 -91 -25 -191 -100 -245c-18 -13 -36 -22 -55 -30c11 -19 25 -36 34 -56c37 -84 43 -181 12 -267v-1h-1c-26 -70 -82 -133 -154 -160
+s-147 -24 -224 -5c-9 3 -17 5 -25 10c-94 47 -174 101 -239 162c-25 -34 -53 -66 -86 -91c-75 -57 -168 -84 -266 -84c-31 0 -62 -4 -90 5c-82 25 -155 68 -199 141s-44 164 -20 243l1 3l1 3l21 58c-57 19 -109 45 -151 86c-67 66 -95 165 -86 259h-1c0 1 1 2 1 3v7h1
+c8 100 75 193 165 238c87 43 192 57 317 60c6 109 27 206 84 283c66 89 177 135 290 135zM859 1288c-173 0 -260 -116 -260 -348c12 -37 -17 -59 -88 -67c-255 -1 -386 -66 -391 -196c-18 -141 68 -226 258 -253h19l-67 -186c-36 -117 11 -195 141 -235h53
+c155 0 260 80 314 239h37c58 -90 155 -170 294 -239c126 -31 206 -1 239 90c42 114 -12 238 -162 370c196 -10 285 53 264 190c3 117 -118 194 -360 231h-56c-21 269 -99 404 -235 404zM819 1097v0c3 0 6 0 9 -1c50 1 76 -51 76 -156v-188c22 -23 49 -31 84 -25
+c226 0 335 -27 327 -81c10 -49 -110 -65 -361 -48c-12 0 -14 -15 -6 -43c74 -85 140 -151 198 -200c59 -47 69 -92 31 -133c-32 -22 -74 -5 -127 49c-51 54 -117 122 -197 207c-18 24 -40 24 -67 0c-113 -230 -200 -325 -262 -288c-46 24 -23 105 68 242l54 116
+c12 33 -72 45 -250 36c-51 3 -77 22 -77 58c0 37 24 57 71 58l304 17c31 0 48 27 52 81l4 107c-1 131 22 195 69 192z" />
+ <glyph glyph-name="share" unicode="&#xf064;" horiz-adv-x="1792"
+d="M1792 896c0 -17 -7 -33 -19 -45l-512 -512c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v256h-224c-431 0 -714 -83 -714 -560c0 -41 2 -82 5 -123c1 -16 5 -34 5 -50c0 -19 -12 -35 -32 -35c-14 0 -21 7 -28 17c-15 21 -26 53 -37 76c-57 128 -127 311 -127 451
+c0 112 11 227 53 333c139 345 547 403 875 403h224v256c0 35 29 64 64 64c17 0 33 -7 45 -19l512 -512c12 -12 19 -28 19 -45z" />
+ <glyph glyph-name="share-alt" unicode="&#xf1e0;"
+d="M1216 512c177 0 320 -143 320 -320s-143 -320 -320 -320s-320 143 -320 320c0 11 1 23 2 34l-360 180c-57 -53 -134 -86 -218 -86c-177 0 -320 143 -320 320s143 320 320 320c84 0 161 -33 218 -86l360 180c-1 11 -2 23 -2 34c0 177 143 320 320 320s320 -143 320 -320
+s-143 -320 -320 -320c-84 0 -161 33 -218 86l-360 -180c1 -11 2 -23 2 -34s-1 -23 -2 -34l360 -180c57 53 134 86 218 86z" />
+ <glyph glyph-name="share-alt-square" unicode="&#xf1e1;"
+d="M1280 341c0 118 -96 214 -213 214c-56 0 -107 -22 -145 -58l-241 120c1 8 2 15 2 23s-1 15 -2 23l241 120c38 -36 89 -58 145 -58c117 0 213 96 213 214c0 117 -96 213 -213 213c-118 0 -214 -96 -214 -213c0 -8 1 -15 2 -23l-241 -120c-38 35 -89 57 -145 57
+c-117 0 -213 -95 -213 -213s96 -213 213 -213c56 0 107 22 145 57l241 -120c-1 -8 -2 -15 -2 -23c0 -117 96 -213 214 -213c117 0 213 96 213 213zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960
+c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="share-square" unicode="&#xf14d;"
+d="M1005 435l352 352c25 25 25 65 0 90l-352 352c-18 19 -46 24 -69 14c-24 -10 -40 -33 -40 -59v-160c-574 0 -640 -329 -640 -576c0 -201 161 -396 167 -404c7 -8 16 -12 25 -12c4 0 9 1 13 3c13 5 21 19 19 33c-30 241 -11 391 62 473c61 69 167 99 354 99v-160
+c0 -26 16 -49 40 -59c7 -3 16 -5 24 -5c17 0 33 7 45 19zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="share-square-o" unicode="&#xf045;" horiz-adv-x="1664"
+d="M1408 547v-259c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h255c17 0 32 -14 32 -32c0 -16 -11 -29 -26 -32c-50 -17 -95 -37 -133 -60c-5 -2 -10 -4 -16 -4h-112c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832
+c88 0 160 72 160 160v214c0 12 7 23 18 29c20 9 38 22 54 37c9 9 23 13 35 8s21 -16 21 -29zM1645 1043l-384 -384c-12 -13 -28 -19 -45 -19c-8 0 -17 2 -25 5c-23 10 -39 33 -39 59v192h-160c-220 0 -360 -42 -438 -131c-81 -93 -105 -243 -74 -473c2 -14 -7 -28 -20 -34
+c-4 -1 -8 -2 -12 -2c-10 0 -20 5 -26 13c-7 10 -166 235 -166 435c0 268 84 576 736 576h160v192c0 26 16 49 39 59c8 3 17 5 25 5c17 0 33 -7 45 -19l384 -384c25 -25 25 -65 0 -90z" />
+ <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280"
+d="M1088 576v640h-448v-1137c51 27 133 74 213 137c107 84 235 215 235 360zM1280 1344v-768c0 -421 -589 -687 -614 -698c-8 -4 -17 -6 -26 -6s-18 2 -26 6c-25 11 -614 277 -614 698v768c0 35 29 64 64 64h1152c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="ship" unicode="&#xf21a;" horiz-adv-x="2010"
+d="M1792 -19c25 25 65 25 90 0l128 -128l-90 -90l-83 83l-83 -83c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83
+l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-128 128l90 90l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83c25 25 65 25 90 0l83 -83l83 83
+c25 25 65 25 90 0l83 -83zM218 19c-25 -25 -65 -25 -90 0l-128 128l90 90l83 -82l83 82c25 25 65 25 90 0l83 -82l64 64v293l-210 314c-23 35 -7 83 33 97l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58c40 -14 56 -62 33 -97l-210 -314v-293l19 18
+c25 25 65 25 90 0l83 -82l83 82c25 25 65 25 90 0l128 -128l-90 -90l-83 83l-83 -83c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83l-83 -83
+c-25 -25 -65 -25 -90 0l-83 83l-83 -83c-25 -25 -65 -25 -90 0l-83 83zM621 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+ <glyph glyph-name="shirtsinbulk" unicode="&#xf214;"
+d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
+l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
+v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
+M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
+v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265c-172 0 -313 140 -313 313c0 172 141 313 313 313c173 0 313 -141 313 -313c0 -173 -140 -313 -313 -313zM595 646c0 -152 266 -41 266 -130c0 -45 -82 -49 -112 -49c-42 0 -102 9 -123 51h-3l-31 -63
+c51 -32 100 -42 162 -42c67 0 175 20 175 107c0 165 -269 56 -269 130c0 45 71 51 102 51c37 0 100 -11 122 -45h3l30 58c-52 21 -94 41 -152 41c-69 0 -170 -22 -170 -109z" />
+ <glyph glyph-name="shopping-bag" unicode="&#xf290;" horiz-adv-x="1793"
+d="M1757 128l35 -313c2 -18 -4 -36 -16 -50c-12 -13 -30 -21 -48 -21h-1664c-18 0 -36 8 -48 21c-12 14 -18 32 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775c4 32 31 57 64 57h256v-128c0 -71 57 -128 128 -128s128 57 128 128v128h384v-128c0 -71 57 -128 128 -128
+s128 57 128 128v128h256c33 0 60 -25 64 -57zM1280 1152v-256c0 -35 -29 -64 -64 -64s-64 29 -64 64v256c0 141 -115 256 -256 256s-256 -115 -256 -256v-256c0 -35 -29 -64 -64 -64s-64 29 -64 64v256c0 212 172 384 384 384s384 -172 384 -384z" />
+ <glyph glyph-name="shopping-basket" unicode="&#xf291;" horiz-adv-x="2048"
+d="M1920 768c71 0 128 -57 128 -128s-57 -128 -128 -128h-15l-115 -662c-11 -61 -64 -106 -126 -106h-1280c-62 0 -115 45 -126 106l-115 662h-15c-71 0 -128 57 -128 128s57 128 128 128h1792zM485 -32c35 3 62 34 59 69l-32 416c-3 35 -34 62 -69 59s-62 -34 -59 -69
+l32 -416c3 -33 31 -59 64 -59h5zM896 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1280 32v416c0 35 -29 64 -64 64s-64 -29 -64 -64v-416c0 -35 29 -64 64 -64s64 29 64 64zM1632 27l32 416c3 35 -24 66 -59 69s-66 -24 -69 -59
+l-32 -416c-3 -35 24 -66 59 -69h5c33 0 61 26 64 59zM476 1244l-93 -412h-132l101 441c26 117 129 199 249 199h167c0 35 29 64 64 64h384c35 0 64 -29 64 -64h167c120 0 223 -82 249 -199l101 -441h-132l-93 412c-14 59 -65 100 -125 100h-167c0 -35 -29 -64 -64 -64h-384
+c-35 0 -64 29 -64 64h-167c-60 0 -111 -41 -125 -100z" />
+ <glyph glyph-name="shopping-cart" unicode="&#xf07a;" horiz-adv-x="1664"
+d="M640 0c0 -70 -58 -128 -128 -128s-128 58 -128 128s58 128 128 128s128 -58 128 -128zM1536 0c0 -70 -58 -128 -128 -128s-128 58 -128 128s58 128 128 128s128 -58 128 -128zM1664 1088v-512c0 -32 -25 -60 -57 -64l-1044 -122c5 -23 13 -46 13 -70
+c0 -23 -14 -44 -24 -64h920c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64c0 31 45 106 61 137l-177 823h-204c-35 0 -64 29 -64 64s29 64 64 64h256c67 0 69 -80 79 -128h1201c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="shower" unicode="&#xf2cc;" horiz-adv-x="1920"
+d="M1433 1287c13 -13 13 -33 0 -46l-626 -626c-13 -13 -33 -13 -46 0l-82 82c-13 13 -13 33 0 46l44 44c-97 122 -109 289 -35 422c-46 44 -108 71 -176 71c-141 0 -256 -115 -256 -256v-1280h-256v1280c0 282 230 512 512 512c144 0 274 -60 367 -156
+c126 51 272 32 382 -55l44 44c13 13 33 13 46 0zM1344 1024c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1600 896c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM1856 1024c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64
+s29 64 64 64zM1216 896c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1408 832c0 35 29 64 64 64s64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64zM1728 896c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1088 768c35 0 64 -29 64 -64
+s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1344 640c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64s-29 -64 -64 -64zM1600 768c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1216 512c-35 0 -64 29 -64 64s29 64 64 64s64 -29 64 -64
+s-29 -64 -64 -64zM1472 640c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1088 512c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1344 512c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1216 384
+c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64zM1088 256c35 0 64 -29 64 -64s-29 -64 -64 -64s-64 29 -64 64s29 64 64 64z" />
+ <glyph glyph-name="sign-in" unicode="&#xf090;"
+d="M1184 640c0 -17 -7 -33 -19 -45l-544 -544c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v288h-448c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h448v288c0 35 29 64 64 64c17 0 33 -7 45 -19l544 -544c12 -12 19 -28 19 -45zM1536 992v-704c0 -159 -129 -288 -288 -288
+h-320c-17 0 -32 15 -32 32c0 28 -13 96 32 96h320c88 0 160 72 160 160v704c0 88 -72 160 -160 160h-288c-25 0 -64 -5 -64 32c0 28 -13 96 32 96h320c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="sign-language" unicode="&#xf2a7;" horiz-adv-x="1664"
+d="M831 863c21 0 41 -6 59 -18l222 -148c41 -27 78 -60 110 -97l146 -170c25 -29 36 -68 29 -106l-72 -413c-8 -42 -42 -74 -85 -79l-527 -56l-352 -32h-9c-52 0 -96 42 -96 96c0 50 42 90 92 96l260 32h-448c-55 0 -99 46 -96 101c3 52 49 91 101 91l442 1l-521 64
+c-54 6 -93 55 -85 110c8 48 52 80 100 80h10l481 -60l-351 94c-50 13 -88 59 -80 110c8 48 49 81 95 81c7 0 13 -1 20 -2l448 -96l217 -37c2 0 4 -1 6 -1c30 0 45 41 18 59l-186 125c-46 31 -57 93 -24 137c18 25 47 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
+l-238 262c-2 2 -3 5 -5 7c-31 41 -24 101 19 134c40 31 97 21 132 -16l142 -147c-3 -3 -6 -5 -9 -8c-21 -29 -29 -64 -23 -99c6 -34 26 -65 55 -85zM1648 1115l15 -266c3 -49 -1 -99 -11 -147l-48 -219c-8 -38 -32 -69 -67 -87l-106 -54c1 40 -12 78 -39 109l-146 170
+c-34 39 -73 74 -117 103l-222 148c-22 15 -48 23 -76 23c-34 0 -65 -14 -88 -37l-235 312c-33 44 -23 106 23 137c43 30 102 16 134 -26l266 -352l-262 455c-28 47 -12 108 37 134c46 24 104 5 130 -40l241 -420l-136 337c-19 48 -6 106 40 130c49 26 109 5 132 -45
+l193 -415l101 -196c16 -31 63 -18 61 16l-12 224c-3 55 40 101 95 102c52 0 94 -44 97 -96z" />
+ <glyph glyph-name="sign-out" unicode="&#xf08b;" horiz-adv-x="1568"
+d="M640 96c0 -28 13 -96 -32 -96h-320c-159 0 -288 129 -288 288v704c0 159 129 288 288 288h320c17 0 32 -15 32 -32c0 -28 13 -96 -32 -96h-320c-88 0 -160 -72 -160 -160v-704c0 -88 72 -160 160 -160h288c25 0 64 5 64 -32zM1568 640c0 -17 -7 -33 -19 -45l-544 -544
+c-12 -12 -28 -19 -45 -19c-35 0 -64 29 -64 64v288h-448c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h448v288c0 35 29 64 64 64c17 0 33 -7 45 -19l544 -544c12 -12 19 -28 19 -45z" />
<glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792"
d="M256 96v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM640 224v-320c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v320c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1024 480v-576c0 -18 -14 -32 -32 -32h-192
c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1408 864v-960c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v960c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 1376v-1472c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v1472
c0 18 14 32 32 32h192c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="signalapp" unicode="&#xf30c;" horiz-adv-x="1652"
+d="M710 1400c32 4 84 8 116 8v0c27 0 53 -2 80 -4l-3 -42c-21 2 -56 3 -77 3c-31 0 -81 -3 -111 -7zM977 1351l8 43c54 -10 138 -36 188 -58l-17 -39c-48 21 -128 45 -179 54zM446 1321c49 24 133 54 186 66l10 -42c-51 -11 -130 -39 -177 -62zM1223 1264l21 37
+c48 -27 120 -78 160 -115l-29 -32c-38 35 -106 85 -152 110zM222 1161c39 39 108 93 155 122l22 -36c-44 -27 -110 -79 -147 -116l-30 30v0zM1427 1101l32 28c37 -41 87 -114 112 -163l-38 -20c-24 46 -71 116 -106 155v0zM65 934c23 50 69 125 104 168l33 -27
+c-33 -40 -77 -112 -98 -159zM1564 878l39 15c20 -52 41 -138 46 -193l-43 -4c-5 52 -23 133 -42 182zM0 664c3 55 19 143 36 196l41 -14c-16 -49 -32 -132 -34 -184zM1582 436c14 50 26 133 27 185h43c-1 -55 -14 -144 -29 -197zM-0 585l43 2c2 -70 10 -131 23 -187l-42 -11
+c-14 59 -22 123 -24 196zM1464 203c32 41 73 114 93 162l40 -16c-21 -51 -66 -128 -99 -172zM47 313l40 15c22 -60 52 -113 92 -160l-33 -28c-43 51 -75 108 -99 173v0zM1273 26c44 28 107 82 143 120l31 -29c-37 -40 -105 -97 -151 -127zM202 82l28 32
+c12 -11 34 -28 47 -38c4 -3 6 -7 7 -11l40 -125l-41 -13l-37 118c-13 10 -32 26 -44 37v0zM1033 -80c50 13 129 44 175 68l20 -39c-48 -25 -131 -56 -184 -70zM644 -86c2 1 7 2 9 2s3 -1 5 -1c17 -5 31 -8 42 -11l-9 -42c-10 2 -27 7 -37 10l-128 -57l-18 40l136 59v0z
+M826 -106c45 0 90 4 134 11l7 -42c-39 -6 -102 -12 -141 -12c-22 0 -40 0 -55 1l2 43c15 -1 31 -1 53 -1v0zM357 -256v0v0c-9 0 -17 7 -20 15l-30 93l41 13l23 -70l67 29l17 -39l-89 -39c-2 -1 -7 -2 -9 -2zM442 -65c-11 0 -21 8 -22 19l-16 213c-70 53 -124 122 -161 204
+c-37 81 -56 171 -56 268c0 332 292 602 651 602s651 -270 651 -602s-292 -602 -651 -602c-60 0 -119 8 -176 23l-209 -123c-3 -2 -7 -2 -11 -2v0z" />
+ <glyph glyph-name="simplybuilt" unicode="&#xf215;" horiz-adv-x="2048"
+d="M863 504c0 150 -121 271 -271 271c-149 0 -270 -121 -270 -271c0 -149 121 -270 270 -270c150 0 271 121 271 270zM1726 505c0 149 -121 270 -270 270c-150 0 -271 -121 -271 -270c0 -150 121 -271 271 -271c149 0 270 121 270 271zM2048 1314v-1348
+c0 -59 -48 -107 -108 -107h-1832c-60 0 -108 48 -108 107v1348c0 59 48 107 108 107h431c59 0 108 -48 108 -107v-161h754v161c0 59 49 107 108 107h431c60 0 108 -48 108 -107z" />
<glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792"
d="M1792 288v-320c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h96v192h-512v-192h96c53 0 96 -43 96 -96v-320c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h96v192h-512v-192h96c53 0 96 -43 96 -96v-320
c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h96v192c0 70 58 128 128 128h512v192h-96c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h320c53 0 96 -43 96 -96v-320c0 -53 -43 -96 -96 -96h-96v-192h512c70 0 128 -58 128 -128v-192h96
c53 0 96 -43 96 -96z" />
- <glyph glyph-name="wheelchair-alt" unicode="&#xf29b;" horiz-adv-x="1399"
-d="M1370 723c21 -22 32 -52 29 -82l-44 -551c-5 -56 -51 -98 -106 -98c-3 0 -6 0 -9 1c-59 4 -102 56 -98 114l35 429l-143 -8c35 -72 55 -154 55 -240c0 -144 -56 -275 -148 -372l-137 137c56 62 91 145 91 235c0 194 -157 351 -350 351c-91 0 -173 -35 -236 -92l-137 138
-c77 73 175 123 284 141l264 300l-149 87l-181 -161c-44 -40 -111 -36 -150 8s-35 111 8 150l239 213c34 31 84 36 124 12c487 -283 488 -283 488 -283c26 -15 41 -41 48 -68c10 -39 3 -83 -26 -117l-205 -232l371 20c31 2 61 -9 83 -32zM1172 1180c-98 0 -178 79 -178 178
-c0 98 80 178 178 178c99 0 179 -80 179 -178c0 -99 -80 -178 -179 -178zM545 -62c72 0 140 23 196 61l139 -139c-92 -73 -209 -116 -335 -116c-301 0 -545 244 -545 544c0 127 43 243 116 336l139 -139c-38 -56 -60 -124 -60 -197c0 -193 157 -350 350 -350z" />
- <glyph glyph-name="external-link-square" unicode="&#xf14c;"
-d="M1280 608v480c0 35 -29 64 -64 64h-480c-26 0 -49 -16 -59 -39c-10 -24 -5 -52 14 -70l144 -144l-534 -534c-25 -25 -25 -65 0 -90l102 -102c25 -25 65 -25 90 0l534 534l144 -144c12 -13 28 -19 45 -19c8 0 17 2 25 5c23 10 39 33 39 59zM1536 1120v-960
-c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="google" unicode="&#xf1a0;" horiz-adv-x="1505"
-d="M768 750h725c7 -39 12 -77 12 -128c0 -438 -294 -750 -737 -750c-425 0 -768 343 -768 768s343 768 768 768c207 0 381 -76 515 -201l-209 -201c-57 55 -157 119 -306 119c-262 0 -476 -217 -476 -485s214 -485 476 -485c304 0 418 218 436 331h-436v264z" />
- <glyph glyph-name="volume-off" unicode="&#xf026;" horiz-adv-x="768"
-d="M768 1184v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19c35 0 64 -29 64 -64z" />
- <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1576"
-d="M1576 1128c-44 -64 -99 -121 -162 -167c1 -14 1 -28 1 -42c0 -427 -325 -919 -919 -919c-183 0 -353 53 -496 145c26 -3 51 -4 78 -4c151 0 290 51 401 138c-142 3 -261 96 -302 224c20 -3 40 -5 61 -5c29 0 58 4 85 11c-148 30 -259 160 -259 317v4
-c43 -24 93 -39 146 -41c-87 58 -144 157 -144 269c0 60 16 115 44 163c159 -196 398 -324 666 -338c-5 24 -8 49 -8 74c0 178 144 323 323 323c93 0 177 -39 236 -102c73 14 143 41 205 78c-24 -75 -75 -138 -142 -178c65 7 128 25 186 50z" />
- <glyph glyph-name="battery-full" unicode="&#xf240;" horiz-adv-x="2304"
-d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288c0 18 -14 32 -32 32h-1856c-18 0 -32 -14 -32 -32v-960c0 -18 14 -32 32 -32h1856c18 0 32 14 32 32v288zM2304 832v-384c0 -71 -57 -128 -128 -128v-160c0 -88 -72 -160 -160 -160h-1856
-c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1856c88 0 160 -72 160 -160v-160c71 0 128 -57 128 -128z" />
- <glyph glyph-name="deaf" unicode="&#xf2a4;" horiz-adv-x="1792"
-d="M1056 704c0 124 -101 224 -224 224s-224 -100 -224 -224c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 194 158 352 352 352s352 -158 352 -352c0 -35 -29 -64 -64 -64s-64 29 -64 64zM835 1280c318 0 576 -258 576 -576c0 -166 -78 -255 -146 -334
-c-63 -72 -113 -129 -113 -242c0 -212 -172 -384 -384 -384c-35 0 -64 29 -64 64s29 64 64 64c141 0 256 115 256 256c0 161 77 249 144 326c62 71 115 132 115 250c0 247 -201 448 -448 448s-448 -201 -448 -448c0 -35 -29 -64 -64 -64s-64 29 -64 64c0 318 258 576 576 576
-zM591 561l226 -226l-579 -579c-16 -16 -42 -16 -58 0l-168 168c-16 16 -16 42 0 58zM1612 1524l168 -168c16 -16 16 -42 0 -59l-233 -233l-26 -25l-71 -71c-43 100 -109 188 -195 258l91 91l207 207c17 16 43 16 59 0z" />
- <glyph glyph-name="window-close-o" unicode="&#xf2d4;" horiz-adv-x="1792"
-d="M1257 425l-146 -146c-13 -13 -33 -13 -46 0l-169 169l-169 -169c-13 -13 -33 -13 -46 0l-146 146c-13 13 -13 33 0 46l169 169l-169 169c-13 13 -13 33 0 46l146 146c13 13 33 13 46 0l169 -169l169 169c13 13 33 13 46 0l146 -146c13 -13 13 -33 0 -46l-169 -169
-l169 -169c13 -13 13 -33 0 -46zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
- <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408"
-d="M1408 296c0 -36 -16 -106 -31 -139c-21 -49 -77 -81 -122 -106c-59 -32 -119 -51 -186 -51c-93 0 -177 38 -262 69c-61 22 -120 49 -175 83c-170 105 -375 310 -480 480c-34 55 -61 114 -83 175c-31 85 -69 169 -69 262c0 67 19 127 51 186c25 45 57 101 106 122
-c33 15 103 31 139 31c7 0 14 0 21 -3c21 -7 43 -56 53 -76c32 -57 63 -115 96 -171c16 -26 46 -58 46 -89c0 -61 -181 -150 -181 -204c0 -27 25 -62 39 -86c101 -182 227 -308 409 -409c24 -14 59 -39 86 -39c54 0 143 181 204 181c31 0 63 -30 89 -46
-c56 -33 114 -64 171 -96c20 -10 69 -32 76 -53c3 -7 3 -14 3 -21z" />
- <glyph glyph-name="mars-double" unicode="&#xf227;" horiz-adv-x="1920"
-d="M1536 1120c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c98 -123 147 -286 117 -461c-42 -243 -240 -434 -484 -468c-286 -40 -539 131 -626 380c-316 16 -565 288 -544 613c18 274 235 502 508 533
-c161 19 311 -31 426 -122l255 254h-134c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c40 -50 71 -107 93 -169c124 -6 237 -52 328 -124l255 254h-134c-18 0 -32 14 -32 32v64z
-M1024 704c0 20 -2 39 -4 58c-215 -33 -380 -218 -380 -442c0 -20 2 -39 4 -58c215 33 380 218 380 442zM128 704c0 -226 169 -413 387 -443c-2 19 -3 39 -3 59c0 282 204 517 473 566c-70 157 -227 266 -409 266c-247 0 -448 -201 -448 -448zM1088 -128
-c247 0 448 201 448 448c0 226 -169 413 -387 443c2 -19 3 -39 3 -59c0 -282 -204 -517 -473 -566c70 -157 227 -266 409 -266z" />
- <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1755"
-d="M1745 763l-164 -763h-334l178 832c8 35 3 67 -15 88c-17 21 -47 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276c135 0 258 -56 337 -154c80 -98 109 -231 81 -363z" />
- <glyph glyph-name="hand-peace-o" unicode="&#xf25b;"
-d="M1288 889c37 0 74 -7 107 -23c96 -43 141 -122 141 -226v-177c0 -63 -8 -126 -23 -186l-85 -339c-28 -114 -130 -194 -248 -194h-668c-141 0 -256 115 -256 256v401l-239 628c-11 29 -17 60 -17 91c0 141 115 256 256 256c106 0 202 -66 239 -165l17 -44v113
-c0 141 115 256 256 256s256 -115 256 -256v-261c16 3 32 5 48 5c92 0 176 -53 216 -135zM1072 896c-44 0 -84 -26 -102 -66l-74 -163l-71 -155h55c67 0 126 -47 140 -112l154 338c7 14 10 30 10 46c0 62 -50 112 -112 112zM1293 761c-76 0 -100 -61 -127 -121l-132 -290
-c-7 -14 -10 -30 -10 -46c0 -62 50 -112 112 -112c44 0 84 26 102 66l160 352c5 10 9 26 9 38c0 67 -48 113 -114 113zM128 1120c0 -16 3 -31 8 -46l248 -650v-69l102 111c27 29 66 46 106 46h198l106 233v535c0 71 -57 128 -128 128s-128 -57 -128 -128v-640h-64l-200 526
-c-19 49 -67 82 -120 82c-71 0 -128 -58 -128 -128zM1180 -128c59 0 110 40 124 97l85 339c13 50 19 103 19 155v91l-141 -310c-23 -51 -75 -84 -131 -84c-70 0 -131 51 -142 121c-27 -35 -69 -57 -114 -57h-208v32h208c61 0 116 50 116 112c0 61 -46 112 -108 112h-296
-c-31 0 -61 -13 -82 -36l-126 -136v-308c0 -71 57 -128 128 -128h668z" />
- <glyph glyph-name="envira" unicode="&#xf299;" horiz-adv-x="1792"
-d="M896 720c-127 240 -244 474 -577 632c-199 94 -21 -37 -21 -37c181 -125 264 -294 361 -479c126 -241 316 -559 577 -671c260 -112 137 -50 24 34c-113 85 -273 348 -364 521zM549 177c-361 286 -341 628 -549 1359c1911 0 1467 -1269 1469 -1465l323 -327h-104l-281 285
-c-156 -17 -498 -138 -858 148z" />
- <glyph glyph-name="lastfm-square" unicode="&#xf203;"
-d="M1432 484c0 141 -114 205 -234 239c-55 15 -100 28 -120 88c-1 5 -6 24 -6 28c0 48 38 83 85 83c22 0 53 1 71 -15h-1c19 -14 28 -30 39 -51l93 71c-15 21 -30 46 -49 64c-47 42 -91 49 -153 49c-105 0 -204 -86 -204 -195c0 -8 1 -15 2 -23c22 -136 91 -178 213 -213
-c60 -17 145 -44 146 -118v-5c1 -80 -66 -128 -141 -128c-82 0 -135 78 -167 144c-116 239 -134 538 -478 538c-207 0 -393 -191 -386 -396v-1c7 -214 154 -403 380 -403c107 0 207 25 279 110c12 16 23 33 31 51l-60 109c-56 -106 -125 -152 -245 -152
-c-158 0 -267 140 -267 291c0 139 128 273 268 273c160 0 218 -83 274 -226c67 -172 139 -456 371 -456c139 0 259 101 259 244zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1612"
-d="M1382 544v-480c0 -35 -29 -64 -64 -64h-384v384h-256v-384h-384c-35 0 -64 29 -64 64v480c0 2 1 4 1 6l575 474l575 -474c1 -2 1 -4 1 -6zM1605 613l-62 -74c-5 -6 -13 -10 -21 -11h-3c-8 0 -15 2 -21 7l-692 577l-692 -577c-7 -5 -15 -8 -24 -7c-8 1 -16 5 -21 11
-l-62 74c-11 13 -9 34 4 45l719 599c42 35 110 35 152 0l244 -204v195c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-408l219 -182c13 -11 15 -32 4 -45z" />
- <glyph glyph-name="empire" unicode="&#xf1d1;" horiz-adv-x="1792"
-d="M874 -102v-66c-282 8 -529 160 -668 385l58 34c21 -35 46 -68 73 -99l65 57c94 -107 222 -183 368 -212l-17 -86c39 -7 80 -12 121 -13zM276 428l-83 -28c14 -39 30 -76 49 -112l-57 -33c-62 114 -98 246 -98 385s36 271 98 385l57 -33c-19 -35 -36 -73 -49 -112l82 -28
-c-23 -66 -35 -138 -35 -212s13 -146 36 -212zM1528 251l58 -34c-139 -225 -386 -377 -668 -385v66c41 1 82 6 121 13l-17 86c146 29 274 105 368 212l65 -57c27 31 52 64 73 99zM1377 805l-233 -80c9 -27 14 -55 14 -85s-5 -58 -14 -85l232 -80c-21 -63 -55 -120 -98 -169
-l-185 162c-37 -43 -88 -73 -147 -85l48 -241c-31 -6 -64 -10 -98 -10s-67 4 -98 10l48 241c-59 12 -110 42 -147 85l-185 -162c-43 49 -77 106 -98 169l232 80c-9 27 -14 55 -14 85s5 58 14 85l-233 80c22 63 56 120 99 169l185 -162c37 43 88 74 147 86l-48 240
-c31 7 64 10 98 10s67 -3 98 -10l-48 -240c59 -12 110 -43 147 -86l185 162c43 -49 77 -106 99 -169zM874 1448v-66c-41 -1 -82 -5 -121 -13l17 -86c-146 -28 -274 -104 -368 -211l-65 56c-27 -30 -51 -63 -73 -98l-57 33c139 226 385 377 667 385zM1705 640
-c0 -139 -36 -271 -98 -385l-57 33c19 36 35 73 49 112l-83 28c23 66 36 138 36 212s-12 146 -35 212l82 28c-13 39 -30 77 -49 112l57 33c62 -114 98 -246 98 -385zM1585 1063l-57 -33c-22 35 -46 68 -73 98l-65 -56c-94 107 -222 183 -368 211l17 86c-39 8 -80 12 -121 13
-v66c282 -8 528 -159 667 -385zM1748 640c0 470 -382 852 -852 852s-852 -382 -852 -852s382 -852 852 -852s852 382 852 852zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
- <glyph glyph-name="server" unicode="&#xf233;" horiz-adv-x="1792"
-d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM128 1152h1024v128h-1024v-128zM1696 704c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1696 1216
-c0 53 -43 96 -96 96s-96 -43 -96 -96s43 -96 96 -96s96 43 96 96zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
- <glyph glyph-name="search-minus" unicode="&#xf010;" horiz-adv-x="1664"
-d="M1024 736v-64c0 -17 -15 -32 -32 -32h-576c-17 0 -32 15 -32 32v64c0 17 15 32 32 32h576c17 0 32 -15 32 -32zM1152 704c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1664 -128c0 -71 -57 -128 -128 -128c-34 0 -67 14 -90 38
-l-343 342c-117 -81 -257 -124 -399 -124c-389 0 -704 315 -704 704s315 704 704 704s704 -315 704 -704c0 -142 -43 -282 -124 -399l343 -343c23 -23 37 -56 37 -90z" />
- <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792"
-d="M1280 832c0 35 -29 64 -64 64c-354 0 -582 -148 -813 -403c-12 -13 -19 -27 -19 -45c0 -35 29 -64 64 -64c18 0 32 7 45 19c49 44 93 92 141 137c181 163 336 228 582 228c35 0 64 29 64 64zM1792 1030c0 -64 -7 -129 -20 -193c-64 -311 -264 -513 -542 -651
-c-135 -68 -286 -108 -438 -108c-96 0 -195 16 -286 47c-48 16 -144 79 -184 79c-50 0 -110 -204 -197 -204c-63 0 -82 31 -109 77c-9 17 -16 23 -16 44c0 104 198 185 198 243c0 9 -26 62 -30 82c-6 34 -9 69 -9 104c0 318 253 545 537 639c205 68 641 -11 780 121
-c55 51 82 98 166 98c113 0 150 -293 150 -378z" />
- <glyph glyph-name="envelope-open-o" unicode="&#xf2b7;" horiz-adv-x="1792"
-d="M1474 623l39 -51c11 -14 8 -33 -5 -44c-100 -78 -330 -255 -340 -263c-71 -58 -167 -138 -271 -137h-2c-104 0 -200 79 -271 137c-11 9 -233 180 -331 256c-14 11 -17 30 -6 44l37 52c11 15 32 18 46 6c68 -53 164 -127 306 -236c50 -38 149 -131 219 -131h2
-c70 0 169 93 219 131c147 113 245 188 313 242c14 11 34 8 45 -6zM1664 -96v928c-100 93 -85 85 -548 443c-50 39 -149 133 -219 133h-2c-70 0 -169 -94 -219 -133c-463 -358 -448 -350 -548 -443v-928c0 -17 15 -32 32 -32h1472c17 0 32 15 32 32zM1792 832v-928
-c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v928c0 36 15 70 41 94c205 190 441 355 583 472c70 58 167 138 271 138h2c104 0 201 -80 271 -138c132 -109 383 -286 583 -472c26 -24 41 -58 41 -94z" />
- <glyph glyph-name="exclamation-circle" unicode="&#xf06a;"
-d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM896 161v190c0 18 -14 33 -31 33h-192c-18 0 -33 -15 -33 -33v-190c0 -18 15 -33 33 -33h192c17 0 31 15 31 33zM894 505l18 621c0 7 -3 14 -10 18c-6 5 -15 8 -24 8h-220
-c-9 0 -18 -3 -24 -8c-7 -4 -10 -11 -10 -18l17 -621c0 -14 15 -25 34 -25h185c18 0 33 11 34 25z" />
- <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792"
-d="M1408 768c0 -283 -315 -512 -704 -512c-61 0 -120 6 -176 16c-83 -59 -177 -102 -278 -128c-27 -7 -56 -12 -86 -16h-3c-15 0 -29 12 -32 29c-4 19 9 31 20 44c39 44 83 83 117 166c-162 94 -266 239 -266 401c0 283 315 512 704 512s704 -229 704 -512zM1792 512
-c0 -163 -104 -307 -266 -401c34 -83 78 -122 117 -166c11 -13 24 -25 20 -44c-4 -18 -19 -31 -35 -29c-30 4 -59 9 -86 16c-101 26 -195 69 -278 128c-56 -10 -115 -16 -176 -16c-181 0 -347 50 -472 132c29 -2 59 -4 88 -4c215 0 418 62 573 174c167 122 259 287 259 466
-c0 52 -8 103 -23 152c169 -93 279 -241 279 -408z" />
- <glyph glyph-name="facebook-official" unicode="&#xf230;"
-d="M1451 1408c47 0 85 -38 85 -85v-1366c0 -47 -38 -85 -85 -85h-391v595h199l30 232h-229v148c0 67 18 112 115 112l122 1v207c-21 3 -94 9 -178 9c-177 0 -299 -108 -299 -306v-171h-200v-232h200v-595h-735c-47 0 -85 38 -85 85v1366c0 47 38 85 85 85h1366z" />
- <glyph glyph-name="clock-o" unicode="&#xf017;"
-d="M896 992v-448c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v352c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640
-c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="handshake-o" unicode="&#xf2b5;" horiz-adv-x="2304"
-d="M192 384c84 0 84 128 0 128s-84 -128 0 -128zM1665 442c-79 103 -156 208 -246 302l-125 -140c-110 -125 -307 -122 -414 6c-76 92 -76 224 2 315l177 206c-62 32 -137 21 -204 21c-59 0 -116 -24 -158 -66l-158 -158h-155v-544c44 0 84 6 119 -28l297 -292
-c61 -59 140 -111 227 -111c45 0 93 15 125 47c75 -26 162 16 185 93c48 -4 92 11 127 44c23 21 53 63 50 96c9 -9 31 -10 43 -10c119 0 181 125 108 219zM1824 384h96v512h-93l-157 180c-42 48 -105 76 -169 76h-167c-56 0 -110 -25 -146 -67l-209 -243
-c-37 -44 -37 -106 -1 -150c57 -68 162 -69 221 -3l193 218c46 51 130 3 109 -62c38 -44 79 -87 116 -131c50 -62 98 -127 147 -190c31 -40 54 -88 60 -140zM2112 384c84 0 84 128 0 128s-84 -128 0 -128zM2304 960v-640c0 -35 -29 -64 -64 -64h-434
-c-36 -87 -115 -145 -207 -158c-43 -63 -109 -111 -183 -127c-55 -70 -144 -112 -233 -106c-165 -93 -351 -12 -474 109l-287 282h-358c-35 0 -64 29 -64 64v672c0 35 29 64 64 64h421c116 116 196 224 370 224h117c65 0 128 -20 181 -56c53 36 116 56 181 56h167
-c190 0 269 -124 384 -256h355c35 0 64 -29 64 -64z" />
- <glyph glyph-name="hand-scissors-o" unicode="&#xf257;" horiz-adv-x="1792"
-d="M1073 -128h-177c-104 0 -183 45 -226 141c-15 32 -23 67 -23 102v5c-82 40 -135 124 -135 216c0 11 0 38 5 48h-261c-141 0 -256 115 -256 256s115 256 256 256h113l-44 17c-99 37 -165 133 -165 239c0 141 115 256 256 256c31 0 62 -6 91 -17l628 -239h401
-c141 0 256 -115 256 -256v-668c0 -118 -80 -220 -194 -248l-339 -85c-60 -15 -123 -23 -186 -23zM1024 583l-155 -71l-163 -74c-40 -18 -66 -58 -66 -102c0 -62 50 -112 112 -112c16 0 32 3 46 10l338 154c-65 14 -112 73 -112 140v55zM1344 272c0 62 -50 112 -112 112
-c-16 0 -32 -3 -46 -10l-290 -132c-60 -27 -121 -51 -121 -127c0 -66 46 -114 113 -114c12 0 28 4 38 9l352 160c40 18 66 58 66 102zM1112 1024l-650 248c-15 5 -30 8 -46 8c-70 0 -128 -57 -128 -128c0 -53 33 -101 82 -120l526 -200v-64h-640c-71 0 -128 -57 -128 -128
-s57 -128 128 -128h535l233 106v198c0 40 17 79 46 106l111 102h-69zM1073 0c52 0 105 6 155 19l339 85c57 14 97 65 97 124v668c0 71 -57 128 -128 128h-308l-136 -126c-23 -21 -36 -51 -36 -82v-296c0 -62 51 -108 112 -108c62 0 112 55 112 116v208h32v-208
-c0 -45 -22 -87 -57 -114c70 -11 121 -72 121 -142c0 -56 -33 -108 -84 -131l-310 -141h91z" />
- <glyph glyph-name="tumblr-square" unicode="&#xf174;"
-d="M1136 75l-62 183c-24 -12 -69 -22 -103 -22c-102 -3 -123 71 -123 126v398h257v194h-256v326h-188c-3 0 -8 -3 -9 -10c-11 -99 -58 -275 -252 -345v-165h130v-418c0 -143 105 -347 384 -342c94 2 199 41 222 75zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960
-c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280"
-d="M1043 971c0 134 -95 224 -236 224h-320v-448h320c141 0 236 90 236 224zM1280 971c0 -257 -186 -437 -453 -437h-340v-118h505c18 0 32 -14 32 -32v-128c0 -18 -14 -32 -32 -32h-505v-192c0 -18 -14 -32 -32 -32h-167c-18 0 -32 14 -32 32v192h-224c-18 0 -32 14 -32 32
-v128c0 18 14 32 32 32h224v118h-224c-18 0 -32 14 -32 32v149c0 18 14 32 32 32h224v629c0 18 14 32 32 32h539c267 0 453 -180 453 -437z" />
- <glyph glyph-name="chevron-circle-up" unicode="&#xf139;"
-d="M1165 397l102 102c25 25 25 65 0 90l-454 454c-25 25 -65 25 -90 0l-454 -454c-25 -25 -25 -65 0 -90l102 -102c25 -25 65 -25 90 0l307 307l307 -307c25 -25 65 -25 90 0zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z
+ <glyph glyph-name="skate" unicode="&#xf35a;" horiz-adv-x="1194"
+d="M425 -256c-28 0 -51 23 -51 52s23 52 51 52c29 0 52 -23 52 -52s-23 -52 -52 -52zM841 -255c-28 0 -51 24 -51 53s23 52 51 52c29 0 52 -23 52 -52s-23 -53 -52 -53zM323 -101c0 0 -30 2 -30 33v3c0 31 30 33 30 33h618s30 -3 30 -33v-3c0 -30 -30 -33 -30 -33h-618z
+M753 1260v0c-75 0 -137 62 -137 138s62 138 137 138s136 -62 136 -138s-61 -138 -136 -138zM10 50l331 565l124 -125l-299 -519c-14 -29 -43 -50 -78 -50c-48 0 -88 39 -88 88c0 15 4 29 10 41zM610 74c-13 -29 -41 -50 -73 -50c-44 0 -80 39 -80 88c0 15 3 29 9 41l120 231
+l-234 255c-90 99 -25 206 -25 206l125 244l-333 -1c-37 0 -66 33 -66 73s29 72 66 72h1010c36 0 65 -33 65 -73s-29 -72 -65 -72h-386l-183 -353l187 -203c65 -69 23 -147 23 -147z" />
+ <glyph glyph-name="sketchfab" unicode="&#xf35b;" horiz-adv-x="1753"
+d="M1315 331l-376 -217v452l376 203v-438zM868 671l-447 237l447 258l447 -258zM800 114l-378 218v440l378 -204v-454zM876 1512c-484 0 -876 -393 -876 -877s392 -876 876 -876s877 392 877 876s-393 877 -877 877z" />
+ <glyph glyph-name="skyatlas" unicode="&#xf216;" horiz-adv-x="2048"
+d="M1430 953c0 0 -1 1 0 0zM1690 749c194 0 358 -145 358 -343c0 -211 -168 -366 -376 -366c-531 0 -629 799 -1151 799c-202 0 -349 -129 -349 -336c0 -214 160 -343 367 -343c136 0 291 57 401 136c18 13 54 52 73 52s35 -16 35 -35c0 -25 -42 -61 -60 -77
+c-131 -114 -321 -196 -495 -196c-267 0 -493 189 -493 464s216 477 489 477c593 0 712 -787 1158 -787c134 0 235 87 235 224c0 127 -98 223 -224 223c-56 0 -112 -37 -150 -37c-27 0 -51 23 -51 50c0 37 17 76 17 116c0 213 -163 367 -374 367c-170 0 -256 -118 -284 -118
+c-20 0 -36 16 -36 36c0 18 13 33 25 46c81 92 207 140 329 140c254 0 445 -187 445 -441c0 -22 -1 -44 -4 -66c38 10 77 15 115 15z" />
+ <glyph glyph-name="skype" unicode="&#xf17e;"
+d="M1173 473c0 174 -169 234 -311 266l-104 24c-76 18 -133 31 -133 89c0 53 56 77 144 77c157 0 160 -115 257 -115c65 0 104 51 104 109c0 115 -191 190 -380 190c-173 0 -374 -75 -374 -278c0 -168 112 -228 258 -263l146 -36c89 -22 144 -32 144 -96
+c0 -51 -57 -90 -145 -90c-185 0 -195 154 -302 154c-70 0 -101 -50 -101 -105c0 -123 188 -223 413 -223c188 0 384 94 384 297zM1536 256c0 -212 -172 -384 -384 -384c-88 0 -169 30 -234 80c-48 -10 -99 -16 -150 -16c-389 0 -704 315 -704 704c0 51 6 102 16 150
+c-50 65 -80 146 -80 234c0 212 172 384 384 384c88 0 169 -30 234 -80c48 10 99 16 150 16c389 0 704 -315 704 -704c0 -51 -6 -102 -16 -150c50 -65 80 -146 80 -234z" />
+ <glyph glyph-name="slack" unicode="&#xf198;"
+d="M837 508l-205 69l66 197l205 -68zM979 1344c528 -158 651 -387 493 -915s-387 -651 -915 -493s-651 387 -493 915s387 651 915 493zM1256 671v0c13 41 -9 87 -51 101l-99 34l34 103c13 42 -8 88 -50 101c-47 13 -88 -14 -101 -51l-34 -103l-206 69l35 103
+c13 42 -9 88 -51 101c-47 13 -87 -13 -100 -50l-35 -104c-100 33 -111 39 -126 37c-32 -1 -63 -22 -74 -54c-13 -42 8 -88 50 -101l100 -33l-66 -198c-100 33 -112 39 -127 37c-32 -1 -63 -23 -74 -55c-13 -42 9 -87 51 -100l99 -34l-34 -103c-13 -42 8 -88 50 -101
+s88 9 101 51l34 103l206 -69l-35 -103c-13 -42 9 -88 51 -101s87 8 100 50l35 104l99 -34c42 -13 88 9 101 51s-8 88 -50 101l-100 33l66 198l100 -34c42 -13 88 9 101 51z" />
+ <glyph glyph-name="sliders" unicode="&#xf1de;"
+d="M352 128v-128h-352v128h352zM704 256c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280c35 0 64 -29 64 -64v-256
+c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h256zM1216 768c35 0 64 -29 64 -64v-256c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+ <glyph glyph-name="slideshare" unicode="&#xf1e7;" horiz-adv-x="1758"
+d="M856 796c0 -111 -97 -202 -216 -202s-216 91 -216 202c0 112 97 202 216 202s216 -90 216 -202zM1358 796c0 -111 -96 -202 -216 -202c-119 0 -216 91 -216 202c0 112 97 202 216 202c120 0 216 -90 216 -202zM1583 616v667c0 115 -37 160 -143 160h-1112
+c-111 0 -142 -38 -142 -160v-673c237 -124 440 -102 551 -98c47 1 77 -8 95 -27c3 -3 6 -6 10 -9c21 -20 41 -36 61 -51c4 55 35 90 118 87c113 -5 321 -27 562 104zM1746 621c-64 -79 -186 -176 -372 -252c197 -671 -481 -778 -470 -434c0 -6 -1 185 -1 327
+c-15 3 -30 7 -48 11c0 -143 -1 -344 -1 -338c11 -344 -667 -237 -470 434c-186 76 -308 173 -372 252c-32 48 3 99 56 62c7 -5 15 -10 22 -15v694c0 96 72 174 161 174h1257c89 0 161 -78 161 -174v-694l21 15c53 37 88 -14 56 -62z" />
+ <glyph glyph-name="smile-o" unicode="&#xf118;"
+d="M1134 461c-50 -161 -197 -269 -366 -269s-316 108 -366 269c-11 34 8 69 42 80c33 11 69 -8 80 -42c33 -107 132 -179 244 -179s211 72 244 179c11 34 47 53 81 42c33 -11 52 -46 41 -80zM640 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
+s128 -57 128 -128zM1152 896c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768
+s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="snapchat" unicode="&#xf2ab;"
+d="M1279 388c0 14 -8 24 -22 27c-91 20 -160 83 -198 167c-3 8 -7 16 -7 25c0 45 125 36 125 100c0 27 -33 44 -57 44c-23 0 -41 -16 -63 -16c-4 0 -8 1 -12 2c2 38 5 76 5 114c0 35 -2 83 -17 114c-48 104 -141 165 -255 165c-125 0 -220 -46 -275 -165
+c-15 -31 -17 -79 -17 -114c0 -38 3 -76 5 -114c-4 -2 -9 -2 -14 -2c-23 0 -41 15 -62 15c-25 0 -56 -16 -56 -44c0 -62 125 -54 125 -99c0 -9 -4 -17 -7 -25c-39 -84 -106 -147 -198 -167c-14 -3 -22 -13 -22 -27c0 -46 106 -63 137 -68c9 -24 5 -66 41 -66c25 0 50 9 77 9
+c105 0 133 -95 255 -95c127 0 151 95 257 95c27 0 52 -8 78 -8c35 0 31 42 40 65c31 5 137 22 137 68zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="snapchat-ghost" unicode="&#xf2ac;" horiz-adv-x="1634"
+d="M833 1408c180 2 329 -99 404 -261c23 -49 27 -125 27 -179c0 -64 -5 -127 -9 -191c8 -4 19 -7 28 -7c36 0 66 27 102 27c34 0 83 -24 83 -64c0 -96 -201 -78 -201 -162c0 -15 6 -29 12 -43c48 -105 139 -206 247 -251c26 -11 52 -17 80 -23c18 -4 28 -17 28 -35
+c0 -68 -173 -96 -219 -103c-20 -31 -5 -104 -58 -104c-41 0 -82 13 -126 13c-21 0 -42 -1 -62 -5c-119 -20 -159 -148 -354 -148c-188 0 -233 128 -349 148c-21 4 -42 5 -63 5c-45 0 -88 -15 -124 -15c-56 0 -39 74 -60 106c-46 7 -219 35 -219 103c0 18 10 31 28 35
+c28 6 54 12 80 23c107 44 200 146 247 251c6 14 12 28 12 43c0 84 -202 68 -202 161c0 39 46 64 81 64c31 0 62 -26 101 -26c11 0 22 2 32 7c-4 63 -9 126 -9 190c0 54 4 131 27 180c88 190 237 259 436 261z" />
+ <glyph glyph-name="snapchat-square" unicode="&#xf2ad;"
+d="M1280 388c0 14 -8 24 -22 27c-91 19 -160 83 -198 167c-4 8 -7 16 -7 25c0 45 124 36 124 100c0 27 -33 44 -57 44c-22 0 -40 -16 -63 -16c-4 0 -8 1 -12 2c3 38 5 77 5 115c0 34 -2 82 -17 114c-48 104 -140 165 -255 165c-125 0 -220 -47 -275 -165
+c-15 -32 -18 -80 -18 -115c0 -38 3 -76 6 -114c-5 -1 -10 -2 -15 -2c-22 0 -41 16 -62 16c-25 0 -55 -17 -55 -45c0 -62 124 -54 124 -99c0 -9 -3 -17 -7 -25c-39 -84 -106 -147 -198 -167c-14 -3 -22 -13 -22 -27c0 -47 106 -64 138 -69c9 -24 5 -66 40 -66
+c26 0 51 10 77 10c106 0 134 -95 256 -95c127 0 151 95 258 95c26 0 52 -9 78 -9c34 0 31 42 39 65c32 5 138 22 138 69zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="snowdrift" unicode="&#xf2f1;" horiz-adv-x="1448"
+d="M1007 384c104 116 30 287 -165 383c7 -6 44 24 83 67s65 84 58 90c-195 96 -438 80 -542 -36s-30 -287 165 -383c-7 6 -44 -24 -83 -67s-65 -84 -58 -90c195 -96 438 -80 542 36zM103 1188v0c228 253 760 288 1188 78c15 -14 -42 -101 -127 -196s-167 -161 -182 -147
+c428 -210 591 -585 363 -839c-228 -253 -760 -288 -1188 -78c-15 14 42 101 127 196s167 161 182 147c-428 210 -591 585 -363 839z" />
+ <glyph glyph-name="snowflake-o" unicode="&#xf2dc;" horiz-adv-x="1570"
+d="M1519 419l-167 -33l186 -107c30 -17 41 -57 23 -87s-57 -41 -87 -23l-186 106l55 -160c28 -80 -94 -121 -121 -42l-102 300l-271 156v-313l208 -238c56 -63 -41 -148 -96 -84l-112 128v-214c0 -35 -29 -64 -64 -64s-64 29 -64 64v214l-112 -128c-55 -64 -152 21 -96 84
+l208 238v313l-271 -156l-102 -300c-27 -79 -149 -38 -121 42l55 160l-186 -106c-30 -18 -69 -7 -87 23s-7 70 23 87l186 107l-167 33c-83 17 -58 142 25 126l310 -62l271 157l-271 157l-310 -62c-4 -1 -9 -1 -13 -1c-76 0 -87 112 -12 127l167 33l-186 107
+c-30 17 -41 57 -23 87c18 31 57 41 87 23l186 -106l-55 160c-28 80 94 121 121 42l102 -300l271 -156v313l-208 238c-56 63 41 148 96 84l112 -128v214c0 35 29 64 64 64s64 -29 64 -64v-214l112 128c55 64 152 -21 96 -84l-208 -238v-313l271 156l102 300
+c27 79 149 38 121 -42l-55 -160l186 106c30 18 69 7 87 -23s7 -70 -23 -87l-186 -107l167 -33c75 -15 64 -127 -12 -127c-4 0 -9 0 -13 1l-310 62l-271 -157l271 -157l310 62c83 16 108 -109 25 -126z" />
+ <glyph glyph-name="social-home" unicode="&#xf2ec;" horiz-adv-x="1486"
+d="M491 894h482v-621h-482v621v0zM1050 538h341v-666h-341v666zM91 273v0v620h318v-620h-318zM975 -128h-882v326h882v-326v0zM1053 894h340v-279h-340v279zM1452 1109v0c20 -5 34 -22 34 -44c0 -26 -93 -93 -93 -93h-1300s-87 62 -92 83s5 42 25 51l624 292
+c16 9 99 9 112 0z" />
+ <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024"
+d="M1024 448c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-448 448c-12 12 -19 28 -19 45c0 35 29 64 64 64h896c35 0 64 -29 64 -64zM1024 832c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19
+s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
+ <glyph glyph-name="sort-alpha-asc" unicode="&#xf15d;" horiz-adv-x="1629"
+d="M1159 1128h177l-72 218l-12 47c-1 8 -2 14 -2 20h-4l-3 -20c-3 -12 -4 -27 -11 -47zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1376h192
+c18 0 32 -14 32 -32zM1540 -23v-233h-584v90l369 529c8 12 16 22 21 27l11 9v3c-4 0 -8 -1 -14 -1c-8 -2 -18 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530c-6 -9 -14 -18 -21 -26l-11 -11v-2l14 2c9 2 18 2 30 2h248v119h121zM1629 874v-106h-288v106h75l-47 144h-243
+l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70z" />
+ <glyph glyph-name="sort-alpha-desc" unicode="&#xf15e;" horiz-adv-x="1629"
+d="M1159 104h177l-72 218l-12 47c-1 8 -2 14 -2 20h-4l-3 -20c-3 -12 -4 -27 -11 -47zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1376h192
+c18 0 32 -14 32 -32zM1629 -150v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1540 1001v-233h-584v90l369 529c8 12 16 22 21 27l11 9v3c-4 0 -8 -1 -14 -1c-8 -2 -18 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530
+c-6 -9 -14 -18 -21 -26l-11 -10v-3l14 3c9 1 18 1 30 1h248v119h121z" />
+ <glyph glyph-name="sort-amount-asc" unicode="&#xf160;" horiz-adv-x="1760"
+d="M704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1760 -32v-192c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32
+v192c0 18 14 32 32 32h832c18 0 32 -14 32 -32zM1568 480v-192c0 -18 -14 -32 -32 -32h-640c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h640c18 0 32 -14 32 -32zM1376 992v-192c0 -18 -14 -32 -32 -32h-448c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h448
+c18 0 32 -14 32 -32zM1184 1504v-192c0 -18 -14 -32 -32 -32h-256c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h256c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="sort-amount-desc" unicode="&#xf161;" horiz-adv-x="1760"
+d="M1184 -32v-192c0 -18 -14 -32 -32 -32h-256c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h256c18 0 32 -14 32 -32zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192
+c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1376 480v-192c0 -18 -14 -32 -32 -32h-448c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h448c18 0 32 -14 32 -32zM1568 992v-192c0 -18 -14 -32 -32 -32h-640c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h640
+c18 0 32 -14 32 -32zM1760 1504v-192c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h832c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="sort-asc" unicode="&#xf0de;" horiz-adv-x="1024"
+d="M1024 832c0 -35 -29 -64 -64 -64h-896c-35 0 -64 29 -64 64c0 17 7 33 19 45l448 448c12 12 28 19 45 19s33 -7 45 -19l448 -448c12 -12 19 -28 19 -45z" />
+ <glyph glyph-name="sort-desc" unicode="&#xf0dd;" horiz-adv-x="1024"
+d="M1024 448c0 -17 -7 -33 -19 -45l-448 -448c-12 -12 -28 -19 -45 -19s-33 7 -45 19l-448 448c-12 12 -19 28 -19 45c0 35 29 64 64 64h896c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="sort-numeric-asc" unicode="&#xf162;" horiz-adv-x="1454"
+d="M1314 223c0 82 -67 169 -147 169c-70 0 -114 -57 -114 -131c0 -72 46 -133 141 -133c65 0 120 39 120 95zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192
+c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1454 165c0 -202 -110 -421 -348 -421c-45 0 -82 7 -108 16c-16 5 -30 10 -42 15l39 113c9 -4 20 -8 31 -11c20 -7 46 -13 75 -13c120 0 182 100 201 204h-2c-28 -30 -87 -51 -146 -51c-145 0 -240 114 -240 244
+c0 138 106 251 253 251c159 0 287 -130 287 -347zM1424 882v-114h-469v114h167v432c0 13 1 26 1 36v16h-2l-7 -12c-5 -8 -13 -18 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+ <glyph glyph-name="sort-numeric-desc" unicode="&#xf163;" horiz-adv-x="1454"
+d="M1314 1247c0 82 -67 169 -147 169c-70 0 -114 -57 -114 -131c0 -72 46 -133 141 -133c65 0 120 39 120 95zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192
+c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1424 -142v-114h-469v114h167v432c0 13 1 26 1 36v16h-2l-7 -12c-5 -8 -13 -18 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1454 1189c0 -202 -110 -421 -348 -421c-45 0 -82 7 -108 16c-16 5 -30 10 -42 15l39 113
+c9 -4 20 -8 31 -11c20 -7 46 -13 75 -13c120 0 182 100 201 204h-2c-28 -30 -87 -51 -146 -51c-145 0 -240 114 -240 244c0 138 106 251 253 251c159 0 287 -130 287 -347z" />
+ <glyph glyph-name="soundcloud" unicode="&#xf1be;" horiz-adv-x="2304"
+d="M784 164c-1 -13 -11 -23 -24 -23c-12 0 -22 10 -23 23l-14 241l14 523c0 13 11 24 23 24c13 0 23 -11 24 -24l16 -523zM1080 193l-1 -24c0 -8 -3 -15 -9 -20c-5 -5 -12 -9 -20 -9c-9 0 -17 4 -23 11c-4 5 -6 11 -6 17v1c-11 235 -11 236 -11 236l10 579l1 6
+c0 10 5 19 13 24c5 3 10 5 16 5s11 -2 16 -5c8 -5 13 -14 13 -24l12 -586zM35 533l20 -128l-20 -126c-1 -5 -4 -9 -9 -9s-8 4 -9 9l-17 126l17 128c1 5 4 9 9 9s8 -4 9 -9zM121 612l26 -207l-26 -203c-1 -5 -5 -9 -10 -9s-9 4 -9 10l-23 202l23 207c0 5 4 9 9 9s9 -4 10 -9z
+M401 159zM213 650l25 -245l-25 -237c0 -6 -5 -11 -11 -11s-11 5 -12 11l-21 237l21 245c1 7 6 12 12 12s11 -5 11 -12zM307 657l23 -252l-23 -244c-1 -8 -7 -13 -14 -13s-13 5 -13 13l-21 244l21 252c0 8 6 13 13 13s13 -5 14 -13zM401 639l21 -234l-21 -246
+c-1 -9 -8 -16 -16 -16s-15 7 -15 16l-20 246l20 234c0 8 7 15 15 15s15 -7 16 -15zM784 164zM495 785l21 -380l-21 -246c0 -10 -8 -18 -17 -18c-10 0 -17 8 -18 18l-18 246l18 380c1 10 8 18 18 18c9 0 17 -8 17 -18zM589 871l19 -468l-19 -244c0 -11 -9 -19 -19 -19
+c-11 0 -19 8 -20 19l-16 244l16 468c1 11 9 19 20 19c10 0 19 -8 19 -19zM687 911l18 -506l-18 -242c-1 -12 -10 -21 -22 -21c-11 0 -20 9 -21 21l-16 242l16 506c0 12 10 22 21 22c12 0 21 -10 22 -22zM1079 169zM881 915l15 -510l-15 -239c0 -14 -11 -25 -25 -25
+s-24 11 -25 25l-14 239l14 510c0 14 11 25 25 25s25 -11 25 -25zM980 896l14 -492l-14 -236c0 -15 -12 -27 -27 -27s-27 12 -28 27l-12 236l12 492c1 16 13 28 28 28s26 -12 27 -28zM1192 404l-14 -231c0 -17 -14 -31 -31 -31s-31 14 -32 31l-6 114l-6 117l12 636v3
+c1 9 5 18 12 24c5 4 12 7 20 7c5 0 11 -2 15 -5c9 -5 15 -15 16 -26zM2304 423c0 -156 -127 -282 -283 -282h-786c-17 2 -31 15 -31 33v899c0 17 6 25 28 33c55 22 117 34 181 34c261 0 475 -200 498 -455c34 14 71 22 110 22c156 0 283 -127 283 -284z" />
+ <glyph glyph-name="space-shuttle" unicode="&#xf197;" horiz-adv-x="2176"
+d="M620 416c-69 -40 -163 -64 -268 -64h-128v64h-64c-18 0 -32 36 -32 80c0 18 3 35 7 49c-77 2 -135 15 -135 31s58 29 135 31c-4 14 -7 31 -7 49c0 44 14 80 32 80h64v64h128c105 0 199 -24 268 -64h1113c74 -13 141 -24 187 -32c192 -32 256 -96 256 -128
+s-64 -96 -256 -128c-46 -8 -113 -19 -187 -32h-1113zM1739 668c32 -22 53 -55 53 -92s-21 -70 -53 -92l81 -30c41 29 68 73 68 122s-27 93 -68 122zM625 400h1015s-217 -38 -456 -80c-128 0 -224 -96 -224 -96l-288 -288s-97 -64 -160 -64h-96l-93 464h29
+c102 0 199 23 273 64zM352 816h-29l93 464h96c65 0 128 -32 160 -64l288 -288s96 -96 224 -96c239 -42 456 -80 456 -80h-1015c-74 41 -171 64 -273 64z" />
+ <glyph glyph-name="spell-check" unicode="&#xf327;" horiz-adv-x="2049"
+d="M2049 700c0 -25 -10 -50 -28 -68l-724 -724l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136l-362 362c-18 18 -28 43 -28 68s10 50 28 68l136 136c18 18 43 28 68 28s50 -10 68 -28l294 -295l656 657c18 18 43 28 68 28s50 -10 68 -28l136 -136
+c18 -18 28 -43 28 -68zM0 880v73h48l158 454h111l158 -454h49v-73h-199v73h52l-32 98h-167l-32 -98h52v-73h-198zM200 1127h122l-49 149c-2 8 -5 16 -6 23c-1 8 -3 15 -3 18l-1 5h-2c-1 -13 -5 -29 -10 -46zM569 880v73h63v381h-63v73h242c40 0 72 -5 95 -14
+c24 -9 44 -25 58 -47c15 -21 22 -46 22 -75c0 -25 -6 -47 -17 -67s-28 -35 -48 -46v-1c28 -8 50 -24 64 -47s22 -49 22 -78c0 -35 -10 -65 -30 -91s-45 -43 -75 -52c-21 -6 -47 -9 -79 -9h-254zM730 1192h92c20 0 37 6 48 18c11 13 17 30 17 51c0 29 -10 49 -30 60
+c-11 5 -27 8 -46 8h-81v-137zM730 958h98c15 0 27 2 37 6c13 5 25 15 32 28c7 14 11 29 11 46c0 23 -7 41 -21 55c-13 14 -32 22 -56 22h-101v-157zM1131 950c-52 53 -78 118 -78 196s26 142 78 193s116 77 193 77c18 0 39 -2 60 -5c22 -3 44 -9 67 -16s41 -18 56 -33
+s23 -32 23 -51v-72h-88v41c0 12 -7 23 -20 31s-29 14 -45 17s-32 5 -48 5c-51 0 -94 -17 -127 -51c-33 -33 -49 -77 -49 -132c0 -59 17 -106 51 -142s78 -54 130 -54c14 0 29 2 45 4s31 8 46 16s23 19 23 32v41h89v-72c0 -18 -7 -35 -22 -49c-14 -14 -33 -26 -56 -33
+c-22 -7 -45 -13 -67 -16c-22 -4 -44 -6 -64 -6c-79 0 -145 27 -197 79v0z" />
+ <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1664"
+d="M462 142c0 -70 -57 -128 -128 -128c-70 0 -128 58 -128 128c0 71 58 128 128 128c71 0 128 -57 128 -128zM960 -64c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM256 640c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128
+s128 -57 128 -128zM1458 142c0 -70 -58 -128 -128 -128c-71 0 -128 58 -128 128c0 71 57 128 128 128c70 0 128 -57 128 -128zM494 1138c0 -88 -72 -160 -160 -160s-160 72 -160 160s72 160 160 160s160 -72 160 -160zM1664 640c0 -71 -57 -128 -128 -128s-128 57 -128 128
+s57 128 128 128s128 -57 128 -128zM1024 1344c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1554 1138c0 -124 -101 -224 -224 -224c-124 0 -224 100 -224 224c0 123 100 224 224 224c123 0 224 -101 224 -224z" />
+ <glyph glyph-name="spoon" unicode="&#xf1b1;" horiz-adv-x="640"
+d="M640 1008c0 -200 -87 -331 -209 -379l45 -821c2 -35 -25 -64 -60 -64h-192c-35 0 -62 29 -60 64l45 821c-122 48 -209 179 -209 379c0 256 143 528 320 528s320 -272 320 -528z" />
+ <glyph glyph-name="spotify" unicode="&#xf1bc;"
+d="M1127 326c0 28 -11 39 -30 51c-129 77 -279 115 -447 115c-98 0 -192 -13 -287 -34c-23 -5 -42 -20 -42 -52c0 -25 19 -49 49 -49c9 0 25 5 37 8c78 16 160 27 243 27c147 0 286 -36 397 -103c12 -7 20 -11 33 -11c25 0 47 20 47 48zM1223 541c0 27 -10 46 -35 61
+c-153 91 -347 141 -548 141c-129 0 -217 -18 -303 -42c-32 -9 -48 -31 -48 -64s27 -60 60 -60c14 0 22 4 37 8c70 19 154 33 251 33c190 0 363 -50 488 -124c11 -6 22 -13 38 -13c34 0 60 27 60 60zM1331 789c0 37 -16 56 -40 70c-173 101 -410 148 -636 148
+c-133 0 -255 -15 -364 -47c-28 -8 -54 -32 -54 -74c0 -41 31 -73 72 -73c15 0 29 5 40 8c97 27 202 37 307 37c208 0 424 -46 563 -129c14 -8 24 -12 40 -12c38 0 72 30 72 72zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z
" />
- <glyph glyph-name="opencart" unicode="&#xf23d;" horiz-adv-x="2304"
-d="M1524 -25c0 -91 -73 -164 -164 -164s-165 73 -165 164s74 165 165 165s164 -74 164 -165zM775 -25c0 -91 -74 -164 -165 -164s-164 73 -164 164s73 165 164 165s165 -74 165 -165zM0 1469c295 -311 572 -357 1660 -357s610 -242 -62 -842c213 370 945 698 -255 680
-c-1151 -17 -1219 333 -1343 519z" />
- <glyph glyph-name="artstation" unicode="&#xf2ed;" horiz-adv-x="1533"
-d="M601 1277v0h267c51 0 112 -37 136 -83l504 -878c16 -24 25 -53 25 -84c0 -35 -7 -53 -31 -94l-123 -213zM474 1058l348 -604h-695zM0 233v0h949l178 -309h-859c-53 0 -114 38 -138 85h-1z" />
- <glyph glyph-name="thumbs-up" unicode="&#xf164;" horiz-adv-x="1600"
-d="M256 192c0 35 -29 64 -64 64c-36 0 -64 -29 -64 -64c0 -36 28 -64 64 -64c35 0 64 28 64 64zM416 704v-640c0 -35 -29 -64 -64 -64h-288c-35 0 -64 29 -64 64v640c0 35 29 64 64 64h288c35 0 64 -29 64 -64zM1600 704c0 -53 -21 -110 -55 -149c11 -32 15 -62 15 -76
-c2 -50 -13 -97 -43 -137c11 -37 11 -77 0 -117c-10 -37 -29 -70 -54 -94c6 -75 -11 -136 -49 -181c-43 -51 -109 -77 -197 -78h-129c-143 0 -278 47 -386 84c-63 22 -123 43 -158 44c-34 1 -64 29 -64 64v641c0 33 28 61 61 64c37 3 133 122 177 180c36 46 70 89 101 120
-c39 39 50 99 62 157c11 59 23 121 66 163c12 12 28 19 45 19c224 0 224 -179 224 -256c0 -82 -29 -140 -56 -192c-11 -22 -21 -32 -29 -64h277c104 0 192 -88 192 -192z" />
- <glyph glyph-name="vimeo-square" unicode="&#xf194;"
-d="M1292 898c7 145 -47 218 -161 222c-154 5 -258 -82 -312 -261c28 12 55 19 82 19c56 0 81 -32 74 -96c-3 -38 -28 -94 -74 -167c-47 -74 -82 -110 -105 -110c-30 0 -56 56 -82 169c-8 34 -23 118 -45 255c-20 126 -73 185 -160 177c-36 -4 -92 -36 -164 -100
-c-54 -47 -107 -96 -162 -144l52 -67c50 34 79 52 87 52c38 0 74 -60 107 -179c30 -110 60 -219 90 -329c45 -119 99 -179 164 -179c104 0 232 98 383 294c146 188 222 336 226 444zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960
-c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
- <glyph glyph-name="arrow-circle-right" unicode="&#xf0a9;"
-d="M1285 640c0 17 -6 33 -18 45l-91 91l-362 362c-12 12 -28 18 -45 18s-33 -6 -45 -18l-91 -91c-12 -12 -18 -28 -18 -45s6 -33 18 -45l189 -189h-502c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h502l-189 -189c-12 -12 -19 -28 -19 -45s7 -33 19 -45l91 -91
-c12 -12 28 -18 45 -18s33 6 45 18l362 362l91 91c12 12 18 28 18 45zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896"
-d="M885 970c11 -12 14 -29 7 -44l-540 -1157c-8 -15 -24 -25 -42 -25c-4 0 -9 1 -14 2c-22 7 -35 28 -30 49l197 808l-406 -101c-4 -1 -8 -1 -12 -1c-11 0 -23 4 -31 11c-12 10 -16 25 -13 39l201 825c5 19 23 32 44 32h328c25 0 45 -19 45 -42c0 -6 -2 -12 -5 -18
-l-171 -463l396 98c4 1 8 2 12 2c13 0 25 -6 34 -15z" />
- <glyph glyph-name="thermometer-quarter" unicode="&#xf2ca;" horiz-adv-x="1024"
-d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v139h128v-139c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320
-s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z
+ <glyph glyph-name="square" unicode="&#xf0c8;"
+d="M1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="square-o" unicode="&#xf096;" horiz-adv-x="1408"
+d="M1120 1280h-832c-88 0 -160 -72 -160 -160v-832c0 -88 72 -160 160 -160h832c88 0 160 72 160 160v832c0 88 -72 160 -160 160zM1408 1120v-832c0 -159 -129 -288 -288 -288h-832c-159 0 -288 129 -288 288v832c0 159 129 288 288 288h832c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="stack-exchange" unicode="&#xf18d;" horiz-adv-x="1238"
+d="M1238 283v-66c0 -113 -88 -204 -196 -204h-57l-260 -269v269h-529c-108 0 -196 91 -196 204v66h1238zM1238 609v-255h-1238v255h1238zM1238 937v-255h-1238v255h1238zM1238 1077v-67h-1238v67c0 112 88 203 196 203h846c108 0 196 -91 196 -203z" />
+ <glyph glyph-name="stack-overflow" unicode="&#xf16c;" horiz-adv-x="1514"
+d="M1278 -96v480h160v-640h-1438v640h160v-480h1118zM336 428l33 157l783 -165l-33 -156zM439 802l67 146l725 -339l-67 -145zM640 1158l102 123l614 -513l-102 -123zM1037 1536l477 -641l-128 -96l-477 641zM319 65v159h800v-159h-800z" />
+ <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664"
+d="M1664 889c0 -18 -13 -35 -26 -48l-363 -354l86 -500c1 -7 1 -13 1 -20c0 -26 -12 -50 -41 -50c-14 0 -28 5 -40 12l-449 236l-449 -236c-13 -7 -26 -12 -40 -12c-29 0 -42 24 -42 50c0 7 1 13 2 20l86 500l-364 354c-12 13 -25 30 -25 48c0 30 31 42 56 46l502 73
+l225 455c9 19 26 41 49 41s40 -22 49 -41l225 -455l502 -73c24 -4 56 -16 56 -46z" />
+ <glyph glyph-name="star-half" unicode="&#xf089;" horiz-adv-x="832"
+d="M832 1504v-1339l-449 -236c-13 -7 -26 -12 -40 -12c-29 0 -42 24 -42 50c0 7 1 13 2 20l86 500l-364 354c-12 13 -25 30 -25 48c0 30 31 42 56 46l502 73l225 455c9 19 26 41 49 41z" />
+ <glyph glyph-name="star-half-o" unicode="&#xf123;" horiz-adv-x="1664"
+d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500c7 -44 -9 -70 -40 -70c-11 0 -25 4 -40 12l-449 236l-449 -236c-15 -8 -29 -12 -40 -12c-31 0 -47 26 -40 70l86 500l-364 354c-43 43 -29 85 31 94
+l502 73l225 455c13 27 31 41 49 41s35 -14 49 -41l225 -455l502 -73c60 -9 74 -51 30 -94z" />
+ <glyph glyph-name="star-o" unicode="&#xf006;" horiz-adv-x="1664"
+d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889c0 -18 -13 -35 -26 -48l-363 -354l86 -500c1 -7 1 -13 1 -20c0 -27 -12 -50 -41 -50c-14 0 -28 5 -40 12l-449 236l-449 -236c-13 -7 -26 -12 -40 -12
+c-29 0 -42 24 -42 50c0 7 1 13 2 20l86 500l-364 354c-12 13 -25 30 -25 48c0 30 31 42 56 46l502 73l225 455c9 19 26 41 49 41s40 -22 49 -41l225 -455l502 -73c24 -4 56 -16 56 -46z" />
+ <glyph glyph-name="steam" unicode="&#xf1b6;" horiz-adv-x="1792"
+d="M1582 954c0 -135 -110 -244 -244 -244c-135 0 -244 109 -244 244s109 244 244 244c134 0 244 -109 244 -244zM812 212c0 139 -111 250 -250 250c-18 0 -36 -2 -54 -6l104 -42c102 -41 152 -156 111 -258s-157 -152 -259 -110c-41 16 -82 33 -123 49
+c42 -79 125 -133 221 -133c139 0 250 111 250 250zM1642 953c0 168 -137 305 -305 305c-169 0 -306 -137 -306 -305c0 -169 137 -305 306 -305c168 0 305 136 305 305zM1792 953c0 -252 -204 -455 -455 -455l-437 -319c-16 -172 -162 -307 -338 -307
+c-162 0 -299 115 -332 268l-230 92v429l389 -157c51 31 110 48 173 48c12 0 24 -1 35 -2l284 407c2 249 206 451 456 451c251 0 455 -204 455 -455z" />
+ <glyph glyph-name="steam-square" unicode="&#xf1b7;"
+d="M1242 889c0 106 -87 193 -194 193c-106 0 -193 -87 -193 -193c0 -107 87 -193 193 -193c107 0 194 86 194 193zM632 301c0 -110 -88 -198 -198 -198c-76 0 -142 43 -175 106c33 -13 65 -26 98 -40c80 -32 172 7 205 88c32 80 -7 172 -88 204l-82 33c13 3 28 5 42 5
+c110 0 198 -88 198 -198zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v153l172 -69c26 -121 134 -212 262 -212c140 0 255 107 268 243l345 252c200 0 361 162 361 360c0 200 -161 361 -361 361c-197 0 -358 -160 -360 -357l-225 -322
+c-9 1 -18 1 -28 1c-50 0 -97 -13 -137 -37l-297 119v468c0 159 129 288 288 288h960c159 0 288 -129 288 -288zM1289 887c0 -133 -108 -241 -242 -241c-133 0 -241 108 -241 241c0 134 108 242 241 242c134 0 242 -108 242 -242z" />
+ <glyph glyph-name="step-backward" unicode="&#xf048;" horiz-adv-x="1024"
+d="M979 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-678c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-678c3 7 7 13 13 19z" />
+ <glyph glyph-name="step-forward" unicode="&#xf051;" horiz-adv-x="1024"
+d="M45 -115c-25 -25 -45 -16 -45 19v1472c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v678c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-1408c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v678c-3 -7 -7 -13 -13 -19z" />
+ <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408"
+d="M1280 832c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 832c0 -84 -53 -154 -128 -181v-395c0 -212 -201 -384 -448 -384s-448 172 -448 384v132c-217 27 -384 187 -384 380v512c0 35 29 64 64 64c6 0 11 -1 16 -2c22 39 64 66 112 66
+c71 0 128 -57 128 -128s-57 -128 -128 -128c-23 0 -45 7 -64 18v-402c0 -141 144 -256 320 -256s320 115 320 256v402c-19 -11 -41 -18 -64 -18c-71 0 -128 57 -128 128s57 128 128 128c48 0 90 -27 112 -66c5 1 10 2 16 2c35 0 64 -29 64 -64v-512
+c0 -193 -167 -353 -384 -380v-132c0 -141 144 -256 320 -256s320 115 320 256v395c-75 27 -128 97 -128 181c0 106 86 192 192 192s192 -86 192 -192z" />
+ <glyph glyph-name="sticky-note" unicode="&#xf249;"
+d="M1024 288v-416h-928c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344c53 0 96 -43 96 -96v-928h-416c-53 0 -96 -43 -96 -96zM1152 256h381c-9 -48 -35 -102 -65 -132l-184 -184c-30 -30 -84 -56 -132 -65v381z" />
+ <glyph glyph-name="sticky-note-o" unicode="&#xf24a;"
+d="M1400 256h-248v-248c17 6 34 15 41 22l185 185c7 7 16 24 22 41zM1120 384h288v896h-1280v-1280h896v288c0 53 43 96 96 96zM1536 1312v-1024c0 -53 -31 -127 -68 -164l-184 -184c-37 -37 -111 -68 -164 -68h-1024c-53 0 -96 43 -96 96v1344c0 53 43 96 96 96h1344
+c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="stop" unicode="&#xf04d;"
+d="M1536 1344v-1408c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="stop-circle" unicode="&#xf28d;"
+d="M1088 352v576c0 18 -14 32 -32 32h-576c-18 0 -32 -14 -32 -32v-576c0 -18 14 -32 32 -32h576c18 0 32 14 32 32zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="stop-circle-o" unicode="&#xf28e;"
+d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM768 96c300 0 544 244 544 544s-244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544zM480 320c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h576c18 0 32 -14 32 -32v-576
+c0 -18 -14 -32 -32 -32h-576z" />
+ <glyph glyph-name="street-view" unicode="&#xf21d;" horiz-adv-x="1408"
+d="M1408 0c0 -176 -365 -256 -704 -256s-704 80 -704 256c0 136 203 200 373 229c35 6 68 -17 74 -52s-17 -68 -52 -74c-206 -36 -264 -92 -267 -104c10 -34 202 -127 576 -127s566 93 576 129c-3 10 -61 66 -267 102c-35 6 -58 39 -52 74s39 58 74 52
+c170 -29 373 -93 373 -229zM1024 896v-384c0 -35 -29 -64 -64 -64h-64v-384c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v384h-64c-35 0 -64 29 -64 64v384c0 71 57 128 128 128h384c71 0 128 -57 128 -128zM928 1280c0 -124 -100 -224 -224 -224s-224 100 -224 224
+s100 224 224 224s224 -100 224 -224z" />
+ <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792"
+d="M1760 640c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1728zM483 704c-19 24 -36 51 -51 80c-32 65 -48 128 -48 188c0 122 45 224 134 309s220 127 393 127c38 0 93 -7 167 -19c44 -8 103 -24 177 -48
+c7 -26 14 -66 21 -118c9 -79 14 -140 14 -183c0 -14 -2 -29 -5 -45l-12 -3l-84 6l-14 2c-34 101 -69 169 -103 205c-59 61 -130 91 -210 91c-76 0 -137 -20 -182 -59s-67 -88 -67 -146c0 -49 22 -95 66 -140s137 -88 279 -129c48 -14 105 -36 173 -66c36 -17 68 -34 95 -52
+h-743zM990 448h411c5 -28 7 -59 7 -92c0 -72 -13 -143 -41 -212c-15 -37 -38 -71 -71 -104c-24 -23 -60 -50 -109 -81c-50 -30 -100 -53 -153 -66c-53 -14 -120 -21 -203 -21c-55 0 -121 2 -195 23l-140 40c-39 11 -62 20 -72 28c-4 4 -8 11 -8 22v13c0 8 2 60 -2 156
+c-2 50 2 85 2 105v44l102 2c37 -85 54 -136 65 -154c24 -39 51 -70 80 -94s64 -43 105 -57c40 -15 85 -22 132 -22c42 0 89 9 139 27c51 17 92 46 122 86c31 40 47 83 47 129c0 56 -27 108 -81 157c-22 19 -68 43 -137 71z" />
+ <glyph glyph-name="stumbleupon" unicode="&#xf1a4;" horiz-adv-x="1920"
+d="M1062 824v118c0 56 -46 102 -102 102s-102 -46 -102 -102v-612c0 -234 -194 -423 -429 -423c-237 0 -429 192 -429 429v266h328v-262c0 -57 46 -102 102 -102s102 45 102 102v620c0 229 196 413 428 413c233 0 428 -185 428 -416v-136l-195 -58zM1592 602h328v-266
+c0 -237 -192 -429 -429 -429c-236 0 -429 190 -429 425v268l131 -61l195 58v-270c0 -56 46 -101 102 -101s102 45 102 101v275z" />
+ <glyph glyph-name="stumbleupon-circle" unicode="&#xf1a3;"
+d="M866 697l90 27v62c0 106 -90 191 -196 191s-196 -84 -196 -190v-283c0 -26 -21 -47 -47 -47s-46 21 -46 47v120h-151v-122c0 -109 88 -196 197 -196c107 0 196 86 196 193v280c0 26 21 47 47 47c25 0 46 -21 46 -47v-54zM1199 502v122h-150v-126c0 -26 -21 -47 -47 -47
+c-25 0 -46 21 -46 47v123l-90 -26l-60 28v-123c0 -107 89 -194 197 -194s196 87 196 196zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="subscript" unicode="&#xf12c;" horiz-adv-x="1531"
+d="M892 167v-167h-248l-159 252l-24 42c-6 7 -9 14 -11 21h-3c-2 -7 -6 -14 -9 -21c-6 -12 -15 -28 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228c9 -14 16 -29 23 -42c6 -7 9 -14 11 -21h3c2 7 6 14 11 21l25 42l140 228h257v-168h-125
+l-184 -267l204 -296h109zM1531 -50v-206h-514l-4 27c-1 15 -3 33 -3 46c0 273 350 296 350 441c0 52 -47 87 -100 87c-39 0 -72 -18 -97 -39c-13 -11 -25 -25 -36 -38l-105 92c18 25 38 46 63 66c42 34 103 65 188 65c145 0 246 -85 246 -218c0 -239 -332 -259 -346 -403
+h232v80h126z" />
+ <glyph glyph-name="subway" unicode="&#xf239;"
+d="M1088 1536c247 0 448 -143 448 -320v-896c0 -173 -191 -313 -431 -319l213 -202c21 -20 7 -55 -22 -55h-1056c-29 0 -43 35 -22 55l213 202c-240 6 -431 146 -431 319v896c0 177 201 320 448 320h640zM288 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160
+s72 -160 160 -160zM704 768v512h-544v-512h544zM1248 224c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM1408 768v512h-576v-512h576z" />
+ <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792"
+d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64c-123 0 -224 101 -224 224v832c0 123 101 224 224 224h64zM1408 1152v-1280h-1024v1280h128v160c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h128zM1792 928v-832c0 -123 -101 -224 -224 -224h-64v1280h64
+c123 0 224 -101 224 -224z" />
+ <glyph glyph-name="sun" unicode="&#xf329;" horiz-adv-x="1707"
+d="M1706 363c-3 -10 -11 -17 -20 -20l-292 -96v-306c0 -10 -5 -20 -13 -26c-9 -6 -19 -8 -29 -4l-292 94l-180 -248c-6 -8 -16 -13 -26 -13s-20 5 -26 13l-180 248l-292 -94c-10 -4 -20 -2 -29 4c-8 6 -13 16 -13 26v306l-292 96c-9 3 -17 10 -20 20s-2 21 4 29l180 248
+l-180 248c-6 9 -7 19 -4 29s11 17 20 20l292 96v306c0 10 5 20 13 26c9 6 19 8 29 4l292 -94l180 248c12 16 40 16 52 0l180 -248l292 94c10 4 20 2 29 -4c8 -6 13 -16 13 -26v-306l292 -96c9 -3 17 -10 20 -20s2 -20 -4 -29l-180 -248l180 -248c6 -8 7 -19 4 -29z" />
+ <glyph glyph-name="sun-o" unicode="&#xf185;" horiz-adv-x="1707"
+d="M1430 640c0 318 -258 576 -576 576s-576 -258 -576 -576s258 -576 576 -576s576 258 576 576zM1706 363c-3 -10 -11 -17 -20 -20l-292 -96v-306c0 -10 -5 -20 -13 -26c-9 -6 -19 -8 -29 -4l-292 94l-180 -248c-6 -8 -16 -13 -26 -13s-20 5 -26 13l-180 248l-292 -94
+c-10 -4 -20 -2 -29 4c-8 6 -13 16 -13 26v306l-292 96c-9 3 -17 10 -20 20s-2 21 4 29l180 248l-180 248c-6 9 -7 19 -4 29s11 17 20 20l292 96v306c0 10 5 20 13 26c9 6 19 8 29 4l292 -94l180 248c12 16 40 16 52 0l180 -248l292 94c10 4 20 2 29 -4c8 -6 13 -16 13 -26
+v-306l292 -96c9 -3 17 -10 20 -20s2 -20 -4 -29l-180 -248l180 -248c6 -8 7 -19 4 -29z" />
+ <glyph glyph-name="superpowers" unicode="&#xf2dd;" horiz-adv-x="1792"
+d="M1473 607c18 320 -227 585 -544 604c-315 19 -594 -221 -612 -538c-18 -320 227 -585 545 -604c315 -19 594 220 611 538zM1792 1536l-349 -348c159 -155 245 -371 231 -593c-22 -372 -308 -669 -675 -719l-999 -132l347 347c-159 155 -244 371 -231 593
+c23 373 308 670 676 720c333 44 667 88 1000 132z" />
+ <glyph glyph-name="superscript" unicode="&#xf12b;" horiz-adv-x="1529"
+d="M892 167v-167h-248l-159 252l-24 42c-6 7 -9 14 -11 21h-3c-2 -7 -6 -14 -9 -21c-6 -12 -15 -28 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228c9 -14 16 -29 23 -42c6 -7 9 -14 11 -21h3c2 7 6 14 11 21l25 42l140 228h257v-168h-125
+l-184 -267l204 -296h109zM1529 846v-206h-514l-3 27c-2 14 -4 33 -4 46c0 273 350 296 350 441c0 52 -47 87 -100 87c-38 0 -72 -18 -97 -39c-13 -11 -25 -25 -36 -38l-105 92c18 25 38 46 63 66c42 33 103 65 188 65c145 0 246 -85 246 -218c0 -240 -332 -260 -346 -403
+h232v80h126z" />
+ <glyph glyph-name="syncthing" unicode="&#xf311;"
+d="M768 1408c424 0 768 -344 768 -768s-344 -768 -768 -768s-768 344 -768 768s344 768 768 768zM774 1254c-337 0 -611 -274 -611 -611c0 -10 0 -28 1 -38c-17 -10 -32 -23 -42 -41c-33 -56 -14 -128 41 -161c18 -10 37 -15 56 -16c97 -210 309 -355 555 -355
+c108 0 210 28 298 78c16 -11 35 -19 56 -21c65 -5 122 42 129 107v10c0 14 -5 36 -11 49c87 105 139 241 139 388c0 57 -8 112 -23 164c14 13 25 30 32 49c21 61 -12 128 -73 149c-12 4 -26 6 -38 6v0c-6 0 -15 0 -21 -1c-112 148 -289 244 -488 244zM774 1175v0
+c171 0 323 -79 420 -204c-10 -11 -17 -24 -22 -39c-9 -27 -8 -55 1 -80l-224 -186c-18 11 -39 16 -60 16c-22 0 -44 -5 -63 -18c-26 -16 -43 -42 -50 -70l-447 -41c-10 21 -25 39 -46 52c-13 8 -27 12 -41 14c0 8 -1 16 -1 24c0 295 238 532 533 532zM1224 792
+c6 -3 15 -7 21 -9c15 -5 29 -8 44 -7c11 -43 17 -87 17 -133c0 -125 -42 -240 -114 -331c-13 7 -28 11 -43 13c-15 1 -28 0 -42 -4l-122 175c23 32 29 73 15 110zM783 516c2 -4 5 -11 8 -15c29 -44 81 -63 129 -50l122 -175c-12 -16 -19 -37 -21 -59v-9c0 -10 2 -26 5 -35
+c-75 -40 -161 -63 -252 -63c-211 0 -394 123 -480 301c10 8 24 22 30 33c5 8 11 22 13 31z" />
+ <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664"
+d="M512 160v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM512 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 160v192c0 18 -14 32 -32 32h-320
+c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM512 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192
+c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 160v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1024 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32z
+M1536 544v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1536 928v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM1664 1248v-1088c0 -88 -72 -160 -160 -160
+h-1344c-88 0 -160 72 -160 160v1088c0 88 72 160 160 160h1344c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152"
+d="M640 128c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1024 288v960c0 17 -15 32 -32 32h-832c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h832c17 0 32 15 32 32zM1152 1248v-1088c0 -88 -72 -160 -160 -160h-832c-88 0 -160 72 -160 160v1088
+c0 88 72 160 160 160h832c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="tachometer" unicode="&#xf0e4;" horiz-adv-x="1792"
+d="M384 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM576 832c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1004 351l101 382c8 34 -12 69 -46 78s-69 -12 -78 -46l-101 -382
+c-79 -6 -148 -61 -170 -142c-27 -103 35 -208 137 -235c103 -27 208 35 235 137c21 81 -13 163 -78 208zM1664 384c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1024 1024c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128
+s128 57 128 128zM1472 832c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1792 384c0 -172 -49 -338 -141 -483c-12 -18 -32 -29 -54 -29h-1402c-22 0 -42 11 -54 29c-92 144 -141 311 -141 483c0 494 402 896 896 896s896 -402 896 -896z
" />
- <glyph glyph-name="hdd-o" unicode="&#xf0a0;"
-d="M1040 320c0 -44 -36 -80 -80 -80s-80 36 -80 80s36 80 80 80s80 -36 80 -80zM1296 320c0 -44 -36 -80 -80 -80s-80 36 -80 80s36 80 80 80s80 -36 80 -80zM1408 160v320c0 17 -15 32 -32 32h-1216c-17 0 -32 -15 -32 -32v-320c0 -17 15 -32 32 -32h1216c17 0 32 15 32 32
-zM178 640h1180l-157 482c-5 17 -24 30 -42 30h-782c-18 0 -37 -13 -42 -30zM1536 480v-320c0 -88 -72 -160 -160 -160h-1216c-88 0 -160 72 -160 160v320c0 27 8 50 16 75l197 606c23 70 90 119 164 119h782c74 0 141 -49 164 -119l197 -606c8 -25 16 -48 16 -75z" />
- <glyph glyph-name="id-card-o" unicode="&#xf2c3;" horiz-adv-x="2048"
-d="M896 324c0 -73 -48 -132 -107 -132h-426c-59 0 -107 59 -107 132c0 132 32 284 164 284c40 -40 95 -64 156 -64s116 24 156 64c132 0 164 -152 164 -284zM768 768c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1792 352v-64
-c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704c18 0 32 -14 32 -32zM1408 608v-64c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h320c18 0 32 -14 32 -32zM1792 608v-64c0 -18 -14 -32 -32 -32h-192
-c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 864v-64c0 -18 -14 -32 -32 -32h-704c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h704c18 0 32 -14 32 -32zM1920 32v1120h-1792v-1120c0 -17 15 -32 32 -32h1728c17 0 32 15 32 32zM2048 1248v-1216
-c0 -88 -72 -160 -160 -160h-1728c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1728c88 0 160 -72 160 -160z" />
- <glyph glyph-name="plug" unicode="&#xf1e6;" horiz-adv-x="1792"
-d="M1755 1083c49 -50 49 -131 0 -181l-401 -400l150 -150l-160 -160c-219 -219 -553 -250 -801 -86l-362 -362h-181v181l362 362c-164 248 -133 582 86 801l160 160l150 -150l400 401c50 49 131 49 181 0c50 -50 50 -132 0 -181l-400 -401l234 -234l401 400
-c50 50 131 50 181 0z" />
- <glyph glyph-name="react" unicode="&#xf302;" horiz-adv-x="1755"
-d="M1434 910v0c187 -64 321 -165 321 -269c0 -109 -143 -215 -341 -280c-11 -3 -21 -7 -32 -10c3 -13 7 -33 10 -46c39 -197 10 -360 -83 -413c-89 -52 -235 -1 -382 125c-16 14 -31 28 -46 43c-12 -12 -24 -22 -36 -33c-152 -133 -307 -187 -400 -134
-c-90 52 -118 203 -82 393c4 21 9 40 14 61c-16 4 -32 10 -47 15c-190 65 -330 172 -330 279c0 104 131 205 314 268c20 7 42 14 64 20c-5 19 -9 38 -13 57c-38 193 -11 348 79 400c94 55 250 -3 406 -142c8 -7 21 -20 29 -27c14 13 28 27 43 40c149 130 296 184 386 132
-c94 -54 121 -219 79 -423c-3 -13 -6 -25 -9 -38c15 -5 41 -13 56 -18zM970 1201v0c-14 -12 -27 -23 -40 -36c53 -57 101 -118 146 -182c77 -7 155 -20 231 -37c3 11 5 23 7 35c36 177 15 311 -43 344c-54 31 -173 -13 -301 -124zM524 553c-22 -52 -41 -104 -56 -153
-c52 -11 106 -19 159 -25c-19 29 -37 59 -54 89c-17 29 -33 59 -49 89zM524 726c15 30 32 61 49 90s35 59 53 87c-55 -7 -108 -16 -157 -27c15 -48 33 -99 55 -150zM563 640v0c23 -47 48 -93 74 -139c22 -38 59 -98 84 -134c50 -3 103 -5 157 -5s107 2 158 6
-c29 44 57 87 83 133c22 38 55 101 74 140c-23 47 -49 94 -75 139c-22 37 -59 96 -83 132c-51 4 -104 6 -157 6s-107 -2 -158 -6c-29 -44 -57 -87 -83 -133s-51 -92 -74 -139zM1182 464c-17 -29 -34 -59 -53 -88c54 6 108 16 161 28c-17 52 -35 102 -57 152
-c-16 -31 -34 -62 -51 -92zM1232 726c21 49 39 98 55 149c-49 11 -102 21 -157 28c15 -24 38 -63 52 -87c17 -29 34 -60 50 -90zM878 1112v0c-34 -37 -68 -79 -102 -123c28 1 74 3 102 3s74 -2 102 -3c-32 43 -66 84 -102 123zM481 1322c-54 -31 -76 -156 -44 -322
-c4 -18 8 -36 12 -53c76 17 154 29 231 36c45 64 94 125 147 182c-9 8 -17 16 -26 24c-135 119 -262 167 -320 133zM397 419c24 75 52 149 85 221c-33 71 -61 144 -84 218c-20 -6 -40 -12 -60 -19c-156 -55 -264 -135 -264 -198c7 -41 29 -78 64 -102
-c60 -48 143 -84 216 -107c14 -5 29 -9 43 -13zM796 83c11 10 22 19 33 30c-53 58 -103 119 -148 183c-79 6 -156 18 -233 34c-5 -19 -8 -38 -12 -57c-31 -163 -9 -284 46 -316c39 -15 83 -13 121 5c71 28 136 69 193 121zM880 166c36 40 70 81 102 125
-c-34 -2 -69 -3 -104 -3c-34 0 -68 1 -101 2c34 -45 68 -86 103 -124zM1328 63c11 76 9 153 -8 227c-2 12 -6 31 -9 42c-64 -14 -169 -31 -234 -36c-44 -64 -93 -126 -145 -184c15 -14 30 -27 44 -39c125 -108 241 -149 296 -117c33 26 53 65 56 107zM1391 432
-c171 57 291 143 291 210c0 62 -112 144 -272 199c-16 5 -34 11 -52 16c-23 -74 -51 -146 -84 -216c34 -71 64 -143 88 -218c10 3 19 6 29 9zM878 797c87 0 157 -70 157 -157s-70 -157 -157 -157s-157 70 -157 157s70 157 157 157z" />
+ <glyph glyph-name="tag" unicode="&#xf02b;" horiz-adv-x="1515"
+d="M448 1088c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1515 512c0 -34 -14 -67 -37 -90l-491 -492c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-715 716c-51 50 -91 147 -91 218v416c0 70 58 128 128 128h416c71 0 168 -40 219 -91
+l715 -714c23 -24 37 -57 37 -91z" />
+ <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1899"
+d="M448 1088c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1515 512c0 -34 -14 -67 -37 -90l-491 -492c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-715 716c-51 50 -91 147 -91 218v416c0 70 58 128 128 128h416c71 0 168 -40 219 -91
+l715 -714c23 -24 37 -57 37 -91zM1899 512c0 -34 -14 -67 -37 -90l-491 -492c-24 -23 -57 -37 -91 -37c-52 0 -78 24 -112 59l470 470c23 23 37 56 37 90s-14 67 -37 91l-715 714c-51 51 -148 91 -219 91h224c71 0 168 -40 219 -91l715 -714c23 -24 37 -57 37 -91z" />
+ <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792"
+d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 832v-256c0 -35 -29 -64 -64 -64h-1664
+c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64zM1792 1344v-256c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1664c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="taxi" unicode="&#xf1ba;" horiz-adv-x="2048"
+d="M1824 640c124 0 224 -100 224 -224v-384c0 -18 -14 -32 -32 -32h-96v-64c0 -106 -86 -192 -192 -192s-192 86 -192 192v64h-1024v-64c0 -106 -86 -192 -192 -192s-192 86 -192 192v64h-96c-18 0 -32 14 -32 32v384c0 124 100 224 224 224h28l105 419
+c31 126 153 221 283 221h128v224c0 18 14 32 32 32h448c18 0 32 -14 32 -32v-224h128c130 0 252 -95 283 -221l105 -419h28zM320 160c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160zM516 640h1016l-89 357c-3 11 -23 27 -35 27h-768
+c-12 0 -32 -16 -35 -27zM1728 160c88 0 160 72 160 160s-72 160 -160 160s-160 -72 -160 -160s72 -160 160 -160z" />
+ <glyph glyph-name="telegram" unicode="&#xf2c6;" horiz-adv-x="1792"
+d="M1189 229l147 693c13 61 -22 85 -62 70l-864 -333c-59 -23 -58 -56 -10 -71l221 -69l513 323c24 16 46 7 28 -9l-415 -375l-16 -228c23 0 33 10 45 22l108 104l224 -165c41 -23 70 -11 81 38zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896s401 896 896 896
+s896 -401 896 -896z" />
+ <glyph glyph-name="television" unicode="&#xf26c;" horiz-adv-x="1920"
+d="M1792 288v960c0 17 -15 32 -32 32h-1600c-17 0 -32 -15 -32 -32v-960c0 -17 15 -32 32 -32h1600c17 0 32 15 32 32zM1920 1248v-960c0 -88 -72 -160 -160 -160h-736v-128h352c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v64
+c0 18 14 32 32 32h352v128h-736c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="tencent-weibo" unicode="&#xf1d5;" horiz-adv-x="1166"
+d="M785 964c0 -106 -87 -193 -193 -193c-41 0 -79 13 -111 35c-36 -39 -76 -88 -115 -146c-163 -245 -232 -534 -202 -859c2 -29 -19 -54 -47 -57h-5c-26 0 -49 20 -52 47c-39 438 100 748 223 931c45 67 90 121 132 165c-11 24 -16 50 -16 77c0 107 86 193 193 193
+c106 0 193 -86 193 -193zM1166 953c0 -321 -261 -582 -583 -582c-44 0 -88 5 -131 14c-28 7 -45 35 -39 63c7 27 34 45 62 39c35 -9 72 -13 108 -13c264 0 479 215 479 479s-215 479 -479 479s-479 -215 -479 -479c0 -77 18 -150 52 -218c13 -26 3 -57 -22 -70
+c-26 -13 -57 -3 -70 23c-42 81 -64 173 -64 265c0 322 262 583 583 583c322 0 583 -261 583 -583z" />
+ <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1651"
+d="M572 553l-466 -466c-13 -13 -33 -13 -46 0l-50 50c-13 13 -13 33 0 46l393 393l-393 393c-13 13 -13 33 0 46l50 50c13 13 33 13 46 0l466 -466c13 -13 13 -33 0 -46zM1651 96v-64c0 -18 -14 -32 -32 -32h-960c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h960
+c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="tex" unicode="&#xf35c;" horiz-adv-x="2304"
+d="M815 1255h-792l-23 -303h25c18 227 37 267 250 267h75c26 -4 27 -21 27 -53v-746c0 -50 -4 -65 -120 -65h-39v-33c66 1 135 2 202 2s135 -1 201 -2v33h-38c-114 0 -118 15 -118 65v746c0 30 0 47 25 53h75c210 0 230 -40 248 -267h25zM1504 370h-25
+c-30 -203 -48 -314 -289 -314h-191c-55 0 -57 7 -57 54v383h130c129 0 141 -47 141 -163h22v357h-22c0 -114 -12 -160 -141 -160h-130v339c0 46 2 54 57 54h188c212 0 237 -85 256 -266h25l-33 303h-695v-37c97 0 113 0 113 -62v-740c0 -62 -16 -62 -113 -62v-33h714z
+M1873 841l203 293c20 29 62 89 175 90v33c-31 -3 -84 -3 -117 -3c-45 0 -101 0 -135 3v-33c44 -4 54 -32 54 -54c0 -16 -6 -27 -16 -41l-181 -263l-203 298c-10 15 -11 19 -11 23c0 12 15 36 60 37v33c-44 -3 -111 -3 -156 -3c-36 0 -104 0 -137 3v-33c75 0 100 -3 130 -46
+l265 -388l-239 -349c-59 -85 -148 -87 -174 -87v-33c31 3 83 3 116 3c37 0 102 0 136 -3v33c-42 4 -55 32 -55 54c0 18 7 27 14 37l219 321l239 -351c11 -15 11 -20 11 -24c0 -11 -13 -34 -61 -37v-33c44 3 112 3 157 3c36 0 104 0 137 -3v33c-88 0 -102 7 -129 46z" />
+ <glyph glyph-name="text-height" unicode="&#xf034;" horiz-adv-x="1789"
+d="M1744 128c44 0 58 -28 31 -63l-126 -162c-27 -35 -71 -35 -98 0l-126 162c-27 35 -13 63 31 63h80v1024h-80c-44 0 -58 28 -31 63l126 162c27 35 71 35 98 0l126 -162c27 -35 13 -63 -31 -63h-80v-1024h80zM81 1407l54 -27c7 -3 190 -5 211 -5c88 0 176 4 264 4
+c72 0 143 -1 215 -1h293c40 0 63 -9 90 29l42 1c9 0 19 -1 28 -1c2 -112 2 -224 2 -336c0 -35 1 -74 -5 -109c-22 -8 -45 -15 -68 -18c-23 40 -39 84 -54 128c-7 20 -31 155 -33 157c-21 26 -44 21 -75 21c-91 0 -186 4 -276 -7c-5 -44 -9 -91 -8 -136c1 -281 4 -562 4 -843
+c0 -77 -12 -158 10 -232c76 -39 166 -45 244 -80c2 -16 5 -33 5 -50c0 -9 -1 -19 -3 -29l-34 -1c-142 -4 -282 18 -425 18c-101 0 -202 -18 -303 -18c-1 17 -3 35 -3 52v9c38 61 175 62 238 99c22 49 19 320 19 383c0 202 -6 404 -6 606v117c0 18 4 90 -8 104
+c-14 15 -145 12 -162 12c-37 0 -144 -17 -173 -38c-48 -33 -48 -233 -108 -237c-18 11 -43 27 -56 44v383z" />
+ <glyph glyph-name="text-width" unicode="&#xf035;"
+d="M81 1407l54 -27c7 -3 190 -5 211 -5c88 0 176 4 264 4c265 0 533 6 798 -3c22 -1 43 13 56 31l42 1c9 0 19 -1 28 -1c2 -112 2 -224 2 -336c0 -36 1 -74 -5 -109c-22 -8 -45 -15 -68 -18c-23 40 -39 84 -54 128c-7 20 -32 155 -33 157c-7 9 -16 15 -27 19
+c-8 3 -56 2 -66 2c-123 0 -265 7 -386 -7c-5 -44 -9 -91 -8 -136l1 -152v52c1 -163 3 -325 3 -487c0 -77 -12 -158 10 -232c76 -39 166 -45 244 -80c2 -16 5 -33 5 -50c0 -9 -1 -19 -3 -29l-34 -1c-142 -4 -282 18 -425 18c-101 0 -202 -18 -303 -18c-1 17 -3 35 -3 52v9
+c38 61 175 62 238 99c25 56 18 529 18 617c0 14 -5 29 -5 44c0 41 7 276 -8 293c-14 15 -145 12 -162 12c-42 0 -277 -22 -301 -38c-47 -31 -48 -232 -108 -237c-18 11 -43 27 -56 44v383zM1310 125c35 0 168 -119 195 -140c15 -12 26 -29 26 -49s-11 -37 -26 -49
+c-27 -21 -160 -140 -195 -140c-46 0 -30 107 -30 125h-1024c0 -18 16 -125 -30 -125c-35 0 -168 119 -195 140c-15 12 -26 29 -26 49s11 37 26 49c27 21 160 140 195 140c46 0 30 -107 30 -125h1024c0 18 -16 125 30 125z" />
+ <glyph glyph-name="textpattern" unicode="&#xf35d;" horiz-adv-x="1779"
+d="M1567 -252c-8 2 -18 11 -58 55c-114 125 -270 285 -369 381c-84 82 -226 214 -230 214c-2 0 -122 -119 -268 -265c-190 -190 -267 -270 -275 -282c-6 -9 -14 -25 -18 -36c-6 -16 -12 -23 -31 -43c-13 -13 -24 -23 -26 -23c-5 0 -51 35 -84 63c-16 13 -38 36 -50 50
+c-28 32 -61 76 -63 84c-1 5 1 10 21 30c13 13 27 24 31 25s17 7 29 13l23 11l268 267c147 147 268 269 268 270s-24 28 -55 60c-62 64 -131 139 -193 208c-23 25 -45 48 -48 52l-6 6l-81 -80l-81 -81h-21h-21l-23 19c-72 60 -155 143 -196 198c-9 12 -10 14 -10 32v19
+l216 217c119 119 238 239 265 267l50 50h43l22 -18c58 -47 144 -133 192 -193l14 -18v-41l-80 -81c-44 -45 -81 -82 -81 -83s25 -24 56 -52c86 -78 163 -150 216 -202c27 -26 50 -47 52 -47c4 0 150 146 231 230c48 50 87 106 125 183l13 26l86 87c59 60 93 91 109 102
+c12 9 23 16 25 16s53 -50 114 -111c81 -81 110 -112 109 -115c-6 -17 -34 -48 -114 -128c-89 -90 -90 -90 -115 -103c-64 -32 -129 -74 -167 -108c-27 -24 -253 -252 -253 -255s108 -118 190 -205c103 -108 236 -238 391 -382c48 -44 67 -64 69 -70
+c10 -32 -32 -104 -92 -156c-48 -42 -92 -63 -119 -57zM261 -196c-6 7 -5 9 8 22c7 6 17 21 24 33s18 29 25 38s239 243 516 521c361 361 509 507 522 516c36 24 106 54 168 71c17 5 34 10 39 12c9 4 167 165 178 181c4 5 7 11 7 13s-43 47 -97 101l-98 98l-10 -5
+c-6 -3 -50 -45 -98 -93l-87 -87l-17 -30c-24 -46 -59 -104 -83 -136c-17 -23 -113 -121 -533 -541l-513 -512l-25 -13c-14 -7 -26 -12 -28 -12c-5 0 -36 -29 -36 -34c0 -7 44 -64 69 -89c12 -13 34 -31 46 -41c22 -17 32 -23 23 -13zM1683 -168c14 13 15 17 8 23
+c-3 3 -17 16 -32 28c-24 20 -85 80 -134 133c-16 17 -16 18 -5 8c7 -6 35 -32 61 -57c46 -44 90 -84 112 -103l10 -9l8 7c4 4 11 12 15 18l7 10l-49 51c-27 28 -50 52 -51 54s3 1 7 -3c39 -35 98 -86 100 -86c5 0 17 29 16 40c-1 10 -5 13 -71 75
+c-209 195 -362 350 -529 532l-11 12l-12 -4c-23 -7 -67 -40 -67 -51c0 -3 7 -13 15 -21l14 -15l-16 15c-13 12 -16 14 -20 12c-10 -6 -7 -14 19 -42c23 -26 19 -24 -14 7c-14 13 -14 13 -18 8c-7 -9 -4 -13 16 -31c24 -21 94 -96 91 -96c-1 0 -25 22 -53 49
+c-38 37 -51 48 -52 44c-2 -8 9 -21 48 -56c95 -88 145 -135 349 -340c121 -122 220 -221 223 -221s10 4 15 9zM1600 -32c-47 41 -400 390 -452 448c-4 5 -6 9 -5 9c5 0 53 -47 128 -125c42 -44 107 -108 143 -142c67 -63 220 -214 216 -214c-1 0 -15 11 -30 24zM1491 50
+c-3 4 -3 4 1 1s6 -6 4 -6c-1 0 -3 2 -5 5zM1544 79c-33 28 -52 46 -59 56l-5 7l9 -5c11 -7 53 -46 70 -66c7 -8 12 -15 12 -15s-12 10 -27 23zM1443 93c-28 24 -76 73 -91 93c-3 4 23 -21 59 -55s64 -62 64 -63c0 -2 -2 -1 -32 25zM1188 340c-42 43 -74 78 -78 84
+c-2 3 19 -19 47 -47c44 -45 65 -67 61 -67c-1 0 -14 13 -30 30zM1290 334c-13 15 -12 17 2 3c6 -6 10 -11 9 -12s-6 3 -11 9zM818 643c2 4 -10 18 -81 87c-151 148 -171 166 -172 165s1 -6 3 -11c5 -10 239 -245 244 -245c2 0 5 1 6 4zM831 659c0 2 -14 18 -32 35
+s-55 55 -82 84c-51 54 -149 149 -153 149c-3 0 -4 -10 -1 -14c7 -10 261 -258 264 -258c2 0 4 2 4 4zM844 669c6 6 3 12 -23 38c-28 29 -26 27 9 -4c12 -11 23 -19 25 -19c4 0 14 8 14 12c0 1 -22 25 -50 53s-56 58 -63 66c-17 21 51 -43 85 -79c14 -15 28 -30 31 -31
+c4 -2 7 0 17 9c7 6 12 13 12 15s-4 9 -8 14c-10 12 -8 14 3 3c5 -5 11 -8 13 -8c5 0 37 32 37 36c0 6 -237 232 -273 260l-8 6l-16 -9c-9 -5 -17 -11 -19 -14c-2 -4 9 -16 76 -83c43 -43 78 -79 77 -80c-2 -2 -93 84 -127 121c-18 19 -33 35 -35 35c-5 0 -25 -18 -25 -23
+c0 -2 24 -28 52 -56c47 -46 72 -73 67 -73c-1 0 -29 27 -62 59c-36 36 -62 58 -65 58s-6 -1 -7 -4c-1 -4 13 -20 60 -67c61 -61 80 -82 68 -76c-5 3 -49 44 -111 104c-20 19 -23 23 -27 20c-2 -2 -4 -6 -4 -9c0 -6 266 -278 271 -278c2 0 4 2 6 4zM258 751c4 6 -4 18 -18 26
+c-41 25 -97 73 -134 116c-32 37 -61 79 -60 87c2 9 208 224 323 336c102 99 177 170 180 170c4 0 44 -29 70 -51c34 -29 86 -84 113 -120c14 -18 25 -34 26 -36c1 -4 16 -10 18 -8c1 1 2 7 2 13c0 10 -2 14 -22 38c-41 50 -166 170 -189 182c-3 2 -10 3 -16 3
+c-10 0 -15 -5 -268 -260l-259 -260v-13c0 -13 0 -14 27 -45c45 -53 149 -154 181 -176c7 -5 23 -6 26 -2v0z" />
+ <glyph glyph-name="th" unicode="&#xf00a;" horiz-adv-x="1792"
+d="M512 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 288v-192c0 -53 -43 -96 -96 -96h-320
+c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96
+h320c53 0 96 -43 96 -96zM1792 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1152 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 800v-192
+c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="th-large" unicode="&#xf009;" horiz-adv-x="1664"
+d="M768 512v-384c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128zM768 1280v-384c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128zM1664 512v-384
+c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128zM1664 1280v-384c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128z" />
+ <glyph glyph-name="th-list" unicode="&#xf00b;" horiz-adv-x="1792"
+d="M512 288v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM512 800v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 288v-192c0 -53 -43 -96 -96 -96h-960
+c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h960c53 0 96 -43 96 -96zM512 1312v-192c0 -53 -43 -96 -96 -96h-320c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h320c53 0 96 -43 96 -96zM1792 800v-192c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v192c0 53 43 96 96 96
+h960c53 0 96 -43 96 -96zM1792 1312v-192c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h960c53 0 96 -43 96 -96z" />
<glyph glyph-name="themeisle" unicode="&#xf2b2;" horiz-adv-x="1792"
d="M852 1227c0 -36 -23 -76 -62 -76c-40 0 -62 40 -62 76c0 35 22 76 62 76c39 0 62 -41 62 -76zM688 -149v114c0 39 -31 73 -71 73s-70 -34 -70 -73v-114c0 -39 30 -74 70 -74s71 34 71 74zM860 -149v114c0 39 -30 73 -70 73s-71 -34 -71 -73v-114c0 -39 31 -74 71 -74
s70 35 70 74zM1034 -149v114c0 39 -31 73 -71 73s-71 -34 -71 -73v-114c0 -39 31 -74 71 -74s71 34 71 74zM1208 -149v114c0 39 -31 73 -71 73s-71 -34 -71 -73v-114c0 -39 31 -74 71 -74s71 35 71 74zM1476 535c-108 -207 -316 -359 -555 -359c-338 0 -562 296 -562 618
@@ -2326,397 +2835,377 @@ M1792 667c0 -126 -40 -358 -127 -454c-80 -87 -306 -214 -423 -247l-4 -1v-114c0 -57
c-57 -43 -125 -68 -198 -68c-77 0 -152 29 -211 80c36 1 72 8 106 20c-73 20 -138 66 -182 127c23 -5 47 -7 71 -7c58 0 115 16 164 46c-77 77 -198 206 -240 306c-20 47 -24 110 -24 160c0 174 71 560 302 560c37 0 66 -17 81 -52c13 19 27 37 42 54c7 9 20 19 25 29
c28 44 41 74 76 119c113 144 286 243 472 243c21 0 42 -1 62 -4c38 41 91 64 146 64c51 0 104 -21 140 -57c3 -3 5 -8 5 -12c0 -13 -36 -47 -45 -57c15 -5 55 -24 55 -42c0 -10 -10 -18 -16 -25c110 -97 173 -235 197 -378c15 18 36 30 60 30c37 0 73 -25 100 -49
c73 -65 90 -186 90 -279z" />
- <glyph glyph-name="braille" unicode="&#xf2a1;" horiz-adv-x="2176"
-d="M192 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM704 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM704 864c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160z
-M1472 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM1984 352c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM1472 864c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160z
-M1984 864c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM1984 1376c-88 0 -160 -72 -160 -160s72 -160 160 -160s160 72 160 160s-72 160 -160 160zM384 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192z
-M896 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM384 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM896 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192z
-M384 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM896 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192
-zM2176 192c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1664 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM2176 704c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192
-s192 -86 192 -192zM1664 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM2176 1216c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192z" />
- <glyph glyph-name="industry" unicode="&#xf275;" horiz-adv-x="1792"
-d="M448 1536c35 0 64 -29 64 -64v-891l536 429c11 9 26 14 40 14c35 0 64 -29 64 -64v-379l536 429c11 9 26 14 40 14c35 0 64 -29 64 -64v-1152c0 -35 -29 -64 -64 -64h-1664c-35 0 -64 29 -64 64v1664c0 35 29 64 64 64h384z" />
- <glyph glyph-name="map-o" unicode="&#xf278;" horiz-adv-x="2048"
-d="M2020 1525c17 -12 28 -32 28 -53v-1408c0 -26 -16 -50 -40 -59l-640 -256c-16 -7 -32 -7 -48 0l-616 246l-616 -246c-8 -4 -16 -5 -24 -5c-13 0 -25 4 -36 11c-17 12 -28 32 -28 53v1408c0 26 16 50 40 59l640 256c16 7 32 7 48 0l616 -246l616 246c20 8 42 6 60 -6z
-M736 1390v-1270l576 -230v1270zM128 1173v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
- <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792"
-d="M514 341l81 299h-159l75 -300c1 -2 1 -4 2 -6c0 2 1 5 1 7zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299c1 -3 1 -5 2 -7c0 2 1 4 1 6zM1382 768l33 128h-297l34 -128h230zM1792 736v-64c0 -18 -14 -32 -32 -32h-213
-l-164 -616c-4 -14 -17 -24 -31 -24h-159c-14 0 -27 10 -31 24l-166 616h-209l-167 -616c-4 -14 -16 -24 -31 -24h-159c-14 0 -27 10 -30 24l-160 616h-208c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h175l-33 128h-142c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h109l-89 344
-c-3 10 -1 20 5 28c6 7 16 12 26 12h137c15 0 28 -10 31 -24l90 -360h359l97 360c4 14 17 24 31 24h126c15 0 27 -10 31 -24l98 -360h365l93 360c3 14 16 24 31 24h137c10 0 20 -5 26 -12c6 -8 8 -19 5 -28l-91 -344h111c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-145
-l-34 -128h179c18 0 32 -14 32 -32z" />
- <glyph glyph-name="joomla" unicode="&#xf1aa;"
-d="M1070 463l-160 -160l-151 -152l-30 -30c-88 -87 -211 -117 -323 -89c-21 -92 -103 -160 -201 -160c-113 0 -205 92 -205 206c0 97 67 179 158 200c-29 113 1 237 89 325l12 12l151 -152l-11 -11c-50 -49 -49 -129 0 -179c49 -49 129 -49 178 0l30 30l151 152l161 160z
-M729 1145l12 -12l-152 -152l-12 12c-49 49 -129 49 -178 0s-49 -130 0 -179l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30c-92 91 -120 222 -85 339c-92 20 -160 102 -160 200c0 114 92 206 205 206c103 0 187 -75 203 -172c111 26 232 -5 319 -91z
-M1536 78c0 -114 -92 -206 -205 -206c-100 0 -183 71 -202 165c-116 -36 -249 -8 -341 84l-11 12l151 152l12 -12c49 -49 129 -49 178 0s49 129 0 178l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30c87 -87 118 -210 90 -322c100 -14 177 -99 177 -203z
-M1534 1202c0 -104 -78 -190 -178 -204c33 -115 4 -244 -87 -335l-12 -12l-151 152l12 12c49 49 49 129 0 178s-129 49 -178 0l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30c91 91 221 120 337 86c14 100 100 177 204 177c113 0 205 -92 205 -206z" />
- <glyph glyph-name="ethereum" unicode="&#xf2f3;" horiz-adv-x="1064"
-d="M1064 623l-532 -325l-532 325l532 913zM532 194l532 325l-532 -775l-532 775z" />
- <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408"
-d="M1408 800v-192c0 -53 -43 -96 -96 -96h-416v-416c0 -53 -43 -96 -96 -96h-192c-53 0 -96 43 -96 96v416h-416c-53 0 -96 43 -96 96v192c0 53 43 96 96 96h416v416c0 53 43 96 96 96h192c53 0 96 -43 96 -96v-416h416c53 0 96 -43 96 -96z" />
- <glyph glyph-name="list-ul" unicode="&#xf0ca;" horiz-adv-x="1792"
-d="M384 128c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM384 640c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1792 224v-192c0 -17 -15 -32 -32 -32h-1216c-17 0 -32 15 -32 32v192c0 17 15 32 32 32
-h1216c17 0 32 -15 32 -32zM384 1152c0 -106 -86 -192 -192 -192s-192 86 -192 192s86 192 192 192s192 -86 192 -192zM1792 736v-192c0 -17 -15 -32 -32 -32h-1216c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1216c17 0 32 -15 32 -32zM1792 1248v-192
-c0 -17 -15 -32 -32 -32h-1216c-17 0 -32 15 -32 32v192c0 17 15 32 32 32h1216c17 0 32 -15 32 -32z" />
- <glyph glyph-name="play-circle-o" unicode="&#xf01d;"
-d="M1184 640c0 -23 -12 -44 -32 -55l-544 -320c-10 -6 -21 -9 -32 -9s-22 3 -32 8c-20 12 -32 33 -32 56v640c0 23 12 44 32 56c20 11 45 11 64 -1l544 -320c20 -11 32 -32 32 -55zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544
-s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="joplin" unicode="&#xf310;"
-d="M288 1408h960c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288zM737 1171v-148l43 -1c59 -2 70 -6 81 -30c4 -10 5 -13 5 -296c0 -323 0 -323 -16 -362c-16 -38 -48 -69 -87 -83
-c-13 -5 -21 -5 -43 -6c-33 -1 -53 2 -80 15c-30 14 -50 37 -62 69c-9 24 -10 34 -12 88c-2 51 -1 56 -7 70c-9 23 -25 45 -40 56c-24 18 -49 24 -87 22c-40 -2 -68 -13 -95 -41c-23 -23 -35 -44 -44 -75c-4 -15 -5 -23 -5 -54c0 -38 1 -46 11 -79c26 -82 92 -156 178 -199
-c46 -23 85 -35 155 -44v0c20 -3 119 -3 142 0c87 10 150 32 208 71c73 49 127 125 142 199c8 40 9 47 10 343l1 291l6 13c6 15 15 24 29 28c5 2 28 3 52 4l43 1v74l-1 73l-263 1h-264z" />
- <glyph glyph-name="mars-stroke" unicode="&#xf229;"
-d="M1472 1408c35 0 64 -29 64 -64v-416c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v262l-213 -214l140 -140c12 -13 12 -33 0 -45l-46 -46c-12 -12 -32 -12 -45 0l-140 141l-78 -79c79 -98 126 -223 126 -359c0 -318 -258 -576 -576 -576s-576 258 -576 576
-s258 576 576 576c136 0 261 -47 359 -126l78 78l-172 172c-12 13 -12 33 0 45l46 46c12 12 32 12 45 0l172 -172l213 213h-261c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h416zM576 0c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
- <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1820"
-d="M1061 540v4l-24 320c-1 18 -17 32 -34 32h-186c-17 0 -33 -14 -34 -32l-24 -320v-4c-1 -16 14 -28 29 -28h244c15 0 30 12 29 28zM1820 73c0 -29 -8 -73 -46 -73h-704c17 0 31 14 30 32l-20 256c-1 18 -17 32 -34 32h-272c-17 0 -33 -14 -34 -32l-20 -256
-c-1 -18 13 -32 30 -32h-704c-38 0 -46 44 -46 73c0 40 11 80 26 116l417 1044c10 25 37 47 64 47h339c-17 0 -33 -14 -34 -32l-15 -192c-1 -18 12 -32 30 -32h166c18 0 31 14 30 32l-15 192c-1 18 -17 32 -34 32h339c27 0 54 -22 64 -47l417 -1044c15 -36 26 -76 26 -116z
+ <glyph glyph-name="thermometer-empty" unicode="&#xf2cb;" horiz-adv-x="1024"
+d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 105 85 192 192 192s192 -88 192 -192zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320s320 143 320 320zM896 192
+c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
+ <glyph glyph-name="thermometer-full" unicode="&#xf2c7;" horiz-adv-x="1024"
+d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v907h128v-907c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320
+s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z
" />
- <glyph glyph-name="volume-down" unicode="&#xf027;" horiz-adv-x="1152"
-d="M768 1184v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19c35 0 64 -29 64 -64zM1152 640c0 -100 -61 -197 -155 -235c-8 -4 -17 -5 -25 -5c-35 0 -64 28 -64 64
-c0 76 116 55 116 176s-116 100 -116 176c0 36 29 64 64 64c8 0 17 -1 25 -5c94 -37 155 -135 155 -235z" />
- <glyph glyph-name="question-circle" unicode="&#xf059;"
-d="M896 160v192c0 18 -14 32 -32 32h-192c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h192c18 0 32 14 32 32zM1152 832c0 183 -192 320 -364 320c-163 0 -285 -70 -371 -213c-9 -14 -5 -32 8 -42l132 -100c5 -4 12 -6 19 -6c9 0 19 4 25 12c47 60 67 78 86 92
-c17 12 50 24 86 24c64 0 123 -41 123 -85c0 -52 -27 -78 -88 -106c-71 -32 -168 -115 -168 -212v-36c0 -18 14 -32 32 -32h192c18 0 32 14 32 32c0 23 29 72 76 99c76 43 180 101 180 253zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768
-s768 -344 768 -768z" />
- <glyph glyph-name="paypal" unicode="&#xf1ed;" horiz-adv-x="1519"
-d="M1510 890c13 -60 10 -129 -4 -204c-65 -330 -284 -444 -565 -444h-44c-34 0 -62 -25 -68 -59l-4 -19l-55 -346l-2 -15c-7 -34 -35 -59 -69 -59h-251c-28 0 -46 23 -42 51c18 112 35 224 53 336s36 223 54 335c3 24 19 37 43 37c40 0 80 1 131 0c72 -1 155 3 236 21
-c108 24 206 68 287 144c73 68 122 152 155 246c15 44 27 88 35 133c2 12 5 10 12 5c55 -41 86 -96 98 -162zM1338 1172c0 -82 -19 -160 -46 -236c-52 -151 -150 -259 -302 -315c-81 -29 -166 -41 -252 -42c-60 -1 -120 0 -180 0c-65 0 -106 -32 -118 -96
-c-14 -76 -69 -430 -85 -530c-1 -7 -4 -10 -12 -10h-295c-30 0 -52 26 -48 55l232 1471c6 38 40 67 79 67h598c43 0 142 -19 209 -45c142 -55 220 -167 220 -319z" />
- <glyph glyph-name="child" unicode="&#xf1ae;" horiz-adv-x="1152"
-d="M1124 988l-292 -292v-824c0 -62 -50 -112 -112 -112s-112 50 -112 112v384h-64v-384c0 -62 -50 -112 -112 -112s-112 50 -112 112v824l-292 292c-37 38 -37 98 0 136c38 37 98 37 136 0l228 -228h368l228 228c38 37 98 37 136 0c37 -38 37 -98 0 -136zM800 1152
-c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224z" />
- <glyph glyph-name="fork-awesome" unicode="&#xf2e3;" horiz-adv-x="1533"
-d="M766 1404v0c423 0 767 -343 767 -766v-1v-2c0 -8 -1 -17 -1 -25v-2c-14 -388 -318 -703 -701 -735v1c-18 -2 -47 -2 -65 -2s-47 1 -65 3v-2c-383 32 -685 347 -700 735v2c0 8 -1 17 -1 25v2v1c0 423 343 766 766 766zM594 1085h-66c-35 -251 -54 -525 -29 -712
-s145 -157 181 -351c5 -29 10 -59 14 -89c20 -2 52 -4 72 -4s52 2 72 4c4 30 9 60 14 89c36 194 156 164 181 351s6 456 -28 712h-65c3 -190 12 -430 -8 -640c-8 -89 -103 -87 -108 0c-13 208 -15 428 -26 639h-64c-11 -211 -18 -431 -26 -643c-3 -82 -100 -81 -108 0
-c-19 208 -10 453 -6 644z" />
- <glyph glyph-name="angle-double-up" unicode="&#xf102;" horiz-adv-x="998"
-d="M998 224c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -14 -10 -23 -10c-8 0 -17 4 -23 10l-393 393l-393 -393c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23zM998 608
-c0 -8 -4 -17 -10 -23l-50 -50c-6 -6 -14 -10 -23 -10c-8 0 -17 4 -23 10l-393 393l-393 -393c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-50 50c-6 6 -10 15 -10 23s4 17 10 23l466 466c6 6 15 10 23 10s17 -4 23 -10l466 -466c6 -6 10 -15 10 -23z" />
- <glyph glyph-name="bath" unicode="&#xf2cd;" horiz-adv-x="1792"
-d="M1664 448v-192c0 -114 -50 -215 -128 -286v-194c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v118c-40 -14 -83 -22 -128 -22h-768c-45 0 -88 8 -128 22v-110c0 -22 -14 -40 -32 -40h-64c-18 0 -32 18 -32 40v186c-78 71 -128 172 -128 286v192h1536zM704 864
-c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM768 928c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM704 992c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM832 992c0 -18 -14 -32 -32 -32s-32 14 -32 32
-s14 32 32 32s32 -14 32 -32zM768 1056c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM704 1120c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM1792 608v-64c0 -18 -14 -32 -32 -32h-1728c-18 0 -32 14 -32 32v64c0 18 14 32 32 32
-h96v640c0 141 115 256 256 256c72 0 137 -30 184 -78c62 25 136 16 191 -27l22 22c6 6 16 6 22 0l42 -42c6 -6 6 -16 0 -22l-314 -314c-6 -6 -16 -6 -22 0l-42 42c-6 6 -6 16 0 22l22 22c-48 61 -54 145 -17 212c-23 22 -54 35 -88 35c-71 0 -128 -57 -128 -128v-640h1504
-c18 0 32 -14 32 -32zM896 1056c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM832 1120c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM768 1184c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM960 1120
-c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM896 1184c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM832 1248c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM1024 1184c0 -18 -14 -32 -32 -32s-32 14 -32 32
-s14 32 32 32s32 -14 32 -32zM960 1248c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32zM1088 1248c0 -18 -14 -32 -32 -32s-32 14 -32 32s14 32 32 32s32 -14 32 -32z" />
- <glyph glyph-name="reply-all" unicode="&#xf122;" horiz-adv-x="1792"
-d="M640 454v-70c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-512 512c-25 25 -25 65 0 90l512 512c18 19 46 24 70 14c23 -10 39 -33 39 -59v-69l-397 -398c-25 -25 -25 -65 0 -90zM1792 416c0 -208 -157 -514 -164 -527c-5 -11 -16 -17 -28 -17
-c-3 0 -6 0 -9 1c-15 5 -24 19 -23 34c29 273 -5 453 -106 565c-85 95 -223 146 -438 163v-251c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-512 512c-25 25 -25 65 0 90l512 512c18 19 46 24 70 14c23 -10 39 -33 39 -59v-262c276 -19 473 -92 599 -221
-c151 -155 169 -365 169 -509z" />
- <glyph glyph-name="patreon" unicode="&#xf2f0;"
-d="M985 1341c-305 0 -553 -248 -553 -553c0 -304 248 -551 553 -551c304 0 551 247 551 551c0 305 -247 553 -551 553zM270 -132h-270v1473h270v-1473z" />
- <glyph glyph-name="inbox" unicode="&#xf01c;"
-d="M1023 576h316c-2 5 -3 11 -5 16l-212 496h-708l-212 -496c-2 -5 -3 -11 -5 -16h316l95 -192h320zM1536 546v-482c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v482c0 36 11 89 25 123l238 552c14 33 54 59 89 59h832c35 0 75 -26 89 -59l238 -552
-c14 -34 25 -87 25 -123z" />
- <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280"
-d="M1280 480c0 -53 -43 -96 -96 -96c-32 0 -62 16 -80 43l-227 341h-45v-132l247 -411c6 -10 9 -21 9 -33c0 -35 -29 -64 -64 -64h-192v-272c0 -62 -50 -112 -112 -112h-160c-61 0 -112 50 -112 112v272h-192c-35 0 -64 29 -64 64c0 12 3 23 9 33l247 411v132h-45l-227 -341
-c-18 -27 -48 -43 -80 -43c-53 0 -96 43 -96 96c0 19 6 38 16 53l256 384c40 59 102 107 176 107h384c74 0 136 -48 176 -107l256 -384c10 -15 16 -34 16 -53zM864 1280c0 -124 -100 -224 -224 -224s-224 100 -224 224s100 224 224 224s224 -100 224 -224z" />
- <glyph glyph-name="gavel" unicode="&#xf0e3;" horiz-adv-x="1731"
-d="M1731 0c0 -34 -14 -67 -37 -90l-107 -108c-24 -23 -57 -37 -91 -37s-67 14 -90 37l-363 364c-24 23 -38 56 -38 90c0 38 16 69 43 96l-256 256l-126 -126c-9 -9 -21 -14 -34 -14s-25 5 -34 14c30 -30 58 -52 58 -98c0 -26 -10 -49 -28 -68c-34 -36 -70 -84 -124 -84
-c-25 0 -50 10 -68 28l-408 408c-18 18 -28 43 -28 68c0 54 48 90 84 124c19 18 42 28 68 28c46 0 68 -28 98 -58c-9 9 -14 21 -14 34s5 25 14 34l348 348c9 9 21 14 34 14s25 -5 34 -14c-30 30 -58 52 -58 98c0 26 10 49 28 68c34 36 70 84 124 84c25 0 50 -10 68 -28
-l408 -408c18 -18 28 -43 28 -68c0 -54 -48 -90 -84 -124c-19 -18 -42 -28 -68 -28c-46 0 -68 28 -98 58c9 -9 14 -21 14 -34s-5 -25 -14 -34l-126 -126l256 -256c27 27 58 43 96 43c34 0 67 -14 91 -37l363 -363c23 -24 37 -57 37 -91z" />
- <glyph glyph-name="jsfiddle" unicode="&#xf1cc;" horiz-adv-x="2048"
-d="M1800 764c145 -60 248 -202 248 -367c0 -219 -181 -397 -403 -397c-8 0 -15 1 -22 1h-1217c-224 13 -406 184 -406 406c0 149 81 279 202 350c-8 26 -12 53 -12 82c0 153 125 277 281 277c64 0 124 -22 172 -58c98 202 306 342 549 342c337 0 609 -269 609 -600
-c0 -12 -1 -24 -1 -36zM468 498c0 -169 133 -264 292 -264c98 0 169 31 240 99c-29 36 -61 71 -91 107c-41 -40 -86 -65 -144 -65c-71 0 -132 47 -132 121c0 73 61 121 130 121c220 0 267 -384 587 -384c156 0 288 98 288 262c0 166 -133 263 -291 263
-c-98 0 -171 -28 -241 -97c32 -35 62 -72 93 -108c40 39 85 64 142 64c66 0 132 -47 132 -117c0 -77 -56 -126 -131 -126c-213 0 -270 384 -582 384c-155 0 -292 -95 -292 -260z" />
- <glyph glyph-name="git" unicode="&#xf1d3;" horiz-adv-x="1656"
-d="M527 22c0 88 -97 100 -165 100c-71 0 -158 -15 -158 -104c0 -90 103 -101 172 -101c73 0 151 18 151 105zM468 777c0 75 -36 143 -119 143c-92 0 -124 -61 -124 -145c0 -83 36 -135 124 -135c87 0 119 56 119 137zM737 1101v-202c-26 -9 -52 -16 -79 -22
-c10 -27 16 -55 16 -84c0 -169 -104 -298 -270 -329c-50 -10 -79 -31 -79 -85c0 -153 404 -49 404 -331c0 -229 -155 -304 -363 -304c-171 0 -366 57 -366 263c0 120 73 189 182 225v4c-46 28 -67 72 -67 126c0 51 11 114 63 137v4c-101 34 -167 173 -167 274
-c0 187 145 324 330 324c62 0 124 -16 178 -47c75 0 149 20 218 47zM1055 220h-222c4 45 4 89 4 134v609c0 43 1 86 -4 128h222c-5 -41 -4 -83 -4 -124v-613c0 -45 0 -89 4 -134zM1656 442v-196c-53 -29 -114 -39 -174 -39c-214 0 -239 169 -239 343v351h2v4
-c-13 0 -25 2 -37 2c-20 0 -40 -3 -59 -6v190h96v76c0 30 -1 60 -6 89h227c-8 -55 -6 -110 -6 -165h171v-190c-29 0 -58 4 -86 4h-85v-365c0 -59 13 -131 87 -131c39 0 77 11 109 33zM1080 1389c0 -75 -58 -145 -135 -145c-79 0 -138 69 -138 145c0 77 58 147 138 147
-c79 0 135 -72 135 -147z" />
- <glyph glyph-name="signalapp" unicode="&#xf30c;" horiz-adv-x="1652"
-d="M710 1400c32 4 84 8 116 8v0c27 0 53 -2 80 -4l-3 -42c-21 2 -56 3 -77 3c-31 0 -81 -3 -111 -7zM977 1351l8 43c54 -10 138 -36 188 -58l-17 -39c-48 21 -128 45 -179 54zM446 1321c49 24 133 54 186 66l10 -42c-51 -11 -130 -39 -177 -62zM1223 1264l21 37
-c48 -27 120 -78 160 -115l-29 -32c-38 35 -106 85 -152 110zM222 1161c39 39 108 93 155 122l22 -36c-44 -27 -110 -79 -147 -116l-30 30v0zM1427 1101l32 28c37 -41 87 -114 112 -163l-38 -20c-24 46 -71 116 -106 155v0zM65 934c23 50 69 125 104 168l33 -27
-c-33 -40 -77 -112 -98 -159zM1564 878l39 15c20 -52 41 -138 46 -193l-43 -4c-5 52 -23 133 -42 182zM0 664c3 55 19 143 36 196l41 -14c-16 -49 -32 -132 -34 -184zM1582 436c14 50 26 133 27 185h43c-1 -55 -14 -144 -29 -197zM-0 585l43 2c2 -70 10 -131 23 -187l-42 -11
-c-14 59 -22 123 -24 196zM1464 203c32 41 73 114 93 162l40 -16c-21 -51 -66 -128 -99 -172zM47 313l40 15c22 -60 52 -113 92 -160l-33 -28c-43 51 -75 108 -99 173v0zM1273 26c44 28 107 82 143 120l31 -29c-37 -40 -105 -97 -151 -127zM202 82l28 32
-c12 -11 34 -28 47 -38c4 -3 6 -7 7 -11l40 -125l-41 -13l-37 118c-13 10 -32 26 -44 37v0zM1033 -80c50 13 129 44 175 68l20 -39c-48 -25 -131 -56 -184 -70zM644 -86c2 1 7 2 9 2s3 -1 5 -1c17 -5 31 -8 42 -11l-9 -42c-10 2 -27 7 -37 10l-128 -57l-18 40l136 59v0z
-M826 -106c45 0 90 4 134 11l7 -42c-39 -6 -102 -12 -141 -12c-22 0 -40 0 -55 1l2 43c15 -1 31 -1 53 -1v0zM357 -256v0v0c-9 0 -17 7 -20 15l-30 93l41 13l23 -70l67 29l17 -39l-89 -39c-2 -1 -7 -2 -9 -2zM442 -65c-11 0 -21 8 -22 19l-16 213c-70 53 -124 122 -161 204
-c-37 81 -56 171 -56 268c0 332 292 602 651 602s651 -270 651 -602s-292 -602 -651 -602c-60 0 -119 8 -176 23l-209 -123c-3 -2 -7 -2 -11 -2v0z" />
- <glyph glyph-name="share-square" unicode="&#xf14d;"
-d="M1005 435l352 352c25 25 25 65 0 90l-352 352c-18 19 -46 24 -69 14c-24 -10 -40 -33 -40 -59v-160c-574 0 -640 -329 -640 -576c0 -201 161 -396 167 -404c7 -8 16 -12 25 -12c4 0 9 1 13 3c13 5 21 19 19 33c-30 241 -11 391 62 473c61 69 167 99 354 99v-160
-c0 -26 16 -49 40 -59c7 -3 16 -5 24 -5c17 0 33 7 45 19zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
<glyph glyph-name="thermometer-half" unicode="&#xf2c9;" horiz-adv-x="1024"
d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v395h128v-395c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320
s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z
" />
- <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="924"
-d="M608 280v-240c0 -22 -18 -40 -40 -40h-240c-22 0 -40 18 -40 40v240c0 22 18 40 40 40h240c22 0 40 -18 40 -40zM924 880c0 -190 -129 -263 -224 -316c-59 -34 -96 -103 -96 -132c0 -22 -17 -48 -40 -48h-240c-22 0 -36 34 -36 56v45c0 121 120 225 208 265
-c77 35 109 68 109 132c0 56 -73 106 -154 106c-45 0 -86 -14 -108 -29c-24 -17 -48 -41 -107 -115c-8 -10 -20 -16 -31 -16c-9 0 -17 3 -25 8l-164 125c-17 13 -21 35 -10 53c108 179 260 266 464 266c214 0 454 -171 454 -400z" />
- <glyph glyph-name="low-vision" unicode="&#xf2a8;" horiz-adv-x="1792"
-d="M335 180c-2 0 -4 1 -6 2c-117 78 -234 206 -308 325c-14 20 -21 44 -21 69c0 52 36 94 65 133c116 158 271 288 452 365c-15 27 -110 193 -110 211c0 12 7 23 17 29c20 11 110 64 128 64c11 0 22 -6 28 -16l124 -229c63 13 128 19 192 19c362 0 684 -205 876 -507
-c13 -20 20 -44 20 -69s-7 -49 -20 -69c-119 -187 -293 -342 -497 -429c15 -27 110 -193 110 -211c0 -12 -6 -23 -17 -29c-20 -11 -110 -64 -127 -64c-12 0 -23 6 -29 16l-124 229l-64 119l-444 820l7 7c-34 -14 -67 -29 -99 -47c12 -23 489 -899 489 -906c0 -5 -4 -8 -9 -9
-c-22 -5 -50 -3 -72 -3c-11 0 -56 -2 -60 7l-456 841c-29 -21 -56 -44 -82 -68c22 -39 404 -742 404 -748c0 -8 -5 -10 -11 -10c-17 0 -150 41 -155 50l-106 197l-224 413c-28 -34 -54 -69 -78 -106c13 -19 30 -39 41 -59c14 -26 176 -321 176 -327c0 -5 -5 -10 -10 -10z
-M1165 282l49 -91c187 76 341 216 450 385c-111 171 -269 313 -459 389c89 -85 139 -202 139 -325c0 -141 -66 -274 -179 -358zM848 896c0 -26 22 -48 48 -48c55 0 108 -22 147 -61s61 -92 61 -147c0 -26 22 -48 48 -48s48 22 48 48c0 168 -136 304 -304 304
-c-26 0 -48 -22 -48 -48zM1214 961l-9 4l7 -7z" />
- <glyph glyph-name="wordpress" unicode="&#xf19a;" horiz-adv-x="1792"
-d="M127 640c0 111 24 217 67 313l367 -1005c-257 125 -434 388 -434 692zM1415 679c0 -66 -27 -142 -59 -249l-76 -256l-278 826s46 3 88 8c41 5 36 66 -5 63c-125 -9 -205 -10 -205 -10s-75 1 -202 10c-42 3 -47 -60 -5 -63c39 -4 80 -8 80 -8l120 -328l-168 -504l-280 832
-s46 3 88 8c41 5 36 66 -5 63c-124 -9 -205 -10 -205 -10c-14 0 -31 1 -49 1c137 209 373 347 642 347c200 0 382 -77 519 -202h-10c-75 0 -129 -65 -129 -136c0 -63 37 -116 76 -180c30 -51 63 -117 63 -212zM909 573l237 -647c1 -4 3 -8 5 -11c-80 -28 -165 -44 -255 -44
-c-75 0 -148 11 -217 32zM1570 1009c60 -110 95 -235 95 -369c0 -284 -154 -531 -383 -664l235 678c39 112 59 198 59 276c0 28 -2 54 -6 79zM896 1536c494 0 896 -402 896 -896s-402 -896 -896 -896s-896 402 -896 896s402 896 896 896zM896 -215c471 0 855 384 855 855
-s-384 855 -855 855s-855 -384 -855 -855s384 -855 855 -855z" />
- <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024"
-d="M0 -126l17 85c64 20 133 28 193 59c23 29 34 66 41 101c13 68 231 1049 228 1129v25c-55 30 -122 22 -182 32l19 103c129 -6 260 -16 390 -16c106 0 212 10 318 16c-4 -30 -11 -60 -19 -89c-69 -24 -142 -35 -210 -62c-22 -54 -27 -113 -37 -170
-c-48 -259 -112 -518 -165 -775c-10 -48 -59 -247 -55 -289l1 -18c61 -14 123 -21 185 -31c-2 -33 -8 -66 -16 -99c-22 0 -43 -3 -65 -3c-57 0 -116 19 -173 20c-69 1 -138 2 -206 2c-89 0 -176 -15 -264 -20z" />
- <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1542"
-d="M45 -115c-25 -25 -45 -16 -45 19v1472c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v710c0 35 20 44 45 19l710 -710c25 -25 25 -65 0 -90l-710 -710c-25 -25 -45 -16 -45 19v710c-3 -7 -7 -13 -13 -19z" />
- <glyph glyph-name="steam-square" unicode="&#xf1b7;"
-d="M1242 889c0 106 -87 193 -194 193c-106 0 -193 -87 -193 -193c0 -107 87 -193 193 -193c107 0 194 86 194 193zM632 301c0 -110 -88 -198 -198 -198c-76 0 -142 43 -175 106c33 -13 65 -26 98 -40c80 -32 172 7 205 88c32 80 -7 172 -88 204l-82 33c13 3 28 5 42 5
-c110 0 198 -88 198 -198zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v153l172 -69c26 -121 134 -212 262 -212c140 0 255 107 268 243l345 252c200 0 361 162 361 360c0 200 -161 361 -361 361c-197 0 -358 -160 -360 -357l-225 -322
-c-9 1 -18 1 -28 1c-50 0 -97 -13 -137 -37l-297 119v468c0 159 129 288 288 288h960c159 0 288 -129 288 -288zM1289 887c0 -133 -108 -241 -242 -241c-133 0 -241 108 -241 241c0 134 108 242 241 242c134 0 242 -108 242 -242z" />
- <glyph glyph-name="medium-square" unicode="&#xf2f8;"
-d="M0 1404h1536v-1536h-1536v1536zM257 1057v-17l97 -116c7 -7 13 -20 13 -30v-4v-456v-9c0 -12 -6 -28 -14 -36l-109 -132v-17h308v17l-109 132c-9 9 -15 26 -15 38v7v395l270 -589h31l232 589v-469c0 -13 0 -16 -8 -24l-84 -80v-18h405v18l-80 79c-5 4 -10 12 -10 19
-c0 1 1 3 1 4v580c0 1 -1 3 -1 4c0 7 5 15 10 19l82 79v17h-285l-203 -507l-232 507h-299z" />
- <glyph glyph-name="sort-numeric-desc" unicode="&#xf163;" horiz-adv-x="1454"
-d="M1314 1247c0 82 -67 169 -147 169c-70 0 -114 -57 -114 -131c0 -72 46 -133 141 -133c65 0 120 39 120 95zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192
-c18 0 32 -14 32 -32v-1376h192c18 0 32 -14 32 -32zM1424 -142v-114h-469v114h167v432c0 13 1 26 1 36v16h-2l-7 -12c-5 -8 -13 -18 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1454 1189c0 -202 -110 -421 -348 -421c-45 0 -82 7 -108 16c-16 5 -30 10 -42 15l39 113
-c9 -4 20 -8 31 -11c20 -7 46 -13 75 -13c120 0 182 100 201 204h-2c-28 -30 -87 -51 -146 -51c-145 0 -240 114 -240 244c0 138 106 251 253 251c159 0 287 -130 287 -347z" />
- <glyph glyph-name="video-camera" unicode="&#xf03d;" horiz-adv-x="1792"
-d="M1792 1184v-1088c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-403 403v-166c0 -159 -129 -288 -288 -288h-704c-159 0 -288 129 -288 288v704c0 159 129 288 288 288h704c159 0 288 -129 288 -288v-165l403 402c12 13 28 19 45 19c8 0 17 -2 25 -5
-c23 -10 39 -33 39 -59z" />
- <glyph glyph-name="thumbs-down" unicode="&#xf165;" horiz-adv-x="1600"
-d="M256 960c0 36 -29 64 -64 64c-36 0 -64 -28 -64 -64c0 -35 28 -64 64 -64c35 0 64 29 64 64zM416 448c0 -35 -29 -64 -64 -64h-288c-35 0 -64 29 -64 64v640c0 35 29 64 64 64h288c35 0 64 -29 64 -64v-640zM1545 597c34 -38 55 -96 55 -149c-1 -104 -88 -192 -192 -192
-h-277c8 -32 18 -42 29 -64c26 -52 56 -110 56 -192c0 -77 0 -256 -224 -256c-17 0 -33 7 -45 19c-43 42 -55 104 -66 163c-12 58 -23 118 -62 157c-31 31 -65 74 -101 120c-44 58 -140 177 -177 180c-33 3 -61 31 -61 64v641c0 35 30 63 64 64c35 1 95 22 158 44
-c108 37 243 84 386 84h129c88 -1 154 -27 197 -78c38 -45 55 -106 49 -181c25 -24 44 -57 54 -94c11 -40 11 -80 0 -117c30 -40 45 -87 43 -137c0 -14 -4 -44 -15 -76z" />
- <glyph glyph-name="medium" unicode="&#xf23a;"
-d="M182 999v6c0 15 -8 34 -19 44l-144 173v26h446l344 -755l302 755h425v-26l-123 -117c-8 -6 -14 -19 -14 -29c0 -2 1 -4 1 -6v-864c0 -2 -1 -4 -1 -6c0 -10 6 -23 14 -29l120 -117v-26h-602v26l124 120c12 12 12 16 12 35v698l-345 -876h-47l-401 876v-587
-c0 -3 -1 -8 -1 -11c0 -18 10 -44 23 -57l162 -195v-26h-458v26l161 195c12 13 22 38 22 55c0 4 0 9 -1 13v679z" />
- <glyph glyph-name="chevron-right" unicode="&#xf054;" horiz-adv-x="1036"
-d="M1017 659l-742 -742c-25 -25 -65 -25 -90 0l-166 166c-25 25 -25 65 0 90l531 531l-531 531c-25 25 -25 65 0 90l166 166c25 25 65 25 90 0l742 -742c25 -25 25 -65 0 -90z" />
- <glyph glyph-name="bus" unicode="&#xf207;"
-d="M384 320c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1408 320c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128s128 57 128 128zM1362 716l-72 384c-6 30 -32 52 -63 52h-918c-31 0 -57 -22 -63 -52l-72 -384
-c-7 -40 23 -76 63 -76h1062c40 0 70 36 63 76zM1136 1328c0 27 -21 48 -48 48h-640c-26 0 -48 -21 -48 -48s22 -48 48 -48h640c27 0 48 21 48 48zM1536 603v-603h-128v-128c0 -71 -57 -128 -128 -128s-128 57 -128 128v128h-768v-128c0 -71 -57 -128 -128 -128
-s-128 57 -128 128v128h-128v603c0 82 7 143 25 223l103 454c19 160 299 256 640 256s621 -96 640 -256l105 -454c18 -80 23 -141 23 -223z" />
- <glyph glyph-name="registered" unicode="&#xf25d;" horiz-adv-x="1792"
-d="M1042 833c0 58 -20 99 -60 121c-20 11 -48 18 -117 18h-123v-281h162c88 0 138 52 138 142zM1094 548l205 -373c5 -10 5 -22 -1 -31c-5 -10 -16 -16 -27 -16h-152c-12 0 -23 6 -28 17l-194 365h-155v-350c0 -18 -14 -32 -32 -32h-134c-18 0 -32 14 -32 32v960
-c0 18 14 32 32 32h294c105 0 151 -9 190 -24c113 -42 183 -153 183 -289c0 -123 -61 -227 -158 -275c3 -5 6 -10 9 -16zM896 1376c-406 0 -736 -330 -736 -736s330 -736 736 -736s736 330 736 736s-330 736 -736 736zM1792 640c0 -495 -401 -896 -896 -896
-s-896 401 -896 896s401 896 896 896s896 -401 896 -896z" />
- <glyph glyph-name="mars" unicode="&#xf222;"
-d="M1472 1408c35 0 64 -29 64 -64v-416c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v262l-382 -383c79 -98 126 -223 126 -359c0 -318 -258 -576 -576 -576s-576 258 -576 576s258 576 576 576c136 0 261 -47 359 -126l382 382h-261c-18 0 -32 14 -32 32v64
-c0 18 14 32 32 32h416zM576 0c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
- <glyph glyph-name="hand-rock-o" unicode="&#xf255;"
-d="M768 1152c-71 0 -128 -57 -128 -128v-128h-32v93c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-429l-32 30v172c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-224c0 -31 13 -60 35 -82l310 -296c29 -29 39 -62 39 -102c0 -35 29 -64 64 -64h640
-c35 0 64 29 64 64v25c0 26 3 52 10 77l108 436c7 25 10 51 10 77v246c0 63 -48 115 -112 115c-62 0 -112 -50 -112 -112v-32h-32v125c0 53 -36 102 -89 113c-7 1 -15 2 -23 2c-62 0 -112 -50 -112 -112v-128h-32v122c0 67 -48 126 -115 133c-5 1 -9 1 -13 1zM768 1280
-c54 0 106 -17 149 -50c37 22 80 34 123 34c79 0 152 -38 197 -103c19 5 39 7 59 7c134 0 240 -110 240 -243v-246c0 -36 -5 -73 -13 -108l-109 -436c-6 -24 -6 -47 -6 -71c0 -106 -86 -192 -192 -192h-640c-114 0 -192 91 -192 201l-308 296c-47 45 -76 109 -76 175v224
-c0 132 108 240 240 240c6 0 11 0 16 -1c8 127 114 225 240 225c34 0 67 -7 98 -21c47 45 109 69 174 69z" />
- <glyph glyph-name="window-close" unicode="&#xf2d3;" horiz-adv-x="1792"
-d="M1175 215l146 146c13 13 13 33 0 46l-233 233l233 233c13 13 13 33 0 46l-146 146c-13 13 -33 13 -46 0l-233 -233l-233 233c-13 13 -33 13 -46 0l-146 -146c-13 -13 -13 -33 0 -46l233 -233l-233 -233c-13 -13 -13 -33 0 -46l146 -146c13 -13 33 -13 46 0l233 233
-l233 -233c13 -13 33 -13 46 0zM1792 1248v-1216c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
- <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1632"
-d="M1440 320c0 26 -10 50 -28 68l-208 208c-18 18 -43 28 -68 28c-29 0 -52 -11 -72 -32c33 -33 72 -61 72 -112c0 -53 -43 -96 -96 -96c-51 0 -79 39 -112 72c-21 -20 -33 -43 -33 -73c0 -25 10 -50 28 -68l206 -207c18 -18 43 -27 68 -27s50 9 68 26l147 146
-c18 18 28 42 28 67zM737 1025c0 25 -10 50 -28 68l-206 207c-18 18 -43 28 -68 28s-50 -10 -68 -27l-147 -146c-18 -18 -28 -42 -28 -67c0 -26 10 -50 28 -68l208 -208c18 -18 43 -27 68 -27c29 0 52 10 72 31c-33 33 -72 61 -72 112c0 53 43 96 96 96c51 0 79 -39 112 -72
-c21 20 33 43 33 73zM1632 320c0 -76 -31 -150 -85 -203l-147 -146c-54 -54 -127 -83 -203 -83c-77 0 -150 30 -204 85l-206 207c-54 54 -83 127 -83 203c0 79 32 154 88 209l-88 88c-55 -56 -129 -88 -208 -88c-76 0 -150 30 -204 84l-208 208c-55 55 -84 127 -84 204
-c0 76 31 150 85 203l147 146c54 54 127 83 203 83c77 0 150 -30 204 -85l206 -207c54 -54 83 -127 83 -203c0 -79 -32 -154 -88 -209l88 -88c55 56 129 88 208 88c76 0 150 -30 204 -84l208 -208c55 -55 84 -127 84 -204z" />
- <glyph glyph-name="window-minimize" unicode="&#xf2d1;" horiz-adv-x="1792"
-d="M1792 224v-192c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v192c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
- <glyph glyph-name="eyedropper" unicode="&#xf1fb;" horiz-adv-x="1792"
-d="M1698 1442c125 -125 126 -328 0 -452l-225 -223l104 -104c13 -13 13 -33 0 -46l-210 -210c-13 -13 -33 -13 -46 0l-105 105l-603 -603c-24 -24 -56 -37 -90 -37h-203l-256 -128l-64 64l128 256v203c0 34 13 66 37 90l603 603l-105 105c-13 13 -13 33 0 46l210 210
-c13 13 33 13 46 0l104 -104l223 225c124 126 327 125 452 0zM512 64l576 576l-192 192l-576 -576v-192h192z" />
- <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1600"
-d="M1600 576c0 -35 -29 -64 -64 -64h-224c0 -125 -27 -219 -67 -290l208 -209c25 -25 25 -65 0 -90c-12 -13 -29 -19 -45 -19s-33 6 -45 19l-198 197s-131 -120 -301 -120v896h-128v-896c-181 0 -313 132 -313 132l-183 -207c-13 -14 -30 -21 -48 -21c-15 0 -30 5 -43 16
-c-26 24 -28 64 -5 91l202 227c-35 69 -58 158 -58 274h-224c-35 0 -64 29 -64 64s29 64 64 64h224v294l-173 173c-25 25 -25 65 0 90s65 25 90 0l173 -173h844l173 173c25 25 65 25 90 0s25 -65 0 -90l-173 -173v-294h224c35 0 64 -29 64 -64zM1120 1152h-640
-c0 177 143 320 320 320s320 -143 320 -320z" />
- <glyph glyph-name="angellist" unicode="&#xf209;" horiz-adv-x="1258"
-d="M942 1158l-114 -328l117 -21c30 82 165 451 165 518c0 25 -8 56 -38 56c-56 0 -116 -182 -130 -225zM643 471c11 -29 23 -58 33 -88c22 25 45 48 71 67c-35 7 -70 10 -104 21zM351 1367c0 -102 121 -420 159 -521c14 8 32 10 49 10c24 0 51 -3 75 -5l-121 351
-c-13 38 -71 220 -123 220c-27 0 -39 -32 -39 -55zM272 608c0 -73 196 -342 269 -342c20 0 37 22 37 40c0 23 -23 80 -32 102c-26 67 -121 274 -203 274c-27 0 -71 -47 -71 -74zM114 273c0 -36 12 -71 25 -104c79 -195 257 -309 465 -309c152 0 280 58 382 170
-c108 120 152 268 152 427c0 56 1 145 -43 185c-84 74 -369 102 -482 102c-14 0 -38 -1 -49 -11c-12 -5 -12 -24 -12 -35c0 -153 323 -139 420 -139c19 0 28 -5 40 -19c13 -16 17 -35 19 -55c-26 -26 -62 -41 -96 -54c-33 -12 -65 -25 -93 -46c-77 -56 -153 -152 -153 -251
-c0 -62 37 -115 37 -176c0 -1 -7 -23 -7 -26c-114 8 -142 121 -146 216c-12 -3 -28 -2 -41 -2c2 -7 2 -14 2 -21c0 -73 -65 -126 -135 -126c-108 0 -251 127 -251 237c0 30 13 47 33 67c20 -25 41 -50 60 -76c29 -39 79 -104 133 -104c14 0 41 12 41 29
-c0 45 -164 256 -204 256c-63 0 -97 -83 -97 -135zM0 264c0 130 50 216 179 251c-11 29 -28 73 -28 104c0 82 101 184 183 184c24 0 48 -7 70 -15c-42 119 -163 454 -163 567c0 101 51 181 160 181c140 0 299 -504 333 -604c44 110 182 571 338 571c98 0 153 -78 153 -171
-c0 -106 -118 -436 -159 -550c168 -41 192 -177 192 -328c0 -400 -255 -710 -668 -710c-76 0 -151 15 -223 42c-190 72 -367 267 -367 478z" />
- <glyph glyph-name="chain-broken" unicode="&#xf127;" horiz-adv-x="1664"
-d="M439 265l-256 -256c-7 -6 -15 -9 -23 -9s-16 3 -23 9c-12 13 -12 33 0 46l256 256c13 12 33 12 46 0c12 -13 12 -33 0 -46zM608 224v-320c0 -18 -14 -32 -32 -32s-32 14 -32 32v320c0 18 14 32 32 32s32 -14 32 -32zM384 448c0 -18 -14 -32 -32 -32h-320
-c-18 0 -32 14 -32 32s14 32 32 32h320c18 0 32 -14 32 -32zM1648 320c0 -77 -30 -149 -85 -203l-147 -146c-54 -54 -126 -83 -203 -83s-150 30 -204 85l-334 335c-17 17 -30 36 -42 56l239 18l273 -274c36 -36 100 -37 136 -1l147 146c18 18 28 42 28 67c0 26 -10 50 -28 68
-l-274 275l18 239c20 -12 39 -25 56 -42l336 -336c54 -55 84 -127 84 -204zM1031 1044l-239 -18l-273 274c-18 18 -42 28 -68 28s-50 -10 -68 -27l-147 -146c-18 -18 -28 -42 -28 -67c0 -26 10 -50 28 -68l274 -274l-18 -240c-20 12 -39 25 -56 42l-336 336
-c-54 55 -84 127 -84 204s30 149 85 203l147 146c54 54 126 83 203 83s150 -30 204 -85l334 -335c17 -17 30 -36 42 -56zM1664 960c0 -18 -14 -32 -32 -32h-320c-18 0 -32 14 -32 32s14 32 32 32h320c18 0 32 -14 32 -32zM1120 1504v-320c0 -18 -14 -32 -32 -32
-s-32 14 -32 32v320c0 18 14 32 32 32s32 -14 32 -32zM1527 1353l-256 -256c-7 -6 -15 -9 -23 -9s-16 3 -23 9c-12 13 -12 33 0 46l256 256c13 12 33 12 46 0c12 -13 12 -33 0 -46z" />
- <glyph glyph-name="info" unicode="&#xf129;" horiz-adv-x="640"
-d="M640 192v-128c0 -35 -29 -64 -64 -64h-512c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h64v384h-64c-35 0 -64 29 -64 64v128c0 35 29 64 64 64h384c35 0 64 -29 64 -64v-576h64c35 0 64 -29 64 -64zM512 1344v-192c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v192
-c0 35 29 64 64 64h256c35 0 64 -29 64 -64z" />
- <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="956"
-d="M876 207l80 -237c-30 -45 -166 -96 -288 -98c-363 -6 -500 258 -500 444v544h-168v215c252 91 313 319 327 449c1 8 8 12 12 12h244v-424h333v-252h-334v-518c0 -70 26 -167 160 -164c44 1 103 14 134 29z" />
- <glyph glyph-name="line-chart" unicode="&#xf201;" horiz-adv-x="2048"
-d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435c0 -28 -34 -43 -55 -22l-121 121l-633 -633c-13 -13 -33 -13 -46 0l-233 233l-416 -416l-192 192l585 585c13 13 33 13 46 0l233 -233l464 464l-121 121c-21 21 -6 55 22 55h435c18 0 32 -14 32 -32z" />
- <glyph glyph-name="long-arrow-up" unicode="&#xf176;" horiz-adv-x="767"
-d="M765 1043c-5 -11 -16 -19 -29 -19h-224v-1248c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v1248h-224c-13 0 -24 7 -29 19s-3 25 5 35l350 384c6 6 14 10 23 10s18 -4 24 -10l355 -384c8 -10 10 -23 5 -35z" />
- <glyph glyph-name="simplybuilt" unicode="&#xf215;" horiz-adv-x="2048"
-d="M863 504c0 150 -121 271 -271 271c-149 0 -270 -121 -270 -271c0 -149 121 -270 270 -270c150 0 271 121 271 270zM1726 505c0 149 -121 270 -270 270c-150 0 -271 -121 -271 -270c0 -150 121 -271 271 -271c149 0 270 121 270 271zM2048 1314v-1348
-c0 -59 -48 -107 -108 -107h-1832c-60 0 -108 48 -108 107v1348c0 59 48 107 108 107h431c59 0 108 -48 108 -107v-161h754v161c0 59 49 107 108 107h431c60 0 108 -48 108 -107z" />
- <glyph glyph-name="trash" unicode="&#xf1f8;" horiz-adv-x="1408"
-d="M512 160v704c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-704c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM768 160v704c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-704c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1024 160v704c0 18 -14 32 -32 32h-64
-c-18 0 -32 -14 -32 -32v-704c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM480 1152h448l-48 117c-3 4 -12 10 -17 11h-317c-6 -1 -14 -7 -17 -11zM1408 1120v-64c0 -18 -14 -32 -32 -32h-96v-948c0 -110 -72 -204 -160 -204h-832c-88 0 -160 90 -160 200v952h-96
-c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h309l70 167c20 49 80 89 133 89h320c53 0 113 -40 133 -89l70 -167h309c18 0 32 -14 32 -32z" />
- <glyph glyph-name="free-code-camp" unicode="&#xf2c5;" horiz-adv-x="2304"
-d="M453 -101c0 -28 -25 -54 -53 -54c-4 0 -9 2 -13 3c-56 13 -128 97 -162 140c-156 197 -225 427 -225 676c0 232 70 431 213 614c33 43 131 156 189 156c25 0 51 -20 51 -46c0 -30 -44 -71 -63 -90c-55 -57 -106 -115 -147 -184c-85 -142 -119 -284 -119 -449
-c0 -177 33 -337 123 -491c38 -65 83 -119 136 -173c21 -23 70 -68 70 -102zM1796 33c0 -37 -25 -68 -64 -68h-1081c-35 0 -64 29 -64 64c0 37 25 68 64 68h1081c35 0 64 -29 64 -64zM1581 644c0 -84 -19 -162 -67 -233c-33 -49 -100 -112 -153 -139c-8 -5 -18 -10 -27 -10
-c-8 0 -23 9 -23 18c0 29 122 98 122 232c0 44 -11 93 -35 130c-7 10 -32 42 -46 42c-3 0 -3 -2 -3 -5c0 -24 15 -47 15 -72c0 -32 -39 -48 -66 -48c-47 0 -66 33 -66 76c0 29 3 59 3 88c0 21 -1 27 -10 46c-14 27 -60 82 -93 82c-9 0 -12 0 -12 -9c0 -14 32 -29 32 -80
-c0 -133 -183 -157 -183 -290c0 -60 8 -110 42 -160c21 -31 44 -49 79 -63c9 -3 18 -4 18 -15s-9 -16 -18 -16c-5 0 -28 9 -33 11c-154 56 -271 190 -271 358c0 199 239 373 239 564c0 37 -6 63 -25 94c-11 18 -38 53 -56 64c-8 4 -19 11 -19 21c0 17 29 20 41 20
-c36 0 77 -13 110 -29c139 -66 168 -167 192 -307c6 -33 18 -138 66 -138c31 0 51 21 51 51c0 45 -40 94 -40 119c0 7 4 10 10 10c25 0 77 -53 93 -70c97 -103 133 -203 133 -342zM2304 615c0 -176 -47 -352 -138 -503c-42 -70 -180 -266 -271 -266c-21 0 -46 26 -46 47
-c0 34 117 143 146 180c124 156 183 332 183 531c0 164 -20 297 -93 446c-45 92 -92 154 -163 228c-23 24 -73 69 -73 105c0 25 26 52 51 52c66 0 161 -122 196 -169c134 -180 191 -365 206 -587c1 -21 2 -43 2 -64z" />
- <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664"
-d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
- <glyph glyph-name="calendar-o" unicode="&#xf133;" horiz-adv-x="1664"
-d="M128 -128h1408v1024h-1408v-1024zM512 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1280 1088v288c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-288c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1664 1152
-v-1280c0 -70 -58 -128 -128 -128h-1408c-70 0 -128 58 -128 128v1280c0 70 58 128 128 128h128v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h384v96c0 88 72 160 160 160h64c88 0 160 -72 160 -160v-96h128c70 0 128 -58 128 -128z" />
- <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792"
-d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64c-123 0 -224 101 -224 224v832c0 123 101 224 224 224h64zM1408 1152v-1280h-1024v1280h128v160c0 53 43 96 96 96h576c53 0 96 -43 96 -96v-160h128zM1792 928v-832c0 -123 -101 -224 -224 -224h-64v1280h64
-c123 0 224 -101 224 -224z" />
- <glyph glyph-name="arrow-circle-o-up" unicode="&#xf01b;"
-d="M1118 660c-5 -12 -17 -20 -30 -20h-192v-352c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v352h-192c-18 0 -32 14 -32 32c0 9 4 17 10 24l319 319c7 6 15 9 23 9s16 -3 23 -9l320 -320c9 -10 12 -23 7 -35zM768 1184c-300 0 -544 -244 -544 -544s244 -544 544 -544
-s544 244 544 544s-244 544 -544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="arrow-up" unicode="&#xf062;" horiz-adv-x="1558"
-d="M1558 565c0 -34 -14 -66 -37 -90l-75 -75c-24 -24 -57 -38 -91 -38s-67 14 -90 38l-294 293v-704c0 -72 -60 -117 -128 -117h-128c-68 0 -128 45 -128 117v704l-294 -293c-23 -24 -56 -38 -90 -38s-67 14 -90 38l-75 75c-24 24 -38 56 -38 90s14 67 38 91l651 651
-c23 24 56 37 90 37s67 -13 91 -37l651 -651c23 -24 37 -57 37 -91z" />
- <glyph glyph-name="venus-mars" unicode="&#xf228;" horiz-adv-x="2048"
-d="M1664 1504c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c98 -123 147 -286 117 -461c-42 -240 -237 -431 -478 -467c-152 -23 -295 14 -409 90c-75 -50 -162 -83 -256 -93v-132h96c18 0 32 -14 32 -32
-v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-314 35 -553 323 -506 654c34 249 232 449 480 487c153 23 296 -14 410 -90c92 61 202 97 320 97c136 0 261 -48 359 -126
-l255 254h-134c-18 0 -32 14 -32 32v64zM896 391c79 81 128 191 128 313s-49 232 -128 313c-79 -81 -128 -191 -128 -313s49 -232 128 -313zM128 704c0 -247 201 -448 448 -448c79 0 154 21 218 57c-95 103 -154 240 -154 391s59 288 154 391c-64 36 -139 57 -218 57
-c-247 0 -448 -201 -448 -448zM1216 256c247 0 448 201 448 448s-201 448 -448 448c-79 0 -154 -21 -218 -57c95 -103 154 -240 154 -391s-59 -288 -154 -391c64 -36 139 -57 218 -57z" />
- <glyph glyph-name="pause-circle" unicode="&#xf28b;"
-d="M704 352v576c0 18 -14 32 -32 32h-256c-18 0 -32 -14 -32 -32v-576c0 -18 14 -32 32 -32h256c18 0 32 14 32 32zM1152 352v576c0 18 -14 32 -32 32h-256c-18 0 -32 -14 -32 -32v-576c0 -18 14 -32 32 -32h256c18 0 32 14 32 32zM1536 640c0 -424 -344 -768 -768 -768
-s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="shopping-cart" unicode="&#xf07a;" horiz-adv-x="1664"
-d="M640 0c0 -70 -58 -128 -128 -128s-128 58 -128 128s58 128 128 128s128 -58 128 -128zM1536 0c0 -70 -58 -128 -128 -128s-128 58 -128 128s58 128 128 128s128 -58 128 -128zM1664 1088v-512c0 -32 -25 -60 -57 -64l-1044 -122c5 -23 13 -46 13 -70
-c0 -23 -14 -44 -24 -64h920c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64c0 31 45 106 61 137l-177 823h-204c-35 0 -64 29 -64 64s29 64 64 64h256c67 0 69 -80 79 -128h1201c35 0 64 -29 64 -64z" />
- <glyph glyph-name="files-o" unicode="&#xf0c5;" horiz-adv-x="1792"
-d="M1696 1152c53 0 96 -43 96 -96v-1216c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v288h-544c-53 0 -96 43 -96 96v672c0 53 31 127 68 164l408 408c37 37 111 68 164 68h416c53 0 96 -43 96 -96v-328c39 23 89 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323
-l-299 -299h299v299zM708 676l316 316v416h-384v-416c0 -53 -43 -96 -96 -96h-416v-640h512v256c0 53 31 127 68 164zM1664 -128v1152h-384v-416c0 -53 -43 -96 -96 -96h-416v-640h896z" />
- <glyph glyph-name="mastodon-square" unicode="&#xf300;"
-d="M288 1408h960c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288zM766 1189v0c-140 -1 -275 -17 -354 -53c0 0 -156 -70 -156 -308c0 -55 -1 -119 1 -188c6 -233 43 -463 258 -520
-c99 -26 184 -32 253 -28c124 7 195 45 195 45l-5 90s-88 -28 -188 -25c-99 3 -204 11 -220 133c-1 11 -2 22 -2 34c0 0 97 -24 220 -30c75 -3 146 4 218 13c138 16 257 102 272 179c24 122 22 297 22 297c0 238 -156 308 -156 308c-79 36 -214 52 -354 53h-4zM608 1003v0
-c58 0 103 -23 132 -68l28 -47l28 47c29 45 74 68 132 68c51 0 92 -18 123 -53c31 -34 45 -81 45 -140v-288h-114v280c0 59 -25 88 -75 88c-55 0 -82 -35 -82 -105v-153h-114v153c0 70 -27 105 -82 105c-50 0 -75 -29 -75 -88v-280h-114v288c0 59 15 105 45 140
-c31 35 72 53 123 53z" />
- <glyph glyph-name="th-large" unicode="&#xf009;" horiz-adv-x="1664"
-d="M768 512v-384c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128zM768 1280v-384c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128zM1664 512v-384
-c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128zM1664 1280v-384c0 -70 -58 -128 -128 -128h-512c-70 0 -128 58 -128 128v384c0 70 58 128 128 128h512c70 0 128 -58 128 -128z" />
- <glyph glyph-name="at" unicode="&#xf1fa;"
-d="M972 761c0 144 -75 230 -201 230c-166 0 -344 -165 -344 -432c0 -149 74 -234 204 -234c201 0 341 230 341 436zM1536 640c0 -311 -222 -428 -412 -434c-13 0 -18 -1 -32 -1c-62 0 -111 18 -142 53c-19 22 -30 50 -33 83c-62 -78 -170 -154 -305 -154
-c-215 0 -338 133 -338 365c0 319 221 578 491 578c117 0 211 -50 261 -135l2 19l11 56c1 8 8 18 15 18h118c5 0 10 -7 13 -11c3 -3 4 -11 3 -16l-120 -614c-4 -19 -5 -34 -5 -48c0 -54 16 -65 57 -65c68 2 288 30 288 306c0 389 -251 640 -640 640
-c-353 0 -640 -287 -640 -640s287 -640 640 -640c147 0 291 51 405 144c14 12 34 10 45 -4l41 -49c5 -7 8 -15 7 -24c-1 -8 -5 -16 -12 -22c-136 -111 -309 -173 -486 -173c-423 0 -768 345 -768 768s345 768 768 768c459 0 768 -309 768 -768z" />
- <glyph glyph-name="file" unicode="&#xf15b;"
-d="M1024 1024v472c14 -9 26 -18 36 -28l408 -408c10 -10 19 -22 28 -36h-472zM896 992c0 -53 43 -96 96 -96h544v-1056c0 -53 -43 -96 -96 -96h-1344c-53 0 -96 43 -96 96v1600c0 53 43 96 96 96h800v-544z" />
- <glyph glyph-name="star-half" unicode="&#xf089;" horiz-adv-x="832"
-d="M832 1504v-1339l-449 -236c-13 -7 -26 -12 -40 -12c-29 0 -42 24 -42 50c0 7 1 13 2 20l86 500l-364 354c-12 13 -25 30 -25 48c0 30 31 42 56 46l502 73l225 455c9 19 26 41 49 41z" />
- <glyph glyph-name="futbol-o" unicode="&#xf1e3;" horiz-adv-x="1792"
-d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536c495 0 896 -401 896 -896s-401 -896 -896 -896s-896 401 -896 896s401 896 896 896zM1515 186c94 128 149 284 149 454v3l-102 -89l-240 224l63 323l134 -12c-95 131 -231 232 -389 282l53 -124l-287 -159l-287 159
-l53 124c-158 -50 -294 -151 -389 -282l135 12l62 -323l-240 -224l-102 89v-3c0 -170 55 -326 149 -454l30 132l326 -40l139 -298l-116 -69c75 -25 156 -39 240 -39s165 14 240 39l-116 69l139 298l326 40z" />
- <glyph glyph-name="flag-checkered" unicode="&#xf11e;" horiz-adv-x="1728"
-d="M768 536v192c-122 -11 -269 -60 -384 -117v-185c116 54 260 100 384 110zM768 954v197c-126 -6 -274 -65 -384 -126v-189c118 61 260 113 384 118zM1600 491v184c-91 -45 -250 -112 -384 -71v224c-13 4 -26 9 -39 15c-115 58 -209 112 -360 112c-16 0 -32 -1 -49 -3v-222
-h19c151 0 275 -54 390 -111c13 -6 26 -11 39 -15v-188c27 -11 57 -17 91 -17c111 0 231 59 293 92zM1600 918v189c-80 -43 -192 -91 -306 -91c-27 0 -53 2 -78 8v-196c134 -38 293 39 384 90zM256 1280c0 -47 -26 -88 -64 -110v-1266c0 -18 -14 -32 -32 -32h-64
-c-18 0 -32 14 -32 32v1266c-38 22 -64 63 -64 110c0 71 57 128 128 128s128 -57 128 -128zM1728 1216v-763c0 -24 -14 -46 -35 -57c-4 -2 -10 -5 -17 -9c-64 -34 -215 -116 -369 -116c-59 0 -112 12 -158 35l-28 14c-101 51 -181 91 -304 91c-144 0 -347 -75 -464 -146
-c-10 -6 -22 -9 -33 -9s-22 3 -32 8c-20 12 -32 33 -32 56v742c0 22 12 43 31 55c64 38 290 163 500 163c167 0 303 -61 418 -117c26 -13 56 -19 89 -19c118 0 248 75 310 112c13 7 24 13 31 17c20 10 43 9 62 -2c19 -12 31 -33 31 -55z" />
- <glyph glyph-name="genderless" unicode="&#xf22d;" horiz-adv-x="1152"
-d="M1024 576c0 247 -201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448s448 201 448 448zM1152 576c0 -318 -258 -576 -576 -576s-576 258 -576 576s258 576 576 576s576 -258 576 -576z" />
- <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1664"
-d="M1024 704c0 35 -29 64 -64 64h-256c-35 0 -64 -29 -64 -64s29 -64 64 -64h256c35 0 64 29 64 64zM1600 896v-960c0 -35 -29 -64 -64 -64h-1408c-35 0 -64 29 -64 64v960c0 35 29 64 64 64h1408c35 0 64 -29 64 -64zM1664 1344v-256c0 -35 -29 -64 -64 -64h-1536
-c-35 0 -64 29 -64 64v256c0 35 29 64 64 64h1536c35 0 64 -29 64 -64z" />
- <glyph glyph-name="film" unicode="&#xf008;" horiz-adv-x="1920"
-d="M384 -64v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM384 320v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM384 704v128c0 35 -29 64 -64 64h-128
-c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1408 -64v512c0 35 -29 64 -64 64h-768c-35 0 -64 -29 -64 -64v-512c0 -35 29 -64 64 -64h768c35 0 64 29 64 64zM384 1088v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128
-c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1792 -64v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1408 704v512c0 35 -29 64 -64 64h-768c-35 0 -64 -29 -64 -64v-512c0 -35 29 -64 64 -64h768c35 0 64 29 64 64z
-M1792 320v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1792 704v128c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1792 1088v128c0 35 -29 64 -64 64h-128
-c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h128c35 0 64 29 64 64zM1920 1248v-1344c0 -88 -72 -160 -160 -160h-1600c-88 0 -160 72 -160 160v1344c0 88 72 160 160 160h1600c88 0 160 -72 160 -160z" />
- <glyph glyph-name="power-off" unicode="&#xf011;"
-d="M1536 640c0 -423 -345 -768 -768 -768s-768 345 -768 768c0 243 112 467 307 613c57 43 137 32 179 -25c43 -56 31 -137 -25 -179c-130 -98 -205 -247 -205 -409c0 -282 230 -512 512 -512s512 230 512 512c0 162 -75 311 -205 409c-56 42 -68 123 -25 179
-c42 57 123 68 179 25c195 -146 307 -370 307 -613zM896 1408v-640c0 -70 -58 -128 -128 -128s-128 58 -128 128v640c0 70 58 128 128 128s128 -58 128 -128z" />
- <glyph glyph-name="percent" unicode="&#xf295;"
-d="M1280 256c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM512 1024c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM1536 256c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384
-s384 -172 384 -384zM1440 1344c0 -14 -5 -27 -13 -38l-1056 -1408c-12 -16 -31 -26 -51 -26h-160c-35 0 -64 29 -64 64c0 14 5 27 13 38l1056 1408c12 16 31 26 51 26h160c35 0 64 -29 64 -64zM768 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384
-s384 -172 384 -384z" />
- <glyph glyph-name="google-wallet" unicode="&#xf1ee;" horiz-adv-x="1756"
-d="M405 864c20 0 40 -10 52 -26c175 -239 297 -495 362 -774h-446c-80 278 -198 532 -367 749c-16 21 0 51 26 51h373zM964 507c-33 -135 -75 -266 -125 -393c-53 209 -138 405 -256 594c26 145 41 294 44 449c141 -227 253 -443 337 -650zM1063 1216
-c299 -412 521 -920 569 -1472h-451c-33 534 -279 1040 -553 1472h435zM1756 640c0 -278 -38 -570 -101 -812c-44 370 -166 738 -359 1083c-17 202 -53 398 -106 584c-5 21 10 41 31 41h359c28 0 54 -19 61 -46c76 -270 115 -556 115 -850z" />
- <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664"
-d="M1639 1058c25 -36 32 -83 18 -129l-275 -906c-25 -85 -113 -151 -199 -151h-923c-102 0 -211 81 -248 185c-16 45 -16 89 -2 127c2 20 6 40 7 64c1 16 -8 29 -6 41c4 24 25 41 41 68c30 50 64 131 75 183c5 19 -5 41 0 58c5 19 24 33 34 51c27 46 62 135 67 182
-c2 21 -8 44 -2 60c7 23 29 33 44 53c24 33 64 128 70 181c2 17 -8 34 -5 52c4 19 28 39 44 62c42 62 50 199 177 163l-1 -3c17 4 34 9 51 9h761c47 0 89 -21 114 -56c26 -36 32 -83 18 -130l-274 -906c-47 -154 -73 -188 -200 -188h-869c-13 0 -29 -3 -38 -15
-c-8 -12 -9 -21 -1 -43c20 -58 89 -70 144 -70h923c37 0 80 21 91 57l300 987c6 19 6 39 5 57c23 -9 44 -23 59 -43zM575 1056c-6 -18 4 -32 22 -32h608c17 0 36 14 42 32l21 64c6 18 -4 32 -22 32h-608c-17 0 -36 -14 -42 -32zM492 800c-6 -18 4 -32 22 -32h608
-c17 0 36 14 42 32l21 64c6 18 -4 32 -22 32h-608c-17 0 -36 -14 -42 -32z" />
+ <glyph glyph-name="thermometer-quarter" unicode="&#xf2ca;" horiz-adv-x="1024"
+d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v139h128v-139c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320
+s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z
+" />
<glyph glyph-name="thermometer-three-quarters" unicode="&#xf2c8;" horiz-adv-x="1024"
d="M640 192c0 -106 -86 -192 -192 -192s-192 86 -192 192c0 80 50 153 128 181v651h128v-651c78 -28 128 -101 128 -181zM768 192c0 105 -50 197 -128 256v768c0 106 -86 192 -192 192s-192 -86 -192 -192v-768c-78 -59 -128 -151 -128 -256c0 -177 143 -320 320 -320
s320 143 320 320zM896 192c0 -247 -201 -448 -448 -448s-448 201 -448 448c0 122 49 232 128 313v711c0 177 143 320 320 320s320 -143 320 -320v-711c79 -81 128 -191 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z
" />
+ <glyph glyph-name="thumb-tack" unicode="&#xf08d;" horiz-adv-x="1152"
+d="M480 672v448c0 18 -14 32 -32 32s-32 -14 -32 -32v-448c0 -18 14 -32 32 -32s32 14 32 32zM1152 320c0 -35 -29 -64 -64 -64h-429l-51 -483c-2 -16 -15 -29 -31 -29h-1c-16 0 -29 11 -32 27l-76 485h-404c-35 0 -64 29 -64 64c0 164 124 320 256 320v512
+c-70 0 -128 58 -128 128s58 128 128 128h640c70 0 128 -58 128 -128s-58 -128 -128 -128v-512c132 0 256 -156 256 -320z" />
+ <glyph glyph-name="thumbs-down" unicode="&#xf165;" horiz-adv-x="1600"
+d="M256 960c0 36 -29 64 -64 64c-36 0 -64 -28 -64 -64c0 -35 28 -64 64 -64c35 0 64 29 64 64zM416 448c0 -35 -29 -64 -64 -64h-288c-35 0 -64 29 -64 64v640c0 35 29 64 64 64h288c35 0 64 -29 64 -64v-640zM1545 597c34 -38 55 -96 55 -149c-1 -104 -88 -192 -192 -192
+h-277c8 -32 18 -42 29 -64c26 -52 56 -110 56 -192c0 -77 0 -256 -224 -256c-17 0 -33 7 -45 19c-43 42 -55 104 -66 163c-12 58 -23 118 -62 157c-31 31 -65 74 -101 120c-44 58 -140 177 -177 180c-33 3 -61 31 -61 64v641c0 35 30 63 64 64c35 1 95 22 158 44
+c108 37 243 84 386 84h129c88 -1 154 -27 197 -78c38 -45 55 -106 49 -181c25 -24 44 -57 54 -94c11 -40 11 -80 0 -117c30 -40 45 -87 43 -137c0 -14 -4 -44 -15 -76z" />
+ <glyph glyph-name="thumbs-o-down" unicode="&#xf088;"
+d="M256 1088c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 512c0 37 -28 127 -75 128c21 24 35 71 35 103c0 47 -19 87 -53 119c12 21 18 45 18 69c0 46 -23 103 -65 126c3 18 5 37 5 56c0 117 -74 167 -185 167h-128c-118 0 -232 -35 -342 -73
+c-54 -19 -146 -55 -202 -55h-32v-640h32c79 0 198 -171 243 -229c25 -31 49 -62 77 -91c97 -102 64 -255 128 -320c137 0 160 75 160 192c0 118 -96 203 -96 320h352c67 0 128 60 128 128zM1536 511c0 -138 -118 -255 -256 -255h-176c30 -62 48 -122 48 -192
+c0 -66 -4 -126 -35 -186c-49 -97 -149 -134 -253 -134c-34 0 -66 14 -90 37c-100 98 -69 256 -128 321c-38 40 -73 83 -107 127c-30 39 -98 129 -137 155h-274c-71 0 -128 57 -128 128v640c0 71 57 128 128 128h288c28 0 109 30 138 40c144 50 269 88 423 88h112
+c182 0 313 -108 312 -295v-5c39 -50 60 -114 60 -178c0 -14 -1 -29 -3 -43c25 -44 38 -94 38 -144c0 -23 -3 -47 -9 -69c32 -48 49 -105 49 -163z" />
+ <glyph glyph-name="thumbs-o-up" unicode="&#xf087;"
+d="M256 192c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 768c0 68 -61 128 -128 128h-352c0 117 96 202 96 320c0 117 -23 192 -160 192c-64 -65 -31 -218 -128 -320c-28 -29 -52 -60 -77 -91c-45 -58 -164 -229 -243 -229h-32v-640h32
+c56 0 148 -36 202 -55c110 -38 224 -73 342 -73h121c113 0 192 45 192 167c0 19 -2 38 -5 56c42 23 65 80 65 126c0 24 -6 48 -18 69c34 32 53 72 53 119c0 32 -14 79 -35 103c47 1 75 91 75 128zM1536 769c0 -58 -17 -115 -49 -163c6 -22 9 -46 9 -69
+c0 -50 -13 -100 -38 -144c2 -14 3 -29 3 -43c0 -64 -21 -128 -60 -178c2 -189 -127 -300 -312 -300h-129c-142 0 -274 42 -406 88c-29 10 -110 40 -138 40h-288c-71 0 -128 57 -128 128v640c0 71 57 128 128 128h274c39 26 107 116 137 155c34 44 69 87 107 128
+c60 64 28 222 128 320c24 23 56 37 90 37c104 0 204 -37 253 -134c31 -61 35 -119 35 -186c0 -70 -18 -130 -48 -192h176c138 0 256 -117 256 -255z" />
+ <glyph glyph-name="thumbs-up" unicode="&#xf164;" horiz-adv-x="1600"
+d="M256 192c0 35 -29 64 -64 64c-36 0 -64 -29 -64 -64c0 -36 28 -64 64 -64c35 0 64 28 64 64zM416 704v-640c0 -35 -29 -64 -64 -64h-288c-35 0 -64 29 -64 64v640c0 35 29 64 64 64h288c35 0 64 -29 64 -64zM1600 704c0 -53 -21 -110 -55 -149c11 -32 15 -62 15 -76
+c2 -50 -13 -97 -43 -137c11 -37 11 -77 0 -117c-10 -37 -29 -70 -54 -94c6 -75 -11 -136 -49 -181c-43 -51 -109 -77 -197 -78h-129c-143 0 -278 47 -386 84c-63 22 -123 43 -158 44c-34 1 -64 29 -64 64v641c0 33 28 61 61 64c37 3 133 122 177 180c36 46 70 89 101 120
+c39 39 50 99 62 157c11 59 23 121 66 163c12 12 28 19 45 19c224 0 224 -179 224 -256c0 -82 -29 -140 -56 -192c-11 -22 -21 -32 -29 -64h277c104 0 192 -88 192 -192z" />
+ <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1685"
+d="M970 1084l316 -316l-572 -572l-316 316zM760 105l618 618c25 25 25 65 0 90l-362 362c-24 24 -66 24 -90 0l-618 -618c-25 -25 -25 -65 0 -90l362 -362c12 -12 27 -18 44 -18s34 6 46 18zM1648 742l-906 -908c-50 -49 -133 -49 -182 0l-126 126c75 75 75 197 0 272
+s-197 75 -272 0l-124 126c-50 49 -50 131 0 181l906 906c49 50 132 50 182 0l124 -125c-75 -75 -75 -197 0 -272s197 -75 272 0l126 -125c49 -50 49 -132 0 -181z" />
+ <glyph glyph-name="times" unicode="&#xf00d;" horiz-adv-x="1188"
+d="M1188 214c0 -25 -10 -50 -28 -68l-136 -136c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-294 294l-294 -294c-18 -18 -43 -28 -68 -28s-50 10 -68 28l-136 136c-18 18 -28 43 -28 68s10 50 28 68l294 294l-294 294c-18 18 -28 43 -28 68s10 50 28 68l136 136
+c18 18 43 28 68 28s50 -10 68 -28l294 -294l294 294c18 18 43 28 68 28s50 -10 68 -28l136 -136c18 -18 28 -43 28 -68s-10 -50 -28 -68l-294 -294l294 -294c18 -18 28 -43 28 -68z" />
+ <glyph glyph-name="times-circle" unicode="&#xf057;"
+d="M1149 414c0 17 -7 33 -19 45l-181 181l181 181c12 12 19 28 19 45s-7 34 -19 46l-90 90c-12 12 -29 19 -46 19s-33 -7 -45 -19l-181 -181l-181 181c-12 12 -28 19 -45 19s-34 -7 -46 -19l-90 -90c-12 -12 -19 -29 -19 -46s7 -33 19 -45l181 -181l-181 -181
+c-12 -12 -19 -28 -19 -45s7 -34 19 -46l90 -90c12 -12 29 -19 46 -19s33 7 45 19l181 181l181 -181c12 -12 28 -19 45 -19s34 7 46 19l90 90c12 12 19 29 19 46zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="times-circle-o" unicode="&#xf05c;"
+d="M1097 457l-146 -146c-13 -13 -33 -13 -46 0l-137 137l-137 -137c-13 -13 -33 -13 -46 0l-146 146c-13 13 -13 33 0 46l137 137l-137 137c-13 13 -13 33 0 46l146 146c13 13 33 13 46 0l137 -137l137 137c13 13 33 13 46 0l146 -146c13 -13 13 -33 0 -46l-137 -137
+l137 -137c13 -13 13 -33 0 -46zM1312 640c0 300 -244 544 -544 544s-544 -244 -544 -544s244 -544 544 -544s544 244 544 544zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
+ <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024"
+d="M512 384c0 25 -8 49 -20 69c-13 20 -66 88 -87 155c-3 11 -13 16 -21 16s-18 -5 -21 -16c-21 -67 -74 -135 -87 -155c-12 -20 -20 -44 -20 -69c0 -71 57 -128 128 -128s128 57 128 128zM1024 512c0 -283 -229 -512 -512 -512s-512 229 -512 512c0 101 31 195 81 275
+c51 80 265 351 346 621c13 43 53 64 85 64s73 -21 85 -64c81 -270 295 -541 346 -621s81 -174 81 -275z" />
+ <glyph glyph-name="tipeee" unicode="&#xf301;" horiz-adv-x="2304"
+d="M116 1259h2072c64 0 116 -52 116 -116v-1006c0 -64 -52 -116 -116 -116h-2072c-64 0 -116 52 -116 116v1006c0 64 52 116 116 116zM756 1006v0c-59 0 -90 -47 -90 -85c0 -40 37 -84 90 -84c59 0 92 38 92 84c0 38 -34 85 -92 85zM1672 966v-159l45 -211h110l45 211v159
+h-200zM534 925l-154 -49v-77h-45v-109h45v-148c3 -107 7 -176 132 -176c19 0 77 6 102 16v107c-16 -7 -42 -14 -53 -14c-33 0 -27 39 -27 67v148h80v109h-80v126zM1212 806v0c-50 0 -85 -24 -101 -36l-14 29h-192v-111h35v-368h-35v-109h250v109h-45v85c6 -5 40 -33 109 -33
+c108 0 190 82 190 215c0 119 -67 219 -197 219zM643 799v-109h35v-199h-35v-110h234v110h-40v308h-194zM1169 688v0c37 0 61 -53 61 -103c0 -64 -25 -104 -60 -104c-32 0 -60 43 -60 100c-3 66 26 107 59 107zM1764 555c-60 0 -95 -47 -95 -89c0 -43 41 -86 95 -86
+c61 0 99 39 99 86c0 48 -40 89 -99 89z" />
+ <glyph glyph-name="toggle-off" unicode="&#xf204;" horiz-adv-x="2048"
+d="M1152 640c0 282 -230 512 -512 512s-512 -230 -512 -512s230 -512 512 -512s512 230 512 512zM1920 640c0 282 -230 512 -512 512h-386c156 -117 258 -303 258 -512s-102 -395 -258 -512h386c282 0 512 230 512 512zM2048 640c0 -353 -287 -640 -640 -640h-768
+c-353 0 -640 287 -640 640s287 640 640 640h768c353 0 640 -287 640 -640z" />
+ <glyph glyph-name="toggle-on" unicode="&#xf205;" horiz-adv-x="2048"
+d="M0 640c0 353 287 640 640 640h768c353 0 640 -287 640 -640s-287 -640 -640 -640h-768c-353 0 -640 287 -640 640zM1408 128c282 0 512 230 512 512s-230 512 -512 512s-512 -230 -512 -512s230 -512 512 -512z" />
+ <glyph glyph-name="tor-onion" unicode="&#xf32e;" horiz-adv-x="1083"
+d="M928 690c99 -90 155 -218 155 -353c0 -133 -60 -264 -164 -349c-98 -82 -231 -116 -361 -116c-81 0 -153 3 -232 29c-178 60 -313 215 -324 399c-11 144 21 252 133 367c59 60 175 130 256 184c40 26 82 103 1 247l16 12l91 -37c17 113 61 226 123 338l-44 -174
+c62 124 161 217 276 299c-84 -98 -160 -193 -206 -291c79 110 185 172 304 212c-149 -133 -270 -276 -363 -420l59 -25c-33 -105 62 -179 93 -196c68 -39 134 -78 187 -126zM289 -43v0c28 -14 56 -24 89 -32c-36 14 -65 34 -88 60l-9 9c-53 59 -115 159 -138 250
+c-9 37 -15 65 -6 104c42 150 133 209 224 271c20 14 45 27 65 42c39 28 61 114 81 184c-11 -57 -23 -158 -73 -197c-20 -15 -41 -30 -63 -45c-88 -60 -177 -116 -217 -262c-9 -31 -2 -63 6 -94c22 -88 83 -184 133 -240c0 -2 10 -8 10 -11c37 -43 51 -59 161 -85
+c-29 11 -58 24 -78 38c-88 60 -131 137 -139 247c-5 87 48 176 150 232c71 36 93 95 115 163c-15 -79 -33 -128 -107 -171c-88 -50 -150 -148 -144 -216c8 -84 65 -178 130 -234c26 -22 68 -37 108 -48c-11 8 -23 19 -32 34c-12 19 -22 43 -31 68c-8 23 -17 48 -17 70
+c0 53 6 117 45 162c34 40 45 45 60 93c-11 -54 -17 -58 -50 -104c-42 -59 -43 -116 -38 -153c5 -23 12 -45 20 -64c9 -25 19 -46 34 -66c12 -15 18 -26 37 -34c19 37 32 113 34 156c2 37 5 79 -1 121c-8 57 -25 112 -27 155c9 -39 30 -94 42 -150c9 -45 11 -87 8 -120
+c-3 -39 -5 -69 -11 -102c-5 -22 -14 -43 -31 -65c40 31 65 79 76 135c17 74 19 143 19 180c2 33 -13 85 -27 133c-9 36 -43 73 -52 99c-15 45 -9 77 -11 141c6 -59 6 -110 21 -133c14 -23 34 -57 48 -90c23 -60 37 -127 39 -158c2 -53 -6 -137 -25 -202
+c-9 -33 -22 -60 -37 -82c28 36 50 83 58 123c25 112 42 229 27 299c-5 15 -9 69 -31 128c-33 85 -77 156 -82 171c-17 46 -21 166 -23 231c2 -76 17 -188 28 -214c6 -17 55 -95 88 -177c23 -54 30 -104 33 -119c19 -152 2 -215 -37 -353c-5 -19 -13 -36 -22 -53
+c25 31 45 65 51 93c39 170 53 389 -1 556c-28 88 -96 164 -110 217c-12 48 -11 101 -8 166l-138 60c9 -12 32 -68 37 -83c12 -46 6 -90 -3 -110c-50 -91 -136 -117 -198 -168c-112 -91 -231 -164 -219 -413c6 -122 103 -273 247 -343z" />
+ <glyph glyph-name="trademark" unicode="&#xf25c;" horiz-adv-x="1972"
+d="M857 992v-117c0 -17 -15 -31 -32 -31h-298v-812c0 -18 -14 -32 -31 -32h-135c-18 0 -32 14 -32 32v812h-297c-18 0 -32 14 -32 31v117c0 18 14 32 32 32h793c17 0 32 -14 32 -32zM1895 995l77 -961c1 -9 -2 -17 -8 -24c-6 -6 -14 -10 -23 -10h-134c-16 0 -30 13 -31 29
+l-46 588l-189 -425c-5 -12 -16 -19 -29 -19h-120c-12 0 -23 7 -29 19l-188 427l-45 -590c-1 -16 -15 -29 -31 -29h-135c-9 0 -17 4 -23 10c-6 7 -9 15 -9 24l78 961c1 16 15 29 31 29h142c13 0 24 -8 29 -19l220 -520c7 -16 14 -34 20 -51c7 17 13 35 20 51l221 520
+c5 11 16 19 29 19h141c17 0 31 -13 32 -29z" />
+ <glyph glyph-name="train" unicode="&#xf238;"
+d="M1088 1536c247 0 448 -143 448 -320v-896c0 -173 -191 -313 -431 -319l213 -202c21 -20 7 -55 -22 -55h-1056c-29 0 -43 35 -22 55l213 202c-240 6 -431 146 -431 319v896c0 177 201 320 448 320h640zM768 192c106 0 192 86 192 192s-86 192 -192 192s-192 -86 -192 -192
+s86 -192 192 -192zM1344 768v512h-1152v-512h1152z" />
<glyph glyph-name="transgender" unicode="&#xf224;" horiz-adv-x="1408"
d="M1024 1504c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c78 -98 126 -223 126 -359c0 -296 -224 -540 -512 -572v-132h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32
h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-302 33 -535 302 -510 618c21 272 237 495 507 526c162 19 312 -31 426 -122l255 254h-134c-18 0 -32 14 -32 32v64zM576 256c247 0 448 201 448 448s-201 448 -448 448
s-448 -201 -448 -448s201 -448 448 -448z" />
- <glyph glyph-name="cloud-upload" unicode="&#xf0ee;" horiz-adv-x="1920"
-d="M1280 672c0 8 -3 17 -9 23l-352 352c-6 6 -14 9 -23 9c-8 0 -17 -3 -23 -9l-351 -351c-6 -7 -10 -15 -10 -24c0 -18 14 -32 32 -32h224v-352c0 -17 15 -32 32 -32h192c17 0 32 15 32 32v352h224c18 0 32 15 32 32zM1920 384c0 -212 -172 -384 -384 -384h-1088
-c-247 0 -448 201 -448 448c0 174 101 332 258 405c-1 15 -2 29 -2 43c0 283 229 512 512 512c208 0 395 -126 474 -318c46 40 105 62 166 62c141 0 256 -115 256 -256c0 -49 -14 -97 -41 -138c174 -41 297 -196 297 -374z" />
- <glyph glyph-name="bullseye" unicode="&#xf140;"
-d="M1024 640c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM1152 640c0 212 -172 384 -384 384s-384 -172 -384 -384s172 -384 384 -384s384 172 384 384zM1280 640c0 -283 -229 -512 -512 -512s-512 229 -512 512s229 512 512 512
-s512 -229 512 -512zM1408 640c0 353 -287 640 -640 640s-640 -287 -640 -640s287 -640 640 -640s640 287 640 640zM1536 640c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="openid" unicode="&#xf19b;" horiz-adv-x="1792"
-d="M1086 1536v-1536l-272 -128c-460 41 -814 286 -814 583c0 286 330 524 767 577v-172c-286 -50 -496 -212 -496 -405c0 -204 234 -373 543 -412v1360zM1755 954l37 -390l-525 114l147 83c-78 46 -174 80 -280 99v172c185 -22 351 -78 481 -157z" />
- <glyph glyph-name="repeat" unicode="&#xf01e;"
-d="M1536 1280v-448c0 -35 -29 -64 -64 -64h-448c-26 0 -49 16 -59 40c-10 23 -5 51 14 69l138 138c-94 87 -218 137 -349 137c-282 0 -512 -230 -512 -512s230 -512 512 -512c159 0 306 72 404 199c5 7 14 11 23 12c9 0 18 -3 25 -9l137 -138c12 -11 12 -30 2 -43
-c-146 -176 -362 -277 -591 -277c-423 0 -768 345 -768 768s345 768 768 768c197 0 388 -79 529 -212l130 129c18 19 46 24 70 14c23 -10 39 -33 39 -59z" />
- <glyph glyph-name="star" unicode="&#xf005;" horiz-adv-x="1664"
-d="M1664 889c0 -18 -13 -35 -26 -48l-363 -354l86 -500c1 -7 1 -13 1 -20c0 -26 -12 -50 -41 -50c-14 0 -28 5 -40 12l-449 236l-449 -236c-13 -7 -26 -12 -40 -12c-29 0 -42 24 -42 50c0 7 1 13 2 20l86 500l-364 354c-12 13 -25 30 -25 48c0 30 31 42 56 46l502 73
-l225 455c9 19 26 41 49 41s40 -22 49 -41l225 -455l502 -73c24 -4 56 -16 56 -46z" />
- <glyph glyph-name="users" unicode="&#xf0c0;" horiz-adv-x="1920"
-d="M593 640c-104 -3 -198 -48 -265 -128h-134c-100 0 -194 48 -194 159c0 81 -3 353 124 353c21 0 125 -85 260 -85c46 0 90 8 133 23c-3 -22 -5 -44 -5 -66c0 -91 29 -181 81 -256zM1664 3c0 -162 -107 -259 -267 -259h-874c-160 0 -267 97 -267 259c0 226 53 573 346 573
-c34 0 158 -139 358 -139s324 139 358 139c293 0 346 -347 346 -573zM640 1280c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM1344 896c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384zM1920 671
-c0 -111 -94 -159 -194 -159h-134c-67 80 -161 125 -265 128c52 75 81 165 81 256c0 22 -2 44 -5 66c43 -15 87 -23 133 -23c135 0 239 85 260 85c127 0 124 -272 124 -353zM1792 1280c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256z" />
<glyph glyph-name="transgender-alt" unicode="&#xf225;" horiz-adv-x="1664"
d="M1280 1504c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c78 -98 126 -223 126 -359c0 -296 -224 -540 -512 -572v-132h96c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32
h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-288 32 -512 276 -512 572c0 136 48 261 126 359l-52 53l-101 -111c-12 -13 -32 -14 -45 -3l-48 44c-13 11 -14 32 -2 45l105 115l-111 112v-134c0 -18 -14 -32 -32 -32h-64
c-18 0 -32 14 -32 32v288c0 35 29 64 64 64h288c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-133l106 -107l86 94c12 13 32 14 45 3l48 -44c13 -11 14 -32 2 -45l-90 -99l57 -56c98 78 223 126 359 126s261 -48 359 -126l255 254h-134c-18 0 -32 14 -32 32v64zM832 256
c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
- <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1428"
-d="M1364 486c61 -35 82 -114 47 -175l-64 -110c-35 -61 -114 -82 -175 -47l-266 153v-307c0 -70 -58 -128 -128 -128h-128c-70 0 -128 58 -128 128v307l-266 -153c-61 -35 -140 -14 -175 47l-64 110c-35 61 -14 140 47 175l266 154l-266 154c-61 35 -82 114 -47 175l64 110
-c35 61 114 82 175 47l266 -153v307c0 70 58 128 128 128h128c70 0 128 -58 128 -128v-307l266 153c61 35 140 14 175 -47l64 -110c35 -61 14 -140 -47 -175l-266 -154z" />
- <glyph glyph-name="plus-circle" unicode="&#xf055;"
-d="M1216 576v128c0 35 -29 64 -64 64h-256v256c0 35 -29 64 -64 64h-128c-35 0 -64 -29 -64 -64v-256h-256c-35 0 -64 -29 -64 -64v-128c0 -35 29 -64 64 -64h256v-256c0 -35 29 -64 64 -64h128c35 0 64 29 64 64v256h256c35 0 64 29 64 64zM1536 640
-c0 -424 -344 -768 -768 -768s-768 344 -768 768s344 768 768 768s768 -344 768 -768z" />
- <glyph glyph-name="cart-arrow-down" unicode="&#xf218;" horiz-adv-x="1664"
-d="M1280 832c0 35 -29 64 -64 64c-17 0 -33 -7 -45 -19l-147 -146v293c0 35 -29 64 -64 64s-64 -29 -64 -64v-293l-147 146c-12 12 -28 19 -45 19c-35 0 -64 -29 -64 -64c0 -17 7 -33 19 -45l256 -256c12 -12 28 -19 45 -19s33 7 45 19l256 256c12 12 19 28 19 45zM640 0
-c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1536 0c0 -71 -57 -128 -128 -128s-128 57 -128 128s57 128 128 128s128 -57 128 -128zM1664 1088v-512c0 -32 -24 -60 -57 -64l-1044 -122c4 -22 13 -47 13 -70s-14 -44 -24 -64h920
-c35 0 64 -29 64 -64s-29 -64 -64 -64h-1024c-35 0 -64 29 -64 64c0 31 47 108 61 137l-177 823h-204c-35 0 -64 29 -64 64s29 64 64 64h256c68 0 69 -80 79 -128h1201c35 0 64 -29 64 -64z" />
- <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1664"
-d="M338 829l494 -305l-342 -285l-490 319zM1324 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM490 1418l342 -285l-494 -304l-338 270zM1326 829l338 -271l-489 -319l-343 285zM1175 1418l489 -319l-338 -270l-494 304z" />
- <glyph glyph-name="debian" unicode="&#xf2ff;" horiz-adv-x="1440"
-d="M1 954c3 22 -11 29 15 62c-4 -17 -6 -33 -15 -62zM61 1152c0 -18 30 18 8 -31c-40 -28 -3 -12 -8 31zM754 1527c20 7 49 4 70 9c-28 -2 -55 -3 -82 -7l12 -2zM1399 728c-8 -61 -27 -121 -56 -176c26 52 43 108 51 165zM582 550l10 -27c-12 21 -26 42 -33 66
-c7 -14 13 -28 23 -39zM536 548c25 -47 38 -61 56 -96c-25 21 -40 49 -60 76zM1274 762c2 -48 -15 -72 -29 -113l-25 -13c-21 -41 2 -26 -13 -58c-33 -29 -100 -91 -121 -97c-16 0 11 19 14 26c-44 -30 -36 -46 -103 -64l-2 4c-166 -78 -395 76 -392 287
-c-2 -13 -5 -10 -9 -15c-9 108 50 218 149 262c97 48 210 28 279 -37c-38 50 -113 103 -203 98c-88 -1 -171 -57 -198 -118c-45 -28 -49 -109 -69 -124c-26 -194 49 -277 178 -376c20 -14 5 -16 8 -26c-43 20 -82 50 -114 87c17 -25 35 -49 59 -68c-40 14 -93 98 -109 101
-c69 -124 282 -218 393 -172c-51 -2 -117 -1 -175 20c-24 12 -57 39 -51 44c152 -57 308 -43 439 62c33 26 70 70 81 71c-16 -24 2 -12 -10 -33c33 54 -14 22 35 93l18 -25c-7 45 55 99 49 169c14 22 16 -23 1 -73c21 55 5 65 10 110c6 -15 14 -32 18 -48
-c-14 53 14 89 21 120c-7 3 -22 -23 -25 40c0 27 8 14 11 21c-5 3 -19 24 -28 64c6 9 17 -25 25 -26c-5 32 -15 57 -15 81c-25 51 -9 -7 -29 22c-26 82 22 19 25 56c40 -58 63 -147 73 -184c-8 45 -21 89 -37 131c12 -5 -19 93 16 28c-38 138 -161 266 -274 327
-c14 -13 31 -29 25 -31c-56 34 -46 37 -54 51c-46 19 -49 -1 -79 0c-86 46 -103 40 -183 69l4 -17c-57 19 -67 -7 -129 0c-4 3 20 11 39 14c-55 -7 -53 11 -107 -2c13 9 28 15 42 23c-45 -3 -107 -26 -88 -5c-74 -33 -205 -78 -278 -147l-2 15c-34 -40 -147 -121 -156 -173
-l-9 -2c-17 -30 -29 -64 -43 -94c-23 -39 -33 -15 -30 -21c-45 -91 -68 -168 -87 -231c14 -21 1 -123 6 -206c-23 -408 286 -804 624 -896c50 -18 123 -17 186 -19c-74 21 -84 11 -156 36c-52 24 -63 53 -100 85l15 -26c-72 26 -42 31 -101 50l16 20c-23 2 -62 40 -73 61
-l-25 -1c-31 38 -47 65 -46 86l-8 -15c-9 16 -114 142 -60 113c-10 9 -23 15 -37 41l11 13c-26 33 -48 76 -46 90c14 -19 23 -22 32 -25c-65 162 -68 9 -118 165l10 1c-8 12 -13 25 -19 38l5 45c-47 54 -14 232 -7 329c5 39 40 81 66 147l-16 3c31 53 174 214 241 206
-c32 41 -6 1 -12 11c71 74 93 52 141 65c52 31 -45 -13 -20 11c89 23 63 52 180 64c12 -7 -28 -11 -38 -20c75 36 235 28 340 -20c122 -57 259 -225 264 -383l6 -2c-3 -63 10 -135 -12 -202l15 32zM779 1504l-11 -2l11 1v1zM748 1513c53 -2 48 -5 31 -9c3 4 -15 6 -31 9z
-M1079 782c-5 -22 -10 13 -16 16c5 20 20 37 16 -16zM1020 629c18 24 30 51 35 79c-4 -20 -15 -37 -25 -55c-56 -35 -5 21 0 42c-60 -75 -8 -45 -10 -66zM860 589c-30 0 6 -15 45 -21c8 7 21 18 29 25c-24 -6 -49 -6 -74 -4z" />
- <glyph glyph-name="newspaper-o" unicode="&#xf1ea;" horiz-adv-x="2048"
-d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960c0 -35 29 -64 64 -64
-s64 29 64 64zM1920 192v1088h-1536v-1088c0 -22 -4 -44 -11 -64h1483c35 0 64 29 64 64zM2048 1408v-1216c0 -106 -86 -192 -192 -192h-1664c-106 0 -192 86 -192 192v1088h256v128h1792z" />
- <glyph glyph-name="building" unicode="&#xf1ad;" horiz-adv-x="1408"
-d="M1344 1536c35 0 64 -29 64 -64v-1664c0 -35 -29 -64 -64 -64h-1280c-35 0 -64 29 -64 64v1664c0 35 29 64 64 64h1280zM512 1248v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM512 992v-64c0 -18 14 -32 32 -32h64
-c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM512 736v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32zM512 480v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32v64c0 18 -14 32 -32 32h-64
-c-18 0 -32 -14 -32 -32zM384 160v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 416v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 672v64
-c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 928v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM384 1184v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64
-c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM896 -96v192c0 18 -14 32 -32 32h-320c-18 0 -32 -14 -32 -32v-192c0 -18 14 -32 32 -32h320c18 0 32 14 32 32zM896 416v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32z
-M896 672v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM896 928v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM896 1184v64c0 18 -14 32 -32 32h-64
-c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 160v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 416v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64
-c18 0 32 14 32 32zM1152 672v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 928v64c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1152 1184v64c0 18 -14 32 -32 32
-h-64c-18 0 -32 -14 -32 -32v-64c0 -18 14 -32 32 -32h64c18 0 32 14 32 32z" />
- <glyph glyph-name="bitbucket" unicode="&#xf171;" horiz-adv-x="1408"
-d="M815 677c11 -84 -91 -150 -162 -107c-80 35 -80 162 -2 198c67 41 164 -13 164 -91zM926 698c-18 142 -179 236 -310 177c-83 -37 -139 -125 -135 -218c5 -122 121 -222 243 -211s217 130 202 252zM1165 1240c-44 58 -119 68 -185 79c-187 30 -379 31 -566 -2
-c-62 -10 -132 -21 -171 -77c64 -60 155 -69 237 -79c148 -19 300 -20 448 -1c83 10 175 18 237 80zM1222 205c-28 -98 -12 -230 -116 -287c-179 -99 -396 -110 -593 -75c-104 19 -226 52 -283 150c-25 96 -41 194 -57 292l6 16l18 9c298 -197 715 -197 1014 0
-c47 -14 12 -71 11 -105zM1403 1166c-34 -219 -73 -437 -111 -655c-11 -64 -73 -100 -125 -127c-187 -94 -405 -110 -610 -88c-139 15 -281 52 -394 139c-53 41 -53 111 -63 170c-35 205 -75 410 -100 617c12 90 113 129 188 157c100 37 207 54 313 64c226 22 457 14 676 -50
-c78 -23 162 -55 215 -122c24 -31 16 -70 11 -105z" />
+ <glyph glyph-name="trash" unicode="&#xf1f8;" horiz-adv-x="1408"
+d="M512 160v704c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-704c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM768 160v704c0 18 -14 32 -32 32h-64c-18 0 -32 -14 -32 -32v-704c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM1024 160v704c0 18 -14 32 -32 32h-64
+c-18 0 -32 -14 -32 -32v-704c0 -18 14 -32 32 -32h64c18 0 32 14 32 32zM480 1152h448l-48 117c-3 4 -12 10 -17 11h-317c-6 -1 -14 -7 -17 -11zM1408 1120v-64c0 -18 -14 -32 -32 -32h-96v-948c0 -110 -72 -204 -160 -204h-832c-88 0 -160 90 -160 200v952h-96
+c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h309l70 167c20 49 80 89 133 89h320c53 0 113 -40 133 -89l70 -167h309c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="trash-o" unicode="&#xf014;" horiz-adv-x="1408"
+d="M512 800v-576c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM768 800v-576c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1024 800v-576c0 -18 -14 -32 -32 -32h-64
+c-18 0 -32 14 -32 32v576c0 18 14 32 32 32h64c18 0 32 -14 32 -32zM1152 76v948h-896v-948c0 -48 27 -76 32 -76h832c5 0 32 28 32 76zM480 1152h448l-48 117c-3 4 -12 10 -17 11h-317c-6 -1 -14 -7 -17 -11zM1408 1120v-64c0 -18 -14 -32 -32 -32h-96v-948
+c0 -110 -72 -204 -160 -204h-832c-88 0 -160 90 -160 200v952h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h309l70 167c20 49 80 89 133 89h320c53 0 113 -40 133 -89l70 -167h309c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="tree" unicode="&#xf1bb;" horiz-adv-x="1472"
+d="M1472 64c0 -35 -29 -64 -64 -64h-462c3 -64 11 -131 11 -196c0 -33 -27 -60 -61 -60h-320c-34 0 -61 27 -61 60c0 65 8 132 11 196h-462c-35 0 -64 29 -64 64c0 17 7 33 19 45l402 403h-229c-35 0 -64 29 -64 64c0 17 7 33 19 45l402 403h-197c-35 0 -64 29 -64 64
+c0 17 7 33 19 45l384 384c12 12 28 19 45 19s33 -7 45 -19l384 -384c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-197l402 -403c12 -12 19 -28 19 -45c0 -35 -29 -64 -64 -64h-229l402 -403c12 -12 19 -28 19 -45z" />
+ <glyph glyph-name="trello" unicode="&#xf181;"
+d="M704 192v1024c0 18 -14 32 -32 32h-480c-18 0 -32 -14 -32 -32v-1024c0 -18 14 -32 32 -32h480c18 0 32 14 32 32zM1376 576v640c0 18 -14 32 -32 32h-480c-18 0 -32 -14 -32 -32v-640c0 -18 14 -32 32 -32h480c18 0 32 14 32 32zM1536 1344v-1408c0 -35 -29 -64 -64 -64
+h-1408c-35 0 -64 29 -64 64v1408c0 35 29 64 64 64h1408c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="tripadvisor" unicode="&#xf262;" horiz-adv-x="2304"
+d="M651 539c0 -52 -42 -94 -93 -94c-52 0 -94 42 -94 94c0 51 42 93 94 93c51 0 93 -42 93 -93zM1805 540c0 -52 -42 -94 -94 -94s-94 42 -94 94s42 93 94 93s94 -41 94 -93zM765 539c0 106 -87 193 -193 193c-107 0 -193 -87 -193 -193c0 -107 86 -193 193 -193
+c106 0 193 86 193 193zM1918 540c0 106 -86 193 -193 193c-106 0 -193 -87 -193 -193c0 -107 87 -193 193 -193c107 0 193 86 193 193zM850 539c0 -154 -124 -279 -278 -279s-279 125 -279 279c0 153 125 278 279 278s278 -125 278 -278zM2004 540
+c0 -154 -125 -278 -279 -278c-153 0 -278 124 -278 278s125 278 278 278c154 0 279 -124 279 -278zM1040 537c0 255 -207 462 -462 462c-254 0 -461 -207 -461 -462s207 -462 461 -462c255 0 462 207 462 462zM1708 1110c-165 72 -351 111 -556 111s-409 -39 -573 -110
+c317 -1 573 -257 573 -574c0 311 247 564 556 573zM2187 537c0 255 -206 462 -461 462s-462 -207 -462 -462s207 -462 462 -462s461 207 461 462zM1921 1103h383c-60 -70 -104 -164 -115 -229c69 -95 110 -211 110 -337c0 -317 -257 -573 -573 -573c-180 0 -340 82 -445 211
+c0 0 -47 -56 -129 -179c-14 29 -85 130 -128 180c-105 -130 -266 -212 -446 -212c-316 0 -573 256 -573 573c0 126 41 242 110 337c-11 65 -55 159 -115 229h365c196 131 481 213 787 213s573 -82 769 -213z" />
+ <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664"
+d="M458 653c-42 92 -74 214 -74 371h-256v-96c0 -98 133 -234 330 -275zM1536 928v96h-256c0 -157 -32 -279 -74 -371c197 41 330 177 330 275zM1664 1056v-128c0 -190 -230 -400 -542 -415c-40 -51 -77 -81 -95 -95c-53 -48 -67 -98 -67 -162s32 -128 128 -128
+s192 -64 192 -160v-64c0 -18 -14 -32 -32 -32h-832c-18 0 -32 14 -32 32v64c0 96 96 160 192 160s128 64 128 128s-14 114 -67 162c-18 14 -55 44 -95 95c-312 15 -542 225 -542 415v128c0 53 43 96 96 96h288v96c0 88 72 160 160 160h576c88 0 160 -72 160 -160v-96h288
+c53 0 96 -43 96 -96z" />
+ <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1728"
+d="M576 128c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM192 640h384v256h-158c-4 0 -19 -6 -22 -9l-195 -195c-3 -3 -9 -18 -9 -22v-30zM1472 128c0 70 -58 128 -128 128s-128 -58 -128 -128s58 -128 128 -128s128 58 128 128zM1728 1216
+v-1024c0 -74 -78 -64 -128 -64c0 -141 -115 -256 -256 -256s-256 115 -256 256h-384c0 -141 -115 -256 -256 -256s-256 115 -256 256h-64c-50 0 -128 -10 -128 64c0 35 29 64 64 64v320c0 71 -10 150 45 205l198 198c25 25 73 45 109 45h160v192c0 35 29 64 64 64h1024
+c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="try" unicode="&#xf195;" horiz-adv-x="1152"
+d="M1152 704c0 -388 -316 -704 -704 -704h-160c-18 0 -32 14 -32 32v611l-215 -66c-3 -1 -6 -1 -9 -1c-7 0 -13 2 -19 6c-8 6 -13 16 -13 26v128c0 14 9 26 23 31l233 71v93l-215 -66c-3 -1 -6 -1 -9 -1c-7 0 -13 2 -19 6c-8 6 -13 16 -13 26v128c0 14 9 26 23 31l233 71
+v250c0 18 14 32 32 32h160c18 0 32 -14 32 -32v-181l375 116c9 3 20 1 28 -5s13 -16 13 -26v-128c0 -14 -9 -26 -23 -31l-393 -121v-93l375 116c9 3 20 1 28 -5s13 -16 13 -26v-128c0 -14 -9 -26 -23 -31l-393 -121v-487c250 17 448 225 448 479c0 18 14 32 32 32h160
+c18 0 32 -14 32 -32z" />
+ <glyph glyph-name="tty" unicode="&#xf1e4;" horiz-adv-x="1792"
+d="M448 224v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM256 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM832 224v-192c0 -18 -14 -32 -32 -32h-192
+c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM640 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM66 768c-37 0 -66 29 -66 65v129h514v-129c0 -36 -29 -65 -65 -65h-383zM1216 224v-192
+c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1024 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1600 224v-192c0 -18 -14 -32 -32 -32h-192
+c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1408 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 1016v-13h-514v10c0 37 -32 104 -382 102c-350 -1 -382 -65 -382 -102v-10h-514v13
+c0 67 120 392 896 392c775 0 896 -325 896 -392zM1792 608v-192c0 -18 -14 -32 -32 -32h-192c-18 0 -32 14 -32 32v192c0 18 14 32 32 32h192c18 0 32 -14 32 -32zM1792 962v-129c0 -36 -29 -65 -65 -65h-384c-36 0 -65 29 -65 65v129h514z" />
+ <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="956"
+d="M876 207l80 -237c-30 -45 -166 -96 -288 -98c-363 -6 -500 258 -500 444v544h-168v215c252 91 313 319 327 449c1 8 8 12 12 12h244v-424h333v-252h-334v-518c0 -70 26 -167 160 -164c44 1 103 14 134 29z" />
+ <glyph glyph-name="tumblr-square" unicode="&#xf174;"
+d="M1136 75l-62 183c-24 -12 -69 -22 -103 -22c-102 -3 -123 71 -123 126v398h257v194h-256v326h-188c-3 0 -8 -3 -9 -10c-11 -99 -58 -275 -252 -345v-165h130v-418c0 -143 105 -347 384 -342c94 2 199 41 222 75zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960
+c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="twitch" unicode="&#xf1e8;" horiz-adv-x="1592"
+d="M796 1102v-434h-145v434h145zM1194 1102v-434h-145v434h145zM1194 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1592 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+ <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1576"
+d="M1576 1128c-44 -64 -99 -121 -162 -167c1 -14 1 -28 1 -42c0 -427 -325 -919 -919 -919c-183 0 -353 53 -496 145c26 -3 51 -4 78 -4c151 0 290 51 401 138c-142 3 -261 96 -302 224c20 -3 40 -5 61 -5c29 0 58 4 85 11c-148 30 -259 160 -259 317v4
+c43 -24 93 -39 146 -41c-87 58 -144 157 -144 269c0 60 16 115 44 163c159 -196 398 -324 666 -338c-5 24 -8 49 -8 74c0 178 144 323 323 323c93 0 177 -39 236 -102c73 14 143 41 205 78c-24 -75 -75 -138 -142 -178c65 7 128 25 186 50z" />
+ <glyph glyph-name="twitter-square" unicode="&#xf081;"
+d="M1280 926c-38 -17 -78 -28 -121 -34c44 26 77 68 93 117c-41 -24 -86 -42 -134 -51c-38 41 -93 66 -153 66c-116 0 -210 -94 -210 -210c0 -16 1 -33 5 -48c-175 9 -330 92 -434 220c-18 -31 -29 -68 -29 -106c0 -73 34 -137 91 -175c-35 1 -68 11 -100 26v-2
+c0 -102 77 -187 173 -206c-18 -5 -32 -8 -51 -8c-13 0 -26 2 -39 4c27 -83 104 -144 196 -146c-72 -56 -162 -90 -261 -90c-17 0 -34 1 -50 3c93 -59 203 -94 322 -94c386 0 598 320 598 598c0 9 0 18 -1 27c41 29 77 66 105 109zM1536 1120v-960
+c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664"
+d="M896 708v-580c0 -139 -117 -256 -256 -256s-256 117 -256 256c0 35 29 64 64 64s64 -29 64 -64c0 -67 61 -128 128 -128s128 61 128 128v580c21 7 42 11 64 11s43 -4 64 -11zM1664 681c0 -17 -15 -32 -32 -32c-9 0 -16 4 -23 10c-58 54 -112 92 -195 92
+c-95 0 -177 -59 -231 -134c-12 -17 -21 -35 -32 -52c-7 -11 -15 -17 -28 -17c-14 0 -22 6 -29 17c-11 17 -20 35 -32 52c-54 75 -135 134 -230 134s-176 -59 -230 -134c-12 -17 -21 -35 -32 -52c-7 -11 -15 -17 -29 -17c-13 0 -21 6 -28 17c-11 17 -20 35 -32 52
+c-54 75 -136 134 -231 134c-83 0 -137 -38 -195 -92c-7 -6 -14 -10 -23 -10c-17 0 -32 15 -32 32c0 3 0 5 1 7c92 378 457 592 831 592c372 0 741 -214 831 -592c1 -2 1 -4 1 -7zM896 1408v-98c-21 1 -43 2 -64 2s-43 -1 -64 -2v98c0 35 29 64 64 64s64 -29 64 -64z" />
+ <glyph glyph-name="underline" unicode="&#xf0cd;"
+d="M48 1313c-18 1 -33 1 -45 4l-3 88c13 1 26 1 40 1c35 0 73 -1 112 -4c94 -5 150 -7 166 -7c57 0 113 1 168 3c54 2 103 4 146 5c42 0 71 1 86 2l-1 -14l2 -64v-9c-40 -6 -81 -9 -124 -9c-40 0 -66 -8 -79 -25c-9 -10 -13 -54 -13 -132c0 -24 1 -43 1 -58l1 -229l14 -280
+c4 -81 20 -148 51 -202c23 -39 55 -70 96 -92c60 -32 119 -47 177 -47c68 0 132 9 191 28c35 11 68 27 99 51c31 23 53 44 65 64c26 40 43 79 53 114c14 49 21 125 21 229c0 179 -13 184 -28 410l-4 59c-3 43 -10 73 -24 88c-22 23 -48 35 -77 34l-100 -2l-14 3l2 86h84
+l205 -10c68 -3 133 3 196 10l18 -2c4 -25 6 -42 6 -51s-2 -19 -4 -31c-27 -7 -55 -12 -84 -13c-47 -7 -74 -12 -79 -17c-9 -9 -15 -22 -15 -41c0 -13 2 -33 3 -58c0 0 8 -18 22 -396c5 -151 -5 -253 -15 -304s-24 -92 -41 -122c-26 -44 -64 -85 -112 -123
+c-49 -37 -109 -67 -182 -89s-158 -33 -255 -33c-110 0 -205 15 -284 46s-139 72 -179 122s-68 115 -83 195c-11 55 -16 134 -16 237v333c0 126 -6 197 -17 213c-16 23 -65 37 -147 39zM1536 -96c0 -18 -14 -32 -32 -32h-1472c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h1472
+c18 0 32 -14 32 -32v-64z" />
+ <glyph glyph-name="undo" unicode="&#xf0e2;"
+d="M1536 640c0 -423 -345 -768 -768 -768c-229 0 -445 101 -591 277c-10 13 -9 32 2 43l137 138c7 6 16 9 25 9c9 -1 18 -5 23 -12c98 -127 245 -199 404 -199c282 0 512 230 512 512s-230 512 -512 512c-131 0 -255 -50 -348 -137l137 -138c19 -18 24 -46 14 -69
+c-10 -24 -33 -40 -59 -40h-448c-35 0 -64 29 -64 64v448c0 26 16 49 40 59c23 10 51 5 69 -14l130 -129c141 133 332 212 529 212c423 0 768 -345 768 -768z" />
+ <glyph glyph-name="unity" unicode="&#xf35e;" horiz-adv-x="1766"
+d="M1649 634l111 -162c5 -9 7 -19 5 -29l-142 -652c-4 -19 -20 -31 -39 -31h-7l-701 121c-14 2 -25 11 -30 24l-71 176h-230c-10 0 -20 4 -27 11l-506 482c-16 15 -16 40 -1 56l481 522c8 8 19 12 30 12h213l70 176c4 11 17 21 28 24l659 161c20 5 40 -6 47 -26l225 -642
+c3 -10 3 -21 -2 -31zM735 1164l-407 -481h675l298 585zM776 81l578 -87l-351 528h-675zM1500 85l149 549l-191 554l-294 -585z" />
+ <glyph glyph-name="universal-access" unicode="&#xf29a;" horiz-adv-x="1792"
+d="M1374 879c-8 34 -42 55 -77 47c-143 -34 -273 -62 -401 -62s-258 28 -401 62c-35 8 -69 -13 -77 -47c-8 -35 13 -69 47 -77c106 -25 205 -47 303 -58c-4 -338 -41 -432 -83 -540l-9 -21c-13 -33 4 -70 37 -83c7 -3 15 -4 23 -4c26 0 50 15 60 41l8 20
+c28 72 54 139 71 259h42c17 -120 43 -187 71 -259l8 -20c10 -26 34 -41 60 -41c8 0 16 1 23 4c33 13 50 50 37 83l-9 21c-42 108 -79 202 -83 540c98 11 197 33 303 58c34 8 55 42 47 77zM1024 1024c0 71 -57 128 -128 128s-128 -57 -128 -128s57 -128 128 -128
+s128 57 128 128zM1600 640c0 -389 -315 -704 -704 -704s-704 315 -704 704s315 704 704 704s704 -315 704 -704zM896 1408c-423 0 -768 -345 -768 -768s345 -768 768 -768s768 345 768 768s-345 768 -768 768zM1792 640c0 -495 -401 -896 -896 -896s-896 401 -896 896
+s401 896 896 896s896 -401 896 -896z" />
+ <glyph glyph-name="university" unicode="&#xf19c;" horiz-adv-x="1920"
+d="M960 1536l960 -384v-128h-128c0 -35 -31 -64 -69 -64h-1526c-38 0 -69 29 -69 64h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59c38 0 69 -29 69 -64v-64h-1664v64c0 35 31 64 69 64h59v768zM1851 -64c38 0 69 -29 69 -64v-128
+h-1920v128c0 35 31 64 69 64h1782z" />
+ <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664"
+d="M1664 960v-256c0 -35 -29 -64 -64 -64h-64c-35 0 -64 29 -64 64v256c0 141 -115 256 -256 256s-256 -115 -256 -256v-192h96c53 0 96 -43 96 -96v-576c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v576c0 53 43 96 96 96h672v192c0 247 201 448 448 448
+s448 -201 448 -448z" />
+ <glyph glyph-name="unlock-alt" unicode="&#xf13e;" horiz-adv-x="1152"
+d="M1056 768c53 0 96 -43 96 -96v-576c0 -53 -43 -96 -96 -96h-960c-53 0 -96 43 -96 96v576c0 53 43 96 96 96h32v320c0 247 201 448 448 448s448 -201 448 -448c0 -35 -29 -64 -64 -64h-64c-35 0 -64 29 -64 64c0 141 -115 256 -256 256s-256 -115 -256 -256v-320h736z
+" />
+ <glyph glyph-name="unslpash" unicode="&#xf325;"
+d="M1052 728h484v-856h-1536v856h484v-428h568v428zM484 1408h568v-428h-568v428z" />
+ <glyph glyph-name="upload" unicode="&#xf093;" horiz-adv-x="1664"
+d="M1280 64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1536 64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1664 288v-320c0 -53 -43 -96 -96 -96h-1472c-53 0 -96 43 -96 96v320c0 53 43 96 96 96h427c27 -74 98 -128 181 -128
+h256c83 0 154 54 181 128h427c53 0 96 -43 96 -96zM1339 936c-10 -24 -33 -40 -59 -40h-256v-448c0 -35 -29 -64 -64 -64h-256c-35 0 -64 29 -64 64v448h-256c-26 0 -49 16 -59 40c-10 23 -5 51 14 69l448 448c12 13 29 19 45 19s33 -6 45 -19l448 -448
+c19 -18 24 -46 14 -69z" />
+ <glyph glyph-name="usb" unicode="&#xf287;" horiz-adv-x="2304"
+d="M2288 731c10 -5 16 -16 16 -27s-6 -22 -16 -27l-320 -192c-5 -3 -10 -5 -16 -5c-5 0 -11 1 -16 4c-10 6 -16 16 -16 28v128h-858c32 -50 59 -109 83 -165c48 -108 97 -219 167 -219h96v96c0 18 14 32 32 32h320c18 0 32 -14 32 -32v-320c0 -18 -14 -32 -32 -32h-320
+c-18 0 -32 14 -32 32v96h-96c-153 0 -222 157 -284 295c-47 107 -96 217 -164 217h-360c-29 -110 -129 -192 -248 -192c-141 0 -256 115 -256 256s115 256 256 256c119 0 219 -82 248 -192h104c68 0 117 110 164 217c62 138 131 295 284 295h107c27 75 97 128 181 128
+c106 0 192 -86 192 -192s-86 -192 -192 -192c-84 0 -154 53 -181 128h-107c-70 0 -119 -111 -167 -219c-24 -56 -51 -115 -83 -165h1114v128c0 12 6 22 16 28s23 5 32 -1z" />
+ <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="932"
+d="M932 351c0 -204 -146 -365 -358 -400v-175c0 -18 -14 -32 -32 -32h-135c-17 0 -32 14 -32 32v175c-234 33 -362 173 -367 179c-10 12 -11 29 -2 41l103 135c5 7 14 11 23 12s18 -2 24 -9c2 -1 142 -135 319 -135c98 0 204 52 204 165c0 96 -118 143 -253 197
+c-180 71 -404 161 -404 412c0 184 144 336 353 376v180c0 18 15 32 32 32h135c18 0 32 -14 32 -32v-176c203 -23 311 -133 315 -137c10 -11 12 -26 5 -38l-81 -146c-5 -9 -13 -15 -23 -16c-10 -2 -19 1 -27 7c-1 1 -122 108 -272 108c-127 0 -215 -63 -215 -154
+c0 -106 122 -153 264 -208c184 -71 392 -152 392 -393z" />
+ <glyph glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280"
+d="M1280 137c0 -146 -96 -265 -213 -265h-854c-117 0 -213 119 -213 265c0 263 65 567 327 567c81 -79 191 -128 313 -128s232 49 313 128c262 0 327 -304 327 -567zM1024 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" />
+ <glyph glyph-name="user-circle" unicode="&#xf2bd;" horiz-adv-x="1792"
+d="M1523 197c-26 187 -102 353 -272 376c-88 -96 -215 -157 -355 -157s-267 61 -355 157c-170 -23 -246 -189 -272 -376c139 -196 368 -325 627 -325s488 129 627 325zM1280 896c0 212 -172 384 -384 384s-384 -172 -384 -384s172 -384 384 -384s384 172 384 384zM1792 640
+c0 -493 -400 -896 -896 -896c-495 0 -896 402 -896 896c0 495 401 896 896 896s896 -401 896 -896z" />
+ <glyph glyph-name="user-circle-o" unicode="&#xf2be;" horiz-adv-x="1792"
+d="M896 1536c495 0 896 -401 896 -896c0 -492 -399 -896 -896 -896c-496 0 -896 403 -896 896c0 495 401 896 896 896zM1515 185c93 128 149 285 149 455c0 423 -345 768 -768 768s-768 -345 -768 -768c0 -170 56 -327 149 -455c36 179 123 327 306 327
+c81 -79 191 -128 313 -128s232 49 313 128c183 0 270 -148 306 -327zM1280 832c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384z" />
+ <glyph glyph-name="user-md" unicode="&#xf0f0;" horiz-adv-x="1408"
+d="M384 192c0 -35 -29 -64 -64 -64s-64 29 -64 64s29 64 64 64s64 -29 64 -64zM1408 131c0 -163 -107 -259 -267 -259h-874c-160 0 -267 96 -267 259c0 199 40 513 278 565c-16 -38 -22 -79 -22 -120v-203c-77 -27 -128 -100 -128 -181c0 -106 86 -192 192 -192
+s192 86 192 192c0 81 -52 154 -128 181v203c0 33 3 66 25 93c84 -66 188 -104 295 -104s211 38 295 104c22 -27 25 -60 25 -93v-64c-141 0 -256 -115 -256 -256v-89c-20 -18 -32 -44 -32 -71c0 -53 43 -96 96 -96s96 43 96 96c0 27 -12 53 -32 71v89c0 70 58 128 128 128
+s128 -58 128 -128v-89c-20 -18 -32 -44 -32 -71c0 -53 43 -96 96 -96s96 43 96 96c0 27 -12 53 -32 71v89c0 91 -49 176 -128 221c0 73 7 151 -22 219c238 -52 278 -366 278 -565zM1088 1024c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384
+s384 -172 384 -384z" />
+ <glyph glyph-name="user-o" unicode="&#xf2c0;"
+d="M1201 752c141 -41 335 -180 335 -635c0 -206 -153 -373 -341 -373h-854c-188 0 -341 167 -341 373c0 455 194 594 335 635c-50 79 -79 172 -79 272c0 282 230 512 512 512s512 -230 512 -512c0 -100 -29 -193 -79 -272zM768 1408c-212 0 -384 -172 -384 -384
+s172 -384 384 -384s384 172 384 384s-172 384 -384 384zM1195 -128c117 0 213 109 213 245c0 315 -106 512 -304 522c-90 -79 -207 -127 -336 -127s-246 48 -336 127c-198 -10 -304 -207 -304 -522c0 -136 96 -245 213 -245h854z" />
+ <glyph glyph-name="user-plus" unicode="&#xf234;" horiz-adv-x="2048"
+d="M704 640c-212 0 -384 172 -384 384s172 384 384 384s384 -172 384 -384s-172 -384 -384 -384zM1664 512h352c17 0 32 -15 32 -32v-192c0 -17 -15 -32 -32 -32h-352v-352c0 -17 -15 -32 -32 -32h-192c-17 0 -32 15 -32 32v352h-352c-17 0 -32 15 -32 32v192
+c0 17 15 32 32 32h352v352c0 17 15 32 32 32h192c17 0 32 -15 32 -32v-352zM928 288c0 -70 58 -128 128 -128h256v-238c-49 -36 -111 -50 -171 -50h-874c-160 0 -267 96 -267 259c0 226 53 573 346 573c16 0 27 -7 39 -17c98 -75 193 -122 319 -122s221 47 319 122
+c12 10 23 17 39 17c85 0 160 -32 217 -96h-223c-70 0 -128 -58 -128 -128v-192z" />
+ <glyph glyph-name="user-secret" unicode="&#xf21b;" horiz-adv-x="1408"
+d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010c-1 2 -2 4 -4 6c-9 7 -81 8 -96 8c-57 0 -111 -8 -167 -19c-7 -2 -14 -2 -21 -2s-14 0 -21 2c-56 11 -110 19 -167 19c-15 0 -87 -1 -96 -8c-2 -2 -3 -4 -4 -6c1 -9 2 -18 4 -27
+c6 -8 11 -5 15 -17c26 -71 38 -126 128 -126c129 0 93 119 135 119h12c42 0 6 -119 135 -119c90 0 102 55 128 126c4 12 9 9 15 17c2 9 3 18 4 27zM1408 131c0 -163 -107 -259 -267 -259h-874c-160 0 -267 96 -267 259c0 181 32 455 218 545l-90 220h214
+c-14 41 -22 84 -22 128c0 11 1 22 2 32c-39 8 -194 40 -194 96c0 59 170 91 210 99c21 75 71 189 122 248c20 23 45 37 76 37c60 0 108 -62 168 -62s108 62 168 62c31 0 56 -14 76 -37c51 -59 101 -173 122 -248c40 -8 210 -40 210 -99c0 -56 -155 -88 -194 -96
+c5 -54 -2 -108 -20 -160h214l-82 -225c179 -93 210 -362 210 -540z" />
+ <glyph glyph-name="user-times" unicode="&#xf235;" horiz-adv-x="2039"
+d="M704 640c-212 0 -384 172 -384 384s172 384 384 384s384 -172 384 -384s-172 -384 -384 -384zM1781 320l249 -249c6 -6 9 -14 9 -23c0 -8 -3 -16 -9 -22l-136 -136c-6 -6 -14 -9 -22 -9c-9 0 -17 3 -23 9l-249 249l-249 -249c-6 -6 -14 -9 -23 -9c-8 0 -16 3 -22 9
+l-136 136c-6 6 -9 14 -9 22c0 9 3 17 9 23l249 249l-249 249c-6 6 -9 14 -9 23c0 8 3 16 9 22l136 136c6 6 14 9 22 9c9 0 17 -3 23 -9l249 -249l249 249c6 6 14 9 23 9c8 0 16 -3 22 -9l136 -136c6 -6 9 -14 9 -22c0 -9 -3 -17 -9 -23zM1283 320l-181 -181
+c-24 -24 -37 -57 -37 -91c0 -33 13 -66 37 -90l83 -83c-14 -2 -29 -3 -44 -3h-874c-160 0 -267 96 -267 259c0 226 53 573 346 573c16 0 27 -7 39 -17c96 -76 194 -122 319 -122s223 46 319 122c12 10 23 17 39 17c19 0 38 -2 57 -6c-33 -32 -54 -58 -54 -106
+c0 -34 13 -67 37 -91z" />
+ <glyph glyph-name="users" unicode="&#xf0c0;" horiz-adv-x="1920"
+d="M593 640c-104 -3 -198 -48 -265 -128h-134c-100 0 -194 48 -194 159c0 81 -3 353 124 353c21 0 125 -85 260 -85c46 0 90 8 133 23c-3 -22 -5 -44 -5 -66c0 -91 29 -181 81 -256zM1664 3c0 -162 -107 -259 -267 -259h-874c-160 0 -267 97 -267 259c0 226 53 573 346 573
+c34 0 158 -139 358 -139s324 139 358 139c293 0 346 -347 346 -573zM640 1280c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256zM1344 896c0 -212 -172 -384 -384 -384s-384 172 -384 384s172 384 384 384s384 -172 384 -384zM1920 671
+c0 -111 -94 -159 -194 -159h-134c-67 80 -161 125 -265 128c52 75 81 165 81 256c0 22 -2 44 -5 66c43 -15 87 -23 133 -23c135 0 239 85 260 85c127 0 124 -272 124 -353zM1792 1280c0 -141 -115 -256 -256 -256s-256 115 -256 256s115 256 256 256s256 -115 256 -256z" />
+ <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1152"
+d="M1152 960c0 -296 -224 -540 -512 -572v-260h224c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-224c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h224v260c-303 33 -535 302 -510 619
+c22 272 238 495 508 525c348 39 642 -232 642 -572zM128 960c0 -247 201 -448 448 -448s448 201 448 448s-201 448 -448 448s-448 -201 -448 -448z" />
+ <glyph glyph-name="venus-double" unicode="&#xf226;" horiz-adv-x="1792"
+d="M1790 1007c25 -317 -207 -586 -510 -619v-260h224c18 0 32 -14 32 -32v-64c0 -18 -14 -32 -32 -32h-224v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-512v-224c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v224h-224c-18 0 -32 14 -32 32v64
+c0 18 14 32 32 32h224v260c-303 33 -535 302 -510 619c22 275 243 500 517 526c140 14 271 -23 377 -94c106 71 237 108 377 94c274 -26 495 -251 517 -526zM896 647c79 81 128 191 128 313s-49 232 -128 313c-79 -81 -128 -191 -128 -313s49 -232 128 -313zM576 512
+c79 0 153 21 218 57c-96 103 -154 240 -154 391s59 288 154 391c-65 36 -139 57 -218 57c-247 0 -448 -201 -448 -448s201 -448 448 -448zM1152 128v260c-94 10 -181 44 -256 94c-75 -50 -162 -84 -256 -94v-260h512zM1216 512c247 0 448 201 448 448s-201 448 -448 448
+c-79 0 -153 -21 -218 -57c95 -103 154 -240 154 -391s-58 -288 -154 -391c65 -36 139 -57 218 -57z" />
+ <glyph glyph-name="venus-mars" unicode="&#xf228;" horiz-adv-x="2048"
+d="M1664 1504c0 18 14 32 32 32h288c35 0 64 -29 64 -64v-288c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v134l-254 -255c98 -123 147 -286 117 -461c-42 -240 -237 -431 -478 -467c-152 -23 -295 14 -409 90c-75 -50 -162 -83 -256 -93v-132h96c18 0 32 -14 32 -32
+v-64c0 -18 -14 -32 -32 -32h-96v-96c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v96h-96c-18 0 -32 14 -32 32v64c0 18 14 32 32 32h96v132c-314 35 -553 323 -506 654c34 249 232 449 480 487c153 23 296 -14 410 -90c92 61 202 97 320 97c136 0 261 -48 359 -126
+l255 254h-134c-18 0 -32 14 -32 32v64zM896 391c79 81 128 191 128 313s-49 232 -128 313c-79 -81 -128 -191 -128 -313s49 -232 128 -313zM128 704c0 -247 201 -448 448 -448c79 0 154 21 218 57c-95 103 -154 240 -154 391s59 288 154 391c-64 36 -139 57 -218 57
+c-247 0 -448 -201 -448 -448zM1216 256c247 0 448 201 448 448s-201 448 -448 448c-79 0 -154 -21 -218 -57c95 -103 154 -240 154 -391s-59 -288 -154 -391c64 -36 139 -57 218 -57z" />
+ <glyph glyph-name="viacoin" unicode="&#xf237;"
+d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+ <glyph glyph-name="viadeo" unicode="&#xf2a9;" horiz-adv-x="1278"
+d="M1050 430c0 -143 -50 -269 -147 -374c-101 -110 -229 -161 -378 -161c-148 0 -277 50 -378 161c-97 105 -147 231 -147 374c0 297 224 540 525 540c62 0 124 -10 182 -31c-20 -39 -34 -82 -39 -126c-45 19 -94 28 -143 28c-227 0 -394 -194 -394 -414
+c0 -224 166 -407 394 -407s393 183 393 407c0 57 -10 113 -32 166c44 9 86 26 123 49c28 -67 41 -140 41 -212zM846 619c0 111 -19 221 -55 326c3 -34 3 -69 3 -103c0 -268 -53 -707 -342 -817c20 -3 41 -5 62 -5l14 1c216 136 318 346 318 598zM791 947v-2
+c-52 153 -124 301 -206 440c126 -85 195 -291 206 -438zM1035 744c-62 0 -117 33 -160 75c102 56 231 143 290 247c7 14 19 40 21 56c-58 -130 -206 -232 -344 -264c-22 34 -35 72 -35 113c0 48 24 112 60 147c41 39 102 59 157 74c80 22 145 84 180 159
+c52 -74 74 -164 74 -253c0 -45 -7 -127 -24 -170c-37 -90 -112 -184 -219 -184z" />
+ <glyph glyph-name="viadeo-square" unicode="&#xf2aa;"
+d="M1050 495c0 50 -9 100 -28 147c-26 -16 -55 -28 -85 -34c16 -36 22 -75 22 -114c0 -154 -114 -280 -270 -280c-157 0 -271 126 -271 280c0 151 115 284 271 284c34 0 67 -6 98 -19c3 30 13 60 27 87c-40 14 -82 21 -125 21c-207 0 -361 -167 -361 -372s155 -367 361 -367
+s361 163 361 367zM872 850c25 -72 38 -148 38 -225c0 -173 -71 -317 -219 -411h-10c-14 0 -28 1 -42 3c199 76 235 377 235 562c0 23 0 47 -2 71zM872 850c-5 97 -60 247 -142 302c56 -95 106 -197 142 -302zM1207 955c0 61 -15 123 -51 174c-24 -51 -69 -94 -124 -109
+c-79 -22 -149 -59 -149 -153c0 -27 9 -54 24 -77c95 22 196 92 236 182c-6 -80 -155 -177 -213 -209c29 -29 67 -52 110 -52c73 0 125 65 150 127c12 30 17 86 17 117zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288
+h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="video-camera" unicode="&#xf03d;" horiz-adv-x="1792"
+d="M1792 1184v-1088c0 -26 -16 -49 -39 -59c-8 -3 -17 -5 -25 -5c-17 0 -33 6 -45 19l-403 403v-166c0 -159 -129 -288 -288 -288h-704c-159 0 -288 129 -288 288v704c0 159 129 288 288 288h704c159 0 288 -129 288 -288v-165l403 402c12 13 28 19 45 19c8 0 17 -2 25 -5
+c23 -10 39 -33 39 -59z" />
+ <glyph glyph-name="vimeo" unicode="&#xf27d;" horiz-adv-x="1628"
+d="M1627 1018c-7 -158 -118 -375 -332 -651c-222 -287 -408 -431 -562 -431c-95 0 -175 88 -240 263c-44 160 -88 321 -132 482c-48 175 -101 262 -157 262c-12 0 -54 -25 -127 -76l-77 98c80 71 159 143 238 212c106 94 187 141 241 146c127 12 204 -74 234 -259
+c31 -200 54 -325 66 -373c37 -166 76 -249 120 -249c34 0 85 53 154 161c68 108 104 190 109 246c9 93 -27 139 -109 139c-39 0 -79 -9 -121 -26c80 262 233 389 459 382c167 -5 246 -114 236 -326z" />
+ <glyph glyph-name="vimeo-square" unicode="&#xf194;"
+d="M1292 898c7 145 -47 218 -161 222c-154 5 -258 -82 -312 -261c28 12 55 19 82 19c56 0 81 -32 74 -96c-3 -38 -28 -94 -74 -167c-47 -74 -82 -110 -105 -110c-30 0 -56 56 -82 169c-8 34 -23 118 -45 255c-20 126 -73 185 -160 177c-36 -4 -92 -36 -164 -100
+c-54 -47 -107 -96 -162 -144l52 -67c50 34 79 52 87 52c38 0 74 -60 107 -179c30 -110 60 -219 90 -329c45 -119 99 -179 164 -179c104 0 232 98 383 294c146 188 222 336 226 444zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960
+c0 159 129 288 288 288h960c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="vine" unicode="&#xf1ca;" horiz-adv-x="1458"
+d="M1458 709v-198c-70 -16 -140 -23 -198 -23c-140 -294 -391 -546 -475 -593c-53 -30 -103 -32 -162 3c-103 62 -493 382 -623 1388h283c71 -604 245 -914 436 -1146c106 106 208 247 287 406c-189 96 -304 307 -304 553c0 249 143 437 388 437c238 0 368 -148 368 -403
+c0 -95 -20 -203 -58 -286c0 0 -176 -35 -241 78c13 43 31 117 31 184c0 119 -43 177 -108 177c-69 0 -117 -65 -117 -190c0 -255 162 -401 372 -401c37 0 79 4 121 14z" />
+ <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1921"
+d="M1918 1016c15 -41 -32 -137 -150 -294c-194 -258 -215 -234 -55 -383c154 -143 186 -212 191 -221c0 0 64 -112 -71 -113l-256 -4c-55 -11 -128 39 -128 39c-96 66 -186 237 -256 215c0 0 -72 -23 -70 -177c1 -33 -15 -51 -15 -51s-18 -19 -53 -22h-115
+c-253 -16 -476 217 -476 217s-244 252 -458 755c-14 33 1 49 1 49s15 19 57 19l274 2c26 -4 44 -18 44 -18s16 -11 24 -32c45 -112 103 -214 103 -214c100 -206 168 -241 207 -220c0 0 51 31 40 280c-4 90 -29 131 -29 131c-23 31 -66 40 -85 43c-15 2 10 38 43 54
+c49 24 136 25 239 24c81 -1 104 -6 135 -13c95 -23 63 -111 63 -323c0 -68 -13 -163 36 -194c21 -14 73 -2 201 216c0 0 60 104 107 225c8 22 25 31 25 31s16 9 38 6l288 2c87 11 101 -29 101 -29z" />
+ <glyph glyph-name="volume-control-phone" unicode="&#xf2a0;" horiz-adv-x="1408"
+d="M617 -153c0 -34 -90 -84 -119 -95c-15 -6 -30 -8 -45 -8c-33 0 -66 9 -98 18c-164 49 -203 149 -268 290c-70 151 -87 295 -87 460s17 309 87 460c65 141 104 241 268 290c32 9 65 18 98 18c15 0 30 -2 45 -8c29 -11 119 -61 119 -95c0 -24 -53 -194 -64 -234
+c-6 -25 -8 -66 -27 -84c-13 -12 -34 -14 -51 -14c-47 0 -94 11 -141 11c-14 0 -35 -1 -47 -11c-16 -13 -24 -58 -30 -78c-24 -83 -37 -168 -37 -255s13 -172 37 -255c6 -20 14 -65 30 -78c12 -10 33 -11 47 -11c47 0 94 11 141 11c17 0 38 -2 51 -14c19 -18 21 -59 27 -84
+c11 -40 64 -210 64 -234zM776 760c-17 0 -33 7 -45 19c-25 25 -26 66 0 91c24 24 37 56 37 90s-13 66 -37 91c-26 25 -25 65 0 90s65 25 90 0c48 -48 75 -113 75 -181s-27 -133 -75 -181c-13 -12 -29 -19 -45 -19zM957 579c-17 0 -33 6 -45 19c-25 25 -25 65 0 90
+c72 73 112 169 112 272s-40 199 -112 272c-25 25 -25 65 0 90s65 25 90 0c97 -97 150 -225 150 -362s-53 -265 -150 -362c-12 -13 -29 -19 -45 -19zM1138 398c-17 0 -33 6 -45 19c-25 25 -25 65 0 90c120 121 187 282 187 453s-67 332 -187 453c-25 25 -25 65 0 90
+s65 25 90 0c145 -145 225 -338 225 -543s-80 -398 -225 -543c-12 -13 -29 -19 -45 -19z" />
+ <glyph glyph-name="volume-down" unicode="&#xf027;" horiz-adv-x="1152"
+d="M768 1184v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19c35 0 64 -29 64 -64zM1152 640c0 -100 -61 -197 -155 -235c-8 -4 -17 -5 -25 -5c-35 0 -64 28 -64 64
+c0 76 116 55 116 176s-116 100 -116 176c0 36 29 64 64 64c8 0 17 -1 25 -5c94 -37 155 -135 155 -235z" />
+ <glyph glyph-name="volume-mute" unicode="&#xf32f;" horiz-adv-x="1494"
+d="M704 1248c35 0 64 -29 64 -64v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19zM1000 942v0c6 0 15 -4 20 -9l173 -173l173 173c11 11 29 11 40 0l80 -80c11 -11 11 -29 0 -40
+l-173 -173l173 -173c11 -11 11 -29 0 -40l-80 -80c-11 -11 -29 -11 -40 0l-173 173l-173 -173c-11 -11 -29 -11 -40 0l-81 80c-11 11 -11 29 0 40l174 173l-174 173c-11 11 -11 29 0 40l81 80c6 6 13 9 20 9z" />
+ <glyph glyph-name="volume-off" unicode="&#xf026;" horiz-adv-x="768"
+d="M768 1184v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19c35 0 64 -29 64 -64z" />
+ <glyph glyph-name="volume-up" unicode="&#xf028;" horiz-adv-x="1664"
+d="M768 1184v-1088c0 -35 -29 -64 -64 -64c-17 0 -33 7 -45 19l-333 333h-262c-35 0 -64 29 -64 64v384c0 35 29 64 64 64h262l333 333c12 12 28 19 45 19c35 0 64 -29 64 -64zM1152 640c0 -100 -61 -197 -155 -235c-8 -4 -17 -5 -25 -5c-35 0 -64 28 -64 64
+c0 76 116 55 116 176s-116 100 -116 176c0 36 29 64 64 64c8 0 17 -1 25 -5c94 -37 155 -135 155 -235zM1408 640c0 -203 -122 -392 -310 -471c-8 -3 -17 -5 -25 -5c-36 0 -65 29 -65 64c0 28 16 47 39 59c27 14 52 26 76 44c99 72 157 187 157 309s-58 237 -157 309
+c-24 18 -49 30 -76 44c-23 12 -39 31 -39 59c0 35 29 64 64 64c9 0 18 -2 26 -5c188 -79 310 -268 310 -471zM1664 640c0 -307 -183 -585 -465 -706c-8 -3 -17 -5 -26 -5c-35 0 -64 29 -64 64c0 29 15 45 39 59c14 8 30 13 45 21c28 15 56 32 82 51c164 121 261 312 261 516
+s-97 395 -261 516c-26 19 -54 36 -82 51c-15 8 -31 13 -45 21c-24 14 -39 30 -39 59c0 35 29 64 64 64c9 0 18 -2 26 -5c282 -121 465 -399 465 -706z" />
+ <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792"
+d="M675 252c28 46 13 99 -34 119c-45 19 -105 -1 -133 -45c-29 -45 -15 -98 30 -119c46 -21 108 -1 137 45zM769 373c10 18 4 38 -14 45c-18 6 -40 -2 -50 -19c-10 -18 -5 -37 13 -45c18 -7 41 1 51 19zM943 266c-60 -136 -234 -210 -382 -162c-143 46 -203 187 -141 314
+c62 124 221 194 362 158c147 -38 221 -176 161 -310zM1255 426c-19 195 -275 329 -572 300c-297 -30 -521 -211 -502 -406s275 -329 572 -300c297 30 521 211 502 406zM1563 422c0 -225 -324 -508 -811 -508c-372 0 -752 180 -752 477c0 155 98 334 267 503
+c226 226 489 328 588 229c44 -43 48 -119 20 -209c-14 -46 43 -20 43 -21c182 77 341 81 399 -2c31 -44 28 -106 0 -178c-13 -33 4 -38 29 -46c103 -32 217 -109 217 -245zM1489 1046c57 -63 73 -150 48 -226c-10 -31 -43 -48 -74 -38s-48 43 -38 74c12 38 4 80 -24 111
+s-69 43 -107 35c-32 -7 -64 13 -70 45c-7 32 13 63 45 70c78 17 163 -7 220 -71zM1670 1209c118 -130 149 -308 99 -464c-12 -36 -50 -56 -86 -44s-56 50 -45 86c36 111 14 238 -70 330c-84 93 -207 128 -321 104c-37 -8 -74 16 -82 53s16 73 53 81c161 34 334 -15 452 -146
+z" />
+ <glyph glyph-name="weixin" unicode="&#xf1d7;" horiz-adv-x="2048"
+d="M580 1075c0 55 -36 91 -91 91c-54 0 -109 -36 -109 -91c0 -54 55 -90 109 -90c55 0 91 36 91 90zM1323 568c0 36 -36 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c55 0 91 36 91 73zM1087 1075c0 55 -36 91 -90 91c-55 0 -109 -36 -109 -91
+c0 -54 54 -90 109 -90c54 0 90 36 90 90zM1722 568c0 36 -37 72 -91 72c-36 0 -72 -36 -72 -72c0 -37 36 -73 72 -73c54 0 91 36 91 73zM1456 965c-23 3 -46 4 -70 4c-344 0 -616 -257 -616 -573c0 -53 8 -104 23 -152c-23 -2 -45 -3 -68 -3c-91 0 -163 18 -254 36
+l-253 -127l72 218c-181 127 -290 291 -290 490c0 345 326 616 725 616c356 0 669 -217 731 -509zM2048 404c0 -163 -108 -308 -254 -417l55 -181l-199 109c-73 -18 -146 -37 -218 -37c-345 0 -616 236 -616 526s271 526 616 526c326 0 616 -236 616 -526z" />
+ <glyph glyph-name="whatsapp" unicode="&#xf232;"
+d="M985 562c17 0 180 -85 187 -97c2 -5 2 -11 2 -15c0 -25 -8 -53 -17 -76c-23 -56 -116 -92 -173 -92c-48 0 -147 42 -190 62c-143 65 -232 176 -318 303c-38 56 -72 125 -71 194v8c2 66 26 113 74 158c15 14 31 22 52 22c12 0 24 -3 37 -3c27 0 32 -8 42 -34
+c7 -17 58 -153 58 -163c0 -38 -69 -81 -69 -104c0 -5 2 -10 5 -15c22 -47 64 -101 102 -137c46 -44 95 -73 151 -101c7 -4 14 -7 22 -7c30 0 80 97 106 97zM782 32c346 0 628 282 628 628s-282 628 -628 628s-628 -282 -628 -628c0 -132 42 -261 120 -368l-79 -233l242 77
+c102 -67 223 -104 345 -104zM782 1414c416 0 754 -338 754 -754s-338 -754 -754 -754c-127 0 -253 32 -365 94l-417 -134l136 405c-71 117 -108 252 -108 389c0 416 338 754 754 754z" />
+ <glyph glyph-name="wheelchair" unicode="&#xf193;" horiz-adv-x="1629"
+d="M1023 349l102 -204c-77 -238 -299 -401 -549 -401c-317 0 -576 259 -576 576c0 242 152 458 379 541l17 -131c-163 -72 -268 -232 -268 -410c0 -247 201 -448 448 -448c257 0 465 220 447 477zM1571 249l58 -114l-256 -128c-9 -5 -19 -7 -29 -7c-24 0 -47 14 -57 35
+l-239 477h-472c-32 0 -60 25 -64 57l-96 779c-1 10 3 32 6 42c19 69 83 114 154 114c88 0 160 -72 160 -160c0 -91 -80 -169 -172 -159l37 -289h423v-128h-407l16 -128h455c24 0 47 -14 57 -35l228 -455z" />
+ <glyph glyph-name="wheelchair-alt" unicode="&#xf29b;" horiz-adv-x="1399"
+d="M1370 723c21 -22 32 -52 29 -82l-44 -551c-5 -56 -51 -98 -106 -98c-3 0 -6 0 -9 1c-59 4 -102 56 -98 114l35 429l-143 -8c35 -72 55 -154 55 -240c0 -144 -56 -275 -148 -372l-137 137c56 62 91 145 91 235c0 194 -157 351 -350 351c-91 0 -173 -35 -236 -92l-137 138
+c77 73 175 123 284 141l264 300l-149 87l-181 -161c-44 -40 -111 -36 -150 8s-35 111 8 150l239 213c34 31 84 36 124 12c487 -283 488 -283 488 -283c26 -15 41 -41 48 -68c10 -39 3 -83 -26 -117l-205 -232l371 20c31 2 61 -9 83 -32zM1172 1180c-98 0 -178 79 -178 178
+c0 98 80 178 178 178c99 0 179 -80 179 -178c0 -99 -80 -178 -179 -178zM545 -62c72 0 140 23 196 61l139 -139c-92 -73 -209 -116 -335 -116c-301 0 -545 244 -545 544c0 127 43 243 116 336l139 -139c-38 -56 -60 -124 -60 -197c0 -193 157 -350 350 -350z" />
+ <glyph glyph-name="wifi" unicode="&#xf1eb;" horiz-adv-x="1964"
+d="M982 13c-26 0 -166 140 -166 167c0 49 128 76 166 76s166 -27 166 -76c0 -27 -140 -167 -166 -167zM1252 284c-14 0 -123 100 -270 100c-148 0 -255 -100 -270 -100c-24 0 -169 144 -169 168c0 9 4 17 10 23c107 106 281 165 429 165s322 -59 429 -165
+c6 -6 10 -14 10 -23c0 -24 -145 -168 -169 -168zM1525 556c-8 0 -17 4 -23 8c-165 128 -304 204 -520 204c-302 0 -532 -212 -543 -212c-23 0 -167 144 -167 168c0 8 4 16 10 22c179 179 449 278 700 278s521 -99 700 -278c6 -6 10 -14 10 -22c0 -24 -144 -168 -167 -168z
+M1796 827c-8 0 -16 4 -22 9c-231 203 -480 316 -792 316s-561 -113 -792 -316c-6 -5 -14 -9 -22 -9c-23 0 -168 144 -168 168c0 9 4 17 10 23c253 251 618 390 972 390s719 -139 972 -390c6 -6 10 -14 10 -23c0 -24 -145 -168 -168 -168z" />
+ <glyph glyph-name="wikidata" unicode="&#xf31a;" horiz-adv-x="2048"
+d="M0 1264h76v-1264h-76v1264zM152 1264h227v-1264h-227v1264zM455 1264h228v-1264h-228v1264zM759 1264h75v-1264h-75v1264zM910 1264h76v-1264h-76v1264zM1820 1264h76v-1264h-76v1264zM1972 1264h76v-1264h-76v1264zM1062 1264h227v-1264h-227v1264zM1365 1264h76v-1264
+h-76v1264zM1517 1264h228v-1264h-228v1264z" />
+ <glyph glyph-name="wikipedia-w" unicode="&#xf266;" horiz-adv-x="2304"
+d="M1494 -103l-295 695c-117 -229 -246 -468 -357 -695c-1 -1 -54 0 -54 1c-169 395 -346 787 -515 1183c-41 96 -178 252 -272 251c0 11 -1 36 -1 51h583v-50c-69 -4 -190 -48 -156 -123c79 -179 373 -865 452 -1039c54 107 208 393 271 514c-50 102 -211 482 -262 576
+c-35 64 -130 70 -201 71v50l513 -1v-47c-70 -2 -137 -28 -106 -94c68 -144 110 -245 173 -377c20 39 125 250 173 363c32 74 -14 103 -139 106c1 13 0 37 1 49c160 1 400 1 443 2v-49c-81 -3 -165 -46 -209 -114l-213 -442c23 -58 228 -514 249 -564l441 1017
+c-31 83 -131 101 -170 102v50l460 -4l1 -2l-1 -44c-101 -3 -162 -57 -201 -145c-90 -208 -372 -864 -559 -1291h-49z" />
+ <glyph glyph-name="window-close" unicode="&#xf2d3;" horiz-adv-x="1792"
+d="M1175 215l146 146c13 13 13 33 0 46l-233 233l233 233c13 13 13 33 0 46l-146 146c-13 13 -33 13 -46 0l-233 -233l-233 233c-13 13 -33 13 -46 0l-146 -146c-13 -13 -13 -33 0 -46l233 -233l-233 -233c-13 -13 -13 -33 0 -46l146 -146c13 -13 33 -13 46 0l233 233
+l233 -233c13 -13 33 -13 46 0zM1792 1248v-1216c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="window-close-o" unicode="&#xf2d4;" horiz-adv-x="1792"
+d="M1257 425l-146 -146c-13 -13 -33 -13 -46 0l-169 169l-169 -169c-13 -13 -33 -13 -46 0l-146 146c-13 13 -13 33 0 46l169 169l-169 169c-13 13 -13 33 0 46l146 146c13 13 33 13 46 0l169 -169l169 169c13 13 33 13 46 0l146 -146c13 -13 13 -33 0 -46l-169 -169
+l169 -169c13 -13 13 -33 0 -46zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="window-maximize" unicode="&#xf2d0;" horiz-adv-x="1792"
+d="M256 128h1280v768h-1280v-768zM1792 1248v-1216c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v1216c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="window-minimize" unicode="&#xf2d1;" horiz-adv-x="1792"
+d="M1792 224v-192c0 -88 -72 -160 -160 -160h-1472c-88 0 -160 72 -160 160v192c0 88 72 160 160 160h1472c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="window-restore" unicode="&#xf2d2;" horiz-adv-x="2048"
+d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96c88 0 160 -72 160 -160v-352zM2048 1376v-960c0 -88 -72 -160 -160 -160h-608v-352c0 -88 -72 -160 -160 -160h-960c-88 0 -160 72 -160 160v960c0 88 72 160 160 160h608v352c0 88 72 160 160 160h960
+c88 0 160 -72 160 -160z" />
+ <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664"
+d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+ <glyph glyph-name="wire" unicode="&#xf32c;" horiz-adv-x="1792"
+d="M1792 457c0 -305 -247 -552 -552 -553c-124 0 -244 42 -341 119c-83 -66 -237 -119 -343 -119v0c-305 0 -556 248 -556 553v870h105v-869c1 -248 203 -449 451 -448c96 0 188 31 265 88c-87 100 -135 228 -136 360v711c2 116 99 209 215 207c113 -2 205 -94 207 -207
+v-711c1 -132 -47 -260 -133 -360c198 -147 478 -106 625 92c57 77 89 171 88 268v869h105v-870zM1001 1169c0 58 -46 106 -105 106c-58 0 -105 -47 -105 -106v-711c0 -105 37 -207 105 -288c68 81 105 183 105 288v711z" />
+ <glyph glyph-name="wordpress" unicode="&#xf19a;" horiz-adv-x="1792"
+d="M127 640c0 111 24 217 67 313l367 -1005c-257 125 -434 388 -434 692zM1415 679c0 -66 -27 -142 -59 -249l-76 -256l-278 826s46 3 88 8c41 5 36 66 -5 63c-125 -9 -205 -10 -205 -10s-75 1 -202 10c-42 3 -47 -60 -5 -63c39 -4 80 -8 80 -8l120 -328l-168 -504l-280 832
+s46 3 88 8c41 5 36 66 -5 63c-124 -9 -205 -10 -205 -10c-14 0 -31 1 -49 1c137 209 373 347 642 347c200 0 382 -77 519 -202h-10c-75 0 -129 -65 -129 -136c0 -63 37 -116 76 -180c30 -51 63 -117 63 -212zM909 573l237 -647c1 -4 3 -8 5 -11c-80 -28 -165 -44 -255 -44
+c-75 0 -148 11 -217 32zM1570 1009c60 -110 95 -235 95 -369c0 -284 -154 -531 -383 -664l235 678c39 112 59 198 59 276c0 28 -2 54 -6 79zM896 1536c494 0 896 -402 896 -896s-402 -896 -896 -896s-896 402 -896 896s402 896 896 896zM896 -215c471 0 855 384 855 855
+s-384 855 -855 855s-855 -384 -855 -855s384 -855 855 -855z" />
+ <glyph glyph-name="wpbeginner" unicode="&#xf297;" horiz-adv-x="1792"
+d="M384 704h160v224h-160v-224zM1221 372v92c-86 -30 -157 -37 -243 -38c-193 -1 -364 79 -480 169l1 -96c109 -99 276 -177 484 -176c87 0 169 18 238 49zM640 704h640v224h-640v-224zM1792 736c0 -127 -36 -247 -99 -352c56 -64 89 -143 89 -229
+c0 -209 -198 -379 -443 -379c-166 0 -310 78 -386 193c-19 -1 -38 -1 -57 -1s-38 0 -57 1c-76 -115 -220 -193 -386 -193c-245 0 -443 170 -443 379c0 86 33 165 89 229c-63 105 -99 225 -99 352c0 424 401 768 896 768s896 -344 896 -768z" />
+ <glyph glyph-name="wpexplorer" unicode="&#xf2de;" horiz-adv-x="1792"
+d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640c0 432 -352 784 -784 784s-784 -352 -784 -784
+s352 -784 784 -784s784 352 784 784zM1792 640c0 -494 -402 -896 -896 -896s-896 402 -896 896s402 896 896 896s896 -402 896 -896z" />
+ <glyph glyph-name="wpforms" unicode="&#xf298;"
+d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240c0 11 -9 20 -20 20h-32l-378 -256l-210 171l-210 -171l-378 256h-32c-11 0 -20 -9 -20 -20v-1240
+c0 -11 9 -20 20 -20h1240c11 0 20 9 20 20zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240c0 -82 -66 -148 -148 -148h-1240c-82 0 -148 66 -148 148v1240c0 82 66 148 148 148h1240c82 0 148 -66 148 -148z" />
+ <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1641"
+d="M363 64c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1007 484l-682 -682c-23 -23 -56 -37 -90 -37s-67 14 -91 37l-106 108c-24 23 -38 56 -38 90s14 67 38 91l681 681c52 -131 157 -236 288 -288zM1641 919c0 -33 -12 -74 -23 -106
+c-63 -178 -234 -301 -423 -301c-247 0 -448 201 -448 448s201 448 448 448c73 0 168 -22 229 -63c10 -7 16 -16 16 -28c0 -11 -7 -22 -16 -28l-293 -169v-224l193 -107c33 19 265 165 285 165s32 -15 32 -35z" />
+ <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408"
+d="M597 869c0 0 -10 -17 -257 -456c-13 -22 -30 -46 -65 -46h-239c-14 0 -25 7 -31 17s-7 23 0 36l253 448c1 0 1 0 0 1l-161 279c-7 13 -8 27 -1 37c6 10 18 15 32 15h239c36 0 54 -24 66 -45c163 -285 164 -286 164 -286zM1403 1511c7 -10 7 -24 0 -37l-528 -934
+c-1 0 -1 -1 0 -1l336 -615c7 -13 7 -27 1 -37c-7 -10 -18 -15 -32 -15h-239c-36 0 -55 24 -66 45c-339 621 -339 622 -339 622s17 30 531 942c13 23 28 45 64 45h241c14 0 25 -5 31 -15z" />
+ <glyph glyph-name="xing-square" unicode="&#xf169;"
+d="M685 771c0 0 0 1 -126 222c-10 16 -24 34 -52 34h-184c-12 0 -21 -4 -26 -11c-5 -8 -4 -19 1 -29l125 -216v-1l-196 -346c-6 -10 -5 -20 0 -28s13 -13 24 -13h185c27 0 41 19 50 36c192 339 199 352 199 352zM1309 1268c-5 8 -13 12 -24 12h-187c-27 0 -39 -17 -49 -35
+c-398 -706 -411 -729 -411 -729s0 -1 262 -481c9 -16 23 -35 52 -35h184c11 0 20 4 25 12s5 18 -1 28l-260 476v1l409 723c5 10 5 20 0 28zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960
+c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="xmpp" unicode="&#xf2f9;" horiz-adv-x="1542"
+d="M1536 1314c47 -398 -206 -904 -657 -1199c122 -101 261 -177 414 -216v-27c-165 14 -320 59 -461 128l-30 15l-1 1l-6 3c-11 6 -30 16 -41 22c-94 -51 -193 -90 -297 -116c-68 -19 -139 -33 -211 -42v28c145 37 279 107 396 201c-426 296 -682 805 -637 1192l93 -33v0
+l273 -81c-1 -16 -1 -32 -1 -49c0 -296 147 -656 394 -917c254 262 406 628 406 929c0 17 0 33 -1 49l274 81z" />
+ <glyph glyph-name="y-combinator" unicode="&#xf23b;"
+d="M809 532l266 499h-112l-157 -312s-24 -48 -44 -92c-19 46 -42 92 -42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+ <glyph glyph-name="yahoo" unicode="&#xf19e;" horiz-adv-x="1318"
+d="M750 579l13 -707c-34 6 -69 11 -105 11c-35 0 -70 -5 -105 -11l13 707c-186 321 -361 648 -566 957c35 -9 71 -15 108 -15s75 7 111 15c140 -248 292 -489 439 -733c148 242 305 483 439 733c35 -9 71 -14 107 -14c38 0 77 5 114 14c-80 -110 -146 -230 -215 -347
+c-119 -203 -236 -406 -353 -610z" />
<glyph glyph-name="yelp" unicode="&#xf1e9;" horiz-adv-x="1366"
d="M688 217v-127c-1 -282 -1 -292 -6 -305c-8 -21 -26 -35 -51 -40c-72 -12 -297 71 -344 127c-10 11 -15 24 -17 36c-1 9 1 18 4 26c5 14 14 25 215 263c0 0 1 0 60 70c20 25 56 33 89 21c33 -13 51 -41 50 -71zM539 468c-2 -35 -22 -61 -52 -70l-120 -39
c-269 -86 -278 -88 -292 -88c-22 1 -42 14 -54 36c-8 16 -14 43 -17 75c-11 98 2 245 31 291c14 22 34 33 56 32c15 0 27 -6 317 -124c0 0 -1 -1 84 -34c30 -12 49 -43 47 -79zM1365 171c-10 -72 -159 -261 -227 -288c-23 -9 -46 -7 -63 7c-12 9 -24 27 -184 287l-47 77
c-18 28 -15 64 8 92c22 27 54 36 83 26c0 0 1 -1 119 -40c269 -88 278 -91 289 -100c18 -14 26 -35 22 -61zM693 803c5 -104 -39 -117 -54 -122c-14 -4 -58 -17 -114 71c-368 581 -378 598 -378 598c-5 21 1 44 19 62c55 57 354 141 432 121c25 -6 43 -22 49 -45
c4 -25 40 -564 46 -685zM1355 695c2 -25 -7 -46 -26 -59c-12 -8 -24 -12 -329 -86c-49 -11 -76 -18 -91 -23l1 2c-30 -8 -64 6 -83 36s-18 63 0 87c0 0 1 1 75 102c164 224 172 235 184 243c19 13 42 13 65 2c65 -31 196 -226 204 -301v-3z" />
- <glyph glyph-name="neuter" unicode="&#xf22c;" horiz-adv-x="1152"
-d="M1152 960c0 -296 -224 -540 -512 -572v-612c0 -18 -14 -32 -32 -32h-64c-18 0 -32 14 -32 32v612c-288 32 -512 276 -512 572c0 318 258 576 576 576s576 -258 576 -576zM576 512c247 0 448 201 448 448s-201 448 -448 448s-448 -201 -448 -448s201 -448 448 -448z" />
- <glyph glyph-name="behance-square" unicode="&#xf1b5;"
-d="M1248 1408c159 0 288 -129 288 -288v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960zM499 1041h-371v-787h382c143 0 277 68 277 228c0 99 -47 172 -143 200c70 34 107 85 107 164c0 157 -117 195 -252 195zM477 723
-h-176v184h163c62 0 119 -17 119 -90c0 -67 -44 -94 -106 -94zM486 388h-185v217h189c76 0 124 -33 124 -113s-57 -104 -128 -104zM1136 356c-92 0 -140 54 -140 145h411c1 10 1 20 1 30c0 168 -99 309 -278 309c-173 0 -292 -131 -292 -302c0 -178 112 -299 292 -299
-c137 0 225 61 267 191h-138c-15 -48 -76 -74 -123 -74zM1126 722c78 0 117 -47 124 -122h-254c5 75 55 122 130 122zM964 988v-77h319v77h-319z" />
- <glyph glyph-name="wifi" unicode="&#xf1eb;" horiz-adv-x="1964"
-d="M982 13c-26 0 -166 140 -166 167c0 49 128 76 166 76s166 -27 166 -76c0 -27 -140 -167 -166 -167zM1252 284c-14 0 -123 100 -270 100c-148 0 -255 -100 -270 -100c-24 0 -169 144 -169 168c0 9 4 17 10 23c107 106 281 165 429 165s322 -59 429 -165
-c6 -6 10 -14 10 -23c0 -24 -145 -168 -169 -168zM1525 556c-8 0 -17 4 -23 8c-165 128 -304 204 -520 204c-302 0 -532 -212 -543 -212c-23 0 -167 144 -167 168c0 8 4 16 10 22c179 179 449 278 700 278s521 -99 700 -278c6 -6 10 -14 10 -22c0 -24 -144 -168 -167 -168z
-M1796 827c-8 0 -16 4 -22 9c-231 203 -480 316 -792 316s-561 -113 -792 -316c-6 -5 -14 -9 -22 -9c-23 0 -168 144 -168 168c0 9 4 17 10 23c253 251 618 390 972 390s719 -139 972 -390c6 -6 10 -14 10 -23c0 -24 -145 -168 -168 -168z" />
+ <glyph glyph-name="yoast" unicode="&#xf2b1;" horiz-adv-x="1664"
+d="M339 1318h691l-26 -72h-665c-147 0 -267 -121 -267 -268v-771c0 -126 90 -237 214 -263c32 -7 65 -5 98 -5v-72h-45c-187 0 -339 153 -339 340v771c0 187 152 340 339 340zM1190 1536h247l-482 -1294c-90 -240 -199 -490 -495 -498v195c111 18 182 79 220 182
+c13 34 20 69 20 105s-7 72 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795c16 24 33 47 45 73h678v1038c0 114 -72 216 -179 254l25 67c136 -46 226 -178 226 -321z" />
<glyph glyph-name="youtube" unicode="&#xf167;" horiz-adv-x="1482"
d="M944 292v-211c0 -45 -13 -67 -39 -67c-15 0 -30 7 -45 22v301c15 15 30 22 45 22c26 0 39 -23 39 -67zM1282 291v-46h-90v46c0 45 15 68 45 68s45 -23 45 -68zM316 509h107v94h-312v-94h105v-569h100v569zM604 -60h89v494h-89v-378c-20 -28 -39 -42 -57 -42
c-12 0 -19 7 -21 21c-1 3 -1 14 -1 35v364h-89v-391c0 -35 3 -58 8 -73c8 -25 29 -37 58 -37c32 0 66 20 102 61v-54zM1033 88v197c0 46 -2 79 -9 99c-11 37 -36 56 -71 56c-33 0 -64 -18 -93 -54v217h-89v-663h89v48c30 -37 61 -55 93 -55c35 0 60 19 71 55
@@ -2725,24 +3214,19 @@ s84 18 108 53c11 16 19 34 21 54c2 9 2 29 2 58zM763 1011v210c0 46 -13 69 -43 69c-
c-77 8 -142 66 -160 145c-26 112 -26 235 -26 350c0 116 1 238 26 350c19 79 83 137 161 146c183 20 369 20 554 20s371 0 555 -20c77 -9 142 -67 160 -146c26 -112 26 -234 26 -350zM484 1536h102l-121 -399v-271h-100v271c-9 49 -29 119 -61 212c-22 62 -44 125 -65 187
h106l71 -263zM854 1203v-175c0 -53 -9 -93 -28 -118c-25 -34 -60 -51 -106 -51c-45 0 -80 17 -105 51c-19 26 -28 65 -28 118v175c0 53 9 92 28 117c25 34 60 51 105 51c46 0 81 -17 106 -51c19 -25 28 -64 28 -117zM1189 1365v-499h-91v55c-36 -42 -70 -62 -103 -62
c-29 0 -50 12 -59 37c-5 15 -8 39 -8 75v394h91v-367c0 -21 0 -33 1 -35c2 -14 9 -22 21 -22c18 0 37 14 57 43v381h91z" />
- <glyph glyph-name="angle-double-down" unicode="&#xf103;" horiz-adv-x="998"
-d="M998 672c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 14 10 23 10c8 0 17 -4 23 -10l393 -393l393 393c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23zM998 1056
-c0 -8 -4 -17 -10 -23l-466 -466c-6 -6 -15 -10 -23 -10s-17 4 -23 10l-466 466c-6 6 -10 15 -10 23s4 17 10 23l50 50c6 6 14 10 23 10c8 0 17 -4 23 -10l393 -393l393 393c6 6 15 10 23 10s17 -4 23 -10l50 -50c6 -6 10 -15 10 -23z" />
- <glyph glyph-name="sort-alpha-asc" unicode="&#xf15d;" horiz-adv-x="1629"
-d="M1159 1128h177l-72 218l-12 47c-1 8 -2 14 -2 20h-4l-3 -20c-3 -12 -4 -27 -11 -47zM704 96c0 -9 -4 -17 -10 -24l-319 -319c-7 -6 -15 -9 -23 -9s-16 3 -23 9l-320 320c-9 10 -12 23 -7 35s17 20 30 20h192v1376c0 18 14 32 32 32h192c18 0 32 -14 32 -32v-1376h192
-c18 0 32 -14 32 -32zM1540 -23v-233h-584v90l369 529c8 12 16 22 21 27l11 9v3c-4 0 -8 -1 -14 -1c-8 -2 -18 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530c-6 -9 -14 -18 -21 -26l-11 -11v-2l14 2c9 2 18 2 30 2h248v119h121zM1629 874v-106h-288v106h75l-47 144h-243
-l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70z" />
- <glyph glyph-name="area-chart" unicode="&#xf1fe;" horiz-adv-x="2048"
-d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
- <glyph glyph-name="chevron-up" unicode="&#xf077;" horiz-adv-x="1612"
-d="M1593 205l-166 -165c-25 -25 -65 -25 -90 0l-531 531l-531 -531c-25 -25 -65 -25 -90 0l-166 165c-25 25 -25 66 0 91l742 741c25 25 65 25 90 0l742 -741c25 -25 25 -66 0 -91z" />
- <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408"
-d="M1280 832c0 35 -29 64 -64 64s-64 -29 -64 -64s29 -64 64 -64s64 29 64 64zM1408 832c0 -84 -53 -154 -128 -181v-395c0 -212 -201 -384 -448 -384s-448 172 -448 384v132c-217 27 -384 187 -384 380v512c0 35 29 64 64 64c6 0 11 -1 16 -2c22 39 64 66 112 66
-c71 0 128 -57 128 -128s-57 -128 -128 -128c-23 0 -45 7 -64 18v-402c0 -141 144 -256 320 -256s320 115 320 256v402c-19 -11 -41 -18 -64 -18c-71 0 -128 57 -128 128s57 128 128 128c48 0 90 -27 112 -66c5 1 10 2 16 2c35 0 64 -29 64 -64v-512
-c0 -193 -167 -353 -384 -380v-132c0 -141 144 -256 320 -256s320 115 320 256v395c-75 27 -128 97 -128 181c0 106 86 192 192 192s192 -86 192 -192z" />
- <glyph glyph-name="step-forward" unicode="&#xf051;" horiz-adv-x="1024"
-d="M45 -115c-25 -25 -45 -16 -45 19v1472c0 35 20 44 45 19l710 -710c6 -6 10 -12 13 -19v678c0 35 29 64 64 64h128c35 0 64 -29 64 -64v-1408c0 -35 -29 -64 -64 -64h-128c-35 0 -64 29 -64 64v678c-3 -7 -7 -13 -13 -19z" />
- <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1542"
-d="M1497 1395c25 25 45 16 45 -19v-1472c0 -35 -20 -44 -45 -19l-710 710c-6 6 -10 12 -13 19v-710c0 -35 -20 -44 -45 -19l-710 710c-25 25 -25 65 0 90l710 710c25 25 45 16 45 -19v-710c3 7 7 13 13 19z" />
+ <glyph glyph-name="youtube-play" unicode="&#xf16a;" horiz-adv-x="1792"
+d="M711 408l484 250l-484 253v-503zM896 1270c377 0 627 -18 627 -18c35 -4 112 -4 180 -76c0 0 55 -54 71 -178c19 -145 18 -290 18 -290v-136s1 -145 -18 -290c-16 -123 -71 -178 -71 -178c-68 -71 -145 -71 -180 -75c0 0 -250 -19 -627 -19c-466 4 -609 18 -609 18
+c-40 7 -130 5 -198 76c0 0 -55 55 -71 178c-19 145 -18 290 -18 290v136s-1 145 18 290c16 124 71 178 71 178c68 72 145 72 180 76c0 0 250 18 627 18z" />
+ <glyph glyph-name="youtube-square" unicode="&#xf166;"
+d="M919 233v157c0 33 -10 50 -29 50c-11 0 -22 -5 -33 -16v-224c11 -11 22 -16 33 -16c19 0 29 16 29 49zM1103 355h66v34c0 34 -11 51 -33 51s-33 -17 -33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40c-26 -30 -51 -45 -76 -45
+c-21 0 -36 9 -42 28c-4 11 -6 28 -6 54v290h66v-270c0 -15 0 -24 1 -26c1 -10 6 -15 15 -15c14 0 27 10 42 31v280h67zM985 384v-146c0 -33 -2 -58 -7 -73c-8 -28 -26 -42 -53 -42c-23 0 -46 14 -68 41v-36h-67v493h67v-161c21 26 44 40 68 40c27 0 45 -14 53 -42
+c5 -15 7 -39 7 -74zM1236 255v-9c0 -22 -1 -36 -2 -43c-2 -15 -7 -28 -15 -40c-18 -27 -46 -40 -80 -40c-35 0 -62 13 -81 38c-14 18 -21 47 -21 86v129c0 39 6 67 20 86c19 25 46 38 80 38c33 0 60 -13 78 -38c14 -19 21 -47 21 -86v-76h-133v-65c0 -34 11 -51 34 -51
+c16 0 26 9 30 26c0 4 1 19 1 45h68zM785 1079v-156c0 -34 -11 -51 -32 -51c-22 0 -32 17 -32 51v156c0 34 10 52 32 52c21 0 32 -18 32 -52zM1318 366c0 86 0 177 -19 260c-14 59 -62 102 -119 108c-136 15 -274 15 -412 15c-137 0 -275 0 -411 -15
+c-58 -6 -106 -49 -119 -108c-19 -83 -20 -174 -20 -260c0 -85 0 -176 20 -260c13 -58 61 -101 118 -108c137 -15 275 -15 412 -15s275 0 412 15c57 7 105 50 118 108c20 84 20 175 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78c15 -46 32 -92 47 -138
+c24 -70 39 -122 46 -158v-201h74v201zM852 936v130c0 39 -7 68 -21 87c-19 25 -45 38 -78 38c-34 0 -60 -13 -78 -38c-14 -19 -21 -48 -21 -87v-130c0 -39 7 -68 21 -87c18 -25 44 -38 78 -38c33 0 59 13 78 38c14 18 21 48 21 87zM1033 816h67v370h-67v-283
+c-15 -21 -29 -31 -42 -31c-9 0 -15 5 -16 16c-1 2 -1 10 -1 26v272h-67v-293c0 -26 2 -43 6 -55c7 -18 22 -27 43 -27c25 0 50 15 77 45v-40zM1536 1120v-960c0 -159 -129 -288 -288 -288h-960c-159 0 -288 129 -288 288v960c0 159 129 288 288 288h960
+c159 0 288 -129 288 -288z" />
+ <glyph glyph-name="zotero" unicode="&#xf309;" horiz-adv-x="1330"
+d="M662 -127l-662 310v924l662 301l668 -301v-924zM314 152h723v221l-63 78h-275l338 379v218l-63 78h-601l-59 -82v-214h377l-352 -379l-25 -97v-202z" />
</font>
</defs></svg>
diff --git a/library/fork-awesome/fonts/forkawesome-webfont.ttf b/library/fork-awesome/fonts/forkawesome-webfont.ttf
index e5af28e35..1f1d8f34c 100644
--- a/library/fork-awesome/fonts/forkawesome-webfont.ttf
+++ b/library/fork-awesome/fonts/forkawesome-webfont.ttf
Binary files differ
diff --git a/library/fork-awesome/fonts/forkawesome-webfont.woff b/library/fork-awesome/fonts/forkawesome-webfont.woff
index e1a9264a8..cca43af44 100644
--- a/library/fork-awesome/fonts/forkawesome-webfont.woff
+++ b/library/fork-awesome/fonts/forkawesome-webfont.woff
Binary files differ
diff --git a/library/fork-awesome/fonts/forkawesome-webfont.woff2 b/library/fork-awesome/fonts/forkawesome-webfont.woff2
index cf2270fd2..c96e5bf14 100644
--- a/library/fork-awesome/fonts/forkawesome-webfont.woff2
+++ b/library/fork-awesome/fonts/forkawesome-webfont.woff2
Binary files differ
diff --git a/library/fullcalendar/LICENSE.md b/library/fullcalendar/LICENSE.md
new file mode 100644
index 000000000..18ac6673d
--- /dev/null
+++ b/library/fullcalendar/LICENSE.md
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2021 Adam Shaw
+
+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/library/fullcalendar/LICENSE.txt b/library/fullcalendar/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/README.md b/library/fullcalendar/README.md
index 991011fc5..8c9540922 100644
--- a/library/fullcalendar/README.md
+++ b/library/fullcalendar/README.md
@@ -1,13 +1,74 @@
-# FullCalendar [![Build Status](https://travis-ci.com/fullcalendar/fullcalendar.svg?branch=master)](https://travis-ci.com/fullcalendar/fullcalendar)
+# FullCalendar
-A full-sized drag & drop JavaScript event calendar
+Full-sized drag & drop calendar in JavaScript
-- [Project website and demos](http://fullcalendar.io/)
-- [Documentation](http://fullcalendar.io/docs)
-- [Support](http://fullcalendar.io/support)
-- [Contributing](CONTRIBUTING.md)
+- [Project Website](https://fullcalendar.io/)
+- [Documentation](https://fullcalendar.io/docs)
- [Changelog](CHANGELOG.md)
-- [License](LICENSE.txt)
+- [Support](https://fullcalendar.io/support)
+- [License](LICENSE.md)
+- [Roadmap](https://fullcalendar.io/roadmap)
-*From the blog*: [Changes in the Upcoming v5](https://fullcalendar.io/blog/2020/02/changes-in-the-upcoming-v5)
+Connectors:
+
+- [React](https://github.com/fullcalendar/fullcalendar-react)
+- [Angular](https://github.com/fullcalendar/fullcalendar-angular)
+- [Vue 3](https://github.com/fullcalendar/fullcalendar-vue) |
+ [2](https://github.com/fullcalendar/fullcalendar-vue2)
+
+## Bundle
+
+The [FullCalendar Standard Bundle](bundle) is easier to install than individual plugins, though filesize will be larger. It works well with a CDN.
+
+## Installation
+
+Install the FullCalendar core package and any plugins you plan to use:
+
+```sh
+npm install @fullcalendar/core @fullcalendar/interaction @fullcalendar/daygrid
+```
+
+## Usage
+
+Instantiate a Calendar with plugins and options:
+
+```js
+import { Calendar } from '@fullcalendar/core'
+import interactionPlugin from '@fullcalendar/interaction'
+import dayGridPlugin from '@fullcalendar/daygrid'
+
+const calendarEl = document.getElementById('calendar')
+const calendar = new Calendar(calendarEl, {
+ plugins: [
+ interactionPlugin,
+ dayGridPlugin
+ ],
+ initialView: 'timeGridWeek',
+ editable: true,
+ events: [
+ { title: 'Meeting', start: new Date() }
+ ]
+})
+
+calendar.render()
+```
+
+## Development
+
+You must install this repo with [PNPM](https://pnpm.io/):
+
+```
+pnpm install
+```
+
+Available scripts (via `pnpm run <script>`):
+
+- `build` - build production-ready dist files
+- `dev` - build & watch development dist files
+- `test` - test headlessly
+- `test:dev` - test interactively
+- `lint`
+- `clean`
+
+[Info about contributing code &raquo;](CONTRIBUTING.md)
diff --git a/library/fullcalendar/dist/index.global.js b/library/fullcalendar/dist/index.global.js
new file mode 100644
index 000000000..d2a252f78
--- /dev/null
+++ b/library/fullcalendar/dist/index.global.js
@@ -0,0 +1,14083 @@
+/*!
+FullCalendar Standard Bundle v6.0.3
+Docs & License: https://fullcalendar.io/docs/initialize-globals
+(c) 2022 Adam Shaw
+*/
+var FullCalendar = (function (exports) {
+ 'use strict';
+
+ var n,l$1,u$1,i$1,t,o,r$1,f$1={},e$1=[],c$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function s(n,l){for(var u in l)n[u]=l[u];return n}function a$1(n){var l=n.parentNode;l&&l.removeChild(n);}function h(l,u,i){var t,o,r,f={};for(r in u)"key"==r?t=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return v$1(l,f,t,o,null)}function v$1(n,i,t,o,r){var f={type:n,props:i,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u$1:r};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function y(){return {current:null}}function p(n){return n.children}function d(n,l){this.props=n,this.context=l;}function _(n,l){if(null==l)return n.__?_(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?_(n):null}function k$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return k$1(n)}}function b$1(n){(!n.__d&&(n.__d=!0)&&t.push(n)&&!g$2.__r++||o!==l$1.debounceRendering)&&((o=l$1.debounceRendering)||setTimeout)(g$2);}function g$2(){for(var n;g$2.__r=t.length;)n=t.sort(function(n,l){return n.__v.__b-l.__v.__b}),t=[],n.some(function(n){var l,u,i,t,o,r;n.__d&&(o=(t=(l=n).__v).__e,(r=l.__P)&&(u=[],(i=s({},t)).__v=t.__v+1,j$2(r,t,i,l.__n,void 0!==r.ownerSVGElement,null!=t.__h?[o]:null,u,null==o?_(t):o,t.__h),z$1(u,t),t.__e!=o&&k$1(t)));});}function w$2(n,l,u,i,t,o,r,c,s,a){var h,y,d,k,b,g,w,x=i&&i.__k||e$1,C=x.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(k=u.__k[h]=null==(k=l[h])||"boolean"==typeof k?null:"string"==typeof k||"number"==typeof k||"bigint"==typeof k?v$1(null,k,null,null,k):Array.isArray(k)?v$1(p,{children:k},null,null,null):k.__b>0?v$1(k.type,k.props,k.key,k.ref?k.ref:null,k.__v):k)){if(k.__=u,k.__b=u.__b+1,null===(d=x[h])||d&&k.key==d.key&&k.type===d.type)x[h]=void 0;else for(y=0;y<C;y++){if((d=x[y])&&k.key==d.key&&k.type===d.type){x[y]=void 0;break}d=null;}j$2(n,k,d=d||f$1,t,o,r,c,s,a),b=k.__e,(y=k.ref)&&d.ref!=y&&(w||(w=[]),d.ref&&w.push(d.ref,null,k),w.push(y,k.__c||b,k)),null!=b?(null==g&&(g=b),"function"==typeof k.type&&k.__k===d.__k?k.__d=s=m$1(k,s,n):s=A(n,k,d,x,b,s),"function"==typeof u.type&&(u.__d=s)):s&&d.__e==s&&s.parentNode!=n&&(s=_(d));}for(u.__e=g,h=C;h--;)null!=x[h]&&N(x[h],x[h]);if(w)for(h=0;h<w.length;h++)M(w[h],w[++h],w[++h]);}function m$1(n,l,u){for(var i,t=n.__k,o=0;t&&o<t.length;o++)(i=t[o])&&(i.__=n,l="function"==typeof i.type?m$1(i,l,u):A(u,i,i,t,i.__e,l));return l}function x$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(Array.isArray(n)?n.some(function(n){x$1(n,l);}):l.push(n)),l}function A(n,l,u,i,t,o){var r,f,e;if(void 0!==l.__d)r=l.__d,l.__d=void 0;else if(null==u||t!=o||null==t.parentNode)n:if(null==o||o.parentNode!==n)n.appendChild(t),r=null;else {for(f=o,e=0;(f=f.nextSibling)&&e<i.length;e+=1)if(f==t)break n;n.insertBefore(t,o),r=o;}return void 0!==r?r:t.nextSibling}function C$1(n,l,u,i,t){var o;for(o in u)"children"===o||"key"===o||o in l||H$1(n,o,null,u[o],i);for(o in l)t&&"function"!=typeof l[o]||"children"===o||"key"===o||"value"===o||"checked"===o||u[o]===l[o]||H$1(n,o,l[o],u[o],i);}function $$1(n,l,u){"-"===l[0]?n.setProperty(l,u):n[l]=null==u?"":"number"!=typeof u||c$1.test(l)?u:u+"px";}function H$1(n,l,u,i,t){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||$$1(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||$$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?i||n.addEventListener(l,o?T$1:I$1,o):n.removeEventListener(l,o?T$1:I$1,o);else if("dangerouslySetInnerHTML"!==l){if(t)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&-1==l.indexOf("-")?n.removeAttribute(l):n.setAttribute(l,u));}}function I$1(n){this.l[n.type+!1](l$1.event?l$1.event(n):n);}function T$1(n){this.l[n.type+!0](l$1.event?l$1.event(n):n);}function j$2(n,u,i,t,o,r,f,e,c){var a,h,v,y,_,k,b,g,m,x,A,C,$,H,I,T=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,r=[e]),(a=l$1.__b)&&a(u);try{n:if("function"==typeof T){if(g=u.props,m=(a=T.contextType)&&t[a.__c],x=a?m?m.props.value:a.__:t,i.__c?b=(h=u.__c=i.__c).__=h.__E:("prototype"in T&&T.prototype.render?u.__c=h=new T(g,x):(u.__c=h=new d(g,x),h.constructor=T,h.render=O),m&&m.sub(h),h.props=g,h.state||(h.state={}),h.context=x,h.__n=t,v=h.__d=!0,h.__h=[],h._sb=[]),null==h.__s&&(h.__s=h.state),null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=s({},h.__s)),s(h.__s,T.getDerivedStateFromProps(g,h.__s))),y=h.props,_=h.state,v)null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(null==T.getDerivedStateFromProps&&g!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(g,x),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(g,h.__s,x)||u.__v===i.__v){for(h.props=g,h.state=h.__s,u.__v!==i.__v&&(h.__d=!1),h.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u);}),A=0;A<h._sb.length;A++)h.__h.push(h._sb[A]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(g,h.__s,x),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,_,k);});}if(h.context=x,h.props=g,h.__v=u,h.__P=n,C=l$1.__r,$=0,"prototype"in T&&T.prototype.render){for(h.state=h.__s,h.__d=!1,C&&C(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[];}else do{h.__d=!1,C&&C(u),a=h.render(h.props,h.state,h.context),h.state=h.__s;}while(h.__d&&++$<25);h.state=h.__s,null!=h.getChildContext&&(t=s(s({},t),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(k=h.getSnapshotBeforeUpdate(y,_)),I=null!=a&&a.type===p&&null==a.key?a.props.children:a,w$2(n,Array.isArray(I)?I:[I],u,i,t,o,r,f,e,c),h.base=u.__e,u.__h=null,h.__h.length&&f.push(h),b&&(h.__E=h.__=null),h.__e=!1;}else null==r&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=L$1(i.__e,u,i,t,o,r,f,c);(a=l$1.diffed)&&a(u);}catch(n){u.__v=null,(c||null!=r)&&(u.__e=e,u.__h=!!c,r[r.indexOf(e)]=null),l$1.__e(n,u,i);}}function z$1(n,u){l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function L$1(l,u,i,t,o,r,e,c){var s,h,v,y=i.props,p=u.props,d=u.type,k=0;if("svg"===d&&(o=!0),null!=r)for(;k<r.length;k++)if((s=r[k])&&"setAttribute"in s==!!d&&(d?s.localName===d:3===s.nodeType)){l=s,r[k]=null;break}if(null==l){if(null===d)return document.createTextNode(p);l=o?document.createElementNS("http://www.w3.org/2000/svg",d):document.createElement(d,p.is&&p),r=null,c=!1;}if(null===d)y===p||c&&l.data===p||(l.data=p);else {if(r=r&&n.call(l.childNodes),h=(y=i.props||f$1).dangerouslySetInnerHTML,v=p.dangerouslySetInnerHTML,!c){if(null!=r)for(y={},k=0;k<l.attributes.length;k++)y[l.attributes[k].name]=l.attributes[k].value;(v||h)&&(v&&(h&&v.__html==h.__html||v.__html===l.innerHTML)||(l.innerHTML=v&&v.__html||""));}if(C$1(l,p,y,o,c),v)u.__k=[];else if(k=u.props.children,w$2(l,Array.isArray(k)?k:[k],u,i,t,o&&"foreignObject"!==d,r,e,r?r[0]:i.__k&&_(i,0),c),null!=r)for(k=r.length;k--;)null!=r[k]&&a$1(r[k]);c||("value"in p&&void 0!==(k=p.value)&&(k!==l.value||"progress"===d&&!k||"option"===d&&k!==y.value)&&H$1(l,"value",k,y.value,!1),"checked"in p&&void 0!==(k=p.checked)&&k!==l.checked&&H$1(l,"checked",k,y.checked,!1));}return l}function M(n,u,i){try{"function"==typeof n?n(u):n.current=u;}catch(n){l$1.__e(n,i);}}function N(n,u,i){var t,o;if(l$1.unmount&&l$1.unmount(n),(t=n.ref)&&(t.current&&t.current!==n.__e||M(t,null,u)),null!=(t=n.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount();}catch(n){l$1.__e(n,u);}t.base=t.__P=null,n.__c=void 0;}if(t=n.__k)for(o=0;o<t.length;o++)t[o]&&N(t[o],u,i||"function"!=typeof n.type);i||null==n.__e||a$1(n.__e),n.__=n.__e=n.__d=void 0;}function O(n,l,u){return this.constructor(n,u)}function P$1(u,i,t){var o,r,e;l$1.__&&l$1.__(u,i),r=(o="function"==typeof t)?null:t&&t.__k||i.__k,e=[],j$2(i,u=(!o&&t||i).__k=h(p,null,[u]),r||f$1,f$1,void 0!==i.ownerSVGElement,!o&&t?[t]:r?null:i.firstChild?n.call(i.childNodes):null,e,!o&&t?t:r?r.__e:i.firstChild,o),z$1(e,u);}function B$1(n,l){var u={__c:l="__cC"+r$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(b$1);},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=e$1.slice,l$1={__e:function(n,l,u,i){for(var t,o,r;l=l.__;)if((t=l.__c)&&!t.__)try{if((o=t.constructor)&&null!=o.getDerivedStateFromError&&(t.setState(o.getDerivedStateFromError(n)),r=t.__d),null!=t.componentDidCatch&&(t.componentDidCatch(n,i||{}),r=t.__d),r)return t.__E=t}catch(l){n=l;}throw n}},u$1=0,i$1=function(n){return null!=n&&void 0===n.constructor},d.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=s({},this.state),"function"==typeof n&&(n=n(s({},u),this.props)),n&&s(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),b$1(this));},d.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),b$1(this));},d.prototype.render=p,t=[],g$2.__r=0,r$1=0;
+
+ var r,u,i,f=[],c=[],e=l$1.__b,a=l$1.__r,v=l$1.diffed,l=l$1.__c,m=l$1.unmount;function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k),t.__H.__h.forEach(w$1),t.__H.__h=[];}catch(r){t.__H.__h=[],l$1.__e(r,t.__v);}}l$1.__b=function(n){r=null,e&&e(n);},l$1.__r=function(n){a&&a(n);var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0;})):(i.__h.forEach(k),i.__h.forEach(w$1),i.__h=[])),u=r;},l$1.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===l$1.requestAnimationFrame||((i=l$1.requestAnimationFrame)||j$1)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c;})),u=r=null;},l$1.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k),t.__h=t.__h.filter(function(n){return !n.__||w$1(n)});}catch(u){r.some(function(n){n.__h&&(n.__h=[]);}),r=[],l$1.__e(u,t.__v);}}),l&&l(t,r);},l$1.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k(n);}catch(n){r=n;}}),u.__H=void 0,r&&l$1.__e(r,u.__v));};var g$1="function"==typeof requestAnimationFrame;function j$1(n){var t,r=function(){clearTimeout(u),g$1&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);g$1&&(t=requestAnimationFrame(r));}function k(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t;}function w$1(n){var t=r;n.__c=n.__(),r=t;}
+
+ function g(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function w(n){this.props=n;}(w.prototype=new d).isPureReactComponent=!0,w.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var x=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),x&&x(n);};var T=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);T(n,t,e,r);};var I=l$1.unmount;function L(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return L(n,t,e)})),n}function U(n,t,e){return n&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return U(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.insertBefore(n.__e,n.__d),n.__c.__e=!0,n.__c.__P=e)),n}function D(){this.__u=0,this.t=null,this.__b=null;}function F(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function V(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),I&&I(n);},(D.prototype=new d).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=F(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l());};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=U(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}},c=!0===t.__h;r.__u++||c||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},D.prototype.componentWillUnmount=function(){this.t=[];},D.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=L(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&h(p,null,n.fallback);return i&&(i.__h=null),[h(p,null,e.__a?null:n.children),i]};var W=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function P(n){return this.getChildContext=function(){return n.context},n.children}function $(n){var e=this,r=n.i;e.componentWillUnmount=function(){P$1(null,e.l),e.l=null,e.i=null;},e.i&&e.i!==r&&e.componentWillUnmount(),n.__v?(e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n);},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n);}}),P$1(h(P,{context:e.context},n.__v),e.l)):e.l&&e.componentWillUnmount();}function j(n,e){var r=h($,{__v:n,i:e});return r.containerInfo=e,r}(V.prototype=new d).__a=function(n){var t=this,e=F(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),W(t,n,r)):u();};e?e(o):o();}},V.prototype.render=function(n){this.u=null,this.o=new Map;var t=x$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},V.prototype.componentDidUpdate=V.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){W(n,e,t);});};var z="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H="undefined"!=typeof document,Z=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};d.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(d.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var G=l$1.event;function J(){}function K(){return this.cancelBubble}function Q(){return this.defaultPrevented}l$1.event=function(n){return G&&(n=G(n)),n.persist=J,n.isPropagationStopped=K,n.isDefaultPrevented=Q,n.nativeEvent=n};var nn={configurable:!0,get:function(){return this.class}},tn=l$1.vnode;l$1.vnode=function(n){var t=n.type,e=n.props,u=e;if("string"==typeof t){var o=-1===t.indexOf("-");for(var i in u={},e){var l=e[i];H&&"children"===i&&"noscript"===t||"value"===i&&"defaultValue"in e&&null==l||("defaultValue"===i&&"value"in e&&null==e.value?i="value":"download"===i&&!0===l?l="":/ondoubleclick/i.test(i)?i="ondblclick":/^onchange(textarea|input)/i.test(i+t)&&!Z(e.type)?i="oninput":/^onfocus$/i.test(i)?i="onfocusin":/^onblur$/i.test(i)?i="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)?i=i.toLowerCase():o&&B.test(i)?i=i.replace(/[A-Z0-9]/g,"-$&").toLowerCase():null===l&&(l=void 0),/^oninput$/i.test(i)&&(i=i.toLowerCase(),u[i]&&(i="oninputCapture")),u[i]=l);}"select"==t&&u.multiple&&Array.isArray(u.value)&&(u.value=x$1(e.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==t&&null!=u.defaultValue&&(u.value=x$1(e.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),n.props=u,e.class!=e.className&&(nn.enumerable="className"in e,null!=e.className&&(u.class=e.className),Object.defineProperty(u,"className",nn));}n.$$typeof=z,tn&&tn(n);};var en=l$1.__r;l$1.__r=function(n){en&&en(n),n.__c;};
+
+ function removeElement(el) {
+ if (el.parentNode) {
+ el.parentNode.removeChild(el);
+ }
+ }
+ // Querying
+ // ----------------------------------------------------------------------------------------------------------------
+ function elementClosest(el, selector) {
+ if (el.closest) {
+ return el.closest(selector);
+ // really bad fallback for IE
+ // from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
+ }
+ if (!document.documentElement.contains(el)) {
+ return null;
+ }
+ do {
+ if (elementMatches(el, selector)) {
+ return el;
+ }
+ el = (el.parentElement || el.parentNode);
+ } while (el !== null && el.nodeType === 1);
+ return null;
+ }
+ function elementMatches(el, selector) {
+ let method = el.matches || el.matchesSelector || el.msMatchesSelector;
+ return method.call(el, selector);
+ }
+ // accepts multiple subject els
+ // returns a real array. good for methods like forEach
+ // TODO: accept the document
+ function findElements(container, selector) {
+ let containers = container instanceof HTMLElement ? [container] : container;
+ let allMatches = [];
+ for (let i = 0; i < containers.length; i += 1) {
+ let matches = containers[i].querySelectorAll(selector);
+ for (let j = 0; j < matches.length; j += 1) {
+ allMatches.push(matches[j]);
+ }
+ }
+ return allMatches;
+ }
+ // accepts multiple subject els
+ // only queries direct child elements // TODO: rename to findDirectChildren!
+ function findDirectChildren(parent, selector) {
+ let parents = parent instanceof HTMLElement ? [parent] : parent;
+ let allMatches = [];
+ for (let i = 0; i < parents.length; i += 1) {
+ let childNodes = parents[i].children; // only ever elements
+ for (let j = 0; j < childNodes.length; j += 1) {
+ let childNode = childNodes[j];
+ if (!selector || elementMatches(childNode, selector)) {
+ allMatches.push(childNode);
+ }
+ }
+ }
+ return allMatches;
+ }
+ // Style
+ // ----------------------------------------------------------------------------------------------------------------
+ const PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
+ function applyStyle(el, props) {
+ for (let propName in props) {
+ applyStyleProp(el, propName, props[propName]);
+ }
+ }
+ function applyStyleProp(el, name, val) {
+ if (val == null) {
+ el.style[name] = '';
+ }
+ else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {
+ el.style[name] = `${val}px`;
+ }
+ else {
+ el.style[name] = val;
+ }
+ }
+ // Event Handling
+ // ----------------------------------------------------------------------------------------------------------------
+ // if intercepting bubbled events at the document/window/body level,
+ // and want to see originating element (the 'target'), use this util instead
+ // of `ev.target` because it goes within web-component boundaries.
+ function getEventTargetViaRoot(ev) {
+ var _a, _b;
+ return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;
+ }
+ // Shadow DOM consuderations
+ // ----------------------------------------------------------------------------------------------------------------
+ function getElRoot(el) {
+ return el.getRootNode ? el.getRootNode() : document;
+ }
+ // Unique ID for DOM attribute
+ let guid$1 = 0;
+ function getUniqueDomId() {
+ guid$1 += 1;
+ return 'fc-dom-' + guid$1;
+ }
+
+ // Stops a mouse/touch event from doing it's native browser action
+ function preventDefault(ev) {
+ ev.preventDefault();
+ }
+ // Event Delegation
+ // ----------------------------------------------------------------------------------------------------------------
+ function buildDelegationHandler(selector, handler) {
+ return (ev) => {
+ let matchedChild = elementClosest(ev.target, selector);
+ if (matchedChild) {
+ handler.call(matchedChild, ev, matchedChild);
+ }
+ };
+ }
+ function listenBySelector(container, eventType, selector, handler) {
+ let attachedHandler = buildDelegationHandler(selector, handler);
+ container.addEventListener(eventType, attachedHandler);
+ return () => {
+ container.removeEventListener(eventType, attachedHandler);
+ };
+ }
+ function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {
+ let currentMatchedChild;
+ return listenBySelector(container, 'mouseover', selector, (mouseOverEv, matchedChild) => {
+ if (matchedChild !== currentMatchedChild) {
+ currentMatchedChild = matchedChild;
+ onMouseEnter(mouseOverEv, matchedChild);
+ let realOnMouseLeave = (mouseLeaveEv) => {
+ currentMatchedChild = null;
+ onMouseLeave(mouseLeaveEv, matchedChild);
+ matchedChild.removeEventListener('mouseleave', realOnMouseLeave);
+ };
+ // listen to the next mouseleave, and then unattach
+ matchedChild.addEventListener('mouseleave', realOnMouseLeave);
+ }
+ });
+ }
+ // Animation
+ // ----------------------------------------------------------------------------------------------------------------
+ const transitionEventNames = [
+ 'webkitTransitionEnd',
+ 'otransitionend',
+ 'oTransitionEnd',
+ 'msTransitionEnd',
+ 'transitionend',
+ ];
+ // triggered only when the next single subsequent transition finishes
+ function whenTransitionDone(el, callback) {
+ let realCallback = (ev) => {
+ callback(ev);
+ transitionEventNames.forEach((eventName) => {
+ el.removeEventListener(eventName, realCallback);
+ });
+ };
+ transitionEventNames.forEach((eventName) => {
+ el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes
+ });
+ }
+ // ARIA workarounds
+ // ----------------------------------------------------------------------------------------------------------------
+ function createAriaClickAttrs(handler) {
+ return Object.assign({ onClick: handler }, createAriaKeyboardAttrs(handler));
+ }
+ function createAriaKeyboardAttrs(handler) {
+ return {
+ tabIndex: 0,
+ onKeyDown(ev) {
+ if (ev.key === 'Enter' || ev.key === ' ') {
+ handler(ev);
+ ev.preventDefault(); // if space, don't scroll down page
+ }
+ },
+ };
+ }
+
+ let guidNumber = 0;
+ function guid() {
+ guidNumber += 1;
+ return String(guidNumber);
+ }
+ /* FullCalendar-specific DOM Utilities
+ ----------------------------------------------------------------------------------------------------------------------*/
+ // Make the mouse cursor express that an event is not allowed in the current area
+ function disableCursor() {
+ document.body.classList.add('fc-not-allowed');
+ }
+ // Returns the mouse cursor to its original look
+ function enableCursor() {
+ document.body.classList.remove('fc-not-allowed');
+ }
+ /* Selection
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function preventSelection(el) {
+ el.classList.add('fc-unselectable');
+ el.addEventListener('selectstart', preventDefault);
+ }
+ function allowSelection(el) {
+ el.classList.remove('fc-unselectable');
+ el.removeEventListener('selectstart', preventDefault);
+ }
+ /* Context Menu
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function preventContextMenu(el) {
+ el.addEventListener('contextmenu', preventDefault);
+ }
+ function allowContextMenu(el) {
+ el.removeEventListener('contextmenu', preventDefault);
+ }
+ function parseFieldSpecs(input) {
+ let specs = [];
+ let tokens = [];
+ let i;
+ let token;
+ if (typeof input === 'string') {
+ tokens = input.split(/\s*,\s*/);
+ }
+ else if (typeof input === 'function') {
+ tokens = [input];
+ }
+ else if (Array.isArray(input)) {
+ tokens = input;
+ }
+ for (i = 0; i < tokens.length; i += 1) {
+ token = tokens[i];
+ if (typeof token === 'string') {
+ specs.push(token.charAt(0) === '-' ?
+ { field: token.substring(1), order: -1 } :
+ { field: token, order: 1 });
+ }
+ else if (typeof token === 'function') {
+ specs.push({ func: token });
+ }
+ }
+ return specs;
+ }
+ function compareByFieldSpecs(obj0, obj1, fieldSpecs) {
+ let i;
+ let cmp;
+ for (i = 0; i < fieldSpecs.length; i += 1) {
+ cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);
+ if (cmp) {
+ return cmp;
+ }
+ }
+ return 0;
+ }
+ function compareByFieldSpec(obj0, obj1, fieldSpec) {
+ if (fieldSpec.func) {
+ return fieldSpec.func(obj0, obj1);
+ }
+ return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])
+ * (fieldSpec.order || 1);
+ }
+ function flexibleCompare(a, b) {
+ if (!a && !b) {
+ return 0;
+ }
+ if (b == null) {
+ return -1;
+ }
+ if (a == null) {
+ return 1;
+ }
+ if (typeof a === 'string' || typeof b === 'string') {
+ return String(a).localeCompare(String(b));
+ }
+ return a - b;
+ }
+ /* String Utilities
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function padStart(val, len) {
+ let s = String(val);
+ return '000'.substr(0, len - s.length) + s;
+ }
+ function formatWithOrdinals(formatter, args, fallbackText) {
+ if (typeof formatter === 'function') {
+ return formatter(...args);
+ }
+ if (typeof formatter === 'string') { // non-blank string
+ return args.reduce((str, arg, index) => (str.replace('$' + index, arg || '')), formatter);
+ }
+ return fallbackText;
+ }
+ /* Number Utilities
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function compareNumbers(a, b) {
+ return a - b;
+ }
+ function isInt(n) {
+ return n % 1 === 0;
+ }
+ /* FC-specific DOM dimension stuff
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function computeSmallestCellWidth(cellEl) {
+ let allWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-frame');
+ let contentWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-cushion');
+ if (!allWidthEl) {
+ throw new Error('needs fc-scrollgrid-shrink-frame className'); // TODO: use const
+ }
+ if (!contentWidthEl) {
+ throw new Error('needs fc-scrollgrid-shrink-cushion className');
+ }
+ return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + // the cell padding+border
+ contentWidthEl.getBoundingClientRect().width;
+ }
+
+ const INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];
+ const PARSE_RE = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;
+ // Parsing and Creation
+ function createDuration(input, unit) {
+ if (typeof input === 'string') {
+ return parseString(input);
+ }
+ if (typeof input === 'object' && input) { // non-null object
+ return parseObject(input);
+ }
+ if (typeof input === 'number') {
+ return parseObject({ [unit || 'milliseconds']: input });
+ }
+ return null;
+ }
+ function parseString(s) {
+ let m = PARSE_RE.exec(s);
+ if (m) {
+ let sign = m[1] ? -1 : 1;
+ return {
+ years: 0,
+ months: 0,
+ days: sign * (m[2] ? parseInt(m[2], 10) : 0),
+ milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours
+ (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes
+ (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds
+ (m[6] ? parseInt(m[6], 10) : 0) // ms
+ ),
+ };
+ }
+ return null;
+ }
+ function parseObject(obj) {
+ let duration = {
+ years: obj.years || obj.year || 0,
+ months: obj.months || obj.month || 0,
+ days: obj.days || obj.day || 0,
+ milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours
+ (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes
+ (obj.seconds || obj.second || 0) * 1000 + // seconds
+ (obj.milliseconds || obj.millisecond || obj.ms || 0), // ms
+ };
+ let weeks = obj.weeks || obj.week;
+ if (weeks) {
+ duration.days += weeks * 7;
+ duration.specifiedWeeks = true;
+ }
+ return duration;
+ }
+ // Equality
+ function durationsEqual(d0, d1) {
+ return d0.years === d1.years &&
+ d0.months === d1.months &&
+ d0.days === d1.days &&
+ d0.milliseconds === d1.milliseconds;
+ }
+ function asCleanDays(dur) {
+ if (!dur.years && !dur.months && !dur.milliseconds) {
+ return dur.days;
+ }
+ return 0;
+ }
+ // Simple Math
+ function addDurations(d0, d1) {
+ return {
+ years: d0.years + d1.years,
+ months: d0.months + d1.months,
+ days: d0.days + d1.days,
+ milliseconds: d0.milliseconds + d1.milliseconds,
+ };
+ }
+ function subtractDurations(d1, d0) {
+ return {
+ years: d1.years - d0.years,
+ months: d1.months - d0.months,
+ days: d1.days - d0.days,
+ milliseconds: d1.milliseconds - d0.milliseconds,
+ };
+ }
+ function multiplyDuration(d, n) {
+ return {
+ years: d.years * n,
+ months: d.months * n,
+ days: d.days * n,
+ milliseconds: d.milliseconds * n,
+ };
+ }
+ // Conversions
+ // "Rough" because they are based on average-case Gregorian months/years
+ function asRoughYears(dur) {
+ return asRoughDays(dur) / 365;
+ }
+ function asRoughMonths(dur) {
+ return asRoughDays(dur) / 30;
+ }
+ function asRoughDays(dur) {
+ return asRoughMs(dur) / 864e5;
+ }
+ function asRoughMinutes(dur) {
+ return asRoughMs(dur) / (1000 * 60);
+ }
+ function asRoughSeconds(dur) {
+ return asRoughMs(dur) / 1000;
+ }
+ function asRoughMs(dur) {
+ return dur.years * (365 * 864e5) +
+ dur.months * (30 * 864e5) +
+ dur.days * 864e5 +
+ dur.milliseconds;
+ }
+ // Advanced Math
+ function wholeDivideDurations(numerator, denominator) {
+ let res = null;
+ for (let i = 0; i < INTERNAL_UNITS.length; i += 1) {
+ let unit = INTERNAL_UNITS[i];
+ if (denominator[unit]) {
+ let localRes = numerator[unit] / denominator[unit];
+ if (!isInt(localRes) || (res !== null && res !== localRes)) {
+ return null;
+ }
+ res = localRes;
+ }
+ else if (numerator[unit]) {
+ // needs to divide by something but can't!
+ return null;
+ }
+ }
+ return res;
+ }
+ function greatestDurationDenominator(dur) {
+ let ms = dur.milliseconds;
+ if (ms) {
+ if (ms % 1000 !== 0) {
+ return { unit: 'millisecond', value: ms };
+ }
+ if (ms % (1000 * 60) !== 0) {
+ return { unit: 'second', value: ms / 1000 };
+ }
+ if (ms % (1000 * 60 * 60) !== 0) {
+ return { unit: 'minute', value: ms / (1000 * 60) };
+ }
+ if (ms) {
+ return { unit: 'hour', value: ms / (1000 * 60 * 60) };
+ }
+ }
+ if (dur.days) {
+ if (dur.specifiedWeeks && dur.days % 7 === 0) {
+ return { unit: 'week', value: dur.days / 7 };
+ }
+ return { unit: 'day', value: dur.days };
+ }
+ if (dur.months) {
+ return { unit: 'month', value: dur.months };
+ }
+ if (dur.years) {
+ return { unit: 'year', value: dur.years };
+ }
+ return { unit: 'millisecond', value: 0 };
+ }
+
+ const { hasOwnProperty } = Object.prototype;
+ // Merges an array of objects into a single object.
+ // The second argument allows for an array of property names who's object values will be merged together.
+ function mergeProps(propObjs, complexPropsMap) {
+ let dest = {};
+ if (complexPropsMap) {
+ for (let name in complexPropsMap) {
+ let complexObjs = [];
+ // collect the trailing object values, stopping when a non-object is discovered
+ for (let i = propObjs.length - 1; i >= 0; i -= 1) {
+ let val = propObjs[i][name];
+ if (typeof val === 'object' && val) { // non-null object
+ complexObjs.unshift(val);
+ }
+ else if (val !== undefined) {
+ dest[name] = val; // if there were no objects, this value will be used
+ break;
+ }
+ }
+ // if the trailing values were objects, use the merged value
+ if (complexObjs.length) {
+ dest[name] = mergeProps(complexObjs);
+ }
+ }
+ }
+ // copy values into the destination, going from last to first
+ for (let i = propObjs.length - 1; i >= 0; i -= 1) {
+ let props = propObjs[i];
+ for (let name in props) {
+ if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign
+ dest[name] = props[name];
+ }
+ }
+ }
+ return dest;
+ }
+ function filterHash(hash, func) {
+ let filtered = {};
+ for (let key in hash) {
+ if (func(hash[key], key)) {
+ filtered[key] = hash[key];
+ }
+ }
+ return filtered;
+ }
+ function mapHash(hash, func) {
+ let newHash = {};
+ for (let key in hash) {
+ newHash[key] = func(hash[key], key);
+ }
+ return newHash;
+ }
+ function arrayToHash(a) {
+ let hash = {};
+ for (let item of a) {
+ hash[item] = true;
+ }
+ return hash;
+ }
+ // TODO: reassess browser support
+ // https://caniuse.com/?search=object.values
+ function hashValuesToArray(obj) {
+ let a = [];
+ for (let key in obj) {
+ a.push(obj[key]);
+ }
+ return a;
+ }
+ function isPropsEqual(obj0, obj1) {
+ if (obj0 === obj1) {
+ return true;
+ }
+ for (let key in obj0) {
+ if (hasOwnProperty.call(obj0, key)) {
+ if (!(key in obj1)) {
+ return false;
+ }
+ }
+ }
+ for (let key in obj1) {
+ if (hasOwnProperty.call(obj1, key)) {
+ if (obj0[key] !== obj1[key]) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ const HANDLER_RE = /^on[A-Z]/;
+ function isNonHandlerPropsEqual(obj0, obj1) {
+ const keys = getUnequalProps(obj0, obj1);
+ for (let key of keys) {
+ if (!HANDLER_RE.test(key)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function getUnequalProps(obj0, obj1) {
+ let keys = [];
+ for (let key in obj0) {
+ if (hasOwnProperty.call(obj0, key)) {
+ if (!(key in obj1)) {
+ keys.push(key);
+ }
+ }
+ }
+ for (let key in obj1) {
+ if (hasOwnProperty.call(obj1, key)) {
+ if (obj0[key] !== obj1[key]) {
+ keys.push(key);
+ }
+ }
+ }
+ return keys;
+ }
+ function compareObjs(oldProps, newProps, equalityFuncs = {}) {
+ if (oldProps === newProps) {
+ return true;
+ }
+ for (let key in newProps) {
+ if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) ;
+ else {
+ return false;
+ }
+ }
+ // check for props that were omitted in the new
+ for (let key in oldProps) {
+ if (!(key in newProps)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ /*
+ assumed "true" equality for handler names like "onReceiveSomething"
+ */
+ function isObjValsEqual(val0, val1, comparator) {
+ if (val0 === val1 || comparator === true) {
+ return true;
+ }
+ if (comparator) {
+ return comparator(val0, val1);
+ }
+ return false;
+ }
+ function collectFromHash(hash, startIndex = 0, endIndex, step = 1) {
+ let res = [];
+ if (endIndex == null) {
+ endIndex = Object.keys(hash).length;
+ }
+ for (let i = startIndex; i < endIndex; i += step) {
+ let val = hash[i];
+ if (val !== undefined) { // will disregard undefined for sparse arrays
+ res.push(val);
+ }
+ }
+ return res;
+ }
+
+ const DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
+ // Adding
+ function addWeeks(m, n) {
+ let a = dateToUtcArray(m);
+ a[2] += n * 7;
+ return arrayToUtcDate(a);
+ }
+ function addDays(m, n) {
+ let a = dateToUtcArray(m);
+ a[2] += n;
+ return arrayToUtcDate(a);
+ }
+ function addMs(m, n) {
+ let a = dateToUtcArray(m);
+ a[6] += n;
+ return arrayToUtcDate(a);
+ }
+ // Diffing (all return floats)
+ // TODO: why not use ranges?
+ function diffWeeks(m0, m1) {
+ return diffDays(m0, m1) / 7;
+ }
+ function diffDays(m0, m1) {
+ return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);
+ }
+ function diffHours(m0, m1) {
+ return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);
+ }
+ function diffMinutes(m0, m1) {
+ return (m1.valueOf() - m0.valueOf()) / (1000 * 60);
+ }
+ function diffSeconds(m0, m1) {
+ return (m1.valueOf() - m0.valueOf()) / 1000;
+ }
+ function diffDayAndTime(m0, m1) {
+ let m0day = startOfDay(m0);
+ let m1day = startOfDay(m1);
+ return {
+ years: 0,
+ months: 0,
+ days: Math.round(diffDays(m0day, m1day)),
+ milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf()),
+ };
+ }
+ // Diffing Whole Units
+ function diffWholeWeeks(m0, m1) {
+ let d = diffWholeDays(m0, m1);
+ if (d !== null && d % 7 === 0) {
+ return d / 7;
+ }
+ return null;
+ }
+ function diffWholeDays(m0, m1) {
+ if (timeAsMs(m0) === timeAsMs(m1)) {
+ return Math.round(diffDays(m0, m1));
+ }
+ return null;
+ }
+ // Start-Of
+ function startOfDay(m) {
+ return arrayToUtcDate([
+ m.getUTCFullYear(),
+ m.getUTCMonth(),
+ m.getUTCDate(),
+ ]);
+ }
+ function startOfHour(m) {
+ return arrayToUtcDate([
+ m.getUTCFullYear(),
+ m.getUTCMonth(),
+ m.getUTCDate(),
+ m.getUTCHours(),
+ ]);
+ }
+ function startOfMinute(m) {
+ return arrayToUtcDate([
+ m.getUTCFullYear(),
+ m.getUTCMonth(),
+ m.getUTCDate(),
+ m.getUTCHours(),
+ m.getUTCMinutes(),
+ ]);
+ }
+ function startOfSecond(m) {
+ return arrayToUtcDate([
+ m.getUTCFullYear(),
+ m.getUTCMonth(),
+ m.getUTCDate(),
+ m.getUTCHours(),
+ m.getUTCMinutes(),
+ m.getUTCSeconds(),
+ ]);
+ }
+ // Week Computation
+ function weekOfYear(marker, dow, doy) {
+ let y = marker.getUTCFullYear();
+ let w = weekOfGivenYear(marker, y, dow, doy);
+ if (w < 1) {
+ return weekOfGivenYear(marker, y - 1, dow, doy);
+ }
+ let nextW = weekOfGivenYear(marker, y + 1, dow, doy);
+ if (nextW >= 1) {
+ return Math.min(w, nextW);
+ }
+ return w;
+ }
+ function weekOfGivenYear(marker, year, dow, doy) {
+ let firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);
+ let dayStart = startOfDay(marker);
+ let days = Math.round(diffDays(firstWeekStart, dayStart));
+ return Math.floor(days / 7) + 1; // zero-indexed
+ }
+ // start-of-first-week - start-of-year
+ function firstWeekOffset(year, dow, doy) {
+ // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+ let fwd = 7 + dow - doy;
+ // first-week day local weekday -- which local weekday is fwd
+ let fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;
+ return -fwdlw + fwd - 1;
+ }
+ // Array Conversion
+ function dateToLocalArray(date) {
+ return [
+ date.getFullYear(),
+ date.getMonth(),
+ date.getDate(),
+ date.getHours(),
+ date.getMinutes(),
+ date.getSeconds(),
+ date.getMilliseconds(),
+ ];
+ }
+ function arrayToLocalDate(a) {
+ return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month
+ a[3] || 0, a[4] || 0, a[5] || 0);
+ }
+ function dateToUtcArray(date) {
+ return [
+ date.getUTCFullYear(),
+ date.getUTCMonth(),
+ date.getUTCDate(),
+ date.getUTCHours(),
+ date.getUTCMinutes(),
+ date.getUTCSeconds(),
+ date.getUTCMilliseconds(),
+ ];
+ }
+ function arrayToUtcDate(a) {
+ // according to web standards (and Safari), a month index is required.
+ // massage if only given a year.
+ if (a.length === 1) {
+ a = a.concat([0]);
+ }
+ return new Date(Date.UTC(...a));
+ }
+ // Other Utils
+ function isValidDate(m) {
+ return !isNaN(m.valueOf());
+ }
+ function timeAsMs(m) {
+ return m.getUTCHours() * 1000 * 60 * 60 +
+ m.getUTCMinutes() * 1000 * 60 +
+ m.getUTCSeconds() * 1000 +
+ m.getUTCMilliseconds();
+ }
+
+ // timeZoneOffset is in minutes
+ function buildIsoString(marker, timeZoneOffset, stripZeroTime = false) {
+ let s = marker.toISOString();
+ s = s.replace('.000', '');
+ if (stripZeroTime) {
+ s = s.replace('T00:00:00Z', '');
+ }
+ if (s.length > 10) { // time part wasn't stripped, can add timezone info
+ if (timeZoneOffset == null) {
+ s = s.replace('Z', '');
+ }
+ else if (timeZoneOffset !== 0) {
+ s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));
+ }
+ // otherwise, its UTC-0 and we want to keep the Z
+ }
+ return s;
+ }
+ // formats the date, but with no time part
+ // TODO: somehow merge with buildIsoString and stripZeroTime
+ // TODO: rename. omit "string"
+ function formatDayString(marker) {
+ return marker.toISOString().replace(/T.*$/, '');
+ }
+ // TODO: use Date::toISOString and use everything after the T?
+ function formatIsoTimeString(marker) {
+ return padStart(marker.getUTCHours(), 2) + ':' +
+ padStart(marker.getUTCMinutes(), 2) + ':' +
+ padStart(marker.getUTCSeconds(), 2);
+ }
+ function formatTimeZoneOffset(minutes, doIso = false) {
+ let sign = minutes < 0 ? '-' : '+';
+ let abs = Math.abs(minutes);
+ let hours = Math.floor(abs / 60);
+ let mins = Math.round(abs % 60);
+ if (doIso) {
+ return `${sign + padStart(hours, 2)}:${padStart(mins, 2)}`;
+ }
+ return `GMT${sign}${hours}${mins ? `:${padStart(mins, 2)}` : ''}`;
+ }
+
+ // TODO: new util arrayify?
+ function removeExact(array, exactVal) {
+ let removeCnt = 0;
+ let i = 0;
+ while (i < array.length) {
+ if (array[i] === exactVal) {
+ array.splice(i, 1);
+ removeCnt += 1;
+ }
+ else {
+ i += 1;
+ }
+ }
+ return removeCnt;
+ }
+ function isArraysEqual(a0, a1, equalityFunc) {
+ if (a0 === a1) {
+ return true;
+ }
+ let len = a0.length;
+ let i;
+ if (len !== a1.length) { // not array? or not same length?
+ return false;
+ }
+ for (i = 0; i < len; i += 1) {
+ if (!(equalityFunc ? equalityFunc(a0[i], a1[i]) : a0[i] === a1[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function memoize(workerFunc, resEquality, teardownFunc) {
+ let currentArgs;
+ let currentRes;
+ return function (...newArgs) {
+ if (!currentArgs) {
+ currentRes = workerFunc.apply(this, newArgs);
+ }
+ else if (!isArraysEqual(currentArgs, newArgs)) {
+ if (teardownFunc) {
+ teardownFunc(currentRes);
+ }
+ let res = workerFunc.apply(this, newArgs);
+ if (!resEquality || !resEquality(res, currentRes)) {
+ currentRes = res;
+ }
+ }
+ currentArgs = newArgs;
+ return currentRes;
+ };
+ }
+ function memoizeObjArg(workerFunc, resEquality, teardownFunc) {
+ let currentArg;
+ let currentRes;
+ return (newArg) => {
+ if (!currentArg) {
+ currentRes = workerFunc.call(this, newArg);
+ }
+ else if (!isPropsEqual(currentArg, newArg)) {
+ if (teardownFunc) {
+ teardownFunc(currentRes);
+ }
+ let res = workerFunc.call(this, newArg);
+ if (!resEquality || !resEquality(res, currentRes)) {
+ currentRes = res;
+ }
+ }
+ currentArg = newArg;
+ return currentRes;
+ };
+ }
+ function memoizeArraylike(// used at all?
+ workerFunc, resEquality, teardownFunc) {
+ let currentArgSets = [];
+ let currentResults = [];
+ return (newArgSets) => {
+ let currentLen = currentArgSets.length;
+ let newLen = newArgSets.length;
+ let i = 0;
+ for (; i < currentLen; i += 1) {
+ if (!newArgSets[i]) { // one of the old sets no longer exists
+ if (teardownFunc) {
+ teardownFunc(currentResults[i]);
+ }
+ }
+ else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {
+ if (teardownFunc) {
+ teardownFunc(currentResults[i]);
+ }
+ let res = workerFunc.apply(this, newArgSets[i]);
+ if (!resEquality || !resEquality(res, currentResults[i])) {
+ currentResults[i] = res;
+ }
+ }
+ }
+ for (; i < newLen; i += 1) {
+ currentResults[i] = workerFunc.apply(this, newArgSets[i]);
+ }
+ currentArgSets = newArgSets;
+ currentResults.splice(newLen); // remove excess
+ return currentResults;
+ };
+ }
+ function memoizeHashlike(workerFunc, resEquality, teardownFunc) {
+ let currentArgHash = {};
+ let currentResHash = {};
+ return (newArgHash) => {
+ let newResHash = {};
+ for (let key in newArgHash) {
+ if (!currentResHash[key]) {
+ newResHash[key] = workerFunc.apply(this, newArgHash[key]);
+ }
+ else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {
+ if (teardownFunc) {
+ teardownFunc(currentResHash[key]);
+ }
+ let res = workerFunc.apply(this, newArgHash[key]);
+ newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))
+ ? currentResHash[key]
+ : res;
+ }
+ else {
+ newResHash[key] = currentResHash[key];
+ }
+ }
+ currentArgHash = newArgHash;
+ currentResHash = newResHash;
+ return newResHash;
+ };
+ }
+
+ const EXTENDED_SETTINGS_AND_SEVERITIES = {
+ week: 3,
+ separator: 0,
+ omitZeroMinute: 0,
+ meridiem: 0,
+ omitCommas: 0,
+ };
+ const STANDARD_DATE_PROP_SEVERITIES = {
+ timeZoneName: 7,
+ era: 6,
+ year: 5,
+ month: 4,
+ day: 2,
+ weekday: 2,
+ hour: 1,
+ minute: 1,
+ second: 1,
+ };
+ const MERIDIEM_RE = /\s*([ap])\.?m\.?/i; // eats up leading spaces too
+ const COMMA_RE = /,/g; // we need re for globalness
+ const MULTI_SPACE_RE = /\s+/g;
+ const LTR_RE = /\u200e/g; // control character
+ const UTC_RE = /UTC|GMT/;
+ class NativeFormatter {
+ constructor(formatSettings) {
+ let standardDateProps = {};
+ let extendedSettings = {};
+ let severity = 0;
+ for (let name in formatSettings) {
+ if (name in EXTENDED_SETTINGS_AND_SEVERITIES) {
+ extendedSettings[name] = formatSettings[name];
+ severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name], severity);
+ }
+ else {
+ standardDateProps[name] = formatSettings[name];
+ if (name in STANDARD_DATE_PROP_SEVERITIES) { // TODO: what about hour12? no severity
+ severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name], severity);
+ }
+ }
+ }
+ this.standardDateProps = standardDateProps;
+ this.extendedSettings = extendedSettings;
+ this.severity = severity;
+ this.buildFormattingFunc = memoize(buildFormattingFunc);
+ }
+ format(date, context) {
+ return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);
+ }
+ formatRange(start, end, context, betterDefaultSeparator) {
+ let { standardDateProps, extendedSettings } = this;
+ let diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);
+ if (!diffSeverity) {
+ return this.format(start, context);
+ }
+ let biggestUnitForPartial = diffSeverity;
+ if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time
+ (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&
+ (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&
+ (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {
+ biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time
+ }
+ let full0 = this.format(start, context);
+ let full1 = this.format(end, context);
+ if (full0 === full1) {
+ return full0;
+ }
+ let partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);
+ let partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);
+ let partial0 = partialFormattingFunc(start);
+ let partial1 = partialFormattingFunc(end);
+ let insertion = findCommonInsertion(full0, partial0, full1, partial1);
+ let separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || '';
+ if (insertion) {
+ return insertion.before + partial0 + separator + partial1 + insertion.after;
+ }
+ return full0 + separator + full1;
+ }
+ getLargestUnit() {
+ switch (this.severity) {
+ case 7:
+ case 6:
+ case 5:
+ return 'year';
+ case 4:
+ return 'month';
+ case 3:
+ return 'week';
+ case 2:
+ return 'day';
+ default:
+ return 'time'; // really?
+ }
+ }
+ }
+ function buildFormattingFunc(standardDateProps, extendedSettings, context) {
+ let standardDatePropCnt = Object.keys(standardDateProps).length;
+ if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {
+ return (date) => (formatTimeZoneOffset(date.timeZoneOffset));
+ }
+ if (standardDatePropCnt === 0 && extendedSettings.week) {
+ return (date) => (formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.weekTextLong, context.locale, extendedSettings.week));
+ }
+ return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);
+ }
+ function buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {
+ standardDateProps = Object.assign({}, standardDateProps); // copy
+ extendedSettings = Object.assign({}, extendedSettings); // copy
+ sanitizeSettings(standardDateProps, extendedSettings);
+ standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers
+ let normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);
+ let zeroFormat; // needed?
+ if (extendedSettings.omitZeroMinute) {
+ let zeroProps = Object.assign({}, standardDateProps);
+ delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings
+ zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);
+ }
+ return (date) => {
+ let { marker } = date;
+ let format;
+ if (zeroFormat && !marker.getUTCMinutes()) {
+ format = zeroFormat;
+ }
+ else {
+ format = normalFormat;
+ }
+ let s = format.format(marker);
+ return postProcess(s, date, standardDateProps, extendedSettings, context);
+ };
+ }
+ function sanitizeSettings(standardDateProps, extendedSettings) {
+ // deal with a browser inconsistency where formatting the timezone
+ // requires that the hour/minute be present.
+ if (standardDateProps.timeZoneName) {
+ if (!standardDateProps.hour) {
+ standardDateProps.hour = '2-digit';
+ }
+ if (!standardDateProps.minute) {
+ standardDateProps.minute = '2-digit';
+ }
+ }
+ // only support short timezone names
+ if (standardDateProps.timeZoneName === 'long') {
+ standardDateProps.timeZoneName = 'short';
+ }
+ // if requesting to display seconds, MUST display minutes
+ if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {
+ delete extendedSettings.omitZeroMinute;
+ }
+ }
+ function postProcess(s, date, standardDateProps, extendedSettings, context) {
+ s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes
+ if (standardDateProps.timeZoneName === 'short') {
+ s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?
+ 'UTC' : // important to normalize for IE, which does "GMT"
+ formatTimeZoneOffset(date.timeZoneOffset));
+ }
+ if (extendedSettings.omitCommas) {
+ s = s.replace(COMMA_RE, '').trim();
+ }
+ if (extendedSettings.omitZeroMinute) {
+ s = s.replace(':00', ''); // zeroFormat doesn't always achieve this
+ }
+ // ^ do anything that might create adjacent spaces before this point,
+ // because MERIDIEM_RE likes to eat up loading spaces
+ if (extendedSettings.meridiem === false) {
+ s = s.replace(MERIDIEM_RE, '').trim();
+ }
+ else if (extendedSettings.meridiem === 'narrow') { // a/p
+ s = s.replace(MERIDIEM_RE, (m0, m1) => m1.toLocaleLowerCase());
+ }
+ else if (extendedSettings.meridiem === 'short') { // am/pm
+ s = s.replace(MERIDIEM_RE, (m0, m1) => `${m1.toLocaleLowerCase()}m`);
+ }
+ else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase
+ s = s.replace(MERIDIEM_RE, (m0) => m0.toLocaleLowerCase());
+ }
+ s = s.replace(MULTI_SPACE_RE, ' ');
+ s = s.trim();
+ return s;
+ }
+ function injectTzoStr(s, tzoStr) {
+ let replaced = false;
+ s = s.replace(UTC_RE, () => {
+ replaced = true;
+ return tzoStr;
+ });
+ // IE11 doesn't include UTC/GMT in the original string, so append to end
+ if (!replaced) {
+ s += ` ${tzoStr}`;
+ }
+ return s;
+ }
+ function formatWeekNumber(num, weekText, weekTextLong, locale, display) {
+ let parts = [];
+ if (display === 'long') {
+ parts.push(weekTextLong);
+ }
+ else if (display === 'short' || display === 'narrow') {
+ parts.push(weekText);
+ }
+ if (display === 'long' || display === 'short') {
+ parts.push(' ');
+ }
+ parts.push(locale.simpleNumberFormat.format(num));
+ if (locale.options.direction === 'rtl') { // TODO: use control characters instead?
+ parts.reverse();
+ }
+ return parts.join('');
+ }
+ // Range Formatting Utils
+ // 0 = exactly the same
+ // 1 = different by time
+ // and bigger
+ function computeMarkerDiffSeverity(d0, d1, ca) {
+ if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {
+ return 5;
+ }
+ if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {
+ return 4;
+ }
+ if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {
+ return 2;
+ }
+ if (timeAsMs(d0) !== timeAsMs(d1)) {
+ return 1;
+ }
+ return 0;
+ }
+ function computePartialFormattingOptions(options, biggestUnit) {
+ let partialOptions = {};
+ for (let name in options) {
+ if (!(name in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)
+ STANDARD_DATE_PROP_SEVERITIES[name] <= biggestUnit) {
+ partialOptions[name] = options[name];
+ }
+ }
+ return partialOptions;
+ }
+ function findCommonInsertion(full0, partial0, full1, partial1) {
+ let i0 = 0;
+ while (i0 < full0.length) {
+ let found0 = full0.indexOf(partial0, i0);
+ if (found0 === -1) {
+ break;
+ }
+ let before0 = full0.substr(0, found0);
+ i0 = found0 + partial0.length;
+ let after0 = full0.substr(i0);
+ let i1 = 0;
+ while (i1 < full1.length) {
+ let found1 = full1.indexOf(partial1, i1);
+ if (found1 === -1) {
+ break;
+ }
+ let before1 = full1.substr(0, found1);
+ i1 = found1 + partial1.length;
+ let after1 = full1.substr(i1);
+ if (before0 === before1 && after0 === after1) {
+ return {
+ before: before0,
+ after: after0,
+ };
+ }
+ }
+ }
+ return null;
+ }
+
+ function expandZonedMarker(dateInfo, calendarSystem) {
+ let a = calendarSystem.markerToArray(dateInfo.marker);
+ return {
+ marker: dateInfo.marker,
+ timeZoneOffset: dateInfo.timeZoneOffset,
+ array: a,
+ year: a[0],
+ month: a[1],
+ day: a[2],
+ hour: a[3],
+ minute: a[4],
+ second: a[5],
+ millisecond: a[6],
+ };
+ }
+
+ function createVerboseFormattingArg(start, end, context, betterDefaultSeparator) {
+ let startInfo = expandZonedMarker(start, context.calendarSystem);
+ let endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;
+ return {
+ date: startInfo,
+ start: startInfo,
+ end: endInfo,
+ timeZone: context.timeZone,
+ localeCodes: context.locale.codes,
+ defaultSeparator: betterDefaultSeparator || context.defaultSeparator,
+ };
+ }
+
+ /*
+ TODO: fix the terminology of "formatter" vs "formatting func"
+ */
+ /*
+ At the time of instantiation, this object does not know which cmd-formatting system it will use.
+ It receives this at the time of formatting, as a setting.
+ */
+ class CmdFormatter {
+ constructor(cmdStr) {
+ this.cmdStr = cmdStr;
+ }
+ format(date, context, betterDefaultSeparator) {
+ return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
+ }
+ formatRange(start, end, context, betterDefaultSeparator) {
+ return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, betterDefaultSeparator));
+ }
+ }
+
+ class FuncFormatter {
+ constructor(func) {
+ this.func = func;
+ }
+ format(date, context, betterDefaultSeparator) {
+ return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
+ }
+ formatRange(start, end, context, betterDefaultSeparator) {
+ return this.func(createVerboseFormattingArg(start, end, context, betterDefaultSeparator));
+ }
+ }
+
+ function createFormatter(input) {
+ if (typeof input === 'object' && input) { // non-null object
+ return new NativeFormatter(input);
+ }
+ if (typeof input === 'string') {
+ return new CmdFormatter(input);
+ }
+ if (typeof input === 'function') {
+ return new FuncFormatter(input);
+ }
+ return null;
+ }
+
+ // base options
+ // ------------
+ const BASE_OPTION_REFINERS = {
+ navLinkDayClick: identity,
+ navLinkWeekClick: identity,
+ duration: createDuration,
+ bootstrapFontAwesome: identity,
+ buttonIcons: identity,
+ customButtons: identity,
+ defaultAllDayEventDuration: createDuration,
+ defaultTimedEventDuration: createDuration,
+ nextDayThreshold: createDuration,
+ scrollTime: createDuration,
+ scrollTimeReset: Boolean,
+ slotMinTime: createDuration,
+ slotMaxTime: createDuration,
+ dayPopoverFormat: createFormatter,
+ slotDuration: createDuration,
+ snapDuration: createDuration,
+ headerToolbar: identity,
+ footerToolbar: identity,
+ defaultRangeSeparator: String,
+ titleRangeSeparator: String,
+ forceEventDuration: Boolean,
+ dayHeaders: Boolean,
+ dayHeaderFormat: createFormatter,
+ dayHeaderClassNames: identity,
+ dayHeaderContent: identity,
+ dayHeaderDidMount: identity,
+ dayHeaderWillUnmount: identity,
+ dayCellClassNames: identity,
+ dayCellContent: identity,
+ dayCellDidMount: identity,
+ dayCellWillUnmount: identity,
+ initialView: String,
+ aspectRatio: Number,
+ weekends: Boolean,
+ weekNumberCalculation: identity,
+ weekNumbers: Boolean,
+ weekNumberClassNames: identity,
+ weekNumberContent: identity,
+ weekNumberDidMount: identity,
+ weekNumberWillUnmount: identity,
+ editable: Boolean,
+ viewClassNames: identity,
+ viewDidMount: identity,
+ viewWillUnmount: identity,
+ nowIndicator: Boolean,
+ nowIndicatorClassNames: identity,
+ nowIndicatorContent: identity,
+ nowIndicatorDidMount: identity,
+ nowIndicatorWillUnmount: identity,
+ showNonCurrentDates: Boolean,
+ lazyFetching: Boolean,
+ startParam: String,
+ endParam: String,
+ timeZoneParam: String,
+ timeZone: String,
+ locales: identity,
+ locale: identity,
+ themeSystem: String,
+ dragRevertDuration: Number,
+ dragScroll: Boolean,
+ allDayMaintainDuration: Boolean,
+ unselectAuto: Boolean,
+ dropAccept: identity,
+ eventOrder: parseFieldSpecs,
+ eventOrderStrict: Boolean,
+ handleWindowResize: Boolean,
+ windowResizeDelay: Number,
+ longPressDelay: Number,
+ eventDragMinDistance: Number,
+ expandRows: Boolean,
+ height: identity,
+ contentHeight: identity,
+ direction: String,
+ weekNumberFormat: createFormatter,
+ eventResizableFromStart: Boolean,
+ displayEventTime: Boolean,
+ displayEventEnd: Boolean,
+ weekText: String,
+ weekTextLong: String,
+ progressiveEventRendering: Boolean,
+ businessHours: identity,
+ initialDate: identity,
+ now: identity,
+ eventDataTransform: identity,
+ stickyHeaderDates: identity,
+ stickyFooterScrollbar: identity,
+ viewHeight: identity,
+ defaultAllDay: Boolean,
+ eventSourceFailure: identity,
+ eventSourceSuccess: identity,
+ eventDisplay: String,
+ eventStartEditable: Boolean,
+ eventDurationEditable: Boolean,
+ eventOverlap: identity,
+ eventConstraint: identity,
+ eventAllow: identity,
+ eventBackgroundColor: String,
+ eventBorderColor: String,
+ eventTextColor: String,
+ eventColor: String,
+ eventClassNames: identity,
+ eventContent: identity,
+ eventDidMount: identity,
+ eventWillUnmount: identity,
+ selectConstraint: identity,
+ selectOverlap: identity,
+ selectAllow: identity,
+ droppable: Boolean,
+ unselectCancel: String,
+ slotLabelFormat: identity,
+ slotLaneClassNames: identity,
+ slotLaneContent: identity,
+ slotLaneDidMount: identity,
+ slotLaneWillUnmount: identity,
+ slotLabelClassNames: identity,
+ slotLabelContent: identity,
+ slotLabelDidMount: identity,
+ slotLabelWillUnmount: identity,
+ dayMaxEvents: identity,
+ dayMaxEventRows: identity,
+ dayMinWidth: Number,
+ slotLabelInterval: createDuration,
+ allDayText: String,
+ allDayClassNames: identity,
+ allDayContent: identity,
+ allDayDidMount: identity,
+ allDayWillUnmount: identity,
+ slotMinWidth: Number,
+ navLinks: Boolean,
+ eventTimeFormat: createFormatter,
+ rerenderDelay: Number,
+ moreLinkText: identity,
+ moreLinkHint: identity,
+ selectMinDistance: Number,
+ selectable: Boolean,
+ selectLongPressDelay: Number,
+ eventLongPressDelay: Number,
+ selectMirror: Boolean,
+ eventMaxStack: Number,
+ eventMinHeight: Number,
+ eventMinWidth: Number,
+ eventShortHeight: Number,
+ slotEventOverlap: Boolean,
+ plugins: identity,
+ firstDay: Number,
+ dayCount: Number,
+ dateAlignment: String,
+ dateIncrement: createDuration,
+ hiddenDays: identity,
+ monthMode: Boolean,
+ fixedWeekCount: Boolean,
+ validRange: identity,
+ visibleRange: identity,
+ titleFormat: identity,
+ eventInteractive: Boolean,
+ // only used by list-view, but languages define the value, so we need it in base options
+ noEventsText: String,
+ viewHint: identity,
+ navLinkHint: identity,
+ closeHint: String,
+ timeHint: String,
+ eventHint: String,
+ moreLinkClick: identity,
+ moreLinkClassNames: identity,
+ moreLinkContent: identity,
+ moreLinkDidMount: identity,
+ moreLinkWillUnmount: identity,
+ // for connectors
+ // (can't be part of plugin system b/c must be provided at runtime)
+ handleCustomRendering: identity,
+ customRenderingMetaMap: identity,
+ customRenderingReplacesEl: Boolean,
+ };
+ // do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.
+ // raw values.
+ const BASE_OPTION_DEFAULTS = {
+ eventDisplay: 'auto',
+ defaultRangeSeparator: ' - ',
+ titleRangeSeparator: ' \u2013 ',
+ defaultTimedEventDuration: '01:00:00',
+ defaultAllDayEventDuration: { day: 1 },
+ forceEventDuration: false,
+ nextDayThreshold: '00:00:00',
+ dayHeaders: true,
+ initialView: '',
+ aspectRatio: 1.35,
+ headerToolbar: {
+ start: 'title',
+ center: '',
+ end: 'today prev,next',
+ },
+ weekends: true,
+ weekNumbers: false,
+ weekNumberCalculation: 'local',
+ editable: false,
+ nowIndicator: false,
+ scrollTime: '06:00:00',
+ scrollTimeReset: true,
+ slotMinTime: '00:00:00',
+ slotMaxTime: '24:00:00',
+ showNonCurrentDates: true,
+ lazyFetching: true,
+ startParam: 'start',
+ endParam: 'end',
+ timeZoneParam: 'timeZone',
+ timeZone: 'local',
+ locales: [],
+ locale: '',
+ themeSystem: 'standard',
+ dragRevertDuration: 500,
+ dragScroll: true,
+ allDayMaintainDuration: false,
+ unselectAuto: true,
+ dropAccept: '*',
+ eventOrder: 'start,-duration,allDay,title',
+ dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },
+ handleWindowResize: true,
+ windowResizeDelay: 100,
+ longPressDelay: 1000,
+ eventDragMinDistance: 5,
+ expandRows: false,
+ navLinks: false,
+ selectable: false,
+ eventMinHeight: 15,
+ eventMinWidth: 30,
+ eventShortHeight: 30,
+ };
+ // calendar listeners
+ // ------------------
+ const CALENDAR_LISTENER_REFINERS = {
+ datesSet: identity,
+ eventsSet: identity,
+ eventAdd: identity,
+ eventChange: identity,
+ eventRemove: identity,
+ windowResize: identity,
+ eventClick: identity,
+ eventMouseEnter: identity,
+ eventMouseLeave: identity,
+ select: identity,
+ unselect: identity,
+ loading: identity,
+ // internal
+ _unmount: identity,
+ _beforeprint: identity,
+ _afterprint: identity,
+ _noEventDrop: identity,
+ _noEventResize: identity,
+ _resize: identity,
+ _scrollRequest: identity,
+ };
+ // calendar-specific options
+ // -------------------------
+ const CALENDAR_OPTION_REFINERS = {
+ buttonText: identity,
+ buttonHints: identity,
+ views: identity,
+ plugins: identity,
+ initialEvents: identity,
+ events: identity,
+ eventSources: identity,
+ };
+ const COMPLEX_OPTION_COMPARATORS = {
+ headerToolbar: isMaybeObjectsEqual,
+ footerToolbar: isMaybeObjectsEqual,
+ buttonText: isMaybeObjectsEqual,
+ buttonHints: isMaybeObjectsEqual,
+ buttonIcons: isMaybeObjectsEqual,
+ dateIncrement: isMaybeObjectsEqual,
+ };
+ function isMaybeObjectsEqual(a, b) {
+ if (typeof a === 'object' && typeof b === 'object' && a && b) { // both non-null objects
+ return isPropsEqual(a, b);
+ }
+ return a === b;
+ }
+ // view-specific options
+ // ---------------------
+ const VIEW_OPTION_REFINERS = {
+ type: String,
+ component: identity,
+ buttonText: String,
+ buttonTextKey: String,
+ dateProfileGeneratorClass: identity,
+ usesMinMaxTime: Boolean,
+ classNames: identity,
+ content: identity,
+ didMount: identity,
+ willUnmount: identity,
+ };
+ // util funcs
+ // ----------------------------------------------------------------------------------------------------
+ function mergeRawOptions(optionSets) {
+ return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS);
+ }
+ function refineProps(input, refiners) {
+ let refined = {};
+ let extra = {};
+ for (let propName in refiners) {
+ if (propName in input) {
+ refined[propName] = refiners[propName](input[propName]);
+ }
+ }
+ for (let propName in input) {
+ if (!(propName in refiners)) {
+ extra[propName] = input[propName];
+ }
+ }
+ return { refined, extra };
+ }
+ function identity(raw) {
+ return raw;
+ }
+
+ function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {
+ return {
+ instanceId: guid(),
+ defId,
+ range,
+ forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,
+ forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo,
+ };
+ }
+
+ function parseRecurring(refined, defaultAllDay, dateEnv, recurringTypes) {
+ for (let i = 0; i < recurringTypes.length; i += 1) {
+ let parsed = recurringTypes[i].parse(refined, dateEnv);
+ if (parsed) {
+ let { allDay } = refined;
+ if (allDay == null) {
+ allDay = defaultAllDay;
+ if (allDay == null) {
+ allDay = parsed.allDayGuess;
+ if (allDay == null) {
+ allDay = false;
+ }
+ }
+ }
+ return {
+ allDay,
+ duration: parsed.duration,
+ typeData: parsed.typeData,
+ typeId: i,
+ };
+ }
+ }
+ return null;
+ }
+ function expandRecurring(eventStore, framingRange, context) {
+ let { dateEnv, pluginHooks, options } = context;
+ let { defs, instances } = eventStore;
+ // remove existing recurring instances
+ // TODO: bad. always expand events as a second step
+ instances = filterHash(instances, (instance) => !defs[instance.defId].recurringDef);
+ for (let defId in defs) {
+ let def = defs[defId];
+ if (def.recurringDef) {
+ let { duration } = def.recurringDef;
+ if (!duration) {
+ duration = def.allDay ?
+ options.defaultAllDayEventDuration :
+ options.defaultTimedEventDuration;
+ }
+ let starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes);
+ for (let start of starts) {
+ let instance = createEventInstance(defId, {
+ start,
+ end: dateEnv.add(start, duration),
+ });
+ instances[instance.instanceId] = instance;
+ }
+ }
+ }
+ return { defs, instances };
+ }
+ /*
+ Event MUST have a recurringDef
+ */
+ function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {
+ let typeDef = recurringTypes[eventDef.recurringDef.typeId];
+ let markers = typeDef.expand(eventDef.recurringDef.typeData, {
+ start: dateEnv.subtract(framingRange.start, duration),
+ end: framingRange.end,
+ }, dateEnv);
+ // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to
+ if (eventDef.allDay) {
+ markers = markers.map(startOfDay);
+ }
+ return markers;
+ }
+
+ function parseEvents(rawEvents, eventSource, context, allowOpenRange) {
+ let eventStore = createEmptyEventStore();
+ let eventRefiners = buildEventRefiners(context);
+ for (let rawEvent of rawEvents) {
+ let tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners);
+ if (tuple) {
+ eventTupleToStore(tuple, eventStore);
+ }
+ }
+ return eventStore;
+ }
+ function eventTupleToStore(tuple, eventStore = createEmptyEventStore()) {
+ eventStore.defs[tuple.def.defId] = tuple.def;
+ if (tuple.instance) {
+ eventStore.instances[tuple.instance.instanceId] = tuple.instance;
+ }
+ return eventStore;
+ }
+ // retrieves events that have the same groupId as the instance specified by `instanceId`
+ // or they are the same as the instance.
+ // why might instanceId not be in the store? an event from another calendar?
+ function getRelevantEvents(eventStore, instanceId) {
+ let instance = eventStore.instances[instanceId];
+ if (instance) {
+ let def = eventStore.defs[instance.defId];
+ // get events/instances with same group
+ let newStore = filterEventStoreDefs(eventStore, (lookDef) => isEventDefsGrouped(def, lookDef));
+ // add the original
+ // TODO: wish we could use eventTupleToStore or something like it
+ newStore.defs[def.defId] = def;
+ newStore.instances[instance.instanceId] = instance;
+ return newStore;
+ }
+ return createEmptyEventStore();
+ }
+ function isEventDefsGrouped(def0, def1) {
+ return Boolean(def0.groupId && def0.groupId === def1.groupId);
+ }
+ function createEmptyEventStore() {
+ return { defs: {}, instances: {} };
+ }
+ function mergeEventStores(store0, store1) {
+ return {
+ defs: Object.assign(Object.assign({}, store0.defs), store1.defs),
+ instances: Object.assign(Object.assign({}, store0.instances), store1.instances),
+ };
+ }
+ function filterEventStoreDefs(eventStore, filterFunc) {
+ let defs = filterHash(eventStore.defs, filterFunc);
+ let instances = filterHash(eventStore.instances, (instance) => (defs[instance.defId] // still exists?
+ ));
+ return { defs, instances };
+ }
+ function excludeSubEventStore(master, sub) {
+ let { defs, instances } = master;
+ let filteredDefs = {};
+ let filteredInstances = {};
+ for (let defId in defs) {
+ if (!sub.defs[defId]) { // not explicitly excluded
+ filteredDefs[defId] = defs[defId];
+ }
+ }
+ for (let instanceId in instances) {
+ if (!sub.instances[instanceId] && // not explicitly excluded
+ filteredDefs[instances[instanceId].defId] // def wasn't filtered away
+ ) {
+ filteredInstances[instanceId] = instances[instanceId];
+ }
+ }
+ return {
+ defs: filteredDefs,
+ instances: filteredInstances,
+ };
+ }
+
+ function normalizeConstraint(input, context) {
+ if (Array.isArray(input)) {
+ return parseEvents(input, null, context, true); // allowOpenRange=true
+ }
+ if (typeof input === 'object' && input) { // non-null object
+ return parseEvents([input], null, context, true); // allowOpenRange=true
+ }
+ if (input != null) {
+ return String(input);
+ }
+ return null;
+ }
+
+ function parseClassNames(raw) {
+ if (Array.isArray(raw)) {
+ return raw;
+ }
+ if (typeof raw === 'string') {
+ return raw.split(/\s+/);
+ }
+ return [];
+ }
+
+ // TODO: better called "EventSettings" or "EventConfig"
+ // TODO: move this file into structs
+ // TODO: separate constraint/overlap/allow, because selection uses only that, not other props
+ const EVENT_UI_REFINERS = {
+ display: String,
+ editable: Boolean,
+ startEditable: Boolean,
+ durationEditable: Boolean,
+ constraint: identity,
+ overlap: identity,
+ allow: identity,
+ className: parseClassNames,
+ classNames: parseClassNames,
+ color: String,
+ backgroundColor: String,
+ borderColor: String,
+ textColor: String,
+ };
+ const EMPTY_EVENT_UI = {
+ display: null,
+ startEditable: null,
+ durationEditable: null,
+ constraints: [],
+ overlap: null,
+ allows: [],
+ backgroundColor: '',
+ borderColor: '',
+ textColor: '',
+ classNames: [],
+ };
+ function createEventUi(refined, context) {
+ let constraint = normalizeConstraint(refined.constraint, context);
+ return {
+ display: refined.display || null,
+ startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,
+ durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,
+ constraints: constraint != null ? [constraint] : [],
+ overlap: refined.overlap != null ? refined.overlap : null,
+ allows: refined.allow != null ? [refined.allow] : [],
+ backgroundColor: refined.backgroundColor || refined.color || '',
+ borderColor: refined.borderColor || refined.color || '',
+ textColor: refined.textColor || '',
+ classNames: (refined.className || []).concat(refined.classNames || []), // join singular and plural
+ };
+ }
+ // TODO: prevent against problems with <2 args!
+ function combineEventUis(uis) {
+ return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);
+ }
+ function combineTwoEventUis(item0, item1) {
+ return {
+ display: item1.display != null ? item1.display : item0.display,
+ startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,
+ durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,
+ constraints: item0.constraints.concat(item1.constraints),
+ overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,
+ allows: item0.allows.concat(item1.allows),
+ backgroundColor: item1.backgroundColor || item0.backgroundColor,
+ borderColor: item1.borderColor || item0.borderColor,
+ textColor: item1.textColor || item0.textColor,
+ classNames: item0.classNames.concat(item1.classNames),
+ };
+ }
+
+ const EVENT_NON_DATE_REFINERS = {
+ id: String,
+ groupId: String,
+ title: String,
+ url: String,
+ interactive: Boolean,
+ };
+ const EVENT_DATE_REFINERS = {
+ start: identity,
+ end: identity,
+ date: identity,
+ allDay: Boolean,
+ };
+ const EVENT_REFINERS = Object.assign(Object.assign(Object.assign({}, EVENT_NON_DATE_REFINERS), EVENT_DATE_REFINERS), { extendedProps: identity });
+ function parseEvent(raw, eventSource, context, allowOpenRange, refiners = buildEventRefiners(context)) {
+ let { refined, extra } = refineEventDef(raw, context, refiners);
+ let defaultAllDay = computeIsDefaultAllDay(eventSource, context);
+ let recurringRes = parseRecurring(refined, defaultAllDay, context.dateEnv, context.pluginHooks.recurringTypes);
+ if (recurringRes) {
+ let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', recurringRes.allDay, Boolean(recurringRes.duration), context);
+ def.recurringDef = {
+ typeId: recurringRes.typeId,
+ typeData: recurringRes.typeData,
+ duration: recurringRes.duration,
+ };
+ return { def, instance: null };
+ }
+ let singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange);
+ if (singleRes) {
+ let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', singleRes.allDay, singleRes.hasEnd, context);
+ let instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);
+ return { def, instance };
+ }
+ return null;
+ }
+ function refineEventDef(raw, context, refiners = buildEventRefiners(context)) {
+ return refineProps(raw, refiners);
+ }
+ function buildEventRefiners(context) {
+ return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_REFINERS), context.pluginHooks.eventRefiners);
+ }
+ /*
+ Will NOT populate extendedProps with the leftover properties.
+ Will NOT populate date-related props.
+ */
+ function parseEventDef(refined, extra, sourceId, allDay, hasEnd, context) {
+ let def = {
+ title: refined.title || '',
+ groupId: refined.groupId || '',
+ publicId: refined.id || '',
+ url: refined.url || '',
+ recurringDef: null,
+ defId: guid(),
+ sourceId,
+ allDay,
+ hasEnd,
+ interactive: refined.interactive,
+ ui: createEventUi(refined, context),
+ extendedProps: Object.assign(Object.assign({}, (refined.extendedProps || {})), extra),
+ };
+ for (let memberAdder of context.pluginHooks.eventDefMemberAdders) {
+ Object.assign(def, memberAdder(refined));
+ }
+ // help out EventImpl from having user modify props
+ Object.freeze(def.ui.classNames);
+ Object.freeze(def.extendedProps);
+ return def;
+ }
+ function parseSingle(refined, defaultAllDay, context, allowOpenRange) {
+ let { allDay } = refined;
+ let startMeta;
+ let startMarker = null;
+ let hasEnd = false;
+ let endMeta;
+ let endMarker = null;
+ let startInput = refined.start != null ? refined.start : refined.date;
+ startMeta = context.dateEnv.createMarkerMeta(startInput);
+ if (startMeta) {
+ startMarker = startMeta.marker;
+ }
+ else if (!allowOpenRange) {
+ return null;
+ }
+ if (refined.end != null) {
+ endMeta = context.dateEnv.createMarkerMeta(refined.end);
+ }
+ if (allDay == null) {
+ if (defaultAllDay != null) {
+ allDay = defaultAllDay;
+ }
+ else {
+ // fall back to the date props LAST
+ allDay = (!startMeta || startMeta.isTimeUnspecified) &&
+ (!endMeta || endMeta.isTimeUnspecified);
+ }
+ }
+ if (allDay && startMarker) {
+ startMarker = startOfDay(startMarker);
+ }
+ if (endMeta) {
+ endMarker = endMeta.marker;
+ if (allDay) {
+ endMarker = startOfDay(endMarker);
+ }
+ if (startMarker && endMarker <= startMarker) {
+ endMarker = null;
+ }
+ }
+ if (endMarker) {
+ hasEnd = true;
+ }
+ else if (!allowOpenRange) {
+ hasEnd = context.options.forceEventDuration || false;
+ endMarker = context.dateEnv.add(startMarker, allDay ?
+ context.options.defaultAllDayEventDuration :
+ context.options.defaultTimedEventDuration);
+ }
+ return {
+ allDay,
+ hasEnd,
+ range: { start: startMarker, end: endMarker },
+ forcedStartTzo: startMeta ? startMeta.forcedTzo : null,
+ forcedEndTzo: endMeta ? endMeta.forcedTzo : null,
+ };
+ }
+ function computeIsDefaultAllDay(eventSource, context) {
+ let res = null;
+ if (eventSource) {
+ res = eventSource.defaultAllDay;
+ }
+ if (res == null) {
+ res = context.options.defaultAllDay;
+ }
+ return res;
+ }
+
+ const DEF_DEFAULTS = {
+ startTime: '09:00',
+ endTime: '17:00',
+ daysOfWeek: [1, 2, 3, 4, 5],
+ display: 'inverse-background',
+ classNames: 'fc-non-business',
+ groupId: '_businessHours', // so multiple defs get grouped
+ };
+ /*
+ TODO: pass around as EventDefHash!!!
+ */
+ function parseBusinessHours(input, context) {
+ return parseEvents(refineInputs(input), null, context);
+ }
+ function refineInputs(input) {
+ let rawDefs;
+ if (input === true) {
+ rawDefs = [{}]; // will get DEF_DEFAULTS verbatim
+ }
+ else if (Array.isArray(input)) {
+ // if specifying an array, every sub-definition NEEDS a day-of-week
+ rawDefs = input.filter((rawDef) => rawDef.daysOfWeek);
+ }
+ else if (typeof input === 'object' && input) { // non-null object
+ rawDefs = [input];
+ }
+ else { // is probably false
+ rawDefs = [];
+ }
+ rawDefs = rawDefs.map((rawDef) => (Object.assign(Object.assign({}, DEF_DEFAULTS), rawDef)));
+ return rawDefs;
+ }
+
+ /* Date stuff that doesn't belong in datelib core
+ ----------------------------------------------------------------------------------------------------------------------*/
+ // given a timed range, computes an all-day range that has the same exact duration,
+ // but whose start time is aligned with the start of the day.
+ function computeAlignedDayRange(timedRange) {
+ let dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;
+ let start = startOfDay(timedRange.start);
+ let end = addDays(start, dayCnt);
+ return { start, end };
+ }
+ // given a timed range, computes an all-day range based on how for the end date bleeds into the next day
+ // TODO: give nextDayThreshold a default arg
+ function computeVisibleDayRange(timedRange, nextDayThreshold = createDuration(0)) {
+ let startDay = null;
+ let endDay = null;
+ if (timedRange.end) {
+ endDay = startOfDay(timedRange.end);
+ let endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`
+ // If the end time is actually inclusively part of the next day and is equal to or
+ // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.
+ // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.
+ if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {
+ endDay = addDays(endDay, 1);
+ }
+ }
+ if (timedRange.start) {
+ startDay = startOfDay(timedRange.start); // the beginning of the day the range starts
+ // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.
+ if (endDay && endDay <= startDay) {
+ endDay = addDays(startDay, 1);
+ }
+ }
+ return { start: startDay, end: endDay };
+ }
+ // spans from one day into another?
+ function isMultiDayRange(range) {
+ let visibleRange = computeVisibleDayRange(range);
+ return diffDays(visibleRange.start, visibleRange.end) > 1;
+ }
+ function diffDates(date0, date1, dateEnv, largeUnit) {
+ if (largeUnit === 'year') {
+ return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');
+ }
+ if (largeUnit === 'month') {
+ return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');
+ }
+ return diffDayAndTime(date0, date1); // returns a duration
+ }
+
+ function pointInsideRect(point, rect) {
+ return point.left >= rect.left &&
+ point.left < rect.right &&
+ point.top >= rect.top &&
+ point.top < rect.bottom;
+ }
+ // Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false
+ function intersectRects(rect1, rect2) {
+ let res = {
+ left: Math.max(rect1.left, rect2.left),
+ right: Math.min(rect1.right, rect2.right),
+ top: Math.max(rect1.top, rect2.top),
+ bottom: Math.min(rect1.bottom, rect2.bottom),
+ };
+ if (res.left < res.right && res.top < res.bottom) {
+ return res;
+ }
+ return false;
+ }
+ function translateRect(rect, deltaX, deltaY) {
+ return {
+ left: rect.left + deltaX,
+ right: rect.right + deltaX,
+ top: rect.top + deltaY,
+ bottom: rect.bottom + deltaY,
+ };
+ }
+ // Returns a new point that will have been moved to reside within the given rectangle
+ function constrainPoint(point, rect) {
+ return {
+ left: Math.min(Math.max(point.left, rect.left), rect.right),
+ top: Math.min(Math.max(point.top, rect.top), rect.bottom),
+ };
+ }
+ // Returns a point that is the center of the given rectangle
+ function getRectCenter(rect) {
+ return {
+ left: (rect.left + rect.right) / 2,
+ top: (rect.top + rect.bottom) / 2,
+ };
+ }
+ // Subtracts point2's coordinates from point1's coordinates, returning a delta
+ function diffPoints(point1, point2) {
+ return {
+ left: point1.left - point2.left,
+ top: point1.top - point2.top,
+ };
+ }
+
+ let canVGrowWithinCell;
+ function getCanVGrowWithinCell() {
+ if (canVGrowWithinCell == null) {
+ canVGrowWithinCell = computeCanVGrowWithinCell();
+ }
+ return canVGrowWithinCell;
+ }
+ function computeCanVGrowWithinCell() {
+ // for SSR, because this function is call immediately at top-level
+ // TODO: just make this logic execute top-level, immediately, instead of doing lazily
+ if (typeof document === 'undefined') {
+ return true;
+ }
+ let el = document.createElement('div');
+ el.style.position = 'absolute';
+ el.style.top = '0px';
+ el.style.left = '0px';
+ el.innerHTML = '<table><tr><td><div></div></td></tr></table>';
+ el.querySelector('table').style.height = '100px';
+ el.querySelector('div').style.height = '100%';
+ document.body.appendChild(el);
+ let div = el.querySelector('div');
+ let possible = div.offsetHeight > 0;
+ document.body.removeChild(el);
+ return possible;
+ }
+
+ const EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere
+ class Splitter {
+ constructor() {
+ this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);
+ this.splitDateSelection = memoize(this._splitDateSpan);
+ this.splitEventStore = memoize(this._splitEventStore);
+ this.splitIndividualUi = memoize(this._splitIndividualUi);
+ this.splitEventDrag = memoize(this._splitInteraction);
+ this.splitEventResize = memoize(this._splitInteraction);
+ this.eventUiBuilders = {}; // TODO: typescript protection
+ }
+ splitProps(props) {
+ let keyInfos = this.getKeyInfo(props);
+ let defKeys = this.getKeysForEventDefs(props.eventStore);
+ let dateSelections = this.splitDateSelection(props.dateSelection);
+ let individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*
+ let eventStores = this.splitEventStore(props.eventStore, defKeys);
+ let eventDrags = this.splitEventDrag(props.eventDrag);
+ let eventResizes = this.splitEventResize(props.eventResize);
+ let splitProps = {};
+ this.eventUiBuilders = mapHash(keyInfos, (info, key) => this.eventUiBuilders[key] || memoize(buildEventUiForKey));
+ for (let key in keyInfos) {
+ let keyInfo = keyInfos[key];
+ let eventStore = eventStores[key] || EMPTY_EVENT_STORE;
+ let buildEventUi = this.eventUiBuilders[key];
+ splitProps[key] = {
+ businessHours: keyInfo.businessHours || props.businessHours,
+ dateSelection: dateSelections[key] || null,
+ eventStore,
+ eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),
+ eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',
+ eventDrag: eventDrags[key] || null,
+ eventResize: eventResizes[key] || null,
+ };
+ }
+ return splitProps;
+ }
+ _splitDateSpan(dateSpan) {
+ let dateSpans = {};
+ if (dateSpan) {
+ let keys = this.getKeysForDateSpan(dateSpan);
+ for (let key of keys) {
+ dateSpans[key] = dateSpan;
+ }
+ }
+ return dateSpans;
+ }
+ _getKeysForEventDefs(eventStore) {
+ return mapHash(eventStore.defs, (eventDef) => this.getKeysForEventDef(eventDef));
+ }
+ _splitEventStore(eventStore, defKeys) {
+ let { defs, instances } = eventStore;
+ let splitStores = {};
+ for (let defId in defs) {
+ for (let key of defKeys[defId]) {
+ if (!splitStores[key]) {
+ splitStores[key] = createEmptyEventStore();
+ }
+ splitStores[key].defs[defId] = defs[defId];
+ }
+ }
+ for (let instanceId in instances) {
+ let instance = instances[instanceId];
+ for (let key of defKeys[instance.defId]) {
+ if (splitStores[key]) { // must have already been created
+ splitStores[key].instances[instanceId] = instance;
+ }
+ }
+ }
+ return splitStores;
+ }
+ _splitIndividualUi(eventUiBases, defKeys) {
+ let splitHashes = {};
+ for (let defId in eventUiBases) {
+ if (defId) { // not the '' key
+ for (let key of defKeys[defId]) {
+ if (!splitHashes[key]) {
+ splitHashes[key] = {};
+ }
+ splitHashes[key][defId] = eventUiBases[defId];
+ }
+ }
+ }
+ return splitHashes;
+ }
+ _splitInteraction(interaction) {
+ let splitStates = {};
+ if (interaction) {
+ let affectedStores = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents));
+ // can't rely on defKeys because event data is mutated
+ let mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);
+ let mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);
+ let populate = (key) => {
+ if (!splitStates[key]) {
+ splitStates[key] = {
+ affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,
+ mutatedEvents: mutatedStores[key] || EMPTY_EVENT_STORE,
+ isEvent: interaction.isEvent,
+ };
+ }
+ };
+ for (let key in affectedStores) {
+ populate(key);
+ }
+ for (let key in mutatedStores) {
+ populate(key);
+ }
+ }
+ return splitStates;
+ }
+ }
+ function buildEventUiForKey(allUi, eventUiForKey, individualUi) {
+ let baseParts = [];
+ if (allUi) {
+ baseParts.push(allUi);
+ }
+ if (eventUiForKey) {
+ baseParts.push(eventUiForKey);
+ }
+ let stuff = {
+ '': combineEventUis(baseParts),
+ };
+ if (individualUi) {
+ Object.assign(stuff, individualUi);
+ }
+ return stuff;
+ }
+
+ function parseRange(input, dateEnv) {
+ let start = null;
+ let end = null;
+ if (input.start) {
+ start = dateEnv.createMarker(input.start);
+ }
+ if (input.end) {
+ end = dateEnv.createMarker(input.end);
+ }
+ if (!start && !end) {
+ return null;
+ }
+ if (start && end && end < start) {
+ return null;
+ }
+ return { start, end };
+ }
+ // SIDE-EFFECT: will mutate ranges.
+ // Will return a new array result.
+ function invertRanges(ranges, constraintRange) {
+ let invertedRanges = [];
+ let { start } = constraintRange; // the end of the previous range. the start of the new range
+ let i;
+ let dateRange;
+ // ranges need to be in order. required for our date-walking algorithm
+ ranges.sort(compareRanges);
+ for (i = 0; i < ranges.length; i += 1) {
+ dateRange = ranges[i];
+ // add the span of time before the event (if there is any)
+ if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)
+ invertedRanges.push({ start, end: dateRange.start });
+ }
+ if (dateRange.end > start) {
+ start = dateRange.end;
+ }
+ }
+ // add the span of time after the last event (if there is any)
+ if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)
+ invertedRanges.push({ start, end: constraintRange.end });
+ }
+ return invertedRanges;
+ }
+ function compareRanges(range0, range1) {
+ return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first
+ }
+ function intersectRanges(range0, range1) {
+ let { start, end } = range0;
+ let newRange = null;
+ if (range1.start !== null) {
+ if (start === null) {
+ start = range1.start;
+ }
+ else {
+ start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));
+ }
+ }
+ if (range1.end != null) {
+ if (end === null) {
+ end = range1.end;
+ }
+ else {
+ end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));
+ }
+ }
+ if (start === null || end === null || start < end) {
+ newRange = { start, end };
+ }
+ return newRange;
+ }
+ function rangesEqual(range0, range1) {
+ return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&
+ (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());
+ }
+ function rangesIntersect(range0, range1) {
+ return (range0.end === null || range1.start === null || range0.end > range1.start) &&
+ (range0.start === null || range1.end === null || range0.start < range1.end);
+ }
+ function rangeContainsRange(outerRange, innerRange) {
+ return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&
+ (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end));
+ }
+ function rangeContainsMarker(range, date) {
+ return (range.start === null || date >= range.start) &&
+ (range.end === null || date < range.end);
+ }
+ // If the given date is not within the given range, move it inside.
+ // (If it's past the end, make it one millisecond before the end).
+ function constrainMarkerToRange(date, range) {
+ if (range.start != null && date < range.start) {
+ return range.start;
+ }
+ if (range.end != null && date >= range.end) {
+ return new Date(range.end.valueOf() - 1);
+ }
+ return date;
+ }
+
+ function getDateMeta(date, todayRange, nowDate, dateProfile) {
+ return {
+ dow: date.getUTCDay(),
+ isDisabled: Boolean(dateProfile && !rangeContainsMarker(dateProfile.activeRange, date)),
+ isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),
+ isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),
+ isPast: Boolean(nowDate ? (date < nowDate) : todayRange ? (date < todayRange.start) : false),
+ isFuture: Boolean(nowDate ? (date > nowDate) : todayRange ? (date >= todayRange.end) : false),
+ };
+ }
+ function getDayClassNames(meta, theme) {
+ let classNames = [
+ 'fc-day',
+ `fc-day-${DAY_IDS[meta.dow]}`,
+ ];
+ if (meta.isDisabled) {
+ classNames.push('fc-day-disabled');
+ }
+ else {
+ if (meta.isToday) {
+ classNames.push('fc-day-today');
+ classNames.push(theme.getClass('today'));
+ }
+ if (meta.isPast) {
+ classNames.push('fc-day-past');
+ }
+ if (meta.isFuture) {
+ classNames.push('fc-day-future');
+ }
+ if (meta.isOther) {
+ classNames.push('fc-day-other');
+ }
+ }
+ return classNames;
+ }
+ function getSlotClassNames(meta, theme) {
+ let classNames = [
+ 'fc-slot',
+ `fc-slot-${DAY_IDS[meta.dow]}`,
+ ];
+ if (meta.isDisabled) {
+ classNames.push('fc-slot-disabled');
+ }
+ else {
+ if (meta.isToday) {
+ classNames.push('fc-slot-today');
+ classNames.push(theme.getClass('today'));
+ }
+ if (meta.isPast) {
+ classNames.push('fc-slot-past');
+ }
+ if (meta.isFuture) {
+ classNames.push('fc-slot-future');
+ }
+ }
+ return classNames;
+ }
+
+ const DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' });
+ const WEEK_FORMAT = createFormatter({ week: 'long' });
+ function buildNavLinkAttrs(context, dateMarker, viewType = 'day', isTabbable = true) {
+ const { dateEnv, options, calendarApi } = context;
+ let dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT);
+ if (options.navLinks) {
+ let zonedDate = dateEnv.toDate(dateMarker);
+ const handleInteraction = (ev) => {
+ let customAction = viewType === 'day' ? options.navLinkDayClick :
+ viewType === 'week' ? options.navLinkWeekClick : null;
+ if (typeof customAction === 'function') {
+ customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
+ }
+ else {
+ if (typeof customAction === 'string') {
+ viewType = customAction;
+ }
+ calendarApi.zoomTo(dateMarker, viewType);
+ }
+ };
+ return Object.assign({ title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable
+ ? createAriaClickAttrs(handleInteraction)
+ : { onClick: handleInteraction }));
+ }
+ return { 'aria-label': dateStr };
+ }
+
+ let _isRtlScrollbarOnLeft = null;
+ function getIsRtlScrollbarOnLeft() {
+ if (_isRtlScrollbarOnLeft === null) {
+ _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();
+ }
+ return _isRtlScrollbarOnLeft;
+ }
+ function computeIsRtlScrollbarOnLeft() {
+ let outerEl = document.createElement('div');
+ applyStyle(outerEl, {
+ position: 'absolute',
+ top: -1000,
+ left: 0,
+ border: 0,
+ padding: 0,
+ overflow: 'scroll',
+ direction: 'rtl',
+ });
+ outerEl.innerHTML = '<div></div>';
+ document.body.appendChild(outerEl);
+ let innerEl = outerEl.firstChild;
+ let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
+ removeElement(outerEl);
+ return res;
+ }
+
+ let _scrollbarWidths;
+ function getScrollbarWidths() {
+ if (!_scrollbarWidths) {
+ _scrollbarWidths = computeScrollbarWidths();
+ }
+ return _scrollbarWidths;
+ }
+ function computeScrollbarWidths() {
+ let el = document.createElement('div');
+ el.style.overflow = 'scroll';
+ el.style.position = 'absolute';
+ el.style.top = '-9999px';
+ el.style.left = '-9999px';
+ document.body.appendChild(el);
+ let res = computeScrollbarWidthsForEl(el);
+ document.body.removeChild(el);
+ return res;
+ }
+ // WARNING: will include border
+ function computeScrollbarWidthsForEl(el) {
+ return {
+ x: el.offsetHeight - el.clientHeight,
+ y: el.offsetWidth - el.clientWidth,
+ };
+ }
+
+ function computeEdges(el, getPadding = false) {
+ let computedStyle = window.getComputedStyle(el);
+ let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;
+ let borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;
+ let borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;
+ let borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;
+ let badScrollbarWidths = computeScrollbarWidthsForEl(el); // includes border!
+ let scrollbarLeftRight = badScrollbarWidths.y - borderLeft - borderRight;
+ let scrollbarBottom = badScrollbarWidths.x - borderTop - borderBottom;
+ let res = {
+ borderLeft,
+ borderRight,
+ borderTop,
+ borderBottom,
+ scrollbarBottom,
+ scrollbarLeft: 0,
+ scrollbarRight: 0,
+ };
+ if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?
+ res.scrollbarLeft = scrollbarLeftRight;
+ }
+ else {
+ res.scrollbarRight = scrollbarLeftRight;
+ }
+ if (getPadding) {
+ res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;
+ res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;
+ res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;
+ res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;
+ }
+ return res;
+ }
+ function computeInnerRect(el, goWithinPadding = false, doFromWindowViewport) {
+ let outerRect = doFromWindowViewport ? el.getBoundingClientRect() : computeRect(el);
+ let edges = computeEdges(el, goWithinPadding);
+ let res = {
+ left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,
+ right: outerRect.right - edges.borderRight - edges.scrollbarRight,
+ top: outerRect.top + edges.borderTop,
+ bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom,
+ };
+ if (goWithinPadding) {
+ res.left += edges.paddingLeft;
+ res.right -= edges.paddingRight;
+ res.top += edges.paddingTop;
+ res.bottom -= edges.paddingBottom;
+ }
+ return res;
+ }
+ function computeRect(el) {
+ let rect = el.getBoundingClientRect();
+ return {
+ left: rect.left + window.pageXOffset,
+ top: rect.top + window.pageYOffset,
+ right: rect.right + window.pageXOffset,
+ bottom: rect.bottom + window.pageYOffset,
+ };
+ }
+ function computeClippedClientRect(el) {
+ let clippingParents = getClippingParents(el);
+ let rect = el.getBoundingClientRect();
+ for (let clippingParent of clippingParents) {
+ let intersection = intersectRects(rect, clippingParent.getBoundingClientRect());
+ if (intersection) {
+ rect = intersection;
+ }
+ else {
+ return null;
+ }
+ }
+ return rect;
+ }
+ // does not return window
+ function getClippingParents(el) {
+ let parents = [];
+ while (el instanceof HTMLElement) { // will stop when gets to document or null
+ let computedStyle = window.getComputedStyle(el);
+ if (computedStyle.position === 'fixed') {
+ break;
+ }
+ if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {
+ parents.push(el);
+ }
+ el = el.parentNode;
+ }
+ return parents;
+ }
+
+ /*
+ given a function that resolves a result asynchronously.
+ the function can either call passed-in success and failure callbacks,
+ or it can return a promise.
+ if you need to pass additional params to func, bind them first.
+ */
+ function unpromisify(func, normalizedSuccessCallback, normalizedFailureCallback) {
+ // guard against success/failure callbacks being called more than once
+ // and guard against a promise AND callback being used together.
+ let isResolved = false;
+ let wrappedSuccess = function (res) {
+ if (!isResolved) {
+ isResolved = true;
+ normalizedSuccessCallback(res);
+ }
+ };
+ let wrappedFailure = function (error) {
+ if (!isResolved) {
+ isResolved = true;
+ normalizedFailureCallback(error);
+ }
+ };
+ let res = func(wrappedSuccess, wrappedFailure);
+ if (res && typeof res.then === 'function') {
+ res.then(wrappedSuccess, wrappedFailure);
+ }
+ }
+
+ class Emitter {
+ constructor() {
+ this.handlers = {};
+ this.thisContext = null;
+ }
+ setThisContext(thisContext) {
+ this.thisContext = thisContext;
+ }
+ setOptions(options) {
+ this.options = options;
+ }
+ on(type, handler) {
+ addToHash(this.handlers, type, handler);
+ }
+ off(type, handler) {
+ removeFromHash(this.handlers, type, handler);
+ }
+ trigger(type, ...args) {
+ let attachedHandlers = this.handlers[type] || [];
+ let optionHandler = this.options && this.options[type];
+ let handlers = [].concat(optionHandler || [], attachedHandlers);
+ for (let handler of handlers) {
+ handler.apply(this.thisContext, args);
+ }
+ }
+ hasHandlers(type) {
+ return Boolean((this.handlers[type] && this.handlers[type].length) ||
+ (this.options && this.options[type]));
+ }
+ }
+ function addToHash(hash, type, handler) {
+ (hash[type] || (hash[type] = []))
+ .push(handler);
+ }
+ function removeFromHash(hash, type, handler) {
+ if (handler) {
+ if (hash[type]) {
+ hash[type] = hash[type].filter((func) => func !== handler);
+ }
+ }
+ else {
+ delete hash[type]; // remove all handler funcs for this type
+ }
+ }
+
+ /*
+ Records offset information for a set of elements, relative to an origin element.
+ Can record the left/right OR the top/bottom OR both.
+ Provides methods for querying the cache by position.
+ */
+ class PositionCache {
+ constructor(originEl, els, isHorizontal, isVertical) {
+ this.els = els;
+ let originClientRect = this.originClientRect = originEl.getBoundingClientRect(); // relative to viewport top-left
+ if (isHorizontal) {
+ this.buildElHorizontals(originClientRect.left);
+ }
+ if (isVertical) {
+ this.buildElVerticals(originClientRect.top);
+ }
+ }
+ // Populates the left/right internal coordinate arrays
+ buildElHorizontals(originClientLeft) {
+ let lefts = [];
+ let rights = [];
+ for (let el of this.els) {
+ let rect = el.getBoundingClientRect();
+ lefts.push(rect.left - originClientLeft);
+ rights.push(rect.right - originClientLeft);
+ }
+ this.lefts = lefts;
+ this.rights = rights;
+ }
+ // Populates the top/bottom internal coordinate arrays
+ buildElVerticals(originClientTop) {
+ let tops = [];
+ let bottoms = [];
+ for (let el of this.els) {
+ let rect = el.getBoundingClientRect();
+ tops.push(rect.top - originClientTop);
+ bottoms.push(rect.bottom - originClientTop);
+ }
+ this.tops = tops;
+ this.bottoms = bottoms;
+ }
+ // Given a left offset (from document left), returns the index of the el that it horizontally intersects.
+ // If no intersection is made, returns undefined.
+ leftToIndex(leftPosition) {
+ let { lefts, rights } = this;
+ let len = lefts.length;
+ let i;
+ for (i = 0; i < len; i += 1) {
+ if (leftPosition >= lefts[i] && leftPosition < rights[i]) {
+ return i;
+ }
+ }
+ return undefined; // TODO: better
+ }
+ // Given a top offset (from document top), returns the index of the el that it vertically intersects.
+ // If no intersection is made, returns undefined.
+ topToIndex(topPosition) {
+ let { tops, bottoms } = this;
+ let len = tops.length;
+ let i;
+ for (i = 0; i < len; i += 1) {
+ if (topPosition >= tops[i] && topPosition < bottoms[i]) {
+ return i;
+ }
+ }
+ return undefined; // TODO: better
+ }
+ // Gets the width of the element at the given index
+ getWidth(leftIndex) {
+ return this.rights[leftIndex] - this.lefts[leftIndex];
+ }
+ // Gets the height of the element at the given index
+ getHeight(topIndex) {
+ return this.bottoms[topIndex] - this.tops[topIndex];
+ }
+ similarTo(otherCache) {
+ return similarNumArrays(this.tops || [], otherCache.tops || []) &&
+ similarNumArrays(this.bottoms || [], otherCache.bottoms || []) &&
+ similarNumArrays(this.lefts || [], otherCache.lefts || []) &&
+ similarNumArrays(this.rights || [], otherCache.rights || []);
+ }
+ }
+ function similarNumArrays(a, b) {
+ const len = a.length;
+ if (len !== b.length) {
+ return false;
+ }
+ for (let i = 0; i < len; i++) {
+ if (Math.round(a[i]) !== Math.round(b[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /* eslint max-classes-per-file: "off" */
+ /*
+ An object for getting/setting scroll-related information for an element.
+ Internally, this is done very differently for window versus DOM element,
+ so this object serves as a common interface.
+ */
+ class ScrollController {
+ getMaxScrollTop() {
+ return this.getScrollHeight() - this.getClientHeight();
+ }
+ getMaxScrollLeft() {
+ return this.getScrollWidth() - this.getClientWidth();
+ }
+ canScrollVertically() {
+ return this.getMaxScrollTop() > 0;
+ }
+ canScrollHorizontally() {
+ return this.getMaxScrollLeft() > 0;
+ }
+ canScrollUp() {
+ return this.getScrollTop() > 0;
+ }
+ canScrollDown() {
+ return this.getScrollTop() < this.getMaxScrollTop();
+ }
+ canScrollLeft() {
+ return this.getScrollLeft() > 0;
+ }
+ canScrollRight() {
+ return this.getScrollLeft() < this.getMaxScrollLeft();
+ }
+ }
+ class ElementScrollController extends ScrollController {
+ constructor(el) {
+ super();
+ this.el = el;
+ }
+ getScrollTop() {
+ return this.el.scrollTop;
+ }
+ getScrollLeft() {
+ return this.el.scrollLeft;
+ }
+ setScrollTop(top) {
+ this.el.scrollTop = top;
+ }
+ setScrollLeft(left) {
+ this.el.scrollLeft = left;
+ }
+ getScrollWidth() {
+ return this.el.scrollWidth;
+ }
+ getScrollHeight() {
+ return this.el.scrollHeight;
+ }
+ getClientHeight() {
+ return this.el.clientHeight;
+ }
+ getClientWidth() {
+ return this.el.clientWidth;
+ }
+ }
+ class WindowScrollController extends ScrollController {
+ getScrollTop() {
+ return window.pageYOffset;
+ }
+ getScrollLeft() {
+ return window.pageXOffset;
+ }
+ setScrollTop(n) {
+ window.scroll(window.pageXOffset, n);
+ }
+ setScrollLeft(n) {
+ window.scroll(n, window.pageYOffset);
+ }
+ getScrollWidth() {
+ return document.documentElement.scrollWidth;
+ }
+ getScrollHeight() {
+ return document.documentElement.scrollHeight;
+ }
+ getClientHeight() {
+ return document.documentElement.clientHeight;
+ }
+ getClientWidth() {
+ return document.documentElement.clientWidth;
+ }
+ }
+
+ class Theme {
+ constructor(calendarOptions) {
+ if (this.iconOverrideOption) {
+ this.setIconOverride(calendarOptions[this.iconOverrideOption]);
+ }
+ }
+ setIconOverride(iconOverrideHash) {
+ let iconClassesCopy;
+ let buttonName;
+ if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object
+ iconClassesCopy = Object.assign({}, this.iconClasses);
+ for (buttonName in iconOverrideHash) {
+ iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);
+ }
+ this.iconClasses = iconClassesCopy;
+ }
+ else if (iconOverrideHash === false) {
+ this.iconClasses = {};
+ }
+ }
+ applyIconOverridePrefix(className) {
+ let prefix = this.iconOverridePrefix;
+ if (prefix && className.indexOf(prefix) !== 0) { // if not already present
+ className = prefix + className;
+ }
+ return className;
+ }
+ getClass(key) {
+ return this.classes[key] || '';
+ }
+ getIconClass(buttonName, isRtl) {
+ let className;
+ if (isRtl && this.rtlIconClasses) {
+ className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName];
+ }
+ else {
+ className = this.iconClasses[buttonName];
+ }
+ if (className) {
+ return `${this.baseIconClass} ${className}`;
+ }
+ return '';
+ }
+ getCustomButtonIconClass(customButtonProps) {
+ let className;
+ if (this.iconOverrideCustomButtonOption) {
+ className = customButtonProps[this.iconOverrideCustomButtonOption];
+ if (className) {
+ return `${this.baseIconClass} ${this.applyIconOverridePrefix(className)}`;
+ }
+ }
+ return '';
+ }
+ }
+ Theme.prototype.classes = {};
+ Theme.prototype.iconClasses = {};
+ Theme.prototype.baseIconClass = '';
+ Theme.prototype.iconOverridePrefix = '';
+
+ /*
+ NOTE: this can be a public API, especially createElement for hooks.
+ See examples/typescript-scheduler/src/index.ts
+ */
+ function flushSync(runBeforeFlush) {
+ runBeforeFlush();
+ let oldDebounceRendering = l$1.debounceRendering; // orig
+ let callbackQ = [];
+ function execCallbackSync(callback) {
+ callbackQ.push(callback);
+ }
+ l$1.debounceRendering = execCallbackSync;
+ P$1(h(FakeComponent, {}), document.createElement('div'));
+ while (callbackQ.length) {
+ callbackQ.shift()();
+ }
+ l$1.debounceRendering = oldDebounceRendering;
+ }
+ class FakeComponent extends d {
+ render() { return h('div', {}); }
+ componentDidMount() { this.setState({}); }
+ }
+ // TODO: use preact/compat instead?
+ function createContext(defaultValue) {
+ let ContextType = B$1(defaultValue);
+ let origProvider = ContextType.Provider;
+ ContextType.Provider = function () {
+ let isNew = !this.getChildContext;
+ let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params
+ if (isNew) {
+ let subs = [];
+ this.shouldComponentUpdate = (_props) => {
+ if (this.props.value !== _props.value) {
+ subs.forEach((c) => {
+ c.context = _props.value;
+ c.forceUpdate();
+ });
+ }
+ };
+ this.sub = (c) => {
+ subs.push(c);
+ let old = c.componentWillUnmount;
+ c.componentWillUnmount = () => {
+ subs.splice(subs.indexOf(c), 1);
+ old && old.call(c);
+ };
+ };
+ }
+ return children;
+ };
+ return ContextType;
+ }
+
+ class ScrollResponder {
+ constructor(execFunc, emitter, scrollTime, scrollTimeReset) {
+ this.execFunc = execFunc;
+ this.emitter = emitter;
+ this.scrollTime = scrollTime;
+ this.scrollTimeReset = scrollTimeReset;
+ this.handleScrollRequest = (request) => {
+ this.queuedRequest = Object.assign({}, this.queuedRequest || {}, request);
+ this.drain();
+ };
+ emitter.on('_scrollRequest', this.handleScrollRequest);
+ this.fireInitialScroll();
+ }
+ detach() {
+ this.emitter.off('_scrollRequest', this.handleScrollRequest);
+ }
+ update(isDatesNew) {
+ if (isDatesNew && this.scrollTimeReset) {
+ this.fireInitialScroll(); // will drain
+ }
+ else {
+ this.drain();
+ }
+ }
+ fireInitialScroll() {
+ this.handleScrollRequest({
+ time: this.scrollTime,
+ });
+ }
+ drain() {
+ if (this.queuedRequest && this.execFunc(this.queuedRequest)) {
+ this.queuedRequest = null;
+ }
+ }
+ }
+
+ const ViewContextType = createContext({}); // for Components
+ function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {
+ return {
+ dateEnv,
+ options: viewOptions,
+ pluginHooks,
+ emitter,
+ dispatch,
+ getCurrentData,
+ calendarApi,
+ viewSpec,
+ viewApi,
+ dateProfileGenerator,
+ theme,
+ isRtl: viewOptions.direction === 'rtl',
+ addResizeHandler(handler) {
+ emitter.on('_resize', handler);
+ },
+ removeResizeHandler(handler) {
+ emitter.off('_resize', handler);
+ },
+ createScrollResponder(execFunc) {
+ return new ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime), viewOptions.scrollTimeReset);
+ },
+ registerInteractiveComponent,
+ unregisterInteractiveComponent,
+ };
+ }
+
+ /* eslint max-classes-per-file: off */
+ class PureComponent extends d {
+ shouldComponentUpdate(nextProps, nextState) {
+ if (this.debug) {
+ // eslint-disable-next-line no-console
+ console.log(getUnequalProps(nextProps, this.props), getUnequalProps(nextState, this.state));
+ }
+ return !compareObjs(this.props, nextProps, this.propEquality) ||
+ !compareObjs(this.state, nextState, this.stateEquality);
+ }
+ // HACK for freakin' React StrictMode
+ safeSetState(newState) {
+ if (!compareObjs(this.state, Object.assign(Object.assign({}, this.state), newState), this.stateEquality)) {
+ this.setState(newState);
+ }
+ }
+ }
+ PureComponent.addPropsEquality = addPropsEquality;
+ PureComponent.addStateEquality = addStateEquality;
+ PureComponent.contextType = ViewContextType;
+ PureComponent.prototype.propEquality = {};
+ PureComponent.prototype.stateEquality = {};
+ class BaseComponent extends PureComponent {
+ }
+ BaseComponent.contextType = ViewContextType;
+ function addPropsEquality(propEquality) {
+ let hash = Object.create(this.prototype.propEquality);
+ Object.assign(hash, propEquality);
+ this.prototype.propEquality = hash;
+ }
+ function addStateEquality(stateEquality) {
+ let hash = Object.create(this.prototype.stateEquality);
+ Object.assign(hash, stateEquality);
+ this.prototype.stateEquality = hash;
+ }
+ // use other one
+ function setRef(ref, current) {
+ if (typeof ref === 'function') {
+ ref(current);
+ }
+ else if (ref) {
+ // see https://github.com/facebook/react/issues/13029
+ ref.current = current;
+ }
+ }
+
+ /*
+ an INTERACTABLE date component
+
+ PURPOSES:
+ - hook up to fg, fill, and mirror renderers
+ - interface for dragging and hits
+ */
+ class DateComponent extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.uid = guid();
+ }
+ // Hit System
+ // -----------------------------------------------------------------------------------------------------------------
+ prepareHits() {
+ }
+ queryHit(positionLeft, positionTop, elWidth, elHeight) {
+ return null; // this should be abstract
+ }
+ // Pointer Interaction Utils
+ // -----------------------------------------------------------------------------------------------------------------
+ isValidSegDownEl(el) {
+ return !this.props.eventDrag && // HACK
+ !this.props.eventResize && // HACK
+ !elementClosest(el, '.fc-event-mirror');
+ }
+ isValidDateDownEl(el) {
+ return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&
+ !elementClosest(el, '.fc-more-link') && // a "more.." link
+ !elementClosest(el, 'a[data-navlink]') && // a clickable nav link
+ !elementClosest(el, '.fc-popover'); // hack
+ }
+ }
+
+ function reduceCurrentDate(currentDate, action) {
+ switch (action.type) {
+ case 'CHANGE_DATE':
+ return action.dateMarker;
+ default:
+ return currentDate;
+ }
+ }
+ function getInitialDate(options, dateEnv) {
+ let initialDateInput = options.initialDate;
+ // compute the initial ambig-timezone date
+ if (initialDateInput != null) {
+ return dateEnv.createMarker(initialDateInput);
+ }
+ return getNow(options.now, dateEnv); // getNow already returns unzoned
+ }
+ function getNow(nowInput, dateEnv) {
+ if (typeof nowInput === 'function') {
+ nowInput = nowInput();
+ }
+ if (nowInput == null) {
+ return dateEnv.createNowMarker();
+ }
+ return dateEnv.createMarker(nowInput);
+ }
+
+ class DateProfileGenerator {
+ constructor(props) {
+ this.props = props;
+ this.nowDate = getNow(props.nowInput, props.dateEnv);
+ this.initHiddenDays();
+ }
+ /* Date Range Computation
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Builds a structure with info about what the dates/ranges will be for the "prev" view.
+ buildPrev(currentDateProfile, currentDate, forceToValid) {
+ let { dateEnv } = this.props;
+ let prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
+ currentDateProfile.dateIncrement);
+ return this.build(prevDate, -1, forceToValid);
+ }
+ // Builds a structure with info about what the dates/ranges will be for the "next" view.
+ buildNext(currentDateProfile, currentDate, forceToValid) {
+ let { dateEnv } = this.props;
+ let nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
+ currentDateProfile.dateIncrement);
+ return this.build(nextDate, 1, forceToValid);
+ }
+ // Builds a structure holding dates/ranges for rendering around the given date.
+ // Optional direction param indicates whether the date is being incremented/decremented
+ // from its previous value. decremented = -1, incremented = 1 (default).
+ build(currentDate, direction, forceToValid = true) {
+ let { props } = this;
+ let validRange;
+ let currentInfo;
+ let isRangeAllDay;
+ let renderRange;
+ let activeRange;
+ let isValid;
+ validRange = this.buildValidRange();
+ validRange = this.trimHiddenDays(validRange);
+ if (forceToValid) {
+ currentDate = constrainMarkerToRange(currentDate, validRange);
+ }
+ currentInfo = this.buildCurrentRangeInfo(currentDate, direction);
+ isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);
+ renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);
+ renderRange = this.trimHiddenDays(renderRange);
+ activeRange = renderRange;
+ if (!props.showNonCurrentDates) {
+ activeRange = intersectRanges(activeRange, currentInfo.range);
+ }
+ activeRange = this.adjustActiveRange(activeRange);
+ activeRange = intersectRanges(activeRange, validRange); // might return null
+ // it's invalid if the originally requested date is not contained,
+ // or if the range is completely outside of the valid range.
+ isValid = rangesIntersect(currentInfo.range, validRange);
+ return {
+ // constraint for where prev/next operations can go and where events can be dragged/resized to.
+ // an object with optional start and end properties.
+ validRange,
+ // range the view is formally responsible for.
+ // for example, a month view might have 1st-31st, excluding padded dates
+ currentRange: currentInfo.range,
+ // name of largest unit being displayed, like "month" or "week"
+ currentRangeUnit: currentInfo.unit,
+ isRangeAllDay,
+ // dates that display events and accept drag-n-drop
+ // will be `null` if no dates accept events
+ activeRange,
+ // date range with a rendered skeleton
+ // includes not-active days that need some sort of DOM
+ renderRange,
+ // Duration object that denotes the first visible time of any given day
+ slotMinTime: props.slotMinTime,
+ // Duration object that denotes the exclusive visible end time of any given day
+ slotMaxTime: props.slotMaxTime,
+ isValid,
+ // how far the current date will move for a prev/next operation
+ dateIncrement: this.buildDateIncrement(currentInfo.duration),
+ // pass a fallback (might be null) ^
+ };
+ }
+ // Builds an object with optional start/end properties.
+ // Indicates the minimum/maximum dates to display.
+ // not responsible for trimming hidden days.
+ buildValidRange() {
+ let input = this.props.validRangeInput;
+ let simpleInput = typeof input === 'function'
+ ? input.call(this.props.calendarApi, this.nowDate)
+ : input;
+ return this.refineRange(simpleInput) ||
+ { start: null, end: null }; // completely open-ended
+ }
+ // Builds a structure with info about the "current" range, the range that is
+ // highlighted as being the current month for example.
+ // See build() for a description of `direction`.
+ // Guaranteed to have `range` and `unit` properties. `duration` is optional.
+ buildCurrentRangeInfo(date, direction) {
+ let { props } = this;
+ let duration = null;
+ let unit = null;
+ let range = null;
+ let dayCount;
+ if (props.duration) {
+ duration = props.duration;
+ unit = props.durationUnit;
+ range = this.buildRangeFromDuration(date, direction, duration, unit);
+ }
+ else if ((dayCount = this.props.dayCount)) {
+ unit = 'day';
+ range = this.buildRangeFromDayCount(date, direction, dayCount);
+ }
+ else if ((range = this.buildCustomVisibleRange(date))) {
+ unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit;
+ }
+ else {
+ duration = this.getFallbackDuration();
+ unit = greatestDurationDenominator(duration).unit;
+ range = this.buildRangeFromDuration(date, direction, duration, unit);
+ }
+ return { duration, unit, range };
+ }
+ getFallbackDuration() {
+ return createDuration({ day: 1 });
+ }
+ // Returns a new activeRange to have time values (un-ambiguate)
+ // slotMinTime or slotMaxTime causes the range to expand.
+ adjustActiveRange(range) {
+ let { dateEnv, usesMinMaxTime, slotMinTime, slotMaxTime } = this.props;
+ let { start, end } = range;
+ if (usesMinMaxTime) {
+ // expand active range if slotMinTime is negative (why not when positive?)
+ if (asRoughDays(slotMinTime) < 0) {
+ start = startOfDay(start); // necessary?
+ start = dateEnv.add(start, slotMinTime);
+ }
+ // expand active range if slotMaxTime is beyond one day (why not when negative?)
+ if (asRoughDays(slotMaxTime) > 1) {
+ end = startOfDay(end); // necessary?
+ end = addDays(end, -1);
+ end = dateEnv.add(end, slotMaxTime);
+ }
+ }
+ return { start, end };
+ }
+ // Builds the "current" range when it is specified as an explicit duration.
+ // `unit` is the already-computed greatestDurationDenominator unit of duration.
+ buildRangeFromDuration(date, direction, duration, unit) {
+ let { dateEnv, dateAlignment } = this.props;
+ let start;
+ let end;
+ let res;
+ // compute what the alignment should be
+ if (!dateAlignment) {
+ let { dateIncrement } = this.props;
+ if (dateIncrement) {
+ // use the smaller of the two units
+ if (asRoughMs(dateIncrement) < asRoughMs(duration)) {
+ dateAlignment = greatestDurationDenominator(dateIncrement).unit;
+ }
+ else {
+ dateAlignment = unit;
+ }
+ }
+ else {
+ dateAlignment = unit;
+ }
+ }
+ // if the view displays a single day or smaller
+ if (asRoughDays(duration) <= 1) {
+ if (this.isHiddenDay(start)) {
+ start = this.skipHiddenDays(start, direction);
+ start = startOfDay(start);
+ }
+ }
+ function computeRes() {
+ start = dateEnv.startOf(date, dateAlignment);
+ end = dateEnv.add(start, duration);
+ res = { start, end };
+ }
+ computeRes();
+ // if range is completely enveloped by hidden days, go past the hidden days
+ if (!this.trimHiddenDays(res)) {
+ date = this.skipHiddenDays(date, direction);
+ computeRes();
+ }
+ return res;
+ }
+ // Builds the "current" range when a dayCount is specified.
+ buildRangeFromDayCount(date, direction, dayCount) {
+ let { dateEnv, dateAlignment } = this.props;
+ let runningCount = 0;
+ let start = date;
+ let end;
+ if (dateAlignment) {
+ start = dateEnv.startOf(start, dateAlignment);
+ }
+ start = startOfDay(start);
+ start = this.skipHiddenDays(start, direction);
+ end = start;
+ do {
+ end = addDays(end, 1);
+ if (!this.isHiddenDay(end)) {
+ runningCount += 1;
+ }
+ } while (runningCount < dayCount);
+ return { start, end };
+ }
+ // Builds a normalized range object for the "visible" range,
+ // which is a way to define the currentRange and activeRange at the same time.
+ buildCustomVisibleRange(date) {
+ let { props } = this;
+ let input = props.visibleRangeInput;
+ let simpleInput = typeof input === 'function'
+ ? input.call(props.calendarApi, props.dateEnv.toDate(date))
+ : input;
+ let range = this.refineRange(simpleInput);
+ if (range && (range.start == null || range.end == null)) {
+ return null;
+ }
+ return range;
+ }
+ // Computes the range that will represent the element/cells for *rendering*,
+ // but which may have voided days/times.
+ // not responsible for trimming hidden days.
+ buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {
+ return currentRange;
+ }
+ // Compute the duration value that should be added/substracted to the current date
+ // when a prev/next operation happens.
+ buildDateIncrement(fallback) {
+ let { dateIncrement } = this.props;
+ let customAlignment;
+ if (dateIncrement) {
+ return dateIncrement;
+ }
+ if ((customAlignment = this.props.dateAlignment)) {
+ return createDuration(1, customAlignment);
+ }
+ if (fallback) {
+ return fallback;
+ }
+ return createDuration({ days: 1 });
+ }
+ refineRange(rangeInput) {
+ if (rangeInput) {
+ let range = parseRange(rangeInput, this.props.dateEnv);
+ if (range) {
+ range = computeVisibleDayRange(range);
+ }
+ return range;
+ }
+ return null;
+ }
+ /* Hidden Days
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Initializes internal variables related to calculating hidden days-of-week
+ initHiddenDays() {
+ let hiddenDays = this.props.hiddenDays || []; // array of day-of-week indices that are hidden
+ let isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)
+ let dayCnt = 0;
+ let i;
+ if (this.props.weekends === false) {
+ hiddenDays.push(0, 6); // 0=sunday, 6=saturday
+ }
+ for (i = 0; i < 7; i += 1) {
+ if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {
+ dayCnt += 1;
+ }
+ }
+ if (!dayCnt) {
+ throw new Error('invalid hiddenDays'); // all days were hidden? bad.
+ }
+ this.isHiddenDayHash = isHiddenDayHash;
+ }
+ // Remove days from the beginning and end of the range that are computed as hidden.
+ // If the whole range is trimmed off, returns null
+ trimHiddenDays(range) {
+ let { start, end } = range;
+ if (start) {
+ start = this.skipHiddenDays(start);
+ }
+ if (end) {
+ end = this.skipHiddenDays(end, -1, true);
+ }
+ if (start == null || end == null || start < end) {
+ return { start, end };
+ }
+ return null;
+ }
+ // Is the current day hidden?
+ // `day` is a day-of-week index (0-6), or a Date (used for UTC)
+ isHiddenDay(day) {
+ if (day instanceof Date) {
+ day = day.getUTCDay();
+ }
+ return this.isHiddenDayHash[day];
+ }
+ // Incrementing the current day until it is no longer a hidden day, returning a copy.
+ // DOES NOT CONSIDER validRange!
+ // If the initial value of `date` is not a hidden day, don't do anything.
+ // Pass `isExclusive` as `true` if you are dealing with an end date.
+ // `inc` defaults to `1` (increment one day forward each time)
+ skipHiddenDays(date, inc = 1, isExclusive = false) {
+ while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {
+ date = addDays(date, inc);
+ }
+ return date;
+ }
+ }
+
+ function triggerDateSelect(selection, pev, context) {
+ context.emitter.trigger('select', Object.assign(Object.assign({}, buildDateSpanApiWithContext(selection, context)), { jsEvent: pev ? pev.origEvent : null, view: context.viewApi || context.calendarApi.view }));
+ }
+ function triggerDateUnselect(pev, context) {
+ context.emitter.trigger('unselect', {
+ jsEvent: pev ? pev.origEvent : null,
+ view: context.viewApi || context.calendarApi.view,
+ });
+ }
+ function buildDateSpanApiWithContext(dateSpan, context) {
+ let props = {};
+ for (let transform of context.pluginHooks.dateSpanTransforms) {
+ Object.assign(props, transform(dateSpan, context));
+ }
+ Object.assign(props, buildDateSpanApi(dateSpan, context.dateEnv));
+ return props;
+ }
+ // Given an event's allDay status and start date, return what its fallback end date should be.
+ // TODO: rename to computeDefaultEventEnd
+ function getDefaultEventEnd(allDay, marker, context) {
+ let { dateEnv, options } = context;
+ let end = marker;
+ if (allDay) {
+ end = startOfDay(end);
+ end = dateEnv.add(end, options.defaultAllDayEventDuration);
+ }
+ else {
+ end = dateEnv.add(end, options.defaultTimedEventDuration);
+ }
+ return end;
+ }
+
+ // applies the mutation to ALL defs/instances within the event store
+ function applyMutationToEventStore(eventStore, eventConfigBase, mutation, context) {
+ let eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);
+ let dest = createEmptyEventStore();
+ for (let defId in eventStore.defs) {
+ let def = eventStore.defs[defId];
+ dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context);
+ }
+ for (let instanceId in eventStore.instances) {
+ let instance = eventStore.instances[instanceId];
+ let def = dest.defs[instance.defId]; // important to grab the newly modified def
+ dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, context);
+ }
+ return dest;
+ }
+ function applyMutationToEventDef(eventDef, eventConfig, mutation, context) {
+ let standardProps = mutation.standardProps || {};
+ // if hasEnd has not been specified, guess a good value based on deltas.
+ // if duration will change, there's no way the default duration will persist,
+ // and thus, we need to mark the event as having a real end
+ if (standardProps.hasEnd == null &&
+ eventConfig.durationEditable &&
+ (mutation.startDelta || mutation.endDelta)) {
+ standardProps.hasEnd = true; // TODO: is this mutation okay?
+ }
+ let copy = Object.assign(Object.assign(Object.assign({}, eventDef), standardProps), { ui: Object.assign(Object.assign({}, eventDef.ui), standardProps.ui) });
+ if (mutation.extendedProps) {
+ copy.extendedProps = Object.assign(Object.assign({}, copy.extendedProps), mutation.extendedProps);
+ }
+ for (let applier of context.pluginHooks.eventDefMutationAppliers) {
+ applier(copy, mutation, context);
+ }
+ if (!copy.hasEnd && context.options.forceEventDuration) {
+ copy.hasEnd = true;
+ }
+ return copy;
+ }
+ function applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef
+ eventConfig, mutation, context) {
+ let { dateEnv } = context;
+ let forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;
+ let clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;
+ let copy = Object.assign({}, eventInstance);
+ if (forceAllDay) {
+ copy.range = computeAlignedDayRange(copy.range);
+ }
+ if (mutation.datesDelta && eventConfig.startEditable) {
+ copy.range = {
+ start: dateEnv.add(copy.range.start, mutation.datesDelta),
+ end: dateEnv.add(copy.range.end, mutation.datesDelta),
+ };
+ }
+ if (mutation.startDelta && eventConfig.durationEditable) {
+ copy.range = {
+ start: dateEnv.add(copy.range.start, mutation.startDelta),
+ end: copy.range.end,
+ };
+ }
+ if (mutation.endDelta && eventConfig.durationEditable) {
+ copy.range = {
+ start: copy.range.start,
+ end: dateEnv.add(copy.range.end, mutation.endDelta),
+ };
+ }
+ if (clearEnd) {
+ copy.range = {
+ start: copy.range.start,
+ end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context),
+ };
+ }
+ // in case event was all-day but the supplied deltas were not
+ // better util for this?
+ if (eventDef.allDay) {
+ copy.range = {
+ start: startOfDay(copy.range.start),
+ end: startOfDay(copy.range.end),
+ };
+ }
+ // handle invalid durations
+ if (copy.range.end < copy.range.start) {
+ copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context);
+ }
+ return copy;
+ }
+
+ class EventSourceImpl {
+ constructor(context, internalEventSource) {
+ this.context = context;
+ this.internalEventSource = internalEventSource;
+ }
+ remove() {
+ this.context.dispatch({
+ type: 'REMOVE_EVENT_SOURCE',
+ sourceId: this.internalEventSource.sourceId,
+ });
+ }
+ refetch() {
+ this.context.dispatch({
+ type: 'FETCH_EVENT_SOURCES',
+ sourceIds: [this.internalEventSource.sourceId],
+ isRefetch: true,
+ });
+ }
+ get id() {
+ return this.internalEventSource.publicId;
+ }
+ get url() {
+ return this.internalEventSource.meta.url;
+ }
+ get format() {
+ return this.internalEventSource.meta.format; // TODO: bad. not guaranteed
+ }
+ }
+
+ class EventImpl {
+ // instance will be null if expressing a recurring event that has no current instances,
+ // OR if trying to validate an incoming external event that has no dates assigned
+ constructor(context, def, instance) {
+ this._context = context;
+ this._def = def;
+ this._instance = instance || null;
+ }
+ /*
+ TODO: make event struct more responsible for this
+ */
+ setProp(name, val) {
+ if (name in EVENT_DATE_REFINERS) {
+ console.warn('Could not set date-related prop \'name\'. Use one of the date-related methods instead.');
+ // TODO: make proper aliasing system?
+ }
+ else if (name === 'id') {
+ val = EVENT_NON_DATE_REFINERS[name](val);
+ this.mutate({
+ standardProps: { publicId: val }, // hardcoded internal name
+ });
+ }
+ else if (name in EVENT_NON_DATE_REFINERS) {
+ val = EVENT_NON_DATE_REFINERS[name](val);
+ this.mutate({
+ standardProps: { [name]: val },
+ });
+ }
+ else if (name in EVENT_UI_REFINERS) {
+ let ui = EVENT_UI_REFINERS[name](val);
+ if (name === 'color') {
+ ui = { backgroundColor: val, borderColor: val };
+ }
+ else if (name === 'editable') {
+ ui = { startEditable: val, durationEditable: val };
+ }
+ else {
+ ui = { [name]: val };
+ }
+ this.mutate({
+ standardProps: { ui },
+ });
+ }
+ else {
+ console.warn(`Could not set prop '${name}'. Use setExtendedProp instead.`);
+ }
+ }
+ setExtendedProp(name, val) {
+ this.mutate({
+ extendedProps: { [name]: val },
+ });
+ }
+ setStart(startInput, options = {}) {
+ let { dateEnv } = this._context;
+ let start = dateEnv.createMarker(startInput);
+ if (start && this._instance) { // TODO: warning if parsed bad
+ let instanceRange = this._instance.range;
+ let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?
+ if (options.maintainDuration) {
+ this.mutate({ datesDelta: startDelta });
+ }
+ else {
+ this.mutate({ startDelta });
+ }
+ }
+ }
+ setEnd(endInput, options = {}) {
+ let { dateEnv } = this._context;
+ let end;
+ if (endInput != null) {
+ end = dateEnv.createMarker(endInput);
+ if (!end) {
+ return; // TODO: warning if parsed bad
+ }
+ }
+ if (this._instance) {
+ if (end) {
+ let endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);
+ this.mutate({ endDelta });
+ }
+ else {
+ this.mutate({ standardProps: { hasEnd: false } });
+ }
+ }
+ }
+ setDates(startInput, endInput, options = {}) {
+ let { dateEnv } = this._context;
+ let standardProps = { allDay: options.allDay };
+ let start = dateEnv.createMarker(startInput);
+ let end;
+ if (!start) {
+ return; // TODO: warning if parsed bad
+ }
+ if (endInput != null) {
+ end = dateEnv.createMarker(endInput);
+ if (!end) { // TODO: warning if parsed bad
+ return;
+ }
+ }
+ if (this._instance) {
+ let instanceRange = this._instance.range;
+ // when computing the diff for an event being converted to all-day,
+ // compute diff off of the all-day values the way event-mutation does.
+ if (options.allDay === true) {
+ instanceRange = computeAlignedDayRange(instanceRange);
+ }
+ let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);
+ if (end) {
+ let endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);
+ if (durationsEqual(startDelta, endDelta)) {
+ this.mutate({ datesDelta: startDelta, standardProps });
+ }
+ else {
+ this.mutate({ startDelta, endDelta, standardProps });
+ }
+ }
+ else { // means "clear the end"
+ standardProps.hasEnd = false;
+ this.mutate({ datesDelta: startDelta, standardProps });
+ }
+ }
+ }
+ moveStart(deltaInput) {
+ let delta = createDuration(deltaInput);
+ if (delta) { // TODO: warning if parsed bad
+ this.mutate({ startDelta: delta });
+ }
+ }
+ moveEnd(deltaInput) {
+ let delta = createDuration(deltaInput);
+ if (delta) { // TODO: warning if parsed bad
+ this.mutate({ endDelta: delta });
+ }
+ }
+ moveDates(deltaInput) {
+ let delta = createDuration(deltaInput);
+ if (delta) { // TODO: warning if parsed bad
+ this.mutate({ datesDelta: delta });
+ }
+ }
+ setAllDay(allDay, options = {}) {
+ let standardProps = { allDay };
+ let { maintainDuration } = options;
+ if (maintainDuration == null) {
+ maintainDuration = this._context.options.allDayMaintainDuration;
+ }
+ if (this._def.allDay !== allDay) {
+ standardProps.hasEnd = maintainDuration;
+ }
+ this.mutate({ standardProps });
+ }
+ formatRange(formatInput) {
+ let { dateEnv } = this._context;
+ let instance = this._instance;
+ let formatter = createFormatter(formatInput);
+ if (this._def.hasEnd) {
+ return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {
+ forcedStartTzo: instance.forcedStartTzo,
+ forcedEndTzo: instance.forcedEndTzo,
+ });
+ }
+ return dateEnv.format(instance.range.start, formatter, {
+ forcedTzo: instance.forcedStartTzo,
+ });
+ }
+ mutate(mutation) {
+ let instance = this._instance;
+ if (instance) {
+ let def = this._def;
+ let context = this._context;
+ let { eventStore } = context.getCurrentData();
+ let relevantEvents = getRelevantEvents(eventStore, instance.instanceId);
+ let eventConfigBase = {
+ '': {
+ display: '',
+ startEditable: true,
+ durationEditable: true,
+ constraints: [],
+ overlap: null,
+ allows: [],
+ backgroundColor: '',
+ borderColor: '',
+ textColor: '',
+ classNames: [],
+ },
+ };
+ relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context);
+ let oldEvent = new EventImpl(context, def, instance); // snapshot
+ this._def = relevantEvents.defs[def.defId];
+ this._instance = relevantEvents.instances[instance.instanceId];
+ context.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: relevantEvents,
+ });
+ context.emitter.trigger('eventChange', {
+ oldEvent,
+ event: this,
+ relatedEvents: buildEventApis(relevantEvents, context, instance),
+ revert() {
+ context.dispatch({
+ type: 'RESET_EVENTS',
+ eventStore, // the ORIGINAL store
+ });
+ },
+ });
+ }
+ }
+ remove() {
+ let context = this._context;
+ let asStore = eventApiToStore(this);
+ context.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: asStore,
+ });
+ context.emitter.trigger('eventRemove', {
+ event: this,
+ relatedEvents: [],
+ revert() {
+ context.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: asStore,
+ });
+ },
+ });
+ }
+ get source() {
+ let { sourceId } = this._def;
+ if (sourceId) {
+ return new EventSourceImpl(this._context, this._context.getCurrentData().eventSources[sourceId]);
+ }
+ return null;
+ }
+ get start() {
+ return this._instance ?
+ this._context.dateEnv.toDate(this._instance.range.start) :
+ null;
+ }
+ get end() {
+ return (this._instance && this._def.hasEnd) ?
+ this._context.dateEnv.toDate(this._instance.range.end) :
+ null;
+ }
+ get startStr() {
+ let instance = this._instance;
+ if (instance) {
+ return this._context.dateEnv.formatIso(instance.range.start, {
+ omitTime: this._def.allDay,
+ forcedTzo: instance.forcedStartTzo,
+ });
+ }
+ return '';
+ }
+ get endStr() {
+ let instance = this._instance;
+ if (instance && this._def.hasEnd) {
+ return this._context.dateEnv.formatIso(instance.range.end, {
+ omitTime: this._def.allDay,
+ forcedTzo: instance.forcedEndTzo,
+ });
+ }
+ return '';
+ }
+ // computable props that all access the def
+ // TODO: find a TypeScript-compatible way to do this at scale
+ get id() { return this._def.publicId; }
+ get groupId() { return this._def.groupId; }
+ get allDay() { return this._def.allDay; }
+ get title() { return this._def.title; }
+ get url() { return this._def.url; }
+ get display() { return this._def.ui.display || 'auto'; } // bad. just normalize the type earlier
+ get startEditable() { return this._def.ui.startEditable; }
+ get durationEditable() { return this._def.ui.durationEditable; }
+ get constraint() { return this._def.ui.constraints[0] || null; }
+ get overlap() { return this._def.ui.overlap; }
+ get allow() { return this._def.ui.allows[0] || null; }
+ get backgroundColor() { return this._def.ui.backgroundColor; }
+ get borderColor() { return this._def.ui.borderColor; }
+ get textColor() { return this._def.ui.textColor; }
+ // NOTE: user can't modify these because Object.freeze was called in event-def parsing
+ get classNames() { return this._def.ui.classNames; }
+ get extendedProps() { return this._def.extendedProps; }
+ toPlainObject(settings = {}) {
+ let def = this._def;
+ let { ui } = def;
+ let { startStr, endStr } = this;
+ let res = {};
+ if (def.title) {
+ res.title = def.title;
+ }
+ if (startStr) {
+ res.start = startStr;
+ }
+ if (endStr) {
+ res.end = endStr;
+ }
+ if (def.publicId) {
+ res.id = def.publicId;
+ }
+ if (def.groupId) {
+ res.groupId = def.groupId;
+ }
+ if (def.url) {
+ res.url = def.url;
+ }
+ if (ui.display && ui.display !== 'auto') {
+ res.display = ui.display;
+ }
+ // TODO: what about recurring-event properties???
+ // TODO: include startEditable/durationEditable/constraint/overlap/allow
+ if (settings.collapseColor && ui.backgroundColor && ui.backgroundColor === ui.borderColor) {
+ res.color = ui.backgroundColor;
+ }
+ else {
+ if (ui.backgroundColor) {
+ res.backgroundColor = ui.backgroundColor;
+ }
+ if (ui.borderColor) {
+ res.borderColor = ui.borderColor;
+ }
+ }
+ if (ui.textColor) {
+ res.textColor = ui.textColor;
+ }
+ if (ui.classNames.length) {
+ res.classNames = ui.classNames;
+ }
+ if (Object.keys(def.extendedProps).length) {
+ if (settings.collapseExtendedProps) {
+ Object.assign(res, def.extendedProps);
+ }
+ else {
+ res.extendedProps = def.extendedProps;
+ }
+ }
+ return res;
+ }
+ toJSON() {
+ return this.toPlainObject();
+ }
+ }
+ function eventApiToStore(eventApi) {
+ let def = eventApi._def;
+ let instance = eventApi._instance;
+ return {
+ defs: { [def.defId]: def },
+ instances: instance
+ ? { [instance.instanceId]: instance }
+ : {},
+ };
+ }
+ function buildEventApis(eventStore, context, excludeInstance) {
+ let { defs, instances } = eventStore;
+ let eventApis = [];
+ let excludeInstanceId = excludeInstance ? excludeInstance.instanceId : '';
+ for (let id in instances) {
+ let instance = instances[id];
+ let def = defs[instance.defId];
+ if (instance.instanceId !== excludeInstanceId) {
+ eventApis.push(new EventImpl(context, def, instance));
+ }
+ }
+ return eventApis;
+ }
+
+ /*
+ Specifying nextDayThreshold signals that all-day ranges should be sliced.
+ */
+ function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {
+ let inverseBgByGroupId = {};
+ let inverseBgByDefId = {};
+ let defByGroupId = {};
+ let bgRanges = [];
+ let fgRanges = [];
+ let eventUis = compileEventUis(eventStore.defs, eventUiBases);
+ for (let defId in eventStore.defs) {
+ let def = eventStore.defs[defId];
+ let ui = eventUis[def.defId];
+ if (ui.display === 'inverse-background') {
+ if (def.groupId) {
+ inverseBgByGroupId[def.groupId] = [];
+ if (!defByGroupId[def.groupId]) {
+ defByGroupId[def.groupId] = def;
+ }
+ }
+ else {
+ inverseBgByDefId[defId] = [];
+ }
+ }
+ }
+ for (let instanceId in eventStore.instances) {
+ let instance = eventStore.instances[instanceId];
+ let def = eventStore.defs[instance.defId];
+ let ui = eventUis[def.defId];
+ let origRange = instance.range;
+ let normalRange = (!def.allDay && nextDayThreshold) ?
+ computeVisibleDayRange(origRange, nextDayThreshold) :
+ origRange;
+ let slicedRange = intersectRanges(normalRange, framingRange);
+ if (slicedRange) {
+ if (ui.display === 'inverse-background') {
+ if (def.groupId) {
+ inverseBgByGroupId[def.groupId].push(slicedRange);
+ }
+ else {
+ inverseBgByDefId[instance.defId].push(slicedRange);
+ }
+ }
+ else if (ui.display !== 'none') {
+ (ui.display === 'background' ? bgRanges : fgRanges).push({
+ def,
+ ui,
+ instance,
+ range: slicedRange,
+ isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),
+ isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf(),
+ });
+ }
+ }
+ }
+ for (let groupId in inverseBgByGroupId) { // BY GROUP
+ let ranges = inverseBgByGroupId[groupId];
+ let invertedRanges = invertRanges(ranges, framingRange);
+ for (let invertedRange of invertedRanges) {
+ let def = defByGroupId[groupId];
+ let ui = eventUis[def.defId];
+ bgRanges.push({
+ def,
+ ui,
+ instance: null,
+ range: invertedRange,
+ isStart: false,
+ isEnd: false,
+ });
+ }
+ }
+ for (let defId in inverseBgByDefId) {
+ let ranges = inverseBgByDefId[defId];
+ let invertedRanges = invertRanges(ranges, framingRange);
+ for (let invertedRange of invertedRanges) {
+ bgRanges.push({
+ def: eventStore.defs[defId],
+ ui: eventUis[defId],
+ instance: null,
+ range: invertedRange,
+ isStart: false,
+ isEnd: false,
+ });
+ }
+ }
+ return { bg: bgRanges, fg: fgRanges };
+ }
+ function hasBgRendering(def) {
+ return def.ui.display === 'background' || def.ui.display === 'inverse-background';
+ }
+ function setElSeg(el, seg) {
+ el.fcSeg = seg;
+ }
+ function getElSeg(el) {
+ return el.fcSeg ||
+ el.parentNode.fcSeg || // for the harness
+ null;
+ }
+ // event ui computation
+ function compileEventUis(eventDefs, eventUiBases) {
+ return mapHash(eventDefs, (eventDef) => compileEventUi(eventDef, eventUiBases));
+ }
+ function compileEventUi(eventDef, eventUiBases) {
+ let uis = [];
+ if (eventUiBases['']) {
+ uis.push(eventUiBases['']);
+ }
+ if (eventUiBases[eventDef.defId]) {
+ uis.push(eventUiBases[eventDef.defId]);
+ }
+ uis.push(eventDef.ui);
+ return combineEventUis(uis);
+ }
+ function sortEventSegs(segs, eventOrderSpecs) {
+ let objs = segs.map(buildSegCompareObj);
+ objs.sort((obj0, obj1) => compareByFieldSpecs(obj0, obj1, eventOrderSpecs));
+ return objs.map((c) => c._seg);
+ }
+ // returns a object with all primitive props that can be compared
+ function buildSegCompareObj(seg) {
+ let { eventRange } = seg;
+ let eventDef = eventRange.def;
+ let range = eventRange.instance ? eventRange.instance.range : eventRange.range;
+ let start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events
+ let end = range.end ? range.end.valueOf() : 0; // "
+ return Object.assign(Object.assign(Object.assign({}, eventDef.extendedProps), eventDef), { id: eventDef.publicId, start,
+ end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg });
+ }
+ function computeSegDraggable(seg, context) {
+ let { pluginHooks } = context;
+ let transformers = pluginHooks.isDraggableTransformers;
+ let { def, ui } = seg.eventRange;
+ let val = ui.startEditable;
+ for (let transformer of transformers) {
+ val = transformer(val, def, ui, context);
+ }
+ return val;
+ }
+ function computeSegStartResizable(seg, context) {
+ return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart;
+ }
+ function computeSegEndResizable(seg, context) {
+ return seg.isEnd && seg.eventRange.ui.durationEditable;
+ }
+ function buildSegTimeText(seg, timeFormat, context, defaultDisplayEventTime, // defaults to true
+ defaultDisplayEventEnd, // defaults to true
+ startOverride, endOverride) {
+ let { dateEnv, options } = context;
+ let { displayEventTime, displayEventEnd } = options;
+ let eventDef = seg.eventRange.def;
+ let eventInstance = seg.eventRange.instance;
+ if (displayEventTime == null) {
+ displayEventTime = defaultDisplayEventTime !== false;
+ }
+ if (displayEventEnd == null) {
+ displayEventEnd = defaultDisplayEventEnd !== false;
+ }
+ let wholeEventStart = eventInstance.range.start;
+ let wholeEventEnd = eventInstance.range.end;
+ let segStart = startOverride || seg.start || seg.eventRange.range.start;
+ let segEnd = endOverride || seg.end || seg.eventRange.range.end;
+ let isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();
+ let isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();
+ if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {
+ segStart = isStartDay ? wholeEventStart : segStart;
+ segEnd = isEndDay ? wholeEventEnd : segEnd;
+ if (displayEventEnd && eventDef.hasEnd) {
+ return dateEnv.formatRange(segStart, segEnd, timeFormat, {
+ forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,
+ forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo,
+ });
+ }
+ return dateEnv.format(segStart, timeFormat, {
+ forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same
+ });
+ }
+ return '';
+ }
+ function getSegMeta(seg, todayRange, nowDate) {
+ let segRange = seg.eventRange.range;
+ return {
+ isPast: segRange.end < (nowDate || todayRange.start),
+ isFuture: segRange.start >= (nowDate || todayRange.end),
+ isToday: todayRange && rangeContainsMarker(todayRange, segRange.start),
+ };
+ }
+ function getEventClassNames(props) {
+ let classNames = ['fc-event'];
+ if (props.isMirror) {
+ classNames.push('fc-event-mirror');
+ }
+ if (props.isDraggable) {
+ classNames.push('fc-event-draggable');
+ }
+ if (props.isStartResizable || props.isEndResizable) {
+ classNames.push('fc-event-resizable');
+ }
+ if (props.isDragging) {
+ classNames.push('fc-event-dragging');
+ }
+ if (props.isResizing) {
+ classNames.push('fc-event-resizing');
+ }
+ if (props.isSelected) {
+ classNames.push('fc-event-selected');
+ }
+ if (props.isStart) {
+ classNames.push('fc-event-start');
+ }
+ if (props.isEnd) {
+ classNames.push('fc-event-end');
+ }
+ if (props.isPast) {
+ classNames.push('fc-event-past');
+ }
+ if (props.isToday) {
+ classNames.push('fc-event-today');
+ }
+ if (props.isFuture) {
+ classNames.push('fc-event-future');
+ }
+ return classNames;
+ }
+ function buildEventRangeKey(eventRange) {
+ return eventRange.instance
+ ? eventRange.instance.instanceId
+ : `${eventRange.def.defId}:${eventRange.range.start.toISOString()}`;
+ // inverse-background events don't have specific instances. TODO: better solution
+ }
+ function getSegAnchorAttrs(seg, context) {
+ let { def, instance } = seg.eventRange;
+ let { url } = def;
+ if (url) {
+ return { href: url };
+ }
+ let { emitter, options } = context;
+ let { eventInteractive } = options;
+ if (eventInteractive == null) {
+ eventInteractive = def.interactive;
+ if (eventInteractive == null) {
+ eventInteractive = Boolean(emitter.hasHandlers('eventClick'));
+ }
+ }
+ // mock what happens in EventClicking
+ if (eventInteractive) {
+ // only attach keyboard-related handlers because click handler is already done in EventClicking
+ return createAriaKeyboardAttrs((ev) => {
+ emitter.trigger('eventClick', {
+ el: ev.target,
+ event: new EventImpl(context, def, instance),
+ jsEvent: ev,
+ view: context.viewApi,
+ });
+ });
+ }
+ return {};
+ }
+
+ const STANDARD_PROPS = {
+ start: identity,
+ end: identity,
+ allDay: Boolean,
+ };
+ function parseDateSpan(raw, dateEnv, defaultDuration) {
+ let span = parseOpenDateSpan(raw, dateEnv);
+ let { range } = span;
+ if (!range.start) {
+ return null;
+ }
+ if (!range.end) {
+ if (defaultDuration == null) {
+ return null;
+ }
+ range.end = dateEnv.add(range.start, defaultDuration);
+ }
+ return span;
+ }
+ /*
+ TODO: somehow combine with parseRange?
+ Will return null if the start/end props were present but parsed invalidly.
+ */
+ function parseOpenDateSpan(raw, dateEnv) {
+ let { refined: standardProps, extra } = refineProps(raw, STANDARD_PROPS);
+ let startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;
+ let endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;
+ let { allDay } = standardProps;
+ if (allDay == null) {
+ allDay = (startMeta && startMeta.isTimeUnspecified) &&
+ (!endMeta || endMeta.isTimeUnspecified);
+ }
+ return Object.assign({ range: {
+ start: startMeta ? startMeta.marker : null,
+ end: endMeta ? endMeta.marker : null,
+ }, allDay }, extra);
+ }
+ function isDateSpansEqual(span0, span1) {
+ return rangesEqual(span0.range, span1.range) &&
+ span0.allDay === span1.allDay &&
+ isSpanPropsEqual(span0, span1);
+ }
+ // the NON-DATE-RELATED props
+ function isSpanPropsEqual(span0, span1) {
+ for (let propName in span1) {
+ if (propName !== 'range' && propName !== 'allDay') {
+ if (span0[propName] !== span1[propName]) {
+ return false;
+ }
+ }
+ }
+ // are there any props that span0 has that span1 DOESN'T have?
+ // both have range/allDay, so no need to special-case.
+ for (let propName in span0) {
+ if (!(propName in span1)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function buildDateSpanApi(span, dateEnv) {
+ return Object.assign(Object.assign({}, buildRangeApi(span.range, dateEnv, span.allDay)), { allDay: span.allDay });
+ }
+ function buildRangeApiWithTimeZone(range, dateEnv, omitTime) {
+ return Object.assign(Object.assign({}, buildRangeApi(range, dateEnv, omitTime)), { timeZone: dateEnv.timeZone });
+ }
+ function buildRangeApi(range, dateEnv, omitTime) {
+ return {
+ start: dateEnv.toDate(range.start),
+ end: dateEnv.toDate(range.end),
+ startStr: dateEnv.formatIso(range.start, { omitTime }),
+ endStr: dateEnv.formatIso(range.end, { omitTime }),
+ };
+ }
+ function fabricateEventRange(dateSpan, eventUiBases, context) {
+ let res = refineEventDef({ editable: false }, context);
+ let def = parseEventDef(res.refined, res.extra, '', // sourceId
+ dateSpan.allDay, true, // hasEnd
+ context);
+ return {
+ def,
+ ui: compileEventUi(def, eventUiBases),
+ instance: createEventInstance(def.defId, dateSpan.range),
+ range: dateSpan.range,
+ isStart: true,
+ isEnd: true,
+ };
+ }
+
+ let calendarSystemClassMap = {};
+ function registerCalendarSystem(name, theClass) {
+ calendarSystemClassMap[name] = theClass;
+ }
+ function createCalendarSystem(name) {
+ return new calendarSystemClassMap[name]();
+ }
+ class GregorianCalendarSystem {
+ getMarkerYear(d) {
+ return d.getUTCFullYear();
+ }
+ getMarkerMonth(d) {
+ return d.getUTCMonth();
+ }
+ getMarkerDay(d) {
+ return d.getUTCDate();
+ }
+ arrayToMarker(arr) {
+ return arrayToUtcDate(arr);
+ }
+ markerToArray(marker) {
+ return dateToUtcArray(marker);
+ }
+ }
+ registerCalendarSystem('gregory', GregorianCalendarSystem);
+
+ const ISO_RE = /^\s*(\d{4})(-?(\d{2})(-?(\d{2})([T ](\d{2}):?(\d{2})(:?(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;
+ function parse(str) {
+ let m = ISO_RE.exec(str);
+ if (m) {
+ let marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number(`0.${m[12]}`) * 1000 : 0));
+ if (isValidDate(marker)) {
+ let timeZoneOffset = null;
+ if (m[13]) {
+ timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +
+ Number(m[18] || 0));
+ }
+ return {
+ marker,
+ isTimeUnspecified: !m[6],
+ timeZoneOffset,
+ };
+ }
+ }
+ return null;
+ }
+
+ class DateEnv {
+ constructor(settings) {
+ let timeZone = this.timeZone = settings.timeZone;
+ let isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';
+ if (settings.namedTimeZoneImpl && isNamedTimeZone) {
+ this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);
+ }
+ this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);
+ this.calendarSystem = createCalendarSystem(settings.calendarSystem);
+ this.locale = settings.locale;
+ this.weekDow = settings.locale.week.dow;
+ this.weekDoy = settings.locale.week.doy;
+ if (settings.weekNumberCalculation === 'ISO') {
+ this.weekDow = 1;
+ this.weekDoy = 4;
+ }
+ if (typeof settings.firstDay === 'number') {
+ this.weekDow = settings.firstDay;
+ }
+ if (typeof settings.weekNumberCalculation === 'function') {
+ this.weekNumberFunc = settings.weekNumberCalculation;
+ }
+ this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;
+ this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText;
+ this.cmdFormatter = settings.cmdFormatter;
+ this.defaultSeparator = settings.defaultSeparator;
+ }
+ // Creating / Parsing
+ createMarker(input) {
+ let meta = this.createMarkerMeta(input);
+ if (meta === null) {
+ return null;
+ }
+ return meta.marker;
+ }
+ createNowMarker() {
+ if (this.canComputeOffset) {
+ return this.timestampToMarker(new Date().valueOf());
+ }
+ // if we can't compute the current date val for a timezone,
+ // better to give the current local date vals than UTC
+ return arrayToUtcDate(dateToLocalArray(new Date()));
+ }
+ createMarkerMeta(input) {
+ if (typeof input === 'string') {
+ return this.parse(input);
+ }
+ let marker = null;
+ if (typeof input === 'number') {
+ marker = this.timestampToMarker(input);
+ }
+ else if (input instanceof Date) {
+ input = input.valueOf();
+ if (!isNaN(input)) {
+ marker = this.timestampToMarker(input);
+ }
+ }
+ else if (Array.isArray(input)) {
+ marker = arrayToUtcDate(input);
+ }
+ if (marker === null || !isValidDate(marker)) {
+ return null;
+ }
+ return { marker, isTimeUnspecified: false, forcedTzo: null };
+ }
+ parse(s) {
+ let parts = parse(s);
+ if (parts === null) {
+ return null;
+ }
+ let { marker } = parts;
+ let forcedTzo = null;
+ if (parts.timeZoneOffset !== null) {
+ if (this.canComputeOffset) {
+ marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);
+ }
+ else {
+ forcedTzo = parts.timeZoneOffset;
+ }
+ }
+ return { marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo };
+ }
+ // Accessors
+ getYear(marker) {
+ return this.calendarSystem.getMarkerYear(marker);
+ }
+ getMonth(marker) {
+ return this.calendarSystem.getMarkerMonth(marker);
+ }
+ // Adding / Subtracting
+ add(marker, dur) {
+ let a = this.calendarSystem.markerToArray(marker);
+ a[0] += dur.years;
+ a[1] += dur.months;
+ a[2] += dur.days;
+ a[6] += dur.milliseconds;
+ return this.calendarSystem.arrayToMarker(a);
+ }
+ subtract(marker, dur) {
+ let a = this.calendarSystem.markerToArray(marker);
+ a[0] -= dur.years;
+ a[1] -= dur.months;
+ a[2] -= dur.days;
+ a[6] -= dur.milliseconds;
+ return this.calendarSystem.arrayToMarker(a);
+ }
+ addYears(marker, n) {
+ let a = this.calendarSystem.markerToArray(marker);
+ a[0] += n;
+ return this.calendarSystem.arrayToMarker(a);
+ }
+ addMonths(marker, n) {
+ let a = this.calendarSystem.markerToArray(marker);
+ a[1] += n;
+ return this.calendarSystem.arrayToMarker(a);
+ }
+ // Diffing Whole Units
+ diffWholeYears(m0, m1) {
+ let { calendarSystem } = this;
+ if (timeAsMs(m0) === timeAsMs(m1) &&
+ calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&
+ calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {
+ return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);
+ }
+ return null;
+ }
+ diffWholeMonths(m0, m1) {
+ let { calendarSystem } = this;
+ if (timeAsMs(m0) === timeAsMs(m1) &&
+ calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {
+ return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +
+ (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;
+ }
+ return null;
+ }
+ // Range / Duration
+ greatestWholeUnit(m0, m1) {
+ let n = this.diffWholeYears(m0, m1);
+ if (n !== null) {
+ return { unit: 'year', value: n };
+ }
+ n = this.diffWholeMonths(m0, m1);
+ if (n !== null) {
+ return { unit: 'month', value: n };
+ }
+ n = diffWholeWeeks(m0, m1);
+ if (n !== null) {
+ return { unit: 'week', value: n };
+ }
+ n = diffWholeDays(m0, m1);
+ if (n !== null) {
+ return { unit: 'day', value: n };
+ }
+ n = diffHours(m0, m1);
+ if (isInt(n)) {
+ return { unit: 'hour', value: n };
+ }
+ n = diffMinutes(m0, m1);
+ if (isInt(n)) {
+ return { unit: 'minute', value: n };
+ }
+ n = diffSeconds(m0, m1);
+ if (isInt(n)) {
+ return { unit: 'second', value: n };
+ }
+ return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() };
+ }
+ countDurationsBetween(m0, m1, d) {
+ // TODO: can use greatestWholeUnit
+ let diff;
+ if (d.years) {
+ diff = this.diffWholeYears(m0, m1);
+ if (diff !== null) {
+ return diff / asRoughYears(d);
+ }
+ }
+ if (d.months) {
+ diff = this.diffWholeMonths(m0, m1);
+ if (diff !== null) {
+ return diff / asRoughMonths(d);
+ }
+ }
+ if (d.days) {
+ diff = diffWholeDays(m0, m1);
+ if (diff !== null) {
+ return diff / asRoughDays(d);
+ }
+ }
+ return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);
+ }
+ // Start-Of
+ // these DON'T return zoned-dates. only UTC start-of dates
+ startOf(m, unit) {
+ if (unit === 'year') {
+ return this.startOfYear(m);
+ }
+ if (unit === 'month') {
+ return this.startOfMonth(m);
+ }
+ if (unit === 'week') {
+ return this.startOfWeek(m);
+ }
+ if (unit === 'day') {
+ return startOfDay(m);
+ }
+ if (unit === 'hour') {
+ return startOfHour(m);
+ }
+ if (unit === 'minute') {
+ return startOfMinute(m);
+ }
+ if (unit === 'second') {
+ return startOfSecond(m);
+ }
+ return null;
+ }
+ startOfYear(m) {
+ return this.calendarSystem.arrayToMarker([
+ this.calendarSystem.getMarkerYear(m),
+ ]);
+ }
+ startOfMonth(m) {
+ return this.calendarSystem.arrayToMarker([
+ this.calendarSystem.getMarkerYear(m),
+ this.calendarSystem.getMarkerMonth(m),
+ ]);
+ }
+ startOfWeek(m) {
+ return this.calendarSystem.arrayToMarker([
+ this.calendarSystem.getMarkerYear(m),
+ this.calendarSystem.getMarkerMonth(m),
+ m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7),
+ ]);
+ }
+ // Week Number
+ computeWeekNumber(marker) {
+ if (this.weekNumberFunc) {
+ return this.weekNumberFunc(this.toDate(marker));
+ }
+ return weekOfYear(marker, this.weekDow, this.weekDoy);
+ }
+ // TODO: choke on timeZoneName: long
+ format(marker, formatter, dateOptions = {}) {
+ return formatter.format({
+ marker,
+ timeZoneOffset: dateOptions.forcedTzo != null ?
+ dateOptions.forcedTzo :
+ this.offsetForMarker(marker),
+ }, this);
+ }
+ formatRange(start, end, formatter, dateOptions = {}) {
+ if (dateOptions.isEndExclusive) {
+ end = addMs(end, -1);
+ }
+ return formatter.formatRange({
+ marker: start,
+ timeZoneOffset: dateOptions.forcedStartTzo != null ?
+ dateOptions.forcedStartTzo :
+ this.offsetForMarker(start),
+ }, {
+ marker: end,
+ timeZoneOffset: dateOptions.forcedEndTzo != null ?
+ dateOptions.forcedEndTzo :
+ this.offsetForMarker(end),
+ }, this, dateOptions.defaultSeparator);
+ }
+ /*
+ DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,
+ might as well use buildIsoString or some other util directly
+ */
+ formatIso(marker, extraOptions = {}) {
+ let timeZoneOffset = null;
+ if (!extraOptions.omitTimeZoneOffset) {
+ if (extraOptions.forcedTzo != null) {
+ timeZoneOffset = extraOptions.forcedTzo;
+ }
+ else {
+ timeZoneOffset = this.offsetForMarker(marker);
+ }
+ }
+ return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);
+ }
+ // TimeZone
+ timestampToMarker(ms) {
+ if (this.timeZone === 'local') {
+ return arrayToUtcDate(dateToLocalArray(new Date(ms)));
+ }
+ if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {
+ return new Date(ms);
+ }
+ return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));
+ }
+ offsetForMarker(m) {
+ if (this.timeZone === 'local') {
+ return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert "inverse" offset to "normal" offset
+ }
+ if (this.timeZone === 'UTC') {
+ return 0;
+ }
+ if (this.namedTimeZoneImpl) {
+ return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));
+ }
+ return null;
+ }
+ // Conversion
+ toDate(m, forcedTzo) {
+ if (this.timeZone === 'local') {
+ return arrayToLocalDate(dateToUtcArray(m));
+ }
+ if (this.timeZone === 'UTC') {
+ return new Date(m.valueOf()); // make sure it's a copy
+ }
+ if (!this.namedTimeZoneImpl) {
+ return new Date(m.valueOf() - (forcedTzo || 0));
+ }
+ return new Date(m.valueOf() -
+ this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60);
+ }
+ }
+
+ class NamedTimeZoneImpl {
+ constructor(timeZoneName) {
+ this.timeZoneName = timeZoneName;
+ }
+ }
+
+ class SegHierarchy {
+ constructor() {
+ // settings
+ this.strictOrder = false;
+ this.allowReslicing = false;
+ this.maxCoord = -1; // -1 means no max
+ this.maxStackCnt = -1; // -1 means no max
+ this.levelCoords = []; // ordered
+ this.entriesByLevel = []; // parallel with levelCoords
+ this.stackCnts = {}; // TODO: use better technique!?
+ }
+ addSegs(inputs) {
+ let hiddenEntries = [];
+ for (let input of inputs) {
+ this.insertEntry(input, hiddenEntries);
+ }
+ return hiddenEntries;
+ }
+ insertEntry(entry, hiddenEntries) {
+ let insertion = this.findInsertion(entry);
+ if (this.isInsertionValid(insertion, entry)) {
+ this.insertEntryAt(entry, insertion);
+ return 1;
+ }
+ return this.handleInvalidInsertion(insertion, entry, hiddenEntries);
+ }
+ isInsertionValid(insertion, entry) {
+ return (this.maxCoord === -1 || insertion.levelCoord + entry.thickness <= this.maxCoord) &&
+ (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);
+ }
+ // returns number of new entries inserted
+ handleInvalidInsertion(insertion, entry, hiddenEntries) {
+ if (this.allowReslicing && insertion.touchingEntry) {
+ return this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);
+ }
+ hiddenEntries.push(entry);
+ return 0;
+ }
+ splitEntry(entry, barrier, hiddenEntries) {
+ let partCnt = 0;
+ let splitHiddenEntries = [];
+ let entrySpan = entry.span;
+ let barrierSpan = barrier.span;
+ if (entrySpan.start < barrierSpan.start) {
+ partCnt += this.insertEntry({
+ index: entry.index,
+ thickness: entry.thickness,
+ span: { start: entrySpan.start, end: barrierSpan.start },
+ }, splitHiddenEntries);
+ }
+ if (entrySpan.end > barrierSpan.end) {
+ partCnt += this.insertEntry({
+ index: entry.index,
+ thickness: entry.thickness,
+ span: { start: barrierSpan.end, end: entrySpan.end },
+ }, splitHiddenEntries);
+ }
+ if (partCnt) {
+ hiddenEntries.push({
+ index: entry.index,
+ thickness: entry.thickness,
+ span: intersectSpans(barrierSpan, entrySpan), // guaranteed to intersect
+ }, ...splitHiddenEntries);
+ return partCnt;
+ }
+ hiddenEntries.push(entry);
+ return 0;
+ }
+ insertEntryAt(entry, insertion) {
+ let { entriesByLevel, levelCoords } = this;
+ if (insertion.lateral === -1) {
+ // create a new level
+ insertAt(levelCoords, insertion.level, insertion.levelCoord);
+ insertAt(entriesByLevel, insertion.level, [entry]);
+ }
+ else {
+ // insert into existing level
+ insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);
+ }
+ this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;
+ }
+ findInsertion(newEntry) {
+ let { levelCoords, entriesByLevel, strictOrder, stackCnts } = this;
+ let levelCnt = levelCoords.length;
+ let candidateCoord = 0;
+ let touchingLevel = -1;
+ let touchingLateral = -1;
+ let touchingEntry = null;
+ let stackCnt = 0;
+ for (let trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {
+ let trackingCoord = levelCoords[trackingLevel];
+ // if the current level is past the placed entry, we have found a good empty space and can stop.
+ // if strictOrder, keep finding more lateral intersections.
+ if (!strictOrder && trackingCoord >= candidateCoord + newEntry.thickness) {
+ break;
+ }
+ let trackingEntries = entriesByLevel[trackingLevel];
+ let trackingEntry;
+ let searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd); // find first entry after newEntry's end
+ let lateralIndex = searchRes[0] + searchRes[1]; // if exact match (which doesn't collide), go to next one
+ while ( // loop through entries that horizontally intersect
+ (trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list
+ trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry
+ ) {
+ let trackingEntryBottom = trackingCoord + trackingEntry.thickness;
+ // intersects into the top of the candidate?
+ if (trackingEntryBottom > candidateCoord) {
+ candidateCoord = trackingEntryBottom;
+ touchingEntry = trackingEntry;
+ touchingLevel = trackingLevel;
+ touchingLateral = lateralIndex;
+ }
+ // butts up against top of candidate? (will happen if just intersected as well)
+ if (trackingEntryBottom === candidateCoord) {
+ // accumulate the highest possible stackCnt of the trackingEntries that butt up
+ stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);
+ }
+ lateralIndex += 1;
+ }
+ }
+ // the destination level will be after touchingEntry's level. find it
+ let destLevel = 0;
+ if (touchingEntry) {
+ destLevel = touchingLevel + 1;
+ while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {
+ destLevel += 1;
+ }
+ }
+ // if adding to an existing level, find where to insert
+ let destLateral = -1;
+ if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {
+ destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];
+ }
+ return {
+ touchingLevel,
+ touchingLateral,
+ touchingEntry,
+ stackCnt,
+ levelCoord: candidateCoord,
+ level: destLevel,
+ lateral: destLateral,
+ };
+ }
+ // sorted by levelCoord (lowest to highest)
+ toRects() {
+ let { entriesByLevel, levelCoords } = this;
+ let levelCnt = entriesByLevel.length;
+ let rects = [];
+ for (let level = 0; level < levelCnt; level += 1) {
+ let entries = entriesByLevel[level];
+ let levelCoord = levelCoords[level];
+ for (let entry of entries) {
+ rects.push(Object.assign(Object.assign({}, entry), { levelCoord }));
+ }
+ }
+ return rects;
+ }
+ }
+ function getEntrySpanEnd(entry) {
+ return entry.span.end;
+ }
+ function buildEntryKey(entry) {
+ return entry.index + ':' + entry.span.start;
+ }
+ // returns groups with entries sorted by input order
+ function groupIntersectingEntries(entries) {
+ let merges = [];
+ for (let entry of entries) {
+ let filteredMerges = [];
+ let hungryMerge = {
+ span: entry.span,
+ entries: [entry],
+ };
+ for (let merge of merges) {
+ if (intersectSpans(merge.span, hungryMerge.span)) {
+ hungryMerge = {
+ entries: merge.entries.concat(hungryMerge.entries),
+ span: joinSpans(merge.span, hungryMerge.span),
+ };
+ }
+ else {
+ filteredMerges.push(merge);
+ }
+ }
+ filteredMerges.push(hungryMerge);
+ merges = filteredMerges;
+ }
+ return merges;
+ }
+ function joinSpans(span0, span1) {
+ return {
+ start: Math.min(span0.start, span1.start),
+ end: Math.max(span0.end, span1.end),
+ };
+ }
+ function intersectSpans(span0, span1) {
+ let start = Math.max(span0.start, span1.start);
+ let end = Math.min(span0.end, span1.end);
+ if (start < end) {
+ return { start, end };
+ }
+ return null;
+ }
+ // general util
+ // ---------------------------------------------------------------------------------------------------------------------
+ function insertAt(arr, index, item) {
+ arr.splice(index, 0, item);
+ }
+ function binarySearch(a, searchVal, getItemVal) {
+ let startIndex = 0;
+ let endIndex = a.length; // exclusive
+ if (!endIndex || searchVal < getItemVal(a[startIndex])) { // no items OR before first item
+ return [0, 0];
+ }
+ if (searchVal > getItemVal(a[endIndex - 1])) { // after last item
+ return [endIndex, 0];
+ }
+ while (startIndex < endIndex) {
+ let middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2);
+ let middleVal = getItemVal(a[middleIndex]);
+ if (searchVal < middleVal) {
+ endIndex = middleIndex;
+ }
+ else if (searchVal > middleVal) {
+ startIndex = middleIndex + 1;
+ }
+ else { // equal!
+ return [middleIndex, 1];
+ }
+ }
+ return [startIndex, 0];
+ }
+
+ class Interaction {
+ constructor(settings) {
+ this.component = settings.component;
+ this.isHitComboAllowed = settings.isHitComboAllowed || null;
+ }
+ destroy() {
+ }
+ }
+ function parseInteractionSettings(component, input) {
+ return {
+ component,
+ el: input.el,
+ useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,
+ isHitComboAllowed: input.isHitComboAllowed || null,
+ };
+ }
+ function interactionSettingsToStore(settings) {
+ return {
+ [settings.component.uid]: settings,
+ };
+ }
+ // global state
+ const interactionSettingsStore = {};
+
+ /*
+ An abstraction for a dragging interaction originating on an event.
+ Does higher-level things than PointerDragger, such as possibly:
+ - a "mirror" that moves with the pointer
+ - a minimum number of pixels or other criteria for a true drag to begin
+
+ subclasses must emit:
+ - pointerdown
+ - dragstart
+ - dragmove
+ - pointerup
+ - dragend
+ */
+ class ElementDragging {
+ constructor(el, selector) {
+ this.emitter = new Emitter();
+ }
+ destroy() {
+ }
+ setMirrorIsVisible(bool) {
+ // optional if subclass doesn't want to support a mirror
+ }
+ setMirrorNeedsRevert(bool) {
+ // optional if subclass doesn't want to support a mirror
+ }
+ setAutoScrollEnabled(bool) {
+ // optional
+ }
+ }
+
+ // TODO: get rid of this in favor of options system,
+ // tho it's really easy to access this globally rather than pass thru options.
+ const config = {};
+
+ /*
+ Information about what will happen when an external element is dragged-and-dropped
+ onto a calendar. Contains information for creating an event.
+ */
+ const DRAG_META_REFINERS = {
+ startTime: createDuration,
+ duration: createDuration,
+ create: Boolean,
+ sourceId: String,
+ };
+ function parseDragMeta(raw) {
+ let { refined, extra } = refineProps(raw, DRAG_META_REFINERS);
+ return {
+ startTime: refined.startTime || null,
+ duration: refined.duration || null,
+ create: refined.create != null ? refined.create : true,
+ sourceId: refined.sourceId,
+ leftoverProps: extra,
+ };
+ }
+
+ class CalendarRoot extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ forPrint: false,
+ };
+ this.handleBeforePrint = () => {
+ this.setState({ forPrint: true });
+ };
+ this.handleAfterPrint = () => {
+ this.setState({ forPrint: false });
+ };
+ }
+ render() {
+ let { props } = this;
+ let { options } = props;
+ let { forPrint } = this.state;
+ let isHeightAuto = forPrint || options.height === 'auto' || options.contentHeight === 'auto';
+ let height = (!isHeightAuto && options.height != null) ? options.height : '';
+ let classNames = [
+ 'fc',
+ forPrint ? 'fc-media-print' : 'fc-media-screen',
+ `fc-direction-${options.direction}`,
+ props.theme.getClass('root'),
+ ];
+ if (!getCanVGrowWithinCell()) {
+ classNames.push('fc-liquid-hack');
+ }
+ return props.children(classNames, height, isHeightAuto, forPrint);
+ }
+ componentDidMount() {
+ let { emitter } = this.props;
+ emitter.on('_beforeprint', this.handleBeforePrint);
+ emitter.on('_afterprint', this.handleAfterPrint);
+ }
+ componentWillUnmount() {
+ let { emitter } = this.props;
+ emitter.off('_beforeprint', this.handleBeforePrint);
+ emitter.off('_afterprint', this.handleAfterPrint);
+ }
+ }
+
+ // Computes a default column header formatting string if `colFormat` is not explicitly defined
+ function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
+ // if more than one week row, or if there are a lot of columns with not much space,
+ // put just the day numbers will be in each cell
+ if (!datesRepDistinctDays || dayCnt > 10) {
+ return createFormatter({ weekday: 'short' }); // "Sat"
+ }
+ if (dayCnt > 1) {
+ return createFormatter({ weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }); // "Sat 11/12"
+ }
+ return createFormatter({ weekday: 'long' }); // "Saturday"
+ }
+
+ const CLASS_NAME = 'fc-col-header-cell'; // do the cushion too? no
+ function renderInner$1(renderProps) {
+ return renderProps.text;
+ }
+
+ class ContentInjector extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.id = guid();
+ this.currentDomNodes = [];
+ this.queuedDomNodes = [];
+ this.handleEl = (el) => {
+ if (this.props.elRef) {
+ setRef(this.props.elRef, el);
+ }
+ };
+ }
+ render() {
+ const { props, context } = this;
+ const { options } = context;
+ const { generator, renderProps } = props;
+ const attrs = buildElAttrs(props);
+ let innerContent;
+ let queuedDomNodes = [];
+ if (hasCustomRenderingHandler(props.generatorName, options)) {
+ if (options.customRenderingReplacesEl) {
+ delete attrs.elRef; // because handleEl will be used
+ }
+ }
+ else {
+ const customContent = typeof generator === 'function' ?
+ generator(renderProps, h) :
+ generator;
+ if (typeof customContent === 'string' ||
+ i$1(customContent) ||
+ Array.isArray(customContent)) {
+ innerContent = customContent;
+ }
+ else if (typeof customContent === 'object') {
+ if ('html' in customContent) {
+ attrs.dangerouslySetInnerHTML = { __html: customContent.html };
+ }
+ else if ('domNodes' in customContent) {
+ queuedDomNodes = Array.prototype.slice.call(customContent.domNodes);
+ }
+ }
+ }
+ this.queuedDomNodes = queuedDomNodes;
+ return h(props.elTag, attrs, innerContent);
+ }
+ componentDidMount() {
+ this.applyQueueudDomNodes();
+ this.triggerCustomRendering(true);
+ }
+ componentDidUpdate() {
+ this.applyQueueudDomNodes();
+ this.triggerCustomRendering(true);
+ }
+ componentWillUnmount() {
+ this.triggerCustomRendering(false); // TODO: different API for removal?
+ }
+ triggerCustomRendering(isActive) {
+ const { props, context } = this;
+ const { handleCustomRendering, customRenderingMetaMap } = context.options;
+ if (handleCustomRendering) {
+ const customRenderingMeta = customRenderingMetaMap === null || customRenderingMetaMap === void 0 ? void 0 : customRenderingMetaMap[props.generatorName];
+ if (customRenderingMeta) {
+ handleCustomRendering(Object.assign({ id: this.id, isActive, containerEl: this.base, reportNewContainerEl: this.handleEl, generatorMeta: customRenderingMeta }, props));
+ }
+ }
+ }
+ applyQueueudDomNodes() {
+ const { queuedDomNodes, currentDomNodes } = this;
+ const el = this.base;
+ if (!isArraysEqual(queuedDomNodes, currentDomNodes)) {
+ currentDomNodes.forEach(removeElement);
+ for (let newNode of queuedDomNodes) {
+ el.appendChild(newNode);
+ }
+ this.currentDomNodes = queuedDomNodes;
+ }
+ }
+ }
+ ContentInjector.addPropsEquality({
+ elClasses: isArraysEqual,
+ elStyle: isPropsEqual,
+ elAttrs: isNonHandlerPropsEqual,
+ renderProps: isPropsEqual,
+ });
+ // Util
+ function hasCustomRenderingHandler(generatorName, options) {
+ var _a;
+ return Boolean(options.handleCustomRendering &&
+ generatorName &&
+ ((_a = options.customRenderingMetaMap) === null || _a === void 0 ? void 0 : _a[generatorName]));
+ }
+ function buildElAttrs(props, extraClassNames) {
+ const attrs = Object.assign(Object.assign({}, props.elAttrs), { ref: props.elRef });
+ if (props.elClasses || extraClassNames) {
+ attrs.className = (props.elClasses || [])
+ .concat(extraClassNames || [])
+ .concat(attrs.className || [])
+ .filter(Boolean)
+ .join(' ');
+ }
+ if (props.elStyle) {
+ attrs.style = props.elStyle;
+ }
+ return attrs;
+ }
+
+ const RenderId = createContext(0);
+
+ class ContentContainer extends d {
+ constructor() {
+ super(...arguments);
+ this.InnerContent = InnerContentInjector.bind(undefined, this);
+ }
+ render() {
+ const { props } = this;
+ const generatedClassNames = generateClassNames(props.classNameGenerator, props.renderProps);
+ if (props.children) {
+ const elAttrs = buildElAttrs(props, generatedClassNames);
+ const children = props.children(this.InnerContent, props.renderProps, elAttrs);
+ if (props.elTag) {
+ return h(props.elTag, elAttrs, children);
+ }
+ else {
+ return children;
+ }
+ }
+ else {
+ return h((ContentInjector), Object.assign(Object.assign({}, props), { elTag: props.elTag || 'div', elClasses: (props.elClasses || []).concat(generatedClassNames), renderId: this.context }));
+ }
+ }
+ componentDidMount() {
+ var _a, _b;
+ (_b = (_a = this.props).didMount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.base }));
+ }
+ componentWillUnmount() {
+ var _a, _b;
+ (_b = (_a = this.props).willUnmount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.base }));
+ }
+ }
+ ContentContainer.contextType = RenderId;
+ function InnerContentInjector(containerComponent, props) {
+ const parentProps = containerComponent.props;
+ return h((ContentInjector), Object.assign({ renderProps: parentProps.renderProps, generatorName: parentProps.generatorName, generator: parentProps.generator, renderId: containerComponent.context }, props));
+ }
+ // Utils
+ function generateClassNames(classNameGenerator, renderProps) {
+ const classNames = typeof classNameGenerator === 'function' ?
+ classNameGenerator(renderProps) :
+ classNameGenerator || [];
+ return typeof classNames === 'string' ? [classNames] : classNames;
+ }
+
+ // BAD name for this class now. used in the Header
+ class TableDateCell extends BaseComponent {
+ render() {
+ let { dateEnv, options, theme, viewApi } = this.context;
+ let { props } = this;
+ let { date, dateProfile } = props;
+ let dayMeta = getDateMeta(date, props.todayRange, null, dateProfile);
+ let classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));
+ let text = dateEnv.format(date, props.dayHeaderFormat);
+ // if colCnt is 1, we are already in a day-view and don't need a navlink
+ let navLinkAttrs = (!dayMeta.isDisabled && props.colCnt > 1)
+ ? buildNavLinkAttrs(this.context, date)
+ : {};
+ let renderProps = Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: viewApi }, props.extraRenderProps), { text }), dayMeta);
+ return (h(ContentContainer, { elTag: "th", elClasses: classNames, elAttrs: Object.assign({ role: 'columnheader', colSpan: props.colSpan, 'data-date': !dayMeta.isDisabled ? formatDayString(date) : undefined }, props.extraDataAttrs), renderProps: renderProps, generatorName: "dayHeaderContent", generator: options.dayHeaderContent || renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContainer) => (h("div", { className: "fc-scrollgrid-sync-inner" }, !dayMeta.isDisabled && (h(InnerContainer, { elTag: "a", elAttrs: navLinkAttrs, elClasses: [
+ 'fc-col-header-cell-cushion',
+ props.isSticky && 'fc-sticky',
+ ] }))))));
+ }
+ }
+
+ const WEEKDAY_FORMAT = createFormatter({ weekday: 'long' });
+ class TableDowCell extends BaseComponent {
+ render() {
+ let { props } = this;
+ let { dateEnv, theme, viewApi, options } = this.context;
+ let date = addDays(new Date(259200000), props.dow); // start with Sun, 04 Jan 1970 00:00:00 GMT
+ let dateMeta = {
+ dow: props.dow,
+ isDisabled: false,
+ isFuture: false,
+ isPast: false,
+ isToday: false,
+ isOther: false,
+ };
+ let text = dateEnv.format(date, props.dayHeaderFormat);
+ let renderProps = Object.assign(Object.assign(Object.assign(Object.assign({ // TODO: make this public?
+ date }, dateMeta), { view: viewApi }), props.extraRenderProps), { text });
+ return (h(ContentContainer, { elTag: "th", elClasses: [
+ CLASS_NAME,
+ ...getDayClassNames(dateMeta, theme),
+ ...(props.extraClassNames || []),
+ ], elAttrs: Object.assign({ role: 'columnheader', colSpan: props.colSpan }, props.extraDataAttrs), renderProps: renderProps, generatorName: "dayHeaderContent", generator: options.dayHeaderContent || renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => (h("div", { className: "fc-scrollgrid-sync-inner" },
+ h(InnerContent, { elTag: "a", elClasses: [
+ 'fc-col-header-cell-cushion',
+ props.isSticky && 'fc-sticky',
+ ], elAttrs: {
+ 'aria-label': dateEnv.format(date, WEEKDAY_FORMAT),
+ } })))));
+ }
+ }
+
+ class NowTimer extends d {
+ constructor(props, context) {
+ super(props, context);
+ this.initialNowDate = getNow(context.options.now, context.dateEnv);
+ this.initialNowQueriedMs = new Date().valueOf();
+ this.state = this.computeTiming().currentState;
+ }
+ render() {
+ let { props, state } = this;
+ return props.children(state.nowDate, state.todayRange);
+ }
+ componentDidMount() {
+ this.setTimeout();
+ }
+ componentDidUpdate(prevProps) {
+ if (prevProps.unit !== this.props.unit) {
+ this.clearTimeout();
+ this.setTimeout();
+ }
+ }
+ componentWillUnmount() {
+ this.clearTimeout();
+ }
+ computeTiming() {
+ let { props, context } = this;
+ let unroundedNow = addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs);
+ let currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit);
+ let nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit));
+ let waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf();
+ // there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)
+ // ensure no longer than a day
+ waitMs = Math.min(1000 * 60 * 60 * 24, waitMs);
+ return {
+ currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) },
+ nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) },
+ waitMs,
+ };
+ }
+ setTimeout() {
+ let { nextState, waitMs } = this.computeTiming();
+ this.timeoutId = setTimeout(() => {
+ this.setState(nextState, () => {
+ this.setTimeout();
+ });
+ }, waitMs);
+ }
+ clearTimeout() {
+ if (this.timeoutId) {
+ clearTimeout(this.timeoutId);
+ }
+ }
+ }
+ NowTimer.contextType = ViewContextType;
+ function buildDayRange(date) {
+ let start = startOfDay(date);
+ let end = addDays(start, 1);
+ return { start, end };
+ }
+
+ class DayHeader extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.createDayHeaderFormatter = memoize(createDayHeaderFormatter);
+ }
+ render() {
+ let { context } = this;
+ let { dates, dateProfile, datesRepDistinctDays, renderIntro } = this.props;
+ let dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);
+ return (h(NowTimer, { unit: "day" }, (nowDate, todayRange) => (h("tr", { role: "row" },
+ renderIntro && renderIntro('day'),
+ dates.map((date) => (datesRepDistinctDays ? (h(TableDateCell, { key: date.toISOString(), date: date, dateProfile: dateProfile, todayRange: todayRange, colCnt: dates.length, dayHeaderFormat: dayHeaderFormat })) : (h(TableDowCell, { key: date.getUTCDay(), dow: date.getUTCDay(), dayHeaderFormat: dayHeaderFormat }))))))));
+ }
+ }
+ function createDayHeaderFormatter(explicitFormat, datesRepDistinctDays, dateCnt) {
+ return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt);
+ }
+
+ class DaySeriesModel {
+ constructor(range, dateProfileGenerator) {
+ let date = range.start;
+ let { end } = range;
+ let indices = [];
+ let dates = [];
+ let dayIndex = -1;
+ while (date < end) { // loop each day from start to end
+ if (dateProfileGenerator.isHiddenDay(date)) {
+ indices.push(dayIndex + 0.5); // mark that it's between indices
+ }
+ else {
+ dayIndex += 1;
+ indices.push(dayIndex);
+ dates.push(date);
+ }
+ date = addDays(date, 1);
+ }
+ this.dates = dates;
+ this.indices = indices;
+ this.cnt = dates.length;
+ }
+ sliceRange(range) {
+ let firstIndex = this.getDateDayIndex(range.start); // inclusive first index
+ let lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index
+ let clippedFirstIndex = Math.max(0, firstIndex);
+ let clippedLastIndex = Math.min(this.cnt - 1, lastIndex);
+ // deal with in-between indices
+ clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell
+ clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell
+ if (clippedFirstIndex <= clippedLastIndex) {
+ return {
+ firstIndex: clippedFirstIndex,
+ lastIndex: clippedLastIndex,
+ isStart: firstIndex === clippedFirstIndex,
+ isEnd: lastIndex === clippedLastIndex,
+ };
+ }
+ return null;
+ }
+ // Given a date, returns its chronolocial cell-index from the first cell of the grid.
+ // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.
+ // If before the first offset, returns a negative number.
+ // If after the last offset, returns an offset past the last cell offset.
+ // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.
+ getDateDayIndex(date) {
+ let { indices } = this;
+ let dayOffset = Math.floor(diffDays(this.dates[0], date));
+ if (dayOffset < 0) {
+ return indices[0] - 1;
+ }
+ if (dayOffset >= indices.length) {
+ return indices[indices.length - 1] + 1;
+ }
+ return indices[dayOffset];
+ }
+ }
+
+ class DayTableModel {
+ constructor(daySeries, breakOnWeeks) {
+ let { dates } = daySeries;
+ let daysPerRow;
+ let firstDay;
+ let rowCnt;
+ if (breakOnWeeks) {
+ // count columns until the day-of-week repeats
+ firstDay = dates[0].getUTCDay();
+ for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow += 1) {
+ if (dates[daysPerRow].getUTCDay() === firstDay) {
+ break;
+ }
+ }
+ rowCnt = Math.ceil(dates.length / daysPerRow);
+ }
+ else {
+ rowCnt = 1;
+ daysPerRow = dates.length;
+ }
+ this.rowCnt = rowCnt;
+ this.colCnt = daysPerRow;
+ this.daySeries = daySeries;
+ this.cells = this.buildCells();
+ this.headerDates = this.buildHeaderDates();
+ }
+ buildCells() {
+ let rows = [];
+ for (let row = 0; row < this.rowCnt; row += 1) {
+ let cells = [];
+ for (let col = 0; col < this.colCnt; col += 1) {
+ cells.push(this.buildCell(row, col));
+ }
+ rows.push(cells);
+ }
+ return rows;
+ }
+ buildCell(row, col) {
+ let date = this.daySeries.dates[row * this.colCnt + col];
+ return {
+ key: date.toISOString(),
+ date,
+ };
+ }
+ buildHeaderDates() {
+ let dates = [];
+ for (let col = 0; col < this.colCnt; col += 1) {
+ dates.push(this.cells[0][col].date);
+ }
+ return dates;
+ }
+ sliceRange(range) {
+ let { colCnt } = this;
+ let seriesSeg = this.daySeries.sliceRange(range);
+ let segs = [];
+ if (seriesSeg) {
+ let { firstIndex, lastIndex } = seriesSeg;
+ let index = firstIndex;
+ while (index <= lastIndex) {
+ let row = Math.floor(index / colCnt);
+ let nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);
+ segs.push({
+ row,
+ firstCol: index % colCnt,
+ lastCol: (nextIndex - 1) % colCnt,
+ isStart: seriesSeg.isStart && index === firstIndex,
+ isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex,
+ });
+ index = nextIndex;
+ }
+ }
+ return segs;
+ }
+ }
+
+ class Slicer {
+ constructor() {
+ this.sliceBusinessHours = memoize(this._sliceBusinessHours);
+ this.sliceDateSelection = memoize(this._sliceDateSpan);
+ this.sliceEventStore = memoize(this._sliceEventStore);
+ this.sliceEventDrag = memoize(this._sliceInteraction);
+ this.sliceEventResize = memoize(this._sliceInteraction);
+ this.forceDayIfListItem = false; // hack
+ }
+ sliceProps(props, dateProfile, nextDayThreshold, context, ...extraArgs) {
+ let { eventUiBases } = props;
+ let eventSegs = this.sliceEventStore(props.eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs);
+ return {
+ dateSelectionSegs: this.sliceDateSelection(props.dateSelection, eventUiBases, context, ...extraArgs),
+ businessHourSegs: this.sliceBusinessHours(props.businessHours, dateProfile, nextDayThreshold, context, ...extraArgs),
+ fgEventSegs: eventSegs.fg,
+ bgEventSegs: eventSegs.bg,
+ eventDrag: this.sliceEventDrag(props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),
+ eventResize: this.sliceEventResize(props.eventResize, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),
+ eventSelection: props.eventSelection,
+ }; // TODO: give interactionSegs?
+ }
+ sliceNowDate(// does not memoize
+ date, context, ...extraArgs) {
+ return this._sliceDateSpan({ range: { start: date, end: addMs(date, 1) }, allDay: false }, // add 1 ms, protect against null range
+ {}, context, ...extraArgs);
+ }
+ _sliceBusinessHours(businessHours, dateProfile, nextDayThreshold, context, ...extraArgs) {
+ if (!businessHours) {
+ return [];
+ }
+ return this._sliceEventStore(expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context), {}, dateProfile, nextDayThreshold, ...extraArgs).bg;
+ }
+ _sliceEventStore(eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {
+ if (eventStore) {
+ let rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
+ return {
+ bg: this.sliceEventRanges(rangeRes.bg, extraArgs),
+ fg: this.sliceEventRanges(rangeRes.fg, extraArgs),
+ };
+ }
+ return { bg: [], fg: [] };
+ }
+ _sliceInteraction(interaction, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {
+ if (!interaction) {
+ return null;
+ }
+ let rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
+ return {
+ segs: this.sliceEventRanges(rangeRes.fg, extraArgs),
+ affectedInstances: interaction.affectedEvents.instances,
+ isEvent: interaction.isEvent,
+ };
+ }
+ _sliceDateSpan(dateSpan, eventUiBases, context, ...extraArgs) {
+ if (!dateSpan) {
+ return [];
+ }
+ let eventRange = fabricateEventRange(dateSpan, eventUiBases, context);
+ let segs = this.sliceRange(dateSpan.range, ...extraArgs);
+ for (let seg of segs) {
+ seg.eventRange = eventRange;
+ }
+ return segs;
+ }
+ /*
+ "complete" seg means it has component and eventRange
+ */
+ sliceEventRanges(eventRanges, extraArgs) {
+ let segs = [];
+ for (let eventRange of eventRanges) {
+ segs.push(...this.sliceEventRange(eventRange, extraArgs));
+ }
+ return segs;
+ }
+ /*
+ "complete" seg means it has component and eventRange
+ */
+ sliceEventRange(eventRange, extraArgs) {
+ let dateRange = eventRange.range;
+ // hack to make multi-day events that are being force-displayed as list-items to take up only one day
+ if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {
+ dateRange = {
+ start: dateRange.start,
+ end: addDays(dateRange.start, 1),
+ };
+ }
+ let segs = this.sliceRange(dateRange, ...extraArgs);
+ for (let seg of segs) {
+ seg.eventRange = eventRange;
+ seg.isStart = eventRange.isStart && seg.isStart;
+ seg.isEnd = eventRange.isEnd && seg.isEnd;
+ }
+ return segs;
+ }
+ }
+ /*
+ for incorporating slotMinTime/slotMaxTime if appropriate
+ TODO: should be part of DateProfile!
+ TimelineDateProfile already does this btw
+ */
+ function computeActiveRange(dateProfile, isComponentAllDay) {
+ let range = dateProfile.activeRange;
+ if (isComponentAllDay) {
+ return range;
+ }
+ return {
+ start: addMs(range.start, dateProfile.slotMinTime.milliseconds),
+ end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5), // 864e5 = ms in a day
+ };
+ }
+
+ function reduceEventStore(eventStore, action, eventSources, dateProfile, context) {
+ switch (action.type) {
+ case 'RECEIVE_EVENTS': // raw
+ return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);
+ case 'ADD_EVENTS': // already parsed, but not expanded
+ return addEvent(eventStore, action.eventStore, // new ones
+ dateProfile ? dateProfile.activeRange : null, context);
+ case 'RESET_EVENTS':
+ return action.eventStore;
+ case 'MERGE_EVENTS': // already parsed and expanded
+ return mergeEventStores(eventStore, action.eventStore);
+ case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
+ case 'NEXT':
+ case 'CHANGE_DATE':
+ case 'CHANGE_VIEW_TYPE':
+ if (dateProfile) {
+ return expandRecurring(eventStore, dateProfile.activeRange, context);
+ }
+ return eventStore;
+ case 'REMOVE_EVENTS':
+ return excludeSubEventStore(eventStore, action.eventStore);
+ case 'REMOVE_EVENT_SOURCE':
+ return excludeEventsBySourceId(eventStore, action.sourceId);
+ case 'REMOVE_ALL_EVENT_SOURCES':
+ return filterEventStoreDefs(eventStore, (eventDef) => (!eventDef.sourceId // only keep events with no source id
+ ));
+ case 'REMOVE_ALL_EVENTS':
+ return createEmptyEventStore();
+ default:
+ return eventStore;
+ }
+ }
+ function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {
+ if (eventSource && // not already removed
+ fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
+ ) {
+ let subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);
+ if (fetchRange) {
+ subset = expandRecurring(subset, fetchRange, context);
+ }
+ return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
+ }
+ return eventStore;
+ }
+ function transformRawEvents(rawEvents, eventSource, context) {
+ let calEachTransform = context.options.eventDataTransform;
+ let sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
+ if (sourceEachTransform) {
+ rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
+ }
+ if (calEachTransform) {
+ rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
+ }
+ return rawEvents;
+ }
+ function transformEachRawEvent(rawEvents, func) {
+ let refinedEvents;
+ if (!func) {
+ refinedEvents = rawEvents;
+ }
+ else {
+ refinedEvents = [];
+ for (let rawEvent of rawEvents) {
+ let refinedEvent = func(rawEvent);
+ if (refinedEvent) {
+ refinedEvents.push(refinedEvent);
+ }
+ else if (refinedEvent == null) {
+ refinedEvents.push(rawEvent);
+ } // if a different falsy value, do nothing
+ }
+ }
+ return refinedEvents;
+ }
+ function addEvent(eventStore, subset, expandRange, context) {
+ if (expandRange) {
+ subset = expandRecurring(subset, expandRange, context);
+ }
+ return mergeEventStores(eventStore, subset);
+ }
+ function rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {
+ let { defs } = eventStore;
+ let instances = mapHash(eventStore.instances, (instance) => {
+ let def = defs[instance.defId];
+ if (def.allDay || def.recurringDef) {
+ return instance; // isn't dependent on timezone
+ }
+ return Object.assign(Object.assign({}, instance), { range: {
+ start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
+ end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),
+ }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
+ });
+ return { defs, instances };
+ }
+ function excludeEventsBySourceId(eventStore, sourceId) {
+ return filterEventStoreDefs(eventStore, (eventDef) => eventDef.sourceId !== sourceId);
+ }
+ // QUESTION: why not just return instances? do a general object-property-exclusion util
+ function excludeInstances(eventStore, removals) {
+ return {
+ defs: eventStore.defs,
+ instances: filterHash(eventStore.instances, (instance) => !removals[instance.instanceId]),
+ };
+ }
+
+ // high-level segmenting-aware tester functions
+ // ------------------------------------------------------------------------------------------------------------------------
+ function isInteractionValid(interaction, dateProfile, context) {
+ let { instances } = interaction.mutatedEvents;
+ for (let instanceId in instances) {
+ if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {
+ return false;
+ }
+ }
+ return isNewPropsValid({ eventDrag: interaction }, context); // HACK: the eventDrag props is used for ALL interactions
+ }
+ function isDateSelectionValid(dateSelection, dateProfile, context) {
+ if (!rangeContainsRange(dateProfile.validRange, dateSelection.range)) {
+ return false;
+ }
+ return isNewPropsValid({ dateSelection }, context);
+ }
+ function isNewPropsValid(newProps, context) {
+ let calendarState = context.getCurrentData();
+ let props = Object.assign({ businessHours: calendarState.businessHours, dateSelection: '', eventStore: calendarState.eventStore, eventUiBases: calendarState.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);
+ return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);
+ }
+ function isPropsValid(state, context, dateSpanMeta = {}, filterConfig) {
+ if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {
+ return false;
+ }
+ if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {
+ return false;
+ }
+ return true;
+ }
+ // Moving Event Validation
+ // ------------------------------------------------------------------------------------------------------------------------
+ function isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {
+ let currentState = context.getCurrentData();
+ let interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions
+ let subjectEventStore = interaction.mutatedEvents;
+ let subjectDefs = subjectEventStore.defs;
+ let subjectInstances = subjectEventStore.instances;
+ let subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?
+ state.eventUiBases :
+ { '': currentState.selectionConfig });
+ if (filterConfig) {
+ subjectConfigs = mapHash(subjectConfigs, filterConfig);
+ }
+ // exclude the subject events. TODO: exclude defs too?
+ let otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances);
+ let otherDefs = otherEventStore.defs;
+ let otherInstances = otherEventStore.instances;
+ let otherConfigs = compileEventUis(otherDefs, state.eventUiBases);
+ for (let subjectInstanceId in subjectInstances) {
+ let subjectInstance = subjectInstances[subjectInstanceId];
+ let subjectRange = subjectInstance.range;
+ let subjectConfig = subjectConfigs[subjectInstance.defId];
+ let subjectDef = subjectDefs[subjectInstance.defId];
+ // constraint
+ if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {
+ return false;
+ }
+ // overlap
+ let { eventOverlap } = context.options;
+ let eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;
+ for (let otherInstanceId in otherInstances) {
+ let otherInstance = otherInstances[otherInstanceId];
+ // intersect! evaluate
+ if (rangesIntersect(subjectRange, otherInstance.range)) {
+ let otherOverlap = otherConfigs[otherInstance.defId].overlap;
+ // consider the other event's overlap. only do this if the subject event is a "real" event
+ if (otherOverlap === false && interaction.isEvent) {
+ return false;
+ }
+ if (subjectConfig.overlap === false) {
+ return false;
+ }
+ if (eventOverlapFunc && !eventOverlapFunc(new EventImpl(context, otherDefs[otherInstance.defId], otherInstance), // still event
+ new EventImpl(context, subjectDef, subjectInstance))) {
+ return false;
+ }
+ }
+ }
+ // allow (a function)
+ let calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state
+ for (let subjectAllow of subjectConfig.allows) {
+ let subjectDateSpan = Object.assign(Object.assign({}, dateSpanMeta), { range: subjectInstance.range, allDay: subjectDef.allDay });
+ let origDef = calendarEventStore.defs[subjectDef.defId];
+ let origInstance = calendarEventStore.instances[subjectInstanceId];
+ let eventApi;
+ if (origDef) { // was previously in the calendar
+ eventApi = new EventImpl(context, origDef, origInstance);
+ }
+ else { // was an external event
+ eventApi = new EventImpl(context, subjectDef); // no instance, because had no dates
+ }
+ if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ // Date Selection Validation
+ // ------------------------------------------------------------------------------------------------------------------------
+ function isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {
+ let relevantEventStore = state.eventStore;
+ let relevantDefs = relevantEventStore.defs;
+ let relevantInstances = relevantEventStore.instances;
+ let selection = state.dateSelection;
+ let selectionRange = selection.range;
+ let { selectionConfig } = context.getCurrentData();
+ if (filterConfig) {
+ selectionConfig = filterConfig(selectionConfig);
+ }
+ // constraint
+ if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {
+ return false;
+ }
+ // overlap
+ let { selectOverlap } = context.options;
+ let selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;
+ for (let relevantInstanceId in relevantInstances) {
+ let relevantInstance = relevantInstances[relevantInstanceId];
+ // intersect! evaluate
+ if (rangesIntersect(selectionRange, relevantInstance.range)) {
+ if (selectionConfig.overlap === false) {
+ return false;
+ }
+ if (selectOverlapFunc && !selectOverlapFunc(new EventImpl(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {
+ return false;
+ }
+ }
+ }
+ // allow (a function)
+ for (let selectionAllow of selectionConfig.allows) {
+ let fullDateSpan = Object.assign(Object.assign({}, dateSpanMeta), selection);
+ if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ // Constraint Utils
+ // ------------------------------------------------------------------------------------------------------------------------
+ function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {
+ for (let constraint of constraints) {
+ if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours
+ otherEventStore, // for if constraint is an even group ID
+ businessHoursUnexpanded, // for if constraint is 'businessHours'
+ context) {
+ if (constraint === 'businessHours') {
+ return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));
+ }
+ if (typeof constraint === 'string') { // an group ID
+ return eventStoreToRanges(filterEventStoreDefs(otherEventStore, (eventDef) => eventDef.groupId === constraint));
+ }
+ if (typeof constraint === 'object' && constraint) { // non-null object
+ return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));
+ }
+ return []; // if it's false
+ }
+ // TODO: move to event-store file?
+ function eventStoreToRanges(eventStore) {
+ let { instances } = eventStore;
+ let ranges = [];
+ for (let instanceId in instances) {
+ ranges.push(instances[instanceId].range);
+ }
+ return ranges;
+ }
+ // TODO: move to geom file?
+ function anyRangesContainRange(outerRanges, innerRange) {
+ for (let outerRange of outerRanges) {
+ if (rangeContainsRange(outerRange, innerRange)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ class JsonRequestError extends Error {
+ constructor(message, response) {
+ super(message);
+ this.response = response;
+ }
+ }
+ function requestJson(method, url, params) {
+ method = method.toUpperCase();
+ const fetchOptions = {
+ method,
+ };
+ if (method === 'GET') {
+ url += (url.indexOf('?') === -1 ? '?' : '&') +
+ new URLSearchParams(params);
+ }
+ else {
+ fetchOptions.body = new URLSearchParams(params);
+ fetchOptions.headers = {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ };
+ }
+ return fetch(url, fetchOptions).then((fetchRes) => {
+ if (fetchRes.ok) {
+ return fetchRes.json().then((parsedResponse) => {
+ return [parsedResponse, fetchRes];
+ }, () => {
+ throw new JsonRequestError('Failure parsing JSON', fetchRes);
+ });
+ }
+ else {
+ throw new JsonRequestError('Request failed', fetchRes);
+ }
+ });
+ }
+
+ class DelayedRunner {
+ constructor(drainedOption) {
+ this.drainedOption = drainedOption;
+ this.isRunning = false;
+ this.isDirty = false;
+ this.pauseDepths = {};
+ this.timeoutId = 0;
+ }
+ request(delay) {
+ this.isDirty = true;
+ if (!this.isPaused()) {
+ this.clearTimeout();
+ if (delay == null) {
+ this.tryDrain();
+ }
+ else {
+ this.timeoutId = setTimeout(// NOT OPTIMAL! TODO: look at debounce
+ this.tryDrain.bind(this), delay);
+ }
+ }
+ }
+ pause(scope = '') {
+ let { pauseDepths } = this;
+ pauseDepths[scope] = (pauseDepths[scope] || 0) + 1;
+ this.clearTimeout();
+ }
+ resume(scope = '', force) {
+ let { pauseDepths } = this;
+ if (scope in pauseDepths) {
+ if (force) {
+ delete pauseDepths[scope];
+ }
+ else {
+ pauseDepths[scope] -= 1;
+ let depth = pauseDepths[scope];
+ if (depth <= 0) {
+ delete pauseDepths[scope];
+ }
+ }
+ this.tryDrain();
+ }
+ }
+ isPaused() {
+ return Object.keys(this.pauseDepths).length;
+ }
+ tryDrain() {
+ if (!this.isRunning && !this.isPaused()) {
+ this.isRunning = true;
+ while (this.isDirty) {
+ this.isDirty = false;
+ this.drained(); // might set isDirty to true again
+ }
+ this.isRunning = false;
+ }
+ }
+ clear() {
+ this.clearTimeout();
+ this.isDirty = false;
+ this.pauseDepths = {};
+ }
+ clearTimeout() {
+ if (this.timeoutId) {
+ clearTimeout(this.timeoutId);
+ this.timeoutId = 0;
+ }
+ }
+ drained() {
+ if (this.drainedOption) {
+ this.drainedOption();
+ }
+ }
+ }
+
+ const VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;
+ class Scroller extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.handleEl = (el) => {
+ this.el = el;
+ setRef(this.props.elRef, el);
+ };
+ }
+ render() {
+ let { props } = this;
+ let { liquid, liquidIsAbsolute } = props;
+ let isAbsolute = liquid && liquidIsAbsolute;
+ let className = ['fc-scroller'];
+ if (liquid) {
+ if (liquidIsAbsolute) {
+ className.push('fc-scroller-liquid-absolute');
+ }
+ else {
+ className.push('fc-scroller-liquid');
+ }
+ }
+ return (h("div", { ref: this.handleEl, className: className.join(' '), style: {
+ overflowX: props.overflowX,
+ overflowY: props.overflowY,
+ left: (isAbsolute && -(props.overcomeLeft || 0)) || '',
+ right: (isAbsolute && -(props.overcomeRight || 0)) || '',
+ bottom: (isAbsolute && -(props.overcomeBottom || 0)) || '',
+ marginLeft: (!isAbsolute && -(props.overcomeLeft || 0)) || '',
+ marginRight: (!isAbsolute && -(props.overcomeRight || 0)) || '',
+ marginBottom: (!isAbsolute && -(props.overcomeBottom || 0)) || '',
+ maxHeight: props.maxHeight || '',
+ } }, props.children));
+ }
+ needsXScrolling() {
+ if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
+ return false;
+ }
+ // testing scrollWidth>clientWidth is unreliable cross-browser when pixel heights aren't integers.
+ // much more reliable to see if children are taller than the scroller, even tho doesn't account for
+ // inner-child margins and absolute positioning
+ let { el } = this;
+ let realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth();
+ let { children } = el;
+ for (let i = 0; i < children.length; i += 1) {
+ let childEl = children[i];
+ if (childEl.getBoundingClientRect().width > realClientWidth) {
+ return true;
+ }
+ }
+ return false;
+ }
+ needsYScrolling() {
+ if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
+ return false;
+ }
+ // testing scrollHeight>clientHeight is unreliable cross-browser when pixel heights aren't integers.
+ // much more reliable to see if children are taller than the scroller, even tho doesn't account for
+ // inner-child margins and absolute positioning
+ let { el } = this;
+ let realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth();
+ let { children } = el;
+ for (let i = 0; i < children.length; i += 1) {
+ let childEl = children[i];
+ if (childEl.getBoundingClientRect().height > realClientHeight) {
+ return true;
+ }
+ }
+ return false;
+ }
+ getXScrollbarWidth() {
+ if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
+ return 0;
+ }
+ return this.el.offsetHeight - this.el.clientHeight; // only works because we guarantee no borders. TODO: add to CSS with important?
+ }
+ getYScrollbarWidth() {
+ if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
+ return 0;
+ }
+ return this.el.offsetWidth - this.el.clientWidth; // only works because we guarantee no borders. TODO: add to CSS with important?
+ }
+ }
+
+ /*
+ TODO: somehow infer OtherArgs from masterCallback?
+ TODO: infer RefType from masterCallback if provided
+ */
+ class RefMap {
+ constructor(masterCallback) {
+ this.masterCallback = masterCallback;
+ this.currentMap = {};
+ this.depths = {};
+ this.callbackMap = {};
+ this.handleValue = (val, key) => {
+ let { depths, currentMap } = this;
+ let removed = false;
+ let added = false;
+ if (val !== null) {
+ // for bug... ACTUALLY: can probably do away with this now that callers don't share numeric indices anymore
+ removed = (key in currentMap);
+ currentMap[key] = val;
+ depths[key] = (depths[key] || 0) + 1;
+ added = true;
+ }
+ else {
+ depths[key] -= 1;
+ if (!depths[key]) {
+ delete currentMap[key];
+ delete this.callbackMap[key];
+ removed = true;
+ }
+ }
+ if (this.masterCallback) {
+ if (removed) {
+ this.masterCallback(null, String(key));
+ }
+ if (added) {
+ this.masterCallback(val, String(key));
+ }
+ }
+ };
+ }
+ createRef(key) {
+ let refCallback = this.callbackMap[key];
+ if (!refCallback) {
+ refCallback = this.callbackMap[key] = (val) => {
+ this.handleValue(val, String(key));
+ };
+ }
+ return refCallback;
+ }
+ // TODO: check callers that don't care about order. should use getAll instead
+ // NOTE: this method has become less valuable now that we are encouraged to map order by some other index
+ // TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and "collect"
+ collect(startIndex, endIndex, step) {
+ return collectFromHash(this.currentMap, startIndex, endIndex, step);
+ }
+ getAll() {
+ return hashValuesToArray(this.currentMap);
+ }
+ }
+
+ function computeShrinkWidth(chunkEls) {
+ let shrinkCells = findElements(chunkEls, '.fc-scrollgrid-shrink');
+ let largestWidth = 0;
+ for (let shrinkCell of shrinkCells) {
+ largestWidth = Math.max(largestWidth, computeSmallestCellWidth(shrinkCell));
+ }
+ return Math.ceil(largestWidth); // <table> elements work best with integers. round up to ensure contents fits
+ }
+ function getSectionHasLiquidHeight(props, sectionConfig) {
+ return props.liquid && sectionConfig.liquid; // does the section do liquid-height? (need to have whole scrollgrid liquid-height as well)
+ }
+ function getAllowYScrolling(props, sectionConfig) {
+ return sectionConfig.maxHeight != null || // if its possible for the height to max out, we might need scrollbars
+ getSectionHasLiquidHeight(props, sectionConfig); // if the section is liquid height, it might condense enough to require scrollbars
+ }
+ // TODO: ONLY use `arg`. force out internal function to use same API
+ function renderChunkContent(sectionConfig, chunkConfig, arg, isHeader) {
+ let { expandRows } = arg;
+ let content = typeof chunkConfig.content === 'function' ?
+ chunkConfig.content(arg) :
+ h('table', {
+ role: 'presentation',
+ className: [
+ chunkConfig.tableClassName,
+ sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : '',
+ ].join(' '),
+ style: {
+ minWidth: arg.tableMinWidth,
+ width: arg.clientWidth,
+ height: expandRows ? arg.clientHeight : '', // css `height` on a <table> serves as a min-height
+ },
+ }, arg.tableColGroupNode, h(isHeader ? 'thead' : 'tbody', {
+ role: 'presentation',
+ }, typeof chunkConfig.rowContent === 'function'
+ ? chunkConfig.rowContent(arg)
+ : chunkConfig.rowContent));
+ return content;
+ }
+ function isColPropsEqual(cols0, cols1) {
+ return isArraysEqual(cols0, cols1, isPropsEqual);
+ }
+ function renderMicroColGroup(cols, shrinkWidth) {
+ let colNodes = [];
+ /*
+ for ColProps with spans, it would have been great to make a single <col span="">
+ HOWEVER, Chrome was getting messing up distributing the width to <td>/<th> elements with colspans.
+ SOLUTION: making individual <col> elements makes Chrome behave.
+ */
+ for (let colProps of cols) {
+ let span = colProps.span || 1;
+ for (let i = 0; i < span; i += 1) {
+ colNodes.push(h("col", { style: {
+ width: colProps.width === 'shrink' ? sanitizeShrinkWidth(shrinkWidth) : (colProps.width || ''),
+ minWidth: colProps.minWidth || '',
+ } }));
+ }
+ }
+ return h('colgroup', {}, ...colNodes);
+ }
+ function sanitizeShrinkWidth(shrinkWidth) {
+ /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth
+ 4 accounts for 2 2-pixel borders. TODO: better solution? */
+ return shrinkWidth == null ? 4 : shrinkWidth;
+ }
+ function hasShrinkWidth(cols) {
+ for (let col of cols) {
+ if (col.width === 'shrink') {
+ return true;
+ }
+ }
+ return false;
+ }
+ function getScrollGridClassNames(liquid, context) {
+ let classNames = [
+ 'fc-scrollgrid',
+ context.theme.getClass('table'),
+ ];
+ if (liquid) {
+ classNames.push('fc-scrollgrid-liquid');
+ }
+ return classNames;
+ }
+ function getSectionClassNames(sectionConfig, wholeTableVGrow) {
+ let classNames = [
+ 'fc-scrollgrid-section',
+ `fc-scrollgrid-section-${sectionConfig.type}`,
+ sectionConfig.className, // used?
+ ];
+ if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {
+ classNames.push('fc-scrollgrid-section-liquid');
+ }
+ if (sectionConfig.isSticky) {
+ classNames.push('fc-scrollgrid-section-sticky');
+ }
+ return classNames;
+ }
+ function renderScrollShim(arg) {
+ return (h("div", { className: "fc-scrollgrid-sticky-shim", style: {
+ width: arg.clientWidth,
+ minWidth: arg.tableMinWidth,
+ } }));
+ }
+ function getStickyHeaderDates(options) {
+ let { stickyHeaderDates } = options;
+ if (stickyHeaderDates == null || stickyHeaderDates === 'auto') {
+ stickyHeaderDates = options.height === 'auto' || options.viewHeight === 'auto';
+ }
+ return stickyHeaderDates;
+ }
+ function getStickyFooterScrollbar(options) {
+ let { stickyFooterScrollbar } = options;
+ if (stickyFooterScrollbar == null || stickyFooterScrollbar === 'auto') {
+ stickyFooterScrollbar = options.height === 'auto' || options.viewHeight === 'auto';
+ }
+ return stickyFooterScrollbar;
+ }
+
+ class SimpleScrollGrid extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.processCols = memoize((a) => a, isColPropsEqual); // so we get same `cols` props every time
+ // yucky to memoize VNodes, but much more efficient for consumers
+ this.renderMicroColGroup = memoize(renderMicroColGroup);
+ this.scrollerRefs = new RefMap();
+ this.scrollerElRefs = new RefMap(this._handleScrollerEl.bind(this));
+ this.state = {
+ shrinkWidth: null,
+ forceYScrollbars: false,
+ scrollerClientWidths: {},
+ scrollerClientHeights: {},
+ };
+ // TODO: can do a really simple print-view. dont need to join rows
+ this.handleSizing = () => {
+ this.safeSetState(Object.assign({ shrinkWidth: this.computeShrinkWidth() }, this.computeScrollerDims()));
+ };
+ }
+ render() {
+ let { props, state, context } = this;
+ let sectionConfigs = props.sections || [];
+ let cols = this.processCols(props.cols);
+ let microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);
+ let classNames = getScrollGridClassNames(props.liquid, context);
+ if (props.collapsibleWidth) {
+ classNames.push('fc-scrollgrid-collapsible');
+ }
+ // TODO: make DRY
+ let configCnt = sectionConfigs.length;
+ let configI = 0;
+ let currentConfig;
+ let headSectionNodes = [];
+ let bodySectionNodes = [];
+ let footSectionNodes = [];
+ while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {
+ headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
+ configI += 1;
+ }
+ while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {
+ bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false));
+ configI += 1;
+ }
+ while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {
+ footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
+ configI += 1;
+ }
+ // firefox bug: when setting height on table and there is a thead or tfoot,
+ // the necessary height:100% on the liquid-height body section forces the *whole* table to be taller. (bug #5524)
+ // use getCanVGrowWithinCell as a way to detect table-stupid firefox.
+ // if so, use a simpler dom structure, jam everything into a lone tbody.
+ let isBuggy = !getCanVGrowWithinCell();
+ const roleAttrs = { role: 'rowgroup' };
+ return h('table', {
+ role: 'grid',
+ className: classNames.join(' '),
+ style: { height: props.height },
+ }, Boolean(!isBuggy && headSectionNodes.length) && h('thead', roleAttrs, ...headSectionNodes), Boolean(!isBuggy && bodySectionNodes.length) && h('tbody', roleAttrs, ...bodySectionNodes), Boolean(!isBuggy && footSectionNodes.length) && h('tfoot', roleAttrs, ...footSectionNodes), isBuggy && h('tbody', roleAttrs, ...headSectionNodes, ...bodySectionNodes, ...footSectionNodes));
+ }
+ renderSection(sectionConfig, microColGroupNode, isHeader) {
+ if ('outerContent' in sectionConfig) {
+ return (h(p, { key: sectionConfig.key }, sectionConfig.outerContent));
+ }
+ return (h("tr", { key: sectionConfig.key, role: "presentation", className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader)));
+ }
+ renderChunkTd(sectionConfig, microColGroupNode, chunkConfig, isHeader) {
+ if ('outerContent' in chunkConfig) {
+ return chunkConfig.outerContent;
+ }
+ let { props } = this;
+ let { forceYScrollbars, scrollerClientWidths, scrollerClientHeights } = this.state;
+ let needsYScrolling = getAllowYScrolling(props, sectionConfig); // TODO: do lazily. do in section config?
+ let isLiquid = getSectionHasLiquidHeight(props, sectionConfig);
+ // for `!props.liquid` - is WHOLE scrollgrid natural height?
+ // TODO: do same thing in advanced scrollgrid? prolly not b/c always has horizontal scrollbars
+ let overflowY = !props.liquid ? 'visible' :
+ forceYScrollbars ? 'scroll' :
+ !needsYScrolling ? 'hidden' :
+ 'auto';
+ let sectionKey = sectionConfig.key;
+ let content = renderChunkContent(sectionConfig, chunkConfig, {
+ tableColGroupNode: microColGroupNode,
+ tableMinWidth: '',
+ clientWidth: (!props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined) ? scrollerClientWidths[sectionKey] : null,
+ clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,
+ expandRows: sectionConfig.expandRows,
+ syncRowHeights: false,
+ rowSyncHeights: [],
+ reportRowHeightChange: () => { },
+ }, isHeader);
+ return h(isHeader ? 'th' : 'td', {
+ ref: chunkConfig.elRef,
+ role: 'presentation',
+ }, h("div", { className: `fc-scroller-harness${isLiquid ? ' fc-scroller-harness-liquid' : ''}` },
+ h(Scroller, { ref: this.scrollerRefs.createRef(sectionKey), elRef: this.scrollerElRefs.createRef(sectionKey), overflowY: overflowY, overflowX: !props.liquid ? 'visible' : 'hidden' /* natural height? */, maxHeight: sectionConfig.maxHeight, liquid: isLiquid, liquidIsAbsolute // because its within a harness
+ : true }, content)));
+ }
+ _handleScrollerEl(scrollerEl, key) {
+ let section = getSectionByKey(this.props.sections, key);
+ if (section) {
+ setRef(section.chunk.scrollerElRef, scrollerEl);
+ }
+ }
+ componentDidMount() {
+ this.handleSizing();
+ this.context.addResizeHandler(this.handleSizing);
+ }
+ componentDidUpdate() {
+ // TODO: need better solution when state contains non-sizing things
+ this.handleSizing();
+ }
+ componentWillUnmount() {
+ this.context.removeResizeHandler(this.handleSizing);
+ }
+ computeShrinkWidth() {
+ return hasShrinkWidth(this.props.cols)
+ ? computeShrinkWidth(this.scrollerElRefs.getAll())
+ : 0;
+ }
+ computeScrollerDims() {
+ let scrollbarWidth = getScrollbarWidths();
+ let { scrollerRefs, scrollerElRefs } = this;
+ let forceYScrollbars = false;
+ let scrollerClientWidths = {};
+ let scrollerClientHeights = {};
+ for (let sectionKey in scrollerRefs.currentMap) {
+ let scroller = scrollerRefs.currentMap[sectionKey];
+ if (scroller && scroller.needsYScrolling()) {
+ forceYScrollbars = true;
+ break;
+ }
+ }
+ for (let section of this.props.sections) {
+ let sectionKey = section.key;
+ let scrollerEl = scrollerElRefs.currentMap[sectionKey];
+ if (scrollerEl) {
+ let harnessEl = scrollerEl.parentNode; // TODO: weird way to get this. need harness b/c doesn't include table borders
+ scrollerClientWidths[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars
+ ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future
+ : 0));
+ scrollerClientHeights[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().height);
+ }
+ }
+ return { forceYScrollbars, scrollerClientWidths, scrollerClientHeights };
+ }
+ }
+ SimpleScrollGrid.addStateEquality({
+ scrollerClientWidths: isPropsEqual,
+ scrollerClientHeights: isPropsEqual,
+ });
+ function getSectionByKey(sections, key) {
+ for (let section of sections) {
+ if (section.key === key) {
+ return section;
+ }
+ }
+ return null;
+ }
+
+ class EventContainer extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.handleEl = (el) => {
+ this.el = el;
+ if (el) {
+ setElSeg(el, this.props.seg);
+ }
+ };
+ }
+ render() {
+ const { props, context } = this;
+ const { options } = context;
+ const { seg } = props;
+ const { eventRange } = seg;
+ const { ui } = eventRange;
+ const renderProps = {
+ event: new EventImpl(context, eventRange.def, eventRange.instance),
+ view: context.viewApi,
+ timeText: props.timeText,
+ textColor: ui.textColor,
+ backgroundColor: ui.backgroundColor,
+ borderColor: ui.borderColor,
+ isDraggable: !props.disableDragging && computeSegDraggable(seg, context),
+ isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),
+ isEndResizable: !props.disableResizing && computeSegEndResizable(seg),
+ isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),
+ isStart: Boolean(seg.isStart),
+ isEnd: Boolean(seg.isEnd),
+ isPast: Boolean(props.isPast),
+ isFuture: Boolean(props.isFuture),
+ isToday: Boolean(props.isToday),
+ isSelected: Boolean(props.isSelected),
+ isDragging: Boolean(props.isDragging),
+ isResizing: Boolean(props.isResizing),
+ };
+ return (h(ContentContainer, Object.assign({}, props /* contains children */, { elRef: this.handleEl, elClasses: [
+ ...getEventClassNames(renderProps),
+ ...seg.eventRange.ui.classNames,
+ ...(props.elClasses || []),
+ ], renderProps: renderProps, generatorName: "eventContent", generator: options.eventContent || props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount })));
+ }
+ componentDidUpdate(prevProps) {
+ if (this.el && this.props.seg !== prevProps.seg) {
+ setElSeg(this.el, this.props.seg);
+ }
+ }
+ }
+
+ // should not be a purecomponent
+ class StandardEvent extends BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let { seg } = props;
+ let { ui } = seg.eventRange;
+ let timeFormat = options.eventTimeFormat || props.defaultTimeFormat;
+ let timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
+ return (h(EventContainer, Object.assign({}, props /* includes elRef */, { elTag: "a", elStyle: {
+ borderColor: ui.borderColor,
+ backgroundColor: ui.backgroundColor,
+ }, elAttrs: getSegAnchorAttrs(seg, context), defaultGenerator: renderInnerContent$1$1, timeText: timeText }), (InnerContent, eventContentArg) => (h(p, null,
+ h(InnerContent, { elTag: "div", elClasses: ['fc-event-main'], elStyle: { color: eventContentArg.textColor } }),
+ Boolean(eventContentArg.isStartResizable) && (h("div", { className: "fc-event-resizer fc-event-resizer-start" })),
+ Boolean(eventContentArg.isEndResizable) && (h("div", { className: "fc-event-resizer fc-event-resizer-end" }))))));
+ }
+ }
+ function renderInnerContent$1$1(innerProps) {
+ return (h("div", { className: "fc-event-main-frame" },
+ innerProps.timeText && (h("div", { className: "fc-event-time" }, innerProps.timeText)),
+ h("div", { className: "fc-event-title-container" },
+ h("div", { className: "fc-event-title fc-sticky" }, innerProps.event.title || h(p, null, "\u00A0")))));
+ }
+
+ const NowIndicatorContainer = (props) => (h(ViewContextType.Consumer, null, (context) => {
+ let { options } = context;
+ let renderProps = {
+ isAxis: props.isAxis,
+ date: context.dateEnv.toDate(props.date),
+ view: context.viewApi,
+ };
+ return (h(ContentContainer, Object.assign({}, props /* includes children */, { elTag: props.elTag || 'div', renderProps: renderProps, generatorName: "nowIndicatorContent", generator: options.nowIndicatorContent, classNameGenerator: options.nowIndicatorClassNames, didMount: options.nowIndicatorDidMount, willUnmount: options.nowIndicatorWillUnmount })));
+ }));
+
+ const DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });
+ class DayCellContainer extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.refineRenderProps = memoizeObjArg(refineRenderProps);
+ }
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let renderProps = this.refineRenderProps({
+ date: props.date,
+ dateProfile: props.dateProfile,
+ todayRange: props.todayRange,
+ showDayNumber: props.showDayNumber,
+ extraRenderProps: props.extraRenderProps,
+ viewApi: context.viewApi,
+ dateEnv: context.dateEnv,
+ });
+ return (h(ContentContainer, Object.assign({}, props /* includes children */, { elClasses: [
+ ...getDayClassNames(renderProps, context.theme),
+ ...(props.elClasses || []),
+ ], elAttrs: Object.assign(Object.assign({}, props.elAttrs), (renderProps.isDisabled ? {} : { 'data-date': formatDayString(props.date) })), renderProps: renderProps, generatorName: "dayCellContent", generator: options.dayCellContent || props.defaultGenerator, classNameGenerator:
+ // don't use custom classNames if disabled
+ renderProps.isDisabled ? undefined : options.dayCellClassNames, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount })));
+ }
+ }
+ function hasCustomDayCellContent(options) {
+ return Boolean(options.dayCellContent || hasCustomRenderingHandler('dayCellContent', options));
+ }
+ function refineRenderProps(raw) {
+ let { date, dateEnv } = raw;
+ let dayMeta = getDateMeta(date, raw.todayRange, null, raw.dateProfile);
+ return Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), { dayNumberText: raw.showDayNumber ? dateEnv.format(date, DAY_NUM_FORMAT) : '' }), raw.extraRenderProps);
+ }
+
+ class BgEvent extends BaseComponent {
+ render() {
+ let { props } = this;
+ let { seg } = props;
+ return (h(EventContainer, { elTag: "div", elClasses: ['fc-bg-event'], elStyle: { backgroundColor: seg.eventRange.ui.backgroundColor }, defaultGenerator: renderInnerContent$3, seg: seg, timeText: "", isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday, disableDragging: true, disableResizing: true }));
+ }
+ }
+ function renderInnerContent$3(props) {
+ let { title } = props.event;
+ return title && (h("div", { className: "fc-event-title" }, props.event.title));
+ }
+ function renderFill(fillType) {
+ return (h("div", { className: `fc-${fillType}` }));
+ }
+
+ const WeekNumberContainer = (props) => (h(ViewContextType.Consumer, null, (context) => {
+ let { dateEnv, options } = context;
+ let { date } = props;
+ let format = options.weekNumberFormat || props.defaultFormat;
+ let num = dateEnv.computeWeekNumber(date); // TODO: somehow use for formatting as well?
+ let text = dateEnv.format(date, format);
+ let renderProps = { num, text, date };
+ return (h(ContentContainer // why isn't WeekNumberContentArg being auto-detected?
+ , Object.assign({}, props /* includes children */, { renderProps: renderProps, generatorName: "weekNumberContent", generator: options.weekNumberContent || renderInner, classNameGenerator: options.weekNumberClassNames, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount })));
+ }));
+ function renderInner(innerProps) {
+ return innerProps.text;
+ }
+
+ const PADDING_FROM_VIEWPORT = 10;
+ class Popover extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ titleId: getUniqueDomId(),
+ };
+ this.handleRootEl = (el) => {
+ this.rootEl = el;
+ if (this.props.elRef) {
+ setRef(this.props.elRef, el);
+ }
+ };
+ // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
+ this.handleDocumentMouseDown = (ev) => {
+ // only hide the popover if the click happened outside the popover
+ const target = getEventTargetViaRoot(ev);
+ if (!this.rootEl.contains(target)) {
+ this.handleCloseClick();
+ }
+ };
+ this.handleDocumentKeyDown = (ev) => {
+ if (ev.key === 'Escape') {
+ this.handleCloseClick();
+ }
+ };
+ this.handleCloseClick = () => {
+ let { onClose } = this.props;
+ if (onClose) {
+ onClose();
+ }
+ };
+ }
+ render() {
+ let { theme, options } = this.context;
+ let { props, state } = this;
+ let classNames = [
+ 'fc-popover',
+ theme.getClass('popover'),
+ ].concat(props.extraClassNames || []);
+ return j(h("div", Object.assign({}, props.extraAttrs, { id: props.id, className: classNames.join(' '), "aria-labelledby": state.titleId, ref: this.handleRootEl }),
+ h("div", { className: 'fc-popover-header ' + theme.getClass('popoverHeader') },
+ h("span", { className: "fc-popover-title", id: state.titleId }, props.title),
+ h("span", { className: 'fc-popover-close ' + theme.getIconClass('close'), title: options.closeHint, onClick: this.handleCloseClick })),
+ h("div", { className: 'fc-popover-body ' + theme.getClass('popoverContent') }, props.children)), props.parentEl);
+ }
+ componentDidMount() {
+ document.addEventListener('mousedown', this.handleDocumentMouseDown);
+ document.addEventListener('keydown', this.handleDocumentKeyDown);
+ this.updateSize();
+ }
+ componentWillUnmount() {
+ document.removeEventListener('mousedown', this.handleDocumentMouseDown);
+ document.removeEventListener('keydown', this.handleDocumentKeyDown);
+ }
+ updateSize() {
+ let { isRtl } = this.context;
+ let { alignmentEl, alignGridTop } = this.props;
+ let { rootEl } = this;
+ let alignmentRect = computeClippedClientRect(alignmentEl);
+ if (alignmentRect) {
+ let popoverDims = rootEl.getBoundingClientRect();
+ // position relative to viewport
+ let popoverTop = alignGridTop
+ ? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top
+ : alignmentRect.top;
+ let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
+ // constrain
+ popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);
+ popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);
+ popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);
+ let origin = rootEl.offsetParent.getBoundingClientRect();
+ applyStyle(rootEl, {
+ top: popoverTop - origin.top,
+ left: popoverLeft - origin.left,
+ });
+ }
+ }
+ }
+
+ class MorePopover extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.handleRootEl = (rootEl) => {
+ this.rootEl = rootEl;
+ if (rootEl) {
+ this.context.registerInteractiveComponent(this, {
+ el: rootEl,
+ useEventCenter: false,
+ });
+ }
+ else {
+ this.context.unregisterInteractiveComponent(this);
+ }
+ };
+ }
+ render() {
+ let { options, dateEnv } = this.context;
+ let { props } = this;
+ let { startDate, todayRange, dateProfile } = props;
+ let title = dateEnv.format(startDate, options.dayPopoverFormat);
+ return (h(DayCellContainer, { elRef: this.handleRootEl, date: startDate, dateProfile: dateProfile, todayRange: todayRange }, (InnerContent, renderProps, elAttrs) => (h(Popover, { elRef: elAttrs.ref, id: props.id, title: title, extraClassNames: ['fc-more-popover'].concat(elAttrs.className || []), extraAttrs: elAttrs /* TODO: make these time-based when not whole-day? */, parentEl: props.parentEl, alignmentEl: props.alignmentEl, alignGridTop: props.alignGridTop, onClose: props.onClose },
+ hasCustomDayCellContent(options) && (h(InnerContent, { elTag: "div", elClasses: ['fc-more-popover-misc'] })),
+ props.children))));
+ }
+ queryHit(positionLeft, positionTop, elWidth, elHeight) {
+ let { rootEl, props } = this;
+ if (positionLeft >= 0 && positionLeft < elWidth &&
+ positionTop >= 0 && positionTop < elHeight) {
+ return {
+ dateProfile: props.dateProfile,
+ dateSpan: Object.assign({ allDay: true, range: {
+ start: props.startDate,
+ end: props.endDate,
+ } }, props.extraDateSpan),
+ dayEl: rootEl,
+ rect: {
+ left: 0,
+ top: 0,
+ right: elWidth,
+ bottom: elHeight,
+ },
+ layer: 1, // important when comparing with hits from other components
+ };
+ }
+ return null;
+ }
+ }
+
+ class MoreLinkContainer extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ isPopoverOpen: false,
+ popoverId: getUniqueDomId(),
+ };
+ this.handleLinkEl = (linkEl) => {
+ this.linkEl = linkEl;
+ if (this.props.elRef) {
+ setRef(this.props.elRef, linkEl);
+ }
+ };
+ this.handleClick = (ev) => {
+ let { props, context } = this;
+ let { moreLinkClick } = context.options;
+ let date = computeRange(props).start;
+ function buildPublicSeg(seg) {
+ let { def, instance, range } = seg.eventRange;
+ return {
+ event: new EventImpl(context, def, instance),
+ start: context.dateEnv.toDate(range.start),
+ end: context.dateEnv.toDate(range.end),
+ isStart: seg.isStart,
+ isEnd: seg.isEnd,
+ };
+ }
+ if (typeof moreLinkClick === 'function') {
+ moreLinkClick = moreLinkClick({
+ date,
+ allDay: Boolean(props.allDayDate),
+ allSegs: props.allSegs.map(buildPublicSeg),
+ hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
+ jsEvent: ev,
+ view: context.viewApi,
+ });
+ }
+ if (!moreLinkClick || moreLinkClick === 'popover') {
+ this.setState({ isPopoverOpen: true });
+ }
+ else if (typeof moreLinkClick === 'string') { // a view name
+ context.calendarApi.zoomTo(date, moreLinkClick);
+ }
+ };
+ this.handlePopoverClose = () => {
+ this.setState({ isPopoverOpen: false });
+ };
+ }
+ render() {
+ let { props, state } = this;
+ return (h(ViewContextType.Consumer, null, (context) => {
+ let { viewApi, options, calendarApi } = context;
+ let { moreLinkText } = options;
+ let { moreCnt } = props;
+ let range = computeRange(props);
+ let text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals
+ ? moreLinkText.call(calendarApi, moreCnt)
+ : `+${moreCnt} ${moreLinkText}`;
+ let hint = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);
+ let renderProps = {
+ num: moreCnt,
+ shortText: `+${moreCnt}`,
+ text,
+ view: viewApi,
+ };
+ return (h(p, null,
+ Boolean(props.moreCnt) && (h(ContentContainer, { elTag: props.elTag || 'a', elRef: this.handleLinkEl, elClasses: [
+ ...(props.elClasses || []),
+ 'fc-more-link',
+ ], elStyle: props.elStyle, elAttrs: Object.assign(Object.assign(Object.assign({}, props.elAttrs), createAriaClickAttrs(this.handleClick)), { title: hint, 'aria-expanded': state.isPopoverOpen, 'aria-controls': state.isPopoverOpen ? state.popoverId : '' }), renderProps: renderProps, generatorName: "moreLinkContent", generator: options.moreLinkContent || props.defaultGenerator || renderMoreLinkInner$1, classNameGenerator: options.moreLinkClassNames, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, props.children)),
+ state.isPopoverOpen && (h(MorePopover, { id: state.popoverId, startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: props.extraDateSpan, parentEl: this.parentEl, alignmentEl: props.alignmentElRef ?
+ props.alignmentElRef.current :
+ this.linkEl, alignGridTop: props.alignGridTop, onClose: this.handlePopoverClose }, props.popoverContent()))));
+ }));
+ }
+ componentDidMount() {
+ this.updateParentEl();
+ }
+ componentDidUpdate() {
+ this.updateParentEl();
+ }
+ updateParentEl() {
+ if (this.linkEl) {
+ this.parentEl = elementClosest(this.linkEl, '.fc-view-harness');
+ }
+ }
+ }
+ function renderMoreLinkInner$1(props) {
+ return props.text;
+ }
+ function computeRange(props) {
+ if (props.allDayDate) {
+ return {
+ start: props.allDayDate,
+ end: addDays(props.allDayDate, 1),
+ };
+ }
+ let { hiddenSegs } = props;
+ return {
+ start: computeEarliestSegStart(hiddenSegs),
+ end: computeLatestSegEnd(hiddenSegs),
+ };
+ }
+ function computeEarliestSegStart(segs) {
+ return segs.reduce(pickEarliestStart).eventRange.range.start;
+ }
+ function pickEarliestStart(seg0, seg1) {
+ return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;
+ }
+ function computeLatestSegEnd(segs) {
+ return segs.reduce(pickLatestEnd).eventRange.range.end;
+ }
+ function pickLatestEnd(seg0, seg1) {
+ return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;
+ }
+
+ class ViewContainer$1 extends BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let renderProps = { view: context.viewApi };
+ return (h(ContentContainer, Object.assign({}, props, { elTag: props.elTag || 'div', elClasses: [
+ ...buildViewClassNames(props.viewSpec),
+ ...(props.elClasses || []),
+ ], renderProps: renderProps, classNameGenerator: options.viewClassNames, generatorName: undefined, generator: undefined, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount }), () => props.children));
+ }
+ }
+ function buildViewClassNames(viewSpec) {
+ return [
+ `fc-${viewSpec.type}-view`,
+ 'fc-view',
+ ];
+ }
+
+ function injectStyles(css) {
+ if (!css || typeof document === 'undefined') {
+ return;
+ }
+ const head = document.head || document.getElementsByTagName('head')[0];
+ const style = document.createElement('style');
+ style.type = 'text/css';
+ head.appendChild(style);
+ if (style.styleSheet) {
+ style.styleSheet.cssText = css;
+ }
+ else {
+ style.appendChild(document.createTextNode(css));
+ }
+ }
+
+ const EVENT_SOURCE_REFINERS = {
+ id: String,
+ defaultAllDay: Boolean,
+ url: String,
+ format: String,
+ events: identity,
+ eventDataTransform: identity,
+ // for any network-related sources
+ success: identity,
+ failure: identity,
+ };
+ function parseEventSource(raw, context, refiners = buildEventSourceRefiners(context)) {
+ let rawObj;
+ if (typeof raw === 'string') {
+ rawObj = { url: raw };
+ }
+ else if (typeof raw === 'function' || Array.isArray(raw)) {
+ rawObj = { events: raw };
+ }
+ else if (typeof raw === 'object' && raw) { // not null
+ rawObj = raw;
+ }
+ if (rawObj) {
+ let { refined, extra } = refineProps(rawObj, refiners);
+ let metaRes = buildEventSourceMeta(refined, context);
+ if (metaRes) {
+ return {
+ _raw: raw,
+ isFetching: false,
+ latestFetchId: '',
+ fetchRange: null,
+ defaultAllDay: refined.defaultAllDay,
+ eventDataTransform: refined.eventDataTransform,
+ success: refined.success,
+ failure: refined.failure,
+ publicId: refined.id || '',
+ sourceId: guid(),
+ sourceDefId: metaRes.sourceDefId,
+ meta: metaRes.meta,
+ ui: createEventUi(refined, context),
+ extendedProps: extra,
+ };
+ }
+ }
+ return null;
+ }
+ function buildEventSourceRefiners(context) {
+ return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_SOURCE_REFINERS), context.pluginHooks.eventSourceRefiners);
+ }
+ function buildEventSourceMeta(raw, context) {
+ let defs = context.pluginHooks.eventSourceDefs;
+ for (let i = defs.length - 1; i >= 0; i -= 1) { // later-added plugins take precedence
+ let def = defs[i];
+ let meta = def.parseMeta(raw);
+ if (meta) {
+ return { sourceDefId: i, meta };
+ }
+ }
+ return null;
+ }
+
+ class CalendarImpl {
+ getCurrentData() {
+ return this.currentDataManager.getCurrentData();
+ }
+ dispatch(action) {
+ this.currentDataManager.dispatch(action);
+ }
+ get view() { return this.getCurrentData().viewApi; }
+ batchRendering(callback) {
+ callback();
+ }
+ updateSize() {
+ this.trigger('_resize', true);
+ }
+ // Options
+ // -----------------------------------------------------------------------------------------------------------------
+ setOption(name, val) {
+ this.dispatch({
+ type: 'SET_OPTION',
+ optionName: name,
+ rawOptionValue: val,
+ });
+ }
+ getOption(name) {
+ return this.currentDataManager.currentCalendarOptionsInput[name];
+ }
+ getAvailableLocaleCodes() {
+ return Object.keys(this.getCurrentData().availableRawLocales);
+ }
+ // Trigger
+ // -----------------------------------------------------------------------------------------------------------------
+ on(handlerName, handler) {
+ let { currentDataManager } = this;
+ if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {
+ currentDataManager.emitter.on(handlerName, handler);
+ }
+ else {
+ console.warn(`Unknown listener name '${handlerName}'`);
+ }
+ }
+ off(handlerName, handler) {
+ this.currentDataManager.emitter.off(handlerName, handler);
+ }
+ // not meant for public use
+ trigger(handlerName, ...args) {
+ this.currentDataManager.emitter.trigger(handlerName, ...args);
+ }
+ // View
+ // -----------------------------------------------------------------------------------------------------------------
+ changeView(viewType, dateOrRange) {
+ this.batchRendering(() => {
+ this.unselect();
+ if (dateOrRange) {
+ if (dateOrRange.start && dateOrRange.end) { // a range
+ this.dispatch({
+ type: 'CHANGE_VIEW_TYPE',
+ viewType,
+ });
+ this.dispatch({
+ type: 'SET_OPTION',
+ optionName: 'visibleRange',
+ rawOptionValue: dateOrRange,
+ });
+ }
+ else {
+ let { dateEnv } = this.getCurrentData();
+ this.dispatch({
+ type: 'CHANGE_VIEW_TYPE',
+ viewType,
+ dateMarker: dateEnv.createMarker(dateOrRange),
+ });
+ }
+ }
+ else {
+ this.dispatch({
+ type: 'CHANGE_VIEW_TYPE',
+ viewType,
+ });
+ }
+ });
+ }
+ // Forces navigation to a view for the given date.
+ // `viewType` can be a specific view name or a generic one like "week" or "day".
+ // needs to change
+ zoomTo(dateMarker, viewType) {
+ let state = this.getCurrentData();
+ let spec;
+ viewType = viewType || 'day'; // day is default zoom
+ spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType);
+ this.unselect();
+ if (spec) {
+ this.dispatch({
+ type: 'CHANGE_VIEW_TYPE',
+ viewType: spec.type,
+ dateMarker,
+ });
+ }
+ else {
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker,
+ });
+ }
+ }
+ // Given a duration singular unit, like "week" or "day", finds a matching view spec.
+ // Preference is given to views that have corresponding buttons.
+ getUnitViewSpec(unit) {
+ let { viewSpecs, toolbarConfig } = this.getCurrentData();
+ let viewTypes = [].concat(toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [], toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : []);
+ let i;
+ let spec;
+ for (let viewType in viewSpecs) {
+ viewTypes.push(viewType);
+ }
+ for (i = 0; i < viewTypes.length; i += 1) {
+ spec = viewSpecs[viewTypes[i]];
+ if (spec) {
+ if (spec.singleUnit === unit) {
+ return spec;
+ }
+ }
+ }
+ return null;
+ }
+ // Current Date
+ // -----------------------------------------------------------------------------------------------------------------
+ prev() {
+ this.unselect();
+ this.dispatch({ type: 'PREV' });
+ }
+ next() {
+ this.unselect();
+ this.dispatch({ type: 'NEXT' });
+ }
+ prevYear() {
+ let state = this.getCurrentData();
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: state.dateEnv.addYears(state.currentDate, -1),
+ });
+ }
+ nextYear() {
+ let state = this.getCurrentData();
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: state.dateEnv.addYears(state.currentDate, 1),
+ });
+ }
+ today() {
+ let state = this.getCurrentData();
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: getNow(state.calendarOptions.now, state.dateEnv),
+ });
+ }
+ gotoDate(zonedDateInput) {
+ let state = this.getCurrentData();
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: state.dateEnv.createMarker(zonedDateInput),
+ });
+ }
+ incrementDate(deltaInput) {
+ let state = this.getCurrentData();
+ let delta = createDuration(deltaInput);
+ if (delta) { // else, warn about invalid input?
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: state.dateEnv.add(state.currentDate, delta),
+ });
+ }
+ }
+ getDate() {
+ let state = this.getCurrentData();
+ return state.dateEnv.toDate(state.currentDate);
+ }
+ // Date Formatting Utils
+ // -----------------------------------------------------------------------------------------------------------------
+ formatDate(d, formatter) {
+ let { dateEnv } = this.getCurrentData();
+ return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));
+ }
+ // `settings` is for formatter AND isEndExclusive
+ formatRange(d0, d1, settings) {
+ let { dateEnv } = this.getCurrentData();
+ return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings), settings);
+ }
+ formatIso(d, omitTime) {
+ let { dateEnv } = this.getCurrentData();
+ return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime });
+ }
+ // Date Selection / Event Selection / DayClick
+ // -----------------------------------------------------------------------------------------------------------------
+ select(dateOrObj, endDate) {
+ let selectionInput;
+ if (endDate == null) {
+ if (dateOrObj.start != null) {
+ selectionInput = dateOrObj;
+ }
+ else {
+ selectionInput = {
+ start: dateOrObj,
+ end: null,
+ };
+ }
+ }
+ else {
+ selectionInput = {
+ start: dateOrObj,
+ end: endDate,
+ };
+ }
+ let state = this.getCurrentData();
+ let selection = parseDateSpan(selectionInput, state.dateEnv, createDuration({ days: 1 }));
+ if (selection) { // throw parse error otherwise?
+ this.dispatch({ type: 'SELECT_DATES', selection });
+ triggerDateSelect(selection, null, state);
+ }
+ }
+ unselect(pev) {
+ let state = this.getCurrentData();
+ if (state.dateSelection) {
+ this.dispatch({ type: 'UNSELECT_DATES' });
+ triggerDateUnselect(pev, state);
+ }
+ }
+ // Public Events API
+ // -----------------------------------------------------------------------------------------------------------------
+ addEvent(eventInput, sourceInput) {
+ if (eventInput instanceof EventImpl) {
+ let def = eventInput._def;
+ let instance = eventInput._instance;
+ let currentData = this.getCurrentData();
+ // not already present? don't want to add an old snapshot
+ if (!currentData.eventStore.defs[def.defId]) {
+ this.dispatch({
+ type: 'ADD_EVENTS',
+ eventStore: eventTupleToStore({ def, instance }), // TODO: better util for two args?
+ });
+ this.triggerEventAdd(eventInput);
+ }
+ return eventInput;
+ }
+ let state = this.getCurrentData();
+ let eventSource;
+ if (sourceInput instanceof EventSourceImpl) {
+ eventSource = sourceInput.internalEventSource;
+ }
+ else if (typeof sourceInput === 'boolean') {
+ if (sourceInput) { // true. part of the first event source
+ [eventSource] = hashValuesToArray(state.eventSources);
+ }
+ }
+ else if (sourceInput != null) { // an ID. accepts a number too
+ let sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function
+ if (!sourceApi) {
+ console.warn(`Could not find an event source with ID "${sourceInput}"`); // TODO: test
+ return null;
+ }
+ eventSource = sourceApi.internalEventSource;
+ }
+ let tuple = parseEvent(eventInput, eventSource, state, false);
+ if (tuple) {
+ let newEventApi = new EventImpl(state, tuple.def, tuple.def.recurringDef ? null : tuple.instance);
+ this.dispatch({
+ type: 'ADD_EVENTS',
+ eventStore: eventTupleToStore(tuple),
+ });
+ this.triggerEventAdd(newEventApi);
+ return newEventApi;
+ }
+ return null;
+ }
+ triggerEventAdd(eventApi) {
+ let { emitter } = this.getCurrentData();
+ emitter.trigger('eventAdd', {
+ event: eventApi,
+ relatedEvents: [],
+ revert: () => {
+ this.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: eventApiToStore(eventApi),
+ });
+ },
+ });
+ }
+ // TODO: optimize
+ getEventById(id) {
+ let state = this.getCurrentData();
+ let { defs, instances } = state.eventStore;
+ id = String(id);
+ for (let defId in defs) {
+ let def = defs[defId];
+ if (def.publicId === id) {
+ if (def.recurringDef) {
+ return new EventImpl(state, def, null);
+ }
+ for (let instanceId in instances) {
+ let instance = instances[instanceId];
+ if (instance.defId === def.defId) {
+ return new EventImpl(state, def, instance);
+ }
+ }
+ }
+ }
+ return null;
+ }
+ getEvents() {
+ let currentData = this.getCurrentData();
+ return buildEventApis(currentData.eventStore, currentData);
+ }
+ removeAllEvents() {
+ this.dispatch({ type: 'REMOVE_ALL_EVENTS' });
+ }
+ // Public Event Sources API
+ // -----------------------------------------------------------------------------------------------------------------
+ getEventSources() {
+ let state = this.getCurrentData();
+ let sourceHash = state.eventSources;
+ let sourceApis = [];
+ for (let internalId in sourceHash) {
+ sourceApis.push(new EventSourceImpl(state, sourceHash[internalId]));
+ }
+ return sourceApis;
+ }
+ getEventSourceById(id) {
+ let state = this.getCurrentData();
+ let sourceHash = state.eventSources;
+ id = String(id);
+ for (let sourceId in sourceHash) {
+ if (sourceHash[sourceId].publicId === id) {
+ return new EventSourceImpl(state, sourceHash[sourceId]);
+ }
+ }
+ return null;
+ }
+ addEventSource(sourceInput) {
+ let state = this.getCurrentData();
+ if (sourceInput instanceof EventSourceImpl) {
+ // not already present? don't want to add an old snapshot
+ if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {
+ this.dispatch({
+ type: 'ADD_EVENT_SOURCES',
+ sources: [sourceInput.internalEventSource],
+ });
+ }
+ return sourceInput;
+ }
+ let eventSource = parseEventSource(sourceInput, state);
+ if (eventSource) { // TODO: error otherwise?
+ this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] });
+ return new EventSourceImpl(state, eventSource);
+ }
+ return null;
+ }
+ removeAllEventSources() {
+ this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });
+ }
+ refetchEvents() {
+ this.dispatch({ type: 'FETCH_EVENT_SOURCES', isRefetch: true });
+ }
+ // Scroll
+ // -----------------------------------------------------------------------------------------------------------------
+ scrollToTime(timeInput) {
+ let time = createDuration(timeInput);
+ if (time) {
+ this.trigger('_scrollRequest', { time });
+ }
+ }
+ }
+
+ class Store {
+ constructor() {
+ this.handlers = [];
+ }
+ set(value) {
+ this.currentValue = value;
+ for (let handler of this.handlers) {
+ handler(value);
+ }
+ }
+ subscribe(handler) {
+ this.handlers.push(handler);
+ if (this.currentValue !== undefined) {
+ handler(this.currentValue);
+ }
+ }
+ }
+
+ /*
+ Subscribers will get a LIST of CustomRenderings
+ */
+ class CustomRenderingStore extends Store {
+ constructor() {
+ super(...arguments);
+ this.map = new Map();
+ }
+ // for consistent order
+ handle(customRendering) {
+ const { map } = this;
+ let updated = false;
+ if (customRendering.isActive) {
+ map.set(customRendering.id, customRendering);
+ updated = true;
+ }
+ else if (map.has(customRendering.id)) {
+ map.delete(customRendering.id);
+ updated = true;
+ }
+ if (updated) {
+ this.set(map);
+ }
+ }
+ }
+
+ var internal_esm = {
+ __proto__: null,
+ BASE_OPTION_DEFAULTS: BASE_OPTION_DEFAULTS,
+ BaseComponent: BaseComponent,
+ BgEvent: BgEvent,
+ CalendarImpl: CalendarImpl,
+ CalendarRoot: CalendarRoot,
+ ContentContainer: ContentContainer,
+ CustomRenderingStore: CustomRenderingStore,
+ DateComponent: DateComponent,
+ DateEnv: DateEnv,
+ DateProfileGenerator: DateProfileGenerator,
+ DayCellContainer: DayCellContainer,
+ DayHeader: DayHeader,
+ DaySeriesModel: DaySeriesModel,
+ DayTableModel: DayTableModel,
+ DelayedRunner: DelayedRunner,
+ ElementDragging: ElementDragging,
+ ElementScrollController: ElementScrollController,
+ Emitter: Emitter,
+ EventContainer: EventContainer,
+ EventImpl: EventImpl,
+ Interaction: Interaction,
+ MoreLinkContainer: MoreLinkContainer,
+ NamedTimeZoneImpl: NamedTimeZoneImpl,
+ NowIndicatorContainer: NowIndicatorContainer,
+ NowTimer: NowTimer,
+ PositionCache: PositionCache,
+ RefMap: RefMap,
+ ScrollController: ScrollController,
+ ScrollResponder: ScrollResponder,
+ Scroller: Scroller,
+ SegHierarchy: SegHierarchy,
+ SimpleScrollGrid: SimpleScrollGrid,
+ Slicer: Slicer,
+ Splitter: Splitter,
+ StandardEvent: StandardEvent,
+ TableDateCell: TableDateCell,
+ TableDowCell: TableDowCell,
+ Theme: Theme,
+ ViewContainer: ViewContainer$1,
+ ViewContextType: ViewContextType,
+ WeekNumberContainer: WeekNumberContainer,
+ WindowScrollController: WindowScrollController,
+ addDays: addDays,
+ addDurations: addDurations,
+ addMs: addMs,
+ addWeeks: addWeeks,
+ allowContextMenu: allowContextMenu,
+ allowSelection: allowSelection,
+ applyMutationToEventStore: applyMutationToEventStore,
+ applyStyle: applyStyle,
+ asCleanDays: asCleanDays,
+ asRoughMinutes: asRoughMinutes,
+ asRoughMs: asRoughMs,
+ asRoughSeconds: asRoughSeconds,
+ binarySearch: binarySearch,
+ buildElAttrs: buildElAttrs,
+ buildEntryKey: buildEntryKey,
+ buildEventApis: buildEventApis,
+ buildEventRangeKey: buildEventRangeKey,
+ buildIsoString: buildIsoString,
+ buildNavLinkAttrs: buildNavLinkAttrs,
+ buildSegTimeText: buildSegTimeText,
+ collectFromHash: collectFromHash,
+ combineEventUis: combineEventUis,
+ compareByFieldSpecs: compareByFieldSpecs,
+ compareNumbers: compareNumbers,
+ compareObjs: compareObjs,
+ computeEarliestSegStart: computeEarliestSegStart,
+ computeEdges: computeEdges,
+ computeFallbackHeaderFormat: computeFallbackHeaderFormat,
+ computeInnerRect: computeInnerRect,
+ computeRect: computeRect,
+ computeShrinkWidth: computeShrinkWidth,
+ computeVisibleDayRange: computeVisibleDayRange,
+ config: config,
+ constrainPoint: constrainPoint,
+ createDuration: createDuration,
+ createEmptyEventStore: createEmptyEventStore,
+ createEventInstance: createEventInstance,
+ createEventUi: createEventUi,
+ createFormatter: createFormatter,
+ diffDates: diffDates,
+ diffDayAndTime: diffDayAndTime,
+ diffDays: diffDays,
+ diffPoints: diffPoints,
+ diffWeeks: diffWeeks,
+ diffWholeDays: diffWholeDays,
+ diffWholeWeeks: diffWholeWeeks,
+ disableCursor: disableCursor,
+ elementClosest: elementClosest,
+ elementMatches: elementMatches,
+ enableCursor: enableCursor,
+ eventTupleToStore: eventTupleToStore,
+ filterHash: filterHash,
+ findDirectChildren: findDirectChildren,
+ findElements: findElements,
+ flexibleCompare: flexibleCompare,
+ formatDayString: formatDayString,
+ formatIsoTimeString: formatIsoTimeString,
+ getAllowYScrolling: getAllowYScrolling,
+ getCanVGrowWithinCell: getCanVGrowWithinCell,
+ getClippingParents: getClippingParents,
+ getDateMeta: getDateMeta,
+ getDayClassNames: getDayClassNames,
+ getDefaultEventEnd: getDefaultEventEnd,
+ getElRoot: getElRoot,
+ getElSeg: getElSeg,
+ getEntrySpanEnd: getEntrySpanEnd,
+ getEventTargetViaRoot: getEventTargetViaRoot,
+ getIsRtlScrollbarOnLeft: getIsRtlScrollbarOnLeft,
+ getRectCenter: getRectCenter,
+ getRelevantEvents: getRelevantEvents,
+ getScrollGridClassNames: getScrollGridClassNames,
+ getScrollbarWidths: getScrollbarWidths,
+ getSectionClassNames: getSectionClassNames,
+ getSectionHasLiquidHeight: getSectionHasLiquidHeight,
+ getSegAnchorAttrs: getSegAnchorAttrs,
+ getSegMeta: getSegMeta,
+ getSlotClassNames: getSlotClassNames,
+ getStickyFooterScrollbar: getStickyFooterScrollbar,
+ getStickyHeaderDates: getStickyHeaderDates,
+ getUniqueDomId: getUniqueDomId,
+ greatestDurationDenominator: greatestDurationDenominator,
+ groupIntersectingEntries: groupIntersectingEntries,
+ guid: guid,
+ hasBgRendering: hasBgRendering,
+ hasCustomDayCellContent: hasCustomDayCellContent,
+ hasShrinkWidth: hasShrinkWidth,
+ identity: identity,
+ injectStyles: injectStyles,
+ interactionSettingsStore: interactionSettingsStore,
+ interactionSettingsToStore: interactionSettingsToStore,
+ intersectRanges: intersectRanges,
+ intersectRects: intersectRects,
+ intersectSpans: intersectSpans,
+ isArraysEqual: isArraysEqual,
+ isColPropsEqual: isColPropsEqual,
+ isDateSelectionValid: isDateSelectionValid,
+ isDateSpansEqual: isDateSpansEqual,
+ isInt: isInt,
+ isInteractionValid: isInteractionValid,
+ isMultiDayRange: isMultiDayRange,
+ isPropsEqual: isPropsEqual,
+ isPropsValid: isPropsValid,
+ isValidDate: isValidDate,
+ mapHash: mapHash,
+ memoize: memoize,
+ memoizeArraylike: memoizeArraylike,
+ memoizeHashlike: memoizeHashlike,
+ memoizeObjArg: memoizeObjArg,
+ mergeEventStores: mergeEventStores,
+ multiplyDuration: multiplyDuration,
+ padStart: padStart,
+ parseBusinessHours: parseBusinessHours,
+ parseClassNames: parseClassNames,
+ parseDragMeta: parseDragMeta,
+ parseEventDef: parseEventDef,
+ parseFieldSpecs: parseFieldSpecs,
+ parseMarker: parse,
+ pointInsideRect: pointInsideRect,
+ preventContextMenu: preventContextMenu,
+ preventDefault: preventDefault,
+ preventSelection: preventSelection,
+ rangeContainsMarker: rangeContainsMarker,
+ rangeContainsRange: rangeContainsRange,
+ rangesEqual: rangesEqual,
+ rangesIntersect: rangesIntersect,
+ refineEventDef: refineEventDef,
+ refineProps: refineProps,
+ removeElement: removeElement,
+ removeExact: removeExact,
+ renderChunkContent: renderChunkContent,
+ renderFill: renderFill,
+ renderMicroColGroup: renderMicroColGroup,
+ renderScrollShim: renderScrollShim,
+ requestJson: requestJson,
+ sanitizeShrinkWidth: sanitizeShrinkWidth,
+ setRef: setRef,
+ sliceEventStore: sliceEventStore,
+ sortEventSegs: sortEventSegs,
+ startOfDay: startOfDay,
+ translateRect: translateRect,
+ triggerDateSelect: triggerDateSelect,
+ unpromisify: unpromisify,
+ whenTransitionDone: whenTransitionDone,
+ wholeDivideDurations: wholeDivideDurations
+ };
+
+ var css_248z$3 = ":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-unselectable{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;user-select:none}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,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\") format(\"truetype\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\"\\e900\"}.fc-icon-chevron-right:before{content:\"\\e901\"}.fc-icon-chevrons-left:before{content:\"\\e902\"}.fc-icon-chevrons-right:before{content:\"\\e903\"}.fc-icon-minus-square:before{content:\"\\e904\"}.fc-icon-plus-square:before{content:\"\\e905\"}.fc-icon-x:before{content:\"\\e906\"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button::-moz-focus-inner{border-style:none;padding:0}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\"\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\"\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}";
+ injectStyles(css_248z$3);
+
+ const globalLocales = [];
+
+ const MINIMAL_RAW_EN_LOCALE = {
+ code: 'en',
+ week: {
+ dow: 0,
+ doy: 4, // 4 days need to be within the year to be considered the first week
+ },
+ direction: 'ltr',
+ buttonText: {
+ prev: 'prev',
+ next: 'next',
+ prevYear: 'prev year',
+ nextYear: 'next year',
+ year: 'year',
+ today: 'today',
+ month: 'month',
+ week: 'week',
+ day: 'day',
+ list: 'list',
+ },
+ weekText: 'W',
+ weekTextLong: 'Week',
+ closeHint: 'Close',
+ timeHint: 'Time',
+ eventHint: 'Event',
+ allDayText: 'all-day',
+ moreLinkText: 'more',
+ noEventsText: 'No events to display',
+ };
+ const RAW_EN_LOCALE = Object.assign(Object.assign({}, MINIMAL_RAW_EN_LOCALE), {
+ // Includes things we don't want other locales to inherit,
+ // things that derive from other translatable strings.
+ buttonHints: {
+ prev: 'Previous $0',
+ next: 'Next $0',
+ today(buttonText, unit) {
+ return (unit === 'day')
+ ? 'Today'
+ : `This ${buttonText}`;
+ },
+ }, viewHint: '$0 view', navLinkHint: 'Go to $0', moreLinkHint(eventCnt) {
+ return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
+ } });
+ function organizeRawLocales(explicitRawLocales) {
+ let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
+ let allRawLocales = globalLocales.concat(explicitRawLocales);
+ let rawLocaleMap = {
+ en: RAW_EN_LOCALE,
+ };
+ for (let rawLocale of allRawLocales) {
+ rawLocaleMap[rawLocale.code] = rawLocale;
+ }
+ return {
+ map: rawLocaleMap,
+ defaultCode,
+ };
+ }
+ function buildLocale(inputSingular, available) {
+ if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {
+ return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);
+ }
+ return queryLocale(inputSingular, available);
+ }
+ function queryLocale(codeArg, available) {
+ let codes = [].concat(codeArg || []); // will convert to array
+ let raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;
+ return parseLocale(codeArg, codes, raw);
+ }
+ function queryRawLocale(codes, available) {
+ for (let i = 0; i < codes.length; i += 1) {
+ let parts = codes[i].toLocaleLowerCase().split('-');
+ for (let j = parts.length; j > 0; j -= 1) {
+ let simpleId = parts.slice(0, j).join('-');
+ if (available[simpleId]) {
+ return available[simpleId];
+ }
+ }
+ }
+ return null;
+ }
+ function parseLocale(codeArg, codes, raw) {
+ let merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);
+ delete merged.code; // don't want this part of the options
+ let { week } = merged;
+ delete merged.week;
+ return {
+ codeArg,
+ codes,
+ week,
+ simpleNumberFormat: new Intl.NumberFormat(codeArg),
+ options: merged,
+ };
+ }
+
+ // TODO: easier way to add new hooks? need to update a million things
+ function createPlugin(input) {
+ return {
+ id: guid(),
+ name: input.name,
+ premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,
+ deps: input.deps || [],
+ reducers: input.reducers || [],
+ isLoadingFuncs: input.isLoadingFuncs || [],
+ contextInit: [].concat(input.contextInit || []),
+ eventRefiners: input.eventRefiners || {},
+ eventDefMemberAdders: input.eventDefMemberAdders || [],
+ eventSourceRefiners: input.eventSourceRefiners || {},
+ isDraggableTransformers: input.isDraggableTransformers || [],
+ eventDragMutationMassagers: input.eventDragMutationMassagers || [],
+ eventDefMutationAppliers: input.eventDefMutationAppliers || [],
+ dateSelectionTransformers: input.dateSelectionTransformers || [],
+ datePointTransforms: input.datePointTransforms || [],
+ dateSpanTransforms: input.dateSpanTransforms || [],
+ views: input.views || {},
+ viewPropsTransformers: input.viewPropsTransformers || [],
+ isPropsValid: input.isPropsValid || null,
+ externalDefTransforms: input.externalDefTransforms || [],
+ viewContainerAppends: input.viewContainerAppends || [],
+ eventDropTransformers: input.eventDropTransformers || [],
+ componentInteractions: input.componentInteractions || [],
+ calendarInteractions: input.calendarInteractions || [],
+ themeClasses: input.themeClasses || {},
+ eventSourceDefs: input.eventSourceDefs || [],
+ cmdFormatter: input.cmdFormatter,
+ recurringTypes: input.recurringTypes || [],
+ namedTimeZonedImpl: input.namedTimeZonedImpl,
+ initialView: input.initialView || '',
+ elementDraggingImpl: input.elementDraggingImpl,
+ optionChangeHandlers: input.optionChangeHandlers || {},
+ scrollGridImpl: input.scrollGridImpl || null,
+ listenerRefiners: input.listenerRefiners || {},
+ optionRefiners: input.optionRefiners || {},
+ propSetHandlers: input.propSetHandlers || {},
+ };
+ }
+ function buildPluginHooks(pluginDefs, globalDefs) {
+ let currentPluginIds = {};
+ let hooks = {
+ premiumReleaseDate: undefined,
+ reducers: [],
+ isLoadingFuncs: [],
+ contextInit: [],
+ eventRefiners: {},
+ eventDefMemberAdders: [],
+ eventSourceRefiners: {},
+ isDraggableTransformers: [],
+ eventDragMutationMassagers: [],
+ eventDefMutationAppliers: [],
+ dateSelectionTransformers: [],
+ datePointTransforms: [],
+ dateSpanTransforms: [],
+ views: {},
+ viewPropsTransformers: [],
+ isPropsValid: null,
+ externalDefTransforms: [],
+ viewContainerAppends: [],
+ eventDropTransformers: [],
+ componentInteractions: [],
+ calendarInteractions: [],
+ themeClasses: {},
+ eventSourceDefs: [],
+ cmdFormatter: null,
+ recurringTypes: [],
+ namedTimeZonedImpl: null,
+ initialView: '',
+ elementDraggingImpl: null,
+ optionChangeHandlers: {},
+ scrollGridImpl: null,
+ listenerRefiners: {},
+ optionRefiners: {},
+ propSetHandlers: {},
+ };
+ function addDefs(defs) {
+ for (let def of defs) {
+ const pluginName = def.name;
+ const currentId = currentPluginIds[pluginName];
+ if (currentId === undefined) {
+ currentPluginIds[pluginName] = def.id;
+ addDefs(def.deps);
+ hooks = combineHooks(hooks, def);
+ }
+ else if (currentId !== def.id) {
+ // different ID than the one already added
+ console.warn(`Duplicate plugin '${pluginName}'`);
+ }
+ }
+ }
+ if (pluginDefs) {
+ addDefs(pluginDefs);
+ }
+ addDefs(globalDefs);
+ return hooks;
+ }
+ function buildBuildPluginHooks() {
+ let currentOverrideDefs = [];
+ let currentGlobalDefs = [];
+ let currentHooks;
+ return (overrideDefs, globalDefs) => {
+ if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
+ currentHooks = buildPluginHooks(overrideDefs, globalDefs);
+ }
+ currentOverrideDefs = overrideDefs;
+ currentGlobalDefs = globalDefs;
+ return currentHooks;
+ };
+ }
+ function combineHooks(hooks0, hooks1) {
+ return {
+ premiumReleaseDate: compareOptionalDates(hooks0.premiumReleaseDate, hooks1.premiumReleaseDate),
+ reducers: hooks0.reducers.concat(hooks1.reducers),
+ isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),
+ contextInit: hooks0.contextInit.concat(hooks1.contextInit),
+ eventRefiners: Object.assign(Object.assign({}, hooks0.eventRefiners), hooks1.eventRefiners),
+ eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),
+ eventSourceRefiners: Object.assign(Object.assign({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),
+ isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
+ eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
+ eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
+ dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
+ datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
+ dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
+ views: Object.assign(Object.assign({}, hooks0.views), hooks1.views),
+ viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
+ isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
+ externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
+ viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),
+ eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
+ calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
+ componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),
+ themeClasses: Object.assign(Object.assign({}, hooks0.themeClasses), hooks1.themeClasses),
+ eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),
+ cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,
+ recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),
+ namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,
+ initialView: hooks0.initialView || hooks1.initialView,
+ elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,
+ optionChangeHandlers: Object.assign(Object.assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),
+ scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,
+ listenerRefiners: Object.assign(Object.assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),
+ optionRefiners: Object.assign(Object.assign({}, hooks0.optionRefiners), hooks1.optionRefiners),
+ propSetHandlers: Object.assign(Object.assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers),
+ };
+ }
+ function compareOptionalDates(date0, date1) {
+ if (date0 === undefined) {
+ return date1;
+ }
+ if (date1 === undefined) {
+ return date0;
+ }
+ return new Date(Math.max(date0.valueOf(), date1.valueOf()));
+ }
+
+ class StandardTheme extends Theme {
+ }
+ StandardTheme.prototype.classes = {
+ root: 'fc-theme-standard',
+ tableCellShaded: 'fc-cell-shaded',
+ buttonGroup: 'fc-button-group',
+ button: 'fc-button fc-button-primary',
+ buttonActive: 'fc-button-active',
+ };
+ StandardTheme.prototype.baseIconClass = 'fc-icon';
+ StandardTheme.prototype.iconClasses = {
+ close: 'fc-icon-x',
+ prev: 'fc-icon-chevron-left',
+ next: 'fc-icon-chevron-right',
+ prevYear: 'fc-icon-chevrons-left',
+ nextYear: 'fc-icon-chevrons-right',
+ };
+ StandardTheme.prototype.rtlIconClasses = {
+ prev: 'fc-icon-chevron-right',
+ next: 'fc-icon-chevron-left',
+ prevYear: 'fc-icon-chevrons-right',
+ nextYear: 'fc-icon-chevrons-left',
+ };
+ StandardTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly
+ StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';
+ StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';
+
+ function compileViewDefs(defaultConfigs, overrideConfigs) {
+ let hash = {};
+ let viewType;
+ for (viewType in defaultConfigs) {
+ ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
+ }
+ for (viewType in overrideConfigs) {
+ ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
+ }
+ return hash;
+ }
+ function ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
+ if (hash[viewType]) {
+ return hash[viewType];
+ }
+ let viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);
+ if (viewDef) {
+ hash[viewType] = viewDef;
+ }
+ return viewDef;
+ }
+ function buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
+ let defaultConfig = defaultConfigs[viewType];
+ let overrideConfig = overrideConfigs[viewType];
+ let queryProp = (name) => ((defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :
+ ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null));
+ let theComponent = queryProp('component');
+ let superType = queryProp('superType');
+ let superDef = null;
+ if (superType) {
+ if (superType === viewType) {
+ throw new Error('Can\'t have a custom view type that references itself');
+ }
+ superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);
+ }
+ if (!theComponent && superDef) {
+ theComponent = superDef.component;
+ }
+ if (!theComponent) {
+ return null; // don't throw a warning, might be settings for a single-unit view
+ }
+ return {
+ type: viewType,
+ component: theComponent,
+ defaults: Object.assign(Object.assign({}, (superDef ? superDef.defaults : {})), (defaultConfig ? defaultConfig.rawOptions : {})),
+ overrides: Object.assign(Object.assign({}, (superDef ? superDef.overrides : {})), (overrideConfig ? overrideConfig.rawOptions : {})),
+ };
+ }
+
+ function parseViewConfigs(inputs) {
+ return mapHash(inputs, parseViewConfig);
+ }
+ function parseViewConfig(input) {
+ let rawOptions = typeof input === 'function' ?
+ { component: input } :
+ input;
+ let { component } = rawOptions;
+ if (rawOptions.content) {
+ component = createViewHookComponent(rawOptions);
+ // TODO: remove content/classNames/didMount/etc from options?
+ }
+ return {
+ superType: rawOptions.type,
+ component: component,
+ rawOptions, // includes type and component too :(
+ };
+ }
+ function createViewHookComponent(options) {
+ return (viewProps) => (h(ViewContextType.Consumer, null, (context) => (h(ContentContainer, { elTag: "div", elClasses: buildViewClassNames(context.viewSpec), renderProps: Object.assign(Object.assign({}, viewProps), { nextDayThreshold: context.options.nextDayThreshold }), generatorName: undefined, generator: options.content, classNameGenerator: options.classNames, didMount: options.didMount, willUnmount: options.willUnmount }))));
+ }
+
+ function buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
+ let defaultConfigs = parseViewConfigs(defaultInputs);
+ let overrideConfigs = parseViewConfigs(optionOverrides.views);
+ let viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);
+ return mapHash(viewDefs, (viewDef) => buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults));
+ }
+ function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
+ let durationInput = viewDef.overrides.duration ||
+ viewDef.defaults.duration ||
+ dynamicOptionOverrides.duration ||
+ optionOverrides.duration;
+ let duration = null;
+ let durationUnit = '';
+ let singleUnit = '';
+ let singleUnitOverrides = {};
+ if (durationInput) {
+ duration = createDurationCached(durationInput);
+ if (duration) { // valid?
+ let denom = greatestDurationDenominator(duration);
+ durationUnit = denom.unit;
+ if (denom.value === 1) {
+ singleUnit = durationUnit;
+ singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {};
+ }
+ }
+ }
+ let queryButtonText = (optionsSubset) => {
+ let buttonTextMap = optionsSubset.buttonText || {};
+ let buttonTextKey = viewDef.defaults.buttonTextKey;
+ if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {
+ return buttonTextMap[buttonTextKey];
+ }
+ if (buttonTextMap[viewDef.type] != null) {
+ return buttonTextMap[viewDef.type];
+ }
+ if (buttonTextMap[singleUnit] != null) {
+ return buttonTextMap[singleUnit];
+ }
+ return null;
+ };
+ let queryButtonTitle = (optionsSubset) => {
+ let buttonHints = optionsSubset.buttonHints || {};
+ let buttonKey = viewDef.defaults.buttonTextKey; // use same key as text
+ if (buttonKey != null && buttonHints[buttonKey] != null) {
+ return buttonHints[buttonKey];
+ }
+ if (buttonHints[viewDef.type] != null) {
+ return buttonHints[viewDef.type];
+ }
+ if (buttonHints[singleUnit] != null) {
+ return buttonHints[singleUnit];
+ }
+ return null;
+ };
+ return {
+ type: viewDef.type,
+ component: viewDef.component,
+ duration,
+ durationUnit,
+ singleUnit,
+ optionDefaults: viewDef.defaults,
+ optionOverrides: Object.assign(Object.assign({}, singleUnitOverrides), viewDef.overrides),
+ buttonTextOverride: queryButtonText(dynamicOptionOverrides) ||
+ queryButtonText(optionOverrides) || // constructor-specified buttonText lookup hash takes precedence
+ viewDef.overrides.buttonText,
+ buttonTextDefault: queryButtonText(localeDefaults) ||
+ viewDef.defaults.buttonText ||
+ queryButtonText(BASE_OPTION_DEFAULTS) ||
+ viewDef.type,
+ // not DRY
+ buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) ||
+ queryButtonTitle(optionOverrides) ||
+ viewDef.overrides.buttonHint,
+ buttonTitleDefault: queryButtonTitle(localeDefaults) ||
+ viewDef.defaults.buttonHint ||
+ queryButtonTitle(BASE_OPTION_DEFAULTS),
+ // will eventually fall back to buttonText
+ };
+ }
+ // hack to get memoization working
+ let durationInputMap = {};
+ function createDurationCached(durationInput) {
+ let json = JSON.stringify(durationInput);
+ let res = durationInputMap[json];
+ if (res === undefined) {
+ res = createDuration(durationInput);
+ durationInputMap[json] = res;
+ }
+ return res;
+ }
+
+ function reduceViewType(viewType, action) {
+ switch (action.type) {
+ case 'CHANGE_VIEW_TYPE':
+ viewType = action.viewType;
+ }
+ return viewType;
+ }
+
+ function reduceDynamicOptionOverrides(dynamicOptionOverrides, action) {
+ switch (action.type) {
+ case 'SET_OPTION':
+ return Object.assign(Object.assign({}, dynamicOptionOverrides), { [action.optionName]: action.rawOptionValue });
+ default:
+ return dynamicOptionOverrides;
+ }
+ }
+
+ function reduceDateProfile(currentDateProfile, action, currentDate, dateProfileGenerator) {
+ let dp;
+ switch (action.type) {
+ case 'CHANGE_VIEW_TYPE':
+ return dateProfileGenerator.build(action.dateMarker || currentDate);
+ case 'CHANGE_DATE':
+ return dateProfileGenerator.build(action.dateMarker);
+ case 'PREV':
+ dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);
+ if (dp.isValid) {
+ return dp;
+ }
+ break;
+ case 'NEXT':
+ dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate);
+ if (dp.isValid) {
+ return dp;
+ }
+ break;
+ }
+ return currentDateProfile;
+ }
+
+ function initEventSources(calendarOptions, dateProfile, context) {
+ let activeRange = dateProfile ? dateProfile.activeRange : null;
+ return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);
+ }
+ function reduceEventSources(eventSources, action, dateProfile, context) {
+ let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
+ switch (action.type) {
+ case 'ADD_EVENT_SOURCES': // already parsed
+ return addSources(eventSources, action.sources, activeRange, context);
+ case 'REMOVE_EVENT_SOURCE':
+ return removeSource(eventSources, action.sourceId);
+ case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
+ case 'NEXT':
+ case 'CHANGE_DATE':
+ case 'CHANGE_VIEW_TYPE':
+ if (dateProfile) {
+ return fetchDirtySources(eventSources, activeRange, context);
+ }
+ return eventSources;
+ case 'FETCH_EVENT_SOURCES':
+ return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?
+ arrayToHash(action.sourceIds) :
+ excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);
+ case 'RECEIVE_EVENTS':
+ case 'RECEIVE_EVENT_ERROR':
+ return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
+ case 'REMOVE_ALL_EVENT_SOURCES':
+ return {};
+ default:
+ return eventSources;
+ }
+ }
+ function reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {
+ let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
+ return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);
+ }
+ function computeEventSourcesLoading(eventSources) {
+ for (let sourceId in eventSources) {
+ if (eventSources[sourceId].isFetching) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function addSources(eventSourceHash, sources, fetchRange, context) {
+ let hash = {};
+ for (let source of sources) {
+ hash[source.sourceId] = source;
+ }
+ if (fetchRange) {
+ hash = fetchDirtySources(hash, fetchRange, context);
+ }
+ return Object.assign(Object.assign({}, eventSourceHash), hash);
+ }
+ function removeSource(eventSourceHash, sourceId) {
+ return filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);
+ }
+ function fetchDirtySources(sourceHash, fetchRange, context) {
+ return fetchSourcesByIds(sourceHash, filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);
+ }
+ function isSourceDirty(eventSource, fetchRange, context) {
+ if (!doesSourceNeedRange(eventSource, context)) {
+ return !eventSource.latestFetchId;
+ }
+ return !context.options.lazyFetching ||
+ !eventSource.fetchRange ||
+ eventSource.isFetching || // always cancel outdated in-progress fetches
+ fetchRange.start < eventSource.fetchRange.start ||
+ fetchRange.end > eventSource.fetchRange.end;
+ }
+ function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {
+ let nextSources = {};
+ for (let sourceId in prevSources) {
+ let source = prevSources[sourceId];
+ if (sourceIdHash[sourceId]) {
+ nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);
+ }
+ else {
+ nextSources[sourceId] = source;
+ }
+ }
+ return nextSources;
+ }
+ function fetchSource(eventSource, fetchRange, isRefetch, context) {
+ let { options, calendarApi } = context;
+ let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
+ let fetchId = guid();
+ sourceDef.fetch({
+ eventSource,
+ range: fetchRange,
+ isRefetch,
+ context,
+ }, (res) => {
+ let { rawEvents } = res;
+ if (options.eventSourceSuccess) {
+ rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.response) || rawEvents;
+ }
+ if (eventSource.success) {
+ rawEvents = eventSource.success.call(calendarApi, rawEvents, res.response) || rawEvents;
+ }
+ context.dispatch({
+ type: 'RECEIVE_EVENTS',
+ sourceId: eventSource.sourceId,
+ fetchId,
+ fetchRange,
+ rawEvents,
+ });
+ }, (error) => {
+ let errorHandled = false;
+ if (options.eventSourceFailure) {
+ options.eventSourceFailure.call(calendarApi, error);
+ errorHandled = true;
+ }
+ if (eventSource.failure) {
+ eventSource.failure(error);
+ errorHandled = true;
+ }
+ if (!errorHandled) {
+ console.warn(error.message, error);
+ }
+ context.dispatch({
+ type: 'RECEIVE_EVENT_ERROR',
+ sourceId: eventSource.sourceId,
+ fetchId,
+ fetchRange,
+ error,
+ });
+ });
+ return Object.assign(Object.assign({}, eventSource), { isFetching: true, latestFetchId: fetchId });
+ }
+ function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
+ let eventSource = sourceHash[sourceId];
+ if (eventSource && // not already removed
+ fetchId === eventSource.latestFetchId) {
+ return Object.assign(Object.assign({}, sourceHash), { [sourceId]: Object.assign(Object.assign({}, eventSource), { isFetching: false, fetchRange }) });
+ }
+ return sourceHash;
+ }
+ function excludeStaticSources(eventSources, context) {
+ return filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));
+ }
+ function parseInitialSources(rawOptions, context) {
+ let refiners = buildEventSourceRefiners(context);
+ let rawSources = [].concat(rawOptions.eventSources || []);
+ let sources = []; // parsed
+ if (rawOptions.initialEvents) {
+ rawSources.unshift(rawOptions.initialEvents);
+ }
+ if (rawOptions.events) {
+ rawSources.unshift(rawOptions.events);
+ }
+ for (let rawSource of rawSources) {
+ let source = parseEventSource(rawSource, context, refiners);
+ if (source) {
+ sources.push(source);
+ }
+ }
+ return sources;
+ }
+ function doesSourceNeedRange(eventSource, context) {
+ let defs = context.pluginHooks.eventSourceDefs;
+ return !defs[eventSource.sourceDefId].ignoreRange;
+ }
+
+ function reduceDateSelection(currentSelection, action) {
+ switch (action.type) {
+ case 'UNSELECT_DATES':
+ return null;
+ case 'SELECT_DATES':
+ return action.selection;
+ default:
+ return currentSelection;
+ }
+ }
+
+ function reduceSelectedEvent(currentInstanceId, action) {
+ switch (action.type) {
+ case 'UNSELECT_EVENT':
+ return '';
+ case 'SELECT_EVENT':
+ return action.eventInstanceId;
+ default:
+ return currentInstanceId;
+ }
+ }
+
+ function reduceEventDrag(currentDrag, action) {
+ let newDrag;
+ switch (action.type) {
+ case 'UNSET_EVENT_DRAG':
+ return null;
+ case 'SET_EVENT_DRAG':
+ newDrag = action.state;
+ return {
+ affectedEvents: newDrag.affectedEvents,
+ mutatedEvents: newDrag.mutatedEvents,
+ isEvent: newDrag.isEvent,
+ };
+ default:
+ return currentDrag;
+ }
+ }
+
+ function reduceEventResize(currentResize, action) {
+ let newResize;
+ switch (action.type) {
+ case 'UNSET_EVENT_RESIZE':
+ return null;
+ case 'SET_EVENT_RESIZE':
+ newResize = action.state;
+ return {
+ affectedEvents: newResize.affectedEvents,
+ mutatedEvents: newResize.mutatedEvents,
+ isEvent: newResize.isEvent,
+ };
+ default:
+ return currentResize;
+ }
+ }
+
+ function parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
+ let header = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
+ let footer = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
+ return { header, footer };
+ }
+ function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
+ let sectionWidgets = {};
+ let viewsWithButtons = [];
+ let hasTitle = false;
+ for (let sectionName in sectionStrHash) {
+ let sectionStr = sectionStrHash[sectionName];
+ let sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);
+ sectionWidgets[sectionName] = sectionRes.widgets;
+ viewsWithButtons.push(...sectionRes.viewsWithButtons);
+ hasTitle = hasTitle || sectionRes.hasTitle;
+ }
+ return { sectionWidgets, viewsWithButtons, hasTitle };
+ }
+ /*
+ BAD: querying icons and text here. should be done at render time
+ */
+ function parseSection(sectionStr, calendarOptions, // defaults+overrides, then refined
+ calendarOptionOverrides, // overrides only!, unrefined :(
+ theme, viewSpecs, calendarApi) {
+ let isRtl = calendarOptions.direction === 'rtl';
+ let calendarCustomButtons = calendarOptions.customButtons || {};
+ let calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};
+ let calendarButtonText = calendarOptions.buttonText || {};
+ let calendarButtonHintOverrides = calendarOptionOverrides.buttonHints || {};
+ let calendarButtonHints = calendarOptions.buttonHints || {};
+ let sectionSubstrs = sectionStr ? sectionStr.split(' ') : [];
+ let viewsWithButtons = [];
+ let hasTitle = false;
+ let widgets = sectionSubstrs.map((buttonGroupStr) => (buttonGroupStr.split(',').map((buttonName) => {
+ if (buttonName === 'title') {
+ hasTitle = true;
+ return { buttonName };
+ }
+ let customButtonProps;
+ let viewSpec;
+ let buttonClick;
+ let buttonIcon; // only one of these will be set
+ let buttonText; // "
+ let buttonHint;
+ // ^ for the title="" attribute, for accessibility
+ if ((customButtonProps = calendarCustomButtons[buttonName])) {
+ buttonClick = (ev) => {
+ if (customButtonProps.click) {
+ customButtonProps.click.call(ev.target, ev, ev.target); // TODO: use Calendar this context?
+ }
+ };
+ (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||
+ (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
+ (buttonText = customButtonProps.text);
+ buttonHint = customButtonProps.hint || customButtonProps.text;
+ }
+ else if ((viewSpec = viewSpecs[buttonName])) {
+ viewsWithButtons.push(buttonName);
+ buttonClick = () => {
+ calendarApi.changeView(buttonName);
+ };
+ (buttonText = viewSpec.buttonTextOverride) ||
+ (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
+ (buttonText = viewSpec.buttonTextDefault);
+ let textFallback = viewSpec.buttonTextOverride ||
+ viewSpec.buttonTextDefault;
+ buttonHint = formatWithOrdinals(viewSpec.buttonTitleOverride ||
+ viewSpec.buttonTitleDefault ||
+ calendarOptions.viewHint, [textFallback, buttonName], // view-name = buttonName
+ textFallback);
+ }
+ else if (calendarApi[buttonName]) { // a calendarApi method
+ buttonClick = () => {
+ calendarApi[buttonName]();
+ };
+ (buttonText = calendarButtonTextOverrides[buttonName]) ||
+ (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
+ (buttonText = calendarButtonText[buttonName]); // everything else is considered default
+ if (buttonName === 'prevYear' || buttonName === 'nextYear') {
+ let prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next';
+ buttonHint = formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] ||
+ calendarButtonHints[prevOrNext], [
+ calendarButtonText.year || 'year',
+ 'year',
+ ], calendarButtonText[buttonName]);
+ }
+ else {
+ buttonHint = (navUnit) => formatWithOrdinals(calendarButtonHintOverrides[buttonName] ||
+ calendarButtonHints[buttonName], [
+ calendarButtonText[navUnit] || navUnit,
+ navUnit,
+ ], calendarButtonText[buttonName]);
+ }
+ }
+ return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint };
+ })));
+ return { widgets, viewsWithButtons, hasTitle };
+ }
+
+ // always represents the current view. otherwise, it'd need to change value every time date changes
+ class ViewImpl {
+ constructor(type, getCurrentData, dateEnv) {
+ this.type = type;
+ this.getCurrentData = getCurrentData;
+ this.dateEnv = dateEnv;
+ }
+ get calendar() {
+ return this.getCurrentData().calendarApi;
+ }
+ get title() {
+ return this.getCurrentData().viewTitle;
+ }
+ get activeStart() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);
+ }
+ get activeEnd() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);
+ }
+ get currentStart() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);
+ }
+ get currentEnd() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);
+ }
+ getOption(name) {
+ return this.getCurrentData().options[name]; // are the view-specific options
+ }
+ }
+
+ let eventSourceDef$2 = {
+ ignoreRange: true,
+ parseMeta(refined) {
+ if (Array.isArray(refined.events)) {
+ return refined.events;
+ }
+ return null;
+ },
+ fetch(arg, successCallback) {
+ successCallback({
+ rawEvents: arg.eventSource.meta,
+ });
+ },
+ };
+ const arrayEventSourcePlugin = createPlugin({
+ name: 'array-event-source',
+ eventSourceDefs: [eventSourceDef$2],
+ });
+
+ let eventSourceDef$1 = {
+ parseMeta(refined) {
+ if (typeof refined.events === 'function') {
+ return refined.events;
+ }
+ return null;
+ },
+ fetch(arg, successCallback, errorCallback) {
+ const { dateEnv } = arg.context;
+ const func = arg.eventSource.meta;
+ unpromisify(func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);
+ },
+ };
+ const funcEventSourcePlugin = createPlugin({
+ name: 'func-event-source',
+ eventSourceDefs: [eventSourceDef$1],
+ });
+
+ const JSON_FEED_EVENT_SOURCE_REFINERS = {
+ method: String,
+ extraParams: identity,
+ startParam: String,
+ endParam: String,
+ timeZoneParam: String,
+ };
+
+ let eventSourceDef = {
+ parseMeta(refined) {
+ if (refined.url && (refined.format === 'json' || !refined.format)) {
+ return {
+ url: refined.url,
+ format: 'json',
+ method: (refined.method || 'GET').toUpperCase(),
+ extraParams: refined.extraParams,
+ startParam: refined.startParam,
+ endParam: refined.endParam,
+ timeZoneParam: refined.timeZoneParam,
+ };
+ }
+ return null;
+ },
+ fetch(arg, successCallback, errorCallback) {
+ const { meta } = arg.eventSource;
+ const requestParams = buildRequestParams(meta, arg.range, arg.context);
+ requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {
+ successCallback({ rawEvents, response });
+ }, errorCallback);
+ },
+ };
+ const jsonFeedEventSourcePlugin = createPlugin({
+ name: 'json-event-source',
+ eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,
+ eventSourceDefs: [eventSourceDef],
+ });
+ function buildRequestParams(meta, range, context) {
+ let { dateEnv, options } = context;
+ let startParam;
+ let endParam;
+ let timeZoneParam;
+ let customRequestParams;
+ let params = {};
+ startParam = meta.startParam;
+ if (startParam == null) {
+ startParam = options.startParam;
+ }
+ endParam = meta.endParam;
+ if (endParam == null) {
+ endParam = options.endParam;
+ }
+ timeZoneParam = meta.timeZoneParam;
+ if (timeZoneParam == null) {
+ timeZoneParam = options.timeZoneParam;
+ }
+ // retrieve any outbound GET/POST data from the options
+ if (typeof meta.extraParams === 'function') {
+ // supplied as a function that returns a key/value object
+ customRequestParams = meta.extraParams();
+ }
+ else {
+ // probably supplied as a straight key/value object
+ customRequestParams = meta.extraParams || {};
+ }
+ Object.assign(params, customRequestParams);
+ params[startParam] = dateEnv.formatIso(range.start);
+ params[endParam] = dateEnv.formatIso(range.end);
+ if (dateEnv.timeZone !== 'local') {
+ params[timeZoneParam] = dateEnv.timeZone;
+ }
+ return params;
+ }
+
+ const SIMPLE_RECURRING_REFINERS = {
+ daysOfWeek: identity,
+ startTime: createDuration,
+ endTime: createDuration,
+ duration: createDuration,
+ startRecur: identity,
+ endRecur: identity,
+ };
+
+ let recurring = {
+ parse(refined, dateEnv) {
+ if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {
+ let recurringData = {
+ daysOfWeek: refined.daysOfWeek || null,
+ startTime: refined.startTime || null,
+ endTime: refined.endTime || null,
+ startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,
+ endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null,
+ };
+ let duration;
+ if (refined.duration) {
+ duration = refined.duration;
+ }
+ if (!duration && refined.startTime && refined.endTime) {
+ duration = subtractDurations(refined.endTime, refined.startTime);
+ }
+ return {
+ allDayGuess: Boolean(!refined.startTime && !refined.endTime),
+ duration,
+ typeData: recurringData, // doesn't need endTime anymore but oh well
+ };
+ }
+ return null;
+ },
+ expand(typeData, framingRange, dateEnv) {
+ let clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
+ if (clippedFramingRange) {
+ return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
+ }
+ return [];
+ },
+ };
+ const simpleRecurringEventsPlugin = createPlugin({
+ name: 'simple-recurring-event',
+ recurringTypes: [recurring],
+ eventRefiners: SIMPLE_RECURRING_REFINERS,
+ });
+ function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
+ let dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;
+ let dayMarker = startOfDay(framingRange.start);
+ let endMarker = framingRange.end;
+ let instanceStarts = [];
+ while (dayMarker < endMarker) {
+ let instanceStart;
+ // if everyday, or this particular day-of-week
+ if (!dowHash || dowHash[dayMarker.getUTCDay()]) {
+ if (startTime) {
+ instanceStart = dateEnv.add(dayMarker, startTime);
+ }
+ else {
+ instanceStart = dayMarker;
+ }
+ instanceStarts.push(instanceStart);
+ }
+ dayMarker = addDays(dayMarker, 1);
+ }
+ return instanceStarts;
+ }
+
+ const changeHandlerPlugin = createPlugin({
+ name: 'change-handler',
+ optionChangeHandlers: {
+ events(events, context) {
+ handleEventSources([events], context);
+ },
+ eventSources: handleEventSources,
+ },
+ });
+ /*
+ BUG: if `event` was supplied, all previously-given `eventSources` will be wiped out
+ */
+ function handleEventSources(inputs, context) {
+ let unfoundSources = hashValuesToArray(context.getCurrentData().eventSources);
+ let newInputs = [];
+ for (let input of inputs) {
+ let inputFound = false;
+ for (let i = 0; i < unfoundSources.length; i += 1) {
+ if (unfoundSources[i]._raw === input) {
+ unfoundSources.splice(i, 1); // delete
+ inputFound = true;
+ break;
+ }
+ }
+ if (!inputFound) {
+ newInputs.push(input);
+ }
+ }
+ for (let unfoundSource of unfoundSources) {
+ context.dispatch({
+ type: 'REMOVE_EVENT_SOURCE',
+ sourceId: unfoundSource.sourceId,
+ });
+ }
+ for (let newInput of newInputs) {
+ context.calendarApi.addEventSource(newInput);
+ }
+ }
+
+ function handleDateProfile(dateProfile, context) {
+ context.emitter.trigger('datesSet', Object.assign(Object.assign({}, buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));
+ }
+
+ function handleEventStore(eventStore, context) {
+ let { emitter } = context;
+ if (emitter.hasHandlers('eventsSet')) {
+ emitter.trigger('eventsSet', buildEventApis(eventStore, context));
+ }
+ }
+
+ /*
+ this array is exposed on the root namespace so that UMD plugins can add to it.
+ see the rollup-bundles script.
+ */
+ const globalPlugins = [
+ arrayEventSourcePlugin,
+ funcEventSourcePlugin,
+ jsonFeedEventSourcePlugin,
+ simpleRecurringEventsPlugin,
+ changeHandlerPlugin,
+ createPlugin({
+ name: 'misc',
+ isLoadingFuncs: [
+ (state) => computeEventSourcesLoading(state.eventSources),
+ ],
+ propSetHandlers: {
+ dateProfile: handleDateProfile,
+ eventStore: handleEventStore,
+ },
+ }),
+ ];
+
+ class TaskRunner {
+ constructor(runTaskOption, drainedOption) {
+ this.runTaskOption = runTaskOption;
+ this.drainedOption = drainedOption;
+ this.queue = [];
+ this.delayedRunner = new DelayedRunner(this.drain.bind(this));
+ }
+ request(task, delay) {
+ this.queue.push(task);
+ this.delayedRunner.request(delay);
+ }
+ pause(scope) {
+ this.delayedRunner.pause(scope);
+ }
+ resume(scope, force) {
+ this.delayedRunner.resume(scope, force);
+ }
+ drain() {
+ let { queue } = this;
+ while (queue.length) {
+ let completedTasks = [];
+ let task;
+ while ((task = queue.shift())) {
+ this.runTask(task);
+ completedTasks.push(task);
+ }
+ this.drained(completedTasks);
+ } // keep going, in case new tasks were added in the drained handler
+ }
+ runTask(task) {
+ if (this.runTaskOption) {
+ this.runTaskOption(task);
+ }
+ }
+ drained(completedTasks) {
+ if (this.drainedOption) {
+ this.drainedOption(completedTasks);
+ }
+ }
+ }
+
+ // Computes what the title at the top of the calendarApi should be for this view
+ function buildTitle(dateProfile, viewOptions, dateEnv) {
+ let range;
+ // for views that span a large unit of time, show the proper interval, ignoring stray days before and after
+ if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {
+ range = dateProfile.currentRange;
+ }
+ else { // for day units or smaller, use the actual day range
+ range = dateProfile.activeRange;
+ }
+ return dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {
+ isEndExclusive: dateProfile.isRangeAllDay,
+ defaultSeparator: viewOptions.titleRangeSeparator,
+ });
+ }
+ // Generates the format string that should be used to generate the title for the current date range.
+ // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.
+ function buildTitleFormat(dateProfile) {
+ let { currentRangeUnit } = dateProfile;
+ if (currentRangeUnit === 'year') {
+ return { year: 'numeric' };
+ }
+ if (currentRangeUnit === 'month') {
+ return { year: 'numeric', month: 'long' }; // like "September 2014"
+ }
+ let days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);
+ if (days !== null && days > 1) {
+ // multi-day range. shorter, like "Sep 9 - 10 2014"
+ return { year: 'numeric', month: 'short', day: 'numeric' };
+ }
+ // one day. longer, like "September 9 2014"
+ return { year: 'numeric', month: 'long', day: 'numeric' };
+ }
+
+ // in future refactor, do the redux-style function(state=initial) for initial-state
+ // also, whatever is happening in constructor, have it happen in action queue too
+ class CalendarDataManager {
+ constructor(props) {
+ this.computeOptionsData = memoize(this._computeOptionsData);
+ this.computeCurrentViewData = memoize(this._computeCurrentViewData);
+ this.organizeRawLocales = memoize(organizeRawLocales);
+ this.buildLocale = memoize(buildLocale);
+ this.buildPluginHooks = buildBuildPluginHooks();
+ this.buildDateEnv = memoize(buildDateEnv$1);
+ this.buildTheme = memoize(buildTheme);
+ this.parseToolbars = memoize(parseToolbars);
+ this.buildViewSpecs = memoize(buildViewSpecs);
+ this.buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator);
+ this.buildViewApi = memoize(buildViewApi);
+ this.buildViewUiProps = memoizeObjArg(buildViewUiProps);
+ this.buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual);
+ this.buildEventUiBases = memoize(buildEventUiBases);
+ this.parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours);
+ this.buildTitle = memoize(buildTitle);
+ this.emitter = new Emitter();
+ this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));
+ this.currentCalendarOptionsInput = {};
+ this.currentCalendarOptionsRefined = {};
+ this.currentViewOptionsInput = {};
+ this.currentViewOptionsRefined = {};
+ this.currentCalendarOptionsRefiners = {};
+ this.getCurrentData = () => this.data;
+ this.dispatch = (action) => {
+ this.actionRunner.request(action); // protects against recursive calls to _handleAction
+ };
+ this.props = props;
+ this.actionRunner.pause();
+ let dynamicOptionOverrides = {};
+ let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
+ let currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView;
+ let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
+ // wire things up
+ // TODO: not DRY
+ props.calendarApi.currentDataManager = this;
+ this.emitter.setThisContext(props.calendarApi);
+ this.emitter.setOptions(currentViewData.options);
+ let currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv);
+ let dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
+ if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {
+ currentDate = dateProfile.currentRange.start;
+ }
+ let calendarContext = {
+ dateEnv: optionsData.dateEnv,
+ options: optionsData.calendarOptions,
+ pluginHooks: optionsData.pluginHooks,
+ calendarApi: props.calendarApi,
+ dispatch: this.dispatch,
+ emitter: this.emitter,
+ getCurrentData: this.getCurrentData,
+ };
+ // needs to be after setThisContext
+ for (let callback of optionsData.pluginHooks.contextInit) {
+ callback(calendarContext);
+ }
+ // NOT DRY
+ let eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);
+ let initialState = {
+ dynamicOptionOverrides,
+ currentViewType,
+ currentDate,
+ dateProfile,
+ businessHours: this.parseContextBusinessHours(calendarContext),
+ eventSources,
+ eventUiBases: {},
+ eventStore: createEmptyEventStore(),
+ renderableEventStore: createEmptyEventStore(),
+ dateSelection: null,
+ eventSelection: '',
+ eventDrag: null,
+ eventResize: null,
+ selectionConfig: this.buildViewUiProps(calendarContext).selectionConfig,
+ };
+ let contextAndState = Object.assign(Object.assign({}, calendarContext), initialState);
+ for (let reducer of optionsData.pluginHooks.reducers) {
+ Object.assign(initialState, reducer(null, null, contextAndState));
+ }
+ if (computeIsLoading(initialState, calendarContext)) {
+ this.emitter.trigger('loading', true); // NOT DRY
+ }
+ this.state = initialState;
+ this.updateData();
+ this.actionRunner.resume();
+ }
+ resetOptions(optionOverrides, append) {
+ let { props } = this;
+ props.optionOverrides = append
+ ? Object.assign(Object.assign({}, props.optionOverrides), optionOverrides) : optionOverrides;
+ this.actionRunner.request({
+ type: 'NOTHING',
+ });
+ }
+ _handleAction(action) {
+ let { props, state, emitter } = this;
+ let dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action);
+ let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
+ let currentViewType = reduceViewType(state.currentViewType, action);
+ let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
+ // wire things up
+ // TODO: not DRY
+ props.calendarApi.currentDataManager = this;
+ emitter.setThisContext(props.calendarApi);
+ emitter.setOptions(currentViewData.options);
+ let calendarContext = {
+ dateEnv: optionsData.dateEnv,
+ options: optionsData.calendarOptions,
+ pluginHooks: optionsData.pluginHooks,
+ calendarApi: props.calendarApi,
+ dispatch: this.dispatch,
+ emitter,
+ getCurrentData: this.getCurrentData,
+ };
+ let { currentDate, dateProfile } = state;
+ if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) { // hack
+ dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
+ }
+ currentDate = reduceCurrentDate(currentDate, action);
+ dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);
+ if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator
+ action.type === 'NEXT' || // "
+ !rangeContainsMarker(dateProfile.currentRange, currentDate)) {
+ currentDate = dateProfile.currentRange.start;
+ }
+ let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
+ let eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
+ let isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading
+ let renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?
+ (state.renderableEventStore || eventStore) : // try from previous state
+ eventStore;
+ let { eventUiSingleBase, selectionConfig } = this.buildViewUiProps(calendarContext); // will memoize obj
+ let eventUiBySource = this.buildEventUiBySource(eventSources);
+ let eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
+ let newState = {
+ dynamicOptionOverrides,
+ currentViewType,
+ currentDate,
+ dateProfile,
+ eventSources,
+ eventStore,
+ renderableEventStore,
+ selectionConfig,
+ eventUiBases,
+ businessHours: this.parseContextBusinessHours(calendarContext),
+ dateSelection: reduceDateSelection(state.dateSelection, action),
+ eventSelection: reduceSelectedEvent(state.eventSelection, action),
+ eventDrag: reduceEventDrag(state.eventDrag, action),
+ eventResize: reduceEventResize(state.eventResize, action),
+ };
+ let contextAndState = Object.assign(Object.assign({}, calendarContext), newState);
+ for (let reducer of optionsData.pluginHooks.reducers) {
+ Object.assign(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value
+ }
+ let wasLoading = computeIsLoading(state, calendarContext);
+ let isLoading = computeIsLoading(newState, calendarContext);
+ // TODO: use propSetHandlers in plugin system
+ if (!wasLoading && isLoading) {
+ emitter.trigger('loading', true);
+ }
+ else if (wasLoading && !isLoading) {
+ emitter.trigger('loading', false);
+ }
+ this.state = newState;
+ if (props.onAction) {
+ props.onAction(action);
+ }
+ }
+ updateData() {
+ let { props, state } = this;
+ let oldData = this.data;
+ let optionsData = this.computeOptionsData(props.optionOverrides, state.dynamicOptionOverrides, props.calendarApi);
+ let currentViewData = this.computeCurrentViewData(state.currentViewType, optionsData, props.optionOverrides, state.dynamicOptionOverrides);
+ let data = this.data = Object.assign(Object.assign(Object.assign({ viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv), calendarApi: props.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, optionsData), currentViewData), state);
+ let changeHandlers = optionsData.pluginHooks.optionChangeHandlers;
+ let oldCalendarOptions = oldData && oldData.calendarOptions;
+ let newCalendarOptions = optionsData.calendarOptions;
+ if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {
+ if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {
+ // hack
+ state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);
+ state.eventStore = data.eventStore = rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);
+ }
+ for (let optionName in changeHandlers) {
+ if (oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {
+ changeHandlers[optionName](newCalendarOptions[optionName], data);
+ }
+ }
+ }
+ if (props.onData) {
+ props.onData(data);
+ }
+ }
+ _computeOptionsData(optionOverrides, dynamicOptionOverrides, calendarApi) {
+ // TODO: blacklist options that are handled by optionChangeHandlers
+ let { refinedOptions, pluginHooks, localeDefaults, availableLocaleData, extra, } = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides);
+ warnUnknownOptions(extra);
+ let dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);
+ let viewSpecs = this.buildViewSpecs(pluginHooks.views, optionOverrides, dynamicOptionOverrides, localeDefaults);
+ let theme = this.buildTheme(refinedOptions, pluginHooks);
+ let toolbarConfig = this.parseToolbars(refinedOptions, optionOverrides, theme, viewSpecs, calendarApi);
+ return {
+ calendarOptions: refinedOptions,
+ pluginHooks,
+ dateEnv,
+ viewSpecs,
+ theme,
+ toolbarConfig,
+ localeDefaults,
+ availableRawLocales: availableLocaleData.map,
+ };
+ }
+ // always called from behind a memoizer
+ processRawCalendarOptions(optionOverrides, dynamicOptionOverrides) {
+ let { locales, locale } = mergeRawOptions([
+ BASE_OPTION_DEFAULTS,
+ optionOverrides,
+ dynamicOptionOverrides,
+ ]);
+ let availableLocaleData = this.organizeRawLocales(locales);
+ let availableRawLocales = availableLocaleData.map;
+ let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;
+ let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);
+ let refiners = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
+ let extra = {};
+ let raw = mergeRawOptions([
+ BASE_OPTION_DEFAULTS,
+ localeDefaults,
+ optionOverrides,
+ dynamicOptionOverrides,
+ ]);
+ let refined = {};
+ let currentRaw = this.currentCalendarOptionsInput;
+ let currentRefined = this.currentCalendarOptionsRefined;
+ let anyChanges = false;
+ for (let optionName in raw) {
+ if (optionName !== 'plugins') { // because plugins is special-cased
+ if (raw[optionName] === currentRaw[optionName] ||
+ (COMPLEX_OPTION_COMPARATORS[optionName] &&
+ (optionName in currentRaw) &&
+ COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName]))) {
+ refined[optionName] = currentRefined[optionName];
+ }
+ else if (refiners[optionName]) {
+ refined[optionName] = refiners[optionName](raw[optionName]);
+ anyChanges = true;
+ }
+ else {
+ extra[optionName] = currentRaw[optionName];
+ }
+ }
+ }
+ if (anyChanges) {
+ this.currentCalendarOptionsInput = raw;
+ this.currentCalendarOptionsRefined = refined;
+ }
+ return {
+ rawOptions: this.currentCalendarOptionsInput,
+ refinedOptions: this.currentCalendarOptionsRefined,
+ pluginHooks,
+ availableLocaleData,
+ localeDefaults,
+ extra,
+ };
+ }
+ _computeCurrentViewData(viewType, optionsData, optionOverrides, dynamicOptionOverrides) {
+ let viewSpec = optionsData.viewSpecs[viewType];
+ if (!viewSpec) {
+ throw new Error(`viewType "${viewType}" is not available. Please make sure you've loaded all neccessary plugins`);
+ }
+ let { refinedOptions, extra } = this.processRawViewOptions(viewSpec, optionsData.pluginHooks, optionsData.localeDefaults, optionOverrides, dynamicOptionOverrides);
+ warnUnknownOptions(extra);
+ let dateProfileGenerator = this.buildDateProfileGenerator({
+ dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass,
+ duration: viewSpec.duration,
+ durationUnit: viewSpec.durationUnit,
+ usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime,
+ dateEnv: optionsData.dateEnv,
+ calendarApi: this.props.calendarApi,
+ slotMinTime: refinedOptions.slotMinTime,
+ slotMaxTime: refinedOptions.slotMaxTime,
+ showNonCurrentDates: refinedOptions.showNonCurrentDates,
+ dayCount: refinedOptions.dayCount,
+ dateAlignment: refinedOptions.dateAlignment,
+ dateIncrement: refinedOptions.dateIncrement,
+ hiddenDays: refinedOptions.hiddenDays,
+ weekends: refinedOptions.weekends,
+ nowInput: refinedOptions.now,
+ validRangeInput: refinedOptions.validRange,
+ visibleRangeInput: refinedOptions.visibleRange,
+ monthMode: refinedOptions.monthMode,
+ fixedWeekCount: refinedOptions.fixedWeekCount,
+ });
+ let viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);
+ return { viewSpec, options: refinedOptions, dateProfileGenerator, viewApi };
+ }
+ processRawViewOptions(viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {
+ let raw = mergeRawOptions([
+ BASE_OPTION_DEFAULTS,
+ viewSpec.optionDefaults,
+ localeDefaults,
+ optionOverrides,
+ viewSpec.optionOverrides,
+ dynamicOptionOverrides,
+ ]);
+ let refiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
+ let refined = {};
+ let currentRaw = this.currentViewOptionsInput;
+ let currentRefined = this.currentViewOptionsRefined;
+ let anyChanges = false;
+ let extra = {};
+ for (let optionName in raw) {
+ if (raw[optionName] === currentRaw[optionName] ||
+ (COMPLEX_OPTION_COMPARATORS[optionName] &&
+ COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], currentRaw[optionName]))) {
+ refined[optionName] = currentRefined[optionName];
+ }
+ else {
+ if (raw[optionName] === this.currentCalendarOptionsInput[optionName] ||
+ (COMPLEX_OPTION_COMPARATORS[optionName] &&
+ COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], this.currentCalendarOptionsInput[optionName]))) {
+ if (optionName in this.currentCalendarOptionsRefined) { // might be an "extra" prop
+ refined[optionName] = this.currentCalendarOptionsRefined[optionName];
+ }
+ }
+ else if (refiners[optionName]) {
+ refined[optionName] = refiners[optionName](raw[optionName]);
+ }
+ else {
+ extra[optionName] = raw[optionName];
+ }
+ anyChanges = true;
+ }
+ }
+ if (anyChanges) {
+ this.currentViewOptionsInput = raw;
+ this.currentViewOptionsRefined = refined;
+ }
+ return {
+ rawOptions: this.currentViewOptionsInput,
+ refinedOptions: this.currentViewOptionsRefined,
+ extra,
+ };
+ }
+ }
+ function buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
+ let locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);
+ return new DateEnv({
+ calendarSystem: 'gregory',
+ timeZone,
+ namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,
+ locale,
+ weekNumberCalculation,
+ firstDay,
+ weekText,
+ cmdFormatter: pluginHooks.cmdFormatter,
+ defaultSeparator,
+ });
+ }
+ function buildTheme(options, pluginHooks) {
+ let ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme;
+ return new ThemeClass(options);
+ }
+ function buildDateProfileGenerator(props) {
+ let DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator;
+ return new DateProfileGeneratorClass(props);
+ }
+ function buildViewApi(type, getCurrentData, dateEnv) {
+ return new ViewImpl(type, getCurrentData, dateEnv);
+ }
+ function buildEventUiBySource(eventSources) {
+ return mapHash(eventSources, (eventSource) => eventSource.ui);
+ }
+ function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
+ let eventUiBases = { '': eventUiSingleBase };
+ for (let defId in eventDefs) {
+ let def = eventDefs[defId];
+ if (def.sourceId && eventUiBySource[def.sourceId]) {
+ eventUiBases[defId] = eventUiBySource[def.sourceId];
+ }
+ }
+ return eventUiBases;
+ }
+ function buildViewUiProps(calendarContext) {
+ let { options } = calendarContext;
+ return {
+ eventUiSingleBase: createEventUi({
+ display: options.eventDisplay,
+ editable: options.editable,
+ startEditable: options.eventStartEditable,
+ durationEditable: options.eventDurationEditable,
+ constraint: options.eventConstraint,
+ overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,
+ allow: options.eventAllow,
+ backgroundColor: options.eventBackgroundColor,
+ borderColor: options.eventBorderColor,
+ textColor: options.eventTextColor,
+ color: options.eventColor,
+ // classNames: options.eventClassNames // render hook will handle this
+ }, calendarContext),
+ selectionConfig: createEventUi({
+ constraint: options.selectConstraint,
+ overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,
+ allow: options.selectAllow,
+ }, calendarContext),
+ };
+ }
+ function computeIsLoading(state, context) {
+ for (let isLoadingFunc of context.pluginHooks.isLoadingFuncs) {
+ if (isLoadingFunc(state)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function parseContextBusinessHours(calendarContext) {
+ return parseBusinessHours(calendarContext.options.businessHours, calendarContext);
+ }
+ function warnUnknownOptions(options, viewName) {
+ for (let optionName in options) {
+ console.warn(`Unknown option '${optionName}'` +
+ (viewName ? ` for view '${viewName}'` : ''));
+ }
+ }
+
+ class ToolbarSection extends BaseComponent {
+ render() {
+ let children = this.props.widgetGroups.map((widgetGroup) => this.renderWidgetGroup(widgetGroup));
+ return h('div', { className: 'fc-toolbar-chunk' }, ...children);
+ }
+ renderWidgetGroup(widgetGroup) {
+ let { props } = this;
+ let { theme } = this.context;
+ let children = [];
+ let isOnlyButtons = true;
+ for (let widget of widgetGroup) {
+ let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget;
+ if (buttonName === 'title') {
+ isOnlyButtons = false;
+ children.push(h("h2", { className: "fc-toolbar-title", id: props.titleId }, props.title));
+ }
+ else {
+ let isPressed = buttonName === props.activeButton;
+ let isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||
+ (!props.isPrevEnabled && buttonName === 'prev') ||
+ (!props.isNextEnabled && buttonName === 'next');
+ let buttonClasses = [`fc-${buttonName}-button`, theme.getClass('button')];
+ if (isPressed) {
+ buttonClasses.push(theme.getClass('buttonActive'));
+ }
+ children.push(h("button", { type: "button", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, "aria-pressed": isPressed, className: buttonClasses.join(' '), onClick: buttonClick }, buttonText || (buttonIcon ? h("span", { className: buttonIcon }) : '')));
+ }
+ }
+ if (children.length > 1) {
+ let groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';
+ return h('div', { className: groupClassName }, ...children);
+ }
+ return children[0];
+ }
+ }
+
+ class Toolbar extends BaseComponent {
+ render() {
+ let { model, extraClassName } = this.props;
+ let forceLtr = false;
+ let startContent;
+ let endContent;
+ let sectionWidgets = model.sectionWidgets;
+ let centerContent = sectionWidgets.center;
+ if (sectionWidgets.left) {
+ forceLtr = true;
+ startContent = sectionWidgets.left;
+ }
+ else {
+ startContent = sectionWidgets.start;
+ }
+ if (sectionWidgets.right) {
+ forceLtr = true;
+ endContent = sectionWidgets.right;
+ }
+ else {
+ endContent = sectionWidgets.end;
+ }
+ let classNames = [
+ extraClassName || '',
+ 'fc-toolbar',
+ forceLtr ? 'fc-toolbar-ltr' : '',
+ ];
+ return (h("div", { className: classNames.join(' ') },
+ this.renderSection('start', startContent || []),
+ this.renderSection('center', centerContent || []),
+ this.renderSection('end', endContent || [])));
+ }
+ renderSection(key, widgetGroups) {
+ let { props } = this;
+ return (h(ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled, titleId: props.titleId }));
+ }
+ }
+
+ // TODO: do function component?
+ class ViewContainer extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ availableWidth: null,
+ };
+ this.handleEl = (el) => {
+ this.el = el;
+ setRef(this.props.elRef, el);
+ this.updateAvailableWidth();
+ };
+ this.handleResize = () => {
+ this.updateAvailableWidth();
+ };
+ }
+ render() {
+ let { props, state } = this;
+ let { aspectRatio } = props;
+ let classNames = [
+ 'fc-view-harness',
+ (aspectRatio || props.liquid || props.height)
+ ? 'fc-view-harness-active' // harness controls the height
+ : 'fc-view-harness-passive', // let the view do the height
+ ];
+ let height = '';
+ let paddingBottom = '';
+ if (aspectRatio) {
+ if (state.availableWidth !== null) {
+ height = state.availableWidth / aspectRatio;
+ }
+ else {
+ // while waiting to know availableWidth, we can't set height to *zero*
+ // because will cause lots of unnecessary scrollbars within scrollgrid.
+ // BETTER: don't start rendering ANYTHING yet until we know container width
+ // NOTE: why not always use paddingBottom? Causes height oscillation (issue 5606)
+ paddingBottom = `${(1 / aspectRatio) * 100}%`;
+ }
+ }
+ else {
+ height = props.height || '';
+ }
+ return (h("div", { "aria-labelledby": props.labeledById, ref: this.handleEl, className: classNames.join(' '), style: { height, paddingBottom } }, props.children));
+ }
+ componentDidMount() {
+ this.context.addResizeHandler(this.handleResize);
+ }
+ componentWillUnmount() {
+ this.context.removeResizeHandler(this.handleResize);
+ }
+ updateAvailableWidth() {
+ if (this.el && // needed. but why?
+ this.props.aspectRatio // aspectRatio is the only height setting that needs availableWidth
+ ) {
+ this.setState({ availableWidth: this.el.offsetWidth });
+ }
+ }
+ }
+
+ /*
+ Detects when the user clicks on an event within a DateComponent
+ */
+ class EventClicking extends Interaction {
+ constructor(settings) {
+ super(settings);
+ this.handleSegClick = (ev, segEl) => {
+ let { component } = this;
+ let { context } = component;
+ let seg = getElSeg(segEl);
+ if (seg && // might be the <div> surrounding the more link
+ component.isValidSegDownEl(ev.target)) {
+ // our way to simulate a link click for elements that can't be <a> tags
+ // grab before trigger fired in case trigger trashes DOM thru rerendering
+ let hasUrlContainer = elementClosest(ev.target, '.fc-event-forced-url');
+ let url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
+ context.emitter.trigger('eventClick', {
+ el: segEl,
+ event: new EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),
+ jsEvent: ev,
+ view: context.viewApi,
+ });
+ if (url && !ev.defaultPrevented) {
+ window.location.href = url;
+ }
+ }
+ };
+ this.destroy = listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events
+ this.handleSegClick);
+ }
+ }
+
+ /*
+ Triggers events and adds/removes core classNames when the user's pointer
+ enters/leaves event-elements of a component.
+ */
+ class EventHovering extends Interaction {
+ constructor(settings) {
+ super(settings);
+ // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it
+ this.handleEventElRemove = (el) => {
+ if (el === this.currentSegEl) {
+ this.handleSegLeave(null, this.currentSegEl);
+ }
+ };
+ this.handleSegEnter = (ev, segEl) => {
+ if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
+ this.currentSegEl = segEl;
+ this.triggerEvent('eventMouseEnter', ev, segEl);
+ }
+ };
+ this.handleSegLeave = (ev, segEl) => {
+ if (this.currentSegEl) {
+ this.currentSegEl = null;
+ this.triggerEvent('eventMouseLeave', ev, segEl);
+ }
+ };
+ this.removeHoverListeners = listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events
+ this.handleSegEnter, this.handleSegLeave);
+ }
+ destroy() {
+ this.removeHoverListeners();
+ }
+ triggerEvent(publicEvName, ev, segEl) {
+ let { component } = this;
+ let { context } = component;
+ let seg = getElSeg(segEl);
+ if (!ev || component.isValidSegDownEl(ev.target)) {
+ context.emitter.trigger(publicEvName, {
+ el: segEl,
+ event: new EventImpl(context, seg.eventRange.def, seg.eventRange.instance),
+ jsEvent: ev,
+ view: context.viewApi,
+ });
+ }
+ }
+ }
+
+ class CalendarContent extends PureComponent {
+ constructor() {
+ super(...arguments);
+ this.buildViewContext = memoize(buildViewContext);
+ this.buildViewPropTransformers = memoize(buildViewPropTransformers);
+ this.buildToolbarProps = memoize(buildToolbarProps);
+ this.headerRef = y();
+ this.footerRef = y();
+ this.interactionsStore = {};
+ // eslint-disable-next-line
+ this.state = {
+ viewLabelId: getUniqueDomId(),
+ };
+ // Component Registration
+ // -----------------------------------------------------------------------------------------------------------------
+ this.registerInteractiveComponent = (component, settingsInput) => {
+ let settings = parseInteractionSettings(component, settingsInput);
+ let DEFAULT_INTERACTIONS = [
+ EventClicking,
+ EventHovering,
+ ];
+ let interactionClasses = DEFAULT_INTERACTIONS.concat(this.props.pluginHooks.componentInteractions);
+ let interactions = interactionClasses.map((TheInteractionClass) => new TheInteractionClass(settings));
+ this.interactionsStore[component.uid] = interactions;
+ interactionSettingsStore[component.uid] = settings;
+ };
+ this.unregisterInteractiveComponent = (component) => {
+ let listeners = this.interactionsStore[component.uid];
+ if (listeners) {
+ for (let listener of listeners) {
+ listener.destroy();
+ }
+ delete this.interactionsStore[component.uid];
+ }
+ delete interactionSettingsStore[component.uid];
+ };
+ // Resizing
+ // -----------------------------------------------------------------------------------------------------------------
+ this.resizeRunner = new DelayedRunner(() => {
+ this.props.emitter.trigger('_resize', true); // should window resizes be considered "forced" ?
+ this.props.emitter.trigger('windowResize', { view: this.props.viewApi });
+ });
+ this.handleWindowResize = (ev) => {
+ let { options } = this.props;
+ if (options.handleWindowResize &&
+ ev.target === window // avoid jqui events
+ ) {
+ this.resizeRunner.request(options.windowResizeDelay);
+ }
+ };
+ }
+ /*
+ renders INSIDE of an outer div
+ */
+ render() {
+ let { props } = this;
+ let { toolbarConfig, options } = props;
+ let toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, getNow(props.options.now, props.dateEnv), // TODO: use NowTimer????
+ props.viewTitle);
+ let viewVGrow = false;
+ let viewHeight = '';
+ let viewAspectRatio;
+ if (props.isHeightAuto || props.forPrint) {
+ viewHeight = '';
+ }
+ else if (options.height != null) {
+ viewVGrow = true;
+ }
+ else if (options.contentHeight != null) {
+ viewHeight = options.contentHeight;
+ }
+ else {
+ viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall
+ }
+ let viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);
+ let viewLabelId = (toolbarConfig.header && toolbarConfig.header.hasTitle)
+ ? this.state.viewLabelId
+ : '';
+ return (h(ViewContextType.Provider, { value: viewContext },
+ toolbarConfig.header && (h(Toolbar, Object.assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps))),
+ h(ViewContainer, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },
+ this.renderView(props),
+ this.buildAppendContent()),
+ toolbarConfig.footer && (h(Toolbar, Object.assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footer, titleId: "" }, toolbarProps)))));
+ }
+ componentDidMount() {
+ let { props } = this;
+ this.calendarInteractions = props.pluginHooks.calendarInteractions
+ .map((CalendarInteractionClass) => new CalendarInteractionClass(props));
+ window.addEventListener('resize', this.handleWindowResize);
+ let { propSetHandlers } = props.pluginHooks;
+ for (let propName in propSetHandlers) {
+ propSetHandlers[propName](props[propName], props);
+ }
+ }
+ componentDidUpdate(prevProps) {
+ let { props } = this;
+ let { propSetHandlers } = props.pluginHooks;
+ for (let propName in propSetHandlers) {
+ if (props[propName] !== prevProps[propName]) {
+ propSetHandlers[propName](props[propName], props);
+ }
+ }
+ }
+ componentWillUnmount() {
+ window.removeEventListener('resize', this.handleWindowResize);
+ this.resizeRunner.clear();
+ for (let interaction of this.calendarInteractions) {
+ interaction.destroy();
+ }
+ this.props.emitter.trigger('_unmount');
+ }
+ buildAppendContent() {
+ let { props } = this;
+ let children = props.pluginHooks.viewContainerAppends.map((buildAppendContent) => buildAppendContent(props));
+ return h(p, {}, ...children);
+ }
+ renderView(props) {
+ let { pluginHooks } = props;
+ let { viewSpec } = props;
+ let viewProps = {
+ dateProfile: props.dateProfile,
+ businessHours: props.businessHours,
+ eventStore: props.renderableEventStore,
+ eventUiBases: props.eventUiBases,
+ dateSelection: props.dateSelection,
+ eventSelection: props.eventSelection,
+ eventDrag: props.eventDrag,
+ eventResize: props.eventResize,
+ isHeightAuto: props.isHeightAuto,
+ forPrint: props.forPrint,
+ };
+ let transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);
+ for (let transformer of transformers) {
+ Object.assign(viewProps, transformer.transform(viewProps, props));
+ }
+ let ViewComponent = viewSpec.component;
+ return (h(ViewComponent, Object.assign({}, viewProps)));
+ }
+ }
+ function buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now, title) {
+ // don't force any date-profiles to valid date profiles (the `false`) so that we can tell if it's invalid
+ let todayInfo = dateProfileGenerator.build(now, undefined, false); // TODO: need `undefined` or else INFINITE LOOP for some reason
+ let prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate, false);
+ let nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate, false);
+ return {
+ title,
+ activeButton: viewSpec.type,
+ navUnit: viewSpec.singleUnit,
+ isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
+ isPrevEnabled: prevInfo.isValid,
+ isNextEnabled: nextInfo.isValid,
+ };
+ }
+ // Plugin
+ // -----------------------------------------------------------------------------------------------------------------
+ function buildViewPropTransformers(theClasses) {
+ return theClasses.map((TheClass) => new TheClass());
+ }
+
+ class Calendar extends CalendarImpl {
+ constructor(el, optionOverrides = {}) {
+ super();
+ this.isRendering = false;
+ this.isRendered = false;
+ this.currentClassNames = [];
+ this.customContentRenderId = 0;
+ this.handleAction = (action) => {
+ // actions we know we want to render immediately
+ switch (action.type) {
+ case 'SET_EVENT_DRAG':
+ case 'SET_EVENT_RESIZE':
+ this.renderRunner.tryDrain();
+ }
+ };
+ this.handleData = (data) => {
+ this.currentData = data;
+ this.renderRunner.request(data.calendarOptions.rerenderDelay);
+ };
+ this.handleRenderRequest = () => {
+ if (this.isRendering) {
+ this.isRendered = true;
+ let { currentData } = this;
+ flushSync(() => {
+ P$1(h(CalendarRoot, { options: currentData.calendarOptions, theme: currentData.theme, emitter: currentData.emitter }, (classNames, height, isHeightAuto, forPrint) => {
+ this.setClassNames(classNames);
+ this.setHeight(height);
+ return (h(RenderId.Provider, { value: this.customContentRenderId },
+ h(CalendarContent, Object.assign({ isHeightAuto: isHeightAuto, forPrint: forPrint }, currentData))));
+ }), this.el);
+ });
+ }
+ else if (this.isRendered) {
+ this.isRendered = false;
+ P$1(null, this.el);
+ this.setClassNames([]);
+ this.setHeight('');
+ }
+ };
+ this.el = el;
+ this.renderRunner = new DelayedRunner(this.handleRenderRequest);
+ new CalendarDataManager({
+ optionOverrides,
+ calendarApi: this,
+ onAction: this.handleAction,
+ onData: this.handleData,
+ });
+ }
+ render() {
+ let wasRendering = this.isRendering;
+ if (!wasRendering) {
+ this.isRendering = true;
+ }
+ else {
+ this.customContentRenderId += 1;
+ }
+ this.renderRunner.request();
+ if (wasRendering) {
+ this.updateSize();
+ }
+ }
+ destroy() {
+ if (this.isRendering) {
+ this.isRendering = false;
+ this.renderRunner.request();
+ }
+ }
+ updateSize() {
+ flushSync(() => {
+ super.updateSize();
+ });
+ }
+ batchRendering(func) {
+ this.renderRunner.pause('batchRendering');
+ func();
+ this.renderRunner.resume('batchRendering');
+ }
+ pauseRendering() {
+ this.renderRunner.pause('pauseRendering');
+ }
+ resumeRendering() {
+ this.renderRunner.resume('pauseRendering', true);
+ }
+ resetOptions(optionOverrides, append) {
+ this.currentDataManager.resetOptions(optionOverrides, append);
+ }
+ setClassNames(classNames) {
+ if (!isArraysEqual(classNames, this.currentClassNames)) {
+ let { classList } = this.el;
+ for (let className of this.currentClassNames) {
+ classList.remove(className);
+ }
+ for (let className of classNames) {
+ classList.add(className);
+ }
+ this.currentClassNames = classNames;
+ }
+ }
+ setHeight(height) {
+ applyStyleProp(this.el, 'height', height);
+ }
+ }
+
+ function formatDate(dateInput, options = {}) {
+ let dateEnv = buildDateEnv(options);
+ let formatter = createFormatter(options);
+ let dateMeta = dateEnv.createMarkerMeta(dateInput);
+ if (!dateMeta) { // TODO: warning?
+ return '';
+ }
+ return dateEnv.format(dateMeta.marker, formatter, {
+ forcedTzo: dateMeta.forcedTzo,
+ });
+ }
+ function formatRange(startInput, endInput, options) {
+ let dateEnv = buildDateEnv(typeof options === 'object' && options ? options : {}); // pass in if non-null object
+ let formatter = createFormatter(options);
+ let startMeta = dateEnv.createMarkerMeta(startInput);
+ let endMeta = dateEnv.createMarkerMeta(endInput);
+ if (!startMeta || !endMeta) { // TODO: warning?
+ return '';
+ }
+ return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {
+ forcedStartTzo: startMeta.forcedTzo,
+ forcedEndTzo: endMeta.forcedTzo,
+ isEndExclusive: options.isEndExclusive,
+ defaultSeparator: BASE_OPTION_DEFAULTS.defaultRangeSeparator,
+ });
+ }
+ // TODO: more DRY and optimized
+ function buildDateEnv(settings) {
+ let locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere
+ return new DateEnv(Object.assign(Object.assign({ timeZone: BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale }));
+ }
+
+ // HELPERS
+ /*
+ if nextDayThreshold is specified, slicing is done in an all-day fashion.
+ you can get nextDayThreshold from context.nextDayThreshold
+ */
+ function sliceEvents(props, allDay) {
+ return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
+ }
+
+ const version = '6.0.3';
+
+ config.touchMouseIgnoreWait = 500;
+ let ignoreMouseDepth = 0;
+ let listenerCnt = 0;
+ let isWindowTouchMoveCancelled = false;
+ /*
+ Uses a "pointer" abstraction, which monitors UI events for both mouse and touch.
+ Tracks when the pointer "drags" on a certain element, meaning down+move+up.
+
+ Also, tracks if there was touch-scrolling.
+ Also, can prevent touch-scrolling from happening.
+ Also, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.
+
+ emits:
+ - pointerdown
+ - pointermove
+ - pointerup
+ */
+ class PointerDragging {
+ constructor(containerEl) {
+ this.subjectEl = null;
+ // options that can be directly assigned by caller
+ this.selector = ''; // will cause subjectEl in all emitted events to be this element
+ this.handleSelector = '';
+ this.shouldIgnoreMove = false;
+ this.shouldWatchScroll = true; // for simulating pointermove on scroll
+ // internal states
+ this.isDragging = false;
+ this.isTouchDragging = false;
+ this.wasTouchScroll = false;
+ // Mouse
+ // ----------------------------------------------------------------------------------------------------
+ this.handleMouseDown = (ev) => {
+ if (!this.shouldIgnoreMouse() &&
+ isPrimaryMouseButton(ev) &&
+ this.tryStart(ev)) {
+ let pev = this.createEventFromMouse(ev, true);
+ this.emitter.trigger('pointerdown', pev);
+ this.initScrollWatch(pev);
+ if (!this.shouldIgnoreMove) {
+ document.addEventListener('mousemove', this.handleMouseMove);
+ }
+ document.addEventListener('mouseup', this.handleMouseUp);
+ }
+ };
+ this.handleMouseMove = (ev) => {
+ let pev = this.createEventFromMouse(ev);
+ this.recordCoords(pev);
+ this.emitter.trigger('pointermove', pev);
+ };
+ this.handleMouseUp = (ev) => {
+ document.removeEventListener('mousemove', this.handleMouseMove);
+ document.removeEventListener('mouseup', this.handleMouseUp);
+ this.emitter.trigger('pointerup', this.createEventFromMouse(ev));
+ this.cleanup(); // call last so that pointerup has access to props
+ };
+ // Touch
+ // ----------------------------------------------------------------------------------------------------
+ this.handleTouchStart = (ev) => {
+ if (this.tryStart(ev)) {
+ this.isTouchDragging = true;
+ let pev = this.createEventFromTouch(ev, true);
+ this.emitter.trigger('pointerdown', pev);
+ this.initScrollWatch(pev);
+ // unlike mouse, need to attach to target, not document
+ // https://stackoverflow.com/a/45760014
+ let targetEl = ev.target;
+ if (!this.shouldIgnoreMove) {
+ targetEl.addEventListener('touchmove', this.handleTouchMove);
+ }
+ targetEl.addEventListener('touchend', this.handleTouchEnd);
+ targetEl.addEventListener('touchcancel', this.handleTouchEnd); // treat it as a touch end
+ // attach a handler to get called when ANY scroll action happens on the page.
+ // this was impossible to do with normal on/off because 'scroll' doesn't bubble.
+ // http://stackoverflow.com/a/32954565/96342
+ window.addEventListener('scroll', this.handleTouchScroll, true);
+ }
+ };
+ this.handleTouchMove = (ev) => {
+ let pev = this.createEventFromTouch(ev);
+ this.recordCoords(pev);
+ this.emitter.trigger('pointermove', pev);
+ };
+ this.handleTouchEnd = (ev) => {
+ if (this.isDragging) { // done to guard against touchend followed by touchcancel
+ let targetEl = ev.target;
+ targetEl.removeEventListener('touchmove', this.handleTouchMove);
+ targetEl.removeEventListener('touchend', this.handleTouchEnd);
+ targetEl.removeEventListener('touchcancel', this.handleTouchEnd);
+ window.removeEventListener('scroll', this.handleTouchScroll, true); // useCaptured=true
+ this.emitter.trigger('pointerup', this.createEventFromTouch(ev));
+ this.cleanup(); // call last so that pointerup has access to props
+ this.isTouchDragging = false;
+ startIgnoringMouse();
+ }
+ };
+ this.handleTouchScroll = () => {
+ this.wasTouchScroll = true;
+ };
+ this.handleScroll = (ev) => {
+ if (!this.shouldIgnoreMove) {
+ let pageX = (window.pageXOffset - this.prevScrollX) + this.prevPageX;
+ let pageY = (window.pageYOffset - this.prevScrollY) + this.prevPageY;
+ this.emitter.trigger('pointermove', {
+ origEvent: ev,
+ isTouch: this.isTouchDragging,
+ subjectEl: this.subjectEl,
+ pageX,
+ pageY,
+ deltaX: pageX - this.origPageX,
+ deltaY: pageY - this.origPageY,
+ });
+ }
+ };
+ this.containerEl = containerEl;
+ this.emitter = new Emitter();
+ containerEl.addEventListener('mousedown', this.handleMouseDown);
+ containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true });
+ listenerCreated();
+ }
+ destroy() {
+ this.containerEl.removeEventListener('mousedown', this.handleMouseDown);
+ this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true });
+ listenerDestroyed();
+ }
+ tryStart(ev) {
+ let subjectEl = this.querySubjectEl(ev);
+ let downEl = ev.target;
+ if (subjectEl &&
+ (!this.handleSelector || elementClosest(downEl, this.handleSelector))) {
+ this.subjectEl = subjectEl;
+ this.isDragging = true; // do this first so cancelTouchScroll will work
+ this.wasTouchScroll = false;
+ return true;
+ }
+ return false;
+ }
+ cleanup() {
+ isWindowTouchMoveCancelled = false;
+ this.isDragging = false;
+ this.subjectEl = null;
+ // keep wasTouchScroll around for later access
+ this.destroyScrollWatch();
+ }
+ querySubjectEl(ev) {
+ if (this.selector) {
+ return elementClosest(ev.target, this.selector);
+ }
+ return this.containerEl;
+ }
+ shouldIgnoreMouse() {
+ return ignoreMouseDepth || this.isTouchDragging;
+ }
+ // can be called by user of this class, to cancel touch-based scrolling for the current drag
+ cancelTouchScroll() {
+ if (this.isDragging) {
+ isWindowTouchMoveCancelled = true;
+ }
+ }
+ // Scrolling that simulates pointermoves
+ // ----------------------------------------------------------------------------------------------------
+ initScrollWatch(ev) {
+ if (this.shouldWatchScroll) {
+ this.recordCoords(ev);
+ window.addEventListener('scroll', this.handleScroll, true); // useCapture=true
+ }
+ }
+ recordCoords(ev) {
+ if (this.shouldWatchScroll) {
+ this.prevPageX = ev.pageX;
+ this.prevPageY = ev.pageY;
+ this.prevScrollX = window.pageXOffset;
+ this.prevScrollY = window.pageYOffset;
+ }
+ }
+ destroyScrollWatch() {
+ if (this.shouldWatchScroll) {
+ window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true
+ }
+ }
+ // Event Normalization
+ // ----------------------------------------------------------------------------------------------------
+ createEventFromMouse(ev, isFirst) {
+ let deltaX = 0;
+ let deltaY = 0;
+ // TODO: repeat code
+ if (isFirst) {
+ this.origPageX = ev.pageX;
+ this.origPageY = ev.pageY;
+ }
+ else {
+ deltaX = ev.pageX - this.origPageX;
+ deltaY = ev.pageY - this.origPageY;
+ }
+ return {
+ origEvent: ev,
+ isTouch: false,
+ subjectEl: this.subjectEl,
+ pageX: ev.pageX,
+ pageY: ev.pageY,
+ deltaX,
+ deltaY,
+ };
+ }
+ createEventFromTouch(ev, isFirst) {
+ let touches = ev.touches;
+ let pageX;
+ let pageY;
+ let deltaX = 0;
+ let deltaY = 0;
+ // if touch coords available, prefer,
+ // because FF would give bad ev.pageX ev.pageY
+ if (touches && touches.length) {
+ pageX = touches[0].pageX;
+ pageY = touches[0].pageY;
+ }
+ else {
+ pageX = ev.pageX;
+ pageY = ev.pageY;
+ }
+ // TODO: repeat code
+ if (isFirst) {
+ this.origPageX = pageX;
+ this.origPageY = pageY;
+ }
+ else {
+ deltaX = pageX - this.origPageX;
+ deltaY = pageY - this.origPageY;
+ }
+ return {
+ origEvent: ev,
+ isTouch: true,
+ subjectEl: this.subjectEl,
+ pageX,
+ pageY,
+ deltaX,
+ deltaY,
+ };
+ }
+ }
+ // Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)
+ function isPrimaryMouseButton(ev) {
+ return ev.button === 0 && !ev.ctrlKey;
+ }
+ // Ignoring fake mouse events generated by touch
+ // ----------------------------------------------------------------------------------------------------
+ function startIgnoringMouse() {
+ ignoreMouseDepth += 1;
+ setTimeout(() => {
+ ignoreMouseDepth -= 1;
+ }, config.touchMouseIgnoreWait);
+ }
+ // We want to attach touchmove as early as possible for Safari
+ // ----------------------------------------------------------------------------------------------------
+ function listenerCreated() {
+ listenerCnt += 1;
+ if (listenerCnt === 1) {
+ window.addEventListener('touchmove', onWindowTouchMove, { passive: false });
+ }
+ }
+ function listenerDestroyed() {
+ listenerCnt -= 1;
+ if (!listenerCnt) {
+ window.removeEventListener('touchmove', onWindowTouchMove, { passive: false });
+ }
+ }
+ function onWindowTouchMove(ev) {
+ if (isWindowTouchMoveCancelled) {
+ ev.preventDefault();
+ }
+ }
+
+ /*
+ An effect in which an element follows the movement of a pointer across the screen.
+ The moving element is a clone of some other element.
+ Must call start + handleMove + stop.
+ */
+ class ElementMirror {
+ constructor() {
+ this.isVisible = false; // must be explicitly enabled
+ this.sourceEl = null;
+ this.mirrorEl = null;
+ this.sourceElRect = null; // screen coords relative to viewport
+ // options that can be set directly by caller
+ this.parentNode = document.body; // HIGHLY SUGGESTED to set this to sidestep ShadowDOM issues
+ this.zIndex = 9999;
+ this.revertDuration = 0;
+ }
+ start(sourceEl, pageX, pageY) {
+ this.sourceEl = sourceEl;
+ this.sourceElRect = this.sourceEl.getBoundingClientRect();
+ this.origScreenX = pageX - window.pageXOffset;
+ this.origScreenY = pageY - window.pageYOffset;
+ this.deltaX = 0;
+ this.deltaY = 0;
+ this.updateElPosition();
+ }
+ handleMove(pageX, pageY) {
+ this.deltaX = (pageX - window.pageXOffset) - this.origScreenX;
+ this.deltaY = (pageY - window.pageYOffset) - this.origScreenY;
+ this.updateElPosition();
+ }
+ // can be called before start
+ setIsVisible(bool) {
+ if (bool) {
+ if (!this.isVisible) {
+ if (this.mirrorEl) {
+ this.mirrorEl.style.display = '';
+ }
+ this.isVisible = bool; // needs to happen before updateElPosition
+ this.updateElPosition(); // because was not updating the position while invisible
+ }
+ }
+ else if (this.isVisible) {
+ if (this.mirrorEl) {
+ this.mirrorEl.style.display = 'none';
+ }
+ this.isVisible = bool;
+ }
+ }
+ // always async
+ stop(needsRevertAnimation, callback) {
+ let done = () => {
+ this.cleanup();
+ callback();
+ };
+ if (needsRevertAnimation &&
+ this.mirrorEl &&
+ this.isVisible &&
+ this.revertDuration && // if 0, transition won't work
+ (this.deltaX || this.deltaY) // if same coords, transition won't work
+ ) {
+ this.doRevertAnimation(done, this.revertDuration);
+ }
+ else {
+ setTimeout(done, 0);
+ }
+ }
+ doRevertAnimation(callback, revertDuration) {
+ let mirrorEl = this.mirrorEl;
+ let finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened
+ mirrorEl.style.transition =
+ 'top ' + revertDuration + 'ms,' +
+ 'left ' + revertDuration + 'ms';
+ applyStyle(mirrorEl, {
+ left: finalSourceElRect.left,
+ top: finalSourceElRect.top,
+ });
+ whenTransitionDone(mirrorEl, () => {
+ mirrorEl.style.transition = '';
+ callback();
+ });
+ }
+ cleanup() {
+ if (this.mirrorEl) {
+ removeElement(this.mirrorEl);
+ this.mirrorEl = null;
+ }
+ this.sourceEl = null;
+ }
+ updateElPosition() {
+ if (this.sourceEl && this.isVisible) {
+ applyStyle(this.getMirrorEl(), {
+ left: this.sourceElRect.left + this.deltaX,
+ top: this.sourceElRect.top + this.deltaY,
+ });
+ }
+ }
+ getMirrorEl() {
+ let sourceElRect = this.sourceElRect;
+ let mirrorEl = this.mirrorEl;
+ if (!mirrorEl) {
+ mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true
+ // we don't want long taps or any mouse interaction causing selection/menus.
+ // would use preventSelection(), but that prevents selectstart, causing problems.
+ mirrorEl.classList.add('fc-unselectable');
+ mirrorEl.classList.add('fc-event-dragging');
+ applyStyle(mirrorEl, {
+ position: 'fixed',
+ zIndex: this.zIndex,
+ visibility: '',
+ boxSizing: 'border-box',
+ width: sourceElRect.right - sourceElRect.left,
+ height: sourceElRect.bottom - sourceElRect.top,
+ right: 'auto',
+ bottom: 'auto',
+ margin: 0,
+ });
+ this.parentNode.appendChild(mirrorEl);
+ }
+ return mirrorEl;
+ }
+ }
+
+ /*
+ Is a cache for a given element's scroll information (all the info that ScrollController stores)
+ in addition the "client rectangle" of the element.. the area within the scrollbars.
+
+ The cache can be in one of two modes:
+ - doesListening:false - ignores when the container is scrolled by someone else
+ - doesListening:true - watch for scrolling and update the cache
+ */
+ class ScrollGeomCache extends ScrollController {
+ constructor(scrollController, doesListening) {
+ super();
+ this.handleScroll = () => {
+ this.scrollTop = this.scrollController.getScrollTop();
+ this.scrollLeft = this.scrollController.getScrollLeft();
+ this.handleScrollChange();
+ };
+ this.scrollController = scrollController;
+ this.doesListening = doesListening;
+ this.scrollTop = this.origScrollTop = scrollController.getScrollTop();
+ this.scrollLeft = this.origScrollLeft = scrollController.getScrollLeft();
+ this.scrollWidth = scrollController.getScrollWidth();
+ this.scrollHeight = scrollController.getScrollHeight();
+ this.clientWidth = scrollController.getClientWidth();
+ this.clientHeight = scrollController.getClientHeight();
+ this.clientRect = this.computeClientRect(); // do last in case it needs cached values
+ if (this.doesListening) {
+ this.getEventTarget().addEventListener('scroll', this.handleScroll);
+ }
+ }
+ destroy() {
+ if (this.doesListening) {
+ this.getEventTarget().removeEventListener('scroll', this.handleScroll);
+ }
+ }
+ getScrollTop() {
+ return this.scrollTop;
+ }
+ getScrollLeft() {
+ return this.scrollLeft;
+ }
+ setScrollTop(top) {
+ this.scrollController.setScrollTop(top);
+ if (!this.doesListening) {
+ // we are not relying on the element to normalize out-of-bounds scroll values
+ // so we need to sanitize ourselves
+ this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);
+ this.handleScrollChange();
+ }
+ }
+ setScrollLeft(top) {
+ this.scrollController.setScrollLeft(top);
+ if (!this.doesListening) {
+ // we are not relying on the element to normalize out-of-bounds scroll values
+ // so we need to sanitize ourselves
+ this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);
+ this.handleScrollChange();
+ }
+ }
+ getClientWidth() {
+ return this.clientWidth;
+ }
+ getClientHeight() {
+ return this.clientHeight;
+ }
+ getScrollWidth() {
+ return this.scrollWidth;
+ }
+ getScrollHeight() {
+ return this.scrollHeight;
+ }
+ handleScrollChange() {
+ }
+ }
+
+ class ElementScrollGeomCache extends ScrollGeomCache {
+ constructor(el, doesListening) {
+ super(new ElementScrollController(el), doesListening);
+ }
+ getEventTarget() {
+ return this.scrollController.el;
+ }
+ computeClientRect() {
+ return computeInnerRect(this.scrollController.el);
+ }
+ }
+
+ class WindowScrollGeomCache extends ScrollGeomCache {
+ constructor(doesListening) {
+ super(new WindowScrollController(), doesListening);
+ }
+ getEventTarget() {
+ return window;
+ }
+ computeClientRect() {
+ return {
+ left: this.scrollLeft,
+ right: this.scrollLeft + this.clientWidth,
+ top: this.scrollTop,
+ bottom: this.scrollTop + this.clientHeight,
+ };
+ }
+ // the window is the only scroll object that changes it's rectangle relative
+ // to the document's topleft as it scrolls
+ handleScrollChange() {
+ this.clientRect = this.computeClientRect();
+ }
+ }
+
+ // If available we are using native "performance" API instead of "Date"
+ // Read more about it on MDN:
+ // https://developer.mozilla.org/en-US/docs/Web/API/Performance
+ const getTime = typeof performance === 'function' ? performance.now : Date.now;
+ /*
+ For a pointer interaction, automatically scrolls certain scroll containers when the pointer
+ approaches the edge.
+
+ The caller must call start + handleMove + stop.
+ */
+ class AutoScroller {
+ constructor() {
+ // options that can be set by caller
+ this.isEnabled = true;
+ this.scrollQuery = [window, '.fc-scroller'];
+ this.edgeThreshold = 50; // pixels
+ this.maxVelocity = 300; // pixels per second
+ // internal state
+ this.pointerScreenX = null;
+ this.pointerScreenY = null;
+ this.isAnimating = false;
+ this.scrollCaches = null;
+ // protect against the initial pointerdown being too close to an edge and starting the scroll
+ this.everMovedUp = false;
+ this.everMovedDown = false;
+ this.everMovedLeft = false;
+ this.everMovedRight = false;
+ this.animate = () => {
+ if (this.isAnimating) { // wasn't cancelled between animation calls
+ let edge = this.computeBestEdge(this.pointerScreenX + window.pageXOffset, this.pointerScreenY + window.pageYOffset);
+ if (edge) {
+ let now = getTime();
+ this.handleSide(edge, (now - this.msSinceRequest) / 1000);
+ this.requestAnimation(now);
+ }
+ else {
+ this.isAnimating = false; // will stop animation
+ }
+ }
+ };
+ }
+ start(pageX, pageY, scrollStartEl) {
+ if (this.isEnabled) {
+ this.scrollCaches = this.buildCaches(scrollStartEl);
+ this.pointerScreenX = null;
+ this.pointerScreenY = null;
+ this.everMovedUp = false;
+ this.everMovedDown = false;
+ this.everMovedLeft = false;
+ this.everMovedRight = false;
+ this.handleMove(pageX, pageY);
+ }
+ }
+ handleMove(pageX, pageY) {
+ if (this.isEnabled) {
+ let pointerScreenX = pageX - window.pageXOffset;
+ let pointerScreenY = pageY - window.pageYOffset;
+ let yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;
+ let xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;
+ if (yDelta < 0) {
+ this.everMovedUp = true;
+ }
+ else if (yDelta > 0) {
+ this.everMovedDown = true;
+ }
+ if (xDelta < 0) {
+ this.everMovedLeft = true;
+ }
+ else if (xDelta > 0) {
+ this.everMovedRight = true;
+ }
+ this.pointerScreenX = pointerScreenX;
+ this.pointerScreenY = pointerScreenY;
+ if (!this.isAnimating) {
+ this.isAnimating = true;
+ this.requestAnimation(getTime());
+ }
+ }
+ }
+ stop() {
+ if (this.isEnabled) {
+ this.isAnimating = false; // will stop animation
+ for (let scrollCache of this.scrollCaches) {
+ scrollCache.destroy();
+ }
+ this.scrollCaches = null;
+ }
+ }
+ requestAnimation(now) {
+ this.msSinceRequest = now;
+ requestAnimationFrame(this.animate);
+ }
+ handleSide(edge, seconds) {
+ let { scrollCache } = edge;
+ let { edgeThreshold } = this;
+ let invDistance = edgeThreshold - edge.distance;
+ let velocity = // the closer to the edge, the faster we scroll
+ ((invDistance * invDistance) / (edgeThreshold * edgeThreshold)) * // quadratic
+ this.maxVelocity * seconds;
+ let sign = 1;
+ switch (edge.name) {
+ case 'left':
+ sign = -1;
+ // falls through
+ case 'right':
+ scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);
+ break;
+ case 'top':
+ sign = -1;
+ // falls through
+ case 'bottom':
+ scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);
+ break;
+ }
+ }
+ // left/top are relative to document topleft
+ computeBestEdge(left, top) {
+ let { edgeThreshold } = this;
+ let bestSide = null;
+ let scrollCaches = this.scrollCaches || [];
+ for (let scrollCache of scrollCaches) {
+ let rect = scrollCache.clientRect;
+ let leftDist = left - rect.left;
+ let rightDist = rect.right - left;
+ let topDist = top - rect.top;
+ let bottomDist = rect.bottom - top;
+ // completely within the rect?
+ if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {
+ if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&
+ (!bestSide || bestSide.distance > topDist)) {
+ bestSide = { scrollCache, name: 'top', distance: topDist };
+ }
+ if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&
+ (!bestSide || bestSide.distance > bottomDist)) {
+ bestSide = { scrollCache, name: 'bottom', distance: bottomDist };
+ }
+ if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&
+ (!bestSide || bestSide.distance > leftDist)) {
+ bestSide = { scrollCache, name: 'left', distance: leftDist };
+ }
+ if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&
+ (!bestSide || bestSide.distance > rightDist)) {
+ bestSide = { scrollCache, name: 'right', distance: rightDist };
+ }
+ }
+ }
+ return bestSide;
+ }
+ buildCaches(scrollStartEl) {
+ return this.queryScrollEls(scrollStartEl).map((el) => {
+ if (el === window) {
+ return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls
+ }
+ return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls
+ });
+ }
+ queryScrollEls(scrollStartEl) {
+ let els = [];
+ for (let query of this.scrollQuery) {
+ if (typeof query === 'object') {
+ els.push(query);
+ }
+ else {
+ els.push(...Array.prototype.slice.call(getElRoot(scrollStartEl).querySelectorAll(query)));
+ }
+ }
+ return els;
+ }
+ }
+
+ /*
+ Monitors dragging on an element. Has a number of high-level features:
+ - minimum distance required before dragging
+ - minimum wait time ("delay") before dragging
+ - a mirror element that follows the pointer
+ */
+ class FeaturefulElementDragging extends ElementDragging {
+ constructor(containerEl, selector) {
+ super(containerEl);
+ this.containerEl = containerEl;
+ // options that can be directly set by caller
+ // the caller can also set the PointerDragging's options as well
+ this.delay = null;
+ this.minDistance = 0;
+ this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag
+ this.mirrorNeedsRevert = false;
+ this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup
+ this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation
+ this.isDelayEnded = false;
+ this.isDistanceSurpassed = false;
+ this.delayTimeoutId = null;
+ this.onPointerDown = (ev) => {
+ if (!this.isDragging) { // so new drag doesn't happen while revert animation is going
+ this.isInteracting = true;
+ this.isDelayEnded = false;
+ this.isDistanceSurpassed = false;
+ preventSelection(document.body);
+ preventContextMenu(document.body);
+ // prevent links from being visited if there's an eventual drag.
+ // also prevents selection in older browsers (maybe?).
+ // not necessary for touch, besides, browser would complain about passiveness.
+ if (!ev.isTouch) {
+ ev.origEvent.preventDefault();
+ }
+ this.emitter.trigger('pointerdown', ev);
+ if (this.isInteracting && // not destroyed via pointerdown handler
+ !this.pointer.shouldIgnoreMove) {
+ // actions related to initiating dragstart+dragmove+dragend...
+ this.mirror.setIsVisible(false); // reset. caller must set-visible
+ this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down
+ this.startDelay(ev);
+ if (!this.minDistance) {
+ this.handleDistanceSurpassed(ev);
+ }
+ }
+ }
+ };
+ this.onPointerMove = (ev) => {
+ if (this.isInteracting) {
+ this.emitter.trigger('pointermove', ev);
+ if (!this.isDistanceSurpassed) {
+ let minDistance = this.minDistance;
+ let distanceSq; // current distance from the origin, squared
+ let { deltaX, deltaY } = ev;
+ distanceSq = deltaX * deltaX + deltaY * deltaY;
+ if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem
+ this.handleDistanceSurpassed(ev);
+ }
+ }
+ if (this.isDragging) {
+ // a real pointer move? (not one simulated by scrolling)
+ if (ev.origEvent.type !== 'scroll') {
+ this.mirror.handleMove(ev.pageX, ev.pageY);
+ this.autoScroller.handleMove(ev.pageX, ev.pageY);
+ }
+ this.emitter.trigger('dragmove', ev);
+ }
+ }
+ };
+ this.onPointerUp = (ev) => {
+ if (this.isInteracting) {
+ this.isInteracting = false;
+ allowSelection(document.body);
+ allowContextMenu(document.body);
+ this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert
+ if (this.isDragging) {
+ this.autoScroller.stop();
+ this.tryStopDrag(ev); // which will stop the mirror
+ }
+ if (this.delayTimeoutId) {
+ clearTimeout(this.delayTimeoutId);
+ this.delayTimeoutId = null;
+ }
+ }
+ };
+ let pointer = this.pointer = new PointerDragging(containerEl);
+ pointer.emitter.on('pointerdown', this.onPointerDown);
+ pointer.emitter.on('pointermove', this.onPointerMove);
+ pointer.emitter.on('pointerup', this.onPointerUp);
+ if (selector) {
+ pointer.selector = selector;
+ }
+ this.mirror = new ElementMirror();
+ this.autoScroller = new AutoScroller();
+ }
+ destroy() {
+ this.pointer.destroy();
+ // HACK: simulate a pointer-up to end the current drag
+ // TODO: fire 'dragend' directly and stop interaction. discourage use of pointerup event (b/c might not fire)
+ this.onPointerUp({});
+ }
+ startDelay(ev) {
+ if (typeof this.delay === 'number') {
+ this.delayTimeoutId = setTimeout(() => {
+ this.delayTimeoutId = null;
+ this.handleDelayEnd(ev);
+ }, this.delay); // not assignable to number!
+ }
+ else {
+ this.handleDelayEnd(ev);
+ }
+ }
+ handleDelayEnd(ev) {
+ this.isDelayEnded = true;
+ this.tryStartDrag(ev);
+ }
+ handleDistanceSurpassed(ev) {
+ this.isDistanceSurpassed = true;
+ this.tryStartDrag(ev);
+ }
+ tryStartDrag(ev) {
+ if (this.isDelayEnded && this.isDistanceSurpassed) {
+ if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {
+ this.isDragging = true;
+ this.mirrorNeedsRevert = false;
+ this.autoScroller.start(ev.pageX, ev.pageY, this.containerEl);
+ this.emitter.trigger('dragstart', ev);
+ if (this.touchScrollAllowed === false) {
+ this.pointer.cancelTouchScroll();
+ }
+ }
+ }
+ }
+ tryStopDrag(ev) {
+ // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events
+ // that come from the document to fire beforehand. much more convenient this way.
+ this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev));
+ }
+ stopDrag(ev) {
+ this.isDragging = false;
+ this.emitter.trigger('dragend', ev);
+ }
+ // fill in the implementations...
+ setIgnoreMove(bool) {
+ this.pointer.shouldIgnoreMove = bool;
+ }
+ setMirrorIsVisible(bool) {
+ this.mirror.setIsVisible(bool);
+ }
+ setMirrorNeedsRevert(bool) {
+ this.mirrorNeedsRevert = bool;
+ }
+ setAutoScrollEnabled(bool) {
+ this.autoScroller.isEnabled = bool;
+ }
+ }
+
+ /*
+ When this class is instantiated, it records the offset of an element (relative to the document topleft),
+ and continues to monitor scrolling, updating the cached coordinates if it needs to.
+ Does not access the DOM after instantiation, so highly performant.
+
+ Also keeps track of all scrolling/overflow:hidden containers that are parents of the given element
+ and an determine if a given point is inside the combined clipping rectangle.
+ */
+ class OffsetTracker {
+ constructor(el) {
+ this.origRect = computeRect(el);
+ // will work fine for divs that have overflow:hidden
+ this.scrollCaches = getClippingParents(el).map((scrollEl) => new ElementScrollGeomCache(scrollEl, true));
+ }
+ destroy() {
+ for (let scrollCache of this.scrollCaches) {
+ scrollCache.destroy();
+ }
+ }
+ computeLeft() {
+ let left = this.origRect.left;
+ for (let scrollCache of this.scrollCaches) {
+ left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();
+ }
+ return left;
+ }
+ computeTop() {
+ let top = this.origRect.top;
+ for (let scrollCache of this.scrollCaches) {
+ top += scrollCache.origScrollTop - scrollCache.getScrollTop();
+ }
+ return top;
+ }
+ isWithinClipping(pageX, pageY) {
+ let point = { left: pageX, top: pageY };
+ for (let scrollCache of this.scrollCaches) {
+ if (!isIgnoredClipping(scrollCache.getEventTarget()) &&
+ !pointInsideRect(point, scrollCache.clientRect)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ // certain clipping containers should never constrain interactions, like <html> and <body>
+ // https://github.com/fullcalendar/fullcalendar/issues/3615
+ function isIgnoredClipping(node) {
+ let tagName = node.tagName;
+ return tagName === 'HTML' || tagName === 'BODY';
+ }
+
+ /*
+ Tracks movement over multiple droppable areas (aka "hits")
+ that exist in one or more DateComponents.
+ Relies on an existing draggable.
+
+ emits:
+ - pointerdown
+ - dragstart
+ - hitchange - fires initially, even if not over a hit
+ - pointerup
+ - (hitchange - again, to null, if ended over a hit)
+ - dragend
+ */
+ class HitDragging {
+ constructor(dragging, droppableStore) {
+ // options that can be set by caller
+ this.useSubjectCenter = false;
+ this.requireInitial = true; // if doesn't start out on a hit, won't emit any events
+ this.initialHit = null;
+ this.movingHit = null;
+ this.finalHit = null; // won't ever be populated if shouldIgnoreMove
+ this.handlePointerDown = (ev) => {
+ let { dragging } = this;
+ this.initialHit = null;
+ this.movingHit = null;
+ this.finalHit = null;
+ this.prepareHits();
+ this.processFirstCoord(ev);
+ if (this.initialHit || !this.requireInitial) {
+ dragging.setIgnoreMove(false);
+ // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(
+ this.emitter.trigger('pointerdown', ev);
+ }
+ else {
+ dragging.setIgnoreMove(true);
+ }
+ };
+ this.handleDragStart = (ev) => {
+ this.emitter.trigger('dragstart', ev);
+ this.handleMove(ev, true); // force = fire even if initially null
+ };
+ this.handleDragMove = (ev) => {
+ this.emitter.trigger('dragmove', ev);
+ this.handleMove(ev);
+ };
+ this.handlePointerUp = (ev) => {
+ this.releaseHits();
+ this.emitter.trigger('pointerup', ev);
+ };
+ this.handleDragEnd = (ev) => {
+ if (this.movingHit) {
+ this.emitter.trigger('hitupdate', null, true, ev);
+ }
+ this.finalHit = this.movingHit;
+ this.movingHit = null;
+ this.emitter.trigger('dragend', ev);
+ };
+ this.droppableStore = droppableStore;
+ dragging.emitter.on('pointerdown', this.handlePointerDown);
+ dragging.emitter.on('dragstart', this.handleDragStart);
+ dragging.emitter.on('dragmove', this.handleDragMove);
+ dragging.emitter.on('pointerup', this.handlePointerUp);
+ dragging.emitter.on('dragend', this.handleDragEnd);
+ this.dragging = dragging;
+ this.emitter = new Emitter();
+ }
+ // sets initialHit
+ // sets coordAdjust
+ processFirstCoord(ev) {
+ let origPoint = { left: ev.pageX, top: ev.pageY };
+ let adjustedPoint = origPoint;
+ let subjectEl = ev.subjectEl;
+ let subjectRect;
+ if (subjectEl instanceof HTMLElement) { // i.e. not a Document/ShadowRoot
+ subjectRect = computeRect(subjectEl);
+ adjustedPoint = constrainPoint(adjustedPoint, subjectRect);
+ }
+ let initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);
+ if (initialHit) {
+ if (this.useSubjectCenter && subjectRect) {
+ let slicedSubjectRect = intersectRects(subjectRect, initialHit.rect);
+ if (slicedSubjectRect) {
+ adjustedPoint = getRectCenter(slicedSubjectRect);
+ }
+ }
+ this.coordAdjust = diffPoints(adjustedPoint, origPoint);
+ }
+ else {
+ this.coordAdjust = { left: 0, top: 0 };
+ }
+ }
+ handleMove(ev, forceHandle) {
+ let hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);
+ if (forceHandle || !isHitsEqual(this.movingHit, hit)) {
+ this.movingHit = hit;
+ this.emitter.trigger('hitupdate', hit, false, ev);
+ }
+ }
+ prepareHits() {
+ this.offsetTrackers = mapHash(this.droppableStore, (interactionSettings) => {
+ interactionSettings.component.prepareHits();
+ return new OffsetTracker(interactionSettings.el);
+ });
+ }
+ releaseHits() {
+ let { offsetTrackers } = this;
+ for (let id in offsetTrackers) {
+ offsetTrackers[id].destroy();
+ }
+ this.offsetTrackers = {};
+ }
+ queryHitForOffset(offsetLeft, offsetTop) {
+ let { droppableStore, offsetTrackers } = this;
+ let bestHit = null;
+ for (let id in droppableStore) {
+ let component = droppableStore[id].component;
+ let offsetTracker = offsetTrackers[id];
+ if (offsetTracker && // wasn't destroyed mid-drag
+ offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {
+ let originLeft = offsetTracker.computeLeft();
+ let originTop = offsetTracker.computeTop();
+ let positionLeft = offsetLeft - originLeft;
+ let positionTop = offsetTop - originTop;
+ let { origRect } = offsetTracker;
+ let width = origRect.right - origRect.left;
+ let height = origRect.bottom - origRect.top;
+ if (
+ // must be within the element's bounds
+ positionLeft >= 0 && positionLeft < width &&
+ positionTop >= 0 && positionTop < height) {
+ let hit = component.queryHit(positionLeft, positionTop, width, height);
+ if (hit && (
+ // make sure the hit is within activeRange, meaning it's not a dead cell
+ rangeContainsRange(hit.dateProfile.activeRange, hit.dateSpan.range)) &&
+ (!bestHit || hit.layer > bestHit.layer)) {
+ hit.componentId = id;
+ hit.context = component.context;
+ // TODO: better way to re-orient rectangle
+ hit.rect.left += originLeft;
+ hit.rect.right += originLeft;
+ hit.rect.top += originTop;
+ hit.rect.bottom += originTop;
+ bestHit = hit;
+ }
+ }
+ }
+ }
+ return bestHit;
+ }
+ }
+ function isHitsEqual(hit0, hit1) {
+ if (!hit0 && !hit1) {
+ return true;
+ }
+ if (Boolean(hit0) !== Boolean(hit1)) {
+ return false;
+ }
+ return isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);
+ }
+
+ function buildDatePointApiWithContext(dateSpan, context) {
+ let props = {};
+ for (let transform of context.pluginHooks.datePointTransforms) {
+ Object.assign(props, transform(dateSpan, context));
+ }
+ Object.assign(props, buildDatePointApi(dateSpan, context.dateEnv));
+ return props;
+ }
+ function buildDatePointApi(span, dateEnv) {
+ return {
+ date: dateEnv.toDate(span.range.start),
+ dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),
+ allDay: span.allDay,
+ };
+ }
+
+ /*
+ Monitors when the user clicks on a specific date/time of a component.
+ A pointerdown+pointerup on the same "hit" constitutes a click.
+ */
+ class DateClicking extends Interaction {
+ constructor(settings) {
+ super(settings);
+ this.handlePointerDown = (pev) => {
+ let { dragging } = this;
+ let downEl = pev.origEvent.target;
+ // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired
+ dragging.setIgnoreMove(!this.component.isValidDateDownEl(downEl));
+ };
+ // won't even fire if moving was ignored
+ this.handleDragEnd = (ev) => {
+ let { component } = this;
+ let { pointer } = this.dragging;
+ if (!pointer.wasTouchScroll) {
+ let { initialHit, finalHit } = this.hitDragging;
+ if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {
+ let { context } = component;
+ let arg = Object.assign(Object.assign({}, buildDatePointApiWithContext(initialHit.dateSpan, context)), { dayEl: initialHit.dayEl, jsEvent: ev.origEvent, view: context.viewApi || context.calendarApi.view });
+ context.emitter.trigger('dateClick', arg);
+ }
+ }
+ };
+ // we DO want to watch pointer moves because otherwise finalHit won't get populated
+ this.dragging = new FeaturefulElementDragging(settings.el);
+ this.dragging.autoScroller.isEnabled = false;
+ let hitDragging = this.hitDragging = new HitDragging(this.dragging, interactionSettingsToStore(settings));
+ hitDragging.emitter.on('pointerdown', this.handlePointerDown);
+ hitDragging.emitter.on('dragend', this.handleDragEnd);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ }
+
+ /*
+ Tracks when the user selects a portion of time of a component,
+ constituted by a drag over date cells, with a possible delay at the beginning of the drag.
+ */
+ class DateSelecting extends Interaction {
+ constructor(settings) {
+ super(settings);
+ this.dragSelection = null;
+ this.handlePointerDown = (ev) => {
+ let { component, dragging } = this;
+ let { options } = component.context;
+ let canSelect = options.selectable &&
+ component.isValidDateDownEl(ev.origEvent.target);
+ // don't bother to watch expensive moves if component won't do selection
+ dragging.setIgnoreMove(!canSelect);
+ // if touch, require user to hold down
+ dragging.delay = ev.isTouch ? getComponentTouchDelay$1(component) : null;
+ };
+ this.handleDragStart = (ev) => {
+ this.component.context.calendarApi.unselect(ev); // unselect previous selections
+ };
+ this.handleHitUpdate = (hit, isFinal) => {
+ let { context } = this.component;
+ let dragSelection = null;
+ let isInvalid = false;
+ if (hit) {
+ let initialHit = this.hitDragging.initialHit;
+ let disallowed = hit.componentId === initialHit.componentId
+ && this.isHitComboAllowed
+ && !this.isHitComboAllowed(initialHit, hit);
+ if (!disallowed) {
+ dragSelection = joinHitsIntoSelection(initialHit, hit, context.pluginHooks.dateSelectionTransformers);
+ }
+ if (!dragSelection || !isDateSelectionValid(dragSelection, hit.dateProfile, context)) {
+ isInvalid = true;
+ dragSelection = null;
+ }
+ }
+ if (dragSelection) {
+ context.dispatch({ type: 'SELECT_DATES', selection: dragSelection });
+ }
+ else if (!isFinal) { // only unselect if moved away while dragging
+ context.dispatch({ type: 'UNSELECT_DATES' });
+ }
+ if (!isInvalid) {
+ enableCursor();
+ }
+ else {
+ disableCursor();
+ }
+ if (!isFinal) {
+ this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging
+ }
+ };
+ this.handlePointerUp = (pev) => {
+ if (this.dragSelection) {
+ // selection is already rendered, so just need to report selection
+ triggerDateSelect(this.dragSelection, pev, this.component.context);
+ this.dragSelection = null;
+ }
+ };
+ let { component } = settings;
+ let { options } = component.context;
+ let dragging = this.dragging = new FeaturefulElementDragging(settings.el);
+ dragging.touchScrollAllowed = false;
+ dragging.minDistance = options.selectMinDistance || 0;
+ dragging.autoScroller.isEnabled = options.dragScroll;
+ let hitDragging = this.hitDragging = new HitDragging(this.dragging, interactionSettingsToStore(settings));
+ hitDragging.emitter.on('pointerdown', this.handlePointerDown);
+ hitDragging.emitter.on('dragstart', this.handleDragStart);
+ hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
+ hitDragging.emitter.on('pointerup', this.handlePointerUp);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ }
+ function getComponentTouchDelay$1(component) {
+ let { options } = component.context;
+ let delay = options.selectLongPressDelay;
+ if (delay == null) {
+ delay = options.longPressDelay;
+ }
+ return delay;
+ }
+ function joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {
+ let dateSpan0 = hit0.dateSpan;
+ let dateSpan1 = hit1.dateSpan;
+ let ms = [
+ dateSpan0.range.start,
+ dateSpan0.range.end,
+ dateSpan1.range.start,
+ dateSpan1.range.end,
+ ];
+ ms.sort(compareNumbers);
+ let props = {};
+ for (let transformer of dateSelectionTransformers) {
+ let res = transformer(hit0, hit1);
+ if (res === false) {
+ return null;
+ }
+ if (res) {
+ Object.assign(props, res);
+ }
+ }
+ props.range = { start: ms[0], end: ms[3] };
+ props.allDay = dateSpan0.allDay;
+ return props;
+ }
+
+ class EventDragging extends Interaction {
+ constructor(settings) {
+ super(settings);
+ // internal state
+ this.subjectEl = null;
+ this.subjectSeg = null; // the seg being selected/dragged
+ this.isDragging = false;
+ this.eventRange = null;
+ this.relevantEvents = null; // the events being dragged
+ this.receivingContext = null;
+ this.validMutation = null;
+ this.mutatedRelevantEvents = null;
+ this.handlePointerDown = (ev) => {
+ let origTarget = ev.origEvent.target;
+ let { component, dragging } = this;
+ let { mirror } = dragging;
+ let { options } = component.context;
+ let initialContext = component.context;
+ this.subjectEl = ev.subjectEl;
+ let subjectSeg = this.subjectSeg = getElSeg(ev.subjectEl);
+ let eventRange = this.eventRange = subjectSeg.eventRange;
+ let eventInstanceId = eventRange.instance.instanceId;
+ this.relevantEvents = getRelevantEvents(initialContext.getCurrentData().eventStore, eventInstanceId);
+ dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance;
+ dragging.delay =
+ // only do a touch delay if touch and this event hasn't been selected yet
+ (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?
+ getComponentTouchDelay(component) :
+ null;
+ if (options.fixedMirrorParent) {
+ mirror.parentNode = options.fixedMirrorParent;
+ }
+ else {
+ mirror.parentNode = elementClosest(origTarget, '.fc');
+ }
+ mirror.revertDuration = options.dragRevertDuration;
+ let isValid = component.isValidSegDownEl(origTarget) &&
+ !elementClosest(origTarget, '.fc-event-resizer'); // NOT on a resizer
+ dragging.setIgnoreMove(!isValid);
+ // disable dragging for elements that are resizable (ie, selectable)
+ // but are not draggable
+ this.isDragging = isValid &&
+ ev.subjectEl.classList.contains('fc-event-draggable');
+ };
+ this.handleDragStart = (ev) => {
+ let initialContext = this.component.context;
+ let eventRange = this.eventRange;
+ let eventInstanceId = eventRange.instance.instanceId;
+ if (ev.isTouch) {
+ // need to select a different event?
+ if (eventInstanceId !== this.component.props.eventSelection) {
+ initialContext.dispatch({ type: 'SELECT_EVENT', eventInstanceId });
+ }
+ }
+ else {
+ // if now using mouse, but was previous touch interaction, clear selected event
+ initialContext.dispatch({ type: 'UNSELECT_EVENT' });
+ }
+ if (this.isDragging) {
+ initialContext.calendarApi.unselect(ev); // unselect *date* selection
+ initialContext.emitter.trigger('eventDragStart', {
+ el: this.subjectEl,
+ event: new EventImpl(initialContext, eventRange.def, eventRange.instance),
+ jsEvent: ev.origEvent,
+ view: initialContext.viewApi,
+ });
+ }
+ };
+ this.handleHitUpdate = (hit, isFinal) => {
+ if (!this.isDragging) {
+ return;
+ }
+ let relevantEvents = this.relevantEvents;
+ let initialHit = this.hitDragging.initialHit;
+ let initialContext = this.component.context;
+ // states based on new hit
+ let receivingContext = null;
+ let mutation = null;
+ let mutatedRelevantEvents = null;
+ let isInvalid = false;
+ let interaction = {
+ affectedEvents: relevantEvents,
+ mutatedEvents: createEmptyEventStore(),
+ isEvent: true,
+ };
+ if (hit) {
+ receivingContext = hit.context;
+ let receivingOptions = receivingContext.options;
+ if (initialContext === receivingContext ||
+ (receivingOptions.editable && receivingOptions.droppable)) {
+ mutation = computeEventMutation(initialHit, hit, receivingContext.getCurrentData().pluginHooks.eventDragMutationMassagers);
+ if (mutation) {
+ mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, receivingContext.getCurrentData().eventUiBases, mutation, receivingContext);
+ interaction.mutatedEvents = mutatedRelevantEvents;
+ if (!isInteractionValid(interaction, hit.dateProfile, receivingContext)) {
+ isInvalid = true;
+ mutation = null;
+ mutatedRelevantEvents = null;
+ interaction.mutatedEvents = createEmptyEventStore();
+ }
+ }
+ }
+ else {
+ receivingContext = null;
+ }
+ }
+ this.displayDrag(receivingContext, interaction);
+ if (!isInvalid) {
+ enableCursor();
+ }
+ else {
+ disableCursor();
+ }
+ if (!isFinal) {
+ if (initialContext === receivingContext && // TODO: write test for this
+ isHitsEqual(initialHit, hit)) {
+ mutation = null;
+ }
+ this.dragging.setMirrorNeedsRevert(!mutation);
+ // render the mirror if no already-rendered mirror
+ // TODO: wish we could somehow wait for dispatch to guarantee render
+ this.dragging.setMirrorIsVisible(!hit || !getElRoot(this.subjectEl).querySelector('.fc-event-mirror'));
+ // assign states based on new hit
+ this.receivingContext = receivingContext;
+ this.validMutation = mutation;
+ this.mutatedRelevantEvents = mutatedRelevantEvents;
+ }
+ };
+ this.handlePointerUp = () => {
+ if (!this.isDragging) {
+ this.cleanup(); // because handleDragEnd won't fire
+ }
+ };
+ this.handleDragEnd = (ev) => {
+ if (this.isDragging) {
+ let initialContext = this.component.context;
+ let initialView = initialContext.viewApi;
+ let { receivingContext, validMutation } = this;
+ let eventDef = this.eventRange.def;
+ let eventInstance = this.eventRange.instance;
+ let eventApi = new EventImpl(initialContext, eventDef, eventInstance);
+ let relevantEvents = this.relevantEvents;
+ let mutatedRelevantEvents = this.mutatedRelevantEvents;
+ let { finalHit } = this.hitDragging;
+ this.clearDrag(); // must happen after revert animation
+ initialContext.emitter.trigger('eventDragStop', {
+ el: this.subjectEl,
+ event: eventApi,
+ jsEvent: ev.origEvent,
+ view: initialView,
+ });
+ if (validMutation) {
+ // dropped within same calendar
+ if (receivingContext === initialContext) {
+ let updatedEventApi = new EventImpl(initialContext, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null);
+ initialContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: mutatedRelevantEvents,
+ });
+ let eventChangeArg = {
+ oldEvent: eventApi,
+ event: updatedEventApi,
+ relatedEvents: buildEventApis(mutatedRelevantEvents, initialContext, eventInstance),
+ revert() {
+ initialContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: relevantEvents, // the pre-change data
+ });
+ },
+ };
+ let transformed = {};
+ for (let transformer of initialContext.getCurrentData().pluginHooks.eventDropTransformers) {
+ Object.assign(transformed, transformer(validMutation, initialContext));
+ }
+ initialContext.emitter.trigger('eventDrop', Object.assign(Object.assign(Object.assign({}, eventChangeArg), transformed), { el: ev.subjectEl, delta: validMutation.datesDelta, jsEvent: ev.origEvent, view: initialView }));
+ initialContext.emitter.trigger('eventChange', eventChangeArg);
+ // dropped in different calendar
+ }
+ else if (receivingContext) {
+ let eventRemoveArg = {
+ event: eventApi,
+ relatedEvents: buildEventApis(relevantEvents, initialContext, eventInstance),
+ revert() {
+ initialContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: relevantEvents,
+ });
+ },
+ };
+ initialContext.emitter.trigger('eventLeave', Object.assign(Object.assign({}, eventRemoveArg), { draggedEl: ev.subjectEl, view: initialView }));
+ initialContext.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: relevantEvents,
+ });
+ initialContext.emitter.trigger('eventRemove', eventRemoveArg);
+ let addedEventDef = mutatedRelevantEvents.defs[eventDef.defId];
+ let addedEventInstance = mutatedRelevantEvents.instances[eventInstance.instanceId];
+ let addedEventApi = new EventImpl(receivingContext, addedEventDef, addedEventInstance);
+ receivingContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: mutatedRelevantEvents,
+ });
+ let eventAddArg = {
+ event: addedEventApi,
+ relatedEvents: buildEventApis(mutatedRelevantEvents, receivingContext, addedEventInstance),
+ revert() {
+ receivingContext.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: mutatedRelevantEvents,
+ });
+ },
+ };
+ receivingContext.emitter.trigger('eventAdd', eventAddArg);
+ if (ev.isTouch) {
+ receivingContext.dispatch({
+ type: 'SELECT_EVENT',
+ eventInstanceId: eventInstance.instanceId,
+ });
+ }
+ receivingContext.emitter.trigger('drop', Object.assign(Object.assign({}, buildDatePointApiWithContext(finalHit.dateSpan, receivingContext)), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.context.viewApi }));
+ receivingContext.emitter.trigger('eventReceive', Object.assign(Object.assign({}, eventAddArg), { draggedEl: ev.subjectEl, view: finalHit.context.viewApi }));
+ }
+ }
+ else {
+ initialContext.emitter.trigger('_noEventDrop');
+ }
+ }
+ this.cleanup();
+ };
+ let { component } = this;
+ let { options } = component.context;
+ let dragging = this.dragging = new FeaturefulElementDragging(settings.el);
+ dragging.pointer.selector = EventDragging.SELECTOR;
+ dragging.touchScrollAllowed = false;
+ dragging.autoScroller.isEnabled = options.dragScroll;
+ let hitDragging = this.hitDragging = new HitDragging(this.dragging, interactionSettingsStore);
+ hitDragging.useSubjectCenter = settings.useEventCenter;
+ hitDragging.emitter.on('pointerdown', this.handlePointerDown);
+ hitDragging.emitter.on('dragstart', this.handleDragStart);
+ hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
+ hitDragging.emitter.on('pointerup', this.handlePointerUp);
+ hitDragging.emitter.on('dragend', this.handleDragEnd);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ // render a drag state on the next receivingCalendar
+ displayDrag(nextContext, state) {
+ let initialContext = this.component.context;
+ let prevContext = this.receivingContext;
+ // does the previous calendar need to be cleared?
+ if (prevContext && prevContext !== nextContext) {
+ // does the initial calendar need to be cleared?
+ // if so, don't clear all the way. we still need to to hide the affectedEvents
+ if (prevContext === initialContext) {
+ prevContext.dispatch({
+ type: 'SET_EVENT_DRAG',
+ state: {
+ affectedEvents: state.affectedEvents,
+ mutatedEvents: createEmptyEventStore(),
+ isEvent: true,
+ },
+ });
+ // completely clear the old calendar if it wasn't the initial
+ }
+ else {
+ prevContext.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ }
+ if (nextContext) {
+ nextContext.dispatch({ type: 'SET_EVENT_DRAG', state });
+ }
+ }
+ clearDrag() {
+ let initialCalendar = this.component.context;
+ let { receivingContext } = this;
+ if (receivingContext) {
+ receivingContext.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ // the initial calendar might have an dummy drag state from displayDrag
+ if (initialCalendar !== receivingContext) {
+ initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ }
+ cleanup() {
+ this.subjectSeg = null;
+ this.isDragging = false;
+ this.eventRange = null;
+ this.relevantEvents = null;
+ this.receivingContext = null;
+ this.validMutation = null;
+ this.mutatedRelevantEvents = null;
+ }
+ }
+ // TODO: test this in IE11
+ // QUESTION: why do we need it on the resizable???
+ EventDragging.SELECTOR = '.fc-event-draggable, .fc-event-resizable';
+ function computeEventMutation(hit0, hit1, massagers) {
+ let dateSpan0 = hit0.dateSpan;
+ let dateSpan1 = hit1.dateSpan;
+ let date0 = dateSpan0.range.start;
+ let date1 = dateSpan1.range.start;
+ let standardProps = {};
+ if (dateSpan0.allDay !== dateSpan1.allDay) {
+ standardProps.allDay = dateSpan1.allDay;
+ standardProps.hasEnd = hit1.context.options.allDayMaintainDuration;
+ if (dateSpan1.allDay) {
+ // means date1 is already start-of-day,
+ // but date0 needs to be converted
+ date0 = startOfDay(date0);
+ }
+ }
+ let delta = diffDates(date0, date1, hit0.context.dateEnv, hit0.componentId === hit1.componentId ?
+ hit0.largeUnit :
+ null);
+ if (delta.milliseconds) { // has hours/minutes/seconds
+ standardProps.allDay = false;
+ }
+ let mutation = {
+ datesDelta: delta,
+ standardProps,
+ };
+ for (let massager of massagers) {
+ massager(mutation, hit0, hit1);
+ }
+ return mutation;
+ }
+ function getComponentTouchDelay(component) {
+ let { options } = component.context;
+ let delay = options.eventLongPressDelay;
+ if (delay == null) {
+ delay = options.longPressDelay;
+ }
+ return delay;
+ }
+
+ class EventResizing extends Interaction {
+ constructor(settings) {
+ super(settings);
+ // internal state
+ this.draggingSegEl = null;
+ this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?
+ this.eventRange = null;
+ this.relevantEvents = null;
+ this.validMutation = null;
+ this.mutatedRelevantEvents = null;
+ this.handlePointerDown = (ev) => {
+ let { component } = this;
+ let segEl = this.querySegEl(ev);
+ let seg = getElSeg(segEl);
+ let eventRange = this.eventRange = seg.eventRange;
+ this.dragging.minDistance = component.context.options.eventDragMinDistance;
+ // if touch, need to be working with a selected event
+ this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(ev.origEvent.target) ||
+ (ev.isTouch && this.component.props.eventSelection !== eventRange.instance.instanceId));
+ };
+ this.handleDragStart = (ev) => {
+ let { context } = this.component;
+ let eventRange = this.eventRange;
+ this.relevantEvents = getRelevantEvents(context.getCurrentData().eventStore, this.eventRange.instance.instanceId);
+ let segEl = this.querySegEl(ev);
+ this.draggingSegEl = segEl;
+ this.draggingSeg = getElSeg(segEl);
+ context.calendarApi.unselect();
+ context.emitter.trigger('eventResizeStart', {
+ el: segEl,
+ event: new EventImpl(context, eventRange.def, eventRange.instance),
+ jsEvent: ev.origEvent,
+ view: context.viewApi,
+ });
+ };
+ this.handleHitUpdate = (hit, isFinal, ev) => {
+ let { context } = this.component;
+ let relevantEvents = this.relevantEvents;
+ let initialHit = this.hitDragging.initialHit;
+ let eventInstance = this.eventRange.instance;
+ let mutation = null;
+ let mutatedRelevantEvents = null;
+ let isInvalid = false;
+ let interaction = {
+ affectedEvents: relevantEvents,
+ mutatedEvents: createEmptyEventStore(),
+ isEvent: true,
+ };
+ if (hit) {
+ let disallowed = hit.componentId === initialHit.componentId
+ && this.isHitComboAllowed
+ && !this.isHitComboAllowed(initialHit, hit);
+ if (!disallowed) {
+ mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-event-resizer-start'), eventInstance.range);
+ }
+ }
+ if (mutation) {
+ mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, context.getCurrentData().eventUiBases, mutation, context);
+ interaction.mutatedEvents = mutatedRelevantEvents;
+ if (!isInteractionValid(interaction, hit.dateProfile, context)) {
+ isInvalid = true;
+ mutation = null;
+ mutatedRelevantEvents = null;
+ interaction.mutatedEvents = null;
+ }
+ }
+ if (mutatedRelevantEvents) {
+ context.dispatch({
+ type: 'SET_EVENT_RESIZE',
+ state: interaction,
+ });
+ }
+ else {
+ context.dispatch({ type: 'UNSET_EVENT_RESIZE' });
+ }
+ if (!isInvalid) {
+ enableCursor();
+ }
+ else {
+ disableCursor();
+ }
+ if (!isFinal) {
+ if (mutation && isHitsEqual(initialHit, hit)) {
+ mutation = null;
+ }
+ this.validMutation = mutation;
+ this.mutatedRelevantEvents = mutatedRelevantEvents;
+ }
+ };
+ this.handleDragEnd = (ev) => {
+ let { context } = this.component;
+ let eventDef = this.eventRange.def;
+ let eventInstance = this.eventRange.instance;
+ let eventApi = new EventImpl(context, eventDef, eventInstance);
+ let relevantEvents = this.relevantEvents;
+ let mutatedRelevantEvents = this.mutatedRelevantEvents;
+ context.emitter.trigger('eventResizeStop', {
+ el: this.draggingSegEl,
+ event: eventApi,
+ jsEvent: ev.origEvent,
+ view: context.viewApi,
+ });
+ if (this.validMutation) {
+ let updatedEventApi = new EventImpl(context, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null);
+ context.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: mutatedRelevantEvents,
+ });
+ let eventChangeArg = {
+ oldEvent: eventApi,
+ event: updatedEventApi,
+ relatedEvents: buildEventApis(mutatedRelevantEvents, context, eventInstance),
+ revert() {
+ context.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: relevantEvents, // the pre-change events
+ });
+ },
+ };
+ context.emitter.trigger('eventResize', Object.assign(Object.assign({}, eventChangeArg), { el: this.draggingSegEl, startDelta: this.validMutation.startDelta || createDuration(0), endDelta: this.validMutation.endDelta || createDuration(0), jsEvent: ev.origEvent, view: context.viewApi }));
+ context.emitter.trigger('eventChange', eventChangeArg);
+ }
+ else {
+ context.emitter.trigger('_noEventResize');
+ }
+ // reset all internal state
+ this.draggingSeg = null;
+ this.relevantEvents = null;
+ this.validMutation = null;
+ // okay to keep eventInstance around. useful to set it in handlePointerDown
+ };
+ let { component } = settings;
+ let dragging = this.dragging = new FeaturefulElementDragging(settings.el);
+ dragging.pointer.selector = '.fc-event-resizer';
+ dragging.touchScrollAllowed = false;
+ dragging.autoScroller.isEnabled = component.context.options.dragScroll;
+ let hitDragging = this.hitDragging = new HitDragging(this.dragging, interactionSettingsToStore(settings));
+ hitDragging.emitter.on('pointerdown', this.handlePointerDown);
+ hitDragging.emitter.on('dragstart', this.handleDragStart);
+ hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
+ hitDragging.emitter.on('dragend', this.handleDragEnd);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ querySegEl(ev) {
+ return elementClosest(ev.subjectEl, '.fc-event');
+ }
+ }
+ function computeMutation(hit0, hit1, isFromStart, instanceRange) {
+ let dateEnv = hit0.context.dateEnv;
+ let date0 = hit0.dateSpan.range.start;
+ let date1 = hit1.dateSpan.range.start;
+ let delta = diffDates(date0, date1, dateEnv, hit0.largeUnit);
+ if (isFromStart) {
+ if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {
+ return { startDelta: delta };
+ }
+ }
+ else if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {
+ return { endDelta: delta };
+ }
+ return null;
+ }
+
+ class UnselectAuto {
+ constructor(context) {
+ this.context = context;
+ this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system
+ this.matchesCancel = false;
+ this.matchesEvent = false;
+ this.onSelect = (selectInfo) => {
+ if (selectInfo.jsEvent) {
+ this.isRecentPointerDateSelect = true;
+ }
+ };
+ this.onDocumentPointerDown = (pev) => {
+ let unselectCancel = this.context.options.unselectCancel;
+ let downEl = getEventTargetViaRoot(pev.origEvent);
+ this.matchesCancel = !!elementClosest(downEl, unselectCancel);
+ this.matchesEvent = !!elementClosest(downEl, EventDragging.SELECTOR); // interaction started on an event?
+ };
+ this.onDocumentPointerUp = (pev) => {
+ let { context } = this;
+ let { documentPointer } = this;
+ let calendarState = context.getCurrentData();
+ // touch-scrolling should never unfocus any type of selection
+ if (!documentPointer.wasTouchScroll) {
+ if (calendarState.dateSelection && // an existing date selection?
+ !this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?
+ ) {
+ let unselectAuto = context.options.unselectAuto;
+ if (unselectAuto && (!unselectAuto || !this.matchesCancel)) {
+ context.calendarApi.unselect(pev);
+ }
+ }
+ if (calendarState.eventSelection && // an existing event selected?
+ !this.matchesEvent // interaction DIDN'T start on an event
+ ) {
+ context.dispatch({ type: 'UNSELECT_EVENT' });
+ }
+ }
+ this.isRecentPointerDateSelect = false;
+ };
+ let documentPointer = this.documentPointer = new PointerDragging(document);
+ documentPointer.shouldIgnoreMove = true;
+ documentPointer.shouldWatchScroll = false;
+ documentPointer.emitter.on('pointerdown', this.onDocumentPointerDown);
+ documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);
+ /*
+ TODO: better way to know about whether there was a selection with the pointer
+ */
+ context.emitter.on('select', this.onSelect);
+ }
+ destroy() {
+ this.context.emitter.off('select', this.onSelect);
+ this.documentPointer.destroy();
+ }
+ }
+
+ const OPTION_REFINERS$2 = {
+ fixedMirrorParent: identity,
+ };
+ const LISTENER_REFINERS = {
+ dateClick: identity,
+ eventDragStart: identity,
+ eventDragStop: identity,
+ eventDrop: identity,
+ eventResizeStart: identity,
+ eventResizeStop: identity,
+ eventResize: identity,
+ drop: identity,
+ eventReceive: identity,
+ eventLeave: identity,
+ };
+
+ /*
+ Given an already instantiated draggable object for one-or-more elements,
+ Interprets any dragging as an attempt to drag an events that lives outside
+ of a calendar onto a calendar.
+ */
+ class ExternalElementDragging {
+ constructor(dragging, suppliedDragMeta) {
+ this.receivingContext = null;
+ this.droppableEvent = null; // will exist for all drags, even if create:false
+ this.suppliedDragMeta = null;
+ this.dragMeta = null;
+ this.handleDragStart = (ev) => {
+ this.dragMeta = this.buildDragMeta(ev.subjectEl);
+ };
+ this.handleHitUpdate = (hit, isFinal, ev) => {
+ let { dragging } = this.hitDragging;
+ let receivingContext = null;
+ let droppableEvent = null;
+ let isInvalid = false;
+ let interaction = {
+ affectedEvents: createEmptyEventStore(),
+ mutatedEvents: createEmptyEventStore(),
+ isEvent: this.dragMeta.create,
+ };
+ if (hit) {
+ receivingContext = hit.context;
+ if (this.canDropElOnCalendar(ev.subjectEl, receivingContext)) {
+ droppableEvent = computeEventForDateSpan(hit.dateSpan, this.dragMeta, receivingContext);
+ interaction.mutatedEvents = eventTupleToStore(droppableEvent);
+ isInvalid = !isInteractionValid(interaction, hit.dateProfile, receivingContext);
+ if (isInvalid) {
+ interaction.mutatedEvents = createEmptyEventStore();
+ droppableEvent = null;
+ }
+ }
+ }
+ this.displayDrag(receivingContext, interaction);
+ // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)
+ // TODO: wish we could somehow wait for dispatch to guarantee render
+ dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-event-mirror'));
+ if (!isInvalid) {
+ enableCursor();
+ }
+ else {
+ disableCursor();
+ }
+ if (!isFinal) {
+ dragging.setMirrorNeedsRevert(!droppableEvent);
+ this.receivingContext = receivingContext;
+ this.droppableEvent = droppableEvent;
+ }
+ };
+ this.handleDragEnd = (pev) => {
+ let { receivingContext, droppableEvent } = this;
+ this.clearDrag();
+ if (receivingContext && droppableEvent) {
+ let finalHit = this.hitDragging.finalHit;
+ let finalView = finalHit.context.viewApi;
+ let dragMeta = this.dragMeta;
+ receivingContext.emitter.trigger('drop', Object.assign(Object.assign({}, buildDatePointApiWithContext(finalHit.dateSpan, receivingContext)), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView }));
+ if (dragMeta.create) {
+ let addingEvents = eventTupleToStore(droppableEvent);
+ receivingContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: addingEvents,
+ });
+ if (pev.isTouch) {
+ receivingContext.dispatch({
+ type: 'SELECT_EVENT',
+ eventInstanceId: droppableEvent.instance.instanceId,
+ });
+ }
+ // signal that an external event landed
+ receivingContext.emitter.trigger('eventReceive', {
+ event: new EventImpl(receivingContext, droppableEvent.def, droppableEvent.instance),
+ relatedEvents: [],
+ revert() {
+ receivingContext.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: addingEvents,
+ });
+ },
+ draggedEl: pev.subjectEl,
+ view: finalView,
+ });
+ }
+ }
+ this.receivingContext = null;
+ this.droppableEvent = null;
+ };
+ let hitDragging = this.hitDragging = new HitDragging(dragging, interactionSettingsStore);
+ hitDragging.requireInitial = false; // will start outside of a component
+ hitDragging.emitter.on('dragstart', this.handleDragStart);
+ hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
+ hitDragging.emitter.on('dragend', this.handleDragEnd);
+ this.suppliedDragMeta = suppliedDragMeta;
+ }
+ buildDragMeta(subjectEl) {
+ if (typeof this.suppliedDragMeta === 'object') {
+ return parseDragMeta(this.suppliedDragMeta);
+ }
+ if (typeof this.suppliedDragMeta === 'function') {
+ return parseDragMeta(this.suppliedDragMeta(subjectEl));
+ }
+ return getDragMetaFromEl(subjectEl);
+ }
+ displayDrag(nextContext, state) {
+ let prevContext = this.receivingContext;
+ if (prevContext && prevContext !== nextContext) {
+ prevContext.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ if (nextContext) {
+ nextContext.dispatch({ type: 'SET_EVENT_DRAG', state });
+ }
+ }
+ clearDrag() {
+ if (this.receivingContext) {
+ this.receivingContext.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ }
+ canDropElOnCalendar(el, receivingContext) {
+ let dropAccept = receivingContext.options.dropAccept;
+ if (typeof dropAccept === 'function') {
+ return dropAccept.call(receivingContext.calendarApi, el);
+ }
+ if (typeof dropAccept === 'string' && dropAccept) {
+ return Boolean(elementMatches(el, dropAccept));
+ }
+ return true;
+ }
+ }
+ // Utils for computing event store from the DragMeta
+ // ----------------------------------------------------------------------------------------------------
+ function computeEventForDateSpan(dateSpan, dragMeta, context) {
+ let defProps = Object.assign({}, dragMeta.leftoverProps);
+ for (let transform of context.pluginHooks.externalDefTransforms) {
+ Object.assign(defProps, transform(dateSpan, dragMeta));
+ }
+ let { refined, extra } = refineEventDef(defProps, context);
+ let def = parseEventDef(refined, extra, dragMeta.sourceId, dateSpan.allDay, context.options.forceEventDuration || Boolean(dragMeta.duration), // hasEnd
+ context);
+ let start = dateSpan.range.start;
+ // only rely on time info if drop zone is all-day,
+ // otherwise, we already know the time
+ if (dateSpan.allDay && dragMeta.startTime) {
+ start = context.dateEnv.add(start, dragMeta.startTime);
+ }
+ let end = dragMeta.duration ?
+ context.dateEnv.add(start, dragMeta.duration) :
+ getDefaultEventEnd(dateSpan.allDay, start, context);
+ let instance = createEventInstance(def.defId, { start, end });
+ return { def, instance };
+ }
+ // Utils for extracting data from element
+ // ----------------------------------------------------------------------------------------------------
+ function getDragMetaFromEl(el) {
+ let str = getEmbeddedElData(el, 'event');
+ let obj = str ?
+ JSON.parse(str) :
+ { create: false }; // if no embedded data, assume no event creation
+ return parseDragMeta(obj);
+ }
+ config.dataAttrPrefix = '';
+ function getEmbeddedElData(el, name) {
+ let prefix = config.dataAttrPrefix;
+ let prefixedName = (prefix ? prefix + '-' : '') + name;
+ return el.getAttribute('data-' + prefixedName) || '';
+ }
+
+ /*
+ Makes an element (that is *external* to any calendar) draggable.
+ Can pass in data that determines how an event will be created when dropped onto a calendar.
+ Leverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.
+ */
+ class ExternalDraggable {
+ constructor(el, settings = {}) {
+ this.handlePointerDown = (ev) => {
+ let { dragging } = this;
+ let { minDistance, longPressDelay } = this.settings;
+ dragging.minDistance =
+ minDistance != null ?
+ minDistance :
+ (ev.isTouch ? 0 : BASE_OPTION_DEFAULTS.eventDragMinDistance);
+ dragging.delay =
+ ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv
+ (longPressDelay != null ? longPressDelay : BASE_OPTION_DEFAULTS.longPressDelay) :
+ 0;
+ };
+ this.handleDragStart = (ev) => {
+ if (ev.isTouch &&
+ this.dragging.delay &&
+ ev.subjectEl.classList.contains('fc-event')) {
+ this.dragging.mirror.getMirrorEl().classList.add('fc-event-selected');
+ }
+ };
+ this.settings = settings;
+ let dragging = this.dragging = new FeaturefulElementDragging(el);
+ dragging.touchScrollAllowed = false;
+ if (settings.itemSelector != null) {
+ dragging.pointer.selector = settings.itemSelector;
+ }
+ if (settings.appendTo != null) {
+ dragging.mirror.parentNode = settings.appendTo; // TODO: write tests
+ }
+ dragging.emitter.on('pointerdown', this.handlePointerDown);
+ dragging.emitter.on('dragstart', this.handleDragStart);
+ new ExternalElementDragging(dragging, settings.eventData); // eslint-disable-line no-new
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ }
+
+ /*
+ Detects when a *THIRD-PARTY* drag-n-drop system interacts with elements.
+ The third-party system is responsible for drawing the visuals effects of the drag.
+ This class simply monitors for pointer movements and fires events.
+ It also has the ability to hide the moving element (the "mirror") during the drag.
+ */
+ class InferredElementDragging extends ElementDragging {
+ constructor(containerEl) {
+ super(containerEl);
+ this.shouldIgnoreMove = false;
+ this.mirrorSelector = '';
+ this.currentMirrorEl = null;
+ this.handlePointerDown = (ev) => {
+ this.emitter.trigger('pointerdown', ev);
+ if (!this.shouldIgnoreMove) {
+ // fire dragstart right away. does not support delay or min-distance
+ this.emitter.trigger('dragstart', ev);
+ }
+ };
+ this.handlePointerMove = (ev) => {
+ if (!this.shouldIgnoreMove) {
+ this.emitter.trigger('dragmove', ev);
+ }
+ };
+ this.handlePointerUp = (ev) => {
+ this.emitter.trigger('pointerup', ev);
+ if (!this.shouldIgnoreMove) {
+ // fire dragend right away. does not support a revert animation
+ this.emitter.trigger('dragend', ev);
+ }
+ };
+ let pointer = this.pointer = new PointerDragging(containerEl);
+ pointer.emitter.on('pointerdown', this.handlePointerDown);
+ pointer.emitter.on('pointermove', this.handlePointerMove);
+ pointer.emitter.on('pointerup', this.handlePointerUp);
+ }
+ destroy() {
+ this.pointer.destroy();
+ }
+ setIgnoreMove(bool) {
+ this.shouldIgnoreMove = bool;
+ }
+ setMirrorIsVisible(bool) {
+ if (bool) {
+ // restore a previously hidden element.
+ // use the reference in case the selector class has already been removed.
+ if (this.currentMirrorEl) {
+ this.currentMirrorEl.style.visibility = '';
+ this.currentMirrorEl = null;
+ }
+ }
+ else {
+ let mirrorEl = this.mirrorSelector
+ // TODO: somehow query FullCalendars WITHIN shadow-roots
+ ? document.querySelector(this.mirrorSelector)
+ : null;
+ if (mirrorEl) {
+ this.currentMirrorEl = mirrorEl;
+ mirrorEl.style.visibility = 'hidden';
+ }
+ }
+ }
+ }
+
+ /*
+ Bridges third-party drag-n-drop systems with FullCalendar.
+ Must be instantiated and destroyed by caller.
+ */
+ class ThirdPartyDraggable {
+ constructor(containerOrSettings, settings) {
+ let containerEl = document;
+ if (
+ // wish we could just test instanceof EventTarget, but doesn't work in IE11
+ containerOrSettings === document ||
+ containerOrSettings instanceof Element) {
+ containerEl = containerOrSettings;
+ settings = settings || {};
+ }
+ else {
+ settings = (containerOrSettings || {});
+ }
+ let dragging = this.dragging = new InferredElementDragging(containerEl);
+ if (typeof settings.itemSelector === 'string') {
+ dragging.pointer.selector = settings.itemSelector;
+ }
+ else if (containerEl === document) {
+ dragging.pointer.selector = '[data-event]';
+ }
+ if (typeof settings.mirrorSelector === 'string') {
+ dragging.mirrorSelector = settings.mirrorSelector;
+ }
+ new ExternalElementDragging(dragging, settings.eventData); // eslint-disable-line no-new
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ }
+
+ var index$3 = createPlugin({
+ name: '@fullcalendar/interaction',
+ componentInteractions: [DateClicking, DateSelecting, EventDragging, EventResizing],
+ calendarInteractions: [UnselectAuto],
+ elementDraggingImpl: FeaturefulElementDragging,
+ optionRefiners: OPTION_REFINERS$2,
+ listenerRefiners: LISTENER_REFINERS,
+ });
+
+ /* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.
+ ----------------------------------------------------------------------------------------------------------------------*/
+ // It is a manager for a Table subcomponent, which does most of the heavy lifting.
+ // It is responsible for managing width/height.
+ class TableView extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.headerElRef = y();
+ }
+ renderSimpleLayout(headerRowContent, bodyContent) {
+ let { props, context } = this;
+ let sections = [];
+ let stickyHeaderDates = getStickyHeaderDates(context.options);
+ if (headerRowContent) {
+ sections.push({
+ type: 'header',
+ key: 'header',
+ isSticky: stickyHeaderDates,
+ chunk: {
+ elRef: this.headerElRef,
+ tableClassName: 'fc-col-header',
+ rowContent: headerRowContent,
+ },
+ });
+ }
+ sections.push({
+ type: 'body',
+ key: 'body',
+ liquid: true,
+ chunk: { content: bodyContent },
+ });
+ return (h(ViewContainer$1, { elClasses: ['fc-daygrid'], viewSpec: context.viewSpec },
+ h(SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [] /* TODO: make optional? */, sections: sections })));
+ }
+ renderHScrollLayout(headerRowContent, bodyContent, colCnt, dayMinWidth) {
+ let ScrollGrid = this.context.pluginHooks.scrollGridImpl;
+ if (!ScrollGrid) {
+ throw new Error('No ScrollGrid implementation');
+ }
+ let { props, context } = this;
+ let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);
+ let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);
+ let sections = [];
+ if (headerRowContent) {
+ sections.push({
+ type: 'header',
+ key: 'header',
+ isSticky: stickyHeaderDates,
+ chunks: [{
+ key: 'main',
+ elRef: this.headerElRef,
+ tableClassName: 'fc-col-header',
+ rowContent: headerRowContent,
+ }],
+ });
+ }
+ sections.push({
+ type: 'body',
+ key: 'body',
+ liquid: true,
+ chunks: [{
+ key: 'main',
+ content: bodyContent,
+ }],
+ });
+ if (stickyFooterScrollbar) {
+ sections.push({
+ type: 'footer',
+ key: 'footer',
+ isSticky: true,
+ chunks: [{
+ key: 'main',
+ content: renderScrollShim,
+ }],
+ });
+ }
+ return (h(ViewContainer$1, { elClasses: ['fc-daygrid'], viewSpec: context.viewSpec },
+ h(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, colGroups: [{ cols: [{ span: colCnt, minWidth: dayMinWidth }] }], sections: sections })));
+ }
+ }
+
+ function splitSegsByRow(segs, rowCnt) {
+ let byRow = [];
+ for (let i = 0; i < rowCnt; i += 1) {
+ byRow[i] = [];
+ }
+ for (let seg of segs) {
+ byRow[seg.row].push(seg);
+ }
+ return byRow;
+ }
+ function splitSegsByFirstCol(segs, colCnt) {
+ let byCol = [];
+ for (let i = 0; i < colCnt; i += 1) {
+ byCol[i] = [];
+ }
+ for (let seg of segs) {
+ byCol[seg.firstCol].push(seg);
+ }
+ return byCol;
+ }
+ function splitInteractionByRow(ui, rowCnt) {
+ let byRow = [];
+ if (!ui) {
+ for (let i = 0; i < rowCnt; i += 1) {
+ byRow[i] = null;
+ }
+ }
+ else {
+ for (let i = 0; i < rowCnt; i += 1) {
+ byRow[i] = {
+ affectedInstances: ui.affectedInstances,
+ isEvent: ui.isEvent,
+ segs: [],
+ };
+ }
+ for (let seg of ui.segs) {
+ byRow[seg.row].segs.push(seg);
+ }
+ }
+ return byRow;
+ }
+
+ const DEFAULT_TABLE_EVENT_TIME_FORMAT = createFormatter({
+ hour: 'numeric',
+ minute: '2-digit',
+ omitZeroMinute: true,
+ meridiem: 'narrow',
+ });
+ function hasListItemDisplay(seg) {
+ let { display } = seg.eventRange.ui;
+ return display === 'list-item' || (display === 'auto' &&
+ !seg.eventRange.def.allDay &&
+ seg.firstCol === seg.lastCol && // can't be multi-day
+ seg.isStart && // "
+ seg.isEnd // "
+ );
+ }
+
+ class TableBlockEvent extends BaseComponent {
+ render() {
+ let { props } = this;
+ return (h(StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay })));
+ }
+ }
+
+ class TableListItemEvent extends BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let { seg } = props;
+ let timeFormat = options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;
+ let timeText = buildSegTimeText(seg, timeFormat, context, true, props.defaultDisplayEventEnd);
+ return (h(EventContainer, Object.assign({}, props, { elTag: "a", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: getSegAnchorAttrs(props.seg, context), defaultGenerator: renderInnerContent$2, timeText: timeText, isResizing: false, isDateSelecting: false })));
+ }
+ }
+ function renderInnerContent$2(renderProps) {
+ return (h(p, null,
+ h("div", { className: "fc-daygrid-event-dot", style: { borderColor: renderProps.borderColor || renderProps.backgroundColor } }),
+ renderProps.timeText && (h("div", { className: "fc-event-time" }, renderProps.timeText)),
+ h("div", { className: "fc-event-title" }, renderProps.event.title || h(p, null, "\u00A0"))));
+ }
+
+ class TableCellMoreLink extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.compileSegs = memoize(compileSegs);
+ }
+ render() {
+ let { props } = this;
+ let { allSegs, invisibleSegs } = this.compileSegs(props.singlePlacements);
+ return (h(MoreLinkContainer, { elClasses: ['fc-daygrid-more-link'], dateProfile: props.dateProfile, todayRange: props.todayRange, allDayDate: props.allDayDate, moreCnt: props.moreCnt, allSegs: allSegs, hiddenSegs: invisibleSegs, alignmentElRef: props.alignmentElRef, alignGridTop: props.alignGridTop, extraDateSpan: props.extraDateSpan, popoverContent: () => {
+ let isForcedInvisible = (props.eventDrag ? props.eventDrag.affectedInstances : null) ||
+ (props.eventResize ? props.eventResize.affectedInstances : null) ||
+ {};
+ return (h(p, null, allSegs.map((seg) => {
+ let instanceId = seg.eventRange.instance.instanceId;
+ return (h("div", { className: "fc-daygrid-event-harness", key: instanceId, style: {
+ visibility: isForcedInvisible[instanceId] ? 'hidden' : '',
+ } }, hasListItemDisplay(seg) ? (h(TableListItemEvent, Object.assign({ seg: seg, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange)))) : (h(TableBlockEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, getSegMeta(seg, props.todayRange))))));
+ })));
+ } }));
+ }
+ }
+ function compileSegs(singlePlacements) {
+ let allSegs = [];
+ let invisibleSegs = [];
+ for (let placement of singlePlacements) {
+ allSegs.push(placement.seg);
+ if (!placement.isVisible) {
+ invisibleSegs.push(placement.seg);
+ }
+ }
+ return { allSegs, invisibleSegs };
+ }
+
+ const DEFAULT_WEEK_NUM_FORMAT$1 = createFormatter({ week: 'narrow' });
+ class TableCell extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.rootElRef = y();
+ this.state = {
+ dayNumberId: getUniqueDomId(),
+ };
+ this.handleRootEl = (el) => {
+ setRef(this.rootElRef, el);
+ setRef(this.props.elRef, el);
+ };
+ }
+ render() {
+ let { context, props, state, rootElRef } = this;
+ let { options } = context;
+ let { date, dateProfile } = props;
+ return (h(DayCellContainer, { elTag: "td", elRef: this.handleRootEl, elClasses: [
+ 'fc-daygrid-day',
+ ...(props.extraClassNames || []),
+ ], elAttrs: Object.assign(Object.assign(Object.assign({}, props.extraDataAttrs), (props.showDayNumber ? { 'aria-labelledby': state.dayNumberId } : {})), { role: 'gridcell' }), defaultGenerator: renderTopInner, date: date, dateProfile: dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, extraRenderProps: props.extraRenderProps }, (InnerContent, renderProps) => (h("div", { className: "fc-daygrid-day-frame fc-scrollgrid-sync-inner", ref: props.innerElRef },
+ props.showWeekNumber && (h(WeekNumberContainer, { elTag: "a", elClasses: ['fc-daygrid-week-number'], elAttrs: buildNavLinkAttrs(context, date, 'week'), date: date, defaultFormat: DEFAULT_WEEK_NUM_FORMAT$1 })),
+ Boolean(!renderProps.isDisabled &&
+ (props.showDayNumber || hasCustomDayCellContent(options) || props.forceDayTop)) && (h("div", { className: "fc-daygrid-day-top" },
+ h(InnerContent, { elTag: "a", elClasses: ['fc-daygrid-day-number'], elAttrs: Object.assign(Object.assign({}, buildNavLinkAttrs(context, date)), { id: state.dayNumberId }) }))),
+ h("div", { className: "fc-daygrid-day-events", ref: props.fgContentElRef },
+ props.fgContent,
+ h("div", { className: "fc-daygrid-day-bottom", style: { marginTop: props.moreMarginTop } },
+ h(TableCellMoreLink, { allDayDate: date, singlePlacements: props.singlePlacements, moreCnt: props.moreCnt, alignmentElRef: rootElRef, alignGridTop: !props.showDayNumber, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange }))),
+ h("div", { className: "fc-daygrid-day-bg" }, props.bgContent)))));
+ }
+ }
+ function renderTopInner(props) {
+ return props.dayNumberText || h(p, null, "\u00A0");
+ }
+
+ function computeFgSegPlacement(segs, // assumed already sorted
+ dayMaxEvents, dayMaxEventRows, strictOrder, eventInstanceHeights, maxContentHeight, cells) {
+ let hierarchy = new DayGridSegHierarchy();
+ hierarchy.allowReslicing = true;
+ hierarchy.strictOrder = strictOrder;
+ if (dayMaxEvents === true || dayMaxEventRows === true) {
+ hierarchy.maxCoord = maxContentHeight;
+ hierarchy.hiddenConsumes = true;
+ }
+ else if (typeof dayMaxEvents === 'number') {
+ hierarchy.maxStackCnt = dayMaxEvents;
+ }
+ else if (typeof dayMaxEventRows === 'number') {
+ hierarchy.maxStackCnt = dayMaxEventRows;
+ hierarchy.hiddenConsumes = true;
+ }
+ // create segInputs only for segs with known heights
+ let segInputs = [];
+ let unknownHeightSegs = [];
+ for (let i = 0; i < segs.length; i += 1) {
+ let seg = segs[i];
+ let { instanceId } = seg.eventRange.instance;
+ let eventHeight = eventInstanceHeights[instanceId];
+ if (eventHeight != null) {
+ segInputs.push({
+ index: i,
+ thickness: eventHeight,
+ span: {
+ start: seg.firstCol,
+ end: seg.lastCol + 1,
+ },
+ });
+ }
+ else {
+ unknownHeightSegs.push(seg);
+ }
+ }
+ let hiddenEntries = hierarchy.addSegs(segInputs);
+ let segRects = hierarchy.toRects();
+ let { singleColPlacements, multiColPlacements, leftoverMargins } = placeRects(segRects, segs, cells);
+ let moreCnts = [];
+ let moreMarginTops = [];
+ // add segs with unknown heights
+ for (let seg of unknownHeightSegs) {
+ multiColPlacements[seg.firstCol].push({
+ seg,
+ isVisible: false,
+ isAbsolute: true,
+ absoluteTop: 0,
+ marginTop: 0,
+ });
+ for (let col = seg.firstCol; col <= seg.lastCol; col += 1) {
+ singleColPlacements[col].push({
+ seg: resliceSeg(seg, col, col + 1, cells),
+ isVisible: false,
+ isAbsolute: false,
+ absoluteTop: 0,
+ marginTop: 0,
+ });
+ }
+ }
+ // add the hidden entries
+ for (let col = 0; col < cells.length; col += 1) {
+ moreCnts.push(0);
+ }
+ for (let hiddenEntry of hiddenEntries) {
+ let seg = segs[hiddenEntry.index];
+ let hiddenSpan = hiddenEntry.span;
+ multiColPlacements[hiddenSpan.start].push({
+ seg: resliceSeg(seg, hiddenSpan.start, hiddenSpan.end, cells),
+ isVisible: false,
+ isAbsolute: true,
+ absoluteTop: 0,
+ marginTop: 0,
+ });
+ for (let col = hiddenSpan.start; col < hiddenSpan.end; col += 1) {
+ moreCnts[col] += 1;
+ singleColPlacements[col].push({
+ seg: resliceSeg(seg, col, col + 1, cells),
+ isVisible: false,
+ isAbsolute: false,
+ absoluteTop: 0,
+ marginTop: 0,
+ });
+ }
+ }
+ // deal with leftover margins
+ for (let col = 0; col < cells.length; col += 1) {
+ moreMarginTops.push(leftoverMargins[col]);
+ }
+ return { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops };
+ }
+ // rects ordered by top coord, then left
+ function placeRects(allRects, segs, cells) {
+ let rectsByEachCol = groupRectsByEachCol(allRects, cells.length);
+ let singleColPlacements = [];
+ let multiColPlacements = [];
+ let leftoverMargins = [];
+ for (let col = 0; col < cells.length; col += 1) {
+ let rects = rectsByEachCol[col];
+ // compute all static segs in singlePlacements
+ let singlePlacements = [];
+ let currentHeight = 0;
+ let currentMarginTop = 0;
+ for (let rect of rects) {
+ let seg = segs[rect.index];
+ singlePlacements.push({
+ seg: resliceSeg(seg, col, col + 1, cells),
+ isVisible: true,
+ isAbsolute: false,
+ absoluteTop: rect.levelCoord,
+ marginTop: rect.levelCoord - currentHeight,
+ });
+ currentHeight = rect.levelCoord + rect.thickness;
+ }
+ // compute mixed static/absolute segs in multiPlacements
+ let multiPlacements = [];
+ currentHeight = 0;
+ currentMarginTop = 0;
+ for (let rect of rects) {
+ let seg = segs[rect.index];
+ let isAbsolute = rect.span.end - rect.span.start > 1; // multi-column?
+ let isFirstCol = rect.span.start === col;
+ currentMarginTop += rect.levelCoord - currentHeight; // amount of space since bottom of previous seg
+ currentHeight = rect.levelCoord + rect.thickness; // height will now be bottom of current seg
+ if (isAbsolute) {
+ currentMarginTop += rect.thickness;
+ if (isFirstCol) {
+ multiPlacements.push({
+ seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),
+ isVisible: true,
+ isAbsolute: true,
+ absoluteTop: rect.levelCoord,
+ marginTop: 0,
+ });
+ }
+ }
+ else if (isFirstCol) {
+ multiPlacements.push({
+ seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),
+ isVisible: true,
+ isAbsolute: false,
+ absoluteTop: rect.levelCoord,
+ marginTop: currentMarginTop, // claim the margin
+ });
+ currentMarginTop = 0;
+ }
+ }
+ singleColPlacements.push(singlePlacements);
+ multiColPlacements.push(multiPlacements);
+ leftoverMargins.push(currentMarginTop);
+ }
+ return { singleColPlacements, multiColPlacements, leftoverMargins };
+ }
+ function groupRectsByEachCol(rects, colCnt) {
+ let rectsByEachCol = [];
+ for (let col = 0; col < colCnt; col += 1) {
+ rectsByEachCol.push([]);
+ }
+ for (let rect of rects) {
+ for (let col = rect.span.start; col < rect.span.end; col += 1) {
+ rectsByEachCol[col].push(rect);
+ }
+ }
+ return rectsByEachCol;
+ }
+ function resliceSeg(seg, spanStart, spanEnd, cells) {
+ if (seg.firstCol === spanStart && seg.lastCol === spanEnd - 1) {
+ return seg;
+ }
+ let eventRange = seg.eventRange;
+ let origRange = eventRange.range;
+ let slicedRange = intersectRanges(origRange, {
+ start: cells[spanStart].date,
+ end: addDays(cells[spanEnd - 1].date, 1),
+ });
+ return Object.assign(Object.assign({}, seg), { firstCol: spanStart, lastCol: spanEnd - 1, eventRange: {
+ def: eventRange.def,
+ ui: Object.assign(Object.assign({}, eventRange.ui), { durationEditable: false }),
+ instance: eventRange.instance,
+ range: slicedRange,
+ }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() });
+ }
+ class DayGridSegHierarchy extends SegHierarchy {
+ constructor() {
+ super(...arguments);
+ // config
+ this.hiddenConsumes = false;
+ // allows us to keep hidden entries in the hierarchy so they take up space
+ this.forceHidden = {};
+ }
+ addSegs(segInputs) {
+ const hiddenSegs = super.addSegs(segInputs);
+ const { entriesByLevel } = this;
+ const excludeHidden = (entry) => !this.forceHidden[buildEntryKey(entry)];
+ // remove the forced-hidden segs
+ for (let level = 0; level < entriesByLevel.length; level += 1) {
+ entriesByLevel[level] = entriesByLevel[level].filter(excludeHidden);
+ }
+ return hiddenSegs;
+ }
+ handleInvalidInsertion(insertion, entry, hiddenEntries) {
+ const { entriesByLevel, forceHidden } = this;
+ const { touchingEntry, touchingLevel, touchingLateral } = insertion;
+ if (this.hiddenConsumes && touchingEntry) {
+ const touchingEntryId = buildEntryKey(touchingEntry);
+ // if not already hidden
+ if (!forceHidden[touchingEntryId]) {
+ if (this.allowReslicing) {
+ const placeholderEntry = Object.assign(Object.assign({}, touchingEntry), { span: intersectSpans(touchingEntry.span, entry.span) });
+ const placeholderEntryId = buildEntryKey(placeholderEntry);
+ forceHidden[placeholderEntryId] = true;
+ entriesByLevel[touchingLevel][touchingLateral] = placeholderEntry; // replace touchingEntry with our placeholder
+ this.splitEntry(touchingEntry, entry, hiddenEntries); // split up the touchingEntry, reinsert it
+ }
+ else {
+ forceHidden[touchingEntryId] = true;
+ hiddenEntries.push(touchingEntry);
+ }
+ }
+ }
+ return super.handleInvalidInsertion(insertion, entry, hiddenEntries);
+ }
+ }
+
+ class TableRow extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.cellElRefs = new RefMap(); // the <td>
+ this.frameElRefs = new RefMap(); // the fc-daygrid-day-frame
+ this.fgElRefs = new RefMap(); // the fc-daygrid-day-events
+ this.segHarnessRefs = new RefMap(); // indexed by "instanceId:firstCol"
+ this.rootElRef = y();
+ this.state = {
+ framePositions: null,
+ maxContentHeight: null,
+ eventInstanceHeights: {},
+ };
+ this.handleResize = (isForced) => {
+ if (isForced) {
+ this.updateSizing(true); // isExternal=true
+ }
+ };
+ }
+ render() {
+ let { props, state, context } = this;
+ let { options } = context;
+ let colCnt = props.cells.length;
+ let businessHoursByCol = splitSegsByFirstCol(props.businessHourSegs, colCnt);
+ let bgEventSegsByCol = splitSegsByFirstCol(props.bgEventSegs, colCnt);
+ let highlightSegsByCol = splitSegsByFirstCol(this.getHighlightSegs(), colCnt);
+ let mirrorSegsByCol = splitSegsByFirstCol(this.getMirrorSegs(), colCnt);
+ let { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops } = computeFgSegPlacement(sortEventSegs(props.fgEventSegs, options.eventOrder), props.dayMaxEvents, props.dayMaxEventRows, options.eventOrderStrict, state.eventInstanceHeights, state.maxContentHeight, props.cells);
+ let isForcedInvisible = // TODO: messy way to compute this
+ (props.eventDrag && props.eventDrag.affectedInstances) ||
+ (props.eventResize && props.eventResize.affectedInstances) ||
+ {};
+ return (h("tr", { ref: this.rootElRef, role: "row" },
+ props.renderIntro && props.renderIntro(),
+ props.cells.map((cell, col) => {
+ let normalFgNodes = this.renderFgSegs(col, props.forPrint ? singleColPlacements[col] : multiColPlacements[col], props.todayRange, isForcedInvisible);
+ let mirrorFgNodes = this.renderFgSegs(col, buildMirrorPlacements(mirrorSegsByCol[col], multiColPlacements), props.todayRange, {}, Boolean(props.eventDrag), Boolean(props.eventResize), false);
+ return (h(TableCell, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), innerElRef: this.frameElRefs.createRef(cell.key) /* FF <td> problem, but okay to use for left/right. TODO: rename prop */, dateProfile: props.dateProfile, date: cell.date, showDayNumber: props.showDayNumbers, showWeekNumber: props.showWeekNumbers && col === 0, forceDayTop: props.showWeekNumbers /* even displaying weeknum for row, not necessarily day */, todayRange: props.todayRange, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, moreCnt: moreCnts[col], moreMarginTop: moreMarginTops[col], singlePlacements: singleColPlacements[col], fgContentElRef: this.fgElRefs.createRef(cell.key), fgContent: ( // Fragment scopes the keys
+ h(p, null,
+ h(p, null, normalFgNodes),
+ h(p, null, mirrorFgNodes))), bgContent: ( // Fragment scopes the keys
+ h(p, null,
+ this.renderFillSegs(highlightSegsByCol[col], 'highlight'),
+ this.renderFillSegs(businessHoursByCol[col], 'non-business'),
+ this.renderFillSegs(bgEventSegsByCol[col], 'bg-event'))) }));
+ })));
+ }
+ componentDidMount() {
+ this.updateSizing(true);
+ this.context.addResizeHandler(this.handleResize);
+ }
+ componentDidUpdate(prevProps, prevState) {
+ let currentProps = this.props;
+ this.updateSizing(!isPropsEqual(prevProps, currentProps));
+ }
+ componentWillUnmount() {
+ this.context.removeResizeHandler(this.handleResize);
+ }
+ getHighlightSegs() {
+ let { props } = this;
+ if (props.eventDrag && props.eventDrag.segs.length) { // messy check
+ return props.eventDrag.segs;
+ }
+ if (props.eventResize && props.eventResize.segs.length) { // messy check
+ return props.eventResize.segs;
+ }
+ return props.dateSelectionSegs;
+ }
+ getMirrorSegs() {
+ let { props } = this;
+ if (props.eventResize && props.eventResize.segs.length) { // messy check
+ return props.eventResize.segs;
+ }
+ return [];
+ }
+ renderFgSegs(col, segPlacements, todayRange, isForcedInvisible, isDragging, isResizing, isDateSelecting) {
+ let { context } = this;
+ let { eventSelection } = this.props;
+ let { framePositions } = this.state;
+ let defaultDisplayEventEnd = this.props.cells.length === 1; // colCnt === 1
+ let isMirror = isDragging || isResizing || isDateSelecting;
+ let nodes = [];
+ if (framePositions) {
+ for (let placement of segPlacements) {
+ let { seg } = placement;
+ let { instanceId } = seg.eventRange.instance;
+ let key = instanceId + ':' + col;
+ let isVisible = placement.isVisible && !isForcedInvisible[instanceId];
+ let isAbsolute = placement.isAbsolute;
+ let left = '';
+ let right = '';
+ if (isAbsolute) {
+ if (context.isRtl) {
+ right = 0;
+ left = framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol];
+ }
+ else {
+ left = 0;
+ right = framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol];
+ }
+ }
+ /*
+ known bug: events that are force to be list-item but span multiple days still take up space in later columns
+ todo: in print view, for multi-day events, don't display title within non-start/end segs
+ */
+ nodes.push(h("div", { className: 'fc-daygrid-event-harness' + (isAbsolute ? ' fc-daygrid-event-harness-abs' : ''), key: key, ref: isMirror ? null : this.segHarnessRefs.createRef(key), style: {
+ visibility: isVisible ? '' : 'hidden',
+ marginTop: isAbsolute ? '' : placement.marginTop,
+ top: isAbsolute ? placement.absoluteTop : '',
+ left,
+ right,
+ } }, hasListItemDisplay(seg) ? (h(TableListItemEvent, Object.assign({ seg: seg, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getSegMeta(seg, todayRange)))) : (h(TableBlockEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, getSegMeta(seg, todayRange))))));
+ }
+ }
+ return nodes;
+ }
+ renderFillSegs(segs, fillType) {
+ let { isRtl } = this.context;
+ let { todayRange } = this.props;
+ let { framePositions } = this.state;
+ let nodes = [];
+ if (framePositions) {
+ for (let seg of segs) {
+ let leftRightCss = isRtl ? {
+ right: 0,
+ left: framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol],
+ } : {
+ left: 0,
+ right: framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol],
+ };
+ nodes.push(h("div", { key: buildEventRangeKey(seg.eventRange), className: "fc-daygrid-bg-harness", style: leftRightCss }, fillType === 'bg-event' ?
+ h(BgEvent, Object.assign({ seg: seg }, getSegMeta(seg, todayRange))) :
+ renderFill(fillType)));
+ }
+ }
+ return h(p, {}, ...nodes);
+ }
+ updateSizing(isExternalSizingChange) {
+ let { props, state, frameElRefs } = this;
+ if (!props.forPrint &&
+ props.clientWidth !== null // positioning ready?
+ ) {
+ if (isExternalSizingChange) {
+ let frameEls = props.cells.map((cell) => frameElRefs.currentMap[cell.key]);
+ if (frameEls.length) {
+ let originEl = this.rootElRef.current;
+ let newPositionCache = new PositionCache(originEl, frameEls, true, // isHorizontal
+ false);
+ if (!state.framePositions || !state.framePositions.similarTo(newPositionCache)) {
+ this.setState({
+ framePositions: new PositionCache(originEl, frameEls, true, // isHorizontal
+ false),
+ });
+ }
+ }
+ }
+ const oldInstanceHeights = this.state.eventInstanceHeights;
+ const newInstanceHeights = this.queryEventInstanceHeights();
+ const limitByContentHeight = props.dayMaxEvents === true || props.dayMaxEventRows === true;
+ this.safeSetState({
+ // HACK to prevent oscillations of events being shown/hidden from max-event-rows
+ // Essentially, once you compute an element's height, never null-out.
+ // TODO: always display all events, as visibility:hidden?
+ eventInstanceHeights: Object.assign(Object.assign({}, oldInstanceHeights), newInstanceHeights),
+ maxContentHeight: limitByContentHeight ? this.computeMaxContentHeight() : null,
+ });
+ }
+ }
+ queryEventInstanceHeights() {
+ let segElMap = this.segHarnessRefs.currentMap;
+ let eventInstanceHeights = {};
+ // get the max height amongst instance segs
+ for (let key in segElMap) {
+ let height = Math.round(segElMap[key].getBoundingClientRect().height);
+ let instanceId = key.split(':')[0]; // deconstruct how renderFgSegs makes the key
+ eventInstanceHeights[instanceId] = Math.max(eventInstanceHeights[instanceId] || 0, height);
+ }
+ return eventInstanceHeights;
+ }
+ computeMaxContentHeight() {
+ let firstKey = this.props.cells[0].key;
+ let cellEl = this.cellElRefs.currentMap[firstKey];
+ let fcContainerEl = this.fgElRefs.currentMap[firstKey];
+ return cellEl.getBoundingClientRect().bottom - fcContainerEl.getBoundingClientRect().top;
+ }
+ getCellEls() {
+ let elMap = this.cellElRefs.currentMap;
+ return this.props.cells.map((cell) => elMap[cell.key]);
+ }
+ }
+ TableRow.addStateEquality({
+ eventInstanceHeights: isPropsEqual,
+ });
+ function buildMirrorPlacements(mirrorSegs, colPlacements) {
+ if (!mirrorSegs.length) {
+ return [];
+ }
+ let topsByInstanceId = buildAbsoluteTopHash(colPlacements); // TODO: cache this at first render?
+ return mirrorSegs.map((seg) => ({
+ seg,
+ isVisible: true,
+ isAbsolute: true,
+ absoluteTop: topsByInstanceId[seg.eventRange.instance.instanceId],
+ marginTop: 0,
+ }));
+ }
+ function buildAbsoluteTopHash(colPlacements) {
+ let topsByInstanceId = {};
+ for (let placements of colPlacements) {
+ for (let placement of placements) {
+ topsByInstanceId[placement.seg.eventRange.instance.instanceId] = placement.absoluteTop;
+ }
+ }
+ return topsByInstanceId;
+ }
+
+ class Table extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.splitBusinessHourSegs = memoize(splitSegsByRow);
+ this.splitBgEventSegs = memoize(splitSegsByRow);
+ this.splitFgEventSegs = memoize(splitSegsByRow);
+ this.splitDateSelectionSegs = memoize(splitSegsByRow);
+ this.splitEventDrag = memoize(splitInteractionByRow);
+ this.splitEventResize = memoize(splitInteractionByRow);
+ this.rowRefs = new RefMap();
+ this.handleRootEl = (rootEl) => {
+ this.rootEl = rootEl;
+ if (rootEl) {
+ this.context.registerInteractiveComponent(this, {
+ el: rootEl,
+ isHitComboAllowed: this.props.isHitComboAllowed,
+ });
+ }
+ else {
+ this.context.unregisterInteractiveComponent(this);
+ }
+ };
+ }
+ render() {
+ let { props } = this;
+ let { dateProfile, dayMaxEventRows, dayMaxEvents, expandRows } = props;
+ let rowCnt = props.cells.length;
+ let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, rowCnt);
+ let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, rowCnt);
+ let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, rowCnt);
+ let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, rowCnt);
+ let eventDragByRow = this.splitEventDrag(props.eventDrag, rowCnt);
+ let eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt);
+ let limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true;
+ // if rows can't expand to fill fixed height, can't do balanced-height event limit
+ // TODO: best place to normalize these options?
+ if (limitViaBalanced && !expandRows) {
+ limitViaBalanced = false;
+ dayMaxEventRows = null;
+ dayMaxEvents = null;
+ }
+ let classNames = [
+ 'fc-daygrid-body',
+ limitViaBalanced ? 'fc-daygrid-body-balanced' : 'fc-daygrid-body-unbalanced',
+ expandRows ? '' : 'fc-daygrid-body-natural', // will height of one row depend on the others?
+ ];
+ return (h("div", { className: classNames.join(' '), ref: this.handleRootEl, style: {
+ // these props are important to give this wrapper correct dimensions for interactions
+ // TODO: if we set it here, can we avoid giving to inner tables?
+ width: props.clientWidth,
+ minWidth: props.tableMinWidth,
+ } },
+ h(NowTimer, { unit: "day" }, (nowDate, todayRange) => (h(p, null,
+ h("table", { role: "presentation", className: "fc-scrollgrid-sync-table", style: {
+ width: props.clientWidth,
+ minWidth: props.tableMinWidth,
+ height: expandRows ? props.clientHeight : '',
+ } },
+ props.colGroupNode,
+ h("tbody", { role: "presentation" }, props.cells.map((cells, row) => (h(TableRow, { ref: this.rowRefs.createRef(row), key: cells.length
+ ? cells[0].date.toISOString() /* best? or put key on cell? or use diff formatter? */
+ : row // in case there are no cells (like when resource view is loading)
+ , showDayNumbers: rowCnt > 1, showWeekNumbers: props.showWeekNumbers, todayRange: todayRange, dateProfile: dateProfile, cells: cells, renderIntro: props.renderRowIntro, businessHourSegs: businessHourSegsByRow[row], eventSelection: props.eventSelection, bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay) /* hack */, fgEventSegs: fgEventSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint }))))))))));
+ }
+ // Hit System
+ // ----------------------------------------------------------------------------------------------------
+ prepareHits() {
+ this.rowPositions = new PositionCache(this.rootEl, this.rowRefs.collect().map((rowObj) => rowObj.getCellEls()[0]), // first cell el in each row. TODO: not optimal
+ false, true);
+ this.colPositions = new PositionCache(this.rootEl, this.rowRefs.currentMap[0].getCellEls(), // cell els in first row
+ true, // horizontal
+ false);
+ }
+ queryHit(positionLeft, positionTop) {
+ let { colPositions, rowPositions } = this;
+ let col = colPositions.leftToIndex(positionLeft);
+ let row = rowPositions.topToIndex(positionTop);
+ if (row != null && col != null) {
+ let cell = this.props.cells[row][col];
+ return {
+ dateProfile: this.props.dateProfile,
+ dateSpan: Object.assign({ range: this.getCellRange(row, col), allDay: true }, cell.extraDateSpan),
+ dayEl: this.getCellEl(row, col),
+ rect: {
+ left: colPositions.lefts[col],
+ right: colPositions.rights[col],
+ top: rowPositions.tops[row],
+ bottom: rowPositions.bottoms[row],
+ },
+ layer: 0,
+ };
+ }
+ return null;
+ }
+ getCellEl(row, col) {
+ return this.rowRefs.currentMap[row].getCellEls()[col]; // TODO: not optimal
+ }
+ getCellRange(row, col) {
+ let start = this.props.cells[row][col].date;
+ let end = addDays(start, 1);
+ return { start, end };
+ }
+ }
+ function isSegAllDay(seg) {
+ return seg.eventRange.def.allDay;
+ }
+
+ class DayTableSlicer extends Slicer {
+ constructor() {
+ super(...arguments);
+ this.forceDayIfListItem = true;
+ }
+ sliceRange(dateRange, dayTableModel) {
+ return dayTableModel.sliceRange(dateRange);
+ }
+ }
+
+ class DayTable extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.slicer = new DayTableSlicer();
+ this.tableRef = y();
+ }
+ render() {
+ let { props, context } = this;
+ return (h(Table, Object.assign({ ref: this.tableRef }, this.slicer.sliceProps(props, props.dateProfile, props.nextDayThreshold, context, props.dayTableModel), { dateProfile: props.dateProfile, cells: props.dayTableModel.cells, colGroupNode: props.colGroupNode, tableMinWidth: props.tableMinWidth, renderRowIntro: props.renderRowIntro, dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, showWeekNumbers: props.showWeekNumbers, expandRows: props.expandRows, headerAlignElRef: props.headerAlignElRef, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint })));
+ }
+ }
+
+ class DayTableView extends TableView {
+ constructor() {
+ super(...arguments);
+ this.buildDayTableModel = memoize(buildDayTableModel);
+ this.headerRef = y();
+ this.tableRef = y();
+ }
+ render() {
+ let { options, dateProfileGenerator } = this.context;
+ let { props } = this;
+ let dayTableModel = this.buildDayTableModel(props.dateProfile, dateProfileGenerator);
+ let headerContent = options.dayHeaders && (h(DayHeader, { ref: this.headerRef, dateProfile: props.dateProfile, dates: dayTableModel.headerDates, datesRepDistinctDays: dayTableModel.rowCnt === 1 }));
+ let bodyContent = (contentArg) => (h(DayTable, { ref: this.tableRef, dateProfile: props.dateProfile, dayTableModel: dayTableModel, businessHours: props.businessHours, dateSelection: props.dateSelection, eventStore: props.eventStore, eventUiBases: props.eventUiBases, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, nextDayThreshold: options.nextDayThreshold, colGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, dayMaxEvents: options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows, showWeekNumbers: options.weekNumbers, expandRows: !props.isHeightAuto, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }));
+ return options.dayMinWidth
+ ? this.renderHScrollLayout(headerContent, bodyContent, dayTableModel.colCnt, options.dayMinWidth)
+ : this.renderSimpleLayout(headerContent, bodyContent);
+ }
+ }
+ function buildDayTableModel(dateProfile, dateProfileGenerator) {
+ let daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);
+ return new DayTableModel(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));
+ }
+
+ class TableDateProfileGenerator extends DateProfileGenerator {
+ // Computes the date range that will be rendered.
+ buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {
+ let { dateEnv } = this.props;
+ let renderRange = super.buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay);
+ let start = renderRange.start;
+ let end = renderRange.end;
+ let endOfWeek;
+ // year and month views should be aligned with weeks. this is already done for week
+ if (/^(year|month)$/.test(currentRangeUnit)) {
+ start = dateEnv.startOfWeek(start);
+ // make end-of-week if not already
+ endOfWeek = dateEnv.startOfWeek(end);
+ if (endOfWeek.valueOf() !== end.valueOf()) {
+ end = addWeeks(endOfWeek, 1);
+ }
+ }
+ // ensure 6 weeks
+ if (this.props.monthMode &&
+ this.props.fixedWeekCount) {
+ let rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
+ diffWeeks(start, end));
+ end = addWeeks(end, 6 - rowCnt);
+ }
+ return { start, end };
+ }
+ }
+
+ var css_248z$2 = ":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:\"\";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;padding:2px 3px 0}.fc .fc-daygrid-day-bottom:before{clear:both;content:\"\";display:table}.fc .fc-daygrid-more-link{cursor:pointer;position:relative;z-index:4}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}";
+ injectStyles(css_248z$2);
+
+ var index$2 = createPlugin({
+ name: '@fullcalendar/daygrid',
+ initialView: 'dayGridMonth',
+ views: {
+ dayGrid: {
+ component: DayTableView,
+ dateProfileGeneratorClass: TableDateProfileGenerator,
+ },
+ dayGridDay: {
+ type: 'dayGrid',
+ duration: { days: 1 },
+ },
+ dayGridWeek: {
+ type: 'dayGrid',
+ duration: { weeks: 1 },
+ },
+ dayGridMonth: {
+ type: 'dayGrid',
+ duration: { months: 1 },
+ monthMode: true,
+ fixedWeekCount: true,
+ },
+ },
+ });
+
+ class AllDaySplitter extends Splitter {
+ getKeyInfo() {
+ return {
+ allDay: {},
+ timed: {},
+ };
+ }
+ getKeysForDateSpan(dateSpan) {
+ if (dateSpan.allDay) {
+ return ['allDay'];
+ }
+ return ['timed'];
+ }
+ getKeysForEventDef(eventDef) {
+ if (!eventDef.allDay) {
+ return ['timed'];
+ }
+ if (hasBgRendering(eventDef)) {
+ return ['timed', 'allDay'];
+ }
+ return ['allDay'];
+ }
+ }
+
+ const DEFAULT_SLAT_LABEL_FORMAT = createFormatter({
+ hour: 'numeric',
+ minute: '2-digit',
+ omitZeroMinute: true,
+ meridiem: 'short',
+ });
+ function TimeColsAxisCell(props) {
+ let classNames = [
+ 'fc-timegrid-slot',
+ 'fc-timegrid-slot-label',
+ props.isLabeled ? 'fc-scrollgrid-shrink' : 'fc-timegrid-slot-minor',
+ ];
+ return (h(ViewContextType.Consumer, null, (context) => {
+ if (!props.isLabeled) {
+ return (h("td", { className: classNames.join(' '), "data-time": props.isoTimeStr }));
+ }
+ let { dateEnv, options, viewApi } = context;
+ let labelFormat = // TODO: fully pre-parse
+ options.slotLabelFormat == null ? DEFAULT_SLAT_LABEL_FORMAT :
+ Array.isArray(options.slotLabelFormat) ? createFormatter(options.slotLabelFormat[0]) :
+ createFormatter(options.slotLabelFormat);
+ let renderProps = {
+ level: 0,
+ time: props.time,
+ date: dateEnv.toDate(props.date),
+ view: viewApi,
+ text: dateEnv.format(props.date, labelFormat),
+ };
+ return (h(ContentContainer, { elTag: "td", elClasses: classNames, elAttrs: {
+ 'data-time': props.isoTimeStr,
+ }, renderProps: renderProps, generatorName: "slotLabelContent", generator: options.slotLabelContent || renderInnerContent$1, classNameGenerator: options.slotLabelClassNames, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, (InnerContent) => (h("div", { className: "fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame" },
+ h(InnerContent, { elTag: "div", elClasses: [
+ 'fc-timegrid-slot-label-cushion',
+ 'fc-scrollgrid-shrink-cushion',
+ ] })))));
+ }));
+ }
+ function renderInnerContent$1(props) {
+ return props.text;
+ }
+
+ class TimeBodyAxis extends BaseComponent {
+ render() {
+ return this.props.slatMetas.map((slatMeta) => (h("tr", { key: slatMeta.key },
+ h(TimeColsAxisCell, Object.assign({}, slatMeta)))));
+ }
+ }
+
+ const DEFAULT_WEEK_NUM_FORMAT = createFormatter({ week: 'short' });
+ const AUTO_ALL_DAY_MAX_EVENT_ROWS = 5;
+ class TimeColsView extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.allDaySplitter = new AllDaySplitter(); // for use by subclasses
+ this.headerElRef = y();
+ this.rootElRef = y();
+ this.scrollerElRef = y();
+ this.state = {
+ slatCoords: null,
+ };
+ this.handleScrollTopRequest = (scrollTop) => {
+ let scrollerEl = this.scrollerElRef.current;
+ if (scrollerEl) { // TODO: not sure how this could ever be null. weirdness with the reducer
+ scrollerEl.scrollTop = scrollTop;
+ }
+ };
+ /* Header Render Methods
+ ------------------------------------------------------------------------------------------------------------------*/
+ this.renderHeadAxis = (rowKey, frameHeight = '') => {
+ let { options } = this.context;
+ let { dateProfile } = this.props;
+ let range = dateProfile.renderRange;
+ let dayCnt = diffDays(range.start, range.end);
+ // only do in day views (to avoid doing in week views that dont need it)
+ let navLinkAttrs = (dayCnt === 1)
+ ? buildNavLinkAttrs(this.context, range.start, 'week')
+ : {};
+ if (options.weekNumbers && rowKey === 'day') {
+ return (h(WeekNumberContainer, { elTag: "th", elClasses: [
+ 'fc-timegrid-axis',
+ 'fc-scrollgrid-shrink',
+ ], elAttrs: {
+ 'aria-hidden': true,
+ }, date: range.start, defaultFormat: DEFAULT_WEEK_NUM_FORMAT }, (InnerContent) => (h("div", { className: [
+ 'fc-timegrid-axis-frame',
+ 'fc-scrollgrid-shrink-frame',
+ 'fc-timegrid-axis-frame-liquid',
+ ].join(' '), style: { height: frameHeight } },
+ h(InnerContent, { elTag: "a", elClasses: [
+ 'fc-timegrid-axis-cushion',
+ 'fc-scrollgrid-shrink-cushion',
+ 'fc-scrollgrid-sync-inner',
+ ], elAttrs: navLinkAttrs })))));
+ }
+ return (h("th", { "aria-hidden": true, className: "fc-timegrid-axis" },
+ h("div", { className: "fc-timegrid-axis-frame", style: { height: frameHeight } })));
+ };
+ /* Table Component Render Methods
+ ------------------------------------------------------------------------------------------------------------------*/
+ // only a one-way height sync. we don't send the axis inner-content height to the DayGrid,
+ // but DayGrid still needs to have classNames on inner elements in order to measure.
+ this.renderTableRowAxis = (rowHeight) => {
+ let { options, viewApi } = this.context;
+ let renderProps = {
+ text: options.allDayText,
+ view: viewApi,
+ };
+ return (
+ // TODO: make reusable hook. used in list view too
+ h(ContentContainer, { elTag: "td", elClasses: [
+ 'fc-timegrid-axis',
+ 'fc-scrollgrid-shrink',
+ ], elAttrs: {
+ 'aria-hidden': true,
+ }, renderProps: renderProps, generatorName: "allDayContent", generator: options.allDayContent || renderAllDayInner$1, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, (InnerContent) => (h("div", { className: [
+ 'fc-timegrid-axis-frame',
+ 'fc-scrollgrid-shrink-frame',
+ rowHeight == null ? ' fc-timegrid-axis-frame-liquid' : '',
+ ].join(' '), style: { height: rowHeight } },
+ h(InnerContent, { elTag: "span", elClasses: [
+ 'fc-timegrid-axis-cushion',
+ 'fc-scrollgrid-shrink-cushion',
+ 'fc-scrollgrid-sync-inner',
+ ] })))));
+ };
+ this.handleSlatCoords = (slatCoords) => {
+ this.setState({ slatCoords });
+ };
+ }
+ // rendering
+ // ----------------------------------------------------------------------------------------------------
+ renderSimpleLayout(headerRowContent, allDayContent, timeContent) {
+ let { context, props } = this;
+ let sections = [];
+ let stickyHeaderDates = getStickyHeaderDates(context.options);
+ if (headerRowContent) {
+ sections.push({
+ type: 'header',
+ key: 'header',
+ isSticky: stickyHeaderDates,
+ chunk: {
+ elRef: this.headerElRef,
+ tableClassName: 'fc-col-header',
+ rowContent: headerRowContent,
+ },
+ });
+ }
+ if (allDayContent) {
+ sections.push({
+ type: 'body',
+ key: 'all-day',
+ chunk: { content: allDayContent },
+ });
+ sections.push({
+ type: 'body',
+ key: 'all-day-divider',
+ outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?
+ h("tr", { role: "presentation", className: "fc-scrollgrid-section" },
+ h("td", { className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),
+ });
+ }
+ sections.push({
+ type: 'body',
+ key: 'body',
+ liquid: true,
+ expandRows: Boolean(context.options.expandRows),
+ chunk: {
+ scrollerElRef: this.scrollerElRef,
+ content: timeContent,
+ },
+ });
+ return (h(ViewContainer$1, { elRef: this.rootElRef, elClasses: ['fc-timegrid'], viewSpec: context.viewSpec },
+ h(SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [{ width: 'shrink' }], sections: sections })));
+ }
+ renderHScrollLayout(headerRowContent, allDayContent, timeContent, colCnt, dayMinWidth, slatMetas, slatCoords) {
+ let ScrollGrid = this.context.pluginHooks.scrollGridImpl;
+ if (!ScrollGrid) {
+ throw new Error('No ScrollGrid implementation');
+ }
+ let { context, props } = this;
+ let stickyHeaderDates = !props.forPrint && getStickyHeaderDates(context.options);
+ let stickyFooterScrollbar = !props.forPrint && getStickyFooterScrollbar(context.options);
+ let sections = [];
+ if (headerRowContent) {
+ sections.push({
+ type: 'header',
+ key: 'header',
+ isSticky: stickyHeaderDates,
+ syncRowHeights: true,
+ chunks: [
+ {
+ key: 'axis',
+ rowContent: (arg) => (h("tr", { role: "presentation" }, this.renderHeadAxis('day', arg.rowSyncHeights[0]))),
+ },
+ {
+ key: 'cols',
+ elRef: this.headerElRef,
+ tableClassName: 'fc-col-header',
+ rowContent: headerRowContent,
+ },
+ ],
+ });
+ }
+ if (allDayContent) {
+ sections.push({
+ type: 'body',
+ key: 'all-day',
+ syncRowHeights: true,
+ chunks: [
+ {
+ key: 'axis',
+ rowContent: (contentArg) => (h("tr", { role: "presentation" }, this.renderTableRowAxis(contentArg.rowSyncHeights[0]))),
+ },
+ {
+ key: 'cols',
+ content: allDayContent,
+ },
+ ],
+ });
+ sections.push({
+ key: 'all-day-divider',
+ type: 'body',
+ outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?
+ h("tr", { role: "presentation", className: "fc-scrollgrid-section" },
+ h("td", { colSpan: 2, className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),
+ });
+ }
+ let isNowIndicator = context.options.nowIndicator;
+ sections.push({
+ type: 'body',
+ key: 'body',
+ liquid: true,
+ expandRows: Boolean(context.options.expandRows),
+ chunks: [
+ {
+ key: 'axis',
+ content: (arg) => (
+ // TODO: make this now-indicator arrow more DRY with TimeColsContent
+ h("div", { className: "fc-timegrid-axis-chunk" },
+ h("table", { "aria-hidden": true, style: { height: arg.expandRows ? arg.clientHeight : '' } },
+ arg.tableColGroupNode,
+ h("tbody", null,
+ h(TimeBodyAxis, { slatMetas: slatMetas }))),
+ h("div", { className: "fc-timegrid-now-indicator-container" },
+ h(NowTimer, { unit: isNowIndicator ? 'minute' : 'day' /* hacky */ }, (nowDate) => {
+ let nowIndicatorTop = isNowIndicator &&
+ slatCoords &&
+ slatCoords.safeComputeTop(nowDate); // might return void
+ if (typeof nowIndicatorTop === 'number') {
+ return (h(NowIndicatorContainer, { elClasses: ['fc-timegrid-now-indicator-arrow'], elStyle: { top: nowIndicatorTop }, isAxis: true, date: nowDate }));
+ }
+ return null;
+ })))),
+ },
+ {
+ key: 'cols',
+ scrollerElRef: this.scrollerElRef,
+ content: timeContent,
+ },
+ ],
+ });
+ if (stickyFooterScrollbar) {
+ sections.push({
+ key: 'footer',
+ type: 'footer',
+ isSticky: true,
+ chunks: [
+ {
+ key: 'axis',
+ content: renderScrollShim,
+ },
+ {
+ key: 'cols',
+ content: renderScrollShim,
+ },
+ ],
+ });
+ }
+ return (h(ViewContainer$1, { elRef: this.rootElRef, elClasses: ['fc-timegrid'], viewSpec: context.viewSpec },
+ h(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: false, colGroups: [
+ { width: 'shrink', cols: [{ width: 'shrink' }] },
+ { cols: [{ span: colCnt, minWidth: dayMinWidth }] },
+ ], sections: sections })));
+ }
+ /* Dimensions
+ ------------------------------------------------------------------------------------------------------------------*/
+ getAllDayMaxEventProps() {
+ let { dayMaxEvents, dayMaxEventRows } = this.context.options;
+ if (dayMaxEvents === true || dayMaxEventRows === true) { // is auto?
+ dayMaxEvents = undefined;
+ dayMaxEventRows = AUTO_ALL_DAY_MAX_EVENT_ROWS; // make sure "auto" goes to a real number
+ }
+ return { dayMaxEvents, dayMaxEventRows };
+ }
+ }
+ function renderAllDayInner$1(renderProps) {
+ return renderProps.text;
+ }
+
+ class TimeColsSlatsCoords {
+ constructor(positions, dateProfile, slotDuration) {
+ this.positions = positions;
+ this.dateProfile = dateProfile;
+ this.slotDuration = slotDuration;
+ }
+ safeComputeTop(date) {
+ let { dateProfile } = this;
+ if (rangeContainsMarker(dateProfile.currentRange, date)) {
+ let startOfDayDate = startOfDay(date);
+ let timeMs = date.valueOf() - startOfDayDate.valueOf();
+ if (timeMs >= asRoughMs(dateProfile.slotMinTime) &&
+ timeMs < asRoughMs(dateProfile.slotMaxTime)) {
+ return this.computeTimeTop(createDuration(timeMs));
+ }
+ }
+ return null;
+ }
+ // Computes the top coordinate, relative to the bounds of the grid, of the given date.
+ // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
+ computeDateTop(when, startOfDayDate) {
+ if (!startOfDayDate) {
+ startOfDayDate = startOfDay(when);
+ }
+ return this.computeTimeTop(createDuration(when.valueOf() - startOfDayDate.valueOf()));
+ }
+ // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
+ // This is a makeshify way to compute the time-top. Assumes all slatMetas dates are uniform.
+ // Eventually allow computation with arbirary slat dates.
+ computeTimeTop(duration) {
+ let { positions, dateProfile } = this;
+ let len = positions.els.length;
+ // floating-point value of # of slots covered
+ let slatCoverage = (duration.milliseconds - asRoughMs(dateProfile.slotMinTime)) / asRoughMs(this.slotDuration);
+ let slatIndex;
+ let slatRemainder;
+ // compute a floating-point number for how many slats should be progressed through.
+ // from 0 to number of slats (inclusive)
+ // constrained because slotMinTime/slotMaxTime might be customized.
+ slatCoverage = Math.max(0, slatCoverage);
+ slatCoverage = Math.min(len, slatCoverage);
+ // an integer index of the furthest whole slat
+ // from 0 to number slats (*exclusive*, so len-1)
+ slatIndex = Math.floor(slatCoverage);
+ slatIndex = Math.min(slatIndex, len - 1);
+ // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
+ // could be 1.0 if slatCoverage is covering *all* the slots
+ slatRemainder = slatCoverage - slatIndex;
+ return positions.tops[slatIndex] +
+ positions.getHeight(slatIndex) * slatRemainder;
+ }
+ }
+
+ class TimeColsSlatsBody extends BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let { slatElRefs } = props;
+ return (h("tbody", null, props.slatMetas.map((slatMeta, i) => {
+ let renderProps = {
+ time: slatMeta.time,
+ date: context.dateEnv.toDate(slatMeta.date),
+ view: context.viewApi,
+ };
+ return (h("tr", { key: slatMeta.key, ref: slatElRefs.createRef(slatMeta.key) },
+ props.axis && (h(TimeColsAxisCell, Object.assign({}, slatMeta))),
+ h(ContentContainer, { elTag: "td", elClasses: [
+ 'fc-timegrid-slot',
+ 'fc-timegrid-slot-lane',
+ !slatMeta.isLabeled && 'fc-timegrid-slot-minor',
+ ], elAttrs: {
+ 'data-time': slatMeta.isoTimeStr,
+ }, renderProps: renderProps, generatorName: "slotLaneContent", generator: options.slotLaneContent, classNameGenerator: options.slotLaneClassNames, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount })));
+ })));
+ }
+ }
+
+ /*
+ for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
+ */
+ class TimeColsSlats extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.rootElRef = y();
+ this.slatElRefs = new RefMap();
+ }
+ render() {
+ let { props, context } = this;
+ return (h("div", { ref: this.rootElRef, className: "fc-timegrid-slots" },
+ h("table", { "aria-hidden": true, className: context.theme.getClass('table'), style: {
+ minWidth: props.tableMinWidth,
+ width: props.clientWidth,
+ height: props.minHeight,
+ } },
+ props.tableColGroupNode /* relies on there only being a single <col> for the axis */,
+ h(TimeColsSlatsBody, { slatElRefs: this.slatElRefs, axis: props.axis, slatMetas: props.slatMetas }))));
+ }
+ componentDidMount() {
+ this.updateSizing();
+ }
+ componentDidUpdate() {
+ this.updateSizing();
+ }
+ componentWillUnmount() {
+ if (this.props.onCoords) {
+ this.props.onCoords(null);
+ }
+ }
+ updateSizing() {
+ let { context, props } = this;
+ if (props.onCoords &&
+ props.clientWidth !== null // means sizing has stabilized
+ ) {
+ let rootEl = this.rootElRef.current;
+ if (rootEl.offsetHeight) { // not hidden by css
+ props.onCoords(new TimeColsSlatsCoords(new PositionCache(this.rootElRef.current, collectSlatEls(this.slatElRefs.currentMap, props.slatMetas), false, true), this.props.dateProfile, context.options.slotDuration));
+ }
+ }
+ }
+ }
+ function collectSlatEls(elMap, slatMetas) {
+ return slatMetas.map((slatMeta) => elMap[slatMeta.key]);
+ }
+
+ function splitSegsByCol(segs, colCnt) {
+ let segsByCol = [];
+ let i;
+ for (i = 0; i < colCnt; i += 1) {
+ segsByCol.push([]);
+ }
+ if (segs) {
+ for (i = 0; i < segs.length; i += 1) {
+ segsByCol[segs[i].col].push(segs[i]);
+ }
+ }
+ return segsByCol;
+ }
+ function splitInteractionByCol(ui, colCnt) {
+ let byRow = [];
+ if (!ui) {
+ for (let i = 0; i < colCnt; i += 1) {
+ byRow[i] = null;
+ }
+ }
+ else {
+ for (let i = 0; i < colCnt; i += 1) {
+ byRow[i] = {
+ affectedInstances: ui.affectedInstances,
+ isEvent: ui.isEvent,
+ segs: [],
+ };
+ }
+ for (let seg of ui.segs) {
+ byRow[seg.col].segs.push(seg);
+ }
+ }
+ return byRow;
+ }
+
+ class TimeColMoreLink extends BaseComponent {
+ render() {
+ let { props } = this;
+ return (h(MoreLinkContainer, { elClasses: ['fc-timegrid-more-link'], elStyle: {
+ top: props.top,
+ bottom: props.bottom,
+ }, allDayDate: null, moreCnt: props.hiddenSegs.length, allSegs: props.hiddenSegs, hiddenSegs: props.hiddenSegs, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, todayRange: props.todayRange, popoverContent: () => renderPlainFgSegs(props.hiddenSegs, props), defaultGenerator: renderMoreLinkInner }, (InnerContent) => (h(InnerContent, { elTag: "div", elClasses: ['fc-timegrid-more-link-inner', 'fc-sticky'] }))));
+ }
+ }
+ function renderMoreLinkInner(props) {
+ return props.shortText;
+ }
+
+ // segInputs assumed sorted
+ function buildPositioning(segInputs, strictOrder, maxStackCnt) {
+ let hierarchy = new SegHierarchy();
+ if (strictOrder != null) {
+ hierarchy.strictOrder = strictOrder;
+ }
+ if (maxStackCnt != null) {
+ hierarchy.maxStackCnt = maxStackCnt;
+ }
+ let hiddenEntries = hierarchy.addSegs(segInputs);
+ let hiddenGroups = groupIntersectingEntries(hiddenEntries);
+ let web = buildWeb(hierarchy);
+ web = stretchWeb(web, 1); // all levelCoords/thickness will have 0.0-1.0
+ let segRects = webToRects(web);
+ return { segRects, hiddenGroups };
+ }
+ function buildWeb(hierarchy) {
+ const { entriesByLevel } = hierarchy;
+ const buildNode = cacheable((level, lateral) => level + ':' + lateral, (level, lateral) => {
+ let siblingRange = findNextLevelSegs(hierarchy, level, lateral);
+ let nextLevelRes = buildNodes(siblingRange, buildNode);
+ let entry = entriesByLevel[level][lateral];
+ return [
+ Object.assign(Object.assign({}, entry), { nextLevelNodes: nextLevelRes[0] }),
+ entry.thickness + nextLevelRes[1], // the pressure builds
+ ];
+ });
+ return buildNodes(entriesByLevel.length
+ ? { level: 0, lateralStart: 0, lateralEnd: entriesByLevel[0].length }
+ : null, buildNode)[0];
+ }
+ function buildNodes(siblingRange, buildNode) {
+ if (!siblingRange) {
+ return [[], 0];
+ }
+ let { level, lateralStart, lateralEnd } = siblingRange;
+ let lateral = lateralStart;
+ let pairs = [];
+ while (lateral < lateralEnd) {
+ pairs.push(buildNode(level, lateral));
+ lateral += 1;
+ }
+ pairs.sort(cmpDescPressures);
+ return [
+ pairs.map(extractNode),
+ pairs[0][1], // first item's pressure
+ ];
+ }
+ function cmpDescPressures(a, b) {
+ return b[1] - a[1];
+ }
+ function extractNode(a) {
+ return a[0];
+ }
+ function findNextLevelSegs(hierarchy, subjectLevel, subjectLateral) {
+ let { levelCoords, entriesByLevel } = hierarchy;
+ let subjectEntry = entriesByLevel[subjectLevel][subjectLateral];
+ let afterSubject = levelCoords[subjectLevel] + subjectEntry.thickness;
+ let levelCnt = levelCoords.length;
+ let level = subjectLevel;
+ // skip past levels that are too high up
+ for (; level < levelCnt && levelCoords[level] < afterSubject; level += 1)
+ ; // do nothing
+ for (; level < levelCnt; level += 1) {
+ let entries = entriesByLevel[level];
+ let entry;
+ let searchIndex = binarySearch(entries, subjectEntry.span.start, getEntrySpanEnd);
+ let lateralStart = searchIndex[0] + searchIndex[1]; // if exact match (which doesn't collide), go to next one
+ let lateralEnd = lateralStart;
+ while ( // loop through entries that horizontally intersect
+ (entry = entries[lateralEnd]) && // but not past the whole seg list
+ entry.span.start < subjectEntry.span.end) {
+ lateralEnd += 1;
+ }
+ if (lateralStart < lateralEnd) {
+ return { level, lateralStart, lateralEnd };
+ }
+ }
+ return null;
+ }
+ function stretchWeb(topLevelNodes, totalThickness) {
+ const stretchNode = cacheable((node, startCoord, prevThickness) => buildEntryKey(node), (node, startCoord, prevThickness) => {
+ let { nextLevelNodes, thickness } = node;
+ let allThickness = thickness + prevThickness;
+ let thicknessFraction = thickness / allThickness;
+ let endCoord;
+ let newChildren = [];
+ if (!nextLevelNodes.length) {
+ endCoord = totalThickness;
+ }
+ else {
+ for (let childNode of nextLevelNodes) {
+ if (endCoord === undefined) {
+ let res = stretchNode(childNode, startCoord, allThickness);
+ endCoord = res[0];
+ newChildren.push(res[1]);
+ }
+ else {
+ let res = stretchNode(childNode, endCoord, 0);
+ newChildren.push(res[1]);
+ }
+ }
+ }
+ let newThickness = (endCoord - startCoord) * thicknessFraction;
+ return [endCoord - newThickness, Object.assign(Object.assign({}, node), { thickness: newThickness, nextLevelNodes: newChildren })];
+ });
+ return topLevelNodes.map((node) => stretchNode(node, 0, 0)[1]);
+ }
+ // not sorted in any particular order
+ function webToRects(topLevelNodes) {
+ let rects = [];
+ const processNode = cacheable((node, levelCoord, stackDepth) => buildEntryKey(node), (node, levelCoord, stackDepth) => {
+ let rect = Object.assign(Object.assign({}, node), { levelCoord,
+ stackDepth, stackForward: 0 });
+ rects.push(rect);
+ return (rect.stackForward = processNodes(node.nextLevelNodes, levelCoord + node.thickness, stackDepth + 1) + 1);
+ });
+ function processNodes(nodes, levelCoord, stackDepth) {
+ let stackForward = 0;
+ for (let node of nodes) {
+ stackForward = Math.max(processNode(node, levelCoord, stackDepth), stackForward);
+ }
+ return stackForward;
+ }
+ processNodes(topLevelNodes, 0, 0);
+ return rects; // TODO: sort rects by levelCoord to be consistent with toRects?
+ }
+ // TODO: move to general util
+ function cacheable(keyFunc, workFunc) {
+ const cache = {};
+ return (...args) => {
+ let key = keyFunc(...args);
+ return (key in cache)
+ ? cache[key]
+ : (cache[key] = workFunc(...args));
+ };
+ }
+
+ function computeSegVCoords(segs, colDate, slatCoords = null, eventMinHeight = 0) {
+ let vcoords = [];
+ if (slatCoords) {
+ for (let i = 0; i < segs.length; i += 1) {
+ let seg = segs[i];
+ let spanStart = slatCoords.computeDateTop(seg.start, colDate);
+ let spanEnd = Math.max(spanStart + (eventMinHeight || 0), // :(
+ slatCoords.computeDateTop(seg.end, colDate));
+ vcoords.push({
+ start: Math.round(spanStart),
+ end: Math.round(spanEnd), //
+ });
+ }
+ }
+ return vcoords;
+ }
+ function computeFgSegPlacements(segs, segVCoords, // might not have for every seg
+ eventOrderStrict, eventMaxStack) {
+ let segInputs = [];
+ let dumbSegs = []; // segs without coords
+ for (let i = 0; i < segs.length; i += 1) {
+ let vcoords = segVCoords[i];
+ if (vcoords) {
+ segInputs.push({
+ index: i,
+ thickness: 1,
+ span: vcoords,
+ });
+ }
+ else {
+ dumbSegs.push(segs[i]);
+ }
+ }
+ let { segRects, hiddenGroups } = buildPositioning(segInputs, eventOrderStrict, eventMaxStack);
+ let segPlacements = [];
+ for (let segRect of segRects) {
+ segPlacements.push({
+ seg: segs[segRect.index],
+ rect: segRect,
+ });
+ }
+ for (let dumbSeg of dumbSegs) {
+ segPlacements.push({ seg: dumbSeg, rect: null });
+ }
+ return { segPlacements, hiddenGroups };
+ }
+
+ const DEFAULT_TIME_FORMAT$1 = createFormatter({
+ hour: 'numeric',
+ minute: '2-digit',
+ meridiem: false,
+ });
+ class TimeColEvent extends BaseComponent {
+ render() {
+ return (h(StandardEvent, Object.assign({}, this.props, { elClasses: [
+ 'fc-timegrid-event',
+ 'fc-v-event',
+ this.props.isShort && 'fc-timegrid-event-short',
+ ], defaultTimeFormat: DEFAULT_TIME_FORMAT$1 })));
+ }
+ }
+
+ class TimeCol extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.sortEventSegs = memoize(sortEventSegs);
+ }
+ // TODO: memoize event-placement?
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let isSelectMirror = options.selectMirror;
+ let mirrorSegs = // yuck
+ (props.eventDrag && props.eventDrag.segs) ||
+ (props.eventResize && props.eventResize.segs) ||
+ (isSelectMirror && props.dateSelectionSegs) ||
+ [];
+ let interactionAffectedInstances = // TODO: messy way to compute this
+ (props.eventDrag && props.eventDrag.affectedInstances) ||
+ (props.eventResize && props.eventResize.affectedInstances) ||
+ {};
+ let sortedFgSegs = this.sortEventSegs(props.fgEventSegs, options.eventOrder);
+ return (h(DayCellContainer, { elTag: "td", elRef: props.elRef, elClasses: [
+ 'fc-timegrid-col',
+ ...(props.extraClassNames || []),
+ ], elAttrs: Object.assign({ role: 'gridcell' }, props.extraDataAttrs), date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraRenderProps: props.extraRenderProps }, (InnerContent) => (h("div", { className: "fc-timegrid-col-frame" },
+ h("div", { className: "fc-timegrid-col-bg" },
+ this.renderFillSegs(props.businessHourSegs, 'non-business'),
+ this.renderFillSegs(props.bgEventSegs, 'bg-event'),
+ this.renderFillSegs(props.dateSelectionSegs, 'highlight')),
+ h("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(sortedFgSegs, interactionAffectedInstances, false, false, false)),
+ h("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(mirrorSegs, {}, Boolean(props.eventDrag), Boolean(props.eventResize), Boolean(isSelectMirror))),
+ h("div", { className: "fc-timegrid-now-indicator-container" }, this.renderNowIndicator(props.nowIndicatorSegs)),
+ hasCustomDayCellContent(options) && (h(InnerContent, { elTag: "div", elClasses: ['fc-timegrid-col-misc'] }))))));
+ }
+ renderFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting) {
+ let { props } = this;
+ if (props.forPrint) {
+ return renderPlainFgSegs(sortedFgSegs, props);
+ }
+ return this.renderPositionedFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting);
+ }
+ renderPositionedFgSegs(segs, // if not mirror, needs to be sorted
+ segIsInvisible, isDragging, isResizing, isDateSelecting) {
+ let { eventMaxStack, eventShortHeight, eventOrderStrict, eventMinHeight } = this.context.options;
+ let { date, slatCoords, eventSelection, todayRange, nowDate } = this.props;
+ let isMirror = isDragging || isResizing || isDateSelecting;
+ let segVCoords = computeSegVCoords(segs, date, slatCoords, eventMinHeight);
+ let { segPlacements, hiddenGroups } = computeFgSegPlacements(segs, segVCoords, eventOrderStrict, eventMaxStack);
+ return (h(p, null,
+ this.renderHiddenGroups(hiddenGroups, segs),
+ segPlacements.map((segPlacement) => {
+ let { seg, rect } = segPlacement;
+ let instanceId = seg.eventRange.instance.instanceId;
+ let isVisible = isMirror || Boolean(!segIsInvisible[instanceId] && rect);
+ let vStyle = computeSegVStyle(rect && rect.span);
+ let hStyle = (!isMirror && rect) ? this.computeSegHStyle(rect) : { left: 0, right: 0 };
+ let isInset = Boolean(rect) && rect.stackForward > 0;
+ let isShort = Boolean(rect) && (rect.span.end - rect.span.start) < eventShortHeight; // look at other places for this problem
+ return (h("div", { className: 'fc-timegrid-event-harness' +
+ (isInset ? ' fc-timegrid-event-harness-inset' : ''), key: instanceId, style: Object.assign(Object.assign({ visibility: isVisible ? '' : 'hidden' }, vStyle), hStyle) },
+ h(TimeColEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, isShort: isShort }, getSegMeta(seg, todayRange, nowDate)))));
+ })));
+ }
+ // will already have eventMinHeight applied because segInputs already had it
+ renderHiddenGroups(hiddenGroups, segs) {
+ let { extraDateSpan, dateProfile, todayRange, nowDate, eventSelection, eventDrag, eventResize } = this.props;
+ return (h(p, null, hiddenGroups.map((hiddenGroup) => {
+ let positionCss = computeSegVStyle(hiddenGroup.span);
+ let hiddenSegs = compileSegsFromEntries(hiddenGroup.entries, segs);
+ return (h(TimeColMoreLink, { key: buildIsoString(computeEarliestSegStart(hiddenSegs)), hiddenSegs: hiddenSegs, top: positionCss.top, bottom: positionCss.bottom, extraDateSpan: extraDateSpan, dateProfile: dateProfile, todayRange: todayRange, nowDate: nowDate, eventSelection: eventSelection, eventDrag: eventDrag, eventResize: eventResize }));
+ })));
+ }
+ renderFillSegs(segs, fillType) {
+ let { props, context } = this;
+ let segVCoords = computeSegVCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight); // don't assume all populated
+ let children = segVCoords.map((vcoords, i) => {
+ let seg = segs[i];
+ return (h("div", { key: buildEventRangeKey(seg.eventRange), className: "fc-timegrid-bg-harness", style: computeSegVStyle(vcoords) }, fillType === 'bg-event' ?
+ h(BgEvent, Object.assign({ seg: seg }, getSegMeta(seg, props.todayRange, props.nowDate))) :
+ renderFill(fillType)));
+ });
+ return h(p, null, children);
+ }
+ renderNowIndicator(segs) {
+ let { slatCoords, date } = this.props;
+ if (!slatCoords) {
+ return null;
+ }
+ return segs.map((seg, i) => (h(NowIndicatorContainer
+ // key doesn't matter. will only ever be one
+ , {
+ // key doesn't matter. will only ever be one
+ key: i, elClasses: ['fc-timegrid-now-indicator-line'], elStyle: {
+ top: slatCoords.computeDateTop(seg.start, date),
+ }, isAxis: false, date: date })));
+ }
+ computeSegHStyle(segHCoords) {
+ let { isRtl, options } = this.context;
+ let shouldOverlap = options.slotEventOverlap;
+ let nearCoord = segHCoords.levelCoord; // the left side if LTR. the right side if RTL. floating-point
+ let farCoord = segHCoords.levelCoord + segHCoords.thickness; // the right side if LTR. the left side if RTL. floating-point
+ let left; // amount of space from left edge, a fraction of the total width
+ let right; // amount of space from right edge, a fraction of the total width
+ if (shouldOverlap) {
+ // double the width, but don't go beyond the maximum forward coordinate (1.0)
+ farCoord = Math.min(1, nearCoord + (farCoord - nearCoord) * 2);
+ }
+ if (isRtl) {
+ left = 1 - farCoord;
+ right = nearCoord;
+ }
+ else {
+ left = nearCoord;
+ right = 1 - farCoord;
+ }
+ let props = {
+ zIndex: segHCoords.stackDepth + 1,
+ left: left * 100 + '%',
+ right: right * 100 + '%',
+ };
+ if (shouldOverlap && !segHCoords.stackForward) {
+ // add padding to the edge so that forward stacked events don't cover the resizer's icon
+ props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
+ }
+ return props;
+ }
+ }
+ function renderPlainFgSegs(sortedFgSegs, { todayRange, nowDate, eventSelection, eventDrag, eventResize }) {
+ let hiddenInstances = (eventDrag ? eventDrag.affectedInstances : null) ||
+ (eventResize ? eventResize.affectedInstances : null) ||
+ {};
+ return (h(p, null, sortedFgSegs.map((seg) => {
+ let instanceId = seg.eventRange.instance.instanceId;
+ return (h("div", { key: instanceId, style: { visibility: hiddenInstances[instanceId] ? 'hidden' : '' } },
+ h(TimeColEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === eventSelection, isShort: false }, getSegMeta(seg, todayRange, nowDate)))));
+ })));
+ }
+ function computeSegVStyle(segVCoords) {
+ if (!segVCoords) {
+ return { top: '', bottom: '' };
+ }
+ return {
+ top: segVCoords.start,
+ bottom: -segVCoords.end,
+ };
+ }
+ function compileSegsFromEntries(segEntries, allSegs) {
+ return segEntries.map((segEntry) => allSegs[segEntry.index]);
+ }
+
+ class TimeColsContent extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.splitFgEventSegs = memoize(splitSegsByCol);
+ this.splitBgEventSegs = memoize(splitSegsByCol);
+ this.splitBusinessHourSegs = memoize(splitSegsByCol);
+ this.splitNowIndicatorSegs = memoize(splitSegsByCol);
+ this.splitDateSelectionSegs = memoize(splitSegsByCol);
+ this.splitEventDrag = memoize(splitInteractionByCol);
+ this.splitEventResize = memoize(splitInteractionByCol);
+ this.rootElRef = y();
+ this.cellElRefs = new RefMap();
+ }
+ render() {
+ let { props, context } = this;
+ let nowIndicatorTop = context.options.nowIndicator &&
+ props.slatCoords &&
+ props.slatCoords.safeComputeTop(props.nowDate); // might return void
+ let colCnt = props.cells.length;
+ let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, colCnt);
+ let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, colCnt);
+ let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, colCnt);
+ let nowIndicatorSegsByRow = this.splitNowIndicatorSegs(props.nowIndicatorSegs, colCnt);
+ let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, colCnt);
+ let eventDragByRow = this.splitEventDrag(props.eventDrag, colCnt);
+ let eventResizeByRow = this.splitEventResize(props.eventResize, colCnt);
+ return (h("div", { className: "fc-timegrid-cols", ref: this.rootElRef },
+ h("table", { role: "presentation", style: {
+ minWidth: props.tableMinWidth,
+ width: props.clientWidth,
+ } },
+ props.tableColGroupNode,
+ h("tbody", { role: "presentation" },
+ h("tr", { role: "row" },
+ props.axis && (h("td", { "aria-hidden": true, className: "fc-timegrid-col fc-timegrid-axis" },
+ h("div", { className: "fc-timegrid-col-frame" },
+ h("div", { className: "fc-timegrid-now-indicator-container" }, typeof nowIndicatorTop === 'number' && (h(NowIndicatorContainer, { elClasses: ['fc-timegrid-now-indicator-arrow'], elStyle: { top: nowIndicatorTop }, isAxis: true, date: props.nowDate })))))),
+ props.cells.map((cell, i) => (h(TimeCol, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), dateProfile: props.dateProfile, date: cell.date, nowDate: props.nowDate, todayRange: props.todayRange, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, fgEventSegs: fgEventSegsByRow[i], bgEventSegs: bgEventSegsByRow[i], businessHourSegs: businessHourSegsByRow[i], nowIndicatorSegs: nowIndicatorSegsByRow[i], dateSelectionSegs: dateSelectionSegsByRow[i], eventDrag: eventDragByRow[i], eventResize: eventResizeByRow[i], slatCoords: props.slatCoords, eventSelection: props.eventSelection, forPrint: props.forPrint }))))))));
+ }
+ componentDidMount() {
+ this.updateCoords();
+ }
+ componentDidUpdate() {
+ this.updateCoords();
+ }
+ updateCoords() {
+ let { props } = this;
+ if (props.onColCoords &&
+ props.clientWidth !== null // means sizing has stabilized
+ ) {
+ props.onColCoords(new PositionCache(this.rootElRef.current, collectCellEls(this.cellElRefs.currentMap, props.cells), true, // horizontal
+ false));
+ }
+ }
+ }
+ function collectCellEls(elMap, cells) {
+ return cells.map((cell) => elMap[cell.key]);
+ }
+
+ /* A component that renders one or more columns of vertical time slots
+ ----------------------------------------------------------------------------------------------------------------------*/
+ class TimeCols extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.processSlotOptions = memoize(processSlotOptions);
+ this.state = {
+ slatCoords: null,
+ };
+ this.handleRootEl = (el) => {
+ if (el) {
+ this.context.registerInteractiveComponent(this, {
+ el,
+ isHitComboAllowed: this.props.isHitComboAllowed,
+ });
+ }
+ else {
+ this.context.unregisterInteractiveComponent(this);
+ }
+ };
+ this.handleScrollRequest = (request) => {
+ let { onScrollTopRequest } = this.props;
+ let { slatCoords } = this.state;
+ if (onScrollTopRequest && slatCoords) {
+ if (request.time) {
+ let top = slatCoords.computeTimeTop(request.time);
+ top = Math.ceil(top); // zoom can give weird floating-point values. rather scroll a little bit further
+ if (top) {
+ top += 1; // to overcome top border that slots beyond the first have. looks better
+ }
+ onScrollTopRequest(top);
+ }
+ return true;
+ }
+ return false;
+ };
+ this.handleColCoords = (colCoords) => {
+ this.colCoords = colCoords;
+ };
+ this.handleSlatCoords = (slatCoords) => {
+ this.setState({ slatCoords });
+ if (this.props.onSlatCoords) {
+ this.props.onSlatCoords(slatCoords);
+ }
+ };
+ }
+ render() {
+ let { props, state } = this;
+ return (h("div", { className: "fc-timegrid-body", ref: this.handleRootEl, style: {
+ // these props are important to give this wrapper correct dimensions for interactions
+ // TODO: if we set it here, can we avoid giving to inner tables?
+ width: props.clientWidth,
+ minWidth: props.tableMinWidth,
+ } },
+ h(TimeColsSlats, { axis: props.axis, dateProfile: props.dateProfile, slatMetas: props.slatMetas, clientWidth: props.clientWidth, minHeight: props.expandRows ? props.clientHeight : '', tableMinWidth: props.tableMinWidth, tableColGroupNode: props.axis ? props.tableColGroupNode : null /* axis depends on the colgroup's shrinking */, onCoords: this.handleSlatCoords }),
+ h(TimeColsContent, { cells: props.cells, axis: props.axis, dateProfile: props.dateProfile, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange, nowDate: props.nowDate, nowIndicatorSegs: props.nowIndicatorSegs, clientWidth: props.clientWidth, tableMinWidth: props.tableMinWidth, tableColGroupNode: props.tableColGroupNode, slatCoords: state.slatCoords, onColCoords: this.handleColCoords, forPrint: props.forPrint })));
+ }
+ componentDidMount() {
+ this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);
+ }
+ componentDidUpdate(prevProps) {
+ this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);
+ }
+ componentWillUnmount() {
+ this.scrollResponder.detach();
+ }
+ queryHit(positionLeft, positionTop) {
+ let { dateEnv, options } = this.context;
+ let { colCoords } = this;
+ let { dateProfile } = this.props;
+ let { slatCoords } = this.state;
+ let { snapDuration, snapsPerSlot } = this.processSlotOptions(this.props.slotDuration, options.snapDuration);
+ let colIndex = colCoords.leftToIndex(positionLeft);
+ let slatIndex = slatCoords.positions.topToIndex(positionTop);
+ if (colIndex != null && slatIndex != null) {
+ let cell = this.props.cells[colIndex];
+ let slatTop = slatCoords.positions.tops[slatIndex];
+ let slatHeight = slatCoords.positions.getHeight(slatIndex);
+ let partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1
+ let localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
+ let snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
+ let dayDate = this.props.cells[colIndex].date;
+ let time = addDurations(dateProfile.slotMinTime, multiplyDuration(snapDuration, snapIndex));
+ let start = dateEnv.add(dayDate, time);
+ let end = dateEnv.add(start, snapDuration);
+ return {
+ dateProfile,
+ dateSpan: Object.assign({ range: { start, end }, allDay: false }, cell.extraDateSpan),
+ dayEl: colCoords.els[colIndex],
+ rect: {
+ left: colCoords.lefts[colIndex],
+ right: colCoords.rights[colIndex],
+ top: slatTop,
+ bottom: slatTop + slatHeight,
+ },
+ layer: 0,
+ };
+ }
+ return null;
+ }
+ }
+ function processSlotOptions(slotDuration, snapDurationOverride) {
+ let snapDuration = snapDurationOverride || slotDuration;
+ let snapsPerSlot = wholeDivideDurations(slotDuration, snapDuration);
+ if (snapsPerSlot === null) {
+ snapDuration = slotDuration;
+ snapsPerSlot = 1;
+ // TODO: say warning?
+ }
+ return { snapDuration, snapsPerSlot };
+ }
+
+ class DayTimeColsSlicer extends Slicer {
+ sliceRange(range, dayRanges) {
+ let segs = [];
+ for (let col = 0; col < dayRanges.length; col += 1) {
+ let segRange = intersectRanges(range, dayRanges[col]);
+ if (segRange) {
+ segs.push({
+ start: segRange.start,
+ end: segRange.end,
+ isStart: segRange.start.valueOf() === range.start.valueOf(),
+ isEnd: segRange.end.valueOf() === range.end.valueOf(),
+ col,
+ });
+ }
+ }
+ return segs;
+ }
+ }
+
+ class DayTimeCols extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.buildDayRanges = memoize(buildDayRanges);
+ this.slicer = new DayTimeColsSlicer();
+ this.timeColsRef = y();
+ }
+ render() {
+ let { props, context } = this;
+ let { dateProfile, dayTableModel } = props;
+ let isNowIndicator = context.options.nowIndicator;
+ let dayRanges = this.buildDayRanges(dayTableModel, dateProfile, context.dateEnv);
+ // give it the first row of cells
+ // TODO: would move this further down hierarchy, but sliceNowDate needs it
+ return (h(NowTimer, { unit: isNowIndicator ? 'minute' : 'day' }, (nowDate, todayRange) => (h(TimeCols, Object.assign({ ref: this.timeColsRef }, this.slicer.sliceProps(props, dateProfile, null, context, dayRanges), { forPrint: props.forPrint, axis: props.axis, dateProfile: dateProfile, slatMetas: props.slatMetas, slotDuration: props.slotDuration, cells: dayTableModel.cells[0], tableColGroupNode: props.tableColGroupNode, tableMinWidth: props.tableMinWidth, clientWidth: props.clientWidth, clientHeight: props.clientHeight, expandRows: props.expandRows, nowDate: nowDate, nowIndicatorSegs: isNowIndicator && this.slicer.sliceNowDate(nowDate, context, dayRanges), todayRange: todayRange, onScrollTopRequest: props.onScrollTopRequest, onSlatCoords: props.onSlatCoords })))));
+ }
+ }
+ function buildDayRanges(dayTableModel, dateProfile, dateEnv) {
+ let ranges = [];
+ for (let date of dayTableModel.headerDates) {
+ ranges.push({
+ start: dateEnv.add(date, dateProfile.slotMinTime),
+ end: dateEnv.add(date, dateProfile.slotMaxTime),
+ });
+ }
+ return ranges;
+ }
+
+ // potential nice values for the slot-duration and interval-duration
+ // from largest to smallest
+ const STOCK_SUB_DURATIONS = [
+ { hours: 1 },
+ { minutes: 30 },
+ { minutes: 15 },
+ { seconds: 30 },
+ { seconds: 15 },
+ ];
+ function buildSlatMetas(slotMinTime, slotMaxTime, explicitLabelInterval, slotDuration, dateEnv) {
+ let dayStart = new Date(0);
+ let slatTime = slotMinTime;
+ let slatIterator = createDuration(0);
+ let labelInterval = explicitLabelInterval || computeLabelInterval(slotDuration);
+ let metas = [];
+ while (asRoughMs(slatTime) < asRoughMs(slotMaxTime)) {
+ let date = dateEnv.add(dayStart, slatTime);
+ let isLabeled = wholeDivideDurations(slatIterator, labelInterval) !== null;
+ metas.push({
+ date,
+ time: slatTime,
+ key: date.toISOString(),
+ isoTimeStr: formatIsoTimeString(date),
+ isLabeled,
+ });
+ slatTime = addDurations(slatTime, slotDuration);
+ slatIterator = addDurations(slatIterator, slotDuration);
+ }
+ return metas;
+ }
+ // Computes an automatic value for slotLabelInterval
+ function computeLabelInterval(slotDuration) {
+ let i;
+ let labelInterval;
+ let slotsPerLabel;
+ // find the smallest stock label interval that results in more than one slots-per-label
+ for (i = STOCK_SUB_DURATIONS.length - 1; i >= 0; i -= 1) {
+ labelInterval = createDuration(STOCK_SUB_DURATIONS[i]);
+ slotsPerLabel = wholeDivideDurations(labelInterval, slotDuration);
+ if (slotsPerLabel !== null && slotsPerLabel > 1) {
+ return labelInterval;
+ }
+ }
+ return slotDuration; // fall back
+ }
+
+ class DayTimeColsView extends TimeColsView {
+ constructor() {
+ super(...arguments);
+ this.buildTimeColsModel = memoize(buildTimeColsModel);
+ this.buildSlatMetas = memoize(buildSlatMetas);
+ }
+ render() {
+ let { options, dateEnv, dateProfileGenerator } = this.context;
+ let { props } = this;
+ let { dateProfile } = props;
+ let dayTableModel = this.buildTimeColsModel(dateProfile, dateProfileGenerator);
+ let splitProps = this.allDaySplitter.splitProps(props);
+ let slatMetas = this.buildSlatMetas(dateProfile.slotMinTime, dateProfile.slotMaxTime, options.slotLabelInterval, options.slotDuration, dateEnv);
+ let { dayMinWidth } = options;
+ let hasAttachedAxis = !dayMinWidth;
+ let hasDetachedAxis = dayMinWidth;
+ let headerContent = options.dayHeaders && (h(DayHeader, { dates: dayTableModel.headerDates, dateProfile: dateProfile, datesRepDistinctDays: true, renderIntro: hasAttachedAxis ? this.renderHeadAxis : null }));
+ let allDayContent = (options.allDaySlot !== false) && ((contentArg) => (h(DayTable, Object.assign({}, splitProps.allDay, { dateProfile: dateProfile, dayTableModel: dayTableModel, nextDayThreshold: options.nextDayThreshold, tableMinWidth: contentArg.tableMinWidth, colGroupNode: contentArg.tableColGroupNode, renderRowIntro: hasAttachedAxis ? this.renderTableRowAxis : null, showWeekNumbers: false, expandRows: false, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }, this.getAllDayMaxEventProps()))));
+ let timeGridContent = (contentArg) => (h(DayTimeCols, Object.assign({}, splitProps.timed, { dayTableModel: dayTableModel, dateProfile: dateProfile, axis: hasAttachedAxis, slotDuration: options.slotDuration, slatMetas: slatMetas, forPrint: props.forPrint, tableColGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, onSlatCoords: this.handleSlatCoords, expandRows: contentArg.expandRows, onScrollTopRequest: this.handleScrollTopRequest })));
+ return hasDetachedAxis
+ ? this.renderHScrollLayout(headerContent, allDayContent, timeGridContent, dayTableModel.colCnt, dayMinWidth, slatMetas, this.state.slatCoords)
+ : this.renderSimpleLayout(headerContent, allDayContent, timeGridContent);
+ }
+ }
+ function buildTimeColsModel(dateProfile, dateProfileGenerator) {
+ let daySeries = new DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);
+ return new DayTableModel(daySeries, false);
+ }
+
+ const OPTION_REFINERS$1 = {
+ allDaySlot: Boolean,
+ };
+
+ var css_248z$1 = ".fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:\"\\00a0\"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:\"\\00a0-\\00a0\"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}";
+ injectStyles(css_248z$1);
+
+ var index$1 = createPlugin({
+ name: '@fullcalendar/timegrid',
+ initialView: 'timeGridWeek',
+ optionRefiners: OPTION_REFINERS$1,
+ views: {
+ timeGrid: {
+ component: DayTimeColsView,
+ usesMinMaxTime: true,
+ allDaySlot: true,
+ slotDuration: '00:30:00',
+ slotEventOverlap: true, // a bad name. confused with overlap/constraint system
+ },
+ timeGridDay: {
+ type: 'timeGrid',
+ duration: { days: 1 },
+ },
+ timeGridWeek: {
+ type: 'timeGrid',
+ duration: { weeks: 1 },
+ },
+ },
+ });
+
+ class ListViewHeaderRow extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ textId: getUniqueDomId(),
+ };
+ }
+ render() {
+ let { theme, dateEnv, options, viewApi } = this.context;
+ let { cellId, dayDate, todayRange } = this.props;
+ let { textId } = this.state;
+ let dayMeta = getDateMeta(dayDate, todayRange);
+ // will ever be falsy?
+ let text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : '';
+ // will ever be falsy? also, BAD NAME "alt"
+ let sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : '';
+ let renderProps = Object.assign({ date: dateEnv.toDate(dayDate), view: viewApi, textId,
+ text,
+ sideText, navLinkAttrs: buildNavLinkAttrs(this.context, dayDate), sideNavLinkAttrs: buildNavLinkAttrs(this.context, dayDate, 'day', false) }, dayMeta);
+ // TODO: make a reusable HOC for dayHeader (used in daygrid/timegrid too)
+ return (h(ContentContainer, { elTag: "tr", elClasses: [
+ 'fc-list-day',
+ ...getDayClassNames(dayMeta, theme),
+ ], elAttrs: {
+ 'data-date': formatDayString(dayDate),
+ }, renderProps: renderProps, generatorName: "dayHeaderContent", generator: options.dayHeaderContent || renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => ( // TODO: force-hide top border based on :first-child
+ h("th", { scope: "colgroup", colSpan: 3, id: cellId, "aria-labelledby": textId },
+ h(InnerContent, { elTag: "div", elClasses: [
+ 'fc-list-day-cushion',
+ theme.getClass('tableCellShaded'),
+ ] })))));
+ }
+ }
+ function renderInnerContent(props) {
+ return (h(p, null,
+ props.text && (h("a", Object.assign({ id: props.textId, className: "fc-list-day-text" }, props.navLinkAttrs), props.text)),
+ props.sideText && ( /* not keyboard tabbable */h("a", Object.assign({ "aria-hidden": true, className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText))));
+ }
+
+ const DEFAULT_TIME_FORMAT = createFormatter({
+ hour: 'numeric',
+ minute: '2-digit',
+ meridiem: 'short',
+ });
+ class ListViewEventRow extends BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let { seg, timeHeaderId, eventHeaderId, dateHeaderId } = props;
+ let timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT;
+ return (h(EventContainer, Object.assign({}, props, { elTag: "tr", elClasses: [
+ 'fc-list-event',
+ seg.eventRange.def.url && 'fc-event-forced-url',
+ ], defaultGenerator: () => renderEventInnerContent(seg, context) /* weird */, seg: seg, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (h(p, null,
+ buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId),
+ h("td", { "aria-hidden": true, className: "fc-list-event-graphic" },
+ h("span", { className: "fc-list-event-dot", style: {
+ borderColor: eventContentArg.borderColor || eventContentArg.backgroundColor,
+ } })),
+ h(InnerContent, { elTag: "td", elClasses: ['fc-list-event-title'], elAttrs: { headers: `${eventHeaderId} ${dateHeaderId}` } })))));
+ }
+ }
+ function renderEventInnerContent(seg, context) {
+ let interactiveAttrs = getSegAnchorAttrs(seg, context);
+ return (h("a", Object.assign({}, interactiveAttrs), seg.eventRange.def.title));
+ }
+ function buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId) {
+ let { options } = context;
+ if (options.displayEventTime !== false) {
+ let eventDef = seg.eventRange.def;
+ let eventInstance = seg.eventRange.instance;
+ let doAllDay = false;
+ let timeText;
+ if (eventDef.allDay) {
+ doAllDay = true;
+ }
+ else if (isMultiDayRange(seg.eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
+ if (seg.isStart) {
+ timeText = buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);
+ }
+ else if (seg.isEnd) {
+ timeText = buildSegTimeText(seg, timeFormat, context, null, null, seg.start, eventInstance.range.end);
+ }
+ else {
+ doAllDay = true;
+ }
+ }
+ else {
+ timeText = buildSegTimeText(seg, timeFormat, context);
+ }
+ if (doAllDay) {
+ let renderProps = {
+ text: context.options.allDayText,
+ view: context.viewApi,
+ };
+ return (h(ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
+ headers: `${timeHeaderId} ${dateHeaderId}`,
+ }, renderProps: renderProps, generatorName: "allDayContent", generator: options.allDayContent || renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
+ }
+ return (h("td", { className: "fc-list-event-time" }, timeText));
+ }
+ return null;
+ }
+ function renderAllDayInner(renderProps) {
+ return renderProps.text;
+ }
+
+ /*
+ Responsible for the scroller, and forwarding event-related actions into the "grid".
+ */
+ class ListView extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.computeDateVars = memoize(computeDateVars);
+ this.eventStoreToSegs = memoize(this._eventStoreToSegs);
+ this.state = {
+ timeHeaderId: getUniqueDomId(),
+ eventHeaderId: getUniqueDomId(),
+ dateHeaderIdRoot: getUniqueDomId(),
+ };
+ this.setRootEl = (rootEl) => {
+ if (rootEl) {
+ this.context.registerInteractiveComponent(this, {
+ el: rootEl,
+ });
+ }
+ else {
+ this.context.unregisterInteractiveComponent(this);
+ }
+ };
+ }
+ render() {
+ let { props, context } = this;
+ let { dayDates, dayRanges } = this.computeDateVars(props.dateProfile);
+ let eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges);
+ return (h(ViewContainer$1, { elRef: this.setRootEl, elClasses: [
+ 'fc-list',
+ context.theme.getClass('table'),
+ context.options.stickyHeaderDates !== false ?
+ 'fc-list-sticky' :
+ '',
+ ], viewSpec: context.viewSpec },
+ h(Scroller, { liquid: !props.isHeightAuto, overflowX: props.isHeightAuto ? 'visible' : 'hidden', overflowY: props.isHeightAuto ? 'visible' : 'auto' }, eventSegs.length > 0 ?
+ this.renderSegList(eventSegs, dayDates) :
+ this.renderEmptyMessage())));
+ }
+ renderEmptyMessage() {
+ let { options, viewApi } = this.context;
+ let renderProps = {
+ text: options.noEventsText,
+ view: viewApi,
+ };
+ return (h(ContentContainer, { elTag: "div", elClasses: ['fc-list-empty'], renderProps: renderProps, generatorName: "noEventsContent", generator: options.noEventsContent || renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (h(InnerContent, { elTag: "div", elClasses: ['fc-list-empty-cushion'] }))));
+ }
+ renderSegList(allSegs, dayDates) {
+ let { theme, options } = this.context;
+ let { timeHeaderId, eventHeaderId, dateHeaderIdRoot } = this.state;
+ let segsByDay = groupSegsByDay(allSegs); // sparse array
+ return (h(NowTimer, { unit: "day" }, (nowDate, todayRange) => {
+ let innerNodes = [];
+ for (let dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {
+ let daySegs = segsByDay[dayIndex];
+ if (daySegs) { // sparse array, so might be undefined
+ let dayStr = formatDayString(dayDates[dayIndex]);
+ let dateHeaderId = dateHeaderIdRoot + '-' + dayStr;
+ // append a day header
+ innerNodes.push(h(ListViewHeaderRow, { key: dayStr, cellId: dateHeaderId, dayDate: dayDates[dayIndex], todayRange: todayRange }));
+ daySegs = sortEventSegs(daySegs, options.eventOrder);
+ for (let seg of daySegs) {
+ innerNodes.push(h(ListViewEventRow, Object.assign({ key: dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */, seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, timeHeaderId: timeHeaderId, eventHeaderId: eventHeaderId, dateHeaderId: dateHeaderId }, getSegMeta(seg, todayRange, nowDate))));
+ }
+ }
+ }
+ return (h("table", { className: 'fc-list-table ' + theme.getClass('table') },
+ h("thead", null,
+ h("tr", null,
+ h("th", { scope: "col", id: timeHeaderId }, options.timeHint),
+ h("th", { scope: "col", "aria-hidden": true }),
+ h("th", { scope: "col", id: eventHeaderId }, options.eventHint))),
+ h("tbody", null, innerNodes)));
+ }));
+ }
+ _eventStoreToSegs(eventStore, eventUiBases, dayRanges) {
+ return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
+ }
+ eventRangesToSegs(eventRanges, dayRanges) {
+ let segs = [];
+ for (let eventRange of eventRanges) {
+ segs.push(...this.eventRangeToSegs(eventRange, dayRanges));
+ }
+ return segs;
+ }
+ eventRangeToSegs(eventRange, dayRanges) {
+ let { dateEnv } = this.context;
+ let { nextDayThreshold } = this.context.options;
+ let range = eventRange.range;
+ let allDay = eventRange.def.allDay;
+ let dayIndex;
+ let segRange;
+ let seg;
+ let segs = [];
+ for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {
+ segRange = intersectRanges(range, dayRanges[dayIndex]);
+ if (segRange) {
+ seg = {
+ component: this,
+ eventRange,
+ start: segRange.start,
+ end: segRange.end,
+ isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),
+ isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),
+ dayIndex,
+ };
+ segs.push(seg);
+ // detect when range won't go fully into the next day,
+ // and mutate the latest seg to the be the end.
+ if (!seg.isEnd && !allDay &&
+ dayIndex + 1 < dayRanges.length &&
+ range.end <
+ dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {
+ seg.end = range.end;
+ seg.isEnd = true;
+ break;
+ }
+ }
+ }
+ return segs;
+ }
+ }
+ function renderNoEventsInner(renderProps) {
+ return renderProps.text;
+ }
+ function computeDateVars(dateProfile) {
+ let dayStart = startOfDay(dateProfile.renderRange.start);
+ let viewEnd = dateProfile.renderRange.end;
+ let dayDates = [];
+ let dayRanges = [];
+ while (dayStart < viewEnd) {
+ dayDates.push(dayStart);
+ dayRanges.push({
+ start: dayStart,
+ end: addDays(dayStart, 1),
+ });
+ dayStart = addDays(dayStart, 1);
+ }
+ return { dayDates, dayRanges };
+ }
+ // Returns a sparse array of arrays, segs grouped by their dayIndex
+ function groupSegsByDay(segs) {
+ let segsByDay = []; // sparse array
+ let i;
+ let seg;
+ for (i = 0; i < segs.length; i += 1) {
+ seg = segs[i];
+ (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))
+ .push(seg);
+ }
+ return segsByDay;
+ }
+
+ const OPTION_REFINERS = {
+ listDayFormat: createFalsableFormatter,
+ listDaySideFormat: createFalsableFormatter,
+ noEventsClassNames: identity,
+ noEventsContent: identity,
+ noEventsDidMount: identity,
+ noEventsWillUnmount: identity,
+ // noEventsText is defined in base options
+ };
+ function createFalsableFormatter(input) {
+ return input === false ? null : createFormatter(input);
+ }
+
+ var css_248z = ":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:\"\";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}";
+ injectStyles(css_248z);
+
+ var index = createPlugin({
+ name: '@fullcalendar/list',
+ optionRefiners: OPTION_REFINERS,
+ views: {
+ list: {
+ component: ListView,
+ buttonTextKey: 'list',
+ listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' }, // like "January 1, 2016"
+ },
+ listDay: {
+ type: 'list',
+ duration: { days: 1 },
+ listDayFormat: { weekday: 'long' }, // day-of-week is all we need. full date is probably in headerToolbar
+ },
+ listWeek: {
+ type: 'list',
+ duration: { weeks: 1 },
+ listDayFormat: { weekday: 'long' },
+ listDaySideFormat: { month: 'long', day: 'numeric', year: 'numeric' },
+ },
+ listMonth: {
+ type: 'list',
+ duration: { month: 1 },
+ listDaySideFormat: { weekday: 'long' }, // day-of-week is nice-to-have
+ },
+ listYear: {
+ type: 'list',
+ duration: { year: 1 },
+ listDaySideFormat: { weekday: 'long' }, // day-of-week is nice-to-have
+ },
+ },
+ });
+
+ globalPlugins.push(index$3, index$2, index$1, index);
+
+ exports.Calendar = Calendar;
+ exports.Draggable = ExternalDraggable;
+ exports.Internal = internal_esm;
+ exports.JsonRequestError = JsonRequestError;
+ exports.ThirdPartyDraggable = ThirdPartyDraggable;
+ exports.createPlugin = createPlugin;
+ exports.formatDate = formatDate;
+ exports.formatRange = formatRange;
+ exports.globalLocales = globalLocales;
+ exports.globalPlugins = globalPlugins;
+ exports.sliceEvents = sliceEvents;
+ exports.version = version;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({});
diff --git a/library/fullcalendar/dist/index.global.min.js b/library/fullcalendar/dist/index.global.min.js
new file mode 100644
index 000000000..9d9afed22
--- /dev/null
+++ b/library/fullcalendar/dist/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Standard Bundle v6.0.3
+Docs & License: https://fullcalendar.io/docs/initialize-globals
+(c) 2022 Adam Shaw
+*/
+var FullCalendar=function(e){"use strict";var t,n,r,i,s,o,a,l={},c=[],d=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function u(e,t){for(var n in t)e[n]=t[n];return e}function h(e){var t=e.parentNode;t&&t.removeChild(e)}function f(e,n,r){var i,s,o,a={};for(o in n)"key"==o?i=n[o]:"ref"==o?s=n[o]:a[o]=n[o];if(arguments.length>2&&(a.children=arguments.length>3?t.call(arguments,2):r),"function"==typeof e&&null!=e.defaultProps)for(o in e.defaultProps)void 0===a[o]&&(a[o]=e.defaultProps[o]);return g(e,a,i,s,null)}function g(e,t,i,s,o){var a={type:e,props:t,key:i,ref:s,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++r:o};return null==o&&null!=n.vnode&&n.vnode(a),a}function p(e){return e.children}function m(e,t){this.props=e,this.context=t}function v(e,t){if(null==t)return e.__?v(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?v(e):null}function b(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return b(e)}}function y(e){(!e.__d&&(e.__d=!0)&&s.push(e)&&!E.__r++||o!==n.debounceRendering)&&((o=n.debounceRendering)||setTimeout)(E)}function E(){for(var e;E.__r=s.length;)e=s.sort((function(e,t){return e.__v.__b-t.__v.__b})),s=[],e.some((function(e){var t,n,r,i,s,o;e.__d&&(s=(i=(t=e).__v).__e,(o=t.__P)&&(n=[],(r=u({},i)).__v=i.__v+1,T(o,i,r,t.__n,void 0!==o.ownerSVGElement,null!=i.__h?[s]:null,n,null==s?v(i):s,i.__h),k(n,i),i.__e!=s&&b(i)))}))}function A(e,t,n,r,i,s,o,a,d,u){var h,f,m,b,y,E,A,S=r&&r.__k||c,C=S.length;for(n.__k=[],h=0;h<t.length;h++)if(null!=(b=n.__k[h]=null==(b=t[h])||"boolean"==typeof b?null:"string"==typeof b||"number"==typeof b||"bigint"==typeof b?g(null,b,null,null,b):Array.isArray(b)?g(p,{children:b},null,null,null):b.__b>0?g(b.type,b.props,b.key,b.ref?b.ref:null,b.__v):b)){if(b.__=n,b.__b=n.__b+1,null===(m=S[h])||m&&b.key==m.key&&b.type===m.type)S[h]=void 0;else for(f=0;f<C;f++){if((m=S[f])&&b.key==m.key&&b.type===m.type){S[f]=void 0;break}m=null}T(e,b,m=m||l,i,s,o,a,d,u),y=b.__e,(f=b.ref)&&m.ref!=f&&(A||(A=[]),m.ref&&A.push(m.ref,null,b),A.push(f,b.__c||y,b)),null!=y?(null==E&&(E=y),"function"==typeof b.type&&b.__k===m.__k?b.__d=d=D(b,d,e):d=w(e,b,m,S,y,d),"function"==typeof n.type&&(n.__d=d)):d&&m.__e==d&&d.parentNode!=e&&(d=v(m))}for(n.__e=E,h=C;h--;)null!=S[h]&&O(S[h],S[h]);if(A)for(h=0;h<A.length;h++)I(A[h],A[++h],A[++h])}function D(e,t,n){for(var r,i=e.__k,s=0;i&&s<i.length;s++)(r=i[s])&&(r.__=e,t="function"==typeof r.type?D(r,t,n):w(n,r,r,i,r.__e,t));return t}function S(e,t){return t=t||[],null==e||"boolean"==typeof e||(Array.isArray(e)?e.some((function(e){S(e,t)})):t.push(e)),t}function w(e,t,n,r,i,s){var o,a,l;if(void 0!==t.__d)o=t.__d,t.__d=void 0;else if(null==n||i!=s||null==i.parentNode)e:if(null==s||s.parentNode!==e)e.appendChild(i),o=null;else{for(a=s,l=0;(a=a.nextSibling)&&l<r.length;l+=1)if(a==i)break e;e.insertBefore(i,s),o=s}return void 0!==o?o:i.nextSibling}function C(e,t,n){"-"===t[0]?e.setProperty(t,n):e[t]=null==n?"":"number"!=typeof n||d.test(t)?n:n+"px"}function R(e,t,n,r,i){var s;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||C(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||C(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])s=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+s]=n,n?r||e.addEventListener(t,s?_:x,s):e.removeEventListener(t,s?_:x,s);else if("dangerouslySetInnerHTML"!==t){if(i)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&-1==t.indexOf("-")?e.removeAttribute(t):e.setAttribute(t,n))}}function x(e){this.l[e.type+!1](n.event?n.event(e):e)}function _(e){this.l[e.type+!0](n.event?n.event(e):e)}function T(e,t,r,i,s,o,a,l,c){var d,h,f,g,v,b,y,E,D,S,w,C,R,x,_,T=t.type;if(void 0!==t.constructor)return null;null!=r.__h&&(c=r.__h,l=t.__e=r.__e,t.__h=null,o=[l]),(d=n.__b)&&d(t);try{e:if("function"==typeof T){if(E=t.props,D=(d=T.contextType)&&i[d.__c],S=d?D?D.props.value:d.__:i,r.__c?y=(h=t.__c=r.__c).__=h.__E:("prototype"in T&&T.prototype.render?t.__c=h=new T(E,S):(t.__c=h=new m(E,S),h.constructor=T,h.render=N),D&&D.sub(h),h.props=E,h.state||(h.state={}),h.context=S,h.__n=i,f=h.__d=!0,h.__h=[],h._sb=[]),null==h.__s&&(h.__s=h.state),null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=u({},h.__s)),u(h.__s,T.getDerivedStateFromProps(E,h.__s))),g=h.props,v=h.state,f)null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(null==T.getDerivedStateFromProps&&E!==g&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(E,S),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(E,h.__s,S)||t.__v===r.__v){for(h.props=E,h.state=h.__s,t.__v!==r.__v&&(h.__d=!1),h.__v=t,t.__e=r.__e,t.__k=r.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<h._sb.length;w++)h.__h.push(h._sb[w]);h._sb=[],h.__h.length&&a.push(h);break e}null!=h.componentWillUpdate&&h.componentWillUpdate(E,h.__s,S),null!=h.componentDidUpdate&&h.__h.push((function(){h.componentDidUpdate(g,v,b)}))}if(h.context=S,h.props=E,h.__v=t,h.__P=e,C=n.__r,R=0,"prototype"in T&&T.prototype.render){for(h.state=h.__s,h.__d=!1,C&&C(t),d=h.render(h.props,h.state,h.context),x=0;x<h._sb.length;x++)h.__h.push(h._sb[x]);h._sb=[]}else do{h.__d=!1,C&&C(t),d=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++R<25);h.state=h.__s,null!=h.getChildContext&&(i=u(u({},i),h.getChildContext())),f||null==h.getSnapshotBeforeUpdate||(b=h.getSnapshotBeforeUpdate(g,v)),_=null!=d&&d.type===p&&null==d.key?d.props.children:d,A(e,Array.isArray(_)?_:[_],t,r,i,s,o,a,l,c),h.base=t.__e,t.__h=null,h.__h.length&&a.push(h),y&&(h.__E=h.__=null),h.__e=!1}else null==o&&t.__v===r.__v?(t.__k=r.__k,t.__e=r.__e):t.__e=M(r.__e,t,r,i,s,o,a,c);(d=n.diffed)&&d(t)}catch(e){t.__v=null,(c||null!=o)&&(t.__e=l,t.__h=!!c,o[o.indexOf(l)]=null),n.__e(e,t,r)}}function k(e,t){n.__c&&n.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){n.__e(e,t.__v)}}))}function M(e,n,r,i,s,o,a,c){var d,u,f,g=r.props,p=n.props,m=n.type,b=0;if("svg"===m&&(s=!0),null!=o)for(;b<o.length;b++)if((d=o[b])&&"setAttribute"in d==!!m&&(m?d.localName===m:3===d.nodeType)){e=d,o[b]=null;break}if(null==e){if(null===m)return document.createTextNode(p);e=s?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,p.is&&p),o=null,c=!1}if(null===m)g===p||c&&e.data===p||(e.data=p);else{if(o=o&&t.call(e.childNodes),u=(g=r.props||l).dangerouslySetInnerHTML,f=p.dangerouslySetInnerHTML,!c){if(null!=o)for(g={},b=0;b<e.attributes.length;b++)g[e.attributes[b].name]=e.attributes[b].value;(f||u)&&(f&&(u&&f.__html==u.__html||f.__html===e.innerHTML)||(e.innerHTML=f&&f.__html||""))}if(function(e,t,n,r,i){var s;for(s in n)"children"===s||"key"===s||s in t||R(e,s,null,n[s],r);for(s in t)i&&"function"!=typeof t[s]||"children"===s||"key"===s||"value"===s||"checked"===s||n[s]===t[s]||R(e,s,t[s],n[s],r)}(e,p,g,s,c),f)n.__k=[];else if(b=n.props.children,A(e,Array.isArray(b)?b:[b],n,r,i,s&&"foreignObject"!==m,o,a,o?o[0]:r.__k&&v(r,0),c),null!=o)for(b=o.length;b--;)null!=o[b]&&h(o[b]);c||("value"in p&&void 0!==(b=p.value)&&(b!==e.value||"progress"===m&&!b||"option"===m&&b!==g.value)&&R(e,"value",b,g.value,!1),"checked"in p&&void 0!==(b=p.checked)&&b!==e.checked&&R(e,"checked",b,g.checked,!1))}return e}function I(e,t,r){try{"function"==typeof e?e(t):e.current=t}catch(e){n.__e(e,r)}}function O(e,t,r){var i,s;if(n.unmount&&n.unmount(e),(i=e.ref)&&(i.current&&i.current!==e.__e||I(i,null,t)),null!=(i=e.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(e){n.__e(e,t)}i.base=i.__P=null,e.__c=void 0}if(i=e.__k)for(s=0;s<i.length;s++)i[s]&&O(i[s],t,r||"function"!=typeof e.type);r||null==e.__e||h(e.__e),e.__=e.__e=e.__d=void 0}function N(e,t,n){return this.constructor(e,n)}function P(e,r,i){var s,o,a;n.__&&n.__(e,r),o=(s="function"==typeof i)?null:i&&i.__k||r.__k,a=[],T(r,e=(!s&&i||r).__k=f(p,null,[e]),o||l,l,void 0!==r.ownerSVGElement,!s&&i?[i]:o?null:r.firstChild?t.call(r.childNodes):null,a,!s&&i?i:o?o.__e:r.firstChild,s),k(a,e)}t=c.slice,n={__e:function(e,t,n,r){for(var i,s,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((s=i.constructor)&&null!=s.getDerivedStateFromError&&(i.setState(s.getDerivedStateFromError(e)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(e,r||{}),o=i.__d),o)return i.__E=i}catch(t){e=t}throw e}},r=0,i=function(e){return null!=e&&void 0===e.constructor},m.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=u({},this.state),"function"==typeof e&&(e=e(u({},n),this.props)),e&&u(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),y(this))},m.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),y(this))},m.prototype.render=p,s=[],E.__r=0,a=0;var H,B,j,z=[],U=[],L=n.__b,W=n.__r,F=n.diffed,V=n.__c,G=n.unmount;function Q(){for(var e;e=z.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(Z),e.__H.__h.forEach(X),e.__H.__h=[]}catch(t){e.__H.__h=[],n.__e(t,e.__v)}}n.__b=function(e){H=null,L&&L(e)},n.__r=function(e){W&&W(e);var t=(H=e.__c).__H;t&&(B===H?(t.__h=[],H.__h=[],t.__.forEach((function(e){e.__N&&(e.__=e.__N),e.__V=U,e.__N=e.i=void 0}))):(t.__h.forEach(Z),t.__h.forEach(X),t.__h=[])),B=H},n.diffed=function(e){F&&F(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(1!==z.push(t)&&j===n.requestAnimationFrame||((j=n.requestAnimationFrame)||Y)(Q)),t.__H.__.forEach((function(e){e.i&&(e.__H=e.i),e.__V!==U&&(e.__=e.__V),e.i=void 0,e.__V=U}))),B=H=null},n.__c=function(e,t){t.some((function(e){try{e.__h.forEach(Z),e.__h=e.__h.filter((function(e){return!e.__||X(e)}))}catch(r){t.some((function(e){e.__h&&(e.__h=[])})),t=[],n.__e(r,e.__v)}})),V&&V(e,t)},n.unmount=function(e){G&&G(e);var t,r=e.__c;r&&r.__H&&(r.__H.__.forEach((function(e){try{Z(e)}catch(e){t=e}})),r.__H=void 0,t&&n.__e(t,r.__v))};var q="function"==typeof requestAnimationFrame;function Y(e){var t,n=function(){clearTimeout(r),q&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);q&&(t=requestAnimationFrame(n))}function Z(e){var t=H,n=e.__c;"function"==typeof n&&(e.__c=void 0,n()),H=t}function X(e){var t=H;e.__c=e.__(),H=t}function J(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var r in t)if("__source"!==r&&e[r]!==t[r])return!0;return!1}function $(e){this.props=e}($.prototype=new m).isPureReactComponent=!0,$.prototype.shouldComponentUpdate=function(e,t){return J(this.props,e)||J(this.state,t)};var K=n.__b;n.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),K&&K(e)};var ee=n.__e;n.__e=function(e,t,n,r){if(e.then)for(var i,s=t;s=s.__;)if((i=s.__c)&&i.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),i.__c(e,t);ee(e,t,n,r)};var te=n.unmount;function ne(){this.__u=0,this.t=null,this.__b=null}function re(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function ie(){this.u=null,this.o=null}n.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&!0===e.__h&&(e.type=null),te&&te(e)},(ne.prototype=new m).__c=function(e,t){var n=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);var i=re(r.__v),s=!1,o=function(){s||(s=!0,n.__R=null,i?i(a):a())};n.__R=o;var a=function(){if(!--r.__u){if(r.state.__a){var e=r.state.__a;r.__v.__k[0]=function e(t,n,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map((function(t){return e(t,n,r)})),t.__c&&t.__c.__P===n&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(e,e.__c.__P,e.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}},l=!0===t.__h;r.__u++||l||r.setState({__a:r.__b=r.__v.__k[0]}),e.then(o,o)},ne.prototype.componentWillUnmount=function(){this.t=[]},ne.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function e(t,n,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach((function(e){"function"==typeof e.__c&&e.__c()})),t.__c.__H=null),null!=(t=function(e,t){for(var n in t)e[n]=t[n];return e}({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=n),t.__c=null),t.__k=t.__k&&t.__k.map((function(t){return e(t,n,r)}))),t}(this.__b,n,r.__O=r.__P)}this.__b=null}var i=t.__a&&f(p,null,e.fallback);return i&&(i.__h=null),[f(p,null,t.__a?null:e.children),i]};var se=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]<n[0])break;e.u=n=n[2]}};function oe(e){return this.getChildContext=function(){return e.context},e.children}function ae(e){var t=this,n=e.i;t.componentWillUnmount=function(){P(null,t.l),t.l=null,t.i=null},t.i&&t.i!==n&&t.componentWillUnmount(),e.__v?(t.l||(t.i=n,t.l={nodeType:1,parentNode:n,childNodes:[],appendChild:function(e){this.childNodes.push(e),t.i.appendChild(e)},insertBefore:function(e,n){this.childNodes.push(e),t.i.appendChild(e)},removeChild:function(e){this.childNodes.splice(this.childNodes.indexOf(e)>>>1,1),t.i.removeChild(e)}}),P(f(oe,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}(ie.prototype=new m).__a=function(e){var t=this,n=re(t.__v),r=t.o.get(e);return r[0]++,function(i){var s=function(){t.props.revealOrder?(r.push(i),se(t,e,r)):i()};n?n(s):s()}},ie.prototype.render=function(e){this.u=null,this.o=new Map;var t=S(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},ie.prototype.componentDidUpdate=ie.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){se(e,n,t)}))};var le="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,ce=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,de="undefined"!=typeof document,ue=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(e)};m.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(m.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var he=n.event;function fe(){}function ge(){return this.cancelBubble}function pe(){return this.defaultPrevented}n.event=function(e){return he&&(e=he(e)),e.persist=fe,e.isPropagationStopped=ge,e.isDefaultPrevented=pe,e.nativeEvent=e};var me={configurable:!0,get:function(){return this.class}},ve=n.vnode;n.vnode=function(e){var t=e.type,n=e.props,r=n;if("string"==typeof t){var i=-1===t.indexOf("-");for(var s in r={},n){var o=n[s];de&&"children"===s&&"noscript"===t||"value"===s&&"defaultValue"in n&&null==o||("defaultValue"===s&&"value"in n&&null==n.value?s="value":"download"===s&&!0===o?o="":/ondoubleclick/i.test(s)?s="ondblclick":/^onchange(textarea|input)/i.test(s+t)&&!ue(n.type)?s="oninput":/^onfocus$/i.test(s)?s="onfocusin":/^onblur$/i.test(s)?s="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(s)?s=s.toLowerCase():i&&ce.test(s)?s=s.replace(/[A-Z0-9]/g,"-$&").toLowerCase():null===o&&(o=void 0),/^oninput$/i.test(s)&&(s=s.toLowerCase(),r[s]&&(s="oninputCapture")),r[s]=o)}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=S(n.children).forEach((function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)}))),"select"==t&&null!=r.defaultValue&&(r.value=S(n.children).forEach((function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value}))),e.props=r,n.class!=n.className&&(me.enumerable="className"in n,null!=n.className&&(r.class=n.className),Object.defineProperty(r,"className",me))}e.$$typeof=le,ve&&ve(e)};var be=n.__r;function ye(e){e.parentNode&&e.parentNode.removeChild(e)}function Ee(e,t){if(e.closest)return e.closest(t);if(!document.documentElement.contains(e))return null;do{if(Ae(e,t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}function Ae(e,t){return(e.matches||e.matchesSelector||e.msMatchesSelector).call(e,t)}function De(e,t){let n=e instanceof HTMLElement?[e]:e,r=[];for(let e=0;e<n.length;e+=1){let i=n[e].querySelectorAll(t);for(let e=0;e<i.length;e+=1)r.push(i[e])}return r}n.__r=function(e){be&&be(e),e.__c};const Se=/(top|left|right|bottom|width|height)$/i;function we(e,t){for(let n in t)Ce(e,n,t[n])}function Ce(e,t,n){null==n?e.style[t]="":"number"==typeof n&&Se.test(t)?e.style[t]=n+"px":e.style[t]=n}function Re(e){var t,n;return null!==(n=null===(t=e.composedPath)||void 0===t?void 0:t.call(e)[0])&&void 0!==n?n:e.target}function xe(e){return e.getRootNode?e.getRootNode():document}let _e=0;function Te(){return _e+=1,"fc-dom-"+_e}function ke(e){e.preventDefault()}function Me(e,t,n,r){let i=function(e,t){return n=>{let r=Ee(n.target,e);r&&t.call(r,n,r)}}(n,r);return e.addEventListener(t,i),()=>{e.removeEventListener(t,i)}}const Ie=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];function Oe(e,t){let n=r=>{t(r),Ie.forEach(t=>{e.removeEventListener(t,n)})};Ie.forEach(t=>{e.addEventListener(t,n)})}function Ne(e){return Object.assign({onClick:e},Pe(e))}function Pe(e){return{tabIndex:0,onKeyDown(t){"Enter"!==t.key&&" "!==t.key||(e(t),t.preventDefault())}}}let He=0;function Be(){return He+=1,String(He)}function je(){document.body.classList.add("fc-not-allowed")}function ze(){document.body.classList.remove("fc-not-allowed")}function Ue(e){e.classList.add("fc-unselectable"),e.addEventListener("selectstart",ke)}function Le(e){e.classList.remove("fc-unselectable"),e.removeEventListener("selectstart",ke)}function We(e){e.addEventListener("contextmenu",ke)}function Fe(e){e.removeEventListener("contextmenu",ke)}function Ve(e){let t,n,r=[],i=[];for("string"==typeof e?i=e.split(/\s*,\s*/):"function"==typeof e?i=[e]:Array.isArray(e)&&(i=e),t=0;t<i.length;t+=1)n=i[t],"string"==typeof n?r.push("-"===n.charAt(0)?{field:n.substring(1),order:-1}:{field:n,order:1}):"function"==typeof n&&r.push({func:n});return r}function Ge(e,t,n){let r,i;for(r=0;r<n.length;r+=1)if(i=Qe(e,t,n[r]),i)return i;return 0}function Qe(e,t,n){return n.func?n.func(e,t):qe(e[n.field],t[n.field])*(n.order||1)}function qe(e,t){return e||t?null==t?-1:null==e?1:"string"==typeof e||"string"==typeof t?String(e).localeCompare(String(t)):e-t:0}function Ye(e,t){let n=String(e);return"000".substr(0,t-n.length)+n}function Ze(e,t,n){return"function"==typeof e?e(...t):"string"==typeof e?t.reduce((e,t,n)=>e.replace("$"+n,t||""),e):n}function Xe(e,t){return e-t}function Je(e){return e%1==0}function $e(e){let t=e.querySelector(".fc-scrollgrid-shrink-frame"),n=e.querySelector(".fc-scrollgrid-shrink-cushion");if(!t)throw new Error("needs fc-scrollgrid-shrink-frame className");if(!n)throw new Error("needs fc-scrollgrid-shrink-cushion className");return e.getBoundingClientRect().width-t.getBoundingClientRect().width+n.getBoundingClientRect().width}const Ke=["years","months","days","milliseconds"],et=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;function tt(e,t){return"string"==typeof e?function(e){let t=et.exec(e);if(t){let e=t[1]?-1:1;return{years:0,months:0,days:e*(t[2]?parseInt(t[2],10):0),milliseconds:e*(60*(t[3]?parseInt(t[3],10):0)*60*1e3+60*(t[4]?parseInt(t[4],10):0)*1e3+1e3*(t[5]?parseInt(t[5],10):0)+(t[6]?parseInt(t[6],10):0))}}return null}(e):"object"==typeof e&&e?nt(e):"number"==typeof e?nt({[t||"milliseconds"]:e}):null}function nt(e){let t={years:e.years||e.year||0,months:e.months||e.month||0,days:e.days||e.day||0,milliseconds:60*(e.hours||e.hour||0)*60*1e3+60*(e.minutes||e.minute||0)*1e3+1e3*(e.seconds||e.second||0)+(e.milliseconds||e.millisecond||e.ms||0)},n=e.weeks||e.week;return n&&(t.days+=7*n,t.specifiedWeeks=!0),t}function rt(e,t){return{years:e.years+t.years,months:e.months+t.months,days:e.days+t.days,milliseconds:e.milliseconds+t.milliseconds}}function it(e,t){return{years:e.years*t,months:e.months*t,days:e.days*t,milliseconds:e.milliseconds*t}}function st(e){return ot(e)/864e5}function ot(e){return 31536e6*e.years+2592e6*e.months+864e5*e.days+e.milliseconds}function at(e,t){let n=null;for(let r=0;r<Ke.length;r+=1){let i=Ke[r];if(t[i]){let r=e[i]/t[i];if(!Je(r)||null!==n&&n!==r)return null;n=r}else if(e[i])return null}return n}function lt(e){let t=e.milliseconds;if(t){if(t%1e3!=0)return{unit:"millisecond",value:t};if(t%6e4!=0)return{unit:"second",value:t/1e3};if(t%36e5!=0)return{unit:"minute",value:t/6e4};if(t)return{unit:"hour",value:t/36e5}}return e.days?e.specifiedWeeks&&e.days%7==0?{unit:"week",value:e.days/7}:{unit:"day",value:e.days}:e.months?{unit:"month",value:e.months}:e.years?{unit:"year",value:e.years}:{unit:"millisecond",value:0}}const{hasOwnProperty:ct}=Object.prototype;function dt(e,t){let n={};if(t)for(let r in t){let t=[];for(let i=e.length-1;i>=0;i-=1){let s=e[i][r];if("object"==typeof s&&s)t.unshift(s);else if(void 0!==s){n[r]=s;break}}t.length&&(n[r]=dt(t))}for(let t=e.length-1;t>=0;t-=1){let r=e[t];for(let e in r)e in n||(n[e]=r[e])}return n}function ut(e,t){let n={};for(let r in e)t(e[r],r)&&(n[r]=e[r]);return n}function ht(e,t){let n={};for(let r in e)n[r]=t(e[r],r);return n}function ft(e){let t={};for(let n of e)t[n]=!0;return t}function gt(e){let t=[];for(let n in e)t.push(e[n]);return t}function pt(e,t){if(e===t)return!0;for(let n in e)if(ct.call(e,n)&&!(n in t))return!1;for(let n in t)if(ct.call(t,n)&&e[n]!==t[n])return!1;return!0}const mt=/^on[A-Z]/;function vt(e,t){let n=[];for(let r in e)ct.call(e,r)&&(r in t||n.push(r));for(let r in t)ct.call(t,r)&&e[r]!==t[r]&&n.push(r);return n}function bt(e,t,n={}){if(e===t)return!0;for(let r in t)if(!(r in e)||!yt(e[r],t[r],n[r]))return!1;for(let n in e)if(!(n in t))return!1;return!0}function yt(e,t,n){return e===t||!0===n||!!n&&n(e,t)}function Et(e,t=0,n,r=1){let i=[];null==n&&(n=Object.keys(e).length);for(let s=t;s<n;s+=r){let t=e[s];void 0!==t&&i.push(t)}return i}const At=["sun","mon","tue","wed","thu","fri","sat"];function Dt(e,t){let n=Pt(e);return n[2]+=7*t,Ht(n)}function St(e,t){let n=Pt(e);return n[2]+=t,Ht(n)}function wt(e,t){let n=Pt(e);return n[6]+=t,Ht(n)}function Ct(e,t){return Rt(e,t)/7}function Rt(e,t){return(t.valueOf()-e.valueOf())/864e5}function xt(e,t){let n=kt(e),r=kt(t);return{years:0,months:0,days:Math.round(Rt(n,r)),milliseconds:t.valueOf()-r.valueOf()-(e.valueOf()-n.valueOf())}}function _t(e,t){let n=Tt(e,t);return null!==n&&n%7==0?n/7:null}function Tt(e,t){return jt(e)===jt(t)?Math.round(Rt(e,t)):null}function kt(e){return Ht([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()])}function Mt(e,t,n,r){let i=Ht([t,0,1+It(t,n,r)]),s=kt(e),o=Math.round(Rt(i,s));return Math.floor(o/7)+1}function It(e,t,n){let r=7+t-n;return-((7+Ht([e,0,r]).getUTCDay()-t)%7)+r-1}function Ot(e){return[e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()]}function Nt(e){return new Date(e[0],e[1]||0,null==e[2]?1:e[2],e[3]||0,e[4]||0,e[5]||0)}function Pt(e){return[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()]}function Ht(e){return 1===e.length&&(e=e.concat([0])),new Date(Date.UTC(...e))}function Bt(e){return!isNaN(e.valueOf())}function jt(e){return 1e3*e.getUTCHours()*60*60+1e3*e.getUTCMinutes()*60+1e3*e.getUTCSeconds()+e.getUTCMilliseconds()}function zt(e,t,n=!1){let r=e.toISOString();return r=r.replace(".000",""),n&&(r=r.replace("T00:00:00Z","")),r.length>10&&(null==t?r=r.replace("Z",""):0!==t&&(r=r.replace("Z",Wt(t,!0)))),r}function Ut(e){return e.toISOString().replace(/T.*$/,"")}function Lt(e){return Ye(e.getUTCHours(),2)+":"+Ye(e.getUTCMinutes(),2)+":"+Ye(e.getUTCSeconds(),2)}function Wt(e,t=!1){let n=e<0?"-":"+",r=Math.abs(e),i=Math.floor(r/60),s=Math.round(r%60);return t?`${n+Ye(i,2)}:${Ye(s,2)}`:`GMT${n}${i}${s?":"+Ye(s,2):""}`}function Ft(e,t,n){if(e===t)return!0;let r,i=e.length;if(i!==t.length)return!1;for(r=0;r<i;r+=1)if(!(n?n(e[r],t[r]):e[r]===t[r]))return!1;return!0}function Vt(e,t,n){let r,i;return function(...s){if(r){if(!Ft(r,s)){n&&n(i);let r=e.apply(this,s);t&&t(r,i)||(i=r)}}else i=e.apply(this,s);return r=s,i}}function Gt(e,t,n){let r,i;return s=>{if(r){if(!pt(r,s)){n&&n(i);let r=e.call(this,s);t&&t(r,i)||(i=r)}}else i=e.call(this,s);return r=s,i}}const Qt={week:3,separator:0,omitZeroMinute:0,meridiem:0,omitCommas:0},qt={timeZoneName:7,era:6,year:5,month:4,day:2,weekday:2,hour:1,minute:1,second:1},Yt=/\s*([ap])\.?m\.?/i,Zt=/,/g,Xt=/\s+/g,Jt=/\u200e/g,$t=/UTC|GMT/;class Kt{constructor(e){let t={},n={},r=0;for(let i in e)i in Qt?(n[i]=e[i],r=Math.max(Qt[i],r)):(t[i]=e[i],i in qt&&(r=Math.max(qt[i],r)));this.standardDateProps=t,this.extendedSettings=n,this.severity=r,this.buildFormattingFunc=Vt(en)}format(e,t){return this.buildFormattingFunc(this.standardDateProps,this.extendedSettings,t)(e)}formatRange(e,t,n,r){let{standardDateProps:i,extendedSettings:s}=this,o=function(e,t,n){if(n.getMarkerYear(e)!==n.getMarkerYear(t))return 5;if(n.getMarkerMonth(e)!==n.getMarkerMonth(t))return 4;if(n.getMarkerDay(e)!==n.getMarkerDay(t))return 2;if(jt(e)!==jt(t))return 1;return 0}(e.marker,t.marker,n.calendarSystem);if(!o)return this.format(e,n);let a=o;!(a>1)||"numeric"!==i.year&&"2-digit"!==i.year||"numeric"!==i.month&&"2-digit"!==i.month||"numeric"!==i.day&&"2-digit"!==i.day||(a=1);let l=this.format(e,n),c=this.format(t,n);if(l===c)return l;let d=en(function(e,t){let n={};for(let r in e)(!(r in qt)||qt[r]<=t)&&(n[r]=e[r]);return n}(i,a),s,n),u=d(e),h=d(t),f=function(e,t,n,r){let i=0;for(;i<e.length;){let s=e.indexOf(t,i);if(-1===s)break;let o=e.substr(0,s);i=s+t.length;let a=e.substr(i),l=0;for(;l<n.length;){let e=n.indexOf(r,l);if(-1===e)break;let t=n.substr(0,e);l=e+r.length;let i=n.substr(l);if(o===t&&a===i)return{before:o,after:a}}}return null}(l,u,c,h),g=s.separator||r||n.defaultSeparator||"";return f?f.before+u+g+h+f.after:l+g+c}getLargestUnit(){switch(this.severity){case 7:case 6:case 5:return"year";case 4:return"month";case 3:return"week";case 2:return"day";default:return"time"}}}function en(e,t,n){let r=Object.keys(e).length;return 1===r&&"short"===e.timeZoneName?e=>Wt(e.timeZoneOffset):0===r&&t.week?e=>function(e,t,n,r,i){let s=[];"long"===i?s.push(n):"short"!==i&&"narrow"!==i||s.push(t);"long"!==i&&"short"!==i||s.push(" ");s.push(r.simpleNumberFormat.format(e)),"rtl"===r.options.direction&&s.reverse();return s.join("")}(n.computeWeekNumber(e.marker),n.weekText,n.weekTextLong,n.locale,t.week):function(e,t,n){e=Object.assign({},e),t=Object.assign({},t),function(e,t){e.timeZoneName&&(e.hour||(e.hour="2-digit"),e.minute||(e.minute="2-digit"));"long"===e.timeZoneName&&(e.timeZoneName="short");t.omitZeroMinute&&(e.second||e.millisecond)&&delete t.omitZeroMinute}(e,t),e.timeZone="UTC";let r,i=new Intl.DateTimeFormat(n.locale.codes,e);if(t.omitZeroMinute){let t=Object.assign({},e);delete t.minute,r=new Intl.DateTimeFormat(n.locale.codes,t)}return s=>{let o,{marker:a}=s;return o=r&&!a.getUTCMinutes()?r:i,function(e,t,n,r,i){e=e.replace(Jt,""),"short"===n.timeZoneName&&(e=function(e,t){let n=!1;e=e.replace($t,()=>(n=!0,t)),n||(e+=" "+t);return e}(e,"UTC"===i.timeZone||null==t.timeZoneOffset?"UTC":Wt(t.timeZoneOffset)));r.omitCommas&&(e=e.replace(Zt,"").trim());r.omitZeroMinute&&(e=e.replace(":00",""));!1===r.meridiem?e=e.replace(Yt,"").trim():"narrow"===r.meridiem?e=e.replace(Yt,(e,t)=>t.toLocaleLowerCase()):"short"===r.meridiem?e=e.replace(Yt,(e,t)=>t.toLocaleLowerCase()+"m"):"lowercase"===r.meridiem&&(e=e.replace(Yt,e=>e.toLocaleLowerCase()));return e=(e=e.replace(Xt," ")).trim()}(o.format(a),s,e,t,n)}}(e,t,n)}function tn(e,t){let n=t.markerToArray(e.marker);return{marker:e.marker,timeZoneOffset:e.timeZoneOffset,array:n,year:n[0],month:n[1],day:n[2],hour:n[3],minute:n[4],second:n[5],millisecond:n[6]}}function nn(e,t,n,r){let i=tn(e,n.calendarSystem);return{date:i,start:i,end:t?tn(t,n.calendarSystem):null,timeZone:n.timeZone,localeCodes:n.locale.codes,defaultSeparator:r||n.defaultSeparator}}class rn{constructor(e){this.cmdStr=e}format(e,t,n){return t.cmdFormatter(this.cmdStr,nn(e,null,t,n))}formatRange(e,t,n,r){return n.cmdFormatter(this.cmdStr,nn(e,t,n,r))}}class sn{constructor(e){this.func=e}format(e,t,n){return this.func(nn(e,null,t,n))}formatRange(e,t,n,r){return this.func(nn(e,t,n,r))}}function on(e){return"object"==typeof e&&e?new Kt(e):"string"==typeof e?new rn(e):"function"==typeof e?new sn(e):null}const an={navLinkDayClick:mn,navLinkWeekClick:mn,duration:tt,bootstrapFontAwesome:mn,buttonIcons:mn,customButtons:mn,defaultAllDayEventDuration:tt,defaultTimedEventDuration:tt,nextDayThreshold:tt,scrollTime:tt,scrollTimeReset:Boolean,slotMinTime:tt,slotMaxTime:tt,dayPopoverFormat:on,slotDuration:tt,snapDuration:tt,headerToolbar:mn,footerToolbar:mn,defaultRangeSeparator:String,titleRangeSeparator:String,forceEventDuration:Boolean,dayHeaders:Boolean,dayHeaderFormat:on,dayHeaderClassNames:mn,dayHeaderContent:mn,dayHeaderDidMount:mn,dayHeaderWillUnmount:mn,dayCellClassNames:mn,dayCellContent:mn,dayCellDidMount:mn,dayCellWillUnmount:mn,initialView:String,aspectRatio:Number,weekends:Boolean,weekNumberCalculation:mn,weekNumbers:Boolean,weekNumberClassNames:mn,weekNumberContent:mn,weekNumberDidMount:mn,weekNumberWillUnmount:mn,editable:Boolean,viewClassNames:mn,viewDidMount:mn,viewWillUnmount:mn,nowIndicator:Boolean,nowIndicatorClassNames:mn,nowIndicatorContent:mn,nowIndicatorDidMount:mn,nowIndicatorWillUnmount:mn,showNonCurrentDates:Boolean,lazyFetching:Boolean,startParam:String,endParam:String,timeZoneParam:String,timeZone:String,locales:mn,locale:mn,themeSystem:String,dragRevertDuration:Number,dragScroll:Boolean,allDayMaintainDuration:Boolean,unselectAuto:Boolean,dropAccept:mn,eventOrder:Ve,eventOrderStrict:Boolean,handleWindowResize:Boolean,windowResizeDelay:Number,longPressDelay:Number,eventDragMinDistance:Number,expandRows:Boolean,height:mn,contentHeight:mn,direction:String,weekNumberFormat:on,eventResizableFromStart:Boolean,displayEventTime:Boolean,displayEventEnd:Boolean,weekText:String,weekTextLong:String,progressiveEventRendering:Boolean,businessHours:mn,initialDate:mn,now:mn,eventDataTransform:mn,stickyHeaderDates:mn,stickyFooterScrollbar:mn,viewHeight:mn,defaultAllDay:Boolean,eventSourceFailure:mn,eventSourceSuccess:mn,eventDisplay:String,eventStartEditable:Boolean,eventDurationEditable:Boolean,eventOverlap:mn,eventConstraint:mn,eventAllow:mn,eventBackgroundColor:String,eventBorderColor:String,eventTextColor:String,eventColor:String,eventClassNames:mn,eventContent:mn,eventDidMount:mn,eventWillUnmount:mn,selectConstraint:mn,selectOverlap:mn,selectAllow:mn,droppable:Boolean,unselectCancel:String,slotLabelFormat:mn,slotLaneClassNames:mn,slotLaneContent:mn,slotLaneDidMount:mn,slotLaneWillUnmount:mn,slotLabelClassNames:mn,slotLabelContent:mn,slotLabelDidMount:mn,slotLabelWillUnmount:mn,dayMaxEvents:mn,dayMaxEventRows:mn,dayMinWidth:Number,slotLabelInterval:tt,allDayText:String,allDayClassNames:mn,allDayContent:mn,allDayDidMount:mn,allDayWillUnmount:mn,slotMinWidth:Number,navLinks:Boolean,eventTimeFormat:on,rerenderDelay:Number,moreLinkText:mn,moreLinkHint:mn,selectMinDistance:Number,selectable:Boolean,selectLongPressDelay:Number,eventLongPressDelay:Number,selectMirror:Boolean,eventMaxStack:Number,eventMinHeight:Number,eventMinWidth:Number,eventShortHeight:Number,slotEventOverlap:Boolean,plugins:mn,firstDay:Number,dayCount:Number,dateAlignment:String,dateIncrement:tt,hiddenDays:mn,monthMode:Boolean,fixedWeekCount:Boolean,validRange:mn,visibleRange:mn,titleFormat:mn,eventInteractive:Boolean,noEventsText:String,viewHint:mn,navLinkHint:mn,closeHint:String,timeHint:String,eventHint:String,moreLinkClick:mn,moreLinkClassNames:mn,moreLinkContent:mn,moreLinkDidMount:mn,moreLinkWillUnmount:mn,handleCustomRendering:mn,customRenderingMetaMap:mn,customRenderingReplacesEl:Boolean},ln={eventDisplay:"auto",defaultRangeSeparator:" - ",titleRangeSeparator:" – ",defaultTimedEventDuration:"01:00:00",defaultAllDayEventDuration:{day:1},forceEventDuration:!1,nextDayThreshold:"00:00:00",dayHeaders:!0,initialView:"",aspectRatio:1.35,headerToolbar:{start:"title",center:"",end:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberCalculation:"local",editable:!1,nowIndicator:!1,scrollTime:"06:00:00",scrollTimeReset:!0,slotMinTime:"00:00:00",slotMaxTime:"24:00:00",showNonCurrentDates:!0,lazyFetching:!0,startParam:"start",endParam:"end",timeZoneParam:"timeZone",timeZone:"local",locales:[],locale:"",themeSystem:"standard",dragRevertDuration:500,dragScroll:!0,allDayMaintainDuration:!1,unselectAuto:!0,dropAccept:"*",eventOrder:"start,-duration,allDay,title",dayPopoverFormat:{month:"long",day:"numeric",year:"numeric"},handleWindowResize:!0,windowResizeDelay:100,longPressDelay:1e3,eventDragMinDistance:5,expandRows:!1,navLinks:!1,selectable:!1,eventMinHeight:15,eventMinWidth:30,eventShortHeight:30},cn={datesSet:mn,eventsSet:mn,eventAdd:mn,eventChange:mn,eventRemove:mn,windowResize:mn,eventClick:mn,eventMouseEnter:mn,eventMouseLeave:mn,select:mn,unselect:mn,loading:mn,_unmount:mn,_beforeprint:mn,_afterprint:mn,_noEventDrop:mn,_noEventResize:mn,_resize:mn,_scrollRequest:mn},dn={buttonText:mn,buttonHints:mn,views:mn,plugins:mn,initialEvents:mn,events:mn,eventSources:mn},un={headerToolbar:hn,footerToolbar:hn,buttonText:hn,buttonHints:hn,buttonIcons:hn,dateIncrement:hn};function hn(e,t){return"object"==typeof e&&"object"==typeof t&&e&&t?pt(e,t):e===t}const fn={type:String,component:mn,buttonText:String,buttonTextKey:String,dateProfileGeneratorClass:mn,usesMinMaxTime:Boolean,classNames:mn,content:mn,didMount:mn,willUnmount:mn};function gn(e){return dt(e,un)}function pn(e,t){let n={},r={};for(let r in t)r in e&&(n[r]=t[r](e[r]));for(let n in e)n in t||(r[n]=e[n]);return{refined:n,extra:r}}function mn(e){return e}function vn(e,t,n,r){return{instanceId:Be(),defId:e,range:t,forcedStartTzo:null==n?null:n,forcedEndTzo:null==r?null:r}}function bn(e,t,n){let{dateEnv:r,pluginHooks:i,options:s}=n,{defs:o,instances:a}=e;a=ut(a,e=>!o[e.defId].recurringDef);for(let e in o){let n=o[e];if(n.recurringDef){let{duration:o}=n.recurringDef;o||(o=n.allDay?s.defaultAllDayEventDuration:s.defaultTimedEventDuration);let l=yn(n,o,t,r,i.recurringTypes);for(let t of l){let n=vn(e,{start:t,end:r.add(t,o)});a[n.instanceId]=n}}}return{defs:o,instances:a}}function yn(e,t,n,r,i){let s=i[e.recurringDef.typeId].expand(e.recurringDef.typeData,{start:r.subtract(n.start,t),end:n.end},r);return e.allDay&&(s=s.map(kt)),s}function En(e,t,n,r){let i={defs:{},instances:{}},s=Bn(n);for(let o of e){let e=Pn(o,t,n,r,s);e&&An(e,i)}return i}function An(e,t={defs:{},instances:{}}){return t.defs[e.def.defId]=e.def,e.instance&&(t.instances[e.instance.instanceId]=e.instance),t}function Dn(e,t){let n=e.instances[t];if(n){let t=e.defs[n.defId],r=Cn(e,e=>{return n=t,r=e,Boolean(n.groupId&&n.groupId===r.groupId);var n,r});return r.defs[t.defId]=t,r.instances[n.instanceId]=n,r}return{defs:{},instances:{}}}function Sn(){return{defs:{},instances:{}}}function wn(e,t){return{defs:Object.assign(Object.assign({},e.defs),t.defs),instances:Object.assign(Object.assign({},e.instances),t.instances)}}function Cn(e,t){let n=ut(e.defs,t),r=ut(e.instances,e=>n[e.defId]);return{defs:n,instances:r}}function Rn(e){return Array.isArray(e)?e:"string"==typeof e?e.split(/\s+/):[]}const xn={display:String,editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:mn,overlap:mn,allow:mn,className:Rn,classNames:Rn,color:String,backgroundColor:String,borderColor:String,textColor:String},_n={display:null,startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]};function Tn(e,t){let n=function(e,t){return Array.isArray(e)?En(e,null,t,!0):"object"==typeof e&&e?En([e],null,t,!0):null!=e?String(e):null}(e.constraint,t);return{display:e.display||null,startEditable:null!=e.startEditable?e.startEditable:e.editable,durationEditable:null!=e.durationEditable?e.durationEditable:e.editable,constraints:null!=n?[n]:[],overlap:null!=e.overlap?e.overlap:null,allows:null!=e.allow?[e.allow]:[],backgroundColor:e.backgroundColor||e.color||"",borderColor:e.borderColor||e.color||"",textColor:e.textColor||"",classNames:(e.className||[]).concat(e.classNames||[])}}function kn(e){return e.reduce(Mn,_n)}function Mn(e,t){return{display:null!=t.display?t.display:e.display,startEditable:null!=t.startEditable?t.startEditable:e.startEditable,durationEditable:null!=t.durationEditable?t.durationEditable:e.durationEditable,constraints:e.constraints.concat(t.constraints),overlap:"boolean"==typeof t.overlap?t.overlap:e.overlap,allows:e.allows.concat(t.allows),backgroundColor:t.backgroundColor||e.backgroundColor,borderColor:t.borderColor||e.borderColor,textColor:t.textColor||e.textColor,classNames:e.classNames.concat(t.classNames)}}const In={id:String,groupId:String,title:String,url:String,interactive:Boolean},On={start:mn,end:mn,date:mn,allDay:Boolean},Nn=Object.assign(Object.assign(Object.assign({},In),On),{extendedProps:mn});function Pn(e,t,n,r,i=Bn(n)){let{refined:s,extra:o}=Hn(e,n,i),a=function(e,t){let n=null;e&&(n=e.defaultAllDay);null==n&&(n=t.options.defaultAllDay);return n}(t,n),l=function(e,t,n,r){for(let i=0;i<r.length;i+=1){let s=r[i].parse(e,n);if(s){let{allDay:n}=e;return null==n&&(n=t,null==n&&(n=s.allDayGuess,null==n&&(n=!1))),{allDay:n,duration:s.duration,typeData:s.typeData,typeId:i}}}return null}(s,a,n.dateEnv,n.pluginHooks.recurringTypes);if(l){let e=jn(s,o,t?t.sourceId:"",l.allDay,Boolean(l.duration),n);return e.recurringDef={typeId:l.typeId,typeData:l.typeData,duration:l.duration},{def:e,instance:null}}let c=function(e,t,n,r){let i,s,{allDay:o}=e,a=null,l=!1,c=null,d=null!=e.start?e.start:e.date;if(i=n.dateEnv.createMarkerMeta(d),i)a=i.marker;else if(!r)return null;null!=e.end&&(s=n.dateEnv.createMarkerMeta(e.end));null==o&&(o=null!=t?t:(!i||i.isTimeUnspecified)&&(!s||s.isTimeUnspecified));o&&a&&(a=kt(a));s&&(c=s.marker,o&&(c=kt(c)),a&&c<=a&&(c=null));c?l=!0:r||(l=n.options.forceEventDuration||!1,c=n.dateEnv.add(a,o?n.options.defaultAllDayEventDuration:n.options.defaultTimedEventDuration));return{allDay:o,hasEnd:l,range:{start:a,end:c},forcedStartTzo:i?i.forcedTzo:null,forcedEndTzo:s?s.forcedTzo:null}}(s,a,n,r);if(c){let e=jn(s,o,t?t.sourceId:"",c.allDay,c.hasEnd,n);return{def:e,instance:vn(e.defId,c.range,c.forcedStartTzo,c.forcedEndTzo)}}return null}function Hn(e,t,n=Bn(t)){return pn(e,n)}function Bn(e){return Object.assign(Object.assign(Object.assign({},xn),Nn),e.pluginHooks.eventRefiners)}function jn(e,t,n,r,i,s){let o={title:e.title||"",groupId:e.groupId||"",publicId:e.id||"",url:e.url||"",recurringDef:null,defId:Be(),sourceId:n,allDay:r,hasEnd:i,interactive:e.interactive,ui:Tn(e,s),extendedProps:Object.assign(Object.assign({},e.extendedProps||{}),t)};for(let t of s.pluginHooks.eventDefMemberAdders)Object.assign(o,t(e));return Object.freeze(o.ui.classNames),Object.freeze(o.extendedProps),o}const zn={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],display:"inverse-background",classNames:"fc-non-business",groupId:"_businessHours"};function Un(e,t){return En(function(e){let t;t=!0===e?[{}]:Array.isArray(e)?e.filter(e=>e.daysOfWeek):"object"==typeof e&&e?[e]:[];return t=t.map(e=>Object.assign(Object.assign({},zn),e)),t}(e),null,t)}function Ln(e){let t=Math.floor(Rt(e.start,e.end))||1,n=kt(e.start);return{start:n,end:St(n,t)}}function Wn(e,t=tt(0)){let n=null,r=null;if(e.end){r=kt(e.end);let n=e.end.valueOf()-r.valueOf();n&&n>=ot(t)&&(r=St(r,1))}return e.start&&(n=kt(e.start),r&&r<=n&&(r=St(n,1))),{start:n,end:r}}function Fn(e){let t=Wn(e);return Rt(t.start,t.end)>1}function Vn(e,t,n,r){return"year"===r?tt(n.diffWholeYears(e,t),"year"):"month"===r?tt(n.diffWholeMonths(e,t),"month"):xt(e,t)}function Gn(e,t){return e.left>=t.left&&e.left<t.right&&e.top>=t.top&&e.top<t.bottom}function Qn(e,t){let n={left:Math.max(e.left,t.left),right:Math.min(e.right,t.right),top:Math.max(e.top,t.top),bottom:Math.min(e.bottom,t.bottom)};return n.left<n.right&&n.top<n.bottom&&n}function qn(e,t){return{left:Math.min(Math.max(e.left,t.left),t.right),top:Math.min(Math.max(e.top,t.top),t.bottom)}}function Yn(e){return{left:(e.left+e.right)/2,top:(e.top+e.bottom)/2}}function Zn(e,t){return{left:e.left-t.left,top:e.top-t.top}}let Xn;function Jn(){return null==Xn&&(Xn=function(){if("undefined"==typeof document)return!0;let e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.innerHTML="<table><tr><td><div></div></td></tr></table>",e.querySelector("table").style.height="100px",e.querySelector("div").style.height="100%",document.body.appendChild(e);let t=e.querySelector("div").offsetHeight>0;return document.body.removeChild(e),t}()),Xn}const $n={defs:{},instances:{}};class Kn{constructor(){this.getKeysForEventDefs=Vt(this._getKeysForEventDefs),this.splitDateSelection=Vt(this._splitDateSpan),this.splitEventStore=Vt(this._splitEventStore),this.splitIndividualUi=Vt(this._splitIndividualUi),this.splitEventDrag=Vt(this._splitInteraction),this.splitEventResize=Vt(this._splitInteraction),this.eventUiBuilders={}}splitProps(e){let t=this.getKeyInfo(e),n=this.getKeysForEventDefs(e.eventStore),r=this.splitDateSelection(e.dateSelection),i=this.splitIndividualUi(e.eventUiBases,n),s=this.splitEventStore(e.eventStore,n),o=this.splitEventDrag(e.eventDrag),a=this.splitEventResize(e.eventResize),l={};this.eventUiBuilders=ht(t,(e,t)=>this.eventUiBuilders[t]||Vt(er));for(let n in t){let c=t[n],d=s[n]||$n,u=this.eventUiBuilders[n];l[n]={businessHours:c.businessHours||e.businessHours,dateSelection:r[n]||null,eventStore:d,eventUiBases:u(e.eventUiBases[""],c.ui,i[n]),eventSelection:d.instances[e.eventSelection]?e.eventSelection:"",eventDrag:o[n]||null,eventResize:a[n]||null}}return l}_splitDateSpan(e){let t={};if(e){let n=this.getKeysForDateSpan(e);for(let r of n)t[r]=e}return t}_getKeysForEventDefs(e){return ht(e.defs,e=>this.getKeysForEventDef(e))}_splitEventStore(e,t){let{defs:n,instances:r}=e,i={};for(let e in n)for(let r of t[e])i[r]||(i[r]={defs:{},instances:{}}),i[r].defs[e]=n[e];for(let e in r){let n=r[e];for(let r of t[n.defId])i[r]&&(i[r].instances[e]=n)}return i}_splitIndividualUi(e,t){let n={};for(let r in e)if(r)for(let i of t[r])n[i]||(n[i]={}),n[i][r]=e[r];return n}_splitInteraction(e){let t={};if(e){let n=this._splitEventStore(e.affectedEvents,this._getKeysForEventDefs(e.affectedEvents)),r=this._getKeysForEventDefs(e.mutatedEvents),i=this._splitEventStore(e.mutatedEvents,r),s=r=>{t[r]||(t[r]={affectedEvents:n[r]||$n,mutatedEvents:i[r]||$n,isEvent:e.isEvent})};for(let e in n)s(e);for(let e in i)s(e)}return t}}function er(e,t,n){let r=[];e&&r.push(e),t&&r.push(t);let i={"":kn(r)};return n&&Object.assign(i,n),i}function tr(e,t){let n,r,i=[],{start:s}=t;for(e.sort(nr),n=0;n<e.length;n+=1)r=e[n],r.start>s&&i.push({start:s,end:r.start}),r.end>s&&(s=r.end);return s<t.end&&i.push({start:s,end:t.end}),i}function nr(e,t){return e.start.valueOf()-t.start.valueOf()}function rr(e,t){let{start:n,end:r}=e,i=null;return null!==t.start&&(n=null===n?t.start:new Date(Math.max(n.valueOf(),t.start.valueOf()))),null!=t.end&&(r=null===r?t.end:new Date(Math.min(r.valueOf(),t.end.valueOf()))),(null===n||null===r||n<r)&&(i={start:n,end:r}),i}function ir(e,t){return(null===e.start?null:e.start.valueOf())===(null===t.start?null:t.start.valueOf())&&(null===e.end?null:e.end.valueOf())===(null===t.end?null:t.end.valueOf())}function sr(e,t){return(null===e.end||null===t.start||e.end>t.start)&&(null===e.start||null===t.end||e.start<t.end)}function or(e,t){return(null===e.start||null!==t.start&&t.start>=e.start)&&(null===e.end||null!==t.end&&t.end<=e.end)}function ar(e,t){return(null===e.start||t>=e.start)&&(null===e.end||t<e.end)}function lr(e,t,n,r){return{dow:e.getUTCDay(),isDisabled:Boolean(r&&!ar(r.activeRange,e)),isOther:Boolean(r&&!ar(r.currentRange,e)),isToday:Boolean(t&&ar(t,e)),isPast:Boolean(n?e<n:!!t&&e<t.start),isFuture:Boolean(n?e>n:!!t&&e>=t.end)}}function cr(e,t){let n=["fc-day","fc-day-"+At[e.dow]];return e.isDisabled?n.push("fc-day-disabled"):(e.isToday&&(n.push("fc-day-today"),n.push(t.getClass("today"))),e.isPast&&n.push("fc-day-past"),e.isFuture&&n.push("fc-day-future"),e.isOther&&n.push("fc-day-other")),n}const dr=on({year:"numeric",month:"long",day:"numeric"}),ur=on({week:"long"});function hr(e,t,n="day",r=!0){const{dateEnv:i,options:s,calendarApi:o}=e;let a=i.format(t,"week"===n?ur:dr);if(s.navLinks){let e=i.toDate(t);const l=e=>{let r="day"===n?s.navLinkDayClick:"week"===n?s.navLinkWeekClick:null;"function"==typeof r?r.call(o,i.toDate(t),e):("string"==typeof r&&(n=r),o.zoomTo(t,n))};return Object.assign({title:Ze(s.navLinkHint,[a,e],a),"data-navlink":""},r?Ne(l):{onClick:l})}return{"aria-label":a}}let fr,gr=null;function pr(){return null===gr&&(gr=function(){let e=document.createElement("div");we(e,{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}),e.innerHTML="<div></div>",document.body.appendChild(e);let t=e.firstChild.getBoundingClientRect().left>e.getBoundingClientRect().left;return ye(e),t}()),gr}function mr(){return fr||(fr=function(){let e=document.createElement("div");e.style.overflow="scroll",e.style.position="absolute",e.style.top="-9999px",e.style.left="-9999px",document.body.appendChild(e);let t=vr(e);return document.body.removeChild(e),t}()),fr}function vr(e){return{x:e.offsetHeight-e.clientHeight,y:e.offsetWidth-e.clientWidth}}function br(e,t=!1){let n=window.getComputedStyle(e),r=parseInt(n.borderLeftWidth,10)||0,i=parseInt(n.borderRightWidth,10)||0,s=parseInt(n.borderTopWidth,10)||0,o=parseInt(n.borderBottomWidth,10)||0,a=vr(e),l=a.y-r-i,c={borderLeft:r,borderRight:i,borderTop:s,borderBottom:o,scrollbarBottom:a.x-s-o,scrollbarLeft:0,scrollbarRight:0};return pr()&&"rtl"===n.direction?c.scrollbarLeft=l:c.scrollbarRight=l,t&&(c.paddingLeft=parseInt(n.paddingLeft,10)||0,c.paddingRight=parseInt(n.paddingRight,10)||0,c.paddingTop=parseInt(n.paddingTop,10)||0,c.paddingBottom=parseInt(n.paddingBottom,10)||0),c}function yr(e,t=!1,n){let r=n?e.getBoundingClientRect():Er(e),i=br(e,t),s={left:r.left+i.borderLeft+i.scrollbarLeft,right:r.right-i.borderRight-i.scrollbarRight,top:r.top+i.borderTop,bottom:r.bottom-i.borderBottom-i.scrollbarBottom};return t&&(s.left+=i.paddingLeft,s.right-=i.paddingRight,s.top+=i.paddingTop,s.bottom-=i.paddingBottom),s}function Er(e){let t=e.getBoundingClientRect();return{left:t.left+window.pageXOffset,top:t.top+window.pageYOffset,right:t.right+window.pageXOffset,bottom:t.bottom+window.pageYOffset}}function Ar(e){let t=[];for(;e instanceof HTMLElement;){let n=window.getComputedStyle(e);if("fixed"===n.position)break;/(auto|scroll)/.test(n.overflow+n.overflowY+n.overflowX)&&t.push(e),e=e.parentNode}return t}function Dr(e,t,n){let r=!1,i=function(e){r||(r=!0,t(e))},s=function(e){r||(r=!0,n(e))},o=e(i,s);o&&"function"==typeof o.then&&o.then(i,s)}class Sr{constructor(){this.handlers={},this.thisContext=null}setThisContext(e){this.thisContext=e}setOptions(e){this.options=e}on(e,t){!function(e,t,n){(e[t]||(e[t]=[])).push(n)}(this.handlers,e,t)}off(e,t){!function(e,t,n){n?e[t]&&(e[t]=e[t].filter(e=>e!==n)):delete e[t]}(this.handlers,e,t)}trigger(e,...t){let n=this.handlers[e]||[],r=this.options&&this.options[e],i=[].concat(r||[],n);for(let e of i)e.apply(this.thisContext,t)}hasHandlers(e){return Boolean(this.handlers[e]&&this.handlers[e].length||this.options&&this.options[e])}}class wr{constructor(e,t,n,r){this.els=t;let i=this.originClientRect=e.getBoundingClientRect();n&&this.buildElHorizontals(i.left),r&&this.buildElVerticals(i.top)}buildElHorizontals(e){let t=[],n=[];for(let r of this.els){let i=r.getBoundingClientRect();t.push(i.left-e),n.push(i.right-e)}this.lefts=t,this.rights=n}buildElVerticals(e){let t=[],n=[];for(let r of this.els){let i=r.getBoundingClientRect();t.push(i.top-e),n.push(i.bottom-e)}this.tops=t,this.bottoms=n}leftToIndex(e){let t,{lefts:n,rights:r}=this,i=n.length;for(t=0;t<i;t+=1)if(e>=n[t]&&e<r[t])return t}topToIndex(e){let t,{tops:n,bottoms:r}=this,i=n.length;for(t=0;t<i;t+=1)if(e>=n[t]&&e<r[t])return t}getWidth(e){return this.rights[e]-this.lefts[e]}getHeight(e){return this.bottoms[e]-this.tops[e]}similarTo(e){return Cr(this.tops||[],e.tops||[])&&Cr(this.bottoms||[],e.bottoms||[])&&Cr(this.lefts||[],e.lefts||[])&&Cr(this.rights||[],e.rights||[])}}function Cr(e,t){const n=e.length;if(n!==t.length)return!1;for(let r=0;r<n;r++)if(Math.round(e[r])!==Math.round(t[r]))return!1;return!0}class Rr{getMaxScrollTop(){return this.getScrollHeight()-this.getClientHeight()}getMaxScrollLeft(){return this.getScrollWidth()-this.getClientWidth()}canScrollVertically(){return this.getMaxScrollTop()>0}canScrollHorizontally(){return this.getMaxScrollLeft()>0}canScrollUp(){return this.getScrollTop()>0}canScrollDown(){return this.getScrollTop()<this.getMaxScrollTop()}canScrollLeft(){return this.getScrollLeft()>0}canScrollRight(){return this.getScrollLeft()<this.getMaxScrollLeft()}}class xr extends Rr{constructor(e){super(),this.el=e}getScrollTop(){return this.el.scrollTop}getScrollLeft(){return this.el.scrollLeft}setScrollTop(e){this.el.scrollTop=e}setScrollLeft(e){this.el.scrollLeft=e}getScrollWidth(){return this.el.scrollWidth}getScrollHeight(){return this.el.scrollHeight}getClientHeight(){return this.el.clientHeight}getClientWidth(){return this.el.clientWidth}}class _r extends Rr{getScrollTop(){return window.pageYOffset}getScrollLeft(){return window.pageXOffset}setScrollTop(e){window.scroll(window.pageXOffset,e)}setScrollLeft(e){window.scroll(e,window.pageYOffset)}getScrollWidth(){return document.documentElement.scrollWidth}getScrollHeight(){return document.documentElement.scrollHeight}getClientHeight(){return document.documentElement.clientHeight}getClientWidth(){return document.documentElement.clientWidth}}class Tr{constructor(e){this.iconOverrideOption&&this.setIconOverride(e[this.iconOverrideOption])}setIconOverride(e){let t,n;if("object"==typeof e&&e){for(n in t=Object.assign({},this.iconClasses),e)t[n]=this.applyIconOverridePrefix(e[n]);this.iconClasses=t}else!1===e&&(this.iconClasses={})}applyIconOverridePrefix(e){let t=this.iconOverridePrefix;return t&&0!==e.indexOf(t)&&(e=t+e),e}getClass(e){return this.classes[e]||""}getIconClass(e,t){let n;return n=t&&this.rtlIconClasses&&this.rtlIconClasses[e]||this.iconClasses[e],n?`${this.baseIconClass} ${n}`:""}getCustomButtonIconClass(e){let t;return this.iconOverrideCustomButtonOption&&(t=e[this.iconOverrideCustomButtonOption],t)?`${this.baseIconClass} ${this.applyIconOverridePrefix(t)}`:""}}function kr(e){e();let t=n.debounceRendering,r=[];for(n.debounceRendering=function(e){r.push(e)},P(f(Mr,{}),document.createElement("div"));r.length;)r.shift()();n.debounceRendering=t}Tr.prototype.classes={},Tr.prototype.iconClasses={},Tr.prototype.baseIconClass="",Tr.prototype.iconOverridePrefix="";class Mr extends m{render(){return f("div",{})}componentDidMount(){this.setState({})}}function Ir(e){let t=function(e,t){var n={__c:t="__cC"+a++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,r;return this.getChildContext||(n=[],(r={})[t]=this,this.getChildContext=function(){return r},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some(y)},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Provider.__=n.Consumer.contextType=n}(e),n=t.Provider;return t.Provider=function(){let e=!this.getChildContext,t=n.apply(this,arguments);if(e){let e=[];this.shouldComponentUpdate=t=>{this.props.value!==t.value&&e.forEach(e=>{e.context=t.value,e.forceUpdate()})},this.sub=t=>{e.push(t);let n=t.componentWillUnmount;t.componentWillUnmount=()=>{e.splice(e.indexOf(t),1),n&&n.call(t)}}}return t},t}class Or{constructor(e,t,n,r){this.execFunc=e,this.emitter=t,this.scrollTime=n,this.scrollTimeReset=r,this.handleScrollRequest=e=>{this.queuedRequest=Object.assign({},this.queuedRequest||{},e),this.drain()},t.on("_scrollRequest",this.handleScrollRequest),this.fireInitialScroll()}detach(){this.emitter.off("_scrollRequest",this.handleScrollRequest)}update(e){e&&this.scrollTimeReset?this.fireInitialScroll():this.drain()}fireInitialScroll(){this.handleScrollRequest({time:this.scrollTime})}drain(){this.queuedRequest&&this.execFunc(this.queuedRequest)&&(this.queuedRequest=null)}}const Nr=Ir({});function Pr(e,t,n,r,i,s,o,a,l,c,d,u,h){return{dateEnv:i,options:n,pluginHooks:o,emitter:c,dispatch:a,getCurrentData:l,calendarApi:d,viewSpec:e,viewApi:t,dateProfileGenerator:r,theme:s,isRtl:"rtl"===n.direction,addResizeHandler(e){c.on("_resize",e)},removeResizeHandler(e){c.off("_resize",e)},createScrollResponder:e=>new Or(e,c,tt(n.scrollTime),n.scrollTimeReset),registerInteractiveComponent:u,unregisterInteractiveComponent:h}}class Hr extends m{shouldComponentUpdate(e,t){return this.debug&&console.log(vt(e,this.props),vt(t,this.state)),!bt(this.props,e,this.propEquality)||!bt(this.state,t,this.stateEquality)}safeSetState(e){bt(this.state,Object.assign(Object.assign({},this.state),e),this.stateEquality)||this.setState(e)}}Hr.addPropsEquality=function(e){let t=Object.create(this.prototype.propEquality);Object.assign(t,e),this.prototype.propEquality=t},Hr.addStateEquality=function(e){let t=Object.create(this.prototype.stateEquality);Object.assign(t,e),this.prototype.stateEquality=t},Hr.contextType=Nr,Hr.prototype.propEquality={},Hr.prototype.stateEquality={};class Br extends Hr{}function jr(e,t){"function"==typeof e?e(t):e&&(e.current=t)}Br.contextType=Nr;class zr extends Br{constructor(){super(...arguments),this.uid=Be()}prepareHits(){}queryHit(e,t,n,r){return null}isValidSegDownEl(e){return!this.props.eventDrag&&!this.props.eventResize&&!Ee(e,".fc-event-mirror")}isValidDateDownEl(e){return!(Ee(e,".fc-event:not(.fc-bg-event)")||Ee(e,".fc-more-link")||Ee(e,"a[data-navlink]")||Ee(e,".fc-popover"))}}function Ur(e,t){return"function"==typeof e&&(e=e()),null==e?t.createNowMarker():t.createMarker(e)}class Lr{constructor(e){this.props=e,this.nowDate=Ur(e.nowInput,e.dateEnv),this.initHiddenDays()}buildPrev(e,t,n){let{dateEnv:r}=this.props,i=r.subtract(r.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(i,-1,n)}buildNext(e,t,n){let{dateEnv:r}=this.props,i=r.add(r.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(i,1,n)}build(e,t,n=!0){let r,i,s,o,a,l,{props:c}=this;var d,u;return r=this.buildValidRange(),r=this.trimHiddenDays(r),n&&(d=e,e=null!=(u=r).start&&d<u.start?u.start:null!=u.end&&d>=u.end?new Date(u.end.valueOf()-1):d),i=this.buildCurrentRangeInfo(e,t),s=/^(year|month|week|day)$/.test(i.unit),o=this.buildRenderRange(this.trimHiddenDays(i.range),i.unit,s),o=this.trimHiddenDays(o),a=o,c.showNonCurrentDates||(a=rr(a,i.range)),a=this.adjustActiveRange(a),a=rr(a,r),l=sr(i.range,r),{validRange:r,currentRange:i.range,currentRangeUnit:i.unit,isRangeAllDay:s,activeRange:a,renderRange:o,slotMinTime:c.slotMinTime,slotMaxTime:c.slotMaxTime,isValid:l,dateIncrement:this.buildDateIncrement(i.duration)}}buildValidRange(){let e=this.props.validRangeInput,t="function"==typeof e?e.call(this.props.calendarApi,this.nowDate):e;return this.refineRange(t)||{start:null,end:null}}buildCurrentRangeInfo(e,t){let n,{props:r}=this,i=null,s=null,o=null;return r.duration?(i=r.duration,s=r.durationUnit,o=this.buildRangeFromDuration(e,t,i,s)):(n=this.props.dayCount)?(s="day",o=this.buildRangeFromDayCount(e,t,n)):(o=this.buildCustomVisibleRange(e))?s=r.dateEnv.greatestWholeUnit(o.start,o.end).unit:(i=this.getFallbackDuration(),s=lt(i).unit,o=this.buildRangeFromDuration(e,t,i,s)),{duration:i,unit:s,range:o}}getFallbackDuration(){return tt({day:1})}adjustActiveRange(e){let{dateEnv:t,usesMinMaxTime:n,slotMinTime:r,slotMaxTime:i}=this.props,{start:s,end:o}=e;return n&&(st(r)<0&&(s=kt(s),s=t.add(s,r)),st(i)>1&&(o=kt(o),o=St(o,-1),o=t.add(o,i))),{start:s,end:o}}buildRangeFromDuration(e,t,n,r){let i,s,o,{dateEnv:a,dateAlignment:l}=this.props;if(!l){let{dateIncrement:e}=this.props;l=e&&ot(e)<ot(n)?lt(e).unit:r}function c(){i=a.startOf(e,l),s=a.add(i,n),o={start:i,end:s}}return st(n)<=1&&this.isHiddenDay(i)&&(i=this.skipHiddenDays(i,t),i=kt(i)),c(),this.trimHiddenDays(o)||(e=this.skipHiddenDays(e,t),c()),o}buildRangeFromDayCount(e,t,n){let r,{dateEnv:i,dateAlignment:s}=this.props,o=0,a=e;s&&(a=i.startOf(a,s)),a=kt(a),a=this.skipHiddenDays(a,t),r=a;do{r=St(r,1),this.isHiddenDay(r)||(o+=1)}while(o<n);return{start:a,end:r}}buildCustomVisibleRange(e){let{props:t}=this,n=t.visibleRangeInput,r="function"==typeof n?n.call(t.calendarApi,t.dateEnv.toDate(e)):n,i=this.refineRange(r);return!i||null!=i.start&&null!=i.end?i:null}buildRenderRange(e,t,n){return e}buildDateIncrement(e){let t,{dateIncrement:n}=this.props;return n||((t=this.props.dateAlignment)?tt(1,t):e||tt({days:1}))}refineRange(e){if(e){let t=function(e,t){let n=null,r=null;return e.start&&(n=t.createMarker(e.start)),e.end&&(r=t.createMarker(e.end)),n||r?n&&r&&r<n?null:{start:n,end:r}:null}(e,this.props.dateEnv);return t&&(t=Wn(t)),t}return null}initHiddenDays(){let e,t=this.props.hiddenDays||[],n=[],r=0;for(!1===this.props.weekends&&t.push(0,6),e=0;e<7;e+=1)(n[e]=-1!==t.indexOf(e))||(r+=1);if(!r)throw new Error("invalid hiddenDays");this.isHiddenDayHash=n}trimHiddenDays(e){let{start:t,end:n}=e;return t&&(t=this.skipHiddenDays(t)),n&&(n=this.skipHiddenDays(n,-1,!0)),null==t||null==n||t<n?{start:t,end:n}:null}isHiddenDay(e){return e instanceof Date&&(e=e.getUTCDay()),this.isHiddenDayHash[e]}skipHiddenDays(e,t=1,n=!1){for(;this.isHiddenDayHash[(e.getUTCDay()+(n?t:0)+7)%7];)e=St(e,t);return e}}function Wr(e,t,n){n.emitter.trigger("select",Object.assign(Object.assign({},Fr(e,n)),{jsEvent:t?t.origEvent:null,view:n.viewApi||n.calendarApi.view}))}function Fr(e,t){let n={};for(let r of t.pluginHooks.dateSpanTransforms)Object.assign(n,r(e,t));var r,i;return Object.assign(n,(r=e,i=t.dateEnv,Object.assign(Object.assign({},bi(r.range,i,r.allDay)),{allDay:r.allDay}))),n}function Vr(e,t,n){let{dateEnv:r,options:i}=n,s=t;return e?(s=kt(s),s=r.add(s,i.defaultAllDayEventDuration)):s=r.add(s,i.defaultTimedEventDuration),s}function Gr(e,t,n,r){let i=ni(e.defs,t),s={defs:{},instances:{}};for(let t in e.defs){let o=e.defs[t];s.defs[t]=Qr(o,i[t],n,r)}for(let t in e.instances){let o=e.instances[t],a=s.defs[o.defId];s.instances[t]=qr(o,a,i[o.defId],n,r)}return s}function Qr(e,t,n,r){let i=n.standardProps||{};null==i.hasEnd&&t.durationEditable&&(n.startDelta||n.endDelta)&&(i.hasEnd=!0);let s=Object.assign(Object.assign(Object.assign({},e),i),{ui:Object.assign(Object.assign({},e.ui),i.ui)});n.extendedProps&&(s.extendedProps=Object.assign(Object.assign({},s.extendedProps),n.extendedProps));for(let e of r.pluginHooks.eventDefMutationAppliers)e(s,n,r);return!s.hasEnd&&r.options.forceEventDuration&&(s.hasEnd=!0),s}function qr(e,t,n,r,i){let{dateEnv:s}=i,o=r.standardProps&&!0===r.standardProps.allDay,a=r.standardProps&&!1===r.standardProps.hasEnd,l=Object.assign({},e);return o&&(l.range=Ln(l.range)),r.datesDelta&&n.startEditable&&(l.range={start:s.add(l.range.start,r.datesDelta),end:s.add(l.range.end,r.datesDelta)}),r.startDelta&&n.durationEditable&&(l.range={start:s.add(l.range.start,r.startDelta),end:l.range.end}),r.endDelta&&n.durationEditable&&(l.range={start:l.range.start,end:s.add(l.range.end,r.endDelta)}),a&&(l.range={start:l.range.start,end:Vr(t.allDay,l.range.start,i)}),t.allDay&&(l.range={start:kt(l.range.start),end:kt(l.range.end)}),l.range.end<l.range.start&&(l.range.end=Vr(t.allDay,l.range.start,i)),l}class Yr{constructor(e,t){this.context=e,this.internalEventSource=t}remove(){this.context.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:this.internalEventSource.sourceId})}refetch(){this.context.dispatch({type:"FETCH_EVENT_SOURCES",sourceIds:[this.internalEventSource.sourceId],isRefetch:!0})}get id(){return this.internalEventSource.publicId}get url(){return this.internalEventSource.meta.url}get format(){return this.internalEventSource.meta.format}}class Zr{constructor(e,t,n){this._context=e,this._def=t,this._instance=n||null}setProp(e,t){if(e in On)console.warn("Could not set date-related prop 'name'. Use one of the date-related methods instead.");else if("id"===e)t=In[e](t),this.mutate({standardProps:{publicId:t}});else if(e in In)t=In[e](t),this.mutate({standardProps:{[e]:t}});else if(e in xn){let n=xn[e](t);n="color"===e?{backgroundColor:t,borderColor:t}:"editable"===e?{startEditable:t,durationEditable:t}:{[e]:t},this.mutate({standardProps:{ui:n}})}else console.warn(`Could not set prop '${e}'. Use setExtendedProp instead.`)}setExtendedProp(e,t){this.mutate({extendedProps:{[e]:t}})}setStart(e,t={}){let{dateEnv:n}=this._context,r=n.createMarker(e);if(r&&this._instance){let e=Vn(this._instance.range.start,r,n,t.granularity);t.maintainDuration?this.mutate({datesDelta:e}):this.mutate({startDelta:e})}}setEnd(e,t={}){let n,{dateEnv:r}=this._context;if((null==e||(n=r.createMarker(e),n))&&this._instance)if(n){let e=Vn(this._instance.range.end,n,r,t.granularity);this.mutate({endDelta:e})}else this.mutate({standardProps:{hasEnd:!1}})}setDates(e,t,n={}){let r,{dateEnv:i}=this._context,s={allDay:n.allDay},o=i.createMarker(e);var a,l;if(o&&((null==t||(r=i.createMarker(t),r))&&this._instance)){let e=this._instance.range;!0===n.allDay&&(e=Ln(e));let t=Vn(e.start,o,i,n.granularity);if(r){let o=Vn(e.end,r,i,n.granularity);l=o,(a=t).years===l.years&&a.months===l.months&&a.days===l.days&&a.milliseconds===l.milliseconds?this.mutate({datesDelta:t,standardProps:s}):this.mutate({startDelta:t,endDelta:o,standardProps:s})}else s.hasEnd=!1,this.mutate({datesDelta:t,standardProps:s})}}moveStart(e){let t=tt(e);t&&this.mutate({startDelta:t})}moveEnd(e){let t=tt(e);t&&this.mutate({endDelta:t})}moveDates(e){let t=tt(e);t&&this.mutate({datesDelta:t})}setAllDay(e,t={}){let n={allDay:e},{maintainDuration:r}=t;null==r&&(r=this._context.options.allDayMaintainDuration),this._def.allDay!==e&&(n.hasEnd=r),this.mutate({standardProps:n})}formatRange(e){let{dateEnv:t}=this._context,n=this._instance,r=on(e);return this._def.hasEnd?t.formatRange(n.range.start,n.range.end,r,{forcedStartTzo:n.forcedStartTzo,forcedEndTzo:n.forcedEndTzo}):t.format(n.range.start,r,{forcedTzo:n.forcedStartTzo})}mutate(e){let t=this._instance;if(t){let n=this._def,r=this._context,{eventStore:i}=r.getCurrentData(),s=Dn(i,t.instanceId);s=Gr(s,{"":{display:"",startEditable:!0,durationEditable:!0,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]}},e,r);let o=new Zr(r,n,t);this._def=s.defs[n.defId],this._instance=s.instances[t.instanceId],r.dispatch({type:"MERGE_EVENTS",eventStore:s}),r.emitter.trigger("eventChange",{oldEvent:o,event:this,relatedEvents:Jr(s,r,t),revert(){r.dispatch({type:"RESET_EVENTS",eventStore:i})}})}}remove(){let e=this._context,t=Xr(this);e.dispatch({type:"REMOVE_EVENTS",eventStore:t}),e.emitter.trigger("eventRemove",{event:this,relatedEvents:[],revert(){e.dispatch({type:"MERGE_EVENTS",eventStore:t})}})}get source(){let{sourceId:e}=this._def;return e?new Yr(this._context,this._context.getCurrentData().eventSources[e]):null}get start(){return this._instance?this._context.dateEnv.toDate(this._instance.range.start):null}get end(){return this._instance&&this._def.hasEnd?this._context.dateEnv.toDate(this._instance.range.end):null}get startStr(){let e=this._instance;return e?this._context.dateEnv.formatIso(e.range.start,{omitTime:this._def.allDay,forcedTzo:e.forcedStartTzo}):""}get endStr(){let e=this._instance;return e&&this._def.hasEnd?this._context.dateEnv.formatIso(e.range.end,{omitTime:this._def.allDay,forcedTzo:e.forcedEndTzo}):""}get id(){return this._def.publicId}get groupId(){return this._def.groupId}get allDay(){return this._def.allDay}get title(){return this._def.title}get url(){return this._def.url}get display(){return this._def.ui.display||"auto"}get startEditable(){return this._def.ui.startEditable}get durationEditable(){return this._def.ui.durationEditable}get constraint(){return this._def.ui.constraints[0]||null}get overlap(){return this._def.ui.overlap}get allow(){return this._def.ui.allows[0]||null}get backgroundColor(){return this._def.ui.backgroundColor}get borderColor(){return this._def.ui.borderColor}get textColor(){return this._def.ui.textColor}get classNames(){return this._def.ui.classNames}get extendedProps(){return this._def.extendedProps}toPlainObject(e={}){let t=this._def,{ui:n}=t,{startStr:r,endStr:i}=this,s={};return t.title&&(s.title=t.title),r&&(s.start=r),i&&(s.end=i),t.publicId&&(s.id=t.publicId),t.groupId&&(s.groupId=t.groupId),t.url&&(s.url=t.url),n.display&&"auto"!==n.display&&(s.display=n.display),e.collapseColor&&n.backgroundColor&&n.backgroundColor===n.borderColor?s.color=n.backgroundColor:(n.backgroundColor&&(s.backgroundColor=n.backgroundColor),n.borderColor&&(s.borderColor=n.borderColor)),n.textColor&&(s.textColor=n.textColor),n.classNames.length&&(s.classNames=n.classNames),Object.keys(t.extendedProps).length&&(e.collapseExtendedProps?Object.assign(s,t.extendedProps):s.extendedProps=t.extendedProps),s}toJSON(){return this.toPlainObject()}}function Xr(e){let t=e._def,n=e._instance;return{defs:{[t.defId]:t},instances:n?{[n.instanceId]:n}:{}}}function Jr(e,t,n){let{defs:r,instances:i}=e,s=[],o=n?n.instanceId:"";for(let e in i){let n=i[e],a=r[n.defId];n.instanceId!==o&&s.push(new Zr(t,a,n))}return s}function $r(e,t,n,r){let i={},s={},o={},a=[],l=[],c=ni(e.defs,t);for(let t in e.defs){let n=e.defs[t];"inverse-background"===c[n.defId].display&&(n.groupId?(i[n.groupId]=[],o[n.groupId]||(o[n.groupId]=n)):s[t]=[])}for(let t in e.instances){let o=e.instances[t],d=e.defs[o.defId],u=c[d.defId],h=o.range,f=!d.allDay&&r?Wn(h,r):h,g=rr(f,n);g&&("inverse-background"===u.display?d.groupId?i[d.groupId].push(g):s[o.defId].push(g):"none"!==u.display&&("background"===u.display?a:l).push({def:d,ui:u,instance:o,range:g,isStart:f.start&&f.start.valueOf()===g.start.valueOf(),isEnd:f.end&&f.end.valueOf()===g.end.valueOf()}))}for(let e in i){let t=tr(i[e],n);for(let n of t){let t=o[e],r=c[t.defId];a.push({def:t,ui:r,instance:null,range:n,isStart:!1,isEnd:!1})}}for(let t in s){let r=tr(s[t],n);for(let n of r)a.push({def:e.defs[t],ui:c[t],instance:null,range:n,isStart:!1,isEnd:!1})}return{bg:a,fg:l}}function Kr(e){return"background"===e.ui.display||"inverse-background"===e.ui.display}function ei(e,t){e.fcSeg=t}function ti(e){return e.fcSeg||e.parentNode.fcSeg||null}function ni(e,t){return ht(e,e=>ri(e,t))}function ri(e,t){let n=[];return t[""]&&n.push(t[""]),t[e.defId]&&n.push(t[e.defId]),n.push(e.ui),kn(n)}function ii(e,t){let n=e.map(si);return n.sort((e,n)=>Ge(e,n,t)),n.map(e=>e._seg)}function si(e){let{eventRange:t}=e,n=t.def,r=t.instance?t.instance.range:t.range,i=r.start?r.start.valueOf():0,s=r.end?r.end.valueOf():0;return Object.assign(Object.assign(Object.assign({},n.extendedProps),n),{id:n.publicId,start:i,end:s,duration:s-i,allDay:Number(n.allDay),_seg:e})}function oi(e,t){let{pluginHooks:n}=t,r=n.isDraggableTransformers,{def:i,ui:s}=e.eventRange,o=s.startEditable;for(let e of r)o=e(o,i,s,t);return o}function ai(e,t){return e.isStart&&e.eventRange.ui.durationEditable&&t.options.eventResizableFromStart}function li(e,t){return e.isEnd&&e.eventRange.ui.durationEditable}function ci(e,t,n,r,i,s,o){let{dateEnv:a,options:l}=n,{displayEventTime:c,displayEventEnd:d}=l,u=e.eventRange.def,h=e.eventRange.instance;null==c&&(c=!1!==r),null==d&&(d=!1!==i);let f=h.range.start,g=h.range.end,p=s||e.start||e.eventRange.range.start,m=o||e.end||e.eventRange.range.end,v=kt(f).valueOf()===kt(p).valueOf(),b=kt(wt(g,-1)).valueOf()===kt(wt(m,-1)).valueOf();return c&&!u.allDay&&(v||b)?(p=v?f:p,m=b?g:m,d&&u.hasEnd?a.formatRange(p,m,t,{forcedStartTzo:s?null:h.forcedStartTzo,forcedEndTzo:o?null:h.forcedEndTzo}):a.format(p,t,{forcedTzo:s?null:h.forcedStartTzo})):""}function di(e,t,n){let r=e.eventRange.range;return{isPast:r.end<(n||t.start),isFuture:r.start>=(n||t.end),isToday:t&&ar(t,r.start)}}function ui(e){let t=["fc-event"];return e.isMirror&&t.push("fc-event-mirror"),e.isDraggable&&t.push("fc-event-draggable"),(e.isStartResizable||e.isEndResizable)&&t.push("fc-event-resizable"),e.isDragging&&t.push("fc-event-dragging"),e.isResizing&&t.push("fc-event-resizing"),e.isSelected&&t.push("fc-event-selected"),e.isStart&&t.push("fc-event-start"),e.isEnd&&t.push("fc-event-end"),e.isPast&&t.push("fc-event-past"),e.isToday&&t.push("fc-event-today"),e.isFuture&&t.push("fc-event-future"),t}function hi(e){return e.instance?e.instance.instanceId:`${e.def.defId}:${e.range.start.toISOString()}`}function fi(e,t){let{def:n,instance:r}=e.eventRange,{url:i}=n;if(i)return{href:i};let{emitter:s,options:o}=t,{eventInteractive:a}=o;return null==a&&(a=n.interactive,null==a&&(a=Boolean(s.hasHandlers("eventClick")))),a?Pe(e=>{s.trigger("eventClick",{el:e.target,event:new Zr(t,n,r),jsEvent:e,view:t.viewApi})}):{}}const gi={start:mn,end:mn,allDay:Boolean};function pi(e,t,n){let r=function(e,t){let{refined:n,extra:r}=pn(e,gi),i=n.start?t.createMarkerMeta(n.start):null,s=n.end?t.createMarkerMeta(n.end):null,{allDay:o}=n;null==o&&(o=i&&i.isTimeUnspecified&&(!s||s.isTimeUnspecified));return Object.assign({range:{start:i?i.marker:null,end:s?s.marker:null},allDay:o},r)}(e,t),{range:i}=r;if(!i.start)return null;if(!i.end){if(null==n)return null;i.end=t.add(i.start,n)}return r}function mi(e,t){return ir(e.range,t.range)&&e.allDay===t.allDay&&function(e,t){for(let n in t)if("range"!==n&&"allDay"!==n&&e[n]!==t[n])return!1;for(let n in e)if(!(n in t))return!1;return!0}(e,t)}function vi(e,t,n){return Object.assign(Object.assign({},bi(e,t,n)),{timeZone:t.timeZone})}function bi(e,t,n){return{start:t.toDate(e.start),end:t.toDate(e.end),startStr:t.formatIso(e.start,{omitTime:n}),endStr:t.formatIso(e.end,{omitTime:n})}}let yi={};var Ei,Ai;Ei="gregory",Ai=class{getMarkerYear(e){return e.getUTCFullYear()}getMarkerMonth(e){return e.getUTCMonth()}getMarkerDay(e){return e.getUTCDate()}arrayToMarker(e){return Ht(e)}markerToArray(e){return Pt(e)}},yi[Ei]=Ai;const Di=/^\s*(\d{4})(-?(\d{2})(-?(\d{2})([T ](\d{2}):?(\d{2})(:?(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;function Si(e){let t=Di.exec(e);if(t){let e=new Date(Date.UTC(Number(t[1]),t[3]?Number(t[3])-1:0,Number(t[5]||1),Number(t[7]||0),Number(t[8]||0),Number(t[10]||0),t[12]?1e3*Number("0."+t[12]):0));if(Bt(e)){let n=null;return t[13]&&(n=("-"===t[15]?-1:1)*(60*Number(t[16]||0)+Number(t[18]||0))),{marker:e,isTimeUnspecified:!t[6],timeZoneOffset:n}}}return null}class wi{constructor(e){let t=this.timeZone=e.timeZone,n="local"!==t&&"UTC"!==t;e.namedTimeZoneImpl&&n&&(this.namedTimeZoneImpl=new e.namedTimeZoneImpl(t)),this.canComputeOffset=Boolean(!n||this.namedTimeZoneImpl),this.calendarSystem=function(e){return new yi[e]}(e.calendarSystem),this.locale=e.locale,this.weekDow=e.locale.week.dow,this.weekDoy=e.locale.week.doy,"ISO"===e.weekNumberCalculation&&(this.weekDow=1,this.weekDoy=4),"number"==typeof e.firstDay&&(this.weekDow=e.firstDay),"function"==typeof e.weekNumberCalculation&&(this.weekNumberFunc=e.weekNumberCalculation),this.weekText=null!=e.weekText?e.weekText:e.locale.options.weekText,this.weekTextLong=(null!=e.weekTextLong?e.weekTextLong:e.locale.options.weekTextLong)||this.weekText,this.cmdFormatter=e.cmdFormatter,this.defaultSeparator=e.defaultSeparator}createMarker(e){let t=this.createMarkerMeta(e);return null===t?null:t.marker}createNowMarker(){return this.canComputeOffset?this.timestampToMarker((new Date).valueOf()):Ht(Ot(new Date))}createMarkerMeta(e){if("string"==typeof e)return this.parse(e);let t=null;return"number"==typeof e?t=this.timestampToMarker(e):e instanceof Date?(e=e.valueOf(),isNaN(e)||(t=this.timestampToMarker(e))):Array.isArray(e)&&(t=Ht(e)),null!==t&&Bt(t)?{marker:t,isTimeUnspecified:!1,forcedTzo:null}:null}parse(e){let t=Si(e);if(null===t)return null;let{marker:n}=t,r=null;return null!==t.timeZoneOffset&&(this.canComputeOffset?n=this.timestampToMarker(n.valueOf()-60*t.timeZoneOffset*1e3):r=t.timeZoneOffset),{marker:n,isTimeUnspecified:t.isTimeUnspecified,forcedTzo:r}}getYear(e){return this.calendarSystem.getMarkerYear(e)}getMonth(e){return this.calendarSystem.getMarkerMonth(e)}add(e,t){let n=this.calendarSystem.markerToArray(e);return n[0]+=t.years,n[1]+=t.months,n[2]+=t.days,n[6]+=t.milliseconds,this.calendarSystem.arrayToMarker(n)}subtract(e,t){let n=this.calendarSystem.markerToArray(e);return n[0]-=t.years,n[1]-=t.months,n[2]-=t.days,n[6]-=t.milliseconds,this.calendarSystem.arrayToMarker(n)}addYears(e,t){let n=this.calendarSystem.markerToArray(e);return n[0]+=t,this.calendarSystem.arrayToMarker(n)}addMonths(e,t){let n=this.calendarSystem.markerToArray(e);return n[1]+=t,this.calendarSystem.arrayToMarker(n)}diffWholeYears(e,t){let{calendarSystem:n}=this;return jt(e)===jt(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)&&n.getMarkerMonth(e)===n.getMarkerMonth(t)?n.getMarkerYear(t)-n.getMarkerYear(e):null}diffWholeMonths(e,t){let{calendarSystem:n}=this;return jt(e)===jt(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)?n.getMarkerMonth(t)-n.getMarkerMonth(e)+12*(n.getMarkerYear(t)-n.getMarkerYear(e)):null}greatestWholeUnit(e,t){let n=this.diffWholeYears(e,t);return null!==n?{unit:"year",value:n}:(n=this.diffWholeMonths(e,t),null!==n?{unit:"month",value:n}:(n=_t(e,t),null!==n?{unit:"week",value:n}:(n=Tt(e,t),null!==n?{unit:"day",value:n}:(n=function(e,t){return(t.valueOf()-e.valueOf())/36e5}(e,t),Je(n)?{unit:"hour",value:n}:(n=function(e,t){return(t.valueOf()-e.valueOf())/6e4}(e,t),Je(n)?{unit:"minute",value:n}:(n=function(e,t){return(t.valueOf()-e.valueOf())/1e3}(e,t),Je(n)?{unit:"second",value:n}:{unit:"millisecond",value:t.valueOf()-e.valueOf()}))))))}countDurationsBetween(e,t,n){let r;return n.years&&(r=this.diffWholeYears(e,t),null!==r)?r/(st(n)/365):n.months&&(r=this.diffWholeMonths(e,t),null!==r)?r/function(e){return st(e)/30}(n):n.days&&(r=Tt(e,t),null!==r)?r/st(n):(t.valueOf()-e.valueOf())/ot(n)}startOf(e,t){return"year"===t?this.startOfYear(e):"month"===t?this.startOfMonth(e):"week"===t?this.startOfWeek(e):"day"===t?kt(e):"hour"===t?function(e){return Ht([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours()])}(e):"minute"===t?function(e){return Ht([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes()])}(e):"second"===t?function(e){return Ht([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds()])}(e):null}startOfYear(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e)])}startOfMonth(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e)])}startOfWeek(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e),e.getUTCDate()-(e.getUTCDay()-this.weekDow+7)%7])}computeWeekNumber(e){return this.weekNumberFunc?this.weekNumberFunc(this.toDate(e)):function(e,t,n){let r=e.getUTCFullYear(),i=Mt(e,r,t,n);if(i<1)return Mt(e,r-1,t,n);let s=Mt(e,r+1,t,n);return s>=1?Math.min(i,s):i}(e,this.weekDow,this.weekDoy)}format(e,t,n={}){return t.format({marker:e,timeZoneOffset:null!=n.forcedTzo?n.forcedTzo:this.offsetForMarker(e)},this)}formatRange(e,t,n,r={}){return r.isEndExclusive&&(t=wt(t,-1)),n.formatRange({marker:e,timeZoneOffset:null!=r.forcedStartTzo?r.forcedStartTzo:this.offsetForMarker(e)},{marker:t,timeZoneOffset:null!=r.forcedEndTzo?r.forcedEndTzo:this.offsetForMarker(t)},this,r.defaultSeparator)}formatIso(e,t={}){let n=null;return t.omitTimeZoneOffset||(n=null!=t.forcedTzo?t.forcedTzo:this.offsetForMarker(e)),zt(e,n,t.omitTime)}timestampToMarker(e){return"local"===this.timeZone?Ht(Ot(new Date(e))):"UTC"!==this.timeZone&&this.namedTimeZoneImpl?Ht(this.namedTimeZoneImpl.timestampToArray(e)):new Date(e)}offsetForMarker(e){return"local"===this.timeZone?-Nt(Pt(e)).getTimezoneOffset():"UTC"===this.timeZone?0:this.namedTimeZoneImpl?this.namedTimeZoneImpl.offsetForArray(Pt(e)):null}toDate(e,t){return"local"===this.timeZone?Nt(Pt(e)):"UTC"===this.timeZone?new Date(e.valueOf()):this.namedTimeZoneImpl?new Date(e.valueOf()-1e3*this.namedTimeZoneImpl.offsetForArray(Pt(e))*60):new Date(e.valueOf()-(t||0))}}class Ci{constructor(){this.strictOrder=!1,this.allowReslicing=!1,this.maxCoord=-1,this.maxStackCnt=-1,this.levelCoords=[],this.entriesByLevel=[],this.stackCnts={}}addSegs(e){let t=[];for(let n of e)this.insertEntry(n,t);return t}insertEntry(e,t){let n=this.findInsertion(e);return this.isInsertionValid(n,e)?(this.insertEntryAt(e,n),1):this.handleInvalidInsertion(n,e,t)}isInsertionValid(e,t){return(-1===this.maxCoord||e.levelCoord+t.thickness<=this.maxCoord)&&(-1===this.maxStackCnt||e.stackCnt<this.maxStackCnt)}handleInvalidInsertion(e,t,n){return this.allowReslicing&&e.touchingEntry?this.splitEntry(t,e.touchingEntry,n):(n.push(t),0)}splitEntry(e,t,n){let r=0,i=[],s=e.span,o=t.span;return s.start<o.start&&(r+=this.insertEntry({index:e.index,thickness:e.thickness,span:{start:s.start,end:o.start}},i)),s.end>o.end&&(r+=this.insertEntry({index:e.index,thickness:e.thickness,span:{start:o.end,end:s.end}},i)),r?(n.push({index:e.index,thickness:e.thickness,span:Ti(o,s)},...i),r):(n.push(e),0)}insertEntryAt(e,t){let{entriesByLevel:n,levelCoords:r}=this;-1===t.lateral?(ki(r,t.level,t.levelCoord),ki(n,t.level,[e])):ki(n[t.level],t.lateral,e),this.stackCnts[xi(e)]=t.stackCnt}findInsertion(e){let{levelCoords:t,entriesByLevel:n,strictOrder:r,stackCnts:i}=this,s=t.length,o=0,a=-1,l=-1,c=null,d=0;for(let u=0;u<s;u+=1){let s=t[u];if(!r&&s>=o+e.thickness)break;let h,f=n[u],g=Mi(f,e.span.start,Ri),p=g[0]+g[1];for(;(h=f[p])&&h.span.start<e.span.end;){let e=s+h.thickness;e>o&&(o=e,c=h,a=u,l=p),e===o&&(d=Math.max(d,i[xi(h)]+1)),p+=1}}let u=0;if(c)for(u=a+1;u<s&&t[u]<o;)u+=1;let h=-1;return u<s&&t[u]===o&&(h=Mi(n[u],e.span.end,Ri)[0]),{touchingLevel:a,touchingLateral:l,touchingEntry:c,stackCnt:d,levelCoord:o,level:u,lateral:h}}toRects(){let{entriesByLevel:e,levelCoords:t}=this,n=e.length,r=[];for(let i=0;i<n;i+=1){let n=e[i],s=t[i];for(let e of n)r.push(Object.assign(Object.assign({},e),{levelCoord:s}))}return r}}function Ri(e){return e.span.end}function xi(e){return e.index+":"+e.span.start}function _i(e){let t=[];for(let i of e){let e=[],s={span:i.span,entries:[i]};for(let i of t)Ti(i.span,s.span)?s={entries:i.entries.concat(s.entries),span:(n=i.span,r=s.span,{start:Math.min(n.start,r.start),end:Math.max(n.end,r.end)})}:e.push(i);e.push(s),t=e}var n,r;return t}function Ti(e,t){let n=Math.max(e.start,t.start),r=Math.min(e.end,t.end);return n<r?{start:n,end:r}:null}function ki(e,t,n){e.splice(t,0,n)}function Mi(e,t,n){let r=0,i=e.length;if(!i||t<n(e[r]))return[0,0];if(t>n(e[i-1]))return[i,0];for(;r<i;){let s=Math.floor(r+(i-r)/2),o=n(e[s]);if(t<o)i=s;else{if(!(t>o))return[s,1];r=s+1}}return[r,0]}class Ii{constructor(e){this.component=e.component,this.isHitComboAllowed=e.isHitComboAllowed||null}destroy(){}}function Oi(e){return{[e.component.uid]:e}}const Ni={};class Pi{constructor(e,t){this.emitter=new Sr}destroy(){}setMirrorIsVisible(e){}setMirrorNeedsRevert(e){}setAutoScrollEnabled(e){}}const Hi={},Bi={startTime:tt,duration:tt,create:Boolean,sourceId:String};function ji(e){let{refined:t,extra:n}=pn(e,Bi);return{startTime:t.startTime||null,duration:t.duration||null,create:null==t.create||t.create,sourceId:t.sourceId,leftoverProps:n}}class zi extends Br{constructor(){super(...arguments),this.state={forPrint:!1},this.handleBeforePrint=()=>{this.setState({forPrint:!0})},this.handleAfterPrint=()=>{this.setState({forPrint:!1})}}render(){let{props:e}=this,{options:t}=e,{forPrint:n}=this.state,r=n||"auto"===t.height||"auto"===t.contentHeight,i=r||null==t.height?"":t.height,s=["fc",n?"fc-media-print":"fc-media-screen","fc-direction-"+t.direction,e.theme.getClass("root")];return Jn()||s.push("fc-liquid-hack"),e.children(s,i,r,n)}componentDidMount(){let{emitter:e}=this.props;e.on("_beforeprint",this.handleBeforePrint),e.on("_afterprint",this.handleAfterPrint)}componentWillUnmount(){let{emitter:e}=this.props;e.off("_beforeprint",this.handleBeforePrint),e.off("_afterprint",this.handleAfterPrint)}}function Ui(e,t){return on(!e||t>10?{weekday:"short"}:t>1?{weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}:{weekday:"long"})}const Li="fc-col-header-cell";function Wi(e){return e.text}class Fi extends Br{constructor(){super(...arguments),this.id=Be(),this.currentDomNodes=[],this.queuedDomNodes=[],this.handleEl=e=>{this.props.elRef&&jr(this.props.elRef,e)}}render(){const{props:e,context:t}=this,{options:n}=t,{generator:r,renderProps:s}=e,o=Gi(e);let a,l=[];if(Vi(e.generatorName,n))n.customRenderingReplacesEl&&delete o.elRef;else{const e="function"==typeof r?r(s,f):r;"string"==typeof e||i(e)||Array.isArray(e)?a=e:"object"==typeof e&&("html"in e?o.dangerouslySetInnerHTML={__html:e.html}:"domNodes"in e&&(l=Array.prototype.slice.call(e.domNodes)))}return this.queuedDomNodes=l,f(e.elTag,o,a)}componentDidMount(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentDidUpdate(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentWillUnmount(){this.triggerCustomRendering(!1)}triggerCustomRendering(e){const{props:t,context:n}=this,{handleCustomRendering:r,customRenderingMetaMap:i}=n.options;if(r){const n=null==i?void 0:i[t.generatorName];n&&r(Object.assign({id:this.id,isActive:e,containerEl:this.base,reportNewContainerEl:this.handleEl,generatorMeta:n},t))}}applyQueueudDomNodes(){const{queuedDomNodes:e,currentDomNodes:t}=this,n=this.base;if(!Ft(e,t)){t.forEach(ye);for(let t of e)n.appendChild(t);this.currentDomNodes=e}}}function Vi(e,t){var n;return Boolean(t.handleCustomRendering&&e&&(null===(n=t.customRenderingMetaMap)||void 0===n?void 0:n[e]))}function Gi(e,t){const n=Object.assign(Object.assign({},e.elAttrs),{ref:e.elRef});return(e.elClasses||t)&&(n.className=(e.elClasses||[]).concat(t||[]).concat(n.className||[]).filter(Boolean).join(" ")),e.elStyle&&(n.style=e.elStyle),n}Fi.addPropsEquality({elClasses:Ft,elStyle:pt,elAttrs:function(e,t){const n=vt(e,t);for(let e of n)if(!mt.test(e))return!1;return!0},renderProps:pt});const Qi=Ir(0);class qi extends m{constructor(){super(...arguments),this.InnerContent=Yi.bind(void 0,this)}render(){const{props:e}=this,t=function(e,t){const n="function"==typeof e?e(t):e||[];return"string"==typeof n?[n]:n}(e.classNameGenerator,e.renderProps);if(e.children){const n=Gi(e,t),r=e.children(this.InnerContent,e.renderProps,n);return e.elTag?f(e.elTag,n,r):r}return f(Fi,Object.assign(Object.assign({},e),{elTag:e.elTag||"div",elClasses:(e.elClasses||[]).concat(t),renderId:this.context}))}componentDidMount(){var e,t;null===(t=(e=this.props).didMount)||void 0===t||t.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.base}))}componentWillUnmount(){var e,t;null===(t=(e=this.props).willUnmount)||void 0===t||t.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.base}))}}function Yi(e,t){const n=e.props;return f(Fi,Object.assign({renderProps:n.renderProps,generatorName:n.generatorName,generator:n.generator,renderId:e.context},t))}qi.contextType=Qi;class Zi extends Br{render(){let{dateEnv:e,options:t,theme:n,viewApi:r}=this.context,{props:i}=this,{date:s,dateProfile:o}=i,a=lr(s,i.todayRange,null,o),l=[Li].concat(cr(a,n)),c=e.format(s,i.dayHeaderFormat),d=!a.isDisabled&&i.colCnt>1?hr(this.context,s):{},u=Object.assign(Object.assign(Object.assign({date:e.toDate(s),view:r},i.extraRenderProps),{text:c}),a);return f(qi,{elTag:"th",elClasses:l,elAttrs:Object.assign({role:"columnheader",colSpan:i.colSpan,"data-date":a.isDisabled?void 0:Ut(s)},i.extraDataAttrs),renderProps:u,generatorName:"dayHeaderContent",generator:t.dayHeaderContent||Wi,classNameGenerator:t.dayHeaderClassNames,didMount:t.dayHeaderDidMount,willUnmount:t.dayHeaderWillUnmount},e=>f("div",{className:"fc-scrollgrid-sync-inner"},!a.isDisabled&&f(e,{elTag:"a",elAttrs:d,elClasses:["fc-col-header-cell-cushion",i.isSticky&&"fc-sticky"]})))}}const Xi=on({weekday:"long"});class Ji extends Br{render(){let{props:e}=this,{dateEnv:t,theme:n,viewApi:r,options:i}=this.context,s=St(new Date(2592e5),e.dow),o={dow:e.dow,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},a=t.format(s,e.dayHeaderFormat),l=Object.assign(Object.assign(Object.assign(Object.assign({date:s},o),{view:r}),e.extraRenderProps),{text:a});return f(qi,{elTag:"th",elClasses:[Li,...cr(o,n),...e.extraClassNames||[]],elAttrs:Object.assign({role:"columnheader",colSpan:e.colSpan},e.extraDataAttrs),renderProps:l,generatorName:"dayHeaderContent",generator:i.dayHeaderContent||Wi,classNameGenerator:i.dayHeaderClassNames,didMount:i.dayHeaderDidMount,willUnmount:i.dayHeaderWillUnmount},n=>f("div",{className:"fc-scrollgrid-sync-inner"},f(n,{elTag:"a",elClasses:["fc-col-header-cell-cushion",e.isSticky&&"fc-sticky"],elAttrs:{"aria-label":t.format(s,Xi)}})))}}class $i extends m{constructor(e,t){super(e,t),this.initialNowDate=Ur(t.options.now,t.dateEnv),this.initialNowQueriedMs=(new Date).valueOf(),this.state=this.computeTiming().currentState}render(){let{props:e,state:t}=this;return e.children(t.nowDate,t.todayRange)}componentDidMount(){this.setTimeout()}componentDidUpdate(e){e.unit!==this.props.unit&&(this.clearTimeout(),this.setTimeout())}componentWillUnmount(){this.clearTimeout()}computeTiming(){let{props:e,context:t}=this,n=wt(this.initialNowDate,(new Date).valueOf()-this.initialNowQueriedMs),r=t.dateEnv.startOf(n,e.unit),i=t.dateEnv.add(r,tt(1,e.unit)),s=i.valueOf()-n.valueOf();return s=Math.min(864e5,s),{currentState:{nowDate:r,todayRange:Ki(r)},nextState:{nowDate:i,todayRange:Ki(i)},waitMs:s}}setTimeout(){let{nextState:e,waitMs:t}=this.computeTiming();this.timeoutId=setTimeout(()=>{this.setState(e,()=>{this.setTimeout()})},t)}clearTimeout(){this.timeoutId&&clearTimeout(this.timeoutId)}}function Ki(e){let t=kt(e);return{start:t,end:St(t,1)}}$i.contextType=Nr;class es extends Br{constructor(){super(...arguments),this.createDayHeaderFormatter=Vt(ts)}render(){let{context:e}=this,{dates:t,dateProfile:n,datesRepDistinctDays:r,renderIntro:i}=this.props,s=this.createDayHeaderFormatter(e.options.dayHeaderFormat,r,t.length);return f($i,{unit:"day"},(e,o)=>f("tr",{role:"row"},i&&i("day"),t.map(e=>r?f(Zi,{key:e.toISOString(),date:e,dateProfile:n,todayRange:o,colCnt:t.length,dayHeaderFormat:s}):f(Ji,{key:e.getUTCDay(),dow:e.getUTCDay(),dayHeaderFormat:s}))))}}function ts(e,t,n){return e||Ui(t,n)}class ns{constructor(e,t){let n=e.start,{end:r}=e,i=[],s=[],o=-1;for(;n<r;)t.isHiddenDay(n)?i.push(o+.5):(o+=1,i.push(o),s.push(n)),n=St(n,1);this.dates=s,this.indices=i,this.cnt=s.length}sliceRange(e){let t=this.getDateDayIndex(e.start),n=this.getDateDayIndex(St(e.end,-1)),r=Math.max(0,t),i=Math.min(this.cnt-1,n);return r=Math.ceil(r),i=Math.floor(i),r<=i?{firstIndex:r,lastIndex:i,isStart:t===r,isEnd:n===i}:null}getDateDayIndex(e){let{indices:t}=this,n=Math.floor(Rt(this.dates[0],e));return n<0?t[0]-1:n>=t.length?t[t.length-1]+1:t[n]}}class rs{constructor(e,t){let n,r,i,{dates:s}=e;if(t){for(r=s[0].getUTCDay(),n=1;n<s.length&&s[n].getUTCDay()!==r;n+=1);i=Math.ceil(s.length/n)}else i=1,n=s.length;this.rowCnt=i,this.colCnt=n,this.daySeries=e,this.cells=this.buildCells(),this.headerDates=this.buildHeaderDates()}buildCells(){let e=[];for(let t=0;t<this.rowCnt;t+=1){let n=[];for(let e=0;e<this.colCnt;e+=1)n.push(this.buildCell(t,e));e.push(n)}return e}buildCell(e,t){let n=this.daySeries.dates[e*this.colCnt+t];return{key:n.toISOString(),date:n}}buildHeaderDates(){let e=[];for(let t=0;t<this.colCnt;t+=1)e.push(this.cells[0][t].date);return e}sliceRange(e){let{colCnt:t}=this,n=this.daySeries.sliceRange(e),r=[];if(n){let{firstIndex:e,lastIndex:i}=n,s=e;for(;s<=i;){let o=Math.floor(s/t),a=Math.min((o+1)*t,i+1);r.push({row:o,firstCol:s%t,lastCol:(a-1)%t,isStart:n.isStart&&s===e,isEnd:n.isEnd&&a-1===i}),s=a}}return r}}class is{constructor(){this.sliceBusinessHours=Vt(this._sliceBusinessHours),this.sliceDateSelection=Vt(this._sliceDateSpan),this.sliceEventStore=Vt(this._sliceEventStore),this.sliceEventDrag=Vt(this._sliceInteraction),this.sliceEventResize=Vt(this._sliceInteraction),this.forceDayIfListItem=!1}sliceProps(e,t,n,r,...i){let{eventUiBases:s}=e,o=this.sliceEventStore(e.eventStore,s,t,n,...i);return{dateSelectionSegs:this.sliceDateSelection(e.dateSelection,s,r,...i),businessHourSegs:this.sliceBusinessHours(e.businessHours,t,n,r,...i),fgEventSegs:o.fg,bgEventSegs:o.bg,eventDrag:this.sliceEventDrag(e.eventDrag,s,t,n,...i),eventResize:this.sliceEventResize(e.eventResize,s,t,n,...i),eventSelection:e.eventSelection}}sliceNowDate(e,t,...n){return this._sliceDateSpan({range:{start:e,end:wt(e,1)},allDay:!1},{},t,...n)}_sliceBusinessHours(e,t,n,r,...i){return e?this._sliceEventStore(bn(e,ss(t,Boolean(n)),r),{},t,n,...i).bg:[]}_sliceEventStore(e,t,n,r,...i){if(e){let s=$r(e,t,ss(n,Boolean(r)),r);return{bg:this.sliceEventRanges(s.bg,i),fg:this.sliceEventRanges(s.fg,i)}}return{bg:[],fg:[]}}_sliceInteraction(e,t,n,r,...i){if(!e)return null;let s=$r(e.mutatedEvents,t,ss(n,Boolean(r)),r);return{segs:this.sliceEventRanges(s.fg,i),affectedInstances:e.affectedEvents.instances,isEvent:e.isEvent}}_sliceDateSpan(e,t,n,...r){if(!e)return[];let i=function(e,t,n){let r=Hn({editable:!1},n),i=jn(r.refined,r.extra,"",e.allDay,!0,n);return{def:i,ui:ri(i,t),instance:vn(i.defId,e.range),range:e.range,isStart:!0,isEnd:!0}}(e,t,n),s=this.sliceRange(e.range,...r);for(let e of s)e.eventRange=i;return s}sliceEventRanges(e,t){let n=[];for(let r of e)n.push(...this.sliceEventRange(r,t));return n}sliceEventRange(e,t){let n=e.range;this.forceDayIfListItem&&"list-item"===e.ui.display&&(n={start:n.start,end:St(n.start,1)});let r=this.sliceRange(n,...t);for(let t of r)t.eventRange=e,t.isStart=e.isStart&&t.isStart,t.isEnd=e.isEnd&&t.isEnd;return r}}function ss(e,t){let n=e.activeRange;return t?n:{start:wt(n.start,e.slotMinTime.milliseconds),end:wt(n.end,e.slotMaxTime.milliseconds-864e5)}}function os(e,t,n,r,i){switch(t.type){case"RECEIVE_EVENTS":return function(e,t,n,r,i,s){if(t&&n===t.latestFetchId){let n=En(function(e,t,n){let r=n.options.eventDataTransform,i=t?t.eventDataTransform:null;i&&(e=as(e,i));r&&(e=as(e,r));return e}(i,t,s),t,s);return r&&(n=bn(n,r,s)),wn(ls(e,t.sourceId),n)}return e}(e,n[t.sourceId],t.fetchId,t.fetchRange,t.rawEvents,i);case"ADD_EVENTS":return function(e,t,n,r){n&&(t=bn(t,n,r));return wn(e,t)}(e,t.eventStore,r?r.activeRange:null,i);case"RESET_EVENTS":return t.eventStore;case"MERGE_EVENTS":return wn(e,t.eventStore);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return r?bn(e,r.activeRange,i):e;case"REMOVE_EVENTS":return function(e,t){let{defs:n,instances:r}=e,i={},s={};for(let e in n)t.defs[e]||(i[e]=n[e]);for(let e in r)!t.instances[e]&&i[r[e].defId]&&(s[e]=r[e]);return{defs:i,instances:s}}(e,t.eventStore);case"REMOVE_EVENT_SOURCE":return ls(e,t.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return Cn(e,e=>!e.sourceId);case"REMOVE_ALL_EVENTS":return{defs:{},instances:{}};default:return e}}function as(e,t){let n;if(t){n=[];for(let r of e){let e=t(r);e?n.push(e):null==e&&n.push(r)}}else n=e;return n}function ls(e,t){return Cn(e,e=>e.sourceId!==t)}function cs(e,t,n){let{instances:r}=e.mutatedEvents;for(let e in r)if(!or(t.validRange,r[e].range))return!1;return us({eventDrag:e},n)}function ds(e,t,n){return!!or(t.validRange,e.range)&&us({dateSelection:e},n)}function us(e,t){let n=t.getCurrentData(),r=Object.assign({businessHours:n.businessHours,dateSelection:"",eventStore:n.eventStore,eventUiBases:n.eventUiBases,eventSelection:"",eventDrag:null,eventResize:null},e);return(t.pluginHooks.isPropsValid||hs)(r,t)}function hs(e,t,n={},r){return!(e.eventDrag&&!function(e,t,n,r){let i=t.getCurrentData(),s=e.eventDrag,o=s.mutatedEvents,a=o.defs,l=o.instances,c=ni(a,s.isEvent?e.eventUiBases:{"":i.selectionConfig});r&&(c=ht(c,r));let d=(g=e.eventStore,p=s.affectedEvents.instances,{defs:g.defs,instances:ut(g.instances,e=>!p[e.instanceId])}),u=d.defs,h=d.instances,f=ni(u,e.eventUiBases);var g,p;for(let r in l){let o=l[r],g=o.range,p=c[o.defId],m=a[o.defId];if(!fs(p.constraints,g,d,e.businessHours,t))return!1;let{eventOverlap:v}=t.options,b="function"==typeof v?v:null;for(let e in h){let n=h[e];if(sr(g,n.range)){if(!1===f[n.defId].overlap&&s.isEvent)return!1;if(!1===p.overlap)return!1;if(b&&!b(new Zr(t,u[n.defId],n),new Zr(t,m,o)))return!1}}let y=i.eventStore;for(let e of p.allows){let i,s=Object.assign(Object.assign({},n),{range:o.range,allDay:m.allDay}),a=y.defs[m.defId],l=y.instances[r];if(i=a?new Zr(t,a,l):new Zr(t,m),!e(Fr(s,t),i))return!1}}return!0}(e,t,n,r))&&!(e.dateSelection&&!function(e,t,n,r){let i=e.eventStore,s=i.defs,o=i.instances,a=e.dateSelection,l=a.range,{selectionConfig:c}=t.getCurrentData();r&&(c=r(c));if(!fs(c.constraints,l,i,e.businessHours,t))return!1;let{selectOverlap:d}=t.options,u="function"==typeof d?d:null;for(let e in o){let n=o[e];if(sr(l,n.range)){if(!1===c.overlap)return!1;if(u&&!u(new Zr(t,s[n.defId],n),null))return!1}}for(let e of c.allows){let r=Object.assign(Object.assign({},n),a);if(!e(Fr(r,t),null))return!1}return!0}(e,t,n,r))}function fs(e,t,n,r,i){for(let s of e)if(!ms(gs(s,t,n,r,i),t))return!1;return!0}function gs(e,t,n,r,i){return"businessHours"===e?ps(bn(r,t,i)):"string"==typeof e?ps(Cn(n,t=>t.groupId===e)):"object"==typeof e&&e?ps(bn(e,t,i)):[]}function ps(e){let{instances:t}=e,n=[];for(let e in t)n.push(t[e].range);return n}function ms(e,t){for(let n of e)if(or(n,t))return!0;return!1}class vs extends Error{constructor(e,t){super(e),this.response=t}}function bs(e,t,n){const r={method:e=e.toUpperCase()};return"GET"===e?t+=(-1===t.indexOf("?")?"?":"&")+new URLSearchParams(n):(r.body=new URLSearchParams(n),r.headers={"Content-Type":"application/x-www-form-urlencoded"}),fetch(t,r).then(e=>{if(e.ok)return e.json().then(t=>[t,e],()=>{throw new vs("Failure parsing JSON",e)});throw new vs("Request failed",e)})}class ys{constructor(e){this.drainedOption=e,this.isRunning=!1,this.isDirty=!1,this.pauseDepths={},this.timeoutId=0}request(e){this.isDirty=!0,this.isPaused()||(this.clearTimeout(),null==e?this.tryDrain():this.timeoutId=setTimeout(this.tryDrain.bind(this),e))}pause(e=""){let{pauseDepths:t}=this;t[e]=(t[e]||0)+1,this.clearTimeout()}resume(e="",t){let{pauseDepths:n}=this;if(e in n){if(t)delete n[e];else{n[e]-=1,n[e]<=0&&delete n[e]}this.tryDrain()}}isPaused(){return Object.keys(this.pauseDepths).length}tryDrain(){if(!this.isRunning&&!this.isPaused()){for(this.isRunning=!0;this.isDirty;)this.isDirty=!1,this.drained();this.isRunning=!1}}clear(){this.clearTimeout(),this.isDirty=!1,this.pauseDepths={}}clearTimeout(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=0)}drained(){this.drainedOption&&this.drainedOption()}}const Es=/^(visible|hidden)$/;class As extends Br{constructor(){super(...arguments),this.handleEl=e=>{this.el=e,jr(this.props.elRef,e)}}render(){let{props:e}=this,{liquid:t,liquidIsAbsolute:n}=e,r=t&&n,i=["fc-scroller"];return t&&(n?i.push("fc-scroller-liquid-absolute"):i.push("fc-scroller-liquid")),f("div",{ref:this.handleEl,className:i.join(" "),style:{overflowX:e.overflowX,overflowY:e.overflowY,left:r&&-(e.overcomeLeft||0)||"",right:r&&-(e.overcomeRight||0)||"",bottom:r&&-(e.overcomeBottom||0)||"",marginLeft:!r&&-(e.overcomeLeft||0)||"",marginRight:!r&&-(e.overcomeRight||0)||"",marginBottom:!r&&-(e.overcomeBottom||0)||"",maxHeight:e.maxHeight||""}},e.children)}needsXScrolling(){if(Es.test(this.props.overflowX))return!1;let{el:e}=this,t=this.el.getBoundingClientRect().width-this.getYScrollbarWidth(),{children:n}=e;for(let e=0;e<n.length;e+=1){if(n[e].getBoundingClientRect().width>t)return!0}return!1}needsYScrolling(){if(Es.test(this.props.overflowY))return!1;let{el:e}=this,t=this.el.getBoundingClientRect().height-this.getXScrollbarWidth(),{children:n}=e;for(let e=0;e<n.length;e+=1){if(n[e].getBoundingClientRect().height>t)return!0}return!1}getXScrollbarWidth(){return Es.test(this.props.overflowX)?0:this.el.offsetHeight-this.el.clientHeight}getYScrollbarWidth(){return Es.test(this.props.overflowY)?0:this.el.offsetWidth-this.el.clientWidth}}class Ds{constructor(e){this.masterCallback=e,this.currentMap={},this.depths={},this.callbackMap={},this.handleValue=(e,t)=>{let{depths:n,currentMap:r}=this,i=!1,s=!1;null!==e?(i=t in r,r[t]=e,n[t]=(n[t]||0)+1,s=!0):(n[t]-=1,n[t]||(delete r[t],delete this.callbackMap[t],i=!0)),this.masterCallback&&(i&&this.masterCallback(null,String(t)),s&&this.masterCallback(e,String(t)))}}createRef(e){let t=this.callbackMap[e];return t||(t=this.callbackMap[e]=t=>{this.handleValue(t,String(e))}),t}collect(e,t,n){return Et(this.currentMap,e,t,n)}getAll(){return gt(this.currentMap)}}function Ss(e){let t=De(e,".fc-scrollgrid-shrink"),n=0;for(let e of t)n=Math.max(n,$e(e));return Math.ceil(n)}function ws(e,t){return e.liquid&&t.liquid}function Cs(e,t){return null!=t.maxHeight||ws(e,t)}function Rs(e,t,n,r){let{expandRows:i}=n;return"function"==typeof t.content?t.content(n):f("table",{role:"presentation",className:[t.tableClassName,e.syncRowHeights?"fc-scrollgrid-sync-table":""].join(" "),style:{minWidth:n.tableMinWidth,width:n.clientWidth,height:i?n.clientHeight:""}},n.tableColGroupNode,f(r?"thead":"tbody",{role:"presentation"},"function"==typeof t.rowContent?t.rowContent(n):t.rowContent))}function xs(e,t){return Ft(e,t,pt)}function _s(e,t){let n=[];for(let r of e){let e=r.span||1;for(let i=0;i<e;i+=1)n.push(f("col",{style:{width:"shrink"===r.width?Ts(t):r.width||"",minWidth:r.minWidth||""}}))}return f("colgroup",{},...n)}function Ts(e){return null==e?4:e}function ks(e){for(let t of e)if("shrink"===t.width)return!0;return!1}function Ms(e,t){let n=["fc-scrollgrid",t.theme.getClass("table")];return e&&n.push("fc-scrollgrid-liquid"),n}function Is(e,t){let n=["fc-scrollgrid-section","fc-scrollgrid-section-"+e.type,e.className];return t&&e.liquid&&null==e.maxHeight&&n.push("fc-scrollgrid-section-liquid"),e.isSticky&&n.push("fc-scrollgrid-section-sticky"),n}function Os(e){return f("div",{className:"fc-scrollgrid-sticky-shim",style:{width:e.clientWidth,minWidth:e.tableMinWidth}})}function Ns(e){let{stickyHeaderDates:t}=e;return null!=t&&"auto"!==t||(t="auto"===e.height||"auto"===e.viewHeight),t}function Ps(e){let{stickyFooterScrollbar:t}=e;return null!=t&&"auto"!==t||(t="auto"===e.height||"auto"===e.viewHeight),t}class Hs extends Br{constructor(){super(...arguments),this.processCols=Vt(e=>e,xs),this.renderMicroColGroup=Vt(_s),this.scrollerRefs=new Ds,this.scrollerElRefs=new Ds(this._handleScrollerEl.bind(this)),this.state={shrinkWidth:null,forceYScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{}},this.handleSizing=()=>{this.safeSetState(Object.assign({shrinkWidth:this.computeShrinkWidth()},this.computeScrollerDims()))}}render(){let{props:e,state:t,context:n}=this,r=e.sections||[],i=this.processCols(e.cols),s=this.renderMicroColGroup(i,t.shrinkWidth),o=Ms(e.liquid,n);e.collapsibleWidth&&o.push("fc-scrollgrid-collapsible");let a,l=r.length,c=0,d=[],u=[],h=[];for(;c<l&&"header"===(a=r[c]).type;)d.push(this.renderSection(a,s,!0)),c+=1;for(;c<l&&"body"===(a=r[c]).type;)u.push(this.renderSection(a,s,!1)),c+=1;for(;c<l&&"footer"===(a=r[c]).type;)h.push(this.renderSection(a,s,!0)),c+=1;let g=!Jn();const p={role:"rowgroup"};return f("table",{role:"grid",className:o.join(" "),style:{height:e.height}},Boolean(!g&&d.length)&&f("thead",p,...d),Boolean(!g&&u.length)&&f("tbody",p,...u),Boolean(!g&&h.length)&&f("tfoot",p,...h),g&&f("tbody",p,...d,...u,...h))}renderSection(e,t,n){return"outerContent"in e?f(p,{key:e.key},e.outerContent):f("tr",{key:e.key,role:"presentation",className:Is(e,this.props.liquid).join(" ")},this.renderChunkTd(e,t,e.chunk,n))}renderChunkTd(e,t,n,r){if("outerContent"in n)return n.outerContent;let{props:i}=this,{forceYScrollbars:s,scrollerClientWidths:o,scrollerClientHeights:a}=this.state,l=Cs(i,e),c=ws(i,e),d=i.liquid?s?"scroll":l?"auto":"hidden":"visible",u=e.key,h=Rs(e,n,{tableColGroupNode:t,tableMinWidth:"",clientWidth:i.collapsibleWidth||void 0===o[u]?null:o[u],clientHeight:void 0!==a[u]?a[u]:null,expandRows:e.expandRows,syncRowHeights:!1,rowSyncHeights:[],reportRowHeightChange:()=>{}},r);return f(r?"th":"td",{ref:n.elRef,role:"presentation"},f("div",{className:"fc-scroller-harness"+(c?" fc-scroller-harness-liquid":"")},f(As,{ref:this.scrollerRefs.createRef(u),elRef:this.scrollerElRefs.createRef(u),overflowY:d,overflowX:i.liquid?"hidden":"visible",maxHeight:e.maxHeight,liquid:c,liquidIsAbsolute:!0},h)))}_handleScrollerEl(e,t){let n=function(e,t){for(let n of e)if(n.key===t)return n;return null}(this.props.sections,t);n&&jr(n.chunk.scrollerElRef,e)}componentDidMount(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(){this.handleSizing()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}computeShrinkWidth(){return ks(this.props.cols)?Ss(this.scrollerElRefs.getAll()):0}computeScrollerDims(){let e=mr(),{scrollerRefs:t,scrollerElRefs:n}=this,r=!1,i={},s={};for(let e in t.currentMap){let n=t.currentMap[e];if(n&&n.needsYScrolling()){r=!0;break}}for(let t of this.props.sections){let o=t.key,a=n.currentMap[o];if(a){let t=a.parentNode;i[o]=Math.floor(t.getBoundingClientRect().width-(r?e.y:0)),s[o]=Math.floor(t.getBoundingClientRect().height)}}return{forceYScrollbars:r,scrollerClientWidths:i,scrollerClientHeights:s}}}Hs.addStateEquality({scrollerClientWidths:pt,scrollerClientHeights:pt});class Bs extends Br{constructor(){super(...arguments),this.handleEl=e=>{this.el=e,e&&ei(e,this.props.seg)}}render(){const{props:e,context:t}=this,{options:n}=t,{seg:r}=e,{eventRange:i}=r,{ui:s}=i,o={event:new Zr(t,i.def,i.instance),view:t.viewApi,timeText:e.timeText,textColor:s.textColor,backgroundColor:s.backgroundColor,borderColor:s.borderColor,isDraggable:!e.disableDragging&&oi(r,t),isStartResizable:!e.disableResizing&&ai(r,t),isEndResizable:!e.disableResizing&&li(r),isMirror:Boolean(e.isDragging||e.isResizing||e.isDateSelecting),isStart:Boolean(r.isStart),isEnd:Boolean(r.isEnd),isPast:Boolean(e.isPast),isFuture:Boolean(e.isFuture),isToday:Boolean(e.isToday),isSelected:Boolean(e.isSelected),isDragging:Boolean(e.isDragging),isResizing:Boolean(e.isResizing)};return f(qi,Object.assign({},e,{elRef:this.handleEl,elClasses:[...ui(o),...r.eventRange.ui.classNames,...e.elClasses||[]],renderProps:o,generatorName:"eventContent",generator:n.eventContent||e.defaultGenerator,classNameGenerator:n.eventClassNames,didMount:n.eventDidMount,willUnmount:n.eventWillUnmount}))}componentDidUpdate(e){this.el&&this.props.seg!==e.seg&&ei(this.el,this.props.seg)}}class js extends Br{render(){let{props:e,context:t}=this,{options:n}=t,{seg:r}=e,{ui:i}=r.eventRange,s=ci(r,n.eventTimeFormat||e.defaultTimeFormat,t,e.defaultDisplayEventTime,e.defaultDisplayEventEnd);return f(Bs,Object.assign({},e,{elTag:"a",elStyle:{borderColor:i.borderColor,backgroundColor:i.backgroundColor},elAttrs:fi(r,t),defaultGenerator:zs,timeText:s}),(e,t)=>f(p,null,f(e,{elTag:"div",elClasses:["fc-event-main"],elStyle:{color:t.textColor}}),Boolean(t.isStartResizable)&&f("div",{className:"fc-event-resizer fc-event-resizer-start"}),Boolean(t.isEndResizable)&&f("div",{className:"fc-event-resizer fc-event-resizer-end"})))}}function zs(e){return f("div",{className:"fc-event-main-frame"},e.timeText&&f("div",{className:"fc-event-time"},e.timeText),f("div",{className:"fc-event-title-container"},f("div",{className:"fc-event-title fc-sticky"},e.event.title||f(p,null," "))))}const Us=e=>f(Nr.Consumer,null,t=>{let{options:n}=t,r={isAxis:e.isAxis,date:t.dateEnv.toDate(e.date),view:t.viewApi};return f(qi,Object.assign({},e,{elTag:e.elTag||"div",renderProps:r,generatorName:"nowIndicatorContent",generator:n.nowIndicatorContent,classNameGenerator:n.nowIndicatorClassNames,didMount:n.nowIndicatorDidMount,willUnmount:n.nowIndicatorWillUnmount}))}),Ls=on({day:"numeric"});class Ws extends Br{constructor(){super(...arguments),this.refineRenderProps=Gt(Vs)}render(){let{props:e,context:t}=this,{options:n}=t,r=this.refineRenderProps({date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,showDayNumber:e.showDayNumber,extraRenderProps:e.extraRenderProps,viewApi:t.viewApi,dateEnv:t.dateEnv});return f(qi,Object.assign({},e,{elClasses:[...cr(r,t.theme),...e.elClasses||[]],elAttrs:Object.assign(Object.assign({},e.elAttrs),r.isDisabled?{}:{"data-date":Ut(e.date)}),renderProps:r,generatorName:"dayCellContent",generator:n.dayCellContent||e.defaultGenerator,classNameGenerator:r.isDisabled?void 0:n.dayCellClassNames,didMount:n.dayCellDidMount,willUnmount:n.dayCellWillUnmount}))}}function Fs(e){return Boolean(e.dayCellContent||Vi("dayCellContent",e))}function Vs(e){let{date:t,dateEnv:n}=e,r=lr(t,e.todayRange,null,e.dateProfile);return Object.assign(Object.assign(Object.assign({date:n.toDate(t),view:e.viewApi},r),{dayNumberText:e.showDayNumber?n.format(t,Ls):""}),e.extraRenderProps)}class Gs extends Br{render(){let{props:e}=this,{seg:t}=e;return f(Bs,{elTag:"div",elClasses:["fc-bg-event"],elStyle:{backgroundColor:t.eventRange.ui.backgroundColor},defaultGenerator:Qs,seg:t,timeText:"",isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,isPast:e.isPast,isFuture:e.isFuture,isToday:e.isToday,disableDragging:!0,disableResizing:!0})}}function Qs(e){let{title:t}=e.event;return t&&f("div",{className:"fc-event-title"},e.event.title)}function qs(e){return f("div",{className:"fc-"+e})}const Ys=e=>f(Nr.Consumer,null,t=>{let{dateEnv:n,options:r}=t,{date:i}=e,s=r.weekNumberFormat||e.defaultFormat,o={num:n.computeWeekNumber(i),text:n.format(i,s),date:i};return f(qi,Object.assign({},e,{renderProps:o,generatorName:"weekNumberContent",generator:r.weekNumberContent||Zs,classNameGenerator:r.weekNumberClassNames,didMount:r.weekNumberDidMount,willUnmount:r.weekNumberWillUnmount}))});function Zs(e){return e.text}class Xs extends Br{constructor(){super(...arguments),this.state={titleId:Te()},this.handleRootEl=e=>{this.rootEl=e,this.props.elRef&&jr(this.props.elRef,e)},this.handleDocumentMouseDown=e=>{const t=Re(e);this.rootEl.contains(t)||this.handleCloseClick()},this.handleDocumentKeyDown=e=>{"Escape"===e.key&&this.handleCloseClick()},this.handleCloseClick=()=>{let{onClose:e}=this.props;e&&e()}}render(){let{theme:e,options:t}=this.context,{props:n,state:r}=this,i=["fc-popover",e.getClass("popover")].concat(n.extraClassNames||[]);return function(e,t){var n=f(ae,{__v:e,i:t});return n.containerInfo=t,n}(f("div",Object.assign({},n.extraAttrs,{id:n.id,className:i.join(" "),"aria-labelledby":r.titleId,ref:this.handleRootEl}),f("div",{className:"fc-popover-header "+e.getClass("popoverHeader")},f("span",{className:"fc-popover-title",id:r.titleId},n.title),f("span",{className:"fc-popover-close "+e.getIconClass("close"),title:t.closeHint,onClick:this.handleCloseClick})),f("div",{className:"fc-popover-body "+e.getClass("popoverContent")},n.children)),n.parentEl)}componentDidMount(){document.addEventListener("mousedown",this.handleDocumentMouseDown),document.addEventListener("keydown",this.handleDocumentKeyDown),this.updateSize()}componentWillUnmount(){document.removeEventListener("mousedown",this.handleDocumentMouseDown),document.removeEventListener("keydown",this.handleDocumentKeyDown)}updateSize(){let{isRtl:e}=this.context,{alignmentEl:t,alignGridTop:n}=this.props,{rootEl:r}=this,i=function(e){let t=Ar(e),n=e.getBoundingClientRect();for(let e of t){let t=Qn(n,e.getBoundingClientRect());if(!t)return null;n=t}return n}(t);if(i){let s=r.getBoundingClientRect(),o=n?Ee(t,".fc-scrollgrid").getBoundingClientRect().top:i.top,a=e?i.right-s.width:i.left;o=Math.max(o,10),a=Math.min(a,document.documentElement.clientWidth-10-s.width),a=Math.max(a,10);let l=r.offsetParent.getBoundingClientRect();we(r,{top:o-l.top,left:a-l.left})}}}class Js extends zr{constructor(){super(...arguments),this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,useEventCenter:!1}):this.context.unregisterInteractiveComponent(this)}}render(){let{options:e,dateEnv:t}=this.context,{props:n}=this,{startDate:r,todayRange:i,dateProfile:s}=n,o=t.format(r,e.dayPopoverFormat);return f(Ws,{elRef:this.handleRootEl,date:r,dateProfile:s,todayRange:i},(t,r,i)=>f(Xs,{elRef:i.ref,id:n.id,title:o,extraClassNames:["fc-more-popover"].concat(i.className||[]),extraAttrs:i,parentEl:n.parentEl,alignmentEl:n.alignmentEl,alignGridTop:n.alignGridTop,onClose:n.onClose},Fs(e)&&f(t,{elTag:"div",elClasses:["fc-more-popover-misc"]}),n.children))}queryHit(e,t,n,r){let{rootEl:i,props:s}=this;return e>=0&&e<n&&t>=0&&t<r?{dateProfile:s.dateProfile,dateSpan:Object.assign({allDay:!0,range:{start:s.startDate,end:s.endDate}},s.extraDateSpan),dayEl:i,rect:{left:0,top:0,right:n,bottom:r},layer:1}:null}}class $s extends Br{constructor(){super(...arguments),this.state={isPopoverOpen:!1,popoverId:Te()},this.handleLinkEl=e=>{this.linkEl=e,this.props.elRef&&jr(this.props.elRef,e)},this.handleClick=e=>{let{props:t,context:n}=this,{moreLinkClick:r}=n.options,i=eo(t).start;function s(e){let{def:t,instance:r,range:i}=e.eventRange;return{event:new Zr(n,t,r),start:n.dateEnv.toDate(i.start),end:n.dateEnv.toDate(i.end),isStart:e.isStart,isEnd:e.isEnd}}"function"==typeof r&&(r=r({date:i,allDay:Boolean(t.allDayDate),allSegs:t.allSegs.map(s),hiddenSegs:t.hiddenSegs.map(s),jsEvent:e,view:n.viewApi})),r&&"popover"!==r?"string"==typeof r&&n.calendarApi.zoomTo(i,r):this.setState({isPopoverOpen:!0})},this.handlePopoverClose=()=>{this.setState({isPopoverOpen:!1})}}render(){let{props:e,state:t}=this;return f(Nr.Consumer,null,n=>{let{viewApi:r,options:i,calendarApi:s}=n,{moreLinkText:o}=i,{moreCnt:a}=e,l=eo(e),c="function"==typeof o?o.call(s,a):`+${a} ${o}`,d=Ze(i.moreLinkHint,[a],c),u={num:a,shortText:"+"+a,text:c,view:r};return f(p,null,Boolean(e.moreCnt)&&f(qi,{elTag:e.elTag||"a",elRef:this.handleLinkEl,elClasses:[...e.elClasses||[],"fc-more-link"],elStyle:e.elStyle,elAttrs:Object.assign(Object.assign(Object.assign({},e.elAttrs),Ne(this.handleClick)),{title:d,"aria-expanded":t.isPopoverOpen,"aria-controls":t.isPopoverOpen?t.popoverId:""}),renderProps:u,generatorName:"moreLinkContent",generator:i.moreLinkContent||e.defaultGenerator||Ks,classNameGenerator:i.moreLinkClassNames,didMount:i.moreLinkDidMount,willUnmount:i.moreLinkWillUnmount},e.children),t.isPopoverOpen&&f(Js,{id:t.popoverId,startDate:l.start,endDate:l.end,dateProfile:e.dateProfile,todayRange:e.todayRange,extraDateSpan:e.extraDateSpan,parentEl:this.parentEl,alignmentEl:e.alignmentElRef?e.alignmentElRef.current:this.linkEl,alignGridTop:e.alignGridTop,onClose:this.handlePopoverClose},e.popoverContent()))})}componentDidMount(){this.updateParentEl()}componentDidUpdate(){this.updateParentEl()}updateParentEl(){this.linkEl&&(this.parentEl=Ee(this.linkEl,".fc-view-harness"))}}function Ks(e){return e.text}function eo(e){if(e.allDayDate)return{start:e.allDayDate,end:St(e.allDayDate,1)};let{hiddenSegs:t}=e;return{start:to(t),end:(n=t,n.reduce(ro).eventRange.range.end)};var n}function to(e){return e.reduce(no).eventRange.range.start}function no(e,t){return e.eventRange.range.start<t.eventRange.range.start?e:t}function ro(e,t){return e.eventRange.range.end>t.eventRange.range.end?e:t}class io extends Br{render(){let{props:e,context:t}=this,{options:n}=t,r={view:t.viewApi};return f(qi,Object.assign({},e,{elTag:e.elTag||"div",elClasses:[...so(e.viewSpec),...e.elClasses||[]],renderProps:r,classNameGenerator:n.viewClassNames,generatorName:void 0,generator:void 0,didMount:n.viewDidMount,willUnmount:n.viewWillUnmount}),()=>e.children)}}function so(e){return[`fc-${e.type}-view`,"fc-view"]}function oo(e){if(!e||"undefined"==typeof document)return;const t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}const ao={id:String,defaultAllDay:Boolean,url:String,format:String,events:mn,eventDataTransform:mn,success:mn,failure:mn};function lo(e,t,n=co(t)){let r;if("string"==typeof e?r={url:e}:"function"==typeof e||Array.isArray(e)?r={events:e}:"object"==typeof e&&e&&(r=e),r){let{refined:i,extra:s}=pn(r,n),o=function(e,t){let n=t.pluginHooks.eventSourceDefs;for(let t=n.length-1;t>=0;t-=1){let r=n[t].parseMeta(e);if(r)return{sourceDefId:t,meta:r}}return null}(i,t);if(o)return{_raw:e,isFetching:!1,latestFetchId:"",fetchRange:null,defaultAllDay:i.defaultAllDay,eventDataTransform:i.eventDataTransform,success:i.success,failure:i.failure,publicId:i.id||"",sourceId:Be(),sourceDefId:o.sourceDefId,meta:o.meta,ui:Tn(i,t),extendedProps:s}}return null}function co(e){return Object.assign(Object.assign(Object.assign({},xn),ao),e.pluginHooks.eventSourceRefiners)}class uo{getCurrentData(){return this.currentDataManager.getCurrentData()}dispatch(e){this.currentDataManager.dispatch(e)}get view(){return this.getCurrentData().viewApi}batchRendering(e){e()}updateSize(){this.trigger("_resize",!0)}setOption(e,t){this.dispatch({type:"SET_OPTION",optionName:e,rawOptionValue:t})}getOption(e){return this.currentDataManager.currentCalendarOptionsInput[e]}getAvailableLocaleCodes(){return Object.keys(this.getCurrentData().availableRawLocales)}on(e,t){let{currentDataManager:n}=this;n.currentCalendarOptionsRefiners[e]?n.emitter.on(e,t):console.warn(`Unknown listener name '${e}'`)}off(e,t){this.currentDataManager.emitter.off(e,t)}trigger(e,...t){this.currentDataManager.emitter.trigger(e,...t)}changeView(e,t){this.batchRendering(()=>{if(this.unselect(),t)if(t.start&&t.end)this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e}),this.dispatch({type:"SET_OPTION",optionName:"visibleRange",rawOptionValue:t});else{let{dateEnv:n}=this.getCurrentData();this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e,dateMarker:n.createMarker(t)})}else this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e})})}zoomTo(e,t){let n;t=t||"day",n=this.getCurrentData().viewSpecs[t]||this.getUnitViewSpec(t),this.unselect(),n?this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:n.type,dateMarker:e}):this.dispatch({type:"CHANGE_DATE",dateMarker:e})}getUnitViewSpec(e){let t,n,{viewSpecs:r,toolbarConfig:i}=this.getCurrentData(),s=[].concat(i.header?i.header.viewsWithButtons:[],i.footer?i.footer.viewsWithButtons:[]);for(let e in r)s.push(e);for(t=0;t<s.length;t+=1)if(n=r[s[t]],n&&n.singleUnit===e)return n;return null}prev(){this.unselect(),this.dispatch({type:"PREV"})}next(){this.unselect(),this.dispatch({type:"NEXT"})}prevYear(){let e=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:e.dateEnv.addYears(e.currentDate,-1)})}nextYear(){let e=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:e.dateEnv.addYears(e.currentDate,1)})}today(){let e=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:Ur(e.calendarOptions.now,e.dateEnv)})}gotoDate(e){let t=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:t.dateEnv.createMarker(e)})}incrementDate(e){let t=this.getCurrentData(),n=tt(e);n&&(this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:t.dateEnv.add(t.currentDate,n)}))}getDate(){let e=this.getCurrentData();return e.dateEnv.toDate(e.currentDate)}formatDate(e,t){let{dateEnv:n}=this.getCurrentData();return n.format(n.createMarker(e),on(t))}formatRange(e,t,n){let{dateEnv:r}=this.getCurrentData();return r.formatRange(r.createMarker(e),r.createMarker(t),on(n),n)}formatIso(e,t){let{dateEnv:n}=this.getCurrentData();return n.formatIso(n.createMarker(e),{omitTime:t})}select(e,t){let n;n=null==t?null!=e.start?e:{start:e,end:null}:{start:e,end:t};let r=this.getCurrentData(),i=pi(n,r.dateEnv,tt({days:1}));i&&(this.dispatch({type:"SELECT_DATES",selection:i}),Wr(i,null,r))}unselect(e){let t=this.getCurrentData();t.dateSelection&&(this.dispatch({type:"UNSELECT_DATES"}),function(e,t){t.emitter.trigger("unselect",{jsEvent:e?e.origEvent:null,view:t.viewApi||t.calendarApi.view})}(e,t))}addEvent(e,t){if(e instanceof Zr){let t=e._def,n=e._instance;return this.getCurrentData().eventStore.defs[t.defId]||(this.dispatch({type:"ADD_EVENTS",eventStore:An({def:t,instance:n})}),this.triggerEventAdd(e)),e}let n,r=this.getCurrentData();if(t instanceof Yr)n=t.internalEventSource;else if("boolean"==typeof t)t&&([n]=gt(r.eventSources));else if(null!=t){let e=this.getEventSourceById(t);if(!e)return console.warn(`Could not find an event source with ID "${t}"`),null;n=e.internalEventSource}let i=Pn(e,n,r,!1);if(i){let e=new Zr(r,i.def,i.def.recurringDef?null:i.instance);return this.dispatch({type:"ADD_EVENTS",eventStore:An(i)}),this.triggerEventAdd(e),e}return null}triggerEventAdd(e){let{emitter:t}=this.getCurrentData();t.trigger("eventAdd",{event:e,relatedEvents:[],revert:()=>{this.dispatch({type:"REMOVE_EVENTS",eventStore:Xr(e)})}})}getEventById(e){let t=this.getCurrentData(),{defs:n,instances:r}=t.eventStore;e=String(e);for(let i in n){let s=n[i];if(s.publicId===e){if(s.recurringDef)return new Zr(t,s,null);for(let e in r){let n=r[e];if(n.defId===s.defId)return new Zr(t,s,n)}}}return null}getEvents(){let e=this.getCurrentData();return Jr(e.eventStore,e)}removeAllEvents(){this.dispatch({type:"REMOVE_ALL_EVENTS"})}getEventSources(){let e=this.getCurrentData(),t=e.eventSources,n=[];for(let r in t)n.push(new Yr(e,t[r]));return n}getEventSourceById(e){let t=this.getCurrentData(),n=t.eventSources;e=String(e);for(let r in n)if(n[r].publicId===e)return new Yr(t,n[r]);return null}addEventSource(e){let t=this.getCurrentData();if(e instanceof Yr)return t.eventSources[e.internalEventSource.sourceId]||this.dispatch({type:"ADD_EVENT_SOURCES",sources:[e.internalEventSource]}),e;let n=lo(e,t);return n?(this.dispatch({type:"ADD_EVENT_SOURCES",sources:[n]}),new Yr(t,n)):null}removeAllEventSources(){this.dispatch({type:"REMOVE_ALL_EVENT_SOURCES"})}refetchEvents(){this.dispatch({type:"FETCH_EVENT_SOURCES",isRefetch:!0})}scrollToTime(e){let t=tt(e);t&&this.trigger("_scrollRequest",{time:t})}}var ho={__proto__:null,BASE_OPTION_DEFAULTS:ln,BaseComponent:Br,BgEvent:Gs,CalendarImpl:uo,CalendarRoot:zi,ContentContainer:qi,CustomRenderingStore:class extends class{constructor(){this.handlers=[]}set(e){this.currentValue=e;for(let t of this.handlers)t(e)}subscribe(e){this.handlers.push(e),void 0!==this.currentValue&&e(this.currentValue)}}{constructor(){super(...arguments),this.map=new Map}handle(e){const{map:t}=this;let n=!1;e.isActive?(t.set(e.id,e),n=!0):t.has(e.id)&&(t.delete(e.id),n=!0),n&&this.set(t)}},DateComponent:zr,DateEnv:wi,DateProfileGenerator:Lr,DayCellContainer:Ws,DayHeader:es,DaySeriesModel:ns,DayTableModel:rs,DelayedRunner:ys,ElementDragging:Pi,ElementScrollController:xr,Emitter:Sr,EventContainer:Bs,EventImpl:Zr,Interaction:Ii,MoreLinkContainer:$s,NamedTimeZoneImpl:class{constructor(e){this.timeZoneName=e}},NowIndicatorContainer:Us,NowTimer:$i,PositionCache:wr,RefMap:Ds,ScrollController:Rr,ScrollResponder:Or,Scroller:As,SegHierarchy:Ci,SimpleScrollGrid:Hs,Slicer:is,Splitter:Kn,StandardEvent:js,TableDateCell:Zi,TableDowCell:Ji,Theme:Tr,ViewContainer:io,ViewContextType:Nr,WeekNumberContainer:Ys,WindowScrollController:_r,addDays:St,addDurations:rt,addMs:wt,addWeeks:Dt,allowContextMenu:Fe,allowSelection:Le,applyMutationToEventStore:Gr,applyStyle:we,asCleanDays:function(e){return e.years||e.months||e.milliseconds?0:e.days},asRoughMinutes:function(e){return ot(e)/6e4},asRoughMs:ot,asRoughSeconds:function(e){return ot(e)/1e3},binarySearch:Mi,buildElAttrs:Gi,buildEntryKey:xi,buildEventApis:Jr,buildEventRangeKey:hi,buildIsoString:zt,buildNavLinkAttrs:hr,buildSegTimeText:ci,collectFromHash:Et,combineEventUis:kn,compareByFieldSpecs:Ge,compareNumbers:Xe,compareObjs:bt,computeEarliestSegStart:to,computeEdges:br,computeFallbackHeaderFormat:Ui,computeInnerRect:yr,computeRect:Er,computeShrinkWidth:Ss,computeVisibleDayRange:Wn,config:Hi,constrainPoint:qn,createDuration:tt,createEmptyEventStore:Sn,createEventInstance:vn,createEventUi:Tn,createFormatter:on,diffDates:Vn,diffDayAndTime:xt,diffDays:Rt,diffPoints:Zn,diffWeeks:Ct,diffWholeDays:Tt,diffWholeWeeks:_t,disableCursor:je,elementClosest:Ee,elementMatches:Ae,enableCursor:ze,eventTupleToStore:An,filterHash:ut,findDirectChildren:function(e,t){let n=e instanceof HTMLElement?[e]:e,r=[];for(let e=0;e<n.length;e+=1){let i=n[e].children;for(let e=0;e<i.length;e+=1){let n=i[e];t&&!Ae(n,t)||r.push(n)}}return r},findElements:De,flexibleCompare:qe,formatDayString:Ut,formatIsoTimeString:Lt,getAllowYScrolling:Cs,getCanVGrowWithinCell:Jn,getClippingParents:Ar,getDateMeta:lr,getDayClassNames:cr,getDefaultEventEnd:Vr,getElRoot:xe,getElSeg:ti,getEntrySpanEnd:Ri,getEventTargetViaRoot:Re,getIsRtlScrollbarOnLeft:pr,getRectCenter:Yn,getRelevantEvents:Dn,getScrollGridClassNames:Ms,getScrollbarWidths:mr,getSectionClassNames:Is,getSectionHasLiquidHeight:ws,getSegAnchorAttrs:fi,getSegMeta:di,getSlotClassNames:function(e,t){let n=["fc-slot","fc-slot-"+At[e.dow]];return e.isDisabled?n.push("fc-slot-disabled"):(e.isToday&&(n.push("fc-slot-today"),n.push(t.getClass("today"))),e.isPast&&n.push("fc-slot-past"),e.isFuture&&n.push("fc-slot-future")),n},getStickyFooterScrollbar:Ps,getStickyHeaderDates:Ns,getUniqueDomId:Te,greatestDurationDenominator:lt,groupIntersectingEntries:_i,guid:Be,hasBgRendering:Kr,hasCustomDayCellContent:Fs,hasShrinkWidth:ks,identity:mn,injectStyles:oo,interactionSettingsStore:Ni,interactionSettingsToStore:Oi,intersectRanges:rr,intersectRects:Qn,intersectSpans:Ti,isArraysEqual:Ft,isColPropsEqual:xs,isDateSelectionValid:ds,isDateSpansEqual:mi,isInt:Je,isInteractionValid:cs,isMultiDayRange:Fn,isPropsEqual:pt,isPropsValid:hs,isValidDate:Bt,mapHash:ht,memoize:Vt,memoizeArraylike:function(e,t,n){let r=[],i=[];return s=>{let o=r.length,a=s.length,l=0;for(;l<o;l+=1)if(s[l]){if(!Ft(r[l],s[l])){n&&n(i[l]);let r=e.apply(this,s[l]);t&&t(r,i[l])||(i[l]=r)}}else n&&n(i[l]);for(;l<a;l+=1)i[l]=e.apply(this,s[l]);return r=s,i.splice(a),i}},memoizeHashlike:function(e,t,n){let r={},i={};return s=>{let o={};for(let a in s)if(i[a])if(Ft(r[a],s[a]))o[a]=i[a];else{n&&n(i[a]);let r=e.apply(this,s[a]);o[a]=t&&t(r,i[a])?i[a]:r}else o[a]=e.apply(this,s[a]);return r=s,i=o,o}},memoizeObjArg:Gt,mergeEventStores:wn,multiplyDuration:it,padStart:Ye,parseBusinessHours:Un,parseClassNames:Rn,parseDragMeta:ji,parseEventDef:jn,parseFieldSpecs:Ve,parseMarker:Si,pointInsideRect:Gn,preventContextMenu:We,preventDefault:ke,preventSelection:Ue,rangeContainsMarker:ar,rangeContainsRange:or,rangesEqual:ir,rangesIntersect:sr,refineEventDef:Hn,refineProps:pn,removeElement:ye,removeExact:function(e,t){let n=0,r=0;for(;r<e.length;)e[r]===t?(e.splice(r,1),n+=1):r+=1;return n},renderChunkContent:Rs,renderFill:qs,renderMicroColGroup:_s,renderScrollShim:Os,requestJson:bs,sanitizeShrinkWidth:Ts,setRef:jr,sliceEventStore:$r,sortEventSegs:ii,startOfDay:kt,translateRect:function(e,t,n){return{left:e.left+t,right:e.right+t,top:e.top+n,bottom:e.bottom+n}},triggerDateSelect:Wr,unpromisify:Dr,whenTransitionDone:Oe,wholeDivideDurations:at};oo(':root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-unselectable{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;user-select:none}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url("data:application/x-font-ttf;charset=utf-8;base64,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") format("truetype")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:"\\e900"}.fc-icon-chevron-right:before{content:"\\e901"}.fc-icon-chevrons-left:before{content:"\\e902"}.fc-icon-chevrons-right:before{content:"\\e903"}.fc-icon-minus-square:before{content:"\\e904"}.fc-icon-plus-square:before{content:"\\e905"}.fc-icon-x:before{content:"\\e906"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button::-moz-focus-inner{border-style:none;padding:0}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:"";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:"";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}');const fo=[],go={code:"en",week:{dow:0,doy:4},direction:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekText:"W",weekTextLong:"Week",closeHint:"Close",timeHint:"Time",eventHint:"Event",allDayText:"all-day",moreLinkText:"more",noEventsText:"No events to display"},po=Object.assign(Object.assign({},go),{buttonHints:{prev:"Previous $0",next:"Next $0",today:(e,t)=>"day"===t?"Today":"This "+e},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:e=>`Show ${e} more event${1===e?"":"s"}`});function mo(e){let t=e.length>0?e[0].code:"en",n=fo.concat(e),r={en:po};for(let e of n)r[e.code]=e;return{map:r,defaultCode:t}}function vo(e,t){return"object"!=typeof e||Array.isArray(e)?function(e,t){let n=[].concat(e||[]),r=function(e,t){for(let n=0;n<e.length;n+=1){let r=e[n].toLocaleLowerCase().split("-");for(let e=r.length;e>0;e-=1){let n=r.slice(0,e).join("-");if(t[n])return t[n]}}return null}(n,t)||po;return bo(e,n,r)}(e,t):bo(e.code,[e.code],e)}function bo(e,t,n){let r=dt([go,n],["buttonText"]);delete r.code;let{week:i}=r;return delete r.week,{codeArg:e,codes:t,week:i,simpleNumberFormat:new Intl.NumberFormat(e),options:r}}function yo(e){return{id:Be(),name:e.name,premiumReleaseDate:e.premiumReleaseDate?new Date(e.premiumReleaseDate):void 0,deps:e.deps||[],reducers:e.reducers||[],isLoadingFuncs:e.isLoadingFuncs||[],contextInit:[].concat(e.contextInit||[]),eventRefiners:e.eventRefiners||{},eventDefMemberAdders:e.eventDefMemberAdders||[],eventSourceRefiners:e.eventSourceRefiners||{},isDraggableTransformers:e.isDraggableTransformers||[],eventDragMutationMassagers:e.eventDragMutationMassagers||[],eventDefMutationAppliers:e.eventDefMutationAppliers||[],dateSelectionTransformers:e.dateSelectionTransformers||[],datePointTransforms:e.datePointTransforms||[],dateSpanTransforms:e.dateSpanTransforms||[],views:e.views||{},viewPropsTransformers:e.viewPropsTransformers||[],isPropsValid:e.isPropsValid||null,externalDefTransforms:e.externalDefTransforms||[],viewContainerAppends:e.viewContainerAppends||[],eventDropTransformers:e.eventDropTransformers||[],componentInteractions:e.componentInteractions||[],calendarInteractions:e.calendarInteractions||[],themeClasses:e.themeClasses||{},eventSourceDefs:e.eventSourceDefs||[],cmdFormatter:e.cmdFormatter,recurringTypes:e.recurringTypes||[],namedTimeZonedImpl:e.namedTimeZonedImpl,initialView:e.initialView||"",elementDraggingImpl:e.elementDraggingImpl,optionChangeHandlers:e.optionChangeHandlers||{},scrollGridImpl:e.scrollGridImpl||null,listenerRefiners:e.listenerRefiners||{},optionRefiners:e.optionRefiners||{},propSetHandlers:e.propSetHandlers||{}}}function Eo(){let e,t=[],n=[];return(r,i)=>(e&&Ft(r,t)&&Ft(i,n)||(e=function(e,t){let n={},r={premiumReleaseDate:void 0,reducers:[],isLoadingFuncs:[],contextInit:[],eventRefiners:{},eventDefMemberAdders:[],eventSourceRefiners:{},isDraggableTransformers:[],eventDragMutationMassagers:[],eventDefMutationAppliers:[],dateSelectionTransformers:[],datePointTransforms:[],dateSpanTransforms:[],views:{},viewPropsTransformers:[],isPropsValid:null,externalDefTransforms:[],viewContainerAppends:[],eventDropTransformers:[],componentInteractions:[],calendarInteractions:[],themeClasses:{},eventSourceDefs:[],cmdFormatter:null,recurringTypes:[],namedTimeZonedImpl:null,initialView:"",elementDraggingImpl:null,optionChangeHandlers:{},scrollGridImpl:null,listenerRefiners:{},optionRefiners:{},propSetHandlers:{}};function i(e){for(let o of e){const e=o.name,a=n[e];void 0===a?(n[e]=o.id,i(o.deps),s=o,r={premiumReleaseDate:Ao((t=r).premiumReleaseDate,s.premiumReleaseDate),reducers:t.reducers.concat(s.reducers),isLoadingFuncs:t.isLoadingFuncs.concat(s.isLoadingFuncs),contextInit:t.contextInit.concat(s.contextInit),eventRefiners:Object.assign(Object.assign({},t.eventRefiners),s.eventRefiners),eventDefMemberAdders:t.eventDefMemberAdders.concat(s.eventDefMemberAdders),eventSourceRefiners:Object.assign(Object.assign({},t.eventSourceRefiners),s.eventSourceRefiners),isDraggableTransformers:t.isDraggableTransformers.concat(s.isDraggableTransformers),eventDragMutationMassagers:t.eventDragMutationMassagers.concat(s.eventDragMutationMassagers),eventDefMutationAppliers:t.eventDefMutationAppliers.concat(s.eventDefMutationAppliers),dateSelectionTransformers:t.dateSelectionTransformers.concat(s.dateSelectionTransformers),datePointTransforms:t.datePointTransforms.concat(s.datePointTransforms),dateSpanTransforms:t.dateSpanTransforms.concat(s.dateSpanTransforms),views:Object.assign(Object.assign({},t.views),s.views),viewPropsTransformers:t.viewPropsTransformers.concat(s.viewPropsTransformers),isPropsValid:s.isPropsValid||t.isPropsValid,externalDefTransforms:t.externalDefTransforms.concat(s.externalDefTransforms),viewContainerAppends:t.viewContainerAppends.concat(s.viewContainerAppends),eventDropTransformers:t.eventDropTransformers.concat(s.eventDropTransformers),calendarInteractions:t.calendarInteractions.concat(s.calendarInteractions),componentInteractions:t.componentInteractions.concat(s.componentInteractions),themeClasses:Object.assign(Object.assign({},t.themeClasses),s.themeClasses),eventSourceDefs:t.eventSourceDefs.concat(s.eventSourceDefs),cmdFormatter:s.cmdFormatter||t.cmdFormatter,recurringTypes:t.recurringTypes.concat(s.recurringTypes),namedTimeZonedImpl:s.namedTimeZonedImpl||t.namedTimeZonedImpl,initialView:t.initialView||s.initialView,elementDraggingImpl:t.elementDraggingImpl||s.elementDraggingImpl,optionChangeHandlers:Object.assign(Object.assign({},t.optionChangeHandlers),s.optionChangeHandlers),scrollGridImpl:s.scrollGridImpl||t.scrollGridImpl,listenerRefiners:Object.assign(Object.assign({},t.listenerRefiners),s.listenerRefiners),optionRefiners:Object.assign(Object.assign({},t.optionRefiners),s.optionRefiners),propSetHandlers:Object.assign(Object.assign({},t.propSetHandlers),s.propSetHandlers)}):a!==o.id&&console.warn(`Duplicate plugin '${e}'`)}var t,s}return e&&i(e),i(t),r}(r,i)),t=r,n=i,e)}function Ao(e,t){return void 0===e?t:void 0===t?e:new Date(Math.max(e.valueOf(),t.valueOf()))}class Do extends Tr{}function So(e,t,n,r){if(t[e])return t[e];let i=function(e,t,n,r){let i=n[e],s=r[e],o=e=>i&&null!==i[e]?i[e]:s&&null!==s[e]?s[e]:null,a=o("component"),l=o("superType"),c=null;if(l){if(l===e)throw new Error("Can't have a custom view type that references itself");c=So(l,t,n,r)}!a&&c&&(a=c.component);if(!a)return null;return{type:e,component:a,defaults:Object.assign(Object.assign({},c?c.defaults:{}),i?i.rawOptions:{}),overrides:Object.assign(Object.assign({},c?c.overrides:{}),s?s.rawOptions:{})}}(e,t,n,r);return i&&(t[e]=i),i}function wo(e){return ht(e,Co)}function Co(e){let t="function"==typeof e?{component:e}:e,{component:n}=t;var r;return t.content&&(r=t,n=e=>f(Nr.Consumer,null,t=>f(qi,{elTag:"div",elClasses:so(t.viewSpec),renderProps:Object.assign(Object.assign({},e),{nextDayThreshold:t.options.nextDayThreshold}),generatorName:void 0,generator:r.content,classNameGenerator:r.classNames,didMount:r.didMount,willUnmount:r.willUnmount}))),{superType:t.type,component:n,rawOptions:t}}function Ro(e,t,n,r){let i=wo(e),s=wo(t.views);return ht(function(e,t){let n,r={};for(n in e)So(n,r,e,t);for(n in t)So(n,r,e,t);return r}(i,s),e=>function(e,t,n,r,i){let s=e.overrides.duration||e.defaults.duration||r.duration||n.duration,o=null,a="",l="",c={};if(s&&(o=function(e){let t=JSON.stringify(e),n=xo[t];void 0===n&&(n=tt(e),xo[t]=n);return n}(s),o)){let e=lt(o);a=e.unit,1===e.value&&(l=a,c=t[a]?t[a].rawOptions:{})}let d=t=>{let n=t.buttonText||{},r=e.defaults.buttonTextKey;return null!=r&&null!=n[r]?n[r]:null!=n[e.type]?n[e.type]:null!=n[l]?n[l]:null},u=t=>{let n=t.buttonHints||{},r=e.defaults.buttonTextKey;return null!=r&&null!=n[r]?n[r]:null!=n[e.type]?n[e.type]:null!=n[l]?n[l]:null};return{type:e.type,component:e.component,duration:o,durationUnit:a,singleUnit:l,optionDefaults:e.defaults,optionOverrides:Object.assign(Object.assign({},c),e.overrides),buttonTextOverride:d(r)||d(n)||e.overrides.buttonText,buttonTextDefault:d(i)||e.defaults.buttonText||d(ln)||e.type,buttonTitleOverride:u(r)||u(n)||e.overrides.buttonHint,buttonTitleDefault:u(i)||e.defaults.buttonHint||u(ln)}}(e,s,t,n,r))}Do.prototype.classes={root:"fc-theme-standard",tableCellShaded:"fc-cell-shaded",buttonGroup:"fc-button-group",button:"fc-button fc-button-primary",buttonActive:"fc-button-active"},Do.prototype.baseIconClass="fc-icon",Do.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-chevron-left",next:"fc-icon-chevron-right",prevYear:"fc-icon-chevrons-left",nextYear:"fc-icon-chevrons-right"},Do.prototype.rtlIconClasses={prev:"fc-icon-chevron-right",next:"fc-icon-chevron-left",prevYear:"fc-icon-chevrons-right",nextYear:"fc-icon-chevrons-left"},Do.prototype.iconOverrideOption="buttonIcons",Do.prototype.iconOverrideCustomButtonOption="icon",Do.prototype.iconOverridePrefix="fc-icon-";let xo={};function _o(e,t,n){let r=t?t.activeRange:null;return Mo({},function(e,t){let n=co(t),r=[].concat(e.eventSources||[]),i=[];e.initialEvents&&r.unshift(e.initialEvents);e.events&&r.unshift(e.events);for(let e of r){let r=lo(e,t,n);r&&i.push(r)}return i}(e,n),r,n)}function To(e,t,n,r){let i=n?n.activeRange:null;switch(t.type){case"ADD_EVENT_SOURCES":return Mo(e,t.sources,i,r);case"REMOVE_EVENT_SOURCE":return s=e,o=t.sourceId,ut(s,e=>e.sourceId!==o);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return n?Io(e,i,r):e;case"FETCH_EVENT_SOURCES":return Oo(e,t.sourceIds?ft(t.sourceIds):Po(e,r),i,t.isRefetch||!1,r);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return function(e,t,n,r){let i=e[t];if(i&&n===i.latestFetchId)return Object.assign(Object.assign({},e),{[t]:Object.assign(Object.assign({},i),{isFetching:!1,fetchRange:r})});return e}(e,t.sourceId,t.fetchId,t.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return e}var s,o}function ko(e){for(let t in e)if(e[t].isFetching)return!0;return!1}function Mo(e,t,n,r){let i={};for(let e of t)i[e.sourceId]=e;return n&&(i=Io(i,n,r)),Object.assign(Object.assign({},e),i)}function Io(e,t,n){return Oo(e,ut(e,e=>function(e,t,n){if(!Ho(e,n))return!e.latestFetchId;return!n.options.lazyFetching||!e.fetchRange||e.isFetching||t.start<e.fetchRange.start||t.end>e.fetchRange.end}(e,t,n)),t,!1,n)}function Oo(e,t,n,r,i){let s={};for(let o in e){let a=e[o];t[o]?s[o]=No(a,n,r,i):s[o]=a}return s}function No(e,t,n,r){let{options:i,calendarApi:s}=r,o=r.pluginHooks.eventSourceDefs[e.sourceDefId],a=Be();return o.fetch({eventSource:e,range:t,isRefetch:n,context:r},n=>{let{rawEvents:o}=n;i.eventSourceSuccess&&(o=i.eventSourceSuccess.call(s,o,n.response)||o),e.success&&(o=e.success.call(s,o,n.response)||o),r.dispatch({type:"RECEIVE_EVENTS",sourceId:e.sourceId,fetchId:a,fetchRange:t,rawEvents:o})},n=>{let o=!1;i.eventSourceFailure&&(i.eventSourceFailure.call(s,n),o=!0),e.failure&&(e.failure(n),o=!0),o||console.warn(n.message,n),r.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:e.sourceId,fetchId:a,fetchRange:t,error:n})}),Object.assign(Object.assign({},e),{isFetching:!0,latestFetchId:a})}function Po(e,t){return ut(e,e=>Ho(e,t))}function Ho(e,t){return!t.pluginHooks.eventSourceDefs[e.sourceDefId].ignoreRange}function Bo(e,t){switch(t.type){case"UNSELECT_DATES":return null;case"SELECT_DATES":return t.selection;default:return e}}function jo(e,t){switch(t.type){case"UNSELECT_EVENT":return"";case"SELECT_EVENT":return t.eventInstanceId;default:return e}}function zo(e,t){let n;switch(t.type){case"UNSET_EVENT_DRAG":return null;case"SET_EVENT_DRAG":return n=t.state,{affectedEvents:n.affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return e}}function Uo(e,t){let n;switch(t.type){case"UNSET_EVENT_RESIZE":return null;case"SET_EVENT_RESIZE":return n=t.state,{affectedEvents:n.affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return e}}function Lo(e,t,n,r,i){return{header:e.headerToolbar?Wo(e.headerToolbar,e,t,n,r,i):null,footer:e.footerToolbar?Wo(e.footerToolbar,e,t,n,r,i):null}}function Wo(e,t,n,r,i,s){let o={},a=[],l=!1;for(let c in e){let d=Fo(e[c],t,n,r,i,s);o[c]=d.widgets,a.push(...d.viewsWithButtons),l=l||d.hasTitle}return{sectionWidgets:o,viewsWithButtons:a,hasTitle:l}}function Fo(e,t,n,r,i,s){let o="rtl"===t.direction,a=t.customButtons||{},l=n.buttonText||{},c=t.buttonText||{},d=n.buttonHints||{},u=t.buttonHints||{},h=e?e.split(" "):[],f=[],g=!1;return{widgets:h.map(e=>e.split(",").map(e=>{if("title"===e)return g=!0,{buttonName:e};let n,h,p,m,v,b;if(n=a[e])p=e=>{n.click&&n.click.call(e.target,e,e.target)},(m=r.getCustomButtonIconClass(n))||(m=r.getIconClass(e,o))||(v=n.text),b=n.hint||n.text;else if(h=i[e]){f.push(e),p=()=>{s.changeView(e)},(v=h.buttonTextOverride)||(m=r.getIconClass(e,o))||(v=h.buttonTextDefault);let n=h.buttonTextOverride||h.buttonTextDefault;b=Ze(h.buttonTitleOverride||h.buttonTitleDefault||t.viewHint,[n,e],n)}else if(s[e])if(p=()=>{s[e]()},(v=l[e])||(m=r.getIconClass(e,o))||(v=c[e]),"prevYear"===e||"nextYear"===e){let t="prevYear"===e?"prev":"next";b=Ze(d[t]||u[t],[c.year||"year","year"],c[e])}else b=t=>Ze(d[e]||u[e],[c[t]||t,t],c[e]);return{buttonName:e,buttonClick:p,buttonIcon:m,buttonText:v,buttonHint:b}})),viewsWithButtons:f,hasTitle:g}}class Vo{constructor(e,t,n){this.type=e,this.getCurrentData=t,this.dateEnv=n}get calendar(){return this.getCurrentData().calendarApi}get title(){return this.getCurrentData().viewTitle}get activeStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start)}get activeEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end)}get currentStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start)}get currentEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end)}getOption(e){return this.getCurrentData().options[e]}}function Go(e,t){let n=gt(t.getCurrentData().eventSources),r=[];for(let t of e){let e=!1;for(let r=0;r<n.length;r+=1)if(n[r]._raw===t){n.splice(r,1),e=!0;break}e||r.push(t)}for(let e of n)t.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:e.sourceId});for(let e of r)t.calendarApi.addEventSource(e)}const Qo=[yo({name:"array-event-source",eventSourceDefs:[{ignoreRange:!0,parseMeta:e=>Array.isArray(e.events)?e.events:null,fetch(e,t){t({rawEvents:e.eventSource.meta})}}]}),yo({name:"func-event-source",eventSourceDefs:[{parseMeta:e=>"function"==typeof e.events?e.events:null,fetch(e,t,n){const{dateEnv:r}=e.context;Dr(e.eventSource.meta.bind(null,vi(e.range,r)),e=>t({rawEvents:e}),n)}}]}),yo({name:"json-event-source",eventSourceRefiners:{method:String,extraParams:mn,startParam:String,endParam:String,timeZoneParam:String},eventSourceDefs:[{parseMeta:e=>!e.url||"json"!==e.format&&e.format?null:{url:e.url,format:"json",method:(e.method||"GET").toUpperCase(),extraParams:e.extraParams,startParam:e.startParam,endParam:e.endParam,timeZoneParam:e.timeZoneParam},fetch(e,t,n){const{meta:r}=e.eventSource,i=function(e,t,n){let r,i,s,o,{dateEnv:a,options:l}=n,c={};r=e.startParam,null==r&&(r=l.startParam);i=e.endParam,null==i&&(i=l.endParam);s=e.timeZoneParam,null==s&&(s=l.timeZoneParam);o="function"==typeof e.extraParams?e.extraParams():e.extraParams||{};Object.assign(c,o),c[r]=a.formatIso(t.start),c[i]=a.formatIso(t.end),"local"!==a.timeZone&&(c[s]=a.timeZone);return c}(r,e.range,e.context);bs(r.method,r.url,i).then(([e,n])=>{t({rawEvents:e,response:n})},n)}}]}),yo({name:"simple-recurring-event",recurringTypes:[{parse(e,t){if(e.daysOfWeek||e.startTime||e.endTime||e.startRecur||e.endRecur){let i,s={daysOfWeek:e.daysOfWeek||null,startTime:e.startTime||null,endTime:e.endTime||null,startRecur:e.startRecur?t.createMarker(e.startRecur):null,endRecur:e.endRecur?t.createMarker(e.endRecur):null};return e.duration&&(i=e.duration),!i&&e.startTime&&e.endTime&&(n=e.endTime,r=e.startTime,i={years:n.years-r.years,months:n.months-r.months,days:n.days-r.days,milliseconds:n.milliseconds-r.milliseconds}),{allDayGuess:Boolean(!e.startTime&&!e.endTime),duration:i,typeData:s}}var n,r;return null},expand(e,t,n){let r=rr(t,{start:e.startRecur,end:e.endRecur});return r?function(e,t,n,r){let i=e?ft(e):null,s=kt(n.start),o=n.end,a=[];for(;s<o;){let e;i&&!i[s.getUTCDay()]||(e=t?r.add(s,t):s,a.push(e)),s=St(s,1)}return a}(e.daysOfWeek,e.startTime,r,n):[]}}],eventRefiners:{daysOfWeek:mn,startTime:tt,endTime:tt,duration:tt,startRecur:mn,endRecur:mn}}),yo({name:"change-handler",optionChangeHandlers:{events(e,t){Go([e],t)},eventSources:Go}}),yo({name:"misc",isLoadingFuncs:[e=>ko(e.eventSources)],propSetHandlers:{dateProfile:function(e,t){t.emitter.trigger("datesSet",Object.assign(Object.assign({},vi(e.activeRange,t.dateEnv)),{view:t.viewApi}))},eventStore:function(e,t){let{emitter:n}=t;n.hasHandlers("eventsSet")&&n.trigger("eventsSet",Jr(e,t))}}})];class qo{constructor(e,t){this.runTaskOption=e,this.drainedOption=t,this.queue=[],this.delayedRunner=new ys(this.drain.bind(this))}request(e,t){this.queue.push(e),this.delayedRunner.request(t)}pause(e){this.delayedRunner.pause(e)}resume(e,t){this.delayedRunner.resume(e,t)}drain(){let{queue:e}=this;for(;e.length;){let t,n=[];for(;t=e.shift();)this.runTask(t),n.push(t);this.drained(n)}}runTask(e){this.runTaskOption&&this.runTaskOption(e)}drained(e){this.drainedOption&&this.drainedOption(e)}}function Yo(e,t,n){let r;return r=/^(year|month)$/.test(e.currentRangeUnit)?e.currentRange:e.activeRange,n.formatRange(r.start,r.end,on(t.titleFormat||function(e){let{currentRangeUnit:t}=e;if("year"===t)return{year:"numeric"};if("month"===t)return{year:"numeric",month:"long"};let n=Tt(e.currentRange.start,e.currentRange.end);if(null!==n&&n>1)return{year:"numeric",month:"short",day:"numeric"};return{year:"numeric",month:"long",day:"numeric"}}(e)),{isEndExclusive:e.isRangeAllDay,defaultSeparator:t.titleRangeSeparator})}class Zo{constructor(e){this.computeOptionsData=Vt(this._computeOptionsData),this.computeCurrentViewData=Vt(this._computeCurrentViewData),this.organizeRawLocales=Vt(mo),this.buildLocale=Vt(vo),this.buildPluginHooks=Eo(),this.buildDateEnv=Vt(Xo),this.buildTheme=Vt(Jo),this.parseToolbars=Vt(Lo),this.buildViewSpecs=Vt(Ro),this.buildDateProfileGenerator=Gt($o),this.buildViewApi=Vt(Ko),this.buildViewUiProps=Gt(na),this.buildEventUiBySource=Vt(ea,pt),this.buildEventUiBases=Vt(ta),this.parseContextBusinessHours=Gt(ia),this.buildTitle=Vt(Yo),this.emitter=new Sr,this.actionRunner=new qo(this._handleAction.bind(this),this.updateData.bind(this)),this.currentCalendarOptionsInput={},this.currentCalendarOptionsRefined={},this.currentViewOptionsInput={},this.currentViewOptionsRefined={},this.currentCalendarOptionsRefiners={},this.getCurrentData=()=>this.data,this.dispatch=e=>{this.actionRunner.request(e)},this.props=e,this.actionRunner.pause();let t={},n=this.computeOptionsData(e.optionOverrides,t,e.calendarApi),r=n.calendarOptions.initialView||n.pluginHooks.initialView,i=this.computeCurrentViewData(r,n,e.optionOverrides,t);e.calendarApi.currentDataManager=this,this.emitter.setThisContext(e.calendarApi),this.emitter.setOptions(i.options);let s=function(e,t){let n=e.initialDate;return null!=n?t.createMarker(n):Ur(e.now,t)}(n.calendarOptions,n.dateEnv),o=i.dateProfileGenerator.build(s);ar(o.activeRange,s)||(s=o.currentRange.start);let a={dateEnv:n.dateEnv,options:n.calendarOptions,pluginHooks:n.pluginHooks,calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData};for(let e of n.pluginHooks.contextInit)e(a);let l=_o(n.calendarOptions,o,a),c={dynamicOptionOverrides:t,currentViewType:r,currentDate:s,dateProfile:o,businessHours:this.parseContextBusinessHours(a),eventSources:l,eventUiBases:{},eventStore:{defs:{},instances:{}},renderableEventStore:{defs:{},instances:{}},dateSelection:null,eventSelection:"",eventDrag:null,eventResize:null,selectionConfig:this.buildViewUiProps(a).selectionConfig},d=Object.assign(Object.assign({},a),c);for(let e of n.pluginHooks.reducers)Object.assign(c,e(null,null,d));ra(c,a)&&this.emitter.trigger("loading",!0),this.state=c,this.updateData(),this.actionRunner.resume()}resetOptions(e,t){let{props:n}=this;n.optionOverrides=t?Object.assign(Object.assign({},n.optionOverrides),e):e,this.actionRunner.request({type:"NOTHING"})}_handleAction(e){let{props:t,state:n,emitter:r}=this,i=function(e,t){switch(t.type){case"SET_OPTION":return Object.assign(Object.assign({},e),{[t.optionName]:t.rawOptionValue});default:return e}}(n.dynamicOptionOverrides,e),s=this.computeOptionsData(t.optionOverrides,i,t.calendarApi),o=function(e,t){switch(t.type){case"CHANGE_VIEW_TYPE":e=t.viewType}return e}(n.currentViewType,e),a=this.computeCurrentViewData(o,s,t.optionOverrides,i);t.calendarApi.currentDataManager=this,r.setThisContext(t.calendarApi),r.setOptions(a.options);let l={dateEnv:s.dateEnv,options:s.calendarOptions,pluginHooks:s.pluginHooks,calendarApi:t.calendarApi,dispatch:this.dispatch,emitter:r,getCurrentData:this.getCurrentData},{currentDate:c,dateProfile:d}=n;this.data&&this.data.dateProfileGenerator!==a.dateProfileGenerator&&(d=a.dateProfileGenerator.build(c)),c=function(e,t){switch(t.type){case"CHANGE_DATE":return t.dateMarker;default:return e}}(c,e),d=function(e,t,n,r){let i;switch(t.type){case"CHANGE_VIEW_TYPE":return r.build(t.dateMarker||n);case"CHANGE_DATE":return r.build(t.dateMarker);case"PREV":if(i=r.buildPrev(e,n),i.isValid)return i;break;case"NEXT":if(i=r.buildNext(e,n),i.isValid)return i}return e}(d,e,c,a.dateProfileGenerator),"PREV"!==e.type&&"NEXT"!==e.type&&ar(d.currentRange,c)||(c=d.currentRange.start);let u=To(n.eventSources,e,d,l),h=os(n.eventStore,e,u,d,l),f=ko(u)&&!a.options.progressiveEventRendering&&n.renderableEventStore||h,{eventUiSingleBase:g,selectionConfig:p}=this.buildViewUiProps(l),m=this.buildEventUiBySource(u),v={dynamicOptionOverrides:i,currentViewType:o,currentDate:c,dateProfile:d,eventSources:u,eventStore:h,renderableEventStore:f,selectionConfig:p,eventUiBases:this.buildEventUiBases(f.defs,g,m),businessHours:this.parseContextBusinessHours(l),dateSelection:Bo(n.dateSelection,e),eventSelection:jo(n.eventSelection,e),eventDrag:zo(n.eventDrag,e),eventResize:Uo(n.eventResize,e)},b=Object.assign(Object.assign({},l),v);for(let t of s.pluginHooks.reducers)Object.assign(v,t(n,e,b));let y=ra(n,l),E=ra(v,l);!y&&E?r.trigger("loading",!0):y&&!E&&r.trigger("loading",!1),this.state=v,t.onAction&&t.onAction(e)}updateData(){let{props:e,state:t}=this,n=this.data,r=this.computeOptionsData(e.optionOverrides,t.dynamicOptionOverrides,e.calendarApi),i=this.computeCurrentViewData(t.currentViewType,r,e.optionOverrides,t.dynamicOptionOverrides),s=this.data=Object.assign(Object.assign(Object.assign({viewTitle:this.buildTitle(t.dateProfile,i.options,r.dateEnv),calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},r),i),t),o=r.pluginHooks.optionChangeHandlers,a=n&&n.calendarOptions,l=r.calendarOptions;if(a&&a!==l){a.timeZone!==l.timeZone&&(t.eventSources=s.eventSources=function(e,t,n){let r=t?t.activeRange:null;return Oo(e,Po(e,n),r,!0,n)}(s.eventSources,t.dateProfile,s),t.eventStore=s.eventStore=function(e,t,n){let{defs:r}=e,i=ht(e.instances,e=>{let i=r[e.defId];return i.allDay||i.recurringDef?e:Object.assign(Object.assign({},e),{range:{start:n.createMarker(t.toDate(e.range.start,e.forcedStartTzo)),end:n.createMarker(t.toDate(e.range.end,e.forcedEndTzo))},forcedStartTzo:n.canComputeOffset?null:e.forcedStartTzo,forcedEndTzo:n.canComputeOffset?null:e.forcedEndTzo})});return{defs:r,instances:i}}(s.eventStore,n.dateEnv,s.dateEnv));for(let e in o)a[e]!==l[e]&&o[e](l[e],s)}e.onData&&e.onData(s)}_computeOptionsData(e,t,n){let{refinedOptions:r,pluginHooks:i,localeDefaults:s,availableLocaleData:o,extra:a}=this.processRawCalendarOptions(e,t);sa(a);let l=this.buildDateEnv(r.timeZone,r.locale,r.weekNumberCalculation,r.firstDay,r.weekText,i,o,r.defaultRangeSeparator),c=this.buildViewSpecs(i.views,e,t,s),d=this.buildTheme(r,i);return{calendarOptions:r,pluginHooks:i,dateEnv:l,viewSpecs:c,theme:d,toolbarConfig:this.parseToolbars(r,e,d,c,n),localeDefaults:s,availableRawLocales:o.map}}processRawCalendarOptions(e,t){let{locales:n,locale:r}=gn([ln,e,t]),i=this.organizeRawLocales(n),s=i.map,o=this.buildLocale(r||i.defaultCode,s).options,a=this.buildPluginHooks(e.plugins||[],Qo),l=this.currentCalendarOptionsRefiners=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},an),cn),dn),a.listenerRefiners),a.optionRefiners),c={},d=gn([ln,o,e,t]),u={},h=this.currentCalendarOptionsInput,f=this.currentCalendarOptionsRefined,g=!1;for(let e in d)"plugins"!==e&&(d[e]===h[e]||un[e]&&e in h&&un[e](h[e],d[e])?u[e]=f[e]:l[e]?(u[e]=l[e](d[e]),g=!0):c[e]=h[e]);return g&&(this.currentCalendarOptionsInput=d,this.currentCalendarOptionsRefined=u),{rawOptions:this.currentCalendarOptionsInput,refinedOptions:this.currentCalendarOptionsRefined,pluginHooks:a,availableLocaleData:i,localeDefaults:o,extra:c}}_computeCurrentViewData(e,t,n,r){let i=t.viewSpecs[e];if(!i)throw new Error(`viewType "${e}" is not available. Please make sure you've loaded all neccessary plugins`);let{refinedOptions:s,extra:o}=this.processRawViewOptions(i,t.pluginHooks,t.localeDefaults,n,r);return sa(o),{viewSpec:i,options:s,dateProfileGenerator:this.buildDateProfileGenerator({dateProfileGeneratorClass:i.optionDefaults.dateProfileGeneratorClass,duration:i.duration,durationUnit:i.durationUnit,usesMinMaxTime:i.optionDefaults.usesMinMaxTime,dateEnv:t.dateEnv,calendarApi:this.props.calendarApi,slotMinTime:s.slotMinTime,slotMaxTime:s.slotMaxTime,showNonCurrentDates:s.showNonCurrentDates,dayCount:s.dayCount,dateAlignment:s.dateAlignment,dateIncrement:s.dateIncrement,hiddenDays:s.hiddenDays,weekends:s.weekends,nowInput:s.now,validRangeInput:s.validRange,visibleRangeInput:s.visibleRange,monthMode:s.monthMode,fixedWeekCount:s.fixedWeekCount}),viewApi:this.buildViewApi(e,this.getCurrentData,t.dateEnv)}}processRawViewOptions(e,t,n,r,i){let s=gn([ln,e.optionDefaults,n,r,e.optionOverrides,i]),o=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},an),cn),dn),fn),t.listenerRefiners),t.optionRefiners),a={},l=this.currentViewOptionsInput,c=this.currentViewOptionsRefined,d=!1,u={};for(let e in s)s[e]===l[e]||un[e]&&un[e](s[e],l[e])?a[e]=c[e]:(s[e]===this.currentCalendarOptionsInput[e]||un[e]&&un[e](s[e],this.currentCalendarOptionsInput[e])?e in this.currentCalendarOptionsRefined&&(a[e]=this.currentCalendarOptionsRefined[e]):o[e]?a[e]=o[e](s[e]):u[e]=s[e],d=!0);return d&&(this.currentViewOptionsInput=s,this.currentViewOptionsRefined=a),{rawOptions:this.currentViewOptionsInput,refinedOptions:this.currentViewOptionsRefined,extra:u}}}function Xo(e,t,n,r,i,s,o,a){let l=vo(t||o.defaultCode,o.map);return new wi({calendarSystem:"gregory",timeZone:e,namedTimeZoneImpl:s.namedTimeZonedImpl,locale:l,weekNumberCalculation:n,firstDay:r,weekText:i,cmdFormatter:s.cmdFormatter,defaultSeparator:a})}function Jo(e,t){return new(t.themeClasses[e.themeSystem]||Do)(e)}function $o(e){return new(e.dateProfileGeneratorClass||Lr)(e)}function Ko(e,t,n){return new Vo(e,t,n)}function ea(e){return ht(e,e=>e.ui)}function ta(e,t,n){let r={"":t};for(let t in e){let i=e[t];i.sourceId&&n[i.sourceId]&&(r[t]=n[i.sourceId])}return r}function na(e){let{options:t}=e;return{eventUiSingleBase:Tn({display:t.eventDisplay,editable:t.editable,startEditable:t.eventStartEditable,durationEditable:t.eventDurationEditable,constraint:t.eventConstraint,overlap:"boolean"==typeof t.eventOverlap?t.eventOverlap:void 0,allow:t.eventAllow,backgroundColor:t.eventBackgroundColor,borderColor:t.eventBorderColor,textColor:t.eventTextColor,color:t.eventColor},e),selectionConfig:Tn({constraint:t.selectConstraint,overlap:"boolean"==typeof t.selectOverlap?t.selectOverlap:void 0,allow:t.selectAllow},e)}}function ra(e,t){for(let n of t.pluginHooks.isLoadingFuncs)if(n(e))return!0;return!1}function ia(e){return Un(e.options.businessHours,e)}function sa(e,t){for(let n in e)console.warn(`Unknown option '${n}'`+(t?` for view '${t}'`:""))}class oa extends Br{render(){return f("div",{className:"fc-toolbar-chunk"},...this.props.widgetGroups.map(e=>this.renderWidgetGroup(e)))}renderWidgetGroup(e){let{props:t}=this,{theme:n}=this.context,r=[],i=!0;for(let s of e){let{buttonName:e,buttonClick:o,buttonText:a,buttonIcon:l,buttonHint:c}=s;if("title"===e)i=!1,r.push(f("h2",{className:"fc-toolbar-title",id:t.titleId},t.title));else{let i=e===t.activeButton,s=!t.isTodayEnabled&&"today"===e||!t.isPrevEnabled&&"prev"===e||!t.isNextEnabled&&"next"===e,d=[`fc-${e}-button`,n.getClass("button")];i&&d.push(n.getClass("buttonActive")),r.push(f("button",{type:"button",title:"function"==typeof c?c(t.navUnit):c,disabled:s,"aria-pressed":i,className:d.join(" "),onClick:o},a||(l?f("span",{className:l}):"")))}}if(r.length>1){return f("div",{className:i&&n.getClass("buttonGroup")||""},...r)}return r[0]}}class aa extends Br{render(){let e,t,{model:n,extraClassName:r}=this.props,i=!1,s=n.sectionWidgets,o=s.center;return s.left?(i=!0,e=s.left):e=s.start,s.right?(i=!0,t=s.right):t=s.end,f("div",{className:[r||"","fc-toolbar",i?"fc-toolbar-ltr":""].join(" ")},this.renderSection("start",e||[]),this.renderSection("center",o||[]),this.renderSection("end",t||[]))}renderSection(e,t){let{props:n}=this;return f(oa,{key:e,widgetGroups:t,title:n.title,navUnit:n.navUnit,activeButton:n.activeButton,isTodayEnabled:n.isTodayEnabled,isPrevEnabled:n.isPrevEnabled,isNextEnabled:n.isNextEnabled,titleId:n.titleId})}}class la extends Br{constructor(){super(...arguments),this.state={availableWidth:null},this.handleEl=e=>{this.el=e,jr(this.props.elRef,e),this.updateAvailableWidth()},this.handleResize=()=>{this.updateAvailableWidth()}}render(){let{props:e,state:t}=this,{aspectRatio:n}=e,r=["fc-view-harness",n||e.liquid||e.height?"fc-view-harness-active":"fc-view-harness-passive"],i="",s="";return n?null!==t.availableWidth?i=t.availableWidth/n:s=1/n*100+"%":i=e.height||"",f("div",{"aria-labelledby":e.labeledById,ref:this.handleEl,className:r.join(" "),style:{height:i,paddingBottom:s}},e.children)}componentDidMount(){this.context.addResizeHandler(this.handleResize)}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateAvailableWidth(){this.el&&this.props.aspectRatio&&this.setState({availableWidth:this.el.offsetWidth})}}class ca extends Ii{constructor(e){super(e),this.handleSegClick=(e,t)=>{let{component:n}=this,{context:r}=n,i=ti(t);if(i&&n.isValidSegDownEl(e.target)){let s=Ee(e.target,".fc-event-forced-url"),o=s?s.querySelector("a[href]").href:"";r.emitter.trigger("eventClick",{el:t,event:new Zr(n.context,i.eventRange.def,i.eventRange.instance),jsEvent:e,view:r.viewApi}),o&&!e.defaultPrevented&&(window.location.href=o)}},this.destroy=Me(e.el,"click",".fc-event",this.handleSegClick)}}class da extends Ii{constructor(e){super(e),this.handleEventElRemove=e=>{e===this.currentSegEl&&this.handleSegLeave(null,this.currentSegEl)},this.handleSegEnter=(e,t)=>{ti(t)&&(this.currentSegEl=t,this.triggerEvent("eventMouseEnter",e,t))},this.handleSegLeave=(e,t)=>{this.currentSegEl&&(this.currentSegEl=null,this.triggerEvent("eventMouseLeave",e,t))},this.removeHoverListeners=function(e,t,n,r){let i;return Me(e,"mouseover",t,(e,t)=>{if(t!==i){i=t,n(e,t);let s=e=>{i=null,r(e,t),t.removeEventListener("mouseleave",s)};t.addEventListener("mouseleave",s)}})}(e.el,".fc-event",this.handleSegEnter,this.handleSegLeave)}destroy(){this.removeHoverListeners()}triggerEvent(e,t,n){let{component:r}=this,{context:i}=r,s=ti(n);t&&!r.isValidSegDownEl(t.target)||i.emitter.trigger(e,{el:n,event:new Zr(i,s.eventRange.def,s.eventRange.instance),jsEvent:t,view:i.viewApi})}}class ua extends Hr{constructor(){super(...arguments),this.buildViewContext=Vt(Pr),this.buildViewPropTransformers=Vt(fa),this.buildToolbarProps=Vt(ha),this.headerRef={current:null},this.footerRef={current:null},this.interactionsStore={},this.state={viewLabelId:Te()},this.registerInteractiveComponent=(e,t)=>{let n=function(e,t){return{component:e,el:t.el,useEventCenter:null==t.useEventCenter||t.useEventCenter,isHitComboAllowed:t.isHitComboAllowed||null}}(e,t),r=[ca,da].concat(this.props.pluginHooks.componentInteractions).map(e=>new e(n));this.interactionsStore[e.uid]=r,Ni[e.uid]=n},this.unregisterInteractiveComponent=e=>{let t=this.interactionsStore[e.uid];if(t){for(let e of t)e.destroy();delete this.interactionsStore[e.uid]}delete Ni[e.uid]},this.resizeRunner=new ys(()=>{this.props.emitter.trigger("_resize",!0),this.props.emitter.trigger("windowResize",{view:this.props.viewApi})}),this.handleWindowResize=e=>{let{options:t}=this.props;t.handleWindowResize&&e.target===window&&this.resizeRunner.request(t.windowResizeDelay)}}render(){let e,{props:t}=this,{toolbarConfig:n,options:r}=t,i=this.buildToolbarProps(t.viewSpec,t.dateProfile,t.dateProfileGenerator,t.currentDate,Ur(t.options.now,t.dateEnv),t.viewTitle),s=!1,o="";t.isHeightAuto||t.forPrint?o="":null!=r.height?s=!0:null!=r.contentHeight?o=r.contentHeight:e=Math.max(r.aspectRatio,.5);let a=this.buildViewContext(t.viewSpec,t.viewApi,t.options,t.dateProfileGenerator,t.dateEnv,t.theme,t.pluginHooks,t.dispatch,t.getCurrentData,t.emitter,t.calendarApi,this.registerInteractiveComponent,this.unregisterInteractiveComponent),l=n.header&&n.header.hasTitle?this.state.viewLabelId:"";return f(Nr.Provider,{value:a},n.header&&f(aa,Object.assign({ref:this.headerRef,extraClassName:"fc-header-toolbar",model:n.header,titleId:l},i)),f(la,{liquid:s,height:o,aspectRatio:e,labeledById:l},this.renderView(t),this.buildAppendContent()),n.footer&&f(aa,Object.assign({ref:this.footerRef,extraClassName:"fc-footer-toolbar",model:n.footer,titleId:""},i)))}componentDidMount(){let{props:e}=this;this.calendarInteractions=e.pluginHooks.calendarInteractions.map(t=>new t(e)),window.addEventListener("resize",this.handleWindowResize);let{propSetHandlers:t}=e.pluginHooks;for(let n in t)t[n](e[n],e)}componentDidUpdate(e){let{props:t}=this,{propSetHandlers:n}=t.pluginHooks;for(let r in n)t[r]!==e[r]&&n[r](t[r],t)}componentWillUnmount(){window.removeEventListener("resize",this.handleWindowResize),this.resizeRunner.clear();for(let e of this.calendarInteractions)e.destroy();this.props.emitter.trigger("_unmount")}buildAppendContent(){let{props:e}=this;return f(p,{},...e.pluginHooks.viewContainerAppends.map(t=>t(e)))}renderView(e){let{pluginHooks:t}=e,{viewSpec:n}=e,r={dateProfile:e.dateProfile,businessHours:e.businessHours,eventStore:e.renderableEventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,isHeightAuto:e.isHeightAuto,forPrint:e.forPrint},i=this.buildViewPropTransformers(t.viewPropsTransformers);for(let t of i)Object.assign(r,t.transform(r,e));return f(n.component,Object.assign({},r))}}function ha(e,t,n,r,i,s){let o=n.build(i,void 0,!1),a=n.buildPrev(t,r,!1),l=n.buildNext(t,r,!1);return{title:s,activeButton:e.type,navUnit:e.singleUnit,isTodayEnabled:o.isValid&&!ar(t.currentRange,i),isPrevEnabled:a.isValid,isNextEnabled:l.isValid}}function fa(e){return e.map(e=>new e)}function ga(e){let t=vo(e.locale||"en",mo([]).map);return new wi(Object.assign(Object.assign({timeZone:ln.timeZone,calendarSystem:"gregory"},e),{locale:t}))}Hi.touchMouseIgnoreWait=500;let pa=0,ma=0,va=!1;class ba{constructor(e){this.subjectEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=e=>{if(!this.shouldIgnoreMouse()&&function(e){return 0===e.button&&!e.ctrlKey}(e)&&this.tryStart(e)){let t=this.createEventFromMouse(e,!0);this.emitter.trigger("pointerdown",t),this.initScrollWatch(t),this.shouldIgnoreMove||document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)}},this.handleMouseMove=e=>{let t=this.createEventFromMouse(e);this.recordCoords(t),this.emitter.trigger("pointermove",t)},this.handleMouseUp=e=>{document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),this.emitter.trigger("pointerup",this.createEventFromMouse(e)),this.cleanup()},this.handleTouchStart=e=>{if(this.tryStart(e)){this.isTouchDragging=!0;let t=this.createEventFromTouch(e,!0);this.emitter.trigger("pointerdown",t),this.initScrollWatch(t);let n=e.target;this.shouldIgnoreMove||n.addEventListener("touchmove",this.handleTouchMove),n.addEventListener("touchend",this.handleTouchEnd),n.addEventListener("touchcancel",this.handleTouchEnd),window.addEventListener("scroll",this.handleTouchScroll,!0)}},this.handleTouchMove=e=>{let t=this.createEventFromTouch(e);this.recordCoords(t),this.emitter.trigger("pointermove",t)},this.handleTouchEnd=e=>{if(this.isDragging){let t=e.target;t.removeEventListener("touchmove",this.handleTouchMove),t.removeEventListener("touchend",this.handleTouchEnd),t.removeEventListener("touchcancel",this.handleTouchEnd),window.removeEventListener("scroll",this.handleTouchScroll,!0),this.emitter.trigger("pointerup",this.createEventFromTouch(e)),this.cleanup(),this.isTouchDragging=!1,pa+=1,setTimeout(()=>{pa-=1},Hi.touchMouseIgnoreWait)}},this.handleTouchScroll=()=>{this.wasTouchScroll=!0},this.handleScroll=e=>{if(!this.shouldIgnoreMove){let t=window.pageXOffset-this.prevScrollX+this.prevPageX,n=window.pageYOffset-this.prevScrollY+this.prevPageY;this.emitter.trigger("pointermove",{origEvent:e,isTouch:this.isTouchDragging,subjectEl:this.subjectEl,pageX:t,pageY:n,deltaX:t-this.origPageX,deltaY:n-this.origPageY})}},this.containerEl=e,this.emitter=new Sr,e.addEventListener("mousedown",this.handleMouseDown),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),ma+=1,1===ma&&window.addEventListener("touchmove",ya,{passive:!1})}destroy(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),ma-=1,ma||window.removeEventListener("touchmove",ya,{passive:!1})}tryStart(e){let t=this.querySubjectEl(e),n=e.target;return!(!t||this.handleSelector&&!Ee(n,this.handleSelector))&&(this.subjectEl=t,this.isDragging=!0,this.wasTouchScroll=!1,!0)}cleanup(){va=!1,this.isDragging=!1,this.subjectEl=null,this.destroyScrollWatch()}querySubjectEl(e){return this.selector?Ee(e.target,this.selector):this.containerEl}shouldIgnoreMouse(){return pa||this.isTouchDragging}cancelTouchScroll(){this.isDragging&&(va=!0)}initScrollWatch(e){this.shouldWatchScroll&&(this.recordCoords(e),window.addEventListener("scroll",this.handleScroll,!0))}recordCoords(e){this.shouldWatchScroll&&(this.prevPageX=e.pageX,this.prevPageY=e.pageY,this.prevScrollX=window.pageXOffset,this.prevScrollY=window.pageYOffset)}destroyScrollWatch(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)}createEventFromMouse(e,t){let n=0,r=0;return t?(this.origPageX=e.pageX,this.origPageY=e.pageY):(n=e.pageX-this.origPageX,r=e.pageY-this.origPageY),{origEvent:e,isTouch:!1,subjectEl:this.subjectEl,pageX:e.pageX,pageY:e.pageY,deltaX:n,deltaY:r}}createEventFromTouch(e,t){let n,r,i=e.touches,s=0,o=0;return i&&i.length?(n=i[0].pageX,r=i[0].pageY):(n=e.pageX,r=e.pageY),t?(this.origPageX=n,this.origPageY=r):(s=n-this.origPageX,o=r-this.origPageY),{origEvent:e,isTouch:!0,subjectEl:this.subjectEl,pageX:n,pageY:r,deltaX:s,deltaY:o}}}function ya(e){va&&e.preventDefault()}class Ea{constructor(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}start(e,t,n){this.sourceEl=e,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=t-window.pageXOffset,this.origScreenY=n-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()}handleMove(e,t){this.deltaX=e-window.pageXOffset-this.origScreenX,this.deltaY=t-window.pageYOffset-this.origScreenY,this.updateElPosition()}setIsVisible(e){e?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=e,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=e)}stop(e,t){let n=()=>{this.cleanup(),t()};e&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(n,this.revertDuration):setTimeout(n,0)}doRevertAnimation(e,t){let n=this.mirrorEl,r=this.sourceEl.getBoundingClientRect();n.style.transition="top "+t+"ms,left "+t+"ms",we(n,{left:r.left,top:r.top}),Oe(n,()=>{n.style.transition="",e()})}cleanup(){this.mirrorEl&&(ye(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null}updateElPosition(){this.sourceEl&&this.isVisible&&we(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})}getMirrorEl(){let e=this.sourceElRect,t=this.mirrorEl;return t||(t=this.mirrorEl=this.sourceEl.cloneNode(!0),t.classList.add("fc-unselectable"),t.classList.add("fc-event-dragging"),we(t,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:e.right-e.left,height:e.bottom-e.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(t)),t}}class Aa extends Rr{constructor(e,t){super(),this.handleScroll=()=>{this.scrollTop=this.scrollController.getScrollTop(),this.scrollLeft=this.scrollController.getScrollLeft(),this.handleScrollChange()},this.scrollController=e,this.doesListening=t,this.scrollTop=this.origScrollTop=e.getScrollTop(),this.scrollLeft=this.origScrollLeft=e.getScrollLeft(),this.scrollWidth=e.getScrollWidth(),this.scrollHeight=e.getScrollHeight(),this.clientWidth=e.getClientWidth(),this.clientHeight=e.getClientHeight(),this.clientRect=this.computeClientRect(),this.doesListening&&this.getEventTarget().addEventListener("scroll",this.handleScroll)}destroy(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}setScrollTop(e){this.scrollController.setScrollTop(e),this.doesListening||(this.scrollTop=Math.max(Math.min(e,this.getMaxScrollTop()),0),this.handleScrollChange())}setScrollLeft(e){this.scrollController.setScrollLeft(e),this.doesListening||(this.scrollLeft=Math.max(Math.min(e,this.getMaxScrollLeft()),0),this.handleScrollChange())}getClientWidth(){return this.clientWidth}getClientHeight(){return this.clientHeight}getScrollWidth(){return this.scrollWidth}getScrollHeight(){return this.scrollHeight}handleScrollChange(){}}class Da extends Aa{constructor(e,t){super(new xr(e),t)}getEventTarget(){return this.scrollController.el}computeClientRect(){return yr(this.scrollController.el)}}class Sa extends Aa{constructor(e){super(new _r,e)}getEventTarget(){return window}computeClientRect(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}}handleScrollChange(){this.clientRect=this.computeClientRect()}}const wa="function"==typeof performance?performance.now:Date.now;class Ca{constructor(){this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=()=>{if(this.isAnimating){let e=this.computeBestEdge(this.pointerScreenX+window.pageXOffset,this.pointerScreenY+window.pageYOffset);if(e){let t=wa();this.handleSide(e,(t-this.msSinceRequest)/1e3),this.requestAnimation(t)}else this.isAnimating=!1}}}start(e,t,n){this.isEnabled&&(this.scrollCaches=this.buildCaches(n),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(e,t))}handleMove(e,t){if(this.isEnabled){let n=e-window.pageXOffset,r=t-window.pageYOffset,i=null===this.pointerScreenY?0:r-this.pointerScreenY,s=null===this.pointerScreenX?0:n-this.pointerScreenX;i<0?this.everMovedUp=!0:i>0&&(this.everMovedDown=!0),s<0?this.everMovedLeft=!0:s>0&&(this.everMovedRight=!0),this.pointerScreenX=n,this.pointerScreenY=r,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(wa()))}}stop(){if(this.isEnabled){this.isAnimating=!1;for(let e of this.scrollCaches)e.destroy();this.scrollCaches=null}}requestAnimation(e){this.msSinceRequest=e,requestAnimationFrame(this.animate)}handleSide(e,t){let{scrollCache:n}=e,{edgeThreshold:r}=this,i=r-e.distance,s=i*i/(r*r)*this.maxVelocity*t,o=1;switch(e.name){case"left":o=-1;case"right":n.setScrollLeft(n.getScrollLeft()+s*o);break;case"top":o=-1;case"bottom":n.setScrollTop(n.getScrollTop()+s*o)}}computeBestEdge(e,t){let{edgeThreshold:n}=this,r=null,i=this.scrollCaches||[];for(let s of i){let i=s.clientRect,o=e-i.left,a=i.right-e,l=t-i.top,c=i.bottom-t;o>=0&&a>=0&&l>=0&&c>=0&&(l<=n&&this.everMovedUp&&s.canScrollUp()&&(!r||r.distance>l)&&(r={scrollCache:s,name:"top",distance:l}),c<=n&&this.everMovedDown&&s.canScrollDown()&&(!r||r.distance>c)&&(r={scrollCache:s,name:"bottom",distance:c}),o<=n&&this.everMovedLeft&&s.canScrollLeft()&&(!r||r.distance>o)&&(r={scrollCache:s,name:"left",distance:o}),a<=n&&this.everMovedRight&&s.canScrollRight()&&(!r||r.distance>a)&&(r={scrollCache:s,name:"right",distance:a}))}return r}buildCaches(e){return this.queryScrollEls(e).map(e=>e===window?new Sa(!1):new Da(e,!1))}queryScrollEls(e){let t=[];for(let n of this.scrollQuery)"object"==typeof n?t.push(n):t.push(...Array.prototype.slice.call(xe(e).querySelectorAll(n)));return t}}class Ra extends Pi{constructor(e,t){super(e),this.containerEl=e,this.delay=null,this.minDistance=0,this.touchScrollAllowed=!0,this.mirrorNeedsRevert=!1,this.isInteracting=!1,this.isDragging=!1,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,this.delayTimeoutId=null,this.onPointerDown=e=>{this.isDragging||(this.isInteracting=!0,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,Ue(document.body),We(document.body),e.isTouch||e.origEvent.preventDefault(),this.emitter.trigger("pointerdown",e),this.isInteracting&&!this.pointer.shouldIgnoreMove&&(this.mirror.setIsVisible(!1),this.mirror.start(e.subjectEl,e.pageX,e.pageY),this.startDelay(e),this.minDistance||this.handleDistanceSurpassed(e)))},this.onPointerMove=e=>{if(this.isInteracting){if(this.emitter.trigger("pointermove",e),!this.isDistanceSurpassed){let t,n=this.minDistance,{deltaX:r,deltaY:i}=e;t=r*r+i*i,t>=n*n&&this.handleDistanceSurpassed(e)}this.isDragging&&("scroll"!==e.origEvent.type&&(this.mirror.handleMove(e.pageX,e.pageY),this.autoScroller.handleMove(e.pageX,e.pageY)),this.emitter.trigger("dragmove",e))}},this.onPointerUp=e=>{this.isInteracting&&(this.isInteracting=!1,Le(document.body),Fe(document.body),this.emitter.trigger("pointerup",e),this.isDragging&&(this.autoScroller.stop(),this.tryStopDrag(e)),this.delayTimeoutId&&(clearTimeout(this.delayTimeoutId),this.delayTimeoutId=null))};let n=this.pointer=new ba(e);n.emitter.on("pointerdown",this.onPointerDown),n.emitter.on("pointermove",this.onPointerMove),n.emitter.on("pointerup",this.onPointerUp),t&&(n.selector=t),this.mirror=new Ea,this.autoScroller=new Ca}destroy(){this.pointer.destroy(),this.onPointerUp({})}startDelay(e){"number"==typeof this.delay?this.delayTimeoutId=setTimeout(()=>{this.delayTimeoutId=null,this.handleDelayEnd(e)},this.delay):this.handleDelayEnd(e)}handleDelayEnd(e){this.isDelayEnded=!0,this.tryStartDrag(e)}handleDistanceSurpassed(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)}tryStartDrag(e){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(e.pageX,e.pageY,this.containerEl),this.emitter.trigger("dragstart",e),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))}tryStopDrag(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))}stopDrag(e){this.isDragging=!1,this.emitter.trigger("dragend",e)}setIgnoreMove(e){this.pointer.shouldIgnoreMove=e}setMirrorIsVisible(e){this.mirror.setIsVisible(e)}setMirrorNeedsRevert(e){this.mirrorNeedsRevert=e}setAutoScrollEnabled(e){this.autoScroller.isEnabled=e}}class xa{constructor(e){this.origRect=Er(e),this.scrollCaches=Ar(e).map(e=>new Da(e,!0))}destroy(){for(let e of this.scrollCaches)e.destroy()}computeLeft(){let e=this.origRect.left;for(let t of this.scrollCaches)e+=t.origScrollLeft-t.getScrollLeft();return e}computeTop(){let e=this.origRect.top;for(let t of this.scrollCaches)e+=t.origScrollTop-t.getScrollTop();return e}isWithinClipping(e,t){let n={left:e,top:t};for(let e of this.scrollCaches)if(!_a(e.getEventTarget())&&!Gn(n,e.clientRect))return!1;return!0}}function _a(e){let t=e.tagName;return"HTML"===t||"BODY"===t}class Ta{constructor(e,t){this.useSubjectCenter=!1,this.requireInitial=!0,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=e=>{let{dragging:t}=this;this.initialHit=null,this.movingHit=null,this.finalHit=null,this.prepareHits(),this.processFirstCoord(e),this.initialHit||!this.requireInitial?(t.setIgnoreMove(!1),this.emitter.trigger("pointerdown",e)):t.setIgnoreMove(!0)},this.handleDragStart=e=>{this.emitter.trigger("dragstart",e),this.handleMove(e,!0)},this.handleDragMove=e=>{this.emitter.trigger("dragmove",e),this.handleMove(e)},this.handlePointerUp=e=>{this.releaseHits(),this.emitter.trigger("pointerup",e)},this.handleDragEnd=e=>{this.movingHit&&this.emitter.trigger("hitupdate",null,!0,e),this.finalHit=this.movingHit,this.movingHit=null,this.emitter.trigger("dragend",e)},this.droppableStore=t,e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragstart",this.handleDragStart),e.emitter.on("dragmove",this.handleDragMove),e.emitter.on("pointerup",this.handlePointerUp),e.emitter.on("dragend",this.handleDragEnd),this.dragging=e,this.emitter=new Sr}processFirstCoord(e){let t,n={left:e.pageX,top:e.pageY},r=n,i=e.subjectEl;i instanceof HTMLElement&&(t=Er(i),r=qn(r,t));let s=this.initialHit=this.queryHitForOffset(r.left,r.top);if(s){if(this.useSubjectCenter&&t){let e=Qn(t,s.rect);e&&(r=Yn(e))}this.coordAdjust=Zn(r,n)}else this.coordAdjust={left:0,top:0}}handleMove(e,t){let n=this.queryHitForOffset(e.pageX+this.coordAdjust.left,e.pageY+this.coordAdjust.top);!t&&ka(this.movingHit,n)||(this.movingHit=n,this.emitter.trigger("hitupdate",n,!1,e))}prepareHits(){this.offsetTrackers=ht(this.droppableStore,e=>(e.component.prepareHits(),new xa(e.el)))}releaseHits(){let{offsetTrackers:e}=this;for(let t in e)e[t].destroy();this.offsetTrackers={}}queryHitForOffset(e,t){let{droppableStore:n,offsetTrackers:r}=this,i=null;for(let s in n){let o=n[s].component,a=r[s];if(a&&a.isWithinClipping(e,t)){let n=a.computeLeft(),r=a.computeTop(),l=e-n,c=t-r,{origRect:d}=a,u=d.right-d.left,h=d.bottom-d.top;if(l>=0&&l<u&&c>=0&&c<h){let e=o.queryHit(l,c,u,h);e&&or(e.dateProfile.activeRange,e.dateSpan.range)&&(!i||e.layer>i.layer)&&(e.componentId=s,e.context=o.context,e.rect.left+=n,e.rect.right+=n,e.rect.top+=r,e.rect.bottom+=r,i=e)}}}return i}}function ka(e,t){return!e&&!t||Boolean(e)===Boolean(t)&&mi(e.dateSpan,t.dateSpan)}function Ma(e,t){let n={};for(let r of t.pluginHooks.datePointTransforms)Object.assign(n,r(e,t));var r,i;return Object.assign(n,(r=e,{date:(i=t.dateEnv).toDate(r.range.start),dateStr:i.formatIso(r.range.start,{omitTime:r.allDay}),allDay:r.allDay})),n}class Ia extends Ii{constructor(e){super(e),this.subjectEl=null,this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=e=>{let t=e.origEvent.target,{component:n,dragging:r}=this,{mirror:i}=r,{options:s}=n.context,o=n.context;this.subjectEl=e.subjectEl;let a=this.subjectSeg=ti(e.subjectEl),l=(this.eventRange=a.eventRange).instance.instanceId;this.relevantEvents=Dn(o.getCurrentData().eventStore,l),r.minDistance=e.isTouch?0:s.eventDragMinDistance,r.delay=e.isTouch&&l!==n.props.eventSelection?function(e){let{options:t}=e.context,n=t.eventLongPressDelay;null==n&&(n=t.longPressDelay);return n}(n):null,s.fixedMirrorParent?i.parentNode=s.fixedMirrorParent:i.parentNode=Ee(t,".fc"),i.revertDuration=s.dragRevertDuration;let c=n.isValidSegDownEl(t)&&!Ee(t,".fc-event-resizer");r.setIgnoreMove(!c),this.isDragging=c&&e.subjectEl.classList.contains("fc-event-draggable")},this.handleDragStart=e=>{let t=this.component.context,n=this.eventRange,r=n.instance.instanceId;e.isTouch?r!==this.component.props.eventSelection&&t.dispatch({type:"SELECT_EVENT",eventInstanceId:r}):t.dispatch({type:"UNSELECT_EVENT"}),this.isDragging&&(t.calendarApi.unselect(e),t.emitter.trigger("eventDragStart",{el:this.subjectEl,event:new Zr(t,n.def,n.instance),jsEvent:e.origEvent,view:t.viewApi}))},this.handleHitUpdate=(e,t)=>{if(!this.isDragging)return;let n=this.relevantEvents,r=this.hitDragging.initialHit,i=this.component.context,s=null,o=null,a=null,l=!1,c={affectedEvents:n,mutatedEvents:{defs:{},instances:{}},isEvent:!0};if(e){s=e.context;let t=s.options;i===s||t.editable&&t.droppable?(o=function(e,t,n){let r=e.dateSpan,i=t.dateSpan,s=r.range.start,o=i.range.start,a={};r.allDay!==i.allDay&&(a.allDay=i.allDay,a.hasEnd=t.context.options.allDayMaintainDuration,i.allDay&&(s=kt(s)));let l=Vn(s,o,e.context.dateEnv,e.componentId===t.componentId?e.largeUnit:null);l.milliseconds&&(a.allDay=!1);let c={datesDelta:l,standardProps:a};for(let r of n)r(c,e,t);return c}(r,e,s.getCurrentData().pluginHooks.eventDragMutationMassagers),o&&(a=Gr(n,s.getCurrentData().eventUiBases,o,s),c.mutatedEvents=a,cs(c,e.dateProfile,s)||(l=!0,o=null,a=null,c.mutatedEvents={defs:{},instances:{}}))):s=null}this.displayDrag(s,c),l?je():ze(),t||(i===s&&ka(r,e)&&(o=null),this.dragging.setMirrorNeedsRevert(!o),this.dragging.setMirrorIsVisible(!e||!xe(this.subjectEl).querySelector(".fc-event-mirror")),this.receivingContext=s,this.validMutation=o,this.mutatedRelevantEvents=a)},this.handlePointerUp=()=>{this.isDragging||this.cleanup()},this.handleDragEnd=e=>{if(this.isDragging){let t=this.component.context,n=t.viewApi,{receivingContext:r,validMutation:i}=this,s=this.eventRange.def,o=this.eventRange.instance,a=new Zr(t,s,o),l=this.relevantEvents,c=this.mutatedRelevantEvents,{finalHit:d}=this.hitDragging;if(this.clearDrag(),t.emitter.trigger("eventDragStop",{el:this.subjectEl,event:a,jsEvent:e.origEvent,view:n}),i){if(r===t){let r=new Zr(t,c.defs[s.defId],o?c.instances[o.instanceId]:null);t.dispatch({type:"MERGE_EVENTS",eventStore:c});let d={oldEvent:a,event:r,relatedEvents:Jr(c,t,o),revert(){t.dispatch({type:"MERGE_EVENTS",eventStore:l})}},u={};for(let e of t.getCurrentData().pluginHooks.eventDropTransformers)Object.assign(u,e(i,t));t.emitter.trigger("eventDrop",Object.assign(Object.assign(Object.assign({},d),u),{el:e.subjectEl,delta:i.datesDelta,jsEvent:e.origEvent,view:n})),t.emitter.trigger("eventChange",d)}else if(r){let i={event:a,relatedEvents:Jr(l,t,o),revert(){t.dispatch({type:"MERGE_EVENTS",eventStore:l})}};t.emitter.trigger("eventLeave",Object.assign(Object.assign({},i),{draggedEl:e.subjectEl,view:n})),t.dispatch({type:"REMOVE_EVENTS",eventStore:l}),t.emitter.trigger("eventRemove",i);let u=c.defs[s.defId],h=c.instances[o.instanceId],f=new Zr(r,u,h);r.dispatch({type:"MERGE_EVENTS",eventStore:c});let g={event:f,relatedEvents:Jr(c,r,h),revert(){r.dispatch({type:"REMOVE_EVENTS",eventStore:c})}};r.emitter.trigger("eventAdd",g),e.isTouch&&r.dispatch({type:"SELECT_EVENT",eventInstanceId:o.instanceId}),r.emitter.trigger("drop",Object.assign(Object.assign({},Ma(d.dateSpan,r)),{draggedEl:e.subjectEl,jsEvent:e.origEvent,view:d.context.viewApi})),r.emitter.trigger("eventReceive",Object.assign(Object.assign({},g),{draggedEl:e.subjectEl,view:d.context.viewApi}))}}else t.emitter.trigger("_noEventDrop")}this.cleanup()};let{component:t}=this,{options:n}=t.context,r=this.dragging=new Ra(e.el);r.pointer.selector=Ia.SELECTOR,r.touchScrollAllowed=!1,r.autoScroller.isEnabled=n.dragScroll;let i=this.hitDragging=new Ta(this.dragging,Ni);i.useSubjectCenter=e.useEventCenter,i.emitter.on("pointerdown",this.handlePointerDown),i.emitter.on("dragstart",this.handleDragStart),i.emitter.on("hitupdate",this.handleHitUpdate),i.emitter.on("pointerup",this.handlePointerUp),i.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}displayDrag(e,t){let n=this.component.context,r=this.receivingContext;r&&r!==e&&(r===n?r.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:t.affectedEvents,mutatedEvents:{defs:{},instances:{}},isEvent:!0}}):r.dispatch({type:"UNSET_EVENT_DRAG"})),e&&e.dispatch({type:"SET_EVENT_DRAG",state:t})}clearDrag(){let e=this.component.context,{receivingContext:t}=this;t&&t.dispatch({type:"UNSET_EVENT_DRAG"}),e!==t&&e.dispatch({type:"UNSET_EVENT_DRAG"})}cleanup(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null}}Ia.SELECTOR=".fc-event-draggable, .fc-event-resizable";const Oa={fixedMirrorParent:mn},Na={dateClick:mn,eventDragStart:mn,eventDragStop:mn,eventDrop:mn,eventResizeStart:mn,eventResizeStop:mn,eventResize:mn,drop:mn,eventReceive:mn,eventLeave:mn};class Pa{constructor(e,t){this.receivingContext=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=e=>{this.dragMeta=this.buildDragMeta(e.subjectEl)},this.handleHitUpdate=(e,t,n)=>{let{dragging:r}=this.hitDragging,i=null,s=null,o=!1,a={affectedEvents:{defs:{},instances:{}},mutatedEvents:{defs:{},instances:{}},isEvent:this.dragMeta.create};e&&(i=e.context,this.canDropElOnCalendar(n.subjectEl,i)&&(s=function(e,t,n){let r=Object.assign({},t.leftoverProps);for(let i of n.pluginHooks.externalDefTransforms)Object.assign(r,i(e,t));let{refined:i,extra:s}=Hn(r,n),o=jn(i,s,t.sourceId,e.allDay,n.options.forceEventDuration||Boolean(t.duration),n),a=e.range.start;e.allDay&&t.startTime&&(a=n.dateEnv.add(a,t.startTime));let l=t.duration?n.dateEnv.add(a,t.duration):Vr(e.allDay,a,n),c=vn(o.defId,{start:a,end:l});return{def:o,instance:c}}(e.dateSpan,this.dragMeta,i),a.mutatedEvents=An(s),o=!cs(a,e.dateProfile,i),o&&(a.mutatedEvents={defs:{},instances:{}},s=null))),this.displayDrag(i,a),r.setMirrorIsVisible(t||!s||!document.querySelector(".fc-event-mirror")),o?je():ze(),t||(r.setMirrorNeedsRevert(!s),this.receivingContext=i,this.droppableEvent=s)},this.handleDragEnd=e=>{let{receivingContext:t,droppableEvent:n}=this;if(this.clearDrag(),t&&n){let r=this.hitDragging.finalHit,i=r.context.viewApi,s=this.dragMeta;if(t.emitter.trigger("drop",Object.assign(Object.assign({},Ma(r.dateSpan,t)),{draggedEl:e.subjectEl,jsEvent:e.origEvent,view:i})),s.create){let r=An(n);t.dispatch({type:"MERGE_EVENTS",eventStore:r}),e.isTouch&&t.dispatch({type:"SELECT_EVENT",eventInstanceId:n.instance.instanceId}),t.emitter.trigger("eventReceive",{event:new Zr(t,n.def,n.instance),relatedEvents:[],revert(){t.dispatch({type:"REMOVE_EVENTS",eventStore:r})},draggedEl:e.subjectEl,view:i})}}this.receivingContext=null,this.droppableEvent=null};let n=this.hitDragging=new Ta(e,Ni);n.requireInitial=!1,n.emitter.on("dragstart",this.handleDragStart),n.emitter.on("hitupdate",this.handleHitUpdate),n.emitter.on("dragend",this.handleDragEnd),this.suppliedDragMeta=t}buildDragMeta(e){return"object"==typeof this.suppliedDragMeta?ji(this.suppliedDragMeta):"function"==typeof this.suppliedDragMeta?ji(this.suppliedDragMeta(e)):function(e){let t=function(e,t){let n=Hi.dataAttrPrefix,r=(n?n+"-":"")+t;return e.getAttribute("data-"+r)||""}(e,"event");return ji(t?JSON.parse(t):{create:!1})}(e)}displayDrag(e,t){let n=this.receivingContext;n&&n!==e&&n.dispatch({type:"UNSET_EVENT_DRAG"}),e&&e.dispatch({type:"SET_EVENT_DRAG",state:t})}clearDrag(){this.receivingContext&&this.receivingContext.dispatch({type:"UNSET_EVENT_DRAG"})}canDropElOnCalendar(e,t){let n=t.options.dropAccept;return"function"==typeof n?n.call(t.calendarApi,e):"string"!=typeof n||!n||Boolean(Ae(e,n))}}Hi.dataAttrPrefix="";class Ha extends Pi{constructor(e){super(e),this.shouldIgnoreMove=!1,this.mirrorSelector="",this.currentMirrorEl=null,this.handlePointerDown=e=>{this.emitter.trigger("pointerdown",e),this.shouldIgnoreMove||this.emitter.trigger("dragstart",e)},this.handlePointerMove=e=>{this.shouldIgnoreMove||this.emitter.trigger("dragmove",e)},this.handlePointerUp=e=>{this.emitter.trigger("pointerup",e),this.shouldIgnoreMove||this.emitter.trigger("dragend",e)};let t=this.pointer=new ba(e);t.emitter.on("pointerdown",this.handlePointerDown),t.emitter.on("pointermove",this.handlePointerMove),t.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.pointer.destroy()}setIgnoreMove(e){this.shouldIgnoreMove=e}setMirrorIsVisible(e){if(e)this.currentMirrorEl&&(this.currentMirrorEl.style.visibility="",this.currentMirrorEl=null);else{let e=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;e&&(this.currentMirrorEl=e,e.style.visibility="hidden")}}}var Ba=yo({name:"@fullcalendar/interaction",componentInteractions:[class extends Ii{constructor(e){super(e),this.handlePointerDown=e=>{let{dragging:t}=this,n=e.origEvent.target;t.setIgnoreMove(!this.component.isValidDateDownEl(n))},this.handleDragEnd=e=>{let{component:t}=this,{pointer:n}=this.dragging;if(!n.wasTouchScroll){let{initialHit:n,finalHit:r}=this.hitDragging;if(n&&r&&ka(n,r)){let{context:r}=t,i=Object.assign(Object.assign({},Ma(n.dateSpan,r)),{dayEl:n.dayEl,jsEvent:e.origEvent,view:r.viewApi||r.calendarApi.view});r.emitter.trigger("dateClick",i)}}},this.dragging=new Ra(e.el),this.dragging.autoScroller.isEnabled=!1;let t=this.hitDragging=new Ta(this.dragging,Oi(e));t.emitter.on("pointerdown",this.handlePointerDown),t.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}},class extends Ii{constructor(e){super(e),this.dragSelection=null,this.handlePointerDown=e=>{let{component:t,dragging:n}=this,{options:r}=t.context,i=r.selectable&&t.isValidDateDownEl(e.origEvent.target);n.setIgnoreMove(!i),n.delay=e.isTouch?function(e){let{options:t}=e.context,n=t.selectLongPressDelay;null==n&&(n=t.longPressDelay);return n}(t):null},this.handleDragStart=e=>{this.component.context.calendarApi.unselect(e)},this.handleHitUpdate=(e,t)=>{let{context:n}=this.component,r=null,i=!1;if(e){let t=this.hitDragging.initialHit;e.componentId===t.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(t,e)||(r=function(e,t,n){let r=e.dateSpan,i=t.dateSpan,s=[r.range.start,r.range.end,i.range.start,i.range.end];s.sort(Xe);let o={};for(let r of n){let n=r(e,t);if(!1===n)return null;n&&Object.assign(o,n)}return o.range={start:s[0],end:s[3]},o.allDay=r.allDay,o}(t,e,n.pluginHooks.dateSelectionTransformers)),r&&ds(r,e.dateProfile,n)||(i=!0,r=null)}r?n.dispatch({type:"SELECT_DATES",selection:r}):t||n.dispatch({type:"UNSELECT_DATES"}),i?je():ze(),t||(this.dragSelection=r)},this.handlePointerUp=e=>{this.dragSelection&&(Wr(this.dragSelection,e,this.component.context),this.dragSelection=null)};let{component:t}=e,{options:n}=t.context,r=this.dragging=new Ra(e.el);r.touchScrollAllowed=!1,r.minDistance=n.selectMinDistance||0,r.autoScroller.isEnabled=n.dragScroll;let i=this.hitDragging=new Ta(this.dragging,Oi(e));i.emitter.on("pointerdown",this.handlePointerDown),i.emitter.on("dragstart",this.handleDragStart),i.emitter.on("hitupdate",this.handleHitUpdate),i.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.dragging.destroy()}},Ia,class extends Ii{constructor(e){super(e),this.draggingSegEl=null,this.draggingSeg=null,this.eventRange=null,this.relevantEvents=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=e=>{let{component:t}=this,n=ti(this.querySegEl(e)),r=this.eventRange=n.eventRange;this.dragging.minDistance=t.context.options.eventDragMinDistance,this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(e.origEvent.target)||e.isTouch&&this.component.props.eventSelection!==r.instance.instanceId)},this.handleDragStart=e=>{let{context:t}=this.component,n=this.eventRange;this.relevantEvents=Dn(t.getCurrentData().eventStore,this.eventRange.instance.instanceId);let r=this.querySegEl(e);this.draggingSegEl=r,this.draggingSeg=ti(r),t.calendarApi.unselect(),t.emitter.trigger("eventResizeStart",{el:r,event:new Zr(t,n.def,n.instance),jsEvent:e.origEvent,view:t.viewApi})},this.handleHitUpdate=(e,t,n)=>{let{context:r}=this.component,i=this.relevantEvents,s=this.hitDragging.initialHit,o=this.eventRange.instance,a=null,l=null,c=!1,d={affectedEvents:i,mutatedEvents:{defs:{},instances:{}},isEvent:!0};if(e){e.componentId===s.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(s,e)||(a=function(e,t,n,r){let i=e.context.dateEnv,s=e.dateSpan.range.start,o=t.dateSpan.range.start,a=Vn(s,o,i,e.largeUnit);if(n){if(i.add(r.start,a)<r.end)return{startDelta:a}}else if(i.add(r.end,a)>r.start)return{endDelta:a};return null}(s,e,n.subjectEl.classList.contains("fc-event-resizer-start"),o.range))}a&&(l=Gr(i,r.getCurrentData().eventUiBases,a,r),d.mutatedEvents=l,cs(d,e.dateProfile,r)||(c=!0,a=null,l=null,d.mutatedEvents=null)),l?r.dispatch({type:"SET_EVENT_RESIZE",state:d}):r.dispatch({type:"UNSET_EVENT_RESIZE"}),c?je():ze(),t||(a&&ka(s,e)&&(a=null),this.validMutation=a,this.mutatedRelevantEvents=l)},this.handleDragEnd=e=>{let{context:t}=this.component,n=this.eventRange.def,r=this.eventRange.instance,i=new Zr(t,n,r),s=this.relevantEvents,o=this.mutatedRelevantEvents;if(t.emitter.trigger("eventResizeStop",{el:this.draggingSegEl,event:i,jsEvent:e.origEvent,view:t.viewApi}),this.validMutation){let a=new Zr(t,o.defs[n.defId],r?o.instances[r.instanceId]:null);t.dispatch({type:"MERGE_EVENTS",eventStore:o});let l={oldEvent:i,event:a,relatedEvents:Jr(o,t,r),revert(){t.dispatch({type:"MERGE_EVENTS",eventStore:s})}};t.emitter.trigger("eventResize",Object.assign(Object.assign({},l),{el:this.draggingSegEl,startDelta:this.validMutation.startDelta||tt(0),endDelta:this.validMutation.endDelta||tt(0),jsEvent:e.origEvent,view:t.viewApi})),t.emitter.trigger("eventChange",l)}else t.emitter.trigger("_noEventResize");this.draggingSeg=null,this.relevantEvents=null,this.validMutation=null};let{component:t}=e,n=this.dragging=new Ra(e.el);n.pointer.selector=".fc-event-resizer",n.touchScrollAllowed=!1,n.autoScroller.isEnabled=t.context.options.dragScroll;let r=this.hitDragging=new Ta(this.dragging,Oi(e));r.emitter.on("pointerdown",this.handlePointerDown),r.emitter.on("dragstart",this.handleDragStart),r.emitter.on("hitupdate",this.handleHitUpdate),r.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}querySegEl(e){return Ee(e.subjectEl,".fc-event")}}],calendarInteractions:[class{constructor(e){this.context=e,this.isRecentPointerDateSelect=!1,this.matchesCancel=!1,this.matchesEvent=!1,this.onSelect=e=>{e.jsEvent&&(this.isRecentPointerDateSelect=!0)},this.onDocumentPointerDown=e=>{let t=this.context.options.unselectCancel,n=Re(e.origEvent);this.matchesCancel=!!Ee(n,t),this.matchesEvent=!!Ee(n,Ia.SELECTOR)},this.onDocumentPointerUp=e=>{let{context:t}=this,{documentPointer:n}=this,r=t.getCurrentData();if(!n.wasTouchScroll){if(r.dateSelection&&!this.isRecentPointerDateSelect){let n=t.options.unselectAuto;!n||n&&this.matchesCancel||t.calendarApi.unselect(e)}r.eventSelection&&!this.matchesEvent&&t.dispatch({type:"UNSELECT_EVENT"})}this.isRecentPointerDateSelect=!1};let t=this.documentPointer=new ba(document);t.shouldIgnoreMove=!0,t.shouldWatchScroll=!1,t.emitter.on("pointerdown",this.onDocumentPointerDown),t.emitter.on("pointerup",this.onDocumentPointerUp),e.emitter.on("select",this.onSelect)}destroy(){this.context.emitter.off("select",this.onSelect),this.documentPointer.destroy()}}],elementDraggingImpl:Ra,optionRefiners:Oa,listenerRefiners:Na});class ja extends zr{constructor(){super(...arguments),this.headerElRef={current:null}}renderSimpleLayout(e,t){let{props:n,context:r}=this,i=[],s=Ns(r.options);return e&&i.push({type:"header",key:"header",isSticky:s,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),i.push({type:"body",key:"body",liquid:!0,chunk:{content:t}}),f(io,{elClasses:["fc-daygrid"],viewSpec:r.viewSpec},f(Hs,{liquid:!n.isHeightAuto&&!n.forPrint,collapsibleWidth:n.forPrint,cols:[],sections:i}))}renderHScrollLayout(e,t,n,r){let i=this.context.pluginHooks.scrollGridImpl;if(!i)throw new Error("No ScrollGrid implementation");let{props:s,context:o}=this,a=!s.forPrint&&Ns(o.options),l=!s.forPrint&&Ps(o.options),c=[];return e&&c.push({type:"header",key:"header",isSticky:a,chunks:[{key:"main",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),c.push({type:"body",key:"body",liquid:!0,chunks:[{key:"main",content:t}]}),l&&c.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"main",content:Os}]}),f(io,{elClasses:["fc-daygrid"],viewSpec:o.viewSpec},f(i,{liquid:!s.isHeightAuto&&!s.forPrint,collapsibleWidth:s.forPrint,colGroups:[{cols:[{span:n,minWidth:r}]}],sections:c}))}}function za(e,t){let n=[];for(let e=0;e<t;e+=1)n[e]=[];for(let t of e)n[t.row].push(t);return n}function Ua(e,t){let n=[];for(let e=0;e<t;e+=1)n[e]=[];for(let t of e)n[t.firstCol].push(t);return n}function La(e,t){let n=[];if(e){for(let r=0;r<t;r+=1)n[r]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(let t of e.segs)n[t.row].segs.push(t)}else for(let e=0;e<t;e+=1)n[e]=null;return n}const Wa=on({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});function Fa(e){let{display:t}=e.eventRange.ui;return"list-item"===t||"auto"===t&&!e.eventRange.def.allDay&&e.firstCol===e.lastCol&&e.isStart&&e.isEnd}class Va extends Br{render(){let{props:e}=this;return f(js,Object.assign({},e,{elClasses:["fc-daygrid-event","fc-daygrid-block-event","fc-h-event"],defaultTimeFormat:Wa,defaultDisplayEventEnd:e.defaultDisplayEventEnd,disableResizing:!e.seg.eventRange.def.allDay}))}}class Ga extends Br{render(){let{props:e,context:t}=this,{options:n}=t,{seg:r}=e,i=ci(r,n.eventTimeFormat||Wa,t,!0,e.defaultDisplayEventEnd);return f(Bs,Object.assign({},e,{elTag:"a",elClasses:["fc-daygrid-event","fc-daygrid-dot-event"],elAttrs:fi(e.seg,t),defaultGenerator:Qa,timeText:i,isResizing:!1,isDateSelecting:!1}))}}function Qa(e){return f(p,null,f("div",{className:"fc-daygrid-event-dot",style:{borderColor:e.borderColor||e.backgroundColor}}),e.timeText&&f("div",{className:"fc-event-time"},e.timeText),f("div",{className:"fc-event-title"},e.event.title||f(p,null," ")))}class qa extends Br{constructor(){super(...arguments),this.compileSegs=Vt(Ya)}render(){let{props:e}=this,{allSegs:t,invisibleSegs:n}=this.compileSegs(e.singlePlacements);return f($s,{elClasses:["fc-daygrid-more-link"],dateProfile:e.dateProfile,todayRange:e.todayRange,allDayDate:e.allDayDate,moreCnt:e.moreCnt,allSegs:t,hiddenSegs:n,alignmentElRef:e.alignmentElRef,alignGridTop:e.alignGridTop,extraDateSpan:e.extraDateSpan,popoverContent:()=>{let n=(e.eventDrag?e.eventDrag.affectedInstances:null)||(e.eventResize?e.eventResize.affectedInstances:null)||{};return f(p,null,t.map(t=>{let r=t.eventRange.instance.instanceId;return f("div",{className:"fc-daygrid-event-harness",key:r,style:{visibility:n[r]?"hidden":""}},Fa(t)?f(Ga,Object.assign({seg:t,isDragging:!1,isSelected:r===e.eventSelection,defaultDisplayEventEnd:!1},di(t,e.todayRange))):f(Va,Object.assign({seg:t,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:r===e.eventSelection,defaultDisplayEventEnd:!1},di(t,e.todayRange))))}))}})}}function Ya(e){let t=[],n=[];for(let r of e)t.push(r.seg),r.isVisible||n.push(r.seg);return{allSegs:t,invisibleSegs:n}}const Za=on({week:"narrow"});class Xa extends zr{constructor(){super(...arguments),this.rootElRef={current:null},this.state={dayNumberId:Te()},this.handleRootEl=e=>{jr(this.rootElRef,e),jr(this.props.elRef,e)}}render(){let{context:e,props:t,state:n,rootElRef:r}=this,{options:i}=e,{date:s,dateProfile:o}=t;return f(Ws,{elTag:"td",elRef:this.handleRootEl,elClasses:["fc-daygrid-day",...t.extraClassNames||[]],elAttrs:Object.assign(Object.assign(Object.assign({},t.extraDataAttrs),t.showDayNumber?{"aria-labelledby":n.dayNumberId}:{}),{role:"gridcell"}),defaultGenerator:Ja,date:s,dateProfile:o,todayRange:t.todayRange,showDayNumber:t.showDayNumber,extraRenderProps:t.extraRenderProps},(o,a)=>f("div",{className:"fc-daygrid-day-frame fc-scrollgrid-sync-inner",ref:t.innerElRef},t.showWeekNumber&&f(Ys,{elTag:"a",elClasses:["fc-daygrid-week-number"],elAttrs:hr(e,s,"week"),date:s,defaultFormat:Za}),Boolean(!a.isDisabled&&(t.showDayNumber||Fs(i)||t.forceDayTop))&&f("div",{className:"fc-daygrid-day-top"},f(o,{elTag:"a",elClasses:["fc-daygrid-day-number"],elAttrs:Object.assign(Object.assign({},hr(e,s)),{id:n.dayNumberId})})),f("div",{className:"fc-daygrid-day-events",ref:t.fgContentElRef},t.fgContent,f("div",{className:"fc-daygrid-day-bottom",style:{marginTop:t.moreMarginTop}},f(qa,{allDayDate:s,singlePlacements:t.singlePlacements,moreCnt:t.moreCnt,alignmentElRef:r,alignGridTop:!t.showDayNumber,extraDateSpan:t.extraDateSpan,dateProfile:t.dateProfile,eventSelection:t.eventSelection,eventDrag:t.eventDrag,eventResize:t.eventResize,todayRange:t.todayRange}))),f("div",{className:"fc-daygrid-day-bg"},t.bgContent)))}}function Ja(e){return e.dayNumberText||f(p,null," ")}function $a(e,t,n,r,i,s,o){let a=new el;a.allowReslicing=!0,a.strictOrder=r,!0===t||!0===n?(a.maxCoord=s,a.hiddenConsumes=!0):"number"==typeof t?a.maxStackCnt=t:"number"==typeof n&&(a.maxStackCnt=n,a.hiddenConsumes=!0);let l=[],c=[];for(let t=0;t<e.length;t+=1){let n=e[t],{instanceId:r}=n.eventRange.instance,s=i[r];null!=s?l.push({index:t,thickness:s,span:{start:n.firstCol,end:n.lastCol+1}}):c.push(n)}let d=a.addSegs(l),u=a.toRects(),{singleColPlacements:h,multiColPlacements:f,leftoverMargins:g}=function(e,t,n){let r=function(e,t){let n=[];for(let e=0;e<t;e+=1)n.push([]);for(let t of e)for(let e=t.span.start;e<t.span.end;e+=1)n[e].push(t);return n}(e,n.length),i=[],s=[],o=[];for(let e=0;e<n.length;e+=1){let a=r[e],l=[],c=0,d=0;for(let r of a){let i=t[r.index];l.push({seg:Ka(i,e,e+1,n),isVisible:!0,isAbsolute:!1,absoluteTop:r.levelCoord,marginTop:r.levelCoord-c}),c=r.levelCoord+r.thickness}let u=[];c=0,d=0;for(let r of a){let i=t[r.index],s=r.span.end-r.span.start>1,o=r.span.start===e;d+=r.levelCoord-c,c=r.levelCoord+r.thickness,s?(d+=r.thickness,o&&u.push({seg:Ka(i,r.span.start,r.span.end,n),isVisible:!0,isAbsolute:!0,absoluteTop:r.levelCoord,marginTop:0})):o&&(u.push({seg:Ka(i,r.span.start,r.span.end,n),isVisible:!0,isAbsolute:!1,absoluteTop:r.levelCoord,marginTop:d}),d=0)}i.push(l),s.push(u),o.push(d)}return{singleColPlacements:i,multiColPlacements:s,leftoverMargins:o}}(u,e,o),p=[],m=[];for(let e of c){f[e.firstCol].push({seg:e,isVisible:!1,isAbsolute:!0,absoluteTop:0,marginTop:0});for(let t=e.firstCol;t<=e.lastCol;t+=1)h[t].push({seg:Ka(e,t,t+1,o),isVisible:!1,isAbsolute:!1,absoluteTop:0,marginTop:0})}for(let e=0;e<o.length;e+=1)p.push(0);for(let t of d){let n=e[t.index],r=t.span;f[r.start].push({seg:Ka(n,r.start,r.end,o),isVisible:!1,isAbsolute:!0,absoluteTop:0,marginTop:0});for(let e=r.start;e<r.end;e+=1)p[e]+=1,h[e].push({seg:Ka(n,e,e+1,o),isVisible:!1,isAbsolute:!1,absoluteTop:0,marginTop:0})}for(let e=0;e<o.length;e+=1)m.push(g[e]);return{singleColPlacements:h,multiColPlacements:f,moreCnts:p,moreMarginTops:m}}function Ka(e,t,n,r){if(e.firstCol===t&&e.lastCol===n-1)return e;let i=e.eventRange,s=i.range,o=rr(s,{start:r[t].date,end:St(r[n-1].date,1)});return Object.assign(Object.assign({},e),{firstCol:t,lastCol:n-1,eventRange:{def:i.def,ui:Object.assign(Object.assign({},i.ui),{durationEditable:!1}),instance:i.instance,range:o},isStart:e.isStart&&o.start.valueOf()===s.start.valueOf(),isEnd:e.isEnd&&o.end.valueOf()===s.end.valueOf()})}class el extends Ci{constructor(){super(...arguments),this.hiddenConsumes=!1,this.forceHidden={}}addSegs(e){const t=super.addSegs(e),{entriesByLevel:n}=this,r=e=>!this.forceHidden[xi(e)];for(let e=0;e<n.length;e+=1)n[e]=n[e].filter(r);return t}handleInvalidInsertion(e,t,n){const{entriesByLevel:r,forceHidden:i}=this,{touchingEntry:s,touchingLevel:o,touchingLateral:a}=e;if(this.hiddenConsumes&&s){const e=xi(s);if(!i[e])if(this.allowReslicing){const e=Object.assign(Object.assign({},s),{span:Ti(s.span,t.span)});i[xi(e)]=!0,r[o][a]=e,this.splitEntry(s,t,n)}else i[e]=!0,n.push(s)}return super.handleInvalidInsertion(e,t,n)}}class tl extends zr{constructor(){super(...arguments),this.cellElRefs=new Ds,this.frameElRefs=new Ds,this.fgElRefs=new Ds,this.segHarnessRefs=new Ds,this.rootElRef={current:null},this.state={framePositions:null,maxContentHeight:null,eventInstanceHeights:{}},this.handleResize=e=>{e&&this.updateSizing(!0)}}render(){let{props:e,state:t,context:n}=this,{options:r}=n,i=e.cells.length,s=Ua(e.businessHourSegs,i),o=Ua(e.bgEventSegs,i),a=Ua(this.getHighlightSegs(),i),l=Ua(this.getMirrorSegs(),i),{singleColPlacements:c,multiColPlacements:d,moreCnts:u,moreMarginTops:h}=$a(ii(e.fgEventSegs,r.eventOrder),e.dayMaxEvents,e.dayMaxEventRows,r.eventOrderStrict,t.eventInstanceHeights,t.maxContentHeight,e.cells),g=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{};return f("tr",{ref:this.rootElRef,role:"row"},e.renderIntro&&e.renderIntro(),e.cells.map((t,n)=>{let r=this.renderFgSegs(n,e.forPrint?c[n]:d[n],e.todayRange,g),i=this.renderFgSegs(n,function(e,t){if(!e.length)return[];let n=function(e){let t={};for(let n of e)for(let e of n)t[e.seg.eventRange.instance.instanceId]=e.absoluteTop;return t}(t);return e.map(e=>({seg:e,isVisible:!0,isAbsolute:!0,absoluteTop:n[e.eventRange.instance.instanceId],marginTop:0}))}(l[n],d),e.todayRange,{},Boolean(e.eventDrag),Boolean(e.eventResize),!1);return f(Xa,{key:t.key,elRef:this.cellElRefs.createRef(t.key),innerElRef:this.frameElRefs.createRef(t.key),dateProfile:e.dateProfile,date:t.date,showDayNumber:e.showDayNumbers,showWeekNumber:e.showWeekNumbers&&0===n,forceDayTop:e.showWeekNumbers,todayRange:e.todayRange,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,extraRenderProps:t.extraRenderProps,extraDataAttrs:t.extraDataAttrs,extraClassNames:t.extraClassNames,extraDateSpan:t.extraDateSpan,moreCnt:u[n],moreMarginTop:h[n],singlePlacements:c[n],fgContentElRef:this.fgElRefs.createRef(t.key),fgContent:f(p,null,f(p,null,r),f(p,null,i)),bgContent:f(p,null,this.renderFillSegs(a[n],"highlight"),this.renderFillSegs(s[n],"non-business"),this.renderFillSegs(o[n],"bg-event"))})}))}componentDidMount(){this.updateSizing(!0),this.context.addResizeHandler(this.handleResize)}componentDidUpdate(e,t){let n=this.props;this.updateSizing(!pt(e,n))}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}getHighlightSegs(){let{props:e}=this;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs}getMirrorSegs(){let{props:e}=this;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]}renderFgSegs(e,t,n,r,i,s,o){let{context:a}=this,{eventSelection:l}=this.props,{framePositions:c}=this.state,d=1===this.props.cells.length,u=i||s||o,h=[];if(c)for(let g of t){let{seg:t}=g,{instanceId:p}=t.eventRange.instance,m=p+":"+e,v=g.isVisible&&!r[p],b=g.isAbsolute,y="",E="";b&&(a.isRtl?(E=0,y=c.lefts[t.lastCol]-c.lefts[t.firstCol]):(y=0,E=c.rights[t.firstCol]-c.rights[t.lastCol])),h.push(f("div",{className:"fc-daygrid-event-harness"+(b?" fc-daygrid-event-harness-abs":""),key:m,ref:u?null:this.segHarnessRefs.createRef(m),style:{visibility:v?"":"hidden",marginTop:b?"":g.marginTop,top:b?g.absoluteTop:"",left:y,right:E}},Fa(t)?f(Ga,Object.assign({seg:t,isDragging:i,isSelected:p===l,defaultDisplayEventEnd:d},di(t,n))):f(Va,Object.assign({seg:t,isDragging:i,isResizing:s,isDateSelecting:o,isSelected:p===l,defaultDisplayEventEnd:d},di(t,n)))))}return h}renderFillSegs(e,t){let{isRtl:n}=this.context,{todayRange:r}=this.props,{framePositions:i}=this.state,s=[];if(i)for(let o of e){let e=n?{right:0,left:i.lefts[o.lastCol]-i.lefts[o.firstCol]}:{left:0,right:i.rights[o.firstCol]-i.rights[o.lastCol]};s.push(f("div",{key:hi(o.eventRange),className:"fc-daygrid-bg-harness",style:e},"bg-event"===t?f(Gs,Object.assign({seg:o},di(o,r))):qs(t)))}return f(p,{},...s)}updateSizing(e){let{props:t,state:n,frameElRefs:r}=this;if(!t.forPrint&&null!==t.clientWidth){if(e){let e=t.cells.map(e=>r.currentMap[e.key]);if(e.length){let t=this.rootElRef.current,r=new wr(t,e,!0,!1);n.framePositions&&n.framePositions.similarTo(r)||this.setState({framePositions:new wr(t,e,!0,!1)})}}const i=this.state.eventInstanceHeights,s=this.queryEventInstanceHeights(),o=!0===t.dayMaxEvents||!0===t.dayMaxEventRows;this.safeSetState({eventInstanceHeights:Object.assign(Object.assign({},i),s),maxContentHeight:o?this.computeMaxContentHeight():null})}}queryEventInstanceHeights(){let e=this.segHarnessRefs.currentMap,t={};for(let n in e){let r=Math.round(e[n].getBoundingClientRect().height),i=n.split(":")[0];t[i]=Math.max(t[i]||0,r)}return t}computeMaxContentHeight(){let e=this.props.cells[0].key,t=this.cellElRefs.currentMap[e],n=this.fgElRefs.currentMap[e];return t.getBoundingClientRect().bottom-n.getBoundingClientRect().top}getCellEls(){let e=this.cellElRefs.currentMap;return this.props.cells.map(t=>e[t.key])}}tl.addStateEquality({eventInstanceHeights:pt});class nl extends zr{constructor(){super(...arguments),this.splitBusinessHourSegs=Vt(za),this.splitBgEventSegs=Vt(za),this.splitFgEventSegs=Vt(za),this.splitDateSelectionSegs=Vt(za),this.splitEventDrag=Vt(La),this.splitEventResize=Vt(La),this.rowRefs=new Ds,this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e}=this,{dateProfile:t,dayMaxEventRows:n,dayMaxEvents:r,expandRows:i}=e,s=e.cells.length,o=this.splitBusinessHourSegs(e.businessHourSegs,s),a=this.splitBgEventSegs(e.bgEventSegs,s),l=this.splitFgEventSegs(e.fgEventSegs,s),c=this.splitDateSelectionSegs(e.dateSelectionSegs,s),d=this.splitEventDrag(e.eventDrag,s),u=this.splitEventResize(e.eventResize,s),h=!0===r||!0===n;return h&&!i&&(h=!1,n=null,r=null),f("div",{className:["fc-daygrid-body",h?"fc-daygrid-body-balanced":"fc-daygrid-body-unbalanced",i?"":"fc-daygrid-body-natural"].join(" "),ref:this.handleRootEl,style:{width:e.clientWidth,minWidth:e.tableMinWidth}},f($i,{unit:"day"},(h,g)=>f(p,null,f("table",{role:"presentation",className:"fc-scrollgrid-sync-table",style:{width:e.clientWidth,minWidth:e.tableMinWidth,height:i?e.clientHeight:""}},e.colGroupNode,f("tbody",{role:"presentation"},e.cells.map((i,h)=>f(tl,{ref:this.rowRefs.createRef(h),key:i.length?i[0].date.toISOString():h,showDayNumbers:s>1,showWeekNumbers:e.showWeekNumbers,todayRange:g,dateProfile:t,cells:i,renderIntro:e.renderRowIntro,businessHourSegs:o[h],eventSelection:e.eventSelection,bgEventSegs:a[h].filter(rl),fgEventSegs:l[h],dateSelectionSegs:c[h],eventDrag:d[h],eventResize:u[h],dayMaxEvents:r,dayMaxEventRows:n,clientWidth:e.clientWidth,clientHeight:e.clientHeight,forPrint:e.forPrint})))))))}prepareHits(){this.rowPositions=new wr(this.rootEl,this.rowRefs.collect().map(e=>e.getCellEls()[0]),!1,!0),this.colPositions=new wr(this.rootEl,this.rowRefs.currentMap[0].getCellEls(),!0,!1)}queryHit(e,t){let{colPositions:n,rowPositions:r}=this,i=n.leftToIndex(e),s=r.topToIndex(t);if(null!=s&&null!=i){let e=this.props.cells[s][i];return{dateProfile:this.props.dateProfile,dateSpan:Object.assign({range:this.getCellRange(s,i),allDay:!0},e.extraDateSpan),dayEl:this.getCellEl(s,i),rect:{left:n.lefts[i],right:n.rights[i],top:r.tops[s],bottom:r.bottoms[s]},layer:0}}return null}getCellEl(e,t){return this.rowRefs.currentMap[e].getCellEls()[t]}getCellRange(e,t){let n=this.props.cells[e][t].date;return{start:n,end:St(n,1)}}}function rl(e){return e.eventRange.def.allDay}class il extends is{constructor(){super(...arguments),this.forceDayIfListItem=!0}sliceRange(e,t){return t.sliceRange(e)}}class sl extends zr{constructor(){super(...arguments),this.slicer=new il,this.tableRef={current:null}}render(){let{props:e,context:t}=this;return f(nl,Object.assign({ref:this.tableRef},this.slicer.sliceProps(e,e.dateProfile,e.nextDayThreshold,t,e.dayTableModel),{dateProfile:e.dateProfile,cells:e.dayTableModel.cells,colGroupNode:e.colGroupNode,tableMinWidth:e.tableMinWidth,renderRowIntro:e.renderRowIntro,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.showWeekNumbers,expandRows:e.expandRows,headerAlignElRef:e.headerAlignElRef,clientWidth:e.clientWidth,clientHeight:e.clientHeight,forPrint:e.forPrint}))}}function ol(e,t){let n=new ns(e.renderRange,t);return new rs(n,/year|month|week/.test(e.currentRangeUnit))}oo(':root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:"";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;padding:2px 3px 0}.fc .fc-daygrid-day-bottom:before{clear:both;content:"";display:table}.fc .fc-daygrid-more-link{cursor:pointer;position:relative;z-index:4}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}');var al=yo({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:class extends ja{constructor(){super(...arguments),this.buildDayTableModel=Vt(ol),this.headerRef={current:null},this.tableRef={current:null}}render(){let{options:e,dateProfileGenerator:t}=this.context,{props:n}=this,r=this.buildDayTableModel(n.dateProfile,t),i=e.dayHeaders&&f(es,{ref:this.headerRef,dateProfile:n.dateProfile,dates:r.headerDates,datesRepDistinctDays:1===r.rowCnt}),s=t=>f(sl,{ref:this.tableRef,dateProfile:n.dateProfile,dayTableModel:r,businessHours:n.businessHours,dateSelection:n.dateSelection,eventStore:n.eventStore,eventUiBases:n.eventUiBases,eventSelection:n.eventSelection,eventDrag:n.eventDrag,eventResize:n.eventResize,nextDayThreshold:e.nextDayThreshold,colGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.weekNumbers,expandRows:!n.isHeightAuto,headerAlignElRef:this.headerElRef,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:n.forPrint});return e.dayMinWidth?this.renderHScrollLayout(i,s,r.colCnt,e.dayMinWidth):this.renderSimpleLayout(i,s)}},dateProfileGeneratorClass:class extends Lr{buildRenderRange(e,t,n){let r,{dateEnv:i}=this.props,s=super.buildRenderRange(e,t,n),o=s.start,a=s.end;if(/^(year|month)$/.test(t)&&(o=i.startOfWeek(o),r=i.startOfWeek(a),r.valueOf()!==a.valueOf()&&(a=Dt(r,1))),this.props.monthMode&&this.props.fixedWeekCount){a=Dt(a,6-Math.ceil(Ct(o,a)))}return{start:o,end:a}}}},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},monthMode:!0,fixedWeekCount:!0}}});class ll extends Kn{getKeyInfo(){return{allDay:{},timed:{}}}getKeysForDateSpan(e){return e.allDay?["allDay"]:["timed"]}getKeysForEventDef(e){return e.allDay?Kr(e)?["timed","allDay"]:["allDay"]:["timed"]}}const cl=on({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"});function dl(e){let t=["fc-timegrid-slot","fc-timegrid-slot-label",e.isLabeled?"fc-scrollgrid-shrink":"fc-timegrid-slot-minor"];return f(Nr.Consumer,null,n=>{if(!e.isLabeled)return f("td",{className:t.join(" "),"data-time":e.isoTimeStr});let{dateEnv:r,options:i,viewApi:s}=n,o=null==i.slotLabelFormat?cl:Array.isArray(i.slotLabelFormat)?on(i.slotLabelFormat[0]):on(i.slotLabelFormat),a={level:0,time:e.time,date:r.toDate(e.date),view:s,text:r.format(e.date,o)};return f(qi,{elTag:"td",elClasses:t,elAttrs:{"data-time":e.isoTimeStr},renderProps:a,generatorName:"slotLabelContent",generator:i.slotLabelContent||ul,classNameGenerator:i.slotLabelClassNames,didMount:i.slotLabelDidMount,willUnmount:i.slotLabelWillUnmount},e=>f("div",{className:"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame"},f(e,{elTag:"div",elClasses:["fc-timegrid-slot-label-cushion","fc-scrollgrid-shrink-cushion"]})))})}function ul(e){return e.text}class hl extends Br{render(){return this.props.slatMetas.map(e=>f("tr",{key:e.key},f(dl,Object.assign({},e))))}}const fl=on({week:"short"});class gl extends zr{constructor(){super(...arguments),this.allDaySplitter=new ll,this.headerElRef={current:null},this.rootElRef={current:null},this.scrollerElRef={current:null},this.state={slatCoords:null},this.handleScrollTopRequest=e=>{let t=this.scrollerElRef.current;t&&(t.scrollTop=e)},this.renderHeadAxis=(e,t="")=>{let{options:n}=this.context,{dateProfile:r}=this.props,i=r.renderRange,s=1===Rt(i.start,i.end)?hr(this.context,i.start,"week"):{};return n.weekNumbers&&"day"===e?f(Ys,{elTag:"th",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},date:i.start,defaultFormat:fl},e=>f("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame","fc-timegrid-axis-frame-liquid"].join(" "),style:{height:t}},f(e,{elTag:"a",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"],elAttrs:s}))):f("th",{"aria-hidden":!0,className:"fc-timegrid-axis"},f("div",{className:"fc-timegrid-axis-frame",style:{height:t}}))},this.renderTableRowAxis=e=>{let{options:t,viewApi:n}=this.context,r={text:t.allDayText,view:n};return f(qi,{elTag:"td",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},renderProps:r,generatorName:"allDayContent",generator:t.allDayContent||pl,classNameGenerator:t.allDayClassNames,didMount:t.allDayDidMount,willUnmount:t.allDayWillUnmount},t=>f("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame",null==e?" fc-timegrid-axis-frame-liquid":""].join(" "),style:{height:e}},f(t,{elTag:"span",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"]})))},this.handleSlatCoords=e=>{this.setState({slatCoords:e})}}renderSimpleLayout(e,t,n){let{context:r,props:i}=this,s=[],o=Ns(r.options);return e&&s.push({type:"header",key:"header",isSticky:o,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),t&&(s.push({type:"body",key:"all-day",chunk:{content:t}}),s.push({type:"body",key:"all-day-divider",outerContent:f("tr",{role:"presentation",className:"fc-scrollgrid-section"},f("td",{className:"fc-timegrid-divider "+r.theme.getClass("tableCellShaded")}))})),s.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(r.options.expandRows),chunk:{scrollerElRef:this.scrollerElRef,content:n}}),f(io,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:r.viewSpec},f(Hs,{liquid:!i.isHeightAuto&&!i.forPrint,collapsibleWidth:i.forPrint,cols:[{width:"shrink"}],sections:s}))}renderHScrollLayout(e,t,n,r,i,s,o){let a=this.context.pluginHooks.scrollGridImpl;if(!a)throw new Error("No ScrollGrid implementation");let{context:l,props:c}=this,d=!c.forPrint&&Ns(l.options),u=!c.forPrint&&Ps(l.options),h=[];e&&h.push({type:"header",key:"header",isSticky:d,syncRowHeights:!0,chunks:[{key:"axis",rowContent:e=>f("tr",{role:"presentation"},this.renderHeadAxis("day",e.rowSyncHeights[0]))},{key:"cols",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),t&&(h.push({type:"body",key:"all-day",syncRowHeights:!0,chunks:[{key:"axis",rowContent:e=>f("tr",{role:"presentation"},this.renderTableRowAxis(e.rowSyncHeights[0]))},{key:"cols",content:t}]}),h.push({key:"all-day-divider",type:"body",outerContent:f("tr",{role:"presentation",className:"fc-scrollgrid-section"},f("td",{colSpan:2,className:"fc-timegrid-divider "+l.theme.getClass("tableCellShaded")}))}));let g=l.options.nowIndicator;return h.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(l.options.expandRows),chunks:[{key:"axis",content:e=>f("div",{className:"fc-timegrid-axis-chunk"},f("table",{"aria-hidden":!0,style:{height:e.expandRows?e.clientHeight:""}},e.tableColGroupNode,f("tbody",null,f(hl,{slatMetas:s}))),f("div",{className:"fc-timegrid-now-indicator-container"},f($i,{unit:g?"minute":"day"},e=>{let t=g&&o&&o.safeComputeTop(e);return"number"==typeof t?f(Us,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:t},isAxis:!0,date:e}):null})))},{key:"cols",scrollerElRef:this.scrollerElRef,content:n}]}),u&&h.push({key:"footer",type:"footer",isSticky:!0,chunks:[{key:"axis",content:Os},{key:"cols",content:Os}]}),f(io,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:l.viewSpec},f(a,{liquid:!c.isHeightAuto&&!c.forPrint,collapsibleWidth:!1,colGroups:[{width:"shrink",cols:[{width:"shrink"}]},{cols:[{span:r,minWidth:i}]}],sections:h}))}getAllDayMaxEventProps(){let{dayMaxEvents:e,dayMaxEventRows:t}=this.context.options;return!0!==e&&!0!==t||(e=void 0,t=5),{dayMaxEvents:e,dayMaxEventRows:t}}}function pl(e){return e.text}class ml{constructor(e,t,n){this.positions=e,this.dateProfile=t,this.slotDuration=n}safeComputeTop(e){let{dateProfile:t}=this;if(ar(t.currentRange,e)){let n=kt(e),r=e.valueOf()-n.valueOf();if(r>=ot(t.slotMinTime)&&r<ot(t.slotMaxTime))return this.computeTimeTop(tt(r))}return null}computeDateTop(e,t){return t||(t=kt(e)),this.computeTimeTop(tt(e.valueOf()-t.valueOf()))}computeTimeTop(e){let t,n,{positions:r,dateProfile:i}=this,s=r.els.length,o=(e.milliseconds-ot(i.slotMinTime))/ot(this.slotDuration);return o=Math.max(0,o),o=Math.min(s,o),t=Math.floor(o),t=Math.min(t,s-1),n=o-t,r.tops[t]+r.getHeight(t)*n}}class vl extends Br{render(){let{props:e,context:t}=this,{options:n}=t,{slatElRefs:r}=e;return f("tbody",null,e.slatMetas.map((i,s)=>{let o={time:i.time,date:t.dateEnv.toDate(i.date),view:t.viewApi};return f("tr",{key:i.key,ref:r.createRef(i.key)},e.axis&&f(dl,Object.assign({},i)),f(qi,{elTag:"td",elClasses:["fc-timegrid-slot","fc-timegrid-slot-lane",!i.isLabeled&&"fc-timegrid-slot-minor"],elAttrs:{"data-time":i.isoTimeStr},renderProps:o,generatorName:"slotLaneContent",generator:n.slotLaneContent,classNameGenerator:n.slotLaneClassNames,didMount:n.slotLaneDidMount,willUnmount:n.slotLaneWillUnmount}))}))}}class bl extends Br{constructor(){super(...arguments),this.rootElRef={current:null},this.slatElRefs=new Ds}render(){let{props:e,context:t}=this;return f("div",{ref:this.rootElRef,className:"fc-timegrid-slots"},f("table",{"aria-hidden":!0,className:t.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth,height:e.minHeight}},e.tableColGroupNode,f(vl,{slatElRefs:this.slatElRefs,axis:e.axis,slatMetas:e.slatMetas})))}componentDidMount(){this.updateSizing()}componentDidUpdate(){this.updateSizing()}componentWillUnmount(){this.props.onCoords&&this.props.onCoords(null)}updateSizing(){let{context:e,props:t}=this;if(t.onCoords&&null!==t.clientWidth){this.rootElRef.current.offsetHeight&&t.onCoords(new ml(new wr(this.rootElRef.current,(n=this.slatElRefs.currentMap,t.slatMetas.map(e=>n[e.key])),!1,!0),this.props.dateProfile,e.options.slotDuration))}var n}}function yl(e,t){let n,r=[];for(n=0;n<t;n+=1)r.push([]);if(e)for(n=0;n<e.length;n+=1)r[e[n].col].push(e[n]);return r}function El(e,t){let n=[];if(e){for(let r=0;r<t;r+=1)n[r]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(let t of e.segs)n[t.col].segs.push(t)}else for(let e=0;e<t;e+=1)n[e]=null;return n}class Al extends Br{render(){let{props:e}=this;return f($s,{elClasses:["fc-timegrid-more-link"],elStyle:{top:e.top,bottom:e.bottom},allDayDate:null,moreCnt:e.hiddenSegs.length,allSegs:e.hiddenSegs,hiddenSegs:e.hiddenSegs,extraDateSpan:e.extraDateSpan,dateProfile:e.dateProfile,todayRange:e.todayRange,popoverContent:()=>Il(e.hiddenSegs,e),defaultGenerator:Dl},e=>f(e,{elTag:"div",elClasses:["fc-timegrid-more-link-inner","fc-sticky"]}))}}function Dl(e){return e.shortText}function Sl(e,t,n){let r=new Ci;null!=t&&(r.strictOrder=t),null!=n&&(r.maxStackCnt=n);let i=_i(r.addSegs(e)),s=function(e){const{entriesByLevel:t}=e,n=xl((e,t)=>e+":"+t,(r,i)=>{let s=wl(function(e,t,n){let{levelCoords:r,entriesByLevel:i}=e,s=i[t][n],o=r[t]+s.thickness,a=r.length,l=t;for(;l<a&&r[l]<o;l+=1);for(;l<a;l+=1){let e,t=i[l],n=Mi(t,s.span.start,Ri),r=n[0]+n[1],o=r;for(;(e=t[o])&&e.span.start<s.span.end;)o+=1;if(r<o)return{level:l,lateralStart:r,lateralEnd:o}}return null}(e,r,i),n),o=t[r][i];return[Object.assign(Object.assign({},o),{nextLevelNodes:s[0]}),o.thickness+s[1]]});return wl(t.length?{level:0,lateralStart:0,lateralEnd:t[0].length}:null,n)[0]}(r);return s=function(e,t){const n=xl((e,t,n)=>xi(e),(e,r,i)=>{let s,{nextLevelNodes:o,thickness:a}=e,l=a+i,c=a/l,d=[];if(o.length)for(let e of o)if(void 0===s){let t=n(e,r,l);s=t[0],d.push(t[1])}else{let t=n(e,s,0);d.push(t[1])}else s=t;let u=(s-r)*c;return[s-u,Object.assign(Object.assign({},e),{thickness:u,nextLevelNodes:d})]});return e.map(e=>n(e,0,0)[1])}(s,1),{segRects:function(e){let t=[];const n=xl((e,t,n)=>xi(e),(e,n,i)=>{let s=Object.assign(Object.assign({},e),{levelCoord:n,stackDepth:i,stackForward:0});return t.push(s),s.stackForward=r(e.nextLevelNodes,n+e.thickness,i+1)+1});function r(e,t,r){let i=0;for(let s of e)i=Math.max(n(s,t,r),i);return i}return r(e,0,0),t}(s),hiddenGroups:i}}function wl(e,t){if(!e)return[[],0];let{level:n,lateralStart:r,lateralEnd:i}=e,s=r,o=[];for(;s<i;)o.push(t(n,s)),s+=1;return o.sort(Cl),[o.map(Rl),o[0][1]]}function Cl(e,t){return t[1]-e[1]}function Rl(e){return e[0]}function xl(e,t){const n={};return(...r)=>{let i=e(...r);return i in n?n[i]:n[i]=t(...r)}}function _l(e,t,n=null,r=0){let i=[];if(n)for(let s=0;s<e.length;s+=1){let o=e[s],a=n.computeDateTop(o.start,t),l=Math.max(a+(r||0),n.computeDateTop(o.end,t));i.push({start:Math.round(a),end:Math.round(l)})}return i}const Tl=on({hour:"numeric",minute:"2-digit",meridiem:!1});class kl extends Br{render(){return f(js,Object.assign({},this.props,{elClasses:["fc-timegrid-event","fc-v-event",this.props.isShort&&"fc-timegrid-event-short"],defaultTimeFormat:Tl}))}}class Ml extends Br{constructor(){super(...arguments),this.sortEventSegs=Vt(ii)}render(){let{props:e,context:t}=this,{options:n}=t,r=n.selectMirror,i=e.eventDrag&&e.eventDrag.segs||e.eventResize&&e.eventResize.segs||r&&e.dateSelectionSegs||[],s=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{},o=this.sortEventSegs(e.fgEventSegs,n.eventOrder);return f(Ws,{elTag:"td",elRef:e.elRef,elClasses:["fc-timegrid-col",...e.extraClassNames||[]],elAttrs:Object.assign({role:"gridcell"},e.extraDataAttrs),date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,extraRenderProps:e.extraRenderProps},t=>f("div",{className:"fc-timegrid-col-frame"},f("div",{className:"fc-timegrid-col-bg"},this.renderFillSegs(e.businessHourSegs,"non-business"),this.renderFillSegs(e.bgEventSegs,"bg-event"),this.renderFillSegs(e.dateSelectionSegs,"highlight")),f("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(o,s,!1,!1,!1)),f("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(i,{},Boolean(e.eventDrag),Boolean(e.eventResize),Boolean(r))),f("div",{className:"fc-timegrid-now-indicator-container"},this.renderNowIndicator(e.nowIndicatorSegs)),Fs(n)&&f(t,{elTag:"div",elClasses:["fc-timegrid-col-misc"]})))}renderFgSegs(e,t,n,r,i){let{props:s}=this;return s.forPrint?Il(e,s):this.renderPositionedFgSegs(e,t,n,r,i)}renderPositionedFgSegs(e,t,n,r,i){let{eventMaxStack:s,eventShortHeight:o,eventOrderStrict:a,eventMinHeight:l}=this.context.options,{date:c,slatCoords:d,eventSelection:u,todayRange:h,nowDate:g}=this.props,m=n||r||i,v=_l(e,c,d,l),{segPlacements:b,hiddenGroups:y}=function(e,t,n,r){let i=[],s=[];for(let n=0;n<e.length;n+=1){let r=t[n];r?i.push({index:n,thickness:1,span:r}):s.push(e[n])}let{segRects:o,hiddenGroups:a}=Sl(i,n,r),l=[];for(let t of o)l.push({seg:e[t.index],rect:t});for(let e of s)l.push({seg:e,rect:null});return{segPlacements:l,hiddenGroups:a}}(e,v,a,s);return f(p,null,this.renderHiddenGroups(y,e),b.map(e=>{let{seg:s,rect:a}=e,l=s.eventRange.instance.instanceId,c=m||Boolean(!t[l]&&a),d=Ol(a&&a.span),p=!m&&a?this.computeSegHStyle(a):{left:0,right:0},v=Boolean(a)&&a.stackForward>0,b=Boolean(a)&&a.span.end-a.span.start<o;return f("div",{className:"fc-timegrid-event-harness"+(v?" fc-timegrid-event-harness-inset":""),key:l,style:Object.assign(Object.assign({visibility:c?"":"hidden"},d),p)},f(kl,Object.assign({seg:s,isDragging:n,isResizing:r,isDateSelecting:i,isSelected:l===u,isShort:b},di(s,h,g))))}))}renderHiddenGroups(e,t){let{extraDateSpan:n,dateProfile:r,todayRange:i,nowDate:s,eventSelection:o,eventDrag:a,eventResize:l}=this.props;return f(p,null,e.map(e=>{let c=Ol(e.span),d=(u=e.entries,h=t,u.map(e=>h[e.index]));var u,h;return f(Al,{key:zt(to(d)),hiddenSegs:d,top:c.top,bottom:c.bottom,extraDateSpan:n,dateProfile:r,todayRange:i,nowDate:s,eventSelection:o,eventDrag:a,eventResize:l})}))}renderFillSegs(e,t){let{props:n,context:r}=this,i=_l(e,n.date,n.slatCoords,r.options.eventMinHeight).map((r,i)=>{let s=e[i];return f("div",{key:hi(s.eventRange),className:"fc-timegrid-bg-harness",style:Ol(r)},"bg-event"===t?f(Gs,Object.assign({seg:s},di(s,n.todayRange,n.nowDate))):qs(t))});return f(p,null,i)}renderNowIndicator(e){let{slatCoords:t,date:n}=this.props;return t?e.map((e,r)=>f(Us,{key:r,elClasses:["fc-timegrid-now-indicator-line"],elStyle:{top:t.computeDateTop(e.start,n)},isAxis:!1,date:n})):null}computeSegHStyle(e){let t,n,{isRtl:r,options:i}=this.context,s=i.slotEventOverlap,o=e.levelCoord,a=e.levelCoord+e.thickness;s&&(a=Math.min(1,o+2*(a-o))),r?(t=1-a,n=o):(t=o,n=1-a);let l={zIndex:e.stackDepth+1,left:100*t+"%",right:100*n+"%"};return s&&!e.stackForward&&(l[r?"marginLeft":"marginRight"]=20),l}}function Il(e,{todayRange:t,nowDate:n,eventSelection:r,eventDrag:i,eventResize:s}){let o=(i?i.affectedInstances:null)||(s?s.affectedInstances:null)||{};return f(p,null,e.map(e=>{let i=e.eventRange.instance.instanceId;return f("div",{key:i,style:{visibility:o[i]?"hidden":""}},f(kl,Object.assign({seg:e,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:i===r,isShort:!1},di(e,t,n))))}))}function Ol(e){return e?{top:e.start,bottom:-e.end}:{top:"",bottom:""}}class Nl extends Br{constructor(){super(...arguments),this.splitFgEventSegs=Vt(yl),this.splitBgEventSegs=Vt(yl),this.splitBusinessHourSegs=Vt(yl),this.splitNowIndicatorSegs=Vt(yl),this.splitDateSelectionSegs=Vt(yl),this.splitEventDrag=Vt(El),this.splitEventResize=Vt(El),this.rootElRef={current:null},this.cellElRefs=new Ds}render(){let{props:e,context:t}=this,n=t.options.nowIndicator&&e.slatCoords&&e.slatCoords.safeComputeTop(e.nowDate),r=e.cells.length,i=this.splitFgEventSegs(e.fgEventSegs,r),s=this.splitBgEventSegs(e.bgEventSegs,r),o=this.splitBusinessHourSegs(e.businessHourSegs,r),a=this.splitNowIndicatorSegs(e.nowIndicatorSegs,r),l=this.splitDateSelectionSegs(e.dateSelectionSegs,r),c=this.splitEventDrag(e.eventDrag,r),d=this.splitEventResize(e.eventResize,r);return f("div",{className:"fc-timegrid-cols",ref:this.rootElRef},f("table",{role:"presentation",style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,f("tbody",{role:"presentation"},f("tr",{role:"row"},e.axis&&f("td",{"aria-hidden":!0,className:"fc-timegrid-col fc-timegrid-axis"},f("div",{className:"fc-timegrid-col-frame"},f("div",{className:"fc-timegrid-now-indicator-container"},"number"==typeof n&&f(Us,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:n},isAxis:!0,date:e.nowDate})))),e.cells.map((t,n)=>f(Ml,{key:t.key,elRef:this.cellElRefs.createRef(t.key),dateProfile:e.dateProfile,date:t.date,nowDate:e.nowDate,todayRange:e.todayRange,extraRenderProps:t.extraRenderProps,extraDataAttrs:t.extraDataAttrs,extraClassNames:t.extraClassNames,extraDateSpan:t.extraDateSpan,fgEventSegs:i[n],bgEventSegs:s[n],businessHourSegs:o[n],nowIndicatorSegs:a[n],dateSelectionSegs:l[n],eventDrag:c[n],eventResize:d[n],slatCoords:e.slatCoords,eventSelection:e.eventSelection,forPrint:e.forPrint}))))))}componentDidMount(){this.updateCoords()}componentDidUpdate(){this.updateCoords()}updateCoords(){let{props:e}=this;var t;e.onColCoords&&null!==e.clientWidth&&e.onColCoords(new wr(this.rootElRef.current,(t=this.cellElRefs.currentMap,e.cells.map(e=>t[e.key])),!0,!1))}}class Pl extends zr{constructor(){super(...arguments),this.processSlotOptions=Vt(Hl),this.state={slatCoords:null},this.handleRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)},this.handleScrollRequest=e=>{let{onScrollTopRequest:t}=this.props,{slatCoords:n}=this.state;if(t&&n){if(e.time){let r=n.computeTimeTop(e.time);r=Math.ceil(r),r&&(r+=1),t(r)}return!0}return!1},this.handleColCoords=e=>{this.colCoords=e},this.handleSlatCoords=e=>{this.setState({slatCoords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)}}render(){let{props:e,state:t}=this;return f("div",{className:"fc-timegrid-body",ref:this.handleRootEl,style:{width:e.clientWidth,minWidth:e.tableMinWidth}},f(bl,{axis:e.axis,dateProfile:e.dateProfile,slatMetas:e.slatMetas,clientWidth:e.clientWidth,minHeight:e.expandRows?e.clientHeight:"",tableMinWidth:e.tableMinWidth,tableColGroupNode:e.axis?e.tableColGroupNode:null,onCoords:this.handleSlatCoords}),f(Nl,{cells:e.cells,axis:e.axis,dateProfile:e.dateProfile,businessHourSegs:e.businessHourSegs,bgEventSegs:e.bgEventSegs,fgEventSegs:e.fgEventSegs,dateSelectionSegs:e.dateSelectionSegs,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange,nowDate:e.nowDate,nowIndicatorSegs:e.nowIndicatorSegs,clientWidth:e.clientWidth,tableMinWidth:e.tableMinWidth,tableColGroupNode:e.tableColGroupNode,slatCoords:t.slatCoords,onColCoords:this.handleColCoords,forPrint:e.forPrint}))}componentDidMount(){this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(e){this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach()}queryHit(e,t){let{dateEnv:n,options:r}=this.context,{colCoords:i}=this,{dateProfile:s}=this.props,{slatCoords:o}=this.state,{snapDuration:a,snapsPerSlot:l}=this.processSlotOptions(this.props.slotDuration,r.snapDuration),c=i.leftToIndex(e),d=o.positions.topToIndex(t);if(null!=c&&null!=d){let e=this.props.cells[c],r=o.positions.tops[d],u=o.positions.getHeight(d),h=(t-r)/u,f=d*l+Math.floor(h*l),g=this.props.cells[c].date,p=rt(s.slotMinTime,it(a,f)),m=n.add(g,p),v=n.add(m,a);return{dateProfile:s,dateSpan:Object.assign({range:{start:m,end:v},allDay:!1},e.extraDateSpan),dayEl:i.els[c],rect:{left:i.lefts[c],right:i.rights[c],top:r,bottom:r+u},layer:0}}return null}}function Hl(e,t){let n=t||e,r=at(e,n);return null===r&&(n=e,r=1),{snapDuration:n,snapsPerSlot:r}}class Bl extends is{sliceRange(e,t){let n=[];for(let r=0;r<t.length;r+=1){let i=rr(e,t[r]);i&&n.push({start:i.start,end:i.end,isStart:i.start.valueOf()===e.start.valueOf(),isEnd:i.end.valueOf()===e.end.valueOf(),col:r})}return n}}class jl extends zr{constructor(){super(...arguments),this.buildDayRanges=Vt(zl),this.slicer=new Bl,this.timeColsRef={current:null}}render(){let{props:e,context:t}=this,{dateProfile:n,dayTableModel:r}=e,i=t.options.nowIndicator,s=this.buildDayRanges(r,n,t.dateEnv);return f($i,{unit:i?"minute":"day"},(o,a)=>f(Pl,Object.assign({ref:this.timeColsRef},this.slicer.sliceProps(e,n,null,t,s),{forPrint:e.forPrint,axis:e.axis,dateProfile:n,slatMetas:e.slatMetas,slotDuration:e.slotDuration,cells:r.cells[0],tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,clientWidth:e.clientWidth,clientHeight:e.clientHeight,expandRows:e.expandRows,nowDate:o,nowIndicatorSegs:i&&this.slicer.sliceNowDate(o,t,s),todayRange:a,onScrollTopRequest:e.onScrollTopRequest,onSlatCoords:e.onSlatCoords})))}}function zl(e,t,n){let r=[];for(let i of e.headerDates)r.push({start:n.add(i,t.slotMinTime),end:n.add(i,t.slotMaxTime)});return r}const Ul=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];function Ll(e,t,n,r,i){let s=new Date(0),o=e,a=tt(0),l=n||function(e){let t,n,r;for(t=Ul.length-1;t>=0;t-=1)if(n=tt(Ul[t]),r=at(n,e),null!==r&&r>1)return n;return e}(r),c=[];for(;ot(o)<ot(t);){let e=i.add(s,o),t=null!==at(a,l);c.push({date:e,time:o,key:e.toISOString(),isoTimeStr:Lt(e),isLabeled:t}),o=rt(o,r),a=rt(a,r)}return c}function Wl(e,t){let n=new ns(e.renderRange,t);return new rs(n,!1)}const Fl={allDaySlot:Boolean};oo('.fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:"\\00a0"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:"\\00a0-\\00a0"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}');var Vl=yo({name:"@fullcalendar/timegrid",initialView:"timeGridWeek",optionRefiners:Fl,views:{timeGrid:{component:class extends gl{constructor(){super(...arguments),this.buildTimeColsModel=Vt(Wl),this.buildSlatMetas=Vt(Ll)}render(){let{options:e,dateEnv:t,dateProfileGenerator:n}=this.context,{props:r}=this,{dateProfile:i}=r,s=this.buildTimeColsModel(i,n),o=this.allDaySplitter.splitProps(r),a=this.buildSlatMetas(i.slotMinTime,i.slotMaxTime,e.slotLabelInterval,e.slotDuration,t),{dayMinWidth:l}=e,c=!l,d=l,u=e.dayHeaders&&f(es,{dates:s.headerDates,dateProfile:i,datesRepDistinctDays:!0,renderIntro:c?this.renderHeadAxis:null}),h=!1!==e.allDaySlot&&(t=>f(sl,Object.assign({},o.allDay,{dateProfile:i,dayTableModel:s,nextDayThreshold:e.nextDayThreshold,tableMinWidth:t.tableMinWidth,colGroupNode:t.tableColGroupNode,renderRowIntro:c?this.renderTableRowAxis:null,showWeekNumbers:!1,expandRows:!1,headerAlignElRef:this.headerElRef,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:r.forPrint},this.getAllDayMaxEventProps()))),g=t=>f(jl,Object.assign({},o.timed,{dayTableModel:s,dateProfile:i,axis:c,slotDuration:e.slotDuration,slatMetas:a,forPrint:r.forPrint,tableColGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,clientWidth:t.clientWidth,clientHeight:t.clientHeight,onSlatCoords:this.handleSlatCoords,expandRows:t.expandRows,onScrollTopRequest:this.handleScrollTopRequest}));return d?this.renderHScrollLayout(u,h,g,s.colCnt,l,a,this.state.slatCoords):this.renderSimpleLayout(u,h,g)}},usesMinMaxTime:!0,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0},timeGridDay:{type:"timeGrid",duration:{days:1}},timeGridWeek:{type:"timeGrid",duration:{weeks:1}}}});class Gl extends Br{constructor(){super(...arguments),this.state={textId:Te()}}render(){let{theme:e,dateEnv:t,options:n,viewApi:r}=this.context,{cellId:i,dayDate:s,todayRange:o}=this.props,{textId:a}=this.state,l=lr(s,o),c=n.listDayFormat?t.format(s,n.listDayFormat):"",d=n.listDaySideFormat?t.format(s,n.listDaySideFormat):"",u=Object.assign({date:t.toDate(s),view:r,textId:a,text:c,sideText:d,navLinkAttrs:hr(this.context,s),sideNavLinkAttrs:hr(this.context,s,"day",!1)},l);return f(qi,{elTag:"tr",elClasses:["fc-list-day",...cr(l,e)],elAttrs:{"data-date":Ut(s)},renderProps:u,generatorName:"dayHeaderContent",generator:n.dayHeaderContent||Ql,classNameGenerator:n.dayHeaderClassNames,didMount:n.dayHeaderDidMount,willUnmount:n.dayHeaderWillUnmount},t=>f("th",{scope:"colgroup",colSpan:3,id:i,"aria-labelledby":a},f(t,{elTag:"div",elClasses:["fc-list-day-cushion",e.getClass("tableCellShaded")]})))}}function Ql(e){return f(p,null,e.text&&f("a",Object.assign({id:e.textId,className:"fc-list-day-text"},e.navLinkAttrs),e.text),e.sideText&&f("a",Object.assign({"aria-hidden":!0,className:"fc-list-day-side-text"},e.sideNavLinkAttrs),e.sideText))}const ql=on({hour:"numeric",minute:"2-digit",meridiem:"short"});class Yl extends Br{render(){let{props:e,context:t}=this,{options:n}=t,{seg:r,timeHeaderId:i,eventHeaderId:s,dateHeaderId:o}=e,a=n.eventTimeFormat||ql;return f(Bs,Object.assign({},e,{elTag:"tr",elClasses:["fc-list-event",r.eventRange.def.url&&"fc-event-forced-url"],defaultGenerator:()=>function(e,t){let n=fi(e,t);return f("a",Object.assign({},n),e.eventRange.def.title)}(r,t),seg:r,timeText:"",disableDragging:!0,disableResizing:!0}),(e,n)=>f(p,null,function(e,t,n,r,i){let{options:s}=n;if(!1!==s.displayEventTime){let o,a=e.eventRange.def,l=e.eventRange.instance,c=!1;if(a.allDay?c=!0:Fn(e.eventRange.range)?e.isStart?o=ci(e,t,n,null,null,l.range.start,e.end):e.isEnd?o=ci(e,t,n,null,null,e.start,l.range.end):c=!0:o=ci(e,t,n),c){let e={text:n.options.allDayText,view:n.viewApi};return f(qi,{elTag:"td",elClasses:["fc-list-event-time"],elAttrs:{headers:`${r} ${i}`},renderProps:e,generatorName:"allDayContent",generator:s.allDayContent||Zl,classNameGenerator:s.allDayClassNames,didMount:s.allDayDidMount,willUnmount:s.allDayWillUnmount})}return f("td",{className:"fc-list-event-time"},o)}return null}(r,a,t,i,o),f("td",{"aria-hidden":!0,className:"fc-list-event-graphic"},f("span",{className:"fc-list-event-dot",style:{borderColor:n.borderColor||n.backgroundColor}})),f(e,{elTag:"td",elClasses:["fc-list-event-title"],elAttrs:{headers:`${s} ${o}`}})))}}function Zl(e){return e.text}function Xl(e){return e.text}function Jl(e){let t=kt(e.renderRange.start),n=e.renderRange.end,r=[],i=[];for(;t<n;)r.push(t),i.push({start:t,end:St(t,1)}),t=St(t,1);return{dayDates:r,dayRanges:i}}const $l={listDayFormat:Kl,listDaySideFormat:Kl,noEventsClassNames:mn,noEventsContent:mn,noEventsDidMount:mn,noEventsWillUnmount:mn};function Kl(e){return!1===e?null:on(e)}oo(':root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:"";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}');var ec=yo({name:"@fullcalendar/list",optionRefiners:$l,views:{list:{component:class extends zr{constructor(){super(...arguments),this.computeDateVars=Vt(Jl),this.eventStoreToSegs=Vt(this._eventStoreToSegs),this.state={timeHeaderId:Te(),eventHeaderId:Te(),dateHeaderIdRoot:Te()},this.setRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,context:t}=this,{dayDates:n,dayRanges:r}=this.computeDateVars(e.dateProfile),i=this.eventStoreToSegs(e.eventStore,e.eventUiBases,r);return f(io,{elRef:this.setRootEl,elClasses:["fc-list",t.theme.getClass("table"),!1!==t.options.stickyHeaderDates?"fc-list-sticky":""],viewSpec:t.viewSpec},f(As,{liquid:!e.isHeightAuto,overflowX:e.isHeightAuto?"visible":"hidden",overflowY:e.isHeightAuto?"visible":"auto"},i.length>0?this.renderSegList(i,n):this.renderEmptyMessage()))}renderEmptyMessage(){let{options:e,viewApi:t}=this.context,n={text:e.noEventsText,view:t};return f(qi,{elTag:"div",elClasses:["fc-list-empty"],renderProps:n,generatorName:"noEventsContent",generator:e.noEventsContent||Xl,classNameGenerator:e.noEventsClassNames,didMount:e.noEventsDidMount,willUnmount:e.noEventsWillUnmount},e=>f(e,{elTag:"div",elClasses:["fc-list-empty-cushion"]}))}renderSegList(e,t){let{theme:n,options:r}=this.context,{timeHeaderId:i,eventHeaderId:s,dateHeaderIdRoot:o}=this.state,a=function(e){let t,n,r=[];for(t=0;t<e.length;t+=1)n=e[t],(r[n.dayIndex]||(r[n.dayIndex]=[])).push(n);return r}(e);return f($i,{unit:"day"},(e,l)=>{let c=[];for(let n=0;n<a.length;n+=1){let d=a[n];if(d){let a=Ut(t[n]),u=o+"-"+a;c.push(f(Gl,{key:a,cellId:u,dayDate:t[n],todayRange:l})),d=ii(d,r.eventOrder);for(let t of d)c.push(f(Yl,Object.assign({key:a+":"+t.eventRange.instance.instanceId,seg:t,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,timeHeaderId:i,eventHeaderId:s,dateHeaderId:u},di(t,l,e))))}}return f("table",{className:"fc-list-table "+n.getClass("table")},f("thead",null,f("tr",null,f("th",{scope:"col",id:i},r.timeHint),f("th",{scope:"col","aria-hidden":!0}),f("th",{scope:"col",id:s},r.eventHint))),f("tbody",null,c))})}_eventStoreToSegs(e,t,n){return this.eventRangesToSegs($r(e,t,this.props.dateProfile.activeRange,this.context.options.nextDayThreshold).fg,n)}eventRangesToSegs(e,t){let n=[];for(let r of e)n.push(...this.eventRangeToSegs(r,t));return n}eventRangeToSegs(e,t){let n,r,i,{dateEnv:s}=this.context,{nextDayThreshold:o}=this.context.options,a=e.range,l=e.def.allDay,c=[];for(n=0;n<t.length;n+=1)if(r=rr(a,t[n]),r&&(i={component:this,eventRange:e,start:r.start,end:r.end,isStart:e.isStart&&r.start.valueOf()===a.start.valueOf(),isEnd:e.isEnd&&r.end.valueOf()===a.end.valueOf(),dayIndex:n},c.push(i),!i.isEnd&&!l&&n+1<t.length&&a.end<s.add(t[n+1].start,o))){i.end=a.end,i.isEnd=!0;break}return c}},buttonTextKey:"list",listDayFormat:{month:"long",day:"numeric",year:"numeric"}},listDay:{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}},listWeek:{type:"list",duration:{weeks:1},listDayFormat:{weekday:"long"},listDaySideFormat:{month:"long",day:"numeric",year:"numeric"}},listMonth:{type:"list",duration:{month:1},listDaySideFormat:{weekday:"long"}},listYear:{type:"list",duration:{year:1},listDaySideFormat:{weekday:"long"}}}});return Qo.push(Ba,al,Vl,ec),e.Calendar=class extends uo{constructor(e,t={}){super(),this.isRendering=!1,this.isRendered=!1,this.currentClassNames=[],this.customContentRenderId=0,this.handleAction=e=>{switch(e.type){case"SET_EVENT_DRAG":case"SET_EVENT_RESIZE":this.renderRunner.tryDrain()}},this.handleData=e=>{this.currentData=e,this.renderRunner.request(e.calendarOptions.rerenderDelay)},this.handleRenderRequest=()=>{if(this.isRendering){this.isRendered=!0;let{currentData:e}=this;kr(()=>{P(f(zi,{options:e.calendarOptions,theme:e.theme,emitter:e.emitter},(t,n,r,i)=>(this.setClassNames(t),this.setHeight(n),f(Qi.Provider,{value:this.customContentRenderId},f(ua,Object.assign({isHeightAuto:r,forPrint:i},e))))),this.el)})}else this.isRendered&&(this.isRendered=!1,P(null,this.el),this.setClassNames([]),this.setHeight(""))},this.el=e,this.renderRunner=new ys(this.handleRenderRequest),new Zo({optionOverrides:t,calendarApi:this,onAction:this.handleAction,onData:this.handleData})}render(){let e=this.isRendering;e?this.customContentRenderId+=1:this.isRendering=!0,this.renderRunner.request(),e&&this.updateSize()}destroy(){this.isRendering&&(this.isRendering=!1,this.renderRunner.request())}updateSize(){kr(()=>{super.updateSize()})}batchRendering(e){this.renderRunner.pause("batchRendering"),e(),this.renderRunner.resume("batchRendering")}pauseRendering(){this.renderRunner.pause("pauseRendering")}resumeRendering(){this.renderRunner.resume("pauseRendering",!0)}resetOptions(e,t){this.currentDataManager.resetOptions(e,t)}setClassNames(e){if(!Ft(e,this.currentClassNames)){let{classList:t}=this.el;for(let e of this.currentClassNames)t.remove(e);for(let n of e)t.add(n);this.currentClassNames=e}}setHeight(e){Ce(this.el,"height",e)}},e.Draggable=class{constructor(e,t={}){this.handlePointerDown=e=>{let{dragging:t}=this,{minDistance:n,longPressDelay:r}=this.settings;t.minDistance=null!=n?n:e.isTouch?0:ln.eventDragMinDistance,t.delay=e.isTouch?null!=r?r:ln.longPressDelay:0},this.handleDragStart=e=>{e.isTouch&&this.dragging.delay&&e.subjectEl.classList.contains("fc-event")&&this.dragging.mirror.getMirrorEl().classList.add("fc-event-selected")},this.settings=t;let n=this.dragging=new Ra(e);n.touchScrollAllowed=!1,null!=t.itemSelector&&(n.pointer.selector=t.itemSelector),null!=t.appendTo&&(n.mirror.parentNode=t.appendTo),n.emitter.on("pointerdown",this.handlePointerDown),n.emitter.on("dragstart",this.handleDragStart),new Pa(n,t.eventData)}destroy(){this.dragging.destroy()}},e.Internal=ho,e.JsonRequestError=vs,e.ThirdPartyDraggable=class{constructor(e,t){let n=document;e===document||e instanceof Element?(n=e,t=t||{}):t=e||{};let r=this.dragging=new Ha(n);"string"==typeof t.itemSelector?r.pointer.selector=t.itemSelector:n===document&&(r.pointer.selector="[data-event]"),"string"==typeof t.mirrorSelector&&(r.mirrorSelector=t.mirrorSelector),new Pa(r,t.eventData)}destroy(){this.dragging.destroy()}},e.createPlugin=yo,e.formatDate=function(e,t={}){let n=ga(t),r=on(t),i=n.createMarkerMeta(e);return i?n.format(i.marker,r,{forcedTzo:i.forcedTzo}):""},e.formatRange=function(e,t,n){let r=ga("object"==typeof n&&n?n:{}),i=on(n),s=r.createMarkerMeta(e),o=r.createMarkerMeta(t);return s&&o?r.formatRange(s.marker,o.marker,i,{forcedStartTzo:s.forcedTzo,forcedEndTzo:o.forcedTzo,isEndExclusive:n.isEndExclusive,defaultSeparator:ln.defaultRangeSeparator}):""},e.globalLocales=fo,e.globalPlugins=Qo,e.sliceEvents=function(e,t){return $r(e.eventStore,e.eventUiBases,e.dateProfile.activeRange,t?e.nextDayThreshold:null).fg},e.version="6.0.3",Object.defineProperty(e,"__esModule",{value:!0}),e}({}); \ No newline at end of file
diff --git a/library/fullcalendar/examples/background-events.html b/library/fullcalendar/examples/background-events.html
index 307966dcc..fd36fde4c 100644
--- a/library/fullcalendar/examples/background-events.html
+++ b/library/fullcalendar/examples/background-events.html
@@ -2,80 +2,72 @@
<html>
<head>
<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
+<script src='../dist/index.global.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
- header: {
+ headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
},
- defaultDate: '2020-05-12',
+ initialDate: '2020-09-12',
navLinks: true, // can click day/week names to navigate views
businessHours: true, // display business hours
editable: true,
+ selectable: true,
events: [
{
title: 'Business Lunch',
- start: '2020-05-03T13:00:00',
+ start: '2020-09-03T13:00:00',
constraint: 'businessHours'
},
{
title: 'Meeting',
- start: '2020-05-13T11:00:00',
+ start: '2020-09-13T11:00:00',
constraint: 'availableForMeeting', // defined below
color: '#257e4a'
},
{
title: 'Conference',
- start: '2020-05-18',
- end: '2020-05-20'
+ start: '2020-09-18',
+ end: '2020-09-20'
},
{
title: 'Party',
- start: '2020-05-29T20:00:00'
+ start: '2020-09-29T20:00:00'
},
// areas where "Meeting" must be dropped
{
groupId: 'availableForMeeting',
- start: '2020-05-11T10:00:00',
- end: '2020-05-11T16:00:00',
- rendering: 'background'
+ start: '2020-09-11T10:00:00',
+ end: '2020-09-11T16:00:00',
+ display: 'background'
},
{
groupId: 'availableForMeeting',
- start: '2020-05-13T10:00:00',
- end: '2020-05-13T16:00:00',
- rendering: 'background'
+ start: '2020-09-13T10:00:00',
+ end: '2020-09-13T16:00:00',
+ display: 'background'
},
// red areas where no events can be dropped
{
- start: '2020-05-24',
- end: '2020-05-28',
+ start: '2020-09-24',
+ end: '2020-09-28',
overlap: false,
- rendering: 'background',
+ display: 'background',
color: '#ff9f89'
},
{
- start: '2020-05-06',
- end: '2020-05-08',
+ start: '2020-09-06',
+ end: '2020-09-08',
overlap: false,
- rendering: 'background',
+ display: 'background',
color: '#ff9f89'
}
]
@@ -95,7 +87,7 @@
}
#calendar {
- max-width: 900px;
+ max-width: 1100px;
margin: 0 auto;
}
diff --git a/library/fullcalendar/examples/daygrid-views.html b/library/fullcalendar/examples/daygrid-views.html
index 0521d5d1a..9c20c5f0f 100644
--- a/library/fullcalendar/examples/daygrid-views.html
+++ b/library/fullcalendar/examples/daygrid-views.html
@@ -2,81 +2,76 @@
<html>
<head>
<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
+<script src='../dist/index.global.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid' ],
- header: {
+ headerToolbar: {
left: 'prevYear,prev,next,nextYear today',
center: 'title',
right: 'dayGridMonth,dayGridWeek,dayGridDay'
},
- defaultDate: '2020-05-12',
+ initialDate: '2020-09-12',
navLinks: true, // can click day/week names to navigate views
editable: true,
- eventLimit: true, // allow "more" link when too many events
+ dayMaxEvents: true, // allow "more" link when too many events
events: [
{
title: 'All Day Event',
- start: '2020-05-01'
+ start: '2020-09-01'
},
{
title: 'Long Event',
- start: '2020-05-07',
- end: '2020-05-10'
+ start: '2020-09-07',
+ end: '2020-09-10'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-09T16:00:00'
+ start: '2020-09-09T16:00:00'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-16T16:00:00'
+ start: '2020-09-16T16:00:00'
},
{
title: 'Conference',
- start: '2020-05-11',
- end: '2020-05-13'
+ start: '2020-09-11',
+ end: '2020-09-13'
},
{
title: 'Meeting',
- start: '2020-05-12T10:30:00',
- end: '2020-05-12T12:30:00'
+ start: '2020-09-12T10:30:00',
+ end: '2020-09-12T12:30:00'
},
{
title: 'Lunch',
- start: '2020-05-12T12:00:00'
+ start: '2020-09-12T12:00:00'
},
{
title: 'Meeting',
- start: '2020-05-12T14:30:00'
+ start: '2020-09-12T14:30:00'
},
{
title: 'Happy Hour',
- start: '2020-05-12T17:30:00'
+ start: '2020-09-12T17:30:00'
},
{
title: 'Dinner',
- start: '2020-05-12T20:00:00'
+ start: '2020-09-12T20:00:00'
},
{
title: 'Birthday Party',
- start: '2020-05-13T07:00:00'
+ start: '2020-09-13T07:00:00'
},
{
title: 'Click for Google',
url: 'http://google.com/',
- start: '2020-05-28'
+ start: '2020-09-28'
}
]
});
@@ -95,7 +90,7 @@
}
#calendar {
- max-width: 900px;
+ max-width: 1100px;
margin: 0 auto;
}
diff --git a/library/fullcalendar/examples/external-dragging-2cals.html b/library/fullcalendar/examples/external-dragging-2cals.html
index 52023b7be..a0744b24c 100644
--- a/library/fullcalendar/examples/external-dragging-2cals.html
+++ b/library/fullcalendar/examples/external-dragging-2cals.html
@@ -2,11 +2,7 @@
<html>
<head>
<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
+<script src='../dist/index.global.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
@@ -14,19 +10,18 @@
var destCalendarEl = document.getElementById('destination-calendar');
var srcCalendar = new FullCalendar.Calendar(srcCalendarEl, {
- plugins: [ 'interaction', 'dayGrid' ],
editable: true,
- defaultDate: '2020-05-12',
+ initialDate: '2020-09-12',
events: [
{
title: 'event1',
- start: '2020-05-11T10:00:00',
- end: '2020-05-11T16:00:00'
+ start: '2020-09-11T10:00:00',
+ end: '2020-09-11T16:00:00'
},
{
title: 'event2',
- start: '2020-05-13T10:00:00',
- end: '2020-05-13T16:00:00'
+ start: '2020-09-13T10:00:00',
+ end: '2020-09-13T16:00:00'
}
],
eventLeave: function(info) {
@@ -35,8 +30,7 @@
});
var destCalendar = new FullCalendar.Calendar(destCalendarEl, {
- plugins: [ 'interaction', 'dayGrid' ],
- defaultDate: '2020-05-12',
+ initialDate: '2020-09-12',
editable: true,
droppable: true, // will let it receive events!
eventReceive: function(info) {
diff --git a/library/fullcalendar/examples/external-dragging-builtin.html b/library/fullcalendar/examples/external-dragging-builtin.html
index f9471b0ef..78fcd89f9 100644
--- a/library/fullcalendar/examples/external-dragging-builtin.html
+++ b/library/fullcalendar/examples/external-dragging-builtin.html
@@ -2,26 +2,16 @@
<html>
<head>
<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
+<script src='../dist/index.global.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
- var Calendar = FullCalendar.Calendar;
- var Draggable = FullCalendarInteraction.Draggable
/* initialize the external events
-----------------------------------------------------------------*/
var containerEl = document.getElementById('external-events-list');
- new Draggable(containerEl, {
+ new FullCalendar.Draggable(containerEl, {
itemSelector: '.fc-event',
eventData: function(eventEl) {
return {
@@ -36,7 +26,7 @@
// containerEl.querySelectorAll('.fc-event')
// );
// eventEls.forEach(function(eventEl) {
- // new Draggable(eventEl, {
+ // new FullCalendar.Draggable(eventEl, {
// eventData: {
// title: eventEl.innerText.trim(),
// }
@@ -47,9 +37,8 @@
-----------------------------------------------------------------*/
var calendarEl = document.getElementById('calendar');
- var calendar = new Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
- header: {
+ var calendar = new FullCalendar.Calendar(calendarEl, {
+ headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
@@ -77,13 +66,10 @@
font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
}
- #wrap {
- width: 1100px;
- margin: 0 auto;
- }
-
#external-events {
- float: left;
+ position: fixed;
+ left: 20px;
+ top: 20px;
width: 150px;
padding: 0 10px;
border: 1px solid #ccc;
@@ -98,8 +84,8 @@
}
#external-events .fc-event {
- margin: 10px 0;
- cursor: pointer;
+ margin: 3px 0;
+ cursor: move;
}
#external-events p {
@@ -113,9 +99,13 @@
vertical-align: middle;
}
+ #calendar-wrap {
+ margin-left: 200px;
+ }
+
#calendar {
- float: right;
- width: 900px;
+ max-width: 1100px;
+ margin: 0 auto;
}
</style>
@@ -127,11 +117,21 @@
<h4>Draggable Events</h4>
<div id='external-events-list'>
- <div class='fc-event'>My Event 1</div>
- <div class='fc-event'>My Event 2</div>
- <div class='fc-event'>My Event 3</div>
- <div class='fc-event'>My Event 4</div>
- <div class='fc-event'>My Event 5</div>
+ <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+ <div class='fc-event-main'>My Event 1</div>
+ </div>
+ <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+ <div class='fc-event-main'>My Event 2</div>
+ </div>
+ <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+ <div class='fc-event-main'>My Event 3</div>
+ </div>
+ <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+ <div class='fc-event-main'>My Event 4</div>
+ </div>
+ <div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event'>
+ <div class='fc-event-main'>My Event 5</div>
+ </div>
</div>
<p>
@@ -140,9 +140,9 @@
</p>
</div>
- <div id='calendar'></div>
-
- <div style='clear:both'></div>
+ <div id='calendar-wrap'>
+ <div id='calendar'></div>
+ </div>
</div>
</body>
diff --git a/library/fullcalendar/examples/full-height.html b/library/fullcalendar/examples/full-height.html
index be8195472..89b8f7a60 100644
--- a/library/fullcalendar/examples/full-height.html
+++ b/library/fullcalendar/examples/full-height.html
@@ -2,87 +2,83 @@
<html>
<head>
<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
+<script src='../dist/index.global.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
- height: 'parent',
- header: {
+ height: '100%',
+ expandRows: true,
+ slotMinTime: '08:00',
+ slotMaxTime: '20:00',
+ headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
},
- defaultView: 'dayGridMonth',
- defaultDate: '2020-05-12',
+ initialView: 'dayGridMonth',
+ initialDate: '2020-09-12',
navLinks: true, // can click day/week names to navigate views
editable: true,
- eventLimit: true, // allow "more" link when too many events
+ selectable: true,
+ nowIndicator: true,
+ dayMaxEvents: true, // allow "more" link when too many events
events: [
{
title: 'All Day Event',
- start: '2020-05-01',
+ start: '2020-09-01',
},
{
title: 'Long Event',
- start: '2020-05-07',
- end: '2020-05-10'
+ start: '2020-09-07',
+ end: '2020-09-10'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-09T16:00:00'
+ start: '2020-09-09T16:00:00'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-16T16:00:00'
+ start: '2020-09-16T16:00:00'
},
{
title: 'Conference',
- start: '2020-05-11',
- end: '2020-05-13'
+ start: '2020-09-11',
+ end: '2020-09-13'
},
{
title: 'Meeting',
- start: '2020-05-12T10:30:00',
- end: '2020-05-12T12:30:00'
+ start: '2020-09-12T10:30:00',
+ end: '2020-09-12T12:30:00'
},
{
title: 'Lunch',
- start: '2020-05-12T12:00:00'
+ start: '2020-09-12T12:00:00'
},
{
title: 'Meeting',
- start: '2020-05-12T14:30:00'
+ start: '2020-09-12T14:30:00'
},
{
title: 'Happy Hour',
- start: '2020-05-12T17:30:00'
+ start: '2020-09-12T17:30:00'
},
{
title: 'Dinner',
- start: '2020-05-12T20:00:00'
+ start: '2020-09-12T20:00:00'
},
{
title: 'Birthday Party',
- start: '2020-05-13T07:00:00'
+ start: '2020-09-13T07:00:00'
},
{
title: 'Click for Google',
url: 'http://google.com/',
- start: '2020-05-28'
+ start: '2020-09-28'
}
]
});
diff --git a/library/fullcalendar/examples/google-calendar.html b/library/fullcalendar/examples/google-calendar.html
deleted file mode 100644
index 96194ac62..000000000
--- a/library/fullcalendar/examples/google-calendar.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
-<script src='../packages/google-calendar/main.js'></script>
-<script>
-
- document.addEventListener('DOMContentLoaded', function() {
- var calendarEl = document.getElementById('calendar');
-
- var calendar = new FullCalendar.Calendar(calendarEl, {
-
- plugins: [ 'interaction', 'dayGrid', 'list', 'googleCalendar' ],
-
- header: {
- left: 'prev,next today',
- center: 'title',
- right: 'dayGridMonth,listYear'
- },
-
- displayEventTime: false, // don't show the time column in list view
-
- // THIS KEY WON'T WORK IN PRODUCTION!!!
- // To make your own Google API key, follow the directions here:
- // http://fullcalendar.io/docs/google_calendar/
- googleCalendarApiKey: 'AIzaSyDcnW6WejpTOCffshGDDb4neIrXVUA1EAE',
-
- // US Holidays
- events: 'en.usa#holiday@group.v.calendar.google.com',
-
- eventClick: function(arg) {
- // opens events in a popup window
- window.open(arg.event.url, 'google-calendar-event', 'width=700,height=600');
-
- arg.jsEvent.preventDefault() // don't navigate in main tab
- },
-
- loading: function(bool) {
- document.getElementById('loading').style.display =
- bool ? 'block' : 'none';
- }
-
- });
-
- calendar.render();
- });
-
-</script>
-<style>
-
- body {
- margin: 40px 10px;
- padding: 0;
- font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
- font-size: 14px;
- }
-
- #loading {
- display: none;
- position: absolute;
- top: 10px;
- right: 10px;
- }
-
- #calendar {
- max-width: 900px;
- margin: 0 auto;
- }
-
-</style>
-</head>
-<body>
-
- <div id='loading'>loading...</div>
-
- <div id='calendar'></div>
-
-</body>
-</html>
diff --git a/library/fullcalendar/examples/js/theme-chooser.js b/library/fullcalendar/examples/js/theme-chooser.js
deleted file mode 100644
index 92a7c4753..000000000
--- a/library/fullcalendar/examples/js/theme-chooser.js
+++ /dev/null
@@ -1,141 +0,0 @@
-
-function initThemeChooser(settings) {
- var isInitialized = false;
- var currentThemeSystem; // don't set this directly. use setThemeSystem
- var currentStylesheetEl;
- var loadingEl = document.getElementById('loading');
- var systemSelectEl = document.querySelector('#theme-system-selector select');
- var themeSelectWrapEls = Array.prototype.slice.call( // convert to real array
- document.querySelectorAll('.selector[data-theme-system]')
- );
-
- systemSelectEl.addEventListener('change', function() {
- setThemeSystem(this.value);
- });
-
- setThemeSystem(systemSelectEl.value);
-
- themeSelectWrapEls.forEach(function(themeSelectWrapEl) {
- var themeSelectEl = themeSelectWrapEl.querySelector('select');
-
- themeSelectWrapEl.addEventListener('change', function() {
- setTheme(
- currentThemeSystem,
- themeSelectEl.options[themeSelectEl.selectedIndex].value
- );
- });
- });
-
-
- function setThemeSystem(themeSystem) {
- var selectedTheme;
-
- currentThemeSystem = themeSystem;
-
- themeSelectWrapEls.forEach(function(themeSelectWrapEl) {
- var themeSelectEl = themeSelectWrapEl.querySelector('select');
-
- if (themeSelectWrapEl.getAttribute('data-theme-system') === themeSystem) {
- selectedTheme = themeSelectEl.options[themeSelectEl.selectedIndex].value;
- themeSelectWrapEl.style.display = 'inline-block';
- } else {
- themeSelectWrapEl.style.display = 'none';
- }
- });
-
- setTheme(themeSystem, selectedTheme);
- }
-
-
- function setTheme(themeSystem, themeName) {
- var stylesheetUrl = generateStylesheetUrl(themeSystem, themeName);
- var stylesheetEl;
-
- function done() {
- if (!isInitialized) {
- isInitialized = true;
- settings.init(themeSystem);
- }
- else {
- settings.change(themeSystem);
- }
-
- showCredits(themeSystem, themeName);
- }
-
- if (stylesheetUrl) {
- stylesheetEl = document.createElement('link');
- stylesheetEl.setAttribute('rel', 'stylesheet');
- stylesheetEl.setAttribute('href', stylesheetUrl);
- document.querySelector('head').appendChild(stylesheetEl);
-
- loadingEl.style.display = 'inline';
-
- whenStylesheetLoaded(stylesheetEl, function() {
- if (currentStylesheetEl) {
- currentStylesheetEl.parentNode.removeChild(currentStylesheetEl);
- }
- currentStylesheetEl = stylesheetEl;
- loadingEl.style.display = 'none';
- done();
- });
- } else {
- if (currentStylesheetEl) {
- currentStylesheetEl.parentNode.removeChild(currentStylesheetEl);
- currentStylesheetEl = null
- }
- done();
- }
- }
-
-
- function generateStylesheetUrl(themeSystem, themeName) {
- if (themeSystem === 'bootstrap') {
- if (themeName) {
- return 'https://bootswatch.com/4/' + themeName + '/bootstrap.min.css';
- }
- else { // the default bootstrap theme
- return 'https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css';
- }
- }
- }
-
-
- function showCredits(themeSystem, themeName) {
- var creditId;
-
- if (themeSystem.match('bootstrap')) {
- if (themeName) {
- creditId = 'bootstrap-custom';
- }
- else {
- creditId = 'bootstrap-standard';
- }
- }
-
- Array.prototype.slice.call( // convert to real array
- document.querySelectorAll('.credits')
- ).forEach(function(creditEl) {
- if (creditEl.getAttribute('data-credit-id') === creditId) {
- creditEl.style.display = 'block';
- } else {
- creditEl.style.display = 'none';
- }
- })
- }
-
-
- function whenStylesheetLoaded(linkNode, callback) {
- var isReady = false;
-
- function ready() {
- if (!isReady) { // avoid double-call
- isReady = true;
- callback();
- }
- }
-
- linkNode.onload = ready; // does not work cross-browser
- setTimeout(ready, 2000); // max wait. also handles browsers that don't support onload
- }
-}
diff --git a/library/fullcalendar/examples/json.html b/library/fullcalendar/examples/json.html
deleted file mode 100644
index d7c9a5328..000000000
--- a/library/fullcalendar/examples/json.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
-<script>
-
- document.addEventListener('DOMContentLoaded', function() {
- var calendarEl = document.getElementById('calendar');
-
- var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
- header: {
- left: 'prev,next today',
- center: 'title',
- right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
- },
- defaultDate: '2020-05-12',
- editable: true,
- navLinks: true, // can click day/week names to navigate views
- eventLimit: true, // allow "more" link when too many events
- events: {
- url: 'php/get-events.php',
- failure: function() {
- document.getElementById('script-warning').style.display = 'block'
- }
- },
- loading: function(bool) {
- document.getElementById('loading').style.display =
- bool ? 'block' : 'none';
- }
- });
-
- calendar.render();
- });
-
-</script>
-<style>
-
- body {
- margin: 0;
- padding: 0;
- font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
- font-size: 14px;
- }
-
- #script-warning {
- display: none;
- background: #eee;
- border-bottom: 1px solid #ddd;
- padding: 0 10px;
- line-height: 40px;
- text-align: center;
- font-weight: bold;
- font-size: 12px;
- color: red;
- }
-
- #loading {
- display: none;
- position: absolute;
- top: 10px;
- right: 10px;
- }
-
- #calendar {
- max-width: 900px;
- margin: 40px auto;
- padding: 0 10px;
- }
-
-</style>
-</head>
-<body>
-
- <div id='script-warning'>
- <code>php/get-events.php</code> must be running.
- </div>
-
- <div id='loading'>loading...</div>
-
- <div id='calendar'></div>
-
-</body>
-</html>
diff --git a/library/fullcalendar/examples/json/events.json b/library/fullcalendar/examples/json/events.json
deleted file mode 100644
index 2352f2d87..000000000
--- a/library/fullcalendar/examples/json/events.json
+++ /dev/null
@@ -1,56 +0,0 @@
-[
- {
- "title": "All Day Event",
- "start": "2020-05-01"
- },
- {
- "title": "Long Event",
- "start": "2020-05-07",
- "end": "2020-05-10"
- },
- {
- "id": "999",
- "title": "Repeating Event",
- "start": "2020-05-09T16:00:00-05:00"
- },
- {
- "id": "999",
- "title": "Repeating Event",
- "start": "2020-05-16T16:00:00-05:00"
- },
- {
- "title": "Conference",
- "start": "2020-05-11",
- "end": "2020-05-13"
- },
- {
- "title": "Meeting",
- "start": "2020-05-12T10:30:00-05:00",
- "end": "2020-05-12T12:30:00-05:00"
- },
- {
- "title": "Lunch",
- "start": "2020-05-12T12:00:00-05:00"
- },
- {
- "title": "Meeting",
- "start": "2020-05-12T14:30:00-05:00"
- },
- {
- "title": "Happy Hour",
- "start": "2020-05-12T17:30:00-05:00"
- },
- {
- "title": "Dinner",
- "start": "2020-05-12T20:00:00"
- },
- {
- "title": "Birthday Party",
- "start": "2020-05-13T07:00:00-05:00"
- },
- {
- "title": "Click for Google",
- "url": "http://google.com/",
- "start": "2020-05-28"
- }
-]
diff --git a/library/fullcalendar/examples/list-sticky-header.html b/library/fullcalendar/examples/list-sticky-header.html
new file mode 100644
index 000000000..dacd93b01
--- /dev/null
+++ b/library/fullcalendar/examples/list-sticky-header.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<script src='../dist/index.global.js'></script>
+<script>
+
+ document.addEventListener('DOMContentLoaded', function() {
+ var calendarEl = document.getElementById('calendar');
+
+ var calendar = new FullCalendar.Calendar(calendarEl, {
+ height: 'auto',
+ // stickyHeaderDates: false, // for disabling
+
+ headerToolbar: {
+ left: 'prev,next today',
+ center: 'title',
+ right: 'listMonth,listYear'
+ },
+
+ // customize the button names,
+ // otherwise they'd all just say "list"
+ views: {
+ listMonth: { buttonText: 'list month' },
+ listYear: { buttonText: 'list year' }
+ },
+
+ initialView: 'listYear',
+ initialDate: '2020-09-12',
+ navLinks: true, // can click day/week names to navigate views
+ editable: true,
+ events: [
+ {
+ title: 'repeating event 1',
+ daysOfWeek: [ 1, 2, 3 ],
+ duration: '00:30'
+ },
+ {
+ title: 'repeating event 2',
+ daysOfWeek: [ 1, 2, 3 ],
+ duration: '00:30'
+ },
+ {
+ title: 'repeating event 3',
+ daysOfWeek: [ 1, 2, 3 ],
+ duration: '00:30'
+ }
+ ]
+ });
+
+ calendar.render();
+ });
+
+</script>
+<style>
+
+ body {
+ margin: 40px 10px;
+ padding: 0;
+ font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+ font-size: 14px;
+ }
+
+ #calendar {
+ max-width: 1100px;
+ margin: 0 auto;
+ }
+
+</style>
+</head>
+<body>
+
+ <div id='calendar'></div>
+
+</body>
+</html>
diff --git a/library/fullcalendar/examples/list-views.html b/library/fullcalendar/examples/list-views.html
index e97c1c231..43094334d 100644
--- a/library/fullcalendar/examples/list-views.html
+++ b/library/fullcalendar/examples/list-views.html
@@ -2,22 +2,18 @@
<html>
<head>
<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/list/main.js'></script>
+<script src='../dist/index.global.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'list' ],
- header: {
+ headerToolbar: {
left: 'prev,next today',
center: 'title',
- right: 'listDay,listWeek,dayGridMonth'
+ right: 'listDay,listWeek'
},
// customize the button names,
@@ -27,65 +23,65 @@
listWeek: { buttonText: 'list week' }
},
- defaultView: 'listWeek',
- defaultDate: '2020-05-12',
+ initialView: 'listWeek',
+ initialDate: '2020-09-12',
navLinks: true, // can click day/week names to navigate views
editable: true,
- eventLimit: true, // allow "more" link when too many events
+ dayMaxEvents: true, // allow "more" link when too many events
events: [
{
title: 'All Day Event',
- start: '2020-05-01'
+ start: '2020-09-01'
},
{
title: 'Long Event',
- start: '2020-05-07',
- end: '2020-05-10'
+ start: '2020-09-07',
+ end: '2020-09-10'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-09T16:00:00'
+ start: '2020-09-09T16:00:00'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-16T16:00:00'
+ start: '2020-09-16T16:00:00'
},
{
title: 'Conference',
- start: '2020-05-11',
- end: '2020-05-13'
+ start: '2020-09-11',
+ end: '2020-09-13'
},
{
title: 'Meeting',
- start: '2020-05-12T10:30:00',
- end: '2020-05-12T12:30:00'
+ start: '2020-09-12T10:30:00',
+ end: '2020-09-12T12:30:00'
},
{
title: 'Lunch',
- start: '2020-05-12T12:00:00'
+ start: '2020-09-12T12:00:00'
},
{
title: 'Meeting',
- start: '2020-05-12T14:30:00'
+ start: '2020-09-12T14:30:00'
},
{
title: 'Happy Hour',
- start: '2020-05-12T17:30:00'
+ start: '2020-09-12T17:30:00'
},
{
title: 'Dinner',
- start: '2020-05-12T20:00:00'
+ start: '2020-09-12T20:00:00'
},
{
title: 'Birthday Party',
- start: '2020-05-13T07:00:00'
+ start: '2020-09-13T07:00:00'
},
{
title: 'Click for Google',
url: 'http://google.com/',
- start: '2020-05-28'
+ start: '2020-09-28'
}
]
});
@@ -104,7 +100,7 @@
}
#calendar {
- max-width: 900px;
+ max-width: 1100px;
margin: 0 auto;
}
diff --git a/library/fullcalendar/examples/locales.html b/library/fullcalendar/examples/locales.html
deleted file mode 100644
index c6d76798f..000000000
--- a/library/fullcalendar/examples/locales.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/core/locales-all.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
-<script>
-
- document.addEventListener('DOMContentLoaded', function() {
- var initialLocaleCode = 'en';
- var localeSelectorEl = document.getElementById('locale-selector');
- var calendarEl = document.getElementById('calendar');
-
- var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
- header: {
- left: 'prev,next today',
- center: 'title',
- right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
- },
- defaultDate: '2020-05-12',
- locale: initialLocaleCode,
- buttonIcons: false, // show the prev/next text
- weekNumbers: true,
- navLinks: true, // can click day/week names to navigate views
- editable: true,
- eventLimit: true, // allow "more" link when too many events
- events: [
- {
- title: 'All Day Event',
- start: '2020-05-01'
- },
- {
- title: 'Long Event',
- start: '2020-05-07',
- end: '2020-05-10'
- },
- {
- groupId: 999,
- title: 'Repeating Event',
- start: '2020-05-09T16:00:00'
- },
- {
- groupId: 999,
- title: 'Repeating Event',
- start: '2020-05-16T16:00:00'
- },
- {
- title: 'Conference',
- start: '2020-05-11',
- end: '2020-05-13'
- },
- {
- title: 'Meeting',
- start: '2020-05-12T10:30:00',
- end: '2020-05-12T12:30:00'
- },
- {
- title: 'Lunch',
- start: '2020-05-12T12:00:00'
- },
- {
- title: 'Meeting',
- start: '2020-05-12T14:30:00'
- },
- {
- title: 'Happy Hour',
- start: '2020-05-12T17:30:00'
- },
- {
- title: 'Dinner',
- start: '2020-05-12T20:00:00'
- },
- {
- title: 'Birthday Party',
- start: '2020-05-13T07:00:00'
- },
- {
- title: 'Click for Google',
- url: 'http://google.com/',
- start: '2020-05-28'
- }
- ]
- });
-
- calendar.render();
-
- // build the locale selector's options
- calendar.getAvailableLocaleCodes().forEach(function(localeCode) {
- var optionEl = document.createElement('option');
- optionEl.value = localeCode;
- optionEl.selected = localeCode == initialLocaleCode;
- optionEl.innerText = localeCode;
- localeSelectorEl.appendChild(optionEl);
- });
-
- // when the selected option changes, dynamically change the calendar option
- localeSelectorEl.addEventListener('change', function() {
- if (this.value) {
- calendar.setOption('locale', this.value);
- }
- });
-
- });
-
-</script>
-<style>
-
- body {
- margin: 0;
- padding: 0;
- font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
- font-size: 14px;
- }
-
- #top {
- background: #eee;
- border-bottom: 1px solid #ddd;
- padding: 0 10px;
- line-height: 40px;
- font-size: 12px;
- }
-
- #calendar {
- max-width: 900px;
- margin: 40px auto;
- padding: 0 10px;
- }
-
-</style>
-</head>
-<body>
-
- <div id='top'>
-
- Locales:
- <select id='locale-selector'></select>
-
- </div>
-
- <div id='calendar'></div>
-
-</body>
-</html>
diff --git a/library/fullcalendar/examples/month-view.html b/library/fullcalendar/examples/month-view.html
index 9df8682b3..a285ff949 100644
--- a/library/fullcalendar/examples/month-view.html
+++ b/library/fullcalendar/examples/month-view.html
@@ -2,75 +2,72 @@
<html>
<head>
<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
+<script src='../dist/index.global.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid' ],
- defaultDate: '2020-05-12',
+ initialDate: '2020-09-12',
editable: true,
- eventLimit: true, // allow "more" link when too many events
+ selectable: true,
+ businessHours: true,
+ dayMaxEvents: true, // allow "more" link when too many events
events: [
{
title: 'All Day Event',
- start: '2020-05-01'
+ start: '2020-09-01'
},
{
title: 'Long Event',
- start: '2020-05-07',
- end: '2020-05-10'
+ start: '2020-09-07',
+ end: '2020-09-10'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-09T16:00:00'
+ start: '2020-09-09T16:00:00'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-16T16:00:00'
+ start: '2020-09-16T16:00:00'
},
{
title: 'Conference',
- start: '2020-05-11',
- end: '2020-05-13'
+ start: '2020-09-11',
+ end: '2020-09-13'
},
{
title: 'Meeting',
- start: '2020-05-12T10:30:00',
- end: '2020-05-12T12:30:00'
+ start: '2020-09-12T10:30:00',
+ end: '2020-09-12T12:30:00'
},
{
title: 'Lunch',
- start: '2020-05-12T12:00:00'
+ start: '2020-09-12T12:00:00'
},
{
title: 'Meeting',
- start: '2020-05-12T14:30:00'
+ start: '2020-09-12T14:30:00'
},
{
title: 'Happy Hour',
- start: '2020-05-12T17:30:00'
+ start: '2020-09-12T17:30:00'
},
{
title: 'Dinner',
- start: '2020-05-12T20:00:00'
+ start: '2020-09-12T20:00:00'
},
{
title: 'Birthday Party',
- start: '2020-05-13T07:00:00'
+ start: '2020-09-13T07:00:00'
},
{
title: 'Click for Google',
url: 'http://google.com/',
- start: '2020-05-28'
+ start: '2020-09-28'
}
]
});
@@ -89,7 +86,7 @@
}
#calendar {
- max-width: 900px;
+ max-width: 1100px;
margin: 0 auto;
}
diff --git a/library/fullcalendar/examples/natural-height.html b/library/fullcalendar/examples/natural-height.html
new file mode 100644
index 000000000..215067522
--- /dev/null
+++ b/library/fullcalendar/examples/natural-height.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset='utf-8' />
+<script src='../dist/index.global.js'></script>
+<script>
+
+ document.addEventListener('DOMContentLoaded', function() {
+ var calendarEl = document.getElementById('calendar');
+
+ var calendar = new FullCalendar.Calendar(calendarEl, {
+ initialDate: '2020-09-12',
+ initialView: 'timeGridWeek',
+ headerToolbar: {
+ left: 'prev,next today',
+ center: 'title',
+ right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
+ },
+ height: 'auto',
+ navLinks: true, // can click day/week names to navigate views
+ editable: true,
+ selectable: true,
+ selectMirror: true,
+ nowIndicator: true,
+ events: [
+ {
+ title: 'All Day Event',
+ start: '2020-09-01',
+ },
+ {
+ title: 'Long Event',
+ start: '2020-09-07',
+ end: '2020-09-10'
+ },
+ {
+ groupId: 999,
+ title: 'Repeating Event',
+ start: '2020-09-09T16:00:00'
+ },
+ {
+ groupId: 999,
+ title: 'Repeating Event',
+ start: '2020-09-16T16:00:00'
+ },
+ {
+ title: 'Conference',
+ start: '2020-09-11',
+ end: '2020-09-13'
+ },
+ {
+ title: 'Meeting',
+ start: '2020-09-12T10:30:00',
+ end: '2020-09-12T12:30:00'
+ },
+ {
+ title: 'Lunch',
+ start: '2020-09-12T12:00:00'
+ },
+ {
+ title: 'Meeting',
+ start: '2020-09-12T14:30:00'
+ },
+ {
+ title: 'Happy Hour',
+ start: '2020-09-12T17:30:00'
+ },
+ {
+ title: 'Dinner',
+ start: '2020-09-12T20:00:00'
+ },
+ {
+ title: 'Birthday Party',
+ start: '2020-09-13T07:00:00'
+ },
+ {
+ title: 'Click for Google',
+ url: 'http://google.com/',
+ start: '2020-09-28'
+ }
+ ]
+ });
+
+ calendar.render();
+ });
+
+</script>
+<style>
+
+ body {
+ margin: 40px 10px;
+ padding: 0;
+ font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
+ font-size: 14px;
+ }
+
+ #calendar {
+ max-width: 1100px;
+ margin: 0 auto;
+ }
+
+</style>
+</head>
+<body>
+
+ <div id='calendar'></div>
+
+</body>
+</html>
diff --git a/library/fullcalendar/examples/php/get-events.php b/library/fullcalendar/examples/php/get-events.php
deleted file mode 100644
index e4d765433..000000000
--- a/library/fullcalendar/examples/php/get-events.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-//--------------------------------------------------------------------------------------------------
-// This script reads event data from a JSON file and outputs those events which are within the range
-// supplied by the "start" and "end" GET parameters.
-//
-// An optional "timeZone" GET parameter will force all ISO8601 date stings to a given timeZone.
-//
-// Requires PHP 5.2.0 or higher.
-//--------------------------------------------------------------------------------------------------
-
-// Require our Event class and datetime utilities
-require dirname(__FILE__) . '/utils.php';
-
-// Short-circuit if the client did not give us a date range.
-if (!isset($_GET['start']) || !isset($_GET['end'])) {
- die("Please provide a date range.");
-}
-
-// Parse the start/end parameters.
-// These are assumed to be ISO8601 strings with no time nor timeZone, like "2013-12-29".
-// Since no timeZone will be present, they will parsed as UTC.
-$range_start = parseDateTime($_GET['start']);
-$range_end = parseDateTime($_GET['end']);
-
-// Parse the timeZone parameter if it is present.
-$time_zone = null;
-if (isset($_GET['timeZone'])) {
- $time_zone = new DateTimeZone($_GET['timeZone']);
-}
-
-// Read and parse our events JSON file into an array of event data arrays.
-$json = file_get_contents(dirname(__FILE__) . '/../json/events.json');
-$input_arrays = json_decode($json, true);
-
-// Accumulate an output array of event data arrays.
-$output_arrays = array();
-foreach ($input_arrays as $array) {
-
- // Convert the input array into a useful Event object
- $event = new Event($array, $time_zone);
-
- // If the event is in-bounds, add it to the output
- if ($event->isWithinDayRange($range_start, $range_end)) {
- $output_arrays[] = $event->toArray();
- }
-}
-
-// Send JSON to the client.
-echo json_encode($output_arrays);
diff --git a/library/fullcalendar/examples/php/get-time-zones.php b/library/fullcalendar/examples/php/get-time-zones.php
deleted file mode 100644
index 241e1bd18..000000000
--- a/library/fullcalendar/examples/php/get-time-zones.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-//--------------------------------------------------------------------------------------------------
-// This script outputs a JSON array of all timezones (like "America/Chicago") that PHP supports.
-//
-// Requires PHP 5.2.0 or higher.
-//--------------------------------------------------------------------------------------------------
-
-echo json_encode(DateTimeZone::listIdentifiers()); \ No newline at end of file
diff --git a/library/fullcalendar/examples/php/utils.php b/library/fullcalendar/examples/php/utils.php
deleted file mode 100644
index aa67cda75..000000000
--- a/library/fullcalendar/examples/php/utils.php
+++ /dev/null
@@ -1,130 +0,0 @@
-<?php
-
-//--------------------------------------------------------------------------------------------------
-// Utilities for our event-fetching scripts.
-//
-// Requires PHP 5.2.0 or higher.
-//--------------------------------------------------------------------------------------------------
-
-// PHP will fatal error if we attempt to use the DateTime class without this being set.
-date_default_timezone_set('UTC');
-
-
-class Event {
-
- // Tests whether the given ISO8601 string has a time-of-day or not
- const ALL_DAY_REGEX = '/^\d{4}-\d\d-\d\d$/'; // matches strings like "2013-12-29"
-
- public $title;
- public $allDay; // a boolean
- public $start; // a DateTime
- public $end; // a DateTime, or null
- public $properties = array(); // an array of other misc properties
-
-
- // Constructs an Event object from the given array of key=>values.
- // You can optionally force the timeZone of the parsed dates.
- public function __construct($array, $timeZone=null) {
-
- $this->title = $array['title'];
-
- if (isset($array['allDay'])) {
- // allDay has been explicitly specified
- $this->allDay = (bool)$array['allDay'];
- }
- else {
- // Guess allDay based off of ISO8601 date strings
- $this->allDay = preg_match(self::ALL_DAY_REGEX, $array['start']) &&
- (!isset($array['end']) || preg_match(self::ALL_DAY_REGEX, $array['end']));
- }
-
- if ($this->allDay) {
- // If dates are allDay, we want to parse them in UTC to avoid DST issues.
- $timeZone = null;
- }
-
- // Parse dates
- $this->start = parseDateTime($array['start'], $timeZone);
- $this->end = isset($array['end']) ? parseDateTime($array['end'], $timeZone) : null;
-
- // Record misc properties
- foreach ($array as $name => $value) {
- if (!in_array($name, array('title', 'allDay', 'start', 'end'))) {
- $this->properties[$name] = $value;
- }
- }
- }
-
-
- // Returns whether the date range of our event intersects with the given all-day range.
- // $rangeStart and $rangeEnd are assumed to be dates in UTC with 00:00:00 time.
- public function isWithinDayRange($rangeStart, $rangeEnd) {
-
- // Normalize our event's dates for comparison with the all-day range.
- $eventStart = stripTime($this->start);
-
- if (isset($this->end)) {
- $eventEnd = stripTime($this->end); // normalize
- }
- else {
- $eventEnd = $eventStart; // consider this a zero-duration event
- }
-
- // Check if the two whole-day ranges intersect.
- return $eventStart < $rangeEnd && $eventEnd >= $rangeStart;
- }
-
-
- // Converts this Event object back to a plain data array, to be used for generating JSON
- public function toArray() {
-
- // Start with the misc properties (don't worry, PHP won't affect the original array)
- $array = $this->properties;
-
- $array['title'] = $this->title;
-
- // Figure out the date format. This essentially encodes allDay into the date string.
- if ($this->allDay) {
- $format = 'Y-m-d'; // output like "2013-12-29"
- }
- else {
- $format = 'c'; // full ISO8601 output, like "2013-12-29T09:00:00+08:00"
- }
-
- // Serialize dates into strings
- $array['start'] = $this->start->format($format);
- if (isset($this->end)) {
- $array['end'] = $this->end->format($format);
- }
-
- return $array;
- }
-
-}
-
-
-// Date Utilities
-//----------------------------------------------------------------------------------------------
-
-
-// Parses a string into a DateTime object, optionally forced into the given timeZone.
-function parseDateTime($string, $timeZone=null) {
- $date = new DateTime(
- $string,
- $timeZone ? $timeZone : new DateTimeZone('UTC')
- // Used only when the string is ambiguous.
- // Ignored if string has a timeZone offset in it.
- );
- if ($timeZone) {
- // If our timeZone was ignored above, force it.
- $date->setTimezone($timeZone);
- }
- return $date;
-}
-
-
-// Takes the year/month/date values of the given DateTime and converts them to a new DateTime,
-// but in UTC.
-function stripTime($datetime) {
- return new DateTime($datetime->format('Y-m-d'));
-}
diff --git a/library/fullcalendar/examples/rrule.html b/library/fullcalendar/examples/rrule.html
deleted file mode 100644
index 937c6d25b..000000000
--- a/library/fullcalendar/examples/rrule.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../vendor/rrule.js'></script>
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
-<script src='../packages/rrule/main.js'></script>
-<script>
-
- document.addEventListener('DOMContentLoaded', function() {
- var calendarEl = document.getElementById('calendar');
-
- var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list', 'rrule' ],
- header: {
- left: 'prev,next today',
- center: 'title',
- right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
- },
- defaultDate: '2020-05-12',
- editable: true,
- events: [
- {
- title: 'rrule event',
- rrule: {
- dtstart: '2020-05-09T13:00:00',
- // until: '2020-05-01',
- freq: 'weekly'
- },
- duration: '02:00'
- }
- ],
- eventClick: function(arg) {
- if (confirm('delete event?')) {
- arg.event.remove()
- }
- }
- });
-
- calendar.render();
- });
-
-</script>
-<style>
-
- body {
- margin: 40px 10px;
- padding: 0;
- font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
- font-size: 14px;
- }
-
- #calendar {
- max-width: 900px;
- margin: 0 auto;
- }
-
-</style>
-</head>
-<body>
-
- <div id='calendar'></div>
-
-</body>
-</html>
diff --git a/library/fullcalendar/examples/selectable.html b/library/fullcalendar/examples/selectable.html
index 13aa88ee8..09d384498 100644
--- a/library/fullcalendar/examples/selectable.html
+++ b/library/fullcalendar/examples/selectable.html
@@ -2,26 +2,19 @@
<html>
<head>
<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
+<script src='../dist/index.global.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid' ],
- header: {
+ headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay'
},
- defaultDate: '2020-05-12',
+ initialDate: '2020-09-12',
navLinks: true, // can click day/week names to navigate views
selectable: true,
selectMirror: true,
@@ -37,62 +30,67 @@
}
calendar.unselect()
},
+ eventClick: function(arg) {
+ if (confirm('Are you sure you want to delete this event?')) {
+ arg.event.remove()
+ }
+ },
editable: true,
- eventLimit: true, // allow "more" link when too many events
+ dayMaxEvents: true, // allow "more" link when too many events
events: [
{
title: 'All Day Event',
- start: '2020-05-01'
+ start: '2020-09-01'
},
{
title: 'Long Event',
- start: '2020-05-07',
- end: '2020-05-10'
+ start: '2020-09-07',
+ end: '2020-09-10'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-09T16:00:00'
+ start: '2020-09-09T16:00:00'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-16T16:00:00'
+ start: '2020-09-16T16:00:00'
},
{
title: 'Conference',
- start: '2020-05-11',
- end: '2020-05-13'
+ start: '2020-09-11',
+ end: '2020-09-13'
},
{
title: 'Meeting',
- start: '2020-05-12T10:30:00',
- end: '2020-05-12T12:30:00'
+ start: '2020-09-12T10:30:00',
+ end: '2020-09-12T12:30:00'
},
{
title: 'Lunch',
- start: '2020-05-12T12:00:00'
+ start: '2020-09-12T12:00:00'
},
{
title: 'Meeting',
- start: '2020-05-12T14:30:00'
+ start: '2020-09-12T14:30:00'
},
{
title: 'Happy Hour',
- start: '2020-05-12T17:30:00'
+ start: '2020-09-12T17:30:00'
},
{
title: 'Dinner',
- start: '2020-05-12T20:00:00'
+ start: '2020-09-12T20:00:00'
},
{
title: 'Birthday Party',
- start: '2020-05-13T07:00:00'
+ start: '2020-09-13T07:00:00'
},
{
title: 'Click for Google',
url: 'http://google.com/',
- start: '2020-05-28'
+ start: '2020-09-28'
}
]
});
@@ -111,7 +109,7 @@
}
#calendar {
- max-width: 900px;
+ max-width: 1100px;
margin: 0 auto;
}
diff --git a/library/fullcalendar/examples/theming.html b/library/fullcalendar/examples/theming.html
deleted file mode 100644
index 6b4a89e76..000000000
--- a/library/fullcalendar/examples/theming.html
+++ /dev/null
@@ -1,215 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset='utf-8' />
-<link href='https://use.fontawesome.com/releases/v5.0.6/css/all.css' rel='stylesheet'>
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/bootstrap/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/bootstrap/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
-<script src='js/theme-chooser.js'></script>
-<script>
-
- document.addEventListener('DOMContentLoaded', function() {
- var calendarEl = document.getElementById('calendar');
- var calendar;
-
- initThemeChooser({
-
- init: function(themeSystem) {
- calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'bootstrap', 'interaction', 'dayGrid', 'timeGrid', 'list' ],
- themeSystem: themeSystem,
- header: {
- left: 'prev,next today',
- center: 'title',
- right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
- },
- defaultDate: '2020-05-12',
- weekNumbers: true,
- navLinks: true, // can click day/week names to navigate views
- editable: true,
- eventLimit: true, // allow "more" link when too many events
- events: [
- {
- title: 'All Day Event',
- start: '2020-05-01'
- },
- {
- title: 'Long Event',
- start: '2020-05-07',
- end: '2020-05-10'
- },
- {
- groupId: 999,
- title: 'Repeating Event',
- start: '2020-05-09T16:00:00'
- },
- {
- groupId: 999,
- title: 'Repeating Event',
- start: '2020-05-16T16:00:00'
- },
- {
- title: 'Conference',
- start: '2020-05-11',
- end: '2020-05-13'
- },
- {
- title: 'Meeting',
- start: '2020-05-12T10:30:00',
- end: '2020-05-12T12:30:00'
- },
- {
- title: 'Lunch',
- start: '2020-05-12T12:00:00'
- },
- {
- title: 'Meeting',
- start: '2020-05-12T14:30:00'
- },
- {
- title: 'Happy Hour',
- start: '2020-05-12T17:30:00'
- },
- {
- title: 'Dinner',
- start: '2020-05-12T20:00:00'
- },
- {
- title: 'Birthday Party',
- start: '2020-05-13T07:00:00'
- },
- {
- title: 'Click for Google',
- url: 'http://google.com/',
- start: '2020-05-28'
- }
- ]
- });
- calendar.render();
- },
-
- change: function(themeSystem) {
- calendar.setOption('themeSystem', themeSystem);
- }
-
- });
-
- });
-
-</script>
-<style>
-
- body {
- margin: 0;
- padding: 0;
- font-size: 14px;
- }
-
- #top,
- #calendar.fc-unthemed {
- font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
- }
-
- #top {
- background: #eee;
- border-bottom: 1px solid #ddd;
- padding: 0 10px;
- line-height: 40px;
- font-size: 12px;
- color: #000;
- }
-
- #top .selector {
- display: inline-block;
- margin-right: 10px;
- }
-
- #top select {
- font: inherit; /* mock what Boostrap does, don't compete */
- }
-
- .left { float: left }
- .right { float: right }
- .clear { clear: both }
-
- #calendar {
- max-width: 900px;
- margin: 40px auto;
- padding: 0 10px;
- }
-
-</style>
-</head>
-<body>
-
- <div id='top'>
-
- <div class='left'>
-
- <div id='theme-system-selector' class='selector'>
- Theme System:
-
- <select>
- <option value='bootstrap' selected>Bootstrap 4</option>
- <option value='standard'>unthemed</option>
- </select>
- </div>
-
- <div data-theme-system="bootstrap" class='selector' style='display:none'>
- Theme Name:
-
- <select>
- <option value='' selected>Default</option>
- <option value='cerulean'>Cerulean</option>
- <option value='cosmo'>Cosmo</option>
- <option value='cyborg'>Cyborg</option>
- <option value='darkly'>Darkly</option>
- <option value='flatly'>Flatly</option>
- <option value='journal'>Journal</option>
- <option value='litera'>Litera</option>
- <option value='lumen'>Lumen</option>
- <option value='lux'>Lux</option>
- <option value='materia'>Materia</option>
- <option value='minty'>Minty</option>
- <option value='pulse'>Pulse</option>
- <option value='sandstone'>Sandstone</option>
- <option value='simplex'>Simplex</option>
- <option value='sketchy'>Sketchy</option>
- <option value='slate'>Slate</option>
- <option value='solar'>Solar</option>
- <option value='spacelab'>Spacelab</option>
- <option value='superhero'>Superhero</option>
- <option value='united'>United</option>
- <option value='yeti'>Yeti</option>
- </select>
- </div>
-
- <span id='loading' style='display:none'>loading theme...</span>
-
- </div>
-
- <div class='right'>
- <span class='credits' data-credit-id='bootstrap-standard' style='display:none'>
- <a href='https://getbootstrap.com/docs/3.3/' target='_blank'>Theme by Bootstrap</a>
- </span>
- <span class='credits' data-credit-id='bootstrap-custom' style='display:none'>
- <a href='https://bootswatch.com/' target='_blank'>Theme by Bootswatch</a>
- </span>
- </div>
-
- <div class='clear'></div>
- </div>
-
- <div id='calendar'></div>
-
-</body>
-</html>
diff --git a/library/fullcalendar/examples/time-zones.html b/library/fullcalendar/examples/time-zones.html
deleted file mode 100644
index f4174a714..000000000
--- a/library/fullcalendar/examples/time-zones.html
+++ /dev/null
@@ -1,145 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
-<script>
-
- document.addEventListener('DOMContentLoaded', function() {
- var initialTimeZone = 'local';
- var timeZoneSelectorEl = document.getElementById('time-zone-selector');
- var loadingEl = document.getElementById('loading');
- var calendarEl = document.getElementById('calendar');
-
- var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
- timeZone: initialTimeZone,
- header: {
- left: 'prev,next today',
- center: 'title',
- right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
- },
- defaultDate: '2020-05-12',
- navLinks: true, // can click day/week names to navigate views
- editable: true,
- selectable: true,
- eventLimit: true, // allow "more" link when too many events
- events: {
- url: 'php/get-events.php',
- failure: function() {
- document.getElementById('script-warning').style.display = 'inline'; // show
- }
- },
- loading: function(bool) {
- if (bool) {
- loadingEl.style.display = 'inline'; // show
- } else {
- loadingEl.style.display = 'none'; // hide
- }
- },
-
- eventTimeFormat: { hour: 'numeric', minute: '2-digit', timeZoneName: 'short' },
-
- dateClick: function(arg) {
- console.log('dateClick', calendar.formatIso(arg.date));
- },
- select: function(arg) {
- console.log('select', calendar.formatIso(arg.start), calendar.formatIso(arg.end));
- }
- });
-
- calendar.render();
-
- // load the list of available timezones, build the <select> options
- // it's HIGHLY recommended to use a different library for network requests, not this internal util func
- FullCalendar.requestJson('GET', 'php/get-time-zones.php', {}, function(timeZones) {
-
- timeZones.forEach(function(timeZone) {
- var optionEl;
-
- if (timeZone !== 'UTC') { // UTC is already in the list
- optionEl = document.createElement('option');
- optionEl.value = timeZone;
- optionEl.innerText = timeZone;
- timeZoneSelectorEl.appendChild(optionEl);
- }
- });
- }, function() {
- // TODO: handle error
- });
-
- // when the timezone selector changes, dynamically change the calendar option
- timeZoneSelectorEl.addEventListener('change', function() {
- calendar.setOption('timeZone', this.value);
- });
- });
-
-</script>
-<style>
-
- body {
- margin: 0;
- padding: 0;
- font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
- font-size: 14px;
- }
-
- #top {
- background: #eee;
- border-bottom: 1px solid #ddd;
- padding: 0 10px;
- line-height: 40px;
- font-size: 12px;
- }
- .left { float: left }
- .right { float: right }
- .clear { clear: both }
-
- #script-warning, #loading { display: none }
- #script-warning { font-weight: bold; color: red }
-
- #calendar {
- max-width: 900px;
- margin: 40px auto;
- padding: 0 10px;
- }
-
- .tzo {
- color: #000;
- }
-
-</style>
-</head>
-<body>
-
- <div id='top'>
-
- <div class='left'>
- Timezone:
- <select id='time-zone-selector'>
- <option value='local' selected>local</option>
- <option value='UTC'>UTC</option>
- </select>
- </div>
-
- <div class='right'>
- <span id='loading'>loading...</span>
- <span id='script-warning'><code>php/get-events.php</code> must be running.</span>
- </div>
-
- <div class='clear'></div>
-
- </div>
-
- <div id='calendar'></div>
-
-</body>
-</html>
diff --git a/library/fullcalendar/examples/timegrid-views.html b/library/fullcalendar/examples/timegrid-views.html
index dcef41065..c197b1ae5 100644
--- a/library/fullcalendar/examples/timegrid-views.html
+++ b/library/fullcalendar/examples/timegrid-views.html
@@ -2,85 +2,80 @@
<html>
<head>
<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
+<script src='../dist/index.global.js'></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'dayGrid', 'timeGrid', 'list', 'interaction' ],
- header: {
+ initialDate: '2020-09-12',
+ initialView: 'timeGridWeek',
+ nowIndicator: true,
+ headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
},
- defaultDate: '2020-05-12',
navLinks: true, // can click day/week names to navigate views
editable: true,
- eventLimit: true, // allow "more" link when too many events
+ selectable: true,
+ selectMirror: true,
+ dayMaxEvents: true, // allow "more" link when too many events
events: [
{
title: 'All Day Event',
- start: '2020-05-01',
+ start: '2020-09-01',
},
{
title: 'Long Event',
- start: '2020-05-07',
- end: '2020-05-10'
+ start: '2020-09-07',
+ end: '2020-09-10'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-09T16:00:00'
+ start: '2020-09-09T16:00:00'
},
{
groupId: 999,
title: 'Repeating Event',
- start: '2020-05-16T16:00:00'
+ start: '2020-09-16T16:00:00'
},
{
title: 'Conference',
- start: '2020-05-11',
- end: '2020-05-13'
+ start: '2020-09-11',
+ end: '2020-09-13'
},
{
title: 'Meeting',
- start: '2020-05-12T10:30:00',
- end: '2020-05-12T12:30:00'
+ start: '2020-09-12T10:30:00',
+ end: '2020-09-12T12:30:00'
},
{
title: 'Lunch',
- start: '2020-05-12T12:00:00'
+ start: '2020-09-12T12:00:00'
},
{
title: 'Meeting',
- start: '2020-05-12T14:30:00'
+ start: '2020-09-12T14:30:00'
},
{
title: 'Happy Hour',
- start: '2020-05-12T17:30:00'
+ start: '2020-09-12T17:30:00'
},
{
title: 'Dinner',
- start: '2020-05-12T20:00:00'
+ start: '2020-09-12T20:00:00'
},
{
title: 'Birthday Party',
- start: '2020-05-13T07:00:00'
+ start: '2020-09-13T07:00:00'
},
{
title: 'Click for Google',
url: 'http://google.com/',
- start: '2020-05-28'
+ start: '2020-09-28'
}
]
});
@@ -99,7 +94,7 @@
}
#calendar {
- max-width: 900px;
+ max-width: 1100px;
margin: 0 auto;
}
diff --git a/library/fullcalendar/examples/week-numbers.html b/library/fullcalendar/examples/week-numbers.html
deleted file mode 100644
index 954454b04..000000000
--- a/library/fullcalendar/examples/week-numbers.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta charset='utf-8' />
-<link href='../packages/core/main.css' rel='stylesheet' />
-<link href='../packages/daygrid/main.css' rel='stylesheet' />
-<link href='../packages/timegrid/main.css' rel='stylesheet' />
-<link href='../packages/list/main.css' rel='stylesheet' />
-<script src='../packages/core/main.js'></script>
-<script src='../packages/interaction/main.js'></script>
-<script src='../packages/daygrid/main.js'></script>
-<script src='../packages/timegrid/main.js'></script>
-<script src='../packages/list/main.js'></script>
-<script>
-
- document.addEventListener('DOMContentLoaded', function() {
- var calendarEl = document.getElementById('calendar');
-
- var calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
- header: {
- left: 'prev,next today',
- center: 'title',
- right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
- },
- defaultDate: '2020-05-12',
- navLinks: true, // can click day/week names to navigate views
-
- weekNumbers: true,
- weekNumbersWithinDays: true,
- weekNumberCalculation: 'ISO',
-
- editable: true,
- eventLimit: true, // allow "more" link when too many events
- events: [
- {
- title: 'All Day Event',
- start: '2020-05-01'
- },
- {
- title: 'Long Event',
- start: '2020-05-07',
- end: '2020-05-10'
- },
- {
- groupId: 999,
- title: 'Repeating Event',
- start: '2020-05-09T16:00:00'
- },
- {
- groupId: 999,
- title: 'Repeating Event',
- start: '2020-05-16T16:00:00'
- },
- {
- title: 'Conference',
- start: '2020-05-11',
- end: '2020-05-13'
- },
- {
- title: 'Meeting',
- start: '2020-05-12T10:30:00',
- end: '2020-05-12T12:30:00'
- },
- {
- title: 'Lunch',
- start: '2020-05-12T12:00:00'
- },
- {
- title: 'Meeting',
- start: '2020-05-12T14:30:00'
- },
- {
- title: 'Happy Hour',
- start: '2020-05-12T17:30:00'
- },
- {
- title: 'Dinner',
- start: '2020-05-12T20:00:00'
- },
- {
- title: 'Birthday Party',
- start: '2020-05-13T07:00:00'
- },
- {
- title: 'Click for Google',
- url: 'http://google.com/',
- start: '2020-05-28'
- }
- ]
- });
-
- calendar.render();
- });
-
-</script>
-<style>
-
- body {
- margin: 40px 10px;
- padding: 0;
- font-family: Arial, Helvetica Neue, Helvetica, sans-serif;
- font-size: 14px;
- }
-
- #calendar {
- max-width: 900px;
- margin: 0 auto;
- }
-
-</style>
-</head>
-<body>
-
- <div id='calendar'></div>
-
-</body>
-</html>
diff --git a/library/fullcalendar/packages/bootstrap/LICENSE.txt b/library/fullcalendar/packages/bootstrap/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/bootstrap/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/bootstrap/README.md b/library/fullcalendar/packages/bootstrap/README.md
deleted file mode 100644
index 1da7990c1..000000000
--- a/library/fullcalendar/packages/bootstrap/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar Bootstrap Plugin
-
-Bootstrap 4 theming for your calendar
-
-[View the docs &raquo;](https://fullcalendar.io/docs/bootstrap-theme)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/bootstrap/main.css b/library/fullcalendar/packages/bootstrap/main.css
deleted file mode 100644
index 3dc71f583..000000000
--- a/library/fullcalendar/packages/bootstrap/main.css
+++ /dev/null
@@ -1,36 +0,0 @@
-.fc.fc-bootstrap a {
- text-decoration: none;
-}
-
-.fc.fc-bootstrap a[data-goto]:hover {
- text-decoration: underline;
-}
-
-.fc-bootstrap hr.fc-divider {
- border-color: inherit;
-}
-
-.fc-bootstrap .fc-today.alert {
- border-radius: 0;
-}
-
-.fc-bootstrap a.fc-event:not([href]):not([tabindex]) {
- color: #fff;
-}
-
-.fc-bootstrap .fc-popover.card {
- position: absolute;
-}
-
-/* Popover
---------------------------------------------------------------------------------------------------*/
-.fc-bootstrap .fc-popover .card-body {
- padding: 0;
-}
-
-/* TimeGrid Slats (lines that run horizontally)
---------------------------------------------------------------------------------------------------*/
-.fc-bootstrap .fc-time-grid .fc-slats table {
- /* some themes have background color. see through to slats */
- background: none;
-}
diff --git a/library/fullcalendar/packages/bootstrap/main.d.ts b/library/fullcalendar/packages/bootstrap/main.d.ts
deleted file mode 100644
index 4aa91f33d..000000000
--- a/library/fullcalendar/packages/bootstrap/main.d.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../@fullcalendar/core
-
-declare module '@fullcalendar/bootstrap' {
- import { Theme } from '@fullcalendar/core';
- export class BootstrapTheme extends Theme {
- }
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
-}
-
diff --git a/library/fullcalendar/packages/bootstrap/main.esm.js b/library/fullcalendar/packages/bootstrap/main.esm.js
deleted file mode 100644
index 1a8a2f833..000000000
--- a/library/fullcalendar/packages/bootstrap/main.esm.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/*!
-FullCalendar Bootstrap Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { createPlugin, Theme } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var BootstrapTheme = /** @class */ (function (_super) {
- __extends(BootstrapTheme, _super);
- function BootstrapTheme() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return BootstrapTheme;
-}(Theme));
-BootstrapTheme.prototype.classes = {
- widget: 'fc-bootstrap',
- tableGrid: 'table-bordered',
- tableList: 'table',
- tableListHeading: 'table-active',
- buttonGroup: 'btn-group',
- button: 'btn btn-primary',
- buttonActive: 'active',
- today: 'alert alert-info',
- popover: 'card card-primary',
- popoverHeader: 'card-header',
- popoverContent: 'card-body',
- // day grid
- // for left/right border color when border is inset from edges (all-day in timeGrid view)
- // avoid `table` class b/c don't want margins/padding/structure. only border color.
- headerRow: 'table-bordered',
- dayRow: 'table-bordered',
- // list view
- listView: 'card card-primary'
-};
-BootstrapTheme.prototype.baseIconClass = 'fa';
-BootstrapTheme.prototype.iconClasses = {
- close: 'fa-times',
- prev: 'fa-chevron-left',
- next: 'fa-chevron-right',
- prevYear: 'fa-angle-double-left',
- nextYear: 'fa-angle-double-right'
-};
-BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome';
-BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';
-BootstrapTheme.prototype.iconOverridePrefix = 'fa-';
-var main = createPlugin({
- themeClasses: {
- bootstrap: BootstrapTheme
- }
-});
-
-export default main;
-export { BootstrapTheme };
diff --git a/library/fullcalendar/packages/bootstrap/main.js b/library/fullcalendar/packages/bootstrap/main.js
deleted file mode 100644
index 455ca78a2..000000000
--- a/library/fullcalendar/packages/bootstrap/main.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/*!
-FullCalendar Bootstrap Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
- typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
- (global = global || self, factory(global.FullCalendarBootstrap = {}, global.FullCalendar));
-}(this, function (exports, core) { 'use strict';
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
- /* global Reflect, Promise */
-
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
-
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
-
- var BootstrapTheme = /** @class */ (function (_super) {
- __extends(BootstrapTheme, _super);
- function BootstrapTheme() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return BootstrapTheme;
- }(core.Theme));
- BootstrapTheme.prototype.classes = {
- widget: 'fc-bootstrap',
- tableGrid: 'table-bordered',
- tableList: 'table',
- tableListHeading: 'table-active',
- buttonGroup: 'btn-group',
- button: 'btn btn-primary',
- buttonActive: 'active',
- today: 'alert alert-info',
- popover: 'card card-primary',
- popoverHeader: 'card-header',
- popoverContent: 'card-body',
- // day grid
- // for left/right border color when border is inset from edges (all-day in timeGrid view)
- // avoid `table` class b/c don't want margins/padding/structure. only border color.
- headerRow: 'table-bordered',
- dayRow: 'table-bordered',
- // list view
- listView: 'card card-primary'
- };
- BootstrapTheme.prototype.baseIconClass = 'fa';
- BootstrapTheme.prototype.iconClasses = {
- close: 'fa-times',
- prev: 'fa-chevron-left',
- next: 'fa-chevron-right',
- prevYear: 'fa-angle-double-left',
- nextYear: 'fa-angle-double-right'
- };
- BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome';
- BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';
- BootstrapTheme.prototype.iconOverridePrefix = 'fa-';
- var main = core.createPlugin({
- themeClasses: {
- bootstrap: BootstrapTheme
- }
- });
-
- exports.BootstrapTheme = BootstrapTheme;
- exports.default = main;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/bootstrap/main.min.css b/library/fullcalendar/packages/bootstrap/main.min.css
deleted file mode 100644
index e9249b568..000000000
--- a/library/fullcalendar/packages/bootstrap/main.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.fc.fc-bootstrap a{text-decoration:none}.fc.fc-bootstrap a[data-goto]:hover{text-decoration:underline}.fc-bootstrap hr.fc-divider{border-color:inherit}.fc-bootstrap .fc-today.alert{border-radius:0}.fc-bootstrap a.fc-event:not([href]):not([tabindex]){color:#fff}.fc-bootstrap .fc-popover.card{position:absolute}.fc-bootstrap .fc-popover .card-body{padding:0}.fc-bootstrap .fc-time-grid .fc-slats table{background:0 0} \ No newline at end of file
diff --git a/library/fullcalendar/packages/bootstrap/main.min.js b/library/fullcalendar/packages/bootstrap/main.min.js
deleted file mode 100644
index 9510309c6..000000000
--- a/library/fullcalendar/packages/bootstrap/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar Bootstrap Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarBootstrap={},e.FullCalendar)}(this,(function(e,t){"use strict";var o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)};var r=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return function(e,t){function r(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}(t,e),t}(t.Theme);r.prototype.classes={widget:"fc-bootstrap",tableGrid:"table-bordered",tableList:"table",tableListHeading:"table-active",buttonGroup:"btn-group",button:"btn btn-primary",buttonActive:"active",today:"alert alert-info",popover:"card card-primary",popoverHeader:"card-header",popoverContent:"card-body",headerRow:"table-bordered",dayRow:"table-bordered",listView:"card card-primary"},r.prototype.baseIconClass="fa",r.prototype.iconClasses={close:"fa-times",prev:"fa-chevron-left",next:"fa-chevron-right",prevYear:"fa-angle-double-left",nextYear:"fa-angle-double-right"},r.prototype.iconOverrideOption="bootstrapFontAwesome",r.prototype.iconOverrideCustomButtonOption="bootstrapFontAwesome",r.prototype.iconOverridePrefix="fa-";var a=t.createPlugin({themeClasses:{bootstrap:r}});e.BootstrapTheme=r,e.default=a,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/bootstrap/package.json b/library/fullcalendar/packages/bootstrap/package.json
deleted file mode 100644
index cef495a8c..000000000
--- a/library/fullcalendar/packages/bootstrap/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "@fullcalendar/bootstrap",
- "version": "4.4.2",
- "title": "FullCalendar Bootstrap Plugin",
- "description": "Bootstrap 4 theming for your calendar",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/bootstrap-theme",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/bootstrap4/index.global.js b/library/fullcalendar/packages/bootstrap4/index.global.js
new file mode 100644
index 000000000..90d3aedf8
--- /dev/null
+++ b/library/fullcalendar/packages/bootstrap4/index.global.js
@@ -0,0 +1,64 @@
+/*!
+FullCalendar Bootstrap 4 Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/bootstrap4
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Bootstrap = (function (exports, core, internal$1) {
+ 'use strict';
+
+ class BootstrapTheme extends internal$1.Theme {
+ }
+ BootstrapTheme.prototype.classes = {
+ root: 'fc-theme-bootstrap',
+ table: 'table-bordered',
+ tableCellShaded: 'table-active',
+ buttonGroup: 'btn-group',
+ button: 'btn btn-primary',
+ buttonActive: 'active',
+ popover: 'popover',
+ popoverHeader: 'popover-header',
+ popoverContent: 'popover-body',
+ };
+ BootstrapTheme.prototype.baseIconClass = 'fa';
+ BootstrapTheme.prototype.iconClasses = {
+ close: 'fa-times',
+ prev: 'fa-chevron-left',
+ next: 'fa-chevron-right',
+ prevYear: 'fa-angle-double-left',
+ nextYear: 'fa-angle-double-right',
+ };
+ BootstrapTheme.prototype.rtlIconClasses = {
+ prev: 'fa-chevron-right',
+ next: 'fa-chevron-left',
+ prevYear: 'fa-angle-double-right',
+ nextYear: 'fa-angle-double-left',
+ };
+ BootstrapTheme.prototype.iconOverrideOption = 'bootstrapFontAwesome'; // TODO: make TS-friendly. move the option-processing into this plugin
+ BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';
+ BootstrapTheme.prototype.iconOverridePrefix = 'fa-';
+
+ var css_248z = ".fc-theme-bootstrap a:not([href]){color:inherit}";
+ internal$1.injectStyles(css_248z);
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/bootstrap',
+ themeClasses: {
+ bootstrap: BootstrapTheme,
+ },
+ });
+
+ var internal = {
+ __proto__: null,
+ BootstrapTheme: BootstrapTheme
+ };
+
+ core.globalPlugins.push(plugin);
+
+ exports.Internal = internal;
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal);
diff --git a/library/fullcalendar/packages/bootstrap4/index.global.min.js b/library/fullcalendar/packages/bootstrap4/index.global.min.js
new file mode 100644
index 000000000..64a7ceade
--- /dev/null
+++ b/library/fullcalendar/packages/bootstrap4/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Bootstrap 4 Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/bootstrap4
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Bootstrap=function(e,t,o){"use strict";class r extends o.Theme{}r.prototype.classes={root:"fc-theme-bootstrap",table:"table-bordered",tableCellShaded:"table-active",buttonGroup:"btn-group",button:"btn btn-primary",buttonActive:"active",popover:"popover",popoverHeader:"popover-header",popoverContent:"popover-body"},r.prototype.baseIconClass="fa",r.prototype.iconClasses={close:"fa-times",prev:"fa-chevron-left",next:"fa-chevron-right",prevYear:"fa-angle-double-left",nextYear:"fa-angle-double-right"},r.prototype.rtlIconClasses={prev:"fa-chevron-right",next:"fa-chevron-left",prevYear:"fa-angle-double-right",nextYear:"fa-angle-double-left"},r.prototype.iconOverrideOption="bootstrapFontAwesome",r.prototype.iconOverrideCustomButtonOption="bootstrapFontAwesome",r.prototype.iconOverridePrefix="fa-";o.injectStyles(".fc-theme-bootstrap a:not([href]){color:inherit}");var a=t.createPlugin({name:"@fullcalendar/bootstrap",themeClasses:{bootstrap:r}}),l={__proto__:null,BootstrapTheme:r};return t.globalPlugins.push(a),e.Internal=l,e.default=a,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/bootstrap5/index.global.js b/library/fullcalendar/packages/bootstrap5/index.global.js
new file mode 100644
index 000000000..eee322a49
--- /dev/null
+++ b/library/fullcalendar/packages/bootstrap5/index.global.js
@@ -0,0 +1,64 @@
+/*!
+FullCalendar Bootstrap 5 Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/bootstrap5
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Bootstrap5 = (function (exports, core, internal$1) {
+ 'use strict';
+
+ class BootstrapTheme extends internal$1.Theme {
+ }
+ BootstrapTheme.prototype.classes = {
+ root: 'fc-theme-bootstrap5',
+ tableCellShaded: 'fc-theme-bootstrap5-shaded',
+ buttonGroup: 'btn-group',
+ button: 'btn btn-primary',
+ buttonActive: 'active',
+ popover: 'popover',
+ popoverHeader: 'popover-header',
+ popoverContent: 'popover-body',
+ };
+ BootstrapTheme.prototype.baseIconClass = 'bi';
+ BootstrapTheme.prototype.iconClasses = {
+ close: 'bi-x-lg',
+ prev: 'bi-chevron-left',
+ next: 'bi-chevron-right',
+ prevYear: 'bi-chevron-double-left',
+ nextYear: 'bi-chevron-double-right',
+ };
+ BootstrapTheme.prototype.rtlIconClasses = {
+ prev: 'bi-chevron-right',
+ next: 'bi-chevron-left',
+ prevYear: 'bi-chevron-double-right',
+ nextYear: 'bi-chevron-double-left',
+ };
+ // wtf
+ BootstrapTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly
+ BootstrapTheme.prototype.iconOverrideCustomButtonOption = 'icon';
+ BootstrapTheme.prototype.iconOverridePrefix = 'bi-';
+
+ var css_248z = ".fc-theme-bootstrap5 a:not([href]){color:inherit;text-decoration:inherit}.fc-theme-bootstrap5 .fc-list,.fc-theme-bootstrap5 .fc-scrollgrid,.fc-theme-bootstrap5 td,.fc-theme-bootstrap5 th{border:1px solid var(--bs-gray-400)}.fc-theme-bootstrap5 .fc-scrollgrid{border-bottom-width:0;border-right-width:0}.fc-theme-bootstrap5-shaded{background-color:var(--bs-gray-200)}";
+ internal$1.injectStyles(css_248z);
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/bootstrap5',
+ themeClasses: {
+ bootstrap5: BootstrapTheme,
+ },
+ });
+
+ var internal = {
+ __proto__: null,
+ BootstrapTheme: BootstrapTheme
+ };
+
+ core.globalPlugins.push(plugin);
+
+ exports.Internal = internal;
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal);
diff --git a/library/fullcalendar/packages/bootstrap5/index.global.min.js b/library/fullcalendar/packages/bootstrap5/index.global.min.js
new file mode 100644
index 000000000..8f17785f8
--- /dev/null
+++ b/library/fullcalendar/packages/bootstrap5/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Bootstrap 5 Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/bootstrap5
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Bootstrap5=function(e,t,o){"use strict";class r extends o.Theme{}r.prototype.classes={root:"fc-theme-bootstrap5",tableCellShaded:"fc-theme-bootstrap5-shaded",buttonGroup:"btn-group",button:"btn btn-primary",buttonActive:"active",popover:"popover",popoverHeader:"popover-header",popoverContent:"popover-body"},r.prototype.baseIconClass="bi",r.prototype.iconClasses={close:"bi-x-lg",prev:"bi-chevron-left",next:"bi-chevron-right",prevYear:"bi-chevron-double-left",nextYear:"bi-chevron-double-right"},r.prototype.rtlIconClasses={prev:"bi-chevron-right",next:"bi-chevron-left",prevYear:"bi-chevron-double-right",nextYear:"bi-chevron-double-left"},r.prototype.iconOverrideOption="buttonIcons",r.prototype.iconOverrideCustomButtonOption="icon",r.prototype.iconOverridePrefix="bi-";o.injectStyles(".fc-theme-bootstrap5 a:not([href]){color:inherit;text-decoration:inherit}.fc-theme-bootstrap5 .fc-list,.fc-theme-bootstrap5 .fc-scrollgrid,.fc-theme-bootstrap5 td,.fc-theme-bootstrap5 th{border:1px solid var(--bs-gray-400)}.fc-theme-bootstrap5 .fc-scrollgrid{border-bottom-width:0;border-right-width:0}.fc-theme-bootstrap5-shaded{background-color:var(--bs-gray-200)}");var a=t.createPlugin({name:"@fullcalendar/bootstrap5",themeClasses:{bootstrap5:r}}),n={__proto__:null,BootstrapTheme:r};return t.globalPlugins.push(a),e.Internal=n,e.default=a,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/LICENSE.txt b/library/fullcalendar/packages/core/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/core/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/core/README.md b/library/fullcalendar/packages/core/README.md
deleted file mode 100644
index 7ed36f442..000000000
--- a/library/fullcalendar/packages/core/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar Core Package
-
-Provides core functionality, including the Calendar class
-
-[View the docs &raquo;](https://fullcalendar.io/docs/initialize-es6)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/core/index.global.js b/library/fullcalendar/packages/core/index.global.js
new file mode 100644
index 000000000..6f2696bae
--- /dev/null
+++ b/library/fullcalendar/packages/core/index.global.js
@@ -0,0 +1,9646 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+var FullCalendar = (function (exports) {
+ 'use strict';
+
+ function removeElement(el) {
+ if (el.parentNode) {
+ el.parentNode.removeChild(el);
+ }
+ }
+ // Querying
+ // ----------------------------------------------------------------------------------------------------------------
+ function elementClosest(el, selector) {
+ if (el.closest) {
+ return el.closest(selector);
+ // really bad fallback for IE
+ // from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
+ }
+ if (!document.documentElement.contains(el)) {
+ return null;
+ }
+ do {
+ if (elementMatches(el, selector)) {
+ return el;
+ }
+ el = (el.parentElement || el.parentNode);
+ } while (el !== null && el.nodeType === 1);
+ return null;
+ }
+ function elementMatches(el, selector) {
+ let method = el.matches || el.matchesSelector || el.msMatchesSelector;
+ return method.call(el, selector);
+ }
+ // accepts multiple subject els
+ // returns a real array. good for methods like forEach
+ // TODO: accept the document
+ function findElements(container, selector) {
+ let containers = container instanceof HTMLElement ? [container] : container;
+ let allMatches = [];
+ for (let i = 0; i < containers.length; i += 1) {
+ let matches = containers[i].querySelectorAll(selector);
+ for (let j = 0; j < matches.length; j += 1) {
+ allMatches.push(matches[j]);
+ }
+ }
+ return allMatches;
+ }
+ // accepts multiple subject els
+ // only queries direct child elements // TODO: rename to findDirectChildren!
+ function findDirectChildren(parent, selector) {
+ let parents = parent instanceof HTMLElement ? [parent] : parent;
+ let allMatches = [];
+ for (let i = 0; i < parents.length; i += 1) {
+ let childNodes = parents[i].children; // only ever elements
+ for (let j = 0; j < childNodes.length; j += 1) {
+ let childNode = childNodes[j];
+ if (!selector || elementMatches(childNode, selector)) {
+ allMatches.push(childNode);
+ }
+ }
+ }
+ return allMatches;
+ }
+ // Style
+ // ----------------------------------------------------------------------------------------------------------------
+ const PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
+ function applyStyle(el, props) {
+ for (let propName in props) {
+ applyStyleProp(el, propName, props[propName]);
+ }
+ }
+ function applyStyleProp(el, name, val) {
+ if (val == null) {
+ el.style[name] = '';
+ }
+ else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {
+ el.style[name] = `${val}px`;
+ }
+ else {
+ el.style[name] = val;
+ }
+ }
+ // Event Handling
+ // ----------------------------------------------------------------------------------------------------------------
+ // if intercepting bubbled events at the document/window/body level,
+ // and want to see originating element (the 'target'), use this util instead
+ // of `ev.target` because it goes within web-component boundaries.
+ function getEventTargetViaRoot(ev) {
+ var _a, _b;
+ return (_b = (_a = ev.composedPath) === null || _a === void 0 ? void 0 : _a.call(ev)[0]) !== null && _b !== void 0 ? _b : ev.target;
+ }
+ // Shadow DOM consuderations
+ // ----------------------------------------------------------------------------------------------------------------
+ function getElRoot(el) {
+ return el.getRootNode ? el.getRootNode() : document;
+ }
+ // Unique ID for DOM attribute
+ let guid$1 = 0;
+ function getUniqueDomId() {
+ guid$1 += 1;
+ return 'fc-dom-' + guid$1;
+ }
+
+ // Stops a mouse/touch event from doing it's native browser action
+ function preventDefault(ev) {
+ ev.preventDefault();
+ }
+ // Event Delegation
+ // ----------------------------------------------------------------------------------------------------------------
+ function buildDelegationHandler(selector, handler) {
+ return (ev) => {
+ let matchedChild = elementClosest(ev.target, selector);
+ if (matchedChild) {
+ handler.call(matchedChild, ev, matchedChild);
+ }
+ };
+ }
+ function listenBySelector(container, eventType, selector, handler) {
+ let attachedHandler = buildDelegationHandler(selector, handler);
+ container.addEventListener(eventType, attachedHandler);
+ return () => {
+ container.removeEventListener(eventType, attachedHandler);
+ };
+ }
+ function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {
+ let currentMatchedChild;
+ return listenBySelector(container, 'mouseover', selector, (mouseOverEv, matchedChild) => {
+ if (matchedChild !== currentMatchedChild) {
+ currentMatchedChild = matchedChild;
+ onMouseEnter(mouseOverEv, matchedChild);
+ let realOnMouseLeave = (mouseLeaveEv) => {
+ currentMatchedChild = null;
+ onMouseLeave(mouseLeaveEv, matchedChild);
+ matchedChild.removeEventListener('mouseleave', realOnMouseLeave);
+ };
+ // listen to the next mouseleave, and then unattach
+ matchedChild.addEventListener('mouseleave', realOnMouseLeave);
+ }
+ });
+ }
+ // Animation
+ // ----------------------------------------------------------------------------------------------------------------
+ const transitionEventNames = [
+ 'webkitTransitionEnd',
+ 'otransitionend',
+ 'oTransitionEnd',
+ 'msTransitionEnd',
+ 'transitionend',
+ ];
+ // triggered only when the next single subsequent transition finishes
+ function whenTransitionDone(el, callback) {
+ let realCallback = (ev) => {
+ callback(ev);
+ transitionEventNames.forEach((eventName) => {
+ el.removeEventListener(eventName, realCallback);
+ });
+ };
+ transitionEventNames.forEach((eventName) => {
+ el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes
+ });
+ }
+ // ARIA workarounds
+ // ----------------------------------------------------------------------------------------------------------------
+ function createAriaClickAttrs(handler) {
+ return Object.assign({ onClick: handler }, createAriaKeyboardAttrs(handler));
+ }
+ function createAriaKeyboardAttrs(handler) {
+ return {
+ tabIndex: 0,
+ onKeyDown(ev) {
+ if (ev.key === 'Enter' || ev.key === ' ') {
+ handler(ev);
+ ev.preventDefault(); // if space, don't scroll down page
+ }
+ },
+ };
+ }
+
+ let guidNumber = 0;
+ function guid() {
+ guidNumber += 1;
+ return String(guidNumber);
+ }
+ /* FullCalendar-specific DOM Utilities
+ ----------------------------------------------------------------------------------------------------------------------*/
+ // Make the mouse cursor express that an event is not allowed in the current area
+ function disableCursor() {
+ document.body.classList.add('fc-not-allowed');
+ }
+ // Returns the mouse cursor to its original look
+ function enableCursor() {
+ document.body.classList.remove('fc-not-allowed');
+ }
+ /* Selection
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function preventSelection(el) {
+ el.classList.add('fc-unselectable');
+ el.addEventListener('selectstart', preventDefault);
+ }
+ function allowSelection(el) {
+ el.classList.remove('fc-unselectable');
+ el.removeEventListener('selectstart', preventDefault);
+ }
+ /* Context Menu
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function preventContextMenu(el) {
+ el.addEventListener('contextmenu', preventDefault);
+ }
+ function allowContextMenu(el) {
+ el.removeEventListener('contextmenu', preventDefault);
+ }
+ function parseFieldSpecs(input) {
+ let specs = [];
+ let tokens = [];
+ let i;
+ let token;
+ if (typeof input === 'string') {
+ tokens = input.split(/\s*,\s*/);
+ }
+ else if (typeof input === 'function') {
+ tokens = [input];
+ }
+ else if (Array.isArray(input)) {
+ tokens = input;
+ }
+ for (i = 0; i < tokens.length; i += 1) {
+ token = tokens[i];
+ if (typeof token === 'string') {
+ specs.push(token.charAt(0) === '-' ?
+ { field: token.substring(1), order: -1 } :
+ { field: token, order: 1 });
+ }
+ else if (typeof token === 'function') {
+ specs.push({ func: token });
+ }
+ }
+ return specs;
+ }
+ function compareByFieldSpecs(obj0, obj1, fieldSpecs) {
+ let i;
+ let cmp;
+ for (i = 0; i < fieldSpecs.length; i += 1) {
+ cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);
+ if (cmp) {
+ return cmp;
+ }
+ }
+ return 0;
+ }
+ function compareByFieldSpec(obj0, obj1, fieldSpec) {
+ if (fieldSpec.func) {
+ return fieldSpec.func(obj0, obj1);
+ }
+ return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])
+ * (fieldSpec.order || 1);
+ }
+ function flexibleCompare(a, b) {
+ if (!a && !b) {
+ return 0;
+ }
+ if (b == null) {
+ return -1;
+ }
+ if (a == null) {
+ return 1;
+ }
+ if (typeof a === 'string' || typeof b === 'string') {
+ return String(a).localeCompare(String(b));
+ }
+ return a - b;
+ }
+ /* String Utilities
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function padStart(val, len) {
+ let s = String(val);
+ return '000'.substr(0, len - s.length) + s;
+ }
+ function formatWithOrdinals(formatter, args, fallbackText) {
+ if (typeof formatter === 'function') {
+ return formatter(...args);
+ }
+ if (typeof formatter === 'string') { // non-blank string
+ return args.reduce((str, arg, index) => (str.replace('$' + index, arg || '')), formatter);
+ }
+ return fallbackText;
+ }
+ /* Number Utilities
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function compareNumbers(a, b) {
+ return a - b;
+ }
+ function isInt(n) {
+ return n % 1 === 0;
+ }
+ /* FC-specific DOM dimension stuff
+ ----------------------------------------------------------------------------------------------------------------------*/
+ function computeSmallestCellWidth(cellEl) {
+ let allWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-frame');
+ let contentWidthEl = cellEl.querySelector('.fc-scrollgrid-shrink-cushion');
+ if (!allWidthEl) {
+ throw new Error('needs fc-scrollgrid-shrink-frame className'); // TODO: use const
+ }
+ if (!contentWidthEl) {
+ throw new Error('needs fc-scrollgrid-shrink-cushion className');
+ }
+ return cellEl.getBoundingClientRect().width - allWidthEl.getBoundingClientRect().width + // the cell padding+border
+ contentWidthEl.getBoundingClientRect().width;
+ }
+
+ const INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];
+ const PARSE_RE = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;
+ // Parsing and Creation
+ function createDuration(input, unit) {
+ if (typeof input === 'string') {
+ return parseString(input);
+ }
+ if (typeof input === 'object' && input) { // non-null object
+ return parseObject(input);
+ }
+ if (typeof input === 'number') {
+ return parseObject({ [unit || 'milliseconds']: input });
+ }
+ return null;
+ }
+ function parseString(s) {
+ let m = PARSE_RE.exec(s);
+ if (m) {
+ let sign = m[1] ? -1 : 1;
+ return {
+ years: 0,
+ months: 0,
+ days: sign * (m[2] ? parseInt(m[2], 10) : 0),
+ milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours
+ (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes
+ (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds
+ (m[6] ? parseInt(m[6], 10) : 0) // ms
+ ),
+ };
+ }
+ return null;
+ }
+ function parseObject(obj) {
+ let duration = {
+ years: obj.years || obj.year || 0,
+ months: obj.months || obj.month || 0,
+ days: obj.days || obj.day || 0,
+ milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours
+ (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes
+ (obj.seconds || obj.second || 0) * 1000 + // seconds
+ (obj.milliseconds || obj.millisecond || obj.ms || 0), // ms
+ };
+ let weeks = obj.weeks || obj.week;
+ if (weeks) {
+ duration.days += weeks * 7;
+ duration.specifiedWeeks = true;
+ }
+ return duration;
+ }
+ // Equality
+ function durationsEqual(d0, d1) {
+ return d0.years === d1.years &&
+ d0.months === d1.months &&
+ d0.days === d1.days &&
+ d0.milliseconds === d1.milliseconds;
+ }
+ function asCleanDays(dur) {
+ if (!dur.years && !dur.months && !dur.milliseconds) {
+ return dur.days;
+ }
+ return 0;
+ }
+ // Simple Math
+ function addDurations(d0, d1) {
+ return {
+ years: d0.years + d1.years,
+ months: d0.months + d1.months,
+ days: d0.days + d1.days,
+ milliseconds: d0.milliseconds + d1.milliseconds,
+ };
+ }
+ function subtractDurations(d1, d0) {
+ return {
+ years: d1.years - d0.years,
+ months: d1.months - d0.months,
+ days: d1.days - d0.days,
+ milliseconds: d1.milliseconds - d0.milliseconds,
+ };
+ }
+ function multiplyDuration(d, n) {
+ return {
+ years: d.years * n,
+ months: d.months * n,
+ days: d.days * n,
+ milliseconds: d.milliseconds * n,
+ };
+ }
+ // Conversions
+ // "Rough" because they are based on average-case Gregorian months/years
+ function asRoughYears(dur) {
+ return asRoughDays(dur) / 365;
+ }
+ function asRoughMonths(dur) {
+ return asRoughDays(dur) / 30;
+ }
+ function asRoughDays(dur) {
+ return asRoughMs(dur) / 864e5;
+ }
+ function asRoughMinutes(dur) {
+ return asRoughMs(dur) / (1000 * 60);
+ }
+ function asRoughSeconds(dur) {
+ return asRoughMs(dur) / 1000;
+ }
+ function asRoughMs(dur) {
+ return dur.years * (365 * 864e5) +
+ dur.months * (30 * 864e5) +
+ dur.days * 864e5 +
+ dur.milliseconds;
+ }
+ // Advanced Math
+ function wholeDivideDurations(numerator, denominator) {
+ let res = null;
+ for (let i = 0; i < INTERNAL_UNITS.length; i += 1) {
+ let unit = INTERNAL_UNITS[i];
+ if (denominator[unit]) {
+ let localRes = numerator[unit] / denominator[unit];
+ if (!isInt(localRes) || (res !== null && res !== localRes)) {
+ return null;
+ }
+ res = localRes;
+ }
+ else if (numerator[unit]) {
+ // needs to divide by something but can't!
+ return null;
+ }
+ }
+ return res;
+ }
+ function greatestDurationDenominator(dur) {
+ let ms = dur.milliseconds;
+ if (ms) {
+ if (ms % 1000 !== 0) {
+ return { unit: 'millisecond', value: ms };
+ }
+ if (ms % (1000 * 60) !== 0) {
+ return { unit: 'second', value: ms / 1000 };
+ }
+ if (ms % (1000 * 60 * 60) !== 0) {
+ return { unit: 'minute', value: ms / (1000 * 60) };
+ }
+ if (ms) {
+ return { unit: 'hour', value: ms / (1000 * 60 * 60) };
+ }
+ }
+ if (dur.days) {
+ if (dur.specifiedWeeks && dur.days % 7 === 0) {
+ return { unit: 'week', value: dur.days / 7 };
+ }
+ return { unit: 'day', value: dur.days };
+ }
+ if (dur.months) {
+ return { unit: 'month', value: dur.months };
+ }
+ if (dur.years) {
+ return { unit: 'year', value: dur.years };
+ }
+ return { unit: 'millisecond', value: 0 };
+ }
+
+ const { hasOwnProperty } = Object.prototype;
+ // Merges an array of objects into a single object.
+ // The second argument allows for an array of property names who's object values will be merged together.
+ function mergeProps(propObjs, complexPropsMap) {
+ let dest = {};
+ if (complexPropsMap) {
+ for (let name in complexPropsMap) {
+ let complexObjs = [];
+ // collect the trailing object values, stopping when a non-object is discovered
+ for (let i = propObjs.length - 1; i >= 0; i -= 1) {
+ let val = propObjs[i][name];
+ if (typeof val === 'object' && val) { // non-null object
+ complexObjs.unshift(val);
+ }
+ else if (val !== undefined) {
+ dest[name] = val; // if there were no objects, this value will be used
+ break;
+ }
+ }
+ // if the trailing values were objects, use the merged value
+ if (complexObjs.length) {
+ dest[name] = mergeProps(complexObjs);
+ }
+ }
+ }
+ // copy values into the destination, going from last to first
+ for (let i = propObjs.length - 1; i >= 0; i -= 1) {
+ let props = propObjs[i];
+ for (let name in props) {
+ if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign
+ dest[name] = props[name];
+ }
+ }
+ }
+ return dest;
+ }
+ function filterHash(hash, func) {
+ let filtered = {};
+ for (let key in hash) {
+ if (func(hash[key], key)) {
+ filtered[key] = hash[key];
+ }
+ }
+ return filtered;
+ }
+ function mapHash(hash, func) {
+ let newHash = {};
+ for (let key in hash) {
+ newHash[key] = func(hash[key], key);
+ }
+ return newHash;
+ }
+ function arrayToHash(a) {
+ let hash = {};
+ for (let item of a) {
+ hash[item] = true;
+ }
+ return hash;
+ }
+ // TODO: reassess browser support
+ // https://caniuse.com/?search=object.values
+ function hashValuesToArray(obj) {
+ let a = [];
+ for (let key in obj) {
+ a.push(obj[key]);
+ }
+ return a;
+ }
+ function isPropsEqual(obj0, obj1) {
+ if (obj0 === obj1) {
+ return true;
+ }
+ for (let key in obj0) {
+ if (hasOwnProperty.call(obj0, key)) {
+ if (!(key in obj1)) {
+ return false;
+ }
+ }
+ }
+ for (let key in obj1) {
+ if (hasOwnProperty.call(obj1, key)) {
+ if (obj0[key] !== obj1[key]) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ const HANDLER_RE = /^on[A-Z]/;
+ function isNonHandlerPropsEqual(obj0, obj1) {
+ const keys = getUnequalProps(obj0, obj1);
+ for (let key of keys) {
+ if (!HANDLER_RE.test(key)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function getUnequalProps(obj0, obj1) {
+ let keys = [];
+ for (let key in obj0) {
+ if (hasOwnProperty.call(obj0, key)) {
+ if (!(key in obj1)) {
+ keys.push(key);
+ }
+ }
+ }
+ for (let key in obj1) {
+ if (hasOwnProperty.call(obj1, key)) {
+ if (obj0[key] !== obj1[key]) {
+ keys.push(key);
+ }
+ }
+ }
+ return keys;
+ }
+ function compareObjs(oldProps, newProps, equalityFuncs = {}) {
+ if (oldProps === newProps) {
+ return true;
+ }
+ for (let key in newProps) {
+ if (key in oldProps && isObjValsEqual(oldProps[key], newProps[key], equalityFuncs[key])) ;
+ else {
+ return false;
+ }
+ }
+ // check for props that were omitted in the new
+ for (let key in oldProps) {
+ if (!(key in newProps)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ /*
+ assumed "true" equality for handler names like "onReceiveSomething"
+ */
+ function isObjValsEqual(val0, val1, comparator) {
+ if (val0 === val1 || comparator === true) {
+ return true;
+ }
+ if (comparator) {
+ return comparator(val0, val1);
+ }
+ return false;
+ }
+ function collectFromHash(hash, startIndex = 0, endIndex, step = 1) {
+ let res = [];
+ if (endIndex == null) {
+ endIndex = Object.keys(hash).length;
+ }
+ for (let i = startIndex; i < endIndex; i += step) {
+ let val = hash[i];
+ if (val !== undefined) { // will disregard undefined for sparse arrays
+ res.push(val);
+ }
+ }
+ return res;
+ }
+
+ const DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
+ // Adding
+ function addWeeks(m, n) {
+ let a = dateToUtcArray(m);
+ a[2] += n * 7;
+ return arrayToUtcDate(a);
+ }
+ function addDays(m, n) {
+ let a = dateToUtcArray(m);
+ a[2] += n;
+ return arrayToUtcDate(a);
+ }
+ function addMs(m, n) {
+ let a = dateToUtcArray(m);
+ a[6] += n;
+ return arrayToUtcDate(a);
+ }
+ // Diffing (all return floats)
+ // TODO: why not use ranges?
+ function diffWeeks(m0, m1) {
+ return diffDays(m0, m1) / 7;
+ }
+ function diffDays(m0, m1) {
+ return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);
+ }
+ function diffHours(m0, m1) {
+ return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);
+ }
+ function diffMinutes(m0, m1) {
+ return (m1.valueOf() - m0.valueOf()) / (1000 * 60);
+ }
+ function diffSeconds(m0, m1) {
+ return (m1.valueOf() - m0.valueOf()) / 1000;
+ }
+ function diffDayAndTime(m0, m1) {
+ let m0day = startOfDay(m0);
+ let m1day = startOfDay(m1);
+ return {
+ years: 0,
+ months: 0,
+ days: Math.round(diffDays(m0day, m1day)),
+ milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf()),
+ };
+ }
+ // Diffing Whole Units
+ function diffWholeWeeks(m0, m1) {
+ let d = diffWholeDays(m0, m1);
+ if (d !== null && d % 7 === 0) {
+ return d / 7;
+ }
+ return null;
+ }
+ function diffWholeDays(m0, m1) {
+ if (timeAsMs(m0) === timeAsMs(m1)) {
+ return Math.round(diffDays(m0, m1));
+ }
+ return null;
+ }
+ // Start-Of
+ function startOfDay(m) {
+ return arrayToUtcDate([
+ m.getUTCFullYear(),
+ m.getUTCMonth(),
+ m.getUTCDate(),
+ ]);
+ }
+ function startOfHour(m) {
+ return arrayToUtcDate([
+ m.getUTCFullYear(),
+ m.getUTCMonth(),
+ m.getUTCDate(),
+ m.getUTCHours(),
+ ]);
+ }
+ function startOfMinute(m) {
+ return arrayToUtcDate([
+ m.getUTCFullYear(),
+ m.getUTCMonth(),
+ m.getUTCDate(),
+ m.getUTCHours(),
+ m.getUTCMinutes(),
+ ]);
+ }
+ function startOfSecond(m) {
+ return arrayToUtcDate([
+ m.getUTCFullYear(),
+ m.getUTCMonth(),
+ m.getUTCDate(),
+ m.getUTCHours(),
+ m.getUTCMinutes(),
+ m.getUTCSeconds(),
+ ]);
+ }
+ // Week Computation
+ function weekOfYear(marker, dow, doy) {
+ let y = marker.getUTCFullYear();
+ let w = weekOfGivenYear(marker, y, dow, doy);
+ if (w < 1) {
+ return weekOfGivenYear(marker, y - 1, dow, doy);
+ }
+ let nextW = weekOfGivenYear(marker, y + 1, dow, doy);
+ if (nextW >= 1) {
+ return Math.min(w, nextW);
+ }
+ return w;
+ }
+ function weekOfGivenYear(marker, year, dow, doy) {
+ let firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);
+ let dayStart = startOfDay(marker);
+ let days = Math.round(diffDays(firstWeekStart, dayStart));
+ return Math.floor(days / 7) + 1; // zero-indexed
+ }
+ // start-of-first-week - start-of-year
+ function firstWeekOffset(year, dow, doy) {
+ // first-week day -- which january is always in the first week (4 for iso, 1 for other)
+ let fwd = 7 + dow - doy;
+ // first-week day local weekday -- which local weekday is fwd
+ let fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;
+ return -fwdlw + fwd - 1;
+ }
+ // Array Conversion
+ function dateToLocalArray(date) {
+ return [
+ date.getFullYear(),
+ date.getMonth(),
+ date.getDate(),
+ date.getHours(),
+ date.getMinutes(),
+ date.getSeconds(),
+ date.getMilliseconds(),
+ ];
+ }
+ function arrayToLocalDate(a) {
+ return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month
+ a[3] || 0, a[4] || 0, a[5] || 0);
+ }
+ function dateToUtcArray(date) {
+ return [
+ date.getUTCFullYear(),
+ date.getUTCMonth(),
+ date.getUTCDate(),
+ date.getUTCHours(),
+ date.getUTCMinutes(),
+ date.getUTCSeconds(),
+ date.getUTCMilliseconds(),
+ ];
+ }
+ function arrayToUtcDate(a) {
+ // according to web standards (and Safari), a month index is required.
+ // massage if only given a year.
+ if (a.length === 1) {
+ a = a.concat([0]);
+ }
+ return new Date(Date.UTC(...a));
+ }
+ // Other Utils
+ function isValidDate(m) {
+ return !isNaN(m.valueOf());
+ }
+ function timeAsMs(m) {
+ return m.getUTCHours() * 1000 * 60 * 60 +
+ m.getUTCMinutes() * 1000 * 60 +
+ m.getUTCSeconds() * 1000 +
+ m.getUTCMilliseconds();
+ }
+
+ // timeZoneOffset is in minutes
+ function buildIsoString(marker, timeZoneOffset, stripZeroTime = false) {
+ let s = marker.toISOString();
+ s = s.replace('.000', '');
+ if (stripZeroTime) {
+ s = s.replace('T00:00:00Z', '');
+ }
+ if (s.length > 10) { // time part wasn't stripped, can add timezone info
+ if (timeZoneOffset == null) {
+ s = s.replace('Z', '');
+ }
+ else if (timeZoneOffset !== 0) {
+ s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));
+ }
+ // otherwise, its UTC-0 and we want to keep the Z
+ }
+ return s;
+ }
+ // formats the date, but with no time part
+ // TODO: somehow merge with buildIsoString and stripZeroTime
+ // TODO: rename. omit "string"
+ function formatDayString(marker) {
+ return marker.toISOString().replace(/T.*$/, '');
+ }
+ // TODO: use Date::toISOString and use everything after the T?
+ function formatIsoTimeString(marker) {
+ return padStart(marker.getUTCHours(), 2) + ':' +
+ padStart(marker.getUTCMinutes(), 2) + ':' +
+ padStart(marker.getUTCSeconds(), 2);
+ }
+ function formatTimeZoneOffset(minutes, doIso = false) {
+ let sign = minutes < 0 ? '-' : '+';
+ let abs = Math.abs(minutes);
+ let hours = Math.floor(abs / 60);
+ let mins = Math.round(abs % 60);
+ if (doIso) {
+ return `${sign + padStart(hours, 2)}:${padStart(mins, 2)}`;
+ }
+ return `GMT${sign}${hours}${mins ? `:${padStart(mins, 2)}` : ''}`;
+ }
+
+ // TODO: new util arrayify?
+ function removeExact(array, exactVal) {
+ let removeCnt = 0;
+ let i = 0;
+ while (i < array.length) {
+ if (array[i] === exactVal) {
+ array.splice(i, 1);
+ removeCnt += 1;
+ }
+ else {
+ i += 1;
+ }
+ }
+ return removeCnt;
+ }
+ function isArraysEqual(a0, a1, equalityFunc) {
+ if (a0 === a1) {
+ return true;
+ }
+ let len = a0.length;
+ let i;
+ if (len !== a1.length) { // not array? or not same length?
+ return false;
+ }
+ for (i = 0; i < len; i += 1) {
+ if (!(equalityFunc ? equalityFunc(a0[i], a1[i]) : a0[i] === a1[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function memoize(workerFunc, resEquality, teardownFunc) {
+ let currentArgs;
+ let currentRes;
+ return function (...newArgs) {
+ if (!currentArgs) {
+ currentRes = workerFunc.apply(this, newArgs);
+ }
+ else if (!isArraysEqual(currentArgs, newArgs)) {
+ if (teardownFunc) {
+ teardownFunc(currentRes);
+ }
+ let res = workerFunc.apply(this, newArgs);
+ if (!resEquality || !resEquality(res, currentRes)) {
+ currentRes = res;
+ }
+ }
+ currentArgs = newArgs;
+ return currentRes;
+ };
+ }
+ function memoizeObjArg(workerFunc, resEquality, teardownFunc) {
+ let currentArg;
+ let currentRes;
+ return (newArg) => {
+ if (!currentArg) {
+ currentRes = workerFunc.call(this, newArg);
+ }
+ else if (!isPropsEqual(currentArg, newArg)) {
+ if (teardownFunc) {
+ teardownFunc(currentRes);
+ }
+ let res = workerFunc.call(this, newArg);
+ if (!resEquality || !resEquality(res, currentRes)) {
+ currentRes = res;
+ }
+ }
+ currentArg = newArg;
+ return currentRes;
+ };
+ }
+ function memoizeArraylike(// used at all?
+ workerFunc, resEquality, teardownFunc) {
+ let currentArgSets = [];
+ let currentResults = [];
+ return (newArgSets) => {
+ let currentLen = currentArgSets.length;
+ let newLen = newArgSets.length;
+ let i = 0;
+ for (; i < currentLen; i += 1) {
+ if (!newArgSets[i]) { // one of the old sets no longer exists
+ if (teardownFunc) {
+ teardownFunc(currentResults[i]);
+ }
+ }
+ else if (!isArraysEqual(currentArgSets[i], newArgSets[i])) {
+ if (teardownFunc) {
+ teardownFunc(currentResults[i]);
+ }
+ let res = workerFunc.apply(this, newArgSets[i]);
+ if (!resEquality || !resEquality(res, currentResults[i])) {
+ currentResults[i] = res;
+ }
+ }
+ }
+ for (; i < newLen; i += 1) {
+ currentResults[i] = workerFunc.apply(this, newArgSets[i]);
+ }
+ currentArgSets = newArgSets;
+ currentResults.splice(newLen); // remove excess
+ return currentResults;
+ };
+ }
+ function memoizeHashlike(workerFunc, resEquality, teardownFunc) {
+ let currentArgHash = {};
+ let currentResHash = {};
+ return (newArgHash) => {
+ let newResHash = {};
+ for (let key in newArgHash) {
+ if (!currentResHash[key]) {
+ newResHash[key] = workerFunc.apply(this, newArgHash[key]);
+ }
+ else if (!isArraysEqual(currentArgHash[key], newArgHash[key])) {
+ if (teardownFunc) {
+ teardownFunc(currentResHash[key]);
+ }
+ let res = workerFunc.apply(this, newArgHash[key]);
+ newResHash[key] = (resEquality && resEquality(res, currentResHash[key]))
+ ? currentResHash[key]
+ : res;
+ }
+ else {
+ newResHash[key] = currentResHash[key];
+ }
+ }
+ currentArgHash = newArgHash;
+ currentResHash = newResHash;
+ return newResHash;
+ };
+ }
+
+ const EXTENDED_SETTINGS_AND_SEVERITIES = {
+ week: 3,
+ separator: 0,
+ omitZeroMinute: 0,
+ meridiem: 0,
+ omitCommas: 0,
+ };
+ const STANDARD_DATE_PROP_SEVERITIES = {
+ timeZoneName: 7,
+ era: 6,
+ year: 5,
+ month: 4,
+ day: 2,
+ weekday: 2,
+ hour: 1,
+ minute: 1,
+ second: 1,
+ };
+ const MERIDIEM_RE = /\s*([ap])\.?m\.?/i; // eats up leading spaces too
+ const COMMA_RE = /,/g; // we need re for globalness
+ const MULTI_SPACE_RE = /\s+/g;
+ const LTR_RE = /\u200e/g; // control character
+ const UTC_RE = /UTC|GMT/;
+ class NativeFormatter {
+ constructor(formatSettings) {
+ let standardDateProps = {};
+ let extendedSettings = {};
+ let severity = 0;
+ for (let name in formatSettings) {
+ if (name in EXTENDED_SETTINGS_AND_SEVERITIES) {
+ extendedSettings[name] = formatSettings[name];
+ severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name], severity);
+ }
+ else {
+ standardDateProps[name] = formatSettings[name];
+ if (name in STANDARD_DATE_PROP_SEVERITIES) { // TODO: what about hour12? no severity
+ severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name], severity);
+ }
+ }
+ }
+ this.standardDateProps = standardDateProps;
+ this.extendedSettings = extendedSettings;
+ this.severity = severity;
+ this.buildFormattingFunc = memoize(buildFormattingFunc);
+ }
+ format(date, context) {
+ return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);
+ }
+ formatRange(start, end, context, betterDefaultSeparator) {
+ let { standardDateProps, extendedSettings } = this;
+ let diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);
+ if (!diffSeverity) {
+ return this.format(start, context);
+ }
+ let biggestUnitForPartial = diffSeverity;
+ if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time
+ (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&
+ (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&
+ (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {
+ biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time
+ }
+ let full0 = this.format(start, context);
+ let full1 = this.format(end, context);
+ if (full0 === full1) {
+ return full0;
+ }
+ let partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);
+ let partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);
+ let partial0 = partialFormattingFunc(start);
+ let partial1 = partialFormattingFunc(end);
+ let insertion = findCommonInsertion(full0, partial0, full1, partial1);
+ let separator = extendedSettings.separator || betterDefaultSeparator || context.defaultSeparator || '';
+ if (insertion) {
+ return insertion.before + partial0 + separator + partial1 + insertion.after;
+ }
+ return full0 + separator + full1;
+ }
+ getLargestUnit() {
+ switch (this.severity) {
+ case 7:
+ case 6:
+ case 5:
+ return 'year';
+ case 4:
+ return 'month';
+ case 3:
+ return 'week';
+ case 2:
+ return 'day';
+ default:
+ return 'time'; // really?
+ }
+ }
+ }
+ function buildFormattingFunc(standardDateProps, extendedSettings, context) {
+ let standardDatePropCnt = Object.keys(standardDateProps).length;
+ if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {
+ return (date) => (formatTimeZoneOffset(date.timeZoneOffset));
+ }
+ if (standardDatePropCnt === 0 && extendedSettings.week) {
+ return (date) => (formatWeekNumber(context.computeWeekNumber(date.marker), context.weekText, context.weekTextLong, context.locale, extendedSettings.week));
+ }
+ return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);
+ }
+ function buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {
+ standardDateProps = Object.assign({}, standardDateProps); // copy
+ extendedSettings = Object.assign({}, extendedSettings); // copy
+ sanitizeSettings(standardDateProps, extendedSettings);
+ standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers
+ let normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);
+ let zeroFormat; // needed?
+ if (extendedSettings.omitZeroMinute) {
+ let zeroProps = Object.assign({}, standardDateProps);
+ delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings
+ zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);
+ }
+ return (date) => {
+ let { marker } = date;
+ let format;
+ if (zeroFormat && !marker.getUTCMinutes()) {
+ format = zeroFormat;
+ }
+ else {
+ format = normalFormat;
+ }
+ let s = format.format(marker);
+ return postProcess(s, date, standardDateProps, extendedSettings, context);
+ };
+ }
+ function sanitizeSettings(standardDateProps, extendedSettings) {
+ // deal with a browser inconsistency where formatting the timezone
+ // requires that the hour/minute be present.
+ if (standardDateProps.timeZoneName) {
+ if (!standardDateProps.hour) {
+ standardDateProps.hour = '2-digit';
+ }
+ if (!standardDateProps.minute) {
+ standardDateProps.minute = '2-digit';
+ }
+ }
+ // only support short timezone names
+ if (standardDateProps.timeZoneName === 'long') {
+ standardDateProps.timeZoneName = 'short';
+ }
+ // if requesting to display seconds, MUST display minutes
+ if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {
+ delete extendedSettings.omitZeroMinute;
+ }
+ }
+ function postProcess(s, date, standardDateProps, extendedSettings, context) {
+ s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes
+ if (standardDateProps.timeZoneName === 'short') {
+ s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?
+ 'UTC' : // important to normalize for IE, which does "GMT"
+ formatTimeZoneOffset(date.timeZoneOffset));
+ }
+ if (extendedSettings.omitCommas) {
+ s = s.replace(COMMA_RE, '').trim();
+ }
+ if (extendedSettings.omitZeroMinute) {
+ s = s.replace(':00', ''); // zeroFormat doesn't always achieve this
+ }
+ // ^ do anything that might create adjacent spaces before this point,
+ // because MERIDIEM_RE likes to eat up loading spaces
+ if (extendedSettings.meridiem === false) {
+ s = s.replace(MERIDIEM_RE, '').trim();
+ }
+ else if (extendedSettings.meridiem === 'narrow') { // a/p
+ s = s.replace(MERIDIEM_RE, (m0, m1) => m1.toLocaleLowerCase());
+ }
+ else if (extendedSettings.meridiem === 'short') { // am/pm
+ s = s.replace(MERIDIEM_RE, (m0, m1) => `${m1.toLocaleLowerCase()}m`);
+ }
+ else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase
+ s = s.replace(MERIDIEM_RE, (m0) => m0.toLocaleLowerCase());
+ }
+ s = s.replace(MULTI_SPACE_RE, ' ');
+ s = s.trim();
+ return s;
+ }
+ function injectTzoStr(s, tzoStr) {
+ let replaced = false;
+ s = s.replace(UTC_RE, () => {
+ replaced = true;
+ return tzoStr;
+ });
+ // IE11 doesn't include UTC/GMT in the original string, so append to end
+ if (!replaced) {
+ s += ` ${tzoStr}`;
+ }
+ return s;
+ }
+ function formatWeekNumber(num, weekText, weekTextLong, locale, display) {
+ let parts = [];
+ if (display === 'long') {
+ parts.push(weekTextLong);
+ }
+ else if (display === 'short' || display === 'narrow') {
+ parts.push(weekText);
+ }
+ if (display === 'long' || display === 'short') {
+ parts.push(' ');
+ }
+ parts.push(locale.simpleNumberFormat.format(num));
+ if (locale.options.direction === 'rtl') { // TODO: use control characters instead?
+ parts.reverse();
+ }
+ return parts.join('');
+ }
+ // Range Formatting Utils
+ // 0 = exactly the same
+ // 1 = different by time
+ // and bigger
+ function computeMarkerDiffSeverity(d0, d1, ca) {
+ if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {
+ return 5;
+ }
+ if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {
+ return 4;
+ }
+ if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {
+ return 2;
+ }
+ if (timeAsMs(d0) !== timeAsMs(d1)) {
+ return 1;
+ }
+ return 0;
+ }
+ function computePartialFormattingOptions(options, biggestUnit) {
+ let partialOptions = {};
+ for (let name in options) {
+ if (!(name in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)
+ STANDARD_DATE_PROP_SEVERITIES[name] <= biggestUnit) {
+ partialOptions[name] = options[name];
+ }
+ }
+ return partialOptions;
+ }
+ function findCommonInsertion(full0, partial0, full1, partial1) {
+ let i0 = 0;
+ while (i0 < full0.length) {
+ let found0 = full0.indexOf(partial0, i0);
+ if (found0 === -1) {
+ break;
+ }
+ let before0 = full0.substr(0, found0);
+ i0 = found0 + partial0.length;
+ let after0 = full0.substr(i0);
+ let i1 = 0;
+ while (i1 < full1.length) {
+ let found1 = full1.indexOf(partial1, i1);
+ if (found1 === -1) {
+ break;
+ }
+ let before1 = full1.substr(0, found1);
+ i1 = found1 + partial1.length;
+ let after1 = full1.substr(i1);
+ if (before0 === before1 && after0 === after1) {
+ return {
+ before: before0,
+ after: after0,
+ };
+ }
+ }
+ }
+ return null;
+ }
+
+ function expandZonedMarker(dateInfo, calendarSystem) {
+ let a = calendarSystem.markerToArray(dateInfo.marker);
+ return {
+ marker: dateInfo.marker,
+ timeZoneOffset: dateInfo.timeZoneOffset,
+ array: a,
+ year: a[0],
+ month: a[1],
+ day: a[2],
+ hour: a[3],
+ minute: a[4],
+ second: a[5],
+ millisecond: a[6],
+ };
+ }
+
+ function createVerboseFormattingArg(start, end, context, betterDefaultSeparator) {
+ let startInfo = expandZonedMarker(start, context.calendarSystem);
+ let endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;
+ return {
+ date: startInfo,
+ start: startInfo,
+ end: endInfo,
+ timeZone: context.timeZone,
+ localeCodes: context.locale.codes,
+ defaultSeparator: betterDefaultSeparator || context.defaultSeparator,
+ };
+ }
+
+ /*
+ TODO: fix the terminology of "formatter" vs "formatting func"
+ */
+ /*
+ At the time of instantiation, this object does not know which cmd-formatting system it will use.
+ It receives this at the time of formatting, as a setting.
+ */
+ class CmdFormatter {
+ constructor(cmdStr) {
+ this.cmdStr = cmdStr;
+ }
+ format(date, context, betterDefaultSeparator) {
+ return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
+ }
+ formatRange(start, end, context, betterDefaultSeparator) {
+ return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, betterDefaultSeparator));
+ }
+ }
+
+ class FuncFormatter {
+ constructor(func) {
+ this.func = func;
+ }
+ format(date, context, betterDefaultSeparator) {
+ return this.func(createVerboseFormattingArg(date, null, context, betterDefaultSeparator));
+ }
+ formatRange(start, end, context, betterDefaultSeparator) {
+ return this.func(createVerboseFormattingArg(start, end, context, betterDefaultSeparator));
+ }
+ }
+
+ function createFormatter(input) {
+ if (typeof input === 'object' && input) { // non-null object
+ return new NativeFormatter(input);
+ }
+ if (typeof input === 'string') {
+ return new CmdFormatter(input);
+ }
+ if (typeof input === 'function') {
+ return new FuncFormatter(input);
+ }
+ return null;
+ }
+
+ // base options
+ // ------------
+ const BASE_OPTION_REFINERS = {
+ navLinkDayClick: identity,
+ navLinkWeekClick: identity,
+ duration: createDuration,
+ bootstrapFontAwesome: identity,
+ buttonIcons: identity,
+ customButtons: identity,
+ defaultAllDayEventDuration: createDuration,
+ defaultTimedEventDuration: createDuration,
+ nextDayThreshold: createDuration,
+ scrollTime: createDuration,
+ scrollTimeReset: Boolean,
+ slotMinTime: createDuration,
+ slotMaxTime: createDuration,
+ dayPopoverFormat: createFormatter,
+ slotDuration: createDuration,
+ snapDuration: createDuration,
+ headerToolbar: identity,
+ footerToolbar: identity,
+ defaultRangeSeparator: String,
+ titleRangeSeparator: String,
+ forceEventDuration: Boolean,
+ dayHeaders: Boolean,
+ dayHeaderFormat: createFormatter,
+ dayHeaderClassNames: identity,
+ dayHeaderContent: identity,
+ dayHeaderDidMount: identity,
+ dayHeaderWillUnmount: identity,
+ dayCellClassNames: identity,
+ dayCellContent: identity,
+ dayCellDidMount: identity,
+ dayCellWillUnmount: identity,
+ initialView: String,
+ aspectRatio: Number,
+ weekends: Boolean,
+ weekNumberCalculation: identity,
+ weekNumbers: Boolean,
+ weekNumberClassNames: identity,
+ weekNumberContent: identity,
+ weekNumberDidMount: identity,
+ weekNumberWillUnmount: identity,
+ editable: Boolean,
+ viewClassNames: identity,
+ viewDidMount: identity,
+ viewWillUnmount: identity,
+ nowIndicator: Boolean,
+ nowIndicatorClassNames: identity,
+ nowIndicatorContent: identity,
+ nowIndicatorDidMount: identity,
+ nowIndicatorWillUnmount: identity,
+ showNonCurrentDates: Boolean,
+ lazyFetching: Boolean,
+ startParam: String,
+ endParam: String,
+ timeZoneParam: String,
+ timeZone: String,
+ locales: identity,
+ locale: identity,
+ themeSystem: String,
+ dragRevertDuration: Number,
+ dragScroll: Boolean,
+ allDayMaintainDuration: Boolean,
+ unselectAuto: Boolean,
+ dropAccept: identity,
+ eventOrder: parseFieldSpecs,
+ eventOrderStrict: Boolean,
+ handleWindowResize: Boolean,
+ windowResizeDelay: Number,
+ longPressDelay: Number,
+ eventDragMinDistance: Number,
+ expandRows: Boolean,
+ height: identity,
+ contentHeight: identity,
+ direction: String,
+ weekNumberFormat: createFormatter,
+ eventResizableFromStart: Boolean,
+ displayEventTime: Boolean,
+ displayEventEnd: Boolean,
+ weekText: String,
+ weekTextLong: String,
+ progressiveEventRendering: Boolean,
+ businessHours: identity,
+ initialDate: identity,
+ now: identity,
+ eventDataTransform: identity,
+ stickyHeaderDates: identity,
+ stickyFooterScrollbar: identity,
+ viewHeight: identity,
+ defaultAllDay: Boolean,
+ eventSourceFailure: identity,
+ eventSourceSuccess: identity,
+ eventDisplay: String,
+ eventStartEditable: Boolean,
+ eventDurationEditable: Boolean,
+ eventOverlap: identity,
+ eventConstraint: identity,
+ eventAllow: identity,
+ eventBackgroundColor: String,
+ eventBorderColor: String,
+ eventTextColor: String,
+ eventColor: String,
+ eventClassNames: identity,
+ eventContent: identity,
+ eventDidMount: identity,
+ eventWillUnmount: identity,
+ selectConstraint: identity,
+ selectOverlap: identity,
+ selectAllow: identity,
+ droppable: Boolean,
+ unselectCancel: String,
+ slotLabelFormat: identity,
+ slotLaneClassNames: identity,
+ slotLaneContent: identity,
+ slotLaneDidMount: identity,
+ slotLaneWillUnmount: identity,
+ slotLabelClassNames: identity,
+ slotLabelContent: identity,
+ slotLabelDidMount: identity,
+ slotLabelWillUnmount: identity,
+ dayMaxEvents: identity,
+ dayMaxEventRows: identity,
+ dayMinWidth: Number,
+ slotLabelInterval: createDuration,
+ allDayText: String,
+ allDayClassNames: identity,
+ allDayContent: identity,
+ allDayDidMount: identity,
+ allDayWillUnmount: identity,
+ slotMinWidth: Number,
+ navLinks: Boolean,
+ eventTimeFormat: createFormatter,
+ rerenderDelay: Number,
+ moreLinkText: identity,
+ moreLinkHint: identity,
+ selectMinDistance: Number,
+ selectable: Boolean,
+ selectLongPressDelay: Number,
+ eventLongPressDelay: Number,
+ selectMirror: Boolean,
+ eventMaxStack: Number,
+ eventMinHeight: Number,
+ eventMinWidth: Number,
+ eventShortHeight: Number,
+ slotEventOverlap: Boolean,
+ plugins: identity,
+ firstDay: Number,
+ dayCount: Number,
+ dateAlignment: String,
+ dateIncrement: createDuration,
+ hiddenDays: identity,
+ monthMode: Boolean,
+ fixedWeekCount: Boolean,
+ validRange: identity,
+ visibleRange: identity,
+ titleFormat: identity,
+ eventInteractive: Boolean,
+ // only used by list-view, but languages define the value, so we need it in base options
+ noEventsText: String,
+ viewHint: identity,
+ navLinkHint: identity,
+ closeHint: String,
+ timeHint: String,
+ eventHint: String,
+ moreLinkClick: identity,
+ moreLinkClassNames: identity,
+ moreLinkContent: identity,
+ moreLinkDidMount: identity,
+ moreLinkWillUnmount: identity,
+ // for connectors
+ // (can't be part of plugin system b/c must be provided at runtime)
+ handleCustomRendering: identity,
+ customRenderingMetaMap: identity,
+ customRenderingReplacesEl: Boolean,
+ };
+ // do NOT give a type here. need `typeof BASE_OPTION_DEFAULTS` to give real results.
+ // raw values.
+ const BASE_OPTION_DEFAULTS = {
+ eventDisplay: 'auto',
+ defaultRangeSeparator: ' - ',
+ titleRangeSeparator: ' \u2013 ',
+ defaultTimedEventDuration: '01:00:00',
+ defaultAllDayEventDuration: { day: 1 },
+ forceEventDuration: false,
+ nextDayThreshold: '00:00:00',
+ dayHeaders: true,
+ initialView: '',
+ aspectRatio: 1.35,
+ headerToolbar: {
+ start: 'title',
+ center: '',
+ end: 'today prev,next',
+ },
+ weekends: true,
+ weekNumbers: false,
+ weekNumberCalculation: 'local',
+ editable: false,
+ nowIndicator: false,
+ scrollTime: '06:00:00',
+ scrollTimeReset: true,
+ slotMinTime: '00:00:00',
+ slotMaxTime: '24:00:00',
+ showNonCurrentDates: true,
+ lazyFetching: true,
+ startParam: 'start',
+ endParam: 'end',
+ timeZoneParam: 'timeZone',
+ timeZone: 'local',
+ locales: [],
+ locale: '',
+ themeSystem: 'standard',
+ dragRevertDuration: 500,
+ dragScroll: true,
+ allDayMaintainDuration: false,
+ unselectAuto: true,
+ dropAccept: '*',
+ eventOrder: 'start,-duration,allDay,title',
+ dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },
+ handleWindowResize: true,
+ windowResizeDelay: 100,
+ longPressDelay: 1000,
+ eventDragMinDistance: 5,
+ expandRows: false,
+ navLinks: false,
+ selectable: false,
+ eventMinHeight: 15,
+ eventMinWidth: 30,
+ eventShortHeight: 30,
+ };
+ // calendar listeners
+ // ------------------
+ const CALENDAR_LISTENER_REFINERS = {
+ datesSet: identity,
+ eventsSet: identity,
+ eventAdd: identity,
+ eventChange: identity,
+ eventRemove: identity,
+ windowResize: identity,
+ eventClick: identity,
+ eventMouseEnter: identity,
+ eventMouseLeave: identity,
+ select: identity,
+ unselect: identity,
+ loading: identity,
+ // internal
+ _unmount: identity,
+ _beforeprint: identity,
+ _afterprint: identity,
+ _noEventDrop: identity,
+ _noEventResize: identity,
+ _resize: identity,
+ _scrollRequest: identity,
+ };
+ // calendar-specific options
+ // -------------------------
+ const CALENDAR_OPTION_REFINERS = {
+ buttonText: identity,
+ buttonHints: identity,
+ views: identity,
+ plugins: identity,
+ initialEvents: identity,
+ events: identity,
+ eventSources: identity,
+ };
+ const COMPLEX_OPTION_COMPARATORS = {
+ headerToolbar: isMaybeObjectsEqual,
+ footerToolbar: isMaybeObjectsEqual,
+ buttonText: isMaybeObjectsEqual,
+ buttonHints: isMaybeObjectsEqual,
+ buttonIcons: isMaybeObjectsEqual,
+ dateIncrement: isMaybeObjectsEqual,
+ };
+ function isMaybeObjectsEqual(a, b) {
+ if (typeof a === 'object' && typeof b === 'object' && a && b) { // both non-null objects
+ return isPropsEqual(a, b);
+ }
+ return a === b;
+ }
+ // view-specific options
+ // ---------------------
+ const VIEW_OPTION_REFINERS = {
+ type: String,
+ component: identity,
+ buttonText: String,
+ buttonTextKey: String,
+ dateProfileGeneratorClass: identity,
+ usesMinMaxTime: Boolean,
+ classNames: identity,
+ content: identity,
+ didMount: identity,
+ willUnmount: identity,
+ };
+ // util funcs
+ // ----------------------------------------------------------------------------------------------------
+ function mergeRawOptions(optionSets) {
+ return mergeProps(optionSets, COMPLEX_OPTION_COMPARATORS);
+ }
+ function refineProps(input, refiners) {
+ let refined = {};
+ let extra = {};
+ for (let propName in refiners) {
+ if (propName in input) {
+ refined[propName] = refiners[propName](input[propName]);
+ }
+ }
+ for (let propName in input) {
+ if (!(propName in refiners)) {
+ extra[propName] = input[propName];
+ }
+ }
+ return { refined, extra };
+ }
+ function identity(raw) {
+ return raw;
+ }
+
+ function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {
+ return {
+ instanceId: guid(),
+ defId,
+ range,
+ forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,
+ forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo,
+ };
+ }
+
+ function parseRecurring(refined, defaultAllDay, dateEnv, recurringTypes) {
+ for (let i = 0; i < recurringTypes.length; i += 1) {
+ let parsed = recurringTypes[i].parse(refined, dateEnv);
+ if (parsed) {
+ let { allDay } = refined;
+ if (allDay == null) {
+ allDay = defaultAllDay;
+ if (allDay == null) {
+ allDay = parsed.allDayGuess;
+ if (allDay == null) {
+ allDay = false;
+ }
+ }
+ }
+ return {
+ allDay,
+ duration: parsed.duration,
+ typeData: parsed.typeData,
+ typeId: i,
+ };
+ }
+ }
+ return null;
+ }
+ function expandRecurring(eventStore, framingRange, context) {
+ let { dateEnv, pluginHooks, options } = context;
+ let { defs, instances } = eventStore;
+ // remove existing recurring instances
+ // TODO: bad. always expand events as a second step
+ instances = filterHash(instances, (instance) => !defs[instance.defId].recurringDef);
+ for (let defId in defs) {
+ let def = defs[defId];
+ if (def.recurringDef) {
+ let { duration } = def.recurringDef;
+ if (!duration) {
+ duration = def.allDay ?
+ options.defaultAllDayEventDuration :
+ options.defaultTimedEventDuration;
+ }
+ let starts = expandRecurringRanges(def, duration, framingRange, dateEnv, pluginHooks.recurringTypes);
+ for (let start of starts) {
+ let instance = createEventInstance(defId, {
+ start,
+ end: dateEnv.add(start, duration),
+ });
+ instances[instance.instanceId] = instance;
+ }
+ }
+ }
+ return { defs, instances };
+ }
+ /*
+ Event MUST have a recurringDef
+ */
+ function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {
+ let typeDef = recurringTypes[eventDef.recurringDef.typeId];
+ let markers = typeDef.expand(eventDef.recurringDef.typeData, {
+ start: dateEnv.subtract(framingRange.start, duration),
+ end: framingRange.end,
+ }, dateEnv);
+ // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to
+ if (eventDef.allDay) {
+ markers = markers.map(startOfDay);
+ }
+ return markers;
+ }
+
+ function parseEvents(rawEvents, eventSource, context, allowOpenRange) {
+ let eventStore = createEmptyEventStore();
+ let eventRefiners = buildEventRefiners(context);
+ for (let rawEvent of rawEvents) {
+ let tuple = parseEvent(rawEvent, eventSource, context, allowOpenRange, eventRefiners);
+ if (tuple) {
+ eventTupleToStore(tuple, eventStore);
+ }
+ }
+ return eventStore;
+ }
+ function eventTupleToStore(tuple, eventStore = createEmptyEventStore()) {
+ eventStore.defs[tuple.def.defId] = tuple.def;
+ if (tuple.instance) {
+ eventStore.instances[tuple.instance.instanceId] = tuple.instance;
+ }
+ return eventStore;
+ }
+ // retrieves events that have the same groupId as the instance specified by `instanceId`
+ // or they are the same as the instance.
+ // why might instanceId not be in the store? an event from another calendar?
+ function getRelevantEvents(eventStore, instanceId) {
+ let instance = eventStore.instances[instanceId];
+ if (instance) {
+ let def = eventStore.defs[instance.defId];
+ // get events/instances with same group
+ let newStore = filterEventStoreDefs(eventStore, (lookDef) => isEventDefsGrouped(def, lookDef));
+ // add the original
+ // TODO: wish we could use eventTupleToStore or something like it
+ newStore.defs[def.defId] = def;
+ newStore.instances[instance.instanceId] = instance;
+ return newStore;
+ }
+ return createEmptyEventStore();
+ }
+ function isEventDefsGrouped(def0, def1) {
+ return Boolean(def0.groupId && def0.groupId === def1.groupId);
+ }
+ function createEmptyEventStore() {
+ return { defs: {}, instances: {} };
+ }
+ function mergeEventStores(store0, store1) {
+ return {
+ defs: Object.assign(Object.assign({}, store0.defs), store1.defs),
+ instances: Object.assign(Object.assign({}, store0.instances), store1.instances),
+ };
+ }
+ function filterEventStoreDefs(eventStore, filterFunc) {
+ let defs = filterHash(eventStore.defs, filterFunc);
+ let instances = filterHash(eventStore.instances, (instance) => (defs[instance.defId] // still exists?
+ ));
+ return { defs, instances };
+ }
+ function excludeSubEventStore(master, sub) {
+ let { defs, instances } = master;
+ let filteredDefs = {};
+ let filteredInstances = {};
+ for (let defId in defs) {
+ if (!sub.defs[defId]) { // not explicitly excluded
+ filteredDefs[defId] = defs[defId];
+ }
+ }
+ for (let instanceId in instances) {
+ if (!sub.instances[instanceId] && // not explicitly excluded
+ filteredDefs[instances[instanceId].defId] // def wasn't filtered away
+ ) {
+ filteredInstances[instanceId] = instances[instanceId];
+ }
+ }
+ return {
+ defs: filteredDefs,
+ instances: filteredInstances,
+ };
+ }
+
+ function normalizeConstraint(input, context) {
+ if (Array.isArray(input)) {
+ return parseEvents(input, null, context, true); // allowOpenRange=true
+ }
+ if (typeof input === 'object' && input) { // non-null object
+ return parseEvents([input], null, context, true); // allowOpenRange=true
+ }
+ if (input != null) {
+ return String(input);
+ }
+ return null;
+ }
+
+ function parseClassNames(raw) {
+ if (Array.isArray(raw)) {
+ return raw;
+ }
+ if (typeof raw === 'string') {
+ return raw.split(/\s+/);
+ }
+ return [];
+ }
+
+ // TODO: better called "EventSettings" or "EventConfig"
+ // TODO: move this file into structs
+ // TODO: separate constraint/overlap/allow, because selection uses only that, not other props
+ const EVENT_UI_REFINERS = {
+ display: String,
+ editable: Boolean,
+ startEditable: Boolean,
+ durationEditable: Boolean,
+ constraint: identity,
+ overlap: identity,
+ allow: identity,
+ className: parseClassNames,
+ classNames: parseClassNames,
+ color: String,
+ backgroundColor: String,
+ borderColor: String,
+ textColor: String,
+ };
+ const EMPTY_EVENT_UI = {
+ display: null,
+ startEditable: null,
+ durationEditable: null,
+ constraints: [],
+ overlap: null,
+ allows: [],
+ backgroundColor: '',
+ borderColor: '',
+ textColor: '',
+ classNames: [],
+ };
+ function createEventUi(refined, context) {
+ let constraint = normalizeConstraint(refined.constraint, context);
+ return {
+ display: refined.display || null,
+ startEditable: refined.startEditable != null ? refined.startEditable : refined.editable,
+ durationEditable: refined.durationEditable != null ? refined.durationEditable : refined.editable,
+ constraints: constraint != null ? [constraint] : [],
+ overlap: refined.overlap != null ? refined.overlap : null,
+ allows: refined.allow != null ? [refined.allow] : [],
+ backgroundColor: refined.backgroundColor || refined.color || '',
+ borderColor: refined.borderColor || refined.color || '',
+ textColor: refined.textColor || '',
+ classNames: (refined.className || []).concat(refined.classNames || []), // join singular and plural
+ };
+ }
+ // TODO: prevent against problems with <2 args!
+ function combineEventUis(uis) {
+ return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);
+ }
+ function combineTwoEventUis(item0, item1) {
+ return {
+ display: item1.display != null ? item1.display : item0.display,
+ startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,
+ durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,
+ constraints: item0.constraints.concat(item1.constraints),
+ overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,
+ allows: item0.allows.concat(item1.allows),
+ backgroundColor: item1.backgroundColor || item0.backgroundColor,
+ borderColor: item1.borderColor || item0.borderColor,
+ textColor: item1.textColor || item0.textColor,
+ classNames: item0.classNames.concat(item1.classNames),
+ };
+ }
+
+ const EVENT_NON_DATE_REFINERS = {
+ id: String,
+ groupId: String,
+ title: String,
+ url: String,
+ interactive: Boolean,
+ };
+ const EVENT_DATE_REFINERS = {
+ start: identity,
+ end: identity,
+ date: identity,
+ allDay: Boolean,
+ };
+ const EVENT_REFINERS = Object.assign(Object.assign(Object.assign({}, EVENT_NON_DATE_REFINERS), EVENT_DATE_REFINERS), { extendedProps: identity });
+ function parseEvent(raw, eventSource, context, allowOpenRange, refiners = buildEventRefiners(context)) {
+ let { refined, extra } = refineEventDef(raw, context, refiners);
+ let defaultAllDay = computeIsDefaultAllDay(eventSource, context);
+ let recurringRes = parseRecurring(refined, defaultAllDay, context.dateEnv, context.pluginHooks.recurringTypes);
+ if (recurringRes) {
+ let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', recurringRes.allDay, Boolean(recurringRes.duration), context);
+ def.recurringDef = {
+ typeId: recurringRes.typeId,
+ typeData: recurringRes.typeData,
+ duration: recurringRes.duration,
+ };
+ return { def, instance: null };
+ }
+ let singleRes = parseSingle(refined, defaultAllDay, context, allowOpenRange);
+ if (singleRes) {
+ let def = parseEventDef(refined, extra, eventSource ? eventSource.sourceId : '', singleRes.allDay, singleRes.hasEnd, context);
+ let instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);
+ return { def, instance };
+ }
+ return null;
+ }
+ function refineEventDef(raw, context, refiners = buildEventRefiners(context)) {
+ return refineProps(raw, refiners);
+ }
+ function buildEventRefiners(context) {
+ return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_REFINERS), context.pluginHooks.eventRefiners);
+ }
+ /*
+ Will NOT populate extendedProps with the leftover properties.
+ Will NOT populate date-related props.
+ */
+ function parseEventDef(refined, extra, sourceId, allDay, hasEnd, context) {
+ let def = {
+ title: refined.title || '',
+ groupId: refined.groupId || '',
+ publicId: refined.id || '',
+ url: refined.url || '',
+ recurringDef: null,
+ defId: guid(),
+ sourceId,
+ allDay,
+ hasEnd,
+ interactive: refined.interactive,
+ ui: createEventUi(refined, context),
+ extendedProps: Object.assign(Object.assign({}, (refined.extendedProps || {})), extra),
+ };
+ for (let memberAdder of context.pluginHooks.eventDefMemberAdders) {
+ Object.assign(def, memberAdder(refined));
+ }
+ // help out EventImpl from having user modify props
+ Object.freeze(def.ui.classNames);
+ Object.freeze(def.extendedProps);
+ return def;
+ }
+ function parseSingle(refined, defaultAllDay, context, allowOpenRange) {
+ let { allDay } = refined;
+ let startMeta;
+ let startMarker = null;
+ let hasEnd = false;
+ let endMeta;
+ let endMarker = null;
+ let startInput = refined.start != null ? refined.start : refined.date;
+ startMeta = context.dateEnv.createMarkerMeta(startInput);
+ if (startMeta) {
+ startMarker = startMeta.marker;
+ }
+ else if (!allowOpenRange) {
+ return null;
+ }
+ if (refined.end != null) {
+ endMeta = context.dateEnv.createMarkerMeta(refined.end);
+ }
+ if (allDay == null) {
+ if (defaultAllDay != null) {
+ allDay = defaultAllDay;
+ }
+ else {
+ // fall back to the date props LAST
+ allDay = (!startMeta || startMeta.isTimeUnspecified) &&
+ (!endMeta || endMeta.isTimeUnspecified);
+ }
+ }
+ if (allDay && startMarker) {
+ startMarker = startOfDay(startMarker);
+ }
+ if (endMeta) {
+ endMarker = endMeta.marker;
+ if (allDay) {
+ endMarker = startOfDay(endMarker);
+ }
+ if (startMarker && endMarker <= startMarker) {
+ endMarker = null;
+ }
+ }
+ if (endMarker) {
+ hasEnd = true;
+ }
+ else if (!allowOpenRange) {
+ hasEnd = context.options.forceEventDuration || false;
+ endMarker = context.dateEnv.add(startMarker, allDay ?
+ context.options.defaultAllDayEventDuration :
+ context.options.defaultTimedEventDuration);
+ }
+ return {
+ allDay,
+ hasEnd,
+ range: { start: startMarker, end: endMarker },
+ forcedStartTzo: startMeta ? startMeta.forcedTzo : null,
+ forcedEndTzo: endMeta ? endMeta.forcedTzo : null,
+ };
+ }
+ function computeIsDefaultAllDay(eventSource, context) {
+ let res = null;
+ if (eventSource) {
+ res = eventSource.defaultAllDay;
+ }
+ if (res == null) {
+ res = context.options.defaultAllDay;
+ }
+ return res;
+ }
+
+ const DEF_DEFAULTS = {
+ startTime: '09:00',
+ endTime: '17:00',
+ daysOfWeek: [1, 2, 3, 4, 5],
+ display: 'inverse-background',
+ classNames: 'fc-non-business',
+ groupId: '_businessHours', // so multiple defs get grouped
+ };
+ /*
+ TODO: pass around as EventDefHash!!!
+ */
+ function parseBusinessHours(input, context) {
+ return parseEvents(refineInputs(input), null, context);
+ }
+ function refineInputs(input) {
+ let rawDefs;
+ if (input === true) {
+ rawDefs = [{}]; // will get DEF_DEFAULTS verbatim
+ }
+ else if (Array.isArray(input)) {
+ // if specifying an array, every sub-definition NEEDS a day-of-week
+ rawDefs = input.filter((rawDef) => rawDef.daysOfWeek);
+ }
+ else if (typeof input === 'object' && input) { // non-null object
+ rawDefs = [input];
+ }
+ else { // is probably false
+ rawDefs = [];
+ }
+ rawDefs = rawDefs.map((rawDef) => (Object.assign(Object.assign({}, DEF_DEFAULTS), rawDef)));
+ return rawDefs;
+ }
+
+ /* Date stuff that doesn't belong in datelib core
+ ----------------------------------------------------------------------------------------------------------------------*/
+ // given a timed range, computes an all-day range that has the same exact duration,
+ // but whose start time is aligned with the start of the day.
+ function computeAlignedDayRange(timedRange) {
+ let dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;
+ let start = startOfDay(timedRange.start);
+ let end = addDays(start, dayCnt);
+ return { start, end };
+ }
+ // given a timed range, computes an all-day range based on how for the end date bleeds into the next day
+ // TODO: give nextDayThreshold a default arg
+ function computeVisibleDayRange(timedRange, nextDayThreshold = createDuration(0)) {
+ let startDay = null;
+ let endDay = null;
+ if (timedRange.end) {
+ endDay = startOfDay(timedRange.end);
+ let endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`
+ // If the end time is actually inclusively part of the next day and is equal to or
+ // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.
+ // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.
+ if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {
+ endDay = addDays(endDay, 1);
+ }
+ }
+ if (timedRange.start) {
+ startDay = startOfDay(timedRange.start); // the beginning of the day the range starts
+ // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.
+ if (endDay && endDay <= startDay) {
+ endDay = addDays(startDay, 1);
+ }
+ }
+ return { start: startDay, end: endDay };
+ }
+ // spans from one day into another?
+ function isMultiDayRange(range) {
+ let visibleRange = computeVisibleDayRange(range);
+ return diffDays(visibleRange.start, visibleRange.end) > 1;
+ }
+ function diffDates(date0, date1, dateEnv, largeUnit) {
+ if (largeUnit === 'year') {
+ return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');
+ }
+ if (largeUnit === 'month') {
+ return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');
+ }
+ return diffDayAndTime(date0, date1); // returns a duration
+ }
+
+ function pointInsideRect(point, rect) {
+ return point.left >= rect.left &&
+ point.left < rect.right &&
+ point.top >= rect.top &&
+ point.top < rect.bottom;
+ }
+ // Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false
+ function intersectRects(rect1, rect2) {
+ let res = {
+ left: Math.max(rect1.left, rect2.left),
+ right: Math.min(rect1.right, rect2.right),
+ top: Math.max(rect1.top, rect2.top),
+ bottom: Math.min(rect1.bottom, rect2.bottom),
+ };
+ if (res.left < res.right && res.top < res.bottom) {
+ return res;
+ }
+ return false;
+ }
+ function translateRect(rect, deltaX, deltaY) {
+ return {
+ left: rect.left + deltaX,
+ right: rect.right + deltaX,
+ top: rect.top + deltaY,
+ bottom: rect.bottom + deltaY,
+ };
+ }
+ // Returns a new point that will have been moved to reside within the given rectangle
+ function constrainPoint(point, rect) {
+ return {
+ left: Math.min(Math.max(point.left, rect.left), rect.right),
+ top: Math.min(Math.max(point.top, rect.top), rect.bottom),
+ };
+ }
+ // Returns a point that is the center of the given rectangle
+ function getRectCenter(rect) {
+ return {
+ left: (rect.left + rect.right) / 2,
+ top: (rect.top + rect.bottom) / 2,
+ };
+ }
+ // Subtracts point2's coordinates from point1's coordinates, returning a delta
+ function diffPoints(point1, point2) {
+ return {
+ left: point1.left - point2.left,
+ top: point1.top - point2.top,
+ };
+ }
+
+ let canVGrowWithinCell;
+ function getCanVGrowWithinCell() {
+ if (canVGrowWithinCell == null) {
+ canVGrowWithinCell = computeCanVGrowWithinCell();
+ }
+ return canVGrowWithinCell;
+ }
+ function computeCanVGrowWithinCell() {
+ // for SSR, because this function is call immediately at top-level
+ // TODO: just make this logic execute top-level, immediately, instead of doing lazily
+ if (typeof document === 'undefined') {
+ return true;
+ }
+ let el = document.createElement('div');
+ el.style.position = 'absolute';
+ el.style.top = '0px';
+ el.style.left = '0px';
+ el.innerHTML = '<table><tr><td><div></div></td></tr></table>';
+ el.querySelector('table').style.height = '100px';
+ el.querySelector('div').style.height = '100%';
+ document.body.appendChild(el);
+ let div = el.querySelector('div');
+ let possible = div.offsetHeight > 0;
+ document.body.removeChild(el);
+ return possible;
+ }
+
+ const EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere
+ class Splitter {
+ constructor() {
+ this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);
+ this.splitDateSelection = memoize(this._splitDateSpan);
+ this.splitEventStore = memoize(this._splitEventStore);
+ this.splitIndividualUi = memoize(this._splitIndividualUi);
+ this.splitEventDrag = memoize(this._splitInteraction);
+ this.splitEventResize = memoize(this._splitInteraction);
+ this.eventUiBuilders = {}; // TODO: typescript protection
+ }
+ splitProps(props) {
+ let keyInfos = this.getKeyInfo(props);
+ let defKeys = this.getKeysForEventDefs(props.eventStore);
+ let dateSelections = this.splitDateSelection(props.dateSelection);
+ let individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*
+ let eventStores = this.splitEventStore(props.eventStore, defKeys);
+ let eventDrags = this.splitEventDrag(props.eventDrag);
+ let eventResizes = this.splitEventResize(props.eventResize);
+ let splitProps = {};
+ this.eventUiBuilders = mapHash(keyInfos, (info, key) => this.eventUiBuilders[key] || memoize(buildEventUiForKey));
+ for (let key in keyInfos) {
+ let keyInfo = keyInfos[key];
+ let eventStore = eventStores[key] || EMPTY_EVENT_STORE;
+ let buildEventUi = this.eventUiBuilders[key];
+ splitProps[key] = {
+ businessHours: keyInfo.businessHours || props.businessHours,
+ dateSelection: dateSelections[key] || null,
+ eventStore,
+ eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),
+ eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',
+ eventDrag: eventDrags[key] || null,
+ eventResize: eventResizes[key] || null,
+ };
+ }
+ return splitProps;
+ }
+ _splitDateSpan(dateSpan) {
+ let dateSpans = {};
+ if (dateSpan) {
+ let keys = this.getKeysForDateSpan(dateSpan);
+ for (let key of keys) {
+ dateSpans[key] = dateSpan;
+ }
+ }
+ return dateSpans;
+ }
+ _getKeysForEventDefs(eventStore) {
+ return mapHash(eventStore.defs, (eventDef) => this.getKeysForEventDef(eventDef));
+ }
+ _splitEventStore(eventStore, defKeys) {
+ let { defs, instances } = eventStore;
+ let splitStores = {};
+ for (let defId in defs) {
+ for (let key of defKeys[defId]) {
+ if (!splitStores[key]) {
+ splitStores[key] = createEmptyEventStore();
+ }
+ splitStores[key].defs[defId] = defs[defId];
+ }
+ }
+ for (let instanceId in instances) {
+ let instance = instances[instanceId];
+ for (let key of defKeys[instance.defId]) {
+ if (splitStores[key]) { // must have already been created
+ splitStores[key].instances[instanceId] = instance;
+ }
+ }
+ }
+ return splitStores;
+ }
+ _splitIndividualUi(eventUiBases, defKeys) {
+ let splitHashes = {};
+ for (let defId in eventUiBases) {
+ if (defId) { // not the '' key
+ for (let key of defKeys[defId]) {
+ if (!splitHashes[key]) {
+ splitHashes[key] = {};
+ }
+ splitHashes[key][defId] = eventUiBases[defId];
+ }
+ }
+ }
+ return splitHashes;
+ }
+ _splitInteraction(interaction) {
+ let splitStates = {};
+ if (interaction) {
+ let affectedStores = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents));
+ // can't rely on defKeys because event data is mutated
+ let mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);
+ let mutatedStores = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);
+ let populate = (key) => {
+ if (!splitStates[key]) {
+ splitStates[key] = {
+ affectedEvents: affectedStores[key] || EMPTY_EVENT_STORE,
+ mutatedEvents: mutatedStores[key] || EMPTY_EVENT_STORE,
+ isEvent: interaction.isEvent,
+ };
+ }
+ };
+ for (let key in affectedStores) {
+ populate(key);
+ }
+ for (let key in mutatedStores) {
+ populate(key);
+ }
+ }
+ return splitStates;
+ }
+ }
+ function buildEventUiForKey(allUi, eventUiForKey, individualUi) {
+ let baseParts = [];
+ if (allUi) {
+ baseParts.push(allUi);
+ }
+ if (eventUiForKey) {
+ baseParts.push(eventUiForKey);
+ }
+ let stuff = {
+ '': combineEventUis(baseParts),
+ };
+ if (individualUi) {
+ Object.assign(stuff, individualUi);
+ }
+ return stuff;
+ }
+
+ function parseRange(input, dateEnv) {
+ let start = null;
+ let end = null;
+ if (input.start) {
+ start = dateEnv.createMarker(input.start);
+ }
+ if (input.end) {
+ end = dateEnv.createMarker(input.end);
+ }
+ if (!start && !end) {
+ return null;
+ }
+ if (start && end && end < start) {
+ return null;
+ }
+ return { start, end };
+ }
+ // SIDE-EFFECT: will mutate ranges.
+ // Will return a new array result.
+ function invertRanges(ranges, constraintRange) {
+ let invertedRanges = [];
+ let { start } = constraintRange; // the end of the previous range. the start of the new range
+ let i;
+ let dateRange;
+ // ranges need to be in order. required for our date-walking algorithm
+ ranges.sort(compareRanges);
+ for (i = 0; i < ranges.length; i += 1) {
+ dateRange = ranges[i];
+ // add the span of time before the event (if there is any)
+ if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)
+ invertedRanges.push({ start, end: dateRange.start });
+ }
+ if (dateRange.end > start) {
+ start = dateRange.end;
+ }
+ }
+ // add the span of time after the last event (if there is any)
+ if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)
+ invertedRanges.push({ start, end: constraintRange.end });
+ }
+ return invertedRanges;
+ }
+ function compareRanges(range0, range1) {
+ return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first
+ }
+ function intersectRanges(range0, range1) {
+ let { start, end } = range0;
+ let newRange = null;
+ if (range1.start !== null) {
+ if (start === null) {
+ start = range1.start;
+ }
+ else {
+ start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));
+ }
+ }
+ if (range1.end != null) {
+ if (end === null) {
+ end = range1.end;
+ }
+ else {
+ end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));
+ }
+ }
+ if (start === null || end === null || start < end) {
+ newRange = { start, end };
+ }
+ return newRange;
+ }
+ function rangesEqual(range0, range1) {
+ return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&
+ (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());
+ }
+ function rangesIntersect(range0, range1) {
+ return (range0.end === null || range1.start === null || range0.end > range1.start) &&
+ (range0.start === null || range1.end === null || range0.start < range1.end);
+ }
+ function rangeContainsRange(outerRange, innerRange) {
+ return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&
+ (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end));
+ }
+ function rangeContainsMarker(range, date) {
+ return (range.start === null || date >= range.start) &&
+ (range.end === null || date < range.end);
+ }
+ // If the given date is not within the given range, move it inside.
+ // (If it's past the end, make it one millisecond before the end).
+ function constrainMarkerToRange(date, range) {
+ if (range.start != null && date < range.start) {
+ return range.start;
+ }
+ if (range.end != null && date >= range.end) {
+ return new Date(range.end.valueOf() - 1);
+ }
+ return date;
+ }
+
+ function getDateMeta(date, todayRange, nowDate, dateProfile) {
+ return {
+ dow: date.getUTCDay(),
+ isDisabled: Boolean(dateProfile && !rangeContainsMarker(dateProfile.activeRange, date)),
+ isOther: Boolean(dateProfile && !rangeContainsMarker(dateProfile.currentRange, date)),
+ isToday: Boolean(todayRange && rangeContainsMarker(todayRange, date)),
+ isPast: Boolean(nowDate ? (date < nowDate) : todayRange ? (date < todayRange.start) : false),
+ isFuture: Boolean(nowDate ? (date > nowDate) : todayRange ? (date >= todayRange.end) : false),
+ };
+ }
+ function getDayClassNames(meta, theme) {
+ let classNames = [
+ 'fc-day',
+ `fc-day-${DAY_IDS[meta.dow]}`,
+ ];
+ if (meta.isDisabled) {
+ classNames.push('fc-day-disabled');
+ }
+ else {
+ if (meta.isToday) {
+ classNames.push('fc-day-today');
+ classNames.push(theme.getClass('today'));
+ }
+ if (meta.isPast) {
+ classNames.push('fc-day-past');
+ }
+ if (meta.isFuture) {
+ classNames.push('fc-day-future');
+ }
+ if (meta.isOther) {
+ classNames.push('fc-day-other');
+ }
+ }
+ return classNames;
+ }
+ function getSlotClassNames(meta, theme) {
+ let classNames = [
+ 'fc-slot',
+ `fc-slot-${DAY_IDS[meta.dow]}`,
+ ];
+ if (meta.isDisabled) {
+ classNames.push('fc-slot-disabled');
+ }
+ else {
+ if (meta.isToday) {
+ classNames.push('fc-slot-today');
+ classNames.push(theme.getClass('today'));
+ }
+ if (meta.isPast) {
+ classNames.push('fc-slot-past');
+ }
+ if (meta.isFuture) {
+ classNames.push('fc-slot-future');
+ }
+ }
+ return classNames;
+ }
+
+ const DAY_FORMAT = createFormatter({ year: 'numeric', month: 'long', day: 'numeric' });
+ const WEEK_FORMAT = createFormatter({ week: 'long' });
+ function buildNavLinkAttrs(context, dateMarker, viewType = 'day', isTabbable = true) {
+ const { dateEnv, options, calendarApi } = context;
+ let dateStr = dateEnv.format(dateMarker, viewType === 'week' ? WEEK_FORMAT : DAY_FORMAT);
+ if (options.navLinks) {
+ let zonedDate = dateEnv.toDate(dateMarker);
+ const handleInteraction = (ev) => {
+ let customAction = viewType === 'day' ? options.navLinkDayClick :
+ viewType === 'week' ? options.navLinkWeekClick : null;
+ if (typeof customAction === 'function') {
+ customAction.call(calendarApi, dateEnv.toDate(dateMarker), ev);
+ }
+ else {
+ if (typeof customAction === 'string') {
+ viewType = customAction;
+ }
+ calendarApi.zoomTo(dateMarker, viewType);
+ }
+ };
+ return Object.assign({ title: formatWithOrdinals(options.navLinkHint, [dateStr, zonedDate], dateStr), 'data-navlink': '' }, (isTabbable
+ ? createAriaClickAttrs(handleInteraction)
+ : { onClick: handleInteraction }));
+ }
+ return { 'aria-label': dateStr };
+ }
+
+ let _isRtlScrollbarOnLeft = null;
+ function getIsRtlScrollbarOnLeft() {
+ if (_isRtlScrollbarOnLeft === null) {
+ _isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();
+ }
+ return _isRtlScrollbarOnLeft;
+ }
+ function computeIsRtlScrollbarOnLeft() {
+ let outerEl = document.createElement('div');
+ applyStyle(outerEl, {
+ position: 'absolute',
+ top: -1000,
+ left: 0,
+ border: 0,
+ padding: 0,
+ overflow: 'scroll',
+ direction: 'rtl',
+ });
+ outerEl.innerHTML = '<div></div>';
+ document.body.appendChild(outerEl);
+ let innerEl = outerEl.firstChild;
+ let res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
+ removeElement(outerEl);
+ return res;
+ }
+
+ let _scrollbarWidths;
+ function getScrollbarWidths() {
+ if (!_scrollbarWidths) {
+ _scrollbarWidths = computeScrollbarWidths();
+ }
+ return _scrollbarWidths;
+ }
+ function computeScrollbarWidths() {
+ let el = document.createElement('div');
+ el.style.overflow = 'scroll';
+ el.style.position = 'absolute';
+ el.style.top = '-9999px';
+ el.style.left = '-9999px';
+ document.body.appendChild(el);
+ let res = computeScrollbarWidthsForEl(el);
+ document.body.removeChild(el);
+ return res;
+ }
+ // WARNING: will include border
+ function computeScrollbarWidthsForEl(el) {
+ return {
+ x: el.offsetHeight - el.clientHeight,
+ y: el.offsetWidth - el.clientWidth,
+ };
+ }
+
+ function computeEdges(el, getPadding = false) {
+ let computedStyle = window.getComputedStyle(el);
+ let borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;
+ let borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;
+ let borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;
+ let borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;
+ let badScrollbarWidths = computeScrollbarWidthsForEl(el); // includes border!
+ let scrollbarLeftRight = badScrollbarWidths.y - borderLeft - borderRight;
+ let scrollbarBottom = badScrollbarWidths.x - borderTop - borderBottom;
+ let res = {
+ borderLeft,
+ borderRight,
+ borderTop,
+ borderBottom,
+ scrollbarBottom,
+ scrollbarLeft: 0,
+ scrollbarRight: 0,
+ };
+ if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?
+ res.scrollbarLeft = scrollbarLeftRight;
+ }
+ else {
+ res.scrollbarRight = scrollbarLeftRight;
+ }
+ if (getPadding) {
+ res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;
+ res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;
+ res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;
+ res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;
+ }
+ return res;
+ }
+ function computeInnerRect(el, goWithinPadding = false, doFromWindowViewport) {
+ let outerRect = doFromWindowViewport ? el.getBoundingClientRect() : computeRect(el);
+ let edges = computeEdges(el, goWithinPadding);
+ let res = {
+ left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,
+ right: outerRect.right - edges.borderRight - edges.scrollbarRight,
+ top: outerRect.top + edges.borderTop,
+ bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom,
+ };
+ if (goWithinPadding) {
+ res.left += edges.paddingLeft;
+ res.right -= edges.paddingRight;
+ res.top += edges.paddingTop;
+ res.bottom -= edges.paddingBottom;
+ }
+ return res;
+ }
+ function computeRect(el) {
+ let rect = el.getBoundingClientRect();
+ return {
+ left: rect.left + window.pageXOffset,
+ top: rect.top + window.pageYOffset,
+ right: rect.right + window.pageXOffset,
+ bottom: rect.bottom + window.pageYOffset,
+ };
+ }
+ function computeClippedClientRect(el) {
+ let clippingParents = getClippingParents(el);
+ let rect = el.getBoundingClientRect();
+ for (let clippingParent of clippingParents) {
+ let intersection = intersectRects(rect, clippingParent.getBoundingClientRect());
+ if (intersection) {
+ rect = intersection;
+ }
+ else {
+ return null;
+ }
+ }
+ return rect;
+ }
+ // does not return window
+ function getClippingParents(el) {
+ let parents = [];
+ while (el instanceof HTMLElement) { // will stop when gets to document or null
+ let computedStyle = window.getComputedStyle(el);
+ if (computedStyle.position === 'fixed') {
+ break;
+ }
+ if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {
+ parents.push(el);
+ }
+ el = el.parentNode;
+ }
+ return parents;
+ }
+
+ /*
+ given a function that resolves a result asynchronously.
+ the function can either call passed-in success and failure callbacks,
+ or it can return a promise.
+ if you need to pass additional params to func, bind them first.
+ */
+ function unpromisify(func, normalizedSuccessCallback, normalizedFailureCallback) {
+ // guard against success/failure callbacks being called more than once
+ // and guard against a promise AND callback being used together.
+ let isResolved = false;
+ let wrappedSuccess = function (res) {
+ if (!isResolved) {
+ isResolved = true;
+ normalizedSuccessCallback(res);
+ }
+ };
+ let wrappedFailure = function (error) {
+ if (!isResolved) {
+ isResolved = true;
+ normalizedFailureCallback(error);
+ }
+ };
+ let res = func(wrappedSuccess, wrappedFailure);
+ if (res && typeof res.then === 'function') {
+ res.then(wrappedSuccess, wrappedFailure);
+ }
+ }
+
+ class Emitter {
+ constructor() {
+ this.handlers = {};
+ this.thisContext = null;
+ }
+ setThisContext(thisContext) {
+ this.thisContext = thisContext;
+ }
+ setOptions(options) {
+ this.options = options;
+ }
+ on(type, handler) {
+ addToHash(this.handlers, type, handler);
+ }
+ off(type, handler) {
+ removeFromHash(this.handlers, type, handler);
+ }
+ trigger(type, ...args) {
+ let attachedHandlers = this.handlers[type] || [];
+ let optionHandler = this.options && this.options[type];
+ let handlers = [].concat(optionHandler || [], attachedHandlers);
+ for (let handler of handlers) {
+ handler.apply(this.thisContext, args);
+ }
+ }
+ hasHandlers(type) {
+ return Boolean((this.handlers[type] && this.handlers[type].length) ||
+ (this.options && this.options[type]));
+ }
+ }
+ function addToHash(hash, type, handler) {
+ (hash[type] || (hash[type] = []))
+ .push(handler);
+ }
+ function removeFromHash(hash, type, handler) {
+ if (handler) {
+ if (hash[type]) {
+ hash[type] = hash[type].filter((func) => func !== handler);
+ }
+ }
+ else {
+ delete hash[type]; // remove all handler funcs for this type
+ }
+ }
+
+ /*
+ Records offset information for a set of elements, relative to an origin element.
+ Can record the left/right OR the top/bottom OR both.
+ Provides methods for querying the cache by position.
+ */
+ class PositionCache {
+ constructor(originEl, els, isHorizontal, isVertical) {
+ this.els = els;
+ let originClientRect = this.originClientRect = originEl.getBoundingClientRect(); // relative to viewport top-left
+ if (isHorizontal) {
+ this.buildElHorizontals(originClientRect.left);
+ }
+ if (isVertical) {
+ this.buildElVerticals(originClientRect.top);
+ }
+ }
+ // Populates the left/right internal coordinate arrays
+ buildElHorizontals(originClientLeft) {
+ let lefts = [];
+ let rights = [];
+ for (let el of this.els) {
+ let rect = el.getBoundingClientRect();
+ lefts.push(rect.left - originClientLeft);
+ rights.push(rect.right - originClientLeft);
+ }
+ this.lefts = lefts;
+ this.rights = rights;
+ }
+ // Populates the top/bottom internal coordinate arrays
+ buildElVerticals(originClientTop) {
+ let tops = [];
+ let bottoms = [];
+ for (let el of this.els) {
+ let rect = el.getBoundingClientRect();
+ tops.push(rect.top - originClientTop);
+ bottoms.push(rect.bottom - originClientTop);
+ }
+ this.tops = tops;
+ this.bottoms = bottoms;
+ }
+ // Given a left offset (from document left), returns the index of the el that it horizontally intersects.
+ // If no intersection is made, returns undefined.
+ leftToIndex(leftPosition) {
+ let { lefts, rights } = this;
+ let len = lefts.length;
+ let i;
+ for (i = 0; i < len; i += 1) {
+ if (leftPosition >= lefts[i] && leftPosition < rights[i]) {
+ return i;
+ }
+ }
+ return undefined; // TODO: better
+ }
+ // Given a top offset (from document top), returns the index of the el that it vertically intersects.
+ // If no intersection is made, returns undefined.
+ topToIndex(topPosition) {
+ let { tops, bottoms } = this;
+ let len = tops.length;
+ let i;
+ for (i = 0; i < len; i += 1) {
+ if (topPosition >= tops[i] && topPosition < bottoms[i]) {
+ return i;
+ }
+ }
+ return undefined; // TODO: better
+ }
+ // Gets the width of the element at the given index
+ getWidth(leftIndex) {
+ return this.rights[leftIndex] - this.lefts[leftIndex];
+ }
+ // Gets the height of the element at the given index
+ getHeight(topIndex) {
+ return this.bottoms[topIndex] - this.tops[topIndex];
+ }
+ similarTo(otherCache) {
+ return similarNumArrays(this.tops || [], otherCache.tops || []) &&
+ similarNumArrays(this.bottoms || [], otherCache.bottoms || []) &&
+ similarNumArrays(this.lefts || [], otherCache.lefts || []) &&
+ similarNumArrays(this.rights || [], otherCache.rights || []);
+ }
+ }
+ function similarNumArrays(a, b) {
+ const len = a.length;
+ if (len !== b.length) {
+ return false;
+ }
+ for (let i = 0; i < len; i++) {
+ if (Math.round(a[i]) !== Math.round(b[i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /* eslint max-classes-per-file: "off" */
+ /*
+ An object for getting/setting scroll-related information for an element.
+ Internally, this is done very differently for window versus DOM element,
+ so this object serves as a common interface.
+ */
+ class ScrollController {
+ getMaxScrollTop() {
+ return this.getScrollHeight() - this.getClientHeight();
+ }
+ getMaxScrollLeft() {
+ return this.getScrollWidth() - this.getClientWidth();
+ }
+ canScrollVertically() {
+ return this.getMaxScrollTop() > 0;
+ }
+ canScrollHorizontally() {
+ return this.getMaxScrollLeft() > 0;
+ }
+ canScrollUp() {
+ return this.getScrollTop() > 0;
+ }
+ canScrollDown() {
+ return this.getScrollTop() < this.getMaxScrollTop();
+ }
+ canScrollLeft() {
+ return this.getScrollLeft() > 0;
+ }
+ canScrollRight() {
+ return this.getScrollLeft() < this.getMaxScrollLeft();
+ }
+ }
+ class ElementScrollController extends ScrollController {
+ constructor(el) {
+ super();
+ this.el = el;
+ }
+ getScrollTop() {
+ return this.el.scrollTop;
+ }
+ getScrollLeft() {
+ return this.el.scrollLeft;
+ }
+ setScrollTop(top) {
+ this.el.scrollTop = top;
+ }
+ setScrollLeft(left) {
+ this.el.scrollLeft = left;
+ }
+ getScrollWidth() {
+ return this.el.scrollWidth;
+ }
+ getScrollHeight() {
+ return this.el.scrollHeight;
+ }
+ getClientHeight() {
+ return this.el.clientHeight;
+ }
+ getClientWidth() {
+ return this.el.clientWidth;
+ }
+ }
+ class WindowScrollController extends ScrollController {
+ getScrollTop() {
+ return window.pageYOffset;
+ }
+ getScrollLeft() {
+ return window.pageXOffset;
+ }
+ setScrollTop(n) {
+ window.scroll(window.pageXOffset, n);
+ }
+ setScrollLeft(n) {
+ window.scroll(n, window.pageYOffset);
+ }
+ getScrollWidth() {
+ return document.documentElement.scrollWidth;
+ }
+ getScrollHeight() {
+ return document.documentElement.scrollHeight;
+ }
+ getClientHeight() {
+ return document.documentElement.clientHeight;
+ }
+ getClientWidth() {
+ return document.documentElement.clientWidth;
+ }
+ }
+
+ class Theme {
+ constructor(calendarOptions) {
+ if (this.iconOverrideOption) {
+ this.setIconOverride(calendarOptions[this.iconOverrideOption]);
+ }
+ }
+ setIconOverride(iconOverrideHash) {
+ let iconClassesCopy;
+ let buttonName;
+ if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object
+ iconClassesCopy = Object.assign({}, this.iconClasses);
+ for (buttonName in iconOverrideHash) {
+ iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);
+ }
+ this.iconClasses = iconClassesCopy;
+ }
+ else if (iconOverrideHash === false) {
+ this.iconClasses = {};
+ }
+ }
+ applyIconOverridePrefix(className) {
+ let prefix = this.iconOverridePrefix;
+ if (prefix && className.indexOf(prefix) !== 0) { // if not already present
+ className = prefix + className;
+ }
+ return className;
+ }
+ getClass(key) {
+ return this.classes[key] || '';
+ }
+ getIconClass(buttonName, isRtl) {
+ let className;
+ if (isRtl && this.rtlIconClasses) {
+ className = this.rtlIconClasses[buttonName] || this.iconClasses[buttonName];
+ }
+ else {
+ className = this.iconClasses[buttonName];
+ }
+ if (className) {
+ return `${this.baseIconClass} ${className}`;
+ }
+ return '';
+ }
+ getCustomButtonIconClass(customButtonProps) {
+ let className;
+ if (this.iconOverrideCustomButtonOption) {
+ className = customButtonProps[this.iconOverrideCustomButtonOption];
+ if (className) {
+ return `${this.baseIconClass} ${this.applyIconOverridePrefix(className)}`;
+ }
+ }
+ return '';
+ }
+ }
+ Theme.prototype.classes = {};
+ Theme.prototype.iconClasses = {};
+ Theme.prototype.baseIconClass = '';
+ Theme.prototype.iconOverridePrefix = '';
+
+ var n,l$1,u$1,i$1,t,o,r$1,f$1={},e$1=[],c$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function s(n,l){for(var u in l)n[u]=l[u];return n}function a$1(n){var l=n.parentNode;l&&l.removeChild(n);}function h(l,u,i){var t,o,r,f={};for(r in u)"key"==r?t=u[r]:"ref"==r?o=u[r]:f[r]=u[r];if(arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),"function"==typeof l&&null!=l.defaultProps)for(r in l.defaultProps)void 0===f[r]&&(f[r]=l.defaultProps[r]);return v$1(l,f,t,o,null)}function v$1(n,i,t,o,r){var f={type:n,props:i,key:t,ref:o,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==r?++u$1:r};return null==r&&null!=l$1.vnode&&l$1.vnode(f),f}function y(){return {current:null}}function p(n){return n.children}function d(n,l){this.props=n,this.context=l;}function _(n,l){if(null==l)return n.__?_(n.__,n.__.__k.indexOf(n)+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return "function"==typeof n.type?_(n):null}function k$1(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return k$1(n)}}function b$1(n){(!n.__d&&(n.__d=!0)&&t.push(n)&&!g$2.__r++||o!==l$1.debounceRendering)&&((o=l$1.debounceRendering)||setTimeout)(g$2);}function g$2(){for(var n;g$2.__r=t.length;)n=t.sort(function(n,l){return n.__v.__b-l.__v.__b}),t=[],n.some(function(n){var l,u,i,t,o,r;n.__d&&(o=(t=(l=n).__v).__e,(r=l.__P)&&(u=[],(i=s({},t)).__v=t.__v+1,j$2(r,t,i,l.__n,void 0!==r.ownerSVGElement,null!=t.__h?[o]:null,u,null==o?_(t):o,t.__h),z$1(u,t),t.__e!=o&&k$1(t)));});}function w$2(n,l,u,i,t,o,r,c,s,a){var h,y,d,k,b,g,w,x=i&&i.__k||e$1,C=x.length;for(u.__k=[],h=0;h<l.length;h++)if(null!=(k=u.__k[h]=null==(k=l[h])||"boolean"==typeof k?null:"string"==typeof k||"number"==typeof k||"bigint"==typeof k?v$1(null,k,null,null,k):Array.isArray(k)?v$1(p,{children:k},null,null,null):k.__b>0?v$1(k.type,k.props,k.key,k.ref?k.ref:null,k.__v):k)){if(k.__=u,k.__b=u.__b+1,null===(d=x[h])||d&&k.key==d.key&&k.type===d.type)x[h]=void 0;else for(y=0;y<C;y++){if((d=x[y])&&k.key==d.key&&k.type===d.type){x[y]=void 0;break}d=null;}j$2(n,k,d=d||f$1,t,o,r,c,s,a),b=k.__e,(y=k.ref)&&d.ref!=y&&(w||(w=[]),d.ref&&w.push(d.ref,null,k),w.push(y,k.__c||b,k)),null!=b?(null==g&&(g=b),"function"==typeof k.type&&k.__k===d.__k?k.__d=s=m$1(k,s,n):s=A(n,k,d,x,b,s),"function"==typeof u.type&&(u.__d=s)):s&&d.__e==s&&s.parentNode!=n&&(s=_(d));}for(u.__e=g,h=C;h--;)null!=x[h]&&N(x[h],x[h]);if(w)for(h=0;h<w.length;h++)M(w[h],w[++h],w[++h]);}function m$1(n,l,u){for(var i,t=n.__k,o=0;t&&o<t.length;o++)(i=t[o])&&(i.__=n,l="function"==typeof i.type?m$1(i,l,u):A(u,i,i,t,i.__e,l));return l}function x$1(n,l){return l=l||[],null==n||"boolean"==typeof n||(Array.isArray(n)?n.some(function(n){x$1(n,l);}):l.push(n)),l}function A(n,l,u,i,t,o){var r,f,e;if(void 0!==l.__d)r=l.__d,l.__d=void 0;else if(null==u||t!=o||null==t.parentNode)n:if(null==o||o.parentNode!==n)n.appendChild(t),r=null;else {for(f=o,e=0;(f=f.nextSibling)&&e<i.length;e+=1)if(f==t)break n;n.insertBefore(t,o),r=o;}return void 0!==r?r:t.nextSibling}function C$1(n,l,u,i,t){var o;for(o in u)"children"===o||"key"===o||o in l||H$1(n,o,null,u[o],i);for(o in l)t&&"function"!=typeof l[o]||"children"===o||"key"===o||"value"===o||"checked"===o||u[o]===l[o]||H$1(n,o,l[o],u[o],i);}function $$1(n,l,u){"-"===l[0]?n.setProperty(l,u):n[l]=null==u?"":"number"!=typeof u||c$1.test(l)?u:u+"px";}function H$1(n,l,u,i,t){var o;n:if("style"===l)if("string"==typeof u)n.style.cssText=u;else {if("string"==typeof i&&(n.style.cssText=i=""),i)for(l in i)u&&l in u||$$1(n.style,l,"");if(u)for(l in u)i&&u[l]===i[l]||$$1(n.style,l,u[l]);}else if("o"===l[0]&&"n"===l[1])o=l!==(l=l.replace(/Capture$/,"")),l=l.toLowerCase()in n?l.toLowerCase().slice(2):l.slice(2),n.l||(n.l={}),n.l[l+o]=u,u?i||n.addEventListener(l,o?T$1:I$1,o):n.removeEventListener(l,o?T$1:I$1,o);else if("dangerouslySetInnerHTML"!==l){if(t)l=l.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("href"!==l&&"list"!==l&&"form"!==l&&"tabIndex"!==l&&"download"!==l&&l in n)try{n[l]=null==u?"":u;break n}catch(n){}"function"==typeof u||(null==u||!1===u&&-1==l.indexOf("-")?n.removeAttribute(l):n.setAttribute(l,u));}}function I$1(n){this.l[n.type+!1](l$1.event?l$1.event(n):n);}function T$1(n){this.l[n.type+!0](l$1.event?l$1.event(n):n);}function j$2(n,u,i,t,o,r,f,e,c){var a,h,v,y,_,k,b,g,m,x,A,C,$,H,I,T=u.type;if(void 0!==u.constructor)return null;null!=i.__h&&(c=i.__h,e=u.__e=i.__e,u.__h=null,r=[e]),(a=l$1.__b)&&a(u);try{n:if("function"==typeof T){if(g=u.props,m=(a=T.contextType)&&t[a.__c],x=a?m?m.props.value:a.__:t,i.__c?b=(h=u.__c=i.__c).__=h.__E:("prototype"in T&&T.prototype.render?u.__c=h=new T(g,x):(u.__c=h=new d(g,x),h.constructor=T,h.render=O),m&&m.sub(h),h.props=g,h.state||(h.state={}),h.context=x,h.__n=t,v=h.__d=!0,h.__h=[],h._sb=[]),null==h.__s&&(h.__s=h.state),null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=s({},h.__s)),s(h.__s,T.getDerivedStateFromProps(g,h.__s))),y=h.props,_=h.state,v)null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else {if(null==T.getDerivedStateFromProps&&g!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(g,x),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(g,h.__s,x)||u.__v===i.__v){for(h.props=g,h.state=h.__s,u.__v!==i.__v&&(h.__d=!1),h.__v=u,u.__e=i.__e,u.__k=i.__k,u.__k.forEach(function(n){n&&(n.__=u);}),A=0;A<h._sb.length;A++)h.__h.push(h._sb[A]);h._sb=[],h.__h.length&&f.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(g,h.__s,x),null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,_,k);});}if(h.context=x,h.props=g,h.__v=u,h.__P=n,C=l$1.__r,$=0,"prototype"in T&&T.prototype.render){for(h.state=h.__s,h.__d=!1,C&&C(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[];}else do{h.__d=!1,C&&C(u),a=h.render(h.props,h.state,h.context),h.state=h.__s;}while(h.__d&&++$<25);h.state=h.__s,null!=h.getChildContext&&(t=s(s({},t),h.getChildContext())),v||null==h.getSnapshotBeforeUpdate||(k=h.getSnapshotBeforeUpdate(y,_)),I=null!=a&&a.type===p&&null==a.key?a.props.children:a,w$2(n,Array.isArray(I)?I:[I],u,i,t,o,r,f,e,c),h.base=u.__e,u.__h=null,h.__h.length&&f.push(h),b&&(h.__E=h.__=null),h.__e=!1;}else null==r&&u.__v===i.__v?(u.__k=i.__k,u.__e=i.__e):u.__e=L$1(i.__e,u,i,t,o,r,f,c);(a=l$1.diffed)&&a(u);}catch(n){u.__v=null,(c||null!=r)&&(u.__e=e,u.__h=!!c,r[r.indexOf(e)]=null),l$1.__e(n,u,i);}}function z$1(n,u){l$1.__c&&l$1.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u);});}catch(n){l$1.__e(n,u.__v);}});}function L$1(l,u,i,t,o,r,e,c){var s,h,v,y=i.props,p=u.props,d=u.type,k=0;if("svg"===d&&(o=!0),null!=r)for(;k<r.length;k++)if((s=r[k])&&"setAttribute"in s==!!d&&(d?s.localName===d:3===s.nodeType)){l=s,r[k]=null;break}if(null==l){if(null===d)return document.createTextNode(p);l=o?document.createElementNS("http://www.w3.org/2000/svg",d):document.createElement(d,p.is&&p),r=null,c=!1;}if(null===d)y===p||c&&l.data===p||(l.data=p);else {if(r=r&&n.call(l.childNodes),h=(y=i.props||f$1).dangerouslySetInnerHTML,v=p.dangerouslySetInnerHTML,!c){if(null!=r)for(y={},k=0;k<l.attributes.length;k++)y[l.attributes[k].name]=l.attributes[k].value;(v||h)&&(v&&(h&&v.__html==h.__html||v.__html===l.innerHTML)||(l.innerHTML=v&&v.__html||""));}if(C$1(l,p,y,o,c),v)u.__k=[];else if(k=u.props.children,w$2(l,Array.isArray(k)?k:[k],u,i,t,o&&"foreignObject"!==d,r,e,r?r[0]:i.__k&&_(i,0),c),null!=r)for(k=r.length;k--;)null!=r[k]&&a$1(r[k]);c||("value"in p&&void 0!==(k=p.value)&&(k!==l.value||"progress"===d&&!k||"option"===d&&k!==y.value)&&H$1(l,"value",k,y.value,!1),"checked"in p&&void 0!==(k=p.checked)&&k!==l.checked&&H$1(l,"checked",k,y.checked,!1));}return l}function M(n,u,i){try{"function"==typeof n?n(u):n.current=u;}catch(n){l$1.__e(n,i);}}function N(n,u,i){var t,o;if(l$1.unmount&&l$1.unmount(n),(t=n.ref)&&(t.current&&t.current!==n.__e||M(t,null,u)),null!=(t=n.__c)){if(t.componentWillUnmount)try{t.componentWillUnmount();}catch(n){l$1.__e(n,u);}t.base=t.__P=null,n.__c=void 0;}if(t=n.__k)for(o=0;o<t.length;o++)t[o]&&N(t[o],u,i||"function"!=typeof n.type);i||null==n.__e||a$1(n.__e),n.__=n.__e=n.__d=void 0;}function O(n,l,u){return this.constructor(n,u)}function P$1(u,i,t){var o,r,e;l$1.__&&l$1.__(u,i),r=(o="function"==typeof t)?null:t&&t.__k||i.__k,e=[],j$2(i,u=(!o&&t||i).__k=h(p,null,[u]),r||f$1,f$1,void 0!==i.ownerSVGElement,!o&&t?[t]:r?null:i.firstChild?n.call(i.childNodes):null,e,!o&&t?t:r?r.__e:i.firstChild,o),z$1(e,u);}function S(n,l){P$1(n,l,S);}function q(l,u,i){var t,o,r,f=s({},l.props);for(r in u)"key"==r?t=u[r]:"ref"==r?o=u[r]:f[r]=u[r];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):i),v$1(l.type,f,t||l.key,o||l.ref,null)}function B$1(n,l){var u={__c:l="__cC"+r$1++,__:n,Consumer:function(n,l){return n.children(l)},Provider:function(n){var u,i;return this.getChildContext||(u=[],(i={})[l]=this,this.getChildContext=function(){return i},this.shouldComponentUpdate=function(n){this.props.value!==n.value&&u.some(b$1);},this.sub=function(n){u.push(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u.splice(u.indexOf(n),1),l&&l.call(n);};}),n.children}};return u.Provider.__=u.Consumer.contextType=u}n=e$1.slice,l$1={__e:function(n,l,u,i){for(var t,o,r;l=l.__;)if((t=l.__c)&&!t.__)try{if((o=t.constructor)&&null!=o.getDerivedStateFromError&&(t.setState(o.getDerivedStateFromError(n)),r=t.__d),null!=t.componentDidCatch&&(t.componentDidCatch(n,i||{}),r=t.__d),r)return t.__E=t}catch(l){n=l;}throw n}},u$1=0,i$1=function(n){return null!=n&&void 0===n.constructor},d.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=s({},this.state),"function"==typeof n&&(n=n(s({},u),this.props)),n&&s(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),b$1(this));},d.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),b$1(this));},d.prototype.render=p,t=[],g$2.__r=0,r$1=0;
+
+ var r,u,i,f=[],c=[],e=l$1.__b,a=l$1.__r,v=l$1.diffed,l=l$1.__c,m=l$1.unmount;function b(){for(var t;t=f.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(k),t.__H.__h.forEach(w$1),t.__H.__h=[];}catch(r){t.__H.__h=[],l$1.__e(r,t.__v);}}l$1.__b=function(n){r=null,e&&e(n);},l$1.__r=function(n){a&&a(n);var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.__V=c,n.__N=n.i=void 0;})):(i.__h.forEach(k),i.__h.forEach(w$1),i.__h=[])),u=r;},l$1.diffed=function(t){v&&v(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(1!==f.push(o)&&i===l$1.requestAnimationFrame||((i=l$1.requestAnimationFrame)||j$1)(b)),o.__H.__.forEach(function(n){n.i&&(n.__H=n.i),n.__V!==c&&(n.__=n.__V),n.i=void 0,n.__V=c;})),u=r=null;},l$1.__c=function(t,r){r.some(function(t){try{t.__h.forEach(k),t.__h=t.__h.filter(function(n){return !n.__||w$1(n)});}catch(u){r.some(function(n){n.__h&&(n.__h=[]);}),r=[],l$1.__e(u,t.__v);}}),l&&l(t,r);},l$1.unmount=function(t){m&&m(t);var r,u=t.__c;u&&u.__H&&(u.__H.__.forEach(function(n){try{k(n);}catch(n){r=n;}}),u.__H=void 0,r&&l$1.__e(r,u.__v));};var g$1="function"==typeof requestAnimationFrame;function j$1(n){var t,r=function(){clearTimeout(u),g$1&&cancelAnimationFrame(t),setTimeout(n);},u=setTimeout(r,100);g$1&&(t=requestAnimationFrame(r));}function k(n){var t=r,u=n.__c;"function"==typeof u&&(n.__c=void 0,u()),r=t;}function w$1(n){var t=r;n.__c=n.__(),r=t;}
+
+ function g(n,t){for(var e in t)n[e]=t[e];return n}function C(n,t){for(var e in n)if("__source"!==e&&!(e in t))return !0;for(var r in t)if("__source"!==r&&n[r]!==t[r])return !0;return !1}function w(n){this.props=n;}(w.prototype=new d).isPureReactComponent=!0,w.prototype.shouldComponentUpdate=function(n,t){return C(this.props,n)||C(this.state,t)};var x=l$1.__b;l$1.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),x&&x(n);};var T=l$1.__e;l$1.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);T(n,t,e,r);};var I=l$1.unmount;function L(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){"function"==typeof n.__c&&n.__c();}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return L(n,t,e)})),n}function U(n,t,e){return n&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return U(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.insertBefore(n.__e,n.__d),n.__c.__e=!0,n.__c.__P=e)),n}function D(){this.__u=0,this.t=null,this.__b=null;}function F(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function V(){this.u=null,this.o=null;}l$1.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&!0===n.__h&&(n.type=null),I&&I(n);},(D.prototype=new d).__c=function(n,t){var e=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(e);var u=F(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l());};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=U(n,n.__c.__P,n.__c.__O);}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate();}},c=!0===t.__h;r.__u++||c||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i);},D.prototype.componentWillUnmount=function(){this.t=[];},D.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement("div"),o=this.__v.__k[0].__c;this.__v.__k[0]=L(this.__b,r,o.__O=o.__P);}this.__b=null;}var i=e.__a&&h(p,null,n.fallback);return i&&(i.__h=null),[h(p,null,e.__a?null:n.children),i]};var W=function(n,t,e){if(++e[1]===e[0]&&n.o.delete(t),n.props.revealOrder&&("t"!==n.props.revealOrder[0]||!n.o.size))for(e=n.u;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.u=e=e[2];}};function P(n){return this.getChildContext=function(){return n.context},n.children}function $(n){var e=this,r=n.i;e.componentWillUnmount=function(){P$1(null,e.l),e.l=null,e.i=null;},e.i&&e.i!==r&&e.componentWillUnmount(),n.__v?(e.l||(e.i=r,e.l={nodeType:1,parentNode:r,childNodes:[],appendChild:function(n){this.childNodes.push(n),e.i.appendChild(n);},insertBefore:function(n,t){this.childNodes.push(n),e.i.appendChild(n);},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.i.removeChild(n);}}),P$1(h(P,{context:e.context},n.__v),e.l)):e.l&&e.componentWillUnmount();}function j(n,e){var r=h($,{__v:n,i:e});return r.containerInfo=e,r}(V.prototype=new d).__a=function(n){var t=this,e=F(t.__v),r=t.o.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),W(t,n,r)):u();};e?e(o):o();}},V.prototype.render=function(n){this.u=null,this.o=new Map;var t=x$1(n.children);n.revealOrder&&"b"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.o.set(t[e],this.u=[1,0,this.u]);return n.children},V.prototype.componentDidUpdate=V.prototype.componentDidMount=function(){var n=this;this.o.forEach(function(t,e){W(n,e,t);});};var z="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,B=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,H="undefined"!=typeof document,Z=function(n){return ("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(n)};d.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(t){Object.defineProperty(d.prototype,t,{configurable:!0,get:function(){return this["UNSAFE_"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n});}});});var G=l$1.event;function J(){}function K(){return this.cancelBubble}function Q(){return this.defaultPrevented}l$1.event=function(n){return G&&(n=G(n)),n.persist=J,n.isPropagationStopped=K,n.isDefaultPrevented=Q,n.nativeEvent=n};var nn={configurable:!0,get:function(){return this.class}},tn=l$1.vnode;l$1.vnode=function(n){var t=n.type,e=n.props,u=e;if("string"==typeof t){var o=-1===t.indexOf("-");for(var i in u={},e){var l=e[i];H&&"children"===i&&"noscript"===t||"value"===i&&"defaultValue"in e&&null==l||("defaultValue"===i&&"value"in e&&null==e.value?i="value":"download"===i&&!0===l?l="":/ondoubleclick/i.test(i)?i="ondblclick":/^onchange(textarea|input)/i.test(i+t)&&!Z(e.type)?i="oninput":/^onfocus$/i.test(i)?i="onfocusin":/^onblur$/i.test(i)?i="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(i)?i=i.toLowerCase():o&&B.test(i)?i=i.replace(/[A-Z0-9]/g,"-$&").toLowerCase():null===l&&(l=void 0),/^oninput$/i.test(i)&&(i=i.toLowerCase(),u[i]&&(i="oninputCapture")),u[i]=l);}"select"==t&&u.multiple&&Array.isArray(u.value)&&(u.value=x$1(e.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value);})),"select"==t&&null!=u.defaultValue&&(u.value=x$1(e.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value;})),n.props=u,e.class!=e.className&&(nn.enumerable="className"in e,null!=e.className&&(u.class=e.className),Object.defineProperty(u,"className",nn));}n.$$typeof=z,tn&&tn(n);};var en=l$1.__r;l$1.__r=function(n){en&&en(n),n.__c;};
+
+ /*
+ NOTE: this can be a public API, especially createElement for hooks.
+ See examples/typescript-scheduler/src/index.ts
+ */
+ function flushSync(runBeforeFlush) {
+ runBeforeFlush();
+ let oldDebounceRendering = l$1.debounceRendering; // orig
+ let callbackQ = [];
+ function execCallbackSync(callback) {
+ callbackQ.push(callback);
+ }
+ l$1.debounceRendering = execCallbackSync;
+ P$1(h(FakeComponent, {}), document.createElement('div'));
+ while (callbackQ.length) {
+ callbackQ.shift()();
+ }
+ l$1.debounceRendering = oldDebounceRendering;
+ }
+ class FakeComponent extends d {
+ render() { return h('div', {}); }
+ componentDidMount() { this.setState({}); }
+ }
+ // TODO: use preact/compat instead?
+ function createContext(defaultValue) {
+ let ContextType = B$1(defaultValue);
+ let origProvider = ContextType.Provider;
+ ContextType.Provider = function () {
+ let isNew = !this.getChildContext;
+ let children = origProvider.apply(this, arguments); // eslint-disable-line prefer-rest-params
+ if (isNew) {
+ let subs = [];
+ this.shouldComponentUpdate = (_props) => {
+ if (this.props.value !== _props.value) {
+ subs.forEach((c) => {
+ c.context = _props.value;
+ c.forceUpdate();
+ });
+ }
+ };
+ this.sub = (c) => {
+ subs.push(c);
+ let old = c.componentWillUnmount;
+ c.componentWillUnmount = () => {
+ subs.splice(subs.indexOf(c), 1);
+ old && old.call(c);
+ };
+ };
+ }
+ return children;
+ };
+ return ContextType;
+ }
+
+ var preact = {
+ __proto__: null,
+ flushSync: flushSync,
+ createContext: createContext,
+ createPortal: j,
+ Component: d,
+ Fragment: p,
+ cloneElement: q,
+ createElement: h,
+ createRef: y,
+ h: h,
+ hydrate: S,
+ get isValidElement () { return i$1; },
+ get options () { return l$1; },
+ render: P$1,
+ toChildArray: x$1
+ };
+
+ class ScrollResponder {
+ constructor(execFunc, emitter, scrollTime, scrollTimeReset) {
+ this.execFunc = execFunc;
+ this.emitter = emitter;
+ this.scrollTime = scrollTime;
+ this.scrollTimeReset = scrollTimeReset;
+ this.handleScrollRequest = (request) => {
+ this.queuedRequest = Object.assign({}, this.queuedRequest || {}, request);
+ this.drain();
+ };
+ emitter.on('_scrollRequest', this.handleScrollRequest);
+ this.fireInitialScroll();
+ }
+ detach() {
+ this.emitter.off('_scrollRequest', this.handleScrollRequest);
+ }
+ update(isDatesNew) {
+ if (isDatesNew && this.scrollTimeReset) {
+ this.fireInitialScroll(); // will drain
+ }
+ else {
+ this.drain();
+ }
+ }
+ fireInitialScroll() {
+ this.handleScrollRequest({
+ time: this.scrollTime,
+ });
+ }
+ drain() {
+ if (this.queuedRequest && this.execFunc(this.queuedRequest)) {
+ this.queuedRequest = null;
+ }
+ }
+ }
+
+ const ViewContextType = createContext({}); // for Components
+ function buildViewContext(viewSpec, viewApi, viewOptions, dateProfileGenerator, dateEnv, theme, pluginHooks, dispatch, getCurrentData, emitter, calendarApi, registerInteractiveComponent, unregisterInteractiveComponent) {
+ return {
+ dateEnv,
+ options: viewOptions,
+ pluginHooks,
+ emitter,
+ dispatch,
+ getCurrentData,
+ calendarApi,
+ viewSpec,
+ viewApi,
+ dateProfileGenerator,
+ theme,
+ isRtl: viewOptions.direction === 'rtl',
+ addResizeHandler(handler) {
+ emitter.on('_resize', handler);
+ },
+ removeResizeHandler(handler) {
+ emitter.off('_resize', handler);
+ },
+ createScrollResponder(execFunc) {
+ return new ScrollResponder(execFunc, emitter, createDuration(viewOptions.scrollTime), viewOptions.scrollTimeReset);
+ },
+ registerInteractiveComponent,
+ unregisterInteractiveComponent,
+ };
+ }
+
+ /* eslint max-classes-per-file: off */
+ class PureComponent extends d {
+ shouldComponentUpdate(nextProps, nextState) {
+ if (this.debug) {
+ // eslint-disable-next-line no-console
+ console.log(getUnequalProps(nextProps, this.props), getUnequalProps(nextState, this.state));
+ }
+ return !compareObjs(this.props, nextProps, this.propEquality) ||
+ !compareObjs(this.state, nextState, this.stateEquality);
+ }
+ // HACK for freakin' React StrictMode
+ safeSetState(newState) {
+ if (!compareObjs(this.state, Object.assign(Object.assign({}, this.state), newState), this.stateEquality)) {
+ this.setState(newState);
+ }
+ }
+ }
+ PureComponent.addPropsEquality = addPropsEquality;
+ PureComponent.addStateEquality = addStateEquality;
+ PureComponent.contextType = ViewContextType;
+ PureComponent.prototype.propEquality = {};
+ PureComponent.prototype.stateEquality = {};
+ class BaseComponent extends PureComponent {
+ }
+ BaseComponent.contextType = ViewContextType;
+ function addPropsEquality(propEquality) {
+ let hash = Object.create(this.prototype.propEquality);
+ Object.assign(hash, propEquality);
+ this.prototype.propEquality = hash;
+ }
+ function addStateEquality(stateEquality) {
+ let hash = Object.create(this.prototype.stateEquality);
+ Object.assign(hash, stateEquality);
+ this.prototype.stateEquality = hash;
+ }
+ // use other one
+ function setRef(ref, current) {
+ if (typeof ref === 'function') {
+ ref(current);
+ }
+ else if (ref) {
+ // see https://github.com/facebook/react/issues/13029
+ ref.current = current;
+ }
+ }
+
+ /*
+ an INTERACTABLE date component
+
+ PURPOSES:
+ - hook up to fg, fill, and mirror renderers
+ - interface for dragging and hits
+ */
+ class DateComponent extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.uid = guid();
+ }
+ // Hit System
+ // -----------------------------------------------------------------------------------------------------------------
+ prepareHits() {
+ }
+ queryHit(positionLeft, positionTop, elWidth, elHeight) {
+ return null; // this should be abstract
+ }
+ // Pointer Interaction Utils
+ // -----------------------------------------------------------------------------------------------------------------
+ isValidSegDownEl(el) {
+ return !this.props.eventDrag && // HACK
+ !this.props.eventResize && // HACK
+ !elementClosest(el, '.fc-event-mirror');
+ }
+ isValidDateDownEl(el) {
+ return !elementClosest(el, '.fc-event:not(.fc-bg-event)') &&
+ !elementClosest(el, '.fc-more-link') && // a "more.." link
+ !elementClosest(el, 'a[data-navlink]') && // a clickable nav link
+ !elementClosest(el, '.fc-popover'); // hack
+ }
+ }
+
+ function reduceCurrentDate(currentDate, action) {
+ switch (action.type) {
+ case 'CHANGE_DATE':
+ return action.dateMarker;
+ default:
+ return currentDate;
+ }
+ }
+ function getInitialDate(options, dateEnv) {
+ let initialDateInput = options.initialDate;
+ // compute the initial ambig-timezone date
+ if (initialDateInput != null) {
+ return dateEnv.createMarker(initialDateInput);
+ }
+ return getNow(options.now, dateEnv); // getNow already returns unzoned
+ }
+ function getNow(nowInput, dateEnv) {
+ if (typeof nowInput === 'function') {
+ nowInput = nowInput();
+ }
+ if (nowInput == null) {
+ return dateEnv.createNowMarker();
+ }
+ return dateEnv.createMarker(nowInput);
+ }
+
+ class DateProfileGenerator {
+ constructor(props) {
+ this.props = props;
+ this.nowDate = getNow(props.nowInput, props.dateEnv);
+ this.initHiddenDays();
+ }
+ /* Date Range Computation
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Builds a structure with info about what the dates/ranges will be for the "prev" view.
+ buildPrev(currentDateProfile, currentDate, forceToValid) {
+ let { dateEnv } = this.props;
+ let prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
+ currentDateProfile.dateIncrement);
+ return this.build(prevDate, -1, forceToValid);
+ }
+ // Builds a structure with info about what the dates/ranges will be for the "next" view.
+ buildNext(currentDateProfile, currentDate, forceToValid) {
+ let { dateEnv } = this.props;
+ let nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
+ currentDateProfile.dateIncrement);
+ return this.build(nextDate, 1, forceToValid);
+ }
+ // Builds a structure holding dates/ranges for rendering around the given date.
+ // Optional direction param indicates whether the date is being incremented/decremented
+ // from its previous value. decremented = -1, incremented = 1 (default).
+ build(currentDate, direction, forceToValid = true) {
+ let { props } = this;
+ let validRange;
+ let currentInfo;
+ let isRangeAllDay;
+ let renderRange;
+ let activeRange;
+ let isValid;
+ validRange = this.buildValidRange();
+ validRange = this.trimHiddenDays(validRange);
+ if (forceToValid) {
+ currentDate = constrainMarkerToRange(currentDate, validRange);
+ }
+ currentInfo = this.buildCurrentRangeInfo(currentDate, direction);
+ isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);
+ renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);
+ renderRange = this.trimHiddenDays(renderRange);
+ activeRange = renderRange;
+ if (!props.showNonCurrentDates) {
+ activeRange = intersectRanges(activeRange, currentInfo.range);
+ }
+ activeRange = this.adjustActiveRange(activeRange);
+ activeRange = intersectRanges(activeRange, validRange); // might return null
+ // it's invalid if the originally requested date is not contained,
+ // or if the range is completely outside of the valid range.
+ isValid = rangesIntersect(currentInfo.range, validRange);
+ return {
+ // constraint for where prev/next operations can go and where events can be dragged/resized to.
+ // an object with optional start and end properties.
+ validRange,
+ // range the view is formally responsible for.
+ // for example, a month view might have 1st-31st, excluding padded dates
+ currentRange: currentInfo.range,
+ // name of largest unit being displayed, like "month" or "week"
+ currentRangeUnit: currentInfo.unit,
+ isRangeAllDay,
+ // dates that display events and accept drag-n-drop
+ // will be `null` if no dates accept events
+ activeRange,
+ // date range with a rendered skeleton
+ // includes not-active days that need some sort of DOM
+ renderRange,
+ // Duration object that denotes the first visible time of any given day
+ slotMinTime: props.slotMinTime,
+ // Duration object that denotes the exclusive visible end time of any given day
+ slotMaxTime: props.slotMaxTime,
+ isValid,
+ // how far the current date will move for a prev/next operation
+ dateIncrement: this.buildDateIncrement(currentInfo.duration),
+ // pass a fallback (might be null) ^
+ };
+ }
+ // Builds an object with optional start/end properties.
+ // Indicates the minimum/maximum dates to display.
+ // not responsible for trimming hidden days.
+ buildValidRange() {
+ let input = this.props.validRangeInput;
+ let simpleInput = typeof input === 'function'
+ ? input.call(this.props.calendarApi, this.nowDate)
+ : input;
+ return this.refineRange(simpleInput) ||
+ { start: null, end: null }; // completely open-ended
+ }
+ // Builds a structure with info about the "current" range, the range that is
+ // highlighted as being the current month for example.
+ // See build() for a description of `direction`.
+ // Guaranteed to have `range` and `unit` properties. `duration` is optional.
+ buildCurrentRangeInfo(date, direction) {
+ let { props } = this;
+ let duration = null;
+ let unit = null;
+ let range = null;
+ let dayCount;
+ if (props.duration) {
+ duration = props.duration;
+ unit = props.durationUnit;
+ range = this.buildRangeFromDuration(date, direction, duration, unit);
+ }
+ else if ((dayCount = this.props.dayCount)) {
+ unit = 'day';
+ range = this.buildRangeFromDayCount(date, direction, dayCount);
+ }
+ else if ((range = this.buildCustomVisibleRange(date))) {
+ unit = props.dateEnv.greatestWholeUnit(range.start, range.end).unit;
+ }
+ else {
+ duration = this.getFallbackDuration();
+ unit = greatestDurationDenominator(duration).unit;
+ range = this.buildRangeFromDuration(date, direction, duration, unit);
+ }
+ return { duration, unit, range };
+ }
+ getFallbackDuration() {
+ return createDuration({ day: 1 });
+ }
+ // Returns a new activeRange to have time values (un-ambiguate)
+ // slotMinTime or slotMaxTime causes the range to expand.
+ adjustActiveRange(range) {
+ let { dateEnv, usesMinMaxTime, slotMinTime, slotMaxTime } = this.props;
+ let { start, end } = range;
+ if (usesMinMaxTime) {
+ // expand active range if slotMinTime is negative (why not when positive?)
+ if (asRoughDays(slotMinTime) < 0) {
+ start = startOfDay(start); // necessary?
+ start = dateEnv.add(start, slotMinTime);
+ }
+ // expand active range if slotMaxTime is beyond one day (why not when negative?)
+ if (asRoughDays(slotMaxTime) > 1) {
+ end = startOfDay(end); // necessary?
+ end = addDays(end, -1);
+ end = dateEnv.add(end, slotMaxTime);
+ }
+ }
+ return { start, end };
+ }
+ // Builds the "current" range when it is specified as an explicit duration.
+ // `unit` is the already-computed greatestDurationDenominator unit of duration.
+ buildRangeFromDuration(date, direction, duration, unit) {
+ let { dateEnv, dateAlignment } = this.props;
+ let start;
+ let end;
+ let res;
+ // compute what the alignment should be
+ if (!dateAlignment) {
+ let { dateIncrement } = this.props;
+ if (dateIncrement) {
+ // use the smaller of the two units
+ if (asRoughMs(dateIncrement) < asRoughMs(duration)) {
+ dateAlignment = greatestDurationDenominator(dateIncrement).unit;
+ }
+ else {
+ dateAlignment = unit;
+ }
+ }
+ else {
+ dateAlignment = unit;
+ }
+ }
+ // if the view displays a single day or smaller
+ if (asRoughDays(duration) <= 1) {
+ if (this.isHiddenDay(start)) {
+ start = this.skipHiddenDays(start, direction);
+ start = startOfDay(start);
+ }
+ }
+ function computeRes() {
+ start = dateEnv.startOf(date, dateAlignment);
+ end = dateEnv.add(start, duration);
+ res = { start, end };
+ }
+ computeRes();
+ // if range is completely enveloped by hidden days, go past the hidden days
+ if (!this.trimHiddenDays(res)) {
+ date = this.skipHiddenDays(date, direction);
+ computeRes();
+ }
+ return res;
+ }
+ // Builds the "current" range when a dayCount is specified.
+ buildRangeFromDayCount(date, direction, dayCount) {
+ let { dateEnv, dateAlignment } = this.props;
+ let runningCount = 0;
+ let start = date;
+ let end;
+ if (dateAlignment) {
+ start = dateEnv.startOf(start, dateAlignment);
+ }
+ start = startOfDay(start);
+ start = this.skipHiddenDays(start, direction);
+ end = start;
+ do {
+ end = addDays(end, 1);
+ if (!this.isHiddenDay(end)) {
+ runningCount += 1;
+ }
+ } while (runningCount < dayCount);
+ return { start, end };
+ }
+ // Builds a normalized range object for the "visible" range,
+ // which is a way to define the currentRange and activeRange at the same time.
+ buildCustomVisibleRange(date) {
+ let { props } = this;
+ let input = props.visibleRangeInput;
+ let simpleInput = typeof input === 'function'
+ ? input.call(props.calendarApi, props.dateEnv.toDate(date))
+ : input;
+ let range = this.refineRange(simpleInput);
+ if (range && (range.start == null || range.end == null)) {
+ return null;
+ }
+ return range;
+ }
+ // Computes the range that will represent the element/cells for *rendering*,
+ // but which may have voided days/times.
+ // not responsible for trimming hidden days.
+ buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {
+ return currentRange;
+ }
+ // Compute the duration value that should be added/substracted to the current date
+ // when a prev/next operation happens.
+ buildDateIncrement(fallback) {
+ let { dateIncrement } = this.props;
+ let customAlignment;
+ if (dateIncrement) {
+ return dateIncrement;
+ }
+ if ((customAlignment = this.props.dateAlignment)) {
+ return createDuration(1, customAlignment);
+ }
+ if (fallback) {
+ return fallback;
+ }
+ return createDuration({ days: 1 });
+ }
+ refineRange(rangeInput) {
+ if (rangeInput) {
+ let range = parseRange(rangeInput, this.props.dateEnv);
+ if (range) {
+ range = computeVisibleDayRange(range);
+ }
+ return range;
+ }
+ return null;
+ }
+ /* Hidden Days
+ ------------------------------------------------------------------------------------------------------------------*/
+ // Initializes internal variables related to calculating hidden days-of-week
+ initHiddenDays() {
+ let hiddenDays = this.props.hiddenDays || []; // array of day-of-week indices that are hidden
+ let isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)
+ let dayCnt = 0;
+ let i;
+ if (this.props.weekends === false) {
+ hiddenDays.push(0, 6); // 0=sunday, 6=saturday
+ }
+ for (i = 0; i < 7; i += 1) {
+ if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {
+ dayCnt += 1;
+ }
+ }
+ if (!dayCnt) {
+ throw new Error('invalid hiddenDays'); // all days were hidden? bad.
+ }
+ this.isHiddenDayHash = isHiddenDayHash;
+ }
+ // Remove days from the beginning and end of the range that are computed as hidden.
+ // If the whole range is trimmed off, returns null
+ trimHiddenDays(range) {
+ let { start, end } = range;
+ if (start) {
+ start = this.skipHiddenDays(start);
+ }
+ if (end) {
+ end = this.skipHiddenDays(end, -1, true);
+ }
+ if (start == null || end == null || start < end) {
+ return { start, end };
+ }
+ return null;
+ }
+ // Is the current day hidden?
+ // `day` is a day-of-week index (0-6), or a Date (used for UTC)
+ isHiddenDay(day) {
+ if (day instanceof Date) {
+ day = day.getUTCDay();
+ }
+ return this.isHiddenDayHash[day];
+ }
+ // Incrementing the current day until it is no longer a hidden day, returning a copy.
+ // DOES NOT CONSIDER validRange!
+ // If the initial value of `date` is not a hidden day, don't do anything.
+ // Pass `isExclusive` as `true` if you are dealing with an end date.
+ // `inc` defaults to `1` (increment one day forward each time)
+ skipHiddenDays(date, inc = 1, isExclusive = false) {
+ while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {
+ date = addDays(date, inc);
+ }
+ return date;
+ }
+ }
+
+ function triggerDateSelect(selection, pev, context) {
+ context.emitter.trigger('select', Object.assign(Object.assign({}, buildDateSpanApiWithContext(selection, context)), { jsEvent: pev ? pev.origEvent : null, view: context.viewApi || context.calendarApi.view }));
+ }
+ function triggerDateUnselect(pev, context) {
+ context.emitter.trigger('unselect', {
+ jsEvent: pev ? pev.origEvent : null,
+ view: context.viewApi || context.calendarApi.view,
+ });
+ }
+ function buildDateSpanApiWithContext(dateSpan, context) {
+ let props = {};
+ for (let transform of context.pluginHooks.dateSpanTransforms) {
+ Object.assign(props, transform(dateSpan, context));
+ }
+ Object.assign(props, buildDateSpanApi(dateSpan, context.dateEnv));
+ return props;
+ }
+ // Given an event's allDay status and start date, return what its fallback end date should be.
+ // TODO: rename to computeDefaultEventEnd
+ function getDefaultEventEnd(allDay, marker, context) {
+ let { dateEnv, options } = context;
+ let end = marker;
+ if (allDay) {
+ end = startOfDay(end);
+ end = dateEnv.add(end, options.defaultAllDayEventDuration);
+ }
+ else {
+ end = dateEnv.add(end, options.defaultTimedEventDuration);
+ }
+ return end;
+ }
+
+ // applies the mutation to ALL defs/instances within the event store
+ function applyMutationToEventStore(eventStore, eventConfigBase, mutation, context) {
+ let eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);
+ let dest = createEmptyEventStore();
+ for (let defId in eventStore.defs) {
+ let def = eventStore.defs[defId];
+ dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, context);
+ }
+ for (let instanceId in eventStore.instances) {
+ let instance = eventStore.instances[instanceId];
+ let def = dest.defs[instance.defId]; // important to grab the newly modified def
+ dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, context);
+ }
+ return dest;
+ }
+ function applyMutationToEventDef(eventDef, eventConfig, mutation, context) {
+ let standardProps = mutation.standardProps || {};
+ // if hasEnd has not been specified, guess a good value based on deltas.
+ // if duration will change, there's no way the default duration will persist,
+ // and thus, we need to mark the event as having a real end
+ if (standardProps.hasEnd == null &&
+ eventConfig.durationEditable &&
+ (mutation.startDelta || mutation.endDelta)) {
+ standardProps.hasEnd = true; // TODO: is this mutation okay?
+ }
+ let copy = Object.assign(Object.assign(Object.assign({}, eventDef), standardProps), { ui: Object.assign(Object.assign({}, eventDef.ui), standardProps.ui) });
+ if (mutation.extendedProps) {
+ copy.extendedProps = Object.assign(Object.assign({}, copy.extendedProps), mutation.extendedProps);
+ }
+ for (let applier of context.pluginHooks.eventDefMutationAppliers) {
+ applier(copy, mutation, context);
+ }
+ if (!copy.hasEnd && context.options.forceEventDuration) {
+ copy.hasEnd = true;
+ }
+ return copy;
+ }
+ function applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef
+ eventConfig, mutation, context) {
+ let { dateEnv } = context;
+ let forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;
+ let clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;
+ let copy = Object.assign({}, eventInstance);
+ if (forceAllDay) {
+ copy.range = computeAlignedDayRange(copy.range);
+ }
+ if (mutation.datesDelta && eventConfig.startEditable) {
+ copy.range = {
+ start: dateEnv.add(copy.range.start, mutation.datesDelta),
+ end: dateEnv.add(copy.range.end, mutation.datesDelta),
+ };
+ }
+ if (mutation.startDelta && eventConfig.durationEditable) {
+ copy.range = {
+ start: dateEnv.add(copy.range.start, mutation.startDelta),
+ end: copy.range.end,
+ };
+ }
+ if (mutation.endDelta && eventConfig.durationEditable) {
+ copy.range = {
+ start: copy.range.start,
+ end: dateEnv.add(copy.range.end, mutation.endDelta),
+ };
+ }
+ if (clearEnd) {
+ copy.range = {
+ start: copy.range.start,
+ end: getDefaultEventEnd(eventDef.allDay, copy.range.start, context),
+ };
+ }
+ // in case event was all-day but the supplied deltas were not
+ // better util for this?
+ if (eventDef.allDay) {
+ copy.range = {
+ start: startOfDay(copy.range.start),
+ end: startOfDay(copy.range.end),
+ };
+ }
+ // handle invalid durations
+ if (copy.range.end < copy.range.start) {
+ copy.range.end = getDefaultEventEnd(eventDef.allDay, copy.range.start, context);
+ }
+ return copy;
+ }
+
+ class EventSourceImpl {
+ constructor(context, internalEventSource) {
+ this.context = context;
+ this.internalEventSource = internalEventSource;
+ }
+ remove() {
+ this.context.dispatch({
+ type: 'REMOVE_EVENT_SOURCE',
+ sourceId: this.internalEventSource.sourceId,
+ });
+ }
+ refetch() {
+ this.context.dispatch({
+ type: 'FETCH_EVENT_SOURCES',
+ sourceIds: [this.internalEventSource.sourceId],
+ isRefetch: true,
+ });
+ }
+ get id() {
+ return this.internalEventSource.publicId;
+ }
+ get url() {
+ return this.internalEventSource.meta.url;
+ }
+ get format() {
+ return this.internalEventSource.meta.format; // TODO: bad. not guaranteed
+ }
+ }
+
+ class EventImpl {
+ // instance will be null if expressing a recurring event that has no current instances,
+ // OR if trying to validate an incoming external event that has no dates assigned
+ constructor(context, def, instance) {
+ this._context = context;
+ this._def = def;
+ this._instance = instance || null;
+ }
+ /*
+ TODO: make event struct more responsible for this
+ */
+ setProp(name, val) {
+ if (name in EVENT_DATE_REFINERS) {
+ console.warn('Could not set date-related prop \'name\'. Use one of the date-related methods instead.');
+ // TODO: make proper aliasing system?
+ }
+ else if (name === 'id') {
+ val = EVENT_NON_DATE_REFINERS[name](val);
+ this.mutate({
+ standardProps: { publicId: val }, // hardcoded internal name
+ });
+ }
+ else if (name in EVENT_NON_DATE_REFINERS) {
+ val = EVENT_NON_DATE_REFINERS[name](val);
+ this.mutate({
+ standardProps: { [name]: val },
+ });
+ }
+ else if (name in EVENT_UI_REFINERS) {
+ let ui = EVENT_UI_REFINERS[name](val);
+ if (name === 'color') {
+ ui = { backgroundColor: val, borderColor: val };
+ }
+ else if (name === 'editable') {
+ ui = { startEditable: val, durationEditable: val };
+ }
+ else {
+ ui = { [name]: val };
+ }
+ this.mutate({
+ standardProps: { ui },
+ });
+ }
+ else {
+ console.warn(`Could not set prop '${name}'. Use setExtendedProp instead.`);
+ }
+ }
+ setExtendedProp(name, val) {
+ this.mutate({
+ extendedProps: { [name]: val },
+ });
+ }
+ setStart(startInput, options = {}) {
+ let { dateEnv } = this._context;
+ let start = dateEnv.createMarker(startInput);
+ if (start && this._instance) { // TODO: warning if parsed bad
+ let instanceRange = this._instance.range;
+ let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?
+ if (options.maintainDuration) {
+ this.mutate({ datesDelta: startDelta });
+ }
+ else {
+ this.mutate({ startDelta });
+ }
+ }
+ }
+ setEnd(endInput, options = {}) {
+ let { dateEnv } = this._context;
+ let end;
+ if (endInput != null) {
+ end = dateEnv.createMarker(endInput);
+ if (!end) {
+ return; // TODO: warning if parsed bad
+ }
+ }
+ if (this._instance) {
+ if (end) {
+ let endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);
+ this.mutate({ endDelta });
+ }
+ else {
+ this.mutate({ standardProps: { hasEnd: false } });
+ }
+ }
+ }
+ setDates(startInput, endInput, options = {}) {
+ let { dateEnv } = this._context;
+ let standardProps = { allDay: options.allDay };
+ let start = dateEnv.createMarker(startInput);
+ let end;
+ if (!start) {
+ return; // TODO: warning if parsed bad
+ }
+ if (endInput != null) {
+ end = dateEnv.createMarker(endInput);
+ if (!end) { // TODO: warning if parsed bad
+ return;
+ }
+ }
+ if (this._instance) {
+ let instanceRange = this._instance.range;
+ // when computing the diff for an event being converted to all-day,
+ // compute diff off of the all-day values the way event-mutation does.
+ if (options.allDay === true) {
+ instanceRange = computeAlignedDayRange(instanceRange);
+ }
+ let startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);
+ if (end) {
+ let endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);
+ if (durationsEqual(startDelta, endDelta)) {
+ this.mutate({ datesDelta: startDelta, standardProps });
+ }
+ else {
+ this.mutate({ startDelta, endDelta, standardProps });
+ }
+ }
+ else { // means "clear the end"
+ standardProps.hasEnd = false;
+ this.mutate({ datesDelta: startDelta, standardProps });
+ }
+ }
+ }
+ moveStart(deltaInput) {
+ let delta = createDuration(deltaInput);
+ if (delta) { // TODO: warning if parsed bad
+ this.mutate({ startDelta: delta });
+ }
+ }
+ moveEnd(deltaInput) {
+ let delta = createDuration(deltaInput);
+ if (delta) { // TODO: warning if parsed bad
+ this.mutate({ endDelta: delta });
+ }
+ }
+ moveDates(deltaInput) {
+ let delta = createDuration(deltaInput);
+ if (delta) { // TODO: warning if parsed bad
+ this.mutate({ datesDelta: delta });
+ }
+ }
+ setAllDay(allDay, options = {}) {
+ let standardProps = { allDay };
+ let { maintainDuration } = options;
+ if (maintainDuration == null) {
+ maintainDuration = this._context.options.allDayMaintainDuration;
+ }
+ if (this._def.allDay !== allDay) {
+ standardProps.hasEnd = maintainDuration;
+ }
+ this.mutate({ standardProps });
+ }
+ formatRange(formatInput) {
+ let { dateEnv } = this._context;
+ let instance = this._instance;
+ let formatter = createFormatter(formatInput);
+ if (this._def.hasEnd) {
+ return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {
+ forcedStartTzo: instance.forcedStartTzo,
+ forcedEndTzo: instance.forcedEndTzo,
+ });
+ }
+ return dateEnv.format(instance.range.start, formatter, {
+ forcedTzo: instance.forcedStartTzo,
+ });
+ }
+ mutate(mutation) {
+ let instance = this._instance;
+ if (instance) {
+ let def = this._def;
+ let context = this._context;
+ let { eventStore } = context.getCurrentData();
+ let relevantEvents = getRelevantEvents(eventStore, instance.instanceId);
+ let eventConfigBase = {
+ '': {
+ display: '',
+ startEditable: true,
+ durationEditable: true,
+ constraints: [],
+ overlap: null,
+ allows: [],
+ backgroundColor: '',
+ borderColor: '',
+ textColor: '',
+ classNames: [],
+ },
+ };
+ relevantEvents = applyMutationToEventStore(relevantEvents, eventConfigBase, mutation, context);
+ let oldEvent = new EventImpl(context, def, instance); // snapshot
+ this._def = relevantEvents.defs[def.defId];
+ this._instance = relevantEvents.instances[instance.instanceId];
+ context.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: relevantEvents,
+ });
+ context.emitter.trigger('eventChange', {
+ oldEvent,
+ event: this,
+ relatedEvents: buildEventApis(relevantEvents, context, instance),
+ revert() {
+ context.dispatch({
+ type: 'RESET_EVENTS',
+ eventStore, // the ORIGINAL store
+ });
+ },
+ });
+ }
+ }
+ remove() {
+ let context = this._context;
+ let asStore = eventApiToStore(this);
+ context.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: asStore,
+ });
+ context.emitter.trigger('eventRemove', {
+ event: this,
+ relatedEvents: [],
+ revert() {
+ context.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: asStore,
+ });
+ },
+ });
+ }
+ get source() {
+ let { sourceId } = this._def;
+ if (sourceId) {
+ return new EventSourceImpl(this._context, this._context.getCurrentData().eventSources[sourceId]);
+ }
+ return null;
+ }
+ get start() {
+ return this._instance ?
+ this._context.dateEnv.toDate(this._instance.range.start) :
+ null;
+ }
+ get end() {
+ return (this._instance && this._def.hasEnd) ?
+ this._context.dateEnv.toDate(this._instance.range.end) :
+ null;
+ }
+ get startStr() {
+ let instance = this._instance;
+ if (instance) {
+ return this._context.dateEnv.formatIso(instance.range.start, {
+ omitTime: this._def.allDay,
+ forcedTzo: instance.forcedStartTzo,
+ });
+ }
+ return '';
+ }
+ get endStr() {
+ let instance = this._instance;
+ if (instance && this._def.hasEnd) {
+ return this._context.dateEnv.formatIso(instance.range.end, {
+ omitTime: this._def.allDay,
+ forcedTzo: instance.forcedEndTzo,
+ });
+ }
+ return '';
+ }
+ // computable props that all access the def
+ // TODO: find a TypeScript-compatible way to do this at scale
+ get id() { return this._def.publicId; }
+ get groupId() { return this._def.groupId; }
+ get allDay() { return this._def.allDay; }
+ get title() { return this._def.title; }
+ get url() { return this._def.url; }
+ get display() { return this._def.ui.display || 'auto'; } // bad. just normalize the type earlier
+ get startEditable() { return this._def.ui.startEditable; }
+ get durationEditable() { return this._def.ui.durationEditable; }
+ get constraint() { return this._def.ui.constraints[0] || null; }
+ get overlap() { return this._def.ui.overlap; }
+ get allow() { return this._def.ui.allows[0] || null; }
+ get backgroundColor() { return this._def.ui.backgroundColor; }
+ get borderColor() { return this._def.ui.borderColor; }
+ get textColor() { return this._def.ui.textColor; }
+ // NOTE: user can't modify these because Object.freeze was called in event-def parsing
+ get classNames() { return this._def.ui.classNames; }
+ get extendedProps() { return this._def.extendedProps; }
+ toPlainObject(settings = {}) {
+ let def = this._def;
+ let { ui } = def;
+ let { startStr, endStr } = this;
+ let res = {};
+ if (def.title) {
+ res.title = def.title;
+ }
+ if (startStr) {
+ res.start = startStr;
+ }
+ if (endStr) {
+ res.end = endStr;
+ }
+ if (def.publicId) {
+ res.id = def.publicId;
+ }
+ if (def.groupId) {
+ res.groupId = def.groupId;
+ }
+ if (def.url) {
+ res.url = def.url;
+ }
+ if (ui.display && ui.display !== 'auto') {
+ res.display = ui.display;
+ }
+ // TODO: what about recurring-event properties???
+ // TODO: include startEditable/durationEditable/constraint/overlap/allow
+ if (settings.collapseColor && ui.backgroundColor && ui.backgroundColor === ui.borderColor) {
+ res.color = ui.backgroundColor;
+ }
+ else {
+ if (ui.backgroundColor) {
+ res.backgroundColor = ui.backgroundColor;
+ }
+ if (ui.borderColor) {
+ res.borderColor = ui.borderColor;
+ }
+ }
+ if (ui.textColor) {
+ res.textColor = ui.textColor;
+ }
+ if (ui.classNames.length) {
+ res.classNames = ui.classNames;
+ }
+ if (Object.keys(def.extendedProps).length) {
+ if (settings.collapseExtendedProps) {
+ Object.assign(res, def.extendedProps);
+ }
+ else {
+ res.extendedProps = def.extendedProps;
+ }
+ }
+ return res;
+ }
+ toJSON() {
+ return this.toPlainObject();
+ }
+ }
+ function eventApiToStore(eventApi) {
+ let def = eventApi._def;
+ let instance = eventApi._instance;
+ return {
+ defs: { [def.defId]: def },
+ instances: instance
+ ? { [instance.instanceId]: instance }
+ : {},
+ };
+ }
+ function buildEventApis(eventStore, context, excludeInstance) {
+ let { defs, instances } = eventStore;
+ let eventApis = [];
+ let excludeInstanceId = excludeInstance ? excludeInstance.instanceId : '';
+ for (let id in instances) {
+ let instance = instances[id];
+ let def = defs[instance.defId];
+ if (instance.instanceId !== excludeInstanceId) {
+ eventApis.push(new EventImpl(context, def, instance));
+ }
+ }
+ return eventApis;
+ }
+
+ /*
+ Specifying nextDayThreshold signals that all-day ranges should be sliced.
+ */
+ function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {
+ let inverseBgByGroupId = {};
+ let inverseBgByDefId = {};
+ let defByGroupId = {};
+ let bgRanges = [];
+ let fgRanges = [];
+ let eventUis = compileEventUis(eventStore.defs, eventUiBases);
+ for (let defId in eventStore.defs) {
+ let def = eventStore.defs[defId];
+ let ui = eventUis[def.defId];
+ if (ui.display === 'inverse-background') {
+ if (def.groupId) {
+ inverseBgByGroupId[def.groupId] = [];
+ if (!defByGroupId[def.groupId]) {
+ defByGroupId[def.groupId] = def;
+ }
+ }
+ else {
+ inverseBgByDefId[defId] = [];
+ }
+ }
+ }
+ for (let instanceId in eventStore.instances) {
+ let instance = eventStore.instances[instanceId];
+ let def = eventStore.defs[instance.defId];
+ let ui = eventUis[def.defId];
+ let origRange = instance.range;
+ let normalRange = (!def.allDay && nextDayThreshold) ?
+ computeVisibleDayRange(origRange, nextDayThreshold) :
+ origRange;
+ let slicedRange = intersectRanges(normalRange, framingRange);
+ if (slicedRange) {
+ if (ui.display === 'inverse-background') {
+ if (def.groupId) {
+ inverseBgByGroupId[def.groupId].push(slicedRange);
+ }
+ else {
+ inverseBgByDefId[instance.defId].push(slicedRange);
+ }
+ }
+ else if (ui.display !== 'none') {
+ (ui.display === 'background' ? bgRanges : fgRanges).push({
+ def,
+ ui,
+ instance,
+ range: slicedRange,
+ isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),
+ isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf(),
+ });
+ }
+ }
+ }
+ for (let groupId in inverseBgByGroupId) { // BY GROUP
+ let ranges = inverseBgByGroupId[groupId];
+ let invertedRanges = invertRanges(ranges, framingRange);
+ for (let invertedRange of invertedRanges) {
+ let def = defByGroupId[groupId];
+ let ui = eventUis[def.defId];
+ bgRanges.push({
+ def,
+ ui,
+ instance: null,
+ range: invertedRange,
+ isStart: false,
+ isEnd: false,
+ });
+ }
+ }
+ for (let defId in inverseBgByDefId) {
+ let ranges = inverseBgByDefId[defId];
+ let invertedRanges = invertRanges(ranges, framingRange);
+ for (let invertedRange of invertedRanges) {
+ bgRanges.push({
+ def: eventStore.defs[defId],
+ ui: eventUis[defId],
+ instance: null,
+ range: invertedRange,
+ isStart: false,
+ isEnd: false,
+ });
+ }
+ }
+ return { bg: bgRanges, fg: fgRanges };
+ }
+ function hasBgRendering(def) {
+ return def.ui.display === 'background' || def.ui.display === 'inverse-background';
+ }
+ function setElSeg(el, seg) {
+ el.fcSeg = seg;
+ }
+ function getElSeg(el) {
+ return el.fcSeg ||
+ el.parentNode.fcSeg || // for the harness
+ null;
+ }
+ // event ui computation
+ function compileEventUis(eventDefs, eventUiBases) {
+ return mapHash(eventDefs, (eventDef) => compileEventUi(eventDef, eventUiBases));
+ }
+ function compileEventUi(eventDef, eventUiBases) {
+ let uis = [];
+ if (eventUiBases['']) {
+ uis.push(eventUiBases['']);
+ }
+ if (eventUiBases[eventDef.defId]) {
+ uis.push(eventUiBases[eventDef.defId]);
+ }
+ uis.push(eventDef.ui);
+ return combineEventUis(uis);
+ }
+ function sortEventSegs(segs, eventOrderSpecs) {
+ let objs = segs.map(buildSegCompareObj);
+ objs.sort((obj0, obj1) => compareByFieldSpecs(obj0, obj1, eventOrderSpecs));
+ return objs.map((c) => c._seg);
+ }
+ // returns a object with all primitive props that can be compared
+ function buildSegCompareObj(seg) {
+ let { eventRange } = seg;
+ let eventDef = eventRange.def;
+ let range = eventRange.instance ? eventRange.instance.range : eventRange.range;
+ let start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events
+ let end = range.end ? range.end.valueOf() : 0; // "
+ return Object.assign(Object.assign(Object.assign({}, eventDef.extendedProps), eventDef), { id: eventDef.publicId, start,
+ end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg });
+ }
+ function computeSegDraggable(seg, context) {
+ let { pluginHooks } = context;
+ let transformers = pluginHooks.isDraggableTransformers;
+ let { def, ui } = seg.eventRange;
+ let val = ui.startEditable;
+ for (let transformer of transformers) {
+ val = transformer(val, def, ui, context);
+ }
+ return val;
+ }
+ function computeSegStartResizable(seg, context) {
+ return seg.isStart && seg.eventRange.ui.durationEditable && context.options.eventResizableFromStart;
+ }
+ function computeSegEndResizable(seg, context) {
+ return seg.isEnd && seg.eventRange.ui.durationEditable;
+ }
+ function buildSegTimeText(seg, timeFormat, context, defaultDisplayEventTime, // defaults to true
+ defaultDisplayEventEnd, // defaults to true
+ startOverride, endOverride) {
+ let { dateEnv, options } = context;
+ let { displayEventTime, displayEventEnd } = options;
+ let eventDef = seg.eventRange.def;
+ let eventInstance = seg.eventRange.instance;
+ if (displayEventTime == null) {
+ displayEventTime = defaultDisplayEventTime !== false;
+ }
+ if (displayEventEnd == null) {
+ displayEventEnd = defaultDisplayEventEnd !== false;
+ }
+ let wholeEventStart = eventInstance.range.start;
+ let wholeEventEnd = eventInstance.range.end;
+ let segStart = startOverride || seg.start || seg.eventRange.range.start;
+ let segEnd = endOverride || seg.end || seg.eventRange.range.end;
+ let isStartDay = startOfDay(wholeEventStart).valueOf() === startOfDay(segStart).valueOf();
+ let isEndDay = startOfDay(addMs(wholeEventEnd, -1)).valueOf() === startOfDay(addMs(segEnd, -1)).valueOf();
+ if (displayEventTime && !eventDef.allDay && (isStartDay || isEndDay)) {
+ segStart = isStartDay ? wholeEventStart : segStart;
+ segEnd = isEndDay ? wholeEventEnd : segEnd;
+ if (displayEventEnd && eventDef.hasEnd) {
+ return dateEnv.formatRange(segStart, segEnd, timeFormat, {
+ forcedStartTzo: startOverride ? null : eventInstance.forcedStartTzo,
+ forcedEndTzo: endOverride ? null : eventInstance.forcedEndTzo,
+ });
+ }
+ return dateEnv.format(segStart, timeFormat, {
+ forcedTzo: startOverride ? null : eventInstance.forcedStartTzo, // nooooo, same
+ });
+ }
+ return '';
+ }
+ function getSegMeta(seg, todayRange, nowDate) {
+ let segRange = seg.eventRange.range;
+ return {
+ isPast: segRange.end < (nowDate || todayRange.start),
+ isFuture: segRange.start >= (nowDate || todayRange.end),
+ isToday: todayRange && rangeContainsMarker(todayRange, segRange.start),
+ };
+ }
+ function getEventClassNames(props) {
+ let classNames = ['fc-event'];
+ if (props.isMirror) {
+ classNames.push('fc-event-mirror');
+ }
+ if (props.isDraggable) {
+ classNames.push('fc-event-draggable');
+ }
+ if (props.isStartResizable || props.isEndResizable) {
+ classNames.push('fc-event-resizable');
+ }
+ if (props.isDragging) {
+ classNames.push('fc-event-dragging');
+ }
+ if (props.isResizing) {
+ classNames.push('fc-event-resizing');
+ }
+ if (props.isSelected) {
+ classNames.push('fc-event-selected');
+ }
+ if (props.isStart) {
+ classNames.push('fc-event-start');
+ }
+ if (props.isEnd) {
+ classNames.push('fc-event-end');
+ }
+ if (props.isPast) {
+ classNames.push('fc-event-past');
+ }
+ if (props.isToday) {
+ classNames.push('fc-event-today');
+ }
+ if (props.isFuture) {
+ classNames.push('fc-event-future');
+ }
+ return classNames;
+ }
+ function buildEventRangeKey(eventRange) {
+ return eventRange.instance
+ ? eventRange.instance.instanceId
+ : `${eventRange.def.defId}:${eventRange.range.start.toISOString()}`;
+ // inverse-background events don't have specific instances. TODO: better solution
+ }
+ function getSegAnchorAttrs(seg, context) {
+ let { def, instance } = seg.eventRange;
+ let { url } = def;
+ if (url) {
+ return { href: url };
+ }
+ let { emitter, options } = context;
+ let { eventInteractive } = options;
+ if (eventInteractive == null) {
+ eventInteractive = def.interactive;
+ if (eventInteractive == null) {
+ eventInteractive = Boolean(emitter.hasHandlers('eventClick'));
+ }
+ }
+ // mock what happens in EventClicking
+ if (eventInteractive) {
+ // only attach keyboard-related handlers because click handler is already done in EventClicking
+ return createAriaKeyboardAttrs((ev) => {
+ emitter.trigger('eventClick', {
+ el: ev.target,
+ event: new EventImpl(context, def, instance),
+ jsEvent: ev,
+ view: context.viewApi,
+ });
+ });
+ }
+ return {};
+ }
+
+ const STANDARD_PROPS = {
+ start: identity,
+ end: identity,
+ allDay: Boolean,
+ };
+ function parseDateSpan(raw, dateEnv, defaultDuration) {
+ let span = parseOpenDateSpan(raw, dateEnv);
+ let { range } = span;
+ if (!range.start) {
+ return null;
+ }
+ if (!range.end) {
+ if (defaultDuration == null) {
+ return null;
+ }
+ range.end = dateEnv.add(range.start, defaultDuration);
+ }
+ return span;
+ }
+ /*
+ TODO: somehow combine with parseRange?
+ Will return null if the start/end props were present but parsed invalidly.
+ */
+ function parseOpenDateSpan(raw, dateEnv) {
+ let { refined: standardProps, extra } = refineProps(raw, STANDARD_PROPS);
+ let startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;
+ let endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;
+ let { allDay } = standardProps;
+ if (allDay == null) {
+ allDay = (startMeta && startMeta.isTimeUnspecified) &&
+ (!endMeta || endMeta.isTimeUnspecified);
+ }
+ return Object.assign({ range: {
+ start: startMeta ? startMeta.marker : null,
+ end: endMeta ? endMeta.marker : null,
+ }, allDay }, extra);
+ }
+ function isDateSpansEqual(span0, span1) {
+ return rangesEqual(span0.range, span1.range) &&
+ span0.allDay === span1.allDay &&
+ isSpanPropsEqual(span0, span1);
+ }
+ // the NON-DATE-RELATED props
+ function isSpanPropsEqual(span0, span1) {
+ for (let propName in span1) {
+ if (propName !== 'range' && propName !== 'allDay') {
+ if (span0[propName] !== span1[propName]) {
+ return false;
+ }
+ }
+ }
+ // are there any props that span0 has that span1 DOESN'T have?
+ // both have range/allDay, so no need to special-case.
+ for (let propName in span0) {
+ if (!(propName in span1)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function buildDateSpanApi(span, dateEnv) {
+ return Object.assign(Object.assign({}, buildRangeApi(span.range, dateEnv, span.allDay)), { allDay: span.allDay });
+ }
+ function buildRangeApiWithTimeZone(range, dateEnv, omitTime) {
+ return Object.assign(Object.assign({}, buildRangeApi(range, dateEnv, omitTime)), { timeZone: dateEnv.timeZone });
+ }
+ function buildRangeApi(range, dateEnv, omitTime) {
+ return {
+ start: dateEnv.toDate(range.start),
+ end: dateEnv.toDate(range.end),
+ startStr: dateEnv.formatIso(range.start, { omitTime }),
+ endStr: dateEnv.formatIso(range.end, { omitTime }),
+ };
+ }
+ function fabricateEventRange(dateSpan, eventUiBases, context) {
+ let res = refineEventDef({ editable: false }, context);
+ let def = parseEventDef(res.refined, res.extra, '', // sourceId
+ dateSpan.allDay, true, // hasEnd
+ context);
+ return {
+ def,
+ ui: compileEventUi(def, eventUiBases),
+ instance: createEventInstance(def.defId, dateSpan.range),
+ range: dateSpan.range,
+ isStart: true,
+ isEnd: true,
+ };
+ }
+
+ let calendarSystemClassMap = {};
+ function registerCalendarSystem(name, theClass) {
+ calendarSystemClassMap[name] = theClass;
+ }
+ function createCalendarSystem(name) {
+ return new calendarSystemClassMap[name]();
+ }
+ class GregorianCalendarSystem {
+ getMarkerYear(d) {
+ return d.getUTCFullYear();
+ }
+ getMarkerMonth(d) {
+ return d.getUTCMonth();
+ }
+ getMarkerDay(d) {
+ return d.getUTCDate();
+ }
+ arrayToMarker(arr) {
+ return arrayToUtcDate(arr);
+ }
+ markerToArray(marker) {
+ return dateToUtcArray(marker);
+ }
+ }
+ registerCalendarSystem('gregory', GregorianCalendarSystem);
+
+ const ISO_RE = /^\s*(\d{4})(-?(\d{2})(-?(\d{2})([T ](\d{2}):?(\d{2})(:?(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;
+ function parse(str) {
+ let m = ISO_RE.exec(str);
+ if (m) {
+ let marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number(`0.${m[12]}`) * 1000 : 0));
+ if (isValidDate(marker)) {
+ let timeZoneOffset = null;
+ if (m[13]) {
+ timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +
+ Number(m[18] || 0));
+ }
+ return {
+ marker,
+ isTimeUnspecified: !m[6],
+ timeZoneOffset,
+ };
+ }
+ }
+ return null;
+ }
+
+ class DateEnv {
+ constructor(settings) {
+ let timeZone = this.timeZone = settings.timeZone;
+ let isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';
+ if (settings.namedTimeZoneImpl && isNamedTimeZone) {
+ this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);
+ }
+ this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);
+ this.calendarSystem = createCalendarSystem(settings.calendarSystem);
+ this.locale = settings.locale;
+ this.weekDow = settings.locale.week.dow;
+ this.weekDoy = settings.locale.week.doy;
+ if (settings.weekNumberCalculation === 'ISO') {
+ this.weekDow = 1;
+ this.weekDoy = 4;
+ }
+ if (typeof settings.firstDay === 'number') {
+ this.weekDow = settings.firstDay;
+ }
+ if (typeof settings.weekNumberCalculation === 'function') {
+ this.weekNumberFunc = settings.weekNumberCalculation;
+ }
+ this.weekText = settings.weekText != null ? settings.weekText : settings.locale.options.weekText;
+ this.weekTextLong = (settings.weekTextLong != null ? settings.weekTextLong : settings.locale.options.weekTextLong) || this.weekText;
+ this.cmdFormatter = settings.cmdFormatter;
+ this.defaultSeparator = settings.defaultSeparator;
+ }
+ // Creating / Parsing
+ createMarker(input) {
+ let meta = this.createMarkerMeta(input);
+ if (meta === null) {
+ return null;
+ }
+ return meta.marker;
+ }
+ createNowMarker() {
+ if (this.canComputeOffset) {
+ return this.timestampToMarker(new Date().valueOf());
+ }
+ // if we can't compute the current date val for a timezone,
+ // better to give the current local date vals than UTC
+ return arrayToUtcDate(dateToLocalArray(new Date()));
+ }
+ createMarkerMeta(input) {
+ if (typeof input === 'string') {
+ return this.parse(input);
+ }
+ let marker = null;
+ if (typeof input === 'number') {
+ marker = this.timestampToMarker(input);
+ }
+ else if (input instanceof Date) {
+ input = input.valueOf();
+ if (!isNaN(input)) {
+ marker = this.timestampToMarker(input);
+ }
+ }
+ else if (Array.isArray(input)) {
+ marker = arrayToUtcDate(input);
+ }
+ if (marker === null || !isValidDate(marker)) {
+ return null;
+ }
+ return { marker, isTimeUnspecified: false, forcedTzo: null };
+ }
+ parse(s) {
+ let parts = parse(s);
+ if (parts === null) {
+ return null;
+ }
+ let { marker } = parts;
+ let forcedTzo = null;
+ if (parts.timeZoneOffset !== null) {
+ if (this.canComputeOffset) {
+ marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);
+ }
+ else {
+ forcedTzo = parts.timeZoneOffset;
+ }
+ }
+ return { marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo };
+ }
+ // Accessors
+ getYear(marker) {
+ return this.calendarSystem.getMarkerYear(marker);
+ }
+ getMonth(marker) {
+ return this.calendarSystem.getMarkerMonth(marker);
+ }
+ // Adding / Subtracting
+ add(marker, dur) {
+ let a = this.calendarSystem.markerToArray(marker);
+ a[0] += dur.years;
+ a[1] += dur.months;
+ a[2] += dur.days;
+ a[6] += dur.milliseconds;
+ return this.calendarSystem.arrayToMarker(a);
+ }
+ subtract(marker, dur) {
+ let a = this.calendarSystem.markerToArray(marker);
+ a[0] -= dur.years;
+ a[1] -= dur.months;
+ a[2] -= dur.days;
+ a[6] -= dur.milliseconds;
+ return this.calendarSystem.arrayToMarker(a);
+ }
+ addYears(marker, n) {
+ let a = this.calendarSystem.markerToArray(marker);
+ a[0] += n;
+ return this.calendarSystem.arrayToMarker(a);
+ }
+ addMonths(marker, n) {
+ let a = this.calendarSystem.markerToArray(marker);
+ a[1] += n;
+ return this.calendarSystem.arrayToMarker(a);
+ }
+ // Diffing Whole Units
+ diffWholeYears(m0, m1) {
+ let { calendarSystem } = this;
+ if (timeAsMs(m0) === timeAsMs(m1) &&
+ calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&
+ calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {
+ return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);
+ }
+ return null;
+ }
+ diffWholeMonths(m0, m1) {
+ let { calendarSystem } = this;
+ if (timeAsMs(m0) === timeAsMs(m1) &&
+ calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {
+ return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +
+ (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;
+ }
+ return null;
+ }
+ // Range / Duration
+ greatestWholeUnit(m0, m1) {
+ let n = this.diffWholeYears(m0, m1);
+ if (n !== null) {
+ return { unit: 'year', value: n };
+ }
+ n = this.diffWholeMonths(m0, m1);
+ if (n !== null) {
+ return { unit: 'month', value: n };
+ }
+ n = diffWholeWeeks(m0, m1);
+ if (n !== null) {
+ return { unit: 'week', value: n };
+ }
+ n = diffWholeDays(m0, m1);
+ if (n !== null) {
+ return { unit: 'day', value: n };
+ }
+ n = diffHours(m0, m1);
+ if (isInt(n)) {
+ return { unit: 'hour', value: n };
+ }
+ n = diffMinutes(m0, m1);
+ if (isInt(n)) {
+ return { unit: 'minute', value: n };
+ }
+ n = diffSeconds(m0, m1);
+ if (isInt(n)) {
+ return { unit: 'second', value: n };
+ }
+ return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() };
+ }
+ countDurationsBetween(m0, m1, d) {
+ // TODO: can use greatestWholeUnit
+ let diff;
+ if (d.years) {
+ diff = this.diffWholeYears(m0, m1);
+ if (diff !== null) {
+ return diff / asRoughYears(d);
+ }
+ }
+ if (d.months) {
+ diff = this.diffWholeMonths(m0, m1);
+ if (diff !== null) {
+ return diff / asRoughMonths(d);
+ }
+ }
+ if (d.days) {
+ diff = diffWholeDays(m0, m1);
+ if (diff !== null) {
+ return diff / asRoughDays(d);
+ }
+ }
+ return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);
+ }
+ // Start-Of
+ // these DON'T return zoned-dates. only UTC start-of dates
+ startOf(m, unit) {
+ if (unit === 'year') {
+ return this.startOfYear(m);
+ }
+ if (unit === 'month') {
+ return this.startOfMonth(m);
+ }
+ if (unit === 'week') {
+ return this.startOfWeek(m);
+ }
+ if (unit === 'day') {
+ return startOfDay(m);
+ }
+ if (unit === 'hour') {
+ return startOfHour(m);
+ }
+ if (unit === 'minute') {
+ return startOfMinute(m);
+ }
+ if (unit === 'second') {
+ return startOfSecond(m);
+ }
+ return null;
+ }
+ startOfYear(m) {
+ return this.calendarSystem.arrayToMarker([
+ this.calendarSystem.getMarkerYear(m),
+ ]);
+ }
+ startOfMonth(m) {
+ return this.calendarSystem.arrayToMarker([
+ this.calendarSystem.getMarkerYear(m),
+ this.calendarSystem.getMarkerMonth(m),
+ ]);
+ }
+ startOfWeek(m) {
+ return this.calendarSystem.arrayToMarker([
+ this.calendarSystem.getMarkerYear(m),
+ this.calendarSystem.getMarkerMonth(m),
+ m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7),
+ ]);
+ }
+ // Week Number
+ computeWeekNumber(marker) {
+ if (this.weekNumberFunc) {
+ return this.weekNumberFunc(this.toDate(marker));
+ }
+ return weekOfYear(marker, this.weekDow, this.weekDoy);
+ }
+ // TODO: choke on timeZoneName: long
+ format(marker, formatter, dateOptions = {}) {
+ return formatter.format({
+ marker,
+ timeZoneOffset: dateOptions.forcedTzo != null ?
+ dateOptions.forcedTzo :
+ this.offsetForMarker(marker),
+ }, this);
+ }
+ formatRange(start, end, formatter, dateOptions = {}) {
+ if (dateOptions.isEndExclusive) {
+ end = addMs(end, -1);
+ }
+ return formatter.formatRange({
+ marker: start,
+ timeZoneOffset: dateOptions.forcedStartTzo != null ?
+ dateOptions.forcedStartTzo :
+ this.offsetForMarker(start),
+ }, {
+ marker: end,
+ timeZoneOffset: dateOptions.forcedEndTzo != null ?
+ dateOptions.forcedEndTzo :
+ this.offsetForMarker(end),
+ }, this, dateOptions.defaultSeparator);
+ }
+ /*
+ DUMB: the omitTime arg is dumb. if we omit the time, we want to omit the timezone offset. and if we do that,
+ might as well use buildIsoString or some other util directly
+ */
+ formatIso(marker, extraOptions = {}) {
+ let timeZoneOffset = null;
+ if (!extraOptions.omitTimeZoneOffset) {
+ if (extraOptions.forcedTzo != null) {
+ timeZoneOffset = extraOptions.forcedTzo;
+ }
+ else {
+ timeZoneOffset = this.offsetForMarker(marker);
+ }
+ }
+ return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);
+ }
+ // TimeZone
+ timestampToMarker(ms) {
+ if (this.timeZone === 'local') {
+ return arrayToUtcDate(dateToLocalArray(new Date(ms)));
+ }
+ if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {
+ return new Date(ms);
+ }
+ return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));
+ }
+ offsetForMarker(m) {
+ if (this.timeZone === 'local') {
+ return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert "inverse" offset to "normal" offset
+ }
+ if (this.timeZone === 'UTC') {
+ return 0;
+ }
+ if (this.namedTimeZoneImpl) {
+ return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));
+ }
+ return null;
+ }
+ // Conversion
+ toDate(m, forcedTzo) {
+ if (this.timeZone === 'local') {
+ return arrayToLocalDate(dateToUtcArray(m));
+ }
+ if (this.timeZone === 'UTC') {
+ return new Date(m.valueOf()); // make sure it's a copy
+ }
+ if (!this.namedTimeZoneImpl) {
+ return new Date(m.valueOf() - (forcedTzo || 0));
+ }
+ return new Date(m.valueOf() -
+ this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60);
+ }
+ }
+
+ class NamedTimeZoneImpl {
+ constructor(timeZoneName) {
+ this.timeZoneName = timeZoneName;
+ }
+ }
+
+ class SegHierarchy {
+ constructor() {
+ // settings
+ this.strictOrder = false;
+ this.allowReslicing = false;
+ this.maxCoord = -1; // -1 means no max
+ this.maxStackCnt = -1; // -1 means no max
+ this.levelCoords = []; // ordered
+ this.entriesByLevel = []; // parallel with levelCoords
+ this.stackCnts = {}; // TODO: use better technique!?
+ }
+ addSegs(inputs) {
+ let hiddenEntries = [];
+ for (let input of inputs) {
+ this.insertEntry(input, hiddenEntries);
+ }
+ return hiddenEntries;
+ }
+ insertEntry(entry, hiddenEntries) {
+ let insertion = this.findInsertion(entry);
+ if (this.isInsertionValid(insertion, entry)) {
+ this.insertEntryAt(entry, insertion);
+ return 1;
+ }
+ return this.handleInvalidInsertion(insertion, entry, hiddenEntries);
+ }
+ isInsertionValid(insertion, entry) {
+ return (this.maxCoord === -1 || insertion.levelCoord + entry.thickness <= this.maxCoord) &&
+ (this.maxStackCnt === -1 || insertion.stackCnt < this.maxStackCnt);
+ }
+ // returns number of new entries inserted
+ handleInvalidInsertion(insertion, entry, hiddenEntries) {
+ if (this.allowReslicing && insertion.touchingEntry) {
+ return this.splitEntry(entry, insertion.touchingEntry, hiddenEntries);
+ }
+ hiddenEntries.push(entry);
+ return 0;
+ }
+ splitEntry(entry, barrier, hiddenEntries) {
+ let partCnt = 0;
+ let splitHiddenEntries = [];
+ let entrySpan = entry.span;
+ let barrierSpan = barrier.span;
+ if (entrySpan.start < barrierSpan.start) {
+ partCnt += this.insertEntry({
+ index: entry.index,
+ thickness: entry.thickness,
+ span: { start: entrySpan.start, end: barrierSpan.start },
+ }, splitHiddenEntries);
+ }
+ if (entrySpan.end > barrierSpan.end) {
+ partCnt += this.insertEntry({
+ index: entry.index,
+ thickness: entry.thickness,
+ span: { start: barrierSpan.end, end: entrySpan.end },
+ }, splitHiddenEntries);
+ }
+ if (partCnt) {
+ hiddenEntries.push({
+ index: entry.index,
+ thickness: entry.thickness,
+ span: intersectSpans(barrierSpan, entrySpan), // guaranteed to intersect
+ }, ...splitHiddenEntries);
+ return partCnt;
+ }
+ hiddenEntries.push(entry);
+ return 0;
+ }
+ insertEntryAt(entry, insertion) {
+ let { entriesByLevel, levelCoords } = this;
+ if (insertion.lateral === -1) {
+ // create a new level
+ insertAt(levelCoords, insertion.level, insertion.levelCoord);
+ insertAt(entriesByLevel, insertion.level, [entry]);
+ }
+ else {
+ // insert into existing level
+ insertAt(entriesByLevel[insertion.level], insertion.lateral, entry);
+ }
+ this.stackCnts[buildEntryKey(entry)] = insertion.stackCnt;
+ }
+ findInsertion(newEntry) {
+ let { levelCoords, entriesByLevel, strictOrder, stackCnts } = this;
+ let levelCnt = levelCoords.length;
+ let candidateCoord = 0;
+ let touchingLevel = -1;
+ let touchingLateral = -1;
+ let touchingEntry = null;
+ let stackCnt = 0;
+ for (let trackingLevel = 0; trackingLevel < levelCnt; trackingLevel += 1) {
+ let trackingCoord = levelCoords[trackingLevel];
+ // if the current level is past the placed entry, we have found a good empty space and can stop.
+ // if strictOrder, keep finding more lateral intersections.
+ if (!strictOrder && trackingCoord >= candidateCoord + newEntry.thickness) {
+ break;
+ }
+ let trackingEntries = entriesByLevel[trackingLevel];
+ let trackingEntry;
+ let searchRes = binarySearch(trackingEntries, newEntry.span.start, getEntrySpanEnd); // find first entry after newEntry's end
+ let lateralIndex = searchRes[0] + searchRes[1]; // if exact match (which doesn't collide), go to next one
+ while ( // loop through entries that horizontally intersect
+ (trackingEntry = trackingEntries[lateralIndex]) && // but not past the whole entry list
+ trackingEntry.span.start < newEntry.span.end // and not entirely past newEntry
+ ) {
+ let trackingEntryBottom = trackingCoord + trackingEntry.thickness;
+ // intersects into the top of the candidate?
+ if (trackingEntryBottom > candidateCoord) {
+ candidateCoord = trackingEntryBottom;
+ touchingEntry = trackingEntry;
+ touchingLevel = trackingLevel;
+ touchingLateral = lateralIndex;
+ }
+ // butts up against top of candidate? (will happen if just intersected as well)
+ if (trackingEntryBottom === candidateCoord) {
+ // accumulate the highest possible stackCnt of the trackingEntries that butt up
+ stackCnt = Math.max(stackCnt, stackCnts[buildEntryKey(trackingEntry)] + 1);
+ }
+ lateralIndex += 1;
+ }
+ }
+ // the destination level will be after touchingEntry's level. find it
+ let destLevel = 0;
+ if (touchingEntry) {
+ destLevel = touchingLevel + 1;
+ while (destLevel < levelCnt && levelCoords[destLevel] < candidateCoord) {
+ destLevel += 1;
+ }
+ }
+ // if adding to an existing level, find where to insert
+ let destLateral = -1;
+ if (destLevel < levelCnt && levelCoords[destLevel] === candidateCoord) {
+ destLateral = binarySearch(entriesByLevel[destLevel], newEntry.span.end, getEntrySpanEnd)[0];
+ }
+ return {
+ touchingLevel,
+ touchingLateral,
+ touchingEntry,
+ stackCnt,
+ levelCoord: candidateCoord,
+ level: destLevel,
+ lateral: destLateral,
+ };
+ }
+ // sorted by levelCoord (lowest to highest)
+ toRects() {
+ let { entriesByLevel, levelCoords } = this;
+ let levelCnt = entriesByLevel.length;
+ let rects = [];
+ for (let level = 0; level < levelCnt; level += 1) {
+ let entries = entriesByLevel[level];
+ let levelCoord = levelCoords[level];
+ for (let entry of entries) {
+ rects.push(Object.assign(Object.assign({}, entry), { levelCoord }));
+ }
+ }
+ return rects;
+ }
+ }
+ function getEntrySpanEnd(entry) {
+ return entry.span.end;
+ }
+ function buildEntryKey(entry) {
+ return entry.index + ':' + entry.span.start;
+ }
+ // returns groups with entries sorted by input order
+ function groupIntersectingEntries(entries) {
+ let merges = [];
+ for (let entry of entries) {
+ let filteredMerges = [];
+ let hungryMerge = {
+ span: entry.span,
+ entries: [entry],
+ };
+ for (let merge of merges) {
+ if (intersectSpans(merge.span, hungryMerge.span)) {
+ hungryMerge = {
+ entries: merge.entries.concat(hungryMerge.entries),
+ span: joinSpans(merge.span, hungryMerge.span),
+ };
+ }
+ else {
+ filteredMerges.push(merge);
+ }
+ }
+ filteredMerges.push(hungryMerge);
+ merges = filteredMerges;
+ }
+ return merges;
+ }
+ function joinSpans(span0, span1) {
+ return {
+ start: Math.min(span0.start, span1.start),
+ end: Math.max(span0.end, span1.end),
+ };
+ }
+ function intersectSpans(span0, span1) {
+ let start = Math.max(span0.start, span1.start);
+ let end = Math.min(span0.end, span1.end);
+ if (start < end) {
+ return { start, end };
+ }
+ return null;
+ }
+ // general util
+ // ---------------------------------------------------------------------------------------------------------------------
+ function insertAt(arr, index, item) {
+ arr.splice(index, 0, item);
+ }
+ function binarySearch(a, searchVal, getItemVal) {
+ let startIndex = 0;
+ let endIndex = a.length; // exclusive
+ if (!endIndex || searchVal < getItemVal(a[startIndex])) { // no items OR before first item
+ return [0, 0];
+ }
+ if (searchVal > getItemVal(a[endIndex - 1])) { // after last item
+ return [endIndex, 0];
+ }
+ while (startIndex < endIndex) {
+ let middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2);
+ let middleVal = getItemVal(a[middleIndex]);
+ if (searchVal < middleVal) {
+ endIndex = middleIndex;
+ }
+ else if (searchVal > middleVal) {
+ startIndex = middleIndex + 1;
+ }
+ else { // equal!
+ return [middleIndex, 1];
+ }
+ }
+ return [startIndex, 0];
+ }
+
+ class Interaction {
+ constructor(settings) {
+ this.component = settings.component;
+ this.isHitComboAllowed = settings.isHitComboAllowed || null;
+ }
+ destroy() {
+ }
+ }
+ function parseInteractionSettings(component, input) {
+ return {
+ component,
+ el: input.el,
+ useEventCenter: input.useEventCenter != null ? input.useEventCenter : true,
+ isHitComboAllowed: input.isHitComboAllowed || null,
+ };
+ }
+ function interactionSettingsToStore(settings) {
+ return {
+ [settings.component.uid]: settings,
+ };
+ }
+ // global state
+ const interactionSettingsStore = {};
+
+ /*
+ An abstraction for a dragging interaction originating on an event.
+ Does higher-level things than PointerDragger, such as possibly:
+ - a "mirror" that moves with the pointer
+ - a minimum number of pixels or other criteria for a true drag to begin
+
+ subclasses must emit:
+ - pointerdown
+ - dragstart
+ - dragmove
+ - pointerup
+ - dragend
+ */
+ class ElementDragging {
+ constructor(el, selector) {
+ this.emitter = new Emitter();
+ }
+ destroy() {
+ }
+ setMirrorIsVisible(bool) {
+ // optional if subclass doesn't want to support a mirror
+ }
+ setMirrorNeedsRevert(bool) {
+ // optional if subclass doesn't want to support a mirror
+ }
+ setAutoScrollEnabled(bool) {
+ // optional
+ }
+ }
+
+ // TODO: get rid of this in favor of options system,
+ // tho it's really easy to access this globally rather than pass thru options.
+ const config = {};
+
+ /*
+ Information about what will happen when an external element is dragged-and-dropped
+ onto a calendar. Contains information for creating an event.
+ */
+ const DRAG_META_REFINERS = {
+ startTime: createDuration,
+ duration: createDuration,
+ create: Boolean,
+ sourceId: String,
+ };
+ function parseDragMeta(raw) {
+ let { refined, extra } = refineProps(raw, DRAG_META_REFINERS);
+ return {
+ startTime: refined.startTime || null,
+ duration: refined.duration || null,
+ create: refined.create != null ? refined.create : true,
+ sourceId: refined.sourceId,
+ leftoverProps: extra,
+ };
+ }
+
+ class CalendarRoot extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ forPrint: false,
+ };
+ this.handleBeforePrint = () => {
+ this.setState({ forPrint: true });
+ };
+ this.handleAfterPrint = () => {
+ this.setState({ forPrint: false });
+ };
+ }
+ render() {
+ let { props } = this;
+ let { options } = props;
+ let { forPrint } = this.state;
+ let isHeightAuto = forPrint || options.height === 'auto' || options.contentHeight === 'auto';
+ let height = (!isHeightAuto && options.height != null) ? options.height : '';
+ let classNames = [
+ 'fc',
+ forPrint ? 'fc-media-print' : 'fc-media-screen',
+ `fc-direction-${options.direction}`,
+ props.theme.getClass('root'),
+ ];
+ if (!getCanVGrowWithinCell()) {
+ classNames.push('fc-liquid-hack');
+ }
+ return props.children(classNames, height, isHeightAuto, forPrint);
+ }
+ componentDidMount() {
+ let { emitter } = this.props;
+ emitter.on('_beforeprint', this.handleBeforePrint);
+ emitter.on('_afterprint', this.handleAfterPrint);
+ }
+ componentWillUnmount() {
+ let { emitter } = this.props;
+ emitter.off('_beforeprint', this.handleBeforePrint);
+ emitter.off('_afterprint', this.handleAfterPrint);
+ }
+ }
+
+ // Computes a default column header formatting string if `colFormat` is not explicitly defined
+ function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
+ // if more than one week row, or if there are a lot of columns with not much space,
+ // put just the day numbers will be in each cell
+ if (!datesRepDistinctDays || dayCnt > 10) {
+ return createFormatter({ weekday: 'short' }); // "Sat"
+ }
+ if (dayCnt > 1) {
+ return createFormatter({ weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }); // "Sat 11/12"
+ }
+ return createFormatter({ weekday: 'long' }); // "Saturday"
+ }
+
+ const CLASS_NAME = 'fc-col-header-cell'; // do the cushion too? no
+ function renderInner$1(renderProps) {
+ return renderProps.text;
+ }
+
+ class ContentInjector extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.id = guid();
+ this.currentDomNodes = [];
+ this.queuedDomNodes = [];
+ this.handleEl = (el) => {
+ if (this.props.elRef) {
+ setRef(this.props.elRef, el);
+ }
+ };
+ }
+ render() {
+ const { props, context } = this;
+ const { options } = context;
+ const { generator, renderProps } = props;
+ const attrs = buildElAttrs(props);
+ let innerContent;
+ let queuedDomNodes = [];
+ if (hasCustomRenderingHandler(props.generatorName, options)) {
+ if (options.customRenderingReplacesEl) {
+ delete attrs.elRef; // because handleEl will be used
+ }
+ }
+ else {
+ const customContent = typeof generator === 'function' ?
+ generator(renderProps, h) :
+ generator;
+ if (typeof customContent === 'string' ||
+ i$1(customContent) ||
+ Array.isArray(customContent)) {
+ innerContent = customContent;
+ }
+ else if (typeof customContent === 'object') {
+ if ('html' in customContent) {
+ attrs.dangerouslySetInnerHTML = { __html: customContent.html };
+ }
+ else if ('domNodes' in customContent) {
+ queuedDomNodes = Array.prototype.slice.call(customContent.domNodes);
+ }
+ }
+ }
+ this.queuedDomNodes = queuedDomNodes;
+ return h(props.elTag, attrs, innerContent);
+ }
+ componentDidMount() {
+ this.applyQueueudDomNodes();
+ this.triggerCustomRendering(true);
+ }
+ componentDidUpdate() {
+ this.applyQueueudDomNodes();
+ this.triggerCustomRendering(true);
+ }
+ componentWillUnmount() {
+ this.triggerCustomRendering(false); // TODO: different API for removal?
+ }
+ triggerCustomRendering(isActive) {
+ const { props, context } = this;
+ const { handleCustomRendering, customRenderingMetaMap } = context.options;
+ if (handleCustomRendering) {
+ const customRenderingMeta = customRenderingMetaMap === null || customRenderingMetaMap === void 0 ? void 0 : customRenderingMetaMap[props.generatorName];
+ if (customRenderingMeta) {
+ handleCustomRendering(Object.assign({ id: this.id, isActive, containerEl: this.base, reportNewContainerEl: this.handleEl, generatorMeta: customRenderingMeta }, props));
+ }
+ }
+ }
+ applyQueueudDomNodes() {
+ const { queuedDomNodes, currentDomNodes } = this;
+ const el = this.base;
+ if (!isArraysEqual(queuedDomNodes, currentDomNodes)) {
+ currentDomNodes.forEach(removeElement);
+ for (let newNode of queuedDomNodes) {
+ el.appendChild(newNode);
+ }
+ this.currentDomNodes = queuedDomNodes;
+ }
+ }
+ }
+ ContentInjector.addPropsEquality({
+ elClasses: isArraysEqual,
+ elStyle: isPropsEqual,
+ elAttrs: isNonHandlerPropsEqual,
+ renderProps: isPropsEqual,
+ });
+ // Util
+ function hasCustomRenderingHandler(generatorName, options) {
+ var _a;
+ return Boolean(options.handleCustomRendering &&
+ generatorName &&
+ ((_a = options.customRenderingMetaMap) === null || _a === void 0 ? void 0 : _a[generatorName]));
+ }
+ function buildElAttrs(props, extraClassNames) {
+ const attrs = Object.assign(Object.assign({}, props.elAttrs), { ref: props.elRef });
+ if (props.elClasses || extraClassNames) {
+ attrs.className = (props.elClasses || [])
+ .concat(extraClassNames || [])
+ .concat(attrs.className || [])
+ .filter(Boolean)
+ .join(' ');
+ }
+ if (props.elStyle) {
+ attrs.style = props.elStyle;
+ }
+ return attrs;
+ }
+
+ const RenderId = createContext(0);
+
+ class ContentContainer extends d {
+ constructor() {
+ super(...arguments);
+ this.InnerContent = InnerContentInjector.bind(undefined, this);
+ }
+ render() {
+ const { props } = this;
+ const generatedClassNames = generateClassNames(props.classNameGenerator, props.renderProps);
+ if (props.children) {
+ const elAttrs = buildElAttrs(props, generatedClassNames);
+ const children = props.children(this.InnerContent, props.renderProps, elAttrs);
+ if (props.elTag) {
+ return h(props.elTag, elAttrs, children);
+ }
+ else {
+ return children;
+ }
+ }
+ else {
+ return h((ContentInjector), Object.assign(Object.assign({}, props), { elTag: props.elTag || 'div', elClasses: (props.elClasses || []).concat(generatedClassNames), renderId: this.context }));
+ }
+ }
+ componentDidMount() {
+ var _a, _b;
+ (_b = (_a = this.props).didMount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.base }));
+ }
+ componentWillUnmount() {
+ var _a, _b;
+ (_b = (_a = this.props).willUnmount) === null || _b === void 0 ? void 0 : _b.call(_a, Object.assign(Object.assign({}, this.props.renderProps), { el: this.base }));
+ }
+ }
+ ContentContainer.contextType = RenderId;
+ function InnerContentInjector(containerComponent, props) {
+ const parentProps = containerComponent.props;
+ return h((ContentInjector), Object.assign({ renderProps: parentProps.renderProps, generatorName: parentProps.generatorName, generator: parentProps.generator, renderId: containerComponent.context }, props));
+ }
+ // Utils
+ function generateClassNames(classNameGenerator, renderProps) {
+ const classNames = typeof classNameGenerator === 'function' ?
+ classNameGenerator(renderProps) :
+ classNameGenerator || [];
+ return typeof classNames === 'string' ? [classNames] : classNames;
+ }
+
+ // BAD name for this class now. used in the Header
+ class TableDateCell extends BaseComponent {
+ render() {
+ let { dateEnv, options, theme, viewApi } = this.context;
+ let { props } = this;
+ let { date, dateProfile } = props;
+ let dayMeta = getDateMeta(date, props.todayRange, null, dateProfile);
+ let classNames = [CLASS_NAME].concat(getDayClassNames(dayMeta, theme));
+ let text = dateEnv.format(date, props.dayHeaderFormat);
+ // if colCnt is 1, we are already in a day-view and don't need a navlink
+ let navLinkAttrs = (!dayMeta.isDisabled && props.colCnt > 1)
+ ? buildNavLinkAttrs(this.context, date)
+ : {};
+ let renderProps = Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: viewApi }, props.extraRenderProps), { text }), dayMeta);
+ return (h(ContentContainer, { elTag: "th", elClasses: classNames, elAttrs: Object.assign({ role: 'columnheader', colSpan: props.colSpan, 'data-date': !dayMeta.isDisabled ? formatDayString(date) : undefined }, props.extraDataAttrs), renderProps: renderProps, generatorName: "dayHeaderContent", generator: options.dayHeaderContent || renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContainer) => (h("div", { className: "fc-scrollgrid-sync-inner" }, !dayMeta.isDisabled && (h(InnerContainer, { elTag: "a", elAttrs: navLinkAttrs, elClasses: [
+ 'fc-col-header-cell-cushion',
+ props.isSticky && 'fc-sticky',
+ ] }))))));
+ }
+ }
+
+ const WEEKDAY_FORMAT = createFormatter({ weekday: 'long' });
+ class TableDowCell extends BaseComponent {
+ render() {
+ let { props } = this;
+ let { dateEnv, theme, viewApi, options } = this.context;
+ let date = addDays(new Date(259200000), props.dow); // start with Sun, 04 Jan 1970 00:00:00 GMT
+ let dateMeta = {
+ dow: props.dow,
+ isDisabled: false,
+ isFuture: false,
+ isPast: false,
+ isToday: false,
+ isOther: false,
+ };
+ let text = dateEnv.format(date, props.dayHeaderFormat);
+ let renderProps = Object.assign(Object.assign(Object.assign(Object.assign({ // TODO: make this public?
+ date }, dateMeta), { view: viewApi }), props.extraRenderProps), { text });
+ return (h(ContentContainer, { elTag: "th", elClasses: [
+ CLASS_NAME,
+ ...getDayClassNames(dateMeta, theme),
+ ...(props.extraClassNames || []),
+ ], elAttrs: Object.assign({ role: 'columnheader', colSpan: props.colSpan }, props.extraDataAttrs), renderProps: renderProps, generatorName: "dayHeaderContent", generator: options.dayHeaderContent || renderInner$1, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => (h("div", { className: "fc-scrollgrid-sync-inner" },
+ h(InnerContent, { elTag: "a", elClasses: [
+ 'fc-col-header-cell-cushion',
+ props.isSticky && 'fc-sticky',
+ ], elAttrs: {
+ 'aria-label': dateEnv.format(date, WEEKDAY_FORMAT),
+ } })))));
+ }
+ }
+
+ class NowTimer extends d {
+ constructor(props, context) {
+ super(props, context);
+ this.initialNowDate = getNow(context.options.now, context.dateEnv);
+ this.initialNowQueriedMs = new Date().valueOf();
+ this.state = this.computeTiming().currentState;
+ }
+ render() {
+ let { props, state } = this;
+ return props.children(state.nowDate, state.todayRange);
+ }
+ componentDidMount() {
+ this.setTimeout();
+ }
+ componentDidUpdate(prevProps) {
+ if (prevProps.unit !== this.props.unit) {
+ this.clearTimeout();
+ this.setTimeout();
+ }
+ }
+ componentWillUnmount() {
+ this.clearTimeout();
+ }
+ computeTiming() {
+ let { props, context } = this;
+ let unroundedNow = addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs);
+ let currentUnitStart = context.dateEnv.startOf(unroundedNow, props.unit);
+ let nextUnitStart = context.dateEnv.add(currentUnitStart, createDuration(1, props.unit));
+ let waitMs = nextUnitStart.valueOf() - unroundedNow.valueOf();
+ // there is a max setTimeout ms value (https://stackoverflow.com/a/3468650/96342)
+ // ensure no longer than a day
+ waitMs = Math.min(1000 * 60 * 60 * 24, waitMs);
+ return {
+ currentState: { nowDate: currentUnitStart, todayRange: buildDayRange(currentUnitStart) },
+ nextState: { nowDate: nextUnitStart, todayRange: buildDayRange(nextUnitStart) },
+ waitMs,
+ };
+ }
+ setTimeout() {
+ let { nextState, waitMs } = this.computeTiming();
+ this.timeoutId = setTimeout(() => {
+ this.setState(nextState, () => {
+ this.setTimeout();
+ });
+ }, waitMs);
+ }
+ clearTimeout() {
+ if (this.timeoutId) {
+ clearTimeout(this.timeoutId);
+ }
+ }
+ }
+ NowTimer.contextType = ViewContextType;
+ function buildDayRange(date) {
+ let start = startOfDay(date);
+ let end = addDays(start, 1);
+ return { start, end };
+ }
+
+ class DayHeader extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.createDayHeaderFormatter = memoize(createDayHeaderFormatter);
+ }
+ render() {
+ let { context } = this;
+ let { dates, dateProfile, datesRepDistinctDays, renderIntro } = this.props;
+ let dayHeaderFormat = this.createDayHeaderFormatter(context.options.dayHeaderFormat, datesRepDistinctDays, dates.length);
+ return (h(NowTimer, { unit: "day" }, (nowDate, todayRange) => (h("tr", { role: "row" },
+ renderIntro && renderIntro('day'),
+ dates.map((date) => (datesRepDistinctDays ? (h(TableDateCell, { key: date.toISOString(), date: date, dateProfile: dateProfile, todayRange: todayRange, colCnt: dates.length, dayHeaderFormat: dayHeaderFormat })) : (h(TableDowCell, { key: date.getUTCDay(), dow: date.getUTCDay(), dayHeaderFormat: dayHeaderFormat }))))))));
+ }
+ }
+ function createDayHeaderFormatter(explicitFormat, datesRepDistinctDays, dateCnt) {
+ return explicitFormat || computeFallbackHeaderFormat(datesRepDistinctDays, dateCnt);
+ }
+
+ class DaySeriesModel {
+ constructor(range, dateProfileGenerator) {
+ let date = range.start;
+ let { end } = range;
+ let indices = [];
+ let dates = [];
+ let dayIndex = -1;
+ while (date < end) { // loop each day from start to end
+ if (dateProfileGenerator.isHiddenDay(date)) {
+ indices.push(dayIndex + 0.5); // mark that it's between indices
+ }
+ else {
+ dayIndex += 1;
+ indices.push(dayIndex);
+ dates.push(date);
+ }
+ date = addDays(date, 1);
+ }
+ this.dates = dates;
+ this.indices = indices;
+ this.cnt = dates.length;
+ }
+ sliceRange(range) {
+ let firstIndex = this.getDateDayIndex(range.start); // inclusive first index
+ let lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index
+ let clippedFirstIndex = Math.max(0, firstIndex);
+ let clippedLastIndex = Math.min(this.cnt - 1, lastIndex);
+ // deal with in-between indices
+ clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell
+ clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell
+ if (clippedFirstIndex <= clippedLastIndex) {
+ return {
+ firstIndex: clippedFirstIndex,
+ lastIndex: clippedLastIndex,
+ isStart: firstIndex === clippedFirstIndex,
+ isEnd: lastIndex === clippedLastIndex,
+ };
+ }
+ return null;
+ }
+ // Given a date, returns its chronolocial cell-index from the first cell of the grid.
+ // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.
+ // If before the first offset, returns a negative number.
+ // If after the last offset, returns an offset past the last cell offset.
+ // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.
+ getDateDayIndex(date) {
+ let { indices } = this;
+ let dayOffset = Math.floor(diffDays(this.dates[0], date));
+ if (dayOffset < 0) {
+ return indices[0] - 1;
+ }
+ if (dayOffset >= indices.length) {
+ return indices[indices.length - 1] + 1;
+ }
+ return indices[dayOffset];
+ }
+ }
+
+ class DayTableModel {
+ constructor(daySeries, breakOnWeeks) {
+ let { dates } = daySeries;
+ let daysPerRow;
+ let firstDay;
+ let rowCnt;
+ if (breakOnWeeks) {
+ // count columns until the day-of-week repeats
+ firstDay = dates[0].getUTCDay();
+ for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow += 1) {
+ if (dates[daysPerRow].getUTCDay() === firstDay) {
+ break;
+ }
+ }
+ rowCnt = Math.ceil(dates.length / daysPerRow);
+ }
+ else {
+ rowCnt = 1;
+ daysPerRow = dates.length;
+ }
+ this.rowCnt = rowCnt;
+ this.colCnt = daysPerRow;
+ this.daySeries = daySeries;
+ this.cells = this.buildCells();
+ this.headerDates = this.buildHeaderDates();
+ }
+ buildCells() {
+ let rows = [];
+ for (let row = 0; row < this.rowCnt; row += 1) {
+ let cells = [];
+ for (let col = 0; col < this.colCnt; col += 1) {
+ cells.push(this.buildCell(row, col));
+ }
+ rows.push(cells);
+ }
+ return rows;
+ }
+ buildCell(row, col) {
+ let date = this.daySeries.dates[row * this.colCnt + col];
+ return {
+ key: date.toISOString(),
+ date,
+ };
+ }
+ buildHeaderDates() {
+ let dates = [];
+ for (let col = 0; col < this.colCnt; col += 1) {
+ dates.push(this.cells[0][col].date);
+ }
+ return dates;
+ }
+ sliceRange(range) {
+ let { colCnt } = this;
+ let seriesSeg = this.daySeries.sliceRange(range);
+ let segs = [];
+ if (seriesSeg) {
+ let { firstIndex, lastIndex } = seriesSeg;
+ let index = firstIndex;
+ while (index <= lastIndex) {
+ let row = Math.floor(index / colCnt);
+ let nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);
+ segs.push({
+ row,
+ firstCol: index % colCnt,
+ lastCol: (nextIndex - 1) % colCnt,
+ isStart: seriesSeg.isStart && index === firstIndex,
+ isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex,
+ });
+ index = nextIndex;
+ }
+ }
+ return segs;
+ }
+ }
+
+ class Slicer {
+ constructor() {
+ this.sliceBusinessHours = memoize(this._sliceBusinessHours);
+ this.sliceDateSelection = memoize(this._sliceDateSpan);
+ this.sliceEventStore = memoize(this._sliceEventStore);
+ this.sliceEventDrag = memoize(this._sliceInteraction);
+ this.sliceEventResize = memoize(this._sliceInteraction);
+ this.forceDayIfListItem = false; // hack
+ }
+ sliceProps(props, dateProfile, nextDayThreshold, context, ...extraArgs) {
+ let { eventUiBases } = props;
+ let eventSegs = this.sliceEventStore(props.eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs);
+ return {
+ dateSelectionSegs: this.sliceDateSelection(props.dateSelection, eventUiBases, context, ...extraArgs),
+ businessHourSegs: this.sliceBusinessHours(props.businessHours, dateProfile, nextDayThreshold, context, ...extraArgs),
+ fgEventSegs: eventSegs.fg,
+ bgEventSegs: eventSegs.bg,
+ eventDrag: this.sliceEventDrag(props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),
+ eventResize: this.sliceEventResize(props.eventResize, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs),
+ eventSelection: props.eventSelection,
+ }; // TODO: give interactionSegs?
+ }
+ sliceNowDate(// does not memoize
+ date, context, ...extraArgs) {
+ return this._sliceDateSpan({ range: { start: date, end: addMs(date, 1) }, allDay: false }, // add 1 ms, protect against null range
+ {}, context, ...extraArgs);
+ }
+ _sliceBusinessHours(businessHours, dateProfile, nextDayThreshold, context, ...extraArgs) {
+ if (!businessHours) {
+ return [];
+ }
+ return this._sliceEventStore(expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), context), {}, dateProfile, nextDayThreshold, ...extraArgs).bg;
+ }
+ _sliceEventStore(eventStore, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {
+ if (eventStore) {
+ let rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
+ return {
+ bg: this.sliceEventRanges(rangeRes.bg, extraArgs),
+ fg: this.sliceEventRanges(rangeRes.fg, extraArgs),
+ };
+ }
+ return { bg: [], fg: [] };
+ }
+ _sliceInteraction(interaction, eventUiBases, dateProfile, nextDayThreshold, ...extraArgs) {
+ if (!interaction) {
+ return null;
+ }
+ let rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
+ return {
+ segs: this.sliceEventRanges(rangeRes.fg, extraArgs),
+ affectedInstances: interaction.affectedEvents.instances,
+ isEvent: interaction.isEvent,
+ };
+ }
+ _sliceDateSpan(dateSpan, eventUiBases, context, ...extraArgs) {
+ if (!dateSpan) {
+ return [];
+ }
+ let eventRange = fabricateEventRange(dateSpan, eventUiBases, context);
+ let segs = this.sliceRange(dateSpan.range, ...extraArgs);
+ for (let seg of segs) {
+ seg.eventRange = eventRange;
+ }
+ return segs;
+ }
+ /*
+ "complete" seg means it has component and eventRange
+ */
+ sliceEventRanges(eventRanges, extraArgs) {
+ let segs = [];
+ for (let eventRange of eventRanges) {
+ segs.push(...this.sliceEventRange(eventRange, extraArgs));
+ }
+ return segs;
+ }
+ /*
+ "complete" seg means it has component and eventRange
+ */
+ sliceEventRange(eventRange, extraArgs) {
+ let dateRange = eventRange.range;
+ // hack to make multi-day events that are being force-displayed as list-items to take up only one day
+ if (this.forceDayIfListItem && eventRange.ui.display === 'list-item') {
+ dateRange = {
+ start: dateRange.start,
+ end: addDays(dateRange.start, 1),
+ };
+ }
+ let segs = this.sliceRange(dateRange, ...extraArgs);
+ for (let seg of segs) {
+ seg.eventRange = eventRange;
+ seg.isStart = eventRange.isStart && seg.isStart;
+ seg.isEnd = eventRange.isEnd && seg.isEnd;
+ }
+ return segs;
+ }
+ }
+ /*
+ for incorporating slotMinTime/slotMaxTime if appropriate
+ TODO: should be part of DateProfile!
+ TimelineDateProfile already does this btw
+ */
+ function computeActiveRange(dateProfile, isComponentAllDay) {
+ let range = dateProfile.activeRange;
+ if (isComponentAllDay) {
+ return range;
+ }
+ return {
+ start: addMs(range.start, dateProfile.slotMinTime.milliseconds),
+ end: addMs(range.end, dateProfile.slotMaxTime.milliseconds - 864e5), // 864e5 = ms in a day
+ };
+ }
+
+ function reduceEventStore(eventStore, action, eventSources, dateProfile, context) {
+ switch (action.type) {
+ case 'RECEIVE_EVENTS': // raw
+ return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, context);
+ case 'ADD_EVENTS': // already parsed, but not expanded
+ return addEvent(eventStore, action.eventStore, // new ones
+ dateProfile ? dateProfile.activeRange : null, context);
+ case 'RESET_EVENTS':
+ return action.eventStore;
+ case 'MERGE_EVENTS': // already parsed and expanded
+ return mergeEventStores(eventStore, action.eventStore);
+ case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
+ case 'NEXT':
+ case 'CHANGE_DATE':
+ case 'CHANGE_VIEW_TYPE':
+ if (dateProfile) {
+ return expandRecurring(eventStore, dateProfile.activeRange, context);
+ }
+ return eventStore;
+ case 'REMOVE_EVENTS':
+ return excludeSubEventStore(eventStore, action.eventStore);
+ case 'REMOVE_EVENT_SOURCE':
+ return excludeEventsBySourceId(eventStore, action.sourceId);
+ case 'REMOVE_ALL_EVENT_SOURCES':
+ return filterEventStoreDefs(eventStore, (eventDef) => (!eventDef.sourceId // only keep events with no source id
+ ));
+ case 'REMOVE_ALL_EVENTS':
+ return createEmptyEventStore();
+ default:
+ return eventStore;
+ }
+ }
+ function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, context) {
+ if (eventSource && // not already removed
+ fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
+ ) {
+ let subset = parseEvents(transformRawEvents(rawEvents, eventSource, context), eventSource, context);
+ if (fetchRange) {
+ subset = expandRecurring(subset, fetchRange, context);
+ }
+ return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
+ }
+ return eventStore;
+ }
+ function transformRawEvents(rawEvents, eventSource, context) {
+ let calEachTransform = context.options.eventDataTransform;
+ let sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
+ if (sourceEachTransform) {
+ rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
+ }
+ if (calEachTransform) {
+ rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
+ }
+ return rawEvents;
+ }
+ function transformEachRawEvent(rawEvents, func) {
+ let refinedEvents;
+ if (!func) {
+ refinedEvents = rawEvents;
+ }
+ else {
+ refinedEvents = [];
+ for (let rawEvent of rawEvents) {
+ let refinedEvent = func(rawEvent);
+ if (refinedEvent) {
+ refinedEvents.push(refinedEvent);
+ }
+ else if (refinedEvent == null) {
+ refinedEvents.push(rawEvent);
+ } // if a different falsy value, do nothing
+ }
+ }
+ return refinedEvents;
+ }
+ function addEvent(eventStore, subset, expandRange, context) {
+ if (expandRange) {
+ subset = expandRecurring(subset, expandRange, context);
+ }
+ return mergeEventStores(eventStore, subset);
+ }
+ function rezoneEventStoreDates(eventStore, oldDateEnv, newDateEnv) {
+ let { defs } = eventStore;
+ let instances = mapHash(eventStore.instances, (instance) => {
+ let def = defs[instance.defId];
+ if (def.allDay || def.recurringDef) {
+ return instance; // isn't dependent on timezone
+ }
+ return Object.assign(Object.assign({}, instance), { range: {
+ start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
+ end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo)),
+ }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
+ });
+ return { defs, instances };
+ }
+ function excludeEventsBySourceId(eventStore, sourceId) {
+ return filterEventStoreDefs(eventStore, (eventDef) => eventDef.sourceId !== sourceId);
+ }
+ // QUESTION: why not just return instances? do a general object-property-exclusion util
+ function excludeInstances(eventStore, removals) {
+ return {
+ defs: eventStore.defs,
+ instances: filterHash(eventStore.instances, (instance) => !removals[instance.instanceId]),
+ };
+ }
+
+ // high-level segmenting-aware tester functions
+ // ------------------------------------------------------------------------------------------------------------------------
+ function isInteractionValid(interaction, dateProfile, context) {
+ let { instances } = interaction.mutatedEvents;
+ for (let instanceId in instances) {
+ if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {
+ return false;
+ }
+ }
+ return isNewPropsValid({ eventDrag: interaction }, context); // HACK: the eventDrag props is used for ALL interactions
+ }
+ function isDateSelectionValid(dateSelection, dateProfile, context) {
+ if (!rangeContainsRange(dateProfile.validRange, dateSelection.range)) {
+ return false;
+ }
+ return isNewPropsValid({ dateSelection }, context);
+ }
+ function isNewPropsValid(newProps, context) {
+ let calendarState = context.getCurrentData();
+ let props = Object.assign({ businessHours: calendarState.businessHours, dateSelection: '', eventStore: calendarState.eventStore, eventUiBases: calendarState.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);
+ return (context.pluginHooks.isPropsValid || isPropsValid)(props, context);
+ }
+ function isPropsValid(state, context, dateSpanMeta = {}, filterConfig) {
+ if (state.eventDrag && !isInteractionPropsValid(state, context, dateSpanMeta, filterConfig)) {
+ return false;
+ }
+ if (state.dateSelection && !isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig)) {
+ return false;
+ }
+ return true;
+ }
+ // Moving Event Validation
+ // ------------------------------------------------------------------------------------------------------------------------
+ function isInteractionPropsValid(state, context, dateSpanMeta, filterConfig) {
+ let currentState = context.getCurrentData();
+ let interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions
+ let subjectEventStore = interaction.mutatedEvents;
+ let subjectDefs = subjectEventStore.defs;
+ let subjectInstances = subjectEventStore.instances;
+ let subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?
+ state.eventUiBases :
+ { '': currentState.selectionConfig });
+ if (filterConfig) {
+ subjectConfigs = mapHash(subjectConfigs, filterConfig);
+ }
+ // exclude the subject events. TODO: exclude defs too?
+ let otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances);
+ let otherDefs = otherEventStore.defs;
+ let otherInstances = otherEventStore.instances;
+ let otherConfigs = compileEventUis(otherDefs, state.eventUiBases);
+ for (let subjectInstanceId in subjectInstances) {
+ let subjectInstance = subjectInstances[subjectInstanceId];
+ let subjectRange = subjectInstance.range;
+ let subjectConfig = subjectConfigs[subjectInstance.defId];
+ let subjectDef = subjectDefs[subjectInstance.defId];
+ // constraint
+ if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, context)) {
+ return false;
+ }
+ // overlap
+ let { eventOverlap } = context.options;
+ let eventOverlapFunc = typeof eventOverlap === 'function' ? eventOverlap : null;
+ for (let otherInstanceId in otherInstances) {
+ let otherInstance = otherInstances[otherInstanceId];
+ // intersect! evaluate
+ if (rangesIntersect(subjectRange, otherInstance.range)) {
+ let otherOverlap = otherConfigs[otherInstance.defId].overlap;
+ // consider the other event's overlap. only do this if the subject event is a "real" event
+ if (otherOverlap === false && interaction.isEvent) {
+ return false;
+ }
+ if (subjectConfig.overlap === false) {
+ return false;
+ }
+ if (eventOverlapFunc && !eventOverlapFunc(new EventImpl(context, otherDefs[otherInstance.defId], otherInstance), // still event
+ new EventImpl(context, subjectDef, subjectInstance))) {
+ return false;
+ }
+ }
+ }
+ // allow (a function)
+ let calendarEventStore = currentState.eventStore; // need global-to-calendar, not local to component (splittable)state
+ for (let subjectAllow of subjectConfig.allows) {
+ let subjectDateSpan = Object.assign(Object.assign({}, dateSpanMeta), { range: subjectInstance.range, allDay: subjectDef.allDay });
+ let origDef = calendarEventStore.defs[subjectDef.defId];
+ let origInstance = calendarEventStore.instances[subjectInstanceId];
+ let eventApi;
+ if (origDef) { // was previously in the calendar
+ eventApi = new EventImpl(context, origDef, origInstance);
+ }
+ else { // was an external event
+ eventApi = new EventImpl(context, subjectDef); // no instance, because had no dates
+ }
+ if (!subjectAllow(buildDateSpanApiWithContext(subjectDateSpan, context), eventApi)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ // Date Selection Validation
+ // ------------------------------------------------------------------------------------------------------------------------
+ function isDateSelectionPropsValid(state, context, dateSpanMeta, filterConfig) {
+ let relevantEventStore = state.eventStore;
+ let relevantDefs = relevantEventStore.defs;
+ let relevantInstances = relevantEventStore.instances;
+ let selection = state.dateSelection;
+ let selectionRange = selection.range;
+ let { selectionConfig } = context.getCurrentData();
+ if (filterConfig) {
+ selectionConfig = filterConfig(selectionConfig);
+ }
+ // constraint
+ if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, context)) {
+ return false;
+ }
+ // overlap
+ let { selectOverlap } = context.options;
+ let selectOverlapFunc = typeof selectOverlap === 'function' ? selectOverlap : null;
+ for (let relevantInstanceId in relevantInstances) {
+ let relevantInstance = relevantInstances[relevantInstanceId];
+ // intersect! evaluate
+ if (rangesIntersect(selectionRange, relevantInstance.range)) {
+ if (selectionConfig.overlap === false) {
+ return false;
+ }
+ if (selectOverlapFunc && !selectOverlapFunc(new EventImpl(context, relevantDefs[relevantInstance.defId], relevantInstance), null)) {
+ return false;
+ }
+ }
+ }
+ // allow (a function)
+ for (let selectionAllow of selectionConfig.allows) {
+ let fullDateSpan = Object.assign(Object.assign({}, dateSpanMeta), selection);
+ if (!selectionAllow(buildDateSpanApiWithContext(fullDateSpan, context), null)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ // Constraint Utils
+ // ------------------------------------------------------------------------------------------------------------------------
+ function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, context) {
+ for (let constraint of constraints) {
+ if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, context), subjectRange)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours
+ otherEventStore, // for if constraint is an even group ID
+ businessHoursUnexpanded, // for if constraint is 'businessHours'
+ context) {
+ if (constraint === 'businessHours') {
+ return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, context));
+ }
+ if (typeof constraint === 'string') { // an group ID
+ return eventStoreToRanges(filterEventStoreDefs(otherEventStore, (eventDef) => eventDef.groupId === constraint));
+ }
+ if (typeof constraint === 'object' && constraint) { // non-null object
+ return eventStoreToRanges(expandRecurring(constraint, subjectRange, context));
+ }
+ return []; // if it's false
+ }
+ // TODO: move to event-store file?
+ function eventStoreToRanges(eventStore) {
+ let { instances } = eventStore;
+ let ranges = [];
+ for (let instanceId in instances) {
+ ranges.push(instances[instanceId].range);
+ }
+ return ranges;
+ }
+ // TODO: move to geom file?
+ function anyRangesContainRange(outerRanges, innerRange) {
+ for (let outerRange of outerRanges) {
+ if (rangeContainsRange(outerRange, innerRange)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ class JsonRequestError extends Error {
+ constructor(message, response) {
+ super(message);
+ this.response = response;
+ }
+ }
+ function requestJson(method, url, params) {
+ method = method.toUpperCase();
+ const fetchOptions = {
+ method,
+ };
+ if (method === 'GET') {
+ url += (url.indexOf('?') === -1 ? '?' : '&') +
+ new URLSearchParams(params);
+ }
+ else {
+ fetchOptions.body = new URLSearchParams(params);
+ fetchOptions.headers = {
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ };
+ }
+ return fetch(url, fetchOptions).then((fetchRes) => {
+ if (fetchRes.ok) {
+ return fetchRes.json().then((parsedResponse) => {
+ return [parsedResponse, fetchRes];
+ }, () => {
+ throw new JsonRequestError('Failure parsing JSON', fetchRes);
+ });
+ }
+ else {
+ throw new JsonRequestError('Request failed', fetchRes);
+ }
+ });
+ }
+
+ class DelayedRunner {
+ constructor(drainedOption) {
+ this.drainedOption = drainedOption;
+ this.isRunning = false;
+ this.isDirty = false;
+ this.pauseDepths = {};
+ this.timeoutId = 0;
+ }
+ request(delay) {
+ this.isDirty = true;
+ if (!this.isPaused()) {
+ this.clearTimeout();
+ if (delay == null) {
+ this.tryDrain();
+ }
+ else {
+ this.timeoutId = setTimeout(// NOT OPTIMAL! TODO: look at debounce
+ this.tryDrain.bind(this), delay);
+ }
+ }
+ }
+ pause(scope = '') {
+ let { pauseDepths } = this;
+ pauseDepths[scope] = (pauseDepths[scope] || 0) + 1;
+ this.clearTimeout();
+ }
+ resume(scope = '', force) {
+ let { pauseDepths } = this;
+ if (scope in pauseDepths) {
+ if (force) {
+ delete pauseDepths[scope];
+ }
+ else {
+ pauseDepths[scope] -= 1;
+ let depth = pauseDepths[scope];
+ if (depth <= 0) {
+ delete pauseDepths[scope];
+ }
+ }
+ this.tryDrain();
+ }
+ }
+ isPaused() {
+ return Object.keys(this.pauseDepths).length;
+ }
+ tryDrain() {
+ if (!this.isRunning && !this.isPaused()) {
+ this.isRunning = true;
+ while (this.isDirty) {
+ this.isDirty = false;
+ this.drained(); // might set isDirty to true again
+ }
+ this.isRunning = false;
+ }
+ }
+ clear() {
+ this.clearTimeout();
+ this.isDirty = false;
+ this.pauseDepths = {};
+ }
+ clearTimeout() {
+ if (this.timeoutId) {
+ clearTimeout(this.timeoutId);
+ this.timeoutId = 0;
+ }
+ }
+ drained() {
+ if (this.drainedOption) {
+ this.drainedOption();
+ }
+ }
+ }
+
+ const VISIBLE_HIDDEN_RE = /^(visible|hidden)$/;
+ class Scroller extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.handleEl = (el) => {
+ this.el = el;
+ setRef(this.props.elRef, el);
+ };
+ }
+ render() {
+ let { props } = this;
+ let { liquid, liquidIsAbsolute } = props;
+ let isAbsolute = liquid && liquidIsAbsolute;
+ let className = ['fc-scroller'];
+ if (liquid) {
+ if (liquidIsAbsolute) {
+ className.push('fc-scroller-liquid-absolute');
+ }
+ else {
+ className.push('fc-scroller-liquid');
+ }
+ }
+ return (h("div", { ref: this.handleEl, className: className.join(' '), style: {
+ overflowX: props.overflowX,
+ overflowY: props.overflowY,
+ left: (isAbsolute && -(props.overcomeLeft || 0)) || '',
+ right: (isAbsolute && -(props.overcomeRight || 0)) || '',
+ bottom: (isAbsolute && -(props.overcomeBottom || 0)) || '',
+ marginLeft: (!isAbsolute && -(props.overcomeLeft || 0)) || '',
+ marginRight: (!isAbsolute && -(props.overcomeRight || 0)) || '',
+ marginBottom: (!isAbsolute && -(props.overcomeBottom || 0)) || '',
+ maxHeight: props.maxHeight || '',
+ } }, props.children));
+ }
+ needsXScrolling() {
+ if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
+ return false;
+ }
+ // testing scrollWidth>clientWidth is unreliable cross-browser when pixel heights aren't integers.
+ // much more reliable to see if children are taller than the scroller, even tho doesn't account for
+ // inner-child margins and absolute positioning
+ let { el } = this;
+ let realClientWidth = this.el.getBoundingClientRect().width - this.getYScrollbarWidth();
+ let { children } = el;
+ for (let i = 0; i < children.length; i += 1) {
+ let childEl = children[i];
+ if (childEl.getBoundingClientRect().width > realClientWidth) {
+ return true;
+ }
+ }
+ return false;
+ }
+ needsYScrolling() {
+ if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
+ return false;
+ }
+ // testing scrollHeight>clientHeight is unreliable cross-browser when pixel heights aren't integers.
+ // much more reliable to see if children are taller than the scroller, even tho doesn't account for
+ // inner-child margins and absolute positioning
+ let { el } = this;
+ let realClientHeight = this.el.getBoundingClientRect().height - this.getXScrollbarWidth();
+ let { children } = el;
+ for (let i = 0; i < children.length; i += 1) {
+ let childEl = children[i];
+ if (childEl.getBoundingClientRect().height > realClientHeight) {
+ return true;
+ }
+ }
+ return false;
+ }
+ getXScrollbarWidth() {
+ if (VISIBLE_HIDDEN_RE.test(this.props.overflowX)) {
+ return 0;
+ }
+ return this.el.offsetHeight - this.el.clientHeight; // only works because we guarantee no borders. TODO: add to CSS with important?
+ }
+ getYScrollbarWidth() {
+ if (VISIBLE_HIDDEN_RE.test(this.props.overflowY)) {
+ return 0;
+ }
+ return this.el.offsetWidth - this.el.clientWidth; // only works because we guarantee no borders. TODO: add to CSS with important?
+ }
+ }
+
+ /*
+ TODO: somehow infer OtherArgs from masterCallback?
+ TODO: infer RefType from masterCallback if provided
+ */
+ class RefMap {
+ constructor(masterCallback) {
+ this.masterCallback = masterCallback;
+ this.currentMap = {};
+ this.depths = {};
+ this.callbackMap = {};
+ this.handleValue = (val, key) => {
+ let { depths, currentMap } = this;
+ let removed = false;
+ let added = false;
+ if (val !== null) {
+ // for bug... ACTUALLY: can probably do away with this now that callers don't share numeric indices anymore
+ removed = (key in currentMap);
+ currentMap[key] = val;
+ depths[key] = (depths[key] || 0) + 1;
+ added = true;
+ }
+ else {
+ depths[key] -= 1;
+ if (!depths[key]) {
+ delete currentMap[key];
+ delete this.callbackMap[key];
+ removed = true;
+ }
+ }
+ if (this.masterCallback) {
+ if (removed) {
+ this.masterCallback(null, String(key));
+ }
+ if (added) {
+ this.masterCallback(val, String(key));
+ }
+ }
+ };
+ }
+ createRef(key) {
+ let refCallback = this.callbackMap[key];
+ if (!refCallback) {
+ refCallback = this.callbackMap[key] = (val) => {
+ this.handleValue(val, String(key));
+ };
+ }
+ return refCallback;
+ }
+ // TODO: check callers that don't care about order. should use getAll instead
+ // NOTE: this method has become less valuable now that we are encouraged to map order by some other index
+ // TODO: provide ONE array-export function, buildArray, which fails on non-numeric indexes. caller can manipulate and "collect"
+ collect(startIndex, endIndex, step) {
+ return collectFromHash(this.currentMap, startIndex, endIndex, step);
+ }
+ getAll() {
+ return hashValuesToArray(this.currentMap);
+ }
+ }
+
+ function computeShrinkWidth(chunkEls) {
+ let shrinkCells = findElements(chunkEls, '.fc-scrollgrid-shrink');
+ let largestWidth = 0;
+ for (let shrinkCell of shrinkCells) {
+ largestWidth = Math.max(largestWidth, computeSmallestCellWidth(shrinkCell));
+ }
+ return Math.ceil(largestWidth); // <table> elements work best with integers. round up to ensure contents fits
+ }
+ function getSectionHasLiquidHeight(props, sectionConfig) {
+ return props.liquid && sectionConfig.liquid; // does the section do liquid-height? (need to have whole scrollgrid liquid-height as well)
+ }
+ function getAllowYScrolling(props, sectionConfig) {
+ return sectionConfig.maxHeight != null || // if its possible for the height to max out, we might need scrollbars
+ getSectionHasLiquidHeight(props, sectionConfig); // if the section is liquid height, it might condense enough to require scrollbars
+ }
+ // TODO: ONLY use `arg`. force out internal function to use same API
+ function renderChunkContent(sectionConfig, chunkConfig, arg, isHeader) {
+ let { expandRows } = arg;
+ let content = typeof chunkConfig.content === 'function' ?
+ chunkConfig.content(arg) :
+ h('table', {
+ role: 'presentation',
+ className: [
+ chunkConfig.tableClassName,
+ sectionConfig.syncRowHeights ? 'fc-scrollgrid-sync-table' : '',
+ ].join(' '),
+ style: {
+ minWidth: arg.tableMinWidth,
+ width: arg.clientWidth,
+ height: expandRows ? arg.clientHeight : '', // css `height` on a <table> serves as a min-height
+ },
+ }, arg.tableColGroupNode, h(isHeader ? 'thead' : 'tbody', {
+ role: 'presentation',
+ }, typeof chunkConfig.rowContent === 'function'
+ ? chunkConfig.rowContent(arg)
+ : chunkConfig.rowContent));
+ return content;
+ }
+ function isColPropsEqual(cols0, cols1) {
+ return isArraysEqual(cols0, cols1, isPropsEqual);
+ }
+ function renderMicroColGroup(cols, shrinkWidth) {
+ let colNodes = [];
+ /*
+ for ColProps with spans, it would have been great to make a single <col span="">
+ HOWEVER, Chrome was getting messing up distributing the width to <td>/<th> elements with colspans.
+ SOLUTION: making individual <col> elements makes Chrome behave.
+ */
+ for (let colProps of cols) {
+ let span = colProps.span || 1;
+ for (let i = 0; i < span; i += 1) {
+ colNodes.push(h("col", { style: {
+ width: colProps.width === 'shrink' ? sanitizeShrinkWidth(shrinkWidth) : (colProps.width || ''),
+ minWidth: colProps.minWidth || '',
+ } }));
+ }
+ }
+ return h('colgroup', {}, ...colNodes);
+ }
+ function sanitizeShrinkWidth(shrinkWidth) {
+ /* why 4? if we do 0, it will kill any border, which are needed for computeSmallestCellWidth
+ 4 accounts for 2 2-pixel borders. TODO: better solution? */
+ return shrinkWidth == null ? 4 : shrinkWidth;
+ }
+ function hasShrinkWidth(cols) {
+ for (let col of cols) {
+ if (col.width === 'shrink') {
+ return true;
+ }
+ }
+ return false;
+ }
+ function getScrollGridClassNames(liquid, context) {
+ let classNames = [
+ 'fc-scrollgrid',
+ context.theme.getClass('table'),
+ ];
+ if (liquid) {
+ classNames.push('fc-scrollgrid-liquid');
+ }
+ return classNames;
+ }
+ function getSectionClassNames(sectionConfig, wholeTableVGrow) {
+ let classNames = [
+ 'fc-scrollgrid-section',
+ `fc-scrollgrid-section-${sectionConfig.type}`,
+ sectionConfig.className, // used?
+ ];
+ if (wholeTableVGrow && sectionConfig.liquid && sectionConfig.maxHeight == null) {
+ classNames.push('fc-scrollgrid-section-liquid');
+ }
+ if (sectionConfig.isSticky) {
+ classNames.push('fc-scrollgrid-section-sticky');
+ }
+ return classNames;
+ }
+ function renderScrollShim(arg) {
+ return (h("div", { className: "fc-scrollgrid-sticky-shim", style: {
+ width: arg.clientWidth,
+ minWidth: arg.tableMinWidth,
+ } }));
+ }
+ function getStickyHeaderDates(options) {
+ let { stickyHeaderDates } = options;
+ if (stickyHeaderDates == null || stickyHeaderDates === 'auto') {
+ stickyHeaderDates = options.height === 'auto' || options.viewHeight === 'auto';
+ }
+ return stickyHeaderDates;
+ }
+ function getStickyFooterScrollbar(options) {
+ let { stickyFooterScrollbar } = options;
+ if (stickyFooterScrollbar == null || stickyFooterScrollbar === 'auto') {
+ stickyFooterScrollbar = options.height === 'auto' || options.viewHeight === 'auto';
+ }
+ return stickyFooterScrollbar;
+ }
+
+ class SimpleScrollGrid extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.processCols = memoize((a) => a, isColPropsEqual); // so we get same `cols` props every time
+ // yucky to memoize VNodes, but much more efficient for consumers
+ this.renderMicroColGroup = memoize(renderMicroColGroup);
+ this.scrollerRefs = new RefMap();
+ this.scrollerElRefs = new RefMap(this._handleScrollerEl.bind(this));
+ this.state = {
+ shrinkWidth: null,
+ forceYScrollbars: false,
+ scrollerClientWidths: {},
+ scrollerClientHeights: {},
+ };
+ // TODO: can do a really simple print-view. dont need to join rows
+ this.handleSizing = () => {
+ this.safeSetState(Object.assign({ shrinkWidth: this.computeShrinkWidth() }, this.computeScrollerDims()));
+ };
+ }
+ render() {
+ let { props, state, context } = this;
+ let sectionConfigs = props.sections || [];
+ let cols = this.processCols(props.cols);
+ let microColGroupNode = this.renderMicroColGroup(cols, state.shrinkWidth);
+ let classNames = getScrollGridClassNames(props.liquid, context);
+ if (props.collapsibleWidth) {
+ classNames.push('fc-scrollgrid-collapsible');
+ }
+ // TODO: make DRY
+ let configCnt = sectionConfigs.length;
+ let configI = 0;
+ let currentConfig;
+ let headSectionNodes = [];
+ let bodySectionNodes = [];
+ let footSectionNodes = [];
+ while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'header') {
+ headSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
+ configI += 1;
+ }
+ while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'body') {
+ bodySectionNodes.push(this.renderSection(currentConfig, microColGroupNode, false));
+ configI += 1;
+ }
+ while (configI < configCnt && (currentConfig = sectionConfigs[configI]).type === 'footer') {
+ footSectionNodes.push(this.renderSection(currentConfig, microColGroupNode, true));
+ configI += 1;
+ }
+ // firefox bug: when setting height on table and there is a thead or tfoot,
+ // the necessary height:100% on the liquid-height body section forces the *whole* table to be taller. (bug #5524)
+ // use getCanVGrowWithinCell as a way to detect table-stupid firefox.
+ // if so, use a simpler dom structure, jam everything into a lone tbody.
+ let isBuggy = !getCanVGrowWithinCell();
+ const roleAttrs = { role: 'rowgroup' };
+ return h('table', {
+ role: 'grid',
+ className: classNames.join(' '),
+ style: { height: props.height },
+ }, Boolean(!isBuggy && headSectionNodes.length) && h('thead', roleAttrs, ...headSectionNodes), Boolean(!isBuggy && bodySectionNodes.length) && h('tbody', roleAttrs, ...bodySectionNodes), Boolean(!isBuggy && footSectionNodes.length) && h('tfoot', roleAttrs, ...footSectionNodes), isBuggy && h('tbody', roleAttrs, ...headSectionNodes, ...bodySectionNodes, ...footSectionNodes));
+ }
+ renderSection(sectionConfig, microColGroupNode, isHeader) {
+ if ('outerContent' in sectionConfig) {
+ return (h(p, { key: sectionConfig.key }, sectionConfig.outerContent));
+ }
+ return (h("tr", { key: sectionConfig.key, role: "presentation", className: getSectionClassNames(sectionConfig, this.props.liquid).join(' ') }, this.renderChunkTd(sectionConfig, microColGroupNode, sectionConfig.chunk, isHeader)));
+ }
+ renderChunkTd(sectionConfig, microColGroupNode, chunkConfig, isHeader) {
+ if ('outerContent' in chunkConfig) {
+ return chunkConfig.outerContent;
+ }
+ let { props } = this;
+ let { forceYScrollbars, scrollerClientWidths, scrollerClientHeights } = this.state;
+ let needsYScrolling = getAllowYScrolling(props, sectionConfig); // TODO: do lazily. do in section config?
+ let isLiquid = getSectionHasLiquidHeight(props, sectionConfig);
+ // for `!props.liquid` - is WHOLE scrollgrid natural height?
+ // TODO: do same thing in advanced scrollgrid? prolly not b/c always has horizontal scrollbars
+ let overflowY = !props.liquid ? 'visible' :
+ forceYScrollbars ? 'scroll' :
+ !needsYScrolling ? 'hidden' :
+ 'auto';
+ let sectionKey = sectionConfig.key;
+ let content = renderChunkContent(sectionConfig, chunkConfig, {
+ tableColGroupNode: microColGroupNode,
+ tableMinWidth: '',
+ clientWidth: (!props.collapsibleWidth && scrollerClientWidths[sectionKey] !== undefined) ? scrollerClientWidths[sectionKey] : null,
+ clientHeight: scrollerClientHeights[sectionKey] !== undefined ? scrollerClientHeights[sectionKey] : null,
+ expandRows: sectionConfig.expandRows,
+ syncRowHeights: false,
+ rowSyncHeights: [],
+ reportRowHeightChange: () => { },
+ }, isHeader);
+ return h(isHeader ? 'th' : 'td', {
+ ref: chunkConfig.elRef,
+ role: 'presentation',
+ }, h("div", { className: `fc-scroller-harness${isLiquid ? ' fc-scroller-harness-liquid' : ''}` },
+ h(Scroller, { ref: this.scrollerRefs.createRef(sectionKey), elRef: this.scrollerElRefs.createRef(sectionKey), overflowY: overflowY, overflowX: !props.liquid ? 'visible' : 'hidden' /* natural height? */, maxHeight: sectionConfig.maxHeight, liquid: isLiquid, liquidIsAbsolute // because its within a harness
+ : true }, content)));
+ }
+ _handleScrollerEl(scrollerEl, key) {
+ let section = getSectionByKey(this.props.sections, key);
+ if (section) {
+ setRef(section.chunk.scrollerElRef, scrollerEl);
+ }
+ }
+ componentDidMount() {
+ this.handleSizing();
+ this.context.addResizeHandler(this.handleSizing);
+ }
+ componentDidUpdate() {
+ // TODO: need better solution when state contains non-sizing things
+ this.handleSizing();
+ }
+ componentWillUnmount() {
+ this.context.removeResizeHandler(this.handleSizing);
+ }
+ computeShrinkWidth() {
+ return hasShrinkWidth(this.props.cols)
+ ? computeShrinkWidth(this.scrollerElRefs.getAll())
+ : 0;
+ }
+ computeScrollerDims() {
+ let scrollbarWidth = getScrollbarWidths();
+ let { scrollerRefs, scrollerElRefs } = this;
+ let forceYScrollbars = false;
+ let scrollerClientWidths = {};
+ let scrollerClientHeights = {};
+ for (let sectionKey in scrollerRefs.currentMap) {
+ let scroller = scrollerRefs.currentMap[sectionKey];
+ if (scroller && scroller.needsYScrolling()) {
+ forceYScrollbars = true;
+ break;
+ }
+ }
+ for (let section of this.props.sections) {
+ let sectionKey = section.key;
+ let scrollerEl = scrollerElRefs.currentMap[sectionKey];
+ if (scrollerEl) {
+ let harnessEl = scrollerEl.parentNode; // TODO: weird way to get this. need harness b/c doesn't include table borders
+ scrollerClientWidths[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().width - (forceYScrollbars
+ ? scrollbarWidth.y // use global because scroller might not have scrollbars yet but will need them in future
+ : 0));
+ scrollerClientHeights[sectionKey] = Math.floor(harnessEl.getBoundingClientRect().height);
+ }
+ }
+ return { forceYScrollbars, scrollerClientWidths, scrollerClientHeights };
+ }
+ }
+ SimpleScrollGrid.addStateEquality({
+ scrollerClientWidths: isPropsEqual,
+ scrollerClientHeights: isPropsEqual,
+ });
+ function getSectionByKey(sections, key) {
+ for (let section of sections) {
+ if (section.key === key) {
+ return section;
+ }
+ }
+ return null;
+ }
+
+ class EventContainer extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.handleEl = (el) => {
+ this.el = el;
+ if (el) {
+ setElSeg(el, this.props.seg);
+ }
+ };
+ }
+ render() {
+ const { props, context } = this;
+ const { options } = context;
+ const { seg } = props;
+ const { eventRange } = seg;
+ const { ui } = eventRange;
+ const renderProps = {
+ event: new EventImpl(context, eventRange.def, eventRange.instance),
+ view: context.viewApi,
+ timeText: props.timeText,
+ textColor: ui.textColor,
+ backgroundColor: ui.backgroundColor,
+ borderColor: ui.borderColor,
+ isDraggable: !props.disableDragging && computeSegDraggable(seg, context),
+ isStartResizable: !props.disableResizing && computeSegStartResizable(seg, context),
+ isEndResizable: !props.disableResizing && computeSegEndResizable(seg),
+ isMirror: Boolean(props.isDragging || props.isResizing || props.isDateSelecting),
+ isStart: Boolean(seg.isStart),
+ isEnd: Boolean(seg.isEnd),
+ isPast: Boolean(props.isPast),
+ isFuture: Boolean(props.isFuture),
+ isToday: Boolean(props.isToday),
+ isSelected: Boolean(props.isSelected),
+ isDragging: Boolean(props.isDragging),
+ isResizing: Boolean(props.isResizing),
+ };
+ return (h(ContentContainer, Object.assign({}, props /* contains children */, { elRef: this.handleEl, elClasses: [
+ ...getEventClassNames(renderProps),
+ ...seg.eventRange.ui.classNames,
+ ...(props.elClasses || []),
+ ], renderProps: renderProps, generatorName: "eventContent", generator: options.eventContent || props.defaultGenerator, classNameGenerator: options.eventClassNames, didMount: options.eventDidMount, willUnmount: options.eventWillUnmount })));
+ }
+ componentDidUpdate(prevProps) {
+ if (this.el && this.props.seg !== prevProps.seg) {
+ setElSeg(this.el, this.props.seg);
+ }
+ }
+ }
+
+ // should not be a purecomponent
+ class StandardEvent extends BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let { seg } = props;
+ let { ui } = seg.eventRange;
+ let timeFormat = options.eventTimeFormat || props.defaultTimeFormat;
+ let timeText = buildSegTimeText(seg, timeFormat, context, props.defaultDisplayEventTime, props.defaultDisplayEventEnd);
+ return (h(EventContainer, Object.assign({}, props /* includes elRef */, { elTag: "a", elStyle: {
+ borderColor: ui.borderColor,
+ backgroundColor: ui.backgroundColor,
+ }, elAttrs: getSegAnchorAttrs(seg, context), defaultGenerator: renderInnerContent$1, timeText: timeText }), (InnerContent, eventContentArg) => (h(p, null,
+ h(InnerContent, { elTag: "div", elClasses: ['fc-event-main'], elStyle: { color: eventContentArg.textColor } }),
+ Boolean(eventContentArg.isStartResizable) && (h("div", { className: "fc-event-resizer fc-event-resizer-start" })),
+ Boolean(eventContentArg.isEndResizable) && (h("div", { className: "fc-event-resizer fc-event-resizer-end" }))))));
+ }
+ }
+ function renderInnerContent$1(innerProps) {
+ return (h("div", { className: "fc-event-main-frame" },
+ innerProps.timeText && (h("div", { className: "fc-event-time" }, innerProps.timeText)),
+ h("div", { className: "fc-event-title-container" },
+ h("div", { className: "fc-event-title fc-sticky" }, innerProps.event.title || h(p, null, "\u00A0")))));
+ }
+
+ const NowIndicatorContainer = (props) => (h(ViewContextType.Consumer, null, (context) => {
+ let { options } = context;
+ let renderProps = {
+ isAxis: props.isAxis,
+ date: context.dateEnv.toDate(props.date),
+ view: context.viewApi,
+ };
+ return (h(ContentContainer, Object.assign({}, props /* includes children */, { elTag: props.elTag || 'div', renderProps: renderProps, generatorName: "nowIndicatorContent", generator: options.nowIndicatorContent, classNameGenerator: options.nowIndicatorClassNames, didMount: options.nowIndicatorDidMount, willUnmount: options.nowIndicatorWillUnmount })));
+ }));
+
+ const DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });
+ class DayCellContainer extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.refineRenderProps = memoizeObjArg(refineRenderProps);
+ }
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let renderProps = this.refineRenderProps({
+ date: props.date,
+ dateProfile: props.dateProfile,
+ todayRange: props.todayRange,
+ showDayNumber: props.showDayNumber,
+ extraRenderProps: props.extraRenderProps,
+ viewApi: context.viewApi,
+ dateEnv: context.dateEnv,
+ });
+ return (h(ContentContainer, Object.assign({}, props /* includes children */, { elClasses: [
+ ...getDayClassNames(renderProps, context.theme),
+ ...(props.elClasses || []),
+ ], elAttrs: Object.assign(Object.assign({}, props.elAttrs), (renderProps.isDisabled ? {} : { 'data-date': formatDayString(props.date) })), renderProps: renderProps, generatorName: "dayCellContent", generator: options.dayCellContent || props.defaultGenerator, classNameGenerator:
+ // don't use custom classNames if disabled
+ renderProps.isDisabled ? undefined : options.dayCellClassNames, didMount: options.dayCellDidMount, willUnmount: options.dayCellWillUnmount })));
+ }
+ }
+ function hasCustomDayCellContent(options) {
+ return Boolean(options.dayCellContent || hasCustomRenderingHandler('dayCellContent', options));
+ }
+ function refineRenderProps(raw) {
+ let { date, dateEnv } = raw;
+ let dayMeta = getDateMeta(date, raw.todayRange, null, raw.dateProfile);
+ return Object.assign(Object.assign(Object.assign({ date: dateEnv.toDate(date), view: raw.viewApi }, dayMeta), { dayNumberText: raw.showDayNumber ? dateEnv.format(date, DAY_NUM_FORMAT) : '' }), raw.extraRenderProps);
+ }
+
+ class BgEvent extends BaseComponent {
+ render() {
+ let { props } = this;
+ let { seg } = props;
+ return (h(EventContainer, { elTag: "div", elClasses: ['fc-bg-event'], elStyle: { backgroundColor: seg.eventRange.ui.backgroundColor }, defaultGenerator: renderInnerContent, seg: seg, timeText: "", isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, isPast: props.isPast, isFuture: props.isFuture, isToday: props.isToday, disableDragging: true, disableResizing: true }));
+ }
+ }
+ function renderInnerContent(props) {
+ let { title } = props.event;
+ return title && (h("div", { className: "fc-event-title" }, props.event.title));
+ }
+ function renderFill(fillType) {
+ return (h("div", { className: `fc-${fillType}` }));
+ }
+
+ const WeekNumberContainer = (props) => (h(ViewContextType.Consumer, null, (context) => {
+ let { dateEnv, options } = context;
+ let { date } = props;
+ let format = options.weekNumberFormat || props.defaultFormat;
+ let num = dateEnv.computeWeekNumber(date); // TODO: somehow use for formatting as well?
+ let text = dateEnv.format(date, format);
+ let renderProps = { num, text, date };
+ return (h(ContentContainer // why isn't WeekNumberContentArg being auto-detected?
+ , Object.assign({}, props /* includes children */, { renderProps: renderProps, generatorName: "weekNumberContent", generator: options.weekNumberContent || renderInner, classNameGenerator: options.weekNumberClassNames, didMount: options.weekNumberDidMount, willUnmount: options.weekNumberWillUnmount })));
+ }));
+ function renderInner(innerProps) {
+ return innerProps.text;
+ }
+
+ const PADDING_FROM_VIEWPORT = 10;
+ class Popover extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ titleId: getUniqueDomId(),
+ };
+ this.handleRootEl = (el) => {
+ this.rootEl = el;
+ if (this.props.elRef) {
+ setRef(this.props.elRef, el);
+ }
+ };
+ // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
+ this.handleDocumentMouseDown = (ev) => {
+ // only hide the popover if the click happened outside the popover
+ const target = getEventTargetViaRoot(ev);
+ if (!this.rootEl.contains(target)) {
+ this.handleCloseClick();
+ }
+ };
+ this.handleDocumentKeyDown = (ev) => {
+ if (ev.key === 'Escape') {
+ this.handleCloseClick();
+ }
+ };
+ this.handleCloseClick = () => {
+ let { onClose } = this.props;
+ if (onClose) {
+ onClose();
+ }
+ };
+ }
+ render() {
+ let { theme, options } = this.context;
+ let { props, state } = this;
+ let classNames = [
+ 'fc-popover',
+ theme.getClass('popover'),
+ ].concat(props.extraClassNames || []);
+ return j(h("div", Object.assign({}, props.extraAttrs, { id: props.id, className: classNames.join(' '), "aria-labelledby": state.titleId, ref: this.handleRootEl }),
+ h("div", { className: 'fc-popover-header ' + theme.getClass('popoverHeader') },
+ h("span", { className: "fc-popover-title", id: state.titleId }, props.title),
+ h("span", { className: 'fc-popover-close ' + theme.getIconClass('close'), title: options.closeHint, onClick: this.handleCloseClick })),
+ h("div", { className: 'fc-popover-body ' + theme.getClass('popoverContent') }, props.children)), props.parentEl);
+ }
+ componentDidMount() {
+ document.addEventListener('mousedown', this.handleDocumentMouseDown);
+ document.addEventListener('keydown', this.handleDocumentKeyDown);
+ this.updateSize();
+ }
+ componentWillUnmount() {
+ document.removeEventListener('mousedown', this.handleDocumentMouseDown);
+ document.removeEventListener('keydown', this.handleDocumentKeyDown);
+ }
+ updateSize() {
+ let { isRtl } = this.context;
+ let { alignmentEl, alignGridTop } = this.props;
+ let { rootEl } = this;
+ let alignmentRect = computeClippedClientRect(alignmentEl);
+ if (alignmentRect) {
+ let popoverDims = rootEl.getBoundingClientRect();
+ // position relative to viewport
+ let popoverTop = alignGridTop
+ ? elementClosest(alignmentEl, '.fc-scrollgrid').getBoundingClientRect().top
+ : alignmentRect.top;
+ let popoverLeft = isRtl ? alignmentRect.right - popoverDims.width : alignmentRect.left;
+ // constrain
+ popoverTop = Math.max(popoverTop, PADDING_FROM_VIEWPORT);
+ popoverLeft = Math.min(popoverLeft, document.documentElement.clientWidth - PADDING_FROM_VIEWPORT - popoverDims.width);
+ popoverLeft = Math.max(popoverLeft, PADDING_FROM_VIEWPORT);
+ let origin = rootEl.offsetParent.getBoundingClientRect();
+ applyStyle(rootEl, {
+ top: popoverTop - origin.top,
+ left: popoverLeft - origin.left,
+ });
+ }
+ }
+ }
+
+ class MorePopover extends DateComponent {
+ constructor() {
+ super(...arguments);
+ this.handleRootEl = (rootEl) => {
+ this.rootEl = rootEl;
+ if (rootEl) {
+ this.context.registerInteractiveComponent(this, {
+ el: rootEl,
+ useEventCenter: false,
+ });
+ }
+ else {
+ this.context.unregisterInteractiveComponent(this);
+ }
+ };
+ }
+ render() {
+ let { options, dateEnv } = this.context;
+ let { props } = this;
+ let { startDate, todayRange, dateProfile } = props;
+ let title = dateEnv.format(startDate, options.dayPopoverFormat);
+ return (h(DayCellContainer, { elRef: this.handleRootEl, date: startDate, dateProfile: dateProfile, todayRange: todayRange }, (InnerContent, renderProps, elAttrs) => (h(Popover, { elRef: elAttrs.ref, id: props.id, title: title, extraClassNames: ['fc-more-popover'].concat(elAttrs.className || []), extraAttrs: elAttrs /* TODO: make these time-based when not whole-day? */, parentEl: props.parentEl, alignmentEl: props.alignmentEl, alignGridTop: props.alignGridTop, onClose: props.onClose },
+ hasCustomDayCellContent(options) && (h(InnerContent, { elTag: "div", elClasses: ['fc-more-popover-misc'] })),
+ props.children))));
+ }
+ queryHit(positionLeft, positionTop, elWidth, elHeight) {
+ let { rootEl, props } = this;
+ if (positionLeft >= 0 && positionLeft < elWidth &&
+ positionTop >= 0 && positionTop < elHeight) {
+ return {
+ dateProfile: props.dateProfile,
+ dateSpan: Object.assign({ allDay: true, range: {
+ start: props.startDate,
+ end: props.endDate,
+ } }, props.extraDateSpan),
+ dayEl: rootEl,
+ rect: {
+ left: 0,
+ top: 0,
+ right: elWidth,
+ bottom: elHeight,
+ },
+ layer: 1, // important when comparing with hits from other components
+ };
+ }
+ return null;
+ }
+ }
+
+ class MoreLinkContainer extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ isPopoverOpen: false,
+ popoverId: getUniqueDomId(),
+ };
+ this.handleLinkEl = (linkEl) => {
+ this.linkEl = linkEl;
+ if (this.props.elRef) {
+ setRef(this.props.elRef, linkEl);
+ }
+ };
+ this.handleClick = (ev) => {
+ let { props, context } = this;
+ let { moreLinkClick } = context.options;
+ let date = computeRange(props).start;
+ function buildPublicSeg(seg) {
+ let { def, instance, range } = seg.eventRange;
+ return {
+ event: new EventImpl(context, def, instance),
+ start: context.dateEnv.toDate(range.start),
+ end: context.dateEnv.toDate(range.end),
+ isStart: seg.isStart,
+ isEnd: seg.isEnd,
+ };
+ }
+ if (typeof moreLinkClick === 'function') {
+ moreLinkClick = moreLinkClick({
+ date,
+ allDay: Boolean(props.allDayDate),
+ allSegs: props.allSegs.map(buildPublicSeg),
+ hiddenSegs: props.hiddenSegs.map(buildPublicSeg),
+ jsEvent: ev,
+ view: context.viewApi,
+ });
+ }
+ if (!moreLinkClick || moreLinkClick === 'popover') {
+ this.setState({ isPopoverOpen: true });
+ }
+ else if (typeof moreLinkClick === 'string') { // a view name
+ context.calendarApi.zoomTo(date, moreLinkClick);
+ }
+ };
+ this.handlePopoverClose = () => {
+ this.setState({ isPopoverOpen: false });
+ };
+ }
+ render() {
+ let { props, state } = this;
+ return (h(ViewContextType.Consumer, null, (context) => {
+ let { viewApi, options, calendarApi } = context;
+ let { moreLinkText } = options;
+ let { moreCnt } = props;
+ let range = computeRange(props);
+ let text = typeof moreLinkText === 'function' // TODO: eventually use formatWithOrdinals
+ ? moreLinkText.call(calendarApi, moreCnt)
+ : `+${moreCnt} ${moreLinkText}`;
+ let hint = formatWithOrdinals(options.moreLinkHint, [moreCnt], text);
+ let renderProps = {
+ num: moreCnt,
+ shortText: `+${moreCnt}`,
+ text,
+ view: viewApi,
+ };
+ return (h(p, null,
+ Boolean(props.moreCnt) && (h(ContentContainer, { elTag: props.elTag || 'a', elRef: this.handleLinkEl, elClasses: [
+ ...(props.elClasses || []),
+ 'fc-more-link',
+ ], elStyle: props.elStyle, elAttrs: Object.assign(Object.assign(Object.assign({}, props.elAttrs), createAriaClickAttrs(this.handleClick)), { title: hint, 'aria-expanded': state.isPopoverOpen, 'aria-controls': state.isPopoverOpen ? state.popoverId : '' }), renderProps: renderProps, generatorName: "moreLinkContent", generator: options.moreLinkContent || props.defaultGenerator || renderMoreLinkInner, classNameGenerator: options.moreLinkClassNames, didMount: options.moreLinkDidMount, willUnmount: options.moreLinkWillUnmount }, props.children)),
+ state.isPopoverOpen && (h(MorePopover, { id: state.popoverId, startDate: range.start, endDate: range.end, dateProfile: props.dateProfile, todayRange: props.todayRange, extraDateSpan: props.extraDateSpan, parentEl: this.parentEl, alignmentEl: props.alignmentElRef ?
+ props.alignmentElRef.current :
+ this.linkEl, alignGridTop: props.alignGridTop, onClose: this.handlePopoverClose }, props.popoverContent()))));
+ }));
+ }
+ componentDidMount() {
+ this.updateParentEl();
+ }
+ componentDidUpdate() {
+ this.updateParentEl();
+ }
+ updateParentEl() {
+ if (this.linkEl) {
+ this.parentEl = elementClosest(this.linkEl, '.fc-view-harness');
+ }
+ }
+ }
+ function renderMoreLinkInner(props) {
+ return props.text;
+ }
+ function computeRange(props) {
+ if (props.allDayDate) {
+ return {
+ start: props.allDayDate,
+ end: addDays(props.allDayDate, 1),
+ };
+ }
+ let { hiddenSegs } = props;
+ return {
+ start: computeEarliestSegStart(hiddenSegs),
+ end: computeLatestSegEnd(hiddenSegs),
+ };
+ }
+ function computeEarliestSegStart(segs) {
+ return segs.reduce(pickEarliestStart).eventRange.range.start;
+ }
+ function pickEarliestStart(seg0, seg1) {
+ return seg0.eventRange.range.start < seg1.eventRange.range.start ? seg0 : seg1;
+ }
+ function computeLatestSegEnd(segs) {
+ return segs.reduce(pickLatestEnd).eventRange.range.end;
+ }
+ function pickLatestEnd(seg0, seg1) {
+ return seg0.eventRange.range.end > seg1.eventRange.range.end ? seg0 : seg1;
+ }
+
+ class ViewContainer$1 extends BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let renderProps = { view: context.viewApi };
+ return (h(ContentContainer, Object.assign({}, props, { elTag: props.elTag || 'div', elClasses: [
+ ...buildViewClassNames(props.viewSpec),
+ ...(props.elClasses || []),
+ ], renderProps: renderProps, classNameGenerator: options.viewClassNames, generatorName: undefined, generator: undefined, didMount: options.viewDidMount, willUnmount: options.viewWillUnmount }), () => props.children));
+ }
+ }
+ function buildViewClassNames(viewSpec) {
+ return [
+ `fc-${viewSpec.type}-view`,
+ 'fc-view',
+ ];
+ }
+
+ function injectStyles(css) {
+ if (!css || typeof document === 'undefined') {
+ return;
+ }
+ const head = document.head || document.getElementsByTagName('head')[0];
+ const style = document.createElement('style');
+ style.type = 'text/css';
+ head.appendChild(style);
+ if (style.styleSheet) {
+ style.styleSheet.cssText = css;
+ }
+ else {
+ style.appendChild(document.createTextNode(css));
+ }
+ }
+
+ const EVENT_SOURCE_REFINERS = {
+ id: String,
+ defaultAllDay: Boolean,
+ url: String,
+ format: String,
+ events: identity,
+ eventDataTransform: identity,
+ // for any network-related sources
+ success: identity,
+ failure: identity,
+ };
+ function parseEventSource(raw, context, refiners = buildEventSourceRefiners(context)) {
+ let rawObj;
+ if (typeof raw === 'string') {
+ rawObj = { url: raw };
+ }
+ else if (typeof raw === 'function' || Array.isArray(raw)) {
+ rawObj = { events: raw };
+ }
+ else if (typeof raw === 'object' && raw) { // not null
+ rawObj = raw;
+ }
+ if (rawObj) {
+ let { refined, extra } = refineProps(rawObj, refiners);
+ let metaRes = buildEventSourceMeta(refined, context);
+ if (metaRes) {
+ return {
+ _raw: raw,
+ isFetching: false,
+ latestFetchId: '',
+ fetchRange: null,
+ defaultAllDay: refined.defaultAllDay,
+ eventDataTransform: refined.eventDataTransform,
+ success: refined.success,
+ failure: refined.failure,
+ publicId: refined.id || '',
+ sourceId: guid(),
+ sourceDefId: metaRes.sourceDefId,
+ meta: metaRes.meta,
+ ui: createEventUi(refined, context),
+ extendedProps: extra,
+ };
+ }
+ }
+ return null;
+ }
+ function buildEventSourceRefiners(context) {
+ return Object.assign(Object.assign(Object.assign({}, EVENT_UI_REFINERS), EVENT_SOURCE_REFINERS), context.pluginHooks.eventSourceRefiners);
+ }
+ function buildEventSourceMeta(raw, context) {
+ let defs = context.pluginHooks.eventSourceDefs;
+ for (let i = defs.length - 1; i >= 0; i -= 1) { // later-added plugins take precedence
+ let def = defs[i];
+ let meta = def.parseMeta(raw);
+ if (meta) {
+ return { sourceDefId: i, meta };
+ }
+ }
+ return null;
+ }
+
+ class CalendarImpl {
+ getCurrentData() {
+ return this.currentDataManager.getCurrentData();
+ }
+ dispatch(action) {
+ this.currentDataManager.dispatch(action);
+ }
+ get view() { return this.getCurrentData().viewApi; }
+ batchRendering(callback) {
+ callback();
+ }
+ updateSize() {
+ this.trigger('_resize', true);
+ }
+ // Options
+ // -----------------------------------------------------------------------------------------------------------------
+ setOption(name, val) {
+ this.dispatch({
+ type: 'SET_OPTION',
+ optionName: name,
+ rawOptionValue: val,
+ });
+ }
+ getOption(name) {
+ return this.currentDataManager.currentCalendarOptionsInput[name];
+ }
+ getAvailableLocaleCodes() {
+ return Object.keys(this.getCurrentData().availableRawLocales);
+ }
+ // Trigger
+ // -----------------------------------------------------------------------------------------------------------------
+ on(handlerName, handler) {
+ let { currentDataManager } = this;
+ if (currentDataManager.currentCalendarOptionsRefiners[handlerName]) {
+ currentDataManager.emitter.on(handlerName, handler);
+ }
+ else {
+ console.warn(`Unknown listener name '${handlerName}'`);
+ }
+ }
+ off(handlerName, handler) {
+ this.currentDataManager.emitter.off(handlerName, handler);
+ }
+ // not meant for public use
+ trigger(handlerName, ...args) {
+ this.currentDataManager.emitter.trigger(handlerName, ...args);
+ }
+ // View
+ // -----------------------------------------------------------------------------------------------------------------
+ changeView(viewType, dateOrRange) {
+ this.batchRendering(() => {
+ this.unselect();
+ if (dateOrRange) {
+ if (dateOrRange.start && dateOrRange.end) { // a range
+ this.dispatch({
+ type: 'CHANGE_VIEW_TYPE',
+ viewType,
+ });
+ this.dispatch({
+ type: 'SET_OPTION',
+ optionName: 'visibleRange',
+ rawOptionValue: dateOrRange,
+ });
+ }
+ else {
+ let { dateEnv } = this.getCurrentData();
+ this.dispatch({
+ type: 'CHANGE_VIEW_TYPE',
+ viewType,
+ dateMarker: dateEnv.createMarker(dateOrRange),
+ });
+ }
+ }
+ else {
+ this.dispatch({
+ type: 'CHANGE_VIEW_TYPE',
+ viewType,
+ });
+ }
+ });
+ }
+ // Forces navigation to a view for the given date.
+ // `viewType` can be a specific view name or a generic one like "week" or "day".
+ // needs to change
+ zoomTo(dateMarker, viewType) {
+ let state = this.getCurrentData();
+ let spec;
+ viewType = viewType || 'day'; // day is default zoom
+ spec = state.viewSpecs[viewType] || this.getUnitViewSpec(viewType);
+ this.unselect();
+ if (spec) {
+ this.dispatch({
+ type: 'CHANGE_VIEW_TYPE',
+ viewType: spec.type,
+ dateMarker,
+ });
+ }
+ else {
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker,
+ });
+ }
+ }
+ // Given a duration singular unit, like "week" or "day", finds a matching view spec.
+ // Preference is given to views that have corresponding buttons.
+ getUnitViewSpec(unit) {
+ let { viewSpecs, toolbarConfig } = this.getCurrentData();
+ let viewTypes = [].concat(toolbarConfig.header ? toolbarConfig.header.viewsWithButtons : [], toolbarConfig.footer ? toolbarConfig.footer.viewsWithButtons : []);
+ let i;
+ let spec;
+ for (let viewType in viewSpecs) {
+ viewTypes.push(viewType);
+ }
+ for (i = 0; i < viewTypes.length; i += 1) {
+ spec = viewSpecs[viewTypes[i]];
+ if (spec) {
+ if (spec.singleUnit === unit) {
+ return spec;
+ }
+ }
+ }
+ return null;
+ }
+ // Current Date
+ // -----------------------------------------------------------------------------------------------------------------
+ prev() {
+ this.unselect();
+ this.dispatch({ type: 'PREV' });
+ }
+ next() {
+ this.unselect();
+ this.dispatch({ type: 'NEXT' });
+ }
+ prevYear() {
+ let state = this.getCurrentData();
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: state.dateEnv.addYears(state.currentDate, -1),
+ });
+ }
+ nextYear() {
+ let state = this.getCurrentData();
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: state.dateEnv.addYears(state.currentDate, 1),
+ });
+ }
+ today() {
+ let state = this.getCurrentData();
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: getNow(state.calendarOptions.now, state.dateEnv),
+ });
+ }
+ gotoDate(zonedDateInput) {
+ let state = this.getCurrentData();
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: state.dateEnv.createMarker(zonedDateInput),
+ });
+ }
+ incrementDate(deltaInput) {
+ let state = this.getCurrentData();
+ let delta = createDuration(deltaInput);
+ if (delta) { // else, warn about invalid input?
+ this.unselect();
+ this.dispatch({
+ type: 'CHANGE_DATE',
+ dateMarker: state.dateEnv.add(state.currentDate, delta),
+ });
+ }
+ }
+ getDate() {
+ let state = this.getCurrentData();
+ return state.dateEnv.toDate(state.currentDate);
+ }
+ // Date Formatting Utils
+ // -----------------------------------------------------------------------------------------------------------------
+ formatDate(d, formatter) {
+ let { dateEnv } = this.getCurrentData();
+ return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));
+ }
+ // `settings` is for formatter AND isEndExclusive
+ formatRange(d0, d1, settings) {
+ let { dateEnv } = this.getCurrentData();
+ return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings), settings);
+ }
+ formatIso(d, omitTime) {
+ let { dateEnv } = this.getCurrentData();
+ return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime });
+ }
+ // Date Selection / Event Selection / DayClick
+ // -----------------------------------------------------------------------------------------------------------------
+ select(dateOrObj, endDate) {
+ let selectionInput;
+ if (endDate == null) {
+ if (dateOrObj.start != null) {
+ selectionInput = dateOrObj;
+ }
+ else {
+ selectionInput = {
+ start: dateOrObj,
+ end: null,
+ };
+ }
+ }
+ else {
+ selectionInput = {
+ start: dateOrObj,
+ end: endDate,
+ };
+ }
+ let state = this.getCurrentData();
+ let selection = parseDateSpan(selectionInput, state.dateEnv, createDuration({ days: 1 }));
+ if (selection) { // throw parse error otherwise?
+ this.dispatch({ type: 'SELECT_DATES', selection });
+ triggerDateSelect(selection, null, state);
+ }
+ }
+ unselect(pev) {
+ let state = this.getCurrentData();
+ if (state.dateSelection) {
+ this.dispatch({ type: 'UNSELECT_DATES' });
+ triggerDateUnselect(pev, state);
+ }
+ }
+ // Public Events API
+ // -----------------------------------------------------------------------------------------------------------------
+ addEvent(eventInput, sourceInput) {
+ if (eventInput instanceof EventImpl) {
+ let def = eventInput._def;
+ let instance = eventInput._instance;
+ let currentData = this.getCurrentData();
+ // not already present? don't want to add an old snapshot
+ if (!currentData.eventStore.defs[def.defId]) {
+ this.dispatch({
+ type: 'ADD_EVENTS',
+ eventStore: eventTupleToStore({ def, instance }), // TODO: better util for two args?
+ });
+ this.triggerEventAdd(eventInput);
+ }
+ return eventInput;
+ }
+ let state = this.getCurrentData();
+ let eventSource;
+ if (sourceInput instanceof EventSourceImpl) {
+ eventSource = sourceInput.internalEventSource;
+ }
+ else if (typeof sourceInput === 'boolean') {
+ if (sourceInput) { // true. part of the first event source
+ [eventSource] = hashValuesToArray(state.eventSources);
+ }
+ }
+ else if (sourceInput != null) { // an ID. accepts a number too
+ let sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function
+ if (!sourceApi) {
+ console.warn(`Could not find an event source with ID "${sourceInput}"`); // TODO: test
+ return null;
+ }
+ eventSource = sourceApi.internalEventSource;
+ }
+ let tuple = parseEvent(eventInput, eventSource, state, false);
+ if (tuple) {
+ let newEventApi = new EventImpl(state, tuple.def, tuple.def.recurringDef ? null : tuple.instance);
+ this.dispatch({
+ type: 'ADD_EVENTS',
+ eventStore: eventTupleToStore(tuple),
+ });
+ this.triggerEventAdd(newEventApi);
+ return newEventApi;
+ }
+ return null;
+ }
+ triggerEventAdd(eventApi) {
+ let { emitter } = this.getCurrentData();
+ emitter.trigger('eventAdd', {
+ event: eventApi,
+ relatedEvents: [],
+ revert: () => {
+ this.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: eventApiToStore(eventApi),
+ });
+ },
+ });
+ }
+ // TODO: optimize
+ getEventById(id) {
+ let state = this.getCurrentData();
+ let { defs, instances } = state.eventStore;
+ id = String(id);
+ for (let defId in defs) {
+ let def = defs[defId];
+ if (def.publicId === id) {
+ if (def.recurringDef) {
+ return new EventImpl(state, def, null);
+ }
+ for (let instanceId in instances) {
+ let instance = instances[instanceId];
+ if (instance.defId === def.defId) {
+ return new EventImpl(state, def, instance);
+ }
+ }
+ }
+ }
+ return null;
+ }
+ getEvents() {
+ let currentData = this.getCurrentData();
+ return buildEventApis(currentData.eventStore, currentData);
+ }
+ removeAllEvents() {
+ this.dispatch({ type: 'REMOVE_ALL_EVENTS' });
+ }
+ // Public Event Sources API
+ // -----------------------------------------------------------------------------------------------------------------
+ getEventSources() {
+ let state = this.getCurrentData();
+ let sourceHash = state.eventSources;
+ let sourceApis = [];
+ for (let internalId in sourceHash) {
+ sourceApis.push(new EventSourceImpl(state, sourceHash[internalId]));
+ }
+ return sourceApis;
+ }
+ getEventSourceById(id) {
+ let state = this.getCurrentData();
+ let sourceHash = state.eventSources;
+ id = String(id);
+ for (let sourceId in sourceHash) {
+ if (sourceHash[sourceId].publicId === id) {
+ return new EventSourceImpl(state, sourceHash[sourceId]);
+ }
+ }
+ return null;
+ }
+ addEventSource(sourceInput) {
+ let state = this.getCurrentData();
+ if (sourceInput instanceof EventSourceImpl) {
+ // not already present? don't want to add an old snapshot
+ if (!state.eventSources[sourceInput.internalEventSource.sourceId]) {
+ this.dispatch({
+ type: 'ADD_EVENT_SOURCES',
+ sources: [sourceInput.internalEventSource],
+ });
+ }
+ return sourceInput;
+ }
+ let eventSource = parseEventSource(sourceInput, state);
+ if (eventSource) { // TODO: error otherwise?
+ this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] });
+ return new EventSourceImpl(state, eventSource);
+ }
+ return null;
+ }
+ removeAllEventSources() {
+ this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });
+ }
+ refetchEvents() {
+ this.dispatch({ type: 'FETCH_EVENT_SOURCES', isRefetch: true });
+ }
+ // Scroll
+ // -----------------------------------------------------------------------------------------------------------------
+ scrollToTime(timeInput) {
+ let time = createDuration(timeInput);
+ if (time) {
+ this.trigger('_scrollRequest', { time });
+ }
+ }
+ }
+
+ class Store {
+ constructor() {
+ this.handlers = [];
+ }
+ set(value) {
+ this.currentValue = value;
+ for (let handler of this.handlers) {
+ handler(value);
+ }
+ }
+ subscribe(handler) {
+ this.handlers.push(handler);
+ if (this.currentValue !== undefined) {
+ handler(this.currentValue);
+ }
+ }
+ }
+
+ /*
+ Subscribers will get a LIST of CustomRenderings
+ */
+ class CustomRenderingStore extends Store {
+ constructor() {
+ super(...arguments);
+ this.map = new Map();
+ }
+ // for consistent order
+ handle(customRendering) {
+ const { map } = this;
+ let updated = false;
+ if (customRendering.isActive) {
+ map.set(customRendering.id, customRendering);
+ updated = true;
+ }
+ else if (map.has(customRendering.id)) {
+ map.delete(customRendering.id);
+ updated = true;
+ }
+ if (updated) {
+ this.set(map);
+ }
+ }
+ }
+
+ var internal = {
+ __proto__: null,
+ BASE_OPTION_DEFAULTS: BASE_OPTION_DEFAULTS,
+ identity: identity,
+ refineProps: refineProps,
+ createEventInstance: createEventInstance,
+ parseEventDef: parseEventDef,
+ refineEventDef: refineEventDef,
+ parseBusinessHours: parseBusinessHours,
+ padStart: padStart,
+ isInt: isInt,
+ parseFieldSpecs: parseFieldSpecs,
+ compareByFieldSpecs: compareByFieldSpecs,
+ flexibleCompare: flexibleCompare,
+ preventSelection: preventSelection,
+ allowSelection: allowSelection,
+ preventContextMenu: preventContextMenu,
+ allowContextMenu: allowContextMenu,
+ compareNumbers: compareNumbers,
+ enableCursor: enableCursor,
+ disableCursor: disableCursor,
+ guid: guid,
+ computeVisibleDayRange: computeVisibleDayRange,
+ isMultiDayRange: isMultiDayRange,
+ diffDates: diffDates,
+ removeExact: removeExact,
+ isArraysEqual: isArraysEqual,
+ memoize: memoize,
+ memoizeObjArg: memoizeObjArg,
+ memoizeArraylike: memoizeArraylike,
+ memoizeHashlike: memoizeHashlike,
+ intersectRects: intersectRects,
+ pointInsideRect: pointInsideRect,
+ constrainPoint: constrainPoint,
+ getRectCenter: getRectCenter,
+ diffPoints: diffPoints,
+ translateRect: translateRect,
+ mapHash: mapHash,
+ filterHash: filterHash,
+ isPropsEqual: isPropsEqual,
+ compareObjs: compareObjs,
+ collectFromHash: collectFromHash,
+ findElements: findElements,
+ findDirectChildren: findDirectChildren,
+ removeElement: removeElement,
+ applyStyle: applyStyle,
+ elementMatches: elementMatches,
+ elementClosest: elementClosest,
+ getElRoot: getElRoot,
+ getEventTargetViaRoot: getEventTargetViaRoot,
+ getUniqueDomId: getUniqueDomId,
+ parseClassNames: parseClassNames,
+ getCanVGrowWithinCell: getCanVGrowWithinCell,
+ createEmptyEventStore: createEmptyEventStore,
+ mergeEventStores: mergeEventStores,
+ getRelevantEvents: getRelevantEvents,
+ eventTupleToStore: eventTupleToStore,
+ combineEventUis: combineEventUis,
+ createEventUi: createEventUi,
+ Splitter: Splitter,
+ getDayClassNames: getDayClassNames,
+ getDateMeta: getDateMeta,
+ getSlotClassNames: getSlotClassNames,
+ buildNavLinkAttrs: buildNavLinkAttrs,
+ preventDefault: preventDefault,
+ whenTransitionDone: whenTransitionDone,
+ computeInnerRect: computeInnerRect,
+ computeEdges: computeEdges,
+ getClippingParents: getClippingParents,
+ computeRect: computeRect,
+ unpromisify: unpromisify,
+ Emitter: Emitter,
+ rangeContainsMarker: rangeContainsMarker,
+ intersectRanges: intersectRanges,
+ rangesEqual: rangesEqual,
+ rangesIntersect: rangesIntersect,
+ rangeContainsRange: rangeContainsRange,
+ PositionCache: PositionCache,
+ ScrollController: ScrollController,
+ ElementScrollController: ElementScrollController,
+ WindowScrollController: WindowScrollController,
+ Theme: Theme,
+ ViewContextType: ViewContextType,
+ DateComponent: DateComponent,
+ DateProfileGenerator: DateProfileGenerator,
+ isDateSpansEqual: isDateSpansEqual,
+ addDays: addDays,
+ startOfDay: startOfDay,
+ addMs: addMs,
+ addWeeks: addWeeks,
+ diffWeeks: diffWeeks,
+ diffWholeWeeks: diffWholeWeeks,
+ diffWholeDays: diffWholeDays,
+ diffDayAndTime: diffDayAndTime,
+ diffDays: diffDays,
+ isValidDate: isValidDate,
+ createDuration: createDuration,
+ asCleanDays: asCleanDays,
+ multiplyDuration: multiplyDuration,
+ addDurations: addDurations,
+ asRoughMinutes: asRoughMinutes,
+ asRoughSeconds: asRoughSeconds,
+ asRoughMs: asRoughMs,
+ wholeDivideDurations: wholeDivideDurations,
+ greatestDurationDenominator: greatestDurationDenominator,
+ DateEnv: DateEnv,
+ createFormatter: createFormatter,
+ formatIsoTimeString: formatIsoTimeString,
+ formatDayString: formatDayString,
+ buildIsoString: buildIsoString,
+ NamedTimeZoneImpl: NamedTimeZoneImpl,
+ parseMarker: parse,
+ SegHierarchy: SegHierarchy,
+ buildEntryKey: buildEntryKey,
+ getEntrySpanEnd: getEntrySpanEnd,
+ binarySearch: binarySearch,
+ groupIntersectingEntries: groupIntersectingEntries,
+ intersectSpans: intersectSpans,
+ Interaction: Interaction,
+ interactionSettingsToStore: interactionSettingsToStore,
+ interactionSettingsStore: interactionSettingsStore,
+ ElementDragging: ElementDragging,
+ config: config,
+ parseDragMeta: parseDragMeta,
+ CalendarRoot: CalendarRoot,
+ DayHeader: DayHeader,
+ computeFallbackHeaderFormat: computeFallbackHeaderFormat,
+ TableDateCell: TableDateCell,
+ TableDowCell: TableDowCell,
+ DaySeriesModel: DaySeriesModel,
+ sliceEventStore: sliceEventStore,
+ hasBgRendering: hasBgRendering,
+ getElSeg: getElSeg,
+ buildSegTimeText: buildSegTimeText,
+ sortEventSegs: sortEventSegs,
+ getSegMeta: getSegMeta,
+ buildEventRangeKey: buildEventRangeKey,
+ getSegAnchorAttrs: getSegAnchorAttrs,
+ DayTableModel: DayTableModel,
+ Slicer: Slicer,
+ applyMutationToEventStore: applyMutationToEventStore,
+ isPropsValid: isPropsValid,
+ isInteractionValid: isInteractionValid,
+ isDateSelectionValid: isDateSelectionValid,
+ requestJson: requestJson,
+ BaseComponent: BaseComponent,
+ setRef: setRef,
+ DelayedRunner: DelayedRunner,
+ SimpleScrollGrid: SimpleScrollGrid,
+ hasShrinkWidth: hasShrinkWidth,
+ renderMicroColGroup: renderMicroColGroup,
+ getScrollGridClassNames: getScrollGridClassNames,
+ getSectionClassNames: getSectionClassNames,
+ getSectionHasLiquidHeight: getSectionHasLiquidHeight,
+ getAllowYScrolling: getAllowYScrolling,
+ renderChunkContent: renderChunkContent,
+ computeShrinkWidth: computeShrinkWidth,
+ sanitizeShrinkWidth: sanitizeShrinkWidth,
+ isColPropsEqual: isColPropsEqual,
+ renderScrollShim: renderScrollShim,
+ getStickyFooterScrollbar: getStickyFooterScrollbar,
+ getStickyHeaderDates: getStickyHeaderDates,
+ Scroller: Scroller,
+ getScrollbarWidths: getScrollbarWidths,
+ RefMap: RefMap,
+ getIsRtlScrollbarOnLeft: getIsRtlScrollbarOnLeft,
+ NowTimer: NowTimer,
+ ScrollResponder: ScrollResponder,
+ StandardEvent: StandardEvent,
+ NowIndicatorContainer: NowIndicatorContainer,
+ DayCellContainer: DayCellContainer,
+ hasCustomDayCellContent: hasCustomDayCellContent,
+ EventContainer: EventContainer,
+ renderFill: renderFill,
+ BgEvent: BgEvent,
+ WeekNumberContainer: WeekNumberContainer,
+ MoreLinkContainer: MoreLinkContainer,
+ computeEarliestSegStart: computeEarliestSegStart,
+ ViewContainer: ViewContainer$1,
+ triggerDateSelect: triggerDateSelect,
+ getDefaultEventEnd: getDefaultEventEnd,
+ injectStyles: injectStyles,
+ CalendarImpl: CalendarImpl,
+ EventImpl: EventImpl,
+ buildEventApis: buildEventApis,
+ buildElAttrs: buildElAttrs,
+ ContentContainer: ContentContainer,
+ CustomRenderingStore: CustomRenderingStore
+ };
+
+ var css_248z = ":root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-unselectable{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;user-select:none}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url(\"data:application/x-font-ttf;charset=utf-8;base64,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\") format(\"truetype\")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:\"\\e900\"}.fc-icon-chevron-right:before{content:\"\\e901\"}.fc-icon-chevrons-left:before{content:\"\\e902\"}.fc-icon-chevrons-right:before{content:\"\\e903\"}.fc-icon-minus-square:before{content:\"\\e904\"}.fc-icon-plus-square:before{content:\"\\e905\"}.fc-icon-x:before{content:\"\\e906\"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button::-moz-focus-inner{border-style:none;padding:0}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:\"\";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:\"\";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}";
+ injectStyles(css_248z);
+
+ const globalLocales = [];
+
+ const MINIMAL_RAW_EN_LOCALE = {
+ code: 'en',
+ week: {
+ dow: 0,
+ doy: 4, // 4 days need to be within the year to be considered the first week
+ },
+ direction: 'ltr',
+ buttonText: {
+ prev: 'prev',
+ next: 'next',
+ prevYear: 'prev year',
+ nextYear: 'next year',
+ year: 'year',
+ today: 'today',
+ month: 'month',
+ week: 'week',
+ day: 'day',
+ list: 'list',
+ },
+ weekText: 'W',
+ weekTextLong: 'Week',
+ closeHint: 'Close',
+ timeHint: 'Time',
+ eventHint: 'Event',
+ allDayText: 'all-day',
+ moreLinkText: 'more',
+ noEventsText: 'No events to display',
+ };
+ const RAW_EN_LOCALE = Object.assign(Object.assign({}, MINIMAL_RAW_EN_LOCALE), {
+ // Includes things we don't want other locales to inherit,
+ // things that derive from other translatable strings.
+ buttonHints: {
+ prev: 'Previous $0',
+ next: 'Next $0',
+ today(buttonText, unit) {
+ return (unit === 'day')
+ ? 'Today'
+ : `This ${buttonText}`;
+ },
+ }, viewHint: '$0 view', navLinkHint: 'Go to $0', moreLinkHint(eventCnt) {
+ return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
+ } });
+ function organizeRawLocales(explicitRawLocales) {
+ let defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
+ let allRawLocales = globalLocales.concat(explicitRawLocales);
+ let rawLocaleMap = {
+ en: RAW_EN_LOCALE,
+ };
+ for (let rawLocale of allRawLocales) {
+ rawLocaleMap[rawLocale.code] = rawLocale;
+ }
+ return {
+ map: rawLocaleMap,
+ defaultCode,
+ };
+ }
+ function buildLocale(inputSingular, available) {
+ if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {
+ return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);
+ }
+ return queryLocale(inputSingular, available);
+ }
+ function queryLocale(codeArg, available) {
+ let codes = [].concat(codeArg || []); // will convert to array
+ let raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;
+ return parseLocale(codeArg, codes, raw);
+ }
+ function queryRawLocale(codes, available) {
+ for (let i = 0; i < codes.length; i += 1) {
+ let parts = codes[i].toLocaleLowerCase().split('-');
+ for (let j = parts.length; j > 0; j -= 1) {
+ let simpleId = parts.slice(0, j).join('-');
+ if (available[simpleId]) {
+ return available[simpleId];
+ }
+ }
+ }
+ return null;
+ }
+ function parseLocale(codeArg, codes, raw) {
+ let merged = mergeProps([MINIMAL_RAW_EN_LOCALE, raw], ['buttonText']);
+ delete merged.code; // don't want this part of the options
+ let { week } = merged;
+ delete merged.week;
+ return {
+ codeArg,
+ codes,
+ week,
+ simpleNumberFormat: new Intl.NumberFormat(codeArg),
+ options: merged,
+ };
+ }
+
+ // TODO: easier way to add new hooks? need to update a million things
+ function createPlugin(input) {
+ return {
+ id: guid(),
+ name: input.name,
+ premiumReleaseDate: input.premiumReleaseDate ? new Date(input.premiumReleaseDate) : undefined,
+ deps: input.deps || [],
+ reducers: input.reducers || [],
+ isLoadingFuncs: input.isLoadingFuncs || [],
+ contextInit: [].concat(input.contextInit || []),
+ eventRefiners: input.eventRefiners || {},
+ eventDefMemberAdders: input.eventDefMemberAdders || [],
+ eventSourceRefiners: input.eventSourceRefiners || {},
+ isDraggableTransformers: input.isDraggableTransformers || [],
+ eventDragMutationMassagers: input.eventDragMutationMassagers || [],
+ eventDefMutationAppliers: input.eventDefMutationAppliers || [],
+ dateSelectionTransformers: input.dateSelectionTransformers || [],
+ datePointTransforms: input.datePointTransforms || [],
+ dateSpanTransforms: input.dateSpanTransforms || [],
+ views: input.views || {},
+ viewPropsTransformers: input.viewPropsTransformers || [],
+ isPropsValid: input.isPropsValid || null,
+ externalDefTransforms: input.externalDefTransforms || [],
+ viewContainerAppends: input.viewContainerAppends || [],
+ eventDropTransformers: input.eventDropTransformers || [],
+ componentInteractions: input.componentInteractions || [],
+ calendarInteractions: input.calendarInteractions || [],
+ themeClasses: input.themeClasses || {},
+ eventSourceDefs: input.eventSourceDefs || [],
+ cmdFormatter: input.cmdFormatter,
+ recurringTypes: input.recurringTypes || [],
+ namedTimeZonedImpl: input.namedTimeZonedImpl,
+ initialView: input.initialView || '',
+ elementDraggingImpl: input.elementDraggingImpl,
+ optionChangeHandlers: input.optionChangeHandlers || {},
+ scrollGridImpl: input.scrollGridImpl || null,
+ listenerRefiners: input.listenerRefiners || {},
+ optionRefiners: input.optionRefiners || {},
+ propSetHandlers: input.propSetHandlers || {},
+ };
+ }
+ function buildPluginHooks(pluginDefs, globalDefs) {
+ let currentPluginIds = {};
+ let hooks = {
+ premiumReleaseDate: undefined,
+ reducers: [],
+ isLoadingFuncs: [],
+ contextInit: [],
+ eventRefiners: {},
+ eventDefMemberAdders: [],
+ eventSourceRefiners: {},
+ isDraggableTransformers: [],
+ eventDragMutationMassagers: [],
+ eventDefMutationAppliers: [],
+ dateSelectionTransformers: [],
+ datePointTransforms: [],
+ dateSpanTransforms: [],
+ views: {},
+ viewPropsTransformers: [],
+ isPropsValid: null,
+ externalDefTransforms: [],
+ viewContainerAppends: [],
+ eventDropTransformers: [],
+ componentInteractions: [],
+ calendarInteractions: [],
+ themeClasses: {},
+ eventSourceDefs: [],
+ cmdFormatter: null,
+ recurringTypes: [],
+ namedTimeZonedImpl: null,
+ initialView: '',
+ elementDraggingImpl: null,
+ optionChangeHandlers: {},
+ scrollGridImpl: null,
+ listenerRefiners: {},
+ optionRefiners: {},
+ propSetHandlers: {},
+ };
+ function addDefs(defs) {
+ for (let def of defs) {
+ const pluginName = def.name;
+ const currentId = currentPluginIds[pluginName];
+ if (currentId === undefined) {
+ currentPluginIds[pluginName] = def.id;
+ addDefs(def.deps);
+ hooks = combineHooks(hooks, def);
+ }
+ else if (currentId !== def.id) {
+ // different ID than the one already added
+ console.warn(`Duplicate plugin '${pluginName}'`);
+ }
+ }
+ }
+ if (pluginDefs) {
+ addDefs(pluginDefs);
+ }
+ addDefs(globalDefs);
+ return hooks;
+ }
+ function buildBuildPluginHooks() {
+ let currentOverrideDefs = [];
+ let currentGlobalDefs = [];
+ let currentHooks;
+ return (overrideDefs, globalDefs) => {
+ if (!currentHooks || !isArraysEqual(overrideDefs, currentOverrideDefs) || !isArraysEqual(globalDefs, currentGlobalDefs)) {
+ currentHooks = buildPluginHooks(overrideDefs, globalDefs);
+ }
+ currentOverrideDefs = overrideDefs;
+ currentGlobalDefs = globalDefs;
+ return currentHooks;
+ };
+ }
+ function combineHooks(hooks0, hooks1) {
+ return {
+ premiumReleaseDate: compareOptionalDates(hooks0.premiumReleaseDate, hooks1.premiumReleaseDate),
+ reducers: hooks0.reducers.concat(hooks1.reducers),
+ isLoadingFuncs: hooks0.isLoadingFuncs.concat(hooks1.isLoadingFuncs),
+ contextInit: hooks0.contextInit.concat(hooks1.contextInit),
+ eventRefiners: Object.assign(Object.assign({}, hooks0.eventRefiners), hooks1.eventRefiners),
+ eventDefMemberAdders: hooks0.eventDefMemberAdders.concat(hooks1.eventDefMemberAdders),
+ eventSourceRefiners: Object.assign(Object.assign({}, hooks0.eventSourceRefiners), hooks1.eventSourceRefiners),
+ isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
+ eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
+ eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
+ dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
+ datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
+ dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
+ views: Object.assign(Object.assign({}, hooks0.views), hooks1.views),
+ viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
+ isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
+ externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
+ viewContainerAppends: hooks0.viewContainerAppends.concat(hooks1.viewContainerAppends),
+ eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
+ calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
+ componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),
+ themeClasses: Object.assign(Object.assign({}, hooks0.themeClasses), hooks1.themeClasses),
+ eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),
+ cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,
+ recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),
+ namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,
+ initialView: hooks0.initialView || hooks1.initialView,
+ elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,
+ optionChangeHandlers: Object.assign(Object.assign({}, hooks0.optionChangeHandlers), hooks1.optionChangeHandlers),
+ scrollGridImpl: hooks1.scrollGridImpl || hooks0.scrollGridImpl,
+ listenerRefiners: Object.assign(Object.assign({}, hooks0.listenerRefiners), hooks1.listenerRefiners),
+ optionRefiners: Object.assign(Object.assign({}, hooks0.optionRefiners), hooks1.optionRefiners),
+ propSetHandlers: Object.assign(Object.assign({}, hooks0.propSetHandlers), hooks1.propSetHandlers),
+ };
+ }
+ function compareOptionalDates(date0, date1) {
+ if (date0 === undefined) {
+ return date1;
+ }
+ if (date1 === undefined) {
+ return date0;
+ }
+ return new Date(Math.max(date0.valueOf(), date1.valueOf()));
+ }
+
+ class StandardTheme extends Theme {
+ }
+ StandardTheme.prototype.classes = {
+ root: 'fc-theme-standard',
+ tableCellShaded: 'fc-cell-shaded',
+ buttonGroup: 'fc-button-group',
+ button: 'fc-button fc-button-primary',
+ buttonActive: 'fc-button-active',
+ };
+ StandardTheme.prototype.baseIconClass = 'fc-icon';
+ StandardTheme.prototype.iconClasses = {
+ close: 'fc-icon-x',
+ prev: 'fc-icon-chevron-left',
+ next: 'fc-icon-chevron-right',
+ prevYear: 'fc-icon-chevrons-left',
+ nextYear: 'fc-icon-chevrons-right',
+ };
+ StandardTheme.prototype.rtlIconClasses = {
+ prev: 'fc-icon-chevron-right',
+ next: 'fc-icon-chevron-left',
+ prevYear: 'fc-icon-chevrons-right',
+ nextYear: 'fc-icon-chevrons-left',
+ };
+ StandardTheme.prototype.iconOverrideOption = 'buttonIcons'; // TODO: make TS-friendly
+ StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';
+ StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';
+
+ function compileViewDefs(defaultConfigs, overrideConfigs) {
+ let hash = {};
+ let viewType;
+ for (viewType in defaultConfigs) {
+ ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
+ }
+ for (viewType in overrideConfigs) {
+ ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
+ }
+ return hash;
+ }
+ function ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
+ if (hash[viewType]) {
+ return hash[viewType];
+ }
+ let viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);
+ if (viewDef) {
+ hash[viewType] = viewDef;
+ }
+ return viewDef;
+ }
+ function buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
+ let defaultConfig = defaultConfigs[viewType];
+ let overrideConfig = overrideConfigs[viewType];
+ let queryProp = (name) => ((defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :
+ ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null));
+ let theComponent = queryProp('component');
+ let superType = queryProp('superType');
+ let superDef = null;
+ if (superType) {
+ if (superType === viewType) {
+ throw new Error('Can\'t have a custom view type that references itself');
+ }
+ superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);
+ }
+ if (!theComponent && superDef) {
+ theComponent = superDef.component;
+ }
+ if (!theComponent) {
+ return null; // don't throw a warning, might be settings for a single-unit view
+ }
+ return {
+ type: viewType,
+ component: theComponent,
+ defaults: Object.assign(Object.assign({}, (superDef ? superDef.defaults : {})), (defaultConfig ? defaultConfig.rawOptions : {})),
+ overrides: Object.assign(Object.assign({}, (superDef ? superDef.overrides : {})), (overrideConfig ? overrideConfig.rawOptions : {})),
+ };
+ }
+
+ function parseViewConfigs(inputs) {
+ return mapHash(inputs, parseViewConfig);
+ }
+ function parseViewConfig(input) {
+ let rawOptions = typeof input === 'function' ?
+ { component: input } :
+ input;
+ let { component } = rawOptions;
+ if (rawOptions.content) {
+ component = createViewHookComponent(rawOptions);
+ // TODO: remove content/classNames/didMount/etc from options?
+ }
+ return {
+ superType: rawOptions.type,
+ component: component,
+ rawOptions, // includes type and component too :(
+ };
+ }
+ function createViewHookComponent(options) {
+ return (viewProps) => (h(ViewContextType.Consumer, null, (context) => (h(ContentContainer, { elTag: "div", elClasses: buildViewClassNames(context.viewSpec), renderProps: Object.assign(Object.assign({}, viewProps), { nextDayThreshold: context.options.nextDayThreshold }), generatorName: undefined, generator: options.content, classNameGenerator: options.classNames, didMount: options.didMount, willUnmount: options.willUnmount }))));
+ }
+
+ function buildViewSpecs(defaultInputs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
+ let defaultConfigs = parseViewConfigs(defaultInputs);
+ let overrideConfigs = parseViewConfigs(optionOverrides.views);
+ let viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);
+ return mapHash(viewDefs, (viewDef) => buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults));
+ }
+ function buildViewSpec(viewDef, overrideConfigs, optionOverrides, dynamicOptionOverrides, localeDefaults) {
+ let durationInput = viewDef.overrides.duration ||
+ viewDef.defaults.duration ||
+ dynamicOptionOverrides.duration ||
+ optionOverrides.duration;
+ let duration = null;
+ let durationUnit = '';
+ let singleUnit = '';
+ let singleUnitOverrides = {};
+ if (durationInput) {
+ duration = createDurationCached(durationInput);
+ if (duration) { // valid?
+ let denom = greatestDurationDenominator(duration);
+ durationUnit = denom.unit;
+ if (denom.value === 1) {
+ singleUnit = durationUnit;
+ singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].rawOptions : {};
+ }
+ }
+ }
+ let queryButtonText = (optionsSubset) => {
+ let buttonTextMap = optionsSubset.buttonText || {};
+ let buttonTextKey = viewDef.defaults.buttonTextKey;
+ if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {
+ return buttonTextMap[buttonTextKey];
+ }
+ if (buttonTextMap[viewDef.type] != null) {
+ return buttonTextMap[viewDef.type];
+ }
+ if (buttonTextMap[singleUnit] != null) {
+ return buttonTextMap[singleUnit];
+ }
+ return null;
+ };
+ let queryButtonTitle = (optionsSubset) => {
+ let buttonHints = optionsSubset.buttonHints || {};
+ let buttonKey = viewDef.defaults.buttonTextKey; // use same key as text
+ if (buttonKey != null && buttonHints[buttonKey] != null) {
+ return buttonHints[buttonKey];
+ }
+ if (buttonHints[viewDef.type] != null) {
+ return buttonHints[viewDef.type];
+ }
+ if (buttonHints[singleUnit] != null) {
+ return buttonHints[singleUnit];
+ }
+ return null;
+ };
+ return {
+ type: viewDef.type,
+ component: viewDef.component,
+ duration,
+ durationUnit,
+ singleUnit,
+ optionDefaults: viewDef.defaults,
+ optionOverrides: Object.assign(Object.assign({}, singleUnitOverrides), viewDef.overrides),
+ buttonTextOverride: queryButtonText(dynamicOptionOverrides) ||
+ queryButtonText(optionOverrides) || // constructor-specified buttonText lookup hash takes precedence
+ viewDef.overrides.buttonText,
+ buttonTextDefault: queryButtonText(localeDefaults) ||
+ viewDef.defaults.buttonText ||
+ queryButtonText(BASE_OPTION_DEFAULTS) ||
+ viewDef.type,
+ // not DRY
+ buttonTitleOverride: queryButtonTitle(dynamicOptionOverrides) ||
+ queryButtonTitle(optionOverrides) ||
+ viewDef.overrides.buttonHint,
+ buttonTitleDefault: queryButtonTitle(localeDefaults) ||
+ viewDef.defaults.buttonHint ||
+ queryButtonTitle(BASE_OPTION_DEFAULTS),
+ // will eventually fall back to buttonText
+ };
+ }
+ // hack to get memoization working
+ let durationInputMap = {};
+ function createDurationCached(durationInput) {
+ let json = JSON.stringify(durationInput);
+ let res = durationInputMap[json];
+ if (res === undefined) {
+ res = createDuration(durationInput);
+ durationInputMap[json] = res;
+ }
+ return res;
+ }
+
+ function reduceViewType(viewType, action) {
+ switch (action.type) {
+ case 'CHANGE_VIEW_TYPE':
+ viewType = action.viewType;
+ }
+ return viewType;
+ }
+
+ function reduceDynamicOptionOverrides(dynamicOptionOverrides, action) {
+ switch (action.type) {
+ case 'SET_OPTION':
+ return Object.assign(Object.assign({}, dynamicOptionOverrides), { [action.optionName]: action.rawOptionValue });
+ default:
+ return dynamicOptionOverrides;
+ }
+ }
+
+ function reduceDateProfile(currentDateProfile, action, currentDate, dateProfileGenerator) {
+ let dp;
+ switch (action.type) {
+ case 'CHANGE_VIEW_TYPE':
+ return dateProfileGenerator.build(action.dateMarker || currentDate);
+ case 'CHANGE_DATE':
+ return dateProfileGenerator.build(action.dateMarker);
+ case 'PREV':
+ dp = dateProfileGenerator.buildPrev(currentDateProfile, currentDate);
+ if (dp.isValid) {
+ return dp;
+ }
+ break;
+ case 'NEXT':
+ dp = dateProfileGenerator.buildNext(currentDateProfile, currentDate);
+ if (dp.isValid) {
+ return dp;
+ }
+ break;
+ }
+ return currentDateProfile;
+ }
+
+ function initEventSources(calendarOptions, dateProfile, context) {
+ let activeRange = dateProfile ? dateProfile.activeRange : null;
+ return addSources({}, parseInitialSources(calendarOptions, context), activeRange, context);
+ }
+ function reduceEventSources(eventSources, action, dateProfile, context) {
+ let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
+ switch (action.type) {
+ case 'ADD_EVENT_SOURCES': // already parsed
+ return addSources(eventSources, action.sources, activeRange, context);
+ case 'REMOVE_EVENT_SOURCE':
+ return removeSource(eventSources, action.sourceId);
+ case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
+ case 'NEXT':
+ case 'CHANGE_DATE':
+ case 'CHANGE_VIEW_TYPE':
+ if (dateProfile) {
+ return fetchDirtySources(eventSources, activeRange, context);
+ }
+ return eventSources;
+ case 'FETCH_EVENT_SOURCES':
+ return fetchSourcesByIds(eventSources, action.sourceIds ? // why no type?
+ arrayToHash(action.sourceIds) :
+ excludeStaticSources(eventSources, context), activeRange, action.isRefetch || false, context);
+ case 'RECEIVE_EVENTS':
+ case 'RECEIVE_EVENT_ERROR':
+ return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
+ case 'REMOVE_ALL_EVENT_SOURCES':
+ return {};
+ default:
+ return eventSources;
+ }
+ }
+ function reduceEventSourcesNewTimeZone(eventSources, dateProfile, context) {
+ let activeRange = dateProfile ? dateProfile.activeRange : null; // need this check?
+ return fetchSourcesByIds(eventSources, excludeStaticSources(eventSources, context), activeRange, true, context);
+ }
+ function computeEventSourcesLoading(eventSources) {
+ for (let sourceId in eventSources) {
+ if (eventSources[sourceId].isFetching) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function addSources(eventSourceHash, sources, fetchRange, context) {
+ let hash = {};
+ for (let source of sources) {
+ hash[source.sourceId] = source;
+ }
+ if (fetchRange) {
+ hash = fetchDirtySources(hash, fetchRange, context);
+ }
+ return Object.assign(Object.assign({}, eventSourceHash), hash);
+ }
+ function removeSource(eventSourceHash, sourceId) {
+ return filterHash(eventSourceHash, (eventSource) => eventSource.sourceId !== sourceId);
+ }
+ function fetchDirtySources(sourceHash, fetchRange, context) {
+ return fetchSourcesByIds(sourceHash, filterHash(sourceHash, (eventSource) => isSourceDirty(eventSource, fetchRange, context)), fetchRange, false, context);
+ }
+ function isSourceDirty(eventSource, fetchRange, context) {
+ if (!doesSourceNeedRange(eventSource, context)) {
+ return !eventSource.latestFetchId;
+ }
+ return !context.options.lazyFetching ||
+ !eventSource.fetchRange ||
+ eventSource.isFetching || // always cancel outdated in-progress fetches
+ fetchRange.start < eventSource.fetchRange.start ||
+ fetchRange.end > eventSource.fetchRange.end;
+ }
+ function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, isRefetch, context) {
+ let nextSources = {};
+ for (let sourceId in prevSources) {
+ let source = prevSources[sourceId];
+ if (sourceIdHash[sourceId]) {
+ nextSources[sourceId] = fetchSource(source, fetchRange, isRefetch, context);
+ }
+ else {
+ nextSources[sourceId] = source;
+ }
+ }
+ return nextSources;
+ }
+ function fetchSource(eventSource, fetchRange, isRefetch, context) {
+ let { options, calendarApi } = context;
+ let sourceDef = context.pluginHooks.eventSourceDefs[eventSource.sourceDefId];
+ let fetchId = guid();
+ sourceDef.fetch({
+ eventSource,
+ range: fetchRange,
+ isRefetch,
+ context,
+ }, (res) => {
+ let { rawEvents } = res;
+ if (options.eventSourceSuccess) {
+ rawEvents = options.eventSourceSuccess.call(calendarApi, rawEvents, res.response) || rawEvents;
+ }
+ if (eventSource.success) {
+ rawEvents = eventSource.success.call(calendarApi, rawEvents, res.response) || rawEvents;
+ }
+ context.dispatch({
+ type: 'RECEIVE_EVENTS',
+ sourceId: eventSource.sourceId,
+ fetchId,
+ fetchRange,
+ rawEvents,
+ });
+ }, (error) => {
+ let errorHandled = false;
+ if (options.eventSourceFailure) {
+ options.eventSourceFailure.call(calendarApi, error);
+ errorHandled = true;
+ }
+ if (eventSource.failure) {
+ eventSource.failure(error);
+ errorHandled = true;
+ }
+ if (!errorHandled) {
+ console.warn(error.message, error);
+ }
+ context.dispatch({
+ type: 'RECEIVE_EVENT_ERROR',
+ sourceId: eventSource.sourceId,
+ fetchId,
+ fetchRange,
+ error,
+ });
+ });
+ return Object.assign(Object.assign({}, eventSource), { isFetching: true, latestFetchId: fetchId });
+ }
+ function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
+ let eventSource = sourceHash[sourceId];
+ if (eventSource && // not already removed
+ fetchId === eventSource.latestFetchId) {
+ return Object.assign(Object.assign({}, sourceHash), { [sourceId]: Object.assign(Object.assign({}, eventSource), { isFetching: false, fetchRange }) });
+ }
+ return sourceHash;
+ }
+ function excludeStaticSources(eventSources, context) {
+ return filterHash(eventSources, (eventSource) => doesSourceNeedRange(eventSource, context));
+ }
+ function parseInitialSources(rawOptions, context) {
+ let refiners = buildEventSourceRefiners(context);
+ let rawSources = [].concat(rawOptions.eventSources || []);
+ let sources = []; // parsed
+ if (rawOptions.initialEvents) {
+ rawSources.unshift(rawOptions.initialEvents);
+ }
+ if (rawOptions.events) {
+ rawSources.unshift(rawOptions.events);
+ }
+ for (let rawSource of rawSources) {
+ let source = parseEventSource(rawSource, context, refiners);
+ if (source) {
+ sources.push(source);
+ }
+ }
+ return sources;
+ }
+ function doesSourceNeedRange(eventSource, context) {
+ let defs = context.pluginHooks.eventSourceDefs;
+ return !defs[eventSource.sourceDefId].ignoreRange;
+ }
+
+ function reduceDateSelection(currentSelection, action) {
+ switch (action.type) {
+ case 'UNSELECT_DATES':
+ return null;
+ case 'SELECT_DATES':
+ return action.selection;
+ default:
+ return currentSelection;
+ }
+ }
+
+ function reduceSelectedEvent(currentInstanceId, action) {
+ switch (action.type) {
+ case 'UNSELECT_EVENT':
+ return '';
+ case 'SELECT_EVENT':
+ return action.eventInstanceId;
+ default:
+ return currentInstanceId;
+ }
+ }
+
+ function reduceEventDrag(currentDrag, action) {
+ let newDrag;
+ switch (action.type) {
+ case 'UNSET_EVENT_DRAG':
+ return null;
+ case 'SET_EVENT_DRAG':
+ newDrag = action.state;
+ return {
+ affectedEvents: newDrag.affectedEvents,
+ mutatedEvents: newDrag.mutatedEvents,
+ isEvent: newDrag.isEvent,
+ };
+ default:
+ return currentDrag;
+ }
+ }
+
+ function reduceEventResize(currentResize, action) {
+ let newResize;
+ switch (action.type) {
+ case 'UNSET_EVENT_RESIZE':
+ return null;
+ case 'SET_EVENT_RESIZE':
+ newResize = action.state;
+ return {
+ affectedEvents: newResize.affectedEvents,
+ mutatedEvents: newResize.mutatedEvents,
+ isEvent: newResize.isEvent,
+ };
+ default:
+ return currentResize;
+ }
+ }
+
+ function parseToolbars(calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
+ let header = calendarOptions.headerToolbar ? parseToolbar(calendarOptions.headerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
+ let footer = calendarOptions.footerToolbar ? parseToolbar(calendarOptions.footerToolbar, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) : null;
+ return { header, footer };
+ }
+ function parseToolbar(sectionStrHash, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi) {
+ let sectionWidgets = {};
+ let viewsWithButtons = [];
+ let hasTitle = false;
+ for (let sectionName in sectionStrHash) {
+ let sectionStr = sectionStrHash[sectionName];
+ let sectionRes = parseSection(sectionStr, calendarOptions, calendarOptionOverrides, theme, viewSpecs, calendarApi);
+ sectionWidgets[sectionName] = sectionRes.widgets;
+ viewsWithButtons.push(...sectionRes.viewsWithButtons);
+ hasTitle = hasTitle || sectionRes.hasTitle;
+ }
+ return { sectionWidgets, viewsWithButtons, hasTitle };
+ }
+ /*
+ BAD: querying icons and text here. should be done at render time
+ */
+ function parseSection(sectionStr, calendarOptions, // defaults+overrides, then refined
+ calendarOptionOverrides, // overrides only!, unrefined :(
+ theme, viewSpecs, calendarApi) {
+ let isRtl = calendarOptions.direction === 'rtl';
+ let calendarCustomButtons = calendarOptions.customButtons || {};
+ let calendarButtonTextOverrides = calendarOptionOverrides.buttonText || {};
+ let calendarButtonText = calendarOptions.buttonText || {};
+ let calendarButtonHintOverrides = calendarOptionOverrides.buttonHints || {};
+ let calendarButtonHints = calendarOptions.buttonHints || {};
+ let sectionSubstrs = sectionStr ? sectionStr.split(' ') : [];
+ let viewsWithButtons = [];
+ let hasTitle = false;
+ let widgets = sectionSubstrs.map((buttonGroupStr) => (buttonGroupStr.split(',').map((buttonName) => {
+ if (buttonName === 'title') {
+ hasTitle = true;
+ return { buttonName };
+ }
+ let customButtonProps;
+ let viewSpec;
+ let buttonClick;
+ let buttonIcon; // only one of these will be set
+ let buttonText; // "
+ let buttonHint;
+ // ^ for the title="" attribute, for accessibility
+ if ((customButtonProps = calendarCustomButtons[buttonName])) {
+ buttonClick = (ev) => {
+ if (customButtonProps.click) {
+ customButtonProps.click.call(ev.target, ev, ev.target); // TODO: use Calendar this context?
+ }
+ };
+ (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||
+ (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
+ (buttonText = customButtonProps.text);
+ buttonHint = customButtonProps.hint || customButtonProps.text;
+ }
+ else if ((viewSpec = viewSpecs[buttonName])) {
+ viewsWithButtons.push(buttonName);
+ buttonClick = () => {
+ calendarApi.changeView(buttonName);
+ };
+ (buttonText = viewSpec.buttonTextOverride) ||
+ (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
+ (buttonText = viewSpec.buttonTextDefault);
+ let textFallback = viewSpec.buttonTextOverride ||
+ viewSpec.buttonTextDefault;
+ buttonHint = formatWithOrdinals(viewSpec.buttonTitleOverride ||
+ viewSpec.buttonTitleDefault ||
+ calendarOptions.viewHint, [textFallback, buttonName], // view-name = buttonName
+ textFallback);
+ }
+ else if (calendarApi[buttonName]) { // a calendarApi method
+ buttonClick = () => {
+ calendarApi[buttonName]();
+ };
+ (buttonText = calendarButtonTextOverrides[buttonName]) ||
+ (buttonIcon = theme.getIconClass(buttonName, isRtl)) ||
+ (buttonText = calendarButtonText[buttonName]); // everything else is considered default
+ if (buttonName === 'prevYear' || buttonName === 'nextYear') {
+ let prevOrNext = buttonName === 'prevYear' ? 'prev' : 'next';
+ buttonHint = formatWithOrdinals(calendarButtonHintOverrides[prevOrNext] ||
+ calendarButtonHints[prevOrNext], [
+ calendarButtonText.year || 'year',
+ 'year',
+ ], calendarButtonText[buttonName]);
+ }
+ else {
+ buttonHint = (navUnit) => formatWithOrdinals(calendarButtonHintOverrides[buttonName] ||
+ calendarButtonHints[buttonName], [
+ calendarButtonText[navUnit] || navUnit,
+ navUnit,
+ ], calendarButtonText[buttonName]);
+ }
+ }
+ return { buttonName, buttonClick, buttonIcon, buttonText, buttonHint };
+ })));
+ return { widgets, viewsWithButtons, hasTitle };
+ }
+
+ // always represents the current view. otherwise, it'd need to change value every time date changes
+ class ViewImpl {
+ constructor(type, getCurrentData, dateEnv) {
+ this.type = type;
+ this.getCurrentData = getCurrentData;
+ this.dateEnv = dateEnv;
+ }
+ get calendar() {
+ return this.getCurrentData().calendarApi;
+ }
+ get title() {
+ return this.getCurrentData().viewTitle;
+ }
+ get activeStart() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start);
+ }
+ get activeEnd() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end);
+ }
+ get currentStart() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start);
+ }
+ get currentEnd() {
+ return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end);
+ }
+ getOption(name) {
+ return this.getCurrentData().options[name]; // are the view-specific options
+ }
+ }
+
+ let eventSourceDef$2 = {
+ ignoreRange: true,
+ parseMeta(refined) {
+ if (Array.isArray(refined.events)) {
+ return refined.events;
+ }
+ return null;
+ },
+ fetch(arg, successCallback) {
+ successCallback({
+ rawEvents: arg.eventSource.meta,
+ });
+ },
+ };
+ const arrayEventSourcePlugin = createPlugin({
+ name: 'array-event-source',
+ eventSourceDefs: [eventSourceDef$2],
+ });
+
+ let eventSourceDef$1 = {
+ parseMeta(refined) {
+ if (typeof refined.events === 'function') {
+ return refined.events;
+ }
+ return null;
+ },
+ fetch(arg, successCallback, errorCallback) {
+ const { dateEnv } = arg.context;
+ const func = arg.eventSource.meta;
+ unpromisify(func.bind(null, buildRangeApiWithTimeZone(arg.range, dateEnv)), (rawEvents) => successCallback({ rawEvents }), errorCallback);
+ },
+ };
+ const funcEventSourcePlugin = createPlugin({
+ name: 'func-event-source',
+ eventSourceDefs: [eventSourceDef$1],
+ });
+
+ const JSON_FEED_EVENT_SOURCE_REFINERS = {
+ method: String,
+ extraParams: identity,
+ startParam: String,
+ endParam: String,
+ timeZoneParam: String,
+ };
+
+ let eventSourceDef = {
+ parseMeta(refined) {
+ if (refined.url && (refined.format === 'json' || !refined.format)) {
+ return {
+ url: refined.url,
+ format: 'json',
+ method: (refined.method || 'GET').toUpperCase(),
+ extraParams: refined.extraParams,
+ startParam: refined.startParam,
+ endParam: refined.endParam,
+ timeZoneParam: refined.timeZoneParam,
+ };
+ }
+ return null;
+ },
+ fetch(arg, successCallback, errorCallback) {
+ const { meta } = arg.eventSource;
+ const requestParams = buildRequestParams(meta, arg.range, arg.context);
+ requestJson(meta.method, meta.url, requestParams).then(([rawEvents, response]) => {
+ successCallback({ rawEvents, response });
+ }, errorCallback);
+ },
+ };
+ const jsonFeedEventSourcePlugin = createPlugin({
+ name: 'json-event-source',
+ eventSourceRefiners: JSON_FEED_EVENT_SOURCE_REFINERS,
+ eventSourceDefs: [eventSourceDef],
+ });
+ function buildRequestParams(meta, range, context) {
+ let { dateEnv, options } = context;
+ let startParam;
+ let endParam;
+ let timeZoneParam;
+ let customRequestParams;
+ let params = {};
+ startParam = meta.startParam;
+ if (startParam == null) {
+ startParam = options.startParam;
+ }
+ endParam = meta.endParam;
+ if (endParam == null) {
+ endParam = options.endParam;
+ }
+ timeZoneParam = meta.timeZoneParam;
+ if (timeZoneParam == null) {
+ timeZoneParam = options.timeZoneParam;
+ }
+ // retrieve any outbound GET/POST data from the options
+ if (typeof meta.extraParams === 'function') {
+ // supplied as a function that returns a key/value object
+ customRequestParams = meta.extraParams();
+ }
+ else {
+ // probably supplied as a straight key/value object
+ customRequestParams = meta.extraParams || {};
+ }
+ Object.assign(params, customRequestParams);
+ params[startParam] = dateEnv.formatIso(range.start);
+ params[endParam] = dateEnv.formatIso(range.end);
+ if (dateEnv.timeZone !== 'local') {
+ params[timeZoneParam] = dateEnv.timeZone;
+ }
+ return params;
+ }
+
+ const SIMPLE_RECURRING_REFINERS = {
+ daysOfWeek: identity,
+ startTime: createDuration,
+ endTime: createDuration,
+ duration: createDuration,
+ startRecur: identity,
+ endRecur: identity,
+ };
+
+ let recurring = {
+ parse(refined, dateEnv) {
+ if (refined.daysOfWeek || refined.startTime || refined.endTime || refined.startRecur || refined.endRecur) {
+ let recurringData = {
+ daysOfWeek: refined.daysOfWeek || null,
+ startTime: refined.startTime || null,
+ endTime: refined.endTime || null,
+ startRecur: refined.startRecur ? dateEnv.createMarker(refined.startRecur) : null,
+ endRecur: refined.endRecur ? dateEnv.createMarker(refined.endRecur) : null,
+ };
+ let duration;
+ if (refined.duration) {
+ duration = refined.duration;
+ }
+ if (!duration && refined.startTime && refined.endTime) {
+ duration = subtractDurations(refined.endTime, refined.startTime);
+ }
+ return {
+ allDayGuess: Boolean(!refined.startTime && !refined.endTime),
+ duration,
+ typeData: recurringData, // doesn't need endTime anymore but oh well
+ };
+ }
+ return null;
+ },
+ expand(typeData, framingRange, dateEnv) {
+ let clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
+ if (clippedFramingRange) {
+ return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
+ }
+ return [];
+ },
+ };
+ const simpleRecurringEventsPlugin = createPlugin({
+ name: 'simple-recurring-event',
+ recurringTypes: [recurring],
+ eventRefiners: SIMPLE_RECURRING_REFINERS,
+ });
+ function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
+ let dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;
+ let dayMarker = startOfDay(framingRange.start);
+ let endMarker = framingRange.end;
+ let instanceStarts = [];
+ while (dayMarker < endMarker) {
+ let instanceStart;
+ // if everyday, or this particular day-of-week
+ if (!dowHash || dowHash[dayMarker.getUTCDay()]) {
+ if (startTime) {
+ instanceStart = dateEnv.add(dayMarker, startTime);
+ }
+ else {
+ instanceStart = dayMarker;
+ }
+ instanceStarts.push(instanceStart);
+ }
+ dayMarker = addDays(dayMarker, 1);
+ }
+ return instanceStarts;
+ }
+
+ const changeHandlerPlugin = createPlugin({
+ name: 'change-handler',
+ optionChangeHandlers: {
+ events(events, context) {
+ handleEventSources([events], context);
+ },
+ eventSources: handleEventSources,
+ },
+ });
+ /*
+ BUG: if `event` was supplied, all previously-given `eventSources` will be wiped out
+ */
+ function handleEventSources(inputs, context) {
+ let unfoundSources = hashValuesToArray(context.getCurrentData().eventSources);
+ let newInputs = [];
+ for (let input of inputs) {
+ let inputFound = false;
+ for (let i = 0; i < unfoundSources.length; i += 1) {
+ if (unfoundSources[i]._raw === input) {
+ unfoundSources.splice(i, 1); // delete
+ inputFound = true;
+ break;
+ }
+ }
+ if (!inputFound) {
+ newInputs.push(input);
+ }
+ }
+ for (let unfoundSource of unfoundSources) {
+ context.dispatch({
+ type: 'REMOVE_EVENT_SOURCE',
+ sourceId: unfoundSource.sourceId,
+ });
+ }
+ for (let newInput of newInputs) {
+ context.calendarApi.addEventSource(newInput);
+ }
+ }
+
+ function handleDateProfile(dateProfile, context) {
+ context.emitter.trigger('datesSet', Object.assign(Object.assign({}, buildRangeApiWithTimeZone(dateProfile.activeRange, context.dateEnv)), { view: context.viewApi }));
+ }
+
+ function handleEventStore(eventStore, context) {
+ let { emitter } = context;
+ if (emitter.hasHandlers('eventsSet')) {
+ emitter.trigger('eventsSet', buildEventApis(eventStore, context));
+ }
+ }
+
+ /*
+ this array is exposed on the root namespace so that UMD plugins can add to it.
+ see the rollup-bundles script.
+ */
+ const globalPlugins = [
+ arrayEventSourcePlugin,
+ funcEventSourcePlugin,
+ jsonFeedEventSourcePlugin,
+ simpleRecurringEventsPlugin,
+ changeHandlerPlugin,
+ createPlugin({
+ name: 'misc',
+ isLoadingFuncs: [
+ (state) => computeEventSourcesLoading(state.eventSources),
+ ],
+ propSetHandlers: {
+ dateProfile: handleDateProfile,
+ eventStore: handleEventStore,
+ },
+ }),
+ ];
+
+ class TaskRunner {
+ constructor(runTaskOption, drainedOption) {
+ this.runTaskOption = runTaskOption;
+ this.drainedOption = drainedOption;
+ this.queue = [];
+ this.delayedRunner = new DelayedRunner(this.drain.bind(this));
+ }
+ request(task, delay) {
+ this.queue.push(task);
+ this.delayedRunner.request(delay);
+ }
+ pause(scope) {
+ this.delayedRunner.pause(scope);
+ }
+ resume(scope, force) {
+ this.delayedRunner.resume(scope, force);
+ }
+ drain() {
+ let { queue } = this;
+ while (queue.length) {
+ let completedTasks = [];
+ let task;
+ while ((task = queue.shift())) {
+ this.runTask(task);
+ completedTasks.push(task);
+ }
+ this.drained(completedTasks);
+ } // keep going, in case new tasks were added in the drained handler
+ }
+ runTask(task) {
+ if (this.runTaskOption) {
+ this.runTaskOption(task);
+ }
+ }
+ drained(completedTasks) {
+ if (this.drainedOption) {
+ this.drainedOption(completedTasks);
+ }
+ }
+ }
+
+ // Computes what the title at the top of the calendarApi should be for this view
+ function buildTitle(dateProfile, viewOptions, dateEnv) {
+ let range;
+ // for views that span a large unit of time, show the proper interval, ignoring stray days before and after
+ if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {
+ range = dateProfile.currentRange;
+ }
+ else { // for day units or smaller, use the actual day range
+ range = dateProfile.activeRange;
+ }
+ return dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || buildTitleFormat(dateProfile)), {
+ isEndExclusive: dateProfile.isRangeAllDay,
+ defaultSeparator: viewOptions.titleRangeSeparator,
+ });
+ }
+ // Generates the format string that should be used to generate the title for the current date range.
+ // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.
+ function buildTitleFormat(dateProfile) {
+ let { currentRangeUnit } = dateProfile;
+ if (currentRangeUnit === 'year') {
+ return { year: 'numeric' };
+ }
+ if (currentRangeUnit === 'month') {
+ return { year: 'numeric', month: 'long' }; // like "September 2014"
+ }
+ let days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);
+ if (days !== null && days > 1) {
+ // multi-day range. shorter, like "Sep 9 - 10 2014"
+ return { year: 'numeric', month: 'short', day: 'numeric' };
+ }
+ // one day. longer, like "September 9 2014"
+ return { year: 'numeric', month: 'long', day: 'numeric' };
+ }
+
+ // in future refactor, do the redux-style function(state=initial) for initial-state
+ // also, whatever is happening in constructor, have it happen in action queue too
+ class CalendarDataManager {
+ constructor(props) {
+ this.computeOptionsData = memoize(this._computeOptionsData);
+ this.computeCurrentViewData = memoize(this._computeCurrentViewData);
+ this.organizeRawLocales = memoize(organizeRawLocales);
+ this.buildLocale = memoize(buildLocale);
+ this.buildPluginHooks = buildBuildPluginHooks();
+ this.buildDateEnv = memoize(buildDateEnv$1);
+ this.buildTheme = memoize(buildTheme);
+ this.parseToolbars = memoize(parseToolbars);
+ this.buildViewSpecs = memoize(buildViewSpecs);
+ this.buildDateProfileGenerator = memoizeObjArg(buildDateProfileGenerator);
+ this.buildViewApi = memoize(buildViewApi);
+ this.buildViewUiProps = memoizeObjArg(buildViewUiProps);
+ this.buildEventUiBySource = memoize(buildEventUiBySource, isPropsEqual);
+ this.buildEventUiBases = memoize(buildEventUiBases);
+ this.parseContextBusinessHours = memoizeObjArg(parseContextBusinessHours);
+ this.buildTitle = memoize(buildTitle);
+ this.emitter = new Emitter();
+ this.actionRunner = new TaskRunner(this._handleAction.bind(this), this.updateData.bind(this));
+ this.currentCalendarOptionsInput = {};
+ this.currentCalendarOptionsRefined = {};
+ this.currentViewOptionsInput = {};
+ this.currentViewOptionsRefined = {};
+ this.currentCalendarOptionsRefiners = {};
+ this.getCurrentData = () => this.data;
+ this.dispatch = (action) => {
+ this.actionRunner.request(action); // protects against recursive calls to _handleAction
+ };
+ this.props = props;
+ this.actionRunner.pause();
+ let dynamicOptionOverrides = {};
+ let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
+ let currentViewType = optionsData.calendarOptions.initialView || optionsData.pluginHooks.initialView;
+ let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
+ // wire things up
+ // TODO: not DRY
+ props.calendarApi.currentDataManager = this;
+ this.emitter.setThisContext(props.calendarApi);
+ this.emitter.setOptions(currentViewData.options);
+ let currentDate = getInitialDate(optionsData.calendarOptions, optionsData.dateEnv);
+ let dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
+ if (!rangeContainsMarker(dateProfile.activeRange, currentDate)) {
+ currentDate = dateProfile.currentRange.start;
+ }
+ let calendarContext = {
+ dateEnv: optionsData.dateEnv,
+ options: optionsData.calendarOptions,
+ pluginHooks: optionsData.pluginHooks,
+ calendarApi: props.calendarApi,
+ dispatch: this.dispatch,
+ emitter: this.emitter,
+ getCurrentData: this.getCurrentData,
+ };
+ // needs to be after setThisContext
+ for (let callback of optionsData.pluginHooks.contextInit) {
+ callback(calendarContext);
+ }
+ // NOT DRY
+ let eventSources = initEventSources(optionsData.calendarOptions, dateProfile, calendarContext);
+ let initialState = {
+ dynamicOptionOverrides,
+ currentViewType,
+ currentDate,
+ dateProfile,
+ businessHours: this.parseContextBusinessHours(calendarContext),
+ eventSources,
+ eventUiBases: {},
+ eventStore: createEmptyEventStore(),
+ renderableEventStore: createEmptyEventStore(),
+ dateSelection: null,
+ eventSelection: '',
+ eventDrag: null,
+ eventResize: null,
+ selectionConfig: this.buildViewUiProps(calendarContext).selectionConfig,
+ };
+ let contextAndState = Object.assign(Object.assign({}, calendarContext), initialState);
+ for (let reducer of optionsData.pluginHooks.reducers) {
+ Object.assign(initialState, reducer(null, null, contextAndState));
+ }
+ if (computeIsLoading(initialState, calendarContext)) {
+ this.emitter.trigger('loading', true); // NOT DRY
+ }
+ this.state = initialState;
+ this.updateData();
+ this.actionRunner.resume();
+ }
+ resetOptions(optionOverrides, append) {
+ let { props } = this;
+ props.optionOverrides = append
+ ? Object.assign(Object.assign({}, props.optionOverrides), optionOverrides) : optionOverrides;
+ this.actionRunner.request({
+ type: 'NOTHING',
+ });
+ }
+ _handleAction(action) {
+ let { props, state, emitter } = this;
+ let dynamicOptionOverrides = reduceDynamicOptionOverrides(state.dynamicOptionOverrides, action);
+ let optionsData = this.computeOptionsData(props.optionOverrides, dynamicOptionOverrides, props.calendarApi);
+ let currentViewType = reduceViewType(state.currentViewType, action);
+ let currentViewData = this.computeCurrentViewData(currentViewType, optionsData, props.optionOverrides, dynamicOptionOverrides);
+ // wire things up
+ // TODO: not DRY
+ props.calendarApi.currentDataManager = this;
+ emitter.setThisContext(props.calendarApi);
+ emitter.setOptions(currentViewData.options);
+ let calendarContext = {
+ dateEnv: optionsData.dateEnv,
+ options: optionsData.calendarOptions,
+ pluginHooks: optionsData.pluginHooks,
+ calendarApi: props.calendarApi,
+ dispatch: this.dispatch,
+ emitter,
+ getCurrentData: this.getCurrentData,
+ };
+ let { currentDate, dateProfile } = state;
+ if (this.data && this.data.dateProfileGenerator !== currentViewData.dateProfileGenerator) { // hack
+ dateProfile = currentViewData.dateProfileGenerator.build(currentDate);
+ }
+ currentDate = reduceCurrentDate(currentDate, action);
+ dateProfile = reduceDateProfile(dateProfile, action, currentDate, currentViewData.dateProfileGenerator);
+ if (action.type === 'PREV' || // TODO: move this logic into DateProfileGenerator
+ action.type === 'NEXT' || // "
+ !rangeContainsMarker(dateProfile.currentRange, currentDate)) {
+ currentDate = dateProfile.currentRange.start;
+ }
+ let eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendarContext);
+ let eventStore = reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendarContext);
+ let isEventsLoading = computeEventSourcesLoading(eventSources); // BAD. also called in this func in computeIsLoading
+ let renderableEventStore = (isEventsLoading && !currentViewData.options.progressiveEventRendering) ?
+ (state.renderableEventStore || eventStore) : // try from previous state
+ eventStore;
+ let { eventUiSingleBase, selectionConfig } = this.buildViewUiProps(calendarContext); // will memoize obj
+ let eventUiBySource = this.buildEventUiBySource(eventSources);
+ let eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
+ let newState = {
+ dynamicOptionOverrides,
+ currentViewType,
+ currentDate,
+ dateProfile,
+ eventSources,
+ eventStore,
+ renderableEventStore,
+ selectionConfig,
+ eventUiBases,
+ businessHours: this.parseContextBusinessHours(calendarContext),
+ dateSelection: reduceDateSelection(state.dateSelection, action),
+ eventSelection: reduceSelectedEvent(state.eventSelection, action),
+ eventDrag: reduceEventDrag(state.eventDrag, action),
+ eventResize: reduceEventResize(state.eventResize, action),
+ };
+ let contextAndState = Object.assign(Object.assign({}, calendarContext), newState);
+ for (let reducer of optionsData.pluginHooks.reducers) {
+ Object.assign(newState, reducer(state, action, contextAndState)); // give the OLD state, for old value
+ }
+ let wasLoading = computeIsLoading(state, calendarContext);
+ let isLoading = computeIsLoading(newState, calendarContext);
+ // TODO: use propSetHandlers in plugin system
+ if (!wasLoading && isLoading) {
+ emitter.trigger('loading', true);
+ }
+ else if (wasLoading && !isLoading) {
+ emitter.trigger('loading', false);
+ }
+ this.state = newState;
+ if (props.onAction) {
+ props.onAction(action);
+ }
+ }
+ updateData() {
+ let { props, state } = this;
+ let oldData = this.data;
+ let optionsData = this.computeOptionsData(props.optionOverrides, state.dynamicOptionOverrides, props.calendarApi);
+ let currentViewData = this.computeCurrentViewData(state.currentViewType, optionsData, props.optionOverrides, state.dynamicOptionOverrides);
+ let data = this.data = Object.assign(Object.assign(Object.assign({ viewTitle: this.buildTitle(state.dateProfile, currentViewData.options, optionsData.dateEnv), calendarApi: props.calendarApi, dispatch: this.dispatch, emitter: this.emitter, getCurrentData: this.getCurrentData }, optionsData), currentViewData), state);
+ let changeHandlers = optionsData.pluginHooks.optionChangeHandlers;
+ let oldCalendarOptions = oldData && oldData.calendarOptions;
+ let newCalendarOptions = optionsData.calendarOptions;
+ if (oldCalendarOptions && oldCalendarOptions !== newCalendarOptions) {
+ if (oldCalendarOptions.timeZone !== newCalendarOptions.timeZone) {
+ // hack
+ state.eventSources = data.eventSources = reduceEventSourcesNewTimeZone(data.eventSources, state.dateProfile, data);
+ state.eventStore = data.eventStore = rezoneEventStoreDates(data.eventStore, oldData.dateEnv, data.dateEnv);
+ }
+ for (let optionName in changeHandlers) {
+ if (oldCalendarOptions[optionName] !== newCalendarOptions[optionName]) {
+ changeHandlers[optionName](newCalendarOptions[optionName], data);
+ }
+ }
+ }
+ if (props.onData) {
+ props.onData(data);
+ }
+ }
+ _computeOptionsData(optionOverrides, dynamicOptionOverrides, calendarApi) {
+ // TODO: blacklist options that are handled by optionChangeHandlers
+ let { refinedOptions, pluginHooks, localeDefaults, availableLocaleData, extra, } = this.processRawCalendarOptions(optionOverrides, dynamicOptionOverrides);
+ warnUnknownOptions(extra);
+ let dateEnv = this.buildDateEnv(refinedOptions.timeZone, refinedOptions.locale, refinedOptions.weekNumberCalculation, refinedOptions.firstDay, refinedOptions.weekText, pluginHooks, availableLocaleData, refinedOptions.defaultRangeSeparator);
+ let viewSpecs = this.buildViewSpecs(pluginHooks.views, optionOverrides, dynamicOptionOverrides, localeDefaults);
+ let theme = this.buildTheme(refinedOptions, pluginHooks);
+ let toolbarConfig = this.parseToolbars(refinedOptions, optionOverrides, theme, viewSpecs, calendarApi);
+ return {
+ calendarOptions: refinedOptions,
+ pluginHooks,
+ dateEnv,
+ viewSpecs,
+ theme,
+ toolbarConfig,
+ localeDefaults,
+ availableRawLocales: availableLocaleData.map,
+ };
+ }
+ // always called from behind a memoizer
+ processRawCalendarOptions(optionOverrides, dynamicOptionOverrides) {
+ let { locales, locale } = mergeRawOptions([
+ BASE_OPTION_DEFAULTS,
+ optionOverrides,
+ dynamicOptionOverrides,
+ ]);
+ let availableLocaleData = this.organizeRawLocales(locales);
+ let availableRawLocales = availableLocaleData.map;
+ let localeDefaults = this.buildLocale(locale || availableLocaleData.defaultCode, availableRawLocales).options;
+ let pluginHooks = this.buildPluginHooks(optionOverrides.plugins || [], globalPlugins);
+ let refiners = this.currentCalendarOptionsRefiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
+ let extra = {};
+ let raw = mergeRawOptions([
+ BASE_OPTION_DEFAULTS,
+ localeDefaults,
+ optionOverrides,
+ dynamicOptionOverrides,
+ ]);
+ let refined = {};
+ let currentRaw = this.currentCalendarOptionsInput;
+ let currentRefined = this.currentCalendarOptionsRefined;
+ let anyChanges = false;
+ for (let optionName in raw) {
+ if (optionName !== 'plugins') { // because plugins is special-cased
+ if (raw[optionName] === currentRaw[optionName] ||
+ (COMPLEX_OPTION_COMPARATORS[optionName] &&
+ (optionName in currentRaw) &&
+ COMPLEX_OPTION_COMPARATORS[optionName](currentRaw[optionName], raw[optionName]))) {
+ refined[optionName] = currentRefined[optionName];
+ }
+ else if (refiners[optionName]) {
+ refined[optionName] = refiners[optionName](raw[optionName]);
+ anyChanges = true;
+ }
+ else {
+ extra[optionName] = currentRaw[optionName];
+ }
+ }
+ }
+ if (anyChanges) {
+ this.currentCalendarOptionsInput = raw;
+ this.currentCalendarOptionsRefined = refined;
+ }
+ return {
+ rawOptions: this.currentCalendarOptionsInput,
+ refinedOptions: this.currentCalendarOptionsRefined,
+ pluginHooks,
+ availableLocaleData,
+ localeDefaults,
+ extra,
+ };
+ }
+ _computeCurrentViewData(viewType, optionsData, optionOverrides, dynamicOptionOverrides) {
+ let viewSpec = optionsData.viewSpecs[viewType];
+ if (!viewSpec) {
+ throw new Error(`viewType "${viewType}" is not available. Please make sure you've loaded all neccessary plugins`);
+ }
+ let { refinedOptions, extra } = this.processRawViewOptions(viewSpec, optionsData.pluginHooks, optionsData.localeDefaults, optionOverrides, dynamicOptionOverrides);
+ warnUnknownOptions(extra);
+ let dateProfileGenerator = this.buildDateProfileGenerator({
+ dateProfileGeneratorClass: viewSpec.optionDefaults.dateProfileGeneratorClass,
+ duration: viewSpec.duration,
+ durationUnit: viewSpec.durationUnit,
+ usesMinMaxTime: viewSpec.optionDefaults.usesMinMaxTime,
+ dateEnv: optionsData.dateEnv,
+ calendarApi: this.props.calendarApi,
+ slotMinTime: refinedOptions.slotMinTime,
+ slotMaxTime: refinedOptions.slotMaxTime,
+ showNonCurrentDates: refinedOptions.showNonCurrentDates,
+ dayCount: refinedOptions.dayCount,
+ dateAlignment: refinedOptions.dateAlignment,
+ dateIncrement: refinedOptions.dateIncrement,
+ hiddenDays: refinedOptions.hiddenDays,
+ weekends: refinedOptions.weekends,
+ nowInput: refinedOptions.now,
+ validRangeInput: refinedOptions.validRange,
+ visibleRangeInput: refinedOptions.visibleRange,
+ monthMode: refinedOptions.monthMode,
+ fixedWeekCount: refinedOptions.fixedWeekCount,
+ });
+ let viewApi = this.buildViewApi(viewType, this.getCurrentData, optionsData.dateEnv);
+ return { viewSpec, options: refinedOptions, dateProfileGenerator, viewApi };
+ }
+ processRawViewOptions(viewSpec, pluginHooks, localeDefaults, optionOverrides, dynamicOptionOverrides) {
+ let raw = mergeRawOptions([
+ BASE_OPTION_DEFAULTS,
+ viewSpec.optionDefaults,
+ localeDefaults,
+ optionOverrides,
+ viewSpec.optionOverrides,
+ dynamicOptionOverrides,
+ ]);
+ let refiners = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASE_OPTION_REFINERS), CALENDAR_LISTENER_REFINERS), CALENDAR_OPTION_REFINERS), VIEW_OPTION_REFINERS), pluginHooks.listenerRefiners), pluginHooks.optionRefiners);
+ let refined = {};
+ let currentRaw = this.currentViewOptionsInput;
+ let currentRefined = this.currentViewOptionsRefined;
+ let anyChanges = false;
+ let extra = {};
+ for (let optionName in raw) {
+ if (raw[optionName] === currentRaw[optionName] ||
+ (COMPLEX_OPTION_COMPARATORS[optionName] &&
+ COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], currentRaw[optionName]))) {
+ refined[optionName] = currentRefined[optionName];
+ }
+ else {
+ if (raw[optionName] === this.currentCalendarOptionsInput[optionName] ||
+ (COMPLEX_OPTION_COMPARATORS[optionName] &&
+ COMPLEX_OPTION_COMPARATORS[optionName](raw[optionName], this.currentCalendarOptionsInput[optionName]))) {
+ if (optionName in this.currentCalendarOptionsRefined) { // might be an "extra" prop
+ refined[optionName] = this.currentCalendarOptionsRefined[optionName];
+ }
+ }
+ else if (refiners[optionName]) {
+ refined[optionName] = refiners[optionName](raw[optionName]);
+ }
+ else {
+ extra[optionName] = raw[optionName];
+ }
+ anyChanges = true;
+ }
+ }
+ if (anyChanges) {
+ this.currentViewOptionsInput = raw;
+ this.currentViewOptionsRefined = refined;
+ }
+ return {
+ rawOptions: this.currentViewOptionsInput,
+ refinedOptions: this.currentViewOptionsRefined,
+ extra,
+ };
+ }
+ }
+ function buildDateEnv$1(timeZone, explicitLocale, weekNumberCalculation, firstDay, weekText, pluginHooks, availableLocaleData, defaultSeparator) {
+ let locale = buildLocale(explicitLocale || availableLocaleData.defaultCode, availableLocaleData.map);
+ return new DateEnv({
+ calendarSystem: 'gregory',
+ timeZone,
+ namedTimeZoneImpl: pluginHooks.namedTimeZonedImpl,
+ locale,
+ weekNumberCalculation,
+ firstDay,
+ weekText,
+ cmdFormatter: pluginHooks.cmdFormatter,
+ defaultSeparator,
+ });
+ }
+ function buildTheme(options, pluginHooks) {
+ let ThemeClass = pluginHooks.themeClasses[options.themeSystem] || StandardTheme;
+ return new ThemeClass(options);
+ }
+ function buildDateProfileGenerator(props) {
+ let DateProfileGeneratorClass = props.dateProfileGeneratorClass || DateProfileGenerator;
+ return new DateProfileGeneratorClass(props);
+ }
+ function buildViewApi(type, getCurrentData, dateEnv) {
+ return new ViewImpl(type, getCurrentData, dateEnv);
+ }
+ function buildEventUiBySource(eventSources) {
+ return mapHash(eventSources, (eventSource) => eventSource.ui);
+ }
+ function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
+ let eventUiBases = { '': eventUiSingleBase };
+ for (let defId in eventDefs) {
+ let def = eventDefs[defId];
+ if (def.sourceId && eventUiBySource[def.sourceId]) {
+ eventUiBases[defId] = eventUiBySource[def.sourceId];
+ }
+ }
+ return eventUiBases;
+ }
+ function buildViewUiProps(calendarContext) {
+ let { options } = calendarContext;
+ return {
+ eventUiSingleBase: createEventUi({
+ display: options.eventDisplay,
+ editable: options.editable,
+ startEditable: options.eventStartEditable,
+ durationEditable: options.eventDurationEditable,
+ constraint: options.eventConstraint,
+ overlap: typeof options.eventOverlap === 'boolean' ? options.eventOverlap : undefined,
+ allow: options.eventAllow,
+ backgroundColor: options.eventBackgroundColor,
+ borderColor: options.eventBorderColor,
+ textColor: options.eventTextColor,
+ color: options.eventColor,
+ // classNames: options.eventClassNames // render hook will handle this
+ }, calendarContext),
+ selectionConfig: createEventUi({
+ constraint: options.selectConstraint,
+ overlap: typeof options.selectOverlap === 'boolean' ? options.selectOverlap : undefined,
+ allow: options.selectAllow,
+ }, calendarContext),
+ };
+ }
+ function computeIsLoading(state, context) {
+ for (let isLoadingFunc of context.pluginHooks.isLoadingFuncs) {
+ if (isLoadingFunc(state)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ function parseContextBusinessHours(calendarContext) {
+ return parseBusinessHours(calendarContext.options.businessHours, calendarContext);
+ }
+ function warnUnknownOptions(options, viewName) {
+ for (let optionName in options) {
+ console.warn(`Unknown option '${optionName}'` +
+ (viewName ? ` for view '${viewName}'` : ''));
+ }
+ }
+
+ class ToolbarSection extends BaseComponent {
+ render() {
+ let children = this.props.widgetGroups.map((widgetGroup) => this.renderWidgetGroup(widgetGroup));
+ return h('div', { className: 'fc-toolbar-chunk' }, ...children);
+ }
+ renderWidgetGroup(widgetGroup) {
+ let { props } = this;
+ let { theme } = this.context;
+ let children = [];
+ let isOnlyButtons = true;
+ for (let widget of widgetGroup) {
+ let { buttonName, buttonClick, buttonText, buttonIcon, buttonHint } = widget;
+ if (buttonName === 'title') {
+ isOnlyButtons = false;
+ children.push(h("h2", { className: "fc-toolbar-title", id: props.titleId }, props.title));
+ }
+ else {
+ let isPressed = buttonName === props.activeButton;
+ let isDisabled = (!props.isTodayEnabled && buttonName === 'today') ||
+ (!props.isPrevEnabled && buttonName === 'prev') ||
+ (!props.isNextEnabled && buttonName === 'next');
+ let buttonClasses = [`fc-${buttonName}-button`, theme.getClass('button')];
+ if (isPressed) {
+ buttonClasses.push(theme.getClass('buttonActive'));
+ }
+ children.push(h("button", { type: "button", title: typeof buttonHint === 'function' ? buttonHint(props.navUnit) : buttonHint, disabled: isDisabled, "aria-pressed": isPressed, className: buttonClasses.join(' '), onClick: buttonClick }, buttonText || (buttonIcon ? h("span", { className: buttonIcon }) : '')));
+ }
+ }
+ if (children.length > 1) {
+ let groupClassName = (isOnlyButtons && theme.getClass('buttonGroup')) || '';
+ return h('div', { className: groupClassName }, ...children);
+ }
+ return children[0];
+ }
+ }
+
+ class Toolbar extends BaseComponent {
+ render() {
+ let { model, extraClassName } = this.props;
+ let forceLtr = false;
+ let startContent;
+ let endContent;
+ let sectionWidgets = model.sectionWidgets;
+ let centerContent = sectionWidgets.center;
+ if (sectionWidgets.left) {
+ forceLtr = true;
+ startContent = sectionWidgets.left;
+ }
+ else {
+ startContent = sectionWidgets.start;
+ }
+ if (sectionWidgets.right) {
+ forceLtr = true;
+ endContent = sectionWidgets.right;
+ }
+ else {
+ endContent = sectionWidgets.end;
+ }
+ let classNames = [
+ extraClassName || '',
+ 'fc-toolbar',
+ forceLtr ? 'fc-toolbar-ltr' : '',
+ ];
+ return (h("div", { className: classNames.join(' ') },
+ this.renderSection('start', startContent || []),
+ this.renderSection('center', centerContent || []),
+ this.renderSection('end', endContent || [])));
+ }
+ renderSection(key, widgetGroups) {
+ let { props } = this;
+ return (h(ToolbarSection, { key: key, widgetGroups: widgetGroups, title: props.title, navUnit: props.navUnit, activeButton: props.activeButton, isTodayEnabled: props.isTodayEnabled, isPrevEnabled: props.isPrevEnabled, isNextEnabled: props.isNextEnabled, titleId: props.titleId }));
+ }
+ }
+
+ // TODO: do function component?
+ class ViewContainer extends BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ availableWidth: null,
+ };
+ this.handleEl = (el) => {
+ this.el = el;
+ setRef(this.props.elRef, el);
+ this.updateAvailableWidth();
+ };
+ this.handleResize = () => {
+ this.updateAvailableWidth();
+ };
+ }
+ render() {
+ let { props, state } = this;
+ let { aspectRatio } = props;
+ let classNames = [
+ 'fc-view-harness',
+ (aspectRatio || props.liquid || props.height)
+ ? 'fc-view-harness-active' // harness controls the height
+ : 'fc-view-harness-passive', // let the view do the height
+ ];
+ let height = '';
+ let paddingBottom = '';
+ if (aspectRatio) {
+ if (state.availableWidth !== null) {
+ height = state.availableWidth / aspectRatio;
+ }
+ else {
+ // while waiting to know availableWidth, we can't set height to *zero*
+ // because will cause lots of unnecessary scrollbars within scrollgrid.
+ // BETTER: don't start rendering ANYTHING yet until we know container width
+ // NOTE: why not always use paddingBottom? Causes height oscillation (issue 5606)
+ paddingBottom = `${(1 / aspectRatio) * 100}%`;
+ }
+ }
+ else {
+ height = props.height || '';
+ }
+ return (h("div", { "aria-labelledby": props.labeledById, ref: this.handleEl, className: classNames.join(' '), style: { height, paddingBottom } }, props.children));
+ }
+ componentDidMount() {
+ this.context.addResizeHandler(this.handleResize);
+ }
+ componentWillUnmount() {
+ this.context.removeResizeHandler(this.handleResize);
+ }
+ updateAvailableWidth() {
+ if (this.el && // needed. but why?
+ this.props.aspectRatio // aspectRatio is the only height setting that needs availableWidth
+ ) {
+ this.setState({ availableWidth: this.el.offsetWidth });
+ }
+ }
+ }
+
+ /*
+ Detects when the user clicks on an event within a DateComponent
+ */
+ class EventClicking extends Interaction {
+ constructor(settings) {
+ super(settings);
+ this.handleSegClick = (ev, segEl) => {
+ let { component } = this;
+ let { context } = component;
+ let seg = getElSeg(segEl);
+ if (seg && // might be the <div> surrounding the more link
+ component.isValidSegDownEl(ev.target)) {
+ // our way to simulate a link click for elements that can't be <a> tags
+ // grab before trigger fired in case trigger trashes DOM thru rerendering
+ let hasUrlContainer = elementClosest(ev.target, '.fc-event-forced-url');
+ let url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
+ context.emitter.trigger('eventClick', {
+ el: segEl,
+ event: new EventImpl(component.context, seg.eventRange.def, seg.eventRange.instance),
+ jsEvent: ev,
+ view: context.viewApi,
+ });
+ if (url && !ev.defaultPrevented) {
+ window.location.href = url;
+ }
+ }
+ };
+ this.destroy = listenBySelector(settings.el, 'click', '.fc-event', // on both fg and bg events
+ this.handleSegClick);
+ }
+ }
+
+ /*
+ Triggers events and adds/removes core classNames when the user's pointer
+ enters/leaves event-elements of a component.
+ */
+ class EventHovering extends Interaction {
+ constructor(settings) {
+ super(settings);
+ // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it
+ this.handleEventElRemove = (el) => {
+ if (el === this.currentSegEl) {
+ this.handleSegLeave(null, this.currentSegEl);
+ }
+ };
+ this.handleSegEnter = (ev, segEl) => {
+ if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
+ this.currentSegEl = segEl;
+ this.triggerEvent('eventMouseEnter', ev, segEl);
+ }
+ };
+ this.handleSegLeave = (ev, segEl) => {
+ if (this.currentSegEl) {
+ this.currentSegEl = null;
+ this.triggerEvent('eventMouseLeave', ev, segEl);
+ }
+ };
+ this.removeHoverListeners = listenToHoverBySelector(settings.el, '.fc-event', // on both fg and bg events
+ this.handleSegEnter, this.handleSegLeave);
+ }
+ destroy() {
+ this.removeHoverListeners();
+ }
+ triggerEvent(publicEvName, ev, segEl) {
+ let { component } = this;
+ let { context } = component;
+ let seg = getElSeg(segEl);
+ if (!ev || component.isValidSegDownEl(ev.target)) {
+ context.emitter.trigger(publicEvName, {
+ el: segEl,
+ event: new EventImpl(context, seg.eventRange.def, seg.eventRange.instance),
+ jsEvent: ev,
+ view: context.viewApi,
+ });
+ }
+ }
+ }
+
+ class CalendarContent extends PureComponent {
+ constructor() {
+ super(...arguments);
+ this.buildViewContext = memoize(buildViewContext);
+ this.buildViewPropTransformers = memoize(buildViewPropTransformers);
+ this.buildToolbarProps = memoize(buildToolbarProps);
+ this.headerRef = y();
+ this.footerRef = y();
+ this.interactionsStore = {};
+ // eslint-disable-next-line
+ this.state = {
+ viewLabelId: getUniqueDomId(),
+ };
+ // Component Registration
+ // -----------------------------------------------------------------------------------------------------------------
+ this.registerInteractiveComponent = (component, settingsInput) => {
+ let settings = parseInteractionSettings(component, settingsInput);
+ let DEFAULT_INTERACTIONS = [
+ EventClicking,
+ EventHovering,
+ ];
+ let interactionClasses = DEFAULT_INTERACTIONS.concat(this.props.pluginHooks.componentInteractions);
+ let interactions = interactionClasses.map((TheInteractionClass) => new TheInteractionClass(settings));
+ this.interactionsStore[component.uid] = interactions;
+ interactionSettingsStore[component.uid] = settings;
+ };
+ this.unregisterInteractiveComponent = (component) => {
+ let listeners = this.interactionsStore[component.uid];
+ if (listeners) {
+ for (let listener of listeners) {
+ listener.destroy();
+ }
+ delete this.interactionsStore[component.uid];
+ }
+ delete interactionSettingsStore[component.uid];
+ };
+ // Resizing
+ // -----------------------------------------------------------------------------------------------------------------
+ this.resizeRunner = new DelayedRunner(() => {
+ this.props.emitter.trigger('_resize', true); // should window resizes be considered "forced" ?
+ this.props.emitter.trigger('windowResize', { view: this.props.viewApi });
+ });
+ this.handleWindowResize = (ev) => {
+ let { options } = this.props;
+ if (options.handleWindowResize &&
+ ev.target === window // avoid jqui events
+ ) {
+ this.resizeRunner.request(options.windowResizeDelay);
+ }
+ };
+ }
+ /*
+ renders INSIDE of an outer div
+ */
+ render() {
+ let { props } = this;
+ let { toolbarConfig, options } = props;
+ let toolbarProps = this.buildToolbarProps(props.viewSpec, props.dateProfile, props.dateProfileGenerator, props.currentDate, getNow(props.options.now, props.dateEnv), // TODO: use NowTimer????
+ props.viewTitle);
+ let viewVGrow = false;
+ let viewHeight = '';
+ let viewAspectRatio;
+ if (props.isHeightAuto || props.forPrint) {
+ viewHeight = '';
+ }
+ else if (options.height != null) {
+ viewVGrow = true;
+ }
+ else if (options.contentHeight != null) {
+ viewHeight = options.contentHeight;
+ }
+ else {
+ viewAspectRatio = Math.max(options.aspectRatio, 0.5); // prevent from getting too tall
+ }
+ let viewContext = this.buildViewContext(props.viewSpec, props.viewApi, props.options, props.dateProfileGenerator, props.dateEnv, props.theme, props.pluginHooks, props.dispatch, props.getCurrentData, props.emitter, props.calendarApi, this.registerInteractiveComponent, this.unregisterInteractiveComponent);
+ let viewLabelId = (toolbarConfig.header && toolbarConfig.header.hasTitle)
+ ? this.state.viewLabelId
+ : '';
+ return (h(ViewContextType.Provider, { value: viewContext },
+ toolbarConfig.header && (h(Toolbar, Object.assign({ ref: this.headerRef, extraClassName: "fc-header-toolbar", model: toolbarConfig.header, titleId: viewLabelId }, toolbarProps))),
+ h(ViewContainer, { liquid: viewVGrow, height: viewHeight, aspectRatio: viewAspectRatio, labeledById: viewLabelId },
+ this.renderView(props),
+ this.buildAppendContent()),
+ toolbarConfig.footer && (h(Toolbar, Object.assign({ ref: this.footerRef, extraClassName: "fc-footer-toolbar", model: toolbarConfig.footer, titleId: "" }, toolbarProps)))));
+ }
+ componentDidMount() {
+ let { props } = this;
+ this.calendarInteractions = props.pluginHooks.calendarInteractions
+ .map((CalendarInteractionClass) => new CalendarInteractionClass(props));
+ window.addEventListener('resize', this.handleWindowResize);
+ let { propSetHandlers } = props.pluginHooks;
+ for (let propName in propSetHandlers) {
+ propSetHandlers[propName](props[propName], props);
+ }
+ }
+ componentDidUpdate(prevProps) {
+ let { props } = this;
+ let { propSetHandlers } = props.pluginHooks;
+ for (let propName in propSetHandlers) {
+ if (props[propName] !== prevProps[propName]) {
+ propSetHandlers[propName](props[propName], props);
+ }
+ }
+ }
+ componentWillUnmount() {
+ window.removeEventListener('resize', this.handleWindowResize);
+ this.resizeRunner.clear();
+ for (let interaction of this.calendarInteractions) {
+ interaction.destroy();
+ }
+ this.props.emitter.trigger('_unmount');
+ }
+ buildAppendContent() {
+ let { props } = this;
+ let children = props.pluginHooks.viewContainerAppends.map((buildAppendContent) => buildAppendContent(props));
+ return h(p, {}, ...children);
+ }
+ renderView(props) {
+ let { pluginHooks } = props;
+ let { viewSpec } = props;
+ let viewProps = {
+ dateProfile: props.dateProfile,
+ businessHours: props.businessHours,
+ eventStore: props.renderableEventStore,
+ eventUiBases: props.eventUiBases,
+ dateSelection: props.dateSelection,
+ eventSelection: props.eventSelection,
+ eventDrag: props.eventDrag,
+ eventResize: props.eventResize,
+ isHeightAuto: props.isHeightAuto,
+ forPrint: props.forPrint,
+ };
+ let transformers = this.buildViewPropTransformers(pluginHooks.viewPropsTransformers);
+ for (let transformer of transformers) {
+ Object.assign(viewProps, transformer.transform(viewProps, props));
+ }
+ let ViewComponent = viewSpec.component;
+ return (h(ViewComponent, Object.assign({}, viewProps)));
+ }
+ }
+ function buildToolbarProps(viewSpec, dateProfile, dateProfileGenerator, currentDate, now, title) {
+ // don't force any date-profiles to valid date profiles (the `false`) so that we can tell if it's invalid
+ let todayInfo = dateProfileGenerator.build(now, undefined, false); // TODO: need `undefined` or else INFINITE LOOP for some reason
+ let prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate, false);
+ let nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate, false);
+ return {
+ title,
+ activeButton: viewSpec.type,
+ navUnit: viewSpec.singleUnit,
+ isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
+ isPrevEnabled: prevInfo.isValid,
+ isNextEnabled: nextInfo.isValid,
+ };
+ }
+ // Plugin
+ // -----------------------------------------------------------------------------------------------------------------
+ function buildViewPropTransformers(theClasses) {
+ return theClasses.map((TheClass) => new TheClass());
+ }
+
+ class Calendar extends CalendarImpl {
+ constructor(el, optionOverrides = {}) {
+ super();
+ this.isRendering = false;
+ this.isRendered = false;
+ this.currentClassNames = [];
+ this.customContentRenderId = 0;
+ this.handleAction = (action) => {
+ // actions we know we want to render immediately
+ switch (action.type) {
+ case 'SET_EVENT_DRAG':
+ case 'SET_EVENT_RESIZE':
+ this.renderRunner.tryDrain();
+ }
+ };
+ this.handleData = (data) => {
+ this.currentData = data;
+ this.renderRunner.request(data.calendarOptions.rerenderDelay);
+ };
+ this.handleRenderRequest = () => {
+ if (this.isRendering) {
+ this.isRendered = true;
+ let { currentData } = this;
+ flushSync(() => {
+ P$1(h(CalendarRoot, { options: currentData.calendarOptions, theme: currentData.theme, emitter: currentData.emitter }, (classNames, height, isHeightAuto, forPrint) => {
+ this.setClassNames(classNames);
+ this.setHeight(height);
+ return (h(RenderId.Provider, { value: this.customContentRenderId },
+ h(CalendarContent, Object.assign({ isHeightAuto: isHeightAuto, forPrint: forPrint }, currentData))));
+ }), this.el);
+ });
+ }
+ else if (this.isRendered) {
+ this.isRendered = false;
+ P$1(null, this.el);
+ this.setClassNames([]);
+ this.setHeight('');
+ }
+ };
+ this.el = el;
+ this.renderRunner = new DelayedRunner(this.handleRenderRequest);
+ new CalendarDataManager({
+ optionOverrides,
+ calendarApi: this,
+ onAction: this.handleAction,
+ onData: this.handleData,
+ });
+ }
+ render() {
+ let wasRendering = this.isRendering;
+ if (!wasRendering) {
+ this.isRendering = true;
+ }
+ else {
+ this.customContentRenderId += 1;
+ }
+ this.renderRunner.request();
+ if (wasRendering) {
+ this.updateSize();
+ }
+ }
+ destroy() {
+ if (this.isRendering) {
+ this.isRendering = false;
+ this.renderRunner.request();
+ }
+ }
+ updateSize() {
+ flushSync(() => {
+ super.updateSize();
+ });
+ }
+ batchRendering(func) {
+ this.renderRunner.pause('batchRendering');
+ func();
+ this.renderRunner.resume('batchRendering');
+ }
+ pauseRendering() {
+ this.renderRunner.pause('pauseRendering');
+ }
+ resumeRendering() {
+ this.renderRunner.resume('pauseRendering', true);
+ }
+ resetOptions(optionOverrides, append) {
+ this.currentDataManager.resetOptions(optionOverrides, append);
+ }
+ setClassNames(classNames) {
+ if (!isArraysEqual(classNames, this.currentClassNames)) {
+ let { classList } = this.el;
+ for (let className of this.currentClassNames) {
+ classList.remove(className);
+ }
+ for (let className of classNames) {
+ classList.add(className);
+ }
+ this.currentClassNames = classNames;
+ }
+ }
+ setHeight(height) {
+ applyStyleProp(this.el, 'height', height);
+ }
+ }
+
+ function formatDate(dateInput, options = {}) {
+ let dateEnv = buildDateEnv(options);
+ let formatter = createFormatter(options);
+ let dateMeta = dateEnv.createMarkerMeta(dateInput);
+ if (!dateMeta) { // TODO: warning?
+ return '';
+ }
+ return dateEnv.format(dateMeta.marker, formatter, {
+ forcedTzo: dateMeta.forcedTzo,
+ });
+ }
+ function formatRange(startInput, endInput, options) {
+ let dateEnv = buildDateEnv(typeof options === 'object' && options ? options : {}); // pass in if non-null object
+ let formatter = createFormatter(options);
+ let startMeta = dateEnv.createMarkerMeta(startInput);
+ let endMeta = dateEnv.createMarkerMeta(endInput);
+ if (!startMeta || !endMeta) { // TODO: warning?
+ return '';
+ }
+ return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {
+ forcedStartTzo: startMeta.forcedTzo,
+ forcedEndTzo: endMeta.forcedTzo,
+ isEndExclusive: options.isEndExclusive,
+ defaultSeparator: BASE_OPTION_DEFAULTS.defaultRangeSeparator,
+ });
+ }
+ // TODO: more DRY and optimized
+ function buildDateEnv(settings) {
+ let locale = buildLocale(settings.locale || 'en', organizeRawLocales([]).map); // TODO: don't hardcode 'en' everywhere
+ return new DateEnv(Object.assign(Object.assign({ timeZone: BASE_OPTION_DEFAULTS.timeZone, calendarSystem: 'gregory' }, settings), { locale }));
+ }
+
+ // HELPERS
+ /*
+ if nextDayThreshold is specified, slicing is done in an all-day fashion.
+ you can get nextDayThreshold from context.nextDayThreshold
+ */
+ function sliceEvents(props, allDay) {
+ return sliceEventStore(props.eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? props.nextDayThreshold : null).fg;
+ }
+
+ const version = '6.0.3';
+
+ exports.Calendar = Calendar;
+ exports.Internal = internal;
+ exports.JsonRequestError = JsonRequestError;
+ exports.Preact = preact;
+ exports.createPlugin = createPlugin;
+ exports.formatDate = formatDate;
+ exports.formatRange = formatRange;
+ exports.globalLocales = globalLocales;
+ exports.globalPlugins = globalPlugins;
+ exports.sliceEvents = sliceEvents;
+ exports.version = version;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({});
diff --git a/library/fullcalendar/packages/core/index.global.min.js b/library/fullcalendar/packages/core/index.global.min.js
new file mode 100644
index 000000000..8b7f621e9
--- /dev/null
+++ b/library/fullcalendar/packages/core/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+var FullCalendar=function(e){"use strict";function t(e){e.parentNode&&e.parentNode.removeChild(e)}function n(e,t){if(e.closest)return e.closest(t);if(!document.documentElement.contains(e))return null;do{if(r(e,t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}function r(e,t){return(e.matches||e.matchesSelector||e.msMatchesSelector).call(e,t)}function i(e,t){let n=e instanceof HTMLElement?[e]:e,r=[];for(let e=0;e<n.length;e+=1){let i=n[e].querySelectorAll(t);for(let e=0;e<i.length;e+=1)r.push(i[e])}return r}const o=/(top|left|right|bottom|width|height)$/i;function s(e,t){for(let n in t)a(e,n,t[n])}function a(e,t,n){null==n?e.style[t]="":"number"==typeof n&&o.test(t)?e.style[t]=n+"px":e.style[t]=n}function l(e){var t,n;return null!==(n=null===(t=e.composedPath)||void 0===t?void 0:t.call(e)[0])&&void 0!==n?n:e.target}let c=0;function u(){return c+=1,"fc-dom-"+c}function d(e){e.preventDefault()}function f(e,t,r,i){let o=function(e,t){return r=>{let i=n(r.target,e);i&&t.call(i,r,i)}}(r,i);return e.addEventListener(t,o),()=>{e.removeEventListener(t,o)}}const h=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];function p(e){return Object.assign({onClick:e},g(e))}function g(e){return{tabIndex:0,onKeyDown(t){"Enter"!==t.key&&" "!==t.key||(e(t),t.preventDefault())}}}let m=0;function v(){return m+=1,String(m)}function A(e){let t,n,r=[],i=[];for("string"==typeof e?i=e.split(/\s*,\s*/):"function"==typeof e?i=[e]:Array.isArray(e)&&(i=e),t=0;t<i.length;t+=1)n=i[t],"string"==typeof n?r.push("-"===n.charAt(0)?{field:n.substring(1),order:-1}:{field:n,order:1}):"function"==typeof n&&r.push({func:n});return r}function b(e,t,n){let r,i;for(r=0;r<n.length;r+=1)if(i=y(e,t,n[r]),i)return i;return 0}function y(e,t,n){return n.func?n.func(e,t):_(e[n.field],t[n.field])*(n.order||1)}function _(e,t){return e||t?null==t?-1:null==e?1:"string"==typeof e||"string"==typeof t?String(e).localeCompare(String(t)):e-t:0}function E(e,t){let n=String(e);return"000".substr(0,t-n.length)+n}function D(e,t,n){return"function"==typeof e?e(...t):"string"==typeof e?t.reduce((e,t,n)=>e.replace("$"+n,t||""),e):n}function C(e){return e%1==0}function w(e){let t=e.querySelector(".fc-scrollgrid-shrink-frame"),n=e.querySelector(".fc-scrollgrid-shrink-cushion");if(!t)throw new Error("needs fc-scrollgrid-shrink-frame className");if(!n)throw new Error("needs fc-scrollgrid-shrink-cushion className");return e.getBoundingClientRect().width-t.getBoundingClientRect().width+n.getBoundingClientRect().width}const S=["years","months","days","milliseconds"],T=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;function k(e,t){return"string"==typeof e?function(e){let t=T.exec(e);if(t){let e=t[1]?-1:1;return{years:0,months:0,days:e*(t[2]?parseInt(t[2],10):0),milliseconds:e*(60*(t[3]?parseInt(t[3],10):0)*60*1e3+60*(t[4]?parseInt(t[4],10):0)*1e3+1e3*(t[5]?parseInt(t[5],10):0)+(t[6]?parseInt(t[6],10):0))}}return null}(e):"object"==typeof e&&e?R(e):"number"==typeof e?R({[t||"milliseconds"]:e}):null}function R(e){let t={years:e.years||e.year||0,months:e.months||e.month||0,days:e.days||e.day||0,milliseconds:60*(e.hours||e.hour||0)*60*1e3+60*(e.minutes||e.minute||0)*1e3+1e3*(e.seconds||e.second||0)+(e.milliseconds||e.millisecond||e.ms||0)},n=e.weeks||e.week;return n&&(t.days+=7*n,t.specifiedWeeks=!0),t}function x(e){return O(e)/864e5}function O(e){return 31536e6*e.years+2592e6*e.months+864e5*e.days+e.milliseconds}function I(e){let t=e.milliseconds;if(t){if(t%1e3!=0)return{unit:"millisecond",value:t};if(t%6e4!=0)return{unit:"second",value:t/1e3};if(t%36e5!=0)return{unit:"minute",value:t/6e4};if(t)return{unit:"hour",value:t/36e5}}return e.days?e.specifiedWeeks&&e.days%7==0?{unit:"week",value:e.days/7}:{unit:"day",value:e.days}:e.months?{unit:"month",value:e.months}:e.years?{unit:"year",value:e.years}:{unit:"millisecond",value:0}}const{hasOwnProperty:M}=Object.prototype;function N(e,t){let n={};if(t)for(let r in t){let t=[];for(let i=e.length-1;i>=0;i-=1){let o=e[i][r];if("object"==typeof o&&o)t.unshift(o);else if(void 0!==o){n[r]=o;break}}t.length&&(n[r]=N(t))}for(let t=e.length-1;t>=0;t-=1){let r=e[t];for(let e in r)e in n||(n[e]=r[e])}return n}function B(e,t){let n={};for(let r in e)t(e[r],r)&&(n[r]=e[r]);return n}function H(e,t){let n={};for(let r in e)n[r]=t(e[r],r);return n}function P(e){let t={};for(let n of e)t[n]=!0;return t}function U(e){let t=[];for(let n in e)t.push(e[n]);return t}function j(e,t){if(e===t)return!0;for(let n in e)if(M.call(e,n)&&!(n in t))return!1;for(let n in t)if(M.call(t,n)&&e[n]!==t[n])return!1;return!0}const z=/^on[A-Z]/;function L(e,t){let n=[];for(let r in e)M.call(e,r)&&(r in t||n.push(r));for(let r in t)M.call(t,r)&&e[r]!==t[r]&&n.push(r);return n}function F(e,t,n={}){if(e===t)return!0;for(let r in t)if(!(r in e)||!V(e[r],t[r],n[r]))return!1;for(let n in e)if(!(n in t))return!1;return!0}function V(e,t,n){return e===t||!0===n||!!n&&n(e,t)}function W(e,t=0,n,r=1){let i=[];null==n&&(n=Object.keys(e).length);for(let o=t;o<n;o+=r){let t=e[o];void 0!==t&&i.push(t)}return i}const Q=["sun","mon","tue","wed","thu","fri","sat"];function G(e,t){let n=re(e);return n[2]+=t,ie(n)}function Z(e,t){let n=re(e);return n[6]+=t,ie(n)}function Y(e,t){return(t.valueOf()-e.valueOf())/864e5}function q(e,t){let n=X(e),r=X(t);return{years:0,months:0,days:Math.round(Y(n,r)),milliseconds:t.valueOf()-r.valueOf()-(e.valueOf()-n.valueOf())}}function J(e,t){let n=$(e,t);return null!==n&&n%7==0?n/7:null}function $(e,t){return se(e)===se(t)?Math.round(Y(e,t)):null}function X(e){return ie([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()])}function K(e,t,n,r){let i=ie([t,0,1+ee(t,n,r)]),o=X(e),s=Math.round(Y(i,o));return Math.floor(s/7)+1}function ee(e,t,n){let r=7+t-n;return-((7+ie([e,0,r]).getUTCDay()-t)%7)+r-1}function te(e){return[e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()]}function ne(e){return new Date(e[0],e[1]||0,null==e[2]?1:e[2],e[3]||0,e[4]||0,e[5]||0)}function re(e){return[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()]}function ie(e){return 1===e.length&&(e=e.concat([0])),new Date(Date.UTC(...e))}function oe(e){return!isNaN(e.valueOf())}function se(e){return 1e3*e.getUTCHours()*60*60+1e3*e.getUTCMinutes()*60+1e3*e.getUTCSeconds()+e.getUTCMilliseconds()}function ae(e,t,n=!1){let r=e.toISOString();return r=r.replace(".000",""),n&&(r=r.replace("T00:00:00Z","")),r.length>10&&(null==t?r=r.replace("Z",""):0!==t&&(r=r.replace("Z",ce(t,!0)))),r}function le(e){return e.toISOString().replace(/T.*$/,"")}function ce(e,t=!1){let n=e<0?"-":"+",r=Math.abs(e),i=Math.floor(r/60),o=Math.round(r%60);return t?`${n+E(i,2)}:${E(o,2)}`:`GMT${n}${i}${o?":"+E(o,2):""}`}function ue(e,t,n){if(e===t)return!0;let r,i=e.length;if(i!==t.length)return!1;for(r=0;r<i;r+=1)if(!(n?n(e[r],t[r]):e[r]===t[r]))return!1;return!0}function de(e,t,n){let r,i;return function(...o){if(r){if(!ue(r,o)){n&&n(i);let r=e.apply(this,o);t&&t(r,i)||(i=r)}}else i=e.apply(this,o);return r=o,i}}function fe(e,t,n){let r,i;return o=>{if(r){if(!j(r,o)){n&&n(i);let r=e.call(this,o);t&&t(r,i)||(i=r)}}else i=e.call(this,o);return r=o,i}}const he={week:3,separator:0,omitZeroMinute:0,meridiem:0,omitCommas:0},pe={timeZoneName:7,era:6,year:5,month:4,day:2,weekday:2,hour:1,minute:1,second:1},ge=/\s*([ap])\.?m\.?/i,me=/,/g,ve=/\s+/g,Ae=/\u200e/g,be=/UTC|GMT/;class ye{constructor(e){let t={},n={},r=0;for(let i in e)i in he?(n[i]=e[i],r=Math.max(he[i],r)):(t[i]=e[i],i in pe&&(r=Math.max(pe[i],r)));this.standardDateProps=t,this.extendedSettings=n,this.severity=r,this.buildFormattingFunc=de(_e)}format(e,t){return this.buildFormattingFunc(this.standardDateProps,this.extendedSettings,t)(e)}formatRange(e,t,n,r){let{standardDateProps:i,extendedSettings:o}=this,s=function(e,t,n){if(n.getMarkerYear(e)!==n.getMarkerYear(t))return 5;if(n.getMarkerMonth(e)!==n.getMarkerMonth(t))return 4;if(n.getMarkerDay(e)!==n.getMarkerDay(t))return 2;if(se(e)!==se(t))return 1;return 0}(e.marker,t.marker,n.calendarSystem);if(!s)return this.format(e,n);let a=s;!(a>1)||"numeric"!==i.year&&"2-digit"!==i.year||"numeric"!==i.month&&"2-digit"!==i.month||"numeric"!==i.day&&"2-digit"!==i.day||(a=1);let l=this.format(e,n),c=this.format(t,n);if(l===c)return l;let u=_e(function(e,t){let n={};for(let r in e)(!(r in pe)||pe[r]<=t)&&(n[r]=e[r]);return n}(i,a),o,n),d=u(e),f=u(t),h=function(e,t,n,r){let i=0;for(;i<e.length;){let o=e.indexOf(t,i);if(-1===o)break;let s=e.substr(0,o);i=o+t.length;let a=e.substr(i),l=0;for(;l<n.length;){let e=n.indexOf(r,l);if(-1===e)break;let t=n.substr(0,e);l=e+r.length;let i=n.substr(l);if(s===t&&a===i)return{before:s,after:a}}}return null}(l,d,c,f),p=o.separator||r||n.defaultSeparator||"";return h?h.before+d+p+f+h.after:l+p+c}getLargestUnit(){switch(this.severity){case 7:case 6:case 5:return"year";case 4:return"month";case 3:return"week";case 2:return"day";default:return"time"}}}function _e(e,t,n){let r=Object.keys(e).length;return 1===r&&"short"===e.timeZoneName?e=>ce(e.timeZoneOffset):0===r&&t.week?e=>function(e,t,n,r,i){let o=[];"long"===i?o.push(n):"short"!==i&&"narrow"!==i||o.push(t);"long"!==i&&"short"!==i||o.push(" ");o.push(r.simpleNumberFormat.format(e)),"rtl"===r.options.direction&&o.reverse();return o.join("")}(n.computeWeekNumber(e.marker),n.weekText,n.weekTextLong,n.locale,t.week):function(e,t,n){e=Object.assign({},e),t=Object.assign({},t),function(e,t){e.timeZoneName&&(e.hour||(e.hour="2-digit"),e.minute||(e.minute="2-digit"));"long"===e.timeZoneName&&(e.timeZoneName="short");t.omitZeroMinute&&(e.second||e.millisecond)&&delete t.omitZeroMinute}(e,t),e.timeZone="UTC";let r,i=new Intl.DateTimeFormat(n.locale.codes,e);if(t.omitZeroMinute){let t=Object.assign({},e);delete t.minute,r=new Intl.DateTimeFormat(n.locale.codes,t)}return o=>{let s,{marker:a}=o;return s=r&&!a.getUTCMinutes()?r:i,function(e,t,n,r,i){e=e.replace(Ae,""),"short"===n.timeZoneName&&(e=function(e,t){let n=!1;e=e.replace(be,()=>(n=!0,t)),n||(e+=" "+t);return e}(e,"UTC"===i.timeZone||null==t.timeZoneOffset?"UTC":ce(t.timeZoneOffset)));r.omitCommas&&(e=e.replace(me,"").trim());r.omitZeroMinute&&(e=e.replace(":00",""));!1===r.meridiem?e=e.replace(ge,"").trim():"narrow"===r.meridiem?e=e.replace(ge,(e,t)=>t.toLocaleLowerCase()):"short"===r.meridiem?e=e.replace(ge,(e,t)=>t.toLocaleLowerCase()+"m"):"lowercase"===r.meridiem&&(e=e.replace(ge,e=>e.toLocaleLowerCase()));return e=(e=e.replace(ve," ")).trim()}(s.format(a),o,e,t,n)}}(e,t,n)}function Ee(e,t){let n=t.markerToArray(e.marker);return{marker:e.marker,timeZoneOffset:e.timeZoneOffset,array:n,year:n[0],month:n[1],day:n[2],hour:n[3],minute:n[4],second:n[5],millisecond:n[6]}}function De(e,t,n,r){let i=Ee(e,n.calendarSystem);return{date:i,start:i,end:t?Ee(t,n.calendarSystem):null,timeZone:n.timeZone,localeCodes:n.locale.codes,defaultSeparator:r||n.defaultSeparator}}class Ce{constructor(e){this.cmdStr=e}format(e,t,n){return t.cmdFormatter(this.cmdStr,De(e,null,t,n))}formatRange(e,t,n,r){return n.cmdFormatter(this.cmdStr,De(e,t,n,r))}}class we{constructor(e){this.func=e}format(e,t,n){return this.func(De(e,null,t,n))}formatRange(e,t,n,r){return this.func(De(e,t,n,r))}}function Se(e){return"object"==typeof e&&e?new ye(e):"string"==typeof e?new Ce(e):"function"==typeof e?new we(e):null}const Te={navLinkDayClick:He,navLinkWeekClick:He,duration:k,bootstrapFontAwesome:He,buttonIcons:He,customButtons:He,defaultAllDayEventDuration:k,defaultTimedEventDuration:k,nextDayThreshold:k,scrollTime:k,scrollTimeReset:Boolean,slotMinTime:k,slotMaxTime:k,dayPopoverFormat:Se,slotDuration:k,snapDuration:k,headerToolbar:He,footerToolbar:He,defaultRangeSeparator:String,titleRangeSeparator:String,forceEventDuration:Boolean,dayHeaders:Boolean,dayHeaderFormat:Se,dayHeaderClassNames:He,dayHeaderContent:He,dayHeaderDidMount:He,dayHeaderWillUnmount:He,dayCellClassNames:He,dayCellContent:He,dayCellDidMount:He,dayCellWillUnmount:He,initialView:String,aspectRatio:Number,weekends:Boolean,weekNumberCalculation:He,weekNumbers:Boolean,weekNumberClassNames:He,weekNumberContent:He,weekNumberDidMount:He,weekNumberWillUnmount:He,editable:Boolean,viewClassNames:He,viewDidMount:He,viewWillUnmount:He,nowIndicator:Boolean,nowIndicatorClassNames:He,nowIndicatorContent:He,nowIndicatorDidMount:He,nowIndicatorWillUnmount:He,showNonCurrentDates:Boolean,lazyFetching:Boolean,startParam:String,endParam:String,timeZoneParam:String,timeZone:String,locales:He,locale:He,themeSystem:String,dragRevertDuration:Number,dragScroll:Boolean,allDayMaintainDuration:Boolean,unselectAuto:Boolean,dropAccept:He,eventOrder:A,eventOrderStrict:Boolean,handleWindowResize:Boolean,windowResizeDelay:Number,longPressDelay:Number,eventDragMinDistance:Number,expandRows:Boolean,height:He,contentHeight:He,direction:String,weekNumberFormat:Se,eventResizableFromStart:Boolean,displayEventTime:Boolean,displayEventEnd:Boolean,weekText:String,weekTextLong:String,progressiveEventRendering:Boolean,businessHours:He,initialDate:He,now:He,eventDataTransform:He,stickyHeaderDates:He,stickyFooterScrollbar:He,viewHeight:He,defaultAllDay:Boolean,eventSourceFailure:He,eventSourceSuccess:He,eventDisplay:String,eventStartEditable:Boolean,eventDurationEditable:Boolean,eventOverlap:He,eventConstraint:He,eventAllow:He,eventBackgroundColor:String,eventBorderColor:String,eventTextColor:String,eventColor:String,eventClassNames:He,eventContent:He,eventDidMount:He,eventWillUnmount:He,selectConstraint:He,selectOverlap:He,selectAllow:He,droppable:Boolean,unselectCancel:String,slotLabelFormat:He,slotLaneClassNames:He,slotLaneContent:He,slotLaneDidMount:He,slotLaneWillUnmount:He,slotLabelClassNames:He,slotLabelContent:He,slotLabelDidMount:He,slotLabelWillUnmount:He,dayMaxEvents:He,dayMaxEventRows:He,dayMinWidth:Number,slotLabelInterval:k,allDayText:String,allDayClassNames:He,allDayContent:He,allDayDidMount:He,allDayWillUnmount:He,slotMinWidth:Number,navLinks:Boolean,eventTimeFormat:Se,rerenderDelay:Number,moreLinkText:He,moreLinkHint:He,selectMinDistance:Number,selectable:Boolean,selectLongPressDelay:Number,eventLongPressDelay:Number,selectMirror:Boolean,eventMaxStack:Number,eventMinHeight:Number,eventMinWidth:Number,eventShortHeight:Number,slotEventOverlap:Boolean,plugins:He,firstDay:Number,dayCount:Number,dateAlignment:String,dateIncrement:k,hiddenDays:He,monthMode:Boolean,fixedWeekCount:Boolean,validRange:He,visibleRange:He,titleFormat:He,eventInteractive:Boolean,noEventsText:String,viewHint:He,navLinkHint:He,closeHint:String,timeHint:String,eventHint:String,moreLinkClick:He,moreLinkClassNames:He,moreLinkContent:He,moreLinkDidMount:He,moreLinkWillUnmount:He,handleCustomRendering:He,customRenderingMetaMap:He,customRenderingReplacesEl:Boolean},ke={eventDisplay:"auto",defaultRangeSeparator:" - ",titleRangeSeparator:" – ",defaultTimedEventDuration:"01:00:00",defaultAllDayEventDuration:{day:1},forceEventDuration:!1,nextDayThreshold:"00:00:00",dayHeaders:!0,initialView:"",aspectRatio:1.35,headerToolbar:{start:"title",center:"",end:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberCalculation:"local",editable:!1,nowIndicator:!1,scrollTime:"06:00:00",scrollTimeReset:!0,slotMinTime:"00:00:00",slotMaxTime:"24:00:00",showNonCurrentDates:!0,lazyFetching:!0,startParam:"start",endParam:"end",timeZoneParam:"timeZone",timeZone:"local",locales:[],locale:"",themeSystem:"standard",dragRevertDuration:500,dragScroll:!0,allDayMaintainDuration:!1,unselectAuto:!0,dropAccept:"*",eventOrder:"start,-duration,allDay,title",dayPopoverFormat:{month:"long",day:"numeric",year:"numeric"},handleWindowResize:!0,windowResizeDelay:100,longPressDelay:1e3,eventDragMinDistance:5,expandRows:!1,navLinks:!1,selectable:!1,eventMinHeight:15,eventMinWidth:30,eventShortHeight:30},Re={datesSet:He,eventsSet:He,eventAdd:He,eventChange:He,eventRemove:He,windowResize:He,eventClick:He,eventMouseEnter:He,eventMouseLeave:He,select:He,unselect:He,loading:He,_unmount:He,_beforeprint:He,_afterprint:He,_noEventDrop:He,_noEventResize:He,_resize:He,_scrollRequest:He},xe={buttonText:He,buttonHints:He,views:He,plugins:He,initialEvents:He,events:He,eventSources:He},Oe={headerToolbar:Ie,footerToolbar:Ie,buttonText:Ie,buttonHints:Ie,buttonIcons:Ie,dateIncrement:Ie};function Ie(e,t){return"object"==typeof e&&"object"==typeof t&&e&&t?j(e,t):e===t}const Me={type:String,component:He,buttonText:String,buttonTextKey:String,dateProfileGeneratorClass:He,usesMinMaxTime:Boolean,classNames:He,content:He,didMount:He,willUnmount:He};function Ne(e){return N(e,Oe)}function Be(e,t){let n={},r={};for(let r in t)r in e&&(n[r]=t[r](e[r]));for(let n in e)n in t||(r[n]=e[n]);return{refined:n,extra:r}}function He(e){return e}function Pe(e,t,n,r){return{instanceId:v(),defId:e,range:t,forcedStartTzo:null==n?null:n,forcedEndTzo:null==r?null:r}}function Ue(e,t,n){let{dateEnv:r,pluginHooks:i,options:o}=n,{defs:s,instances:a}=e;a=B(a,e=>!s[e.defId].recurringDef);for(let e in s){let n=s[e];if(n.recurringDef){let{duration:s}=n.recurringDef;s||(s=n.allDay?o.defaultAllDayEventDuration:o.defaultTimedEventDuration);let l=je(n,s,t,r,i.recurringTypes);for(let t of l){let n=Pe(e,{start:t,end:r.add(t,s)});a[n.instanceId]=n}}}return{defs:s,instances:a}}function je(e,t,n,r,i){let o=i[e.recurringDef.typeId].expand(e.recurringDef.typeData,{start:r.subtract(n.start,t),end:n.end},r);return e.allDay&&(o=o.map(X)),o}function ze(e,t,n,r){let i={defs:{},instances:{}},o=rt(n);for(let s of e){let e=tt(s,t,n,r,o);e&&Le(e,i)}return i}function Le(e,t={defs:{},instances:{}}){return t.defs[e.def.defId]=e.def,e.instance&&(t.instances[e.instance.instanceId]=e.instance),t}function Fe(e,t){let n=e.instances[t];if(n){let t=e.defs[n.defId],r=Qe(e,e=>{return n=t,r=e,Boolean(n.groupId&&n.groupId===r.groupId);var n,r});return r.defs[t.defId]=t,r.instances[n.instanceId]=n,r}return{defs:{},instances:{}}}function Ve(){return{defs:{},instances:{}}}function We(e,t){return{defs:Object.assign(Object.assign({},e.defs),t.defs),instances:Object.assign(Object.assign({},e.instances),t.instances)}}function Qe(e,t){let n=B(e.defs,t),r=B(e.instances,e=>n[e.defId]);return{defs:n,instances:r}}function Ge(e){return Array.isArray(e)?e:"string"==typeof e?e.split(/\s+/):[]}const Ze={display:String,editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:He,overlap:He,allow:He,className:Ge,classNames:Ge,color:String,backgroundColor:String,borderColor:String,textColor:String},Ye={display:null,startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]};function qe(e,t){let n=function(e,t){return Array.isArray(e)?ze(e,null,t,!0):"object"==typeof e&&e?ze([e],null,t,!0):null!=e?String(e):null}(e.constraint,t);return{display:e.display||null,startEditable:null!=e.startEditable?e.startEditable:e.editable,durationEditable:null!=e.durationEditable?e.durationEditable:e.editable,constraints:null!=n?[n]:[],overlap:null!=e.overlap?e.overlap:null,allows:null!=e.allow?[e.allow]:[],backgroundColor:e.backgroundColor||e.color||"",borderColor:e.borderColor||e.color||"",textColor:e.textColor||"",classNames:(e.className||[]).concat(e.classNames||[])}}function Je(e){return e.reduce($e,Ye)}function $e(e,t){return{display:null!=t.display?t.display:e.display,startEditable:null!=t.startEditable?t.startEditable:e.startEditable,durationEditable:null!=t.durationEditable?t.durationEditable:e.durationEditable,constraints:e.constraints.concat(t.constraints),overlap:"boolean"==typeof t.overlap?t.overlap:e.overlap,allows:e.allows.concat(t.allows),backgroundColor:t.backgroundColor||e.backgroundColor,borderColor:t.borderColor||e.borderColor,textColor:t.textColor||e.textColor,classNames:e.classNames.concat(t.classNames)}}const Xe={id:String,groupId:String,title:String,url:String,interactive:Boolean},Ke={start:He,end:He,date:He,allDay:Boolean},et=Object.assign(Object.assign(Object.assign({},Xe),Ke),{extendedProps:He});function tt(e,t,n,r,i=rt(n)){let{refined:o,extra:s}=nt(e,n,i),a=function(e,t){let n=null;e&&(n=e.defaultAllDay);null==n&&(n=t.options.defaultAllDay);return n}(t,n),l=function(e,t,n,r){for(let i=0;i<r.length;i+=1){let o=r[i].parse(e,n);if(o){let{allDay:n}=e;return null==n&&(n=t,null==n&&(n=o.allDayGuess,null==n&&(n=!1))),{allDay:n,duration:o.duration,typeData:o.typeData,typeId:i}}}return null}(o,a,n.dateEnv,n.pluginHooks.recurringTypes);if(l){let e=it(o,s,t?t.sourceId:"",l.allDay,Boolean(l.duration),n);return e.recurringDef={typeId:l.typeId,typeData:l.typeData,duration:l.duration},{def:e,instance:null}}let c=function(e,t,n,r){let i,o,{allDay:s}=e,a=null,l=!1,c=null,u=null!=e.start?e.start:e.date;if(i=n.dateEnv.createMarkerMeta(u),i)a=i.marker;else if(!r)return null;null!=e.end&&(o=n.dateEnv.createMarkerMeta(e.end));null==s&&(s=null!=t?t:(!i||i.isTimeUnspecified)&&(!o||o.isTimeUnspecified));s&&a&&(a=X(a));o&&(c=o.marker,s&&(c=X(c)),a&&c<=a&&(c=null));c?l=!0:r||(l=n.options.forceEventDuration||!1,c=n.dateEnv.add(a,s?n.options.defaultAllDayEventDuration:n.options.defaultTimedEventDuration));return{allDay:s,hasEnd:l,range:{start:a,end:c},forcedStartTzo:i?i.forcedTzo:null,forcedEndTzo:o?o.forcedTzo:null}}(o,a,n,r);if(c){let e=it(o,s,t?t.sourceId:"",c.allDay,c.hasEnd,n);return{def:e,instance:Pe(e.defId,c.range,c.forcedStartTzo,c.forcedEndTzo)}}return null}function nt(e,t,n=rt(t)){return Be(e,n)}function rt(e){return Object.assign(Object.assign(Object.assign({},Ze),et),e.pluginHooks.eventRefiners)}function it(e,t,n,r,i,o){let s={title:e.title||"",groupId:e.groupId||"",publicId:e.id||"",url:e.url||"",recurringDef:null,defId:v(),sourceId:n,allDay:r,hasEnd:i,interactive:e.interactive,ui:qe(e,o),extendedProps:Object.assign(Object.assign({},e.extendedProps||{}),t)};for(let t of o.pluginHooks.eventDefMemberAdders)Object.assign(s,t(e));return Object.freeze(s.ui.classNames),Object.freeze(s.extendedProps),s}const ot={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],display:"inverse-background",classNames:"fc-non-business",groupId:"_businessHours"};function st(e,t){return ze(function(e){let t;t=!0===e?[{}]:Array.isArray(e)?e.filter(e=>e.daysOfWeek):"object"==typeof e&&e?[e]:[];return t=t.map(e=>Object.assign(Object.assign({},ot),e)),t}(e),null,t)}function at(e){let t=Math.floor(Y(e.start,e.end))||1,n=X(e.start);return{start:n,end:G(n,t)}}function lt(e,t=k(0)){let n=null,r=null;if(e.end){r=X(e.end);let n=e.end.valueOf()-r.valueOf();n&&n>=O(t)&&(r=G(r,1))}return e.start&&(n=X(e.start),r&&r<=n&&(r=G(n,1))),{start:n,end:r}}function ct(e,t,n,r){return"year"===r?k(n.diffWholeYears(e,t),"year"):"month"===r?k(n.diffWholeMonths(e,t),"month"):q(e,t)}function ut(e,t){let n={left:Math.max(e.left,t.left),right:Math.min(e.right,t.right),top:Math.max(e.top,t.top),bottom:Math.min(e.bottom,t.bottom)};return n.left<n.right&&n.top<n.bottom&&n}let dt;function ft(){return null==dt&&(dt=function(){if("undefined"==typeof document)return!0;let e=document.createElement("div");e.style.position="absolute",e.style.top="0px",e.style.left="0px",e.innerHTML="<table><tr><td><div></div></td></tr></table>",e.querySelector("table").style.height="100px",e.querySelector("div").style.height="100%",document.body.appendChild(e);let t=e.querySelector("div").offsetHeight>0;return document.body.removeChild(e),t}()),dt}const ht={defs:{},instances:{}};function pt(e,t,n){let r=[];e&&r.push(e),t&&r.push(t);let i={"":Je(r)};return n&&Object.assign(i,n),i}function gt(e,t){let n,r,i=[],{start:o}=t;for(e.sort(mt),n=0;n<e.length;n+=1)r=e[n],r.start>o&&i.push({start:o,end:r.start}),r.end>o&&(o=r.end);return o<t.end&&i.push({start:o,end:t.end}),i}function mt(e,t){return e.start.valueOf()-t.start.valueOf()}function vt(e,t){let{start:n,end:r}=e,i=null;return null!==t.start&&(n=null===n?t.start:new Date(Math.max(n.valueOf(),t.start.valueOf()))),null!=t.end&&(r=null===r?t.end:new Date(Math.min(r.valueOf(),t.end.valueOf()))),(null===n||null===r||n<r)&&(i={start:n,end:r}),i}function At(e,t){return(null===e.start?null:e.start.valueOf())===(null===t.start?null:t.start.valueOf())&&(null===e.end?null:e.end.valueOf())===(null===t.end?null:t.end.valueOf())}function bt(e,t){return(null===e.end||null===t.start||e.end>t.start)&&(null===e.start||null===t.end||e.start<t.end)}function yt(e,t){return(null===e.start||null!==t.start&&t.start>=e.start)&&(null===e.end||null!==t.end&&t.end<=e.end)}function _t(e,t){return(null===e.start||t>=e.start)&&(null===e.end||t<e.end)}function Et(e,t,n,r){return{dow:e.getUTCDay(),isDisabled:Boolean(r&&!_t(r.activeRange,e)),isOther:Boolean(r&&!_t(r.currentRange,e)),isToday:Boolean(t&&_t(t,e)),isPast:Boolean(n?e<n:!!t&&e<t.start),isFuture:Boolean(n?e>n:!!t&&e>=t.end)}}function Dt(e,t){let n=["fc-day","fc-day-"+Q[e.dow]];return e.isDisabled?n.push("fc-day-disabled"):(e.isToday&&(n.push("fc-day-today"),n.push(t.getClass("today"))),e.isPast&&n.push("fc-day-past"),e.isFuture&&n.push("fc-day-future"),e.isOther&&n.push("fc-day-other")),n}const Ct=Se({year:"numeric",month:"long",day:"numeric"}),wt=Se({week:"long"});function St(e,t,n="day",r=!0){const{dateEnv:i,options:o,calendarApi:s}=e;let a=i.format(t,"week"===n?wt:Ct);if(o.navLinks){let e=i.toDate(t);const l=e=>{let r="day"===n?o.navLinkDayClick:"week"===n?o.navLinkWeekClick:null;"function"==typeof r?r.call(s,i.toDate(t),e):("string"==typeof r&&(n=r),s.zoomTo(t,n))};return Object.assign({title:D(o.navLinkHint,[a,e],a),"data-navlink":""},r?p(l):{onClick:l})}return{"aria-label":a}}let Tt,kt=null;function Rt(){return null===kt&&(kt=function(){let e=document.createElement("div");s(e,{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}),e.innerHTML="<div></div>",document.body.appendChild(e);let n=e.firstChild.getBoundingClientRect().left>e.getBoundingClientRect().left;return t(e),n}()),kt}function xt(){return Tt||(Tt=function(){let e=document.createElement("div");e.style.overflow="scroll",e.style.position="absolute",e.style.top="-9999px",e.style.left="-9999px",document.body.appendChild(e);let t=Ot(e);return document.body.removeChild(e),t}()),Tt}function Ot(e){return{x:e.offsetHeight-e.clientHeight,y:e.offsetWidth-e.clientWidth}}function It(e,t=!1){let n=window.getComputedStyle(e),r=parseInt(n.borderLeftWidth,10)||0,i=parseInt(n.borderRightWidth,10)||0,o=parseInt(n.borderTopWidth,10)||0,s=parseInt(n.borderBottomWidth,10)||0,a=Ot(e),l=a.y-r-i,c={borderLeft:r,borderRight:i,borderTop:o,borderBottom:s,scrollbarBottom:a.x-o-s,scrollbarLeft:0,scrollbarRight:0};return Rt()&&"rtl"===n.direction?c.scrollbarLeft=l:c.scrollbarRight=l,t&&(c.paddingLeft=parseInt(n.paddingLeft,10)||0,c.paddingRight=parseInt(n.paddingRight,10)||0,c.paddingTop=parseInt(n.paddingTop,10)||0,c.paddingBottom=parseInt(n.paddingBottom,10)||0),c}function Mt(e){let t=e.getBoundingClientRect();return{left:t.left+window.pageXOffset,top:t.top+window.pageYOffset,right:t.right+window.pageXOffset,bottom:t.bottom+window.pageYOffset}}function Nt(e){let t=[];for(;e instanceof HTMLElement;){let n=window.getComputedStyle(e);if("fixed"===n.position)break;/(auto|scroll)/.test(n.overflow+n.overflowY+n.overflowX)&&t.push(e),e=e.parentNode}return t}function Bt(e,t,n){let r=!1,i=function(e){r||(r=!0,t(e))},o=function(e){r||(r=!0,n(e))},s=e(i,o);s&&"function"==typeof s.then&&s.then(i,o)}class Ht{constructor(){this.handlers={},this.thisContext=null}setThisContext(e){this.thisContext=e}setOptions(e){this.options=e}on(e,t){!function(e,t,n){(e[t]||(e[t]=[])).push(n)}(this.handlers,e,t)}off(e,t){!function(e,t,n){n?e[t]&&(e[t]=e[t].filter(e=>e!==n)):delete e[t]}(this.handlers,e,t)}trigger(e,...t){let n=this.handlers[e]||[],r=this.options&&this.options[e],i=[].concat(r||[],n);for(let e of i)e.apply(this.thisContext,t)}hasHandlers(e){return Boolean(this.handlers[e]&&this.handlers[e].length||this.options&&this.options[e])}}function Pt(e,t){const n=e.length;if(n!==t.length)return!1;for(let r=0;r<n;r++)if(Math.round(e[r])!==Math.round(t[r]))return!1;return!0}class Ut{getMaxScrollTop(){return this.getScrollHeight()-this.getClientHeight()}getMaxScrollLeft(){return this.getScrollWidth()-this.getClientWidth()}canScrollVertically(){return this.getMaxScrollTop()>0}canScrollHorizontally(){return this.getMaxScrollLeft()>0}canScrollUp(){return this.getScrollTop()>0}canScrollDown(){return this.getScrollTop()<this.getMaxScrollTop()}canScrollLeft(){return this.getScrollLeft()>0}canScrollRight(){return this.getScrollLeft()<this.getMaxScrollLeft()}}class jt{constructor(e){this.iconOverrideOption&&this.setIconOverride(e[this.iconOverrideOption])}setIconOverride(e){let t,n;if("object"==typeof e&&e){for(n in t=Object.assign({},this.iconClasses),e)t[n]=this.applyIconOverridePrefix(e[n]);this.iconClasses=t}else!1===e&&(this.iconClasses={})}applyIconOverridePrefix(e){let t=this.iconOverridePrefix;return t&&0!==e.indexOf(t)&&(e=t+e),e}getClass(e){return this.classes[e]||""}getIconClass(e,t){let n;return n=t&&this.rtlIconClasses&&this.rtlIconClasses[e]||this.iconClasses[e],n?`${this.baseIconClass} ${n}`:""}getCustomButtonIconClass(e){let t;return this.iconOverrideCustomButtonOption&&(t=e[this.iconOverrideCustomButtonOption],t)?`${this.baseIconClass} ${this.applyIconOverridePrefix(t)}`:""}}jt.prototype.classes={},jt.prototype.iconClasses={},jt.prototype.baseIconClass="",jt.prototype.iconOverridePrefix="";var zt,Lt,Ft,Vt,Wt,Qt,Gt,Zt={},Yt=[],qt=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function Jt(e,t){for(var n in t)e[n]=t[n];return e}function $t(e){var t=e.parentNode;t&&t.removeChild(e)}function Xt(e,t,n){var r,i,o,s={};for(o in t)"key"==o?r=t[o]:"ref"==o?i=t[o]:s[o]=t[o];if(arguments.length>2&&(s.children=arguments.length>3?zt.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(o in e.defaultProps)void 0===s[o]&&(s[o]=e.defaultProps[o]);return Kt(e,s,r,i,null)}function Kt(e,t,n,r,i){var o={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==i?++Ft:i};return null==i&&null!=Lt.vnode&&Lt.vnode(o),o}function en(){return{current:null}}function tn(e){return e.children}function nn(e,t){this.props=e,this.context=t}function rn(e,t){if(null==t)return e.__?rn(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?rn(e):null}function on(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return on(e)}}function sn(e){(!e.__d&&(e.__d=!0)&&Wt.push(e)&&!an.__r++||Qt!==Lt.debounceRendering)&&((Qt=Lt.debounceRendering)||setTimeout)(an)}function an(){for(var e;an.__r=Wt.length;)e=Wt.sort((function(e,t){return e.__v.__b-t.__v.__b})),Wt=[],e.some((function(e){var t,n,r,i,o,s;e.__d&&(o=(i=(t=e).__v).__e,(s=t.__P)&&(n=[],(r=Jt({},i)).__v=i.__v+1,mn(s,i,r,t.__n,void 0!==s.ownerSVGElement,null!=i.__h?[o]:null,n,null==o?rn(i):o,i.__h),vn(n,i),i.__e!=o&&on(i)))}))}function ln(e,t,n,r,i,o,s,a,l,c){var u,d,f,h,p,g,m,v=r&&r.__k||Yt,A=v.length;for(n.__k=[],u=0;u<t.length;u++)if(null!=(h=n.__k[u]=null==(h=t[u])||"boolean"==typeof h?null:"string"==typeof h||"number"==typeof h||"bigint"==typeof h?Kt(null,h,null,null,h):Array.isArray(h)?Kt(tn,{children:h},null,null,null):h.__b>0?Kt(h.type,h.props,h.key,h.ref?h.ref:null,h.__v):h)){if(h.__=n,h.__b=n.__b+1,null===(f=v[u])||f&&h.key==f.key&&h.type===f.type)v[u]=void 0;else for(d=0;d<A;d++){if((f=v[d])&&h.key==f.key&&h.type===f.type){v[d]=void 0;break}f=null}mn(e,h,f=f||Zt,i,o,s,a,l,c),p=h.__e,(d=h.ref)&&f.ref!=d&&(m||(m=[]),f.ref&&m.push(f.ref,null,h),m.push(d,h.__c||p,h)),null!=p?(null==g&&(g=p),"function"==typeof h.type&&h.__k===f.__k?h.__d=l=cn(h,l,e):l=dn(e,h,f,v,p,l),"function"==typeof n.type&&(n.__d=l)):l&&f.__e==l&&l.parentNode!=e&&(l=rn(f))}for(n.__e=g,u=A;u--;)null!=v[u]&&yn(v[u],v[u]);if(m)for(u=0;u<m.length;u++)bn(m[u],m[++u],m[++u])}function cn(e,t,n){for(var r,i=e.__k,o=0;i&&o<i.length;o++)(r=i[o])&&(r.__=e,t="function"==typeof r.type?cn(r,t,n):dn(n,r,r,i,r.__e,t));return t}function un(e,t){return t=t||[],null==e||"boolean"==typeof e||(Array.isArray(e)?e.some((function(e){un(e,t)})):t.push(e)),t}function dn(e,t,n,r,i,o){var s,a,l;if(void 0!==t.__d)s=t.__d,t.__d=void 0;else if(null==n||i!=o||null==i.parentNode)e:if(null==o||o.parentNode!==e)e.appendChild(i),s=null;else{for(a=o,l=0;(a=a.nextSibling)&&l<r.length;l+=1)if(a==i)break e;e.insertBefore(i,o),s=o}return void 0!==s?s:i.nextSibling}function fn(e,t,n){"-"===t[0]?e.setProperty(t,n):e[t]=null==n?"":"number"!=typeof n||qt.test(t)?n:n+"px"}function hn(e,t,n,r,i){var o;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||fn(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||fn(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])o=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?r||e.addEventListener(t,o?gn:pn,o):e.removeEventListener(t,o?gn:pn,o);else if("dangerouslySetInnerHTML"!==t){if(i)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&-1==t.indexOf("-")?e.removeAttribute(t):e.setAttribute(t,n))}}function pn(e){this.l[e.type+!1](Lt.event?Lt.event(e):e)}function gn(e){this.l[e.type+!0](Lt.event?Lt.event(e):e)}function mn(e,t,n,r,i,o,s,a,l){var c,u,d,f,h,p,g,m,v,A,b,y,_,E,D,C=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,a=t.__e=n.__e,t.__h=null,o=[a]),(c=Lt.__b)&&c(t);try{e:if("function"==typeof C){if(m=t.props,v=(c=C.contextType)&&r[c.__c],A=c?v?v.props.value:c.__:r,n.__c?g=(u=t.__c=n.__c).__=u.__E:("prototype"in C&&C.prototype.render?t.__c=u=new C(m,A):(t.__c=u=new nn(m,A),u.constructor=C,u.render=_n),v&&v.sub(u),u.props=m,u.state||(u.state={}),u.context=A,u.__n=r,d=u.__d=!0,u.__h=[],u._sb=[]),null==u.__s&&(u.__s=u.state),null!=C.getDerivedStateFromProps&&(u.__s==u.state&&(u.__s=Jt({},u.__s)),Jt(u.__s,C.getDerivedStateFromProps(m,u.__s))),f=u.props,h=u.state,d)null==C.getDerivedStateFromProps&&null!=u.componentWillMount&&u.componentWillMount(),null!=u.componentDidMount&&u.__h.push(u.componentDidMount);else{if(null==C.getDerivedStateFromProps&&m!==f&&null!=u.componentWillReceiveProps&&u.componentWillReceiveProps(m,A),!u.__e&&null!=u.shouldComponentUpdate&&!1===u.shouldComponentUpdate(m,u.__s,A)||t.__v===n.__v){for(u.props=m,u.state=u.__s,t.__v!==n.__v&&(u.__d=!1),u.__v=t,t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),b=0;b<u._sb.length;b++)u.__h.push(u._sb[b]);u._sb=[],u.__h.length&&s.push(u);break e}null!=u.componentWillUpdate&&u.componentWillUpdate(m,u.__s,A),null!=u.componentDidUpdate&&u.__h.push((function(){u.componentDidUpdate(f,h,p)}))}if(u.context=A,u.props=m,u.__v=t,u.__P=e,y=Lt.__r,_=0,"prototype"in C&&C.prototype.render){for(u.state=u.__s,u.__d=!1,y&&y(t),c=u.render(u.props,u.state,u.context),E=0;E<u._sb.length;E++)u.__h.push(u._sb[E]);u._sb=[]}else do{u.__d=!1,y&&y(t),c=u.render(u.props,u.state,u.context),u.state=u.__s}while(u.__d&&++_<25);u.state=u.__s,null!=u.getChildContext&&(r=Jt(Jt({},r),u.getChildContext())),d||null==u.getSnapshotBeforeUpdate||(p=u.getSnapshotBeforeUpdate(f,h)),D=null!=c&&c.type===tn&&null==c.key?c.props.children:c,ln(e,Array.isArray(D)?D:[D],t,n,r,i,o,s,a,l),u.base=t.__e,t.__h=null,u.__h.length&&s.push(u),g&&(u.__E=u.__=null),u.__e=!1}else null==o&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=An(n.__e,t,n,r,i,o,s,l);(c=Lt.diffed)&&c(t)}catch(e){t.__v=null,(l||null!=o)&&(t.__e=a,t.__h=!!l,o[o.indexOf(a)]=null),Lt.__e(e,t,n)}}function vn(e,t){Lt.__c&&Lt.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){Lt.__e(e,t.__v)}}))}function An(e,t,n,r,i,o,s,a){var l,c,u,d=n.props,f=t.props,h=t.type,p=0;if("svg"===h&&(i=!0),null!=o)for(;p<o.length;p++)if((l=o[p])&&"setAttribute"in l==!!h&&(h?l.localName===h:3===l.nodeType)){e=l,o[p]=null;break}if(null==e){if(null===h)return document.createTextNode(f);e=i?document.createElementNS("http://www.w3.org/2000/svg",h):document.createElement(h,f.is&&f),o=null,a=!1}if(null===h)d===f||a&&e.data===f||(e.data=f);else{if(o=o&&zt.call(e.childNodes),c=(d=n.props||Zt).dangerouslySetInnerHTML,u=f.dangerouslySetInnerHTML,!a){if(null!=o)for(d={},p=0;p<e.attributes.length;p++)d[e.attributes[p].name]=e.attributes[p].value;(u||c)&&(u&&(c&&u.__html==c.__html||u.__html===e.innerHTML)||(e.innerHTML=u&&u.__html||""))}if(function(e,t,n,r,i){var o;for(o in n)"children"===o||"key"===o||o in t||hn(e,o,null,n[o],r);for(o in t)i&&"function"!=typeof t[o]||"children"===o||"key"===o||"value"===o||"checked"===o||n[o]===t[o]||hn(e,o,t[o],n[o],r)}(e,f,d,i,a),u)t.__k=[];else if(p=t.props.children,ln(e,Array.isArray(p)?p:[p],t,n,r,i&&"foreignObject"!==h,o,s,o?o[0]:n.__k&&rn(n,0),a),null!=o)for(p=o.length;p--;)null!=o[p]&&$t(o[p]);a||("value"in f&&void 0!==(p=f.value)&&(p!==e.value||"progress"===h&&!p||"option"===h&&p!==d.value)&&hn(e,"value",p,d.value,!1),"checked"in f&&void 0!==(p=f.checked)&&p!==e.checked&&hn(e,"checked",p,d.checked,!1))}return e}function bn(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){Lt.__e(e,n)}}function yn(e,t,n){var r,i;if(Lt.unmount&&Lt.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||bn(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){Lt.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(i=0;i<r.length;i++)r[i]&&yn(r[i],t,n||"function"!=typeof e.type);n||null==e.__e||$t(e.__e),e.__=e.__e=e.__d=void 0}function _n(e,t,n){return this.constructor(e,n)}function En(e,t,n){var r,i,o;Lt.__&&Lt.__(e,t),i=(r="function"==typeof n)?null:n&&n.__k||t.__k,o=[],mn(t,e=(!r&&n||t).__k=Xt(tn,null,[e]),i||Zt,Zt,void 0!==t.ownerSVGElement,!r&&n?[n]:i?null:t.firstChild?zt.call(t.childNodes):null,o,!r&&n?n:i?i.__e:t.firstChild,r),vn(o,e)}zt=Yt.slice,Lt={__e:function(e,t,n,r){for(var i,o,s;t=t.__;)if((i=t.__c)&&!i.__)try{if((o=i.constructor)&&null!=o.getDerivedStateFromError&&(i.setState(o.getDerivedStateFromError(e)),s=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(e,r||{}),s=i.__d),s)return i.__E=i}catch(t){e=t}throw e}},Ft=0,Vt=function(e){return null!=e&&void 0===e.constructor},nn.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=Jt({},this.state),"function"==typeof e&&(e=e(Jt({},n),this.props)),e&&Jt(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),sn(this))},nn.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),sn(this))},nn.prototype.render=tn,Wt=[],an.__r=0,Gt=0;var Dn,Cn,wn,Sn=[],Tn=[],kn=Lt.__b,Rn=Lt.__r,xn=Lt.diffed,On=Lt.__c,In=Lt.unmount;function Mn(){for(var e;e=Sn.shift();)if(e.__P&&e.__H)try{e.__H.__h.forEach(Hn),e.__H.__h.forEach(Pn),e.__H.__h=[]}catch(t){e.__H.__h=[],Lt.__e(t,e.__v)}}Lt.__b=function(e){Dn=null,kn&&kn(e)},Lt.__r=function(e){Rn&&Rn(e);var t=(Dn=e.__c).__H;t&&(Cn===Dn?(t.__h=[],Dn.__h=[],t.__.forEach((function(e){e.__N&&(e.__=e.__N),e.__V=Tn,e.__N=e.i=void 0}))):(t.__h.forEach(Hn),t.__h.forEach(Pn),t.__h=[])),Cn=Dn},Lt.diffed=function(e){xn&&xn(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(1!==Sn.push(t)&&wn===Lt.requestAnimationFrame||((wn=Lt.requestAnimationFrame)||Bn)(Mn)),t.__H.__.forEach((function(e){e.i&&(e.__H=e.i),e.__V!==Tn&&(e.__=e.__V),e.i=void 0,e.__V=Tn}))),Cn=Dn=null},Lt.__c=function(e,t){t.some((function(e){try{e.__h.forEach(Hn),e.__h=e.__h.filter((function(e){return!e.__||Pn(e)}))}catch(n){t.some((function(e){e.__h&&(e.__h=[])})),t=[],Lt.__e(n,e.__v)}})),On&&On(e,t)},Lt.unmount=function(e){In&&In(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach((function(e){try{Hn(e)}catch(e){t=e}})),n.__H=void 0,t&&Lt.__e(t,n.__v))};var Nn="function"==typeof requestAnimationFrame;function Bn(e){var t,n=function(){clearTimeout(r),Nn&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,100);Nn&&(t=requestAnimationFrame(n))}function Hn(e){var t=Dn,n=e.__c;"function"==typeof n&&(e.__c=void 0,n()),Dn=t}function Pn(e){var t=Dn;e.__c=e.__(),Dn=t}function Un(e,t){for(var n in e)if("__source"!==n&&!(n in t))return!0;for(var r in t)if("__source"!==r&&e[r]!==t[r])return!0;return!1}function jn(e){this.props=e}(jn.prototype=new nn).isPureReactComponent=!0,jn.prototype.shouldComponentUpdate=function(e,t){return Un(this.props,e)||Un(this.state,t)};var zn=Lt.__b;Lt.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),zn&&zn(e)};var Ln=Lt.__e;Lt.__e=function(e,t,n,r){if(e.then)for(var i,o=t;o=o.__;)if((i=o.__c)&&i.__c)return null==t.__e&&(t.__e=n.__e,t.__k=n.__k),i.__c(e,t);Ln(e,t,n,r)};var Fn=Lt.unmount;function Vn(){this.__u=0,this.t=null,this.__b=null}function Wn(e){var t=e.__.__c;return t&&t.__a&&t.__a(e)}function Qn(){this.u=null,this.o=null}Lt.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&!0===e.__h&&(e.type=null),Fn&&Fn(e)},(Vn.prototype=new nn).__c=function(e,t){var n=t.__c,r=this;null==r.t&&(r.t=[]),r.t.push(n);var i=Wn(r.__v),o=!1,s=function(){o||(o=!0,n.__R=null,i?i(a):a())};n.__R=s;var a=function(){if(!--r.__u){if(r.state.__a){var e=r.state.__a;r.__v.__k[0]=function e(t,n,r){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map((function(t){return e(t,n,r)})),t.__c&&t.__c.__P===n&&(t.__e&&r.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=r)),t}(e,e.__c.__P,e.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.t.pop();)t.forceUpdate()}},l=!0===t.__h;r.__u++||l||r.setState({__a:r.__b=r.__v.__k[0]}),e.then(s,s)},Vn.prototype.componentWillUnmount=function(){this.t=[]},Vn.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),r=this.__v.__k[0].__c;this.__v.__k[0]=function e(t,n,r){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach((function(e){"function"==typeof e.__c&&e.__c()})),t.__c.__H=null),null!=(t=function(e,t){for(var n in t)e[n]=t[n];return e}({},t)).__c&&(t.__c.__P===r&&(t.__c.__P=n),t.__c=null),t.__k=t.__k&&t.__k.map((function(t){return e(t,n,r)}))),t}(this.__b,n,r.__O=r.__P)}this.__b=null}var i=t.__a&&Xt(tn,null,e.fallback);return i&&(i.__h=null),[Xt(tn,null,t.__a?null:e.children),i]};var Gn=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&("t"!==e.props.revealOrder[0]||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]<n[0])break;e.u=n=n[2]}};function Zn(e){return this.getChildContext=function(){return e.context},e.children}function Yn(e){var t=this,n=e.i;t.componentWillUnmount=function(){En(null,t.l),t.l=null,t.i=null},t.i&&t.i!==n&&t.componentWillUnmount(),e.__v?(t.l||(t.i=n,t.l={nodeType:1,parentNode:n,childNodes:[],appendChild:function(e){this.childNodes.push(e),t.i.appendChild(e)},insertBefore:function(e,n){this.childNodes.push(e),t.i.appendChild(e)},removeChild:function(e){this.childNodes.splice(this.childNodes.indexOf(e)>>>1,1),t.i.removeChild(e)}}),En(Xt(Zn,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function qn(e,t){var n=Xt(Yn,{__v:e,i:t});return n.containerInfo=t,n}(Qn.prototype=new nn).__a=function(e){var t=this,n=Wn(t.__v),r=t.o.get(e);return r[0]++,function(i){var o=function(){t.props.revealOrder?(r.push(i),Gn(t,e,r)):i()};n?n(o):o()}},Qn.prototype.render=function(e){this.u=null,this.o=new Map;var t=un(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Qn.prototype.componentDidUpdate=Qn.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){Gn(e,n,t)}))};var Jn="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,$n=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Xn="undefined"!=typeof document,Kn=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(e)};nn.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(nn.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var er=Lt.event;function tr(){}function nr(){return this.cancelBubble}function rr(){return this.defaultPrevented}Lt.event=function(e){return er&&(e=er(e)),e.persist=tr,e.isPropagationStopped=nr,e.isDefaultPrevented=rr,e.nativeEvent=e};var ir={configurable:!0,get:function(){return this.class}},or=Lt.vnode;Lt.vnode=function(e){var t=e.type,n=e.props,r=n;if("string"==typeof t){var i=-1===t.indexOf("-");for(var o in r={},n){var s=n[o];Xn&&"children"===o&&"noscript"===t||"value"===o&&"defaultValue"in n&&null==s||("defaultValue"===o&&"value"in n&&null==n.value?o="value":"download"===o&&!0===s?s="":/ondoubleclick/i.test(o)?o="ondblclick":/^onchange(textarea|input)/i.test(o+t)&&!Kn(n.type)?o="oninput":/^onfocus$/i.test(o)?o="onfocusin":/^onblur$/i.test(o)?o="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(o)?o=o.toLowerCase():i&&$n.test(o)?o=o.replace(/[A-Z0-9]/g,"-$&").toLowerCase():null===s&&(s=void 0),/^oninput$/i.test(o)&&(o=o.toLowerCase(),r[o]&&(o="oninputCapture")),r[o]=s)}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=un(n.children).forEach((function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)}))),"select"==t&&null!=r.defaultValue&&(r.value=un(n.children).forEach((function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value}))),e.props=r,n.class!=n.className&&(ir.enumerable="className"in n,null!=n.className&&(r.class=n.className),Object.defineProperty(r,"className",ir))}e.$$typeof=Jn,or&&or(e)};var sr=Lt.__r;function ar(e){e();let t=Lt.debounceRendering,n=[];for(Lt.debounceRendering=function(e){n.push(e)},En(Xt(lr,{}),document.createElement("div"));n.length;)n.shift()();Lt.debounceRendering=t}Lt.__r=function(e){sr&&sr(e),e.__c};class lr extends nn{render(){return Xt("div",{})}componentDidMount(){this.setState({})}}function cr(e){let t=function(e,t){var n={__c:t="__cC"+Gt++,__:e,Consumer:function(e,t){return e.children(t)},Provider:function(e){var n,r;return this.getChildContext||(n=[],(r={})[t]=this,this.getChildContext=function(){return r},this.shouldComponentUpdate=function(e){this.props.value!==e.value&&n.some(sn)},this.sub=function(e){n.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){n.splice(n.indexOf(e),1),t&&t.call(e)}}),e.children}};return n.Provider.__=n.Consumer.contextType=n}(e),n=t.Provider;return t.Provider=function(){let e=!this.getChildContext,t=n.apply(this,arguments);if(e){let e=[];this.shouldComponentUpdate=t=>{this.props.value!==t.value&&e.forEach(e=>{e.context=t.value,e.forceUpdate()})},this.sub=t=>{e.push(t);let n=t.componentWillUnmount;t.componentWillUnmount=()=>{e.splice(e.indexOf(t),1),n&&n.call(t)}}}return t},t}var ur={__proto__:null,flushSync:ar,createContext:cr,createPortal:qn,Component:nn,Fragment:tn,cloneElement:function(e,t,n){var r,i,o,s=Jt({},e.props);for(o in t)"key"==o?r=t[o]:"ref"==o?i=t[o]:s[o]=t[o];return arguments.length>2&&(s.children=arguments.length>3?zt.call(arguments,2):n),Kt(e.type,s,r||e.key,i||e.ref,null)},createElement:Xt,createRef:en,h:Xt,hydrate:function e(t,n){En(t,n,e)},get isValidElement(){return Vt},get options(){return Lt},render:En,toChildArray:un};class dr{constructor(e,t,n,r){this.execFunc=e,this.emitter=t,this.scrollTime=n,this.scrollTimeReset=r,this.handleScrollRequest=e=>{this.queuedRequest=Object.assign({},this.queuedRequest||{},e),this.drain()},t.on("_scrollRequest",this.handleScrollRequest),this.fireInitialScroll()}detach(){this.emitter.off("_scrollRequest",this.handleScrollRequest)}update(e){e&&this.scrollTimeReset?this.fireInitialScroll():this.drain()}fireInitialScroll(){this.handleScrollRequest({time:this.scrollTime})}drain(){this.queuedRequest&&this.execFunc(this.queuedRequest)&&(this.queuedRequest=null)}}const fr=cr({});function hr(e,t,n,r,i,o,s,a,l,c,u,d,f){return{dateEnv:i,options:n,pluginHooks:s,emitter:c,dispatch:a,getCurrentData:l,calendarApi:u,viewSpec:e,viewApi:t,dateProfileGenerator:r,theme:o,isRtl:"rtl"===n.direction,addResizeHandler(e){c.on("_resize",e)},removeResizeHandler(e){c.off("_resize",e)},createScrollResponder:e=>new dr(e,c,k(n.scrollTime),n.scrollTimeReset),registerInteractiveComponent:d,unregisterInteractiveComponent:f}}class pr extends nn{shouldComponentUpdate(e,t){return this.debug&&console.log(L(e,this.props),L(t,this.state)),!F(this.props,e,this.propEquality)||!F(this.state,t,this.stateEquality)}safeSetState(e){F(this.state,Object.assign(Object.assign({},this.state),e),this.stateEquality)||this.setState(e)}}pr.addPropsEquality=function(e){let t=Object.create(this.prototype.propEquality);Object.assign(t,e),this.prototype.propEquality=t},pr.addStateEquality=function(e){let t=Object.create(this.prototype.stateEquality);Object.assign(t,e),this.prototype.stateEquality=t},pr.contextType=fr,pr.prototype.propEquality={},pr.prototype.stateEquality={};class gr extends pr{}function mr(e,t){"function"==typeof e?e(t):e&&(e.current=t)}gr.contextType=fr;class vr extends gr{constructor(){super(...arguments),this.uid=v()}prepareHits(){}queryHit(e,t,n,r){return null}isValidSegDownEl(e){return!this.props.eventDrag&&!this.props.eventResize&&!n(e,".fc-event-mirror")}isValidDateDownEl(e){return!(n(e,".fc-event:not(.fc-bg-event)")||n(e,".fc-more-link")||n(e,"a[data-navlink]")||n(e,".fc-popover"))}}function Ar(e,t){return"function"==typeof e&&(e=e()),null==e?t.createNowMarker():t.createMarker(e)}class br{constructor(e){this.props=e,this.nowDate=Ar(e.nowInput,e.dateEnv),this.initHiddenDays()}buildPrev(e,t,n){let{dateEnv:r}=this.props,i=r.subtract(r.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(i,-1,n)}buildNext(e,t,n){let{dateEnv:r}=this.props,i=r.add(r.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(i,1,n)}build(e,t,n=!0){let r,i,o,s,a,l,{props:c}=this;var u,d;return r=this.buildValidRange(),r=this.trimHiddenDays(r),n&&(u=e,e=null!=(d=r).start&&u<d.start?d.start:null!=d.end&&u>=d.end?new Date(d.end.valueOf()-1):u),i=this.buildCurrentRangeInfo(e,t),o=/^(year|month|week|day)$/.test(i.unit),s=this.buildRenderRange(this.trimHiddenDays(i.range),i.unit,o),s=this.trimHiddenDays(s),a=s,c.showNonCurrentDates||(a=vt(a,i.range)),a=this.adjustActiveRange(a),a=vt(a,r),l=bt(i.range,r),{validRange:r,currentRange:i.range,currentRangeUnit:i.unit,isRangeAllDay:o,activeRange:a,renderRange:s,slotMinTime:c.slotMinTime,slotMaxTime:c.slotMaxTime,isValid:l,dateIncrement:this.buildDateIncrement(i.duration)}}buildValidRange(){let e=this.props.validRangeInput,t="function"==typeof e?e.call(this.props.calendarApi,this.nowDate):e;return this.refineRange(t)||{start:null,end:null}}buildCurrentRangeInfo(e,t){let n,{props:r}=this,i=null,o=null,s=null;return r.duration?(i=r.duration,o=r.durationUnit,s=this.buildRangeFromDuration(e,t,i,o)):(n=this.props.dayCount)?(o="day",s=this.buildRangeFromDayCount(e,t,n)):(s=this.buildCustomVisibleRange(e))?o=r.dateEnv.greatestWholeUnit(s.start,s.end).unit:(i=this.getFallbackDuration(),o=I(i).unit,s=this.buildRangeFromDuration(e,t,i,o)),{duration:i,unit:o,range:s}}getFallbackDuration(){return k({day:1})}adjustActiveRange(e){let{dateEnv:t,usesMinMaxTime:n,slotMinTime:r,slotMaxTime:i}=this.props,{start:o,end:s}=e;return n&&(x(r)<0&&(o=X(o),o=t.add(o,r)),x(i)>1&&(s=X(s),s=G(s,-1),s=t.add(s,i))),{start:o,end:s}}buildRangeFromDuration(e,t,n,r){let i,o,s,{dateEnv:a,dateAlignment:l}=this.props;if(!l){let{dateIncrement:e}=this.props;l=e&&O(e)<O(n)?I(e).unit:r}function c(){i=a.startOf(e,l),o=a.add(i,n),s={start:i,end:o}}return x(n)<=1&&this.isHiddenDay(i)&&(i=this.skipHiddenDays(i,t),i=X(i)),c(),this.trimHiddenDays(s)||(e=this.skipHiddenDays(e,t),c()),s}buildRangeFromDayCount(e,t,n){let r,{dateEnv:i,dateAlignment:o}=this.props,s=0,a=e;o&&(a=i.startOf(a,o)),a=X(a),a=this.skipHiddenDays(a,t),r=a;do{r=G(r,1),this.isHiddenDay(r)||(s+=1)}while(s<n);return{start:a,end:r}}buildCustomVisibleRange(e){let{props:t}=this,n=t.visibleRangeInput,r="function"==typeof n?n.call(t.calendarApi,t.dateEnv.toDate(e)):n,i=this.refineRange(r);return!i||null!=i.start&&null!=i.end?i:null}buildRenderRange(e,t,n){return e}buildDateIncrement(e){let t,{dateIncrement:n}=this.props;return n||((t=this.props.dateAlignment)?k(1,t):e||k({days:1}))}refineRange(e){if(e){let t=function(e,t){let n=null,r=null;return e.start&&(n=t.createMarker(e.start)),e.end&&(r=t.createMarker(e.end)),n||r?n&&r&&r<n?null:{start:n,end:r}:null}(e,this.props.dateEnv);return t&&(t=lt(t)),t}return null}initHiddenDays(){let e,t=this.props.hiddenDays||[],n=[],r=0;for(!1===this.props.weekends&&t.push(0,6),e=0;e<7;e+=1)(n[e]=-1!==t.indexOf(e))||(r+=1);if(!r)throw new Error("invalid hiddenDays");this.isHiddenDayHash=n}trimHiddenDays(e){let{start:t,end:n}=e;return t&&(t=this.skipHiddenDays(t)),n&&(n=this.skipHiddenDays(n,-1,!0)),null==t||null==n||t<n?{start:t,end:n}:null}isHiddenDay(e){return e instanceof Date&&(e=e.getUTCDay()),this.isHiddenDayHash[e]}skipHiddenDays(e,t=1,n=!1){for(;this.isHiddenDayHash[(e.getUTCDay()+(n?t:0)+7)%7];)e=G(e,t);return e}}function yr(e,t,n){n.emitter.trigger("select",Object.assign(Object.assign({},_r(e,n)),{jsEvent:t?t.origEvent:null,view:n.viewApi||n.calendarApi.view}))}function _r(e,t){let n={};for(let r of t.pluginHooks.dateSpanTransforms)Object.assign(n,r(e,t));var r,i;return Object.assign(n,(r=e,i=t.dateEnv,Object.assign(Object.assign({},Qr(r.range,i,r.allDay)),{allDay:r.allDay}))),n}function Er(e,t,n){let{dateEnv:r,options:i}=n,o=t;return e?(o=X(o),o=r.add(o,i.defaultAllDayEventDuration)):o=r.add(o,i.defaultTimedEventDuration),o}function Dr(e,t,n,r){let i=Mr(e.defs,t),o={defs:{},instances:{}};for(let t in e.defs){let s=e.defs[t];o.defs[t]=Cr(s,i[t],n,r)}for(let t in e.instances){let s=e.instances[t],a=o.defs[s.defId];o.instances[t]=wr(s,a,i[s.defId],n,r)}return o}function Cr(e,t,n,r){let i=n.standardProps||{};null==i.hasEnd&&t.durationEditable&&(n.startDelta||n.endDelta)&&(i.hasEnd=!0);let o=Object.assign(Object.assign(Object.assign({},e),i),{ui:Object.assign(Object.assign({},e.ui),i.ui)});n.extendedProps&&(o.extendedProps=Object.assign(Object.assign({},o.extendedProps),n.extendedProps));for(let e of r.pluginHooks.eventDefMutationAppliers)e(o,n,r);return!o.hasEnd&&r.options.forceEventDuration&&(o.hasEnd=!0),o}function wr(e,t,n,r,i){let{dateEnv:o}=i,s=r.standardProps&&!0===r.standardProps.allDay,a=r.standardProps&&!1===r.standardProps.hasEnd,l=Object.assign({},e);return s&&(l.range=at(l.range)),r.datesDelta&&n.startEditable&&(l.range={start:o.add(l.range.start,r.datesDelta),end:o.add(l.range.end,r.datesDelta)}),r.startDelta&&n.durationEditable&&(l.range={start:o.add(l.range.start,r.startDelta),end:l.range.end}),r.endDelta&&n.durationEditable&&(l.range={start:l.range.start,end:o.add(l.range.end,r.endDelta)}),a&&(l.range={start:l.range.start,end:Er(t.allDay,l.range.start,i)}),t.allDay&&(l.range={start:X(l.range.start),end:X(l.range.end)}),l.range.end<l.range.start&&(l.range.end=Er(t.allDay,l.range.start,i)),l}class Sr{constructor(e,t){this.context=e,this.internalEventSource=t}remove(){this.context.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:this.internalEventSource.sourceId})}refetch(){this.context.dispatch({type:"FETCH_EVENT_SOURCES",sourceIds:[this.internalEventSource.sourceId],isRefetch:!0})}get id(){return this.internalEventSource.publicId}get url(){return this.internalEventSource.meta.url}get format(){return this.internalEventSource.meta.format}}class Tr{constructor(e,t,n){this._context=e,this._def=t,this._instance=n||null}setProp(e,t){if(e in Ke)console.warn("Could not set date-related prop 'name'. Use one of the date-related methods instead.");else if("id"===e)t=Xe[e](t),this.mutate({standardProps:{publicId:t}});else if(e in Xe)t=Xe[e](t),this.mutate({standardProps:{[e]:t}});else if(e in Ze){let n=Ze[e](t);n="color"===e?{backgroundColor:t,borderColor:t}:"editable"===e?{startEditable:t,durationEditable:t}:{[e]:t},this.mutate({standardProps:{ui:n}})}else console.warn(`Could not set prop '${e}'. Use setExtendedProp instead.`)}setExtendedProp(e,t){this.mutate({extendedProps:{[e]:t}})}setStart(e,t={}){let{dateEnv:n}=this._context,r=n.createMarker(e);if(r&&this._instance){let e=ct(this._instance.range.start,r,n,t.granularity);t.maintainDuration?this.mutate({datesDelta:e}):this.mutate({startDelta:e})}}setEnd(e,t={}){let n,{dateEnv:r}=this._context;if((null==e||(n=r.createMarker(e),n))&&this._instance)if(n){let e=ct(this._instance.range.end,n,r,t.granularity);this.mutate({endDelta:e})}else this.mutate({standardProps:{hasEnd:!1}})}setDates(e,t,n={}){let r,{dateEnv:i}=this._context,o={allDay:n.allDay},s=i.createMarker(e);var a,l;if(s&&((null==t||(r=i.createMarker(t),r))&&this._instance)){let e=this._instance.range;!0===n.allDay&&(e=at(e));let t=ct(e.start,s,i,n.granularity);if(r){let s=ct(e.end,r,i,n.granularity);l=s,(a=t).years===l.years&&a.months===l.months&&a.days===l.days&&a.milliseconds===l.milliseconds?this.mutate({datesDelta:t,standardProps:o}):this.mutate({startDelta:t,endDelta:s,standardProps:o})}else o.hasEnd=!1,this.mutate({datesDelta:t,standardProps:o})}}moveStart(e){let t=k(e);t&&this.mutate({startDelta:t})}moveEnd(e){let t=k(e);t&&this.mutate({endDelta:t})}moveDates(e){let t=k(e);t&&this.mutate({datesDelta:t})}setAllDay(e,t={}){let n={allDay:e},{maintainDuration:r}=t;null==r&&(r=this._context.options.allDayMaintainDuration),this._def.allDay!==e&&(n.hasEnd=r),this.mutate({standardProps:n})}formatRange(e){let{dateEnv:t}=this._context,n=this._instance,r=Se(e);return this._def.hasEnd?t.formatRange(n.range.start,n.range.end,r,{forcedStartTzo:n.forcedStartTzo,forcedEndTzo:n.forcedEndTzo}):t.format(n.range.start,r,{forcedTzo:n.forcedStartTzo})}mutate(e){let t=this._instance;if(t){let n=this._def,r=this._context,{eventStore:i}=r.getCurrentData(),o=Fe(i,t.instanceId);o=Dr(o,{"":{display:"",startEditable:!0,durationEditable:!0,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]}},e,r);let s=new Tr(r,n,t);this._def=o.defs[n.defId],this._instance=o.instances[t.instanceId],r.dispatch({type:"MERGE_EVENTS",eventStore:o}),r.emitter.trigger("eventChange",{oldEvent:s,event:this,relatedEvents:Rr(o,r,t),revert(){r.dispatch({type:"RESET_EVENTS",eventStore:i})}})}}remove(){let e=this._context,t=kr(this);e.dispatch({type:"REMOVE_EVENTS",eventStore:t}),e.emitter.trigger("eventRemove",{event:this,relatedEvents:[],revert(){e.dispatch({type:"MERGE_EVENTS",eventStore:t})}})}get source(){let{sourceId:e}=this._def;return e?new Sr(this._context,this._context.getCurrentData().eventSources[e]):null}get start(){return this._instance?this._context.dateEnv.toDate(this._instance.range.start):null}get end(){return this._instance&&this._def.hasEnd?this._context.dateEnv.toDate(this._instance.range.end):null}get startStr(){let e=this._instance;return e?this._context.dateEnv.formatIso(e.range.start,{omitTime:this._def.allDay,forcedTzo:e.forcedStartTzo}):""}get endStr(){let e=this._instance;return e&&this._def.hasEnd?this._context.dateEnv.formatIso(e.range.end,{omitTime:this._def.allDay,forcedTzo:e.forcedEndTzo}):""}get id(){return this._def.publicId}get groupId(){return this._def.groupId}get allDay(){return this._def.allDay}get title(){return this._def.title}get url(){return this._def.url}get display(){return this._def.ui.display||"auto"}get startEditable(){return this._def.ui.startEditable}get durationEditable(){return this._def.ui.durationEditable}get constraint(){return this._def.ui.constraints[0]||null}get overlap(){return this._def.ui.overlap}get allow(){return this._def.ui.allows[0]||null}get backgroundColor(){return this._def.ui.backgroundColor}get borderColor(){return this._def.ui.borderColor}get textColor(){return this._def.ui.textColor}get classNames(){return this._def.ui.classNames}get extendedProps(){return this._def.extendedProps}toPlainObject(e={}){let t=this._def,{ui:n}=t,{startStr:r,endStr:i}=this,o={};return t.title&&(o.title=t.title),r&&(o.start=r),i&&(o.end=i),t.publicId&&(o.id=t.publicId),t.groupId&&(o.groupId=t.groupId),t.url&&(o.url=t.url),n.display&&"auto"!==n.display&&(o.display=n.display),e.collapseColor&&n.backgroundColor&&n.backgroundColor===n.borderColor?o.color=n.backgroundColor:(n.backgroundColor&&(o.backgroundColor=n.backgroundColor),n.borderColor&&(o.borderColor=n.borderColor)),n.textColor&&(o.textColor=n.textColor),n.classNames.length&&(o.classNames=n.classNames),Object.keys(t.extendedProps).length&&(e.collapseExtendedProps?Object.assign(o,t.extendedProps):o.extendedProps=t.extendedProps),o}toJSON(){return this.toPlainObject()}}function kr(e){let t=e._def,n=e._instance;return{defs:{[t.defId]:t},instances:n?{[n.instanceId]:n}:{}}}function Rr(e,t,n){let{defs:r,instances:i}=e,o=[],s=n?n.instanceId:"";for(let e in i){let n=i[e],a=r[n.defId];n.instanceId!==s&&o.push(new Tr(t,a,n))}return o}function xr(e,t,n,r){let i={},o={},s={},a=[],l=[],c=Mr(e.defs,t);for(let t in e.defs){let n=e.defs[t];"inverse-background"===c[n.defId].display&&(n.groupId?(i[n.groupId]=[],s[n.groupId]||(s[n.groupId]=n)):o[t]=[])}for(let t in e.instances){let s=e.instances[t],u=e.defs[s.defId],d=c[u.defId],f=s.range,h=!u.allDay&&r?lt(f,r):f,p=vt(h,n);p&&("inverse-background"===d.display?u.groupId?i[u.groupId].push(p):o[s.defId].push(p):"none"!==d.display&&("background"===d.display?a:l).push({def:u,ui:d,instance:s,range:p,isStart:h.start&&h.start.valueOf()===p.start.valueOf(),isEnd:h.end&&h.end.valueOf()===p.end.valueOf()}))}for(let e in i){let t=gt(i[e],n);for(let n of t){let t=s[e],r=c[t.defId];a.push({def:t,ui:r,instance:null,range:n,isStart:!1,isEnd:!1})}}for(let t in o){let r=gt(o[t],n);for(let n of r)a.push({def:e.defs[t],ui:c[t],instance:null,range:n,isStart:!1,isEnd:!1})}return{bg:a,fg:l}}function Or(e,t){e.fcSeg=t}function Ir(e){return e.fcSeg||e.parentNode.fcSeg||null}function Mr(e,t){return H(e,e=>Nr(e,t))}function Nr(e,t){let n=[];return t[""]&&n.push(t[""]),t[e.defId]&&n.push(t[e.defId]),n.push(e.ui),Je(n)}function Br(e){let{eventRange:t}=e,n=t.def,r=t.instance?t.instance.range:t.range,i=r.start?r.start.valueOf():0,o=r.end?r.end.valueOf():0;return Object.assign(Object.assign(Object.assign({},n.extendedProps),n),{id:n.publicId,start:i,end:o,duration:o-i,allDay:Number(n.allDay),_seg:e})}function Hr(e,t){let{pluginHooks:n}=t,r=n.isDraggableTransformers,{def:i,ui:o}=e.eventRange,s=o.startEditable;for(let e of r)s=e(s,i,o,t);return s}function Pr(e,t){return e.isStart&&e.eventRange.ui.durationEditable&&t.options.eventResizableFromStart}function Ur(e,t){return e.isEnd&&e.eventRange.ui.durationEditable}function jr(e,t,n,r,i,o,s){let{dateEnv:a,options:l}=n,{displayEventTime:c,displayEventEnd:u}=l,d=e.eventRange.def,f=e.eventRange.instance;null==c&&(c=!1!==r),null==u&&(u=!1!==i);let h=f.range.start,p=f.range.end,g=o||e.start||e.eventRange.range.start,m=s||e.end||e.eventRange.range.end,v=X(h).valueOf()===X(g).valueOf(),A=X(Z(p,-1)).valueOf()===X(Z(m,-1)).valueOf();return c&&!d.allDay&&(v||A)?(g=v?h:g,m=A?p:m,u&&d.hasEnd?a.formatRange(g,m,t,{forcedStartTzo:o?null:f.forcedStartTzo,forcedEndTzo:s?null:f.forcedEndTzo}):a.format(g,t,{forcedTzo:o?null:f.forcedStartTzo})):""}function zr(e){let t=["fc-event"];return e.isMirror&&t.push("fc-event-mirror"),e.isDraggable&&t.push("fc-event-draggable"),(e.isStartResizable||e.isEndResizable)&&t.push("fc-event-resizable"),e.isDragging&&t.push("fc-event-dragging"),e.isResizing&&t.push("fc-event-resizing"),e.isSelected&&t.push("fc-event-selected"),e.isStart&&t.push("fc-event-start"),e.isEnd&&t.push("fc-event-end"),e.isPast&&t.push("fc-event-past"),e.isToday&&t.push("fc-event-today"),e.isFuture&&t.push("fc-event-future"),t}function Lr(e,t){let{def:n,instance:r}=e.eventRange,{url:i}=n;if(i)return{href:i};let{emitter:o,options:s}=t,{eventInteractive:a}=s;return null==a&&(a=n.interactive,null==a&&(a=Boolean(o.hasHandlers("eventClick")))),a?g(e=>{o.trigger("eventClick",{el:e.target,event:new Tr(t,n,r),jsEvent:e,view:t.viewApi})}):{}}const Fr={start:He,end:He,allDay:Boolean};function Vr(e,t,n){let r=function(e,t){let{refined:n,extra:r}=Be(e,Fr),i=n.start?t.createMarkerMeta(n.start):null,o=n.end?t.createMarkerMeta(n.end):null,{allDay:s}=n;null==s&&(s=i&&i.isTimeUnspecified&&(!o||o.isTimeUnspecified));return Object.assign({range:{start:i?i.marker:null,end:o?o.marker:null},allDay:s},r)}(e,t),{range:i}=r;if(!i.start)return null;if(!i.end){if(null==n)return null;i.end=t.add(i.start,n)}return r}function Wr(e,t,n){return Object.assign(Object.assign({},Qr(e,t,n)),{timeZone:t.timeZone})}function Qr(e,t,n){return{start:t.toDate(e.start),end:t.toDate(e.end),startStr:t.formatIso(e.start,{omitTime:n}),endStr:t.formatIso(e.end,{omitTime:n})}}let Gr={};var Zr,Yr;Zr="gregory",Yr=class{getMarkerYear(e){return e.getUTCFullYear()}getMarkerMonth(e){return e.getUTCMonth()}getMarkerDay(e){return e.getUTCDate()}arrayToMarker(e){return ie(e)}markerToArray(e){return re(e)}},Gr[Zr]=Yr;const qr=/^\s*(\d{4})(-?(\d{2})(-?(\d{2})([T ](\d{2}):?(\d{2})(:?(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;function Jr(e){let t=qr.exec(e);if(t){let e=new Date(Date.UTC(Number(t[1]),t[3]?Number(t[3])-1:0,Number(t[5]||1),Number(t[7]||0),Number(t[8]||0),Number(t[10]||0),t[12]?1e3*Number("0."+t[12]):0));if(oe(e)){let n=null;return t[13]&&(n=("-"===t[15]?-1:1)*(60*Number(t[16]||0)+Number(t[18]||0))),{marker:e,isTimeUnspecified:!t[6],timeZoneOffset:n}}}return null}class $r{constructor(e){let t=this.timeZone=e.timeZone,n="local"!==t&&"UTC"!==t;e.namedTimeZoneImpl&&n&&(this.namedTimeZoneImpl=new e.namedTimeZoneImpl(t)),this.canComputeOffset=Boolean(!n||this.namedTimeZoneImpl),this.calendarSystem=function(e){return new Gr[e]}(e.calendarSystem),this.locale=e.locale,this.weekDow=e.locale.week.dow,this.weekDoy=e.locale.week.doy,"ISO"===e.weekNumberCalculation&&(this.weekDow=1,this.weekDoy=4),"number"==typeof e.firstDay&&(this.weekDow=e.firstDay),"function"==typeof e.weekNumberCalculation&&(this.weekNumberFunc=e.weekNumberCalculation),this.weekText=null!=e.weekText?e.weekText:e.locale.options.weekText,this.weekTextLong=(null!=e.weekTextLong?e.weekTextLong:e.locale.options.weekTextLong)||this.weekText,this.cmdFormatter=e.cmdFormatter,this.defaultSeparator=e.defaultSeparator}createMarker(e){let t=this.createMarkerMeta(e);return null===t?null:t.marker}createNowMarker(){return this.canComputeOffset?this.timestampToMarker((new Date).valueOf()):ie(te(new Date))}createMarkerMeta(e){if("string"==typeof e)return this.parse(e);let t=null;return"number"==typeof e?t=this.timestampToMarker(e):e instanceof Date?(e=e.valueOf(),isNaN(e)||(t=this.timestampToMarker(e))):Array.isArray(e)&&(t=ie(e)),null!==t&&oe(t)?{marker:t,isTimeUnspecified:!1,forcedTzo:null}:null}parse(e){let t=Jr(e);if(null===t)return null;let{marker:n}=t,r=null;return null!==t.timeZoneOffset&&(this.canComputeOffset?n=this.timestampToMarker(n.valueOf()-60*t.timeZoneOffset*1e3):r=t.timeZoneOffset),{marker:n,isTimeUnspecified:t.isTimeUnspecified,forcedTzo:r}}getYear(e){return this.calendarSystem.getMarkerYear(e)}getMonth(e){return this.calendarSystem.getMarkerMonth(e)}add(e,t){let n=this.calendarSystem.markerToArray(e);return n[0]+=t.years,n[1]+=t.months,n[2]+=t.days,n[6]+=t.milliseconds,this.calendarSystem.arrayToMarker(n)}subtract(e,t){let n=this.calendarSystem.markerToArray(e);return n[0]-=t.years,n[1]-=t.months,n[2]-=t.days,n[6]-=t.milliseconds,this.calendarSystem.arrayToMarker(n)}addYears(e,t){let n=this.calendarSystem.markerToArray(e);return n[0]+=t,this.calendarSystem.arrayToMarker(n)}addMonths(e,t){let n=this.calendarSystem.markerToArray(e);return n[1]+=t,this.calendarSystem.arrayToMarker(n)}diffWholeYears(e,t){let{calendarSystem:n}=this;return se(e)===se(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)&&n.getMarkerMonth(e)===n.getMarkerMonth(t)?n.getMarkerYear(t)-n.getMarkerYear(e):null}diffWholeMonths(e,t){let{calendarSystem:n}=this;return se(e)===se(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)?n.getMarkerMonth(t)-n.getMarkerMonth(e)+12*(n.getMarkerYear(t)-n.getMarkerYear(e)):null}greatestWholeUnit(e,t){let n=this.diffWholeYears(e,t);return null!==n?{unit:"year",value:n}:(n=this.diffWholeMonths(e,t),null!==n?{unit:"month",value:n}:(n=J(e,t),null!==n?{unit:"week",value:n}:(n=$(e,t),null!==n?{unit:"day",value:n}:(n=function(e,t){return(t.valueOf()-e.valueOf())/36e5}(e,t),C(n)?{unit:"hour",value:n}:(n=function(e,t){return(t.valueOf()-e.valueOf())/6e4}(e,t),C(n)?{unit:"minute",value:n}:(n=function(e,t){return(t.valueOf()-e.valueOf())/1e3}(e,t),C(n)?{unit:"second",value:n}:{unit:"millisecond",value:t.valueOf()-e.valueOf()}))))))}countDurationsBetween(e,t,n){let r;return n.years&&(r=this.diffWholeYears(e,t),null!==r)?r/(x(n)/365):n.months&&(r=this.diffWholeMonths(e,t),null!==r)?r/function(e){return x(e)/30}(n):n.days&&(r=$(e,t),null!==r)?r/x(n):(t.valueOf()-e.valueOf())/O(n)}startOf(e,t){return"year"===t?this.startOfYear(e):"month"===t?this.startOfMonth(e):"week"===t?this.startOfWeek(e):"day"===t?X(e):"hour"===t?function(e){return ie([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours()])}(e):"minute"===t?function(e){return ie([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes()])}(e):"second"===t?function(e){return ie([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds()])}(e):null}startOfYear(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e)])}startOfMonth(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e)])}startOfWeek(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e),e.getUTCDate()-(e.getUTCDay()-this.weekDow+7)%7])}computeWeekNumber(e){return this.weekNumberFunc?this.weekNumberFunc(this.toDate(e)):function(e,t,n){let r=e.getUTCFullYear(),i=K(e,r,t,n);if(i<1)return K(e,r-1,t,n);let o=K(e,r+1,t,n);return o>=1?Math.min(i,o):i}(e,this.weekDow,this.weekDoy)}format(e,t,n={}){return t.format({marker:e,timeZoneOffset:null!=n.forcedTzo?n.forcedTzo:this.offsetForMarker(e)},this)}formatRange(e,t,n,r={}){return r.isEndExclusive&&(t=Z(t,-1)),n.formatRange({marker:e,timeZoneOffset:null!=r.forcedStartTzo?r.forcedStartTzo:this.offsetForMarker(e)},{marker:t,timeZoneOffset:null!=r.forcedEndTzo?r.forcedEndTzo:this.offsetForMarker(t)},this,r.defaultSeparator)}formatIso(e,t={}){let n=null;return t.omitTimeZoneOffset||(n=null!=t.forcedTzo?t.forcedTzo:this.offsetForMarker(e)),ae(e,n,t.omitTime)}timestampToMarker(e){return"local"===this.timeZone?ie(te(new Date(e))):"UTC"!==this.timeZone&&this.namedTimeZoneImpl?ie(this.namedTimeZoneImpl.timestampToArray(e)):new Date(e)}offsetForMarker(e){return"local"===this.timeZone?-ne(re(e)).getTimezoneOffset():"UTC"===this.timeZone?0:this.namedTimeZoneImpl?this.namedTimeZoneImpl.offsetForArray(re(e)):null}toDate(e,t){return"local"===this.timeZone?ne(re(e)):"UTC"===this.timeZone?new Date(e.valueOf()):this.namedTimeZoneImpl?new Date(e.valueOf()-1e3*this.namedTimeZoneImpl.offsetForArray(re(e))*60):new Date(e.valueOf()-(t||0))}}function Xr(e){return e.span.end}function Kr(e){return e.index+":"+e.span.start}function ei(e,t){let n=Math.max(e.start,t.start),r=Math.min(e.end,t.end);return n<r?{start:n,end:r}:null}function ti(e,t,n){e.splice(t,0,n)}function ni(e,t,n){let r=0,i=e.length;if(!i||t<n(e[r]))return[0,0];if(t>n(e[i-1]))return[i,0];for(;r<i;){let o=Math.floor(r+(i-r)/2),s=n(e[o]);if(t<s)i=o;else{if(!(t>s))return[o,1];r=o+1}}return[r,0]}class ri{constructor(e){this.component=e.component,this.isHitComboAllowed=e.isHitComboAllowed||null}destroy(){}}const ii={};const oi={startTime:k,duration:k,create:Boolean,sourceId:String};class si extends gr{constructor(){super(...arguments),this.state={forPrint:!1},this.handleBeforePrint=()=>{this.setState({forPrint:!0})},this.handleAfterPrint=()=>{this.setState({forPrint:!1})}}render(){let{props:e}=this,{options:t}=e,{forPrint:n}=this.state,r=n||"auto"===t.height||"auto"===t.contentHeight,i=r||null==t.height?"":t.height,o=["fc",n?"fc-media-print":"fc-media-screen","fc-direction-"+t.direction,e.theme.getClass("root")];return ft()||o.push("fc-liquid-hack"),e.children(o,i,r,n)}componentDidMount(){let{emitter:e}=this.props;e.on("_beforeprint",this.handleBeforePrint),e.on("_afterprint",this.handleAfterPrint)}componentWillUnmount(){let{emitter:e}=this.props;e.off("_beforeprint",this.handleBeforePrint),e.off("_afterprint",this.handleAfterPrint)}}function ai(e,t){return Se(!e||t>10?{weekday:"short"}:t>1?{weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}:{weekday:"long"})}const li="fc-col-header-cell";function ci(e){return e.text}class ui extends gr{constructor(){super(...arguments),this.id=v(),this.currentDomNodes=[],this.queuedDomNodes=[],this.handleEl=e=>{this.props.elRef&&mr(this.props.elRef,e)}}render(){const{props:e,context:t}=this,{options:n}=t,{generator:r,renderProps:i}=e,o=fi(e);let s,a=[];if(di(e.generatorName,n))n.customRenderingReplacesEl&&delete o.elRef;else{const e="function"==typeof r?r(i,Xt):r;"string"==typeof e||Vt(e)||Array.isArray(e)?s=e:"object"==typeof e&&("html"in e?o.dangerouslySetInnerHTML={__html:e.html}:"domNodes"in e&&(a=Array.prototype.slice.call(e.domNodes)))}return this.queuedDomNodes=a,Xt(e.elTag,o,s)}componentDidMount(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentDidUpdate(){this.applyQueueudDomNodes(),this.triggerCustomRendering(!0)}componentWillUnmount(){this.triggerCustomRendering(!1)}triggerCustomRendering(e){const{props:t,context:n}=this,{handleCustomRendering:r,customRenderingMetaMap:i}=n.options;if(r){const n=null==i?void 0:i[t.generatorName];n&&r(Object.assign({id:this.id,isActive:e,containerEl:this.base,reportNewContainerEl:this.handleEl,generatorMeta:n},t))}}applyQueueudDomNodes(){const{queuedDomNodes:e,currentDomNodes:n}=this,r=this.base;if(!ue(e,n)){n.forEach(t);for(let t of e)r.appendChild(t);this.currentDomNodes=e}}}function di(e,t){var n;return Boolean(t.handleCustomRendering&&e&&(null===(n=t.customRenderingMetaMap)||void 0===n?void 0:n[e]))}function fi(e,t){const n=Object.assign(Object.assign({},e.elAttrs),{ref:e.elRef});return(e.elClasses||t)&&(n.className=(e.elClasses||[]).concat(t||[]).concat(n.className||[]).filter(Boolean).join(" ")),e.elStyle&&(n.style=e.elStyle),n}ui.addPropsEquality({elClasses:ue,elStyle:j,elAttrs:function(e,t){const n=L(e,t);for(let e of n)if(!z.test(e))return!1;return!0},renderProps:j});const hi=cr(0);class pi extends nn{constructor(){super(...arguments),this.InnerContent=gi.bind(void 0,this)}render(){const{props:e}=this,t=function(e,t){const n="function"==typeof e?e(t):e||[];return"string"==typeof n?[n]:n}(e.classNameGenerator,e.renderProps);if(e.children){const n=fi(e,t),r=e.children(this.InnerContent,e.renderProps,n);return e.elTag?Xt(e.elTag,n,r):r}return Xt(ui,Object.assign(Object.assign({},e),{elTag:e.elTag||"div",elClasses:(e.elClasses||[]).concat(t),renderId:this.context}))}componentDidMount(){var e,t;null===(t=(e=this.props).didMount)||void 0===t||t.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.base}))}componentWillUnmount(){var e,t;null===(t=(e=this.props).willUnmount)||void 0===t||t.call(e,Object.assign(Object.assign({},this.props.renderProps),{el:this.base}))}}function gi(e,t){const n=e.props;return Xt(ui,Object.assign({renderProps:n.renderProps,generatorName:n.generatorName,generator:n.generator,renderId:e.context},t))}pi.contextType=hi;class mi extends gr{render(){let{dateEnv:e,options:t,theme:n,viewApi:r}=this.context,{props:i}=this,{date:o,dateProfile:s}=i,a=Et(o,i.todayRange,null,s),l=[li].concat(Dt(a,n)),c=e.format(o,i.dayHeaderFormat),u=!a.isDisabled&&i.colCnt>1?St(this.context,o):{},d=Object.assign(Object.assign(Object.assign({date:e.toDate(o),view:r},i.extraRenderProps),{text:c}),a);return Xt(pi,{elTag:"th",elClasses:l,elAttrs:Object.assign({role:"columnheader",colSpan:i.colSpan,"data-date":a.isDisabled?void 0:le(o)},i.extraDataAttrs),renderProps:d,generatorName:"dayHeaderContent",generator:t.dayHeaderContent||ci,classNameGenerator:t.dayHeaderClassNames,didMount:t.dayHeaderDidMount,willUnmount:t.dayHeaderWillUnmount},e=>Xt("div",{className:"fc-scrollgrid-sync-inner"},!a.isDisabled&&Xt(e,{elTag:"a",elAttrs:u,elClasses:["fc-col-header-cell-cushion",i.isSticky&&"fc-sticky"]})))}}const vi=Se({weekday:"long"});class Ai extends gr{render(){let{props:e}=this,{dateEnv:t,theme:n,viewApi:r,options:i}=this.context,o=G(new Date(2592e5),e.dow),s={dow:e.dow,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},a=t.format(o,e.dayHeaderFormat),l=Object.assign(Object.assign(Object.assign(Object.assign({date:o},s),{view:r}),e.extraRenderProps),{text:a});return Xt(pi,{elTag:"th",elClasses:[li,...Dt(s,n),...e.extraClassNames||[]],elAttrs:Object.assign({role:"columnheader",colSpan:e.colSpan},e.extraDataAttrs),renderProps:l,generatorName:"dayHeaderContent",generator:i.dayHeaderContent||ci,classNameGenerator:i.dayHeaderClassNames,didMount:i.dayHeaderDidMount,willUnmount:i.dayHeaderWillUnmount},n=>Xt("div",{className:"fc-scrollgrid-sync-inner"},Xt(n,{elTag:"a",elClasses:["fc-col-header-cell-cushion",e.isSticky&&"fc-sticky"],elAttrs:{"aria-label":t.format(o,vi)}})))}}class bi extends nn{constructor(e,t){super(e,t),this.initialNowDate=Ar(t.options.now,t.dateEnv),this.initialNowQueriedMs=(new Date).valueOf(),this.state=this.computeTiming().currentState}render(){let{props:e,state:t}=this;return e.children(t.nowDate,t.todayRange)}componentDidMount(){this.setTimeout()}componentDidUpdate(e){e.unit!==this.props.unit&&(this.clearTimeout(),this.setTimeout())}componentWillUnmount(){this.clearTimeout()}computeTiming(){let{props:e,context:t}=this,n=Z(this.initialNowDate,(new Date).valueOf()-this.initialNowQueriedMs),r=t.dateEnv.startOf(n,e.unit),i=t.dateEnv.add(r,k(1,e.unit)),o=i.valueOf()-n.valueOf();return o=Math.min(864e5,o),{currentState:{nowDate:r,todayRange:yi(r)},nextState:{nowDate:i,todayRange:yi(i)},waitMs:o}}setTimeout(){let{nextState:e,waitMs:t}=this.computeTiming();this.timeoutId=setTimeout(()=>{this.setState(e,()=>{this.setTimeout()})},t)}clearTimeout(){this.timeoutId&&clearTimeout(this.timeoutId)}}function yi(e){let t=X(e);return{start:t,end:G(t,1)}}bi.contextType=fr;function _i(e,t,n){return e||ai(t,n)}function Ei(e,t){let n=e.activeRange;return t?n:{start:Z(n.start,e.slotMinTime.milliseconds),end:Z(n.end,e.slotMaxTime.milliseconds-864e5)}}function Di(e,t,n,r,i){switch(t.type){case"RECEIVE_EVENTS":return function(e,t,n,r,i,o){if(t&&n===t.latestFetchId){let n=ze(function(e,t,n){let r=n.options.eventDataTransform,i=t?t.eventDataTransform:null;i&&(e=Ci(e,i));r&&(e=Ci(e,r));return e}(i,t,o),t,o);return r&&(n=Ue(n,r,o)),We(wi(e,t.sourceId),n)}return e}(e,n[t.sourceId],t.fetchId,t.fetchRange,t.rawEvents,i);case"ADD_EVENTS":return function(e,t,n,r){n&&(t=Ue(t,n,r));return We(e,t)}(e,t.eventStore,r?r.activeRange:null,i);case"RESET_EVENTS":return t.eventStore;case"MERGE_EVENTS":return We(e,t.eventStore);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return r?Ue(e,r.activeRange,i):e;case"REMOVE_EVENTS":return function(e,t){let{defs:n,instances:r}=e,i={},o={};for(let e in n)t.defs[e]||(i[e]=n[e]);for(let e in r)!t.instances[e]&&i[r[e].defId]&&(o[e]=r[e]);return{defs:i,instances:o}}(e,t.eventStore);case"REMOVE_EVENT_SOURCE":return wi(e,t.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return Qe(e,e=>!e.sourceId);case"REMOVE_ALL_EVENTS":return{defs:{},instances:{}};default:return e}}function Ci(e,t){let n;if(t){n=[];for(let r of e){let e=t(r);e?n.push(e):null==e&&n.push(r)}}else n=e;return n}function wi(e,t){return Qe(e,e=>e.sourceId!==t)}function Si(e,t){let n=t.getCurrentData(),r=Object.assign({businessHours:n.businessHours,dateSelection:"",eventStore:n.eventStore,eventUiBases:n.eventUiBases,eventSelection:"",eventDrag:null,eventResize:null},e);return(t.pluginHooks.isPropsValid||Ti)(r,t)}function Ti(e,t,n={},r){return!(e.eventDrag&&!function(e,t,n,r){let i=t.getCurrentData(),o=e.eventDrag,s=o.mutatedEvents,a=s.defs,l=s.instances,c=Mr(a,o.isEvent?e.eventUiBases:{"":i.selectionConfig});r&&(c=H(c,r));let u=(p=e.eventStore,g=o.affectedEvents.instances,{defs:p.defs,instances:B(p.instances,e=>!g[e.instanceId])}),d=u.defs,f=u.instances,h=Mr(d,e.eventUiBases);var p,g;for(let r in l){let s=l[r],p=s.range,g=c[s.defId],m=a[s.defId];if(!ki(g.constraints,p,u,e.businessHours,t))return!1;let{eventOverlap:v}=t.options,A="function"==typeof v?v:null;for(let e in f){let n=f[e];if(bt(p,n.range)){if(!1===h[n.defId].overlap&&o.isEvent)return!1;if(!1===g.overlap)return!1;if(A&&!A(new Tr(t,d[n.defId],n),new Tr(t,m,s)))return!1}}let b=i.eventStore;for(let e of g.allows){let i,o=Object.assign(Object.assign({},n),{range:s.range,allDay:m.allDay}),a=b.defs[m.defId],l=b.instances[r];if(i=a?new Tr(t,a,l):new Tr(t,m),!e(_r(o,t),i))return!1}}return!0}(e,t,n,r))&&!(e.dateSelection&&!function(e,t,n,r){let i=e.eventStore,o=i.defs,s=i.instances,a=e.dateSelection,l=a.range,{selectionConfig:c}=t.getCurrentData();r&&(c=r(c));if(!ki(c.constraints,l,i,e.businessHours,t))return!1;let{selectOverlap:u}=t.options,d="function"==typeof u?u:null;for(let e in s){let n=s[e];if(bt(l,n.range)){if(!1===c.overlap)return!1;if(d&&!d(new Tr(t,o[n.defId],n),null))return!1}}for(let e of c.allows){let r=Object.assign(Object.assign({},n),a);if(!e(_r(r,t),null))return!1}return!0}(e,t,n,r))}function ki(e,t,n,r,i){for(let o of e)if(!Oi(Ri(o,t,n,r,i),t))return!1;return!0}function Ri(e,t,n,r,i){return"businessHours"===e?xi(Ue(r,t,i)):"string"==typeof e?xi(Qe(n,t=>t.groupId===e)):"object"==typeof e&&e?xi(Ue(e,t,i)):[]}function xi(e){let{instances:t}=e,n=[];for(let e in t)n.push(t[e].range);return n}function Oi(e,t){for(let n of e)if(yt(n,t))return!0;return!1}class Ii extends Error{constructor(e,t){super(e),this.response=t}}function Mi(e,t,n){const r={method:e=e.toUpperCase()};return"GET"===e?t+=(-1===t.indexOf("?")?"?":"&")+new URLSearchParams(n):(r.body=new URLSearchParams(n),r.headers={"Content-Type":"application/x-www-form-urlencoded"}),fetch(t,r).then(e=>{if(e.ok)return e.json().then(t=>[t,e],()=>{throw new Ii("Failure parsing JSON",e)});throw new Ii("Request failed",e)})}class Ni{constructor(e){this.drainedOption=e,this.isRunning=!1,this.isDirty=!1,this.pauseDepths={},this.timeoutId=0}request(e){this.isDirty=!0,this.isPaused()||(this.clearTimeout(),null==e?this.tryDrain():this.timeoutId=setTimeout(this.tryDrain.bind(this),e))}pause(e=""){let{pauseDepths:t}=this;t[e]=(t[e]||0)+1,this.clearTimeout()}resume(e="",t){let{pauseDepths:n}=this;if(e in n){if(t)delete n[e];else{n[e]-=1,n[e]<=0&&delete n[e]}this.tryDrain()}}isPaused(){return Object.keys(this.pauseDepths).length}tryDrain(){if(!this.isRunning&&!this.isPaused()){for(this.isRunning=!0;this.isDirty;)this.isDirty=!1,this.drained();this.isRunning=!1}}clear(){this.clearTimeout(),this.isDirty=!1,this.pauseDepths={}}clearTimeout(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=0)}drained(){this.drainedOption&&this.drainedOption()}}const Bi=/^(visible|hidden)$/;class Hi extends gr{constructor(){super(...arguments),this.handleEl=e=>{this.el=e,mr(this.props.elRef,e)}}render(){let{props:e}=this,{liquid:t,liquidIsAbsolute:n}=e,r=t&&n,i=["fc-scroller"];return t&&(n?i.push("fc-scroller-liquid-absolute"):i.push("fc-scroller-liquid")),Xt("div",{ref:this.handleEl,className:i.join(" "),style:{overflowX:e.overflowX,overflowY:e.overflowY,left:r&&-(e.overcomeLeft||0)||"",right:r&&-(e.overcomeRight||0)||"",bottom:r&&-(e.overcomeBottom||0)||"",marginLeft:!r&&-(e.overcomeLeft||0)||"",marginRight:!r&&-(e.overcomeRight||0)||"",marginBottom:!r&&-(e.overcomeBottom||0)||"",maxHeight:e.maxHeight||""}},e.children)}needsXScrolling(){if(Bi.test(this.props.overflowX))return!1;let{el:e}=this,t=this.el.getBoundingClientRect().width-this.getYScrollbarWidth(),{children:n}=e;for(let e=0;e<n.length;e+=1){if(n[e].getBoundingClientRect().width>t)return!0}return!1}needsYScrolling(){if(Bi.test(this.props.overflowY))return!1;let{el:e}=this,t=this.el.getBoundingClientRect().height-this.getXScrollbarWidth(),{children:n}=e;for(let e=0;e<n.length;e+=1){if(n[e].getBoundingClientRect().height>t)return!0}return!1}getXScrollbarWidth(){return Bi.test(this.props.overflowX)?0:this.el.offsetHeight-this.el.clientHeight}getYScrollbarWidth(){return Bi.test(this.props.overflowY)?0:this.el.offsetWidth-this.el.clientWidth}}class Pi{constructor(e){this.masterCallback=e,this.currentMap={},this.depths={},this.callbackMap={},this.handleValue=(e,t)=>{let{depths:n,currentMap:r}=this,i=!1,o=!1;null!==e?(i=t in r,r[t]=e,n[t]=(n[t]||0)+1,o=!0):(n[t]-=1,n[t]||(delete r[t],delete this.callbackMap[t],i=!0)),this.masterCallback&&(i&&this.masterCallback(null,String(t)),o&&this.masterCallback(e,String(t)))}}createRef(e){let t=this.callbackMap[e];return t||(t=this.callbackMap[e]=t=>{this.handleValue(t,String(e))}),t}collect(e,t,n){return W(this.currentMap,e,t,n)}getAll(){return U(this.currentMap)}}function Ui(e){let t=i(e,".fc-scrollgrid-shrink"),n=0;for(let e of t)n=Math.max(n,w(e));return Math.ceil(n)}function ji(e,t){return e.liquid&&t.liquid}function zi(e,t){return null!=t.maxHeight||ji(e,t)}function Li(e,t,n,r){let{expandRows:i}=n;return"function"==typeof t.content?t.content(n):Xt("table",{role:"presentation",className:[t.tableClassName,e.syncRowHeights?"fc-scrollgrid-sync-table":""].join(" "),style:{minWidth:n.tableMinWidth,width:n.clientWidth,height:i?n.clientHeight:""}},n.tableColGroupNode,Xt(r?"thead":"tbody",{role:"presentation"},"function"==typeof t.rowContent?t.rowContent(n):t.rowContent))}function Fi(e,t){return ue(e,t,j)}function Vi(e,t){let n=[];for(let r of e){let e=r.span||1;for(let i=0;i<e;i+=1)n.push(Xt("col",{style:{width:"shrink"===r.width?Wi(t):r.width||"",minWidth:r.minWidth||""}}))}return Xt("colgroup",{},...n)}function Wi(e){return null==e?4:e}function Qi(e){for(let t of e)if("shrink"===t.width)return!0;return!1}function Gi(e,t){let n=["fc-scrollgrid",t.theme.getClass("table")];return e&&n.push("fc-scrollgrid-liquid"),n}function Zi(e,t){let n=["fc-scrollgrid-section","fc-scrollgrid-section-"+e.type,e.className];return t&&e.liquid&&null==e.maxHeight&&n.push("fc-scrollgrid-section-liquid"),e.isSticky&&n.push("fc-scrollgrid-section-sticky"),n}class Yi extends gr{constructor(){super(...arguments),this.processCols=de(e=>e,Fi),this.renderMicroColGroup=de(Vi),this.scrollerRefs=new Pi,this.scrollerElRefs=new Pi(this._handleScrollerEl.bind(this)),this.state={shrinkWidth:null,forceYScrollbars:!1,scrollerClientWidths:{},scrollerClientHeights:{}},this.handleSizing=()=>{this.safeSetState(Object.assign({shrinkWidth:this.computeShrinkWidth()},this.computeScrollerDims()))}}render(){let{props:e,state:t,context:n}=this,r=e.sections||[],i=this.processCols(e.cols),o=this.renderMicroColGroup(i,t.shrinkWidth),s=Gi(e.liquid,n);e.collapsibleWidth&&s.push("fc-scrollgrid-collapsible");let a,l=r.length,c=0,u=[],d=[],f=[];for(;c<l&&"header"===(a=r[c]).type;)u.push(this.renderSection(a,o,!0)),c+=1;for(;c<l&&"body"===(a=r[c]).type;)d.push(this.renderSection(a,o,!1)),c+=1;for(;c<l&&"footer"===(a=r[c]).type;)f.push(this.renderSection(a,o,!0)),c+=1;let h=!ft();const p={role:"rowgroup"};return Xt("table",{role:"grid",className:s.join(" "),style:{height:e.height}},Boolean(!h&&u.length)&&Xt("thead",p,...u),Boolean(!h&&d.length)&&Xt("tbody",p,...d),Boolean(!h&&f.length)&&Xt("tfoot",p,...f),h&&Xt("tbody",p,...u,...d,...f))}renderSection(e,t,n){return"outerContent"in e?Xt(tn,{key:e.key},e.outerContent):Xt("tr",{key:e.key,role:"presentation",className:Zi(e,this.props.liquid).join(" ")},this.renderChunkTd(e,t,e.chunk,n))}renderChunkTd(e,t,n,r){if("outerContent"in n)return n.outerContent;let{props:i}=this,{forceYScrollbars:o,scrollerClientWidths:s,scrollerClientHeights:a}=this.state,l=zi(i,e),c=ji(i,e),u=i.liquid?o?"scroll":l?"auto":"hidden":"visible",d=e.key,f=Li(e,n,{tableColGroupNode:t,tableMinWidth:"",clientWidth:i.collapsibleWidth||void 0===s[d]?null:s[d],clientHeight:void 0!==a[d]?a[d]:null,expandRows:e.expandRows,syncRowHeights:!1,rowSyncHeights:[],reportRowHeightChange:()=>{}},r);return Xt(r?"th":"td",{ref:n.elRef,role:"presentation"},Xt("div",{className:"fc-scroller-harness"+(c?" fc-scroller-harness-liquid":"")},Xt(Hi,{ref:this.scrollerRefs.createRef(d),elRef:this.scrollerElRefs.createRef(d),overflowY:u,overflowX:i.liquid?"hidden":"visible",maxHeight:e.maxHeight,liquid:c,liquidIsAbsolute:!0},f)))}_handleScrollerEl(e,t){let n=function(e,t){for(let n of e)if(n.key===t)return n;return null}(this.props.sections,t);n&&mr(n.chunk.scrollerElRef,e)}componentDidMount(){this.handleSizing(),this.context.addResizeHandler(this.handleSizing)}componentDidUpdate(){this.handleSizing()}componentWillUnmount(){this.context.removeResizeHandler(this.handleSizing)}computeShrinkWidth(){return Qi(this.props.cols)?Ui(this.scrollerElRefs.getAll()):0}computeScrollerDims(){let e=xt(),{scrollerRefs:t,scrollerElRefs:n}=this,r=!1,i={},o={};for(let e in t.currentMap){let n=t.currentMap[e];if(n&&n.needsYScrolling()){r=!0;break}}for(let t of this.props.sections){let s=t.key,a=n.currentMap[s];if(a){let t=a.parentNode;i[s]=Math.floor(t.getBoundingClientRect().width-(r?e.y:0)),o[s]=Math.floor(t.getBoundingClientRect().height)}}return{forceYScrollbars:r,scrollerClientWidths:i,scrollerClientHeights:o}}}Yi.addStateEquality({scrollerClientWidths:j,scrollerClientHeights:j});class qi extends gr{constructor(){super(...arguments),this.handleEl=e=>{this.el=e,e&&Or(e,this.props.seg)}}render(){const{props:e,context:t}=this,{options:n}=t,{seg:r}=e,{eventRange:i}=r,{ui:o}=i,s={event:new Tr(t,i.def,i.instance),view:t.viewApi,timeText:e.timeText,textColor:o.textColor,backgroundColor:o.backgroundColor,borderColor:o.borderColor,isDraggable:!e.disableDragging&&Hr(r,t),isStartResizable:!e.disableResizing&&Pr(r,t),isEndResizable:!e.disableResizing&&Ur(r),isMirror:Boolean(e.isDragging||e.isResizing||e.isDateSelecting),isStart:Boolean(r.isStart),isEnd:Boolean(r.isEnd),isPast:Boolean(e.isPast),isFuture:Boolean(e.isFuture),isToday:Boolean(e.isToday),isSelected:Boolean(e.isSelected),isDragging:Boolean(e.isDragging),isResizing:Boolean(e.isResizing)};return Xt(pi,Object.assign({},e,{elRef:this.handleEl,elClasses:[...zr(s),...r.eventRange.ui.classNames,...e.elClasses||[]],renderProps:s,generatorName:"eventContent",generator:n.eventContent||e.defaultGenerator,classNameGenerator:n.eventClassNames,didMount:n.eventDidMount,willUnmount:n.eventWillUnmount}))}componentDidUpdate(e){this.el&&this.props.seg!==e.seg&&Or(this.el,this.props.seg)}}function Ji(e){return Xt("div",{className:"fc-event-main-frame"},e.timeText&&Xt("div",{className:"fc-event-time"},e.timeText),Xt("div",{className:"fc-event-title-container"},Xt("div",{className:"fc-event-title fc-sticky"},e.event.title||Xt(tn,null," "))))}const $i=Se({day:"numeric"});class Xi extends gr{constructor(){super(...arguments),this.refineRenderProps=fe(eo)}render(){let{props:e,context:t}=this,{options:n}=t,r=this.refineRenderProps({date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,showDayNumber:e.showDayNumber,extraRenderProps:e.extraRenderProps,viewApi:t.viewApi,dateEnv:t.dateEnv});return Xt(pi,Object.assign({},e,{elClasses:[...Dt(r,t.theme),...e.elClasses||[]],elAttrs:Object.assign(Object.assign({},e.elAttrs),r.isDisabled?{}:{"data-date":le(e.date)}),renderProps:r,generatorName:"dayCellContent",generator:n.dayCellContent||e.defaultGenerator,classNameGenerator:r.isDisabled?void 0:n.dayCellClassNames,didMount:n.dayCellDidMount,willUnmount:n.dayCellWillUnmount}))}}function Ki(e){return Boolean(e.dayCellContent||di("dayCellContent",e))}function eo(e){let{date:t,dateEnv:n}=e,r=Et(t,e.todayRange,null,e.dateProfile);return Object.assign(Object.assign(Object.assign({date:n.toDate(t),view:e.viewApi},r),{dayNumberText:e.showDayNumber?n.format(t,$i):""}),e.extraRenderProps)}function to(e){let{title:t}=e.event;return t&&Xt("div",{className:"fc-event-title"},e.event.title)}function no(e){return e.text}class ro extends gr{constructor(){super(...arguments),this.state={titleId:u()},this.handleRootEl=e=>{this.rootEl=e,this.props.elRef&&mr(this.props.elRef,e)},this.handleDocumentMouseDown=e=>{const t=l(e);this.rootEl.contains(t)||this.handleCloseClick()},this.handleDocumentKeyDown=e=>{"Escape"===e.key&&this.handleCloseClick()},this.handleCloseClick=()=>{let{onClose:e}=this.props;e&&e()}}render(){let{theme:e,options:t}=this.context,{props:n,state:r}=this,i=["fc-popover",e.getClass("popover")].concat(n.extraClassNames||[]);return qn(Xt("div",Object.assign({},n.extraAttrs,{id:n.id,className:i.join(" "),"aria-labelledby":r.titleId,ref:this.handleRootEl}),Xt("div",{className:"fc-popover-header "+e.getClass("popoverHeader")},Xt("span",{className:"fc-popover-title",id:r.titleId},n.title),Xt("span",{className:"fc-popover-close "+e.getIconClass("close"),title:t.closeHint,onClick:this.handleCloseClick})),Xt("div",{className:"fc-popover-body "+e.getClass("popoverContent")},n.children)),n.parentEl)}componentDidMount(){document.addEventListener("mousedown",this.handleDocumentMouseDown),document.addEventListener("keydown",this.handleDocumentKeyDown),this.updateSize()}componentWillUnmount(){document.removeEventListener("mousedown",this.handleDocumentMouseDown),document.removeEventListener("keydown",this.handleDocumentKeyDown)}updateSize(){let{isRtl:e}=this.context,{alignmentEl:t,alignGridTop:r}=this.props,{rootEl:i}=this,o=function(e){let t=Nt(e),n=e.getBoundingClientRect();for(let e of t){let t=ut(n,e.getBoundingClientRect());if(!t)return null;n=t}return n}(t);if(o){let a=i.getBoundingClientRect(),l=r?n(t,".fc-scrollgrid").getBoundingClientRect().top:o.top,c=e?o.right-a.width:o.left;l=Math.max(l,10),c=Math.min(c,document.documentElement.clientWidth-10-a.width),c=Math.max(c,10);let u=i.offsetParent.getBoundingClientRect();s(i,{top:l-u.top,left:c-u.left})}}}class io extends vr{constructor(){super(...arguments),this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,useEventCenter:!1}):this.context.unregisterInteractiveComponent(this)}}render(){let{options:e,dateEnv:t}=this.context,{props:n}=this,{startDate:r,todayRange:i,dateProfile:o}=n,s=t.format(r,e.dayPopoverFormat);return Xt(Xi,{elRef:this.handleRootEl,date:r,dateProfile:o,todayRange:i},(t,r,i)=>Xt(ro,{elRef:i.ref,id:n.id,title:s,extraClassNames:["fc-more-popover"].concat(i.className||[]),extraAttrs:i,parentEl:n.parentEl,alignmentEl:n.alignmentEl,alignGridTop:n.alignGridTop,onClose:n.onClose},Ki(e)&&Xt(t,{elTag:"div",elClasses:["fc-more-popover-misc"]}),n.children))}queryHit(e,t,n,r){let{rootEl:i,props:o}=this;return e>=0&&e<n&&t>=0&&t<r?{dateProfile:o.dateProfile,dateSpan:Object.assign({allDay:!0,range:{start:o.startDate,end:o.endDate}},o.extraDateSpan),dayEl:i,rect:{left:0,top:0,right:n,bottom:r},layer:1}:null}}function oo(e){return e.text}function so(e){if(e.allDayDate)return{start:e.allDayDate,end:G(e.allDayDate,1)};let{hiddenSegs:t}=e;return{start:ao(t),end:(n=t,n.reduce(co).eventRange.range.end)};var n}function ao(e){return e.reduce(lo).eventRange.range.start}function lo(e,t){return e.eventRange.range.start<t.eventRange.range.start?e:t}function co(e,t){return e.eventRange.range.end>t.eventRange.range.end?e:t}function uo(e){return[`fc-${e.type}-view`,"fc-view"]}function fo(e){if(!e||"undefined"==typeof document)return;const t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}const ho={id:String,defaultAllDay:Boolean,url:String,format:String,events:He,eventDataTransform:He,success:He,failure:He};function po(e,t,n=go(t)){let r;if("string"==typeof e?r={url:e}:"function"==typeof e||Array.isArray(e)?r={events:e}:"object"==typeof e&&e&&(r=e),r){let{refined:i,extra:o}=Be(r,n),s=function(e,t){let n=t.pluginHooks.eventSourceDefs;for(let t=n.length-1;t>=0;t-=1){let r=n[t].parseMeta(e);if(r)return{sourceDefId:t,meta:r}}return null}(i,t);if(s)return{_raw:e,isFetching:!1,latestFetchId:"",fetchRange:null,defaultAllDay:i.defaultAllDay,eventDataTransform:i.eventDataTransform,success:i.success,failure:i.failure,publicId:i.id||"",sourceId:v(),sourceDefId:s.sourceDefId,meta:s.meta,ui:qe(i,t),extendedProps:o}}return null}function go(e){return Object.assign(Object.assign(Object.assign({},Ze),ho),e.pluginHooks.eventSourceRefiners)}class mo{getCurrentData(){return this.currentDataManager.getCurrentData()}dispatch(e){this.currentDataManager.dispatch(e)}get view(){return this.getCurrentData().viewApi}batchRendering(e){e()}updateSize(){this.trigger("_resize",!0)}setOption(e,t){this.dispatch({type:"SET_OPTION",optionName:e,rawOptionValue:t})}getOption(e){return this.currentDataManager.currentCalendarOptionsInput[e]}getAvailableLocaleCodes(){return Object.keys(this.getCurrentData().availableRawLocales)}on(e,t){let{currentDataManager:n}=this;n.currentCalendarOptionsRefiners[e]?n.emitter.on(e,t):console.warn(`Unknown listener name '${e}'`)}off(e,t){this.currentDataManager.emitter.off(e,t)}trigger(e,...t){this.currentDataManager.emitter.trigger(e,...t)}changeView(e,t){this.batchRendering(()=>{if(this.unselect(),t)if(t.start&&t.end)this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e}),this.dispatch({type:"SET_OPTION",optionName:"visibleRange",rawOptionValue:t});else{let{dateEnv:n}=this.getCurrentData();this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e,dateMarker:n.createMarker(t)})}else this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:e})})}zoomTo(e,t){let n;t=t||"day",n=this.getCurrentData().viewSpecs[t]||this.getUnitViewSpec(t),this.unselect(),n?this.dispatch({type:"CHANGE_VIEW_TYPE",viewType:n.type,dateMarker:e}):this.dispatch({type:"CHANGE_DATE",dateMarker:e})}getUnitViewSpec(e){let t,n,{viewSpecs:r,toolbarConfig:i}=this.getCurrentData(),o=[].concat(i.header?i.header.viewsWithButtons:[],i.footer?i.footer.viewsWithButtons:[]);for(let e in r)o.push(e);for(t=0;t<o.length;t+=1)if(n=r[o[t]],n&&n.singleUnit===e)return n;return null}prev(){this.unselect(),this.dispatch({type:"PREV"})}next(){this.unselect(),this.dispatch({type:"NEXT"})}prevYear(){let e=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:e.dateEnv.addYears(e.currentDate,-1)})}nextYear(){let e=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:e.dateEnv.addYears(e.currentDate,1)})}today(){let e=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:Ar(e.calendarOptions.now,e.dateEnv)})}gotoDate(e){let t=this.getCurrentData();this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:t.dateEnv.createMarker(e)})}incrementDate(e){let t=this.getCurrentData(),n=k(e);n&&(this.unselect(),this.dispatch({type:"CHANGE_DATE",dateMarker:t.dateEnv.add(t.currentDate,n)}))}getDate(){let e=this.getCurrentData();return e.dateEnv.toDate(e.currentDate)}formatDate(e,t){let{dateEnv:n}=this.getCurrentData();return n.format(n.createMarker(e),Se(t))}formatRange(e,t,n){let{dateEnv:r}=this.getCurrentData();return r.formatRange(r.createMarker(e),r.createMarker(t),Se(n),n)}formatIso(e,t){let{dateEnv:n}=this.getCurrentData();return n.formatIso(n.createMarker(e),{omitTime:t})}select(e,t){let n;n=null==t?null!=e.start?e:{start:e,end:null}:{start:e,end:t};let r=this.getCurrentData(),i=Vr(n,r.dateEnv,k({days:1}));i&&(this.dispatch({type:"SELECT_DATES",selection:i}),yr(i,null,r))}unselect(e){let t=this.getCurrentData();t.dateSelection&&(this.dispatch({type:"UNSELECT_DATES"}),function(e,t){t.emitter.trigger("unselect",{jsEvent:e?e.origEvent:null,view:t.viewApi||t.calendarApi.view})}(e,t))}addEvent(e,t){if(e instanceof Tr){let t=e._def,n=e._instance;return this.getCurrentData().eventStore.defs[t.defId]||(this.dispatch({type:"ADD_EVENTS",eventStore:Le({def:t,instance:n})}),this.triggerEventAdd(e)),e}let n,r=this.getCurrentData();if(t instanceof Sr)n=t.internalEventSource;else if("boolean"==typeof t)t&&([n]=U(r.eventSources));else if(null!=t){let e=this.getEventSourceById(t);if(!e)return console.warn(`Could not find an event source with ID "${t}"`),null;n=e.internalEventSource}let i=tt(e,n,r,!1);if(i){let e=new Tr(r,i.def,i.def.recurringDef?null:i.instance);return this.dispatch({type:"ADD_EVENTS",eventStore:Le(i)}),this.triggerEventAdd(e),e}return null}triggerEventAdd(e){let{emitter:t}=this.getCurrentData();t.trigger("eventAdd",{event:e,relatedEvents:[],revert:()=>{this.dispatch({type:"REMOVE_EVENTS",eventStore:kr(e)})}})}getEventById(e){let t=this.getCurrentData(),{defs:n,instances:r}=t.eventStore;e=String(e);for(let i in n){let o=n[i];if(o.publicId===e){if(o.recurringDef)return new Tr(t,o,null);for(let e in r){let n=r[e];if(n.defId===o.defId)return new Tr(t,o,n)}}}return null}getEvents(){let e=this.getCurrentData();return Rr(e.eventStore,e)}removeAllEvents(){this.dispatch({type:"REMOVE_ALL_EVENTS"})}getEventSources(){let e=this.getCurrentData(),t=e.eventSources,n=[];for(let r in t)n.push(new Sr(e,t[r]));return n}getEventSourceById(e){let t=this.getCurrentData(),n=t.eventSources;e=String(e);for(let r in n)if(n[r].publicId===e)return new Sr(t,n[r]);return null}addEventSource(e){let t=this.getCurrentData();if(e instanceof Sr)return t.eventSources[e.internalEventSource.sourceId]||this.dispatch({type:"ADD_EVENT_SOURCES",sources:[e.internalEventSource]}),e;let n=po(e,t);return n?(this.dispatch({type:"ADD_EVENT_SOURCES",sources:[n]}),new Sr(t,n)):null}removeAllEventSources(){this.dispatch({type:"REMOVE_ALL_EVENT_SOURCES"})}refetchEvents(){this.dispatch({type:"FETCH_EVENT_SOURCES",isRefetch:!0})}scrollToTime(e){let t=k(e);t&&this.trigger("_scrollRequest",{time:t})}}var vo={__proto__:null,BASE_OPTION_DEFAULTS:ke,identity:He,refineProps:Be,createEventInstance:Pe,parseEventDef:it,refineEventDef:nt,parseBusinessHours:st,padStart:E,isInt:C,parseFieldSpecs:A,compareByFieldSpecs:b,flexibleCompare:_,preventSelection:function(e){e.classList.add("fc-unselectable"),e.addEventListener("selectstart",d)},allowSelection:function(e){e.classList.remove("fc-unselectable"),e.removeEventListener("selectstart",d)},preventContextMenu:function(e){e.addEventListener("contextmenu",d)},allowContextMenu:function(e){e.removeEventListener("contextmenu",d)},compareNumbers:function(e,t){return e-t},enableCursor:function(){document.body.classList.remove("fc-not-allowed")},disableCursor:function(){document.body.classList.add("fc-not-allowed")},guid:v,computeVisibleDayRange:lt,isMultiDayRange:function(e){let t=lt(e);return Y(t.start,t.end)>1},diffDates:ct,removeExact:function(e,t){let n=0,r=0;for(;r<e.length;)e[r]===t?(e.splice(r,1),n+=1):r+=1;return n},isArraysEqual:ue,memoize:de,memoizeObjArg:fe,memoizeArraylike:function(e,t,n){let r=[],i=[];return o=>{let s=r.length,a=o.length,l=0;for(;l<s;l+=1)if(o[l]){if(!ue(r[l],o[l])){n&&n(i[l]);let r=e.apply(this,o[l]);t&&t(r,i[l])||(i[l]=r)}}else n&&n(i[l]);for(;l<a;l+=1)i[l]=e.apply(this,o[l]);return r=o,i.splice(a),i}},memoizeHashlike:function(e,t,n){let r={},i={};return o=>{let s={};for(let a in o)if(i[a])if(ue(r[a],o[a]))s[a]=i[a];else{n&&n(i[a]);let r=e.apply(this,o[a]);s[a]=t&&t(r,i[a])?i[a]:r}else s[a]=e.apply(this,o[a]);return r=o,i=s,s}},intersectRects:ut,pointInsideRect:function(e,t){return e.left>=t.left&&e.left<t.right&&e.top>=t.top&&e.top<t.bottom},constrainPoint:function(e,t){return{left:Math.min(Math.max(e.left,t.left),t.right),top:Math.min(Math.max(e.top,t.top),t.bottom)}},getRectCenter:function(e){return{left:(e.left+e.right)/2,top:(e.top+e.bottom)/2}},diffPoints:function(e,t){return{left:e.left-t.left,top:e.top-t.top}},translateRect:function(e,t,n){return{left:e.left+t,right:e.right+t,top:e.top+n,bottom:e.bottom+n}},mapHash:H,filterHash:B,isPropsEqual:j,compareObjs:F,collectFromHash:W,findElements:i,findDirectChildren:function(e,t){let n=e instanceof HTMLElement?[e]:e,i=[];for(let e=0;e<n.length;e+=1){let o=n[e].children;for(let e=0;e<o.length;e+=1){let n=o[e];t&&!r(n,t)||i.push(n)}}return i},removeElement:t,applyStyle:s,elementMatches:r,elementClosest:n,getElRoot:function(e){return e.getRootNode?e.getRootNode():document},getEventTargetViaRoot:l,getUniqueDomId:u,parseClassNames:Ge,getCanVGrowWithinCell:ft,createEmptyEventStore:Ve,mergeEventStores:We,getRelevantEvents:Fe,eventTupleToStore:Le,combineEventUis:Je,createEventUi:qe,Splitter:class{constructor(){this.getKeysForEventDefs=de(this._getKeysForEventDefs),this.splitDateSelection=de(this._splitDateSpan),this.splitEventStore=de(this._splitEventStore),this.splitIndividualUi=de(this._splitIndividualUi),this.splitEventDrag=de(this._splitInteraction),this.splitEventResize=de(this._splitInteraction),this.eventUiBuilders={}}splitProps(e){let t=this.getKeyInfo(e),n=this.getKeysForEventDefs(e.eventStore),r=this.splitDateSelection(e.dateSelection),i=this.splitIndividualUi(e.eventUiBases,n),o=this.splitEventStore(e.eventStore,n),s=this.splitEventDrag(e.eventDrag),a=this.splitEventResize(e.eventResize),l={};this.eventUiBuilders=H(t,(e,t)=>this.eventUiBuilders[t]||de(pt));for(let n in t){let c=t[n],u=o[n]||ht,d=this.eventUiBuilders[n];l[n]={businessHours:c.businessHours||e.businessHours,dateSelection:r[n]||null,eventStore:u,eventUiBases:d(e.eventUiBases[""],c.ui,i[n]),eventSelection:u.instances[e.eventSelection]?e.eventSelection:"",eventDrag:s[n]||null,eventResize:a[n]||null}}return l}_splitDateSpan(e){let t={};if(e){let n=this.getKeysForDateSpan(e);for(let r of n)t[r]=e}return t}_getKeysForEventDefs(e){return H(e.defs,e=>this.getKeysForEventDef(e))}_splitEventStore(e,t){let{defs:n,instances:r}=e,i={};for(let e in n)for(let r of t[e])i[r]||(i[r]={defs:{},instances:{}}),i[r].defs[e]=n[e];for(let e in r){let n=r[e];for(let r of t[n.defId])i[r]&&(i[r].instances[e]=n)}return i}_splitIndividualUi(e,t){let n={};for(let r in e)if(r)for(let i of t[r])n[i]||(n[i]={}),n[i][r]=e[r];return n}_splitInteraction(e){let t={};if(e){let n=this._splitEventStore(e.affectedEvents,this._getKeysForEventDefs(e.affectedEvents)),r=this._getKeysForEventDefs(e.mutatedEvents),i=this._splitEventStore(e.mutatedEvents,r),o=r=>{t[r]||(t[r]={affectedEvents:n[r]||ht,mutatedEvents:i[r]||ht,isEvent:e.isEvent})};for(let e in n)o(e);for(let e in i)o(e)}return t}},getDayClassNames:Dt,getDateMeta:Et,getSlotClassNames:function(e,t){let n=["fc-slot","fc-slot-"+Q[e.dow]];return e.isDisabled?n.push("fc-slot-disabled"):(e.isToday&&(n.push("fc-slot-today"),n.push(t.getClass("today"))),e.isPast&&n.push("fc-slot-past"),e.isFuture&&n.push("fc-slot-future")),n},buildNavLinkAttrs:St,preventDefault:d,whenTransitionDone:function(e,t){let n=r=>{t(r),h.forEach(t=>{e.removeEventListener(t,n)})};h.forEach(t=>{e.addEventListener(t,n)})},computeInnerRect:function(e,t=!1,n){let r=n?e.getBoundingClientRect():Mt(e),i=It(e,t),o={left:r.left+i.borderLeft+i.scrollbarLeft,right:r.right-i.borderRight-i.scrollbarRight,top:r.top+i.borderTop,bottom:r.bottom-i.borderBottom-i.scrollbarBottom};return t&&(o.left+=i.paddingLeft,o.right-=i.paddingRight,o.top+=i.paddingTop,o.bottom-=i.paddingBottom),o},computeEdges:It,getClippingParents:Nt,computeRect:Mt,unpromisify:Bt,Emitter:Ht,rangeContainsMarker:_t,intersectRanges:vt,rangesEqual:At,rangesIntersect:bt,rangeContainsRange:yt,PositionCache:class{constructor(e,t,n,r){this.els=t;let i=this.originClientRect=e.getBoundingClientRect();n&&this.buildElHorizontals(i.left),r&&this.buildElVerticals(i.top)}buildElHorizontals(e){let t=[],n=[];for(let r of this.els){let i=r.getBoundingClientRect();t.push(i.left-e),n.push(i.right-e)}this.lefts=t,this.rights=n}buildElVerticals(e){let t=[],n=[];for(let r of this.els){let i=r.getBoundingClientRect();t.push(i.top-e),n.push(i.bottom-e)}this.tops=t,this.bottoms=n}leftToIndex(e){let t,{lefts:n,rights:r}=this,i=n.length;for(t=0;t<i;t+=1)if(e>=n[t]&&e<r[t])return t}topToIndex(e){let t,{tops:n,bottoms:r}=this,i=n.length;for(t=0;t<i;t+=1)if(e>=n[t]&&e<r[t])return t}getWidth(e){return this.rights[e]-this.lefts[e]}getHeight(e){return this.bottoms[e]-this.tops[e]}similarTo(e){return Pt(this.tops||[],e.tops||[])&&Pt(this.bottoms||[],e.bottoms||[])&&Pt(this.lefts||[],e.lefts||[])&&Pt(this.rights||[],e.rights||[])}},ScrollController:Ut,ElementScrollController:class extends Ut{constructor(e){super(),this.el=e}getScrollTop(){return this.el.scrollTop}getScrollLeft(){return this.el.scrollLeft}setScrollTop(e){this.el.scrollTop=e}setScrollLeft(e){this.el.scrollLeft=e}getScrollWidth(){return this.el.scrollWidth}getScrollHeight(){return this.el.scrollHeight}getClientHeight(){return this.el.clientHeight}getClientWidth(){return this.el.clientWidth}},WindowScrollController:class extends Ut{getScrollTop(){return window.pageYOffset}getScrollLeft(){return window.pageXOffset}setScrollTop(e){window.scroll(window.pageXOffset,e)}setScrollLeft(e){window.scroll(e,window.pageYOffset)}getScrollWidth(){return document.documentElement.scrollWidth}getScrollHeight(){return document.documentElement.scrollHeight}getClientHeight(){return document.documentElement.clientHeight}getClientWidth(){return document.documentElement.clientWidth}},Theme:jt,ViewContextType:fr,DateComponent:vr,DateProfileGenerator:br,isDateSpansEqual:function(e,t){return At(e.range,t.range)&&e.allDay===t.allDay&&function(e,t){for(let n in t)if("range"!==n&&"allDay"!==n&&e[n]!==t[n])return!1;for(let n in e)if(!(n in t))return!1;return!0}(e,t)},addDays:G,startOfDay:X,addMs:Z,addWeeks:function(e,t){let n=re(e);return n[2]+=7*t,ie(n)},diffWeeks:function(e,t){return Y(e,t)/7},diffWholeWeeks:J,diffWholeDays:$,diffDayAndTime:q,diffDays:Y,isValidDate:oe,createDuration:k,asCleanDays:function(e){return e.years||e.months||e.milliseconds?0:e.days},multiplyDuration:function(e,t){return{years:e.years*t,months:e.months*t,days:e.days*t,milliseconds:e.milliseconds*t}},addDurations:function(e,t){return{years:e.years+t.years,months:e.months+t.months,days:e.days+t.days,milliseconds:e.milliseconds+t.milliseconds}},asRoughMinutes:function(e){return O(e)/6e4},asRoughSeconds:function(e){return O(e)/1e3},asRoughMs:O,wholeDivideDurations:function(e,t){let n=null;for(let r=0;r<S.length;r+=1){let i=S[r];if(t[i]){let r=e[i]/t[i];if(!C(r)||null!==n&&n!==r)return null;n=r}else if(e[i])return null}return n},greatestDurationDenominator:I,DateEnv:$r,createFormatter:Se,formatIsoTimeString:function(e){return E(e.getUTCHours(),2)+":"+E(e.getUTCMinutes(),2)+":"+E(e.getUTCSeconds(),2)},formatDayString:le,buildIsoString:ae,NamedTimeZoneImpl:class{constructor(e){this.timeZoneName=e}},parseMarker:Jr,SegHierarchy:class{constructor(){this.strictOrder=!1,this.allowReslicing=!1,this.maxCoord=-1,this.maxStackCnt=-1,this.levelCoords=[],this.entriesByLevel=[],this.stackCnts={}}addSegs(e){let t=[];for(let n of e)this.insertEntry(n,t);return t}insertEntry(e,t){let n=this.findInsertion(e);return this.isInsertionValid(n,e)?(this.insertEntryAt(e,n),1):this.handleInvalidInsertion(n,e,t)}isInsertionValid(e,t){return(-1===this.maxCoord||e.levelCoord+t.thickness<=this.maxCoord)&&(-1===this.maxStackCnt||e.stackCnt<this.maxStackCnt)}handleInvalidInsertion(e,t,n){return this.allowReslicing&&e.touchingEntry?this.splitEntry(t,e.touchingEntry,n):(n.push(t),0)}splitEntry(e,t,n){let r=0,i=[],o=e.span,s=t.span;return o.start<s.start&&(r+=this.insertEntry({index:e.index,thickness:e.thickness,span:{start:o.start,end:s.start}},i)),o.end>s.end&&(r+=this.insertEntry({index:e.index,thickness:e.thickness,span:{start:s.end,end:o.end}},i)),r?(n.push({index:e.index,thickness:e.thickness,span:ei(s,o)},...i),r):(n.push(e),0)}insertEntryAt(e,t){let{entriesByLevel:n,levelCoords:r}=this;-1===t.lateral?(ti(r,t.level,t.levelCoord),ti(n,t.level,[e])):ti(n[t.level],t.lateral,e),this.stackCnts[Kr(e)]=t.stackCnt}findInsertion(e){let{levelCoords:t,entriesByLevel:n,strictOrder:r,stackCnts:i}=this,o=t.length,s=0,a=-1,l=-1,c=null,u=0;for(let d=0;d<o;d+=1){let o=t[d];if(!r&&o>=s+e.thickness)break;let f,h=n[d],p=ni(h,e.span.start,Xr),g=p[0]+p[1];for(;(f=h[g])&&f.span.start<e.span.end;){let e=o+f.thickness;e>s&&(s=e,c=f,a=d,l=g),e===s&&(u=Math.max(u,i[Kr(f)]+1)),g+=1}}let d=0;if(c)for(d=a+1;d<o&&t[d]<s;)d+=1;let f=-1;return d<o&&t[d]===s&&(f=ni(n[d],e.span.end,Xr)[0]),{touchingLevel:a,touchingLateral:l,touchingEntry:c,stackCnt:u,levelCoord:s,level:d,lateral:f}}toRects(){let{entriesByLevel:e,levelCoords:t}=this,n=e.length,r=[];for(let i=0;i<n;i+=1){let n=e[i],o=t[i];for(let e of n)r.push(Object.assign(Object.assign({},e),{levelCoord:o}))}return r}},buildEntryKey:Kr,getEntrySpanEnd:Xr,binarySearch:ni,groupIntersectingEntries:function(e){let t=[];for(let i of e){let e=[],o={span:i.span,entries:[i]};for(let i of t)ei(i.span,o.span)?o={entries:i.entries.concat(o.entries),span:(n=i.span,r=o.span,{start:Math.min(n.start,r.start),end:Math.max(n.end,r.end)})}:e.push(i);e.push(o),t=e}var n,r;return t},intersectSpans:ei,Interaction:ri,interactionSettingsToStore:function(e){return{[e.component.uid]:e}},interactionSettingsStore:ii,ElementDragging:class{constructor(e,t){this.emitter=new Ht}destroy(){}setMirrorIsVisible(e){}setMirrorNeedsRevert(e){}setAutoScrollEnabled(e){}},config:{},parseDragMeta:function(e){let{refined:t,extra:n}=Be(e,oi);return{startTime:t.startTime||null,duration:t.duration||null,create:null==t.create||t.create,sourceId:t.sourceId,leftoverProps:n}},CalendarRoot:si,DayHeader:class extends gr{constructor(){super(...arguments),this.createDayHeaderFormatter=de(_i)}render(){let{context:e}=this,{dates:t,dateProfile:n,datesRepDistinctDays:r,renderIntro:i}=this.props,o=this.createDayHeaderFormatter(e.options.dayHeaderFormat,r,t.length);return Xt(bi,{unit:"day"},(e,s)=>Xt("tr",{role:"row"},i&&i("day"),t.map(e=>r?Xt(mi,{key:e.toISOString(),date:e,dateProfile:n,todayRange:s,colCnt:t.length,dayHeaderFormat:o}):Xt(Ai,{key:e.getUTCDay(),dow:e.getUTCDay(),dayHeaderFormat:o}))))}},computeFallbackHeaderFormat:ai,TableDateCell:mi,TableDowCell:Ai,DaySeriesModel:class{constructor(e,t){let n=e.start,{end:r}=e,i=[],o=[],s=-1;for(;n<r;)t.isHiddenDay(n)?i.push(s+.5):(s+=1,i.push(s),o.push(n)),n=G(n,1);this.dates=o,this.indices=i,this.cnt=o.length}sliceRange(e){let t=this.getDateDayIndex(e.start),n=this.getDateDayIndex(G(e.end,-1)),r=Math.max(0,t),i=Math.min(this.cnt-1,n);return r=Math.ceil(r),i=Math.floor(i),r<=i?{firstIndex:r,lastIndex:i,isStart:t===r,isEnd:n===i}:null}getDateDayIndex(e){let{indices:t}=this,n=Math.floor(Y(this.dates[0],e));return n<0?t[0]-1:n>=t.length?t[t.length-1]+1:t[n]}},sliceEventStore:xr,hasBgRendering:function(e){return"background"===e.ui.display||"inverse-background"===e.ui.display},getElSeg:Ir,buildSegTimeText:jr,sortEventSegs:function(e,t){let n=e.map(Br);return n.sort((e,n)=>b(e,n,t)),n.map(e=>e._seg)},getSegMeta:function(e,t,n){let r=e.eventRange.range;return{isPast:r.end<(n||t.start),isFuture:r.start>=(n||t.end),isToday:t&&_t(t,r.start)}},buildEventRangeKey:function(e){return e.instance?e.instance.instanceId:`${e.def.defId}:${e.range.start.toISOString()}`},getSegAnchorAttrs:Lr,DayTableModel:class{constructor(e,t){let n,r,i,{dates:o}=e;if(t){for(r=o[0].getUTCDay(),n=1;n<o.length&&o[n].getUTCDay()!==r;n+=1);i=Math.ceil(o.length/n)}else i=1,n=o.length;this.rowCnt=i,this.colCnt=n,this.daySeries=e,this.cells=this.buildCells(),this.headerDates=this.buildHeaderDates()}buildCells(){let e=[];for(let t=0;t<this.rowCnt;t+=1){let n=[];for(let e=0;e<this.colCnt;e+=1)n.push(this.buildCell(t,e));e.push(n)}return e}buildCell(e,t){let n=this.daySeries.dates[e*this.colCnt+t];return{key:n.toISOString(),date:n}}buildHeaderDates(){let e=[];for(let t=0;t<this.colCnt;t+=1)e.push(this.cells[0][t].date);return e}sliceRange(e){let{colCnt:t}=this,n=this.daySeries.sliceRange(e),r=[];if(n){let{firstIndex:e,lastIndex:i}=n,o=e;for(;o<=i;){let s=Math.floor(o/t),a=Math.min((s+1)*t,i+1);r.push({row:s,firstCol:o%t,lastCol:(a-1)%t,isStart:n.isStart&&o===e,isEnd:n.isEnd&&a-1===i}),o=a}}return r}},Slicer:class{constructor(){this.sliceBusinessHours=de(this._sliceBusinessHours),this.sliceDateSelection=de(this._sliceDateSpan),this.sliceEventStore=de(this._sliceEventStore),this.sliceEventDrag=de(this._sliceInteraction),this.sliceEventResize=de(this._sliceInteraction),this.forceDayIfListItem=!1}sliceProps(e,t,n,r,...i){let{eventUiBases:o}=e,s=this.sliceEventStore(e.eventStore,o,t,n,...i);return{dateSelectionSegs:this.sliceDateSelection(e.dateSelection,o,r,...i),businessHourSegs:this.sliceBusinessHours(e.businessHours,t,n,r,...i),fgEventSegs:s.fg,bgEventSegs:s.bg,eventDrag:this.sliceEventDrag(e.eventDrag,o,t,n,...i),eventResize:this.sliceEventResize(e.eventResize,o,t,n,...i),eventSelection:e.eventSelection}}sliceNowDate(e,t,...n){return this._sliceDateSpan({range:{start:e,end:Z(e,1)},allDay:!1},{},t,...n)}_sliceBusinessHours(e,t,n,r,...i){return e?this._sliceEventStore(Ue(e,Ei(t,Boolean(n)),r),{},t,n,...i).bg:[]}_sliceEventStore(e,t,n,r,...i){if(e){let o=xr(e,t,Ei(n,Boolean(r)),r);return{bg:this.sliceEventRanges(o.bg,i),fg:this.sliceEventRanges(o.fg,i)}}return{bg:[],fg:[]}}_sliceInteraction(e,t,n,r,...i){if(!e)return null;let o=xr(e.mutatedEvents,t,Ei(n,Boolean(r)),r);return{segs:this.sliceEventRanges(o.fg,i),affectedInstances:e.affectedEvents.instances,isEvent:e.isEvent}}_sliceDateSpan(e,t,n,...r){if(!e)return[];let i=function(e,t,n){let r=nt({editable:!1},n),i=it(r.refined,r.extra,"",e.allDay,!0,n);return{def:i,ui:Nr(i,t),instance:Pe(i.defId,e.range),range:e.range,isStart:!0,isEnd:!0}}(e,t,n),o=this.sliceRange(e.range,...r);for(let e of o)e.eventRange=i;return o}sliceEventRanges(e,t){let n=[];for(let r of e)n.push(...this.sliceEventRange(r,t));return n}sliceEventRange(e,t){let n=e.range;this.forceDayIfListItem&&"list-item"===e.ui.display&&(n={start:n.start,end:G(n.start,1)});let r=this.sliceRange(n,...t);for(let t of r)t.eventRange=e,t.isStart=e.isStart&&t.isStart,t.isEnd=e.isEnd&&t.isEnd;return r}},applyMutationToEventStore:Dr,isPropsValid:Ti,isInteractionValid:function(e,t,n){let{instances:r}=e.mutatedEvents;for(let e in r)if(!yt(t.validRange,r[e].range))return!1;return Si({eventDrag:e},n)},isDateSelectionValid:function(e,t,n){return!!yt(t.validRange,e.range)&&Si({dateSelection:e},n)},requestJson:Mi,BaseComponent:gr,setRef:mr,DelayedRunner:Ni,SimpleScrollGrid:Yi,hasShrinkWidth:Qi,renderMicroColGroup:Vi,getScrollGridClassNames:Gi,getSectionClassNames:Zi,getSectionHasLiquidHeight:ji,getAllowYScrolling:zi,renderChunkContent:Li,computeShrinkWidth:Ui,sanitizeShrinkWidth:Wi,isColPropsEqual:Fi,renderScrollShim:function(e){return Xt("div",{className:"fc-scrollgrid-sticky-shim",style:{width:e.clientWidth,minWidth:e.tableMinWidth}})},getStickyFooterScrollbar:function(e){let{stickyFooterScrollbar:t}=e;return null!=t&&"auto"!==t||(t="auto"===e.height||"auto"===e.viewHeight),t},getStickyHeaderDates:function(e){let{stickyHeaderDates:t}=e;return null!=t&&"auto"!==t||(t="auto"===e.height||"auto"===e.viewHeight),t},Scroller:Hi,getScrollbarWidths:xt,RefMap:Pi,getIsRtlScrollbarOnLeft:Rt,NowTimer:bi,ScrollResponder:dr,StandardEvent:class extends gr{render(){let{props:e,context:t}=this,{options:n}=t,{seg:r}=e,{ui:i}=r.eventRange,o=jr(r,n.eventTimeFormat||e.defaultTimeFormat,t,e.defaultDisplayEventTime,e.defaultDisplayEventEnd);return Xt(qi,Object.assign({},e,{elTag:"a",elStyle:{borderColor:i.borderColor,backgroundColor:i.backgroundColor},elAttrs:Lr(r,t),defaultGenerator:Ji,timeText:o}),(e,t)=>Xt(tn,null,Xt(e,{elTag:"div",elClasses:["fc-event-main"],elStyle:{color:t.textColor}}),Boolean(t.isStartResizable)&&Xt("div",{className:"fc-event-resizer fc-event-resizer-start"}),Boolean(t.isEndResizable)&&Xt("div",{className:"fc-event-resizer fc-event-resizer-end"})))}},NowIndicatorContainer:e=>Xt(fr.Consumer,null,t=>{let{options:n}=t,r={isAxis:e.isAxis,date:t.dateEnv.toDate(e.date),view:t.viewApi};return Xt(pi,Object.assign({},e,{elTag:e.elTag||"div",renderProps:r,generatorName:"nowIndicatorContent",generator:n.nowIndicatorContent,classNameGenerator:n.nowIndicatorClassNames,didMount:n.nowIndicatorDidMount,willUnmount:n.nowIndicatorWillUnmount}))}),DayCellContainer:Xi,hasCustomDayCellContent:Ki,EventContainer:qi,renderFill:function(e){return Xt("div",{className:"fc-"+e})},BgEvent:class extends gr{render(){let{props:e}=this,{seg:t}=e;return Xt(qi,{elTag:"div",elClasses:["fc-bg-event"],elStyle:{backgroundColor:t.eventRange.ui.backgroundColor},defaultGenerator:to,seg:t,timeText:"",isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,isPast:e.isPast,isFuture:e.isFuture,isToday:e.isToday,disableDragging:!0,disableResizing:!0})}},WeekNumberContainer:e=>Xt(fr.Consumer,null,t=>{let{dateEnv:n,options:r}=t,{date:i}=e,o=r.weekNumberFormat||e.defaultFormat,s={num:n.computeWeekNumber(i),text:n.format(i,o),date:i};return Xt(pi,Object.assign({},e,{renderProps:s,generatorName:"weekNumberContent",generator:r.weekNumberContent||no,classNameGenerator:r.weekNumberClassNames,didMount:r.weekNumberDidMount,willUnmount:r.weekNumberWillUnmount}))}),MoreLinkContainer:class extends gr{constructor(){super(...arguments),this.state={isPopoverOpen:!1,popoverId:u()},this.handleLinkEl=e=>{this.linkEl=e,this.props.elRef&&mr(this.props.elRef,e)},this.handleClick=e=>{let{props:t,context:n}=this,{moreLinkClick:r}=n.options,i=so(t).start;function o(e){let{def:t,instance:r,range:i}=e.eventRange;return{event:new Tr(n,t,r),start:n.dateEnv.toDate(i.start),end:n.dateEnv.toDate(i.end),isStart:e.isStart,isEnd:e.isEnd}}"function"==typeof r&&(r=r({date:i,allDay:Boolean(t.allDayDate),allSegs:t.allSegs.map(o),hiddenSegs:t.hiddenSegs.map(o),jsEvent:e,view:n.viewApi})),r&&"popover"!==r?"string"==typeof r&&n.calendarApi.zoomTo(i,r):this.setState({isPopoverOpen:!0})},this.handlePopoverClose=()=>{this.setState({isPopoverOpen:!1})}}render(){let{props:e,state:t}=this;return Xt(fr.Consumer,null,n=>{let{viewApi:r,options:i,calendarApi:o}=n,{moreLinkText:s}=i,{moreCnt:a}=e,l=so(e),c="function"==typeof s?s.call(o,a):`+${a} ${s}`,u=D(i.moreLinkHint,[a],c),d={num:a,shortText:"+"+a,text:c,view:r};return Xt(tn,null,Boolean(e.moreCnt)&&Xt(pi,{elTag:e.elTag||"a",elRef:this.handleLinkEl,elClasses:[...e.elClasses||[],"fc-more-link"],elStyle:e.elStyle,elAttrs:Object.assign(Object.assign(Object.assign({},e.elAttrs),p(this.handleClick)),{title:u,"aria-expanded":t.isPopoverOpen,"aria-controls":t.isPopoverOpen?t.popoverId:""}),renderProps:d,generatorName:"moreLinkContent",generator:i.moreLinkContent||e.defaultGenerator||oo,classNameGenerator:i.moreLinkClassNames,didMount:i.moreLinkDidMount,willUnmount:i.moreLinkWillUnmount},e.children),t.isPopoverOpen&&Xt(io,{id:t.popoverId,startDate:l.start,endDate:l.end,dateProfile:e.dateProfile,todayRange:e.todayRange,extraDateSpan:e.extraDateSpan,parentEl:this.parentEl,alignmentEl:e.alignmentElRef?e.alignmentElRef.current:this.linkEl,alignGridTop:e.alignGridTop,onClose:this.handlePopoverClose},e.popoverContent()))})}componentDidMount(){this.updateParentEl()}componentDidUpdate(){this.updateParentEl()}updateParentEl(){this.linkEl&&(this.parentEl=n(this.linkEl,".fc-view-harness"))}},computeEarliestSegStart:ao,ViewContainer:class extends gr{render(){let{props:e,context:t}=this,{options:n}=t,r={view:t.viewApi};return Xt(pi,Object.assign({},e,{elTag:e.elTag||"div",elClasses:[...uo(e.viewSpec),...e.elClasses||[]],renderProps:r,classNameGenerator:n.viewClassNames,generatorName:void 0,generator:void 0,didMount:n.viewDidMount,willUnmount:n.viewWillUnmount}),()=>e.children)}},triggerDateSelect:yr,getDefaultEventEnd:Er,injectStyles:fo,CalendarImpl:mo,EventImpl:Tr,buildEventApis:Rr,buildElAttrs:fi,ContentContainer:pi,CustomRenderingStore:class extends class{constructor(){this.handlers=[]}set(e){this.currentValue=e;for(let t of this.handlers)t(e)}subscribe(e){this.handlers.push(e),void 0!==this.currentValue&&e(this.currentValue)}}{constructor(){super(...arguments),this.map=new Map}handle(e){const{map:t}=this;let n=!1;e.isActive?(t.set(e.id,e),n=!0):t.has(e.id)&&(t.delete(e.id),n=!0),n&&this.set(t)}}};fo(':root{--fc-small-font-size:.85em;--fc-page-bg-color:#fff;--fc-neutral-bg-color:hsla(0,0%,82%,.3);--fc-neutral-text-color:grey;--fc-border-color:#ddd;--fc-button-text-color:#fff;--fc-button-bg-color:#2c3e50;--fc-button-border-color:#2c3e50;--fc-button-hover-bg-color:#1e2b37;--fc-button-hover-border-color:#1a252f;--fc-button-active-bg-color:#1a252f;--fc-button-active-border-color:#151e27;--fc-event-bg-color:#3788d8;--fc-event-border-color:#3788d8;--fc-event-text-color:#fff;--fc-event-selected-overlay-color:rgba(0,0,0,.25);--fc-more-link-bg-color:#d0d0d0;--fc-more-link-text-color:inherit;--fc-event-resizer-thickness:8px;--fc-event-resizer-dot-total-width:8px;--fc-event-resizer-dot-border-width:1px;--fc-non-business-color:hsla(0,0%,84%,.3);--fc-bg-event-color:#8fdf82;--fc-bg-event-opacity:0.3;--fc-highlight-color:rgba(188,232,241,.3);--fc-today-bg-color:rgba(255,220,40,.15);--fc-now-indicator-color:red}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-unselectable{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;user-select:none}.fc{display:flex;flex-direction:column;font-size:1em}.fc,.fc *,.fc :after,.fc :before{box-sizing:border-box}.fc table{border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{padding:0;vertical-align:top}.fc a[data-navlink]{cursor:pointer}.fc a[data-navlink]:hover{text-decoration:underline}.fc-direction-ltr{direction:ltr;text-align:left}.fc-direction-rtl{direction:rtl;text-align:right}.fc-theme-standard td,.fc-theme-standard th{border:1px solid var(--fc-border-color)}.fc-liquid-hack td,.fc-liquid-hack th{position:relative}@font-face{font-family:fcicons;font-style:normal;font-weight:400;src:url("data:application/x-font-ttf;charset=utf-8;base64,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") format("truetype")}.fc-icon{speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;font-family:fcicons!important;font-style:normal;font-variant:normal;font-weight:400;height:1em;line-height:1;text-align:center;text-transform:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1em}.fc-icon-chevron-left:before{content:"\\e900"}.fc-icon-chevron-right:before{content:"\\e901"}.fc-icon-chevrons-left:before{content:"\\e902"}.fc-icon-chevrons-right:before{content:"\\e903"}.fc-icon-minus-square:before{content:"\\e904"}.fc-icon-plus-square:before{content:"\\e905"}.fc-icon-x:before{content:"\\e906"}.fc .fc-button{border-radius:0;font-family:inherit;font-size:inherit;line-height:inherit;margin:0;overflow:visible;text-transform:none}.fc .fc-button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.fc .fc-button{-webkit-appearance:button}.fc .fc-button:not(:disabled){cursor:pointer}.fc .fc-button::-moz-focus-inner{border-style:none;padding:0}.fc .fc-button{background-color:transparent;border:1px solid transparent;border-radius:.25em;display:inline-block;font-size:1em;font-weight:400;line-height:1.5;padding:.4em .65em;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}.fc .fc-button:hover{text-decoration:none}.fc .fc-button:focus{box-shadow:0 0 0 .2rem rgba(44,62,80,.25);outline:0}.fc .fc-button:disabled{opacity:.65}.fc .fc-button-primary{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:hover{background-color:var(--fc-button-hover-bg-color);border-color:var(--fc-button-hover-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:disabled{background-color:var(--fc-button-bg-color);border-color:var(--fc-button-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{background-color:var(--fc-button-active-bg-color);border-color:var(--fc-button-active-border-color);color:var(--fc-button-text-color)}.fc .fc-button-primary:not(:disabled).fc-button-active:focus,.fc .fc-button-primary:not(:disabled):active:focus{box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc .fc-button .fc-icon{font-size:1.5em;vertical-align:middle}.fc .fc-button-group{display:inline-flex;position:relative;vertical-align:middle}.fc .fc-button-group>.fc-button{flex:1 1 auto;position:relative}.fc .fc-button-group>.fc-button.fc-button-active,.fc .fc-button-group>.fc-button:active,.fc .fc-button-group>.fc-button:focus,.fc .fc-button-group>.fc-button:hover{z-index:1}.fc-direction-ltr .fc-button-group>.fc-button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.fc-direction-ltr .fc-button-group>.fc-button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.fc-direction-rtl .fc-button-group>.fc-button:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.fc-direction-rtl .fc-button-group>.fc-button:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.fc .fc-toolbar{align-items:center;display:flex;justify-content:space-between}.fc .fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc .fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc .fc-toolbar-title{font-size:1.75em;margin:0}.fc-direction-ltr .fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-direction-rtl .fc-toolbar>*>:not(:first-child){margin-right:.75em}.fc-direction-rtl .fc-toolbar-ltr{flex-direction:row-reverse}.fc .fc-scroller{-webkit-overflow-scrolling:touch;position:relative}.fc .fc-scroller-liquid{height:100%}.fc .fc-scroller-liquid-absolute{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-scroller-harness{direction:ltr;overflow:hidden;position:relative}.fc .fc-scroller-harness-liquid{height:100%}.fc-direction-rtl .fc-scroller-harness>.fc-scroller{direction:rtl}.fc-theme-standard .fc-scrollgrid{border:1px solid var(--fc-border-color)}.fc .fc-scrollgrid,.fc .fc-scrollgrid table{table-layout:fixed;width:100%}.fc .fc-scrollgrid table{border-left-style:hidden;border-right-style:hidden;border-top-style:hidden}.fc .fc-scrollgrid{border-bottom-width:0;border-collapse:separate;border-right-width:0}.fc .fc-scrollgrid-liquid{height:100%}.fc .fc-scrollgrid-section,.fc .fc-scrollgrid-section table,.fc .fc-scrollgrid-section>td{height:1px}.fc .fc-scrollgrid-section-liquid>td{height:100%}.fc .fc-scrollgrid-section>*{border-left-width:0;border-top-width:0}.fc .fc-scrollgrid-section-footer>*,.fc .fc-scrollgrid-section-header>*{border-bottom-width:0}.fc .fc-scrollgrid-section-body table,.fc .fc-scrollgrid-section-footer table{border-bottom-style:hidden}.fc .fc-scrollgrid-section-sticky>*{background:var(--fc-page-bg-color);position:sticky;z-index:3}.fc .fc-scrollgrid-section-header.fc-scrollgrid-section-sticky>*{top:0}.fc .fc-scrollgrid-section-footer.fc-scrollgrid-section-sticky>*{bottom:0}.fc .fc-scrollgrid-sticky-shim{height:1px;margin-bottom:-1px}.fc-sticky{position:sticky}.fc .fc-view-harness{flex-grow:1;position:relative}.fc .fc-view-harness-active>.fc-view{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-col-header-cell-cushion{display:inline-block;padding:2px 4px}.fc .fc-bg-event,.fc .fc-highlight,.fc .fc-non-business{bottom:0;left:0;position:absolute;right:0;top:0}.fc .fc-non-business{background:var(--fc-non-business-color)}.fc .fc-bg-event{background:var(--fc-bg-event-color);opacity:var(--fc-bg-event-opacity)}.fc .fc-bg-event .fc-event-title{font-size:var(--fc-small-font-size);font-style:italic;margin:.5em}.fc .fc-highlight{background:var(--fc-highlight-color)}.fc .fc-cell-shaded,.fc .fc-day-disabled{background:var(--fc-neutral-bg-color)}a.fc-event,a.fc-event:hover{text-decoration:none}.fc-event.fc-event-draggable,.fc-event[href]{cursor:pointer}.fc-event .fc-event-main{position:relative;z-index:2}.fc-event-dragging:not(.fc-event-selected){opacity:.75}.fc-event-dragging.fc-event-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event .fc-event-resizer{display:none;position:absolute;z-index:4}.fc-event-selected .fc-event-resizer,.fc-event:hover .fc-event-resizer{display:block}.fc-event-selected .fc-event-resizer{background:var(--fc-page-bg-color);border-color:inherit;border-radius:calc(var(--fc-event-resizer-dot-total-width)/2);border-style:solid;border-width:var(--fc-event-resizer-dot-border-width);height:var(--fc-event-resizer-dot-total-width);width:var(--fc-event-resizer-dot-total-width)}.fc-event-selected .fc-event-resizer:before{bottom:-20px;content:"";left:-20px;position:absolute;right:-20px;top:-20px}.fc-event-selected,.fc-event:focus{box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event-selected:before,.fc-event:focus:before{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:3}.fc-event-selected:after,.fc-event:focus:after{background:var(--fc-event-selected-overlay-color);bottom:-1px;content:"";left:-1px;position:absolute;right:-1px;top:-1px;z-index:1}.fc-h-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-h-event .fc-event-main{color:var(--fc-event-text-color)}.fc-h-event .fc-event-main-frame{display:flex}.fc-h-event .fc-event-time{max-width:100%;overflow:hidden}.fc-h-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-width:0}.fc-h-event .fc-event-title{display:inline-block;left:0;max-width:100%;overflow:hidden;right:0;vertical-align:top}.fc-h-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-start),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-end){border-bottom-left-radius:0;border-left-width:0;border-top-left-radius:0}.fc-direction-ltr .fc-daygrid-block-event:not(.fc-event-end),.fc-direction-rtl .fc-daygrid-block-event:not(.fc-event-start){border-bottom-right-radius:0;border-right-width:0;border-top-right-radius:0}.fc-h-event:not(.fc-event-selected) .fc-event-resizer{bottom:0;top:0;width:var(--fc-event-resizer-thickness)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end{cursor:w-resize;left:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-direction-ltr .fc-h-event:not(.fc-event-selected) .fc-event-resizer-end,.fc-direction-rtl .fc-h-event:not(.fc-event-selected) .fc-event-resizer-start{cursor:e-resize;right:calc(var(--fc-event-resizer-thickness)*-.5)}.fc-h-event.fc-event-selected .fc-event-resizer{margin-top:calc(var(--fc-event-resizer-dot-total-width)*-.5);top:50%}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-start,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-end{left:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc-direction-ltr .fc-h-event.fc-event-selected .fc-event-resizer-end,.fc-direction-rtl .fc-h-event.fc-event-selected .fc-event-resizer-start{right:calc(var(--fc-event-resizer-dot-total-width)*-.5)}.fc .fc-popover{box-shadow:0 2px 6px rgba(0,0,0,.15);position:absolute;z-index:9999}.fc .fc-popover-header{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:3px 4px}.fc .fc-popover-title{margin:0 2px}.fc .fc-popover-close{cursor:pointer;font-size:1.1em;opacity:.65}.fc-theme-standard .fc-popover{background:var(--fc-page-bg-color);border:1px solid var(--fc-border-color)}.fc-theme-standard .fc-popover-header{background:var(--fc-neutral-bg-color)}');const Ao=[],bo={code:"en",week:{dow:0,doy:4},direction:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekText:"W",weekTextLong:"Week",closeHint:"Close",timeHint:"Time",eventHint:"Event",allDayText:"all-day",moreLinkText:"more",noEventsText:"No events to display"},yo=Object.assign(Object.assign({},bo),{buttonHints:{prev:"Previous $0",next:"Next $0",today:(e,t)=>"day"===t?"Today":"This "+e},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:e=>`Show ${e} more event${1===e?"":"s"}`});function _o(e){let t=e.length>0?e[0].code:"en",n=Ao.concat(e),r={en:yo};for(let e of n)r[e.code]=e;return{map:r,defaultCode:t}}function Eo(e,t){return"object"!=typeof e||Array.isArray(e)?function(e,t){let n=[].concat(e||[]),r=function(e,t){for(let n=0;n<e.length;n+=1){let r=e[n].toLocaleLowerCase().split("-");for(let e=r.length;e>0;e-=1){let n=r.slice(0,e).join("-");if(t[n])return t[n]}}return null}(n,t)||yo;return Do(e,n,r)}(e,t):Do(e.code,[e.code],e)}function Do(e,t,n){let r=N([bo,n],["buttonText"]);delete r.code;let{week:i}=r;return delete r.week,{codeArg:e,codes:t,week:i,simpleNumberFormat:new Intl.NumberFormat(e),options:r}}function Co(e){return{id:v(),name:e.name,premiumReleaseDate:e.premiumReleaseDate?new Date(e.premiumReleaseDate):void 0,deps:e.deps||[],reducers:e.reducers||[],isLoadingFuncs:e.isLoadingFuncs||[],contextInit:[].concat(e.contextInit||[]),eventRefiners:e.eventRefiners||{},eventDefMemberAdders:e.eventDefMemberAdders||[],eventSourceRefiners:e.eventSourceRefiners||{},isDraggableTransformers:e.isDraggableTransformers||[],eventDragMutationMassagers:e.eventDragMutationMassagers||[],eventDefMutationAppliers:e.eventDefMutationAppliers||[],dateSelectionTransformers:e.dateSelectionTransformers||[],datePointTransforms:e.datePointTransforms||[],dateSpanTransforms:e.dateSpanTransforms||[],views:e.views||{},viewPropsTransformers:e.viewPropsTransformers||[],isPropsValid:e.isPropsValid||null,externalDefTransforms:e.externalDefTransforms||[],viewContainerAppends:e.viewContainerAppends||[],eventDropTransformers:e.eventDropTransformers||[],componentInteractions:e.componentInteractions||[],calendarInteractions:e.calendarInteractions||[],themeClasses:e.themeClasses||{},eventSourceDefs:e.eventSourceDefs||[],cmdFormatter:e.cmdFormatter,recurringTypes:e.recurringTypes||[],namedTimeZonedImpl:e.namedTimeZonedImpl,initialView:e.initialView||"",elementDraggingImpl:e.elementDraggingImpl,optionChangeHandlers:e.optionChangeHandlers||{},scrollGridImpl:e.scrollGridImpl||null,listenerRefiners:e.listenerRefiners||{},optionRefiners:e.optionRefiners||{},propSetHandlers:e.propSetHandlers||{}}}function wo(){let e,t=[],n=[];return(r,i)=>(e&&ue(r,t)&&ue(i,n)||(e=function(e,t){let n={},r={premiumReleaseDate:void 0,reducers:[],isLoadingFuncs:[],contextInit:[],eventRefiners:{},eventDefMemberAdders:[],eventSourceRefiners:{},isDraggableTransformers:[],eventDragMutationMassagers:[],eventDefMutationAppliers:[],dateSelectionTransformers:[],datePointTransforms:[],dateSpanTransforms:[],views:{},viewPropsTransformers:[],isPropsValid:null,externalDefTransforms:[],viewContainerAppends:[],eventDropTransformers:[],componentInteractions:[],calendarInteractions:[],themeClasses:{},eventSourceDefs:[],cmdFormatter:null,recurringTypes:[],namedTimeZonedImpl:null,initialView:"",elementDraggingImpl:null,optionChangeHandlers:{},scrollGridImpl:null,listenerRefiners:{},optionRefiners:{},propSetHandlers:{}};function i(e){for(let s of e){const e=s.name,a=n[e];void 0===a?(n[e]=s.id,i(s.deps),o=s,r={premiumReleaseDate:So((t=r).premiumReleaseDate,o.premiumReleaseDate),reducers:t.reducers.concat(o.reducers),isLoadingFuncs:t.isLoadingFuncs.concat(o.isLoadingFuncs),contextInit:t.contextInit.concat(o.contextInit),eventRefiners:Object.assign(Object.assign({},t.eventRefiners),o.eventRefiners),eventDefMemberAdders:t.eventDefMemberAdders.concat(o.eventDefMemberAdders),eventSourceRefiners:Object.assign(Object.assign({},t.eventSourceRefiners),o.eventSourceRefiners),isDraggableTransformers:t.isDraggableTransformers.concat(o.isDraggableTransformers),eventDragMutationMassagers:t.eventDragMutationMassagers.concat(o.eventDragMutationMassagers),eventDefMutationAppliers:t.eventDefMutationAppliers.concat(o.eventDefMutationAppliers),dateSelectionTransformers:t.dateSelectionTransformers.concat(o.dateSelectionTransformers),datePointTransforms:t.datePointTransforms.concat(o.datePointTransforms),dateSpanTransforms:t.dateSpanTransforms.concat(o.dateSpanTransforms),views:Object.assign(Object.assign({},t.views),o.views),viewPropsTransformers:t.viewPropsTransformers.concat(o.viewPropsTransformers),isPropsValid:o.isPropsValid||t.isPropsValid,externalDefTransforms:t.externalDefTransforms.concat(o.externalDefTransforms),viewContainerAppends:t.viewContainerAppends.concat(o.viewContainerAppends),eventDropTransformers:t.eventDropTransformers.concat(o.eventDropTransformers),calendarInteractions:t.calendarInteractions.concat(o.calendarInteractions),componentInteractions:t.componentInteractions.concat(o.componentInteractions),themeClasses:Object.assign(Object.assign({},t.themeClasses),o.themeClasses),eventSourceDefs:t.eventSourceDefs.concat(o.eventSourceDefs),cmdFormatter:o.cmdFormatter||t.cmdFormatter,recurringTypes:t.recurringTypes.concat(o.recurringTypes),namedTimeZonedImpl:o.namedTimeZonedImpl||t.namedTimeZonedImpl,initialView:t.initialView||o.initialView,elementDraggingImpl:t.elementDraggingImpl||o.elementDraggingImpl,optionChangeHandlers:Object.assign(Object.assign({},t.optionChangeHandlers),o.optionChangeHandlers),scrollGridImpl:o.scrollGridImpl||t.scrollGridImpl,listenerRefiners:Object.assign(Object.assign({},t.listenerRefiners),o.listenerRefiners),optionRefiners:Object.assign(Object.assign({},t.optionRefiners),o.optionRefiners),propSetHandlers:Object.assign(Object.assign({},t.propSetHandlers),o.propSetHandlers)}):a!==s.id&&console.warn(`Duplicate plugin '${e}'`)}var t,o}return e&&i(e),i(t),r}(r,i)),t=r,n=i,e)}function So(e,t){return void 0===e?t:void 0===t?e:new Date(Math.max(e.valueOf(),t.valueOf()))}class To extends jt{}function ko(e,t,n,r){if(t[e])return t[e];let i=function(e,t,n,r){let i=n[e],o=r[e],s=e=>i&&null!==i[e]?i[e]:o&&null!==o[e]?o[e]:null,a=s("component"),l=s("superType"),c=null;if(l){if(l===e)throw new Error("Can't have a custom view type that references itself");c=ko(l,t,n,r)}!a&&c&&(a=c.component);if(!a)return null;return{type:e,component:a,defaults:Object.assign(Object.assign({},c?c.defaults:{}),i?i.rawOptions:{}),overrides:Object.assign(Object.assign({},c?c.overrides:{}),o?o.rawOptions:{})}}(e,t,n,r);return i&&(t[e]=i),i}function Ro(e){return H(e,xo)}function xo(e){let t="function"==typeof e?{component:e}:e,{component:n}=t;var r;return t.content&&(r=t,n=e=>Xt(fr.Consumer,null,t=>Xt(pi,{elTag:"div",elClasses:uo(t.viewSpec),renderProps:Object.assign(Object.assign({},e),{nextDayThreshold:t.options.nextDayThreshold}),generatorName:void 0,generator:r.content,classNameGenerator:r.classNames,didMount:r.didMount,willUnmount:r.willUnmount}))),{superType:t.type,component:n,rawOptions:t}}function Oo(e,t,n,r){let i=Ro(e),o=Ro(t.views);return H(function(e,t){let n,r={};for(n in e)ko(n,r,e,t);for(n in t)ko(n,r,e,t);return r}(i,o),e=>function(e,t,n,r,i){let o=e.overrides.duration||e.defaults.duration||r.duration||n.duration,s=null,a="",l="",c={};if(o&&(s=function(e){let t=JSON.stringify(e),n=Io[t];void 0===n&&(n=k(e),Io[t]=n);return n}(o),s)){let e=I(s);a=e.unit,1===e.value&&(l=a,c=t[a]?t[a].rawOptions:{})}let u=t=>{let n=t.buttonText||{},r=e.defaults.buttonTextKey;return null!=r&&null!=n[r]?n[r]:null!=n[e.type]?n[e.type]:null!=n[l]?n[l]:null},d=t=>{let n=t.buttonHints||{},r=e.defaults.buttonTextKey;return null!=r&&null!=n[r]?n[r]:null!=n[e.type]?n[e.type]:null!=n[l]?n[l]:null};return{type:e.type,component:e.component,duration:s,durationUnit:a,singleUnit:l,optionDefaults:e.defaults,optionOverrides:Object.assign(Object.assign({},c),e.overrides),buttonTextOverride:u(r)||u(n)||e.overrides.buttonText,buttonTextDefault:u(i)||e.defaults.buttonText||u(ke)||e.type,buttonTitleOverride:d(r)||d(n)||e.overrides.buttonHint,buttonTitleDefault:d(i)||e.defaults.buttonHint||d(ke)}}(e,o,t,n,r))}To.prototype.classes={root:"fc-theme-standard",tableCellShaded:"fc-cell-shaded",buttonGroup:"fc-button-group",button:"fc-button fc-button-primary",buttonActive:"fc-button-active"},To.prototype.baseIconClass="fc-icon",To.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-chevron-left",next:"fc-icon-chevron-right",prevYear:"fc-icon-chevrons-left",nextYear:"fc-icon-chevrons-right"},To.prototype.rtlIconClasses={prev:"fc-icon-chevron-right",next:"fc-icon-chevron-left",prevYear:"fc-icon-chevrons-right",nextYear:"fc-icon-chevrons-left"},To.prototype.iconOverrideOption="buttonIcons",To.prototype.iconOverrideCustomButtonOption="icon",To.prototype.iconOverridePrefix="fc-icon-";let Io={};function Mo(e,t,n){let r=t?t.activeRange:null;return Ho({},function(e,t){let n=go(t),r=[].concat(e.eventSources||[]),i=[];e.initialEvents&&r.unshift(e.initialEvents);e.events&&r.unshift(e.events);for(let e of r){let r=po(e,t,n);r&&i.push(r)}return i}(e,n),r,n)}function No(e,t,n,r){let i=n?n.activeRange:null;switch(t.type){case"ADD_EVENT_SOURCES":return Ho(e,t.sources,i,r);case"REMOVE_EVENT_SOURCE":return o=e,s=t.sourceId,B(o,e=>e.sourceId!==s);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return n?Po(e,i,r):e;case"FETCH_EVENT_SOURCES":return Uo(e,t.sourceIds?P(t.sourceIds):zo(e,r),i,t.isRefetch||!1,r);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return function(e,t,n,r){let i=e[t];if(i&&n===i.latestFetchId)return Object.assign(Object.assign({},e),{[t]:Object.assign(Object.assign({},i),{isFetching:!1,fetchRange:r})});return e}(e,t.sourceId,t.fetchId,t.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return e}var o,s}function Bo(e){for(let t in e)if(e[t].isFetching)return!0;return!1}function Ho(e,t,n,r){let i={};for(let e of t)i[e.sourceId]=e;return n&&(i=Po(i,n,r)),Object.assign(Object.assign({},e),i)}function Po(e,t,n){return Uo(e,B(e,e=>function(e,t,n){if(!Lo(e,n))return!e.latestFetchId;return!n.options.lazyFetching||!e.fetchRange||e.isFetching||t.start<e.fetchRange.start||t.end>e.fetchRange.end}(e,t,n)),t,!1,n)}function Uo(e,t,n,r,i){let o={};for(let s in e){let a=e[s];t[s]?o[s]=jo(a,n,r,i):o[s]=a}return o}function jo(e,t,n,r){let{options:i,calendarApi:o}=r,s=r.pluginHooks.eventSourceDefs[e.sourceDefId],a=v();return s.fetch({eventSource:e,range:t,isRefetch:n,context:r},n=>{let{rawEvents:s}=n;i.eventSourceSuccess&&(s=i.eventSourceSuccess.call(o,s,n.response)||s),e.success&&(s=e.success.call(o,s,n.response)||s),r.dispatch({type:"RECEIVE_EVENTS",sourceId:e.sourceId,fetchId:a,fetchRange:t,rawEvents:s})},n=>{let s=!1;i.eventSourceFailure&&(i.eventSourceFailure.call(o,n),s=!0),e.failure&&(e.failure(n),s=!0),s||console.warn(n.message,n),r.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:e.sourceId,fetchId:a,fetchRange:t,error:n})}),Object.assign(Object.assign({},e),{isFetching:!0,latestFetchId:a})}function zo(e,t){return B(e,e=>Lo(e,t))}function Lo(e,t){return!t.pluginHooks.eventSourceDefs[e.sourceDefId].ignoreRange}function Fo(e,t){switch(t.type){case"UNSELECT_DATES":return null;case"SELECT_DATES":return t.selection;default:return e}}function Vo(e,t){switch(t.type){case"UNSELECT_EVENT":return"";case"SELECT_EVENT":return t.eventInstanceId;default:return e}}function Wo(e,t){let n;switch(t.type){case"UNSET_EVENT_DRAG":return null;case"SET_EVENT_DRAG":return n=t.state,{affectedEvents:n.affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return e}}function Qo(e,t){let n;switch(t.type){case"UNSET_EVENT_RESIZE":return null;case"SET_EVENT_RESIZE":return n=t.state,{affectedEvents:n.affectedEvents,mutatedEvents:n.mutatedEvents,isEvent:n.isEvent};default:return e}}function Go(e,t,n,r,i){return{header:e.headerToolbar?Zo(e.headerToolbar,e,t,n,r,i):null,footer:e.footerToolbar?Zo(e.footerToolbar,e,t,n,r,i):null}}function Zo(e,t,n,r,i,o){let s={},a=[],l=!1;for(let c in e){let u=Yo(e[c],t,n,r,i,o);s[c]=u.widgets,a.push(...u.viewsWithButtons),l=l||u.hasTitle}return{sectionWidgets:s,viewsWithButtons:a,hasTitle:l}}function Yo(e,t,n,r,i,o){let s="rtl"===t.direction,a=t.customButtons||{},l=n.buttonText||{},c=t.buttonText||{},u=n.buttonHints||{},d=t.buttonHints||{},f=e?e.split(" "):[],h=[],p=!1;return{widgets:f.map(e=>e.split(",").map(e=>{if("title"===e)return p=!0,{buttonName:e};let n,f,g,m,v,A;if(n=a[e])g=e=>{n.click&&n.click.call(e.target,e,e.target)},(m=r.getCustomButtonIconClass(n))||(m=r.getIconClass(e,s))||(v=n.text),A=n.hint||n.text;else if(f=i[e]){h.push(e),g=()=>{o.changeView(e)},(v=f.buttonTextOverride)||(m=r.getIconClass(e,s))||(v=f.buttonTextDefault);let n=f.buttonTextOverride||f.buttonTextDefault;A=D(f.buttonTitleOverride||f.buttonTitleDefault||t.viewHint,[n,e],n)}else if(o[e])if(g=()=>{o[e]()},(v=l[e])||(m=r.getIconClass(e,s))||(v=c[e]),"prevYear"===e||"nextYear"===e){let t="prevYear"===e?"prev":"next";A=D(u[t]||d[t],[c.year||"year","year"],c[e])}else A=t=>D(u[e]||d[e],[c[t]||t,t],c[e]);return{buttonName:e,buttonClick:g,buttonIcon:m,buttonText:v,buttonHint:A}})),viewsWithButtons:h,hasTitle:p}}class qo{constructor(e,t,n){this.type=e,this.getCurrentData=t,this.dateEnv=n}get calendar(){return this.getCurrentData().calendarApi}get title(){return this.getCurrentData().viewTitle}get activeStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.start)}get activeEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.activeRange.end)}get currentStart(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.start)}get currentEnd(){return this.dateEnv.toDate(this.getCurrentData().dateProfile.currentRange.end)}getOption(e){return this.getCurrentData().options[e]}}function Jo(e,t){let n=U(t.getCurrentData().eventSources),r=[];for(let t of e){let e=!1;for(let r=0;r<n.length;r+=1)if(n[r]._raw===t){n.splice(r,1),e=!0;break}e||r.push(t)}for(let e of n)t.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:e.sourceId});for(let e of r)t.calendarApi.addEventSource(e)}const $o=[Co({name:"array-event-source",eventSourceDefs:[{ignoreRange:!0,parseMeta:e=>Array.isArray(e.events)?e.events:null,fetch(e,t){t({rawEvents:e.eventSource.meta})}}]}),Co({name:"func-event-source",eventSourceDefs:[{parseMeta:e=>"function"==typeof e.events?e.events:null,fetch(e,t,n){const{dateEnv:r}=e.context;Bt(e.eventSource.meta.bind(null,Wr(e.range,r)),e=>t({rawEvents:e}),n)}}]}),Co({name:"json-event-source",eventSourceRefiners:{method:String,extraParams:He,startParam:String,endParam:String,timeZoneParam:String},eventSourceDefs:[{parseMeta:e=>!e.url||"json"!==e.format&&e.format?null:{url:e.url,format:"json",method:(e.method||"GET").toUpperCase(),extraParams:e.extraParams,startParam:e.startParam,endParam:e.endParam,timeZoneParam:e.timeZoneParam},fetch(e,t,n){const{meta:r}=e.eventSource,i=function(e,t,n){let r,i,o,s,{dateEnv:a,options:l}=n,c={};r=e.startParam,null==r&&(r=l.startParam);i=e.endParam,null==i&&(i=l.endParam);o=e.timeZoneParam,null==o&&(o=l.timeZoneParam);s="function"==typeof e.extraParams?e.extraParams():e.extraParams||{};Object.assign(c,s),c[r]=a.formatIso(t.start),c[i]=a.formatIso(t.end),"local"!==a.timeZone&&(c[o]=a.timeZone);return c}(r,e.range,e.context);Mi(r.method,r.url,i).then(([e,n])=>{t({rawEvents:e,response:n})},n)}}]}),Co({name:"simple-recurring-event",recurringTypes:[{parse(e,t){if(e.daysOfWeek||e.startTime||e.endTime||e.startRecur||e.endRecur){let i,o={daysOfWeek:e.daysOfWeek||null,startTime:e.startTime||null,endTime:e.endTime||null,startRecur:e.startRecur?t.createMarker(e.startRecur):null,endRecur:e.endRecur?t.createMarker(e.endRecur):null};return e.duration&&(i=e.duration),!i&&e.startTime&&e.endTime&&(n=e.endTime,r=e.startTime,i={years:n.years-r.years,months:n.months-r.months,days:n.days-r.days,milliseconds:n.milliseconds-r.milliseconds}),{allDayGuess:Boolean(!e.startTime&&!e.endTime),duration:i,typeData:o}}var n,r;return null},expand(e,t,n){let r=vt(t,{start:e.startRecur,end:e.endRecur});return r?function(e,t,n,r){let i=e?P(e):null,o=X(n.start),s=n.end,a=[];for(;o<s;){let e;i&&!i[o.getUTCDay()]||(e=t?r.add(o,t):o,a.push(e)),o=G(o,1)}return a}(e.daysOfWeek,e.startTime,r,n):[]}}],eventRefiners:{daysOfWeek:He,startTime:k,endTime:k,duration:k,startRecur:He,endRecur:He}}),Co({name:"change-handler",optionChangeHandlers:{events(e,t){Jo([e],t)},eventSources:Jo}}),Co({name:"misc",isLoadingFuncs:[e=>Bo(e.eventSources)],propSetHandlers:{dateProfile:function(e,t){t.emitter.trigger("datesSet",Object.assign(Object.assign({},Wr(e.activeRange,t.dateEnv)),{view:t.viewApi}))},eventStore:function(e,t){let{emitter:n}=t;n.hasHandlers("eventsSet")&&n.trigger("eventsSet",Rr(e,t))}}})];class Xo{constructor(e,t){this.runTaskOption=e,this.drainedOption=t,this.queue=[],this.delayedRunner=new Ni(this.drain.bind(this))}request(e,t){this.queue.push(e),this.delayedRunner.request(t)}pause(e){this.delayedRunner.pause(e)}resume(e,t){this.delayedRunner.resume(e,t)}drain(){let{queue:e}=this;for(;e.length;){let t,n=[];for(;t=e.shift();)this.runTask(t),n.push(t);this.drained(n)}}runTask(e){this.runTaskOption&&this.runTaskOption(e)}drained(e){this.drainedOption&&this.drainedOption(e)}}function Ko(e,t,n){let r;return r=/^(year|month)$/.test(e.currentRangeUnit)?e.currentRange:e.activeRange,n.formatRange(r.start,r.end,Se(t.titleFormat||function(e){let{currentRangeUnit:t}=e;if("year"===t)return{year:"numeric"};if("month"===t)return{year:"numeric",month:"long"};let n=$(e.currentRange.start,e.currentRange.end);if(null!==n&&n>1)return{year:"numeric",month:"short",day:"numeric"};return{year:"numeric",month:"long",day:"numeric"}}(e)),{isEndExclusive:e.isRangeAllDay,defaultSeparator:t.titleRangeSeparator})}class es{constructor(e){this.computeOptionsData=de(this._computeOptionsData),this.computeCurrentViewData=de(this._computeCurrentViewData),this.organizeRawLocales=de(_o),this.buildLocale=de(Eo),this.buildPluginHooks=wo(),this.buildDateEnv=de(ts),this.buildTheme=de(ns),this.parseToolbars=de(Go),this.buildViewSpecs=de(Oo),this.buildDateProfileGenerator=fe(rs),this.buildViewApi=de(is),this.buildViewUiProps=fe(as),this.buildEventUiBySource=de(os,j),this.buildEventUiBases=de(ss),this.parseContextBusinessHours=fe(cs),this.buildTitle=de(Ko),this.emitter=new Ht,this.actionRunner=new Xo(this._handleAction.bind(this),this.updateData.bind(this)),this.currentCalendarOptionsInput={},this.currentCalendarOptionsRefined={},this.currentViewOptionsInput={},this.currentViewOptionsRefined={},this.currentCalendarOptionsRefiners={},this.getCurrentData=()=>this.data,this.dispatch=e=>{this.actionRunner.request(e)},this.props=e,this.actionRunner.pause();let t={},n=this.computeOptionsData(e.optionOverrides,t,e.calendarApi),r=n.calendarOptions.initialView||n.pluginHooks.initialView,i=this.computeCurrentViewData(r,n,e.optionOverrides,t);e.calendarApi.currentDataManager=this,this.emitter.setThisContext(e.calendarApi),this.emitter.setOptions(i.options);let o=function(e,t){let n=e.initialDate;return null!=n?t.createMarker(n):Ar(e.now,t)}(n.calendarOptions,n.dateEnv),s=i.dateProfileGenerator.build(o);_t(s.activeRange,o)||(o=s.currentRange.start);let a={dateEnv:n.dateEnv,options:n.calendarOptions,pluginHooks:n.pluginHooks,calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData};for(let e of n.pluginHooks.contextInit)e(a);let l=Mo(n.calendarOptions,s,a),c={dynamicOptionOverrides:t,currentViewType:r,currentDate:o,dateProfile:s,businessHours:this.parseContextBusinessHours(a),eventSources:l,eventUiBases:{},eventStore:{defs:{},instances:{}},renderableEventStore:{defs:{},instances:{}},dateSelection:null,eventSelection:"",eventDrag:null,eventResize:null,selectionConfig:this.buildViewUiProps(a).selectionConfig},u=Object.assign(Object.assign({},a),c);for(let e of n.pluginHooks.reducers)Object.assign(c,e(null,null,u));ls(c,a)&&this.emitter.trigger("loading",!0),this.state=c,this.updateData(),this.actionRunner.resume()}resetOptions(e,t){let{props:n}=this;n.optionOverrides=t?Object.assign(Object.assign({},n.optionOverrides),e):e,this.actionRunner.request({type:"NOTHING"})}_handleAction(e){let{props:t,state:n,emitter:r}=this,i=function(e,t){switch(t.type){case"SET_OPTION":return Object.assign(Object.assign({},e),{[t.optionName]:t.rawOptionValue});default:return e}}(n.dynamicOptionOverrides,e),o=this.computeOptionsData(t.optionOverrides,i,t.calendarApi),s=function(e,t){switch(t.type){case"CHANGE_VIEW_TYPE":e=t.viewType}return e}(n.currentViewType,e),a=this.computeCurrentViewData(s,o,t.optionOverrides,i);t.calendarApi.currentDataManager=this,r.setThisContext(t.calendarApi),r.setOptions(a.options);let l={dateEnv:o.dateEnv,options:o.calendarOptions,pluginHooks:o.pluginHooks,calendarApi:t.calendarApi,dispatch:this.dispatch,emitter:r,getCurrentData:this.getCurrentData},{currentDate:c,dateProfile:u}=n;this.data&&this.data.dateProfileGenerator!==a.dateProfileGenerator&&(u=a.dateProfileGenerator.build(c)),c=function(e,t){switch(t.type){case"CHANGE_DATE":return t.dateMarker;default:return e}}(c,e),u=function(e,t,n,r){let i;switch(t.type){case"CHANGE_VIEW_TYPE":return r.build(t.dateMarker||n);case"CHANGE_DATE":return r.build(t.dateMarker);case"PREV":if(i=r.buildPrev(e,n),i.isValid)return i;break;case"NEXT":if(i=r.buildNext(e,n),i.isValid)return i}return e}(u,e,c,a.dateProfileGenerator),"PREV"!==e.type&&"NEXT"!==e.type&&_t(u.currentRange,c)||(c=u.currentRange.start);let d=No(n.eventSources,e,u,l),f=Di(n.eventStore,e,d,u,l),h=Bo(d)&&!a.options.progressiveEventRendering&&n.renderableEventStore||f,{eventUiSingleBase:p,selectionConfig:g}=this.buildViewUiProps(l),m=this.buildEventUiBySource(d),v={dynamicOptionOverrides:i,currentViewType:s,currentDate:c,dateProfile:u,eventSources:d,eventStore:f,renderableEventStore:h,selectionConfig:g,eventUiBases:this.buildEventUiBases(h.defs,p,m),businessHours:this.parseContextBusinessHours(l),dateSelection:Fo(n.dateSelection,e),eventSelection:Vo(n.eventSelection,e),eventDrag:Wo(n.eventDrag,e),eventResize:Qo(n.eventResize,e)},A=Object.assign(Object.assign({},l),v);for(let t of o.pluginHooks.reducers)Object.assign(v,t(n,e,A));let b=ls(n,l),y=ls(v,l);!b&&y?r.trigger("loading",!0):b&&!y&&r.trigger("loading",!1),this.state=v,t.onAction&&t.onAction(e)}updateData(){let{props:e,state:t}=this,n=this.data,r=this.computeOptionsData(e.optionOverrides,t.dynamicOptionOverrides,e.calendarApi),i=this.computeCurrentViewData(t.currentViewType,r,e.optionOverrides,t.dynamicOptionOverrides),o=this.data=Object.assign(Object.assign(Object.assign({viewTitle:this.buildTitle(t.dateProfile,i.options,r.dateEnv),calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},r),i),t),s=r.pluginHooks.optionChangeHandlers,a=n&&n.calendarOptions,l=r.calendarOptions;if(a&&a!==l){a.timeZone!==l.timeZone&&(t.eventSources=o.eventSources=function(e,t,n){let r=t?t.activeRange:null;return Uo(e,zo(e,n),r,!0,n)}(o.eventSources,t.dateProfile,o),t.eventStore=o.eventStore=function(e,t,n){let{defs:r}=e,i=H(e.instances,e=>{let i=r[e.defId];return i.allDay||i.recurringDef?e:Object.assign(Object.assign({},e),{range:{start:n.createMarker(t.toDate(e.range.start,e.forcedStartTzo)),end:n.createMarker(t.toDate(e.range.end,e.forcedEndTzo))},forcedStartTzo:n.canComputeOffset?null:e.forcedStartTzo,forcedEndTzo:n.canComputeOffset?null:e.forcedEndTzo})});return{defs:r,instances:i}}(o.eventStore,n.dateEnv,o.dateEnv));for(let e in s)a[e]!==l[e]&&s[e](l[e],o)}e.onData&&e.onData(o)}_computeOptionsData(e,t,n){let{refinedOptions:r,pluginHooks:i,localeDefaults:o,availableLocaleData:s,extra:a}=this.processRawCalendarOptions(e,t);us(a);let l=this.buildDateEnv(r.timeZone,r.locale,r.weekNumberCalculation,r.firstDay,r.weekText,i,s,r.defaultRangeSeparator),c=this.buildViewSpecs(i.views,e,t,o),u=this.buildTheme(r,i);return{calendarOptions:r,pluginHooks:i,dateEnv:l,viewSpecs:c,theme:u,toolbarConfig:this.parseToolbars(r,e,u,c,n),localeDefaults:o,availableRawLocales:s.map}}processRawCalendarOptions(e,t){let{locales:n,locale:r}=Ne([ke,e,t]),i=this.organizeRawLocales(n),o=i.map,s=this.buildLocale(r||i.defaultCode,o).options,a=this.buildPluginHooks(e.plugins||[],$o),l=this.currentCalendarOptionsRefiners=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Te),Re),xe),a.listenerRefiners),a.optionRefiners),c={},u=Ne([ke,s,e,t]),d={},f=this.currentCalendarOptionsInput,h=this.currentCalendarOptionsRefined,p=!1;for(let e in u)"plugins"!==e&&(u[e]===f[e]||Oe[e]&&e in f&&Oe[e](f[e],u[e])?d[e]=h[e]:l[e]?(d[e]=l[e](u[e]),p=!0):c[e]=f[e]);return p&&(this.currentCalendarOptionsInput=u,this.currentCalendarOptionsRefined=d),{rawOptions:this.currentCalendarOptionsInput,refinedOptions:this.currentCalendarOptionsRefined,pluginHooks:a,availableLocaleData:i,localeDefaults:s,extra:c}}_computeCurrentViewData(e,t,n,r){let i=t.viewSpecs[e];if(!i)throw new Error(`viewType "${e}" is not available. Please make sure you've loaded all neccessary plugins`);let{refinedOptions:o,extra:s}=this.processRawViewOptions(i,t.pluginHooks,t.localeDefaults,n,r);return us(s),{viewSpec:i,options:o,dateProfileGenerator:this.buildDateProfileGenerator({dateProfileGeneratorClass:i.optionDefaults.dateProfileGeneratorClass,duration:i.duration,durationUnit:i.durationUnit,usesMinMaxTime:i.optionDefaults.usesMinMaxTime,dateEnv:t.dateEnv,calendarApi:this.props.calendarApi,slotMinTime:o.slotMinTime,slotMaxTime:o.slotMaxTime,showNonCurrentDates:o.showNonCurrentDates,dayCount:o.dayCount,dateAlignment:o.dateAlignment,dateIncrement:o.dateIncrement,hiddenDays:o.hiddenDays,weekends:o.weekends,nowInput:o.now,validRangeInput:o.validRange,visibleRangeInput:o.visibleRange,monthMode:o.monthMode,fixedWeekCount:o.fixedWeekCount}),viewApi:this.buildViewApi(e,this.getCurrentData,t.dateEnv)}}processRawViewOptions(e,t,n,r,i){let o=Ne([ke,e.optionDefaults,n,r,e.optionOverrides,i]),s=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},Te),Re),xe),Me),t.listenerRefiners),t.optionRefiners),a={},l=this.currentViewOptionsInput,c=this.currentViewOptionsRefined,u=!1,d={};for(let e in o)o[e]===l[e]||Oe[e]&&Oe[e](o[e],l[e])?a[e]=c[e]:(o[e]===this.currentCalendarOptionsInput[e]||Oe[e]&&Oe[e](o[e],this.currentCalendarOptionsInput[e])?e in this.currentCalendarOptionsRefined&&(a[e]=this.currentCalendarOptionsRefined[e]):s[e]?a[e]=s[e](o[e]):d[e]=o[e],u=!0);return u&&(this.currentViewOptionsInput=o,this.currentViewOptionsRefined=a),{rawOptions:this.currentViewOptionsInput,refinedOptions:this.currentViewOptionsRefined,extra:d}}}function ts(e,t,n,r,i,o,s,a){let l=Eo(t||s.defaultCode,s.map);return new $r({calendarSystem:"gregory",timeZone:e,namedTimeZoneImpl:o.namedTimeZonedImpl,locale:l,weekNumberCalculation:n,firstDay:r,weekText:i,cmdFormatter:o.cmdFormatter,defaultSeparator:a})}function ns(e,t){return new(t.themeClasses[e.themeSystem]||To)(e)}function rs(e){return new(e.dateProfileGeneratorClass||br)(e)}function is(e,t,n){return new qo(e,t,n)}function os(e){return H(e,e=>e.ui)}function ss(e,t,n){let r={"":t};for(let t in e){let i=e[t];i.sourceId&&n[i.sourceId]&&(r[t]=n[i.sourceId])}return r}function as(e){let{options:t}=e;return{eventUiSingleBase:qe({display:t.eventDisplay,editable:t.editable,startEditable:t.eventStartEditable,durationEditable:t.eventDurationEditable,constraint:t.eventConstraint,overlap:"boolean"==typeof t.eventOverlap?t.eventOverlap:void 0,allow:t.eventAllow,backgroundColor:t.eventBackgroundColor,borderColor:t.eventBorderColor,textColor:t.eventTextColor,color:t.eventColor},e),selectionConfig:qe({constraint:t.selectConstraint,overlap:"boolean"==typeof t.selectOverlap?t.selectOverlap:void 0,allow:t.selectAllow},e)}}function ls(e,t){for(let n of t.pluginHooks.isLoadingFuncs)if(n(e))return!0;return!1}function cs(e){return st(e.options.businessHours,e)}function us(e,t){for(let n in e)console.warn(`Unknown option '${n}'`+(t?` for view '${t}'`:""))}class ds extends gr{render(){return Xt("div",{className:"fc-toolbar-chunk"},...this.props.widgetGroups.map(e=>this.renderWidgetGroup(e)))}renderWidgetGroup(e){let{props:t}=this,{theme:n}=this.context,r=[],i=!0;for(let o of e){let{buttonName:e,buttonClick:s,buttonText:a,buttonIcon:l,buttonHint:c}=o;if("title"===e)i=!1,r.push(Xt("h2",{className:"fc-toolbar-title",id:t.titleId},t.title));else{let i=e===t.activeButton,o=!t.isTodayEnabled&&"today"===e||!t.isPrevEnabled&&"prev"===e||!t.isNextEnabled&&"next"===e,u=[`fc-${e}-button`,n.getClass("button")];i&&u.push(n.getClass("buttonActive")),r.push(Xt("button",{type:"button",title:"function"==typeof c?c(t.navUnit):c,disabled:o,"aria-pressed":i,className:u.join(" "),onClick:s},a||(l?Xt("span",{className:l}):"")))}}if(r.length>1){return Xt("div",{className:i&&n.getClass("buttonGroup")||""},...r)}return r[0]}}class fs extends gr{render(){let e,t,{model:n,extraClassName:r}=this.props,i=!1,o=n.sectionWidgets,s=o.center;return o.left?(i=!0,e=o.left):e=o.start,o.right?(i=!0,t=o.right):t=o.end,Xt("div",{className:[r||"","fc-toolbar",i?"fc-toolbar-ltr":""].join(" ")},this.renderSection("start",e||[]),this.renderSection("center",s||[]),this.renderSection("end",t||[]))}renderSection(e,t){let{props:n}=this;return Xt(ds,{key:e,widgetGroups:t,title:n.title,navUnit:n.navUnit,activeButton:n.activeButton,isTodayEnabled:n.isTodayEnabled,isPrevEnabled:n.isPrevEnabled,isNextEnabled:n.isNextEnabled,titleId:n.titleId})}}class hs extends gr{constructor(){super(...arguments),this.state={availableWidth:null},this.handleEl=e=>{this.el=e,mr(this.props.elRef,e),this.updateAvailableWidth()},this.handleResize=()=>{this.updateAvailableWidth()}}render(){let{props:e,state:t}=this,{aspectRatio:n}=e,r=["fc-view-harness",n||e.liquid||e.height?"fc-view-harness-active":"fc-view-harness-passive"],i="",o="";return n?null!==t.availableWidth?i=t.availableWidth/n:o=1/n*100+"%":i=e.height||"",Xt("div",{"aria-labelledby":e.labeledById,ref:this.handleEl,className:r.join(" "),style:{height:i,paddingBottom:o}},e.children)}componentDidMount(){this.context.addResizeHandler(this.handleResize)}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}updateAvailableWidth(){this.el&&this.props.aspectRatio&&this.setState({availableWidth:this.el.offsetWidth})}}class ps extends ri{constructor(e){super(e),this.handleSegClick=(e,t)=>{let{component:r}=this,{context:i}=r,o=Ir(t);if(o&&r.isValidSegDownEl(e.target)){let s=n(e.target,".fc-event-forced-url"),a=s?s.querySelector("a[href]").href:"";i.emitter.trigger("eventClick",{el:t,event:new Tr(r.context,o.eventRange.def,o.eventRange.instance),jsEvent:e,view:i.viewApi}),a&&!e.defaultPrevented&&(window.location.href=a)}},this.destroy=f(e.el,"click",".fc-event",this.handleSegClick)}}class gs extends ri{constructor(e){super(e),this.handleEventElRemove=e=>{e===this.currentSegEl&&this.handleSegLeave(null,this.currentSegEl)},this.handleSegEnter=(e,t)=>{Ir(t)&&(this.currentSegEl=t,this.triggerEvent("eventMouseEnter",e,t))},this.handleSegLeave=(e,t)=>{this.currentSegEl&&(this.currentSegEl=null,this.triggerEvent("eventMouseLeave",e,t))},this.removeHoverListeners=function(e,t,n,r){let i;return f(e,"mouseover",t,(e,t)=>{if(t!==i){i=t,n(e,t);let o=e=>{i=null,r(e,t),t.removeEventListener("mouseleave",o)};t.addEventListener("mouseleave",o)}})}(e.el,".fc-event",this.handleSegEnter,this.handleSegLeave)}destroy(){this.removeHoverListeners()}triggerEvent(e,t,n){let{component:r}=this,{context:i}=r,o=Ir(n);t&&!r.isValidSegDownEl(t.target)||i.emitter.trigger(e,{el:n,event:new Tr(i,o.eventRange.def,o.eventRange.instance),jsEvent:t,view:i.viewApi})}}class ms extends pr{constructor(){super(...arguments),this.buildViewContext=de(hr),this.buildViewPropTransformers=de(As),this.buildToolbarProps=de(vs),this.headerRef={current:null},this.footerRef={current:null},this.interactionsStore={},this.state={viewLabelId:u()},this.registerInteractiveComponent=(e,t)=>{let n=function(e,t){return{component:e,el:t.el,useEventCenter:null==t.useEventCenter||t.useEventCenter,isHitComboAllowed:t.isHitComboAllowed||null}}(e,t),r=[ps,gs].concat(this.props.pluginHooks.componentInteractions).map(e=>new e(n));this.interactionsStore[e.uid]=r,ii[e.uid]=n},this.unregisterInteractiveComponent=e=>{let t=this.interactionsStore[e.uid];if(t){for(let e of t)e.destroy();delete this.interactionsStore[e.uid]}delete ii[e.uid]},this.resizeRunner=new Ni(()=>{this.props.emitter.trigger("_resize",!0),this.props.emitter.trigger("windowResize",{view:this.props.viewApi})}),this.handleWindowResize=e=>{let{options:t}=this.props;t.handleWindowResize&&e.target===window&&this.resizeRunner.request(t.windowResizeDelay)}}render(){let e,{props:t}=this,{toolbarConfig:n,options:r}=t,i=this.buildToolbarProps(t.viewSpec,t.dateProfile,t.dateProfileGenerator,t.currentDate,Ar(t.options.now,t.dateEnv),t.viewTitle),o=!1,s="";t.isHeightAuto||t.forPrint?s="":null!=r.height?o=!0:null!=r.contentHeight?s=r.contentHeight:e=Math.max(r.aspectRatio,.5);let a=this.buildViewContext(t.viewSpec,t.viewApi,t.options,t.dateProfileGenerator,t.dateEnv,t.theme,t.pluginHooks,t.dispatch,t.getCurrentData,t.emitter,t.calendarApi,this.registerInteractiveComponent,this.unregisterInteractiveComponent),l=n.header&&n.header.hasTitle?this.state.viewLabelId:"";return Xt(fr.Provider,{value:a},n.header&&Xt(fs,Object.assign({ref:this.headerRef,extraClassName:"fc-header-toolbar",model:n.header,titleId:l},i)),Xt(hs,{liquid:o,height:s,aspectRatio:e,labeledById:l},this.renderView(t),this.buildAppendContent()),n.footer&&Xt(fs,Object.assign({ref:this.footerRef,extraClassName:"fc-footer-toolbar",model:n.footer,titleId:""},i)))}componentDidMount(){let{props:e}=this;this.calendarInteractions=e.pluginHooks.calendarInteractions.map(t=>new t(e)),window.addEventListener("resize",this.handleWindowResize);let{propSetHandlers:t}=e.pluginHooks;for(let n in t)t[n](e[n],e)}componentDidUpdate(e){let{props:t}=this,{propSetHandlers:n}=t.pluginHooks;for(let r in n)t[r]!==e[r]&&n[r](t[r],t)}componentWillUnmount(){window.removeEventListener("resize",this.handleWindowResize),this.resizeRunner.clear();for(let e of this.calendarInteractions)e.destroy();this.props.emitter.trigger("_unmount")}buildAppendContent(){let{props:e}=this;return Xt(tn,{},...e.pluginHooks.viewContainerAppends.map(t=>t(e)))}renderView(e){let{pluginHooks:t}=e,{viewSpec:n}=e,r={dateProfile:e.dateProfile,businessHours:e.businessHours,eventStore:e.renderableEventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,isHeightAuto:e.isHeightAuto,forPrint:e.forPrint},i=this.buildViewPropTransformers(t.viewPropsTransformers);for(let t of i)Object.assign(r,t.transform(r,e));return Xt(n.component,Object.assign({},r))}}function vs(e,t,n,r,i,o){let s=n.build(i,void 0,!1),a=n.buildPrev(t,r,!1),l=n.buildNext(t,r,!1);return{title:o,activeButton:e.type,navUnit:e.singleUnit,isTodayEnabled:s.isValid&&!_t(t.currentRange,i),isPrevEnabled:a.isValid,isNextEnabled:l.isValid}}function As(e){return e.map(e=>new e)}function bs(e){let t=Eo(e.locale||"en",_o([]).map);return new $r(Object.assign(Object.assign({timeZone:ke.timeZone,calendarSystem:"gregory"},e),{locale:t}))}return e.Calendar=class extends mo{constructor(e,t={}){super(),this.isRendering=!1,this.isRendered=!1,this.currentClassNames=[],this.customContentRenderId=0,this.handleAction=e=>{switch(e.type){case"SET_EVENT_DRAG":case"SET_EVENT_RESIZE":this.renderRunner.tryDrain()}},this.handleData=e=>{this.currentData=e,this.renderRunner.request(e.calendarOptions.rerenderDelay)},this.handleRenderRequest=()=>{if(this.isRendering){this.isRendered=!0;let{currentData:e}=this;ar(()=>{En(Xt(si,{options:e.calendarOptions,theme:e.theme,emitter:e.emitter},(t,n,r,i)=>(this.setClassNames(t),this.setHeight(n),Xt(hi.Provider,{value:this.customContentRenderId},Xt(ms,Object.assign({isHeightAuto:r,forPrint:i},e))))),this.el)})}else this.isRendered&&(this.isRendered=!1,En(null,this.el),this.setClassNames([]),this.setHeight(""))},this.el=e,this.renderRunner=new Ni(this.handleRenderRequest),new es({optionOverrides:t,calendarApi:this,onAction:this.handleAction,onData:this.handleData})}render(){let e=this.isRendering;e?this.customContentRenderId+=1:this.isRendering=!0,this.renderRunner.request(),e&&this.updateSize()}destroy(){this.isRendering&&(this.isRendering=!1,this.renderRunner.request())}updateSize(){ar(()=>{super.updateSize()})}batchRendering(e){this.renderRunner.pause("batchRendering"),e(),this.renderRunner.resume("batchRendering")}pauseRendering(){this.renderRunner.pause("pauseRendering")}resumeRendering(){this.renderRunner.resume("pauseRendering",!0)}resetOptions(e,t){this.currentDataManager.resetOptions(e,t)}setClassNames(e){if(!ue(e,this.currentClassNames)){let{classList:t}=this.el;for(let e of this.currentClassNames)t.remove(e);for(let n of e)t.add(n);this.currentClassNames=e}}setHeight(e){a(this.el,"height",e)}},e.Internal=vo,e.JsonRequestError=Ii,e.Preact=ur,e.createPlugin=Co,e.formatDate=function(e,t={}){let n=bs(t),r=Se(t),i=n.createMarkerMeta(e);return i?n.format(i.marker,r,{forcedTzo:i.forcedTzo}):""},e.formatRange=function(e,t,n){let r=bs("object"==typeof n&&n?n:{}),i=Se(n),o=r.createMarkerMeta(e),s=r.createMarkerMeta(t);return o&&s?r.formatRange(o.marker,s.marker,i,{forcedStartTzo:o.forcedTzo,forcedEndTzo:s.forcedTzo,isEndExclusive:n.isEndExclusive,defaultSeparator:ke.defaultRangeSeparator}):""},e.globalLocales=Ao,e.globalPlugins=$o,e.sliceEvents=function(e,t){return xr(e.eventStore,e.eventUiBases,e.dateProfile.activeRange,t?e.nextDayThreshold:null).fg},e.version="6.0.3",Object.defineProperty(e,"__esModule",{value:!0}),e}({}); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales-all.global.js b/library/fullcalendar/packages/core/locales-all.global.js
new file mode 100644
index 000000000..5333ce07d
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales-all.global.js
@@ -0,0 +1,1794 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var l0 = {
+ code: 'af',
+ week: {
+ dow: 1,
+ doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+ },
+ buttonText: {
+ prev: 'Vorige',
+ next: 'Volgende',
+ today: 'Vandag',
+ year: 'Jaar',
+ month: 'Maand',
+ week: 'Week',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ allDayText: 'Heeldag',
+ moreLinkText: 'Addisionele',
+ noEventsText: 'Daar is geen gebeurtenisse nie',
+ };
+
+ var l1 = {
+ code: 'ar-dz',
+ week: {
+ dow: 0,
+ doy: 4, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ var l2 = {
+ code: 'ar-kw',
+ week: {
+ dow: 0,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ var l3 = {
+ code: 'ar-ly',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ var l4 = {
+ code: 'ar-ma',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ var l5 = {
+ code: 'ar-sa',
+ week: {
+ dow: 0,
+ doy: 6, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ var l6 = {
+ code: 'ar-tn',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ var l7 = {
+ code: 'ar',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ var l8 = {
+ code: 'az',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Əvvəl',
+ next: 'Sonra',
+ today: 'Bu Gün',
+ month: 'Ay',
+ week: 'Həftə',
+ day: 'Gün',
+ list: 'Gündəm',
+ },
+ weekText: 'Həftə',
+ allDayText: 'Bütün Gün',
+ moreLinkText(n) {
+ return '+ daha çox ' + n;
+ },
+ noEventsText: 'Göstərmək üçün hadisə yoxdur',
+ };
+
+ var l9 = {
+ code: 'bg',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'назад',
+ next: 'напред',
+ today: 'днес',
+ month: 'Месец',
+ week: 'Седмица',
+ day: 'Ден',
+ list: 'График',
+ },
+ allDayText: 'Цял ден',
+ moreLinkText(n) {
+ return '+още ' + n;
+ },
+ noEventsText: 'Няма събития за показване',
+ };
+
+ var l10 = {
+ code: 'bn',
+ week: {
+ dow: 0,
+ doy: 6, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'পেছনে',
+ next: 'সামনে',
+ today: 'আজ',
+ month: 'মাস',
+ week: 'সপ্তাহ',
+ day: 'দিন',
+ list: 'তালিকা',
+ },
+ weekText: 'সপ্তাহ',
+ allDayText: 'সারাদিন',
+ moreLinkText(n) {
+ return '+অন্যান্য ' + n;
+ },
+ noEventsText: 'কোনো ইভেন্ট নেই',
+ };
+
+ var l11 = {
+ code: 'bs',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prošli',
+ next: 'Sljedeći',
+ today: 'Danas',
+ month: 'Mjesec',
+ week: 'Sedmica',
+ day: 'Dan',
+ list: 'Raspored',
+ },
+ weekText: 'Sed',
+ allDayText: 'Cijeli dan',
+ moreLinkText(n) {
+ return '+ još ' + n;
+ },
+ noEventsText: 'Nema događaja za prikazivanje',
+ };
+
+ var l12 = {
+ code: 'ca',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Anterior',
+ next: 'Següent',
+ today: 'Avui',
+ month: 'Mes',
+ week: 'Setmana',
+ day: 'Dia',
+ list: 'Agenda',
+ },
+ weekText: 'Set',
+ allDayText: 'Tot el dia',
+ moreLinkText: 'més',
+ noEventsText: 'No hi ha esdeveniments per mostrar',
+ };
+
+ var l13 = {
+ code: 'cs',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Dříve',
+ next: 'Později',
+ today: 'Nyní',
+ month: 'Měsíc',
+ week: 'Týden',
+ day: 'Den',
+ list: 'Agenda',
+ },
+ weekText: 'Týd',
+ allDayText: 'Celý den',
+ moreLinkText(n) {
+ return '+další: ' + n;
+ },
+ noEventsText: 'Žádné akce k zobrazení',
+ };
+
+ var l14 = {
+ code: 'cy',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Blaenorol',
+ next: 'Nesaf',
+ today: 'Heddiw',
+ year: 'Blwyddyn',
+ month: 'Mis',
+ week: 'Wythnos',
+ day: 'Dydd',
+ list: 'Rhestr',
+ },
+ weekText: 'Wythnos',
+ allDayText: 'Trwy\'r dydd',
+ moreLinkText: 'Mwy',
+ noEventsText: 'Dim digwyddiadau',
+ };
+
+ var l15 = {
+ code: 'da',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Forrige',
+ next: 'Næste',
+ today: 'I dag',
+ month: 'Måned',
+ week: 'Uge',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ weekText: 'Uge',
+ allDayText: 'Hele dagen',
+ moreLinkText: 'flere',
+ noEventsText: 'Ingen arrangementer at vise',
+ };
+
+ function affix$1(buttonText) {
+ return (buttonText === 'Tag' || buttonText === 'Monat') ? 'r' :
+ buttonText === 'Jahr' ? 's' : '';
+ }
+ var l16 = {
+ code: 'de-at',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Zurück',
+ next: 'Vor',
+ today: 'Heute',
+ year: 'Jahr',
+ month: 'Monat',
+ week: 'Woche',
+ day: 'Tag',
+ list: 'Terminübersicht',
+ },
+ weekText: 'KW',
+ weekTextLong: 'Woche',
+ allDayText: 'Ganztägig',
+ moreLinkText(n) {
+ return '+ weitere ' + n;
+ },
+ noEventsText: 'Keine Ereignisse anzuzeigen',
+ buttonHints: {
+ prev(buttonText) {
+ return `Vorherige${affix$1(buttonText)} ${buttonText}`;
+ },
+ next(buttonText) {
+ return `Nächste${affix$1(buttonText)} ${buttonText}`;
+ },
+ today(buttonText) {
+ // → Heute, Diese Woche, Dieser Monat, Dieses Jahr
+ if (buttonText === 'Tag') {
+ return 'Heute';
+ }
+ return `Diese${affix$1(buttonText)} ${buttonText}`;
+ },
+ },
+ viewHint(buttonText) {
+ // → Tagesansicht, Wochenansicht, Monatsansicht, Jahresansicht
+ const glue = buttonText === 'Woche' ? 'n' : buttonText === 'Monat' ? 's' : 'es';
+ return buttonText + glue + 'ansicht';
+ },
+ navLinkHint: 'Gehe zu $0',
+ moreLinkHint(eventCnt) {
+ return 'Zeige ' + (eventCnt === 1 ?
+ 'ein weiteres Ereignis' :
+ eventCnt + ' weitere Ereignisse');
+ },
+ closeHint: 'Schließen',
+ timeHint: 'Uhrzeit',
+ eventHint: 'Ereignis',
+ };
+
+ function affix(buttonText) {
+ return (buttonText === 'Tag' || buttonText === 'Monat') ? 'r' :
+ buttonText === 'Jahr' ? 's' : '';
+ }
+ var l17 = {
+ code: 'de',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Zurück',
+ next: 'Vor',
+ today: 'Heute',
+ year: 'Jahr',
+ month: 'Monat',
+ week: 'Woche',
+ day: 'Tag',
+ list: 'Terminübersicht',
+ },
+ weekText: 'KW',
+ weekTextLong: 'Woche',
+ allDayText: 'Ganztägig',
+ moreLinkText(n) {
+ return '+ weitere ' + n;
+ },
+ noEventsText: 'Keine Ereignisse anzuzeigen',
+ buttonHints: {
+ prev(buttonText) {
+ return `Vorherige${affix(buttonText)} ${buttonText}`;
+ },
+ next(buttonText) {
+ return `Nächste${affix(buttonText)} ${buttonText}`;
+ },
+ today(buttonText) {
+ // → Heute, Diese Woche, Dieser Monat, Dieses Jahr
+ if (buttonText === 'Tag') {
+ return 'Heute';
+ }
+ return `Diese${affix(buttonText)} ${buttonText}`;
+ },
+ },
+ viewHint(buttonText) {
+ // → Tagesansicht, Wochenansicht, Monatsansicht, Jahresansicht
+ const glue = buttonText === 'Woche' ? 'n' : buttonText === 'Monat' ? 's' : 'es';
+ return buttonText + glue + 'ansicht';
+ },
+ navLinkHint: 'Gehe zu $0',
+ moreLinkHint(eventCnt) {
+ return 'Zeige ' + (eventCnt === 1 ?
+ 'ein weiteres Ereignis' :
+ eventCnt + ' weitere Ereignisse');
+ },
+ closeHint: 'Schließen',
+ timeHint: 'Uhrzeit',
+ eventHint: 'Ereignis',
+ };
+
+ var l18 = {
+ code: 'el',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Προηγούμενος',
+ next: 'Επόμενος',
+ today: 'Σήμερα',
+ month: 'Μήνας',
+ week: 'Εβδομάδα',
+ day: 'Ημέρα',
+ list: 'Ατζέντα',
+ },
+ weekText: 'Εβδ',
+ allDayText: 'Ολοήμερο',
+ moreLinkText: 'περισσότερα',
+ noEventsText: 'Δεν υπάρχουν γεγονότα προς εμφάνιση',
+ };
+
+ var l19 = {
+ code: 'en-au',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonHints: {
+ prev: 'Previous $0',
+ next: 'Next $0',
+ today: 'This $0',
+ },
+ viewHint: '$0 view',
+ navLinkHint: 'Go to $0',
+ moreLinkHint(eventCnt) {
+ return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
+ },
+ };
+
+ var l20 = {
+ code: 'en-gb',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonHints: {
+ prev: 'Previous $0',
+ next: 'Next $0',
+ today: 'This $0',
+ },
+ viewHint: '$0 view',
+ navLinkHint: 'Go to $0',
+ moreLinkHint(eventCnt) {
+ return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
+ },
+ };
+
+ var l21 = {
+ code: 'en-nz',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonHints: {
+ prev: 'Previous $0',
+ next: 'Next $0',
+ today: 'This $0',
+ },
+ viewHint: '$0 view',
+ navLinkHint: 'Go to $0',
+ moreLinkHint(eventCnt) {
+ return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
+ },
+ };
+
+ var l22 = {
+ code: 'eo',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Antaŭa',
+ next: 'Sekva',
+ today: 'Hodiaŭ',
+ month: 'Monato',
+ week: 'Semajno',
+ day: 'Tago',
+ list: 'Tagordo',
+ },
+ weekText: 'Sm',
+ allDayText: 'Tuta tago',
+ moreLinkText: 'pli',
+ noEventsText: 'Neniuj eventoj por montri',
+ };
+
+ var l23 = {
+ code: 'es',
+ week: {
+ dow: 0,
+ doy: 6, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Ant',
+ next: 'Sig',
+ today: 'Hoy',
+ month: 'Mes',
+ week: 'Semana',
+ day: 'Día',
+ list: 'Agenda',
+ },
+ weekText: 'Sm',
+ allDayText: 'Todo el día',
+ moreLinkText: 'más',
+ noEventsText: 'No hay eventos para mostrar',
+ };
+
+ var l24 = {
+ code: 'es',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Ant',
+ next: 'Sig',
+ today: 'Hoy',
+ month: 'Mes',
+ week: 'Semana',
+ day: 'Día',
+ list: 'Agenda',
+ },
+ buttonHints: {
+ prev: '$0 antes',
+ next: '$0 siguiente',
+ today(buttonText) {
+ return (buttonText === 'Día') ? 'Hoy' :
+ ((buttonText === 'Semana') ? 'Esta' : 'Este') + ' ' + buttonText.toLocaleLowerCase();
+ },
+ },
+ viewHint(buttonText) {
+ return 'Vista ' + (buttonText === 'Semana' ? 'de la' : 'del') + ' ' + buttonText.toLocaleLowerCase();
+ },
+ weekText: 'Sm',
+ weekTextLong: 'Semana',
+ allDayText: 'Todo el día',
+ moreLinkText: 'más',
+ moreLinkHint(eventCnt) {
+ return `Mostrar ${eventCnt} eventos más`;
+ },
+ noEventsText: 'No hay eventos para mostrar',
+ navLinkHint: 'Ir al $0',
+ closeHint: 'Cerrar',
+ timeHint: 'La hora',
+ eventHint: 'Evento',
+ };
+
+ var l25 = {
+ code: 'et',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Eelnev',
+ next: 'Järgnev',
+ today: 'Täna',
+ month: 'Kuu',
+ week: 'Nädal',
+ day: 'Päev',
+ list: 'Päevakord',
+ },
+ weekText: 'näd',
+ allDayText: 'Kogu päev',
+ moreLinkText(n) {
+ return '+ veel ' + n;
+ },
+ noEventsText: 'Kuvamiseks puuduvad sündmused',
+ };
+
+ var l26 = {
+ code: 'eu',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Aur',
+ next: 'Hur',
+ today: 'Gaur',
+ month: 'Hilabetea',
+ week: 'Astea',
+ day: 'Eguna',
+ list: 'Agenda',
+ },
+ weekText: 'As',
+ allDayText: 'Egun osoa',
+ moreLinkText: 'gehiago',
+ noEventsText: 'Ez dago ekitaldirik erakusteko',
+ };
+
+ var l27 = {
+ code: 'fa',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'قبلی',
+ next: 'بعدی',
+ today: 'امروز',
+ month: 'ماه',
+ week: 'هفته',
+ day: 'روز',
+ list: 'برنامه',
+ },
+ weekText: 'هف',
+ allDayText: 'تمام روز',
+ moreLinkText(n) {
+ return 'بیش از ' + n;
+ },
+ noEventsText: 'هیچ رویدادی به نمایش',
+ };
+
+ var l28 = {
+ code: 'fi',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Edellinen',
+ next: 'Seuraava',
+ today: 'Tänään',
+ month: 'Kuukausi',
+ week: 'Viikko',
+ day: 'Päivä',
+ list: 'Tapahtumat',
+ },
+ weekText: 'Vk',
+ allDayText: 'Koko päivä',
+ moreLinkText: 'lisää',
+ noEventsText: 'Ei näytettäviä tapahtumia',
+ };
+
+ var l29 = {
+ code: 'fr',
+ buttonText: {
+ prev: 'Précédent',
+ next: 'Suivant',
+ today: 'Aujourd\'hui',
+ year: 'Année',
+ month: 'Mois',
+ week: 'Semaine',
+ day: 'Jour',
+ list: 'Mon planning',
+ },
+ weekText: 'Sem.',
+ allDayText: 'Toute la journée',
+ moreLinkText: 'en plus',
+ noEventsText: 'Aucun événement à afficher',
+ };
+
+ var l30 = {
+ code: 'fr-ch',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Précédent',
+ next: 'Suivant',
+ today: 'Courant',
+ year: 'Année',
+ month: 'Mois',
+ week: 'Semaine',
+ day: 'Jour',
+ list: 'Mon planning',
+ },
+ weekText: 'Sm',
+ allDayText: 'Toute la journée',
+ moreLinkText: 'en plus',
+ noEventsText: 'Aucun événement à afficher',
+ };
+
+ var l31 = {
+ code: 'fr',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Précédent',
+ next: 'Suivant',
+ today: 'Aujourd\'hui',
+ year: 'Année',
+ month: 'Mois',
+ week: 'Semaine',
+ day: 'Jour',
+ list: 'Planning',
+ },
+ weekText: 'Sem.',
+ allDayText: 'Toute la journée',
+ moreLinkText: 'en plus',
+ noEventsText: 'Aucun événement à afficher',
+ };
+
+ var l32 = {
+ code: 'gl',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Ant',
+ next: 'Seg',
+ today: 'Hoxe',
+ month: 'Mes',
+ week: 'Semana',
+ day: 'Día',
+ list: 'Axenda',
+ },
+ weekText: 'Sm',
+ allDayText: 'Todo o día',
+ moreLinkText: 'máis',
+ noEventsText: 'Non hai eventos para amosar',
+ };
+
+ var l33 = {
+ code: 'he',
+ direction: 'rtl',
+ buttonText: {
+ prev: 'הקודם',
+ next: 'הבא',
+ today: 'היום',
+ month: 'חודש',
+ week: 'שבוע',
+ day: 'יום',
+ list: 'סדר יום',
+ },
+ allDayText: 'כל היום',
+ moreLinkText: 'אחר',
+ noEventsText: 'אין אירועים להצגה',
+ weekText: 'שבוע',
+ };
+
+ var l34 = {
+ code: 'hi',
+ week: {
+ dow: 0,
+ doy: 6, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'पिछला',
+ next: 'अगला',
+ today: 'आज',
+ month: 'महीना',
+ week: 'सप्ताह',
+ day: 'दिन',
+ list: 'कार्यसूची',
+ },
+ weekText: 'हफ्ता',
+ allDayText: 'सभी दिन',
+ moreLinkText(n) {
+ return '+अधिक ' + n;
+ },
+ noEventsText: 'कोई घटनाओं को प्रदर्शित करने के लिए',
+ };
+
+ var l35 = {
+ code: 'hr',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prijašnji',
+ next: 'Sljedeći',
+ today: 'Danas',
+ month: 'Mjesec',
+ week: 'Tjedan',
+ day: 'Dan',
+ list: 'Raspored',
+ },
+ weekText: 'Tje',
+ allDayText: 'Cijeli dan',
+ moreLinkText(n) {
+ return '+ još ' + n;
+ },
+ noEventsText: 'Nema događaja za prikaz',
+ };
+
+ var l36 = {
+ code: 'hu',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'vissza',
+ next: 'előre',
+ today: 'ma',
+ month: 'Hónap',
+ week: 'Hét',
+ day: 'Nap',
+ list: 'Lista',
+ },
+ weekText: 'Hét',
+ allDayText: 'Egész nap',
+ moreLinkText: 'további',
+ noEventsText: 'Nincs megjeleníthető esemény',
+ };
+
+ var l37 = {
+ code: 'hy-am',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Նախորդ',
+ next: 'Հաջորդ',
+ today: 'Այսօր',
+ month: 'Ամիս',
+ week: 'Շաբաթ',
+ day: 'Օր',
+ list: 'Օրվա ցուցակ',
+ },
+ weekText: 'Շաբ',
+ allDayText: 'Ամբողջ օր',
+ moreLinkText(n) {
+ return '+ ևս ' + n;
+ },
+ noEventsText: 'Բացակայում է իրադարձությունը ցուցադրելու',
+ };
+
+ var l38 = {
+ code: 'id',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'mundur',
+ next: 'maju',
+ today: 'hari ini',
+ month: 'Bulan',
+ week: 'Minggu',
+ day: 'Hari',
+ list: 'Agenda',
+ },
+ weekText: 'Mg',
+ allDayText: 'Sehari penuh',
+ moreLinkText: 'lebih',
+ noEventsText: 'Tidak ada acara untuk ditampilkan',
+ };
+
+ var l39 = {
+ code: 'is',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Fyrri',
+ next: 'Næsti',
+ today: 'Í dag',
+ month: 'Mánuður',
+ week: 'Vika',
+ day: 'Dagur',
+ list: 'Dagskrá',
+ },
+ weekText: 'Vika',
+ allDayText: 'Allan daginn',
+ moreLinkText: 'meira',
+ noEventsText: 'Engir viðburðir til að sýna',
+ };
+
+ var l40 = {
+ code: 'it',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prec',
+ next: 'Succ',
+ today: 'Oggi',
+ month: 'Mese',
+ week: 'Settimana',
+ day: 'Giorno',
+ list: 'Agenda',
+ },
+ weekText: 'Sm',
+ allDayText: 'Tutto il giorno',
+ moreLinkText(n) {
+ return '+altri ' + n;
+ },
+ noEventsText: 'Non ci sono eventi da visualizzare',
+ };
+
+ var l41 = {
+ code: 'ja',
+ buttonText: {
+ prev: '前',
+ next: '次',
+ today: '今日',
+ month: '月',
+ week: '週',
+ day: '日',
+ list: '予定リスト',
+ },
+ weekText: '週',
+ allDayText: '終日',
+ moreLinkText(n) {
+ return '他 ' + n + ' 件';
+ },
+ noEventsText: '表示する予定はありません',
+ };
+
+ var l42 = {
+ code: 'ka',
+ week: {
+ dow: 1,
+ doy: 7,
+ },
+ buttonText: {
+ prev: 'წინა',
+ next: 'შემდეგი',
+ today: 'დღეს',
+ month: 'თვე',
+ week: 'კვირა',
+ day: 'დღე',
+ list: 'დღის წესრიგი',
+ },
+ weekText: 'კვ',
+ allDayText: 'მთელი დღე',
+ moreLinkText(n) {
+ return '+ კიდევ ' + n;
+ },
+ noEventsText: 'ღონისძიებები არ არის',
+ };
+
+ var l43 = {
+ code: 'kk',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Алдыңғы',
+ next: 'Келесі',
+ today: 'Бүгін',
+ month: 'Ай',
+ week: 'Апта',
+ day: 'Күн',
+ list: 'Күн тәртібі',
+ },
+ weekText: 'Не',
+ allDayText: 'Күні бойы',
+ moreLinkText(n) {
+ return '+ тағы ' + n;
+ },
+ noEventsText: 'Көрсету үшін оқиғалар жоқ',
+ };
+
+ var l44 = {
+ code: 'km',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'មុន',
+ next: 'បន្ទាប់',
+ today: 'ថ្ងៃនេះ',
+ year: 'ឆ្នាំ',
+ month: 'ខែ',
+ week: 'សប្តាហ៍',
+ day: 'ថ្ងៃ',
+ list: 'បញ្ជី',
+ },
+ weekText: 'សប្តាហ៍',
+ allDayText: 'ពេញមួយថ្ងៃ',
+ moreLinkText: 'ច្រើនទៀត',
+ noEventsText: 'គ្មានព្រឹត្តិការណ៍ត្រូវបង្ហាញ',
+ };
+
+ var l45 = {
+ code: 'ko',
+ buttonText: {
+ prev: '이전달',
+ next: '다음달',
+ today: '오늘',
+ month: '월',
+ week: '주',
+ day: '일',
+ list: '일정목록',
+ },
+ weekText: '주',
+ allDayText: '종일',
+ moreLinkText: '개',
+ noEventsText: '일정이 없습니다',
+ };
+
+ var l46 = {
+ code: 'ku',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'پێشتر',
+ next: 'دواتر',
+ today: 'ئەمڕو',
+ month: 'مانگ',
+ week: 'هەفتە',
+ day: 'ڕۆژ',
+ list: 'بەرنامە',
+ },
+ weekText: 'هەفتە',
+ allDayText: 'هەموو ڕۆژەکە',
+ moreLinkText: 'زیاتر',
+ noEventsText: 'هیچ ڕووداوێك نیە',
+ };
+
+ var l47 = {
+ code: 'lb',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Zréck',
+ next: 'Weider',
+ today: 'Haut',
+ month: 'Mount',
+ week: 'Woch',
+ day: 'Dag',
+ list: 'Terminiwwersiicht',
+ },
+ weekText: 'W',
+ allDayText: 'Ganzen Dag',
+ moreLinkText: 'méi',
+ noEventsText: 'Nee Evenementer ze affichéieren',
+ };
+
+ var l48 = {
+ code: 'lt',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Atgal',
+ next: 'Pirmyn',
+ today: 'Šiandien',
+ month: 'Mėnuo',
+ week: 'Savaitė',
+ day: 'Diena',
+ list: 'Darbotvarkė',
+ },
+ weekText: 'SAV',
+ allDayText: 'Visą dieną',
+ moreLinkText: 'daugiau',
+ noEventsText: 'Nėra įvykių rodyti',
+ };
+
+ var l49 = {
+ code: 'lv',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Iepr.',
+ next: 'Nāk.',
+ today: 'Šodien',
+ month: 'Mēnesis',
+ week: 'Nedēļa',
+ day: 'Diena',
+ list: 'Dienas kārtība',
+ },
+ weekText: 'Ned.',
+ allDayText: 'Visu dienu',
+ moreLinkText(n) {
+ return '+vēl ' + n;
+ },
+ noEventsText: 'Nav notikumu',
+ };
+
+ var l50 = {
+ code: 'mk',
+ buttonText: {
+ prev: 'претходно',
+ next: 'следно',
+ today: 'Денес',
+ month: 'Месец',
+ week: 'Недела',
+ day: 'Ден',
+ list: 'График',
+ },
+ weekText: 'Сед',
+ allDayText: 'Цел ден',
+ moreLinkText(n) {
+ return '+повеќе ' + n;
+ },
+ noEventsText: 'Нема настани за прикажување',
+ };
+
+ var l51 = {
+ code: 'ms',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Sebelum',
+ next: 'Selepas',
+ today: 'hari ini',
+ month: 'Bulan',
+ week: 'Minggu',
+ day: 'Hari',
+ list: 'Agenda',
+ },
+ weekText: 'Mg',
+ allDayText: 'Sepanjang hari',
+ moreLinkText(n) {
+ return 'masih ada ' + n + ' acara';
+ },
+ noEventsText: 'Tiada peristiwa untuk dipaparkan',
+ };
+
+ var l52 = {
+ code: 'nb',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Forrige',
+ next: 'Neste',
+ today: 'I dag',
+ month: 'Måned',
+ week: 'Uke',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ weekText: 'Uke',
+ weekTextLong: 'Uke',
+ allDayText: 'Hele dagen',
+ moreLinkText: 'til',
+ noEventsText: 'Ingen hendelser å vise',
+ buttonHints: {
+ prev: 'Forrige $0',
+ next: 'Neste $0',
+ today: 'Nåværende $0',
+ },
+ viewHint: '$0 visning',
+ navLinkHint: 'Gå til $0',
+ moreLinkHint(eventCnt) {
+ return `Vis ${eventCnt} flere hendelse${eventCnt === 1 ? '' : 'r'}`;
+ },
+ };
+
+ var l53 = {
+ code: 'ne',
+ week: {
+ dow: 7,
+ doy: 1, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'अघिल्लो',
+ next: 'अर्को',
+ today: 'आज',
+ month: 'महिना',
+ week: 'हप्ता',
+ day: 'दिन',
+ list: 'सूची',
+ },
+ weekText: 'हप्ता',
+ allDayText: 'दिनभरि',
+ moreLinkText: 'थप लिंक',
+ noEventsText: 'देखाउनको लागि कुनै घटनाहरू छैनन्',
+ };
+
+ var l54 = {
+ code: 'nl',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Vorige',
+ next: 'Volgende',
+ today: 'Vandaag',
+ year: 'Jaar',
+ month: 'Maand',
+ week: 'Week',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ allDayText: 'Hele dag',
+ moreLinkText: 'extra',
+ noEventsText: 'Geen evenementen om te laten zien',
+ };
+
+ var l55 = {
+ code: 'nn',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Førre',
+ next: 'Neste',
+ today: 'I dag',
+ month: 'Månad',
+ week: 'Veke',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ weekText: 'Veke',
+ allDayText: 'Heile dagen',
+ moreLinkText: 'til',
+ noEventsText: 'Ingen hendelser å vise',
+ };
+
+ var l56 = {
+ code: 'pl',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Poprzedni',
+ next: 'Następny',
+ today: 'Dziś',
+ month: 'Miesiąc',
+ week: 'Tydzień',
+ day: 'Dzień',
+ list: 'Plan dnia',
+ },
+ weekText: 'Tydz',
+ allDayText: 'Cały dzień',
+ moreLinkText: 'więcej',
+ noEventsText: 'Brak wydarzeń do wyświetlenia',
+ };
+
+ var l57 = {
+ code: 'pt-br',
+ buttonText: {
+ prev: 'Anterior',
+ next: 'Próximo',
+ today: 'Hoje',
+ month: 'Mês',
+ week: 'Semana',
+ day: 'Dia',
+ list: 'Lista',
+ },
+ weekText: 'Sm',
+ allDayText: 'dia inteiro',
+ moreLinkText(n) {
+ return 'mais +' + n;
+ },
+ noEventsText: 'Não há eventos para mostrar',
+ };
+
+ var l58 = {
+ code: 'pt',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Anterior',
+ next: 'Seguinte',
+ today: 'Hoje',
+ month: 'Mês',
+ week: 'Semana',
+ day: 'Dia',
+ list: 'Agenda',
+ },
+ weekText: 'Sem',
+ allDayText: 'Todo o dia',
+ moreLinkText: 'mais',
+ noEventsText: 'Não há eventos para mostrar',
+ };
+
+ var l59 = {
+ code: 'ro',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'precedentă',
+ next: 'următoare',
+ today: 'Azi',
+ month: 'Lună',
+ week: 'Săptămână',
+ day: 'Zi',
+ list: 'Agendă',
+ },
+ weekText: 'Săpt',
+ allDayText: 'Toată ziua',
+ moreLinkText(n) {
+ return '+alte ' + n;
+ },
+ noEventsText: 'Nu există evenimente de afișat',
+ };
+
+ var l60 = {
+ code: 'ru',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Пред',
+ next: 'След',
+ today: 'Сегодня',
+ month: 'Месяц',
+ week: 'Неделя',
+ day: 'День',
+ list: 'Повестка дня',
+ },
+ weekText: 'Нед',
+ allDayText: 'Весь день',
+ moreLinkText(n) {
+ return '+ ещё ' + n;
+ },
+ noEventsText: 'Нет событий для отображения',
+ };
+
+ var l61 = {
+ code: 'si-lk',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'පෙර',
+ next: 'පසු',
+ today: 'අද',
+ month: 'මාසය',
+ week: 'සතිය',
+ day: 'දවස',
+ list: 'ලැයිස්තුව',
+ },
+ weekText: 'සති',
+ allDayText: 'සියලු',
+ moreLinkText: 'තවත්',
+ noEventsText: 'මුකුත් නැත',
+ };
+
+ var l62 = {
+ code: 'sk',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Predchádzajúci',
+ next: 'Nasledujúci',
+ today: 'Dnes',
+ month: 'Mesiac',
+ week: 'Týždeň',
+ day: 'Deň',
+ list: 'Rozvrh',
+ },
+ weekText: 'Ty',
+ allDayText: 'Celý deň',
+ moreLinkText(n) {
+ return '+ďalšie: ' + n;
+ },
+ noEventsText: 'Žiadne akcie na zobrazenie',
+ };
+
+ var l63 = {
+ code: 'sl',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prejšnji',
+ next: 'Naslednji',
+ today: 'Trenutni',
+ month: 'Mesec',
+ week: 'Teden',
+ day: 'Dan',
+ list: 'Dnevni red',
+ },
+ weekText: 'Teden',
+ allDayText: 'Ves dan',
+ moreLinkText: 'več',
+ noEventsText: 'Ni dogodkov za prikaz',
+ };
+
+ var l64 = {
+ code: 'sm',
+ buttonText: {
+ prev: 'Talu ai',
+ next: 'Mulimuli atu',
+ today: 'Aso nei',
+ month: 'Masina',
+ week: 'Vaiaso',
+ day: 'Aso',
+ list: 'Faasologa',
+ },
+ weekText: 'Vaiaso',
+ allDayText: 'Aso atoa',
+ moreLinkText: 'sili atu',
+ noEventsText: 'Leai ni mea na tutupu',
+ };
+
+ var l65 = {
+ code: 'sq',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'mbrapa',
+ next: 'Përpara',
+ today: 'sot',
+ month: 'Muaj',
+ week: 'Javë',
+ day: 'Ditë',
+ list: 'Listë',
+ },
+ weekText: 'Ja',
+ allDayText: 'Gjithë ditën',
+ moreLinkText(n) {
+ return '+më tepër ' + n;
+ },
+ noEventsText: 'Nuk ka evente për të shfaqur',
+ };
+
+ var l66 = {
+ code: 'sr-cyrl',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Претходна',
+ next: 'следећи',
+ today: 'Данас',
+ month: 'Месец',
+ week: 'Недеља',
+ day: 'Дан',
+ list: 'Планер',
+ },
+ weekText: 'Сед',
+ allDayText: 'Цео дан',
+ moreLinkText(n) {
+ return '+ још ' + n;
+ },
+ noEventsText: 'Нема догађаја за приказ',
+ };
+
+ var l67 = {
+ code: 'sr',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prethodna',
+ next: 'Sledeći',
+ today: 'Danas',
+ month: 'Mеsеc',
+ week: 'Nеdеlja',
+ day: 'Dan',
+ list: 'Planеr',
+ },
+ weekText: 'Sed',
+ allDayText: 'Cеo dan',
+ moreLinkText(n) {
+ return '+ još ' + n;
+ },
+ noEventsText: 'Nеma događaja za prikaz',
+ };
+
+ var l68 = {
+ code: 'sv',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Förra',
+ next: 'Nästa',
+ today: 'Idag',
+ month: 'Månad',
+ week: 'Vecka',
+ day: 'Dag',
+ list: 'Program',
+ },
+ buttonHints: {
+ prev(buttonText) {
+ return `Föregående ${buttonText.toLocaleLowerCase()}`;
+ },
+ next(buttonText) {
+ return `Nästa ${buttonText.toLocaleLowerCase()}`;
+ },
+ today(buttonText) {
+ return (buttonText === 'Program' ? 'Detta' : 'Denna') + ' ' + buttonText.toLocaleLowerCase();
+ },
+ },
+ viewHint: '$0 vy',
+ navLinkHint: 'Gå till $0',
+ moreLinkHint(eventCnt) {
+ return `Visa ytterligare ${eventCnt} händelse${eventCnt === 1 ? '' : 'r'}`;
+ },
+ weekText: 'v.',
+ weekTextLong: 'Vecka',
+ allDayText: 'Heldag',
+ moreLinkText: 'till',
+ noEventsText: 'Inga händelser att visa',
+ closeHint: 'Stäng',
+ timeHint: 'Klockan',
+ eventHint: 'Händelse',
+ };
+
+ var l69 = {
+ code: 'ta-in',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'முந்தைய',
+ next: 'அடுத்தது',
+ today: 'இன்று',
+ month: 'மாதம்',
+ week: 'வாரம்',
+ day: 'நாள்',
+ list: 'தினசரி அட்டவணை',
+ },
+ weekText: 'வாரம்',
+ allDayText: 'நாள் முழுவதும்',
+ moreLinkText(n) {
+ return '+ மேலும் ' + n;
+ },
+ noEventsText: 'காண்பிக்க நிகழ்வுகள் இல்லை',
+ };
+
+ var l70 = {
+ code: 'th',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'ก่อนหน้า',
+ next: 'ถัดไป',
+ prevYear: 'ปีก่อนหน้า',
+ nextYear: 'ปีถัดไป',
+ year: 'ปี',
+ today: 'วันนี้',
+ month: 'เดือน',
+ week: 'สัปดาห์',
+ day: 'วัน',
+ list: 'กำหนดการ',
+ },
+ weekText: 'สัปดาห์',
+ allDayText: 'ตลอดวัน',
+ moreLinkText: 'เพิ่มเติม',
+ noEventsText: 'ไม่มีกิจกรรมที่จะแสดง',
+ };
+
+ var l71 = {
+ code: 'tr',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'geri',
+ next: 'ileri',
+ today: 'bugün',
+ month: 'Ay',
+ week: 'Hafta',
+ day: 'Gün',
+ list: 'Ajanda',
+ },
+ weekText: 'Hf',
+ allDayText: 'Tüm gün',
+ moreLinkText: 'daha fazla',
+ noEventsText: 'Gösterilecek etkinlik yok',
+ };
+
+ var l72 = {
+ code: 'ug',
+ buttonText: {
+ month: 'ئاي',
+ week: 'ھەپتە',
+ day: 'كۈن',
+ list: 'كۈنتەرتىپ',
+ },
+ allDayText: 'پۈتۈن كۈن',
+ };
+
+ var l73 = {
+ code: 'uk',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Попередній',
+ next: 'далі',
+ today: 'Сьогодні',
+ month: 'Місяць',
+ week: 'Тиждень',
+ day: 'День',
+ list: 'Порядок денний',
+ },
+ weekText: 'Тиж',
+ allDayText: 'Увесь день',
+ moreLinkText(n) {
+ return '+ще ' + n + '...';
+ },
+ noEventsText: 'Немає подій для відображення',
+ };
+
+ var l74 = {
+ code: 'uz',
+ buttonText: {
+ month: 'Oy',
+ week: 'Xafta',
+ day: 'Kun',
+ list: 'Kun tartibi',
+ },
+ allDayText: 'Kun bo\'yi',
+ moreLinkText(n) {
+ return '+ yana ' + n;
+ },
+ noEventsText: 'Ko\'rsatish uchun voqealar yo\'q',
+ };
+
+ var l75 = {
+ code: 'vi',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Trước',
+ next: 'Tiếp',
+ today: 'Hôm nay',
+ month: 'Tháng',
+ week: 'Tuần',
+ day: 'Ngày',
+ list: 'Lịch biểu',
+ },
+ weekText: 'Tu',
+ allDayText: 'Cả ngày',
+ moreLinkText(n) {
+ return '+ thêm ' + n;
+ },
+ noEventsText: 'Không có sự kiện để hiển thị',
+ };
+
+ var l76 = {
+ code: 'zh-cn',
+ week: {
+ // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: '上月',
+ next: '下月',
+ today: '今天',
+ month: '月',
+ week: '周',
+ day: '日',
+ list: '日程',
+ },
+ weekText: '周',
+ allDayText: '全天',
+ moreLinkText(n) {
+ return '另外 ' + n + ' 个';
+ },
+ noEventsText: '没有事件显示',
+ };
+
+ var l77 = {
+ code: 'zh-tw',
+ buttonText: {
+ prev: '上月',
+ next: '下月',
+ today: '今天',
+ month: '月',
+ week: '週',
+ day: '天',
+ list: '活動列表',
+ },
+ weekText: '周',
+ allDayText: '整天',
+ moreLinkText: '顯示更多',
+ noEventsText: '没有任何活動',
+ };
+
+ var localesAll = [
+ l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36, l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48, l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60, l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72, l73, l74, l75, l76, l77,
+ ];
+
+ index_js.globalLocales.push(...localesAll);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales-all.global.min.js b/library/fullcalendar/packages/core/locales-all.global.min.js
new file mode 100644
index 000000000..c195374bd
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales-all.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";function t(e){return"Tag"===e||"Monat"===e?"r":"Jahr"===e?"s":""}function n(e){return"Tag"===e||"Monat"===e?"r":"Jahr"===e?"s":""}var o=[{code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Heeldag",moreLinkText:"Addisionele",noEventsText:"Daar is geen gebeurtenisse nie"},{code:"ar-dz",week:{dow:0,doy:4},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-kw",week:{dow:0,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-ly",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-ma",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-sa",week:{dow:0,doy:6},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar-tn",week:{dow:1,doy:4},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"ar",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"},{code:"az",week:{dow:1,doy:4},buttonText:{prev:"Əvvəl",next:"Sonra",today:"Bu Gün",month:"Ay",week:"Həftə",day:"Gün",list:"Gündəm"},weekText:"Həftə",allDayText:"Bütün Gün",moreLinkText:e=>"+ daha çox "+e,noEventsText:"Göstərmək üçün hadisə yoxdur"},{code:"bg",week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",moreLinkText:e=>"+още "+e,noEventsText:"Няма събития за показване"},{code:"bn",week:{dow:0,doy:6},buttonText:{prev:"পেছনে",next:"সামনে",today:"আজ",month:"মাস",week:"সপ্তাহ",day:"দিন",list:"তালিকা"},weekText:"সপ্তাহ",allDayText:"সারাদিন",moreLinkText:e=>"+অন্যান্য "+e,noEventsText:"কোনো ইভেন্ট নেই"},{code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekText:"Sed",allDayText:"Cijeli dan",moreLinkText:e=>"+ još "+e,noEventsText:"Nema događaja za prikazivanje"},{code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekText:"Set",allDayText:"Tot el dia",moreLinkText:"més",noEventsText:"No hi ha esdeveniments per mostrar"},{code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekText:"Týd",allDayText:"Celý den",moreLinkText:e=>"+další: "+e,noEventsText:"Žádné akce k zobrazení"},{code:"cy",week:{dow:1,doy:4},buttonText:{prev:"Blaenorol",next:"Nesaf",today:"Heddiw",year:"Blwyddyn",month:"Mis",week:"Wythnos",day:"Dydd",list:"Rhestr"},weekText:"Wythnos",allDayText:"Trwy'r dydd",moreLinkText:"Mwy",noEventsText:"Dim digwyddiadau"},{code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekText:"Uge",allDayText:"Hele dagen",moreLinkText:"flere",noEventsText:"Ingen arrangementer at vise"},{code:"de-at",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekText:"KW",weekTextLong:"Woche",allDayText:"Ganztägig",moreLinkText:e=>"+ weitere "+e,noEventsText:"Keine Ereignisse anzuzeigen",buttonHints:{prev:e=>`Vorherige${t(e)} ${e}`,next:e=>`Nächste${t(e)} ${e}`,today:e=>"Tag"===e?"Heute":`Diese${t(e)} ${e}`},viewHint:e=>e+("Woche"===e?"n":"Monat"===e?"s":"es")+"ansicht",navLinkHint:"Gehe zu $0",moreLinkHint:e=>"Zeige "+(1===e?"ein weiteres Ereignis":e+" weitere Ereignisse"),closeHint:"Schließen",timeHint:"Uhrzeit",eventHint:"Ereignis"},{code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekText:"KW",weekTextLong:"Woche",allDayText:"Ganztägig",moreLinkText:e=>"+ weitere "+e,noEventsText:"Keine Ereignisse anzuzeigen",buttonHints:{prev:e=>`Vorherige${n(e)} ${e}`,next:e=>`Nächste${n(e)} ${e}`,today:e=>"Tag"===e?"Heute":`Diese${n(e)} ${e}`},viewHint:e=>e+("Woche"===e?"n":"Monat"===e?"s":"es")+"ansicht",navLinkHint:"Gehe zu $0",moreLinkHint:e=>"Zeige "+(1===e?"ein weiteres Ereignis":e+" weitere Ereignisse"),closeHint:"Schließen",timeHint:"Uhrzeit",eventHint:"Ereignis"},{code:"el",week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekText:"Εβδ",allDayText:"Ολοήμερο",moreLinkText:"περισσότερα",noEventsText:"Δεν υπάρχουν γεγονότα προς εμφάνιση"},{code:"en-au",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:e=>`Show ${e} more event${1===e?"":"s"}`},{code:"en-gb",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:e=>`Show ${e} more event${1===e?"":"s"}`},{code:"en-nz",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:e=>`Show ${e} more event${1===e?"":"s"}`},{code:"eo",week:{dow:1,doy:4},buttonText:{prev:"Antaŭa",next:"Sekva",today:"Hodiaŭ",month:"Monato",week:"Semajno",day:"Tago",list:"Tagordo"},weekText:"Sm",allDayText:"Tuta tago",moreLinkText:"pli",noEventsText:"Neniuj eventoj por montri"},{code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekText:"Sm",allDayText:"Todo el día",moreLinkText:"más",noEventsText:"No hay eventos para mostrar"},{code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},buttonHints:{prev:"$0 antes",next:"$0 siguiente",today:e=>"Día"===e?"Hoy":("Semana"===e?"Esta":"Este")+" "+e.toLocaleLowerCase()},viewHint:e=>"Vista "+("Semana"===e?"de la":"del")+" "+e.toLocaleLowerCase(),weekText:"Sm",weekTextLong:"Semana",allDayText:"Todo el día",moreLinkText:"más",moreLinkHint:e=>`Mostrar ${e} eventos más`,noEventsText:"No hay eventos para mostrar",navLinkHint:"Ir al $0",closeHint:"Cerrar",timeHint:"La hora",eventHint:"Evento"},{code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekText:"näd",allDayText:"Kogu päev",moreLinkText:e=>"+ veel "+e,noEventsText:"Kuvamiseks puuduvad sündmused"},{code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekText:"As",allDayText:"Egun osoa",moreLinkText:"gehiago",noEventsText:"Ez dago ekitaldirik erakusteko"},{code:"fa",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekText:"هف",allDayText:"تمام روز",moreLinkText:e=>"بیش از "+e,noEventsText:"هیچ رویدادی به نمایش"},{code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekText:"Vk",allDayText:"Koko päivä",moreLinkText:"lisää",noEventsText:"Ei näytettäviä tapahtumia"},{code:"fr",buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekText:"Sem.",allDayText:"Toute la journée",moreLinkText:"en plus",noEventsText:"Aucun événement à afficher"},{code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekText:"Sm",allDayText:"Toute la journée",moreLinkText:"en plus",noEventsText:"Aucun événement à afficher"},{code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Planning"},weekText:"Sem.",allDayText:"Toute la journée",moreLinkText:"en plus",noEventsText:"Aucun événement à afficher"},{code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekText:"Sm",allDayText:"Todo o día",moreLinkText:"máis",noEventsText:"Non hai eventos para amosar"},{code:"he",direction:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",moreLinkText:"אחר",noEventsText:"אין אירועים להצגה",weekText:"שבוע"},{code:"hi",week:{dow:0,doy:6},buttonText:{prev:"पिछला",next:"अगला",today:"आज",month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},weekText:"हफ्ता",allDayText:"सभी दिन",moreLinkText:e=>"+अधिक "+e,noEventsText:"कोई घटनाओं को प्रदर्शित करने के लिए"},{code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekText:"Tje",allDayText:"Cijeli dan",moreLinkText:e=>"+ još "+e,noEventsText:"Nema događaja za prikaz"},{code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Lista"},weekText:"Hét",allDayText:"Egész nap",moreLinkText:"további",noEventsText:"Nincs megjeleníthető esemény"},{code:"hy-am",week:{dow:1,doy:4},buttonText:{prev:"Նախորդ",next:"Հաջորդ",today:"Այսօր",month:"Ամիս",week:"Շաբաթ",day:"Օր",list:"Օրվա ցուցակ"},weekText:"Շաբ",allDayText:"Ամբողջ օր",moreLinkText:e=>"+ ևս "+e,noEventsText:"Բացակայում է իրադարձությունը ցուցադրելու"},{code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekText:"Mg",allDayText:"Sehari penuh",moreLinkText:"lebih",noEventsText:"Tidak ada acara untuk ditampilkan"},{code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekText:"Vika",allDayText:"Allan daginn",moreLinkText:"meira",noEventsText:"Engir viðburðir til að sýna"},{code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekText:"Sm",allDayText:"Tutto il giorno",moreLinkText:e=>"+altri "+e,noEventsText:"Non ci sono eventi da visualizzare"},{code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekText:"週",allDayText:"終日",moreLinkText:e=>"他 "+e+" 件",noEventsText:"表示する予定はありません"},{code:"ka",week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekText:"კვ",allDayText:"მთელი დღე",moreLinkText:e=>"+ კიდევ "+e,noEventsText:"ღონისძიებები არ არის"},{code:"kk",week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekText:"Не",allDayText:"Күні бойы",moreLinkText:e=>"+ тағы "+e,noEventsText:"Көрсету үшін оқиғалар жоқ"},{code:"km",week:{dow:1,doy:4},buttonText:{prev:"មុន",next:"បន្ទាប់",today:"ថ្ងៃនេះ",year:"ឆ្នាំ",month:"ខែ",week:"សប្តាហ៍",day:"ថ្ងៃ",list:"បញ្ជី"},weekText:"សប្តាហ៍",allDayText:"ពេញមួយថ្ងៃ",moreLinkText:"ច្រើនទៀត",noEventsText:"គ្មានព្រឹត្តិការណ៍ត្រូវបង្ហាញ"},{code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekText:"주",allDayText:"종일",moreLinkText:"개",noEventsText:"일정이 없습니다"},{code:"ku",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"پێشتر",next:"دواتر",today:"ئەمڕو",month:"مانگ",week:"هەفتە",day:"ڕۆژ",list:"بەرنامە"},weekText:"هەفتە",allDayText:"هەموو ڕۆژەکە",moreLinkText:"زیاتر",noEventsText:"هیچ ڕووداوێك نیە"},{code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekText:"W",allDayText:"Ganzen Dag",moreLinkText:"méi",noEventsText:"Nee Evenementer ze affichéieren"},{code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekText:"SAV",allDayText:"Visą dieną",moreLinkText:"daugiau",noEventsText:"Nėra įvykių rodyti"},{code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekText:"Ned.",allDayText:"Visu dienu",moreLinkText:e=>"+vēl "+e,noEventsText:"Nav notikumu"},{code:"mk",buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekText:"Сед",allDayText:"Цел ден",moreLinkText:e=>"+повеќе "+e,noEventsText:"Нема настани за прикажување"},{code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekText:"Mg",allDayText:"Sepanjang hari",moreLinkText:e=>"masih ada "+e+" acara",noEventsText:"Tiada peristiwa untuk dipaparkan"},{code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekText:"Uke",weekTextLong:"Uke",allDayText:"Hele dagen",moreLinkText:"til",noEventsText:"Ingen hendelser å vise",buttonHints:{prev:"Forrige $0",next:"Neste $0",today:"Nåværende $0"},viewHint:"$0 visning",navLinkHint:"Gå til $0",moreLinkHint:e=>`Vis ${e} flere hendelse${1===e?"":"r"}`},{code:"ne",week:{dow:7,doy:1},buttonText:{prev:"अघिल्लो",next:"अर्को",today:"आज",month:"महिना",week:"हप्ता",day:"दिन",list:"सूची"},weekText:"हप्ता",allDayText:"दिनभरि",moreLinkText:"थप लिंक",noEventsText:"देखाउनको लागि कुनै घटनाहरू छैनन्"},{code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",moreLinkText:"extra",noEventsText:"Geen evenementen om te laten zien"},{code:"nn",week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekText:"Veke",allDayText:"Heile dagen",moreLinkText:"til",noEventsText:"Ingen hendelser å vise"},{code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekText:"Tydz",allDayText:"Cały dzień",moreLinkText:"więcej",noEventsText:"Brak wydarzeń do wyświetlenia"},{code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Lista"},weekText:"Sm",allDayText:"dia inteiro",moreLinkText:e=>"mais +"+e,noEventsText:"Não há eventos para mostrar"},{code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekText:"Sem",allDayText:"Todo o dia",moreLinkText:"mais",noEventsText:"Não há eventos para mostrar"},{code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekText:"Săpt",allDayText:"Toată ziua",moreLinkText:e=>"+alte "+e,noEventsText:"Nu există evenimente de afișat"},{code:"ru",week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekText:"Нед",allDayText:"Весь день",moreLinkText:e=>"+ ещё "+e,noEventsText:"Нет событий для отображения"},{code:"si-lk",week:{dow:1,doy:4},buttonText:{prev:"පෙර",next:"පසු",today:"අද",month:"මාසය",week:"සතිය",day:"දවස",list:"ලැයිස්තුව"},weekText:"සති",allDayText:"සියලු",moreLinkText:"තවත්",noEventsText:"මුකුත් නැත"},{code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekText:"Ty",allDayText:"Celý deň",moreLinkText:e=>"+ďalšie: "+e,noEventsText:"Žiadne akcie na zobrazenie"},{code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekText:"Teden",allDayText:"Ves dan",moreLinkText:"več",noEventsText:"Ni dogodkov za prikaz"},{code:"sm",buttonText:{prev:"Talu ai",next:"Mulimuli atu",today:"Aso nei",month:"Masina",week:"Vaiaso",day:"Aso",list:"Faasologa"},weekText:"Vaiaso",allDayText:"Aso atoa",moreLinkText:"sili atu",noEventsText:"Leai ni mea na tutupu"},{code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekText:"Ja",allDayText:"Gjithë ditën",moreLinkText:e=>"+më tepër "+e,noEventsText:"Nuk ka evente për të shfaqur"},{code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekText:"Сед",allDayText:"Цео дан",moreLinkText:e=>"+ још "+e,noEventsText:"Нема догађаја за приказ"},{code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekText:"Sed",allDayText:"Cеo dan",moreLinkText:e=>"+ još "+e,noEventsText:"Nеma događaja za prikaz"},{code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},buttonHints:{prev:e=>"Föregående "+e.toLocaleLowerCase(),next:e=>"Nästa "+e.toLocaleLowerCase(),today:e=>("Program"===e?"Detta":"Denna")+" "+e.toLocaleLowerCase()},viewHint:"$0 vy",navLinkHint:"Gå till $0",moreLinkHint:e=>`Visa ytterligare ${e} händelse${1===e?"":"r"}`,weekText:"v.",weekTextLong:"Vecka",allDayText:"Heldag",moreLinkText:"till",noEventsText:"Inga händelser att visa",closeHint:"Stäng",timeHint:"Klockan",eventHint:"Händelse"},{code:"ta-in",week:{dow:1,doy:4},buttonText:{prev:"முந்தைய",next:"அடுத்தது",today:"இன்று",month:"மாதம்",week:"வாரம்",day:"நாள்",list:"தினசரி அட்டவணை"},weekText:"வாரம்",allDayText:"நாள் முழுவதும்",moreLinkText:e=>"+ மேலும் "+e,noEventsText:"காண்பிக்க நிகழ்வுகள் இல்லை"},{code:"th",week:{dow:1,doy:4},buttonText:{prev:"ก่อนหน้า",next:"ถัดไป",prevYear:"ปีก่อนหน้า",nextYear:"ปีถัดไป",year:"ปี",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"กำหนดการ"},weekText:"สัปดาห์",allDayText:"ตลอดวัน",moreLinkText:"เพิ่มเติม",noEventsText:"ไม่มีกิจกรรมที่จะแสดง"},{code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekText:"Hf",allDayText:"Tüm gün",moreLinkText:"daha fazla",noEventsText:"Gösterilecek etkinlik yok"},{code:"ug",buttonText:{month:"ئاي",week:"ھەپتە",day:"كۈن",list:"كۈنتەرتىپ"},allDayText:"پۈتۈن كۈن"},{code:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekText:"Тиж",allDayText:"Увесь день",moreLinkText:e=>"+ще "+e+"...",noEventsText:"Немає подій для відображення"},{code:"uz",buttonText:{month:"Oy",week:"Xafta",day:"Kun",list:"Kun tartibi"},allDayText:"Kun bo'yi",moreLinkText:e=>"+ yana "+e,noEventsText:"Ko'rsatish uchun voqealar yo'q"},{code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekText:"Tu",allDayText:"Cả ngày",moreLinkText:e=>"+ thêm "+e,noEventsText:"Không có sự kiện để hiển thị"},{code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekText:"周",allDayText:"全天",moreLinkText:e=>"另外 "+e+" 个",noEventsText:"没有事件显示"},{code:"zh-tw",buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekText:"周",allDayText:"整天",moreLinkText:"顯示更多",noEventsText:"没有任何活動"}];FullCalendar.globalLocales.push(...o)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales-all.js b/library/fullcalendar/packages/core/locales-all.js
deleted file mode 100644
index e6c77df2c..000000000
--- a/library/fullcalendar/packages/core/locales-all.js
+++ /dev/null
@@ -1,1405 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, global.FullCalendarLocalesAll = factory());
-}(this, function () { 'use strict';
-
- var _m0 = {
- code: "af",
- week: {
- dow: 1,
- doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
- },
- buttonText: {
- prev: "Vorige",
- next: "Volgende",
- today: "Vandag",
- year: "Jaar",
- month: "Maand",
- week: "Week",
- day: "Dag",
- list: "Agenda"
- },
- allDayHtml: "Heeldag",
- eventLimitText: "Addisionele",
- noEventsMessage: "Daar is geen gebeurtenisse nie"
- };
-
- var _m1 = {
- code: "ar-dz",
- week: {
- dow: 0,
- doy: 4 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- var _m2 = {
- code: "ar-kw",
- week: {
- dow: 0,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- var _m3 = {
- code: "ar-ly",
- week: {
- dow: 6,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- var _m4 = {
- code: "ar-ma",
- week: {
- dow: 6,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- var _m5 = {
- code: "ar-sa",
- week: {
- dow: 0,
- doy: 6 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- var _m6 = {
- code: "ar-tn",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- var _m7 = {
- code: "ar",
- week: {
- dow: 6,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- var _m8 = {
- code: "az",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Əvvəl",
- next: "Sonra",
- today: "Bu Gün",
- month: "Ay",
- week: "Həftə",
- day: "Gün",
- list: "Gündəm"
- },
- weekLabel: "Həftə",
- allDayText: "Bütün Gün",
- eventLimitText: function (n) {
- return "+ daha çox " + n;
- },
- noEventsMessage: "Göstərmək üçün hadisə yoxdur"
- };
-
- var _m9 = {
- code: "bg",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "назад",
- next: "напред",
- today: "днес",
- month: "Месец",
- week: "Седмица",
- day: "Ден",
- list: "График"
- },
- allDayText: "Цял ден",
- eventLimitText: function (n) {
- return "+още " + n;
- },
- noEventsMessage: "Няма събития за показване"
- };
-
- var _m10 = {
- code: "bs",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Prošli",
- next: "Sljedeći",
- today: "Danas",
- month: "Mjesec",
- week: "Sedmica",
- day: "Dan",
- list: "Raspored"
- },
- weekLabel: "Sed",
- allDayText: "Cijeli dan",
- eventLimitText: function (n) {
- return "+ još " + n;
- },
- noEventsMessage: "Nema događaja za prikazivanje"
- };
-
- var _m11 = {
- code: "ca",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Anterior",
- next: "Següent",
- today: "Avui",
- month: "Mes",
- week: "Setmana",
- day: "Dia",
- list: "Agenda"
- },
- weekLabel: "Set",
- allDayText: "Tot el dia",
- eventLimitText: "més",
- noEventsMessage: "No hi ha esdeveniments per mostrar"
- };
-
- var _m12 = {
- code: "cs",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Dříve",
- next: "Později",
- today: "Nyní",
- month: "Měsíc",
- week: "Týden",
- day: "Den",
- list: "Agenda"
- },
- weekLabel: "Týd",
- allDayText: "Celý den",
- eventLimitText: function (n) {
- return "+další: " + n;
- },
- noEventsMessage: "Žádné akce k zobrazení"
- };
-
- var _m13 = {
- code: "da",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Forrige",
- next: "Næste",
- today: "I dag",
- month: "Måned",
- week: "Uge",
- day: "Dag",
- list: "Agenda"
- },
- weekLabel: "Uge",
- allDayText: "Hele dagen",
- eventLimitText: "flere",
- noEventsMessage: "Ingen arrangementer at vise"
- };
-
- var _m14 = {
- code: "de",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Zurück",
- next: "Vor",
- today: "Heute",
- year: "Jahr",
- month: "Monat",
- week: "Woche",
- day: "Tag",
- list: "Terminübersicht"
- },
- weekLabel: "KW",
- allDayText: "Ganztägig",
- eventLimitText: function (n) {
- return "+ weitere " + n;
- },
- noEventsMessage: "Keine Ereignisse anzuzeigen"
- };
-
- var _m15 = {
- code: "el",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4st is the first week of the year.
- },
- buttonText: {
- prev: "Προηγούμενος",
- next: "Επόμενος",
- today: "Σήμερα",
- month: "Μήνας",
- week: "Εβδομάδα",
- day: "Ημέρα",
- list: "Ατζέντα"
- },
- weekLabel: "Εβδ",
- allDayText: "Ολοήμερο",
- eventLimitText: "περισσότερα",
- noEventsMessage: "Δεν υπάρχουν γεγονότα προς εμφάνιση"
- };
-
- var _m16 = {
- code: "en-au",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- }
- };
-
- var _m17 = {
- code: "en-gb",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- }
- };
-
- var _m18 = {
- code: "en-nz",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- }
- };
-
- var _m19 = {
- code: "es",
- week: {
- dow: 0,
- doy: 6 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Ant",
- next: "Sig",
- today: "Hoy",
- month: "Mes",
- week: "Semana",
- day: "Día",
- list: "Agenda"
- },
- weekLabel: "Sm",
- allDayHtml: "Todo<br/>el día",
- eventLimitText: "más",
- noEventsMessage: "No hay eventos para mostrar"
- };
-
- var _m20 = {
- code: "es",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Ant",
- next: "Sig",
- today: "Hoy",
- month: "Mes",
- week: "Semana",
- day: "Día",
- list: "Agenda"
- },
- weekLabel: "Sm",
- allDayHtml: "Todo<br/>el día",
- eventLimitText: "más",
- noEventsMessage: "No hay eventos para mostrar"
- };
-
- var _m21 = {
- code: "et",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Eelnev",
- next: "Järgnev",
- today: "Täna",
- month: "Kuu",
- week: "Nädal",
- day: "Päev",
- list: "Päevakord"
- },
- weekLabel: "näd",
- allDayText: "Kogu päev",
- eventLimitText: function (n) {
- return "+ veel " + n;
- },
- noEventsMessage: "Kuvamiseks puuduvad sündmused"
- };
-
- var _m22 = {
- code: "eu",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Aur",
- next: "Hur",
- today: "Gaur",
- month: "Hilabetea",
- week: "Astea",
- day: "Eguna",
- list: "Agenda"
- },
- weekLabel: "As",
- allDayHtml: "Egun<br/>osoa",
- eventLimitText: "gehiago",
- noEventsMessage: "Ez dago ekitaldirik erakusteko"
- };
-
- var _m23 = {
- code: "fa",
- week: {
- dow: 6,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "قبلی",
- next: "بعدی",
- today: "امروز",
- month: "ماه",
- week: "هفته",
- day: "روز",
- list: "برنامه"
- },
- weekLabel: "هف",
- allDayText: "تمام روز",
- eventLimitText: function (n) {
- return "بیش از " + n;
- },
- noEventsMessage: "هیچ رویدادی به نمایش"
- };
-
- var _m24 = {
- code: "fi",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Edellinen",
- next: "Seuraava",
- today: "Tänään",
- month: "Kuukausi",
- week: "Viikko",
- day: "Päivä",
- list: "Tapahtumat"
- },
- weekLabel: "Vk",
- allDayText: "Koko päivä",
- eventLimitText: "lisää",
- noEventsMessage: "Ei näytettäviä tapahtumia"
- };
-
- var _m25 = {
- code: "fr",
- buttonText: {
- prev: "Précédent",
- next: "Suivant",
- today: "Aujourd'hui",
- year: "Année",
- month: "Mois",
- week: "Semaine",
- day: "Jour",
- list: "Mon planning"
- },
- weekLabel: "Sem.",
- allDayHtml: "Toute la<br/>journée",
- eventLimitText: "en plus",
- noEventsMessage: "Aucun événement à afficher"
- };
-
- var _m26 = {
- code: "fr-ch",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Précédent",
- next: "Suivant",
- today: "Courant",
- year: "Année",
- month: "Mois",
- week: "Semaine",
- day: "Jour",
- list: "Mon planning"
- },
- weekLabel: "Sm",
- allDayHtml: "Toute la<br/>journée",
- eventLimitText: "en plus",
- noEventsMessage: "Aucun événement à afficher"
- };
-
- var _m27 = {
- code: "fr",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Précédent",
- next: "Suivant",
- today: "Aujourd'hui",
- year: "Année",
- month: "Mois",
- week: "Semaine",
- day: "Jour",
- list: "Planning"
- },
- weekLabel: "Sem.",
- allDayHtml: "Toute la<br/>journée",
- eventLimitText: "en plus",
- noEventsMessage: "Aucun événement à afficher"
- };
-
- var _m28 = {
- code: "gl",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Ant",
- next: "Seg",
- today: "Hoxe",
- month: "Mes",
- week: "Semana",
- day: "Día",
- list: "Axenda"
- },
- weekLabel: "Sm",
- allDayHtml: "Todo<br/>o día",
- eventLimitText: "máis",
- noEventsMessage: "Non hai eventos para amosar"
- };
-
- var _m29 = {
- code: "he",
- dir: 'rtl',
- buttonText: {
- prev: "הקודם",
- next: "הבא",
- today: "היום",
- month: "חודש",
- week: "שבוע",
- day: "יום",
- list: "סדר יום"
- },
- allDayText: "כל היום",
- eventLimitText: "אחר",
- noEventsMessage: "אין אירועים להצגה",
- weekLabel: "שבוע"
- };
-
- var _m30 = {
- code: "hi",
- week: {
- dow: 0,
- doy: 6 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "पिछला",
- next: "अगला",
- today: "आज",
- month: "महीना",
- week: "सप्ताह",
- day: "दिन",
- list: "कार्यसूची"
- },
- weekLabel: "हफ्ता",
- allDayText: "सभी दिन",
- eventLimitText: function (n) {
- return "+अधिक " + n;
- },
- noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए"
- };
-
- var _m31 = {
- code: "hr",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Prijašnji",
- next: "Sljedeći",
- today: "Danas",
- month: "Mjesec",
- week: "Tjedan",
- day: "Dan",
- list: "Raspored"
- },
- weekLabel: "Tje",
- allDayText: "Cijeli dan",
- eventLimitText: function (n) {
- return "+ još " + n;
- },
- noEventsMessage: "Nema događaja za prikaz"
- };
-
- var _m32 = {
- code: "hu",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "vissza",
- next: "előre",
- today: "ma",
- month: "Hónap",
- week: "Hét",
- day: "Nap",
- list: "Napló"
- },
- weekLabel: "Hét",
- allDayText: "Egész nap",
- eventLimitText: "további",
- noEventsMessage: "Nincs megjeleníthető esemény"
- };
-
- var _m33 = {
- code: "id",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "mundur",
- next: "maju",
- today: "hari ini",
- month: "Bulan",
- week: "Minggu",
- day: "Hari",
- list: "Agenda"
- },
- weekLabel: "Mg",
- allDayHtml: "Sehari<br/>penuh",
- eventLimitText: "lebih",
- noEventsMessage: "Tidak ada acara untuk ditampilkan"
- };
-
- var _m34 = {
- code: "is",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Fyrri",
- next: "Næsti",
- today: "Í dag",
- month: "Mánuður",
- week: "Vika",
- day: "Dagur",
- list: "Dagskrá"
- },
- weekLabel: "Vika",
- allDayHtml: "Allan<br/>daginn",
- eventLimitText: "meira",
- noEventsMessage: "Engir viðburðir til að sýna"
- };
-
- var _m35 = {
- code: "it",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Prec",
- next: "Succ",
- today: "Oggi",
- month: "Mese",
- week: "Settimana",
- day: "Giorno",
- list: "Agenda"
- },
- weekLabel: "Sm",
- allDayHtml: "Tutto il<br/>giorno",
- eventLimitText: function (n) {
- return "+altri " + n;
- },
- noEventsMessage: "Non ci sono eventi da visualizzare"
- };
-
- var _m36 = {
- code: "ja",
- buttonText: {
- prev: "前",
- next: "次",
- today: "今日",
- month: "月",
- week: "週",
- day: "日",
- list: "予定リスト"
- },
- weekLabel: "週",
- allDayText: "終日",
- eventLimitText: function (n) {
- return "他 " + n + " 件";
- },
- noEventsMessage: "表示する予定はありません"
- };
-
- var _m37 = {
- code: "ka",
- week: {
- dow: 1,
- doy: 7
- },
- buttonText: {
- prev: "წინა",
- next: "შემდეგი",
- today: "დღეს",
- month: "თვე",
- week: "კვირა",
- day: "დღე",
- list: "დღის წესრიგი"
- },
- weekLabel: "კვ",
- allDayText: "მთელი დღე",
- eventLimitText: function (n) {
- return "+ კიდევ " + n;
- },
- noEventsMessage: "ღონისძიებები არ არის"
- };
-
- var _m38 = {
- code: "kk",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Алдыңғы",
- next: "Келесі",
- today: "Бүгін",
- month: "Ай",
- week: "Апта",
- day: "Күн",
- list: "Күн тәртібі"
- },
- weekLabel: "Не",
- allDayText: "Күні бойы",
- eventLimitText: function (n) {
- return "+ тағы " + n;
- },
- noEventsMessage: "Көрсету үшін оқиғалар жоқ"
- };
-
- var _m39 = {
- code: "ko",
- buttonText: {
- prev: "이전달",
- next: "다음달",
- today: "오늘",
- month: "월",
- week: "주",
- day: "일",
- list: "일정목록"
- },
- weekLabel: "주",
- allDayText: "종일",
- eventLimitText: "개",
- noEventsMessage: "일정이 없습니다"
- };
-
- var _m40 = {
- code: "lb",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Zréck",
- next: "Weider",
- today: "Haut",
- month: "Mount",
- week: "Woch",
- day: "Dag",
- list: "Terminiwwersiicht"
- },
- weekLabel: "W",
- allDayText: "Ganzen Dag",
- eventLimitText: "méi",
- noEventsMessage: "Nee Evenementer ze affichéieren"
- };
-
- var _m41 = {
- code: "lt",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Atgal",
- next: "Pirmyn",
- today: "Šiandien",
- month: "Mėnuo",
- week: "Savaitė",
- day: "Diena",
- list: "Darbotvarkė"
- },
- weekLabel: "SAV",
- allDayText: "Visą dieną",
- eventLimitText: "daugiau",
- noEventsMessage: "Nėra įvykių rodyti"
- };
-
- var _m42 = {
- code: "lv",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Iepr.",
- next: "Nāk.",
- today: "Šodien",
- month: "Mēnesis",
- week: "Nedēļa",
- day: "Diena",
- list: "Dienas kārtība"
- },
- weekLabel: "Ned.",
- allDayText: "Visu dienu",
- eventLimitText: function (n) {
- return "+vēl " + n;
- },
- noEventsMessage: "Nav notikumu"
- };
-
- var _m43 = {
- code: "mk",
- buttonText: {
- prev: "претходно",
- next: "следно",
- today: "Денес",
- month: "Месец",
- week: "Недела",
- day: "Ден",
- list: "График"
- },
- weekLabel: "Сед",
- allDayText: "Цел ден",
- eventLimitText: function (n) {
- return "+повеќе " + n;
- },
- noEventsMessage: "Нема настани за прикажување"
- };
-
- var _m44 = {
- code: "ms",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Sebelum",
- next: "Selepas",
- today: "hari ini",
- month: "Bulan",
- week: "Minggu",
- day: "Hari",
- list: "Agenda"
- },
- weekLabel: "Mg",
- allDayText: "Sepanjang hari",
- eventLimitText: function (n) {
- return "masih ada " + n + " acara";
- },
- noEventsMessage: "Tiada peristiwa untuk dipaparkan"
- };
-
- var _m45 = {
- code: "nb",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Forrige",
- next: "Neste",
- today: "I dag",
- month: "Måned",
- week: "Uke",
- day: "Dag",
- list: "Agenda"
- },
- weekLabel: "Uke",
- allDayText: "Hele dagen",
- eventLimitText: "til",
- noEventsMessage: "Ingen hendelser å vise"
- };
-
- var _m46 = {
- code: "nl",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Voorgaand",
- next: "Volgende",
- today: "Vandaag",
- year: "Jaar",
- month: "Maand",
- week: "Week",
- day: "Dag",
- list: "Agenda"
- },
- allDayText: "Hele dag",
- eventLimitText: "extra",
- noEventsMessage: "Geen evenementen om te laten zien"
- };
-
- var _m47 = {
- code: "nn",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Førre",
- next: "Neste",
- today: "I dag",
- month: "Månad",
- week: "Veke",
- day: "Dag",
- list: "Agenda"
- },
- weekLabel: "Veke",
- allDayText: "Heile dagen",
- eventLimitText: "til",
- noEventsMessage: "Ingen hendelser å vise"
- };
-
- var _m48 = {
- code: "pl",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Poprzedni",
- next: "Następny",
- today: "Dziś",
- month: "Miesiąc",
- week: "Tydzień",
- day: "Dzień",
- list: "Plan dnia"
- },
- weekLabel: "Tydz",
- allDayText: "Cały dzień",
- eventLimitText: "więcej",
- noEventsMessage: "Brak wydarzeń do wyświetlenia"
- };
-
- var _m49 = {
- code: "pt-br",
- buttonText: {
- prev: "Anterior",
- next: "Próximo",
- today: "Hoje",
- month: "Mês",
- week: "Semana",
- day: "Dia",
- list: "Lista"
- },
- weekLabel: "Sm",
- allDayText: "dia inteiro",
- eventLimitText: function (n) {
- return "mais +" + n;
- },
- noEventsMessage: "Não há eventos para mostrar"
- };
-
- var _m50 = {
- code: "pt",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Anterior",
- next: "Seguinte",
- today: "Hoje",
- month: "Mês",
- week: "Semana",
- day: "Dia",
- list: "Agenda"
- },
- weekLabel: "Sem",
- allDayText: "Todo o dia",
- eventLimitText: "mais",
- noEventsMessage: "Não há eventos para mostrar"
- };
-
- var _m51 = {
- code: "ro",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "precedentă",
- next: "următoare",
- today: "Azi",
- month: "Lună",
- week: "Săptămână",
- day: "Zi",
- list: "Agendă"
- },
- weekLabel: "Săpt",
- allDayText: "Toată ziua",
- eventLimitText: function (n) {
- return "+alte " + n;
- },
- noEventsMessage: "Nu există evenimente de afișat"
- };
-
- var _m52 = {
- code: "ru",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Пред",
- next: "След",
- today: "Сегодня",
- month: "Месяц",
- week: "Неделя",
- day: "День",
- list: "Повестка дня"
- },
- weekLabel: "Нед",
- allDayText: "Весь день",
- eventLimitText: function (n) {
- return "+ ещё " + n;
- },
- noEventsMessage: "Нет событий для отображения"
- };
-
- var _m53 = {
- code: "sk",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Predchádzajúci",
- next: "Nasledujúci",
- today: "Dnes",
- month: "Mesiac",
- week: "Týždeň",
- day: "Deň",
- list: "Rozvrh"
- },
- weekLabel: "Ty",
- allDayText: "Celý deň",
- eventLimitText: function (n) {
- return "+ďalšie: " + n;
- },
- noEventsMessage: "Žiadne akcie na zobrazenie"
- };
-
- var _m54 = {
- code: "sl",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Prejšnji",
- next: "Naslednji",
- today: "Trenutni",
- month: "Mesec",
- week: "Teden",
- day: "Dan",
- list: "Dnevni red"
- },
- weekLabel: "Teden",
- allDayText: "Ves dan",
- eventLimitText: "več",
- noEventsMessage: "Ni dogodkov za prikaz"
- };
-
- var _m55 = {
- code: "sq",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "mbrapa",
- next: "Përpara",
- today: "sot",
- month: "Muaj",
- week: "Javë",
- day: "Ditë",
- list: "Listë"
- },
- weekLabel: "Ja",
- allDayHtml: "Gjithë<br/>ditën",
- eventLimitText: function (n) {
- return "+më tepër " + n;
- },
- noEventsMessage: "Nuk ka evente për të shfaqur"
- };
-
- var _m56 = {
- code: "sr-cyrl",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Претходна",
- next: "следећи",
- today: "Данас",
- month: "Месец",
- week: "Недеља",
- day: "Дан",
- list: "Планер"
- },
- weekLabel: "Сед",
- allDayText: "Цео дан",
- eventLimitText: function (n) {
- return "+ још " + n;
- },
- noEventsMessage: "Нема догађаја за приказ"
- };
-
- var _m57 = {
- code: "sr",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Prethodna",
- next: "Sledeći",
- today: "Danas",
- month: "Mеsеc",
- week: "Nеdеlja",
- day: "Dan",
- list: "Planеr"
- },
- weekLabel: "Sed",
- allDayText: "Cеo dan",
- eventLimitText: function (n) {
- return "+ još " + n;
- },
- noEventsMessage: "Nеma događaja za prikaz"
- };
-
- var _m58 = {
- code: "sv",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Förra",
- next: "Nästa",
- today: "Idag",
- month: "Månad",
- week: "Vecka",
- day: "Dag",
- list: "Program"
- },
- weekLabel: "v.",
- allDayText: "Heldag",
- eventLimitText: "till",
- noEventsMessage: "Inga händelser att visa"
- };
-
- var _m59 = {
- code: "th",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "ก่อนหน้า",
- next: "ถัดไป",
- prevYear: 'ปีก่อนหน้า',
- nextYear: 'ปีถัดไป',
- year: 'ปี',
- today: "วันนี้",
- month: "เดือน",
- week: "สัปดาห์",
- day: "วัน",
- list: "กำหนดการ"
- },
- weekLabel: "สัปดาห์",
- allDayText: "ตลอดวัน",
- eventLimitText: "เพิ่มเติม",
- noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง"
- };
-
- var _m60 = {
- code: "tr",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "geri",
- next: "ileri",
- today: "bugün",
- month: "Ay",
- week: "Hafta",
- day: "Gün",
- list: "Ajanda"
- },
- weekLabel: "Hf",
- allDayText: "Tüm gün",
- eventLimitText: "daha fazla",
- noEventsMessage: "Gösterilecek etkinlik yok"
- };
-
- var _m61 = {
- code: "ug",
- buttonText: {
- month: "ئاي",
- week: "ھەپتە",
- day: "كۈن",
- list: "كۈنتەرتىپ"
- },
- allDayText: "پۈتۈن كۈن"
- };
-
- var _m62 = {
- code: "uk",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Попередній",
- next: "далі",
- today: "Сьогодні",
- month: "Місяць",
- week: "Тиждень",
- day: "День",
- list: "Порядок денний"
- },
- weekLabel: "Тиж",
- allDayText: "Увесь день",
- eventLimitText: function (n) {
- return "+ще " + n + "...";
- },
- noEventsMessage: "Немає подій для відображення"
- };
-
- var _m63 = {
- code: "uz",
- buttonText: {
- month: "Oy",
- week: "Xafta",
- day: "Kun",
- list: "Kun tartibi"
- },
- allDayText: "Kun bo'yi",
- eventLimitText: function (n) {
- return "+ yana " + n;
- },
- noEventsMessage: "Ko'rsatish uchun voqealar yo'q"
- };
-
- var _m64 = {
- code: "vi",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Trước",
- next: "Tiếp",
- today: "Hôm nay",
- month: "Tháng",
- week: "Tuần",
- day: "Ngày",
- list: "Lịch biểu"
- },
- weekLabel: "Tu",
- allDayText: "Cả ngày",
- eventLimitText: function (n) {
- return "+ thêm " + n;
- },
- noEventsMessage: "Không có sự kiện để hiển thị"
- };
-
- var _m65 = {
- code: "zh-cn",
- week: {
- // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "上月",
- next: "下月",
- today: "今天",
- month: "月",
- week: "周",
- day: "日",
- list: "日程"
- },
- weekLabel: "周",
- allDayText: "全天",
- eventLimitText: function (n) {
- return "另外 " + n + " 个";
- },
- noEventsMessage: "没有事件显示"
- };
-
- var _m66 = {
- code: "zh-tw",
- buttonText: {
- prev: "上月",
- next: "下月",
- today: "今天",
- month: "月",
- week: "週",
- day: "天",
- list: "活動列表"
- },
- weekLabel: "周",
- allDayText: "整天",
- eventLimitText: '顯示更多',
- noEventsMessage: "没有任何活動"
- };
-
- var _rollupPluginMultiEntry_entryPoint = [
- _m0, _m1, _m2, _m3, _m4, _m5, _m6, _m7, _m8, _m9, _m10, _m11, _m12, _m13, _m14, _m15, _m16, _m17, _m18, _m19, _m20, _m21, _m22, _m23, _m24, _m25, _m26, _m27, _m28, _m29, _m30, _m31, _m32, _m33, _m34, _m35, _m36, _m37, _m38, _m39, _m40, _m41, _m42, _m43, _m44, _m45, _m46, _m47, _m48, _m49, _m50, _m51, _m52, _m53, _m54, _m55, _m56, _m57, _m58, _m59, _m60, _m61, _m62, _m63, _m64, _m65, _m66
- ];
-
- return _rollupPluginMultiEntry_entryPoint;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales-all.min.js b/library/fullcalendar/packages/core/locales-all.min.js
deleted file mode 100644
index e553f6653..000000000
--- a/library/fullcalendar/packages/core/locales-all.min.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).FullCalendarLocalesAll=t()}(this,(function(){"use strict";return[{code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayHtml:"Heeldag",eventLimitText:"Addisionele",noEventsMessage:"Daar is geen gebeurtenisse nie"},{code:"ar-dz",week:{dow:0,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-kw",week:{dow:0,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ly",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-ma",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-sa",week:{dow:0,doy:6},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar-tn",week:{dow:1,doy:4},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"ar",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekLabel:"أسبوع",allDayText:"اليوم كله",eventLimitText:"أخرى",noEventsMessage:"أي أحداث لعرض"},{code:"az",week:{dow:1,doy:4},buttonText:{prev:"Əvvəl",next:"Sonra",today:"Bu Gün",month:"Ay",week:"Həftə",day:"Gün",list:"Gündəm"},weekLabel:"Həftə",allDayText:"Bütün Gün",eventLimitText:function(e){return"+ daha çox "+e},noEventsMessage:"Göstərmək üçün hadisə yoxdur"},{code:"bg",week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",eventLimitText:function(e){return"+още "+e},noEventsMessage:"Няма събития за показване"},{code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekLabel:"Sed",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikazivanje"},{code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekLabel:"Set",allDayText:"Tot el dia",eventLimitText:"més",noEventsMessage:"No hi ha esdeveniments per mostrar"},{code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekLabel:"Týd",allDayText:"Celý den",eventLimitText:function(e){return"+další: "+e},noEventsMessage:"Žádné akce k zobrazení"},{code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekLabel:"Uge",allDayText:"Hele dagen",eventLimitText:"flere",noEventsMessage:"Ingen arrangementer at vise"},{code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekLabel:"KW",allDayText:"Ganztägig",eventLimitText:function(e){return"+ weitere "+e},noEventsMessage:"Keine Ereignisse anzuzeigen"},{code:"el",week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekLabel:"Εβδ",allDayText:"Ολοήμερο",eventLimitText:"περισσότερα",noEventsMessage:"Δεν υπάρχουν γεγονότα προς εμφάνιση"},{code:"en-au",week:{dow:1,doy:4}},{code:"en-gb",week:{dow:1,doy:4}},{code:"en-nz",week:{dow:1,doy:4}},{code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo<br/>el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Todo<br/>el día",eventLimitText:"más",noEventsMessage:"No hay eventos para mostrar"},{code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekLabel:"näd",allDayText:"Kogu päev",eventLimitText:function(e){return"+ veel "+e},noEventsMessage:"Kuvamiseks puuduvad sündmused"},{code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekLabel:"As",allDayHtml:"Egun<br/>osoa",eventLimitText:"gehiago",noEventsMessage:"Ez dago ekitaldirik erakusteko"},{code:"fa",week:{dow:6,doy:12},dir:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekLabel:"هف",allDayText:"تمام روز",eventLimitText:function(e){return"بیش از "+e},noEventsMessage:"هیچ رویدادی به نمایش"},{code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekLabel:"Vk",allDayText:"Koko päivä",eventLimitText:"lisää",noEventsMessage:"Ei näytettäviä tapahtumia"},{code:"fr",buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sem.",allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekLabel:"Sm",allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Planning"},weekLabel:"Sem.",allDayHtml:"Toute la<br/>journée",eventLimitText:"en plus",noEventsMessage:"Aucun événement à afficher"},{code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekLabel:"Sm",allDayHtml:"Todo<br/>o día",eventLimitText:"máis",noEventsMessage:"Non hai eventos para amosar"},{code:"he",dir:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",eventLimitText:"אחר",noEventsMessage:"אין אירועים להצגה",weekLabel:"שבוע"},{code:"hi",week:{dow:0,doy:6},buttonText:{prev:"पिछला",next:"अगला",today:"आज",month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},weekLabel:"हफ्ता",allDayText:"सभी दिन",eventLimitText:function(e){return"+अधिक "+e},noEventsMessage:"कोई घटनाओं को प्रदर्शित करने के लिए"},{code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekLabel:"Tje",allDayText:"Cijeli dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nema događaja za prikaz"},{code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Napló"},weekLabel:"Hét",allDayText:"Egész nap",eventLimitText:"további",noEventsMessage:"Nincs megjeleníthető esemény"},{code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayHtml:"Sehari<br/>penuh",eventLimitText:"lebih",noEventsMessage:"Tidak ada acara untuk ditampilkan"},{code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekLabel:"Vika",allDayHtml:"Allan<br/>daginn",eventLimitText:"meira",noEventsMessage:"Engir viðburðir til að sýna"},{code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekLabel:"Sm",allDayHtml:"Tutto il<br/>giorno",eventLimitText:function(e){return"+altri "+e},noEventsMessage:"Non ci sono eventi da visualizzare"},{code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekLabel:"週",allDayText:"終日",eventLimitText:function(e){return"他 "+e+" 件"},noEventsMessage:"表示する予定はありません"},{code:"ka",week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekLabel:"კვ",allDayText:"მთელი დღე",eventLimitText:function(e){return"+ კიდევ "+e},noEventsMessage:"ღონისძიებები არ არის"},{code:"kk",week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekLabel:"Не",allDayText:"Күні бойы",eventLimitText:function(e){return"+ тағы "+e},noEventsMessage:"Көрсету үшін оқиғалар жоқ"},{code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekLabel:"주",allDayText:"종일",eventLimitText:"개",noEventsMessage:"일정이 없습니다"},{code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekLabel:"W",allDayText:"Ganzen Dag",eventLimitText:"méi",noEventsMessage:"Nee Evenementer ze affichéieren"},{code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekLabel:"SAV",allDayText:"Visą dieną",eventLimitText:"daugiau",noEventsMessage:"Nėra įvykių rodyti"},{code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekLabel:"Ned.",allDayText:"Visu dienu",eventLimitText:function(e){return"+vēl "+e},noEventsMessage:"Nav notikumu"},{code:"mk",buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekLabel:"Сед",allDayText:"Цел ден",eventLimitText:function(e){return"+повеќе "+e},noEventsMessage:"Нема настани за прикажување"},{code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekLabel:"Mg",allDayText:"Sepanjang hari",eventLimitText:function(e){return"masih ada "+e+" acara"},noEventsMessage:"Tiada peristiwa untuk dipaparkan"},{code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekLabel:"Uke",allDayText:"Hele dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Voorgaand",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",eventLimitText:"extra",noEventsMessage:"Geen evenementen om te laten zien"},{code:"nn",week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekLabel:"Veke",allDayText:"Heile dagen",eventLimitText:"til",noEventsMessage:"Ingen hendelser å vise"},{code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekLabel:"Tydz",allDayText:"Cały dzień",eventLimitText:"więcej",noEventsMessage:"Brak wydarzeń do wyświetlenia"},{code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Lista"},weekLabel:"Sm",allDayText:"dia inteiro",eventLimitText:function(e){return"mais +"+e},noEventsMessage:"Não há eventos para mostrar"},{code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekLabel:"Sem",allDayText:"Todo o dia",eventLimitText:"mais",noEventsMessage:"Não há eventos para mostrar"},{code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekLabel:"Săpt",allDayText:"Toată ziua",eventLimitText:function(e){return"+alte "+e},noEventsMessage:"Nu există evenimente de afișat"},{code:"ru",week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekLabel:"Нед",allDayText:"Весь день",eventLimitText:function(e){return"+ ещё "+e},noEventsMessage:"Нет событий для отображения"},{code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekLabel:"Ty",allDayText:"Celý deň",eventLimitText:function(e){return"+ďalšie: "+e},noEventsMessage:"Žiadne akcie na zobrazenie"},{code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekLabel:"Teden",allDayText:"Ves dan",eventLimitText:"več",noEventsMessage:"Ni dogodkov za prikaz"},{code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekLabel:"Ja",allDayHtml:"Gjithë<br/>ditën",eventLimitText:function(e){return"+më tepër "+e},noEventsMessage:"Nuk ka evente për të shfaqur"},{code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekLabel:"Сед",allDayText:"Цео дан",eventLimitText:function(e){return"+ још "+e},noEventsMessage:"Нема догађаја за приказ"},{code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekLabel:"Sed",allDayText:"Cеo dan",eventLimitText:function(e){return"+ još "+e},noEventsMessage:"Nеma događaja za prikaz"},{code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},weekLabel:"v.",allDayText:"Heldag",eventLimitText:"till",noEventsMessage:"Inga händelser att visa"},{code:"th",week:{dow:1,doy:4},buttonText:{prev:"ก่อนหน้า",next:"ถัดไป",prevYear:"ปีก่อนหน้า",nextYear:"ปีถัดไป",year:"ปี",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"กำหนดการ"},weekLabel:"สัปดาห์",allDayText:"ตลอดวัน",eventLimitText:"เพิ่มเติม",noEventsMessage:"ไม่มีกิจกรรมที่จะแสดง"},{code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekLabel:"Hf",allDayText:"Tüm gün",eventLimitText:"daha fazla",noEventsMessage:"Gösterilecek etkinlik yok"},{code:"ug",buttonText:{month:"ئاي",week:"ھەپتە",day:"كۈن",list:"كۈنتەرتىپ"},allDayText:"پۈتۈن كۈن"},{code:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekLabel:"Тиж",allDayText:"Увесь день",eventLimitText:function(e){return"+ще "+e+"..."},noEventsMessage:"Немає подій для відображення"},{code:"uz",buttonText:{month:"Oy",week:"Xafta",day:"Kun",list:"Kun tartibi"},allDayText:"Kun bo'yi",eventLimitText:function(e){return"+ yana "+e},noEventsMessage:"Ko'rsatish uchun voqealar yo'q"},{code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekLabel:"Tu",allDayText:"Cả ngày",eventLimitText:function(e){return"+ thêm "+e},noEventsMessage:"Không có sự kiện để hiển thị"},{code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekLabel:"周",allDayText:"全天",eventLimitText:function(e){return"另外 "+e+" 个"},noEventsMessage:"没有事件显示"},{code:"zh-tw",buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekLabel:"周",allDayText:"整天",eventLimitText:"顯示更多",noEventsMessage:"没有任何活動"}]})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/af.global.js b/library/fullcalendar/packages/core/locales/af.global.js
new file mode 100644
index 000000000..c5bed4dd4
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/af.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'af',
+ week: {
+ dow: 1,
+ doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
+ },
+ buttonText: {
+ prev: 'Vorige',
+ next: 'Volgende',
+ today: 'Vandag',
+ year: 'Jaar',
+ month: 'Maand',
+ week: 'Week',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ allDayText: 'Heeldag',
+ moreLinkText: 'Addisionele',
+ noEventsText: 'Daar is geen gebeurtenisse nie',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/af.global.min.js b/library/fullcalendar/packages/core/locales/af.global.min.js
new file mode 100644
index 000000000..7e3b2af8f
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/af.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"af",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Heeldag",moreLinkText:"Addisionele",noEventsText:"Daar is geen gebeurtenisse nie"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/af.js b/library/fullcalendar/packages/core/locales/af.js
deleted file mode 100644
index ee9f9f747..000000000
--- a/library/fullcalendar/packages/core/locales/af.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.af = factory()));
-}(this, function () { 'use strict';
-
- var af = {
- code: "af",
- week: {
- dow: 1,
- doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
- },
- buttonText: {
- prev: "Vorige",
- next: "Volgende",
- today: "Vandag",
- year: "Jaar",
- month: "Maand",
- week: "Week",
- day: "Dag",
- list: "Agenda"
- },
- allDayHtml: "Heeldag",
- eventLimitText: "Addisionele",
- noEventsMessage: "Daar is geen gebeurtenisse nie"
- };
-
- return af;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ar-dz.global.js b/library/fullcalendar/packages/core/locales/ar-dz.global.js
new file mode 100644
index 000000000..b72beb79c
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-dz.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ar-dz',
+ week: {
+ dow: 0,
+ doy: 4, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ar-dz.global.min.js b/library/fullcalendar/packages/core/locales/ar-dz.global.min.js
new file mode 100644
index 000000000..1fde2ea1a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-dz.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ar-dz",week:{dow:0,doy:4},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ar-dz.js b/library/fullcalendar/packages/core/locales/ar-dz.js
deleted file mode 100644
index 201eb171a..000000000
--- a/library/fullcalendar/packages/core/locales/ar-dz.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-dz'] = factory()));
-}(this, function () { 'use strict';
-
- var arDz = {
- code: "ar-dz",
- week: {
- dow: 0,
- doy: 4 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- return arDz;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ar-kw.global.js b/library/fullcalendar/packages/core/locales/ar-kw.global.js
new file mode 100644
index 000000000..41a3c10d5
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-kw.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ar-kw',
+ week: {
+ dow: 0,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ar-kw.global.min.js b/library/fullcalendar/packages/core/locales/ar-kw.global.min.js
new file mode 100644
index 000000000..4be50b9df
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-kw.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ar-kw",week:{dow:0,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ar-kw.js b/library/fullcalendar/packages/core/locales/ar-kw.js
deleted file mode 100644
index 94c690014..000000000
--- a/library/fullcalendar/packages/core/locales/ar-kw.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-kw'] = factory()));
-}(this, function () { 'use strict';
-
- var arKw = {
- code: "ar-kw",
- week: {
- dow: 0,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- return arKw;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ar-ly.global.js b/library/fullcalendar/packages/core/locales/ar-ly.global.js
new file mode 100644
index 000000000..4d60121df
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-ly.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ar-ly',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ar-ly.global.min.js b/library/fullcalendar/packages/core/locales/ar-ly.global.min.js
new file mode 100644
index 000000000..5f8257659
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-ly.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ar-ly",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ar-ly.js b/library/fullcalendar/packages/core/locales/ar-ly.js
deleted file mode 100644
index e1c8aeb07..000000000
--- a/library/fullcalendar/packages/core/locales/ar-ly.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ly'] = factory()));
-}(this, function () { 'use strict';
-
- var arLy = {
- code: "ar-ly",
- week: {
- dow: 6,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- return arLy;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ar-ma.global.js b/library/fullcalendar/packages/core/locales/ar-ma.global.js
new file mode 100644
index 000000000..a38250dfb
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-ma.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ar-ma',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ar-ma.global.min.js b/library/fullcalendar/packages/core/locales/ar-ma.global.min.js
new file mode 100644
index 000000000..87f3c5cc0
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-ma.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ar-ma",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ar-ma.js b/library/fullcalendar/packages/core/locales/ar-ma.js
deleted file mode 100644
index 00cc7c679..000000000
--- a/library/fullcalendar/packages/core/locales/ar-ma.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-ma'] = factory()));
-}(this, function () { 'use strict';
-
- var arMa = {
- code: "ar-ma",
- week: {
- dow: 6,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- return arMa;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ar-sa.global.js b/library/fullcalendar/packages/core/locales/ar-sa.global.js
new file mode 100644
index 000000000..aca72e1dc
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-sa.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ar-sa',
+ week: {
+ dow: 0,
+ doy: 6, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ar-sa.global.min.js b/library/fullcalendar/packages/core/locales/ar-sa.global.min.js
new file mode 100644
index 000000000..e0e0753b0
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-sa.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ar-sa",week:{dow:0,doy:6},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ar-sa.js b/library/fullcalendar/packages/core/locales/ar-sa.js
deleted file mode 100644
index 0361f6d87..000000000
--- a/library/fullcalendar/packages/core/locales/ar-sa.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-sa'] = factory()));
-}(this, function () { 'use strict';
-
- var arSa = {
- code: "ar-sa",
- week: {
- dow: 0,
- doy: 6 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- return arSa;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ar-tn.global.js b/library/fullcalendar/packages/core/locales/ar-tn.global.js
new file mode 100644
index 000000000..20fbe7962
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-tn.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ar-tn',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ar-tn.global.min.js b/library/fullcalendar/packages/core/locales/ar-tn.global.min.js
new file mode 100644
index 000000000..d5a256ee0
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar-tn.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ar-tn",week:{dow:1,doy:4},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ar-tn.js b/library/fullcalendar/packages/core/locales/ar-tn.js
deleted file mode 100644
index 57a07f8f5..000000000
--- a/library/fullcalendar/packages/core/locales/ar-tn.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['ar-tn'] = factory()));
-}(this, function () { 'use strict';
-
- var arTn = {
- code: "ar-tn",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- return arTn;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ar.global.js b/library/fullcalendar/packages/core/locales/ar.global.js
new file mode 100644
index 000000000..8124d0280
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ar',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'السابق',
+ next: 'التالي',
+ today: 'اليوم',
+ month: 'شهر',
+ week: 'أسبوع',
+ day: 'يوم',
+ list: 'أجندة',
+ },
+ weekText: 'أسبوع',
+ allDayText: 'اليوم كله',
+ moreLinkText: 'أخرى',
+ noEventsText: 'أي أحداث لعرض',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ar.global.min.js b/library/fullcalendar/packages/core/locales/ar.global.min.js
new file mode 100644
index 000000000..92abaf1c6
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ar.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ar",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ar.js b/library/fullcalendar/packages/core/locales/ar.js
deleted file mode 100644
index f789afd15..000000000
--- a/library/fullcalendar/packages/core/locales/ar.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ar = factory()));
-}(this, function () { 'use strict';
-
- var ar = {
- code: "ar",
- week: {
- dow: 6,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "السابق",
- next: "التالي",
- today: "اليوم",
- month: "شهر",
- week: "أسبوع",
- day: "يوم",
- list: "أجندة"
- },
- weekLabel: "أسبوع",
- allDayText: "اليوم كله",
- eventLimitText: "أخرى",
- noEventsMessage: "أي أحداث لعرض"
- };
-
- return ar;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/az.global.js b/library/fullcalendar/packages/core/locales/az.global.js
new file mode 100644
index 000000000..5239e1b4b
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/az.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'az',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Əvvəl',
+ next: 'Sonra',
+ today: 'Bu Gün',
+ month: 'Ay',
+ week: 'Həftə',
+ day: 'Gün',
+ list: 'Gündəm',
+ },
+ weekText: 'Həftə',
+ allDayText: 'Bütün Gün',
+ moreLinkText(n) {
+ return '+ daha çox ' + n;
+ },
+ noEventsText: 'Göstərmək üçün hadisə yoxdur',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/az.global.min.js b/library/fullcalendar/packages/core/locales/az.global.min.js
new file mode 100644
index 000000000..9d52bec21
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/az.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"az",week:{dow:1,doy:4},buttonText:{prev:"Əvvəl",next:"Sonra",today:"Bu Gün",month:"Ay",week:"Həftə",day:"Gün",list:"Gündəm"},weekText:"Həftə",allDayText:"Bütün Gün",moreLinkText:e=>"+ daha çox "+e,noEventsText:"Göstərmək üçün hadisə yoxdur"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/az.js b/library/fullcalendar/packages/core/locales/az.js
deleted file mode 100644
index fbd2dc35c..000000000
--- a/library/fullcalendar/packages/core/locales/az.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.az = factory()));
-}(this, function () { 'use strict';
-
- var az = {
- code: "az",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Əvvəl",
- next: "Sonra",
- today: "Bu Gün",
- month: "Ay",
- week: "Həftə",
- day: "Gün",
- list: "Gündəm"
- },
- weekLabel: "Həftə",
- allDayText: "Bütün Gün",
- eventLimitText: function (n) {
- return "+ daha çox " + n;
- },
- noEventsMessage: "Göstərmək üçün hadisə yoxdur"
- };
-
- return az;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/bg.global.js b/library/fullcalendar/packages/core/locales/bg.global.js
new file mode 100644
index 000000000..aeb494975
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/bg.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'bg',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'назад',
+ next: 'напред',
+ today: 'днес',
+ month: 'Месец',
+ week: 'Седмица',
+ day: 'Ден',
+ list: 'График',
+ },
+ allDayText: 'Цял ден',
+ moreLinkText(n) {
+ return '+още ' + n;
+ },
+ noEventsText: 'Няма събития за показване',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/bg.global.min.js b/library/fullcalendar/packages/core/locales/bg.global.min.js
new file mode 100644
index 000000000..d919c704f
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/bg.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"bg",week:{dow:1,doy:7},buttonText:{prev:"назад",next:"напред",today:"днес",month:"Месец",week:"Седмица",day:"Ден",list:"График"},allDayText:"Цял ден",moreLinkText:e=>"+още "+e,noEventsText:"Няма събития за показване"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/bg.js b/library/fullcalendar/packages/core/locales/bg.js
deleted file mode 100644
index e7343a6c5..000000000
--- a/library/fullcalendar/packages/core/locales/bg.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bg = factory()));
-}(this, function () { 'use strict';
-
- var bg = {
- code: "bg",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "назад",
- next: "напред",
- today: "днес",
- month: "Месец",
- week: "Седмица",
- day: "Ден",
- list: "График"
- },
- allDayText: "Цял ден",
- eventLimitText: function (n) {
- return "+още " + n;
- },
- noEventsMessage: "Няма събития за показване"
- };
-
- return bg;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/bn.global.js b/library/fullcalendar/packages/core/locales/bn.global.js
new file mode 100644
index 000000000..f6d2ca483
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/bn.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'bn',
+ week: {
+ dow: 0,
+ doy: 6, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'পেছনে',
+ next: 'সামনে',
+ today: 'আজ',
+ month: 'মাস',
+ week: 'সপ্তাহ',
+ day: 'দিন',
+ list: 'তালিকা',
+ },
+ weekText: 'সপ্তাহ',
+ allDayText: 'সারাদিন',
+ moreLinkText(n) {
+ return '+অন্যান্য ' + n;
+ },
+ noEventsText: 'কোনো ইভেন্ট নেই',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/bn.global.min.js b/library/fullcalendar/packages/core/locales/bn.global.min.js
new file mode 100644
index 000000000..d41880bb3
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/bn.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"bn",week:{dow:0,doy:6},buttonText:{prev:"পেছনে",next:"সামনে",today:"আজ",month:"মাস",week:"সপ্তাহ",day:"দিন",list:"তালিকা"},weekText:"সপ্তাহ",allDayText:"সারাদিন",moreLinkText:e=>"+অন্যান্য "+e,noEventsText:"কোনো ইভেন্ট নেই"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/bs.global.js b/library/fullcalendar/packages/core/locales/bs.global.js
new file mode 100644
index 000000000..d7de947c2
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/bs.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'bs',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prošli',
+ next: 'Sljedeći',
+ today: 'Danas',
+ month: 'Mjesec',
+ week: 'Sedmica',
+ day: 'Dan',
+ list: 'Raspored',
+ },
+ weekText: 'Sed',
+ allDayText: 'Cijeli dan',
+ moreLinkText(n) {
+ return '+ još ' + n;
+ },
+ noEventsText: 'Nema događaja za prikazivanje',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/bs.global.min.js b/library/fullcalendar/packages/core/locales/bs.global.min.js
new file mode 100644
index 000000000..8815724cd
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/bs.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var a={code:"bs",week:{dow:1,doy:7},buttonText:{prev:"Prošli",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Sedmica",day:"Dan",list:"Raspored"},weekText:"Sed",allDayText:"Cijeli dan",moreLinkText:e=>"+ još "+e,noEventsText:"Nema događaja za prikazivanje"};FullCalendar.globalLocales.push(a)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/bs.js b/library/fullcalendar/packages/core/locales/bs.js
deleted file mode 100644
index d96b8adb3..000000000
--- a/library/fullcalendar/packages/core/locales/bs.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.bs = factory()));
-}(this, function () { 'use strict';
-
- var bs = {
- code: "bs",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Prošli",
- next: "Sljedeći",
- today: "Danas",
- month: "Mjesec",
- week: "Sedmica",
- day: "Dan",
- list: "Raspored"
- },
- weekLabel: "Sed",
- allDayText: "Cijeli dan",
- eventLimitText: function (n) {
- return "+ još " + n;
- },
- noEventsMessage: "Nema događaja za prikazivanje"
- };
-
- return bs;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ca.global.js b/library/fullcalendar/packages/core/locales/ca.global.js
new file mode 100644
index 000000000..b65d6630f
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ca.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ca',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Anterior',
+ next: 'Següent',
+ today: 'Avui',
+ month: 'Mes',
+ week: 'Setmana',
+ day: 'Dia',
+ list: 'Agenda',
+ },
+ weekText: 'Set',
+ allDayText: 'Tot el dia',
+ moreLinkText: 'més',
+ noEventsText: 'No hi ha esdeveniments per mostrar',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ca.global.min.js b/library/fullcalendar/packages/core/locales/ca.global.min.js
new file mode 100644
index 000000000..92b9047aa
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ca.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ca",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Següent",today:"Avui",month:"Mes",week:"Setmana",day:"Dia",list:"Agenda"},weekText:"Set",allDayText:"Tot el dia",moreLinkText:"més",noEventsText:"No hi ha esdeveniments per mostrar"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ca.js b/library/fullcalendar/packages/core/locales/ca.js
deleted file mode 100644
index d2d3e2aa7..000000000
--- a/library/fullcalendar/packages/core/locales/ca.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ca = factory()));
-}(this, function () { 'use strict';
-
- var ca = {
- code: "ca",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Anterior",
- next: "Següent",
- today: "Avui",
- month: "Mes",
- week: "Setmana",
- day: "Dia",
- list: "Agenda"
- },
- weekLabel: "Set",
- allDayText: "Tot el dia",
- eventLimitText: "més",
- noEventsMessage: "No hi ha esdeveniments per mostrar"
- };
-
- return ca;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/cs.global.js b/library/fullcalendar/packages/core/locales/cs.global.js
new file mode 100644
index 000000000..bd105ca3b
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/cs.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'cs',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Dříve',
+ next: 'Později',
+ today: 'Nyní',
+ month: 'Měsíc',
+ week: 'Týden',
+ day: 'Den',
+ list: 'Agenda',
+ },
+ weekText: 'Týd',
+ allDayText: 'Celý den',
+ moreLinkText(n) {
+ return '+další: ' + n;
+ },
+ noEventsText: 'Žádné akce k zobrazení',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/cs.global.min.js b/library/fullcalendar/packages/core/locales/cs.global.min.js
new file mode 100644
index 000000000..eaf37f366
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/cs.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var n={code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekText:"Týd",allDayText:"Celý den",moreLinkText:e=>"+další: "+e,noEventsText:"Žádné akce k zobrazení"};FullCalendar.globalLocales.push(n)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/cs.js b/library/fullcalendar/packages/core/locales/cs.js
deleted file mode 100644
index 2624e3607..000000000
--- a/library/fullcalendar/packages/core/locales/cs.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.cs = factory()));
-}(this, function () { 'use strict';
-
- var cs = {
- code: "cs",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Dříve",
- next: "Později",
- today: "Nyní",
- month: "Měsíc",
- week: "Týden",
- day: "Den",
- list: "Agenda"
- },
- weekLabel: "Týd",
- allDayText: "Celý den",
- eventLimitText: function (n) {
- return "+další: " + n;
- },
- noEventsMessage: "Žádné akce k zobrazení"
- };
-
- return cs;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/cy.global.js b/library/fullcalendar/packages/core/locales/cy.global.js
new file mode 100644
index 000000000..ac1e612ed
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/cy.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'cy',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Blaenorol',
+ next: 'Nesaf',
+ today: 'Heddiw',
+ year: 'Blwyddyn',
+ month: 'Mis',
+ week: 'Wythnos',
+ day: 'Dydd',
+ list: 'Rhestr',
+ },
+ weekText: 'Wythnos',
+ allDayText: 'Trwy\'r dydd',
+ moreLinkText: 'Mwy',
+ noEventsText: 'Dim digwyddiadau',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/cy.global.min.js b/library/fullcalendar/packages/core/locales/cy.global.min.js
new file mode 100644
index 000000000..2599b40dd
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/cy.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"cy",week:{dow:1,doy:4},buttonText:{prev:"Blaenorol",next:"Nesaf",today:"Heddiw",year:"Blwyddyn",month:"Mis",week:"Wythnos",day:"Dydd",list:"Rhestr"},weekText:"Wythnos",allDayText:"Trwy'r dydd",moreLinkText:"Mwy",noEventsText:"Dim digwyddiadau"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/da.global.js b/library/fullcalendar/packages/core/locales/da.global.js
new file mode 100644
index 000000000..b5e1e4095
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/da.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'da',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Forrige',
+ next: 'Næste',
+ today: 'I dag',
+ month: 'Måned',
+ week: 'Uge',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ weekText: 'Uge',
+ allDayText: 'Hele dagen',
+ moreLinkText: 'flere',
+ noEventsText: 'Ingen arrangementer at vise',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/da.global.min.js b/library/fullcalendar/packages/core/locales/da.global.min.js
new file mode 100644
index 000000000..907d0f989
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/da.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekText:"Uge",allDayText:"Hele dagen",moreLinkText:"flere",noEventsText:"Ingen arrangementer at vise"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/da.js b/library/fullcalendar/packages/core/locales/da.js
deleted file mode 100644
index 73d155929..000000000
--- a/library/fullcalendar/packages/core/locales/da.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.da = factory()));
-}(this, function () { 'use strict';
-
- var da = {
- code: "da",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Forrige",
- next: "Næste",
- today: "I dag",
- month: "Måned",
- week: "Uge",
- day: "Dag",
- list: "Agenda"
- },
- weekLabel: "Uge",
- allDayText: "Hele dagen",
- eventLimitText: "flere",
- noEventsMessage: "Ingen arrangementer at vise"
- };
-
- return da;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/de-at.global.js b/library/fullcalendar/packages/core/locales/de-at.global.js
new file mode 100644
index 000000000..1e449591d
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/de-at.global.js
@@ -0,0 +1,69 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ function affix(buttonText) {
+ return (buttonText === 'Tag' || buttonText === 'Monat') ? 'r' :
+ buttonText === 'Jahr' ? 's' : '';
+ }
+ var locale = {
+ code: 'de-at',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Zurück',
+ next: 'Vor',
+ today: 'Heute',
+ year: 'Jahr',
+ month: 'Monat',
+ week: 'Woche',
+ day: 'Tag',
+ list: 'Terminübersicht',
+ },
+ weekText: 'KW',
+ weekTextLong: 'Woche',
+ allDayText: 'Ganztägig',
+ moreLinkText(n) {
+ return '+ weitere ' + n;
+ },
+ noEventsText: 'Keine Ereignisse anzuzeigen',
+ buttonHints: {
+ prev(buttonText) {
+ return `Vorherige${affix(buttonText)} ${buttonText}`;
+ },
+ next(buttonText) {
+ return `Nächste${affix(buttonText)} ${buttonText}`;
+ },
+ today(buttonText) {
+ // → Heute, Diese Woche, Dieser Monat, Dieses Jahr
+ if (buttonText === 'Tag') {
+ return 'Heute';
+ }
+ return `Diese${affix(buttonText)} ${buttonText}`;
+ },
+ },
+ viewHint(buttonText) {
+ // → Tagesansicht, Wochenansicht, Monatsansicht, Jahresansicht
+ const glue = buttonText === 'Woche' ? 'n' : buttonText === 'Monat' ? 's' : 'es';
+ return buttonText + glue + 'ansicht';
+ },
+ navLinkHint: 'Gehe zu $0',
+ moreLinkHint(eventCnt) {
+ return 'Zeige ' + (eventCnt === 1 ?
+ 'ein weiteres Ereignis' :
+ eventCnt + ' weitere Ereignisse');
+ },
+ closeHint: 'Schließen',
+ timeHint: 'Uhrzeit',
+ eventHint: 'Ereignis',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/de-at.global.min.js b/library/fullcalendar/packages/core/locales/de-at.global.min.js
new file mode 100644
index 000000000..c9eff3f67
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/de-at.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";function t(e){return"Tag"===e||"Monat"===e?"r":"Jahr"===e?"s":""}var n={code:"de-at",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekText:"KW",weekTextLong:"Woche",allDayText:"Ganztägig",moreLinkText:e=>"+ weitere "+e,noEventsText:"Keine Ereignisse anzuzeigen",buttonHints:{prev:e=>`Vorherige${t(e)} ${e}`,next:e=>`Nächste${t(e)} ${e}`,today:e=>"Tag"===e?"Heute":`Diese${t(e)} ${e}`},viewHint:e=>e+("Woche"===e?"n":"Monat"===e?"s":"es")+"ansicht",navLinkHint:"Gehe zu $0",moreLinkHint:e=>"Zeige "+(1===e?"ein weiteres Ereignis":e+" weitere Ereignisse"),closeHint:"Schließen",timeHint:"Uhrzeit",eventHint:"Ereignis"};FullCalendar.globalLocales.push(n)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/de.global.js b/library/fullcalendar/packages/core/locales/de.global.js
new file mode 100644
index 000000000..09d1b3074
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/de.global.js
@@ -0,0 +1,69 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ function affix(buttonText) {
+ return (buttonText === 'Tag' || buttonText === 'Monat') ? 'r' :
+ buttonText === 'Jahr' ? 's' : '';
+ }
+ var locale = {
+ code: 'de',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Zurück',
+ next: 'Vor',
+ today: 'Heute',
+ year: 'Jahr',
+ month: 'Monat',
+ week: 'Woche',
+ day: 'Tag',
+ list: 'Terminübersicht',
+ },
+ weekText: 'KW',
+ weekTextLong: 'Woche',
+ allDayText: 'Ganztägig',
+ moreLinkText(n) {
+ return '+ weitere ' + n;
+ },
+ noEventsText: 'Keine Ereignisse anzuzeigen',
+ buttonHints: {
+ prev(buttonText) {
+ return `Vorherige${affix(buttonText)} ${buttonText}`;
+ },
+ next(buttonText) {
+ return `Nächste${affix(buttonText)} ${buttonText}`;
+ },
+ today(buttonText) {
+ // → Heute, Diese Woche, Dieser Monat, Dieses Jahr
+ if (buttonText === 'Tag') {
+ return 'Heute';
+ }
+ return `Diese${affix(buttonText)} ${buttonText}`;
+ },
+ },
+ viewHint(buttonText) {
+ // → Tagesansicht, Wochenansicht, Monatsansicht, Jahresansicht
+ const glue = buttonText === 'Woche' ? 'n' : buttonText === 'Monat' ? 's' : 'es';
+ return buttonText + glue + 'ansicht';
+ },
+ navLinkHint: 'Gehe zu $0',
+ moreLinkHint(eventCnt) {
+ return 'Zeige ' + (eventCnt === 1 ?
+ 'ein weiteres Ereignis' :
+ eventCnt + ' weitere Ereignisse');
+ },
+ closeHint: 'Schließen',
+ timeHint: 'Uhrzeit',
+ eventHint: 'Ereignis',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/de.global.min.js b/library/fullcalendar/packages/core/locales/de.global.min.js
new file mode 100644
index 000000000..907861094
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/de.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";function t(e){return"Tag"===e||"Monat"===e?"r":"Jahr"===e?"s":""}var n={code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekText:"KW",weekTextLong:"Woche",allDayText:"Ganztägig",moreLinkText:e=>"+ weitere "+e,noEventsText:"Keine Ereignisse anzuzeigen",buttonHints:{prev:e=>`Vorherige${t(e)} ${e}`,next:e=>`Nächste${t(e)} ${e}`,today:e=>"Tag"===e?"Heute":`Diese${t(e)} ${e}`},viewHint:e=>e+("Woche"===e?"n":"Monat"===e?"s":"es")+"ansicht",navLinkHint:"Gehe zu $0",moreLinkHint:e=>"Zeige "+(1===e?"ein weiteres Ereignis":e+" weitere Ereignisse"),closeHint:"Schließen",timeHint:"Uhrzeit",eventHint:"Ereignis"};FullCalendar.globalLocales.push(n)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/de.js b/library/fullcalendar/packages/core/locales/de.js
deleted file mode 100644
index ab5a815a0..000000000
--- a/library/fullcalendar/packages/core/locales/de.js
+++ /dev/null
@@ -1,33 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.de = factory()));
-}(this, function () { 'use strict';
-
- var de = {
- code: "de",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Zurück",
- next: "Vor",
- today: "Heute",
- year: "Jahr",
- month: "Monat",
- week: "Woche",
- day: "Tag",
- list: "Terminübersicht"
- },
- weekLabel: "KW",
- allDayText: "Ganztägig",
- eventLimitText: function (n) {
- return "+ weitere " + n;
- },
- noEventsMessage: "Keine Ereignisse anzuzeigen"
- };
-
- return de;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/el.global.js b/library/fullcalendar/packages/core/locales/el.global.js
new file mode 100644
index 000000000..8b6a656c7
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/el.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'el',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Προηγούμενος',
+ next: 'Επόμενος',
+ today: 'Σήμερα',
+ month: 'Μήνας',
+ week: 'Εβδομάδα',
+ day: 'Ημέρα',
+ list: 'Ατζέντα',
+ },
+ weekText: 'Εβδ',
+ allDayText: 'Ολοήμερο',
+ moreLinkText: 'περισσότερα',
+ noEventsText: 'Δεν υπάρχουν γεγονότα προς εμφάνιση',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/el.global.min.js b/library/fullcalendar/packages/core/locales/el.global.min.js
new file mode 100644
index 000000000..f976bd2fd
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/el.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"el",week:{dow:1,doy:4},buttonText:{prev:"Προηγούμενος",next:"Επόμενος",today:"Σήμερα",month:"Μήνας",week:"Εβδομάδα",day:"Ημέρα",list:"Ατζέντα"},weekText:"Εβδ",allDayText:"Ολοήμερο",moreLinkText:"περισσότερα",noEventsText:"Δεν υπάρχουν γεγονότα προς εμφάνιση"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/el.js b/library/fullcalendar/packages/core/locales/el.js
deleted file mode 100644
index cdc10a66e..000000000
--- a/library/fullcalendar/packages/core/locales/el.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.el = factory()));
-}(this, function () { 'use strict';
-
- var el = {
- code: "el",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4st is the first week of the year.
- },
- buttonText: {
- prev: "Προηγούμενος",
- next: "Επόμενος",
- today: "Σήμερα",
- month: "Μήνας",
- week: "Εβδομάδα",
- day: "Ημέρα",
- list: "Ατζέντα"
- },
- weekLabel: "Εβδ",
- allDayText: "Ολοήμερο",
- eventLimitText: "περισσότερα",
- noEventsMessage: "Δεν υπάρχουν γεγονότα προς εμφάνιση"
- };
-
- return el;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/en-au.global.js b/library/fullcalendar/packages/core/locales/en-au.global.js
new file mode 100644
index 000000000..74464ebe9
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/en-au.global.js
@@ -0,0 +1,29 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'en-au',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonHints: {
+ prev: 'Previous $0',
+ next: 'Next $0',
+ today: 'This $0',
+ },
+ viewHint: '$0 view',
+ navLinkHint: 'Go to $0',
+ moreLinkHint(eventCnt) {
+ return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
+ },
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/en-au.global.min.js b/library/fullcalendar/packages/core/locales/en-au.global.min.js
new file mode 100644
index 000000000..4a192f9cf
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/en-au.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var n={code:"en-au",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:e=>`Show ${e} more event${1===e?"":"s"}`};FullCalendar.globalLocales.push(n)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/en-au.js b/library/fullcalendar/packages/core/locales/en-au.js
deleted file mode 100644
index be10bfb66..000000000
--- a/library/fullcalendar/packages/core/locales/en-au.js
+++ /dev/null
@@ -1,17 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-au'] = factory()));
-}(this, function () { 'use strict';
-
- var enAu = {
- code: "en-au",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- }
- };
-
- return enAu;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/en-gb.global.js b/library/fullcalendar/packages/core/locales/en-gb.global.js
new file mode 100644
index 000000000..dd325f55d
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/en-gb.global.js
@@ -0,0 +1,29 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'en-gb',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonHints: {
+ prev: 'Previous $0',
+ next: 'Next $0',
+ today: 'This $0',
+ },
+ viewHint: '$0 view',
+ navLinkHint: 'Go to $0',
+ moreLinkHint(eventCnt) {
+ return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
+ },
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/en-gb.global.min.js b/library/fullcalendar/packages/core/locales/en-gb.global.min.js
new file mode 100644
index 000000000..1157e7b6c
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/en-gb.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var n={code:"en-gb",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:e=>`Show ${e} more event${1===e?"":"s"}`};FullCalendar.globalLocales.push(n)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/en-gb.js b/library/fullcalendar/packages/core/locales/en-gb.js
deleted file mode 100644
index 8a4a84e6b..000000000
--- a/library/fullcalendar/packages/core/locales/en-gb.js
+++ /dev/null
@@ -1,17 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-gb'] = factory()));
-}(this, function () { 'use strict';
-
- var enGb = {
- code: "en-gb",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- }
- };
-
- return enGb;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/en-nz.global.js b/library/fullcalendar/packages/core/locales/en-nz.global.js
new file mode 100644
index 000000000..78b180a2a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/en-nz.global.js
@@ -0,0 +1,29 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'en-nz',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonHints: {
+ prev: 'Previous $0',
+ next: 'Next $0',
+ today: 'This $0',
+ },
+ viewHint: '$0 view',
+ navLinkHint: 'Go to $0',
+ moreLinkHint(eventCnt) {
+ return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`;
+ },
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/en-nz.global.min.js b/library/fullcalendar/packages/core/locales/en-nz.global.min.js
new file mode 100644
index 000000000..03bf9b01a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/en-nz.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var n={code:"en-nz",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:e=>`Show ${e} more event${1===e?"":"s"}`};FullCalendar.globalLocales.push(n)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/en-nz.js b/library/fullcalendar/packages/core/locales/en-nz.js
deleted file mode 100644
index df56c1455..000000000
--- a/library/fullcalendar/packages/core/locales/en-nz.js
+++ /dev/null
@@ -1,17 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['en-nz'] = factory()));
-}(this, function () { 'use strict';
-
- var enNz = {
- code: "en-nz",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- }
- };
-
- return enNz;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/eo.global.js b/library/fullcalendar/packages/core/locales/eo.global.js
new file mode 100644
index 000000000..92ac916bd
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/eo.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'eo',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Antaŭa',
+ next: 'Sekva',
+ today: 'Hodiaŭ',
+ month: 'Monato',
+ week: 'Semajno',
+ day: 'Tago',
+ list: 'Tagordo',
+ },
+ weekText: 'Sm',
+ allDayText: 'Tuta tago',
+ moreLinkText: 'pli',
+ noEventsText: 'Neniuj eventoj por montri',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/eo.global.min.js b/library/fullcalendar/packages/core/locales/eo.global.min.js
new file mode 100644
index 000000000..fc77391ee
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/eo.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"eo",week:{dow:1,doy:4},buttonText:{prev:"Antaŭa",next:"Sekva",today:"Hodiaŭ",month:"Monato",week:"Semajno",day:"Tago",list:"Tagordo"},weekText:"Sm",allDayText:"Tuta tago",moreLinkText:"pli",noEventsText:"Neniuj eventoj por montri"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/es-us.global.js b/library/fullcalendar/packages/core/locales/es-us.global.js
new file mode 100644
index 000000000..e6dfe9612
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/es-us.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'es',
+ week: {
+ dow: 0,
+ doy: 6, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Ant',
+ next: 'Sig',
+ today: 'Hoy',
+ month: 'Mes',
+ week: 'Semana',
+ day: 'Día',
+ list: 'Agenda',
+ },
+ weekText: 'Sm',
+ allDayText: 'Todo el día',
+ moreLinkText: 'más',
+ noEventsText: 'No hay eventos para mostrar',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/es-us.global.min.js b/library/fullcalendar/packages/core/locales/es-us.global.min.js
new file mode 100644
index 000000000..e66c8273b
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/es-us.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"es",week:{dow:0,doy:6},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},weekText:"Sm",allDayText:"Todo el día",moreLinkText:"más",noEventsText:"No hay eventos para mostrar"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/es-us.js b/library/fullcalendar/packages/core/locales/es-us.js
deleted file mode 100644
index 1efa89a4d..000000000
--- a/library/fullcalendar/packages/core/locales/es-us.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['es-us'] = factory()));
-}(this, function () { 'use strict';
-
- var esUs = {
- code: "es",
- week: {
- dow: 0,
- doy: 6 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Ant",
- next: "Sig",
- today: "Hoy",
- month: "Mes",
- week: "Semana",
- day: "Día",
- list: "Agenda"
- },
- weekLabel: "Sm",
- allDayHtml: "Todo<br/>el día",
- eventLimitText: "más",
- noEventsMessage: "No hay eventos para mostrar"
- };
-
- return esUs;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/es.global.js b/library/fullcalendar/packages/core/locales/es.global.js
new file mode 100644
index 000000000..ab2740f5f
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/es.global.js
@@ -0,0 +1,51 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'es',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Ant',
+ next: 'Sig',
+ today: 'Hoy',
+ month: 'Mes',
+ week: 'Semana',
+ day: 'Día',
+ list: 'Agenda',
+ },
+ buttonHints: {
+ prev: '$0 antes',
+ next: '$0 siguiente',
+ today(buttonText) {
+ return (buttonText === 'Día') ? 'Hoy' :
+ ((buttonText === 'Semana') ? 'Esta' : 'Este') + ' ' + buttonText.toLocaleLowerCase();
+ },
+ },
+ viewHint(buttonText) {
+ return 'Vista ' + (buttonText === 'Semana' ? 'de la' : 'del') + ' ' + buttonText.toLocaleLowerCase();
+ },
+ weekText: 'Sm',
+ weekTextLong: 'Semana',
+ allDayText: 'Todo el día',
+ moreLinkText: 'más',
+ moreLinkHint(eventCnt) {
+ return `Mostrar ${eventCnt} eventos más`;
+ },
+ noEventsText: 'No hay eventos para mostrar',
+ navLinkHint: 'Ir al $0',
+ closeHint: 'Cerrar',
+ timeHint: 'La hora',
+ eventHint: 'Evento',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/es.global.min.js b/library/fullcalendar/packages/core/locales/es.global.min.js
new file mode 100644
index 000000000..b474665b3
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/es.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"es",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Sig",today:"Hoy",month:"Mes",week:"Semana",day:"Día",list:"Agenda"},buttonHints:{prev:"$0 antes",next:"$0 siguiente",today:e=>"Día"===e?"Hoy":("Semana"===e?"Esta":"Este")+" "+e.toLocaleLowerCase()},viewHint:e=>"Vista "+("Semana"===e?"de la":"del")+" "+e.toLocaleLowerCase(),weekText:"Sm",weekTextLong:"Semana",allDayText:"Todo el día",moreLinkText:"más",moreLinkHint:e=>`Mostrar ${e} eventos más`,noEventsText:"No hay eventos para mostrar",navLinkHint:"Ir al $0",closeHint:"Cerrar",timeHint:"La hora",eventHint:"Evento"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/es.js b/library/fullcalendar/packages/core/locales/es.js
deleted file mode 100644
index bfd9af4c6..000000000
--- a/library/fullcalendar/packages/core/locales/es.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.es = factory()));
-}(this, function () { 'use strict';
-
- var es = {
- code: "es",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Ant",
- next: "Sig",
- today: "Hoy",
- month: "Mes",
- week: "Semana",
- day: "Día",
- list: "Agenda"
- },
- weekLabel: "Sm",
- allDayHtml: "Todo<br/>el día",
- eventLimitText: "más",
- noEventsMessage: "No hay eventos para mostrar"
- };
-
- return es;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/et.global.js b/library/fullcalendar/packages/core/locales/et.global.js
new file mode 100644
index 000000000..7c6afd619
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/et.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'et',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Eelnev',
+ next: 'Järgnev',
+ today: 'Täna',
+ month: 'Kuu',
+ week: 'Nädal',
+ day: 'Päev',
+ list: 'Päevakord',
+ },
+ weekText: 'näd',
+ allDayText: 'Kogu päev',
+ moreLinkText(n) {
+ return '+ veel ' + n;
+ },
+ noEventsText: 'Kuvamiseks puuduvad sündmused',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/et.global.min.js b/library/fullcalendar/packages/core/locales/et.global.min.js
new file mode 100644
index 000000000..5da61b489
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/et.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"et",week:{dow:1,doy:4},buttonText:{prev:"Eelnev",next:"Järgnev",today:"Täna",month:"Kuu",week:"Nädal",day:"Päev",list:"Päevakord"},weekText:"näd",allDayText:"Kogu päev",moreLinkText:e=>"+ veel "+e,noEventsText:"Kuvamiseks puuduvad sündmused"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/et.js b/library/fullcalendar/packages/core/locales/et.js
deleted file mode 100644
index c44fcaec9..000000000
--- a/library/fullcalendar/packages/core/locales/et.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.et = factory()));
-}(this, function () { 'use strict';
-
- var et = {
- code: "et",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Eelnev",
- next: "Järgnev",
- today: "Täna",
- month: "Kuu",
- week: "Nädal",
- day: "Päev",
- list: "Päevakord"
- },
- weekLabel: "näd",
- allDayText: "Kogu päev",
- eventLimitText: function (n) {
- return "+ veel " + n;
- },
- noEventsMessage: "Kuvamiseks puuduvad sündmused"
- };
-
- return et;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/eu.global.js b/library/fullcalendar/packages/core/locales/eu.global.js
new file mode 100644
index 000000000..f5621bcea
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/eu.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'eu',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Aur',
+ next: 'Hur',
+ today: 'Gaur',
+ month: 'Hilabetea',
+ week: 'Astea',
+ day: 'Eguna',
+ list: 'Agenda',
+ },
+ weekText: 'As',
+ allDayText: 'Egun osoa',
+ moreLinkText: 'gehiago',
+ noEventsText: 'Ez dago ekitaldirik erakusteko',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/eu.global.min.js b/library/fullcalendar/packages/core/locales/eu.global.min.js
new file mode 100644
index 000000000..30e38e562
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/eu.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekText:"As",allDayText:"Egun osoa",moreLinkText:"gehiago",noEventsText:"Ez dago ekitaldirik erakusteko"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/eu.js b/library/fullcalendar/packages/core/locales/eu.js
deleted file mode 100644
index 91903aaaf..000000000
--- a/library/fullcalendar/packages/core/locales/eu.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.eu = factory()));
-}(this, function () { 'use strict';
-
- var eu = {
- code: "eu",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Aur",
- next: "Hur",
- today: "Gaur",
- month: "Hilabetea",
- week: "Astea",
- day: "Eguna",
- list: "Agenda"
- },
- weekLabel: "As",
- allDayHtml: "Egun<br/>osoa",
- eventLimitText: "gehiago",
- noEventsMessage: "Ez dago ekitaldirik erakusteko"
- };
-
- return eu;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/fa.global.js b/library/fullcalendar/packages/core/locales/fa.global.js
new file mode 100644
index 000000000..3416dee17
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fa.global.js
@@ -0,0 +1,35 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'fa',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'قبلی',
+ next: 'بعدی',
+ today: 'امروز',
+ month: 'ماه',
+ week: 'هفته',
+ day: 'روز',
+ list: 'برنامه',
+ },
+ weekText: 'هف',
+ allDayText: 'تمام روز',
+ moreLinkText(n) {
+ return 'بیش از ' + n;
+ },
+ noEventsText: 'هیچ رویدادی به نمایش',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/fa.global.min.js b/library/fullcalendar/packages/core/locales/fa.global.min.js
new file mode 100644
index 000000000..ad3504b72
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fa.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"fa",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekText:"هف",allDayText:"تمام روز",moreLinkText:e=>"بیش از "+e,noEventsText:"هیچ رویدادی به نمایش"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/fa.js b/library/fullcalendar/packages/core/locales/fa.js
deleted file mode 100644
index 031fc7b30..000000000
--- a/library/fullcalendar/packages/core/locales/fa.js
+++ /dev/null
@@ -1,33 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fa = factory()));
-}(this, function () { 'use strict';
-
- var fa = {
- code: "fa",
- week: {
- dow: 6,
- doy: 12 // The week that contains Jan 1st is the first week of the year.
- },
- dir: 'rtl',
- buttonText: {
- prev: "قبلی",
- next: "بعدی",
- today: "امروز",
- month: "ماه",
- week: "هفته",
- day: "روز",
- list: "برنامه"
- },
- weekLabel: "هف",
- allDayText: "تمام روز",
- eventLimitText: function (n) {
- return "بیش از " + n;
- },
- noEventsMessage: "هیچ رویدادی به نمایش"
- };
-
- return fa;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/fi.global.js b/library/fullcalendar/packages/core/locales/fi.global.js
new file mode 100644
index 000000000..9fa2cfa92
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fi.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'fi',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Edellinen',
+ next: 'Seuraava',
+ today: 'Tänään',
+ month: 'Kuukausi',
+ week: 'Viikko',
+ day: 'Päivä',
+ list: 'Tapahtumat',
+ },
+ weekText: 'Vk',
+ allDayText: 'Koko päivä',
+ moreLinkText: 'lisää',
+ noEventsText: 'Ei näytettäviä tapahtumia',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/fi.global.min.js b/library/fullcalendar/packages/core/locales/fi.global.min.js
new file mode 100644
index 000000000..43fe9ec5d
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fi.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekText:"Vk",allDayText:"Koko päivä",moreLinkText:"lisää",noEventsText:"Ei näytettäviä tapahtumia"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/fi.js b/library/fullcalendar/packages/core/locales/fi.js
deleted file mode 100644
index 3912845cf..000000000
--- a/library/fullcalendar/packages/core/locales/fi.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fi = factory()));
-}(this, function () { 'use strict';
-
- var fi = {
- code: "fi",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Edellinen",
- next: "Seuraava",
- today: "Tänään",
- month: "Kuukausi",
- week: "Viikko",
- day: "Päivä",
- list: "Tapahtumat"
- },
- weekLabel: "Vk",
- allDayText: "Koko päivä",
- eventLimitText: "lisää",
- noEventsMessage: "Ei näytettäviä tapahtumia"
- };
-
- return fi;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/fr-ca.global.js b/library/fullcalendar/packages/core/locales/fr-ca.global.js
new file mode 100644
index 000000000..86d9b06ba
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fr-ca.global.js
@@ -0,0 +1,29 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'fr',
+ buttonText: {
+ prev: 'Précédent',
+ next: 'Suivant',
+ today: 'Aujourd\'hui',
+ year: 'Année',
+ month: 'Mois',
+ week: 'Semaine',
+ day: 'Jour',
+ list: 'Mon planning',
+ },
+ weekText: 'Sem.',
+ allDayText: 'Toute la journée',
+ moreLinkText: 'en plus',
+ noEventsText: 'Aucun événement à afficher',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/fr-ca.global.min.js b/library/fullcalendar/packages/core/locales/fr-ca.global.min.js
new file mode 100644
index 000000000..c859af816
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fr-ca.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"fr",buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekText:"Sem.",allDayText:"Toute la journée",moreLinkText:"en plus",noEventsText:"Aucun événement à afficher"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/fr-ca.js b/library/fullcalendar/packages/core/locales/fr-ca.js
deleted file mode 100644
index d554c1408..000000000
--- a/library/fullcalendar/packages/core/locales/fr-ca.js
+++ /dev/null
@@ -1,27 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ca'] = factory()));
-}(this, function () { 'use strict';
-
- var frCa = {
- code: "fr",
- buttonText: {
- prev: "Précédent",
- next: "Suivant",
- today: "Aujourd'hui",
- year: "Année",
- month: "Mois",
- week: "Semaine",
- day: "Jour",
- list: "Mon planning"
- },
- weekLabel: "Sem.",
- allDayHtml: "Toute la<br/>journée",
- eventLimitText: "en plus",
- noEventsMessage: "Aucun événement à afficher"
- };
-
- return frCa;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/fr-ch.global.js b/library/fullcalendar/packages/core/locales/fr-ch.global.js
new file mode 100644
index 000000000..7291bc156
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fr-ch.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'fr-ch',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Précédent',
+ next: 'Suivant',
+ today: 'Courant',
+ year: 'Année',
+ month: 'Mois',
+ week: 'Semaine',
+ day: 'Jour',
+ list: 'Mon planning',
+ },
+ weekText: 'Sm',
+ allDayText: 'Toute la journée',
+ moreLinkText: 'en plus',
+ noEventsText: 'Aucun événement à afficher',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/fr-ch.global.min.js b/library/fullcalendar/packages/core/locales/fr-ch.global.min.js
new file mode 100644
index 000000000..154dd9340
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fr-ch.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"fr-ch",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Courant",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Mon planning"},weekText:"Sm",allDayText:"Toute la journée",moreLinkText:"en plus",noEventsText:"Aucun événement à afficher"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/fr-ch.js b/library/fullcalendar/packages/core/locales/fr-ch.js
deleted file mode 100644
index 358b8bf31..000000000
--- a/library/fullcalendar/packages/core/locales/fr-ch.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['fr-ch'] = factory()));
-}(this, function () { 'use strict';
-
- var frCh = {
- code: "fr-ch",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Précédent",
- next: "Suivant",
- today: "Courant",
- year: "Année",
- month: "Mois",
- week: "Semaine",
- day: "Jour",
- list: "Mon planning"
- },
- weekLabel: "Sm",
- allDayHtml: "Toute la<br/>journée",
- eventLimitText: "en plus",
- noEventsMessage: "Aucun événement à afficher"
- };
-
- return frCh;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/fr.global.js b/library/fullcalendar/packages/core/locales/fr.global.js
new file mode 100644
index 000000000..d63b2e5dc
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fr.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'fr',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Précédent',
+ next: 'Suivant',
+ today: 'Aujourd\'hui',
+ year: 'Année',
+ month: 'Mois',
+ week: 'Semaine',
+ day: 'Jour',
+ list: 'Planning',
+ },
+ weekText: 'Sem.',
+ allDayText: 'Toute la journée',
+ moreLinkText: 'en plus',
+ noEventsText: 'Aucun événement à afficher',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/fr.global.min.js b/library/fullcalendar/packages/core/locales/fr.global.min.js
new file mode 100644
index 000000000..68968a1eb
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/fr.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"fr",week:{dow:1,doy:4},buttonText:{prev:"Précédent",next:"Suivant",today:"Aujourd'hui",year:"Année",month:"Mois",week:"Semaine",day:"Jour",list:"Planning"},weekText:"Sem.",allDayText:"Toute la journée",moreLinkText:"en plus",noEventsText:"Aucun événement à afficher"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/fr.js b/library/fullcalendar/packages/core/locales/fr.js
deleted file mode 100644
index 4760a71a9..000000000
--- a/library/fullcalendar/packages/core/locales/fr.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.fr = factory()));
-}(this, function () { 'use strict';
-
- var fr = {
- code: "fr",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Précédent",
- next: "Suivant",
- today: "Aujourd'hui",
- year: "Année",
- month: "Mois",
- week: "Semaine",
- day: "Jour",
- list: "Planning"
- },
- weekLabel: "Sem.",
- allDayHtml: "Toute la<br/>journée",
- eventLimitText: "en plus",
- noEventsMessage: "Aucun événement à afficher"
- };
-
- return fr;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/gl.global.js b/library/fullcalendar/packages/core/locales/gl.global.js
new file mode 100644
index 000000000..de8ed6996
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/gl.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'gl',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Ant',
+ next: 'Seg',
+ today: 'Hoxe',
+ month: 'Mes',
+ week: 'Semana',
+ day: 'Día',
+ list: 'Axenda',
+ },
+ weekText: 'Sm',
+ allDayText: 'Todo o día',
+ moreLinkText: 'máis',
+ noEventsText: 'Non hai eventos para amosar',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/gl.global.min.js b/library/fullcalendar/packages/core/locales/gl.global.min.js
new file mode 100644
index 000000000..1bae51a3b
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/gl.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"gl",week:{dow:1,doy:4},buttonText:{prev:"Ant",next:"Seg",today:"Hoxe",month:"Mes",week:"Semana",day:"Día",list:"Axenda"},weekText:"Sm",allDayText:"Todo o día",moreLinkText:"máis",noEventsText:"Non hai eventos para amosar"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/gl.js b/library/fullcalendar/packages/core/locales/gl.js
deleted file mode 100644
index 721a6a89b..000000000
--- a/library/fullcalendar/packages/core/locales/gl.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.gl = factory()));
-}(this, function () { 'use strict';
-
- var gl = {
- code: "gl",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Ant",
- next: "Seg",
- today: "Hoxe",
- month: "Mes",
- week: "Semana",
- day: "Día",
- list: "Axenda"
- },
- weekLabel: "Sm",
- allDayHtml: "Todo<br/>o día",
- eventLimitText: "máis",
- noEventsMessage: "Non hai eventos para amosar"
- };
-
- return gl;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/he.global.js b/library/fullcalendar/packages/core/locales/he.global.js
new file mode 100644
index 000000000..1b6dd6acf
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/he.global.js
@@ -0,0 +1,29 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'he',
+ direction: 'rtl',
+ buttonText: {
+ prev: 'הקודם',
+ next: 'הבא',
+ today: 'היום',
+ month: 'חודש',
+ week: 'שבוע',
+ day: 'יום',
+ list: 'סדר יום',
+ },
+ allDayText: 'כל היום',
+ moreLinkText: 'אחר',
+ noEventsText: 'אין אירועים להצגה',
+ weekText: 'שבוע',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/he.global.min.js b/library/fullcalendar/packages/core/locales/he.global.min.js
new file mode 100644
index 000000000..8f8f4bd78
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/he.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"he",direction:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",moreLinkText:"אחר",noEventsText:"אין אירועים להצגה",weekText:"שבוע"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/he.js b/library/fullcalendar/packages/core/locales/he.js
deleted file mode 100644
index 3521d9e33..000000000
--- a/library/fullcalendar/packages/core/locales/he.js
+++ /dev/null
@@ -1,27 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.he = factory()));
-}(this, function () { 'use strict';
-
- var he = {
- code: "he",
- dir: 'rtl',
- buttonText: {
- prev: "הקודם",
- next: "הבא",
- today: "היום",
- month: "חודש",
- week: "שבוע",
- day: "יום",
- list: "סדר יום"
- },
- allDayText: "כל היום",
- eventLimitText: "אחר",
- noEventsMessage: "אין אירועים להצגה",
- weekLabel: "שבוע"
- };
-
- return he;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/hi.global.js b/library/fullcalendar/packages/core/locales/hi.global.js
new file mode 100644
index 000000000..a63d5d790
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/hi.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'hi',
+ week: {
+ dow: 0,
+ doy: 6, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'पिछला',
+ next: 'अगला',
+ today: 'आज',
+ month: 'महीना',
+ week: 'सप्ताह',
+ day: 'दिन',
+ list: 'कार्यसूची',
+ },
+ weekText: 'हफ्ता',
+ allDayText: 'सभी दिन',
+ moreLinkText(n) {
+ return '+अधिक ' + n;
+ },
+ noEventsText: 'कोई घटनाओं को प्रदर्शित करने के लिए',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/hi.global.min.js b/library/fullcalendar/packages/core/locales/hi.global.min.js
new file mode 100644
index 000000000..ef318e488
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/hi.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"hi",week:{dow:0,doy:6},buttonText:{prev:"पिछला",next:"अगला",today:"आज",month:"महीना",week:"सप्ताह",day:"दिन",list:"कार्यसूची"},weekText:"हफ्ता",allDayText:"सभी दिन",moreLinkText:e=>"+अधिक "+e,noEventsText:"कोई घटनाओं को प्रदर्शित करने के लिए"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/hi.js b/library/fullcalendar/packages/core/locales/hi.js
deleted file mode 100644
index 15348e697..000000000
--- a/library/fullcalendar/packages/core/locales/hi.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hi = factory()));
-}(this, function () { 'use strict';
-
- var hi = {
- code: "hi",
- week: {
- dow: 0,
- doy: 6 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "पिछला",
- next: "अगला",
- today: "आज",
- month: "महीना",
- week: "सप्ताह",
- day: "दिन",
- list: "कार्यसूची"
- },
- weekLabel: "हफ्ता",
- allDayText: "सभी दिन",
- eventLimitText: function (n) {
- return "+अधिक " + n;
- },
- noEventsMessage: "कोई घटनाओं को प्रदर्शित करने के लिए"
- };
-
- return hi;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/hr.global.js b/library/fullcalendar/packages/core/locales/hr.global.js
new file mode 100644
index 000000000..7a1e5c12b
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/hr.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'hr',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prijašnji',
+ next: 'Sljedeći',
+ today: 'Danas',
+ month: 'Mjesec',
+ week: 'Tjedan',
+ day: 'Dan',
+ list: 'Raspored',
+ },
+ weekText: 'Tje',
+ allDayText: 'Cijeli dan',
+ moreLinkText(n) {
+ return '+ još ' + n;
+ },
+ noEventsText: 'Nema događaja za prikaz',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/hr.global.min.js b/library/fullcalendar/packages/core/locales/hr.global.min.js
new file mode 100644
index 000000000..e28d75b96
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/hr.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var a={code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekText:"Tje",allDayText:"Cijeli dan",moreLinkText:e=>"+ još "+e,noEventsText:"Nema događaja za prikaz"};FullCalendar.globalLocales.push(a)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/hr.js b/library/fullcalendar/packages/core/locales/hr.js
deleted file mode 100644
index 295b48566..000000000
--- a/library/fullcalendar/packages/core/locales/hr.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hr = factory()));
-}(this, function () { 'use strict';
-
- var hr = {
- code: "hr",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Prijašnji",
- next: "Sljedeći",
- today: "Danas",
- month: "Mjesec",
- week: "Tjedan",
- day: "Dan",
- list: "Raspored"
- },
- weekLabel: "Tje",
- allDayText: "Cijeli dan",
- eventLimitText: function (n) {
- return "+ još " + n;
- },
- noEventsMessage: "Nema događaja za prikaz"
- };
-
- return hr;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/hu.global.js b/library/fullcalendar/packages/core/locales/hu.global.js
new file mode 100644
index 000000000..d4f5a3f2d
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/hu.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'hu',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'vissza',
+ next: 'előre',
+ today: 'ma',
+ month: 'Hónap',
+ week: 'Hét',
+ day: 'Nap',
+ list: 'Lista',
+ },
+ weekText: 'Hét',
+ allDayText: 'Egész nap',
+ moreLinkText: 'további',
+ noEventsText: 'Nincs megjeleníthető esemény',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/hu.global.min.js b/library/fullcalendar/packages/core/locales/hu.global.min.js
new file mode 100644
index 000000000..e235a1a9f
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/hu.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Lista"},weekText:"Hét",allDayText:"Egész nap",moreLinkText:"további",noEventsText:"Nincs megjeleníthető esemény"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/hu.js b/library/fullcalendar/packages/core/locales/hu.js
deleted file mode 100644
index 2f0fe8acb..000000000
--- a/library/fullcalendar/packages/core/locales/hu.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.hu = factory()));
-}(this, function () { 'use strict';
-
- var hu = {
- code: "hu",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "vissza",
- next: "előre",
- today: "ma",
- month: "Hónap",
- week: "Hét",
- day: "Nap",
- list: "Napló"
- },
- weekLabel: "Hét",
- allDayText: "Egész nap",
- eventLimitText: "további",
- noEventsMessage: "Nincs megjeleníthető esemény"
- };
-
- return hu;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/hy-am.global.js b/library/fullcalendar/packages/core/locales/hy-am.global.js
new file mode 100644
index 000000000..d1d950cc8
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/hy-am.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'hy-am',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Նախորդ',
+ next: 'Հաջորդ',
+ today: 'Այսօր',
+ month: 'Ամիս',
+ week: 'Շաբաթ',
+ day: 'Օր',
+ list: 'Օրվա ցուցակ',
+ },
+ weekText: 'Շաբ',
+ allDayText: 'Ամբողջ օր',
+ moreLinkText(n) {
+ return '+ ևս ' + n;
+ },
+ noEventsText: 'Բացակայում է իրադարձությունը ցուցադրելու',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/hy-am.global.min.js b/library/fullcalendar/packages/core/locales/hy-am.global.min.js
new file mode 100644
index 000000000..59a9a5386
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/hy-am.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"hy-am",week:{dow:1,doy:4},buttonText:{prev:"Նախորդ",next:"Հաջորդ",today:"Այսօր",month:"Ամիս",week:"Շաբաթ",day:"Օր",list:"Օրվա ցուցակ"},weekText:"Շաբ",allDayText:"Ամբողջ օր",moreLinkText:e=>"+ ևս "+e,noEventsText:"Բացակայում է իրադարձությունը ցուցադրելու"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/id.global.js b/library/fullcalendar/packages/core/locales/id.global.js
new file mode 100644
index 000000000..9547051f2
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/id.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'id',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'mundur',
+ next: 'maju',
+ today: 'hari ini',
+ month: 'Bulan',
+ week: 'Minggu',
+ day: 'Hari',
+ list: 'Agenda',
+ },
+ weekText: 'Mg',
+ allDayText: 'Sehari penuh',
+ moreLinkText: 'lebih',
+ noEventsText: 'Tidak ada acara untuk ditampilkan',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/id.global.min.js b/library/fullcalendar/packages/core/locales/id.global.min.js
new file mode 100644
index 000000000..e2992c296
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/id.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"id",week:{dow:1,doy:7},buttonText:{prev:"mundur",next:"maju",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekText:"Mg",allDayText:"Sehari penuh",moreLinkText:"lebih",noEventsText:"Tidak ada acara untuk ditampilkan"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/id.js b/library/fullcalendar/packages/core/locales/id.js
deleted file mode 100644
index b742e80dd..000000000
--- a/library/fullcalendar/packages/core/locales/id.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.id = factory()));
-}(this, function () { 'use strict';
-
- var id = {
- code: "id",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "mundur",
- next: "maju",
- today: "hari ini",
- month: "Bulan",
- week: "Minggu",
- day: "Hari",
- list: "Agenda"
- },
- weekLabel: "Mg",
- allDayHtml: "Sehari<br/>penuh",
- eventLimitText: "lebih",
- noEventsMessage: "Tidak ada acara untuk ditampilkan"
- };
-
- return id;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/is.global.js b/library/fullcalendar/packages/core/locales/is.global.js
new file mode 100644
index 000000000..834978af6
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/is.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'is',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Fyrri',
+ next: 'Næsti',
+ today: 'Í dag',
+ month: 'Mánuður',
+ week: 'Vika',
+ day: 'Dagur',
+ list: 'Dagskrá',
+ },
+ weekText: 'Vika',
+ allDayText: 'Allan daginn',
+ moreLinkText: 'meira',
+ noEventsText: 'Engir viðburðir til að sýna',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/is.global.min.js b/library/fullcalendar/packages/core/locales/is.global.min.js
new file mode 100644
index 000000000..4af1f65a3
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/is.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"is",week:{dow:1,doy:4},buttonText:{prev:"Fyrri",next:"Næsti",today:"Í dag",month:"Mánuður",week:"Vika",day:"Dagur",list:"Dagskrá"},weekText:"Vika",allDayText:"Allan daginn",moreLinkText:"meira",noEventsText:"Engir viðburðir til að sýna"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/is.js b/library/fullcalendar/packages/core/locales/is.js
deleted file mode 100644
index dd569bce7..000000000
--- a/library/fullcalendar/packages/core/locales/is.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.is = factory()));
-}(this, function () { 'use strict';
-
- var is = {
- code: "is",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Fyrri",
- next: "Næsti",
- today: "Í dag",
- month: "Mánuður",
- week: "Vika",
- day: "Dagur",
- list: "Dagskrá"
- },
- weekLabel: "Vika",
- allDayHtml: "Allan<br/>daginn",
- eventLimitText: "meira",
- noEventsMessage: "Engir viðburðir til að sýna"
- };
-
- return is;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/it.global.js b/library/fullcalendar/packages/core/locales/it.global.js
new file mode 100644
index 000000000..987e8570a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/it.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'it',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prec',
+ next: 'Succ',
+ today: 'Oggi',
+ month: 'Mese',
+ week: 'Settimana',
+ day: 'Giorno',
+ list: 'Agenda',
+ },
+ weekText: 'Sm',
+ allDayText: 'Tutto il giorno',
+ moreLinkText(n) {
+ return '+altri ' + n;
+ },
+ noEventsText: 'Non ci sono eventi da visualizzare',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/it.global.min.js b/library/fullcalendar/packages/core/locales/it.global.min.js
new file mode 100644
index 000000000..61ea08b70
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/it.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekText:"Sm",allDayText:"Tutto il giorno",moreLinkText:e=>"+altri "+e,noEventsText:"Non ci sono eventi da visualizzare"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/it.js b/library/fullcalendar/packages/core/locales/it.js
deleted file mode 100644
index 39a2829e5..000000000
--- a/library/fullcalendar/packages/core/locales/it.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.it = factory()));
-}(this, function () { 'use strict';
-
- var it = {
- code: "it",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Prec",
- next: "Succ",
- today: "Oggi",
- month: "Mese",
- week: "Settimana",
- day: "Giorno",
- list: "Agenda"
- },
- weekLabel: "Sm",
- allDayHtml: "Tutto il<br/>giorno",
- eventLimitText: function (n) {
- return "+altri " + n;
- },
- noEventsMessage: "Non ci sono eventi da visualizzare"
- };
-
- return it;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ja.global.js b/library/fullcalendar/packages/core/locales/ja.global.js
new file mode 100644
index 000000000..d6d8a3cea
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ja.global.js
@@ -0,0 +1,30 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ja',
+ buttonText: {
+ prev: '前',
+ next: '次',
+ today: '今日',
+ month: '月',
+ week: '週',
+ day: '日',
+ list: '予定リスト',
+ },
+ weekText: '週',
+ allDayText: '終日',
+ moreLinkText(n) {
+ return '他 ' + n + ' 件';
+ },
+ noEventsText: '表示する予定はありません',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ja.global.min.js b/library/fullcalendar/packages/core/locales/ja.global.min.js
new file mode 100644
index 000000000..472f96141
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ja.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekText:"週",allDayText:"終日",moreLinkText:e=>"他 "+e+" 件",noEventsText:"表示する予定はありません"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ja.js b/library/fullcalendar/packages/core/locales/ja.js
deleted file mode 100644
index eb4245b2a..000000000
--- a/library/fullcalendar/packages/core/locales/ja.js
+++ /dev/null
@@ -1,28 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ja = factory()));
-}(this, function () { 'use strict';
-
- var ja = {
- code: "ja",
- buttonText: {
- prev: "前",
- next: "次",
- today: "今日",
- month: "月",
- week: "週",
- day: "日",
- list: "予定リスト"
- },
- weekLabel: "週",
- allDayText: "終日",
- eventLimitText: function (n) {
- return "他 " + n + " 件";
- },
- noEventsMessage: "表示する予定はありません"
- };
-
- return ja;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ka.global.js b/library/fullcalendar/packages/core/locales/ka.global.js
new file mode 100644
index 000000000..4c94baf2f
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ka.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ka',
+ week: {
+ dow: 1,
+ doy: 7,
+ },
+ buttonText: {
+ prev: 'წინა',
+ next: 'შემდეგი',
+ today: 'დღეს',
+ month: 'თვე',
+ week: 'კვირა',
+ day: 'დღე',
+ list: 'დღის წესრიგი',
+ },
+ weekText: 'კვ',
+ allDayText: 'მთელი დღე',
+ moreLinkText(n) {
+ return '+ კიდევ ' + n;
+ },
+ noEventsText: 'ღონისძიებები არ არის',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ka.global.min.js b/library/fullcalendar/packages/core/locales/ka.global.min.js
new file mode 100644
index 000000000..d097866de
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ka.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"ka",week:{dow:1,doy:7},buttonText:{prev:"წინა",next:"შემდეგი",today:"დღეს",month:"თვე",week:"კვირა",day:"დღე",list:"დღის წესრიგი"},weekText:"კვ",allDayText:"მთელი დღე",moreLinkText:e=>"+ კიდევ "+e,noEventsText:"ღონისძიებები არ არის"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ka.js b/library/fullcalendar/packages/core/locales/ka.js
deleted file mode 100644
index b971c033f..000000000
--- a/library/fullcalendar/packages/core/locales/ka.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ka = factory()));
-}(this, function () { 'use strict';
-
- var ka = {
- code: "ka",
- week: {
- dow: 1,
- doy: 7
- },
- buttonText: {
- prev: "წინა",
- next: "შემდეგი",
- today: "დღეს",
- month: "თვე",
- week: "კვირა",
- day: "დღე",
- list: "დღის წესრიგი"
- },
- weekLabel: "კვ",
- allDayText: "მთელი დღე",
- eventLimitText: function (n) {
- return "+ კიდევ " + n;
- },
- noEventsMessage: "ღონისძიებები არ არის"
- };
-
- return ka;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/kk.global.js b/library/fullcalendar/packages/core/locales/kk.global.js
new file mode 100644
index 000000000..156f3fd96
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/kk.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'kk',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Алдыңғы',
+ next: 'Келесі',
+ today: 'Бүгін',
+ month: 'Ай',
+ week: 'Апта',
+ day: 'Күн',
+ list: 'Күн тәртібі',
+ },
+ weekText: 'Не',
+ allDayText: 'Күні бойы',
+ moreLinkText(n) {
+ return '+ тағы ' + n;
+ },
+ noEventsText: 'Көрсету үшін оқиғалар жоқ',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/kk.global.min.js b/library/fullcalendar/packages/core/locales/kk.global.min.js
new file mode 100644
index 000000000..c08d73b20
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/kk.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"kk",week:{dow:1,doy:7},buttonText:{prev:"Алдыңғы",next:"Келесі",today:"Бүгін",month:"Ай",week:"Апта",day:"Күн",list:"Күн тәртібі"},weekText:"Не",allDayText:"Күні бойы",moreLinkText:e=>"+ тағы "+e,noEventsText:"Көрсету үшін оқиғалар жоқ"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/kk.js b/library/fullcalendar/packages/core/locales/kk.js
deleted file mode 100644
index 5b19b99d5..000000000
--- a/library/fullcalendar/packages/core/locales/kk.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.kk = factory()));
-}(this, function () { 'use strict';
-
- var kk = {
- code: "kk",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Алдыңғы",
- next: "Келесі",
- today: "Бүгін",
- month: "Ай",
- week: "Апта",
- day: "Күн",
- list: "Күн тәртібі"
- },
- weekLabel: "Не",
- allDayText: "Күні бойы",
- eventLimitText: function (n) {
- return "+ тағы " + n;
- },
- noEventsMessage: "Көрсету үшін оқиғалар жоқ"
- };
-
- return kk;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/km.global.js b/library/fullcalendar/packages/core/locales/km.global.js
new file mode 100644
index 000000000..fd4dc3baa
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/km.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'km',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'មុន',
+ next: 'បន្ទាប់',
+ today: 'ថ្ងៃនេះ',
+ year: 'ឆ្នាំ',
+ month: 'ខែ',
+ week: 'សប្តាហ៍',
+ day: 'ថ្ងៃ',
+ list: 'បញ្ជី',
+ },
+ weekText: 'សប្តាហ៍',
+ allDayText: 'ពេញមួយថ្ងៃ',
+ moreLinkText: 'ច្រើនទៀត',
+ noEventsText: 'គ្មានព្រឹត្តិការណ៍ត្រូវបង្ហាញ',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/km.global.min.js b/library/fullcalendar/packages/core/locales/km.global.min.js
new file mode 100644
index 000000000..73523f8e3
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/km.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"km",week:{dow:1,doy:4},buttonText:{prev:"មុន",next:"បន្ទាប់",today:"ថ្ងៃនេះ",year:"ឆ្នាំ",month:"ខែ",week:"សប្តាហ៍",day:"ថ្ងៃ",list:"បញ្ជី"},weekText:"សប្តាហ៍",allDayText:"ពេញមួយថ្ងៃ",moreLinkText:"ច្រើនទៀត",noEventsText:"គ្មានព្រឹត្តិការណ៍ត្រូវបង្ហាញ"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ko.global.js b/library/fullcalendar/packages/core/locales/ko.global.js
new file mode 100644
index 000000000..58b71797a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ko.global.js
@@ -0,0 +1,28 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ko',
+ buttonText: {
+ prev: '이전달',
+ next: '다음달',
+ today: '오늘',
+ month: '월',
+ week: '주',
+ day: '일',
+ list: '일정목록',
+ },
+ weekText: '주',
+ allDayText: '종일',
+ moreLinkText: '개',
+ noEventsText: '일정이 없습니다',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ko.global.min.js b/library/fullcalendar/packages/core/locales/ko.global.min.js
new file mode 100644
index 000000000..0930818b8
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ko.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekText:"주",allDayText:"종일",moreLinkText:"개",noEventsText:"일정이 없습니다"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ko.js b/library/fullcalendar/packages/core/locales/ko.js
deleted file mode 100644
index ffe985d6c..000000000
--- a/library/fullcalendar/packages/core/locales/ko.js
+++ /dev/null
@@ -1,26 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ko = factory()));
-}(this, function () { 'use strict';
-
- var ko = {
- code: "ko",
- buttonText: {
- prev: "이전달",
- next: "다음달",
- today: "오늘",
- month: "월",
- week: "주",
- day: "일",
- list: "일정목록"
- },
- weekLabel: "주",
- allDayText: "종일",
- eventLimitText: "개",
- noEventsMessage: "일정이 없습니다"
- };
-
- return ko;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ku.global.js b/library/fullcalendar/packages/core/locales/ku.global.js
new file mode 100644
index 000000000..279d0aa4d
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ku.global.js
@@ -0,0 +1,33 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ku',
+ week: {
+ dow: 6,
+ doy: 12, // The week that contains Jan 1st is the first week of the year.
+ },
+ direction: 'rtl',
+ buttonText: {
+ prev: 'پێشتر',
+ next: 'دواتر',
+ today: 'ئەمڕو',
+ month: 'مانگ',
+ week: 'هەفتە',
+ day: 'ڕۆژ',
+ list: 'بەرنامە',
+ },
+ weekText: 'هەفتە',
+ allDayText: 'هەموو ڕۆژەکە',
+ moreLinkText: 'زیاتر',
+ noEventsText: 'هیچ ڕووداوێك نیە',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ku.global.min.js b/library/fullcalendar/packages/core/locales/ku.global.min.js
new file mode 100644
index 000000000..fff5b8414
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ku.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ku",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"پێشتر",next:"دواتر",today:"ئەمڕو",month:"مانگ",week:"هەفتە",day:"ڕۆژ",list:"بەرنامە"},weekText:"هەفتە",allDayText:"هەموو ڕۆژەکە",moreLinkText:"زیاتر",noEventsText:"هیچ ڕووداوێك نیە"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/lb.global.js b/library/fullcalendar/packages/core/locales/lb.global.js
new file mode 100644
index 000000000..21e280093
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/lb.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'lb',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Zréck',
+ next: 'Weider',
+ today: 'Haut',
+ month: 'Mount',
+ week: 'Woch',
+ day: 'Dag',
+ list: 'Terminiwwersiicht',
+ },
+ weekText: 'W',
+ allDayText: 'Ganzen Dag',
+ moreLinkText: 'méi',
+ noEventsText: 'Nee Evenementer ze affichéieren',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/lb.global.min.js b/library/fullcalendar/packages/core/locales/lb.global.min.js
new file mode 100644
index 000000000..80b2a77cc
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/lb.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"lb",week:{dow:1,doy:4},buttonText:{prev:"Zréck",next:"Weider",today:"Haut",month:"Mount",week:"Woch",day:"Dag",list:"Terminiwwersiicht"},weekText:"W",allDayText:"Ganzen Dag",moreLinkText:"méi",noEventsText:"Nee Evenementer ze affichéieren"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/lb.js b/library/fullcalendar/packages/core/locales/lb.js
deleted file mode 100644
index b9b17e3ec..000000000
--- a/library/fullcalendar/packages/core/locales/lb.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lb = factory()));
-}(this, function () { 'use strict';
-
- var lb = {
- code: "lb",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Zréck",
- next: "Weider",
- today: "Haut",
- month: "Mount",
- week: "Woch",
- day: "Dag",
- list: "Terminiwwersiicht"
- },
- weekLabel: "W",
- allDayText: "Ganzen Dag",
- eventLimitText: "méi",
- noEventsMessage: "Nee Evenementer ze affichéieren"
- };
-
- return lb;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/lt.global.js b/library/fullcalendar/packages/core/locales/lt.global.js
new file mode 100644
index 000000000..826d70d23
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/lt.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'lt',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Atgal',
+ next: 'Pirmyn',
+ today: 'Šiandien',
+ month: 'Mėnuo',
+ week: 'Savaitė',
+ day: 'Diena',
+ list: 'Darbotvarkė',
+ },
+ weekText: 'SAV',
+ allDayText: 'Visą dieną',
+ moreLinkText: 'daugiau',
+ noEventsText: 'Nėra įvykių rodyti',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/lt.global.min.js b/library/fullcalendar/packages/core/locales/lt.global.min.js
new file mode 100644
index 000000000..09a7cae46
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/lt.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"lt",week:{dow:1,doy:4},buttonText:{prev:"Atgal",next:"Pirmyn",today:"Šiandien",month:"Mėnuo",week:"Savaitė",day:"Diena",list:"Darbotvarkė"},weekText:"SAV",allDayText:"Visą dieną",moreLinkText:"daugiau",noEventsText:"Nėra įvykių rodyti"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/lt.js b/library/fullcalendar/packages/core/locales/lt.js
deleted file mode 100644
index ec641b750..000000000
--- a/library/fullcalendar/packages/core/locales/lt.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lt = factory()));
-}(this, function () { 'use strict';
-
- var lt = {
- code: "lt",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Atgal",
- next: "Pirmyn",
- today: "Šiandien",
- month: "Mėnuo",
- week: "Savaitė",
- day: "Diena",
- list: "Darbotvarkė"
- },
- weekLabel: "SAV",
- allDayText: "Visą dieną",
- eventLimitText: "daugiau",
- noEventsMessage: "Nėra įvykių rodyti"
- };
-
- return lt;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/lv.global.js b/library/fullcalendar/packages/core/locales/lv.global.js
new file mode 100644
index 000000000..14b808c53
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/lv.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'lv',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Iepr.',
+ next: 'Nāk.',
+ today: 'Šodien',
+ month: 'Mēnesis',
+ week: 'Nedēļa',
+ day: 'Diena',
+ list: 'Dienas kārtība',
+ },
+ weekText: 'Ned.',
+ allDayText: 'Visu dienu',
+ moreLinkText(n) {
+ return '+vēl ' + n;
+ },
+ noEventsText: 'Nav notikumu',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/lv.global.min.js b/library/fullcalendar/packages/core/locales/lv.global.min.js
new file mode 100644
index 000000000..599d84c82
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/lv.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"lv",week:{dow:1,doy:4},buttonText:{prev:"Iepr.",next:"Nāk.",today:"Šodien",month:"Mēnesis",week:"Nedēļa",day:"Diena",list:"Dienas kārtība"},weekText:"Ned.",allDayText:"Visu dienu",moreLinkText:e=>"+vēl "+e,noEventsText:"Nav notikumu"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/lv.js b/library/fullcalendar/packages/core/locales/lv.js
deleted file mode 100644
index 5453630df..000000000
--- a/library/fullcalendar/packages/core/locales/lv.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.lv = factory()));
-}(this, function () { 'use strict';
-
- var lv = {
- code: "lv",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Iepr.",
- next: "Nāk.",
- today: "Šodien",
- month: "Mēnesis",
- week: "Nedēļa",
- day: "Diena",
- list: "Dienas kārtība"
- },
- weekLabel: "Ned.",
- allDayText: "Visu dienu",
- eventLimitText: function (n) {
- return "+vēl " + n;
- },
- noEventsMessage: "Nav notikumu"
- };
-
- return lv;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/mk.global.js b/library/fullcalendar/packages/core/locales/mk.global.js
new file mode 100644
index 000000000..5f15d7f09
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/mk.global.js
@@ -0,0 +1,30 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'mk',
+ buttonText: {
+ prev: 'претходно',
+ next: 'следно',
+ today: 'Денес',
+ month: 'Месец',
+ week: 'Недела',
+ day: 'Ден',
+ list: 'График',
+ },
+ weekText: 'Сед',
+ allDayText: 'Цел ден',
+ moreLinkText(n) {
+ return '+повеќе ' + n;
+ },
+ noEventsText: 'Нема настани за прикажување',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/mk.global.min.js b/library/fullcalendar/packages/core/locales/mk.global.min.js
new file mode 100644
index 000000000..f32043a9d
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/mk.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"mk",buttonText:{prev:"претходно",next:"следно",today:"Денес",month:"Месец",week:"Недела",day:"Ден",list:"График"},weekText:"Сед",allDayText:"Цел ден",moreLinkText:e=>"+повеќе "+e,noEventsText:"Нема настани за прикажување"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/mk.js b/library/fullcalendar/packages/core/locales/mk.js
deleted file mode 100644
index 6729fa63d..000000000
--- a/library/fullcalendar/packages/core/locales/mk.js
+++ /dev/null
@@ -1,28 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.mk = factory()));
-}(this, function () { 'use strict';
-
- var mk = {
- code: "mk",
- buttonText: {
- prev: "претходно",
- next: "следно",
- today: "Денес",
- month: "Месец",
- week: "Недела",
- day: "Ден",
- list: "График"
- },
- weekLabel: "Сед",
- allDayText: "Цел ден",
- eventLimitText: function (n) {
- return "+повеќе " + n;
- },
- noEventsMessage: "Нема настани за прикажување"
- };
-
- return mk;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ms.global.js b/library/fullcalendar/packages/core/locales/ms.global.js
new file mode 100644
index 000000000..46e3bc78a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ms.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ms',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Sebelum',
+ next: 'Selepas',
+ today: 'hari ini',
+ month: 'Bulan',
+ week: 'Minggu',
+ day: 'Hari',
+ list: 'Agenda',
+ },
+ weekText: 'Mg',
+ allDayText: 'Sepanjang hari',
+ moreLinkText(n) {
+ return 'masih ada ' + n + ' acara';
+ },
+ noEventsText: 'Tiada peristiwa untuk dipaparkan',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ms.global.min.js b/library/fullcalendar/packages/core/locales/ms.global.min.js
new file mode 100644
index 000000000..3626ca8b5
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ms.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(a){"use strict";var e={code:"ms",week:{dow:1,doy:7},buttonText:{prev:"Sebelum",next:"Selepas",today:"hari ini",month:"Bulan",week:"Minggu",day:"Hari",list:"Agenda"},weekText:"Mg",allDayText:"Sepanjang hari",moreLinkText:a=>"masih ada "+a+" acara",noEventsText:"Tiada peristiwa untuk dipaparkan"};FullCalendar.globalLocales.push(e)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ms.js b/library/fullcalendar/packages/core/locales/ms.js
deleted file mode 100644
index 7205ecc72..000000000
--- a/library/fullcalendar/packages/core/locales/ms.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ms = factory()));
-}(this, function () { 'use strict';
-
- var ms = {
- code: "ms",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Sebelum",
- next: "Selepas",
- today: "hari ini",
- month: "Bulan",
- week: "Minggu",
- day: "Hari",
- list: "Agenda"
- },
- weekLabel: "Mg",
- allDayText: "Sepanjang hari",
- eventLimitText: function (n) {
- return "masih ada " + n + " acara";
- },
- noEventsMessage: "Tiada peristiwa untuk dipaparkan"
- };
-
- return ms;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/nb.global.js b/library/fullcalendar/packages/core/locales/nb.global.js
new file mode 100644
index 000000000..28e0e4375
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/nb.global.js
@@ -0,0 +1,43 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'nb',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Forrige',
+ next: 'Neste',
+ today: 'I dag',
+ month: 'Måned',
+ week: 'Uke',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ weekText: 'Uke',
+ weekTextLong: 'Uke',
+ allDayText: 'Hele dagen',
+ moreLinkText: 'til',
+ noEventsText: 'Ingen hendelser å vise',
+ buttonHints: {
+ prev: 'Forrige $0',
+ next: 'Neste $0',
+ today: 'Nåværende $0',
+ },
+ viewHint: '$0 visning',
+ navLinkHint: 'Gå til $0',
+ moreLinkHint(eventCnt) {
+ return `Vis ${eventCnt} flere hendelse${eventCnt === 1 ? '' : 'r'}`;
+ },
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/nb.global.min.js b/library/fullcalendar/packages/core/locales/nb.global.min.js
new file mode 100644
index 000000000..103bcee1f
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/nb.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var n={code:"nb",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Neste",today:"I dag",month:"Måned",week:"Uke",day:"Dag",list:"Agenda"},weekText:"Uke",weekTextLong:"Uke",allDayText:"Hele dagen",moreLinkText:"til",noEventsText:"Ingen hendelser å vise",buttonHints:{prev:"Forrige $0",next:"Neste $0",today:"Nåværende $0"},viewHint:"$0 visning",navLinkHint:"Gå til $0",moreLinkHint:e=>`Vis ${e} flere hendelse${1===e?"":"r"}`};FullCalendar.globalLocales.push(n)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/nb.js b/library/fullcalendar/packages/core/locales/nb.js
deleted file mode 100644
index 6464461c6..000000000
--- a/library/fullcalendar/packages/core/locales/nb.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nb = factory()));
-}(this, function () { 'use strict';
-
- var nb = {
- code: "nb",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Forrige",
- next: "Neste",
- today: "I dag",
- month: "Måned",
- week: "Uke",
- day: "Dag",
- list: "Agenda"
- },
- weekLabel: "Uke",
- allDayText: "Hele dagen",
- eventLimitText: "til",
- noEventsMessage: "Ingen hendelser å vise"
- };
-
- return nb;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ne.global.js b/library/fullcalendar/packages/core/locales/ne.global.js
new file mode 100644
index 000000000..22f073997
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ne.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ne',
+ week: {
+ dow: 7,
+ doy: 1, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'अघिल्लो',
+ next: 'अर्को',
+ today: 'आज',
+ month: 'महिना',
+ week: 'हप्ता',
+ day: 'दिन',
+ list: 'सूची',
+ },
+ weekText: 'हप्ता',
+ allDayText: 'दिनभरि',
+ moreLinkText: 'थप लिंक',
+ noEventsText: 'देखाउनको लागि कुनै घटनाहरू छैनन्',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ne.global.min.js b/library/fullcalendar/packages/core/locales/ne.global.min.js
new file mode 100644
index 000000000..4e51355d8
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ne.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"ne",week:{dow:7,doy:1},buttonText:{prev:"अघिल्लो",next:"अर्को",today:"आज",month:"महिना",week:"हप्ता",day:"दिन",list:"सूची"},weekText:"हप्ता",allDayText:"दिनभरि",moreLinkText:"थप लिंक",noEventsText:"देखाउनको लागि कुनै घटनाहरू छैनन्"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/nl.global.js b/library/fullcalendar/packages/core/locales/nl.global.js
new file mode 100644
index 000000000..9e9c87640
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/nl.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'nl',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Vorige',
+ next: 'Volgende',
+ today: 'Vandaag',
+ year: 'Jaar',
+ month: 'Maand',
+ week: 'Week',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ allDayText: 'Hele dag',
+ moreLinkText: 'extra',
+ noEventsText: 'Geen evenementen om te laten zien',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/nl.global.min.js b/library/fullcalendar/packages/core/locales/nl.global.min.js
new file mode 100644
index 000000000..ba5d10e32
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/nl.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",moreLinkText:"extra",noEventsText:"Geen evenementen om te laten zien"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/nl.js b/library/fullcalendar/packages/core/locales/nl.js
deleted file mode 100644
index c91b5e55f..000000000
--- a/library/fullcalendar/packages/core/locales/nl.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nl = factory()));
-}(this, function () { 'use strict';
-
- var nl = {
- code: "nl",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Voorgaand",
- next: "Volgende",
- today: "Vandaag",
- year: "Jaar",
- month: "Maand",
- week: "Week",
- day: "Dag",
- list: "Agenda"
- },
- allDayText: "Hele dag",
- eventLimitText: "extra",
- noEventsMessage: "Geen evenementen om te laten zien"
- };
-
- return nl;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/nn.global.js b/library/fullcalendar/packages/core/locales/nn.global.js
new file mode 100644
index 000000000..e50e0c7fb
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/nn.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'nn',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Førre',
+ next: 'Neste',
+ today: 'I dag',
+ month: 'Månad',
+ week: 'Veke',
+ day: 'Dag',
+ list: 'Agenda',
+ },
+ weekText: 'Veke',
+ allDayText: 'Heile dagen',
+ moreLinkText: 'til',
+ noEventsText: 'Ingen hendelser å vise',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/nn.global.min.js b/library/fullcalendar/packages/core/locales/nn.global.min.js
new file mode 100644
index 000000000..d40c209e6
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/nn.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"nn",week:{dow:1,doy:4},buttonText:{prev:"Førre",next:"Neste",today:"I dag",month:"Månad",week:"Veke",day:"Dag",list:"Agenda"},weekText:"Veke",allDayText:"Heile dagen",moreLinkText:"til",noEventsText:"Ingen hendelser å vise"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/nn.js b/library/fullcalendar/packages/core/locales/nn.js
deleted file mode 100644
index a5cdd1626..000000000
--- a/library/fullcalendar/packages/core/locales/nn.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.nn = factory()));
-}(this, function () { 'use strict';
-
- var nn = {
- code: "nn",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Førre",
- next: "Neste",
- today: "I dag",
- month: "Månad",
- week: "Veke",
- day: "Dag",
- list: "Agenda"
- },
- weekLabel: "Veke",
- allDayText: "Heile dagen",
- eventLimitText: "til",
- noEventsMessage: "Ingen hendelser å vise"
- };
-
- return nn;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/pl.global.js b/library/fullcalendar/packages/core/locales/pl.global.js
new file mode 100644
index 000000000..c07270a0c
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/pl.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'pl',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Poprzedni',
+ next: 'Następny',
+ today: 'Dziś',
+ month: 'Miesiąc',
+ week: 'Tydzień',
+ day: 'Dzień',
+ list: 'Plan dnia',
+ },
+ weekText: 'Tydz',
+ allDayText: 'Cały dzień',
+ moreLinkText: 'więcej',
+ noEventsText: 'Brak wydarzeń do wyświetlenia',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/pl.global.min.js b/library/fullcalendar/packages/core/locales/pl.global.min.js
new file mode 100644
index 000000000..3e2e1fc3f
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/pl.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"pl",week:{dow:1,doy:4},buttonText:{prev:"Poprzedni",next:"Następny",today:"Dziś",month:"Miesiąc",week:"Tydzień",day:"Dzień",list:"Plan dnia"},weekText:"Tydz",allDayText:"Cały dzień",moreLinkText:"więcej",noEventsText:"Brak wydarzeń do wyświetlenia"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/pl.js b/library/fullcalendar/packages/core/locales/pl.js
deleted file mode 100644
index 0a22e69c4..000000000
--- a/library/fullcalendar/packages/core/locales/pl.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pl = factory()));
-}(this, function () { 'use strict';
-
- var pl = {
- code: "pl",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Poprzedni",
- next: "Następny",
- today: "Dziś",
- month: "Miesiąc",
- week: "Tydzień",
- day: "Dzień",
- list: "Plan dnia"
- },
- weekLabel: "Tydz",
- allDayText: "Cały dzień",
- eventLimitText: "więcej",
- noEventsMessage: "Brak wydarzeń do wyświetlenia"
- };
-
- return pl;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/pt-br.global.js b/library/fullcalendar/packages/core/locales/pt-br.global.js
new file mode 100644
index 000000000..7ec6f79f3
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/pt-br.global.js
@@ -0,0 +1,30 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'pt-br',
+ buttonText: {
+ prev: 'Anterior',
+ next: 'Próximo',
+ today: 'Hoje',
+ month: 'Mês',
+ week: 'Semana',
+ day: 'Dia',
+ list: 'Lista',
+ },
+ weekText: 'Sm',
+ allDayText: 'dia inteiro',
+ moreLinkText(n) {
+ return 'mais +' + n;
+ },
+ noEventsText: 'Não há eventos para mostrar',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/pt-br.global.min.js b/library/fullcalendar/packages/core/locales/pt-br.global.min.js
new file mode 100644
index 000000000..32315bcaf
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/pt-br.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Lista"},weekText:"Sm",allDayText:"dia inteiro",moreLinkText:e=>"mais +"+e,noEventsText:"Não há eventos para mostrar"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/pt-br.js b/library/fullcalendar/packages/core/locales/pt-br.js
deleted file mode 100644
index bfa023dd6..000000000
--- a/library/fullcalendar/packages/core/locales/pt-br.js
+++ /dev/null
@@ -1,28 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['pt-br'] = factory()));
-}(this, function () { 'use strict';
-
- var ptBr = {
- code: "pt-br",
- buttonText: {
- prev: "Anterior",
- next: "Próximo",
- today: "Hoje",
- month: "Mês",
- week: "Semana",
- day: "Dia",
- list: "Lista"
- },
- weekLabel: "Sm",
- allDayText: "dia inteiro",
- eventLimitText: function (n) {
- return "mais +" + n;
- },
- noEventsMessage: "Não há eventos para mostrar"
- };
-
- return ptBr;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/pt.global.js b/library/fullcalendar/packages/core/locales/pt.global.js
new file mode 100644
index 000000000..15aafa853
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/pt.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'pt',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Anterior',
+ next: 'Seguinte',
+ today: 'Hoje',
+ month: 'Mês',
+ week: 'Semana',
+ day: 'Dia',
+ list: 'Agenda',
+ },
+ weekText: 'Sem',
+ allDayText: 'Todo o dia',
+ moreLinkText: 'mais',
+ noEventsText: 'Não há eventos para mostrar',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/pt.global.min.js b/library/fullcalendar/packages/core/locales/pt.global.min.js
new file mode 100644
index 000000000..c4d0e1f45
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/pt.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekText:"Sem",allDayText:"Todo o dia",moreLinkText:"mais",noEventsText:"Não há eventos para mostrar"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/pt.js b/library/fullcalendar/packages/core/locales/pt.js
deleted file mode 100644
index 5c54d8d40..000000000
--- a/library/fullcalendar/packages/core/locales/pt.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.pt = factory()));
-}(this, function () { 'use strict';
-
- var pt = {
- code: "pt",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Anterior",
- next: "Seguinte",
- today: "Hoje",
- month: "Mês",
- week: "Semana",
- day: "Dia",
- list: "Agenda"
- },
- weekLabel: "Sem",
- allDayText: "Todo o dia",
- eventLimitText: "mais",
- noEventsMessage: "Não há eventos para mostrar"
- };
-
- return pt;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ro.global.js b/library/fullcalendar/packages/core/locales/ro.global.js
new file mode 100644
index 000000000..701641cb0
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ro.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ro',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'precedentă',
+ next: 'următoare',
+ today: 'Azi',
+ month: 'Lună',
+ week: 'Săptămână',
+ day: 'Zi',
+ list: 'Agendă',
+ },
+ weekText: 'Săpt',
+ allDayText: 'Toată ziua',
+ moreLinkText(n) {
+ return '+alte ' + n;
+ },
+ noEventsText: 'Nu există evenimente de afișat',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ro.global.min.js b/library/fullcalendar/packages/core/locales/ro.global.min.js
new file mode 100644
index 000000000..cdba34e09
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ro.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"ro",week:{dow:1,doy:7},buttonText:{prev:"precedentă",next:"următoare",today:"Azi",month:"Lună",week:"Săptămână",day:"Zi",list:"Agendă"},weekText:"Săpt",allDayText:"Toată ziua",moreLinkText:e=>"+alte "+e,noEventsText:"Nu există evenimente de afișat"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ro.js b/library/fullcalendar/packages/core/locales/ro.js
deleted file mode 100644
index e8992f276..000000000
--- a/library/fullcalendar/packages/core/locales/ro.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ro = factory()));
-}(this, function () { 'use strict';
-
- var ro = {
- code: "ro",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "precedentă",
- next: "următoare",
- today: "Azi",
- month: "Lună",
- week: "Săptămână",
- day: "Zi",
- list: "Agendă"
- },
- weekLabel: "Săpt",
- allDayText: "Toată ziua",
- eventLimitText: function (n) {
- return "+alte " + n;
- },
- noEventsMessage: "Nu există evenimente de afișat"
- };
-
- return ro;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ru.global.js b/library/fullcalendar/packages/core/locales/ru.global.js
new file mode 100644
index 000000000..8c42c2e92
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ru.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ru',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Пред',
+ next: 'След',
+ today: 'Сегодня',
+ month: 'Месяц',
+ week: 'Неделя',
+ day: 'День',
+ list: 'Повестка дня',
+ },
+ weekText: 'Нед',
+ allDayText: 'Весь день',
+ moreLinkText(n) {
+ return '+ ещё ' + n;
+ },
+ noEventsText: 'Нет событий для отображения',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ru.global.min.js b/library/fullcalendar/packages/core/locales/ru.global.min.js
new file mode 100644
index 000000000..0131510aa
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ru.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"ru",week:{dow:1,doy:4},buttonText:{prev:"Пред",next:"След",today:"Сегодня",month:"Месяц",week:"Неделя",day:"День",list:"Повестка дня"},weekText:"Нед",allDayText:"Весь день",moreLinkText:e=>"+ ещё "+e,noEventsText:"Нет событий для отображения"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ru.js b/library/fullcalendar/packages/core/locales/ru.js
deleted file mode 100644
index 77e0308e2..000000000
--- a/library/fullcalendar/packages/core/locales/ru.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ru = factory()));
-}(this, function () { 'use strict';
-
- var ru = {
- code: "ru",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Пред",
- next: "След",
- today: "Сегодня",
- month: "Месяц",
- week: "Неделя",
- day: "День",
- list: "Повестка дня"
- },
- weekLabel: "Нед",
- allDayText: "Весь день",
- eventLimitText: function (n) {
- return "+ ещё " + n;
- },
- noEventsMessage: "Нет событий для отображения"
- };
-
- return ru;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/si-lk.global.js b/library/fullcalendar/packages/core/locales/si-lk.global.js
new file mode 100644
index 000000000..d33ea52e5
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/si-lk.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'si-lk',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'පෙර',
+ next: 'පසු',
+ today: 'අද',
+ month: 'මාසය',
+ week: 'සතිය',
+ day: 'දවස',
+ list: 'ලැයිස්තුව',
+ },
+ weekText: 'සති',
+ allDayText: 'සියලු',
+ moreLinkText: 'තවත්',
+ noEventsText: 'මුකුත් නැත',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/si-lk.global.min.js b/library/fullcalendar/packages/core/locales/si-lk.global.min.js
new file mode 100644
index 000000000..17c40a277
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/si-lk.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"si-lk",week:{dow:1,doy:4},buttonText:{prev:"පෙර",next:"පසු",today:"අද",month:"මාසය",week:"සතිය",day:"දවස",list:"ලැයිස්තුව"},weekText:"සති",allDayText:"සියලු",moreLinkText:"තවත්",noEventsText:"මුකුත් නැත"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/sk.global.js b/library/fullcalendar/packages/core/locales/sk.global.js
new file mode 100644
index 000000000..c49662f71
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sk.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'sk',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Predchádzajúci',
+ next: 'Nasledujúci',
+ today: 'Dnes',
+ month: 'Mesiac',
+ week: 'Týždeň',
+ day: 'Deň',
+ list: 'Rozvrh',
+ },
+ weekText: 'Ty',
+ allDayText: 'Celý deň',
+ moreLinkText(n) {
+ return '+ďalšie: ' + n;
+ },
+ noEventsText: 'Žiadne akcie na zobrazenie',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/sk.global.min.js b/library/fullcalendar/packages/core/locales/sk.global.min.js
new file mode 100644
index 000000000..58b969106
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sk.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var a={code:"sk",week:{dow:1,doy:4},buttonText:{prev:"Predchádzajúci",next:"Nasledujúci",today:"Dnes",month:"Mesiac",week:"Týždeň",day:"Deň",list:"Rozvrh"},weekText:"Ty",allDayText:"Celý deň",moreLinkText:e=>"+ďalšie: "+e,noEventsText:"Žiadne akcie na zobrazenie"};FullCalendar.globalLocales.push(a)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/sk.js b/library/fullcalendar/packages/core/locales/sk.js
deleted file mode 100644
index 3513a64ad..000000000
--- a/library/fullcalendar/packages/core/locales/sk.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sk = factory()));
-}(this, function () { 'use strict';
-
- var sk = {
- code: "sk",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Predchádzajúci",
- next: "Nasledujúci",
- today: "Dnes",
- month: "Mesiac",
- week: "Týždeň",
- day: "Deň",
- list: "Rozvrh"
- },
- weekLabel: "Ty",
- allDayText: "Celý deň",
- eventLimitText: function (n) {
- return "+ďalšie: " + n;
- },
- noEventsMessage: "Žiadne akcie na zobrazenie"
- };
-
- return sk;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/sl.global.js b/library/fullcalendar/packages/core/locales/sl.global.js
new file mode 100644
index 000000000..f4a372e02
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sl.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'sl',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prejšnji',
+ next: 'Naslednji',
+ today: 'Trenutni',
+ month: 'Mesec',
+ week: 'Teden',
+ day: 'Dan',
+ list: 'Dnevni red',
+ },
+ weekText: 'Teden',
+ allDayText: 'Ves dan',
+ moreLinkText: 'več',
+ noEventsText: 'Ni dogodkov za prikaz',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/sl.global.min.js b/library/fullcalendar/packages/core/locales/sl.global.min.js
new file mode 100644
index 000000000..0f3045a26
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sl.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"sl",week:{dow:1,doy:7},buttonText:{prev:"Prejšnji",next:"Naslednji",today:"Trenutni",month:"Mesec",week:"Teden",day:"Dan",list:"Dnevni red"},weekText:"Teden",allDayText:"Ves dan",moreLinkText:"več",noEventsText:"Ni dogodkov za prikaz"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/sl.js b/library/fullcalendar/packages/core/locales/sl.js
deleted file mode 100644
index 323355359..000000000
--- a/library/fullcalendar/packages/core/locales/sl.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sl = factory()));
-}(this, function () { 'use strict';
-
- var sl = {
- code: "sl",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Prejšnji",
- next: "Naslednji",
- today: "Trenutni",
- month: "Mesec",
- week: "Teden",
- day: "Dan",
- list: "Dnevni red"
- },
- weekLabel: "Teden",
- allDayText: "Ves dan",
- eventLimitText: "več",
- noEventsMessage: "Ni dogodkov za prikaz"
- };
-
- return sl;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/sm.global.js b/library/fullcalendar/packages/core/locales/sm.global.js
new file mode 100644
index 000000000..3eb5c176a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sm.global.js
@@ -0,0 +1,28 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'sm',
+ buttonText: {
+ prev: 'Talu ai',
+ next: 'Mulimuli atu',
+ today: 'Aso nei',
+ month: 'Masina',
+ week: 'Vaiaso',
+ day: 'Aso',
+ list: 'Faasologa',
+ },
+ weekText: 'Vaiaso',
+ allDayText: 'Aso atoa',
+ moreLinkText: 'sili atu',
+ noEventsText: 'Leai ni mea na tutupu',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/sm.global.min.js b/library/fullcalendar/packages/core/locales/sm.global.min.js
new file mode 100644
index 000000000..48baeb25d
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sm.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(a){"use strict";FullCalendar.globalLocales.push({code:"sm",buttonText:{prev:"Talu ai",next:"Mulimuli atu",today:"Aso nei",month:"Masina",week:"Vaiaso",day:"Aso",list:"Faasologa"},weekText:"Vaiaso",allDayText:"Aso atoa",moreLinkText:"sili atu",noEventsText:"Leai ni mea na tutupu"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/sq.global.js b/library/fullcalendar/packages/core/locales/sq.global.js
new file mode 100644
index 000000000..08338fec3
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sq.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'sq',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'mbrapa',
+ next: 'Përpara',
+ today: 'sot',
+ month: 'Muaj',
+ week: 'Javë',
+ day: 'Ditë',
+ list: 'Listë',
+ },
+ weekText: 'Ja',
+ allDayText: 'Gjithë ditën',
+ moreLinkText(n) {
+ return '+më tepër ' + n;
+ },
+ noEventsText: 'Nuk ka evente për të shfaqur',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/sq.global.min.js b/library/fullcalendar/packages/core/locales/sq.global.min.js
new file mode 100644
index 000000000..11abe5474
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sq.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"sq",week:{dow:1,doy:4},buttonText:{prev:"mbrapa",next:"Përpara",today:"sot",month:"Muaj",week:"Javë",day:"Ditë",list:"Listë"},weekText:"Ja",allDayText:"Gjithë ditën",moreLinkText:e=>"+më tepër "+e,noEventsText:"Nuk ka evente për të shfaqur"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/sq.js b/library/fullcalendar/packages/core/locales/sq.js
deleted file mode 100644
index 0d43a5220..000000000
--- a/library/fullcalendar/packages/core/locales/sq.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sq = factory()));
-}(this, function () { 'use strict';
-
- var sq = {
- code: "sq",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "mbrapa",
- next: "Përpara",
- today: "sot",
- month: "Muaj",
- week: "Javë",
- day: "Ditë",
- list: "Listë"
- },
- weekLabel: "Ja",
- allDayHtml: "Gjithë<br/>ditën",
- eventLimitText: function (n) {
- return "+më tepër " + n;
- },
- noEventsMessage: "Nuk ka evente për të shfaqur"
- };
-
- return sq;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/sr-cyrl.global.js b/library/fullcalendar/packages/core/locales/sr-cyrl.global.js
new file mode 100644
index 000000000..957ed5399
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sr-cyrl.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'sr-cyrl',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Претходна',
+ next: 'следећи',
+ today: 'Данас',
+ month: 'Месец',
+ week: 'Недеља',
+ day: 'Дан',
+ list: 'Планер',
+ },
+ weekText: 'Сед',
+ allDayText: 'Цео дан',
+ moreLinkText(n) {
+ return '+ још ' + n;
+ },
+ noEventsText: 'Нема догађаја за приказ',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/sr-cyrl.global.min.js b/library/fullcalendar/packages/core/locales/sr-cyrl.global.min.js
new file mode 100644
index 000000000..6a5d2ef9c
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sr-cyrl.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"sr-cyrl",week:{dow:1,doy:7},buttonText:{prev:"Претходна",next:"следећи",today:"Данас",month:"Месец",week:"Недеља",day:"Дан",list:"Планер"},weekText:"Сед",allDayText:"Цео дан",moreLinkText:e=>"+ још "+e,noEventsText:"Нема догађаја за приказ"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/sr-cyrl.js b/library/fullcalendar/packages/core/locales/sr-cyrl.js
deleted file mode 100644
index ba0d0dfa3..000000000
--- a/library/fullcalendar/packages/core/locales/sr-cyrl.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['sr-cyrl'] = factory()));
-}(this, function () { 'use strict';
-
- var srCyrl = {
- code: "sr-cyrl",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Претходна",
- next: "следећи",
- today: "Данас",
- month: "Месец",
- week: "Недеља",
- day: "Дан",
- list: "Планер"
- },
- weekLabel: "Сед",
- allDayText: "Цео дан",
- eventLimitText: function (n) {
- return "+ још " + n;
- },
- noEventsMessage: "Нема догађаја за приказ"
- };
-
- return srCyrl;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/sr.global.js b/library/fullcalendar/packages/core/locales/sr.global.js
new file mode 100644
index 000000000..6dfc7f730
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sr.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'sr',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Prethodna',
+ next: 'Sledeći',
+ today: 'Danas',
+ month: 'Mеsеc',
+ week: 'Nеdеlja',
+ day: 'Dan',
+ list: 'Planеr',
+ },
+ weekText: 'Sed',
+ allDayText: 'Cеo dan',
+ moreLinkText(n) {
+ return '+ još ' + n;
+ },
+ noEventsText: 'Nеma događaja za prikaz',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/sr.global.min.js b/library/fullcalendar/packages/core/locales/sr.global.min.js
new file mode 100644
index 000000000..425f4210e
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sr.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var a={code:"sr",week:{dow:1,doy:7},buttonText:{prev:"Prethodna",next:"Sledeći",today:"Danas",month:"Mеsеc",week:"Nеdеlja",day:"Dan",list:"Planеr"},weekText:"Sed",allDayText:"Cеo dan",moreLinkText:e=>"+ još "+e,noEventsText:"Nеma događaja za prikaz"};FullCalendar.globalLocales.push(a)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/sr.js b/library/fullcalendar/packages/core/locales/sr.js
deleted file mode 100644
index 23e5c9b23..000000000
--- a/library/fullcalendar/packages/core/locales/sr.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sr = factory()));
-}(this, function () { 'use strict';
-
- var sr = {
- code: "sr",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Prethodna",
- next: "Sledeći",
- today: "Danas",
- month: "Mеsеc",
- week: "Nеdеlja",
- day: "Dan",
- list: "Planеr"
- },
- weekLabel: "Sed",
- allDayText: "Cеo dan",
- eventLimitText: function (n) {
- return "+ još " + n;
- },
- noEventsMessage: "Nеma događaja za prikaz"
- };
-
- return sr;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/sv.global.js b/library/fullcalendar/packages/core/locales/sv.global.js
new file mode 100644
index 000000000..3439a7d7d
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sv.global.js
@@ -0,0 +1,52 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'sv',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Förra',
+ next: 'Nästa',
+ today: 'Idag',
+ month: 'Månad',
+ week: 'Vecka',
+ day: 'Dag',
+ list: 'Program',
+ },
+ buttonHints: {
+ prev(buttonText) {
+ return `Föregående ${buttonText.toLocaleLowerCase()}`;
+ },
+ next(buttonText) {
+ return `Nästa ${buttonText.toLocaleLowerCase()}`;
+ },
+ today(buttonText) {
+ return (buttonText === 'Program' ? 'Detta' : 'Denna') + ' ' + buttonText.toLocaleLowerCase();
+ },
+ },
+ viewHint: '$0 vy',
+ navLinkHint: 'Gå till $0',
+ moreLinkHint(eventCnt) {
+ return `Visa ytterligare ${eventCnt} händelse${eventCnt === 1 ? '' : 'r'}`;
+ },
+ weekText: 'v.',
+ weekTextLong: 'Vecka',
+ allDayText: 'Heldag',
+ moreLinkText: 'till',
+ noEventsText: 'Inga händelser att visa',
+ closeHint: 'Stäng',
+ timeHint: 'Klockan',
+ eventHint: 'Händelse',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/sv.global.min.js b/library/fullcalendar/packages/core/locales/sv.global.min.js
new file mode 100644
index 000000000..91b597728
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/sv.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},buttonHints:{prev:e=>"Föregående "+e.toLocaleLowerCase(),next:e=>"Nästa "+e.toLocaleLowerCase(),today:e=>("Program"===e?"Detta":"Denna")+" "+e.toLocaleLowerCase()},viewHint:"$0 vy",navLinkHint:"Gå till $0",moreLinkHint:e=>`Visa ytterligare ${e} händelse${1===e?"":"r"}`,weekText:"v.",weekTextLong:"Vecka",allDayText:"Heldag",moreLinkText:"till",noEventsText:"Inga händelser att visa",closeHint:"Stäng",timeHint:"Klockan",eventHint:"Händelse"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/sv.js b/library/fullcalendar/packages/core/locales/sv.js
deleted file mode 100644
index a887060ba..000000000
--- a/library/fullcalendar/packages/core/locales/sv.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.sv = factory()));
-}(this, function () { 'use strict';
-
- var sv = {
- code: "sv",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Förra",
- next: "Nästa",
- today: "Idag",
- month: "Månad",
- week: "Vecka",
- day: "Dag",
- list: "Program"
- },
- weekLabel: "v.",
- allDayText: "Heldag",
- eventLimitText: "till",
- noEventsMessage: "Inga händelser att visa"
- };
-
- return sv;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ta-in.global.js b/library/fullcalendar/packages/core/locales/ta-in.global.js
new file mode 100644
index 000000000..e565db852
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ta-in.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ta-in',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'முந்தைய',
+ next: 'அடுத்தது',
+ today: 'இன்று',
+ month: 'மாதம்',
+ week: 'வாரம்',
+ day: 'நாள்',
+ list: 'தினசரி அட்டவணை',
+ },
+ weekText: 'வாரம்',
+ allDayText: 'நாள் முழுவதும்',
+ moreLinkText(n) {
+ return '+ மேலும் ' + n;
+ },
+ noEventsText: 'காண்பிக்க நிகழ்வுகள் இல்லை',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ta-in.global.min.js b/library/fullcalendar/packages/core/locales/ta-in.global.min.js
new file mode 100644
index 000000000..fd1879031
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ta-in.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"ta-in",week:{dow:1,doy:4},buttonText:{prev:"முந்தைய",next:"அடுத்தது",today:"இன்று",month:"மாதம்",week:"வாரம்",day:"நாள்",list:"தினசரி அட்டவணை"},weekText:"வாரம்",allDayText:"நாள் முழுவதும்",moreLinkText:e=>"+ மேலும் "+e,noEventsText:"காண்பிக்க நிகழ்வுகள் இல்லை"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/th.global.js b/library/fullcalendar/packages/core/locales/th.global.js
new file mode 100644
index 000000000..e2d4a5bf2
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/th.global.js
@@ -0,0 +1,35 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'th',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'ก่อนหน้า',
+ next: 'ถัดไป',
+ prevYear: 'ปีก่อนหน้า',
+ nextYear: 'ปีถัดไป',
+ year: 'ปี',
+ today: 'วันนี้',
+ month: 'เดือน',
+ week: 'สัปดาห์',
+ day: 'วัน',
+ list: 'กำหนดการ',
+ },
+ weekText: 'สัปดาห์',
+ allDayText: 'ตลอดวัน',
+ moreLinkText: 'เพิ่มเติม',
+ noEventsText: 'ไม่มีกิจกรรมที่จะแสดง',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/th.global.min.js b/library/fullcalendar/packages/core/locales/th.global.min.js
new file mode 100644
index 000000000..ef7e6dbd2
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/th.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"th",week:{dow:1,doy:4},buttonText:{prev:"ก่อนหน้า",next:"ถัดไป",prevYear:"ปีก่อนหน้า",nextYear:"ปีถัดไป",year:"ปี",today:"วันนี้",month:"เดือน",week:"สัปดาห์",day:"วัน",list:"กำหนดการ"},weekText:"สัปดาห์",allDayText:"ตลอดวัน",moreLinkText:"เพิ่มเติม",noEventsText:"ไม่มีกิจกรรมที่จะแสดง"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/th.js b/library/fullcalendar/packages/core/locales/th.js
deleted file mode 100644
index faeaee214..000000000
--- a/library/fullcalendar/packages/core/locales/th.js
+++ /dev/null
@@ -1,33 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.th = factory()));
-}(this, function () { 'use strict';
-
- var th = {
- code: "th",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "ก่อนหน้า",
- next: "ถัดไป",
- prevYear: 'ปีก่อนหน้า',
- nextYear: 'ปีถัดไป',
- year: 'ปี',
- today: "วันนี้",
- month: "เดือน",
- week: "สัปดาห์",
- day: "วัน",
- list: "กำหนดการ"
- },
- weekLabel: "สัปดาห์",
- allDayText: "ตลอดวัน",
- eventLimitText: "เพิ่มเติม",
- noEventsMessage: "ไม่มีกิจกรรมที่จะแสดง"
- };
-
- return th;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/tr.global.js b/library/fullcalendar/packages/core/locales/tr.global.js
new file mode 100644
index 000000000..95b158954
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/tr.global.js
@@ -0,0 +1,32 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'tr',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'geri',
+ next: 'ileri',
+ today: 'bugün',
+ month: 'Ay',
+ week: 'Hafta',
+ day: 'Gün',
+ list: 'Ajanda',
+ },
+ weekText: 'Hf',
+ allDayText: 'Tüm gün',
+ moreLinkText: 'daha fazla',
+ noEventsText: 'Gösterilecek etkinlik yok',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/tr.global.min.js b/library/fullcalendar/packages/core/locales/tr.global.min.js
new file mode 100644
index 000000000..06811503a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/tr.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"tr",week:{dow:1,doy:7},buttonText:{prev:"geri",next:"ileri",today:"bugün",month:"Ay",week:"Hafta",day:"Gün",list:"Ajanda"},weekText:"Hf",allDayText:"Tüm gün",moreLinkText:"daha fazla",noEventsText:"Gösterilecek etkinlik yok"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/tr.js b/library/fullcalendar/packages/core/locales/tr.js
deleted file mode 100644
index 48458982f..000000000
--- a/library/fullcalendar/packages/core/locales/tr.js
+++ /dev/null
@@ -1,30 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.tr = factory()));
-}(this, function () { 'use strict';
-
- var tr = {
- code: "tr",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "geri",
- next: "ileri",
- today: "bugün",
- month: "Ay",
- week: "Hafta",
- day: "Gün",
- list: "Ajanda"
- },
- weekLabel: "Hf",
- allDayText: "Tüm gün",
- eventLimitText: "daha fazla",
- noEventsMessage: "Gösterilecek etkinlik yok"
- };
-
- return tr;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/ug.global.js b/library/fullcalendar/packages/core/locales/ug.global.js
new file mode 100644
index 000000000..4930d1302
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ug.global.js
@@ -0,0 +1,22 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'ug',
+ buttonText: {
+ month: 'ئاي',
+ week: 'ھەپتە',
+ day: 'كۈن',
+ list: 'كۈنتەرتىپ',
+ },
+ allDayText: 'پۈتۈن كۈن',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/ug.global.min.js b/library/fullcalendar/packages/core/locales/ug.global.min.js
new file mode 100644
index 000000000..308e2d782
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/ug.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(l){"use strict";FullCalendar.globalLocales.push({code:"ug",buttonText:{month:"ئاي",week:"ھەپتە",day:"كۈن",list:"كۈنتەرتىپ"},allDayText:"پۈتۈن كۈن"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/ug.js b/library/fullcalendar/packages/core/locales/ug.js
deleted file mode 100644
index f13a5c286..000000000
--- a/library/fullcalendar/packages/core/locales/ug.js
+++ /dev/null
@@ -1,20 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.ug = factory()));
-}(this, function () { 'use strict';
-
- var ug = {
- code: "ug",
- buttonText: {
- month: "ئاي",
- week: "ھەپتە",
- day: "كۈن",
- list: "كۈنتەرتىپ"
- },
- allDayText: "پۈتۈن كۈن"
- };
-
- return ug;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/uk.global.js b/library/fullcalendar/packages/core/locales/uk.global.js
new file mode 100644
index 000000000..36fd3b02a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/uk.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'uk',
+ week: {
+ dow: 1,
+ doy: 7, // The week that contains Jan 1st is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Попередній',
+ next: 'далі',
+ today: 'Сьогодні',
+ month: 'Місяць',
+ week: 'Тиждень',
+ day: 'День',
+ list: 'Порядок денний',
+ },
+ weekText: 'Тиж',
+ allDayText: 'Увесь день',
+ moreLinkText(n) {
+ return '+ще ' + n + '...';
+ },
+ noEventsText: 'Немає подій для відображення',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/uk.global.min.js b/library/fullcalendar/packages/core/locales/uk.global.min.js
new file mode 100644
index 000000000..1b0511592
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/uk.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"uk",week:{dow:1,doy:7},buttonText:{prev:"Попередній",next:"далі",today:"Сьогодні",month:"Місяць",week:"Тиждень",day:"День",list:"Порядок денний"},weekText:"Тиж",allDayText:"Увесь день",moreLinkText:e=>"+ще "+e+"...",noEventsText:"Немає подій для відображення"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/uk.js b/library/fullcalendar/packages/core/locales/uk.js
deleted file mode 100644
index de33f250c..000000000
--- a/library/fullcalendar/packages/core/locales/uk.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.uk = factory()));
-}(this, function () { 'use strict';
-
- var uk = {
- code: "uk",
- week: {
- dow: 1,
- doy: 7 // The week that contains Jan 1st is the first week of the year.
- },
- buttonText: {
- prev: "Попередній",
- next: "далі",
- today: "Сьогодні",
- month: "Місяць",
- week: "Тиждень",
- day: "День",
- list: "Порядок денний"
- },
- weekLabel: "Тиж",
- allDayText: "Увесь день",
- eventLimitText: function (n) {
- return "+ще " + n + "...";
- },
- noEventsMessage: "Немає подій для відображення"
- };
-
- return uk;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/uz.global.js b/library/fullcalendar/packages/core/locales/uz.global.js
new file mode 100644
index 000000000..7e49abb68
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/uz.global.js
@@ -0,0 +1,26 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'uz',
+ buttonText: {
+ month: 'Oy',
+ week: 'Xafta',
+ day: 'Kun',
+ list: 'Kun tartibi',
+ },
+ allDayText: 'Kun bo\'yi',
+ moreLinkText(n) {
+ return '+ yana ' + n;
+ },
+ noEventsText: 'Ko\'rsatish uchun voqealar yo\'q',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/uz.global.min.js b/library/fullcalendar/packages/core/locales/uz.global.min.js
new file mode 100644
index 000000000..e840a6014
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/uz.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(a){"use strict";var t={code:"uz",buttonText:{month:"Oy",week:"Xafta",day:"Kun",list:"Kun tartibi"},allDayText:"Kun bo'yi",moreLinkText:a=>"+ yana "+a,noEventsText:"Ko'rsatish uchun voqealar yo'q"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/uz.js b/library/fullcalendar/packages/core/locales/uz.js
deleted file mode 100644
index 24089756d..000000000
--- a/library/fullcalendar/packages/core/locales/uz.js
+++ /dev/null
@@ -1,24 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.uz = factory()));
-}(this, function () { 'use strict';
-
- var uz = {
- code: "uz",
- buttonText: {
- month: "Oy",
- week: "Xafta",
- day: "Kun",
- list: "Kun tartibi"
- },
- allDayText: "Kun bo'yi",
- eventLimitText: function (n) {
- return "+ yana " + n;
- },
- noEventsMessage: "Ko'rsatish uchun voqealar yo'q"
- };
-
- return uz;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/vi.global.js b/library/fullcalendar/packages/core/locales/vi.global.js
new file mode 100644
index 000000000..48e572df7
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/vi.global.js
@@ -0,0 +1,34 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'vi',
+ week: {
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: 'Trước',
+ next: 'Tiếp',
+ today: 'Hôm nay',
+ month: 'Tháng',
+ week: 'Tuần',
+ day: 'Ngày',
+ list: 'Lịch biểu',
+ },
+ weekText: 'Tu',
+ allDayText: 'Cả ngày',
+ moreLinkText(n) {
+ return '+ thêm ' + n;
+ },
+ noEventsText: 'Không có sự kiện để hiển thị',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/vi.global.min.js b/library/fullcalendar/packages/core/locales/vi.global.min.js
new file mode 100644
index 000000000..1ea5848d5
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/vi.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekText:"Tu",allDayText:"Cả ngày",moreLinkText:e=>"+ thêm "+e,noEventsText:"Không có sự kiện để hiển thị"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/vi.js b/library/fullcalendar/packages/core/locales/vi.js
deleted file mode 100644
index 167ce11d7..000000000
--- a/library/fullcalendar/packages/core/locales/vi.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales.vi = factory()));
-}(this, function () { 'use strict';
-
- var vi = {
- code: "vi",
- week: {
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "Trước",
- next: "Tiếp",
- today: "Hôm nay",
- month: "Tháng",
- week: "Tuần",
- day: "Ngày",
- list: "Lịch biểu"
- },
- weekLabel: "Tu",
- allDayText: "Cả ngày",
- eventLimitText: function (n) {
- return "+ thêm " + n;
- },
- noEventsMessage: "Không có sự kiện để hiển thị"
- };
-
- return vi;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/zh-cn.global.js b/library/fullcalendar/packages/core/locales/zh-cn.global.js
new file mode 100644
index 000000000..347dc6c3a
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/zh-cn.global.js
@@ -0,0 +1,35 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'zh-cn',
+ week: {
+ // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
+ dow: 1,
+ doy: 4, // The week that contains Jan 4th is the first week of the year.
+ },
+ buttonText: {
+ prev: '上月',
+ next: '下月',
+ today: '今天',
+ month: '月',
+ week: '周',
+ day: '日',
+ list: '日程',
+ },
+ weekText: '周',
+ allDayText: '全天',
+ moreLinkText(n) {
+ return '另外 ' + n + ' 个';
+ },
+ noEventsText: '没有事件显示',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/zh-cn.global.min.js b/library/fullcalendar/packages/core/locales/zh-cn.global.min.js
new file mode 100644
index 000000000..8e8b859c5
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/zh-cn.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";var t={code:"zh-cn",week:{dow:1,doy:4},buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"周",day:"日",list:"日程"},weekText:"周",allDayText:"全天",moreLinkText:e=>"另外 "+e+" 个",noEventsText:"没有事件显示"};FullCalendar.globalLocales.push(t)}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/zh-cn.js b/library/fullcalendar/packages/core/locales/zh-cn.js
deleted file mode 100644
index 4debbb9e6..000000000
--- a/library/fullcalendar/packages/core/locales/zh-cn.js
+++ /dev/null
@@ -1,33 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-cn'] = factory()));
-}(this, function () { 'use strict';
-
- var zhCn = {
- code: "zh-cn",
- week: {
- // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
- dow: 1,
- doy: 4 // The week that contains Jan 4th is the first week of the year.
- },
- buttonText: {
- prev: "上月",
- next: "下月",
- today: "今天",
- month: "月",
- week: "周",
- day: "日",
- list: "日程"
- },
- weekLabel: "周",
- allDayText: "全天",
- eventLimitText: function (n) {
- return "另外 " + n + " 个";
- },
- noEventsMessage: "没有事件显示"
- };
-
- return zhCn;
-
-}));
diff --git a/library/fullcalendar/packages/core/locales/zh-tw.global.js b/library/fullcalendar/packages/core/locales/zh-tw.global.js
new file mode 100644
index 000000000..dcedbc7f2
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/zh-tw.global.js
@@ -0,0 +1,28 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (index_js) {
+ 'use strict';
+
+ var locale = {
+ code: 'zh-tw',
+ buttonText: {
+ prev: '上月',
+ next: '下月',
+ today: '今天',
+ month: '月',
+ week: '週',
+ day: '天',
+ list: '活動列表',
+ },
+ weekText: '周',
+ allDayText: '整天',
+ moreLinkText: '顯示更多',
+ noEventsText: '没有任何活動',
+ };
+
+ index_js.globalLocales.push(locale);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/core/locales/zh-tw.global.min.js b/library/fullcalendar/packages/core/locales/zh-tw.global.min.js
new file mode 100644
index 000000000..44ee5a70c
--- /dev/null
+++ b/library/fullcalendar/packages/core/locales/zh-tw.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Core v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(e){"use strict";FullCalendar.globalLocales.push({code:"zh-tw",buttonText:{prev:"上月",next:"下月",today:"今天",month:"月",week:"週",day:"天",list:"活動列表"},weekText:"周",allDayText:"整天",moreLinkText:"顯示更多",noEventsText:"没有任何活動"})}(); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/locales/zh-tw.js b/library/fullcalendar/packages/core/locales/zh-tw.js
deleted file mode 100644
index bc14dcd4b..000000000
--- a/library/fullcalendar/packages/core/locales/zh-tw.js
+++ /dev/null
@@ -1,26 +0,0 @@
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, (global.FullCalendarLocales = global.FullCalendarLocales || {}, global.FullCalendarLocales['zh-tw'] = factory()));
-}(this, function () { 'use strict';
-
- var zhTw = {
- code: "zh-tw",
- buttonText: {
- prev: "上月",
- next: "下月",
- today: "今天",
- month: "月",
- week: "週",
- day: "天",
- list: "活動列表"
- },
- weekLabel: "周",
- allDayText: "整天",
- eventLimitText: '顯示更多',
- noEventsMessage: "没有任何活動"
- };
-
- return zhTw;
-
-}));
diff --git a/library/fullcalendar/packages/core/main.css b/library/fullcalendar/packages/core/main.css
deleted file mode 100644
index 4412a1858..000000000
--- a/library/fullcalendar/packages/core/main.css
+++ /dev/null
@@ -1,1052 +0,0 @@
-@charset "UTF-8";
-.fc {
- direction: ltr;
- text-align: left;
-}
-
-.fc-rtl {
- text-align: right;
-}
-
-body .fc {
- /* extra precedence to overcome jqui */
- font-size: 1em;
-}
-
-/* Colors
---------------------------------------------------------------------------------------------------*/
-.fc-highlight {
- /* when user is selecting cells */
- background: #bce8f1;
- opacity: 0.3;
-}
-
-.fc-bgevent {
- /* default look for background events */
- background: #8fdf82;
- opacity: 0.3;
-}
-
-.fc-nonbusiness {
- /* default look for non-business-hours areas */
- /* will inherit .fc-bgevent's styles */
- background: #d7d7d7;
-}
-
-/* Popover
---------------------------------------------------------------------------------------------------*/
-.fc-popover {
- position: absolute;
- box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
-}
-
-.fc-popover .fc-header {
- /* TODO: be more consistent with fc-head/fc-body */
- display: flex;
- flex-direction: row;
- justify-content: space-between;
- align-items: center;
- padding: 2px 4px;
-}
-
-.fc-rtl .fc-popover .fc-header {
- flex-direction: row-reverse;
-}
-
-.fc-popover .fc-header .fc-title {
- margin: 0 2px;
-}
-
-.fc-popover .fc-header .fc-close {
- cursor: pointer;
- opacity: 0.65;
- font-size: 1.1em;
-}
-
-/* Misc Reusable Components
---------------------------------------------------------------------------------------------------*/
-.fc-divider {
- border-style: solid;
- border-width: 1px;
-}
-
-hr.fc-divider {
- height: 0;
- margin: 0;
- padding: 0 0 2px;
- /* height is unreliable across browsers, so use padding */
- border-width: 1px 0;
-}
-
-.fc-bg,
-.fc-bgevent-skeleton,
-.fc-highlight-skeleton,
-.fc-mirror-skeleton {
- /* these element should always cling to top-left/right corners */
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
-}
-
-.fc-bg {
- bottom: 0;
- /* strech bg to bottom edge */
-}
-
-.fc-bg table {
- height: 100%;
- /* strech bg to bottom edge */
-}
-
-/* Tables
---------------------------------------------------------------------------------------------------*/
-.fc table {
- width: 100%;
- box-sizing: border-box;
- /* fix scrollbar issue in firefox */
- table-layout: fixed;
- border-collapse: collapse;
- border-spacing: 0;
- font-size: 1em;
- /* normalize cross-browser */
-}
-
-.fc th {
- text-align: center;
-}
-
-.fc th,
-.fc td {
- border-style: solid;
- border-width: 1px;
- padding: 0;
- vertical-align: top;
-}
-
-.fc td.fc-today {
- border-style: double;
- /* overcome neighboring borders */
-}
-
-/* Internal Nav Links
---------------------------------------------------------------------------------------------------*/
-a[data-goto] {
- cursor: pointer;
-}
-
-a[data-goto]:hover {
- text-decoration: underline;
-}
-
-/* Fake Table Rows
---------------------------------------------------------------------------------------------------*/
-.fc .fc-row {
- /* extra precedence to overcome themes forcing a 1px border */
- /* no visible border by default. but make available if need be (scrollbar width compensation) */
- border-style: solid;
- border-width: 0;
-}
-
-.fc-row table {
- /* don't put left/right border on anything within a fake row.
- the outer tbody will worry about this */
- border-left: 0 hidden transparent;
- border-right: 0 hidden transparent;
- /* no bottom borders on rows */
- border-bottom: 0 hidden transparent;
-}
-
-.fc-row:first-child table {
- border-top: 0 hidden transparent;
- /* no top border on first row */
-}
-
-/* Day Row (used within the header and the DayGrid)
---------------------------------------------------------------------------------------------------*/
-.fc-row {
- position: relative;
-}
-
-.fc-row .fc-bg {
- z-index: 1;
-}
-
-/* highlighting cells & background event skeleton */
-.fc-row .fc-bgevent-skeleton,
-.fc-row .fc-highlight-skeleton {
- bottom: 0;
- /* stretch skeleton to bottom of row */
-}
-
-.fc-row .fc-bgevent-skeleton table,
-.fc-row .fc-highlight-skeleton table {
- height: 100%;
- /* stretch skeleton to bottom of row */
-}
-
-.fc-row .fc-highlight-skeleton td,
-.fc-row .fc-bgevent-skeleton td {
- border-color: transparent;
-}
-
-.fc-row .fc-bgevent-skeleton {
- z-index: 2;
-}
-
-.fc-row .fc-highlight-skeleton {
- z-index: 3;
-}
-
-/*
-row content (which contains day/week numbers and events) as well as "mirror" (which contains
-temporary rendered events).
-*/
-.fc-row .fc-content-skeleton {
- position: relative;
- z-index: 4;
- padding-bottom: 2px;
- /* matches the space above the events */
-}
-
-.fc-row .fc-mirror-skeleton {
- z-index: 5;
-}
-
-.fc .fc-row .fc-content-skeleton table,
-.fc .fc-row .fc-content-skeleton td,
-.fc .fc-row .fc-mirror-skeleton td {
- /* see-through to the background below */
- /* extra precedence to prevent theme-provided backgrounds */
- background: none;
- /* in case <td>s are globally styled */
- border-color: transparent;
-}
-
-.fc-row .fc-content-skeleton td,
-.fc-row .fc-mirror-skeleton td {
- /* don't put a border between events and/or the day number */
- border-bottom: 0;
-}
-
-.fc-row .fc-content-skeleton tbody td,
-.fc-row .fc-mirror-skeleton tbody td {
- /* don't put a border between event cells */
- border-top: 0;
-}
-
-/* Scrolling Container
---------------------------------------------------------------------------------------------------*/
-.fc-scroller {
- -webkit-overflow-scrolling: touch;
-}
-
-/* TODO: move to timegrid/daygrid */
-.fc-scroller > .fc-day-grid,
-.fc-scroller > .fc-time-grid {
- position: relative;
- /* re-scope all positions */
- width: 100%;
- /* hack to force re-sizing this inner element when scrollbars appear/disappear */
-}
-
-/* Global Event Styles
---------------------------------------------------------------------------------------------------*/
-.fc-event {
- position: relative;
- /* for resize handle and other inner positioning */
- display: block;
- /* make the <a> tag block */
- font-size: 0.85em;
- line-height: 1.4;
- border-radius: 3px;
- border: 1px solid #3788d8;
-}
-
-.fc-event,
-.fc-event-dot {
- background-color: #3788d8;
- /* default BACKGROUND color */
-}
-
-.fc-event,
-.fc-event:hover {
- color: #fff;
- /* default TEXT color */
- text-decoration: none;
- /* if <a> has an href */
-}
-
-.fc-event[href],
-.fc-event.fc-draggable {
- cursor: pointer;
- /* give events with links and draggable events a hand mouse pointer */
-}
-
-.fc-not-allowed,
-.fc-not-allowed .fc-event {
- /* to override an event's custom cursor */
- cursor: not-allowed;
-}
-
-.fc-event .fc-content {
- position: relative;
- z-index: 2;
-}
-
-/* resizer (cursor AND touch devices) */
-.fc-event .fc-resizer {
- position: absolute;
- z-index: 4;
-}
-
-/* resizer (touch devices) */
-.fc-event .fc-resizer {
- display: none;
-}
-
-.fc-event.fc-allow-mouse-resize .fc-resizer,
-.fc-event.fc-selected .fc-resizer {
- /* only show when hovering or selected (with touch) */
- display: block;
-}
-
-/* hit area */
-.fc-event.fc-selected .fc-resizer:before {
- /* 40x40 touch area */
- content: "";
- position: absolute;
- z-index: 9999;
- /* user of this util can scope within a lower z-index */
- top: 50%;
- left: 50%;
- width: 40px;
- height: 40px;
- margin-left: -20px;
- margin-top: -20px;
-}
-
-/* Event Selection (only for touch devices)
---------------------------------------------------------------------------------------------------*/
-.fc-event.fc-selected {
- z-index: 9999 !important;
- /* overcomes inline z-index */
- box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
-}
-
-.fc-event.fc-selected:after {
- content: "";
- position: absolute;
- z-index: 1;
- /* same z-index as fc-bg, behind text */
- /* overcome the borders */
- top: -1px;
- right: -1px;
- bottom: -1px;
- left: -1px;
- /* darkening effect */
- background: #000;
- opacity: 0.25;
-}
-
-/* Event Dragging
---------------------------------------------------------------------------------------------------*/
-.fc-event.fc-dragging.fc-selected {
- box-shadow: 0 2px 7px rgba(0, 0, 0, 0.3);
-}
-
-.fc-event.fc-dragging:not(.fc-selected) {
- opacity: 0.75;
-}
-
-/* Horizontal Events
---------------------------------------------------------------------------------------------------*/
-/* bigger touch area when selected */
-.fc-h-event.fc-selected:before {
- content: "";
- position: absolute;
- z-index: 3;
- /* below resizers */
- top: -10px;
- bottom: -10px;
- left: 0;
- right: 0;
-}
-
-/* events that are continuing to/from another week. kill rounded corners and butt up against edge */
-.fc-ltr .fc-h-event.fc-not-start,
-.fc-rtl .fc-h-event.fc-not-end {
- margin-left: 0;
- border-left-width: 0;
- padding-left: 1px;
- /* replace the border with padding */
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.fc-ltr .fc-h-event.fc-not-end,
-.fc-rtl .fc-h-event.fc-not-start {
- margin-right: 0;
- border-right-width: 0;
- padding-right: 1px;
- /* replace the border with padding */
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-/* resizer (cursor AND touch devices) */
-/* left resizer */
-.fc-ltr .fc-h-event .fc-start-resizer,
-.fc-rtl .fc-h-event .fc-end-resizer {
- cursor: w-resize;
- left: -1px;
- /* overcome border */
-}
-
-/* right resizer */
-.fc-ltr .fc-h-event .fc-end-resizer,
-.fc-rtl .fc-h-event .fc-start-resizer {
- cursor: e-resize;
- right: -1px;
- /* overcome border */
-}
-
-/* resizer (mouse devices) */
-.fc-h-event.fc-allow-mouse-resize .fc-resizer {
- width: 7px;
- top: -1px;
- /* overcome top border */
- bottom: -1px;
- /* overcome bottom border */
-}
-
-/* resizer (touch devices) */
-.fc-h-event.fc-selected .fc-resizer {
- /* 8x8 little dot */
- border-radius: 4px;
- border-width: 1px;
- width: 6px;
- height: 6px;
- border-style: solid;
- border-color: inherit;
- background: #fff;
- /* vertically center */
- top: 50%;
- margin-top: -4px;
-}
-
-/* left resizer */
-.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,
-.fc-rtl .fc-h-event.fc-selected .fc-end-resizer {
- margin-left: -4px;
- /* centers the 8x8 dot on the left edge */
-}
-
-/* right resizer */
-.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,
-.fc-rtl .fc-h-event.fc-selected .fc-start-resizer {
- margin-right: -4px;
- /* centers the 8x8 dot on the right edge */
-}
-
-/* DayGrid events
-----------------------------------------------------------------------------------------------------
-We use the full "fc-day-grid-event" class instead of using descendants because the event won't
-be a descendant of the grid when it is being dragged.
-*/
-.fc-day-grid-event {
- margin: 1px 2px 0;
- /* spacing between events and edges */
- padding: 0 1px;
-}
-
-tr:first-child > td > .fc-day-grid-event {
- margin-top: 2px;
- /* a little bit more space before the first event */
-}
-
-.fc-mirror-skeleton tr:first-child > td > .fc-day-grid-event {
- margin-top: 0;
- /* except for mirror skeleton */
-}
-
-.fc-day-grid-event .fc-content {
- /* force events to be one-line tall */
- white-space: nowrap;
- overflow: hidden;
-}
-
-.fc-day-grid-event .fc-time {
- font-weight: bold;
-}
-
-/* resizer (cursor devices) */
-/* left resizer */
-.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,
-.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer {
- margin-left: -2px;
- /* to the day cell's edge */
-}
-
-/* right resizer */
-.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,
-.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer {
- margin-right: -2px;
- /* to the day cell's edge */
-}
-
-/* Event Limiting
---------------------------------------------------------------------------------------------------*/
-/* "more" link that represents hidden events */
-a.fc-more {
- margin: 1px 3px;
- font-size: 0.85em;
- cursor: pointer;
- text-decoration: none;
-}
-
-a.fc-more:hover {
- text-decoration: underline;
-}
-
-.fc-limited {
- /* rows and cells that are hidden because of a "more" link */
- display: none;
-}
-
-/* popover that appears when "more" link is clicked */
-.fc-day-grid .fc-row {
- z-index: 1;
- /* make the "more" popover one higher than this */
-}
-
-.fc-more-popover {
- z-index: 2;
- width: 220px;
-}
-
-.fc-more-popover .fc-event-container {
- padding: 10px;
-}
-
-/* Now Indicator
---------------------------------------------------------------------------------------------------*/
-.fc-now-indicator {
- position: absolute;
- border: 0 solid red;
-}
-
-/* Utilities
---------------------------------------------------------------------------------------------------*/
-.fc-unselectable {
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
-}
-
-/*
-TODO: more distinction between this file and common.css
-*/
-/* Colors
---------------------------------------------------------------------------------------------------*/
-.fc-unthemed th,
-.fc-unthemed td,
-.fc-unthemed thead,
-.fc-unthemed tbody,
-.fc-unthemed .fc-divider,
-.fc-unthemed .fc-row,
-.fc-unthemed .fc-content,
-.fc-unthemed .fc-popover,
-.fc-unthemed .fc-list-view,
-.fc-unthemed .fc-list-heading td {
- border-color: #ddd;
-}
-
-.fc-unthemed .fc-popover {
- background-color: #fff;
-}
-
-.fc-unthemed .fc-divider,
-.fc-unthemed .fc-popover .fc-header,
-.fc-unthemed .fc-list-heading td {
- background: #eee;
-}
-
-.fc-unthemed td.fc-today {
- background: #fcf8e3;
-}
-
-.fc-unthemed .fc-disabled-day {
- background: #d7d7d7;
- opacity: 0.3;
-}
-
-/* Icons
---------------------------------------------------------------------------------------------------
-from https://feathericons.com/ and built with IcoMoon
-*/
-@font-face {
- font-family: "fcicons";
- src: url("data:application/x-font-ttf;charset=utf-8;base64,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") format("truetype");
- font-weight: normal;
- font-style: normal;
-}
-.fc-icon {
- /* use !important to prevent issues with browser extensions that change fonts */
- font-family: "fcicons" !important;
- speak: none;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
- /* Better Font Rendering =========== */
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.fc-icon-chevron-left:before {
- content: "";
-}
-
-.fc-icon-chevron-right:before {
- content: "";
-}
-
-.fc-icon-chevrons-left:before {
- content: "";
-}
-
-.fc-icon-chevrons-right:before {
- content: "";
-}
-
-.fc-icon-minus-square:before {
- content: "";
-}
-
-.fc-icon-plus-square:before {
- content: "";
-}
-
-.fc-icon-x:before {
- content: "";
-}
-
-.fc-icon {
- display: inline-block;
- width: 1em;
- height: 1em;
- text-align: center;
-}
-
-/* Buttons
---------------------------------------------------------------------------------------------------
-Lots taken from Flatly (MIT): https://bootswatch.com/4/flatly/bootstrap.css
-*/
-/* reset */
-.fc-button {
- border-radius: 0;
- overflow: visible;
- text-transform: none;
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-
-.fc-button:focus {
- outline: 1px dotted;
- outline: 5px auto -webkit-focus-ring-color;
-}
-
-.fc-button {
- -webkit-appearance: button;
-}
-
-.fc-button:not(:disabled) {
- cursor: pointer;
-}
-
-.fc-button::-moz-focus-inner {
- padding: 0;
- border-style: none;
-}
-
-/* theme */
-.fc-button {
- display: inline-block;
- font-weight: 400;
- color: #212529;
- text-align: center;
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-color: transparent;
- border: 1px solid transparent;
- padding: 0.4em 0.65em;
- font-size: 1em;
- line-height: 1.5;
- border-radius: 0.25em;
-}
-
-.fc-button:hover {
- color: #212529;
- text-decoration: none;
-}
-
-.fc-button:focus {
- outline: 0;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(44, 62, 80, 0.25);
-}
-
-.fc-button:disabled {
- opacity: 0.65;
-}
-
-/* "primary" coloring */
-.fc-button-primary {
- color: #fff;
- background-color: #2C3E50;
- border-color: #2C3E50;
-}
-
-.fc-button-primary:hover {
- color: #fff;
- background-color: #1e2b37;
- border-color: #1a252f;
-}
-
-.fc-button-primary:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5);
-}
-
-.fc-button-primary:disabled {
- color: #fff;
- background-color: #2C3E50;
- border-color: #2C3E50;
-}
-
-.fc-button-primary:not(:disabled):active,
-.fc-button-primary:not(:disabled).fc-button-active {
- color: #fff;
- background-color: #1a252f;
- border-color: #151e27;
-}
-
-.fc-button-primary:not(:disabled):active:focus,
-.fc-button-primary:not(:disabled).fc-button-active:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(76, 91, 106, 0.5);
-}
-
-/* icons within buttons */
-.fc-button .fc-icon {
- vertical-align: middle;
- font-size: 1.5em;
-}
-
-/* Buttons Groups
---------------------------------------------------------------------------------------------------*/
-.fc-button-group {
- position: relative;
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
- display: inline-flex;
- vertical-align: middle;
-}
-
-.fc-button-group > .fc-button {
- position: relative;
- -webkit-box-flex: 1;
- -ms-flex: 1 1 auto;
- flex: 1 1 auto;
-}
-
-.fc-button-group > .fc-button:hover {
- z-index: 1;
-}
-
-.fc-button-group > .fc-button:focus,
-.fc-button-group > .fc-button:active,
-.fc-button-group > .fc-button.fc-button-active {
- z-index: 1;
-}
-
-.fc-button-group > .fc-button:not(:first-child) {
- margin-left: -1px;
-}
-
-.fc-button-group > .fc-button:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.fc-button-group > .fc-button:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-/* Popover
---------------------------------------------------------------------------------------------------*/
-.fc-unthemed .fc-popover {
- border-width: 1px;
- border-style: solid;
-}
-
-/* List View
---------------------------------------------------------------------------------------------------*/
-.fc-unthemed .fc-list-item:hover td {
- background-color: #f5f5f5;
-}
-
-/* Toolbar
---------------------------------------------------------------------------------------------------*/
-.fc-toolbar {
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
-
-.fc-toolbar.fc-header-toolbar {
- margin-bottom: 1.5em;
-}
-
-.fc-toolbar.fc-footer-toolbar {
- margin-top: 1.5em;
-}
-
-/* inner content */
-.fc-toolbar > * > :not(:first-child) {
- margin-left: 0.75em;
-}
-
-.fc-toolbar h2 {
- font-size: 1.75em;
- margin: 0;
-}
-
-/* View Structure
---------------------------------------------------------------------------------------------------*/
-.fc-view-container {
- position: relative;
-}
-
-/* undo twitter bootstrap's box-sizing rules. normalizes positioning techniques */
-/* don't do this for the toolbar because we'll want bootstrap to style those buttons as some pt */
-.fc-view-container *,
-.fc-view-container *:before,
-.fc-view-container *:after {
- -webkit-box-sizing: content-box;
- -moz-box-sizing: content-box;
- box-sizing: content-box;
-}
-
-.fc-view,
-.fc-view > table {
- /* so dragged elements can be above the view's main element */
- position: relative;
- z-index: 1;
-}
-
-@media print {
- .fc {
- max-width: 100% !important;
- }
-
- /* Global Event Restyling
- --------------------------------------------------------------------------------------------------*/
- .fc-event {
- background: #fff !important;
- color: #000 !important;
- page-break-inside: avoid;
- }
-
- .fc-event .fc-resizer {
- display: none;
- }
-
- /* Table & Day-Row Restyling
- --------------------------------------------------------------------------------------------------*/
- .fc th,
-.fc td,
-.fc hr,
-.fc thead,
-.fc tbody,
-.fc-row {
- border-color: #ccc !important;
- background: #fff !important;
- }
-
- /* kill the overlaid, absolutely-positioned components */
- /* common... */
- .fc-bg,
-.fc-bgevent-skeleton,
-.fc-highlight-skeleton,
-.fc-mirror-skeleton,
-.fc-bgevent-container,
-.fc-business-container,
-.fc-highlight-container,
-.fc-mirror-container {
- display: none;
- }
-
- /* don't force a min-height on rows (for DayGrid) */
- .fc tbody .fc-row {
- height: auto !important;
- /* undo height that JS set in distributeHeight */
- min-height: 0 !important;
- /* undo the min-height from each view's specific stylesheet */
- }
-
- .fc tbody .fc-row .fc-content-skeleton {
- position: static;
- /* undo .fc-rigid */
- padding-bottom: 0 !important;
- /* use a more border-friendly method for this... */
- }
-
- .fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td {
- /* only works in newer browsers */
- padding-bottom: 1em;
- /* ...gives space within the skeleton. also ensures min height in a way */
- }
-
- .fc tbody .fc-row .fc-content-skeleton table {
- /* provides a min-height for the row, but only effective for IE, which exaggerates this value,
- making it look more like 3em. for other browers, it will already be this tall */
- height: 1em;
- }
-
- /* Undo month-view event limiting. Display all events and hide the "more" links
- --------------------------------------------------------------------------------------------------*/
- .fc-more-cell,
-.fc-more {
- display: none !important;
- }
-
- .fc tr.fc-limited {
- display: table-row !important;
- }
-
- .fc td.fc-limited {
- display: table-cell !important;
- }
-
- .fc-popover {
- display: none;
- /* never display the "more.." popover in print mode */
- }
-
- /* TimeGrid Restyling
- --------------------------------------------------------------------------------------------------*/
- /* undo the min-height 100% trick used to fill the container's height */
- .fc-time-grid {
- min-height: 0 !important;
- }
-
- /* don't display the side axis at all ("all-day" and time cells) */
- .fc-timeGrid-view .fc-axis {
- display: none;
- }
-
- /* don't display the horizontal lines */
- .fc-slats,
-.fc-time-grid hr {
- /* this hr is used when height is underused and needs to be filled */
- display: none !important;
- /* important overrides inline declaration */
- }
-
- /* let the container that holds the events be naturally positioned and create real height */
- .fc-time-grid .fc-content-skeleton {
- position: static;
- }
-
- /* in case there are no events, we still want some height */
- .fc-time-grid .fc-content-skeleton table {
- height: 4em;
- }
-
- /* kill the horizontal spacing made by the event container. event margins will be done below */
- .fc-time-grid .fc-event-container {
- margin: 0 !important;
- }
-
- /* TimeGrid *Event* Restyling
- --------------------------------------------------------------------------------------------------*/
- /* naturally position events, vertically stacking them */
- .fc-time-grid .fc-event {
- position: static !important;
- margin: 3px 2px !important;
- }
-
- /* for events that continue to a future day, give the bottom border back */
- .fc-time-grid .fc-event.fc-not-end {
- border-bottom-width: 1px !important;
- }
-
- /* indicate the event continues via "..." text */
- .fc-time-grid .fc-event.fc-not-end:after {
- content: "...";
- }
-
- /* for events that are continuations from previous days, give the top border back */
- .fc-time-grid .fc-event.fc-not-start {
- border-top-width: 1px !important;
- }
-
- /* indicate the event is a continuation via "..." text */
- .fc-time-grid .fc-event.fc-not-start:before {
- content: "...";
- }
-
- /* time */
- /* undo a previous declaration and let the time text span to a second line */
- .fc-time-grid .fc-event .fc-time {
- white-space: normal !important;
- }
-
- /* hide the the time that is normally displayed... */
- .fc-time-grid .fc-event .fc-time span {
- display: none;
- }
-
- /* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */
- .fc-time-grid .fc-event .fc-time:after {
- content: attr(data-full);
- }
-
- /* Vertical Scroller & Containers
- --------------------------------------------------------------------------------------------------*/
- /* kill the scrollbars and allow natural height */
- .fc-scroller,
-.fc-day-grid-container,
-.fc-time-grid-container {
- /* */
- overflow: visible !important;
- height: auto !important;
- }
-
- /* kill the horizontal border/padding used to compensate for scrollbars */
- .fc-row {
- border: 0 !important;
- margin: 0 !important;
- }
-
- /* Button Controls
- --------------------------------------------------------------------------------------------------*/
- .fc-button-group,
-.fc button {
- display: none;
- /* don't display any button-related controls */
- }
-}
diff --git a/library/fullcalendar/packages/core/main.d.ts b/library/fullcalendar/packages/core/main.d.ts
deleted file mode 100644
index b6459021c..000000000
--- a/library/fullcalendar/packages/core/main.d.ts
+++ /dev/null
@@ -1,2736 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../@fullcalendar/core
-
-declare module '@fullcalendar/core' {
- export const version = "<%= version %>";
- export { OptionsInput } from '@fullcalendar/core/types/input-types';
- export { EventInput, EventDef, EventDefHash, EventInstance, EventInstanceHash, parseEventDef, createEventInstance, EventTuple } from '@fullcalendar/core/structs/event';
- export { BusinessHoursInput, parseBusinessHours } from '@fullcalendar/core/structs/business-hours';
- export { applyAll, debounce, padStart, isInt, capitaliseFirstLetter, parseFieldSpecs, compareByFieldSpecs, compareByFieldSpec, flexibleCompare, computeVisibleDayRange, refineProps, matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight, isMultiDayRange, distributeHeight, undistributeHeight, preventSelection, allowSelection, preventContextMenu, allowContextMenu, compareNumbers, enableCursor, disableCursor, diffDates } from '@fullcalendar/core/util/misc';
- export { htmlEscape, cssToStr } from '@fullcalendar/core/util/html';
- export { removeExact, isArraysEqual } from '@fullcalendar/core/util/array';
- export { memoize, memoizeOutput } from '@fullcalendar/core/util/memoize';
- export { memoizeRendering, MemoizedRendering } from '@fullcalendar/core/component/memoized-rendering';
- export { intersectRects, Rect, pointInsideRect, constrainPoint, getRectCenter, diffPoints, Point, translateRect } from '@fullcalendar/core/util/geom';
- export { mapHash, filterHash, isPropsEqual } from '@fullcalendar/core/util/object';
- export { findElements, findChildren, htmlToElement, createElement, insertAfterElement, prependToElement, removeElement, appendToElement, applyStyle, applyStyleProp, elementMatches, elementClosest, forceClassName } from '@fullcalendar/core/util/dom-manip';
- export { EventStore, filterEventStoreDefs, createEmptyEventStore, mergeEventStores, getRelevantEvents, eventTupleToStore } from '@fullcalendar/core/structs/event-store';
- export { EventUiHash, EventUi, processScopedUiProps, combineEventUis } from '@fullcalendar/core/component/event-ui';
- export { default as Splitter, SplittableProps } from '@fullcalendar/core/component/event-splitting';
- export { buildGotoAnchorHtml, getAllDayHtml, getDayClasses } from '@fullcalendar/core/component/date-rendering';
- export { preventDefault, listenBySelector, whenTransitionDone } from '@fullcalendar/core/util/dom-event';
- export { computeInnerRect, computeEdges, computeHeightAndMargins, getClippingParents, computeClippingRect, computeRect } from '@fullcalendar/core/util/dom-geom';
- export { unpromisify } from '@fullcalendar/core/util/promise';
- export { default as EmitterMixin, EmitterInterface } from '@fullcalendar/core/common/EmitterMixin';
- export { DateRange, rangeContainsMarker, intersectRanges, rangesEqual, rangesIntersect, rangeContainsRange } from '@fullcalendar/core/datelib/date-range';
- export { default as Mixin } from '@fullcalendar/core/common/Mixin';
- export { default as PositionCache } from '@fullcalendar/core/common/PositionCache';
- export { default as ScrollComponent, ScrollbarWidths } from '@fullcalendar/core/common/ScrollComponent';
- export { ScrollController, ElementScrollController, WindowScrollController } from '@fullcalendar/core/common/scroll-controller';
- export { default as Theme } from '@fullcalendar/core/theme/Theme';
- export { default as Component, ComponentContext } from '@fullcalendar/core/component/Component';
- export { default as DateComponent, Seg, EventSegUiInteractionState } from '@fullcalendar/core/component/DateComponent';
- export { default as Calendar, DatePointTransform, DateSpanTransform, DateSelectionApi } from '@fullcalendar/core/Calendar';
- export { default as View, ViewProps } from '@fullcalendar/core/View';
- export { default as FgEventRenderer, buildSegCompareObj } from '@fullcalendar/core/component/renderers/FgEventRenderer';
- export { default as FillRenderer } from '@fullcalendar/core/component/renderers/FillRenderer';
- export { default as DateProfileGenerator, DateProfile } from '@fullcalendar/core/DateProfileGenerator';
- export { ViewDef } from '@fullcalendar/core/structs/view-def';
- export { ViewSpec } from '@fullcalendar/core/structs/view-spec';
- export { DateSpan, DateSpanApi, DatePointApi, isDateSpansEqual } from '@fullcalendar/core/structs/date-span';
- export { DateMarker, addDays, startOfDay, addMs, addWeeks, diffWeeks, diffWholeWeeks, diffWholeDays, diffDayAndTime, diffDays, isValidDate } from '@fullcalendar/core/datelib/marker';
- export { Duration, createDuration, isSingleDay, multiplyDuration, addDurations, asRoughMinutes, asRoughSeconds, asRoughMs, wholeDivideDurations, greatestDurationDenominator } from '@fullcalendar/core/datelib/duration';
- export { DateEnv, DateMarkerMeta } from '@fullcalendar/core/datelib/env';
- export { DateFormatter, createFormatter, VerboseFormattingArg, formatIsoTimeString } from '@fullcalendar/core/datelib/formatting';
- export { NamedTimeZoneImpl } from '@fullcalendar/core/datelib/timezone';
- export { parse as parseMarker } from '@fullcalendar/core/datelib/parsing';
- export { EventSourceDef, EventSource, EventSourceHash } from '@fullcalendar/core/structs/event-source';
- export { Interaction, InteractionSettings, interactionSettingsToStore, interactionSettingsStore, InteractionSettingsStore } from '@fullcalendar/core/interactions/interaction';
- export { PointerDragEvent } from '@fullcalendar/core/interactions/pointer';
- export { Hit } from '@fullcalendar/core/interactions/hit';
- export { dateSelectionJoinTransformer } from '@fullcalendar/core/interactions/date-selecting';
- export { eventDragMutationMassager, EventDropTransformers } from '@fullcalendar/core/interactions/event-dragging';
- export { EventResizeJoinTransforms } from '@fullcalendar/core/interactions/event-resizing';
- export { default as ElementDragging } from '@fullcalendar/core/interactions/ElementDragging';
- export { formatDate, formatRange } from '@fullcalendar/core/formatting-api';
- export { globalDefaults, config } from '@fullcalendar/core/options';
- export { RecurringType, ParsedRecurring } from '@fullcalendar/core/structs/recurring-event';
- export { DragMetaInput, DragMeta, parseDragMeta } from '@fullcalendar/core/structs/drag-meta';
- export { createPlugin, PluginDef, PluginDefInput, ViewPropsTransformer, ViewContainerModifier } from '@fullcalendar/core/plugin-system';
- export { reducerFunc, Action, CalendarState } from '@fullcalendar/core/reducers/types';
- export { CalendarComponentProps } from '@fullcalendar/core/CalendarComponent';
- export { default as DayHeader } from '@fullcalendar/core/common/DayHeader';
- export { computeFallbackHeaderFormat, renderDateCell } from '@fullcalendar/core/common/table-utils';
- export { default as DaySeries } from '@fullcalendar/core/common/DaySeries';
- export { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state';
- export { EventRenderRange, sliceEventStore, hasBgRendering, getElSeg, computeEventDraggable, computeEventStartResizable, computeEventEndResizable } from '@fullcalendar/core/component/event-rendering';
- export { default as DayTable, DayTableSeg, DayTableCell } from '@fullcalendar/core/common/DayTable';
- export { default as Slicer, SlicedProps } from '@fullcalendar/core/common/slicing-utils';
- export { EventMutation, applyMutationToEventStore } from '@fullcalendar/core/structs/event-mutation';
- export { Constraint, ConstraintInput, AllowFunc, isPropsValid, isInteractionValid } from '@fullcalendar/core/validation';
- export { default as EventApi } from '@fullcalendar/core/api/EventApi';
- export { default as requestJson } from '@fullcalendar/core/util/requestJson';
-}
-
-declare module '@fullcalendar/core/types/input-types' {
- import View from '@fullcalendar/core/View';
- import { EventSourceInput, EventInputTransformer } from '@fullcalendar/core/structs/event-source';
- import { Duration, DurationInput } from '@fullcalendar/core/datelib/duration';
- import { DateInput } from '@fullcalendar/core/datelib/env';
- import { FormatterInput } from '@fullcalendar/core/datelib/formatting';
- import { DateRangeInput } from '@fullcalendar/core/datelib/date-range';
- import { BusinessHoursInput } from '@fullcalendar/core/structs/business-hours';
- import EventApi from '@fullcalendar/core/api/EventApi';
- import { AllowFunc, ConstraintInput, OverlapFunc } from '@fullcalendar/core/validation';
- import { PluginDef } from '@fullcalendar/core/plugin-system';
- import { LocaleSingularArg, RawLocale } from '@fullcalendar/core/datelib/locale';
- export interface ToolbarInput {
- left?: string;
- center?: string;
- right?: string;
- }
- export interface CustomButtonInput {
- text: string;
- icon?: string;
- themeIcon?: string;
- bootstrapFontAwesome?: string;
- click(element: HTMLElement): void;
- }
- export interface ButtonIconsInput {
- prev?: string;
- next?: string;
- prevYear?: string;
- nextYear?: string;
- }
- export interface ButtonTextCompoundInput {
- prev?: string;
- next?: string;
- prevYear?: string;
- nextYear?: string;
- today?: string;
- month?: string;
- week?: string;
- day?: string;
- [viewId: string]: string | undefined;
- }
- export interface EventSegment {
- event: EventApi;
- start: Date;
- end: Date;
- isStart: boolean;
- isEnd: boolean;
- }
- export interface CellInfo {
- date: Date;
- dayEl: HTMLElement;
- moreEl: HTMLElement;
- segs: EventSegment[];
- hiddenSegs: EventSegment[];
- }
- export interface DropInfo {
- start: Date;
- end: Date;
- }
- export type EventHandlerName = '_init' | 'selectAllow' | 'eventAllow' | 'eventDataTransform' | 'datesRender' | 'datesDestroy' | 'dayRender' | 'windowResize' | 'dateClick' | 'eventClick' | 'eventMouseEnter' | 'eventMouseLeave' | 'select' | 'unselect' | 'loading' | 'eventRender' | 'eventPositioned' | '_eventsPositioned' | 'eventDestroy' | 'eventDragStart' | 'eventDragStop' | 'eventDrop' | '_destroyed' | 'drop' | 'eventResizeStart' | 'eventResizeStop' | 'eventResize' | 'eventReceive' | 'eventLeave' | 'viewSkeletonRender' | 'viewSkeletonDestroy' | '_noEventDrop' | '_noEventResize' | 'eventLimitClick' | 'resourceRender';
- export type EventHandlerArgs<T extends EventHandlerName> = Parameters<Extract<OptionsInput[T], (...args: any[]) => any>>;
- export type EventHandlerArg<T extends EventHandlerName> = EventHandlerArgs<T>[0];
- export interface OptionsInputBase {
- header?: boolean | ToolbarInput;
- footer?: boolean | ToolbarInput;
- customButtons?: {
- [name: string]: CustomButtonInput;
- };
- buttonIcons?: boolean | ButtonIconsInput;
- themeSystem?: 'standard' | string;
- bootstrapFontAwesome?: boolean | ButtonIconsInput;
- firstDay?: number;
- dir?: 'ltr' | 'rtl' | 'auto';
- weekends?: boolean;
- hiddenDays?: number[];
- fixedWeekCount?: boolean;
- weekNumbers?: boolean;
- weekNumbersWithinDays?: boolean;
- weekNumberCalculation?: 'local' | 'ISO' | ((m: Date) => number);
- businessHours?: BusinessHoursInput;
- showNonCurrentDates?: boolean;
- height?: number | 'auto' | 'parent' | (() => number);
- contentHeight?: number | 'auto' | (() => number);
- aspectRatio?: number;
- handleWindowResize?: boolean;
- windowResizeDelay?: number;
- eventLimit?: boolean | number;
- eventLimitClick?: 'popover' | 'week' | 'day' | 'timeGridWeek' | 'timeGridDay' | string | ((arg: {
- date: Date;
- allDay: boolean;
- dayEl: HTMLElement;
- moreEl: HTMLElement;
- segs: any[];
- hiddenSegs: any[];
- jsEvent: MouseEvent;
- view: View;
- }) => void);
- timeZone?: string | boolean;
- now?: DateInput | (() => DateInput);
- defaultView?: string;
- allDaySlot?: boolean;
- allDayText?: string;
- slotDuration?: DurationInput;
- slotLabelFormat?: FormatterInput;
- slotLabelInterval?: DurationInput;
- snapDuration?: DurationInput;
- scrollTime?: DurationInput;
- minTime?: DurationInput;
- maxTime?: DurationInput;
- slotEventOverlap?: boolean;
- listDayFormat?: FormatterInput | boolean;
- listDayAltFormat?: FormatterInput | boolean;
- noEventsMessage?: string;
- defaultDate?: DateInput;
- nowIndicator?: boolean;
- visibleRange?: ((currentDate: Date) => DateRangeInput) | DateRangeInput;
- validRange?: DateRangeInput;
- dateIncrement?: DurationInput;
- dateAlignment?: string;
- duration?: DurationInput;
- dayCount?: number;
- locales?: RawLocale[];
- locale?: LocaleSingularArg;
- eventTimeFormat?: FormatterInput;
- columnHeader?: boolean;
- columnHeaderFormat?: FormatterInput;
- columnHeaderText?: string | ((date: DateInput) => string);
- columnHeaderHtml?: string | ((date: DateInput) => string);
- titleFormat?: FormatterInput;
- weekLabel?: string;
- displayEventTime?: boolean;
- displayEventEnd?: boolean;
- eventLimitText?: string | ((eventCnt: number) => string);
- dayPopoverFormat?: FormatterInput;
- navLinks?: boolean;
- navLinkDayClick?: string | ((date: Date, jsEvent: Event) => void);
- navLinkWeekClick?: string | ((weekStart: any, jsEvent: Event) => void);
- selectable?: boolean;
- selectMirror?: boolean;
- unselectAuto?: boolean;
- unselectCancel?: string;
- defaultAllDayEventDuration?: DurationInput;
- defaultTimedEventDuration?: DurationInput;
- cmdFormatter?: string;
- defaultRangeSeparator?: string;
- selectConstraint?: ConstraintInput;
- selectOverlap?: boolean | OverlapFunc;
- selectAllow?: AllowFunc;
- editable?: boolean;
- eventStartEditable?: boolean;
- eventDurationEditable?: boolean;
- eventConstraint?: ConstraintInput;
- eventOverlap?: boolean | OverlapFunc;
- eventAllow?: AllowFunc;
- eventClassName?: string[] | string;
- eventClassNames?: string[] | string;
- eventBackgroundColor?: string;
- eventBorderColor?: string;
- eventTextColor?: string;
- eventColor?: string;
- events?: EventSourceInput;
- eventSources?: EventSourceInput[];
- allDayDefault?: boolean;
- startParam?: string;
- endParam?: string;
- lazyFetching?: boolean;
- nextDayThreshold?: DurationInput;
- eventOrder?: string | Array<((a: EventApi, b: EventApi) => number) | (string | ((a: EventApi, b: EventApi) => number))>;
- rerenderDelay?: number | null;
- dragRevertDuration?: number;
- dragScroll?: boolean;
- longPressDelay?: number;
- eventLongPressDelay?: number;
- droppable?: boolean;
- dropAccept?: string | ((draggable: any) => boolean);
- eventDataTransform?: EventInputTransformer;
- allDayMaintainDuration?: boolean;
- eventResizableFromStart?: boolean;
- timeGridEventMinHeight?: number;
- allDayHtml?: string;
- eventDragMinDistance?: number;
- eventSourceFailure?: any;
- eventSourceSuccess?: any;
- forceEventDuration?: boolean;
- progressiveEventRendering?: boolean;
- selectLongPressDelay?: number;
- selectMinDistance?: number;
- timeZoneParam?: string;
- titleRangeSeparator?: string;
- datesRender?(arg: {
- view: View;
- el: HTMLElement;
- }): void;
- datesDestroy?(arg: {
- view: View;
- el: HTMLElement;
- }): void;
- dayRender?(arg: {
- view: View;
- date: Date;
- allDay?: boolean;
- el: HTMLElement;
- }): void;
- windowResize?(view: View): void;
- dateClick?(arg: {
- date: Date;
- dateStr: string;
- allDay: boolean;
- resource?: any;
- dayEl: HTMLElement;
- jsEvent: MouseEvent;
- view: View;
- }): void;
- eventClick?(arg: {
- el: HTMLElement;
- event: EventApi;
- jsEvent: MouseEvent;
- view: View;
- }): boolean | void;
- eventMouseEnter?(arg: {
- el: HTMLElement;
- event: EventApi;
- jsEvent: MouseEvent;
- view: View;
- }): void;
- eventMouseLeave?(arg: {
- el: HTMLElement;
- event: EventApi;
- jsEvent: MouseEvent;
- view: View;
- }): void;
- select?(arg: {
- start: Date;
- end: Date;
- startStr: string;
- endStr: string;
- allDay: boolean;
- resource?: any;
- jsEvent: MouseEvent;
- view: View;
- }): void;
- unselect?(arg: {
- view: View;
- jsEvent: Event;
- }): void;
- loading?(isLoading: boolean): void;
- eventRender?(arg: {
- isMirror: boolean;
- isStart: boolean;
- isEnd: boolean;
- event: EventApi;
- el: HTMLElement;
- view: View;
- }): void;
- eventPositioned?(arg: {
- isMirror: boolean;
- isStart: boolean;
- isEnd: boolean;
- event: EventApi;
- el: HTMLElement;
- view: View;
- }): void;
- _eventsPositioned?(arg: {
- view: View;
- }): void;
- eventDestroy?(arg: {
- isMirror: boolean;
- event: EventApi;
- el: HTMLElement;
- view: View;
- }): void;
- eventDragStart?(arg: {
- event: EventApi;
- el: HTMLElement;
- jsEvent: MouseEvent;
- view: View;
- }): void;
- eventDragStop?(arg: {
- event: EventApi;
- el: HTMLElement;
- jsEvent: MouseEvent;
- view: View;
- }): void;
- eventDrop?(arg: {
- el: HTMLElement;
- event: EventApi;
- oldEvent: EventApi;
- delta: Duration;
- revert: () => void;
- jsEvent: Event;
- view: View;
- }): void;
- eventResizeStart?(arg: {
- el: HTMLElement;
- event: EventApi;
- jsEvent: MouseEvent;
- view: View;
- }): void;
- eventResizeStop?(arg: {
- el: HTMLElement;
- event: EventApi;
- jsEvent: MouseEvent;
- view: View;
- }): void;
- eventResize?(arg: {
- el: HTMLElement;
- startDelta: Duration;
- endDelta: Duration;
- prevEvent: EventApi;
- event: EventApi;
- revert: () => void;
- jsEvent: Event;
- view: View;
- }): void;
- drop?(arg: {
- date: Date;
- dateStr: string;
- allDay: boolean;
- draggedEl: HTMLElement;
- jsEvent: MouseEvent;
- view: View;
- }): void;
- eventReceive?(arg: {
- event: EventApi;
- draggedEl: HTMLElement;
- view: View;
- }): void;
- eventLeave?(arg: {
- draggedEl: HTMLElement;
- event: EventApi;
- view: View;
- }): void;
- viewSkeletonRender?(arg: {
- el: HTMLElement;
- view: View;
- }): void;
- viewSkeletonDestroy?(arg: {
- el: HTMLElement;
- view: View;
- }): void;
- _destroyed?(): void;
- _init?(): void;
- _noEventDrop?(): void;
- _noEventResize?(): void;
- resourceRender?(arg: {
- resource: any;
- el: HTMLElement;
- view: View;
- }): void;
- }
- export interface ViewOptionsInput extends OptionsInputBase {
- type?: string;
- buttonText?: string;
- }
- export interface OptionsInput extends OptionsInputBase {
- buttonText?: ButtonTextCompoundInput;
- views?: {
- [viewId: string]: ViewOptionsInput;
- };
- plugins?: (PluginDef | string)[];
- }
-}
-
-declare module '@fullcalendar/core/structs/event' {
- import { DateInput } from '@fullcalendar/core/datelib/env';
- import Calendar from '@fullcalendar/core/Calendar';
- import { DateRange } from '@fullcalendar/core/datelib/date-range';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { UnscopedEventUiInput, EventUi } from '@fullcalendar/core/component/event-ui';
- export type EventRenderingChoice = '' | 'background' | 'inverse-background' | 'none';
- export interface EventNonDateInput extends UnscopedEventUiInput {
- id?: string | number;
- groupId?: string | number;
- title?: string;
- url?: string;
- rendering?: EventRenderingChoice;
- extendedProps?: object;
- [extendedProp: string]: any;
- }
- export interface EventDateInput {
- start?: DateInput;
- end?: DateInput;
- date?: DateInput;
- allDay?: boolean;
- }
- export type EventInput = EventNonDateInput & EventDateInput;
- export interface EventDef {
- defId: string;
- sourceId: string;
- publicId: string;
- groupId: string;
- allDay: boolean;
- hasEnd: boolean;
- recurringDef: {
- typeId: number;
- typeData: any;
- duration: Duration | null;
- } | null;
- title: string;
- url: string;
- rendering: EventRenderingChoice;
- ui: EventUi;
- extendedProps: any;
- }
- export interface EventInstance {
- instanceId: string;
- defId: string;
- range: DateRange;
- forcedStartTzo: number | null;
- forcedEndTzo: number | null;
- }
- export interface EventTuple {
- def: EventDef;
- instance: EventInstance | null;
- }
- export type EventInstanceHash = {
- [instanceId: string]: EventInstance;
- };
- export type EventDefHash = {
- [defId: string]: EventDef;
- };
- export const NON_DATE_PROPS: {
- id: StringConstructor;
- groupId: StringConstructor;
- title: StringConstructor;
- url: StringConstructor;
- rendering: StringConstructor;
- extendedProps: any;
- };
- export const DATE_PROPS: {
- start: any;
- date: any;
- end: any;
- allDay: any;
- };
- export function parseEvent(raw: EventInput, sourceId: string, calendar: Calendar, allowOpenRange?: boolean): EventTuple | null;
- export function parseEventDef(raw: EventNonDateInput, sourceId: string, allDay: boolean, hasEnd: boolean, calendar: Calendar): EventDef;
- export type eventDefParserFunc = (def: EventDef, props: any, leftovers: any) => void;
- export function createEventInstance(defId: string, range: DateRange, forcedStartTzo?: number, forcedEndTzo?: number): EventInstance;
-}
-
-declare module '@fullcalendar/core/structs/business-hours' {
- import Calendar from '@fullcalendar/core/Calendar';
- import { EventInput } from '@fullcalendar/core/structs/event';
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- export type BusinessHoursInput = boolean | EventInput | EventInput[];
- export function parseBusinessHours(input: BusinessHoursInput, calendar: Calendar): EventStore;
-}
-
-declare module '@fullcalendar/core/util/misc' {
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { DateEnv } from '@fullcalendar/core/datelib/env';
- import { DateRange, OpenDateRange } from '@fullcalendar/core/datelib/date-range';
- export function compensateScroll(rowEl: HTMLElement, scrollbarWidths: any): void;
- export function uncompensateScroll(rowEl: HTMLElement): void;
- export function disableCursor(): void;
- export function enableCursor(): void;
- export function distributeHeight(els: HTMLElement[], availableHeight: any, shouldRedistribute: any): void;
- export function undistributeHeight(els: HTMLElement[]): void;
- export function matchCellWidths(els: HTMLElement[]): number;
- export function subtractInnerElHeight(outerEl: HTMLElement, innerEl: HTMLElement): number;
- export function preventSelection(el: HTMLElement): void;
- export function allowSelection(el: HTMLElement): void;
- export function preventContextMenu(el: HTMLElement): void;
- export function allowContextMenu(el: HTMLElement): void;
- export function parseFieldSpecs(input: any): any[];
- export function compareByFieldSpecs(obj0: any, obj1: any, fieldSpecs: any): any;
- export function compareByFieldSpec(obj0: any, obj1: any, fieldSpec: any): any;
- export function flexibleCompare(a: any, b: any): number;
- export function capitaliseFirstLetter(str: any): any;
- export function padStart(val: any, len: any): string;
- export function compareNumbers(a: any, b: any): number;
- export function isInt(n: any): boolean;
- export function applyAll(functions: any, thisObj: any, args: any): any;
- export function firstDefined(...args: any[]): any;
- export function debounce(func: any, wait: any): () => any;
- export type GenericHash = {
- [key: string]: any;
- };
- export function refineProps(rawProps: GenericHash, processors: GenericHash, defaults?: GenericHash, leftoverProps?: GenericHash): GenericHash;
- export function computeAlignedDayRange(timedRange: DateRange): DateRange;
- export function computeVisibleDayRange(timedRange: OpenDateRange, nextDayThreshold?: Duration): OpenDateRange;
- export function isMultiDayRange(range: DateRange): boolean;
- export function diffDates(date0: DateMarker, date1: DateMarker, dateEnv: DateEnv, largeUnit?: string): Duration;
-}
-
-declare module '@fullcalendar/core/util/html' {
- export function htmlEscape(s: any): string;
- export function cssToStr(cssProps: any): string;
- export function attrsToStr(attrs: any): string;
- export type ClassNameInput = string | string[];
- export function parseClassName(raw: ClassNameInput): string[];
-}
-
-declare module '@fullcalendar/core/util/array' {
- export function removeMatching(array: any, testFunc: any): number;
- export function removeExact(array: any, exactVal: any): number;
- export function isArraysEqual(a0: any, a1: any): boolean;
-}
-
-declare module '@fullcalendar/core/util/memoize' {
- export function memoize<T>(workerFunc: T): T;
- export function memoizeOutput<T>(workerFunc: T, equalityFunc: (output0: any, output1: any) => boolean): T;
-}
-
-declare module '@fullcalendar/core/component/memoized-rendering' {
- export interface MemoizedRendering<ArgsType extends any[]> {
- (...args: ArgsType): void;
- unrender: () => void;
- dependents: MemoizedRendering<any>[];
- }
- export function memoizeRendering<ArgsType extends any[]>(renderFunc: (...args: ArgsType) => void, unrenderFunc?: (...args: ArgsType) => void, dependencies?: MemoizedRendering<any>[]): MemoizedRendering<ArgsType>;
-}
-
-declare module '@fullcalendar/core/util/geom' {
- export interface Point {
- left: number;
- top: number;
- }
- export interface Rect {
- left: number;
- right: number;
- top: number;
- bottom: number;
- }
- export function pointInsideRect(point: Point, rect: Rect): boolean;
- export function intersectRects(rect1: Rect, rect2: Rect): Rect | false;
- export function translateRect(rect: Rect, deltaX: number, deltaY: number): Rect;
- export function constrainPoint(point: Point, rect: Rect): Point;
- export function getRectCenter(rect: Rect): Point;
- export function diffPoints(point1: Point, point2: Point): Point;
-}
-
-declare module '@fullcalendar/core/util/object' {
- export function mergeProps(propObjs: any, complexProps?: any): any;
- export function filterHash(hash: any, func: any): {};
- export function mapHash<InputItem, OutputItem>(hash: {
- [key: string]: InputItem;
- }, func: (input: InputItem, key: string) => OutputItem): {
- [key: string]: OutputItem;
- };
- export function arrayToHash(a: any): {
- [key: string]: true;
- };
- export function hashValuesToArray(obj: any): any[];
- export function isPropsEqual(obj0: any, obj1: any): boolean;
-}
-
-declare module '@fullcalendar/core/util/dom-manip' {
- export function createElement(tagName: string, attrs: object | null, content?: ElementContent): HTMLElement;
- export function htmlToElement(html: string): HTMLElement;
- export function htmlToElements(html: string): HTMLElement[];
- export type ElementContent = string | Node | Node[] | NodeList;
- export function appendToElement(el: HTMLElement, content: ElementContent): void;
- export function prependToElement(parent: HTMLElement, content: ElementContent): void;
- export function insertAfterElement(refEl: HTMLElement, content: ElementContent): void;
- export function removeElement(el: HTMLElement): void;
- export function elementClosest(el: HTMLElement, selector: string): HTMLElement;
- export function elementMatches(el: HTMLElement, selector: string): HTMLElement;
- export function findElements(container: HTMLElement[] | HTMLElement | NodeListOf<HTMLElement>, selector: string): HTMLElement[];
- export function findChildren(parent: HTMLElement[] | HTMLElement, selector?: string): HTMLElement[];
- export function forceClassName(el: HTMLElement, className: string, bool: any): void;
- export function applyStyle(el: HTMLElement, props: object): void;
- export function applyStyleProp(el: HTMLElement, name: string, val: any): void;
-}
-
-declare module '@fullcalendar/core/structs/event-store' {
- import { EventInput, EventDef, EventDefHash, EventInstanceHash, EventTuple } from '@fullcalendar/core/structs/event';
- import { EventSource } from '@fullcalendar/core/structs/event-source';
- import Calendar from '@fullcalendar/core/Calendar';
- import { DateRange } from '@fullcalendar/core/datelib/date-range';
- export interface EventStore {
- defs: EventDefHash;
- instances: EventInstanceHash;
- }
- export function parseEvents(rawEvents: EventInput[], sourceId: string, calendar: Calendar, allowOpenRange?: boolean): EventStore;
- export function eventTupleToStore(tuple: EventTuple, eventStore?: EventStore): EventStore;
- export function expandRecurring(eventStore: EventStore, framingRange: DateRange, calendar: Calendar): EventStore;
- export function getRelevantEvents(eventStore: EventStore, instanceId: string): EventStore;
- export function transformRawEvents(rawEvents: any, eventSource: EventSource, calendar: Calendar): any;
- export function createEmptyEventStore(): EventStore;
- export function mergeEventStores(store0: EventStore, store1: EventStore): EventStore;
- export function filterEventStoreDefs(eventStore: EventStore, filterFunc: (eventDef: EventDef) => boolean): EventStore;
-}
-
-declare module '@fullcalendar/core/component/event-ui' {
- import { Constraint, AllowFunc, ConstraintInput } from '@fullcalendar/core/validation';
- import { parseClassName } from '@fullcalendar/core/util/html';
- import Calendar from '@fullcalendar/core/Calendar';
- export interface UnscopedEventUiInput {
- editable?: boolean;
- startEditable?: boolean;
- durationEditable?: boolean;
- constraint?: ConstraintInput;
- overlap?: boolean;
- allow?: AllowFunc;
- className?: string[] | string;
- classNames?: string[] | string;
- backgroundColor?: string;
- borderColor?: string;
- textColor?: string;
- color?: string;
- }
- export interface EventUi {
- startEditable: boolean | null;
- durationEditable: boolean | null;
- constraints: Constraint[];
- overlap: boolean | null;
- allows: AllowFunc[];
- backgroundColor: string;
- borderColor: string;
- textColor: string;
- classNames: string[];
- }
- export type EventUiHash = {
- [defId: string]: EventUi;
- };
- export const UNSCOPED_EVENT_UI_PROPS: {
- editable: BooleanConstructor;
- startEditable: BooleanConstructor;
- durationEditable: BooleanConstructor;
- constraint: any;
- overlap: any;
- allow: any;
- className: typeof parseClassName;
- classNames: typeof parseClassName;
- color: StringConstructor;
- backgroundColor: StringConstructor;
- borderColor: StringConstructor;
- textColor: StringConstructor;
- };
- export function processUnscopedUiProps(rawProps: UnscopedEventUiInput, calendar: Calendar, leftovers?: any): EventUi;
- export function processScopedUiProps(prefix: string, rawScoped: any, calendar: Calendar, leftovers?: any): EventUi;
- export function combineEventUis(uis: EventUi[]): EventUi;
-}
-
-declare module '@fullcalendar/core/component/event-splitting' {
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import { EventDef } from '@fullcalendar/core/structs/event';
- import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state';
- import { EventUiHash, EventUi } from '@fullcalendar/core/component/event-ui';
- import { DateSpan } from '@fullcalendar/core/structs/date-span';
- export interface SplittableProps {
- businessHours: EventStore | null;
- dateSelection: DateSpan | null;
- eventStore: EventStore;
- eventUiBases: EventUiHash;
- eventSelection: string;
- eventDrag: EventInteractionState | null;
- eventResize: EventInteractionState | null;
- }
- export { Splitter as default, Splitter };
- abstract class Splitter<PropsType extends SplittableProps = SplittableProps> {
- abstract getKeyInfo(props: PropsType): {
- [key: string]: {
- ui?: EventUi;
- businessHours?: EventStore;
- };
- };
- abstract getKeysForDateSpan(dateSpan: DateSpan): string[];
- abstract getKeysForEventDef(eventDef: EventDef): string[];
- splitProps(props: PropsType): {
- [key: string]: SplittableProps;
- };
- }
-}
-
-declare module '@fullcalendar/core/component/date-rendering' {
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { ComponentContext } from '@fullcalendar/core/component/Component';
- import { DateProfile } from '@fullcalendar/core/DateProfileGenerator';
- import { DateEnv } from '@fullcalendar/core/datelib/env';
- export function buildGotoAnchorHtml(allOptions: any, dateEnv: DateEnv, gotoOptions: any, attrs: any, innerHtml?: any): string;
- export function getAllDayHtml(allOptions: any): any;
- export function getDayClasses(date: DateMarker, dateProfile: DateProfile, context: ComponentContext, noThemeHighlight?: any): any[];
-}
-
-declare module '@fullcalendar/core/util/dom-event' {
- export function preventDefault(ev: any): void;
- export function listenBySelector(container: HTMLElement, eventType: string, selector: string, handler: (ev: Event, matchedTarget: HTMLElement) => void): () => void;
- export function listenToHoverBySelector(container: HTMLElement, selector: string, onMouseEnter: (ev: Event, matchedTarget: HTMLElement) => void, onMouseLeave: (ev: Event, matchedTarget: HTMLElement) => void): () => void;
- export function whenTransitionDone(el: HTMLElement, callback: (ev: Event) => void): void;
-}
-
-declare module '@fullcalendar/core/util/dom-geom' {
- import { Rect } from '@fullcalendar/core/util/geom';
- export interface EdgeInfo {
- borderLeft: number;
- borderRight: number;
- borderTop: number;
- borderBottom: number;
- scrollbarLeft: number;
- scrollbarRight: number;
- scrollbarBottom: number;
- paddingLeft?: number;
- paddingRight?: number;
- paddingTop?: number;
- paddingBottom?: number;
- }
- export function computeEdges(el: any, getPadding?: boolean): EdgeInfo;
- export function computeInnerRect(el: any, goWithinPadding?: boolean): {
- left: number;
- right: number;
- top: number;
- bottom: number;
- };
- export function computeRect(el: any): Rect;
- export function computeHeightAndMargins(el: HTMLElement): number;
- export function computeVMargins(el: HTMLElement): number;
- export function getClippingParents(el: HTMLElement): HTMLElement[];
- export function computeClippingRect(el: HTMLElement): Rect;
-}
-
-declare module '@fullcalendar/core/util/promise' {
- export function unpromisify(func: any, success: any, failure?: any): void;
-}
-
-declare module '@fullcalendar/core/common/EmitterMixin' {
- import Mixin from '@fullcalendar/core/common/Mixin';
- export interface EmitterInterface {
- on(types: any, handler: any): any;
- one(types: any, handler: any): any;
- off(types: any, handler: any): any;
- trigger(type: any, ...args: any[]): any;
- triggerWith(type: any, context: any, args: any): any;
- hasHandlers(type: any): any;
- }
- export { EmitterMixin as default, EmitterMixin };
- class EmitterMixin extends Mixin implements EmitterInterface {
- _handlers: any;
- _oneHandlers: any;
- on(type: any, handler: any): this;
- one(type: any, handler: any): this;
- off(type: any, handler?: any): this;
- trigger(type: any, ...args: any[]): this;
- triggerWith(type: any, context: any, args: any): this;
- hasHandlers(type: any): any;
- }
-}
-
-declare module '@fullcalendar/core/datelib/date-range' {
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { DateEnv, DateInput } from '@fullcalendar/core/datelib/env';
- export interface DateRangeInput {
- start?: DateInput;
- end?: DateInput;
- }
- export interface OpenDateRange {
- start: DateMarker | null;
- end: DateMarker | null;
- }
- export interface DateRange {
- start: DateMarker;
- end: DateMarker;
- }
- export function parseRange(input: DateRangeInput, dateEnv: DateEnv): OpenDateRange;
- export function invertRanges(ranges: DateRange[], constraintRange: DateRange): DateRange[];
- export function intersectRanges(range0: OpenDateRange, range1: OpenDateRange): OpenDateRange;
- export function rangesEqual(range0: OpenDateRange, range1: OpenDateRange): boolean;
- export function rangesIntersect(range0: OpenDateRange, range1: OpenDateRange): boolean;
- export function rangeContainsRange(outerRange: OpenDateRange, innerRange: OpenDateRange): boolean;
- export function rangeContainsMarker(range: OpenDateRange, date: DateMarker | number): boolean;
- export function constrainMarkerToRange(date: DateMarker, range: DateRange): DateMarker;
-}
-
-declare module '@fullcalendar/core/common/Mixin' {
- export { Mixin as default, Mixin };
- class Mixin {
- static mixInto(destClass: any): void;
- static mixIntoObj(destObj: any): void;
- static mixOver(destClass: any): void;
- }
-}
-
-declare module '@fullcalendar/core/common/PositionCache' {
- export { PositionCache as default, PositionCache };
- class PositionCache {
- originClientRect: ClientRect;
- els: HTMLElement[];
- originEl: HTMLElement;
- isHorizontal: boolean;
- isVertical: boolean;
- lefts: any;
- rights: any;
- tops: any;
- bottoms: any;
- constructor(originEl: HTMLElement, els: HTMLElement[], isHorizontal: boolean, isVertical: boolean);
- build(): void;
- buildElHorizontals(originClientLeft: number): void;
- buildElVerticals(originClientTop: number): void;
- leftToIndex(leftPosition: number): any;
- topToIndex(topPosition: number): any;
- getWidth(leftIndex: number): number;
- getHeight(topIndex: number): number;
- }
-}
-
-declare module '@fullcalendar/core/common/ScrollComponent' {
- import { ElementScrollController } from '@fullcalendar/core/common/scroll-controller';
- export interface ScrollbarWidths {
- left: number;
- right: number;
- bottom: number;
- }
- export { ScrollComponent as default, ScrollComponent };
- class ScrollComponent extends ElementScrollController {
- overflowX: string;
- overflowY: string;
- constructor(overflowX: string, overflowY: string);
- clear(): void;
- destroy(): void;
- applyOverflow(): void;
- lockOverflow(scrollbarWidths: ScrollbarWidths): void;
- setHeight(height: number | string): void;
- getScrollbarWidths(): ScrollbarWidths;
- }
-}
-
-declare module '@fullcalendar/core/common/scroll-controller' {
- export abstract class ScrollController {
- abstract getScrollTop(): number;
- abstract getScrollLeft(): number;
- abstract setScrollTop(top: number): void;
- abstract setScrollLeft(left: number): void;
- abstract getClientWidth(): number;
- abstract getClientHeight(): number;
- abstract getScrollWidth(): number;
- abstract getScrollHeight(): number;
- getMaxScrollTop(): number;
- getMaxScrollLeft(): number;
- canScrollVertically(): boolean;
- canScrollHorizontally(): boolean;
- canScrollUp(): boolean;
- canScrollDown(): boolean;
- canScrollLeft(): boolean;
- canScrollRight(): boolean;
- }
- export class ElementScrollController extends ScrollController {
- el: HTMLElement;
- constructor(el: HTMLElement);
- getScrollTop(): number;
- getScrollLeft(): number;
- setScrollTop(top: number): void;
- setScrollLeft(left: number): void;
- getScrollWidth(): number;
- getScrollHeight(): number;
- getClientHeight(): number;
- getClientWidth(): number;
- }
- export class WindowScrollController extends ScrollController {
- getScrollTop(): number;
- getScrollLeft(): number;
- setScrollTop(n: number): void;
- setScrollLeft(n: number): void;
- getScrollWidth(): number;
- getScrollHeight(): number;
- getClientHeight(): number;
- getClientWidth(): number;
- }
-}
-
-declare module '@fullcalendar/core/theme/Theme' {
- export { Theme as default, Theme };
- class Theme {
- calendarOptions: any;
- classes: any;
- iconClasses: any;
- baseIconClass: string;
- iconOverrideOption: any;
- iconOverrideCustomButtonOption: any;
- iconOverridePrefix: string;
- constructor(calendarOptions: any);
- processIconOverride(): void;
- setIconOverride(iconOverrideHash: any): void;
- applyIconOverridePrefix(className: any): any;
- getClass(key: any): any;
- getIconClass(buttonName: any): string;
- getCustomButtonIconClass(customButtonProps: any): string;
- }
- export type ThemeClass = {
- new (calendarOptions: any): Theme;
- };
-}
-
-declare module '@fullcalendar/core/component/Component' {
- import Calendar from '@fullcalendar/core/Calendar';
- import View from '@fullcalendar/core/View';
- import Theme from '@fullcalendar/core/theme/Theme';
- import { DateEnv } from '@fullcalendar/core/datelib/env';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- export class ComponentContext {
- calendar: Calendar;
- theme: Theme;
- dateEnv: DateEnv;
- options: any;
- view?: View;
- isRtl: boolean;
- eventOrderSpecs: any;
- nextDayThreshold: Duration;
- constructor(calendar: Calendar, theme: Theme, dateEnv: DateEnv, options: any, view?: View);
- extend(options?: any, view?: View): ComponentContext;
- }
- export type EqualityFuncHash = {
- [propName: string]: (obj0: any, obj1: any) => boolean;
- };
- export { Component as default, Component };
- class Component<PropsType> {
- equalityFuncs: EqualityFuncHash;
- uid: string;
- props: PropsType | null;
- everRendered: boolean;
- context: ComponentContext;
- constructor();
- static addEqualityFuncs(newFuncs: EqualityFuncHash): void;
- receiveProps(props: PropsType, context: ComponentContext): void;
- receiveContext(context: ComponentContext): void;
- protected render(props: PropsType, context: ComponentContext): void;
- firstContext(context: ComponentContext): void;
- beforeUpdate(): void;
- afterUpdate(): void;
- destroy(): void;
- }
-}
-
-declare module '@fullcalendar/core/component/DateComponent' {
- import Component from '@fullcalendar/core/component/Component';
- import { EventRenderRange } from '@fullcalendar/core/component/event-rendering';
- import { DateSpan } from '@fullcalendar/core/structs/date-span';
- import { EventInstanceHash } from '@fullcalendar/core/structs/event';
- import { Hit } from '@fullcalendar/core/interactions/hit';
- import FgEventRenderer from '@fullcalendar/core/component/renderers/FgEventRenderer';
- import FillRenderer from '@fullcalendar/core/component/renderers/FillRenderer';
- import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state';
- export type DateComponentHash = {
- [uid: string]: DateComponent<any>;
- };
- export interface Seg {
- component?: DateComponent<any>;
- isStart: boolean;
- isEnd: boolean;
- eventRange?: EventRenderRange;
- el?: HTMLElement;
- [otherProp: string]: any;
- }
- export interface EventSegUiInteractionState {
- affectedInstances: EventInstanceHash;
- segs: Seg[];
- isEvent: boolean;
- sourceSeg: any;
- }
- export { DateComponent as default, DateComponent };
- class DateComponent<PropsType> extends Component<PropsType> {
- fgSegSelector: string;
- bgSegSelector: string;
- largeUnit: any;
- eventRenderer: FgEventRenderer;
- mirrorRenderer: FgEventRenderer;
- fillRenderer: FillRenderer;
- el: HTMLElement;
- constructor(el: HTMLElement);
- destroy(): void;
- buildPositionCaches(): void;
- queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit | null;
- isInteractionValid(interaction: EventInteractionState): boolean;
- isDateSelectionValid(selection: DateSpan): boolean;
- isValidSegDownEl(el: HTMLElement): boolean;
- isValidDateDownEl(el: HTMLElement): boolean;
- isPopover(): boolean;
- isInPopover(el: HTMLElement): boolean;
- }
-}
-
-declare module '@fullcalendar/core/Calendar' {
- import { EmitterInterface } from '@fullcalendar/core/common/EmitterMixin';
- import OptionsManager from '@fullcalendar/core/OptionsManager';
- import View from '@fullcalendar/core/View';
- import Theme from '@fullcalendar/core/theme/Theme';
- import { OptionsInput, EventHandlerName, EventHandlerArgs } from '@fullcalendar/core/types/input-types';
- import { RawLocaleMap } from '@fullcalendar/core/datelib/locale';
- import { DateEnv, DateInput } from '@fullcalendar/core/datelib/env';
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { Duration, DurationInput } from '@fullcalendar/core/datelib/duration';
- import { DateSpan, DateSpanApi, DatePointApi } from '@fullcalendar/core/structs/date-span';
- import { DateRangeInput } from '@fullcalendar/core/datelib/date-range';
- import DateProfileGenerator from '@fullcalendar/core/DateProfileGenerator';
- import { EventSourceInput } from '@fullcalendar/core/structs/event-source';
- import { EventInput } from '@fullcalendar/core/structs/event';
- import { CalendarState, Action } from '@fullcalendar/core/reducers/types';
- import EventSourceApi from '@fullcalendar/core/api/EventSourceApi';
- import EventApi from '@fullcalendar/core/api/EventApi';
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import { EventUiHash, EventUi } from '@fullcalendar/core/component/event-ui';
- import { ViewSpecHash, ViewSpec } from '@fullcalendar/core/structs/view-spec';
- import { PluginSystem } from '@fullcalendar/core/plugin-system';
- import CalendarComponent from '@fullcalendar/core/CalendarComponent';
- import DateComponent from '@fullcalendar/core/component/DateComponent';
- import { PointerDragEvent } from '@fullcalendar/core/interactions/pointer';
- import { InteractionSettingsInput, Interaction } from '@fullcalendar/core/interactions/interaction';
- export interface DateClickApi extends DatePointApi {
- dayEl: HTMLElement;
- jsEvent: UIEvent;
- view: View;
- }
- export interface DateSelectionApi extends DateSpanApi {
- jsEvent: UIEvent;
- view: View;
- }
- export type DatePointTransform = (dateSpan: DateSpan, calendar: Calendar) => any;
- export type DateSpanTransform = (dateSpan: DateSpan, calendar: Calendar) => any;
- export type CalendarInteraction = {
- destroy(): any;
- };
- export type CalendarInteractionClass = {
- new (calendar: Calendar): CalendarInteraction;
- };
- export type OptionChangeHandler = (propValue: any, calendar: Calendar, deepEqual: any) => void;
- export type OptionChangeHandlerMap = {
- [propName: string]: OptionChangeHandler;
- };
- export { Calendar as default, Calendar };
- class Calendar {
- static on: EmitterInterface['on'];
- static off: EmitterInterface['off'];
- static trigger: EmitterInterface['trigger'];
- on: EmitterInterface['on'];
- one: EmitterInterface['one'];
- off: EmitterInterface['off'];
- trigger: EmitterInterface['trigger'];
- triggerWith: EmitterInterface['triggerWith'];
- hasHandlers: EmitterInterface['hasHandlers'];
- eventUiBases: EventUiHash;
- selectionConfig: EventUi;
- optionsManager: OptionsManager;
- viewSpecs: ViewSpecHash;
- dateProfileGenerators: {
- [viewName: string]: DateProfileGenerator;
- };
- theme: Theme;
- dateEnv: DateEnv;
- availableRawLocales: RawLocaleMap;
- pluginSystem: PluginSystem;
- defaultAllDayEventDuration: Duration;
- defaultTimedEventDuration: Duration;
- calendarInteractions: CalendarInteraction[];
- interactionsStore: {
- [componentUid: string]: Interaction[];
- };
- removeNavLinkListener: any;
- windowResizeProxy: any;
- isHandlingWindowResize: boolean;
- state: CalendarState;
- actionQueue: any[];
- isReducing: boolean;
- needsRerender: boolean;
- isRendering: boolean;
- renderingPauseDepth: number;
- renderableEventStore: EventStore;
- buildDelayedRerender: typeof buildDelayedRerender;
- delayedRerender: any;
- afterSizingTriggers: any;
- isViewUpdated: boolean;
- isDatesUpdated: boolean;
- isEventsUpdated: boolean;
- el: HTMLElement;
- component: CalendarComponent;
- constructor(el: HTMLElement, overrides?: OptionsInput);
- addPluginInputs(pluginInputs: any): void;
- readonly view: View;
- render(): void;
- destroy(): void;
- bindHandlers(): void;
- unbindHandlers(): void;
- hydrate(): void;
- buildInitialState(): CalendarState;
- reduce(state: CalendarState, action: Action, calendar: Calendar): CalendarState;
- requestRerender(): void;
- tryRerender(): void;
- batchRendering(func: any): void;
- executeRender(): void;
- renderComponent(): void;
- setOption(name: string, val: any): void;
- getOption(name: string): any;
- opt(name: string): any;
- viewOpt(name: string): any;
- viewOpts(): any;
- mutateOptions(updates: any, removals: string[], isDynamic?: boolean, deepEqual?: any): void;
- handleOptions(options: any): void;
- getAvailableLocaleCodes(): string[];
- _buildSelectionConfig(rawOpts: any): EventUi;
- _buildEventUiSingleBase(rawOpts: any): EventUi;
- hasPublicHandlers<T extends EventHandlerName>(name: T): boolean;
- publiclyTrigger<T extends EventHandlerName>(name: T, args?: EventHandlerArgs<T>): any;
- publiclyTriggerAfterSizing<T extends EventHandlerName>(name: T, args: EventHandlerArgs<T>): void;
- releaseAfterSizingTriggers(): void;
- isValidViewType(viewType: string): boolean;
- changeView(viewType: string, dateOrRange?: DateRangeInput | DateInput): void;
- zoomTo(dateMarker: DateMarker, viewType?: string): void;
- getUnitViewSpec(unit: string): ViewSpec | null;
- getInitialDate(): Date;
- prev(): void;
- next(): void;
- prevYear(): void;
- nextYear(): void;
- today(): void;
- gotoDate(zonedDateInput: any): void;
- incrementDate(deltaInput: any): void;
- getDate(): Date;
- formatDate(d: DateInput, formatter: any): string;
- formatRange(d0: DateInput, d1: DateInput, settings: any): any;
- formatIso(d: DateInput, omitTime?: boolean): string;
- windowResize(ev: Event): void;
- updateSize(): void;
- registerInteractiveComponent(component: DateComponent<any>, settingsInput: InteractionSettingsInput): void;
- unregisterInteractiveComponent(component: DateComponent<any>): void;
- select(dateOrObj: DateInput | any, endDate?: DateInput): void;
- unselect(pev?: PointerDragEvent): void;
- triggerDateSelect(selection: DateSpan, pev?: PointerDragEvent): void;
- triggerDateUnselect(pev?: PointerDragEvent): void;
- triggerDateClick(dateSpan: DateSpan, dayEl: HTMLElement, view: View, ev: UIEvent): void;
- buildDatePointApi(dateSpan: DateSpan): import("@fullcalendar/core/structs/date-span").DatePointApi;
- buildDateSpanApi(dateSpan: DateSpan): import("@fullcalendar/core/structs/date-span").DateSpanApi;
- getNow(): DateMarker;
- getDefaultEventEnd(allDay: boolean, marker: DateMarker): DateMarker;
- addEvent(eventInput: EventInput, sourceInput?: EventSourceApi | string | number): EventApi | null;
- getEventById(id: string): EventApi | null;
- getEvents(): EventApi[];
- removeAllEvents(): void;
- rerenderEvents(): void;
- getEventSources(): EventSourceApi[];
- getEventSourceById(id: string | number): EventSourceApi | null;
- addEventSource(sourceInput: EventSourceInput): EventSourceApi;
- removeAllEventSources(): void;
- refetchEvents(): void;
- scrollToTime(timeInput: DurationInput): void;
- }
- function buildDelayedRerender(this: Calendar, wait: any): any;
- export {};
-}
-
-declare module '@fullcalendar/core/View' {
- import DateProfileGenerator, { DateProfile } from '@fullcalendar/core/DateProfileGenerator';
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { EmitterInterface } from '@fullcalendar/core/common/EmitterMixin';
- import { ViewSpec } from '@fullcalendar/core/structs/view-spec';
- import DateComponent from '@fullcalendar/core/component/DateComponent';
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import { EventUiHash } from '@fullcalendar/core/component/event-ui';
- import { EventRenderRange } from '@fullcalendar/core/component/event-rendering';
- import { DateSpan } from '@fullcalendar/core/structs/date-span';
- import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state';
- import { ComponentContext } from '@fullcalendar/core/component/Component';
- export interface ViewProps {
- dateProfileGenerator: DateProfileGenerator;
- dateProfile: DateProfile;
- businessHours: EventStore;
- eventStore: EventStore;
- eventUiBases: EventUiHash;
- dateSelection: DateSpan | null;
- eventSelection: string;
- eventDrag: EventInteractionState | null;
- eventResize: EventInteractionState | null;
- }
- export { View as default, View };
- abstract class View extends DateComponent<ViewProps> {
- usesMinMaxTime: boolean;
- dateProfileGeneratorClass: any;
- on: EmitterInterface['on'];
- one: EmitterInterface['one'];
- off: EmitterInterface['off'];
- trigger: EmitterInterface['trigger'];
- triggerWith: EmitterInterface['triggerWith'];
- hasHandlers: EmitterInterface['hasHandlers'];
- viewSpec: ViewSpec;
- type: string;
- title: string;
- queuedScroll: any;
- isNowIndicatorRendered: boolean;
- initialNowDate: DateMarker;
- initialNowQueriedMs: number;
- nowIndicatorTimeoutID: any;
- nowIndicatorIntervalID: any;
- constructor(viewSpec: ViewSpec, parentEl: HTMLElement);
- initialize(): void;
- readonly activeStart: Date;
- readonly activeEnd: Date;
- readonly currentStart: Date;
- readonly currentEnd: Date;
- render(props: ViewProps, context: ComponentContext): void;
- beforeUpdate(): void;
- destroy(): void;
- updateSize(isResize: boolean, viewHeight: number, isAuto: boolean): void;
- updateBaseSize(isResize: boolean, viewHeight: number, isAuto: boolean): void;
- renderDatesWrap(dateProfile: DateProfile): void;
- unrenderDatesWrap(): void;
- renderDates(dateProfile: DateProfile): void;
- unrenderDates(): void;
- renderBusinessHours(businessHours: EventStore): void;
- unrenderBusinessHours(): void;
- renderDateSelectionWrap(selection: DateSpan): void;
- unrenderDateSelectionWrap(selection: DateSpan): void;
- renderDateSelection(selection: DateSpan): void;
- unrenderDateSelection(selection: DateSpan): void;
- renderEvents(eventStore: EventStore): void;
- unrenderEvents(): void;
- sliceEvents(eventStore: EventStore, allDay: boolean): EventRenderRange[];
- renderEventSelectionWrap(instanceId: string): void;
- unrenderEventSelectionWrap(instanceId: string): void;
- renderEventSelection(instanceId: string): void;
- unrenderEventSelection(instanceId: string): void;
- renderEventDragWrap(state: EventInteractionState): void;
- unrenderEventDragWrap(state: EventInteractionState): void;
- renderEventDrag(state: EventInteractionState): void;
- unrenderEventDrag(state: EventInteractionState): void;
- renderEventResizeWrap(state: EventInteractionState): void;
- unrenderEventResizeWrap(state: EventInteractionState): void;
- renderEventResize(state: EventInteractionState): void;
- unrenderEventResize(state: EventInteractionState): void;
- startNowIndicator(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): void;
- updateNowIndicator(): void;
- stopNowIndicator(): void;
- getNowIndicatorUnit(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): void;
- renderNowIndicator(date: any): void;
- unrenderNowIndicator(): void;
- addScroll(scroll: any, isForced?: boolean): void;
- popScroll(isResize: boolean): void;
- applyQueuedScroll(isResize: boolean): void;
- queryScroll(): any;
- applyScroll(scroll: any, isResize: boolean): void;
- computeDateScroll(duration: Duration): {};
- queryDateScroll(): {};
- applyDateScroll(scroll: any): void;
- scrollToDuration(duration: Duration): void;
- }
-}
-
-declare module '@fullcalendar/core/component/renderers/FgEventRenderer' {
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { DateFormatter } from '@fullcalendar/core/datelib/formatting';
- import { EventUi } from '@fullcalendar/core/component/event-ui';
- import { EventRenderRange } from '@fullcalendar/core/component/event-rendering';
- import { Seg } from '@fullcalendar/core/component/DateComponent';
- import { ComponentContext } from '@fullcalendar/core/component/Component';
- export { FgEventRenderer as default, FgEventRenderer };
- abstract class FgEventRenderer {
- context: ComponentContext;
- eventTimeFormat: DateFormatter;
- displayEventTime: boolean;
- displayEventEnd: boolean;
- segs: Seg[];
- isSizeDirty: boolean;
- renderSegs(context: ComponentContext, segs: Seg[], mirrorInfo?: any): void;
- unrender(context: ComponentContext, _segs: Seg[], mirrorInfo?: any): void;
- abstract renderSegHtml(seg: Seg, mirrorInfo: any): string;
- abstract attachSegs(segs: Seg[], mirrorInfo: any): any;
- abstract detachSegs(segs: Seg[]): any;
- rangeUpdated(): void;
- renderSegEls(segs: Seg[], mirrorInfo: any): Seg[];
- getSegClasses(seg: Seg, isDraggable: any, isResizable: any, mirrorInfo: any): string[];
- getTimeText(eventRange: EventRenderRange, formatter?: any, displayEnd?: any): any;
- _getTimeText(start: DateMarker, end: DateMarker, allDay: any, formatter?: any, displayEnd?: any, forcedStartTzo?: number, forcedEndTzo?: number): any;
- computeEventTimeFormat(): any;
- computeDisplayEventTime(): boolean;
- computeDisplayEventEnd(): boolean;
- getSkinCss(ui: EventUi): {
- 'background-color': string;
- 'border-color': string;
- color: string;
- };
- sortEventSegs(segs: any): Seg[];
- computeSizes(force: boolean): void;
- assignSizes(force: boolean): void;
- computeSegSizes(segs: Seg[]): void;
- assignSegSizes(segs: Seg[]): void;
- hideByHash(hash: any): void;
- showByHash(hash: any): void;
- selectByInstanceId(instanceId: string): void;
- unselectByInstanceId(instanceId: string): void;
- }
- export function buildSegCompareObj(seg: Seg): any;
-}
-
-declare module '@fullcalendar/core/component/renderers/FillRenderer' {
- import { Seg } from '@fullcalendar/core/component/DateComponent';
- import { ComponentContext } from '@fullcalendar/core/component/Component';
- export { FillRenderer as default, FillRenderer };
- abstract class FillRenderer {
- context: ComponentContext;
- fillSegTag: string;
- containerElsByType: any;
- segsByType: any;
- dirtySizeFlags: any;
- constructor();
- getSegsByType(type: string): any;
- renderSegs(type: string, context: ComponentContext, segs: Seg[]): void;
- unrender(type: string, context: ComponentContext): void;
- renderSegEls(type: any, segs: Seg[]): Seg[];
- renderSegHtml(type: any, seg: Seg): string;
- abstract attachSegs(type: any, segs: Seg[]): HTMLElement[] | void;
- detachSegs(type: any, segs: Seg[]): void;
- computeSizes(force: boolean): void;
- assignSizes(force: boolean): void;
- computeSegSizes(segs: Seg[]): void;
- assignSegSizes(segs: Seg[]): void;
- }
-}
-
-declare module '@fullcalendar/core/DateProfileGenerator' {
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { DateRange, OpenDateRange } from '@fullcalendar/core/datelib/date-range';
- import { ViewSpec } from '@fullcalendar/core/structs/view-spec';
- import { DateEnv } from '@fullcalendar/core/datelib/env';
- import Calendar from '@fullcalendar/core/Calendar';
- export interface DateProfile {
- currentRange: DateRange;
- currentRangeUnit: string;
- isRangeAllDay: boolean;
- validRange: OpenDateRange;
- activeRange: DateRange;
- renderRange: DateRange;
- minTime: Duration;
- maxTime: Duration;
- isValid: boolean;
- dateIncrement: Duration;
- }
- export { DateProfileGenerator as default, DateProfileGenerator };
- class DateProfileGenerator {
- viewSpec: ViewSpec;
- options: any;
- dateEnv: DateEnv;
- calendar: Calendar;
- isHiddenDayHash: boolean[];
- constructor(viewSpec: ViewSpec, calendar: Calendar);
- buildPrev(currentDateProfile: DateProfile, currentDate: DateMarker): DateProfile;
- buildNext(currentDateProfile: DateProfile, currentDate: DateMarker): DateProfile;
- build(currentDate: DateMarker, direction?: any, forceToValid?: boolean): DateProfile;
- buildValidRange(): OpenDateRange;
- buildCurrentRangeInfo(date: DateMarker, direction: any): {
- duration: any;
- unit: any;
- range: any;
- };
- getFallbackDuration(): Duration;
- adjustActiveRange(range: DateRange, minTime: Duration, maxTime: Duration): {
- start: Date;
- end: Date;
- };
- buildRangeFromDuration(date: DateMarker, direction: any, duration: Duration, unit: any): any;
- buildRangeFromDayCount(date: DateMarker, direction: any, dayCount: any): {
- start: Date;
- end: Date;
- };
- buildCustomVisibleRange(date: DateMarker): OpenDateRange;
- buildRenderRange(currentRange: DateRange, currentRangeUnit: any, isRangeAllDay: any): DateRange;
- buildDateIncrement(fallback: any): Duration;
- getRangeOption(name: any, ...otherArgs: any[]): OpenDateRange;
- initHiddenDays(): void;
- trimHiddenDays(range: DateRange): DateRange | null;
- isHiddenDay(day: any): boolean;
- skipHiddenDays(date: DateMarker, inc?: number, isExclusive?: boolean): Date;
- }
- export function isDateProfilesEqual(p0: DateProfile, p1: DateProfile): boolean;
-}
-
-declare module '@fullcalendar/core/structs/view-def' {
- import { ViewClass, ViewConfigHash } from '@fullcalendar/core/structs/view-config';
- export interface ViewDef {
- type: string;
- class: ViewClass;
- overrides: any;
- defaults: any;
- }
- export type ViewDefHash = {
- [viewType: string]: ViewDef;
- };
- export function compileViewDefs(defaultConfigs: ViewConfigHash, overrideConfigs: ViewConfigHash): ViewDefHash;
-}
-
-declare module '@fullcalendar/core/structs/view-spec' {
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import OptionsManager from '@fullcalendar/core/OptionsManager';
- import { ViewConfigInputHash, ViewClass } from '@fullcalendar/core/structs/view-config';
- export interface ViewSpec {
- type: string;
- class: ViewClass;
- duration: Duration;
- durationUnit: string;
- singleUnit: string;
- options: any;
- buttonTextOverride: string;
- buttonTextDefault: string;
- }
- export type ViewSpecHash = {
- [viewType: string]: ViewSpec;
- };
- export function buildViewSpecs(defaultInputs: ViewConfigInputHash, optionsManager: OptionsManager): ViewSpecHash;
-}
-
-declare module '@fullcalendar/core/structs/date-span' {
- import { DateRange, OpenDateRange } from '@fullcalendar/core/datelib/date-range';
- import { DateInput, DateEnv } from '@fullcalendar/core/datelib/env';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { EventRenderRange } from '@fullcalendar/core/component/event-rendering';
- import { EventUiHash } from '@fullcalendar/core/component/event-ui';
- import Calendar from '@fullcalendar/core/Calendar';
- export interface OpenDateSpanInput {
- start?: DateInput;
- end?: DateInput;
- allDay?: boolean;
- [otherProp: string]: any;
- }
- export interface DateSpanInput extends OpenDateSpanInput {
- start: DateInput;
- end: DateInput;
- }
- export interface OpenDateSpan {
- range: OpenDateRange;
- allDay: boolean;
- [otherProp: string]: any;
- }
- export interface DateSpan extends OpenDateSpan {
- range: DateRange;
- }
- export interface DateSpanApi {
- start: Date;
- end: Date;
- startStr: string;
- endStr: string;
- allDay: boolean;
- }
- export interface DatePointApi {
- date: Date;
- dateStr: string;
- allDay: boolean;
- }
- export function parseDateSpan(raw: DateSpanInput, dateEnv: DateEnv, defaultDuration?: Duration): DateSpan | null;
- export function parseOpenDateSpan(raw: OpenDateSpanInput, dateEnv: DateEnv): OpenDateSpan | null;
- export function isDateSpansEqual(span0: DateSpan, span1: DateSpan): boolean;
- export function buildDateSpanApi(span: DateSpan, dateEnv: DateEnv): DateSpanApi;
- export function buildDatePointApi(span: DateSpan, dateEnv: DateEnv): DatePointApi;
- export function fabricateEventRange(dateSpan: DateSpan, eventUiBases: EventUiHash, calendar: Calendar): EventRenderRange;
-}
-
-declare module '@fullcalendar/core/datelib/marker' {
- import { Duration } from '@fullcalendar/core/datelib/duration';
- export type DateMarker = Date;
- export const DAY_IDS: string[];
- export function addWeeks(m: DateMarker, n: number): Date;
- export function addDays(m: DateMarker, n: number): Date;
- export function addMs(m: DateMarker, n: number): Date;
- export function diffWeeks(m0: any, m1: any): number;
- export function diffDays(m0: any, m1: any): number;
- export function diffHours(m0: any, m1: any): number;
- export function diffMinutes(m0: any, m1: any): number;
- export function diffSeconds(m0: any, m1: any): number;
- export function diffDayAndTime(m0: DateMarker, m1: DateMarker): Duration;
- export function diffWholeWeeks(m0: DateMarker, m1: DateMarker): number;
- export function diffWholeDays(m0: DateMarker, m1: DateMarker): number;
- export function startOfDay(m: DateMarker): DateMarker;
- export function startOfHour(m: DateMarker): Date;
- export function startOfMinute(m: DateMarker): Date;
- export function startOfSecond(m: DateMarker): Date;
- export function weekOfYear(marker: any, dow: any, doy: any): number;
- export function dateToLocalArray(date: any): any[];
- export function arrayToLocalDate(a: any): Date;
- export function dateToUtcArray(date: any): any[];
- export function arrayToUtcDate(a: any): Date;
- export function isValidDate(m: DateMarker): boolean;
- export function timeAsMs(m: DateMarker): number;
-}
-
-declare module '@fullcalendar/core/datelib/duration' {
- export type DurationInput = DurationObjectInput | string | number;
- export interface DurationObjectInput {
- years?: number;
- year?: number;
- months?: number;
- month?: number;
- weeks?: number;
- week?: number;
- days?: number;
- day?: number;
- hours?: number;
- hour?: number;
- minutes?: number;
- minute?: number;
- seconds?: number;
- second?: number;
- milliseconds?: number;
- millisecond?: number;
- ms?: number;
- }
- export interface Duration {
- years: number;
- months: number;
- days: number;
- milliseconds: number;
- }
- export function createDuration(input: DurationInput, unit?: string): Duration | null;
- export function getWeeksFromInput(obj: DurationObjectInput): number;
- export function durationsEqual(d0: Duration, d1: Duration): boolean;
- export function isSingleDay(dur: Duration): boolean;
- export function addDurations(d0: Duration, d1: Duration): {
- years: number;
- months: number;
- days: number;
- milliseconds: number;
- };
- export function subtractDurations(d1: Duration, d0: Duration): Duration;
- export function multiplyDuration(d: Duration, n: number): {
- years: number;
- months: number;
- days: number;
- milliseconds: number;
- };
- export function asRoughYears(dur: Duration): number;
- export function asRoughMonths(dur: Duration): number;
- export function asRoughDays(dur: Duration): number;
- export function asRoughHours(dur: Duration): number;
- export function asRoughMinutes(dur: Duration): number;
- export function asRoughSeconds(dur: Duration): number;
- export function asRoughMs(dur: Duration): number;
- export function wholeDivideDurations(numerator: Duration, denominator: Duration): number;
- export function greatestDurationDenominator(dur: Duration, dontReturnWeeks?: boolean): {
- unit: string;
- value: number;
- };
-}
-
-declare module '@fullcalendar/core/datelib/env' {
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { CalendarSystem } from '@fullcalendar/core/datelib/calendar-system';
- import { Locale } from '@fullcalendar/core/datelib/locale';
- import { NamedTimeZoneImpl, NamedTimeZoneImplClass } from '@fullcalendar/core/datelib/timezone';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { DateFormatter } from '@fullcalendar/core/datelib/formatting';
- import { CmdFormatterFunc } from '@fullcalendar/core/datelib/formatting-cmd';
- export interface DateEnvSettings {
- timeZone: string;
- namedTimeZoneImpl?: NamedTimeZoneImplClass;
- calendarSystem: string;
- locale: Locale;
- weekNumberCalculation?: any;
- firstDay?: any;
- weekLabel?: string;
- cmdFormatter?: CmdFormatterFunc;
- }
- export type DateInput = Date | string | number | number[];
- export interface DateMarkerMeta {
- marker: DateMarker;
- isTimeUnspecified: boolean;
- forcedTzo: number | null;
- }
- export class DateEnv {
- timeZone: string;
- namedTimeZoneImpl: NamedTimeZoneImpl;
- canComputeOffset: boolean;
- calendarSystem: CalendarSystem;
- locale: Locale;
- weekDow: number;
- weekDoy: number;
- weekNumberFunc: any;
- weekLabel: string;
- cmdFormatter?: CmdFormatterFunc;
- constructor(settings: DateEnvSettings);
- createMarker(input: DateInput): DateMarker;
- createNowMarker(): DateMarker;
- createMarkerMeta(input: DateInput): DateMarkerMeta;
- parse(s: string): {
- marker: Date;
- isTimeUnspecified: boolean;
- forcedTzo: any;
- };
- getYear(marker: DateMarker): number;
- getMonth(marker: DateMarker): number;
- add(marker: DateMarker, dur: Duration): DateMarker;
- subtract(marker: DateMarker, dur: Duration): DateMarker;
- addYears(marker: DateMarker, n: number): Date;
- addMonths(marker: DateMarker, n: number): Date;
- diffWholeYears(m0: DateMarker, m1: DateMarker): number;
- diffWholeMonths(m0: DateMarker, m1: DateMarker): number;
- greatestWholeUnit(m0: DateMarker, m1: DateMarker): {
- unit: string;
- value: number;
- };
- countDurationsBetween(m0: DateMarker, m1: DateMarker, d: Duration): number;
- startOf(m: DateMarker, unit: string): Date;
- startOfYear(m: DateMarker): DateMarker;
- startOfMonth(m: DateMarker): DateMarker;
- startOfWeek(m: DateMarker): DateMarker;
- computeWeekNumber(marker: DateMarker): number;
- format(marker: DateMarker, formatter: DateFormatter, dateOptions?: {
- forcedTzo?: number;
- }): any;
- formatRange(start: DateMarker, end: DateMarker, formatter: DateFormatter, dateOptions?: {
- forcedStartTzo?: number;
- forcedEndTzo?: number;
- isEndExclusive?: boolean;
- }): any;
- formatIso(marker: DateMarker, extraOptions?: any): string;
- timestampToMarker(ms: number): Date;
- offsetForMarker(m: DateMarker): number;
- toDate(m: DateMarker, forcedTzo?: number): Date;
- }
-}
-
-declare module '@fullcalendar/core/datelib/formatting' {
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { CalendarSystem } from '@fullcalendar/core/datelib/calendar-system';
- import { Locale } from '@fullcalendar/core/datelib/locale';
- import { CmdFormatterFunc } from '@fullcalendar/core/datelib/formatting-cmd';
- import { FuncFormatterFunc } from '@fullcalendar/core/datelib/formatting-func';
- export interface ZonedMarker {
- marker: DateMarker;
- timeZoneOffset: number;
- }
- export interface ExpandedZonedMarker extends ZonedMarker {
- array: number[];
- year: number;
- month: number;
- day: number;
- hour: number;
- minute: number;
- second: number;
- millisecond: number;
- }
- export interface VerboseFormattingArg {
- date: ExpandedZonedMarker;
- start: ExpandedZonedMarker;
- end?: ExpandedZonedMarker;
- timeZone: string;
- localeCodes: string[];
- separator: string;
- }
- export interface DateFormattingContext {
- timeZone: string;
- locale: Locale;
- calendarSystem: CalendarSystem;
- computeWeekNumber: (d: DateMarker) => number;
- weekLabel: string;
- cmdFormatter?: CmdFormatterFunc;
- }
- export interface DateFormatter {
- format(date: ZonedMarker, context: DateFormattingContext): any;
- formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext): any;
- }
- export type FormatterInput = object | string | FuncFormatterFunc;
- export function createFormatter(input: FormatterInput, defaultSeparator?: string): DateFormatter;
- export function buildIsoString(marker: DateMarker, timeZoneOffset?: number, stripZeroTime?: boolean): string;
- export function formatIsoTimeString(marker: DateMarker): string;
- export function formatTimeZoneOffset(minutes: number, doIso?: boolean): string;
- export function createVerboseFormattingArg(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext, separator?: string): VerboseFormattingArg;
-}
-
-declare module '@fullcalendar/core/datelib/timezone' {
- export abstract class NamedTimeZoneImpl {
- timeZoneName: string;
- constructor(timeZoneName: string);
- abstract offsetForArray(a: number[]): number;
- abstract timestampToArray(ms: number): number[];
- }
- export type NamedTimeZoneImplClass = {
- new (timeZoneName: string): NamedTimeZoneImpl;
- };
-}
-
-declare module '@fullcalendar/core/datelib/parsing' {
- export function parse(str: any): {
- marker: Date;
- isTimeUnspecified: boolean;
- timeZoneOffset: any;
- };
-}
-
-declare module '@fullcalendar/core/structs/event-source' {
- import { EventInput } from '@fullcalendar/core/structs/event';
- import Calendar from '@fullcalendar/core/Calendar';
- import { DateRange } from '@fullcalendar/core/datelib/date-range';
- import { EventSourceFunc } from '@fullcalendar/core/event-sources/func-event-source';
- import { EventUi } from '@fullcalendar/core/component/event-ui';
- import { ConstraintInput, AllowFunc } from '@fullcalendar/core/validation';
- export type EventSourceError = {
- message: string;
- response?: any;
- [otherProp: string]: any;
- };
- export type EventInputTransformer = (eventInput: EventInput) => EventInput | null;
- export type EventSourceSuccessResponseHandler = (rawData: any, response: any) => EventInput[] | void;
- export type EventSourceErrorResponseHandler = (error: EventSourceError) => void;
- export interface ExtendedEventSourceInput {
- id?: string | number;
- allDayDefault?: boolean;
- eventDataTransform?: EventInputTransformer;
- events?: EventInput[] | EventSourceFunc;
- url?: string;
- method?: string;
- extraParams?: object | (() => object);
- startParam?: string;
- endParam?: string;
- timeZoneParam?: string;
- success?: EventSourceSuccessResponseHandler;
- failure?: EventSourceErrorResponseHandler;
- editable?: boolean;
- startEditable?: boolean;
- durationEditable?: boolean;
- constraint?: ConstraintInput;
- overlap?: boolean;
- allow?: AllowFunc;
- className?: string[] | string;
- classNames?: string[] | string;
- backgroundColor?: string;
- borderColor?: string;
- textColor?: string;
- color?: string;
- [otherProp: string]: any;
- }
- export type EventSourceInput = ExtendedEventSourceInput | // object in extended form
- EventSourceFunc | // just a function
- string;
- export interface EventSource {
- _raw: any;
- sourceId: string;
- sourceDefId: number;
- meta: any;
- publicId: string;
- isFetching: boolean;
- latestFetchId: string;
- fetchRange: DateRange | null;
- allDayDefault: boolean | null;
- eventDataTransform: EventInputTransformer;
- ui: EventUi;
- success: EventSourceSuccessResponseHandler | null;
- failure: EventSourceErrorResponseHandler | null;
- extendedProps: any;
- }
- export type EventSourceHash = {
- [sourceId: string]: EventSource;
- };
- export type EventSourceFetcher = (arg: {
- eventSource: EventSource;
- calendar: Calendar;
- range: DateRange;
- }, success: (res: {
- rawEvents: EventInput[];
- xhr?: XMLHttpRequest;
- }) => void, failure: (error: EventSourceError) => void) => (void | PromiseLike<EventInput[]>);
- export interface EventSourceDef {
- ignoreRange?: boolean;
- parseMeta: (raw: EventSourceInput) => object | null;
- fetch: EventSourceFetcher;
- }
- export function doesSourceNeedRange(eventSource: EventSource, calendar: Calendar): boolean;
- export function parseEventSource(raw: EventSourceInput, calendar: Calendar): EventSource | null;
-}
-
-declare module '@fullcalendar/core/interactions/interaction' {
- import DateComponent from '@fullcalendar/core/component/DateComponent';
- export abstract class Interaction {
- component: DateComponent<any>;
- constructor(settings: InteractionSettings);
- destroy(): void;
- }
- export type InteractionClass = {
- new (settings: InteractionSettings): Interaction;
- };
- export interface InteractionSettingsInput {
- el: HTMLElement;
- useEventCenter?: boolean;
- }
- export interface InteractionSettings {
- component: DateComponent<any>;
- el: HTMLElement;
- useEventCenter: boolean;
- }
- export type InteractionSettingsStore = {
- [componenUid: string]: InteractionSettings;
- };
- export function parseInteractionSettings(component: DateComponent<any>, input: InteractionSettingsInput): InteractionSettings;
- export function interactionSettingsToStore(settings: InteractionSettings): {
- [x: string]: InteractionSettings;
- };
- export let interactionSettingsStore: InteractionSettingsStore;
-}
-
-declare module '@fullcalendar/core/interactions/pointer' {
- export interface PointerDragEvent {
- origEvent: UIEvent;
- isTouch: boolean;
- subjectEl: EventTarget;
- pageX: number;
- pageY: number;
- deltaX: number;
- deltaY: number;
- }
-}
-
-declare module '@fullcalendar/core/interactions/hit' {
- import DateComponent from '@fullcalendar/core/component/DateComponent';
- import { DateSpan } from '@fullcalendar/core/structs/date-span';
- import { Rect } from '@fullcalendar/core/util/geom';
- export interface Hit {
- component: DateComponent<any>;
- dateSpan: DateSpan;
- dayEl: HTMLElement;
- rect: Rect;
- layer: number;
- }
-}
-
-declare module '@fullcalendar/core/interactions/date-selecting' {
- import { Hit } from '@fullcalendar/core/interactions/hit';
- export type dateSelectionJoinTransformer = (hit0: Hit, hit1: Hit) => any;
-}
-
-declare module '@fullcalendar/core/interactions/event-dragging' {
- import Calendar from '@fullcalendar/core/Calendar';
- import { EventMutation } from '@fullcalendar/core/structs/event-mutation';
- import { Hit } from '@fullcalendar/core/interactions/hit';
- import { EventDef } from '@fullcalendar/core/structs/event';
- import { EventUi } from '@fullcalendar/core/component/event-ui';
- import { View } from '@fullcalendar/core';
- export type eventDragMutationMassager = (mutation: EventMutation, hit0: Hit, hit1: Hit) => void;
- export type EventDropTransformers = (mutation: EventMutation, calendar: Calendar) => any;
- export type eventIsDraggableTransformer = (val: boolean, eventDef: EventDef, eventUi: EventUi, view: View) => boolean;
-}
-
-declare module '@fullcalendar/core/interactions/event-resizing' {
- import { Hit } from '@fullcalendar/core/interactions/hit';
- export type EventResizeJoinTransforms = (hit0: Hit, hit1: Hit) => false | object;
-}
-
-declare module '@fullcalendar/core/interactions/ElementDragging' {
- import EmitterMixin from '@fullcalendar/core/common/EmitterMixin';
- export { ElementDragging as default, ElementDragging };
- abstract class ElementDragging {
- emitter: EmitterMixin;
- constructor(el: HTMLElement);
- destroy(): void;
- abstract setIgnoreMove(bool: boolean): void;
- setMirrorIsVisible(bool: boolean): void;
- setMirrorNeedsRevert(bool: boolean): void;
- setAutoScrollEnabled(bool: boolean): void;
- }
- export type ElementDraggingClass = {
- new (el: HTMLElement): ElementDragging;
- };
-}
-
-declare module '@fullcalendar/core/formatting-api' {
- import { DateInput } from '@fullcalendar/core/datelib/env';
- export function formatDate(dateInput: DateInput, settings?: {}): any;
- export function formatRange(startInput: DateInput, endInput: DateInput, settings: any): any;
-}
-
-declare module '@fullcalendar/core/options' {
- import { PluginDef } from '@fullcalendar/core/plugin-system';
- export const config: any;
- export const globalDefaults: {
- defaultRangeSeparator: string;
- titleRangeSeparator: string;
- defaultTimedEventDuration: string;
- defaultAllDayEventDuration: {
- day: number;
- };
- forceEventDuration: boolean;
- nextDayThreshold: string;
- columnHeader: boolean;
- defaultView: string;
- aspectRatio: number;
- header: {
- left: string;
- center: string;
- right: string;
- };
- weekends: boolean;
- weekNumbers: boolean;
- weekNumberCalculation: string;
- editable: boolean;
- scrollTime: string;
- minTime: string;
- maxTime: string;
- showNonCurrentDates: boolean;
- lazyFetching: boolean;
- startParam: string;
- endParam: string;
- timeZoneParam: string;
- timeZone: string;
- locales: any[];
- locale: string;
- timeGridEventMinHeight: number;
- themeSystem: string;
- dragRevertDuration: number;
- dragScroll: boolean;
- allDayMaintainDuration: boolean;
- unselectAuto: boolean;
- dropAccept: string;
- eventOrder: string;
- eventLimit: boolean;
- eventLimitClick: string;
- dayPopoverFormat: {
- month: string;
- day: string;
- year: string;
- };
- handleWindowResize: boolean;
- windowResizeDelay: number;
- longPressDelay: number;
- eventDragMinDistance: number;
- };
- export const rtlDefaults: {
- header: {
- left: string;
- center: string;
- right: string;
- };
- buttonIcons: {
- prev: string;
- next: string;
- prevYear: string;
- nextYear: string;
- };
- };
- export function mergeOptions(optionObjs: any): any;
- export function refinePluginDefs(pluginInputs: any[]): PluginDef[];
-}
-
-declare module '@fullcalendar/core/structs/recurring-event' {
- import { EventInput, EventDef } from '@fullcalendar/core/structs/event';
- import { DateRange } from '@fullcalendar/core/datelib/date-range';
- import { DateEnv } from '@fullcalendar/core/datelib/env';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- export interface ParsedRecurring {
- typeData: any;
- allDayGuess: boolean | null;
- duration: Duration | null;
- }
- export interface RecurringType {
- parse: (rawEvent: EventInput, leftoverProps: any, dateEnv: DateEnv) => ParsedRecurring | null;
- expand: (typeData: any, framingRange: DateRange, dateEnv: DateEnv) => DateMarker[];
- }
- export function parseRecurring(eventInput: EventInput, allDayDefault: boolean | null, dateEnv: DateEnv, recurringTypes: RecurringType[], leftovers: any): {
- allDay: any;
- duration: Duration;
- typeData: any;
- typeId: number;
- };
- export function expandRecurringRanges(eventDef: EventDef, duration: Duration, framingRange: DateRange, dateEnv: DateEnv, recurringTypes: RecurringType[]): DateMarker[];
-}
-
-declare module '@fullcalendar/core/structs/drag-meta' {
- import { Duration, DurationInput } from '@fullcalendar/core/datelib/duration';
- import { EventNonDateInput } from '@fullcalendar/core/structs/event';
- export interface DragMetaInput extends EventNonDateInput {
- startTime?: DurationInput;
- duration?: DurationInput;
- create?: boolean;
- sourceId?: string;
- }
- export interface DragMeta {
- startTime: Duration | null;
- duration: Duration | null;
- create: boolean;
- sourceId: string;
- leftoverProps: object;
- }
- export function parseDragMeta(raw: DragMetaInput): DragMeta;
-}
-
-declare module '@fullcalendar/core/plugin-system' {
- import { reducerFunc } from '@fullcalendar/core/reducers/types';
- import { eventDefParserFunc } from '@fullcalendar/core/structs/event';
- import { eventDefMutationApplier } from '@fullcalendar/core/structs/event-mutation';
- import Calendar, { DatePointTransform, DateSpanTransform, CalendarInteractionClass, OptionChangeHandlerMap } from '@fullcalendar/core/Calendar';
- import { ViewConfigInputHash } from '@fullcalendar/core/structs/view-config';
- import { ViewSpec } from '@fullcalendar/core/structs/view-spec';
- import { ViewProps } from '@fullcalendar/core/View';
- import { CalendarComponentProps } from '@fullcalendar/core/CalendarComponent';
- import { isPropsValidTester } from '@fullcalendar/core/validation';
- import { eventDragMutationMassager, eventIsDraggableTransformer, EventDropTransformers } from '@fullcalendar/core/interactions/event-dragging';
- import { dateSelectionJoinTransformer } from '@fullcalendar/core/interactions/date-selecting';
- import { EventResizeJoinTransforms } from '@fullcalendar/core/interactions/event-resizing';
- import { ExternalDefTransform } from '@fullcalendar/core/interactions/external-element-dragging';
- import { InteractionClass } from '@fullcalendar/core/interactions/interaction';
- import { ThemeClass } from '@fullcalendar/core/theme/Theme';
- import { EventSourceDef } from '@fullcalendar/core/structs/event-source';
- import { CmdFormatterFunc } from '@fullcalendar/core/datelib/formatting-cmd';
- import { RecurringType } from '@fullcalendar/core/structs/recurring-event';
- import { NamedTimeZoneImplClass } from '@fullcalendar/core/datelib/timezone';
- import { ElementDraggingClass } from '@fullcalendar/core/interactions/ElementDragging';
- export interface PluginDefInput {
- deps?: PluginDef[];
- reducers?: reducerFunc[];
- eventDefParsers?: eventDefParserFunc[];
- isDraggableTransformers?: eventIsDraggableTransformer[];
- eventDragMutationMassagers?: eventDragMutationMassager[];
- eventDefMutationAppliers?: eventDefMutationApplier[];
- dateSelectionTransformers?: dateSelectionJoinTransformer[];
- datePointTransforms?: DatePointTransform[];
- dateSpanTransforms?: DateSpanTransform[];
- views?: ViewConfigInputHash;
- viewPropsTransformers?: ViewPropsTransformerClass[];
- isPropsValid?: isPropsValidTester;
- externalDefTransforms?: ExternalDefTransform[];
- eventResizeJoinTransforms?: EventResizeJoinTransforms[];
- viewContainerModifiers?: ViewContainerModifier[];
- eventDropTransformers?: EventDropTransformers[];
- componentInteractions?: InteractionClass[];
- calendarInteractions?: CalendarInteractionClass[];
- themeClasses?: {
- [themeSystemName: string]: ThemeClass;
- };
- eventSourceDefs?: EventSourceDef[];
- cmdFormatter?: CmdFormatterFunc;
- recurringTypes?: RecurringType[];
- namedTimeZonedImpl?: NamedTimeZoneImplClass;
- defaultView?: string;
- elementDraggingImpl?: ElementDraggingClass;
- optionChangeHandlers?: OptionChangeHandlerMap;
- }
- export interface PluginHooks {
- reducers: reducerFunc[];
- eventDefParsers: eventDefParserFunc[];
- isDraggableTransformers: eventIsDraggableTransformer[];
- eventDragMutationMassagers: eventDragMutationMassager[];
- eventDefMutationAppliers: eventDefMutationApplier[];
- dateSelectionTransformers: dateSelectionJoinTransformer[];
- datePointTransforms: DatePointTransform[];
- dateSpanTransforms: DateSpanTransform[];
- views: ViewConfigInputHash;
- viewPropsTransformers: ViewPropsTransformerClass[];
- isPropsValid: isPropsValidTester | null;
- externalDefTransforms: ExternalDefTransform[];
- eventResizeJoinTransforms: EventResizeJoinTransforms[];
- viewContainerModifiers: ViewContainerModifier[];
- eventDropTransformers: EventDropTransformers[];
- componentInteractions: InteractionClass[];
- calendarInteractions: CalendarInteractionClass[];
- themeClasses: {
- [themeSystemName: string]: ThemeClass;
- };
- eventSourceDefs: EventSourceDef[];
- cmdFormatter?: CmdFormatterFunc;
- recurringTypes: RecurringType[];
- namedTimeZonedImpl?: NamedTimeZoneImplClass;
- defaultView: string;
- elementDraggingImpl?: ElementDraggingClass;
- optionChangeHandlers: OptionChangeHandlerMap;
- }
- export interface PluginDef extends PluginHooks {
- id: string;
- deps: PluginDef[];
- }
- export type ViewPropsTransformerClass = new () => ViewPropsTransformer;
- export interface ViewPropsTransformer {
- transform(viewProps: ViewProps, viewSpec: ViewSpec, calendarProps: CalendarComponentProps, allOptions: any): any;
- }
- export type ViewContainerModifier = (contentEl: HTMLElement, calendar: Calendar) => void;
- export function createPlugin(input: PluginDefInput): PluginDef;
- export class PluginSystem {
- hooks: PluginHooks;
- addedHash: {
- [pluginId: string]: true;
- };
- constructor();
- add(plugin: PluginDef): void;
- }
-}
-
-declare module '@fullcalendar/core/reducers/types' {
- import { EventInput, EventInstanceHash } from '@fullcalendar/core/structs/event';
- import { DateRange } from '@fullcalendar/core/datelib/date-range';
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import { EventMutation } from '@fullcalendar/core/structs/event-mutation';
- import { EventSource, EventSourceHash, EventSourceError } from '@fullcalendar/core/structs/event-source';
- import { DateProfile } from '@fullcalendar/core/DateProfileGenerator';
- import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state';
- import { DateSpan } from '@fullcalendar/core/structs/date-span';
- import { DateEnv } from '@fullcalendar/core/datelib/env';
- import Calendar from '@fullcalendar/core/Calendar';
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- export interface CalendarState {
- eventSources: EventSourceHash;
- eventSourceLoadingLevel: number;
- loadingLevel: number;
- viewType: string;
- currentDate: DateMarker;
- dateProfile: DateProfile | null;
- eventStore: EventStore;
- dateSelection: DateSpan | null;
- eventSelection: string;
- eventDrag: EventInteractionState | null;
- eventResize: EventInteractionState | null;
- }
- export type reducerFunc = (state: CalendarState, action: Action, calendar: Calendar) => CalendarState;
- export type Action = {
- type: 'INIT';
- } | // wont it create another rerender?
- {
- type: 'PREV';
- } | {
- type: 'NEXT';
- } | {
- type: 'SET_DATE';
- dateMarker: DateMarker;
- } | {
- type: 'SET_VIEW_TYPE';
- viewType: string;
- dateMarker?: DateMarker;
- } | {
- type: 'SELECT_DATES';
- selection: DateSpan;
- } | {
- type: 'UNSELECT_DATES';
- } | {
- type: 'SELECT_EVENT';
- eventInstanceId: string;
- } | {
- type: 'UNSELECT_EVENT';
- } | {
- type: 'SET_EVENT_DRAG';
- state: EventInteractionState;
- } | {
- type: 'UNSET_EVENT_DRAG';
- } | {
- type: 'SET_EVENT_RESIZE';
- state: EventInteractionState;
- } | {
- type: 'UNSET_EVENT_RESIZE';
- } | {
- type: 'ADD_EVENT_SOURCES';
- sources: EventSource[];
- } | {
- type: 'REMOVE_EVENT_SOURCE';
- sourceId: string;
- } | {
- type: 'REMOVE_ALL_EVENT_SOURCES';
- } | {
- type: 'FETCH_EVENT_SOURCES';
- sourceIds?: string[];
- } | // if no sourceIds, fetch all
- {
- type: 'CHANGE_TIMEZONE';
- oldDateEnv: DateEnv;
- } | {
- type: 'RECEIVE_EVENTS';
- sourceId: string;
- fetchId: string;
- fetchRange: DateRange | null;
- rawEvents: EventInput[];
- } | {
- type: 'RECEIVE_EVENT_ERROR';
- sourceId: string;
- fetchId: string;
- fetchRange: DateRange | null;
- error: EventSourceError;
- } | // need all these?
- {
- type: 'ADD_EVENTS';
- eventStore: EventStore;
- } | {
- type: 'MERGE_EVENTS';
- eventStore: EventStore;
- } | {
- type: 'MUTATE_EVENTS';
- instanceId: string;
- mutation: EventMutation;
- fromApi?: boolean;
- } | {
- type: 'REMOVE_EVENT_DEF';
- defId: string;
- } | {
- type: 'REMOVE_EVENT_INSTANCES';
- instances: EventInstanceHash;
- } | {
- type: 'REMOVE_ALL_EVENTS';
- } | {
- type: 'RESET_EVENTS';
- };
-}
-
-declare module '@fullcalendar/core/CalendarComponent' {
- import Component, { ComponentContext } from '@fullcalendar/core/component/Component';
- import { ViewSpec } from '@fullcalendar/core/structs/view-spec';
- import View from '@fullcalendar/core/View';
- import Toolbar from '@fullcalendar/core/Toolbar';
- import DateProfileGenerator, { DateProfile } from '@fullcalendar/core/DateProfileGenerator';
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import { EventUiHash } from '@fullcalendar/core/component/event-ui';
- import { BusinessHoursInput } from '@fullcalendar/core/structs/business-hours';
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { CalendarState } from '@fullcalendar/core/reducers/types';
- export interface CalendarComponentProps extends CalendarState {
- viewSpec: ViewSpec;
- dateProfileGenerator: DateProfileGenerator;
- eventUiBases: EventUiHash;
- }
- export { CalendarComponent as default, CalendarComponent };
- class CalendarComponent extends Component<CalendarComponentProps> {
- view: View;
- header: Toolbar;
- footer: Toolbar;
- computeTitle: (dateProfile: any, viewOptions: any) => string;
- parseBusinessHours: (input: BusinessHoursInput) => EventStore;
- el: HTMLElement;
- contentEl: HTMLElement;
- elClassNames: string[];
- savedScroll: any;
- isHeightAuto: boolean;
- viewHeight: number;
- constructor(el: HTMLElement);
- render(props: CalendarComponentProps, context: ComponentContext): void;
- destroy(): void;
- _renderSkeleton(context: ComponentContext): void;
- _unrenderSkeleton(): void;
- removeElClassNames(): void;
- updateElClassNames(context: ComponentContext): void;
- _renderToolbars(viewSpec: ViewSpec, dateProfile: DateProfile, currentDate: DateMarker, title: string): void;
- _unrenderToolbars(): void;
- renderView(props: CalendarComponentProps, title: string): void;
- updateSize(isResize?: boolean): void;
- computeHeightVars(): void;
- queryToolbarsHeight(): number;
- freezeHeight(): void;
- thawHeight(): void;
- }
-}
-
-declare module '@fullcalendar/core/common/DayHeader' {
- import Component, { ComponentContext } from '@fullcalendar/core/component/Component';
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { DateProfile } from '@fullcalendar/core/DateProfileGenerator';
- export interface DayTableHeaderProps {
- dates: DateMarker[];
- dateProfile: DateProfile;
- datesRepDistinctDays: boolean;
- renderIntroHtml?: () => string;
- }
- export { DayHeader as default, DayHeader };
- class DayHeader extends Component<DayTableHeaderProps> {
- parentEl: HTMLElement;
- el: HTMLElement;
- thead: HTMLElement;
- constructor(parentEl: HTMLElement);
- render(props: DayTableHeaderProps, context: ComponentContext): void;
- destroy(): void;
- _renderSkeleton(context: ComponentContext): void;
- _unrenderSkeleton(): void;
- }
-}
-
-declare module '@fullcalendar/core/common/table-utils' {
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { DateProfile } from '@fullcalendar/core/DateProfileGenerator';
- import { ComponentContext } from '@fullcalendar/core/component/Component';
- export function computeFallbackHeaderFormat(datesRepDistinctDays: boolean, dayCnt: number): {
- weekday: string;
- month?: undefined;
- day?: undefined;
- omitCommas?: undefined;
- } | {
- weekday: string;
- month: string;
- day: string;
- omitCommas: boolean;
- };
- export function renderDateCell(dateMarker: DateMarker, dateProfile: DateProfile, datesRepDistinctDays: any, colCnt: any, colHeadFormat: any, context: ComponentContext, colspan?: any, otherAttrs?: any): string;
-}
-
-declare module '@fullcalendar/core/common/DaySeries' {
- import DateProfileGenerator from '@fullcalendar/core/DateProfileGenerator';
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { DateRange } from '@fullcalendar/core/datelib/date-range';
- export interface DaySeriesSeg {
- firstIndex: number;
- lastIndex: number;
- isStart: boolean;
- isEnd: boolean;
- }
- export { DaySeries as default, DaySeries };
- class DaySeries {
- cnt: number;
- dates: DateMarker[];
- indices: number[];
- constructor(range: DateRange, dateProfileGenerator: DateProfileGenerator);
- sliceRange(range: DateRange): DaySeriesSeg | null;
- }
-}
-
-declare module '@fullcalendar/core/interactions/event-interaction-state' {
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import { Seg } from '@fullcalendar/core/component/DateComponent';
- export interface EventInteractionState {
- affectedEvents: EventStore;
- mutatedEvents: EventStore;
- isEvent: boolean;
- origSeg: Seg | null;
- }
-}
-
-declare module '@fullcalendar/core/component/event-rendering' {
- import { EventDef, EventTuple, EventDefHash } from '@fullcalendar/core/structs/event';
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import { DateRange } from '@fullcalendar/core/datelib/date-range';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { Seg } from '@fullcalendar/core/component/DateComponent';
- import { EventUi, EventUiHash } from '@fullcalendar/core/component/event-ui';
- import { ComponentContext } from '@fullcalendar/core/component/Component';
- export interface EventRenderRange extends EventTuple {
- ui: EventUi;
- range: DateRange;
- isStart: boolean;
- isEnd: boolean;
- }
- export function sliceEventStore(eventStore: EventStore, eventUiBases: EventUiHash, framingRange: DateRange, nextDayThreshold?: Duration): {
- bg: EventRenderRange[];
- fg: EventRenderRange[];
- };
- export function hasBgRendering(def: EventDef): boolean;
- export function filterSegsViaEls(context: ComponentContext, segs: Seg[], isMirror: boolean): Seg[];
- export function getElSeg(el: HTMLElement): Seg | null;
- export function compileEventUis(eventDefs: EventDefHash, eventUiBases: EventUiHash): {
- [key: string]: EventUi;
- };
- export function compileEventUi(eventDef: EventDef, eventUiBases: EventUiHash): EventUi;
- export function triggerRenderedSegs(context: ComponentContext, segs: Seg[], isMirrors: boolean): void;
- export function triggerWillRemoveSegs(context: ComponentContext, segs: Seg[], isMirrors: boolean): void;
- export function computeEventDraggable(context: ComponentContext, eventDef: EventDef, eventUi: EventUi): boolean;
- export function computeEventStartResizable(context: ComponentContext, eventDef: EventDef, eventUi: EventUi): any;
- export function computeEventEndResizable(context: ComponentContext, eventDef: EventDef, eventUi: EventUi): boolean;
-}
-
-declare module '@fullcalendar/core/common/DayTable' {
- import DaySeries from '@fullcalendar/core/common/DaySeries';
- import { DateRange } from '@fullcalendar/core/datelib/date-range';
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import { Seg } from '@fullcalendar/core/component/DateComponent';
- export interface DayTableSeg extends Seg {
- row: number;
- firstCol: number;
- lastCol: number;
- }
- export interface DayTableCell {
- date: DateMarker;
- htmlAttrs?: string;
- }
- export { DayTable as default, DayTable };
- class DayTable {
- rowCnt: number;
- colCnt: number;
- cells: DayTableCell[][];
- headerDates: DateMarker[];
- constructor(daySeries: DaySeries, breakOnWeeks: boolean);
- sliceRange(range: DateRange): DayTableSeg[];
- }
-}
-
-declare module '@fullcalendar/core/common/slicing-utils' {
- import { DateRange } from '@fullcalendar/core/datelib/date-range';
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import { EventUiHash } from '@fullcalendar/core/component/event-ui';
- import { DateProfile } from '@fullcalendar/core/DateProfileGenerator';
- import DateComponent, { Seg, EventSegUiInteractionState } from '@fullcalendar/core/component/DateComponent';
- import { DateSpan } from '@fullcalendar/core/structs/date-span';
- import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state';
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- import Calendar from '@fullcalendar/core/Calendar';
- export interface SliceableProps {
- dateSelection: DateSpan;
- businessHours: EventStore;
- eventStore: EventStore;
- eventDrag: EventInteractionState | null;
- eventResize: EventInteractionState | null;
- eventSelection: string;
- eventUiBases: EventUiHash;
- }
- export interface SlicedProps<SegType extends Seg> {
- dateSelectionSegs: SegType[];
- businessHourSegs: SegType[];
- fgEventSegs: SegType[];
- bgEventSegs: SegType[];
- eventDrag: EventSegUiInteractionState | null;
- eventResize: EventSegUiInteractionState | null;
- eventSelection: string;
- }
- export { Slicer as default, Slicer };
- abstract class Slicer<SegType extends Seg, ExtraArgs extends any[] = []> {
- abstract sliceRange(dateRange: DateRange, ...extraArgs: ExtraArgs): SegType[];
- sliceProps(props: SliceableProps, dateProfile: DateProfile, nextDayThreshold: Duration | null, calendar: Calendar, component: DateComponent<any>, // TODO: kill
- ...extraArgs: ExtraArgs): SlicedProps<SegType>;
- sliceNowDate(// does not memoize
- date: DateMarker, component: DateComponent<any>, // TODO: kill
- ...extraArgs: ExtraArgs): SegType[];
- }
-}
-
-declare module '@fullcalendar/core/structs/event-mutation' {
- import { Duration } from '@fullcalendar/core/datelib/duration';
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import { EventDef } from '@fullcalendar/core/structs/event';
- import Calendar from '@fullcalendar/core/Calendar';
- import { EventUiHash } from '@fullcalendar/core/component/event-ui';
- export interface EventMutation {
- datesDelta?: Duration;
- startDelta?: Duration;
- endDelta?: Duration;
- standardProps?: any;
- extendedProps?: any;
- }
- export function applyMutationToEventStore(eventStore: EventStore, eventConfigBase: EventUiHash, mutation: EventMutation, calendar: Calendar): EventStore;
- export type eventDefMutationApplier = (eventDef: EventDef, mutation: EventMutation, calendar: Calendar) => void;
-}
-
-declare module '@fullcalendar/core/validation' {
- import { EventStore } from '@fullcalendar/core/structs/event-store';
- import Calendar from '@fullcalendar/core/Calendar';
- import { DateSpan, DateSpanApi } from '@fullcalendar/core/structs/date-span';
- import EventApi from '@fullcalendar/core/api/EventApi';
- import { EventInput } from '@fullcalendar/core/structs/event';
- import { EventInteractionState } from '@fullcalendar/core/interactions/event-interaction-state';
- import { SplittableProps } from '@fullcalendar/core/component/event-splitting';
- export type ConstraintInput = 'businessHours' | string | EventInput | EventInput[];
- export type Constraint = 'businessHours' | string | EventStore | false;
- export type OverlapFunc = ((stillEvent: EventApi, movingEvent: EventApi | null) => boolean);
- export type AllowFunc = (span: DateSpanApi, movingEvent: EventApi | null) => boolean;
- export type isPropsValidTester = (props: SplittableProps, calendar: Calendar) => boolean;
- export function isInteractionValid(interaction: EventInteractionState, calendar: Calendar): boolean;
- export function isDateSelectionValid(dateSelection: DateSpan, calendar: Calendar): boolean;
- export function isPropsValid(state: SplittableProps, calendar: Calendar, dateSpanMeta?: {}, filterConfig?: any): boolean;
- export function normalizeConstraint(input: ConstraintInput, calendar: Calendar): Constraint | null;
-}
-
-declare module '@fullcalendar/core/api/EventApi' {
- import Calendar from '@fullcalendar/core/Calendar';
- import { EventDef, EventInstance } from '@fullcalendar/core/structs/event';
- import { EventMutation } from '@fullcalendar/core/structs/event-mutation';
- import { DateInput } from '@fullcalendar/core/datelib/env';
- import { DurationInput } from '@fullcalendar/core/datelib/duration';
- import { FormatterInput } from '@fullcalendar/core/datelib/formatting';
- import EventSourceApi from '@fullcalendar/core/api/EventSourceApi';
- export { EventApi as default, EventApi };
- class EventApi {
- _calendar: Calendar;
- _def: EventDef;
- _instance: EventInstance | null;
- constructor(calendar: Calendar, def: EventDef, instance?: EventInstance);
- setProp(name: string, val: string): void;
- setExtendedProp(name: string, val: any): void;
- setStart(startInput: DateInput, options?: {
- granularity?: string;
- maintainDuration?: boolean;
- }): void;
- setEnd(endInput: DateInput | null, options?: {
- granularity?: string;
- }): void;
- setDates(startInput: DateInput, endInput: DateInput | null, options?: {
- allDay?: boolean;
- granularity?: string;
- }): void;
- moveStart(deltaInput: DurationInput): void;
- moveEnd(deltaInput: DurationInput): void;
- moveDates(deltaInput: DurationInput): void;
- setAllDay(allDay: boolean, options?: {
- maintainDuration?: boolean;
- }): void;
- formatRange(formatInput: FormatterInput): any;
- mutate(mutation: EventMutation): void;
- remove(): void;
- readonly source: EventSourceApi | null;
- readonly start: Date | null;
- readonly end: Date | null;
- readonly id: string;
- readonly groupId: string;
- readonly allDay: boolean;
- readonly title: string;
- readonly url: string;
- readonly rendering: string;
- readonly startEditable: boolean;
- readonly durationEditable: boolean;
- readonly constraint: any;
- readonly overlap: any;
- readonly allow: any;
- readonly backgroundColor: string;
- readonly borderColor: string;
- readonly textColor: string;
- readonly classNames: string[];
- readonly extendedProps: any;
- }
-}
-
-declare module '@fullcalendar/core/util/requestJson' {
- export default function requestJson(method: string, url: string, params: object, successCallback: any, failureCallback: any): void;
-}
-
-declare module '@fullcalendar/core/datelib/locale' {
- export type LocaleCodeArg = string | string[];
- export type LocaleSingularArg = LocaleCodeArg | RawLocale;
- export interface Locale {
- codeArg: LocaleCodeArg;
- codes: string[];
- week: {
- dow: number;
- doy: number;
- };
- simpleNumberFormat: Intl.NumberFormat;
- options: any;
- }
- export interface RawLocale {
- code: string;
- [otherProp: string]: any;
- }
- export type RawLocaleMap = {
- [code: string]: RawLocale;
- };
- export interface RawLocaleInfo {
- map: RawLocaleMap;
- defaultCode: string;
- }
- export function parseRawLocales(explicitRawLocales: RawLocale[]): RawLocaleInfo;
- export function buildLocale(inputSingular: LocaleSingularArg, available: RawLocaleMap): Locale;
-}
-
-declare module '@fullcalendar/core/OptionsManager' {
- export { OptionsManager as default, OptionsManager };
- class OptionsManager {
- dirDefaults: any;
- localeDefaults: any;
- overrides: any;
- dynamicOverrides: any;
- computed: any;
- constructor(overrides: any);
- mutate(updates: any, removals: string[], isDynamic?: boolean): void;
- compute(): void;
- }
-}
-
-declare module '@fullcalendar/core/api/EventSourceApi' {
- import Calendar from '@fullcalendar/core/Calendar';
- import { EventSource } from '@fullcalendar/core/structs/event-source';
- export { EventSourceApi as default, EventSourceApi };
- class EventSourceApi {
- calendar: Calendar;
- internalEventSource: EventSource;
- constructor(calendar: Calendar, internalEventSource: EventSource);
- remove(): void;
- refetch(): void;
- readonly id: string;
- readonly url: string;
- }
-}
-
-declare module '@fullcalendar/core/structs/view-config' {
- import View from '@fullcalendar/core/View';
- import { ViewSpec } from '@fullcalendar/core/structs/view-spec';
- export type ViewClass = new (viewSpec: ViewSpec, parentEl: HTMLElement) => View;
- export interface ViewConfigObjectInput {
- type?: string;
- class?: ViewClass;
- [optionName: string]: any;
- }
- export type ViewConfigInput = ViewClass | ViewConfigObjectInput;
- export type ViewConfigInputHash = {
- [viewType: string]: ViewConfigInput;
- };
- export interface ViewConfig {
- superType: string;
- class: ViewClass | null;
- options: any;
- }
- export type ViewConfigHash = {
- [viewType: string]: ViewConfig;
- };
- export function parseViewConfigs(inputs: ViewConfigInputHash): ViewConfigHash;
-}
-
-declare module '@fullcalendar/core/datelib/calendar-system' {
- import { DateMarker } from '@fullcalendar/core/datelib/marker';
- export interface CalendarSystem {
- getMarkerYear(d: DateMarker): number;
- getMarkerMonth(d: DateMarker): number;
- getMarkerDay(d: DateMarker): number;
- arrayToMarker(arr: number[]): DateMarker;
- markerToArray(d: DateMarker): number[];
- }
- export function registerCalendarSystem(name: any, theClass: any): void;
- export function createCalendarSystem(name: any): any;
-}
-
-declare module '@fullcalendar/core/datelib/formatting-cmd' {
- import { DateFormatter, DateFormattingContext, ZonedMarker, VerboseFormattingArg } from '@fullcalendar/core/datelib/formatting';
- export type CmdFormatterFunc = (cmd: string, arg: VerboseFormattingArg) => string;
- export class CmdFormatter implements DateFormatter {
- cmdStr: string;
- separator: string;
- constructor(cmdStr: string, separator?: string);
- format(date: ZonedMarker, context: DateFormattingContext): string;
- formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext): string;
- }
-}
-
-declare module '@fullcalendar/core/datelib/formatting-func' {
- import { DateFormatter, DateFormattingContext, ZonedMarker, VerboseFormattingArg } from '@fullcalendar/core/datelib/formatting';
- export type FuncFormatterFunc = (arg: VerboseFormattingArg) => string;
- export class FuncFormatter implements DateFormatter {
- func: FuncFormatterFunc;
- constructor(func: FuncFormatterFunc);
- format(date: ZonedMarker, context: DateFormattingContext): string;
- formatRange(start: ZonedMarker, end: ZonedMarker, context: DateFormattingContext): string;
- }
-}
-
-declare module '@fullcalendar/core/event-sources/func-event-source' {
- import { EventSourceError } from '@fullcalendar/core/structs/event-source';
- import { EventInput } from '@fullcalendar/core/structs/event';
- export type EventSourceFunc = (arg: {
- start: Date;
- end: Date;
- timeZone: string;
- }, successCallback: (events: EventInput[]) => void, failureCallback: (error: EventSourceError) => void) => (void | PromiseLike<EventInput[]>);
- const _default: import("@fullcalendar/core/plugin-system").PluginDef;
- export default _default;
-}
-
-declare module '@fullcalendar/core/interactions/external-element-dragging' {
- import { DateSpan } from '@fullcalendar/core/structs/date-span';
- import { DragMeta } from '@fullcalendar/core/structs/drag-meta';
- export type ExternalDefTransform = (dateSpan: DateSpan, dragMeta: DragMeta) => any;
-}
-
-declare module '@fullcalendar/core/Toolbar' {
- import Component from '@fullcalendar/core/component/Component';
- export interface ToolbarRenderProps {
- layout: any;
- title: string;
- activeButton: string;
- isTodayEnabled: boolean;
- isPrevEnabled: boolean;
- isNextEnabled: boolean;
- }
- export { Toolbar as default, Toolbar };
- class Toolbar extends Component<ToolbarRenderProps> {
- el: HTMLElement;
- viewsWithButtons: any;
- constructor(extraClassName: any);
- destroy(): void;
- render(props: ToolbarRenderProps): void;
- renderLayout(layout: any): void;
- unrenderLayout(): void;
- renderSection(position: any, buttonStr: any): HTMLElement;
- updateToday(isTodayEnabled: any): void;
- updatePrev(isPrevEnabled: any): void;
- updateNext(isNextEnabled: any): void;
- updateTitle(text: any): void;
- updateActiveButton(buttonName?: any): void;
- toggleButtonEnabled(buttonName: any, bool: any): void;
- }
-}
-
diff --git a/library/fullcalendar/packages/core/main.esm.js b/library/fullcalendar/packages/core/main.esm.js
deleted file mode 100644
index a9cb1b462..000000000
--- a/library/fullcalendar/packages/core/main.esm.js
+++ /dev/null
@@ -1,8582 +0,0 @@
-/*!
-FullCalendar Core Package v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-// Creating
-// ----------------------------------------------------------------------------------------------------------------
-var elementPropHash = {
- className: true,
- colSpan: true,
- rowSpan: true
-};
-var containerTagHash = {
- '<tr': 'tbody',
- '<td': 'tr'
-};
-function createElement(tagName, attrs, content) {
- var el = document.createElement(tagName);
- if (attrs) {
- for (var attrName in attrs) {
- if (attrName === 'style') {
- applyStyle(el, attrs[attrName]);
- }
- else if (elementPropHash[attrName]) {
- el[attrName] = attrs[attrName];
- }
- else {
- el.setAttribute(attrName, attrs[attrName]);
- }
- }
- }
- if (typeof content === 'string') {
- el.innerHTML = content; // shortcut. no need to process HTML in any way
- }
- else if (content != null) {
- appendToElement(el, content);
- }
- return el;
-}
-function htmlToElement(html) {
- html = html.trim();
- var container = document.createElement(computeContainerTag(html));
- container.innerHTML = html;
- return container.firstChild;
-}
-function htmlToElements(html) {
- return Array.prototype.slice.call(htmlToNodeList(html));
-}
-function htmlToNodeList(html) {
- html = html.trim();
- var container = document.createElement(computeContainerTag(html));
- container.innerHTML = html;
- return container.childNodes;
-}
-// assumes html already trimmed and tag names are lowercase
-function computeContainerTag(html) {
- return containerTagHash[html.substr(0, 3) // faster than using regex
- ] || 'div';
-}
-function appendToElement(el, content) {
- var childNodes = normalizeContent(content);
- for (var i = 0; i < childNodes.length; i++) {
- el.appendChild(childNodes[i]);
- }
-}
-function prependToElement(parent, content) {
- var newEls = normalizeContent(content);
- var afterEl = parent.firstChild || null; // if no firstChild, will append to end, but that's okay, b/c there were no children
- for (var i = 0; i < newEls.length; i++) {
- parent.insertBefore(newEls[i], afterEl);
- }
-}
-function insertAfterElement(refEl, content) {
- var newEls = normalizeContent(content);
- var afterEl = refEl.nextSibling || null;
- for (var i = 0; i < newEls.length; i++) {
- refEl.parentNode.insertBefore(newEls[i], afterEl);
- }
-}
-function normalizeContent(content) {
- var els;
- if (typeof content === 'string') {
- els = htmlToElements(content);
- }
- else if (content instanceof Node) {
- els = [content];
- }
- else { // Node[] or NodeList
- els = Array.prototype.slice.call(content);
- }
- return els;
-}
-function removeElement(el) {
- if (el.parentNode) {
- el.parentNode.removeChild(el);
- }
-}
-// Querying
-// ----------------------------------------------------------------------------------------------------------------
-// from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
-var matchesMethod = Element.prototype.matches ||
- Element.prototype.matchesSelector ||
- Element.prototype.msMatchesSelector;
-var closestMethod = Element.prototype.closest || function (selector) {
- // polyfill
- var el = this;
- if (!document.documentElement.contains(el)) {
- return null;
- }
- do {
- if (elementMatches(el, selector)) {
- return el;
- }
- el = el.parentElement || el.parentNode;
- } while (el !== null && el.nodeType === 1);
- return null;
-};
-function elementClosest(el, selector) {
- return closestMethod.call(el, selector);
-}
-function elementMatches(el, selector) {
- return matchesMethod.call(el, selector);
-}
-// accepts multiple subject els
-// returns a real array. good for methods like forEach
-function findElements(container, selector) {
- var containers = container instanceof HTMLElement ? [container] : container;
- var allMatches = [];
- for (var i = 0; i < containers.length; i++) {
- var matches = containers[i].querySelectorAll(selector);
- for (var j = 0; j < matches.length; j++) {
- allMatches.push(matches[j]);
- }
- }
- return allMatches;
-}
-// accepts multiple subject els
-// only queries direct child elements
-function findChildren(parent, selector) {
- var parents = parent instanceof HTMLElement ? [parent] : parent;
- var allMatches = [];
- for (var i = 0; i < parents.length; i++) {
- var childNodes = parents[i].children; // only ever elements
- for (var j = 0; j < childNodes.length; j++) {
- var childNode = childNodes[j];
- if (!selector || elementMatches(childNode, selector)) {
- allMatches.push(childNode);
- }
- }
- }
- return allMatches;
-}
-// Attributes
-// ----------------------------------------------------------------------------------------------------------------
-function forceClassName(el, className, bool) {
- if (bool) {
- el.classList.add(className);
- }
- else {
- el.classList.remove(className);
- }
-}
-// Style
-// ----------------------------------------------------------------------------------------------------------------
-var PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
-function applyStyle(el, props) {
- for (var propName in props) {
- applyStyleProp(el, propName, props[propName]);
- }
-}
-function applyStyleProp(el, name, val) {
- if (val == null) {
- el.style[name] = '';
- }
- else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {
- el.style[name] = val + 'px';
- }
- else {
- el.style[name] = val;
- }
-}
-
-function pointInsideRect(point, rect) {
- return point.left >= rect.left &&
- point.left < rect.right &&
- point.top >= rect.top &&
- point.top < rect.bottom;
-}
-// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false
-function intersectRects(rect1, rect2) {
- var res = {
- left: Math.max(rect1.left, rect2.left),
- right: Math.min(rect1.right, rect2.right),
- top: Math.max(rect1.top, rect2.top),
- bottom: Math.min(rect1.bottom, rect2.bottom)
- };
- if (res.left < res.right && res.top < res.bottom) {
- return res;
- }
- return false;
-}
-function translateRect(rect, deltaX, deltaY) {
- return {
- left: rect.left + deltaX,
- right: rect.right + deltaX,
- top: rect.top + deltaY,
- bottom: rect.bottom + deltaY
- };
-}
-// Returns a new point that will have been moved to reside within the given rectangle
-function constrainPoint(point, rect) {
- return {
- left: Math.min(Math.max(point.left, rect.left), rect.right),
- top: Math.min(Math.max(point.top, rect.top), rect.bottom)
- };
-}
-// Returns a point that is the center of the given rectangle
-function getRectCenter(rect) {
- return {
- left: (rect.left + rect.right) / 2,
- top: (rect.top + rect.bottom) / 2
- };
-}
-// Subtracts point2's coordinates from point1's coordinates, returning a delta
-function diffPoints(point1, point2) {
- return {
- left: point1.left - point2.left,
- top: point1.top - point2.top
- };
-}
-
-// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side
-var isRtlScrollbarOnLeft = null;
-function getIsRtlScrollbarOnLeft() {
- if (isRtlScrollbarOnLeft === null) {
- isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();
- }
- return isRtlScrollbarOnLeft;
-}
-function computeIsRtlScrollbarOnLeft() {
- var outerEl = createElement('div', {
- style: {
- position: 'absolute',
- top: -1000,
- left: 0,
- border: 0,
- padding: 0,
- overflow: 'scroll',
- direction: 'rtl'
- }
- }, '<div></div>');
- document.body.appendChild(outerEl);
- var innerEl = outerEl.firstChild;
- var res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
- removeElement(outerEl);
- return res;
-}
-// The scrollbar width computations in computeEdges are sometimes flawed when it comes to
-// retina displays, rounding, and IE11. Massage them into a usable value.
-function sanitizeScrollbarWidth(width) {
- width = Math.max(0, width); // no negatives
- width = Math.round(width);
- return width;
-}
-
-function computeEdges(el, getPadding) {
- if (getPadding === void 0) { getPadding = false; }
- var computedStyle = window.getComputedStyle(el);
- var borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;
- var borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;
- var borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;
- var borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;
- // must use offset(Width|Height) because compatible with client(Width|Height)
- var scrollbarLeftRight = sanitizeScrollbarWidth(el.offsetWidth - el.clientWidth - borderLeft - borderRight);
- var scrollbarBottom = sanitizeScrollbarWidth(el.offsetHeight - el.clientHeight - borderTop - borderBottom);
- var res = {
- borderLeft: borderLeft,
- borderRight: borderRight,
- borderTop: borderTop,
- borderBottom: borderBottom,
- scrollbarBottom: scrollbarBottom,
- scrollbarLeft: 0,
- scrollbarRight: 0
- };
- if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?
- res.scrollbarLeft = scrollbarLeftRight;
- }
- else {
- res.scrollbarRight = scrollbarLeftRight;
- }
- if (getPadding) {
- res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;
- res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;
- res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;
- res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;
- }
- return res;
-}
-function computeInnerRect(el, goWithinPadding) {
- if (goWithinPadding === void 0) { goWithinPadding = false; }
- var outerRect = computeRect(el);
- var edges = computeEdges(el, goWithinPadding);
- var res = {
- left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,
- right: outerRect.right - edges.borderRight - edges.scrollbarRight,
- top: outerRect.top + edges.borderTop,
- bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom
- };
- if (goWithinPadding) {
- res.left += edges.paddingLeft;
- res.right -= edges.paddingRight;
- res.top += edges.paddingTop;
- res.bottom -= edges.paddingBottom;
- }
- return res;
-}
-function computeRect(el) {
- var rect = el.getBoundingClientRect();
- return {
- left: rect.left + window.pageXOffset,
- top: rect.top + window.pageYOffset,
- right: rect.right + window.pageXOffset,
- bottom: rect.bottom + window.pageYOffset
- };
-}
-function computeViewportRect() {
- return {
- left: window.pageXOffset,
- right: window.pageXOffset + document.documentElement.clientWidth,
- top: window.pageYOffset,
- bottom: window.pageYOffset + document.documentElement.clientHeight
- };
-}
-function computeHeightAndMargins(el) {
- return el.getBoundingClientRect().height + computeVMargins(el);
-}
-function computeVMargins(el) {
- var computed = window.getComputedStyle(el);
- return parseInt(computed.marginTop, 10) +
- parseInt(computed.marginBottom, 10);
-}
-// does not return window
-function getClippingParents(el) {
- var parents = [];
- while (el instanceof HTMLElement) { // will stop when gets to document or null
- var computedStyle = window.getComputedStyle(el);
- if (computedStyle.position === 'fixed') {
- break;
- }
- if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {
- parents.push(el);
- }
- el = el.parentNode;
- }
- return parents;
-}
-function computeClippingRect(el) {
- return getClippingParents(el)
- .map(function (el) {
- return computeInnerRect(el);
- })
- .concat(computeViewportRect())
- .reduce(function (rect0, rect1) {
- return intersectRects(rect0, rect1) || rect1; // should always intersect
- });
-}
-
-// Stops a mouse/touch event from doing it's native browser action
-function preventDefault(ev) {
- ev.preventDefault();
-}
-// Event Delegation
-// ----------------------------------------------------------------------------------------------------------------
-function listenBySelector(container, eventType, selector, handler) {
- function realHandler(ev) {
- var matchedChild = elementClosest(ev.target, selector);
- if (matchedChild) {
- handler.call(matchedChild, ev, matchedChild);
- }
- }
- container.addEventListener(eventType, realHandler);
- return function () {
- container.removeEventListener(eventType, realHandler);
- };
-}
-function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {
- var currentMatchedChild;
- return listenBySelector(container, 'mouseover', selector, function (ev, matchedChild) {
- if (matchedChild !== currentMatchedChild) {
- currentMatchedChild = matchedChild;
- onMouseEnter(ev, matchedChild);
- var realOnMouseLeave_1 = function (ev) {
- currentMatchedChild = null;
- onMouseLeave(ev, matchedChild);
- matchedChild.removeEventListener('mouseleave', realOnMouseLeave_1);
- };
- // listen to the next mouseleave, and then unattach
- matchedChild.addEventListener('mouseleave', realOnMouseLeave_1);
- }
- });
-}
-// Animation
-// ----------------------------------------------------------------------------------------------------------------
-var transitionEventNames = [
- 'webkitTransitionEnd',
- 'otransitionend',
- 'oTransitionEnd',
- 'msTransitionEnd',
- 'transitionend'
-];
-// triggered only when the next single subsequent transition finishes
-function whenTransitionDone(el, callback) {
- var realCallback = function (ev) {
- callback(ev);
- transitionEventNames.forEach(function (eventName) {
- el.removeEventListener(eventName, realCallback);
- });
- };
- transitionEventNames.forEach(function (eventName) {
- el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes
- });
-}
-
-var DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
-// Adding
-function addWeeks(m, n) {
- var a = dateToUtcArray(m);
- a[2] += n * 7;
- return arrayToUtcDate(a);
-}
-function addDays(m, n) {
- var a = dateToUtcArray(m);
- a[2] += n;
- return arrayToUtcDate(a);
-}
-function addMs(m, n) {
- var a = dateToUtcArray(m);
- a[6] += n;
- return arrayToUtcDate(a);
-}
-// Diffing (all return floats)
-function diffWeeks(m0, m1) {
- return diffDays(m0, m1) / 7;
-}
-function diffDays(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);
-}
-function diffHours(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);
-}
-function diffMinutes(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / (1000 * 60);
-}
-function diffSeconds(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / 1000;
-}
-function diffDayAndTime(m0, m1) {
- var m0day = startOfDay(m0);
- var m1day = startOfDay(m1);
- return {
- years: 0,
- months: 0,
- days: Math.round(diffDays(m0day, m1day)),
- milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf())
- };
-}
-// Diffing Whole Units
-function diffWholeWeeks(m0, m1) {
- var d = diffWholeDays(m0, m1);
- if (d !== null && d % 7 === 0) {
- return d / 7;
- }
- return null;
-}
-function diffWholeDays(m0, m1) {
- if (timeAsMs(m0) === timeAsMs(m1)) {
- return Math.round(diffDays(m0, m1));
- }
- return null;
-}
-// Start-Of
-function startOfDay(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate()
- ]);
-}
-function startOfHour(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate(),
- m.getUTCHours()
- ]);
-}
-function startOfMinute(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate(),
- m.getUTCHours(),
- m.getUTCMinutes()
- ]);
-}
-function startOfSecond(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate(),
- m.getUTCHours(),
- m.getUTCMinutes(),
- m.getUTCSeconds()
- ]);
-}
-// Week Computation
-function weekOfYear(marker, dow, doy) {
- var y = marker.getUTCFullYear();
- var w = weekOfGivenYear(marker, y, dow, doy);
- if (w < 1) {
- return weekOfGivenYear(marker, y - 1, dow, doy);
- }
- var nextW = weekOfGivenYear(marker, y + 1, dow, doy);
- if (nextW >= 1) {
- return Math.min(w, nextW);
- }
- return w;
-}
-function weekOfGivenYear(marker, year, dow, doy) {
- var firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);
- var dayStart = startOfDay(marker);
- var days = Math.round(diffDays(firstWeekStart, dayStart));
- return Math.floor(days / 7) + 1; // zero-indexed
-}
-// start-of-first-week - start-of-year
-function firstWeekOffset(year, dow, doy) {
- // first-week day -- which january is always in the first week (4 for iso, 1 for other)
- var fwd = 7 + dow - doy;
- // first-week day local weekday -- which local weekday is fwd
- var fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;
- return -fwdlw + fwd - 1;
-}
-// Array Conversion
-function dateToLocalArray(date) {
- return [
- date.getFullYear(),
- date.getMonth(),
- date.getDate(),
- date.getHours(),
- date.getMinutes(),
- date.getSeconds(),
- date.getMilliseconds()
- ];
-}
-function arrayToLocalDate(a) {
- return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month
- a[3] || 0, a[4] || 0, a[5] || 0);
-}
-function dateToUtcArray(date) {
- return [
- date.getUTCFullYear(),
- date.getUTCMonth(),
- date.getUTCDate(),
- date.getUTCHours(),
- date.getUTCMinutes(),
- date.getUTCSeconds(),
- date.getUTCMilliseconds()
- ];
-}
-function arrayToUtcDate(a) {
- // according to web standards (and Safari), a month index is required.
- // massage if only given a year.
- if (a.length === 1) {
- a = a.concat([0]);
- }
- return new Date(Date.UTC.apply(Date, a));
-}
-// Other Utils
-function isValidDate(m) {
- return !isNaN(m.valueOf());
-}
-function timeAsMs(m) {
- return m.getUTCHours() * 1000 * 60 * 60 +
- m.getUTCMinutes() * 1000 * 60 +
- m.getUTCSeconds() * 1000 +
- m.getUTCMilliseconds();
-}
-
-var INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];
-var PARSE_RE = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;
-// Parsing and Creation
-function createDuration(input, unit) {
- var _a;
- if (typeof input === 'string') {
- return parseString(input);
- }
- else if (typeof input === 'object' && input) { // non-null object
- return normalizeObject(input);
- }
- else if (typeof input === 'number') {
- return normalizeObject((_a = {}, _a[unit || 'milliseconds'] = input, _a));
- }
- else {
- return null;
- }
-}
-function parseString(s) {
- var m = PARSE_RE.exec(s);
- if (m) {
- var sign = m[1] ? -1 : 1;
- return {
- years: 0,
- months: 0,
- days: sign * (m[2] ? parseInt(m[2], 10) : 0),
- milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours
- (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes
- (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds
- (m[6] ? parseInt(m[6], 10) : 0) // ms
- )
- };
- }
- return null;
-}
-function normalizeObject(obj) {
- return {
- years: obj.years || obj.year || 0,
- months: obj.months || obj.month || 0,
- days: (obj.days || obj.day || 0) +
- getWeeksFromInput(obj) * 7,
- milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours
- (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes
- (obj.seconds || obj.second || 0) * 1000 + // seconds
- (obj.milliseconds || obj.millisecond || obj.ms || 0) // ms
- };
-}
-function getWeeksFromInput(obj) {
- return obj.weeks || obj.week || 0;
-}
-// Equality
-function durationsEqual(d0, d1) {
- return d0.years === d1.years &&
- d0.months === d1.months &&
- d0.days === d1.days &&
- d0.milliseconds === d1.milliseconds;
-}
-function isSingleDay(dur) {
- return dur.years === 0 && dur.months === 0 && dur.days === 1 && dur.milliseconds === 0;
-}
-// Simple Math
-function addDurations(d0, d1) {
- return {
- years: d0.years + d1.years,
- months: d0.months + d1.months,
- days: d0.days + d1.days,
- milliseconds: d0.milliseconds + d1.milliseconds
- };
-}
-function subtractDurations(d1, d0) {
- return {
- years: d1.years - d0.years,
- months: d1.months - d0.months,
- days: d1.days - d0.days,
- milliseconds: d1.milliseconds - d0.milliseconds
- };
-}
-function multiplyDuration(d, n) {
- return {
- years: d.years * n,
- months: d.months * n,
- days: d.days * n,
- milliseconds: d.milliseconds * n
- };
-}
-// Conversions
-// "Rough" because they are based on average-case Gregorian months/years
-function asRoughYears(dur) {
- return asRoughDays(dur) / 365;
-}
-function asRoughMonths(dur) {
- return asRoughDays(dur) / 30;
-}
-function asRoughDays(dur) {
- return asRoughMs(dur) / 864e5;
-}
-function asRoughMinutes(dur) {
- return asRoughMs(dur) / (1000 * 60);
-}
-function asRoughSeconds(dur) {
- return asRoughMs(dur) / 1000;
-}
-function asRoughMs(dur) {
- return dur.years * (365 * 864e5) +
- dur.months * (30 * 864e5) +
- dur.days * 864e5 +
- dur.milliseconds;
-}
-// Advanced Math
-function wholeDivideDurations(numerator, denominator) {
- var res = null;
- for (var i = 0; i < INTERNAL_UNITS.length; i++) {
- var unit = INTERNAL_UNITS[i];
- if (denominator[unit]) {
- var localRes = numerator[unit] / denominator[unit];
- if (!isInt(localRes) || (res !== null && res !== localRes)) {
- return null;
- }
- res = localRes;
- }
- else if (numerator[unit]) {
- // needs to divide by something but can't!
- return null;
- }
- }
- return res;
-}
-function greatestDurationDenominator(dur, dontReturnWeeks) {
- var ms = dur.milliseconds;
- if (ms) {
- if (ms % 1000 !== 0) {
- return { unit: 'millisecond', value: ms };
- }
- if (ms % (1000 * 60) !== 0) {
- return { unit: 'second', value: ms / 1000 };
- }
- if (ms % (1000 * 60 * 60) !== 0) {
- return { unit: 'minute', value: ms / (1000 * 60) };
- }
- if (ms) {
- return { unit: 'hour', value: ms / (1000 * 60 * 60) };
- }
- }
- if (dur.days) {
- if (!dontReturnWeeks && dur.days % 7 === 0) {
- return { unit: 'week', value: dur.days / 7 };
- }
- return { unit: 'day', value: dur.days };
- }
- if (dur.months) {
- return { unit: 'month', value: dur.months };
- }
- if (dur.years) {
- return { unit: 'year', value: dur.years };
- }
- return { unit: 'millisecond', value: 0 };
-}
-
-/* FullCalendar-specific DOM Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left
-// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.
-function compensateScroll(rowEl, scrollbarWidths) {
- if (scrollbarWidths.left) {
- applyStyle(rowEl, {
- borderLeftWidth: 1,
- marginLeft: scrollbarWidths.left - 1
- });
- }
- if (scrollbarWidths.right) {
- applyStyle(rowEl, {
- borderRightWidth: 1,
- marginRight: scrollbarWidths.right - 1
- });
- }
-}
-// Undoes compensateScroll and restores all borders/margins
-function uncompensateScroll(rowEl) {
- applyStyle(rowEl, {
- marginLeft: '',
- marginRight: '',
- borderLeftWidth: '',
- borderRightWidth: ''
- });
-}
-// Make the mouse cursor express that an event is not allowed in the current area
-function disableCursor() {
- document.body.classList.add('fc-not-allowed');
-}
-// Returns the mouse cursor to its original look
-function enableCursor() {
- document.body.classList.remove('fc-not-allowed');
-}
-// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.
-// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering
-// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and
-// reduces the available height.
-function distributeHeight(els, availableHeight, shouldRedistribute) {
- // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,
- // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.
- var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element
- var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*
- var flexEls = []; // elements that are allowed to expand. array of DOM nodes
- var flexOffsets = []; // amount of vertical space it takes up
- var flexHeights = []; // actual css height
- var usedHeight = 0;
- undistributeHeight(els); // give all elements their natural height
- // find elements that are below the recommended height (expandable).
- // important to query for heights in a single first pass (to avoid reflow oscillation).
- els.forEach(function (el, i) {
- var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;
- var naturalHeight = el.getBoundingClientRect().height;
- var naturalOffset = naturalHeight + computeVMargins(el);
- if (naturalOffset < minOffset) {
- flexEls.push(el);
- flexOffsets.push(naturalOffset);
- flexHeights.push(naturalHeight);
- }
- else {
- // this element stretches past recommended height (non-expandable). mark the space as occupied.
- usedHeight += naturalOffset;
- }
- });
- // readjust the recommended height to only consider the height available to non-maxed-out rows.
- if (shouldRedistribute) {
- availableHeight -= usedHeight;
- minOffset1 = Math.floor(availableHeight / flexEls.length);
- minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*
- }
- // assign heights to all expandable elements
- flexEls.forEach(function (el, i) {
- var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;
- var naturalOffset = flexOffsets[i];
- var naturalHeight = flexHeights[i];
- var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding
- if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things
- el.style.height = newHeight + 'px';
- }
- });
-}
-// Undoes distrubuteHeight, restoring all els to their natural height
-function undistributeHeight(els) {
- els.forEach(function (el) {
- el.style.height = '';
- });
-}
-// Given `els`, a set of <td> cells, find the cell with the largest natural width and set the widths of all the
-// cells to be that width.
-// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline
-function matchCellWidths(els) {
- var maxInnerWidth = 0;
- els.forEach(function (el) {
- var innerEl = el.firstChild; // hopefully an element
- if (innerEl instanceof HTMLElement) {
- var innerWidth_1 = innerEl.getBoundingClientRect().width;
- if (innerWidth_1 > maxInnerWidth) {
- maxInnerWidth = innerWidth_1;
- }
- }
- });
- maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance
- els.forEach(function (el) {
- el.style.width = maxInnerWidth + 'px';
- });
- return maxInnerWidth;
-}
-// Given one element that resides inside another,
-// Subtracts the height of the inner element from the outer element.
-function subtractInnerElHeight(outerEl, innerEl) {
- // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked
- var reflowStyleProps = {
- position: 'relative',
- left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll
- };
- applyStyle(outerEl, reflowStyleProps);
- applyStyle(innerEl, reflowStyleProps);
- var diff = // grab the dimensions
- outerEl.getBoundingClientRect().height -
- innerEl.getBoundingClientRect().height;
- // undo hack
- var resetStyleProps = { position: '', left: '' };
- applyStyle(outerEl, resetStyleProps);
- applyStyle(innerEl, resetStyleProps);
- return diff;
-}
-/* Selection
-----------------------------------------------------------------------------------------------------------------------*/
-function preventSelection(el) {
- el.classList.add('fc-unselectable');
- el.addEventListener('selectstart', preventDefault);
-}
-function allowSelection(el) {
- el.classList.remove('fc-unselectable');
- el.removeEventListener('selectstart', preventDefault);
-}
-/* Context Menu
-----------------------------------------------------------------------------------------------------------------------*/
-function preventContextMenu(el) {
- el.addEventListener('contextmenu', preventDefault);
-}
-function allowContextMenu(el) {
- el.removeEventListener('contextmenu', preventDefault);
-}
-/* Object Ordering by Field
-----------------------------------------------------------------------------------------------------------------------*/
-function parseFieldSpecs(input) {
- var specs = [];
- var tokens = [];
- var i;
- var token;
- if (typeof input === 'string') {
- tokens = input.split(/\s*,\s*/);
- }
- else if (typeof input === 'function') {
- tokens = [input];
- }
- else if (Array.isArray(input)) {
- tokens = input;
- }
- for (i = 0; i < tokens.length; i++) {
- token = tokens[i];
- if (typeof token === 'string') {
- specs.push(token.charAt(0) === '-' ?
- { field: token.substring(1), order: -1 } :
- { field: token, order: 1 });
- }
- else if (typeof token === 'function') {
- specs.push({ func: token });
- }
- }
- return specs;
-}
-function compareByFieldSpecs(obj0, obj1, fieldSpecs) {
- var i;
- var cmp;
- for (i = 0; i < fieldSpecs.length; i++) {
- cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);
- if (cmp) {
- return cmp;
- }
- }
- return 0;
-}
-function compareByFieldSpec(obj0, obj1, fieldSpec) {
- if (fieldSpec.func) {
- return fieldSpec.func(obj0, obj1);
- }
- return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])
- * (fieldSpec.order || 1);
-}
-function flexibleCompare(a, b) {
- if (!a && !b) {
- return 0;
- }
- if (b == null) {
- return -1;
- }
- if (a == null) {
- return 1;
- }
- if (typeof a === 'string' || typeof b === 'string') {
- return String(a).localeCompare(String(b));
- }
- return a - b;
-}
-/* String Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-function capitaliseFirstLetter(str) {
- return str.charAt(0).toUpperCase() + str.slice(1);
-}
-function padStart(val, len) {
- var s = String(val);
- return '000'.substr(0, len - s.length) + s;
-}
-/* Number Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-function compareNumbers(a, b) {
- return a - b;
-}
-function isInt(n) {
- return n % 1 === 0;
-}
-/* Weird Utilities
-----------------------------------------------------------------------------------------------------------------------*/
-function applyAll(functions, thisObj, args) {
- if (typeof functions === 'function') { // supplied a single function
- functions = [functions];
- }
- if (functions) {
- var i = void 0;
- var ret = void 0;
- for (i = 0; i < functions.length; i++) {
- ret = functions[i].apply(thisObj, args) || ret;
- }
- return ret;
- }
-}
-function firstDefined() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- for (var i = 0; i < args.length; i++) {
- if (args[i] !== undefined) {
- return args[i];
- }
- }
-}
-// Returns a function, that, as long as it continues to be invoked, will not
-// be triggered. The function will be called after it stops being called for
-// N milliseconds. If `immediate` is passed, trigger the function on the
-// leading edge, instead of the trailing.
-// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714
-function debounce(func, wait) {
- var timeout;
- var args;
- var context;
- var timestamp;
- var result;
- var later = function () {
- var last = new Date().valueOf() - timestamp;
- if (last < wait) {
- timeout = setTimeout(later, wait - last);
- }
- else {
- timeout = null;
- result = func.apply(context, args);
- context = args = null;
- }
- };
- return function () {
- context = this;
- args = arguments;
- timestamp = new Date().valueOf();
- if (!timeout) {
- timeout = setTimeout(later, wait);
- }
- return result;
- };
-}
-// Number and Boolean are only types that defaults or not computed for
-// TODO: write more comments
-function refineProps(rawProps, processors, defaults, leftoverProps) {
- if (defaults === void 0) { defaults = {}; }
- var refined = {};
- for (var key in processors) {
- var processor = processors[key];
- if (rawProps[key] !== undefined) {
- // found
- if (processor === Function) {
- refined[key] = typeof rawProps[key] === 'function' ? rawProps[key] : null;
- }
- else if (processor) { // a refining function?
- refined[key] = processor(rawProps[key]);
- }
- else {
- refined[key] = rawProps[key];
- }
- }
- else if (defaults[key] !== undefined) {
- // there's an explicit default
- refined[key] = defaults[key];
- }
- else {
- // must compute a default
- if (processor === String) {
- refined[key] = ''; // empty string is default for String
- }
- else if (!processor || processor === Number || processor === Boolean || processor === Function) {
- refined[key] = null; // assign null for other non-custom processor funcs
- }
- else {
- refined[key] = processor(null); // run the custom processor func
- }
- }
- }
- if (leftoverProps) {
- for (var key in rawProps) {
- if (processors[key] === undefined) {
- leftoverProps[key] = rawProps[key];
- }
- }
- }
- return refined;
-}
-/* Date stuff that doesn't belong in datelib core
-----------------------------------------------------------------------------------------------------------------------*/
-// given a timed range, computes an all-day range that has the same exact duration,
-// but whose start time is aligned with the start of the day.
-function computeAlignedDayRange(timedRange) {
- var dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;
- var start = startOfDay(timedRange.start);
- var end = addDays(start, dayCnt);
- return { start: start, end: end };
-}
-// given a timed range, computes an all-day range based on how for the end date bleeds into the next day
-// TODO: give nextDayThreshold a default arg
-function computeVisibleDayRange(timedRange, nextDayThreshold) {
- if (nextDayThreshold === void 0) { nextDayThreshold = createDuration(0); }
- var startDay = null;
- var endDay = null;
- if (timedRange.end) {
- endDay = startOfDay(timedRange.end);
- var endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`
- // If the end time is actually inclusively part of the next day and is equal to or
- // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.
- // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.
- if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {
- endDay = addDays(endDay, 1);
- }
- }
- if (timedRange.start) {
- startDay = startOfDay(timedRange.start); // the beginning of the day the range starts
- // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.
- if (endDay && endDay <= startDay) {
- endDay = addDays(startDay, 1);
- }
- }
- return { start: startDay, end: endDay };
-}
-// spans from one day into another?
-function isMultiDayRange(range) {
- var visibleRange = computeVisibleDayRange(range);
- return diffDays(visibleRange.start, visibleRange.end) > 1;
-}
-function diffDates(date0, date1, dateEnv, largeUnit) {
- if (largeUnit === 'year') {
- return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');
- }
- else if (largeUnit === 'month') {
- return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');
- }
- else {
- return diffDayAndTime(date0, date1); // returns a duration
- }
-}
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
-};
-
-function parseRecurring(eventInput, allDayDefault, dateEnv, recurringTypes, leftovers) {
- for (var i = 0; i < recurringTypes.length; i++) {
- var localLeftovers = {};
- var parsed = recurringTypes[i].parse(eventInput, localLeftovers, dateEnv);
- if (parsed) {
- var allDay = localLeftovers.allDay;
- delete localLeftovers.allDay; // remove from leftovers
- if (allDay == null) {
- allDay = allDayDefault;
- if (allDay == null) {
- allDay = parsed.allDayGuess;
- if (allDay == null) {
- allDay = false;
- }
- }
- }
- __assign(leftovers, localLeftovers);
- return {
- allDay: allDay,
- duration: parsed.duration,
- typeData: parsed.typeData,
- typeId: i
- };
- }
- }
- return null;
-}
-/*
-Event MUST have a recurringDef
-*/
-function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {
- var typeDef = recurringTypes[eventDef.recurringDef.typeId];
- var markers = typeDef.expand(eventDef.recurringDef.typeData, {
- start: dateEnv.subtract(framingRange.start, duration),
- end: framingRange.end
- }, dateEnv);
- // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to
- if (eventDef.allDay) {
- markers = markers.map(startOfDay);
- }
- return markers;
-}
-
-var hasOwnProperty = Object.prototype.hasOwnProperty;
-// Merges an array of objects into a single object.
-// The second argument allows for an array of property names who's object values will be merged together.
-function mergeProps(propObjs, complexProps) {
- var dest = {};
- var i;
- var name;
- var complexObjs;
- var j;
- var val;
- var props;
- if (complexProps) {
- for (i = 0; i < complexProps.length; i++) {
- name = complexProps[i];
- complexObjs = [];
- // collect the trailing object values, stopping when a non-object is discovered
- for (j = propObjs.length - 1; j >= 0; j--) {
- val = propObjs[j][name];
- if (typeof val === 'object' && val) { // non-null object
- complexObjs.unshift(val);
- }
- else if (val !== undefined) {
- dest[name] = val; // if there were no objects, this value will be used
- break;
- }
- }
- // if the trailing values were objects, use the merged value
- if (complexObjs.length) {
- dest[name] = mergeProps(complexObjs);
- }
- }
- }
- // copy values into the destination, going from last to first
- for (i = propObjs.length - 1; i >= 0; i--) {
- props = propObjs[i];
- for (name in props) {
- if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign
- dest[name] = props[name];
- }
- }
- }
- return dest;
-}
-function filterHash(hash, func) {
- var filtered = {};
- for (var key in hash) {
- if (func(hash[key], key)) {
- filtered[key] = hash[key];
- }
- }
- return filtered;
-}
-function mapHash(hash, func) {
- var newHash = {};
- for (var key in hash) {
- newHash[key] = func(hash[key], key);
- }
- return newHash;
-}
-function arrayToHash(a) {
- var hash = {};
- for (var _i = 0, a_1 = a; _i < a_1.length; _i++) {
- var item = a_1[_i];
- hash[item] = true;
- }
- return hash;
-}
-function hashValuesToArray(obj) {
- var a = [];
- for (var key in obj) {
- a.push(obj[key]);
- }
- return a;
-}
-function isPropsEqual(obj0, obj1) {
- for (var key in obj0) {
- if (hasOwnProperty.call(obj0, key)) {
- if (!(key in obj1)) {
- return false;
- }
- }
- }
- for (var key in obj1) {
- if (hasOwnProperty.call(obj1, key)) {
- if (obj0[key] !== obj1[key]) {
- return false;
- }
- }
- }
- return true;
-}
-
-function parseEvents(rawEvents, sourceId, calendar, allowOpenRange) {
- var eventStore = createEmptyEventStore();
- for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
- var rawEvent = rawEvents_1[_i];
- var tuple = parseEvent(rawEvent, sourceId, calendar, allowOpenRange);
- if (tuple) {
- eventTupleToStore(tuple, eventStore);
- }
- }
- return eventStore;
-}
-function eventTupleToStore(tuple, eventStore) {
- if (eventStore === void 0) { eventStore = createEmptyEventStore(); }
- eventStore.defs[tuple.def.defId] = tuple.def;
- if (tuple.instance) {
- eventStore.instances[tuple.instance.instanceId] = tuple.instance;
- }
- return eventStore;
-}
-function expandRecurring(eventStore, framingRange, calendar) {
- var dateEnv = calendar.dateEnv;
- var defs = eventStore.defs, instances = eventStore.instances;
- // remove existing recurring instances
- instances = filterHash(instances, function (instance) {
- return !defs[instance.defId].recurringDef;
- });
- for (var defId in defs) {
- var def = defs[defId];
- if (def.recurringDef) {
- var duration = def.recurringDef.duration;
- if (!duration) {
- duration = def.allDay ?
- calendar.defaultAllDayEventDuration :
- calendar.defaultTimedEventDuration;
- }
- var starts = expandRecurringRanges(def, duration, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes);
- for (var _i = 0, starts_1 = starts; _i < starts_1.length; _i++) {
- var start = starts_1[_i];
- var instance = createEventInstance(defId, {
- start: start,
- end: dateEnv.add(start, duration)
- });
- instances[instance.instanceId] = instance;
- }
- }
- }
- return { defs: defs, instances: instances };
-}
-// retrieves events that have the same groupId as the instance specified by `instanceId`
-// or they are the same as the instance.
-// why might instanceId not be in the store? an event from another calendar?
-function getRelevantEvents(eventStore, instanceId) {
- var instance = eventStore.instances[instanceId];
- if (instance) {
- var def_1 = eventStore.defs[instance.defId];
- // get events/instances with same group
- var newStore = filterEventStoreDefs(eventStore, function (lookDef) {
- return isEventDefsGrouped(def_1, lookDef);
- });
- // add the original
- // TODO: wish we could use eventTupleToStore or something like it
- newStore.defs[def_1.defId] = def_1;
- newStore.instances[instance.instanceId] = instance;
- return newStore;
- }
- return createEmptyEventStore();
-}
-function isEventDefsGrouped(def0, def1) {
- return Boolean(def0.groupId && def0.groupId === def1.groupId);
-}
-function transformRawEvents(rawEvents, eventSource, calendar) {
- var calEachTransform = calendar.opt('eventDataTransform');
- var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
- if (sourceEachTransform) {
- rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
- }
- if (calEachTransform) {
- rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
- }
- return rawEvents;
-}
-function transformEachRawEvent(rawEvents, func) {
- var refinedEvents;
- if (!func) {
- refinedEvents = rawEvents;
- }
- else {
- refinedEvents = [];
- for (var _i = 0, rawEvents_2 = rawEvents; _i < rawEvents_2.length; _i++) {
- var rawEvent = rawEvents_2[_i];
- var refinedEvent = func(rawEvent);
- if (refinedEvent) {
- refinedEvents.push(refinedEvent);
- }
- else if (refinedEvent == null) {
- refinedEvents.push(rawEvent);
- } // if a different falsy value, do nothing
- }
- }
- return refinedEvents;
-}
-function createEmptyEventStore() {
- return { defs: {}, instances: {} };
-}
-function mergeEventStores(store0, store1) {
- return {
- defs: __assign({}, store0.defs, store1.defs),
- instances: __assign({}, store0.instances, store1.instances)
- };
-}
-function filterEventStoreDefs(eventStore, filterFunc) {
- var defs = filterHash(eventStore.defs, filterFunc);
- var instances = filterHash(eventStore.instances, function (instance) {
- return defs[instance.defId]; // still exists?
- });
- return { defs: defs, instances: instances };
-}
-
-function parseRange(input, dateEnv) {
- var start = null;
- var end = null;
- if (input.start) {
- start = dateEnv.createMarker(input.start);
- }
- if (input.end) {
- end = dateEnv.createMarker(input.end);
- }
- if (!start && !end) {
- return null;
- }
- if (start && end && end < start) {
- return null;
- }
- return { start: start, end: end };
-}
-// SIDE-EFFECT: will mutate ranges.
-// Will return a new array result.
-function invertRanges(ranges, constraintRange) {
- var invertedRanges = [];
- var start = constraintRange.start; // the end of the previous range. the start of the new range
- var i;
- var dateRange;
- // ranges need to be in order. required for our date-walking algorithm
- ranges.sort(compareRanges);
- for (i = 0; i < ranges.length; i++) {
- dateRange = ranges[i];
- // add the span of time before the event (if there is any)
- if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)
- invertedRanges.push({ start: start, end: dateRange.start });
- }
- if (dateRange.end > start) {
- start = dateRange.end;
- }
- }
- // add the span of time after the last event (if there is any)
- if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)
- invertedRanges.push({ start: start, end: constraintRange.end });
- }
- return invertedRanges;
-}
-function compareRanges(range0, range1) {
- return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first
-}
-function intersectRanges(range0, range1) {
- var start = range0.start;
- var end = range0.end;
- var newRange = null;
- if (range1.start !== null) {
- if (start === null) {
- start = range1.start;
- }
- else {
- start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));
- }
- }
- if (range1.end != null) {
- if (end === null) {
- end = range1.end;
- }
- else {
- end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));
- }
- }
- if (start === null || end === null || start < end) {
- newRange = { start: start, end: end };
- }
- return newRange;
-}
-function rangesEqual(range0, range1) {
- return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&
- (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());
-}
-function rangesIntersect(range0, range1) {
- return (range0.end === null || range1.start === null || range0.end > range1.start) &&
- (range0.start === null || range1.end === null || range0.start < range1.end);
-}
-function rangeContainsRange(outerRange, innerRange) {
- return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&
- (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end));
-}
-function rangeContainsMarker(range, date) {
- return (range.start === null || date >= range.start) &&
- (range.end === null || date < range.end);
-}
-// If the given date is not within the given range, move it inside.
-// (If it's past the end, make it one millisecond before the end).
-function constrainMarkerToRange(date, range) {
- if (range.start != null && date < range.start) {
- return range.start;
- }
- if (range.end != null && date >= range.end) {
- return new Date(range.end.valueOf() - 1);
- }
- return date;
-}
-
-function removeExact(array, exactVal) {
- var removeCnt = 0;
- var i = 0;
- while (i < array.length) {
- if (array[i] === exactVal) {
- array.splice(i, 1);
- removeCnt++;
- }
- else {
- i++;
- }
- }
- return removeCnt;
-}
-function isArraysEqual(a0, a1) {
- var len = a0.length;
- var i;
- if (len !== a1.length) { // not array? or not same length?
- return false;
- }
- for (i = 0; i < len; i++) {
- if (a0[i] !== a1[i]) {
- return false;
- }
- }
- return true;
-}
-
-function memoize(workerFunc) {
- var args;
- var res;
- return function () {
- if (!args || !isArraysEqual(args, arguments)) {
- args = arguments;
- res = workerFunc.apply(this, arguments);
- }
- return res;
- };
-}
-/*
-always executes the workerFunc, but if the result is equal to the previous result,
-return the previous result instead.
-*/
-function memoizeOutput(workerFunc, equalityFunc) {
- var cachedRes = null;
- return function () {
- var newRes = workerFunc.apply(this, arguments);
- if (cachedRes === null || !(cachedRes === newRes || equalityFunc(cachedRes, newRes))) {
- cachedRes = newRes;
- }
- return cachedRes;
- };
-}
-
-var EXTENDED_SETTINGS_AND_SEVERITIES = {
- week: 3,
- separator: 0,
- omitZeroMinute: 0,
- meridiem: 0,
- omitCommas: 0
-};
-var STANDARD_DATE_PROP_SEVERITIES = {
- timeZoneName: 7,
- era: 6,
- year: 5,
- month: 4,
- day: 2,
- weekday: 2,
- hour: 1,
- minute: 1,
- second: 1
-};
-var MERIDIEM_RE = /\s*([ap])\.?m\.?/i; // eats up leading spaces too
-var COMMA_RE = /,/g; // we need re for globalness
-var MULTI_SPACE_RE = /\s+/g;
-var LTR_RE = /\u200e/g; // control character
-var UTC_RE = /UTC|GMT/;
-var NativeFormatter = /** @class */ (function () {
- function NativeFormatter(formatSettings) {
- var standardDateProps = {};
- var extendedSettings = {};
- var severity = 0;
- for (var name_1 in formatSettings) {
- if (name_1 in EXTENDED_SETTINGS_AND_SEVERITIES) {
- extendedSettings[name_1] = formatSettings[name_1];
- severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name_1], severity);
- }
- else {
- standardDateProps[name_1] = formatSettings[name_1];
- if (name_1 in STANDARD_DATE_PROP_SEVERITIES) {
- severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name_1], severity);
- }
- }
- }
- this.standardDateProps = standardDateProps;
- this.extendedSettings = extendedSettings;
- this.severity = severity;
- this.buildFormattingFunc = memoize(buildFormattingFunc);
- }
- NativeFormatter.prototype.format = function (date, context) {
- return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);
- };
- NativeFormatter.prototype.formatRange = function (start, end, context) {
- var _a = this, standardDateProps = _a.standardDateProps, extendedSettings = _a.extendedSettings;
- var diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);
- if (!diffSeverity) {
- return this.format(start, context);
- }
- var biggestUnitForPartial = diffSeverity;
- if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time
- (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&
- (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&
- (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {
- biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time
- }
- var full0 = this.format(start, context);
- var full1 = this.format(end, context);
- if (full0 === full1) {
- return full0;
- }
- var partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);
- var partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);
- var partial0 = partialFormattingFunc(start);
- var partial1 = partialFormattingFunc(end);
- var insertion = findCommonInsertion(full0, partial0, full1, partial1);
- var separator = extendedSettings.separator || '';
- if (insertion) {
- return insertion.before + partial0 + separator + partial1 + insertion.after;
- }
- return full0 + separator + full1;
- };
- NativeFormatter.prototype.getLargestUnit = function () {
- switch (this.severity) {
- case 7:
- case 6:
- case 5:
- return 'year';
- case 4:
- return 'month';
- case 3:
- return 'week';
- default:
- return 'day';
- }
- };
- return NativeFormatter;
-}());
-function buildFormattingFunc(standardDateProps, extendedSettings, context) {
- var standardDatePropCnt = Object.keys(standardDateProps).length;
- if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {
- return function (date) {
- return formatTimeZoneOffset(date.timeZoneOffset);
- };
- }
- if (standardDatePropCnt === 0 && extendedSettings.week) {
- return function (date) {
- return formatWeekNumber(context.computeWeekNumber(date.marker), context.weekLabel, context.locale, extendedSettings.week);
- };
- }
- return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);
-}
-function buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {
- standardDateProps = __assign({}, standardDateProps); // copy
- extendedSettings = __assign({}, extendedSettings); // copy
- sanitizeSettings(standardDateProps, extendedSettings);
- standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers
- var normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);
- var zeroFormat; // needed?
- if (extendedSettings.omitZeroMinute) {
- var zeroProps = __assign({}, standardDateProps);
- delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings
- zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);
- }
- return function (date) {
- var marker = date.marker;
- var format;
- if (zeroFormat && !marker.getUTCMinutes()) {
- format = zeroFormat;
- }
- else {
- format = normalFormat;
- }
- var s = format.format(marker);
- return postProcess(s, date, standardDateProps, extendedSettings, context);
- };
-}
-function sanitizeSettings(standardDateProps, extendedSettings) {
- // deal with a browser inconsistency where formatting the timezone
- // requires that the hour/minute be present.
- if (standardDateProps.timeZoneName) {
- if (!standardDateProps.hour) {
- standardDateProps.hour = '2-digit';
- }
- if (!standardDateProps.minute) {
- standardDateProps.minute = '2-digit';
- }
- }
- // only support short timezone names
- if (standardDateProps.timeZoneName === 'long') {
- standardDateProps.timeZoneName = 'short';
- }
- // if requesting to display seconds, MUST display minutes
- if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {
- delete extendedSettings.omitZeroMinute;
- }
-}
-function postProcess(s, date, standardDateProps, extendedSettings, context) {
- s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes
- if (standardDateProps.timeZoneName === 'short') {
- s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?
- 'UTC' : // important to normalize for IE, which does "GMT"
- formatTimeZoneOffset(date.timeZoneOffset));
- }
- if (extendedSettings.omitCommas) {
- s = s.replace(COMMA_RE, '').trim();
- }
- if (extendedSettings.omitZeroMinute) {
- s = s.replace(':00', ''); // zeroFormat doesn't always achieve this
- }
- // ^ do anything that might create adjacent spaces before this point,
- // because MERIDIEM_RE likes to eat up loading spaces
- if (extendedSettings.meridiem === false) {
- s = s.replace(MERIDIEM_RE, '').trim();
- }
- else if (extendedSettings.meridiem === 'narrow') { // a/p
- s = s.replace(MERIDIEM_RE, function (m0, m1) {
- return m1.toLocaleLowerCase();
- });
- }
- else if (extendedSettings.meridiem === 'short') { // am/pm
- s = s.replace(MERIDIEM_RE, function (m0, m1) {
- return m1.toLocaleLowerCase() + 'm';
- });
- }
- else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase
- s = s.replace(MERIDIEM_RE, function (m0) {
- return m0.toLocaleLowerCase();
- });
- }
- s = s.replace(MULTI_SPACE_RE, ' ');
- s = s.trim();
- return s;
-}
-function injectTzoStr(s, tzoStr) {
- var replaced = false;
- s = s.replace(UTC_RE, function () {
- replaced = true;
- return tzoStr;
- });
- // IE11 doesn't include UTC/GMT in the original string, so append to end
- if (!replaced) {
- s += ' ' + tzoStr;
- }
- return s;
-}
-function formatWeekNumber(num, weekLabel, locale, display) {
- var parts = [];
- if (display === 'narrow') {
- parts.push(weekLabel);
- }
- else if (display === 'short') {
- parts.push(weekLabel, ' ');
- }
- // otherwise, considered 'numeric'
- parts.push(locale.simpleNumberFormat.format(num));
- if (locale.options.isRtl) { // TODO: use control characters instead?
- parts.reverse();
- }
- return parts.join('');
-}
-// Range Formatting Utils
-// 0 = exactly the same
-// 1 = different by time
-// and bigger
-function computeMarkerDiffSeverity(d0, d1, ca) {
- if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {
- return 5;
- }
- if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {
- return 4;
- }
- if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {
- return 2;
- }
- if (timeAsMs(d0) !== timeAsMs(d1)) {
- return 1;
- }
- return 0;
-}
-function computePartialFormattingOptions(options, biggestUnit) {
- var partialOptions = {};
- for (var name_2 in options) {
- if (!(name_2 in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)
- STANDARD_DATE_PROP_SEVERITIES[name_2] <= biggestUnit) {
- partialOptions[name_2] = options[name_2];
- }
- }
- return partialOptions;
-}
-function findCommonInsertion(full0, partial0, full1, partial1) {
- var i0 = 0;
- while (i0 < full0.length) {
- var found0 = full0.indexOf(partial0, i0);
- if (found0 === -1) {
- break;
- }
- var before0 = full0.substr(0, found0);
- i0 = found0 + partial0.length;
- var after0 = full0.substr(i0);
- var i1 = 0;
- while (i1 < full1.length) {
- var found1 = full1.indexOf(partial1, i1);
- if (found1 === -1) {
- break;
- }
- var before1 = full1.substr(0, found1);
- i1 = found1 + partial1.length;
- var after1 = full1.substr(i1);
- if (before0 === before1 && after0 === after1) {
- return {
- before: before0,
- after: after0
- };
- }
- }
- }
- return null;
-}
-
-/*
-TODO: fix the terminology of "formatter" vs "formatting func"
-*/
-/*
-At the time of instantiation, this object does not know which cmd-formatting system it will use.
-It receives this at the time of formatting, as a setting.
-*/
-var CmdFormatter = /** @class */ (function () {
- function CmdFormatter(cmdStr, separator) {
- this.cmdStr = cmdStr;
- this.separator = separator;
- }
- CmdFormatter.prototype.format = function (date, context) {
- return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, this.separator));
- };
- CmdFormatter.prototype.formatRange = function (start, end, context) {
- return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, this.separator));
- };
- return CmdFormatter;
-}());
-
-var FuncFormatter = /** @class */ (function () {
- function FuncFormatter(func) {
- this.func = func;
- }
- FuncFormatter.prototype.format = function (date, context) {
- return this.func(createVerboseFormattingArg(date, null, context));
- };
- FuncFormatter.prototype.formatRange = function (start, end, context) {
- return this.func(createVerboseFormattingArg(start, end, context));
- };
- return FuncFormatter;
-}());
-
-// Formatter Object Creation
-function createFormatter(input, defaultSeparator) {
- if (typeof input === 'object' && input) { // non-null object
- if (typeof defaultSeparator === 'string') {
- input = __assign({ separator: defaultSeparator }, input);
- }
- return new NativeFormatter(input);
- }
- else if (typeof input === 'string') {
- return new CmdFormatter(input, defaultSeparator);
- }
- else if (typeof input === 'function') {
- return new FuncFormatter(input);
- }
-}
-// String Utils
-// timeZoneOffset is in minutes
-function buildIsoString(marker, timeZoneOffset, stripZeroTime) {
- if (stripZeroTime === void 0) { stripZeroTime = false; }
- var s = marker.toISOString();
- s = s.replace('.000', '');
- if (stripZeroTime) {
- s = s.replace('T00:00:00Z', '');
- }
- if (s.length > 10) { // time part wasn't stripped, can add timezone info
- if (timeZoneOffset == null) {
- s = s.replace('Z', '');
- }
- else if (timeZoneOffset !== 0) {
- s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));
- }
- // otherwise, its UTC-0 and we want to keep the Z
- }
- return s;
-}
-function formatIsoTimeString(marker) {
- return padStart(marker.getUTCHours(), 2) + ':' +
- padStart(marker.getUTCMinutes(), 2) + ':' +
- padStart(marker.getUTCSeconds(), 2);
-}
-function formatTimeZoneOffset(minutes, doIso) {
- if (doIso === void 0) { doIso = false; }
- var sign = minutes < 0 ? '-' : '+';
- var abs = Math.abs(minutes);
- var hours = Math.floor(abs / 60);
- var mins = Math.round(abs % 60);
- if (doIso) {
- return sign + padStart(hours, 2) + ':' + padStart(mins, 2);
- }
- else {
- return 'GMT' + sign + hours + (mins ? ':' + padStart(mins, 2) : '');
- }
-}
-// Arg Utils
-function createVerboseFormattingArg(start, end, context, separator) {
- var startInfo = expandZonedMarker(start, context.calendarSystem);
- var endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;
- return {
- date: startInfo,
- start: startInfo,
- end: endInfo,
- timeZone: context.timeZone,
- localeCodes: context.locale.codes,
- separator: separator
- };
-}
-function expandZonedMarker(dateInfo, calendarSystem) {
- var a = calendarSystem.markerToArray(dateInfo.marker);
- return {
- marker: dateInfo.marker,
- timeZoneOffset: dateInfo.timeZoneOffset,
- array: a,
- year: a[0],
- month: a[1],
- day: a[2],
- hour: a[3],
- minute: a[4],
- second: a[5],
- millisecond: a[6]
- };
-}
-
-var EventSourceApi = /** @class */ (function () {
- function EventSourceApi(calendar, internalEventSource) {
- this.calendar = calendar;
- this.internalEventSource = internalEventSource;
- }
- EventSourceApi.prototype.remove = function () {
- this.calendar.dispatch({
- type: 'REMOVE_EVENT_SOURCE',
- sourceId: this.internalEventSource.sourceId
- });
- };
- EventSourceApi.prototype.refetch = function () {
- this.calendar.dispatch({
- type: 'FETCH_EVENT_SOURCES',
- sourceIds: [this.internalEventSource.sourceId]
- });
- };
- Object.defineProperty(EventSourceApi.prototype, "id", {
- get: function () {
- return this.internalEventSource.publicId;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventSourceApi.prototype, "url", {
- // only relevant to json-feed event sources
- get: function () {
- return this.internalEventSource.meta.url;
- },
- enumerable: true,
- configurable: true
- });
- return EventSourceApi;
-}());
-
-var EventApi = /** @class */ (function () {
- function EventApi(calendar, def, instance) {
- this._calendar = calendar;
- this._def = def;
- this._instance = instance || null;
- }
- /*
- TODO: make event struct more responsible for this
- */
- EventApi.prototype.setProp = function (name, val) {
- var _a, _b;
- if (name in DATE_PROPS) ;
- else if (name in NON_DATE_PROPS) {
- if (typeof NON_DATE_PROPS[name] === 'function') {
- val = NON_DATE_PROPS[name](val);
- }
- this.mutate({
- standardProps: (_a = {}, _a[name] = val, _a)
- });
- }
- else if (name in UNSCOPED_EVENT_UI_PROPS) {
- var ui = void 0;
- if (typeof UNSCOPED_EVENT_UI_PROPS[name] === 'function') {
- val = UNSCOPED_EVENT_UI_PROPS[name](val);
- }
- if (name === 'color') {
- ui = { backgroundColor: val, borderColor: val };
- }
- else if (name === 'editable') {
- ui = { startEditable: val, durationEditable: val };
- }
- else {
- ui = (_b = {}, _b[name] = val, _b);
- }
- this.mutate({
- standardProps: { ui: ui }
- });
- }
- };
- EventApi.prototype.setExtendedProp = function (name, val) {
- var _a;
- this.mutate({
- extendedProps: (_a = {}, _a[name] = val, _a)
- });
- };
- EventApi.prototype.setStart = function (startInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = this._calendar.dateEnv;
- var start = dateEnv.createMarker(startInput);
- if (start && this._instance) { // TODO: warning if parsed bad
- var instanceRange = this._instance.range;
- var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?
- if (options.maintainDuration) {
- this.mutate({ datesDelta: startDelta });
- }
- else {
- this.mutate({ startDelta: startDelta });
- }
- }
- };
- EventApi.prototype.setEnd = function (endInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = this._calendar.dateEnv;
- var end;
- if (endInput != null) {
- end = dateEnv.createMarker(endInput);
- if (!end) {
- return; // TODO: warning if parsed bad
- }
- }
- if (this._instance) {
- if (end) {
- var endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);
- this.mutate({ endDelta: endDelta });
- }
- else {
- this.mutate({ standardProps: { hasEnd: false } });
- }
- }
- };
- EventApi.prototype.setDates = function (startInput, endInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = this._calendar.dateEnv;
- var standardProps = { allDay: options.allDay };
- var start = dateEnv.createMarker(startInput);
- var end;
- if (!start) {
- return; // TODO: warning if parsed bad
- }
- if (endInput != null) {
- end = dateEnv.createMarker(endInput);
- if (!end) { // TODO: warning if parsed bad
- return;
- }
- }
- if (this._instance) {
- var instanceRange = this._instance.range;
- // when computing the diff for an event being converted to all-day,
- // compute diff off of the all-day values the way event-mutation does.
- if (options.allDay === true) {
- instanceRange = computeAlignedDayRange(instanceRange);
- }
- var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);
- if (end) {
- var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);
- if (durationsEqual(startDelta, endDelta)) {
- this.mutate({ datesDelta: startDelta, standardProps: standardProps });
- }
- else {
- this.mutate({ startDelta: startDelta, endDelta: endDelta, standardProps: standardProps });
- }
- }
- else { // means "clear the end"
- standardProps.hasEnd = false;
- this.mutate({ datesDelta: startDelta, standardProps: standardProps });
- }
- }
- };
- EventApi.prototype.moveStart = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // TODO: warning if parsed bad
- this.mutate({ startDelta: delta });
- }
- };
- EventApi.prototype.moveEnd = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // TODO: warning if parsed bad
- this.mutate({ endDelta: delta });
- }
- };
- EventApi.prototype.moveDates = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // TODO: warning if parsed bad
- this.mutate({ datesDelta: delta });
- }
- };
- EventApi.prototype.setAllDay = function (allDay, options) {
- if (options === void 0) { options = {}; }
- var standardProps = { allDay: allDay };
- var maintainDuration = options.maintainDuration;
- if (maintainDuration == null) {
- maintainDuration = this._calendar.opt('allDayMaintainDuration');
- }
- if (this._def.allDay !== allDay) {
- standardProps.hasEnd = maintainDuration;
- }
- this.mutate({ standardProps: standardProps });
- };
- EventApi.prototype.formatRange = function (formatInput) {
- var dateEnv = this._calendar.dateEnv;
- var instance = this._instance;
- var formatter = createFormatter(formatInput, this._calendar.opt('defaultRangeSeparator'));
- if (this._def.hasEnd) {
- return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {
- forcedStartTzo: instance.forcedStartTzo,
- forcedEndTzo: instance.forcedEndTzo
- });
- }
- else {
- return dateEnv.format(instance.range.start, formatter, {
- forcedTzo: instance.forcedStartTzo
- });
- }
- };
- EventApi.prototype.mutate = function (mutation) {
- var def = this._def;
- var instance = this._instance;
- if (instance) {
- this._calendar.dispatch({
- type: 'MUTATE_EVENTS',
- instanceId: instance.instanceId,
- mutation: mutation,
- fromApi: true
- });
- var eventStore = this._calendar.state.eventStore;
- this._def = eventStore.defs[def.defId];
- this._instance = eventStore.instances[instance.instanceId];
- }
- };
- EventApi.prototype.remove = function () {
- this._calendar.dispatch({
- type: 'REMOVE_EVENT_DEF',
- defId: this._def.defId
- });
- };
- Object.defineProperty(EventApi.prototype, "source", {
- get: function () {
- var sourceId = this._def.sourceId;
- if (sourceId) {
- return new EventSourceApi(this._calendar, this._calendar.state.eventSources[sourceId]);
- }
- return null;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "start", {
- get: function () {
- return this._instance ?
- this._calendar.dateEnv.toDate(this._instance.range.start) :
- null;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "end", {
- get: function () {
- return (this._instance && this._def.hasEnd) ?
- this._calendar.dateEnv.toDate(this._instance.range.end) :
- null;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "id", {
- // computable props that all access the def
- // TODO: find a TypeScript-compatible way to do this at scale
- get: function () { return this._def.publicId; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "groupId", {
- get: function () { return this._def.groupId; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "allDay", {
- get: function () { return this._def.allDay; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "title", {
- get: function () { return this._def.title; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "url", {
- get: function () { return this._def.url; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "rendering", {
- get: function () { return this._def.rendering; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "startEditable", {
- get: function () { return this._def.ui.startEditable; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "durationEditable", {
- get: function () { return this._def.ui.durationEditable; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "constraint", {
- get: function () { return this._def.ui.constraints[0] || null; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "overlap", {
- get: function () { return this._def.ui.overlap; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "allow", {
- get: function () { return this._def.ui.allows[0] || null; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "backgroundColor", {
- get: function () { return this._def.ui.backgroundColor; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "borderColor", {
- get: function () { return this._def.ui.borderColor; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "textColor", {
- get: function () { return this._def.ui.textColor; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "classNames", {
- // NOTE: user can't modify these because Object.freeze was called in event-def parsing
- get: function () { return this._def.ui.classNames; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "extendedProps", {
- get: function () { return this._def.extendedProps; },
- enumerable: true,
- configurable: true
- });
- return EventApi;
-}());
-
-/*
-Specifying nextDayThreshold signals that all-day ranges should be sliced.
-*/
-function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {
- var inverseBgByGroupId = {};
- var inverseBgByDefId = {};
- var defByGroupId = {};
- var bgRanges = [];
- var fgRanges = [];
- var eventUis = compileEventUis(eventStore.defs, eventUiBases);
- for (var defId in eventStore.defs) {
- var def = eventStore.defs[defId];
- if (def.rendering === 'inverse-background') {
- if (def.groupId) {
- inverseBgByGroupId[def.groupId] = [];
- if (!defByGroupId[def.groupId]) {
- defByGroupId[def.groupId] = def;
- }
- }
- else {
- inverseBgByDefId[defId] = [];
- }
- }
- }
- for (var instanceId in eventStore.instances) {
- var instance = eventStore.instances[instanceId];
- var def = eventStore.defs[instance.defId];
- var ui = eventUis[def.defId];
- var origRange = instance.range;
- var normalRange = (!def.allDay && nextDayThreshold) ?
- computeVisibleDayRange(origRange, nextDayThreshold) :
- origRange;
- var slicedRange = intersectRanges(normalRange, framingRange);
- if (slicedRange) {
- if (def.rendering === 'inverse-background') {
- if (def.groupId) {
- inverseBgByGroupId[def.groupId].push(slicedRange);
- }
- else {
- inverseBgByDefId[instance.defId].push(slicedRange);
- }
- }
- else {
- (def.rendering === 'background' ? bgRanges : fgRanges).push({
- def: def,
- ui: ui,
- instance: instance,
- range: slicedRange,
- isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),
- isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf()
- });
- }
- }
- }
- for (var groupId in inverseBgByGroupId) { // BY GROUP
- var ranges = inverseBgByGroupId[groupId];
- var invertedRanges = invertRanges(ranges, framingRange);
- for (var _i = 0, invertedRanges_1 = invertedRanges; _i < invertedRanges_1.length; _i++) {
- var invertedRange = invertedRanges_1[_i];
- var def = defByGroupId[groupId];
- var ui = eventUis[def.defId];
- bgRanges.push({
- def: def,
- ui: ui,
- instance: null,
- range: invertedRange,
- isStart: false,
- isEnd: false
- });
- }
- }
- for (var defId in inverseBgByDefId) {
- var ranges = inverseBgByDefId[defId];
- var invertedRanges = invertRanges(ranges, framingRange);
- for (var _a = 0, invertedRanges_2 = invertedRanges; _a < invertedRanges_2.length; _a++) {
- var invertedRange = invertedRanges_2[_a];
- bgRanges.push({
- def: eventStore.defs[defId],
- ui: eventUis[defId],
- instance: null,
- range: invertedRange,
- isStart: false,
- isEnd: false
- });
- }
- }
- return { bg: bgRanges, fg: fgRanges };
-}
-function hasBgRendering(def) {
- return def.rendering === 'background' || def.rendering === 'inverse-background';
-}
-function filterSegsViaEls(context, segs, isMirror) {
- var calendar = context.calendar, view = context.view;
- if (calendar.hasPublicHandlers('eventRender')) {
- segs = segs.filter(function (seg) {
- var custom = calendar.publiclyTrigger('eventRender', [
- {
- event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
- isMirror: isMirror,
- isStart: seg.isStart,
- isEnd: seg.isEnd,
- // TODO: include seg.range once all components consistently generate it
- el: seg.el,
- view: view
- }
- ]);
- if (custom === false) { // means don't render at all
- return false;
- }
- else if (custom && custom !== true) {
- seg.el = custom;
- }
- return true;
- });
- }
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- setElSeg(seg.el, seg);
- }
- return segs;
-}
-function setElSeg(el, seg) {
- el.fcSeg = seg;
-}
-function getElSeg(el) {
- return el.fcSeg || null;
-}
-// event ui computation
-function compileEventUis(eventDefs, eventUiBases) {
- return mapHash(eventDefs, function (eventDef) {
- return compileEventUi(eventDef, eventUiBases);
- });
-}
-function compileEventUi(eventDef, eventUiBases) {
- var uis = [];
- if (eventUiBases['']) {
- uis.push(eventUiBases['']);
- }
- if (eventUiBases[eventDef.defId]) {
- uis.push(eventUiBases[eventDef.defId]);
- }
- uis.push(eventDef.ui);
- return combineEventUis(uis);
-}
-// triggers
-function triggerRenderedSegs(context, segs, isMirrors) {
- var calendar = context.calendar, view = context.view;
- if (calendar.hasPublicHandlers('eventPositioned')) {
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- calendar.publiclyTriggerAfterSizing('eventPositioned', [
- {
- event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
- isMirror: isMirrors,
- isStart: seg.isStart,
- isEnd: seg.isEnd,
- el: seg.el,
- view: view
- }
- ]);
- }
- }
- if (!calendar.state.eventSourceLoadingLevel) { // avoid initial empty state while pending
- calendar.afterSizingTriggers._eventsPositioned = [null]; // fire once
- }
-}
-function triggerWillRemoveSegs(context, segs, isMirrors) {
- var calendar = context.calendar, view = context.view;
- for (var _i = 0, segs_3 = segs; _i < segs_3.length; _i++) {
- var seg = segs_3[_i];
- calendar.trigger('eventElRemove', seg.el);
- }
- if (calendar.hasPublicHandlers('eventDestroy')) {
- for (var _a = 0, segs_4 = segs; _a < segs_4.length; _a++) {
- var seg = segs_4[_a];
- calendar.publiclyTrigger('eventDestroy', [
- {
- event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
- isMirror: isMirrors,
- el: seg.el,
- view: view
- }
- ]);
- }
- }
-}
-// is-interactable
-function computeEventDraggable(context, eventDef, eventUi) {
- var calendar = context.calendar, view = context.view;
- var transformers = calendar.pluginSystem.hooks.isDraggableTransformers;
- var val = eventUi.startEditable;
- for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
- var transformer = transformers_1[_i];
- val = transformer(val, eventDef, eventUi, view);
- }
- return val;
-}
-function computeEventStartResizable(context, eventDef, eventUi) {
- return eventUi.durationEditable && context.options.eventResizableFromStart;
-}
-function computeEventEndResizable(context, eventDef, eventUi) {
- return eventUi.durationEditable;
-}
-
-// applies the mutation to ALL defs/instances within the event store
-function applyMutationToEventStore(eventStore, eventConfigBase, mutation, calendar) {
- var eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);
- var dest = createEmptyEventStore();
- for (var defId in eventStore.defs) {
- var def = eventStore.defs[defId];
- dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, calendar.pluginSystem.hooks.eventDefMutationAppliers, calendar);
- }
- for (var instanceId in eventStore.instances) {
- var instance = eventStore.instances[instanceId];
- var def = dest.defs[instance.defId]; // important to grab the newly modified def
- dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, calendar);
- }
- return dest;
-}
-function applyMutationToEventDef(eventDef, eventConfig, mutation, appliers, calendar) {
- var standardProps = mutation.standardProps || {};
- // if hasEnd has not been specified, guess a good value based on deltas.
- // if duration will change, there's no way the default duration will persist,
- // and thus, we need to mark the event as having a real end
- if (standardProps.hasEnd == null &&
- eventConfig.durationEditable &&
- (mutation.startDelta || mutation.endDelta)) {
- standardProps.hasEnd = true; // TODO: is this mutation okay?
- }
- var copy = __assign({}, eventDef, standardProps, { ui: __assign({}, eventDef.ui, standardProps.ui) });
- if (mutation.extendedProps) {
- copy.extendedProps = __assign({}, copy.extendedProps, mutation.extendedProps);
- }
- for (var _i = 0, appliers_1 = appliers; _i < appliers_1.length; _i++) {
- var applier = appliers_1[_i];
- applier(copy, mutation, calendar);
- }
- if (!copy.hasEnd && calendar.opt('forceEventDuration')) {
- copy.hasEnd = true;
- }
- return copy;
-}
-function applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef
-eventConfig, mutation, calendar) {
- var dateEnv = calendar.dateEnv;
- var forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;
- var clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;
- var copy = __assign({}, eventInstance);
- if (forceAllDay) {
- copy.range = computeAlignedDayRange(copy.range);
- }
- if (mutation.datesDelta && eventConfig.startEditable) {
- copy.range = {
- start: dateEnv.add(copy.range.start, mutation.datesDelta),
- end: dateEnv.add(copy.range.end, mutation.datesDelta)
- };
- }
- if (mutation.startDelta && eventConfig.durationEditable) {
- copy.range = {
- start: dateEnv.add(copy.range.start, mutation.startDelta),
- end: copy.range.end
- };
- }
- if (mutation.endDelta && eventConfig.durationEditable) {
- copy.range = {
- start: copy.range.start,
- end: dateEnv.add(copy.range.end, mutation.endDelta)
- };
- }
- if (clearEnd) {
- copy.range = {
- start: copy.range.start,
- end: calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start)
- };
- }
- // in case event was all-day but the supplied deltas were not
- // better util for this?
- if (eventDef.allDay) {
- copy.range = {
- start: startOfDay(copy.range.start),
- end: startOfDay(copy.range.end)
- };
- }
- // handle invalid durations
- if (copy.range.end < copy.range.start) {
- copy.range.end = calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start);
- }
- return copy;
-}
-
-function reduceEventStore (eventStore, action, eventSources, dateProfile, calendar) {
- switch (action.type) {
- case 'RECEIVE_EVENTS': // raw
- return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, calendar);
- case 'ADD_EVENTS': // already parsed, but not expanded
- return addEvent(eventStore, action.eventStore, // new ones
- dateProfile ? dateProfile.activeRange : null, calendar);
- case 'MERGE_EVENTS': // already parsed and expanded
- return mergeEventStores(eventStore, action.eventStore);
- case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
- case 'NEXT':
- case 'SET_DATE':
- case 'SET_VIEW_TYPE':
- if (dateProfile) {
- return expandRecurring(eventStore, dateProfile.activeRange, calendar);
- }
- else {
- return eventStore;
- }
- case 'CHANGE_TIMEZONE':
- return rezoneDates(eventStore, action.oldDateEnv, calendar.dateEnv);
- case 'MUTATE_EVENTS':
- return applyMutationToRelated(eventStore, action.instanceId, action.mutation, action.fromApi, calendar);
- case 'REMOVE_EVENT_INSTANCES':
- return excludeInstances(eventStore, action.instances);
- case 'REMOVE_EVENT_DEF':
- return filterEventStoreDefs(eventStore, function (eventDef) {
- return eventDef.defId !== action.defId;
- });
- case 'REMOVE_EVENT_SOURCE':
- return excludeEventsBySourceId(eventStore, action.sourceId);
- case 'REMOVE_ALL_EVENT_SOURCES':
- return filterEventStoreDefs(eventStore, function (eventDef) {
- return !eventDef.sourceId; // only keep events with no source id
- });
- case 'REMOVE_ALL_EVENTS':
- return createEmptyEventStore();
- case 'RESET_EVENTS':
- return {
- defs: eventStore.defs,
- instances: eventStore.instances
- };
- default:
- return eventStore;
- }
-}
-function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, calendar) {
- if (eventSource && // not already removed
- fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
- ) {
- var subset = parseEvents(transformRawEvents(rawEvents, eventSource, calendar), eventSource.sourceId, calendar);
- if (fetchRange) {
- subset = expandRecurring(subset, fetchRange, calendar);
- }
- return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
- }
- return eventStore;
-}
-function addEvent(eventStore, subset, expandRange, calendar) {
- if (expandRange) {
- subset = expandRecurring(subset, expandRange, calendar);
- }
- return mergeEventStores(eventStore, subset);
-}
-function rezoneDates(eventStore, oldDateEnv, newDateEnv) {
- var defs = eventStore.defs;
- var instances = mapHash(eventStore.instances, function (instance) {
- var def = defs[instance.defId];
- if (def.allDay || def.recurringDef) {
- return instance; // isn't dependent on timezone
- }
- else {
- return __assign({}, instance, { range: {
- start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
- end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo))
- }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
- }
- });
- return { defs: defs, instances: instances };
-}
-function applyMutationToRelated(eventStore, instanceId, mutation, fromApi, calendar) {
- var relevant = getRelevantEvents(eventStore, instanceId);
- var eventConfigBase = fromApi ?
- { '': {
- startEditable: true,
- durationEditable: true,
- constraints: [],
- overlap: null,
- allows: [],
- backgroundColor: '',
- borderColor: '',
- textColor: '',
- classNames: []
- } } :
- calendar.eventUiBases;
- relevant = applyMutationToEventStore(relevant, eventConfigBase, mutation, calendar);
- return mergeEventStores(eventStore, relevant);
-}
-function excludeEventsBySourceId(eventStore, sourceId) {
- return filterEventStoreDefs(eventStore, function (eventDef) {
- return eventDef.sourceId !== sourceId;
- });
-}
-// QUESTION: why not just return instances? do a general object-property-exclusion util
-function excludeInstances(eventStore, removals) {
- return {
- defs: eventStore.defs,
- instances: filterHash(eventStore.instances, function (instance) {
- return !removals[instance.instanceId];
- })
- };
-}
-
-// high-level segmenting-aware tester functions
-// ------------------------------------------------------------------------------------------------------------------------
-function isInteractionValid(interaction, calendar) {
- return isNewPropsValid({ eventDrag: interaction }, calendar); // HACK: the eventDrag props is used for ALL interactions
-}
-function isDateSelectionValid(dateSelection, calendar) {
- return isNewPropsValid({ dateSelection: dateSelection }, calendar);
-}
-function isNewPropsValid(newProps, calendar) {
- var view = calendar.view;
- var props = __assign({ businessHours: view ? view.props.businessHours : createEmptyEventStore(), dateSelection: '', eventStore: calendar.state.eventStore, eventUiBases: calendar.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);
- return (calendar.pluginSystem.hooks.isPropsValid || isPropsValid)(props, calendar);
-}
-function isPropsValid(state, calendar, dateSpanMeta, filterConfig) {
- if (dateSpanMeta === void 0) { dateSpanMeta = {}; }
- if (state.eventDrag && !isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {
- return false;
- }
- if (state.dateSelection && !isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {
- return false;
- }
- return true;
-}
-// Moving Event Validation
-// ------------------------------------------------------------------------------------------------------------------------
-function isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig) {
- var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions
- var subjectEventStore = interaction.mutatedEvents;
- var subjectDefs = subjectEventStore.defs;
- var subjectInstances = subjectEventStore.instances;
- var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?
- state.eventUiBases :
- { '': calendar.selectionConfig } // if not a real event, validate as a selection
- );
- if (filterConfig) {
- subjectConfigs = mapHash(subjectConfigs, filterConfig);
- }
- var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances); // exclude the subject events. TODO: exclude defs too?
- var otherDefs = otherEventStore.defs;
- var otherInstances = otherEventStore.instances;
- var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);
- for (var subjectInstanceId in subjectInstances) {
- var subjectInstance = subjectInstances[subjectInstanceId];
- var subjectRange = subjectInstance.range;
- var subjectConfig = subjectConfigs[subjectInstance.defId];
- var subjectDef = subjectDefs[subjectInstance.defId];
- // constraint
- if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, calendar)) {
- return false;
- }
- // overlap
- var overlapFunc = calendar.opt('eventOverlap');
- if (typeof overlapFunc !== 'function') {
- overlapFunc = null;
- }
- for (var otherInstanceId in otherInstances) {
- var otherInstance = otherInstances[otherInstanceId];
- // intersect! evaluate
- if (rangesIntersect(subjectRange, otherInstance.range)) {
- var otherOverlap = otherConfigs[otherInstance.defId].overlap;
- // consider the other event's overlap. only do this if the subject event is a "real" event
- if (otherOverlap === false && interaction.isEvent) {
- return false;
- }
- if (subjectConfig.overlap === false) {
- return false;
- }
- if (overlapFunc && !overlapFunc(new EventApi(calendar, otherDefs[otherInstance.defId], otherInstance), // still event
- new EventApi(calendar, subjectDef, subjectInstance) // moving event
- )) {
- return false;
- }
- }
- }
- // allow (a function)
- var calendarEventStore = calendar.state.eventStore; // need global-to-calendar, not local to component (splittable)state
- for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {
- var subjectAllow = _a[_i];
- var subjectDateSpan = __assign({}, dateSpanMeta, { range: subjectInstance.range, allDay: subjectDef.allDay });
- var origDef = calendarEventStore.defs[subjectDef.defId];
- var origInstance = calendarEventStore.instances[subjectInstanceId];
- var eventApi = void 0;
- if (origDef) { // was previously in the calendar
- eventApi = new EventApi(calendar, origDef, origInstance);
- }
- else { // was an external event
- eventApi = new EventApi(calendar, subjectDef); // no instance, because had no dates
- }
- if (!subjectAllow(calendar.buildDateSpanApi(subjectDateSpan), eventApi)) {
- return false;
- }
- }
- }
- return true;
-}
-// Date Selection Validation
-// ------------------------------------------------------------------------------------------------------------------------
-function isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig) {
- var relevantEventStore = state.eventStore;
- var relevantDefs = relevantEventStore.defs;
- var relevantInstances = relevantEventStore.instances;
- var selection = state.dateSelection;
- var selectionRange = selection.range;
- var selectionConfig = calendar.selectionConfig;
- if (filterConfig) {
- selectionConfig = filterConfig(selectionConfig);
- }
- // constraint
- if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, calendar)) {
- return false;
- }
- // overlap
- var overlapFunc = calendar.opt('selectOverlap');
- if (typeof overlapFunc !== 'function') {
- overlapFunc = null;
- }
- for (var relevantInstanceId in relevantInstances) {
- var relevantInstance = relevantInstances[relevantInstanceId];
- // intersect! evaluate
- if (rangesIntersect(selectionRange, relevantInstance.range)) {
- if (selectionConfig.overlap === false) {
- return false;
- }
- if (overlapFunc && !overlapFunc(new EventApi(calendar, relevantDefs[relevantInstance.defId], relevantInstance))) {
- return false;
- }
- }
- }
- // allow (a function)
- for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) {
- var selectionAllow = _a[_i];
- var fullDateSpan = __assign({}, dateSpanMeta, selection);
- if (!selectionAllow(calendar.buildDateSpanApi(fullDateSpan), null)) {
- return false;
- }
- }
- return true;
-}
-// Constraint Utils
-// ------------------------------------------------------------------------------------------------------------------------
-function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, calendar) {
- for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) {
- var constraint = constraints_1[_i];
- if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, calendar), subjectRange)) {
- return false;
- }
- }
- return true;
-}
-function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours
-otherEventStore, // for if constraint is an even group ID
-businessHoursUnexpanded, // for if constraint is 'businessHours'
-calendar // for expanding businesshours
-) {
- if (constraint === 'businessHours') {
- return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, calendar));
- }
- else if (typeof constraint === 'string') { // an group ID
- return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) {
- return eventDef.groupId === constraint;
- }));
- }
- else if (typeof constraint === 'object' && constraint) { // non-null object
- return eventStoreToRanges(expandRecurring(constraint, subjectRange, calendar));
- }
- return []; // if it's false
-}
-// TODO: move to event-store file?
-function eventStoreToRanges(eventStore) {
- var instances = eventStore.instances;
- var ranges = [];
- for (var instanceId in instances) {
- ranges.push(instances[instanceId].range);
- }
- return ranges;
-}
-// TODO: move to geom file?
-function anyRangesContainRange(outerRanges, innerRange) {
- for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) {
- var outerRange = outerRanges_1[_i];
- if (rangeContainsRange(outerRange, innerRange)) {
- return true;
- }
- }
- return false;
-}
-// Parsing
-// ------------------------------------------------------------------------------------------------------------------------
-function normalizeConstraint(input, calendar) {
- if (Array.isArray(input)) {
- return parseEvents(input, '', calendar, true); // allowOpenRange=true
- }
- else if (typeof input === 'object' && input) { // non-null object
- return parseEvents([input], '', calendar, true); // allowOpenRange=true
- }
- else if (input != null) {
- return String(input);
- }
- else {
- return null;
- }
-}
-
-function htmlEscape(s) {
- return (s + '').replace(/&/g, '&amp;')
- .replace(/</g, '&lt;')
- .replace(/>/g, '&gt;')
- .replace(/'/g, '&#039;')
- .replace(/"/g, '&quot;')
- .replace(/\n/g, '<br />');
-}
-// Given a hash of CSS properties, returns a string of CSS.
-// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.
-function cssToStr(cssProps) {
- var statements = [];
- for (var name_1 in cssProps) {
- var val = cssProps[name_1];
- if (val != null && val !== '') {
- statements.push(name_1 + ':' + val);
- }
- }
- return statements.join(';');
-}
-// Given an object hash of HTML attribute names to values,
-// generates a string that can be injected between < > in HTML
-function attrsToStr(attrs) {
- var parts = [];
- for (var name_2 in attrs) {
- var val = attrs[name_2];
- if (val != null) {
- parts.push(name_2 + '="' + htmlEscape(val) + '"');
- }
- }
- return parts.join(' ');
-}
-function parseClassName(raw) {
- if (Array.isArray(raw)) {
- return raw;
- }
- else if (typeof raw === 'string') {
- return raw.split(/\s+/);
- }
- else {
- return [];
- }
-}
-
-var UNSCOPED_EVENT_UI_PROPS = {
- editable: Boolean,
- startEditable: Boolean,
- durationEditable: Boolean,
- constraint: null,
- overlap: null,
- allow: null,
- className: parseClassName,
- classNames: parseClassName,
- color: String,
- backgroundColor: String,
- borderColor: String,
- textColor: String
-};
-function processUnscopedUiProps(rawProps, calendar, leftovers) {
- var props = refineProps(rawProps, UNSCOPED_EVENT_UI_PROPS, {}, leftovers);
- var constraint = normalizeConstraint(props.constraint, calendar);
- return {
- startEditable: props.startEditable != null ? props.startEditable : props.editable,
- durationEditable: props.durationEditable != null ? props.durationEditable : props.editable,
- constraints: constraint != null ? [constraint] : [],
- overlap: props.overlap,
- allows: props.allow != null ? [props.allow] : [],
- backgroundColor: props.backgroundColor || props.color,
- borderColor: props.borderColor || props.color,
- textColor: props.textColor,
- classNames: props.classNames.concat(props.className)
- };
-}
-function processScopedUiProps(prefix, rawScoped, calendar, leftovers) {
- var rawUnscoped = {};
- var wasFound = {};
- for (var key in UNSCOPED_EVENT_UI_PROPS) {
- var scopedKey = prefix + capitaliseFirstLetter(key);
- rawUnscoped[key] = rawScoped[scopedKey];
- wasFound[scopedKey] = true;
- }
- if (prefix === 'event') {
- rawUnscoped.editable = rawScoped.editable; // special case. there is no 'eventEditable', just 'editable'
- }
- if (leftovers) {
- for (var key in rawScoped) {
- if (!wasFound[key]) {
- leftovers[key] = rawScoped[key];
- }
- }
- }
- return processUnscopedUiProps(rawUnscoped, calendar);
-}
-var EMPTY_EVENT_UI = {
- startEditable: null,
- durationEditable: null,
- constraints: [],
- overlap: null,
- allows: [],
- backgroundColor: '',
- borderColor: '',
- textColor: '',
- classNames: []
-};
-// prevent against problems with <2 args!
-function combineEventUis(uis) {
- return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);
-}
-function combineTwoEventUis(item0, item1) {
- return {
- startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,
- durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,
- constraints: item0.constraints.concat(item1.constraints),
- overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,
- allows: item0.allows.concat(item1.allows),
- backgroundColor: item1.backgroundColor || item0.backgroundColor,
- borderColor: item1.borderColor || item0.borderColor,
- textColor: item1.textColor || item0.textColor,
- classNames: item0.classNames.concat(item1.classNames)
- };
-}
-
-var NON_DATE_PROPS = {
- id: String,
- groupId: String,
- title: String,
- url: String,
- rendering: String,
- extendedProps: null
-};
-var DATE_PROPS = {
- start: null,
- date: null,
- end: null,
- allDay: null
-};
-var uid = 0;
-function parseEvent(raw, sourceId, calendar, allowOpenRange) {
- var allDayDefault = computeIsAllDayDefault(sourceId, calendar);
- var leftovers0 = {};
- var recurringRes = parseRecurring(raw, // raw, but with single-event stuff stripped out
- allDayDefault, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes, leftovers0 // will populate with non-recurring props
- );
- if (recurringRes) {
- var def = parseEventDef(leftovers0, sourceId, recurringRes.allDay, Boolean(recurringRes.duration), calendar);
- def.recurringDef = {
- typeId: recurringRes.typeId,
- typeData: recurringRes.typeData,
- duration: recurringRes.duration
- };
- return { def: def, instance: null };
- }
- else {
- var leftovers1 = {};
- var singleRes = parseSingle(raw, allDayDefault, calendar, leftovers1, allowOpenRange);
- if (singleRes) {
- var def = parseEventDef(leftovers1, sourceId, singleRes.allDay, singleRes.hasEnd, calendar);
- var instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);
- return { def: def, instance: instance };
- }
- }
- return null;
-}
-/*
-Will NOT populate extendedProps with the leftover properties.
-Will NOT populate date-related props.
-The EventNonDateInput has been normalized (id => publicId, etc).
-*/
-function parseEventDef(raw, sourceId, allDay, hasEnd, calendar) {
- var leftovers = {};
- var def = pluckNonDateProps(raw, calendar, leftovers);
- def.defId = String(uid++);
- def.sourceId = sourceId;
- def.allDay = allDay;
- def.hasEnd = hasEnd;
- for (var _i = 0, _a = calendar.pluginSystem.hooks.eventDefParsers; _i < _a.length; _i++) {
- var eventDefParser = _a[_i];
- var newLeftovers = {};
- eventDefParser(def, leftovers, newLeftovers);
- leftovers = newLeftovers;
- }
- def.extendedProps = __assign(leftovers, def.extendedProps || {});
- // help out EventApi from having user modify props
- Object.freeze(def.ui.classNames);
- Object.freeze(def.extendedProps);
- return def;
-}
-function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {
- return {
- instanceId: String(uid++),
- defId: defId,
- range: range,
- forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,
- forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo
- };
-}
-function parseSingle(raw, allDayDefault, calendar, leftovers, allowOpenRange) {
- var props = pluckDateProps(raw, leftovers);
- var allDay = props.allDay;
- var startMeta;
- var startMarker = null;
- var hasEnd = false;
- var endMeta;
- var endMarker = null;
- startMeta = calendar.dateEnv.createMarkerMeta(props.start);
- if (startMeta) {
- startMarker = startMeta.marker;
- }
- else if (!allowOpenRange) {
- return null;
- }
- if (props.end != null) {
- endMeta = calendar.dateEnv.createMarkerMeta(props.end);
- }
- if (allDay == null) {
- if (allDayDefault != null) {
- allDay = allDayDefault;
- }
- else {
- // fall back to the date props LAST
- allDay = (!startMeta || startMeta.isTimeUnspecified) &&
- (!endMeta || endMeta.isTimeUnspecified);
- }
- }
- if (allDay && startMarker) {
- startMarker = startOfDay(startMarker);
- }
- if (endMeta) {
- endMarker = endMeta.marker;
- if (allDay) {
- endMarker = startOfDay(endMarker);
- }
- if (startMarker && endMarker <= startMarker) {
- endMarker = null;
- }
- }
- if (endMarker) {
- hasEnd = true;
- }
- else if (!allowOpenRange) {
- hasEnd = calendar.opt('forceEventDuration') || false;
- endMarker = calendar.dateEnv.add(startMarker, allDay ?
- calendar.defaultAllDayEventDuration :
- calendar.defaultTimedEventDuration);
- }
- return {
- allDay: allDay,
- hasEnd: hasEnd,
- range: { start: startMarker, end: endMarker },
- forcedStartTzo: startMeta ? startMeta.forcedTzo : null,
- forcedEndTzo: endMeta ? endMeta.forcedTzo : null
- };
-}
-function pluckDateProps(raw, leftovers) {
- var props = refineProps(raw, DATE_PROPS, {}, leftovers);
- props.start = (props.start !== null) ? props.start : props.date;
- delete props.date;
- return props;
-}
-function pluckNonDateProps(raw, calendar, leftovers) {
- var preLeftovers = {};
- var props = refineProps(raw, NON_DATE_PROPS, {}, preLeftovers);
- var ui = processUnscopedUiProps(preLeftovers, calendar, leftovers);
- props.publicId = props.id;
- delete props.id;
- props.ui = ui;
- return props;
-}
-function computeIsAllDayDefault(sourceId, calendar) {
- var res = null;
- if (sourceId) {
- var source = calendar.state.eventSources[sourceId];
- res = source.allDayDefault;
- }
- if (res == null) {
- res = calendar.opt('allDayDefault');
- }
- return res;
-}
-
-var DEF_DEFAULTS = {
- startTime: '09:00',
- endTime: '17:00',
- daysOfWeek: [1, 2, 3, 4, 5],
- rendering: 'inverse-background',
- classNames: 'fc-nonbusiness',
- groupId: '_businessHours' // so multiple defs get grouped
-};
-/*
-TODO: pass around as EventDefHash!!!
-*/
-function parseBusinessHours(input, calendar) {
- return parseEvents(refineInputs(input), '', calendar);
-}
-function refineInputs(input) {
- var rawDefs;
- if (input === true) {
- rawDefs = [{}]; // will get DEF_DEFAULTS verbatim
- }
- else if (Array.isArray(input)) {
- // if specifying an array, every sub-definition NEEDS a day-of-week
- rawDefs = input.filter(function (rawDef) {
- return rawDef.daysOfWeek;
- });
- }
- else if (typeof input === 'object' && input) { // non-null object
- rawDefs = [input];
- }
- else { // is probably false
- rawDefs = [];
- }
- rawDefs = rawDefs.map(function (rawDef) {
- return __assign({}, DEF_DEFAULTS, rawDef);
- });
- return rawDefs;
-}
-
-function memoizeRendering(renderFunc, unrenderFunc, dependencies) {
- if (dependencies === void 0) { dependencies = []; }
- var dependents = [];
- var thisContext;
- var prevArgs;
- function unrender() {
- if (prevArgs) {
- for (var _i = 0, dependents_1 = dependents; _i < dependents_1.length; _i++) {
- var dependent = dependents_1[_i];
- dependent.unrender();
- }
- if (unrenderFunc) {
- unrenderFunc.apply(thisContext, prevArgs);
- }
- prevArgs = null;
- }
- }
- function res() {
- if (!prevArgs || !isArraysEqual(prevArgs, arguments)) {
- unrender();
- thisContext = this;
- prevArgs = arguments;
- renderFunc.apply(this, arguments);
- }
- }
- res.dependents = dependents;
- res.unrender = unrender;
- for (var _i = 0, dependencies_1 = dependencies; _i < dependencies_1.length; _i++) {
- var dependency = dependencies_1[_i];
- dependency.dependents.push(res);
- }
- return res;
-}
-
-var EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere
-var Splitter = /** @class */ (function () {
- function Splitter() {
- this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);
- this.splitDateSelection = memoize(this._splitDateSpan);
- this.splitEventStore = memoize(this._splitEventStore);
- this.splitIndividualUi = memoize(this._splitIndividualUi);
- this.splitEventDrag = memoize(this._splitInteraction);
- this.splitEventResize = memoize(this._splitInteraction);
- this.eventUiBuilders = {}; // TODO: typescript protection
- }
- Splitter.prototype.splitProps = function (props) {
- var _this = this;
- var keyInfos = this.getKeyInfo(props);
- var defKeys = this.getKeysForEventDefs(props.eventStore);
- var dateSelections = this.splitDateSelection(props.dateSelection);
- var individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*
- var eventStores = this.splitEventStore(props.eventStore, defKeys);
- var eventDrags = this.splitEventDrag(props.eventDrag);
- var eventResizes = this.splitEventResize(props.eventResize);
- var splitProps = {};
- this.eventUiBuilders = mapHash(keyInfos, function (info, key) {
- return _this.eventUiBuilders[key] || memoize(buildEventUiForKey);
- });
- for (var key in keyInfos) {
- var keyInfo = keyInfos[key];
- var eventStore = eventStores[key] || EMPTY_EVENT_STORE;
- var buildEventUi = this.eventUiBuilders[key];
- splitProps[key] = {
- businessHours: keyInfo.businessHours || props.businessHours,
- dateSelection: dateSelections[key] || null,
- eventStore: eventStore,
- eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),
- eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',
- eventDrag: eventDrags[key] || null,
- eventResize: eventResizes[key] || null
- };
- }
- return splitProps;
- };
- Splitter.prototype._splitDateSpan = function (dateSpan) {
- var dateSpans = {};
- if (dateSpan) {
- var keys = this.getKeysForDateSpan(dateSpan);
- for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
- var key = keys_1[_i];
- dateSpans[key] = dateSpan;
- }
- }
- return dateSpans;
- };
- Splitter.prototype._getKeysForEventDefs = function (eventStore) {
- var _this = this;
- return mapHash(eventStore.defs, function (eventDef) {
- return _this.getKeysForEventDef(eventDef);
- });
- };
- Splitter.prototype._splitEventStore = function (eventStore, defKeys) {
- var defs = eventStore.defs, instances = eventStore.instances;
- var splitStores = {};
- for (var defId in defs) {
- for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {
- var key = _a[_i];
- if (!splitStores[key]) {
- splitStores[key] = createEmptyEventStore();
- }
- splitStores[key].defs[defId] = defs[defId];
- }
- }
- for (var instanceId in instances) {
- var instance = instances[instanceId];
- for (var _b = 0, _c = defKeys[instance.defId]; _b < _c.length; _b++) {
- var key = _c[_b];
- if (splitStores[key]) { // must have already been created
- splitStores[key].instances[instanceId] = instance;
- }
- }
- }
- return splitStores;
- };
- Splitter.prototype._splitIndividualUi = function (eventUiBases, defKeys) {
- var splitHashes = {};
- for (var defId in eventUiBases) {
- if (defId) { // not the '' key
- for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {
- var key = _a[_i];
- if (!splitHashes[key]) {
- splitHashes[key] = {};
- }
- splitHashes[key][defId] = eventUiBases[defId];
- }
- }
- }
- return splitHashes;
- };
- Splitter.prototype._splitInteraction = function (interaction) {
- var splitStates = {};
- if (interaction) {
- var affectedStores_1 = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents) // can't use cached. might be events from other calendar
- );
- // can't rely on defKeys because event data is mutated
- var mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);
- var mutatedStores_1 = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);
- var populate = function (key) {
- if (!splitStates[key]) {
- splitStates[key] = {
- affectedEvents: affectedStores_1[key] || EMPTY_EVENT_STORE,
- mutatedEvents: mutatedStores_1[key] || EMPTY_EVENT_STORE,
- isEvent: interaction.isEvent,
- origSeg: interaction.origSeg
- };
- }
- };
- for (var key in affectedStores_1) {
- populate(key);
- }
- for (var key in mutatedStores_1) {
- populate(key);
- }
- }
- return splitStates;
- };
- return Splitter;
-}());
-function buildEventUiForKey(allUi, eventUiForKey, individualUi) {
- var baseParts = [];
- if (allUi) {
- baseParts.push(allUi);
- }
- if (eventUiForKey) {
- baseParts.push(eventUiForKey);
- }
- var stuff = {
- '': combineEventUis(baseParts)
- };
- if (individualUi) {
- __assign(stuff, individualUi);
- }
- return stuff;
-}
-
-// Generates HTML for an anchor to another view into the calendar.
-// Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.
-// `gotoOptions` can either be a DateMarker, or an object with the form:
-// { date, type, forceOff }
-// `type` is a view-type like "day" or "week". default value is "day".
-// `attrs` and `innerHtml` are use to generate the rest of the HTML tag.
-function buildGotoAnchorHtml(allOptions, dateEnv, gotoOptions, attrs, innerHtml) {
- var date;
- var type;
- var forceOff;
- var finalOptions;
- if (gotoOptions instanceof Date) {
- date = gotoOptions; // a single date-like input
- }
- else {
- date = gotoOptions.date;
- type = gotoOptions.type;
- forceOff = gotoOptions.forceOff;
- }
- finalOptions = {
- date: dateEnv.formatIso(date, { omitTime: true }),
- type: type || 'day'
- };
- if (typeof attrs === 'string') {
- innerHtml = attrs;
- attrs = null;
- }
- attrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space
- innerHtml = innerHtml || '';
- if (!forceOff && allOptions.navLinks) {
- return '<a' + attrs +
- ' data-goto="' + htmlEscape(JSON.stringify(finalOptions)) + '">' +
- innerHtml +
- '</a>';
- }
- else {
- return '<span' + attrs + '>' +
- innerHtml +
- '</span>';
- }
-}
-function getAllDayHtml(allOptions) {
- return allOptions.allDayHtml || htmlEscape(allOptions.allDayText);
-}
-// Computes HTML classNames for a single-day element
-function getDayClasses(date, dateProfile, context, noThemeHighlight) {
- var calendar = context.calendar, options = context.options, theme = context.theme, dateEnv = context.dateEnv;
- var classes = [];
- var todayStart;
- var todayEnd;
- if (!rangeContainsMarker(dateProfile.activeRange, date)) {
- classes.push('fc-disabled-day');
- }
- else {
- classes.push('fc-' + DAY_IDS[date.getUTCDay()]);
- if (options.monthMode &&
- dateEnv.getMonth(date) !== dateEnv.getMonth(dateProfile.currentRange.start)) {
- classes.push('fc-other-month');
- }
- todayStart = startOfDay(calendar.getNow());
- todayEnd = addDays(todayStart, 1);
- if (date < todayStart) {
- classes.push('fc-past');
- }
- else if (date >= todayEnd) {
- classes.push('fc-future');
- }
- else {
- classes.push('fc-today');
- if (noThemeHighlight !== true) {
- classes.push(theme.getClass('today'));
- }
- }
- }
- return classes;
-}
-
-// given a function that resolves a result asynchronously.
-// the function can either call passed-in success and failure callbacks,
-// or it can return a promise.
-// if you need to pass additional params to func, bind them first.
-function unpromisify(func, success, failure) {
- // guard against success/failure callbacks being called more than once
- // and guard against a promise AND callback being used together.
- var isResolved = false;
- var wrappedSuccess = function () {
- if (!isResolved) {
- isResolved = true;
- success.apply(this, arguments);
- }
- };
- var wrappedFailure = function () {
- if (!isResolved) {
- isResolved = true;
- if (failure) {
- failure.apply(this, arguments);
- }
- }
- };
- var res = func(wrappedSuccess, wrappedFailure);
- if (res && typeof res.then === 'function') {
- res.then(wrappedSuccess, wrappedFailure);
- }
-}
-
-var Mixin = /** @class */ (function () {
- function Mixin() {
- }
- // mix into a CLASS
- Mixin.mixInto = function (destClass) {
- this.mixIntoObj(destClass.prototype);
- };
- // mix into ANY object
- Mixin.mixIntoObj = function (destObj) {
- var _this = this;
- Object.getOwnPropertyNames(this.prototype).forEach(function (name) {
- if (!destObj[name]) { // if destination doesn't already define it
- destObj[name] = _this.prototype[name];
- }
- });
- };
- /*
- will override existing methods
- TODO: remove! not used anymore
- */
- Mixin.mixOver = function (destClass) {
- var _this = this;
- Object.getOwnPropertyNames(this.prototype).forEach(function (name) {
- destClass.prototype[name] = _this.prototype[name];
- });
- };
- return Mixin;
-}());
-
-/*
-USAGE:
- import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'
-in class:
- on: EmitterInterface['on']
- one: EmitterInterface['one']
- off: EmitterInterface['off']
- trigger: EmitterInterface['trigger']
- triggerWith: EmitterInterface['triggerWith']
- hasHandlers: EmitterInterface['hasHandlers']
-after class:
- EmitterMixin.mixInto(TheClass)
-*/
-var EmitterMixin = /** @class */ (function (_super) {
- __extends(EmitterMixin, _super);
- function EmitterMixin() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- EmitterMixin.prototype.on = function (type, handler) {
- addToHash(this._handlers || (this._handlers = {}), type, handler);
- return this; // for chaining
- };
- // todo: add comments
- EmitterMixin.prototype.one = function (type, handler) {
- addToHash(this._oneHandlers || (this._oneHandlers = {}), type, handler);
- return this; // for chaining
- };
- EmitterMixin.prototype.off = function (type, handler) {
- if (this._handlers) {
- removeFromHash(this._handlers, type, handler);
- }
- if (this._oneHandlers) {
- removeFromHash(this._oneHandlers, type, handler);
- }
- return this; // for chaining
- };
- EmitterMixin.prototype.trigger = function (type) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- this.triggerWith(type, this, args);
- return this; // for chaining
- };
- EmitterMixin.prototype.triggerWith = function (type, context, args) {
- if (this._handlers) {
- applyAll(this._handlers[type], context, args);
- }
- if (this._oneHandlers) {
- applyAll(this._oneHandlers[type], context, args);
- delete this._oneHandlers[type]; // will never fire again
- }
- return this; // for chaining
- };
- EmitterMixin.prototype.hasHandlers = function (type) {
- return (this._handlers && this._handlers[type] && this._handlers[type].length) ||
- (this._oneHandlers && this._oneHandlers[type] && this._oneHandlers[type].length);
- };
- return EmitterMixin;
-}(Mixin));
-function addToHash(hash, type, handler) {
- (hash[type] || (hash[type] = []))
- .push(handler);
-}
-function removeFromHash(hash, type, handler) {
- if (handler) {
- if (hash[type]) {
- hash[type] = hash[type].filter(function (func) {
- return func !== handler;
- });
- }
- }
- else {
- delete hash[type]; // remove all handler funcs for this type
- }
-}
-
-/*
-Records offset information for a set of elements, relative to an origin element.
-Can record the left/right OR the top/bottom OR both.
-Provides methods for querying the cache by position.
-*/
-var PositionCache = /** @class */ (function () {
- function PositionCache(originEl, els, isHorizontal, isVertical) {
- this.originEl = originEl;
- this.els = els;
- this.isHorizontal = isHorizontal;
- this.isVertical = isVertical;
- }
- // Queries the els for coordinates and stores them.
- // Call this method before using and of the get* methods below.
- PositionCache.prototype.build = function () {
- var originEl = this.originEl;
- var originClientRect = this.originClientRect =
- originEl.getBoundingClientRect(); // relative to viewport top-left
- if (this.isHorizontal) {
- this.buildElHorizontals(originClientRect.left);
- }
- if (this.isVertical) {
- this.buildElVerticals(originClientRect.top);
- }
- };
- // Populates the left/right internal coordinate arrays
- PositionCache.prototype.buildElHorizontals = function (originClientLeft) {
- var lefts = [];
- var rights = [];
- for (var _i = 0, _a = this.els; _i < _a.length; _i++) {
- var el = _a[_i];
- var rect = el.getBoundingClientRect();
- lefts.push(rect.left - originClientLeft);
- rights.push(rect.right - originClientLeft);
- }
- this.lefts = lefts;
- this.rights = rights;
- };
- // Populates the top/bottom internal coordinate arrays
- PositionCache.prototype.buildElVerticals = function (originClientTop) {
- var tops = [];
- var bottoms = [];
- for (var _i = 0, _a = this.els; _i < _a.length; _i++) {
- var el = _a[_i];
- var rect = el.getBoundingClientRect();
- tops.push(rect.top - originClientTop);
- bottoms.push(rect.bottom - originClientTop);
- }
- this.tops = tops;
- this.bottoms = bottoms;
- };
- // Given a left offset (from document left), returns the index of the el that it horizontally intersects.
- // If no intersection is made, returns undefined.
- PositionCache.prototype.leftToIndex = function (leftPosition) {
- var lefts = this.lefts;
- var rights = this.rights;
- var len = lefts.length;
- var i;
- for (i = 0; i < len; i++) {
- if (leftPosition >= lefts[i] && leftPosition < rights[i]) {
- return i;
- }
- }
- };
- // Given a top offset (from document top), returns the index of the el that it vertically intersects.
- // If no intersection is made, returns undefined.
- PositionCache.prototype.topToIndex = function (topPosition) {
- var tops = this.tops;
- var bottoms = this.bottoms;
- var len = tops.length;
- var i;
- for (i = 0; i < len; i++) {
- if (topPosition >= tops[i] && topPosition < bottoms[i]) {
- return i;
- }
- }
- };
- // Gets the width of the element at the given index
- PositionCache.prototype.getWidth = function (leftIndex) {
- return this.rights[leftIndex] - this.lefts[leftIndex];
- };
- // Gets the height of the element at the given index
- PositionCache.prototype.getHeight = function (topIndex) {
- return this.bottoms[topIndex] - this.tops[topIndex];
- };
- return PositionCache;
-}());
-
-/*
-An object for getting/setting scroll-related information for an element.
-Internally, this is done very differently for window versus DOM element,
-so this object serves as a common interface.
-*/
-var ScrollController = /** @class */ (function () {
- function ScrollController() {
- }
- ScrollController.prototype.getMaxScrollTop = function () {
- return this.getScrollHeight() - this.getClientHeight();
- };
- ScrollController.prototype.getMaxScrollLeft = function () {
- return this.getScrollWidth() - this.getClientWidth();
- };
- ScrollController.prototype.canScrollVertically = function () {
- return this.getMaxScrollTop() > 0;
- };
- ScrollController.prototype.canScrollHorizontally = function () {
- return this.getMaxScrollLeft() > 0;
- };
- ScrollController.prototype.canScrollUp = function () {
- return this.getScrollTop() > 0;
- };
- ScrollController.prototype.canScrollDown = function () {
- return this.getScrollTop() < this.getMaxScrollTop();
- };
- ScrollController.prototype.canScrollLeft = function () {
- return this.getScrollLeft() > 0;
- };
- ScrollController.prototype.canScrollRight = function () {
- return this.getScrollLeft() < this.getMaxScrollLeft();
- };
- return ScrollController;
-}());
-var ElementScrollController = /** @class */ (function (_super) {
- __extends(ElementScrollController, _super);
- function ElementScrollController(el) {
- var _this = _super.call(this) || this;
- _this.el = el;
- return _this;
- }
- ElementScrollController.prototype.getScrollTop = function () {
- return this.el.scrollTop;
- };
- ElementScrollController.prototype.getScrollLeft = function () {
- return this.el.scrollLeft;
- };
- ElementScrollController.prototype.setScrollTop = function (top) {
- this.el.scrollTop = top;
- };
- ElementScrollController.prototype.setScrollLeft = function (left) {
- this.el.scrollLeft = left;
- };
- ElementScrollController.prototype.getScrollWidth = function () {
- return this.el.scrollWidth;
- };
- ElementScrollController.prototype.getScrollHeight = function () {
- return this.el.scrollHeight;
- };
- ElementScrollController.prototype.getClientHeight = function () {
- return this.el.clientHeight;
- };
- ElementScrollController.prototype.getClientWidth = function () {
- return this.el.clientWidth;
- };
- return ElementScrollController;
-}(ScrollController));
-var WindowScrollController = /** @class */ (function (_super) {
- __extends(WindowScrollController, _super);
- function WindowScrollController() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- WindowScrollController.prototype.getScrollTop = function () {
- return window.pageYOffset;
- };
- WindowScrollController.prototype.getScrollLeft = function () {
- return window.pageXOffset;
- };
- WindowScrollController.prototype.setScrollTop = function (n) {
- window.scroll(window.pageXOffset, n);
- };
- WindowScrollController.prototype.setScrollLeft = function (n) {
- window.scroll(n, window.pageYOffset);
- };
- WindowScrollController.prototype.getScrollWidth = function () {
- return document.documentElement.scrollWidth;
- };
- WindowScrollController.prototype.getScrollHeight = function () {
- return document.documentElement.scrollHeight;
- };
- WindowScrollController.prototype.getClientHeight = function () {
- return document.documentElement.clientHeight;
- };
- WindowScrollController.prototype.getClientWidth = function () {
- return document.documentElement.clientWidth;
- };
- return WindowScrollController;
-}(ScrollController));
-
-/*
-Embodies a div that has potential scrollbars
-*/
-var ScrollComponent = /** @class */ (function (_super) {
- __extends(ScrollComponent, _super);
- function ScrollComponent(overflowX, overflowY) {
- var _this = _super.call(this, createElement('div', {
- className: 'fc-scroller'
- })) || this;
- _this.overflowX = overflowX;
- _this.overflowY = overflowY;
- _this.applyOverflow();
- return _this;
- }
- // sets to natural height, unlocks overflow
- ScrollComponent.prototype.clear = function () {
- this.setHeight('auto');
- this.applyOverflow();
- };
- ScrollComponent.prototype.destroy = function () {
- removeElement(this.el);
- };
- // Overflow
- // -----------------------------------------------------------------------------------------------------------------
- ScrollComponent.prototype.applyOverflow = function () {
- applyStyle(this.el, {
- overflowX: this.overflowX,
- overflowY: this.overflowY
- });
- };
- // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.
- // Useful for preserving scrollbar widths regardless of future resizes.
- // Can pass in scrollbarWidths for optimization.
- ScrollComponent.prototype.lockOverflow = function (scrollbarWidths) {
- var overflowX = this.overflowX;
- var overflowY = this.overflowY;
- scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();
- if (overflowX === 'auto') {
- overflowX = (scrollbarWidths.bottom || // horizontal scrollbars?
- this.canScrollHorizontally() // OR scrolling pane with massless scrollbars?
- ) ? 'scroll' : 'hidden';
- }
- if (overflowY === 'auto') {
- overflowY = (scrollbarWidths.left || scrollbarWidths.right || // horizontal scrollbars?
- this.canScrollVertically() // OR scrolling pane with massless scrollbars?
- ) ? 'scroll' : 'hidden';
- }
- applyStyle(this.el, { overflowX: overflowX, overflowY: overflowY });
- };
- ScrollComponent.prototype.setHeight = function (height) {
- applyStyleProp(this.el, 'height', height);
- };
- ScrollComponent.prototype.getScrollbarWidths = function () {
- var edges = computeEdges(this.el);
- return {
- left: edges.scrollbarLeft,
- right: edges.scrollbarRight,
- bottom: edges.scrollbarBottom
- };
- };
- return ScrollComponent;
-}(ElementScrollController));
-
-var Theme = /** @class */ (function () {
- function Theme(calendarOptions) {
- this.calendarOptions = calendarOptions;
- this.processIconOverride();
- }
- Theme.prototype.processIconOverride = function () {
- if (this.iconOverrideOption) {
- this.setIconOverride(this.calendarOptions[this.iconOverrideOption]);
- }
- };
- Theme.prototype.setIconOverride = function (iconOverrideHash) {
- var iconClassesCopy;
- var buttonName;
- if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object
- iconClassesCopy = __assign({}, this.iconClasses);
- for (buttonName in iconOverrideHash) {
- iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);
- }
- this.iconClasses = iconClassesCopy;
- }
- else if (iconOverrideHash === false) {
- this.iconClasses = {};
- }
- };
- Theme.prototype.applyIconOverridePrefix = function (className) {
- var prefix = this.iconOverridePrefix;
- if (prefix && className.indexOf(prefix) !== 0) { // if not already present
- className = prefix + className;
- }
- return className;
- };
- Theme.prototype.getClass = function (key) {
- return this.classes[key] || '';
- };
- Theme.prototype.getIconClass = function (buttonName) {
- var className = this.iconClasses[buttonName];
- if (className) {
- return this.baseIconClass + ' ' + className;
- }
- return '';
- };
- Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {
- var className;
- if (this.iconOverrideCustomButtonOption) {
- className = customButtonProps[this.iconOverrideCustomButtonOption];
- if (className) {
- return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);
- }
- }
- return '';
- };
- return Theme;
-}());
-Theme.prototype.classes = {};
-Theme.prototype.iconClasses = {};
-Theme.prototype.baseIconClass = '';
-Theme.prototype.iconOverridePrefix = '';
-
-var guid = 0;
-var ComponentContext = /** @class */ (function () {
- function ComponentContext(calendar, theme, dateEnv, options, view) {
- this.calendar = calendar;
- this.theme = theme;
- this.dateEnv = dateEnv;
- this.options = options;
- this.view = view;
- this.isRtl = options.dir === 'rtl';
- this.eventOrderSpecs = parseFieldSpecs(options.eventOrder);
- this.nextDayThreshold = createDuration(options.nextDayThreshold);
- }
- ComponentContext.prototype.extend = function (options, view) {
- return new ComponentContext(this.calendar, this.theme, this.dateEnv, options || this.options, view || this.view);
- };
- return ComponentContext;
-}());
-var Component = /** @class */ (function () {
- function Component() {
- this.everRendered = false;
- this.uid = String(guid++);
- }
- Component.addEqualityFuncs = function (newFuncs) {
- this.prototype.equalityFuncs = __assign({}, this.prototype.equalityFuncs, newFuncs);
- };
- Component.prototype.receiveProps = function (props, context) {
- this.receiveContext(context);
- var _a = recycleProps(this.props || {}, props, this.equalityFuncs), anyChanges = _a.anyChanges, comboProps = _a.comboProps;
- this.props = comboProps;
- if (anyChanges) {
- if (this.everRendered) {
- this.beforeUpdate();
- }
- this.render(comboProps, context);
- if (this.everRendered) {
- this.afterUpdate();
- }
- }
- this.everRendered = true;
- };
- Component.prototype.receiveContext = function (context) {
- var oldContext = this.context;
- this.context = context;
- if (!oldContext) {
- this.firstContext(context);
- }
- };
- Component.prototype.render = function (props, context) {
- };
- Component.prototype.firstContext = function (context) {
- };
- Component.prototype.beforeUpdate = function () {
- };
- Component.prototype.afterUpdate = function () {
- };
- // after destroy is called, this component won't ever be used again
- Component.prototype.destroy = function () {
- };
- return Component;
-}());
-Component.prototype.equalityFuncs = {};
-/*
-Reuses old values when equal. If anything is unequal, returns newProps as-is.
-Great for PureComponent, but won't be feasible with React, so just eliminate and use React's DOM diffing.
-*/
-function recycleProps(oldProps, newProps, equalityFuncs) {
- var comboProps = {}; // some old, some new
- var anyChanges = false;
- for (var key in newProps) {
- if (key in oldProps && (oldProps[key] === newProps[key] ||
- (equalityFuncs[key] && equalityFuncs[key](oldProps[key], newProps[key])))) {
- // equal to old? use old prop
- comboProps[key] = oldProps[key];
- }
- else {
- comboProps[key] = newProps[key];
- anyChanges = true;
- }
- }
- for (var key in oldProps) {
- if (!(key in newProps)) {
- anyChanges = true;
- break;
- }
- }
- return { anyChanges: anyChanges, comboProps: comboProps };
-}
-
-/*
-PURPOSES:
-- hook up to fg, fill, and mirror renderers
-- interface for dragging and hits
-*/
-var DateComponent = /** @class */ (function (_super) {
- __extends(DateComponent, _super);
- function DateComponent(el) {
- var _this = _super.call(this) || this;
- _this.el = el;
- return _this;
- }
- DateComponent.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- removeElement(this.el);
- };
- // Hit System
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.buildPositionCaches = function () {
- };
- DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
- return null; // this should be abstract
- };
- // Validation
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.isInteractionValid = function (interaction) {
- var calendar = this.context.calendar;
- var dateProfile = this.props.dateProfile; // HACK
- var instances = interaction.mutatedEvents.instances;
- if (dateProfile) { // HACK for DayTile
- for (var instanceId in instances) {
- if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {
- return false;
- }
- }
- }
- return isInteractionValid(interaction, calendar);
- };
- DateComponent.prototype.isDateSelectionValid = function (selection) {
- var calendar = this.context.calendar;
- var dateProfile = this.props.dateProfile; // HACK
- if (dateProfile && // HACK for DayTile
- !rangeContainsRange(dateProfile.validRange, selection.range)) {
- return false;
- }
- return isDateSelectionValid(selection, calendar);
- };
- // Pointer Interaction Utils
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.isValidSegDownEl = function (el) {
- return !this.props.eventDrag && // HACK
- !this.props.eventResize && // HACK
- !elementClosest(el, '.fc-mirror') &&
- (this.isPopover() || !this.isInPopover(el));
- // ^above line ensures we don't detect a seg interaction within a nested component.
- // it's a HACK because it only supports a popover as the nested component.
- };
- DateComponent.prototype.isValidDateDownEl = function (el) {
- var segEl = elementClosest(el, this.fgSegSelector);
- return (!segEl || segEl.classList.contains('fc-mirror')) &&
- !elementClosest(el, '.fc-more') && // a "more.." link
- !elementClosest(el, 'a[data-goto]') && // a clickable nav link
- !this.isInPopover(el);
- };
- DateComponent.prototype.isPopover = function () {
- return this.el.classList.contains('fc-popover');
- };
- DateComponent.prototype.isInPopover = function (el) {
- return Boolean(elementClosest(el, '.fc-popover'));
- };
- return DateComponent;
-}(Component));
-DateComponent.prototype.fgSegSelector = '.fc-event-container > *';
-DateComponent.prototype.bgSegSelector = '.fc-bgevent:not(.fc-nonbusiness)';
-
-var uid$1 = 0;
-function createPlugin(input) {
- return {
- id: String(uid$1++),
- deps: input.deps || [],
- reducers: input.reducers || [],
- eventDefParsers: input.eventDefParsers || [],
- isDraggableTransformers: input.isDraggableTransformers || [],
- eventDragMutationMassagers: input.eventDragMutationMassagers || [],
- eventDefMutationAppliers: input.eventDefMutationAppliers || [],
- dateSelectionTransformers: input.dateSelectionTransformers || [],
- datePointTransforms: input.datePointTransforms || [],
- dateSpanTransforms: input.dateSpanTransforms || [],
- views: input.views || {},
- viewPropsTransformers: input.viewPropsTransformers || [],
- isPropsValid: input.isPropsValid || null,
- externalDefTransforms: input.externalDefTransforms || [],
- eventResizeJoinTransforms: input.eventResizeJoinTransforms || [],
- viewContainerModifiers: input.viewContainerModifiers || [],
- eventDropTransformers: input.eventDropTransformers || [],
- componentInteractions: input.componentInteractions || [],
- calendarInteractions: input.calendarInteractions || [],
- themeClasses: input.themeClasses || {},
- eventSourceDefs: input.eventSourceDefs || [],
- cmdFormatter: input.cmdFormatter,
- recurringTypes: input.recurringTypes || [],
- namedTimeZonedImpl: input.namedTimeZonedImpl,
- defaultView: input.defaultView || '',
- elementDraggingImpl: input.elementDraggingImpl,
- optionChangeHandlers: input.optionChangeHandlers || {}
- };
-}
-var PluginSystem = /** @class */ (function () {
- function PluginSystem() {
- this.hooks = {
- reducers: [],
- eventDefParsers: [],
- isDraggableTransformers: [],
- eventDragMutationMassagers: [],
- eventDefMutationAppliers: [],
- dateSelectionTransformers: [],
- datePointTransforms: [],
- dateSpanTransforms: [],
- views: {},
- viewPropsTransformers: [],
- isPropsValid: null,
- externalDefTransforms: [],
- eventResizeJoinTransforms: [],
- viewContainerModifiers: [],
- eventDropTransformers: [],
- componentInteractions: [],
- calendarInteractions: [],
- themeClasses: {},
- eventSourceDefs: [],
- cmdFormatter: null,
- recurringTypes: [],
- namedTimeZonedImpl: null,
- defaultView: '',
- elementDraggingImpl: null,
- optionChangeHandlers: {}
- };
- this.addedHash = {};
- }
- PluginSystem.prototype.add = function (plugin) {
- if (!this.addedHash[plugin.id]) {
- this.addedHash[plugin.id] = true;
- for (var _i = 0, _a = plugin.deps; _i < _a.length; _i++) {
- var dep = _a[_i];
- this.add(dep);
- }
- this.hooks = combineHooks(this.hooks, plugin);
- }
- };
- return PluginSystem;
-}());
-function combineHooks(hooks0, hooks1) {
- return {
- reducers: hooks0.reducers.concat(hooks1.reducers),
- eventDefParsers: hooks0.eventDefParsers.concat(hooks1.eventDefParsers),
- isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
- eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
- eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
- dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
- datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
- dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
- views: __assign({}, hooks0.views, hooks1.views),
- viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
- isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
- externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
- eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms),
- viewContainerModifiers: hooks0.viewContainerModifiers.concat(hooks1.viewContainerModifiers),
- eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
- calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
- componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),
- themeClasses: __assign({}, hooks0.themeClasses, hooks1.themeClasses),
- eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),
- cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,
- recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),
- namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,
- defaultView: hooks0.defaultView || hooks1.defaultView,
- elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,
- optionChangeHandlers: __assign({}, hooks0.optionChangeHandlers, hooks1.optionChangeHandlers)
- };
-}
-
-var eventSourceDef = {
- ignoreRange: true,
- parseMeta: function (raw) {
- if (Array.isArray(raw)) { // short form
- return raw;
- }
- else if (Array.isArray(raw.events)) {
- return raw.events;
- }
- return null;
- },
- fetch: function (arg, success) {
- success({
- rawEvents: arg.eventSource.meta
- });
- }
-};
-var ArrayEventSourcePlugin = createPlugin({
- eventSourceDefs: [eventSourceDef]
-});
-
-var eventSourceDef$1 = {
- parseMeta: function (raw) {
- if (typeof raw === 'function') { // short form
- return raw;
- }
- else if (typeof raw.events === 'function') {
- return raw.events;
- }
- return null;
- },
- fetch: function (arg, success, failure) {
- var dateEnv = arg.calendar.dateEnv;
- var func = arg.eventSource.meta;
- unpromisify(func.bind(null, {
- start: dateEnv.toDate(arg.range.start),
- end: dateEnv.toDate(arg.range.end),
- startStr: dateEnv.formatIso(arg.range.start),
- endStr: dateEnv.formatIso(arg.range.end),
- timeZone: dateEnv.timeZone
- }), function (rawEvents) {
- success({ rawEvents: rawEvents }); // needs an object response
- }, failure // send errorObj directly to failure callback
- );
- }
-};
-var FuncEventSourcePlugin = createPlugin({
- eventSourceDefs: [eventSourceDef$1]
-});
-
-function requestJson(method, url, params, successCallback, failureCallback) {
- method = method.toUpperCase();
- var body = null;
- if (method === 'GET') {
- url = injectQueryStringParams(url, params);
- }
- else {
- body = encodeParams(params);
- }
- var xhr = new XMLHttpRequest();
- xhr.open(method, url, true);
- if (method !== 'GET') {
- xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- }
- xhr.onload = function () {
- if (xhr.status >= 200 && xhr.status < 400) {
- try {
- var res = JSON.parse(xhr.responseText);
- successCallback(res, xhr);
- }
- catch (err) {
- failureCallback('Failure parsing JSON', xhr);
- }
- }
- else {
- failureCallback('Request failed', xhr);
- }
- };
- xhr.onerror = function () {
- failureCallback('Request failed', xhr);
- };
- xhr.send(body);
-}
-function injectQueryStringParams(url, params) {
- return url +
- (url.indexOf('?') === -1 ? '?' : '&') +
- encodeParams(params);
-}
-function encodeParams(params) {
- var parts = [];
- for (var key in params) {
- parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));
- }
- return parts.join('&');
-}
-
-var eventSourceDef$2 = {
- parseMeta: function (raw) {
- if (typeof raw === 'string') { // short form
- raw = { url: raw };
- }
- else if (!raw || typeof raw !== 'object' || !raw.url) {
- return null;
- }
- return {
- url: raw.url,
- method: (raw.method || 'GET').toUpperCase(),
- extraParams: raw.extraParams,
- startParam: raw.startParam,
- endParam: raw.endParam,
- timeZoneParam: raw.timeZoneParam
- };
- },
- fetch: function (arg, success, failure) {
- var meta = arg.eventSource.meta;
- var requestParams = buildRequestParams(meta, arg.range, arg.calendar);
- requestJson(meta.method, meta.url, requestParams, function (rawEvents, xhr) {
- success({ rawEvents: rawEvents, xhr: xhr });
- }, function (errorMessage, xhr) {
- failure({ message: errorMessage, xhr: xhr });
- });
- }
-};
-var JsonFeedEventSourcePlugin = createPlugin({
- eventSourceDefs: [eventSourceDef$2]
-});
-function buildRequestParams(meta, range, calendar) {
- var dateEnv = calendar.dateEnv;
- var startParam;
- var endParam;
- var timeZoneParam;
- var customRequestParams;
- var params = {};
- startParam = meta.startParam;
- if (startParam == null) {
- startParam = calendar.opt('startParam');
- }
- endParam = meta.endParam;
- if (endParam == null) {
- endParam = calendar.opt('endParam');
- }
- timeZoneParam = meta.timeZoneParam;
- if (timeZoneParam == null) {
- timeZoneParam = calendar.opt('timeZoneParam');
- }
- // retrieve any outbound GET/POST data from the options
- if (typeof meta.extraParams === 'function') {
- // supplied as a function that returns a key/value object
- customRequestParams = meta.extraParams();
- }
- else {
- // probably supplied as a straight key/value object
- customRequestParams = meta.extraParams || {};
- }
- __assign(params, customRequestParams);
- params[startParam] = dateEnv.formatIso(range.start);
- params[endParam] = dateEnv.formatIso(range.end);
- if (dateEnv.timeZone !== 'local') {
- params[timeZoneParam] = dateEnv.timeZone;
- }
- return params;
-}
-
-var recurring = {
- parse: function (rawEvent, leftoverProps, dateEnv) {
- var createMarker = dateEnv.createMarker.bind(dateEnv);
- var processors = {
- daysOfWeek: null,
- startTime: createDuration,
- endTime: createDuration,
- startRecur: createMarker,
- endRecur: createMarker
- };
- var props = refineProps(rawEvent, processors, {}, leftoverProps);
- var anyValid = false;
- for (var propName in props) {
- if (props[propName] != null) {
- anyValid = true;
- break;
- }
- }
- if (anyValid) {
- var duration = null;
- if ('duration' in leftoverProps) {
- duration = createDuration(leftoverProps.duration);
- delete leftoverProps.duration;
- }
- if (!duration && props.startTime && props.endTime) {
- duration = subtractDurations(props.endTime, props.startTime);
- }
- return {
- allDayGuess: Boolean(!props.startTime && !props.endTime),
- duration: duration,
- typeData: props // doesn't need endTime anymore but oh well
- };
- }
- return null;
- },
- expand: function (typeData, framingRange, dateEnv) {
- var clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
- if (clippedFramingRange) {
- return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
- }
- else {
- return [];
- }
- }
-};
-var SimpleRecurrencePlugin = createPlugin({
- recurringTypes: [recurring]
-});
-function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
- var dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;
- var dayMarker = startOfDay(framingRange.start);
- var endMarker = framingRange.end;
- var instanceStarts = [];
- while (dayMarker < endMarker) {
- var instanceStart
- // if everyday, or this particular day-of-week
- = void 0;
- // if everyday, or this particular day-of-week
- if (!dowHash || dowHash[dayMarker.getUTCDay()]) {
- if (startTime) {
- instanceStart = dateEnv.add(dayMarker, startTime);
- }
- else {
- instanceStart = dayMarker;
- }
- instanceStarts.push(instanceStart);
- }
- dayMarker = addDays(dayMarker, 1);
- }
- return instanceStarts;
-}
-
-var DefaultOptionChangeHandlers = createPlugin({
- optionChangeHandlers: {
- events: function (events, calendar, deepEqual) {
- handleEventSources([events], calendar, deepEqual);
- },
- eventSources: handleEventSources,
- plugins: handlePlugins
- }
-});
-function handleEventSources(inputs, calendar, deepEqual) {
- var unfoundSources = hashValuesToArray(calendar.state.eventSources);
- var newInputs = [];
- for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
- var input = inputs_1[_i];
- var inputFound = false;
- for (var i = 0; i < unfoundSources.length; i++) {
- if (deepEqual(unfoundSources[i]._raw, input)) {
- unfoundSources.splice(i, 1); // delete
- inputFound = true;
- break;
- }
- }
- if (!inputFound) {
- newInputs.push(input);
- }
- }
- for (var _a = 0, unfoundSources_1 = unfoundSources; _a < unfoundSources_1.length; _a++) {
- var unfoundSource = unfoundSources_1[_a];
- calendar.dispatch({
- type: 'REMOVE_EVENT_SOURCE',
- sourceId: unfoundSource.sourceId
- });
- }
- for (var _b = 0, newInputs_1 = newInputs; _b < newInputs_1.length; _b++) {
- var newInput = newInputs_1[_b];
- calendar.addEventSource(newInput);
- }
-}
-// shortcoming: won't remove plugins
-function handlePlugins(inputs, calendar) {
- calendar.addPluginInputs(inputs); // will gracefully handle duplicates
-}
-
-var config = {}; // TODO: make these options
-var globalDefaults = {
- defaultRangeSeparator: ' - ',
- titleRangeSeparator: ' \u2013 ',
- defaultTimedEventDuration: '01:00:00',
- defaultAllDayEventDuration: { day: 1 },
- forceEventDuration: false,
- nextDayThreshold: '00:00:00',
- // display
- columnHeader: true,
- defaultView: '',
- aspectRatio: 1.35,
- header: {
- left: 'title',
- center: '',
- right: 'today prev,next'
- },
- weekends: true,
- weekNumbers: false,
- weekNumberCalculation: 'local',
- editable: false,
- // nowIndicator: false,
- scrollTime: '06:00:00',
- minTime: '00:00:00',
- maxTime: '24:00:00',
- showNonCurrentDates: true,
- // event ajax
- lazyFetching: true,
- startParam: 'start',
- endParam: 'end',
- timeZoneParam: 'timeZone',
- timeZone: 'local',
- // allDayDefault: undefined,
- // locale
- locales: [],
- locale: '',
- // dir: will get this from the default locale
- // buttonIcons: null,
- // allows setting a min-height to the event segment to prevent short events overlapping each other
- timeGridEventMinHeight: 0,
- themeSystem: 'standard',
- // eventResizableFromStart: false,
- dragRevertDuration: 500,
- dragScroll: true,
- allDayMaintainDuration: false,
- // selectable: false,
- unselectAuto: true,
- // selectMinDistance: 0,
- dropAccept: '*',
- eventOrder: 'start,-duration,allDay,title',
- // ^ if start tie, longer events go before shorter. final tie-breaker is title text
- // rerenderDelay: null,
- eventLimit: false,
- eventLimitClick: 'popover',
- dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },
- handleWindowResize: true,
- windowResizeDelay: 100,
- longPressDelay: 1000,
- eventDragMinDistance: 5 // only applies to mouse
-};
-var rtlDefaults = {
- header: {
- left: 'next,prev today',
- center: '',
- right: 'title'
- },
- buttonIcons: {
- // TODO: make RTL support the responibility of the theme
- prev: 'fc-icon-chevron-right',
- next: 'fc-icon-chevron-left',
- prevYear: 'fc-icon-chevrons-right',
- nextYear: 'fc-icon-chevrons-left'
- }
-};
-var complexOptions = [
- 'header',
- 'footer',
- 'buttonText',
- 'buttonIcons'
-];
-// Merges an array of option objects into a single object
-function mergeOptions(optionObjs) {
- return mergeProps(optionObjs, complexOptions);
-}
-// TODO: move this stuff to a "plugin"-related file...
-var INTERNAL_PLUGINS = [
- ArrayEventSourcePlugin,
- FuncEventSourcePlugin,
- JsonFeedEventSourcePlugin,
- SimpleRecurrencePlugin,
- DefaultOptionChangeHandlers
-];
-function refinePluginDefs(pluginInputs) {
- var plugins = [];
- for (var _i = 0, pluginInputs_1 = pluginInputs; _i < pluginInputs_1.length; _i++) {
- var pluginInput = pluginInputs_1[_i];
- if (typeof pluginInput === 'string') {
- var globalName = 'FullCalendar' + capitaliseFirstLetter(pluginInput);
- if (!window[globalName]) {
- console.warn('Plugin file not loaded for ' + pluginInput);
- }
- else {
- plugins.push(window[globalName].default); // is an ES6 module
- }
- }
- else {
- plugins.push(pluginInput);
- }
- }
- return INTERNAL_PLUGINS.concat(plugins);
-}
-
-var RAW_EN_LOCALE = {
- code: 'en',
- week: {
- dow: 0,
- doy: 4 // 4 days need to be within the year to be considered the first week
- },
- dir: 'ltr',
- buttonText: {
- prev: 'prev',
- next: 'next',
- prevYear: 'prev year',
- nextYear: 'next year',
- year: 'year',
- today: 'today',
- month: 'month',
- week: 'week',
- day: 'day',
- list: 'list'
- },
- weekLabel: 'W',
- allDayText: 'all-day',
- eventLimitText: 'more',
- noEventsMessage: 'No events to display'
-};
-function parseRawLocales(explicitRawLocales) {
- var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
- var globalArray = window['FullCalendarLocalesAll'] || []; // from locales-all.js
- var globalObject = window['FullCalendarLocales'] || {}; // from locales/*.js. keys are meaningless
- var allRawLocales = globalArray.concat(// globalArray is low prio
- hashValuesToArray(globalObject), // medium prio
- explicitRawLocales // highest prio
- );
- var rawLocaleMap = {
- en: RAW_EN_LOCALE // necessary?
- };
- for (var _i = 0, allRawLocales_1 = allRawLocales; _i < allRawLocales_1.length; _i++) {
- var rawLocale = allRawLocales_1[_i];
- rawLocaleMap[rawLocale.code] = rawLocale;
- }
- return {
- map: rawLocaleMap,
- defaultCode: defaultCode
- };
-}
-function buildLocale(inputSingular, available) {
- if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {
- return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);
- }
- else {
- return queryLocale(inputSingular, available);
- }
-}
-function queryLocale(codeArg, available) {
- var codes = [].concat(codeArg || []); // will convert to array
- var raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;
- return parseLocale(codeArg, codes, raw);
-}
-function queryRawLocale(codes, available) {
- for (var i = 0; i < codes.length; i++) {
- var parts = codes[i].toLocaleLowerCase().split('-');
- for (var j = parts.length; j > 0; j--) {
- var simpleId = parts.slice(0, j).join('-');
- if (available[simpleId]) {
- return available[simpleId];
- }
- }
- }
- return null;
-}
-function parseLocale(codeArg, codes, raw) {
- var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']);
- delete merged.code; // don't want this part of the options
- var week = merged.week;
- delete merged.week;
- return {
- codeArg: codeArg,
- codes: codes,
- week: week,
- simpleNumberFormat: new Intl.NumberFormat(codeArg),
- options: merged
- };
-}
-
-var OptionsManager = /** @class */ (function () {
- function OptionsManager(overrides) {
- this.overrides = __assign({}, overrides); // make a copy
- this.dynamicOverrides = {};
- this.compute();
- }
- OptionsManager.prototype.mutate = function (updates, removals, isDynamic) {
- if (!Object.keys(updates).length && !removals.length) {
- return;
- }
- var overrideHash = isDynamic ? this.dynamicOverrides : this.overrides;
- __assign(overrideHash, updates);
- for (var _i = 0, removals_1 = removals; _i < removals_1.length; _i++) {
- var propName = removals_1[_i];
- delete overrideHash[propName];
- }
- this.compute();
- };
- // Computes the flattened options hash for the calendar and assigns to `this.options`.
- // Assumes this.overrides and this.dynamicOverrides have already been initialized.
- OptionsManager.prototype.compute = function () {
- // TODO: not a very efficient system
- var locales = firstDefined(// explicit locale option given?
- this.dynamicOverrides.locales, this.overrides.locales, globalDefaults.locales);
- var locale = firstDefined(// explicit locales option given?
- this.dynamicOverrides.locale, this.overrides.locale, globalDefaults.locale);
- var available = parseRawLocales(locales);
- var localeDefaults = buildLocale(locale || available.defaultCode, available.map).options;
- var dir = firstDefined(// based on options computed so far, is direction RTL?
- this.dynamicOverrides.dir, this.overrides.dir, localeDefaults.dir);
- var dirDefaults = dir === 'rtl' ? rtlDefaults : {};
- this.dirDefaults = dirDefaults;
- this.localeDefaults = localeDefaults;
- this.computed = mergeOptions([
- globalDefaults,
- dirDefaults,
- localeDefaults,
- this.overrides,
- this.dynamicOverrides
- ]);
- };
- return OptionsManager;
-}());
-
-var calendarSystemClassMap = {};
-function registerCalendarSystem(name, theClass) {
- calendarSystemClassMap[name] = theClass;
-}
-function createCalendarSystem(name) {
- return new calendarSystemClassMap[name]();
-}
-var GregorianCalendarSystem = /** @class */ (function () {
- function GregorianCalendarSystem() {
- }
- GregorianCalendarSystem.prototype.getMarkerYear = function (d) {
- return d.getUTCFullYear();
- };
- GregorianCalendarSystem.prototype.getMarkerMonth = function (d) {
- return d.getUTCMonth();
- };
- GregorianCalendarSystem.prototype.getMarkerDay = function (d) {
- return d.getUTCDate();
- };
- GregorianCalendarSystem.prototype.arrayToMarker = function (arr) {
- return arrayToUtcDate(arr);
- };
- GregorianCalendarSystem.prototype.markerToArray = function (marker) {
- return dateToUtcArray(marker);
- };
- return GregorianCalendarSystem;
-}());
-registerCalendarSystem('gregory', GregorianCalendarSystem);
-
-var ISO_RE = /^\s*(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;
-function parse(str) {
- var m = ISO_RE.exec(str);
- if (m) {
- var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number('0.' + m[12]) * 1000 : 0));
- if (isValidDate(marker)) {
- var timeZoneOffset = null;
- if (m[13]) {
- timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +
- Number(m[18] || 0));
- }
- return {
- marker: marker,
- isTimeUnspecified: !m[6],
- timeZoneOffset: timeZoneOffset
- };
- }
- }
- return null;
-}
-
-var DateEnv = /** @class */ (function () {
- function DateEnv(settings) {
- var timeZone = this.timeZone = settings.timeZone;
- var isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';
- if (settings.namedTimeZoneImpl && isNamedTimeZone) {
- this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);
- }
- this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);
- this.calendarSystem = createCalendarSystem(settings.calendarSystem);
- this.locale = settings.locale;
- this.weekDow = settings.locale.week.dow;
- this.weekDoy = settings.locale.week.doy;
- if (settings.weekNumberCalculation === 'ISO') {
- this.weekDow = 1;
- this.weekDoy = 4;
- }
- if (typeof settings.firstDay === 'number') {
- this.weekDow = settings.firstDay;
- }
- if (typeof settings.weekNumberCalculation === 'function') {
- this.weekNumberFunc = settings.weekNumberCalculation;
- }
- this.weekLabel = settings.weekLabel != null ? settings.weekLabel : settings.locale.options.weekLabel;
- this.cmdFormatter = settings.cmdFormatter;
- }
- // Creating / Parsing
- DateEnv.prototype.createMarker = function (input) {
- var meta = this.createMarkerMeta(input);
- if (meta === null) {
- return null;
- }
- return meta.marker;
- };
- DateEnv.prototype.createNowMarker = function () {
- if (this.canComputeOffset) {
- return this.timestampToMarker(new Date().valueOf());
- }
- else {
- // if we can't compute the current date val for a timezone,
- // better to give the current local date vals than UTC
- return arrayToUtcDate(dateToLocalArray(new Date()));
- }
- };
- DateEnv.prototype.createMarkerMeta = function (input) {
- if (typeof input === 'string') {
- return this.parse(input);
- }
- var marker = null;
- if (typeof input === 'number') {
- marker = this.timestampToMarker(input);
- }
- else if (input instanceof Date) {
- input = input.valueOf();
- if (!isNaN(input)) {
- marker = this.timestampToMarker(input);
- }
- }
- else if (Array.isArray(input)) {
- marker = arrayToUtcDate(input);
- }
- if (marker === null || !isValidDate(marker)) {
- return null;
- }
- return { marker: marker, isTimeUnspecified: false, forcedTzo: null };
- };
- DateEnv.prototype.parse = function (s) {
- var parts = parse(s);
- if (parts === null) {
- return null;
- }
- var marker = parts.marker;
- var forcedTzo = null;
- if (parts.timeZoneOffset !== null) {
- if (this.canComputeOffset) {
- marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);
- }
- else {
- forcedTzo = parts.timeZoneOffset;
- }
- }
- return { marker: marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo: forcedTzo };
- };
- // Accessors
- DateEnv.prototype.getYear = function (marker) {
- return this.calendarSystem.getMarkerYear(marker);
- };
- DateEnv.prototype.getMonth = function (marker) {
- return this.calendarSystem.getMarkerMonth(marker);
- };
- // Adding / Subtracting
- DateEnv.prototype.add = function (marker, dur) {
- var a = this.calendarSystem.markerToArray(marker);
- a[0] += dur.years;
- a[1] += dur.months;
- a[2] += dur.days;
- a[6] += dur.milliseconds;
- return this.calendarSystem.arrayToMarker(a);
- };
- DateEnv.prototype.subtract = function (marker, dur) {
- var a = this.calendarSystem.markerToArray(marker);
- a[0] -= dur.years;
- a[1] -= dur.months;
- a[2] -= dur.days;
- a[6] -= dur.milliseconds;
- return this.calendarSystem.arrayToMarker(a);
- };
- DateEnv.prototype.addYears = function (marker, n) {
- var a = this.calendarSystem.markerToArray(marker);
- a[0] += n;
- return this.calendarSystem.arrayToMarker(a);
- };
- DateEnv.prototype.addMonths = function (marker, n) {
- var a = this.calendarSystem.markerToArray(marker);
- a[1] += n;
- return this.calendarSystem.arrayToMarker(a);
- };
- // Diffing Whole Units
- DateEnv.prototype.diffWholeYears = function (m0, m1) {
- var calendarSystem = this.calendarSystem;
- if (timeAsMs(m0) === timeAsMs(m1) &&
- calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&
- calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {
- return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);
- }
- return null;
- };
- DateEnv.prototype.diffWholeMonths = function (m0, m1) {
- var calendarSystem = this.calendarSystem;
- if (timeAsMs(m0) === timeAsMs(m1) &&
- calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {
- return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +
- (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;
- }
- return null;
- };
- // Range / Duration
- DateEnv.prototype.greatestWholeUnit = function (m0, m1) {
- var n = this.diffWholeYears(m0, m1);
- if (n !== null) {
- return { unit: 'year', value: n };
- }
- n = this.diffWholeMonths(m0, m1);
- if (n !== null) {
- return { unit: 'month', value: n };
- }
- n = diffWholeWeeks(m0, m1);
- if (n !== null) {
- return { unit: 'week', value: n };
- }
- n = diffWholeDays(m0, m1);
- if (n !== null) {
- return { unit: 'day', value: n };
- }
- n = diffHours(m0, m1);
- if (isInt(n)) {
- return { unit: 'hour', value: n };
- }
- n = diffMinutes(m0, m1);
- if (isInt(n)) {
- return { unit: 'minute', value: n };
- }
- n = diffSeconds(m0, m1);
- if (isInt(n)) {
- return { unit: 'second', value: n };
- }
- return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() };
- };
- DateEnv.prototype.countDurationsBetween = function (m0, m1, d) {
- // TODO: can use greatestWholeUnit
- var diff;
- if (d.years) {
- diff = this.diffWholeYears(m0, m1);
- if (diff !== null) {
- return diff / asRoughYears(d);
- }
- }
- if (d.months) {
- diff = this.diffWholeMonths(m0, m1);
- if (diff !== null) {
- return diff / asRoughMonths(d);
- }
- }
- if (d.days) {
- diff = diffWholeDays(m0, m1);
- if (diff !== null) {
- return diff / asRoughDays(d);
- }
- }
- return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);
- };
- // Start-Of
- DateEnv.prototype.startOf = function (m, unit) {
- if (unit === 'year') {
- return this.startOfYear(m);
- }
- else if (unit === 'month') {
- return this.startOfMonth(m);
- }
- else if (unit === 'week') {
- return this.startOfWeek(m);
- }
- else if (unit === 'day') {
- return startOfDay(m);
- }
- else if (unit === 'hour') {
- return startOfHour(m);
- }
- else if (unit === 'minute') {
- return startOfMinute(m);
- }
- else if (unit === 'second') {
- return startOfSecond(m);
- }
- };
- DateEnv.prototype.startOfYear = function (m) {
- return this.calendarSystem.arrayToMarker([
- this.calendarSystem.getMarkerYear(m)
- ]);
- };
- DateEnv.prototype.startOfMonth = function (m) {
- return this.calendarSystem.arrayToMarker([
- this.calendarSystem.getMarkerYear(m),
- this.calendarSystem.getMarkerMonth(m)
- ]);
- };
- DateEnv.prototype.startOfWeek = function (m) {
- return this.calendarSystem.arrayToMarker([
- this.calendarSystem.getMarkerYear(m),
- this.calendarSystem.getMarkerMonth(m),
- m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7)
- ]);
- };
- // Week Number
- DateEnv.prototype.computeWeekNumber = function (marker) {
- if (this.weekNumberFunc) {
- return this.weekNumberFunc(this.toDate(marker));
- }
- else {
- return weekOfYear(marker, this.weekDow, this.weekDoy);
- }
- };
- // TODO: choke on timeZoneName: long
- DateEnv.prototype.format = function (marker, formatter, dateOptions) {
- if (dateOptions === void 0) { dateOptions = {}; }
- return formatter.format({
- marker: marker,
- timeZoneOffset: dateOptions.forcedTzo != null ?
- dateOptions.forcedTzo :
- this.offsetForMarker(marker)
- }, this);
- };
- DateEnv.prototype.formatRange = function (start, end, formatter, dateOptions) {
- if (dateOptions === void 0) { dateOptions = {}; }
- if (dateOptions.isEndExclusive) {
- end = addMs(end, -1);
- }
- return formatter.formatRange({
- marker: start,
- timeZoneOffset: dateOptions.forcedStartTzo != null ?
- dateOptions.forcedStartTzo :
- this.offsetForMarker(start)
- }, {
- marker: end,
- timeZoneOffset: dateOptions.forcedEndTzo != null ?
- dateOptions.forcedEndTzo :
- this.offsetForMarker(end)
- }, this);
- };
- DateEnv.prototype.formatIso = function (marker, extraOptions) {
- if (extraOptions === void 0) { extraOptions = {}; }
- var timeZoneOffset = null;
- if (!extraOptions.omitTimeZoneOffset) {
- if (extraOptions.forcedTzo != null) {
- timeZoneOffset = extraOptions.forcedTzo;
- }
- else {
- timeZoneOffset = this.offsetForMarker(marker);
- }
- }
- return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);
- };
- // TimeZone
- DateEnv.prototype.timestampToMarker = function (ms) {
- if (this.timeZone === 'local') {
- return arrayToUtcDate(dateToLocalArray(new Date(ms)));
- }
- else if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {
- return new Date(ms);
- }
- else {
- return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));
- }
- };
- DateEnv.prototype.offsetForMarker = function (m) {
- if (this.timeZone === 'local') {
- return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert "inverse" offset to "normal" offset
- }
- else if (this.timeZone === 'UTC') {
- return 0;
- }
- else if (this.namedTimeZoneImpl) {
- return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));
- }
- return null;
- };
- // Conversion
- DateEnv.prototype.toDate = function (m, forcedTzo) {
- if (this.timeZone === 'local') {
- return arrayToLocalDate(dateToUtcArray(m));
- }
- else if (this.timeZone === 'UTC') {
- return new Date(m.valueOf()); // make sure it's a copy
- }
- else if (!this.namedTimeZoneImpl) {
- return new Date(m.valueOf() - (forcedTzo || 0));
- }
- else {
- return new Date(m.valueOf() -
- this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60 // convert minutes -> ms
- );
- }
- };
- return DateEnv;
-}());
-
-var SIMPLE_SOURCE_PROPS = {
- id: String,
- allDayDefault: Boolean,
- eventDataTransform: Function,
- success: Function,
- failure: Function
-};
-var uid$2 = 0;
-function doesSourceNeedRange(eventSource, calendar) {
- var defs = calendar.pluginSystem.hooks.eventSourceDefs;
- return !defs[eventSource.sourceDefId].ignoreRange;
-}
-function parseEventSource(raw, calendar) {
- var defs = calendar.pluginSystem.hooks.eventSourceDefs;
- for (var i = defs.length - 1; i >= 0; i--) { // later-added plugins take precedence
- var def = defs[i];
- var meta = def.parseMeta(raw);
- if (meta) {
- var res = parseEventSourceProps(typeof raw === 'object' ? raw : {}, meta, i, calendar);
- res._raw = raw;
- return res;
- }
- }
- return null;
-}
-function parseEventSourceProps(raw, meta, sourceDefId, calendar) {
- var leftovers0 = {};
- var props = refineProps(raw, SIMPLE_SOURCE_PROPS, {}, leftovers0);
- var leftovers1 = {};
- var ui = processUnscopedUiProps(leftovers0, calendar, leftovers1);
- props.isFetching = false;
- props.latestFetchId = '';
- props.fetchRange = null;
- props.publicId = String(raw.id || '');
- props.sourceId = String(uid$2++);
- props.sourceDefId = sourceDefId;
- props.meta = meta;
- props.ui = ui;
- props.extendedProps = leftovers1;
- return props;
-}
-
-function reduceEventSources (eventSources, action, dateProfile, calendar) {
- switch (action.type) {
- case 'ADD_EVENT_SOURCES': // already parsed
- return addSources(eventSources, action.sources, dateProfile ? dateProfile.activeRange : null, calendar);
- case 'REMOVE_EVENT_SOURCE':
- return removeSource(eventSources, action.sourceId);
- case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
- case 'NEXT':
- case 'SET_DATE':
- case 'SET_VIEW_TYPE':
- if (dateProfile) {
- return fetchDirtySources(eventSources, dateProfile.activeRange, calendar);
- }
- else {
- return eventSources;
- }
- case 'FETCH_EVENT_SOURCES':
- case 'CHANGE_TIMEZONE':
- return fetchSourcesByIds(eventSources, action.sourceIds ?
- arrayToHash(action.sourceIds) :
- excludeStaticSources(eventSources, calendar), dateProfile ? dateProfile.activeRange : null, calendar);
- case 'RECEIVE_EVENTS':
- case 'RECEIVE_EVENT_ERROR':
- return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
- case 'REMOVE_ALL_EVENT_SOURCES':
- return {};
- default:
- return eventSources;
- }
-}
-var uid$3 = 0;
-function addSources(eventSourceHash, sources, fetchRange, calendar) {
- var hash = {};
- for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {
- var source = sources_1[_i];
- hash[source.sourceId] = source;
- }
- if (fetchRange) {
- hash = fetchDirtySources(hash, fetchRange, calendar);
- }
- return __assign({}, eventSourceHash, hash);
-}
-function removeSource(eventSourceHash, sourceId) {
- return filterHash(eventSourceHash, function (eventSource) {
- return eventSource.sourceId !== sourceId;
- });
-}
-function fetchDirtySources(sourceHash, fetchRange, calendar) {
- return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) {
- return isSourceDirty(eventSource, fetchRange, calendar);
- }), fetchRange, calendar);
-}
-function isSourceDirty(eventSource, fetchRange, calendar) {
- if (!doesSourceNeedRange(eventSource, calendar)) {
- return !eventSource.latestFetchId;
- }
- else {
- return !calendar.opt('lazyFetching') ||
- !eventSource.fetchRange ||
- eventSource.isFetching || // always cancel outdated in-progress fetches
- fetchRange.start < eventSource.fetchRange.start ||
- fetchRange.end > eventSource.fetchRange.end;
- }
-}
-function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, calendar) {
- var nextSources = {};
- for (var sourceId in prevSources) {
- var source = prevSources[sourceId];
- if (sourceIdHash[sourceId]) {
- nextSources[sourceId] = fetchSource(source, fetchRange, calendar);
- }
- else {
- nextSources[sourceId] = source;
- }
- }
- return nextSources;
-}
-function fetchSource(eventSource, fetchRange, calendar) {
- var sourceDef = calendar.pluginSystem.hooks.eventSourceDefs[eventSource.sourceDefId];
- var fetchId = String(uid$3++);
- sourceDef.fetch({
- eventSource: eventSource,
- calendar: calendar,
- range: fetchRange
- }, function (res) {
- var rawEvents = res.rawEvents;
- var calSuccess = calendar.opt('eventSourceSuccess');
- var calSuccessRes;
- var sourceSuccessRes;
- if (eventSource.success) {
- sourceSuccessRes = eventSource.success(rawEvents, res.xhr);
- }
- if (calSuccess) {
- calSuccessRes = calSuccess(rawEvents, res.xhr);
- }
- rawEvents = sourceSuccessRes || calSuccessRes || rawEvents;
- calendar.dispatch({
- type: 'RECEIVE_EVENTS',
- sourceId: eventSource.sourceId,
- fetchId: fetchId,
- fetchRange: fetchRange,
- rawEvents: rawEvents
- });
- }, function (error) {
- var callFailure = calendar.opt('eventSourceFailure');
- console.warn(error.message, error);
- if (eventSource.failure) {
- eventSource.failure(error);
- }
- if (callFailure) {
- callFailure(error);
- }
- calendar.dispatch({
- type: 'RECEIVE_EVENT_ERROR',
- sourceId: eventSource.sourceId,
- fetchId: fetchId,
- fetchRange: fetchRange,
- error: error
- });
- });
- return __assign({}, eventSource, { isFetching: true, latestFetchId: fetchId });
-}
-function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
- var _a;
- var eventSource = sourceHash[sourceId];
- if (eventSource && // not already removed
- fetchId === eventSource.latestFetchId) {
- return __assign({}, sourceHash, (_a = {}, _a[sourceId] = __assign({}, eventSource, { isFetching: false, fetchRange: fetchRange // also serves as a marker that at least one fetch has completed
- }), _a));
- }
- return sourceHash;
-}
-function excludeStaticSources(eventSources, calendar) {
- return filterHash(eventSources, function (eventSource) {
- return doesSourceNeedRange(eventSource, calendar);
- });
-}
-
-var DateProfileGenerator = /** @class */ (function () {
- function DateProfileGenerator(viewSpec, calendar) {
- this.viewSpec = viewSpec;
- this.options = viewSpec.options;
- this.dateEnv = calendar.dateEnv;
- this.calendar = calendar;
- this.initHiddenDays();
- }
- /* Date Range Computation
- ------------------------------------------------------------------------------------------------------------------*/
- // Builds a structure with info about what the dates/ranges will be for the "prev" view.
- DateProfileGenerator.prototype.buildPrev = function (currentDateProfile, currentDate) {
- var dateEnv = this.dateEnv;
- var prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
- currentDateProfile.dateIncrement);
- return this.build(prevDate, -1);
- };
- // Builds a structure with info about what the dates/ranges will be for the "next" view.
- DateProfileGenerator.prototype.buildNext = function (currentDateProfile, currentDate) {
- var dateEnv = this.dateEnv;
- var nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
- currentDateProfile.dateIncrement);
- return this.build(nextDate, 1);
- };
- // Builds a structure holding dates/ranges for rendering around the given date.
- // Optional direction param indicates whether the date is being incremented/decremented
- // from its previous value. decremented = -1, incremented = 1 (default).
- DateProfileGenerator.prototype.build = function (currentDate, direction, forceToValid) {
- if (forceToValid === void 0) { forceToValid = false; }
- var validRange;
- var minTime = null;
- var maxTime = null;
- var currentInfo;
- var isRangeAllDay;
- var renderRange;
- var activeRange;
- var isValid;
- validRange = this.buildValidRange();
- validRange = this.trimHiddenDays(validRange);
- if (forceToValid) {
- currentDate = constrainMarkerToRange(currentDate, validRange);
- }
- currentInfo = this.buildCurrentRangeInfo(currentDate, direction);
- isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);
- renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);
- renderRange = this.trimHiddenDays(renderRange);
- activeRange = renderRange;
- if (!this.options.showNonCurrentDates) {
- activeRange = intersectRanges(activeRange, currentInfo.range);
- }
- minTime = createDuration(this.options.minTime);
- maxTime = createDuration(this.options.maxTime);
- activeRange = this.adjustActiveRange(activeRange, minTime, maxTime);
- activeRange = intersectRanges(activeRange, validRange); // might return null
- // it's invalid if the originally requested date is not contained,
- // or if the range is completely outside of the valid range.
- isValid = rangesIntersect(currentInfo.range, validRange);
- return {
- // constraint for where prev/next operations can go and where events can be dragged/resized to.
- // an object with optional start and end properties.
- validRange: validRange,
- // range the view is formally responsible for.
- // for example, a month view might have 1st-31st, excluding padded dates
- currentRange: currentInfo.range,
- // name of largest unit being displayed, like "month" or "week"
- currentRangeUnit: currentInfo.unit,
- isRangeAllDay: isRangeAllDay,
- // dates that display events and accept drag-n-drop
- // will be `null` if no dates accept events
- activeRange: activeRange,
- // date range with a rendered skeleton
- // includes not-active days that need some sort of DOM
- renderRange: renderRange,
- // Duration object that denotes the first visible time of any given day
- minTime: minTime,
- // Duration object that denotes the exclusive visible end time of any given day
- maxTime: maxTime,
- isValid: isValid,
- // how far the current date will move for a prev/next operation
- dateIncrement: this.buildDateIncrement(currentInfo.duration)
- // pass a fallback (might be null) ^
- };
- };
- // Builds an object with optional start/end properties.
- // Indicates the minimum/maximum dates to display.
- // not responsible for trimming hidden days.
- DateProfileGenerator.prototype.buildValidRange = function () {
- return this.getRangeOption('validRange', this.calendar.getNow()) ||
- { start: null, end: null }; // completely open-ended
- };
- // Builds a structure with info about the "current" range, the range that is
- // highlighted as being the current month for example.
- // See build() for a description of `direction`.
- // Guaranteed to have `range` and `unit` properties. `duration` is optional.
- DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {
- var _a = this, viewSpec = _a.viewSpec, dateEnv = _a.dateEnv;
- var duration = null;
- var unit = null;
- var range = null;
- var dayCount;
- if (viewSpec.duration) {
- duration = viewSpec.duration;
- unit = viewSpec.durationUnit;
- range = this.buildRangeFromDuration(date, direction, duration, unit);
- }
- else if ((dayCount = this.options.dayCount)) {
- unit = 'day';
- range = this.buildRangeFromDayCount(date, direction, dayCount);
- }
- else if ((range = this.buildCustomVisibleRange(date))) {
- unit = dateEnv.greatestWholeUnit(range.start, range.end).unit;
- }
- else {
- duration = this.getFallbackDuration();
- unit = greatestDurationDenominator(duration).unit;
- range = this.buildRangeFromDuration(date, direction, duration, unit);
- }
- return { duration: duration, unit: unit, range: range };
- };
- DateProfileGenerator.prototype.getFallbackDuration = function () {
- return createDuration({ day: 1 });
- };
- // Returns a new activeRange to have time values (un-ambiguate)
- // minTime or maxTime causes the range to expand.
- DateProfileGenerator.prototype.adjustActiveRange = function (range, minTime, maxTime) {
- var dateEnv = this.dateEnv;
- var start = range.start;
- var end = range.end;
- if (this.viewSpec.class.prototype.usesMinMaxTime) {
- // expand active range if minTime is negative (why not when positive?)
- if (asRoughDays(minTime) < 0) {
- start = startOfDay(start); // necessary?
- start = dateEnv.add(start, minTime);
- }
- // expand active range if maxTime is beyond one day (why not when positive?)
- if (asRoughDays(maxTime) > 1) {
- end = startOfDay(end); // necessary?
- end = addDays(end, -1);
- end = dateEnv.add(end, maxTime);
- }
- }
- return { start: start, end: end };
- };
- // Builds the "current" range when it is specified as an explicit duration.
- // `unit` is the already-computed greatestDurationDenominator unit of duration.
- DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {
- var dateEnv = this.dateEnv;
- var alignment = this.options.dateAlignment;
- var dateIncrementInput;
- var dateIncrementDuration;
- var start;
- var end;
- var res;
- // compute what the alignment should be
- if (!alignment) {
- dateIncrementInput = this.options.dateIncrement;
- if (dateIncrementInput) {
- dateIncrementDuration = createDuration(dateIncrementInput);
- // use the smaller of the two units
- if (asRoughMs(dateIncrementDuration) < asRoughMs(duration)) {
- alignment = greatestDurationDenominator(dateIncrementDuration, !getWeeksFromInput(dateIncrementInput)).unit;
- }
- else {
- alignment = unit;
- }
- }
- else {
- alignment = unit;
- }
- }
- // if the view displays a single day or smaller
- if (asRoughDays(duration) <= 1) {
- if (this.isHiddenDay(start)) {
- start = this.skipHiddenDays(start, direction);
- start = startOfDay(start);
- }
- }
- function computeRes() {
- start = dateEnv.startOf(date, alignment);
- end = dateEnv.add(start, duration);
- res = { start: start, end: end };
- }
- computeRes();
- // if range is completely enveloped by hidden days, go past the hidden days
- if (!this.trimHiddenDays(res)) {
- date = this.skipHiddenDays(date, direction);
- computeRes();
- }
- return res;
- };
- // Builds the "current" range when a dayCount is specified.
- DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {
- var dateEnv = this.dateEnv;
- var customAlignment = this.options.dateAlignment;
- var runningCount = 0;
- var start = date;
- var end;
- if (customAlignment) {
- start = dateEnv.startOf(start, customAlignment);
- }
- start = startOfDay(start);
- start = this.skipHiddenDays(start, direction);
- end = start;
- do {
- end = addDays(end, 1);
- if (!this.isHiddenDay(end)) {
- runningCount++;
- }
- } while (runningCount < dayCount);
- return { start: start, end: end };
- };
- // Builds a normalized range object for the "visible" range,
- // which is a way to define the currentRange and activeRange at the same time.
- DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {
- var dateEnv = this.dateEnv;
- var visibleRange = this.getRangeOption('visibleRange', dateEnv.toDate(date));
- if (visibleRange && (visibleRange.start == null || visibleRange.end == null)) {
- return null;
- }
- return visibleRange;
- };
- // Computes the range that will represent the element/cells for *rendering*,
- // but which may have voided days/times.
- // not responsible for trimming hidden days.
- DateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
- return currentRange;
- };
- // Compute the duration value that should be added/substracted to the current date
- // when a prev/next operation happens.
- DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {
- var dateIncrementInput = this.options.dateIncrement;
- var customAlignment;
- if (dateIncrementInput) {
- return createDuration(dateIncrementInput);
- }
- else if ((customAlignment = this.options.dateAlignment)) {
- return createDuration(1, customAlignment);
- }
- else if (fallback) {
- return fallback;
- }
- else {
- return createDuration({ days: 1 });
- }
- };
- // Arguments after name will be forwarded to a hypothetical function value
- // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.
- // Always clone your objects if you fear mutation.
- DateProfileGenerator.prototype.getRangeOption = function (name) {
- var otherArgs = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- otherArgs[_i - 1] = arguments[_i];
- }
- var val = this.options[name];
- if (typeof val === 'function') {
- val = val.apply(null, otherArgs);
- }
- if (val) {
- val = parseRange(val, this.dateEnv);
- }
- if (val) {
- val = computeVisibleDayRange(val);
- }
- return val;
- };
- /* Hidden Days
- ------------------------------------------------------------------------------------------------------------------*/
- // Initializes internal variables related to calculating hidden days-of-week
- DateProfileGenerator.prototype.initHiddenDays = function () {
- var hiddenDays = this.options.hiddenDays || []; // array of day-of-week indices that are hidden
- var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)
- var dayCnt = 0;
- var i;
- if (this.options.weekends === false) {
- hiddenDays.push(0, 6); // 0=sunday, 6=saturday
- }
- for (i = 0; i < 7; i++) {
- if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {
- dayCnt++;
- }
- }
- if (!dayCnt) {
- throw new Error('invalid hiddenDays'); // all days were hidden? bad.
- }
- this.isHiddenDayHash = isHiddenDayHash;
- };
- // Remove days from the beginning and end of the range that are computed as hidden.
- // If the whole range is trimmed off, returns null
- DateProfileGenerator.prototype.trimHiddenDays = function (range) {
- var start = range.start;
- var end = range.end;
- if (start) {
- start = this.skipHiddenDays(start);
- }
- if (end) {
- end = this.skipHiddenDays(end, -1, true);
- }
- if (start == null || end == null || start < end) {
- return { start: start, end: end };
- }
- return null;
- };
- // Is the current day hidden?
- // `day` is a day-of-week index (0-6), or a Date (used for UTC)
- DateProfileGenerator.prototype.isHiddenDay = function (day) {
- if (day instanceof Date) {
- day = day.getUTCDay();
- }
- return this.isHiddenDayHash[day];
- };
- // Incrementing the current day until it is no longer a hidden day, returning a copy.
- // DOES NOT CONSIDER validRange!
- // If the initial value of `date` is not a hidden day, don't do anything.
- // Pass `isExclusive` as `true` if you are dealing with an end date.
- // `inc` defaults to `1` (increment one day forward each time)
- DateProfileGenerator.prototype.skipHiddenDays = function (date, inc, isExclusive) {
- if (inc === void 0) { inc = 1; }
- if (isExclusive === void 0) { isExclusive = false; }
- while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {
- date = addDays(date, inc);
- }
- return date;
- };
- return DateProfileGenerator;
-}());
-// TODO: find a way to avoid comparing DateProfiles. it's tedious
-function isDateProfilesEqual(p0, p1) {
- return rangesEqual(p0.validRange, p1.validRange) &&
- rangesEqual(p0.activeRange, p1.activeRange) &&
- rangesEqual(p0.renderRange, p1.renderRange) &&
- durationsEqual(p0.minTime, p1.minTime) &&
- durationsEqual(p0.maxTime, p1.maxTime);
- /*
- TODO: compare more?
- currentRange: DateRange
- currentRangeUnit: string
- isRangeAllDay: boolean
- isValid: boolean
- dateIncrement: Duration
- */
-}
-
-function reduce (state, action, calendar) {
- var viewType = reduceViewType(state.viewType, action);
- var dateProfile = reduceDateProfile(state.dateProfile, action, state.currentDate, viewType, calendar);
- var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendar);
- var nextState = __assign({}, state, { viewType: viewType,
- dateProfile: dateProfile, currentDate: reduceCurrentDate(state.currentDate, action, dateProfile), eventSources: eventSources, eventStore: reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendar), dateSelection: reduceDateSelection(state.dateSelection, action, calendar), eventSelection: reduceSelectedEvent(state.eventSelection, action), eventDrag: reduceEventDrag(state.eventDrag, action, eventSources, calendar), eventResize: reduceEventResize(state.eventResize, action, eventSources, calendar), eventSourceLoadingLevel: computeLoadingLevel(eventSources), loadingLevel: computeLoadingLevel(eventSources) });
- for (var _i = 0, _a = calendar.pluginSystem.hooks.reducers; _i < _a.length; _i++) {
- var reducerFunc = _a[_i];
- nextState = reducerFunc(nextState, action, calendar);
- }
- // console.log(action.type, nextState)
- return nextState;
-}
-function reduceViewType(currentViewType, action) {
- switch (action.type) {
- case 'SET_VIEW_TYPE':
- return action.viewType;
- default:
- return currentViewType;
- }
-}
-function reduceDateProfile(currentDateProfile, action, currentDate, viewType, calendar) {
- var newDateProfile;
- switch (action.type) {
- case 'PREV':
- newDateProfile = calendar.dateProfileGenerators[viewType].buildPrev(currentDateProfile, currentDate);
- break;
- case 'NEXT':
- newDateProfile = calendar.dateProfileGenerators[viewType].buildNext(currentDateProfile, currentDate);
- break;
- case 'SET_DATE':
- if (!currentDateProfile.activeRange ||
- !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker)) {
- newDateProfile = calendar.dateProfileGenerators[viewType].build(action.dateMarker, undefined, true // forceToValid
- );
- }
- break;
- case 'SET_VIEW_TYPE':
- var generator = calendar.dateProfileGenerators[viewType];
- if (!generator) {
- throw new Error(viewType ?
- 'The FullCalendar view "' + viewType + '" does not exist. Make sure your plugins are loaded correctly.' :
- 'No available FullCalendar view plugins.');
- }
- newDateProfile = generator.build(action.dateMarker || currentDate, undefined, true // forceToValid
- );
- break;
- }
- if (newDateProfile &&
- newDateProfile.isValid &&
- !(currentDateProfile && isDateProfilesEqual(currentDateProfile, newDateProfile))) {
- return newDateProfile;
- }
- else {
- return currentDateProfile;
- }
-}
-function reduceCurrentDate(currentDate, action, dateProfile) {
- switch (action.type) {
- case 'PREV':
- case 'NEXT':
- if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) {
- return dateProfile.currentRange.start;
- }
- else {
- return currentDate;
- }
- case 'SET_DATE':
- case 'SET_VIEW_TYPE':
- var newDate = action.dateMarker || currentDate;
- if (dateProfile.activeRange && !rangeContainsMarker(dateProfile.activeRange, newDate)) {
- return dateProfile.currentRange.start;
- }
- else {
- return newDate;
- }
- default:
- return currentDate;
- }
-}
-function reduceDateSelection(currentSelection, action, calendar) {
- switch (action.type) {
- case 'SELECT_DATES':
- return action.selection;
- case 'UNSELECT_DATES':
- return null;
- default:
- return currentSelection;
- }
-}
-function reduceSelectedEvent(currentInstanceId, action) {
- switch (action.type) {
- case 'SELECT_EVENT':
- return action.eventInstanceId;
- case 'UNSELECT_EVENT':
- return '';
- default:
- return currentInstanceId;
- }
-}
-function reduceEventDrag(currentDrag, action, sources, calendar) {
- switch (action.type) {
- case 'SET_EVENT_DRAG':
- var newDrag = action.state;
- return {
- affectedEvents: newDrag.affectedEvents,
- mutatedEvents: newDrag.mutatedEvents,
- isEvent: newDrag.isEvent,
- origSeg: newDrag.origSeg
- };
- case 'UNSET_EVENT_DRAG':
- return null;
- default:
- return currentDrag;
- }
-}
-function reduceEventResize(currentResize, action, sources, calendar) {
- switch (action.type) {
- case 'SET_EVENT_RESIZE':
- var newResize = action.state;
- return {
- affectedEvents: newResize.affectedEvents,
- mutatedEvents: newResize.mutatedEvents,
- isEvent: newResize.isEvent,
- origSeg: newResize.origSeg
- };
- case 'UNSET_EVENT_RESIZE':
- return null;
- default:
- return currentResize;
- }
-}
-function computeLoadingLevel(eventSources) {
- var cnt = 0;
- for (var sourceId in eventSources) {
- if (eventSources[sourceId].isFetching) {
- cnt++;
- }
- }
- return cnt;
-}
-
-var STANDARD_PROPS = {
- start: null,
- end: null,
- allDay: Boolean
-};
-function parseDateSpan(raw, dateEnv, defaultDuration) {
- var span = parseOpenDateSpan(raw, dateEnv);
- var range = span.range;
- if (!range.start) {
- return null;
- }
- if (!range.end) {
- if (defaultDuration == null) {
- return null;
- }
- else {
- range.end = dateEnv.add(range.start, defaultDuration);
- }
- }
- return span;
-}
-/*
-TODO: somehow combine with parseRange?
-Will return null if the start/end props were present but parsed invalidly.
-*/
-function parseOpenDateSpan(raw, dateEnv) {
- var leftovers = {};
- var standardProps = refineProps(raw, STANDARD_PROPS, {}, leftovers);
- var startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;
- var endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;
- var allDay = standardProps.allDay;
- if (allDay == null) {
- allDay = (startMeta && startMeta.isTimeUnspecified) &&
- (!endMeta || endMeta.isTimeUnspecified);
- }
- // use this leftover object as the selection object
- leftovers.range = {
- start: startMeta ? startMeta.marker : null,
- end: endMeta ? endMeta.marker : null
- };
- leftovers.allDay = allDay;
- return leftovers;
-}
-function isDateSpansEqual(span0, span1) {
- return rangesEqual(span0.range, span1.range) &&
- span0.allDay === span1.allDay &&
- isSpanPropsEqual(span0, span1);
-}
-// the NON-DATE-RELATED props
-function isSpanPropsEqual(span0, span1) {
- for (var propName in span1) {
- if (propName !== 'range' && propName !== 'allDay') {
- if (span0[propName] !== span1[propName]) {
- return false;
- }
- }
- }
- // are there any props that span0 has that span1 DOESN'T have?
- // both have range/allDay, so no need to special-case.
- for (var propName in span0) {
- if (!(propName in span1)) {
- return false;
- }
- }
- return true;
-}
-function buildDateSpanApi(span, dateEnv) {
- return {
- start: dateEnv.toDate(span.range.start),
- end: dateEnv.toDate(span.range.end),
- startStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),
- endStr: dateEnv.formatIso(span.range.end, { omitTime: span.allDay }),
- allDay: span.allDay
- };
-}
-function buildDatePointApi(span, dateEnv) {
- return {
- date: dateEnv.toDate(span.range.start),
- dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),
- allDay: span.allDay
- };
-}
-function fabricateEventRange(dateSpan, eventUiBases, calendar) {
- var def = parseEventDef({ editable: false }, '', // sourceId
- dateSpan.allDay, true, // hasEnd
- calendar);
- return {
- def: def,
- ui: compileEventUi(def, eventUiBases),
- instance: createEventInstance(def.defId, dateSpan.range),
- range: dateSpan.range,
- isStart: true,
- isEnd: true
- };
-}
-
-function compileViewDefs(defaultConfigs, overrideConfigs) {
- var hash = {};
- var viewType;
- for (viewType in defaultConfigs) {
- ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
- }
- for (viewType in overrideConfigs) {
- ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
- }
- return hash;
-}
-function ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
- if (hash[viewType]) {
- return hash[viewType];
- }
- var viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);
- if (viewDef) {
- hash[viewType] = viewDef;
- }
- return viewDef;
-}
-function buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
- var defaultConfig = defaultConfigs[viewType];
- var overrideConfig = overrideConfigs[viewType];
- var queryProp = function (name) {
- return (defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :
- ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null);
- };
- var theClass = queryProp('class');
- var superType = queryProp('superType');
- if (!superType && theClass) {
- superType =
- findViewNameBySubclass(theClass, overrideConfigs) ||
- findViewNameBySubclass(theClass, defaultConfigs);
- }
- var superDef = null;
- if (superType) {
- if (superType === viewType) {
- throw new Error('Can\'t have a custom view type that references itself');
- }
- superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);
- }
- if (!theClass && superDef) {
- theClass = superDef.class;
- }
- if (!theClass) {
- return null; // don't throw a warning, might be settings for a single-unit view
- }
- return {
- type: viewType,
- class: theClass,
- defaults: __assign({}, (superDef ? superDef.defaults : {}), (defaultConfig ? defaultConfig.options : {})),
- overrides: __assign({}, (superDef ? superDef.overrides : {}), (overrideConfig ? overrideConfig.options : {}))
- };
-}
-function findViewNameBySubclass(viewSubclass, configs) {
- var superProto = Object.getPrototypeOf(viewSubclass.prototype);
- for (var viewType in configs) {
- var parsed = configs[viewType];
- // need DIRECT subclass, so instanceof won't do it
- if (parsed.class && parsed.class.prototype === superProto) {
- return viewType;
- }
- }
- return '';
-}
-
-function parseViewConfigs(inputs) {
- return mapHash(inputs, parseViewConfig);
-}
-var VIEW_DEF_PROPS = {
- type: String,
- class: null
-};
-function parseViewConfig(input) {
- if (typeof input === 'function') {
- input = { class: input };
- }
- var options = {};
- var props = refineProps(input, VIEW_DEF_PROPS, {}, options);
- return {
- superType: props.type,
- class: props.class,
- options: options
- };
-}
-
-function buildViewSpecs(defaultInputs, optionsManager) {
- var defaultConfigs = parseViewConfigs(defaultInputs);
- var overrideConfigs = parseViewConfigs(optionsManager.overrides.views);
- var viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);
- return mapHash(viewDefs, function (viewDef) {
- return buildViewSpec(viewDef, overrideConfigs, optionsManager);
- });
-}
-function buildViewSpec(viewDef, overrideConfigs, optionsManager) {
- var durationInput = viewDef.overrides.duration ||
- viewDef.defaults.duration ||
- optionsManager.dynamicOverrides.duration ||
- optionsManager.overrides.duration;
- var duration = null;
- var durationUnit = '';
- var singleUnit = '';
- var singleUnitOverrides = {};
- if (durationInput) {
- duration = createDuration(durationInput);
- if (duration) { // valid?
- var denom = greatestDurationDenominator(duration, !getWeeksFromInput(durationInput));
- durationUnit = denom.unit;
- if (denom.value === 1) {
- singleUnit = durationUnit;
- singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].options : {};
- }
- }
- }
- var queryButtonText = function (options) {
- var buttonTextMap = options.buttonText || {};
- var buttonTextKey = viewDef.defaults.buttonTextKey;
- if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {
- return buttonTextMap[buttonTextKey];
- }
- if (buttonTextMap[viewDef.type] != null) {
- return buttonTextMap[viewDef.type];
- }
- if (buttonTextMap[singleUnit] != null) {
- return buttonTextMap[singleUnit];
- }
- };
- return {
- type: viewDef.type,
- class: viewDef.class,
- duration: duration,
- durationUnit: durationUnit,
- singleUnit: singleUnit,
- options: __assign({}, globalDefaults, viewDef.defaults, optionsManager.dirDefaults, optionsManager.localeDefaults, optionsManager.overrides, singleUnitOverrides, viewDef.overrides, optionsManager.dynamicOverrides),
- buttonTextOverride: queryButtonText(optionsManager.dynamicOverrides) ||
- queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence
- viewDef.overrides.buttonText,
- buttonTextDefault: queryButtonText(optionsManager.localeDefaults) ||
- queryButtonText(optionsManager.dirDefaults) ||
- viewDef.defaults.buttonText ||
- queryButtonText(globalDefaults) ||
- viewDef.type // fall back to given view name
- };
-}
-
-var Toolbar = /** @class */ (function (_super) {
- __extends(Toolbar, _super);
- function Toolbar(extraClassName) {
- var _this = _super.call(this) || this;
- _this._renderLayout = memoizeRendering(_this.renderLayout, _this.unrenderLayout);
- _this._updateTitle = memoizeRendering(_this.updateTitle, null, [_this._renderLayout]);
- _this._updateActiveButton = memoizeRendering(_this.updateActiveButton, null, [_this._renderLayout]);
- _this._updateToday = memoizeRendering(_this.updateToday, null, [_this._renderLayout]);
- _this._updatePrev = memoizeRendering(_this.updatePrev, null, [_this._renderLayout]);
- _this._updateNext = memoizeRendering(_this.updateNext, null, [_this._renderLayout]);
- _this.el = createElement('div', { className: 'fc-toolbar ' + extraClassName });
- return _this;
- }
- Toolbar.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this._renderLayout.unrender(); // should unrender everything else
- removeElement(this.el);
- };
- Toolbar.prototype.render = function (props) {
- this._renderLayout(props.layout);
- this._updateTitle(props.title);
- this._updateActiveButton(props.activeButton);
- this._updateToday(props.isTodayEnabled);
- this._updatePrev(props.isPrevEnabled);
- this._updateNext(props.isNextEnabled);
- };
- Toolbar.prototype.renderLayout = function (layout) {
- var el = this.el;
- this.viewsWithButtons = [];
- appendToElement(el, this.renderSection('left', layout.left));
- appendToElement(el, this.renderSection('center', layout.center));
- appendToElement(el, this.renderSection('right', layout.right));
- };
- Toolbar.prototype.unrenderLayout = function () {
- this.el.innerHTML = '';
- };
- Toolbar.prototype.renderSection = function (position, buttonStr) {
- var _this = this;
- var _a = this.context, theme = _a.theme, calendar = _a.calendar;
- var optionsManager = calendar.optionsManager;
- var viewSpecs = calendar.viewSpecs;
- var sectionEl = createElement('div', { className: 'fc-' + position });
- var calendarCustomButtons = optionsManager.computed.customButtons || {};
- var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};
- var calendarButtonText = optionsManager.computed.buttonText || {};
- if (buttonStr) {
- buttonStr.split(' ').forEach(function (buttonGroupStr, i) {
- var groupChildren = [];
- var isOnlyButtons = true;
- var groupEl;
- buttonGroupStr.split(',').forEach(function (buttonName, j) {
- var customButtonProps;
- var viewSpec;
- var buttonClick;
- var buttonIcon; // only one of these will be set
- var buttonText; // "
- var buttonInnerHtml;
- var buttonClasses;
- var buttonEl;
- var buttonAriaAttr;
- if (buttonName === 'title') {
- groupChildren.push(htmlToElement('<h2>&nbsp;</h2>')); // we always want it to take up height
- isOnlyButtons = false;
- }
- else {
- if ((customButtonProps = calendarCustomButtons[buttonName])) {
- buttonClick = function (ev) {
- if (customButtonProps.click) {
- customButtonProps.click.call(buttonEl, ev);
- }
- };
- (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||
- (buttonIcon = theme.getIconClass(buttonName)) ||
- (buttonText = customButtonProps.text);
- }
- else if ((viewSpec = viewSpecs[buttonName])) {
- _this.viewsWithButtons.push(buttonName);
- buttonClick = function () {
- calendar.changeView(buttonName);
- };
- (buttonText = viewSpec.buttonTextOverride) ||
- (buttonIcon = theme.getIconClass(buttonName)) ||
- (buttonText = viewSpec.buttonTextDefault);
- }
- else if (calendar[buttonName]) { // a calendar method
- buttonClick = function () {
- calendar[buttonName]();
- };
- (buttonText = calendarButtonTextOverrides[buttonName]) ||
- (buttonIcon = theme.getIconClass(buttonName)) ||
- (buttonText = calendarButtonText[buttonName]);
- // ^ everything else is considered default
- }
- if (buttonClick) {
- buttonClasses = [
- 'fc-' + buttonName + '-button',
- theme.getClass('button')
- ];
- if (buttonText) {
- buttonInnerHtml = htmlEscape(buttonText);
- buttonAriaAttr = '';
- }
- else if (buttonIcon) {
- buttonInnerHtml = "<span class='" + buttonIcon + "'></span>";
- buttonAriaAttr = ' aria-label="' + buttonName + '"';
- }
- buttonEl = htmlToElement(// type="button" so that it doesn't submit a form
- '<button type="button" class="' + buttonClasses.join(' ') + '"' +
- buttonAriaAttr +
- '>' + buttonInnerHtml + '</button>');
- buttonEl.addEventListener('click', buttonClick);
- groupChildren.push(buttonEl);
- }
- }
- });
- if (groupChildren.length > 1) {
- groupEl = document.createElement('div');
- var buttonGroupClassName = theme.getClass('buttonGroup');
- if (isOnlyButtons && buttonGroupClassName) {
- groupEl.classList.add(buttonGroupClassName);
- }
- appendToElement(groupEl, groupChildren);
- sectionEl.appendChild(groupEl);
- }
- else {
- appendToElement(sectionEl, groupChildren); // 1 or 0 children
- }
- });
- }
- return sectionEl;
- };
- Toolbar.prototype.updateToday = function (isTodayEnabled) {
- this.toggleButtonEnabled('today', isTodayEnabled);
- };
- Toolbar.prototype.updatePrev = function (isPrevEnabled) {
- this.toggleButtonEnabled('prev', isPrevEnabled);
- };
- Toolbar.prototype.updateNext = function (isNextEnabled) {
- this.toggleButtonEnabled('next', isNextEnabled);
- };
- Toolbar.prototype.updateTitle = function (text) {
- findElements(this.el, 'h2').forEach(function (titleEl) {
- titleEl.innerText = text;
- });
- };
- Toolbar.prototype.updateActiveButton = function (buttonName) {
- var theme = this.context.theme;
- var className = theme.getClass('buttonActive');
- findElements(this.el, 'button').forEach(function (buttonEl) {
- if (buttonName && buttonEl.classList.contains('fc-' + buttonName + '-button')) {
- buttonEl.classList.add(className);
- }
- else {
- buttonEl.classList.remove(className);
- }
- });
- };
- Toolbar.prototype.toggleButtonEnabled = function (buttonName, bool) {
- findElements(this.el, '.fc-' + buttonName + '-button').forEach(function (buttonEl) {
- buttonEl.disabled = !bool;
- });
- };
- return Toolbar;
-}(Component));
-
-var CalendarComponent = /** @class */ (function (_super) {
- __extends(CalendarComponent, _super);
- function CalendarComponent(el) {
- var _this = _super.call(this) || this;
- _this.elClassNames = [];
- _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- _this.renderToolbars = memoizeRendering(_this._renderToolbars, _this._unrenderToolbars, [_this.renderSkeleton]);
- _this.buildComponentContext = memoize(buildComponentContext);
- _this.buildViewPropTransformers = memoize(buildViewPropTransformers);
- _this.el = el;
- _this.computeTitle = memoize(computeTitle);
- _this.parseBusinessHours = memoize(function (input) {
- return parseBusinessHours(input, _this.context.calendar);
- });
- return _this;
- }
- CalendarComponent.prototype.render = function (props, context) {
- this.freezeHeight();
- var title = this.computeTitle(props.dateProfile, props.viewSpec.options);
- this.renderSkeleton(context);
- this.renderToolbars(props.viewSpec, props.dateProfile, props.currentDate, title);
- this.renderView(props, title);
- this.updateSize();
- this.thawHeight();
- };
- CalendarComponent.prototype.destroy = function () {
- if (this.header) {
- this.header.destroy();
- }
- if (this.footer) {
- this.footer.destroy();
- }
- this.renderSkeleton.unrender(); // will call destroyView
- _super.prototype.destroy.call(this);
- };
- CalendarComponent.prototype._renderSkeleton = function (context) {
- this.updateElClassNames(context);
- prependToElement(this.el, this.contentEl = createElement('div', { className: 'fc-view-container' }));
- var calendar = context.calendar;
- for (var _i = 0, _a = calendar.pluginSystem.hooks.viewContainerModifiers; _i < _a.length; _i++) {
- var modifyViewContainer = _a[_i];
- modifyViewContainer(this.contentEl, calendar);
- }
- };
- CalendarComponent.prototype._unrenderSkeleton = function () {
- // weird to have this here
- if (this.view) {
- this.savedScroll = this.view.queryScroll();
- this.view.destroy();
- this.view = null;
- }
- removeElement(this.contentEl);
- this.removeElClassNames();
- };
- CalendarComponent.prototype.removeElClassNames = function () {
- var classList = this.el.classList;
- for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) {
- var className = _a[_i];
- classList.remove(className);
- }
- this.elClassNames = [];
- };
- CalendarComponent.prototype.updateElClassNames = function (context) {
- this.removeElClassNames();
- var theme = context.theme, options = context.options;
- this.elClassNames = [
- 'fc',
- 'fc-' + options.dir,
- theme.getClass('widget')
- ];
- var classList = this.el.classList;
- for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) {
- var className = _a[_i];
- classList.add(className);
- }
- };
- CalendarComponent.prototype._renderToolbars = function (viewSpec, dateProfile, currentDate, title) {
- var _a = this, context = _a.context, header = _a.header, footer = _a.footer;
- var options = context.options, calendar = context.calendar;
- var headerLayout = options.header;
- var footerLayout = options.footer;
- var dateProfileGenerator = this.props.dateProfileGenerator;
- var now = calendar.getNow();
- var todayInfo = dateProfileGenerator.build(now);
- var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate);
- var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate);
- var toolbarProps = {
- title: title,
- activeButton: viewSpec.type,
- isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
- isPrevEnabled: prevInfo.isValid,
- isNextEnabled: nextInfo.isValid
- };
- if (headerLayout) {
- if (!header) {
- header = this.header = new Toolbar('fc-header-toolbar');
- prependToElement(this.el, header.el);
- }
- header.receiveProps(__assign({ layout: headerLayout }, toolbarProps), context);
- }
- else if (header) {
- header.destroy();
- header = this.header = null;
- }
- if (footerLayout) {
- if (!footer) {
- footer = this.footer = new Toolbar('fc-footer-toolbar');
- appendToElement(this.el, footer.el);
- }
- footer.receiveProps(__assign({ layout: footerLayout }, toolbarProps), context);
- }
- else if (footer) {
- footer.destroy();
- footer = this.footer = null;
- }
- };
- CalendarComponent.prototype._unrenderToolbars = function () {
- if (this.header) {
- this.header.destroy();
- this.header = null;
- }
- if (this.footer) {
- this.footer.destroy();
- this.footer = null;
- }
- };
- CalendarComponent.prototype.renderView = function (props, title) {
- var view = this.view;
- var _a = this.context, calendar = _a.calendar, options = _a.options;
- var viewSpec = props.viewSpec, dateProfileGenerator = props.dateProfileGenerator;
- if (!view || view.viewSpec !== viewSpec) {
- if (view) {
- view.destroy();
- }
- view = this.view = new viewSpec['class'](viewSpec, this.contentEl);
- if (this.savedScroll) {
- view.addScroll(this.savedScroll, true);
- this.savedScroll = null;
- }
- }
- view.title = title; // for the API
- var viewProps = {
- dateProfileGenerator: dateProfileGenerator,
- dateProfile: props.dateProfile,
- businessHours: this.parseBusinessHours(viewSpec.options.businessHours),
- eventStore: props.eventStore,
- eventUiBases: props.eventUiBases,
- dateSelection: props.dateSelection,
- eventSelection: props.eventSelection,
- eventDrag: props.eventDrag,
- eventResize: props.eventResize
- };
- var transformers = this.buildViewPropTransformers(calendar.pluginSystem.hooks.viewPropsTransformers);
- for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
- var transformer = transformers_1[_i];
- __assign(viewProps, transformer.transform(viewProps, viewSpec, props, options));
- }
- view.receiveProps(viewProps, this.buildComponentContext(this.context, viewSpec, view));
- };
- // Sizing
- // -----------------------------------------------------------------------------------------------------------------
- CalendarComponent.prototype.updateSize = function (isResize) {
- if (isResize === void 0) { isResize = false; }
- var view = this.view;
- if (!view) {
- return; // why?
- }
- if (isResize || this.isHeightAuto == null) {
- this.computeHeightVars();
- }
- view.updateSize(isResize, this.viewHeight, this.isHeightAuto);
- view.updateNowIndicator(); // we need to guarantee this will run after updateSize
- view.popScroll(isResize);
- };
- CalendarComponent.prototype.computeHeightVars = function () {
- var calendar = this.context.calendar; // yuck. need to handle dynamic options
- var heightInput = calendar.opt('height');
- var contentHeightInput = calendar.opt('contentHeight');
- this.isHeightAuto = heightInput === 'auto' || contentHeightInput === 'auto';
- if (typeof contentHeightInput === 'number') { // exists and not 'auto'
- this.viewHeight = contentHeightInput;
- }
- else if (typeof contentHeightInput === 'function') { // exists and is a function
- this.viewHeight = contentHeightInput();
- }
- else if (typeof heightInput === 'number') { // exists and not 'auto'
- this.viewHeight = heightInput - this.queryToolbarsHeight();
- }
- else if (typeof heightInput === 'function') { // exists and is a function
- this.viewHeight = heightInput() - this.queryToolbarsHeight();
- }
- else if (heightInput === 'parent') { // set to height of parent element
- var parentEl = this.el.parentNode;
- this.viewHeight = parentEl.getBoundingClientRect().height - this.queryToolbarsHeight();
- }
- else {
- this.viewHeight = Math.round(this.contentEl.getBoundingClientRect().width /
- Math.max(calendar.opt('aspectRatio'), .5));
- }
- };
- CalendarComponent.prototype.queryToolbarsHeight = function () {
- var height = 0;
- if (this.header) {
- height += computeHeightAndMargins(this.header.el);
- }
- if (this.footer) {
- height += computeHeightAndMargins(this.footer.el);
- }
- return height;
- };
- // Height "Freezing"
- // -----------------------------------------------------------------------------------------------------------------
- CalendarComponent.prototype.freezeHeight = function () {
- applyStyle(this.el, {
- height: this.el.getBoundingClientRect().height,
- overflow: 'hidden'
- });
- };
- CalendarComponent.prototype.thawHeight = function () {
- applyStyle(this.el, {
- height: '',
- overflow: ''
- });
- };
- return CalendarComponent;
-}(Component));
-// Title and Date Formatting
-// -----------------------------------------------------------------------------------------------------------------
-// Computes what the title at the top of the calendar should be for this view
-function computeTitle(dateProfile, viewOptions) {
- var range;
- // for views that span a large unit of time, show the proper interval, ignoring stray days before and after
- if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {
- range = dateProfile.currentRange;
- }
- else { // for day units or smaller, use the actual day range
- range = dateProfile.activeRange;
- }
- return this.context.dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || computeTitleFormat(dateProfile), viewOptions.titleRangeSeparator), { isEndExclusive: dateProfile.isRangeAllDay });
-}
-// Generates the format string that should be used to generate the title for the current date range.
-// Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.
-function computeTitleFormat(dateProfile) {
- var currentRangeUnit = dateProfile.currentRangeUnit;
- if (currentRangeUnit === 'year') {
- return { year: 'numeric' };
- }
- else if (currentRangeUnit === 'month') {
- return { year: 'numeric', month: 'long' }; // like "September 2014"
- }
- else {
- var days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);
- if (days !== null && days > 1) {
- // multi-day range. shorter, like "Sep 9 - 10 2014"
- return { year: 'numeric', month: 'short', day: 'numeric' };
- }
- else {
- // one day. longer, like "September 9 2014"
- return { year: 'numeric', month: 'long', day: 'numeric' };
- }
- }
-}
-// build a context scoped to the view
-function buildComponentContext(context, viewSpec, view) {
- return context.extend(viewSpec.options, view);
-}
-// Plugin
-// -----------------------------------------------------------------------------------------------------------------
-function buildViewPropTransformers(theClasses) {
- return theClasses.map(function (theClass) {
- return new theClass();
- });
-}
-
-var Interaction = /** @class */ (function () {
- function Interaction(settings) {
- this.component = settings.component;
- }
- Interaction.prototype.destroy = function () {
- };
- return Interaction;
-}());
-function parseInteractionSettings(component, input) {
- return {
- component: component,
- el: input.el,
- useEventCenter: input.useEventCenter != null ? input.useEventCenter : true
- };
-}
-function interactionSettingsToStore(settings) {
- var _a;
- return _a = {},
- _a[settings.component.uid] = settings,
- _a;
-}
-// global state
-var interactionSettingsStore = {};
-
-/*
-Detects when the user clicks on an event within a DateComponent
-*/
-var EventClicking = /** @class */ (function (_super) {
- __extends(EventClicking, _super);
- function EventClicking(settings) {
- var _this = _super.call(this, settings) || this;
- _this.handleSegClick = function (ev, segEl) {
- var component = _this.component;
- var _a = component.context, calendar = _a.calendar, view = _a.view;
- var seg = getElSeg(segEl);
- if (seg && // might be the <div> surrounding the more link
- component.isValidSegDownEl(ev.target)) {
- // our way to simulate a link click for elements that can't be <a> tags
- // grab before trigger fired in case trigger trashes DOM thru rerendering
- var hasUrlContainer = elementClosest(ev.target, '.fc-has-url');
- var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
- calendar.publiclyTrigger('eventClick', [
- {
- el: segEl,
- event: new EventApi(component.context.calendar, seg.eventRange.def, seg.eventRange.instance),
- jsEvent: ev,
- view: view
- }
- ]);
- if (url && !ev.defaultPrevented) {
- window.location.href = url;
- }
- }
- };
- var component = settings.component;
- _this.destroy = listenBySelector(component.el, 'click', component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegClick);
- return _this;
- }
- return EventClicking;
-}(Interaction));
-
-/*
-Triggers events and adds/removes core classNames when the user's pointer
-enters/leaves event-elements of a component.
-*/
-var EventHovering = /** @class */ (function (_super) {
- __extends(EventHovering, _super);
- function EventHovering(settings) {
- var _this = _super.call(this, settings) || this;
- // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it
- _this.handleEventElRemove = function (el) {
- if (el === _this.currentSegEl) {
- _this.handleSegLeave(null, _this.currentSegEl);
- }
- };
- _this.handleSegEnter = function (ev, segEl) {
- if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
- segEl.classList.add('fc-allow-mouse-resize');
- _this.currentSegEl = segEl;
- _this.triggerEvent('eventMouseEnter', ev, segEl);
- }
- };
- _this.handleSegLeave = function (ev, segEl) {
- if (_this.currentSegEl) {
- segEl.classList.remove('fc-allow-mouse-resize');
- _this.currentSegEl = null;
- _this.triggerEvent('eventMouseLeave', ev, segEl);
- }
- };
- var component = settings.component;
- _this.removeHoverListeners = listenToHoverBySelector(component.el, component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegEnter, _this.handleSegLeave);
- // how to make sure component already has context?
- component.context.calendar.on('eventElRemove', _this.handleEventElRemove);
- return _this;
- }
- EventHovering.prototype.destroy = function () {
- this.removeHoverListeners();
- this.component.context.calendar.off('eventElRemove', this.handleEventElRemove);
- };
- EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) {
- var component = this.component;
- var _a = component.context, calendar = _a.calendar, view = _a.view;
- var seg = getElSeg(segEl);
- if (!ev || component.isValidSegDownEl(ev.target)) {
- calendar.publiclyTrigger(publicEvName, [
- {
- el: segEl,
- event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
- jsEvent: ev,
- view: view
- }
- ]);
- }
- };
- return EventHovering;
-}(Interaction));
-
-var StandardTheme = /** @class */ (function (_super) {
- __extends(StandardTheme, _super);
- function StandardTheme() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return StandardTheme;
-}(Theme));
-StandardTheme.prototype.classes = {
- widget: 'fc-unthemed',
- widgetHeader: 'fc-widget-header',
- widgetContent: 'fc-widget-content',
- buttonGroup: 'fc-button-group',
- button: 'fc-button fc-button-primary',
- buttonActive: 'fc-button-active',
- popoverHeader: 'fc-widget-header',
- popoverContent: 'fc-widget-content',
- // day grid
- headerRow: 'fc-widget-header',
- dayRow: 'fc-widget-content',
- // list view
- listView: 'fc-widget-content'
-};
-StandardTheme.prototype.baseIconClass = 'fc-icon';
-StandardTheme.prototype.iconClasses = {
- close: 'fc-icon-x',
- prev: 'fc-icon-chevron-left',
- next: 'fc-icon-chevron-right',
- prevYear: 'fc-icon-chevrons-left',
- nextYear: 'fc-icon-chevrons-right'
-};
-StandardTheme.prototype.iconOverrideOption = 'buttonIcons';
-StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';
-StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';
-
-var Calendar = /** @class */ (function () {
- function Calendar(el, overrides) {
- var _this = this;
- this.buildComponentContext = memoize(buildComponentContext$1);
- this.parseRawLocales = memoize(parseRawLocales);
- this.buildLocale = memoize(buildLocale);
- this.buildDateEnv = memoize(buildDateEnv);
- this.buildTheme = memoize(buildTheme);
- this.buildEventUiSingleBase = memoize(this._buildEventUiSingleBase);
- this.buildSelectionConfig = memoize(this._buildSelectionConfig);
- this.buildEventUiBySource = memoizeOutput(buildEventUiBySource, isPropsEqual);
- this.buildEventUiBases = memoize(buildEventUiBases);
- this.interactionsStore = {};
- this.actionQueue = [];
- this.isReducing = false;
- // isDisplaying: boolean = false // installed in DOM? accepting renders?
- this.needsRerender = false; // needs a render?
- this.isRendering = false; // currently in the executeRender function?
- this.renderingPauseDepth = 0;
- this.buildDelayedRerender = memoize(buildDelayedRerender);
- this.afterSizingTriggers = {};
- this.isViewUpdated = false;
- this.isDatesUpdated = false;
- this.isEventsUpdated = false;
- this.el = el;
- this.optionsManager = new OptionsManager(overrides || {});
- this.pluginSystem = new PluginSystem();
- // only do once. don't do in handleOptions. because can't remove plugins
- this.addPluginInputs(this.optionsManager.computed.plugins || []);
- this.handleOptions(this.optionsManager.computed);
- this.publiclyTrigger('_init'); // for tests
- this.hydrate();
- this.calendarInteractions = this.pluginSystem.hooks.calendarInteractions
- .map(function (calendarInteractionClass) {
- return new calendarInteractionClass(_this);
- });
- }
- Calendar.prototype.addPluginInputs = function (pluginInputs) {
- var pluginDefs = refinePluginDefs(pluginInputs);
- for (var _i = 0, pluginDefs_1 = pluginDefs; _i < pluginDefs_1.length; _i++) {
- var pluginDef = pluginDefs_1[_i];
- this.pluginSystem.add(pluginDef);
- }
- };
- Object.defineProperty(Calendar.prototype, "view", {
- // public API
- get: function () {
- return this.component ? this.component.view : null;
- },
- enumerable: true,
- configurable: true
- });
- // Public API for rendering
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.render = function () {
- if (!this.component) {
- this.component = new CalendarComponent(this.el);
- this.renderableEventStore = createEmptyEventStore();
- this.bindHandlers();
- this.executeRender();
- }
- else {
- this.requestRerender();
- }
- };
- Calendar.prototype.destroy = function () {
- if (this.component) {
- this.unbindHandlers();
- this.component.destroy(); // don't null-out. in case API needs access
- this.component = null; // umm ???
- for (var _i = 0, _a = this.calendarInteractions; _i < _a.length; _i++) {
- var interaction = _a[_i];
- interaction.destroy();
- }
- this.publiclyTrigger('_destroyed');
- }
- };
- // Handlers
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.bindHandlers = function () {
- var _this = this;
- // event delegation for nav links
- this.removeNavLinkListener = listenBySelector(this.el, 'click', 'a[data-goto]', function (ev, anchorEl) {
- var gotoOptions = anchorEl.getAttribute('data-goto');
- gotoOptions = gotoOptions ? JSON.parse(gotoOptions) : {};
- var dateEnv = _this.dateEnv;
- var dateMarker = dateEnv.createMarker(gotoOptions.date);
- var viewType = gotoOptions.type;
- // property like "navLinkDayClick". might be a string or a function
- var customAction = _this.viewOpt('navLink' + capitaliseFirstLetter(viewType) + 'Click');
- if (typeof customAction === 'function') {
- customAction(dateEnv.toDate(dateMarker), ev);
- }
- else {
- if (typeof customAction === 'string') {
- viewType = customAction;
- }
- _this.zoomTo(dateMarker, viewType);
- }
- });
- if (this.opt('handleWindowResize')) {
- window.addEventListener('resize', this.windowResizeProxy = debounce(// prevents rapid calls
- this.windowResize.bind(this), this.opt('windowResizeDelay')));
- }
- };
- Calendar.prototype.unbindHandlers = function () {
- this.removeNavLinkListener();
- if (this.windowResizeProxy) {
- window.removeEventListener('resize', this.windowResizeProxy);
- this.windowResizeProxy = null;
- }
- };
- // Dispatcher
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.hydrate = function () {
- var _this = this;
- this.state = this.buildInitialState();
- var rawSources = this.opt('eventSources') || [];
- var singleRawSource = this.opt('events');
- var sources = []; // parsed
- if (singleRawSource) {
- rawSources.unshift(singleRawSource);
- }
- for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {
- var rawSource = rawSources_1[_i];
- var source = parseEventSource(rawSource, this);
- if (source) {
- sources.push(source);
- }
- }
- this.batchRendering(function () {
- _this.dispatch({ type: 'INIT' }); // pass in sources here?
- _this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: sources });
- _this.dispatch({
- type: 'SET_VIEW_TYPE',
- viewType: _this.opt('defaultView') || _this.pluginSystem.hooks.defaultView
- });
- });
- };
- Calendar.prototype.buildInitialState = function () {
- return {
- viewType: null,
- loadingLevel: 0,
- eventSourceLoadingLevel: 0,
- currentDate: this.getInitialDate(),
- dateProfile: null,
- eventSources: {},
- eventStore: createEmptyEventStore(),
- dateSelection: null,
- eventSelection: '',
- eventDrag: null,
- eventResize: null
- };
- };
- Calendar.prototype.dispatch = function (action) {
- this.actionQueue.push(action);
- if (!this.isReducing) {
- this.isReducing = true;
- var oldState = this.state;
- while (this.actionQueue.length) {
- this.state = this.reduce(this.state, this.actionQueue.shift(), this);
- }
- var newState = this.state;
- this.isReducing = false;
- if (!oldState.loadingLevel && newState.loadingLevel) {
- this.publiclyTrigger('loading', [true]);
- }
- else if (oldState.loadingLevel && !newState.loadingLevel) {
- this.publiclyTrigger('loading', [false]);
- }
- var view = this.component && this.component.view;
- if (oldState.eventStore !== newState.eventStore) {
- if (oldState.eventStore) {
- this.isEventsUpdated = true;
- }
- }
- if (oldState.dateProfile !== newState.dateProfile) {
- if (oldState.dateProfile && view) { // why would view be null!?
- this.publiclyTrigger('datesDestroy', [
- {
- view: view,
- el: view.el
- }
- ]);
- }
- this.isDatesUpdated = true;
- }
- if (oldState.viewType !== newState.viewType) {
- if (oldState.viewType && view) { // why would view be null!?
- this.publiclyTrigger('viewSkeletonDestroy', [
- {
- view: view,
- el: view.el
- }
- ]);
- }
- this.isViewUpdated = true;
- }
- this.requestRerender();
- }
- };
- Calendar.prototype.reduce = function (state, action, calendar) {
- return reduce(state, action, calendar);
- };
- // Render Queue
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.requestRerender = function () {
- this.needsRerender = true;
- this.delayedRerender(); // will call a debounced-version of tryRerender
- };
- Calendar.prototype.tryRerender = function () {
- if (this.component && // must be accepting renders
- this.needsRerender && // indicates that a rerender was requested
- !this.renderingPauseDepth && // not paused
- !this.isRendering // not currently in the render loop
- ) {
- this.executeRender();
- }
- };
- Calendar.prototype.batchRendering = function (func) {
- this.renderingPauseDepth++;
- func();
- this.renderingPauseDepth--;
- if (this.needsRerender) {
- this.requestRerender();
- }
- };
- // Rendering
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.executeRender = function () {
- // clear these BEFORE the render so that new values will accumulate during render
- this.needsRerender = false;
- this.isRendering = true;
- this.renderComponent();
- this.isRendering = false;
- // received a rerender request while rendering
- if (this.needsRerender) {
- this.delayedRerender();
- }
- };
- /*
- don't call this directly. use executeRender instead
- */
- Calendar.prototype.renderComponent = function () {
- var _a = this, state = _a.state, component = _a.component;
- var viewType = state.viewType;
- var viewSpec = this.viewSpecs[viewType];
- if (!viewSpec) {
- throw new Error("View type \"" + viewType + "\" is not valid");
- }
- // if event sources are still loading and progressive rendering hasn't been enabled,
- // keep rendering the last fully loaded set of events
- var renderableEventStore = this.renderableEventStore =
- (state.eventSourceLoadingLevel && !this.opt('progressiveEventRendering')) ?
- this.renderableEventStore :
- state.eventStore;
- var eventUiSingleBase = this.buildEventUiSingleBase(viewSpec.options);
- var eventUiBySource = this.buildEventUiBySource(state.eventSources);
- var eventUiBases = this.eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
- component.receiveProps(__assign({}, state, { viewSpec: viewSpec, dateProfileGenerator: this.dateProfileGenerators[viewType], dateProfile: state.dateProfile, eventStore: renderableEventStore, eventUiBases: eventUiBases, dateSelection: state.dateSelection, eventSelection: state.eventSelection, eventDrag: state.eventDrag, eventResize: state.eventResize }), this.buildComponentContext(this.theme, this.dateEnv, this.optionsManager.computed));
- if (this.isViewUpdated) {
- this.isViewUpdated = false;
- this.publiclyTrigger('viewSkeletonRender', [
- {
- view: component.view,
- el: component.view.el
- }
- ]);
- }
- if (this.isDatesUpdated) {
- this.isDatesUpdated = false;
- this.publiclyTrigger('datesRender', [
- {
- view: component.view,
- el: component.view.el
- }
- ]);
- }
- if (this.isEventsUpdated) {
- this.isEventsUpdated = false;
- }
- this.releaseAfterSizingTriggers();
- };
- // Options
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.setOption = function (name, val) {
- var _a;
- this.mutateOptions((_a = {}, _a[name] = val, _a), [], true);
- };
- Calendar.prototype.getOption = function (name) {
- return this.optionsManager.computed[name];
- };
- Calendar.prototype.opt = function (name) {
- return this.optionsManager.computed[name];
- };
- Calendar.prototype.viewOpt = function (name) {
- return this.viewOpts()[name];
- };
- Calendar.prototype.viewOpts = function () {
- return this.viewSpecs[this.state.viewType].options;
- };
- /*
- handles option changes (like a diff)
- */
- Calendar.prototype.mutateOptions = function (updates, removals, isDynamic, deepEqual) {
- var _this = this;
- var changeHandlers = this.pluginSystem.hooks.optionChangeHandlers;
- var normalUpdates = {};
- var specialUpdates = {};
- var oldDateEnv = this.dateEnv; // do this before handleOptions
- var isTimeZoneDirty = false;
- var isSizeDirty = false;
- var anyDifficultOptions = Boolean(removals.length);
- for (var name_1 in updates) {
- if (changeHandlers[name_1]) {
- specialUpdates[name_1] = updates[name_1];
- }
- else {
- normalUpdates[name_1] = updates[name_1];
- }
- }
- for (var name_2 in normalUpdates) {
- if (/^(height|contentHeight|aspectRatio)$/.test(name_2)) {
- isSizeDirty = true;
- }
- else if (/^(defaultDate|defaultView)$/.test(name_2)) ;
- else {
- anyDifficultOptions = true;
- if (name_2 === 'timeZone') {
- isTimeZoneDirty = true;
- }
- }
- }
- this.optionsManager.mutate(normalUpdates, removals, isDynamic);
- if (anyDifficultOptions) {
- this.handleOptions(this.optionsManager.computed);
- }
- this.batchRendering(function () {
- if (anyDifficultOptions) {
- if (isTimeZoneDirty) {
- _this.dispatch({
- type: 'CHANGE_TIMEZONE',
- oldDateEnv: oldDateEnv
- });
- }
- /* HACK
- has the same effect as calling this.requestRerender()
- but recomputes the state's dateProfile
- */
- _this.dispatch({
- type: 'SET_VIEW_TYPE',
- viewType: _this.state.viewType
- });
- }
- else if (isSizeDirty) {
- _this.updateSize();
- }
- // special updates
- if (deepEqual) {
- for (var name_3 in specialUpdates) {
- changeHandlers[name_3](specialUpdates[name_3], _this, deepEqual);
- }
- }
- });
- };
- /*
- rebuilds things based off of a complete set of refined options
- */
- Calendar.prototype.handleOptions = function (options) {
- var _this = this;
- var pluginHooks = this.pluginSystem.hooks;
- this.defaultAllDayEventDuration = createDuration(options.defaultAllDayEventDuration);
- this.defaultTimedEventDuration = createDuration(options.defaultTimedEventDuration);
- this.delayedRerender = this.buildDelayedRerender(options.rerenderDelay);
- this.theme = this.buildTheme(options);
- var available = this.parseRawLocales(options.locales);
- this.availableRawLocales = available.map;
- var locale = this.buildLocale(options.locale || available.defaultCode, available.map);
- this.dateEnv = this.buildDateEnv(locale, options.timeZone, pluginHooks.namedTimeZonedImpl, options.firstDay, options.weekNumberCalculation, options.weekLabel, pluginHooks.cmdFormatter);
- this.selectionConfig = this.buildSelectionConfig(options); // needs dateEnv. do after :(
- // ineffecient to do every time?
- this.viewSpecs = buildViewSpecs(pluginHooks.views, this.optionsManager);
- // ineffecient to do every time?
- this.dateProfileGenerators = mapHash(this.viewSpecs, function (viewSpec) {
- return new viewSpec.class.prototype.dateProfileGeneratorClass(viewSpec, _this);
- });
- };
- Calendar.prototype.getAvailableLocaleCodes = function () {
- return Object.keys(this.availableRawLocales);
- };
- Calendar.prototype._buildSelectionConfig = function (rawOpts) {
- return processScopedUiProps('select', rawOpts, this);
- };
- Calendar.prototype._buildEventUiSingleBase = function (rawOpts) {
- if (rawOpts.editable) { // so 'editable' affected events
- rawOpts = __assign({}, rawOpts, { eventEditable: true });
- }
- return processScopedUiProps('event', rawOpts, this);
- };
- // Trigger
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.hasPublicHandlers = function (name) {
- return this.hasHandlers(name) ||
- this.opt(name); // handler specified in options
- };
- Calendar.prototype.publiclyTrigger = function (name, args) {
- var optHandler = this.opt(name);
- this.triggerWith(name, this, args);
- if (optHandler) {
- return optHandler.apply(this, args);
- }
- };
- Calendar.prototype.publiclyTriggerAfterSizing = function (name, args) {
- var afterSizingTriggers = this.afterSizingTriggers;
- (afterSizingTriggers[name] || (afterSizingTriggers[name] = [])).push(args);
- };
- Calendar.prototype.releaseAfterSizingTriggers = function () {
- var afterSizingTriggers = this.afterSizingTriggers;
- for (var name_4 in afterSizingTriggers) {
- for (var _i = 0, _a = afterSizingTriggers[name_4]; _i < _a.length; _i++) {
- var args = _a[_i];
- this.publiclyTrigger(name_4, args);
- }
- }
- this.afterSizingTriggers = {};
- };
- // View
- // -----------------------------------------------------------------------------------------------------------------
- // Returns a boolean about whether the view is okay to instantiate at some point
- Calendar.prototype.isValidViewType = function (viewType) {
- return Boolean(this.viewSpecs[viewType]);
- };
- Calendar.prototype.changeView = function (viewType, dateOrRange) {
- var dateMarker = null;
- if (dateOrRange) {
- if (dateOrRange.start && dateOrRange.end) { // a range
- this.optionsManager.mutate({ visibleRange: dateOrRange }, []); // will not rerender
- this.handleOptions(this.optionsManager.computed); // ...but yuck
- }
- else { // a date
- dateMarker = this.dateEnv.createMarker(dateOrRange); // just like gotoDate
- }
- }
- this.unselect();
- this.dispatch({
- type: 'SET_VIEW_TYPE',
- viewType: viewType,
- dateMarker: dateMarker
- });
- };
- // Forces navigation to a view for the given date.
- // `viewType` can be a specific view name or a generic one like "week" or "day".
- // needs to change
- Calendar.prototype.zoomTo = function (dateMarker, viewType) {
- var spec;
- viewType = viewType || 'day'; // day is default zoom
- spec = this.viewSpecs[viewType] ||
- this.getUnitViewSpec(viewType);
- this.unselect();
- if (spec) {
- this.dispatch({
- type: 'SET_VIEW_TYPE',
- viewType: spec.type,
- dateMarker: dateMarker
- });
- }
- else {
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: dateMarker
- });
- }
- };
- // Given a duration singular unit, like "week" or "day", finds a matching view spec.
- // Preference is given to views that have corresponding buttons.
- Calendar.prototype.getUnitViewSpec = function (unit) {
- var component = this.component;
- var viewTypes = [];
- var i;
- var spec;
- // put views that have buttons first. there will be duplicates, but oh
- if (component.header) {
- viewTypes.push.apply(viewTypes, component.header.viewsWithButtons);
- }
- if (component.footer) {
- viewTypes.push.apply(viewTypes, component.footer.viewsWithButtons);
- }
- for (var viewType in this.viewSpecs) {
- viewTypes.push(viewType);
- }
- for (i = 0; i < viewTypes.length; i++) {
- spec = this.viewSpecs[viewTypes[i]];
- if (spec) {
- if (spec.singleUnit === unit) {
- return spec;
- }
- }
- }
- };
- // Current Date
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.getInitialDate = function () {
- var defaultDateInput = this.opt('defaultDate');
- // compute the initial ambig-timezone date
- if (defaultDateInput != null) {
- return this.dateEnv.createMarker(defaultDateInput);
- }
- else {
- return this.getNow(); // getNow already returns unzoned
- }
- };
- Calendar.prototype.prev = function () {
- this.unselect();
- this.dispatch({ type: 'PREV' });
- };
- Calendar.prototype.next = function () {
- this.unselect();
- this.dispatch({ type: 'NEXT' });
- };
- Calendar.prototype.prevYear = function () {
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.dateEnv.addYears(this.state.currentDate, -1)
- });
- };
- Calendar.prototype.nextYear = function () {
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.dateEnv.addYears(this.state.currentDate, 1)
- });
- };
- Calendar.prototype.today = function () {
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.getNow()
- });
- };
- Calendar.prototype.gotoDate = function (zonedDateInput) {
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.dateEnv.createMarker(zonedDateInput)
- });
- };
- Calendar.prototype.incrementDate = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // else, warn about invalid input?
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.dateEnv.add(this.state.currentDate, delta)
- });
- }
- };
- // for external API
- Calendar.prototype.getDate = function () {
- return this.dateEnv.toDate(this.state.currentDate);
- };
- // Date Formatting Utils
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.formatDate = function (d, formatter) {
- var dateEnv = this.dateEnv;
- return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));
- };
- // `settings` is for formatter AND isEndExclusive
- Calendar.prototype.formatRange = function (d0, d1, settings) {
- var dateEnv = this.dateEnv;
- return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings, this.opt('defaultRangeSeparator')), settings);
- };
- Calendar.prototype.formatIso = function (d, omitTime) {
- var dateEnv = this.dateEnv;
- return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime: omitTime });
- };
- // Sizing
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.windowResize = function (ev) {
- if (!this.isHandlingWindowResize &&
- this.component && // why?
- ev.target === window // not a jqui resize event
- ) {
- this.isHandlingWindowResize = true;
- this.updateSize();
- this.publiclyTrigger('windowResize', [this.view]);
- this.isHandlingWindowResize = false;
- }
- };
- Calendar.prototype.updateSize = function () {
- if (this.component) { // when?
- this.component.updateSize(true);
- }
- };
- // Component Registration
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.registerInteractiveComponent = function (component, settingsInput) {
- var settings = parseInteractionSettings(component, settingsInput);
- var DEFAULT_INTERACTIONS = [
- EventClicking,
- EventHovering
- ];
- var interactionClasses = DEFAULT_INTERACTIONS.concat(this.pluginSystem.hooks.componentInteractions);
- var interactions = interactionClasses.map(function (interactionClass) {
- return new interactionClass(settings);
- });
- this.interactionsStore[component.uid] = interactions;
- interactionSettingsStore[component.uid] = settings;
- };
- Calendar.prototype.unregisterInteractiveComponent = function (component) {
- for (var _i = 0, _a = this.interactionsStore[component.uid]; _i < _a.length; _i++) {
- var listener = _a[_i];
- listener.destroy();
- }
- delete this.interactionsStore[component.uid];
- delete interactionSettingsStore[component.uid];
- };
- // Date Selection / Event Selection / DayClick
- // -----------------------------------------------------------------------------------------------------------------
- // this public method receives start/end dates in any format, with any timezone
- // NOTE: args were changed from v3
- Calendar.prototype.select = function (dateOrObj, endDate) {
- var selectionInput;
- if (endDate == null) {
- if (dateOrObj.start != null) {
- selectionInput = dateOrObj;
- }
- else {
- selectionInput = {
- start: dateOrObj,
- end: null
- };
- }
- }
- else {
- selectionInput = {
- start: dateOrObj,
- end: endDate
- };
- }
- var selection = parseDateSpan(selectionInput, this.dateEnv, createDuration({ days: 1 }) // TODO: cache this?
- );
- if (selection) { // throw parse error otherwise?
- this.dispatch({ type: 'SELECT_DATES', selection: selection });
- this.triggerDateSelect(selection);
- }
- };
- // public method
- Calendar.prototype.unselect = function (pev) {
- if (this.state.dateSelection) {
- this.dispatch({ type: 'UNSELECT_DATES' });
- this.triggerDateUnselect(pev);
- }
- };
- Calendar.prototype.triggerDateSelect = function (selection, pev) {
- var arg = __assign({}, this.buildDateSpanApi(selection), { jsEvent: pev ? pev.origEvent : null, view: this.view });
- this.publiclyTrigger('select', [arg]);
- };
- Calendar.prototype.triggerDateUnselect = function (pev) {
- this.publiclyTrigger('unselect', [
- {
- jsEvent: pev ? pev.origEvent : null,
- view: this.view
- }
- ]);
- };
- // TODO: receive pev?
- Calendar.prototype.triggerDateClick = function (dateSpan, dayEl, view, ev) {
- var arg = __assign({}, this.buildDatePointApi(dateSpan), { dayEl: dayEl, jsEvent: ev, // Is this always a mouse event? See #4655
- view: view });
- this.publiclyTrigger('dateClick', [arg]);
- };
- Calendar.prototype.buildDatePointApi = function (dateSpan) {
- var props = {};
- for (var _i = 0, _a = this.pluginSystem.hooks.datePointTransforms; _i < _a.length; _i++) {
- var transform = _a[_i];
- __assign(props, transform(dateSpan, this));
- }
- __assign(props, buildDatePointApi(dateSpan, this.dateEnv));
- return props;
- };
- Calendar.prototype.buildDateSpanApi = function (dateSpan) {
- var props = {};
- for (var _i = 0, _a = this.pluginSystem.hooks.dateSpanTransforms; _i < _a.length; _i++) {
- var transform = _a[_i];
- __assign(props, transform(dateSpan, this));
- }
- __assign(props, buildDateSpanApi(dateSpan, this.dateEnv));
- return props;
- };
- // Date Utils
- // -----------------------------------------------------------------------------------------------------------------
- // Returns a DateMarker for the current date, as defined by the client's computer or from the `now` option
- Calendar.prototype.getNow = function () {
- var now = this.opt('now');
- if (typeof now === 'function') {
- now = now();
- }
- if (now == null) {
- return this.dateEnv.createNowMarker();
- }
- return this.dateEnv.createMarker(now);
- };
- // Event-Date Utilities
- // -----------------------------------------------------------------------------------------------------------------
- // Given an event's allDay status and start date, return what its fallback end date should be.
- // TODO: rename to computeDefaultEventEnd
- Calendar.prototype.getDefaultEventEnd = function (allDay, marker) {
- var end = marker;
- if (allDay) {
- end = startOfDay(end);
- end = this.dateEnv.add(end, this.defaultAllDayEventDuration);
- }
- else {
- end = this.dateEnv.add(end, this.defaultTimedEventDuration);
- }
- return end;
- };
- // Public Events API
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.addEvent = function (eventInput, sourceInput) {
- if (eventInput instanceof EventApi) {
- var def = eventInput._def;
- var instance = eventInput._instance;
- // not already present? don't want to add an old snapshot
- if (!this.state.eventStore.defs[def.defId]) {
- this.dispatch({
- type: 'ADD_EVENTS',
- eventStore: eventTupleToStore({ def: def, instance: instance }) // TODO: better util for two args?
- });
- }
- return eventInput;
- }
- var sourceId;
- if (sourceInput instanceof EventSourceApi) {
- sourceId = sourceInput.internalEventSource.sourceId;
- }
- else if (sourceInput != null) {
- var sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function
- if (!sourceApi) {
- console.warn('Could not find an event source with ID "' + sourceInput + '"'); // TODO: test
- return null;
- }
- else {
- sourceId = sourceApi.internalEventSource.sourceId;
- }
- }
- var tuple = parseEvent(eventInput, sourceId, this);
- if (tuple) {
- this.dispatch({
- type: 'ADD_EVENTS',
- eventStore: eventTupleToStore(tuple)
- });
- return new EventApi(this, tuple.def, tuple.def.recurringDef ? null : tuple.instance);
- }
- return null;
- };
- // TODO: optimize
- Calendar.prototype.getEventById = function (id) {
- var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances;
- id = String(id);
- for (var defId in defs) {
- var def = defs[defId];
- if (def.publicId === id) {
- if (def.recurringDef) {
- return new EventApi(this, def, null);
- }
- else {
- for (var instanceId in instances) {
- var instance = instances[instanceId];
- if (instance.defId === def.defId) {
- return new EventApi(this, def, instance);
- }
- }
- }
- }
- }
- return null;
- };
- Calendar.prototype.getEvents = function () {
- var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances;
- var eventApis = [];
- for (var id in instances) {
- var instance = instances[id];
- var def = defs[instance.defId];
- eventApis.push(new EventApi(this, def, instance));
- }
- return eventApis;
- };
- Calendar.prototype.removeAllEvents = function () {
- this.dispatch({ type: 'REMOVE_ALL_EVENTS' });
- };
- Calendar.prototype.rerenderEvents = function () {
- this.dispatch({ type: 'RESET_EVENTS' });
- };
- // Public Event Sources API
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.getEventSources = function () {
- var sourceHash = this.state.eventSources;
- var sourceApis = [];
- for (var internalId in sourceHash) {
- sourceApis.push(new EventSourceApi(this, sourceHash[internalId]));
- }
- return sourceApis;
- };
- Calendar.prototype.getEventSourceById = function (id) {
- var sourceHash = this.state.eventSources;
- id = String(id);
- for (var sourceId in sourceHash) {
- if (sourceHash[sourceId].publicId === id) {
- return new EventSourceApi(this, sourceHash[sourceId]);
- }
- }
- return null;
- };
- Calendar.prototype.addEventSource = function (sourceInput) {
- if (sourceInput instanceof EventSourceApi) {
- // not already present? don't want to add an old snapshot
- if (!this.state.eventSources[sourceInput.internalEventSource.sourceId]) {
- this.dispatch({
- type: 'ADD_EVENT_SOURCES',
- sources: [sourceInput.internalEventSource]
- });
- }
- return sourceInput;
- }
- var eventSource = parseEventSource(sourceInput, this);
- if (eventSource) { // TODO: error otherwise?
- this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] });
- return new EventSourceApi(this, eventSource);
- }
- return null;
- };
- Calendar.prototype.removeAllEventSources = function () {
- this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });
- };
- Calendar.prototype.refetchEvents = function () {
- this.dispatch({ type: 'FETCH_EVENT_SOURCES' });
- };
- // Scroll
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.scrollToTime = function (timeInput) {
- var duration = createDuration(timeInput);
- if (duration) {
- this.component.view.scrollToDuration(duration);
- }
- };
- return Calendar;
-}());
-EmitterMixin.mixInto(Calendar);
-// for memoizers
-// -----------------------------------------------------------------------------------------------------------------
-function buildComponentContext$1(theme, dateEnv, options) {
- return new ComponentContext(this, theme, dateEnv, options, null);
-}
-function buildDateEnv(locale, timeZone, namedTimeZoneImpl, firstDay, weekNumberCalculation, weekLabel, cmdFormatter) {
- return new DateEnv({
- calendarSystem: 'gregory',
- timeZone: timeZone,
- namedTimeZoneImpl: namedTimeZoneImpl,
- locale: locale,
- weekNumberCalculation: weekNumberCalculation,
- firstDay: firstDay,
- weekLabel: weekLabel,
- cmdFormatter: cmdFormatter
- });
-}
-function buildTheme(calendarOptions) {
- var themeClass = this.pluginSystem.hooks.themeClasses[calendarOptions.themeSystem] || StandardTheme;
- return new themeClass(calendarOptions);
-}
-function buildDelayedRerender(wait) {
- var func = this.tryRerender.bind(this);
- if (wait != null) {
- func = debounce(func, wait);
- }
- return func;
-}
-function buildEventUiBySource(eventSources) {
- return mapHash(eventSources, function (eventSource) {
- return eventSource.ui;
- });
-}
-function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
- var eventUiBases = { '': eventUiSingleBase };
- for (var defId in eventDefs) {
- var def = eventDefs[defId];
- if (def.sourceId && eventUiBySource[def.sourceId]) {
- eventUiBases[defId] = eventUiBySource[def.sourceId];
- }
- }
- return eventUiBases;
-}
-
-var View = /** @class */ (function (_super) {
- __extends(View, _super);
- function View(viewSpec, parentEl) {
- var _this = _super.call(this, createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' })) || this;
- _this.renderDatesMem = memoizeRendering(_this.renderDatesWrap, _this.unrenderDatesWrap);
- _this.renderBusinessHoursMem = memoizeRendering(_this.renderBusinessHours, _this.unrenderBusinessHours, [_this.renderDatesMem]);
- _this.renderDateSelectionMem = memoizeRendering(_this.renderDateSelectionWrap, _this.unrenderDateSelectionWrap, [_this.renderDatesMem]);
- _this.renderEventsMem = memoizeRendering(_this.renderEvents, _this.unrenderEvents, [_this.renderDatesMem]);
- _this.renderEventSelectionMem = memoizeRendering(_this.renderEventSelectionWrap, _this.unrenderEventSelectionWrap, [_this.renderEventsMem]);
- _this.renderEventDragMem = memoizeRendering(_this.renderEventDragWrap, _this.unrenderEventDragWrap, [_this.renderDatesMem]);
- _this.renderEventResizeMem = memoizeRendering(_this.renderEventResizeWrap, _this.unrenderEventResizeWrap, [_this.renderDatesMem]);
- _this.viewSpec = viewSpec;
- _this.type = viewSpec.type;
- parentEl.appendChild(_this.el);
- _this.initialize();
- return _this;
- }
- View.prototype.initialize = function () {
- };
- Object.defineProperty(View.prototype, "activeStart", {
- // Date Setting/Unsetting
- // -----------------------------------------------------------------------------------------------------------------
- get: function () {
- return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.start);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(View.prototype, "activeEnd", {
- get: function () {
- return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.end);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(View.prototype, "currentStart", {
- get: function () {
- return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.start);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(View.prototype, "currentEnd", {
- get: function () {
- return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.end);
- },
- enumerable: true,
- configurable: true
- });
- // General Rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.render = function (props, context) {
- this.renderDatesMem(props.dateProfile);
- this.renderBusinessHoursMem(props.businessHours);
- this.renderDateSelectionMem(props.dateSelection);
- this.renderEventsMem(props.eventStore);
- this.renderEventSelectionMem(props.eventSelection);
- this.renderEventDragMem(props.eventDrag);
- this.renderEventResizeMem(props.eventResize);
- };
- View.prototype.beforeUpdate = function () {
- this.addScroll(this.queryScroll());
- };
- View.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderDatesMem.unrender(); // should unrender everything else
- };
- // Sizing
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.updateSize = function (isResize, viewHeight, isAuto) {
- var calendar = this.context.calendar;
- if (isResize) {
- this.addScroll(this.queryScroll()); // NOTE: same code as in beforeUpdate
- }
- if (isResize || // HACKS...
- calendar.isViewUpdated ||
- calendar.isDatesUpdated ||
- calendar.isEventsUpdated) {
- // sort of the catch-all sizing
- // anything that might cause dimension changes
- this.updateBaseSize(isResize, viewHeight, isAuto);
- }
- // NOTE: popScroll is called by CalendarComponent
- };
- View.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
- };
- // Date Rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderDatesWrap = function (dateProfile) {
- this.renderDates(dateProfile);
- this.addScroll({
- duration: createDuration(this.context.options.scrollTime)
- });
- };
- View.prototype.unrenderDatesWrap = function () {
- this.stopNowIndicator();
- this.unrenderDates();
- };
- View.prototype.renderDates = function (dateProfile) { };
- View.prototype.unrenderDates = function () { };
- // Business Hours
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderBusinessHours = function (businessHours) { };
- View.prototype.unrenderBusinessHours = function () { };
- // Date Selection
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderDateSelectionWrap = function (selection) {
- if (selection) {
- this.renderDateSelection(selection);
- }
- };
- View.prototype.unrenderDateSelectionWrap = function (selection) {
- if (selection) {
- this.unrenderDateSelection(selection);
- }
- };
- View.prototype.renderDateSelection = function (selection) { };
- View.prototype.unrenderDateSelection = function (selection) { };
- // Event Rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderEvents = function (eventStore) { };
- View.prototype.unrenderEvents = function () { };
- // util for subclasses
- View.prototype.sliceEvents = function (eventStore, allDay) {
- var props = this.props;
- return sliceEventStore(eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? this.context.nextDayThreshold : null).fg;
- };
- // Event Selection
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderEventSelectionWrap = function (instanceId) {
- if (instanceId) {
- this.renderEventSelection(instanceId);
- }
- };
- View.prototype.unrenderEventSelectionWrap = function (instanceId) {
- if (instanceId) {
- this.unrenderEventSelection(instanceId);
- }
- };
- View.prototype.renderEventSelection = function (instanceId) { };
- View.prototype.unrenderEventSelection = function (instanceId) { };
- // Event Drag
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderEventDragWrap = function (state) {
- if (state) {
- this.renderEventDrag(state);
- }
- };
- View.prototype.unrenderEventDragWrap = function (state) {
- if (state) {
- this.unrenderEventDrag(state);
- }
- };
- View.prototype.renderEventDrag = function (state) { };
- View.prototype.unrenderEventDrag = function (state) { };
- // Event Resize
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderEventResizeWrap = function (state) {
- if (state) {
- this.renderEventResize(state);
- }
- };
- View.prototype.unrenderEventResizeWrap = function (state) {
- if (state) {
- this.unrenderEventResize(state);
- }
- };
- View.prototype.renderEventResize = function (state) { };
- View.prototype.unrenderEventResize = function (state) { };
- /* Now Indicator
- ------------------------------------------------------------------------------------------------------------------*/
- // Immediately render the current time indicator and begins re-rendering it at an interval,
- // which is defined by this.getNowIndicatorUnit().
- // TODO: somehow do this for the current whole day's background too
- // USAGE: must be called manually from subclasses' render methods! don't need to call stopNowIndicator tho
- View.prototype.startNowIndicator = function (dateProfile, dateProfileGenerator) {
- var _this = this;
- var _a = this.context, calendar = _a.calendar, dateEnv = _a.dateEnv, options = _a.options;
- var unit;
- var update;
- var delay; // ms wait value
- if (options.nowIndicator && !this.initialNowDate) {
- unit = this.getNowIndicatorUnit(dateProfile, dateProfileGenerator);
- if (unit) {
- update = this.updateNowIndicator.bind(this);
- this.initialNowDate = calendar.getNow();
- this.initialNowQueriedMs = new Date().valueOf();
- // wait until the beginning of the next interval
- delay = dateEnv.add(dateEnv.startOf(this.initialNowDate, unit), createDuration(1, unit)).valueOf() - this.initialNowDate.valueOf();
- // TODO: maybe always use setTimeout, waiting until start of next unit
- this.nowIndicatorTimeoutID = setTimeout(function () {
- _this.nowIndicatorTimeoutID = null;
- update();
- if (unit === 'second') {
- delay = 1000; // every second
- }
- else {
- delay = 1000 * 60; // otherwise, every minute
- }
- _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval
- }, delay);
- }
- // rendering will be initiated in updateSize
- }
- };
- // rerenders the now indicator, computing the new current time from the amount of time that has passed
- // since the initial getNow call.
- View.prototype.updateNowIndicator = function () {
- if (this.props.dateProfile && // a way to determine if dates were rendered yet
- this.initialNowDate // activated before?
- ) {
- this.unrenderNowIndicator(); // won't unrender if unnecessary
- this.renderNowIndicator(addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs));
- this.isNowIndicatorRendered = true;
- }
- };
- // Immediately unrenders the view's current time indicator and stops any re-rendering timers.
- // Won't cause side effects if indicator isn't rendered.
- View.prototype.stopNowIndicator = function () {
- if (this.nowIndicatorTimeoutID) {
- clearTimeout(this.nowIndicatorTimeoutID);
- this.nowIndicatorTimeoutID = null;
- }
- if (this.nowIndicatorIntervalID) {
- clearInterval(this.nowIndicatorIntervalID);
- this.nowIndicatorIntervalID = null;
- }
- if (this.isNowIndicatorRendered) {
- this.unrenderNowIndicator();
- this.isNowIndicatorRendered = false;
- }
- };
- View.prototype.getNowIndicatorUnit = function (dateProfile, dateProfileGenerator) {
- // subclasses should implement
- };
- // Renders a current time indicator at the given datetime
- View.prototype.renderNowIndicator = function (date) {
- // SUBCLASSES MUST PASS TO CHILDREN!
- };
- // Undoes the rendering actions from renderNowIndicator
- View.prototype.unrenderNowIndicator = function () {
- // SUBCLASSES MUST PASS TO CHILDREN!
- };
- /* Scroller
- ------------------------------------------------------------------------------------------------------------------*/
- View.prototype.addScroll = function (scroll, isForced) {
- if (isForced) {
- scroll.isForced = isForced;
- }
- __assign(this.queuedScroll || (this.queuedScroll = {}), scroll);
- };
- View.prototype.popScroll = function (isResize) {
- this.applyQueuedScroll(isResize);
- this.queuedScroll = null;
- };
- View.prototype.applyQueuedScroll = function (isResize) {
- if (this.queuedScroll) {
- this.applyScroll(this.queuedScroll, isResize);
- }
- };
- View.prototype.queryScroll = function () {
- var scroll = {};
- if (this.props.dateProfile) { // dates rendered yet?
- __assign(scroll, this.queryDateScroll());
- }
- return scroll;
- };
- View.prototype.applyScroll = function (scroll, isResize) {
- var duration = scroll.duration, isForced = scroll.isForced;
- if (duration != null && !isForced) {
- delete scroll.duration;
- if (this.props.dateProfile) { // dates rendered yet?
- __assign(scroll, this.computeDateScroll(duration));
- }
- }
- if (this.props.dateProfile) { // dates rendered yet?
- this.applyDateScroll(scroll);
- }
- };
- View.prototype.computeDateScroll = function (duration) {
- return {}; // subclasses must implement
- };
- View.prototype.queryDateScroll = function () {
- return {}; // subclasses must implement
- };
- View.prototype.applyDateScroll = function (scroll) {
- // subclasses must implement
- };
- // for API
- View.prototype.scrollToDuration = function (duration) {
- this.applyScroll({ duration: duration }, false);
- };
- return View;
-}(DateComponent));
-EmitterMixin.mixInto(View);
-View.prototype.usesMinMaxTime = false;
-View.prototype.dateProfileGeneratorClass = DateProfileGenerator;
-
-var FgEventRenderer = /** @class */ (function () {
- function FgEventRenderer() {
- this.segs = [];
- this.isSizeDirty = false;
- }
- FgEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) {
- this.context = context;
- this.rangeUpdated(); // called too frequently :(
- // render an `.el` on each seg
- // returns a subset of the segs. segs that were actually rendered
- segs = this.renderSegEls(segs, mirrorInfo);
- this.segs = segs;
- this.attachSegs(segs, mirrorInfo);
- this.isSizeDirty = true;
- triggerRenderedSegs(this.context, this.segs, Boolean(mirrorInfo));
- };
- FgEventRenderer.prototype.unrender = function (context, _segs, mirrorInfo) {
- triggerWillRemoveSegs(this.context, this.segs, Boolean(mirrorInfo));
- this.detachSegs(this.segs);
- this.segs = [];
- };
- // Updates values that rely on options and also relate to range
- FgEventRenderer.prototype.rangeUpdated = function () {
- var options = this.context.options;
- var displayEventTime;
- var displayEventEnd;
- this.eventTimeFormat = createFormatter(options.eventTimeFormat || this.computeEventTimeFormat(), options.defaultRangeSeparator);
- displayEventTime = options.displayEventTime;
- if (displayEventTime == null) {
- displayEventTime = this.computeDisplayEventTime(); // might be based off of range
- }
- displayEventEnd = options.displayEventEnd;
- if (displayEventEnd == null) {
- displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range
- }
- this.displayEventTime = displayEventTime;
- this.displayEventEnd = displayEventEnd;
- };
- // Renders and assigns an `el` property for each foreground event segment.
- // Only returns segments that successfully rendered.
- FgEventRenderer.prototype.renderSegEls = function (segs, mirrorInfo) {
- var html = '';
- var i;
- if (segs.length) { // don't build an empty html string
- // build a large concatenation of event segment HTML
- for (i = 0; i < segs.length; i++) {
- html += this.renderSegHtml(segs[i], mirrorInfo);
- }
- // Grab individual elements from the combined HTML string. Use each as the default rendering.
- // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.
- htmlToElements(html).forEach(function (el, i) {
- var seg = segs[i];
- if (el) {
- seg.el = el;
- }
- });
- segs = filterSegsViaEls(this.context, segs, Boolean(mirrorInfo));
- }
- return segs;
- };
- // Generic utility for generating the HTML classNames for an event segment's element
- FgEventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable, mirrorInfo) {
- var classes = [
- 'fc-event',
- seg.isStart ? 'fc-start' : 'fc-not-start',
- seg.isEnd ? 'fc-end' : 'fc-not-end'
- ].concat(seg.eventRange.ui.classNames);
- if (isDraggable) {
- classes.push('fc-draggable');
- }
- if (isResizable) {
- classes.push('fc-resizable');
- }
- if (mirrorInfo) {
- classes.push('fc-mirror');
- if (mirrorInfo.isDragging) {
- classes.push('fc-dragging');
- }
- if (mirrorInfo.isResizing) {
- classes.push('fc-resizing');
- }
- }
- return classes;
- };
- // Compute the text that should be displayed on an event's element.
- // `range` can be the Event object itself, or something range-like, with at least a `start`.
- // If event times are disabled, or the event has no time, will return a blank string.
- // If not specified, formatter will default to the eventTimeFormat setting,
- // and displayEnd will default to the displayEventEnd setting.
- FgEventRenderer.prototype.getTimeText = function (eventRange, formatter, displayEnd) {
- var def = eventRange.def, instance = eventRange.instance;
- return this._getTimeText(instance.range.start, def.hasEnd ? instance.range.end : null, def.allDay, formatter, displayEnd, instance.forcedStartTzo, instance.forcedEndTzo);
- };
- FgEventRenderer.prototype._getTimeText = function (start, end, allDay, formatter, displayEnd, forcedStartTzo, forcedEndTzo) {
- var dateEnv = this.context.dateEnv;
- if (formatter == null) {
- formatter = this.eventTimeFormat;
- }
- if (displayEnd == null) {
- displayEnd = this.displayEventEnd;
- }
- if (this.displayEventTime && !allDay) {
- if (displayEnd && end) {
- return dateEnv.formatRange(start, end, formatter, {
- forcedStartTzo: forcedStartTzo,
- forcedEndTzo: forcedEndTzo
- });
- }
- else {
- return dateEnv.format(start, formatter, {
- forcedTzo: forcedStartTzo
- });
- }
- }
- return '';
- };
- FgEventRenderer.prototype.computeEventTimeFormat = function () {
- return {
- hour: 'numeric',
- minute: '2-digit',
- omitZeroMinute: true
- };
- };
- FgEventRenderer.prototype.computeDisplayEventTime = function () {
- return true;
- };
- FgEventRenderer.prototype.computeDisplayEventEnd = function () {
- return true;
- };
- // Utility for generating event skin-related CSS properties
- FgEventRenderer.prototype.getSkinCss = function (ui) {
- return {
- 'background-color': ui.backgroundColor,
- 'border-color': ui.borderColor,
- color: ui.textColor
- };
- };
- FgEventRenderer.prototype.sortEventSegs = function (segs) {
- var specs = this.context.eventOrderSpecs;
- var objs = segs.map(buildSegCompareObj);
- objs.sort(function (obj0, obj1) {
- return compareByFieldSpecs(obj0, obj1, specs);
- });
- return objs.map(function (c) {
- return c._seg;
- });
- };
- FgEventRenderer.prototype.computeSizes = function (force) {
- if (force || this.isSizeDirty) {
- this.computeSegSizes(this.segs);
- }
- };
- FgEventRenderer.prototype.assignSizes = function (force) {
- if (force || this.isSizeDirty) {
- this.assignSegSizes(this.segs);
- this.isSizeDirty = false;
- }
- };
- FgEventRenderer.prototype.computeSegSizes = function (segs) {
- };
- FgEventRenderer.prototype.assignSegSizes = function (segs) {
- };
- // Manipulation on rendered segs
- FgEventRenderer.prototype.hideByHash = function (hash) {
- if (hash) {
- for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- if (hash[seg.eventRange.instance.instanceId]) {
- seg.el.style.visibility = 'hidden';
- }
- }
- }
- };
- FgEventRenderer.prototype.showByHash = function (hash) {
- if (hash) {
- for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- if (hash[seg.eventRange.instance.instanceId]) {
- seg.el.style.visibility = '';
- }
- }
- }
- };
- FgEventRenderer.prototype.selectByInstanceId = function (instanceId) {
- if (instanceId) {
- for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- var eventInstance = seg.eventRange.instance;
- if (eventInstance && eventInstance.instanceId === instanceId &&
- seg.el // necessary?
- ) {
- seg.el.classList.add('fc-selected');
- }
- }
- }
- };
- FgEventRenderer.prototype.unselectByInstanceId = function (instanceId) {
- if (instanceId) {
- for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- if (seg.el) { // necessary?
- seg.el.classList.remove('fc-selected');
- }
- }
- }
- };
- return FgEventRenderer;
-}());
-// returns a object with all primitive props that can be compared
-function buildSegCompareObj(seg) {
- var eventDef = seg.eventRange.def;
- var range = seg.eventRange.instance.range;
- var start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events
- var end = range.end ? range.end.valueOf() : 0; // "
- return __assign({}, eventDef.extendedProps, eventDef, { id: eventDef.publicId, start: start,
- end: end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg // for later retrieval
- });
-}
-
-/*
-TODO: when refactoring this class, make a new FillRenderer instance for each `type`
-*/
-var FillRenderer = /** @class */ (function () {
- function FillRenderer() {
- this.fillSegTag = 'div';
- this.dirtySizeFlags = {};
- this.containerElsByType = {};
- this.segsByType = {};
- }
- FillRenderer.prototype.getSegsByType = function (type) {
- return this.segsByType[type] || [];
- };
- FillRenderer.prototype.renderSegs = function (type, context, segs) {
- var _a;
- this.context = context;
- var renderedSegs = this.renderSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs
- var containerEls = this.attachSegs(type, renderedSegs);
- if (containerEls) {
- (_a = (this.containerElsByType[type] || (this.containerElsByType[type] = []))).push.apply(_a, containerEls);
- }
- this.segsByType[type] = renderedSegs;
- if (type === 'bgEvent') {
- triggerRenderedSegs(context, renderedSegs, false); // isMirror=false
- }
- this.dirtySizeFlags[type] = true;
- };
- // Unrenders a specific type of fill that is currently rendered on the grid
- FillRenderer.prototype.unrender = function (type, context) {
- var segs = this.segsByType[type];
- if (segs) {
- if (type === 'bgEvent') {
- triggerWillRemoveSegs(context, segs, false); // isMirror=false
- }
- this.detachSegs(type, segs);
- }
- };
- // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.
- // Only returns segments that successfully rendered.
- FillRenderer.prototype.renderSegEls = function (type, segs) {
- var _this = this;
- var html = '';
- var i;
- if (segs.length) {
- // build a large concatenation of segment HTML
- for (i = 0; i < segs.length; i++) {
- html += this.renderSegHtml(type, segs[i]);
- }
- // Grab individual elements from the combined HTML string. Use each as the default rendering.
- // Then, compute the 'el' for each segment.
- htmlToElements(html).forEach(function (el, i) {
- var seg = segs[i];
- if (el) {
- seg.el = el;
- }
- });
- if (type === 'bgEvent') {
- segs = filterSegsViaEls(this.context, segs, false // isMirror. background events can never be mirror elements
- );
- }
- // correct element type? (would be bad if a non-TD were inserted into a table for example)
- segs = segs.filter(function (seg) {
- return elementMatches(seg.el, _this.fillSegTag);
- });
- }
- return segs;
- };
- // Builds the HTML needed for one fill segment. Generic enough to work with different types.
- FillRenderer.prototype.renderSegHtml = function (type, seg) {
- var css = null;
- var classNames = [];
- if (type !== 'highlight' && type !== 'businessHours') {
- css = {
- 'background-color': seg.eventRange.ui.backgroundColor
- };
- }
- if (type !== 'highlight') {
- classNames = classNames.concat(seg.eventRange.ui.classNames);
- }
- if (type === 'businessHours') {
- classNames.push('fc-bgevent');
- }
- else {
- classNames.push('fc-' + type.toLowerCase());
- }
- return '<' + this.fillSegTag +
- (classNames.length ? ' class="' + classNames.join(' ') + '"' : '') +
- (css ? ' style="' + cssToStr(css) + '"' : '') +
- '></' + this.fillSegTag + '>';
- };
- FillRenderer.prototype.detachSegs = function (type, segs) {
- var containerEls = this.containerElsByType[type];
- if (containerEls) {
- containerEls.forEach(removeElement);
- delete this.containerElsByType[type];
- }
- };
- FillRenderer.prototype.computeSizes = function (force) {
- for (var type in this.segsByType) {
- if (force || this.dirtySizeFlags[type]) {
- this.computeSegSizes(this.segsByType[type]);
- }
- }
- };
- FillRenderer.prototype.assignSizes = function (force) {
- for (var type in this.segsByType) {
- if (force || this.dirtySizeFlags[type]) {
- this.assignSegSizes(this.segsByType[type]);
- }
- }
- this.dirtySizeFlags = {};
- };
- FillRenderer.prototype.computeSegSizes = function (segs) {
- };
- FillRenderer.prototype.assignSegSizes = function (segs) {
- };
- return FillRenderer;
-}());
-
-var NamedTimeZoneImpl = /** @class */ (function () {
- function NamedTimeZoneImpl(timeZoneName) {
- this.timeZoneName = timeZoneName;
- }
- return NamedTimeZoneImpl;
-}());
-
-/*
-An abstraction for a dragging interaction originating on an event.
-Does higher-level things than PointerDragger, such as possibly:
-- a "mirror" that moves with the pointer
-- a minimum number of pixels or other criteria for a true drag to begin
-
-subclasses must emit:
-- pointerdown
-- dragstart
-- dragmove
-- pointerup
-- dragend
-*/
-var ElementDragging = /** @class */ (function () {
- function ElementDragging(el) {
- this.emitter = new EmitterMixin();
- }
- ElementDragging.prototype.destroy = function () {
- };
- ElementDragging.prototype.setMirrorIsVisible = function (bool) {
- // optional if subclass doesn't want to support a mirror
- };
- ElementDragging.prototype.setMirrorNeedsRevert = function (bool) {
- // optional if subclass doesn't want to support a mirror
- };
- ElementDragging.prototype.setAutoScrollEnabled = function (bool) {
- // optional
- };
- return ElementDragging;
-}());
-
-function formatDate(dateInput, settings) {
- if (settings === void 0) { settings = {}; }
- var dateEnv = buildDateEnv$1(settings);
- var formatter = createFormatter(settings);
- var dateMeta = dateEnv.createMarkerMeta(dateInput);
- if (!dateMeta) { // TODO: warning?
- return '';
- }
- return dateEnv.format(dateMeta.marker, formatter, {
- forcedTzo: dateMeta.forcedTzo
- });
-}
-function formatRange(startInput, endInput, settings // mixture of env and formatter settings
-) {
- var dateEnv = buildDateEnv$1(typeof settings === 'object' && settings ? settings : {}); // pass in if non-null object
- var formatter = createFormatter(settings, globalDefaults.defaultRangeSeparator);
- var startMeta = dateEnv.createMarkerMeta(startInput);
- var endMeta = dateEnv.createMarkerMeta(endInput);
- if (!startMeta || !endMeta) { // TODO: warning?
- return '';
- }
- return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {
- forcedStartTzo: startMeta.forcedTzo,
- forcedEndTzo: endMeta.forcedTzo,
- isEndExclusive: settings.isEndExclusive
- });
-}
-// TODO: more DRY and optimized
-function buildDateEnv$1(settings) {
- var locale = buildLocale(settings.locale || 'en', parseRawLocales([]).map); // TODO: don't hardcode 'en' everywhere
- // ensure required settings
- settings = __assign({ timeZone: globalDefaults.timeZone, calendarSystem: 'gregory' }, settings, { locale: locale });
- return new DateEnv(settings);
-}
-
-var DRAG_META_PROPS = {
- startTime: createDuration,
- duration: createDuration,
- create: Boolean,
- sourceId: String
-};
-var DRAG_META_DEFAULTS = {
- create: true
-};
-function parseDragMeta(raw) {
- var leftoverProps = {};
- var refined = refineProps(raw, DRAG_META_PROPS, DRAG_META_DEFAULTS, leftoverProps);
- refined.leftoverProps = leftoverProps;
- return refined;
-}
-
-// Computes a default column header formatting string if `colFormat` is not explicitly defined
-function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
- // if more than one week row, or if there are a lot of columns with not much space,
- // put just the day numbers will be in each cell
- if (!datesRepDistinctDays || dayCnt > 10) {
- return { weekday: 'short' }; // "Sat"
- }
- else if (dayCnt > 1) {
- return { weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }; // "Sat 11/12"
- }
- else {
- return { weekday: 'long' }; // "Saturday"
- }
-}
-function renderDateCell(dateMarker, dateProfile, datesRepDistinctDays, colCnt, colHeadFormat, context, colspan, otherAttrs) {
- var dateEnv = context.dateEnv, theme = context.theme, options = context.options;
- var isDateValid = rangeContainsMarker(dateProfile.activeRange, dateMarker); // TODO: called too frequently. cache somehow.
- var classNames = [
- 'fc-day-header',
- theme.getClass('widgetHeader')
- ];
- var innerHtml;
- if (typeof options.columnHeaderHtml === 'function') {
- innerHtml = options.columnHeaderHtml(dateEnv.toDate(dateMarker));
- }
- else if (typeof options.columnHeaderText === 'function') {
- innerHtml = htmlEscape(options.columnHeaderText(dateEnv.toDate(dateMarker)));
- }
- else {
- innerHtml = htmlEscape(dateEnv.format(dateMarker, colHeadFormat));
- }
- // if only one row of days, the classNames on the header can represent the specific days beneath
- if (datesRepDistinctDays) {
- classNames = classNames.concat(
- // includes the day-of-week class
- // noThemeHighlight=true (don't highlight the header)
- getDayClasses(dateMarker, dateProfile, context, true));
- }
- else {
- classNames.push('fc-' + DAY_IDS[dateMarker.getUTCDay()]); // only add the day-of-week class
- }
- return '' +
- '<th class="' + classNames.join(' ') + '"' +
- ((isDateValid && datesRepDistinctDays) ?
- ' data-date="' + dateEnv.formatIso(dateMarker, { omitTime: true }) + '"' :
- '') +
- (colspan > 1 ?
- ' colspan="' + colspan + '"' :
- '') +
- (otherAttrs ?
- ' ' + otherAttrs :
- '') +
- '>' +
- (isDateValid ?
- // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)
- buildGotoAnchorHtml(options, dateEnv, { date: dateMarker, forceOff: !datesRepDistinctDays || colCnt === 1 }, innerHtml) :
- // if not valid, display text, but no link
- innerHtml) +
- '</th>';
-}
-
-var DayHeader = /** @class */ (function (_super) {
- __extends(DayHeader, _super);
- function DayHeader(parentEl) {
- var _this = _super.call(this) || this;
- _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- _this.parentEl = parentEl;
- return _this;
- }
- DayHeader.prototype.render = function (props, context) {
- var dates = props.dates, datesRepDistinctDays = props.datesRepDistinctDays;
- var parts = [];
- this.renderSkeleton(context);
- if (props.renderIntroHtml) {
- parts.push(props.renderIntroHtml());
- }
- var colHeadFormat = createFormatter(context.options.columnHeaderFormat ||
- computeFallbackHeaderFormat(datesRepDistinctDays, dates.length));
- for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {
- var date = dates_1[_i];
- parts.push(renderDateCell(date, props.dateProfile, datesRepDistinctDays, dates.length, colHeadFormat, context));
- }
- if (context.isRtl) {
- parts.reverse();
- }
- this.thead.innerHTML = '<tr>' + parts.join('') + '</tr>';
- };
- DayHeader.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderSkeleton.unrender();
- };
- DayHeader.prototype._renderSkeleton = function (context) {
- var theme = context.theme;
- var parentEl = this.parentEl;
- parentEl.innerHTML = ''; // because might be nbsp
- parentEl.appendChild(this.el = htmlToElement('<div class="fc-row ' + theme.getClass('headerRow') + '">' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- '<thead></thead>' +
- '</table>' +
- '</div>'));
- this.thead = this.el.querySelector('thead');
- };
- DayHeader.prototype._unrenderSkeleton = function () {
- removeElement(this.el);
- };
- return DayHeader;
-}(Component));
-
-var DaySeries = /** @class */ (function () {
- function DaySeries(range, dateProfileGenerator) {
- var date = range.start;
- var end = range.end;
- var indices = [];
- var dates = [];
- var dayIndex = -1;
- while (date < end) { // loop each day from start to end
- if (dateProfileGenerator.isHiddenDay(date)) {
- indices.push(dayIndex + 0.5); // mark that it's between indices
- }
- else {
- dayIndex++;
- indices.push(dayIndex);
- dates.push(date);
- }
- date = addDays(date, 1);
- }
- this.dates = dates;
- this.indices = indices;
- this.cnt = dates.length;
- }
- DaySeries.prototype.sliceRange = function (range) {
- var firstIndex = this.getDateDayIndex(range.start); // inclusive first index
- var lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index
- var clippedFirstIndex = Math.max(0, firstIndex);
- var clippedLastIndex = Math.min(this.cnt - 1, lastIndex);
- // deal with in-between indices
- clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell
- clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell
- if (clippedFirstIndex <= clippedLastIndex) {
- return {
- firstIndex: clippedFirstIndex,
- lastIndex: clippedLastIndex,
- isStart: firstIndex === clippedFirstIndex,
- isEnd: lastIndex === clippedLastIndex
- };
- }
- else {
- return null;
- }
- };
- // Given a date, returns its chronolocial cell-index from the first cell of the grid.
- // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.
- // If before the first offset, returns a negative number.
- // If after the last offset, returns an offset past the last cell offset.
- // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.
- DaySeries.prototype.getDateDayIndex = function (date) {
- var indices = this.indices;
- var dayOffset = Math.floor(diffDays(this.dates[0], date));
- if (dayOffset < 0) {
- return indices[0] - 1;
- }
- else if (dayOffset >= indices.length) {
- return indices[indices.length - 1] + 1;
- }
- else {
- return indices[dayOffset];
- }
- };
- return DaySeries;
-}());
-
-var DayTable = /** @class */ (function () {
- function DayTable(daySeries, breakOnWeeks) {
- var dates = daySeries.dates;
- var daysPerRow;
- var firstDay;
- var rowCnt;
- if (breakOnWeeks) {
- // count columns until the day-of-week repeats
- firstDay = dates[0].getUTCDay();
- for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow++) {
- if (dates[daysPerRow].getUTCDay() === firstDay) {
- break;
- }
- }
- rowCnt = Math.ceil(dates.length / daysPerRow);
- }
- else {
- rowCnt = 1;
- daysPerRow = dates.length;
- }
- this.rowCnt = rowCnt;
- this.colCnt = daysPerRow;
- this.daySeries = daySeries;
- this.cells = this.buildCells();
- this.headerDates = this.buildHeaderDates();
- }
- DayTable.prototype.buildCells = function () {
- var rows = [];
- for (var row = 0; row < this.rowCnt; row++) {
- var cells = [];
- for (var col = 0; col < this.colCnt; col++) {
- cells.push(this.buildCell(row, col));
- }
- rows.push(cells);
- }
- return rows;
- };
- DayTable.prototype.buildCell = function (row, col) {
- return {
- date: this.daySeries.dates[row * this.colCnt + col]
- };
- };
- DayTable.prototype.buildHeaderDates = function () {
- var dates = [];
- for (var col = 0; col < this.colCnt; col++) {
- dates.push(this.cells[0][col].date);
- }
- return dates;
- };
- DayTable.prototype.sliceRange = function (range) {
- var colCnt = this.colCnt;
- var seriesSeg = this.daySeries.sliceRange(range);
- var segs = [];
- if (seriesSeg) {
- var firstIndex = seriesSeg.firstIndex, lastIndex = seriesSeg.lastIndex;
- var index = firstIndex;
- while (index <= lastIndex) {
- var row = Math.floor(index / colCnt);
- var nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);
- segs.push({
- row: row,
- firstCol: index % colCnt,
- lastCol: (nextIndex - 1) % colCnt,
- isStart: seriesSeg.isStart && index === firstIndex,
- isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex
- });
- index = nextIndex;
- }
- }
- return segs;
- };
- return DayTable;
-}());
-
-var Slicer = /** @class */ (function () {
- function Slicer() {
- this.sliceBusinessHours = memoize(this._sliceBusinessHours);
- this.sliceDateSelection = memoize(this._sliceDateSpan);
- this.sliceEventStore = memoize(this._sliceEventStore);
- this.sliceEventDrag = memoize(this._sliceInteraction);
- this.sliceEventResize = memoize(this._sliceInteraction);
- }
- Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, calendar, component) {
- var extraArgs = [];
- for (var _i = 5; _i < arguments.length; _i++) {
- extraArgs[_i - 5] = arguments[_i];
- }
- var eventUiBases = props.eventUiBases;
- var eventSegs = this.sliceEventStore.apply(this, [props.eventStore, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs));
- return {
- dateSelectionSegs: this.sliceDateSelection.apply(this, [props.dateSelection, eventUiBases, component].concat(extraArgs)),
- businessHourSegs: this.sliceBusinessHours.apply(this, [props.businessHours, dateProfile, nextDayThreshold, calendar, component].concat(extraArgs)),
- fgEventSegs: eventSegs.fg,
- bgEventSegs: eventSegs.bg,
- eventDrag: this.sliceEventDrag.apply(this, [props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)),
- eventResize: this.sliceEventResize.apply(this, [props.eventResize, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)),
- eventSelection: props.eventSelection
- }; // TODO: give interactionSegs?
- };
- Slicer.prototype.sliceNowDate = function (// does not memoize
- date, component) {
- var extraArgs = [];
- for (var _i = 2; _i < arguments.length; _i++) {
- extraArgs[_i - 2] = arguments[_i];
- }
- return this._sliceDateSpan.apply(this, [{ range: { start: date, end: addMs(date, 1) }, allDay: false },
- {},
- component].concat(extraArgs));
- };
- Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, calendar, component) {
- var extraArgs = [];
- for (var _i = 5; _i < arguments.length; _i++) {
- extraArgs[_i - 5] = arguments[_i];
- }
- if (!businessHours) {
- return [];
- }
- return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), calendar),
- {},
- dateProfile,
- nextDayThreshold,
- component].concat(extraArgs)).bg;
- };
- Slicer.prototype._sliceEventStore = function (eventStore, eventUiBases, dateProfile, nextDayThreshold, component) {
- var extraArgs = [];
- for (var _i = 5; _i < arguments.length; _i++) {
- extraArgs[_i - 5] = arguments[_i];
- }
- if (eventStore) {
- var rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
- return {
- bg: this.sliceEventRanges(rangeRes.bg, component, extraArgs),
- fg: this.sliceEventRanges(rangeRes.fg, component, extraArgs)
- };
- }
- else {
- return { bg: [], fg: [] };
- }
- };
- Slicer.prototype._sliceInteraction = function (interaction, eventUiBases, dateProfile, nextDayThreshold, component) {
- var extraArgs = [];
- for (var _i = 5; _i < arguments.length; _i++) {
- extraArgs[_i - 5] = arguments[_i];
- }
- if (!interaction) {
- return null;
- }
- var rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
- return {
- segs: this.sliceEventRanges(rangeRes.fg, component, extraArgs),
- affectedInstances: interaction.affectedEvents.instances,
- isEvent: interaction.isEvent,
- sourceSeg: interaction.origSeg
- };
- };
- Slicer.prototype._sliceDateSpan = function (dateSpan, eventUiBases, component) {
- var extraArgs = [];
- for (var _i = 3; _i < arguments.length; _i++) {
- extraArgs[_i - 3] = arguments[_i];
- }
- if (!dateSpan) {
- return [];
- }
- var eventRange = fabricateEventRange(dateSpan, eventUiBases, component.context.calendar);
- var segs = this.sliceRange.apply(this, [dateSpan.range].concat(extraArgs));
- for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {
- var seg = segs_1[_a];
- seg.component = component;
- seg.eventRange = eventRange;
- }
- return segs;
- };
- /*
- "complete" seg means it has component and eventRange
- */
- Slicer.prototype.sliceEventRanges = function (eventRanges, component, // TODO: kill
- extraArgs) {
- var segs = [];
- for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
- var eventRange = eventRanges_1[_i];
- segs.push.apply(segs, this.sliceEventRange(eventRange, component, extraArgs));
- }
- return segs;
- };
- /*
- "complete" seg means it has component and eventRange
- */
- Slicer.prototype.sliceEventRange = function (eventRange, component, // TODO: kill
- extraArgs) {
- var segs = this.sliceRange.apply(this, [eventRange.range].concat(extraArgs));
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- seg.component = component;
- seg.eventRange = eventRange;
- seg.isStart = eventRange.isStart && seg.isStart;
- seg.isEnd = eventRange.isEnd && seg.isEnd;
- }
- return segs;
- };
- return Slicer;
-}());
-/*
-for incorporating minTime/maxTime if appropriate
-TODO: should be part of DateProfile!
-TimelineDateProfile already does this btw
-*/
-function computeActiveRange(dateProfile, isComponentAllDay) {
- var range = dateProfile.activeRange;
- if (isComponentAllDay) {
- return range;
- }
- return {
- start: addMs(range.start, dateProfile.minTime.milliseconds),
- end: addMs(range.end, dateProfile.maxTime.milliseconds - 864e5) // 864e5 = ms in a day
- };
-}
-
-// exports
-// --------------------------------------------------------------------------------------------------
-var version = '4.4.2';
-
-export { Calendar, Component, ComponentContext, DateComponent, DateEnv, DateProfileGenerator, DayHeader, DaySeries, DayTable, ElementDragging, ElementScrollController, EmitterMixin, EventApi, FgEventRenderer, FillRenderer, Interaction, Mixin, NamedTimeZoneImpl, PositionCache, ScrollComponent, ScrollController, Slicer, Splitter, Theme, View, WindowScrollController, addDays, addDurations, addMs, addWeeks, allowContextMenu, allowSelection, appendToElement, applyAll, applyMutationToEventStore, applyStyle, applyStyleProp, asRoughMinutes, asRoughMs, asRoughSeconds, buildGotoAnchorHtml, buildSegCompareObj, capitaliseFirstLetter, combineEventUis, compareByFieldSpec, compareByFieldSpecs, compareNumbers, compensateScroll, computeClippingRect, computeEdges, computeEventDraggable, computeEventEndResizable, computeEventStartResizable, computeFallbackHeaderFormat, computeHeightAndMargins, computeInnerRect, computeRect, computeVisibleDayRange, config, constrainPoint, createDuration, createElement, createEmptyEventStore, createEventInstance, createFormatter, createPlugin, cssToStr, debounce, diffDates, diffDayAndTime, diffDays, diffPoints, diffWeeks, diffWholeDays, diffWholeWeeks, disableCursor, distributeHeight, elementClosest, elementMatches, enableCursor, eventTupleToStore, filterEventStoreDefs, filterHash, findChildren, findElements, flexibleCompare, forceClassName, formatDate, formatIsoTimeString, formatRange, getAllDayHtml, getClippingParents, getDayClasses, getElSeg, getRectCenter, getRelevantEvents, globalDefaults, greatestDurationDenominator, hasBgRendering, htmlEscape, htmlToElement, insertAfterElement, interactionSettingsStore, interactionSettingsToStore, intersectRanges, intersectRects, isArraysEqual, isDateSpansEqual, isInt, isInteractionValid, isMultiDayRange, isPropsEqual, isPropsValid, isSingleDay, isValidDate, listenBySelector, mapHash, matchCellWidths, memoize, memoizeOutput, memoizeRendering, mergeEventStores, multiplyDuration, padStart, parseBusinessHours, parseDragMeta, parseEventDef, parseFieldSpecs, parse as parseMarker, pointInsideRect, prependToElement, preventContextMenu, preventDefault, preventSelection, processScopedUiProps, rangeContainsMarker, rangeContainsRange, rangesEqual, rangesIntersect, refineProps, removeElement, removeExact, renderDateCell, requestJson, sliceEventStore, startOfDay, subtractInnerElHeight, translateRect, uncompensateScroll, undistributeHeight, unpromisify, version, whenTransitionDone, wholeDivideDurations };
diff --git a/library/fullcalendar/packages/core/main.js b/library/fullcalendar/packages/core/main.js
deleted file mode 100644
index 2cb657a60..000000000
--- a/library/fullcalendar/packages/core/main.js
+++ /dev/null
@@ -1,8745 +0,0 @@
-/*!
-FullCalendar Core Package v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
- (global = global || self, factory(global.FullCalendar = {}));
-}(this, function (exports) { 'use strict';
-
- // Creating
- // ----------------------------------------------------------------------------------------------------------------
- var elementPropHash = {
- className: true,
- colSpan: true,
- rowSpan: true
- };
- var containerTagHash = {
- '<tr': 'tbody',
- '<td': 'tr'
- };
- function createElement(tagName, attrs, content) {
- var el = document.createElement(tagName);
- if (attrs) {
- for (var attrName in attrs) {
- if (attrName === 'style') {
- applyStyle(el, attrs[attrName]);
- }
- else if (elementPropHash[attrName]) {
- el[attrName] = attrs[attrName];
- }
- else {
- el.setAttribute(attrName, attrs[attrName]);
- }
- }
- }
- if (typeof content === 'string') {
- el.innerHTML = content; // shortcut. no need to process HTML in any way
- }
- else if (content != null) {
- appendToElement(el, content);
- }
- return el;
- }
- function htmlToElement(html) {
- html = html.trim();
- var container = document.createElement(computeContainerTag(html));
- container.innerHTML = html;
- return container.firstChild;
- }
- function htmlToElements(html) {
- return Array.prototype.slice.call(htmlToNodeList(html));
- }
- function htmlToNodeList(html) {
- html = html.trim();
- var container = document.createElement(computeContainerTag(html));
- container.innerHTML = html;
- return container.childNodes;
- }
- // assumes html already trimmed and tag names are lowercase
- function computeContainerTag(html) {
- return containerTagHash[html.substr(0, 3) // faster than using regex
- ] || 'div';
- }
- function appendToElement(el, content) {
- var childNodes = normalizeContent(content);
- for (var i = 0; i < childNodes.length; i++) {
- el.appendChild(childNodes[i]);
- }
- }
- function prependToElement(parent, content) {
- var newEls = normalizeContent(content);
- var afterEl = parent.firstChild || null; // if no firstChild, will append to end, but that's okay, b/c there were no children
- for (var i = 0; i < newEls.length; i++) {
- parent.insertBefore(newEls[i], afterEl);
- }
- }
- function insertAfterElement(refEl, content) {
- var newEls = normalizeContent(content);
- var afterEl = refEl.nextSibling || null;
- for (var i = 0; i < newEls.length; i++) {
- refEl.parentNode.insertBefore(newEls[i], afterEl);
- }
- }
- function normalizeContent(content) {
- var els;
- if (typeof content === 'string') {
- els = htmlToElements(content);
- }
- else if (content instanceof Node) {
- els = [content];
- }
- else { // Node[] or NodeList
- els = Array.prototype.slice.call(content);
- }
- return els;
- }
- function removeElement(el) {
- if (el.parentNode) {
- el.parentNode.removeChild(el);
- }
- }
- // Querying
- // ----------------------------------------------------------------------------------------------------------------
- // from https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
- var matchesMethod = Element.prototype.matches ||
- Element.prototype.matchesSelector ||
- Element.prototype.msMatchesSelector;
- var closestMethod = Element.prototype.closest || function (selector) {
- // polyfill
- var el = this;
- if (!document.documentElement.contains(el)) {
- return null;
- }
- do {
- if (elementMatches(el, selector)) {
- return el;
- }
- el = el.parentElement || el.parentNode;
- } while (el !== null && el.nodeType === 1);
- return null;
- };
- function elementClosest(el, selector) {
- return closestMethod.call(el, selector);
- }
- function elementMatches(el, selector) {
- return matchesMethod.call(el, selector);
- }
- // accepts multiple subject els
- // returns a real array. good for methods like forEach
- function findElements(container, selector) {
- var containers = container instanceof HTMLElement ? [container] : container;
- var allMatches = [];
- for (var i = 0; i < containers.length; i++) {
- var matches = containers[i].querySelectorAll(selector);
- for (var j = 0; j < matches.length; j++) {
- allMatches.push(matches[j]);
- }
- }
- return allMatches;
- }
- // accepts multiple subject els
- // only queries direct child elements
- function findChildren(parent, selector) {
- var parents = parent instanceof HTMLElement ? [parent] : parent;
- var allMatches = [];
- for (var i = 0; i < parents.length; i++) {
- var childNodes = parents[i].children; // only ever elements
- for (var j = 0; j < childNodes.length; j++) {
- var childNode = childNodes[j];
- if (!selector || elementMatches(childNode, selector)) {
- allMatches.push(childNode);
- }
- }
- }
- return allMatches;
- }
- // Attributes
- // ----------------------------------------------------------------------------------------------------------------
- function forceClassName(el, className, bool) {
- if (bool) {
- el.classList.add(className);
- }
- else {
- el.classList.remove(className);
- }
- }
- // Style
- // ----------------------------------------------------------------------------------------------------------------
- var PIXEL_PROP_RE = /(top|left|right|bottom|width|height)$/i;
- function applyStyle(el, props) {
- for (var propName in props) {
- applyStyleProp(el, propName, props[propName]);
- }
- }
- function applyStyleProp(el, name, val) {
- if (val == null) {
- el.style[name] = '';
- }
- else if (typeof val === 'number' && PIXEL_PROP_RE.test(name)) {
- el.style[name] = val + 'px';
- }
- else {
- el.style[name] = val;
- }
- }
-
- function pointInsideRect(point, rect) {
- return point.left >= rect.left &&
- point.left < rect.right &&
- point.top >= rect.top &&
- point.top < rect.bottom;
- }
- // Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false
- function intersectRects(rect1, rect2) {
- var res = {
- left: Math.max(rect1.left, rect2.left),
- right: Math.min(rect1.right, rect2.right),
- top: Math.max(rect1.top, rect2.top),
- bottom: Math.min(rect1.bottom, rect2.bottom)
- };
- if (res.left < res.right && res.top < res.bottom) {
- return res;
- }
- return false;
- }
- function translateRect(rect, deltaX, deltaY) {
- return {
- left: rect.left + deltaX,
- right: rect.right + deltaX,
- top: rect.top + deltaY,
- bottom: rect.bottom + deltaY
- };
- }
- // Returns a new point that will have been moved to reside within the given rectangle
- function constrainPoint(point, rect) {
- return {
- left: Math.min(Math.max(point.left, rect.left), rect.right),
- top: Math.min(Math.max(point.top, rect.top), rect.bottom)
- };
- }
- // Returns a point that is the center of the given rectangle
- function getRectCenter(rect) {
- return {
- left: (rect.left + rect.right) / 2,
- top: (rect.top + rect.bottom) / 2
- };
- }
- // Subtracts point2's coordinates from point1's coordinates, returning a delta
- function diffPoints(point1, point2) {
- return {
- left: point1.left - point2.left,
- top: point1.top - point2.top
- };
- }
-
- // Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side
- var isRtlScrollbarOnLeft = null;
- function getIsRtlScrollbarOnLeft() {
- if (isRtlScrollbarOnLeft === null) {
- isRtlScrollbarOnLeft = computeIsRtlScrollbarOnLeft();
- }
- return isRtlScrollbarOnLeft;
- }
- function computeIsRtlScrollbarOnLeft() {
- var outerEl = createElement('div', {
- style: {
- position: 'absolute',
- top: -1000,
- left: 0,
- border: 0,
- padding: 0,
- overflow: 'scroll',
- direction: 'rtl'
- }
- }, '<div></div>');
- document.body.appendChild(outerEl);
- var innerEl = outerEl.firstChild;
- var res = innerEl.getBoundingClientRect().left > outerEl.getBoundingClientRect().left;
- removeElement(outerEl);
- return res;
- }
- // The scrollbar width computations in computeEdges are sometimes flawed when it comes to
- // retina displays, rounding, and IE11. Massage them into a usable value.
- function sanitizeScrollbarWidth(width) {
- width = Math.max(0, width); // no negatives
- width = Math.round(width);
- return width;
- }
-
- function computeEdges(el, getPadding) {
- if (getPadding === void 0) { getPadding = false; }
- var computedStyle = window.getComputedStyle(el);
- var borderLeft = parseInt(computedStyle.borderLeftWidth, 10) || 0;
- var borderRight = parseInt(computedStyle.borderRightWidth, 10) || 0;
- var borderTop = parseInt(computedStyle.borderTopWidth, 10) || 0;
- var borderBottom = parseInt(computedStyle.borderBottomWidth, 10) || 0;
- // must use offset(Width|Height) because compatible with client(Width|Height)
- var scrollbarLeftRight = sanitizeScrollbarWidth(el.offsetWidth - el.clientWidth - borderLeft - borderRight);
- var scrollbarBottom = sanitizeScrollbarWidth(el.offsetHeight - el.clientHeight - borderTop - borderBottom);
- var res = {
- borderLeft: borderLeft,
- borderRight: borderRight,
- borderTop: borderTop,
- borderBottom: borderBottom,
- scrollbarBottom: scrollbarBottom,
- scrollbarLeft: 0,
- scrollbarRight: 0
- };
- if (getIsRtlScrollbarOnLeft() && computedStyle.direction === 'rtl') { // is the scrollbar on the left side?
- res.scrollbarLeft = scrollbarLeftRight;
- }
- else {
- res.scrollbarRight = scrollbarLeftRight;
- }
- if (getPadding) {
- res.paddingLeft = parseInt(computedStyle.paddingLeft, 10) || 0;
- res.paddingRight = parseInt(computedStyle.paddingRight, 10) || 0;
- res.paddingTop = parseInt(computedStyle.paddingTop, 10) || 0;
- res.paddingBottom = parseInt(computedStyle.paddingBottom, 10) || 0;
- }
- return res;
- }
- function computeInnerRect(el, goWithinPadding) {
- if (goWithinPadding === void 0) { goWithinPadding = false; }
- var outerRect = computeRect(el);
- var edges = computeEdges(el, goWithinPadding);
- var res = {
- left: outerRect.left + edges.borderLeft + edges.scrollbarLeft,
- right: outerRect.right - edges.borderRight - edges.scrollbarRight,
- top: outerRect.top + edges.borderTop,
- bottom: outerRect.bottom - edges.borderBottom - edges.scrollbarBottom
- };
- if (goWithinPadding) {
- res.left += edges.paddingLeft;
- res.right -= edges.paddingRight;
- res.top += edges.paddingTop;
- res.bottom -= edges.paddingBottom;
- }
- return res;
- }
- function computeRect(el) {
- var rect = el.getBoundingClientRect();
- return {
- left: rect.left + window.pageXOffset,
- top: rect.top + window.pageYOffset,
- right: rect.right + window.pageXOffset,
- bottom: rect.bottom + window.pageYOffset
- };
- }
- function computeViewportRect() {
- return {
- left: window.pageXOffset,
- right: window.pageXOffset + document.documentElement.clientWidth,
- top: window.pageYOffset,
- bottom: window.pageYOffset + document.documentElement.clientHeight
- };
- }
- function computeHeightAndMargins(el) {
- return el.getBoundingClientRect().height + computeVMargins(el);
- }
- function computeVMargins(el) {
- var computed = window.getComputedStyle(el);
- return parseInt(computed.marginTop, 10) +
- parseInt(computed.marginBottom, 10);
- }
- // does not return window
- function getClippingParents(el) {
- var parents = [];
- while (el instanceof HTMLElement) { // will stop when gets to document or null
- var computedStyle = window.getComputedStyle(el);
- if (computedStyle.position === 'fixed') {
- break;
- }
- if ((/(auto|scroll)/).test(computedStyle.overflow + computedStyle.overflowY + computedStyle.overflowX)) {
- parents.push(el);
- }
- el = el.parentNode;
- }
- return parents;
- }
- function computeClippingRect(el) {
- return getClippingParents(el)
- .map(function (el) {
- return computeInnerRect(el);
- })
- .concat(computeViewportRect())
- .reduce(function (rect0, rect1) {
- return intersectRects(rect0, rect1) || rect1; // should always intersect
- });
- }
-
- // Stops a mouse/touch event from doing it's native browser action
- function preventDefault(ev) {
- ev.preventDefault();
- }
- // Event Delegation
- // ----------------------------------------------------------------------------------------------------------------
- function listenBySelector(container, eventType, selector, handler) {
- function realHandler(ev) {
- var matchedChild = elementClosest(ev.target, selector);
- if (matchedChild) {
- handler.call(matchedChild, ev, matchedChild);
- }
- }
- container.addEventListener(eventType, realHandler);
- return function () {
- container.removeEventListener(eventType, realHandler);
- };
- }
- function listenToHoverBySelector(container, selector, onMouseEnter, onMouseLeave) {
- var currentMatchedChild;
- return listenBySelector(container, 'mouseover', selector, function (ev, matchedChild) {
- if (matchedChild !== currentMatchedChild) {
- currentMatchedChild = matchedChild;
- onMouseEnter(ev, matchedChild);
- var realOnMouseLeave_1 = function (ev) {
- currentMatchedChild = null;
- onMouseLeave(ev, matchedChild);
- matchedChild.removeEventListener('mouseleave', realOnMouseLeave_1);
- };
- // listen to the next mouseleave, and then unattach
- matchedChild.addEventListener('mouseleave', realOnMouseLeave_1);
- }
- });
- }
- // Animation
- // ----------------------------------------------------------------------------------------------------------------
- var transitionEventNames = [
- 'webkitTransitionEnd',
- 'otransitionend',
- 'oTransitionEnd',
- 'msTransitionEnd',
- 'transitionend'
- ];
- // triggered only when the next single subsequent transition finishes
- function whenTransitionDone(el, callback) {
- var realCallback = function (ev) {
- callback(ev);
- transitionEventNames.forEach(function (eventName) {
- el.removeEventListener(eventName, realCallback);
- });
- };
- transitionEventNames.forEach(function (eventName) {
- el.addEventListener(eventName, realCallback); // cross-browser way to determine when the transition finishes
- });
- }
-
- var DAY_IDS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
- // Adding
- function addWeeks(m, n) {
- var a = dateToUtcArray(m);
- a[2] += n * 7;
- return arrayToUtcDate(a);
- }
- function addDays(m, n) {
- var a = dateToUtcArray(m);
- a[2] += n;
- return arrayToUtcDate(a);
- }
- function addMs(m, n) {
- var a = dateToUtcArray(m);
- a[6] += n;
- return arrayToUtcDate(a);
- }
- // Diffing (all return floats)
- function diffWeeks(m0, m1) {
- return diffDays(m0, m1) / 7;
- }
- function diffDays(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60 * 24);
- }
- function diffHours(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / (1000 * 60 * 60);
- }
- function diffMinutes(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / (1000 * 60);
- }
- function diffSeconds(m0, m1) {
- return (m1.valueOf() - m0.valueOf()) / 1000;
- }
- function diffDayAndTime(m0, m1) {
- var m0day = startOfDay(m0);
- var m1day = startOfDay(m1);
- return {
- years: 0,
- months: 0,
- days: Math.round(diffDays(m0day, m1day)),
- milliseconds: (m1.valueOf() - m1day.valueOf()) - (m0.valueOf() - m0day.valueOf())
- };
- }
- // Diffing Whole Units
- function diffWholeWeeks(m0, m1) {
- var d = diffWholeDays(m0, m1);
- if (d !== null && d % 7 === 0) {
- return d / 7;
- }
- return null;
- }
- function diffWholeDays(m0, m1) {
- if (timeAsMs(m0) === timeAsMs(m1)) {
- return Math.round(diffDays(m0, m1));
- }
- return null;
- }
- // Start-Of
- function startOfDay(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate()
- ]);
- }
- function startOfHour(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate(),
- m.getUTCHours()
- ]);
- }
- function startOfMinute(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate(),
- m.getUTCHours(),
- m.getUTCMinutes()
- ]);
- }
- function startOfSecond(m) {
- return arrayToUtcDate([
- m.getUTCFullYear(),
- m.getUTCMonth(),
- m.getUTCDate(),
- m.getUTCHours(),
- m.getUTCMinutes(),
- m.getUTCSeconds()
- ]);
- }
- // Week Computation
- function weekOfYear(marker, dow, doy) {
- var y = marker.getUTCFullYear();
- var w = weekOfGivenYear(marker, y, dow, doy);
- if (w < 1) {
- return weekOfGivenYear(marker, y - 1, dow, doy);
- }
- var nextW = weekOfGivenYear(marker, y + 1, dow, doy);
- if (nextW >= 1) {
- return Math.min(w, nextW);
- }
- return w;
- }
- function weekOfGivenYear(marker, year, dow, doy) {
- var firstWeekStart = arrayToUtcDate([year, 0, 1 + firstWeekOffset(year, dow, doy)]);
- var dayStart = startOfDay(marker);
- var days = Math.round(diffDays(firstWeekStart, dayStart));
- return Math.floor(days / 7) + 1; // zero-indexed
- }
- // start-of-first-week - start-of-year
- function firstWeekOffset(year, dow, doy) {
- // first-week day -- which january is always in the first week (4 for iso, 1 for other)
- var fwd = 7 + dow - doy;
- // first-week day local weekday -- which local weekday is fwd
- var fwdlw = (7 + arrayToUtcDate([year, 0, fwd]).getUTCDay() - dow) % 7;
- return -fwdlw + fwd - 1;
- }
- // Array Conversion
- function dateToLocalArray(date) {
- return [
- date.getFullYear(),
- date.getMonth(),
- date.getDate(),
- date.getHours(),
- date.getMinutes(),
- date.getSeconds(),
- date.getMilliseconds()
- ];
- }
- function arrayToLocalDate(a) {
- return new Date(a[0], a[1] || 0, a[2] == null ? 1 : a[2], // day of month
- a[3] || 0, a[4] || 0, a[5] || 0);
- }
- function dateToUtcArray(date) {
- return [
- date.getUTCFullYear(),
- date.getUTCMonth(),
- date.getUTCDate(),
- date.getUTCHours(),
- date.getUTCMinutes(),
- date.getUTCSeconds(),
- date.getUTCMilliseconds()
- ];
- }
- function arrayToUtcDate(a) {
- // according to web standards (and Safari), a month index is required.
- // massage if only given a year.
- if (a.length === 1) {
- a = a.concat([0]);
- }
- return new Date(Date.UTC.apply(Date, a));
- }
- // Other Utils
- function isValidDate(m) {
- return !isNaN(m.valueOf());
- }
- function timeAsMs(m) {
- return m.getUTCHours() * 1000 * 60 * 60 +
- m.getUTCMinutes() * 1000 * 60 +
- m.getUTCSeconds() * 1000 +
- m.getUTCMilliseconds();
- }
-
- var INTERNAL_UNITS = ['years', 'months', 'days', 'milliseconds'];
- var PARSE_RE = /^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;
- // Parsing and Creation
- function createDuration(input, unit) {
- var _a;
- if (typeof input === 'string') {
- return parseString(input);
- }
- else if (typeof input === 'object' && input) { // non-null object
- return normalizeObject(input);
- }
- else if (typeof input === 'number') {
- return normalizeObject((_a = {}, _a[unit || 'milliseconds'] = input, _a));
- }
- else {
- return null;
- }
- }
- function parseString(s) {
- var m = PARSE_RE.exec(s);
- if (m) {
- var sign = m[1] ? -1 : 1;
- return {
- years: 0,
- months: 0,
- days: sign * (m[2] ? parseInt(m[2], 10) : 0),
- milliseconds: sign * ((m[3] ? parseInt(m[3], 10) : 0) * 60 * 60 * 1000 + // hours
- (m[4] ? parseInt(m[4], 10) : 0) * 60 * 1000 + // minutes
- (m[5] ? parseInt(m[5], 10) : 0) * 1000 + // seconds
- (m[6] ? parseInt(m[6], 10) : 0) // ms
- )
- };
- }
- return null;
- }
- function normalizeObject(obj) {
- return {
- years: obj.years || obj.year || 0,
- months: obj.months || obj.month || 0,
- days: (obj.days || obj.day || 0) +
- getWeeksFromInput(obj) * 7,
- milliseconds: (obj.hours || obj.hour || 0) * 60 * 60 * 1000 + // hours
- (obj.minutes || obj.minute || 0) * 60 * 1000 + // minutes
- (obj.seconds || obj.second || 0) * 1000 + // seconds
- (obj.milliseconds || obj.millisecond || obj.ms || 0) // ms
- };
- }
- function getWeeksFromInput(obj) {
- return obj.weeks || obj.week || 0;
- }
- // Equality
- function durationsEqual(d0, d1) {
- return d0.years === d1.years &&
- d0.months === d1.months &&
- d0.days === d1.days &&
- d0.milliseconds === d1.milliseconds;
- }
- function isSingleDay(dur) {
- return dur.years === 0 && dur.months === 0 && dur.days === 1 && dur.milliseconds === 0;
- }
- // Simple Math
- function addDurations(d0, d1) {
- return {
- years: d0.years + d1.years,
- months: d0.months + d1.months,
- days: d0.days + d1.days,
- milliseconds: d0.milliseconds + d1.milliseconds
- };
- }
- function subtractDurations(d1, d0) {
- return {
- years: d1.years - d0.years,
- months: d1.months - d0.months,
- days: d1.days - d0.days,
- milliseconds: d1.milliseconds - d0.milliseconds
- };
- }
- function multiplyDuration(d, n) {
- return {
- years: d.years * n,
- months: d.months * n,
- days: d.days * n,
- milliseconds: d.milliseconds * n
- };
- }
- // Conversions
- // "Rough" because they are based on average-case Gregorian months/years
- function asRoughYears(dur) {
- return asRoughDays(dur) / 365;
- }
- function asRoughMonths(dur) {
- return asRoughDays(dur) / 30;
- }
- function asRoughDays(dur) {
- return asRoughMs(dur) / 864e5;
- }
- function asRoughMinutes(dur) {
- return asRoughMs(dur) / (1000 * 60);
- }
- function asRoughSeconds(dur) {
- return asRoughMs(dur) / 1000;
- }
- function asRoughMs(dur) {
- return dur.years * (365 * 864e5) +
- dur.months * (30 * 864e5) +
- dur.days * 864e5 +
- dur.milliseconds;
- }
- // Advanced Math
- function wholeDivideDurations(numerator, denominator) {
- var res = null;
- for (var i = 0; i < INTERNAL_UNITS.length; i++) {
- var unit = INTERNAL_UNITS[i];
- if (denominator[unit]) {
- var localRes = numerator[unit] / denominator[unit];
- if (!isInt(localRes) || (res !== null && res !== localRes)) {
- return null;
- }
- res = localRes;
- }
- else if (numerator[unit]) {
- // needs to divide by something but can't!
- return null;
- }
- }
- return res;
- }
- function greatestDurationDenominator(dur, dontReturnWeeks) {
- var ms = dur.milliseconds;
- if (ms) {
- if (ms % 1000 !== 0) {
- return { unit: 'millisecond', value: ms };
- }
- if (ms % (1000 * 60) !== 0) {
- return { unit: 'second', value: ms / 1000 };
- }
- if (ms % (1000 * 60 * 60) !== 0) {
- return { unit: 'minute', value: ms / (1000 * 60) };
- }
- if (ms) {
- return { unit: 'hour', value: ms / (1000 * 60 * 60) };
- }
- }
- if (dur.days) {
- if (!dontReturnWeeks && dur.days % 7 === 0) {
- return { unit: 'week', value: dur.days / 7 };
- }
- return { unit: 'day', value: dur.days };
- }
- if (dur.months) {
- return { unit: 'month', value: dur.months };
- }
- if (dur.years) {
- return { unit: 'year', value: dur.years };
- }
- return { unit: 'millisecond', value: 0 };
- }
-
- /* FullCalendar-specific DOM Utilities
- ----------------------------------------------------------------------------------------------------------------------*/
- // Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left
- // and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.
- function compensateScroll(rowEl, scrollbarWidths) {
- if (scrollbarWidths.left) {
- applyStyle(rowEl, {
- borderLeftWidth: 1,
- marginLeft: scrollbarWidths.left - 1
- });
- }
- if (scrollbarWidths.right) {
- applyStyle(rowEl, {
- borderRightWidth: 1,
- marginRight: scrollbarWidths.right - 1
- });
- }
- }
- // Undoes compensateScroll and restores all borders/margins
- function uncompensateScroll(rowEl) {
- applyStyle(rowEl, {
- marginLeft: '',
- marginRight: '',
- borderLeftWidth: '',
- borderRightWidth: ''
- });
- }
- // Make the mouse cursor express that an event is not allowed in the current area
- function disableCursor() {
- document.body.classList.add('fc-not-allowed');
- }
- // Returns the mouse cursor to its original look
- function enableCursor() {
- document.body.classList.remove('fc-not-allowed');
- }
- // Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.
- // By default, all elements that are shorter than the recommended height are expanded uniformly, not considering
- // any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and
- // reduces the available height.
- function distributeHeight(els, availableHeight, shouldRedistribute) {
- // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,
- // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.
- var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element
- var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*
- var flexEls = []; // elements that are allowed to expand. array of DOM nodes
- var flexOffsets = []; // amount of vertical space it takes up
- var flexHeights = []; // actual css height
- var usedHeight = 0;
- undistributeHeight(els); // give all elements their natural height
- // find elements that are below the recommended height (expandable).
- // important to query for heights in a single first pass (to avoid reflow oscillation).
- els.forEach(function (el, i) {
- var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;
- var naturalHeight = el.getBoundingClientRect().height;
- var naturalOffset = naturalHeight + computeVMargins(el);
- if (naturalOffset < minOffset) {
- flexEls.push(el);
- flexOffsets.push(naturalOffset);
- flexHeights.push(naturalHeight);
- }
- else {
- // this element stretches past recommended height (non-expandable). mark the space as occupied.
- usedHeight += naturalOffset;
- }
- });
- // readjust the recommended height to only consider the height available to non-maxed-out rows.
- if (shouldRedistribute) {
- availableHeight -= usedHeight;
- minOffset1 = Math.floor(availableHeight / flexEls.length);
- minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*
- }
- // assign heights to all expandable elements
- flexEls.forEach(function (el, i) {
- var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;
- var naturalOffset = flexOffsets[i];
- var naturalHeight = flexHeights[i];
- var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding
- if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things
- el.style.height = newHeight + 'px';
- }
- });
- }
- // Undoes distrubuteHeight, restoring all els to their natural height
- function undistributeHeight(els) {
- els.forEach(function (el) {
- el.style.height = '';
- });
- }
- // Given `els`, a set of <td> cells, find the cell with the largest natural width and set the widths of all the
- // cells to be that width.
- // PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline
- function matchCellWidths(els) {
- var maxInnerWidth = 0;
- els.forEach(function (el) {
- var innerEl = el.firstChild; // hopefully an element
- if (innerEl instanceof HTMLElement) {
- var innerWidth_1 = innerEl.getBoundingClientRect().width;
- if (innerWidth_1 > maxInnerWidth) {
- maxInnerWidth = innerWidth_1;
- }
- }
- });
- maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance
- els.forEach(function (el) {
- el.style.width = maxInnerWidth + 'px';
- });
- return maxInnerWidth;
- }
- // Given one element that resides inside another,
- // Subtracts the height of the inner element from the outer element.
- function subtractInnerElHeight(outerEl, innerEl) {
- // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked
- var reflowStyleProps = {
- position: 'relative',
- left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll
- };
- applyStyle(outerEl, reflowStyleProps);
- applyStyle(innerEl, reflowStyleProps);
- var diff = // grab the dimensions
- outerEl.getBoundingClientRect().height -
- innerEl.getBoundingClientRect().height;
- // undo hack
- var resetStyleProps = { position: '', left: '' };
- applyStyle(outerEl, resetStyleProps);
- applyStyle(innerEl, resetStyleProps);
- return diff;
- }
- /* Selection
- ----------------------------------------------------------------------------------------------------------------------*/
- function preventSelection(el) {
- el.classList.add('fc-unselectable');
- el.addEventListener('selectstart', preventDefault);
- }
- function allowSelection(el) {
- el.classList.remove('fc-unselectable');
- el.removeEventListener('selectstart', preventDefault);
- }
- /* Context Menu
- ----------------------------------------------------------------------------------------------------------------------*/
- function preventContextMenu(el) {
- el.addEventListener('contextmenu', preventDefault);
- }
- function allowContextMenu(el) {
- el.removeEventListener('contextmenu', preventDefault);
- }
- /* Object Ordering by Field
- ----------------------------------------------------------------------------------------------------------------------*/
- function parseFieldSpecs(input) {
- var specs = [];
- var tokens = [];
- var i;
- var token;
- if (typeof input === 'string') {
- tokens = input.split(/\s*,\s*/);
- }
- else if (typeof input === 'function') {
- tokens = [input];
- }
- else if (Array.isArray(input)) {
- tokens = input;
- }
- for (i = 0; i < tokens.length; i++) {
- token = tokens[i];
- if (typeof token === 'string') {
- specs.push(token.charAt(0) === '-' ?
- { field: token.substring(1), order: -1 } :
- { field: token, order: 1 });
- }
- else if (typeof token === 'function') {
- specs.push({ func: token });
- }
- }
- return specs;
- }
- function compareByFieldSpecs(obj0, obj1, fieldSpecs) {
- var i;
- var cmp;
- for (i = 0; i < fieldSpecs.length; i++) {
- cmp = compareByFieldSpec(obj0, obj1, fieldSpecs[i]);
- if (cmp) {
- return cmp;
- }
- }
- return 0;
- }
- function compareByFieldSpec(obj0, obj1, fieldSpec) {
- if (fieldSpec.func) {
- return fieldSpec.func(obj0, obj1);
- }
- return flexibleCompare(obj0[fieldSpec.field], obj1[fieldSpec.field])
- * (fieldSpec.order || 1);
- }
- function flexibleCompare(a, b) {
- if (!a && !b) {
- return 0;
- }
- if (b == null) {
- return -1;
- }
- if (a == null) {
- return 1;
- }
- if (typeof a === 'string' || typeof b === 'string') {
- return String(a).localeCompare(String(b));
- }
- return a - b;
- }
- /* String Utilities
- ----------------------------------------------------------------------------------------------------------------------*/
- function capitaliseFirstLetter(str) {
- return str.charAt(0).toUpperCase() + str.slice(1);
- }
- function padStart(val, len) {
- var s = String(val);
- return '000'.substr(0, len - s.length) + s;
- }
- /* Number Utilities
- ----------------------------------------------------------------------------------------------------------------------*/
- function compareNumbers(a, b) {
- return a - b;
- }
- function isInt(n) {
- return n % 1 === 0;
- }
- /* Weird Utilities
- ----------------------------------------------------------------------------------------------------------------------*/
- function applyAll(functions, thisObj, args) {
- if (typeof functions === 'function') { // supplied a single function
- functions = [functions];
- }
- if (functions) {
- var i = void 0;
- var ret = void 0;
- for (i = 0; i < functions.length; i++) {
- ret = functions[i].apply(thisObj, args) || ret;
- }
- return ret;
- }
- }
- function firstDefined() {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- for (var i = 0; i < args.length; i++) {
- if (args[i] !== undefined) {
- return args[i];
- }
- }
- }
- // Returns a function, that, as long as it continues to be invoked, will not
- // be triggered. The function will be called after it stops being called for
- // N milliseconds. If `immediate` is passed, trigger the function on the
- // leading edge, instead of the trailing.
- // https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714
- function debounce(func, wait) {
- var timeout;
- var args;
- var context;
- var timestamp;
- var result;
- var later = function () {
- var last = new Date().valueOf() - timestamp;
- if (last < wait) {
- timeout = setTimeout(later, wait - last);
- }
- else {
- timeout = null;
- result = func.apply(context, args);
- context = args = null;
- }
- };
- return function () {
- context = this;
- args = arguments;
- timestamp = new Date().valueOf();
- if (!timeout) {
- timeout = setTimeout(later, wait);
- }
- return result;
- };
- }
- // Number and Boolean are only types that defaults or not computed for
- // TODO: write more comments
- function refineProps(rawProps, processors, defaults, leftoverProps) {
- if (defaults === void 0) { defaults = {}; }
- var refined = {};
- for (var key in processors) {
- var processor = processors[key];
- if (rawProps[key] !== undefined) {
- // found
- if (processor === Function) {
- refined[key] = typeof rawProps[key] === 'function' ? rawProps[key] : null;
- }
- else if (processor) { // a refining function?
- refined[key] = processor(rawProps[key]);
- }
- else {
- refined[key] = rawProps[key];
- }
- }
- else if (defaults[key] !== undefined) {
- // there's an explicit default
- refined[key] = defaults[key];
- }
- else {
- // must compute a default
- if (processor === String) {
- refined[key] = ''; // empty string is default for String
- }
- else if (!processor || processor === Number || processor === Boolean || processor === Function) {
- refined[key] = null; // assign null for other non-custom processor funcs
- }
- else {
- refined[key] = processor(null); // run the custom processor func
- }
- }
- }
- if (leftoverProps) {
- for (var key in rawProps) {
- if (processors[key] === undefined) {
- leftoverProps[key] = rawProps[key];
- }
- }
- }
- return refined;
- }
- /* Date stuff that doesn't belong in datelib core
- ----------------------------------------------------------------------------------------------------------------------*/
- // given a timed range, computes an all-day range that has the same exact duration,
- // but whose start time is aligned with the start of the day.
- function computeAlignedDayRange(timedRange) {
- var dayCnt = Math.floor(diffDays(timedRange.start, timedRange.end)) || 1;
- var start = startOfDay(timedRange.start);
- var end = addDays(start, dayCnt);
- return { start: start, end: end };
- }
- // given a timed range, computes an all-day range based on how for the end date bleeds into the next day
- // TODO: give nextDayThreshold a default arg
- function computeVisibleDayRange(timedRange, nextDayThreshold) {
- if (nextDayThreshold === void 0) { nextDayThreshold = createDuration(0); }
- var startDay = null;
- var endDay = null;
- if (timedRange.end) {
- endDay = startOfDay(timedRange.end);
- var endTimeMS = timedRange.end.valueOf() - endDay.valueOf(); // # of milliseconds into `endDay`
- // If the end time is actually inclusively part of the next day and is equal to or
- // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.
- // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.
- if (endTimeMS && endTimeMS >= asRoughMs(nextDayThreshold)) {
- endDay = addDays(endDay, 1);
- }
- }
- if (timedRange.start) {
- startDay = startOfDay(timedRange.start); // the beginning of the day the range starts
- // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.
- if (endDay && endDay <= startDay) {
- endDay = addDays(startDay, 1);
- }
- }
- return { start: startDay, end: endDay };
- }
- // spans from one day into another?
- function isMultiDayRange(range) {
- var visibleRange = computeVisibleDayRange(range);
- return diffDays(visibleRange.start, visibleRange.end) > 1;
- }
- function diffDates(date0, date1, dateEnv, largeUnit) {
- if (largeUnit === 'year') {
- return createDuration(dateEnv.diffWholeYears(date0, date1), 'year');
- }
- else if (largeUnit === 'month') {
- return createDuration(dateEnv.diffWholeMonths(date0, date1), 'month');
- }
- else {
- return diffDayAndTime(date0, date1); // returns a duration
- }
- }
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
- /* global Reflect, Promise */
-
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
-
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
-
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
-
- function parseRecurring(eventInput, allDayDefault, dateEnv, recurringTypes, leftovers) {
- for (var i = 0; i < recurringTypes.length; i++) {
- var localLeftovers = {};
- var parsed = recurringTypes[i].parse(eventInput, localLeftovers, dateEnv);
- if (parsed) {
- var allDay = localLeftovers.allDay;
- delete localLeftovers.allDay; // remove from leftovers
- if (allDay == null) {
- allDay = allDayDefault;
- if (allDay == null) {
- allDay = parsed.allDayGuess;
- if (allDay == null) {
- allDay = false;
- }
- }
- }
- __assign(leftovers, localLeftovers);
- return {
- allDay: allDay,
- duration: parsed.duration,
- typeData: parsed.typeData,
- typeId: i
- };
- }
- }
- return null;
- }
- /*
- Event MUST have a recurringDef
- */
- function expandRecurringRanges(eventDef, duration, framingRange, dateEnv, recurringTypes) {
- var typeDef = recurringTypes[eventDef.recurringDef.typeId];
- var markers = typeDef.expand(eventDef.recurringDef.typeData, {
- start: dateEnv.subtract(framingRange.start, duration),
- end: framingRange.end
- }, dateEnv);
- // the recurrence plugins don't guarantee that all-day events are start-of-day, so we have to
- if (eventDef.allDay) {
- markers = markers.map(startOfDay);
- }
- return markers;
- }
-
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- // Merges an array of objects into a single object.
- // The second argument allows for an array of property names who's object values will be merged together.
- function mergeProps(propObjs, complexProps) {
- var dest = {};
- var i;
- var name;
- var complexObjs;
- var j;
- var val;
- var props;
- if (complexProps) {
- for (i = 0; i < complexProps.length; i++) {
- name = complexProps[i];
- complexObjs = [];
- // collect the trailing object values, stopping when a non-object is discovered
- for (j = propObjs.length - 1; j >= 0; j--) {
- val = propObjs[j][name];
- if (typeof val === 'object' && val) { // non-null object
- complexObjs.unshift(val);
- }
- else if (val !== undefined) {
- dest[name] = val; // if there were no objects, this value will be used
- break;
- }
- }
- // if the trailing values were objects, use the merged value
- if (complexObjs.length) {
- dest[name] = mergeProps(complexObjs);
- }
- }
- }
- // copy values into the destination, going from last to first
- for (i = propObjs.length - 1; i >= 0; i--) {
- props = propObjs[i];
- for (name in props) {
- if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign
- dest[name] = props[name];
- }
- }
- }
- return dest;
- }
- function filterHash(hash, func) {
- var filtered = {};
- for (var key in hash) {
- if (func(hash[key], key)) {
- filtered[key] = hash[key];
- }
- }
- return filtered;
- }
- function mapHash(hash, func) {
- var newHash = {};
- for (var key in hash) {
- newHash[key] = func(hash[key], key);
- }
- return newHash;
- }
- function arrayToHash(a) {
- var hash = {};
- for (var _i = 0, a_1 = a; _i < a_1.length; _i++) {
- var item = a_1[_i];
- hash[item] = true;
- }
- return hash;
- }
- function hashValuesToArray(obj) {
- var a = [];
- for (var key in obj) {
- a.push(obj[key]);
- }
- return a;
- }
- function isPropsEqual(obj0, obj1) {
- for (var key in obj0) {
- if (hasOwnProperty.call(obj0, key)) {
- if (!(key in obj1)) {
- return false;
- }
- }
- }
- for (var key in obj1) {
- if (hasOwnProperty.call(obj1, key)) {
- if (obj0[key] !== obj1[key]) {
- return false;
- }
- }
- }
- return true;
- }
-
- function parseEvents(rawEvents, sourceId, calendar, allowOpenRange) {
- var eventStore = createEmptyEventStore();
- for (var _i = 0, rawEvents_1 = rawEvents; _i < rawEvents_1.length; _i++) {
- var rawEvent = rawEvents_1[_i];
- var tuple = parseEvent(rawEvent, sourceId, calendar, allowOpenRange);
- if (tuple) {
- eventTupleToStore(tuple, eventStore);
- }
- }
- return eventStore;
- }
- function eventTupleToStore(tuple, eventStore) {
- if (eventStore === void 0) { eventStore = createEmptyEventStore(); }
- eventStore.defs[tuple.def.defId] = tuple.def;
- if (tuple.instance) {
- eventStore.instances[tuple.instance.instanceId] = tuple.instance;
- }
- return eventStore;
- }
- function expandRecurring(eventStore, framingRange, calendar) {
- var dateEnv = calendar.dateEnv;
- var defs = eventStore.defs, instances = eventStore.instances;
- // remove existing recurring instances
- instances = filterHash(instances, function (instance) {
- return !defs[instance.defId].recurringDef;
- });
- for (var defId in defs) {
- var def = defs[defId];
- if (def.recurringDef) {
- var duration = def.recurringDef.duration;
- if (!duration) {
- duration = def.allDay ?
- calendar.defaultAllDayEventDuration :
- calendar.defaultTimedEventDuration;
- }
- var starts = expandRecurringRanges(def, duration, framingRange, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes);
- for (var _i = 0, starts_1 = starts; _i < starts_1.length; _i++) {
- var start = starts_1[_i];
- var instance = createEventInstance(defId, {
- start: start,
- end: dateEnv.add(start, duration)
- });
- instances[instance.instanceId] = instance;
- }
- }
- }
- return { defs: defs, instances: instances };
- }
- // retrieves events that have the same groupId as the instance specified by `instanceId`
- // or they are the same as the instance.
- // why might instanceId not be in the store? an event from another calendar?
- function getRelevantEvents(eventStore, instanceId) {
- var instance = eventStore.instances[instanceId];
- if (instance) {
- var def_1 = eventStore.defs[instance.defId];
- // get events/instances with same group
- var newStore = filterEventStoreDefs(eventStore, function (lookDef) {
- return isEventDefsGrouped(def_1, lookDef);
- });
- // add the original
- // TODO: wish we could use eventTupleToStore or something like it
- newStore.defs[def_1.defId] = def_1;
- newStore.instances[instance.instanceId] = instance;
- return newStore;
- }
- return createEmptyEventStore();
- }
- function isEventDefsGrouped(def0, def1) {
- return Boolean(def0.groupId && def0.groupId === def1.groupId);
- }
- function transformRawEvents(rawEvents, eventSource, calendar) {
- var calEachTransform = calendar.opt('eventDataTransform');
- var sourceEachTransform = eventSource ? eventSource.eventDataTransform : null;
- if (sourceEachTransform) {
- rawEvents = transformEachRawEvent(rawEvents, sourceEachTransform);
- }
- if (calEachTransform) {
- rawEvents = transformEachRawEvent(rawEvents, calEachTransform);
- }
- return rawEvents;
- }
- function transformEachRawEvent(rawEvents, func) {
- var refinedEvents;
- if (!func) {
- refinedEvents = rawEvents;
- }
- else {
- refinedEvents = [];
- for (var _i = 0, rawEvents_2 = rawEvents; _i < rawEvents_2.length; _i++) {
- var rawEvent = rawEvents_2[_i];
- var refinedEvent = func(rawEvent);
- if (refinedEvent) {
- refinedEvents.push(refinedEvent);
- }
- else if (refinedEvent == null) {
- refinedEvents.push(rawEvent);
- } // if a different falsy value, do nothing
- }
- }
- return refinedEvents;
- }
- function createEmptyEventStore() {
- return { defs: {}, instances: {} };
- }
- function mergeEventStores(store0, store1) {
- return {
- defs: __assign({}, store0.defs, store1.defs),
- instances: __assign({}, store0.instances, store1.instances)
- };
- }
- function filterEventStoreDefs(eventStore, filterFunc) {
- var defs = filterHash(eventStore.defs, filterFunc);
- var instances = filterHash(eventStore.instances, function (instance) {
- return defs[instance.defId]; // still exists?
- });
- return { defs: defs, instances: instances };
- }
-
- function parseRange(input, dateEnv) {
- var start = null;
- var end = null;
- if (input.start) {
- start = dateEnv.createMarker(input.start);
- }
- if (input.end) {
- end = dateEnv.createMarker(input.end);
- }
- if (!start && !end) {
- return null;
- }
- if (start && end && end < start) {
- return null;
- }
- return { start: start, end: end };
- }
- // SIDE-EFFECT: will mutate ranges.
- // Will return a new array result.
- function invertRanges(ranges, constraintRange) {
- var invertedRanges = [];
- var start = constraintRange.start; // the end of the previous range. the start of the new range
- var i;
- var dateRange;
- // ranges need to be in order. required for our date-walking algorithm
- ranges.sort(compareRanges);
- for (i = 0; i < ranges.length; i++) {
- dateRange = ranges[i];
- // add the span of time before the event (if there is any)
- if (dateRange.start > start) { // compare millisecond time (skip any ambig logic)
- invertedRanges.push({ start: start, end: dateRange.start });
- }
- if (dateRange.end > start) {
- start = dateRange.end;
- }
- }
- // add the span of time after the last event (if there is any)
- if (start < constraintRange.end) { // compare millisecond time (skip any ambig logic)
- invertedRanges.push({ start: start, end: constraintRange.end });
- }
- return invertedRanges;
- }
- function compareRanges(range0, range1) {
- return range0.start.valueOf() - range1.start.valueOf(); // earlier ranges go first
- }
- function intersectRanges(range0, range1) {
- var start = range0.start;
- var end = range0.end;
- var newRange = null;
- if (range1.start !== null) {
- if (start === null) {
- start = range1.start;
- }
- else {
- start = new Date(Math.max(start.valueOf(), range1.start.valueOf()));
- }
- }
- if (range1.end != null) {
- if (end === null) {
- end = range1.end;
- }
- else {
- end = new Date(Math.min(end.valueOf(), range1.end.valueOf()));
- }
- }
- if (start === null || end === null || start < end) {
- newRange = { start: start, end: end };
- }
- return newRange;
- }
- function rangesEqual(range0, range1) {
- return (range0.start === null ? null : range0.start.valueOf()) === (range1.start === null ? null : range1.start.valueOf()) &&
- (range0.end === null ? null : range0.end.valueOf()) === (range1.end === null ? null : range1.end.valueOf());
- }
- function rangesIntersect(range0, range1) {
- return (range0.end === null || range1.start === null || range0.end > range1.start) &&
- (range0.start === null || range1.end === null || range0.start < range1.end);
- }
- function rangeContainsRange(outerRange, innerRange) {
- return (outerRange.start === null || (innerRange.start !== null && innerRange.start >= outerRange.start)) &&
- (outerRange.end === null || (innerRange.end !== null && innerRange.end <= outerRange.end));
- }
- function rangeContainsMarker(range, date) {
- return (range.start === null || date >= range.start) &&
- (range.end === null || date < range.end);
- }
- // If the given date is not within the given range, move it inside.
- // (If it's past the end, make it one millisecond before the end).
- function constrainMarkerToRange(date, range) {
- if (range.start != null && date < range.start) {
- return range.start;
- }
- if (range.end != null && date >= range.end) {
- return new Date(range.end.valueOf() - 1);
- }
- return date;
- }
-
- function removeExact(array, exactVal) {
- var removeCnt = 0;
- var i = 0;
- while (i < array.length) {
- if (array[i] === exactVal) {
- array.splice(i, 1);
- removeCnt++;
- }
- else {
- i++;
- }
- }
- return removeCnt;
- }
- function isArraysEqual(a0, a1) {
- var len = a0.length;
- var i;
- if (len !== a1.length) { // not array? or not same length?
- return false;
- }
- for (i = 0; i < len; i++) {
- if (a0[i] !== a1[i]) {
- return false;
- }
- }
- return true;
- }
-
- function memoize(workerFunc) {
- var args;
- var res;
- return function () {
- if (!args || !isArraysEqual(args, arguments)) {
- args = arguments;
- res = workerFunc.apply(this, arguments);
- }
- return res;
- };
- }
- /*
- always executes the workerFunc, but if the result is equal to the previous result,
- return the previous result instead.
- */
- function memoizeOutput(workerFunc, equalityFunc) {
- var cachedRes = null;
- return function () {
- var newRes = workerFunc.apply(this, arguments);
- if (cachedRes === null || !(cachedRes === newRes || equalityFunc(cachedRes, newRes))) {
- cachedRes = newRes;
- }
- return cachedRes;
- };
- }
-
- var EXTENDED_SETTINGS_AND_SEVERITIES = {
- week: 3,
- separator: 0,
- omitZeroMinute: 0,
- meridiem: 0,
- omitCommas: 0
- };
- var STANDARD_DATE_PROP_SEVERITIES = {
- timeZoneName: 7,
- era: 6,
- year: 5,
- month: 4,
- day: 2,
- weekday: 2,
- hour: 1,
- minute: 1,
- second: 1
- };
- var MERIDIEM_RE = /\s*([ap])\.?m\.?/i; // eats up leading spaces too
- var COMMA_RE = /,/g; // we need re for globalness
- var MULTI_SPACE_RE = /\s+/g;
- var LTR_RE = /\u200e/g; // control character
- var UTC_RE = /UTC|GMT/;
- var NativeFormatter = /** @class */ (function () {
- function NativeFormatter(formatSettings) {
- var standardDateProps = {};
- var extendedSettings = {};
- var severity = 0;
- for (var name_1 in formatSettings) {
- if (name_1 in EXTENDED_SETTINGS_AND_SEVERITIES) {
- extendedSettings[name_1] = formatSettings[name_1];
- severity = Math.max(EXTENDED_SETTINGS_AND_SEVERITIES[name_1], severity);
- }
- else {
- standardDateProps[name_1] = formatSettings[name_1];
- if (name_1 in STANDARD_DATE_PROP_SEVERITIES) {
- severity = Math.max(STANDARD_DATE_PROP_SEVERITIES[name_1], severity);
- }
- }
- }
- this.standardDateProps = standardDateProps;
- this.extendedSettings = extendedSettings;
- this.severity = severity;
- this.buildFormattingFunc = memoize(buildFormattingFunc);
- }
- NativeFormatter.prototype.format = function (date, context) {
- return this.buildFormattingFunc(this.standardDateProps, this.extendedSettings, context)(date);
- };
- NativeFormatter.prototype.formatRange = function (start, end, context) {
- var _a = this, standardDateProps = _a.standardDateProps, extendedSettings = _a.extendedSettings;
- var diffSeverity = computeMarkerDiffSeverity(start.marker, end.marker, context.calendarSystem);
- if (!diffSeverity) {
- return this.format(start, context);
- }
- var biggestUnitForPartial = diffSeverity;
- if (biggestUnitForPartial > 1 && // the two dates are different in a way that's larger scale than time
- (standardDateProps.year === 'numeric' || standardDateProps.year === '2-digit') &&
- (standardDateProps.month === 'numeric' || standardDateProps.month === '2-digit') &&
- (standardDateProps.day === 'numeric' || standardDateProps.day === '2-digit')) {
- biggestUnitForPartial = 1; // make it look like the dates are only different in terms of time
- }
- var full0 = this.format(start, context);
- var full1 = this.format(end, context);
- if (full0 === full1) {
- return full0;
- }
- var partialDateProps = computePartialFormattingOptions(standardDateProps, biggestUnitForPartial);
- var partialFormattingFunc = buildFormattingFunc(partialDateProps, extendedSettings, context);
- var partial0 = partialFormattingFunc(start);
- var partial1 = partialFormattingFunc(end);
- var insertion = findCommonInsertion(full0, partial0, full1, partial1);
- var separator = extendedSettings.separator || '';
- if (insertion) {
- return insertion.before + partial0 + separator + partial1 + insertion.after;
- }
- return full0 + separator + full1;
- };
- NativeFormatter.prototype.getLargestUnit = function () {
- switch (this.severity) {
- case 7:
- case 6:
- case 5:
- return 'year';
- case 4:
- return 'month';
- case 3:
- return 'week';
- default:
- return 'day';
- }
- };
- return NativeFormatter;
- }());
- function buildFormattingFunc(standardDateProps, extendedSettings, context) {
- var standardDatePropCnt = Object.keys(standardDateProps).length;
- if (standardDatePropCnt === 1 && standardDateProps.timeZoneName === 'short') {
- return function (date) {
- return formatTimeZoneOffset(date.timeZoneOffset);
- };
- }
- if (standardDatePropCnt === 0 && extendedSettings.week) {
- return function (date) {
- return formatWeekNumber(context.computeWeekNumber(date.marker), context.weekLabel, context.locale, extendedSettings.week);
- };
- }
- return buildNativeFormattingFunc(standardDateProps, extendedSettings, context);
- }
- function buildNativeFormattingFunc(standardDateProps, extendedSettings, context) {
- standardDateProps = __assign({}, standardDateProps); // copy
- extendedSettings = __assign({}, extendedSettings); // copy
- sanitizeSettings(standardDateProps, extendedSettings);
- standardDateProps.timeZone = 'UTC'; // we leverage the only guaranteed timeZone for our UTC markers
- var normalFormat = new Intl.DateTimeFormat(context.locale.codes, standardDateProps);
- var zeroFormat; // needed?
- if (extendedSettings.omitZeroMinute) {
- var zeroProps = __assign({}, standardDateProps);
- delete zeroProps.minute; // seconds and ms were already considered in sanitizeSettings
- zeroFormat = new Intl.DateTimeFormat(context.locale.codes, zeroProps);
- }
- return function (date) {
- var marker = date.marker;
- var format;
- if (zeroFormat && !marker.getUTCMinutes()) {
- format = zeroFormat;
- }
- else {
- format = normalFormat;
- }
- var s = format.format(marker);
- return postProcess(s, date, standardDateProps, extendedSettings, context);
- };
- }
- function sanitizeSettings(standardDateProps, extendedSettings) {
- // deal with a browser inconsistency where formatting the timezone
- // requires that the hour/minute be present.
- if (standardDateProps.timeZoneName) {
- if (!standardDateProps.hour) {
- standardDateProps.hour = '2-digit';
- }
- if (!standardDateProps.minute) {
- standardDateProps.minute = '2-digit';
- }
- }
- // only support short timezone names
- if (standardDateProps.timeZoneName === 'long') {
- standardDateProps.timeZoneName = 'short';
- }
- // if requesting to display seconds, MUST display minutes
- if (extendedSettings.omitZeroMinute && (standardDateProps.second || standardDateProps.millisecond)) {
- delete extendedSettings.omitZeroMinute;
- }
- }
- function postProcess(s, date, standardDateProps, extendedSettings, context) {
- s = s.replace(LTR_RE, ''); // remove left-to-right control chars. do first. good for other regexes
- if (standardDateProps.timeZoneName === 'short') {
- s = injectTzoStr(s, (context.timeZone === 'UTC' || date.timeZoneOffset == null) ?
- 'UTC' : // important to normalize for IE, which does "GMT"
- formatTimeZoneOffset(date.timeZoneOffset));
- }
- if (extendedSettings.omitCommas) {
- s = s.replace(COMMA_RE, '').trim();
- }
- if (extendedSettings.omitZeroMinute) {
- s = s.replace(':00', ''); // zeroFormat doesn't always achieve this
- }
- // ^ do anything that might create adjacent spaces before this point,
- // because MERIDIEM_RE likes to eat up loading spaces
- if (extendedSettings.meridiem === false) {
- s = s.replace(MERIDIEM_RE, '').trim();
- }
- else if (extendedSettings.meridiem === 'narrow') { // a/p
- s = s.replace(MERIDIEM_RE, function (m0, m1) {
- return m1.toLocaleLowerCase();
- });
- }
- else if (extendedSettings.meridiem === 'short') { // am/pm
- s = s.replace(MERIDIEM_RE, function (m0, m1) {
- return m1.toLocaleLowerCase() + 'm';
- });
- }
- else if (extendedSettings.meridiem === 'lowercase') { // other meridiem transformers already converted to lowercase
- s = s.replace(MERIDIEM_RE, function (m0) {
- return m0.toLocaleLowerCase();
- });
- }
- s = s.replace(MULTI_SPACE_RE, ' ');
- s = s.trim();
- return s;
- }
- function injectTzoStr(s, tzoStr) {
- var replaced = false;
- s = s.replace(UTC_RE, function () {
- replaced = true;
- return tzoStr;
- });
- // IE11 doesn't include UTC/GMT in the original string, so append to end
- if (!replaced) {
- s += ' ' + tzoStr;
- }
- return s;
- }
- function formatWeekNumber(num, weekLabel, locale, display) {
- var parts = [];
- if (display === 'narrow') {
- parts.push(weekLabel);
- }
- else if (display === 'short') {
- parts.push(weekLabel, ' ');
- }
- // otherwise, considered 'numeric'
- parts.push(locale.simpleNumberFormat.format(num));
- if (locale.options.isRtl) { // TODO: use control characters instead?
- parts.reverse();
- }
- return parts.join('');
- }
- // Range Formatting Utils
- // 0 = exactly the same
- // 1 = different by time
- // and bigger
- function computeMarkerDiffSeverity(d0, d1, ca) {
- if (ca.getMarkerYear(d0) !== ca.getMarkerYear(d1)) {
- return 5;
- }
- if (ca.getMarkerMonth(d0) !== ca.getMarkerMonth(d1)) {
- return 4;
- }
- if (ca.getMarkerDay(d0) !== ca.getMarkerDay(d1)) {
- return 2;
- }
- if (timeAsMs(d0) !== timeAsMs(d1)) {
- return 1;
- }
- return 0;
- }
- function computePartialFormattingOptions(options, biggestUnit) {
- var partialOptions = {};
- for (var name_2 in options) {
- if (!(name_2 in STANDARD_DATE_PROP_SEVERITIES) || // not a date part prop (like timeZone)
- STANDARD_DATE_PROP_SEVERITIES[name_2] <= biggestUnit) {
- partialOptions[name_2] = options[name_2];
- }
- }
- return partialOptions;
- }
- function findCommonInsertion(full0, partial0, full1, partial1) {
- var i0 = 0;
- while (i0 < full0.length) {
- var found0 = full0.indexOf(partial0, i0);
- if (found0 === -1) {
- break;
- }
- var before0 = full0.substr(0, found0);
- i0 = found0 + partial0.length;
- var after0 = full0.substr(i0);
- var i1 = 0;
- while (i1 < full1.length) {
- var found1 = full1.indexOf(partial1, i1);
- if (found1 === -1) {
- break;
- }
- var before1 = full1.substr(0, found1);
- i1 = found1 + partial1.length;
- var after1 = full1.substr(i1);
- if (before0 === before1 && after0 === after1) {
- return {
- before: before0,
- after: after0
- };
- }
- }
- }
- return null;
- }
-
- /*
- TODO: fix the terminology of "formatter" vs "formatting func"
- */
- /*
- At the time of instantiation, this object does not know which cmd-formatting system it will use.
- It receives this at the time of formatting, as a setting.
- */
- var CmdFormatter = /** @class */ (function () {
- function CmdFormatter(cmdStr, separator) {
- this.cmdStr = cmdStr;
- this.separator = separator;
- }
- CmdFormatter.prototype.format = function (date, context) {
- return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(date, null, context, this.separator));
- };
- CmdFormatter.prototype.formatRange = function (start, end, context) {
- return context.cmdFormatter(this.cmdStr, createVerboseFormattingArg(start, end, context, this.separator));
- };
- return CmdFormatter;
- }());
-
- var FuncFormatter = /** @class */ (function () {
- function FuncFormatter(func) {
- this.func = func;
- }
- FuncFormatter.prototype.format = function (date, context) {
- return this.func(createVerboseFormattingArg(date, null, context));
- };
- FuncFormatter.prototype.formatRange = function (start, end, context) {
- return this.func(createVerboseFormattingArg(start, end, context));
- };
- return FuncFormatter;
- }());
-
- // Formatter Object Creation
- function createFormatter(input, defaultSeparator) {
- if (typeof input === 'object' && input) { // non-null object
- if (typeof defaultSeparator === 'string') {
- input = __assign({ separator: defaultSeparator }, input);
- }
- return new NativeFormatter(input);
- }
- else if (typeof input === 'string') {
- return new CmdFormatter(input, defaultSeparator);
- }
- else if (typeof input === 'function') {
- return new FuncFormatter(input);
- }
- }
- // String Utils
- // timeZoneOffset is in minutes
- function buildIsoString(marker, timeZoneOffset, stripZeroTime) {
- if (stripZeroTime === void 0) { stripZeroTime = false; }
- var s = marker.toISOString();
- s = s.replace('.000', '');
- if (stripZeroTime) {
- s = s.replace('T00:00:00Z', '');
- }
- if (s.length > 10) { // time part wasn't stripped, can add timezone info
- if (timeZoneOffset == null) {
- s = s.replace('Z', '');
- }
- else if (timeZoneOffset !== 0) {
- s = s.replace('Z', formatTimeZoneOffset(timeZoneOffset, true));
- }
- // otherwise, its UTC-0 and we want to keep the Z
- }
- return s;
- }
- function formatIsoTimeString(marker) {
- return padStart(marker.getUTCHours(), 2) + ':' +
- padStart(marker.getUTCMinutes(), 2) + ':' +
- padStart(marker.getUTCSeconds(), 2);
- }
- function formatTimeZoneOffset(minutes, doIso) {
- if (doIso === void 0) { doIso = false; }
- var sign = minutes < 0 ? '-' : '+';
- var abs = Math.abs(minutes);
- var hours = Math.floor(abs / 60);
- var mins = Math.round(abs % 60);
- if (doIso) {
- return sign + padStart(hours, 2) + ':' + padStart(mins, 2);
- }
- else {
- return 'GMT' + sign + hours + (mins ? ':' + padStart(mins, 2) : '');
- }
- }
- // Arg Utils
- function createVerboseFormattingArg(start, end, context, separator) {
- var startInfo = expandZonedMarker(start, context.calendarSystem);
- var endInfo = end ? expandZonedMarker(end, context.calendarSystem) : null;
- return {
- date: startInfo,
- start: startInfo,
- end: endInfo,
- timeZone: context.timeZone,
- localeCodes: context.locale.codes,
- separator: separator
- };
- }
- function expandZonedMarker(dateInfo, calendarSystem) {
- var a = calendarSystem.markerToArray(dateInfo.marker);
- return {
- marker: dateInfo.marker,
- timeZoneOffset: dateInfo.timeZoneOffset,
- array: a,
- year: a[0],
- month: a[1],
- day: a[2],
- hour: a[3],
- minute: a[4],
- second: a[5],
- millisecond: a[6]
- };
- }
-
- var EventSourceApi = /** @class */ (function () {
- function EventSourceApi(calendar, internalEventSource) {
- this.calendar = calendar;
- this.internalEventSource = internalEventSource;
- }
- EventSourceApi.prototype.remove = function () {
- this.calendar.dispatch({
- type: 'REMOVE_EVENT_SOURCE',
- sourceId: this.internalEventSource.sourceId
- });
- };
- EventSourceApi.prototype.refetch = function () {
- this.calendar.dispatch({
- type: 'FETCH_EVENT_SOURCES',
- sourceIds: [this.internalEventSource.sourceId]
- });
- };
- Object.defineProperty(EventSourceApi.prototype, "id", {
- get: function () {
- return this.internalEventSource.publicId;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventSourceApi.prototype, "url", {
- // only relevant to json-feed event sources
- get: function () {
- return this.internalEventSource.meta.url;
- },
- enumerable: true,
- configurable: true
- });
- return EventSourceApi;
- }());
-
- var EventApi = /** @class */ (function () {
- function EventApi(calendar, def, instance) {
- this._calendar = calendar;
- this._def = def;
- this._instance = instance || null;
- }
- /*
- TODO: make event struct more responsible for this
- */
- EventApi.prototype.setProp = function (name, val) {
- var _a, _b;
- if (name in DATE_PROPS) ;
- else if (name in NON_DATE_PROPS) {
- if (typeof NON_DATE_PROPS[name] === 'function') {
- val = NON_DATE_PROPS[name](val);
- }
- this.mutate({
- standardProps: (_a = {}, _a[name] = val, _a)
- });
- }
- else if (name in UNSCOPED_EVENT_UI_PROPS) {
- var ui = void 0;
- if (typeof UNSCOPED_EVENT_UI_PROPS[name] === 'function') {
- val = UNSCOPED_EVENT_UI_PROPS[name](val);
- }
- if (name === 'color') {
- ui = { backgroundColor: val, borderColor: val };
- }
- else if (name === 'editable') {
- ui = { startEditable: val, durationEditable: val };
- }
- else {
- ui = (_b = {}, _b[name] = val, _b);
- }
- this.mutate({
- standardProps: { ui: ui }
- });
- }
- };
- EventApi.prototype.setExtendedProp = function (name, val) {
- var _a;
- this.mutate({
- extendedProps: (_a = {}, _a[name] = val, _a)
- });
- };
- EventApi.prototype.setStart = function (startInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = this._calendar.dateEnv;
- var start = dateEnv.createMarker(startInput);
- if (start && this._instance) { // TODO: warning if parsed bad
- var instanceRange = this._instance.range;
- var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity); // what if parsed bad!?
- if (options.maintainDuration) {
- this.mutate({ datesDelta: startDelta });
- }
- else {
- this.mutate({ startDelta: startDelta });
- }
- }
- };
- EventApi.prototype.setEnd = function (endInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = this._calendar.dateEnv;
- var end;
- if (endInput != null) {
- end = dateEnv.createMarker(endInput);
- if (!end) {
- return; // TODO: warning if parsed bad
- }
- }
- if (this._instance) {
- if (end) {
- var endDelta = diffDates(this._instance.range.end, end, dateEnv, options.granularity);
- this.mutate({ endDelta: endDelta });
- }
- else {
- this.mutate({ standardProps: { hasEnd: false } });
- }
- }
- };
- EventApi.prototype.setDates = function (startInput, endInput, options) {
- if (options === void 0) { options = {}; }
- var dateEnv = this._calendar.dateEnv;
- var standardProps = { allDay: options.allDay };
- var start = dateEnv.createMarker(startInput);
- var end;
- if (!start) {
- return; // TODO: warning if parsed bad
- }
- if (endInput != null) {
- end = dateEnv.createMarker(endInput);
- if (!end) { // TODO: warning if parsed bad
- return;
- }
- }
- if (this._instance) {
- var instanceRange = this._instance.range;
- // when computing the diff for an event being converted to all-day,
- // compute diff off of the all-day values the way event-mutation does.
- if (options.allDay === true) {
- instanceRange = computeAlignedDayRange(instanceRange);
- }
- var startDelta = diffDates(instanceRange.start, start, dateEnv, options.granularity);
- if (end) {
- var endDelta = diffDates(instanceRange.end, end, dateEnv, options.granularity);
- if (durationsEqual(startDelta, endDelta)) {
- this.mutate({ datesDelta: startDelta, standardProps: standardProps });
- }
- else {
- this.mutate({ startDelta: startDelta, endDelta: endDelta, standardProps: standardProps });
- }
- }
- else { // means "clear the end"
- standardProps.hasEnd = false;
- this.mutate({ datesDelta: startDelta, standardProps: standardProps });
- }
- }
- };
- EventApi.prototype.moveStart = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // TODO: warning if parsed bad
- this.mutate({ startDelta: delta });
- }
- };
- EventApi.prototype.moveEnd = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // TODO: warning if parsed bad
- this.mutate({ endDelta: delta });
- }
- };
- EventApi.prototype.moveDates = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // TODO: warning if parsed bad
- this.mutate({ datesDelta: delta });
- }
- };
- EventApi.prototype.setAllDay = function (allDay, options) {
- if (options === void 0) { options = {}; }
- var standardProps = { allDay: allDay };
- var maintainDuration = options.maintainDuration;
- if (maintainDuration == null) {
- maintainDuration = this._calendar.opt('allDayMaintainDuration');
- }
- if (this._def.allDay !== allDay) {
- standardProps.hasEnd = maintainDuration;
- }
- this.mutate({ standardProps: standardProps });
- };
- EventApi.prototype.formatRange = function (formatInput) {
- var dateEnv = this._calendar.dateEnv;
- var instance = this._instance;
- var formatter = createFormatter(formatInput, this._calendar.opt('defaultRangeSeparator'));
- if (this._def.hasEnd) {
- return dateEnv.formatRange(instance.range.start, instance.range.end, formatter, {
- forcedStartTzo: instance.forcedStartTzo,
- forcedEndTzo: instance.forcedEndTzo
- });
- }
- else {
- return dateEnv.format(instance.range.start, formatter, {
- forcedTzo: instance.forcedStartTzo
- });
- }
- };
- EventApi.prototype.mutate = function (mutation) {
- var def = this._def;
- var instance = this._instance;
- if (instance) {
- this._calendar.dispatch({
- type: 'MUTATE_EVENTS',
- instanceId: instance.instanceId,
- mutation: mutation,
- fromApi: true
- });
- var eventStore = this._calendar.state.eventStore;
- this._def = eventStore.defs[def.defId];
- this._instance = eventStore.instances[instance.instanceId];
- }
- };
- EventApi.prototype.remove = function () {
- this._calendar.dispatch({
- type: 'REMOVE_EVENT_DEF',
- defId: this._def.defId
- });
- };
- Object.defineProperty(EventApi.prototype, "source", {
- get: function () {
- var sourceId = this._def.sourceId;
- if (sourceId) {
- return new EventSourceApi(this._calendar, this._calendar.state.eventSources[sourceId]);
- }
- return null;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "start", {
- get: function () {
- return this._instance ?
- this._calendar.dateEnv.toDate(this._instance.range.start) :
- null;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "end", {
- get: function () {
- return (this._instance && this._def.hasEnd) ?
- this._calendar.dateEnv.toDate(this._instance.range.end) :
- null;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "id", {
- // computable props that all access the def
- // TODO: find a TypeScript-compatible way to do this at scale
- get: function () { return this._def.publicId; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "groupId", {
- get: function () { return this._def.groupId; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "allDay", {
- get: function () { return this._def.allDay; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "title", {
- get: function () { return this._def.title; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "url", {
- get: function () { return this._def.url; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "rendering", {
- get: function () { return this._def.rendering; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "startEditable", {
- get: function () { return this._def.ui.startEditable; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "durationEditable", {
- get: function () { return this._def.ui.durationEditable; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "constraint", {
- get: function () { return this._def.ui.constraints[0] || null; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "overlap", {
- get: function () { return this._def.ui.overlap; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "allow", {
- get: function () { return this._def.ui.allows[0] || null; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "backgroundColor", {
- get: function () { return this._def.ui.backgroundColor; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "borderColor", {
- get: function () { return this._def.ui.borderColor; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "textColor", {
- get: function () { return this._def.ui.textColor; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "classNames", {
- // NOTE: user can't modify these because Object.freeze was called in event-def parsing
- get: function () { return this._def.ui.classNames; },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(EventApi.prototype, "extendedProps", {
- get: function () { return this._def.extendedProps; },
- enumerable: true,
- configurable: true
- });
- return EventApi;
- }());
-
- /*
- Specifying nextDayThreshold signals that all-day ranges should be sliced.
- */
- function sliceEventStore(eventStore, eventUiBases, framingRange, nextDayThreshold) {
- var inverseBgByGroupId = {};
- var inverseBgByDefId = {};
- var defByGroupId = {};
- var bgRanges = [];
- var fgRanges = [];
- var eventUis = compileEventUis(eventStore.defs, eventUiBases);
- for (var defId in eventStore.defs) {
- var def = eventStore.defs[defId];
- if (def.rendering === 'inverse-background') {
- if (def.groupId) {
- inverseBgByGroupId[def.groupId] = [];
- if (!defByGroupId[def.groupId]) {
- defByGroupId[def.groupId] = def;
- }
- }
- else {
- inverseBgByDefId[defId] = [];
- }
- }
- }
- for (var instanceId in eventStore.instances) {
- var instance = eventStore.instances[instanceId];
- var def = eventStore.defs[instance.defId];
- var ui = eventUis[def.defId];
- var origRange = instance.range;
- var normalRange = (!def.allDay && nextDayThreshold) ?
- computeVisibleDayRange(origRange, nextDayThreshold) :
- origRange;
- var slicedRange = intersectRanges(normalRange, framingRange);
- if (slicedRange) {
- if (def.rendering === 'inverse-background') {
- if (def.groupId) {
- inverseBgByGroupId[def.groupId].push(slicedRange);
- }
- else {
- inverseBgByDefId[instance.defId].push(slicedRange);
- }
- }
- else {
- (def.rendering === 'background' ? bgRanges : fgRanges).push({
- def: def,
- ui: ui,
- instance: instance,
- range: slicedRange,
- isStart: normalRange.start && normalRange.start.valueOf() === slicedRange.start.valueOf(),
- isEnd: normalRange.end && normalRange.end.valueOf() === slicedRange.end.valueOf()
- });
- }
- }
- }
- for (var groupId in inverseBgByGroupId) { // BY GROUP
- var ranges = inverseBgByGroupId[groupId];
- var invertedRanges = invertRanges(ranges, framingRange);
- for (var _i = 0, invertedRanges_1 = invertedRanges; _i < invertedRanges_1.length; _i++) {
- var invertedRange = invertedRanges_1[_i];
- var def = defByGroupId[groupId];
- var ui = eventUis[def.defId];
- bgRanges.push({
- def: def,
- ui: ui,
- instance: null,
- range: invertedRange,
- isStart: false,
- isEnd: false
- });
- }
- }
- for (var defId in inverseBgByDefId) {
- var ranges = inverseBgByDefId[defId];
- var invertedRanges = invertRanges(ranges, framingRange);
- for (var _a = 0, invertedRanges_2 = invertedRanges; _a < invertedRanges_2.length; _a++) {
- var invertedRange = invertedRanges_2[_a];
- bgRanges.push({
- def: eventStore.defs[defId],
- ui: eventUis[defId],
- instance: null,
- range: invertedRange,
- isStart: false,
- isEnd: false
- });
- }
- }
- return { bg: bgRanges, fg: fgRanges };
- }
- function hasBgRendering(def) {
- return def.rendering === 'background' || def.rendering === 'inverse-background';
- }
- function filterSegsViaEls(context, segs, isMirror) {
- var calendar = context.calendar, view = context.view;
- if (calendar.hasPublicHandlers('eventRender')) {
- segs = segs.filter(function (seg) {
- var custom = calendar.publiclyTrigger('eventRender', [
- {
- event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
- isMirror: isMirror,
- isStart: seg.isStart,
- isEnd: seg.isEnd,
- // TODO: include seg.range once all components consistently generate it
- el: seg.el,
- view: view
- }
- ]);
- if (custom === false) { // means don't render at all
- return false;
- }
- else if (custom && custom !== true) {
- seg.el = custom;
- }
- return true;
- });
- }
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- setElSeg(seg.el, seg);
- }
- return segs;
- }
- function setElSeg(el, seg) {
- el.fcSeg = seg;
- }
- function getElSeg(el) {
- return el.fcSeg || null;
- }
- // event ui computation
- function compileEventUis(eventDefs, eventUiBases) {
- return mapHash(eventDefs, function (eventDef) {
- return compileEventUi(eventDef, eventUiBases);
- });
- }
- function compileEventUi(eventDef, eventUiBases) {
- var uis = [];
- if (eventUiBases['']) {
- uis.push(eventUiBases['']);
- }
- if (eventUiBases[eventDef.defId]) {
- uis.push(eventUiBases[eventDef.defId]);
- }
- uis.push(eventDef.ui);
- return combineEventUis(uis);
- }
- // triggers
- function triggerRenderedSegs(context, segs, isMirrors) {
- var calendar = context.calendar, view = context.view;
- if (calendar.hasPublicHandlers('eventPositioned')) {
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- calendar.publiclyTriggerAfterSizing('eventPositioned', [
- {
- event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
- isMirror: isMirrors,
- isStart: seg.isStart,
- isEnd: seg.isEnd,
- el: seg.el,
- view: view
- }
- ]);
- }
- }
- if (!calendar.state.eventSourceLoadingLevel) { // avoid initial empty state while pending
- calendar.afterSizingTriggers._eventsPositioned = [null]; // fire once
- }
- }
- function triggerWillRemoveSegs(context, segs, isMirrors) {
- var calendar = context.calendar, view = context.view;
- for (var _i = 0, segs_3 = segs; _i < segs_3.length; _i++) {
- var seg = segs_3[_i];
- calendar.trigger('eventElRemove', seg.el);
- }
- if (calendar.hasPublicHandlers('eventDestroy')) {
- for (var _a = 0, segs_4 = segs; _a < segs_4.length; _a++) {
- var seg = segs_4[_a];
- calendar.publiclyTrigger('eventDestroy', [
- {
- event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
- isMirror: isMirrors,
- el: seg.el,
- view: view
- }
- ]);
- }
- }
- }
- // is-interactable
- function computeEventDraggable(context, eventDef, eventUi) {
- var calendar = context.calendar, view = context.view;
- var transformers = calendar.pluginSystem.hooks.isDraggableTransformers;
- var val = eventUi.startEditable;
- for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
- var transformer = transformers_1[_i];
- val = transformer(val, eventDef, eventUi, view);
- }
- return val;
- }
- function computeEventStartResizable(context, eventDef, eventUi) {
- return eventUi.durationEditable && context.options.eventResizableFromStart;
- }
- function computeEventEndResizable(context, eventDef, eventUi) {
- return eventUi.durationEditable;
- }
-
- // applies the mutation to ALL defs/instances within the event store
- function applyMutationToEventStore(eventStore, eventConfigBase, mutation, calendar) {
- var eventConfigs = compileEventUis(eventStore.defs, eventConfigBase);
- var dest = createEmptyEventStore();
- for (var defId in eventStore.defs) {
- var def = eventStore.defs[defId];
- dest.defs[defId] = applyMutationToEventDef(def, eventConfigs[defId], mutation, calendar.pluginSystem.hooks.eventDefMutationAppliers, calendar);
- }
- for (var instanceId in eventStore.instances) {
- var instance = eventStore.instances[instanceId];
- var def = dest.defs[instance.defId]; // important to grab the newly modified def
- dest.instances[instanceId] = applyMutationToEventInstance(instance, def, eventConfigs[instance.defId], mutation, calendar);
- }
- return dest;
- }
- function applyMutationToEventDef(eventDef, eventConfig, mutation, appliers, calendar) {
- var standardProps = mutation.standardProps || {};
- // if hasEnd has not been specified, guess a good value based on deltas.
- // if duration will change, there's no way the default duration will persist,
- // and thus, we need to mark the event as having a real end
- if (standardProps.hasEnd == null &&
- eventConfig.durationEditable &&
- (mutation.startDelta || mutation.endDelta)) {
- standardProps.hasEnd = true; // TODO: is this mutation okay?
- }
- var copy = __assign({}, eventDef, standardProps, { ui: __assign({}, eventDef.ui, standardProps.ui) });
- if (mutation.extendedProps) {
- copy.extendedProps = __assign({}, copy.extendedProps, mutation.extendedProps);
- }
- for (var _i = 0, appliers_1 = appliers; _i < appliers_1.length; _i++) {
- var applier = appliers_1[_i];
- applier(copy, mutation, calendar);
- }
- if (!copy.hasEnd && calendar.opt('forceEventDuration')) {
- copy.hasEnd = true;
- }
- return copy;
- }
- function applyMutationToEventInstance(eventInstance, eventDef, // must first be modified by applyMutationToEventDef
- eventConfig, mutation, calendar) {
- var dateEnv = calendar.dateEnv;
- var forceAllDay = mutation.standardProps && mutation.standardProps.allDay === true;
- var clearEnd = mutation.standardProps && mutation.standardProps.hasEnd === false;
- var copy = __assign({}, eventInstance);
- if (forceAllDay) {
- copy.range = computeAlignedDayRange(copy.range);
- }
- if (mutation.datesDelta && eventConfig.startEditable) {
- copy.range = {
- start: dateEnv.add(copy.range.start, mutation.datesDelta),
- end: dateEnv.add(copy.range.end, mutation.datesDelta)
- };
- }
- if (mutation.startDelta && eventConfig.durationEditable) {
- copy.range = {
- start: dateEnv.add(copy.range.start, mutation.startDelta),
- end: copy.range.end
- };
- }
- if (mutation.endDelta && eventConfig.durationEditable) {
- copy.range = {
- start: copy.range.start,
- end: dateEnv.add(copy.range.end, mutation.endDelta)
- };
- }
- if (clearEnd) {
- copy.range = {
- start: copy.range.start,
- end: calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start)
- };
- }
- // in case event was all-day but the supplied deltas were not
- // better util for this?
- if (eventDef.allDay) {
- copy.range = {
- start: startOfDay(copy.range.start),
- end: startOfDay(copy.range.end)
- };
- }
- // handle invalid durations
- if (copy.range.end < copy.range.start) {
- copy.range.end = calendar.getDefaultEventEnd(eventDef.allDay, copy.range.start);
- }
- return copy;
- }
-
- function reduceEventStore (eventStore, action, eventSources, dateProfile, calendar) {
- switch (action.type) {
- case 'RECEIVE_EVENTS': // raw
- return receiveRawEvents(eventStore, eventSources[action.sourceId], action.fetchId, action.fetchRange, action.rawEvents, calendar);
- case 'ADD_EVENTS': // already parsed, but not expanded
- return addEvent(eventStore, action.eventStore, // new ones
- dateProfile ? dateProfile.activeRange : null, calendar);
- case 'MERGE_EVENTS': // already parsed and expanded
- return mergeEventStores(eventStore, action.eventStore);
- case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
- case 'NEXT':
- case 'SET_DATE':
- case 'SET_VIEW_TYPE':
- if (dateProfile) {
- return expandRecurring(eventStore, dateProfile.activeRange, calendar);
- }
- else {
- return eventStore;
- }
- case 'CHANGE_TIMEZONE':
- return rezoneDates(eventStore, action.oldDateEnv, calendar.dateEnv);
- case 'MUTATE_EVENTS':
- return applyMutationToRelated(eventStore, action.instanceId, action.mutation, action.fromApi, calendar);
- case 'REMOVE_EVENT_INSTANCES':
- return excludeInstances(eventStore, action.instances);
- case 'REMOVE_EVENT_DEF':
- return filterEventStoreDefs(eventStore, function (eventDef) {
- return eventDef.defId !== action.defId;
- });
- case 'REMOVE_EVENT_SOURCE':
- return excludeEventsBySourceId(eventStore, action.sourceId);
- case 'REMOVE_ALL_EVENT_SOURCES':
- return filterEventStoreDefs(eventStore, function (eventDef) {
- return !eventDef.sourceId; // only keep events with no source id
- });
- case 'REMOVE_ALL_EVENTS':
- return createEmptyEventStore();
- case 'RESET_EVENTS':
- return {
- defs: eventStore.defs,
- instances: eventStore.instances
- };
- default:
- return eventStore;
- }
- }
- function receiveRawEvents(eventStore, eventSource, fetchId, fetchRange, rawEvents, calendar) {
- if (eventSource && // not already removed
- fetchId === eventSource.latestFetchId // TODO: wish this logic was always in event-sources
- ) {
- var subset = parseEvents(transformRawEvents(rawEvents, eventSource, calendar), eventSource.sourceId, calendar);
- if (fetchRange) {
- subset = expandRecurring(subset, fetchRange, calendar);
- }
- return mergeEventStores(excludeEventsBySourceId(eventStore, eventSource.sourceId), subset);
- }
- return eventStore;
- }
- function addEvent(eventStore, subset, expandRange, calendar) {
- if (expandRange) {
- subset = expandRecurring(subset, expandRange, calendar);
- }
- return mergeEventStores(eventStore, subset);
- }
- function rezoneDates(eventStore, oldDateEnv, newDateEnv) {
- var defs = eventStore.defs;
- var instances = mapHash(eventStore.instances, function (instance) {
- var def = defs[instance.defId];
- if (def.allDay || def.recurringDef) {
- return instance; // isn't dependent on timezone
- }
- else {
- return __assign({}, instance, { range: {
- start: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.start, instance.forcedStartTzo)),
- end: newDateEnv.createMarker(oldDateEnv.toDate(instance.range.end, instance.forcedEndTzo))
- }, forcedStartTzo: newDateEnv.canComputeOffset ? null : instance.forcedStartTzo, forcedEndTzo: newDateEnv.canComputeOffset ? null : instance.forcedEndTzo });
- }
- });
- return { defs: defs, instances: instances };
- }
- function applyMutationToRelated(eventStore, instanceId, mutation, fromApi, calendar) {
- var relevant = getRelevantEvents(eventStore, instanceId);
- var eventConfigBase = fromApi ?
- { '': {
- startEditable: true,
- durationEditable: true,
- constraints: [],
- overlap: null,
- allows: [],
- backgroundColor: '',
- borderColor: '',
- textColor: '',
- classNames: []
- } } :
- calendar.eventUiBases;
- relevant = applyMutationToEventStore(relevant, eventConfigBase, mutation, calendar);
- return mergeEventStores(eventStore, relevant);
- }
- function excludeEventsBySourceId(eventStore, sourceId) {
- return filterEventStoreDefs(eventStore, function (eventDef) {
- return eventDef.sourceId !== sourceId;
- });
- }
- // QUESTION: why not just return instances? do a general object-property-exclusion util
- function excludeInstances(eventStore, removals) {
- return {
- defs: eventStore.defs,
- instances: filterHash(eventStore.instances, function (instance) {
- return !removals[instance.instanceId];
- })
- };
- }
-
- // high-level segmenting-aware tester functions
- // ------------------------------------------------------------------------------------------------------------------------
- function isInteractionValid(interaction, calendar) {
- return isNewPropsValid({ eventDrag: interaction }, calendar); // HACK: the eventDrag props is used for ALL interactions
- }
- function isDateSelectionValid(dateSelection, calendar) {
- return isNewPropsValid({ dateSelection: dateSelection }, calendar);
- }
- function isNewPropsValid(newProps, calendar) {
- var view = calendar.view;
- var props = __assign({ businessHours: view ? view.props.businessHours : createEmptyEventStore(), dateSelection: '', eventStore: calendar.state.eventStore, eventUiBases: calendar.eventUiBases, eventSelection: '', eventDrag: null, eventResize: null }, newProps);
- return (calendar.pluginSystem.hooks.isPropsValid || isPropsValid)(props, calendar);
- }
- function isPropsValid(state, calendar, dateSpanMeta, filterConfig) {
- if (dateSpanMeta === void 0) { dateSpanMeta = {}; }
- if (state.eventDrag && !isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {
- return false;
- }
- if (state.dateSelection && !isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig)) {
- return false;
- }
- return true;
- }
- // Moving Event Validation
- // ------------------------------------------------------------------------------------------------------------------------
- function isInteractionPropsValid(state, calendar, dateSpanMeta, filterConfig) {
- var interaction = state.eventDrag; // HACK: the eventDrag props is used for ALL interactions
- var subjectEventStore = interaction.mutatedEvents;
- var subjectDefs = subjectEventStore.defs;
- var subjectInstances = subjectEventStore.instances;
- var subjectConfigs = compileEventUis(subjectDefs, interaction.isEvent ?
- state.eventUiBases :
- { '': calendar.selectionConfig } // if not a real event, validate as a selection
- );
- if (filterConfig) {
- subjectConfigs = mapHash(subjectConfigs, filterConfig);
- }
- var otherEventStore = excludeInstances(state.eventStore, interaction.affectedEvents.instances); // exclude the subject events. TODO: exclude defs too?
- var otherDefs = otherEventStore.defs;
- var otherInstances = otherEventStore.instances;
- var otherConfigs = compileEventUis(otherDefs, state.eventUiBases);
- for (var subjectInstanceId in subjectInstances) {
- var subjectInstance = subjectInstances[subjectInstanceId];
- var subjectRange = subjectInstance.range;
- var subjectConfig = subjectConfigs[subjectInstance.defId];
- var subjectDef = subjectDefs[subjectInstance.defId];
- // constraint
- if (!allConstraintsPass(subjectConfig.constraints, subjectRange, otherEventStore, state.businessHours, calendar)) {
- return false;
- }
- // overlap
- var overlapFunc = calendar.opt('eventOverlap');
- if (typeof overlapFunc !== 'function') {
- overlapFunc = null;
- }
- for (var otherInstanceId in otherInstances) {
- var otherInstance = otherInstances[otherInstanceId];
- // intersect! evaluate
- if (rangesIntersect(subjectRange, otherInstance.range)) {
- var otherOverlap = otherConfigs[otherInstance.defId].overlap;
- // consider the other event's overlap. only do this if the subject event is a "real" event
- if (otherOverlap === false && interaction.isEvent) {
- return false;
- }
- if (subjectConfig.overlap === false) {
- return false;
- }
- if (overlapFunc && !overlapFunc(new EventApi(calendar, otherDefs[otherInstance.defId], otherInstance), // still event
- new EventApi(calendar, subjectDef, subjectInstance) // moving event
- )) {
- return false;
- }
- }
- }
- // allow (a function)
- var calendarEventStore = calendar.state.eventStore; // need global-to-calendar, not local to component (splittable)state
- for (var _i = 0, _a = subjectConfig.allows; _i < _a.length; _i++) {
- var subjectAllow = _a[_i];
- var subjectDateSpan = __assign({}, dateSpanMeta, { range: subjectInstance.range, allDay: subjectDef.allDay });
- var origDef = calendarEventStore.defs[subjectDef.defId];
- var origInstance = calendarEventStore.instances[subjectInstanceId];
- var eventApi = void 0;
- if (origDef) { // was previously in the calendar
- eventApi = new EventApi(calendar, origDef, origInstance);
- }
- else { // was an external event
- eventApi = new EventApi(calendar, subjectDef); // no instance, because had no dates
- }
- if (!subjectAllow(calendar.buildDateSpanApi(subjectDateSpan), eventApi)) {
- return false;
- }
- }
- }
- return true;
- }
- // Date Selection Validation
- // ------------------------------------------------------------------------------------------------------------------------
- function isDateSelectionPropsValid(state, calendar, dateSpanMeta, filterConfig) {
- var relevantEventStore = state.eventStore;
- var relevantDefs = relevantEventStore.defs;
- var relevantInstances = relevantEventStore.instances;
- var selection = state.dateSelection;
- var selectionRange = selection.range;
- var selectionConfig = calendar.selectionConfig;
- if (filterConfig) {
- selectionConfig = filterConfig(selectionConfig);
- }
- // constraint
- if (!allConstraintsPass(selectionConfig.constraints, selectionRange, relevantEventStore, state.businessHours, calendar)) {
- return false;
- }
- // overlap
- var overlapFunc = calendar.opt('selectOverlap');
- if (typeof overlapFunc !== 'function') {
- overlapFunc = null;
- }
- for (var relevantInstanceId in relevantInstances) {
- var relevantInstance = relevantInstances[relevantInstanceId];
- // intersect! evaluate
- if (rangesIntersect(selectionRange, relevantInstance.range)) {
- if (selectionConfig.overlap === false) {
- return false;
- }
- if (overlapFunc && !overlapFunc(new EventApi(calendar, relevantDefs[relevantInstance.defId], relevantInstance))) {
- return false;
- }
- }
- }
- // allow (a function)
- for (var _i = 0, _a = selectionConfig.allows; _i < _a.length; _i++) {
- var selectionAllow = _a[_i];
- var fullDateSpan = __assign({}, dateSpanMeta, selection);
- if (!selectionAllow(calendar.buildDateSpanApi(fullDateSpan), null)) {
- return false;
- }
- }
- return true;
- }
- // Constraint Utils
- // ------------------------------------------------------------------------------------------------------------------------
- function allConstraintsPass(constraints, subjectRange, otherEventStore, businessHoursUnexpanded, calendar) {
- for (var _i = 0, constraints_1 = constraints; _i < constraints_1.length; _i++) {
- var constraint = constraints_1[_i];
- if (!anyRangesContainRange(constraintToRanges(constraint, subjectRange, otherEventStore, businessHoursUnexpanded, calendar), subjectRange)) {
- return false;
- }
- }
- return true;
- }
- function constraintToRanges(constraint, subjectRange, // for expanding a recurring constraint, or expanding business hours
- otherEventStore, // for if constraint is an even group ID
- businessHoursUnexpanded, // for if constraint is 'businessHours'
- calendar // for expanding businesshours
- ) {
- if (constraint === 'businessHours') {
- return eventStoreToRanges(expandRecurring(businessHoursUnexpanded, subjectRange, calendar));
- }
- else if (typeof constraint === 'string') { // an group ID
- return eventStoreToRanges(filterEventStoreDefs(otherEventStore, function (eventDef) {
- return eventDef.groupId === constraint;
- }));
- }
- else if (typeof constraint === 'object' && constraint) { // non-null object
- return eventStoreToRanges(expandRecurring(constraint, subjectRange, calendar));
- }
- return []; // if it's false
- }
- // TODO: move to event-store file?
- function eventStoreToRanges(eventStore) {
- var instances = eventStore.instances;
- var ranges = [];
- for (var instanceId in instances) {
- ranges.push(instances[instanceId].range);
- }
- return ranges;
- }
- // TODO: move to geom file?
- function anyRangesContainRange(outerRanges, innerRange) {
- for (var _i = 0, outerRanges_1 = outerRanges; _i < outerRanges_1.length; _i++) {
- var outerRange = outerRanges_1[_i];
- if (rangeContainsRange(outerRange, innerRange)) {
- return true;
- }
- }
- return false;
- }
- // Parsing
- // ------------------------------------------------------------------------------------------------------------------------
- function normalizeConstraint(input, calendar) {
- if (Array.isArray(input)) {
- return parseEvents(input, '', calendar, true); // allowOpenRange=true
- }
- else if (typeof input === 'object' && input) { // non-null object
- return parseEvents([input], '', calendar, true); // allowOpenRange=true
- }
- else if (input != null) {
- return String(input);
- }
- else {
- return null;
- }
- }
-
- function htmlEscape(s) {
- return (s + '').replace(/&/g, '&amp;')
- .replace(/</g, '&lt;')
- .replace(/>/g, '&gt;')
- .replace(/'/g, '&#039;')
- .replace(/"/g, '&quot;')
- .replace(/\n/g, '<br />');
- }
- // Given a hash of CSS properties, returns a string of CSS.
- // Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.
- function cssToStr(cssProps) {
- var statements = [];
- for (var name_1 in cssProps) {
- var val = cssProps[name_1];
- if (val != null && val !== '') {
- statements.push(name_1 + ':' + val);
- }
- }
- return statements.join(';');
- }
- // Given an object hash of HTML attribute names to values,
- // generates a string that can be injected between < > in HTML
- function attrsToStr(attrs) {
- var parts = [];
- for (var name_2 in attrs) {
- var val = attrs[name_2];
- if (val != null) {
- parts.push(name_2 + '="' + htmlEscape(val) + '"');
- }
- }
- return parts.join(' ');
- }
- function parseClassName(raw) {
- if (Array.isArray(raw)) {
- return raw;
- }
- else if (typeof raw === 'string') {
- return raw.split(/\s+/);
- }
- else {
- return [];
- }
- }
-
- var UNSCOPED_EVENT_UI_PROPS = {
- editable: Boolean,
- startEditable: Boolean,
- durationEditable: Boolean,
- constraint: null,
- overlap: null,
- allow: null,
- className: parseClassName,
- classNames: parseClassName,
- color: String,
- backgroundColor: String,
- borderColor: String,
- textColor: String
- };
- function processUnscopedUiProps(rawProps, calendar, leftovers) {
- var props = refineProps(rawProps, UNSCOPED_EVENT_UI_PROPS, {}, leftovers);
- var constraint = normalizeConstraint(props.constraint, calendar);
- return {
- startEditable: props.startEditable != null ? props.startEditable : props.editable,
- durationEditable: props.durationEditable != null ? props.durationEditable : props.editable,
- constraints: constraint != null ? [constraint] : [],
- overlap: props.overlap,
- allows: props.allow != null ? [props.allow] : [],
- backgroundColor: props.backgroundColor || props.color,
- borderColor: props.borderColor || props.color,
- textColor: props.textColor,
- classNames: props.classNames.concat(props.className)
- };
- }
- function processScopedUiProps(prefix, rawScoped, calendar, leftovers) {
- var rawUnscoped = {};
- var wasFound = {};
- for (var key in UNSCOPED_EVENT_UI_PROPS) {
- var scopedKey = prefix + capitaliseFirstLetter(key);
- rawUnscoped[key] = rawScoped[scopedKey];
- wasFound[scopedKey] = true;
- }
- if (prefix === 'event') {
- rawUnscoped.editable = rawScoped.editable; // special case. there is no 'eventEditable', just 'editable'
- }
- if (leftovers) {
- for (var key in rawScoped) {
- if (!wasFound[key]) {
- leftovers[key] = rawScoped[key];
- }
- }
- }
- return processUnscopedUiProps(rawUnscoped, calendar);
- }
- var EMPTY_EVENT_UI = {
- startEditable: null,
- durationEditable: null,
- constraints: [],
- overlap: null,
- allows: [],
- backgroundColor: '',
- borderColor: '',
- textColor: '',
- classNames: []
- };
- // prevent against problems with <2 args!
- function combineEventUis(uis) {
- return uis.reduce(combineTwoEventUis, EMPTY_EVENT_UI);
- }
- function combineTwoEventUis(item0, item1) {
- return {
- startEditable: item1.startEditable != null ? item1.startEditable : item0.startEditable,
- durationEditable: item1.durationEditable != null ? item1.durationEditable : item0.durationEditable,
- constraints: item0.constraints.concat(item1.constraints),
- overlap: typeof item1.overlap === 'boolean' ? item1.overlap : item0.overlap,
- allows: item0.allows.concat(item1.allows),
- backgroundColor: item1.backgroundColor || item0.backgroundColor,
- borderColor: item1.borderColor || item0.borderColor,
- textColor: item1.textColor || item0.textColor,
- classNames: item0.classNames.concat(item1.classNames)
- };
- }
-
- var NON_DATE_PROPS = {
- id: String,
- groupId: String,
- title: String,
- url: String,
- rendering: String,
- extendedProps: null
- };
- var DATE_PROPS = {
- start: null,
- date: null,
- end: null,
- allDay: null
- };
- var uid = 0;
- function parseEvent(raw, sourceId, calendar, allowOpenRange) {
- var allDayDefault = computeIsAllDayDefault(sourceId, calendar);
- var leftovers0 = {};
- var recurringRes = parseRecurring(raw, // raw, but with single-event stuff stripped out
- allDayDefault, calendar.dateEnv, calendar.pluginSystem.hooks.recurringTypes, leftovers0 // will populate with non-recurring props
- );
- if (recurringRes) {
- var def = parseEventDef(leftovers0, sourceId, recurringRes.allDay, Boolean(recurringRes.duration), calendar);
- def.recurringDef = {
- typeId: recurringRes.typeId,
- typeData: recurringRes.typeData,
- duration: recurringRes.duration
- };
- return { def: def, instance: null };
- }
- else {
- var leftovers1 = {};
- var singleRes = parseSingle(raw, allDayDefault, calendar, leftovers1, allowOpenRange);
- if (singleRes) {
- var def = parseEventDef(leftovers1, sourceId, singleRes.allDay, singleRes.hasEnd, calendar);
- var instance = createEventInstance(def.defId, singleRes.range, singleRes.forcedStartTzo, singleRes.forcedEndTzo);
- return { def: def, instance: instance };
- }
- }
- return null;
- }
- /*
- Will NOT populate extendedProps with the leftover properties.
- Will NOT populate date-related props.
- The EventNonDateInput has been normalized (id => publicId, etc).
- */
- function parseEventDef(raw, sourceId, allDay, hasEnd, calendar) {
- var leftovers = {};
- var def = pluckNonDateProps(raw, calendar, leftovers);
- def.defId = String(uid++);
- def.sourceId = sourceId;
- def.allDay = allDay;
- def.hasEnd = hasEnd;
- for (var _i = 0, _a = calendar.pluginSystem.hooks.eventDefParsers; _i < _a.length; _i++) {
- var eventDefParser = _a[_i];
- var newLeftovers = {};
- eventDefParser(def, leftovers, newLeftovers);
- leftovers = newLeftovers;
- }
- def.extendedProps = __assign(leftovers, def.extendedProps || {});
- // help out EventApi from having user modify props
- Object.freeze(def.ui.classNames);
- Object.freeze(def.extendedProps);
- return def;
- }
- function createEventInstance(defId, range, forcedStartTzo, forcedEndTzo) {
- return {
- instanceId: String(uid++),
- defId: defId,
- range: range,
- forcedStartTzo: forcedStartTzo == null ? null : forcedStartTzo,
- forcedEndTzo: forcedEndTzo == null ? null : forcedEndTzo
- };
- }
- function parseSingle(raw, allDayDefault, calendar, leftovers, allowOpenRange) {
- var props = pluckDateProps(raw, leftovers);
- var allDay = props.allDay;
- var startMeta;
- var startMarker = null;
- var hasEnd = false;
- var endMeta;
- var endMarker = null;
- startMeta = calendar.dateEnv.createMarkerMeta(props.start);
- if (startMeta) {
- startMarker = startMeta.marker;
- }
- else if (!allowOpenRange) {
- return null;
- }
- if (props.end != null) {
- endMeta = calendar.dateEnv.createMarkerMeta(props.end);
- }
- if (allDay == null) {
- if (allDayDefault != null) {
- allDay = allDayDefault;
- }
- else {
- // fall back to the date props LAST
- allDay = (!startMeta || startMeta.isTimeUnspecified) &&
- (!endMeta || endMeta.isTimeUnspecified);
- }
- }
- if (allDay && startMarker) {
- startMarker = startOfDay(startMarker);
- }
- if (endMeta) {
- endMarker = endMeta.marker;
- if (allDay) {
- endMarker = startOfDay(endMarker);
- }
- if (startMarker && endMarker <= startMarker) {
- endMarker = null;
- }
- }
- if (endMarker) {
- hasEnd = true;
- }
- else if (!allowOpenRange) {
- hasEnd = calendar.opt('forceEventDuration') || false;
- endMarker = calendar.dateEnv.add(startMarker, allDay ?
- calendar.defaultAllDayEventDuration :
- calendar.defaultTimedEventDuration);
- }
- return {
- allDay: allDay,
- hasEnd: hasEnd,
- range: { start: startMarker, end: endMarker },
- forcedStartTzo: startMeta ? startMeta.forcedTzo : null,
- forcedEndTzo: endMeta ? endMeta.forcedTzo : null
- };
- }
- function pluckDateProps(raw, leftovers) {
- var props = refineProps(raw, DATE_PROPS, {}, leftovers);
- props.start = (props.start !== null) ? props.start : props.date;
- delete props.date;
- return props;
- }
- function pluckNonDateProps(raw, calendar, leftovers) {
- var preLeftovers = {};
- var props = refineProps(raw, NON_DATE_PROPS, {}, preLeftovers);
- var ui = processUnscopedUiProps(preLeftovers, calendar, leftovers);
- props.publicId = props.id;
- delete props.id;
- props.ui = ui;
- return props;
- }
- function computeIsAllDayDefault(sourceId, calendar) {
- var res = null;
- if (sourceId) {
- var source = calendar.state.eventSources[sourceId];
- res = source.allDayDefault;
- }
- if (res == null) {
- res = calendar.opt('allDayDefault');
- }
- return res;
- }
-
- var DEF_DEFAULTS = {
- startTime: '09:00',
- endTime: '17:00',
- daysOfWeek: [1, 2, 3, 4, 5],
- rendering: 'inverse-background',
- classNames: 'fc-nonbusiness',
- groupId: '_businessHours' // so multiple defs get grouped
- };
- /*
- TODO: pass around as EventDefHash!!!
- */
- function parseBusinessHours(input, calendar) {
- return parseEvents(refineInputs(input), '', calendar);
- }
- function refineInputs(input) {
- var rawDefs;
- if (input === true) {
- rawDefs = [{}]; // will get DEF_DEFAULTS verbatim
- }
- else if (Array.isArray(input)) {
- // if specifying an array, every sub-definition NEEDS a day-of-week
- rawDefs = input.filter(function (rawDef) {
- return rawDef.daysOfWeek;
- });
- }
- else if (typeof input === 'object' && input) { // non-null object
- rawDefs = [input];
- }
- else { // is probably false
- rawDefs = [];
- }
- rawDefs = rawDefs.map(function (rawDef) {
- return __assign({}, DEF_DEFAULTS, rawDef);
- });
- return rawDefs;
- }
-
- function memoizeRendering(renderFunc, unrenderFunc, dependencies) {
- if (dependencies === void 0) { dependencies = []; }
- var dependents = [];
- var thisContext;
- var prevArgs;
- function unrender() {
- if (prevArgs) {
- for (var _i = 0, dependents_1 = dependents; _i < dependents_1.length; _i++) {
- var dependent = dependents_1[_i];
- dependent.unrender();
- }
- if (unrenderFunc) {
- unrenderFunc.apply(thisContext, prevArgs);
- }
- prevArgs = null;
- }
- }
- function res() {
- if (!prevArgs || !isArraysEqual(prevArgs, arguments)) {
- unrender();
- thisContext = this;
- prevArgs = arguments;
- renderFunc.apply(this, arguments);
- }
- }
- res.dependents = dependents;
- res.unrender = unrender;
- for (var _i = 0, dependencies_1 = dependencies; _i < dependencies_1.length; _i++) {
- var dependency = dependencies_1[_i];
- dependency.dependents.push(res);
- }
- return res;
- }
-
- var EMPTY_EVENT_STORE = createEmptyEventStore(); // for purecomponents. TODO: keep elsewhere
- var Splitter = /** @class */ (function () {
- function Splitter() {
- this.getKeysForEventDefs = memoize(this._getKeysForEventDefs);
- this.splitDateSelection = memoize(this._splitDateSpan);
- this.splitEventStore = memoize(this._splitEventStore);
- this.splitIndividualUi = memoize(this._splitIndividualUi);
- this.splitEventDrag = memoize(this._splitInteraction);
- this.splitEventResize = memoize(this._splitInteraction);
- this.eventUiBuilders = {}; // TODO: typescript protection
- }
- Splitter.prototype.splitProps = function (props) {
- var _this = this;
- var keyInfos = this.getKeyInfo(props);
- var defKeys = this.getKeysForEventDefs(props.eventStore);
- var dateSelections = this.splitDateSelection(props.dateSelection);
- var individualUi = this.splitIndividualUi(props.eventUiBases, defKeys); // the individual *bases*
- var eventStores = this.splitEventStore(props.eventStore, defKeys);
- var eventDrags = this.splitEventDrag(props.eventDrag);
- var eventResizes = this.splitEventResize(props.eventResize);
- var splitProps = {};
- this.eventUiBuilders = mapHash(keyInfos, function (info, key) {
- return _this.eventUiBuilders[key] || memoize(buildEventUiForKey);
- });
- for (var key in keyInfos) {
- var keyInfo = keyInfos[key];
- var eventStore = eventStores[key] || EMPTY_EVENT_STORE;
- var buildEventUi = this.eventUiBuilders[key];
- splitProps[key] = {
- businessHours: keyInfo.businessHours || props.businessHours,
- dateSelection: dateSelections[key] || null,
- eventStore: eventStore,
- eventUiBases: buildEventUi(props.eventUiBases[''], keyInfo.ui, individualUi[key]),
- eventSelection: eventStore.instances[props.eventSelection] ? props.eventSelection : '',
- eventDrag: eventDrags[key] || null,
- eventResize: eventResizes[key] || null
- };
- }
- return splitProps;
- };
- Splitter.prototype._splitDateSpan = function (dateSpan) {
- var dateSpans = {};
- if (dateSpan) {
- var keys = this.getKeysForDateSpan(dateSpan);
- for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
- var key = keys_1[_i];
- dateSpans[key] = dateSpan;
- }
- }
- return dateSpans;
- };
- Splitter.prototype._getKeysForEventDefs = function (eventStore) {
- var _this = this;
- return mapHash(eventStore.defs, function (eventDef) {
- return _this.getKeysForEventDef(eventDef);
- });
- };
- Splitter.prototype._splitEventStore = function (eventStore, defKeys) {
- var defs = eventStore.defs, instances = eventStore.instances;
- var splitStores = {};
- for (var defId in defs) {
- for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {
- var key = _a[_i];
- if (!splitStores[key]) {
- splitStores[key] = createEmptyEventStore();
- }
- splitStores[key].defs[defId] = defs[defId];
- }
- }
- for (var instanceId in instances) {
- var instance = instances[instanceId];
- for (var _b = 0, _c = defKeys[instance.defId]; _b < _c.length; _b++) {
- var key = _c[_b];
- if (splitStores[key]) { // must have already been created
- splitStores[key].instances[instanceId] = instance;
- }
- }
- }
- return splitStores;
- };
- Splitter.prototype._splitIndividualUi = function (eventUiBases, defKeys) {
- var splitHashes = {};
- for (var defId in eventUiBases) {
- if (defId) { // not the '' key
- for (var _i = 0, _a = defKeys[defId]; _i < _a.length; _i++) {
- var key = _a[_i];
- if (!splitHashes[key]) {
- splitHashes[key] = {};
- }
- splitHashes[key][defId] = eventUiBases[defId];
- }
- }
- }
- return splitHashes;
- };
- Splitter.prototype._splitInteraction = function (interaction) {
- var splitStates = {};
- if (interaction) {
- var affectedStores_1 = this._splitEventStore(interaction.affectedEvents, this._getKeysForEventDefs(interaction.affectedEvents) // can't use cached. might be events from other calendar
- );
- // can't rely on defKeys because event data is mutated
- var mutatedKeysByDefId = this._getKeysForEventDefs(interaction.mutatedEvents);
- var mutatedStores_1 = this._splitEventStore(interaction.mutatedEvents, mutatedKeysByDefId);
- var populate = function (key) {
- if (!splitStates[key]) {
- splitStates[key] = {
- affectedEvents: affectedStores_1[key] || EMPTY_EVENT_STORE,
- mutatedEvents: mutatedStores_1[key] || EMPTY_EVENT_STORE,
- isEvent: interaction.isEvent,
- origSeg: interaction.origSeg
- };
- }
- };
- for (var key in affectedStores_1) {
- populate(key);
- }
- for (var key in mutatedStores_1) {
- populate(key);
- }
- }
- return splitStates;
- };
- return Splitter;
- }());
- function buildEventUiForKey(allUi, eventUiForKey, individualUi) {
- var baseParts = [];
- if (allUi) {
- baseParts.push(allUi);
- }
- if (eventUiForKey) {
- baseParts.push(eventUiForKey);
- }
- var stuff = {
- '': combineEventUis(baseParts)
- };
- if (individualUi) {
- __assign(stuff, individualUi);
- }
- return stuff;
- }
-
- // Generates HTML for an anchor to another view into the calendar.
- // Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.
- // `gotoOptions` can either be a DateMarker, or an object with the form:
- // { date, type, forceOff }
- // `type` is a view-type like "day" or "week". default value is "day".
- // `attrs` and `innerHtml` are use to generate the rest of the HTML tag.
- function buildGotoAnchorHtml(allOptions, dateEnv, gotoOptions, attrs, innerHtml) {
- var date;
- var type;
- var forceOff;
- var finalOptions;
- if (gotoOptions instanceof Date) {
- date = gotoOptions; // a single date-like input
- }
- else {
- date = gotoOptions.date;
- type = gotoOptions.type;
- forceOff = gotoOptions.forceOff;
- }
- finalOptions = {
- date: dateEnv.formatIso(date, { omitTime: true }),
- type: type || 'day'
- };
- if (typeof attrs === 'string') {
- innerHtml = attrs;
- attrs = null;
- }
- attrs = attrs ? ' ' + attrsToStr(attrs) : ''; // will have a leading space
- innerHtml = innerHtml || '';
- if (!forceOff && allOptions.navLinks) {
- return '<a' + attrs +
- ' data-goto="' + htmlEscape(JSON.stringify(finalOptions)) + '">' +
- innerHtml +
- '</a>';
- }
- else {
- return '<span' + attrs + '>' +
- innerHtml +
- '</span>';
- }
- }
- function getAllDayHtml(allOptions) {
- return allOptions.allDayHtml || htmlEscape(allOptions.allDayText);
- }
- // Computes HTML classNames for a single-day element
- function getDayClasses(date, dateProfile, context, noThemeHighlight) {
- var calendar = context.calendar, options = context.options, theme = context.theme, dateEnv = context.dateEnv;
- var classes = [];
- var todayStart;
- var todayEnd;
- if (!rangeContainsMarker(dateProfile.activeRange, date)) {
- classes.push('fc-disabled-day');
- }
- else {
- classes.push('fc-' + DAY_IDS[date.getUTCDay()]);
- if (options.monthMode &&
- dateEnv.getMonth(date) !== dateEnv.getMonth(dateProfile.currentRange.start)) {
- classes.push('fc-other-month');
- }
- todayStart = startOfDay(calendar.getNow());
- todayEnd = addDays(todayStart, 1);
- if (date < todayStart) {
- classes.push('fc-past');
- }
- else if (date >= todayEnd) {
- classes.push('fc-future');
- }
- else {
- classes.push('fc-today');
- if (noThemeHighlight !== true) {
- classes.push(theme.getClass('today'));
- }
- }
- }
- return classes;
- }
-
- // given a function that resolves a result asynchronously.
- // the function can either call passed-in success and failure callbacks,
- // or it can return a promise.
- // if you need to pass additional params to func, bind them first.
- function unpromisify(func, success, failure) {
- // guard against success/failure callbacks being called more than once
- // and guard against a promise AND callback being used together.
- var isResolved = false;
- var wrappedSuccess = function () {
- if (!isResolved) {
- isResolved = true;
- success.apply(this, arguments);
- }
- };
- var wrappedFailure = function () {
- if (!isResolved) {
- isResolved = true;
- if (failure) {
- failure.apply(this, arguments);
- }
- }
- };
- var res = func(wrappedSuccess, wrappedFailure);
- if (res && typeof res.then === 'function') {
- res.then(wrappedSuccess, wrappedFailure);
- }
- }
-
- var Mixin = /** @class */ (function () {
- function Mixin() {
- }
- // mix into a CLASS
- Mixin.mixInto = function (destClass) {
- this.mixIntoObj(destClass.prototype);
- };
- // mix into ANY object
- Mixin.mixIntoObj = function (destObj) {
- var _this = this;
- Object.getOwnPropertyNames(this.prototype).forEach(function (name) {
- if (!destObj[name]) { // if destination doesn't already define it
- destObj[name] = _this.prototype[name];
- }
- });
- };
- /*
- will override existing methods
- TODO: remove! not used anymore
- */
- Mixin.mixOver = function (destClass) {
- var _this = this;
- Object.getOwnPropertyNames(this.prototype).forEach(function (name) {
- destClass.prototype[name] = _this.prototype[name];
- });
- };
- return Mixin;
- }());
-
- /*
- USAGE:
- import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'
- in class:
- on: EmitterInterface['on']
- one: EmitterInterface['one']
- off: EmitterInterface['off']
- trigger: EmitterInterface['trigger']
- triggerWith: EmitterInterface['triggerWith']
- hasHandlers: EmitterInterface['hasHandlers']
- after class:
- EmitterMixin.mixInto(TheClass)
- */
- var EmitterMixin = /** @class */ (function (_super) {
- __extends(EmitterMixin, _super);
- function EmitterMixin() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- EmitterMixin.prototype.on = function (type, handler) {
- addToHash(this._handlers || (this._handlers = {}), type, handler);
- return this; // for chaining
- };
- // todo: add comments
- EmitterMixin.prototype.one = function (type, handler) {
- addToHash(this._oneHandlers || (this._oneHandlers = {}), type, handler);
- return this; // for chaining
- };
- EmitterMixin.prototype.off = function (type, handler) {
- if (this._handlers) {
- removeFromHash(this._handlers, type, handler);
- }
- if (this._oneHandlers) {
- removeFromHash(this._oneHandlers, type, handler);
- }
- return this; // for chaining
- };
- EmitterMixin.prototype.trigger = function (type) {
- var args = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- args[_i - 1] = arguments[_i];
- }
- this.triggerWith(type, this, args);
- return this; // for chaining
- };
- EmitterMixin.prototype.triggerWith = function (type, context, args) {
- if (this._handlers) {
- applyAll(this._handlers[type], context, args);
- }
- if (this._oneHandlers) {
- applyAll(this._oneHandlers[type], context, args);
- delete this._oneHandlers[type]; // will never fire again
- }
- return this; // for chaining
- };
- EmitterMixin.prototype.hasHandlers = function (type) {
- return (this._handlers && this._handlers[type] && this._handlers[type].length) ||
- (this._oneHandlers && this._oneHandlers[type] && this._oneHandlers[type].length);
- };
- return EmitterMixin;
- }(Mixin));
- function addToHash(hash, type, handler) {
- (hash[type] || (hash[type] = []))
- .push(handler);
- }
- function removeFromHash(hash, type, handler) {
- if (handler) {
- if (hash[type]) {
- hash[type] = hash[type].filter(function (func) {
- return func !== handler;
- });
- }
- }
- else {
- delete hash[type]; // remove all handler funcs for this type
- }
- }
-
- /*
- Records offset information for a set of elements, relative to an origin element.
- Can record the left/right OR the top/bottom OR both.
- Provides methods for querying the cache by position.
- */
- var PositionCache = /** @class */ (function () {
- function PositionCache(originEl, els, isHorizontal, isVertical) {
- this.originEl = originEl;
- this.els = els;
- this.isHorizontal = isHorizontal;
- this.isVertical = isVertical;
- }
- // Queries the els for coordinates and stores them.
- // Call this method before using and of the get* methods below.
- PositionCache.prototype.build = function () {
- var originEl = this.originEl;
- var originClientRect = this.originClientRect =
- originEl.getBoundingClientRect(); // relative to viewport top-left
- if (this.isHorizontal) {
- this.buildElHorizontals(originClientRect.left);
- }
- if (this.isVertical) {
- this.buildElVerticals(originClientRect.top);
- }
- };
- // Populates the left/right internal coordinate arrays
- PositionCache.prototype.buildElHorizontals = function (originClientLeft) {
- var lefts = [];
- var rights = [];
- for (var _i = 0, _a = this.els; _i < _a.length; _i++) {
- var el = _a[_i];
- var rect = el.getBoundingClientRect();
- lefts.push(rect.left - originClientLeft);
- rights.push(rect.right - originClientLeft);
- }
- this.lefts = lefts;
- this.rights = rights;
- };
- // Populates the top/bottom internal coordinate arrays
- PositionCache.prototype.buildElVerticals = function (originClientTop) {
- var tops = [];
- var bottoms = [];
- for (var _i = 0, _a = this.els; _i < _a.length; _i++) {
- var el = _a[_i];
- var rect = el.getBoundingClientRect();
- tops.push(rect.top - originClientTop);
- bottoms.push(rect.bottom - originClientTop);
- }
- this.tops = tops;
- this.bottoms = bottoms;
- };
- // Given a left offset (from document left), returns the index of the el that it horizontally intersects.
- // If no intersection is made, returns undefined.
- PositionCache.prototype.leftToIndex = function (leftPosition) {
- var lefts = this.lefts;
- var rights = this.rights;
- var len = lefts.length;
- var i;
- for (i = 0; i < len; i++) {
- if (leftPosition >= lefts[i] && leftPosition < rights[i]) {
- return i;
- }
- }
- };
- // Given a top offset (from document top), returns the index of the el that it vertically intersects.
- // If no intersection is made, returns undefined.
- PositionCache.prototype.topToIndex = function (topPosition) {
- var tops = this.tops;
- var bottoms = this.bottoms;
- var len = tops.length;
- var i;
- for (i = 0; i < len; i++) {
- if (topPosition >= tops[i] && topPosition < bottoms[i]) {
- return i;
- }
- }
- };
- // Gets the width of the element at the given index
- PositionCache.prototype.getWidth = function (leftIndex) {
- return this.rights[leftIndex] - this.lefts[leftIndex];
- };
- // Gets the height of the element at the given index
- PositionCache.prototype.getHeight = function (topIndex) {
- return this.bottoms[topIndex] - this.tops[topIndex];
- };
- return PositionCache;
- }());
-
- /*
- An object for getting/setting scroll-related information for an element.
- Internally, this is done very differently for window versus DOM element,
- so this object serves as a common interface.
- */
- var ScrollController = /** @class */ (function () {
- function ScrollController() {
- }
- ScrollController.prototype.getMaxScrollTop = function () {
- return this.getScrollHeight() - this.getClientHeight();
- };
- ScrollController.prototype.getMaxScrollLeft = function () {
- return this.getScrollWidth() - this.getClientWidth();
- };
- ScrollController.prototype.canScrollVertically = function () {
- return this.getMaxScrollTop() > 0;
- };
- ScrollController.prototype.canScrollHorizontally = function () {
- return this.getMaxScrollLeft() > 0;
- };
- ScrollController.prototype.canScrollUp = function () {
- return this.getScrollTop() > 0;
- };
- ScrollController.prototype.canScrollDown = function () {
- return this.getScrollTop() < this.getMaxScrollTop();
- };
- ScrollController.prototype.canScrollLeft = function () {
- return this.getScrollLeft() > 0;
- };
- ScrollController.prototype.canScrollRight = function () {
- return this.getScrollLeft() < this.getMaxScrollLeft();
- };
- return ScrollController;
- }());
- var ElementScrollController = /** @class */ (function (_super) {
- __extends(ElementScrollController, _super);
- function ElementScrollController(el) {
- var _this = _super.call(this) || this;
- _this.el = el;
- return _this;
- }
- ElementScrollController.prototype.getScrollTop = function () {
- return this.el.scrollTop;
- };
- ElementScrollController.prototype.getScrollLeft = function () {
- return this.el.scrollLeft;
- };
- ElementScrollController.prototype.setScrollTop = function (top) {
- this.el.scrollTop = top;
- };
- ElementScrollController.prototype.setScrollLeft = function (left) {
- this.el.scrollLeft = left;
- };
- ElementScrollController.prototype.getScrollWidth = function () {
- return this.el.scrollWidth;
- };
- ElementScrollController.prototype.getScrollHeight = function () {
- return this.el.scrollHeight;
- };
- ElementScrollController.prototype.getClientHeight = function () {
- return this.el.clientHeight;
- };
- ElementScrollController.prototype.getClientWidth = function () {
- return this.el.clientWidth;
- };
- return ElementScrollController;
- }(ScrollController));
- var WindowScrollController = /** @class */ (function (_super) {
- __extends(WindowScrollController, _super);
- function WindowScrollController() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- WindowScrollController.prototype.getScrollTop = function () {
- return window.pageYOffset;
- };
- WindowScrollController.prototype.getScrollLeft = function () {
- return window.pageXOffset;
- };
- WindowScrollController.prototype.setScrollTop = function (n) {
- window.scroll(window.pageXOffset, n);
- };
- WindowScrollController.prototype.setScrollLeft = function (n) {
- window.scroll(n, window.pageYOffset);
- };
- WindowScrollController.prototype.getScrollWidth = function () {
- return document.documentElement.scrollWidth;
- };
- WindowScrollController.prototype.getScrollHeight = function () {
- return document.documentElement.scrollHeight;
- };
- WindowScrollController.prototype.getClientHeight = function () {
- return document.documentElement.clientHeight;
- };
- WindowScrollController.prototype.getClientWidth = function () {
- return document.documentElement.clientWidth;
- };
- return WindowScrollController;
- }(ScrollController));
-
- /*
- Embodies a div that has potential scrollbars
- */
- var ScrollComponent = /** @class */ (function (_super) {
- __extends(ScrollComponent, _super);
- function ScrollComponent(overflowX, overflowY) {
- var _this = _super.call(this, createElement('div', {
- className: 'fc-scroller'
- })) || this;
- _this.overflowX = overflowX;
- _this.overflowY = overflowY;
- _this.applyOverflow();
- return _this;
- }
- // sets to natural height, unlocks overflow
- ScrollComponent.prototype.clear = function () {
- this.setHeight('auto');
- this.applyOverflow();
- };
- ScrollComponent.prototype.destroy = function () {
- removeElement(this.el);
- };
- // Overflow
- // -----------------------------------------------------------------------------------------------------------------
- ScrollComponent.prototype.applyOverflow = function () {
- applyStyle(this.el, {
- overflowX: this.overflowX,
- overflowY: this.overflowY
- });
- };
- // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.
- // Useful for preserving scrollbar widths regardless of future resizes.
- // Can pass in scrollbarWidths for optimization.
- ScrollComponent.prototype.lockOverflow = function (scrollbarWidths) {
- var overflowX = this.overflowX;
- var overflowY = this.overflowY;
- scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();
- if (overflowX === 'auto') {
- overflowX = (scrollbarWidths.bottom || // horizontal scrollbars?
- this.canScrollHorizontally() // OR scrolling pane with massless scrollbars?
- ) ? 'scroll' : 'hidden';
- }
- if (overflowY === 'auto') {
- overflowY = (scrollbarWidths.left || scrollbarWidths.right || // horizontal scrollbars?
- this.canScrollVertically() // OR scrolling pane with massless scrollbars?
- ) ? 'scroll' : 'hidden';
- }
- applyStyle(this.el, { overflowX: overflowX, overflowY: overflowY });
- };
- ScrollComponent.prototype.setHeight = function (height) {
- applyStyleProp(this.el, 'height', height);
- };
- ScrollComponent.prototype.getScrollbarWidths = function () {
- var edges = computeEdges(this.el);
- return {
- left: edges.scrollbarLeft,
- right: edges.scrollbarRight,
- bottom: edges.scrollbarBottom
- };
- };
- return ScrollComponent;
- }(ElementScrollController));
-
- var Theme = /** @class */ (function () {
- function Theme(calendarOptions) {
- this.calendarOptions = calendarOptions;
- this.processIconOverride();
- }
- Theme.prototype.processIconOverride = function () {
- if (this.iconOverrideOption) {
- this.setIconOverride(this.calendarOptions[this.iconOverrideOption]);
- }
- };
- Theme.prototype.setIconOverride = function (iconOverrideHash) {
- var iconClassesCopy;
- var buttonName;
- if (typeof iconOverrideHash === 'object' && iconOverrideHash) { // non-null object
- iconClassesCopy = __assign({}, this.iconClasses);
- for (buttonName in iconOverrideHash) {
- iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);
- }
- this.iconClasses = iconClassesCopy;
- }
- else if (iconOverrideHash === false) {
- this.iconClasses = {};
- }
- };
- Theme.prototype.applyIconOverridePrefix = function (className) {
- var prefix = this.iconOverridePrefix;
- if (prefix && className.indexOf(prefix) !== 0) { // if not already present
- className = prefix + className;
- }
- return className;
- };
- Theme.prototype.getClass = function (key) {
- return this.classes[key] || '';
- };
- Theme.prototype.getIconClass = function (buttonName) {
- var className = this.iconClasses[buttonName];
- if (className) {
- return this.baseIconClass + ' ' + className;
- }
- return '';
- };
- Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {
- var className;
- if (this.iconOverrideCustomButtonOption) {
- className = customButtonProps[this.iconOverrideCustomButtonOption];
- if (className) {
- return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);
- }
- }
- return '';
- };
- return Theme;
- }());
- Theme.prototype.classes = {};
- Theme.prototype.iconClasses = {};
- Theme.prototype.baseIconClass = '';
- Theme.prototype.iconOverridePrefix = '';
-
- var guid = 0;
- var ComponentContext = /** @class */ (function () {
- function ComponentContext(calendar, theme, dateEnv, options, view) {
- this.calendar = calendar;
- this.theme = theme;
- this.dateEnv = dateEnv;
- this.options = options;
- this.view = view;
- this.isRtl = options.dir === 'rtl';
- this.eventOrderSpecs = parseFieldSpecs(options.eventOrder);
- this.nextDayThreshold = createDuration(options.nextDayThreshold);
- }
- ComponentContext.prototype.extend = function (options, view) {
- return new ComponentContext(this.calendar, this.theme, this.dateEnv, options || this.options, view || this.view);
- };
- return ComponentContext;
- }());
- var Component = /** @class */ (function () {
- function Component() {
- this.everRendered = false;
- this.uid = String(guid++);
- }
- Component.addEqualityFuncs = function (newFuncs) {
- this.prototype.equalityFuncs = __assign({}, this.prototype.equalityFuncs, newFuncs);
- };
- Component.prototype.receiveProps = function (props, context) {
- this.receiveContext(context);
- var _a = recycleProps(this.props || {}, props, this.equalityFuncs), anyChanges = _a.anyChanges, comboProps = _a.comboProps;
- this.props = comboProps;
- if (anyChanges) {
- if (this.everRendered) {
- this.beforeUpdate();
- }
- this.render(comboProps, context);
- if (this.everRendered) {
- this.afterUpdate();
- }
- }
- this.everRendered = true;
- };
- Component.prototype.receiveContext = function (context) {
- var oldContext = this.context;
- this.context = context;
- if (!oldContext) {
- this.firstContext(context);
- }
- };
- Component.prototype.render = function (props, context) {
- };
- Component.prototype.firstContext = function (context) {
- };
- Component.prototype.beforeUpdate = function () {
- };
- Component.prototype.afterUpdate = function () {
- };
- // after destroy is called, this component won't ever be used again
- Component.prototype.destroy = function () {
- };
- return Component;
- }());
- Component.prototype.equalityFuncs = {};
- /*
- Reuses old values when equal. If anything is unequal, returns newProps as-is.
- Great for PureComponent, but won't be feasible with React, so just eliminate and use React's DOM diffing.
- */
- function recycleProps(oldProps, newProps, equalityFuncs) {
- var comboProps = {}; // some old, some new
- var anyChanges = false;
- for (var key in newProps) {
- if (key in oldProps && (oldProps[key] === newProps[key] ||
- (equalityFuncs[key] && equalityFuncs[key](oldProps[key], newProps[key])))) {
- // equal to old? use old prop
- comboProps[key] = oldProps[key];
- }
- else {
- comboProps[key] = newProps[key];
- anyChanges = true;
- }
- }
- for (var key in oldProps) {
- if (!(key in newProps)) {
- anyChanges = true;
- break;
- }
- }
- return { anyChanges: anyChanges, comboProps: comboProps };
- }
-
- /*
- PURPOSES:
- - hook up to fg, fill, and mirror renderers
- - interface for dragging and hits
- */
- var DateComponent = /** @class */ (function (_super) {
- __extends(DateComponent, _super);
- function DateComponent(el) {
- var _this = _super.call(this) || this;
- _this.el = el;
- return _this;
- }
- DateComponent.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- removeElement(this.el);
- };
- // Hit System
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.buildPositionCaches = function () {
- };
- DateComponent.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
- return null; // this should be abstract
- };
- // Validation
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.isInteractionValid = function (interaction) {
- var calendar = this.context.calendar;
- var dateProfile = this.props.dateProfile; // HACK
- var instances = interaction.mutatedEvents.instances;
- if (dateProfile) { // HACK for DayTile
- for (var instanceId in instances) {
- if (!rangeContainsRange(dateProfile.validRange, instances[instanceId].range)) {
- return false;
- }
- }
- }
- return isInteractionValid(interaction, calendar);
- };
- DateComponent.prototype.isDateSelectionValid = function (selection) {
- var calendar = this.context.calendar;
- var dateProfile = this.props.dateProfile; // HACK
- if (dateProfile && // HACK for DayTile
- !rangeContainsRange(dateProfile.validRange, selection.range)) {
- return false;
- }
- return isDateSelectionValid(selection, calendar);
- };
- // Pointer Interaction Utils
- // -----------------------------------------------------------------------------------------------------------------
- DateComponent.prototype.isValidSegDownEl = function (el) {
- return !this.props.eventDrag && // HACK
- !this.props.eventResize && // HACK
- !elementClosest(el, '.fc-mirror') &&
- (this.isPopover() || !this.isInPopover(el));
- // ^above line ensures we don't detect a seg interaction within a nested component.
- // it's a HACK because it only supports a popover as the nested component.
- };
- DateComponent.prototype.isValidDateDownEl = function (el) {
- var segEl = elementClosest(el, this.fgSegSelector);
- return (!segEl || segEl.classList.contains('fc-mirror')) &&
- !elementClosest(el, '.fc-more') && // a "more.." link
- !elementClosest(el, 'a[data-goto]') && // a clickable nav link
- !this.isInPopover(el);
- };
- DateComponent.prototype.isPopover = function () {
- return this.el.classList.contains('fc-popover');
- };
- DateComponent.prototype.isInPopover = function (el) {
- return Boolean(elementClosest(el, '.fc-popover'));
- };
- return DateComponent;
- }(Component));
- DateComponent.prototype.fgSegSelector = '.fc-event-container > *';
- DateComponent.prototype.bgSegSelector = '.fc-bgevent:not(.fc-nonbusiness)';
-
- var uid$1 = 0;
- function createPlugin(input) {
- return {
- id: String(uid$1++),
- deps: input.deps || [],
- reducers: input.reducers || [],
- eventDefParsers: input.eventDefParsers || [],
- isDraggableTransformers: input.isDraggableTransformers || [],
- eventDragMutationMassagers: input.eventDragMutationMassagers || [],
- eventDefMutationAppliers: input.eventDefMutationAppliers || [],
- dateSelectionTransformers: input.dateSelectionTransformers || [],
- datePointTransforms: input.datePointTransforms || [],
- dateSpanTransforms: input.dateSpanTransforms || [],
- views: input.views || {},
- viewPropsTransformers: input.viewPropsTransformers || [],
- isPropsValid: input.isPropsValid || null,
- externalDefTransforms: input.externalDefTransforms || [],
- eventResizeJoinTransforms: input.eventResizeJoinTransforms || [],
- viewContainerModifiers: input.viewContainerModifiers || [],
- eventDropTransformers: input.eventDropTransformers || [],
- componentInteractions: input.componentInteractions || [],
- calendarInteractions: input.calendarInteractions || [],
- themeClasses: input.themeClasses || {},
- eventSourceDefs: input.eventSourceDefs || [],
- cmdFormatter: input.cmdFormatter,
- recurringTypes: input.recurringTypes || [],
- namedTimeZonedImpl: input.namedTimeZonedImpl,
- defaultView: input.defaultView || '',
- elementDraggingImpl: input.elementDraggingImpl,
- optionChangeHandlers: input.optionChangeHandlers || {}
- };
- }
- var PluginSystem = /** @class */ (function () {
- function PluginSystem() {
- this.hooks = {
- reducers: [],
- eventDefParsers: [],
- isDraggableTransformers: [],
- eventDragMutationMassagers: [],
- eventDefMutationAppliers: [],
- dateSelectionTransformers: [],
- datePointTransforms: [],
- dateSpanTransforms: [],
- views: {},
- viewPropsTransformers: [],
- isPropsValid: null,
- externalDefTransforms: [],
- eventResizeJoinTransforms: [],
- viewContainerModifiers: [],
- eventDropTransformers: [],
- componentInteractions: [],
- calendarInteractions: [],
- themeClasses: {},
- eventSourceDefs: [],
- cmdFormatter: null,
- recurringTypes: [],
- namedTimeZonedImpl: null,
- defaultView: '',
- elementDraggingImpl: null,
- optionChangeHandlers: {}
- };
- this.addedHash = {};
- }
- PluginSystem.prototype.add = function (plugin) {
- if (!this.addedHash[plugin.id]) {
- this.addedHash[plugin.id] = true;
- for (var _i = 0, _a = plugin.deps; _i < _a.length; _i++) {
- var dep = _a[_i];
- this.add(dep);
- }
- this.hooks = combineHooks(this.hooks, plugin);
- }
- };
- return PluginSystem;
- }());
- function combineHooks(hooks0, hooks1) {
- return {
- reducers: hooks0.reducers.concat(hooks1.reducers),
- eventDefParsers: hooks0.eventDefParsers.concat(hooks1.eventDefParsers),
- isDraggableTransformers: hooks0.isDraggableTransformers.concat(hooks1.isDraggableTransformers),
- eventDragMutationMassagers: hooks0.eventDragMutationMassagers.concat(hooks1.eventDragMutationMassagers),
- eventDefMutationAppliers: hooks0.eventDefMutationAppliers.concat(hooks1.eventDefMutationAppliers),
- dateSelectionTransformers: hooks0.dateSelectionTransformers.concat(hooks1.dateSelectionTransformers),
- datePointTransforms: hooks0.datePointTransforms.concat(hooks1.datePointTransforms),
- dateSpanTransforms: hooks0.dateSpanTransforms.concat(hooks1.dateSpanTransforms),
- views: __assign({}, hooks0.views, hooks1.views),
- viewPropsTransformers: hooks0.viewPropsTransformers.concat(hooks1.viewPropsTransformers),
- isPropsValid: hooks1.isPropsValid || hooks0.isPropsValid,
- externalDefTransforms: hooks0.externalDefTransforms.concat(hooks1.externalDefTransforms),
- eventResizeJoinTransforms: hooks0.eventResizeJoinTransforms.concat(hooks1.eventResizeJoinTransforms),
- viewContainerModifiers: hooks0.viewContainerModifiers.concat(hooks1.viewContainerModifiers),
- eventDropTransformers: hooks0.eventDropTransformers.concat(hooks1.eventDropTransformers),
- calendarInteractions: hooks0.calendarInteractions.concat(hooks1.calendarInteractions),
- componentInteractions: hooks0.componentInteractions.concat(hooks1.componentInteractions),
- themeClasses: __assign({}, hooks0.themeClasses, hooks1.themeClasses),
- eventSourceDefs: hooks0.eventSourceDefs.concat(hooks1.eventSourceDefs),
- cmdFormatter: hooks1.cmdFormatter || hooks0.cmdFormatter,
- recurringTypes: hooks0.recurringTypes.concat(hooks1.recurringTypes),
- namedTimeZonedImpl: hooks1.namedTimeZonedImpl || hooks0.namedTimeZonedImpl,
- defaultView: hooks0.defaultView || hooks1.defaultView,
- elementDraggingImpl: hooks0.elementDraggingImpl || hooks1.elementDraggingImpl,
- optionChangeHandlers: __assign({}, hooks0.optionChangeHandlers, hooks1.optionChangeHandlers)
- };
- }
-
- var eventSourceDef = {
- ignoreRange: true,
- parseMeta: function (raw) {
- if (Array.isArray(raw)) { // short form
- return raw;
- }
- else if (Array.isArray(raw.events)) {
- return raw.events;
- }
- return null;
- },
- fetch: function (arg, success) {
- success({
- rawEvents: arg.eventSource.meta
- });
- }
- };
- var ArrayEventSourcePlugin = createPlugin({
- eventSourceDefs: [eventSourceDef]
- });
-
- var eventSourceDef$1 = {
- parseMeta: function (raw) {
- if (typeof raw === 'function') { // short form
- return raw;
- }
- else if (typeof raw.events === 'function') {
- return raw.events;
- }
- return null;
- },
- fetch: function (arg, success, failure) {
- var dateEnv = arg.calendar.dateEnv;
- var func = arg.eventSource.meta;
- unpromisify(func.bind(null, {
- start: dateEnv.toDate(arg.range.start),
- end: dateEnv.toDate(arg.range.end),
- startStr: dateEnv.formatIso(arg.range.start),
- endStr: dateEnv.formatIso(arg.range.end),
- timeZone: dateEnv.timeZone
- }), function (rawEvents) {
- success({ rawEvents: rawEvents }); // needs an object response
- }, failure // send errorObj directly to failure callback
- );
- }
- };
- var FuncEventSourcePlugin = createPlugin({
- eventSourceDefs: [eventSourceDef$1]
- });
-
- function requestJson(method, url, params, successCallback, failureCallback) {
- method = method.toUpperCase();
- var body = null;
- if (method === 'GET') {
- url = injectQueryStringParams(url, params);
- }
- else {
- body = encodeParams(params);
- }
- var xhr = new XMLHttpRequest();
- xhr.open(method, url, true);
- if (method !== 'GET') {
- xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
- }
- xhr.onload = function () {
- if (xhr.status >= 200 && xhr.status < 400) {
- try {
- var res = JSON.parse(xhr.responseText);
- successCallback(res, xhr);
- }
- catch (err) {
- failureCallback('Failure parsing JSON', xhr);
- }
- }
- else {
- failureCallback('Request failed', xhr);
- }
- };
- xhr.onerror = function () {
- failureCallback('Request failed', xhr);
- };
- xhr.send(body);
- }
- function injectQueryStringParams(url, params) {
- return url +
- (url.indexOf('?') === -1 ? '?' : '&') +
- encodeParams(params);
- }
- function encodeParams(params) {
- var parts = [];
- for (var key in params) {
- parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));
- }
- return parts.join('&');
- }
-
- var eventSourceDef$2 = {
- parseMeta: function (raw) {
- if (typeof raw === 'string') { // short form
- raw = { url: raw };
- }
- else if (!raw || typeof raw !== 'object' || !raw.url) {
- return null;
- }
- return {
- url: raw.url,
- method: (raw.method || 'GET').toUpperCase(),
- extraParams: raw.extraParams,
- startParam: raw.startParam,
- endParam: raw.endParam,
- timeZoneParam: raw.timeZoneParam
- };
- },
- fetch: function (arg, success, failure) {
- var meta = arg.eventSource.meta;
- var requestParams = buildRequestParams(meta, arg.range, arg.calendar);
- requestJson(meta.method, meta.url, requestParams, function (rawEvents, xhr) {
- success({ rawEvents: rawEvents, xhr: xhr });
- }, function (errorMessage, xhr) {
- failure({ message: errorMessage, xhr: xhr });
- });
- }
- };
- var JsonFeedEventSourcePlugin = createPlugin({
- eventSourceDefs: [eventSourceDef$2]
- });
- function buildRequestParams(meta, range, calendar) {
- var dateEnv = calendar.dateEnv;
- var startParam;
- var endParam;
- var timeZoneParam;
- var customRequestParams;
- var params = {};
- startParam = meta.startParam;
- if (startParam == null) {
- startParam = calendar.opt('startParam');
- }
- endParam = meta.endParam;
- if (endParam == null) {
- endParam = calendar.opt('endParam');
- }
- timeZoneParam = meta.timeZoneParam;
- if (timeZoneParam == null) {
- timeZoneParam = calendar.opt('timeZoneParam');
- }
- // retrieve any outbound GET/POST data from the options
- if (typeof meta.extraParams === 'function') {
- // supplied as a function that returns a key/value object
- customRequestParams = meta.extraParams();
- }
- else {
- // probably supplied as a straight key/value object
- customRequestParams = meta.extraParams || {};
- }
- __assign(params, customRequestParams);
- params[startParam] = dateEnv.formatIso(range.start);
- params[endParam] = dateEnv.formatIso(range.end);
- if (dateEnv.timeZone !== 'local') {
- params[timeZoneParam] = dateEnv.timeZone;
- }
- return params;
- }
-
- var recurring = {
- parse: function (rawEvent, leftoverProps, dateEnv) {
- var createMarker = dateEnv.createMarker.bind(dateEnv);
- var processors = {
- daysOfWeek: null,
- startTime: createDuration,
- endTime: createDuration,
- startRecur: createMarker,
- endRecur: createMarker
- };
- var props = refineProps(rawEvent, processors, {}, leftoverProps);
- var anyValid = false;
- for (var propName in props) {
- if (props[propName] != null) {
- anyValid = true;
- break;
- }
- }
- if (anyValid) {
- var duration = null;
- if ('duration' in leftoverProps) {
- duration = createDuration(leftoverProps.duration);
- delete leftoverProps.duration;
- }
- if (!duration && props.startTime && props.endTime) {
- duration = subtractDurations(props.endTime, props.startTime);
- }
- return {
- allDayGuess: Boolean(!props.startTime && !props.endTime),
- duration: duration,
- typeData: props // doesn't need endTime anymore but oh well
- };
- }
- return null;
- },
- expand: function (typeData, framingRange, dateEnv) {
- var clippedFramingRange = intersectRanges(framingRange, { start: typeData.startRecur, end: typeData.endRecur });
- if (clippedFramingRange) {
- return expandRanges(typeData.daysOfWeek, typeData.startTime, clippedFramingRange, dateEnv);
- }
- else {
- return [];
- }
- }
- };
- var SimpleRecurrencePlugin = createPlugin({
- recurringTypes: [recurring]
- });
- function expandRanges(daysOfWeek, startTime, framingRange, dateEnv) {
- var dowHash = daysOfWeek ? arrayToHash(daysOfWeek) : null;
- var dayMarker = startOfDay(framingRange.start);
- var endMarker = framingRange.end;
- var instanceStarts = [];
- while (dayMarker < endMarker) {
- var instanceStart
- // if everyday, or this particular day-of-week
- = void 0;
- // if everyday, or this particular day-of-week
- if (!dowHash || dowHash[dayMarker.getUTCDay()]) {
- if (startTime) {
- instanceStart = dateEnv.add(dayMarker, startTime);
- }
- else {
- instanceStart = dayMarker;
- }
- instanceStarts.push(instanceStart);
- }
- dayMarker = addDays(dayMarker, 1);
- }
- return instanceStarts;
- }
-
- var DefaultOptionChangeHandlers = createPlugin({
- optionChangeHandlers: {
- events: function (events, calendar, deepEqual) {
- handleEventSources([events], calendar, deepEqual);
- },
- eventSources: handleEventSources,
- plugins: handlePlugins
- }
- });
- function handleEventSources(inputs, calendar, deepEqual) {
- var unfoundSources = hashValuesToArray(calendar.state.eventSources);
- var newInputs = [];
- for (var _i = 0, inputs_1 = inputs; _i < inputs_1.length; _i++) {
- var input = inputs_1[_i];
- var inputFound = false;
- for (var i = 0; i < unfoundSources.length; i++) {
- if (deepEqual(unfoundSources[i]._raw, input)) {
- unfoundSources.splice(i, 1); // delete
- inputFound = true;
- break;
- }
- }
- if (!inputFound) {
- newInputs.push(input);
- }
- }
- for (var _a = 0, unfoundSources_1 = unfoundSources; _a < unfoundSources_1.length; _a++) {
- var unfoundSource = unfoundSources_1[_a];
- calendar.dispatch({
- type: 'REMOVE_EVENT_SOURCE',
- sourceId: unfoundSource.sourceId
- });
- }
- for (var _b = 0, newInputs_1 = newInputs; _b < newInputs_1.length; _b++) {
- var newInput = newInputs_1[_b];
- calendar.addEventSource(newInput);
- }
- }
- // shortcoming: won't remove plugins
- function handlePlugins(inputs, calendar) {
- calendar.addPluginInputs(inputs); // will gracefully handle duplicates
- }
-
- var config = {}; // TODO: make these options
- var globalDefaults = {
- defaultRangeSeparator: ' - ',
- titleRangeSeparator: ' \u2013 ',
- defaultTimedEventDuration: '01:00:00',
- defaultAllDayEventDuration: { day: 1 },
- forceEventDuration: false,
- nextDayThreshold: '00:00:00',
- // display
- columnHeader: true,
- defaultView: '',
- aspectRatio: 1.35,
- header: {
- left: 'title',
- center: '',
- right: 'today prev,next'
- },
- weekends: true,
- weekNumbers: false,
- weekNumberCalculation: 'local',
- editable: false,
- // nowIndicator: false,
- scrollTime: '06:00:00',
- minTime: '00:00:00',
- maxTime: '24:00:00',
- showNonCurrentDates: true,
- // event ajax
- lazyFetching: true,
- startParam: 'start',
- endParam: 'end',
- timeZoneParam: 'timeZone',
- timeZone: 'local',
- // allDayDefault: undefined,
- // locale
- locales: [],
- locale: '',
- // dir: will get this from the default locale
- // buttonIcons: null,
- // allows setting a min-height to the event segment to prevent short events overlapping each other
- timeGridEventMinHeight: 0,
- themeSystem: 'standard',
- // eventResizableFromStart: false,
- dragRevertDuration: 500,
- dragScroll: true,
- allDayMaintainDuration: false,
- // selectable: false,
- unselectAuto: true,
- // selectMinDistance: 0,
- dropAccept: '*',
- eventOrder: 'start,-duration,allDay,title',
- // ^ if start tie, longer events go before shorter. final tie-breaker is title text
- // rerenderDelay: null,
- eventLimit: false,
- eventLimitClick: 'popover',
- dayPopoverFormat: { month: 'long', day: 'numeric', year: 'numeric' },
- handleWindowResize: true,
- windowResizeDelay: 100,
- longPressDelay: 1000,
- eventDragMinDistance: 5 // only applies to mouse
- };
- var rtlDefaults = {
- header: {
- left: 'next,prev today',
- center: '',
- right: 'title'
- },
- buttonIcons: {
- // TODO: make RTL support the responibility of the theme
- prev: 'fc-icon-chevron-right',
- next: 'fc-icon-chevron-left',
- prevYear: 'fc-icon-chevrons-right',
- nextYear: 'fc-icon-chevrons-left'
- }
- };
- var complexOptions = [
- 'header',
- 'footer',
- 'buttonText',
- 'buttonIcons'
- ];
- // Merges an array of option objects into a single object
- function mergeOptions(optionObjs) {
- return mergeProps(optionObjs, complexOptions);
- }
- // TODO: move this stuff to a "plugin"-related file...
- var INTERNAL_PLUGINS = [
- ArrayEventSourcePlugin,
- FuncEventSourcePlugin,
- JsonFeedEventSourcePlugin,
- SimpleRecurrencePlugin,
- DefaultOptionChangeHandlers
- ];
- function refinePluginDefs(pluginInputs) {
- var plugins = [];
- for (var _i = 0, pluginInputs_1 = pluginInputs; _i < pluginInputs_1.length; _i++) {
- var pluginInput = pluginInputs_1[_i];
- if (typeof pluginInput === 'string') {
- var globalName = 'FullCalendar' + capitaliseFirstLetter(pluginInput);
- if (!window[globalName]) {
- console.warn('Plugin file not loaded for ' + pluginInput);
- }
- else {
- plugins.push(window[globalName].default); // is an ES6 module
- }
- }
- else {
- plugins.push(pluginInput);
- }
- }
- return INTERNAL_PLUGINS.concat(plugins);
- }
-
- var RAW_EN_LOCALE = {
- code: 'en',
- week: {
- dow: 0,
- doy: 4 // 4 days need to be within the year to be considered the first week
- },
- dir: 'ltr',
- buttonText: {
- prev: 'prev',
- next: 'next',
- prevYear: 'prev year',
- nextYear: 'next year',
- year: 'year',
- today: 'today',
- month: 'month',
- week: 'week',
- day: 'day',
- list: 'list'
- },
- weekLabel: 'W',
- allDayText: 'all-day',
- eventLimitText: 'more',
- noEventsMessage: 'No events to display'
- };
- function parseRawLocales(explicitRawLocales) {
- var defaultCode = explicitRawLocales.length > 0 ? explicitRawLocales[0].code : 'en';
- var globalArray = window['FullCalendarLocalesAll'] || []; // from locales-all.js
- var globalObject = window['FullCalendarLocales'] || {}; // from locales/*.js. keys are meaningless
- var allRawLocales = globalArray.concat(// globalArray is low prio
- hashValuesToArray(globalObject), // medium prio
- explicitRawLocales // highest prio
- );
- var rawLocaleMap = {
- en: RAW_EN_LOCALE // necessary?
- };
- for (var _i = 0, allRawLocales_1 = allRawLocales; _i < allRawLocales_1.length; _i++) {
- var rawLocale = allRawLocales_1[_i];
- rawLocaleMap[rawLocale.code] = rawLocale;
- }
- return {
- map: rawLocaleMap,
- defaultCode: defaultCode
- };
- }
- function buildLocale(inputSingular, available) {
- if (typeof inputSingular === 'object' && !Array.isArray(inputSingular)) {
- return parseLocale(inputSingular.code, [inputSingular.code], inputSingular);
- }
- else {
- return queryLocale(inputSingular, available);
- }
- }
- function queryLocale(codeArg, available) {
- var codes = [].concat(codeArg || []); // will convert to array
- var raw = queryRawLocale(codes, available) || RAW_EN_LOCALE;
- return parseLocale(codeArg, codes, raw);
- }
- function queryRawLocale(codes, available) {
- for (var i = 0; i < codes.length; i++) {
- var parts = codes[i].toLocaleLowerCase().split('-');
- for (var j = parts.length; j > 0; j--) {
- var simpleId = parts.slice(0, j).join('-');
- if (available[simpleId]) {
- return available[simpleId];
- }
- }
- }
- return null;
- }
- function parseLocale(codeArg, codes, raw) {
- var merged = mergeProps([RAW_EN_LOCALE, raw], ['buttonText']);
- delete merged.code; // don't want this part of the options
- var week = merged.week;
- delete merged.week;
- return {
- codeArg: codeArg,
- codes: codes,
- week: week,
- simpleNumberFormat: new Intl.NumberFormat(codeArg),
- options: merged
- };
- }
-
- var OptionsManager = /** @class */ (function () {
- function OptionsManager(overrides) {
- this.overrides = __assign({}, overrides); // make a copy
- this.dynamicOverrides = {};
- this.compute();
- }
- OptionsManager.prototype.mutate = function (updates, removals, isDynamic) {
- if (!Object.keys(updates).length && !removals.length) {
- return;
- }
- var overrideHash = isDynamic ? this.dynamicOverrides : this.overrides;
- __assign(overrideHash, updates);
- for (var _i = 0, removals_1 = removals; _i < removals_1.length; _i++) {
- var propName = removals_1[_i];
- delete overrideHash[propName];
- }
- this.compute();
- };
- // Computes the flattened options hash for the calendar and assigns to `this.options`.
- // Assumes this.overrides and this.dynamicOverrides have already been initialized.
- OptionsManager.prototype.compute = function () {
- // TODO: not a very efficient system
- var locales = firstDefined(// explicit locale option given?
- this.dynamicOverrides.locales, this.overrides.locales, globalDefaults.locales);
- var locale = firstDefined(// explicit locales option given?
- this.dynamicOverrides.locale, this.overrides.locale, globalDefaults.locale);
- var available = parseRawLocales(locales);
- var localeDefaults = buildLocale(locale || available.defaultCode, available.map).options;
- var dir = firstDefined(// based on options computed so far, is direction RTL?
- this.dynamicOverrides.dir, this.overrides.dir, localeDefaults.dir);
- var dirDefaults = dir === 'rtl' ? rtlDefaults : {};
- this.dirDefaults = dirDefaults;
- this.localeDefaults = localeDefaults;
- this.computed = mergeOptions([
- globalDefaults,
- dirDefaults,
- localeDefaults,
- this.overrides,
- this.dynamicOverrides
- ]);
- };
- return OptionsManager;
- }());
-
- var calendarSystemClassMap = {};
- function registerCalendarSystem(name, theClass) {
- calendarSystemClassMap[name] = theClass;
- }
- function createCalendarSystem(name) {
- return new calendarSystemClassMap[name]();
- }
- var GregorianCalendarSystem = /** @class */ (function () {
- function GregorianCalendarSystem() {
- }
- GregorianCalendarSystem.prototype.getMarkerYear = function (d) {
- return d.getUTCFullYear();
- };
- GregorianCalendarSystem.prototype.getMarkerMonth = function (d) {
- return d.getUTCMonth();
- };
- GregorianCalendarSystem.prototype.getMarkerDay = function (d) {
- return d.getUTCDate();
- };
- GregorianCalendarSystem.prototype.arrayToMarker = function (arr) {
- return arrayToUtcDate(arr);
- };
- GregorianCalendarSystem.prototype.markerToArray = function (marker) {
- return dateToUtcArray(marker);
- };
- return GregorianCalendarSystem;
- }());
- registerCalendarSystem('gregory', GregorianCalendarSystem);
-
- var ISO_RE = /^\s*(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;
- function parse(str) {
- var m = ISO_RE.exec(str);
- if (m) {
- var marker = new Date(Date.UTC(Number(m[1]), m[3] ? Number(m[3]) - 1 : 0, Number(m[5] || 1), Number(m[7] || 0), Number(m[8] || 0), Number(m[10] || 0), m[12] ? Number('0.' + m[12]) * 1000 : 0));
- if (isValidDate(marker)) {
- var timeZoneOffset = null;
- if (m[13]) {
- timeZoneOffset = (m[15] === '-' ? -1 : 1) * (Number(m[16] || 0) * 60 +
- Number(m[18] || 0));
- }
- return {
- marker: marker,
- isTimeUnspecified: !m[6],
- timeZoneOffset: timeZoneOffset
- };
- }
- }
- return null;
- }
-
- var DateEnv = /** @class */ (function () {
- function DateEnv(settings) {
- var timeZone = this.timeZone = settings.timeZone;
- var isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC';
- if (settings.namedTimeZoneImpl && isNamedTimeZone) {
- this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone);
- }
- this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl);
- this.calendarSystem = createCalendarSystem(settings.calendarSystem);
- this.locale = settings.locale;
- this.weekDow = settings.locale.week.dow;
- this.weekDoy = settings.locale.week.doy;
- if (settings.weekNumberCalculation === 'ISO') {
- this.weekDow = 1;
- this.weekDoy = 4;
- }
- if (typeof settings.firstDay === 'number') {
- this.weekDow = settings.firstDay;
- }
- if (typeof settings.weekNumberCalculation === 'function') {
- this.weekNumberFunc = settings.weekNumberCalculation;
- }
- this.weekLabel = settings.weekLabel != null ? settings.weekLabel : settings.locale.options.weekLabel;
- this.cmdFormatter = settings.cmdFormatter;
- }
- // Creating / Parsing
- DateEnv.prototype.createMarker = function (input) {
- var meta = this.createMarkerMeta(input);
- if (meta === null) {
- return null;
- }
- return meta.marker;
- };
- DateEnv.prototype.createNowMarker = function () {
- if (this.canComputeOffset) {
- return this.timestampToMarker(new Date().valueOf());
- }
- else {
- // if we can't compute the current date val for a timezone,
- // better to give the current local date vals than UTC
- return arrayToUtcDate(dateToLocalArray(new Date()));
- }
- };
- DateEnv.prototype.createMarkerMeta = function (input) {
- if (typeof input === 'string') {
- return this.parse(input);
- }
- var marker = null;
- if (typeof input === 'number') {
- marker = this.timestampToMarker(input);
- }
- else if (input instanceof Date) {
- input = input.valueOf();
- if (!isNaN(input)) {
- marker = this.timestampToMarker(input);
- }
- }
- else if (Array.isArray(input)) {
- marker = arrayToUtcDate(input);
- }
- if (marker === null || !isValidDate(marker)) {
- return null;
- }
- return { marker: marker, isTimeUnspecified: false, forcedTzo: null };
- };
- DateEnv.prototype.parse = function (s) {
- var parts = parse(s);
- if (parts === null) {
- return null;
- }
- var marker = parts.marker;
- var forcedTzo = null;
- if (parts.timeZoneOffset !== null) {
- if (this.canComputeOffset) {
- marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000);
- }
- else {
- forcedTzo = parts.timeZoneOffset;
- }
- }
- return { marker: marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo: forcedTzo };
- };
- // Accessors
- DateEnv.prototype.getYear = function (marker) {
- return this.calendarSystem.getMarkerYear(marker);
- };
- DateEnv.prototype.getMonth = function (marker) {
- return this.calendarSystem.getMarkerMonth(marker);
- };
- // Adding / Subtracting
- DateEnv.prototype.add = function (marker, dur) {
- var a = this.calendarSystem.markerToArray(marker);
- a[0] += dur.years;
- a[1] += dur.months;
- a[2] += dur.days;
- a[6] += dur.milliseconds;
- return this.calendarSystem.arrayToMarker(a);
- };
- DateEnv.prototype.subtract = function (marker, dur) {
- var a = this.calendarSystem.markerToArray(marker);
- a[0] -= dur.years;
- a[1] -= dur.months;
- a[2] -= dur.days;
- a[6] -= dur.milliseconds;
- return this.calendarSystem.arrayToMarker(a);
- };
- DateEnv.prototype.addYears = function (marker, n) {
- var a = this.calendarSystem.markerToArray(marker);
- a[0] += n;
- return this.calendarSystem.arrayToMarker(a);
- };
- DateEnv.prototype.addMonths = function (marker, n) {
- var a = this.calendarSystem.markerToArray(marker);
- a[1] += n;
- return this.calendarSystem.arrayToMarker(a);
- };
- // Diffing Whole Units
- DateEnv.prototype.diffWholeYears = function (m0, m1) {
- var calendarSystem = this.calendarSystem;
- if (timeAsMs(m0) === timeAsMs(m1) &&
- calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&
- calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)) {
- return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0);
- }
- return null;
- };
- DateEnv.prototype.diffWholeMonths = function (m0, m1) {
- var calendarSystem = this.calendarSystem;
- if (timeAsMs(m0) === timeAsMs(m1) &&
- calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)) {
- return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +
- (calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12;
- }
- return null;
- };
- // Range / Duration
- DateEnv.prototype.greatestWholeUnit = function (m0, m1) {
- var n = this.diffWholeYears(m0, m1);
- if (n !== null) {
- return { unit: 'year', value: n };
- }
- n = this.diffWholeMonths(m0, m1);
- if (n !== null) {
- return { unit: 'month', value: n };
- }
- n = diffWholeWeeks(m0, m1);
- if (n !== null) {
- return { unit: 'week', value: n };
- }
- n = diffWholeDays(m0, m1);
- if (n !== null) {
- return { unit: 'day', value: n };
- }
- n = diffHours(m0, m1);
- if (isInt(n)) {
- return { unit: 'hour', value: n };
- }
- n = diffMinutes(m0, m1);
- if (isInt(n)) {
- return { unit: 'minute', value: n };
- }
- n = diffSeconds(m0, m1);
- if (isInt(n)) {
- return { unit: 'second', value: n };
- }
- return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() };
- };
- DateEnv.prototype.countDurationsBetween = function (m0, m1, d) {
- // TODO: can use greatestWholeUnit
- var diff;
- if (d.years) {
- diff = this.diffWholeYears(m0, m1);
- if (diff !== null) {
- return diff / asRoughYears(d);
- }
- }
- if (d.months) {
- diff = this.diffWholeMonths(m0, m1);
- if (diff !== null) {
- return diff / asRoughMonths(d);
- }
- }
- if (d.days) {
- diff = diffWholeDays(m0, m1);
- if (diff !== null) {
- return diff / asRoughDays(d);
- }
- }
- return (m1.valueOf() - m0.valueOf()) / asRoughMs(d);
- };
- // Start-Of
- DateEnv.prototype.startOf = function (m, unit) {
- if (unit === 'year') {
- return this.startOfYear(m);
- }
- else if (unit === 'month') {
- return this.startOfMonth(m);
- }
- else if (unit === 'week') {
- return this.startOfWeek(m);
- }
- else if (unit === 'day') {
- return startOfDay(m);
- }
- else if (unit === 'hour') {
- return startOfHour(m);
- }
- else if (unit === 'minute') {
- return startOfMinute(m);
- }
- else if (unit === 'second') {
- return startOfSecond(m);
- }
- };
- DateEnv.prototype.startOfYear = function (m) {
- return this.calendarSystem.arrayToMarker([
- this.calendarSystem.getMarkerYear(m)
- ]);
- };
- DateEnv.prototype.startOfMonth = function (m) {
- return this.calendarSystem.arrayToMarker([
- this.calendarSystem.getMarkerYear(m),
- this.calendarSystem.getMarkerMonth(m)
- ]);
- };
- DateEnv.prototype.startOfWeek = function (m) {
- return this.calendarSystem.arrayToMarker([
- this.calendarSystem.getMarkerYear(m),
- this.calendarSystem.getMarkerMonth(m),
- m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7)
- ]);
- };
- // Week Number
- DateEnv.prototype.computeWeekNumber = function (marker) {
- if (this.weekNumberFunc) {
- return this.weekNumberFunc(this.toDate(marker));
- }
- else {
- return weekOfYear(marker, this.weekDow, this.weekDoy);
- }
- };
- // TODO: choke on timeZoneName: long
- DateEnv.prototype.format = function (marker, formatter, dateOptions) {
- if (dateOptions === void 0) { dateOptions = {}; }
- return formatter.format({
- marker: marker,
- timeZoneOffset: dateOptions.forcedTzo != null ?
- dateOptions.forcedTzo :
- this.offsetForMarker(marker)
- }, this);
- };
- DateEnv.prototype.formatRange = function (start, end, formatter, dateOptions) {
- if (dateOptions === void 0) { dateOptions = {}; }
- if (dateOptions.isEndExclusive) {
- end = addMs(end, -1);
- }
- return formatter.formatRange({
- marker: start,
- timeZoneOffset: dateOptions.forcedStartTzo != null ?
- dateOptions.forcedStartTzo :
- this.offsetForMarker(start)
- }, {
- marker: end,
- timeZoneOffset: dateOptions.forcedEndTzo != null ?
- dateOptions.forcedEndTzo :
- this.offsetForMarker(end)
- }, this);
- };
- DateEnv.prototype.formatIso = function (marker, extraOptions) {
- if (extraOptions === void 0) { extraOptions = {}; }
- var timeZoneOffset = null;
- if (!extraOptions.omitTimeZoneOffset) {
- if (extraOptions.forcedTzo != null) {
- timeZoneOffset = extraOptions.forcedTzo;
- }
- else {
- timeZoneOffset = this.offsetForMarker(marker);
- }
- }
- return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime);
- };
- // TimeZone
- DateEnv.prototype.timestampToMarker = function (ms) {
- if (this.timeZone === 'local') {
- return arrayToUtcDate(dateToLocalArray(new Date(ms)));
- }
- else if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {
- return new Date(ms);
- }
- else {
- return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms));
- }
- };
- DateEnv.prototype.offsetForMarker = function (m) {
- if (this.timeZone === 'local') {
- return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset(); // convert "inverse" offset to "normal" offset
- }
- else if (this.timeZone === 'UTC') {
- return 0;
- }
- else if (this.namedTimeZoneImpl) {
- return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m));
- }
- return null;
- };
- // Conversion
- DateEnv.prototype.toDate = function (m, forcedTzo) {
- if (this.timeZone === 'local') {
- return arrayToLocalDate(dateToUtcArray(m));
- }
- else if (this.timeZone === 'UTC') {
- return new Date(m.valueOf()); // make sure it's a copy
- }
- else if (!this.namedTimeZoneImpl) {
- return new Date(m.valueOf() - (forcedTzo || 0));
- }
- else {
- return new Date(m.valueOf() -
- this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60 // convert minutes -> ms
- );
- }
- };
- return DateEnv;
- }());
-
- var SIMPLE_SOURCE_PROPS = {
- id: String,
- allDayDefault: Boolean,
- eventDataTransform: Function,
- success: Function,
- failure: Function
- };
- var uid$2 = 0;
- function doesSourceNeedRange(eventSource, calendar) {
- var defs = calendar.pluginSystem.hooks.eventSourceDefs;
- return !defs[eventSource.sourceDefId].ignoreRange;
- }
- function parseEventSource(raw, calendar) {
- var defs = calendar.pluginSystem.hooks.eventSourceDefs;
- for (var i = defs.length - 1; i >= 0; i--) { // later-added plugins take precedence
- var def = defs[i];
- var meta = def.parseMeta(raw);
- if (meta) {
- var res = parseEventSourceProps(typeof raw === 'object' ? raw : {}, meta, i, calendar);
- res._raw = raw;
- return res;
- }
- }
- return null;
- }
- function parseEventSourceProps(raw, meta, sourceDefId, calendar) {
- var leftovers0 = {};
- var props = refineProps(raw, SIMPLE_SOURCE_PROPS, {}, leftovers0);
- var leftovers1 = {};
- var ui = processUnscopedUiProps(leftovers0, calendar, leftovers1);
- props.isFetching = false;
- props.latestFetchId = '';
- props.fetchRange = null;
- props.publicId = String(raw.id || '');
- props.sourceId = String(uid$2++);
- props.sourceDefId = sourceDefId;
- props.meta = meta;
- props.ui = ui;
- props.extendedProps = leftovers1;
- return props;
- }
-
- function reduceEventSources (eventSources, action, dateProfile, calendar) {
- switch (action.type) {
- case 'ADD_EVENT_SOURCES': // already parsed
- return addSources(eventSources, action.sources, dateProfile ? dateProfile.activeRange : null, calendar);
- case 'REMOVE_EVENT_SOURCE':
- return removeSource(eventSources, action.sourceId);
- case 'PREV': // TODO: how do we track all actions that affect dateProfile :(
- case 'NEXT':
- case 'SET_DATE':
- case 'SET_VIEW_TYPE':
- if (dateProfile) {
- return fetchDirtySources(eventSources, dateProfile.activeRange, calendar);
- }
- else {
- return eventSources;
- }
- case 'FETCH_EVENT_SOURCES':
- case 'CHANGE_TIMEZONE':
- return fetchSourcesByIds(eventSources, action.sourceIds ?
- arrayToHash(action.sourceIds) :
- excludeStaticSources(eventSources, calendar), dateProfile ? dateProfile.activeRange : null, calendar);
- case 'RECEIVE_EVENTS':
- case 'RECEIVE_EVENT_ERROR':
- return receiveResponse(eventSources, action.sourceId, action.fetchId, action.fetchRange);
- case 'REMOVE_ALL_EVENT_SOURCES':
- return {};
- default:
- return eventSources;
- }
- }
- var uid$3 = 0;
- function addSources(eventSourceHash, sources, fetchRange, calendar) {
- var hash = {};
- for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {
- var source = sources_1[_i];
- hash[source.sourceId] = source;
- }
- if (fetchRange) {
- hash = fetchDirtySources(hash, fetchRange, calendar);
- }
- return __assign({}, eventSourceHash, hash);
- }
- function removeSource(eventSourceHash, sourceId) {
- return filterHash(eventSourceHash, function (eventSource) {
- return eventSource.sourceId !== sourceId;
- });
- }
- function fetchDirtySources(sourceHash, fetchRange, calendar) {
- return fetchSourcesByIds(sourceHash, filterHash(sourceHash, function (eventSource) {
- return isSourceDirty(eventSource, fetchRange, calendar);
- }), fetchRange, calendar);
- }
- function isSourceDirty(eventSource, fetchRange, calendar) {
- if (!doesSourceNeedRange(eventSource, calendar)) {
- return !eventSource.latestFetchId;
- }
- else {
- return !calendar.opt('lazyFetching') ||
- !eventSource.fetchRange ||
- eventSource.isFetching || // always cancel outdated in-progress fetches
- fetchRange.start < eventSource.fetchRange.start ||
- fetchRange.end > eventSource.fetchRange.end;
- }
- }
- function fetchSourcesByIds(prevSources, sourceIdHash, fetchRange, calendar) {
- var nextSources = {};
- for (var sourceId in prevSources) {
- var source = prevSources[sourceId];
- if (sourceIdHash[sourceId]) {
- nextSources[sourceId] = fetchSource(source, fetchRange, calendar);
- }
- else {
- nextSources[sourceId] = source;
- }
- }
- return nextSources;
- }
- function fetchSource(eventSource, fetchRange, calendar) {
- var sourceDef = calendar.pluginSystem.hooks.eventSourceDefs[eventSource.sourceDefId];
- var fetchId = String(uid$3++);
- sourceDef.fetch({
- eventSource: eventSource,
- calendar: calendar,
- range: fetchRange
- }, function (res) {
- var rawEvents = res.rawEvents;
- var calSuccess = calendar.opt('eventSourceSuccess');
- var calSuccessRes;
- var sourceSuccessRes;
- if (eventSource.success) {
- sourceSuccessRes = eventSource.success(rawEvents, res.xhr);
- }
- if (calSuccess) {
- calSuccessRes = calSuccess(rawEvents, res.xhr);
- }
- rawEvents = sourceSuccessRes || calSuccessRes || rawEvents;
- calendar.dispatch({
- type: 'RECEIVE_EVENTS',
- sourceId: eventSource.sourceId,
- fetchId: fetchId,
- fetchRange: fetchRange,
- rawEvents: rawEvents
- });
- }, function (error) {
- var callFailure = calendar.opt('eventSourceFailure');
- console.warn(error.message, error);
- if (eventSource.failure) {
- eventSource.failure(error);
- }
- if (callFailure) {
- callFailure(error);
- }
- calendar.dispatch({
- type: 'RECEIVE_EVENT_ERROR',
- sourceId: eventSource.sourceId,
- fetchId: fetchId,
- fetchRange: fetchRange,
- error: error
- });
- });
- return __assign({}, eventSource, { isFetching: true, latestFetchId: fetchId });
- }
- function receiveResponse(sourceHash, sourceId, fetchId, fetchRange) {
- var _a;
- var eventSource = sourceHash[sourceId];
- if (eventSource && // not already removed
- fetchId === eventSource.latestFetchId) {
- return __assign({}, sourceHash, (_a = {}, _a[sourceId] = __assign({}, eventSource, { isFetching: false, fetchRange: fetchRange // also serves as a marker that at least one fetch has completed
- }), _a));
- }
- return sourceHash;
- }
- function excludeStaticSources(eventSources, calendar) {
- return filterHash(eventSources, function (eventSource) {
- return doesSourceNeedRange(eventSource, calendar);
- });
- }
-
- var DateProfileGenerator = /** @class */ (function () {
- function DateProfileGenerator(viewSpec, calendar) {
- this.viewSpec = viewSpec;
- this.options = viewSpec.options;
- this.dateEnv = calendar.dateEnv;
- this.calendar = calendar;
- this.initHiddenDays();
- }
- /* Date Range Computation
- ------------------------------------------------------------------------------------------------------------------*/
- // Builds a structure with info about what the dates/ranges will be for the "prev" view.
- DateProfileGenerator.prototype.buildPrev = function (currentDateProfile, currentDate) {
- var dateEnv = this.dateEnv;
- var prevDate = dateEnv.subtract(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
- currentDateProfile.dateIncrement);
- return this.build(prevDate, -1);
- };
- // Builds a structure with info about what the dates/ranges will be for the "next" view.
- DateProfileGenerator.prototype.buildNext = function (currentDateProfile, currentDate) {
- var dateEnv = this.dateEnv;
- var nextDate = dateEnv.add(dateEnv.startOf(currentDate, currentDateProfile.currentRangeUnit), // important for start-of-month
- currentDateProfile.dateIncrement);
- return this.build(nextDate, 1);
- };
- // Builds a structure holding dates/ranges for rendering around the given date.
- // Optional direction param indicates whether the date is being incremented/decremented
- // from its previous value. decremented = -1, incremented = 1 (default).
- DateProfileGenerator.prototype.build = function (currentDate, direction, forceToValid) {
- if (forceToValid === void 0) { forceToValid = false; }
- var validRange;
- var minTime = null;
- var maxTime = null;
- var currentInfo;
- var isRangeAllDay;
- var renderRange;
- var activeRange;
- var isValid;
- validRange = this.buildValidRange();
- validRange = this.trimHiddenDays(validRange);
- if (forceToValid) {
- currentDate = constrainMarkerToRange(currentDate, validRange);
- }
- currentInfo = this.buildCurrentRangeInfo(currentDate, direction);
- isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);
- renderRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.range), currentInfo.unit, isRangeAllDay);
- renderRange = this.trimHiddenDays(renderRange);
- activeRange = renderRange;
- if (!this.options.showNonCurrentDates) {
- activeRange = intersectRanges(activeRange, currentInfo.range);
- }
- minTime = createDuration(this.options.minTime);
- maxTime = createDuration(this.options.maxTime);
- activeRange = this.adjustActiveRange(activeRange, minTime, maxTime);
- activeRange = intersectRanges(activeRange, validRange); // might return null
- // it's invalid if the originally requested date is not contained,
- // or if the range is completely outside of the valid range.
- isValid = rangesIntersect(currentInfo.range, validRange);
- return {
- // constraint for where prev/next operations can go and where events can be dragged/resized to.
- // an object with optional start and end properties.
- validRange: validRange,
- // range the view is formally responsible for.
- // for example, a month view might have 1st-31st, excluding padded dates
- currentRange: currentInfo.range,
- // name of largest unit being displayed, like "month" or "week"
- currentRangeUnit: currentInfo.unit,
- isRangeAllDay: isRangeAllDay,
- // dates that display events and accept drag-n-drop
- // will be `null` if no dates accept events
- activeRange: activeRange,
- // date range with a rendered skeleton
- // includes not-active days that need some sort of DOM
- renderRange: renderRange,
- // Duration object that denotes the first visible time of any given day
- minTime: minTime,
- // Duration object that denotes the exclusive visible end time of any given day
- maxTime: maxTime,
- isValid: isValid,
- // how far the current date will move for a prev/next operation
- dateIncrement: this.buildDateIncrement(currentInfo.duration)
- // pass a fallback (might be null) ^
- };
- };
- // Builds an object with optional start/end properties.
- // Indicates the minimum/maximum dates to display.
- // not responsible for trimming hidden days.
- DateProfileGenerator.prototype.buildValidRange = function () {
- return this.getRangeOption('validRange', this.calendar.getNow()) ||
- { start: null, end: null }; // completely open-ended
- };
- // Builds a structure with info about the "current" range, the range that is
- // highlighted as being the current month for example.
- // See build() for a description of `direction`.
- // Guaranteed to have `range` and `unit` properties. `duration` is optional.
- DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {
- var _a = this, viewSpec = _a.viewSpec, dateEnv = _a.dateEnv;
- var duration = null;
- var unit = null;
- var range = null;
- var dayCount;
- if (viewSpec.duration) {
- duration = viewSpec.duration;
- unit = viewSpec.durationUnit;
- range = this.buildRangeFromDuration(date, direction, duration, unit);
- }
- else if ((dayCount = this.options.dayCount)) {
- unit = 'day';
- range = this.buildRangeFromDayCount(date, direction, dayCount);
- }
- else if ((range = this.buildCustomVisibleRange(date))) {
- unit = dateEnv.greatestWholeUnit(range.start, range.end).unit;
- }
- else {
- duration = this.getFallbackDuration();
- unit = greatestDurationDenominator(duration).unit;
- range = this.buildRangeFromDuration(date, direction, duration, unit);
- }
- return { duration: duration, unit: unit, range: range };
- };
- DateProfileGenerator.prototype.getFallbackDuration = function () {
- return createDuration({ day: 1 });
- };
- // Returns a new activeRange to have time values (un-ambiguate)
- // minTime or maxTime causes the range to expand.
- DateProfileGenerator.prototype.adjustActiveRange = function (range, minTime, maxTime) {
- var dateEnv = this.dateEnv;
- var start = range.start;
- var end = range.end;
- if (this.viewSpec.class.prototype.usesMinMaxTime) {
- // expand active range if minTime is negative (why not when positive?)
- if (asRoughDays(minTime) < 0) {
- start = startOfDay(start); // necessary?
- start = dateEnv.add(start, minTime);
- }
- // expand active range if maxTime is beyond one day (why not when positive?)
- if (asRoughDays(maxTime) > 1) {
- end = startOfDay(end); // necessary?
- end = addDays(end, -1);
- end = dateEnv.add(end, maxTime);
- }
- }
- return { start: start, end: end };
- };
- // Builds the "current" range when it is specified as an explicit duration.
- // `unit` is the already-computed greatestDurationDenominator unit of duration.
- DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {
- var dateEnv = this.dateEnv;
- var alignment = this.options.dateAlignment;
- var dateIncrementInput;
- var dateIncrementDuration;
- var start;
- var end;
- var res;
- // compute what the alignment should be
- if (!alignment) {
- dateIncrementInput = this.options.dateIncrement;
- if (dateIncrementInput) {
- dateIncrementDuration = createDuration(dateIncrementInput);
- // use the smaller of the two units
- if (asRoughMs(dateIncrementDuration) < asRoughMs(duration)) {
- alignment = greatestDurationDenominator(dateIncrementDuration, !getWeeksFromInput(dateIncrementInput)).unit;
- }
- else {
- alignment = unit;
- }
- }
- else {
- alignment = unit;
- }
- }
- // if the view displays a single day or smaller
- if (asRoughDays(duration) <= 1) {
- if (this.isHiddenDay(start)) {
- start = this.skipHiddenDays(start, direction);
- start = startOfDay(start);
- }
- }
- function computeRes() {
- start = dateEnv.startOf(date, alignment);
- end = dateEnv.add(start, duration);
- res = { start: start, end: end };
- }
- computeRes();
- // if range is completely enveloped by hidden days, go past the hidden days
- if (!this.trimHiddenDays(res)) {
- date = this.skipHiddenDays(date, direction);
- computeRes();
- }
- return res;
- };
- // Builds the "current" range when a dayCount is specified.
- DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {
- var dateEnv = this.dateEnv;
- var customAlignment = this.options.dateAlignment;
- var runningCount = 0;
- var start = date;
- var end;
- if (customAlignment) {
- start = dateEnv.startOf(start, customAlignment);
- }
- start = startOfDay(start);
- start = this.skipHiddenDays(start, direction);
- end = start;
- do {
- end = addDays(end, 1);
- if (!this.isHiddenDay(end)) {
- runningCount++;
- }
- } while (runningCount < dayCount);
- return { start: start, end: end };
- };
- // Builds a normalized range object for the "visible" range,
- // which is a way to define the currentRange and activeRange at the same time.
- DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {
- var dateEnv = this.dateEnv;
- var visibleRange = this.getRangeOption('visibleRange', dateEnv.toDate(date));
- if (visibleRange && (visibleRange.start == null || visibleRange.end == null)) {
- return null;
- }
- return visibleRange;
- };
- // Computes the range that will represent the element/cells for *rendering*,
- // but which may have voided days/times.
- // not responsible for trimming hidden days.
- DateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
- return currentRange;
- };
- // Compute the duration value that should be added/substracted to the current date
- // when a prev/next operation happens.
- DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {
- var dateIncrementInput = this.options.dateIncrement;
- var customAlignment;
- if (dateIncrementInput) {
- return createDuration(dateIncrementInput);
- }
- else if ((customAlignment = this.options.dateAlignment)) {
- return createDuration(1, customAlignment);
- }
- else if (fallback) {
- return fallback;
- }
- else {
- return createDuration({ days: 1 });
- }
- };
- // Arguments after name will be forwarded to a hypothetical function value
- // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.
- // Always clone your objects if you fear mutation.
- DateProfileGenerator.prototype.getRangeOption = function (name) {
- var otherArgs = [];
- for (var _i = 1; _i < arguments.length; _i++) {
- otherArgs[_i - 1] = arguments[_i];
- }
- var val = this.options[name];
- if (typeof val === 'function') {
- val = val.apply(null, otherArgs);
- }
- if (val) {
- val = parseRange(val, this.dateEnv);
- }
- if (val) {
- val = computeVisibleDayRange(val);
- }
- return val;
- };
- /* Hidden Days
- ------------------------------------------------------------------------------------------------------------------*/
- // Initializes internal variables related to calculating hidden days-of-week
- DateProfileGenerator.prototype.initHiddenDays = function () {
- var hiddenDays = this.options.hiddenDays || []; // array of day-of-week indices that are hidden
- var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)
- var dayCnt = 0;
- var i;
- if (this.options.weekends === false) {
- hiddenDays.push(0, 6); // 0=sunday, 6=saturday
- }
- for (i = 0; i < 7; i++) {
- if (!(isHiddenDayHash[i] = hiddenDays.indexOf(i) !== -1)) {
- dayCnt++;
- }
- }
- if (!dayCnt) {
- throw new Error('invalid hiddenDays'); // all days were hidden? bad.
- }
- this.isHiddenDayHash = isHiddenDayHash;
- };
- // Remove days from the beginning and end of the range that are computed as hidden.
- // If the whole range is trimmed off, returns null
- DateProfileGenerator.prototype.trimHiddenDays = function (range) {
- var start = range.start;
- var end = range.end;
- if (start) {
- start = this.skipHiddenDays(start);
- }
- if (end) {
- end = this.skipHiddenDays(end, -1, true);
- }
- if (start == null || end == null || start < end) {
- return { start: start, end: end };
- }
- return null;
- };
- // Is the current day hidden?
- // `day` is a day-of-week index (0-6), or a Date (used for UTC)
- DateProfileGenerator.prototype.isHiddenDay = function (day) {
- if (day instanceof Date) {
- day = day.getUTCDay();
- }
- return this.isHiddenDayHash[day];
- };
- // Incrementing the current day until it is no longer a hidden day, returning a copy.
- // DOES NOT CONSIDER validRange!
- // If the initial value of `date` is not a hidden day, don't do anything.
- // Pass `isExclusive` as `true` if you are dealing with an end date.
- // `inc` defaults to `1` (increment one day forward each time)
- DateProfileGenerator.prototype.skipHiddenDays = function (date, inc, isExclusive) {
- if (inc === void 0) { inc = 1; }
- if (isExclusive === void 0) { isExclusive = false; }
- while (this.isHiddenDayHash[(date.getUTCDay() + (isExclusive ? inc : 0) + 7) % 7]) {
- date = addDays(date, inc);
- }
- return date;
- };
- return DateProfileGenerator;
- }());
- // TODO: find a way to avoid comparing DateProfiles. it's tedious
- function isDateProfilesEqual(p0, p1) {
- return rangesEqual(p0.validRange, p1.validRange) &&
- rangesEqual(p0.activeRange, p1.activeRange) &&
- rangesEqual(p0.renderRange, p1.renderRange) &&
- durationsEqual(p0.minTime, p1.minTime) &&
- durationsEqual(p0.maxTime, p1.maxTime);
- /*
- TODO: compare more?
- currentRange: DateRange
- currentRangeUnit: string
- isRangeAllDay: boolean
- isValid: boolean
- dateIncrement: Duration
- */
- }
-
- function reduce (state, action, calendar) {
- var viewType = reduceViewType(state.viewType, action);
- var dateProfile = reduceDateProfile(state.dateProfile, action, state.currentDate, viewType, calendar);
- var eventSources = reduceEventSources(state.eventSources, action, dateProfile, calendar);
- var nextState = __assign({}, state, { viewType: viewType,
- dateProfile: dateProfile, currentDate: reduceCurrentDate(state.currentDate, action, dateProfile), eventSources: eventSources, eventStore: reduceEventStore(state.eventStore, action, eventSources, dateProfile, calendar), dateSelection: reduceDateSelection(state.dateSelection, action, calendar), eventSelection: reduceSelectedEvent(state.eventSelection, action), eventDrag: reduceEventDrag(state.eventDrag, action, eventSources, calendar), eventResize: reduceEventResize(state.eventResize, action, eventSources, calendar), eventSourceLoadingLevel: computeLoadingLevel(eventSources), loadingLevel: computeLoadingLevel(eventSources) });
- for (var _i = 0, _a = calendar.pluginSystem.hooks.reducers; _i < _a.length; _i++) {
- var reducerFunc = _a[_i];
- nextState = reducerFunc(nextState, action, calendar);
- }
- // console.log(action.type, nextState)
- return nextState;
- }
- function reduceViewType(currentViewType, action) {
- switch (action.type) {
- case 'SET_VIEW_TYPE':
- return action.viewType;
- default:
- return currentViewType;
- }
- }
- function reduceDateProfile(currentDateProfile, action, currentDate, viewType, calendar) {
- var newDateProfile;
- switch (action.type) {
- case 'PREV':
- newDateProfile = calendar.dateProfileGenerators[viewType].buildPrev(currentDateProfile, currentDate);
- break;
- case 'NEXT':
- newDateProfile = calendar.dateProfileGenerators[viewType].buildNext(currentDateProfile, currentDate);
- break;
- case 'SET_DATE':
- if (!currentDateProfile.activeRange ||
- !rangeContainsMarker(currentDateProfile.currentRange, action.dateMarker)) {
- newDateProfile = calendar.dateProfileGenerators[viewType].build(action.dateMarker, undefined, true // forceToValid
- );
- }
- break;
- case 'SET_VIEW_TYPE':
- var generator = calendar.dateProfileGenerators[viewType];
- if (!generator) {
- throw new Error(viewType ?
- 'The FullCalendar view "' + viewType + '" does not exist. Make sure your plugins are loaded correctly.' :
- 'No available FullCalendar view plugins.');
- }
- newDateProfile = generator.build(action.dateMarker || currentDate, undefined, true // forceToValid
- );
- break;
- }
- if (newDateProfile &&
- newDateProfile.isValid &&
- !(currentDateProfile && isDateProfilesEqual(currentDateProfile, newDateProfile))) {
- return newDateProfile;
- }
- else {
- return currentDateProfile;
- }
- }
- function reduceCurrentDate(currentDate, action, dateProfile) {
- switch (action.type) {
- case 'PREV':
- case 'NEXT':
- if (!rangeContainsMarker(dateProfile.currentRange, currentDate)) {
- return dateProfile.currentRange.start;
- }
- else {
- return currentDate;
- }
- case 'SET_DATE':
- case 'SET_VIEW_TYPE':
- var newDate = action.dateMarker || currentDate;
- if (dateProfile.activeRange && !rangeContainsMarker(dateProfile.activeRange, newDate)) {
- return dateProfile.currentRange.start;
- }
- else {
- return newDate;
- }
- default:
- return currentDate;
- }
- }
- function reduceDateSelection(currentSelection, action, calendar) {
- switch (action.type) {
- case 'SELECT_DATES':
- return action.selection;
- case 'UNSELECT_DATES':
- return null;
- default:
- return currentSelection;
- }
- }
- function reduceSelectedEvent(currentInstanceId, action) {
- switch (action.type) {
- case 'SELECT_EVENT':
- return action.eventInstanceId;
- case 'UNSELECT_EVENT':
- return '';
- default:
- return currentInstanceId;
- }
- }
- function reduceEventDrag(currentDrag, action, sources, calendar) {
- switch (action.type) {
- case 'SET_EVENT_DRAG':
- var newDrag = action.state;
- return {
- affectedEvents: newDrag.affectedEvents,
- mutatedEvents: newDrag.mutatedEvents,
- isEvent: newDrag.isEvent,
- origSeg: newDrag.origSeg
- };
- case 'UNSET_EVENT_DRAG':
- return null;
- default:
- return currentDrag;
- }
- }
- function reduceEventResize(currentResize, action, sources, calendar) {
- switch (action.type) {
- case 'SET_EVENT_RESIZE':
- var newResize = action.state;
- return {
- affectedEvents: newResize.affectedEvents,
- mutatedEvents: newResize.mutatedEvents,
- isEvent: newResize.isEvent,
- origSeg: newResize.origSeg
- };
- case 'UNSET_EVENT_RESIZE':
- return null;
- default:
- return currentResize;
- }
- }
- function computeLoadingLevel(eventSources) {
- var cnt = 0;
- for (var sourceId in eventSources) {
- if (eventSources[sourceId].isFetching) {
- cnt++;
- }
- }
- return cnt;
- }
-
- var STANDARD_PROPS = {
- start: null,
- end: null,
- allDay: Boolean
- };
- function parseDateSpan(raw, dateEnv, defaultDuration) {
- var span = parseOpenDateSpan(raw, dateEnv);
- var range = span.range;
- if (!range.start) {
- return null;
- }
- if (!range.end) {
- if (defaultDuration == null) {
- return null;
- }
- else {
- range.end = dateEnv.add(range.start, defaultDuration);
- }
- }
- return span;
- }
- /*
- TODO: somehow combine with parseRange?
- Will return null if the start/end props were present but parsed invalidly.
- */
- function parseOpenDateSpan(raw, dateEnv) {
- var leftovers = {};
- var standardProps = refineProps(raw, STANDARD_PROPS, {}, leftovers);
- var startMeta = standardProps.start ? dateEnv.createMarkerMeta(standardProps.start) : null;
- var endMeta = standardProps.end ? dateEnv.createMarkerMeta(standardProps.end) : null;
- var allDay = standardProps.allDay;
- if (allDay == null) {
- allDay = (startMeta && startMeta.isTimeUnspecified) &&
- (!endMeta || endMeta.isTimeUnspecified);
- }
- // use this leftover object as the selection object
- leftovers.range = {
- start: startMeta ? startMeta.marker : null,
- end: endMeta ? endMeta.marker : null
- };
- leftovers.allDay = allDay;
- return leftovers;
- }
- function isDateSpansEqual(span0, span1) {
- return rangesEqual(span0.range, span1.range) &&
- span0.allDay === span1.allDay &&
- isSpanPropsEqual(span0, span1);
- }
- // the NON-DATE-RELATED props
- function isSpanPropsEqual(span0, span1) {
- for (var propName in span1) {
- if (propName !== 'range' && propName !== 'allDay') {
- if (span0[propName] !== span1[propName]) {
- return false;
- }
- }
- }
- // are there any props that span0 has that span1 DOESN'T have?
- // both have range/allDay, so no need to special-case.
- for (var propName in span0) {
- if (!(propName in span1)) {
- return false;
- }
- }
- return true;
- }
- function buildDateSpanApi(span, dateEnv) {
- return {
- start: dateEnv.toDate(span.range.start),
- end: dateEnv.toDate(span.range.end),
- startStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),
- endStr: dateEnv.formatIso(span.range.end, { omitTime: span.allDay }),
- allDay: span.allDay
- };
- }
- function buildDatePointApi(span, dateEnv) {
- return {
- date: dateEnv.toDate(span.range.start),
- dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),
- allDay: span.allDay
- };
- }
- function fabricateEventRange(dateSpan, eventUiBases, calendar) {
- var def = parseEventDef({ editable: false }, '', // sourceId
- dateSpan.allDay, true, // hasEnd
- calendar);
- return {
- def: def,
- ui: compileEventUi(def, eventUiBases),
- instance: createEventInstance(def.defId, dateSpan.range),
- range: dateSpan.range,
- isStart: true,
- isEnd: true
- };
- }
-
- function compileViewDefs(defaultConfigs, overrideConfigs) {
- var hash = {};
- var viewType;
- for (viewType in defaultConfigs) {
- ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
- }
- for (viewType in overrideConfigs) {
- ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs);
- }
- return hash;
- }
- function ensureViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
- if (hash[viewType]) {
- return hash[viewType];
- }
- var viewDef = buildViewDef(viewType, hash, defaultConfigs, overrideConfigs);
- if (viewDef) {
- hash[viewType] = viewDef;
- }
- return viewDef;
- }
- function buildViewDef(viewType, hash, defaultConfigs, overrideConfigs) {
- var defaultConfig = defaultConfigs[viewType];
- var overrideConfig = overrideConfigs[viewType];
- var queryProp = function (name) {
- return (defaultConfig && defaultConfig[name] !== null) ? defaultConfig[name] :
- ((overrideConfig && overrideConfig[name] !== null) ? overrideConfig[name] : null);
- };
- var theClass = queryProp('class');
- var superType = queryProp('superType');
- if (!superType && theClass) {
- superType =
- findViewNameBySubclass(theClass, overrideConfigs) ||
- findViewNameBySubclass(theClass, defaultConfigs);
- }
- var superDef = null;
- if (superType) {
- if (superType === viewType) {
- throw new Error('Can\'t have a custom view type that references itself');
- }
- superDef = ensureViewDef(superType, hash, defaultConfigs, overrideConfigs);
- }
- if (!theClass && superDef) {
- theClass = superDef.class;
- }
- if (!theClass) {
- return null; // don't throw a warning, might be settings for a single-unit view
- }
- return {
- type: viewType,
- class: theClass,
- defaults: __assign({}, (superDef ? superDef.defaults : {}), (defaultConfig ? defaultConfig.options : {})),
- overrides: __assign({}, (superDef ? superDef.overrides : {}), (overrideConfig ? overrideConfig.options : {}))
- };
- }
- function findViewNameBySubclass(viewSubclass, configs) {
- var superProto = Object.getPrototypeOf(viewSubclass.prototype);
- for (var viewType in configs) {
- var parsed = configs[viewType];
- // need DIRECT subclass, so instanceof won't do it
- if (parsed.class && parsed.class.prototype === superProto) {
- return viewType;
- }
- }
- return '';
- }
-
- function parseViewConfigs(inputs) {
- return mapHash(inputs, parseViewConfig);
- }
- var VIEW_DEF_PROPS = {
- type: String,
- class: null
- };
- function parseViewConfig(input) {
- if (typeof input === 'function') {
- input = { class: input };
- }
- var options = {};
- var props = refineProps(input, VIEW_DEF_PROPS, {}, options);
- return {
- superType: props.type,
- class: props.class,
- options: options
- };
- }
-
- function buildViewSpecs(defaultInputs, optionsManager) {
- var defaultConfigs = parseViewConfigs(defaultInputs);
- var overrideConfigs = parseViewConfigs(optionsManager.overrides.views);
- var viewDefs = compileViewDefs(defaultConfigs, overrideConfigs);
- return mapHash(viewDefs, function (viewDef) {
- return buildViewSpec(viewDef, overrideConfigs, optionsManager);
- });
- }
- function buildViewSpec(viewDef, overrideConfigs, optionsManager) {
- var durationInput = viewDef.overrides.duration ||
- viewDef.defaults.duration ||
- optionsManager.dynamicOverrides.duration ||
- optionsManager.overrides.duration;
- var duration = null;
- var durationUnit = '';
- var singleUnit = '';
- var singleUnitOverrides = {};
- if (durationInput) {
- duration = createDuration(durationInput);
- if (duration) { // valid?
- var denom = greatestDurationDenominator(duration, !getWeeksFromInput(durationInput));
- durationUnit = denom.unit;
- if (denom.value === 1) {
- singleUnit = durationUnit;
- singleUnitOverrides = overrideConfigs[durationUnit] ? overrideConfigs[durationUnit].options : {};
- }
- }
- }
- var queryButtonText = function (options) {
- var buttonTextMap = options.buttonText || {};
- var buttonTextKey = viewDef.defaults.buttonTextKey;
- if (buttonTextKey != null && buttonTextMap[buttonTextKey] != null) {
- return buttonTextMap[buttonTextKey];
- }
- if (buttonTextMap[viewDef.type] != null) {
- return buttonTextMap[viewDef.type];
- }
- if (buttonTextMap[singleUnit] != null) {
- return buttonTextMap[singleUnit];
- }
- };
- return {
- type: viewDef.type,
- class: viewDef.class,
- duration: duration,
- durationUnit: durationUnit,
- singleUnit: singleUnit,
- options: __assign({}, globalDefaults, viewDef.defaults, optionsManager.dirDefaults, optionsManager.localeDefaults, optionsManager.overrides, singleUnitOverrides, viewDef.overrides, optionsManager.dynamicOverrides),
- buttonTextOverride: queryButtonText(optionsManager.dynamicOverrides) ||
- queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence
- viewDef.overrides.buttonText,
- buttonTextDefault: queryButtonText(optionsManager.localeDefaults) ||
- queryButtonText(optionsManager.dirDefaults) ||
- viewDef.defaults.buttonText ||
- queryButtonText(globalDefaults) ||
- viewDef.type // fall back to given view name
- };
- }
-
- var Toolbar = /** @class */ (function (_super) {
- __extends(Toolbar, _super);
- function Toolbar(extraClassName) {
- var _this = _super.call(this) || this;
- _this._renderLayout = memoizeRendering(_this.renderLayout, _this.unrenderLayout);
- _this._updateTitle = memoizeRendering(_this.updateTitle, null, [_this._renderLayout]);
- _this._updateActiveButton = memoizeRendering(_this.updateActiveButton, null, [_this._renderLayout]);
- _this._updateToday = memoizeRendering(_this.updateToday, null, [_this._renderLayout]);
- _this._updatePrev = memoizeRendering(_this.updatePrev, null, [_this._renderLayout]);
- _this._updateNext = memoizeRendering(_this.updateNext, null, [_this._renderLayout]);
- _this.el = createElement('div', { className: 'fc-toolbar ' + extraClassName });
- return _this;
- }
- Toolbar.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this._renderLayout.unrender(); // should unrender everything else
- removeElement(this.el);
- };
- Toolbar.prototype.render = function (props) {
- this._renderLayout(props.layout);
- this._updateTitle(props.title);
- this._updateActiveButton(props.activeButton);
- this._updateToday(props.isTodayEnabled);
- this._updatePrev(props.isPrevEnabled);
- this._updateNext(props.isNextEnabled);
- };
- Toolbar.prototype.renderLayout = function (layout) {
- var el = this.el;
- this.viewsWithButtons = [];
- appendToElement(el, this.renderSection('left', layout.left));
- appendToElement(el, this.renderSection('center', layout.center));
- appendToElement(el, this.renderSection('right', layout.right));
- };
- Toolbar.prototype.unrenderLayout = function () {
- this.el.innerHTML = '';
- };
- Toolbar.prototype.renderSection = function (position, buttonStr) {
- var _this = this;
- var _a = this.context, theme = _a.theme, calendar = _a.calendar;
- var optionsManager = calendar.optionsManager;
- var viewSpecs = calendar.viewSpecs;
- var sectionEl = createElement('div', { className: 'fc-' + position });
- var calendarCustomButtons = optionsManager.computed.customButtons || {};
- var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};
- var calendarButtonText = optionsManager.computed.buttonText || {};
- if (buttonStr) {
- buttonStr.split(' ').forEach(function (buttonGroupStr, i) {
- var groupChildren = [];
- var isOnlyButtons = true;
- var groupEl;
- buttonGroupStr.split(',').forEach(function (buttonName, j) {
- var customButtonProps;
- var viewSpec;
- var buttonClick;
- var buttonIcon; // only one of these will be set
- var buttonText; // "
- var buttonInnerHtml;
- var buttonClasses;
- var buttonEl;
- var buttonAriaAttr;
- if (buttonName === 'title') {
- groupChildren.push(htmlToElement('<h2>&nbsp;</h2>')); // we always want it to take up height
- isOnlyButtons = false;
- }
- else {
- if ((customButtonProps = calendarCustomButtons[buttonName])) {
- buttonClick = function (ev) {
- if (customButtonProps.click) {
- customButtonProps.click.call(buttonEl, ev);
- }
- };
- (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||
- (buttonIcon = theme.getIconClass(buttonName)) ||
- (buttonText = customButtonProps.text);
- }
- else if ((viewSpec = viewSpecs[buttonName])) {
- _this.viewsWithButtons.push(buttonName);
- buttonClick = function () {
- calendar.changeView(buttonName);
- };
- (buttonText = viewSpec.buttonTextOverride) ||
- (buttonIcon = theme.getIconClass(buttonName)) ||
- (buttonText = viewSpec.buttonTextDefault);
- }
- else if (calendar[buttonName]) { // a calendar method
- buttonClick = function () {
- calendar[buttonName]();
- };
- (buttonText = calendarButtonTextOverrides[buttonName]) ||
- (buttonIcon = theme.getIconClass(buttonName)) ||
- (buttonText = calendarButtonText[buttonName]);
- // ^ everything else is considered default
- }
- if (buttonClick) {
- buttonClasses = [
- 'fc-' + buttonName + '-button',
- theme.getClass('button')
- ];
- if (buttonText) {
- buttonInnerHtml = htmlEscape(buttonText);
- buttonAriaAttr = '';
- }
- else if (buttonIcon) {
- buttonInnerHtml = "<span class='" + buttonIcon + "'></span>";
- buttonAriaAttr = ' aria-label="' + buttonName + '"';
- }
- buttonEl = htmlToElement(// type="button" so that it doesn't submit a form
- '<button type="button" class="' + buttonClasses.join(' ') + '"' +
- buttonAriaAttr +
- '>' + buttonInnerHtml + '</button>');
- buttonEl.addEventListener('click', buttonClick);
- groupChildren.push(buttonEl);
- }
- }
- });
- if (groupChildren.length > 1) {
- groupEl = document.createElement('div');
- var buttonGroupClassName = theme.getClass('buttonGroup');
- if (isOnlyButtons && buttonGroupClassName) {
- groupEl.classList.add(buttonGroupClassName);
- }
- appendToElement(groupEl, groupChildren);
- sectionEl.appendChild(groupEl);
- }
- else {
- appendToElement(sectionEl, groupChildren); // 1 or 0 children
- }
- });
- }
- return sectionEl;
- };
- Toolbar.prototype.updateToday = function (isTodayEnabled) {
- this.toggleButtonEnabled('today', isTodayEnabled);
- };
- Toolbar.prototype.updatePrev = function (isPrevEnabled) {
- this.toggleButtonEnabled('prev', isPrevEnabled);
- };
- Toolbar.prototype.updateNext = function (isNextEnabled) {
- this.toggleButtonEnabled('next', isNextEnabled);
- };
- Toolbar.prototype.updateTitle = function (text) {
- findElements(this.el, 'h2').forEach(function (titleEl) {
- titleEl.innerText = text;
- });
- };
- Toolbar.prototype.updateActiveButton = function (buttonName) {
- var theme = this.context.theme;
- var className = theme.getClass('buttonActive');
- findElements(this.el, 'button').forEach(function (buttonEl) {
- if (buttonName && buttonEl.classList.contains('fc-' + buttonName + '-button')) {
- buttonEl.classList.add(className);
- }
- else {
- buttonEl.classList.remove(className);
- }
- });
- };
- Toolbar.prototype.toggleButtonEnabled = function (buttonName, bool) {
- findElements(this.el, '.fc-' + buttonName + '-button').forEach(function (buttonEl) {
- buttonEl.disabled = !bool;
- });
- };
- return Toolbar;
- }(Component));
-
- var CalendarComponent = /** @class */ (function (_super) {
- __extends(CalendarComponent, _super);
- function CalendarComponent(el) {
- var _this = _super.call(this) || this;
- _this.elClassNames = [];
- _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- _this.renderToolbars = memoizeRendering(_this._renderToolbars, _this._unrenderToolbars, [_this.renderSkeleton]);
- _this.buildComponentContext = memoize(buildComponentContext);
- _this.buildViewPropTransformers = memoize(buildViewPropTransformers);
- _this.el = el;
- _this.computeTitle = memoize(computeTitle);
- _this.parseBusinessHours = memoize(function (input) {
- return parseBusinessHours(input, _this.context.calendar);
- });
- return _this;
- }
- CalendarComponent.prototype.render = function (props, context) {
- this.freezeHeight();
- var title = this.computeTitle(props.dateProfile, props.viewSpec.options);
- this.renderSkeleton(context);
- this.renderToolbars(props.viewSpec, props.dateProfile, props.currentDate, title);
- this.renderView(props, title);
- this.updateSize();
- this.thawHeight();
- };
- CalendarComponent.prototype.destroy = function () {
- if (this.header) {
- this.header.destroy();
- }
- if (this.footer) {
- this.footer.destroy();
- }
- this.renderSkeleton.unrender(); // will call destroyView
- _super.prototype.destroy.call(this);
- };
- CalendarComponent.prototype._renderSkeleton = function (context) {
- this.updateElClassNames(context);
- prependToElement(this.el, this.contentEl = createElement('div', { className: 'fc-view-container' }));
- var calendar = context.calendar;
- for (var _i = 0, _a = calendar.pluginSystem.hooks.viewContainerModifiers; _i < _a.length; _i++) {
- var modifyViewContainer = _a[_i];
- modifyViewContainer(this.contentEl, calendar);
- }
- };
- CalendarComponent.prototype._unrenderSkeleton = function () {
- // weird to have this here
- if (this.view) {
- this.savedScroll = this.view.queryScroll();
- this.view.destroy();
- this.view = null;
- }
- removeElement(this.contentEl);
- this.removeElClassNames();
- };
- CalendarComponent.prototype.removeElClassNames = function () {
- var classList = this.el.classList;
- for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) {
- var className = _a[_i];
- classList.remove(className);
- }
- this.elClassNames = [];
- };
- CalendarComponent.prototype.updateElClassNames = function (context) {
- this.removeElClassNames();
- var theme = context.theme, options = context.options;
- this.elClassNames = [
- 'fc',
- 'fc-' + options.dir,
- theme.getClass('widget')
- ];
- var classList = this.el.classList;
- for (var _i = 0, _a = this.elClassNames; _i < _a.length; _i++) {
- var className = _a[_i];
- classList.add(className);
- }
- };
- CalendarComponent.prototype._renderToolbars = function (viewSpec, dateProfile, currentDate, title) {
- var _a = this, context = _a.context, header = _a.header, footer = _a.footer;
- var options = context.options, calendar = context.calendar;
- var headerLayout = options.header;
- var footerLayout = options.footer;
- var dateProfileGenerator = this.props.dateProfileGenerator;
- var now = calendar.getNow();
- var todayInfo = dateProfileGenerator.build(now);
- var prevInfo = dateProfileGenerator.buildPrev(dateProfile, currentDate);
- var nextInfo = dateProfileGenerator.buildNext(dateProfile, currentDate);
- var toolbarProps = {
- title: title,
- activeButton: viewSpec.type,
- isTodayEnabled: todayInfo.isValid && !rangeContainsMarker(dateProfile.currentRange, now),
- isPrevEnabled: prevInfo.isValid,
- isNextEnabled: nextInfo.isValid
- };
- if (headerLayout) {
- if (!header) {
- header = this.header = new Toolbar('fc-header-toolbar');
- prependToElement(this.el, header.el);
- }
- header.receiveProps(__assign({ layout: headerLayout }, toolbarProps), context);
- }
- else if (header) {
- header.destroy();
- header = this.header = null;
- }
- if (footerLayout) {
- if (!footer) {
- footer = this.footer = new Toolbar('fc-footer-toolbar');
- appendToElement(this.el, footer.el);
- }
- footer.receiveProps(__assign({ layout: footerLayout }, toolbarProps), context);
- }
- else if (footer) {
- footer.destroy();
- footer = this.footer = null;
- }
- };
- CalendarComponent.prototype._unrenderToolbars = function () {
- if (this.header) {
- this.header.destroy();
- this.header = null;
- }
- if (this.footer) {
- this.footer.destroy();
- this.footer = null;
- }
- };
- CalendarComponent.prototype.renderView = function (props, title) {
- var view = this.view;
- var _a = this.context, calendar = _a.calendar, options = _a.options;
- var viewSpec = props.viewSpec, dateProfileGenerator = props.dateProfileGenerator;
- if (!view || view.viewSpec !== viewSpec) {
- if (view) {
- view.destroy();
- }
- view = this.view = new viewSpec['class'](viewSpec, this.contentEl);
- if (this.savedScroll) {
- view.addScroll(this.savedScroll, true);
- this.savedScroll = null;
- }
- }
- view.title = title; // for the API
- var viewProps = {
- dateProfileGenerator: dateProfileGenerator,
- dateProfile: props.dateProfile,
- businessHours: this.parseBusinessHours(viewSpec.options.businessHours),
- eventStore: props.eventStore,
- eventUiBases: props.eventUiBases,
- dateSelection: props.dateSelection,
- eventSelection: props.eventSelection,
- eventDrag: props.eventDrag,
- eventResize: props.eventResize
- };
- var transformers = this.buildViewPropTransformers(calendar.pluginSystem.hooks.viewPropsTransformers);
- for (var _i = 0, transformers_1 = transformers; _i < transformers_1.length; _i++) {
- var transformer = transformers_1[_i];
- __assign(viewProps, transformer.transform(viewProps, viewSpec, props, options));
- }
- view.receiveProps(viewProps, this.buildComponentContext(this.context, viewSpec, view));
- };
- // Sizing
- // -----------------------------------------------------------------------------------------------------------------
- CalendarComponent.prototype.updateSize = function (isResize) {
- if (isResize === void 0) { isResize = false; }
- var view = this.view;
- if (!view) {
- return; // why?
- }
- if (isResize || this.isHeightAuto == null) {
- this.computeHeightVars();
- }
- view.updateSize(isResize, this.viewHeight, this.isHeightAuto);
- view.updateNowIndicator(); // we need to guarantee this will run after updateSize
- view.popScroll(isResize);
- };
- CalendarComponent.prototype.computeHeightVars = function () {
- var calendar = this.context.calendar; // yuck. need to handle dynamic options
- var heightInput = calendar.opt('height');
- var contentHeightInput = calendar.opt('contentHeight');
- this.isHeightAuto = heightInput === 'auto' || contentHeightInput === 'auto';
- if (typeof contentHeightInput === 'number') { // exists and not 'auto'
- this.viewHeight = contentHeightInput;
- }
- else if (typeof contentHeightInput === 'function') { // exists and is a function
- this.viewHeight = contentHeightInput();
- }
- else if (typeof heightInput === 'number') { // exists and not 'auto'
- this.viewHeight = heightInput - this.queryToolbarsHeight();
- }
- else if (typeof heightInput === 'function') { // exists and is a function
- this.viewHeight = heightInput() - this.queryToolbarsHeight();
- }
- else if (heightInput === 'parent') { // set to height of parent element
- var parentEl = this.el.parentNode;
- this.viewHeight = parentEl.getBoundingClientRect().height - this.queryToolbarsHeight();
- }
- else {
- this.viewHeight = Math.round(this.contentEl.getBoundingClientRect().width /
- Math.max(calendar.opt('aspectRatio'), .5));
- }
- };
- CalendarComponent.prototype.queryToolbarsHeight = function () {
- var height = 0;
- if (this.header) {
- height += computeHeightAndMargins(this.header.el);
- }
- if (this.footer) {
- height += computeHeightAndMargins(this.footer.el);
- }
- return height;
- };
- // Height "Freezing"
- // -----------------------------------------------------------------------------------------------------------------
- CalendarComponent.prototype.freezeHeight = function () {
- applyStyle(this.el, {
- height: this.el.getBoundingClientRect().height,
- overflow: 'hidden'
- });
- };
- CalendarComponent.prototype.thawHeight = function () {
- applyStyle(this.el, {
- height: '',
- overflow: ''
- });
- };
- return CalendarComponent;
- }(Component));
- // Title and Date Formatting
- // -----------------------------------------------------------------------------------------------------------------
- // Computes what the title at the top of the calendar should be for this view
- function computeTitle(dateProfile, viewOptions) {
- var range;
- // for views that span a large unit of time, show the proper interval, ignoring stray days before and after
- if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {
- range = dateProfile.currentRange;
- }
- else { // for day units or smaller, use the actual day range
- range = dateProfile.activeRange;
- }
- return this.context.dateEnv.formatRange(range.start, range.end, createFormatter(viewOptions.titleFormat || computeTitleFormat(dateProfile), viewOptions.titleRangeSeparator), { isEndExclusive: dateProfile.isRangeAllDay });
- }
- // Generates the format string that should be used to generate the title for the current date range.
- // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.
- function computeTitleFormat(dateProfile) {
- var currentRangeUnit = dateProfile.currentRangeUnit;
- if (currentRangeUnit === 'year') {
- return { year: 'numeric' };
- }
- else if (currentRangeUnit === 'month') {
- return { year: 'numeric', month: 'long' }; // like "September 2014"
- }
- else {
- var days = diffWholeDays(dateProfile.currentRange.start, dateProfile.currentRange.end);
- if (days !== null && days > 1) {
- // multi-day range. shorter, like "Sep 9 - 10 2014"
- return { year: 'numeric', month: 'short', day: 'numeric' };
- }
- else {
- // one day. longer, like "September 9 2014"
- return { year: 'numeric', month: 'long', day: 'numeric' };
- }
- }
- }
- // build a context scoped to the view
- function buildComponentContext(context, viewSpec, view) {
- return context.extend(viewSpec.options, view);
- }
- // Plugin
- // -----------------------------------------------------------------------------------------------------------------
- function buildViewPropTransformers(theClasses) {
- return theClasses.map(function (theClass) {
- return new theClass();
- });
- }
-
- var Interaction = /** @class */ (function () {
- function Interaction(settings) {
- this.component = settings.component;
- }
- Interaction.prototype.destroy = function () {
- };
- return Interaction;
- }());
- function parseInteractionSettings(component, input) {
- return {
- component: component,
- el: input.el,
- useEventCenter: input.useEventCenter != null ? input.useEventCenter : true
- };
- }
- function interactionSettingsToStore(settings) {
- var _a;
- return _a = {},
- _a[settings.component.uid] = settings,
- _a;
- }
- // global state
- var interactionSettingsStore = {};
-
- /*
- Detects when the user clicks on an event within a DateComponent
- */
- var EventClicking = /** @class */ (function (_super) {
- __extends(EventClicking, _super);
- function EventClicking(settings) {
- var _this = _super.call(this, settings) || this;
- _this.handleSegClick = function (ev, segEl) {
- var component = _this.component;
- var _a = component.context, calendar = _a.calendar, view = _a.view;
- var seg = getElSeg(segEl);
- if (seg && // might be the <div> surrounding the more link
- component.isValidSegDownEl(ev.target)) {
- // our way to simulate a link click for elements that can't be <a> tags
- // grab before trigger fired in case trigger trashes DOM thru rerendering
- var hasUrlContainer = elementClosest(ev.target, '.fc-has-url');
- var url = hasUrlContainer ? hasUrlContainer.querySelector('a[href]').href : '';
- calendar.publiclyTrigger('eventClick', [
- {
- el: segEl,
- event: new EventApi(component.context.calendar, seg.eventRange.def, seg.eventRange.instance),
- jsEvent: ev,
- view: view
- }
- ]);
- if (url && !ev.defaultPrevented) {
- window.location.href = url;
- }
- }
- };
- var component = settings.component;
- _this.destroy = listenBySelector(component.el, 'click', component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegClick);
- return _this;
- }
- return EventClicking;
- }(Interaction));
-
- /*
- Triggers events and adds/removes core classNames when the user's pointer
- enters/leaves event-elements of a component.
- */
- var EventHovering = /** @class */ (function (_super) {
- __extends(EventHovering, _super);
- function EventHovering(settings) {
- var _this = _super.call(this, settings) || this;
- // for simulating an eventMouseLeave when the event el is destroyed while mouse is over it
- _this.handleEventElRemove = function (el) {
- if (el === _this.currentSegEl) {
- _this.handleSegLeave(null, _this.currentSegEl);
- }
- };
- _this.handleSegEnter = function (ev, segEl) {
- if (getElSeg(segEl)) { // TODO: better way to make sure not hovering over more+ link or its wrapper
- segEl.classList.add('fc-allow-mouse-resize');
- _this.currentSegEl = segEl;
- _this.triggerEvent('eventMouseEnter', ev, segEl);
- }
- };
- _this.handleSegLeave = function (ev, segEl) {
- if (_this.currentSegEl) {
- segEl.classList.remove('fc-allow-mouse-resize');
- _this.currentSegEl = null;
- _this.triggerEvent('eventMouseLeave', ev, segEl);
- }
- };
- var component = settings.component;
- _this.removeHoverListeners = listenToHoverBySelector(component.el, component.fgSegSelector + ',' + component.bgSegSelector, _this.handleSegEnter, _this.handleSegLeave);
- // how to make sure component already has context?
- component.context.calendar.on('eventElRemove', _this.handleEventElRemove);
- return _this;
- }
- EventHovering.prototype.destroy = function () {
- this.removeHoverListeners();
- this.component.context.calendar.off('eventElRemove', this.handleEventElRemove);
- };
- EventHovering.prototype.triggerEvent = function (publicEvName, ev, segEl) {
- var component = this.component;
- var _a = component.context, calendar = _a.calendar, view = _a.view;
- var seg = getElSeg(segEl);
- if (!ev || component.isValidSegDownEl(ev.target)) {
- calendar.publiclyTrigger(publicEvName, [
- {
- el: segEl,
- event: new EventApi(calendar, seg.eventRange.def, seg.eventRange.instance),
- jsEvent: ev,
- view: view
- }
- ]);
- }
- };
- return EventHovering;
- }(Interaction));
-
- var StandardTheme = /** @class */ (function (_super) {
- __extends(StandardTheme, _super);
- function StandardTheme() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- return StandardTheme;
- }(Theme));
- StandardTheme.prototype.classes = {
- widget: 'fc-unthemed',
- widgetHeader: 'fc-widget-header',
- widgetContent: 'fc-widget-content',
- buttonGroup: 'fc-button-group',
- button: 'fc-button fc-button-primary',
- buttonActive: 'fc-button-active',
- popoverHeader: 'fc-widget-header',
- popoverContent: 'fc-widget-content',
- // day grid
- headerRow: 'fc-widget-header',
- dayRow: 'fc-widget-content',
- // list view
- listView: 'fc-widget-content'
- };
- StandardTheme.prototype.baseIconClass = 'fc-icon';
- StandardTheme.prototype.iconClasses = {
- close: 'fc-icon-x',
- prev: 'fc-icon-chevron-left',
- next: 'fc-icon-chevron-right',
- prevYear: 'fc-icon-chevrons-left',
- nextYear: 'fc-icon-chevrons-right'
- };
- StandardTheme.prototype.iconOverrideOption = 'buttonIcons';
- StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';
- StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';
-
- var Calendar = /** @class */ (function () {
- function Calendar(el, overrides) {
- var _this = this;
- this.buildComponentContext = memoize(buildComponentContext$1);
- this.parseRawLocales = memoize(parseRawLocales);
- this.buildLocale = memoize(buildLocale);
- this.buildDateEnv = memoize(buildDateEnv);
- this.buildTheme = memoize(buildTheme);
- this.buildEventUiSingleBase = memoize(this._buildEventUiSingleBase);
- this.buildSelectionConfig = memoize(this._buildSelectionConfig);
- this.buildEventUiBySource = memoizeOutput(buildEventUiBySource, isPropsEqual);
- this.buildEventUiBases = memoize(buildEventUiBases);
- this.interactionsStore = {};
- this.actionQueue = [];
- this.isReducing = false;
- // isDisplaying: boolean = false // installed in DOM? accepting renders?
- this.needsRerender = false; // needs a render?
- this.isRendering = false; // currently in the executeRender function?
- this.renderingPauseDepth = 0;
- this.buildDelayedRerender = memoize(buildDelayedRerender);
- this.afterSizingTriggers = {};
- this.isViewUpdated = false;
- this.isDatesUpdated = false;
- this.isEventsUpdated = false;
- this.el = el;
- this.optionsManager = new OptionsManager(overrides || {});
- this.pluginSystem = new PluginSystem();
- // only do once. don't do in handleOptions. because can't remove plugins
- this.addPluginInputs(this.optionsManager.computed.plugins || []);
- this.handleOptions(this.optionsManager.computed);
- this.publiclyTrigger('_init'); // for tests
- this.hydrate();
- this.calendarInteractions = this.pluginSystem.hooks.calendarInteractions
- .map(function (calendarInteractionClass) {
- return new calendarInteractionClass(_this);
- });
- }
- Calendar.prototype.addPluginInputs = function (pluginInputs) {
- var pluginDefs = refinePluginDefs(pluginInputs);
- for (var _i = 0, pluginDefs_1 = pluginDefs; _i < pluginDefs_1.length; _i++) {
- var pluginDef = pluginDefs_1[_i];
- this.pluginSystem.add(pluginDef);
- }
- };
- Object.defineProperty(Calendar.prototype, "view", {
- // public API
- get: function () {
- return this.component ? this.component.view : null;
- },
- enumerable: true,
- configurable: true
- });
- // Public API for rendering
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.render = function () {
- if (!this.component) {
- this.component = new CalendarComponent(this.el);
- this.renderableEventStore = createEmptyEventStore();
- this.bindHandlers();
- this.executeRender();
- }
- else {
- this.requestRerender();
- }
- };
- Calendar.prototype.destroy = function () {
- if (this.component) {
- this.unbindHandlers();
- this.component.destroy(); // don't null-out. in case API needs access
- this.component = null; // umm ???
- for (var _i = 0, _a = this.calendarInteractions; _i < _a.length; _i++) {
- var interaction = _a[_i];
- interaction.destroy();
- }
- this.publiclyTrigger('_destroyed');
- }
- };
- // Handlers
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.bindHandlers = function () {
- var _this = this;
- // event delegation for nav links
- this.removeNavLinkListener = listenBySelector(this.el, 'click', 'a[data-goto]', function (ev, anchorEl) {
- var gotoOptions = anchorEl.getAttribute('data-goto');
- gotoOptions = gotoOptions ? JSON.parse(gotoOptions) : {};
- var dateEnv = _this.dateEnv;
- var dateMarker = dateEnv.createMarker(gotoOptions.date);
- var viewType = gotoOptions.type;
- // property like "navLinkDayClick". might be a string or a function
- var customAction = _this.viewOpt('navLink' + capitaliseFirstLetter(viewType) + 'Click');
- if (typeof customAction === 'function') {
- customAction(dateEnv.toDate(dateMarker), ev);
- }
- else {
- if (typeof customAction === 'string') {
- viewType = customAction;
- }
- _this.zoomTo(dateMarker, viewType);
- }
- });
- if (this.opt('handleWindowResize')) {
- window.addEventListener('resize', this.windowResizeProxy = debounce(// prevents rapid calls
- this.windowResize.bind(this), this.opt('windowResizeDelay')));
- }
- };
- Calendar.prototype.unbindHandlers = function () {
- this.removeNavLinkListener();
- if (this.windowResizeProxy) {
- window.removeEventListener('resize', this.windowResizeProxy);
- this.windowResizeProxy = null;
- }
- };
- // Dispatcher
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.hydrate = function () {
- var _this = this;
- this.state = this.buildInitialState();
- var rawSources = this.opt('eventSources') || [];
- var singleRawSource = this.opt('events');
- var sources = []; // parsed
- if (singleRawSource) {
- rawSources.unshift(singleRawSource);
- }
- for (var _i = 0, rawSources_1 = rawSources; _i < rawSources_1.length; _i++) {
- var rawSource = rawSources_1[_i];
- var source = parseEventSource(rawSource, this);
- if (source) {
- sources.push(source);
- }
- }
- this.batchRendering(function () {
- _this.dispatch({ type: 'INIT' }); // pass in sources here?
- _this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: sources });
- _this.dispatch({
- type: 'SET_VIEW_TYPE',
- viewType: _this.opt('defaultView') || _this.pluginSystem.hooks.defaultView
- });
- });
- };
- Calendar.prototype.buildInitialState = function () {
- return {
- viewType: null,
- loadingLevel: 0,
- eventSourceLoadingLevel: 0,
- currentDate: this.getInitialDate(),
- dateProfile: null,
- eventSources: {},
- eventStore: createEmptyEventStore(),
- dateSelection: null,
- eventSelection: '',
- eventDrag: null,
- eventResize: null
- };
- };
- Calendar.prototype.dispatch = function (action) {
- this.actionQueue.push(action);
- if (!this.isReducing) {
- this.isReducing = true;
- var oldState = this.state;
- while (this.actionQueue.length) {
- this.state = this.reduce(this.state, this.actionQueue.shift(), this);
- }
- var newState = this.state;
- this.isReducing = false;
- if (!oldState.loadingLevel && newState.loadingLevel) {
- this.publiclyTrigger('loading', [true]);
- }
- else if (oldState.loadingLevel && !newState.loadingLevel) {
- this.publiclyTrigger('loading', [false]);
- }
- var view = this.component && this.component.view;
- if (oldState.eventStore !== newState.eventStore) {
- if (oldState.eventStore) {
- this.isEventsUpdated = true;
- }
- }
- if (oldState.dateProfile !== newState.dateProfile) {
- if (oldState.dateProfile && view) { // why would view be null!?
- this.publiclyTrigger('datesDestroy', [
- {
- view: view,
- el: view.el
- }
- ]);
- }
- this.isDatesUpdated = true;
- }
- if (oldState.viewType !== newState.viewType) {
- if (oldState.viewType && view) { // why would view be null!?
- this.publiclyTrigger('viewSkeletonDestroy', [
- {
- view: view,
- el: view.el
- }
- ]);
- }
- this.isViewUpdated = true;
- }
- this.requestRerender();
- }
- };
- Calendar.prototype.reduce = function (state, action, calendar) {
- return reduce(state, action, calendar);
- };
- // Render Queue
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.requestRerender = function () {
- this.needsRerender = true;
- this.delayedRerender(); // will call a debounced-version of tryRerender
- };
- Calendar.prototype.tryRerender = function () {
- if (this.component && // must be accepting renders
- this.needsRerender && // indicates that a rerender was requested
- !this.renderingPauseDepth && // not paused
- !this.isRendering // not currently in the render loop
- ) {
- this.executeRender();
- }
- };
- Calendar.prototype.batchRendering = function (func) {
- this.renderingPauseDepth++;
- func();
- this.renderingPauseDepth--;
- if (this.needsRerender) {
- this.requestRerender();
- }
- };
- // Rendering
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.executeRender = function () {
- // clear these BEFORE the render so that new values will accumulate during render
- this.needsRerender = false;
- this.isRendering = true;
- this.renderComponent();
- this.isRendering = false;
- // received a rerender request while rendering
- if (this.needsRerender) {
- this.delayedRerender();
- }
- };
- /*
- don't call this directly. use executeRender instead
- */
- Calendar.prototype.renderComponent = function () {
- var _a = this, state = _a.state, component = _a.component;
- var viewType = state.viewType;
- var viewSpec = this.viewSpecs[viewType];
- if (!viewSpec) {
- throw new Error("View type \"" + viewType + "\" is not valid");
- }
- // if event sources are still loading and progressive rendering hasn't been enabled,
- // keep rendering the last fully loaded set of events
- var renderableEventStore = this.renderableEventStore =
- (state.eventSourceLoadingLevel && !this.opt('progressiveEventRendering')) ?
- this.renderableEventStore :
- state.eventStore;
- var eventUiSingleBase = this.buildEventUiSingleBase(viewSpec.options);
- var eventUiBySource = this.buildEventUiBySource(state.eventSources);
- var eventUiBases = this.eventUiBases = this.buildEventUiBases(renderableEventStore.defs, eventUiSingleBase, eventUiBySource);
- component.receiveProps(__assign({}, state, { viewSpec: viewSpec, dateProfileGenerator: this.dateProfileGenerators[viewType], dateProfile: state.dateProfile, eventStore: renderableEventStore, eventUiBases: eventUiBases, dateSelection: state.dateSelection, eventSelection: state.eventSelection, eventDrag: state.eventDrag, eventResize: state.eventResize }), this.buildComponentContext(this.theme, this.dateEnv, this.optionsManager.computed));
- if (this.isViewUpdated) {
- this.isViewUpdated = false;
- this.publiclyTrigger('viewSkeletonRender', [
- {
- view: component.view,
- el: component.view.el
- }
- ]);
- }
- if (this.isDatesUpdated) {
- this.isDatesUpdated = false;
- this.publiclyTrigger('datesRender', [
- {
- view: component.view,
- el: component.view.el
- }
- ]);
- }
- if (this.isEventsUpdated) {
- this.isEventsUpdated = false;
- }
- this.releaseAfterSizingTriggers();
- };
- // Options
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.setOption = function (name, val) {
- var _a;
- this.mutateOptions((_a = {}, _a[name] = val, _a), [], true);
- };
- Calendar.prototype.getOption = function (name) {
- return this.optionsManager.computed[name];
- };
- Calendar.prototype.opt = function (name) {
- return this.optionsManager.computed[name];
- };
- Calendar.prototype.viewOpt = function (name) {
- return this.viewOpts()[name];
- };
- Calendar.prototype.viewOpts = function () {
- return this.viewSpecs[this.state.viewType].options;
- };
- /*
- handles option changes (like a diff)
- */
- Calendar.prototype.mutateOptions = function (updates, removals, isDynamic, deepEqual) {
- var _this = this;
- var changeHandlers = this.pluginSystem.hooks.optionChangeHandlers;
- var normalUpdates = {};
- var specialUpdates = {};
- var oldDateEnv = this.dateEnv; // do this before handleOptions
- var isTimeZoneDirty = false;
- var isSizeDirty = false;
- var anyDifficultOptions = Boolean(removals.length);
- for (var name_1 in updates) {
- if (changeHandlers[name_1]) {
- specialUpdates[name_1] = updates[name_1];
- }
- else {
- normalUpdates[name_1] = updates[name_1];
- }
- }
- for (var name_2 in normalUpdates) {
- if (/^(height|contentHeight|aspectRatio)$/.test(name_2)) {
- isSizeDirty = true;
- }
- else if (/^(defaultDate|defaultView)$/.test(name_2)) ;
- else {
- anyDifficultOptions = true;
- if (name_2 === 'timeZone') {
- isTimeZoneDirty = true;
- }
- }
- }
- this.optionsManager.mutate(normalUpdates, removals, isDynamic);
- if (anyDifficultOptions) {
- this.handleOptions(this.optionsManager.computed);
- }
- this.batchRendering(function () {
- if (anyDifficultOptions) {
- if (isTimeZoneDirty) {
- _this.dispatch({
- type: 'CHANGE_TIMEZONE',
- oldDateEnv: oldDateEnv
- });
- }
- /* HACK
- has the same effect as calling this.requestRerender()
- but recomputes the state's dateProfile
- */
- _this.dispatch({
- type: 'SET_VIEW_TYPE',
- viewType: _this.state.viewType
- });
- }
- else if (isSizeDirty) {
- _this.updateSize();
- }
- // special updates
- if (deepEqual) {
- for (var name_3 in specialUpdates) {
- changeHandlers[name_3](specialUpdates[name_3], _this, deepEqual);
- }
- }
- });
- };
- /*
- rebuilds things based off of a complete set of refined options
- */
- Calendar.prototype.handleOptions = function (options) {
- var _this = this;
- var pluginHooks = this.pluginSystem.hooks;
- this.defaultAllDayEventDuration = createDuration(options.defaultAllDayEventDuration);
- this.defaultTimedEventDuration = createDuration(options.defaultTimedEventDuration);
- this.delayedRerender = this.buildDelayedRerender(options.rerenderDelay);
- this.theme = this.buildTheme(options);
- var available = this.parseRawLocales(options.locales);
- this.availableRawLocales = available.map;
- var locale = this.buildLocale(options.locale || available.defaultCode, available.map);
- this.dateEnv = this.buildDateEnv(locale, options.timeZone, pluginHooks.namedTimeZonedImpl, options.firstDay, options.weekNumberCalculation, options.weekLabel, pluginHooks.cmdFormatter);
- this.selectionConfig = this.buildSelectionConfig(options); // needs dateEnv. do after :(
- // ineffecient to do every time?
- this.viewSpecs = buildViewSpecs(pluginHooks.views, this.optionsManager);
- // ineffecient to do every time?
- this.dateProfileGenerators = mapHash(this.viewSpecs, function (viewSpec) {
- return new viewSpec.class.prototype.dateProfileGeneratorClass(viewSpec, _this);
- });
- };
- Calendar.prototype.getAvailableLocaleCodes = function () {
- return Object.keys(this.availableRawLocales);
- };
- Calendar.prototype._buildSelectionConfig = function (rawOpts) {
- return processScopedUiProps('select', rawOpts, this);
- };
- Calendar.prototype._buildEventUiSingleBase = function (rawOpts) {
- if (rawOpts.editable) { // so 'editable' affected events
- rawOpts = __assign({}, rawOpts, { eventEditable: true });
- }
- return processScopedUiProps('event', rawOpts, this);
- };
- // Trigger
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.hasPublicHandlers = function (name) {
- return this.hasHandlers(name) ||
- this.opt(name); // handler specified in options
- };
- Calendar.prototype.publiclyTrigger = function (name, args) {
- var optHandler = this.opt(name);
- this.triggerWith(name, this, args);
- if (optHandler) {
- return optHandler.apply(this, args);
- }
- };
- Calendar.prototype.publiclyTriggerAfterSizing = function (name, args) {
- var afterSizingTriggers = this.afterSizingTriggers;
- (afterSizingTriggers[name] || (afterSizingTriggers[name] = [])).push(args);
- };
- Calendar.prototype.releaseAfterSizingTriggers = function () {
- var afterSizingTriggers = this.afterSizingTriggers;
- for (var name_4 in afterSizingTriggers) {
- for (var _i = 0, _a = afterSizingTriggers[name_4]; _i < _a.length; _i++) {
- var args = _a[_i];
- this.publiclyTrigger(name_4, args);
- }
- }
- this.afterSizingTriggers = {};
- };
- // View
- // -----------------------------------------------------------------------------------------------------------------
- // Returns a boolean about whether the view is okay to instantiate at some point
- Calendar.prototype.isValidViewType = function (viewType) {
- return Boolean(this.viewSpecs[viewType]);
- };
- Calendar.prototype.changeView = function (viewType, dateOrRange) {
- var dateMarker = null;
- if (dateOrRange) {
- if (dateOrRange.start && dateOrRange.end) { // a range
- this.optionsManager.mutate({ visibleRange: dateOrRange }, []); // will not rerender
- this.handleOptions(this.optionsManager.computed); // ...but yuck
- }
- else { // a date
- dateMarker = this.dateEnv.createMarker(dateOrRange); // just like gotoDate
- }
- }
- this.unselect();
- this.dispatch({
- type: 'SET_VIEW_TYPE',
- viewType: viewType,
- dateMarker: dateMarker
- });
- };
- // Forces navigation to a view for the given date.
- // `viewType` can be a specific view name or a generic one like "week" or "day".
- // needs to change
- Calendar.prototype.zoomTo = function (dateMarker, viewType) {
- var spec;
- viewType = viewType || 'day'; // day is default zoom
- spec = this.viewSpecs[viewType] ||
- this.getUnitViewSpec(viewType);
- this.unselect();
- if (spec) {
- this.dispatch({
- type: 'SET_VIEW_TYPE',
- viewType: spec.type,
- dateMarker: dateMarker
- });
- }
- else {
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: dateMarker
- });
- }
- };
- // Given a duration singular unit, like "week" or "day", finds a matching view spec.
- // Preference is given to views that have corresponding buttons.
- Calendar.prototype.getUnitViewSpec = function (unit) {
- var component = this.component;
- var viewTypes = [];
- var i;
- var spec;
- // put views that have buttons first. there will be duplicates, but oh
- if (component.header) {
- viewTypes.push.apply(viewTypes, component.header.viewsWithButtons);
- }
- if (component.footer) {
- viewTypes.push.apply(viewTypes, component.footer.viewsWithButtons);
- }
- for (var viewType in this.viewSpecs) {
- viewTypes.push(viewType);
- }
- for (i = 0; i < viewTypes.length; i++) {
- spec = this.viewSpecs[viewTypes[i]];
- if (spec) {
- if (spec.singleUnit === unit) {
- return spec;
- }
- }
- }
- };
- // Current Date
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.getInitialDate = function () {
- var defaultDateInput = this.opt('defaultDate');
- // compute the initial ambig-timezone date
- if (defaultDateInput != null) {
- return this.dateEnv.createMarker(defaultDateInput);
- }
- else {
- return this.getNow(); // getNow already returns unzoned
- }
- };
- Calendar.prototype.prev = function () {
- this.unselect();
- this.dispatch({ type: 'PREV' });
- };
- Calendar.prototype.next = function () {
- this.unselect();
- this.dispatch({ type: 'NEXT' });
- };
- Calendar.prototype.prevYear = function () {
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.dateEnv.addYears(this.state.currentDate, -1)
- });
- };
- Calendar.prototype.nextYear = function () {
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.dateEnv.addYears(this.state.currentDate, 1)
- });
- };
- Calendar.prototype.today = function () {
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.getNow()
- });
- };
- Calendar.prototype.gotoDate = function (zonedDateInput) {
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.dateEnv.createMarker(zonedDateInput)
- });
- };
- Calendar.prototype.incrementDate = function (deltaInput) {
- var delta = createDuration(deltaInput);
- if (delta) { // else, warn about invalid input?
- this.unselect();
- this.dispatch({
- type: 'SET_DATE',
- dateMarker: this.dateEnv.add(this.state.currentDate, delta)
- });
- }
- };
- // for external API
- Calendar.prototype.getDate = function () {
- return this.dateEnv.toDate(this.state.currentDate);
- };
- // Date Formatting Utils
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.formatDate = function (d, formatter) {
- var dateEnv = this.dateEnv;
- return dateEnv.format(dateEnv.createMarker(d), createFormatter(formatter));
- };
- // `settings` is for formatter AND isEndExclusive
- Calendar.prototype.formatRange = function (d0, d1, settings) {
- var dateEnv = this.dateEnv;
- return dateEnv.formatRange(dateEnv.createMarker(d0), dateEnv.createMarker(d1), createFormatter(settings, this.opt('defaultRangeSeparator')), settings);
- };
- Calendar.prototype.formatIso = function (d, omitTime) {
- var dateEnv = this.dateEnv;
- return dateEnv.formatIso(dateEnv.createMarker(d), { omitTime: omitTime });
- };
- // Sizing
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.windowResize = function (ev) {
- if (!this.isHandlingWindowResize &&
- this.component && // why?
- ev.target === window // not a jqui resize event
- ) {
- this.isHandlingWindowResize = true;
- this.updateSize();
- this.publiclyTrigger('windowResize', [this.view]);
- this.isHandlingWindowResize = false;
- }
- };
- Calendar.prototype.updateSize = function () {
- if (this.component) { // when?
- this.component.updateSize(true);
- }
- };
- // Component Registration
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.registerInteractiveComponent = function (component, settingsInput) {
- var settings = parseInteractionSettings(component, settingsInput);
- var DEFAULT_INTERACTIONS = [
- EventClicking,
- EventHovering
- ];
- var interactionClasses = DEFAULT_INTERACTIONS.concat(this.pluginSystem.hooks.componentInteractions);
- var interactions = interactionClasses.map(function (interactionClass) {
- return new interactionClass(settings);
- });
- this.interactionsStore[component.uid] = interactions;
- interactionSettingsStore[component.uid] = settings;
- };
- Calendar.prototype.unregisterInteractiveComponent = function (component) {
- for (var _i = 0, _a = this.interactionsStore[component.uid]; _i < _a.length; _i++) {
- var listener = _a[_i];
- listener.destroy();
- }
- delete this.interactionsStore[component.uid];
- delete interactionSettingsStore[component.uid];
- };
- // Date Selection / Event Selection / DayClick
- // -----------------------------------------------------------------------------------------------------------------
- // this public method receives start/end dates in any format, with any timezone
- // NOTE: args were changed from v3
- Calendar.prototype.select = function (dateOrObj, endDate) {
- var selectionInput;
- if (endDate == null) {
- if (dateOrObj.start != null) {
- selectionInput = dateOrObj;
- }
- else {
- selectionInput = {
- start: dateOrObj,
- end: null
- };
- }
- }
- else {
- selectionInput = {
- start: dateOrObj,
- end: endDate
- };
- }
- var selection = parseDateSpan(selectionInput, this.dateEnv, createDuration({ days: 1 }) // TODO: cache this?
- );
- if (selection) { // throw parse error otherwise?
- this.dispatch({ type: 'SELECT_DATES', selection: selection });
- this.triggerDateSelect(selection);
- }
- };
- // public method
- Calendar.prototype.unselect = function (pev) {
- if (this.state.dateSelection) {
- this.dispatch({ type: 'UNSELECT_DATES' });
- this.triggerDateUnselect(pev);
- }
- };
- Calendar.prototype.triggerDateSelect = function (selection, pev) {
- var arg = __assign({}, this.buildDateSpanApi(selection), { jsEvent: pev ? pev.origEvent : null, view: this.view });
- this.publiclyTrigger('select', [arg]);
- };
- Calendar.prototype.triggerDateUnselect = function (pev) {
- this.publiclyTrigger('unselect', [
- {
- jsEvent: pev ? pev.origEvent : null,
- view: this.view
- }
- ]);
- };
- // TODO: receive pev?
- Calendar.prototype.triggerDateClick = function (dateSpan, dayEl, view, ev) {
- var arg = __assign({}, this.buildDatePointApi(dateSpan), { dayEl: dayEl, jsEvent: ev, // Is this always a mouse event? See #4655
- view: view });
- this.publiclyTrigger('dateClick', [arg]);
- };
- Calendar.prototype.buildDatePointApi = function (dateSpan) {
- var props = {};
- for (var _i = 0, _a = this.pluginSystem.hooks.datePointTransforms; _i < _a.length; _i++) {
- var transform = _a[_i];
- __assign(props, transform(dateSpan, this));
- }
- __assign(props, buildDatePointApi(dateSpan, this.dateEnv));
- return props;
- };
- Calendar.prototype.buildDateSpanApi = function (dateSpan) {
- var props = {};
- for (var _i = 0, _a = this.pluginSystem.hooks.dateSpanTransforms; _i < _a.length; _i++) {
- var transform = _a[_i];
- __assign(props, transform(dateSpan, this));
- }
- __assign(props, buildDateSpanApi(dateSpan, this.dateEnv));
- return props;
- };
- // Date Utils
- // -----------------------------------------------------------------------------------------------------------------
- // Returns a DateMarker for the current date, as defined by the client's computer or from the `now` option
- Calendar.prototype.getNow = function () {
- var now = this.opt('now');
- if (typeof now === 'function') {
- now = now();
- }
- if (now == null) {
- return this.dateEnv.createNowMarker();
- }
- return this.dateEnv.createMarker(now);
- };
- // Event-Date Utilities
- // -----------------------------------------------------------------------------------------------------------------
- // Given an event's allDay status and start date, return what its fallback end date should be.
- // TODO: rename to computeDefaultEventEnd
- Calendar.prototype.getDefaultEventEnd = function (allDay, marker) {
- var end = marker;
- if (allDay) {
- end = startOfDay(end);
- end = this.dateEnv.add(end, this.defaultAllDayEventDuration);
- }
- else {
- end = this.dateEnv.add(end, this.defaultTimedEventDuration);
- }
- return end;
- };
- // Public Events API
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.addEvent = function (eventInput, sourceInput) {
- if (eventInput instanceof EventApi) {
- var def = eventInput._def;
- var instance = eventInput._instance;
- // not already present? don't want to add an old snapshot
- if (!this.state.eventStore.defs[def.defId]) {
- this.dispatch({
- type: 'ADD_EVENTS',
- eventStore: eventTupleToStore({ def: def, instance: instance }) // TODO: better util for two args?
- });
- }
- return eventInput;
- }
- var sourceId;
- if (sourceInput instanceof EventSourceApi) {
- sourceId = sourceInput.internalEventSource.sourceId;
- }
- else if (sourceInput != null) {
- var sourceApi = this.getEventSourceById(sourceInput); // TODO: use an internal function
- if (!sourceApi) {
- console.warn('Could not find an event source with ID "' + sourceInput + '"'); // TODO: test
- return null;
- }
- else {
- sourceId = sourceApi.internalEventSource.sourceId;
- }
- }
- var tuple = parseEvent(eventInput, sourceId, this);
- if (tuple) {
- this.dispatch({
- type: 'ADD_EVENTS',
- eventStore: eventTupleToStore(tuple)
- });
- return new EventApi(this, tuple.def, tuple.def.recurringDef ? null : tuple.instance);
- }
- return null;
- };
- // TODO: optimize
- Calendar.prototype.getEventById = function (id) {
- var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances;
- id = String(id);
- for (var defId in defs) {
- var def = defs[defId];
- if (def.publicId === id) {
- if (def.recurringDef) {
- return new EventApi(this, def, null);
- }
- else {
- for (var instanceId in instances) {
- var instance = instances[instanceId];
- if (instance.defId === def.defId) {
- return new EventApi(this, def, instance);
- }
- }
- }
- }
- }
- return null;
- };
- Calendar.prototype.getEvents = function () {
- var _a = this.state.eventStore, defs = _a.defs, instances = _a.instances;
- var eventApis = [];
- for (var id in instances) {
- var instance = instances[id];
- var def = defs[instance.defId];
- eventApis.push(new EventApi(this, def, instance));
- }
- return eventApis;
- };
- Calendar.prototype.removeAllEvents = function () {
- this.dispatch({ type: 'REMOVE_ALL_EVENTS' });
- };
- Calendar.prototype.rerenderEvents = function () {
- this.dispatch({ type: 'RESET_EVENTS' });
- };
- // Public Event Sources API
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.getEventSources = function () {
- var sourceHash = this.state.eventSources;
- var sourceApis = [];
- for (var internalId in sourceHash) {
- sourceApis.push(new EventSourceApi(this, sourceHash[internalId]));
- }
- return sourceApis;
- };
- Calendar.prototype.getEventSourceById = function (id) {
- var sourceHash = this.state.eventSources;
- id = String(id);
- for (var sourceId in sourceHash) {
- if (sourceHash[sourceId].publicId === id) {
- return new EventSourceApi(this, sourceHash[sourceId]);
- }
- }
- return null;
- };
- Calendar.prototype.addEventSource = function (sourceInput) {
- if (sourceInput instanceof EventSourceApi) {
- // not already present? don't want to add an old snapshot
- if (!this.state.eventSources[sourceInput.internalEventSource.sourceId]) {
- this.dispatch({
- type: 'ADD_EVENT_SOURCES',
- sources: [sourceInput.internalEventSource]
- });
- }
- return sourceInput;
- }
- var eventSource = parseEventSource(sourceInput, this);
- if (eventSource) { // TODO: error otherwise?
- this.dispatch({ type: 'ADD_EVENT_SOURCES', sources: [eventSource] });
- return new EventSourceApi(this, eventSource);
- }
- return null;
- };
- Calendar.prototype.removeAllEventSources = function () {
- this.dispatch({ type: 'REMOVE_ALL_EVENT_SOURCES' });
- };
- Calendar.prototype.refetchEvents = function () {
- this.dispatch({ type: 'FETCH_EVENT_SOURCES' });
- };
- // Scroll
- // -----------------------------------------------------------------------------------------------------------------
- Calendar.prototype.scrollToTime = function (timeInput) {
- var duration = createDuration(timeInput);
- if (duration) {
- this.component.view.scrollToDuration(duration);
- }
- };
- return Calendar;
- }());
- EmitterMixin.mixInto(Calendar);
- // for memoizers
- // -----------------------------------------------------------------------------------------------------------------
- function buildComponentContext$1(theme, dateEnv, options) {
- return new ComponentContext(this, theme, dateEnv, options, null);
- }
- function buildDateEnv(locale, timeZone, namedTimeZoneImpl, firstDay, weekNumberCalculation, weekLabel, cmdFormatter) {
- return new DateEnv({
- calendarSystem: 'gregory',
- timeZone: timeZone,
- namedTimeZoneImpl: namedTimeZoneImpl,
- locale: locale,
- weekNumberCalculation: weekNumberCalculation,
- firstDay: firstDay,
- weekLabel: weekLabel,
- cmdFormatter: cmdFormatter
- });
- }
- function buildTheme(calendarOptions) {
- var themeClass = this.pluginSystem.hooks.themeClasses[calendarOptions.themeSystem] || StandardTheme;
- return new themeClass(calendarOptions);
- }
- function buildDelayedRerender(wait) {
- var func = this.tryRerender.bind(this);
- if (wait != null) {
- func = debounce(func, wait);
- }
- return func;
- }
- function buildEventUiBySource(eventSources) {
- return mapHash(eventSources, function (eventSource) {
- return eventSource.ui;
- });
- }
- function buildEventUiBases(eventDefs, eventUiSingleBase, eventUiBySource) {
- var eventUiBases = { '': eventUiSingleBase };
- for (var defId in eventDefs) {
- var def = eventDefs[defId];
- if (def.sourceId && eventUiBySource[def.sourceId]) {
- eventUiBases[defId] = eventUiBySource[def.sourceId];
- }
- }
- return eventUiBases;
- }
-
- var View = /** @class */ (function (_super) {
- __extends(View, _super);
- function View(viewSpec, parentEl) {
- var _this = _super.call(this, createElement('div', { className: 'fc-view fc-' + viewSpec.type + '-view' })) || this;
- _this.renderDatesMem = memoizeRendering(_this.renderDatesWrap, _this.unrenderDatesWrap);
- _this.renderBusinessHoursMem = memoizeRendering(_this.renderBusinessHours, _this.unrenderBusinessHours, [_this.renderDatesMem]);
- _this.renderDateSelectionMem = memoizeRendering(_this.renderDateSelectionWrap, _this.unrenderDateSelectionWrap, [_this.renderDatesMem]);
- _this.renderEventsMem = memoizeRendering(_this.renderEvents, _this.unrenderEvents, [_this.renderDatesMem]);
- _this.renderEventSelectionMem = memoizeRendering(_this.renderEventSelectionWrap, _this.unrenderEventSelectionWrap, [_this.renderEventsMem]);
- _this.renderEventDragMem = memoizeRendering(_this.renderEventDragWrap, _this.unrenderEventDragWrap, [_this.renderDatesMem]);
- _this.renderEventResizeMem = memoizeRendering(_this.renderEventResizeWrap, _this.unrenderEventResizeWrap, [_this.renderDatesMem]);
- _this.viewSpec = viewSpec;
- _this.type = viewSpec.type;
- parentEl.appendChild(_this.el);
- _this.initialize();
- return _this;
- }
- View.prototype.initialize = function () {
- };
- Object.defineProperty(View.prototype, "activeStart", {
- // Date Setting/Unsetting
- // -----------------------------------------------------------------------------------------------------------------
- get: function () {
- return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.start);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(View.prototype, "activeEnd", {
- get: function () {
- return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.end);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(View.prototype, "currentStart", {
- get: function () {
- return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.start);
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(View.prototype, "currentEnd", {
- get: function () {
- return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.end);
- },
- enumerable: true,
- configurable: true
- });
- // General Rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.render = function (props, context) {
- this.renderDatesMem(props.dateProfile);
- this.renderBusinessHoursMem(props.businessHours);
- this.renderDateSelectionMem(props.dateSelection);
- this.renderEventsMem(props.eventStore);
- this.renderEventSelectionMem(props.eventSelection);
- this.renderEventDragMem(props.eventDrag);
- this.renderEventResizeMem(props.eventResize);
- };
- View.prototype.beforeUpdate = function () {
- this.addScroll(this.queryScroll());
- };
- View.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderDatesMem.unrender(); // should unrender everything else
- };
- // Sizing
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.updateSize = function (isResize, viewHeight, isAuto) {
- var calendar = this.context.calendar;
- if (isResize) {
- this.addScroll(this.queryScroll()); // NOTE: same code as in beforeUpdate
- }
- if (isResize || // HACKS...
- calendar.isViewUpdated ||
- calendar.isDatesUpdated ||
- calendar.isEventsUpdated) {
- // sort of the catch-all sizing
- // anything that might cause dimension changes
- this.updateBaseSize(isResize, viewHeight, isAuto);
- }
- // NOTE: popScroll is called by CalendarComponent
- };
- View.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
- };
- // Date Rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderDatesWrap = function (dateProfile) {
- this.renderDates(dateProfile);
- this.addScroll({
- duration: createDuration(this.context.options.scrollTime)
- });
- };
- View.prototype.unrenderDatesWrap = function () {
- this.stopNowIndicator();
- this.unrenderDates();
- };
- View.prototype.renderDates = function (dateProfile) { };
- View.prototype.unrenderDates = function () { };
- // Business Hours
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderBusinessHours = function (businessHours) { };
- View.prototype.unrenderBusinessHours = function () { };
- // Date Selection
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderDateSelectionWrap = function (selection) {
- if (selection) {
- this.renderDateSelection(selection);
- }
- };
- View.prototype.unrenderDateSelectionWrap = function (selection) {
- if (selection) {
- this.unrenderDateSelection(selection);
- }
- };
- View.prototype.renderDateSelection = function (selection) { };
- View.prototype.unrenderDateSelection = function (selection) { };
- // Event Rendering
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderEvents = function (eventStore) { };
- View.prototype.unrenderEvents = function () { };
- // util for subclasses
- View.prototype.sliceEvents = function (eventStore, allDay) {
- var props = this.props;
- return sliceEventStore(eventStore, props.eventUiBases, props.dateProfile.activeRange, allDay ? this.context.nextDayThreshold : null).fg;
- };
- // Event Selection
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderEventSelectionWrap = function (instanceId) {
- if (instanceId) {
- this.renderEventSelection(instanceId);
- }
- };
- View.prototype.unrenderEventSelectionWrap = function (instanceId) {
- if (instanceId) {
- this.unrenderEventSelection(instanceId);
- }
- };
- View.prototype.renderEventSelection = function (instanceId) { };
- View.prototype.unrenderEventSelection = function (instanceId) { };
- // Event Drag
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderEventDragWrap = function (state) {
- if (state) {
- this.renderEventDrag(state);
- }
- };
- View.prototype.unrenderEventDragWrap = function (state) {
- if (state) {
- this.unrenderEventDrag(state);
- }
- };
- View.prototype.renderEventDrag = function (state) { };
- View.prototype.unrenderEventDrag = function (state) { };
- // Event Resize
- // -----------------------------------------------------------------------------------------------------------------
- View.prototype.renderEventResizeWrap = function (state) {
- if (state) {
- this.renderEventResize(state);
- }
- };
- View.prototype.unrenderEventResizeWrap = function (state) {
- if (state) {
- this.unrenderEventResize(state);
- }
- };
- View.prototype.renderEventResize = function (state) { };
- View.prototype.unrenderEventResize = function (state) { };
- /* Now Indicator
- ------------------------------------------------------------------------------------------------------------------*/
- // Immediately render the current time indicator and begins re-rendering it at an interval,
- // which is defined by this.getNowIndicatorUnit().
- // TODO: somehow do this for the current whole day's background too
- // USAGE: must be called manually from subclasses' render methods! don't need to call stopNowIndicator tho
- View.prototype.startNowIndicator = function (dateProfile, dateProfileGenerator) {
- var _this = this;
- var _a = this.context, calendar = _a.calendar, dateEnv = _a.dateEnv, options = _a.options;
- var unit;
- var update;
- var delay; // ms wait value
- if (options.nowIndicator && !this.initialNowDate) {
- unit = this.getNowIndicatorUnit(dateProfile, dateProfileGenerator);
- if (unit) {
- update = this.updateNowIndicator.bind(this);
- this.initialNowDate = calendar.getNow();
- this.initialNowQueriedMs = new Date().valueOf();
- // wait until the beginning of the next interval
- delay = dateEnv.add(dateEnv.startOf(this.initialNowDate, unit), createDuration(1, unit)).valueOf() - this.initialNowDate.valueOf();
- // TODO: maybe always use setTimeout, waiting until start of next unit
- this.nowIndicatorTimeoutID = setTimeout(function () {
- _this.nowIndicatorTimeoutID = null;
- update();
- if (unit === 'second') {
- delay = 1000; // every second
- }
- else {
- delay = 1000 * 60; // otherwise, every minute
- }
- _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval
- }, delay);
- }
- // rendering will be initiated in updateSize
- }
- };
- // rerenders the now indicator, computing the new current time from the amount of time that has passed
- // since the initial getNow call.
- View.prototype.updateNowIndicator = function () {
- if (this.props.dateProfile && // a way to determine if dates were rendered yet
- this.initialNowDate // activated before?
- ) {
- this.unrenderNowIndicator(); // won't unrender if unnecessary
- this.renderNowIndicator(addMs(this.initialNowDate, new Date().valueOf() - this.initialNowQueriedMs));
- this.isNowIndicatorRendered = true;
- }
- };
- // Immediately unrenders the view's current time indicator and stops any re-rendering timers.
- // Won't cause side effects if indicator isn't rendered.
- View.prototype.stopNowIndicator = function () {
- if (this.nowIndicatorTimeoutID) {
- clearTimeout(this.nowIndicatorTimeoutID);
- this.nowIndicatorTimeoutID = null;
- }
- if (this.nowIndicatorIntervalID) {
- clearInterval(this.nowIndicatorIntervalID);
- this.nowIndicatorIntervalID = null;
- }
- if (this.isNowIndicatorRendered) {
- this.unrenderNowIndicator();
- this.isNowIndicatorRendered = false;
- }
- };
- View.prototype.getNowIndicatorUnit = function (dateProfile, dateProfileGenerator) {
- // subclasses should implement
- };
- // Renders a current time indicator at the given datetime
- View.prototype.renderNowIndicator = function (date) {
- // SUBCLASSES MUST PASS TO CHILDREN!
- };
- // Undoes the rendering actions from renderNowIndicator
- View.prototype.unrenderNowIndicator = function () {
- // SUBCLASSES MUST PASS TO CHILDREN!
- };
- /* Scroller
- ------------------------------------------------------------------------------------------------------------------*/
- View.prototype.addScroll = function (scroll, isForced) {
- if (isForced) {
- scroll.isForced = isForced;
- }
- __assign(this.queuedScroll || (this.queuedScroll = {}), scroll);
- };
- View.prototype.popScroll = function (isResize) {
- this.applyQueuedScroll(isResize);
- this.queuedScroll = null;
- };
- View.prototype.applyQueuedScroll = function (isResize) {
- if (this.queuedScroll) {
- this.applyScroll(this.queuedScroll, isResize);
- }
- };
- View.prototype.queryScroll = function () {
- var scroll = {};
- if (this.props.dateProfile) { // dates rendered yet?
- __assign(scroll, this.queryDateScroll());
- }
- return scroll;
- };
- View.prototype.applyScroll = function (scroll, isResize) {
- var duration = scroll.duration, isForced = scroll.isForced;
- if (duration != null && !isForced) {
- delete scroll.duration;
- if (this.props.dateProfile) { // dates rendered yet?
- __assign(scroll, this.computeDateScroll(duration));
- }
- }
- if (this.props.dateProfile) { // dates rendered yet?
- this.applyDateScroll(scroll);
- }
- };
- View.prototype.computeDateScroll = function (duration) {
- return {}; // subclasses must implement
- };
- View.prototype.queryDateScroll = function () {
- return {}; // subclasses must implement
- };
- View.prototype.applyDateScroll = function (scroll) {
- // subclasses must implement
- };
- // for API
- View.prototype.scrollToDuration = function (duration) {
- this.applyScroll({ duration: duration }, false);
- };
- return View;
- }(DateComponent));
- EmitterMixin.mixInto(View);
- View.prototype.usesMinMaxTime = false;
- View.prototype.dateProfileGeneratorClass = DateProfileGenerator;
-
- var FgEventRenderer = /** @class */ (function () {
- function FgEventRenderer() {
- this.segs = [];
- this.isSizeDirty = false;
- }
- FgEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) {
- this.context = context;
- this.rangeUpdated(); // called too frequently :(
- // render an `.el` on each seg
- // returns a subset of the segs. segs that were actually rendered
- segs = this.renderSegEls(segs, mirrorInfo);
- this.segs = segs;
- this.attachSegs(segs, mirrorInfo);
- this.isSizeDirty = true;
- triggerRenderedSegs(this.context, this.segs, Boolean(mirrorInfo));
- };
- FgEventRenderer.prototype.unrender = function (context, _segs, mirrorInfo) {
- triggerWillRemoveSegs(this.context, this.segs, Boolean(mirrorInfo));
- this.detachSegs(this.segs);
- this.segs = [];
- };
- // Updates values that rely on options and also relate to range
- FgEventRenderer.prototype.rangeUpdated = function () {
- var options = this.context.options;
- var displayEventTime;
- var displayEventEnd;
- this.eventTimeFormat = createFormatter(options.eventTimeFormat || this.computeEventTimeFormat(), options.defaultRangeSeparator);
- displayEventTime = options.displayEventTime;
- if (displayEventTime == null) {
- displayEventTime = this.computeDisplayEventTime(); // might be based off of range
- }
- displayEventEnd = options.displayEventEnd;
- if (displayEventEnd == null) {
- displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range
- }
- this.displayEventTime = displayEventTime;
- this.displayEventEnd = displayEventEnd;
- };
- // Renders and assigns an `el` property for each foreground event segment.
- // Only returns segments that successfully rendered.
- FgEventRenderer.prototype.renderSegEls = function (segs, mirrorInfo) {
- var html = '';
- var i;
- if (segs.length) { // don't build an empty html string
- // build a large concatenation of event segment HTML
- for (i = 0; i < segs.length; i++) {
- html += this.renderSegHtml(segs[i], mirrorInfo);
- }
- // Grab individual elements from the combined HTML string. Use each as the default rendering.
- // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.
- htmlToElements(html).forEach(function (el, i) {
- var seg = segs[i];
- if (el) {
- seg.el = el;
- }
- });
- segs = filterSegsViaEls(this.context, segs, Boolean(mirrorInfo));
- }
- return segs;
- };
- // Generic utility for generating the HTML classNames for an event segment's element
- FgEventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable, mirrorInfo) {
- var classes = [
- 'fc-event',
- seg.isStart ? 'fc-start' : 'fc-not-start',
- seg.isEnd ? 'fc-end' : 'fc-not-end'
- ].concat(seg.eventRange.ui.classNames);
- if (isDraggable) {
- classes.push('fc-draggable');
- }
- if (isResizable) {
- classes.push('fc-resizable');
- }
- if (mirrorInfo) {
- classes.push('fc-mirror');
- if (mirrorInfo.isDragging) {
- classes.push('fc-dragging');
- }
- if (mirrorInfo.isResizing) {
- classes.push('fc-resizing');
- }
- }
- return classes;
- };
- // Compute the text that should be displayed on an event's element.
- // `range` can be the Event object itself, or something range-like, with at least a `start`.
- // If event times are disabled, or the event has no time, will return a blank string.
- // If not specified, formatter will default to the eventTimeFormat setting,
- // and displayEnd will default to the displayEventEnd setting.
- FgEventRenderer.prototype.getTimeText = function (eventRange, formatter, displayEnd) {
- var def = eventRange.def, instance = eventRange.instance;
- return this._getTimeText(instance.range.start, def.hasEnd ? instance.range.end : null, def.allDay, formatter, displayEnd, instance.forcedStartTzo, instance.forcedEndTzo);
- };
- FgEventRenderer.prototype._getTimeText = function (start, end, allDay, formatter, displayEnd, forcedStartTzo, forcedEndTzo) {
- var dateEnv = this.context.dateEnv;
- if (formatter == null) {
- formatter = this.eventTimeFormat;
- }
- if (displayEnd == null) {
- displayEnd = this.displayEventEnd;
- }
- if (this.displayEventTime && !allDay) {
- if (displayEnd && end) {
- return dateEnv.formatRange(start, end, formatter, {
- forcedStartTzo: forcedStartTzo,
- forcedEndTzo: forcedEndTzo
- });
- }
- else {
- return dateEnv.format(start, formatter, {
- forcedTzo: forcedStartTzo
- });
- }
- }
- return '';
- };
- FgEventRenderer.prototype.computeEventTimeFormat = function () {
- return {
- hour: 'numeric',
- minute: '2-digit',
- omitZeroMinute: true
- };
- };
- FgEventRenderer.prototype.computeDisplayEventTime = function () {
- return true;
- };
- FgEventRenderer.prototype.computeDisplayEventEnd = function () {
- return true;
- };
- // Utility for generating event skin-related CSS properties
- FgEventRenderer.prototype.getSkinCss = function (ui) {
- return {
- 'background-color': ui.backgroundColor,
- 'border-color': ui.borderColor,
- color: ui.textColor
- };
- };
- FgEventRenderer.prototype.sortEventSegs = function (segs) {
- var specs = this.context.eventOrderSpecs;
- var objs = segs.map(buildSegCompareObj);
- objs.sort(function (obj0, obj1) {
- return compareByFieldSpecs(obj0, obj1, specs);
- });
- return objs.map(function (c) {
- return c._seg;
- });
- };
- FgEventRenderer.prototype.computeSizes = function (force) {
- if (force || this.isSizeDirty) {
- this.computeSegSizes(this.segs);
- }
- };
- FgEventRenderer.prototype.assignSizes = function (force) {
- if (force || this.isSizeDirty) {
- this.assignSegSizes(this.segs);
- this.isSizeDirty = false;
- }
- };
- FgEventRenderer.prototype.computeSegSizes = function (segs) {
- };
- FgEventRenderer.prototype.assignSegSizes = function (segs) {
- };
- // Manipulation on rendered segs
- FgEventRenderer.prototype.hideByHash = function (hash) {
- if (hash) {
- for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- if (hash[seg.eventRange.instance.instanceId]) {
- seg.el.style.visibility = 'hidden';
- }
- }
- }
- };
- FgEventRenderer.prototype.showByHash = function (hash) {
- if (hash) {
- for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- if (hash[seg.eventRange.instance.instanceId]) {
- seg.el.style.visibility = '';
- }
- }
- }
- };
- FgEventRenderer.prototype.selectByInstanceId = function (instanceId) {
- if (instanceId) {
- for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- var eventInstance = seg.eventRange.instance;
- if (eventInstance && eventInstance.instanceId === instanceId &&
- seg.el // necessary?
- ) {
- seg.el.classList.add('fc-selected');
- }
- }
- }
- };
- FgEventRenderer.prototype.unselectByInstanceId = function (instanceId) {
- if (instanceId) {
- for (var _i = 0, _a = this.segs; _i < _a.length; _i++) {
- var seg = _a[_i];
- if (seg.el) { // necessary?
- seg.el.classList.remove('fc-selected');
- }
- }
- }
- };
- return FgEventRenderer;
- }());
- // returns a object with all primitive props that can be compared
- function buildSegCompareObj(seg) {
- var eventDef = seg.eventRange.def;
- var range = seg.eventRange.instance.range;
- var start = range.start ? range.start.valueOf() : 0; // TODO: better support for open-range events
- var end = range.end ? range.end.valueOf() : 0; // "
- return __assign({}, eventDef.extendedProps, eventDef, { id: eventDef.publicId, start: start,
- end: end, duration: end - start, allDay: Number(eventDef.allDay), _seg: seg // for later retrieval
- });
- }
-
- /*
- TODO: when refactoring this class, make a new FillRenderer instance for each `type`
- */
- var FillRenderer = /** @class */ (function () {
- function FillRenderer() {
- this.fillSegTag = 'div';
- this.dirtySizeFlags = {};
- this.containerElsByType = {};
- this.segsByType = {};
- }
- FillRenderer.prototype.getSegsByType = function (type) {
- return this.segsByType[type] || [];
- };
- FillRenderer.prototype.renderSegs = function (type, context, segs) {
- var _a;
- this.context = context;
- var renderedSegs = this.renderSegEls(type, segs); // assignes `.el` to each seg. returns successfully rendered segs
- var containerEls = this.attachSegs(type, renderedSegs);
- if (containerEls) {
- (_a = (this.containerElsByType[type] || (this.containerElsByType[type] = []))).push.apply(_a, containerEls);
- }
- this.segsByType[type] = renderedSegs;
- if (type === 'bgEvent') {
- triggerRenderedSegs(context, renderedSegs, false); // isMirror=false
- }
- this.dirtySizeFlags[type] = true;
- };
- // Unrenders a specific type of fill that is currently rendered on the grid
- FillRenderer.prototype.unrender = function (type, context) {
- var segs = this.segsByType[type];
- if (segs) {
- if (type === 'bgEvent') {
- triggerWillRemoveSegs(context, segs, false); // isMirror=false
- }
- this.detachSegs(type, segs);
- }
- };
- // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.
- // Only returns segments that successfully rendered.
- FillRenderer.prototype.renderSegEls = function (type, segs) {
- var _this = this;
- var html = '';
- var i;
- if (segs.length) {
- // build a large concatenation of segment HTML
- for (i = 0; i < segs.length; i++) {
- html += this.renderSegHtml(type, segs[i]);
- }
- // Grab individual elements from the combined HTML string. Use each as the default rendering.
- // Then, compute the 'el' for each segment.
- htmlToElements(html).forEach(function (el, i) {
- var seg = segs[i];
- if (el) {
- seg.el = el;
- }
- });
- if (type === 'bgEvent') {
- segs = filterSegsViaEls(this.context, segs, false // isMirror. background events can never be mirror elements
- );
- }
- // correct element type? (would be bad if a non-TD were inserted into a table for example)
- segs = segs.filter(function (seg) {
- return elementMatches(seg.el, _this.fillSegTag);
- });
- }
- return segs;
- };
- // Builds the HTML needed for one fill segment. Generic enough to work with different types.
- FillRenderer.prototype.renderSegHtml = function (type, seg) {
- var css = null;
- var classNames = [];
- if (type !== 'highlight' && type !== 'businessHours') {
- css = {
- 'background-color': seg.eventRange.ui.backgroundColor
- };
- }
- if (type !== 'highlight') {
- classNames = classNames.concat(seg.eventRange.ui.classNames);
- }
- if (type === 'businessHours') {
- classNames.push('fc-bgevent');
- }
- else {
- classNames.push('fc-' + type.toLowerCase());
- }
- return '<' + this.fillSegTag +
- (classNames.length ? ' class="' + classNames.join(' ') + '"' : '') +
- (css ? ' style="' + cssToStr(css) + '"' : '') +
- '></' + this.fillSegTag + '>';
- };
- FillRenderer.prototype.detachSegs = function (type, segs) {
- var containerEls = this.containerElsByType[type];
- if (containerEls) {
- containerEls.forEach(removeElement);
- delete this.containerElsByType[type];
- }
- };
- FillRenderer.prototype.computeSizes = function (force) {
- for (var type in this.segsByType) {
- if (force || this.dirtySizeFlags[type]) {
- this.computeSegSizes(this.segsByType[type]);
- }
- }
- };
- FillRenderer.prototype.assignSizes = function (force) {
- for (var type in this.segsByType) {
- if (force || this.dirtySizeFlags[type]) {
- this.assignSegSizes(this.segsByType[type]);
- }
- }
- this.dirtySizeFlags = {};
- };
- FillRenderer.prototype.computeSegSizes = function (segs) {
- };
- FillRenderer.prototype.assignSegSizes = function (segs) {
- };
- return FillRenderer;
- }());
-
- var NamedTimeZoneImpl = /** @class */ (function () {
- function NamedTimeZoneImpl(timeZoneName) {
- this.timeZoneName = timeZoneName;
- }
- return NamedTimeZoneImpl;
- }());
-
- /*
- An abstraction for a dragging interaction originating on an event.
- Does higher-level things than PointerDragger, such as possibly:
- - a "mirror" that moves with the pointer
- - a minimum number of pixels or other criteria for a true drag to begin
-
- subclasses must emit:
- - pointerdown
- - dragstart
- - dragmove
- - pointerup
- - dragend
- */
- var ElementDragging = /** @class */ (function () {
- function ElementDragging(el) {
- this.emitter = new EmitterMixin();
- }
- ElementDragging.prototype.destroy = function () {
- };
- ElementDragging.prototype.setMirrorIsVisible = function (bool) {
- // optional if subclass doesn't want to support a mirror
- };
- ElementDragging.prototype.setMirrorNeedsRevert = function (bool) {
- // optional if subclass doesn't want to support a mirror
- };
- ElementDragging.prototype.setAutoScrollEnabled = function (bool) {
- // optional
- };
- return ElementDragging;
- }());
-
- function formatDate(dateInput, settings) {
- if (settings === void 0) { settings = {}; }
- var dateEnv = buildDateEnv$1(settings);
- var formatter = createFormatter(settings);
- var dateMeta = dateEnv.createMarkerMeta(dateInput);
- if (!dateMeta) { // TODO: warning?
- return '';
- }
- return dateEnv.format(dateMeta.marker, formatter, {
- forcedTzo: dateMeta.forcedTzo
- });
- }
- function formatRange(startInput, endInput, settings // mixture of env and formatter settings
- ) {
- var dateEnv = buildDateEnv$1(typeof settings === 'object' && settings ? settings : {}); // pass in if non-null object
- var formatter = createFormatter(settings, globalDefaults.defaultRangeSeparator);
- var startMeta = dateEnv.createMarkerMeta(startInput);
- var endMeta = dateEnv.createMarkerMeta(endInput);
- if (!startMeta || !endMeta) { // TODO: warning?
- return '';
- }
- return dateEnv.formatRange(startMeta.marker, endMeta.marker, formatter, {
- forcedStartTzo: startMeta.forcedTzo,
- forcedEndTzo: endMeta.forcedTzo,
- isEndExclusive: settings.isEndExclusive
- });
- }
- // TODO: more DRY and optimized
- function buildDateEnv$1(settings) {
- var locale = buildLocale(settings.locale || 'en', parseRawLocales([]).map); // TODO: don't hardcode 'en' everywhere
- // ensure required settings
- settings = __assign({ timeZone: globalDefaults.timeZone, calendarSystem: 'gregory' }, settings, { locale: locale });
- return new DateEnv(settings);
- }
-
- var DRAG_META_PROPS = {
- startTime: createDuration,
- duration: createDuration,
- create: Boolean,
- sourceId: String
- };
- var DRAG_META_DEFAULTS = {
- create: true
- };
- function parseDragMeta(raw) {
- var leftoverProps = {};
- var refined = refineProps(raw, DRAG_META_PROPS, DRAG_META_DEFAULTS, leftoverProps);
- refined.leftoverProps = leftoverProps;
- return refined;
- }
-
- // Computes a default column header formatting string if `colFormat` is not explicitly defined
- function computeFallbackHeaderFormat(datesRepDistinctDays, dayCnt) {
- // if more than one week row, or if there are a lot of columns with not much space,
- // put just the day numbers will be in each cell
- if (!datesRepDistinctDays || dayCnt > 10) {
- return { weekday: 'short' }; // "Sat"
- }
- else if (dayCnt > 1) {
- return { weekday: 'short', month: 'numeric', day: 'numeric', omitCommas: true }; // "Sat 11/12"
- }
- else {
- return { weekday: 'long' }; // "Saturday"
- }
- }
- function renderDateCell(dateMarker, dateProfile, datesRepDistinctDays, colCnt, colHeadFormat, context, colspan, otherAttrs) {
- var dateEnv = context.dateEnv, theme = context.theme, options = context.options;
- var isDateValid = rangeContainsMarker(dateProfile.activeRange, dateMarker); // TODO: called too frequently. cache somehow.
- var classNames = [
- 'fc-day-header',
- theme.getClass('widgetHeader')
- ];
- var innerHtml;
- if (typeof options.columnHeaderHtml === 'function') {
- innerHtml = options.columnHeaderHtml(dateEnv.toDate(dateMarker));
- }
- else if (typeof options.columnHeaderText === 'function') {
- innerHtml = htmlEscape(options.columnHeaderText(dateEnv.toDate(dateMarker)));
- }
- else {
- innerHtml = htmlEscape(dateEnv.format(dateMarker, colHeadFormat));
- }
- // if only one row of days, the classNames on the header can represent the specific days beneath
- if (datesRepDistinctDays) {
- classNames = classNames.concat(
- // includes the day-of-week class
- // noThemeHighlight=true (don't highlight the header)
- getDayClasses(dateMarker, dateProfile, context, true));
- }
- else {
- classNames.push('fc-' + DAY_IDS[dateMarker.getUTCDay()]); // only add the day-of-week class
- }
- return '' +
- '<th class="' + classNames.join(' ') + '"' +
- ((isDateValid && datesRepDistinctDays) ?
- ' data-date="' + dateEnv.formatIso(dateMarker, { omitTime: true }) + '"' :
- '') +
- (colspan > 1 ?
- ' colspan="' + colspan + '"' :
- '') +
- (otherAttrs ?
- ' ' + otherAttrs :
- '') +
- '>' +
- (isDateValid ?
- // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)
- buildGotoAnchorHtml(options, dateEnv, { date: dateMarker, forceOff: !datesRepDistinctDays || colCnt === 1 }, innerHtml) :
- // if not valid, display text, but no link
- innerHtml) +
- '</th>';
- }
-
- var DayHeader = /** @class */ (function (_super) {
- __extends(DayHeader, _super);
- function DayHeader(parentEl) {
- var _this = _super.call(this) || this;
- _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- _this.parentEl = parentEl;
- return _this;
- }
- DayHeader.prototype.render = function (props, context) {
- var dates = props.dates, datesRepDistinctDays = props.datesRepDistinctDays;
- var parts = [];
- this.renderSkeleton(context);
- if (props.renderIntroHtml) {
- parts.push(props.renderIntroHtml());
- }
- var colHeadFormat = createFormatter(context.options.columnHeaderFormat ||
- computeFallbackHeaderFormat(datesRepDistinctDays, dates.length));
- for (var _i = 0, dates_1 = dates; _i < dates_1.length; _i++) {
- var date = dates_1[_i];
- parts.push(renderDateCell(date, props.dateProfile, datesRepDistinctDays, dates.length, colHeadFormat, context));
- }
- if (context.isRtl) {
- parts.reverse();
- }
- this.thead.innerHTML = '<tr>' + parts.join('') + '</tr>';
- };
- DayHeader.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderSkeleton.unrender();
- };
- DayHeader.prototype._renderSkeleton = function (context) {
- var theme = context.theme;
- var parentEl = this.parentEl;
- parentEl.innerHTML = ''; // because might be nbsp
- parentEl.appendChild(this.el = htmlToElement('<div class="fc-row ' + theme.getClass('headerRow') + '">' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- '<thead></thead>' +
- '</table>' +
- '</div>'));
- this.thead = this.el.querySelector('thead');
- };
- DayHeader.prototype._unrenderSkeleton = function () {
- removeElement(this.el);
- };
- return DayHeader;
- }(Component));
-
- var DaySeries = /** @class */ (function () {
- function DaySeries(range, dateProfileGenerator) {
- var date = range.start;
- var end = range.end;
- var indices = [];
- var dates = [];
- var dayIndex = -1;
- while (date < end) { // loop each day from start to end
- if (dateProfileGenerator.isHiddenDay(date)) {
- indices.push(dayIndex + 0.5); // mark that it's between indices
- }
- else {
- dayIndex++;
- indices.push(dayIndex);
- dates.push(date);
- }
- date = addDays(date, 1);
- }
- this.dates = dates;
- this.indices = indices;
- this.cnt = dates.length;
- }
- DaySeries.prototype.sliceRange = function (range) {
- var firstIndex = this.getDateDayIndex(range.start); // inclusive first index
- var lastIndex = this.getDateDayIndex(addDays(range.end, -1)); // inclusive last index
- var clippedFirstIndex = Math.max(0, firstIndex);
- var clippedLastIndex = Math.min(this.cnt - 1, lastIndex);
- // deal with in-between indices
- clippedFirstIndex = Math.ceil(clippedFirstIndex); // in-between starts round to next cell
- clippedLastIndex = Math.floor(clippedLastIndex); // in-between ends round to prev cell
- if (clippedFirstIndex <= clippedLastIndex) {
- return {
- firstIndex: clippedFirstIndex,
- lastIndex: clippedLastIndex,
- isStart: firstIndex === clippedFirstIndex,
- isEnd: lastIndex === clippedLastIndex
- };
- }
- else {
- return null;
- }
- };
- // Given a date, returns its chronolocial cell-index from the first cell of the grid.
- // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.
- // If before the first offset, returns a negative number.
- // If after the last offset, returns an offset past the last cell offset.
- // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.
- DaySeries.prototype.getDateDayIndex = function (date) {
- var indices = this.indices;
- var dayOffset = Math.floor(diffDays(this.dates[0], date));
- if (dayOffset < 0) {
- return indices[0] - 1;
- }
- else if (dayOffset >= indices.length) {
- return indices[indices.length - 1] + 1;
- }
- else {
- return indices[dayOffset];
- }
- };
- return DaySeries;
- }());
-
- var DayTable = /** @class */ (function () {
- function DayTable(daySeries, breakOnWeeks) {
- var dates = daySeries.dates;
- var daysPerRow;
- var firstDay;
- var rowCnt;
- if (breakOnWeeks) {
- // count columns until the day-of-week repeats
- firstDay = dates[0].getUTCDay();
- for (daysPerRow = 1; daysPerRow < dates.length; daysPerRow++) {
- if (dates[daysPerRow].getUTCDay() === firstDay) {
- break;
- }
- }
- rowCnt = Math.ceil(dates.length / daysPerRow);
- }
- else {
- rowCnt = 1;
- daysPerRow = dates.length;
- }
- this.rowCnt = rowCnt;
- this.colCnt = daysPerRow;
- this.daySeries = daySeries;
- this.cells = this.buildCells();
- this.headerDates = this.buildHeaderDates();
- }
- DayTable.prototype.buildCells = function () {
- var rows = [];
- for (var row = 0; row < this.rowCnt; row++) {
- var cells = [];
- for (var col = 0; col < this.colCnt; col++) {
- cells.push(this.buildCell(row, col));
- }
- rows.push(cells);
- }
- return rows;
- };
- DayTable.prototype.buildCell = function (row, col) {
- return {
- date: this.daySeries.dates[row * this.colCnt + col]
- };
- };
- DayTable.prototype.buildHeaderDates = function () {
- var dates = [];
- for (var col = 0; col < this.colCnt; col++) {
- dates.push(this.cells[0][col].date);
- }
- return dates;
- };
- DayTable.prototype.sliceRange = function (range) {
- var colCnt = this.colCnt;
- var seriesSeg = this.daySeries.sliceRange(range);
- var segs = [];
- if (seriesSeg) {
- var firstIndex = seriesSeg.firstIndex, lastIndex = seriesSeg.lastIndex;
- var index = firstIndex;
- while (index <= lastIndex) {
- var row = Math.floor(index / colCnt);
- var nextIndex = Math.min((row + 1) * colCnt, lastIndex + 1);
- segs.push({
- row: row,
- firstCol: index % colCnt,
- lastCol: (nextIndex - 1) % colCnt,
- isStart: seriesSeg.isStart && index === firstIndex,
- isEnd: seriesSeg.isEnd && (nextIndex - 1) === lastIndex
- });
- index = nextIndex;
- }
- }
- return segs;
- };
- return DayTable;
- }());
-
- var Slicer = /** @class */ (function () {
- function Slicer() {
- this.sliceBusinessHours = memoize(this._sliceBusinessHours);
- this.sliceDateSelection = memoize(this._sliceDateSpan);
- this.sliceEventStore = memoize(this._sliceEventStore);
- this.sliceEventDrag = memoize(this._sliceInteraction);
- this.sliceEventResize = memoize(this._sliceInteraction);
- }
- Slicer.prototype.sliceProps = function (props, dateProfile, nextDayThreshold, calendar, component) {
- var extraArgs = [];
- for (var _i = 5; _i < arguments.length; _i++) {
- extraArgs[_i - 5] = arguments[_i];
- }
- var eventUiBases = props.eventUiBases;
- var eventSegs = this.sliceEventStore.apply(this, [props.eventStore, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs));
- return {
- dateSelectionSegs: this.sliceDateSelection.apply(this, [props.dateSelection, eventUiBases, component].concat(extraArgs)),
- businessHourSegs: this.sliceBusinessHours.apply(this, [props.businessHours, dateProfile, nextDayThreshold, calendar, component].concat(extraArgs)),
- fgEventSegs: eventSegs.fg,
- bgEventSegs: eventSegs.bg,
- eventDrag: this.sliceEventDrag.apply(this, [props.eventDrag, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)),
- eventResize: this.sliceEventResize.apply(this, [props.eventResize, eventUiBases, dateProfile, nextDayThreshold, component].concat(extraArgs)),
- eventSelection: props.eventSelection
- }; // TODO: give interactionSegs?
- };
- Slicer.prototype.sliceNowDate = function (// does not memoize
- date, component) {
- var extraArgs = [];
- for (var _i = 2; _i < arguments.length; _i++) {
- extraArgs[_i - 2] = arguments[_i];
- }
- return this._sliceDateSpan.apply(this, [{ range: { start: date, end: addMs(date, 1) }, allDay: false },
- {},
- component].concat(extraArgs));
- };
- Slicer.prototype._sliceBusinessHours = function (businessHours, dateProfile, nextDayThreshold, calendar, component) {
- var extraArgs = [];
- for (var _i = 5; _i < arguments.length; _i++) {
- extraArgs[_i - 5] = arguments[_i];
- }
- if (!businessHours) {
- return [];
- }
- return this._sliceEventStore.apply(this, [expandRecurring(businessHours, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), calendar),
- {},
- dateProfile,
- nextDayThreshold,
- component].concat(extraArgs)).bg;
- };
- Slicer.prototype._sliceEventStore = function (eventStore, eventUiBases, dateProfile, nextDayThreshold, component) {
- var extraArgs = [];
- for (var _i = 5; _i < arguments.length; _i++) {
- extraArgs[_i - 5] = arguments[_i];
- }
- if (eventStore) {
- var rangeRes = sliceEventStore(eventStore, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
- return {
- bg: this.sliceEventRanges(rangeRes.bg, component, extraArgs),
- fg: this.sliceEventRanges(rangeRes.fg, component, extraArgs)
- };
- }
- else {
- return { bg: [], fg: [] };
- }
- };
- Slicer.prototype._sliceInteraction = function (interaction, eventUiBases, dateProfile, nextDayThreshold, component) {
- var extraArgs = [];
- for (var _i = 5; _i < arguments.length; _i++) {
- extraArgs[_i - 5] = arguments[_i];
- }
- if (!interaction) {
- return null;
- }
- var rangeRes = sliceEventStore(interaction.mutatedEvents, eventUiBases, computeActiveRange(dateProfile, Boolean(nextDayThreshold)), nextDayThreshold);
- return {
- segs: this.sliceEventRanges(rangeRes.fg, component, extraArgs),
- affectedInstances: interaction.affectedEvents.instances,
- isEvent: interaction.isEvent,
- sourceSeg: interaction.origSeg
- };
- };
- Slicer.prototype._sliceDateSpan = function (dateSpan, eventUiBases, component) {
- var extraArgs = [];
- for (var _i = 3; _i < arguments.length; _i++) {
- extraArgs[_i - 3] = arguments[_i];
- }
- if (!dateSpan) {
- return [];
- }
- var eventRange = fabricateEventRange(dateSpan, eventUiBases, component.context.calendar);
- var segs = this.sliceRange.apply(this, [dateSpan.range].concat(extraArgs));
- for (var _a = 0, segs_1 = segs; _a < segs_1.length; _a++) {
- var seg = segs_1[_a];
- seg.component = component;
- seg.eventRange = eventRange;
- }
- return segs;
- };
- /*
- "complete" seg means it has component and eventRange
- */
- Slicer.prototype.sliceEventRanges = function (eventRanges, component, // TODO: kill
- extraArgs) {
- var segs = [];
- for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
- var eventRange = eventRanges_1[_i];
- segs.push.apply(segs, this.sliceEventRange(eventRange, component, extraArgs));
- }
- return segs;
- };
- /*
- "complete" seg means it has component and eventRange
- */
- Slicer.prototype.sliceEventRange = function (eventRange, component, // TODO: kill
- extraArgs) {
- var segs = this.sliceRange.apply(this, [eventRange.range].concat(extraArgs));
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- seg.component = component;
- seg.eventRange = eventRange;
- seg.isStart = eventRange.isStart && seg.isStart;
- seg.isEnd = eventRange.isEnd && seg.isEnd;
- }
- return segs;
- };
- return Slicer;
- }());
- /*
- for incorporating minTime/maxTime if appropriate
- TODO: should be part of DateProfile!
- TimelineDateProfile already does this btw
- */
- function computeActiveRange(dateProfile, isComponentAllDay) {
- var range = dateProfile.activeRange;
- if (isComponentAllDay) {
- return range;
- }
- return {
- start: addMs(range.start, dateProfile.minTime.milliseconds),
- end: addMs(range.end, dateProfile.maxTime.milliseconds - 864e5) // 864e5 = ms in a day
- };
- }
-
- // exports
- // --------------------------------------------------------------------------------------------------
- var version = '4.4.2';
-
- exports.Calendar = Calendar;
- exports.Component = Component;
- exports.ComponentContext = ComponentContext;
- exports.DateComponent = DateComponent;
- exports.DateEnv = DateEnv;
- exports.DateProfileGenerator = DateProfileGenerator;
- exports.DayHeader = DayHeader;
- exports.DaySeries = DaySeries;
- exports.DayTable = DayTable;
- exports.ElementDragging = ElementDragging;
- exports.ElementScrollController = ElementScrollController;
- exports.EmitterMixin = EmitterMixin;
- exports.EventApi = EventApi;
- exports.FgEventRenderer = FgEventRenderer;
- exports.FillRenderer = FillRenderer;
- exports.Interaction = Interaction;
- exports.Mixin = Mixin;
- exports.NamedTimeZoneImpl = NamedTimeZoneImpl;
- exports.PositionCache = PositionCache;
- exports.ScrollComponent = ScrollComponent;
- exports.ScrollController = ScrollController;
- exports.Slicer = Slicer;
- exports.Splitter = Splitter;
- exports.Theme = Theme;
- exports.View = View;
- exports.WindowScrollController = WindowScrollController;
- exports.addDays = addDays;
- exports.addDurations = addDurations;
- exports.addMs = addMs;
- exports.addWeeks = addWeeks;
- exports.allowContextMenu = allowContextMenu;
- exports.allowSelection = allowSelection;
- exports.appendToElement = appendToElement;
- exports.applyAll = applyAll;
- exports.applyMutationToEventStore = applyMutationToEventStore;
- exports.applyStyle = applyStyle;
- exports.applyStyleProp = applyStyleProp;
- exports.asRoughMinutes = asRoughMinutes;
- exports.asRoughMs = asRoughMs;
- exports.asRoughSeconds = asRoughSeconds;
- exports.buildGotoAnchorHtml = buildGotoAnchorHtml;
- exports.buildSegCompareObj = buildSegCompareObj;
- exports.capitaliseFirstLetter = capitaliseFirstLetter;
- exports.combineEventUis = combineEventUis;
- exports.compareByFieldSpec = compareByFieldSpec;
- exports.compareByFieldSpecs = compareByFieldSpecs;
- exports.compareNumbers = compareNumbers;
- exports.compensateScroll = compensateScroll;
- exports.computeClippingRect = computeClippingRect;
- exports.computeEdges = computeEdges;
- exports.computeEventDraggable = computeEventDraggable;
- exports.computeEventEndResizable = computeEventEndResizable;
- exports.computeEventStartResizable = computeEventStartResizable;
- exports.computeFallbackHeaderFormat = computeFallbackHeaderFormat;
- exports.computeHeightAndMargins = computeHeightAndMargins;
- exports.computeInnerRect = computeInnerRect;
- exports.computeRect = computeRect;
- exports.computeVisibleDayRange = computeVisibleDayRange;
- exports.config = config;
- exports.constrainPoint = constrainPoint;
- exports.createDuration = createDuration;
- exports.createElement = createElement;
- exports.createEmptyEventStore = createEmptyEventStore;
- exports.createEventInstance = createEventInstance;
- exports.createFormatter = createFormatter;
- exports.createPlugin = createPlugin;
- exports.cssToStr = cssToStr;
- exports.debounce = debounce;
- exports.diffDates = diffDates;
- exports.diffDayAndTime = diffDayAndTime;
- exports.diffDays = diffDays;
- exports.diffPoints = diffPoints;
- exports.diffWeeks = diffWeeks;
- exports.diffWholeDays = diffWholeDays;
- exports.diffWholeWeeks = diffWholeWeeks;
- exports.disableCursor = disableCursor;
- exports.distributeHeight = distributeHeight;
- exports.elementClosest = elementClosest;
- exports.elementMatches = elementMatches;
- exports.enableCursor = enableCursor;
- exports.eventTupleToStore = eventTupleToStore;
- exports.filterEventStoreDefs = filterEventStoreDefs;
- exports.filterHash = filterHash;
- exports.findChildren = findChildren;
- exports.findElements = findElements;
- exports.flexibleCompare = flexibleCompare;
- exports.forceClassName = forceClassName;
- exports.formatDate = formatDate;
- exports.formatIsoTimeString = formatIsoTimeString;
- exports.formatRange = formatRange;
- exports.getAllDayHtml = getAllDayHtml;
- exports.getClippingParents = getClippingParents;
- exports.getDayClasses = getDayClasses;
- exports.getElSeg = getElSeg;
- exports.getRectCenter = getRectCenter;
- exports.getRelevantEvents = getRelevantEvents;
- exports.globalDefaults = globalDefaults;
- exports.greatestDurationDenominator = greatestDurationDenominator;
- exports.hasBgRendering = hasBgRendering;
- exports.htmlEscape = htmlEscape;
- exports.htmlToElement = htmlToElement;
- exports.insertAfterElement = insertAfterElement;
- exports.interactionSettingsStore = interactionSettingsStore;
- exports.interactionSettingsToStore = interactionSettingsToStore;
- exports.intersectRanges = intersectRanges;
- exports.intersectRects = intersectRects;
- exports.isArraysEqual = isArraysEqual;
- exports.isDateSpansEqual = isDateSpansEqual;
- exports.isInt = isInt;
- exports.isInteractionValid = isInteractionValid;
- exports.isMultiDayRange = isMultiDayRange;
- exports.isPropsEqual = isPropsEqual;
- exports.isPropsValid = isPropsValid;
- exports.isSingleDay = isSingleDay;
- exports.isValidDate = isValidDate;
- exports.listenBySelector = listenBySelector;
- exports.mapHash = mapHash;
- exports.matchCellWidths = matchCellWidths;
- exports.memoize = memoize;
- exports.memoizeOutput = memoizeOutput;
- exports.memoizeRendering = memoizeRendering;
- exports.mergeEventStores = mergeEventStores;
- exports.multiplyDuration = multiplyDuration;
- exports.padStart = padStart;
- exports.parseBusinessHours = parseBusinessHours;
- exports.parseDragMeta = parseDragMeta;
- exports.parseEventDef = parseEventDef;
- exports.parseFieldSpecs = parseFieldSpecs;
- exports.parseMarker = parse;
- exports.pointInsideRect = pointInsideRect;
- exports.prependToElement = prependToElement;
- exports.preventContextMenu = preventContextMenu;
- exports.preventDefault = preventDefault;
- exports.preventSelection = preventSelection;
- exports.processScopedUiProps = processScopedUiProps;
- exports.rangeContainsMarker = rangeContainsMarker;
- exports.rangeContainsRange = rangeContainsRange;
- exports.rangesEqual = rangesEqual;
- exports.rangesIntersect = rangesIntersect;
- exports.refineProps = refineProps;
- exports.removeElement = removeElement;
- exports.removeExact = removeExact;
- exports.renderDateCell = renderDateCell;
- exports.requestJson = requestJson;
- exports.sliceEventStore = sliceEventStore;
- exports.startOfDay = startOfDay;
- exports.subtractInnerElHeight = subtractInnerElHeight;
- exports.translateRect = translateRect;
- exports.uncompensateScroll = uncompensateScroll;
- exports.undistributeHeight = undistributeHeight;
- exports.unpromisify = unpromisify;
- exports.version = version;
- exports.whenTransitionDone = whenTransitionDone;
- exports.wholeDivideDurations = wholeDivideDurations;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/core/main.min.css b/library/fullcalendar/packages/core/main.min.css
deleted file mode 100644
index 8948b534b..000000000
--- a/library/fullcalendar/packages/core/main.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@charset "UTF-8";.fc-button:not(:disabled),.fc-event.fc-draggable,.fc-event[href],.fc-popover .fc-header .fc-close,a.fc-more,a[data-goto]{cursor:pointer}.fc-bg,.fc-row .fc-bgevent-skeleton,.fc-row .fc-highlight-skeleton{bottom:0}.fc{direction:ltr;text-align:left}.fc-rtl{text-align:right}body .fc{font-size:1em}.fc-highlight{background:#bce8f1;opacity:.3}.fc-bgevent{background:#8fdf82;opacity:.3}.fc-nonbusiness{background:#d7d7d7}.fc-popover{position:absolute;box-shadow:0 2px 6px rgba(0,0,0,.15)}.fc-popover .fc-header{display:flex;flex-direction:row;justify-content:space-between;align-items:center;padding:2px 4px}.fc-rtl .fc-popover .fc-header{flex-direction:row-reverse}.fc-popover .fc-header .fc-title{margin:0 2px}.fc-popover .fc-header .fc-close{opacity:.65;font-size:1.1em}.fc-divider{border-style:solid;border-width:1px}hr.fc-divider{height:0;margin:0;padding:0 0 2px;border-width:1px 0}.fc-bg table,.fc-row .fc-bgevent-skeleton table,.fc-row .fc-highlight-skeleton table{height:100%}.fc-bg,.fc-bgevent-skeleton,.fc-highlight-skeleton,.fc-mirror-skeleton{position:absolute;top:0;left:0;right:0}.fc table{width:100%;box-sizing:border-box;table-layout:fixed;border-collapse:collapse;border-spacing:0;font-size:1em}.fc th{text-align:center}.fc td,.fc th{border-style:solid;border-width:1px;padding:0;vertical-align:top}.fc td.fc-today{border-style:double}a[data-goto]:hover{text-decoration:underline}.fc .fc-row{border-style:solid;border-width:0}.fc-row table{border-left:0 hidden transparent;border-right:0 hidden transparent;border-bottom:0 hidden transparent}.fc-row:first-child table{border-top:0 hidden transparent}.fc-row{position:relative}.fc-row .fc-bg{z-index:1}.fc-row .fc-bgevent-skeleton td,.fc-row .fc-highlight-skeleton td{border-color:transparent}.fc-row .fc-bgevent-skeleton{z-index:2}.fc-row .fc-highlight-skeleton{z-index:3}.fc-row .fc-content-skeleton{position:relative;z-index:4;padding-bottom:2px}.fc-row .fc-mirror-skeleton{z-index:5}.fc .fc-row .fc-content-skeleton table,.fc .fc-row .fc-content-skeleton td,.fc .fc-row .fc-mirror-skeleton td{background:0 0;border-color:transparent}.fc-row .fc-content-skeleton td,.fc-row .fc-mirror-skeleton td{border-bottom:0}.fc-row .fc-content-skeleton tbody td,.fc-row .fc-mirror-skeleton tbody td{border-top:0}.fc-scroller{-webkit-overflow-scrolling:touch}.fc-scroller>.fc-day-grid,.fc-scroller>.fc-time-grid{position:relative;width:100%}.fc-event{position:relative;display:block;font-size:.85em;line-height:1.4;border-radius:3px;border:1px solid #3788d8}.fc-event,.fc-event-dot{background-color:#3788d8}.fc-event,.fc-event:hover{color:#fff;text-decoration:none}.fc-not-allowed,.fc-not-allowed .fc-event{cursor:not-allowed}.fc-event .fc-content{position:relative;z-index:2}.fc-event .fc-resizer{position:absolute;z-index:4;display:none}.fc-event.fc-allow-mouse-resize .fc-resizer,.fc-event.fc-selected .fc-resizer{display:block}.fc-event.fc-selected .fc-resizer:before{content:"";position:absolute;z-index:9999;top:50%;left:50%;width:40px;height:40px;margin-left:-20px;margin-top:-20px}.fc-event.fc-selected{z-index:9999!important;box-shadow:0 2px 5px rgba(0,0,0,.2)}.fc-event.fc-selected:after{content:"";position:absolute;z-index:1;top:-1px;right:-1px;bottom:-1px;left:-1px;background:#000;opacity:.25}.fc-event.fc-dragging.fc-selected{box-shadow:0 2px 7px rgba(0,0,0,.3)}.fc-event.fc-dragging:not(.fc-selected){opacity:.75}.fc-h-event.fc-selected:before{content:"";position:absolute;z-index:3;top:-10px;bottom:-10px;left:0;right:0}.fc-ltr .fc-h-event.fc-not-start,.fc-rtl .fc-h-event.fc-not-end{margin-left:0;border-left-width:0;padding-left:1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-ltr .fc-h-event.fc-not-end,.fc-rtl .fc-h-event.fc-not-start{margin-right:0;border-right-width:0;padding-right:1px;border-top-right-radius:0;border-bottom-right-radius:0}.fc-ltr .fc-h-event .fc-start-resizer,.fc-rtl .fc-h-event .fc-end-resizer{cursor:w-resize;left:-1px}.fc-ltr .fc-h-event .fc-end-resizer,.fc-rtl .fc-h-event .fc-start-resizer{cursor:e-resize;right:-1px}.fc-h-event.fc-allow-mouse-resize .fc-resizer{width:7px;top:-1px;bottom:-1px}.fc-h-event.fc-selected .fc-resizer{border-radius:4px;border-width:1px;width:6px;height:6px;border-style:solid;border-color:inherit;background:#fff;top:50%;margin-top:-4px}.fc-ltr .fc-h-event.fc-selected .fc-start-resizer,.fc-rtl .fc-h-event.fc-selected .fc-end-resizer{margin-left:-4px}.fc-ltr .fc-h-event.fc-selected .fc-end-resizer,.fc-rtl .fc-h-event.fc-selected .fc-start-resizer{margin-right:-4px}.fc-day-grid-event{margin:1px 2px 0;padding:0 1px}tr:first-child>td>.fc-day-grid-event{margin-top:2px}.fc-mirror-skeleton tr:first-child>td>.fc-day-grid-event{margin-top:0}.fc-day-grid-event .fc-content{white-space:nowrap;overflow:hidden}.fc-day-grid-event .fc-time{font-weight:700}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer{margin-left:-2px}.fc-ltr .fc-day-grid-event.fc-allow-mouse-resize .fc-end-resizer,.fc-rtl .fc-day-grid-event.fc-allow-mouse-resize .fc-start-resizer{margin-right:-2px}a.fc-more{margin:1px 3px;font-size:.85em;text-decoration:none}a.fc-more:hover{text-decoration:underline}.fc-limited{display:none}.fc-button,.fc-icon{display:inline-block;font-weight:400;text-align:center}.fc-day-grid .fc-row{z-index:1}.fc-more-popover{z-index:2;width:220px}.fc-more-popover .fc-event-container{padding:10px}.fc-now-indicator{position:absolute;border:0 solid red}.fc-unselectable{-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.fc-unthemed .fc-content,.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-list-view,.fc-unthemed .fc-popover,.fc-unthemed .fc-row,.fc-unthemed tbody,.fc-unthemed td,.fc-unthemed th,.fc-unthemed thead{border-color:#ddd}.fc-unthemed .fc-popover{background-color:#fff}.fc-unthemed .fc-divider,.fc-unthemed .fc-list-heading td,.fc-unthemed .fc-popover .fc-header{background:#eee}.fc-unthemed td.fc-today{background:#fcf8e3}.fc-unthemed .fc-disabled-day{background:#d7d7d7;opacity:.3}@font-face{font-family:fcicons;src:url("data:application/x-font-ttf;charset=utf-8;base64,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") format("truetype");font-weight:400;font-style:normal}.fc-icon{font-family:fcicons!important;speak:none;font-style:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:1em;height:1em}.fc-icon-chevron-left:before{content:""}.fc-icon-chevron-right:before{content:""}.fc-icon-chevrons-left:before{content:""}.fc-icon-chevrons-right:before{content:""}.fc-icon-minus-square:before{content:""}.fc-icon-plus-square:before{content:""}.fc-icon-x:before{content:""}.fc-button{overflow:visible;text-transform:none;margin:0;font-family:inherit}.fc-button::-moz-focus-inner{padding:0;border-style:none}.fc-button{-webkit-appearance:button;color:#212529;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.4em .65em;font-size:1em;line-height:1.5;border-radius:.25em}.fc-button:hover{color:#212529;text-decoration:none}.fc-button:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(44,62,80,.25);box-shadow:0 0 0 .2rem rgba(44,62,80,.25)}.fc-button:disabled{opacity:.65}.fc-button-primary{color:#fff;background-color:#2C3E50;border-color:#2C3E50}.fc-button-primary:hover{color:#fff;background-color:#1e2b37;border-color:#1a252f}.fc-button-primary:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button-primary:disabled{color:#fff;background-color:#2C3E50;border-color:#2C3E50}.fc-button-primary:not(:disabled).fc-button-active,.fc-button-primary:not(:disabled):active{color:#fff;background-color:#1a252f;border-color:#151e27}.fc-button-primary:not(:disabled).fc-button-active:focus,.fc-button-primary:not(:disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(76,91,106,.5);box-shadow:0 0 0 .2rem rgba(76,91,106,.5)}.fc-button .fc-icon{vertical-align:middle;font-size:1.5em}.fc-button-group{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.fc-button-group>.fc-button{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.fc-button-group>.fc-button.fc-button-active,.fc-button-group>.fc-button:active,.fc-button-group>.fc-button:focus,.fc-button-group>.fc-button:hover{z-index:1}.fc-button-group>.fc-button:not(:first-child){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.fc-button-group>.fc-button:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.fc-unthemed .fc-popover{border-width:1px;border-style:solid}.fc-unthemed .fc-list-item:hover td{background-color:#f5f5f5}.fc-toolbar{display:flex;justify-content:space-between;align-items:center}.fc-toolbar.fc-header-toolbar{margin-bottom:1.5em}.fc-toolbar.fc-footer-toolbar{margin-top:1.5em}.fc-toolbar>*>:not(:first-child){margin-left:.75em}.fc-toolbar h2{font-size:1.75em;margin:0}.fc-view-container{position:relative}.fc-view-container *,.fc-view-container :after,.fc-view-container :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.fc-view,.fc-view>table{position:relative;z-index:1}@media print{.fc-bg,.fc-bgevent-container,.fc-bgevent-skeleton,.fc-business-container,.fc-event .fc-resizer,.fc-highlight-container,.fc-highlight-skeleton,.fc-mirror-container,.fc-mirror-skeleton{display:none}.fc tbody .fc-row,.fc-time-grid{min-height:0!important}.fc-time-grid .fc-event.fc-not-end:after,.fc-time-grid .fc-event.fc-not-start:before{content:"..."}.fc{max-width:100%!important}.fc-event{background:#fff!important;color:#000!important;page-break-inside:avoid}.fc hr,.fc tbody,.fc td,.fc th,.fc thead,.fc-row{border-color:#ccc!important;background:#fff!important}.fc tbody .fc-row{height:auto!important}.fc tbody .fc-row .fc-content-skeleton{position:static;padding-bottom:0!important}.fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td{padding-bottom:1em}.fc tbody .fc-row .fc-content-skeleton table{height:1em}.fc-more,.fc-more-cell{display:none!important}.fc tr.fc-limited{display:table-row!important}.fc td.fc-limited{display:table-cell!important}.fc-popover,.fc-timeGrid-view .fc-axis{display:none}.fc-slats,.fc-time-grid hr{display:none!important}.fc button,.fc-button-group,.fc-time-grid .fc-event .fc-time span{display:none}.fc-time-grid .fc-content-skeleton{position:static}.fc-time-grid .fc-content-skeleton table{height:4em}.fc-time-grid .fc-event-container{margin:0!important}.fc-time-grid .fc-event{position:static!important;margin:3px 2px!important}.fc-time-grid .fc-event.fc-not-end{border-bottom-width:1px!important}.fc-time-grid .fc-event.fc-not-start{border-top-width:1px!important}.fc-time-grid .fc-event .fc-time{white-space:normal!important}.fc-time-grid .fc-event .fc-time:after{content:attr(data-full)}.fc-day-grid-container,.fc-scroller,.fc-time-grid-container{overflow:visible!important;height:auto!important}.fc-row{border:0!important;margin:0!important}} \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/main.min.js b/library/fullcalendar/packages/core/main.min.js
deleted file mode 100644
index 8745717dd..000000000
--- a/library/fullcalendar/packages/core/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar Core Package v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).FullCalendar={})}(this,(function(e){"use strict";var t={className:!0,colSpan:!0,rowSpan:!0},n={"<tr":"tbody","<td":"tr"};function r(e,n,r){var i=document.createElement(e);if(n)for(var o in n)"style"===o?y(i,n[o]):t[o]?i[o]=n[o]:i.setAttribute(o,n[o]);return"string"==typeof r?i.innerHTML=r:null!=r&&s(i,r),i}function i(e){e=e.trim();var t=document.createElement(a(e));return t.innerHTML=e,t.firstChild}function o(e){return Array.prototype.slice.call(function(e){e=e.trim();var t=document.createElement(a(e));return t.innerHTML=e,t.childNodes}(e))}function a(e){return n[e.substr(0,3)]||"div"}function s(e,t){for(var n=l(t),r=0;r<n.length;r++)e.appendChild(n[r])}function u(e,t){for(var n=l(t),r=e.firstChild||null,i=0;i<n.length;i++)e.insertBefore(n[i],r)}function l(e){return"string"==typeof e?o(e):e instanceof Node?[e]:Array.prototype.slice.call(e)}function c(e){e.parentNode&&e.parentNode.removeChild(e)}var d=Element.prototype.matches||Element.prototype.matchesSelector||Element.prototype.msMatchesSelector,f=Element.prototype.closest||function(e){var t=this;if(!document.documentElement.contains(t))return null;do{if(h(t,e))return t;t=t.parentElement||t.parentNode}while(null!==t&&1===t.nodeType);return null};function p(e,t){return f.call(e,t)}function h(e,t){return d.call(e,t)}function v(e,t){for(var n=e instanceof HTMLElement?[e]:e,r=[],i=0;i<n.length;i++)for(var o=n[i].querySelectorAll(t),a=0;a<o.length;a++)r.push(o[a]);return r}var g=/(top|left|right|bottom|width|height)$/i;function y(e,t){for(var n in t)m(e,n,t[n])}function m(e,t,n){null==n?e.style[t]="":"number"==typeof n&&g.test(t)?e.style[t]=n+"px":e.style[t]=n}function E(e,t){var n={left:Math.max(e.left,t.left),right:Math.min(e.right,t.right),top:Math.max(e.top,t.top),bottom:Math.min(e.bottom,t.bottom)};return n.left<n.right&&n.top<n.bottom&&n}var S=null;function b(){return null===S&&(S=function(){var e=r("div",{style:{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}},"<div></div>");document.body.appendChild(e);var t=e.firstChild.getBoundingClientRect().left>e.getBoundingClientRect().left;return c(e),t}()),S}function D(e){return e=Math.max(0,e),e=Math.round(e)}function T(e,t){void 0===t&&(t=!1);var n=window.getComputedStyle(e),r=parseInt(n.borderLeftWidth,10)||0,i=parseInt(n.borderRightWidth,10)||0,o=parseInt(n.borderTopWidth,10)||0,a=parseInt(n.borderBottomWidth,10)||0,s=D(e.offsetWidth-e.clientWidth-r-i),u={borderLeft:r,borderRight:i,borderTop:o,borderBottom:a,scrollbarBottom:D(e.offsetHeight-e.clientHeight-o-a),scrollbarLeft:0,scrollbarRight:0};return b()&&"rtl"===n.direction?u.scrollbarLeft=s:u.scrollbarRight=s,t&&(u.paddingLeft=parseInt(n.paddingLeft,10)||0,u.paddingRight=parseInt(n.paddingRight,10)||0,u.paddingTop=parseInt(n.paddingTop,10)||0,u.paddingBottom=parseInt(n.paddingBottom,10)||0),u}function w(e,t){void 0===t&&(t=!1);var n=R(e),r=T(e,t),i={left:n.left+r.borderLeft+r.scrollbarLeft,right:n.right-r.borderRight-r.scrollbarRight,top:n.top+r.borderTop,bottom:n.bottom-r.borderBottom-r.scrollbarBottom};return t&&(i.left+=r.paddingLeft,i.right-=r.paddingRight,i.top+=r.paddingTop,i.bottom-=r.paddingBottom),i}function R(e){var t=e.getBoundingClientRect();return{left:t.left+window.pageXOffset,top:t.top+window.pageYOffset,right:t.right+window.pageXOffset,bottom:t.bottom+window.pageYOffset}}function C(e){return e.getBoundingClientRect().height+I(e)}function I(e){var t=window.getComputedStyle(e);return parseInt(t.marginTop,10)+parseInt(t.marginBottom,10)}function M(e){for(var t=[];e instanceof HTMLElement;){var n=window.getComputedStyle(e);if("fixed"===n.position)break;/(auto|scroll)/.test(n.overflow+n.overflowY+n.overflowX)&&t.push(e),e=e.parentNode}return t}function k(e){e.preventDefault()}function _(e,t,n,r){function i(e){var t=p(e.target,n);t&&r.call(t,e,t)}return e.addEventListener(t,i),function(){e.removeEventListener(t,i)}}var O=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];var P=["sun","mon","tue","wed","thu","fri","sat"];function x(e,t){var n=Z(e);return n[2]+=t,j(n)}function N(e,t){var n=Z(e);return n[6]+=t,j(n)}function H(e,t){return(t.valueOf()-e.valueOf())/864e5}function U(e,t){var n=B(e),r=B(t);return{years:0,months:0,days:Math.round(H(n,r)),milliseconds:t.valueOf()-r.valueOf()-(e.valueOf()-n.valueOf())}}function z(e,t){var n=L(e,t);return null!==n&&n%7==0?n/7:null}function L(e,t){return q(e)===q(t)?Math.round(H(e,t)):null}function B(e){return j([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()])}function V(e,t,n,r){var i=j([t,0,1+A(t,n,r)]),o=B(e),a=Math.round(H(i,o));return Math.floor(a/7)+1}function A(e,t,n){var r=7+t-n;return-((7+j([e,0,r]).getUTCDay()-t)%7)+r-1}function F(e){return[e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()]}function W(e){return new Date(e[0],e[1]||0,null==e[2]?1:e[2],e[3]||0,e[4]||0,e[5]||0)}function Z(e){return[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()]}function j(e){return 1===e.length&&(e=e.concat([0])),new Date(Date.UTC.apply(Date,e))}function Y(e){return!isNaN(e.valueOf())}function q(e){return 1e3*e.getUTCHours()*60*60+1e3*e.getUTCMinutes()*60+1e3*e.getUTCSeconds()+e.getUTCMilliseconds()}var G=["years","months","days","milliseconds"],X=/^(-?)(?:(\d+)\.)?(\d+):(\d\d)(?::(\d\d)(?:\.(\d\d\d))?)?/;function J(e,t){var n;return"string"==typeof e?function(e){var t=X.exec(e);if(t){var n=t[1]?-1:1;return{years:0,months:0,days:n*(t[2]?parseInt(t[2],10):0),milliseconds:n*(60*(t[3]?parseInt(t[3],10):0)*60*1e3+60*(t[4]?parseInt(t[4],10):0)*1e3+1e3*(t[5]?parseInt(t[5],10):0)+(t[6]?parseInt(t[6],10):0))}}return null}(e):"object"==typeof e&&e?K(e):"number"==typeof e?K(((n={})[t||"milliseconds"]=e,n)):null}function K(e){return{years:e.years||e.year||0,months:e.months||e.month||0,days:(e.days||e.day||0)+7*Q(e),milliseconds:60*(e.hours||e.hour||0)*60*1e3+60*(e.minutes||e.minute||0)*1e3+1e3*(e.seconds||e.second||0)+(e.milliseconds||e.millisecond||e.ms||0)}}function Q(e){return e.weeks||e.week||0}function $(e,t){return e.years===t.years&&e.months===t.months&&e.days===t.days&&e.milliseconds===t.milliseconds}function ee(e){return te(e)/864e5}function te(e){return 31536e6*e.years+2592e6*e.months+864e5*e.days+e.milliseconds}function ne(e,t){var n=e.milliseconds;if(n){if(n%1e3!=0)return{unit:"millisecond",value:n};if(n%6e4!=0)return{unit:"second",value:n/1e3};if(n%36e5!=0)return{unit:"minute",value:n/6e4};if(n)return{unit:"hour",value:n/36e5}}return e.days?t||e.days%7!=0?{unit:"day",value:e.days}:{unit:"week",value:e.days/7}:e.months?{unit:"month",value:e.months}:e.years?{unit:"year",value:e.years}:{unit:"millisecond",value:0}}function re(e){e.forEach((function(e){e.style.height=""}))}function ie(e){var t,n,r=[],i=[];for("string"==typeof e?i=e.split(/\s*,\s*/):"function"==typeof e?i=[e]:Array.isArray(e)&&(i=e),t=0;t<i.length;t++)"string"==typeof(n=i[t])?r.push("-"===n.charAt(0)?{field:n.substring(1),order:-1}:{field:n,order:1}):"function"==typeof n&&r.push({func:n});return r}function oe(e,t,n){var r,i;for(r=0;r<n.length;r++)if(i=ae(e,t,n[r]))return i;return 0}function ae(e,t,n){return n.func?n.func(e,t):se(e[n.field],t[n.field])*(n.order||1)}function se(e,t){return e||t?null==t?-1:null==e?1:"string"==typeof e||"string"==typeof t?String(e).localeCompare(String(t)):e-t:0}function ue(e){return e.charAt(0).toUpperCase()+e.slice(1)}function le(e,t){var n=String(e);return"000".substr(0,t-n.length)+n}function ce(e){return e%1==0}function de(e,t,n){if("function"==typeof e&&(e=[e]),e){var r=void 0,i=void 0;for(r=0;r<e.length;r++)i=e[r].apply(t,n)||i;return i}}function fe(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var n=0;n<e.length;n++)if(void 0!==e[n])return e[n]}function pe(e,t){var n,r,i,o,a,s=function(){var u=(new Date).valueOf()-o;u<t?n=setTimeout(s,t-u):(n=null,a=e.apply(i,r),i=r=null)};return function(){return i=this,r=arguments,o=(new Date).valueOf(),n||(n=setTimeout(s,t)),a}}function he(e,t,n,r){void 0===n&&(n={});var i={};for(var o in t){var a=t[o];void 0!==e[o]?i[o]=a===Function?"function"==typeof e[o]?e[o]:null:a?a(e[o]):e[o]:void 0!==n[o]?i[o]=n[o]:a===String?i[o]="":a&&a!==Number&&a!==Boolean&&a!==Function?i[o]=a(null):i[o]=null}if(r)for(var o in e)void 0===t[o]&&(r[o]=e[o]);return i}function ve(e){var t=Math.floor(H(e.start,e.end))||1,n=B(e.start);return{start:n,end:x(n,t)}}function ge(e,t){void 0===t&&(t=J(0));var n=null,r=null;if(e.end){r=B(e.end);var i=e.end.valueOf()-r.valueOf();i&&i>=te(t)&&(r=x(r,1))}return e.start&&(n=B(e.start),r&&r<=n&&(r=x(n,1))),{start:n,end:r}}function ye(e,t,n,r){return"year"===r?J(n.diffWholeYears(e,t),"year"):"month"===r?J(n.diffWholeMonths(e,t),"month"):U(e,t)}var me=function(e,t){return(me=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function Ee(e,t){function n(){this.constructor=e}me(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var Se=function(){return(Se=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function be(e,t,n,r,i){var o=i[e.recurringDef.typeId].expand(e.recurringDef.typeData,{start:r.subtract(n.start,t),end:n.end},r);return e.allDay&&(o=o.map(B)),o}var De=Object.prototype.hasOwnProperty;function Te(e,t){var n,r,i,o,a,s,u={};if(t)for(n=0;n<t.length;n++){for(r=t[n],i=[],o=e.length-1;o>=0;o--)if("object"==typeof(a=e[o][r])&&a)i.unshift(a);else if(void 0!==a){u[r]=a;break}i.length&&(u[r]=Te(i))}for(n=e.length-1;n>=0;n--)for(r in s=e[n])r in u||(u[r]=s[r]);return u}function we(e,t){var n={};for(var r in e)t(e[r],r)&&(n[r]=e[r]);return n}function Re(e,t){var n={};for(var r in e)n[r]=t(e[r],r);return n}function Ce(e){for(var t={},n=0,r=e;n<r.length;n++){t[r[n]]=!0}return t}function Ie(e){var t=[];for(var n in e)t.push(e[n]);return t}function Me(e,t){for(var n in e)if(De.call(e,n)&&!(n in t))return!1;for(var n in t)if(De.call(t,n)&&e[n]!==t[n])return!1;return!0}function ke(e,t,n,r){for(var i={defs:{},instances:{}},o=0,a=e;o<a.length;o++){var s=Zt(a[o],t,n,r);s&&_e(s,i)}return i}function _e(e,t){return void 0===t&&(t={defs:{},instances:{}}),t.defs[e.def.defId]=e.def,e.instance&&(t.instances[e.instance.instanceId]=e.instance),t}function Oe(e,t,n){var r=n.dateEnv,i=e.defs,o=e.instances;for(var a in o=we(o,(function(e){return!i[e.defId].recurringDef})),i){var s=i[a];if(s.recurringDef){var u=s.recurringDef.duration;u||(u=s.allDay?n.defaultAllDayEventDuration:n.defaultTimedEventDuration);for(var l=0,c=be(s,u,t,n.dateEnv,n.pluginSystem.hooks.recurringTypes);l<c.length;l++){var d=c[l],f=Yt(a,{start:d,end:r.add(d,u)});o[f.instanceId]=f}}}return{defs:i,instances:o}}function Pe(e,t){var n=e.instances[t];if(n){var r=e.defs[n.defId],i=Ue(e,(function(e){return t=r,n=e,Boolean(t.groupId&&t.groupId===n.groupId);var t,n}));return i.defs[r.defId]=r,i.instances[n.instanceId]=n,i}return{defs:{},instances:{}}}function xe(e,t){var n;if(t){n=[];for(var r=0,i=e;r<i.length;r++){var o=i[r],a=t(o);a?n.push(a):null==a&&n.push(o)}}else n=e;return n}function Ne(){return{defs:{},instances:{}}}function He(e,t){return{defs:Se({},e.defs,t.defs),instances:Se({},e.instances,t.instances)}}function Ue(e,t){var n=we(e.defs,t),r=we(e.instances,(function(e){return n[e.defId]}));return{defs:n,instances:r}}function ze(e,t){var n=null,r=null;return e.start&&(n=t.createMarker(e.start)),e.end&&(r=t.createMarker(e.end)),n||r?n&&r&&r<n?null:{start:n,end:r}:null}function Le(e,t){var n,r,i=[],o=t.start;for(e.sort(Be),n=0;n<e.length;n++)(r=e[n]).start>o&&i.push({start:o,end:r.start}),r.end>o&&(o=r.end);return o<t.end&&i.push({start:o,end:t.end}),i}function Be(e,t){return e.start.valueOf()-t.start.valueOf()}function Ve(e,t){var n=e.start,r=e.end,i=null;return null!==t.start&&(n=null===n?t.start:new Date(Math.max(n.valueOf(),t.start.valueOf()))),null!=t.end&&(r=null===r?t.end:new Date(Math.min(r.valueOf(),t.end.valueOf()))),(null===n||null===r||n<r)&&(i={start:n,end:r}),i}function Ae(e,t){return(null===e.start?null:e.start.valueOf())===(null===t.start?null:t.start.valueOf())&&(null===e.end?null:e.end.valueOf())===(null===t.end?null:t.end.valueOf())}function Fe(e,t){return(null===e.end||null===t.start||e.end>t.start)&&(null===e.start||null===t.end||e.start<t.end)}function We(e,t){return(null===e.start||null!==t.start&&t.start>=e.start)&&(null===e.end||null!==t.end&&t.end<=e.end)}function Ze(e,t){return(null===e.start||t>=e.start)&&(null===e.end||t<e.end)}function je(e,t){var n,r=e.length;if(r!==t.length)return!1;for(n=0;n<r;n++)if(e[n]!==t[n])return!1;return!0}function Ye(e){var t,n;return function(){return t&&je(t,arguments)||(t=arguments,n=e.apply(this,arguments)),n}}function qe(e,t){var n=null;return function(){var r=e.apply(this,arguments);return(null===n||n!==r&&!t(n,r))&&(n=r),n}}var Ge={week:3,separator:0,omitZeroMinute:0,meridiem:0,omitCommas:0},Xe={timeZoneName:7,era:6,year:5,month:4,day:2,weekday:2,hour:1,minute:1,second:1},Je=/\s*([ap])\.?m\.?/i,Ke=/,/g,Qe=/\s+/g,$e=/\u200e/g,et=/UTC|GMT/,tt=function(){function e(e){var t={},n={},r=0;for(var i in e)i in Ge?(n[i]=e[i],r=Math.max(Ge[i],r)):(t[i]=e[i],i in Xe&&(r=Math.max(Xe[i],r)));this.standardDateProps=t,this.extendedSettings=n,this.severity=r,this.buildFormattingFunc=Ye(nt)}return e.prototype.format=function(e,t){return this.buildFormattingFunc(this.standardDateProps,this.extendedSettings,t)(e)},e.prototype.formatRange=function(e,t,n){var r=this.standardDateProps,i=this.extendedSettings,o=function(e,t,n){if(n.getMarkerYear(e)!==n.getMarkerYear(t))return 5;if(n.getMarkerMonth(e)!==n.getMarkerMonth(t))return 4;if(n.getMarkerDay(e)!==n.getMarkerDay(t))return 2;if(q(e)!==q(t))return 1;return 0}(e.marker,t.marker,n.calendarSystem);if(!o)return this.format(e,n);var a=o;!(a>1)||"numeric"!==r.year&&"2-digit"!==r.year||"numeric"!==r.month&&"2-digit"!==r.month||"numeric"!==r.day&&"2-digit"!==r.day||(a=1);var s=this.format(e,n),u=this.format(t,n);if(s===u)return s;var l=nt(function(e,t){var n={};for(var r in e)(!(r in Xe)||Xe[r]<=t)&&(n[r]=e[r]);return n}(r,a),i,n),c=l(e),d=l(t),f=function(e,t,n,r){var i=0;for(;i<e.length;){var o=e.indexOf(t,i);if(-1===o)break;var a=e.substr(0,o);i=o+t.length;for(var s=e.substr(i),u=0;u<n.length;){var l=n.indexOf(r,u);if(-1===l)break;var c=n.substr(0,l);u=l+r.length;var d=n.substr(u);if(a===c&&s===d)return{before:a,after:s}}}return null}(s,c,u,d),p=i.separator||"";return f?f.before+c+p+d+f.after:s+p+u},e.prototype.getLargestUnit=function(){switch(this.severity){case 7:case 6:case 5:return"year";case 4:return"month";case 3:return"week";default:return"day"}},e}();function nt(e,t,n){var r=Object.keys(e).length;return 1===r&&"short"===e.timeZoneName?function(e){return at(e.timeZoneOffset)}:0===r&&t.week?function(e){return function(e,t,n,r){var i=[];"narrow"===r?i.push(t):"short"===r&&i.push(t," ");i.push(n.simpleNumberFormat.format(e)),n.options.isRtl&&i.reverse();return i.join("")}(n.computeWeekNumber(e.marker),n.weekLabel,n.locale,t.week)}:function(e,t,n){e=Se({},e),t=Se({},t),function(e,t){e.timeZoneName&&(e.hour||(e.hour="2-digit"),e.minute||(e.minute="2-digit"));"long"===e.timeZoneName&&(e.timeZoneName="short");t.omitZeroMinute&&(e.second||e.millisecond)&&delete t.omitZeroMinute}(e,t),e.timeZone="UTC";var r,i=new Intl.DateTimeFormat(n.locale.codes,e);if(t.omitZeroMinute){var o=Se({},e);delete o.minute,r=new Intl.DateTimeFormat(n.locale.codes,o)}return function(o){var a=o.marker;return function(e,t,n,r,i){e=e.replace($e,""),"short"===n.timeZoneName&&(e=function(e,t){var n=!1;e=e.replace(et,(function(){return n=!0,t})),n||(e+=" "+t);return e}(e,"UTC"===i.timeZone||null==t.timeZoneOffset?"UTC":at(t.timeZoneOffset)));r.omitCommas&&(e=e.replace(Ke,"").trim());r.omitZeroMinute&&(e=e.replace(":00",""));!1===r.meridiem?e=e.replace(Je,"").trim():"narrow"===r.meridiem?e=e.replace(Je,(function(e,t){return t.toLocaleLowerCase()})):"short"===r.meridiem?e=e.replace(Je,(function(e,t){return t.toLocaleLowerCase()+"m"})):"lowercase"===r.meridiem&&(e=e.replace(Je,(function(e){return e.toLocaleLowerCase()})));return e=(e=e.replace(Qe," ")).trim()}((r&&!a.getUTCMinutes()?r:i).format(a),o,e,t,n)}}(e,t,n)}var rt=function(){function e(e,t){this.cmdStr=e,this.separator=t}return e.prototype.format=function(e,t){return t.cmdFormatter(this.cmdStr,st(e,null,t,this.separator))},e.prototype.formatRange=function(e,t,n){return n.cmdFormatter(this.cmdStr,st(e,t,n,this.separator))},e}(),it=function(){function e(e){this.func=e}return e.prototype.format=function(e,t){return this.func(st(e,null,t))},e.prototype.formatRange=function(e,t,n){return this.func(st(e,t,n))},e}();function ot(e,t){return"object"==typeof e&&e?("string"==typeof t&&(e=Se({separator:t},e)),new tt(e)):"string"==typeof e?new rt(e,t):"function"==typeof e?new it(e):void 0}function at(e,t){void 0===t&&(t=!1);var n=e<0?"-":"+",r=Math.abs(e),i=Math.floor(r/60),o=Math.round(r%60);return t?n+le(i,2)+":"+le(o,2):"GMT"+n+i+(o?":"+le(o,2):"")}function st(e,t,n,r){var i=ut(e,n.calendarSystem);return{date:i,start:i,end:t?ut(t,n.calendarSystem):null,timeZone:n.timeZone,localeCodes:n.locale.codes,separator:r}}function ut(e,t){var n=t.markerToArray(e.marker);return{marker:e.marker,timeZoneOffset:e.timeZoneOffset,array:n,year:n[0],month:n[1],day:n[2],hour:n[3],minute:n[4],second:n[5],millisecond:n[6]}}var lt=function(){function e(e,t){this.calendar=e,this.internalEventSource=t}return e.prototype.remove=function(){this.calendar.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:this.internalEventSource.sourceId})},e.prototype.refetch=function(){this.calendar.dispatch({type:"FETCH_EVENT_SOURCES",sourceIds:[this.internalEventSource.sourceId]})},Object.defineProperty(e.prototype,"id",{get:function(){return this.internalEventSource.publicId},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this.internalEventSource.meta.url},enumerable:!0,configurable:!0}),e}(),ct=function(){function e(e,t,n){this._calendar=e,this._def=t,this._instance=n||null}return e.prototype.setProp=function(e,t){var n,r;if(e in Ft);else if(e in At)"function"==typeof At[e]&&(t=At[e](t)),this.mutate({standardProps:(n={},n[e]=t,n)});else if(e in Ht){var i=void 0;"function"==typeof Ht[e]&&(t=Ht[e](t)),"color"===e?i={backgroundColor:t,borderColor:t}:"editable"===e?i={startEditable:t,durationEditable:t}:((r={})[e]=t,i=r),this.mutate({standardProps:{ui:i}})}},e.prototype.setExtendedProp=function(e,t){var n;this.mutate({extendedProps:(n={},n[e]=t,n)})},e.prototype.setStart=function(e,t){void 0===t&&(t={});var n=this._calendar.dateEnv,r=n.createMarker(e);if(r&&this._instance){var i=ye(this._instance.range.start,r,n,t.granularity);t.maintainDuration?this.mutate({datesDelta:i}):this.mutate({startDelta:i})}},e.prototype.setEnd=function(e,t){void 0===t&&(t={});var n,r=this._calendar.dateEnv;if((null==e||(n=r.createMarker(e)))&&this._instance)if(n){var i=ye(this._instance.range.end,n,r,t.granularity);this.mutate({endDelta:i})}else this.mutate({standardProps:{hasEnd:!1}})},e.prototype.setDates=function(e,t,n){void 0===n&&(n={});var r,i=this._calendar.dateEnv,o={allDay:n.allDay},a=i.createMarker(e);if(a&&(null==t||(r=i.createMarker(t)))&&this._instance){var s=this._instance.range;!0===n.allDay&&(s=ve(s));var u=ye(s.start,a,i,n.granularity);if(r){var l=ye(s.end,r,i,n.granularity);$(u,l)?this.mutate({datesDelta:u,standardProps:o}):this.mutate({startDelta:u,endDelta:l,standardProps:o})}else o.hasEnd=!1,this.mutate({datesDelta:u,standardProps:o})}},e.prototype.moveStart=function(e){var t=J(e);t&&this.mutate({startDelta:t})},e.prototype.moveEnd=function(e){var t=J(e);t&&this.mutate({endDelta:t})},e.prototype.moveDates=function(e){var t=J(e);t&&this.mutate({datesDelta:t})},e.prototype.setAllDay=function(e,t){void 0===t&&(t={});var n={allDay:e},r=t.maintainDuration;null==r&&(r=this._calendar.opt("allDayMaintainDuration")),this._def.allDay!==e&&(n.hasEnd=r),this.mutate({standardProps:n})},e.prototype.formatRange=function(e){var t=this._calendar.dateEnv,n=this._instance,r=ot(e,this._calendar.opt("defaultRangeSeparator"));return this._def.hasEnd?t.formatRange(n.range.start,n.range.end,r,{forcedStartTzo:n.forcedStartTzo,forcedEndTzo:n.forcedEndTzo}):t.format(n.range.start,r,{forcedTzo:n.forcedStartTzo})},e.prototype.mutate=function(e){var t=this._def,n=this._instance;if(n){this._calendar.dispatch({type:"MUTATE_EVENTS",instanceId:n.instanceId,mutation:e,fromApi:!0});var r=this._calendar.state.eventStore;this._def=r.defs[t.defId],this._instance=r.instances[n.instanceId]}},e.prototype.remove=function(){this._calendar.dispatch({type:"REMOVE_EVENT_DEF",defId:this._def.defId})},Object.defineProperty(e.prototype,"source",{get:function(){var e=this._def.sourceId;return e?new lt(this._calendar,this._calendar.state.eventSources[e]):null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"start",{get:function(){return this._instance?this._calendar.dateEnv.toDate(this._instance.range.start):null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"end",{get:function(){return this._instance&&this._def.hasEnd?this._calendar.dateEnv.toDate(this._instance.range.end):null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"id",{get:function(){return this._def.publicId},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"groupId",{get:function(){return this._def.groupId},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"allDay",{get:function(){return this._def.allDay},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"title",{get:function(){return this._def.title},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this._def.url},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rendering",{get:function(){return this._def.rendering},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"startEditable",{get:function(){return this._def.ui.startEditable},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"durationEditable",{get:function(){return this._def.ui.durationEditable},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"constraint",{get:function(){return this._def.ui.constraints[0]||null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"overlap",{get:function(){return this._def.ui.overlap},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"allow",{get:function(){return this._def.ui.allows[0]||null},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"backgroundColor",{get:function(){return this._def.ui.backgroundColor},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"borderColor",{get:function(){return this._def.ui.borderColor},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"textColor",{get:function(){return this._def.ui.textColor},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"classNames",{get:function(){return this._def.ui.classNames},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"extendedProps",{get:function(){return this._def.extendedProps},enumerable:!0,configurable:!0}),e}();function dt(e,t,n,r){var i={},o={},a={},s=[],u=[],l=vt(e.defs,t);for(var c in e.defs){"inverse-background"===(S=e.defs[c]).rendering&&(S.groupId?(i[S.groupId]=[],a[S.groupId]||(a[S.groupId]=S)):o[c]=[])}for(var d in e.instances){var f=e.instances[d],p=l[(S=e.defs[f.defId]).defId],h=f.range,v=!S.allDay&&r?ge(h,r):h,g=Ve(v,n);g&&("inverse-background"===S.rendering?S.groupId?i[S.groupId].push(g):o[f.defId].push(g):("background"===S.rendering?s:u).push({def:S,ui:p,instance:f,range:g,isStart:v.start&&v.start.valueOf()===g.start.valueOf(),isEnd:v.end&&v.end.valueOf()===g.end.valueOf()}))}for(var y in i)for(var m=0,E=Le(i[y],n);m<E.length;m++){var S,b=E[m];p=l[(S=a[y]).defId];s.push({def:S,ui:p,instance:null,range:b,isStart:!1,isEnd:!1})}for(var c in o)for(var D=0,T=Le(o[c],n);D<T.length;D++){b=T[D];s.push({def:e.defs[c],ui:l[c],instance:null,range:b,isStart:!1,isEnd:!1})}return{bg:s,fg:u}}function ft(e,t,n){var r=e.calendar,i=e.view;r.hasPublicHandlers("eventRender")&&(t=t.filter((function(e){var t=r.publiclyTrigger("eventRender",[{event:new ct(r,e.eventRange.def,e.eventRange.instance),isMirror:n,isStart:e.isStart,isEnd:e.isEnd,el:e.el,view:i}]);return!1!==t&&(t&&!0!==t&&(e.el=t),!0)})));for(var o=0,a=t;o<a.length;o++){var s=a[o];pt(s.el,s)}return t}function pt(e,t){e.fcSeg=t}function ht(e){return e.fcSeg||null}function vt(e,t){return Re(e,(function(e){return gt(e,t)}))}function gt(e,t){var n=[];return t[""]&&n.push(t[""]),t[e.defId]&&n.push(t[e.defId]),n.push(e.ui),Bt(n)}function yt(e,t,n){var r=e.calendar,i=e.view;if(r.hasPublicHandlers("eventPositioned"))for(var o=0,a=t;o<a.length;o++){var s=a[o];r.publiclyTriggerAfterSizing("eventPositioned",[{event:new ct(r,s.eventRange.def,s.eventRange.instance),isMirror:n,isStart:s.isStart,isEnd:s.isEnd,el:s.el,view:i}])}r.state.eventSourceLoadingLevel||(r.afterSizingTriggers._eventsPositioned=[null])}function mt(e,t,n){for(var r=e.calendar,i=e.view,o=0,a=t;o<a.length;o++){var s=a[o];r.trigger("eventElRemove",s.el)}if(r.hasPublicHandlers("eventDestroy"))for(var u=0,l=t;u<l.length;u++){s=l[u];r.publiclyTrigger("eventDestroy",[{event:new ct(r,s.eventRange.def,s.eventRange.instance),isMirror:n,el:s.el,view:i}])}}function Et(e,t,n,r){var i=vt(e.defs,t),o={defs:{},instances:{}};for(var a in e.defs){var s=e.defs[a];o.defs[a]=St(s,i[a],n,r.pluginSystem.hooks.eventDefMutationAppliers,r)}for(var u in e.instances){var l=e.instances[u];s=o.defs[l.defId];o.instances[u]=bt(l,s,i[l.defId],n,r)}return o}function St(e,t,n,r,i){var o=n.standardProps||{};null==o.hasEnd&&t.durationEditable&&(n.startDelta||n.endDelta)&&(o.hasEnd=!0);var a=Se({},e,o,{ui:Se({},e.ui,o.ui)});n.extendedProps&&(a.extendedProps=Se({},a.extendedProps,n.extendedProps));for(var s=0,u=r;s<u.length;s++){(0,u[s])(a,n,i)}return!a.hasEnd&&i.opt("forceEventDuration")&&(a.hasEnd=!0),a}function bt(e,t,n,r,i){var o=i.dateEnv,a=r.standardProps&&!0===r.standardProps.allDay,s=r.standardProps&&!1===r.standardProps.hasEnd,u=Se({},e);return a&&(u.range=ve(u.range)),r.datesDelta&&n.startEditable&&(u.range={start:o.add(u.range.start,r.datesDelta),end:o.add(u.range.end,r.datesDelta)}),r.startDelta&&n.durationEditable&&(u.range={start:o.add(u.range.start,r.startDelta),end:u.range.end}),r.endDelta&&n.durationEditable&&(u.range={start:u.range.start,end:o.add(u.range.end,r.endDelta)}),s&&(u.range={start:u.range.start,end:i.getDefaultEventEnd(t.allDay,u.range.start)}),t.allDay&&(u.range={start:B(u.range.start),end:B(u.range.end)}),u.range.end<u.range.start&&(u.range.end=i.getDefaultEventEnd(t.allDay,u.range.start)),u}function Dt(e,t,n,r,i){switch(t.type){case"RECEIVE_EVENTS":return function(e,t,n,r,i,o){if(t&&n===t.latestFetchId){var a=ke(function(e,t,n){var r=n.opt("eventDataTransform"),i=t?t.eventDataTransform:null;return i&&(e=xe(e,i)),r&&(e=xe(e,r)),e}(i,t,o),t.sourceId,o);return r&&(a=Oe(a,r,o)),He(Tt(e,t.sourceId),a)}return e}(e,n[t.sourceId],t.fetchId,t.fetchRange,t.rawEvents,i);case"ADD_EVENTS":return function(e,t,n,r){n&&(t=Oe(t,n,r));return He(e,t)}(e,t.eventStore,r?r.activeRange:null,i);case"MERGE_EVENTS":return He(e,t.eventStore);case"PREV":case"NEXT":case"SET_DATE":case"SET_VIEW_TYPE":return r?Oe(e,r.activeRange,i):e;case"CHANGE_TIMEZONE":return function(e,t,n){var r=e.defs,i=Re(e.instances,(function(e){var i=r[e.defId];return i.allDay||i.recurringDef?e:Se({},e,{range:{start:n.createMarker(t.toDate(e.range.start,e.forcedStartTzo)),end:n.createMarker(t.toDate(e.range.end,e.forcedEndTzo))},forcedStartTzo:n.canComputeOffset?null:e.forcedStartTzo,forcedEndTzo:n.canComputeOffset?null:e.forcedEndTzo})}));return{defs:r,instances:i}}(e,t.oldDateEnv,i.dateEnv);case"MUTATE_EVENTS":return function(e,t,n,r,i){var o=Pe(e,t),a=r?{"":{startEditable:!0,durationEditable:!0,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]}}:i.eventUiBases;return o=Et(o,a,n,i),He(e,o)}(e,t.instanceId,t.mutation,t.fromApi,i);case"REMOVE_EVENT_INSTANCES":return wt(e,t.instances);case"REMOVE_EVENT_DEF":return Ue(e,(function(e){return e.defId!==t.defId}));case"REMOVE_EVENT_SOURCE":return Tt(e,t.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return Ue(e,(function(e){return!e.sourceId}));case"REMOVE_ALL_EVENTS":return{defs:{},instances:{}};case"RESET_EVENTS":return{defs:e.defs,instances:e.instances};default:return e}}function Tt(e,t){return Ue(e,(function(e){return e.sourceId!==t}))}function wt(e,t){return{defs:e.defs,instances:we(e.instances,(function(e){return!t[e.instanceId]}))}}function Rt(e,t){return Ct({eventDrag:e},t)}function Ct(e,t){var n=t.view,r=Se({businessHours:n?n.props.businessHours:{defs:{},instances:{}},dateSelection:"",eventStore:t.state.eventStore,eventUiBases:t.eventUiBases,eventSelection:"",eventDrag:null,eventResize:null},e);return(t.pluginSystem.hooks.isPropsValid||It)(r,t)}function It(e,t,n,r){return void 0===n&&(n={}),!(e.eventDrag&&!function(e,t,n,r){var i=e.eventDrag,o=i.mutatedEvents,a=o.defs,s=o.instances,u=vt(a,i.isEvent?e.eventUiBases:{"":t.selectionConfig});r&&(u=Re(u,r));var l=wt(e.eventStore,i.affectedEvents.instances),c=l.defs,d=l.instances,f=vt(c,e.eventUiBases);for(var p in s){var h=s[p],v=h.range,g=u[h.defId],y=a[h.defId];if(!Mt(g.constraints,v,l,e.businessHours,t))return!1;var m=t.opt("eventOverlap");for(var E in"function"!=typeof m&&(m=null),d){var S=d[E];if(Fe(v,S.range)){if(!1===f[S.defId].overlap&&i.isEvent)return!1;if(!1===g.overlap)return!1;if(m&&!m(new ct(t,c[S.defId],S),new ct(t,y,h)))return!1}}for(var b=t.state.eventStore,D=0,T=g.allows;D<T.length;D++){var w=T[D],R=Se({},n,{range:h.range,allDay:y.allDay}),C=b.defs[y.defId],I=b.instances[p],M=void 0;if(M=C?new ct(t,C,I):new ct(t,y),!w(t.buildDateSpanApi(R),M))return!1}}return!0}(e,t,n,r))&&!(e.dateSelection&&!function(e,t,n,r){var i=e.eventStore,o=i.defs,a=i.instances,s=e.dateSelection,u=s.range,l=t.selectionConfig;r&&(l=r(l));if(!Mt(l.constraints,u,i,e.businessHours,t))return!1;var c=t.opt("selectOverlap");"function"!=typeof c&&(c=null);for(var d in a){var f=a[d];if(Fe(u,f.range)){if(!1===l.overlap)return!1;if(c&&!c(new ct(t,o[f.defId],f)))return!1}}for(var p=0,h=l.allows;p<h.length;p++){var v=h[p],g=Se({},n,s);if(!v(t.buildDateSpanApi(g),null))return!1}return!0}(e,t,n,r))}function Mt(e,t,n,r,i){for(var o=0,a=e;o<a.length;o++){if(!Ot(kt(a[o],t,n,r,i),t))return!1}return!0}function kt(e,t,n,r,i){return"businessHours"===e?_t(Oe(r,t,i)):"string"==typeof e?_t(Ue(n,(function(t){return t.groupId===e}))):"object"==typeof e&&e?_t(Oe(e,t,i)):[]}function _t(e){var t=e.instances,n=[];for(var r in t)n.push(t[r].range);return n}function Ot(e,t){for(var n=0,r=e;n<r.length;n++){if(We(r[n],t))return!0}return!1}function Pt(e){return(e+"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#039;").replace(/"/g,"&quot;").replace(/\n/g,"<br />")}function xt(e){var t=[];for(var n in e){var r=e[n];null!=r&&""!==r&&t.push(n+":"+r)}return t.join(";")}function Nt(e){return Array.isArray(e)?e:"string"==typeof e?e.split(/\s+/):[]}var Ht={editable:Boolean,startEditable:Boolean,durationEditable:Boolean,constraint:null,overlap:null,allow:null,className:Nt,classNames:Nt,color:String,backgroundColor:String,borderColor:String,textColor:String};function Ut(e,t,n){var r=he(e,Ht,{},n),i=function(e,t){return Array.isArray(e)?ke(e,"",t,!0):"object"==typeof e&&e?ke([e],"",t,!0):null!=e?String(e):null}(r.constraint,t);return{startEditable:null!=r.startEditable?r.startEditable:r.editable,durationEditable:null!=r.durationEditable?r.durationEditable:r.editable,constraints:null!=i?[i]:[],overlap:r.overlap,allows:null!=r.allow?[r.allow]:[],backgroundColor:r.backgroundColor||r.color,borderColor:r.borderColor||r.color,textColor:r.textColor,classNames:r.classNames.concat(r.className)}}function zt(e,t,n,r){var i={},o={};for(var a in Ht){var s=e+ue(a);i[a]=t[s],o[s]=!0}if("event"===e&&(i.editable=t.editable),r)for(var a in t)o[a]||(r[a]=t[a]);return Ut(i,n)}var Lt={startEditable:null,durationEditable:null,constraints:[],overlap:null,allows:[],backgroundColor:"",borderColor:"",textColor:"",classNames:[]};function Bt(e){return e.reduce(Vt,Lt)}function Vt(e,t){return{startEditable:null!=t.startEditable?t.startEditable:e.startEditable,durationEditable:null!=t.durationEditable?t.durationEditable:e.durationEditable,constraints:e.constraints.concat(t.constraints),overlap:"boolean"==typeof t.overlap?t.overlap:e.overlap,allows:e.allows.concat(t.allows),backgroundColor:t.backgroundColor||e.backgroundColor,borderColor:t.borderColor||e.borderColor,textColor:t.textColor||e.textColor,classNames:e.classNames.concat(t.classNames)}}var At={id:String,groupId:String,title:String,url:String,rendering:String,extendedProps:null},Ft={start:null,date:null,end:null,allDay:null},Wt=0;function Zt(e,t,n,r){var i=function(e,t){var n=null;if(e){var r=t.state.eventSources[e];n=r.allDayDefault}null==n&&(n=t.opt("allDayDefault"));return n}(t,n),o={},a=function(e,t,n,r,i){for(var o=0;o<r.length;o++){var a={},s=r[o].parse(e,a,n);if(s){var u=a.allDay;return delete a.allDay,null==u&&null==(u=t)&&null==(u=s.allDayGuess)&&(u=!1),Se(i,a),{allDay:u,duration:s.duration,typeData:s.typeData,typeId:o}}}return null}(e,i,n.dateEnv,n.pluginSystem.hooks.recurringTypes,o);if(a)return(s=jt(o,t,a.allDay,Boolean(a.duration),n)).recurringDef={typeId:a.typeId,typeData:a.typeData,duration:a.duration},{def:s,instance:null};var s,u={},l=function(e,t,n,r,i){var o,a,s=function(e,t){var n=he(e,Ft,{},t);return n.start=null!==n.start?n.start:n.date,delete n.date,n}(e,r),u=s.allDay,l=null,c=!1,d=null;if(o=n.dateEnv.createMarkerMeta(s.start))l=o.marker;else if(!i)return null;null!=s.end&&(a=n.dateEnv.createMarkerMeta(s.end));null==u&&(u=null!=t?t:(!o||o.isTimeUnspecified)&&(!a||a.isTimeUnspecified));u&&l&&(l=B(l));a&&(d=a.marker,u&&(d=B(d)),l&&d<=l&&(d=null));d?c=!0:i||(c=n.opt("forceEventDuration")||!1,d=n.dateEnv.add(l,u?n.defaultAllDayEventDuration:n.defaultTimedEventDuration));return{allDay:u,hasEnd:c,range:{start:l,end:d},forcedStartTzo:o?o.forcedTzo:null,forcedEndTzo:a?a.forcedTzo:null}}(e,i,n,u,r);return l?{def:s=jt(u,t,l.allDay,l.hasEnd,n),instance:Yt(s.defId,l.range,l.forcedStartTzo,l.forcedEndTzo)}:null}function jt(e,t,n,r,i){var o={},a=function(e,t,n){var r={},i=he(e,At,{},r),o=Ut(r,t,n);return i.publicId=i.id,delete i.id,i.ui=o,i}(e,i,o);a.defId=String(Wt++),a.sourceId=t,a.allDay=n,a.hasEnd=r;for(var s=0,u=i.pluginSystem.hooks.eventDefParsers;s<u.length;s++){var l={};(0,u[s])(a,o,l),o=l}return a.extendedProps=Se(o,a.extendedProps||{}),Object.freeze(a.ui.classNames),Object.freeze(a.extendedProps),a}function Yt(e,t,n,r){return{instanceId:String(Wt++),defId:e,range:t,forcedStartTzo:null==n?null:n,forcedEndTzo:null==r?null:r}}var qt={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],rendering:"inverse-background",classNames:"fc-nonbusiness",groupId:"_businessHours"};function Gt(e,t){return ke(function(e){var t;t=!0===e?[{}]:Array.isArray(e)?e.filter((function(e){return e.daysOfWeek})):"object"==typeof e&&e?[e]:[];return t=t.map((function(e){return Se({},qt,e)}))}(e),"",t)}function Xt(e,t,n){void 0===n&&(n=[]);var r,i,o=[];function a(){if(i){for(var e=0,n=o;e<n.length;e++){n[e].unrender()}t&&t.apply(r,i),i=null}}function s(){i&&je(i,arguments)||(a(),r=this,i=arguments,e.apply(this,arguments))}s.dependents=o,s.unrender=a;for(var u=0,l=n;u<l.length;u++){l[u].dependents.push(s)}return s}var Jt={defs:{},instances:{}},Kt=function(){function e(){this.getKeysForEventDefs=Ye(this._getKeysForEventDefs),this.splitDateSelection=Ye(this._splitDateSpan),this.splitEventStore=Ye(this._splitEventStore),this.splitIndividualUi=Ye(this._splitIndividualUi),this.splitEventDrag=Ye(this._splitInteraction),this.splitEventResize=Ye(this._splitInteraction),this.eventUiBuilders={}}return e.prototype.splitProps=function(e){var t=this,n=this.getKeyInfo(e),r=this.getKeysForEventDefs(e.eventStore),i=this.splitDateSelection(e.dateSelection),o=this.splitIndividualUi(e.eventUiBases,r),a=this.splitEventStore(e.eventStore,r),s=this.splitEventDrag(e.eventDrag),u=this.splitEventResize(e.eventResize),l={};for(var c in this.eventUiBuilders=Re(n,(function(e,n){return t.eventUiBuilders[n]||Ye(Qt)})),n){var d=n[c],f=a[c]||Jt,p=this.eventUiBuilders[c];l[c]={businessHours:d.businessHours||e.businessHours,dateSelection:i[c]||null,eventStore:f,eventUiBases:p(e.eventUiBases[""],d.ui,o[c]),eventSelection:f.instances[e.eventSelection]?e.eventSelection:"",eventDrag:s[c]||null,eventResize:u[c]||null}}return l},e.prototype._splitDateSpan=function(e){var t={};if(e)for(var n=0,r=this.getKeysForDateSpan(e);n<r.length;n++){t[r[n]]=e}return t},e.prototype._getKeysForEventDefs=function(e){var t=this;return Re(e.defs,(function(e){return t.getKeysForEventDef(e)}))},e.prototype._splitEventStore=function(e,t){var n=e.defs,r=e.instances,i={};for(var o in n)for(var a=0,s=t[o];a<s.length;a++){i[f=s[a]]||(i[f]={defs:{},instances:{}}),i[f].defs[o]=n[o]}for(var u in r)for(var l=r[u],c=0,d=t[l.defId];c<d.length;c++){var f;i[f=d[c]]&&(i[f].instances[u]=l)}return i},e.prototype._splitIndividualUi=function(e,t){var n={};for(var r in e)if(r)for(var i=0,o=t[r];i<o.length;i++){var a=o[i];n[a]||(n[a]={}),n[a][r]=e[r]}return n},e.prototype._splitInteraction=function(e){var t={};if(e){var n=this._splitEventStore(e.affectedEvents,this._getKeysForEventDefs(e.affectedEvents)),r=this._getKeysForEventDefs(e.mutatedEvents),i=this._splitEventStore(e.mutatedEvents,r),o=function(r){t[r]||(t[r]={affectedEvents:n[r]||Jt,mutatedEvents:i[r]||Jt,isEvent:e.isEvent,origSeg:e.origSeg})};for(var a in n)o(a);for(var a in i)o(a)}return t},e}();function Qt(e,t,n){var r=[];e&&r.push(e),t&&r.push(t);var i={"":Bt(r)};return n&&Se(i,n),i}function $t(e,t,n,r,i){var o,a,s,u;return n instanceof Date?o=n:(o=n.date,a=n.type,s=n.forceOff),u={date:t.formatIso(o,{omitTime:!0}),type:a||"day"},"string"==typeof r&&(i=r,r=null),r=r?" "+function(e){var t=[];for(var n in e){var r=e[n];null!=r&&t.push(n+'="'+Pt(r)+'"')}return t.join(" ")}(r):"",i=i||"",!s&&e.navLinks?"<a"+r+' data-goto="'+Pt(JSON.stringify(u))+'">'+i+"</a>":"<span"+r+">"+i+"</span>"}function en(e,t,n,r){var i,o,a=n.calendar,s=n.options,u=n.theme,l=n.dateEnv,c=[];return Ze(t.activeRange,e)?(c.push("fc-"+P[e.getUTCDay()]),s.monthMode&&l.getMonth(e)!==l.getMonth(t.currentRange.start)&&c.push("fc-other-month"),o=x(i=B(a.getNow()),1),e<i?c.push("fc-past"):e>=o?c.push("fc-future"):(c.push("fc-today"),!0!==r&&c.push(u.getClass("today")))):c.push("fc-disabled-day"),c}function tn(e,t,n){var r=!1,i=function(){r||(r=!0,t.apply(this,arguments))},o=function(){r||(r=!0,n&&n.apply(this,arguments))},a=e(i,o);a&&"function"==typeof a.then&&a.then(i,o)}var nn=function(){function e(){}return e.mixInto=function(e){this.mixIntoObj(e.prototype)},e.mixIntoObj=function(e){var t=this;Object.getOwnPropertyNames(this.prototype).forEach((function(n){e[n]||(e[n]=t.prototype[n])}))},e.mixOver=function(e){var t=this;Object.getOwnPropertyNames(this.prototype).forEach((function(n){e.prototype[n]=t.prototype[n]}))},e}(),rn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Ee(t,e),t.prototype.on=function(e,t){return on(this._handlers||(this._handlers={}),e,t),this},t.prototype.one=function(e,t){return on(this._oneHandlers||(this._oneHandlers={}),e,t),this},t.prototype.off=function(e,t){return this._handlers&&an(this._handlers,e,t),this._oneHandlers&&an(this._oneHandlers,e,t),this},t.prototype.trigger=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];return this.triggerWith(e,this,t),this},t.prototype.triggerWith=function(e,t,n){return this._handlers&&de(this._handlers[e],t,n),this._oneHandlers&&(de(this._oneHandlers[e],t,n),delete this._oneHandlers[e]),this},t.prototype.hasHandlers=function(e){return this._handlers&&this._handlers[e]&&this._handlers[e].length||this._oneHandlers&&this._oneHandlers[e]&&this._oneHandlers[e].length},t}(nn);function on(e,t,n){(e[t]||(e[t]=[])).push(n)}function an(e,t,n){n?e[t]&&(e[t]=e[t].filter((function(e){return e!==n}))):delete e[t]}var sn=function(){function e(e,t,n,r){this.originEl=e,this.els=t,this.isHorizontal=n,this.isVertical=r}return e.prototype.build=function(){var e=this.originEl,t=this.originClientRect=e.getBoundingClientRect();this.isHorizontal&&this.buildElHorizontals(t.left),this.isVertical&&this.buildElVerticals(t.top)},e.prototype.buildElHorizontals=function(e){for(var t=[],n=[],r=0,i=this.els;r<i.length;r++){var o=i[r].getBoundingClientRect();t.push(o.left-e),n.push(o.right-e)}this.lefts=t,this.rights=n},e.prototype.buildElVerticals=function(e){for(var t=[],n=[],r=0,i=this.els;r<i.length;r++){var o=i[r].getBoundingClientRect();t.push(o.top-e),n.push(o.bottom-e)}this.tops=t,this.bottoms=n},e.prototype.leftToIndex=function(e){var t,n=this.lefts,r=this.rights,i=n.length;for(t=0;t<i;t++)if(e>=n[t]&&e<r[t])return t},e.prototype.topToIndex=function(e){var t,n=this.tops,r=this.bottoms,i=n.length;for(t=0;t<i;t++)if(e>=n[t]&&e<r[t])return t},e.prototype.getWidth=function(e){return this.rights[e]-this.lefts[e]},e.prototype.getHeight=function(e){return this.bottoms[e]-this.tops[e]},e}(),un=function(){function e(){}return e.prototype.getMaxScrollTop=function(){return this.getScrollHeight()-this.getClientHeight()},e.prototype.getMaxScrollLeft=function(){return this.getScrollWidth()-this.getClientWidth()},e.prototype.canScrollVertically=function(){return this.getMaxScrollTop()>0},e.prototype.canScrollHorizontally=function(){return this.getMaxScrollLeft()>0},e.prototype.canScrollUp=function(){return this.getScrollTop()>0},e.prototype.canScrollDown=function(){return this.getScrollTop()<this.getMaxScrollTop()},e.prototype.canScrollLeft=function(){return this.getScrollLeft()>0},e.prototype.canScrollRight=function(){return this.getScrollLeft()<this.getMaxScrollLeft()},e}(),ln=function(e){function t(t){var n=e.call(this)||this;return n.el=t,n}return Ee(t,e),t.prototype.getScrollTop=function(){return this.el.scrollTop},t.prototype.getScrollLeft=function(){return this.el.scrollLeft},t.prototype.setScrollTop=function(e){this.el.scrollTop=e},t.prototype.setScrollLeft=function(e){this.el.scrollLeft=e},t.prototype.getScrollWidth=function(){return this.el.scrollWidth},t.prototype.getScrollHeight=function(){return this.el.scrollHeight},t.prototype.getClientHeight=function(){return this.el.clientHeight},t.prototype.getClientWidth=function(){return this.el.clientWidth},t}(un),cn=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Ee(t,e),t.prototype.getScrollTop=function(){return window.pageYOffset},t.prototype.getScrollLeft=function(){return window.pageXOffset},t.prototype.setScrollTop=function(e){window.scroll(window.pageXOffset,e)},t.prototype.setScrollLeft=function(e){window.scroll(e,window.pageYOffset)},t.prototype.getScrollWidth=function(){return document.documentElement.scrollWidth},t.prototype.getScrollHeight=function(){return document.documentElement.scrollHeight},t.prototype.getClientHeight=function(){return document.documentElement.clientHeight},t.prototype.getClientWidth=function(){return document.documentElement.clientWidth},t}(un),dn=function(e){function t(t,n){var i=e.call(this,r("div",{className:"fc-scroller"}))||this;return i.overflowX=t,i.overflowY=n,i.applyOverflow(),i}return Ee(t,e),t.prototype.clear=function(){this.setHeight("auto"),this.applyOverflow()},t.prototype.destroy=function(){c(this.el)},t.prototype.applyOverflow=function(){y(this.el,{overflowX:this.overflowX,overflowY:this.overflowY})},t.prototype.lockOverflow=function(e){var t=this.overflowX,n=this.overflowY;e=e||this.getScrollbarWidths(),"auto"===t&&(t=e.bottom||this.canScrollHorizontally()?"scroll":"hidden"),"auto"===n&&(n=e.left||e.right||this.canScrollVertically()?"scroll":"hidden"),y(this.el,{overflowX:t,overflowY:n})},t.prototype.setHeight=function(e){m(this.el,"height",e)},t.prototype.getScrollbarWidths=function(){var e=T(this.el);return{left:e.scrollbarLeft,right:e.scrollbarRight,bottom:e.scrollbarBottom}},t}(ln),fn=function(){function e(e){this.calendarOptions=e,this.processIconOverride()}return e.prototype.processIconOverride=function(){this.iconOverrideOption&&this.setIconOverride(this.calendarOptions[this.iconOverrideOption])},e.prototype.setIconOverride=function(e){var t,n;if("object"==typeof e&&e){for(n in t=Se({},this.iconClasses),e)t[n]=this.applyIconOverridePrefix(e[n]);this.iconClasses=t}else!1===e&&(this.iconClasses={})},e.prototype.applyIconOverridePrefix=function(e){var t=this.iconOverridePrefix;return t&&0!==e.indexOf(t)&&(e=t+e),e},e.prototype.getClass=function(e){return this.classes[e]||""},e.prototype.getIconClass=function(e){var t=this.iconClasses[e];return t?this.baseIconClass+" "+t:""},e.prototype.getCustomButtonIconClass=function(e){var t;return this.iconOverrideCustomButtonOption&&(t=e[this.iconOverrideCustomButtonOption])?this.baseIconClass+" "+this.applyIconOverridePrefix(t):""},e}();fn.prototype.classes={},fn.prototype.iconClasses={},fn.prototype.baseIconClass="",fn.prototype.iconOverridePrefix="";var pn=0,hn=function(){function e(e,t,n,r,i){this.calendar=e,this.theme=t,this.dateEnv=n,this.options=r,this.view=i,this.isRtl="rtl"===r.dir,this.eventOrderSpecs=ie(r.eventOrder),this.nextDayThreshold=J(r.nextDayThreshold)}return e.prototype.extend=function(t,n){return new e(this.calendar,this.theme,this.dateEnv,t||this.options,n||this.view)},e}(),vn=function(){function e(){this.everRendered=!1,this.uid=String(pn++)}return e.addEqualityFuncs=function(e){this.prototype.equalityFuncs=Se({},this.prototype.equalityFuncs,e)},e.prototype.receiveProps=function(e,t){this.receiveContext(t);var n=function(e,t,n){var r={},i=!1;for(var o in t)o in e&&(e[o]===t[o]||n[o]&&n[o](e[o],t[o]))?r[o]=e[o]:(r[o]=t[o],i=!0);for(var o in e)if(!(o in t)){i=!0;break}return{anyChanges:i,comboProps:r}}(this.props||{},e,this.equalityFuncs),r=n.anyChanges,i=n.comboProps;this.props=i,r&&(this.everRendered&&this.beforeUpdate(),this.render(i,t),this.everRendered&&this.afterUpdate()),this.everRendered=!0},e.prototype.receiveContext=function(e){var t=this.context;this.context=e,t||this.firstContext(e)},e.prototype.render=function(e,t){},e.prototype.firstContext=function(e){},e.prototype.beforeUpdate=function(){},e.prototype.afterUpdate=function(){},e.prototype.destroy=function(){},e}();vn.prototype.equalityFuncs={};var gn=function(e){function t(t){var n=e.call(this)||this;return n.el=t,n}return Ee(t,e),t.prototype.destroy=function(){e.prototype.destroy.call(this),c(this.el)},t.prototype.buildPositionCaches=function(){},t.prototype.queryHit=function(e,t,n,r){return null},t.prototype.isInteractionValid=function(e){var t=this.context.calendar,n=this.props.dateProfile,r=e.mutatedEvents.instances;if(n)for(var i in r)if(!We(n.validRange,r[i].range))return!1;return Rt(e,t)},t.prototype.isDateSelectionValid=function(e){var t=this.context.calendar,n=this.props.dateProfile;return!(n&&!We(n.validRange,e.range))&&function(e,t){return Ct({dateSelection:e},t)}(e,t)},t.prototype.isValidSegDownEl=function(e){return!this.props.eventDrag&&!this.props.eventResize&&!p(e,".fc-mirror")&&(this.isPopover()||!this.isInPopover(e))},t.prototype.isValidDateDownEl=function(e){var t=p(e,this.fgSegSelector);return(!t||t.classList.contains("fc-mirror"))&&!p(e,".fc-more")&&!p(e,"a[data-goto]")&&!this.isInPopover(e)},t.prototype.isPopover=function(){return this.el.classList.contains("fc-popover")},t.prototype.isInPopover=function(e){return Boolean(p(e,".fc-popover"))},t}(vn);gn.prototype.fgSegSelector=".fc-event-container > *",gn.prototype.bgSegSelector=".fc-bgevent:not(.fc-nonbusiness)";var yn=0;function mn(e){return{id:String(yn++),deps:e.deps||[],reducers:e.reducers||[],eventDefParsers:e.eventDefParsers||[],isDraggableTransformers:e.isDraggableTransformers||[],eventDragMutationMassagers:e.eventDragMutationMassagers||[],eventDefMutationAppliers:e.eventDefMutationAppliers||[],dateSelectionTransformers:e.dateSelectionTransformers||[],datePointTransforms:e.datePointTransforms||[],dateSpanTransforms:e.dateSpanTransforms||[],views:e.views||{},viewPropsTransformers:e.viewPropsTransformers||[],isPropsValid:e.isPropsValid||null,externalDefTransforms:e.externalDefTransforms||[],eventResizeJoinTransforms:e.eventResizeJoinTransforms||[],viewContainerModifiers:e.viewContainerModifiers||[],eventDropTransformers:e.eventDropTransformers||[],componentInteractions:e.componentInteractions||[],calendarInteractions:e.calendarInteractions||[],themeClasses:e.themeClasses||{},eventSourceDefs:e.eventSourceDefs||[],cmdFormatter:e.cmdFormatter,recurringTypes:e.recurringTypes||[],namedTimeZonedImpl:e.namedTimeZonedImpl,defaultView:e.defaultView||"",elementDraggingImpl:e.elementDraggingImpl,optionChangeHandlers:e.optionChangeHandlers||{}}}var En=function(){function e(){this.hooks={reducers:[],eventDefParsers:[],isDraggableTransformers:[],eventDragMutationMassagers:[],eventDefMutationAppliers:[],dateSelectionTransformers:[],datePointTransforms:[],dateSpanTransforms:[],views:{},viewPropsTransformers:[],isPropsValid:null,externalDefTransforms:[],eventResizeJoinTransforms:[],viewContainerModifiers:[],eventDropTransformers:[],componentInteractions:[],calendarInteractions:[],themeClasses:{},eventSourceDefs:[],cmdFormatter:null,recurringTypes:[],namedTimeZonedImpl:null,defaultView:"",elementDraggingImpl:null,optionChangeHandlers:{}},this.addedHash={}}return e.prototype.add=function(e){if(!this.addedHash[e.id]){this.addedHash[e.id]=!0;for(var t=0,n=e.deps;t<n.length;t++){var r=n[t];this.add(r)}this.hooks=(i=this.hooks,o=e,{reducers:i.reducers.concat(o.reducers),eventDefParsers:i.eventDefParsers.concat(o.eventDefParsers),isDraggableTransformers:i.isDraggableTransformers.concat(o.isDraggableTransformers),eventDragMutationMassagers:i.eventDragMutationMassagers.concat(o.eventDragMutationMassagers),eventDefMutationAppliers:i.eventDefMutationAppliers.concat(o.eventDefMutationAppliers),dateSelectionTransformers:i.dateSelectionTransformers.concat(o.dateSelectionTransformers),datePointTransforms:i.datePointTransforms.concat(o.datePointTransforms),dateSpanTransforms:i.dateSpanTransforms.concat(o.dateSpanTransforms),views:Se({},i.views,o.views),viewPropsTransformers:i.viewPropsTransformers.concat(o.viewPropsTransformers),isPropsValid:o.isPropsValid||i.isPropsValid,externalDefTransforms:i.externalDefTransforms.concat(o.externalDefTransforms),eventResizeJoinTransforms:i.eventResizeJoinTransforms.concat(o.eventResizeJoinTransforms),viewContainerModifiers:i.viewContainerModifiers.concat(o.viewContainerModifiers),eventDropTransformers:i.eventDropTransformers.concat(o.eventDropTransformers),calendarInteractions:i.calendarInteractions.concat(o.calendarInteractions),componentInteractions:i.componentInteractions.concat(o.componentInteractions),themeClasses:Se({},i.themeClasses,o.themeClasses),eventSourceDefs:i.eventSourceDefs.concat(o.eventSourceDefs),cmdFormatter:o.cmdFormatter||i.cmdFormatter,recurringTypes:i.recurringTypes.concat(o.recurringTypes),namedTimeZonedImpl:o.namedTimeZonedImpl||i.namedTimeZonedImpl,defaultView:i.defaultView||o.defaultView,elementDraggingImpl:i.elementDraggingImpl||o.elementDraggingImpl,optionChangeHandlers:Se({},i.optionChangeHandlers,o.optionChangeHandlers)})}var i,o},e}();var Sn=mn({eventSourceDefs:[{ignoreRange:!0,parseMeta:function(e){return Array.isArray(e)?e:Array.isArray(e.events)?e.events:null},fetch:function(e,t){t({rawEvents:e.eventSource.meta})}}]}),bn=mn({eventSourceDefs:[{parseMeta:function(e){return"function"==typeof e?e:"function"==typeof e.events?e.events:null},fetch:function(e,t,n){var r=e.calendar.dateEnv;tn(e.eventSource.meta.bind(null,{start:r.toDate(e.range.start),end:r.toDate(e.range.end),startStr:r.formatIso(e.range.start),endStr:r.formatIso(e.range.end),timeZone:r.timeZone}),(function(e){t({rawEvents:e})}),n)}}]});function Dn(e,t,n,r,i){var o=null;"GET"===(e=e.toUpperCase())?t=function(e,t){return e+(-1===e.indexOf("?")?"?":"&")+Tn(t)}(t,n):o=Tn(n);var a=new XMLHttpRequest;a.open(e,t,!0),"GET"!==e&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.onload=function(){if(a.status>=200&&a.status<400)try{var e=JSON.parse(a.responseText);r(e,a)}catch(e){i("Failure parsing JSON",a)}else i("Request failed",a)},a.onerror=function(){i("Request failed",a)},a.send(o)}function Tn(e){var t=[];for(var n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}var wn=mn({eventSourceDefs:[{parseMeta:function(e){if("string"==typeof e)e={url:e};else if(!e||"object"!=typeof e||!e.url)return null;return{url:e.url,method:(e.method||"GET").toUpperCase(),extraParams:e.extraParams,startParam:e.startParam,endParam:e.endParam,timeZoneParam:e.timeZoneParam}},fetch:function(e,t,n){var r=e.eventSource.meta,i=function(e,t,n){var r,i,o,a,s=n.dateEnv,u={};null==(r=e.startParam)&&(r=n.opt("startParam"));null==(i=e.endParam)&&(i=n.opt("endParam"));null==(o=e.timeZoneParam)&&(o=n.opt("timeZoneParam"));a="function"==typeof e.extraParams?e.extraParams():e.extraParams||{};Se(u,a),u[r]=s.formatIso(t.start),u[i]=s.formatIso(t.end),"local"!==s.timeZone&&(u[o]=s.timeZone);return u}(r,e.range,e.calendar);Dn(r.method,r.url,i,(function(e,n){t({rawEvents:e,xhr:n})}),(function(e,t){n({message:e,xhr:t})}))}}]});var Rn=mn({recurringTypes:[{parse:function(e,t,n){var r,i,o=n.createMarker.bind(n),a=he(e,{daysOfWeek:null,startTime:J,endTime:J,startRecur:o,endRecur:o},{},t),s=!1;for(var u in a)if(null!=a[u]){s=!0;break}if(s){var l=null;return"duration"in t&&(l=J(t.duration),delete t.duration),!l&&a.startTime&&a.endTime&&(r=a.endTime,i=a.startTime,l={years:r.years-i.years,months:r.months-i.months,days:r.days-i.days,milliseconds:r.milliseconds-i.milliseconds}),{allDayGuess:Boolean(!a.startTime&&!a.endTime),duration:l,typeData:a}}return null},expand:function(e,t,n){var r=Ve(t,{start:e.startRecur,end:e.endRecur});return r?function(e,t,n,r){var i=e?Ce(e):null,o=B(n.start),a=n.end,s=[];for(;o<a;){var u=void 0;i&&!i[o.getUTCDay()]||(u=t?r.add(o,t):o,s.push(u)),o=x(o,1)}return s}(e.daysOfWeek,e.startTime,r,n):[]}}]});var Cn=mn({optionChangeHandlers:{events:function(e,t,n){In([e],t,n)},eventSources:In,plugins:function(e,t){t.addPluginInputs(e)}}});function In(e,t,n){for(var r=Ie(t.state.eventSources),i=[],o=0,a=e;o<a.length;o++){for(var s=a[o],u=!1,l=0;l<r.length;l++)if(n(r[l]._raw,s)){r.splice(l,1),u=!0;break}u||i.push(s)}for(var c=0,d=r;c<d.length;c++){var f=d[c];t.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:f.sourceId})}for(var p=0,h=i;p<h.length;p++){var v=h[p];t.addEventSource(v)}}var Mn={defaultRangeSeparator:" - ",titleRangeSeparator:" – ",defaultTimedEventDuration:"01:00:00",defaultAllDayEventDuration:{day:1},forceEventDuration:!1,nextDayThreshold:"00:00:00",columnHeader:!0,defaultView:"",aspectRatio:1.35,header:{left:"title",center:"",right:"today prev,next"},weekends:!0,weekNumbers:!1,weekNumberCalculation:"local",editable:!1,scrollTime:"06:00:00",minTime:"00:00:00",maxTime:"24:00:00",showNonCurrentDates:!0,lazyFetching:!0,startParam:"start",endParam:"end",timeZoneParam:"timeZone",timeZone:"local",locales:[],locale:"",timeGridEventMinHeight:0,themeSystem:"standard",dragRevertDuration:500,dragScroll:!0,allDayMaintainDuration:!1,unselectAuto:!0,dropAccept:"*",eventOrder:"start,-duration,allDay,title",eventLimit:!1,eventLimitClick:"popover",dayPopoverFormat:{month:"long",day:"numeric",year:"numeric"},handleWindowResize:!0,windowResizeDelay:100,longPressDelay:1e3,eventDragMinDistance:5},kn={header:{left:"next,prev today",center:"",right:"title"},buttonIcons:{prev:"fc-icon-chevron-right",next:"fc-icon-chevron-left",prevYear:"fc-icon-chevrons-right",nextYear:"fc-icon-chevrons-left"}},_n=["header","footer","buttonText","buttonIcons"];var On=[Sn,bn,wn,Rn,Cn];var Pn={code:"en",week:{dow:0,doy:4},dir:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekLabel:"W",allDayText:"all-day",eventLimitText:"more",noEventsMessage:"No events to display"};function xn(e){for(var t=e.length>0?e[0].code:"en",n=window.FullCalendarLocalesAll||[],r=window.FullCalendarLocales||{},i=n.concat(Ie(r),e),o={en:Pn},a=0,s=i;a<s.length;a++){var u=s[a];o[u.code]=u}return{map:o,defaultCode:t}}function Nn(e,t){return"object"!=typeof e||Array.isArray(e)?function(e,t){var n=[].concat(e||[]),r=function(e,t){for(var n=0;n<e.length;n++)for(var r=e[n].toLocaleLowerCase().split("-"),i=r.length;i>0;i--){var o=r.slice(0,i).join("-");if(t[o])return t[o]}return null}(n,t)||Pn;return Hn(e,n,r)}(e,t):Hn(e.code,[e.code],e)}function Hn(e,t,n){var r=Te([Pn,n],["buttonText"]);delete r.code;var i=r.week;return delete r.week,{codeArg:e,codes:t,week:i,simpleNumberFormat:new Intl.NumberFormat(e),options:r}}var Un=function(){function e(e){this.overrides=Se({},e),this.dynamicOverrides={},this.compute()}return e.prototype.mutate=function(e,t,n){if(Object.keys(e).length||t.length){var r=n?this.dynamicOverrides:this.overrides;Se(r,e);for(var i=0,o=t;i<o.length;i++){delete r[o[i]]}this.compute()}},e.prototype.compute=function(){var e=fe(this.dynamicOverrides.locales,this.overrides.locales,Mn.locales),t=fe(this.dynamicOverrides.locale,this.overrides.locale,Mn.locale),n=xn(e),r=Nn(t||n.defaultCode,n.map).options,i="rtl"===fe(this.dynamicOverrides.dir,this.overrides.dir,r.dir)?kn:{};this.dirDefaults=i,this.localeDefaults=r,this.computed=Te([Mn,i,r,this.overrides,this.dynamicOverrides],_n)},e}(),zn={};var Ln,Bn=function(){function e(){}return e.prototype.getMarkerYear=function(e){return e.getUTCFullYear()},e.prototype.getMarkerMonth=function(e){return e.getUTCMonth()},e.prototype.getMarkerDay=function(e){return e.getUTCDate()},e.prototype.arrayToMarker=function(e){return j(e)},e.prototype.markerToArray=function(e){return Z(e)},e}();Ln=Bn,zn["gregory"]=Ln;var Vn=/^\s*(\d{4})(-(\d{2})(-(\d{2})([T ](\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|(([-+])(\d{2})(:?(\d{2}))?))?)?)?)?$/;function An(e){var t=Vn.exec(e);if(t){var n=new Date(Date.UTC(Number(t[1]),t[3]?Number(t[3])-1:0,Number(t[5]||1),Number(t[7]||0),Number(t[8]||0),Number(t[10]||0),t[12]?1e3*Number("0."+t[12]):0));if(Y(n)){var r=null;return t[13]&&(r=("-"===t[15]?-1:1)*(60*Number(t[16]||0)+Number(t[18]||0))),{marker:n,isTimeUnspecified:!t[6],timeZoneOffset:r}}}return null}var Fn=function(){function e(e){var t=this.timeZone=e.timeZone,n="local"!==t&&"UTC"!==t;e.namedTimeZoneImpl&&n&&(this.namedTimeZoneImpl=new e.namedTimeZoneImpl(t)),this.canComputeOffset=Boolean(!n||this.namedTimeZoneImpl),this.calendarSystem=function(e){return new zn[e]}(e.calendarSystem),this.locale=e.locale,this.weekDow=e.locale.week.dow,this.weekDoy=e.locale.week.doy,"ISO"===e.weekNumberCalculation&&(this.weekDow=1,this.weekDoy=4),"number"==typeof e.firstDay&&(this.weekDow=e.firstDay),"function"==typeof e.weekNumberCalculation&&(this.weekNumberFunc=e.weekNumberCalculation),this.weekLabel=null!=e.weekLabel?e.weekLabel:e.locale.options.weekLabel,this.cmdFormatter=e.cmdFormatter}return e.prototype.createMarker=function(e){var t=this.createMarkerMeta(e);return null===t?null:t.marker},e.prototype.createNowMarker=function(){return this.canComputeOffset?this.timestampToMarker((new Date).valueOf()):j(F(new Date))},e.prototype.createMarkerMeta=function(e){if("string"==typeof e)return this.parse(e);var t=null;return"number"==typeof e?t=this.timestampToMarker(e):e instanceof Date?(e=e.valueOf(),isNaN(e)||(t=this.timestampToMarker(e))):Array.isArray(e)&&(t=j(e)),null!==t&&Y(t)?{marker:t,isTimeUnspecified:!1,forcedTzo:null}:null},e.prototype.parse=function(e){var t=An(e);if(null===t)return null;var n=t.marker,r=null;return null!==t.timeZoneOffset&&(this.canComputeOffset?n=this.timestampToMarker(n.valueOf()-60*t.timeZoneOffset*1e3):r=t.timeZoneOffset),{marker:n,isTimeUnspecified:t.isTimeUnspecified,forcedTzo:r}},e.prototype.getYear=function(e){return this.calendarSystem.getMarkerYear(e)},e.prototype.getMonth=function(e){return this.calendarSystem.getMarkerMonth(e)},e.prototype.add=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[0]+=t.years,n[1]+=t.months,n[2]+=t.days,n[6]+=t.milliseconds,this.calendarSystem.arrayToMarker(n)},e.prototype.subtract=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[0]-=t.years,n[1]-=t.months,n[2]-=t.days,n[6]-=t.milliseconds,this.calendarSystem.arrayToMarker(n)},e.prototype.addYears=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[0]+=t,this.calendarSystem.arrayToMarker(n)},e.prototype.addMonths=function(e,t){var n=this.calendarSystem.markerToArray(e);return n[1]+=t,this.calendarSystem.arrayToMarker(n)},e.prototype.diffWholeYears=function(e,t){var n=this.calendarSystem;return q(e)===q(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)&&n.getMarkerMonth(e)===n.getMarkerMonth(t)?n.getMarkerYear(t)-n.getMarkerYear(e):null},e.prototype.diffWholeMonths=function(e,t){var n=this.calendarSystem;return q(e)===q(t)&&n.getMarkerDay(e)===n.getMarkerDay(t)?n.getMarkerMonth(t)-n.getMarkerMonth(e)+12*(n.getMarkerYear(t)-n.getMarkerYear(e)):null},e.prototype.greatestWholeUnit=function(e,t){var n=this.diffWholeYears(e,t);return null!==n?{unit:"year",value:n}:null!==(n=this.diffWholeMonths(e,t))?{unit:"month",value:n}:null!==(n=z(e,t))?{unit:"week",value:n}:null!==(n=L(e,t))?{unit:"day",value:n}:ce(n=function(e,t){return(t.valueOf()-e.valueOf())/36e5}(e,t))?{unit:"hour",value:n}:ce(n=function(e,t){return(t.valueOf()-e.valueOf())/6e4}(e,t))?{unit:"minute",value:n}:ce(n=function(e,t){return(t.valueOf()-e.valueOf())/1e3}(e,t))?{unit:"second",value:n}:{unit:"millisecond",value:t.valueOf()-e.valueOf()}},e.prototype.countDurationsBetween=function(e,t,n){var r;return n.years&&null!==(r=this.diffWholeYears(e,t))?r/(ee(n)/365):n.months&&null!==(r=this.diffWholeMonths(e,t))?r/function(e){return ee(e)/30}(n):n.days&&null!==(r=L(e,t))?r/ee(n):(t.valueOf()-e.valueOf())/te(n)},e.prototype.startOf=function(e,t){return"year"===t?this.startOfYear(e):"month"===t?this.startOfMonth(e):"week"===t?this.startOfWeek(e):"day"===t?B(e):"hour"===t?function(e){return j([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours()])}(e):"minute"===t?function(e){return j([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes()])}(e):"second"===t?function(e){return j([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds()])}(e):void 0},e.prototype.startOfYear=function(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e)])},e.prototype.startOfMonth=function(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e)])},e.prototype.startOfWeek=function(e){return this.calendarSystem.arrayToMarker([this.calendarSystem.getMarkerYear(e),this.calendarSystem.getMarkerMonth(e),e.getUTCDate()-(e.getUTCDay()-this.weekDow+7)%7])},e.prototype.computeWeekNumber=function(e){return this.weekNumberFunc?this.weekNumberFunc(this.toDate(e)):function(e,t,n){var r=e.getUTCFullYear(),i=V(e,r,t,n);if(i<1)return V(e,r-1,t,n);var o=V(e,r+1,t,n);return o>=1?Math.min(i,o):i}(e,this.weekDow,this.weekDoy)},e.prototype.format=function(e,t,n){return void 0===n&&(n={}),t.format({marker:e,timeZoneOffset:null!=n.forcedTzo?n.forcedTzo:this.offsetForMarker(e)},this)},e.prototype.formatRange=function(e,t,n,r){return void 0===r&&(r={}),r.isEndExclusive&&(t=N(t,-1)),n.formatRange({marker:e,timeZoneOffset:null!=r.forcedStartTzo?r.forcedStartTzo:this.offsetForMarker(e)},{marker:t,timeZoneOffset:null!=r.forcedEndTzo?r.forcedEndTzo:this.offsetForMarker(t)},this)},e.prototype.formatIso=function(e,t){void 0===t&&(t={});var n=null;return t.omitTimeZoneOffset||(n=null!=t.forcedTzo?t.forcedTzo:this.offsetForMarker(e)),function(e,t,n){void 0===n&&(n=!1);var r=e.toISOString();return r=r.replace(".000",""),n&&(r=r.replace("T00:00:00Z","")),r.length>10&&(null==t?r=r.replace("Z",""):0!==t&&(r=r.replace("Z",at(t,!0)))),r}(e,n,t.omitTime)},e.prototype.timestampToMarker=function(e){return"local"===this.timeZone?j(F(new Date(e))):"UTC"!==this.timeZone&&this.namedTimeZoneImpl?j(this.namedTimeZoneImpl.timestampToArray(e)):new Date(e)},e.prototype.offsetForMarker=function(e){return"local"===this.timeZone?-W(Z(e)).getTimezoneOffset():"UTC"===this.timeZone?0:this.namedTimeZoneImpl?this.namedTimeZoneImpl.offsetForArray(Z(e)):null},e.prototype.toDate=function(e,t){return"local"===this.timeZone?W(Z(e)):"UTC"===this.timeZone?new Date(e.valueOf()):this.namedTimeZoneImpl?new Date(e.valueOf()-1e3*this.namedTimeZoneImpl.offsetForArray(Z(e))*60):new Date(e.valueOf()-(t||0))},e}(),Wn={id:String,allDayDefault:Boolean,eventDataTransform:Function,success:Function,failure:Function},Zn=0;function jn(e,t){return!t.pluginSystem.hooks.eventSourceDefs[e.sourceDefId].ignoreRange}function Yn(e,t){for(var n=t.pluginSystem.hooks.eventSourceDefs,r=n.length-1;r>=0;r--){var i=n[r].parseMeta(e);if(i){var o=qn("object"==typeof e?e:{},i,r,t);return o._raw=e,o}}return null}function qn(e,t,n,r){var i={},o=he(e,Wn,{},i),a={},s=Ut(i,r,a);return o.isFetching=!1,o.latestFetchId="",o.fetchRange=null,o.publicId=String(e.id||""),o.sourceId=String(Zn++),o.sourceDefId=n,o.meta=t,o.ui=s,o.extendedProps=a,o}function Gn(e,t,n,r){switch(t.type){case"ADD_EVENT_SOURCES":return function(e,t,n,r){for(var i={},o=0,a=t;o<a.length;o++){var s=a[o];i[s.sourceId]=s}n&&(i=Jn(i,n,r));return Se({},e,i)}(e,t.sources,n?n.activeRange:null,r);case"REMOVE_EVENT_SOURCE":return i=e,o=t.sourceId,we(i,(function(e){return e.sourceId!==o}));case"PREV":case"NEXT":case"SET_DATE":case"SET_VIEW_TYPE":return n?Jn(e,n.activeRange,r):e;case"FETCH_EVENT_SOURCES":case"CHANGE_TIMEZONE":return Kn(e,t.sourceIds?Ce(t.sourceIds):function(e,t){return we(e,(function(e){return jn(e,t)}))}(e,r),n?n.activeRange:null,r);case"RECEIVE_EVENTS":case"RECEIVE_EVENT_ERROR":return function(e,t,n,r){var i,o=e[t];if(o&&n===o.latestFetchId)return Se({},e,((i={})[t]=Se({},o,{isFetching:!1,fetchRange:r}),i));return e}(e,t.sourceId,t.fetchId,t.fetchRange);case"REMOVE_ALL_EVENT_SOURCES":return{};default:return e}var i,o}var Xn=0;function Jn(e,t,n){return Kn(e,we(e,(function(e){return function(e,t,n){return jn(e,n)?!n.opt("lazyFetching")||!e.fetchRange||e.isFetching||t.start<e.fetchRange.start||t.end>e.fetchRange.end:!e.latestFetchId}(e,t,n)})),t,n)}function Kn(e,t,n,r){var i={};for(var o in e){var a=e[o];t[o]?i[o]=Qn(a,n,r):i[o]=a}return i}function Qn(e,t,n){var r=n.pluginSystem.hooks.eventSourceDefs[e.sourceDefId],i=String(Xn++);return r.fetch({eventSource:e,calendar:n,range:t},(function(r){var o,a,s=r.rawEvents,u=n.opt("eventSourceSuccess");e.success&&(a=e.success(s,r.xhr)),u&&(o=u(s,r.xhr)),s=a||o||s,n.dispatch({type:"RECEIVE_EVENTS",sourceId:e.sourceId,fetchId:i,fetchRange:t,rawEvents:s})}),(function(r){var o=n.opt("eventSourceFailure");console.warn(r.message,r),e.failure&&e.failure(r),o&&o(r),n.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:e.sourceId,fetchId:i,fetchRange:t,error:r})})),Se({},e,{isFetching:!0,latestFetchId:i})}var $n=function(){function e(e,t){this.viewSpec=e,this.options=e.options,this.dateEnv=t.dateEnv,this.calendar=t,this.initHiddenDays()}return e.prototype.buildPrev=function(e,t){var n=this.dateEnv,r=n.subtract(n.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(r,-1)},e.prototype.buildNext=function(e,t){var n=this.dateEnv,r=n.add(n.startOf(t,e.currentRangeUnit),e.dateIncrement);return this.build(r,1)},e.prototype.build=function(e,t,n){var r;void 0===n&&(n=!1);var i,o,a,s,u,l,c,d,f;return r=this.buildValidRange(),r=this.trimHiddenDays(r),n&&(d=e,e=null!=(f=r).start&&d<f.start?f.start:null!=f.end&&d>=f.end?new Date(f.end.valueOf()-1):d),a=this.buildCurrentRangeInfo(e,t),s=/^(year|month|week|day)$/.test(a.unit),u=this.buildRenderRange(this.trimHiddenDays(a.range),a.unit,s),l=u=this.trimHiddenDays(u),this.options.showNonCurrentDates||(l=Ve(l,a.range)),i=J(this.options.minTime),o=J(this.options.maxTime),l=Ve(l=this.adjustActiveRange(l,i,o),r),c=Fe(a.range,r),{validRange:r,currentRange:a.range,currentRangeUnit:a.unit,isRangeAllDay:s,activeRange:l,renderRange:u,minTime:i,maxTime:o,isValid:c,dateIncrement:this.buildDateIncrement(a.duration)}},e.prototype.buildValidRange=function(){return this.getRangeOption("validRange",this.calendar.getNow())||{start:null,end:null}},e.prototype.buildCurrentRangeInfo=function(e,t){var n,r=this.viewSpec,i=this.dateEnv,o=null,a=null,s=null;return r.duration?(o=r.duration,a=r.durationUnit,s=this.buildRangeFromDuration(e,t,o,a)):(n=this.options.dayCount)?(a="day",s=this.buildRangeFromDayCount(e,t,n)):(s=this.buildCustomVisibleRange(e))?a=i.greatestWholeUnit(s.start,s.end).unit:(a=ne(o=this.getFallbackDuration()).unit,s=this.buildRangeFromDuration(e,t,o,a)),{duration:o,unit:a,range:s}},e.prototype.getFallbackDuration=function(){return J({day:1})},e.prototype.adjustActiveRange=function(e,t,n){var r=this.dateEnv,i=e.start,o=e.end;return this.viewSpec.class.prototype.usesMinMaxTime&&(ee(t)<0&&(i=B(i),i=r.add(i,t)),ee(n)>1&&(o=x(o=B(o),-1),o=r.add(o,n))),{start:i,end:o}},e.prototype.buildRangeFromDuration=function(e,t,n,r){var i,o,a,s,u,l=this.dateEnv,c=this.options.dateAlignment;function d(){a=l.startOf(e,c),s=l.add(a,n),u={start:a,end:s}}return c||((i=this.options.dateIncrement)?(o=J(i),c=te(o)<te(n)?ne(o,!Q(i)).unit:r):c=r),ee(n)<=1&&this.isHiddenDay(a)&&(a=B(a=this.skipHiddenDays(a,t))),d(),this.trimHiddenDays(u)||(e=this.skipHiddenDays(e,t),d()),u},e.prototype.buildRangeFromDayCount=function(e,t,n){var r,i=this.dateEnv,o=this.options.dateAlignment,a=0,s=e;o&&(s=i.startOf(s,o)),s=B(s),r=s=this.skipHiddenDays(s,t);do{r=x(r,1),this.isHiddenDay(r)||a++}while(a<n);return{start:s,end:r}},e.prototype.buildCustomVisibleRange=function(e){var t=this.dateEnv,n=this.getRangeOption("visibleRange",t.toDate(e));return!n||null!=n.start&&null!=n.end?n:null},e.prototype.buildRenderRange=function(e,t,n){return e},e.prototype.buildDateIncrement=function(e){var t,n=this.options.dateIncrement;return n?J(n):(t=this.options.dateAlignment)?J(1,t):e||J({days:1})},e.prototype.getRangeOption=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];var r=this.options[e];return"function"==typeof r&&(r=r.apply(null,t)),r&&(r=ze(r,this.dateEnv)),r&&(r=ge(r)),r},e.prototype.initHiddenDays=function(){var e,t=this.options.hiddenDays||[],n=[],r=0;for(!1===this.options.weekends&&t.push(0,6),e=0;e<7;e++)(n[e]=-1!==t.indexOf(e))||r++;if(!r)throw new Error("invalid hiddenDays");this.isHiddenDayHash=n},e.prototype.trimHiddenDays=function(e){var t=e.start,n=e.end;return t&&(t=this.skipHiddenDays(t)),n&&(n=this.skipHiddenDays(n,-1,!0)),null==t||null==n||t<n?{start:t,end:n}:null},e.prototype.isHiddenDay=function(e){return e instanceof Date&&(e=e.getUTCDay()),this.isHiddenDayHash[e]},e.prototype.skipHiddenDays=function(e,t,n){for(void 0===t&&(t=1),void 0===n&&(n=!1);this.isHiddenDayHash[(e.getUTCDay()+(n?t:0)+7)%7];)e=x(e,t);return e},e}();function er(e,t,n){for(var r=function(e,t){switch(t.type){case"SET_VIEW_TYPE":return t.viewType;default:return e}}(e.viewType,t),i=function(e,t,n,r,i){var o;switch(t.type){case"PREV":o=i.dateProfileGenerators[r].buildPrev(e,n);break;case"NEXT":o=i.dateProfileGenerators[r].buildNext(e,n);break;case"SET_DATE":e.activeRange&&Ze(e.currentRange,t.dateMarker)||(o=i.dateProfileGenerators[r].build(t.dateMarker,void 0,!0));break;case"SET_VIEW_TYPE":var a=i.dateProfileGenerators[r];if(!a)throw new Error(r?'The FullCalendar view "'+r+'" does not exist. Make sure your plugins are loaded correctly.':"No available FullCalendar view plugins.");o=a.build(t.dateMarker||n,void 0,!0)}return!o||!o.isValid||e&&(s=e,u=o,Ae(s.validRange,u.validRange)&&Ae(s.activeRange,u.activeRange)&&Ae(s.renderRange,u.renderRange)&&$(s.minTime,u.minTime)&&$(s.maxTime,u.maxTime))?e:o;var s,u}(e.dateProfile,t,e.currentDate,r,n),o=Gn(e.eventSources,t,i,n),a=Se({},e,{viewType:r,dateProfile:i,currentDate:tr(e.currentDate,t,i),eventSources:o,eventStore:Dt(e.eventStore,t,o,i,n),dateSelection:nr(e.dateSelection,t,n),eventSelection:rr(e.eventSelection,t),eventDrag:ir(e.eventDrag,t,o,n),eventResize:or(e.eventResize,t,o,n),eventSourceLoadingLevel:ar(o),loadingLevel:ar(o)}),s=0,u=n.pluginSystem.hooks.reducers;s<u.length;s++){a=(0,u[s])(a,t,n)}return a}function tr(e,t,n){switch(t.type){case"PREV":case"NEXT":return Ze(n.currentRange,e)?e:n.currentRange.start;case"SET_DATE":case"SET_VIEW_TYPE":var r=t.dateMarker||e;return n.activeRange&&!Ze(n.activeRange,r)?n.currentRange.start:r;default:return e}}function nr(e,t,n){switch(t.type){case"SELECT_DATES":return t.selection;case"UNSELECT_DATES":return null;default:return e}}function rr(e,t){switch(t.type){case"SELECT_EVENT":return t.eventInstanceId;case"UNSELECT_EVENT":return"";default:return e}}function ir(e,t,n,r){switch(t.type){case"SET_EVENT_DRAG":var i=t.state;return{affectedEvents:i.affectedEvents,mutatedEvents:i.mutatedEvents,isEvent:i.isEvent,origSeg:i.origSeg};case"UNSET_EVENT_DRAG":return null;default:return e}}function or(e,t,n,r){switch(t.type){case"SET_EVENT_RESIZE":var i=t.state;return{affectedEvents:i.affectedEvents,mutatedEvents:i.mutatedEvents,isEvent:i.isEvent,origSeg:i.origSeg};case"UNSET_EVENT_RESIZE":return null;default:return e}}function ar(e){var t=0;for(var n in e)e[n].isFetching&&t++;return t}var sr={start:null,end:null,allDay:Boolean};function ur(e,t,n){var r=function(e,t){var n={},r=he(e,sr,{},n),i=r.start?t.createMarkerMeta(r.start):null,o=r.end?t.createMarkerMeta(r.end):null,a=r.allDay;null==a&&(a=i&&i.isTimeUnspecified&&(!o||o.isTimeUnspecified));return n.range={start:i?i.marker:null,end:o?o.marker:null},n.allDay=a,n}(e,t),i=r.range;if(!i.start)return null;if(!i.end){if(null==n)return null;i.end=t.add(i.start,n)}return r}function lr(e,t,n){var r=jt({editable:!1},"",e.allDay,!0,n);return{def:r,ui:gt(r,t),instance:Yt(r.defId,e.range),range:e.range,isStart:!0,isEnd:!0}}function cr(e,t,n,r){if(t[e])return t[e];var i=function(e,t,n,r){var i=n[e],o=r[e],a=function(e){return i&&null!==i[e]?i[e]:o&&null!==o[e]?o[e]:null},s=a("class"),u=a("superType");!u&&s&&(u=dr(s,r)||dr(s,n));var l=null;if(u){if(u===e)throw new Error("Can't have a custom view type that references itself");l=cr(u,t,n,r)}!s&&l&&(s=l.class);if(!s)return null;return{type:e,class:s,defaults:Se({},l?l.defaults:{},i?i.options:{}),overrides:Se({},l?l.overrides:{},o?o.options:{})}}(e,t,n,r);return i&&(t[e]=i),i}function dr(e,t){var n=Object.getPrototypeOf(e.prototype);for(var r in t){var i=t[r];if(i.class&&i.class.prototype===n)return r}return""}function fr(e){return Re(e,hr)}var pr={type:String,class:null};function hr(e){"function"==typeof e&&(e={class:e});var t={},n=he(e,pr,{},t);return{superType:n.type,class:n.class,options:t}}function vr(e,t){var n=fr(e),r=fr(t.overrides.views);return Re(function(e,t){var n,r={};for(n in e)cr(n,r,e,t);for(n in t)cr(n,r,e,t);return r}(n,r),(function(e){return function(e,t,n){var r=e.overrides.duration||e.defaults.duration||n.dynamicOverrides.duration||n.overrides.duration,i=null,o="",a="",s={};if(r&&(i=J(r))){var u=ne(i,!Q(r));o=u.unit,1===u.value&&(a=o,s=t[o]?t[o].options:{})}var l=function(t){var n=t.buttonText||{},r=e.defaults.buttonTextKey;return null!=r&&null!=n[r]?n[r]:null!=n[e.type]?n[e.type]:null!=n[a]?n[a]:void 0};return{type:e.type,class:e.class,duration:i,durationUnit:o,singleUnit:a,options:Se({},Mn,e.defaults,n.dirDefaults,n.localeDefaults,n.overrides,s,e.overrides,n.dynamicOverrides),buttonTextOverride:l(n.dynamicOverrides)||l(n.overrides)||e.overrides.buttonText,buttonTextDefault:l(n.localeDefaults)||l(n.dirDefaults)||e.defaults.buttonText||l(Mn)||e.type}}(e,r,t)}))}var gr=function(e){function t(t){var n=e.call(this)||this;return n._renderLayout=Xt(n.renderLayout,n.unrenderLayout),n._updateTitle=Xt(n.updateTitle,null,[n._renderLayout]),n._updateActiveButton=Xt(n.updateActiveButton,null,[n._renderLayout]),n._updateToday=Xt(n.updateToday,null,[n._renderLayout]),n._updatePrev=Xt(n.updatePrev,null,[n._renderLayout]),n._updateNext=Xt(n.updateNext,null,[n._renderLayout]),n.el=r("div",{className:"fc-toolbar "+t}),n}return Ee(t,e),t.prototype.destroy=function(){e.prototype.destroy.call(this),this._renderLayout.unrender(),c(this.el)},t.prototype.render=function(e){this._renderLayout(e.layout),this._updateTitle(e.title),this._updateActiveButton(e.activeButton),this._updateToday(e.isTodayEnabled),this._updatePrev(e.isPrevEnabled),this._updateNext(e.isNextEnabled)},t.prototype.renderLayout=function(e){var t=this.el;this.viewsWithButtons=[],s(t,this.renderSection("left",e.left)),s(t,this.renderSection("center",e.center)),s(t,this.renderSection("right",e.right))},t.prototype.unrenderLayout=function(){this.el.innerHTML=""},t.prototype.renderSection=function(e,t){var n=this,o=this.context,a=o.theme,u=o.calendar,l=u.optionsManager,c=u.viewSpecs,d=r("div",{className:"fc-"+e}),f=l.computed.customButtons||{},p=l.overrides.buttonText||{},h=l.computed.buttonText||{};return t&&t.split(" ").forEach((function(e,t){var r,o=[],l=!0;if(e.split(",").forEach((function(e,t){var r,s,d,v,g,y,m,E,S;"title"===e?(o.push(i("<h2>&nbsp;</h2>")),l=!1):((r=f[e])?(d=function(e){r.click&&r.click.call(E,e)},(v=a.getCustomButtonIconClass(r))||(v=a.getIconClass(e))||(g=r.text)):(s=c[e])?(n.viewsWithButtons.push(e),d=function(){u.changeView(e)},(g=s.buttonTextOverride)||(v=a.getIconClass(e))||(g=s.buttonTextDefault)):u[e]&&(d=function(){u[e]()},(g=p[e])||(v=a.getIconClass(e))||(g=h[e])),d&&(m=["fc-"+e+"-button",a.getClass("button")],g?(y=Pt(g),S=""):v&&(y="<span class='"+v+"'></span>",S=' aria-label="'+e+'"'),(E=i('<button type="button" class="'+m.join(" ")+'"'+S+">"+y+"</button>")).addEventListener("click",d),o.push(E)))})),o.length>1){r=document.createElement("div");var v=a.getClass("buttonGroup");l&&v&&r.classList.add(v),s(r,o),d.appendChild(r)}else s(d,o)})),d},t.prototype.updateToday=function(e){this.toggleButtonEnabled("today",e)},t.prototype.updatePrev=function(e){this.toggleButtonEnabled("prev",e)},t.prototype.updateNext=function(e){this.toggleButtonEnabled("next",e)},t.prototype.updateTitle=function(e){v(this.el,"h2").forEach((function(t){t.innerText=e}))},t.prototype.updateActiveButton=function(e){var t=this.context.theme.getClass("buttonActive");v(this.el,"button").forEach((function(n){e&&n.classList.contains("fc-"+e+"-button")?n.classList.add(t):n.classList.remove(t)}))},t.prototype.toggleButtonEnabled=function(e,t){v(this.el,".fc-"+e+"-button").forEach((function(e){e.disabled=!t}))},t}(vn),yr=function(e){function t(t){var n=e.call(this)||this;return n.elClassNames=[],n.renderSkeleton=Xt(n._renderSkeleton,n._unrenderSkeleton),n.renderToolbars=Xt(n._renderToolbars,n._unrenderToolbars,[n.renderSkeleton]),n.buildComponentContext=Ye(Er),n.buildViewPropTransformers=Ye(Sr),n.el=t,n.computeTitle=Ye(mr),n.parseBusinessHours=Ye((function(e){return Gt(e,n.context.calendar)})),n}return Ee(t,e),t.prototype.render=function(e,t){this.freezeHeight();var n=this.computeTitle(e.dateProfile,e.viewSpec.options);this.renderSkeleton(t),this.renderToolbars(e.viewSpec,e.dateProfile,e.currentDate,n),this.renderView(e,n),this.updateSize(),this.thawHeight()},t.prototype.destroy=function(){this.header&&this.header.destroy(),this.footer&&this.footer.destroy(),this.renderSkeleton.unrender(),e.prototype.destroy.call(this)},t.prototype._renderSkeleton=function(e){this.updateElClassNames(e),u(this.el,this.contentEl=r("div",{className:"fc-view-container"}));for(var t=e.calendar,n=0,i=t.pluginSystem.hooks.viewContainerModifiers;n<i.length;n++){(0,i[n])(this.contentEl,t)}},t.prototype._unrenderSkeleton=function(){this.view&&(this.savedScroll=this.view.queryScroll(),this.view.destroy(),this.view=null),c(this.contentEl),this.removeElClassNames()},t.prototype.removeElClassNames=function(){for(var e=this.el.classList,t=0,n=this.elClassNames;t<n.length;t++){var r=n[t];e.remove(r)}this.elClassNames=[]},t.prototype.updateElClassNames=function(e){this.removeElClassNames();var t=e.theme,n=e.options;this.elClassNames=["fc","fc-"+n.dir,t.getClass("widget")];for(var r=this.el.classList,i=0,o=this.elClassNames;i<o.length;i++){var a=o[i];r.add(a)}},t.prototype._renderToolbars=function(e,t,n,r){var i=this.context,o=this.header,a=this.footer,l=i.options,c=i.calendar,d=l.header,f=l.footer,p=this.props.dateProfileGenerator,h=c.getNow(),v=p.build(h),g=p.buildPrev(t,n),y=p.buildNext(t,n),m={title:r,activeButton:e.type,isTodayEnabled:v.isValid&&!Ze(t.currentRange,h),isPrevEnabled:g.isValid,isNextEnabled:y.isValid};d?(o||(o=this.header=new gr("fc-header-toolbar"),u(this.el,o.el)),o.receiveProps(Se({layout:d},m),i)):o&&(o.destroy(),o=this.header=null),f?(a||(a=this.footer=new gr("fc-footer-toolbar"),s(this.el,a.el)),a.receiveProps(Se({layout:f},m),i)):a&&(a.destroy(),a=this.footer=null)},t.prototype._unrenderToolbars=function(){this.header&&(this.header.destroy(),this.header=null),this.footer&&(this.footer.destroy(),this.footer=null)},t.prototype.renderView=function(e,t){var n=this.view,r=this.context,i=r.calendar,o=r.options,a=e.viewSpec,s=e.dateProfileGenerator;n&&n.viewSpec===a||(n&&n.destroy(),n=this.view=new a.class(a,this.contentEl),this.savedScroll&&(n.addScroll(this.savedScroll,!0),this.savedScroll=null)),n.title=t;for(var u={dateProfileGenerator:s,dateProfile:e.dateProfile,businessHours:this.parseBusinessHours(a.options.businessHours),eventStore:e.eventStore,eventUiBases:e.eventUiBases,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize},l=0,c=this.buildViewPropTransformers(i.pluginSystem.hooks.viewPropsTransformers);l<c.length;l++){var d=c[l];Se(u,d.transform(u,a,e,o))}n.receiveProps(u,this.buildComponentContext(this.context,a,n))},t.prototype.updateSize=function(e){void 0===e&&(e=!1);var t=this.view;t&&((e||null==this.isHeightAuto)&&this.computeHeightVars(),t.updateSize(e,this.viewHeight,this.isHeightAuto),t.updateNowIndicator(),t.popScroll(e))},t.prototype.computeHeightVars=function(){var e=this.context.calendar,t=e.opt("height"),n=e.opt("contentHeight");if(this.isHeightAuto="auto"===t||"auto"===n,"number"==typeof n)this.viewHeight=n;else if("function"==typeof n)this.viewHeight=n();else if("number"==typeof t)this.viewHeight=t-this.queryToolbarsHeight();else if("function"==typeof t)this.viewHeight=t()-this.queryToolbarsHeight();else if("parent"===t){var r=this.el.parentNode;this.viewHeight=r.getBoundingClientRect().height-this.queryToolbarsHeight()}else this.viewHeight=Math.round(this.contentEl.getBoundingClientRect().width/Math.max(e.opt("aspectRatio"),.5))},t.prototype.queryToolbarsHeight=function(){var e=0;return this.header&&(e+=C(this.header.el)),this.footer&&(e+=C(this.footer.el)),e},t.prototype.freezeHeight=function(){y(this.el,{height:this.el.getBoundingClientRect().height,overflow:"hidden"})},t.prototype.thawHeight=function(){y(this.el,{height:"",overflow:""})},t}(vn);function mr(e,t){var n;return n=/^(year|month)$/.test(e.currentRangeUnit)?e.currentRange:e.activeRange,this.context.dateEnv.formatRange(n.start,n.end,ot(t.titleFormat||function(e){var t=e.currentRangeUnit;if("year"===t)return{year:"numeric"};if("month"===t)return{year:"numeric",month:"long"};var n=L(e.currentRange.start,e.currentRange.end);return null!==n&&n>1?{year:"numeric",month:"short",day:"numeric"}:{year:"numeric",month:"long",day:"numeric"}}(e),t.titleRangeSeparator),{isEndExclusive:e.isRangeAllDay})}function Er(e,t,n){return e.extend(t.options,n)}function Sr(e){return e.map((function(e){return new e}))}var br=function(){function e(e){this.component=e.component}return e.prototype.destroy=function(){},e}();var Dr={},Tr=function(e){function t(t){var n=e.call(this,t)||this;n.handleSegClick=function(e,t){var r=n.component,i=r.context,o=i.calendar,a=i.view,s=ht(t);if(s&&r.isValidSegDownEl(e.target)){var u=p(e.target,".fc-has-url"),l=u?u.querySelector("a[href]").href:"";o.publiclyTrigger("eventClick",[{el:t,event:new ct(r.context.calendar,s.eventRange.def,s.eventRange.instance),jsEvent:e,view:a}]),l&&!e.defaultPrevented&&(window.location.href=l)}};var r=t.component;return n.destroy=_(r.el,"click",r.fgSegSelector+","+r.bgSegSelector,n.handleSegClick),n}return Ee(t,e),t}(br),wr=function(e){function t(t){var n=e.call(this,t)||this;n.handleEventElRemove=function(e){e===n.currentSegEl&&n.handleSegLeave(null,n.currentSegEl)},n.handleSegEnter=function(e,t){ht(t)&&(t.classList.add("fc-allow-mouse-resize"),n.currentSegEl=t,n.triggerEvent("eventMouseEnter",e,t))},n.handleSegLeave=function(e,t){n.currentSegEl&&(t.classList.remove("fc-allow-mouse-resize"),n.currentSegEl=null,n.triggerEvent("eventMouseLeave",e,t))};var r,i,o,a,s,u=t.component;return n.removeHoverListeners=(r=u.el,i=u.fgSegSelector+","+u.bgSegSelector,o=n.handleSegEnter,a=n.handleSegLeave,_(r,"mouseover",i,(function(e,t){if(t!==s){s=t,o(e,t);var n=function(e){s=null,a(e,t),t.removeEventListener("mouseleave",n)};t.addEventListener("mouseleave",n)}}))),u.context.calendar.on("eventElRemove",n.handleEventElRemove),n}return Ee(t,e),t.prototype.destroy=function(){this.removeHoverListeners(),this.component.context.calendar.off("eventElRemove",this.handleEventElRemove)},t.prototype.triggerEvent=function(e,t,n){var r=this.component,i=r.context,o=i.calendar,a=i.view,s=ht(n);t&&!r.isValidSegDownEl(t.target)||o.publiclyTrigger(e,[{el:n,event:new ct(o,s.eventRange.def,s.eventRange.instance),jsEvent:t,view:a}])},t}(br),Rr=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return Ee(t,e),t}(fn);Rr.prototype.classes={widget:"fc-unthemed",widgetHeader:"fc-widget-header",widgetContent:"fc-widget-content",buttonGroup:"fc-button-group",button:"fc-button fc-button-primary",buttonActive:"fc-button-active",popoverHeader:"fc-widget-header",popoverContent:"fc-widget-content",headerRow:"fc-widget-header",dayRow:"fc-widget-content",listView:"fc-widget-content"},Rr.prototype.baseIconClass="fc-icon",Rr.prototype.iconClasses={close:"fc-icon-x",prev:"fc-icon-chevron-left",next:"fc-icon-chevron-right",prevYear:"fc-icon-chevrons-left",nextYear:"fc-icon-chevrons-right"},Rr.prototype.iconOverrideOption="buttonIcons",Rr.prototype.iconOverrideCustomButtonOption="icon",Rr.prototype.iconOverridePrefix="fc-icon-";var Cr=function(){function e(e,t){var n=this;this.buildComponentContext=Ye(Ir),this.parseRawLocales=Ye(xn),this.buildLocale=Ye(Nn),this.buildDateEnv=Ye(Mr),this.buildTheme=Ye(kr),this.buildEventUiSingleBase=Ye(this._buildEventUiSingleBase),this.buildSelectionConfig=Ye(this._buildSelectionConfig),this.buildEventUiBySource=qe(Or,Me),this.buildEventUiBases=Ye(Pr),this.interactionsStore={},this.actionQueue=[],this.isReducing=!1,this.needsRerender=!1,this.isRendering=!1,this.renderingPauseDepth=0,this.buildDelayedRerender=Ye(_r),this.afterSizingTriggers={},this.isViewUpdated=!1,this.isDatesUpdated=!1,this.isEventsUpdated=!1,this.el=e,this.optionsManager=new Un(t||{}),this.pluginSystem=new En,this.addPluginInputs(this.optionsManager.computed.plugins||[]),this.handleOptions(this.optionsManager.computed),this.publiclyTrigger("_init"),this.hydrate(),this.calendarInteractions=this.pluginSystem.hooks.calendarInteractions.map((function(e){return new e(n)}))}return e.prototype.addPluginInputs=function(e){for(var t=function(e){for(var t=[],n=0,r=e;n<r.length;n++){var i=r[n];if("string"==typeof i){var o="FullCalendar"+ue(i);window[o]?t.push(window[o].default):console.warn("Plugin file not loaded for "+i)}else t.push(i)}return On.concat(t)}(e),n=0,r=t;n<r.length;n++){var i=r[n];this.pluginSystem.add(i)}},Object.defineProperty(e.prototype,"view",{get:function(){return this.component?this.component.view:null},enumerable:!0,configurable:!0}),e.prototype.render=function(){this.component?this.requestRerender():(this.component=new yr(this.el),this.renderableEventStore={defs:{},instances:{}},this.bindHandlers(),this.executeRender())},e.prototype.destroy=function(){if(this.component){this.unbindHandlers(),this.component.destroy(),this.component=null;for(var e=0,t=this.calendarInteractions;e<t.length;e++){t[e].destroy()}this.publiclyTrigger("_destroyed")}},e.prototype.bindHandlers=function(){var e=this;this.removeNavLinkListener=_(this.el,"click","a[data-goto]",(function(t,n){var r=n.getAttribute("data-goto");r=r?JSON.parse(r):{};var i=e.dateEnv,o=i.createMarker(r.date),a=r.type,s=e.viewOpt("navLink"+ue(a)+"Click");"function"==typeof s?s(i.toDate(o),t):("string"==typeof s&&(a=s),e.zoomTo(o,a))})),this.opt("handleWindowResize")&&window.addEventListener("resize",this.windowResizeProxy=pe(this.windowResize.bind(this),this.opt("windowResizeDelay")))},e.prototype.unbindHandlers=function(){this.removeNavLinkListener(),this.windowResizeProxy&&(window.removeEventListener("resize",this.windowResizeProxy),this.windowResizeProxy=null)},e.prototype.hydrate=function(){var e=this;this.state=this.buildInitialState();var t=this.opt("eventSources")||[],n=this.opt("events"),r=[];n&&t.unshift(n);for(var i=0,o=t;i<o.length;i++){var a=Yn(o[i],this);a&&r.push(a)}this.batchRendering((function(){e.dispatch({type:"INIT"}),e.dispatch({type:"ADD_EVENT_SOURCES",sources:r}),e.dispatch({type:"SET_VIEW_TYPE",viewType:e.opt("defaultView")||e.pluginSystem.hooks.defaultView})}))},e.prototype.buildInitialState=function(){return{viewType:null,loadingLevel:0,eventSourceLoadingLevel:0,currentDate:this.getInitialDate(),dateProfile:null,eventSources:{},eventStore:{defs:{},instances:{}},dateSelection:null,eventSelection:"",eventDrag:null,eventResize:null}},e.prototype.dispatch=function(e){if(this.actionQueue.push(e),!this.isReducing){this.isReducing=!0;for(var t=this.state;this.actionQueue.length;)this.state=this.reduce(this.state,this.actionQueue.shift(),this);var n=this.state;this.isReducing=!1,!t.loadingLevel&&n.loadingLevel?this.publiclyTrigger("loading",[!0]):t.loadingLevel&&!n.loadingLevel&&this.publiclyTrigger("loading",[!1]);var r=this.component&&this.component.view;t.eventStore!==n.eventStore&&t.eventStore&&(this.isEventsUpdated=!0),t.dateProfile!==n.dateProfile&&(t.dateProfile&&r&&this.publiclyTrigger("datesDestroy",[{view:r,el:r.el}]),this.isDatesUpdated=!0),t.viewType!==n.viewType&&(t.viewType&&r&&this.publiclyTrigger("viewSkeletonDestroy",[{view:r,el:r.el}]),this.isViewUpdated=!0),this.requestRerender()}},e.prototype.reduce=function(e,t,n){return er(e,t,n)},e.prototype.requestRerender=function(){this.needsRerender=!0,this.delayedRerender()},e.prototype.tryRerender=function(){this.component&&this.needsRerender&&!this.renderingPauseDepth&&!this.isRendering&&this.executeRender()},e.prototype.batchRendering=function(e){this.renderingPauseDepth++,e(),this.renderingPauseDepth--,this.needsRerender&&this.requestRerender()},e.prototype.executeRender=function(){this.needsRerender=!1,this.isRendering=!0,this.renderComponent(),this.isRendering=!1,this.needsRerender&&this.delayedRerender()},e.prototype.renderComponent=function(){var e=this.state,t=this.component,n=e.viewType,r=this.viewSpecs[n];if(!r)throw new Error('View type "'+n+'" is not valid');var i=this.renderableEventStore=e.eventSourceLoadingLevel&&!this.opt("progressiveEventRendering")?this.renderableEventStore:e.eventStore,o=this.buildEventUiSingleBase(r.options),a=this.buildEventUiBySource(e.eventSources),s=this.eventUiBases=this.buildEventUiBases(i.defs,o,a);t.receiveProps(Se({},e,{viewSpec:r,dateProfileGenerator:this.dateProfileGenerators[n],dateProfile:e.dateProfile,eventStore:i,eventUiBases:s,dateSelection:e.dateSelection,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize}),this.buildComponentContext(this.theme,this.dateEnv,this.optionsManager.computed)),this.isViewUpdated&&(this.isViewUpdated=!1,this.publiclyTrigger("viewSkeletonRender",[{view:t.view,el:t.view.el}])),this.isDatesUpdated&&(this.isDatesUpdated=!1,this.publiclyTrigger("datesRender",[{view:t.view,el:t.view.el}])),this.isEventsUpdated&&(this.isEventsUpdated=!1),this.releaseAfterSizingTriggers()},e.prototype.setOption=function(e,t){var n;this.mutateOptions(((n={})[e]=t,n),[],!0)},e.prototype.getOption=function(e){return this.optionsManager.computed[e]},e.prototype.opt=function(e){return this.optionsManager.computed[e]},e.prototype.viewOpt=function(e){return this.viewOpts()[e]},e.prototype.viewOpts=function(){return this.viewSpecs[this.state.viewType].options},e.prototype.mutateOptions=function(e,t,n,r){var i=this,o=this.pluginSystem.hooks.optionChangeHandlers,a={},s={},u=this.dateEnv,l=!1,c=!1,d=Boolean(t.length);for(var f in e)o[f]?s[f]=e[f]:a[f]=e[f];for(var p in a)/^(height|contentHeight|aspectRatio)$/.test(p)?c=!0:/^(defaultDate|defaultView)$/.test(p)||(d=!0,"timeZone"===p&&(l=!0));this.optionsManager.mutate(a,t,n),d&&this.handleOptions(this.optionsManager.computed),this.batchRendering((function(){if(d?(l&&i.dispatch({type:"CHANGE_TIMEZONE",oldDateEnv:u}),i.dispatch({type:"SET_VIEW_TYPE",viewType:i.state.viewType})):c&&i.updateSize(),r)for(var e in s)o[e](s[e],i,r)}))},e.prototype.handleOptions=function(e){var t=this,n=this.pluginSystem.hooks;this.defaultAllDayEventDuration=J(e.defaultAllDayEventDuration),this.defaultTimedEventDuration=J(e.defaultTimedEventDuration),this.delayedRerender=this.buildDelayedRerender(e.rerenderDelay),this.theme=this.buildTheme(e);var r=this.parseRawLocales(e.locales);this.availableRawLocales=r.map;var i=this.buildLocale(e.locale||r.defaultCode,r.map);this.dateEnv=this.buildDateEnv(i,e.timeZone,n.namedTimeZonedImpl,e.firstDay,e.weekNumberCalculation,e.weekLabel,n.cmdFormatter),this.selectionConfig=this.buildSelectionConfig(e),this.viewSpecs=vr(n.views,this.optionsManager),this.dateProfileGenerators=Re(this.viewSpecs,(function(e){return new e.class.prototype.dateProfileGeneratorClass(e,t)}))},e.prototype.getAvailableLocaleCodes=function(){return Object.keys(this.availableRawLocales)},e.prototype._buildSelectionConfig=function(e){return zt("select",e,this)},e.prototype._buildEventUiSingleBase=function(e){return e.editable&&(e=Se({},e,{eventEditable:!0})),zt("event",e,this)},e.prototype.hasPublicHandlers=function(e){return this.hasHandlers(e)||this.opt(e)},e.prototype.publiclyTrigger=function(e,t){var n=this.opt(e);if(this.triggerWith(e,this,t),n)return n.apply(this,t)},e.prototype.publiclyTriggerAfterSizing=function(e,t){var n=this.afterSizingTriggers;(n[e]||(n[e]=[])).push(t)},e.prototype.releaseAfterSizingTriggers=function(){var e=this.afterSizingTriggers;for(var t in e)for(var n=0,r=e[t];n<r.length;n++){var i=r[n];this.publiclyTrigger(t,i)}this.afterSizingTriggers={}},e.prototype.isValidViewType=function(e){return Boolean(this.viewSpecs[e])},e.prototype.changeView=function(e,t){var n=null;t&&(t.start&&t.end?(this.optionsManager.mutate({visibleRange:t},[]),this.handleOptions(this.optionsManager.computed)):n=this.dateEnv.createMarker(t)),this.unselect(),this.dispatch({type:"SET_VIEW_TYPE",viewType:e,dateMarker:n})},e.prototype.zoomTo=function(e,t){var n;t=t||"day",n=this.viewSpecs[t]||this.getUnitViewSpec(t),this.unselect(),n?this.dispatch({type:"SET_VIEW_TYPE",viewType:n.type,dateMarker:e}):this.dispatch({type:"SET_DATE",dateMarker:e})},e.prototype.getUnitViewSpec=function(e){var t,n,r=this.component,i=[];for(var o in r.header&&i.push.apply(i,r.header.viewsWithButtons),r.footer&&i.push.apply(i,r.footer.viewsWithButtons),this.viewSpecs)i.push(o);for(t=0;t<i.length;t++)if((n=this.viewSpecs[i[t]])&&n.singleUnit===e)return n},e.prototype.getInitialDate=function(){var e=this.opt("defaultDate");return null!=e?this.dateEnv.createMarker(e):this.getNow()},e.prototype.prev=function(){this.unselect(),this.dispatch({type:"PREV"})},e.prototype.next=function(){this.unselect(),this.dispatch({type:"NEXT"})},e.prototype.prevYear=function(){this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.dateEnv.addYears(this.state.currentDate,-1)})},e.prototype.nextYear=function(){this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.dateEnv.addYears(this.state.currentDate,1)})},e.prototype.today=function(){this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.getNow()})},e.prototype.gotoDate=function(e){this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.dateEnv.createMarker(e)})},e.prototype.incrementDate=function(e){var t=J(e);t&&(this.unselect(),this.dispatch({type:"SET_DATE",dateMarker:this.dateEnv.add(this.state.currentDate,t)}))},e.prototype.getDate=function(){return this.dateEnv.toDate(this.state.currentDate)},e.prototype.formatDate=function(e,t){var n=this.dateEnv;return n.format(n.createMarker(e),ot(t))},e.prototype.formatRange=function(e,t,n){var r=this.dateEnv;return r.formatRange(r.createMarker(e),r.createMarker(t),ot(n,this.opt("defaultRangeSeparator")),n)},e.prototype.formatIso=function(e,t){var n=this.dateEnv;return n.formatIso(n.createMarker(e),{omitTime:t})},e.prototype.windowResize=function(e){!this.isHandlingWindowResize&&this.component&&e.target===window&&(this.isHandlingWindowResize=!0,this.updateSize(),this.publiclyTrigger("windowResize",[this.view]),this.isHandlingWindowResize=!1)},e.prototype.updateSize=function(){this.component&&this.component.updateSize(!0)},e.prototype.registerInteractiveComponent=function(e,t){var n=function(e,t){return{component:e,el:t.el,useEventCenter:null==t.useEventCenter||t.useEventCenter}}(e,t),r=[Tr,wr].concat(this.pluginSystem.hooks.componentInteractions).map((function(e){return new e(n)}));this.interactionsStore[e.uid]=r,Dr[e.uid]=n},e.prototype.unregisterInteractiveComponent=function(e){for(var t=0,n=this.interactionsStore[e.uid];t<n.length;t++){n[t].destroy()}delete this.interactionsStore[e.uid],delete Dr[e.uid]},e.prototype.select=function(e,t){var n=ur(null==t?null!=e.start?e:{start:e,end:null}:{start:e,end:t},this.dateEnv,J({days:1}));n&&(this.dispatch({type:"SELECT_DATES",selection:n}),this.triggerDateSelect(n))},e.prototype.unselect=function(e){this.state.dateSelection&&(this.dispatch({type:"UNSELECT_DATES"}),this.triggerDateUnselect(e))},e.prototype.triggerDateSelect=function(e,t){var n=Se({},this.buildDateSpanApi(e),{jsEvent:t?t.origEvent:null,view:this.view});this.publiclyTrigger("select",[n])},e.prototype.triggerDateUnselect=function(e){this.publiclyTrigger("unselect",[{jsEvent:e?e.origEvent:null,view:this.view}])},e.prototype.triggerDateClick=function(e,t,n,r){var i=Se({},this.buildDatePointApi(e),{dayEl:t,jsEvent:r,view:n});this.publiclyTrigger("dateClick",[i])},e.prototype.buildDatePointApi=function(e){for(var t,n,r={},i=0,o=this.pluginSystem.hooks.datePointTransforms;i<o.length;i++){var a=o[i];Se(r,a(e,this))}return Se(r,(t=e,{date:(n=this.dateEnv).toDate(t.range.start),dateStr:n.formatIso(t.range.start,{omitTime:t.allDay}),allDay:t.allDay})),r},e.prototype.buildDateSpanApi=function(e){for(var t,n,r={},i=0,o=this.pluginSystem.hooks.dateSpanTransforms;i<o.length;i++){var a=o[i];Se(r,a(e,this))}return Se(r,(t=e,{start:(n=this.dateEnv).toDate(t.range.start),end:n.toDate(t.range.end),startStr:n.formatIso(t.range.start,{omitTime:t.allDay}),endStr:n.formatIso(t.range.end,{omitTime:t.allDay}),allDay:t.allDay})),r},e.prototype.getNow=function(){var e=this.opt("now");return"function"==typeof e&&(e=e()),null==e?this.dateEnv.createNowMarker():this.dateEnv.createMarker(e)},e.prototype.getDefaultEventEnd=function(e,t){var n=t;return e?(n=B(n),n=this.dateEnv.add(n,this.defaultAllDayEventDuration)):n=this.dateEnv.add(n,this.defaultTimedEventDuration),n},e.prototype.addEvent=function(e,t){if(e instanceof ct){var n=e._def,r=e._instance;return this.state.eventStore.defs[n.defId]||this.dispatch({type:"ADD_EVENTS",eventStore:_e({def:n,instance:r})}),e}var i;if(t instanceof lt)i=t.internalEventSource.sourceId;else if(null!=t){var o=this.getEventSourceById(t);if(!o)return console.warn('Could not find an event source with ID "'+t+'"'),null;i=o.internalEventSource.sourceId}var a=Zt(e,i,this);return a?(this.dispatch({type:"ADD_EVENTS",eventStore:_e(a)}),new ct(this,a.def,a.def.recurringDef?null:a.instance)):null},e.prototype.getEventById=function(e){var t=this.state.eventStore,n=t.defs,r=t.instances;for(var i in e=String(e),n){var o=n[i];if(o.publicId===e){if(o.recurringDef)return new ct(this,o,null);for(var a in r){var s=r[a];if(s.defId===o.defId)return new ct(this,o,s)}}}return null},e.prototype.getEvents=function(){var e=this.state.eventStore,t=e.defs,n=e.instances,r=[];for(var i in n){var o=n[i],a=t[o.defId];r.push(new ct(this,a,o))}return r},e.prototype.removeAllEvents=function(){this.dispatch({type:"REMOVE_ALL_EVENTS"})},e.prototype.rerenderEvents=function(){this.dispatch({type:"RESET_EVENTS"})},e.prototype.getEventSources=function(){var e=this.state.eventSources,t=[];for(var n in e)t.push(new lt(this,e[n]));return t},e.prototype.getEventSourceById=function(e){var t=this.state.eventSources;for(var n in e=String(e),t)if(t[n].publicId===e)return new lt(this,t[n]);return null},e.prototype.addEventSource=function(e){if(e instanceof lt)return this.state.eventSources[e.internalEventSource.sourceId]||this.dispatch({type:"ADD_EVENT_SOURCES",sources:[e.internalEventSource]}),e;var t=Yn(e,this);return t?(this.dispatch({type:"ADD_EVENT_SOURCES",sources:[t]}),new lt(this,t)):null},e.prototype.removeAllEventSources=function(){this.dispatch({type:"REMOVE_ALL_EVENT_SOURCES"})},e.prototype.refetchEvents=function(){this.dispatch({type:"FETCH_EVENT_SOURCES"})},e.prototype.scrollToTime=function(e){var t=J(e);t&&this.component.view.scrollToDuration(t)},e}();function Ir(e,t,n){return new hn(this,e,t,n,null)}function Mr(e,t,n,r,i,o,a){return new Fn({calendarSystem:"gregory",timeZone:t,namedTimeZoneImpl:n,locale:e,weekNumberCalculation:i,firstDay:r,weekLabel:o,cmdFormatter:a})}function kr(e){return new(this.pluginSystem.hooks.themeClasses[e.themeSystem]||Rr)(e)}function _r(e){var t=this.tryRerender.bind(this);return null!=e&&(t=pe(t,e)),t}function Or(e){return Re(e,(function(e){return e.ui}))}function Pr(e,t,n){var r={"":t};for(var i in e){var o=e[i];o.sourceId&&n[o.sourceId]&&(r[i]=n[o.sourceId])}return r}rn.mixInto(Cr);var xr=function(e){function t(t,n){var i=e.call(this,r("div",{className:"fc-view fc-"+t.type+"-view"}))||this;return i.renderDatesMem=Xt(i.renderDatesWrap,i.unrenderDatesWrap),i.renderBusinessHoursMem=Xt(i.renderBusinessHours,i.unrenderBusinessHours,[i.renderDatesMem]),i.renderDateSelectionMem=Xt(i.renderDateSelectionWrap,i.unrenderDateSelectionWrap,[i.renderDatesMem]),i.renderEventsMem=Xt(i.renderEvents,i.unrenderEvents,[i.renderDatesMem]),i.renderEventSelectionMem=Xt(i.renderEventSelectionWrap,i.unrenderEventSelectionWrap,[i.renderEventsMem]),i.renderEventDragMem=Xt(i.renderEventDragWrap,i.unrenderEventDragWrap,[i.renderDatesMem]),i.renderEventResizeMem=Xt(i.renderEventResizeWrap,i.unrenderEventResizeWrap,[i.renderDatesMem]),i.viewSpec=t,i.type=t.type,n.appendChild(i.el),i.initialize(),i}return Ee(t,e),t.prototype.initialize=function(){},Object.defineProperty(t.prototype,"activeStart",{get:function(){return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.start)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"activeEnd",{get:function(){return this.context.dateEnv.toDate(this.props.dateProfile.activeRange.end)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentStart",{get:function(){return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.start)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"currentEnd",{get:function(){return this.context.dateEnv.toDate(this.props.dateProfile.currentRange.end)},enumerable:!0,configurable:!0}),t.prototype.render=function(e,t){this.renderDatesMem(e.dateProfile),this.renderBusinessHoursMem(e.businessHours),this.renderDateSelectionMem(e.dateSelection),this.renderEventsMem(e.eventStore),this.renderEventSelectionMem(e.eventSelection),this.renderEventDragMem(e.eventDrag),this.renderEventResizeMem(e.eventResize)},t.prototype.beforeUpdate=function(){this.addScroll(this.queryScroll())},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderDatesMem.unrender()},t.prototype.updateSize=function(e,t,n){var r=this.context.calendar;e&&this.addScroll(this.queryScroll()),(e||r.isViewUpdated||r.isDatesUpdated||r.isEventsUpdated)&&this.updateBaseSize(e,t,n)},t.prototype.updateBaseSize=function(e,t,n){},t.prototype.renderDatesWrap=function(e){this.renderDates(e),this.addScroll({duration:J(this.context.options.scrollTime)})},t.prototype.unrenderDatesWrap=function(){this.stopNowIndicator(),this.unrenderDates()},t.prototype.renderDates=function(e){},t.prototype.unrenderDates=function(){},t.prototype.renderBusinessHours=function(e){},t.prototype.unrenderBusinessHours=function(){},t.prototype.renderDateSelectionWrap=function(e){e&&this.renderDateSelection(e)},t.prototype.unrenderDateSelectionWrap=function(e){e&&this.unrenderDateSelection(e)},t.prototype.renderDateSelection=function(e){},t.prototype.unrenderDateSelection=function(e){},t.prototype.renderEvents=function(e){},t.prototype.unrenderEvents=function(){},t.prototype.sliceEvents=function(e,t){var n=this.props;return dt(e,n.eventUiBases,n.dateProfile.activeRange,t?this.context.nextDayThreshold:null).fg},t.prototype.renderEventSelectionWrap=function(e){e&&this.renderEventSelection(e)},t.prototype.unrenderEventSelectionWrap=function(e){e&&this.unrenderEventSelection(e)},t.prototype.renderEventSelection=function(e){},t.prototype.unrenderEventSelection=function(e){},t.prototype.renderEventDragWrap=function(e){e&&this.renderEventDrag(e)},t.prototype.unrenderEventDragWrap=function(e){e&&this.unrenderEventDrag(e)},t.prototype.renderEventDrag=function(e){},t.prototype.unrenderEventDrag=function(e){},t.prototype.renderEventResizeWrap=function(e){e&&this.renderEventResize(e)},t.prototype.unrenderEventResizeWrap=function(e){e&&this.unrenderEventResize(e)},t.prototype.renderEventResize=function(e){},t.prototype.unrenderEventResize=function(e){},t.prototype.startNowIndicator=function(e,t){var n,r,i,o=this,a=this.context,s=a.calendar,u=a.dateEnv;a.options.nowIndicator&&!this.initialNowDate&&(n=this.getNowIndicatorUnit(e,t))&&(r=this.updateNowIndicator.bind(this),this.initialNowDate=s.getNow(),this.initialNowQueriedMs=(new Date).valueOf(),i=u.add(u.startOf(this.initialNowDate,n),J(1,n)).valueOf()-this.initialNowDate.valueOf(),this.nowIndicatorTimeoutID=setTimeout((function(){o.nowIndicatorTimeoutID=null,r(),i="second"===n?1e3:6e4,o.nowIndicatorIntervalID=setInterval(r,i)}),i))},t.prototype.updateNowIndicator=function(){this.props.dateProfile&&this.initialNowDate&&(this.unrenderNowIndicator(),this.renderNowIndicator(N(this.initialNowDate,(new Date).valueOf()-this.initialNowQueriedMs)),this.isNowIndicatorRendered=!0)},t.prototype.stopNowIndicator=function(){this.nowIndicatorTimeoutID&&(clearTimeout(this.nowIndicatorTimeoutID),this.nowIndicatorTimeoutID=null),this.nowIndicatorIntervalID&&(clearInterval(this.nowIndicatorIntervalID),this.nowIndicatorIntervalID=null),this.isNowIndicatorRendered&&(this.unrenderNowIndicator(),this.isNowIndicatorRendered=!1)},t.prototype.getNowIndicatorUnit=function(e,t){},t.prototype.renderNowIndicator=function(e){},t.prototype.unrenderNowIndicator=function(){},t.prototype.addScroll=function(e,t){t&&(e.isForced=t),Se(this.queuedScroll||(this.queuedScroll={}),e)},t.prototype.popScroll=function(e){this.applyQueuedScroll(e),this.queuedScroll=null},t.prototype.applyQueuedScroll=function(e){this.queuedScroll&&this.applyScroll(this.queuedScroll,e)},t.prototype.queryScroll=function(){var e={};return this.props.dateProfile&&Se(e,this.queryDateScroll()),e},t.prototype.applyScroll=function(e,t){var n=e.duration,r=e.isForced;null==n||r||(delete e.duration,this.props.dateProfile&&Se(e,this.computeDateScroll(n))),this.props.dateProfile&&this.applyDateScroll(e)},t.prototype.computeDateScroll=function(e){return{}},t.prototype.queryDateScroll=function(){return{}},t.prototype.applyDateScroll=function(e){},t.prototype.scrollToDuration=function(e){this.applyScroll({duration:e},!1)},t}(gn);rn.mixInto(xr),xr.prototype.usesMinMaxTime=!1,xr.prototype.dateProfileGeneratorClass=$n;var Nr=function(){function e(){this.segs=[],this.isSizeDirty=!1}return e.prototype.renderSegs=function(e,t,n){this.context=e,this.rangeUpdated(),t=this.renderSegEls(t,n),this.segs=t,this.attachSegs(t,n),this.isSizeDirty=!0,yt(this.context,this.segs,Boolean(n))},e.prototype.unrender=function(e,t,n){mt(this.context,this.segs,Boolean(n)),this.detachSegs(this.segs),this.segs=[]},e.prototype.rangeUpdated=function(){var e,t,n=this.context.options;this.eventTimeFormat=ot(n.eventTimeFormat||this.computeEventTimeFormat(),n.defaultRangeSeparator),null==(e=n.displayEventTime)&&(e=this.computeDisplayEventTime()),null==(t=n.displayEventEnd)&&(t=this.computeDisplayEventEnd()),this.displayEventTime=e,this.displayEventEnd=t},e.prototype.renderSegEls=function(e,t){var n,r="";if(e.length){for(n=0;n<e.length;n++)r+=this.renderSegHtml(e[n],t);o(r).forEach((function(t,n){var r=e[n];t&&(r.el=t)})),e=ft(this.context,e,Boolean(t))}return e},e.prototype.getSegClasses=function(e,t,n,r){var i=["fc-event",e.isStart?"fc-start":"fc-not-start",e.isEnd?"fc-end":"fc-not-end"].concat(e.eventRange.ui.classNames);return t&&i.push("fc-draggable"),n&&i.push("fc-resizable"),r&&(i.push("fc-mirror"),r.isDragging&&i.push("fc-dragging"),r.isResizing&&i.push("fc-resizing")),i},e.prototype.getTimeText=function(e,t,n){var r=e.def,i=e.instance;return this._getTimeText(i.range.start,r.hasEnd?i.range.end:null,r.allDay,t,n,i.forcedStartTzo,i.forcedEndTzo)},e.prototype._getTimeText=function(e,t,n,r,i,o,a){var s=this.context.dateEnv;return null==r&&(r=this.eventTimeFormat),null==i&&(i=this.displayEventEnd),this.displayEventTime&&!n?i&&t?s.formatRange(e,t,r,{forcedStartTzo:o,forcedEndTzo:a}):s.format(e,r,{forcedTzo:o}):""},e.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",omitZeroMinute:!0}},e.prototype.computeDisplayEventTime=function(){return!0},e.prototype.computeDisplayEventEnd=function(){return!0},e.prototype.getSkinCss=function(e){return{"background-color":e.backgroundColor,"border-color":e.borderColor,color:e.textColor}},e.prototype.sortEventSegs=function(e){var t=this.context.eventOrderSpecs,n=e.map(Hr);return n.sort((function(e,n){return oe(e,n,t)})),n.map((function(e){return e._seg}))},e.prototype.computeSizes=function(e){(e||this.isSizeDirty)&&this.computeSegSizes(this.segs)},e.prototype.assignSizes=function(e){(e||this.isSizeDirty)&&(this.assignSegSizes(this.segs),this.isSizeDirty=!1)},e.prototype.computeSegSizes=function(e){},e.prototype.assignSegSizes=function(e){},e.prototype.hideByHash=function(e){if(e)for(var t=0,n=this.segs;t<n.length;t++){var r=n[t];e[r.eventRange.instance.instanceId]&&(r.el.style.visibility="hidden")}},e.prototype.showByHash=function(e){if(e)for(var t=0,n=this.segs;t<n.length;t++){var r=n[t];e[r.eventRange.instance.instanceId]&&(r.el.style.visibility="")}},e.prototype.selectByInstanceId=function(e){if(e)for(var t=0,n=this.segs;t<n.length;t++){var r=n[t],i=r.eventRange.instance;i&&i.instanceId===e&&r.el&&r.el.classList.add("fc-selected")}},e.prototype.unselectByInstanceId=function(e){if(e)for(var t=0,n=this.segs;t<n.length;t++){var r=n[t];r.el&&r.el.classList.remove("fc-selected")}},e}();function Hr(e){var t=e.eventRange.def,n=e.eventRange.instance.range,r=n.start?n.start.valueOf():0,i=n.end?n.end.valueOf():0;return Se({},t.extendedProps,t,{id:t.publicId,start:r,end:i,duration:i-r,allDay:Number(t.allDay),_seg:e})}var Ur=function(){function e(){this.fillSegTag="div",this.dirtySizeFlags={},this.containerElsByType={},this.segsByType={}}return e.prototype.getSegsByType=function(e){return this.segsByType[e]||[]},e.prototype.renderSegs=function(e,t,n){var r;this.context=t;var i=this.renderSegEls(e,n),o=this.attachSegs(e,i);o&&(r=this.containerElsByType[e]||(this.containerElsByType[e]=[])).push.apply(r,o),this.segsByType[e]=i,"bgEvent"===e&&yt(t,i,!1),this.dirtySizeFlags[e]=!0},e.prototype.unrender=function(e,t){var n=this.segsByType[e];n&&("bgEvent"===e&&mt(t,n,!1),this.detachSegs(e,n))},e.prototype.renderSegEls=function(e,t){var n,r=this,i="";if(t.length){for(n=0;n<t.length;n++)i+=this.renderSegHtml(e,t[n]);o(i).forEach((function(e,n){var r=t[n];e&&(r.el=e)})),"bgEvent"===e&&(t=ft(this.context,t,!1)),t=t.filter((function(e){return h(e.el,r.fillSegTag)}))}return t},e.prototype.renderSegHtml=function(e,t){var n=null,r=[];return"highlight"!==e&&"businessHours"!==e&&(n={"background-color":t.eventRange.ui.backgroundColor}),"highlight"!==e&&(r=r.concat(t.eventRange.ui.classNames)),"businessHours"===e?r.push("fc-bgevent"):r.push("fc-"+e.toLowerCase()),"<"+this.fillSegTag+(r.length?' class="'+r.join(" ")+'"':"")+(n?' style="'+xt(n)+'"':"")+"></"+this.fillSegTag+">"},e.prototype.detachSegs=function(e,t){var n=this.containerElsByType[e];n&&(n.forEach(c),delete this.containerElsByType[e])},e.prototype.computeSizes=function(e){for(var t in this.segsByType)(e||this.dirtySizeFlags[t])&&this.computeSegSizes(this.segsByType[t])},e.prototype.assignSizes=function(e){for(var t in this.segsByType)(e||this.dirtySizeFlags[t])&&this.assignSegSizes(this.segsByType[t]);this.dirtySizeFlags={}},e.prototype.computeSegSizes=function(e){},e.prototype.assignSegSizes=function(e){},e}(),zr=function(e){this.timeZoneName=e},Lr=function(){function e(e){this.emitter=new rn}return e.prototype.destroy=function(){},e.prototype.setMirrorIsVisible=function(e){},e.prototype.setMirrorNeedsRevert=function(e){},e.prototype.setAutoScrollEnabled=function(e){},e}();function Br(e){var t=Nn(e.locale||"en",xn([]).map);return e=Se({timeZone:Mn.timeZone,calendarSystem:"gregory"},e,{locale:t}),new Fn(e)}var Vr={startTime:J,duration:J,create:Boolean,sourceId:String},Ar={create:!0};function Fr(e,t){return!e||t>10?{weekday:"short"}:t>1?{weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}:{weekday:"long"}}function Wr(e,t,n,r,i,o,a,s){var u,l=o.dateEnv,c=o.theme,d=o.options,f=Ze(t.activeRange,e),p=["fc-day-header",c.getClass("widgetHeader")];return u="function"==typeof d.columnHeaderHtml?d.columnHeaderHtml(l.toDate(e)):"function"==typeof d.columnHeaderText?Pt(d.columnHeaderText(l.toDate(e))):Pt(l.format(e,i)),n?p=p.concat(en(e,t,o,!0)):p.push("fc-"+P[e.getUTCDay()]),'<th class="'+p.join(" ")+'"'+(f&&n?' data-date="'+l.formatIso(e,{omitTime:!0})+'"':"")+(a>1?' colspan="'+a+'"':"")+(s?" "+s:"")+">"+(f?$t(d,l,{date:e,forceOff:!n||1===r},u):u)+"</th>"}var Zr=function(e){function t(t){var n=e.call(this)||this;return n.renderSkeleton=Xt(n._renderSkeleton,n._unrenderSkeleton),n.parentEl=t,n}return Ee(t,e),t.prototype.render=function(e,t){var n=e.dates,r=e.datesRepDistinctDays,i=[];this.renderSkeleton(t),e.renderIntroHtml&&i.push(e.renderIntroHtml());for(var o=ot(t.options.columnHeaderFormat||Fr(r,n.length)),a=0,s=n;a<s.length;a++){var u=s[a];i.push(Wr(u,e.dateProfile,r,n.length,o,t))}t.isRtl&&i.reverse(),this.thead.innerHTML="<tr>"+i.join("")+"</tr>"},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSkeleton.unrender()},t.prototype._renderSkeleton=function(e){var t=e.theme,n=this.parentEl;n.innerHTML="",n.appendChild(this.el=i('<div class="fc-row '+t.getClass("headerRow")+'"><table class="'+t.getClass("tableGrid")+'"><thead></thead></table></div>')),this.thead=this.el.querySelector("thead")},t.prototype._unrenderSkeleton=function(){c(this.el)},t}(vn),jr=function(){function e(e,t){for(var n=e.start,r=e.end,i=[],o=[],a=-1;n<r;)t.isHiddenDay(n)?i.push(a+.5):(a++,i.push(a),o.push(n)),n=x(n,1);this.dates=o,this.indices=i,this.cnt=o.length}return e.prototype.sliceRange=function(e){var t=this.getDateDayIndex(e.start),n=this.getDateDayIndex(x(e.end,-1)),r=Math.max(0,t),i=Math.min(this.cnt-1,n);return(r=Math.ceil(r))<=(i=Math.floor(i))?{firstIndex:r,lastIndex:i,isStart:t===r,isEnd:n===i}:null},e.prototype.getDateDayIndex=function(e){var t=this.indices,n=Math.floor(H(this.dates[0],e));return n<0?t[0]-1:n>=t.length?t[t.length-1]+1:t[n]},e}(),Yr=function(){function e(e,t){var n,r,i,o=e.dates;if(t){for(r=o[0].getUTCDay(),n=1;n<o.length&&o[n].getUTCDay()!==r;n++);i=Math.ceil(o.length/n)}else i=1,n=o.length;this.rowCnt=i,this.colCnt=n,this.daySeries=e,this.cells=this.buildCells(),this.headerDates=this.buildHeaderDates()}return e.prototype.buildCells=function(){for(var e=[],t=0;t<this.rowCnt;t++){for(var n=[],r=0;r<this.colCnt;r++)n.push(this.buildCell(t,r));e.push(n)}return e},e.prototype.buildCell=function(e,t){return{date:this.daySeries.dates[e*this.colCnt+t]}},e.prototype.buildHeaderDates=function(){for(var e=[],t=0;t<this.colCnt;t++)e.push(this.cells[0][t].date);return e},e.prototype.sliceRange=function(e){var t=this.colCnt,n=this.daySeries.sliceRange(e),r=[];if(n)for(var i=n.firstIndex,o=n.lastIndex,a=i;a<=o;){var s=Math.floor(a/t),u=Math.min((s+1)*t,o+1);r.push({row:s,firstCol:a%t,lastCol:(u-1)%t,isStart:n.isStart&&a===i,isEnd:n.isEnd&&u-1===o}),a=u}return r},e}(),qr=function(){function e(){this.sliceBusinessHours=Ye(this._sliceBusinessHours),this.sliceDateSelection=Ye(this._sliceDateSpan),this.sliceEventStore=Ye(this._sliceEventStore),this.sliceEventDrag=Ye(this._sliceInteraction),this.sliceEventResize=Ye(this._sliceInteraction)}return e.prototype.sliceProps=function(e,t,n,r,i){for(var o=[],a=5;a<arguments.length;a++)o[a-5]=arguments[a];var s=e.eventUiBases,u=this.sliceEventStore.apply(this,[e.eventStore,s,t,n,i].concat(o));return{dateSelectionSegs:this.sliceDateSelection.apply(this,[e.dateSelection,s,i].concat(o)),businessHourSegs:this.sliceBusinessHours.apply(this,[e.businessHours,t,n,r,i].concat(o)),fgEventSegs:u.fg,bgEventSegs:u.bg,eventDrag:this.sliceEventDrag.apply(this,[e.eventDrag,s,t,n,i].concat(o)),eventResize:this.sliceEventResize.apply(this,[e.eventResize,s,t,n,i].concat(o)),eventSelection:e.eventSelection}},e.prototype.sliceNowDate=function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];return this._sliceDateSpan.apply(this,[{range:{start:e,end:N(e,1)},allDay:!1},{},t].concat(n))},e.prototype._sliceBusinessHours=function(e,t,n,r,i){for(var o=[],a=5;a<arguments.length;a++)o[a-5]=arguments[a];return e?this._sliceEventStore.apply(this,[Oe(e,Gr(t,Boolean(n)),r),{},t,n,i].concat(o)).bg:[]},e.prototype._sliceEventStore=function(e,t,n,r,i){for(var o=[],a=5;a<arguments.length;a++)o[a-5]=arguments[a];if(e){var s=dt(e,t,Gr(n,Boolean(r)),r);return{bg:this.sliceEventRanges(s.bg,i,o),fg:this.sliceEventRanges(s.fg,i,o)}}return{bg:[],fg:[]}},e.prototype._sliceInteraction=function(e,t,n,r,i){for(var o=[],a=5;a<arguments.length;a++)o[a-5]=arguments[a];if(!e)return null;var s=dt(e.mutatedEvents,t,Gr(n,Boolean(r)),r);return{segs:this.sliceEventRanges(s.fg,i,o),affectedInstances:e.affectedEvents.instances,isEvent:e.isEvent,sourceSeg:e.origSeg}},e.prototype._sliceDateSpan=function(e,t,n){for(var r=[],i=3;i<arguments.length;i++)r[i-3]=arguments[i];if(!e)return[];for(var o=lr(e,t,n.context.calendar),a=this.sliceRange.apply(this,[e.range].concat(r)),s=0,u=a;s<u.length;s++){var l=u[s];l.component=n,l.eventRange=o}return a},e.prototype.sliceEventRanges=function(e,t,n){for(var r=[],i=0,o=e;i<o.length;i++){var a=o[i];r.push.apply(r,this.sliceEventRange(a,t,n))}return r},e.prototype.sliceEventRange=function(e,t,n){for(var r=this.sliceRange.apply(this,[e.range].concat(n)),i=0,o=r;i<o.length;i++){var a=o[i];a.component=t,a.eventRange=e,a.isStart=e.isStart&&a.isStart,a.isEnd=e.isEnd&&a.isEnd}return r},e}();function Gr(e,t){var n=e.activeRange;return t?n:{start:N(n.start,e.minTime.milliseconds),end:N(n.end,e.maxTime.milliseconds-864e5)}}e.Calendar=Cr,e.Component=vn,e.ComponentContext=hn,e.DateComponent=gn,e.DateEnv=Fn,e.DateProfileGenerator=$n,e.DayHeader=Zr,e.DaySeries=jr,e.DayTable=Yr,e.ElementDragging=Lr,e.ElementScrollController=ln,e.EmitterMixin=rn,e.EventApi=ct,e.FgEventRenderer=Nr,e.FillRenderer=Ur,e.Interaction=br,e.Mixin=nn,e.NamedTimeZoneImpl=zr,e.PositionCache=sn,e.ScrollComponent=dn,e.ScrollController=un,e.Slicer=qr,e.Splitter=Kt,e.Theme=fn,e.View=xr,e.WindowScrollController=cn,e.addDays=x,e.addDurations=function(e,t){return{years:e.years+t.years,months:e.months+t.months,days:e.days+t.days,milliseconds:e.milliseconds+t.milliseconds}},e.addMs=N,e.addWeeks=function(e,t){var n=Z(e);return n[2]+=7*t,j(n)},e.allowContextMenu=function(e){e.removeEventListener("contextmenu",k)},e.allowSelection=function(e){e.classList.remove("fc-unselectable"),e.removeEventListener("selectstart",k)},e.appendToElement=s,e.applyAll=de,e.applyMutationToEventStore=Et,e.applyStyle=y,e.applyStyleProp=m,e.asRoughMinutes=function(e){return te(e)/6e4},e.asRoughMs=te,e.asRoughSeconds=function(e){return te(e)/1e3},e.buildGotoAnchorHtml=$t,e.buildSegCompareObj=Hr,e.capitaliseFirstLetter=ue,e.combineEventUis=Bt,e.compareByFieldSpec=ae,e.compareByFieldSpecs=oe,e.compareNumbers=function(e,t){return e-t},e.compensateScroll=function(e,t){t.left&&y(e,{borderLeftWidth:1,marginLeft:t.left-1}),t.right&&y(e,{borderRightWidth:1,marginRight:t.right-1})},e.computeClippingRect=function(e){return M(e).map((function(e){return w(e)})).concat({left:window.pageXOffset,right:window.pageXOffset+document.documentElement.clientWidth,top:window.pageYOffset,bottom:window.pageYOffset+document.documentElement.clientHeight}).reduce((function(e,t){return E(e,t)||t}))},e.computeEdges=T,e.computeEventDraggable=function(e,t,n){for(var r=e.calendar,i=e.view,o=r.pluginSystem.hooks.isDraggableTransformers,a=n.startEditable,s=0,u=o;s<u.length;s++){a=(0,u[s])(a,t,n,i)}return a},e.computeEventEndResizable=function(e,t,n){return n.durationEditable},e.computeEventStartResizable=function(e,t,n){return n.durationEditable&&e.options.eventResizableFromStart},e.computeFallbackHeaderFormat=Fr,e.computeHeightAndMargins=C,e.computeInnerRect=w,e.computeRect=R,e.computeVisibleDayRange=ge,e.config={},e.constrainPoint=function(e,t){return{left:Math.min(Math.max(e.left,t.left),t.right),top:Math.min(Math.max(e.top,t.top),t.bottom)}},e.createDuration=J,e.createElement=r,e.createEmptyEventStore=Ne,e.createEventInstance=Yt,e.createFormatter=ot,e.createPlugin=mn,e.cssToStr=xt,e.debounce=pe,e.diffDates=ye,e.diffDayAndTime=U,e.diffDays=H,e.diffPoints=function(e,t){return{left:e.left-t.left,top:e.top-t.top}},e.diffWeeks=function(e,t){return H(e,t)/7},e.diffWholeDays=L,e.diffWholeWeeks=z,e.disableCursor=function(){document.body.classList.add("fc-not-allowed")},e.distributeHeight=function(e,t,n){var r=Math.floor(t/e.length),i=Math.floor(t-r*(e.length-1)),o=[],a=[],s=[],u=0;re(e),e.forEach((function(t,n){var l=n===e.length-1?i:r,c=t.getBoundingClientRect().height,d=c+I(t);d<l?(o.push(t),a.push(d),s.push(c)):u+=d})),n&&(t-=u,r=Math.floor(t/o.length),i=Math.floor(t-r*(o.length-1))),o.forEach((function(e,t){var n=t===o.length-1?i:r,u=a[t],l=n-(u-s[t]);u<n&&(e.style.height=l+"px")}))},e.elementClosest=p,e.elementMatches=h,e.enableCursor=function(){document.body.classList.remove("fc-not-allowed")},e.eventTupleToStore=_e,e.filterEventStoreDefs=Ue,e.filterHash=we,e.findChildren=function(e,t){for(var n=e instanceof HTMLElement?[e]:e,r=[],i=0;i<n.length;i++)for(var o=n[i].children,a=0;a<o.length;a++){var s=o[a];t&&!h(s,t)||r.push(s)}return r},e.findElements=v,e.flexibleCompare=se,e.forceClassName=function(e,t,n){n?e.classList.add(t):e.classList.remove(t)},e.formatDate=function(e,t){void 0===t&&(t={});var n=Br(t),r=ot(t),i=n.createMarkerMeta(e);return i?n.format(i.marker,r,{forcedTzo:i.forcedTzo}):""},e.formatIsoTimeString=function(e){return le(e.getUTCHours(),2)+":"+le(e.getUTCMinutes(),2)+":"+le(e.getUTCSeconds(),2)},e.formatRange=function(e,t,n){var r=Br("object"==typeof n&&n?n:{}),i=ot(n,Mn.defaultRangeSeparator),o=r.createMarkerMeta(e),a=r.createMarkerMeta(t);return o&&a?r.formatRange(o.marker,a.marker,i,{forcedStartTzo:o.forcedTzo,forcedEndTzo:a.forcedTzo,isEndExclusive:n.isEndExclusive}):""},e.getAllDayHtml=function(e){return e.allDayHtml||Pt(e.allDayText)},e.getClippingParents=M,e.getDayClasses=en,e.getElSeg=ht,e.getRectCenter=function(e){return{left:(e.left+e.right)/2,top:(e.top+e.bottom)/2}},e.getRelevantEvents=Pe,e.globalDefaults=Mn,e.greatestDurationDenominator=ne,e.hasBgRendering=function(e){return"background"===e.rendering||"inverse-background"===e.rendering},e.htmlEscape=Pt,e.htmlToElement=i,e.insertAfterElement=function(e,t){for(var n=l(t),r=e.nextSibling||null,i=0;i<n.length;i++)e.parentNode.insertBefore(n[i],r)},e.interactionSettingsStore=Dr,e.interactionSettingsToStore=function(e){var t;return(t={})[e.component.uid]=e,t},e.intersectRanges=Ve,e.intersectRects=E,e.isArraysEqual=je,e.isDateSpansEqual=function(e,t){return Ae(e.range,t.range)&&e.allDay===t.allDay&&function(e,t){for(var n in t)if("range"!==n&&"allDay"!==n&&e[n]!==t[n])return!1;for(var n in e)if(!(n in t))return!1;return!0}(e,t)},e.isInt=ce,e.isInteractionValid=Rt,e.isMultiDayRange=function(e){var t=ge(e);return H(t.start,t.end)>1},e.isPropsEqual=Me,e.isPropsValid=It,e.isSingleDay=function(e){return 0===e.years&&0===e.months&&1===e.days&&0===e.milliseconds},e.isValidDate=Y,e.listenBySelector=_,e.mapHash=Re,e.matchCellWidths=function(e){var t=0;return e.forEach((function(e){var n=e.firstChild;if(n instanceof HTMLElement){var r=n.getBoundingClientRect().width;r>t&&(t=r)}})),t++,e.forEach((function(e){e.style.width=t+"px"})),t},e.memoize=Ye,e.memoizeOutput=qe,e.memoizeRendering=Xt,e.mergeEventStores=He,e.multiplyDuration=function(e,t){return{years:e.years*t,months:e.months*t,days:e.days*t,milliseconds:e.milliseconds*t}},e.padStart=le,e.parseBusinessHours=Gt,e.parseDragMeta=function(e){var t={},n=he(e,Vr,Ar,t);return n.leftoverProps=t,n},e.parseEventDef=jt,e.parseFieldSpecs=ie,e.parseMarker=An,e.pointInsideRect=function(e,t){return e.left>=t.left&&e.left<t.right&&e.top>=t.top&&e.top<t.bottom},e.prependToElement=u,e.preventContextMenu=function(e){e.addEventListener("contextmenu",k)},e.preventDefault=k,e.preventSelection=function(e){e.classList.add("fc-unselectable"),e.addEventListener("selectstart",k)},e.processScopedUiProps=zt,e.rangeContainsMarker=Ze,e.rangeContainsRange=We,e.rangesEqual=Ae,e.rangesIntersect=Fe,e.refineProps=he,e.removeElement=c,e.removeExact=function(e,t){for(var n=0,r=0;r<e.length;)e[r]===t?(e.splice(r,1),n++):r++;return n},e.renderDateCell=Wr,e.requestJson=Dn,e.sliceEventStore=dt,e.startOfDay=B,e.subtractInnerElHeight=function(e,t){var n={position:"relative",left:-1};y(e,n),y(t,n);var r=e.getBoundingClientRect().height-t.getBoundingClientRect().height,i={position:"",left:""};return y(e,i),y(t,i),r},e.translateRect=function(e,t,n){return{left:e.left+t,right:e.right+t,top:e.top+n,bottom:e.bottom+n}},e.uncompensateScroll=function(e){y(e,{marginLeft:"",marginRight:"",borderLeftWidth:"",borderRightWidth:""})},e.undistributeHeight=re,e.unpromisify=tn,e.version="4.4.2",e.whenTransitionDone=function(e,t){var n=function(r){t(r),O.forEach((function(t){e.removeEventListener(t,n)}))};O.forEach((function(t){e.addEventListener(t,n)}))},e.wholeDivideDurations=function(e,t){for(var n=null,r=0;r<G.length;r++){var i=G[r];if(t[i]){var o=e[i]/t[i];if(!ce(o)||null!==n&&n!==o)return null;n=o}else if(e[i])return null}return n},Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/core/package.json b/library/fullcalendar/packages/core/package.json
deleted file mode 100644
index 5040089ad..000000000
--- a/library/fullcalendar/packages/core/package.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "@fullcalendar/core",
- "version": "4.4.2",
- "title": "FullCalendar Core Package",
- "description": "Provides core functionality, including the Calendar class",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/initialize-es6",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/daygrid/LICENSE.txt b/library/fullcalendar/packages/daygrid/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/daygrid/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/daygrid/README.md b/library/fullcalendar/packages/daygrid/README.md
deleted file mode 100644
index e00936542..000000000
--- a/library/fullcalendar/packages/daygrid/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar Day Grid Plugin
-
-Display events on Month view or DayGrid view
-
-[View the docs &raquo;](https://fullcalendar.io/docs/month-view)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/daygrid/index.global.js b/library/fullcalendar/packages/daygrid/index.global.js
new file mode 100644
index 000000000..58c6a55cf
--- /dev/null
+++ b/library/fullcalendar/packages/daygrid/index.global.js
@@ -0,0 +1,909 @@
+/*!
+FullCalendar Day Grid Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/month-view
+(c) 2022 Adam Shaw
+*/
+FullCalendar.DayGrid = (function (exports, core, internal$1, preact) {
+ 'use strict';
+
+ /* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.
+ ----------------------------------------------------------------------------------------------------------------------*/
+ // It is a manager for a Table subcomponent, which does most of the heavy lifting.
+ // It is responsible for managing width/height.
+ class TableView extends internal$1.DateComponent {
+ constructor() {
+ super(...arguments);
+ this.headerElRef = preact.createRef();
+ }
+ renderSimpleLayout(headerRowContent, bodyContent) {
+ let { props, context } = this;
+ let sections = [];
+ let stickyHeaderDates = internal$1.getStickyHeaderDates(context.options);
+ if (headerRowContent) {
+ sections.push({
+ type: 'header',
+ key: 'header',
+ isSticky: stickyHeaderDates,
+ chunk: {
+ elRef: this.headerElRef,
+ tableClassName: 'fc-col-header',
+ rowContent: headerRowContent,
+ },
+ });
+ }
+ sections.push({
+ type: 'body',
+ key: 'body',
+ liquid: true,
+ chunk: { content: bodyContent },
+ });
+ return (preact.createElement(internal$1.ViewContainer, { elClasses: ['fc-daygrid'], viewSpec: context.viewSpec },
+ preact.createElement(internal$1.SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [] /* TODO: make optional? */, sections: sections })));
+ }
+ renderHScrollLayout(headerRowContent, bodyContent, colCnt, dayMinWidth) {
+ let ScrollGrid = this.context.pluginHooks.scrollGridImpl;
+ if (!ScrollGrid) {
+ throw new Error('No ScrollGrid implementation');
+ }
+ let { props, context } = this;
+ let stickyHeaderDates = !props.forPrint && internal$1.getStickyHeaderDates(context.options);
+ let stickyFooterScrollbar = !props.forPrint && internal$1.getStickyFooterScrollbar(context.options);
+ let sections = [];
+ if (headerRowContent) {
+ sections.push({
+ type: 'header',
+ key: 'header',
+ isSticky: stickyHeaderDates,
+ chunks: [{
+ key: 'main',
+ elRef: this.headerElRef,
+ tableClassName: 'fc-col-header',
+ rowContent: headerRowContent,
+ }],
+ });
+ }
+ sections.push({
+ type: 'body',
+ key: 'body',
+ liquid: true,
+ chunks: [{
+ key: 'main',
+ content: bodyContent,
+ }],
+ });
+ if (stickyFooterScrollbar) {
+ sections.push({
+ type: 'footer',
+ key: 'footer',
+ isSticky: true,
+ chunks: [{
+ key: 'main',
+ content: internal$1.renderScrollShim,
+ }],
+ });
+ }
+ return (preact.createElement(internal$1.ViewContainer, { elClasses: ['fc-daygrid'], viewSpec: context.viewSpec },
+ preact.createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, colGroups: [{ cols: [{ span: colCnt, minWidth: dayMinWidth }] }], sections: sections })));
+ }
+ }
+
+ function splitSegsByRow(segs, rowCnt) {
+ let byRow = [];
+ for (let i = 0; i < rowCnt; i += 1) {
+ byRow[i] = [];
+ }
+ for (let seg of segs) {
+ byRow[seg.row].push(seg);
+ }
+ return byRow;
+ }
+ function splitSegsByFirstCol(segs, colCnt) {
+ let byCol = [];
+ for (let i = 0; i < colCnt; i += 1) {
+ byCol[i] = [];
+ }
+ for (let seg of segs) {
+ byCol[seg.firstCol].push(seg);
+ }
+ return byCol;
+ }
+ function splitInteractionByRow(ui, rowCnt) {
+ let byRow = [];
+ if (!ui) {
+ for (let i = 0; i < rowCnt; i += 1) {
+ byRow[i] = null;
+ }
+ }
+ else {
+ for (let i = 0; i < rowCnt; i += 1) {
+ byRow[i] = {
+ affectedInstances: ui.affectedInstances,
+ isEvent: ui.isEvent,
+ segs: [],
+ };
+ }
+ for (let seg of ui.segs) {
+ byRow[seg.row].segs.push(seg);
+ }
+ }
+ return byRow;
+ }
+
+ const DEFAULT_TABLE_EVENT_TIME_FORMAT = internal$1.createFormatter({
+ hour: 'numeric',
+ minute: '2-digit',
+ omitZeroMinute: true,
+ meridiem: 'narrow',
+ });
+ function hasListItemDisplay(seg) {
+ let { display } = seg.eventRange.ui;
+ return display === 'list-item' || (display === 'auto' &&
+ !seg.eventRange.def.allDay &&
+ seg.firstCol === seg.lastCol && // can't be multi-day
+ seg.isStart && // "
+ seg.isEnd // "
+ );
+ }
+
+ class TableBlockEvent extends internal$1.BaseComponent {
+ render() {
+ let { props } = this;
+ return (preact.createElement(internal$1.StandardEvent, Object.assign({}, props, { elClasses: ['fc-daygrid-event', 'fc-daygrid-block-event', 'fc-h-event'], defaultTimeFormat: DEFAULT_TABLE_EVENT_TIME_FORMAT, defaultDisplayEventEnd: props.defaultDisplayEventEnd, disableResizing: !props.seg.eventRange.def.allDay })));
+ }
+ }
+
+ class TableListItemEvent extends internal$1.BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let { seg } = props;
+ let timeFormat = options.eventTimeFormat || DEFAULT_TABLE_EVENT_TIME_FORMAT;
+ let timeText = internal$1.buildSegTimeText(seg, timeFormat, context, true, props.defaultDisplayEventEnd);
+ return (preact.createElement(internal$1.EventContainer, Object.assign({}, props, { elTag: "a", elClasses: ['fc-daygrid-event', 'fc-daygrid-dot-event'], elAttrs: internal$1.getSegAnchorAttrs(props.seg, context), defaultGenerator: renderInnerContent, timeText: timeText, isResizing: false, isDateSelecting: false })));
+ }
+ }
+ function renderInnerContent(renderProps) {
+ return (preact.createElement(preact.Fragment, null,
+ preact.createElement("div", { className: "fc-daygrid-event-dot", style: { borderColor: renderProps.borderColor || renderProps.backgroundColor } }),
+ renderProps.timeText && (preact.createElement("div", { className: "fc-event-time" }, renderProps.timeText)),
+ preact.createElement("div", { className: "fc-event-title" }, renderProps.event.title || preact.createElement(preact.Fragment, null, "\u00A0"))));
+ }
+
+ class TableCellMoreLink extends internal$1.BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.compileSegs = internal$1.memoize(compileSegs);
+ }
+ render() {
+ let { props } = this;
+ let { allSegs, invisibleSegs } = this.compileSegs(props.singlePlacements);
+ return (preact.createElement(internal$1.MoreLinkContainer, { elClasses: ['fc-daygrid-more-link'], dateProfile: props.dateProfile, todayRange: props.todayRange, allDayDate: props.allDayDate, moreCnt: props.moreCnt, allSegs: allSegs, hiddenSegs: invisibleSegs, alignmentElRef: props.alignmentElRef, alignGridTop: props.alignGridTop, extraDateSpan: props.extraDateSpan, popoverContent: () => {
+ let isForcedInvisible = (props.eventDrag ? props.eventDrag.affectedInstances : null) ||
+ (props.eventResize ? props.eventResize.affectedInstances : null) ||
+ {};
+ return (preact.createElement(preact.Fragment, null, allSegs.map((seg) => {
+ let instanceId = seg.eventRange.instance.instanceId;
+ return (preact.createElement("div", { className: "fc-daygrid-event-harness", key: instanceId, style: {
+ visibility: isForcedInvisible[instanceId] ? 'hidden' : '',
+ } }, hasListItemDisplay(seg) ? (preact.createElement(TableListItemEvent, Object.assign({ seg: seg, isDragging: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal$1.getSegMeta(seg, props.todayRange)))) : (preact.createElement(TableBlockEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === props.eventSelection, defaultDisplayEventEnd: false }, internal$1.getSegMeta(seg, props.todayRange))))));
+ })));
+ } }));
+ }
+ }
+ function compileSegs(singlePlacements) {
+ let allSegs = [];
+ let invisibleSegs = [];
+ for (let placement of singlePlacements) {
+ allSegs.push(placement.seg);
+ if (!placement.isVisible) {
+ invisibleSegs.push(placement.seg);
+ }
+ }
+ return { allSegs, invisibleSegs };
+ }
+
+ const DEFAULT_WEEK_NUM_FORMAT = internal$1.createFormatter({ week: 'narrow' });
+ class TableCell extends internal$1.DateComponent {
+ constructor() {
+ super(...arguments);
+ this.rootElRef = preact.createRef();
+ this.state = {
+ dayNumberId: internal$1.getUniqueDomId(),
+ };
+ this.handleRootEl = (el) => {
+ internal$1.setRef(this.rootElRef, el);
+ internal$1.setRef(this.props.elRef, el);
+ };
+ }
+ render() {
+ let { context, props, state, rootElRef } = this;
+ let { options } = context;
+ let { date, dateProfile } = props;
+ return (preact.createElement(internal$1.DayCellContainer, { elTag: "td", elRef: this.handleRootEl, elClasses: [
+ 'fc-daygrid-day',
+ ...(props.extraClassNames || []),
+ ], elAttrs: Object.assign(Object.assign(Object.assign({}, props.extraDataAttrs), (props.showDayNumber ? { 'aria-labelledby': state.dayNumberId } : {})), { role: 'gridcell' }), defaultGenerator: renderTopInner, date: date, dateProfile: dateProfile, todayRange: props.todayRange, showDayNumber: props.showDayNumber, extraRenderProps: props.extraRenderProps }, (InnerContent, renderProps) => (preact.createElement("div", { className: "fc-daygrid-day-frame fc-scrollgrid-sync-inner", ref: props.innerElRef },
+ props.showWeekNumber && (preact.createElement(internal$1.WeekNumberContainer, { elTag: "a", elClasses: ['fc-daygrid-week-number'], elAttrs: internal$1.buildNavLinkAttrs(context, date, 'week'), date: date, defaultFormat: DEFAULT_WEEK_NUM_FORMAT })),
+ Boolean(!renderProps.isDisabled &&
+ (props.showDayNumber || internal$1.hasCustomDayCellContent(options) || props.forceDayTop)) && (preact.createElement("div", { className: "fc-daygrid-day-top" },
+ preact.createElement(InnerContent, { elTag: "a", elClasses: ['fc-daygrid-day-number'], elAttrs: Object.assign(Object.assign({}, internal$1.buildNavLinkAttrs(context, date)), { id: state.dayNumberId }) }))),
+ preact.createElement("div", { className: "fc-daygrid-day-events", ref: props.fgContentElRef },
+ props.fgContent,
+ preact.createElement("div", { className: "fc-daygrid-day-bottom", style: { marginTop: props.moreMarginTop } },
+ preact.createElement(TableCellMoreLink, { allDayDate: date, singlePlacements: props.singlePlacements, moreCnt: props.moreCnt, alignmentElRef: rootElRef, alignGridTop: !props.showDayNumber, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange }))),
+ preact.createElement("div", { className: "fc-daygrid-day-bg" }, props.bgContent)))));
+ }
+ }
+ function renderTopInner(props) {
+ return props.dayNumberText || preact.createElement(preact.Fragment, null, "\u00A0");
+ }
+
+ function computeFgSegPlacement(segs, // assumed already sorted
+ dayMaxEvents, dayMaxEventRows, strictOrder, eventInstanceHeights, maxContentHeight, cells) {
+ let hierarchy = new DayGridSegHierarchy();
+ hierarchy.allowReslicing = true;
+ hierarchy.strictOrder = strictOrder;
+ if (dayMaxEvents === true || dayMaxEventRows === true) {
+ hierarchy.maxCoord = maxContentHeight;
+ hierarchy.hiddenConsumes = true;
+ }
+ else if (typeof dayMaxEvents === 'number') {
+ hierarchy.maxStackCnt = dayMaxEvents;
+ }
+ else if (typeof dayMaxEventRows === 'number') {
+ hierarchy.maxStackCnt = dayMaxEventRows;
+ hierarchy.hiddenConsumes = true;
+ }
+ // create segInputs only for segs with known heights
+ let segInputs = [];
+ let unknownHeightSegs = [];
+ for (let i = 0; i < segs.length; i += 1) {
+ let seg = segs[i];
+ let { instanceId } = seg.eventRange.instance;
+ let eventHeight = eventInstanceHeights[instanceId];
+ if (eventHeight != null) {
+ segInputs.push({
+ index: i,
+ thickness: eventHeight,
+ span: {
+ start: seg.firstCol,
+ end: seg.lastCol + 1,
+ },
+ });
+ }
+ else {
+ unknownHeightSegs.push(seg);
+ }
+ }
+ let hiddenEntries = hierarchy.addSegs(segInputs);
+ let segRects = hierarchy.toRects();
+ let { singleColPlacements, multiColPlacements, leftoverMargins } = placeRects(segRects, segs, cells);
+ let moreCnts = [];
+ let moreMarginTops = [];
+ // add segs with unknown heights
+ for (let seg of unknownHeightSegs) {
+ multiColPlacements[seg.firstCol].push({
+ seg,
+ isVisible: false,
+ isAbsolute: true,
+ absoluteTop: 0,
+ marginTop: 0,
+ });
+ for (let col = seg.firstCol; col <= seg.lastCol; col += 1) {
+ singleColPlacements[col].push({
+ seg: resliceSeg(seg, col, col + 1, cells),
+ isVisible: false,
+ isAbsolute: false,
+ absoluteTop: 0,
+ marginTop: 0,
+ });
+ }
+ }
+ // add the hidden entries
+ for (let col = 0; col < cells.length; col += 1) {
+ moreCnts.push(0);
+ }
+ for (let hiddenEntry of hiddenEntries) {
+ let seg = segs[hiddenEntry.index];
+ let hiddenSpan = hiddenEntry.span;
+ multiColPlacements[hiddenSpan.start].push({
+ seg: resliceSeg(seg, hiddenSpan.start, hiddenSpan.end, cells),
+ isVisible: false,
+ isAbsolute: true,
+ absoluteTop: 0,
+ marginTop: 0,
+ });
+ for (let col = hiddenSpan.start; col < hiddenSpan.end; col += 1) {
+ moreCnts[col] += 1;
+ singleColPlacements[col].push({
+ seg: resliceSeg(seg, col, col + 1, cells),
+ isVisible: false,
+ isAbsolute: false,
+ absoluteTop: 0,
+ marginTop: 0,
+ });
+ }
+ }
+ // deal with leftover margins
+ for (let col = 0; col < cells.length; col += 1) {
+ moreMarginTops.push(leftoverMargins[col]);
+ }
+ return { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops };
+ }
+ // rects ordered by top coord, then left
+ function placeRects(allRects, segs, cells) {
+ let rectsByEachCol = groupRectsByEachCol(allRects, cells.length);
+ let singleColPlacements = [];
+ let multiColPlacements = [];
+ let leftoverMargins = [];
+ for (let col = 0; col < cells.length; col += 1) {
+ let rects = rectsByEachCol[col];
+ // compute all static segs in singlePlacements
+ let singlePlacements = [];
+ let currentHeight = 0;
+ let currentMarginTop = 0;
+ for (let rect of rects) {
+ let seg = segs[rect.index];
+ singlePlacements.push({
+ seg: resliceSeg(seg, col, col + 1, cells),
+ isVisible: true,
+ isAbsolute: false,
+ absoluteTop: rect.levelCoord,
+ marginTop: rect.levelCoord - currentHeight,
+ });
+ currentHeight = rect.levelCoord + rect.thickness;
+ }
+ // compute mixed static/absolute segs in multiPlacements
+ let multiPlacements = [];
+ currentHeight = 0;
+ currentMarginTop = 0;
+ for (let rect of rects) {
+ let seg = segs[rect.index];
+ let isAbsolute = rect.span.end - rect.span.start > 1; // multi-column?
+ let isFirstCol = rect.span.start === col;
+ currentMarginTop += rect.levelCoord - currentHeight; // amount of space since bottom of previous seg
+ currentHeight = rect.levelCoord + rect.thickness; // height will now be bottom of current seg
+ if (isAbsolute) {
+ currentMarginTop += rect.thickness;
+ if (isFirstCol) {
+ multiPlacements.push({
+ seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),
+ isVisible: true,
+ isAbsolute: true,
+ absoluteTop: rect.levelCoord,
+ marginTop: 0,
+ });
+ }
+ }
+ else if (isFirstCol) {
+ multiPlacements.push({
+ seg: resliceSeg(seg, rect.span.start, rect.span.end, cells),
+ isVisible: true,
+ isAbsolute: false,
+ absoluteTop: rect.levelCoord,
+ marginTop: currentMarginTop, // claim the margin
+ });
+ currentMarginTop = 0;
+ }
+ }
+ singleColPlacements.push(singlePlacements);
+ multiColPlacements.push(multiPlacements);
+ leftoverMargins.push(currentMarginTop);
+ }
+ return { singleColPlacements, multiColPlacements, leftoverMargins };
+ }
+ function groupRectsByEachCol(rects, colCnt) {
+ let rectsByEachCol = [];
+ for (let col = 0; col < colCnt; col += 1) {
+ rectsByEachCol.push([]);
+ }
+ for (let rect of rects) {
+ for (let col = rect.span.start; col < rect.span.end; col += 1) {
+ rectsByEachCol[col].push(rect);
+ }
+ }
+ return rectsByEachCol;
+ }
+ function resliceSeg(seg, spanStart, spanEnd, cells) {
+ if (seg.firstCol === spanStart && seg.lastCol === spanEnd - 1) {
+ return seg;
+ }
+ let eventRange = seg.eventRange;
+ let origRange = eventRange.range;
+ let slicedRange = internal$1.intersectRanges(origRange, {
+ start: cells[spanStart].date,
+ end: internal$1.addDays(cells[spanEnd - 1].date, 1),
+ });
+ return Object.assign(Object.assign({}, seg), { firstCol: spanStart, lastCol: spanEnd - 1, eventRange: {
+ def: eventRange.def,
+ ui: Object.assign(Object.assign({}, eventRange.ui), { durationEditable: false }),
+ instance: eventRange.instance,
+ range: slicedRange,
+ }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() });
+ }
+ class DayGridSegHierarchy extends internal$1.SegHierarchy {
+ constructor() {
+ super(...arguments);
+ // config
+ this.hiddenConsumes = false;
+ // allows us to keep hidden entries in the hierarchy so they take up space
+ this.forceHidden = {};
+ }
+ addSegs(segInputs) {
+ const hiddenSegs = super.addSegs(segInputs);
+ const { entriesByLevel } = this;
+ const excludeHidden = (entry) => !this.forceHidden[internal$1.buildEntryKey(entry)];
+ // remove the forced-hidden segs
+ for (let level = 0; level < entriesByLevel.length; level += 1) {
+ entriesByLevel[level] = entriesByLevel[level].filter(excludeHidden);
+ }
+ return hiddenSegs;
+ }
+ handleInvalidInsertion(insertion, entry, hiddenEntries) {
+ const { entriesByLevel, forceHidden } = this;
+ const { touchingEntry, touchingLevel, touchingLateral } = insertion;
+ if (this.hiddenConsumes && touchingEntry) {
+ const touchingEntryId = internal$1.buildEntryKey(touchingEntry);
+ // if not already hidden
+ if (!forceHidden[touchingEntryId]) {
+ if (this.allowReslicing) {
+ const placeholderEntry = Object.assign(Object.assign({}, touchingEntry), { span: internal$1.intersectSpans(touchingEntry.span, entry.span) });
+ const placeholderEntryId = internal$1.buildEntryKey(placeholderEntry);
+ forceHidden[placeholderEntryId] = true;
+ entriesByLevel[touchingLevel][touchingLateral] = placeholderEntry; // replace touchingEntry with our placeholder
+ this.splitEntry(touchingEntry, entry, hiddenEntries); // split up the touchingEntry, reinsert it
+ }
+ else {
+ forceHidden[touchingEntryId] = true;
+ hiddenEntries.push(touchingEntry);
+ }
+ }
+ }
+ return super.handleInvalidInsertion(insertion, entry, hiddenEntries);
+ }
+ }
+
+ class TableRow extends internal$1.DateComponent {
+ constructor() {
+ super(...arguments);
+ this.cellElRefs = new internal$1.RefMap(); // the <td>
+ this.frameElRefs = new internal$1.RefMap(); // the fc-daygrid-day-frame
+ this.fgElRefs = new internal$1.RefMap(); // the fc-daygrid-day-events
+ this.segHarnessRefs = new internal$1.RefMap(); // indexed by "instanceId:firstCol"
+ this.rootElRef = preact.createRef();
+ this.state = {
+ framePositions: null,
+ maxContentHeight: null,
+ eventInstanceHeights: {},
+ };
+ this.handleResize = (isForced) => {
+ if (isForced) {
+ this.updateSizing(true); // isExternal=true
+ }
+ };
+ }
+ render() {
+ let { props, state, context } = this;
+ let { options } = context;
+ let colCnt = props.cells.length;
+ let businessHoursByCol = splitSegsByFirstCol(props.businessHourSegs, colCnt);
+ let bgEventSegsByCol = splitSegsByFirstCol(props.bgEventSegs, colCnt);
+ let highlightSegsByCol = splitSegsByFirstCol(this.getHighlightSegs(), colCnt);
+ let mirrorSegsByCol = splitSegsByFirstCol(this.getMirrorSegs(), colCnt);
+ let { singleColPlacements, multiColPlacements, moreCnts, moreMarginTops } = computeFgSegPlacement(internal$1.sortEventSegs(props.fgEventSegs, options.eventOrder), props.dayMaxEvents, props.dayMaxEventRows, options.eventOrderStrict, state.eventInstanceHeights, state.maxContentHeight, props.cells);
+ let isForcedInvisible = // TODO: messy way to compute this
+ (props.eventDrag && props.eventDrag.affectedInstances) ||
+ (props.eventResize && props.eventResize.affectedInstances) ||
+ {};
+ return (preact.createElement("tr", { ref: this.rootElRef, role: "row" },
+ props.renderIntro && props.renderIntro(),
+ props.cells.map((cell, col) => {
+ let normalFgNodes = this.renderFgSegs(col, props.forPrint ? singleColPlacements[col] : multiColPlacements[col], props.todayRange, isForcedInvisible);
+ let mirrorFgNodes = this.renderFgSegs(col, buildMirrorPlacements(mirrorSegsByCol[col], multiColPlacements), props.todayRange, {}, Boolean(props.eventDrag), Boolean(props.eventResize), false);
+ return (preact.createElement(TableCell, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), innerElRef: this.frameElRefs.createRef(cell.key) /* FF <td> problem, but okay to use for left/right. TODO: rename prop */, dateProfile: props.dateProfile, date: cell.date, showDayNumber: props.showDayNumbers, showWeekNumber: props.showWeekNumbers && col === 0, forceDayTop: props.showWeekNumbers /* even displaying weeknum for row, not necessarily day */, todayRange: props.todayRange, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, moreCnt: moreCnts[col], moreMarginTop: moreMarginTops[col], singlePlacements: singleColPlacements[col], fgContentElRef: this.fgElRefs.createRef(cell.key), fgContent: ( // Fragment scopes the keys
+ preact.createElement(preact.Fragment, null,
+ preact.createElement(preact.Fragment, null, normalFgNodes),
+ preact.createElement(preact.Fragment, null, mirrorFgNodes))), bgContent: ( // Fragment scopes the keys
+ preact.createElement(preact.Fragment, null,
+ this.renderFillSegs(highlightSegsByCol[col], 'highlight'),
+ this.renderFillSegs(businessHoursByCol[col], 'non-business'),
+ this.renderFillSegs(bgEventSegsByCol[col], 'bg-event'))) }));
+ })));
+ }
+ componentDidMount() {
+ this.updateSizing(true);
+ this.context.addResizeHandler(this.handleResize);
+ }
+ componentDidUpdate(prevProps, prevState) {
+ let currentProps = this.props;
+ this.updateSizing(!internal$1.isPropsEqual(prevProps, currentProps));
+ }
+ componentWillUnmount() {
+ this.context.removeResizeHandler(this.handleResize);
+ }
+ getHighlightSegs() {
+ let { props } = this;
+ if (props.eventDrag && props.eventDrag.segs.length) { // messy check
+ return props.eventDrag.segs;
+ }
+ if (props.eventResize && props.eventResize.segs.length) { // messy check
+ return props.eventResize.segs;
+ }
+ return props.dateSelectionSegs;
+ }
+ getMirrorSegs() {
+ let { props } = this;
+ if (props.eventResize && props.eventResize.segs.length) { // messy check
+ return props.eventResize.segs;
+ }
+ return [];
+ }
+ renderFgSegs(col, segPlacements, todayRange, isForcedInvisible, isDragging, isResizing, isDateSelecting) {
+ let { context } = this;
+ let { eventSelection } = this.props;
+ let { framePositions } = this.state;
+ let defaultDisplayEventEnd = this.props.cells.length === 1; // colCnt === 1
+ let isMirror = isDragging || isResizing || isDateSelecting;
+ let nodes = [];
+ if (framePositions) {
+ for (let placement of segPlacements) {
+ let { seg } = placement;
+ let { instanceId } = seg.eventRange.instance;
+ let key = instanceId + ':' + col;
+ let isVisible = placement.isVisible && !isForcedInvisible[instanceId];
+ let isAbsolute = placement.isAbsolute;
+ let left = '';
+ let right = '';
+ if (isAbsolute) {
+ if (context.isRtl) {
+ right = 0;
+ left = framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol];
+ }
+ else {
+ left = 0;
+ right = framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol];
+ }
+ }
+ /*
+ known bug: events that are force to be list-item but span multiple days still take up space in later columns
+ todo: in print view, for multi-day events, don't display title within non-start/end segs
+ */
+ nodes.push(preact.createElement("div", { className: 'fc-daygrid-event-harness' + (isAbsolute ? ' fc-daygrid-event-harness-abs' : ''), key: key, ref: isMirror ? null : this.segHarnessRefs.createRef(key), style: {
+ visibility: isVisible ? '' : 'hidden',
+ marginTop: isAbsolute ? '' : placement.marginTop,
+ top: isAbsolute ? placement.absoluteTop : '',
+ left,
+ right,
+ } }, hasListItemDisplay(seg) ? (preact.createElement(TableListItemEvent, Object.assign({ seg: seg, isDragging: isDragging, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal$1.getSegMeta(seg, todayRange)))) : (preact.createElement(TableBlockEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, defaultDisplayEventEnd: defaultDisplayEventEnd }, internal$1.getSegMeta(seg, todayRange))))));
+ }
+ }
+ return nodes;
+ }
+ renderFillSegs(segs, fillType) {
+ let { isRtl } = this.context;
+ let { todayRange } = this.props;
+ let { framePositions } = this.state;
+ let nodes = [];
+ if (framePositions) {
+ for (let seg of segs) {
+ let leftRightCss = isRtl ? {
+ right: 0,
+ left: framePositions.lefts[seg.lastCol] - framePositions.lefts[seg.firstCol],
+ } : {
+ left: 0,
+ right: framePositions.rights[seg.firstCol] - framePositions.rights[seg.lastCol],
+ };
+ nodes.push(preact.createElement("div", { key: internal$1.buildEventRangeKey(seg.eventRange), className: "fc-daygrid-bg-harness", style: leftRightCss }, fillType === 'bg-event' ?
+ preact.createElement(internal$1.BgEvent, Object.assign({ seg: seg }, internal$1.getSegMeta(seg, todayRange))) :
+ internal$1.renderFill(fillType)));
+ }
+ }
+ return preact.createElement(preact.Fragment, {}, ...nodes);
+ }
+ updateSizing(isExternalSizingChange) {
+ let { props, state, frameElRefs } = this;
+ if (!props.forPrint &&
+ props.clientWidth !== null // positioning ready?
+ ) {
+ if (isExternalSizingChange) {
+ let frameEls = props.cells.map((cell) => frameElRefs.currentMap[cell.key]);
+ if (frameEls.length) {
+ let originEl = this.rootElRef.current;
+ let newPositionCache = new internal$1.PositionCache(originEl, frameEls, true, // isHorizontal
+ false);
+ if (!state.framePositions || !state.framePositions.similarTo(newPositionCache)) {
+ this.setState({
+ framePositions: new internal$1.PositionCache(originEl, frameEls, true, // isHorizontal
+ false),
+ });
+ }
+ }
+ }
+ const oldInstanceHeights = this.state.eventInstanceHeights;
+ const newInstanceHeights = this.queryEventInstanceHeights();
+ const limitByContentHeight = props.dayMaxEvents === true || props.dayMaxEventRows === true;
+ this.safeSetState({
+ // HACK to prevent oscillations of events being shown/hidden from max-event-rows
+ // Essentially, once you compute an element's height, never null-out.
+ // TODO: always display all events, as visibility:hidden?
+ eventInstanceHeights: Object.assign(Object.assign({}, oldInstanceHeights), newInstanceHeights),
+ maxContentHeight: limitByContentHeight ? this.computeMaxContentHeight() : null,
+ });
+ }
+ }
+ queryEventInstanceHeights() {
+ let segElMap = this.segHarnessRefs.currentMap;
+ let eventInstanceHeights = {};
+ // get the max height amongst instance segs
+ for (let key in segElMap) {
+ let height = Math.round(segElMap[key].getBoundingClientRect().height);
+ let instanceId = key.split(':')[0]; // deconstruct how renderFgSegs makes the key
+ eventInstanceHeights[instanceId] = Math.max(eventInstanceHeights[instanceId] || 0, height);
+ }
+ return eventInstanceHeights;
+ }
+ computeMaxContentHeight() {
+ let firstKey = this.props.cells[0].key;
+ let cellEl = this.cellElRefs.currentMap[firstKey];
+ let fcContainerEl = this.fgElRefs.currentMap[firstKey];
+ return cellEl.getBoundingClientRect().bottom - fcContainerEl.getBoundingClientRect().top;
+ }
+ getCellEls() {
+ let elMap = this.cellElRefs.currentMap;
+ return this.props.cells.map((cell) => elMap[cell.key]);
+ }
+ }
+ TableRow.addStateEquality({
+ eventInstanceHeights: internal$1.isPropsEqual,
+ });
+ function buildMirrorPlacements(mirrorSegs, colPlacements) {
+ if (!mirrorSegs.length) {
+ return [];
+ }
+ let topsByInstanceId = buildAbsoluteTopHash(colPlacements); // TODO: cache this at first render?
+ return mirrorSegs.map((seg) => ({
+ seg,
+ isVisible: true,
+ isAbsolute: true,
+ absoluteTop: topsByInstanceId[seg.eventRange.instance.instanceId],
+ marginTop: 0,
+ }));
+ }
+ function buildAbsoluteTopHash(colPlacements) {
+ let topsByInstanceId = {};
+ for (let placements of colPlacements) {
+ for (let placement of placements) {
+ topsByInstanceId[placement.seg.eventRange.instance.instanceId] = placement.absoluteTop;
+ }
+ }
+ return topsByInstanceId;
+ }
+
+ class Table extends internal$1.DateComponent {
+ constructor() {
+ super(...arguments);
+ this.splitBusinessHourSegs = internal$1.memoize(splitSegsByRow);
+ this.splitBgEventSegs = internal$1.memoize(splitSegsByRow);
+ this.splitFgEventSegs = internal$1.memoize(splitSegsByRow);
+ this.splitDateSelectionSegs = internal$1.memoize(splitSegsByRow);
+ this.splitEventDrag = internal$1.memoize(splitInteractionByRow);
+ this.splitEventResize = internal$1.memoize(splitInteractionByRow);
+ this.rowRefs = new internal$1.RefMap();
+ this.handleRootEl = (rootEl) => {
+ this.rootEl = rootEl;
+ if (rootEl) {
+ this.context.registerInteractiveComponent(this, {
+ el: rootEl,
+ isHitComboAllowed: this.props.isHitComboAllowed,
+ });
+ }
+ else {
+ this.context.unregisterInteractiveComponent(this);
+ }
+ };
+ }
+ render() {
+ let { props } = this;
+ let { dateProfile, dayMaxEventRows, dayMaxEvents, expandRows } = props;
+ let rowCnt = props.cells.length;
+ let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, rowCnt);
+ let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, rowCnt);
+ let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, rowCnt);
+ let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, rowCnt);
+ let eventDragByRow = this.splitEventDrag(props.eventDrag, rowCnt);
+ let eventResizeByRow = this.splitEventResize(props.eventResize, rowCnt);
+ let limitViaBalanced = dayMaxEvents === true || dayMaxEventRows === true;
+ // if rows can't expand to fill fixed height, can't do balanced-height event limit
+ // TODO: best place to normalize these options?
+ if (limitViaBalanced && !expandRows) {
+ limitViaBalanced = false;
+ dayMaxEventRows = null;
+ dayMaxEvents = null;
+ }
+ let classNames = [
+ 'fc-daygrid-body',
+ limitViaBalanced ? 'fc-daygrid-body-balanced' : 'fc-daygrid-body-unbalanced',
+ expandRows ? '' : 'fc-daygrid-body-natural', // will height of one row depend on the others?
+ ];
+ return (preact.createElement("div", { className: classNames.join(' '), ref: this.handleRootEl, style: {
+ // these props are important to give this wrapper correct dimensions for interactions
+ // TODO: if we set it here, can we avoid giving to inner tables?
+ width: props.clientWidth,
+ minWidth: props.tableMinWidth,
+ } },
+ preact.createElement(internal$1.NowTimer, { unit: "day" }, (nowDate, todayRange) => (preact.createElement(preact.Fragment, null,
+ preact.createElement("table", { role: "presentation", className: "fc-scrollgrid-sync-table", style: {
+ width: props.clientWidth,
+ minWidth: props.tableMinWidth,
+ height: expandRows ? props.clientHeight : '',
+ } },
+ props.colGroupNode,
+ preact.createElement("tbody", { role: "presentation" }, props.cells.map((cells, row) => (preact.createElement(TableRow, { ref: this.rowRefs.createRef(row), key: cells.length
+ ? cells[0].date.toISOString() /* best? or put key on cell? or use diff formatter? */
+ : row // in case there are no cells (like when resource view is loading)
+ , showDayNumbers: rowCnt > 1, showWeekNumbers: props.showWeekNumbers, todayRange: todayRange, dateProfile: dateProfile, cells: cells, renderIntro: props.renderRowIntro, businessHourSegs: businessHourSegsByRow[row], eventSelection: props.eventSelection, bgEventSegs: bgEventSegsByRow[row].filter(isSegAllDay) /* hack */, fgEventSegs: fgEventSegsByRow[row], dateSelectionSegs: dateSelectionSegsByRow[row], eventDrag: eventDragByRow[row], eventResize: eventResizeByRow[row], dayMaxEvents: dayMaxEvents, dayMaxEventRows: dayMaxEventRows, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint }))))))))));
+ }
+ // Hit System
+ // ----------------------------------------------------------------------------------------------------
+ prepareHits() {
+ this.rowPositions = new internal$1.PositionCache(this.rootEl, this.rowRefs.collect().map((rowObj) => rowObj.getCellEls()[0]), // first cell el in each row. TODO: not optimal
+ false, true);
+ this.colPositions = new internal$1.PositionCache(this.rootEl, this.rowRefs.currentMap[0].getCellEls(), // cell els in first row
+ true, // horizontal
+ false);
+ }
+ queryHit(positionLeft, positionTop) {
+ let { colPositions, rowPositions } = this;
+ let col = colPositions.leftToIndex(positionLeft);
+ let row = rowPositions.topToIndex(positionTop);
+ if (row != null && col != null) {
+ let cell = this.props.cells[row][col];
+ return {
+ dateProfile: this.props.dateProfile,
+ dateSpan: Object.assign({ range: this.getCellRange(row, col), allDay: true }, cell.extraDateSpan),
+ dayEl: this.getCellEl(row, col),
+ rect: {
+ left: colPositions.lefts[col],
+ right: colPositions.rights[col],
+ top: rowPositions.tops[row],
+ bottom: rowPositions.bottoms[row],
+ },
+ layer: 0,
+ };
+ }
+ return null;
+ }
+ getCellEl(row, col) {
+ return this.rowRefs.currentMap[row].getCellEls()[col]; // TODO: not optimal
+ }
+ getCellRange(row, col) {
+ let start = this.props.cells[row][col].date;
+ let end = internal$1.addDays(start, 1);
+ return { start, end };
+ }
+ }
+ function isSegAllDay(seg) {
+ return seg.eventRange.def.allDay;
+ }
+
+ class DayTableSlicer extends internal$1.Slicer {
+ constructor() {
+ super(...arguments);
+ this.forceDayIfListItem = true;
+ }
+ sliceRange(dateRange, dayTableModel) {
+ return dayTableModel.sliceRange(dateRange);
+ }
+ }
+
+ class DayTable extends internal$1.DateComponent {
+ constructor() {
+ super(...arguments);
+ this.slicer = new DayTableSlicer();
+ this.tableRef = preact.createRef();
+ }
+ render() {
+ let { props, context } = this;
+ return (preact.createElement(Table, Object.assign({ ref: this.tableRef }, this.slicer.sliceProps(props, props.dateProfile, props.nextDayThreshold, context, props.dayTableModel), { dateProfile: props.dateProfile, cells: props.dayTableModel.cells, colGroupNode: props.colGroupNode, tableMinWidth: props.tableMinWidth, renderRowIntro: props.renderRowIntro, dayMaxEvents: props.dayMaxEvents, dayMaxEventRows: props.dayMaxEventRows, showWeekNumbers: props.showWeekNumbers, expandRows: props.expandRows, headerAlignElRef: props.headerAlignElRef, clientWidth: props.clientWidth, clientHeight: props.clientHeight, forPrint: props.forPrint })));
+ }
+ }
+
+ class DayTableView extends TableView {
+ constructor() {
+ super(...arguments);
+ this.buildDayTableModel = internal$1.memoize(buildDayTableModel);
+ this.headerRef = preact.createRef();
+ this.tableRef = preact.createRef();
+ }
+ render() {
+ let { options, dateProfileGenerator } = this.context;
+ let { props } = this;
+ let dayTableModel = this.buildDayTableModel(props.dateProfile, dateProfileGenerator);
+ let headerContent = options.dayHeaders && (preact.createElement(internal$1.DayHeader, { ref: this.headerRef, dateProfile: props.dateProfile, dates: dayTableModel.headerDates, datesRepDistinctDays: dayTableModel.rowCnt === 1 }));
+ let bodyContent = (contentArg) => (preact.createElement(DayTable, { ref: this.tableRef, dateProfile: props.dateProfile, dayTableModel: dayTableModel, businessHours: props.businessHours, dateSelection: props.dateSelection, eventStore: props.eventStore, eventUiBases: props.eventUiBases, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, nextDayThreshold: options.nextDayThreshold, colGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, dayMaxEvents: options.dayMaxEvents, dayMaxEventRows: options.dayMaxEventRows, showWeekNumbers: options.weekNumbers, expandRows: !props.isHeightAuto, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }));
+ return options.dayMinWidth
+ ? this.renderHScrollLayout(headerContent, bodyContent, dayTableModel.colCnt, options.dayMinWidth)
+ : this.renderSimpleLayout(headerContent, bodyContent);
+ }
+ }
+ function buildDayTableModel(dateProfile, dateProfileGenerator) {
+ let daySeries = new internal$1.DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);
+ return new internal$1.DayTableModel(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));
+ }
+
+ class TableDateProfileGenerator extends internal$1.DateProfileGenerator {
+ // Computes the date range that will be rendered.
+ buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay) {
+ let { dateEnv } = this.props;
+ let renderRange = super.buildRenderRange(currentRange, currentRangeUnit, isRangeAllDay);
+ let start = renderRange.start;
+ let end = renderRange.end;
+ let endOfWeek;
+ // year and month views should be aligned with weeks. this is already done for week
+ if (/^(year|month)$/.test(currentRangeUnit)) {
+ start = dateEnv.startOfWeek(start);
+ // make end-of-week if not already
+ endOfWeek = dateEnv.startOfWeek(end);
+ if (endOfWeek.valueOf() !== end.valueOf()) {
+ end = internal$1.addWeeks(endOfWeek, 1);
+ }
+ }
+ // ensure 6 weeks
+ if (this.props.monthMode &&
+ this.props.fixedWeekCount) {
+ let rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
+ internal$1.diffWeeks(start, end));
+ end = internal$1.addWeeks(end, 6 - rowCnt);
+ }
+ return { start, end };
+ }
+ }
+
+ var css_248z = ":root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:\"\";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;padding:2px 3px 0}.fc .fc-daygrid-day-bottom:before{clear:both;content:\"\";display:table}.fc .fc-daygrid-more-link{cursor:pointer;position:relative;z-index:4}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}";
+ internal$1.injectStyles(css_248z);
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/daygrid',
+ initialView: 'dayGridMonth',
+ views: {
+ dayGrid: {
+ component: DayTableView,
+ dateProfileGeneratorClass: TableDateProfileGenerator,
+ },
+ dayGridDay: {
+ type: 'dayGrid',
+ duration: { days: 1 },
+ },
+ dayGridWeek: {
+ type: 'dayGrid',
+ duration: { weeks: 1 },
+ },
+ dayGridMonth: {
+ type: 'dayGrid',
+ duration: { months: 1 },
+ monthMode: true,
+ fixedWeekCount: true,
+ },
+ },
+ });
+
+ var internal = {
+ __proto__: null,
+ DayTable: DayTable,
+ DayTableSlicer: DayTableSlicer,
+ Table: Table,
+ TableView: TableView,
+ buildDayTableModel: buildDayTableModel,
+ DayGridView: DayTableView
+ };
+
+ core.globalPlugins.push(plugin);
+
+ exports.Internal = internal;
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal, FullCalendar.Preact);
diff --git a/library/fullcalendar/packages/daygrid/index.global.min.js b/library/fullcalendar/packages/daygrid/index.global.min.js
new file mode 100644
index 000000000..5a3aa763e
--- /dev/null
+++ b/library/fullcalendar/packages/daygrid/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Day Grid Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/month-view
+(c) 2022 Adam Shaw
+*/
+FullCalendar.DayGrid=function(e,t,n,s){"use strict";class i extends n.DateComponent{constructor(){super(...arguments),this.headerElRef=s.createRef()}renderSimpleLayout(e,t){let{props:i,context:r}=this,a=[],l=n.getStickyHeaderDates(r.options);return e&&a.push({type:"header",key:"header",isSticky:l,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),a.push({type:"body",key:"body",liquid:!0,chunk:{content:t}}),s.createElement(n.ViewContainer,{elClasses:["fc-daygrid"],viewSpec:r.viewSpec},s.createElement(n.SimpleScrollGrid,{liquid:!i.isHeightAuto&&!i.forPrint,collapsibleWidth:i.forPrint,cols:[],sections:a}))}renderHScrollLayout(e,t,i,r){let a=this.context.pluginHooks.scrollGridImpl;if(!a)throw new Error("No ScrollGrid implementation");let{props:l,context:o}=this,d=!l.forPrint&&n.getStickyHeaderDates(o.options),c=!l.forPrint&&n.getStickyFooterScrollbar(o.options),g=[];return e&&g.push({type:"header",key:"header",isSticky:d,chunks:[{key:"main",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),g.push({type:"body",key:"body",liquid:!0,chunks:[{key:"main",content:t}]}),c&&g.push({type:"footer",key:"footer",isSticky:!0,chunks:[{key:"main",content:n.renderScrollShim}]}),s.createElement(n.ViewContainer,{elClasses:["fc-daygrid"],viewSpec:o.viewSpec},s.createElement(a,{liquid:!l.isHeightAuto&&!l.forPrint,collapsibleWidth:l.forPrint,colGroups:[{cols:[{span:i,minWidth:r}]}],sections:g}))}}function r(e,t){let n=[];for(let e=0;e<t;e+=1)n[e]=[];for(let t of e)n[t.row].push(t);return n}function a(e,t){let n=[];for(let e=0;e<t;e+=1)n[e]=[];for(let t of e)n[t.firstCol].push(t);return n}function l(e,t){let n=[];if(e){for(let s=0;s<t;s+=1)n[s]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(let t of e.segs)n[t.row].segs.push(t)}else for(let e=0;e<t;e+=1)n[e]=null;return n}const o=n.createFormatter({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"});function d(e){let{display:t}=e.eventRange.ui;return"list-item"===t||"auto"===t&&!e.eventRange.def.allDay&&e.firstCol===e.lastCol&&e.isStart&&e.isEnd}class c extends n.BaseComponent{render(){let{props:e}=this;return s.createElement(n.StandardEvent,Object.assign({},e,{elClasses:["fc-daygrid-event","fc-daygrid-block-event","fc-h-event"],defaultTimeFormat:o,defaultDisplayEventEnd:e.defaultDisplayEventEnd,disableResizing:!e.seg.eventRange.def.allDay}))}}class g extends n.BaseComponent{render(){let{props:e,context:t}=this,{options:i}=t,{seg:r}=e,a=i.eventTimeFormat||o,l=n.buildSegTimeText(r,a,t,!0,e.defaultDisplayEventEnd);return s.createElement(n.EventContainer,Object.assign({},e,{elTag:"a",elClasses:["fc-daygrid-event","fc-daygrid-dot-event"],elAttrs:n.getSegAnchorAttrs(e.seg,t),defaultGenerator:f,timeText:l,isResizing:!1,isDateSelecting:!1}))}}function f(e){return s.createElement(s.Fragment,null,s.createElement("div",{className:"fc-daygrid-event-dot",style:{borderColor:e.borderColor||e.backgroundColor}}),e.timeText&&s.createElement("div",{className:"fc-event-time"},e.timeText),s.createElement("div",{className:"fc-event-title"},e.event.title||s.createElement(s.Fragment,null," ")))}class h extends n.BaseComponent{constructor(){super(...arguments),this.compileSegs=n.memoize(u)}render(){let{props:e}=this,{allSegs:t,invisibleSegs:i}=this.compileSegs(e.singlePlacements);return s.createElement(n.MoreLinkContainer,{elClasses:["fc-daygrid-more-link"],dateProfile:e.dateProfile,todayRange:e.todayRange,allDayDate:e.allDayDate,moreCnt:e.moreCnt,allSegs:t,hiddenSegs:i,alignmentElRef:e.alignmentElRef,alignGridTop:e.alignGridTop,extraDateSpan:e.extraDateSpan,popoverContent:()=>{let i=(e.eventDrag?e.eventDrag.affectedInstances:null)||(e.eventResize?e.eventResize.affectedInstances:null)||{};return s.createElement(s.Fragment,null,t.map(t=>{let r=t.eventRange.instance.instanceId;return s.createElement("div",{className:"fc-daygrid-event-harness",key:r,style:{visibility:i[r]?"hidden":""}},d(t)?s.createElement(g,Object.assign({seg:t,isDragging:!1,isSelected:r===e.eventSelection,defaultDisplayEventEnd:!1},n.getSegMeta(t,e.todayRange))):s.createElement(c,Object.assign({seg:t,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:r===e.eventSelection,defaultDisplayEventEnd:!1},n.getSegMeta(t,e.todayRange))))}))}})}}function u(e){let t=[],n=[];for(let s of e)t.push(s.seg),s.isVisible||n.push(s.seg);return{allSegs:t,invisibleSegs:n}}const p=n.createFormatter({week:"narrow"});class m extends n.DateComponent{constructor(){super(...arguments),this.rootElRef=s.createRef(),this.state={dayNumberId:n.getUniqueDomId()},this.handleRootEl=e=>{n.setRef(this.rootElRef,e),n.setRef(this.props.elRef,e)}}render(){let{context:e,props:t,state:i,rootElRef:r}=this,{options:a}=e,{date:l,dateProfile:o}=t;return s.createElement(n.DayCellContainer,{elTag:"td",elRef:this.handleRootEl,elClasses:["fc-daygrid-day",...t.extraClassNames||[]],elAttrs:Object.assign(Object.assign(Object.assign({},t.extraDataAttrs),t.showDayNumber?{"aria-labelledby":i.dayNumberId}:{}),{role:"gridcell"}),defaultGenerator:y,date:l,dateProfile:o,todayRange:t.todayRange,showDayNumber:t.showDayNumber,extraRenderProps:t.extraRenderProps},(o,d)=>s.createElement("div",{className:"fc-daygrid-day-frame fc-scrollgrid-sync-inner",ref:t.innerElRef},t.showWeekNumber&&s.createElement(n.WeekNumberContainer,{elTag:"a",elClasses:["fc-daygrid-week-number"],elAttrs:n.buildNavLinkAttrs(e,l,"week"),date:l,defaultFormat:p}),Boolean(!d.isDisabled&&(t.showDayNumber||n.hasCustomDayCellContent(a)||t.forceDayTop))&&s.createElement("div",{className:"fc-daygrid-day-top"},s.createElement(o,{elTag:"a",elClasses:["fc-daygrid-day-number"],elAttrs:Object.assign(Object.assign({},n.buildNavLinkAttrs(e,l)),{id:i.dayNumberId})})),s.createElement("div",{className:"fc-daygrid-day-events",ref:t.fgContentElRef},t.fgContent,s.createElement("div",{className:"fc-daygrid-day-bottom",style:{marginTop:t.moreMarginTop}},s.createElement(h,{allDayDate:l,singlePlacements:t.singlePlacements,moreCnt:t.moreCnt,alignmentElRef:r,alignGridTop:!t.showDayNumber,extraDateSpan:t.extraDateSpan,dateProfile:t.dateProfile,eventSelection:t.eventSelection,eventDrag:t.eventDrag,eventResize:t.eventResize,todayRange:t.todayRange}))),s.createElement("div",{className:"fc-daygrid-day-bg"},t.bgContent)))}}function y(e){return e.dayNumberText||s.createElement(s.Fragment,null," ")}function v(e,t,n,s,i,r,a){let l=new R;l.allowReslicing=!0,l.strictOrder=s,!0===t||!0===n?(l.maxCoord=r,l.hiddenConsumes=!0):"number"==typeof t?l.maxStackCnt=t:"number"==typeof n&&(l.maxStackCnt=n,l.hiddenConsumes=!0);let o=[],d=[];for(let t=0;t<e.length;t+=1){let n=e[t],{instanceId:s}=n.eventRange.instance,r=i[s];null!=r?o.push({index:t,thickness:r,span:{start:n.firstCol,end:n.lastCol+1}}):d.push(n)}let c=l.addSegs(o),g=l.toRects(),{singleColPlacements:f,multiColPlacements:h,leftoverMargins:u}=function(e,t,n){let s=function(e,t){let n=[];for(let e=0;e<t;e+=1)n.push([]);for(let t of e)for(let e=t.span.start;e<t.span.end;e+=1)n[e].push(t);return n}(e,n.length),i=[],r=[],a=[];for(let e=0;e<n.length;e+=1){let l=s[e],o=[],d=0,c=0;for(let s of l){let i=t[s.index];o.push({seg:b(i,e,e+1,n),isVisible:!0,isAbsolute:!1,absoluteTop:s.levelCoord,marginTop:s.levelCoord-d}),d=s.levelCoord+s.thickness}let g=[];d=0,c=0;for(let s of l){let i=t[s.index],r=s.span.end-s.span.start>1,a=s.span.start===e;c+=s.levelCoord-d,d=s.levelCoord+s.thickness,r?(c+=s.thickness,a&&g.push({seg:b(i,s.span.start,s.span.end,n),isVisible:!0,isAbsolute:!0,absoluteTop:s.levelCoord,marginTop:0})):a&&(g.push({seg:b(i,s.span.start,s.span.end,n),isVisible:!0,isAbsolute:!1,absoluteTop:s.levelCoord,marginTop:c}),c=0)}i.push(o),r.push(g),a.push(c)}return{singleColPlacements:i,multiColPlacements:r,leftoverMargins:a}}(g,e,a),p=[],m=[];for(let e of d){h[e.firstCol].push({seg:e,isVisible:!1,isAbsolute:!0,absoluteTop:0,marginTop:0});for(let t=e.firstCol;t<=e.lastCol;t+=1)f[t].push({seg:b(e,t,t+1,a),isVisible:!1,isAbsolute:!1,absoluteTop:0,marginTop:0})}for(let e=0;e<a.length;e+=1)p.push(0);for(let t of c){let n=e[t.index],s=t.span;h[s.start].push({seg:b(n,s.start,s.end,a),isVisible:!1,isAbsolute:!0,absoluteTop:0,marginTop:0});for(let e=s.start;e<s.end;e+=1)p[e]+=1,f[e].push({seg:b(n,e,e+1,a),isVisible:!1,isAbsolute:!1,absoluteTop:0,marginTop:0})}for(let e=0;e<a.length;e+=1)m.push(u[e]);return{singleColPlacements:f,multiColPlacements:h,moreCnts:p,moreMarginTops:m}}function b(e,t,s,i){if(e.firstCol===t&&e.lastCol===s-1)return e;let r=e.eventRange,a=r.range,l=n.intersectRanges(a,{start:i[t].date,end:n.addDays(i[s-1].date,1)});return Object.assign(Object.assign({},e),{firstCol:t,lastCol:s-1,eventRange:{def:r.def,ui:Object.assign(Object.assign({},r.ui),{durationEditable:!1}),instance:r.instance,range:l},isStart:e.isStart&&l.start.valueOf()===a.start.valueOf(),isEnd:e.isEnd&&l.end.valueOf()===a.end.valueOf()})}class R extends n.SegHierarchy{constructor(){super(...arguments),this.hiddenConsumes=!1,this.forceHidden={}}addSegs(e){const t=super.addSegs(e),{entriesByLevel:s}=this,i=e=>!this.forceHidden[n.buildEntryKey(e)];for(let e=0;e<s.length;e+=1)s[e]=s[e].filter(i);return t}handleInvalidInsertion(e,t,s){const{entriesByLevel:i,forceHidden:r}=this,{touchingEntry:a,touchingLevel:l,touchingLateral:o}=e;if(this.hiddenConsumes&&a){const e=n.buildEntryKey(a);if(!r[e])if(this.allowReslicing){const e=Object.assign(Object.assign({},a),{span:n.intersectSpans(a.span,t.span)});r[n.buildEntryKey(e)]=!0,i[l][o]=e,this.splitEntry(a,t,s)}else r[e]=!0,s.push(a)}return super.handleInvalidInsertion(e,t,s)}}class E extends n.DateComponent{constructor(){super(...arguments),this.cellElRefs=new n.RefMap,this.frameElRefs=new n.RefMap,this.fgElRefs=new n.RefMap,this.segHarnessRefs=new n.RefMap,this.rootElRef=s.createRef(),this.state={framePositions:null,maxContentHeight:null,eventInstanceHeights:{}},this.handleResize=e=>{e&&this.updateSizing(!0)}}render(){let{props:e,state:t,context:i}=this,{options:r}=i,l=e.cells.length,o=a(e.businessHourSegs,l),d=a(e.bgEventSegs,l),c=a(this.getHighlightSegs(),l),g=a(this.getMirrorSegs(),l),{singleColPlacements:f,multiColPlacements:h,moreCnts:u,moreMarginTops:p}=v(n.sortEventSegs(e.fgEventSegs,r.eventOrder),e.dayMaxEvents,e.dayMaxEventRows,r.eventOrderStrict,t.eventInstanceHeights,t.maxContentHeight,e.cells),y=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{};return s.createElement("tr",{ref:this.rootElRef,role:"row"},e.renderIntro&&e.renderIntro(),e.cells.map((t,n)=>{let i=this.renderFgSegs(n,e.forPrint?f[n]:h[n],e.todayRange,y),r=this.renderFgSegs(n,function(e,t){if(!e.length)return[];let n=function(e){let t={};for(let n of e)for(let e of n)t[e.seg.eventRange.instance.instanceId]=e.absoluteTop;return t}(t);return e.map(e=>({seg:e,isVisible:!0,isAbsolute:!0,absoluteTop:n[e.eventRange.instance.instanceId],marginTop:0}))}(g[n],h),e.todayRange,{},Boolean(e.eventDrag),Boolean(e.eventResize),!1);return s.createElement(m,{key:t.key,elRef:this.cellElRefs.createRef(t.key),innerElRef:this.frameElRefs.createRef(t.key),dateProfile:e.dateProfile,date:t.date,showDayNumber:e.showDayNumbers,showWeekNumber:e.showWeekNumbers&&0===n,forceDayTop:e.showWeekNumbers,todayRange:e.todayRange,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,extraRenderProps:t.extraRenderProps,extraDataAttrs:t.extraDataAttrs,extraClassNames:t.extraClassNames,extraDateSpan:t.extraDateSpan,moreCnt:u[n],moreMarginTop:p[n],singlePlacements:f[n],fgContentElRef:this.fgElRefs.createRef(t.key),fgContent:s.createElement(s.Fragment,null,s.createElement(s.Fragment,null,i),s.createElement(s.Fragment,null,r)),bgContent:s.createElement(s.Fragment,null,this.renderFillSegs(c[n],"highlight"),this.renderFillSegs(o[n],"non-business"),this.renderFillSegs(d[n],"bg-event"))})}))}componentDidMount(){this.updateSizing(!0),this.context.addResizeHandler(this.handleResize)}componentDidUpdate(e,t){let s=this.props;this.updateSizing(!n.isPropsEqual(e,s))}componentWillUnmount(){this.context.removeResizeHandler(this.handleResize)}getHighlightSegs(){let{props:e}=this;return e.eventDrag&&e.eventDrag.segs.length?e.eventDrag.segs:e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:e.dateSelectionSegs}getMirrorSegs(){let{props:e}=this;return e.eventResize&&e.eventResize.segs.length?e.eventResize.segs:[]}renderFgSegs(e,t,i,r,a,l,o){let{context:f}=this,{eventSelection:h}=this.props,{framePositions:u}=this.state,p=1===this.props.cells.length,m=a||l||o,y=[];if(u)for(let v of t){let{seg:t}=v,{instanceId:b}=t.eventRange.instance,R=b+":"+e,E=v.isVisible&&!r[b],S=v.isAbsolute,x="",C="";S&&(f.isRtl?(C=0,x=u.lefts[t.lastCol]-u.lefts[t.firstCol]):(x=0,C=u.rights[t.firstCol]-u.rights[t.lastCol])),y.push(s.createElement("div",{className:"fc-daygrid-event-harness"+(S?" fc-daygrid-event-harness-abs":""),key:R,ref:m?null:this.segHarnessRefs.createRef(R),style:{visibility:E?"":"hidden",marginTop:S?"":v.marginTop,top:S?v.absoluteTop:"",left:x,right:C}},d(t)?s.createElement(g,Object.assign({seg:t,isDragging:a,isSelected:b===h,defaultDisplayEventEnd:p},n.getSegMeta(t,i))):s.createElement(c,Object.assign({seg:t,isDragging:a,isResizing:l,isDateSelecting:o,isSelected:b===h,defaultDisplayEventEnd:p},n.getSegMeta(t,i)))))}return y}renderFillSegs(e,t){let{isRtl:i}=this.context,{todayRange:r}=this.props,{framePositions:a}=this.state,l=[];if(a)for(let o of e){let e=i?{right:0,left:a.lefts[o.lastCol]-a.lefts[o.firstCol]}:{left:0,right:a.rights[o.firstCol]-a.rights[o.lastCol]};l.push(s.createElement("div",{key:n.buildEventRangeKey(o.eventRange),className:"fc-daygrid-bg-harness",style:e},"bg-event"===t?s.createElement(n.BgEvent,Object.assign({seg:o},n.getSegMeta(o,r))):n.renderFill(t)))}return s.createElement(s.Fragment,{},...l)}updateSizing(e){let{props:t,state:s,frameElRefs:i}=this;if(!t.forPrint&&null!==t.clientWidth){if(e){let e=t.cells.map(e=>i.currentMap[e.key]);if(e.length){let t=this.rootElRef.current,i=new n.PositionCache(t,e,!0,!1);s.framePositions&&s.framePositions.similarTo(i)||this.setState({framePositions:new n.PositionCache(t,e,!0,!1)})}}const r=this.state.eventInstanceHeights,a=this.queryEventInstanceHeights(),l=!0===t.dayMaxEvents||!0===t.dayMaxEventRows;this.safeSetState({eventInstanceHeights:Object.assign(Object.assign({},r),a),maxContentHeight:l?this.computeMaxContentHeight():null})}}queryEventInstanceHeights(){let e=this.segHarnessRefs.currentMap,t={};for(let n in e){let s=Math.round(e[n].getBoundingClientRect().height),i=n.split(":")[0];t[i]=Math.max(t[i]||0,s)}return t}computeMaxContentHeight(){let e=this.props.cells[0].key,t=this.cellElRefs.currentMap[e],n=this.fgElRefs.currentMap[e];return t.getBoundingClientRect().bottom-n.getBoundingClientRect().top}getCellEls(){let e=this.cellElRefs.currentMap;return this.props.cells.map(t=>e[t.key])}}E.addStateEquality({eventInstanceHeights:n.isPropsEqual});class S extends n.DateComponent{constructor(){super(...arguments),this.splitBusinessHourSegs=n.memoize(r),this.splitBgEventSegs=n.memoize(r),this.splitFgEventSegs=n.memoize(r),this.splitDateSelectionSegs=n.memoize(r),this.splitEventDrag=n.memoize(l),this.splitEventResize=n.memoize(l),this.rowRefs=new n.RefMap,this.handleRootEl=e=>{this.rootEl=e,e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e}=this,{dateProfile:t,dayMaxEventRows:i,dayMaxEvents:r,expandRows:a}=e,l=e.cells.length,o=this.splitBusinessHourSegs(e.businessHourSegs,l),d=this.splitBgEventSegs(e.bgEventSegs,l),c=this.splitFgEventSegs(e.fgEventSegs,l),g=this.splitDateSelectionSegs(e.dateSelectionSegs,l),f=this.splitEventDrag(e.eventDrag,l),h=this.splitEventResize(e.eventResize,l),u=!0===r||!0===i;u&&!a&&(u=!1,i=null,r=null);let p=["fc-daygrid-body",u?"fc-daygrid-body-balanced":"fc-daygrid-body-unbalanced",a?"":"fc-daygrid-body-natural"];return s.createElement("div",{className:p.join(" "),ref:this.handleRootEl,style:{width:e.clientWidth,minWidth:e.tableMinWidth}},s.createElement(n.NowTimer,{unit:"day"},(n,u)=>s.createElement(s.Fragment,null,s.createElement("table",{role:"presentation",className:"fc-scrollgrid-sync-table",style:{width:e.clientWidth,minWidth:e.tableMinWidth,height:a?e.clientHeight:""}},e.colGroupNode,s.createElement("tbody",{role:"presentation"},e.cells.map((n,a)=>s.createElement(E,{ref:this.rowRefs.createRef(a),key:n.length?n[0].date.toISOString():a,showDayNumbers:l>1,showWeekNumbers:e.showWeekNumbers,todayRange:u,dateProfile:t,cells:n,renderIntro:e.renderRowIntro,businessHourSegs:o[a],eventSelection:e.eventSelection,bgEventSegs:d[a].filter(x),fgEventSegs:c[a],dateSelectionSegs:g[a],eventDrag:f[a],eventResize:h[a],dayMaxEvents:r,dayMaxEventRows:i,clientWidth:e.clientWidth,clientHeight:e.clientHeight,forPrint:e.forPrint})))))))}prepareHits(){this.rowPositions=new n.PositionCache(this.rootEl,this.rowRefs.collect().map(e=>e.getCellEls()[0]),!1,!0),this.colPositions=new n.PositionCache(this.rootEl,this.rowRefs.currentMap[0].getCellEls(),!0,!1)}queryHit(e,t){let{colPositions:n,rowPositions:s}=this,i=n.leftToIndex(e),r=s.topToIndex(t);if(null!=r&&null!=i){let e=this.props.cells[r][i];return{dateProfile:this.props.dateProfile,dateSpan:Object.assign({range:this.getCellRange(r,i),allDay:!0},e.extraDateSpan),dayEl:this.getCellEl(r,i),rect:{left:n.lefts[i],right:n.rights[i],top:s.tops[r],bottom:s.bottoms[r]},layer:0}}return null}getCellEl(e,t){return this.rowRefs.currentMap[e].getCellEls()[t]}getCellRange(e,t){let s=this.props.cells[e][t].date;return{start:s,end:n.addDays(s,1)}}}function x(e){return e.eventRange.def.allDay}class C extends n.Slicer{constructor(){super(...arguments),this.forceDayIfListItem=!0}sliceRange(e,t){return t.sliceRange(e)}}class w extends n.DateComponent{constructor(){super(...arguments),this.slicer=new C,this.tableRef=s.createRef()}render(){let{props:e,context:t}=this;return s.createElement(S,Object.assign({ref:this.tableRef},this.slicer.sliceProps(e,e.dateProfile,e.nextDayThreshold,t,e.dayTableModel),{dateProfile:e.dateProfile,cells:e.dayTableModel.cells,colGroupNode:e.colGroupNode,tableMinWidth:e.tableMinWidth,renderRowIntro:e.renderRowIntro,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.showWeekNumbers,expandRows:e.expandRows,headerAlignElRef:e.headerAlignElRef,clientWidth:e.clientWidth,clientHeight:e.clientHeight,forPrint:e.forPrint}))}}class D extends i{constructor(){super(...arguments),this.buildDayTableModel=n.memoize(k),this.headerRef=s.createRef(),this.tableRef=s.createRef()}render(){let{options:e,dateProfileGenerator:t}=this.context,{props:i}=this,r=this.buildDayTableModel(i.dateProfile,t),a=e.dayHeaders&&s.createElement(n.DayHeader,{ref:this.headerRef,dateProfile:i.dateProfile,dates:r.headerDates,datesRepDistinctDays:1===r.rowCnt}),l=t=>s.createElement(w,{ref:this.tableRef,dateProfile:i.dateProfile,dayTableModel:r,businessHours:i.businessHours,dateSelection:i.dateSelection,eventStore:i.eventStore,eventUiBases:i.eventUiBases,eventSelection:i.eventSelection,eventDrag:i.eventDrag,eventResize:i.eventResize,nextDayThreshold:e.nextDayThreshold,colGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.weekNumbers,expandRows:!i.isHeightAuto,headerAlignElRef:this.headerElRef,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:i.forPrint});return e.dayMinWidth?this.renderHScrollLayout(a,l,r.colCnt,e.dayMinWidth):this.renderSimpleLayout(a,l)}}function k(e,t){let s=new n.DaySeriesModel(e.renderRange,t);return new n.DayTableModel(s,/year|month|week/.test(e.currentRangeUnit))}class P extends n.DateProfileGenerator{buildRenderRange(e,t,s){let i,{dateEnv:r}=this.props,a=super.buildRenderRange(e,t,s),l=a.start,o=a.end;if(/^(year|month)$/.test(t)&&(l=r.startOfWeek(l),i=r.startOfWeek(o),i.valueOf()!==o.valueOf()&&(o=n.addWeeks(i,1))),this.props.monthMode&&this.props.fixedWeekCount){let e=Math.ceil(n.diffWeeks(l,o));o=n.addWeeks(o,6-e)}return{start:l,end:o}}}n.injectStyles(':root{--fc-daygrid-event-dot-width:8px}.fc-daygrid-day-events:after,.fc-daygrid-day-events:before,.fc-daygrid-day-frame:after,.fc-daygrid-day-frame:before,.fc-daygrid-event-harness:after,.fc-daygrid-event-harness:before{clear:both;content:"";display:table}.fc .fc-daygrid-body{position:relative;z-index:1}.fc .fc-daygrid-day.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-daygrid-day-frame{min-height:100%;position:relative}.fc .fc-daygrid-day-top{display:flex;flex-direction:row-reverse}.fc .fc-day-other .fc-daygrid-day-top{opacity:.3}.fc .fc-daygrid-day-number{padding:4px;position:relative;z-index:4}.fc .fc-daygrid-day-events{margin-top:1px}.fc .fc-daygrid-body-balanced .fc-daygrid-day-events{left:0;position:absolute;right:0}.fc .fc-daygrid-body-unbalanced .fc-daygrid-day-events{min-height:2em;position:relative}.fc .fc-daygrid-body-natural .fc-daygrid-day-events{margin-bottom:1em}.fc .fc-daygrid-event-harness{position:relative}.fc .fc-daygrid-event-harness-abs{left:0;position:absolute;right:0;top:0}.fc .fc-daygrid-bg-harness{bottom:0;position:absolute;top:0}.fc .fc-daygrid-day-bg .fc-non-business{z-index:1}.fc .fc-daygrid-day-bg .fc-bg-event{z-index:2}.fc .fc-daygrid-day-bg .fc-highlight{z-index:3}.fc .fc-daygrid-event{margin-top:1px;z-index:6}.fc .fc-daygrid-event.fc-event-mirror{z-index:7}.fc .fc-daygrid-day-bottom{font-size:.85em;padding:2px 3px 0}.fc .fc-daygrid-day-bottom:before{clear:both;content:"";display:table}.fc .fc-daygrid-more-link{cursor:pointer;position:relative;z-index:4}.fc .fc-daygrid-week-number{background-color:var(--fc-neutral-bg-color);color:var(--fc-neutral-text-color);min-width:1.5em;padding:2px;position:absolute;text-align:center;top:0;z-index:5}.fc .fc-more-popover .fc-popover-body{min-width:220px;padding:10px}.fc-direction-ltr .fc-daygrid-event.fc-event-start,.fc-direction-rtl .fc-daygrid-event.fc-event-end{margin-left:2px}.fc-direction-ltr .fc-daygrid-event.fc-event-end,.fc-direction-rtl .fc-daygrid-event.fc-event-start{margin-right:2px}.fc-direction-ltr .fc-daygrid-week-number{border-radius:0 0 3px 0;left:0}.fc-direction-rtl .fc-daygrid-week-number{border-radius:0 0 0 3px;right:0}.fc-liquid-hack .fc-daygrid-day-frame{position:static}.fc-daygrid-event{border-radius:3px;font-size:var(--fc-small-font-size);position:relative;white-space:nowrap}.fc-daygrid-block-event .fc-event-time{font-weight:700}.fc-daygrid-block-event .fc-event-time,.fc-daygrid-block-event .fc-event-title{padding:1px}.fc-daygrid-dot-event{align-items:center;display:flex;padding:2px 0}.fc-daygrid-dot-event .fc-event-title{flex-grow:1;flex-shrink:1;font-weight:700;min-width:0;overflow:hidden}.fc-daygrid-dot-event.fc-event-mirror,.fc-daygrid-dot-event:hover{background:rgba(0,0,0,.1)}.fc-daygrid-dot-event.fc-event-selected:before{bottom:-10px;top:-10px}.fc-daygrid-event-dot{border:calc(var(--fc-daygrid-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-daygrid-event-dot-width)/2);box-sizing:content-box;height:0;margin:0 4px;width:0}.fc-direction-ltr .fc-daygrid-event .fc-event-time{margin-right:3px}.fc-direction-rtl .fc-daygrid-event .fc-event-time{margin-left:3px}');var M=t.createPlugin({name:"@fullcalendar/daygrid",initialView:"dayGridMonth",views:{dayGrid:{component:D,dateProfileGeneratorClass:P},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},monthMode:!0,fixedWeekCount:!0}}}),T={__proto__:null,DayTable:w,DayTableSlicer:C,Table:S,TableView:i,buildDayTableModel:k,DayGridView:D};return t.globalPlugins.push(M),e.Internal=T,e.default=M,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,FullCalendar.Preact); \ No newline at end of file
diff --git a/library/fullcalendar/packages/daygrid/main.css b/library/fullcalendar/packages/daygrid/main.css
deleted file mode 100644
index 81f589554..000000000
--- a/library/fullcalendar/packages/daygrid/main.css
+++ /dev/null
@@ -1,78 +0,0 @@
-/* DayGridView
---------------------------------------------------------------------------------------------------*/
-/* day row structure */
-.fc-dayGridWeek-view .fc-content-skeleton,
-.fc-dayGridDay-view .fc-content-skeleton {
- /* there may be week numbers in these views, so no padding-top */
- padding-bottom: 1em;
- /* ensure a space at bottom of cell for user selecting/clicking */
-}
-
-.fc-dayGrid-view .fc-body .fc-row {
- min-height: 4em;
- /* ensure that all rows are at least this tall */
-}
-
-/* a "rigid" row will take up a constant amount of height because content-skeleton is absolute */
-.fc-row.fc-rigid {
- overflow: hidden;
-}
-
-.fc-row.fc-rigid .fc-content-skeleton {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
-}
-
-/* week and day number styling */
-.fc-day-top.fc-other-month {
- opacity: 0.3;
-}
-
-.fc-dayGrid-view .fc-week-number,
-.fc-dayGrid-view .fc-day-number {
- padding: 2px;
-}
-
-.fc-dayGrid-view th.fc-week-number,
-.fc-dayGrid-view th.fc-day-number {
- padding: 0 2px;
- /* column headers can't have as much v space */
-}
-
-.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number {
- float: right;
-}
-
-.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number {
- float: left;
-}
-
-.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number {
- float: left;
- border-radius: 0 0 3px 0;
-}
-
-.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number {
- float: right;
- border-radius: 0 0 0 3px;
-}
-
-.fc-dayGrid-view .fc-day-top .fc-week-number {
- min-width: 1.5em;
- text-align: center;
- background-color: #f2f2f2;
- color: #808080;
-}
-
-/* when week/day number have own column */
-.fc-dayGrid-view td.fc-week-number {
- text-align: center;
-}
-
-.fc-dayGrid-view td.fc-week-number > * {
- /* work around the way we do column resizing and ensure a minimum width */
- display: inline-block;
- min-width: 1.25em;
-}
diff --git a/library/fullcalendar/packages/daygrid/main.d.ts b/library/fullcalendar/packages/daygrid/main.d.ts
deleted file mode 100644
index 312ddd97b..000000000
--- a/library/fullcalendar/packages/daygrid/main.d.ts
+++ /dev/null
@@ -1,316 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../@fullcalendar/core
-
-declare module '@fullcalendar/daygrid' {
- export { default as SimpleDayGrid, DayGridSlicer } from '@fullcalendar/daygrid/SimpleDayGrid';
- export { default as DayGrid, DayGridSeg } from '@fullcalendar/daygrid/DayGrid';
- export { default as AbstractDayGridView } from '@fullcalendar/daygrid/AbstractDayGridView';
- export { default as DayGridView, buildDayTable as buildBasicDayTable } from '@fullcalendar/daygrid/DayGridView';
- export { default as DayBgRow } from '@fullcalendar/daygrid/DayBgRow';
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
-}
-
-declare module '@fullcalendar/daygrid/SimpleDayGrid' {
- import { DateProfile, EventStore, EventUiHash, DateSpan, EventInteractionState, DayTable, Duration, DateComponent, DateRange, Slicer, Hit, ComponentContext } from '@fullcalendar/core';
- import { default as DayGrid, DayGridSeg } from '@fullcalendar/daygrid/DayGrid';
- export interface SimpleDayGridProps {
- dateProfile: DateProfile | null;
- dayTable: DayTable;
- nextDayThreshold: Duration;
- businessHours: EventStore;
- eventStore: EventStore;
- eventUiBases: EventUiHash;
- dateSelection: DateSpan | null;
- eventSelection: string;
- eventDrag: EventInteractionState | null;
- eventResize: EventInteractionState | null;
- isRigid: boolean;
- }
- export { SimpleDayGrid as default, SimpleDayGrid };
- class SimpleDayGrid extends DateComponent<SimpleDayGridProps> {
- dayGrid: DayGrid;
- constructor(dayGrid: DayGrid);
- firstContext(context: ComponentContext): void;
- destroy(): void;
- render(props: SimpleDayGridProps, context: ComponentContext): void;
- buildPositionCaches(): void;
- queryHit(positionLeft: number, positionTop: number): Hit;
- }
- export class DayGridSlicer extends Slicer<DayGridSeg, [DayTable]> {
- sliceRange(dateRange: DateRange, dayTable: DayTable): DayGridSeg[];
- }
-}
-
-declare module '@fullcalendar/daygrid/DayGrid' {
- import { PositionCache, DateMarker, DateComponent, EventSegUiInteractionState, Seg, DateProfile, ComponentContext } from '@fullcalendar/core';
- import Popover from '@fullcalendar/daygrid/Popover';
- import DayGridEventRenderer from '@fullcalendar/daygrid/DayGridEventRenderer';
- import DayTile from '@fullcalendar/daygrid/DayTile';
- export interface RenderProps {
- renderNumberIntroHtml: (row: number, dayGrid: DayGrid) => string;
- renderBgIntroHtml: () => string;
- renderIntroHtml: () => string;
- colWeekNumbersVisible: boolean;
- cellWeekNumbersVisible: boolean;
- }
- export interface DayGridSeg extends Seg {
- row: number;
- firstCol: number;
- lastCol: number;
- }
- export interface DayGridCell {
- date: DateMarker;
- htmlAttrs?: string;
- }
- export interface DayGridProps {
- dateProfile: DateProfile;
- cells: DayGridCell[][];
- businessHourSegs: DayGridSeg[];
- bgEventSegs: DayGridSeg[];
- fgEventSegs: DayGridSeg[];
- dateSelectionSegs: DayGridSeg[];
- eventSelection: string;
- eventDrag: EventSegUiInteractionState | null;
- eventResize: EventSegUiInteractionState | null;
- isRigid: boolean;
- }
- export { DayGrid as default, DayGrid };
- class DayGrid extends DateComponent<DayGridProps> {
- eventRenderer: DayGridEventRenderer;
- renderProps: RenderProps;
- rowCnt: number;
- colCnt: number;
- bottomCoordPadding: number;
- rowEls: HTMLElement[];
- cellEls: HTMLElement[];
- isCellSizesDirty: boolean;
- rowPositions: PositionCache;
- colPositions: PositionCache;
- segPopover: Popover;
- segPopoverTile: DayTile;
- constructor(el: any, renderProps: RenderProps);
- render(props: DayGridProps, context: ComponentContext): void;
- destroy(): void;
- getCellRange(row: any, col: any): {
- start: Date;
- end: Date;
- };
- updateSegPopoverTile(date?: any, segs?: any): void;
- _renderCells(cells: DayGridCell[][], isRigid: boolean): void;
- _unrenderCells(): void;
- renderDayRowHtml(row: any, isRigid: any): string;
- getIsNumbersVisible(): boolean;
- getIsDayNumbersVisible(): boolean;
- renderNumberTrHtml(row: number): string;
- renderNumberCellsHtml(row: any): string;
- renderNumberCellHtml(date: any): string;
- updateSize(isResize: boolean): void;
- buildPositionCaches(): void;
- buildColPositions(): void;
- buildRowPositions(): void;
- positionToHit(leftPosition: any, topPosition: any): {
- row: any;
- col: any;
- dateSpan: {
- range: {
- start: Date;
- end: Date;
- };
- allDay: boolean;
- };
- dayEl: HTMLElement;
- relativeRect: {
- left: any;
- right: any;
- top: any;
- bottom: any;
- };
- };
- getCellEl(row: any, col: any): HTMLElement;
- _renderEventDrag(state: EventSegUiInteractionState): void;
- _unrenderEventDrag(state: EventSegUiInteractionState): void;
- _renderEventResize(state: EventSegUiInteractionState): void;
- _unrenderEventResize(state: EventSegUiInteractionState): void;
- removeSegPopover(): void;
- limitRows(levelLimit: any): void;
- computeRowLevelLimit(row: any): (number | false);
- limitRow(row: any, levelLimit: any): void;
- unlimitRow(row: any): void;
- renderMoreLink(row: any, col: any, hiddenSegs: any): HTMLElement;
- showSegPopover(row: any, col: any, moreLink: HTMLElement, segs: any): void;
- resliceDaySegs(segs: any, dayDate: any): any[];
- getMoreLinkText(num: any): any;
- getCellSegs(row: any, col: any, startLevel?: any): any[];
- }
-}
-
-declare module '@fullcalendar/daygrid/AbstractDayGridView' {
- import { ScrollComponent, View, Duration, ComponentContext, ViewProps } from '@fullcalendar/core';
- import DayGrid from '@fullcalendar/daygrid/DayGrid';
- export { AbstractDayGridView as default, AbstractDayGridView };
- abstract class AbstractDayGridView extends View {
- scroller: ScrollComponent;
- dayGrid: DayGrid;
- colWeekNumbersVisible: boolean;
- cellWeekNumbersVisible: boolean;
- weekNumberWidth: number;
- _processOptions(options: any): void;
- render(props: ViewProps, context: ComponentContext): void;
- destroy(): void;
- _renderSkeleton(context: ComponentContext): void;
- _unrenderSkeleton(): void;
- renderSkeletonHtml(): string;
- weekNumberStyleAttr(): string;
- hasRigidRows(): boolean;
- updateSize(isResize: boolean, viewHeight: number, isAuto: boolean): void;
- updateBaseSize(isResize: boolean, viewHeight: number, isAuto: boolean): void;
- computeScrollerHeight(viewHeight: any): number;
- setGridHeight(height: any, isAuto: any): void;
- computeDateScroll(duration: Duration): {
- top: number;
- };
- queryDateScroll(): {
- top: number;
- };
- applyDateScroll(scroll: any): void;
- renderHeadIntroHtml: () => string;
- renderDayGridNumberIntroHtml: (row: number, dayGrid: DayGrid) => string;
- renderDayGridBgIntroHtml: () => string;
- renderDayGridIntroHtml: () => string;
- }
-}
-
-declare module '@fullcalendar/daygrid/DayGridView' {
- import { DayHeader, ComponentContext, DateProfileGenerator, DateProfile, ViewProps, DayTable } from '@fullcalendar/core';
- import AbstractDayGridView from '@fullcalendar/daygrid/AbstractDayGridView';
- import SimpleDayGrid from '@fullcalendar/daygrid/SimpleDayGrid';
- export { DayGridView as default, DayGridView };
- class DayGridView extends AbstractDayGridView {
- header: DayHeader;
- simpleDayGrid: SimpleDayGrid;
- dayTable: DayTable;
- render(props: ViewProps, context: ComponentContext): void;
- _renderSkeleton(context: ComponentContext): void;
- _unrenderSkeleton(): void;
- }
- export function buildDayTable(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): DayTable;
-}
-
-declare module '@fullcalendar/daygrid/DayBgRow' {
- import { ComponentContext, DateMarker, DateProfile } from '@fullcalendar/core';
- export interface DayBgCell {
- date: DateMarker;
- htmlAttrs?: string;
- }
- export interface DayBgRowProps {
- cells: DayBgCell[];
- dateProfile: DateProfile;
- renderIntroHtml?: () => string;
- }
- export { DayBgRow as default, DayBgRow };
- class DayBgRow {
- context: ComponentContext;
- constructor(context: ComponentContext);
- renderHtml(props: DayBgRowProps): string;
- }
-}
-
-declare module '@fullcalendar/daygrid/Popover' {
- export interface PopoverOptions {
- className?: string;
- content?: (el: HTMLElement) => void;
- parentEl: HTMLElement;
- autoHide?: boolean;
- top?: number;
- left?: number;
- right?: number;
- viewportConstrain?: boolean;
- }
- export { Popover as default, Popover };
- class Popover {
- isHidden: boolean;
- options: PopoverOptions;
- el: HTMLElement;
- margin: number;
- constructor(options: PopoverOptions);
- show(): void;
- hide(): void;
- render(): void;
- documentMousedown: (ev: any) => void;
- destroy(): void;
- position(): void;
- trigger(name: any): void;
- }
-}
-
-declare module '@fullcalendar/daygrid/DayGridEventRenderer' {
- import { Seg } from '@fullcalendar/core';
- import DayGrid from '@fullcalendar/daygrid/DayGrid';
- import SimpleDayGridEventRenderer from '@fullcalendar/daygrid/SimpleDayGridEventRenderer';
- export { DayGridEventRenderer as default, DayGridEventRenderer };
- class DayGridEventRenderer extends SimpleDayGridEventRenderer {
- dayGrid: DayGrid;
- rowStructs: any;
- constructor(dayGrid: DayGrid);
- attachSegs(segs: Seg[], mirrorInfo: any): void;
- detachSegs(): void;
- renderSegRows(segs: Seg[]): any[];
- renderSegRow(row: any, rowSegs: any): {
- row: any;
- tbodyEl: HTMLTableSectionElement;
- cellMatrix: any[];
- segMatrix: any[];
- segLevels: any[];
- segs: any;
- };
- buildSegLevels(segs: Seg[]): any[];
- groupSegRows(segs: Seg[]): any[];
- computeDisplayEventEnd(): boolean;
- }
-}
-
-declare module '@fullcalendar/daygrid/DayTile' {
- import { DateComponent, Seg, Hit, DateMarker, ComponentContext, EventInstanceHash } from '@fullcalendar/core';
- import SimpleDayGridEventRenderer from '@fullcalendar/daygrid/SimpleDayGridEventRenderer';
- export interface DayTileProps {
- date: DateMarker;
- fgSegs: Seg[];
- eventSelection: string;
- eventDragInstances: EventInstanceHash;
- eventResizeInstances: EventInstanceHash;
- }
- export { DayTile as default, DayTile };
- class DayTile extends DateComponent<DayTileProps> {
- segContainerEl: HTMLElement;
- constructor(el: HTMLElement);
- firstContext(context: ComponentContext): void;
- render(props: DayTileProps, context: ComponentContext): void;
- destroy(): void;
- _renderFrame(date: DateMarker): void;
- queryHit(positionLeft: number, positionTop: number, elWidth: number, elHeight: number): Hit | null;
- }
- export class DayTileEventRenderer extends SimpleDayGridEventRenderer {
- dayTile: DayTile;
- constructor(dayTile: any);
- attachSegs(segs: Seg[]): void;
- detachSegs(segs: Seg[]): void;
- }
-}
-
-declare module '@fullcalendar/daygrid/SimpleDayGridEventRenderer' {
- import { FgEventRenderer, Seg } from '@fullcalendar/core';
- export { SimpleDayGridEventRenderer as default, SimpleDayGridEventRenderer };
- abstract class SimpleDayGridEventRenderer extends FgEventRenderer {
- renderSegHtml(seg: Seg, mirrorInfo: any): string;
- computeEventTimeFormat(): {
- hour: string;
- minute: string;
- omitZeroMinute: boolean;
- meridiem: string;
- };
- computeDisplayEventEnd(): boolean;
- }
-}
-
diff --git a/library/fullcalendar/packages/daygrid/main.esm.js b/library/fullcalendar/packages/daygrid/main.esm.js
deleted file mode 100644
index 5d33b7cfb..000000000
--- a/library/fullcalendar/packages/daygrid/main.esm.js
+++ /dev/null
@@ -1,1655 +0,0 @@
-/*!
-FullCalendar Day Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { addWeeks, diffWeeks, DateProfileGenerator, createElement, listenBySelector, removeElement, computeRect, computeClippingRect, applyStyle, computeEventDraggable, computeEventStartResizable, computeEventEndResizable, cssToStr, htmlEscape, FgEventRenderer, appendToElement, prependToElement, htmlToElement, FillRenderer, memoizeRendering, createFormatter, addDays, DateComponent, rangeContainsMarker, getDayClasses, findElements, PositionCache, buildGotoAnchorHtml, findChildren, insertAfterElement, intersectRanges, memoize, ScrollComponent, matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight, distributeHeight, undistributeHeight, View, Slicer, DayHeader, DaySeries, DayTable, createPlugin } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
-};
-
-var DayGridDateProfileGenerator = /** @class */ (function (_super) {
- __extends(DayGridDateProfileGenerator, _super);
- function DayGridDateProfileGenerator() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Computes the date range that will be rendered.
- DayGridDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
- var dateEnv = this.dateEnv;
- var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay);
- var start = renderRange.start;
- var end = renderRange.end;
- var endOfWeek;
- // year and month views should be aligned with weeks. this is already done for week
- if (/^(year|month)$/.test(currentRangeUnit)) {
- start = dateEnv.startOfWeek(start);
- // make end-of-week if not already
- endOfWeek = dateEnv.startOfWeek(end);
- if (endOfWeek.valueOf() !== end.valueOf()) {
- end = addWeeks(endOfWeek, 1);
- }
- }
- // ensure 6 weeks
- if (this.options.monthMode &&
- this.options.fixedWeekCount) {
- var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
- diffWeeks(start, end));
- end = addWeeks(end, 6 - rowCnt);
- }
- return { start: start, end: end };
- };
- return DayGridDateProfileGenerator;
-}(DateProfileGenerator));
-
-/* A rectangular panel that is absolutely positioned over other content
-------------------------------------------------------------------------------------------------------------------------
-Options:
- - className (string)
- - content (HTML string, element, or element array)
- - parentEl
- - top
- - left
- - right (the x coord of where the right edge should be. not a "CSS" right)
- - autoHide (boolean)
- - show (callback)
- - hide (callback)
-*/
-var Popover = /** @class */ (function () {
- function Popover(options) {
- var _this = this;
- this.isHidden = true;
- this.margin = 10; // the space required between the popover and the edges of the scroll container
- // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
- this.documentMousedown = function (ev) {
- // only hide the popover if the click happened outside the popover
- if (_this.el && !_this.el.contains(ev.target)) {
- _this.hide();
- }
- };
- this.options = options;
- }
- // Shows the popover on the specified position. Renders it if not already
- Popover.prototype.show = function () {
- if (this.isHidden) {
- if (!this.el) {
- this.render();
- }
- this.el.style.display = '';
- this.position();
- this.isHidden = false;
- this.trigger('show');
- }
- };
- // Hides the popover, through CSS, but does not remove it from the DOM
- Popover.prototype.hide = function () {
- if (!this.isHidden) {
- this.el.style.display = 'none';
- this.isHidden = true;
- this.trigger('hide');
- }
- };
- // Creates `this.el` and renders content inside of it
- Popover.prototype.render = function () {
- var _this = this;
- var options = this.options;
- var el = this.el = createElement('div', {
- className: 'fc-popover ' + (options.className || ''),
- style: {
- top: '0',
- left: '0'
- }
- });
- if (typeof options.content === 'function') {
- options.content(el);
- }
- options.parentEl.appendChild(el);
- // when a click happens on anything inside with a 'fc-close' className, hide the popover
- listenBySelector(el, 'click', '.fc-close', function (ev) {
- _this.hide();
- });
- if (options.autoHide) {
- document.addEventListener('mousedown', this.documentMousedown);
- }
- };
- // Hides and unregisters any handlers
- Popover.prototype.destroy = function () {
- this.hide();
- if (this.el) {
- removeElement(this.el);
- this.el = null;
- }
- document.removeEventListener('mousedown', this.documentMousedown);
- };
- // Positions the popover optimally, using the top/left/right options
- Popover.prototype.position = function () {
- var options = this.options;
- var el = this.el;
- var elDims = el.getBoundingClientRect(); // only used for width,height
- var origin = computeRect(el.offsetParent);
- var clippingRect = computeClippingRect(options.parentEl);
- var top; // the "position" (not "offset") values for the popover
- var left; //
- // compute top and left
- top = options.top || 0;
- if (options.left !== undefined) {
- left = options.left;
- }
- else if (options.right !== undefined) {
- left = options.right - elDims.width; // derive the left value from the right value
- }
- else {
- left = 0;
- }
- // constrain to the view port. if constrained by two edges, give precedence to top/left
- top = Math.min(top, clippingRect.bottom - elDims.height - this.margin);
- top = Math.max(top, clippingRect.top + this.margin);
- left = Math.min(left, clippingRect.right - elDims.width - this.margin);
- left = Math.max(left, clippingRect.left + this.margin);
- applyStyle(el, {
- top: top - origin.top,
- left: left - origin.left
- });
- };
- // Triggers a callback. Calls a function in the option hash of the same name.
- // Arguments beyond the first `name` are forwarded on.
- // TODO: better code reuse for this. Repeat code
- // can kill this???
- Popover.prototype.trigger = function (name) {
- if (this.options[name]) {
- this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));
- }
- };
- return Popover;
-}());
-
-/* Event-rendering methods for the DayGrid class
-----------------------------------------------------------------------------------------------------------------------*/
-// "Simple" is bad a name. has nothing to do with SimpleDayGrid
-var SimpleDayGridEventRenderer = /** @class */ (function (_super) {
- __extends(SimpleDayGridEventRenderer, _super);
- function SimpleDayGridEventRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Builds the HTML to be used for the default element for an individual segment
- SimpleDayGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
- var context = this.context;
- var eventRange = seg.eventRange;
- var eventDef = eventRange.def;
- var eventUi = eventRange.ui;
- var allDay = eventDef.allDay;
- var isDraggable = computeEventDraggable(context, eventDef, eventUi);
- var isResizableFromStart = allDay && seg.isStart && computeEventStartResizable(context, eventDef, eventUi);
- var isResizableFromEnd = allDay && seg.isEnd && computeEventEndResizable(context, eventDef, eventUi);
- var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
- var skinCss = cssToStr(this.getSkinCss(eventUi));
- var timeHtml = '';
- var timeText;
- var titleHtml;
- classes.unshift('fc-day-grid-event', 'fc-h-event');
- // Only display a timed events time if it is the starting segment
- if (seg.isStart) {
- timeText = this.getTimeText(eventRange);
- if (timeText) {
- timeHtml = '<span class="fc-time">' + htmlEscape(timeText) + '</span>';
- }
- }
- titleHtml =
- '<span class="fc-title">' +
- (htmlEscape(eventDef.title || '') || '&nbsp;') + // we always want one line of height
- '</span>';
- return '<a class="' + classes.join(' ') + '"' +
- (eventDef.url ?
- ' href="' + htmlEscape(eventDef.url) + '"' :
- '') +
- (skinCss ?
- ' style="' + skinCss + '"' :
- '') +
- '>' +
- '<div class="fc-content">' +
- (context.options.dir === 'rtl' ?
- titleHtml + ' ' + timeHtml : // put a natural space in between
- timeHtml + ' ' + titleHtml //
- ) +
- '</div>' +
- (isResizableFromStart ?
- '<div class="fc-resizer fc-start-resizer"></div>' :
- '') +
- (isResizableFromEnd ?
- '<div class="fc-resizer fc-end-resizer"></div>' :
- '') +
- '</a>';
- };
- // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined
- SimpleDayGridEventRenderer.prototype.computeEventTimeFormat = function () {
- return {
- hour: 'numeric',
- minute: '2-digit',
- omitZeroMinute: true,
- meridiem: 'narrow'
- };
- };
- SimpleDayGridEventRenderer.prototype.computeDisplayEventEnd = function () {
- return false; // TODO: somehow consider the originating DayGrid's column count
- };
- return SimpleDayGridEventRenderer;
-}(FgEventRenderer));
-
-/* Event-rendering methods for the DayGrid class
-----------------------------------------------------------------------------------------------------------------------*/
-var DayGridEventRenderer = /** @class */ (function (_super) {
- __extends(DayGridEventRenderer, _super);
- function DayGridEventRenderer(dayGrid) {
- var _this = _super.call(this) || this;
- _this.dayGrid = dayGrid;
- return _this;
- }
- // Renders the given foreground event segments onto the grid
- DayGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
- var rowStructs = this.rowStructs = this.renderSegRows(segs);
- // append to each row's content skeleton
- this.dayGrid.rowEls.forEach(function (rowNode, i) {
- rowNode.querySelector('.fc-content-skeleton > table').appendChild(rowStructs[i].tbodyEl);
- });
- // removes the "more.." events popover
- if (!mirrorInfo) {
- this.dayGrid.removeSegPopover();
- }
- };
- // Unrenders all currently rendered foreground event segments
- DayGridEventRenderer.prototype.detachSegs = function () {
- var rowStructs = this.rowStructs || [];
- var rowStruct;
- while ((rowStruct = rowStructs.pop())) {
- removeElement(rowStruct.tbodyEl);
- }
- this.rowStructs = null;
- };
- // Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.
- // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).
- // PRECONDITION: each segment shoud already have a rendered and assigned `.el`
- DayGridEventRenderer.prototype.renderSegRows = function (segs) {
- var rowStructs = [];
- var segRows;
- var row;
- segRows = this.groupSegRows(segs); // group into nested arrays
- // iterate each row of segment groupings
- for (row = 0; row < segRows.length; row++) {
- rowStructs.push(this.renderSegRow(row, segRows[row]));
- }
- return rowStructs;
- };
- // Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains
- // the segments. Returns object with a bunch of internal data about how the render was calculated.
- // NOTE: modifies rowSegs
- DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {
- var isRtl = this.context.isRtl;
- var dayGrid = this.dayGrid;
- var colCnt = dayGrid.colCnt;
- var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels
- var levelCnt = Math.max(1, segLevels.length); // ensure at least one level
- var tbody = document.createElement('tbody');
- var segMatrix = []; // lookup for which segments are rendered into which level+col cells
- var cellMatrix = []; // lookup for all <td> elements of the level+col matrix
- var loneCellMatrix = []; // lookup for <td> elements that only take up a single column
- var i;
- var levelSegs;
- var col;
- var tr;
- var j;
- var seg;
- var td;
- // populates empty cells from the current column (`col`) to `endCol`
- function emptyCellsUntil(endCol) {
- while (col < endCol) {
- // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell
- td = (loneCellMatrix[i - 1] || [])[col];
- if (td) {
- td.rowSpan = (td.rowSpan || 1) + 1;
- }
- else {
- td = document.createElement('td');
- tr.appendChild(td);
- }
- cellMatrix[i][col] = td;
- loneCellMatrix[i][col] = td;
- col++;
- }
- }
- for (i = 0; i < levelCnt; i++) { // iterate through all levels
- levelSegs = segLevels[i];
- col = 0;
- tr = document.createElement('tr');
- segMatrix.push([]);
- cellMatrix.push([]);
- loneCellMatrix.push([]);
- // levelCnt might be 1 even though there are no actual levels. protect against this.
- // this single empty row is useful for styling.
- if (levelSegs) {
- for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level
- seg = levelSegs[j];
- var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
- var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
- emptyCellsUntil(leftCol);
- // create a container that occupies or more columns. append the event element.
- td = createElement('td', { className: 'fc-event-container' }, seg.el);
- if (leftCol !== rightCol) {
- td.colSpan = rightCol - leftCol + 1;
- }
- else { // a single-column segment
- loneCellMatrix[i][col] = td;
- }
- while (col <= rightCol) {
- cellMatrix[i][col] = td;
- segMatrix[i][col] = seg;
- col++;
- }
- tr.appendChild(td);
- }
- }
- emptyCellsUntil(colCnt); // finish off the row
- var introHtml = dayGrid.renderProps.renderIntroHtml();
- if (introHtml) {
- if (isRtl) {
- appendToElement(tr, introHtml);
- }
- else {
- prependToElement(tr, introHtml);
- }
- }
- tbody.appendChild(tr);
- }
- return {
- row: row,
- tbodyEl: tbody,
- cellMatrix: cellMatrix,
- segMatrix: segMatrix,
- segLevels: segLevels,
- segs: rowSegs
- };
- };
- // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.
- // NOTE: modifies segs
- DayGridEventRenderer.prototype.buildSegLevels = function (segs) {
- var isRtl = this.context.isRtl;
- var colCnt = this.dayGrid.colCnt;
- var levels = [];
- var i;
- var seg;
- var j;
- // Give preference to elements with certain criteria, so they have
- // a chance to be closer to the top.
- segs = this.sortEventSegs(segs);
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- // loop through levels, starting with the topmost, until the segment doesn't collide with other segments
- for (j = 0; j < levels.length; j++) {
- if (!isDaySegCollision(seg, levels[j])) {
- break;
- }
- }
- // `j` now holds the desired subrow index
- seg.level = j;
- seg.leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; // for sorting only
- seg.rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol // for sorting only
- ;
- (levels[j] || (levels[j] = [])).push(seg);
- }
- // order segments left-to-right. very important if calendar is RTL
- for (j = 0; j < levels.length; j++) {
- levels[j].sort(compareDaySegCols);
- }
- return levels;
- };
- // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row
- DayGridEventRenderer.prototype.groupSegRows = function (segs) {
- var segRows = [];
- var i;
- for (i = 0; i < this.dayGrid.rowCnt; i++) {
- segRows.push([]);
- }
- for (i = 0; i < segs.length; i++) {
- segRows[segs[i].row].push(segs[i]);
- }
- return segRows;
- };
- // Computes a default `displayEventEnd` value if one is not expliclty defined
- DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {
- return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day
- };
- return DayGridEventRenderer;
-}(SimpleDayGridEventRenderer));
-// Computes whether two segments' columns collide. They are assumed to be in the same row.
-function isDaySegCollision(seg, otherSegs) {
- var i;
- var otherSeg;
- for (i = 0; i < otherSegs.length; i++) {
- otherSeg = otherSegs[i];
- if (otherSeg.firstCol <= seg.lastCol &&
- otherSeg.lastCol >= seg.firstCol) {
- return true;
- }
- }
- return false;
-}
-// A cmp function for determining the leftmost event
-function compareDaySegCols(a, b) {
- return a.leftCol - b.leftCol;
-}
-
-var DayGridMirrorRenderer = /** @class */ (function (_super) {
- __extends(DayGridMirrorRenderer, _super);
- function DayGridMirrorRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- DayGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
- var sourceSeg = mirrorInfo.sourceSeg;
- var rowStructs = this.rowStructs = this.renderSegRows(segs);
- // inject each new event skeleton into each associated row
- this.dayGrid.rowEls.forEach(function (rowNode, row) {
- var skeletonEl = htmlToElement('<div class="fc-mirror-skeleton"><table></table></div>'); // will be absolutely positioned
- var skeletonTopEl;
- var skeletonTop;
- // If there is an original segment, match the top position. Otherwise, put it at the row's top level
- if (sourceSeg && sourceSeg.row === row) {
- skeletonTopEl = sourceSeg.el;
- }
- else {
- skeletonTopEl = rowNode.querySelector('.fc-content-skeleton tbody');
- if (!skeletonTopEl) { // when no events
- skeletonTopEl = rowNode.querySelector('.fc-content-skeleton table');
- }
- }
- skeletonTop = skeletonTopEl.getBoundingClientRect().top -
- rowNode.getBoundingClientRect().top; // the offsetParent origin
- skeletonEl.style.top = skeletonTop + 'px';
- skeletonEl.querySelector('table').appendChild(rowStructs[row].tbodyEl);
- rowNode.appendChild(skeletonEl);
- });
- };
- return DayGridMirrorRenderer;
-}(DayGridEventRenderer));
-
-var EMPTY_CELL_HTML = '<td style="pointer-events:none"></td>';
-var DayGridFillRenderer = /** @class */ (function (_super) {
- __extends(DayGridFillRenderer, _super);
- function DayGridFillRenderer(dayGrid) {
- var _this = _super.call(this) || this;
- _this.fillSegTag = 'td'; // override the default tag name
- _this.dayGrid = dayGrid;
- return _this;
- }
- DayGridFillRenderer.prototype.renderSegs = function (type, context, segs) {
- // don't render timed background events
- if (type === 'bgEvent') {
- segs = segs.filter(function (seg) {
- return seg.eventRange.def.allDay;
- });
- }
- _super.prototype.renderSegs.call(this, type, context, segs);
- };
- DayGridFillRenderer.prototype.attachSegs = function (type, segs) {
- var els = [];
- var i;
- var seg;
- var skeletonEl;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- skeletonEl = this.renderFillRow(type, seg);
- this.dayGrid.rowEls[seg.row].appendChild(skeletonEl);
- els.push(skeletonEl);
- }
- return els;
- };
- // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.
- DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {
- var dayGrid = this.dayGrid;
- var isRtl = this.context.isRtl;
- var colCnt = dayGrid.colCnt;
- var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
- var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
- var startCol = leftCol;
- var endCol = rightCol + 1;
- var className;
- var skeletonEl;
- var trEl;
- if (type === 'businessHours') {
- className = 'bgevent';
- }
- else {
- className = type.toLowerCase();
- }
- skeletonEl = htmlToElement('<div class="fc-' + className + '-skeleton">' +
- '<table><tr></tr></table>' +
- '</div>');
- trEl = skeletonEl.getElementsByTagName('tr')[0];
- if (startCol > 0) {
- appendToElement(trEl,
- // will create (startCol + 1) td's
- new Array(startCol + 1).join(EMPTY_CELL_HTML));
- }
- seg.el.colSpan = endCol - startCol;
- trEl.appendChild(seg.el);
- if (endCol < colCnt) {
- appendToElement(trEl,
- // will create (colCnt - endCol) td's
- new Array(colCnt - endCol + 1).join(EMPTY_CELL_HTML));
- }
- var introHtml = dayGrid.renderProps.renderIntroHtml();
- if (introHtml) {
- if (isRtl) {
- appendToElement(trEl, introHtml);
- }
- else {
- prependToElement(trEl, introHtml);
- }
- }
- return skeletonEl;
- };
- return DayGridFillRenderer;
-}(FillRenderer));
-
-var DayTile = /** @class */ (function (_super) {
- __extends(DayTile, _super);
- function DayTile(el) {
- var _this = _super.call(this, el) || this;
- var eventRenderer = _this.eventRenderer = new DayTileEventRenderer(_this);
- var renderFrame = _this.renderFrame = memoizeRendering(_this._renderFrame);
- _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderFrame]);
- _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
- _this.renderEventDrag = memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);
- _this.renderEventResize = memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);
- return _this;
- }
- DayTile.prototype.firstContext = function (context) {
- context.calendar.registerInteractiveComponent(this, {
- el: this.el,
- useEventCenter: false
- });
- };
- DayTile.prototype.render = function (props, context) {
- this.renderFrame(props.date);
- this.renderFgEvents(context, props.fgSegs);
- this.renderEventSelection(props.eventSelection);
- this.renderEventDrag(props.eventDragInstances);
- this.renderEventResize(props.eventResizeInstances);
- };
- DayTile.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderFrame.unrender(); // should unrender everything else
- this.context.calendar.unregisterInteractiveComponent(this);
- };
- DayTile.prototype._renderFrame = function (date) {
- var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
- var title = dateEnv.format(date, createFormatter(options.dayPopoverFormat) // TODO: cache
- );
- this.el.innerHTML =
- '<div class="fc-header ' + theme.getClass('popoverHeader') + '">' +
- '<span class="fc-title">' +
- htmlEscape(title) +
- '</span>' +
- '<span class="fc-close ' + theme.getIconClass('close') + '"></span>' +
- '</div>' +
- '<div class="fc-body ' + theme.getClass('popoverContent') + '">' +
- '<div class="fc-event-container"></div>' +
- '</div>';
- this.segContainerEl = this.el.querySelector('.fc-event-container');
- };
- DayTile.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
- var date = this.props.date; // HACK
- if (positionLeft < elWidth && positionTop < elHeight) {
- return {
- component: this,
- dateSpan: {
- allDay: true,
- range: { start: date, end: addDays(date, 1) }
- },
- dayEl: this.el,
- rect: {
- left: 0,
- top: 0,
- right: elWidth,
- bottom: elHeight
- },
- layer: 1
- };
- }
- };
- return DayTile;
-}(DateComponent));
-var DayTileEventRenderer = /** @class */ (function (_super) {
- __extends(DayTileEventRenderer, _super);
- function DayTileEventRenderer(dayTile) {
- var _this = _super.call(this) || this;
- _this.dayTile = dayTile;
- return _this;
- }
- DayTileEventRenderer.prototype.attachSegs = function (segs) {
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- this.dayTile.segContainerEl.appendChild(seg.el);
- }
- };
- DayTileEventRenderer.prototype.detachSegs = function (segs) {
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- removeElement(seg.el);
- }
- };
- return DayTileEventRenderer;
-}(SimpleDayGridEventRenderer));
-
-var DayBgRow = /** @class */ (function () {
- function DayBgRow(context) {
- this.context = context;
- }
- DayBgRow.prototype.renderHtml = function (props) {
- var parts = [];
- if (props.renderIntroHtml) {
- parts.push(props.renderIntroHtml());
- }
- for (var _i = 0, _a = props.cells; _i < _a.length; _i++) {
- var cell = _a[_i];
- parts.push(renderCellHtml(cell.date, props.dateProfile, this.context, cell.htmlAttrs));
- }
- if (!props.cells.length) {
- parts.push('<td class="fc-day ' + this.context.theme.getClass('widgetContent') + '"></td>');
- }
- if (this.context.options.dir === 'rtl') {
- parts.reverse();
- }
- return '<tr>' + parts.join('') + '</tr>';
- };
- return DayBgRow;
-}());
-function renderCellHtml(date, dateProfile, context, otherAttrs) {
- var dateEnv = context.dateEnv, theme = context.theme;
- var isDateValid = rangeContainsMarker(dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.
- var classes = getDayClasses(date, dateProfile, context);
- classes.unshift('fc-day', theme.getClass('widgetContent'));
- return '<td class="' + classes.join(' ') + '"' +
- (isDateValid ?
- ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
- '') +
- (otherAttrs ?
- ' ' + otherAttrs :
- '') +
- '></td>';
-}
-
-var DAY_NUM_FORMAT = createFormatter({ day: 'numeric' });
-var WEEK_NUM_FORMAT = createFormatter({ week: 'numeric' });
-var DayGrid = /** @class */ (function (_super) {
- __extends(DayGrid, _super);
- function DayGrid(el, renderProps) {
- var _this = _super.call(this, el) || this;
- _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid
- _this.isCellSizesDirty = false;
- _this.renderProps = renderProps;
- var eventRenderer = _this.eventRenderer = new DayGridEventRenderer(_this);
- var fillRenderer = _this.fillRenderer = new DayGridFillRenderer(_this);
- _this.mirrorRenderer = new DayGridMirrorRenderer(_this);
- var renderCells = _this.renderCells = memoizeRendering(_this._renderCells, _this._unrenderCells);
- _this.renderBusinessHours = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderCells]);
- _this.renderDateSelection = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'highlight'), fillRenderer.unrender.bind(fillRenderer, 'highlight'), [renderCells]);
- _this.renderBgEvents = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderCells]);
- _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderCells]);
- _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
- _this.renderEventDrag = memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderCells]);
- _this.renderEventResize = memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderCells]);
- return _this;
- }
- DayGrid.prototype.render = function (props, context) {
- var cells = props.cells;
- this.rowCnt = cells.length;
- this.colCnt = cells[0].length;
- this.renderCells(cells, props.isRigid);
- this.renderBusinessHours(context, props.businessHourSegs);
- this.renderDateSelection(context, props.dateSelectionSegs);
- this.renderBgEvents(context, props.bgEventSegs);
- this.renderFgEvents(context, props.fgEventSegs);
- this.renderEventSelection(props.eventSelection);
- this.renderEventDrag(props.eventDrag);
- this.renderEventResize(props.eventResize);
- if (this.segPopoverTile) {
- this.updateSegPopoverTile();
- }
- };
- DayGrid.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderCells.unrender(); // will unrender everything else
- };
- DayGrid.prototype.getCellRange = function (row, col) {
- var start = this.props.cells[row][col].date;
- var end = addDays(start, 1);
- return { start: start, end: end };
- };
- DayGrid.prototype.updateSegPopoverTile = function (date, segs) {
- var ownProps = this.props;
- this.segPopoverTile.receiveProps({
- date: date || this.segPopoverTile.props.date,
- fgSegs: segs || this.segPopoverTile.props.fgSegs,
- eventSelection: ownProps.eventSelection,
- eventDragInstances: ownProps.eventDrag ? ownProps.eventDrag.affectedInstances : null,
- eventResizeInstances: ownProps.eventResize ? ownProps.eventResize.affectedInstances : null
- }, this.context);
- };
- /* Date Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype._renderCells = function (cells, isRigid) {
- var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, dateEnv = _a.dateEnv;
- var _b = this, rowCnt = _b.rowCnt, colCnt = _b.colCnt;
- var html = '';
- var row;
- var col;
- for (row = 0; row < rowCnt; row++) {
- html += this.renderDayRowHtml(row, isRigid);
- }
- this.el.innerHTML = html;
- this.rowEls = findElements(this.el, '.fc-row');
- this.cellEls = findElements(this.el, '.fc-day, .fc-disabled-day');
- if (isRtl) {
- this.cellEls.reverse();
- }
- this.rowPositions = new PositionCache(this.el, this.rowEls, false, true // vertical
- );
- this.colPositions = new PositionCache(this.el, this.cellEls.slice(0, colCnt), // only the first row
- true, false // horizontal
- );
- // trigger dayRender with each cell's element
- for (row = 0; row < rowCnt; row++) {
- for (col = 0; col < colCnt; col++) {
- calendar.publiclyTrigger('dayRender', [
- {
- date: dateEnv.toDate(cells[row][col].date),
- el: this.getCellEl(row, col),
- view: view
- }
- ]);
- }
- }
- this.isCellSizesDirty = true;
- };
- DayGrid.prototype._unrenderCells = function () {
- this.removeSegPopover();
- };
- // Generates the HTML for a single row, which is a div that wraps a table.
- // `row` is the row number.
- DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {
- var theme = this.context.theme;
- var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];
- if (isRigid) {
- classes.push('fc-rigid');
- }
- var bgRow = new DayBgRow(this.context);
- return '' +
- '<div class="' + classes.join(' ') + '">' +
- '<div class="fc-bg">' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- bgRow.renderHtml({
- cells: this.props.cells[row],
- dateProfile: this.props.dateProfile,
- renderIntroHtml: this.renderProps.renderBgIntroHtml
- }) +
- '</table>' +
- '</div>' +
- '<div class="fc-content-skeleton">' +
- '<table>' +
- (this.getIsNumbersVisible() ?
- '<thead>' +
- this.renderNumberTrHtml(row) +
- '</thead>' :
- '') +
- '</table>' +
- '</div>' +
- '</div>';
- };
- DayGrid.prototype.getIsNumbersVisible = function () {
- return this.getIsDayNumbersVisible() ||
- this.renderProps.cellWeekNumbersVisible ||
- this.renderProps.colWeekNumbersVisible;
- };
- DayGrid.prototype.getIsDayNumbersVisible = function () {
- return this.rowCnt > 1;
- };
- /* Grid Number Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.renderNumberTrHtml = function (row) {
- var isRtl = this.context.isRtl;
- var intro = this.renderProps.renderNumberIntroHtml(row, this);
- return '' +
- '<tr>' +
- (isRtl ? '' : intro) +
- this.renderNumberCellsHtml(row) +
- (isRtl ? intro : '') +
- '</tr>';
- };
- DayGrid.prototype.renderNumberCellsHtml = function (row) {
- var htmls = [];
- var col;
- var date;
- for (col = 0; col < this.colCnt; col++) {
- date = this.props.cells[row][col].date;
- htmls.push(this.renderNumberCellHtml(date));
- }
- if (this.context.isRtl) {
- htmls.reverse();
- }
- return htmls.join('');
- };
- // Generates the HTML for the <td>s of the "number" row in the DayGrid's content skeleton.
- // The number row will only exist if either day numbers or week numbers are turned on.
- DayGrid.prototype.renderNumberCellHtml = function (date) {
- var _a = this.context, dateEnv = _a.dateEnv, options = _a.options;
- var html = '';
- var isDateValid = rangeContainsMarker(this.props.dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.
- var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;
- var classes;
- var weekCalcFirstDow;
- if (!isDayNumberVisible && !this.renderProps.cellWeekNumbersVisible) {
- // no numbers in day cell (week number must be along the side)
- return '<td></td>'; // will create an empty space above events :(
- }
- classes = getDayClasses(date, this.props.dateProfile, this.context);
- classes.unshift('fc-day-top');
- if (this.renderProps.cellWeekNumbersVisible) {
- weekCalcFirstDow = dateEnv.weekDow;
- }
- html += '<td class="' + classes.join(' ') + '"' +
- (isDateValid ?
- ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
- '') +
- '>';
- if (this.renderProps.cellWeekNumbersVisible && (date.getUTCDay() === weekCalcFirstDow)) {
- html += buildGotoAnchorHtml(options, dateEnv, { date: date, type: 'week' }, { 'class': 'fc-week-number' }, dateEnv.format(date, WEEK_NUM_FORMAT) // inner HTML
- );
- }
- if (isDayNumberVisible) {
- html += buildGotoAnchorHtml(options, dateEnv, date, { 'class': 'fc-day-number' }, dateEnv.format(date, DAY_NUM_FORMAT) // inner HTML
- );
- }
- html += '</td>';
- return html;
- };
- /* Sizing
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.updateSize = function (isResize) {
- var calendar = this.context.calendar;
- var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
- if (isResize ||
- this.isCellSizesDirty ||
- calendar.isEventsUpdated // hack
- ) {
- this.buildPositionCaches();
- this.isCellSizesDirty = false;
- }
- fillRenderer.computeSizes(isResize);
- eventRenderer.computeSizes(isResize);
- mirrorRenderer.computeSizes(isResize);
- fillRenderer.assignSizes(isResize);
- eventRenderer.assignSizes(isResize);
- mirrorRenderer.assignSizes(isResize);
- };
- DayGrid.prototype.buildPositionCaches = function () {
- this.buildColPositions();
- this.buildRowPositions();
- };
- DayGrid.prototype.buildColPositions = function () {
- this.colPositions.build();
- };
- DayGrid.prototype.buildRowPositions = function () {
- this.rowPositions.build();
- this.rowPositions.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack
- };
- /* Hit System
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.positionToHit = function (leftPosition, topPosition) {
- var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions;
- var col = colPositions.leftToIndex(leftPosition);
- var row = rowPositions.topToIndex(topPosition);
- if (row != null && col != null) {
- return {
- row: row,
- col: col,
- dateSpan: {
- range: this.getCellRange(row, col),
- allDay: true
- },
- dayEl: this.getCellEl(row, col),
- relativeRect: {
- left: colPositions.lefts[col],
- right: colPositions.rights[col],
- top: rowPositions.tops[row],
- bottom: rowPositions.bottoms[row]
- }
- };
- }
- };
- /* Cell System
- ------------------------------------------------------------------------------------------------------------------*/
- // FYI: the first column is the leftmost column, regardless of date
- DayGrid.prototype.getCellEl = function (row, col) {
- return this.cellEls[row * this.colCnt + col];
- };
- /* Event Drag Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype._renderEventDrag = function (state) {
- if (state) {
- this.eventRenderer.hideByHash(state.affectedInstances);
- this.fillRenderer.renderSegs('highlight', this.context, state.segs);
- }
- };
- DayGrid.prototype._unrenderEventDrag = function (state) {
- if (state) {
- this.eventRenderer.showByHash(state.affectedInstances);
- this.fillRenderer.unrender('highlight', this.context);
- }
- };
- /* Event Resize Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype._renderEventResize = function (state) {
- if (state) {
- this.eventRenderer.hideByHash(state.affectedInstances);
- this.fillRenderer.renderSegs('highlight', this.context, state.segs);
- this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
- }
- };
- DayGrid.prototype._unrenderEventResize = function (state) {
- if (state) {
- this.eventRenderer.showByHash(state.affectedInstances);
- this.fillRenderer.unrender('highlight', this.context);
- this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
- }
- };
- /* More+ Link Popover
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.removeSegPopover = function () {
- if (this.segPopover) {
- this.segPopover.hide(); // in handler, will call segPopover's removeElement
- }
- };
- // Limits the number of "levels" (vertically stacking layers of events) for each row of the grid.
- // `levelLimit` can be false (don't limit), a number, or true (should be computed).
- DayGrid.prototype.limitRows = function (levelLimit) {
- var rowStructs = this.eventRenderer.rowStructs || [];
- var row; // row #
- var rowLevelLimit;
- for (row = 0; row < rowStructs.length; row++) {
- this.unlimitRow(row);
- if (!levelLimit) {
- rowLevelLimit = false;
- }
- else if (typeof levelLimit === 'number') {
- rowLevelLimit = levelLimit;
- }
- else {
- rowLevelLimit = this.computeRowLevelLimit(row);
- }
- if (rowLevelLimit !== false) {
- this.limitRow(row, rowLevelLimit);
- }
- }
- };
- // Computes the number of levels a row will accomodate without going outside its bounds.
- // Assumes the row is "rigid" (maintains a constant height regardless of what is inside).
- // `row` is the row number.
- DayGrid.prototype.computeRowLevelLimit = function (row) {
- var rowEl = this.rowEls[row]; // the containing "fake" row div
- var rowBottom = rowEl.getBoundingClientRect().bottom; // relative to viewport!
- var trEls = findChildren(this.eventRenderer.rowStructs[row].tbodyEl);
- var i;
- var trEl;
- // Reveal one level <tr> at a time and stop when we find one out of bounds
- for (i = 0; i < trEls.length; i++) {
- trEl = trEls[i];
- trEl.classList.remove('fc-limited'); // reset to original state (reveal)
- if (trEl.getBoundingClientRect().bottom > rowBottom) {
- return i;
- }
- }
- return false; // should not limit at all
- };
- // Limits the given grid row to the maximum number of levels and injects "more" links if necessary.
- // `row` is the row number.
- // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.
- DayGrid.prototype.limitRow = function (row, levelLimit) {
- var _this = this;
- var colCnt = this.colCnt;
- var isRtl = this.context.isRtl;
- var rowStruct = this.eventRenderer.rowStructs[row];
- var moreNodes = []; // array of "more" <a> links and <td> DOM nodes
- var col = 0; // col #, left-to-right (not chronologically)
- var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right
- var cellMatrix; // a matrix (by level, then column) of all <td> elements in the row
- var limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes
- var i;
- var seg;
- var segsBelow; // array of segment objects below `seg` in the current `col`
- var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies
- var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)
- var td;
- var rowSpan;
- var segMoreNodes; // array of "more" <td> cells that will stand-in for the current seg's cell
- var j;
- var moreTd;
- var moreWrap;
- var moreLink;
- // Iterates through empty level cells and places "more" links inside if need be
- var emptyCellsUntil = function (endCol) {
- while (col < endCol) {
- segsBelow = _this.getCellSegs(row, col, levelLimit);
- if (segsBelow.length) {
- td = cellMatrix[levelLimit - 1][col];
- moreLink = _this.renderMoreLink(row, col, segsBelow);
- moreWrap = createElement('div', null, moreLink);
- td.appendChild(moreWrap);
- moreNodes.push(moreWrap);
- }
- col++;
- }
- };
- if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?
- levelSegs = rowStruct.segLevels[levelLimit - 1];
- cellMatrix = rowStruct.cellMatrix;
- limitedNodes = findChildren(rowStruct.tbodyEl).slice(levelLimit); // get level <tr> elements past the limit
- limitedNodes.forEach(function (node) {
- node.classList.add('fc-limited'); // hide elements and get a simple DOM-nodes array
- });
- // iterate though segments in the last allowable level
- for (i = 0; i < levelSegs.length; i++) {
- seg = levelSegs[i];
- var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
- var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
- emptyCellsUntil(leftCol); // process empty cells before the segment
- // determine *all* segments below `seg` that occupy the same columns
- colSegsBelow = [];
- totalSegsBelow = 0;
- while (col <= rightCol) {
- segsBelow = this.getCellSegs(row, col, levelLimit);
- colSegsBelow.push(segsBelow);
- totalSegsBelow += segsBelow.length;
- col++;
- }
- if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links?
- td = cellMatrix[levelLimit - 1][leftCol]; // the segment's parent cell
- rowSpan = td.rowSpan || 1;
- segMoreNodes = [];
- // make a replacement <td> for each column the segment occupies. will be one for each colspan
- for (j = 0; j < colSegsBelow.length; j++) {
- moreTd = createElement('td', { className: 'fc-more-cell', rowSpan: rowSpan });
- segsBelow = colSegsBelow[j];
- moreLink = this.renderMoreLink(row, leftCol + j, [seg].concat(segsBelow) // count seg as hidden too
- );
- moreWrap = createElement('div', null, moreLink);
- moreTd.appendChild(moreWrap);
- segMoreNodes.push(moreTd);
- moreNodes.push(moreTd);
- }
- td.classList.add('fc-limited');
- insertAfterElement(td, segMoreNodes);
- limitedNodes.push(td);
- }
- }
- emptyCellsUntil(this.colCnt); // finish off the level
- rowStruct.moreEls = moreNodes; // for easy undoing later
- rowStruct.limitedEls = limitedNodes; // for easy undoing later
- }
- };
- // Reveals all levels and removes all "more"-related elements for a grid's row.
- // `row` is a row number.
- DayGrid.prototype.unlimitRow = function (row) {
- var rowStruct = this.eventRenderer.rowStructs[row];
- if (rowStruct.moreEls) {
- rowStruct.moreEls.forEach(removeElement);
- rowStruct.moreEls = null;
- }
- if (rowStruct.limitedEls) {
- rowStruct.limitedEls.forEach(function (limitedEl) {
- limitedEl.classList.remove('fc-limited');
- });
- rowStruct.limitedEls = null;
- }
- };
- // Renders an <a> element that represents hidden event element for a cell.
- // Responsible for attaching click handler as well.
- DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {
- var _this = this;
- var _a = this.context, calendar = _a.calendar, view = _a.view, dateEnv = _a.dateEnv, options = _a.options, isRtl = _a.isRtl;
- var a = createElement('a', { className: 'fc-more' });
- a.innerText = this.getMoreLinkText(hiddenSegs.length);
- a.addEventListener('click', function (ev) {
- var clickOption = options.eventLimitClick;
- var _col = isRtl ? _this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?
- var date = _this.props.cells[row][_col].date;
- var moreEl = ev.currentTarget;
- var dayEl = _this.getCellEl(row, col);
- var allSegs = _this.getCellSegs(row, col);
- // rescope the segments to be within the cell's date
- var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);
- var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);
- if (typeof clickOption === 'function') {
- // the returned value can be an atomic option
- clickOption = calendar.publiclyTrigger('eventLimitClick', [
- {
- date: dateEnv.toDate(date),
- allDay: true,
- dayEl: dayEl,
- moreEl: moreEl,
- segs: reslicedAllSegs,
- hiddenSegs: reslicedHiddenSegs,
- jsEvent: ev,
- view: view
- }
- ]);
- }
- if (clickOption === 'popover') {
- _this.showSegPopover(row, col, moreEl, reslicedAllSegs);
- }
- else if (typeof clickOption === 'string') { // a view name
- calendar.zoomTo(date, clickOption);
- }
- });
- return a;
- };
- // Reveals the popover that displays all events within a cell
- DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {
- var _this = this;
- var _a = this.context, calendar = _a.calendar, view = _a.view, theme = _a.theme, isRtl = _a.isRtl;
- var _col = isRtl ? this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?
- var moreWrap = moreLink.parentNode; // the <div> wrapper around the <a>
- var topEl; // the element we want to match the top coordinate of
- var options;
- if (this.rowCnt === 1) {
- topEl = view.el; // will cause the popover to cover any sort of header
- }
- else {
- topEl = this.rowEls[row]; // will align with top of row
- }
- options = {
- className: 'fc-more-popover ' + theme.getClass('popover'),
- parentEl: view.el,
- top: computeRect(topEl).top,
- autoHide: true,
- content: function (el) {
- _this.segPopoverTile = new DayTile(el);
- _this.updateSegPopoverTile(_this.props.cells[row][_col].date, segs);
- },
- hide: function () {
- _this.segPopoverTile.destroy();
- _this.segPopoverTile = null;
- _this.segPopover.destroy();
- _this.segPopover = null;
- }
- };
- // Determine horizontal coordinate.
- // We use the moreWrap instead of the <td> to avoid border confusion.
- if (isRtl) {
- options.right = computeRect(moreWrap).right + 1; // +1 to be over cell border
- }
- else {
- options.left = computeRect(moreWrap).left - 1; // -1 to be over cell border
- }
- this.segPopover = new Popover(options);
- this.segPopover.show();
- calendar.releaseAfterSizingTriggers(); // hack for eventPositioned
- };
- // Given the events within an array of segment objects, reslice them to be in a single day
- DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {
- var dayStart = dayDate;
- var dayEnd = addDays(dayStart, 1);
- var dayRange = { start: dayStart, end: dayEnd };
- var newSegs = [];
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- var eventRange = seg.eventRange;
- var origRange = eventRange.range;
- var slicedRange = intersectRanges(origRange, dayRange);
- if (slicedRange) {
- newSegs.push(__assign({}, seg, { eventRange: {
- def: eventRange.def,
- ui: __assign({}, eventRange.ui, { durationEditable: false }),
- instance: eventRange.instance,
- range: slicedRange
- }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() }));
- }
- }
- return newSegs;
- };
- // Generates the text that should be inside a "more" link, given the number of events it represents
- DayGrid.prototype.getMoreLinkText = function (num) {
- var opt = this.context.options.eventLimitText;
- if (typeof opt === 'function') {
- return opt(num);
- }
- else {
- return '+' + num + ' ' + opt;
- }
- };
- // Returns segments within a given cell.
- // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.
- DayGrid.prototype.getCellSegs = function (row, col, startLevel) {
- var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;
- var level = startLevel || 0;
- var segs = [];
- var seg;
- while (level < segMatrix.length) {
- seg = segMatrix[level][col];
- if (seg) {
- segs.push(seg);
- }
- level++;
- }
- return segs;
- };
- return DayGrid;
-}(DateComponent));
-
-var WEEK_NUM_FORMAT$1 = createFormatter({ week: 'numeric' });
-/* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.
-----------------------------------------------------------------------------------------------------------------------*/
-// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.
-// It is responsible for managing width/height.
-var AbstractDayGridView = /** @class */ (function (_super) {
- __extends(AbstractDayGridView, _super);
- function AbstractDayGridView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.processOptions = memoize(_this._processOptions);
- _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- /* Header Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that will go before the day-of week header cells
- _this.renderHeadIntroHtml = function () {
- var _a = _this.context, theme = _a.theme, options = _a.options;
- if (_this.colWeekNumbersVisible) {
- return '' +
- '<th class="fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.weekNumberStyleAttr() + '>' +
- '<span>' + // needed for matchCellWidths
- htmlEscape(options.weekLabel) +
- '</span>' +
- '</th>';
- }
- return '';
- };
- /* Day Grid Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that will go before content-skeleton cells that display the day/week numbers
- _this.renderDayGridNumberIntroHtml = function (row, dayGrid) {
- var _a = _this.context, options = _a.options, dateEnv = _a.dateEnv;
- var weekStart = dayGrid.props.cells[row][0].date;
- if (_this.colWeekNumbersVisible) {
- return '' +
- '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '>' +
- buildGotoAnchorHtml(// aside from link, important for matchCellWidths
- options, dateEnv, { date: weekStart, type: 'week', forceOff: dayGrid.colCnt === 1 }, dateEnv.format(weekStart, WEEK_NUM_FORMAT$1) // inner HTML
- ) +
- '</td>';
- }
- return '';
- };
- // Generates the HTML that goes before the day bg cells for each day-row
- _this.renderDayGridBgIntroHtml = function () {
- var theme = _this.context.theme;
- if (_this.colWeekNumbersVisible) {
- return '<td class="fc-week-number ' + theme.getClass('widgetContent') + '" ' + _this.weekNumberStyleAttr() + '></td>';
- }
- return '';
- };
- // Generates the HTML that goes before every other type of row generated by DayGrid.
- // Affects mirror-skeleton and highlight-skeleton rows.
- _this.renderDayGridIntroHtml = function () {
- if (_this.colWeekNumbersVisible) {
- return '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '></td>';
- }
- return '';
- };
- return _this;
- }
- AbstractDayGridView.prototype._processOptions = function (options) {
- if (options.weekNumbers) {
- if (options.weekNumbersWithinDays) {
- this.cellWeekNumbersVisible = true;
- this.colWeekNumbersVisible = false;
- }
- else {
- this.cellWeekNumbersVisible = false;
- this.colWeekNumbersVisible = true;
- }
- }
- else {
- this.colWeekNumbersVisible = false;
- this.cellWeekNumbersVisible = false;
- }
- };
- AbstractDayGridView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context);
- this.processOptions(context.options);
- this.renderSkeleton(context);
- };
- AbstractDayGridView.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderSkeleton.unrender();
- };
- AbstractDayGridView.prototype._renderSkeleton = function (context) {
- this.el.classList.add('fc-dayGrid-view');
- this.el.innerHTML = this.renderSkeletonHtml();
- this.scroller = new ScrollComponent('hidden', // overflow x
- 'auto' // overflow y
- );
- var dayGridContainerEl = this.scroller.el;
- this.el.querySelector('.fc-body > tr > td').appendChild(dayGridContainerEl);
- dayGridContainerEl.classList.add('fc-day-grid-container');
- var dayGridEl = createElement('div', { className: 'fc-day-grid' });
- dayGridContainerEl.appendChild(dayGridEl);
- this.dayGrid = new DayGrid(dayGridEl, {
- renderNumberIntroHtml: this.renderDayGridNumberIntroHtml,
- renderBgIntroHtml: this.renderDayGridBgIntroHtml,
- renderIntroHtml: this.renderDayGridIntroHtml,
- colWeekNumbersVisible: this.colWeekNumbersVisible,
- cellWeekNumbersVisible: this.cellWeekNumbersVisible
- });
- };
- AbstractDayGridView.prototype._unrenderSkeleton = function () {
- this.el.classList.remove('fc-dayGrid-view');
- this.dayGrid.destroy();
- this.scroller.destroy();
- };
- // Builds the HTML skeleton for the view.
- // The day-grid component will render inside of a container defined by this HTML.
- AbstractDayGridView.prototype.renderSkeletonHtml = function () {
- var _a = this.context, theme = _a.theme, options = _a.options;
- return '' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- (options.columnHeader ?
- '<thead class="fc-head">' +
- '<tr>' +
- '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '">&nbsp;</td>' +
- '</tr>' +
- '</thead>' :
- '') +
- '<tbody class="fc-body">' +
- '<tr>' +
- '<td class="' + theme.getClass('widgetContent') + '"></td>' +
- '</tr>' +
- '</tbody>' +
- '</table>';
- };
- // Generates an HTML attribute string for setting the width of the week number column, if it is known
- AbstractDayGridView.prototype.weekNumberStyleAttr = function () {
- if (this.weekNumberWidth != null) {
- return 'style="width:' + this.weekNumberWidth + 'px"';
- }
- return '';
- };
- // Determines whether each row should have a constant height
- AbstractDayGridView.prototype.hasRigidRows = function () {
- var eventLimit = this.context.options.eventLimit;
- return eventLimit && typeof eventLimit !== 'number';
- };
- /* Dimensions
- ------------------------------------------------------------------------------------------------------------------*/
- AbstractDayGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
- _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first
- this.dayGrid.updateSize(isResize);
- };
- // Refreshes the horizontal dimensions of the view
- AbstractDayGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
- var dayGrid = this.dayGrid;
- var eventLimit = this.context.options.eventLimit;
- var headRowEl = this.header ? this.header.el : null; // HACK
- var scrollerHeight;
- var scrollbarWidths;
- // hack to give the view some height prior to dayGrid's columns being rendered
- // TODO: separate setting height from scroller VS dayGrid.
- if (!dayGrid.rowEls) {
- if (!isAuto) {
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- return;
- }
- if (this.colWeekNumbersVisible) {
- // Make sure all week number cells running down the side have the same width.
- this.weekNumberWidth = matchCellWidths(findElements(this.el, '.fc-week-number'));
- }
- // reset all heights to be natural
- this.scroller.clear();
- if (headRowEl) {
- uncompensateScroll(headRowEl);
- }
- dayGrid.removeSegPopover(); // kill the "more" popover if displayed
- // is the event limit a constant level number?
- if (eventLimit && typeof eventLimit === 'number') {
- dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after
- }
- // distribute the height to the rows
- // (viewHeight is a "recommended" value if isAuto)
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.setGridHeight(scrollerHeight, isAuto);
- // is the event limit dynamically calculated?
- if (eventLimit && typeof eventLimit !== 'number') {
- dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set
- }
- if (!isAuto) { // should we force dimensions of the scroll container?
- this.scroller.setHeight(scrollerHeight);
- scrollbarWidths = this.scroller.getScrollbarWidths();
- if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
- if (headRowEl) {
- compensateScroll(headRowEl, scrollbarWidths);
- }
- // doing the scrollbar compensation might have created text overflow which created more height. redo
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- // guarantees the same scrollbar widths
- this.scroller.lockOverflow(scrollbarWidths);
- }
- };
- // given a desired total height of the view, returns what the height of the scroller should be
- AbstractDayGridView.prototype.computeScrollerHeight = function (viewHeight) {
- return viewHeight -
- subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
- };
- // Sets the height of just the DayGrid component in this view
- AbstractDayGridView.prototype.setGridHeight = function (height, isAuto) {
- if (this.context.options.monthMode) {
- // if auto, make the height of each row the height that it would be if there were 6 weeks
- if (isAuto) {
- height *= this.dayGrid.rowCnt / 6;
- }
- distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows
- }
- else {
- if (isAuto) {
- undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding
- }
- else {
- distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows
- }
- }
- };
- /* Scroll
- ------------------------------------------------------------------------------------------------------------------*/
- AbstractDayGridView.prototype.computeDateScroll = function (duration) {
- return { top: 0 };
- };
- AbstractDayGridView.prototype.queryDateScroll = function () {
- return { top: this.scroller.getScrollTop() };
- };
- AbstractDayGridView.prototype.applyDateScroll = function (scroll) {
- if (scroll.top !== undefined) {
- this.scroller.setScrollTop(scroll.top);
- }
- };
- return AbstractDayGridView;
-}(View));
-AbstractDayGridView.prototype.dateProfileGeneratorClass = DayGridDateProfileGenerator;
-
-var SimpleDayGrid = /** @class */ (function (_super) {
- __extends(SimpleDayGrid, _super);
- function SimpleDayGrid(dayGrid) {
- var _this = _super.call(this, dayGrid.el) || this;
- _this.slicer = new DayGridSlicer();
- _this.dayGrid = dayGrid;
- return _this;
- }
- SimpleDayGrid.prototype.firstContext = function (context) {
- context.calendar.registerInteractiveComponent(this, { el: this.dayGrid.el });
- };
- SimpleDayGrid.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.context.calendar.unregisterInteractiveComponent(this);
- };
- SimpleDayGrid.prototype.render = function (props, context) {
- var dayGrid = this.dayGrid;
- var dateProfile = props.dateProfile, dayTable = props.dayTable;
- dayGrid.receiveContext(context); // hack because context is used in sliceProps
- dayGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, context.calendar, dayGrid, dayTable), { dateProfile: dateProfile, cells: dayTable.cells, isRigid: props.isRigid }), context);
- };
- SimpleDayGrid.prototype.buildPositionCaches = function () {
- this.dayGrid.buildPositionCaches();
- };
- SimpleDayGrid.prototype.queryHit = function (positionLeft, positionTop) {
- var rawHit = this.dayGrid.positionToHit(positionLeft, positionTop);
- if (rawHit) {
- return {
- component: this.dayGrid,
- dateSpan: rawHit.dateSpan,
- dayEl: rawHit.dayEl,
- rect: {
- left: rawHit.relativeRect.left,
- right: rawHit.relativeRect.right,
- top: rawHit.relativeRect.top,
- bottom: rawHit.relativeRect.bottom
- },
- layer: 0
- };
- }
- };
- return SimpleDayGrid;
-}(DateComponent));
-var DayGridSlicer = /** @class */ (function (_super) {
- __extends(DayGridSlicer, _super);
- function DayGridSlicer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- DayGridSlicer.prototype.sliceRange = function (dateRange, dayTable) {
- return dayTable.sliceRange(dateRange);
- };
- return DayGridSlicer;
-}(Slicer));
-
-var DayGridView = /** @class */ (function (_super) {
- __extends(DayGridView, _super);
- function DayGridView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.buildDayTable = memoize(buildDayTable);
- return _this;
- }
- DayGridView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context); // will call _renderSkeleton/_unrenderSkeleton
- var dateProfile = this.props.dateProfile;
- var dayTable = this.dayTable =
- this.buildDayTable(dateProfile, props.dateProfileGenerator);
- if (this.header) {
- this.header.receiveProps({
- dateProfile: dateProfile,
- dates: dayTable.headerDates,
- datesRepDistinctDays: dayTable.rowCnt === 1,
- renderIntroHtml: this.renderHeadIntroHtml
- }, context);
- }
- this.simpleDayGrid.receiveProps({
- dateProfile: dateProfile,
- dayTable: dayTable,
- businessHours: props.businessHours,
- dateSelection: props.dateSelection,
- eventStore: props.eventStore,
- eventUiBases: props.eventUiBases,
- eventSelection: props.eventSelection,
- eventDrag: props.eventDrag,
- eventResize: props.eventResize,
- isRigid: this.hasRigidRows(),
- nextDayThreshold: this.context.nextDayThreshold
- }, context);
- };
- DayGridView.prototype._renderSkeleton = function (context) {
- _super.prototype._renderSkeleton.call(this, context);
- if (context.options.columnHeader) {
- this.header = new DayHeader(this.el.querySelector('.fc-head-container'));
- }
- this.simpleDayGrid = new SimpleDayGrid(this.dayGrid);
- };
- DayGridView.prototype._unrenderSkeleton = function () {
- _super.prototype._unrenderSkeleton.call(this);
- if (this.header) {
- this.header.destroy();
- }
- this.simpleDayGrid.destroy();
- };
- return DayGridView;
-}(AbstractDayGridView));
-function buildDayTable(dateProfile, dateProfileGenerator) {
- var daySeries = new DaySeries(dateProfile.renderRange, dateProfileGenerator);
- return new DayTable(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));
-}
-
-var main = createPlugin({
- defaultView: 'dayGridMonth',
- views: {
- dayGrid: DayGridView,
- dayGridDay: {
- type: 'dayGrid',
- duration: { days: 1 }
- },
- dayGridWeek: {
- type: 'dayGrid',
- duration: { weeks: 1 }
- },
- dayGridMonth: {
- type: 'dayGrid',
- duration: { months: 1 },
- monthMode: true,
- fixedWeekCount: true
- }
- }
-});
-
-export default main;
-export { AbstractDayGridView, DayBgRow, DayGrid, DayGridSlicer, DayGridView, SimpleDayGrid, buildDayTable as buildBasicDayTable };
diff --git a/library/fullcalendar/packages/daygrid/main.js b/library/fullcalendar/packages/daygrid/main.js
deleted file mode 100644
index 8ccdef25d..000000000
--- a/library/fullcalendar/packages/daygrid/main.js
+++ /dev/null
@@ -1,1669 +0,0 @@
-/*!
-FullCalendar Day Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
- typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
- (global = global || self, factory(global.FullCalendarDayGrid = {}, global.FullCalendar));
-}(this, function (exports, core) { 'use strict';
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
- /* global Reflect, Promise */
-
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
-
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
-
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
-
- var DayGridDateProfileGenerator = /** @class */ (function (_super) {
- __extends(DayGridDateProfileGenerator, _super);
- function DayGridDateProfileGenerator() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Computes the date range that will be rendered.
- DayGridDateProfileGenerator.prototype.buildRenderRange = function (currentRange, currentRangeUnit, isRangeAllDay) {
- var dateEnv = this.dateEnv;
- var renderRange = _super.prototype.buildRenderRange.call(this, currentRange, currentRangeUnit, isRangeAllDay);
- var start = renderRange.start;
- var end = renderRange.end;
- var endOfWeek;
- // year and month views should be aligned with weeks. this is already done for week
- if (/^(year|month)$/.test(currentRangeUnit)) {
- start = dateEnv.startOfWeek(start);
- // make end-of-week if not already
- endOfWeek = dateEnv.startOfWeek(end);
- if (endOfWeek.valueOf() !== end.valueOf()) {
- end = core.addWeeks(endOfWeek, 1);
- }
- }
- // ensure 6 weeks
- if (this.options.monthMode &&
- this.options.fixedWeekCount) {
- var rowCnt = Math.ceil(// could be partial weeks due to hiddenDays
- core.diffWeeks(start, end));
- end = core.addWeeks(end, 6 - rowCnt);
- }
- return { start: start, end: end };
- };
- return DayGridDateProfileGenerator;
- }(core.DateProfileGenerator));
-
- /* A rectangular panel that is absolutely positioned over other content
- ------------------------------------------------------------------------------------------------------------------------
- Options:
- - className (string)
- - content (HTML string, element, or element array)
- - parentEl
- - top
- - left
- - right (the x coord of where the right edge should be. not a "CSS" right)
- - autoHide (boolean)
- - show (callback)
- - hide (callback)
- */
- var Popover = /** @class */ (function () {
- function Popover(options) {
- var _this = this;
- this.isHidden = true;
- this.margin = 10; // the space required between the popover and the edges of the scroll container
- // Triggered when the user clicks *anywhere* in the document, for the autoHide feature
- this.documentMousedown = function (ev) {
- // only hide the popover if the click happened outside the popover
- if (_this.el && !_this.el.contains(ev.target)) {
- _this.hide();
- }
- };
- this.options = options;
- }
- // Shows the popover on the specified position. Renders it if not already
- Popover.prototype.show = function () {
- if (this.isHidden) {
- if (!this.el) {
- this.render();
- }
- this.el.style.display = '';
- this.position();
- this.isHidden = false;
- this.trigger('show');
- }
- };
- // Hides the popover, through CSS, but does not remove it from the DOM
- Popover.prototype.hide = function () {
- if (!this.isHidden) {
- this.el.style.display = 'none';
- this.isHidden = true;
- this.trigger('hide');
- }
- };
- // Creates `this.el` and renders content inside of it
- Popover.prototype.render = function () {
- var _this = this;
- var options = this.options;
- var el = this.el = core.createElement('div', {
- className: 'fc-popover ' + (options.className || ''),
- style: {
- top: '0',
- left: '0'
- }
- });
- if (typeof options.content === 'function') {
- options.content(el);
- }
- options.parentEl.appendChild(el);
- // when a click happens on anything inside with a 'fc-close' className, hide the popover
- core.listenBySelector(el, 'click', '.fc-close', function (ev) {
- _this.hide();
- });
- if (options.autoHide) {
- document.addEventListener('mousedown', this.documentMousedown);
- }
- };
- // Hides and unregisters any handlers
- Popover.prototype.destroy = function () {
- this.hide();
- if (this.el) {
- core.removeElement(this.el);
- this.el = null;
- }
- document.removeEventListener('mousedown', this.documentMousedown);
- };
- // Positions the popover optimally, using the top/left/right options
- Popover.prototype.position = function () {
- var options = this.options;
- var el = this.el;
- var elDims = el.getBoundingClientRect(); // only used for width,height
- var origin = core.computeRect(el.offsetParent);
- var clippingRect = core.computeClippingRect(options.parentEl);
- var top; // the "position" (not "offset") values for the popover
- var left; //
- // compute top and left
- top = options.top || 0;
- if (options.left !== undefined) {
- left = options.left;
- }
- else if (options.right !== undefined) {
- left = options.right - elDims.width; // derive the left value from the right value
- }
- else {
- left = 0;
- }
- // constrain to the view port. if constrained by two edges, give precedence to top/left
- top = Math.min(top, clippingRect.bottom - elDims.height - this.margin);
- top = Math.max(top, clippingRect.top + this.margin);
- left = Math.min(left, clippingRect.right - elDims.width - this.margin);
- left = Math.max(left, clippingRect.left + this.margin);
- core.applyStyle(el, {
- top: top - origin.top,
- left: left - origin.left
- });
- };
- // Triggers a callback. Calls a function in the option hash of the same name.
- // Arguments beyond the first `name` are forwarded on.
- // TODO: better code reuse for this. Repeat code
- // can kill this???
- Popover.prototype.trigger = function (name) {
- if (this.options[name]) {
- this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));
- }
- };
- return Popover;
- }());
-
- /* Event-rendering methods for the DayGrid class
- ----------------------------------------------------------------------------------------------------------------------*/
- // "Simple" is bad a name. has nothing to do with SimpleDayGrid
- var SimpleDayGridEventRenderer = /** @class */ (function (_super) {
- __extends(SimpleDayGridEventRenderer, _super);
- function SimpleDayGridEventRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- // Builds the HTML to be used for the default element for an individual segment
- SimpleDayGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
- var context = this.context;
- var eventRange = seg.eventRange;
- var eventDef = eventRange.def;
- var eventUi = eventRange.ui;
- var allDay = eventDef.allDay;
- var isDraggable = core.computeEventDraggable(context, eventDef, eventUi);
- var isResizableFromStart = allDay && seg.isStart && core.computeEventStartResizable(context, eventDef, eventUi);
- var isResizableFromEnd = allDay && seg.isEnd && core.computeEventEndResizable(context, eventDef, eventUi);
- var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
- var skinCss = core.cssToStr(this.getSkinCss(eventUi));
- var timeHtml = '';
- var timeText;
- var titleHtml;
- classes.unshift('fc-day-grid-event', 'fc-h-event');
- // Only display a timed events time if it is the starting segment
- if (seg.isStart) {
- timeText = this.getTimeText(eventRange);
- if (timeText) {
- timeHtml = '<span class="fc-time">' + core.htmlEscape(timeText) + '</span>';
- }
- }
- titleHtml =
- '<span class="fc-title">' +
- (core.htmlEscape(eventDef.title || '') || '&nbsp;') + // we always want one line of height
- '</span>';
- return '<a class="' + classes.join(' ') + '"' +
- (eventDef.url ?
- ' href="' + core.htmlEscape(eventDef.url) + '"' :
- '') +
- (skinCss ?
- ' style="' + skinCss + '"' :
- '') +
- '>' +
- '<div class="fc-content">' +
- (context.options.dir === 'rtl' ?
- titleHtml + ' ' + timeHtml : // put a natural space in between
- timeHtml + ' ' + titleHtml //
- ) +
- '</div>' +
- (isResizableFromStart ?
- '<div class="fc-resizer fc-start-resizer"></div>' :
- '') +
- (isResizableFromEnd ?
- '<div class="fc-resizer fc-end-resizer"></div>' :
- '') +
- '</a>';
- };
- // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined
- SimpleDayGridEventRenderer.prototype.computeEventTimeFormat = function () {
- return {
- hour: 'numeric',
- minute: '2-digit',
- omitZeroMinute: true,
- meridiem: 'narrow'
- };
- };
- SimpleDayGridEventRenderer.prototype.computeDisplayEventEnd = function () {
- return false; // TODO: somehow consider the originating DayGrid's column count
- };
- return SimpleDayGridEventRenderer;
- }(core.FgEventRenderer));
-
- /* Event-rendering methods for the DayGrid class
- ----------------------------------------------------------------------------------------------------------------------*/
- var DayGridEventRenderer = /** @class */ (function (_super) {
- __extends(DayGridEventRenderer, _super);
- function DayGridEventRenderer(dayGrid) {
- var _this = _super.call(this) || this;
- _this.dayGrid = dayGrid;
- return _this;
- }
- // Renders the given foreground event segments onto the grid
- DayGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
- var rowStructs = this.rowStructs = this.renderSegRows(segs);
- // append to each row's content skeleton
- this.dayGrid.rowEls.forEach(function (rowNode, i) {
- rowNode.querySelector('.fc-content-skeleton > table').appendChild(rowStructs[i].tbodyEl);
- });
- // removes the "more.." events popover
- if (!mirrorInfo) {
- this.dayGrid.removeSegPopover();
- }
- };
- // Unrenders all currently rendered foreground event segments
- DayGridEventRenderer.prototype.detachSegs = function () {
- var rowStructs = this.rowStructs || [];
- var rowStruct;
- while ((rowStruct = rowStructs.pop())) {
- core.removeElement(rowStruct.tbodyEl);
- }
- this.rowStructs = null;
- };
- // Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.
- // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).
- // PRECONDITION: each segment shoud already have a rendered and assigned `.el`
- DayGridEventRenderer.prototype.renderSegRows = function (segs) {
- var rowStructs = [];
- var segRows;
- var row;
- segRows = this.groupSegRows(segs); // group into nested arrays
- // iterate each row of segment groupings
- for (row = 0; row < segRows.length; row++) {
- rowStructs.push(this.renderSegRow(row, segRows[row]));
- }
- return rowStructs;
- };
- // Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains
- // the segments. Returns object with a bunch of internal data about how the render was calculated.
- // NOTE: modifies rowSegs
- DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {
- var isRtl = this.context.isRtl;
- var dayGrid = this.dayGrid;
- var colCnt = dayGrid.colCnt;
- var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels
- var levelCnt = Math.max(1, segLevels.length); // ensure at least one level
- var tbody = document.createElement('tbody');
- var segMatrix = []; // lookup for which segments are rendered into which level+col cells
- var cellMatrix = []; // lookup for all <td> elements of the level+col matrix
- var loneCellMatrix = []; // lookup for <td> elements that only take up a single column
- var i;
- var levelSegs;
- var col;
- var tr;
- var j;
- var seg;
- var td;
- // populates empty cells from the current column (`col`) to `endCol`
- function emptyCellsUntil(endCol) {
- while (col < endCol) {
- // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell
- td = (loneCellMatrix[i - 1] || [])[col];
- if (td) {
- td.rowSpan = (td.rowSpan || 1) + 1;
- }
- else {
- td = document.createElement('td');
- tr.appendChild(td);
- }
- cellMatrix[i][col] = td;
- loneCellMatrix[i][col] = td;
- col++;
- }
- }
- for (i = 0; i < levelCnt; i++) { // iterate through all levels
- levelSegs = segLevels[i];
- col = 0;
- tr = document.createElement('tr');
- segMatrix.push([]);
- cellMatrix.push([]);
- loneCellMatrix.push([]);
- // levelCnt might be 1 even though there are no actual levels. protect against this.
- // this single empty row is useful for styling.
- if (levelSegs) {
- for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level
- seg = levelSegs[j];
- var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
- var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
- emptyCellsUntil(leftCol);
- // create a container that occupies or more columns. append the event element.
- td = core.createElement('td', { className: 'fc-event-container' }, seg.el);
- if (leftCol !== rightCol) {
- td.colSpan = rightCol - leftCol + 1;
- }
- else { // a single-column segment
- loneCellMatrix[i][col] = td;
- }
- while (col <= rightCol) {
- cellMatrix[i][col] = td;
- segMatrix[i][col] = seg;
- col++;
- }
- tr.appendChild(td);
- }
- }
- emptyCellsUntil(colCnt); // finish off the row
- var introHtml = dayGrid.renderProps.renderIntroHtml();
- if (introHtml) {
- if (isRtl) {
- core.appendToElement(tr, introHtml);
- }
- else {
- core.prependToElement(tr, introHtml);
- }
- }
- tbody.appendChild(tr);
- }
- return {
- row: row,
- tbodyEl: tbody,
- cellMatrix: cellMatrix,
- segMatrix: segMatrix,
- segLevels: segLevels,
- segs: rowSegs
- };
- };
- // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.
- // NOTE: modifies segs
- DayGridEventRenderer.prototype.buildSegLevels = function (segs) {
- var isRtl = this.context.isRtl;
- var colCnt = this.dayGrid.colCnt;
- var levels = [];
- var i;
- var seg;
- var j;
- // Give preference to elements with certain criteria, so they have
- // a chance to be closer to the top.
- segs = this.sortEventSegs(segs);
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- // loop through levels, starting with the topmost, until the segment doesn't collide with other segments
- for (j = 0; j < levels.length; j++) {
- if (!isDaySegCollision(seg, levels[j])) {
- break;
- }
- }
- // `j` now holds the desired subrow index
- seg.level = j;
- seg.leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol; // for sorting only
- seg.rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol // for sorting only
- ;
- (levels[j] || (levels[j] = [])).push(seg);
- }
- // order segments left-to-right. very important if calendar is RTL
- for (j = 0; j < levels.length; j++) {
- levels[j].sort(compareDaySegCols);
- }
- return levels;
- };
- // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row
- DayGridEventRenderer.prototype.groupSegRows = function (segs) {
- var segRows = [];
- var i;
- for (i = 0; i < this.dayGrid.rowCnt; i++) {
- segRows.push([]);
- }
- for (i = 0; i < segs.length; i++) {
- segRows[segs[i].row].push(segs[i]);
- }
- return segRows;
- };
- // Computes a default `displayEventEnd` value if one is not expliclty defined
- DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {
- return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day
- };
- return DayGridEventRenderer;
- }(SimpleDayGridEventRenderer));
- // Computes whether two segments' columns collide. They are assumed to be in the same row.
- function isDaySegCollision(seg, otherSegs) {
- var i;
- var otherSeg;
- for (i = 0; i < otherSegs.length; i++) {
- otherSeg = otherSegs[i];
- if (otherSeg.firstCol <= seg.lastCol &&
- otherSeg.lastCol >= seg.firstCol) {
- return true;
- }
- }
- return false;
- }
- // A cmp function for determining the leftmost event
- function compareDaySegCols(a, b) {
- return a.leftCol - b.leftCol;
- }
-
- var DayGridMirrorRenderer = /** @class */ (function (_super) {
- __extends(DayGridMirrorRenderer, _super);
- function DayGridMirrorRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- DayGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
- var sourceSeg = mirrorInfo.sourceSeg;
- var rowStructs = this.rowStructs = this.renderSegRows(segs);
- // inject each new event skeleton into each associated row
- this.dayGrid.rowEls.forEach(function (rowNode, row) {
- var skeletonEl = core.htmlToElement('<div class="fc-mirror-skeleton"><table></table></div>'); // will be absolutely positioned
- var skeletonTopEl;
- var skeletonTop;
- // If there is an original segment, match the top position. Otherwise, put it at the row's top level
- if (sourceSeg && sourceSeg.row === row) {
- skeletonTopEl = sourceSeg.el;
- }
- else {
- skeletonTopEl = rowNode.querySelector('.fc-content-skeleton tbody');
- if (!skeletonTopEl) { // when no events
- skeletonTopEl = rowNode.querySelector('.fc-content-skeleton table');
- }
- }
- skeletonTop = skeletonTopEl.getBoundingClientRect().top -
- rowNode.getBoundingClientRect().top; // the offsetParent origin
- skeletonEl.style.top = skeletonTop + 'px';
- skeletonEl.querySelector('table').appendChild(rowStructs[row].tbodyEl);
- rowNode.appendChild(skeletonEl);
- });
- };
- return DayGridMirrorRenderer;
- }(DayGridEventRenderer));
-
- var EMPTY_CELL_HTML = '<td style="pointer-events:none"></td>';
- var DayGridFillRenderer = /** @class */ (function (_super) {
- __extends(DayGridFillRenderer, _super);
- function DayGridFillRenderer(dayGrid) {
- var _this = _super.call(this) || this;
- _this.fillSegTag = 'td'; // override the default tag name
- _this.dayGrid = dayGrid;
- return _this;
- }
- DayGridFillRenderer.prototype.renderSegs = function (type, context, segs) {
- // don't render timed background events
- if (type === 'bgEvent') {
- segs = segs.filter(function (seg) {
- return seg.eventRange.def.allDay;
- });
- }
- _super.prototype.renderSegs.call(this, type, context, segs);
- };
- DayGridFillRenderer.prototype.attachSegs = function (type, segs) {
- var els = [];
- var i;
- var seg;
- var skeletonEl;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- skeletonEl = this.renderFillRow(type, seg);
- this.dayGrid.rowEls[seg.row].appendChild(skeletonEl);
- els.push(skeletonEl);
- }
- return els;
- };
- // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.
- DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {
- var dayGrid = this.dayGrid;
- var isRtl = this.context.isRtl;
- var colCnt = dayGrid.colCnt;
- var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
- var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
- var startCol = leftCol;
- var endCol = rightCol + 1;
- var className;
- var skeletonEl;
- var trEl;
- if (type === 'businessHours') {
- className = 'bgevent';
- }
- else {
- className = type.toLowerCase();
- }
- skeletonEl = core.htmlToElement('<div class="fc-' + className + '-skeleton">' +
- '<table><tr></tr></table>' +
- '</div>');
- trEl = skeletonEl.getElementsByTagName('tr')[0];
- if (startCol > 0) {
- core.appendToElement(trEl,
- // will create (startCol + 1) td's
- new Array(startCol + 1).join(EMPTY_CELL_HTML));
- }
- seg.el.colSpan = endCol - startCol;
- trEl.appendChild(seg.el);
- if (endCol < colCnt) {
- core.appendToElement(trEl,
- // will create (colCnt - endCol) td's
- new Array(colCnt - endCol + 1).join(EMPTY_CELL_HTML));
- }
- var introHtml = dayGrid.renderProps.renderIntroHtml();
- if (introHtml) {
- if (isRtl) {
- core.appendToElement(trEl, introHtml);
- }
- else {
- core.prependToElement(trEl, introHtml);
- }
- }
- return skeletonEl;
- };
- return DayGridFillRenderer;
- }(core.FillRenderer));
-
- var DayTile = /** @class */ (function (_super) {
- __extends(DayTile, _super);
- function DayTile(el) {
- var _this = _super.call(this, el) || this;
- var eventRenderer = _this.eventRenderer = new DayTileEventRenderer(_this);
- var renderFrame = _this.renderFrame = core.memoizeRendering(_this._renderFrame);
- _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderFrame]);
- _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
- _this.renderEventDrag = core.memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);
- _this.renderEventResize = core.memoizeRendering(eventRenderer.hideByHash.bind(eventRenderer), eventRenderer.showByHash.bind(eventRenderer), [renderFrame]);
- return _this;
- }
- DayTile.prototype.firstContext = function (context) {
- context.calendar.registerInteractiveComponent(this, {
- el: this.el,
- useEventCenter: false
- });
- };
- DayTile.prototype.render = function (props, context) {
- this.renderFrame(props.date);
- this.renderFgEvents(context, props.fgSegs);
- this.renderEventSelection(props.eventSelection);
- this.renderEventDrag(props.eventDragInstances);
- this.renderEventResize(props.eventResizeInstances);
- };
- DayTile.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderFrame.unrender(); // should unrender everything else
- this.context.calendar.unregisterInteractiveComponent(this);
- };
- DayTile.prototype._renderFrame = function (date) {
- var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
- var title = dateEnv.format(date, core.createFormatter(options.dayPopoverFormat) // TODO: cache
- );
- this.el.innerHTML =
- '<div class="fc-header ' + theme.getClass('popoverHeader') + '">' +
- '<span class="fc-title">' +
- core.htmlEscape(title) +
- '</span>' +
- '<span class="fc-close ' + theme.getIconClass('close') + '"></span>' +
- '</div>' +
- '<div class="fc-body ' + theme.getClass('popoverContent') + '">' +
- '<div class="fc-event-container"></div>' +
- '</div>';
- this.segContainerEl = this.el.querySelector('.fc-event-container');
- };
- DayTile.prototype.queryHit = function (positionLeft, positionTop, elWidth, elHeight) {
- var date = this.props.date; // HACK
- if (positionLeft < elWidth && positionTop < elHeight) {
- return {
- component: this,
- dateSpan: {
- allDay: true,
- range: { start: date, end: core.addDays(date, 1) }
- },
- dayEl: this.el,
- rect: {
- left: 0,
- top: 0,
- right: elWidth,
- bottom: elHeight
- },
- layer: 1
- };
- }
- };
- return DayTile;
- }(core.DateComponent));
- var DayTileEventRenderer = /** @class */ (function (_super) {
- __extends(DayTileEventRenderer, _super);
- function DayTileEventRenderer(dayTile) {
- var _this = _super.call(this) || this;
- _this.dayTile = dayTile;
- return _this;
- }
- DayTileEventRenderer.prototype.attachSegs = function (segs) {
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- this.dayTile.segContainerEl.appendChild(seg.el);
- }
- };
- DayTileEventRenderer.prototype.detachSegs = function (segs) {
- for (var _i = 0, segs_2 = segs; _i < segs_2.length; _i++) {
- var seg = segs_2[_i];
- core.removeElement(seg.el);
- }
- };
- return DayTileEventRenderer;
- }(SimpleDayGridEventRenderer));
-
- var DayBgRow = /** @class */ (function () {
- function DayBgRow(context) {
- this.context = context;
- }
- DayBgRow.prototype.renderHtml = function (props) {
- var parts = [];
- if (props.renderIntroHtml) {
- parts.push(props.renderIntroHtml());
- }
- for (var _i = 0, _a = props.cells; _i < _a.length; _i++) {
- var cell = _a[_i];
- parts.push(renderCellHtml(cell.date, props.dateProfile, this.context, cell.htmlAttrs));
- }
- if (!props.cells.length) {
- parts.push('<td class="fc-day ' + this.context.theme.getClass('widgetContent') + '"></td>');
- }
- if (this.context.options.dir === 'rtl') {
- parts.reverse();
- }
- return '<tr>' + parts.join('') + '</tr>';
- };
- return DayBgRow;
- }());
- function renderCellHtml(date, dateProfile, context, otherAttrs) {
- var dateEnv = context.dateEnv, theme = context.theme;
- var isDateValid = core.rangeContainsMarker(dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.
- var classes = core.getDayClasses(date, dateProfile, context);
- classes.unshift('fc-day', theme.getClass('widgetContent'));
- return '<td class="' + classes.join(' ') + '"' +
- (isDateValid ?
- ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
- '') +
- (otherAttrs ?
- ' ' + otherAttrs :
- '') +
- '></td>';
- }
-
- var DAY_NUM_FORMAT = core.createFormatter({ day: 'numeric' });
- var WEEK_NUM_FORMAT = core.createFormatter({ week: 'numeric' });
- var DayGrid = /** @class */ (function (_super) {
- __extends(DayGrid, _super);
- function DayGrid(el, renderProps) {
- var _this = _super.call(this, el) || this;
- _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid
- _this.isCellSizesDirty = false;
- _this.renderProps = renderProps;
- var eventRenderer = _this.eventRenderer = new DayGridEventRenderer(_this);
- var fillRenderer = _this.fillRenderer = new DayGridFillRenderer(_this);
- _this.mirrorRenderer = new DayGridMirrorRenderer(_this);
- var renderCells = _this.renderCells = core.memoizeRendering(_this._renderCells, _this._unrenderCells);
- _this.renderBusinessHours = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderCells]);
- _this.renderDateSelection = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'highlight'), fillRenderer.unrender.bind(fillRenderer, 'highlight'), [renderCells]);
- _this.renderBgEvents = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderCells]);
- _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderCells]);
- _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
- _this.renderEventDrag = core.memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderCells]);
- _this.renderEventResize = core.memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderCells]);
- return _this;
- }
- DayGrid.prototype.render = function (props, context) {
- var cells = props.cells;
- this.rowCnt = cells.length;
- this.colCnt = cells[0].length;
- this.renderCells(cells, props.isRigid);
- this.renderBusinessHours(context, props.businessHourSegs);
- this.renderDateSelection(context, props.dateSelectionSegs);
- this.renderBgEvents(context, props.bgEventSegs);
- this.renderFgEvents(context, props.fgEventSegs);
- this.renderEventSelection(props.eventSelection);
- this.renderEventDrag(props.eventDrag);
- this.renderEventResize(props.eventResize);
- if (this.segPopoverTile) {
- this.updateSegPopoverTile();
- }
- };
- DayGrid.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderCells.unrender(); // will unrender everything else
- };
- DayGrid.prototype.getCellRange = function (row, col) {
- var start = this.props.cells[row][col].date;
- var end = core.addDays(start, 1);
- return { start: start, end: end };
- };
- DayGrid.prototype.updateSegPopoverTile = function (date, segs) {
- var ownProps = this.props;
- this.segPopoverTile.receiveProps({
- date: date || this.segPopoverTile.props.date,
- fgSegs: segs || this.segPopoverTile.props.fgSegs,
- eventSelection: ownProps.eventSelection,
- eventDragInstances: ownProps.eventDrag ? ownProps.eventDrag.affectedInstances : null,
- eventResizeInstances: ownProps.eventResize ? ownProps.eventResize.affectedInstances : null
- }, this.context);
- };
- /* Date Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype._renderCells = function (cells, isRigid) {
- var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, dateEnv = _a.dateEnv;
- var _b = this, rowCnt = _b.rowCnt, colCnt = _b.colCnt;
- var html = '';
- var row;
- var col;
- for (row = 0; row < rowCnt; row++) {
- html += this.renderDayRowHtml(row, isRigid);
- }
- this.el.innerHTML = html;
- this.rowEls = core.findElements(this.el, '.fc-row');
- this.cellEls = core.findElements(this.el, '.fc-day, .fc-disabled-day');
- if (isRtl) {
- this.cellEls.reverse();
- }
- this.rowPositions = new core.PositionCache(this.el, this.rowEls, false, true // vertical
- );
- this.colPositions = new core.PositionCache(this.el, this.cellEls.slice(0, colCnt), // only the first row
- true, false // horizontal
- );
- // trigger dayRender with each cell's element
- for (row = 0; row < rowCnt; row++) {
- for (col = 0; col < colCnt; col++) {
- calendar.publiclyTrigger('dayRender', [
- {
- date: dateEnv.toDate(cells[row][col].date),
- el: this.getCellEl(row, col),
- view: view
- }
- ]);
- }
- }
- this.isCellSizesDirty = true;
- };
- DayGrid.prototype._unrenderCells = function () {
- this.removeSegPopover();
- };
- // Generates the HTML for a single row, which is a div that wraps a table.
- // `row` is the row number.
- DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {
- var theme = this.context.theme;
- var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];
- if (isRigid) {
- classes.push('fc-rigid');
- }
- var bgRow = new DayBgRow(this.context);
- return '' +
- '<div class="' + classes.join(' ') + '">' +
- '<div class="fc-bg">' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- bgRow.renderHtml({
- cells: this.props.cells[row],
- dateProfile: this.props.dateProfile,
- renderIntroHtml: this.renderProps.renderBgIntroHtml
- }) +
- '</table>' +
- '</div>' +
- '<div class="fc-content-skeleton">' +
- '<table>' +
- (this.getIsNumbersVisible() ?
- '<thead>' +
- this.renderNumberTrHtml(row) +
- '</thead>' :
- '') +
- '</table>' +
- '</div>' +
- '</div>';
- };
- DayGrid.prototype.getIsNumbersVisible = function () {
- return this.getIsDayNumbersVisible() ||
- this.renderProps.cellWeekNumbersVisible ||
- this.renderProps.colWeekNumbersVisible;
- };
- DayGrid.prototype.getIsDayNumbersVisible = function () {
- return this.rowCnt > 1;
- };
- /* Grid Number Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.renderNumberTrHtml = function (row) {
- var isRtl = this.context.isRtl;
- var intro = this.renderProps.renderNumberIntroHtml(row, this);
- return '' +
- '<tr>' +
- (isRtl ? '' : intro) +
- this.renderNumberCellsHtml(row) +
- (isRtl ? intro : '') +
- '</tr>';
- };
- DayGrid.prototype.renderNumberCellsHtml = function (row) {
- var htmls = [];
- var col;
- var date;
- for (col = 0; col < this.colCnt; col++) {
- date = this.props.cells[row][col].date;
- htmls.push(this.renderNumberCellHtml(date));
- }
- if (this.context.isRtl) {
- htmls.reverse();
- }
- return htmls.join('');
- };
- // Generates the HTML for the <td>s of the "number" row in the DayGrid's content skeleton.
- // The number row will only exist if either day numbers or week numbers are turned on.
- DayGrid.prototype.renderNumberCellHtml = function (date) {
- var _a = this.context, dateEnv = _a.dateEnv, options = _a.options;
- var html = '';
- var isDateValid = core.rangeContainsMarker(this.props.dateProfile.activeRange, date); // TODO: called too frequently. cache somehow.
- var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;
- var classes;
- var weekCalcFirstDow;
- if (!isDayNumberVisible && !this.renderProps.cellWeekNumbersVisible) {
- // no numbers in day cell (week number must be along the side)
- return '<td></td>'; // will create an empty space above events :(
- }
- classes = core.getDayClasses(date, this.props.dateProfile, this.context);
- classes.unshift('fc-day-top');
- if (this.renderProps.cellWeekNumbersVisible) {
- weekCalcFirstDow = dateEnv.weekDow;
- }
- html += '<td class="' + classes.join(' ') + '"' +
- (isDateValid ?
- ' data-date="' + dateEnv.formatIso(date, { omitTime: true }) + '"' :
- '') +
- '>';
- if (this.renderProps.cellWeekNumbersVisible && (date.getUTCDay() === weekCalcFirstDow)) {
- html += core.buildGotoAnchorHtml(options, dateEnv, { date: date, type: 'week' }, { 'class': 'fc-week-number' }, dateEnv.format(date, WEEK_NUM_FORMAT) // inner HTML
- );
- }
- if (isDayNumberVisible) {
- html += core.buildGotoAnchorHtml(options, dateEnv, date, { 'class': 'fc-day-number' }, dateEnv.format(date, DAY_NUM_FORMAT) // inner HTML
- );
- }
- html += '</td>';
- return html;
- };
- /* Sizing
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.updateSize = function (isResize) {
- var calendar = this.context.calendar;
- var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
- if (isResize ||
- this.isCellSizesDirty ||
- calendar.isEventsUpdated // hack
- ) {
- this.buildPositionCaches();
- this.isCellSizesDirty = false;
- }
- fillRenderer.computeSizes(isResize);
- eventRenderer.computeSizes(isResize);
- mirrorRenderer.computeSizes(isResize);
- fillRenderer.assignSizes(isResize);
- eventRenderer.assignSizes(isResize);
- mirrorRenderer.assignSizes(isResize);
- };
- DayGrid.prototype.buildPositionCaches = function () {
- this.buildColPositions();
- this.buildRowPositions();
- };
- DayGrid.prototype.buildColPositions = function () {
- this.colPositions.build();
- };
- DayGrid.prototype.buildRowPositions = function () {
- this.rowPositions.build();
- this.rowPositions.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack
- };
- /* Hit System
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.positionToHit = function (leftPosition, topPosition) {
- var _a = this, colPositions = _a.colPositions, rowPositions = _a.rowPositions;
- var col = colPositions.leftToIndex(leftPosition);
- var row = rowPositions.topToIndex(topPosition);
- if (row != null && col != null) {
- return {
- row: row,
- col: col,
- dateSpan: {
- range: this.getCellRange(row, col),
- allDay: true
- },
- dayEl: this.getCellEl(row, col),
- relativeRect: {
- left: colPositions.lefts[col],
- right: colPositions.rights[col],
- top: rowPositions.tops[row],
- bottom: rowPositions.bottoms[row]
- }
- };
- }
- };
- /* Cell System
- ------------------------------------------------------------------------------------------------------------------*/
- // FYI: the first column is the leftmost column, regardless of date
- DayGrid.prototype.getCellEl = function (row, col) {
- return this.cellEls[row * this.colCnt + col];
- };
- /* Event Drag Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype._renderEventDrag = function (state) {
- if (state) {
- this.eventRenderer.hideByHash(state.affectedInstances);
- this.fillRenderer.renderSegs('highlight', this.context, state.segs);
- }
- };
- DayGrid.prototype._unrenderEventDrag = function (state) {
- if (state) {
- this.eventRenderer.showByHash(state.affectedInstances);
- this.fillRenderer.unrender('highlight', this.context);
- }
- };
- /* Event Resize Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype._renderEventResize = function (state) {
- if (state) {
- this.eventRenderer.hideByHash(state.affectedInstances);
- this.fillRenderer.renderSegs('highlight', this.context, state.segs);
- this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
- }
- };
- DayGrid.prototype._unrenderEventResize = function (state) {
- if (state) {
- this.eventRenderer.showByHash(state.affectedInstances);
- this.fillRenderer.unrender('highlight', this.context);
- this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
- }
- };
- /* More+ Link Popover
- ------------------------------------------------------------------------------------------------------------------*/
- DayGrid.prototype.removeSegPopover = function () {
- if (this.segPopover) {
- this.segPopover.hide(); // in handler, will call segPopover's removeElement
- }
- };
- // Limits the number of "levels" (vertically stacking layers of events) for each row of the grid.
- // `levelLimit` can be false (don't limit), a number, or true (should be computed).
- DayGrid.prototype.limitRows = function (levelLimit) {
- var rowStructs = this.eventRenderer.rowStructs || [];
- var row; // row #
- var rowLevelLimit;
- for (row = 0; row < rowStructs.length; row++) {
- this.unlimitRow(row);
- if (!levelLimit) {
- rowLevelLimit = false;
- }
- else if (typeof levelLimit === 'number') {
- rowLevelLimit = levelLimit;
- }
- else {
- rowLevelLimit = this.computeRowLevelLimit(row);
- }
- if (rowLevelLimit !== false) {
- this.limitRow(row, rowLevelLimit);
- }
- }
- };
- // Computes the number of levels a row will accomodate without going outside its bounds.
- // Assumes the row is "rigid" (maintains a constant height regardless of what is inside).
- // `row` is the row number.
- DayGrid.prototype.computeRowLevelLimit = function (row) {
- var rowEl = this.rowEls[row]; // the containing "fake" row div
- var rowBottom = rowEl.getBoundingClientRect().bottom; // relative to viewport!
- var trEls = core.findChildren(this.eventRenderer.rowStructs[row].tbodyEl);
- var i;
- var trEl;
- // Reveal one level <tr> at a time and stop when we find one out of bounds
- for (i = 0; i < trEls.length; i++) {
- trEl = trEls[i];
- trEl.classList.remove('fc-limited'); // reset to original state (reveal)
- if (trEl.getBoundingClientRect().bottom > rowBottom) {
- return i;
- }
- }
- return false; // should not limit at all
- };
- // Limits the given grid row to the maximum number of levels and injects "more" links if necessary.
- // `row` is the row number.
- // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.
- DayGrid.prototype.limitRow = function (row, levelLimit) {
- var _this = this;
- var colCnt = this.colCnt;
- var isRtl = this.context.isRtl;
- var rowStruct = this.eventRenderer.rowStructs[row];
- var moreNodes = []; // array of "more" <a> links and <td> DOM nodes
- var col = 0; // col #, left-to-right (not chronologically)
- var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right
- var cellMatrix; // a matrix (by level, then column) of all <td> elements in the row
- var limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes
- var i;
- var seg;
- var segsBelow; // array of segment objects below `seg` in the current `col`
- var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies
- var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)
- var td;
- var rowSpan;
- var segMoreNodes; // array of "more" <td> cells that will stand-in for the current seg's cell
- var j;
- var moreTd;
- var moreWrap;
- var moreLink;
- // Iterates through empty level cells and places "more" links inside if need be
- var emptyCellsUntil = function (endCol) {
- while (col < endCol) {
- segsBelow = _this.getCellSegs(row, col, levelLimit);
- if (segsBelow.length) {
- td = cellMatrix[levelLimit - 1][col];
- moreLink = _this.renderMoreLink(row, col, segsBelow);
- moreWrap = core.createElement('div', null, moreLink);
- td.appendChild(moreWrap);
- moreNodes.push(moreWrap);
- }
- col++;
- }
- };
- if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?
- levelSegs = rowStruct.segLevels[levelLimit - 1];
- cellMatrix = rowStruct.cellMatrix;
- limitedNodes = core.findChildren(rowStruct.tbodyEl).slice(levelLimit); // get level <tr> elements past the limit
- limitedNodes.forEach(function (node) {
- node.classList.add('fc-limited'); // hide elements and get a simple DOM-nodes array
- });
- // iterate though segments in the last allowable level
- for (i = 0; i < levelSegs.length; i++) {
- seg = levelSegs[i];
- var leftCol = isRtl ? (colCnt - 1 - seg.lastCol) : seg.firstCol;
- var rightCol = isRtl ? (colCnt - 1 - seg.firstCol) : seg.lastCol;
- emptyCellsUntil(leftCol); // process empty cells before the segment
- // determine *all* segments below `seg` that occupy the same columns
- colSegsBelow = [];
- totalSegsBelow = 0;
- while (col <= rightCol) {
- segsBelow = this.getCellSegs(row, col, levelLimit);
- colSegsBelow.push(segsBelow);
- totalSegsBelow += segsBelow.length;
- col++;
- }
- if (totalSegsBelow) { // do we need to replace this segment with one or many "more" links?
- td = cellMatrix[levelLimit - 1][leftCol]; // the segment's parent cell
- rowSpan = td.rowSpan || 1;
- segMoreNodes = [];
- // make a replacement <td> for each column the segment occupies. will be one for each colspan
- for (j = 0; j < colSegsBelow.length; j++) {
- moreTd = core.createElement('td', { className: 'fc-more-cell', rowSpan: rowSpan });
- segsBelow = colSegsBelow[j];
- moreLink = this.renderMoreLink(row, leftCol + j, [seg].concat(segsBelow) // count seg as hidden too
- );
- moreWrap = core.createElement('div', null, moreLink);
- moreTd.appendChild(moreWrap);
- segMoreNodes.push(moreTd);
- moreNodes.push(moreTd);
- }
- td.classList.add('fc-limited');
- core.insertAfterElement(td, segMoreNodes);
- limitedNodes.push(td);
- }
- }
- emptyCellsUntil(this.colCnt); // finish off the level
- rowStruct.moreEls = moreNodes; // for easy undoing later
- rowStruct.limitedEls = limitedNodes; // for easy undoing later
- }
- };
- // Reveals all levels and removes all "more"-related elements for a grid's row.
- // `row` is a row number.
- DayGrid.prototype.unlimitRow = function (row) {
- var rowStruct = this.eventRenderer.rowStructs[row];
- if (rowStruct.moreEls) {
- rowStruct.moreEls.forEach(core.removeElement);
- rowStruct.moreEls = null;
- }
- if (rowStruct.limitedEls) {
- rowStruct.limitedEls.forEach(function (limitedEl) {
- limitedEl.classList.remove('fc-limited');
- });
- rowStruct.limitedEls = null;
- }
- };
- // Renders an <a> element that represents hidden event element for a cell.
- // Responsible for attaching click handler as well.
- DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {
- var _this = this;
- var _a = this.context, calendar = _a.calendar, view = _a.view, dateEnv = _a.dateEnv, options = _a.options, isRtl = _a.isRtl;
- var a = core.createElement('a', { className: 'fc-more' });
- a.innerText = this.getMoreLinkText(hiddenSegs.length);
- a.addEventListener('click', function (ev) {
- var clickOption = options.eventLimitClick;
- var _col = isRtl ? _this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?
- var date = _this.props.cells[row][_col].date;
- var moreEl = ev.currentTarget;
- var dayEl = _this.getCellEl(row, col);
- var allSegs = _this.getCellSegs(row, col);
- // rescope the segments to be within the cell's date
- var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);
- var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);
- if (typeof clickOption === 'function') {
- // the returned value can be an atomic option
- clickOption = calendar.publiclyTrigger('eventLimitClick', [
- {
- date: dateEnv.toDate(date),
- allDay: true,
- dayEl: dayEl,
- moreEl: moreEl,
- segs: reslicedAllSegs,
- hiddenSegs: reslicedHiddenSegs,
- jsEvent: ev,
- view: view
- }
- ]);
- }
- if (clickOption === 'popover') {
- _this.showSegPopover(row, col, moreEl, reslicedAllSegs);
- }
- else if (typeof clickOption === 'string') { // a view name
- calendar.zoomTo(date, clickOption);
- }
- });
- return a;
- };
- // Reveals the popover that displays all events within a cell
- DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {
- var _this = this;
- var _a = this.context, calendar = _a.calendar, view = _a.view, theme = _a.theme, isRtl = _a.isRtl;
- var _col = isRtl ? this.colCnt - col - 1 : col; // HACK: props.cells has different dir system?
- var moreWrap = moreLink.parentNode; // the <div> wrapper around the <a>
- var topEl; // the element we want to match the top coordinate of
- var options;
- if (this.rowCnt === 1) {
- topEl = view.el; // will cause the popover to cover any sort of header
- }
- else {
- topEl = this.rowEls[row]; // will align with top of row
- }
- options = {
- className: 'fc-more-popover ' + theme.getClass('popover'),
- parentEl: view.el,
- top: core.computeRect(topEl).top,
- autoHide: true,
- content: function (el) {
- _this.segPopoverTile = new DayTile(el);
- _this.updateSegPopoverTile(_this.props.cells[row][_col].date, segs);
- },
- hide: function () {
- _this.segPopoverTile.destroy();
- _this.segPopoverTile = null;
- _this.segPopover.destroy();
- _this.segPopover = null;
- }
- };
- // Determine horizontal coordinate.
- // We use the moreWrap instead of the <td> to avoid border confusion.
- if (isRtl) {
- options.right = core.computeRect(moreWrap).right + 1; // +1 to be over cell border
- }
- else {
- options.left = core.computeRect(moreWrap).left - 1; // -1 to be over cell border
- }
- this.segPopover = new Popover(options);
- this.segPopover.show();
- calendar.releaseAfterSizingTriggers(); // hack for eventPositioned
- };
- // Given the events within an array of segment objects, reslice them to be in a single day
- DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {
- var dayStart = dayDate;
- var dayEnd = core.addDays(dayStart, 1);
- var dayRange = { start: dayStart, end: dayEnd };
- var newSegs = [];
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- var eventRange = seg.eventRange;
- var origRange = eventRange.range;
- var slicedRange = core.intersectRanges(origRange, dayRange);
- if (slicedRange) {
- newSegs.push(__assign({}, seg, { eventRange: {
- def: eventRange.def,
- ui: __assign({}, eventRange.ui, { durationEditable: false }),
- instance: eventRange.instance,
- range: slicedRange
- }, isStart: seg.isStart && slicedRange.start.valueOf() === origRange.start.valueOf(), isEnd: seg.isEnd && slicedRange.end.valueOf() === origRange.end.valueOf() }));
- }
- }
- return newSegs;
- };
- // Generates the text that should be inside a "more" link, given the number of events it represents
- DayGrid.prototype.getMoreLinkText = function (num) {
- var opt = this.context.options.eventLimitText;
- if (typeof opt === 'function') {
- return opt(num);
- }
- else {
- return '+' + num + ' ' + opt;
- }
- };
- // Returns segments within a given cell.
- // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.
- DayGrid.prototype.getCellSegs = function (row, col, startLevel) {
- var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;
- var level = startLevel || 0;
- var segs = [];
- var seg;
- while (level < segMatrix.length) {
- seg = segMatrix[level][col];
- if (seg) {
- segs.push(seg);
- }
- level++;
- }
- return segs;
- };
- return DayGrid;
- }(core.DateComponent));
-
- var WEEK_NUM_FORMAT$1 = core.createFormatter({ week: 'numeric' });
- /* An abstract class for the daygrid views, as well as month view. Renders one or more rows of day cells.
- ----------------------------------------------------------------------------------------------------------------------*/
- // It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.
- // It is responsible for managing width/height.
- var AbstractDayGridView = /** @class */ (function (_super) {
- __extends(AbstractDayGridView, _super);
- function AbstractDayGridView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.processOptions = core.memoize(_this._processOptions);
- _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- /* Header Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that will go before the day-of week header cells
- _this.renderHeadIntroHtml = function () {
- var _a = _this.context, theme = _a.theme, options = _a.options;
- if (_this.colWeekNumbersVisible) {
- return '' +
- '<th class="fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.weekNumberStyleAttr() + '>' +
- '<span>' + // needed for matchCellWidths
- core.htmlEscape(options.weekLabel) +
- '</span>' +
- '</th>';
- }
- return '';
- };
- /* Day Grid Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that will go before content-skeleton cells that display the day/week numbers
- _this.renderDayGridNumberIntroHtml = function (row, dayGrid) {
- var _a = _this.context, options = _a.options, dateEnv = _a.dateEnv;
- var weekStart = dayGrid.props.cells[row][0].date;
- if (_this.colWeekNumbersVisible) {
- return '' +
- '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '>' +
- core.buildGotoAnchorHtml(// aside from link, important for matchCellWidths
- options, dateEnv, { date: weekStart, type: 'week', forceOff: dayGrid.colCnt === 1 }, dateEnv.format(weekStart, WEEK_NUM_FORMAT$1) // inner HTML
- ) +
- '</td>';
- }
- return '';
- };
- // Generates the HTML that goes before the day bg cells for each day-row
- _this.renderDayGridBgIntroHtml = function () {
- var theme = _this.context.theme;
- if (_this.colWeekNumbersVisible) {
- return '<td class="fc-week-number ' + theme.getClass('widgetContent') + '" ' + _this.weekNumberStyleAttr() + '></td>';
- }
- return '';
- };
- // Generates the HTML that goes before every other type of row generated by DayGrid.
- // Affects mirror-skeleton and highlight-skeleton rows.
- _this.renderDayGridIntroHtml = function () {
- if (_this.colWeekNumbersVisible) {
- return '<td class="fc-week-number" ' + _this.weekNumberStyleAttr() + '></td>';
- }
- return '';
- };
- return _this;
- }
- AbstractDayGridView.prototype._processOptions = function (options) {
- if (options.weekNumbers) {
- if (options.weekNumbersWithinDays) {
- this.cellWeekNumbersVisible = true;
- this.colWeekNumbersVisible = false;
- }
- else {
- this.cellWeekNumbersVisible = false;
- this.colWeekNumbersVisible = true;
- }
- }
- else {
- this.colWeekNumbersVisible = false;
- this.cellWeekNumbersVisible = false;
- }
- };
- AbstractDayGridView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context);
- this.processOptions(context.options);
- this.renderSkeleton(context);
- };
- AbstractDayGridView.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderSkeleton.unrender();
- };
- AbstractDayGridView.prototype._renderSkeleton = function (context) {
- this.el.classList.add('fc-dayGrid-view');
- this.el.innerHTML = this.renderSkeletonHtml();
- this.scroller = new core.ScrollComponent('hidden', // overflow x
- 'auto' // overflow y
- );
- var dayGridContainerEl = this.scroller.el;
- this.el.querySelector('.fc-body > tr > td').appendChild(dayGridContainerEl);
- dayGridContainerEl.classList.add('fc-day-grid-container');
- var dayGridEl = core.createElement('div', { className: 'fc-day-grid' });
- dayGridContainerEl.appendChild(dayGridEl);
- this.dayGrid = new DayGrid(dayGridEl, {
- renderNumberIntroHtml: this.renderDayGridNumberIntroHtml,
- renderBgIntroHtml: this.renderDayGridBgIntroHtml,
- renderIntroHtml: this.renderDayGridIntroHtml,
- colWeekNumbersVisible: this.colWeekNumbersVisible,
- cellWeekNumbersVisible: this.cellWeekNumbersVisible
- });
- };
- AbstractDayGridView.prototype._unrenderSkeleton = function () {
- this.el.classList.remove('fc-dayGrid-view');
- this.dayGrid.destroy();
- this.scroller.destroy();
- };
- // Builds the HTML skeleton for the view.
- // The day-grid component will render inside of a container defined by this HTML.
- AbstractDayGridView.prototype.renderSkeletonHtml = function () {
- var _a = this.context, theme = _a.theme, options = _a.options;
- return '' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- (options.columnHeader ?
- '<thead class="fc-head">' +
- '<tr>' +
- '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '">&nbsp;</td>' +
- '</tr>' +
- '</thead>' :
- '') +
- '<tbody class="fc-body">' +
- '<tr>' +
- '<td class="' + theme.getClass('widgetContent') + '"></td>' +
- '</tr>' +
- '</tbody>' +
- '</table>';
- };
- // Generates an HTML attribute string for setting the width of the week number column, if it is known
- AbstractDayGridView.prototype.weekNumberStyleAttr = function () {
- if (this.weekNumberWidth != null) {
- return 'style="width:' + this.weekNumberWidth + 'px"';
- }
- return '';
- };
- // Determines whether each row should have a constant height
- AbstractDayGridView.prototype.hasRigidRows = function () {
- var eventLimit = this.context.options.eventLimit;
- return eventLimit && typeof eventLimit !== 'number';
- };
- /* Dimensions
- ------------------------------------------------------------------------------------------------------------------*/
- AbstractDayGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
- _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first
- this.dayGrid.updateSize(isResize);
- };
- // Refreshes the horizontal dimensions of the view
- AbstractDayGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
- var dayGrid = this.dayGrid;
- var eventLimit = this.context.options.eventLimit;
- var headRowEl = this.header ? this.header.el : null; // HACK
- var scrollerHeight;
- var scrollbarWidths;
- // hack to give the view some height prior to dayGrid's columns being rendered
- // TODO: separate setting height from scroller VS dayGrid.
- if (!dayGrid.rowEls) {
- if (!isAuto) {
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- return;
- }
- if (this.colWeekNumbersVisible) {
- // Make sure all week number cells running down the side have the same width.
- this.weekNumberWidth = core.matchCellWidths(core.findElements(this.el, '.fc-week-number'));
- }
- // reset all heights to be natural
- this.scroller.clear();
- if (headRowEl) {
- core.uncompensateScroll(headRowEl);
- }
- dayGrid.removeSegPopover(); // kill the "more" popover if displayed
- // is the event limit a constant level number?
- if (eventLimit && typeof eventLimit === 'number') {
- dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after
- }
- // distribute the height to the rows
- // (viewHeight is a "recommended" value if isAuto)
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.setGridHeight(scrollerHeight, isAuto);
- // is the event limit dynamically calculated?
- if (eventLimit && typeof eventLimit !== 'number') {
- dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set
- }
- if (!isAuto) { // should we force dimensions of the scroll container?
- this.scroller.setHeight(scrollerHeight);
- scrollbarWidths = this.scroller.getScrollbarWidths();
- if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
- if (headRowEl) {
- core.compensateScroll(headRowEl, scrollbarWidths);
- }
- // doing the scrollbar compensation might have created text overflow which created more height. redo
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- // guarantees the same scrollbar widths
- this.scroller.lockOverflow(scrollbarWidths);
- }
- };
- // given a desired total height of the view, returns what the height of the scroller should be
- AbstractDayGridView.prototype.computeScrollerHeight = function (viewHeight) {
- return viewHeight -
- core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
- };
- // Sets the height of just the DayGrid component in this view
- AbstractDayGridView.prototype.setGridHeight = function (height, isAuto) {
- if (this.context.options.monthMode) {
- // if auto, make the height of each row the height that it would be if there were 6 weeks
- if (isAuto) {
- height *= this.dayGrid.rowCnt / 6;
- }
- core.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows
- }
- else {
- if (isAuto) {
- core.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding
- }
- else {
- core.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows
- }
- }
- };
- /* Scroll
- ------------------------------------------------------------------------------------------------------------------*/
- AbstractDayGridView.prototype.computeDateScroll = function (duration) {
- return { top: 0 };
- };
- AbstractDayGridView.prototype.queryDateScroll = function () {
- return { top: this.scroller.getScrollTop() };
- };
- AbstractDayGridView.prototype.applyDateScroll = function (scroll) {
- if (scroll.top !== undefined) {
- this.scroller.setScrollTop(scroll.top);
- }
- };
- return AbstractDayGridView;
- }(core.View));
- AbstractDayGridView.prototype.dateProfileGeneratorClass = DayGridDateProfileGenerator;
-
- var SimpleDayGrid = /** @class */ (function (_super) {
- __extends(SimpleDayGrid, _super);
- function SimpleDayGrid(dayGrid) {
- var _this = _super.call(this, dayGrid.el) || this;
- _this.slicer = new DayGridSlicer();
- _this.dayGrid = dayGrid;
- return _this;
- }
- SimpleDayGrid.prototype.firstContext = function (context) {
- context.calendar.registerInteractiveComponent(this, { el: this.dayGrid.el });
- };
- SimpleDayGrid.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.context.calendar.unregisterInteractiveComponent(this);
- };
- SimpleDayGrid.prototype.render = function (props, context) {
- var dayGrid = this.dayGrid;
- var dateProfile = props.dateProfile, dayTable = props.dayTable;
- dayGrid.receiveContext(context); // hack because context is used in sliceProps
- dayGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, props.nextDayThreshold, context.calendar, dayGrid, dayTable), { dateProfile: dateProfile, cells: dayTable.cells, isRigid: props.isRigid }), context);
- };
- SimpleDayGrid.prototype.buildPositionCaches = function () {
- this.dayGrid.buildPositionCaches();
- };
- SimpleDayGrid.prototype.queryHit = function (positionLeft, positionTop) {
- var rawHit = this.dayGrid.positionToHit(positionLeft, positionTop);
- if (rawHit) {
- return {
- component: this.dayGrid,
- dateSpan: rawHit.dateSpan,
- dayEl: rawHit.dayEl,
- rect: {
- left: rawHit.relativeRect.left,
- right: rawHit.relativeRect.right,
- top: rawHit.relativeRect.top,
- bottom: rawHit.relativeRect.bottom
- },
- layer: 0
- };
- }
- };
- return SimpleDayGrid;
- }(core.DateComponent));
- var DayGridSlicer = /** @class */ (function (_super) {
- __extends(DayGridSlicer, _super);
- function DayGridSlicer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- DayGridSlicer.prototype.sliceRange = function (dateRange, dayTable) {
- return dayTable.sliceRange(dateRange);
- };
- return DayGridSlicer;
- }(core.Slicer));
-
- var DayGridView = /** @class */ (function (_super) {
- __extends(DayGridView, _super);
- function DayGridView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.buildDayTable = core.memoize(buildDayTable);
- return _this;
- }
- DayGridView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context); // will call _renderSkeleton/_unrenderSkeleton
- var dateProfile = this.props.dateProfile;
- var dayTable = this.dayTable =
- this.buildDayTable(dateProfile, props.dateProfileGenerator);
- if (this.header) {
- this.header.receiveProps({
- dateProfile: dateProfile,
- dates: dayTable.headerDates,
- datesRepDistinctDays: dayTable.rowCnt === 1,
- renderIntroHtml: this.renderHeadIntroHtml
- }, context);
- }
- this.simpleDayGrid.receiveProps({
- dateProfile: dateProfile,
- dayTable: dayTable,
- businessHours: props.businessHours,
- dateSelection: props.dateSelection,
- eventStore: props.eventStore,
- eventUiBases: props.eventUiBases,
- eventSelection: props.eventSelection,
- eventDrag: props.eventDrag,
- eventResize: props.eventResize,
- isRigid: this.hasRigidRows(),
- nextDayThreshold: this.context.nextDayThreshold
- }, context);
- };
- DayGridView.prototype._renderSkeleton = function (context) {
- _super.prototype._renderSkeleton.call(this, context);
- if (context.options.columnHeader) {
- this.header = new core.DayHeader(this.el.querySelector('.fc-head-container'));
- }
- this.simpleDayGrid = new SimpleDayGrid(this.dayGrid);
- };
- DayGridView.prototype._unrenderSkeleton = function () {
- _super.prototype._unrenderSkeleton.call(this);
- if (this.header) {
- this.header.destroy();
- }
- this.simpleDayGrid.destroy();
- };
- return DayGridView;
- }(AbstractDayGridView));
- function buildDayTable(dateProfile, dateProfileGenerator) {
- var daySeries = new core.DaySeries(dateProfile.renderRange, dateProfileGenerator);
- return new core.DayTable(daySeries, /year|month|week/.test(dateProfile.currentRangeUnit));
- }
-
- var main = core.createPlugin({
- defaultView: 'dayGridMonth',
- views: {
- dayGrid: DayGridView,
- dayGridDay: {
- type: 'dayGrid',
- duration: { days: 1 }
- },
- dayGridWeek: {
- type: 'dayGrid',
- duration: { weeks: 1 }
- },
- dayGridMonth: {
- type: 'dayGrid',
- duration: { months: 1 },
- monthMode: true,
- fixedWeekCount: true
- }
- }
- });
-
- exports.AbstractDayGridView = AbstractDayGridView;
- exports.DayBgRow = DayBgRow;
- exports.DayGrid = DayGrid;
- exports.DayGridSlicer = DayGridSlicer;
- exports.DayGridView = DayGridView;
- exports.SimpleDayGrid = SimpleDayGrid;
- exports.buildBasicDayTable = buildDayTable;
- exports.default = main;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/daygrid/main.min.css b/library/fullcalendar/packages/daygrid/main.min.css
deleted file mode 100644
index 55a572412..000000000
--- a/library/fullcalendar/packages/daygrid/main.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.fc-dayGridDay-view .fc-content-skeleton,.fc-dayGridWeek-view .fc-content-skeleton{padding-bottom:1em}.fc-dayGrid-view .fc-body .fc-row{min-height:4em}.fc-row.fc-rigid{overflow:hidden}.fc-row.fc-rigid .fc-content-skeleton{position:absolute;top:0;left:0;right:0}.fc-day-top.fc-other-month{opacity:.3}.fc-dayGrid-view .fc-day-number,.fc-dayGrid-view .fc-week-number{padding:2px}.fc-dayGrid-view th.fc-day-number,.fc-dayGrid-view th.fc-week-number{padding:0 2px}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-day-number{float:right}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-day-number{float:left}.fc-ltr .fc-dayGrid-view .fc-day-top .fc-week-number{float:left;border-radius:0 0 3px}.fc-rtl .fc-dayGrid-view .fc-day-top .fc-week-number{float:right;border-radius:0 0 0 3px}.fc-dayGrid-view .fc-day-top .fc-week-number{min-width:1.5em;text-align:center;background-color:#f2f2f2;color:grey}.fc-dayGrid-view td.fc-week-number{text-align:center}.fc-dayGrid-view td.fc-week-number>*{display:inline-block;min-width:1.25em} \ No newline at end of file
diff --git a/library/fullcalendar/packages/daygrid/main.min.js b/library/fullcalendar/packages/daygrid/main.min.js
deleted file mode 100644
index 21715dfda..000000000
--- a/library/fullcalendar/packages/daygrid/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar Day Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarDayGrid={},e.FullCalendar)}(this,(function(e,t){"use strict";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function n(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var i=function(){return(i=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var i in t=arguments[r])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)},o=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return n(r,e),r.prototype.buildRenderRange=function(r,n,i){var o,s=this.dateEnv,l=e.prototype.buildRenderRange.call(this,r,n,i),a=l.start,d=l.end;if(/^(year|month)$/.test(n)&&(a=s.startOfWeek(a),(o=s.startOfWeek(d)).valueOf()!==d.valueOf()&&(d=t.addWeeks(o,1))),this.options.monthMode&&this.options.fixedWeekCount){var c=Math.ceil(t.diffWeeks(a,d));d=t.addWeeks(d,6-c)}return{start:a,end:d}},r}(t.DateProfileGenerator),s=function(){function e(e){var t=this;this.isHidden=!0,this.margin=10,this.documentMousedown=function(e){t.el&&!t.el.contains(e.target)&&t.hide()},this.options=e}return e.prototype.show=function(){this.isHidden&&(this.el||this.render(),this.el.style.display="",this.position(),this.isHidden=!1,this.trigger("show"))},e.prototype.hide=function(){this.isHidden||(this.el.style.display="none",this.isHidden=!0,this.trigger("hide"))},e.prototype.render=function(){var e=this,r=this.options,n=this.el=t.createElement("div",{className:"fc-popover "+(r.className||""),style:{top:"0",left:"0"}});"function"==typeof r.content&&r.content(n),r.parentEl.appendChild(n),t.listenBySelector(n,"click",".fc-close",(function(t){e.hide()})),r.autoHide&&document.addEventListener("mousedown",this.documentMousedown)},e.prototype.destroy=function(){this.hide(),this.el&&(t.removeElement(this.el),this.el=null),document.removeEventListener("mousedown",this.documentMousedown)},e.prototype.position=function(){var e,r,n=this.options,i=this.el,o=i.getBoundingClientRect(),s=t.computeRect(i.offsetParent),l=t.computeClippingRect(n.parentEl);e=n.top||0,r=void 0!==n.left?n.left:void 0!==n.right?n.right-o.width:0,e=Math.min(e,l.bottom-o.height-this.margin),e=Math.max(e,l.top+this.margin),r=Math.min(r,l.right-o.width-this.margin),r=Math.max(r,l.left+this.margin),t.applyStyle(i,{top:e-s.top,left:r-s.left})},e.prototype.trigger=function(e){this.options[e]&&this.options[e].apply(this,Array.prototype.slice.call(arguments,1))},e}(),l=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return n(r,e),r.prototype.renderSegHtml=function(e,r){var n,i,o=this.context,s=e.eventRange,l=s.def,a=s.ui,d=l.allDay,c=t.computeEventDraggable(o,l,a),h=d&&e.isStart&&t.computeEventStartResizable(o,l,a),p=d&&e.isEnd&&t.computeEventEndResizable(o,l,a),u=this.getSegClasses(e,c,h||p,r),f=t.cssToStr(this.getSkinCss(a)),m="";return u.unshift("fc-day-grid-event","fc-h-event"),e.isStart&&(n=this.getTimeText(s))&&(m='<span class="fc-time">'+t.htmlEscape(n)+"</span>"),i='<span class="fc-title">'+(t.htmlEscape(l.title||"")||"&nbsp;")+"</span>",'<a class="'+u.join(" ")+'"'+(l.url?' href="'+t.htmlEscape(l.url)+'"':"")+(f?' style="'+f+'"':"")+'><div class="fc-content">'+("rtl"===o.options.dir?i+" "+m:m+" "+i)+"</div>"+(h?'<div class="fc-resizer fc-start-resizer"></div>':"")+(p?'<div class="fc-resizer fc-end-resizer"></div>':"")+"</a>"},r.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"narrow"}},r.prototype.computeDisplayEventEnd=function(){return!1},r}(t.FgEventRenderer),a=function(e){function r(t){var r=e.call(this)||this;return r.dayGrid=t,r}return n(r,e),r.prototype.attachSegs=function(e,t){var r=this.rowStructs=this.renderSegRows(e);this.dayGrid.rowEls.forEach((function(e,t){e.querySelector(".fc-content-skeleton > table").appendChild(r[t].tbodyEl)})),t||this.dayGrid.removeSegPopover()},r.prototype.detachSegs=function(){for(var e,r=this.rowStructs||[];e=r.pop();)t.removeElement(e.tbodyEl);this.rowStructs=null},r.prototype.renderSegRows=function(e){var t,r,n=[];for(t=this.groupSegRows(e),r=0;r<t.length;r++)n.push(this.renderSegRow(r,t[r]));return n},r.prototype.renderSegRow=function(e,r){var n,i,o,s,l,a,d,c=this.context.isRtl,h=this.dayGrid,p=h.colCnt,u=this.buildSegLevels(r),f=Math.max(1,u.length),m=document.createElement("tbody"),g=[],y=[],v=[];function b(e){for(;o<e;)(d=(v[n-1]||[])[o])?d.rowSpan=(d.rowSpan||1)+1:(d=document.createElement("td"),s.appendChild(d)),y[n][o]=d,v[n][o]=d,o++}for(n=0;n<f;n++){if(i=u[n],o=0,s=document.createElement("tr"),g.push([]),y.push([]),v.push([]),i)for(l=0;l<i.length;l++){a=i[l];var S=c?p-1-a.lastCol:a.firstCol,w=c?p-1-a.firstCol:a.lastCol;for(b(S),d=t.createElement("td",{className:"fc-event-container"},a.el),S!==w?d.colSpan=w-S+1:v[n][o]=d;o<=w;)y[n][o]=d,g[n][o]=a,o++;s.appendChild(d)}b(p);var C=h.renderProps.renderIntroHtml();C&&(c?t.appendToElement(s,C):t.prependToElement(s,C)),m.appendChild(s)}return{row:e,tbodyEl:m,cellMatrix:y,segMatrix:g,segLevels:u,segs:r}},r.prototype.buildSegLevels=function(e){var t,r,n,i=this.context.isRtl,o=this.dayGrid.colCnt,s=[];for(e=this.sortEventSegs(e),t=0;t<e.length;t++){for(r=e[t],n=0;n<s.length&&d(r,s[n]);n++);r.level=n,r.leftCol=i?o-1-r.lastCol:r.firstCol,r.rightCol=i?o-1-r.firstCol:r.lastCol,(s[n]||(s[n]=[])).push(r)}for(n=0;n<s.length;n++)s[n].sort(c);return s},r.prototype.groupSegRows=function(e){var t,r=[];for(t=0;t<this.dayGrid.rowCnt;t++)r.push([]);for(t=0;t<e.length;t++)r[e[t].row].push(e[t]);return r},r.prototype.computeDisplayEventEnd=function(){return 1===this.dayGrid.colCnt},r}(l);function d(e,t){var r,n;for(r=0;r<t.length;r++)if((n=t[r]).firstCol<=e.lastCol&&n.lastCol>=e.firstCol)return!0;return!1}function c(e,t){return e.leftCol-t.leftCol}var h=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return n(r,e),r.prototype.attachSegs=function(e,r){var n=r.sourceSeg,i=this.rowStructs=this.renderSegRows(e);this.dayGrid.rowEls.forEach((function(e,r){var o,s,l=t.htmlToElement('<div class="fc-mirror-skeleton"><table></table></div>');n&&n.row===r?o=n.el:(o=e.querySelector(".fc-content-skeleton tbody"))||(o=e.querySelector(".fc-content-skeleton table")),s=o.getBoundingClientRect().top-e.getBoundingClientRect().top,l.style.top=s+"px",l.querySelector("table").appendChild(i[r].tbodyEl),e.appendChild(l)}))},r}(a),p=function(e){function r(t){var r=e.call(this)||this;return r.fillSegTag="td",r.dayGrid=t,r}return n(r,e),r.prototype.renderSegs=function(t,r,n){"bgEvent"===t&&(n=n.filter((function(e){return e.eventRange.def.allDay}))),e.prototype.renderSegs.call(this,t,r,n)},r.prototype.attachSegs=function(e,t){var r,n,i,o=[];for(r=0;r<t.length;r++)n=t[r],i=this.renderFillRow(e,n),this.dayGrid.rowEls[n.row].appendChild(i),o.push(i);return o},r.prototype.renderFillRow=function(e,r){var n,i,o,s=this.dayGrid,l=this.context.isRtl,a=s.colCnt,d=l?a-1-r.lastCol:r.firstCol,c=(l?a-1-r.firstCol:r.lastCol)+1;n="businessHours"===e?"bgevent":e.toLowerCase(),o=(i=t.htmlToElement('<div class="fc-'+n+'-skeleton"><table><tr></tr></table></div>')).getElementsByTagName("tr")[0],d>0&&t.appendToElement(o,new Array(d+1).join('<td style="pointer-events:none"></td>')),r.el.colSpan=c-d,o.appendChild(r.el),c<a&&t.appendToElement(o,new Array(a-c+1).join('<td style="pointer-events:none"></td>'));var h=s.renderProps.renderIntroHtml();return h&&(l?t.appendToElement(o,h):t.prependToElement(o,h)),i},r}(t.FillRenderer),u=function(e){function r(r){var n=e.call(this,r)||this,i=n.eventRenderer=new f(n),o=n.renderFrame=t.memoizeRendering(n._renderFrame);return n.renderFgEvents=t.memoizeRendering(i.renderSegs.bind(i),i.unrender.bind(i),[o]),n.renderEventSelection=t.memoizeRendering(i.selectByInstanceId.bind(i),i.unselectByInstanceId.bind(i),[n.renderFgEvents]),n.renderEventDrag=t.memoizeRendering(i.hideByHash.bind(i),i.showByHash.bind(i),[o]),n.renderEventResize=t.memoizeRendering(i.hideByHash.bind(i),i.showByHash.bind(i),[o]),n}return n(r,e),r.prototype.firstContext=function(e){e.calendar.registerInteractiveComponent(this,{el:this.el,useEventCenter:!1})},r.prototype.render=function(e,t){this.renderFrame(e.date),this.renderFgEvents(t,e.fgSegs),this.renderEventSelection(e.eventSelection),this.renderEventDrag(e.eventDragInstances),this.renderEventResize(e.eventResizeInstances)},r.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderFrame.unrender(),this.context.calendar.unregisterInteractiveComponent(this)},r.prototype._renderFrame=function(e){var r=this.context,n=r.theme,i=r.dateEnv,o=r.options,s=i.format(e,t.createFormatter(o.dayPopoverFormat));this.el.innerHTML='<div class="fc-header '+n.getClass("popoverHeader")+'"><span class="fc-title">'+t.htmlEscape(s)+'</span><span class="fc-close '+n.getIconClass("close")+'"></span></div><div class="fc-body '+n.getClass("popoverContent")+'"><div class="fc-event-container"></div></div>',this.segContainerEl=this.el.querySelector(".fc-event-container")},r.prototype.queryHit=function(e,r,n,i){var o=this.props.date;if(e<n&&r<i)return{component:this,dateSpan:{allDay:!0,range:{start:o,end:t.addDays(o,1)}},dayEl:this.el,rect:{left:0,top:0,right:n,bottom:i},layer:1}},r}(t.DateComponent),f=function(e){function r(t){var r=e.call(this)||this;return r.dayTile=t,r}return n(r,e),r.prototype.attachSegs=function(e){for(var t=0,r=e;t<r.length;t++){var n=r[t];this.dayTile.segContainerEl.appendChild(n.el)}},r.prototype.detachSegs=function(e){for(var r=0,n=e;r<n.length;r++){var i=n[r];t.removeElement(i.el)}},r}(l),m=function(){function e(e){this.context=e}return e.prototype.renderHtml=function(e){var t=[];e.renderIntroHtml&&t.push(e.renderIntroHtml());for(var r=0,n=e.cells;r<n.length;r++){var i=n[r];t.push(g(i.date,e.dateProfile,this.context,i.htmlAttrs))}return e.cells.length||t.push('<td class="fc-day '+this.context.theme.getClass("widgetContent")+'"></td>'),"rtl"===this.context.options.dir&&t.reverse(),"<tr>"+t.join("")+"</tr>"},e}();function g(e,r,n,i){var o=n.dateEnv,s=n.theme,l=t.rangeContainsMarker(r.activeRange,e),a=t.getDayClasses(e,r,n);return a.unshift("fc-day",s.getClass("widgetContent")),'<td class="'+a.join(" ")+'"'+(l?' data-date="'+o.formatIso(e,{omitTime:!0})+'"':"")+(i?" "+i:"")+"></td>"}var y=t.createFormatter({day:"numeric"}),v=t.createFormatter({week:"numeric"}),b=function(e){function r(r,n){var i=e.call(this,r)||this;i.bottomCoordPadding=0,i.isCellSizesDirty=!1,i.renderProps=n;var o=i.eventRenderer=new a(i),s=i.fillRenderer=new p(i);i.mirrorRenderer=new h(i);var l=i.renderCells=t.memoizeRendering(i._renderCells,i._unrenderCells);return i.renderBusinessHours=t.memoizeRendering(s.renderSegs.bind(s,"businessHours"),s.unrender.bind(s,"businessHours"),[l]),i.renderDateSelection=t.memoizeRendering(s.renderSegs.bind(s,"highlight"),s.unrender.bind(s,"highlight"),[l]),i.renderBgEvents=t.memoizeRendering(s.renderSegs.bind(s,"bgEvent"),s.unrender.bind(s,"bgEvent"),[l]),i.renderFgEvents=t.memoizeRendering(o.renderSegs.bind(o),o.unrender.bind(o),[l]),i.renderEventSelection=t.memoizeRendering(o.selectByInstanceId.bind(o),o.unselectByInstanceId.bind(o),[i.renderFgEvents]),i.renderEventDrag=t.memoizeRendering(i._renderEventDrag,i._unrenderEventDrag,[l]),i.renderEventResize=t.memoizeRendering(i._renderEventResize,i._unrenderEventResize,[l]),i}return n(r,e),r.prototype.render=function(e,t){var r=e.cells;this.rowCnt=r.length,this.colCnt=r[0].length,this.renderCells(r,e.isRigid),this.renderBusinessHours(t,e.businessHourSegs),this.renderDateSelection(t,e.dateSelectionSegs),this.renderBgEvents(t,e.bgEventSegs),this.renderFgEvents(t,e.fgEventSegs),this.renderEventSelection(e.eventSelection),this.renderEventDrag(e.eventDrag),this.renderEventResize(e.eventResize),this.segPopoverTile&&this.updateSegPopoverTile()},r.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderCells.unrender()},r.prototype.getCellRange=function(e,r){var n=this.props.cells[e][r].date;return{start:n,end:t.addDays(n,1)}},r.prototype.updateSegPopoverTile=function(e,t){var r=this.props;this.segPopoverTile.receiveProps({date:e||this.segPopoverTile.props.date,fgSegs:t||this.segPopoverTile.props.fgSegs,eventSelection:r.eventSelection,eventDragInstances:r.eventDrag?r.eventDrag.affectedInstances:null,eventResizeInstances:r.eventResize?r.eventResize.affectedInstances:null},this.context)},r.prototype._renderCells=function(e,r){var n,i,o=this.context,s=o.calendar,l=o.view,a=o.isRtl,d=o.dateEnv,c=this.rowCnt,h=this.colCnt,p="";for(n=0;n<c;n++)p+=this.renderDayRowHtml(n,r);for(this.el.innerHTML=p,this.rowEls=t.findElements(this.el,".fc-row"),this.cellEls=t.findElements(this.el,".fc-day, .fc-disabled-day"),a&&this.cellEls.reverse(),this.rowPositions=new t.PositionCache(this.el,this.rowEls,!1,!0),this.colPositions=new t.PositionCache(this.el,this.cellEls.slice(0,h),!0,!1),n=0;n<c;n++)for(i=0;i<h;i++)s.publiclyTrigger("dayRender",[{date:d.toDate(e[n][i].date),el:this.getCellEl(n,i),view:l}]);this.isCellSizesDirty=!0},r.prototype._unrenderCells=function(){this.removeSegPopover()},r.prototype.renderDayRowHtml=function(e,t){var r=this.context.theme,n=["fc-row","fc-week",r.getClass("dayRow")];t&&n.push("fc-rigid");var i=new m(this.context);return'<div class="'+n.join(" ")+'"><div class="fc-bg"><table class="'+r.getClass("tableGrid")+'">'+i.renderHtml({cells:this.props.cells[e],dateProfile:this.props.dateProfile,renderIntroHtml:this.renderProps.renderBgIntroHtml})+'</table></div><div class="fc-content-skeleton"><table>'+(this.getIsNumbersVisible()?"<thead>"+this.renderNumberTrHtml(e)+"</thead>":"")+"</table></div></div>"},r.prototype.getIsNumbersVisible=function(){return this.getIsDayNumbersVisible()||this.renderProps.cellWeekNumbersVisible||this.renderProps.colWeekNumbersVisible},r.prototype.getIsDayNumbersVisible=function(){return this.rowCnt>1},r.prototype.renderNumberTrHtml=function(e){var t=this.context.isRtl,r=this.renderProps.renderNumberIntroHtml(e,this);return"<tr>"+(t?"":r)+this.renderNumberCellsHtml(e)+(t?r:"")+"</tr>"},r.prototype.renderNumberCellsHtml=function(e){var t,r,n=[];for(t=0;t<this.colCnt;t++)r=this.props.cells[e][t].date,n.push(this.renderNumberCellHtml(r));return this.context.isRtl&&n.reverse(),n.join("")},r.prototype.renderNumberCellHtml=function(e){var r,n,i=this.context,o=i.dateEnv,s=i.options,l="",a=t.rangeContainsMarker(this.props.dateProfile.activeRange,e),d=this.getIsDayNumbersVisible()&&a;return d||this.renderProps.cellWeekNumbersVisible?((r=t.getDayClasses(e,this.props.dateProfile,this.context)).unshift("fc-day-top"),this.renderProps.cellWeekNumbersVisible&&(n=o.weekDow),l+='<td class="'+r.join(" ")+'"'+(a?' data-date="'+o.formatIso(e,{omitTime:!0})+'"':"")+">",this.renderProps.cellWeekNumbersVisible&&e.getUTCDay()===n&&(l+=t.buildGotoAnchorHtml(s,o,{date:e,type:"week"},{class:"fc-week-number"},o.format(e,v))),d&&(l+=t.buildGotoAnchorHtml(s,o,e,{class:"fc-day-number"},o.format(e,y))),l+="</td>"):"<td></td>"},r.prototype.updateSize=function(e){var t=this.context.calendar,r=this.fillRenderer,n=this.eventRenderer,i=this.mirrorRenderer;(e||this.isCellSizesDirty||t.isEventsUpdated)&&(this.buildPositionCaches(),this.isCellSizesDirty=!1),r.computeSizes(e),n.computeSizes(e),i.computeSizes(e),r.assignSizes(e),n.assignSizes(e),i.assignSizes(e)},r.prototype.buildPositionCaches=function(){this.buildColPositions(),this.buildRowPositions()},r.prototype.buildColPositions=function(){this.colPositions.build()},r.prototype.buildRowPositions=function(){this.rowPositions.build(),this.rowPositions.bottoms[this.rowCnt-1]+=this.bottomCoordPadding},r.prototype.positionToHit=function(e,t){var r=this.colPositions,n=this.rowPositions,i=r.leftToIndex(e),o=n.topToIndex(t);if(null!=o&&null!=i)return{row:o,col:i,dateSpan:{range:this.getCellRange(o,i),allDay:!0},dayEl:this.getCellEl(o,i),relativeRect:{left:r.lefts[i],right:r.rights[i],top:n.tops[o],bottom:n.bottoms[o]}}},r.prototype.getCellEl=function(e,t){return this.cellEls[e*this.colCnt+t]},r.prototype._renderEventDrag=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),this.fillRenderer.renderSegs("highlight",this.context,e.segs))},r.prototype._unrenderEventDrag=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.fillRenderer.unrender("highlight",this.context))},r.prototype._renderEventResize=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),this.fillRenderer.renderSegs("highlight",this.context,e.segs),this.mirrorRenderer.renderSegs(this.context,e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},r.prototype._unrenderEventResize=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.fillRenderer.unrender("highlight",this.context),this.mirrorRenderer.unrender(this.context,e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},r.prototype.removeSegPopover=function(){this.segPopover&&this.segPopover.hide()},r.prototype.limitRows=function(e){var t,r,n=this.eventRenderer.rowStructs||[];for(t=0;t<n.length;t++)this.unlimitRow(t),!1!==(r=!!e&&("number"==typeof e?e:this.computeRowLevelLimit(t)))&&this.limitRow(t,r)},r.prototype.computeRowLevelLimit=function(e){var r,n,i=this.rowEls[e].getBoundingClientRect().bottom,o=t.findChildren(this.eventRenderer.rowStructs[e].tbodyEl);for(r=0;r<o.length;r++)if((n=o[r]).classList.remove("fc-limited"),n.getBoundingClientRect().bottom>i)return r;return!1},r.prototype.limitRow=function(e,r){var n,i,o,s,l,a,d,c,h,p,u,f,m,g,y,v=this,b=this.colCnt,S=this.context.isRtl,w=this.eventRenderer.rowStructs[e],C=[],E=0,R=function(n){for(;E<n;)(a=v.getCellSegs(e,E,r)).length&&(h=i[r-1][E],y=v.renderMoreLink(e,E,a),g=t.createElement("div",null,y),h.appendChild(g),C.push(g)),E++};if(r&&r<w.segLevels.length){for(n=w.segLevels[r-1],i=w.cellMatrix,(o=t.findChildren(w.tbodyEl).slice(r)).forEach((function(e){e.classList.add("fc-limited")})),s=0;s<n.length;s++){l=n[s];var H=S?b-1-l.lastCol:l.firstCol,k=S?b-1-l.firstCol:l.lastCol;for(R(H),c=[],d=0;E<=k;)a=this.getCellSegs(e,E,r),c.push(a),d+=a.length,E++;if(d){for(p=(h=i[r-1][H]).rowSpan||1,u=[],f=0;f<c.length;f++)m=t.createElement("td",{className:"fc-more-cell",rowSpan:p}),a=c[f],y=this.renderMoreLink(e,H+f,[l].concat(a)),g=t.createElement("div",null,y),m.appendChild(g),u.push(m),C.push(m);h.classList.add("fc-limited"),t.insertAfterElement(h,u),o.push(h)}}R(this.colCnt),w.moreEls=C,w.limitedEls=o}},r.prototype.unlimitRow=function(e){var r=this.eventRenderer.rowStructs[e];r.moreEls&&(r.moreEls.forEach(t.removeElement),r.moreEls=null),r.limitedEls&&(r.limitedEls.forEach((function(e){e.classList.remove("fc-limited")})),r.limitedEls=null)},r.prototype.renderMoreLink=function(e,r,n){var i=this,o=this.context,s=o.calendar,l=o.view,a=o.dateEnv,d=o.options,c=o.isRtl,h=t.createElement("a",{className:"fc-more"});return h.innerText=this.getMoreLinkText(n.length),h.addEventListener("click",(function(t){var o=d.eventLimitClick,h=c?i.colCnt-r-1:r,p=i.props.cells[e][h].date,u=t.currentTarget,f=i.getCellEl(e,r),m=i.getCellSegs(e,r),g=i.resliceDaySegs(m,p),y=i.resliceDaySegs(n,p);"function"==typeof o&&(o=s.publiclyTrigger("eventLimitClick",[{date:a.toDate(p),allDay:!0,dayEl:f,moreEl:u,segs:g,hiddenSegs:y,jsEvent:t,view:l}])),"popover"===o?i.showSegPopover(e,r,u,g):"string"==typeof o&&s.zoomTo(p,o)})),h},r.prototype.showSegPopover=function(e,r,n,i){var o,l,a=this,d=this.context,c=d.calendar,h=d.view,p=d.theme,f=d.isRtl,m=f?this.colCnt-r-1:r,g=n.parentNode;o=1===this.rowCnt?h.el:this.rowEls[e],l={className:"fc-more-popover "+p.getClass("popover"),parentEl:h.el,top:t.computeRect(o).top,autoHide:!0,content:function(t){a.segPopoverTile=new u(t),a.updateSegPopoverTile(a.props.cells[e][m].date,i)},hide:function(){a.segPopoverTile.destroy(),a.segPopoverTile=null,a.segPopover.destroy(),a.segPopover=null}},f?l.right=t.computeRect(g).right+1:l.left=t.computeRect(g).left-1,this.segPopover=new s(l),this.segPopover.show(),c.releaseAfterSizingTriggers()},r.prototype.resliceDaySegs=function(e,r){for(var n=r,o={start:n,end:t.addDays(n,1)},s=[],l=0,a=e;l<a.length;l++){var d=a[l],c=d.eventRange,h=c.range,p=t.intersectRanges(h,o);p&&s.push(i({},d,{eventRange:{def:c.def,ui:i({},c.ui,{durationEditable:!1}),instance:c.instance,range:p},isStart:d.isStart&&p.start.valueOf()===h.start.valueOf(),isEnd:d.isEnd&&p.end.valueOf()===h.end.valueOf()}))}return s},r.prototype.getMoreLinkText=function(e){var t=this.context.options.eventLimitText;return"function"==typeof t?t(e):"+"+e+" "+t},r.prototype.getCellSegs=function(e,t,r){for(var n,i=this.eventRenderer.rowStructs[e].segMatrix,o=r||0,s=[];o<i.length;)(n=i[o][t])&&s.push(n),o++;return s},r}(t.DateComponent),S=t.createFormatter({week:"numeric"}),w=function(e){function r(){var r=null!==e&&e.apply(this,arguments)||this;return r.processOptions=t.memoize(r._processOptions),r.renderSkeleton=t.memoizeRendering(r._renderSkeleton,r._unrenderSkeleton),r.renderHeadIntroHtml=function(){var e=r.context,n=e.theme,i=e.options;return r.colWeekNumbersVisible?'<th class="fc-week-number '+n.getClass("widgetHeader")+'" '+r.weekNumberStyleAttr()+"><span>"+t.htmlEscape(i.weekLabel)+"</span></th>":""},r.renderDayGridNumberIntroHtml=function(e,n){var i=r.context,o=i.options,s=i.dateEnv,l=n.props.cells[e][0].date;return r.colWeekNumbersVisible?'<td class="fc-week-number" '+r.weekNumberStyleAttr()+">"+t.buildGotoAnchorHtml(o,s,{date:l,type:"week",forceOff:1===n.colCnt},s.format(l,S))+"</td>":""},r.renderDayGridBgIntroHtml=function(){var e=r.context.theme;return r.colWeekNumbersVisible?'<td class="fc-week-number '+e.getClass("widgetContent")+'" '+r.weekNumberStyleAttr()+"></td>":""},r.renderDayGridIntroHtml=function(){return r.colWeekNumbersVisible?'<td class="fc-week-number" '+r.weekNumberStyleAttr()+"></td>":""},r}return n(r,e),r.prototype._processOptions=function(e){e.weekNumbers?e.weekNumbersWithinDays?(this.cellWeekNumbersVisible=!0,this.colWeekNumbersVisible=!1):(this.cellWeekNumbersVisible=!1,this.colWeekNumbersVisible=!0):(this.colWeekNumbersVisible=!1,this.cellWeekNumbersVisible=!1)},r.prototype.render=function(t,r){e.prototype.render.call(this,t,r),this.processOptions(r.options),this.renderSkeleton(r)},r.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSkeleton.unrender()},r.prototype._renderSkeleton=function(e){this.el.classList.add("fc-dayGrid-view"),this.el.innerHTML=this.renderSkeletonHtml(),this.scroller=new t.ScrollComponent("hidden","auto");var r=this.scroller.el;this.el.querySelector(".fc-body > tr > td").appendChild(r),r.classList.add("fc-day-grid-container");var n=t.createElement("div",{className:"fc-day-grid"});r.appendChild(n),this.dayGrid=new b(n,{renderNumberIntroHtml:this.renderDayGridNumberIntroHtml,renderBgIntroHtml:this.renderDayGridBgIntroHtml,renderIntroHtml:this.renderDayGridIntroHtml,colWeekNumbersVisible:this.colWeekNumbersVisible,cellWeekNumbersVisible:this.cellWeekNumbersVisible})},r.prototype._unrenderSkeleton=function(){this.el.classList.remove("fc-dayGrid-view"),this.dayGrid.destroy(),this.scroller.destroy()},r.prototype.renderSkeletonHtml=function(){var e=this.context,t=e.theme,r=e.options;return'<table class="'+t.getClass("tableGrid")+'">'+(r.columnHeader?'<thead class="fc-head"><tr><td class="fc-head-container '+t.getClass("widgetHeader")+'">&nbsp;</td></tr></thead>':"")+'<tbody class="fc-body"><tr><td class="'+t.getClass("widgetContent")+'"></td></tr></tbody></table>'},r.prototype.weekNumberStyleAttr=function(){return null!=this.weekNumberWidth?'style="width:'+this.weekNumberWidth+'px"':""},r.prototype.hasRigidRows=function(){var e=this.context.options.eventLimit;return e&&"number"!=typeof e},r.prototype.updateSize=function(t,r,n){e.prototype.updateSize.call(this,t,r,n),this.dayGrid.updateSize(t)},r.prototype.updateBaseSize=function(e,r,n){var i,o,s=this.dayGrid,l=this.context.options.eventLimit,a=this.header?this.header.el:null;s.rowEls?(this.colWeekNumbersVisible&&(this.weekNumberWidth=t.matchCellWidths(t.findElements(this.el,".fc-week-number"))),this.scroller.clear(),a&&t.uncompensateScroll(a),s.removeSegPopover(),l&&"number"==typeof l&&s.limitRows(l),i=this.computeScrollerHeight(r),this.setGridHeight(i,n),l&&"number"!=typeof l&&s.limitRows(l),n||(this.scroller.setHeight(i),((o=this.scroller.getScrollbarWidths()).left||o.right)&&(a&&t.compensateScroll(a,o),i=this.computeScrollerHeight(r),this.scroller.setHeight(i)),this.scroller.lockOverflow(o))):n||(i=this.computeScrollerHeight(r),this.scroller.setHeight(i))},r.prototype.computeScrollerHeight=function(e){return e-t.subtractInnerElHeight(this.el,this.scroller.el)},r.prototype.setGridHeight=function(e,r){this.context.options.monthMode?(r&&(e*=this.dayGrid.rowCnt/6),t.distributeHeight(this.dayGrid.rowEls,e,!r)):r?t.undistributeHeight(this.dayGrid.rowEls):t.distributeHeight(this.dayGrid.rowEls,e,!0)},r.prototype.computeDateScroll=function(e){return{top:0}},r.prototype.queryDateScroll=function(){return{top:this.scroller.getScrollTop()}},r.prototype.applyDateScroll=function(e){void 0!==e.top&&this.scroller.setScrollTop(e.top)},r}(t.View);w.prototype.dateProfileGeneratorClass=o;var C=function(e){function t(t){var r=e.call(this,t.el)||this;return r.slicer=new E,r.dayGrid=t,r}return n(t,e),t.prototype.firstContext=function(e){e.calendar.registerInteractiveComponent(this,{el:this.dayGrid.el})},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.context.calendar.unregisterInteractiveComponent(this)},t.prototype.render=function(e,t){var r=this.dayGrid,n=e.dateProfile,o=e.dayTable;r.receiveContext(t),r.receiveProps(i({},this.slicer.sliceProps(e,n,e.nextDayThreshold,t.calendar,r,o),{dateProfile:n,cells:o.cells,isRigid:e.isRigid}),t)},t.prototype.buildPositionCaches=function(){this.dayGrid.buildPositionCaches()},t.prototype.queryHit=function(e,t){var r=this.dayGrid.positionToHit(e,t);if(r)return{component:this.dayGrid,dateSpan:r.dateSpan,dayEl:r.dayEl,rect:{left:r.relativeRect.left,right:r.relativeRect.right,top:r.relativeRect.top,bottom:r.relativeRect.bottom},layer:0}},t}(t.DateComponent),E=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.sliceRange=function(e,t){return t.sliceRange(e)},t}(t.Slicer),R=function(e){function r(){var r=null!==e&&e.apply(this,arguments)||this;return r.buildDayTable=t.memoize(H),r}return n(r,e),r.prototype.render=function(t,r){e.prototype.render.call(this,t,r);var n=this.props.dateProfile,i=this.dayTable=this.buildDayTable(n,t.dateProfileGenerator);this.header&&this.header.receiveProps({dateProfile:n,dates:i.headerDates,datesRepDistinctDays:1===i.rowCnt,renderIntroHtml:this.renderHeadIntroHtml},r),this.simpleDayGrid.receiveProps({dateProfile:n,dayTable:i,businessHours:t.businessHours,dateSelection:t.dateSelection,eventStore:t.eventStore,eventUiBases:t.eventUiBases,eventSelection:t.eventSelection,eventDrag:t.eventDrag,eventResize:t.eventResize,isRigid:this.hasRigidRows(),nextDayThreshold:this.context.nextDayThreshold},r)},r.prototype._renderSkeleton=function(r){e.prototype._renderSkeleton.call(this,r),r.options.columnHeader&&(this.header=new t.DayHeader(this.el.querySelector(".fc-head-container"))),this.simpleDayGrid=new C(this.dayGrid)},r.prototype._unrenderSkeleton=function(){e.prototype._unrenderSkeleton.call(this),this.header&&this.header.destroy(),this.simpleDayGrid.destroy()},r}(w);function H(e,r){var n=new t.DaySeries(e.renderRange,r);return new t.DayTable(n,/year|month|week/.test(e.currentRangeUnit))}var k=t.createPlugin({defaultView:"dayGridMonth",views:{dayGrid:R,dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},monthMode:!0,fixedWeekCount:!0}}});e.AbstractDayGridView=w,e.DayBgRow=m,e.DayGrid=b,e.DayGridSlicer=E,e.DayGridView=R,e.SimpleDayGrid=C,e.buildBasicDayTable=H,e.default=k,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/daygrid/package.json b/library/fullcalendar/packages/daygrid/package.json
deleted file mode 100644
index 0db9794e5..000000000
--- a/library/fullcalendar/packages/daygrid/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "@fullcalendar/daygrid",
- "version": "4.4.2",
- "title": "FullCalendar Day Grid Plugin",
- "description": "Display events on Month view or DayGrid view",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/month-view",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/google-calendar/LICENSE.txt b/library/fullcalendar/packages/google-calendar/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/google-calendar/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/google-calendar/README.md b/library/fullcalendar/packages/google-calendar/README.md
deleted file mode 100644
index a4d6c5cc0..000000000
--- a/library/fullcalendar/packages/google-calendar/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar Google Calendar Plugin
-
-Fetch events from a public Google Calendar feed
-
-[View the docs &raquo;](https://fullcalendar.io/docs/google-calendar)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/google-calendar/index.global.js b/library/fullcalendar/packages/google-calendar/index.global.js
new file mode 100644
index 000000000..4e091c1d6
--- /dev/null
+++ b/library/fullcalendar/packages/google-calendar/index.global.js
@@ -0,0 +1,150 @@
+/*!
+FullCalendar Google Calendar Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/google-calendar
+(c) 2022 Adam Shaw
+*/
+FullCalendar.GoogleCalendar = (function (exports, core, internal) {
+ 'use strict';
+
+ // TODO: expose somehow
+ const API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';
+ const eventSourceDef = {
+ parseMeta(refined) {
+ let { googleCalendarId } = refined;
+ if (!googleCalendarId && refined.url) {
+ googleCalendarId = parseGoogleCalendarId(refined.url);
+ }
+ if (googleCalendarId) {
+ return {
+ googleCalendarId,
+ googleCalendarApiKey: refined.googleCalendarApiKey,
+ googleCalendarApiBase: refined.googleCalendarApiBase,
+ extraParams: refined.extraParams,
+ };
+ }
+ return null;
+ },
+ fetch(arg, successCallback, errorCallback) {
+ let { dateEnv, options } = arg.context;
+ let meta = arg.eventSource.meta;
+ let apiKey = meta.googleCalendarApiKey || options.googleCalendarApiKey;
+ if (!apiKey) {
+ errorCallback(new Error('Specify a googleCalendarApiKey. See https://fullcalendar.io/docs/google-calendar'));
+ }
+ else {
+ let url = buildUrl(meta);
+ // TODO: make DRY with json-feed-event-source
+ let { extraParams } = meta;
+ let extraParamsObj = typeof extraParams === 'function' ? extraParams() : extraParams;
+ let requestParams = buildRequestParams(arg.range, apiKey, extraParamsObj, dateEnv);
+ return internal.requestJson('GET', url, requestParams).then(([body, response]) => {
+ if (body.error) {
+ errorCallback(new core.JsonRequestError('Google Calendar API: ' + body.error.message, response));
+ }
+ else {
+ successCallback({
+ rawEvents: gcalItemsToRawEventDefs(body.items, requestParams.timeZone),
+ response,
+ });
+ }
+ }, errorCallback);
+ }
+ },
+ };
+ function parseGoogleCalendarId(url) {
+ let match;
+ // detect if the ID was specified as a single string.
+ // will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars.
+ if (/^[^/]+@([^/.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) {
+ return url;
+ }
+ if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^/]*)/.exec(url)) ||
+ (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^/]*)/.exec(url))) {
+ return decodeURIComponent(match[1]);
+ }
+ return null;
+ }
+ function buildUrl(meta) {
+ let apiBase = meta.googleCalendarApiBase;
+ if (!apiBase) {
+ apiBase = API_BASE;
+ }
+ return apiBase + '/' + encodeURIComponent(meta.googleCalendarId) + '/events';
+ }
+ function buildRequestParams(range, apiKey, extraParams, dateEnv) {
+ let params;
+ let startStr;
+ let endStr;
+ if (dateEnv.canComputeOffset) {
+ // strings will naturally have offsets, which GCal needs
+ startStr = dateEnv.formatIso(range.start);
+ endStr = dateEnv.formatIso(range.end);
+ }
+ else {
+ // when timezone isn't known, we don't know what the UTC offset should be, so ask for +/- 1 day
+ // from the UTC day-start to guarantee we're getting all the events
+ // (start/end will be UTC-coerced dates, so toISOString is okay)
+ startStr = internal.addDays(range.start, -1).toISOString();
+ endStr = internal.addDays(range.end, 1).toISOString();
+ }
+ params = Object.assign(Object.assign({}, (extraParams || {})), { key: apiKey, timeMin: startStr, timeMax: endStr, singleEvents: true, maxResults: 9999 });
+ if (dateEnv.timeZone !== 'local') {
+ params.timeZone = dateEnv.timeZone;
+ }
+ return params;
+ }
+ function gcalItemsToRawEventDefs(items, gcalTimezone) {
+ return items.map((item) => gcalItemToRawEventDef(item, gcalTimezone));
+ }
+ function gcalItemToRawEventDef(item, gcalTimezone) {
+ let url = item.htmlLink || null;
+ // make the URLs for each event show times in the correct timezone
+ if (url && gcalTimezone) {
+ url = injectQsComponent(url, 'ctz=' + gcalTimezone);
+ }
+ return {
+ id: item.id,
+ title: item.summary,
+ start: item.start.dateTime || item.start.date,
+ end: item.end.dateTime || item.end.date,
+ url,
+ location: item.location,
+ description: item.description,
+ attachments: item.attachments || [],
+ extendedProps: (item.extendedProperties || {}).shared || {},
+ };
+ }
+ // Injects a string like "arg=value" into the querystring of a URL
+ // TODO: move to a general util file?
+ function injectQsComponent(url, component) {
+ // inject it after the querystring but before the fragment
+ return url.replace(/(\?.*?)?(#|$)/, (whole, qs, hash) => (qs ? qs + '&' : '?') + component + hash);
+ }
+
+ const OPTION_REFINERS = {
+ googleCalendarApiKey: String,
+ };
+
+ const EVENT_SOURCE_REFINERS = {
+ googleCalendarApiKey: String,
+ googleCalendarId: String,
+ googleCalendarApiBase: String,
+ extraParams: internal.identity,
+ };
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/google-calendar',
+ eventSourceDefs: [eventSourceDef],
+ optionRefiners: OPTION_REFINERS,
+ eventSourceRefiners: EVENT_SOURCE_REFINERS,
+ });
+
+ core.globalPlugins.push(plugin);
+
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal);
diff --git a/library/fullcalendar/packages/google-calendar/index.global.min.js b/library/fullcalendar/packages/google-calendar/index.global.min.js
new file mode 100644
index 000000000..7ed4c9ab0
--- /dev/null
+++ b/library/fullcalendar/packages/google-calendar/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Google Calendar Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/google-calendar
+(c) 2022 Adam Shaw
+*/
+FullCalendar.GoogleCalendar=function(e,a,t){"use strict";const n={parseMeta(e){let{googleCalendarId:a}=e;return!a&&e.url&&(a=function(e){let a;if(/^[^/]+@([^/.]+\.)*(google|googlemail|gmail)\.com$/.test(e))return e;if((a=/^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^/]*)/.exec(e))||(a=/^https?:\/\/www.google.com\/calendar\/feeds\/([^/]*)/.exec(e)))return decodeURIComponent(a[1]);return null}(e.url)),a?{googleCalendarId:a,googleCalendarApiKey:e.googleCalendarApiKey,googleCalendarApiBase:e.googleCalendarApiBase,extraParams:e.extraParams}:null},fetch(e,n,r){let{dateEnv:o,options:l}=e.context,s=e.eventSource.meta,i=s.googleCalendarApiKey||l.googleCalendarApiKey;if(i){let l=function(e){let a=e.googleCalendarApiBase;a||(a="https://www.googleapis.com/calendar/v3/calendars");return a+"/"+encodeURIComponent(e.googleCalendarId)+"/events"}(s),{extraParams:d}=s,g="function"==typeof d?d():d,c=function(e,a,n,r){let o,l,s;r.canComputeOffset?(l=r.formatIso(e.start),s=r.formatIso(e.end)):(l=t.addDays(e.start,-1).toISOString(),s=t.addDays(e.end,1).toISOString());o=Object.assign(Object.assign({},n||{}),{key:a,timeMin:l,timeMax:s,singleEvents:!0,maxResults:9999}),"local"!==r.timeZone&&(o.timeZone=r.timeZone);return o}(e.range,i,g,o);return t.requestJson("GET",l,c).then(([e,t])=>{var o,l;e.error?r(new a.JsonRequestError("Google Calendar API: "+e.error.message,t)):n({rawEvents:(o=e.items,l=c.timeZone,o.map(e=>function(e,a){let t=e.htmlLink||null;t&&a&&(t=function(e,a){return e.replace(/(\?.*?)?(#|$)/,(e,t,n)=>(t?t+"&":"?")+a+n)}(t,"ctz="+a));return{id:e.id,title:e.summary,start:e.start.dateTime||e.start.date,end:e.end.dateTime||e.end.date,url:t,location:e.location,description:e.description,attachments:e.attachments||[],extendedProps:(e.extendedProperties||{}).shared||{}}}(e,l))),response:t})},r)}r(new Error("Specify a googleCalendarApiKey. See https://fullcalendar.io/docs/google-calendar"))}};const r={googleCalendarApiKey:String},o={googleCalendarApiKey:String,googleCalendarId:String,googleCalendarApiBase:String,extraParams:t.identity};var l=a.createPlugin({name:"@fullcalendar/google-calendar",eventSourceDefs:[n],optionRefiners:r,eventSourceRefiners:o});return a.globalPlugins.push(l),e.default=l,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/google-calendar/main.d.ts b/library/fullcalendar/packages/google-calendar/main.d.ts
deleted file mode 100644
index 1ed96f778..000000000
--- a/library/fullcalendar/packages/google-calendar/main.d.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// main.d.ts
-
-declare module '@fullcalendar/google-calendar' {
- module '@fullcalendar/core' {
- interface OptionsInput {
- googleCalendarApiKey?: string;
- }
- }
- module '@fullcalendar/core/structs/event-source' {
- interface ExtendedEventSourceInput {
- googleCalendarApiKey?: string;
- googleCalendarId?: string;
- googleCalendarApiBase?: string;
- }
- }
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
-}
-
diff --git a/library/fullcalendar/packages/google-calendar/main.esm.js b/library/fullcalendar/packages/google-calendar/main.esm.js
deleted file mode 100644
index 58cb94106..000000000
--- a/library/fullcalendar/packages/google-calendar/main.esm.js
+++ /dev/null
@@ -1,167 +0,0 @@
-/*!
-FullCalendar Google Calendar Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { createPlugin, refineProps, requestJson, addDays } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
-};
-
-// TODO: expose somehow
-var API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';
-var STANDARD_PROPS = {
- url: String,
- googleCalendarApiKey: String,
- googleCalendarId: String,
- googleCalendarApiBase: String,
- data: null
-};
-var eventSourceDef = {
- parseMeta: function (raw) {
- if (typeof raw === 'string') {
- raw = { url: raw };
- }
- if (typeof raw === 'object') {
- var standardProps = refineProps(raw, STANDARD_PROPS);
- if (!standardProps.googleCalendarId && standardProps.url) {
- standardProps.googleCalendarId = parseGoogleCalendarId(standardProps.url);
- }
- delete standardProps.url;
- if (standardProps.googleCalendarId) {
- return standardProps;
- }
- }
- return null;
- },
- fetch: function (arg, onSuccess, onFailure) {
- var calendar = arg.calendar;
- var meta = arg.eventSource.meta;
- var apiKey = meta.googleCalendarApiKey || calendar.opt('googleCalendarApiKey');
- if (!apiKey) {
- onFailure({
- message: 'Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/'
- });
- }
- else {
- var url = buildUrl(meta);
- var requestParams_1 = buildRequestParams(arg.range, apiKey, meta.data, calendar.dateEnv);
- requestJson('GET', url, requestParams_1, function (body, xhr) {
- if (body.error) {
- onFailure({
- message: 'Google Calendar API: ' + body.error.message,
- errors: body.error.errors,
- xhr: xhr
- });
- }
- else {
- onSuccess({
- rawEvents: gcalItemsToRawEventDefs(body.items, requestParams_1.timeZone),
- xhr: xhr
- });
- }
- }, function (message, xhr) {
- onFailure({ message: message, xhr: xhr });
- });
- }
- }
-};
-function parseGoogleCalendarId(url) {
- var match;
- // detect if the ID was specified as a single string.
- // will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars.
- if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) {
- return url;
- }
- else if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) ||
- (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))) {
- return decodeURIComponent(match[1]);
- }
-}
-function buildUrl(meta) {
- var apiBase = meta.googleCalendarApiBase;
- if (!apiBase) {
- apiBase = API_BASE;
- }
- return apiBase + '/' + encodeURIComponent(meta.googleCalendarId) + '/events';
-}
-function buildRequestParams(range, apiKey, extraParams, dateEnv) {
- var params;
- var startStr;
- var endStr;
- if (dateEnv.canComputeOffset) {
- // strings will naturally have offsets, which GCal needs
- startStr = dateEnv.formatIso(range.start);
- endStr = dateEnv.formatIso(range.end);
- }
- else {
- // when timezone isn't known, we don't know what the UTC offset should be, so ask for +/- 1 day
- // from the UTC day-start to guarantee we're getting all the events
- // (start/end will be UTC-coerced dates, so toISOString is okay)
- startStr = addDays(range.start, -1).toISOString();
- endStr = addDays(range.end, 1).toISOString();
- }
- params = __assign({}, (extraParams || {}), { key: apiKey, timeMin: startStr, timeMax: endStr, singleEvents: true, maxResults: 9999 });
- if (dateEnv.timeZone !== 'local') {
- params.timeZone = dateEnv.timeZone;
- }
- return params;
-}
-function gcalItemsToRawEventDefs(items, gcalTimezone) {
- return items.map(function (item) {
- return gcalItemToRawEventDef(item, gcalTimezone);
- });
-}
-function gcalItemToRawEventDef(item, gcalTimezone) {
- var url = item.htmlLink || null;
- // make the URLs for each event show times in the correct timezone
- if (url && gcalTimezone) {
- url = injectQsComponent(url, 'ctz=' + gcalTimezone);
- }
- return {
- id: item.id,
- title: item.summary,
- start: item.start.dateTime || item.start.date,
- end: item.end.dateTime || item.end.date,
- url: url,
- location: item.location,
- description: item.description
- };
-}
-// Injects a string like "arg=value" into the querystring of a URL
-// TODO: move to a general util file?
-function injectQsComponent(url, component) {
- // inject it after the querystring but before the fragment
- return url.replace(/(\?.*?)?(#|$)/, function (whole, qs, hash) {
- return (qs ? qs + '&' : '?') + component + hash;
- });
-}
-var main = createPlugin({
- eventSourceDefs: [eventSourceDef]
-});
-
-export default main;
diff --git a/library/fullcalendar/packages/google-calendar/main.js b/library/fullcalendar/packages/google-calendar/main.js
deleted file mode 100644
index adf80e6a7..000000000
--- a/library/fullcalendar/packages/google-calendar/main.js
+++ /dev/null
@@ -1,175 +0,0 @@
-/*!
-FullCalendar Google Calendar Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
- typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
- (global = global || self, factory(global.FullCalendarGoogleCalendar = {}, global.FullCalendar));
-}(this, function (exports, core) { 'use strict';
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
-
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
-
- // TODO: expose somehow
- var API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';
- var STANDARD_PROPS = {
- url: String,
- googleCalendarApiKey: String,
- googleCalendarId: String,
- googleCalendarApiBase: String,
- data: null
- };
- var eventSourceDef = {
- parseMeta: function (raw) {
- if (typeof raw === 'string') {
- raw = { url: raw };
- }
- if (typeof raw === 'object') {
- var standardProps = core.refineProps(raw, STANDARD_PROPS);
- if (!standardProps.googleCalendarId && standardProps.url) {
- standardProps.googleCalendarId = parseGoogleCalendarId(standardProps.url);
- }
- delete standardProps.url;
- if (standardProps.googleCalendarId) {
- return standardProps;
- }
- }
- return null;
- },
- fetch: function (arg, onSuccess, onFailure) {
- var calendar = arg.calendar;
- var meta = arg.eventSource.meta;
- var apiKey = meta.googleCalendarApiKey || calendar.opt('googleCalendarApiKey');
- if (!apiKey) {
- onFailure({
- message: 'Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/'
- });
- }
- else {
- var url = buildUrl(meta);
- var requestParams_1 = buildRequestParams(arg.range, apiKey, meta.data, calendar.dateEnv);
- core.requestJson('GET', url, requestParams_1, function (body, xhr) {
- if (body.error) {
- onFailure({
- message: 'Google Calendar API: ' + body.error.message,
- errors: body.error.errors,
- xhr: xhr
- });
- }
- else {
- onSuccess({
- rawEvents: gcalItemsToRawEventDefs(body.items, requestParams_1.timeZone),
- xhr: xhr
- });
- }
- }, function (message, xhr) {
- onFailure({ message: message, xhr: xhr });
- });
- }
- }
- };
- function parseGoogleCalendarId(url) {
- var match;
- // detect if the ID was specified as a single string.
- // will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars.
- if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) {
- return url;
- }
- else if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) ||
- (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))) {
- return decodeURIComponent(match[1]);
- }
- }
- function buildUrl(meta) {
- var apiBase = meta.googleCalendarApiBase;
- if (!apiBase) {
- apiBase = API_BASE;
- }
- return apiBase + '/' + encodeURIComponent(meta.googleCalendarId) + '/events';
- }
- function buildRequestParams(range, apiKey, extraParams, dateEnv) {
- var params;
- var startStr;
- var endStr;
- if (dateEnv.canComputeOffset) {
- // strings will naturally have offsets, which GCal needs
- startStr = dateEnv.formatIso(range.start);
- endStr = dateEnv.formatIso(range.end);
- }
- else {
- // when timezone isn't known, we don't know what the UTC offset should be, so ask for +/- 1 day
- // from the UTC day-start to guarantee we're getting all the events
- // (start/end will be UTC-coerced dates, so toISOString is okay)
- startStr = core.addDays(range.start, -1).toISOString();
- endStr = core.addDays(range.end, 1).toISOString();
- }
- params = __assign({}, (extraParams || {}), { key: apiKey, timeMin: startStr, timeMax: endStr, singleEvents: true, maxResults: 9999 });
- if (dateEnv.timeZone !== 'local') {
- params.timeZone = dateEnv.timeZone;
- }
- return params;
- }
- function gcalItemsToRawEventDefs(items, gcalTimezone) {
- return items.map(function (item) {
- return gcalItemToRawEventDef(item, gcalTimezone);
- });
- }
- function gcalItemToRawEventDef(item, gcalTimezone) {
- var url = item.htmlLink || null;
- // make the URLs for each event show times in the correct timezone
- if (url && gcalTimezone) {
- url = injectQsComponent(url, 'ctz=' + gcalTimezone);
- }
- return {
- id: item.id,
- title: item.summary,
- start: item.start.dateTime || item.start.date,
- end: item.end.dateTime || item.end.date,
- url: url,
- location: item.location,
- description: item.description
- };
- }
- // Injects a string like "arg=value" into the querystring of a URL
- // TODO: move to a general util file?
- function injectQsComponent(url, component) {
- // inject it after the querystring but before the fragment
- return url.replace(/(\?.*?)?(#|$)/, function (whole, qs, hash) {
- return (qs ? qs + '&' : '?') + component + hash;
- });
- }
- var main = core.createPlugin({
- eventSourceDefs: [eventSourceDef]
- });
-
- exports.default = main;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/google-calendar/main.min.js b/library/fullcalendar/packages/google-calendar/main.min.js
deleted file mode 100644
index 63ee15585..000000000
--- a/library/fullcalendar/packages/google-calendar/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar Google Calendar Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],r):r((e=e||self).FullCalendarGoogleCalendar={},e.FullCalendar)}(this,(function(e,r){"use strict";var n=function(){return(n=Object.assign||function(e){for(var r,n=1,t=arguments.length;n<t;n++)for(var a in r=arguments[n])Object.prototype.hasOwnProperty.call(r,a)&&(e[a]=r[a]);return e}).apply(this,arguments)},t={url:String,googleCalendarApiKey:String,googleCalendarId:String,googleCalendarApiBase:String,data:null},a={parseMeta:function(e){if("string"==typeof e&&(e={url:e}),"object"==typeof e){var n=r.refineProps(e,t);if(!n.googleCalendarId&&n.url&&(n.googleCalendarId=function(e){var r;if(/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(e))return e;if((r=/^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(e))||(r=/^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(e)))return decodeURIComponent(r[1])}(n.url)),delete n.url,n.googleCalendarId)return n}return null},fetch:function(e,t,a){var o=e.calendar,l=e.eventSource.meta,i=l.googleCalendarApiKey||o.opt("googleCalendarApiKey");if(i){var d=function(e){var r=e.googleCalendarApiBase;r||(r="https://www.googleapis.com/calendar/v3/calendars");return r+"/"+encodeURIComponent(e.googleCalendarId)+"/events"}(l),s=function(e,t,a,o){var l,i,d;o.canComputeOffset?(i=o.formatIso(e.start),d=o.formatIso(e.end)):(i=r.addDays(e.start,-1).toISOString(),d=r.addDays(e.end,1).toISOString());l=n({},a||{},{key:t,timeMin:i,timeMax:d,singleEvents:!0,maxResults:9999}),"local"!==o.timeZone&&(l.timeZone=o.timeZone);return l}(e.range,i,l.data,o.dateEnv);r.requestJson("GET",d,s,(function(e,r){var n,o;e.error?a({message:"Google Calendar API: "+e.error.message,errors:e.error.errors,xhr:r}):t({rawEvents:(n=e.items,o=s.timeZone,n.map((function(e){return function(e,r){var n=e.htmlLink||null;n&&r&&(n=function(e,r){return e.replace(/(\?.*?)?(#|$)/,(function(e,n,t){return(n?n+"&":"?")+r+t}))}(n,"ctz="+r));return{id:e.id,title:e.summary,start:e.start.dateTime||e.start.date,end:e.end.dateTime||e.end.date,url:n,location:e.location,description:e.description}}(e,o)}))),xhr:r})}),(function(e,r){a({message:e,xhr:r})}))}else a({message:"Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/"})}};var o=r.createPlugin({eventSourceDefs:[a]});e.default=o,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/google-calendar/package.json b/library/fullcalendar/packages/google-calendar/package.json
deleted file mode 100644
index e701b3802..000000000
--- a/library/fullcalendar/packages/google-calendar/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "@fullcalendar/google-calendar",
- "version": "4.4.2",
- "title": "FullCalendar Google Calendar Plugin",
- "description": "Fetch events from a public Google Calendar feed",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/google-calendar",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/icalendar/index.global.js b/library/fullcalendar/packages/icalendar/index.global.js
new file mode 100644
index 000000000..c92e09e54
--- /dev/null
+++ b/library/fullcalendar/packages/icalendar/index.global.js
@@ -0,0 +1,225 @@
+/*!
+FullCalendar iCalendar Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/icalendar
+(c) 2022 Adam Shaw
+*/
+FullCalendar.ICalendar = (function (exports, core, internal, ICAL) {
+ 'use strict';
+
+ function _interopNamespace(e) {
+ if (e && e.__esModule) return e;
+ var n = Object.create(null);
+ if (e) {
+ Object.keys(e).forEach(function (k) {
+ if (k !== 'default') {
+ var d = Object.getOwnPropertyDescriptor(e, k);
+ Object.defineProperty(n, k, d.get ? d : {
+ enumerable: true,
+ get: function () { return e[k]; }
+ });
+ }
+ });
+ }
+ n["default"] = e;
+ return n;
+ }
+
+ var ICAL__namespace = /*#__PURE__*/_interopNamespace(ICAL);
+
+ /* eslint-disable */
+ class IcalExpander {
+ constructor(opts) {
+ this.maxIterations = opts.maxIterations != null ? opts.maxIterations : 1000;
+ this.skipInvalidDates = opts.skipInvalidDates != null ? opts.skipInvalidDates : false;
+ this.jCalData = ICAL__namespace.parse(opts.ics);
+ this.component = new ICAL__namespace.Component(this.jCalData);
+ this.events = this.component.getAllSubcomponents('vevent').map(vevent => new ICAL__namespace.Event(vevent));
+ if (this.skipInvalidDates) {
+ this.events = this.events.filter((evt) => {
+ try {
+ evt.startDate.toJSDate();
+ evt.endDate.toJSDate();
+ return true;
+ }
+ catch (err) {
+ // skipping events with invalid time
+ return false;
+ }
+ });
+ }
+ }
+ between(after, before) {
+ function isEventWithinRange(startTime, endTime) {
+ return (!after || endTime >= after.getTime()) &&
+ (!before || startTime <= before.getTime());
+ }
+ function getTimes(eventOrOccurrence) {
+ const startTime = eventOrOccurrence.startDate.toJSDate().getTime();
+ let endTime = eventOrOccurrence.endDate.toJSDate().getTime();
+ // If it is an all day event, the end date is set to 00:00 of the next day
+ // So we need to make it be 23:59:59 to compare correctly with the given range
+ if (eventOrOccurrence.endDate.isDate && (endTime > startTime)) {
+ endTime -= 1;
+ }
+ return { startTime, endTime };
+ }
+ const exceptions = [];
+ this.events.forEach((event) => {
+ if (event.isRecurrenceException())
+ exceptions.push(event);
+ });
+ const ret = {
+ events: [],
+ occurrences: [],
+ };
+ this.events.filter(e => !e.isRecurrenceException()).forEach((event) => {
+ const exdates = [];
+ event.component.getAllProperties('exdate').forEach((exdateProp) => {
+ const exdate = exdateProp.getFirstValue();
+ exdates.push(exdate.toJSDate().getTime());
+ });
+ // Recurring event is handled differently
+ if (event.isRecurring()) {
+ const iterator = event.iterator();
+ let next;
+ let i = 0;
+ do {
+ i += 1;
+ next = iterator.next();
+ if (next) {
+ const occurrence = event.getOccurrenceDetails(next);
+ const { startTime, endTime } = getTimes(occurrence);
+ const isOccurrenceExcluded = exdates.indexOf(startTime) !== -1;
+ // TODO check that within same day?
+ const exception = exceptions.find(ex => ex.uid === event.uid && ex.recurrenceId.toJSDate().getTime() === occurrence.startDate.toJSDate().getTime());
+ // We have passed the max date, stop
+ if (before && startTime > before.getTime())
+ break;
+ // Check that we are within our range
+ if (isEventWithinRange(startTime, endTime)) {
+ if (exception) {
+ ret.events.push(exception);
+ }
+ else if (!isOccurrenceExcluded) {
+ ret.occurrences.push(occurrence);
+ }
+ }
+ }
+ } while (next && (!this.maxIterations || i < this.maxIterations));
+ return;
+ }
+ // Non-recurring event:
+ const { startTime, endTime } = getTimes(event);
+ if (isEventWithinRange(startTime, endTime))
+ ret.events.push(event);
+ });
+ return ret;
+ }
+ before(before) {
+ return this.between(undefined, before);
+ }
+ after(after) {
+ return this.between(after);
+ }
+ all() {
+ return this.between();
+ }
+ }
+
+ const eventSourceDef = {
+ parseMeta(refined) {
+ if (refined.url && refined.format === 'ics') {
+ return {
+ url: refined.url,
+ format: 'ics',
+ };
+ }
+ return null;
+ },
+ fetch(arg, successCallback, errorCallback) {
+ let meta = arg.eventSource.meta;
+ let { internalState } = meta;
+ /*
+ NOTE: isRefetch is a HACK. we would do the recurring-expanding in a separate plugin hook,
+ but we couldn't leverage built-in allDay-guessing, among other things.
+ */
+ if (!internalState || arg.isRefetch) {
+ internalState = meta.internalState = {
+ response: null,
+ iCalExpanderPromise: fetch(meta.url, { method: 'GET' }).then((response) => {
+ return response.text().then((icsText) => {
+ internalState.response = response;
+ return new IcalExpander({
+ ics: icsText,
+ skipInvalidDates: true,
+ });
+ });
+ }),
+ };
+ }
+ internalState.iCalExpanderPromise.then((iCalExpander) => {
+ successCallback({
+ rawEvents: expandICalEvents(iCalExpander, arg.range),
+ response: internalState.response,
+ });
+ }, errorCallback);
+ },
+ };
+ function expandICalEvents(iCalExpander, range) {
+ // expand the range. because our `range` is timeZone-agnostic UTC
+ // or maybe because ical.js always produces dates in local time? i forget
+ let rangeStart = internal.addDays(range.start, -1);
+ let rangeEnd = internal.addDays(range.end, 1);
+ let iCalRes = iCalExpander.between(rangeStart, rangeEnd); // end inclusive. will give extra results
+ let expanded = [];
+ // TODO: instead of using startDate/endDate.toString to communicate allDay,
+ // we can query startDate/endDate.isDate. More efficient to avoid formatting/reparsing.
+ // single events
+ for (let iCalEvent of iCalRes.events) {
+ expanded.push(Object.assign(Object.assign({}, buildNonDateProps(iCalEvent)), { start: iCalEvent.startDate.toString(), end: (specifiesEnd(iCalEvent) && iCalEvent.endDate)
+ ? iCalEvent.endDate.toString()
+ : null }));
+ }
+ // recurring event instances
+ for (let iCalOccurence of iCalRes.occurrences) {
+ let iCalEvent = iCalOccurence.item;
+ expanded.push(Object.assign(Object.assign({}, buildNonDateProps(iCalEvent)), { start: iCalOccurence.startDate.toString(), end: (specifiesEnd(iCalEvent) && iCalOccurence.endDate)
+ ? iCalOccurence.endDate.toString()
+ : null }));
+ }
+ return expanded;
+ }
+ function buildNonDateProps(iCalEvent) {
+ return {
+ title: iCalEvent.summary,
+ url: extractEventUrl(iCalEvent),
+ extendedProps: {
+ location: iCalEvent.location,
+ organizer: iCalEvent.organizer,
+ description: iCalEvent.description,
+ },
+ };
+ }
+ function extractEventUrl(iCalEvent) {
+ let urlProp = iCalEvent.component.getFirstProperty('url');
+ return urlProp ? urlProp.getFirstValue() : '';
+ }
+ function specifiesEnd(iCalEvent) {
+ return Boolean(iCalEvent.component.getFirstProperty('dtend')) ||
+ Boolean(iCalEvent.component.getFirstProperty('duration'));
+ }
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/icalendar',
+ eventSourceDefs: [eventSourceDef],
+ });
+
+ core.globalPlugins.push(plugin);
+
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal, ICAL);
diff --git a/library/fullcalendar/packages/icalendar/index.global.min.js b/library/fullcalendar/packages/icalendar/index.global.min.js
new file mode 100644
index 000000000..01d7e81ec
--- /dev/null
+++ b/library/fullcalendar/packages/icalendar/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar iCalendar Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/icalendar
+(c) 2022 Adam Shaw
+*/
+FullCalendar.ICalendar=function(e,t,n,r){"use strict";function a(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(n){if("default"!==n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})}})),t.default=e,t}var s=a(r);class i{constructor(e){this.maxIterations=null!=e.maxIterations?e.maxIterations:1e3,this.skipInvalidDates=null!=e.skipInvalidDates&&e.skipInvalidDates,this.jCalData=s.parse(e.ics),this.component=new s.Component(this.jCalData),this.events=this.component.getAllSubcomponents("vevent").map(e=>new s.Event(e)),this.skipInvalidDates&&(this.events=this.events.filter(e=>{try{return e.startDate.toJSDate(),e.endDate.toJSDate(),!0}catch(e){return!1}}))}between(e,t){function n(n,r){return(!e||r>=e.getTime())&&(!t||n<=t.getTime())}function r(e){const t=e.startDate.toJSDate().getTime();let n=e.endDate.toJSDate().getTime();return e.endDate.isDate&&n>t&&(n-=1),{startTime:t,endTime:n}}const a=[];this.events.forEach(e=>{e.isRecurrenceException()&&a.push(e)});const s={events:[],occurrences:[]};return this.events.filter(e=>!e.isRecurrenceException()).forEach(e=>{const i=[];if(e.component.getAllProperties("exdate").forEach(e=>{const t=e.getFirstValue();i.push(t.toJSDate().getTime())}),e.isRecurring()){const o=e.iterator();let c,l=0;do{if(l+=1,c=o.next(),c){const o=e.getOccurrenceDetails(c),{startTime:l,endTime:u}=r(o),d=-1!==i.indexOf(l),p=a.find(t=>t.uid===e.uid&&t.recurrenceId.toJSDate().getTime()===o.startDate.toJSDate().getTime());if(t&&l>t.getTime())break;n(l,u)&&(p?s.events.push(p):d||s.occurrences.push(o))}}while(c&&(!this.maxIterations||l<this.maxIterations));return}const{startTime:o,endTime:c}=r(e);n(o,c)&&s.events.push(e)}),s}before(e){return this.between(void 0,e)}after(e){return this.between(e)}all(){return this.between()}}const o={parseMeta:e=>e.url&&"ics"===e.format?{url:e.url,format:"ics"}:null,fetch(e,t,n){let r=e.eventSource.meta,{internalState:a}=r;a&&!e.isRefetch||(a=r.internalState={response:null,iCalExpanderPromise:fetch(r.url,{method:"GET"}).then(e=>e.text().then(t=>(a.response=e,new i({ics:t,skipInvalidDates:!0}))))}),a.iCalExpanderPromise.then(n=>{t({rawEvents:c(n,e.range),response:a.response})},n)}};function c(e,t){let r=n.addDays(t.start,-1),a=n.addDays(t.end,1),s=e.between(r,a),i=[];for(let e of s.events)i.push(Object.assign(Object.assign({},l(e)),{start:e.startDate.toString(),end:d(e)&&e.endDate?e.endDate.toString():null}));for(let e of s.occurrences){let t=e.item;i.push(Object.assign(Object.assign({},l(t)),{start:e.startDate.toString(),end:d(t)&&e.endDate?e.endDate.toString():null}))}return i}function l(e){return{title:e.summary,url:u(e),extendedProps:{location:e.location,organizer:e.organizer,description:e.description}}}function u(e){let t=e.component.getFirstProperty("url");return t?t.getFirstValue():""}function d(e){return Boolean(e.component.getFirstProperty("dtend"))||Boolean(e.component.getFirstProperty("duration"))}var p=t.createPlugin({name:"@fullcalendar/icalendar",eventSourceDefs:[o]});return t.globalPlugins.push(p),e.default=p,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,ICAL); \ No newline at end of file
diff --git a/library/fullcalendar/packages/interaction/LICENSE.txt b/library/fullcalendar/packages/interaction/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/interaction/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/interaction/README.md b/library/fullcalendar/packages/interaction/README.md
deleted file mode 100644
index ee5c738ab..000000000
--- a/library/fullcalendar/packages/interaction/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar Interaction Plugin
-
-Provides functionality for event drag-n-drop, resizing, dateClick, and selectable actions
-
-[View the docs &raquo;](https://fullcalendar.io/docs/editable)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/interaction/index.global.js b/library/fullcalendar/packages/interaction/index.global.js
new file mode 100644
index 000000000..296460d0e
--- /dev/null
+++ b/library/fullcalendar/packages/interaction/index.global.js
@@ -0,0 +1,2114 @@
+/*!
+FullCalendar Interaction Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/editable
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Interaction = (function (exports, core, internal) {
+ 'use strict';
+
+ internal.config.touchMouseIgnoreWait = 500;
+ let ignoreMouseDepth = 0;
+ let listenerCnt = 0;
+ let isWindowTouchMoveCancelled = false;
+ /*
+ Uses a "pointer" abstraction, which monitors UI events for both mouse and touch.
+ Tracks when the pointer "drags" on a certain element, meaning down+move+up.
+
+ Also, tracks if there was touch-scrolling.
+ Also, can prevent touch-scrolling from happening.
+ Also, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.
+
+ emits:
+ - pointerdown
+ - pointermove
+ - pointerup
+ */
+ class PointerDragging {
+ constructor(containerEl) {
+ this.subjectEl = null;
+ // options that can be directly assigned by caller
+ this.selector = ''; // will cause subjectEl in all emitted events to be this element
+ this.handleSelector = '';
+ this.shouldIgnoreMove = false;
+ this.shouldWatchScroll = true; // for simulating pointermove on scroll
+ // internal states
+ this.isDragging = false;
+ this.isTouchDragging = false;
+ this.wasTouchScroll = false;
+ // Mouse
+ // ----------------------------------------------------------------------------------------------------
+ this.handleMouseDown = (ev) => {
+ if (!this.shouldIgnoreMouse() &&
+ isPrimaryMouseButton(ev) &&
+ this.tryStart(ev)) {
+ let pev = this.createEventFromMouse(ev, true);
+ this.emitter.trigger('pointerdown', pev);
+ this.initScrollWatch(pev);
+ if (!this.shouldIgnoreMove) {
+ document.addEventListener('mousemove', this.handleMouseMove);
+ }
+ document.addEventListener('mouseup', this.handleMouseUp);
+ }
+ };
+ this.handleMouseMove = (ev) => {
+ let pev = this.createEventFromMouse(ev);
+ this.recordCoords(pev);
+ this.emitter.trigger('pointermove', pev);
+ };
+ this.handleMouseUp = (ev) => {
+ document.removeEventListener('mousemove', this.handleMouseMove);
+ document.removeEventListener('mouseup', this.handleMouseUp);
+ this.emitter.trigger('pointerup', this.createEventFromMouse(ev));
+ this.cleanup(); // call last so that pointerup has access to props
+ };
+ // Touch
+ // ----------------------------------------------------------------------------------------------------
+ this.handleTouchStart = (ev) => {
+ if (this.tryStart(ev)) {
+ this.isTouchDragging = true;
+ let pev = this.createEventFromTouch(ev, true);
+ this.emitter.trigger('pointerdown', pev);
+ this.initScrollWatch(pev);
+ // unlike mouse, need to attach to target, not document
+ // https://stackoverflow.com/a/45760014
+ let targetEl = ev.target;
+ if (!this.shouldIgnoreMove) {
+ targetEl.addEventListener('touchmove', this.handleTouchMove);
+ }
+ targetEl.addEventListener('touchend', this.handleTouchEnd);
+ targetEl.addEventListener('touchcancel', this.handleTouchEnd); // treat it as a touch end
+ // attach a handler to get called when ANY scroll action happens on the page.
+ // this was impossible to do with normal on/off because 'scroll' doesn't bubble.
+ // http://stackoverflow.com/a/32954565/96342
+ window.addEventListener('scroll', this.handleTouchScroll, true);
+ }
+ };
+ this.handleTouchMove = (ev) => {
+ let pev = this.createEventFromTouch(ev);
+ this.recordCoords(pev);
+ this.emitter.trigger('pointermove', pev);
+ };
+ this.handleTouchEnd = (ev) => {
+ if (this.isDragging) { // done to guard against touchend followed by touchcancel
+ let targetEl = ev.target;
+ targetEl.removeEventListener('touchmove', this.handleTouchMove);
+ targetEl.removeEventListener('touchend', this.handleTouchEnd);
+ targetEl.removeEventListener('touchcancel', this.handleTouchEnd);
+ window.removeEventListener('scroll', this.handleTouchScroll, true); // useCaptured=true
+ this.emitter.trigger('pointerup', this.createEventFromTouch(ev));
+ this.cleanup(); // call last so that pointerup has access to props
+ this.isTouchDragging = false;
+ startIgnoringMouse();
+ }
+ };
+ this.handleTouchScroll = () => {
+ this.wasTouchScroll = true;
+ };
+ this.handleScroll = (ev) => {
+ if (!this.shouldIgnoreMove) {
+ let pageX = (window.pageXOffset - this.prevScrollX) + this.prevPageX;
+ let pageY = (window.pageYOffset - this.prevScrollY) + this.prevPageY;
+ this.emitter.trigger('pointermove', {
+ origEvent: ev,
+ isTouch: this.isTouchDragging,
+ subjectEl: this.subjectEl,
+ pageX,
+ pageY,
+ deltaX: pageX - this.origPageX,
+ deltaY: pageY - this.origPageY,
+ });
+ }
+ };
+ this.containerEl = containerEl;
+ this.emitter = new internal.Emitter();
+ containerEl.addEventListener('mousedown', this.handleMouseDown);
+ containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true });
+ listenerCreated();
+ }
+ destroy() {
+ this.containerEl.removeEventListener('mousedown', this.handleMouseDown);
+ this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true });
+ listenerDestroyed();
+ }
+ tryStart(ev) {
+ let subjectEl = this.querySubjectEl(ev);
+ let downEl = ev.target;
+ if (subjectEl &&
+ (!this.handleSelector || internal.elementClosest(downEl, this.handleSelector))) {
+ this.subjectEl = subjectEl;
+ this.isDragging = true; // do this first so cancelTouchScroll will work
+ this.wasTouchScroll = false;
+ return true;
+ }
+ return false;
+ }
+ cleanup() {
+ isWindowTouchMoveCancelled = false;
+ this.isDragging = false;
+ this.subjectEl = null;
+ // keep wasTouchScroll around for later access
+ this.destroyScrollWatch();
+ }
+ querySubjectEl(ev) {
+ if (this.selector) {
+ return internal.elementClosest(ev.target, this.selector);
+ }
+ return this.containerEl;
+ }
+ shouldIgnoreMouse() {
+ return ignoreMouseDepth || this.isTouchDragging;
+ }
+ // can be called by user of this class, to cancel touch-based scrolling for the current drag
+ cancelTouchScroll() {
+ if (this.isDragging) {
+ isWindowTouchMoveCancelled = true;
+ }
+ }
+ // Scrolling that simulates pointermoves
+ // ----------------------------------------------------------------------------------------------------
+ initScrollWatch(ev) {
+ if (this.shouldWatchScroll) {
+ this.recordCoords(ev);
+ window.addEventListener('scroll', this.handleScroll, true); // useCapture=true
+ }
+ }
+ recordCoords(ev) {
+ if (this.shouldWatchScroll) {
+ this.prevPageX = ev.pageX;
+ this.prevPageY = ev.pageY;
+ this.prevScrollX = window.pageXOffset;
+ this.prevScrollY = window.pageYOffset;
+ }
+ }
+ destroyScrollWatch() {
+ if (this.shouldWatchScroll) {
+ window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true
+ }
+ }
+ // Event Normalization
+ // ----------------------------------------------------------------------------------------------------
+ createEventFromMouse(ev, isFirst) {
+ let deltaX = 0;
+ let deltaY = 0;
+ // TODO: repeat code
+ if (isFirst) {
+ this.origPageX = ev.pageX;
+ this.origPageY = ev.pageY;
+ }
+ else {
+ deltaX = ev.pageX - this.origPageX;
+ deltaY = ev.pageY - this.origPageY;
+ }
+ return {
+ origEvent: ev,
+ isTouch: false,
+ subjectEl: this.subjectEl,
+ pageX: ev.pageX,
+ pageY: ev.pageY,
+ deltaX,
+ deltaY,
+ };
+ }
+ createEventFromTouch(ev, isFirst) {
+ let touches = ev.touches;
+ let pageX;
+ let pageY;
+ let deltaX = 0;
+ let deltaY = 0;
+ // if touch coords available, prefer,
+ // because FF would give bad ev.pageX ev.pageY
+ if (touches && touches.length) {
+ pageX = touches[0].pageX;
+ pageY = touches[0].pageY;
+ }
+ else {
+ pageX = ev.pageX;
+ pageY = ev.pageY;
+ }
+ // TODO: repeat code
+ if (isFirst) {
+ this.origPageX = pageX;
+ this.origPageY = pageY;
+ }
+ else {
+ deltaX = pageX - this.origPageX;
+ deltaY = pageY - this.origPageY;
+ }
+ return {
+ origEvent: ev,
+ isTouch: true,
+ subjectEl: this.subjectEl,
+ pageX,
+ pageY,
+ deltaX,
+ deltaY,
+ };
+ }
+ }
+ // Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)
+ function isPrimaryMouseButton(ev) {
+ return ev.button === 0 && !ev.ctrlKey;
+ }
+ // Ignoring fake mouse events generated by touch
+ // ----------------------------------------------------------------------------------------------------
+ function startIgnoringMouse() {
+ ignoreMouseDepth += 1;
+ setTimeout(() => {
+ ignoreMouseDepth -= 1;
+ }, internal.config.touchMouseIgnoreWait);
+ }
+ // We want to attach touchmove as early as possible for Safari
+ // ----------------------------------------------------------------------------------------------------
+ function listenerCreated() {
+ listenerCnt += 1;
+ if (listenerCnt === 1) {
+ window.addEventListener('touchmove', onWindowTouchMove, { passive: false });
+ }
+ }
+ function listenerDestroyed() {
+ listenerCnt -= 1;
+ if (!listenerCnt) {
+ window.removeEventListener('touchmove', onWindowTouchMove, { passive: false });
+ }
+ }
+ function onWindowTouchMove(ev) {
+ if (isWindowTouchMoveCancelled) {
+ ev.preventDefault();
+ }
+ }
+
+ /*
+ An effect in which an element follows the movement of a pointer across the screen.
+ The moving element is a clone of some other element.
+ Must call start + handleMove + stop.
+ */
+ class ElementMirror {
+ constructor() {
+ this.isVisible = false; // must be explicitly enabled
+ this.sourceEl = null;
+ this.mirrorEl = null;
+ this.sourceElRect = null; // screen coords relative to viewport
+ // options that can be set directly by caller
+ this.parentNode = document.body; // HIGHLY SUGGESTED to set this to sidestep ShadowDOM issues
+ this.zIndex = 9999;
+ this.revertDuration = 0;
+ }
+ start(sourceEl, pageX, pageY) {
+ this.sourceEl = sourceEl;
+ this.sourceElRect = this.sourceEl.getBoundingClientRect();
+ this.origScreenX = pageX - window.pageXOffset;
+ this.origScreenY = pageY - window.pageYOffset;
+ this.deltaX = 0;
+ this.deltaY = 0;
+ this.updateElPosition();
+ }
+ handleMove(pageX, pageY) {
+ this.deltaX = (pageX - window.pageXOffset) - this.origScreenX;
+ this.deltaY = (pageY - window.pageYOffset) - this.origScreenY;
+ this.updateElPosition();
+ }
+ // can be called before start
+ setIsVisible(bool) {
+ if (bool) {
+ if (!this.isVisible) {
+ if (this.mirrorEl) {
+ this.mirrorEl.style.display = '';
+ }
+ this.isVisible = bool; // needs to happen before updateElPosition
+ this.updateElPosition(); // because was not updating the position while invisible
+ }
+ }
+ else if (this.isVisible) {
+ if (this.mirrorEl) {
+ this.mirrorEl.style.display = 'none';
+ }
+ this.isVisible = bool;
+ }
+ }
+ // always async
+ stop(needsRevertAnimation, callback) {
+ let done = () => {
+ this.cleanup();
+ callback();
+ };
+ if (needsRevertAnimation &&
+ this.mirrorEl &&
+ this.isVisible &&
+ this.revertDuration && // if 0, transition won't work
+ (this.deltaX || this.deltaY) // if same coords, transition won't work
+ ) {
+ this.doRevertAnimation(done, this.revertDuration);
+ }
+ else {
+ setTimeout(done, 0);
+ }
+ }
+ doRevertAnimation(callback, revertDuration) {
+ let mirrorEl = this.mirrorEl;
+ let finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened
+ mirrorEl.style.transition =
+ 'top ' + revertDuration + 'ms,' +
+ 'left ' + revertDuration + 'ms';
+ internal.applyStyle(mirrorEl, {
+ left: finalSourceElRect.left,
+ top: finalSourceElRect.top,
+ });
+ internal.whenTransitionDone(mirrorEl, () => {
+ mirrorEl.style.transition = '';
+ callback();
+ });
+ }
+ cleanup() {
+ if (this.mirrorEl) {
+ internal.removeElement(this.mirrorEl);
+ this.mirrorEl = null;
+ }
+ this.sourceEl = null;
+ }
+ updateElPosition() {
+ if (this.sourceEl && this.isVisible) {
+ internal.applyStyle(this.getMirrorEl(), {
+ left: this.sourceElRect.left + this.deltaX,
+ top: this.sourceElRect.top + this.deltaY,
+ });
+ }
+ }
+ getMirrorEl() {
+ let sourceElRect = this.sourceElRect;
+ let mirrorEl = this.mirrorEl;
+ if (!mirrorEl) {
+ mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true
+ // we don't want long taps or any mouse interaction causing selection/menus.
+ // would use preventSelection(), but that prevents selectstart, causing problems.
+ mirrorEl.classList.add('fc-unselectable');
+ mirrorEl.classList.add('fc-event-dragging');
+ internal.applyStyle(mirrorEl, {
+ position: 'fixed',
+ zIndex: this.zIndex,
+ visibility: '',
+ boxSizing: 'border-box',
+ width: sourceElRect.right - sourceElRect.left,
+ height: sourceElRect.bottom - sourceElRect.top,
+ right: 'auto',
+ bottom: 'auto',
+ margin: 0,
+ });
+ this.parentNode.appendChild(mirrorEl);
+ }
+ return mirrorEl;
+ }
+ }
+
+ /*
+ Is a cache for a given element's scroll information (all the info that ScrollController stores)
+ in addition the "client rectangle" of the element.. the area within the scrollbars.
+
+ The cache can be in one of two modes:
+ - doesListening:false - ignores when the container is scrolled by someone else
+ - doesListening:true - watch for scrolling and update the cache
+ */
+ class ScrollGeomCache extends internal.ScrollController {
+ constructor(scrollController, doesListening) {
+ super();
+ this.handleScroll = () => {
+ this.scrollTop = this.scrollController.getScrollTop();
+ this.scrollLeft = this.scrollController.getScrollLeft();
+ this.handleScrollChange();
+ };
+ this.scrollController = scrollController;
+ this.doesListening = doesListening;
+ this.scrollTop = this.origScrollTop = scrollController.getScrollTop();
+ this.scrollLeft = this.origScrollLeft = scrollController.getScrollLeft();
+ this.scrollWidth = scrollController.getScrollWidth();
+ this.scrollHeight = scrollController.getScrollHeight();
+ this.clientWidth = scrollController.getClientWidth();
+ this.clientHeight = scrollController.getClientHeight();
+ this.clientRect = this.computeClientRect(); // do last in case it needs cached values
+ if (this.doesListening) {
+ this.getEventTarget().addEventListener('scroll', this.handleScroll);
+ }
+ }
+ destroy() {
+ if (this.doesListening) {
+ this.getEventTarget().removeEventListener('scroll', this.handleScroll);
+ }
+ }
+ getScrollTop() {
+ return this.scrollTop;
+ }
+ getScrollLeft() {
+ return this.scrollLeft;
+ }
+ setScrollTop(top) {
+ this.scrollController.setScrollTop(top);
+ if (!this.doesListening) {
+ // we are not relying on the element to normalize out-of-bounds scroll values
+ // so we need to sanitize ourselves
+ this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);
+ this.handleScrollChange();
+ }
+ }
+ setScrollLeft(top) {
+ this.scrollController.setScrollLeft(top);
+ if (!this.doesListening) {
+ // we are not relying on the element to normalize out-of-bounds scroll values
+ // so we need to sanitize ourselves
+ this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);
+ this.handleScrollChange();
+ }
+ }
+ getClientWidth() {
+ return this.clientWidth;
+ }
+ getClientHeight() {
+ return this.clientHeight;
+ }
+ getScrollWidth() {
+ return this.scrollWidth;
+ }
+ getScrollHeight() {
+ return this.scrollHeight;
+ }
+ handleScrollChange() {
+ }
+ }
+
+ class ElementScrollGeomCache extends ScrollGeomCache {
+ constructor(el, doesListening) {
+ super(new internal.ElementScrollController(el), doesListening);
+ }
+ getEventTarget() {
+ return this.scrollController.el;
+ }
+ computeClientRect() {
+ return internal.computeInnerRect(this.scrollController.el);
+ }
+ }
+
+ class WindowScrollGeomCache extends ScrollGeomCache {
+ constructor(doesListening) {
+ super(new internal.WindowScrollController(), doesListening);
+ }
+ getEventTarget() {
+ return window;
+ }
+ computeClientRect() {
+ return {
+ left: this.scrollLeft,
+ right: this.scrollLeft + this.clientWidth,
+ top: this.scrollTop,
+ bottom: this.scrollTop + this.clientHeight,
+ };
+ }
+ // the window is the only scroll object that changes it's rectangle relative
+ // to the document's topleft as it scrolls
+ handleScrollChange() {
+ this.clientRect = this.computeClientRect();
+ }
+ }
+
+ // If available we are using native "performance" API instead of "Date"
+ // Read more about it on MDN:
+ // https://developer.mozilla.org/en-US/docs/Web/API/Performance
+ const getTime = typeof performance === 'function' ? performance.now : Date.now;
+ /*
+ For a pointer interaction, automatically scrolls certain scroll containers when the pointer
+ approaches the edge.
+
+ The caller must call start + handleMove + stop.
+ */
+ class AutoScroller {
+ constructor() {
+ // options that can be set by caller
+ this.isEnabled = true;
+ this.scrollQuery = [window, '.fc-scroller'];
+ this.edgeThreshold = 50; // pixels
+ this.maxVelocity = 300; // pixels per second
+ // internal state
+ this.pointerScreenX = null;
+ this.pointerScreenY = null;
+ this.isAnimating = false;
+ this.scrollCaches = null;
+ // protect against the initial pointerdown being too close to an edge and starting the scroll
+ this.everMovedUp = false;
+ this.everMovedDown = false;
+ this.everMovedLeft = false;
+ this.everMovedRight = false;
+ this.animate = () => {
+ if (this.isAnimating) { // wasn't cancelled between animation calls
+ let edge = this.computeBestEdge(this.pointerScreenX + window.pageXOffset, this.pointerScreenY + window.pageYOffset);
+ if (edge) {
+ let now = getTime();
+ this.handleSide(edge, (now - this.msSinceRequest) / 1000);
+ this.requestAnimation(now);
+ }
+ else {
+ this.isAnimating = false; // will stop animation
+ }
+ }
+ };
+ }
+ start(pageX, pageY, scrollStartEl) {
+ if (this.isEnabled) {
+ this.scrollCaches = this.buildCaches(scrollStartEl);
+ this.pointerScreenX = null;
+ this.pointerScreenY = null;
+ this.everMovedUp = false;
+ this.everMovedDown = false;
+ this.everMovedLeft = false;
+ this.everMovedRight = false;
+ this.handleMove(pageX, pageY);
+ }
+ }
+ handleMove(pageX, pageY) {
+ if (this.isEnabled) {
+ let pointerScreenX = pageX - window.pageXOffset;
+ let pointerScreenY = pageY - window.pageYOffset;
+ let yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;
+ let xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;
+ if (yDelta < 0) {
+ this.everMovedUp = true;
+ }
+ else if (yDelta > 0) {
+ this.everMovedDown = true;
+ }
+ if (xDelta < 0) {
+ this.everMovedLeft = true;
+ }
+ else if (xDelta > 0) {
+ this.everMovedRight = true;
+ }
+ this.pointerScreenX = pointerScreenX;
+ this.pointerScreenY = pointerScreenY;
+ if (!this.isAnimating) {
+ this.isAnimating = true;
+ this.requestAnimation(getTime());
+ }
+ }
+ }
+ stop() {
+ if (this.isEnabled) {
+ this.isAnimating = false; // will stop animation
+ for (let scrollCache of this.scrollCaches) {
+ scrollCache.destroy();
+ }
+ this.scrollCaches = null;
+ }
+ }
+ requestAnimation(now) {
+ this.msSinceRequest = now;
+ requestAnimationFrame(this.animate);
+ }
+ handleSide(edge, seconds) {
+ let { scrollCache } = edge;
+ let { edgeThreshold } = this;
+ let invDistance = edgeThreshold - edge.distance;
+ let velocity = // the closer to the edge, the faster we scroll
+ ((invDistance * invDistance) / (edgeThreshold * edgeThreshold)) * // quadratic
+ this.maxVelocity * seconds;
+ let sign = 1;
+ switch (edge.name) {
+ case 'left':
+ sign = -1;
+ // falls through
+ case 'right':
+ scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);
+ break;
+ case 'top':
+ sign = -1;
+ // falls through
+ case 'bottom':
+ scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);
+ break;
+ }
+ }
+ // left/top are relative to document topleft
+ computeBestEdge(left, top) {
+ let { edgeThreshold } = this;
+ let bestSide = null;
+ let scrollCaches = this.scrollCaches || [];
+ for (let scrollCache of scrollCaches) {
+ let rect = scrollCache.clientRect;
+ let leftDist = left - rect.left;
+ let rightDist = rect.right - left;
+ let topDist = top - rect.top;
+ let bottomDist = rect.bottom - top;
+ // completely within the rect?
+ if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {
+ if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&
+ (!bestSide || bestSide.distance > topDist)) {
+ bestSide = { scrollCache, name: 'top', distance: topDist };
+ }
+ if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&
+ (!bestSide || bestSide.distance > bottomDist)) {
+ bestSide = { scrollCache, name: 'bottom', distance: bottomDist };
+ }
+ if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&
+ (!bestSide || bestSide.distance > leftDist)) {
+ bestSide = { scrollCache, name: 'left', distance: leftDist };
+ }
+ if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&
+ (!bestSide || bestSide.distance > rightDist)) {
+ bestSide = { scrollCache, name: 'right', distance: rightDist };
+ }
+ }
+ }
+ return bestSide;
+ }
+ buildCaches(scrollStartEl) {
+ return this.queryScrollEls(scrollStartEl).map((el) => {
+ if (el === window) {
+ return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls
+ }
+ return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls
+ });
+ }
+ queryScrollEls(scrollStartEl) {
+ let els = [];
+ for (let query of this.scrollQuery) {
+ if (typeof query === 'object') {
+ els.push(query);
+ }
+ else {
+ els.push(...Array.prototype.slice.call(internal.getElRoot(scrollStartEl).querySelectorAll(query)));
+ }
+ }
+ return els;
+ }
+ }
+
+ /*
+ Monitors dragging on an element. Has a number of high-level features:
+ - minimum distance required before dragging
+ - minimum wait time ("delay") before dragging
+ - a mirror element that follows the pointer
+ */
+ class FeaturefulElementDragging extends internal.ElementDragging {
+ constructor(containerEl, selector) {
+ super(containerEl);
+ this.containerEl = containerEl;
+ // options that can be directly set by caller
+ // the caller can also set the PointerDragging's options as well
+ this.delay = null;
+ this.minDistance = 0;
+ this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag
+ this.mirrorNeedsRevert = false;
+ this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup
+ this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation
+ this.isDelayEnded = false;
+ this.isDistanceSurpassed = false;
+ this.delayTimeoutId = null;
+ this.onPointerDown = (ev) => {
+ if (!this.isDragging) { // so new drag doesn't happen while revert animation is going
+ this.isInteracting = true;
+ this.isDelayEnded = false;
+ this.isDistanceSurpassed = false;
+ internal.preventSelection(document.body);
+ internal.preventContextMenu(document.body);
+ // prevent links from being visited if there's an eventual drag.
+ // also prevents selection in older browsers (maybe?).
+ // not necessary for touch, besides, browser would complain about passiveness.
+ if (!ev.isTouch) {
+ ev.origEvent.preventDefault();
+ }
+ this.emitter.trigger('pointerdown', ev);
+ if (this.isInteracting && // not destroyed via pointerdown handler
+ !this.pointer.shouldIgnoreMove) {
+ // actions related to initiating dragstart+dragmove+dragend...
+ this.mirror.setIsVisible(false); // reset. caller must set-visible
+ this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down
+ this.startDelay(ev);
+ if (!this.minDistance) {
+ this.handleDistanceSurpassed(ev);
+ }
+ }
+ }
+ };
+ this.onPointerMove = (ev) => {
+ if (this.isInteracting) {
+ this.emitter.trigger('pointermove', ev);
+ if (!this.isDistanceSurpassed) {
+ let minDistance = this.minDistance;
+ let distanceSq; // current distance from the origin, squared
+ let { deltaX, deltaY } = ev;
+ distanceSq = deltaX * deltaX + deltaY * deltaY;
+ if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem
+ this.handleDistanceSurpassed(ev);
+ }
+ }
+ if (this.isDragging) {
+ // a real pointer move? (not one simulated by scrolling)
+ if (ev.origEvent.type !== 'scroll') {
+ this.mirror.handleMove(ev.pageX, ev.pageY);
+ this.autoScroller.handleMove(ev.pageX, ev.pageY);
+ }
+ this.emitter.trigger('dragmove', ev);
+ }
+ }
+ };
+ this.onPointerUp = (ev) => {
+ if (this.isInteracting) {
+ this.isInteracting = false;
+ internal.allowSelection(document.body);
+ internal.allowContextMenu(document.body);
+ this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert
+ if (this.isDragging) {
+ this.autoScroller.stop();
+ this.tryStopDrag(ev); // which will stop the mirror
+ }
+ if (this.delayTimeoutId) {
+ clearTimeout(this.delayTimeoutId);
+ this.delayTimeoutId = null;
+ }
+ }
+ };
+ let pointer = this.pointer = new PointerDragging(containerEl);
+ pointer.emitter.on('pointerdown', this.onPointerDown);
+ pointer.emitter.on('pointermove', this.onPointerMove);
+ pointer.emitter.on('pointerup', this.onPointerUp);
+ if (selector) {
+ pointer.selector = selector;
+ }
+ this.mirror = new ElementMirror();
+ this.autoScroller = new AutoScroller();
+ }
+ destroy() {
+ this.pointer.destroy();
+ // HACK: simulate a pointer-up to end the current drag
+ // TODO: fire 'dragend' directly and stop interaction. discourage use of pointerup event (b/c might not fire)
+ this.onPointerUp({});
+ }
+ startDelay(ev) {
+ if (typeof this.delay === 'number') {
+ this.delayTimeoutId = setTimeout(() => {
+ this.delayTimeoutId = null;
+ this.handleDelayEnd(ev);
+ }, this.delay); // not assignable to number!
+ }
+ else {
+ this.handleDelayEnd(ev);
+ }
+ }
+ handleDelayEnd(ev) {
+ this.isDelayEnded = true;
+ this.tryStartDrag(ev);
+ }
+ handleDistanceSurpassed(ev) {
+ this.isDistanceSurpassed = true;
+ this.tryStartDrag(ev);
+ }
+ tryStartDrag(ev) {
+ if (this.isDelayEnded && this.isDistanceSurpassed) {
+ if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {
+ this.isDragging = true;
+ this.mirrorNeedsRevert = false;
+ this.autoScroller.start(ev.pageX, ev.pageY, this.containerEl);
+ this.emitter.trigger('dragstart', ev);
+ if (this.touchScrollAllowed === false) {
+ this.pointer.cancelTouchScroll();
+ }
+ }
+ }
+ }
+ tryStopDrag(ev) {
+ // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events
+ // that come from the document to fire beforehand. much more convenient this way.
+ this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev));
+ }
+ stopDrag(ev) {
+ this.isDragging = false;
+ this.emitter.trigger('dragend', ev);
+ }
+ // fill in the implementations...
+ setIgnoreMove(bool) {
+ this.pointer.shouldIgnoreMove = bool;
+ }
+ setMirrorIsVisible(bool) {
+ this.mirror.setIsVisible(bool);
+ }
+ setMirrorNeedsRevert(bool) {
+ this.mirrorNeedsRevert = bool;
+ }
+ setAutoScrollEnabled(bool) {
+ this.autoScroller.isEnabled = bool;
+ }
+ }
+
+ /*
+ When this class is instantiated, it records the offset of an element (relative to the document topleft),
+ and continues to monitor scrolling, updating the cached coordinates if it needs to.
+ Does not access the DOM after instantiation, so highly performant.
+
+ Also keeps track of all scrolling/overflow:hidden containers that are parents of the given element
+ and an determine if a given point is inside the combined clipping rectangle.
+ */
+ class OffsetTracker {
+ constructor(el) {
+ this.origRect = internal.computeRect(el);
+ // will work fine for divs that have overflow:hidden
+ this.scrollCaches = internal.getClippingParents(el).map((scrollEl) => new ElementScrollGeomCache(scrollEl, true));
+ }
+ destroy() {
+ for (let scrollCache of this.scrollCaches) {
+ scrollCache.destroy();
+ }
+ }
+ computeLeft() {
+ let left = this.origRect.left;
+ for (let scrollCache of this.scrollCaches) {
+ left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();
+ }
+ return left;
+ }
+ computeTop() {
+ let top = this.origRect.top;
+ for (let scrollCache of this.scrollCaches) {
+ top += scrollCache.origScrollTop - scrollCache.getScrollTop();
+ }
+ return top;
+ }
+ isWithinClipping(pageX, pageY) {
+ let point = { left: pageX, top: pageY };
+ for (let scrollCache of this.scrollCaches) {
+ if (!isIgnoredClipping(scrollCache.getEventTarget()) &&
+ !internal.pointInsideRect(point, scrollCache.clientRect)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ // certain clipping containers should never constrain interactions, like <html> and <body>
+ // https://github.com/fullcalendar/fullcalendar/issues/3615
+ function isIgnoredClipping(node) {
+ let tagName = node.tagName;
+ return tagName === 'HTML' || tagName === 'BODY';
+ }
+
+ /*
+ Tracks movement over multiple droppable areas (aka "hits")
+ that exist in one or more DateComponents.
+ Relies on an existing draggable.
+
+ emits:
+ - pointerdown
+ - dragstart
+ - hitchange - fires initially, even if not over a hit
+ - pointerup
+ - (hitchange - again, to null, if ended over a hit)
+ - dragend
+ */
+ class HitDragging {
+ constructor(dragging, droppableStore) {
+ // options that can be set by caller
+ this.useSubjectCenter = false;
+ this.requireInitial = true; // if doesn't start out on a hit, won't emit any events
+ this.initialHit = null;
+ this.movingHit = null;
+ this.finalHit = null; // won't ever be populated if shouldIgnoreMove
+ this.handlePointerDown = (ev) => {
+ let { dragging } = this;
+ this.initialHit = null;
+ this.movingHit = null;
+ this.finalHit = null;
+ this.prepareHits();
+ this.processFirstCoord(ev);
+ if (this.initialHit || !this.requireInitial) {
+ dragging.setIgnoreMove(false);
+ // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(
+ this.emitter.trigger('pointerdown', ev);
+ }
+ else {
+ dragging.setIgnoreMove(true);
+ }
+ };
+ this.handleDragStart = (ev) => {
+ this.emitter.trigger('dragstart', ev);
+ this.handleMove(ev, true); // force = fire even if initially null
+ };
+ this.handleDragMove = (ev) => {
+ this.emitter.trigger('dragmove', ev);
+ this.handleMove(ev);
+ };
+ this.handlePointerUp = (ev) => {
+ this.releaseHits();
+ this.emitter.trigger('pointerup', ev);
+ };
+ this.handleDragEnd = (ev) => {
+ if (this.movingHit) {
+ this.emitter.trigger('hitupdate', null, true, ev);
+ }
+ this.finalHit = this.movingHit;
+ this.movingHit = null;
+ this.emitter.trigger('dragend', ev);
+ };
+ this.droppableStore = droppableStore;
+ dragging.emitter.on('pointerdown', this.handlePointerDown);
+ dragging.emitter.on('dragstart', this.handleDragStart);
+ dragging.emitter.on('dragmove', this.handleDragMove);
+ dragging.emitter.on('pointerup', this.handlePointerUp);
+ dragging.emitter.on('dragend', this.handleDragEnd);
+ this.dragging = dragging;
+ this.emitter = new internal.Emitter();
+ }
+ // sets initialHit
+ // sets coordAdjust
+ processFirstCoord(ev) {
+ let origPoint = { left: ev.pageX, top: ev.pageY };
+ let adjustedPoint = origPoint;
+ let subjectEl = ev.subjectEl;
+ let subjectRect;
+ if (subjectEl instanceof HTMLElement) { // i.e. not a Document/ShadowRoot
+ subjectRect = internal.computeRect(subjectEl);
+ adjustedPoint = internal.constrainPoint(adjustedPoint, subjectRect);
+ }
+ let initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);
+ if (initialHit) {
+ if (this.useSubjectCenter && subjectRect) {
+ let slicedSubjectRect = internal.intersectRects(subjectRect, initialHit.rect);
+ if (slicedSubjectRect) {
+ adjustedPoint = internal.getRectCenter(slicedSubjectRect);
+ }
+ }
+ this.coordAdjust = internal.diffPoints(adjustedPoint, origPoint);
+ }
+ else {
+ this.coordAdjust = { left: 0, top: 0 };
+ }
+ }
+ handleMove(ev, forceHandle) {
+ let hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);
+ if (forceHandle || !isHitsEqual(this.movingHit, hit)) {
+ this.movingHit = hit;
+ this.emitter.trigger('hitupdate', hit, false, ev);
+ }
+ }
+ prepareHits() {
+ this.offsetTrackers = internal.mapHash(this.droppableStore, (interactionSettings) => {
+ interactionSettings.component.prepareHits();
+ return new OffsetTracker(interactionSettings.el);
+ });
+ }
+ releaseHits() {
+ let { offsetTrackers } = this;
+ for (let id in offsetTrackers) {
+ offsetTrackers[id].destroy();
+ }
+ this.offsetTrackers = {};
+ }
+ queryHitForOffset(offsetLeft, offsetTop) {
+ let { droppableStore, offsetTrackers } = this;
+ let bestHit = null;
+ for (let id in droppableStore) {
+ let component = droppableStore[id].component;
+ let offsetTracker = offsetTrackers[id];
+ if (offsetTracker && // wasn't destroyed mid-drag
+ offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {
+ let originLeft = offsetTracker.computeLeft();
+ let originTop = offsetTracker.computeTop();
+ let positionLeft = offsetLeft - originLeft;
+ let positionTop = offsetTop - originTop;
+ let { origRect } = offsetTracker;
+ let width = origRect.right - origRect.left;
+ let height = origRect.bottom - origRect.top;
+ if (
+ // must be within the element's bounds
+ positionLeft >= 0 && positionLeft < width &&
+ positionTop >= 0 && positionTop < height) {
+ let hit = component.queryHit(positionLeft, positionTop, width, height);
+ if (hit && (
+ // make sure the hit is within activeRange, meaning it's not a dead cell
+ internal.rangeContainsRange(hit.dateProfile.activeRange, hit.dateSpan.range)) &&
+ (!bestHit || hit.layer > bestHit.layer)) {
+ hit.componentId = id;
+ hit.context = component.context;
+ // TODO: better way to re-orient rectangle
+ hit.rect.left += originLeft;
+ hit.rect.right += originLeft;
+ hit.rect.top += originTop;
+ hit.rect.bottom += originTop;
+ bestHit = hit;
+ }
+ }
+ }
+ }
+ return bestHit;
+ }
+ }
+ function isHitsEqual(hit0, hit1) {
+ if (!hit0 && !hit1) {
+ return true;
+ }
+ if (Boolean(hit0) !== Boolean(hit1)) {
+ return false;
+ }
+ return internal.isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);
+ }
+
+ function buildDatePointApiWithContext(dateSpan, context) {
+ let props = {};
+ for (let transform of context.pluginHooks.datePointTransforms) {
+ Object.assign(props, transform(dateSpan, context));
+ }
+ Object.assign(props, buildDatePointApi(dateSpan, context.dateEnv));
+ return props;
+ }
+ function buildDatePointApi(span, dateEnv) {
+ return {
+ date: dateEnv.toDate(span.range.start),
+ dateStr: dateEnv.formatIso(span.range.start, { omitTime: span.allDay }),
+ allDay: span.allDay,
+ };
+ }
+
+ /*
+ Monitors when the user clicks on a specific date/time of a component.
+ A pointerdown+pointerup on the same "hit" constitutes a click.
+ */
+ class DateClicking extends internal.Interaction {
+ constructor(settings) {
+ super(settings);
+ this.handlePointerDown = (pev) => {
+ let { dragging } = this;
+ let downEl = pev.origEvent.target;
+ // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired
+ dragging.setIgnoreMove(!this.component.isValidDateDownEl(downEl));
+ };
+ // won't even fire if moving was ignored
+ this.handleDragEnd = (ev) => {
+ let { component } = this;
+ let { pointer } = this.dragging;
+ if (!pointer.wasTouchScroll) {
+ let { initialHit, finalHit } = this.hitDragging;
+ if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {
+ let { context } = component;
+ let arg = Object.assign(Object.assign({}, buildDatePointApiWithContext(initialHit.dateSpan, context)), { dayEl: initialHit.dayEl, jsEvent: ev.origEvent, view: context.viewApi || context.calendarApi.view });
+ context.emitter.trigger('dateClick', arg);
+ }
+ }
+ };
+ // we DO want to watch pointer moves because otherwise finalHit won't get populated
+ this.dragging = new FeaturefulElementDragging(settings.el);
+ this.dragging.autoScroller.isEnabled = false;
+ let hitDragging = this.hitDragging = new HitDragging(this.dragging, internal.interactionSettingsToStore(settings));
+ hitDragging.emitter.on('pointerdown', this.handlePointerDown);
+ hitDragging.emitter.on('dragend', this.handleDragEnd);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ }
+
+ /*
+ Tracks when the user selects a portion of time of a component,
+ constituted by a drag over date cells, with a possible delay at the beginning of the drag.
+ */
+ class DateSelecting extends internal.Interaction {
+ constructor(settings) {
+ super(settings);
+ this.dragSelection = null;
+ this.handlePointerDown = (ev) => {
+ let { component, dragging } = this;
+ let { options } = component.context;
+ let canSelect = options.selectable &&
+ component.isValidDateDownEl(ev.origEvent.target);
+ // don't bother to watch expensive moves if component won't do selection
+ dragging.setIgnoreMove(!canSelect);
+ // if touch, require user to hold down
+ dragging.delay = ev.isTouch ? getComponentTouchDelay$1(component) : null;
+ };
+ this.handleDragStart = (ev) => {
+ this.component.context.calendarApi.unselect(ev); // unselect previous selections
+ };
+ this.handleHitUpdate = (hit, isFinal) => {
+ let { context } = this.component;
+ let dragSelection = null;
+ let isInvalid = false;
+ if (hit) {
+ let initialHit = this.hitDragging.initialHit;
+ let disallowed = hit.componentId === initialHit.componentId
+ && this.isHitComboAllowed
+ && !this.isHitComboAllowed(initialHit, hit);
+ if (!disallowed) {
+ dragSelection = joinHitsIntoSelection(initialHit, hit, context.pluginHooks.dateSelectionTransformers);
+ }
+ if (!dragSelection || !internal.isDateSelectionValid(dragSelection, hit.dateProfile, context)) {
+ isInvalid = true;
+ dragSelection = null;
+ }
+ }
+ if (dragSelection) {
+ context.dispatch({ type: 'SELECT_DATES', selection: dragSelection });
+ }
+ else if (!isFinal) { // only unselect if moved away while dragging
+ context.dispatch({ type: 'UNSELECT_DATES' });
+ }
+ if (!isInvalid) {
+ internal.enableCursor();
+ }
+ else {
+ internal.disableCursor();
+ }
+ if (!isFinal) {
+ this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging
+ }
+ };
+ this.handlePointerUp = (pev) => {
+ if (this.dragSelection) {
+ // selection is already rendered, so just need to report selection
+ internal.triggerDateSelect(this.dragSelection, pev, this.component.context);
+ this.dragSelection = null;
+ }
+ };
+ let { component } = settings;
+ let { options } = component.context;
+ let dragging = this.dragging = new FeaturefulElementDragging(settings.el);
+ dragging.touchScrollAllowed = false;
+ dragging.minDistance = options.selectMinDistance || 0;
+ dragging.autoScroller.isEnabled = options.dragScroll;
+ let hitDragging = this.hitDragging = new HitDragging(this.dragging, internal.interactionSettingsToStore(settings));
+ hitDragging.emitter.on('pointerdown', this.handlePointerDown);
+ hitDragging.emitter.on('dragstart', this.handleDragStart);
+ hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
+ hitDragging.emitter.on('pointerup', this.handlePointerUp);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ }
+ function getComponentTouchDelay$1(component) {
+ let { options } = component.context;
+ let delay = options.selectLongPressDelay;
+ if (delay == null) {
+ delay = options.longPressDelay;
+ }
+ return delay;
+ }
+ function joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {
+ let dateSpan0 = hit0.dateSpan;
+ let dateSpan1 = hit1.dateSpan;
+ let ms = [
+ dateSpan0.range.start,
+ dateSpan0.range.end,
+ dateSpan1.range.start,
+ dateSpan1.range.end,
+ ];
+ ms.sort(internal.compareNumbers);
+ let props = {};
+ for (let transformer of dateSelectionTransformers) {
+ let res = transformer(hit0, hit1);
+ if (res === false) {
+ return null;
+ }
+ if (res) {
+ Object.assign(props, res);
+ }
+ }
+ props.range = { start: ms[0], end: ms[3] };
+ props.allDay = dateSpan0.allDay;
+ return props;
+ }
+
+ class EventDragging extends internal.Interaction {
+ constructor(settings) {
+ super(settings);
+ // internal state
+ this.subjectEl = null;
+ this.subjectSeg = null; // the seg being selected/dragged
+ this.isDragging = false;
+ this.eventRange = null;
+ this.relevantEvents = null; // the events being dragged
+ this.receivingContext = null;
+ this.validMutation = null;
+ this.mutatedRelevantEvents = null;
+ this.handlePointerDown = (ev) => {
+ let origTarget = ev.origEvent.target;
+ let { component, dragging } = this;
+ let { mirror } = dragging;
+ let { options } = component.context;
+ let initialContext = component.context;
+ this.subjectEl = ev.subjectEl;
+ let subjectSeg = this.subjectSeg = internal.getElSeg(ev.subjectEl);
+ let eventRange = this.eventRange = subjectSeg.eventRange;
+ let eventInstanceId = eventRange.instance.instanceId;
+ this.relevantEvents = internal.getRelevantEvents(initialContext.getCurrentData().eventStore, eventInstanceId);
+ dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance;
+ dragging.delay =
+ // only do a touch delay if touch and this event hasn't been selected yet
+ (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?
+ getComponentTouchDelay(component) :
+ null;
+ if (options.fixedMirrorParent) {
+ mirror.parentNode = options.fixedMirrorParent;
+ }
+ else {
+ mirror.parentNode = internal.elementClosest(origTarget, '.fc');
+ }
+ mirror.revertDuration = options.dragRevertDuration;
+ let isValid = component.isValidSegDownEl(origTarget) &&
+ !internal.elementClosest(origTarget, '.fc-event-resizer'); // NOT on a resizer
+ dragging.setIgnoreMove(!isValid);
+ // disable dragging for elements that are resizable (ie, selectable)
+ // but are not draggable
+ this.isDragging = isValid &&
+ ev.subjectEl.classList.contains('fc-event-draggable');
+ };
+ this.handleDragStart = (ev) => {
+ let initialContext = this.component.context;
+ let eventRange = this.eventRange;
+ let eventInstanceId = eventRange.instance.instanceId;
+ if (ev.isTouch) {
+ // need to select a different event?
+ if (eventInstanceId !== this.component.props.eventSelection) {
+ initialContext.dispatch({ type: 'SELECT_EVENT', eventInstanceId });
+ }
+ }
+ else {
+ // if now using mouse, but was previous touch interaction, clear selected event
+ initialContext.dispatch({ type: 'UNSELECT_EVENT' });
+ }
+ if (this.isDragging) {
+ initialContext.calendarApi.unselect(ev); // unselect *date* selection
+ initialContext.emitter.trigger('eventDragStart', {
+ el: this.subjectEl,
+ event: new internal.EventImpl(initialContext, eventRange.def, eventRange.instance),
+ jsEvent: ev.origEvent,
+ view: initialContext.viewApi,
+ });
+ }
+ };
+ this.handleHitUpdate = (hit, isFinal) => {
+ if (!this.isDragging) {
+ return;
+ }
+ let relevantEvents = this.relevantEvents;
+ let initialHit = this.hitDragging.initialHit;
+ let initialContext = this.component.context;
+ // states based on new hit
+ let receivingContext = null;
+ let mutation = null;
+ let mutatedRelevantEvents = null;
+ let isInvalid = false;
+ let interaction = {
+ affectedEvents: relevantEvents,
+ mutatedEvents: internal.createEmptyEventStore(),
+ isEvent: true,
+ };
+ if (hit) {
+ receivingContext = hit.context;
+ let receivingOptions = receivingContext.options;
+ if (initialContext === receivingContext ||
+ (receivingOptions.editable && receivingOptions.droppable)) {
+ mutation = computeEventMutation(initialHit, hit, receivingContext.getCurrentData().pluginHooks.eventDragMutationMassagers);
+ if (mutation) {
+ mutatedRelevantEvents = internal.applyMutationToEventStore(relevantEvents, receivingContext.getCurrentData().eventUiBases, mutation, receivingContext);
+ interaction.mutatedEvents = mutatedRelevantEvents;
+ if (!internal.isInteractionValid(interaction, hit.dateProfile, receivingContext)) {
+ isInvalid = true;
+ mutation = null;
+ mutatedRelevantEvents = null;
+ interaction.mutatedEvents = internal.createEmptyEventStore();
+ }
+ }
+ }
+ else {
+ receivingContext = null;
+ }
+ }
+ this.displayDrag(receivingContext, interaction);
+ if (!isInvalid) {
+ internal.enableCursor();
+ }
+ else {
+ internal.disableCursor();
+ }
+ if (!isFinal) {
+ if (initialContext === receivingContext && // TODO: write test for this
+ isHitsEqual(initialHit, hit)) {
+ mutation = null;
+ }
+ this.dragging.setMirrorNeedsRevert(!mutation);
+ // render the mirror if no already-rendered mirror
+ // TODO: wish we could somehow wait for dispatch to guarantee render
+ this.dragging.setMirrorIsVisible(!hit || !internal.getElRoot(this.subjectEl).querySelector('.fc-event-mirror'));
+ // assign states based on new hit
+ this.receivingContext = receivingContext;
+ this.validMutation = mutation;
+ this.mutatedRelevantEvents = mutatedRelevantEvents;
+ }
+ };
+ this.handlePointerUp = () => {
+ if (!this.isDragging) {
+ this.cleanup(); // because handleDragEnd won't fire
+ }
+ };
+ this.handleDragEnd = (ev) => {
+ if (this.isDragging) {
+ let initialContext = this.component.context;
+ let initialView = initialContext.viewApi;
+ let { receivingContext, validMutation } = this;
+ let eventDef = this.eventRange.def;
+ let eventInstance = this.eventRange.instance;
+ let eventApi = new internal.EventImpl(initialContext, eventDef, eventInstance);
+ let relevantEvents = this.relevantEvents;
+ let mutatedRelevantEvents = this.mutatedRelevantEvents;
+ let { finalHit } = this.hitDragging;
+ this.clearDrag(); // must happen after revert animation
+ initialContext.emitter.trigger('eventDragStop', {
+ el: this.subjectEl,
+ event: eventApi,
+ jsEvent: ev.origEvent,
+ view: initialView,
+ });
+ if (validMutation) {
+ // dropped within same calendar
+ if (receivingContext === initialContext) {
+ let updatedEventApi = new internal.EventImpl(initialContext, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null);
+ initialContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: mutatedRelevantEvents,
+ });
+ let eventChangeArg = {
+ oldEvent: eventApi,
+ event: updatedEventApi,
+ relatedEvents: internal.buildEventApis(mutatedRelevantEvents, initialContext, eventInstance),
+ revert() {
+ initialContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: relevantEvents, // the pre-change data
+ });
+ },
+ };
+ let transformed = {};
+ for (let transformer of initialContext.getCurrentData().pluginHooks.eventDropTransformers) {
+ Object.assign(transformed, transformer(validMutation, initialContext));
+ }
+ initialContext.emitter.trigger('eventDrop', Object.assign(Object.assign(Object.assign({}, eventChangeArg), transformed), { el: ev.subjectEl, delta: validMutation.datesDelta, jsEvent: ev.origEvent, view: initialView }));
+ initialContext.emitter.trigger('eventChange', eventChangeArg);
+ // dropped in different calendar
+ }
+ else if (receivingContext) {
+ let eventRemoveArg = {
+ event: eventApi,
+ relatedEvents: internal.buildEventApis(relevantEvents, initialContext, eventInstance),
+ revert() {
+ initialContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: relevantEvents,
+ });
+ },
+ };
+ initialContext.emitter.trigger('eventLeave', Object.assign(Object.assign({}, eventRemoveArg), { draggedEl: ev.subjectEl, view: initialView }));
+ initialContext.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: relevantEvents,
+ });
+ initialContext.emitter.trigger('eventRemove', eventRemoveArg);
+ let addedEventDef = mutatedRelevantEvents.defs[eventDef.defId];
+ let addedEventInstance = mutatedRelevantEvents.instances[eventInstance.instanceId];
+ let addedEventApi = new internal.EventImpl(receivingContext, addedEventDef, addedEventInstance);
+ receivingContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: mutatedRelevantEvents,
+ });
+ let eventAddArg = {
+ event: addedEventApi,
+ relatedEvents: internal.buildEventApis(mutatedRelevantEvents, receivingContext, addedEventInstance),
+ revert() {
+ receivingContext.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: mutatedRelevantEvents,
+ });
+ },
+ };
+ receivingContext.emitter.trigger('eventAdd', eventAddArg);
+ if (ev.isTouch) {
+ receivingContext.dispatch({
+ type: 'SELECT_EVENT',
+ eventInstanceId: eventInstance.instanceId,
+ });
+ }
+ receivingContext.emitter.trigger('drop', Object.assign(Object.assign({}, buildDatePointApiWithContext(finalHit.dateSpan, receivingContext)), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.context.viewApi }));
+ receivingContext.emitter.trigger('eventReceive', Object.assign(Object.assign({}, eventAddArg), { draggedEl: ev.subjectEl, view: finalHit.context.viewApi }));
+ }
+ }
+ else {
+ initialContext.emitter.trigger('_noEventDrop');
+ }
+ }
+ this.cleanup();
+ };
+ let { component } = this;
+ let { options } = component.context;
+ let dragging = this.dragging = new FeaturefulElementDragging(settings.el);
+ dragging.pointer.selector = EventDragging.SELECTOR;
+ dragging.touchScrollAllowed = false;
+ dragging.autoScroller.isEnabled = options.dragScroll;
+ let hitDragging = this.hitDragging = new HitDragging(this.dragging, internal.interactionSettingsStore);
+ hitDragging.useSubjectCenter = settings.useEventCenter;
+ hitDragging.emitter.on('pointerdown', this.handlePointerDown);
+ hitDragging.emitter.on('dragstart', this.handleDragStart);
+ hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
+ hitDragging.emitter.on('pointerup', this.handlePointerUp);
+ hitDragging.emitter.on('dragend', this.handleDragEnd);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ // render a drag state on the next receivingCalendar
+ displayDrag(nextContext, state) {
+ let initialContext = this.component.context;
+ let prevContext = this.receivingContext;
+ // does the previous calendar need to be cleared?
+ if (prevContext && prevContext !== nextContext) {
+ // does the initial calendar need to be cleared?
+ // if so, don't clear all the way. we still need to to hide the affectedEvents
+ if (prevContext === initialContext) {
+ prevContext.dispatch({
+ type: 'SET_EVENT_DRAG',
+ state: {
+ affectedEvents: state.affectedEvents,
+ mutatedEvents: internal.createEmptyEventStore(),
+ isEvent: true,
+ },
+ });
+ // completely clear the old calendar if it wasn't the initial
+ }
+ else {
+ prevContext.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ }
+ if (nextContext) {
+ nextContext.dispatch({ type: 'SET_EVENT_DRAG', state });
+ }
+ }
+ clearDrag() {
+ let initialCalendar = this.component.context;
+ let { receivingContext } = this;
+ if (receivingContext) {
+ receivingContext.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ // the initial calendar might have an dummy drag state from displayDrag
+ if (initialCalendar !== receivingContext) {
+ initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ }
+ cleanup() {
+ this.subjectSeg = null;
+ this.isDragging = false;
+ this.eventRange = null;
+ this.relevantEvents = null;
+ this.receivingContext = null;
+ this.validMutation = null;
+ this.mutatedRelevantEvents = null;
+ }
+ }
+ // TODO: test this in IE11
+ // QUESTION: why do we need it on the resizable???
+ EventDragging.SELECTOR = '.fc-event-draggable, .fc-event-resizable';
+ function computeEventMutation(hit0, hit1, massagers) {
+ let dateSpan0 = hit0.dateSpan;
+ let dateSpan1 = hit1.dateSpan;
+ let date0 = dateSpan0.range.start;
+ let date1 = dateSpan1.range.start;
+ let standardProps = {};
+ if (dateSpan0.allDay !== dateSpan1.allDay) {
+ standardProps.allDay = dateSpan1.allDay;
+ standardProps.hasEnd = hit1.context.options.allDayMaintainDuration;
+ if (dateSpan1.allDay) {
+ // means date1 is already start-of-day,
+ // but date0 needs to be converted
+ date0 = internal.startOfDay(date0);
+ }
+ }
+ let delta = internal.diffDates(date0, date1, hit0.context.dateEnv, hit0.componentId === hit1.componentId ?
+ hit0.largeUnit :
+ null);
+ if (delta.milliseconds) { // has hours/minutes/seconds
+ standardProps.allDay = false;
+ }
+ let mutation = {
+ datesDelta: delta,
+ standardProps,
+ };
+ for (let massager of massagers) {
+ massager(mutation, hit0, hit1);
+ }
+ return mutation;
+ }
+ function getComponentTouchDelay(component) {
+ let { options } = component.context;
+ let delay = options.eventLongPressDelay;
+ if (delay == null) {
+ delay = options.longPressDelay;
+ }
+ return delay;
+ }
+
+ class EventResizing extends internal.Interaction {
+ constructor(settings) {
+ super(settings);
+ // internal state
+ this.draggingSegEl = null;
+ this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?
+ this.eventRange = null;
+ this.relevantEvents = null;
+ this.validMutation = null;
+ this.mutatedRelevantEvents = null;
+ this.handlePointerDown = (ev) => {
+ let { component } = this;
+ let segEl = this.querySegEl(ev);
+ let seg = internal.getElSeg(segEl);
+ let eventRange = this.eventRange = seg.eventRange;
+ this.dragging.minDistance = component.context.options.eventDragMinDistance;
+ // if touch, need to be working with a selected event
+ this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(ev.origEvent.target) ||
+ (ev.isTouch && this.component.props.eventSelection !== eventRange.instance.instanceId));
+ };
+ this.handleDragStart = (ev) => {
+ let { context } = this.component;
+ let eventRange = this.eventRange;
+ this.relevantEvents = internal.getRelevantEvents(context.getCurrentData().eventStore, this.eventRange.instance.instanceId);
+ let segEl = this.querySegEl(ev);
+ this.draggingSegEl = segEl;
+ this.draggingSeg = internal.getElSeg(segEl);
+ context.calendarApi.unselect();
+ context.emitter.trigger('eventResizeStart', {
+ el: segEl,
+ event: new internal.EventImpl(context, eventRange.def, eventRange.instance),
+ jsEvent: ev.origEvent,
+ view: context.viewApi,
+ });
+ };
+ this.handleHitUpdate = (hit, isFinal, ev) => {
+ let { context } = this.component;
+ let relevantEvents = this.relevantEvents;
+ let initialHit = this.hitDragging.initialHit;
+ let eventInstance = this.eventRange.instance;
+ let mutation = null;
+ let mutatedRelevantEvents = null;
+ let isInvalid = false;
+ let interaction = {
+ affectedEvents: relevantEvents,
+ mutatedEvents: internal.createEmptyEventStore(),
+ isEvent: true,
+ };
+ if (hit) {
+ let disallowed = hit.componentId === initialHit.componentId
+ && this.isHitComboAllowed
+ && !this.isHitComboAllowed(initialHit, hit);
+ if (!disallowed) {
+ mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-event-resizer-start'), eventInstance.range);
+ }
+ }
+ if (mutation) {
+ mutatedRelevantEvents = internal.applyMutationToEventStore(relevantEvents, context.getCurrentData().eventUiBases, mutation, context);
+ interaction.mutatedEvents = mutatedRelevantEvents;
+ if (!internal.isInteractionValid(interaction, hit.dateProfile, context)) {
+ isInvalid = true;
+ mutation = null;
+ mutatedRelevantEvents = null;
+ interaction.mutatedEvents = null;
+ }
+ }
+ if (mutatedRelevantEvents) {
+ context.dispatch({
+ type: 'SET_EVENT_RESIZE',
+ state: interaction,
+ });
+ }
+ else {
+ context.dispatch({ type: 'UNSET_EVENT_RESIZE' });
+ }
+ if (!isInvalid) {
+ internal.enableCursor();
+ }
+ else {
+ internal.disableCursor();
+ }
+ if (!isFinal) {
+ if (mutation && isHitsEqual(initialHit, hit)) {
+ mutation = null;
+ }
+ this.validMutation = mutation;
+ this.mutatedRelevantEvents = mutatedRelevantEvents;
+ }
+ };
+ this.handleDragEnd = (ev) => {
+ let { context } = this.component;
+ let eventDef = this.eventRange.def;
+ let eventInstance = this.eventRange.instance;
+ let eventApi = new internal.EventImpl(context, eventDef, eventInstance);
+ let relevantEvents = this.relevantEvents;
+ let mutatedRelevantEvents = this.mutatedRelevantEvents;
+ context.emitter.trigger('eventResizeStop', {
+ el: this.draggingSegEl,
+ event: eventApi,
+ jsEvent: ev.origEvent,
+ view: context.viewApi,
+ });
+ if (this.validMutation) {
+ let updatedEventApi = new internal.EventImpl(context, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null);
+ context.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: mutatedRelevantEvents,
+ });
+ let eventChangeArg = {
+ oldEvent: eventApi,
+ event: updatedEventApi,
+ relatedEvents: internal.buildEventApis(mutatedRelevantEvents, context, eventInstance),
+ revert() {
+ context.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: relevantEvents, // the pre-change events
+ });
+ },
+ };
+ context.emitter.trigger('eventResize', Object.assign(Object.assign({}, eventChangeArg), { el: this.draggingSegEl, startDelta: this.validMutation.startDelta || internal.createDuration(0), endDelta: this.validMutation.endDelta || internal.createDuration(0), jsEvent: ev.origEvent, view: context.viewApi }));
+ context.emitter.trigger('eventChange', eventChangeArg);
+ }
+ else {
+ context.emitter.trigger('_noEventResize');
+ }
+ // reset all internal state
+ this.draggingSeg = null;
+ this.relevantEvents = null;
+ this.validMutation = null;
+ // okay to keep eventInstance around. useful to set it in handlePointerDown
+ };
+ let { component } = settings;
+ let dragging = this.dragging = new FeaturefulElementDragging(settings.el);
+ dragging.pointer.selector = '.fc-event-resizer';
+ dragging.touchScrollAllowed = false;
+ dragging.autoScroller.isEnabled = component.context.options.dragScroll;
+ let hitDragging = this.hitDragging = new HitDragging(this.dragging, internal.interactionSettingsToStore(settings));
+ hitDragging.emitter.on('pointerdown', this.handlePointerDown);
+ hitDragging.emitter.on('dragstart', this.handleDragStart);
+ hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
+ hitDragging.emitter.on('dragend', this.handleDragEnd);
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ querySegEl(ev) {
+ return internal.elementClosest(ev.subjectEl, '.fc-event');
+ }
+ }
+ function computeMutation(hit0, hit1, isFromStart, instanceRange) {
+ let dateEnv = hit0.context.dateEnv;
+ let date0 = hit0.dateSpan.range.start;
+ let date1 = hit1.dateSpan.range.start;
+ let delta = internal.diffDates(date0, date1, dateEnv, hit0.largeUnit);
+ if (isFromStart) {
+ if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {
+ return { startDelta: delta };
+ }
+ }
+ else if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {
+ return { endDelta: delta };
+ }
+ return null;
+ }
+
+ class UnselectAuto {
+ constructor(context) {
+ this.context = context;
+ this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system
+ this.matchesCancel = false;
+ this.matchesEvent = false;
+ this.onSelect = (selectInfo) => {
+ if (selectInfo.jsEvent) {
+ this.isRecentPointerDateSelect = true;
+ }
+ };
+ this.onDocumentPointerDown = (pev) => {
+ let unselectCancel = this.context.options.unselectCancel;
+ let downEl = internal.getEventTargetViaRoot(pev.origEvent);
+ this.matchesCancel = !!internal.elementClosest(downEl, unselectCancel);
+ this.matchesEvent = !!internal.elementClosest(downEl, EventDragging.SELECTOR); // interaction started on an event?
+ };
+ this.onDocumentPointerUp = (pev) => {
+ let { context } = this;
+ let { documentPointer } = this;
+ let calendarState = context.getCurrentData();
+ // touch-scrolling should never unfocus any type of selection
+ if (!documentPointer.wasTouchScroll) {
+ if (calendarState.dateSelection && // an existing date selection?
+ !this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?
+ ) {
+ let unselectAuto = context.options.unselectAuto;
+ if (unselectAuto && (!unselectAuto || !this.matchesCancel)) {
+ context.calendarApi.unselect(pev);
+ }
+ }
+ if (calendarState.eventSelection && // an existing event selected?
+ !this.matchesEvent // interaction DIDN'T start on an event
+ ) {
+ context.dispatch({ type: 'UNSELECT_EVENT' });
+ }
+ }
+ this.isRecentPointerDateSelect = false;
+ };
+ let documentPointer = this.documentPointer = new PointerDragging(document);
+ documentPointer.shouldIgnoreMove = true;
+ documentPointer.shouldWatchScroll = false;
+ documentPointer.emitter.on('pointerdown', this.onDocumentPointerDown);
+ documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);
+ /*
+ TODO: better way to know about whether there was a selection with the pointer
+ */
+ context.emitter.on('select', this.onSelect);
+ }
+ destroy() {
+ this.context.emitter.off('select', this.onSelect);
+ this.documentPointer.destroy();
+ }
+ }
+
+ const OPTION_REFINERS = {
+ fixedMirrorParent: internal.identity,
+ };
+ const LISTENER_REFINERS = {
+ dateClick: internal.identity,
+ eventDragStart: internal.identity,
+ eventDragStop: internal.identity,
+ eventDrop: internal.identity,
+ eventResizeStart: internal.identity,
+ eventResizeStop: internal.identity,
+ eventResize: internal.identity,
+ drop: internal.identity,
+ eventReceive: internal.identity,
+ eventLeave: internal.identity,
+ };
+
+ /*
+ Given an already instantiated draggable object for one-or-more elements,
+ Interprets any dragging as an attempt to drag an events that lives outside
+ of a calendar onto a calendar.
+ */
+ class ExternalElementDragging {
+ constructor(dragging, suppliedDragMeta) {
+ this.receivingContext = null;
+ this.droppableEvent = null; // will exist for all drags, even if create:false
+ this.suppliedDragMeta = null;
+ this.dragMeta = null;
+ this.handleDragStart = (ev) => {
+ this.dragMeta = this.buildDragMeta(ev.subjectEl);
+ };
+ this.handleHitUpdate = (hit, isFinal, ev) => {
+ let { dragging } = this.hitDragging;
+ let receivingContext = null;
+ let droppableEvent = null;
+ let isInvalid = false;
+ let interaction = {
+ affectedEvents: internal.createEmptyEventStore(),
+ mutatedEvents: internal.createEmptyEventStore(),
+ isEvent: this.dragMeta.create,
+ };
+ if (hit) {
+ receivingContext = hit.context;
+ if (this.canDropElOnCalendar(ev.subjectEl, receivingContext)) {
+ droppableEvent = computeEventForDateSpan(hit.dateSpan, this.dragMeta, receivingContext);
+ interaction.mutatedEvents = internal.eventTupleToStore(droppableEvent);
+ isInvalid = !internal.isInteractionValid(interaction, hit.dateProfile, receivingContext);
+ if (isInvalid) {
+ interaction.mutatedEvents = internal.createEmptyEventStore();
+ droppableEvent = null;
+ }
+ }
+ }
+ this.displayDrag(receivingContext, interaction);
+ // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)
+ // TODO: wish we could somehow wait for dispatch to guarantee render
+ dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-event-mirror'));
+ if (!isInvalid) {
+ internal.enableCursor();
+ }
+ else {
+ internal.disableCursor();
+ }
+ if (!isFinal) {
+ dragging.setMirrorNeedsRevert(!droppableEvent);
+ this.receivingContext = receivingContext;
+ this.droppableEvent = droppableEvent;
+ }
+ };
+ this.handleDragEnd = (pev) => {
+ let { receivingContext, droppableEvent } = this;
+ this.clearDrag();
+ if (receivingContext && droppableEvent) {
+ let finalHit = this.hitDragging.finalHit;
+ let finalView = finalHit.context.viewApi;
+ let dragMeta = this.dragMeta;
+ receivingContext.emitter.trigger('drop', Object.assign(Object.assign({}, buildDatePointApiWithContext(finalHit.dateSpan, receivingContext)), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView }));
+ if (dragMeta.create) {
+ let addingEvents = internal.eventTupleToStore(droppableEvent);
+ receivingContext.dispatch({
+ type: 'MERGE_EVENTS',
+ eventStore: addingEvents,
+ });
+ if (pev.isTouch) {
+ receivingContext.dispatch({
+ type: 'SELECT_EVENT',
+ eventInstanceId: droppableEvent.instance.instanceId,
+ });
+ }
+ // signal that an external event landed
+ receivingContext.emitter.trigger('eventReceive', {
+ event: new internal.EventImpl(receivingContext, droppableEvent.def, droppableEvent.instance),
+ relatedEvents: [],
+ revert() {
+ receivingContext.dispatch({
+ type: 'REMOVE_EVENTS',
+ eventStore: addingEvents,
+ });
+ },
+ draggedEl: pev.subjectEl,
+ view: finalView,
+ });
+ }
+ }
+ this.receivingContext = null;
+ this.droppableEvent = null;
+ };
+ let hitDragging = this.hitDragging = new HitDragging(dragging, internal.interactionSettingsStore);
+ hitDragging.requireInitial = false; // will start outside of a component
+ hitDragging.emitter.on('dragstart', this.handleDragStart);
+ hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
+ hitDragging.emitter.on('dragend', this.handleDragEnd);
+ this.suppliedDragMeta = suppliedDragMeta;
+ }
+ buildDragMeta(subjectEl) {
+ if (typeof this.suppliedDragMeta === 'object') {
+ return internal.parseDragMeta(this.suppliedDragMeta);
+ }
+ if (typeof this.suppliedDragMeta === 'function') {
+ return internal.parseDragMeta(this.suppliedDragMeta(subjectEl));
+ }
+ return getDragMetaFromEl(subjectEl);
+ }
+ displayDrag(nextContext, state) {
+ let prevContext = this.receivingContext;
+ if (prevContext && prevContext !== nextContext) {
+ prevContext.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ if (nextContext) {
+ nextContext.dispatch({ type: 'SET_EVENT_DRAG', state });
+ }
+ }
+ clearDrag() {
+ if (this.receivingContext) {
+ this.receivingContext.dispatch({ type: 'UNSET_EVENT_DRAG' });
+ }
+ }
+ canDropElOnCalendar(el, receivingContext) {
+ let dropAccept = receivingContext.options.dropAccept;
+ if (typeof dropAccept === 'function') {
+ return dropAccept.call(receivingContext.calendarApi, el);
+ }
+ if (typeof dropAccept === 'string' && dropAccept) {
+ return Boolean(internal.elementMatches(el, dropAccept));
+ }
+ return true;
+ }
+ }
+ // Utils for computing event store from the DragMeta
+ // ----------------------------------------------------------------------------------------------------
+ function computeEventForDateSpan(dateSpan, dragMeta, context) {
+ let defProps = Object.assign({}, dragMeta.leftoverProps);
+ for (let transform of context.pluginHooks.externalDefTransforms) {
+ Object.assign(defProps, transform(dateSpan, dragMeta));
+ }
+ let { refined, extra } = internal.refineEventDef(defProps, context);
+ let def = internal.parseEventDef(refined, extra, dragMeta.sourceId, dateSpan.allDay, context.options.forceEventDuration || Boolean(dragMeta.duration), // hasEnd
+ context);
+ let start = dateSpan.range.start;
+ // only rely on time info if drop zone is all-day,
+ // otherwise, we already know the time
+ if (dateSpan.allDay && dragMeta.startTime) {
+ start = context.dateEnv.add(start, dragMeta.startTime);
+ }
+ let end = dragMeta.duration ?
+ context.dateEnv.add(start, dragMeta.duration) :
+ internal.getDefaultEventEnd(dateSpan.allDay, start, context);
+ let instance = internal.createEventInstance(def.defId, { start, end });
+ return { def, instance };
+ }
+ // Utils for extracting data from element
+ // ----------------------------------------------------------------------------------------------------
+ function getDragMetaFromEl(el) {
+ let str = getEmbeddedElData(el, 'event');
+ let obj = str ?
+ JSON.parse(str) :
+ { create: false }; // if no embedded data, assume no event creation
+ return internal.parseDragMeta(obj);
+ }
+ internal.config.dataAttrPrefix = '';
+ function getEmbeddedElData(el, name) {
+ let prefix = internal.config.dataAttrPrefix;
+ let prefixedName = (prefix ? prefix + '-' : '') + name;
+ return el.getAttribute('data-' + prefixedName) || '';
+ }
+
+ /*
+ Makes an element (that is *external* to any calendar) draggable.
+ Can pass in data that determines how an event will be created when dropped onto a calendar.
+ Leverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.
+ */
+ class ExternalDraggable {
+ constructor(el, settings = {}) {
+ this.handlePointerDown = (ev) => {
+ let { dragging } = this;
+ let { minDistance, longPressDelay } = this.settings;
+ dragging.minDistance =
+ minDistance != null ?
+ minDistance :
+ (ev.isTouch ? 0 : internal.BASE_OPTION_DEFAULTS.eventDragMinDistance);
+ dragging.delay =
+ ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv
+ (longPressDelay != null ? longPressDelay : internal.BASE_OPTION_DEFAULTS.longPressDelay) :
+ 0;
+ };
+ this.handleDragStart = (ev) => {
+ if (ev.isTouch &&
+ this.dragging.delay &&
+ ev.subjectEl.classList.contains('fc-event')) {
+ this.dragging.mirror.getMirrorEl().classList.add('fc-event-selected');
+ }
+ };
+ this.settings = settings;
+ let dragging = this.dragging = new FeaturefulElementDragging(el);
+ dragging.touchScrollAllowed = false;
+ if (settings.itemSelector != null) {
+ dragging.pointer.selector = settings.itemSelector;
+ }
+ if (settings.appendTo != null) {
+ dragging.mirror.parentNode = settings.appendTo; // TODO: write tests
+ }
+ dragging.emitter.on('pointerdown', this.handlePointerDown);
+ dragging.emitter.on('dragstart', this.handleDragStart);
+ new ExternalElementDragging(dragging, settings.eventData); // eslint-disable-line no-new
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ }
+
+ /*
+ Detects when a *THIRD-PARTY* drag-n-drop system interacts with elements.
+ The third-party system is responsible for drawing the visuals effects of the drag.
+ This class simply monitors for pointer movements and fires events.
+ It also has the ability to hide the moving element (the "mirror") during the drag.
+ */
+ class InferredElementDragging extends internal.ElementDragging {
+ constructor(containerEl) {
+ super(containerEl);
+ this.shouldIgnoreMove = false;
+ this.mirrorSelector = '';
+ this.currentMirrorEl = null;
+ this.handlePointerDown = (ev) => {
+ this.emitter.trigger('pointerdown', ev);
+ if (!this.shouldIgnoreMove) {
+ // fire dragstart right away. does not support delay or min-distance
+ this.emitter.trigger('dragstart', ev);
+ }
+ };
+ this.handlePointerMove = (ev) => {
+ if (!this.shouldIgnoreMove) {
+ this.emitter.trigger('dragmove', ev);
+ }
+ };
+ this.handlePointerUp = (ev) => {
+ this.emitter.trigger('pointerup', ev);
+ if (!this.shouldIgnoreMove) {
+ // fire dragend right away. does not support a revert animation
+ this.emitter.trigger('dragend', ev);
+ }
+ };
+ let pointer = this.pointer = new PointerDragging(containerEl);
+ pointer.emitter.on('pointerdown', this.handlePointerDown);
+ pointer.emitter.on('pointermove', this.handlePointerMove);
+ pointer.emitter.on('pointerup', this.handlePointerUp);
+ }
+ destroy() {
+ this.pointer.destroy();
+ }
+ setIgnoreMove(bool) {
+ this.shouldIgnoreMove = bool;
+ }
+ setMirrorIsVisible(bool) {
+ if (bool) {
+ // restore a previously hidden element.
+ // use the reference in case the selector class has already been removed.
+ if (this.currentMirrorEl) {
+ this.currentMirrorEl.style.visibility = '';
+ this.currentMirrorEl = null;
+ }
+ }
+ else {
+ let mirrorEl = this.mirrorSelector
+ // TODO: somehow query FullCalendars WITHIN shadow-roots
+ ? document.querySelector(this.mirrorSelector)
+ : null;
+ if (mirrorEl) {
+ this.currentMirrorEl = mirrorEl;
+ mirrorEl.style.visibility = 'hidden';
+ }
+ }
+ }
+ }
+
+ /*
+ Bridges third-party drag-n-drop systems with FullCalendar.
+ Must be instantiated and destroyed by caller.
+ */
+ class ThirdPartyDraggable {
+ constructor(containerOrSettings, settings) {
+ let containerEl = document;
+ if (
+ // wish we could just test instanceof EventTarget, but doesn't work in IE11
+ containerOrSettings === document ||
+ containerOrSettings instanceof Element) {
+ containerEl = containerOrSettings;
+ settings = settings || {};
+ }
+ else {
+ settings = (containerOrSettings || {});
+ }
+ let dragging = this.dragging = new InferredElementDragging(containerEl);
+ if (typeof settings.itemSelector === 'string') {
+ dragging.pointer.selector = settings.itemSelector;
+ }
+ else if (containerEl === document) {
+ dragging.pointer.selector = '[data-event]';
+ }
+ if (typeof settings.mirrorSelector === 'string') {
+ dragging.mirrorSelector = settings.mirrorSelector;
+ }
+ new ExternalElementDragging(dragging, settings.eventData); // eslint-disable-line no-new
+ }
+ destroy() {
+ this.dragging.destroy();
+ }
+ }
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/interaction',
+ componentInteractions: [DateClicking, DateSelecting, EventDragging, EventResizing],
+ calendarInteractions: [UnselectAuto],
+ elementDraggingImpl: FeaturefulElementDragging,
+ optionRefiners: OPTION_REFINERS,
+ listenerRefiners: LISTENER_REFINERS,
+ });
+
+ core.globalPlugins.push(plugin);
+
+ exports.Draggable = ExternalDraggable;
+ exports.ThirdPartyDraggable = ThirdPartyDraggable;
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal);
diff --git a/library/fullcalendar/packages/interaction/index.global.min.js b/library/fullcalendar/packages/interaction/index.global.min.js
new file mode 100644
index 000000000..4c240143c
--- /dev/null
+++ b/library/fullcalendar/packages/interaction/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Interaction Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/editable
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Interaction=function(t,e,i){"use strict";i.config.touchMouseIgnoreWait=500;let n=0,s=0,r=!1;class o{constructor(t){this.subjectEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=t=>{if(!this.shouldIgnoreMouse()&&function(t){return 0===t.button&&!t.ctrlKey}(t)&&this.tryStart(t)){let e=this.createEventFromMouse(t,!0);this.emitter.trigger("pointerdown",e),this.initScrollWatch(e),this.shouldIgnoreMove||document.addEventListener("mousemove",this.handleMouseMove),document.addEventListener("mouseup",this.handleMouseUp)}},this.handleMouseMove=t=>{let e=this.createEventFromMouse(t);this.recordCoords(e),this.emitter.trigger("pointermove",e)},this.handleMouseUp=t=>{document.removeEventListener("mousemove",this.handleMouseMove),document.removeEventListener("mouseup",this.handleMouseUp),this.emitter.trigger("pointerup",this.createEventFromMouse(t)),this.cleanup()},this.handleTouchStart=t=>{if(this.tryStart(t)){this.isTouchDragging=!0;let e=this.createEventFromTouch(t,!0);this.emitter.trigger("pointerdown",e),this.initScrollWatch(e);let i=t.target;this.shouldIgnoreMove||i.addEventListener("touchmove",this.handleTouchMove),i.addEventListener("touchend",this.handleTouchEnd),i.addEventListener("touchcancel",this.handleTouchEnd),window.addEventListener("scroll",this.handleTouchScroll,!0)}},this.handleTouchMove=t=>{let e=this.createEventFromTouch(t);this.recordCoords(e),this.emitter.trigger("pointermove",e)},this.handleTouchEnd=t=>{if(this.isDragging){let e=t.target;e.removeEventListener("touchmove",this.handleTouchMove),e.removeEventListener("touchend",this.handleTouchEnd),e.removeEventListener("touchcancel",this.handleTouchEnd),window.removeEventListener("scroll",this.handleTouchScroll,!0),this.emitter.trigger("pointerup",this.createEventFromTouch(t)),this.cleanup(),this.isTouchDragging=!1,n+=1,setTimeout(()=>{n-=1},i.config.touchMouseIgnoreWait)}},this.handleTouchScroll=()=>{this.wasTouchScroll=!0},this.handleScroll=t=>{if(!this.shouldIgnoreMove){let e=window.pageXOffset-this.prevScrollX+this.prevPageX,i=window.pageYOffset-this.prevScrollY+this.prevPageY;this.emitter.trigger("pointermove",{origEvent:t,isTouch:this.isTouchDragging,subjectEl:this.subjectEl,pageX:e,pageY:i,deltaX:e-this.origPageX,deltaY:i-this.origPageY})}},this.containerEl=t,this.emitter=new i.Emitter,t.addEventListener("mousedown",this.handleMouseDown),t.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),s+=1,1===s&&window.addEventListener("touchmove",l,{passive:!1})}destroy(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),s-=1,s||window.removeEventListener("touchmove",l,{passive:!1})}tryStart(t){let e=this.querySubjectEl(t),n=t.target;return!(!e||this.handleSelector&&!i.elementClosest(n,this.handleSelector))&&(this.subjectEl=e,this.isDragging=!0,this.wasTouchScroll=!1,!0)}cleanup(){r=!1,this.isDragging=!1,this.subjectEl=null,this.destroyScrollWatch()}querySubjectEl(t){return this.selector?i.elementClosest(t.target,this.selector):this.containerEl}shouldIgnoreMouse(){return n||this.isTouchDragging}cancelTouchScroll(){this.isDragging&&(r=!0)}initScrollWatch(t){this.shouldWatchScroll&&(this.recordCoords(t),window.addEventListener("scroll",this.handleScroll,!0))}recordCoords(t){this.shouldWatchScroll&&(this.prevPageX=t.pageX,this.prevPageY=t.pageY,this.prevScrollX=window.pageXOffset,this.prevScrollY=window.pageYOffset)}destroyScrollWatch(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)}createEventFromMouse(t,e){let i=0,n=0;return e?(this.origPageX=t.pageX,this.origPageY=t.pageY):(i=t.pageX-this.origPageX,n=t.pageY-this.origPageY),{origEvent:t,isTouch:!1,subjectEl:this.subjectEl,pageX:t.pageX,pageY:t.pageY,deltaX:i,deltaY:n}}createEventFromTouch(t,e){let i,n,s=t.touches,r=0,o=0;return s&&s.length?(i=s[0].pageX,n=s[0].pageY):(i=t.pageX,n=t.pageY),e?(this.origPageX=i,this.origPageY=n):(r=i-this.origPageX,o=n-this.origPageY),{origEvent:t,isTouch:!0,subjectEl:this.subjectEl,pageX:i,pageY:n,deltaX:r,deltaY:o}}}function l(t){r&&t.preventDefault()}class a{constructor(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}start(t,e,i){this.sourceEl=t,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=e-window.pageXOffset,this.origScreenY=i-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()}handleMove(t,e){this.deltaX=t-window.pageXOffset-this.origScreenX,this.deltaY=e-window.pageYOffset-this.origScreenY,this.updateElPosition()}setIsVisible(t){t?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=t,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=t)}stop(t,e){let i=()=>{this.cleanup(),e()};t&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(i,this.revertDuration):setTimeout(i,0)}doRevertAnimation(t,e){let n=this.mirrorEl,s=this.sourceEl.getBoundingClientRect();n.style.transition="top "+e+"ms,left "+e+"ms",i.applyStyle(n,{left:s.left,top:s.top}),i.whenTransitionDone(n,()=>{n.style.transition="",t()})}cleanup(){this.mirrorEl&&(i.removeElement(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null}updateElPosition(){this.sourceEl&&this.isVisible&&i.applyStyle(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})}getMirrorEl(){let t=this.sourceElRect,e=this.mirrorEl;return e||(e=this.mirrorEl=this.sourceEl.cloneNode(!0),e.classList.add("fc-unselectable"),e.classList.add("fc-event-dragging"),i.applyStyle(e,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:t.right-t.left,height:t.bottom-t.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(e)),e}}class h extends i.ScrollController{constructor(t,e){super(),this.handleScroll=()=>{this.scrollTop=this.scrollController.getScrollTop(),this.scrollLeft=this.scrollController.getScrollLeft(),this.handleScrollChange()},this.scrollController=t,this.doesListening=e,this.scrollTop=this.origScrollTop=t.getScrollTop(),this.scrollLeft=this.origScrollLeft=t.getScrollLeft(),this.scrollWidth=t.getScrollWidth(),this.scrollHeight=t.getScrollHeight(),this.clientWidth=t.getClientWidth(),this.clientHeight=t.getClientHeight(),this.clientRect=this.computeClientRect(),this.doesListening&&this.getEventTarget().addEventListener("scroll",this.handleScroll)}destroy(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}setScrollTop(t){this.scrollController.setScrollTop(t),this.doesListening||(this.scrollTop=Math.max(Math.min(t,this.getMaxScrollTop()),0),this.handleScrollChange())}setScrollLeft(t){this.scrollController.setScrollLeft(t),this.doesListening||(this.scrollLeft=Math.max(Math.min(t,this.getMaxScrollLeft()),0),this.handleScrollChange())}getClientWidth(){return this.clientWidth}getClientHeight(){return this.clientHeight}getScrollWidth(){return this.scrollWidth}getScrollHeight(){return this.scrollHeight}handleScrollChange(){}}class c extends h{constructor(t,e){super(new i.ElementScrollController(t),e)}getEventTarget(){return this.scrollController.el}computeClientRect(){return i.computeInnerRect(this.scrollController.el)}}class d extends h{constructor(t){super(new i.WindowScrollController,t)}getEventTarget(){return window}computeClientRect(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}}handleScrollChange(){this.clientRect=this.computeClientRect()}}const g="function"==typeof performance?performance.now:Date.now;class u{constructor(){this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=()=>{if(this.isAnimating){let t=this.computeBestEdge(this.pointerScreenX+window.pageXOffset,this.pointerScreenY+window.pageYOffset);if(t){let e=g();this.handleSide(t,(e-this.msSinceRequest)/1e3),this.requestAnimation(e)}else this.isAnimating=!1}}}start(t,e,i){this.isEnabled&&(this.scrollCaches=this.buildCaches(i),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(t,e))}handleMove(t,e){if(this.isEnabled){let i=t-window.pageXOffset,n=e-window.pageYOffset,s=null===this.pointerScreenY?0:n-this.pointerScreenY,r=null===this.pointerScreenX?0:i-this.pointerScreenX;s<0?this.everMovedUp=!0:s>0&&(this.everMovedDown=!0),r<0?this.everMovedLeft=!0:r>0&&(this.everMovedRight=!0),this.pointerScreenX=i,this.pointerScreenY=n,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(g()))}}stop(){if(this.isEnabled){this.isAnimating=!1;for(let t of this.scrollCaches)t.destroy();this.scrollCaches=null}}requestAnimation(t){this.msSinceRequest=t,requestAnimationFrame(this.animate)}handleSide(t,e){let{scrollCache:i}=t,{edgeThreshold:n}=this,s=n-t.distance,r=s*s/(n*n)*this.maxVelocity*e,o=1;switch(t.name){case"left":o=-1;case"right":i.setScrollLeft(i.getScrollLeft()+r*o);break;case"top":o=-1;case"bottom":i.setScrollTop(i.getScrollTop()+r*o)}}computeBestEdge(t,e){let{edgeThreshold:i}=this,n=null,s=this.scrollCaches||[];for(let r of s){let s=r.clientRect,o=t-s.left,l=s.right-t,a=e-s.top,h=s.bottom-e;o>=0&&l>=0&&a>=0&&h>=0&&(a<=i&&this.everMovedUp&&r.canScrollUp()&&(!n||n.distance>a)&&(n={scrollCache:r,name:"top",distance:a}),h<=i&&this.everMovedDown&&r.canScrollDown()&&(!n||n.distance>h)&&(n={scrollCache:r,name:"bottom",distance:h}),o<=i&&this.everMovedLeft&&r.canScrollLeft()&&(!n||n.distance>o)&&(n={scrollCache:r,name:"left",distance:o}),l<=i&&this.everMovedRight&&r.canScrollRight()&&(!n||n.distance>l)&&(n={scrollCache:r,name:"right",distance:l}))}return n}buildCaches(t){return this.queryScrollEls(t).map(t=>t===window?new d(!1):new c(t,!1))}queryScrollEls(t){let e=[];for(let n of this.scrollQuery)"object"==typeof n?e.push(n):e.push(...Array.prototype.slice.call(i.getElRoot(t).querySelectorAll(n)));return e}}class p extends i.ElementDragging{constructor(t,e){super(t),this.containerEl=t,this.delay=null,this.minDistance=0,this.touchScrollAllowed=!0,this.mirrorNeedsRevert=!1,this.isInteracting=!1,this.isDragging=!1,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,this.delayTimeoutId=null,this.onPointerDown=t=>{this.isDragging||(this.isInteracting=!0,this.isDelayEnded=!1,this.isDistanceSurpassed=!1,i.preventSelection(document.body),i.preventContextMenu(document.body),t.isTouch||t.origEvent.preventDefault(),this.emitter.trigger("pointerdown",t),this.isInteracting&&!this.pointer.shouldIgnoreMove&&(this.mirror.setIsVisible(!1),this.mirror.start(t.subjectEl,t.pageX,t.pageY),this.startDelay(t),this.minDistance||this.handleDistanceSurpassed(t)))},this.onPointerMove=t=>{if(this.isInteracting){if(this.emitter.trigger("pointermove",t),!this.isDistanceSurpassed){let e,i=this.minDistance,{deltaX:n,deltaY:s}=t;e=n*n+s*s,e>=i*i&&this.handleDistanceSurpassed(t)}this.isDragging&&("scroll"!==t.origEvent.type&&(this.mirror.handleMove(t.pageX,t.pageY),this.autoScroller.handleMove(t.pageX,t.pageY)),this.emitter.trigger("dragmove",t))}},this.onPointerUp=t=>{this.isInteracting&&(this.isInteracting=!1,i.allowSelection(document.body),i.allowContextMenu(document.body),this.emitter.trigger("pointerup",t),this.isDragging&&(this.autoScroller.stop(),this.tryStopDrag(t)),this.delayTimeoutId&&(clearTimeout(this.delayTimeoutId),this.delayTimeoutId=null))};let n=this.pointer=new o(t);n.emitter.on("pointerdown",this.onPointerDown),n.emitter.on("pointermove",this.onPointerMove),n.emitter.on("pointerup",this.onPointerUp),e&&(n.selector=e),this.mirror=new a,this.autoScroller=new u}destroy(){this.pointer.destroy(),this.onPointerUp({})}startDelay(t){"number"==typeof this.delay?this.delayTimeoutId=setTimeout(()=>{this.delayTimeoutId=null,this.handleDelayEnd(t)},this.delay):this.handleDelayEnd(t)}handleDelayEnd(t){this.isDelayEnded=!0,this.tryStartDrag(t)}handleDistanceSurpassed(t){this.isDistanceSurpassed=!0,this.tryStartDrag(t)}tryStartDrag(t){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(t.pageX,t.pageY,this.containerEl),this.emitter.trigger("dragstart",t),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))}tryStopDrag(t){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,t))}stopDrag(t){this.isDragging=!1,this.emitter.trigger("dragend",t)}setIgnoreMove(t){this.pointer.shouldIgnoreMove=t}setMirrorIsVisible(t){this.mirror.setIsVisible(t)}setMirrorNeedsRevert(t){this.mirrorNeedsRevert=t}setAutoScrollEnabled(t){this.autoScroller.isEnabled=t}}class v{constructor(t){this.origRect=i.computeRect(t),this.scrollCaches=i.getClippingParents(t).map(t=>new c(t,!0))}destroy(){for(let t of this.scrollCaches)t.destroy()}computeLeft(){let t=this.origRect.left;for(let e of this.scrollCaches)t+=e.origScrollLeft-e.getScrollLeft();return t}computeTop(){let t=this.origRect.top;for(let e of this.scrollCaches)t+=e.origScrollTop-e.getScrollTop();return t}isWithinClipping(t,e){let n={left:t,top:e};for(let t of this.scrollCaches)if(!E(t.getEventTarget())&&!i.pointInsideRect(n,t.clientRect))return!1;return!0}}function E(t){let e=t.tagName;return"HTML"===e||"BODY"===e}class m{constructor(t,e){this.useSubjectCenter=!1,this.requireInitial=!0,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=t=>{let{dragging:e}=this;this.initialHit=null,this.movingHit=null,this.finalHit=null,this.prepareHits(),this.processFirstCoord(t),this.initialHit||!this.requireInitial?(e.setIgnoreMove(!1),this.emitter.trigger("pointerdown",t)):e.setIgnoreMove(!0)},this.handleDragStart=t=>{this.emitter.trigger("dragstart",t),this.handleMove(t,!0)},this.handleDragMove=t=>{this.emitter.trigger("dragmove",t),this.handleMove(t)},this.handlePointerUp=t=>{this.releaseHits(),this.emitter.trigger("pointerup",t)},this.handleDragEnd=t=>{this.movingHit&&this.emitter.trigger("hitupdate",null,!0,t),this.finalHit=this.movingHit,this.movingHit=null,this.emitter.trigger("dragend",t)},this.droppableStore=e,t.emitter.on("pointerdown",this.handlePointerDown),t.emitter.on("dragstart",this.handleDragStart),t.emitter.on("dragmove",this.handleDragMove),t.emitter.on("pointerup",this.handlePointerUp),t.emitter.on("dragend",this.handleDragEnd),this.dragging=t,this.emitter=new i.Emitter}processFirstCoord(t){let e,n={left:t.pageX,top:t.pageY},s=n,r=t.subjectEl;r instanceof HTMLElement&&(e=i.computeRect(r),s=i.constrainPoint(s,e));let o=this.initialHit=this.queryHitForOffset(s.left,s.top);if(o){if(this.useSubjectCenter&&e){let t=i.intersectRects(e,o.rect);t&&(s=i.getRectCenter(t))}this.coordAdjust=i.diffPoints(s,n)}else this.coordAdjust={left:0,top:0}}handleMove(t,e){let i=this.queryHitForOffset(t.pageX+this.coordAdjust.left,t.pageY+this.coordAdjust.top);!e&&S(this.movingHit,i)||(this.movingHit=i,this.emitter.trigger("hitupdate",i,!1,t))}prepareHits(){this.offsetTrackers=i.mapHash(this.droppableStore,t=>(t.component.prepareHits(),new v(t.el)))}releaseHits(){let{offsetTrackers:t}=this;for(let e in t)t[e].destroy();this.offsetTrackers={}}queryHitForOffset(t,e){let{droppableStore:n,offsetTrackers:s}=this,r=null;for(let o in n){let l=n[o].component,a=s[o];if(a&&a.isWithinClipping(t,e)){let n=a.computeLeft(),s=a.computeTop(),h=t-n,c=e-s,{origRect:d}=a,g=d.right-d.left,u=d.bottom-d.top;if(h>=0&&h<g&&c>=0&&c<u){let t=l.queryHit(h,c,g,u);t&&i.rangeContainsRange(t.dateProfile.activeRange,t.dateSpan.range)&&(!r||t.layer>r.layer)&&(t.componentId=o,t.context=l.context,t.rect.left+=n,t.rect.right+=n,t.rect.top+=s,t.rect.bottom+=s,r=t)}}}return r}}function S(t,e){return!t&&!e||Boolean(t)===Boolean(e)&&i.isDateSpansEqual(t.dateSpan,e.dateSpan)}function f(t,e){let i={};for(let n of e.pluginHooks.datePointTransforms)Object.assign(i,n(t,e));var n,s;return Object.assign(i,(n=t,{date:(s=e.dateEnv).toDate(n.range.start),dateStr:s.formatIso(n.range.start,{omitTime:n.allDay}),allDay:n.allDay})),i}class D extends i.Interaction{constructor(t){super(t),this.handlePointerDown=t=>{let{dragging:e}=this,i=t.origEvent.target;e.setIgnoreMove(!this.component.isValidDateDownEl(i))},this.handleDragEnd=t=>{let{component:e}=this,{pointer:i}=this.dragging;if(!i.wasTouchScroll){let{initialHit:i,finalHit:n}=this.hitDragging;if(i&&n&&S(i,n)){let{context:n}=e,s=Object.assign(Object.assign({},f(i.dateSpan,n)),{dayEl:i.dayEl,jsEvent:t.origEvent,view:n.viewApi||n.calendarApi.view});n.emitter.trigger("dateClick",s)}}},this.dragging=new p(t.el),this.dragging.autoScroller.isEnabled=!1;let e=this.hitDragging=new m(this.dragging,i.interactionSettingsToStore(t));e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}}class y extends i.Interaction{constructor(t){super(t),this.dragSelection=null,this.handlePointerDown=t=>{let{component:e,dragging:i}=this,{options:n}=e.context,s=n.selectable&&e.isValidDateDownEl(t.origEvent.target);i.setIgnoreMove(!s),i.delay=t.isTouch?function(t){let{options:e}=t.context,i=e.selectLongPressDelay;null==i&&(i=e.longPressDelay);return i}(e):null},this.handleDragStart=t=>{this.component.context.calendarApi.unselect(t)},this.handleHitUpdate=(t,e)=>{let{context:n}=this.component,s=null,r=!1;if(t){let e=this.hitDragging.initialHit;t.componentId===e.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(e,t)||(s=function(t,e,n){let s=t.dateSpan,r=e.dateSpan,o=[s.range.start,s.range.end,r.range.start,r.range.end];o.sort(i.compareNumbers);let l={};for(let i of n){let n=i(t,e);if(!1===n)return null;n&&Object.assign(l,n)}return l.range={start:o[0],end:o[3]},l.allDay=s.allDay,l}(e,t,n.pluginHooks.dateSelectionTransformers)),s&&i.isDateSelectionValid(s,t.dateProfile,n)||(r=!0,s=null)}s?n.dispatch({type:"SELECT_DATES",selection:s}):e||n.dispatch({type:"UNSELECT_DATES"}),r?i.disableCursor():i.enableCursor(),e||(this.dragSelection=s)},this.handlePointerUp=t=>{this.dragSelection&&(i.triggerDateSelect(this.dragSelection,t,this.component.context),this.dragSelection=null)};let{component:e}=t,{options:n}=e.context,s=this.dragging=new p(t.el);s.touchScrollAllowed=!1,s.minDistance=n.selectMinDistance||0,s.autoScroller.isEnabled=n.dragScroll;let r=this.hitDragging=new m(this.dragging,i.interactionSettingsToStore(t));r.emitter.on("pointerdown",this.handlePointerDown),r.emitter.on("dragstart",this.handleDragStart),r.emitter.on("hitupdate",this.handleHitUpdate),r.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.dragging.destroy()}}class w extends i.Interaction{constructor(t){super(t),this.subjectEl=null,this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=t=>{let e=t.origEvent.target,{component:n,dragging:s}=this,{mirror:r}=s,{options:o}=n.context,l=n.context;this.subjectEl=t.subjectEl;let a=this.subjectSeg=i.getElSeg(t.subjectEl),h=(this.eventRange=a.eventRange).instance.instanceId;this.relevantEvents=i.getRelevantEvents(l.getCurrentData().eventStore,h),s.minDistance=t.isTouch?0:o.eventDragMinDistance,s.delay=t.isTouch&&h!==n.props.eventSelection?function(t){let{options:e}=t.context,i=e.eventLongPressDelay;null==i&&(i=e.longPressDelay);return i}(n):null,o.fixedMirrorParent?r.parentNode=o.fixedMirrorParent:r.parentNode=i.elementClosest(e,".fc"),r.revertDuration=o.dragRevertDuration;let c=n.isValidSegDownEl(e)&&!i.elementClosest(e,".fc-event-resizer");s.setIgnoreMove(!c),this.isDragging=c&&t.subjectEl.classList.contains("fc-event-draggable")},this.handleDragStart=t=>{let e=this.component.context,n=this.eventRange,s=n.instance.instanceId;t.isTouch?s!==this.component.props.eventSelection&&e.dispatch({type:"SELECT_EVENT",eventInstanceId:s}):e.dispatch({type:"UNSELECT_EVENT"}),this.isDragging&&(e.calendarApi.unselect(t),e.emitter.trigger("eventDragStart",{el:this.subjectEl,event:new i.EventImpl(e,n.def,n.instance),jsEvent:t.origEvent,view:e.viewApi}))},this.handleHitUpdate=(t,e)=>{if(!this.isDragging)return;let n=this.relevantEvents,s=this.hitDragging.initialHit,r=this.component.context,o=null,l=null,a=null,h=!1,c={affectedEvents:n,mutatedEvents:i.createEmptyEventStore(),isEvent:!0};if(t){o=t.context;let e=o.options;r===o||e.editable&&e.droppable?(l=function(t,e,n){let s=t.dateSpan,r=e.dateSpan,o=s.range.start,l=r.range.start,a={};s.allDay!==r.allDay&&(a.allDay=r.allDay,a.hasEnd=e.context.options.allDayMaintainDuration,r.allDay&&(o=i.startOfDay(o)));let h=i.diffDates(o,l,t.context.dateEnv,t.componentId===e.componentId?t.largeUnit:null);h.milliseconds&&(a.allDay=!1);let c={datesDelta:h,standardProps:a};for(let i of n)i(c,t,e);return c}(s,t,o.getCurrentData().pluginHooks.eventDragMutationMassagers),l&&(a=i.applyMutationToEventStore(n,o.getCurrentData().eventUiBases,l,o),c.mutatedEvents=a,i.isInteractionValid(c,t.dateProfile,o)||(h=!0,l=null,a=null,c.mutatedEvents=i.createEmptyEventStore()))):o=null}this.displayDrag(o,c),h?i.disableCursor():i.enableCursor(),e||(r===o&&S(s,t)&&(l=null),this.dragging.setMirrorNeedsRevert(!l),this.dragging.setMirrorIsVisible(!t||!i.getElRoot(this.subjectEl).querySelector(".fc-event-mirror")),this.receivingContext=o,this.validMutation=l,this.mutatedRelevantEvents=a)},this.handlePointerUp=()=>{this.isDragging||this.cleanup()},this.handleDragEnd=t=>{if(this.isDragging){let e=this.component.context,n=e.viewApi,{receivingContext:s,validMutation:r}=this,o=this.eventRange.def,l=this.eventRange.instance,a=new i.EventImpl(e,o,l),h=this.relevantEvents,c=this.mutatedRelevantEvents,{finalHit:d}=this.hitDragging;if(this.clearDrag(),e.emitter.trigger("eventDragStop",{el:this.subjectEl,event:a,jsEvent:t.origEvent,view:n}),r){if(s===e){let s=new i.EventImpl(e,c.defs[o.defId],l?c.instances[l.instanceId]:null);e.dispatch({type:"MERGE_EVENTS",eventStore:c});let d={oldEvent:a,event:s,relatedEvents:i.buildEventApis(c,e,l),revert(){e.dispatch({type:"MERGE_EVENTS",eventStore:h})}},g={};for(let t of e.getCurrentData().pluginHooks.eventDropTransformers)Object.assign(g,t(r,e));e.emitter.trigger("eventDrop",Object.assign(Object.assign(Object.assign({},d),g),{el:t.subjectEl,delta:r.datesDelta,jsEvent:t.origEvent,view:n})),e.emitter.trigger("eventChange",d)}else if(s){let r={event:a,relatedEvents:i.buildEventApis(h,e,l),revert(){e.dispatch({type:"MERGE_EVENTS",eventStore:h})}};e.emitter.trigger("eventLeave",Object.assign(Object.assign({},r),{draggedEl:t.subjectEl,view:n})),e.dispatch({type:"REMOVE_EVENTS",eventStore:h}),e.emitter.trigger("eventRemove",r);let g=c.defs[o.defId],u=c.instances[l.instanceId],p=new i.EventImpl(s,g,u);s.dispatch({type:"MERGE_EVENTS",eventStore:c});let v={event:p,relatedEvents:i.buildEventApis(c,s,u),revert(){s.dispatch({type:"REMOVE_EVENTS",eventStore:c})}};s.emitter.trigger("eventAdd",v),t.isTouch&&s.dispatch({type:"SELECT_EVENT",eventInstanceId:l.instanceId}),s.emitter.trigger("drop",Object.assign(Object.assign({},f(d.dateSpan,s)),{draggedEl:t.subjectEl,jsEvent:t.origEvent,view:d.context.viewApi})),s.emitter.trigger("eventReceive",Object.assign(Object.assign({},v),{draggedEl:t.subjectEl,view:d.context.viewApi}))}}else e.emitter.trigger("_noEventDrop")}this.cleanup()};let{component:e}=this,{options:n}=e.context,s=this.dragging=new p(t.el);s.pointer.selector=w.SELECTOR,s.touchScrollAllowed=!1,s.autoScroller.isEnabled=n.dragScroll;let r=this.hitDragging=new m(this.dragging,i.interactionSettingsStore);r.useSubjectCenter=t.useEventCenter,r.emitter.on("pointerdown",this.handlePointerDown),r.emitter.on("dragstart",this.handleDragStart),r.emitter.on("hitupdate",this.handleHitUpdate),r.emitter.on("pointerup",this.handlePointerUp),r.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}displayDrag(t,e){let n=this.component.context,s=this.receivingContext;s&&s!==t&&(s===n?s.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:e.affectedEvents,mutatedEvents:i.createEmptyEventStore(),isEvent:!0}}):s.dispatch({type:"UNSET_EVENT_DRAG"})),t&&t.dispatch({type:"SET_EVENT_DRAG",state:e})}clearDrag(){let t=this.component.context,{receivingContext:e}=this;e&&e.dispatch({type:"UNSET_EVENT_DRAG"}),t!==e&&t.dispatch({type:"UNSET_EVENT_DRAG"})}cleanup(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingContext=null,this.validMutation=null,this.mutatedRelevantEvents=null}}w.SELECTOR=".fc-event-draggable, .fc-event-resizable";class T extends i.Interaction{constructor(t){super(t),this.draggingSegEl=null,this.draggingSeg=null,this.eventRange=null,this.relevantEvents=null,this.validMutation=null,this.mutatedRelevantEvents=null,this.handlePointerDown=t=>{let{component:e}=this,n=this.querySegEl(t),s=i.getElSeg(n),r=this.eventRange=s.eventRange;this.dragging.minDistance=e.context.options.eventDragMinDistance,this.dragging.setIgnoreMove(!this.component.isValidSegDownEl(t.origEvent.target)||t.isTouch&&this.component.props.eventSelection!==r.instance.instanceId)},this.handleDragStart=t=>{let{context:e}=this.component,n=this.eventRange;this.relevantEvents=i.getRelevantEvents(e.getCurrentData().eventStore,this.eventRange.instance.instanceId);let s=this.querySegEl(t);this.draggingSegEl=s,this.draggingSeg=i.getElSeg(s),e.calendarApi.unselect(),e.emitter.trigger("eventResizeStart",{el:s,event:new i.EventImpl(e,n.def,n.instance),jsEvent:t.origEvent,view:e.viewApi})},this.handleHitUpdate=(t,e,n)=>{let{context:s}=this.component,r=this.relevantEvents,o=this.hitDragging.initialHit,l=this.eventRange.instance,a=null,h=null,c=!1,d={affectedEvents:r,mutatedEvents:i.createEmptyEventStore(),isEvent:!0};if(t){t.componentId===o.componentId&&this.isHitComboAllowed&&!this.isHitComboAllowed(o,t)||(a=function(t,e,n,s){let r=t.context.dateEnv,o=t.dateSpan.range.start,l=e.dateSpan.range.start,a=i.diffDates(o,l,r,t.largeUnit);if(n){if(r.add(s.start,a)<s.end)return{startDelta:a}}else if(r.add(s.end,a)>s.start)return{endDelta:a};return null}(o,t,n.subjectEl.classList.contains("fc-event-resizer-start"),l.range))}a&&(h=i.applyMutationToEventStore(r,s.getCurrentData().eventUiBases,a,s),d.mutatedEvents=h,i.isInteractionValid(d,t.dateProfile,s)||(c=!0,a=null,h=null,d.mutatedEvents=null)),h?s.dispatch({type:"SET_EVENT_RESIZE",state:d}):s.dispatch({type:"UNSET_EVENT_RESIZE"}),c?i.disableCursor():i.enableCursor(),e||(a&&S(o,t)&&(a=null),this.validMutation=a,this.mutatedRelevantEvents=h)},this.handleDragEnd=t=>{let{context:e}=this.component,n=this.eventRange.def,s=this.eventRange.instance,r=new i.EventImpl(e,n,s),o=this.relevantEvents,l=this.mutatedRelevantEvents;if(e.emitter.trigger("eventResizeStop",{el:this.draggingSegEl,event:r,jsEvent:t.origEvent,view:e.viewApi}),this.validMutation){let a=new i.EventImpl(e,l.defs[n.defId],s?l.instances[s.instanceId]:null);e.dispatch({type:"MERGE_EVENTS",eventStore:l});let h={oldEvent:r,event:a,relatedEvents:i.buildEventApis(l,e,s),revert(){e.dispatch({type:"MERGE_EVENTS",eventStore:o})}};e.emitter.trigger("eventResize",Object.assign(Object.assign({},h),{el:this.draggingSegEl,startDelta:this.validMutation.startDelta||i.createDuration(0),endDelta:this.validMutation.endDelta||i.createDuration(0),jsEvent:t.origEvent,view:e.viewApi})),e.emitter.trigger("eventChange",h)}else e.emitter.trigger("_noEventResize");this.draggingSeg=null,this.relevantEvents=null,this.validMutation=null};let{component:e}=t,n=this.dragging=new p(t.el);n.pointer.selector=".fc-event-resizer",n.touchScrollAllowed=!1,n.autoScroller.isEnabled=e.context.options.dragScroll;let s=this.hitDragging=new m(this.dragging,i.interactionSettingsToStore(t));s.emitter.on("pointerdown",this.handlePointerDown),s.emitter.on("dragstart",this.handleDragStart),s.emitter.on("hitupdate",this.handleHitUpdate),s.emitter.on("dragend",this.handleDragEnd)}destroy(){this.dragging.destroy()}querySegEl(t){return i.elementClosest(t.subjectEl,".fc-event")}}const b={fixedMirrorParent:i.identity},M={dateClick:i.identity,eventDragStart:i.identity,eventDragStop:i.identity,eventDrop:i.identity,eventResizeStart:i.identity,eventResizeStop:i.identity,eventResize:i.identity,drop:i.identity,eventReceive:i.identity,eventLeave:i.identity};class C{constructor(t,e){this.receivingContext=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=t=>{this.dragMeta=this.buildDragMeta(t.subjectEl)},this.handleHitUpdate=(t,e,n)=>{let{dragging:s}=this.hitDragging,r=null,o=null,l=!1,a={affectedEvents:i.createEmptyEventStore(),mutatedEvents:i.createEmptyEventStore(),isEvent:this.dragMeta.create};t&&(r=t.context,this.canDropElOnCalendar(n.subjectEl,r)&&(o=function(t,e,n){let s=Object.assign({},e.leftoverProps);for(let i of n.pluginHooks.externalDefTransforms)Object.assign(s,i(t,e));let{refined:r,extra:o}=i.refineEventDef(s,n),l=i.parseEventDef(r,o,e.sourceId,t.allDay,n.options.forceEventDuration||Boolean(e.duration),n),a=t.range.start;t.allDay&&e.startTime&&(a=n.dateEnv.add(a,e.startTime));let h=e.duration?n.dateEnv.add(a,e.duration):i.getDefaultEventEnd(t.allDay,a,n),c=i.createEventInstance(l.defId,{start:a,end:h});return{def:l,instance:c}}(t.dateSpan,this.dragMeta,r),a.mutatedEvents=i.eventTupleToStore(o),l=!i.isInteractionValid(a,t.dateProfile,r),l&&(a.mutatedEvents=i.createEmptyEventStore(),o=null))),this.displayDrag(r,a),s.setMirrorIsVisible(e||!o||!document.querySelector(".fc-event-mirror")),l?i.disableCursor():i.enableCursor(),e||(s.setMirrorNeedsRevert(!o),this.receivingContext=r,this.droppableEvent=o)},this.handleDragEnd=t=>{let{receivingContext:e,droppableEvent:n}=this;if(this.clearDrag(),e&&n){let s=this.hitDragging.finalHit,r=s.context.viewApi,o=this.dragMeta;if(e.emitter.trigger("drop",Object.assign(Object.assign({},f(s.dateSpan,e)),{draggedEl:t.subjectEl,jsEvent:t.origEvent,view:r})),o.create){let s=i.eventTupleToStore(n);e.dispatch({type:"MERGE_EVENTS",eventStore:s}),t.isTouch&&e.dispatch({type:"SELECT_EVENT",eventInstanceId:n.instance.instanceId}),e.emitter.trigger("eventReceive",{event:new i.EventImpl(e,n.def,n.instance),relatedEvents:[],revert(){e.dispatch({type:"REMOVE_EVENTS",eventStore:s})},draggedEl:t.subjectEl,view:r})}}this.receivingContext=null,this.droppableEvent=null};let n=this.hitDragging=new m(t,i.interactionSettingsStore);n.requireInitial=!1,n.emitter.on("dragstart",this.handleDragStart),n.emitter.on("hitupdate",this.handleHitUpdate),n.emitter.on("dragend",this.handleDragEnd),this.suppliedDragMeta=e}buildDragMeta(t){return"object"==typeof this.suppliedDragMeta?i.parseDragMeta(this.suppliedDragMeta):"function"==typeof this.suppliedDragMeta?i.parseDragMeta(this.suppliedDragMeta(t)):function(t){let e=function(t,e){let n=i.config.dataAttrPrefix,s=(n?n+"-":"")+e;return t.getAttribute("data-"+s)||""}(t,"event"),n=e?JSON.parse(e):{create:!1};return i.parseDragMeta(n)}(t)}displayDrag(t,e){let i=this.receivingContext;i&&i!==t&&i.dispatch({type:"UNSET_EVENT_DRAG"}),t&&t.dispatch({type:"SET_EVENT_DRAG",state:e})}clearDrag(){this.receivingContext&&this.receivingContext.dispatch({type:"UNSET_EVENT_DRAG"})}canDropElOnCalendar(t,e){let n=e.options.dropAccept;return"function"==typeof n?n.call(e.calendarApi,t):"string"!=typeof n||!n||Boolean(i.elementMatches(t,n))}}i.config.dataAttrPrefix="";class R extends i.ElementDragging{constructor(t){super(t),this.shouldIgnoreMove=!1,this.mirrorSelector="",this.currentMirrorEl=null,this.handlePointerDown=t=>{this.emitter.trigger("pointerdown",t),this.shouldIgnoreMove||this.emitter.trigger("dragstart",t)},this.handlePointerMove=t=>{this.shouldIgnoreMove||this.emitter.trigger("dragmove",t)},this.handlePointerUp=t=>{this.emitter.trigger("pointerup",t),this.shouldIgnoreMove||this.emitter.trigger("dragend",t)};let e=this.pointer=new o(t);e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("pointermove",this.handlePointerMove),e.emitter.on("pointerup",this.handlePointerUp)}destroy(){this.pointer.destroy()}setIgnoreMove(t){this.shouldIgnoreMove=t}setMirrorIsVisible(t){if(t)this.currentMirrorEl&&(this.currentMirrorEl.style.visibility="",this.currentMirrorEl=null);else{let t=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;t&&(this.currentMirrorEl=t,t.style.visibility="hidden")}}}var I=e.createPlugin({name:"@fullcalendar/interaction",componentInteractions:[D,y,w,T],calendarInteractions:[class{constructor(t){this.context=t,this.isRecentPointerDateSelect=!1,this.matchesCancel=!1,this.matchesEvent=!1,this.onSelect=t=>{t.jsEvent&&(this.isRecentPointerDateSelect=!0)},this.onDocumentPointerDown=t=>{let e=this.context.options.unselectCancel,n=i.getEventTargetViaRoot(t.origEvent);this.matchesCancel=!!i.elementClosest(n,e),this.matchesEvent=!!i.elementClosest(n,w.SELECTOR)},this.onDocumentPointerUp=t=>{let{context:e}=this,{documentPointer:i}=this,n=e.getCurrentData();if(!i.wasTouchScroll){if(n.dateSelection&&!this.isRecentPointerDateSelect){let i=e.options.unselectAuto;!i||i&&this.matchesCancel||e.calendarApi.unselect(t)}n.eventSelection&&!this.matchesEvent&&e.dispatch({type:"UNSELECT_EVENT"})}this.isRecentPointerDateSelect=!1};let e=this.documentPointer=new o(document);e.shouldIgnoreMove=!0,e.shouldWatchScroll=!1,e.emitter.on("pointerdown",this.onDocumentPointerDown),e.emitter.on("pointerup",this.onDocumentPointerUp),t.emitter.on("select",this.onSelect)}destroy(){this.context.emitter.off("select",this.onSelect),this.documentPointer.destroy()}}],elementDraggingImpl:p,optionRefiners:b,listenerRefiners:M});return e.globalPlugins.push(I),t.Draggable=class{constructor(t,e={}){this.handlePointerDown=t=>{let{dragging:e}=this,{minDistance:n,longPressDelay:s}=this.settings;e.minDistance=null!=n?n:t.isTouch?0:i.BASE_OPTION_DEFAULTS.eventDragMinDistance,e.delay=t.isTouch?null!=s?s:i.BASE_OPTION_DEFAULTS.longPressDelay:0},this.handleDragStart=t=>{t.isTouch&&this.dragging.delay&&t.subjectEl.classList.contains("fc-event")&&this.dragging.mirror.getMirrorEl().classList.add("fc-event-selected")},this.settings=e;let n=this.dragging=new p(t);n.touchScrollAllowed=!1,null!=e.itemSelector&&(n.pointer.selector=e.itemSelector),null!=e.appendTo&&(n.mirror.parentNode=e.appendTo),n.emitter.on("pointerdown",this.handlePointerDown),n.emitter.on("dragstart",this.handleDragStart),new C(n,e.eventData)}destroy(){this.dragging.destroy()}},t.ThirdPartyDraggable=class{constructor(t,e){let i=document;t===document||t instanceof Element?(i=t,e=e||{}):e=t||{};let n=this.dragging=new R(i);"string"==typeof e.itemSelector?n.pointer.selector=e.itemSelector:i===document&&(n.pointer.selector="[data-event]"),"string"==typeof e.mirrorSelector&&(n.mirrorSelector=e.mirrorSelector),new C(n,e.eventData)}destroy(){this.dragging.destroy()}},t.default=I,Object.defineProperty(t,"__esModule",{value:!0}),t}({},FullCalendar,FullCalendar.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/interaction/main.d.ts b/library/fullcalendar/packages/interaction/main.d.ts
deleted file mode 100644
index b7398ba76..000000000
--- a/library/fullcalendar/packages/interaction/main.d.ts
+++ /dev/null
@@ -1,323 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../@fullcalendar/core
-
-declare module '@fullcalendar/interaction' {
- import FeaturefulElementDragging from '@fullcalendar/interaction/dnd/FeaturefulElementDragging';
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
- export { FeaturefulElementDragging };
- export { default as PointerDragging } from '@fullcalendar/interaction/dnd/PointerDragging';
- export { default as Draggable } from '@fullcalendar/interaction/interactions-external/ExternalDraggable';
- export { default as ThirdPartyDraggable } from '@fullcalendar/interaction/interactions-external/ThirdPartyDraggable';
-}
-
-declare module '@fullcalendar/interaction/dnd/FeaturefulElementDragging' {
- import { PointerDragEvent, ElementDragging } from '@fullcalendar/core';
- import PointerDragging from '@fullcalendar/interaction/dnd/PointerDragging';
- import ElementMirror from '@fullcalendar/interaction/dnd/ElementMirror';
- import AutoScroller from '@fullcalendar/interaction/dnd/AutoScroller';
- export { FeaturefulElementDragging as default, FeaturefulElementDragging };
- class FeaturefulElementDragging extends ElementDragging {
- pointer: PointerDragging;
- mirror: ElementMirror;
- autoScroller: AutoScroller;
- delay: number | null;
- minDistance: number;
- touchScrollAllowed: boolean;
- mirrorNeedsRevert: boolean;
- isInteracting: boolean;
- isDragging: boolean;
- isDelayEnded: boolean;
- isDistanceSurpassed: boolean;
- delayTimeoutId: number | null;
- constructor(containerEl: HTMLElement);
- destroy(): void;
- onPointerDown: (ev: PointerDragEvent) => void;
- onPointerMove: (ev: PointerDragEvent) => void;
- onPointerUp: (ev: PointerDragEvent) => void;
- startDelay(ev: PointerDragEvent): void;
- handleDelayEnd(ev: PointerDragEvent): void;
- handleDistanceSurpassed(ev: PointerDragEvent): void;
- tryStartDrag(ev: PointerDragEvent): void;
- tryStopDrag(ev: PointerDragEvent): void;
- stopDrag(ev: PointerDragEvent): void;
- setIgnoreMove(bool: boolean): void;
- setMirrorIsVisible(bool: boolean): void;
- setMirrorNeedsRevert(bool: boolean): void;
- setAutoScrollEnabled(bool: boolean): void;
- }
-}
-
-declare module '@fullcalendar/interaction/dnd/PointerDragging' {
- import { EmitterMixin, PointerDragEvent } from '@fullcalendar/core';
- export { PointerDragging as default, PointerDragging };
- class PointerDragging {
- containerEl: EventTarget;
- subjectEl: HTMLElement | null;
- downEl: HTMLElement | null;
- emitter: EmitterMixin;
- selector: string;
- handleSelector: string;
- shouldIgnoreMove: boolean;
- shouldWatchScroll: boolean;
- isDragging: boolean;
- isTouchDragging: boolean;
- wasTouchScroll: boolean;
- origPageX: number;
- origPageY: number;
- prevPageX: number;
- prevPageY: number;
- prevScrollX: number;
- prevScrollY: number;
- constructor(containerEl: EventTarget);
- destroy(): void;
- tryStart(ev: UIEvent): boolean;
- cleanup(): void;
- querySubjectEl(ev: UIEvent): HTMLElement;
- handleMouseDown: (ev: MouseEvent) => void;
- handleMouseMove: (ev: MouseEvent) => void;
- handleMouseUp: (ev: MouseEvent) => void;
- shouldIgnoreMouse(): number | boolean;
- handleTouchStart: (ev: TouchEvent) => void;
- handleTouchMove: (ev: TouchEvent) => void;
- handleTouchEnd: (ev: TouchEvent) => void;
- handleTouchScroll: () => void;
- cancelTouchScroll(): void;
- initScrollWatch(ev: PointerDragEvent): void;
- recordCoords(ev: PointerDragEvent): void;
- handleScroll: (ev: UIEvent) => void;
- destroyScrollWatch(): void;
- createEventFromMouse(ev: MouseEvent, isFirst?: boolean): PointerDragEvent;
- createEventFromTouch(ev: TouchEvent, isFirst?: boolean): PointerDragEvent;
- }
-}
-
-declare module '@fullcalendar/interaction/interactions-external/ExternalDraggable' {
- import { PointerDragEvent } from '@fullcalendar/core';
- import FeaturefulElementDragging from '@fullcalendar/interaction/dnd/FeaturefulElementDragging';
- import { DragMetaGenerator } from '@fullcalendar/interaction/interactions-external/ExternalElementDragging';
- export interface ExternalDraggableSettings {
- eventData?: DragMetaGenerator;
- itemSelector?: string;
- minDistance?: number;
- longPressDelay?: number;
- appendTo?: HTMLElement;
- }
- export { ExternalDraggable as default, ExternalDraggable };
- class ExternalDraggable {
- dragging: FeaturefulElementDragging;
- settings: ExternalDraggableSettings;
- constructor(el: HTMLElement, settings?: ExternalDraggableSettings);
- handlePointerDown: (ev: PointerDragEvent) => void;
- handleDragStart: (ev: PointerDragEvent) => void;
- destroy(): void;
- }
-}
-
-declare module '@fullcalendar/interaction/interactions-external/ThirdPartyDraggable' {
- import { DragMetaGenerator } from '@fullcalendar/interaction/interactions-external/ExternalElementDragging';
- import InferredElementDragging from '@fullcalendar/interaction/interactions-external/InferredElementDragging';
- export interface ThirdPartyDraggableSettings {
- eventData?: DragMetaGenerator;
- itemSelector?: string;
- mirrorSelector?: string;
- }
- export { ThirdPartyDraggable as default, ThirdPartyDraggable };
- class ThirdPartyDraggable {
- dragging: InferredElementDragging;
- constructor(containerOrSettings?: EventTarget | ThirdPartyDraggableSettings, settings?: ThirdPartyDraggableSettings);
- destroy(): void;
- }
-}
-
-declare module '@fullcalendar/interaction/dnd/ElementMirror' {
- import { Rect } from '@fullcalendar/core';
- export { ElementMirror as default, ElementMirror };
- class ElementMirror {
- isVisible: boolean;
- origScreenX?: number;
- origScreenY?: number;
- deltaX?: number;
- deltaY?: number;
- sourceEl: HTMLElement | null;
- mirrorEl: HTMLElement | null;
- sourceElRect: Rect | null;
- parentNode: HTMLElement;
- zIndex: number;
- revertDuration: number;
- start(sourceEl: HTMLElement, pageX: number, pageY: number): void;
- handleMove(pageX: number, pageY: number): void;
- setIsVisible(bool: boolean): void;
- stop(needsRevertAnimation: boolean, callback: () => void): void;
- doRevertAnimation(callback: () => void, revertDuration: number): void;
- cleanup(): void;
- updateElPosition(): void;
- getMirrorEl(): HTMLElement;
- }
-}
-
-declare module '@fullcalendar/interaction/dnd/AutoScroller' {
- import { ScrollGeomCache } from '@fullcalendar/interaction/scroll-geom-cache';
- export { AutoScroller as default, AutoScroller };
- class AutoScroller {
- isEnabled: boolean;
- scrollQuery: (Window | string)[];
- edgeThreshold: number;
- maxVelocity: number;
- pointerScreenX: number | null;
- pointerScreenY: number | null;
- isAnimating: boolean;
- scrollCaches: ScrollGeomCache[] | null;
- msSinceRequest?: number;
- everMovedUp: boolean;
- everMovedDown: boolean;
- everMovedLeft: boolean;
- everMovedRight: boolean;
- start(pageX: number, pageY: number): void;
- handleMove(pageX: number, pageY: number): void;
- stop(): void;
- requestAnimation(now: number): void;
- }
-}
-
-declare module '@fullcalendar/interaction/interactions-external/ExternalElementDragging' {
- import { Hit, PointerDragEvent, EventTuple, DatePointApi, Calendar, EventInteractionState, DragMetaInput, DragMeta, View, ElementDragging } from '@fullcalendar/core';
- import HitDragging from '@fullcalendar/interaction/interactions/HitDragging';
- export type DragMetaGenerator = DragMetaInput | ((el: HTMLElement) => DragMetaInput);
- export interface ExternalDropApi extends DatePointApi {
- draggedEl: HTMLElement;
- jsEvent: UIEvent;
- view: View;
- }
- export { ExternalElementDragging as default, ExternalElementDragging };
- class ExternalElementDragging {
- hitDragging: HitDragging;
- receivingCalendar: Calendar | null;
- droppableEvent: EventTuple | null;
- suppliedDragMeta: DragMetaGenerator | null;
- dragMeta: DragMeta | null;
- constructor(dragging: ElementDragging, suppliedDragMeta?: DragMetaGenerator);
- handleDragStart: (ev: PointerDragEvent) => void;
- buildDragMeta(subjectEl: HTMLElement): DragMeta;
- handleHitUpdate: (hit: Hit, isFinal: boolean, ev: PointerDragEvent) => void;
- handleDragEnd: (pev: PointerDragEvent) => void;
- displayDrag(nextCalendar: Calendar | null, state: EventInteractionState): void;
- clearDrag(): void;
- canDropElOnCalendar(el: HTMLElement, receivingCalendar: Calendar): boolean;
- }
-}
-
-declare module '@fullcalendar/interaction/interactions-external/InferredElementDragging' {
- import { PointerDragEvent, ElementDragging } from '@fullcalendar/core';
- import PointerDragging from '@fullcalendar/interaction/dnd/PointerDragging';
- export { InferredElementDragging as default, InferredElementDragging };
- class InferredElementDragging extends ElementDragging {
- pointer: PointerDragging;
- shouldIgnoreMove: boolean;
- mirrorSelector: string;
- currentMirrorEl: HTMLElement | null;
- constructor(containerEl: HTMLElement);
- destroy(): void;
- handlePointerDown: (ev: PointerDragEvent) => void;
- handlePointerMove: (ev: PointerDragEvent) => void;
- handlePointerUp: (ev: PointerDragEvent) => void;
- setIgnoreMove(bool: boolean): void;
- setMirrorIsVisible(bool: boolean): void;
- }
-}
-
-declare module '@fullcalendar/interaction/scroll-geom-cache' {
- import { Rect, ScrollController } from '@fullcalendar/core';
- export abstract class ScrollGeomCache extends ScrollController {
- clientRect: Rect;
- origScrollTop: number;
- origScrollLeft: number;
- protected scrollController: ScrollController;
- protected doesListening: boolean;
- protected scrollTop: number;
- protected scrollLeft: number;
- protected scrollWidth: number;
- protected scrollHeight: number;
- protected clientWidth: number;
- protected clientHeight: number;
- constructor(scrollController: ScrollController, doesListening: boolean);
- abstract getEventTarget(): EventTarget;
- abstract computeClientRect(): Rect;
- destroy(): void;
- handleScroll: () => void;
- getScrollTop(): number;
- getScrollLeft(): number;
- setScrollTop(top: number): void;
- setScrollLeft(top: number): void;
- getClientWidth(): number;
- getClientHeight(): number;
- getScrollWidth(): number;
- getScrollHeight(): number;
- handleScrollChange(): void;
- }
- export class ElementScrollGeomCache extends ScrollGeomCache {
- constructor(el: HTMLElement, doesListening: boolean);
- getEventTarget(): EventTarget;
- computeClientRect(): {
- left: number;
- right: number;
- top: number;
- bottom: number;
- };
- }
- export class WindowScrollGeomCache extends ScrollGeomCache {
- constructor(doesListening: boolean);
- getEventTarget(): EventTarget;
- computeClientRect(): Rect;
- handleScrollChange(): void;
- }
-}
-
-declare module '@fullcalendar/interaction/interactions/HitDragging' {
- import { EmitterMixin, PointerDragEvent, Point, Hit, InteractionSettingsStore, ElementDragging } from '@fullcalendar/core';
- import OffsetTracker from '@fullcalendar/interaction/OffsetTracker';
- export { HitDragging as default, HitDragging };
- class HitDragging {
- droppableStore: InteractionSettingsStore;
- dragging: ElementDragging;
- emitter: EmitterMixin;
- useSubjectCenter: boolean;
- requireInitial: boolean;
- offsetTrackers: {
- [componentUid: string]: OffsetTracker;
- };
- initialHit: Hit | null;
- movingHit: Hit | null;
- finalHit: Hit | null;
- coordAdjust?: Point;
- constructor(dragging: ElementDragging, droppableStore: InteractionSettingsStore);
- handlePointerDown: (ev: PointerDragEvent) => void;
- processFirstCoord(ev: PointerDragEvent): void;
- handleDragStart: (ev: PointerDragEvent) => void;
- handleDragMove: (ev: PointerDragEvent) => void;
- handlePointerUp: (ev: PointerDragEvent) => void;
- handleDragEnd: (ev: PointerDragEvent) => void;
- handleMove(ev: PointerDragEvent, forceHandle?: boolean): void;
- prepareHits(): void;
- releaseHits(): void;
- queryHitForOffset(offsetLeft: number, offsetTop: number): Hit | null;
- }
- export function isHitsEqual(hit0: Hit | null, hit1: Hit | null): boolean;
-}
-
-declare module '@fullcalendar/interaction/OffsetTracker' {
- import { Rect } from '@fullcalendar/core';
- import { ElementScrollGeomCache } from '@fullcalendar/interaction/scroll-geom-cache';
- export { OffsetTracker as default, OffsetTracker };
- class OffsetTracker {
- scrollCaches: ElementScrollGeomCache[];
- origRect: Rect;
- constructor(el: HTMLElement);
- destroy(): void;
- computeLeft(): number;
- computeTop(): number;
- isWithinClipping(pageX: number, pageY: number): boolean;
- }
-}
-
diff --git a/library/fullcalendar/packages/interaction/main.esm.js b/library/fullcalendar/packages/interaction/main.esm.js
deleted file mode 100644
index af9ef4074..000000000
--- a/library/fullcalendar/packages/interaction/main.esm.js
+++ /dev/null
@@ -1,2141 +0,0 @@
-/*!
-FullCalendar Interaction Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { config, elementClosest, EmitterMixin, applyStyle, whenTransitionDone, removeElement, ScrollController, ElementScrollController, computeInnerRect, WindowScrollController, preventSelection, preventContextMenu, allowSelection, allowContextMenu, ElementDragging, computeRect, getClippingParents, pointInsideRect, isDateSpansEqual, constrainPoint, intersectRects, getRectCenter, diffPoints, mapHash, rangeContainsRange, interactionSettingsToStore, Interaction, enableCursor, disableCursor, compareNumbers, getElSeg, getRelevantEvents, EventApi, createEmptyEventStore, applyMutationToEventStore, interactionSettingsStore, startOfDay, diffDates, createDuration, eventTupleToStore, isInteractionValid, parseDragMeta, elementMatches, parseEventDef, createEventInstance, globalDefaults, createPlugin } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
-};
-
-config.touchMouseIgnoreWait = 500;
-var ignoreMouseDepth = 0;
-var listenerCnt = 0;
-var isWindowTouchMoveCancelled = false;
-/*
-Uses a "pointer" abstraction, which monitors UI events for both mouse and touch.
-Tracks when the pointer "drags" on a certain element, meaning down+move+up.
-
-Also, tracks if there was touch-scrolling.
-Also, can prevent touch-scrolling from happening.
-Also, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.
-
-emits:
-- pointerdown
-- pointermove
-- pointerup
-*/
-var PointerDragging = /** @class */ (function () {
- function PointerDragging(containerEl) {
- var _this = this;
- this.subjectEl = null;
- this.downEl = null;
- // options that can be directly assigned by caller
- this.selector = ''; // will cause subjectEl in all emitted events to be this element
- this.handleSelector = '';
- this.shouldIgnoreMove = false;
- this.shouldWatchScroll = true; // for simulating pointermove on scroll
- // internal states
- this.isDragging = false;
- this.isTouchDragging = false;
- this.wasTouchScroll = false;
- // Mouse
- // ----------------------------------------------------------------------------------------------------
- this.handleMouseDown = function (ev) {
- if (!_this.shouldIgnoreMouse() &&
- isPrimaryMouseButton(ev) &&
- _this.tryStart(ev)) {
- var pev = _this.createEventFromMouse(ev, true);
- _this.emitter.trigger('pointerdown', pev);
- _this.initScrollWatch(pev);
- if (!_this.shouldIgnoreMove) {
- document.addEventListener('mousemove', _this.handleMouseMove);
- }
- document.addEventListener('mouseup', _this.handleMouseUp);
- }
- };
- this.handleMouseMove = function (ev) {
- var pev = _this.createEventFromMouse(ev);
- _this.recordCoords(pev);
- _this.emitter.trigger('pointermove', pev);
- };
- this.handleMouseUp = function (ev) {
- document.removeEventListener('mousemove', _this.handleMouseMove);
- document.removeEventListener('mouseup', _this.handleMouseUp);
- _this.emitter.trigger('pointerup', _this.createEventFromMouse(ev));
- _this.cleanup(); // call last so that pointerup has access to props
- };
- // Touch
- // ----------------------------------------------------------------------------------------------------
- this.handleTouchStart = function (ev) {
- if (_this.tryStart(ev)) {
- _this.isTouchDragging = true;
- var pev = _this.createEventFromTouch(ev, true);
- _this.emitter.trigger('pointerdown', pev);
- _this.initScrollWatch(pev);
- // unlike mouse, need to attach to target, not document
- // https://stackoverflow.com/a/45760014
- var target = ev.target;
- if (!_this.shouldIgnoreMove) {
- target.addEventListener('touchmove', _this.handleTouchMove);
- }
- target.addEventListener('touchend', _this.handleTouchEnd);
- target.addEventListener('touchcancel', _this.handleTouchEnd); // treat it as a touch end
- // attach a handler to get called when ANY scroll action happens on the page.
- // this was impossible to do with normal on/off because 'scroll' doesn't bubble.
- // http://stackoverflow.com/a/32954565/96342
- window.addEventListener('scroll', _this.handleTouchScroll, true // useCapture
- );
- }
- };
- this.handleTouchMove = function (ev) {
- var pev = _this.createEventFromTouch(ev);
- _this.recordCoords(pev);
- _this.emitter.trigger('pointermove', pev);
- };
- this.handleTouchEnd = function (ev) {
- if (_this.isDragging) { // done to guard against touchend followed by touchcancel
- var target = ev.target;
- target.removeEventListener('touchmove', _this.handleTouchMove);
- target.removeEventListener('touchend', _this.handleTouchEnd);
- target.removeEventListener('touchcancel', _this.handleTouchEnd);
- window.removeEventListener('scroll', _this.handleTouchScroll, true); // useCaptured=true
- _this.emitter.trigger('pointerup', _this.createEventFromTouch(ev));
- _this.cleanup(); // call last so that pointerup has access to props
- _this.isTouchDragging = false;
- startIgnoringMouse();
- }
- };
- this.handleTouchScroll = function () {
- _this.wasTouchScroll = true;
- };
- this.handleScroll = function (ev) {
- if (!_this.shouldIgnoreMove) {
- var pageX = (window.pageXOffset - _this.prevScrollX) + _this.prevPageX;
- var pageY = (window.pageYOffset - _this.prevScrollY) + _this.prevPageY;
- _this.emitter.trigger('pointermove', {
- origEvent: ev,
- isTouch: _this.isTouchDragging,
- subjectEl: _this.subjectEl,
- pageX: pageX,
- pageY: pageY,
- deltaX: pageX - _this.origPageX,
- deltaY: pageY - _this.origPageY
- });
- }
- };
- this.containerEl = containerEl;
- this.emitter = new EmitterMixin();
- containerEl.addEventListener('mousedown', this.handleMouseDown);
- containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true });
- listenerCreated();
- }
- PointerDragging.prototype.destroy = function () {
- this.containerEl.removeEventListener('mousedown', this.handleMouseDown);
- this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true });
- listenerDestroyed();
- };
- PointerDragging.prototype.tryStart = function (ev) {
- var subjectEl = this.querySubjectEl(ev);
- var downEl = ev.target;
- if (subjectEl &&
- (!this.handleSelector || elementClosest(downEl, this.handleSelector))) {
- this.subjectEl = subjectEl;
- this.downEl = downEl;
- this.isDragging = true; // do this first so cancelTouchScroll will work
- this.wasTouchScroll = false;
- return true;
- }
- return false;
- };
- PointerDragging.prototype.cleanup = function () {
- isWindowTouchMoveCancelled = false;
- this.isDragging = false;
- this.subjectEl = null;
- this.downEl = null;
- // keep wasTouchScroll around for later access
- this.destroyScrollWatch();
- };
- PointerDragging.prototype.querySubjectEl = function (ev) {
- if (this.selector) {
- return elementClosest(ev.target, this.selector);
- }
- else {
- return this.containerEl;
- }
- };
- PointerDragging.prototype.shouldIgnoreMouse = function () {
- return ignoreMouseDepth || this.isTouchDragging;
- };
- // can be called by user of this class, to cancel touch-based scrolling for the current drag
- PointerDragging.prototype.cancelTouchScroll = function () {
- if (this.isDragging) {
- isWindowTouchMoveCancelled = true;
- }
- };
- // Scrolling that simulates pointermoves
- // ----------------------------------------------------------------------------------------------------
- PointerDragging.prototype.initScrollWatch = function (ev) {
- if (this.shouldWatchScroll) {
- this.recordCoords(ev);
- window.addEventListener('scroll', this.handleScroll, true); // useCapture=true
- }
- };
- PointerDragging.prototype.recordCoords = function (ev) {
- if (this.shouldWatchScroll) {
- this.prevPageX = ev.pageX;
- this.prevPageY = ev.pageY;
- this.prevScrollX = window.pageXOffset;
- this.prevScrollY = window.pageYOffset;
- }
- };
- PointerDragging.prototype.destroyScrollWatch = function () {
- if (this.shouldWatchScroll) {
- window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true
- }
- };
- // Event Normalization
- // ----------------------------------------------------------------------------------------------------
- PointerDragging.prototype.createEventFromMouse = function (ev, isFirst) {
- var deltaX = 0;
- var deltaY = 0;
- // TODO: repeat code
- if (isFirst) {
- this.origPageX = ev.pageX;
- this.origPageY = ev.pageY;
- }
- else {
- deltaX = ev.pageX - this.origPageX;
- deltaY = ev.pageY - this.origPageY;
- }
- return {
- origEvent: ev,
- isTouch: false,
- subjectEl: this.subjectEl,
- pageX: ev.pageX,
- pageY: ev.pageY,
- deltaX: deltaX,
- deltaY: deltaY
- };
- };
- PointerDragging.prototype.createEventFromTouch = function (ev, isFirst) {
- var touches = ev.touches;
- var pageX;
- var pageY;
- var deltaX = 0;
- var deltaY = 0;
- // if touch coords available, prefer,
- // because FF would give bad ev.pageX ev.pageY
- if (touches && touches.length) {
- pageX = touches[0].pageX;
- pageY = touches[0].pageY;
- }
- else {
- pageX = ev.pageX;
- pageY = ev.pageY;
- }
- // TODO: repeat code
- if (isFirst) {
- this.origPageX = pageX;
- this.origPageY = pageY;
- }
- else {
- deltaX = pageX - this.origPageX;
- deltaY = pageY - this.origPageY;
- }
- return {
- origEvent: ev,
- isTouch: true,
- subjectEl: this.subjectEl,
- pageX: pageX,
- pageY: pageY,
- deltaX: deltaX,
- deltaY: deltaY
- };
- };
- return PointerDragging;
-}());
-// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)
-function isPrimaryMouseButton(ev) {
- return ev.button === 0 && !ev.ctrlKey;
-}
-// Ignoring fake mouse events generated by touch
-// ----------------------------------------------------------------------------------------------------
-function startIgnoringMouse() {
- ignoreMouseDepth++;
- setTimeout(function () {
- ignoreMouseDepth--;
- }, config.touchMouseIgnoreWait);
-}
-// We want to attach touchmove as early as possible for Safari
-// ----------------------------------------------------------------------------------------------------
-function listenerCreated() {
- if (!(listenerCnt++)) {
- window.addEventListener('touchmove', onWindowTouchMove, { passive: false });
- }
-}
-function listenerDestroyed() {
- if (!(--listenerCnt)) {
- window.removeEventListener('touchmove', onWindowTouchMove, { passive: false });
- }
-}
-function onWindowTouchMove(ev) {
- if (isWindowTouchMoveCancelled) {
- ev.preventDefault();
- }
-}
-
-/*
-An effect in which an element follows the movement of a pointer across the screen.
-The moving element is a clone of some other element.
-Must call start + handleMove + stop.
-*/
-var ElementMirror = /** @class */ (function () {
- function ElementMirror() {
- this.isVisible = false; // must be explicitly enabled
- this.sourceEl = null;
- this.mirrorEl = null;
- this.sourceElRect = null; // screen coords relative to viewport
- // options that can be set directly by caller
- this.parentNode = document.body;
- this.zIndex = 9999;
- this.revertDuration = 0;
- }
- ElementMirror.prototype.start = function (sourceEl, pageX, pageY) {
- this.sourceEl = sourceEl;
- this.sourceElRect = this.sourceEl.getBoundingClientRect();
- this.origScreenX = pageX - window.pageXOffset;
- this.origScreenY = pageY - window.pageYOffset;
- this.deltaX = 0;
- this.deltaY = 0;
- this.updateElPosition();
- };
- ElementMirror.prototype.handleMove = function (pageX, pageY) {
- this.deltaX = (pageX - window.pageXOffset) - this.origScreenX;
- this.deltaY = (pageY - window.pageYOffset) - this.origScreenY;
- this.updateElPosition();
- };
- // can be called before start
- ElementMirror.prototype.setIsVisible = function (bool) {
- if (bool) {
- if (!this.isVisible) {
- if (this.mirrorEl) {
- this.mirrorEl.style.display = '';
- }
- this.isVisible = bool; // needs to happen before updateElPosition
- this.updateElPosition(); // because was not updating the position while invisible
- }
- }
- else {
- if (this.isVisible) {
- if (this.mirrorEl) {
- this.mirrorEl.style.display = 'none';
- }
- this.isVisible = bool;
- }
- }
- };
- // always async
- ElementMirror.prototype.stop = function (needsRevertAnimation, callback) {
- var _this = this;
- var done = function () {
- _this.cleanup();
- callback();
- };
- if (needsRevertAnimation &&
- this.mirrorEl &&
- this.isVisible &&
- this.revertDuration && // if 0, transition won't work
- (this.deltaX || this.deltaY) // if same coords, transition won't work
- ) {
- this.doRevertAnimation(done, this.revertDuration);
- }
- else {
- setTimeout(done, 0);
- }
- };
- ElementMirror.prototype.doRevertAnimation = function (callback, revertDuration) {
- var mirrorEl = this.mirrorEl;
- var finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened
- mirrorEl.style.transition =
- 'top ' + revertDuration + 'ms,' +
- 'left ' + revertDuration + 'ms';
- applyStyle(mirrorEl, {
- left: finalSourceElRect.left,
- top: finalSourceElRect.top
- });
- whenTransitionDone(mirrorEl, function () {
- mirrorEl.style.transition = '';
- callback();
- });
- };
- ElementMirror.prototype.cleanup = function () {
- if (this.mirrorEl) {
- removeElement(this.mirrorEl);
- this.mirrorEl = null;
- }
- this.sourceEl = null;
- };
- ElementMirror.prototype.updateElPosition = function () {
- if (this.sourceEl && this.isVisible) {
- applyStyle(this.getMirrorEl(), {
- left: this.sourceElRect.left + this.deltaX,
- top: this.sourceElRect.top + this.deltaY
- });
- }
- };
- ElementMirror.prototype.getMirrorEl = function () {
- var sourceElRect = this.sourceElRect;
- var mirrorEl = this.mirrorEl;
- if (!mirrorEl) {
- mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true
- // we don't want long taps or any mouse interaction causing selection/menus.
- // would use preventSelection(), but that prevents selectstart, causing problems.
- mirrorEl.classList.add('fc-unselectable');
- mirrorEl.classList.add('fc-dragging');
- applyStyle(mirrorEl, {
- position: 'fixed',
- zIndex: this.zIndex,
- visibility: '',
- boxSizing: 'border-box',
- width: sourceElRect.right - sourceElRect.left,
- height: sourceElRect.bottom - sourceElRect.top,
- right: 'auto',
- bottom: 'auto',
- margin: 0
- });
- this.parentNode.appendChild(mirrorEl);
- }
- return mirrorEl;
- };
- return ElementMirror;
-}());
-
-/*
-Is a cache for a given element's scroll information (all the info that ScrollController stores)
-in addition the "client rectangle" of the element.. the area within the scrollbars.
-
-The cache can be in one of two modes:
-- doesListening:false - ignores when the container is scrolled by someone else
-- doesListening:true - watch for scrolling and update the cache
-*/
-var ScrollGeomCache = /** @class */ (function (_super) {
- __extends(ScrollGeomCache, _super);
- function ScrollGeomCache(scrollController, doesListening) {
- var _this = _super.call(this) || this;
- _this.handleScroll = function () {
- _this.scrollTop = _this.scrollController.getScrollTop();
- _this.scrollLeft = _this.scrollController.getScrollLeft();
- _this.handleScrollChange();
- };
- _this.scrollController = scrollController;
- _this.doesListening = doesListening;
- _this.scrollTop = _this.origScrollTop = scrollController.getScrollTop();
- _this.scrollLeft = _this.origScrollLeft = scrollController.getScrollLeft();
- _this.scrollWidth = scrollController.getScrollWidth();
- _this.scrollHeight = scrollController.getScrollHeight();
- _this.clientWidth = scrollController.getClientWidth();
- _this.clientHeight = scrollController.getClientHeight();
- _this.clientRect = _this.computeClientRect(); // do last in case it needs cached values
- if (_this.doesListening) {
- _this.getEventTarget().addEventListener('scroll', _this.handleScroll);
- }
- return _this;
- }
- ScrollGeomCache.prototype.destroy = function () {
- if (this.doesListening) {
- this.getEventTarget().removeEventListener('scroll', this.handleScroll);
- }
- };
- ScrollGeomCache.prototype.getScrollTop = function () {
- return this.scrollTop;
- };
- ScrollGeomCache.prototype.getScrollLeft = function () {
- return this.scrollLeft;
- };
- ScrollGeomCache.prototype.setScrollTop = function (top) {
- this.scrollController.setScrollTop(top);
- if (!this.doesListening) {
- // we are not relying on the element to normalize out-of-bounds scroll values
- // so we need to sanitize ourselves
- this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);
- this.handleScrollChange();
- }
- };
- ScrollGeomCache.prototype.setScrollLeft = function (top) {
- this.scrollController.setScrollLeft(top);
- if (!this.doesListening) {
- // we are not relying on the element to normalize out-of-bounds scroll values
- // so we need to sanitize ourselves
- this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);
- this.handleScrollChange();
- }
- };
- ScrollGeomCache.prototype.getClientWidth = function () {
- return this.clientWidth;
- };
- ScrollGeomCache.prototype.getClientHeight = function () {
- return this.clientHeight;
- };
- ScrollGeomCache.prototype.getScrollWidth = function () {
- return this.scrollWidth;
- };
- ScrollGeomCache.prototype.getScrollHeight = function () {
- return this.scrollHeight;
- };
- ScrollGeomCache.prototype.handleScrollChange = function () {
- };
- return ScrollGeomCache;
-}(ScrollController));
-var ElementScrollGeomCache = /** @class */ (function (_super) {
- __extends(ElementScrollGeomCache, _super);
- function ElementScrollGeomCache(el, doesListening) {
- return _super.call(this, new ElementScrollController(el), doesListening) || this;
- }
- ElementScrollGeomCache.prototype.getEventTarget = function () {
- return this.scrollController.el;
- };
- ElementScrollGeomCache.prototype.computeClientRect = function () {
- return computeInnerRect(this.scrollController.el);
- };
- return ElementScrollGeomCache;
-}(ScrollGeomCache));
-var WindowScrollGeomCache = /** @class */ (function (_super) {
- __extends(WindowScrollGeomCache, _super);
- function WindowScrollGeomCache(doesListening) {
- return _super.call(this, new WindowScrollController(), doesListening) || this;
- }
- WindowScrollGeomCache.prototype.getEventTarget = function () {
- return window;
- };
- WindowScrollGeomCache.prototype.computeClientRect = function () {
- return {
- left: this.scrollLeft,
- right: this.scrollLeft + this.clientWidth,
- top: this.scrollTop,
- bottom: this.scrollTop + this.clientHeight
- };
- };
- // the window is the only scroll object that changes it's rectangle relative
- // to the document's topleft as it scrolls
- WindowScrollGeomCache.prototype.handleScrollChange = function () {
- this.clientRect = this.computeClientRect();
- };
- return WindowScrollGeomCache;
-}(ScrollGeomCache));
-
-// If available we are using native "performance" API instead of "Date"
-// Read more about it on MDN:
-// https://developer.mozilla.org/en-US/docs/Web/API/Performance
-var getTime = typeof performance === 'function' ? performance.now : Date.now;
-/*
-For a pointer interaction, automatically scrolls certain scroll containers when the pointer
-approaches the edge.
-
-The caller must call start + handleMove + stop.
-*/
-var AutoScroller = /** @class */ (function () {
- function AutoScroller() {
- var _this = this;
- // options that can be set by caller
- this.isEnabled = true;
- this.scrollQuery = [window, '.fc-scroller'];
- this.edgeThreshold = 50; // pixels
- this.maxVelocity = 300; // pixels per second
- // internal state
- this.pointerScreenX = null;
- this.pointerScreenY = null;
- this.isAnimating = false;
- this.scrollCaches = null;
- // protect against the initial pointerdown being too close to an edge and starting the scroll
- this.everMovedUp = false;
- this.everMovedDown = false;
- this.everMovedLeft = false;
- this.everMovedRight = false;
- this.animate = function () {
- if (_this.isAnimating) { // wasn't cancelled between animation calls
- var edge = _this.computeBestEdge(_this.pointerScreenX + window.pageXOffset, _this.pointerScreenY + window.pageYOffset);
- if (edge) {
- var now = getTime();
- _this.handleSide(edge, (now - _this.msSinceRequest) / 1000);
- _this.requestAnimation(now);
- }
- else {
- _this.isAnimating = false; // will stop animation
- }
- }
- };
- }
- AutoScroller.prototype.start = function (pageX, pageY) {
- if (this.isEnabled) {
- this.scrollCaches = this.buildCaches();
- this.pointerScreenX = null;
- this.pointerScreenY = null;
- this.everMovedUp = false;
- this.everMovedDown = false;
- this.everMovedLeft = false;
- this.everMovedRight = false;
- this.handleMove(pageX, pageY);
- }
- };
- AutoScroller.prototype.handleMove = function (pageX, pageY) {
- if (this.isEnabled) {
- var pointerScreenX = pageX - window.pageXOffset;
- var pointerScreenY = pageY - window.pageYOffset;
- var yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;
- var xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;
- if (yDelta < 0) {
- this.everMovedUp = true;
- }
- else if (yDelta > 0) {
- this.everMovedDown = true;
- }
- if (xDelta < 0) {
- this.everMovedLeft = true;
- }
- else if (xDelta > 0) {
- this.everMovedRight = true;
- }
- this.pointerScreenX = pointerScreenX;
- this.pointerScreenY = pointerScreenY;
- if (!this.isAnimating) {
- this.isAnimating = true;
- this.requestAnimation(getTime());
- }
- }
- };
- AutoScroller.prototype.stop = function () {
- if (this.isEnabled) {
- this.isAnimating = false; // will stop animation
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- scrollCache.destroy();
- }
- this.scrollCaches = null;
- }
- };
- AutoScroller.prototype.requestAnimation = function (now) {
- this.msSinceRequest = now;
- requestAnimationFrame(this.animate);
- };
- AutoScroller.prototype.handleSide = function (edge, seconds) {
- var scrollCache = edge.scrollCache;
- var edgeThreshold = this.edgeThreshold;
- var invDistance = edgeThreshold - edge.distance;
- var velocity = // the closer to the edge, the faster we scroll
- (invDistance * invDistance) / (edgeThreshold * edgeThreshold) * // quadratic
- this.maxVelocity * seconds;
- var sign = 1;
- switch (edge.name) {
- case 'left':
- sign = -1;
- // falls through
- case 'right':
- scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);
- break;
- case 'top':
- sign = -1;
- // falls through
- case 'bottom':
- scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);
- break;
- }
- };
- // left/top are relative to document topleft
- AutoScroller.prototype.computeBestEdge = function (left, top) {
- var edgeThreshold = this.edgeThreshold;
- var bestSide = null;
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- var rect = scrollCache.clientRect;
- var leftDist = left - rect.left;
- var rightDist = rect.right - left;
- var topDist = top - rect.top;
- var bottomDist = rect.bottom - top;
- // completely within the rect?
- if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {
- if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&
- (!bestSide || bestSide.distance > topDist)) {
- bestSide = { scrollCache: scrollCache, name: 'top', distance: topDist };
- }
- if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&
- (!bestSide || bestSide.distance > bottomDist)) {
- bestSide = { scrollCache: scrollCache, name: 'bottom', distance: bottomDist };
- }
- if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&
- (!bestSide || bestSide.distance > leftDist)) {
- bestSide = { scrollCache: scrollCache, name: 'left', distance: leftDist };
- }
- if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&
- (!bestSide || bestSide.distance > rightDist)) {
- bestSide = { scrollCache: scrollCache, name: 'right', distance: rightDist };
- }
- }
- }
- return bestSide;
- };
- AutoScroller.prototype.buildCaches = function () {
- return this.queryScrollEls().map(function (el) {
- if (el === window) {
- return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls
- }
- else {
- return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls
- }
- });
- };
- AutoScroller.prototype.queryScrollEls = function () {
- var els = [];
- for (var _i = 0, _a = this.scrollQuery; _i < _a.length; _i++) {
- var query = _a[_i];
- if (typeof query === 'object') {
- els.push(query);
- }
- else {
- els.push.apply(els, Array.prototype.slice.call(document.querySelectorAll(query)));
- }
- }
- return els;
- };
- return AutoScroller;
-}());
-
-/*
-Monitors dragging on an element. Has a number of high-level features:
-- minimum distance required before dragging
-- minimum wait time ("delay") before dragging
-- a mirror element that follows the pointer
-*/
-var FeaturefulElementDragging = /** @class */ (function (_super) {
- __extends(FeaturefulElementDragging, _super);
- function FeaturefulElementDragging(containerEl) {
- var _this = _super.call(this, containerEl) || this;
- // options that can be directly set by caller
- // the caller can also set the PointerDragging's options as well
- _this.delay = null;
- _this.minDistance = 0;
- _this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag
- _this.mirrorNeedsRevert = false;
- _this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup
- _this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation
- _this.isDelayEnded = false;
- _this.isDistanceSurpassed = false;
- _this.delayTimeoutId = null;
- _this.onPointerDown = function (ev) {
- if (!_this.isDragging) { // so new drag doesn't happen while revert animation is going
- _this.isInteracting = true;
- _this.isDelayEnded = false;
- _this.isDistanceSurpassed = false;
- preventSelection(document.body);
- preventContextMenu(document.body);
- // prevent links from being visited if there's an eventual drag.
- // also prevents selection in older browsers (maybe?).
- // not necessary for touch, besides, browser would complain about passiveness.
- if (!ev.isTouch) {
- ev.origEvent.preventDefault();
- }
- _this.emitter.trigger('pointerdown', ev);
- if (!_this.pointer.shouldIgnoreMove) {
- // actions related to initiating dragstart+dragmove+dragend...
- _this.mirror.setIsVisible(false); // reset. caller must set-visible
- _this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down
- _this.startDelay(ev);
- if (!_this.minDistance) {
- _this.handleDistanceSurpassed(ev);
- }
- }
- }
- };
- _this.onPointerMove = function (ev) {
- if (_this.isInteracting) { // if false, still waiting for previous drag's revert
- _this.emitter.trigger('pointermove', ev);
- if (!_this.isDistanceSurpassed) {
- var minDistance = _this.minDistance;
- var distanceSq = void 0; // current distance from the origin, squared
- var deltaX = ev.deltaX, deltaY = ev.deltaY;
- distanceSq = deltaX * deltaX + deltaY * deltaY;
- if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem
- _this.handleDistanceSurpassed(ev);
- }
- }
- if (_this.isDragging) {
- // a real pointer move? (not one simulated by scrolling)
- if (ev.origEvent.type !== 'scroll') {
- _this.mirror.handleMove(ev.pageX, ev.pageY);
- _this.autoScroller.handleMove(ev.pageX, ev.pageY);
- }
- _this.emitter.trigger('dragmove', ev);
- }
- }
- };
- _this.onPointerUp = function (ev) {
- if (_this.isInteracting) { // if false, still waiting for previous drag's revert
- _this.isInteracting = false;
- allowSelection(document.body);
- allowContextMenu(document.body);
- _this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert
- if (_this.isDragging) {
- _this.autoScroller.stop();
- _this.tryStopDrag(ev); // which will stop the mirror
- }
- if (_this.delayTimeoutId) {
- clearTimeout(_this.delayTimeoutId);
- _this.delayTimeoutId = null;
- }
- }
- };
- var pointer = _this.pointer = new PointerDragging(containerEl);
- pointer.emitter.on('pointerdown', _this.onPointerDown);
- pointer.emitter.on('pointermove', _this.onPointerMove);
- pointer.emitter.on('pointerup', _this.onPointerUp);
- _this.mirror = new ElementMirror();
- _this.autoScroller = new AutoScroller();
- return _this;
- }
- FeaturefulElementDragging.prototype.destroy = function () {
- this.pointer.destroy();
- };
- FeaturefulElementDragging.prototype.startDelay = function (ev) {
- var _this = this;
- if (typeof this.delay === 'number') {
- this.delayTimeoutId = setTimeout(function () {
- _this.delayTimeoutId = null;
- _this.handleDelayEnd(ev);
- }, this.delay); // not assignable to number!
- }
- else {
- this.handleDelayEnd(ev);
- }
- };
- FeaturefulElementDragging.prototype.handleDelayEnd = function (ev) {
- this.isDelayEnded = true;
- this.tryStartDrag(ev);
- };
- FeaturefulElementDragging.prototype.handleDistanceSurpassed = function (ev) {
- this.isDistanceSurpassed = true;
- this.tryStartDrag(ev);
- };
- FeaturefulElementDragging.prototype.tryStartDrag = function (ev) {
- if (this.isDelayEnded && this.isDistanceSurpassed) {
- if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {
- this.isDragging = true;
- this.mirrorNeedsRevert = false;
- this.autoScroller.start(ev.pageX, ev.pageY);
- this.emitter.trigger('dragstart', ev);
- if (this.touchScrollAllowed === false) {
- this.pointer.cancelTouchScroll();
- }
- }
- }
- };
- FeaturefulElementDragging.prototype.tryStopDrag = function (ev) {
- // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events
- // that come from the document to fire beforehand. much more convenient this way.
- this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev) // bound with args
- );
- };
- FeaturefulElementDragging.prototype.stopDrag = function (ev) {
- this.isDragging = false;
- this.emitter.trigger('dragend', ev);
- };
- // fill in the implementations...
- FeaturefulElementDragging.prototype.setIgnoreMove = function (bool) {
- this.pointer.shouldIgnoreMove = bool;
- };
- FeaturefulElementDragging.prototype.setMirrorIsVisible = function (bool) {
- this.mirror.setIsVisible(bool);
- };
- FeaturefulElementDragging.prototype.setMirrorNeedsRevert = function (bool) {
- this.mirrorNeedsRevert = bool;
- };
- FeaturefulElementDragging.prototype.setAutoScrollEnabled = function (bool) {
- this.autoScroller.isEnabled = bool;
- };
- return FeaturefulElementDragging;
-}(ElementDragging));
-
-/*
-When this class is instantiated, it records the offset of an element (relative to the document topleft),
-and continues to monitor scrolling, updating the cached coordinates if it needs to.
-Does not access the DOM after instantiation, so highly performant.
-
-Also keeps track of all scrolling/overflow:hidden containers that are parents of the given element
-and an determine if a given point is inside the combined clipping rectangle.
-*/
-var OffsetTracker = /** @class */ (function () {
- function OffsetTracker(el) {
- this.origRect = computeRect(el);
- // will work fine for divs that have overflow:hidden
- this.scrollCaches = getClippingParents(el).map(function (el) {
- return new ElementScrollGeomCache(el, true); // listen=true
- });
- }
- OffsetTracker.prototype.destroy = function () {
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- scrollCache.destroy();
- }
- };
- OffsetTracker.prototype.computeLeft = function () {
- var left = this.origRect.left;
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();
- }
- return left;
- };
- OffsetTracker.prototype.computeTop = function () {
- var top = this.origRect.top;
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- top += scrollCache.origScrollTop - scrollCache.getScrollTop();
- }
- return top;
- };
- OffsetTracker.prototype.isWithinClipping = function (pageX, pageY) {
- var point = { left: pageX, top: pageY };
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- if (!isIgnoredClipping(scrollCache.getEventTarget()) &&
- !pointInsideRect(point, scrollCache.clientRect)) {
- return false;
- }
- }
- return true;
- };
- return OffsetTracker;
-}());
-// certain clipping containers should never constrain interactions, like <html> and <body>
-// https://github.com/fullcalendar/fullcalendar/issues/3615
-function isIgnoredClipping(node) {
- var tagName = node.tagName;
- return tagName === 'HTML' || tagName === 'BODY';
-}
-
-/*
-Tracks movement over multiple droppable areas (aka "hits")
-that exist in one or more DateComponents.
-Relies on an existing draggable.
-
-emits:
-- pointerdown
-- dragstart
-- hitchange - fires initially, even if not over a hit
-- pointerup
-- (hitchange - again, to null, if ended over a hit)
-- dragend
-*/
-var HitDragging = /** @class */ (function () {
- function HitDragging(dragging, droppableStore) {
- var _this = this;
- // options that can be set by caller
- this.useSubjectCenter = false;
- this.requireInitial = true; // if doesn't start out on a hit, won't emit any events
- this.initialHit = null;
- this.movingHit = null;
- this.finalHit = null; // won't ever be populated if shouldIgnoreMove
- this.handlePointerDown = function (ev) {
- var dragging = _this.dragging;
- _this.initialHit = null;
- _this.movingHit = null;
- _this.finalHit = null;
- _this.prepareHits();
- _this.processFirstCoord(ev);
- if (_this.initialHit || !_this.requireInitial) {
- dragging.setIgnoreMove(false);
- _this.emitter.trigger('pointerdown', ev); // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(
- }
- else {
- dragging.setIgnoreMove(true);
- }
- };
- this.handleDragStart = function (ev) {
- _this.emitter.trigger('dragstart', ev);
- _this.handleMove(ev, true); // force = fire even if initially null
- };
- this.handleDragMove = function (ev) {
- _this.emitter.trigger('dragmove', ev);
- _this.handleMove(ev);
- };
- this.handlePointerUp = function (ev) {
- _this.releaseHits();
- _this.emitter.trigger('pointerup', ev);
- };
- this.handleDragEnd = function (ev) {
- if (_this.movingHit) {
- _this.emitter.trigger('hitupdate', null, true, ev);
- }
- _this.finalHit = _this.movingHit;
- _this.movingHit = null;
- _this.emitter.trigger('dragend', ev);
- };
- this.droppableStore = droppableStore;
- dragging.emitter.on('pointerdown', this.handlePointerDown);
- dragging.emitter.on('dragstart', this.handleDragStart);
- dragging.emitter.on('dragmove', this.handleDragMove);
- dragging.emitter.on('pointerup', this.handlePointerUp);
- dragging.emitter.on('dragend', this.handleDragEnd);
- this.dragging = dragging;
- this.emitter = new EmitterMixin();
- }
- // sets initialHit
- // sets coordAdjust
- HitDragging.prototype.processFirstCoord = function (ev) {
- var origPoint = { left: ev.pageX, top: ev.pageY };
- var adjustedPoint = origPoint;
- var subjectEl = ev.subjectEl;
- var subjectRect;
- if (subjectEl !== document) {
- subjectRect = computeRect(subjectEl);
- adjustedPoint = constrainPoint(adjustedPoint, subjectRect);
- }
- var initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);
- if (initialHit) {
- if (this.useSubjectCenter && subjectRect) {
- var slicedSubjectRect = intersectRects(subjectRect, initialHit.rect);
- if (slicedSubjectRect) {
- adjustedPoint = getRectCenter(slicedSubjectRect);
- }
- }
- this.coordAdjust = diffPoints(adjustedPoint, origPoint);
- }
- else {
- this.coordAdjust = { left: 0, top: 0 };
- }
- };
- HitDragging.prototype.handleMove = function (ev, forceHandle) {
- var hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);
- if (forceHandle || !isHitsEqual(this.movingHit, hit)) {
- this.movingHit = hit;
- this.emitter.trigger('hitupdate', hit, false, ev);
- }
- };
- HitDragging.prototype.prepareHits = function () {
- this.offsetTrackers = mapHash(this.droppableStore, function (interactionSettings) {
- interactionSettings.component.buildPositionCaches();
- return new OffsetTracker(interactionSettings.el);
- });
- };
- HitDragging.prototype.releaseHits = function () {
- var offsetTrackers = this.offsetTrackers;
- for (var id in offsetTrackers) {
- offsetTrackers[id].destroy();
- }
- this.offsetTrackers = {};
- };
- HitDragging.prototype.queryHitForOffset = function (offsetLeft, offsetTop) {
- var _a = this, droppableStore = _a.droppableStore, offsetTrackers = _a.offsetTrackers;
- var bestHit = null;
- for (var id in droppableStore) {
- var component = droppableStore[id].component;
- var offsetTracker = offsetTrackers[id];
- if (offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {
- var originLeft = offsetTracker.computeLeft();
- var originTop = offsetTracker.computeTop();
- var positionLeft = offsetLeft - originLeft;
- var positionTop = offsetTop - originTop;
- var origRect = offsetTracker.origRect;
- var width = origRect.right - origRect.left;
- var height = origRect.bottom - origRect.top;
- if (
- // must be within the element's bounds
- positionLeft >= 0 && positionLeft < width &&
- positionTop >= 0 && positionTop < height) {
- var hit = component.queryHit(positionLeft, positionTop, width, height);
- if (hit &&
- (
- // make sure the hit is within activeRange, meaning it's not a deal cell
- !component.props.dateProfile || // hack for DayTile
- rangeContainsRange(component.props.dateProfile.activeRange, hit.dateSpan.range)) &&
- (!bestHit || hit.layer > bestHit.layer)) {
- // TODO: better way to re-orient rectangle
- hit.rect.left += originLeft;
- hit.rect.right += originLeft;
- hit.rect.top += originTop;
- hit.rect.bottom += originTop;
- bestHit = hit;
- }
- }
- }
- }
- return bestHit;
- };
- return HitDragging;
-}());
-function isHitsEqual(hit0, hit1) {
- if (!hit0 && !hit1) {
- return true;
- }
- if (Boolean(hit0) !== Boolean(hit1)) {
- return false;
- }
- return isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);
-}
-
-/*
-Monitors when the user clicks on a specific date/time of a component.
-A pointerdown+pointerup on the same "hit" constitutes a click.
-*/
-var DateClicking = /** @class */ (function (_super) {
- __extends(DateClicking, _super);
- function DateClicking(settings) {
- var _this = _super.call(this, settings) || this;
- _this.handlePointerDown = function (ev) {
- var dragging = _this.dragging;
- // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired
- dragging.setIgnoreMove(!_this.component.isValidDateDownEl(dragging.pointer.downEl));
- };
- // won't even fire if moving was ignored
- _this.handleDragEnd = function (ev) {
- var component = _this.component;
- var _a = component.context, calendar = _a.calendar, view = _a.view;
- var pointer = _this.dragging.pointer;
- if (!pointer.wasTouchScroll) {
- var _b = _this.hitDragging, initialHit = _b.initialHit, finalHit = _b.finalHit;
- if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {
- calendar.triggerDateClick(initialHit.dateSpan, initialHit.dayEl, view, ev.origEvent);
- }
- }
- };
- var component = settings.component;
- // we DO want to watch pointer moves because otherwise finalHit won't get populated
- _this.dragging = new FeaturefulElementDragging(component.el);
- _this.dragging.autoScroller.isEnabled = false;
- var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings));
- hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
- hitDragging.emitter.on('dragend', _this.handleDragEnd);
- return _this;
- }
- DateClicking.prototype.destroy = function () {
- this.dragging.destroy();
- };
- return DateClicking;
-}(Interaction));
-
-/*
-Tracks when the user selects a portion of time of a component,
-constituted by a drag over date cells, with a possible delay at the beginning of the drag.
-*/
-var DateSelecting = /** @class */ (function (_super) {
- __extends(DateSelecting, _super);
- function DateSelecting(settings) {
- var _this = _super.call(this, settings) || this;
- _this.dragSelection = null;
- _this.handlePointerDown = function (ev) {
- var _a = _this, component = _a.component, dragging = _a.dragging;
- var options = component.context.options;
- var canSelect = options.selectable &&
- component.isValidDateDownEl(ev.origEvent.target);
- // don't bother to watch expensive moves if component won't do selection
- dragging.setIgnoreMove(!canSelect);
- // if touch, require user to hold down
- dragging.delay = ev.isTouch ? getComponentTouchDelay(component) : null;
- };
- _this.handleDragStart = function (ev) {
- _this.component.context.calendar.unselect(ev); // unselect previous selections
- };
- _this.handleHitUpdate = function (hit, isFinal) {
- var calendar = _this.component.context.calendar;
- var dragSelection = null;
- var isInvalid = false;
- if (hit) {
- dragSelection = joinHitsIntoSelection(_this.hitDragging.initialHit, hit, calendar.pluginSystem.hooks.dateSelectionTransformers);
- if (!dragSelection || !_this.component.isDateSelectionValid(dragSelection)) {
- isInvalid = true;
- dragSelection = null;
- }
- }
- if (dragSelection) {
- calendar.dispatch({ type: 'SELECT_DATES', selection: dragSelection });
- }
- else if (!isFinal) { // only unselect if moved away while dragging
- calendar.dispatch({ type: 'UNSELECT_DATES' });
- }
- if (!isInvalid) {
- enableCursor();
- }
- else {
- disableCursor();
- }
- if (!isFinal) {
- _this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging
- }
- };
- _this.handlePointerUp = function (pev) {
- if (_this.dragSelection) {
- // selection is already rendered, so just need to report selection
- _this.component.context.calendar.triggerDateSelect(_this.dragSelection, pev);
- _this.dragSelection = null;
- }
- };
- var component = settings.component;
- var options = component.context.options;
- var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
- dragging.touchScrollAllowed = false;
- dragging.minDistance = options.selectMinDistance || 0;
- dragging.autoScroller.isEnabled = options.dragScroll;
- var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings));
- hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
- hitDragging.emitter.on('dragstart', _this.handleDragStart);
- hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
- hitDragging.emitter.on('pointerup', _this.handlePointerUp);
- return _this;
- }
- DateSelecting.prototype.destroy = function () {
- this.dragging.destroy();
- };
- return DateSelecting;
-}(Interaction));
-function getComponentTouchDelay(component) {
- var options = component.context.options;
- var delay = options.selectLongPressDelay;
- if (delay == null) {
- delay = options.longPressDelay;
- }
- return delay;
-}
-function joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {
- var dateSpan0 = hit0.dateSpan;
- var dateSpan1 = hit1.dateSpan;
- var ms = [
- dateSpan0.range.start,
- dateSpan0.range.end,
- dateSpan1.range.start,
- dateSpan1.range.end
- ];
- ms.sort(compareNumbers);
- var props = {};
- for (var _i = 0, dateSelectionTransformers_1 = dateSelectionTransformers; _i < dateSelectionTransformers_1.length; _i++) {
- var transformer = dateSelectionTransformers_1[_i];
- var res = transformer(hit0, hit1);
- if (res === false) {
- return null;
- }
- else if (res) {
- __assign(props, res);
- }
- }
- props.range = { start: ms[0], end: ms[3] };
- props.allDay = dateSpan0.allDay;
- return props;
-}
-
-var EventDragging = /** @class */ (function (_super) {
- __extends(EventDragging, _super);
- function EventDragging(settings) {
- var _this = _super.call(this, settings) || this;
- // internal state
- _this.subjectSeg = null; // the seg being selected/dragged
- _this.isDragging = false;
- _this.eventRange = null;
- _this.relevantEvents = null; // the events being dragged
- _this.receivingCalendar = null;
- _this.validMutation = null;
- _this.mutatedRelevantEvents = null;
- _this.handlePointerDown = function (ev) {
- var origTarget = ev.origEvent.target;
- var _a = _this, component = _a.component, dragging = _a.dragging;
- var mirror = dragging.mirror;
- var options = component.context.options;
- var initialCalendar = component.context.calendar;
- var subjectSeg = _this.subjectSeg = getElSeg(ev.subjectEl);
- var eventRange = _this.eventRange = subjectSeg.eventRange;
- var eventInstanceId = eventRange.instance.instanceId;
- _this.relevantEvents = getRelevantEvents(initialCalendar.state.eventStore, eventInstanceId);
- dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance;
- dragging.delay =
- // only do a touch delay if touch and this event hasn't been selected yet
- (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?
- getComponentTouchDelay$1(component) :
- null;
- mirror.parentNode = initialCalendar.el;
- mirror.revertDuration = options.dragRevertDuration;
- var isValid = component.isValidSegDownEl(origTarget) &&
- !elementClosest(origTarget, '.fc-resizer'); // NOT on a resizer
- dragging.setIgnoreMove(!isValid);
- // disable dragging for elements that are resizable (ie, selectable)
- // but are not draggable
- _this.isDragging = isValid &&
- ev.subjectEl.classList.contains('fc-draggable');
- };
- _this.handleDragStart = function (ev) {
- var context = _this.component.context;
- var initialCalendar = context.calendar;
- var eventRange = _this.eventRange;
- var eventInstanceId = eventRange.instance.instanceId;
- if (ev.isTouch) {
- // need to select a different event?
- if (eventInstanceId !== _this.component.props.eventSelection) {
- initialCalendar.dispatch({ type: 'SELECT_EVENT', eventInstanceId: eventInstanceId });
- }
- }
- else {
- // if now using mouse, but was previous touch interaction, clear selected event
- initialCalendar.dispatch({ type: 'UNSELECT_EVENT' });
- }
- if (_this.isDragging) {
- initialCalendar.unselect(ev); // unselect *date* selection
- initialCalendar.publiclyTrigger('eventDragStart', [
- {
- el: _this.subjectSeg.el,
- event: new EventApi(initialCalendar, eventRange.def, eventRange.instance),
- jsEvent: ev.origEvent,
- view: context.view
- }
- ]);
- }
- };
- _this.handleHitUpdate = function (hit, isFinal) {
- if (!_this.isDragging) {
- return;
- }
- var relevantEvents = _this.relevantEvents;
- var initialHit = _this.hitDragging.initialHit;
- var initialCalendar = _this.component.context.calendar;
- // states based on new hit
- var receivingCalendar = null;
- var mutation = null;
- var mutatedRelevantEvents = null;
- var isInvalid = false;
- var interaction = {
- affectedEvents: relevantEvents,
- mutatedEvents: createEmptyEventStore(),
- isEvent: true,
- origSeg: _this.subjectSeg
- };
- if (hit) {
- var receivingComponent = hit.component;
- receivingCalendar = receivingComponent.context.calendar;
- var receivingOptions = receivingComponent.context.options;
- if (initialCalendar === receivingCalendar ||
- receivingOptions.editable && receivingOptions.droppable) {
- mutation = computeEventMutation(initialHit, hit, receivingCalendar.pluginSystem.hooks.eventDragMutationMassagers);
- if (mutation) {
- mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, receivingCalendar.eventUiBases, mutation, receivingCalendar);
- interaction.mutatedEvents = mutatedRelevantEvents;
- if (!receivingComponent.isInteractionValid(interaction)) {
- isInvalid = true;
- mutation = null;
- mutatedRelevantEvents = null;
- interaction.mutatedEvents = createEmptyEventStore();
- }
- }
- }
- else {
- receivingCalendar = null;
- }
- }
- _this.displayDrag(receivingCalendar, interaction);
- if (!isInvalid) {
- enableCursor();
- }
- else {
- disableCursor();
- }
- if (!isFinal) {
- if (initialCalendar === receivingCalendar && // TODO: write test for this
- isHitsEqual(initialHit, hit)) {
- mutation = null;
- }
- _this.dragging.setMirrorNeedsRevert(!mutation);
- // render the mirror if no already-rendered mirror
- // TODO: wish we could somehow wait for dispatch to guarantee render
- _this.dragging.setMirrorIsVisible(!hit || !document.querySelector('.fc-mirror'));
- // assign states based on new hit
- _this.receivingCalendar = receivingCalendar;
- _this.validMutation = mutation;
- _this.mutatedRelevantEvents = mutatedRelevantEvents;
- }
- };
- _this.handlePointerUp = function () {
- if (!_this.isDragging) {
- _this.cleanup(); // because handleDragEnd won't fire
- }
- };
- _this.handleDragEnd = function (ev) {
- if (_this.isDragging) {
- var context = _this.component.context;
- var initialCalendar_1 = context.calendar;
- var initialView = context.view;
- var _a = _this, receivingCalendar = _a.receivingCalendar, validMutation = _a.validMutation;
- var eventDef = _this.eventRange.def;
- var eventInstance = _this.eventRange.instance;
- var eventApi = new EventApi(initialCalendar_1, eventDef, eventInstance);
- var relevantEvents_1 = _this.relevantEvents;
- var mutatedRelevantEvents = _this.mutatedRelevantEvents;
- var finalHit = _this.hitDragging.finalHit;
- _this.clearDrag(); // must happen after revert animation
- initialCalendar_1.publiclyTrigger('eventDragStop', [
- {
- el: _this.subjectSeg.el,
- event: eventApi,
- jsEvent: ev.origEvent,
- view: initialView
- }
- ]);
- if (validMutation) {
- // dropped within same calendar
- if (receivingCalendar === initialCalendar_1) {
- initialCalendar_1.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: mutatedRelevantEvents
- });
- var transformed = {};
- for (var _i = 0, _b = initialCalendar_1.pluginSystem.hooks.eventDropTransformers; _i < _b.length; _i++) {
- var transformer = _b[_i];
- __assign(transformed, transformer(validMutation, initialCalendar_1));
- }
- var eventDropArg = __assign({}, transformed, { el: ev.subjectEl, delta: validMutation.datesDelta, oldEvent: eventApi, event: new EventApi(// the data AFTER the mutation
- initialCalendar_1, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null), revert: function () {
- initialCalendar_1.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: relevantEvents_1
- });
- }, jsEvent: ev.origEvent, view: initialView });
- initialCalendar_1.publiclyTrigger('eventDrop', [eventDropArg]);
- // dropped in different calendar
- }
- else if (receivingCalendar) {
- initialCalendar_1.publiclyTrigger('eventLeave', [
- {
- draggedEl: ev.subjectEl,
- event: eventApi,
- view: initialView
- }
- ]);
- initialCalendar_1.dispatch({
- type: 'REMOVE_EVENT_INSTANCES',
- instances: _this.mutatedRelevantEvents.instances
- });
- receivingCalendar.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: _this.mutatedRelevantEvents
- });
- if (ev.isTouch) {
- receivingCalendar.dispatch({
- type: 'SELECT_EVENT',
- eventInstanceId: eventInstance.instanceId
- });
- }
- var dropArg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.component // should this be finalHit.component.view? See #4644
- });
- receivingCalendar.publiclyTrigger('drop', [dropArg]);
- receivingCalendar.publiclyTrigger('eventReceive', [
- {
- draggedEl: ev.subjectEl,
- event: new EventApi(// the data AFTER the mutation
- receivingCalendar, mutatedRelevantEvents.defs[eventDef.defId], mutatedRelevantEvents.instances[eventInstance.instanceId]),
- view: finalHit.component // should this be finalHit.component.view? See #4644
- }
- ]);
- }
- }
- else {
- initialCalendar_1.publiclyTrigger('_noEventDrop');
- }
- }
- _this.cleanup();
- };
- var component = _this.component;
- var options = component.context.options;
- var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
- dragging.pointer.selector = EventDragging.SELECTOR;
- dragging.touchScrollAllowed = false;
- dragging.autoScroller.isEnabled = options.dragScroll;
- var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsStore);
- hitDragging.useSubjectCenter = settings.useEventCenter;
- hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
- hitDragging.emitter.on('dragstart', _this.handleDragStart);
- hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
- hitDragging.emitter.on('pointerup', _this.handlePointerUp);
- hitDragging.emitter.on('dragend', _this.handleDragEnd);
- return _this;
- }
- EventDragging.prototype.destroy = function () {
- this.dragging.destroy();
- };
- // render a drag state on the next receivingCalendar
- EventDragging.prototype.displayDrag = function (nextCalendar, state) {
- var initialCalendar = this.component.context.calendar;
- var prevCalendar = this.receivingCalendar;
- // does the previous calendar need to be cleared?
- if (prevCalendar && prevCalendar !== nextCalendar) {
- // does the initial calendar need to be cleared?
- // if so, don't clear all the way. we still need to to hide the affectedEvents
- if (prevCalendar === initialCalendar) {
- prevCalendar.dispatch({
- type: 'SET_EVENT_DRAG',
- state: {
- affectedEvents: state.affectedEvents,
- mutatedEvents: createEmptyEventStore(),
- isEvent: true,
- origSeg: state.origSeg
- }
- });
- // completely clear the old calendar if it wasn't the initial
- }
- else {
- prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- }
- if (nextCalendar) {
- nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });
- }
- };
- EventDragging.prototype.clearDrag = function () {
- var initialCalendar = this.component.context.calendar;
- var receivingCalendar = this.receivingCalendar;
- if (receivingCalendar) {
- receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- // the initial calendar might have an dummy drag state from displayDrag
- if (initialCalendar !== receivingCalendar) {
- initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- };
- EventDragging.prototype.cleanup = function () {
- this.subjectSeg = null;
- this.isDragging = false;
- this.eventRange = null;
- this.relevantEvents = null;
- this.receivingCalendar = null;
- this.validMutation = null;
- this.mutatedRelevantEvents = null;
- };
- EventDragging.SELECTOR = '.fc-draggable, .fc-resizable'; // TODO: test this in IE11
- return EventDragging;
-}(Interaction));
-function computeEventMutation(hit0, hit1, massagers) {
- var dateSpan0 = hit0.dateSpan;
- var dateSpan1 = hit1.dateSpan;
- var date0 = dateSpan0.range.start;
- var date1 = dateSpan1.range.start;
- var standardProps = {};
- if (dateSpan0.allDay !== dateSpan1.allDay) {
- standardProps.allDay = dateSpan1.allDay;
- standardProps.hasEnd = hit1.component.context.options.allDayMaintainDuration;
- if (dateSpan1.allDay) {
- // means date1 is already start-of-day,
- // but date0 needs to be converted
- date0 = startOfDay(date0);
- }
- }
- var delta = diffDates(date0, date1, hit0.component.context.dateEnv, hit0.component === hit1.component ?
- hit0.component.largeUnit :
- null);
- if (delta.milliseconds) { // has hours/minutes/seconds
- standardProps.allDay = false;
- }
- var mutation = {
- datesDelta: delta,
- standardProps: standardProps
- };
- for (var _i = 0, massagers_1 = massagers; _i < massagers_1.length; _i++) {
- var massager = massagers_1[_i];
- massager(mutation, hit0, hit1);
- }
- return mutation;
-}
-function getComponentTouchDelay$1(component) {
- var options = component.context.options;
- var delay = options.eventLongPressDelay;
- if (delay == null) {
- delay = options.longPressDelay;
- }
- return delay;
-}
-
-var EventDragging$1 = /** @class */ (function (_super) {
- __extends(EventDragging, _super);
- function EventDragging(settings) {
- var _this = _super.call(this, settings) || this;
- // internal state
- _this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?
- _this.eventRange = null;
- _this.relevantEvents = null;
- _this.validMutation = null;
- _this.mutatedRelevantEvents = null;
- _this.handlePointerDown = function (ev) {
- var component = _this.component;
- var seg = _this.querySeg(ev);
- var eventRange = _this.eventRange = seg.eventRange;
- _this.dragging.minDistance = component.context.options.eventDragMinDistance;
- // if touch, need to be working with a selected event
- _this.dragging.setIgnoreMove(!_this.component.isValidSegDownEl(ev.origEvent.target) ||
- (ev.isTouch && _this.component.props.eventSelection !== eventRange.instance.instanceId));
- };
- _this.handleDragStart = function (ev) {
- var _a = _this.component.context, calendar = _a.calendar, view = _a.view;
- var eventRange = _this.eventRange;
- _this.relevantEvents = getRelevantEvents(calendar.state.eventStore, _this.eventRange.instance.instanceId);
- _this.draggingSeg = _this.querySeg(ev);
- calendar.unselect();
- calendar.publiclyTrigger('eventResizeStart', [
- {
- el: _this.draggingSeg.el,
- event: new EventApi(calendar, eventRange.def, eventRange.instance),
- jsEvent: ev.origEvent,
- view: view
- }
- ]);
- };
- _this.handleHitUpdate = function (hit, isFinal, ev) {
- var calendar = _this.component.context.calendar;
- var relevantEvents = _this.relevantEvents;
- var initialHit = _this.hitDragging.initialHit;
- var eventInstance = _this.eventRange.instance;
- var mutation = null;
- var mutatedRelevantEvents = null;
- var isInvalid = false;
- var interaction = {
- affectedEvents: relevantEvents,
- mutatedEvents: createEmptyEventStore(),
- isEvent: true,
- origSeg: _this.draggingSeg
- };
- if (hit) {
- mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-start-resizer'), eventInstance.range, calendar.pluginSystem.hooks.eventResizeJoinTransforms);
- }
- if (mutation) {
- mutatedRelevantEvents = applyMutationToEventStore(relevantEvents, calendar.eventUiBases, mutation, calendar);
- interaction.mutatedEvents = mutatedRelevantEvents;
- if (!_this.component.isInteractionValid(interaction)) {
- isInvalid = true;
- mutation = null;
- mutatedRelevantEvents = null;
- interaction.mutatedEvents = null;
- }
- }
- if (mutatedRelevantEvents) {
- calendar.dispatch({
- type: 'SET_EVENT_RESIZE',
- state: interaction
- });
- }
- else {
- calendar.dispatch({ type: 'UNSET_EVENT_RESIZE' });
- }
- if (!isInvalid) {
- enableCursor();
- }
- else {
- disableCursor();
- }
- if (!isFinal) {
- if (mutation && isHitsEqual(initialHit, hit)) {
- mutation = null;
- }
- _this.validMutation = mutation;
- _this.mutatedRelevantEvents = mutatedRelevantEvents;
- }
- };
- _this.handleDragEnd = function (ev) {
- var _a = _this.component.context, calendar = _a.calendar, view = _a.view;
- var eventDef = _this.eventRange.def;
- var eventInstance = _this.eventRange.instance;
- var eventApi = new EventApi(calendar, eventDef, eventInstance);
- var relevantEvents = _this.relevantEvents;
- var mutatedRelevantEvents = _this.mutatedRelevantEvents;
- calendar.publiclyTrigger('eventResizeStop', [
- {
- el: _this.draggingSeg.el,
- event: eventApi,
- jsEvent: ev.origEvent,
- view: view
- }
- ]);
- if (_this.validMutation) {
- calendar.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: mutatedRelevantEvents
- });
- calendar.publiclyTrigger('eventResize', [
- {
- el: _this.draggingSeg.el,
- startDelta: _this.validMutation.startDelta || createDuration(0),
- endDelta: _this.validMutation.endDelta || createDuration(0),
- prevEvent: eventApi,
- event: new EventApi(// the data AFTER the mutation
- calendar, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null),
- revert: function () {
- calendar.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: relevantEvents
- });
- },
- jsEvent: ev.origEvent,
- view: view
- }
- ]);
- }
- else {
- calendar.publiclyTrigger('_noEventResize');
- }
- // reset all internal state
- _this.draggingSeg = null;
- _this.relevantEvents = null;
- _this.validMutation = null;
- // okay to keep eventInstance around. useful to set it in handlePointerDown
- };
- var component = settings.component;
- var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
- dragging.pointer.selector = '.fc-resizer';
- dragging.touchScrollAllowed = false;
- dragging.autoScroller.isEnabled = component.context.options.dragScroll;
- var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, interactionSettingsToStore(settings));
- hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
- hitDragging.emitter.on('dragstart', _this.handleDragStart);
- hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
- hitDragging.emitter.on('dragend', _this.handleDragEnd);
- return _this;
- }
- EventDragging.prototype.destroy = function () {
- this.dragging.destroy();
- };
- EventDragging.prototype.querySeg = function (ev) {
- return getElSeg(elementClosest(ev.subjectEl, this.component.fgSegSelector));
- };
- return EventDragging;
-}(Interaction));
-function computeMutation(hit0, hit1, isFromStart, instanceRange, transforms) {
- var dateEnv = hit0.component.context.dateEnv;
- var date0 = hit0.dateSpan.range.start;
- var date1 = hit1.dateSpan.range.start;
- var delta = diffDates(date0, date1, dateEnv, hit0.component.largeUnit);
- var props = {};
- for (var _i = 0, transforms_1 = transforms; _i < transforms_1.length; _i++) {
- var transform = transforms_1[_i];
- var res = transform(hit0, hit1);
- if (res === false) {
- return null;
- }
- else if (res) {
- __assign(props, res);
- }
- }
- if (isFromStart) {
- if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {
- props.startDelta = delta;
- return props;
- }
- }
- else {
- if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {
- props.endDelta = delta;
- return props;
- }
- }
- return null;
-}
-
-var UnselectAuto = /** @class */ (function () {
- function UnselectAuto(calendar) {
- var _this = this;
- this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system
- this.onSelect = function (selectInfo) {
- if (selectInfo.jsEvent) {
- _this.isRecentPointerDateSelect = true;
- }
- };
- this.onDocumentPointerUp = function (pev) {
- var _a = _this, calendar = _a.calendar, documentPointer = _a.documentPointer;
- var state = calendar.state;
- // touch-scrolling should never unfocus any type of selection
- if (!documentPointer.wasTouchScroll) {
- if (state.dateSelection && // an existing date selection?
- !_this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?
- ) {
- var unselectAuto = calendar.viewOpt('unselectAuto');
- var unselectCancel = calendar.viewOpt('unselectCancel');
- if (unselectAuto && (!unselectAuto || !elementClosest(documentPointer.downEl, unselectCancel))) {
- calendar.unselect(pev);
- }
- }
- if (state.eventSelection && // an existing event selected?
- !elementClosest(documentPointer.downEl, EventDragging.SELECTOR) // interaction DIDN'T start on an event
- ) {
- calendar.dispatch({ type: 'UNSELECT_EVENT' });
- }
- }
- _this.isRecentPointerDateSelect = false;
- };
- this.calendar = calendar;
- var documentPointer = this.documentPointer = new PointerDragging(document);
- documentPointer.shouldIgnoreMove = true;
- documentPointer.shouldWatchScroll = false;
- documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);
- /*
- TODO: better way to know about whether there was a selection with the pointer
- */
- calendar.on('select', this.onSelect);
- }
- UnselectAuto.prototype.destroy = function () {
- this.calendar.off('select', this.onSelect);
- this.documentPointer.destroy();
- };
- return UnselectAuto;
-}());
-
-/*
-Given an already instantiated draggable object for one-or-more elements,
-Interprets any dragging as an attempt to drag an events that lives outside
-of a calendar onto a calendar.
-*/
-var ExternalElementDragging = /** @class */ (function () {
- function ExternalElementDragging(dragging, suppliedDragMeta) {
- var _this = this;
- this.receivingCalendar = null;
- this.droppableEvent = null; // will exist for all drags, even if create:false
- this.suppliedDragMeta = null;
- this.dragMeta = null;
- this.handleDragStart = function (ev) {
- _this.dragMeta = _this.buildDragMeta(ev.subjectEl);
- };
- this.handleHitUpdate = function (hit, isFinal, ev) {
- var dragging = _this.hitDragging.dragging;
- var receivingCalendar = null;
- var droppableEvent = null;
- var isInvalid = false;
- var interaction = {
- affectedEvents: createEmptyEventStore(),
- mutatedEvents: createEmptyEventStore(),
- isEvent: _this.dragMeta.create,
- origSeg: null
- };
- if (hit) {
- receivingCalendar = hit.component.context.calendar;
- if (_this.canDropElOnCalendar(ev.subjectEl, receivingCalendar)) {
- droppableEvent = computeEventForDateSpan(hit.dateSpan, _this.dragMeta, receivingCalendar);
- interaction.mutatedEvents = eventTupleToStore(droppableEvent);
- isInvalid = !isInteractionValid(interaction, receivingCalendar);
- if (isInvalid) {
- interaction.mutatedEvents = createEmptyEventStore();
- droppableEvent = null;
- }
- }
- }
- _this.displayDrag(receivingCalendar, interaction);
- // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)
- // TODO: wish we could somehow wait for dispatch to guarantee render
- dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-mirror'));
- if (!isInvalid) {
- enableCursor();
- }
- else {
- disableCursor();
- }
- if (!isFinal) {
- dragging.setMirrorNeedsRevert(!droppableEvent);
- _this.receivingCalendar = receivingCalendar;
- _this.droppableEvent = droppableEvent;
- }
- };
- this.handleDragEnd = function (pev) {
- var _a = _this, receivingCalendar = _a.receivingCalendar, droppableEvent = _a.droppableEvent;
- _this.clearDrag();
- if (receivingCalendar && droppableEvent) {
- var finalHit = _this.hitDragging.finalHit;
- var finalView = finalHit.component.context.view;
- var dragMeta = _this.dragMeta;
- var arg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView });
- receivingCalendar.publiclyTrigger('drop', [arg]);
- if (dragMeta.create) {
- receivingCalendar.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: eventTupleToStore(droppableEvent)
- });
- if (pev.isTouch) {
- receivingCalendar.dispatch({
- type: 'SELECT_EVENT',
- eventInstanceId: droppableEvent.instance.instanceId
- });
- }
- // signal that an external event landed
- receivingCalendar.publiclyTrigger('eventReceive', [
- {
- draggedEl: pev.subjectEl,
- event: new EventApi(receivingCalendar, droppableEvent.def, droppableEvent.instance),
- view: finalView
- }
- ]);
- }
- }
- _this.receivingCalendar = null;
- _this.droppableEvent = null;
- };
- var hitDragging = this.hitDragging = new HitDragging(dragging, interactionSettingsStore);
- hitDragging.requireInitial = false; // will start outside of a component
- hitDragging.emitter.on('dragstart', this.handleDragStart);
- hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
- hitDragging.emitter.on('dragend', this.handleDragEnd);
- this.suppliedDragMeta = suppliedDragMeta;
- }
- ExternalElementDragging.prototype.buildDragMeta = function (subjectEl) {
- if (typeof this.suppliedDragMeta === 'object') {
- return parseDragMeta(this.suppliedDragMeta);
- }
- else if (typeof this.suppliedDragMeta === 'function') {
- return parseDragMeta(this.suppliedDragMeta(subjectEl));
- }
- else {
- return getDragMetaFromEl(subjectEl);
- }
- };
- ExternalElementDragging.prototype.displayDrag = function (nextCalendar, state) {
- var prevCalendar = this.receivingCalendar;
- if (prevCalendar && prevCalendar !== nextCalendar) {
- prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- if (nextCalendar) {
- nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });
- }
- };
- ExternalElementDragging.prototype.clearDrag = function () {
- if (this.receivingCalendar) {
- this.receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- };
- ExternalElementDragging.prototype.canDropElOnCalendar = function (el, receivingCalendar) {
- var dropAccept = receivingCalendar.opt('dropAccept');
- if (typeof dropAccept === 'function') {
- return dropAccept(el);
- }
- else if (typeof dropAccept === 'string' && dropAccept) {
- return Boolean(elementMatches(el, dropAccept));
- }
- return true;
- };
- return ExternalElementDragging;
-}());
-// Utils for computing event store from the DragMeta
-// ----------------------------------------------------------------------------------------------------
-function computeEventForDateSpan(dateSpan, dragMeta, calendar) {
- var defProps = __assign({}, dragMeta.leftoverProps);
- for (var _i = 0, _a = calendar.pluginSystem.hooks.externalDefTransforms; _i < _a.length; _i++) {
- var transform = _a[_i];
- __assign(defProps, transform(dateSpan, dragMeta));
- }
- var def = parseEventDef(defProps, dragMeta.sourceId, dateSpan.allDay, calendar.opt('forceEventDuration') || Boolean(dragMeta.duration), // hasEnd
- calendar);
- var start = dateSpan.range.start;
- // only rely on time info if drop zone is all-day,
- // otherwise, we already know the time
- if (dateSpan.allDay && dragMeta.startTime) {
- start = calendar.dateEnv.add(start, dragMeta.startTime);
- }
- var end = dragMeta.duration ?
- calendar.dateEnv.add(start, dragMeta.duration) :
- calendar.getDefaultEventEnd(dateSpan.allDay, start);
- var instance = createEventInstance(def.defId, { start: start, end: end });
- return { def: def, instance: instance };
-}
-// Utils for extracting data from element
-// ----------------------------------------------------------------------------------------------------
-function getDragMetaFromEl(el) {
- var str = getEmbeddedElData(el, 'event');
- var obj = str ?
- JSON.parse(str) :
- { create: false }; // if no embedded data, assume no event creation
- return parseDragMeta(obj);
-}
-config.dataAttrPrefix = '';
-function getEmbeddedElData(el, name) {
- var prefix = config.dataAttrPrefix;
- var prefixedName = (prefix ? prefix + '-' : '') + name;
- return el.getAttribute('data-' + prefixedName) || '';
-}
-
-/*
-Makes an element (that is *external* to any calendar) draggable.
-Can pass in data that determines how an event will be created when dropped onto a calendar.
-Leverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.
-*/
-var ExternalDraggable = /** @class */ (function () {
- function ExternalDraggable(el, settings) {
- var _this = this;
- if (settings === void 0) { settings = {}; }
- this.handlePointerDown = function (ev) {
- var dragging = _this.dragging;
- var _a = _this.settings, minDistance = _a.minDistance, longPressDelay = _a.longPressDelay;
- dragging.minDistance =
- minDistance != null ?
- minDistance :
- (ev.isTouch ? 0 : globalDefaults.eventDragMinDistance);
- dragging.delay =
- ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv
- (longPressDelay != null ? longPressDelay : globalDefaults.longPressDelay) :
- 0;
- };
- this.handleDragStart = function (ev) {
- if (ev.isTouch &&
- _this.dragging.delay &&
- ev.subjectEl.classList.contains('fc-event')) {
- _this.dragging.mirror.getMirrorEl().classList.add('fc-selected');
- }
- };
- this.settings = settings;
- var dragging = this.dragging = new FeaturefulElementDragging(el);
- dragging.touchScrollAllowed = false;
- if (settings.itemSelector != null) {
- dragging.pointer.selector = settings.itemSelector;
- }
- if (settings.appendTo != null) {
- dragging.mirror.parentNode = settings.appendTo; // TODO: write tests
- }
- dragging.emitter.on('pointerdown', this.handlePointerDown);
- dragging.emitter.on('dragstart', this.handleDragStart);
- new ExternalElementDragging(dragging, settings.eventData);
- }
- ExternalDraggable.prototype.destroy = function () {
- this.dragging.destroy();
- };
- return ExternalDraggable;
-}());
-
-/*
-Detects when a *THIRD-PARTY* drag-n-drop system interacts with elements.
-The third-party system is responsible for drawing the visuals effects of the drag.
-This class simply monitors for pointer movements and fires events.
-It also has the ability to hide the moving element (the "mirror") during the drag.
-*/
-var InferredElementDragging = /** @class */ (function (_super) {
- __extends(InferredElementDragging, _super);
- function InferredElementDragging(containerEl) {
- var _this = _super.call(this, containerEl) || this;
- _this.shouldIgnoreMove = false;
- _this.mirrorSelector = '';
- _this.currentMirrorEl = null;
- _this.handlePointerDown = function (ev) {
- _this.emitter.trigger('pointerdown', ev);
- if (!_this.shouldIgnoreMove) {
- // fire dragstart right away. does not support delay or min-distance
- _this.emitter.trigger('dragstart', ev);
- }
- };
- _this.handlePointerMove = function (ev) {
- if (!_this.shouldIgnoreMove) {
- _this.emitter.trigger('dragmove', ev);
- }
- };
- _this.handlePointerUp = function (ev) {
- _this.emitter.trigger('pointerup', ev);
- if (!_this.shouldIgnoreMove) {
- // fire dragend right away. does not support a revert animation
- _this.emitter.trigger('dragend', ev);
- }
- };
- var pointer = _this.pointer = new PointerDragging(containerEl);
- pointer.emitter.on('pointerdown', _this.handlePointerDown);
- pointer.emitter.on('pointermove', _this.handlePointerMove);
- pointer.emitter.on('pointerup', _this.handlePointerUp);
- return _this;
- }
- InferredElementDragging.prototype.destroy = function () {
- this.pointer.destroy();
- };
- InferredElementDragging.prototype.setIgnoreMove = function (bool) {
- this.shouldIgnoreMove = bool;
- };
- InferredElementDragging.prototype.setMirrorIsVisible = function (bool) {
- if (bool) {
- // restore a previously hidden element.
- // use the reference in case the selector class has already been removed.
- if (this.currentMirrorEl) {
- this.currentMirrorEl.style.visibility = '';
- this.currentMirrorEl = null;
- }
- }
- else {
- var mirrorEl = this.mirrorSelector ?
- document.querySelector(this.mirrorSelector) :
- null;
- if (mirrorEl) {
- this.currentMirrorEl = mirrorEl;
- mirrorEl.style.visibility = 'hidden';
- }
- }
- };
- return InferredElementDragging;
-}(ElementDragging));
-
-/*
-Bridges third-party drag-n-drop systems with FullCalendar.
-Must be instantiated and destroyed by caller.
-*/
-var ThirdPartyDraggable = /** @class */ (function () {
- function ThirdPartyDraggable(containerOrSettings, settings) {
- var containerEl = document;
- if (
- // wish we could just test instanceof EventTarget, but doesn't work in IE11
- containerOrSettings === document ||
- containerOrSettings instanceof Element) {
- containerEl = containerOrSettings;
- settings = settings || {};
- }
- else {
- settings = (containerOrSettings || {});
- }
- var dragging = this.dragging = new InferredElementDragging(containerEl);
- if (typeof settings.itemSelector === 'string') {
- dragging.pointer.selector = settings.itemSelector;
- }
- else if (containerEl === document) {
- dragging.pointer.selector = '[data-event]';
- }
- if (typeof settings.mirrorSelector === 'string') {
- dragging.mirrorSelector = settings.mirrorSelector;
- }
- new ExternalElementDragging(dragging, settings.eventData);
- }
- ThirdPartyDraggable.prototype.destroy = function () {
- this.dragging.destroy();
- };
- return ThirdPartyDraggable;
-}());
-
-var main = createPlugin({
- componentInteractions: [DateClicking, DateSelecting, EventDragging, EventDragging$1],
- calendarInteractions: [UnselectAuto],
- elementDraggingImpl: FeaturefulElementDragging
-});
-
-export default main;
-export { ExternalDraggable as Draggable, FeaturefulElementDragging, PointerDragging, ThirdPartyDraggable };
diff --git a/library/fullcalendar/packages/interaction/main.js b/library/fullcalendar/packages/interaction/main.js
deleted file mode 100644
index 4420650fb..000000000
--- a/library/fullcalendar/packages/interaction/main.js
+++ /dev/null
@@ -1,2152 +0,0 @@
-/*!
-FullCalendar Interaction Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
- typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
- (global = global || self, factory(global.FullCalendarInteraction = {}, global.FullCalendar));
-}(this, function (exports, core) { 'use strict';
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
- /* global Reflect, Promise */
-
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
-
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
-
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
-
- core.config.touchMouseIgnoreWait = 500;
- var ignoreMouseDepth = 0;
- var listenerCnt = 0;
- var isWindowTouchMoveCancelled = false;
- /*
- Uses a "pointer" abstraction, which monitors UI events for both mouse and touch.
- Tracks when the pointer "drags" on a certain element, meaning down+move+up.
-
- Also, tracks if there was touch-scrolling.
- Also, can prevent touch-scrolling from happening.
- Also, can fire pointermove events when scrolling happens underneath, even when no real pointer movement.
-
- emits:
- - pointerdown
- - pointermove
- - pointerup
- */
- var PointerDragging = /** @class */ (function () {
- function PointerDragging(containerEl) {
- var _this = this;
- this.subjectEl = null;
- this.downEl = null;
- // options that can be directly assigned by caller
- this.selector = ''; // will cause subjectEl in all emitted events to be this element
- this.handleSelector = '';
- this.shouldIgnoreMove = false;
- this.shouldWatchScroll = true; // for simulating pointermove on scroll
- // internal states
- this.isDragging = false;
- this.isTouchDragging = false;
- this.wasTouchScroll = false;
- // Mouse
- // ----------------------------------------------------------------------------------------------------
- this.handleMouseDown = function (ev) {
- if (!_this.shouldIgnoreMouse() &&
- isPrimaryMouseButton(ev) &&
- _this.tryStart(ev)) {
- var pev = _this.createEventFromMouse(ev, true);
- _this.emitter.trigger('pointerdown', pev);
- _this.initScrollWatch(pev);
- if (!_this.shouldIgnoreMove) {
- document.addEventListener('mousemove', _this.handleMouseMove);
- }
- document.addEventListener('mouseup', _this.handleMouseUp);
- }
- };
- this.handleMouseMove = function (ev) {
- var pev = _this.createEventFromMouse(ev);
- _this.recordCoords(pev);
- _this.emitter.trigger('pointermove', pev);
- };
- this.handleMouseUp = function (ev) {
- document.removeEventListener('mousemove', _this.handleMouseMove);
- document.removeEventListener('mouseup', _this.handleMouseUp);
- _this.emitter.trigger('pointerup', _this.createEventFromMouse(ev));
- _this.cleanup(); // call last so that pointerup has access to props
- };
- // Touch
- // ----------------------------------------------------------------------------------------------------
- this.handleTouchStart = function (ev) {
- if (_this.tryStart(ev)) {
- _this.isTouchDragging = true;
- var pev = _this.createEventFromTouch(ev, true);
- _this.emitter.trigger('pointerdown', pev);
- _this.initScrollWatch(pev);
- // unlike mouse, need to attach to target, not document
- // https://stackoverflow.com/a/45760014
- var target = ev.target;
- if (!_this.shouldIgnoreMove) {
- target.addEventListener('touchmove', _this.handleTouchMove);
- }
- target.addEventListener('touchend', _this.handleTouchEnd);
- target.addEventListener('touchcancel', _this.handleTouchEnd); // treat it as a touch end
- // attach a handler to get called when ANY scroll action happens on the page.
- // this was impossible to do with normal on/off because 'scroll' doesn't bubble.
- // http://stackoverflow.com/a/32954565/96342
- window.addEventListener('scroll', _this.handleTouchScroll, true // useCapture
- );
- }
- };
- this.handleTouchMove = function (ev) {
- var pev = _this.createEventFromTouch(ev);
- _this.recordCoords(pev);
- _this.emitter.trigger('pointermove', pev);
- };
- this.handleTouchEnd = function (ev) {
- if (_this.isDragging) { // done to guard against touchend followed by touchcancel
- var target = ev.target;
- target.removeEventListener('touchmove', _this.handleTouchMove);
- target.removeEventListener('touchend', _this.handleTouchEnd);
- target.removeEventListener('touchcancel', _this.handleTouchEnd);
- window.removeEventListener('scroll', _this.handleTouchScroll, true); // useCaptured=true
- _this.emitter.trigger('pointerup', _this.createEventFromTouch(ev));
- _this.cleanup(); // call last so that pointerup has access to props
- _this.isTouchDragging = false;
- startIgnoringMouse();
- }
- };
- this.handleTouchScroll = function () {
- _this.wasTouchScroll = true;
- };
- this.handleScroll = function (ev) {
- if (!_this.shouldIgnoreMove) {
- var pageX = (window.pageXOffset - _this.prevScrollX) + _this.prevPageX;
- var pageY = (window.pageYOffset - _this.prevScrollY) + _this.prevPageY;
- _this.emitter.trigger('pointermove', {
- origEvent: ev,
- isTouch: _this.isTouchDragging,
- subjectEl: _this.subjectEl,
- pageX: pageX,
- pageY: pageY,
- deltaX: pageX - _this.origPageX,
- deltaY: pageY - _this.origPageY
- });
- }
- };
- this.containerEl = containerEl;
- this.emitter = new core.EmitterMixin();
- containerEl.addEventListener('mousedown', this.handleMouseDown);
- containerEl.addEventListener('touchstart', this.handleTouchStart, { passive: true });
- listenerCreated();
- }
- PointerDragging.prototype.destroy = function () {
- this.containerEl.removeEventListener('mousedown', this.handleMouseDown);
- this.containerEl.removeEventListener('touchstart', this.handleTouchStart, { passive: true });
- listenerDestroyed();
- };
- PointerDragging.prototype.tryStart = function (ev) {
- var subjectEl = this.querySubjectEl(ev);
- var downEl = ev.target;
- if (subjectEl &&
- (!this.handleSelector || core.elementClosest(downEl, this.handleSelector))) {
- this.subjectEl = subjectEl;
- this.downEl = downEl;
- this.isDragging = true; // do this first so cancelTouchScroll will work
- this.wasTouchScroll = false;
- return true;
- }
- return false;
- };
- PointerDragging.prototype.cleanup = function () {
- isWindowTouchMoveCancelled = false;
- this.isDragging = false;
- this.subjectEl = null;
- this.downEl = null;
- // keep wasTouchScroll around for later access
- this.destroyScrollWatch();
- };
- PointerDragging.prototype.querySubjectEl = function (ev) {
- if (this.selector) {
- return core.elementClosest(ev.target, this.selector);
- }
- else {
- return this.containerEl;
- }
- };
- PointerDragging.prototype.shouldIgnoreMouse = function () {
- return ignoreMouseDepth || this.isTouchDragging;
- };
- // can be called by user of this class, to cancel touch-based scrolling for the current drag
- PointerDragging.prototype.cancelTouchScroll = function () {
- if (this.isDragging) {
- isWindowTouchMoveCancelled = true;
- }
- };
- // Scrolling that simulates pointermoves
- // ----------------------------------------------------------------------------------------------------
- PointerDragging.prototype.initScrollWatch = function (ev) {
- if (this.shouldWatchScroll) {
- this.recordCoords(ev);
- window.addEventListener('scroll', this.handleScroll, true); // useCapture=true
- }
- };
- PointerDragging.prototype.recordCoords = function (ev) {
- if (this.shouldWatchScroll) {
- this.prevPageX = ev.pageX;
- this.prevPageY = ev.pageY;
- this.prevScrollX = window.pageXOffset;
- this.prevScrollY = window.pageYOffset;
- }
- };
- PointerDragging.prototype.destroyScrollWatch = function () {
- if (this.shouldWatchScroll) {
- window.removeEventListener('scroll', this.handleScroll, true); // useCaptured=true
- }
- };
- // Event Normalization
- // ----------------------------------------------------------------------------------------------------
- PointerDragging.prototype.createEventFromMouse = function (ev, isFirst) {
- var deltaX = 0;
- var deltaY = 0;
- // TODO: repeat code
- if (isFirst) {
- this.origPageX = ev.pageX;
- this.origPageY = ev.pageY;
- }
- else {
- deltaX = ev.pageX - this.origPageX;
- deltaY = ev.pageY - this.origPageY;
- }
- return {
- origEvent: ev,
- isTouch: false,
- subjectEl: this.subjectEl,
- pageX: ev.pageX,
- pageY: ev.pageY,
- deltaX: deltaX,
- deltaY: deltaY
- };
- };
- PointerDragging.prototype.createEventFromTouch = function (ev, isFirst) {
- var touches = ev.touches;
- var pageX;
- var pageY;
- var deltaX = 0;
- var deltaY = 0;
- // if touch coords available, prefer,
- // because FF would give bad ev.pageX ev.pageY
- if (touches && touches.length) {
- pageX = touches[0].pageX;
- pageY = touches[0].pageY;
- }
- else {
- pageX = ev.pageX;
- pageY = ev.pageY;
- }
- // TODO: repeat code
- if (isFirst) {
- this.origPageX = pageX;
- this.origPageY = pageY;
- }
- else {
- deltaX = pageX - this.origPageX;
- deltaY = pageY - this.origPageY;
- }
- return {
- origEvent: ev,
- isTouch: true,
- subjectEl: this.subjectEl,
- pageX: pageX,
- pageY: pageY,
- deltaX: deltaX,
- deltaY: deltaY
- };
- };
- return PointerDragging;
- }());
- // Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)
- function isPrimaryMouseButton(ev) {
- return ev.button === 0 && !ev.ctrlKey;
- }
- // Ignoring fake mouse events generated by touch
- // ----------------------------------------------------------------------------------------------------
- function startIgnoringMouse() {
- ignoreMouseDepth++;
- setTimeout(function () {
- ignoreMouseDepth--;
- }, core.config.touchMouseIgnoreWait);
- }
- // We want to attach touchmove as early as possible for Safari
- // ----------------------------------------------------------------------------------------------------
- function listenerCreated() {
- if (!(listenerCnt++)) {
- window.addEventListener('touchmove', onWindowTouchMove, { passive: false });
- }
- }
- function listenerDestroyed() {
- if (!(--listenerCnt)) {
- window.removeEventListener('touchmove', onWindowTouchMove, { passive: false });
- }
- }
- function onWindowTouchMove(ev) {
- if (isWindowTouchMoveCancelled) {
- ev.preventDefault();
- }
- }
-
- /*
- An effect in which an element follows the movement of a pointer across the screen.
- The moving element is a clone of some other element.
- Must call start + handleMove + stop.
- */
- var ElementMirror = /** @class */ (function () {
- function ElementMirror() {
- this.isVisible = false; // must be explicitly enabled
- this.sourceEl = null;
- this.mirrorEl = null;
- this.sourceElRect = null; // screen coords relative to viewport
- // options that can be set directly by caller
- this.parentNode = document.body;
- this.zIndex = 9999;
- this.revertDuration = 0;
- }
- ElementMirror.prototype.start = function (sourceEl, pageX, pageY) {
- this.sourceEl = sourceEl;
- this.sourceElRect = this.sourceEl.getBoundingClientRect();
- this.origScreenX = pageX - window.pageXOffset;
- this.origScreenY = pageY - window.pageYOffset;
- this.deltaX = 0;
- this.deltaY = 0;
- this.updateElPosition();
- };
- ElementMirror.prototype.handleMove = function (pageX, pageY) {
- this.deltaX = (pageX - window.pageXOffset) - this.origScreenX;
- this.deltaY = (pageY - window.pageYOffset) - this.origScreenY;
- this.updateElPosition();
- };
- // can be called before start
- ElementMirror.prototype.setIsVisible = function (bool) {
- if (bool) {
- if (!this.isVisible) {
- if (this.mirrorEl) {
- this.mirrorEl.style.display = '';
- }
- this.isVisible = bool; // needs to happen before updateElPosition
- this.updateElPosition(); // because was not updating the position while invisible
- }
- }
- else {
- if (this.isVisible) {
- if (this.mirrorEl) {
- this.mirrorEl.style.display = 'none';
- }
- this.isVisible = bool;
- }
- }
- };
- // always async
- ElementMirror.prototype.stop = function (needsRevertAnimation, callback) {
- var _this = this;
- var done = function () {
- _this.cleanup();
- callback();
- };
- if (needsRevertAnimation &&
- this.mirrorEl &&
- this.isVisible &&
- this.revertDuration && // if 0, transition won't work
- (this.deltaX || this.deltaY) // if same coords, transition won't work
- ) {
- this.doRevertAnimation(done, this.revertDuration);
- }
- else {
- setTimeout(done, 0);
- }
- };
- ElementMirror.prototype.doRevertAnimation = function (callback, revertDuration) {
- var mirrorEl = this.mirrorEl;
- var finalSourceElRect = this.sourceEl.getBoundingClientRect(); // because autoscrolling might have happened
- mirrorEl.style.transition =
- 'top ' + revertDuration + 'ms,' +
- 'left ' + revertDuration + 'ms';
- core.applyStyle(mirrorEl, {
- left: finalSourceElRect.left,
- top: finalSourceElRect.top
- });
- core.whenTransitionDone(mirrorEl, function () {
- mirrorEl.style.transition = '';
- callback();
- });
- };
- ElementMirror.prototype.cleanup = function () {
- if (this.mirrorEl) {
- core.removeElement(this.mirrorEl);
- this.mirrorEl = null;
- }
- this.sourceEl = null;
- };
- ElementMirror.prototype.updateElPosition = function () {
- if (this.sourceEl && this.isVisible) {
- core.applyStyle(this.getMirrorEl(), {
- left: this.sourceElRect.left + this.deltaX,
- top: this.sourceElRect.top + this.deltaY
- });
- }
- };
- ElementMirror.prototype.getMirrorEl = function () {
- var sourceElRect = this.sourceElRect;
- var mirrorEl = this.mirrorEl;
- if (!mirrorEl) {
- mirrorEl = this.mirrorEl = this.sourceEl.cloneNode(true); // cloneChildren=true
- // we don't want long taps or any mouse interaction causing selection/menus.
- // would use preventSelection(), but that prevents selectstart, causing problems.
- mirrorEl.classList.add('fc-unselectable');
- mirrorEl.classList.add('fc-dragging');
- core.applyStyle(mirrorEl, {
- position: 'fixed',
- zIndex: this.zIndex,
- visibility: '',
- boxSizing: 'border-box',
- width: sourceElRect.right - sourceElRect.left,
- height: sourceElRect.bottom - sourceElRect.top,
- right: 'auto',
- bottom: 'auto',
- margin: 0
- });
- this.parentNode.appendChild(mirrorEl);
- }
- return mirrorEl;
- };
- return ElementMirror;
- }());
-
- /*
- Is a cache for a given element's scroll information (all the info that ScrollController stores)
- in addition the "client rectangle" of the element.. the area within the scrollbars.
-
- The cache can be in one of two modes:
- - doesListening:false - ignores when the container is scrolled by someone else
- - doesListening:true - watch for scrolling and update the cache
- */
- var ScrollGeomCache = /** @class */ (function (_super) {
- __extends(ScrollGeomCache, _super);
- function ScrollGeomCache(scrollController, doesListening) {
- var _this = _super.call(this) || this;
- _this.handleScroll = function () {
- _this.scrollTop = _this.scrollController.getScrollTop();
- _this.scrollLeft = _this.scrollController.getScrollLeft();
- _this.handleScrollChange();
- };
- _this.scrollController = scrollController;
- _this.doesListening = doesListening;
- _this.scrollTop = _this.origScrollTop = scrollController.getScrollTop();
- _this.scrollLeft = _this.origScrollLeft = scrollController.getScrollLeft();
- _this.scrollWidth = scrollController.getScrollWidth();
- _this.scrollHeight = scrollController.getScrollHeight();
- _this.clientWidth = scrollController.getClientWidth();
- _this.clientHeight = scrollController.getClientHeight();
- _this.clientRect = _this.computeClientRect(); // do last in case it needs cached values
- if (_this.doesListening) {
- _this.getEventTarget().addEventListener('scroll', _this.handleScroll);
- }
- return _this;
- }
- ScrollGeomCache.prototype.destroy = function () {
- if (this.doesListening) {
- this.getEventTarget().removeEventListener('scroll', this.handleScroll);
- }
- };
- ScrollGeomCache.prototype.getScrollTop = function () {
- return this.scrollTop;
- };
- ScrollGeomCache.prototype.getScrollLeft = function () {
- return this.scrollLeft;
- };
- ScrollGeomCache.prototype.setScrollTop = function (top) {
- this.scrollController.setScrollTop(top);
- if (!this.doesListening) {
- // we are not relying on the element to normalize out-of-bounds scroll values
- // so we need to sanitize ourselves
- this.scrollTop = Math.max(Math.min(top, this.getMaxScrollTop()), 0);
- this.handleScrollChange();
- }
- };
- ScrollGeomCache.prototype.setScrollLeft = function (top) {
- this.scrollController.setScrollLeft(top);
- if (!this.doesListening) {
- // we are not relying on the element to normalize out-of-bounds scroll values
- // so we need to sanitize ourselves
- this.scrollLeft = Math.max(Math.min(top, this.getMaxScrollLeft()), 0);
- this.handleScrollChange();
- }
- };
- ScrollGeomCache.prototype.getClientWidth = function () {
- return this.clientWidth;
- };
- ScrollGeomCache.prototype.getClientHeight = function () {
- return this.clientHeight;
- };
- ScrollGeomCache.prototype.getScrollWidth = function () {
- return this.scrollWidth;
- };
- ScrollGeomCache.prototype.getScrollHeight = function () {
- return this.scrollHeight;
- };
- ScrollGeomCache.prototype.handleScrollChange = function () {
- };
- return ScrollGeomCache;
- }(core.ScrollController));
- var ElementScrollGeomCache = /** @class */ (function (_super) {
- __extends(ElementScrollGeomCache, _super);
- function ElementScrollGeomCache(el, doesListening) {
- return _super.call(this, new core.ElementScrollController(el), doesListening) || this;
- }
- ElementScrollGeomCache.prototype.getEventTarget = function () {
- return this.scrollController.el;
- };
- ElementScrollGeomCache.prototype.computeClientRect = function () {
- return core.computeInnerRect(this.scrollController.el);
- };
- return ElementScrollGeomCache;
- }(ScrollGeomCache));
- var WindowScrollGeomCache = /** @class */ (function (_super) {
- __extends(WindowScrollGeomCache, _super);
- function WindowScrollGeomCache(doesListening) {
- return _super.call(this, new core.WindowScrollController(), doesListening) || this;
- }
- WindowScrollGeomCache.prototype.getEventTarget = function () {
- return window;
- };
- WindowScrollGeomCache.prototype.computeClientRect = function () {
- return {
- left: this.scrollLeft,
- right: this.scrollLeft + this.clientWidth,
- top: this.scrollTop,
- bottom: this.scrollTop + this.clientHeight
- };
- };
- // the window is the only scroll object that changes it's rectangle relative
- // to the document's topleft as it scrolls
- WindowScrollGeomCache.prototype.handleScrollChange = function () {
- this.clientRect = this.computeClientRect();
- };
- return WindowScrollGeomCache;
- }(ScrollGeomCache));
-
- // If available we are using native "performance" API instead of "Date"
- // Read more about it on MDN:
- // https://developer.mozilla.org/en-US/docs/Web/API/Performance
- var getTime = typeof performance === 'function' ? performance.now : Date.now;
- /*
- For a pointer interaction, automatically scrolls certain scroll containers when the pointer
- approaches the edge.
-
- The caller must call start + handleMove + stop.
- */
- var AutoScroller = /** @class */ (function () {
- function AutoScroller() {
- var _this = this;
- // options that can be set by caller
- this.isEnabled = true;
- this.scrollQuery = [window, '.fc-scroller'];
- this.edgeThreshold = 50; // pixels
- this.maxVelocity = 300; // pixels per second
- // internal state
- this.pointerScreenX = null;
- this.pointerScreenY = null;
- this.isAnimating = false;
- this.scrollCaches = null;
- // protect against the initial pointerdown being too close to an edge and starting the scroll
- this.everMovedUp = false;
- this.everMovedDown = false;
- this.everMovedLeft = false;
- this.everMovedRight = false;
- this.animate = function () {
- if (_this.isAnimating) { // wasn't cancelled between animation calls
- var edge = _this.computeBestEdge(_this.pointerScreenX + window.pageXOffset, _this.pointerScreenY + window.pageYOffset);
- if (edge) {
- var now = getTime();
- _this.handleSide(edge, (now - _this.msSinceRequest) / 1000);
- _this.requestAnimation(now);
- }
- else {
- _this.isAnimating = false; // will stop animation
- }
- }
- };
- }
- AutoScroller.prototype.start = function (pageX, pageY) {
- if (this.isEnabled) {
- this.scrollCaches = this.buildCaches();
- this.pointerScreenX = null;
- this.pointerScreenY = null;
- this.everMovedUp = false;
- this.everMovedDown = false;
- this.everMovedLeft = false;
- this.everMovedRight = false;
- this.handleMove(pageX, pageY);
- }
- };
- AutoScroller.prototype.handleMove = function (pageX, pageY) {
- if (this.isEnabled) {
- var pointerScreenX = pageX - window.pageXOffset;
- var pointerScreenY = pageY - window.pageYOffset;
- var yDelta = this.pointerScreenY === null ? 0 : pointerScreenY - this.pointerScreenY;
- var xDelta = this.pointerScreenX === null ? 0 : pointerScreenX - this.pointerScreenX;
- if (yDelta < 0) {
- this.everMovedUp = true;
- }
- else if (yDelta > 0) {
- this.everMovedDown = true;
- }
- if (xDelta < 0) {
- this.everMovedLeft = true;
- }
- else if (xDelta > 0) {
- this.everMovedRight = true;
- }
- this.pointerScreenX = pointerScreenX;
- this.pointerScreenY = pointerScreenY;
- if (!this.isAnimating) {
- this.isAnimating = true;
- this.requestAnimation(getTime());
- }
- }
- };
- AutoScroller.prototype.stop = function () {
- if (this.isEnabled) {
- this.isAnimating = false; // will stop animation
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- scrollCache.destroy();
- }
- this.scrollCaches = null;
- }
- };
- AutoScroller.prototype.requestAnimation = function (now) {
- this.msSinceRequest = now;
- requestAnimationFrame(this.animate);
- };
- AutoScroller.prototype.handleSide = function (edge, seconds) {
- var scrollCache = edge.scrollCache;
- var edgeThreshold = this.edgeThreshold;
- var invDistance = edgeThreshold - edge.distance;
- var velocity = // the closer to the edge, the faster we scroll
- (invDistance * invDistance) / (edgeThreshold * edgeThreshold) * // quadratic
- this.maxVelocity * seconds;
- var sign = 1;
- switch (edge.name) {
- case 'left':
- sign = -1;
- // falls through
- case 'right':
- scrollCache.setScrollLeft(scrollCache.getScrollLeft() + velocity * sign);
- break;
- case 'top':
- sign = -1;
- // falls through
- case 'bottom':
- scrollCache.setScrollTop(scrollCache.getScrollTop() + velocity * sign);
- break;
- }
- };
- // left/top are relative to document topleft
- AutoScroller.prototype.computeBestEdge = function (left, top) {
- var edgeThreshold = this.edgeThreshold;
- var bestSide = null;
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- var rect = scrollCache.clientRect;
- var leftDist = left - rect.left;
- var rightDist = rect.right - left;
- var topDist = top - rect.top;
- var bottomDist = rect.bottom - top;
- // completely within the rect?
- if (leftDist >= 0 && rightDist >= 0 && topDist >= 0 && bottomDist >= 0) {
- if (topDist <= edgeThreshold && this.everMovedUp && scrollCache.canScrollUp() &&
- (!bestSide || bestSide.distance > topDist)) {
- bestSide = { scrollCache: scrollCache, name: 'top', distance: topDist };
- }
- if (bottomDist <= edgeThreshold && this.everMovedDown && scrollCache.canScrollDown() &&
- (!bestSide || bestSide.distance > bottomDist)) {
- bestSide = { scrollCache: scrollCache, name: 'bottom', distance: bottomDist };
- }
- if (leftDist <= edgeThreshold && this.everMovedLeft && scrollCache.canScrollLeft() &&
- (!bestSide || bestSide.distance > leftDist)) {
- bestSide = { scrollCache: scrollCache, name: 'left', distance: leftDist };
- }
- if (rightDist <= edgeThreshold && this.everMovedRight && scrollCache.canScrollRight() &&
- (!bestSide || bestSide.distance > rightDist)) {
- bestSide = { scrollCache: scrollCache, name: 'right', distance: rightDist };
- }
- }
- }
- return bestSide;
- };
- AutoScroller.prototype.buildCaches = function () {
- return this.queryScrollEls().map(function (el) {
- if (el === window) {
- return new WindowScrollGeomCache(false); // false = don't listen to user-generated scrolls
- }
- else {
- return new ElementScrollGeomCache(el, false); // false = don't listen to user-generated scrolls
- }
- });
- };
- AutoScroller.prototype.queryScrollEls = function () {
- var els = [];
- for (var _i = 0, _a = this.scrollQuery; _i < _a.length; _i++) {
- var query = _a[_i];
- if (typeof query === 'object') {
- els.push(query);
- }
- else {
- els.push.apply(els, Array.prototype.slice.call(document.querySelectorAll(query)));
- }
- }
- return els;
- };
- return AutoScroller;
- }());
-
- /*
- Monitors dragging on an element. Has a number of high-level features:
- - minimum distance required before dragging
- - minimum wait time ("delay") before dragging
- - a mirror element that follows the pointer
- */
- var FeaturefulElementDragging = /** @class */ (function (_super) {
- __extends(FeaturefulElementDragging, _super);
- function FeaturefulElementDragging(containerEl) {
- var _this = _super.call(this, containerEl) || this;
- // options that can be directly set by caller
- // the caller can also set the PointerDragging's options as well
- _this.delay = null;
- _this.minDistance = 0;
- _this.touchScrollAllowed = true; // prevents drag from starting and blocks scrolling during drag
- _this.mirrorNeedsRevert = false;
- _this.isInteracting = false; // is the user validly moving the pointer? lasts until pointerup
- _this.isDragging = false; // is it INTENTFULLY dragging? lasts until after revert animation
- _this.isDelayEnded = false;
- _this.isDistanceSurpassed = false;
- _this.delayTimeoutId = null;
- _this.onPointerDown = function (ev) {
- if (!_this.isDragging) { // so new drag doesn't happen while revert animation is going
- _this.isInteracting = true;
- _this.isDelayEnded = false;
- _this.isDistanceSurpassed = false;
- core.preventSelection(document.body);
- core.preventContextMenu(document.body);
- // prevent links from being visited if there's an eventual drag.
- // also prevents selection in older browsers (maybe?).
- // not necessary for touch, besides, browser would complain about passiveness.
- if (!ev.isTouch) {
- ev.origEvent.preventDefault();
- }
- _this.emitter.trigger('pointerdown', ev);
- if (!_this.pointer.shouldIgnoreMove) {
- // actions related to initiating dragstart+dragmove+dragend...
- _this.mirror.setIsVisible(false); // reset. caller must set-visible
- _this.mirror.start(ev.subjectEl, ev.pageX, ev.pageY); // must happen on first pointer down
- _this.startDelay(ev);
- if (!_this.minDistance) {
- _this.handleDistanceSurpassed(ev);
- }
- }
- }
- };
- _this.onPointerMove = function (ev) {
- if (_this.isInteracting) { // if false, still waiting for previous drag's revert
- _this.emitter.trigger('pointermove', ev);
- if (!_this.isDistanceSurpassed) {
- var minDistance = _this.minDistance;
- var distanceSq = void 0; // current distance from the origin, squared
- var deltaX = ev.deltaX, deltaY = ev.deltaY;
- distanceSq = deltaX * deltaX + deltaY * deltaY;
- if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem
- _this.handleDistanceSurpassed(ev);
- }
- }
- if (_this.isDragging) {
- // a real pointer move? (not one simulated by scrolling)
- if (ev.origEvent.type !== 'scroll') {
- _this.mirror.handleMove(ev.pageX, ev.pageY);
- _this.autoScroller.handleMove(ev.pageX, ev.pageY);
- }
- _this.emitter.trigger('dragmove', ev);
- }
- }
- };
- _this.onPointerUp = function (ev) {
- if (_this.isInteracting) { // if false, still waiting for previous drag's revert
- _this.isInteracting = false;
- core.allowSelection(document.body);
- core.allowContextMenu(document.body);
- _this.emitter.trigger('pointerup', ev); // can potentially set mirrorNeedsRevert
- if (_this.isDragging) {
- _this.autoScroller.stop();
- _this.tryStopDrag(ev); // which will stop the mirror
- }
- if (_this.delayTimeoutId) {
- clearTimeout(_this.delayTimeoutId);
- _this.delayTimeoutId = null;
- }
- }
- };
- var pointer = _this.pointer = new PointerDragging(containerEl);
- pointer.emitter.on('pointerdown', _this.onPointerDown);
- pointer.emitter.on('pointermove', _this.onPointerMove);
- pointer.emitter.on('pointerup', _this.onPointerUp);
- _this.mirror = new ElementMirror();
- _this.autoScroller = new AutoScroller();
- return _this;
- }
- FeaturefulElementDragging.prototype.destroy = function () {
- this.pointer.destroy();
- };
- FeaturefulElementDragging.prototype.startDelay = function (ev) {
- var _this = this;
- if (typeof this.delay === 'number') {
- this.delayTimeoutId = setTimeout(function () {
- _this.delayTimeoutId = null;
- _this.handleDelayEnd(ev);
- }, this.delay); // not assignable to number!
- }
- else {
- this.handleDelayEnd(ev);
- }
- };
- FeaturefulElementDragging.prototype.handleDelayEnd = function (ev) {
- this.isDelayEnded = true;
- this.tryStartDrag(ev);
- };
- FeaturefulElementDragging.prototype.handleDistanceSurpassed = function (ev) {
- this.isDistanceSurpassed = true;
- this.tryStartDrag(ev);
- };
- FeaturefulElementDragging.prototype.tryStartDrag = function (ev) {
- if (this.isDelayEnded && this.isDistanceSurpassed) {
- if (!this.pointer.wasTouchScroll || this.touchScrollAllowed) {
- this.isDragging = true;
- this.mirrorNeedsRevert = false;
- this.autoScroller.start(ev.pageX, ev.pageY);
- this.emitter.trigger('dragstart', ev);
- if (this.touchScrollAllowed === false) {
- this.pointer.cancelTouchScroll();
- }
- }
- }
- };
- FeaturefulElementDragging.prototype.tryStopDrag = function (ev) {
- // .stop() is ALWAYS asynchronous, which we NEED because we want all pointerup events
- // that come from the document to fire beforehand. much more convenient this way.
- this.mirror.stop(this.mirrorNeedsRevert, this.stopDrag.bind(this, ev) // bound with args
- );
- };
- FeaturefulElementDragging.prototype.stopDrag = function (ev) {
- this.isDragging = false;
- this.emitter.trigger('dragend', ev);
- };
- // fill in the implementations...
- FeaturefulElementDragging.prototype.setIgnoreMove = function (bool) {
- this.pointer.shouldIgnoreMove = bool;
- };
- FeaturefulElementDragging.prototype.setMirrorIsVisible = function (bool) {
- this.mirror.setIsVisible(bool);
- };
- FeaturefulElementDragging.prototype.setMirrorNeedsRevert = function (bool) {
- this.mirrorNeedsRevert = bool;
- };
- FeaturefulElementDragging.prototype.setAutoScrollEnabled = function (bool) {
- this.autoScroller.isEnabled = bool;
- };
- return FeaturefulElementDragging;
- }(core.ElementDragging));
-
- /*
- When this class is instantiated, it records the offset of an element (relative to the document topleft),
- and continues to monitor scrolling, updating the cached coordinates if it needs to.
- Does not access the DOM after instantiation, so highly performant.
-
- Also keeps track of all scrolling/overflow:hidden containers that are parents of the given element
- and an determine if a given point is inside the combined clipping rectangle.
- */
- var OffsetTracker = /** @class */ (function () {
- function OffsetTracker(el) {
- this.origRect = core.computeRect(el);
- // will work fine for divs that have overflow:hidden
- this.scrollCaches = core.getClippingParents(el).map(function (el) {
- return new ElementScrollGeomCache(el, true); // listen=true
- });
- }
- OffsetTracker.prototype.destroy = function () {
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- scrollCache.destroy();
- }
- };
- OffsetTracker.prototype.computeLeft = function () {
- var left = this.origRect.left;
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- left += scrollCache.origScrollLeft - scrollCache.getScrollLeft();
- }
- return left;
- };
- OffsetTracker.prototype.computeTop = function () {
- var top = this.origRect.top;
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- top += scrollCache.origScrollTop - scrollCache.getScrollTop();
- }
- return top;
- };
- OffsetTracker.prototype.isWithinClipping = function (pageX, pageY) {
- var point = { left: pageX, top: pageY };
- for (var _i = 0, _a = this.scrollCaches; _i < _a.length; _i++) {
- var scrollCache = _a[_i];
- if (!isIgnoredClipping(scrollCache.getEventTarget()) &&
- !core.pointInsideRect(point, scrollCache.clientRect)) {
- return false;
- }
- }
- return true;
- };
- return OffsetTracker;
- }());
- // certain clipping containers should never constrain interactions, like <html> and <body>
- // https://github.com/fullcalendar/fullcalendar/issues/3615
- function isIgnoredClipping(node) {
- var tagName = node.tagName;
- return tagName === 'HTML' || tagName === 'BODY';
- }
-
- /*
- Tracks movement over multiple droppable areas (aka "hits")
- that exist in one or more DateComponents.
- Relies on an existing draggable.
-
- emits:
- - pointerdown
- - dragstart
- - hitchange - fires initially, even if not over a hit
- - pointerup
- - (hitchange - again, to null, if ended over a hit)
- - dragend
- */
- var HitDragging = /** @class */ (function () {
- function HitDragging(dragging, droppableStore) {
- var _this = this;
- // options that can be set by caller
- this.useSubjectCenter = false;
- this.requireInitial = true; // if doesn't start out on a hit, won't emit any events
- this.initialHit = null;
- this.movingHit = null;
- this.finalHit = null; // won't ever be populated if shouldIgnoreMove
- this.handlePointerDown = function (ev) {
- var dragging = _this.dragging;
- _this.initialHit = null;
- _this.movingHit = null;
- _this.finalHit = null;
- _this.prepareHits();
- _this.processFirstCoord(ev);
- if (_this.initialHit || !_this.requireInitial) {
- dragging.setIgnoreMove(false);
- _this.emitter.trigger('pointerdown', ev); // TODO: fire this before computing processFirstCoord, so listeners can cancel. this gets fired by almost every handler :(
- }
- else {
- dragging.setIgnoreMove(true);
- }
- };
- this.handleDragStart = function (ev) {
- _this.emitter.trigger('dragstart', ev);
- _this.handleMove(ev, true); // force = fire even if initially null
- };
- this.handleDragMove = function (ev) {
- _this.emitter.trigger('dragmove', ev);
- _this.handleMove(ev);
- };
- this.handlePointerUp = function (ev) {
- _this.releaseHits();
- _this.emitter.trigger('pointerup', ev);
- };
- this.handleDragEnd = function (ev) {
- if (_this.movingHit) {
- _this.emitter.trigger('hitupdate', null, true, ev);
- }
- _this.finalHit = _this.movingHit;
- _this.movingHit = null;
- _this.emitter.trigger('dragend', ev);
- };
- this.droppableStore = droppableStore;
- dragging.emitter.on('pointerdown', this.handlePointerDown);
- dragging.emitter.on('dragstart', this.handleDragStart);
- dragging.emitter.on('dragmove', this.handleDragMove);
- dragging.emitter.on('pointerup', this.handlePointerUp);
- dragging.emitter.on('dragend', this.handleDragEnd);
- this.dragging = dragging;
- this.emitter = new core.EmitterMixin();
- }
- // sets initialHit
- // sets coordAdjust
- HitDragging.prototype.processFirstCoord = function (ev) {
- var origPoint = { left: ev.pageX, top: ev.pageY };
- var adjustedPoint = origPoint;
- var subjectEl = ev.subjectEl;
- var subjectRect;
- if (subjectEl !== document) {
- subjectRect = core.computeRect(subjectEl);
- adjustedPoint = core.constrainPoint(adjustedPoint, subjectRect);
- }
- var initialHit = this.initialHit = this.queryHitForOffset(adjustedPoint.left, adjustedPoint.top);
- if (initialHit) {
- if (this.useSubjectCenter && subjectRect) {
- var slicedSubjectRect = core.intersectRects(subjectRect, initialHit.rect);
- if (slicedSubjectRect) {
- adjustedPoint = core.getRectCenter(slicedSubjectRect);
- }
- }
- this.coordAdjust = core.diffPoints(adjustedPoint, origPoint);
- }
- else {
- this.coordAdjust = { left: 0, top: 0 };
- }
- };
- HitDragging.prototype.handleMove = function (ev, forceHandle) {
- var hit = this.queryHitForOffset(ev.pageX + this.coordAdjust.left, ev.pageY + this.coordAdjust.top);
- if (forceHandle || !isHitsEqual(this.movingHit, hit)) {
- this.movingHit = hit;
- this.emitter.trigger('hitupdate', hit, false, ev);
- }
- };
- HitDragging.prototype.prepareHits = function () {
- this.offsetTrackers = core.mapHash(this.droppableStore, function (interactionSettings) {
- interactionSettings.component.buildPositionCaches();
- return new OffsetTracker(interactionSettings.el);
- });
- };
- HitDragging.prototype.releaseHits = function () {
- var offsetTrackers = this.offsetTrackers;
- for (var id in offsetTrackers) {
- offsetTrackers[id].destroy();
- }
- this.offsetTrackers = {};
- };
- HitDragging.prototype.queryHitForOffset = function (offsetLeft, offsetTop) {
- var _a = this, droppableStore = _a.droppableStore, offsetTrackers = _a.offsetTrackers;
- var bestHit = null;
- for (var id in droppableStore) {
- var component = droppableStore[id].component;
- var offsetTracker = offsetTrackers[id];
- if (offsetTracker.isWithinClipping(offsetLeft, offsetTop)) {
- var originLeft = offsetTracker.computeLeft();
- var originTop = offsetTracker.computeTop();
- var positionLeft = offsetLeft - originLeft;
- var positionTop = offsetTop - originTop;
- var origRect = offsetTracker.origRect;
- var width = origRect.right - origRect.left;
- var height = origRect.bottom - origRect.top;
- if (
- // must be within the element's bounds
- positionLeft >= 0 && positionLeft < width &&
- positionTop >= 0 && positionTop < height) {
- var hit = component.queryHit(positionLeft, positionTop, width, height);
- if (hit &&
- (
- // make sure the hit is within activeRange, meaning it's not a deal cell
- !component.props.dateProfile || // hack for DayTile
- core.rangeContainsRange(component.props.dateProfile.activeRange, hit.dateSpan.range)) &&
- (!bestHit || hit.layer > bestHit.layer)) {
- // TODO: better way to re-orient rectangle
- hit.rect.left += originLeft;
- hit.rect.right += originLeft;
- hit.rect.top += originTop;
- hit.rect.bottom += originTop;
- bestHit = hit;
- }
- }
- }
- }
- return bestHit;
- };
- return HitDragging;
- }());
- function isHitsEqual(hit0, hit1) {
- if (!hit0 && !hit1) {
- return true;
- }
- if (Boolean(hit0) !== Boolean(hit1)) {
- return false;
- }
- return core.isDateSpansEqual(hit0.dateSpan, hit1.dateSpan);
- }
-
- /*
- Monitors when the user clicks on a specific date/time of a component.
- A pointerdown+pointerup on the same "hit" constitutes a click.
- */
- var DateClicking = /** @class */ (function (_super) {
- __extends(DateClicking, _super);
- function DateClicking(settings) {
- var _this = _super.call(this, settings) || this;
- _this.handlePointerDown = function (ev) {
- var dragging = _this.dragging;
- // do this in pointerdown (not dragend) because DOM might be mutated by the time dragend is fired
- dragging.setIgnoreMove(!_this.component.isValidDateDownEl(dragging.pointer.downEl));
- };
- // won't even fire if moving was ignored
- _this.handleDragEnd = function (ev) {
- var component = _this.component;
- var _a = component.context, calendar = _a.calendar, view = _a.view;
- var pointer = _this.dragging.pointer;
- if (!pointer.wasTouchScroll) {
- var _b = _this.hitDragging, initialHit = _b.initialHit, finalHit = _b.finalHit;
- if (initialHit && finalHit && isHitsEqual(initialHit, finalHit)) {
- calendar.triggerDateClick(initialHit.dateSpan, initialHit.dayEl, view, ev.origEvent);
- }
- }
- };
- var component = settings.component;
- // we DO want to watch pointer moves because otherwise finalHit won't get populated
- _this.dragging = new FeaturefulElementDragging(component.el);
- _this.dragging.autoScroller.isEnabled = false;
- var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings));
- hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
- hitDragging.emitter.on('dragend', _this.handleDragEnd);
- return _this;
- }
- DateClicking.prototype.destroy = function () {
- this.dragging.destroy();
- };
- return DateClicking;
- }(core.Interaction));
-
- /*
- Tracks when the user selects a portion of time of a component,
- constituted by a drag over date cells, with a possible delay at the beginning of the drag.
- */
- var DateSelecting = /** @class */ (function (_super) {
- __extends(DateSelecting, _super);
- function DateSelecting(settings) {
- var _this = _super.call(this, settings) || this;
- _this.dragSelection = null;
- _this.handlePointerDown = function (ev) {
- var _a = _this, component = _a.component, dragging = _a.dragging;
- var options = component.context.options;
- var canSelect = options.selectable &&
- component.isValidDateDownEl(ev.origEvent.target);
- // don't bother to watch expensive moves if component won't do selection
- dragging.setIgnoreMove(!canSelect);
- // if touch, require user to hold down
- dragging.delay = ev.isTouch ? getComponentTouchDelay(component) : null;
- };
- _this.handleDragStart = function (ev) {
- _this.component.context.calendar.unselect(ev); // unselect previous selections
- };
- _this.handleHitUpdate = function (hit, isFinal) {
- var calendar = _this.component.context.calendar;
- var dragSelection = null;
- var isInvalid = false;
- if (hit) {
- dragSelection = joinHitsIntoSelection(_this.hitDragging.initialHit, hit, calendar.pluginSystem.hooks.dateSelectionTransformers);
- if (!dragSelection || !_this.component.isDateSelectionValid(dragSelection)) {
- isInvalid = true;
- dragSelection = null;
- }
- }
- if (dragSelection) {
- calendar.dispatch({ type: 'SELECT_DATES', selection: dragSelection });
- }
- else if (!isFinal) { // only unselect if moved away while dragging
- calendar.dispatch({ type: 'UNSELECT_DATES' });
- }
- if (!isInvalid) {
- core.enableCursor();
- }
- else {
- core.disableCursor();
- }
- if (!isFinal) {
- _this.dragSelection = dragSelection; // only clear if moved away from all hits while dragging
- }
- };
- _this.handlePointerUp = function (pev) {
- if (_this.dragSelection) {
- // selection is already rendered, so just need to report selection
- _this.component.context.calendar.triggerDateSelect(_this.dragSelection, pev);
- _this.dragSelection = null;
- }
- };
- var component = settings.component;
- var options = component.context.options;
- var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
- dragging.touchScrollAllowed = false;
- dragging.minDistance = options.selectMinDistance || 0;
- dragging.autoScroller.isEnabled = options.dragScroll;
- var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings));
- hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
- hitDragging.emitter.on('dragstart', _this.handleDragStart);
- hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
- hitDragging.emitter.on('pointerup', _this.handlePointerUp);
- return _this;
- }
- DateSelecting.prototype.destroy = function () {
- this.dragging.destroy();
- };
- return DateSelecting;
- }(core.Interaction));
- function getComponentTouchDelay(component) {
- var options = component.context.options;
- var delay = options.selectLongPressDelay;
- if (delay == null) {
- delay = options.longPressDelay;
- }
- return delay;
- }
- function joinHitsIntoSelection(hit0, hit1, dateSelectionTransformers) {
- var dateSpan0 = hit0.dateSpan;
- var dateSpan1 = hit1.dateSpan;
- var ms = [
- dateSpan0.range.start,
- dateSpan0.range.end,
- dateSpan1.range.start,
- dateSpan1.range.end
- ];
- ms.sort(core.compareNumbers);
- var props = {};
- for (var _i = 0, dateSelectionTransformers_1 = dateSelectionTransformers; _i < dateSelectionTransformers_1.length; _i++) {
- var transformer = dateSelectionTransformers_1[_i];
- var res = transformer(hit0, hit1);
- if (res === false) {
- return null;
- }
- else if (res) {
- __assign(props, res);
- }
- }
- props.range = { start: ms[0], end: ms[3] };
- props.allDay = dateSpan0.allDay;
- return props;
- }
-
- var EventDragging = /** @class */ (function (_super) {
- __extends(EventDragging, _super);
- function EventDragging(settings) {
- var _this = _super.call(this, settings) || this;
- // internal state
- _this.subjectSeg = null; // the seg being selected/dragged
- _this.isDragging = false;
- _this.eventRange = null;
- _this.relevantEvents = null; // the events being dragged
- _this.receivingCalendar = null;
- _this.validMutation = null;
- _this.mutatedRelevantEvents = null;
- _this.handlePointerDown = function (ev) {
- var origTarget = ev.origEvent.target;
- var _a = _this, component = _a.component, dragging = _a.dragging;
- var mirror = dragging.mirror;
- var options = component.context.options;
- var initialCalendar = component.context.calendar;
- var subjectSeg = _this.subjectSeg = core.getElSeg(ev.subjectEl);
- var eventRange = _this.eventRange = subjectSeg.eventRange;
- var eventInstanceId = eventRange.instance.instanceId;
- _this.relevantEvents = core.getRelevantEvents(initialCalendar.state.eventStore, eventInstanceId);
- dragging.minDistance = ev.isTouch ? 0 : options.eventDragMinDistance;
- dragging.delay =
- // only do a touch delay if touch and this event hasn't been selected yet
- (ev.isTouch && eventInstanceId !== component.props.eventSelection) ?
- getComponentTouchDelay$1(component) :
- null;
- mirror.parentNode = initialCalendar.el;
- mirror.revertDuration = options.dragRevertDuration;
- var isValid = component.isValidSegDownEl(origTarget) &&
- !core.elementClosest(origTarget, '.fc-resizer'); // NOT on a resizer
- dragging.setIgnoreMove(!isValid);
- // disable dragging for elements that are resizable (ie, selectable)
- // but are not draggable
- _this.isDragging = isValid &&
- ev.subjectEl.classList.contains('fc-draggable');
- };
- _this.handleDragStart = function (ev) {
- var context = _this.component.context;
- var initialCalendar = context.calendar;
- var eventRange = _this.eventRange;
- var eventInstanceId = eventRange.instance.instanceId;
- if (ev.isTouch) {
- // need to select a different event?
- if (eventInstanceId !== _this.component.props.eventSelection) {
- initialCalendar.dispatch({ type: 'SELECT_EVENT', eventInstanceId: eventInstanceId });
- }
- }
- else {
- // if now using mouse, but was previous touch interaction, clear selected event
- initialCalendar.dispatch({ type: 'UNSELECT_EVENT' });
- }
- if (_this.isDragging) {
- initialCalendar.unselect(ev); // unselect *date* selection
- initialCalendar.publiclyTrigger('eventDragStart', [
- {
- el: _this.subjectSeg.el,
- event: new core.EventApi(initialCalendar, eventRange.def, eventRange.instance),
- jsEvent: ev.origEvent,
- view: context.view
- }
- ]);
- }
- };
- _this.handleHitUpdate = function (hit, isFinal) {
- if (!_this.isDragging) {
- return;
- }
- var relevantEvents = _this.relevantEvents;
- var initialHit = _this.hitDragging.initialHit;
- var initialCalendar = _this.component.context.calendar;
- // states based on new hit
- var receivingCalendar = null;
- var mutation = null;
- var mutatedRelevantEvents = null;
- var isInvalid = false;
- var interaction = {
- affectedEvents: relevantEvents,
- mutatedEvents: core.createEmptyEventStore(),
- isEvent: true,
- origSeg: _this.subjectSeg
- };
- if (hit) {
- var receivingComponent = hit.component;
- receivingCalendar = receivingComponent.context.calendar;
- var receivingOptions = receivingComponent.context.options;
- if (initialCalendar === receivingCalendar ||
- receivingOptions.editable && receivingOptions.droppable) {
- mutation = computeEventMutation(initialHit, hit, receivingCalendar.pluginSystem.hooks.eventDragMutationMassagers);
- if (mutation) {
- mutatedRelevantEvents = core.applyMutationToEventStore(relevantEvents, receivingCalendar.eventUiBases, mutation, receivingCalendar);
- interaction.mutatedEvents = mutatedRelevantEvents;
- if (!receivingComponent.isInteractionValid(interaction)) {
- isInvalid = true;
- mutation = null;
- mutatedRelevantEvents = null;
- interaction.mutatedEvents = core.createEmptyEventStore();
- }
- }
- }
- else {
- receivingCalendar = null;
- }
- }
- _this.displayDrag(receivingCalendar, interaction);
- if (!isInvalid) {
- core.enableCursor();
- }
- else {
- core.disableCursor();
- }
- if (!isFinal) {
- if (initialCalendar === receivingCalendar && // TODO: write test for this
- isHitsEqual(initialHit, hit)) {
- mutation = null;
- }
- _this.dragging.setMirrorNeedsRevert(!mutation);
- // render the mirror if no already-rendered mirror
- // TODO: wish we could somehow wait for dispatch to guarantee render
- _this.dragging.setMirrorIsVisible(!hit || !document.querySelector('.fc-mirror'));
- // assign states based on new hit
- _this.receivingCalendar = receivingCalendar;
- _this.validMutation = mutation;
- _this.mutatedRelevantEvents = mutatedRelevantEvents;
- }
- };
- _this.handlePointerUp = function () {
- if (!_this.isDragging) {
- _this.cleanup(); // because handleDragEnd won't fire
- }
- };
- _this.handleDragEnd = function (ev) {
- if (_this.isDragging) {
- var context = _this.component.context;
- var initialCalendar_1 = context.calendar;
- var initialView = context.view;
- var _a = _this, receivingCalendar = _a.receivingCalendar, validMutation = _a.validMutation;
- var eventDef = _this.eventRange.def;
- var eventInstance = _this.eventRange.instance;
- var eventApi = new core.EventApi(initialCalendar_1, eventDef, eventInstance);
- var relevantEvents_1 = _this.relevantEvents;
- var mutatedRelevantEvents = _this.mutatedRelevantEvents;
- var finalHit = _this.hitDragging.finalHit;
- _this.clearDrag(); // must happen after revert animation
- initialCalendar_1.publiclyTrigger('eventDragStop', [
- {
- el: _this.subjectSeg.el,
- event: eventApi,
- jsEvent: ev.origEvent,
- view: initialView
- }
- ]);
- if (validMutation) {
- // dropped within same calendar
- if (receivingCalendar === initialCalendar_1) {
- initialCalendar_1.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: mutatedRelevantEvents
- });
- var transformed = {};
- for (var _i = 0, _b = initialCalendar_1.pluginSystem.hooks.eventDropTransformers; _i < _b.length; _i++) {
- var transformer = _b[_i];
- __assign(transformed, transformer(validMutation, initialCalendar_1));
- }
- var eventDropArg = __assign({}, transformed, { el: ev.subjectEl, delta: validMutation.datesDelta, oldEvent: eventApi, event: new core.EventApi(// the data AFTER the mutation
- initialCalendar_1, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null), revert: function () {
- initialCalendar_1.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: relevantEvents_1
- });
- }, jsEvent: ev.origEvent, view: initialView });
- initialCalendar_1.publiclyTrigger('eventDrop', [eventDropArg]);
- // dropped in different calendar
- }
- else if (receivingCalendar) {
- initialCalendar_1.publiclyTrigger('eventLeave', [
- {
- draggedEl: ev.subjectEl,
- event: eventApi,
- view: initialView
- }
- ]);
- initialCalendar_1.dispatch({
- type: 'REMOVE_EVENT_INSTANCES',
- instances: _this.mutatedRelevantEvents.instances
- });
- receivingCalendar.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: _this.mutatedRelevantEvents
- });
- if (ev.isTouch) {
- receivingCalendar.dispatch({
- type: 'SELECT_EVENT',
- eventInstanceId: eventInstance.instanceId
- });
- }
- var dropArg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: ev.subjectEl, jsEvent: ev.origEvent, view: finalHit.component // should this be finalHit.component.view? See #4644
- });
- receivingCalendar.publiclyTrigger('drop', [dropArg]);
- receivingCalendar.publiclyTrigger('eventReceive', [
- {
- draggedEl: ev.subjectEl,
- event: new core.EventApi(// the data AFTER the mutation
- receivingCalendar, mutatedRelevantEvents.defs[eventDef.defId], mutatedRelevantEvents.instances[eventInstance.instanceId]),
- view: finalHit.component // should this be finalHit.component.view? See #4644
- }
- ]);
- }
- }
- else {
- initialCalendar_1.publiclyTrigger('_noEventDrop');
- }
- }
- _this.cleanup();
- };
- var component = _this.component;
- var options = component.context.options;
- var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
- dragging.pointer.selector = EventDragging.SELECTOR;
- dragging.touchScrollAllowed = false;
- dragging.autoScroller.isEnabled = options.dragScroll;
- var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsStore);
- hitDragging.useSubjectCenter = settings.useEventCenter;
- hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
- hitDragging.emitter.on('dragstart', _this.handleDragStart);
- hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
- hitDragging.emitter.on('pointerup', _this.handlePointerUp);
- hitDragging.emitter.on('dragend', _this.handleDragEnd);
- return _this;
- }
- EventDragging.prototype.destroy = function () {
- this.dragging.destroy();
- };
- // render a drag state on the next receivingCalendar
- EventDragging.prototype.displayDrag = function (nextCalendar, state) {
- var initialCalendar = this.component.context.calendar;
- var prevCalendar = this.receivingCalendar;
- // does the previous calendar need to be cleared?
- if (prevCalendar && prevCalendar !== nextCalendar) {
- // does the initial calendar need to be cleared?
- // if so, don't clear all the way. we still need to to hide the affectedEvents
- if (prevCalendar === initialCalendar) {
- prevCalendar.dispatch({
- type: 'SET_EVENT_DRAG',
- state: {
- affectedEvents: state.affectedEvents,
- mutatedEvents: core.createEmptyEventStore(),
- isEvent: true,
- origSeg: state.origSeg
- }
- });
- // completely clear the old calendar if it wasn't the initial
- }
- else {
- prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- }
- if (nextCalendar) {
- nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });
- }
- };
- EventDragging.prototype.clearDrag = function () {
- var initialCalendar = this.component.context.calendar;
- var receivingCalendar = this.receivingCalendar;
- if (receivingCalendar) {
- receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- // the initial calendar might have an dummy drag state from displayDrag
- if (initialCalendar !== receivingCalendar) {
- initialCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- };
- EventDragging.prototype.cleanup = function () {
- this.subjectSeg = null;
- this.isDragging = false;
- this.eventRange = null;
- this.relevantEvents = null;
- this.receivingCalendar = null;
- this.validMutation = null;
- this.mutatedRelevantEvents = null;
- };
- EventDragging.SELECTOR = '.fc-draggable, .fc-resizable'; // TODO: test this in IE11
- return EventDragging;
- }(core.Interaction));
- function computeEventMutation(hit0, hit1, massagers) {
- var dateSpan0 = hit0.dateSpan;
- var dateSpan1 = hit1.dateSpan;
- var date0 = dateSpan0.range.start;
- var date1 = dateSpan1.range.start;
- var standardProps = {};
- if (dateSpan0.allDay !== dateSpan1.allDay) {
- standardProps.allDay = dateSpan1.allDay;
- standardProps.hasEnd = hit1.component.context.options.allDayMaintainDuration;
- if (dateSpan1.allDay) {
- // means date1 is already start-of-day,
- // but date0 needs to be converted
- date0 = core.startOfDay(date0);
- }
- }
- var delta = core.diffDates(date0, date1, hit0.component.context.dateEnv, hit0.component === hit1.component ?
- hit0.component.largeUnit :
- null);
- if (delta.milliseconds) { // has hours/minutes/seconds
- standardProps.allDay = false;
- }
- var mutation = {
- datesDelta: delta,
- standardProps: standardProps
- };
- for (var _i = 0, massagers_1 = massagers; _i < massagers_1.length; _i++) {
- var massager = massagers_1[_i];
- massager(mutation, hit0, hit1);
- }
- return mutation;
- }
- function getComponentTouchDelay$1(component) {
- var options = component.context.options;
- var delay = options.eventLongPressDelay;
- if (delay == null) {
- delay = options.longPressDelay;
- }
- return delay;
- }
-
- var EventDragging$1 = /** @class */ (function (_super) {
- __extends(EventDragging, _super);
- function EventDragging(settings) {
- var _this = _super.call(this, settings) || this;
- // internal state
- _this.draggingSeg = null; // TODO: rename to resizingSeg? subjectSeg?
- _this.eventRange = null;
- _this.relevantEvents = null;
- _this.validMutation = null;
- _this.mutatedRelevantEvents = null;
- _this.handlePointerDown = function (ev) {
- var component = _this.component;
- var seg = _this.querySeg(ev);
- var eventRange = _this.eventRange = seg.eventRange;
- _this.dragging.minDistance = component.context.options.eventDragMinDistance;
- // if touch, need to be working with a selected event
- _this.dragging.setIgnoreMove(!_this.component.isValidSegDownEl(ev.origEvent.target) ||
- (ev.isTouch && _this.component.props.eventSelection !== eventRange.instance.instanceId));
- };
- _this.handleDragStart = function (ev) {
- var _a = _this.component.context, calendar = _a.calendar, view = _a.view;
- var eventRange = _this.eventRange;
- _this.relevantEvents = core.getRelevantEvents(calendar.state.eventStore, _this.eventRange.instance.instanceId);
- _this.draggingSeg = _this.querySeg(ev);
- calendar.unselect();
- calendar.publiclyTrigger('eventResizeStart', [
- {
- el: _this.draggingSeg.el,
- event: new core.EventApi(calendar, eventRange.def, eventRange.instance),
- jsEvent: ev.origEvent,
- view: view
- }
- ]);
- };
- _this.handleHitUpdate = function (hit, isFinal, ev) {
- var calendar = _this.component.context.calendar;
- var relevantEvents = _this.relevantEvents;
- var initialHit = _this.hitDragging.initialHit;
- var eventInstance = _this.eventRange.instance;
- var mutation = null;
- var mutatedRelevantEvents = null;
- var isInvalid = false;
- var interaction = {
- affectedEvents: relevantEvents,
- mutatedEvents: core.createEmptyEventStore(),
- isEvent: true,
- origSeg: _this.draggingSeg
- };
- if (hit) {
- mutation = computeMutation(initialHit, hit, ev.subjectEl.classList.contains('fc-start-resizer'), eventInstance.range, calendar.pluginSystem.hooks.eventResizeJoinTransforms);
- }
- if (mutation) {
- mutatedRelevantEvents = core.applyMutationToEventStore(relevantEvents, calendar.eventUiBases, mutation, calendar);
- interaction.mutatedEvents = mutatedRelevantEvents;
- if (!_this.component.isInteractionValid(interaction)) {
- isInvalid = true;
- mutation = null;
- mutatedRelevantEvents = null;
- interaction.mutatedEvents = null;
- }
- }
- if (mutatedRelevantEvents) {
- calendar.dispatch({
- type: 'SET_EVENT_RESIZE',
- state: interaction
- });
- }
- else {
- calendar.dispatch({ type: 'UNSET_EVENT_RESIZE' });
- }
- if (!isInvalid) {
- core.enableCursor();
- }
- else {
- core.disableCursor();
- }
- if (!isFinal) {
- if (mutation && isHitsEqual(initialHit, hit)) {
- mutation = null;
- }
- _this.validMutation = mutation;
- _this.mutatedRelevantEvents = mutatedRelevantEvents;
- }
- };
- _this.handleDragEnd = function (ev) {
- var _a = _this.component.context, calendar = _a.calendar, view = _a.view;
- var eventDef = _this.eventRange.def;
- var eventInstance = _this.eventRange.instance;
- var eventApi = new core.EventApi(calendar, eventDef, eventInstance);
- var relevantEvents = _this.relevantEvents;
- var mutatedRelevantEvents = _this.mutatedRelevantEvents;
- calendar.publiclyTrigger('eventResizeStop', [
- {
- el: _this.draggingSeg.el,
- event: eventApi,
- jsEvent: ev.origEvent,
- view: view
- }
- ]);
- if (_this.validMutation) {
- calendar.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: mutatedRelevantEvents
- });
- calendar.publiclyTrigger('eventResize', [
- {
- el: _this.draggingSeg.el,
- startDelta: _this.validMutation.startDelta || core.createDuration(0),
- endDelta: _this.validMutation.endDelta || core.createDuration(0),
- prevEvent: eventApi,
- event: new core.EventApi(// the data AFTER the mutation
- calendar, mutatedRelevantEvents.defs[eventDef.defId], eventInstance ? mutatedRelevantEvents.instances[eventInstance.instanceId] : null),
- revert: function () {
- calendar.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: relevantEvents
- });
- },
- jsEvent: ev.origEvent,
- view: view
- }
- ]);
- }
- else {
- calendar.publiclyTrigger('_noEventResize');
- }
- // reset all internal state
- _this.draggingSeg = null;
- _this.relevantEvents = null;
- _this.validMutation = null;
- // okay to keep eventInstance around. useful to set it in handlePointerDown
- };
- var component = settings.component;
- var dragging = _this.dragging = new FeaturefulElementDragging(component.el);
- dragging.pointer.selector = '.fc-resizer';
- dragging.touchScrollAllowed = false;
- dragging.autoScroller.isEnabled = component.context.options.dragScroll;
- var hitDragging = _this.hitDragging = new HitDragging(_this.dragging, core.interactionSettingsToStore(settings));
- hitDragging.emitter.on('pointerdown', _this.handlePointerDown);
- hitDragging.emitter.on('dragstart', _this.handleDragStart);
- hitDragging.emitter.on('hitupdate', _this.handleHitUpdate);
- hitDragging.emitter.on('dragend', _this.handleDragEnd);
- return _this;
- }
- EventDragging.prototype.destroy = function () {
- this.dragging.destroy();
- };
- EventDragging.prototype.querySeg = function (ev) {
- return core.getElSeg(core.elementClosest(ev.subjectEl, this.component.fgSegSelector));
- };
- return EventDragging;
- }(core.Interaction));
- function computeMutation(hit0, hit1, isFromStart, instanceRange, transforms) {
- var dateEnv = hit0.component.context.dateEnv;
- var date0 = hit0.dateSpan.range.start;
- var date1 = hit1.dateSpan.range.start;
- var delta = core.diffDates(date0, date1, dateEnv, hit0.component.largeUnit);
- var props = {};
- for (var _i = 0, transforms_1 = transforms; _i < transforms_1.length; _i++) {
- var transform = transforms_1[_i];
- var res = transform(hit0, hit1);
- if (res === false) {
- return null;
- }
- else if (res) {
- __assign(props, res);
- }
- }
- if (isFromStart) {
- if (dateEnv.add(instanceRange.start, delta) < instanceRange.end) {
- props.startDelta = delta;
- return props;
- }
- }
- else {
- if (dateEnv.add(instanceRange.end, delta) > instanceRange.start) {
- props.endDelta = delta;
- return props;
- }
- }
- return null;
- }
-
- var UnselectAuto = /** @class */ (function () {
- function UnselectAuto(calendar) {
- var _this = this;
- this.isRecentPointerDateSelect = false; // wish we could use a selector to detect date selection, but uses hit system
- this.onSelect = function (selectInfo) {
- if (selectInfo.jsEvent) {
- _this.isRecentPointerDateSelect = true;
- }
- };
- this.onDocumentPointerUp = function (pev) {
- var _a = _this, calendar = _a.calendar, documentPointer = _a.documentPointer;
- var state = calendar.state;
- // touch-scrolling should never unfocus any type of selection
- if (!documentPointer.wasTouchScroll) {
- if (state.dateSelection && // an existing date selection?
- !_this.isRecentPointerDateSelect // a new pointer-initiated date selection since last onDocumentPointerUp?
- ) {
- var unselectAuto = calendar.viewOpt('unselectAuto');
- var unselectCancel = calendar.viewOpt('unselectCancel');
- if (unselectAuto && (!unselectAuto || !core.elementClosest(documentPointer.downEl, unselectCancel))) {
- calendar.unselect(pev);
- }
- }
- if (state.eventSelection && // an existing event selected?
- !core.elementClosest(documentPointer.downEl, EventDragging.SELECTOR) // interaction DIDN'T start on an event
- ) {
- calendar.dispatch({ type: 'UNSELECT_EVENT' });
- }
- }
- _this.isRecentPointerDateSelect = false;
- };
- this.calendar = calendar;
- var documentPointer = this.documentPointer = new PointerDragging(document);
- documentPointer.shouldIgnoreMove = true;
- documentPointer.shouldWatchScroll = false;
- documentPointer.emitter.on('pointerup', this.onDocumentPointerUp);
- /*
- TODO: better way to know about whether there was a selection with the pointer
- */
- calendar.on('select', this.onSelect);
- }
- UnselectAuto.prototype.destroy = function () {
- this.calendar.off('select', this.onSelect);
- this.documentPointer.destroy();
- };
- return UnselectAuto;
- }());
-
- /*
- Given an already instantiated draggable object for one-or-more elements,
- Interprets any dragging as an attempt to drag an events that lives outside
- of a calendar onto a calendar.
- */
- var ExternalElementDragging = /** @class */ (function () {
- function ExternalElementDragging(dragging, suppliedDragMeta) {
- var _this = this;
- this.receivingCalendar = null;
- this.droppableEvent = null; // will exist for all drags, even if create:false
- this.suppliedDragMeta = null;
- this.dragMeta = null;
- this.handleDragStart = function (ev) {
- _this.dragMeta = _this.buildDragMeta(ev.subjectEl);
- };
- this.handleHitUpdate = function (hit, isFinal, ev) {
- var dragging = _this.hitDragging.dragging;
- var receivingCalendar = null;
- var droppableEvent = null;
- var isInvalid = false;
- var interaction = {
- affectedEvents: core.createEmptyEventStore(),
- mutatedEvents: core.createEmptyEventStore(),
- isEvent: _this.dragMeta.create,
- origSeg: null
- };
- if (hit) {
- receivingCalendar = hit.component.context.calendar;
- if (_this.canDropElOnCalendar(ev.subjectEl, receivingCalendar)) {
- droppableEvent = computeEventForDateSpan(hit.dateSpan, _this.dragMeta, receivingCalendar);
- interaction.mutatedEvents = core.eventTupleToStore(droppableEvent);
- isInvalid = !core.isInteractionValid(interaction, receivingCalendar);
- if (isInvalid) {
- interaction.mutatedEvents = core.createEmptyEventStore();
- droppableEvent = null;
- }
- }
- }
- _this.displayDrag(receivingCalendar, interaction);
- // show mirror if no already-rendered mirror element OR if we are shutting down the mirror (?)
- // TODO: wish we could somehow wait for dispatch to guarantee render
- dragging.setMirrorIsVisible(isFinal || !droppableEvent || !document.querySelector('.fc-mirror'));
- if (!isInvalid) {
- core.enableCursor();
- }
- else {
- core.disableCursor();
- }
- if (!isFinal) {
- dragging.setMirrorNeedsRevert(!droppableEvent);
- _this.receivingCalendar = receivingCalendar;
- _this.droppableEvent = droppableEvent;
- }
- };
- this.handleDragEnd = function (pev) {
- var _a = _this, receivingCalendar = _a.receivingCalendar, droppableEvent = _a.droppableEvent;
- _this.clearDrag();
- if (receivingCalendar && droppableEvent) {
- var finalHit = _this.hitDragging.finalHit;
- var finalView = finalHit.component.context.view;
- var dragMeta = _this.dragMeta;
- var arg = __assign({}, receivingCalendar.buildDatePointApi(finalHit.dateSpan), { draggedEl: pev.subjectEl, jsEvent: pev.origEvent, view: finalView });
- receivingCalendar.publiclyTrigger('drop', [arg]);
- if (dragMeta.create) {
- receivingCalendar.dispatch({
- type: 'MERGE_EVENTS',
- eventStore: core.eventTupleToStore(droppableEvent)
- });
- if (pev.isTouch) {
- receivingCalendar.dispatch({
- type: 'SELECT_EVENT',
- eventInstanceId: droppableEvent.instance.instanceId
- });
- }
- // signal that an external event landed
- receivingCalendar.publiclyTrigger('eventReceive', [
- {
- draggedEl: pev.subjectEl,
- event: new core.EventApi(receivingCalendar, droppableEvent.def, droppableEvent.instance),
- view: finalView
- }
- ]);
- }
- }
- _this.receivingCalendar = null;
- _this.droppableEvent = null;
- };
- var hitDragging = this.hitDragging = new HitDragging(dragging, core.interactionSettingsStore);
- hitDragging.requireInitial = false; // will start outside of a component
- hitDragging.emitter.on('dragstart', this.handleDragStart);
- hitDragging.emitter.on('hitupdate', this.handleHitUpdate);
- hitDragging.emitter.on('dragend', this.handleDragEnd);
- this.suppliedDragMeta = suppliedDragMeta;
- }
- ExternalElementDragging.prototype.buildDragMeta = function (subjectEl) {
- if (typeof this.suppliedDragMeta === 'object') {
- return core.parseDragMeta(this.suppliedDragMeta);
- }
- else if (typeof this.suppliedDragMeta === 'function') {
- return core.parseDragMeta(this.suppliedDragMeta(subjectEl));
- }
- else {
- return getDragMetaFromEl(subjectEl);
- }
- };
- ExternalElementDragging.prototype.displayDrag = function (nextCalendar, state) {
- var prevCalendar = this.receivingCalendar;
- if (prevCalendar && prevCalendar !== nextCalendar) {
- prevCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- if (nextCalendar) {
- nextCalendar.dispatch({ type: 'SET_EVENT_DRAG', state: state });
- }
- };
- ExternalElementDragging.prototype.clearDrag = function () {
- if (this.receivingCalendar) {
- this.receivingCalendar.dispatch({ type: 'UNSET_EVENT_DRAG' });
- }
- };
- ExternalElementDragging.prototype.canDropElOnCalendar = function (el, receivingCalendar) {
- var dropAccept = receivingCalendar.opt('dropAccept');
- if (typeof dropAccept === 'function') {
- return dropAccept(el);
- }
- else if (typeof dropAccept === 'string' && dropAccept) {
- return Boolean(core.elementMatches(el, dropAccept));
- }
- return true;
- };
- return ExternalElementDragging;
- }());
- // Utils for computing event store from the DragMeta
- // ----------------------------------------------------------------------------------------------------
- function computeEventForDateSpan(dateSpan, dragMeta, calendar) {
- var defProps = __assign({}, dragMeta.leftoverProps);
- for (var _i = 0, _a = calendar.pluginSystem.hooks.externalDefTransforms; _i < _a.length; _i++) {
- var transform = _a[_i];
- __assign(defProps, transform(dateSpan, dragMeta));
- }
- var def = core.parseEventDef(defProps, dragMeta.sourceId, dateSpan.allDay, calendar.opt('forceEventDuration') || Boolean(dragMeta.duration), // hasEnd
- calendar);
- var start = dateSpan.range.start;
- // only rely on time info if drop zone is all-day,
- // otherwise, we already know the time
- if (dateSpan.allDay && dragMeta.startTime) {
- start = calendar.dateEnv.add(start, dragMeta.startTime);
- }
- var end = dragMeta.duration ?
- calendar.dateEnv.add(start, dragMeta.duration) :
- calendar.getDefaultEventEnd(dateSpan.allDay, start);
- var instance = core.createEventInstance(def.defId, { start: start, end: end });
- return { def: def, instance: instance };
- }
- // Utils for extracting data from element
- // ----------------------------------------------------------------------------------------------------
- function getDragMetaFromEl(el) {
- var str = getEmbeddedElData(el, 'event');
- var obj = str ?
- JSON.parse(str) :
- { create: false }; // if no embedded data, assume no event creation
- return core.parseDragMeta(obj);
- }
- core.config.dataAttrPrefix = '';
- function getEmbeddedElData(el, name) {
- var prefix = core.config.dataAttrPrefix;
- var prefixedName = (prefix ? prefix + '-' : '') + name;
- return el.getAttribute('data-' + prefixedName) || '';
- }
-
- /*
- Makes an element (that is *external* to any calendar) draggable.
- Can pass in data that determines how an event will be created when dropped onto a calendar.
- Leverages FullCalendar's internal drag-n-drop functionality WITHOUT a third-party drag system.
- */
- var ExternalDraggable = /** @class */ (function () {
- function ExternalDraggable(el, settings) {
- var _this = this;
- if (settings === void 0) { settings = {}; }
- this.handlePointerDown = function (ev) {
- var dragging = _this.dragging;
- var _a = _this.settings, minDistance = _a.minDistance, longPressDelay = _a.longPressDelay;
- dragging.minDistance =
- minDistance != null ?
- minDistance :
- (ev.isTouch ? 0 : core.globalDefaults.eventDragMinDistance);
- dragging.delay =
- ev.isTouch ? // TODO: eventually read eventLongPressDelay instead vvv
- (longPressDelay != null ? longPressDelay : core.globalDefaults.longPressDelay) :
- 0;
- };
- this.handleDragStart = function (ev) {
- if (ev.isTouch &&
- _this.dragging.delay &&
- ev.subjectEl.classList.contains('fc-event')) {
- _this.dragging.mirror.getMirrorEl().classList.add('fc-selected');
- }
- };
- this.settings = settings;
- var dragging = this.dragging = new FeaturefulElementDragging(el);
- dragging.touchScrollAllowed = false;
- if (settings.itemSelector != null) {
- dragging.pointer.selector = settings.itemSelector;
- }
- if (settings.appendTo != null) {
- dragging.mirror.parentNode = settings.appendTo; // TODO: write tests
- }
- dragging.emitter.on('pointerdown', this.handlePointerDown);
- dragging.emitter.on('dragstart', this.handleDragStart);
- new ExternalElementDragging(dragging, settings.eventData);
- }
- ExternalDraggable.prototype.destroy = function () {
- this.dragging.destroy();
- };
- return ExternalDraggable;
- }());
-
- /*
- Detects when a *THIRD-PARTY* drag-n-drop system interacts with elements.
- The third-party system is responsible for drawing the visuals effects of the drag.
- This class simply monitors for pointer movements and fires events.
- It also has the ability to hide the moving element (the "mirror") during the drag.
- */
- var InferredElementDragging = /** @class */ (function (_super) {
- __extends(InferredElementDragging, _super);
- function InferredElementDragging(containerEl) {
- var _this = _super.call(this, containerEl) || this;
- _this.shouldIgnoreMove = false;
- _this.mirrorSelector = '';
- _this.currentMirrorEl = null;
- _this.handlePointerDown = function (ev) {
- _this.emitter.trigger('pointerdown', ev);
- if (!_this.shouldIgnoreMove) {
- // fire dragstart right away. does not support delay or min-distance
- _this.emitter.trigger('dragstart', ev);
- }
- };
- _this.handlePointerMove = function (ev) {
- if (!_this.shouldIgnoreMove) {
- _this.emitter.trigger('dragmove', ev);
- }
- };
- _this.handlePointerUp = function (ev) {
- _this.emitter.trigger('pointerup', ev);
- if (!_this.shouldIgnoreMove) {
- // fire dragend right away. does not support a revert animation
- _this.emitter.trigger('dragend', ev);
- }
- };
- var pointer = _this.pointer = new PointerDragging(containerEl);
- pointer.emitter.on('pointerdown', _this.handlePointerDown);
- pointer.emitter.on('pointermove', _this.handlePointerMove);
- pointer.emitter.on('pointerup', _this.handlePointerUp);
- return _this;
- }
- InferredElementDragging.prototype.destroy = function () {
- this.pointer.destroy();
- };
- InferredElementDragging.prototype.setIgnoreMove = function (bool) {
- this.shouldIgnoreMove = bool;
- };
- InferredElementDragging.prototype.setMirrorIsVisible = function (bool) {
- if (bool) {
- // restore a previously hidden element.
- // use the reference in case the selector class has already been removed.
- if (this.currentMirrorEl) {
- this.currentMirrorEl.style.visibility = '';
- this.currentMirrorEl = null;
- }
- }
- else {
- var mirrorEl = this.mirrorSelector ?
- document.querySelector(this.mirrorSelector) :
- null;
- if (mirrorEl) {
- this.currentMirrorEl = mirrorEl;
- mirrorEl.style.visibility = 'hidden';
- }
- }
- };
- return InferredElementDragging;
- }(core.ElementDragging));
-
- /*
- Bridges third-party drag-n-drop systems with FullCalendar.
- Must be instantiated and destroyed by caller.
- */
- var ThirdPartyDraggable = /** @class */ (function () {
- function ThirdPartyDraggable(containerOrSettings, settings) {
- var containerEl = document;
- if (
- // wish we could just test instanceof EventTarget, but doesn't work in IE11
- containerOrSettings === document ||
- containerOrSettings instanceof Element) {
- containerEl = containerOrSettings;
- settings = settings || {};
- }
- else {
- settings = (containerOrSettings || {});
- }
- var dragging = this.dragging = new InferredElementDragging(containerEl);
- if (typeof settings.itemSelector === 'string') {
- dragging.pointer.selector = settings.itemSelector;
- }
- else if (containerEl === document) {
- dragging.pointer.selector = '[data-event]';
- }
- if (typeof settings.mirrorSelector === 'string') {
- dragging.mirrorSelector = settings.mirrorSelector;
- }
- new ExternalElementDragging(dragging, settings.eventData);
- }
- ThirdPartyDraggable.prototype.destroy = function () {
- this.dragging.destroy();
- };
- return ThirdPartyDraggable;
- }());
-
- var main = core.createPlugin({
- componentInteractions: [DateClicking, DateSelecting, EventDragging, EventDragging$1],
- calendarInteractions: [UnselectAuto],
- elementDraggingImpl: FeaturefulElementDragging
- });
-
- exports.Draggable = ExternalDraggable;
- exports.FeaturefulElementDragging = FeaturefulElementDragging;
- exports.PointerDragging = PointerDragging;
- exports.ThirdPartyDraggable = ThirdPartyDraggable;
- exports.default = main;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/interaction/main.min.js b/library/fullcalendar/packages/interaction/main.min.js
deleted file mode 100644
index 6f0cdcc63..000000000
--- a/library/fullcalendar/packages/interaction/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar Interaction Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarInteraction={},e.FullCalendar)}(this,(function(e,t){"use strict";var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function r(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var i=function(){return(i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};t.config.touchMouseIgnoreWait=500;var o=0,a=0,l=!1,s=function(){function e(e){var n=this;this.subjectEl=null,this.downEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=function(e){if(!n.shouldIgnoreMouse()&&function(e){return 0===e.button&&!e.ctrlKey}(e)&&n.tryStart(e)){var t=n.createEventFromMouse(e,!0);n.emitter.trigger("pointerdown",t),n.initScrollWatch(t),n.shouldIgnoreMove||document.addEventListener("mousemove",n.handleMouseMove),document.addEventListener("mouseup",n.handleMouseUp)}},this.handleMouseMove=function(e){var t=n.createEventFromMouse(e);n.recordCoords(t),n.emitter.trigger("pointermove",t)},this.handleMouseUp=function(e){document.removeEventListener("mousemove",n.handleMouseMove),document.removeEventListener("mouseup",n.handleMouseUp),n.emitter.trigger("pointerup",n.createEventFromMouse(e)),n.cleanup()},this.handleTouchStart=function(e){if(n.tryStart(e)){n.isTouchDragging=!0;var t=n.createEventFromTouch(e,!0);n.emitter.trigger("pointerdown",t),n.initScrollWatch(t);var r=e.target;n.shouldIgnoreMove||r.addEventListener("touchmove",n.handleTouchMove),r.addEventListener("touchend",n.handleTouchEnd),r.addEventListener("touchcancel",n.handleTouchEnd),window.addEventListener("scroll",n.handleTouchScroll,!0)}},this.handleTouchMove=function(e){var t=n.createEventFromTouch(e);n.recordCoords(t),n.emitter.trigger("pointermove",t)},this.handleTouchEnd=function(e){if(n.isDragging){var r=e.target;r.removeEventListener("touchmove",n.handleTouchMove),r.removeEventListener("touchend",n.handleTouchEnd),r.removeEventListener("touchcancel",n.handleTouchEnd),window.removeEventListener("scroll",n.handleTouchScroll,!0),n.emitter.trigger("pointerup",n.createEventFromTouch(e)),n.cleanup(),n.isTouchDragging=!1,o++,setTimeout((function(){o--}),t.config.touchMouseIgnoreWait)}},this.handleTouchScroll=function(){n.wasTouchScroll=!0},this.handleScroll=function(e){if(!n.shouldIgnoreMove){var t=window.pageXOffset-n.prevScrollX+n.prevPageX,r=window.pageYOffset-n.prevScrollY+n.prevPageY;n.emitter.trigger("pointermove",{origEvent:e,isTouch:n.isTouchDragging,subjectEl:n.subjectEl,pageX:t,pageY:r,deltaX:t-n.origPageX,deltaY:r-n.origPageY})}},this.containerEl=e,this.emitter=new t.EmitterMixin,e.addEventListener("mousedown",this.handleMouseDown),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),a++||window.addEventListener("touchmove",c,{passive:!1})}return e.prototype.destroy=function(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),--a||window.removeEventListener("touchmove",c,{passive:!1})},e.prototype.tryStart=function(e){var n=this.querySubjectEl(e),r=e.target;return!(!n||this.handleSelector&&!t.elementClosest(r,this.handleSelector))&&(this.subjectEl=n,this.downEl=r,this.isDragging=!0,this.wasTouchScroll=!1,!0)},e.prototype.cleanup=function(){l=!1,this.isDragging=!1,this.subjectEl=null,this.downEl=null,this.destroyScrollWatch()},e.prototype.querySubjectEl=function(e){return this.selector?t.elementClosest(e.target,this.selector):this.containerEl},e.prototype.shouldIgnoreMouse=function(){return o||this.isTouchDragging},e.prototype.cancelTouchScroll=function(){this.isDragging&&(l=!0)},e.prototype.initScrollWatch=function(e){this.shouldWatchScroll&&(this.recordCoords(e),window.addEventListener("scroll",this.handleScroll,!0))},e.prototype.recordCoords=function(e){this.shouldWatchScroll&&(this.prevPageX=e.pageX,this.prevPageY=e.pageY,this.prevScrollX=window.pageXOffset,this.prevScrollY=window.pageYOffset)},e.prototype.destroyScrollWatch=function(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)},e.prototype.createEventFromMouse=function(e,t){var n=0,r=0;return t?(this.origPageX=e.pageX,this.origPageY=e.pageY):(n=e.pageX-this.origPageX,r=e.pageY-this.origPageY),{origEvent:e,isTouch:!1,subjectEl:this.subjectEl,pageX:e.pageX,pageY:e.pageY,deltaX:n,deltaY:r}},e.prototype.createEventFromTouch=function(e,t){var n,r,i=e.touches,o=0,a=0;return i&&i.length?(n=i[0].pageX,r=i[0].pageY):(n=e.pageX,r=e.pageY),t?(this.origPageX=n,this.origPageY=r):(o=n-this.origPageX,a=r-this.origPageY),{origEvent:e,isTouch:!0,subjectEl:this.subjectEl,pageX:n,pageY:r,deltaX:o,deltaY:a}},e}();function c(e){l&&e.preventDefault()}var d=function(){function e(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}return e.prototype.start=function(e,t,n){this.sourceEl=e,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=t-window.pageXOffset,this.origScreenY=n-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()},e.prototype.handleMove=function(e,t){this.deltaX=e-window.pageXOffset-this.origScreenX,this.deltaY=t-window.pageYOffset-this.origScreenY,this.updateElPosition()},e.prototype.setIsVisible=function(e){e?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=e,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=e)},e.prototype.stop=function(e,t){var n=this,r=function(){n.cleanup(),t()};e&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(r,this.revertDuration):setTimeout(r,0)},e.prototype.doRevertAnimation=function(e,n){var r=this.mirrorEl,i=this.sourceEl.getBoundingClientRect();r.style.transition="top "+n+"ms,left "+n+"ms",t.applyStyle(r,{left:i.left,top:i.top}),t.whenTransitionDone(r,(function(){r.style.transition="",e()}))},e.prototype.cleanup=function(){this.mirrorEl&&(t.removeElement(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null},e.prototype.updateElPosition=function(){this.sourceEl&&this.isVisible&&t.applyStyle(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})},e.prototype.getMirrorEl=function(){var e=this.sourceElRect,n=this.mirrorEl;return n||((n=this.mirrorEl=this.sourceEl.cloneNode(!0)).classList.add("fc-unselectable"),n.classList.add("fc-dragging"),t.applyStyle(n,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:e.right-e.left,height:e.bottom-e.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(n)),n},e}(),g=function(e){function t(t,n){var r=e.call(this)||this;return r.handleScroll=function(){r.scrollTop=r.scrollController.getScrollTop(),r.scrollLeft=r.scrollController.getScrollLeft(),r.handleScrollChange()},r.scrollController=t,r.doesListening=n,r.scrollTop=r.origScrollTop=t.getScrollTop(),r.scrollLeft=r.origScrollLeft=t.getScrollLeft(),r.scrollWidth=t.getScrollWidth(),r.scrollHeight=t.getScrollHeight(),r.clientWidth=t.getClientWidth(),r.clientHeight=t.getClientHeight(),r.clientRect=r.computeClientRect(),r.doesListening&&r.getEventTarget().addEventListener("scroll",r.handleScroll),r}return r(t,e),t.prototype.destroy=function(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)},t.prototype.getScrollTop=function(){return this.scrollTop},t.prototype.getScrollLeft=function(){return this.scrollLeft},t.prototype.setScrollTop=function(e){this.scrollController.setScrollTop(e),this.doesListening||(this.scrollTop=Math.max(Math.min(e,this.getMaxScrollTop()),0),this.handleScrollChange())},t.prototype.setScrollLeft=function(e){this.scrollController.setScrollLeft(e),this.doesListening||(this.scrollLeft=Math.max(Math.min(e,this.getMaxScrollLeft()),0),this.handleScrollChange())},t.prototype.getClientWidth=function(){return this.clientWidth},t.prototype.getClientHeight=function(){return this.clientHeight},t.prototype.getScrollWidth=function(){return this.scrollWidth},t.prototype.getScrollHeight=function(){return this.scrollHeight},t.prototype.handleScrollChange=function(){},t}(t.ScrollController),u=function(e){function n(n,r){return e.call(this,new t.ElementScrollController(n),r)||this}return r(n,e),n.prototype.getEventTarget=function(){return this.scrollController.el},n.prototype.computeClientRect=function(){return t.computeInnerRect(this.scrollController.el)},n}(g),h=function(e){function n(n){return e.call(this,new t.WindowScrollController,n)||this}return r(n,e),n.prototype.getEventTarget=function(){return window},n.prototype.computeClientRect=function(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}},n.prototype.handleScrollChange=function(){this.clientRect=this.computeClientRect()},n}(g),p="function"==typeof performance?performance.now:Date.now,v=function(){function e(){var e=this;this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=function(){if(e.isAnimating){var t=e.computeBestEdge(e.pointerScreenX+window.pageXOffset,e.pointerScreenY+window.pageYOffset);if(t){var n=p();e.handleSide(t,(n-e.msSinceRequest)/1e3),e.requestAnimation(n)}else e.isAnimating=!1}}}return e.prototype.start=function(e,t){this.isEnabled&&(this.scrollCaches=this.buildCaches(),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(e,t))},e.prototype.handleMove=function(e,t){if(this.isEnabled){var n=e-window.pageXOffset,r=t-window.pageYOffset,i=null===this.pointerScreenY?0:r-this.pointerScreenY,o=null===this.pointerScreenX?0:n-this.pointerScreenX;i<0?this.everMovedUp=!0:i>0&&(this.everMovedDown=!0),o<0?this.everMovedLeft=!0:o>0&&(this.everMovedRight=!0),this.pointerScreenX=n,this.pointerScreenY=r,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(p()))}},e.prototype.stop=function(){if(this.isEnabled){this.isAnimating=!1;for(var e=0,t=this.scrollCaches;e<t.length;e++){t[e].destroy()}this.scrollCaches=null}},e.prototype.requestAnimation=function(e){this.msSinceRequest=e,requestAnimationFrame(this.animate)},e.prototype.handleSide=function(e,t){var n=e.scrollCache,r=this.edgeThreshold,i=r-e.distance,o=i*i/(r*r)*this.maxVelocity*t,a=1;switch(e.name){case"left":a=-1;case"right":n.setScrollLeft(n.getScrollLeft()+o*a);break;case"top":a=-1;case"bottom":n.setScrollTop(n.getScrollTop()+o*a)}},e.prototype.computeBestEdge=function(e,t){for(var n=this.edgeThreshold,r=null,i=0,o=this.scrollCaches;i<o.length;i++){var a=o[i],l=a.clientRect,s=e-l.left,c=l.right-e,d=t-l.top,g=l.bottom-t;s>=0&&c>=0&&d>=0&&g>=0&&(d<=n&&this.everMovedUp&&a.canScrollUp()&&(!r||r.distance>d)&&(r={scrollCache:a,name:"top",distance:d}),g<=n&&this.everMovedDown&&a.canScrollDown()&&(!r||r.distance>g)&&(r={scrollCache:a,name:"bottom",distance:g}),s<=n&&this.everMovedLeft&&a.canScrollLeft()&&(!r||r.distance>s)&&(r={scrollCache:a,name:"left",distance:s}),c<=n&&this.everMovedRight&&a.canScrollRight()&&(!r||r.distance>c)&&(r={scrollCache:a,name:"right",distance:c}))}return r},e.prototype.buildCaches=function(){return this.queryScrollEls().map((function(e){return e===window?new h(!1):new u(e,!1)}))},e.prototype.queryScrollEls=function(){for(var e=[],t=0,n=this.scrollQuery;t<n.length;t++){var r=n[t];"object"==typeof r?e.push(r):e.push.apply(e,Array.prototype.slice.call(document.querySelectorAll(r)))}return e},e}(),f=function(e){function n(n){var r=e.call(this,n)||this;r.delay=null,r.minDistance=0,r.touchScrollAllowed=!0,r.mirrorNeedsRevert=!1,r.isInteracting=!1,r.isDragging=!1,r.isDelayEnded=!1,r.isDistanceSurpassed=!1,r.delayTimeoutId=null,r.onPointerDown=function(e){r.isDragging||(r.isInteracting=!0,r.isDelayEnded=!1,r.isDistanceSurpassed=!1,t.preventSelection(document.body),t.preventContextMenu(document.body),e.isTouch||e.origEvent.preventDefault(),r.emitter.trigger("pointerdown",e),r.pointer.shouldIgnoreMove||(r.mirror.setIsVisible(!1),r.mirror.start(e.subjectEl,e.pageX,e.pageY),r.startDelay(e),r.minDistance||r.handleDistanceSurpassed(e)))},r.onPointerMove=function(e){if(r.isInteracting){if(r.emitter.trigger("pointermove",e),!r.isDistanceSurpassed){var t=r.minDistance,n=e.deltaX,i=e.deltaY;n*n+i*i>=t*t&&r.handleDistanceSurpassed(e)}r.isDragging&&("scroll"!==e.origEvent.type&&(r.mirror.handleMove(e.pageX,e.pageY),r.autoScroller.handleMove(e.pageX,e.pageY)),r.emitter.trigger("dragmove",e))}},r.onPointerUp=function(e){r.isInteracting&&(r.isInteracting=!1,t.allowSelection(document.body),t.allowContextMenu(document.body),r.emitter.trigger("pointerup",e),r.isDragging&&(r.autoScroller.stop(),r.tryStopDrag(e)),r.delayTimeoutId&&(clearTimeout(r.delayTimeoutId),r.delayTimeoutId=null))};var i=r.pointer=new s(n);return i.emitter.on("pointerdown",r.onPointerDown),i.emitter.on("pointermove",r.onPointerMove),i.emitter.on("pointerup",r.onPointerUp),r.mirror=new d,r.autoScroller=new v,r}return r(n,e),n.prototype.destroy=function(){this.pointer.destroy()},n.prototype.startDelay=function(e){var t=this;"number"==typeof this.delay?this.delayTimeoutId=setTimeout((function(){t.delayTimeoutId=null,t.handleDelayEnd(e)}),this.delay):this.handleDelayEnd(e)},n.prototype.handleDelayEnd=function(e){this.isDelayEnded=!0,this.tryStartDrag(e)},n.prototype.handleDistanceSurpassed=function(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)},n.prototype.tryStartDrag=function(e){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(e.pageX,e.pageY),this.emitter.trigger("dragstart",e),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))},n.prototype.tryStopDrag=function(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))},n.prototype.stopDrag=function(e){this.isDragging=!1,this.emitter.trigger("dragend",e)},n.prototype.setIgnoreMove=function(e){this.pointer.shouldIgnoreMove=e},n.prototype.setMirrorIsVisible=function(e){this.mirror.setIsVisible(e)},n.prototype.setMirrorNeedsRevert=function(e){this.mirrorNeedsRevert=e},n.prototype.setAutoScrollEnabled=function(e){this.autoScroller.isEnabled=e},n}(t.ElementDragging),E=function(){function e(e){this.origRect=t.computeRect(e),this.scrollCaches=t.getClippingParents(e).map((function(e){return new u(e,!0)}))}return e.prototype.destroy=function(){for(var e=0,t=this.scrollCaches;e<t.length;e++){t[e].destroy()}},e.prototype.computeLeft=function(){for(var e=this.origRect.left,t=0,n=this.scrollCaches;t<n.length;t++){var r=n[t];e+=r.origScrollLeft-r.getScrollLeft()}return e},e.prototype.computeTop=function(){for(var e=this.origRect.top,t=0,n=this.scrollCaches;t<n.length;t++){var r=n[t];e+=r.origScrollTop-r.getScrollTop()}return e},e.prototype.isWithinClipping=function(e,n){for(var r,i,o={left:e,top:n},a=0,l=this.scrollCaches;a<l.length;a++){var s=l[a];if(r=s.getEventTarget(),i=void 0,"HTML"!==(i=r.tagName)&&"BODY"!==i&&!t.pointInsideRect(o,s.clientRect))return!1}return!0},e}();var m=function(){function e(e,n){var r=this;this.useSubjectCenter=!1,this.requireInitial=!0,this.initialHit=null,this.movingHit=null,this.finalHit=null,this.handlePointerDown=function(e){var t=r.dragging;r.initialHit=null,r.movingHit=null,r.finalHit=null,r.prepareHits(),r.processFirstCoord(e),r.initialHit||!r.requireInitial?(t.setIgnoreMove(!1),r.emitter.trigger("pointerdown",e)):t.setIgnoreMove(!0)},this.handleDragStart=function(e){r.emitter.trigger("dragstart",e),r.handleMove(e,!0)},this.handleDragMove=function(e){r.emitter.trigger("dragmove",e),r.handleMove(e)},this.handlePointerUp=function(e){r.releaseHits(),r.emitter.trigger("pointerup",e)},this.handleDragEnd=function(e){r.movingHit&&r.emitter.trigger("hitupdate",null,!0,e),r.finalHit=r.movingHit,r.movingHit=null,r.emitter.trigger("dragend",e)},this.droppableStore=n,e.emitter.on("pointerdown",this.handlePointerDown),e.emitter.on("dragstart",this.handleDragStart),e.emitter.on("dragmove",this.handleDragMove),e.emitter.on("pointerup",this.handlePointerUp),e.emitter.on("dragend",this.handleDragEnd),this.dragging=e,this.emitter=new t.EmitterMixin}return e.prototype.processFirstCoord=function(e){var n,r={left:e.pageX,top:e.pageY},i=r,o=e.subjectEl;o!==document&&(n=t.computeRect(o),i=t.constrainPoint(i,n));var a=this.initialHit=this.queryHitForOffset(i.left,i.top);if(a){if(this.useSubjectCenter&&n){var l=t.intersectRects(n,a.rect);l&&(i=t.getRectCenter(l))}this.coordAdjust=t.diffPoints(i,r)}else this.coordAdjust={left:0,top:0}},e.prototype.handleMove=function(e,t){var n=this.queryHitForOffset(e.pageX+this.coordAdjust.left,e.pageY+this.coordAdjust.top);!t&&S(this.movingHit,n)||(this.movingHit=n,this.emitter.trigger("hitupdate",n,!1,e))},e.prototype.prepareHits=function(){this.offsetTrackers=t.mapHash(this.droppableStore,(function(e){return e.component.buildPositionCaches(),new E(e.el)}))},e.prototype.releaseHits=function(){var e=this.offsetTrackers;for(var t in e)e[t].destroy();this.offsetTrackers={}},e.prototype.queryHitForOffset=function(e,n){var r=this.droppableStore,i=this.offsetTrackers,o=null;for(var a in r){var l=r[a].component,s=i[a];if(s.isWithinClipping(e,n)){var c=s.computeLeft(),d=s.computeTop(),g=e-c,u=n-d,h=s.origRect,p=h.right-h.left,v=h.bottom-h.top;if(g>=0&&g<p&&u>=0&&u<v){var f=l.queryHit(g,u,p,v);!f||l.props.dateProfile&&!t.rangeContainsRange(l.props.dateProfile.activeRange,f.dateSpan.range)||o&&!(f.layer>o.layer)||(f.rect.left+=c,f.rect.right+=c,f.rect.top+=d,f.rect.bottom+=d,o=f)}}}return o},e}();function S(e,n){return!e&&!n||Boolean(e)===Boolean(n)&&t.isDateSpansEqual(e.dateSpan,n.dateSpan)}var y=function(e){function n(n){var r=e.call(this,n)||this;r.handlePointerDown=function(e){var t=r.dragging;t.setIgnoreMove(!r.component.isValidDateDownEl(t.pointer.downEl))},r.handleDragEnd=function(e){var t=r.component.context,n=t.calendar,i=t.view;if(!r.dragging.pointer.wasTouchScroll){var o=r.hitDragging,a=o.initialHit,l=o.finalHit;a&&l&&S(a,l)&&n.triggerDateClick(a.dateSpan,a.dayEl,i,e.origEvent)}};var i=n.component;r.dragging=new f(i.el),r.dragging.autoScroller.isEnabled=!1;var o=r.hitDragging=new m(r.dragging,t.interactionSettingsToStore(n));return o.emitter.on("pointerdown",r.handlePointerDown),o.emitter.on("dragend",r.handleDragEnd),r}return r(n,e),n.prototype.destroy=function(){this.dragging.destroy()},n}(t.Interaction),D=function(e){function n(n){var r=e.call(this,n)||this;r.dragSelection=null,r.handlePointerDown=function(e){var t=r,n=t.component,i=t.dragging,o=n.context.options.selectable&&n.isValidDateDownEl(e.origEvent.target);i.setIgnoreMove(!o),i.delay=e.isTouch?function(e){var t=e.context.options,n=t.selectLongPressDelay;null==n&&(n=t.longPressDelay);return n}(n):null},r.handleDragStart=function(e){r.component.context.calendar.unselect(e)},r.handleHitUpdate=function(e,n){var o=r.component.context.calendar,a=null,l=!1;e&&((a=function(e,n,r){var o=e.dateSpan,a=n.dateSpan,l=[o.range.start,o.range.end,a.range.start,a.range.end];l.sort(t.compareNumbers);for(var s={},c=0,d=r;c<d.length;c++){var g=(0,d[c])(e,n);if(!1===g)return null;g&&i(s,g)}return s.range={start:l[0],end:l[3]},s.allDay=o.allDay,s}(r.hitDragging.initialHit,e,o.pluginSystem.hooks.dateSelectionTransformers))&&r.component.isDateSelectionValid(a)||(l=!0,a=null)),a?o.dispatch({type:"SELECT_DATES",selection:a}):n||o.dispatch({type:"UNSELECT_DATES"}),l?t.disableCursor():t.enableCursor(),n||(r.dragSelection=a)},r.handlePointerUp=function(e){r.dragSelection&&(r.component.context.calendar.triggerDateSelect(r.dragSelection,e),r.dragSelection=null)};var o=n.component,a=o.context.options,l=r.dragging=new f(o.el);l.touchScrollAllowed=!1,l.minDistance=a.selectMinDistance||0,l.autoScroller.isEnabled=a.dragScroll;var s=r.hitDragging=new m(r.dragging,t.interactionSettingsToStore(n));return s.emitter.on("pointerdown",r.handlePointerDown),s.emitter.on("dragstart",r.handleDragStart),s.emitter.on("hitupdate",r.handleHitUpdate),s.emitter.on("pointerup",r.handlePointerUp),r}return r(n,e),n.prototype.destroy=function(){this.dragging.destroy()},n}(t.Interaction);var w=function(e){function n(r){var o=e.call(this,r)||this;o.subjectSeg=null,o.isDragging=!1,o.eventRange=null,o.relevantEvents=null,o.receivingCalendar=null,o.validMutation=null,o.mutatedRelevantEvents=null,o.handlePointerDown=function(e){var n=e.origEvent.target,r=o,i=r.component,a=r.dragging,l=a.mirror,s=i.context.options,c=i.context.calendar,d=o.subjectSeg=t.getElSeg(e.subjectEl),g=(o.eventRange=d.eventRange).instance.instanceId;o.relevantEvents=t.getRelevantEvents(c.state.eventStore,g),a.minDistance=e.isTouch?0:s.eventDragMinDistance,a.delay=e.isTouch&&g!==i.props.eventSelection?function(e){var t=e.context.options,n=t.eventLongPressDelay;null==n&&(n=t.longPressDelay);return n}(i):null,l.parentNode=c.el,l.revertDuration=s.dragRevertDuration;var u=i.isValidSegDownEl(n)&&!t.elementClosest(n,".fc-resizer");a.setIgnoreMove(!u),o.isDragging=u&&e.subjectEl.classList.contains("fc-draggable")},o.handleDragStart=function(e){var n=o.component.context,r=n.calendar,i=o.eventRange,a=i.instance.instanceId;e.isTouch?a!==o.component.props.eventSelection&&r.dispatch({type:"SELECT_EVENT",eventInstanceId:a}):r.dispatch({type:"UNSELECT_EVENT"}),o.isDragging&&(r.unselect(e),r.publiclyTrigger("eventDragStart",[{el:o.subjectSeg.el,event:new t.EventApi(r,i.def,i.instance),jsEvent:e.origEvent,view:n.view}]))},o.handleHitUpdate=function(e,n){if(o.isDragging){var r=o.relevantEvents,i=o.hitDragging.initialHit,a=o.component.context.calendar,l=null,s=null,c=null,d=!1,g={affectedEvents:r,mutatedEvents:t.createEmptyEventStore(),isEvent:!0,origSeg:o.subjectSeg};if(e){var u=e.component;l=u.context.calendar;var h=u.context.options;a===l||h.editable&&h.droppable?(s=function(e,n,r){var i=e.dateSpan,o=n.dateSpan,a=i.range.start,l=o.range.start,s={};i.allDay!==o.allDay&&(s.allDay=o.allDay,s.hasEnd=n.component.context.options.allDayMaintainDuration,o.allDay&&(a=t.startOfDay(a)));var c=t.diffDates(a,l,e.component.context.dateEnv,e.component===n.component?e.component.largeUnit:null);c.milliseconds&&(s.allDay=!1);for(var d={datesDelta:c,standardProps:s},g=0,u=r;g<u.length;g++){(0,u[g])(d,e,n)}return d}(i,e,l.pluginSystem.hooks.eventDragMutationMassagers))&&(c=t.applyMutationToEventStore(r,l.eventUiBases,s,l),g.mutatedEvents=c,u.isInteractionValid(g)||(d=!0,s=null,c=null,g.mutatedEvents=t.createEmptyEventStore())):l=null}o.displayDrag(l,g),d?t.disableCursor():t.enableCursor(),n||(a===l&&S(i,e)&&(s=null),o.dragging.setMirrorNeedsRevert(!s),o.dragging.setMirrorIsVisible(!e||!document.querySelector(".fc-mirror")),o.receivingCalendar=l,o.validMutation=s,o.mutatedRelevantEvents=c)}},o.handlePointerUp=function(){o.isDragging||o.cleanup()},o.handleDragEnd=function(e){if(o.isDragging){var n=o.component.context,r=n.calendar,a=n.view,l=o,s=l.receivingCalendar,c=l.validMutation,d=o.eventRange.def,g=o.eventRange.instance,u=new t.EventApi(r,d,g),h=o.relevantEvents,p=o.mutatedRelevantEvents,v=o.hitDragging.finalHit;if(o.clearDrag(),r.publiclyTrigger("eventDragStop",[{el:o.subjectSeg.el,event:u,jsEvent:e.origEvent,view:a}]),c){if(s===r){r.dispatch({type:"MERGE_EVENTS",eventStore:p});for(var f={},E=0,m=r.pluginSystem.hooks.eventDropTransformers;E<m.length;E++){var S=m[E];i(f,S(c,r))}var y=i({},f,{el:e.subjectEl,delta:c.datesDelta,oldEvent:u,event:new t.EventApi(r,p.defs[d.defId],g?p.instances[g.instanceId]:null),revert:function(){r.dispatch({type:"MERGE_EVENTS",eventStore:h})},jsEvent:e.origEvent,view:a});r.publiclyTrigger("eventDrop",[y])}else if(s){r.publiclyTrigger("eventLeave",[{draggedEl:e.subjectEl,event:u,view:a}]),r.dispatch({type:"REMOVE_EVENT_INSTANCES",instances:o.mutatedRelevantEvents.instances}),s.dispatch({type:"MERGE_EVENTS",eventStore:o.mutatedRelevantEvents}),e.isTouch&&s.dispatch({type:"SELECT_EVENT",eventInstanceId:g.instanceId});var D=i({},s.buildDatePointApi(v.dateSpan),{draggedEl:e.subjectEl,jsEvent:e.origEvent,view:v.component});s.publiclyTrigger("drop",[D]),s.publiclyTrigger("eventReceive",[{draggedEl:e.subjectEl,event:new t.EventApi(s,p.defs[d.defId],p.instances[g.instanceId]),view:v.component}])}}else r.publiclyTrigger("_noEventDrop")}o.cleanup()};var a=o.component,l=a.context.options,s=o.dragging=new f(a.el);s.pointer.selector=n.SELECTOR,s.touchScrollAllowed=!1,s.autoScroller.isEnabled=l.dragScroll;var c=o.hitDragging=new m(o.dragging,t.interactionSettingsStore);return c.useSubjectCenter=r.useEventCenter,c.emitter.on("pointerdown",o.handlePointerDown),c.emitter.on("dragstart",o.handleDragStart),c.emitter.on("hitupdate",o.handleHitUpdate),c.emitter.on("pointerup",o.handlePointerUp),c.emitter.on("dragend",o.handleDragEnd),o}return r(n,e),n.prototype.destroy=function(){this.dragging.destroy()},n.prototype.displayDrag=function(e,n){var r=this.component.context.calendar,i=this.receivingCalendar;i&&i!==e&&(i===r?i.dispatch({type:"SET_EVENT_DRAG",state:{affectedEvents:n.affectedEvents,mutatedEvents:t.createEmptyEventStore(),isEvent:!0,origSeg:n.origSeg}}):i.dispatch({type:"UNSET_EVENT_DRAG"})),e&&e.dispatch({type:"SET_EVENT_DRAG",state:n})},n.prototype.clearDrag=function(){var e=this.component.context.calendar,t=this.receivingCalendar;t&&t.dispatch({type:"UNSET_EVENT_DRAG"}),e!==t&&e.dispatch({type:"UNSET_EVENT_DRAG"})},n.prototype.cleanup=function(){this.subjectSeg=null,this.isDragging=!1,this.eventRange=null,this.relevantEvents=null,this.receivingCalendar=null,this.validMutation=null,this.mutatedRelevantEvents=null},n.SELECTOR=".fc-draggable, .fc-resizable",n}(t.Interaction);var T=function(e){function n(n){var r=e.call(this,n)||this;r.draggingSeg=null,r.eventRange=null,r.relevantEvents=null,r.validMutation=null,r.mutatedRelevantEvents=null,r.handlePointerDown=function(e){var t=r.component,n=r.querySeg(e),i=r.eventRange=n.eventRange;r.dragging.minDistance=t.context.options.eventDragMinDistance,r.dragging.setIgnoreMove(!r.component.isValidSegDownEl(e.origEvent.target)||e.isTouch&&r.component.props.eventSelection!==i.instance.instanceId)},r.handleDragStart=function(e){var n=r.component.context,i=n.calendar,o=n.view,a=r.eventRange;r.relevantEvents=t.getRelevantEvents(i.state.eventStore,r.eventRange.instance.instanceId),r.draggingSeg=r.querySeg(e),i.unselect(),i.publiclyTrigger("eventResizeStart",[{el:r.draggingSeg.el,event:new t.EventApi(i,a.def,a.instance),jsEvent:e.origEvent,view:o}])},r.handleHitUpdate=function(e,n,o){var a=r.component.context.calendar,l=r.relevantEvents,s=r.hitDragging.initialHit,c=r.eventRange.instance,d=null,g=null,u=!1,h={affectedEvents:l,mutatedEvents:t.createEmptyEventStore(),isEvent:!0,origSeg:r.draggingSeg};e&&(d=function(e,n,r,o,a){for(var l=e.component.context.dateEnv,s=e.dateSpan.range.start,c=n.dateSpan.range.start,d=t.diffDates(s,c,l,e.component.largeUnit),g={},u=0,h=a;u<h.length;u++){var p=(0,h[u])(e,n);if(!1===p)return null;p&&i(g,p)}if(r){if(l.add(o.start,d)<o.end)return g.startDelta=d,g}else if(l.add(o.end,d)>o.start)return g.endDelta=d,g;return null}(s,e,o.subjectEl.classList.contains("fc-start-resizer"),c.range,a.pluginSystem.hooks.eventResizeJoinTransforms)),d&&(g=t.applyMutationToEventStore(l,a.eventUiBases,d,a),h.mutatedEvents=g,r.component.isInteractionValid(h)||(u=!0,d=null,g=null,h.mutatedEvents=null)),g?a.dispatch({type:"SET_EVENT_RESIZE",state:h}):a.dispatch({type:"UNSET_EVENT_RESIZE"}),u?t.disableCursor():t.enableCursor(),n||(d&&S(s,e)&&(d=null),r.validMutation=d,r.mutatedRelevantEvents=g)},r.handleDragEnd=function(e){var n=r.component.context,i=n.calendar,o=n.view,a=r.eventRange.def,l=r.eventRange.instance,s=new t.EventApi(i,a,l),c=r.relevantEvents,d=r.mutatedRelevantEvents;i.publiclyTrigger("eventResizeStop",[{el:r.draggingSeg.el,event:s,jsEvent:e.origEvent,view:o}]),r.validMutation?(i.dispatch({type:"MERGE_EVENTS",eventStore:d}),i.publiclyTrigger("eventResize",[{el:r.draggingSeg.el,startDelta:r.validMutation.startDelta||t.createDuration(0),endDelta:r.validMutation.endDelta||t.createDuration(0),prevEvent:s,event:new t.EventApi(i,d.defs[a.defId],l?d.instances[l.instanceId]:null),revert:function(){i.dispatch({type:"MERGE_EVENTS",eventStore:c})},jsEvent:e.origEvent,view:o}])):i.publiclyTrigger("_noEventResize"),r.draggingSeg=null,r.relevantEvents=null,r.validMutation=null};var o=n.component,a=r.dragging=new f(o.el);a.pointer.selector=".fc-resizer",a.touchScrollAllowed=!1,a.autoScroller.isEnabled=o.context.options.dragScroll;var l=r.hitDragging=new m(r.dragging,t.interactionSettingsToStore(n));return l.emitter.on("pointerdown",r.handlePointerDown),l.emitter.on("dragstart",r.handleDragStart),l.emitter.on("hitupdate",r.handleHitUpdate),l.emitter.on("dragend",r.handleDragEnd),r}return r(n,e),n.prototype.destroy=function(){this.dragging.destroy()},n.prototype.querySeg=function(e){return t.getElSeg(t.elementClosest(e.subjectEl,this.component.fgSegSelector))},n}(t.Interaction);var M=function(){function e(e){var n=this;this.isRecentPointerDateSelect=!1,this.onSelect=function(e){e.jsEvent&&(n.isRecentPointerDateSelect=!0)},this.onDocumentPointerUp=function(e){var r=n,i=r.calendar,o=r.documentPointer,a=i.state;if(!o.wasTouchScroll){if(a.dateSelection&&!n.isRecentPointerDateSelect){var l=i.viewOpt("unselectAuto"),s=i.viewOpt("unselectCancel");!l||l&&t.elementClosest(o.downEl,s)||i.unselect(e)}a.eventSelection&&!t.elementClosest(o.downEl,w.SELECTOR)&&i.dispatch({type:"UNSELECT_EVENT"})}n.isRecentPointerDateSelect=!1},this.calendar=e;var r=this.documentPointer=new s(document);r.shouldIgnoreMove=!0,r.shouldWatchScroll=!1,r.emitter.on("pointerup",this.onDocumentPointerUp),e.on("select",this.onSelect)}return e.prototype.destroy=function(){this.calendar.off("select",this.onSelect),this.documentPointer.destroy()},e}(),b=function(){function e(e,n){var r=this;this.receivingCalendar=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=function(e){r.dragMeta=r.buildDragMeta(e.subjectEl)},this.handleHitUpdate=function(e,n,o){var a=r.hitDragging.dragging,l=null,s=null,c=!1,d={affectedEvents:t.createEmptyEventStore(),mutatedEvents:t.createEmptyEventStore(),isEvent:r.dragMeta.create,origSeg:null};e&&(l=e.component.context.calendar,r.canDropElOnCalendar(o.subjectEl,l)&&(s=function(e,n,r){for(var o=i({},n.leftoverProps),a=0,l=r.pluginSystem.hooks.externalDefTransforms;a<l.length;a++){var s=l[a];i(o,s(e,n))}var c=t.parseEventDef(o,n.sourceId,e.allDay,r.opt("forceEventDuration")||Boolean(n.duration),r),d=e.range.start;e.allDay&&n.startTime&&(d=r.dateEnv.add(d,n.startTime));var g=n.duration?r.dateEnv.add(d,n.duration):r.getDefaultEventEnd(e.allDay,d),u=t.createEventInstance(c.defId,{start:d,end:g});return{def:c,instance:u}}(e.dateSpan,r.dragMeta,l),d.mutatedEvents=t.eventTupleToStore(s),(c=!t.isInteractionValid(d,l))&&(d.mutatedEvents=t.createEmptyEventStore(),s=null))),r.displayDrag(l,d),a.setMirrorIsVisible(n||!s||!document.querySelector(".fc-mirror")),c?t.disableCursor():t.enableCursor(),n||(a.setMirrorNeedsRevert(!s),r.receivingCalendar=l,r.droppableEvent=s)},this.handleDragEnd=function(e){var n=r,o=n.receivingCalendar,a=n.droppableEvent;if(r.clearDrag(),o&&a){var l=r.hitDragging.finalHit,s=l.component.context.view,c=r.dragMeta,d=i({},o.buildDatePointApi(l.dateSpan),{draggedEl:e.subjectEl,jsEvent:e.origEvent,view:s});o.publiclyTrigger("drop",[d]),c.create&&(o.dispatch({type:"MERGE_EVENTS",eventStore:t.eventTupleToStore(a)}),e.isTouch&&o.dispatch({type:"SELECT_EVENT",eventInstanceId:a.instance.instanceId}),o.publiclyTrigger("eventReceive",[{draggedEl:e.subjectEl,event:new t.EventApi(o,a.def,a.instance),view:s}]))}r.receivingCalendar=null,r.droppableEvent=null};var o=this.hitDragging=new m(e,t.interactionSettingsStore);o.requireInitial=!1,o.emitter.on("dragstart",this.handleDragStart),o.emitter.on("hitupdate",this.handleHitUpdate),o.emitter.on("dragend",this.handleDragEnd),this.suppliedDragMeta=n}return e.prototype.buildDragMeta=function(e){return"object"==typeof this.suppliedDragMeta?t.parseDragMeta(this.suppliedDragMeta):"function"==typeof this.suppliedDragMeta?t.parseDragMeta(this.suppliedDragMeta(e)):(n=function(e,n){var r=t.config.dataAttrPrefix,i=(r?r+"-":"")+n;return e.getAttribute("data-"+i)||""}(e,"event"),r=n?JSON.parse(n):{create:!1},t.parseDragMeta(r));var n,r},e.prototype.displayDrag=function(e,t){var n=this.receivingCalendar;n&&n!==e&&n.dispatch({type:"UNSET_EVENT_DRAG"}),e&&e.dispatch({type:"SET_EVENT_DRAG",state:t})},e.prototype.clearDrag=function(){this.receivingCalendar&&this.receivingCalendar.dispatch({type:"UNSET_EVENT_DRAG"})},e.prototype.canDropElOnCalendar=function(e,n){var r=n.opt("dropAccept");return"function"==typeof r?r(e):"string"!=typeof r||!r||Boolean(t.elementMatches(e,r))},e}();t.config.dataAttrPrefix="";var C=function(){function e(e,n){var r=this;void 0===n&&(n={}),this.handlePointerDown=function(e){var n=r.dragging,i=r.settings,o=i.minDistance,a=i.longPressDelay;n.minDistance=null!=o?o:e.isTouch?0:t.globalDefaults.eventDragMinDistance,n.delay=e.isTouch?null!=a?a:t.globalDefaults.longPressDelay:0},this.handleDragStart=function(e){e.isTouch&&r.dragging.delay&&e.subjectEl.classList.contains("fc-event")&&r.dragging.mirror.getMirrorEl().classList.add("fc-selected")},this.settings=n;var i=this.dragging=new f(e);i.touchScrollAllowed=!1,null!=n.itemSelector&&(i.pointer.selector=n.itemSelector),null!=n.appendTo&&(i.mirror.parentNode=n.appendTo),i.emitter.on("pointerdown",this.handlePointerDown),i.emitter.on("dragstart",this.handleDragStart),new b(i,n.eventData)}return e.prototype.destroy=function(){this.dragging.destroy()},e}(),R=function(e){function t(t){var n=e.call(this,t)||this;n.shouldIgnoreMove=!1,n.mirrorSelector="",n.currentMirrorEl=null,n.handlePointerDown=function(e){n.emitter.trigger("pointerdown",e),n.shouldIgnoreMove||n.emitter.trigger("dragstart",e)},n.handlePointerMove=function(e){n.shouldIgnoreMove||n.emitter.trigger("dragmove",e)},n.handlePointerUp=function(e){n.emitter.trigger("pointerup",e),n.shouldIgnoreMove||n.emitter.trigger("dragend",e)};var r=n.pointer=new s(t);return r.emitter.on("pointerdown",n.handlePointerDown),r.emitter.on("pointermove",n.handlePointerMove),r.emitter.on("pointerup",n.handlePointerUp),n}return r(t,e),t.prototype.destroy=function(){this.pointer.destroy()},t.prototype.setIgnoreMove=function(e){this.shouldIgnoreMove=e},t.prototype.setMirrorIsVisible=function(e){if(e)this.currentMirrorEl&&(this.currentMirrorEl.style.visibility="",this.currentMirrorEl=null);else{var t=this.mirrorSelector?document.querySelector(this.mirrorSelector):null;t&&(this.currentMirrorEl=t,t.style.visibility="hidden")}},t}(t.ElementDragging),I=function(){function e(e,t){var n=document;e===document||e instanceof Element?(n=e,t=t||{}):t=e||{};var r=this.dragging=new R(n);"string"==typeof t.itemSelector?r.pointer.selector=t.itemSelector:n===document&&(r.pointer.selector="[data-event]"),"string"==typeof t.mirrorSelector&&(r.mirrorSelector=t.mirrorSelector),new b(r,t.eventData)}return e.prototype.destroy=function(){this.dragging.destroy()},e}(),P=t.createPlugin({componentInteractions:[y,D,w,T],calendarInteractions:[M],elementDraggingImpl:f});e.Draggable=C,e.FeaturefulElementDragging=f,e.PointerDragging=s,e.ThirdPartyDraggable=I,e.default=P,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/interaction/package.json b/library/fullcalendar/packages/interaction/package.json
deleted file mode 100644
index b3dc22110..000000000
--- a/library/fullcalendar/packages/interaction/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "@fullcalendar/interaction",
- "version": "4.4.2",
- "title": "FullCalendar Interaction Plugin",
- "description": "Provides functionality for event drag-n-drop, resizing, dateClick, and selectable actions",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/editable",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/list/LICENSE.txt b/library/fullcalendar/packages/list/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/list/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/list/README.md b/library/fullcalendar/packages/list/README.md
deleted file mode 100644
index 1122d7f9d..000000000
--- a/library/fullcalendar/packages/list/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar List View Plugin
-
-View your events as a bulleted list
-
-[View the docs &raquo;](https://fullcalendar.io/docs/list-view)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/list/index.global.js b/library/fullcalendar/packages/list/index.global.js
new file mode 100644
index 000000000..1922e7d93
--- /dev/null
+++ b/library/fullcalendar/packages/list/index.global.js
@@ -0,0 +1,332 @@
+/*!
+FullCalendar List View Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/list-view
+(c) 2022 Adam Shaw
+*/
+FullCalendar.List = (function (exports, core, internal$1, preact) {
+ 'use strict';
+
+ class ListViewHeaderRow extends internal$1.BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.state = {
+ textId: internal$1.getUniqueDomId(),
+ };
+ }
+ render() {
+ let { theme, dateEnv, options, viewApi } = this.context;
+ let { cellId, dayDate, todayRange } = this.props;
+ let { textId } = this.state;
+ let dayMeta = internal$1.getDateMeta(dayDate, todayRange);
+ // will ever be falsy?
+ let text = options.listDayFormat ? dateEnv.format(dayDate, options.listDayFormat) : '';
+ // will ever be falsy? also, BAD NAME "alt"
+ let sideText = options.listDaySideFormat ? dateEnv.format(dayDate, options.listDaySideFormat) : '';
+ let renderProps = Object.assign({ date: dateEnv.toDate(dayDate), view: viewApi, textId,
+ text,
+ sideText, navLinkAttrs: internal$1.buildNavLinkAttrs(this.context, dayDate), sideNavLinkAttrs: internal$1.buildNavLinkAttrs(this.context, dayDate, 'day', false) }, dayMeta);
+ // TODO: make a reusable HOC for dayHeader (used in daygrid/timegrid too)
+ return (preact.createElement(internal$1.ContentContainer, { elTag: "tr", elClasses: [
+ 'fc-list-day',
+ ...internal$1.getDayClassNames(dayMeta, theme),
+ ], elAttrs: {
+ 'data-date': internal$1.formatDayString(dayDate),
+ }, renderProps: renderProps, generatorName: "dayHeaderContent", generator: options.dayHeaderContent || renderInnerContent, classNameGenerator: options.dayHeaderClassNames, didMount: options.dayHeaderDidMount, willUnmount: options.dayHeaderWillUnmount }, (InnerContent) => ( // TODO: force-hide top border based on :first-child
+ preact.createElement("th", { scope: "colgroup", colSpan: 3, id: cellId, "aria-labelledby": textId },
+ preact.createElement(InnerContent, { elTag: "div", elClasses: [
+ 'fc-list-day-cushion',
+ theme.getClass('tableCellShaded'),
+ ] })))));
+ }
+ }
+ function renderInnerContent(props) {
+ return (preact.createElement(preact.Fragment, null,
+ props.text && (preact.createElement("a", Object.assign({ id: props.textId, className: "fc-list-day-text" }, props.navLinkAttrs), props.text)),
+ props.sideText && ( /* not keyboard tabbable */preact.createElement("a", Object.assign({ "aria-hidden": true, className: "fc-list-day-side-text" }, props.sideNavLinkAttrs), props.sideText))));
+ }
+
+ const DEFAULT_TIME_FORMAT = internal$1.createFormatter({
+ hour: 'numeric',
+ minute: '2-digit',
+ meridiem: 'short',
+ });
+ class ListViewEventRow extends internal$1.BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let { seg, timeHeaderId, eventHeaderId, dateHeaderId } = props;
+ let timeFormat = options.eventTimeFormat || DEFAULT_TIME_FORMAT;
+ return (preact.createElement(internal$1.EventContainer, Object.assign({}, props, { elTag: "tr", elClasses: [
+ 'fc-list-event',
+ seg.eventRange.def.url && 'fc-event-forced-url',
+ ], defaultGenerator: () => renderEventInnerContent(seg, context) /* weird */, seg: seg, timeText: "", disableDragging: true, disableResizing: true }), (InnerContent, eventContentArg) => (preact.createElement(preact.Fragment, null,
+ buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId),
+ preact.createElement("td", { "aria-hidden": true, className: "fc-list-event-graphic" },
+ preact.createElement("span", { className: "fc-list-event-dot", style: {
+ borderColor: eventContentArg.borderColor || eventContentArg.backgroundColor,
+ } })),
+ preact.createElement(InnerContent, { elTag: "td", elClasses: ['fc-list-event-title'], elAttrs: { headers: `${eventHeaderId} ${dateHeaderId}` } })))));
+ }
+ }
+ function renderEventInnerContent(seg, context) {
+ let interactiveAttrs = internal$1.getSegAnchorAttrs(seg, context);
+ return (preact.createElement("a", Object.assign({}, interactiveAttrs), seg.eventRange.def.title));
+ }
+ function buildTimeContent(seg, timeFormat, context, timeHeaderId, dateHeaderId) {
+ let { options } = context;
+ if (options.displayEventTime !== false) {
+ let eventDef = seg.eventRange.def;
+ let eventInstance = seg.eventRange.instance;
+ let doAllDay = false;
+ let timeText;
+ if (eventDef.allDay) {
+ doAllDay = true;
+ }
+ else if (internal$1.isMultiDayRange(seg.eventRange.range)) { // TODO: use (!isStart || !isEnd) instead?
+ if (seg.isStart) {
+ timeText = internal$1.buildSegTimeText(seg, timeFormat, context, null, null, eventInstance.range.start, seg.end);
+ }
+ else if (seg.isEnd) {
+ timeText = internal$1.buildSegTimeText(seg, timeFormat, context, null, null, seg.start, eventInstance.range.end);
+ }
+ else {
+ doAllDay = true;
+ }
+ }
+ else {
+ timeText = internal$1.buildSegTimeText(seg, timeFormat, context);
+ }
+ if (doAllDay) {
+ let renderProps = {
+ text: context.options.allDayText,
+ view: context.viewApi,
+ };
+ return (preact.createElement(internal$1.ContentContainer, { elTag: "td", elClasses: ['fc-list-event-time'], elAttrs: {
+ headers: `${timeHeaderId} ${dateHeaderId}`,
+ }, renderProps: renderProps, generatorName: "allDayContent", generator: options.allDayContent || renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }));
+ }
+ return (preact.createElement("td", { className: "fc-list-event-time" }, timeText));
+ }
+ return null;
+ }
+ function renderAllDayInner(renderProps) {
+ return renderProps.text;
+ }
+
+ /*
+ Responsible for the scroller, and forwarding event-related actions into the "grid".
+ */
+ class ListView extends internal$1.DateComponent {
+ constructor() {
+ super(...arguments);
+ this.computeDateVars = internal$1.memoize(computeDateVars);
+ this.eventStoreToSegs = internal$1.memoize(this._eventStoreToSegs);
+ this.state = {
+ timeHeaderId: internal$1.getUniqueDomId(),
+ eventHeaderId: internal$1.getUniqueDomId(),
+ dateHeaderIdRoot: internal$1.getUniqueDomId(),
+ };
+ this.setRootEl = (rootEl) => {
+ if (rootEl) {
+ this.context.registerInteractiveComponent(this, {
+ el: rootEl,
+ });
+ }
+ else {
+ this.context.unregisterInteractiveComponent(this);
+ }
+ };
+ }
+ render() {
+ let { props, context } = this;
+ let { dayDates, dayRanges } = this.computeDateVars(props.dateProfile);
+ let eventSegs = this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges);
+ return (preact.createElement(internal$1.ViewContainer, { elRef: this.setRootEl, elClasses: [
+ 'fc-list',
+ context.theme.getClass('table'),
+ context.options.stickyHeaderDates !== false ?
+ 'fc-list-sticky' :
+ '',
+ ], viewSpec: context.viewSpec },
+ preact.createElement(internal$1.Scroller, { liquid: !props.isHeightAuto, overflowX: props.isHeightAuto ? 'visible' : 'hidden', overflowY: props.isHeightAuto ? 'visible' : 'auto' }, eventSegs.length > 0 ?
+ this.renderSegList(eventSegs, dayDates) :
+ this.renderEmptyMessage())));
+ }
+ renderEmptyMessage() {
+ let { options, viewApi } = this.context;
+ let renderProps = {
+ text: options.noEventsText,
+ view: viewApi,
+ };
+ return (preact.createElement(internal$1.ContentContainer, { elTag: "div", elClasses: ['fc-list-empty'], renderProps: renderProps, generatorName: "noEventsContent", generator: options.noEventsContent || renderNoEventsInner, classNameGenerator: options.noEventsClassNames, didMount: options.noEventsDidMount, willUnmount: options.noEventsWillUnmount }, (InnerContent) => (preact.createElement(InnerContent, { elTag: "div", elClasses: ['fc-list-empty-cushion'] }))));
+ }
+ renderSegList(allSegs, dayDates) {
+ let { theme, options } = this.context;
+ let { timeHeaderId, eventHeaderId, dateHeaderIdRoot } = this.state;
+ let segsByDay = groupSegsByDay(allSegs); // sparse array
+ return (preact.createElement(internal$1.NowTimer, { unit: "day" }, (nowDate, todayRange) => {
+ let innerNodes = [];
+ for (let dayIndex = 0; dayIndex < segsByDay.length; dayIndex += 1) {
+ let daySegs = segsByDay[dayIndex];
+ if (daySegs) { // sparse array, so might be undefined
+ let dayStr = internal$1.formatDayString(dayDates[dayIndex]);
+ let dateHeaderId = dateHeaderIdRoot + '-' + dayStr;
+ // append a day header
+ innerNodes.push(preact.createElement(ListViewHeaderRow, { key: dayStr, cellId: dateHeaderId, dayDate: dayDates[dayIndex], todayRange: todayRange }));
+ daySegs = internal$1.sortEventSegs(daySegs, options.eventOrder);
+ for (let seg of daySegs) {
+ innerNodes.push(preact.createElement(ListViewEventRow, Object.assign({ key: dayStr + ':' + seg.eventRange.instance.instanceId /* are multiple segs for an instanceId */, seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: false, timeHeaderId: timeHeaderId, eventHeaderId: eventHeaderId, dateHeaderId: dateHeaderId }, internal$1.getSegMeta(seg, todayRange, nowDate))));
+ }
+ }
+ }
+ return (preact.createElement("table", { className: 'fc-list-table ' + theme.getClass('table') },
+ preact.createElement("thead", null,
+ preact.createElement("tr", null,
+ preact.createElement("th", { scope: "col", id: timeHeaderId }, options.timeHint),
+ preact.createElement("th", { scope: "col", "aria-hidden": true }),
+ preact.createElement("th", { scope: "col", id: eventHeaderId }, options.eventHint))),
+ preact.createElement("tbody", null, innerNodes)));
+ }));
+ }
+ _eventStoreToSegs(eventStore, eventUiBases, dayRanges) {
+ return this.eventRangesToSegs(internal$1.sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.options.nextDayThreshold).fg, dayRanges);
+ }
+ eventRangesToSegs(eventRanges, dayRanges) {
+ let segs = [];
+ for (let eventRange of eventRanges) {
+ segs.push(...this.eventRangeToSegs(eventRange, dayRanges));
+ }
+ return segs;
+ }
+ eventRangeToSegs(eventRange, dayRanges) {
+ let { dateEnv } = this.context;
+ let { nextDayThreshold } = this.context.options;
+ let range = eventRange.range;
+ let allDay = eventRange.def.allDay;
+ let dayIndex;
+ let segRange;
+ let seg;
+ let segs = [];
+ for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex += 1) {
+ segRange = internal$1.intersectRanges(range, dayRanges[dayIndex]);
+ if (segRange) {
+ seg = {
+ component: this,
+ eventRange,
+ start: segRange.start,
+ end: segRange.end,
+ isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),
+ isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),
+ dayIndex,
+ };
+ segs.push(seg);
+ // detect when range won't go fully into the next day,
+ // and mutate the latest seg to the be the end.
+ if (!seg.isEnd && !allDay &&
+ dayIndex + 1 < dayRanges.length &&
+ range.end <
+ dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {
+ seg.end = range.end;
+ seg.isEnd = true;
+ break;
+ }
+ }
+ }
+ return segs;
+ }
+ }
+ function renderNoEventsInner(renderProps) {
+ return renderProps.text;
+ }
+ function computeDateVars(dateProfile) {
+ let dayStart = internal$1.startOfDay(dateProfile.renderRange.start);
+ let viewEnd = dateProfile.renderRange.end;
+ let dayDates = [];
+ let dayRanges = [];
+ while (dayStart < viewEnd) {
+ dayDates.push(dayStart);
+ dayRanges.push({
+ start: dayStart,
+ end: internal$1.addDays(dayStart, 1),
+ });
+ dayStart = internal$1.addDays(dayStart, 1);
+ }
+ return { dayDates, dayRanges };
+ }
+ // Returns a sparse array of arrays, segs grouped by their dayIndex
+ function groupSegsByDay(segs) {
+ let segsByDay = []; // sparse array
+ let i;
+ let seg;
+ for (i = 0; i < segs.length; i += 1) {
+ seg = segs[i];
+ (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))
+ .push(seg);
+ }
+ return segsByDay;
+ }
+
+ const OPTION_REFINERS = {
+ listDayFormat: createFalsableFormatter,
+ listDaySideFormat: createFalsableFormatter,
+ noEventsClassNames: internal$1.identity,
+ noEventsContent: internal$1.identity,
+ noEventsDidMount: internal$1.identity,
+ noEventsWillUnmount: internal$1.identity,
+ // noEventsText is defined in base options
+ };
+ function createFalsableFormatter(input) {
+ return input === false ? null : internal$1.createFormatter(input);
+ }
+
+ var css_248z = ":root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:\"\";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}";
+ internal$1.injectStyles(css_248z);
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/list',
+ optionRefiners: OPTION_REFINERS,
+ views: {
+ list: {
+ component: ListView,
+ buttonTextKey: 'list',
+ listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' }, // like "January 1, 2016"
+ },
+ listDay: {
+ type: 'list',
+ duration: { days: 1 },
+ listDayFormat: { weekday: 'long' }, // day-of-week is all we need. full date is probably in headerToolbar
+ },
+ listWeek: {
+ type: 'list',
+ duration: { weeks: 1 },
+ listDayFormat: { weekday: 'long' },
+ listDaySideFormat: { month: 'long', day: 'numeric', year: 'numeric' },
+ },
+ listMonth: {
+ type: 'list',
+ duration: { month: 1 },
+ listDaySideFormat: { weekday: 'long' }, // day-of-week is nice-to-have
+ },
+ listYear: {
+ type: 'list',
+ duration: { year: 1 },
+ listDaySideFormat: { weekday: 'long' }, // day-of-week is nice-to-have
+ },
+ },
+ });
+
+ var internal = {
+ __proto__: null,
+ ListView: ListView
+ };
+
+ core.globalPlugins.push(plugin);
+
+ exports.Internal = internal;
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal, FullCalendar.Preact);
diff --git a/library/fullcalendar/packages/list/index.global.min.js b/library/fullcalendar/packages/list/index.global.min.js
new file mode 100644
index 000000000..3fbd91434
--- /dev/null
+++ b/library/fullcalendar/packages/list/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar List View Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/list-view
+(c) 2022 Adam Shaw
+*/
+FullCalendar.List=function(e,t,n,a){"use strict";class i extends n.BaseComponent{constructor(){super(...arguments),this.state={textId:n.getUniqueDomId()}}render(){let{theme:e,dateEnv:t,options:i,viewApi:s}=this.context,{cellId:l,dayDate:o,todayRange:d}=this.props,{textId:c}=this.state,f=n.getDateMeta(o,d),g=i.listDayFormat?t.format(o,i.listDayFormat):"",u=i.listDaySideFormat?t.format(o,i.listDaySideFormat):"",m=Object.assign({date:t.toDate(o),view:s,textId:c,text:g,sideText:u,navLinkAttrs:n.buildNavLinkAttrs(this.context,o),sideNavLinkAttrs:n.buildNavLinkAttrs(this.context,o,"day",!1)},f);return a.createElement(n.ContentContainer,{elTag:"tr",elClasses:["fc-list-day",...n.getDayClassNames(f,e)],elAttrs:{"data-date":n.formatDayString(o)},renderProps:m,generatorName:"dayHeaderContent",generator:i.dayHeaderContent||r,classNameGenerator:i.dayHeaderClassNames,didMount:i.dayHeaderDidMount,willUnmount:i.dayHeaderWillUnmount},t=>a.createElement("th",{scope:"colgroup",colSpan:3,id:l,"aria-labelledby":c},a.createElement(t,{elTag:"div",elClasses:["fc-list-day-cushion",e.getClass("tableCellShaded")]})))}}function r(e){return a.createElement(a.Fragment,null,e.text&&a.createElement("a",Object.assign({id:e.textId,className:"fc-list-day-text"},e.navLinkAttrs),e.text),e.sideText&&a.createElement("a",Object.assign({"aria-hidden":!0,className:"fc-list-day-side-text"},e.sideNavLinkAttrs),e.sideText))}const s=n.createFormatter({hour:"numeric",minute:"2-digit",meridiem:"short"});class l extends n.BaseComponent{render(){let{props:e,context:t}=this,{options:i}=t,{seg:r,timeHeaderId:l,eventHeaderId:d,dateHeaderId:c}=e,f=i.eventTimeFormat||s;return a.createElement(n.EventContainer,Object.assign({},e,{elTag:"tr",elClasses:["fc-list-event",r.eventRange.def.url&&"fc-event-forced-url"],defaultGenerator:()=>function(e,t){let i=n.getSegAnchorAttrs(e,t);return a.createElement("a",Object.assign({},i),e.eventRange.def.title)}(r,t),seg:r,timeText:"",disableDragging:!0,disableResizing:!0}),(e,i)=>a.createElement(a.Fragment,null,function(e,t,i,r,s){let{options:l}=i;if(!1!==l.displayEventTime){let d,c=e.eventRange.def,f=e.eventRange.instance,g=!1;if(c.allDay?g=!0:n.isMultiDayRange(e.eventRange.range)?e.isStart?d=n.buildSegTimeText(e,t,i,null,null,f.range.start,e.end):e.isEnd?d=n.buildSegTimeText(e,t,i,null,null,e.start,f.range.end):g=!0:d=n.buildSegTimeText(e,t,i),g){let e={text:i.options.allDayText,view:i.viewApi};return a.createElement(n.ContentContainer,{elTag:"td",elClasses:["fc-list-event-time"],elAttrs:{headers:`${r} ${s}`},renderProps:e,generatorName:"allDayContent",generator:l.allDayContent||o,classNameGenerator:l.allDayClassNames,didMount:l.allDayDidMount,willUnmount:l.allDayWillUnmount})}return a.createElement("td",{className:"fc-list-event-time"},d)}return null}(r,f,t,l,c),a.createElement("td",{"aria-hidden":!0,className:"fc-list-event-graphic"},a.createElement("span",{className:"fc-list-event-dot",style:{borderColor:i.borderColor||i.backgroundColor}})),a.createElement(e,{elTag:"td",elClasses:["fc-list-event-title"],elAttrs:{headers:`${d} ${c}`}})))}}function o(e){return e.text}class d extends n.DateComponent{constructor(){super(...arguments),this.computeDateVars=n.memoize(f),this.eventStoreToSegs=n.memoize(this._eventStoreToSegs),this.state={timeHeaderId:n.getUniqueDomId(),eventHeaderId:n.getUniqueDomId(),dateHeaderIdRoot:n.getUniqueDomId()},this.setRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e}):this.context.unregisterInteractiveComponent(this)}}render(){let{props:e,context:t}=this,{dayDates:i,dayRanges:r}=this.computeDateVars(e.dateProfile),s=this.eventStoreToSegs(e.eventStore,e.eventUiBases,r);return a.createElement(n.ViewContainer,{elRef:this.setRootEl,elClasses:["fc-list",t.theme.getClass("table"),!1!==t.options.stickyHeaderDates?"fc-list-sticky":""],viewSpec:t.viewSpec},a.createElement(n.Scroller,{liquid:!e.isHeightAuto,overflowX:e.isHeightAuto?"visible":"hidden",overflowY:e.isHeightAuto?"visible":"auto"},s.length>0?this.renderSegList(s,i):this.renderEmptyMessage()))}renderEmptyMessage(){let{options:e,viewApi:t}=this.context,i={text:e.noEventsText,view:t};return a.createElement(n.ContentContainer,{elTag:"div",elClasses:["fc-list-empty"],renderProps:i,generatorName:"noEventsContent",generator:e.noEventsContent||c,classNameGenerator:e.noEventsClassNames,didMount:e.noEventsDidMount,willUnmount:e.noEventsWillUnmount},e=>a.createElement(e,{elTag:"div",elClasses:["fc-list-empty-cushion"]}))}renderSegList(e,t){let{theme:r,options:s}=this.context,{timeHeaderId:o,eventHeaderId:d,dateHeaderIdRoot:c}=this.state,f=function(e){let t,n,a=[];for(t=0;t<e.length;t+=1)n=e[t],(a[n.dayIndex]||(a[n.dayIndex]=[])).push(n);return a}(e);return a.createElement(n.NowTimer,{unit:"day"},(e,g)=>{let u=[];for(let r=0;r<f.length;r+=1){let m=f[r];if(m){let f=n.formatDayString(t[r]),h=c+"-"+f;u.push(a.createElement(i,{key:f,cellId:h,dayDate:t[r],todayRange:g})),m=n.sortEventSegs(m,s.eventOrder);for(let t of m)u.push(a.createElement(l,Object.assign({key:f+":"+t.eventRange.instance.instanceId,seg:t,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:!1,timeHeaderId:o,eventHeaderId:d,dateHeaderId:h},n.getSegMeta(t,g,e))))}}return a.createElement("table",{className:"fc-list-table "+r.getClass("table")},a.createElement("thead",null,a.createElement("tr",null,a.createElement("th",{scope:"col",id:o},s.timeHint),a.createElement("th",{scope:"col","aria-hidden":!0}),a.createElement("th",{scope:"col",id:d},s.eventHint))),a.createElement("tbody",null,u))})}_eventStoreToSegs(e,t,a){return this.eventRangesToSegs(n.sliceEventStore(e,t,this.props.dateProfile.activeRange,this.context.options.nextDayThreshold).fg,a)}eventRangesToSegs(e,t){let n=[];for(let a of e)n.push(...this.eventRangeToSegs(a,t));return n}eventRangeToSegs(e,t){let a,i,r,{dateEnv:s}=this.context,{nextDayThreshold:l}=this.context.options,o=e.range,d=e.def.allDay,c=[];for(a=0;a<t.length;a+=1)if(i=n.intersectRanges(o,t[a]),i&&(r={component:this,eventRange:e,start:i.start,end:i.end,isStart:e.isStart&&i.start.valueOf()===o.start.valueOf(),isEnd:e.isEnd&&i.end.valueOf()===o.end.valueOf(),dayIndex:a},c.push(r),!r.isEnd&&!d&&a+1<t.length&&o.end<s.add(t[a+1].start,l))){r.end=o.end,r.isEnd=!0;break}return c}}function c(e){return e.text}function f(e){let t=n.startOfDay(e.renderRange.start),a=e.renderRange.end,i=[],r=[];for(;t<a;)i.push(t),r.push({start:t,end:n.addDays(t,1)}),t=n.addDays(t,1);return{dayDates:i,dayRanges:r}}const g={listDayFormat:u,listDaySideFormat:u,noEventsClassNames:n.identity,noEventsContent:n.identity,noEventsDidMount:n.identity,noEventsWillUnmount:n.identity};function u(e){return!1===e?null:n.createFormatter(e)}n.injectStyles(':root{--fc-list-event-dot-width:10px;--fc-list-event-hover-bg-color:#f5f5f5}.fc-theme-standard .fc-list{border:1px solid var(--fc-border-color)}.fc .fc-list-empty{align-items:center;background-color:var(--fc-neutral-bg-color);display:flex;height:100%;justify-content:center}.fc .fc-list-empty-cushion{margin:5em 0}.fc .fc-list-table{border-style:hidden;width:100%}.fc .fc-list-table tr>*{border-left:0;border-right:0}.fc .fc-list-sticky .fc-list-day>*{background:var(--fc-page-bg-color);position:sticky;top:0}.fc .fc-list-table thead{left:-10000px;position:absolute}.fc .fc-list-table tbody>tr:first-child th{border-top:0}.fc .fc-list-table th{padding:0}.fc .fc-list-day-cushion,.fc .fc-list-table td{padding:8px 14px}.fc .fc-list-day-cushion:after{clear:both;content:"";display:table}.fc-theme-standard .fc-list-day-cushion{background-color:var(--fc-neutral-bg-color)}.fc-direction-ltr .fc-list-day-text,.fc-direction-rtl .fc-list-day-side-text{float:left}.fc-direction-ltr .fc-list-day-side-text,.fc-direction-rtl .fc-list-day-text{float:right}.fc-direction-ltr .fc-list-table .fc-list-event-graphic{padding-right:0}.fc-direction-rtl .fc-list-table .fc-list-event-graphic{padding-left:0}.fc .fc-list-event.fc-event-forced-url{cursor:pointer}.fc .fc-list-event:hover td{background-color:var(--fc-list-event-hover-bg-color)}.fc .fc-list-event-graphic,.fc .fc-list-event-time{white-space:nowrap;width:1px}.fc .fc-list-event-dot{border:calc(var(--fc-list-event-dot-width)/2) solid var(--fc-event-border-color);border-radius:calc(var(--fc-list-event-dot-width)/2);box-sizing:content-box;display:inline-block;height:0;width:0}.fc .fc-list-event-title a{color:inherit;text-decoration:none}.fc .fc-list-event.fc-event-forced-url:hover a{text-decoration:underline}');var m=t.createPlugin({name:"@fullcalendar/list",optionRefiners:g,views:{list:{component:d,buttonTextKey:"list",listDayFormat:{month:"long",day:"numeric",year:"numeric"}},listDay:{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}},listWeek:{type:"list",duration:{weeks:1},listDayFormat:{weekday:"long"},listDaySideFormat:{month:"long",day:"numeric",year:"numeric"}},listMonth:{type:"list",duration:{month:1},listDaySideFormat:{weekday:"long"}},listYear:{type:"list",duration:{year:1},listDaySideFormat:{weekday:"long"}}}}),h={__proto__:null,ListView:d};return t.globalPlugins.push(m),e.Internal=h,e.default=m,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,FullCalendar.Preact); \ No newline at end of file
diff --git a/library/fullcalendar/packages/list/main.css b/library/fullcalendar/packages/list/main.css
deleted file mode 100644
index 6af9bb70c..000000000
--- a/library/fullcalendar/packages/list/main.css
+++ /dev/null
@@ -1,118 +0,0 @@
-/* List View
---------------------------------------------------------------------------------------------------*/
-/* possibly reusable */
-.fc-event-dot {
- display: inline-block;
- width: 10px;
- height: 10px;
- border-radius: 5px;
-}
-
-/* view wrapper */
-.fc-rtl .fc-list-view {
- direction: rtl;
- /* unlike core views, leverage browser RTL */
-}
-
-.fc-list-view {
- border-width: 1px;
- border-style: solid;
-}
-
-/* table resets */
-.fc .fc-list-table {
- table-layout: auto;
- /* for shrinkwrapping cell content */
-}
-
-.fc-list-table td {
- border-width: 1px 0 0;
- padding: 8px 14px;
-}
-
-.fc-list-table tr:first-child td {
- border-top-width: 0;
-}
-
-/* day headings with the list */
-.fc-list-heading {
- border-bottom-width: 1px;
-}
-
-.fc-list-heading td {
- font-weight: bold;
-}
-
-.fc-ltr .fc-list-heading-main {
- float: left;
-}
-
-.fc-ltr .fc-list-heading-alt {
- float: right;
-}
-
-.fc-rtl .fc-list-heading-main {
- float: right;
-}
-
-.fc-rtl .fc-list-heading-alt {
- float: left;
-}
-
-/* event list items */
-.fc-list-item.fc-has-url {
- cursor: pointer;
- /* whole row will be clickable */
-}
-
-.fc-list-item-marker,
-.fc-list-item-time {
- white-space: nowrap;
- width: 1px;
-}
-
-/* make the dot closer to the event title */
-.fc-ltr .fc-list-item-marker {
- padding-right: 0;
-}
-
-.fc-rtl .fc-list-item-marker {
- padding-left: 0;
-}
-
-.fc-list-item-title a {
- /* every event title cell has an <a> tag */
- text-decoration: none;
- color: inherit;
-}
-
-.fc-list-item-title a[href]:hover {
- /* hover effect only on titles with hrefs */
- text-decoration: underline;
-}
-
-/* message when no events */
-.fc-list-empty-wrap2 {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-
-.fc-list-empty-wrap1 {
- width: 100%;
- height: 100%;
- display: table;
-}
-
-.fc-list-empty {
- display: table-cell;
- vertical-align: middle;
- text-align: center;
-}
-
-.fc-unthemed .fc-list-empty {
- /* theme will provide own background */
- background-color: #eee;
-}
diff --git a/library/fullcalendar/packages/list/main.d.ts b/library/fullcalendar/packages/list/main.d.ts
deleted file mode 100644
index ecbb49679..000000000
--- a/library/fullcalendar/packages/list/main.d.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../@fullcalendar/core
-
-declare module '@fullcalendar/list' {
- import ListView from '@fullcalendar/list/ListView';
- export { ListView };
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
-}
-
-declare module '@fullcalendar/list/ListView' {
- import { View, ViewProps, ScrollComponent, DateMarker, DateRange, ComponentContext, EventUiHash, EventRenderRange, EventStore, Seg, ViewSpec } from '@fullcalendar/core';
- export { ListView as default, ListView };
- class ListView extends View {
- scroller: ScrollComponent;
- contentEl: HTMLElement;
- dayDates: DateMarker[];
- constructor(viewSpec: ViewSpec, parentEl: HTMLElement);
- firstContext(context: ComponentContext): void;
- render(props: ViewProps, context: ComponentContext): void;
- destroy(): void;
- _renderSkeleton(context: ComponentContext): void;
- _unrenderSkeleton(): void;
- updateSize(isResize: any, viewHeight: any, isAuto: any): void;
- computeScrollerHeight(viewHeight: any): number;
- _eventStoreToSegs(eventStore: EventStore, eventUiBases: EventUiHash, dayRanges: DateRange[]): Seg[];
- eventRangesToSegs(eventRanges: EventRenderRange[], dayRanges: DateRange[]): any[];
- eventRangeToSegs(eventRange: EventRenderRange, dayRanges: DateRange[]): any[];
- renderEmptyMessage(): void;
- renderSegList(allSegs: any): void;
- groupSegsByDay(segs: any): any[];
- buildDayHeaderRow(dayDate: any): HTMLTableRowElement;
- }
-}
-
diff --git a/library/fullcalendar/packages/list/main.esm.js b/library/fullcalendar/packages/list/main.esm.js
deleted file mode 100644
index a03226977..000000000
--- a/library/fullcalendar/packages/list/main.esm.js
+++ /dev/null
@@ -1,348 +0,0 @@
-/*!
-FullCalendar List View Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { getAllDayHtml, isMultiDayRange, htmlEscape, FgEventRenderer, memoize, memoizeRendering, ScrollComponent, subtractInnerElHeight, sliceEventStore, intersectRanges, htmlToElement, createFormatter, createElement, buildGotoAnchorHtml, View, startOfDay, addDays, createPlugin } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var ListEventRenderer = /** @class */ (function (_super) {
- __extends(ListEventRenderer, _super);
- function ListEventRenderer(listView) {
- var _this = _super.call(this) || this;
- _this.listView = listView;
- return _this;
- }
- ListEventRenderer.prototype.attachSegs = function (segs) {
- if (!segs.length) {
- this.listView.renderEmptyMessage();
- }
- else {
- this.listView.renderSegList(segs);
- }
- };
- ListEventRenderer.prototype.detachSegs = function () {
- };
- // generates the HTML for a single event row
- ListEventRenderer.prototype.renderSegHtml = function (seg) {
- var _a = this.context, theme = _a.theme, options = _a.options;
- var eventRange = seg.eventRange;
- var eventDef = eventRange.def;
- var eventInstance = eventRange.instance;
- var eventUi = eventRange.ui;
- var url = eventDef.url;
- var classes = ['fc-list-item'].concat(eventUi.classNames);
- var bgColor = eventUi.backgroundColor;
- var timeHtml;
- if (eventDef.allDay) {
- timeHtml = getAllDayHtml(options);
- }
- else if (isMultiDayRange(eventRange.range)) {
- if (seg.isStart) {
- timeHtml = htmlEscape(this._getTimeText(eventInstance.range.start, seg.end, false // allDay
- ));
- }
- else if (seg.isEnd) {
- timeHtml = htmlEscape(this._getTimeText(seg.start, eventInstance.range.end, false // allDay
- ));
- }
- else { // inner segment that lasts the whole day
- timeHtml = getAllDayHtml(options);
- }
- }
- else {
- // Display the normal time text for the *event's* times
- timeHtml = htmlEscape(this.getTimeText(eventRange));
- }
- if (url) {
- classes.push('fc-has-url');
- }
- return '<tr class="' + classes.join(' ') + '">' +
- (this.displayEventTime ?
- '<td class="fc-list-item-time ' + theme.getClass('widgetContent') + '">' +
- (timeHtml || '') +
- '</td>' :
- '') +
- '<td class="fc-list-item-marker ' + theme.getClass('widgetContent') + '">' +
- '<span class="fc-event-dot"' +
- (bgColor ?
- ' style="background-color:' + bgColor + '"' :
- '') +
- '></span>' +
- '</td>' +
- '<td class="fc-list-item-title ' + theme.getClass('widgetContent') + '">' +
- '<a' + (url ? ' href="' + htmlEscape(url) + '"' : '') + '>' +
- htmlEscape(eventDef.title || '') +
- '</a>' +
- '</td>' +
- '</tr>';
- };
- // like "4:00am"
- ListEventRenderer.prototype.computeEventTimeFormat = function () {
- return {
- hour: 'numeric',
- minute: '2-digit',
- meridiem: 'short'
- };
- };
- return ListEventRenderer;
-}(FgEventRenderer));
-
-/*
-Responsible for the scroller, and forwarding event-related actions into the "grid".
-*/
-var ListView = /** @class */ (function (_super) {
- __extends(ListView, _super);
- function ListView(viewSpec, parentEl) {
- var _this = _super.call(this, viewSpec, parentEl) || this;
- _this.computeDateVars = memoize(computeDateVars);
- _this.eventStoreToSegs = memoize(_this._eventStoreToSegs);
- _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this);
- _this.renderContent = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [_this.renderSkeleton]);
- return _this;
- }
- ListView.prototype.firstContext = function (context) {
- context.calendar.registerInteractiveComponent(this, {
- el: this.el
- // TODO: make aware that it doesn't do Hits
- });
- };
- ListView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context);
- var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges;
- this.dayDates = dayDates;
- this.renderSkeleton(context);
- this.renderContent(context, this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges));
- };
- ListView.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderSkeleton.unrender();
- this.renderContent.unrender();
- this.context.calendar.unregisterInteractiveComponent(this);
- };
- ListView.prototype._renderSkeleton = function (context) {
- var theme = context.theme;
- this.el.classList.add('fc-list-view');
- var listViewClassNames = (theme.getClass('listView') || '').split(' '); // wish we didn't have to do this
- for (var _i = 0, listViewClassNames_1 = listViewClassNames; _i < listViewClassNames_1.length; _i++) {
- var listViewClassName = listViewClassNames_1[_i];
- if (listViewClassName) { // in case input was empty string
- this.el.classList.add(listViewClassName);
- }
- }
- this.scroller = new ScrollComponent('hidden', // overflow x
- 'auto' // overflow y
- );
- this.el.appendChild(this.scroller.el);
- this.contentEl = this.scroller.el; // shortcut
- };
- ListView.prototype._unrenderSkeleton = function () {
- // TODO: remove classNames
- this.scroller.destroy(); // will remove the Grid too
- };
- ListView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
- _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto);
- this.eventRenderer.computeSizes(isResize);
- this.eventRenderer.assignSizes(isResize);
- this.scroller.clear(); // sets height to 'auto' and clears overflow
- if (!isAuto) {
- this.scroller.setHeight(this.computeScrollerHeight(viewHeight));
- }
- };
- ListView.prototype.computeScrollerHeight = function (viewHeight) {
- return viewHeight -
- subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
- };
- ListView.prototype._eventStoreToSegs = function (eventStore, eventUiBases, dayRanges) {
- return this.eventRangesToSegs(sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.nextDayThreshold).fg, dayRanges);
- };
- ListView.prototype.eventRangesToSegs = function (eventRanges, dayRanges) {
- var segs = [];
- for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
- var eventRange = eventRanges_1[_i];
- segs.push.apply(segs, this.eventRangeToSegs(eventRange, dayRanges));
- }
- return segs;
- };
- ListView.prototype.eventRangeToSegs = function (eventRange, dayRanges) {
- var _a = this.context, dateEnv = _a.dateEnv, nextDayThreshold = _a.nextDayThreshold;
- var range = eventRange.range;
- var allDay = eventRange.def.allDay;
- var dayIndex;
- var segRange;
- var seg;
- var segs = [];
- for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {
- segRange = intersectRanges(range, dayRanges[dayIndex]);
- if (segRange) {
- seg = {
- component: this,
- eventRange: eventRange,
- start: segRange.start,
- end: segRange.end,
- isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),
- isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),
- dayIndex: dayIndex
- };
- segs.push(seg);
- // detect when range won't go fully into the next day,
- // and mutate the latest seg to the be the end.
- if (!seg.isEnd && !allDay &&
- dayIndex + 1 < dayRanges.length &&
- range.end <
- dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {
- seg.end = range.end;
- seg.isEnd = true;
- break;
- }
- }
- }
- return segs;
- };
- ListView.prototype.renderEmptyMessage = function () {
- this.contentEl.innerHTML =
- '<div class="fc-list-empty-wrap2">' + // TODO: try less wraps
- '<div class="fc-list-empty-wrap1">' +
- '<div class="fc-list-empty">' +
- htmlEscape(this.context.options.noEventsMessage) +
- '</div>' +
- '</div>' +
- '</div>';
- };
- // called by ListEventRenderer
- ListView.prototype.renderSegList = function (allSegs) {
- var theme = this.context.theme;
- var segsByDay = this.groupSegsByDay(allSegs); // sparse array
- var dayIndex;
- var daySegs;
- var i;
- var tableEl = htmlToElement('<table class="fc-list-table ' + theme.getClass('tableList') + '"><tbody></tbody></table>');
- var tbodyEl = tableEl.querySelector('tbody');
- for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {
- daySegs = segsByDay[dayIndex];
- if (daySegs) { // sparse array, so might be undefined
- // append a day header
- tbodyEl.appendChild(this.buildDayHeaderRow(this.dayDates[dayIndex]));
- daySegs = this.eventRenderer.sortEventSegs(daySegs);
- for (i = 0; i < daySegs.length; i++) {
- tbodyEl.appendChild(daySegs[i].el); // append event row
- }
- }
- }
- this.contentEl.innerHTML = '';
- this.contentEl.appendChild(tableEl);
- };
- // Returns a sparse array of arrays, segs grouped by their dayIndex
- ListView.prototype.groupSegsByDay = function (segs) {
- var segsByDay = []; // sparse array
- var i;
- var seg;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))
- .push(seg);
- }
- return segsByDay;
- };
- // generates the HTML for the day headers that live amongst the event rows
- ListView.prototype.buildDayHeaderRow = function (dayDate) {
- var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
- var mainFormat = createFormatter(options.listDayFormat); // TODO: cache
- var altFormat = createFormatter(options.listDayAltFormat); // TODO: cache
- return createElement('tr', {
- className: 'fc-list-heading',
- 'data-date': dateEnv.formatIso(dayDate, { omitTime: true })
- }, '<td class="' + (theme.getClass('tableListHeading') ||
- theme.getClass('widgetHeader')) + '" colspan="3">' +
- (mainFormat ?
- buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-main' }, htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML
- ) :
- '') +
- (altFormat ?
- buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-alt' }, htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML
- ) :
- '') +
- '</td>');
- };
- return ListView;
-}(View));
-ListView.prototype.fgSegSelector = '.fc-list-item'; // which elements accept event actions
-function computeDateVars(dateProfile) {
- var dayStart = startOfDay(dateProfile.renderRange.start);
- var viewEnd = dateProfile.renderRange.end;
- var dayDates = [];
- var dayRanges = [];
- while (dayStart < viewEnd) {
- dayDates.push(dayStart);
- dayRanges.push({
- start: dayStart,
- end: addDays(dayStart, 1)
- });
- dayStart = addDays(dayStart, 1);
- }
- return { dayDates: dayDates, dayRanges: dayRanges };
-}
-
-var main = createPlugin({
- views: {
- list: {
- class: ListView,
- buttonTextKey: 'list',
- listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' } // like "January 1, 2016"
- },
- listDay: {
- type: 'list',
- duration: { days: 1 },
- listDayFormat: { weekday: 'long' } // day-of-week is all we need. full date is probably in header
- },
- listWeek: {
- type: 'list',
- duration: { weeks: 1 },
- listDayFormat: { weekday: 'long' },
- listDayAltFormat: { month: 'long', day: 'numeric', year: 'numeric' }
- },
- listMonth: {
- type: 'list',
- duration: { month: 1 },
- listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have
- },
- listYear: {
- type: 'list',
- duration: { year: 1 },
- listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have
- }
- }
-});
-
-export default main;
-export { ListView };
diff --git a/library/fullcalendar/packages/list/main.js b/library/fullcalendar/packages/list/main.js
deleted file mode 100644
index 84b12341e..000000000
--- a/library/fullcalendar/packages/list/main.js
+++ /dev/null
@@ -1,356 +0,0 @@
-/*!
-FullCalendar List View Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core')) :
- typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core'], factory) :
- (global = global || self, factory(global.FullCalendarList = {}, global.FullCalendar));
-}(this, function (exports, core) { 'use strict';
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
- /* global Reflect, Promise */
-
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
-
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
-
- var ListEventRenderer = /** @class */ (function (_super) {
- __extends(ListEventRenderer, _super);
- function ListEventRenderer(listView) {
- var _this = _super.call(this) || this;
- _this.listView = listView;
- return _this;
- }
- ListEventRenderer.prototype.attachSegs = function (segs) {
- if (!segs.length) {
- this.listView.renderEmptyMessage();
- }
- else {
- this.listView.renderSegList(segs);
- }
- };
- ListEventRenderer.prototype.detachSegs = function () {
- };
- // generates the HTML for a single event row
- ListEventRenderer.prototype.renderSegHtml = function (seg) {
- var _a = this.context, theme = _a.theme, options = _a.options;
- var eventRange = seg.eventRange;
- var eventDef = eventRange.def;
- var eventInstance = eventRange.instance;
- var eventUi = eventRange.ui;
- var url = eventDef.url;
- var classes = ['fc-list-item'].concat(eventUi.classNames);
- var bgColor = eventUi.backgroundColor;
- var timeHtml;
- if (eventDef.allDay) {
- timeHtml = core.getAllDayHtml(options);
- }
- else if (core.isMultiDayRange(eventRange.range)) {
- if (seg.isStart) {
- timeHtml = core.htmlEscape(this._getTimeText(eventInstance.range.start, seg.end, false // allDay
- ));
- }
- else if (seg.isEnd) {
- timeHtml = core.htmlEscape(this._getTimeText(seg.start, eventInstance.range.end, false // allDay
- ));
- }
- else { // inner segment that lasts the whole day
- timeHtml = core.getAllDayHtml(options);
- }
- }
- else {
- // Display the normal time text for the *event's* times
- timeHtml = core.htmlEscape(this.getTimeText(eventRange));
- }
- if (url) {
- classes.push('fc-has-url');
- }
- return '<tr class="' + classes.join(' ') + '">' +
- (this.displayEventTime ?
- '<td class="fc-list-item-time ' + theme.getClass('widgetContent') + '">' +
- (timeHtml || '') +
- '</td>' :
- '') +
- '<td class="fc-list-item-marker ' + theme.getClass('widgetContent') + '">' +
- '<span class="fc-event-dot"' +
- (bgColor ?
- ' style="background-color:' + bgColor + '"' :
- '') +
- '></span>' +
- '</td>' +
- '<td class="fc-list-item-title ' + theme.getClass('widgetContent') + '">' +
- '<a' + (url ? ' href="' + core.htmlEscape(url) + '"' : '') + '>' +
- core.htmlEscape(eventDef.title || '') +
- '</a>' +
- '</td>' +
- '</tr>';
- };
- // like "4:00am"
- ListEventRenderer.prototype.computeEventTimeFormat = function () {
- return {
- hour: 'numeric',
- minute: '2-digit',
- meridiem: 'short'
- };
- };
- return ListEventRenderer;
- }(core.FgEventRenderer));
-
- /*
- Responsible for the scroller, and forwarding event-related actions into the "grid".
- */
- var ListView = /** @class */ (function (_super) {
- __extends(ListView, _super);
- function ListView(viewSpec, parentEl) {
- var _this = _super.call(this, viewSpec, parentEl) || this;
- _this.computeDateVars = core.memoize(computeDateVars);
- _this.eventStoreToSegs = core.memoize(_this._eventStoreToSegs);
- _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- var eventRenderer = _this.eventRenderer = new ListEventRenderer(_this);
- _this.renderContent = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [_this.renderSkeleton]);
- return _this;
- }
- ListView.prototype.firstContext = function (context) {
- context.calendar.registerInteractiveComponent(this, {
- el: this.el
- // TODO: make aware that it doesn't do Hits
- });
- };
- ListView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context);
- var _a = this.computeDateVars(props.dateProfile), dayDates = _a.dayDates, dayRanges = _a.dayRanges;
- this.dayDates = dayDates;
- this.renderSkeleton(context);
- this.renderContent(context, this.eventStoreToSegs(props.eventStore, props.eventUiBases, dayRanges));
- };
- ListView.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderSkeleton.unrender();
- this.renderContent.unrender();
- this.context.calendar.unregisterInteractiveComponent(this);
- };
- ListView.prototype._renderSkeleton = function (context) {
- var theme = context.theme;
- this.el.classList.add('fc-list-view');
- var listViewClassNames = (theme.getClass('listView') || '').split(' '); // wish we didn't have to do this
- for (var _i = 0, listViewClassNames_1 = listViewClassNames; _i < listViewClassNames_1.length; _i++) {
- var listViewClassName = listViewClassNames_1[_i];
- if (listViewClassName) { // in case input was empty string
- this.el.classList.add(listViewClassName);
- }
- }
- this.scroller = new core.ScrollComponent('hidden', // overflow x
- 'auto' // overflow y
- );
- this.el.appendChild(this.scroller.el);
- this.contentEl = this.scroller.el; // shortcut
- };
- ListView.prototype._unrenderSkeleton = function () {
- // TODO: remove classNames
- this.scroller.destroy(); // will remove the Grid too
- };
- ListView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
- _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto);
- this.eventRenderer.computeSizes(isResize);
- this.eventRenderer.assignSizes(isResize);
- this.scroller.clear(); // sets height to 'auto' and clears overflow
- if (!isAuto) {
- this.scroller.setHeight(this.computeScrollerHeight(viewHeight));
- }
- };
- ListView.prototype.computeScrollerHeight = function (viewHeight) {
- return viewHeight -
- core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
- };
- ListView.prototype._eventStoreToSegs = function (eventStore, eventUiBases, dayRanges) {
- return this.eventRangesToSegs(core.sliceEventStore(eventStore, eventUiBases, this.props.dateProfile.activeRange, this.context.nextDayThreshold).fg, dayRanges);
- };
- ListView.prototype.eventRangesToSegs = function (eventRanges, dayRanges) {
- var segs = [];
- for (var _i = 0, eventRanges_1 = eventRanges; _i < eventRanges_1.length; _i++) {
- var eventRange = eventRanges_1[_i];
- segs.push.apply(segs, this.eventRangeToSegs(eventRange, dayRanges));
- }
- return segs;
- };
- ListView.prototype.eventRangeToSegs = function (eventRange, dayRanges) {
- var _a = this.context, dateEnv = _a.dateEnv, nextDayThreshold = _a.nextDayThreshold;
- var range = eventRange.range;
- var allDay = eventRange.def.allDay;
- var dayIndex;
- var segRange;
- var seg;
- var segs = [];
- for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {
- segRange = core.intersectRanges(range, dayRanges[dayIndex]);
- if (segRange) {
- seg = {
- component: this,
- eventRange: eventRange,
- start: segRange.start,
- end: segRange.end,
- isStart: eventRange.isStart && segRange.start.valueOf() === range.start.valueOf(),
- isEnd: eventRange.isEnd && segRange.end.valueOf() === range.end.valueOf(),
- dayIndex: dayIndex
- };
- segs.push(seg);
- // detect when range won't go fully into the next day,
- // and mutate the latest seg to the be the end.
- if (!seg.isEnd && !allDay &&
- dayIndex + 1 < dayRanges.length &&
- range.end <
- dateEnv.add(dayRanges[dayIndex + 1].start, nextDayThreshold)) {
- seg.end = range.end;
- seg.isEnd = true;
- break;
- }
- }
- }
- return segs;
- };
- ListView.prototype.renderEmptyMessage = function () {
- this.contentEl.innerHTML =
- '<div class="fc-list-empty-wrap2">' + // TODO: try less wraps
- '<div class="fc-list-empty-wrap1">' +
- '<div class="fc-list-empty">' +
- core.htmlEscape(this.context.options.noEventsMessage) +
- '</div>' +
- '</div>' +
- '</div>';
- };
- // called by ListEventRenderer
- ListView.prototype.renderSegList = function (allSegs) {
- var theme = this.context.theme;
- var segsByDay = this.groupSegsByDay(allSegs); // sparse array
- var dayIndex;
- var daySegs;
- var i;
- var tableEl = core.htmlToElement('<table class="fc-list-table ' + theme.getClass('tableList') + '"><tbody></tbody></table>');
- var tbodyEl = tableEl.querySelector('tbody');
- for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {
- daySegs = segsByDay[dayIndex];
- if (daySegs) { // sparse array, so might be undefined
- // append a day header
- tbodyEl.appendChild(this.buildDayHeaderRow(this.dayDates[dayIndex]));
- daySegs = this.eventRenderer.sortEventSegs(daySegs);
- for (i = 0; i < daySegs.length; i++) {
- tbodyEl.appendChild(daySegs[i].el); // append event row
- }
- }
- }
- this.contentEl.innerHTML = '';
- this.contentEl.appendChild(tableEl);
- };
- // Returns a sparse array of arrays, segs grouped by their dayIndex
- ListView.prototype.groupSegsByDay = function (segs) {
- var segsByDay = []; // sparse array
- var i;
- var seg;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))
- .push(seg);
- }
- return segsByDay;
- };
- // generates the HTML for the day headers that live amongst the event rows
- ListView.prototype.buildDayHeaderRow = function (dayDate) {
- var _a = this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
- var mainFormat = core.createFormatter(options.listDayFormat); // TODO: cache
- var altFormat = core.createFormatter(options.listDayAltFormat); // TODO: cache
- return core.createElement('tr', {
- className: 'fc-list-heading',
- 'data-date': dateEnv.formatIso(dayDate, { omitTime: true })
- }, '<td class="' + (theme.getClass('tableListHeading') ||
- theme.getClass('widgetHeader')) + '" colspan="3">' +
- (mainFormat ?
- core.buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-main' }, core.htmlEscape(dateEnv.format(dayDate, mainFormat)) // inner HTML
- ) :
- '') +
- (altFormat ?
- core.buildGotoAnchorHtml(options, dateEnv, dayDate, { 'class': 'fc-list-heading-alt' }, core.htmlEscape(dateEnv.format(dayDate, altFormat)) // inner HTML
- ) :
- '') +
- '</td>');
- };
- return ListView;
- }(core.View));
- ListView.prototype.fgSegSelector = '.fc-list-item'; // which elements accept event actions
- function computeDateVars(dateProfile) {
- var dayStart = core.startOfDay(dateProfile.renderRange.start);
- var viewEnd = dateProfile.renderRange.end;
- var dayDates = [];
- var dayRanges = [];
- while (dayStart < viewEnd) {
- dayDates.push(dayStart);
- dayRanges.push({
- start: dayStart,
- end: core.addDays(dayStart, 1)
- });
- dayStart = core.addDays(dayStart, 1);
- }
- return { dayDates: dayDates, dayRanges: dayRanges };
- }
-
- var main = core.createPlugin({
- views: {
- list: {
- class: ListView,
- buttonTextKey: 'list',
- listDayFormat: { month: 'long', day: 'numeric', year: 'numeric' } // like "January 1, 2016"
- },
- listDay: {
- type: 'list',
- duration: { days: 1 },
- listDayFormat: { weekday: 'long' } // day-of-week is all we need. full date is probably in header
- },
- listWeek: {
- type: 'list',
- duration: { weeks: 1 },
- listDayFormat: { weekday: 'long' },
- listDayAltFormat: { month: 'long', day: 'numeric', year: 'numeric' }
- },
- listMonth: {
- type: 'list',
- duration: { month: 1 },
- listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have
- },
- listYear: {
- type: 'list',
- duration: { year: 1 },
- listDayAltFormat: { weekday: 'long' } // day-of-week is nice-to-have
- }
- }
- });
-
- exports.ListView = ListView;
- exports.default = main;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/list/main.min.css b/library/fullcalendar/packages/list/main.min.css
deleted file mode 100644
index 18446f442..000000000
--- a/library/fullcalendar/packages/list/main.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.fc-event-dot{display:inline-block;width:10px;height:10px;border-radius:5px}.fc-rtl .fc-list-view{direction:rtl}.fc-list-view{border-width:1px;border-style:solid}.fc .fc-list-table{table-layout:auto}.fc-list-table td{border-width:1px 0 0;padding:8px 14px}.fc-list-table tr:first-child td{border-top-width:0}.fc-list-heading{border-bottom-width:1px}.fc-list-heading td{font-weight:700}.fc-ltr .fc-list-heading-main{float:left}.fc-ltr .fc-list-heading-alt,.fc-rtl .fc-list-heading-main{float:right}.fc-rtl .fc-list-heading-alt{float:left}.fc-list-item.fc-has-url{cursor:pointer}.fc-list-item-marker,.fc-list-item-time{white-space:nowrap;width:1px}.fc-ltr .fc-list-item-marker{padding-right:0}.fc-rtl .fc-list-item-marker{padding-left:0}.fc-list-item-title a{text-decoration:none;color:inherit}.fc-list-item-title a[href]:hover{text-decoration:underline}.fc-list-empty-wrap2{position:absolute;top:0;left:0;right:0;bottom:0}.fc-list-empty-wrap1{width:100%;height:100%;display:table}.fc-list-empty{display:table-cell;vertical-align:middle;text-align:center}.fc-unthemed .fc-list-empty{background-color:#eee} \ No newline at end of file
diff --git a/library/fullcalendar/packages/list/main.min.js b/library/fullcalendar/packages/list/main.min.js
deleted file mode 100644
index a765dd139..000000000
--- a/library/fullcalendar/packages/list/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar List View Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core"],t):t((e=e||self).FullCalendarList={},e.FullCalendar)}(this,(function(e,t){"use strict";var n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};function r(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var s=function(e){function n(t){var n=e.call(this)||this;return n.listView=t,n}return r(n,e),n.prototype.attachSegs=function(e){e.length?this.listView.renderSegList(e):this.listView.renderEmptyMessage()},n.prototype.detachSegs=function(){},n.prototype.renderSegHtml=function(e){var n,r=this.context,s=r.theme,o=r.options,i=e.eventRange,a=i.def,l=i.instance,d=i.ui,c=a.url,p=["fc-list-item"].concat(d.classNames),h=d.backgroundColor;return n=a.allDay?t.getAllDayHtml(o):t.isMultiDayRange(i.range)?e.isStart?t.htmlEscape(this._getTimeText(l.range.start,e.end,!1)):e.isEnd?t.htmlEscape(this._getTimeText(e.start,l.range.end,!1)):t.getAllDayHtml(o):t.htmlEscape(this.getTimeText(i)),c&&p.push("fc-has-url"),'<tr class="'+p.join(" ")+'">'+(this.displayEventTime?'<td class="fc-list-item-time '+s.getClass("widgetContent")+'">'+(n||"")+"</td>":"")+'<td class="fc-list-item-marker '+s.getClass("widgetContent")+'"><span class="fc-event-dot"'+(h?' style="background-color:'+h+'"':"")+'></span></td><td class="fc-list-item-title '+s.getClass("widgetContent")+'"><a'+(c?' href="'+t.htmlEscape(c)+'"':"")+">"+t.htmlEscape(a.title||"")+"</a></td></tr>"},n.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",meridiem:"short"}},n}(t.FgEventRenderer),o=function(e){function n(n,r){var o=e.call(this,n,r)||this;o.computeDateVars=t.memoize(i),o.eventStoreToSegs=t.memoize(o._eventStoreToSegs),o.renderSkeleton=t.memoizeRendering(o._renderSkeleton,o._unrenderSkeleton);var a=o.eventRenderer=new s(o);return o.renderContent=t.memoizeRendering(a.renderSegs.bind(a),a.unrender.bind(a),[o.renderSkeleton]),o}return r(n,e),n.prototype.firstContext=function(e){e.calendar.registerInteractiveComponent(this,{el:this.el})},n.prototype.render=function(t,n){e.prototype.render.call(this,t,n);var r=this.computeDateVars(t.dateProfile),s=r.dayDates,o=r.dayRanges;this.dayDates=s,this.renderSkeleton(n),this.renderContent(n,this.eventStoreToSegs(t.eventStore,t.eventUiBases,o))},n.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSkeleton.unrender(),this.renderContent.unrender(),this.context.calendar.unregisterInteractiveComponent(this)},n.prototype._renderSkeleton=function(e){var n=e.theme;this.el.classList.add("fc-list-view");for(var r=0,s=(n.getClass("listView")||"").split(" ");r<s.length;r++){var o=s[r];o&&this.el.classList.add(o)}this.scroller=new t.ScrollComponent("hidden","auto"),this.el.appendChild(this.scroller.el),this.contentEl=this.scroller.el},n.prototype._unrenderSkeleton=function(){this.scroller.destroy()},n.prototype.updateSize=function(t,n,r){e.prototype.updateSize.call(this,t,n,r),this.eventRenderer.computeSizes(t),this.eventRenderer.assignSizes(t),this.scroller.clear(),r||this.scroller.setHeight(this.computeScrollerHeight(n))},n.prototype.computeScrollerHeight=function(e){return e-t.subtractInnerElHeight(this.el,this.scroller.el)},n.prototype._eventStoreToSegs=function(e,n,r){return this.eventRangesToSegs(t.sliceEventStore(e,n,this.props.dateProfile.activeRange,this.context.nextDayThreshold).fg,r)},n.prototype.eventRangesToSegs=function(e,t){for(var n=[],r=0,s=e;r<s.length;r++){var o=s[r];n.push.apply(n,this.eventRangeToSegs(o,t))}return n},n.prototype.eventRangeToSegs=function(e,n){var r,s,o,i=this.context,a=i.dateEnv,l=i.nextDayThreshold,d=e.range,c=e.def.allDay,p=[];for(r=0;r<n.length;r++)if((s=t.intersectRanges(d,n[r]))&&(o={component:this,eventRange:e,start:s.start,end:s.end,isStart:e.isStart&&s.start.valueOf()===d.start.valueOf(),isEnd:e.isEnd&&s.end.valueOf()===d.end.valueOf(),dayIndex:r},p.push(o),!o.isEnd&&!c&&r+1<n.length&&d.end<a.add(n[r+1].start,l))){o.end=d.end,o.isEnd=!0;break}return p},n.prototype.renderEmptyMessage=function(){this.contentEl.innerHTML='<div class="fc-list-empty-wrap2"><div class="fc-list-empty-wrap1"><div class="fc-list-empty">'+t.htmlEscape(this.context.options.noEventsMessage)+"</div></div></div>"},n.prototype.renderSegList=function(e){var n,r,s,o=this.context.theme,i=this.groupSegsByDay(e),a=t.htmlToElement('<table class="fc-list-table '+o.getClass("tableList")+'"><tbody></tbody></table>'),l=a.querySelector("tbody");for(n=0;n<i.length;n++)if(r=i[n])for(l.appendChild(this.buildDayHeaderRow(this.dayDates[n])),r=this.eventRenderer.sortEventSegs(r),s=0;s<r.length;s++)l.appendChild(r[s].el);this.contentEl.innerHTML="",this.contentEl.appendChild(a)},n.prototype.groupSegsByDay=function(e){var t,n,r=[];for(t=0;t<e.length;t++)(r[(n=e[t]).dayIndex]||(r[n.dayIndex]=[])).push(n);return r},n.prototype.buildDayHeaderRow=function(e){var n=this.context,r=n.theme,s=n.dateEnv,o=n.options,i=t.createFormatter(o.listDayFormat),a=t.createFormatter(o.listDayAltFormat);return t.createElement("tr",{className:"fc-list-heading","data-date":s.formatIso(e,{omitTime:!0})},'<td class="'+(r.getClass("tableListHeading")||r.getClass("widgetHeader"))+'" colspan="3">'+(i?t.buildGotoAnchorHtml(o,s,e,{class:"fc-list-heading-main"},t.htmlEscape(s.format(e,i))):"")+(a?t.buildGotoAnchorHtml(o,s,e,{class:"fc-list-heading-alt"},t.htmlEscape(s.format(e,a))):"")+"</td>")},n}(t.View);function i(e){for(var n=t.startOfDay(e.renderRange.start),r=e.renderRange.end,s=[],o=[];n<r;)s.push(n),o.push({start:n,end:t.addDays(n,1)}),n=t.addDays(n,1);return{dayDates:s,dayRanges:o}}o.prototype.fgSegSelector=".fc-list-item";var a=t.createPlugin({views:{list:{class:o,buttonTextKey:"list",listDayFormat:{month:"long",day:"numeric",year:"numeric"}},listDay:{type:"list",duration:{days:1},listDayFormat:{weekday:"long"}},listWeek:{type:"list",duration:{weeks:1},listDayFormat:{weekday:"long"},listDayAltFormat:{month:"long",day:"numeric",year:"numeric"}},listMonth:{type:"list",duration:{month:1},listDayAltFormat:{weekday:"long"}},listYear:{type:"list",duration:{year:1},listDayAltFormat:{weekday:"long"}}}});e.ListView=o,e.default=a,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/list/package.json b/library/fullcalendar/packages/list/package.json
deleted file mode 100644
index 90b0dcde1..000000000
--- a/library/fullcalendar/packages/list/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "@fullcalendar/list",
- "version": "4.4.2",
- "title": "FullCalendar List View Plugin",
- "description": "View your events as a bulleted list",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/list-view",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/luxon/LICENSE.txt b/library/fullcalendar/packages/luxon/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/luxon/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/luxon/README.md b/library/fullcalendar/packages/luxon/README.md
deleted file mode 100644
index 4c42b505e..000000000
--- a/library/fullcalendar/packages/luxon/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar Luxon Plugin
-
-A connector to the Luxon date library
-
-[View the docs &raquo;](https://fullcalendar.io/docs/luxon-plugin)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/luxon/main.d.ts b/library/fullcalendar/packages/luxon/main.d.ts
deleted file mode 100644
index 54f016ddd..000000000
--- a/library/fullcalendar/packages/luxon/main.d.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../luxon
-// ../../../../../@fullcalendar/core
-
-declare module '@fullcalendar/luxon' {
- import { DateTime as LuxonDateTime, Duration as LuxonDuration } from 'luxon';
- import { Calendar, Duration } from '@fullcalendar/core';
- export function toDateTime(date: Date, calendar: Calendar): LuxonDateTime;
- export function toDuration(duration: Duration, calendar: Calendar): LuxonDuration;
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
-}
-
diff --git a/library/fullcalendar/packages/luxon/main.esm.js b/library/fullcalendar/packages/luxon/main.esm.js
deleted file mode 100644
index 43eea0f96..000000000
--- a/library/fullcalendar/packages/luxon/main.esm.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/*!
-FullCalendar Luxon Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { DateTime, Duration } from 'luxon';
-import { createPlugin, Calendar, NamedTimeZoneImpl } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
-};
-
-function toDateTime(date, calendar) {
- if (!(calendar instanceof Calendar)) {
- throw new Error('must supply a Calendar instance');
- }
- return DateTime.fromJSDate(date, {
- zone: calendar.dateEnv.timeZone,
- locale: calendar.dateEnv.locale.codes[0]
- });
-}
-function toDuration(duration, calendar) {
- if (!(calendar instanceof Calendar)) {
- throw new Error('must supply a Calendar instance');
- }
- return Duration.fromObject(__assign({}, duration, { locale: calendar.dateEnv.locale.codes[0] }));
-}
-var LuxonNamedTimeZone = /** @class */ (function (_super) {
- __extends(LuxonNamedTimeZone, _super);
- function LuxonNamedTimeZone() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- LuxonNamedTimeZone.prototype.offsetForArray = function (a) {
- return arrayToLuxon(a, this.timeZoneName).offset;
- };
- LuxonNamedTimeZone.prototype.timestampToArray = function (ms) {
- return luxonToArray(DateTime.fromMillis(ms, {
- zone: this.timeZoneName
- }));
- };
- return LuxonNamedTimeZone;
-}(NamedTimeZoneImpl));
-function formatWithCmdStr(cmdStr, arg) {
- var cmd = parseCmdStr(cmdStr);
- if (arg.end) {
- var start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]);
- var end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]);
- return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.separator);
- }
- return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole);
-}
-var main = createPlugin({
- cmdFormatter: formatWithCmdStr,
- namedTimeZonedImpl: LuxonNamedTimeZone
-});
-function luxonToArray(datetime) {
- return [
- datetime.year,
- datetime.month - 1,
- datetime.day,
- datetime.hour,
- datetime.minute,
- datetime.second,
- datetime.millisecond
- ];
-}
-function arrayToLuxon(arr, timeZone, locale) {
- return DateTime.fromObject({
- zone: timeZone,
- locale: locale,
- year: arr[0],
- month: arr[1] + 1,
- day: arr[2],
- hour: arr[3],
- minute: arr[4],
- second: arr[5],
- millisecond: arr[6]
- });
-}
-function parseCmdStr(cmdStr) {
- var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
- if (parts) {
- var middle = parseCmdStr(parts[2]);
- return {
- head: parts[1],
- middle: middle,
- tail: parts[3],
- whole: parts[1] + middle.whole + parts[3]
- };
- }
- else {
- return {
- head: null,
- middle: null,
- tail: null,
- whole: cmdStr
- };
- }
-}
-function formatRange(cmd, formatStart, formatEnd, separator) {
- if (cmd.middle) {
- var startHead = formatStart(cmd.head);
- var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
- var startTail = formatStart(cmd.tail);
- var endHead = formatEnd(cmd.head);
- var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
- var endTail = formatEnd(cmd.tail);
- if (startHead === endHead && startTail === endTail) {
- return startHead +
- (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
- startTail;
- }
- }
- var startWhole = formatStart(cmd.whole);
- var endWhole = formatEnd(cmd.whole);
- if (startWhole === endWhole) {
- return startWhole;
- }
- else {
- return startWhole + separator + endWhole;
- }
-}
-
-export default main;
-export { toDateTime, toDuration };
diff --git a/library/fullcalendar/packages/luxon/main.js b/library/fullcalendar/packages/luxon/main.js
deleted file mode 100644
index ade582b2b..000000000
--- a/library/fullcalendar/packages/luxon/main.js
+++ /dev/null
@@ -1,170 +0,0 @@
-/*!
-FullCalendar Luxon Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('luxon'), require('@fullcalendar/core')) :
- typeof define === 'function' && define.amd ? define(['exports', 'luxon', '@fullcalendar/core'], factory) :
- (global = global || self, factory(global.FullCalendarLuxon = {}, global.luxon, global.FullCalendar));
-}(this, function (exports, luxon, core) { 'use strict';
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
- /* global Reflect, Promise */
-
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
-
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
-
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
-
- function toDateTime(date, calendar) {
- if (!(calendar instanceof core.Calendar)) {
- throw new Error('must supply a Calendar instance');
- }
- return luxon.DateTime.fromJSDate(date, {
- zone: calendar.dateEnv.timeZone,
- locale: calendar.dateEnv.locale.codes[0]
- });
- }
- function toDuration(duration, calendar) {
- if (!(calendar instanceof core.Calendar)) {
- throw new Error('must supply a Calendar instance');
- }
- return luxon.Duration.fromObject(__assign({}, duration, { locale: calendar.dateEnv.locale.codes[0] }));
- }
- var LuxonNamedTimeZone = /** @class */ (function (_super) {
- __extends(LuxonNamedTimeZone, _super);
- function LuxonNamedTimeZone() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- LuxonNamedTimeZone.prototype.offsetForArray = function (a) {
- return arrayToLuxon(a, this.timeZoneName).offset;
- };
- LuxonNamedTimeZone.prototype.timestampToArray = function (ms) {
- return luxonToArray(luxon.DateTime.fromMillis(ms, {
- zone: this.timeZoneName
- }));
- };
- return LuxonNamedTimeZone;
- }(core.NamedTimeZoneImpl));
- function formatWithCmdStr(cmdStr, arg) {
- var cmd = parseCmdStr(cmdStr);
- if (arg.end) {
- var start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]);
- var end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]);
- return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.separator);
- }
- return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole);
- }
- var main = core.createPlugin({
- cmdFormatter: formatWithCmdStr,
- namedTimeZonedImpl: LuxonNamedTimeZone
- });
- function luxonToArray(datetime) {
- return [
- datetime.year,
- datetime.month - 1,
- datetime.day,
- datetime.hour,
- datetime.minute,
- datetime.second,
- datetime.millisecond
- ];
- }
- function arrayToLuxon(arr, timeZone, locale) {
- return luxon.DateTime.fromObject({
- zone: timeZone,
- locale: locale,
- year: arr[0],
- month: arr[1] + 1,
- day: arr[2],
- hour: arr[3],
- minute: arr[4],
- second: arr[5],
- millisecond: arr[6]
- });
- }
- function parseCmdStr(cmdStr) {
- var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
- if (parts) {
- var middle = parseCmdStr(parts[2]);
- return {
- head: parts[1],
- middle: middle,
- tail: parts[3],
- whole: parts[1] + middle.whole + parts[3]
- };
- }
- else {
- return {
- head: null,
- middle: null,
- tail: null,
- whole: cmdStr
- };
- }
- }
- function formatRange(cmd, formatStart, formatEnd, separator) {
- if (cmd.middle) {
- var startHead = formatStart(cmd.head);
- var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
- var startTail = formatStart(cmd.tail);
- var endHead = formatEnd(cmd.head);
- var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
- var endTail = formatEnd(cmd.tail);
- if (startHead === endHead && startTail === endTail) {
- return startHead +
- (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
- startTail;
- }
- }
- var startWhole = formatStart(cmd.whole);
- var endWhole = formatEnd(cmd.whole);
- if (startWhole === endWhole) {
- return startWhole;
- }
- else {
- return startWhole + separator + endWhole;
- }
- }
-
- exports.default = main;
- exports.toDateTime = toDateTime;
- exports.toDuration = toDuration;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/luxon/main.min.js b/library/fullcalendar/packages/luxon/main.min.js
deleted file mode 100644
index 111695f30..000000000
--- a/library/fullcalendar/packages/luxon/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar Luxon Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("luxon"),require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","luxon","@fullcalendar/core"],t):t((e=e||self).FullCalendarLuxon={},e.luxon,e.FullCalendar)}(this,(function(e,t,n){"use strict";var o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};var r=function(){return(r=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};var a=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}(n,e),n.prototype.offsetForArray=function(e){return l(e,this.timeZoneName).offset},n.prototype.timestampToArray=function(e){return[(n=t.DateTime.fromMillis(e,{zone:this.timeZoneName})).year,n.month-1,n.day,n.hour,n.minute,n.second,n.millisecond];var n},n}(n.NamedTimeZoneImpl);var i=n.createPlugin({cmdFormatter:function(e,t){var n=function e(t){var n=t.match(/^(.*?)\{(.*)\}(.*)$/);if(n){var o=e(n[2]);return{head:n[1],middle:o,tail:n[3],whole:n[1]+o.whole+n[3]}}return{head:null,middle:null,tail:null,whole:t}}(e);if(t.end){var o=l(t.start.array,t.timeZone,t.localeCodes[0]),r=l(t.end.array,t.timeZone,t.localeCodes[0]);return function e(t,n,o,r){if(t.middle){var a=n(t.head),i=e(t.middle,n,o,r),l=n(t.tail),u=o(t.head),c=e(t.middle,n,o,r),d=o(t.tail);if(a===u&&l===d)return a+(i===c?i:i+r+c)+l}var f=n(t.whole),m=o(t.whole);return f===m?f:f+r+m}(n,o.toFormat.bind(o),r.toFormat.bind(r),t.separator)}return l(t.date.array,t.timeZone,t.localeCodes[0]).toFormat(n.whole)},namedTimeZonedImpl:a});function l(e,n,o){return t.DateTime.fromObject({zone:n,locale:o,year:e[0],month:e[1]+1,day:e[2],hour:e[3],minute:e[4],second:e[5],millisecond:e[6]})}e.default=i,e.toDateTime=function(e,o){if(!(o instanceof n.Calendar))throw new Error("must supply a Calendar instance");return t.DateTime.fromJSDate(e,{zone:o.dateEnv.timeZone,locale:o.dateEnv.locale.codes[0]})},e.toDuration=function(e,o){if(!(o instanceof n.Calendar))throw new Error("must supply a Calendar instance");return t.Duration.fromObject(r({},e,{locale:o.dateEnv.locale.codes[0]}))},Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/luxon/package.json b/library/fullcalendar/packages/luxon/package.json
deleted file mode 100644
index a7e2bbfcb..000000000
--- a/library/fullcalendar/packages/luxon/package.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "@fullcalendar/luxon",
- "version": "4.4.2",
- "title": "FullCalendar Luxon Plugin",
- "description": "A connector to the Luxon date library",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/luxon-plugin",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0",
- "luxon": "^1.12.1"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/luxon1/index.global.js b/library/fullcalendar/packages/luxon1/index.global.js
new file mode 100644
index 000000000..b5ecd339b
--- /dev/null
+++ b/library/fullcalendar/packages/luxon1/index.global.js
@@ -0,0 +1,128 @@
+/*!
+FullCalendar Luxon 1 Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/luxon1
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Luxon = (function (exports, core, luxon, internal) {
+ 'use strict';
+
+ function toLuxonDateTime(date, calendar) {
+ if (!(calendar instanceof internal.CalendarImpl)) {
+ throw new Error('must supply a CalendarApi instance');
+ }
+ let { dateEnv } = calendar.getCurrentData();
+ return luxon.DateTime.fromJSDate(date, {
+ zone: dateEnv.timeZone,
+ locale: dateEnv.locale.codes[0],
+ });
+ }
+ function toLuxonDuration(duration, calendar) {
+ if (!(calendar instanceof internal.CalendarImpl)) {
+ throw new Error('must supply a CalendarApi instance');
+ }
+ let { dateEnv } = calendar.getCurrentData();
+ return luxon.Duration.fromObject(Object.assign(Object.assign({}, duration), { locale: dateEnv.locale.codes[0] }));
+ }
+ // Internal Utils
+ function luxonToArray(datetime) {
+ return [
+ datetime.year,
+ datetime.month - 1,
+ datetime.day,
+ datetime.hour,
+ datetime.minute,
+ datetime.second,
+ datetime.millisecond,
+ ];
+ }
+ function arrayToLuxon(arr, timeZone, locale) {
+ return luxon.DateTime.fromObject({
+ zone: timeZone,
+ locale,
+ year: arr[0],
+ month: arr[1] + 1,
+ day: arr[2],
+ hour: arr[3],
+ minute: arr[4],
+ second: arr[5],
+ millisecond: arr[6],
+ });
+ }
+
+ class LuxonNamedTimeZone extends internal.NamedTimeZoneImpl {
+ offsetForArray(a) {
+ return arrayToLuxon(a, this.timeZoneName).offset;
+ }
+ timestampToArray(ms) {
+ return luxonToArray(luxon.DateTime.fromMillis(ms, {
+ zone: this.timeZoneName,
+ }));
+ }
+ }
+
+ function formatWithCmdStr(cmdStr, arg) {
+ let cmd = parseCmdStr(cmdStr);
+ if (arg.end) {
+ let start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]);
+ let end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]);
+ return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.defaultSeparator);
+ }
+ return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole);
+ }
+ function parseCmdStr(cmdStr) {
+ let parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
+ if (parts) {
+ let middle = parseCmdStr(parts[2]);
+ return {
+ head: parts[1],
+ middle,
+ tail: parts[3],
+ whole: parts[1] + middle.whole + parts[3],
+ };
+ }
+ return {
+ head: null,
+ middle: null,
+ tail: null,
+ whole: cmdStr,
+ };
+ }
+ function formatRange(cmd, formatStart, formatEnd, separator) {
+ if (cmd.middle) {
+ let startHead = formatStart(cmd.head);
+ let startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
+ let startTail = formatStart(cmd.tail);
+ let endHead = formatEnd(cmd.head);
+ let endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
+ let endTail = formatEnd(cmd.tail);
+ if (startHead === endHead && startTail === endTail) {
+ return startHead +
+ (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
+ startTail;
+ }
+ }
+ let startWhole = formatStart(cmd.whole);
+ let endWhole = formatEnd(cmd.whole);
+ if (startWhole === endWhole) {
+ return startWhole;
+ }
+ return startWhole + separator + endWhole;
+ }
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/luxon',
+ cmdFormatter: formatWithCmdStr,
+ namedTimeZonedImpl: LuxonNamedTimeZone,
+ });
+
+ core.globalPlugins.push(plugin);
+
+ exports["default"] = plugin;
+ exports.toLuxonDateTime = toLuxonDateTime;
+ exports.toLuxonDuration = toLuxonDuration;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, luxon, FullCalendar.Internal);
diff --git a/library/fullcalendar/packages/luxon1/index.global.min.js b/library/fullcalendar/packages/luxon1/index.global.min.js
new file mode 100644
index 000000000..90903b544
--- /dev/null
+++ b/library/fullcalendar/packages/luxon1/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Luxon 1 Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/luxon1
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Luxon=function(e,t,n,a){"use strict";function l(e,t,a){return n.DateTime.fromObject({zone:t,locale:a,year:e[0],month:e[1]+1,day:e[2],hour:e[3],minute:e[4],second:e[5],millisecond:e[6]})}class r extends a.NamedTimeZoneImpl{offsetForArray(e){return l(e,this.timeZoneName).offset}timestampToArray(e){return[(t=n.DateTime.fromMillis(e,{zone:this.timeZoneName})).year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond];var t}}var o=t.createPlugin({name:"@fullcalendar/luxon",cmdFormatter:function(e,t){let n=function e(t){let n=t.match(/^(.*?)\{(.*)\}(.*)$/);if(n){let t=e(n[2]);return{head:n[1],middle:t,tail:n[3],whole:n[1]+t.whole+n[3]}}return{head:null,middle:null,tail:null,whole:t}}(e);if(t.end){let e=l(t.start.array,t.timeZone,t.localeCodes[0]),a=l(t.end.array,t.timeZone,t.localeCodes[0]);return function e(t,n,a,l){if(t.middle){let r=n(t.head),o=e(t.middle,n,a,l),i=n(t.tail),u=a(t.head),d=e(t.middle,n,a,l),m=a(t.tail);if(r===u&&i===m)return r+(o===d?o:o+l+d)+i}let r=n(t.whole),o=a(t.whole);if(r===o)return r;return r+l+o}(n,e.toFormat.bind(e),a.toFormat.bind(a),t.defaultSeparator)}return l(t.date.array,t.timeZone,t.localeCodes[0]).toFormat(n.whole)},namedTimeZonedImpl:r});return t.globalPlugins.push(o),e.default=o,e.toLuxonDateTime=function(e,t){if(!(t instanceof a.CalendarImpl))throw new Error("must supply a CalendarApi instance");let{dateEnv:l}=t.getCurrentData();return n.DateTime.fromJSDate(e,{zone:l.timeZone,locale:l.locale.codes[0]})},e.toLuxonDuration=function(e,t){if(!(t instanceof a.CalendarImpl))throw new Error("must supply a CalendarApi instance");let{dateEnv:l}=t.getCurrentData();return n.Duration.fromObject(Object.assign(Object.assign({},e),{locale:l.locale.codes[0]}))},Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,luxon,FullCalendar.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/luxon2/index.global.js b/library/fullcalendar/packages/luxon2/index.global.js
new file mode 100644
index 000000000..01b55f85a
--- /dev/null
+++ b/library/fullcalendar/packages/luxon2/index.global.js
@@ -0,0 +1,131 @@
+/*!
+FullCalendar Luxon 2 Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/luxon2
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Luxon2 = (function (exports, core, luxon, internal) {
+ 'use strict';
+
+ function toLuxonDateTime(date, calendar) {
+ if (!(calendar instanceof internal.CalendarImpl)) {
+ throw new Error('must supply a CalendarApi instance');
+ }
+ let { dateEnv } = calendar.getCurrentData();
+ return luxon.DateTime.fromJSDate(date, {
+ zone: dateEnv.timeZone,
+ locale: dateEnv.locale.codes[0],
+ });
+ }
+ function toLuxonDuration(duration, calendar) {
+ if (!(calendar instanceof internal.CalendarImpl)) {
+ throw new Error('must supply a CalendarApi instance');
+ }
+ let { dateEnv } = calendar.getCurrentData();
+ return luxon.Duration.fromObject(duration, {
+ locale: dateEnv.locale.codes[0],
+ });
+ }
+ // Internal Utils
+ function luxonToArray(datetime) {
+ return [
+ datetime.year,
+ datetime.month - 1,
+ datetime.day,
+ datetime.hour,
+ datetime.minute,
+ datetime.second,
+ datetime.millisecond,
+ ];
+ }
+ function arrayToLuxon(arr, timeZone, locale) {
+ return luxon.DateTime.fromObject({
+ year: arr[0],
+ month: arr[1] + 1,
+ day: arr[2],
+ hour: arr[3],
+ minute: arr[4],
+ second: arr[5],
+ millisecond: arr[6],
+ }, {
+ locale,
+ zone: timeZone,
+ });
+ }
+
+ class LuxonNamedTimeZone extends internal.NamedTimeZoneImpl {
+ offsetForArray(a) {
+ return arrayToLuxon(a, this.timeZoneName).offset;
+ }
+ timestampToArray(ms) {
+ return luxonToArray(luxon.DateTime.fromMillis(ms, {
+ zone: this.timeZoneName,
+ }));
+ }
+ }
+
+ function formatWithCmdStr(cmdStr, arg) {
+ let cmd = parseCmdStr(cmdStr);
+ if (arg.end) {
+ let start = arrayToLuxon(arg.start.array, arg.timeZone, arg.localeCodes[0]);
+ let end = arrayToLuxon(arg.end.array, arg.timeZone, arg.localeCodes[0]);
+ return formatRange(cmd, start.toFormat.bind(start), end.toFormat.bind(end), arg.defaultSeparator);
+ }
+ return arrayToLuxon(arg.date.array, arg.timeZone, arg.localeCodes[0]).toFormat(cmd.whole);
+ }
+ function parseCmdStr(cmdStr) {
+ let parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
+ if (parts) {
+ let middle = parseCmdStr(parts[2]);
+ return {
+ head: parts[1],
+ middle,
+ tail: parts[3],
+ whole: parts[1] + middle.whole + parts[3],
+ };
+ }
+ return {
+ head: null,
+ middle: null,
+ tail: null,
+ whole: cmdStr,
+ };
+ }
+ function formatRange(cmd, formatStart, formatEnd, separator) {
+ if (cmd.middle) {
+ let startHead = formatStart(cmd.head);
+ let startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
+ let startTail = formatStart(cmd.tail);
+ let endHead = formatEnd(cmd.head);
+ let endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
+ let endTail = formatEnd(cmd.tail);
+ if (startHead === endHead && startTail === endTail) {
+ return startHead +
+ (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
+ startTail;
+ }
+ }
+ let startWhole = formatStart(cmd.whole);
+ let endWhole = formatEnd(cmd.whole);
+ if (startWhole === endWhole) {
+ return startWhole;
+ }
+ return startWhole + separator + endWhole;
+ }
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/luxon2',
+ cmdFormatter: formatWithCmdStr,
+ namedTimeZonedImpl: LuxonNamedTimeZone,
+ });
+
+ core.globalPlugins.push(plugin);
+
+ exports["default"] = plugin;
+ exports.toLuxonDateTime = toLuxonDateTime;
+ exports.toLuxonDuration = toLuxonDuration;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, luxon, FullCalendar.Internal);
diff --git a/library/fullcalendar/packages/luxon2/index.global.min.js b/library/fullcalendar/packages/luxon2/index.global.min.js
new file mode 100644
index 000000000..c639271a8
--- /dev/null
+++ b/library/fullcalendar/packages/luxon2/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Luxon 2 Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/luxon2
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Luxon2=function(e,t,n,a){"use strict";function l(e,t,a){return n.DateTime.fromObject({year:e[0],month:e[1]+1,day:e[2],hour:e[3],minute:e[4],second:e[5],millisecond:e[6]},{locale:a,zone:t})}class r extends a.NamedTimeZoneImpl{offsetForArray(e){return l(e,this.timeZoneName).offset}timestampToArray(e){return[(t=n.DateTime.fromMillis(e,{zone:this.timeZoneName})).year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond];var t}}var o=t.createPlugin({name:"@fullcalendar/luxon2",cmdFormatter:function(e,t){let n=function e(t){let n=t.match(/^(.*?)\{(.*)\}(.*)$/);if(n){let t=e(n[2]);return{head:n[1],middle:t,tail:n[3],whole:n[1]+t.whole+n[3]}}return{head:null,middle:null,tail:null,whole:t}}(e);if(t.end){let e=l(t.start.array,t.timeZone,t.localeCodes[0]),a=l(t.end.array,t.timeZone,t.localeCodes[0]);return function e(t,n,a,l){if(t.middle){let r=n(t.head),o=e(t.middle,n,a,l),i=n(t.tail),u=a(t.head),d=e(t.middle,n,a,l),m=a(t.tail);if(r===u&&i===m)return r+(o===d?o:o+l+d)+i}let r=n(t.whole),o=a(t.whole);if(r===o)return r;return r+l+o}(n,e.toFormat.bind(e),a.toFormat.bind(a),t.defaultSeparator)}return l(t.date.array,t.timeZone,t.localeCodes[0]).toFormat(n.whole)},namedTimeZonedImpl:r});return t.globalPlugins.push(o),e.default=o,e.toLuxonDateTime=function(e,t){if(!(t instanceof a.CalendarImpl))throw new Error("must supply a CalendarApi instance");let{dateEnv:l}=t.getCurrentData();return n.DateTime.fromJSDate(e,{zone:l.timeZone,locale:l.locale.codes[0]})},e.toLuxonDuration=function(e,t){if(!(t instanceof a.CalendarImpl))throw new Error("must supply a CalendarApi instance");let{dateEnv:l}=t.getCurrentData();return n.Duration.fromObject(e,{locale:l.locale.codes[0]})},Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,luxon,FullCalendar.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/moment-timezone/LICENSE.txt b/library/fullcalendar/packages/moment-timezone/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/moment-timezone/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/moment-timezone/README.md b/library/fullcalendar/packages/moment-timezone/README.md
deleted file mode 100644
index e84412a2a..000000000
--- a/library/fullcalendar/packages/moment-timezone/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar Moment Timezone Plugin
-
-A connector to the moment-timezone library
-
-[View the docs &raquo;](https://fullcalendar.io/docs/moment-plugins#moment-timezone)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/moment-timezone/index.global.js b/library/fullcalendar/packages/moment-timezone/index.global.js
new file mode 100644
index 000000000..dd736679d
--- /dev/null
+++ b/library/fullcalendar/packages/moment-timezone/index.global.js
@@ -0,0 +1,35 @@
+/*!
+FullCalendar Moment Timezone Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/moment-timezone-plugin
+(c) 2022 Adam Shaw
+*/
+FullCalendar.MomentTimezone = (function (exports, core, moment, internal) {
+ 'use strict';
+
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
+
+ var moment__default = /*#__PURE__*/_interopDefault(moment);
+
+ class MomentNamedTimeZone extends internal.NamedTimeZoneImpl {
+ offsetForArray(a) {
+ return moment__default["default"].tz(a, this.timeZoneName).utcOffset();
+ }
+ timestampToArray(ms) {
+ return moment__default["default"].tz(ms, this.timeZoneName).toArray();
+ }
+ }
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/moment-timezone',
+ namedTimeZonedImpl: MomentNamedTimeZone,
+ });
+
+ core.globalPlugins.push(plugin);
+
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, moment, FullCalendar.Internal);
diff --git a/library/fullcalendar/packages/moment-timezone/index.global.min.js b/library/fullcalendar/packages/moment-timezone/index.global.min.js
new file mode 100644
index 000000000..0cd5ac444
--- /dev/null
+++ b/library/fullcalendar/packages/moment-timezone/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Moment Timezone Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/moment-timezone-plugin
+(c) 2022 Adam Shaw
+*/
+FullCalendar.MomentTimezone=function(e,t,n,a){"use strict";function l(e){return e&&e.__esModule?e:{default:e}}var r=l(n);class u extends a.NamedTimeZoneImpl{offsetForArray(e){return r.default.tz(e,this.timeZoneName).utcOffset()}timestampToArray(e){return r.default.tz(e,this.timeZoneName).toArray()}}var m=t.createPlugin({name:"@fullcalendar/moment-timezone",namedTimeZonedImpl:u});return t.globalPlugins.push(m),e.default=m,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,moment,FullCalendar.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/moment-timezone/main.d.ts b/library/fullcalendar/packages/moment-timezone/main.d.ts
deleted file mode 100644
index eb0a165b1..000000000
--- a/library/fullcalendar/packages/moment-timezone/main.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../moment-timezone/builds/moment-timezone-with-data
-// ../../../../../@fullcalendar/core
-
-declare module '@fullcalendar/moment-timezone' {
- import 'moment-timezone/builds/moment-timezone-with-data';
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
-}
-
diff --git a/library/fullcalendar/packages/moment-timezone/main.esm.js b/library/fullcalendar/packages/moment-timezone/main.esm.js
deleted file mode 100644
index df11b1f46..000000000
--- a/library/fullcalendar/packages/moment-timezone/main.esm.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-FullCalendar Moment Timezone Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import * as momentNs from 'moment';
-import 'moment-timezone/builds/moment-timezone-with-data';
-import { createPlugin, NamedTimeZoneImpl } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var moment = momentNs; // the directly callable function
-var MomentNamedTimeZone = /** @class */ (function (_super) {
- __extends(MomentNamedTimeZone, _super);
- function MomentNamedTimeZone() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- MomentNamedTimeZone.prototype.offsetForArray = function (a) {
- return moment.tz(a, this.timeZoneName).utcOffset();
- };
- MomentNamedTimeZone.prototype.timestampToArray = function (ms) {
- return moment.tz(ms, this.timeZoneName).toArray();
- };
- return MomentNamedTimeZone;
-}(NamedTimeZoneImpl));
-var main = createPlugin({
- namedTimeZonedImpl: MomentNamedTimeZone
-});
-
-export default main;
diff --git a/library/fullcalendar/packages/moment-timezone/main.js b/library/fullcalendar/packages/moment-timezone/main.js
deleted file mode 100644
index 4d9e2df13..000000000
--- a/library/fullcalendar/packages/moment-timezone/main.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
-FullCalendar Moment Timezone Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('moment'), require('moment-timezone/builds/moment-timezone-with-data'), require('@fullcalendar/core')) :
- typeof define === 'function' && define.amd ? define(['exports', 'moment', 'moment-timezone/builds/moment-timezone-with-data', '@fullcalendar/core'], factory) :
- (global = global || self, factory(global.FullCalendarMomentTimezone = {}, global.moment, global.moment, global.FullCalendar));
-}(this, function (exports, momentNs, momentTimezoneWithData, core) { 'use strict';
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
- /* global Reflect, Promise */
-
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
-
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
-
- var moment = momentNs; // the directly callable function
- var MomentNamedTimeZone = /** @class */ (function (_super) {
- __extends(MomentNamedTimeZone, _super);
- function MomentNamedTimeZone() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- MomentNamedTimeZone.prototype.offsetForArray = function (a) {
- return moment.tz(a, this.timeZoneName).utcOffset();
- };
- MomentNamedTimeZone.prototype.timestampToArray = function (ms) {
- return moment.tz(ms, this.timeZoneName).toArray();
- };
- return MomentNamedTimeZone;
- }(core.NamedTimeZoneImpl));
- var main = core.createPlugin({
- namedTimeZonedImpl: MomentNamedTimeZone
- });
-
- exports.default = main;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/moment-timezone/main.min.js b/library/fullcalendar/packages/moment-timezone/main.min.js
deleted file mode 100644
index 11f30fdec..000000000
--- a/library/fullcalendar/packages/moment-timezone/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar Moment Timezone Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("moment"),require("moment-timezone/builds/moment-timezone-with-data"),require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","moment","moment-timezone/builds/moment-timezone-with-data","@fullcalendar/core"],t):t((e=e||self).FullCalendarMomentTimezone={},e.moment,e.moment,e.FullCalendar)}(this,(function(e,t,n,o){"use strict";var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)};var i=t,u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return function(e,t){function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}(t,e),t.prototype.offsetForArray=function(e){return i.tz(e,this.timeZoneName).utcOffset()},t.prototype.timestampToArray=function(e){return i.tz(e,this.timeZoneName).toArray()},t}(o.NamedTimeZoneImpl),m=o.createPlugin({namedTimeZonedImpl:u});e.default=m,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/moment-timezone/package.json b/library/fullcalendar/packages/moment-timezone/package.json
deleted file mode 100644
index 8bc56ec09..000000000
--- a/library/fullcalendar/packages/moment-timezone/package.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "@fullcalendar/moment-timezone",
- "version": "4.4.2",
- "title": "FullCalendar Moment Timezone Plugin",
- "description": "A connector to the moment-timezone library",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/moment-plugins#moment-timezone",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0",
- "moment": "^2.24.0",
- "moment-timezone": "^0.5.25"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/moment/LICENSE.txt b/library/fullcalendar/packages/moment/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/moment/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/moment/README.md b/library/fullcalendar/packages/moment/README.md
deleted file mode 100644
index 854e4367f..000000000
--- a/library/fullcalendar/packages/moment/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar Moment Plugin
-
-A connector to the MomentJS date library
-
-[View the docs &raquo;](https://fullcalendar.io/docs/moment-plugins)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/moment/index.global.js b/library/fullcalendar/packages/moment/index.global.js
new file mode 100644
index 000000000..f06c85200
--- /dev/null
+++ b/library/fullcalendar/packages/moment/index.global.js
@@ -0,0 +1,113 @@
+/*!
+FullCalendar Moment Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/moment-plugin
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Moment = (function (exports, core, moment, internal) {
+ 'use strict';
+
+ function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
+
+ var moment__default = /*#__PURE__*/_interopDefault(moment);
+
+ function toMoment(date, calendar) {
+ if (!(calendar instanceof internal.CalendarImpl)) {
+ throw new Error('must supply a CalendarApi instance');
+ }
+ let { dateEnv } = calendar.getCurrentData();
+ return convertToMoment(date, dateEnv.timeZone, null, dateEnv.locale.codes[0]);
+ }
+ function toMomentDuration(fcDuration) {
+ return moment__default["default"].duration(fcDuration); // moment accepts all the props that fc.Duration already has!
+ }
+ // Internal Utils
+ function convertToMoment(input, timeZone, timeZoneOffset, locale) {
+ let mom;
+ if (timeZone === 'local') {
+ mom = moment__default["default"](input);
+ }
+ else if (timeZone === 'UTC') {
+ mom = moment__default["default"].utc(input);
+ }
+ else if (moment__default["default"].tz) {
+ mom = moment__default["default"].tz(input, timeZone);
+ }
+ else {
+ mom = moment__default["default"].utc(input);
+ if (timeZoneOffset != null) {
+ mom.utcOffset(timeZoneOffset);
+ }
+ }
+ mom.locale(locale);
+ return mom;
+ }
+
+ function formatWithCmdStr(cmdStr, arg) {
+ let cmd = parseCmdStr(cmdStr);
+ if (arg.end) {
+ let startMom = convertToMoment(arg.start.array, arg.timeZone, arg.start.timeZoneOffset, arg.localeCodes[0]);
+ let endMom = convertToMoment(arg.end.array, arg.timeZone, arg.end.timeZoneOffset, arg.localeCodes[0]);
+ return formatRange(cmd, createMomentFormatFunc(startMom), createMomentFormatFunc(endMom), arg.defaultSeparator);
+ }
+ return convertToMoment(arg.date.array, arg.timeZone, arg.date.timeZoneOffset, arg.localeCodes[0]).format(cmd.whole); // TODO: test for this
+ }
+ function createMomentFormatFunc(mom) {
+ return (cmdStr) => (cmdStr ? mom.format(cmdStr) : '' // because calling with blank string results in ISO8601 :(
+ );
+ }
+ function parseCmdStr(cmdStr) {
+ let parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
+ if (parts) {
+ let middle = parseCmdStr(parts[2]);
+ return {
+ head: parts[1],
+ middle,
+ tail: parts[3],
+ whole: parts[1] + middle.whole + parts[3],
+ };
+ }
+ return {
+ head: null,
+ middle: null,
+ tail: null,
+ whole: cmdStr,
+ };
+ }
+ function formatRange(cmd, formatStart, formatEnd, separator) {
+ if (cmd.middle) {
+ let startHead = formatStart(cmd.head);
+ let startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
+ let startTail = formatStart(cmd.tail);
+ let endHead = formatEnd(cmd.head);
+ let endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
+ let endTail = formatEnd(cmd.tail);
+ if (startHead === endHead && startTail === endTail) {
+ return startHead +
+ (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
+ startTail;
+ }
+ }
+ let startWhole = formatStart(cmd.whole);
+ let endWhole = formatEnd(cmd.whole);
+ if (startWhole === endWhole) {
+ return startWhole;
+ }
+ return startWhole + separator + endWhole;
+ }
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/moment',
+ cmdFormatter: formatWithCmdStr,
+ });
+
+ core.globalPlugins.push(plugin);
+
+ exports["default"] = plugin;
+ exports.toMoment = toMoment;
+ exports.toMomentDuration = toMomentDuration;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, moment, FullCalendar.Internal);
diff --git a/library/fullcalendar/packages/moment/index.global.min.js b/library/fullcalendar/packages/moment/index.global.min.js
new file mode 100644
index 000000000..438c642f3
--- /dev/null
+++ b/library/fullcalendar/packages/moment/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Moment Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/moment-plugin
+(c) 2022 Adam Shaw
+*/
+FullCalendar.Moment=function(e,t,l,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}var r=a(l);function u(e,t,l,n){let a;return"local"===t?a=r.default(e):"UTC"===t?a=r.default.utc(e):r.default.tz?a=r.default.tz(e,t):(a=r.default.utc(e),null!=l&&a.utcOffset(l)),a.locale(n),a}function o(e){return t=>t?e.format(t):""}var d=t.createPlugin({name:"@fullcalendar/moment",cmdFormatter:function(e,t){let l=function e(t){let l=t.match(/^(.*?)\{(.*)\}(.*)$/);if(l){let t=e(l[2]);return{head:l[1],middle:t,tail:l[3],whole:l[1]+t.whole+l[3]}}return{head:null,middle:null,tail:null,whole:t}}(e);if(t.end){let e=u(t.start.array,t.timeZone,t.start.timeZoneOffset,t.localeCodes[0]),n=u(t.end.array,t.timeZone,t.end.timeZoneOffset,t.localeCodes[0]);return function e(t,l,n,a){if(t.middle){let r=l(t.head),u=e(t.middle,l,n,a),o=l(t.tail),d=n(t.head),i=e(t.middle,l,n,a),f=n(t.tail);if(r===d&&o===f)return r+(u===i?u:u+a+i)+o}let r=l(t.whole),u=n(t.whole);if(r===u)return r;return r+a+u}(l,o(e),o(n),t.defaultSeparator)}return u(t.date.array,t.timeZone,t.date.timeZoneOffset,t.localeCodes[0]).format(l.whole)}});return t.globalPlugins.push(d),e.default=d,e.toMoment=function(e,t){if(!(t instanceof n.CalendarImpl))throw new Error("must supply a CalendarApi instance");let{dateEnv:l}=t.getCurrentData();return u(e,l.timeZone,null,l.locale.codes[0])},e.toMomentDuration=function(e){return r.default.duration(e)},Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,moment,FullCalendar.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/moment/main.d.ts b/library/fullcalendar/packages/moment/main.d.ts
deleted file mode 100644
index cc81dab62..000000000
--- a/library/fullcalendar/packages/moment/main.d.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../moment
-// ../../../../../@fullcalendar/core
-
-declare module '@fullcalendar/moment' {
- import * as momentNs from 'moment';
- import { Calendar, Duration } from '@fullcalendar/core';
- export function toMoment(date: Date, calendar: Calendar): momentNs.Moment;
- export function toDuration(fcDuration: Duration): momentNs.Duration;
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
-}
-
diff --git a/library/fullcalendar/packages/moment/main.esm.js b/library/fullcalendar/packages/moment/main.esm.js
deleted file mode 100644
index fb97563f3..000000000
--- a/library/fullcalendar/packages/moment/main.esm.js
+++ /dev/null
@@ -1,102 +0,0 @@
-/*!
-FullCalendar Moment Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import * as momentNs from 'moment';
-import { createPlugin, Calendar } from '@fullcalendar/core';
-
-var moment = momentNs; // the directly callable function
-function toMoment(date, calendar) {
- if (!(calendar instanceof Calendar)) {
- throw new Error('must supply a Calendar instance');
- }
- return convertToMoment(date, calendar.dateEnv.timeZone, null, calendar.dateEnv.locale.codes[0]);
-}
-function toDuration(fcDuration) {
- return moment.duration(fcDuration); // moment accepts all the props that fc.Duration already has!
-}
-function formatWithCmdStr(cmdStr, arg) {
- var cmd = parseCmdStr(cmdStr);
- if (arg.end) {
- var startMom = convertToMoment(arg.start.array, arg.timeZone, arg.start.timeZoneOffset, arg.localeCodes[0]);
- var endMom = convertToMoment(arg.end.array, arg.timeZone, arg.end.timeZoneOffset, arg.localeCodes[0]);
- return formatRange(cmd, createMomentFormatFunc(startMom), createMomentFormatFunc(endMom), arg.separator);
- }
- return convertToMoment(arg.date.array, arg.timeZone, arg.date.timeZoneOffset, arg.localeCodes[0]).format(cmd.whole); // TODO: test for this
-}
-var main = createPlugin({
- cmdFormatter: formatWithCmdStr
-});
-function createMomentFormatFunc(mom) {
- return function (cmdStr) {
- return cmdStr ? mom.format(cmdStr) : ''; // because calling with blank string results in ISO8601 :(
- };
-}
-function convertToMoment(input, timeZone, timeZoneOffset, locale) {
- var mom;
- if (timeZone === 'local') {
- mom = moment(input);
- }
- else if (timeZone === 'UTC') {
- mom = moment.utc(input);
- }
- else if (moment.tz) {
- mom = moment.tz(input, timeZone);
- }
- else {
- mom = moment.utc(input);
- if (timeZoneOffset != null) {
- mom.utcOffset(timeZoneOffset);
- }
- }
- mom.locale(locale);
- return mom;
-}
-function parseCmdStr(cmdStr) {
- var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
- if (parts) {
- var middle = parseCmdStr(parts[2]);
- return {
- head: parts[1],
- middle: middle,
- tail: parts[3],
- whole: parts[1] + middle.whole + parts[3]
- };
- }
- else {
- return {
- head: null,
- middle: null,
- tail: null,
- whole: cmdStr
- };
- }
-}
-function formatRange(cmd, formatStart, formatEnd, separator) {
- if (cmd.middle) {
- var startHead = formatStart(cmd.head);
- var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
- var startTail = formatStart(cmd.tail);
- var endHead = formatEnd(cmd.head);
- var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
- var endTail = formatEnd(cmd.tail);
- if (startHead === endHead && startTail === endTail) {
- return startHead +
- (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
- startTail;
- }
- }
- var startWhole = formatStart(cmd.whole);
- var endWhole = formatEnd(cmd.whole);
- if (startWhole === endWhole) {
- return startWhole;
- }
- else {
- return startWhole + separator + endWhole;
- }
-}
-
-export default main;
-export { toDuration, toMoment };
diff --git a/library/fullcalendar/packages/moment/main.js b/library/fullcalendar/packages/moment/main.js
deleted file mode 100644
index 794bee900..000000000
--- a/library/fullcalendar/packages/moment/main.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/*!
-FullCalendar Moment Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('moment'), require('@fullcalendar/core')) :
- typeof define === 'function' && define.amd ? define(['exports', 'moment', '@fullcalendar/core'], factory) :
- (global = global || self, factory(global.FullCalendarMoment = {}, global.moment, global.FullCalendar));
-}(this, function (exports, momentNs, core) { 'use strict';
-
- var moment = momentNs; // the directly callable function
- function toMoment(date, calendar) {
- if (!(calendar instanceof core.Calendar)) {
- throw new Error('must supply a Calendar instance');
- }
- return convertToMoment(date, calendar.dateEnv.timeZone, null, calendar.dateEnv.locale.codes[0]);
- }
- function toDuration(fcDuration) {
- return moment.duration(fcDuration); // moment accepts all the props that fc.Duration already has!
- }
- function formatWithCmdStr(cmdStr, arg) {
- var cmd = parseCmdStr(cmdStr);
- if (arg.end) {
- var startMom = convertToMoment(arg.start.array, arg.timeZone, arg.start.timeZoneOffset, arg.localeCodes[0]);
- var endMom = convertToMoment(arg.end.array, arg.timeZone, arg.end.timeZoneOffset, arg.localeCodes[0]);
- return formatRange(cmd, createMomentFormatFunc(startMom), createMomentFormatFunc(endMom), arg.separator);
- }
- return convertToMoment(arg.date.array, arg.timeZone, arg.date.timeZoneOffset, arg.localeCodes[0]).format(cmd.whole); // TODO: test for this
- }
- var main = core.createPlugin({
- cmdFormatter: formatWithCmdStr
- });
- function createMomentFormatFunc(mom) {
- return function (cmdStr) {
- return cmdStr ? mom.format(cmdStr) : ''; // because calling with blank string results in ISO8601 :(
- };
- }
- function convertToMoment(input, timeZone, timeZoneOffset, locale) {
- var mom;
- if (timeZone === 'local') {
- mom = moment(input);
- }
- else if (timeZone === 'UTC') {
- mom = moment.utc(input);
- }
- else if (moment.tz) {
- mom = moment.tz(input, timeZone);
- }
- else {
- mom = moment.utc(input);
- if (timeZoneOffset != null) {
- mom.utcOffset(timeZoneOffset);
- }
- }
- mom.locale(locale);
- return mom;
- }
- function parseCmdStr(cmdStr) {
- var parts = cmdStr.match(/^(.*?)\{(.*)\}(.*)$/); // TODO: lookbehinds for escape characters
- if (parts) {
- var middle = parseCmdStr(parts[2]);
- return {
- head: parts[1],
- middle: middle,
- tail: parts[3],
- whole: parts[1] + middle.whole + parts[3]
- };
- }
- else {
- return {
- head: null,
- middle: null,
- tail: null,
- whole: cmdStr
- };
- }
- }
- function formatRange(cmd, formatStart, formatEnd, separator) {
- if (cmd.middle) {
- var startHead = formatStart(cmd.head);
- var startMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
- var startTail = formatStart(cmd.tail);
- var endHead = formatEnd(cmd.head);
- var endMiddle = formatRange(cmd.middle, formatStart, formatEnd, separator);
- var endTail = formatEnd(cmd.tail);
- if (startHead === endHead && startTail === endTail) {
- return startHead +
- (startMiddle === endMiddle ? startMiddle : startMiddle + separator + endMiddle) +
- startTail;
- }
- }
- var startWhole = formatStart(cmd.whole);
- var endWhole = formatEnd(cmd.whole);
- if (startWhole === endWhole) {
- return startWhole;
- }
- else {
- return startWhole + separator + endWhole;
- }
- }
-
- exports.default = main;
- exports.toDuration = toDuration;
- exports.toMoment = toMoment;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/moment/main.min.js b/library/fullcalendar/packages/moment/main.min.js
deleted file mode 100644
index 39552c279..000000000
--- a/library/fullcalendar/packages/moment/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar Moment Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("moment"),require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","moment","@fullcalendar/core"],t):t((e=e||self).FullCalendarMoment={},e.moment,e.FullCalendar)}(this,(function(e,t,n){"use strict";var r=t;var a=n.createPlugin({cmdFormatter:function(e,t){var n=function e(t){var n=t.match(/^(.*?)\{(.*)\}(.*)$/);if(n){var r=e(n[2]);return{head:n[1],middle:r,tail:n[3],whole:n[1]+r.whole+n[3]}}return{head:null,middle:null,tail:null,whole:t}}(e);if(t.end){var r=l(t.start.array,t.timeZone,t.start.timeZoneOffset,t.localeCodes[0]),a=l(t.end.array,t.timeZone,t.end.timeZoneOffset,t.localeCodes[0]);return function e(t,n,r,a){if(t.middle){var o=n(t.head),l=e(t.middle,n,r,a),u=n(t.tail),i=r(t.head),d=e(t.middle,n,r,a),f=r(t.tail);if(o===i&&u===f)return o+(l===d?l:l+a+d)+u}var c=n(t.whole),m=r(t.whole);return c===m?c:c+a+m}(n,o(r),o(a),t.separator)}return l(t.date.array,t.timeZone,t.date.timeZoneOffset,t.localeCodes[0]).format(n.whole)}});function o(e){return function(t){return t?e.format(t):""}}function l(e,t,n,a){var o;return"local"===t?o=r(e):"UTC"===t?o=r.utc(e):r.tz?o=r.tz(e,t):(o=r.utc(e),null!=n&&o.utcOffset(n)),o.locale(a),o}e.default=a,e.toDuration=function(e){return r.duration(e)},e.toMoment=function(e,t){if(!(t instanceof n.Calendar))throw new Error("must supply a Calendar instance");return l(e,t.dateEnv.timeZone,null,t.dateEnv.locale.codes[0])},Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/moment/package.json b/library/fullcalendar/packages/moment/package.json
deleted file mode 100644
index d7571f312..000000000
--- a/library/fullcalendar/packages/moment/package.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "@fullcalendar/moment",
- "version": "4.4.2",
- "title": "FullCalendar Moment Plugin",
- "description": "A connector to the MomentJS date library",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/moment-plugins",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0",
- "moment": "^2.24.0"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/rrule/LICENSE.txt b/library/fullcalendar/packages/rrule/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/rrule/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/rrule/README.md b/library/fullcalendar/packages/rrule/README.md
deleted file mode 100644
index 7b56bed78..000000000
--- a/library/fullcalendar/packages/rrule/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar RRule Plugin
-
-A connector to the RRule library, for recurring events
-
-[View the docs &raquo;](https://fullcalendar.io/docs/rrule-plugin)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/rrule/index.global.js b/library/fullcalendar/packages/rrule/index.global.js
new file mode 100644
index 000000000..795d352b5
--- /dev/null
+++ b/library/fullcalendar/packages/rrule/index.global.js
@@ -0,0 +1,145 @@
+/*!
+FullCalendar RRule Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/rrule-plugin
+(c) 2022 Adam Shaw
+*/
+FullCalendar.RRule = (function (exports, core, rrule, internal) {
+ 'use strict';
+
+ const recurringType = {
+ parse(eventProps, dateEnv) {
+ if (eventProps.rrule != null) {
+ let eventRRuleData = parseEventRRule(eventProps, dateEnv);
+ if (eventRRuleData) {
+ return {
+ typeData: { rruleSet: eventRRuleData.rruleSet, isTimeZoneSpecified: eventRRuleData.isTimeZoneSpecified },
+ allDayGuess: !eventRRuleData.isTimeSpecified,
+ duration: eventProps.duration,
+ };
+ }
+ }
+ return null;
+ },
+ expand(eventRRuleData, framingRange, dateEnv) {
+ let dates;
+ if (eventRRuleData.isTimeZoneSpecified) {
+ dates = eventRRuleData.rruleSet.between(dateEnv.toDate(framingRange.start), // rrule lib will treat as UTC-zoned
+ dateEnv.toDate(framingRange.end), // (same)
+ true).map((date) => dateEnv.createMarker(date)); // convert UTC-zoned-date to locale datemarker
+ }
+ else {
+ // when no timezone in given start/end, the rrule lib will assume UTC,
+ // which is same as our DateMarkers. no need to manipulate
+ dates = eventRRuleData.rruleSet.between(framingRange.start, framingRange.end, true);
+ }
+ return dates;
+ },
+ };
+ function parseEventRRule(eventProps, dateEnv) {
+ let rruleSet;
+ let isTimeSpecified = false;
+ let isTimeZoneSpecified = false;
+ if (typeof eventProps.rrule === 'string') {
+ let res = parseRRuleString(eventProps.rrule);
+ rruleSet = res.rruleSet;
+ isTimeSpecified = res.isTimeSpecified;
+ isTimeZoneSpecified = res.isTimeZoneSpecified;
+ }
+ if (typeof eventProps.rrule === 'object' && eventProps.rrule) { // non-null object
+ let res = parseRRuleObject(eventProps.rrule, dateEnv);
+ rruleSet = new rrule.RRuleSet();
+ rruleSet.rrule(res.rrule);
+ isTimeSpecified = res.isTimeSpecified;
+ isTimeZoneSpecified = res.isTimeZoneSpecified;
+ }
+ // convery to arrays. TODO: general util?
+ let exdateInputs = [].concat(eventProps.exdate || []);
+ let exruleInputs = [].concat(eventProps.exrule || []);
+ for (let exdateInput of exdateInputs) {
+ let res = internal.parseMarker(exdateInput);
+ isTimeSpecified = isTimeSpecified || !res.isTimeUnspecified;
+ isTimeZoneSpecified = isTimeZoneSpecified || res.timeZoneOffset !== null;
+ rruleSet.exdate(new Date(res.marker.valueOf() - (res.timeZoneOffset || 0) * 60 * 1000));
+ }
+ // TODO: exrule is deprecated. what to do? (https://icalendar.org/iCalendar-RFC-5545/a-3-deprecated-features.html)
+ for (let exruleInput of exruleInputs) {
+ let res = parseRRuleObject(exruleInput, dateEnv);
+ isTimeSpecified = isTimeSpecified || res.isTimeSpecified;
+ isTimeZoneSpecified = isTimeZoneSpecified || res.isTimeZoneSpecified;
+ rruleSet.exrule(res.rrule);
+ }
+ return { rruleSet, isTimeSpecified, isTimeZoneSpecified };
+ }
+ function parseRRuleObject(rruleInput, dateEnv) {
+ let isTimeSpecified = false;
+ let isTimeZoneSpecified = false;
+ function processDateInput(dateInput) {
+ if (typeof dateInput === 'string') {
+ let markerData = internal.parseMarker(dateInput);
+ if (markerData) {
+ isTimeSpecified = isTimeSpecified || !markerData.isTimeUnspecified;
+ isTimeZoneSpecified = isTimeZoneSpecified || markerData.timeZoneOffset !== null;
+ return new Date(markerData.marker.valueOf() - (markerData.timeZoneOffset || 0) * 60 * 1000); // NOT DRY
+ }
+ return null;
+ }
+ return dateInput; // TODO: what about number timestamps?
+ }
+ let rruleOptions = Object.assign(Object.assign({}, rruleInput), { dtstart: processDateInput(rruleInput.dtstart), until: processDateInput(rruleInput.until), freq: convertConstant(rruleInput.freq), wkst: rruleInput.wkst == null
+ ? (dateEnv.weekDow - 1 + 7) % 7 // convert Sunday-first to Monday-first
+ : convertConstant(rruleInput.wkst), byweekday: convertConstants(rruleInput.byweekday) });
+ return { rrule: new rrule.RRule(rruleOptions), isTimeSpecified, isTimeZoneSpecified };
+ }
+ function parseRRuleString(str) {
+ let rruleSet = rrule.rrulestr(str, { forceset: true });
+ let analysis = analyzeRRuleString(str);
+ return Object.assign({ rruleSet }, analysis);
+ }
+ function analyzeRRuleString(str) {
+ let isTimeSpecified = false;
+ let isTimeZoneSpecified = false;
+ function processMatch(whole, introPart, datePart) {
+ let result = internal.parseMarker(datePart);
+ isTimeSpecified = isTimeSpecified || !result.isTimeUnspecified;
+ isTimeZoneSpecified = isTimeZoneSpecified || result.timeZoneOffset !== null;
+ }
+ str.replace(/\b(DTSTART:)([^\n]*)/, processMatch);
+ str.replace(/\b(EXDATE:)([^\n]*)/, processMatch);
+ str.replace(/\b(UNTIL=)([^;\n]*)/, processMatch);
+ return { isTimeSpecified, isTimeZoneSpecified };
+ }
+ function convertConstants(input) {
+ if (Array.isArray(input)) {
+ return input.map(convertConstant);
+ }
+ return convertConstant(input);
+ }
+ function convertConstant(input) {
+ if (typeof input === 'string') {
+ return rrule.RRule[input.toUpperCase()];
+ }
+ return input;
+ }
+
+ const RRULE_EVENT_REFINERS = {
+ rrule: internal.identity,
+ exrule: internal.identity,
+ exdate: internal.identity,
+ duration: internal.createDuration,
+ };
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/rrule',
+ recurringTypes: [recurringType],
+ eventRefiners: RRULE_EVENT_REFINERS,
+ });
+
+ core.globalPlugins.push(plugin);
+
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, rrule, FullCalendar.Internal);
diff --git a/library/fullcalendar/packages/rrule/index.global.min.js b/library/fullcalendar/packages/rrule/index.global.min.js
new file mode 100644
index 000000000..4197cedb2
--- /dev/null
+++ b/library/fullcalendar/packages/rrule/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar RRule Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/rrule-plugin
+(c) 2022 Adam Shaw
+*/
+FullCalendar.RRule=function(e,r,t,i){"use strict";const n={parse(e,r){if(null!=e.rrule){let n=function(e,r){let n,u=!1,a=!1;if("string"==typeof e.rrule){let r=function(e){let r=t.rrulestr(e,{forceset:!0}),n=function(e){let r=!1,t=!1;function n(e,n,l){let u=i.parseMarker(l);r=r||!u.isTimeUnspecified,t=t||null!==u.timeZoneOffset}return e.replace(/\b(DTSTART:)([^\n]*)/,n),e.replace(/\b(EXDATE:)([^\n]*)/,n),e.replace(/\b(UNTIL=)([^;\n]*)/,n),{isTimeSpecified:r,isTimeZoneSpecified:t}}(e);return Object.assign({rruleSet:r},n)}(e.rrule);n=r.rruleSet,u=r.isTimeSpecified,a=r.isTimeZoneSpecified}if("object"==typeof e.rrule&&e.rrule){let i=l(e.rrule,r);n=new t.RRuleSet,n.rrule(i.rrule),u=i.isTimeSpecified,a=i.isTimeZoneSpecified}let s=[].concat(e.exdate||[]),f=[].concat(e.exrule||[]);for(let e of s){let r=i.parseMarker(e);u=u||!r.isTimeUnspecified,a=a||null!==r.timeZoneOffset,n.exdate(new Date(r.marker.valueOf()-60*(r.timeZoneOffset||0)*1e3))}for(let e of f){let t=l(e,r);u=u||t.isTimeSpecified,a=a||t.isTimeZoneSpecified,n.exrule(t.rrule)}return{rruleSet:n,isTimeSpecified:u,isTimeZoneSpecified:a}}(e,r);if(n)return{typeData:{rruleSet:n.rruleSet,isTimeZoneSpecified:n.isTimeZoneSpecified},allDayGuess:!n.isTimeSpecified,duration:e.duration}}return null},expand(e,r,t){let i;return i=e.isTimeZoneSpecified?e.rruleSet.between(t.toDate(r.start),t.toDate(r.end),!0).map(e=>t.createMarker(e)):e.rruleSet.between(r.start,r.end,!0),i}};function l(e,r){let n=!1,l=!1;function s(e){if("string"==typeof e){let r=i.parseMarker(e);return r?(n=n||!r.isTimeUnspecified,l=l||null!==r.timeZoneOffset,new Date(r.marker.valueOf()-60*(r.timeZoneOffset||0)*1e3)):null}return e}let f=Object.assign(Object.assign({},e),{dtstart:s(e.dtstart),until:s(e.until),freq:a(e.freq),wkst:null==e.wkst?(r.weekDow-1+7)%7:a(e.wkst),byweekday:u(e.byweekday)});return{rrule:new t.RRule(f),isTimeSpecified:n,isTimeZoneSpecified:l}}function u(e){return Array.isArray(e)?e.map(a):a(e)}function a(e){return"string"==typeof e?t.RRule[e.toUpperCase()]:e}const s={rrule:i.identity,exrule:i.identity,exdate:i.identity,duration:i.createDuration};var f=r.createPlugin({name:"@fullcalendar/rrule",recurringTypes:[n],eventRefiners:s});return r.globalPlugins.push(f),e.default=f,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,rrule,FullCalendar.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/rrule/main.d.ts b/library/fullcalendar/packages/rrule/main.d.ts
deleted file mode 100644
index 8ce74e975..000000000
--- a/library/fullcalendar/packages/rrule/main.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../@fullcalendar/core
-
-declare module '@fullcalendar/rrule' {
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
-}
-
diff --git a/library/fullcalendar/packages/rrule/main.esm.js b/library/fullcalendar/packages/rrule/main.esm.js
deleted file mode 100644
index e4b92e95c..000000000
--- a/library/fullcalendar/packages/rrule/main.esm.js
+++ /dev/null
@@ -1,121 +0,0 @@
-/*!
-FullCalendar RRule Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { rrulestr, RRule } from 'rrule';
-import { createPlugin, refineProps, createDuration } from '@fullcalendar/core';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
-};
-
-var EVENT_DEF_PROPS = {
- rrule: null,
- duration: createDuration
-};
-var recurring = {
- parse: function (rawEvent, leftoverProps, dateEnv) {
- if (rawEvent.rrule != null) {
- var props = refineProps(rawEvent, EVENT_DEF_PROPS, {}, leftoverProps);
- var parsed = parseRRule(props.rrule, dateEnv);
- if (parsed) {
- return {
- typeData: parsed.rrule,
- allDayGuess: parsed.allDayGuess,
- duration: props.duration
- };
- }
- }
- return null;
- },
- expand: function (rrule, framingRange) {
- // we WANT an inclusive start and in exclusive end, but the js rrule lib will only do either BOTH
- // inclusive or BOTH exclusive, which is stupid: https://github.com/jakubroztocil/rrule/issues/84
- // Workaround: make inclusive, which will generate extra occurences, and then trim.
- return rrule.between(framingRange.start, framingRange.end, true)
- .filter(function (date) {
- return date.valueOf() < framingRange.end.valueOf();
- });
- }
-};
-var main = createPlugin({
- recurringTypes: [recurring]
-});
-function parseRRule(input, dateEnv) {
- var allDayGuess = null;
- var rrule;
- if (typeof input === 'string') {
- rrule = rrulestr(input);
- }
- else if (typeof input === 'object' && input) { // non-null object
- var refined = __assign({}, input); // copy
- if (typeof refined.dtstart === 'string') {
- var dtstartMeta = dateEnv.createMarkerMeta(refined.dtstart);
- if (dtstartMeta) {
- refined.dtstart = dtstartMeta.marker;
- allDayGuess = dtstartMeta.isTimeUnspecified;
- }
- else {
- delete refined.dtstart;
- }
- }
- if (typeof refined.until === 'string') {
- refined.until = dateEnv.createMarker(refined.until);
- }
- if (refined.freq != null) {
- refined.freq = convertConstant(refined.freq);
- }
- if (refined.wkst != null) {
- refined.wkst = convertConstant(refined.wkst);
- }
- else {
- refined.wkst = (dateEnv.weekDow - 1 + 7) % 7; // convert Sunday-first to Monday-first
- }
- if (refined.byweekday != null) {
- refined.byweekday = convertConstants(refined.byweekday); // the plural version
- }
- rrule = new RRule(refined);
- }
- if (rrule) {
- return { rrule: rrule, allDayGuess: allDayGuess };
- }
- return null;
-}
-function convertConstants(input) {
- if (Array.isArray(input)) {
- return input.map(convertConstant);
- }
- return convertConstant(input);
-}
-function convertConstant(input) {
- if (typeof input === 'string') {
- return RRule[input.toUpperCase()];
- }
- return input;
-}
-
-export default main;
diff --git a/library/fullcalendar/packages/rrule/main.js b/library/fullcalendar/packages/rrule/main.js
deleted file mode 100644
index 29e6130ac..000000000
--- a/library/fullcalendar/packages/rrule/main.js
+++ /dev/null
@@ -1,128 +0,0 @@
-/*!
-FullCalendar RRule Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rrule'), require('@fullcalendar/core')) :
- typeof define === 'function' && define.amd ? define(['exports', 'rrule', '@fullcalendar/core'], factory) :
- (global = global || self, factory(global.FullCalendarRrule = {}, global.rrule, global.FullCalendar));
-}(this, function (exports, rrule, core) { 'use strict';
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
-
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
-
- var EVENT_DEF_PROPS = {
- rrule: null,
- duration: core.createDuration
- };
- var recurring = {
- parse: function (rawEvent, leftoverProps, dateEnv) {
- if (rawEvent.rrule != null) {
- var props = core.refineProps(rawEvent, EVENT_DEF_PROPS, {}, leftoverProps);
- var parsed = parseRRule(props.rrule, dateEnv);
- if (parsed) {
- return {
- typeData: parsed.rrule,
- allDayGuess: parsed.allDayGuess,
- duration: props.duration
- };
- }
- }
- return null;
- },
- expand: function (rrule, framingRange) {
- // we WANT an inclusive start and in exclusive end, but the js rrule lib will only do either BOTH
- // inclusive or BOTH exclusive, which is stupid: https://github.com/jakubroztocil/rrule/issues/84
- // Workaround: make inclusive, which will generate extra occurences, and then trim.
- return rrule.between(framingRange.start, framingRange.end, true)
- .filter(function (date) {
- return date.valueOf() < framingRange.end.valueOf();
- });
- }
- };
- var main = core.createPlugin({
- recurringTypes: [recurring]
- });
- function parseRRule(input, dateEnv) {
- var allDayGuess = null;
- var rrule$1;
- if (typeof input === 'string') {
- rrule$1 = rrule.rrulestr(input);
- }
- else if (typeof input === 'object' && input) { // non-null object
- var refined = __assign({}, input); // copy
- if (typeof refined.dtstart === 'string') {
- var dtstartMeta = dateEnv.createMarkerMeta(refined.dtstart);
- if (dtstartMeta) {
- refined.dtstart = dtstartMeta.marker;
- allDayGuess = dtstartMeta.isTimeUnspecified;
- }
- else {
- delete refined.dtstart;
- }
- }
- if (typeof refined.until === 'string') {
- refined.until = dateEnv.createMarker(refined.until);
- }
- if (refined.freq != null) {
- refined.freq = convertConstant(refined.freq);
- }
- if (refined.wkst != null) {
- refined.wkst = convertConstant(refined.wkst);
- }
- else {
- refined.wkst = (dateEnv.weekDow - 1 + 7) % 7; // convert Sunday-first to Monday-first
- }
- if (refined.byweekday != null) {
- refined.byweekday = convertConstants(refined.byweekday); // the plural version
- }
- rrule$1 = new rrule.RRule(refined);
- }
- if (rrule$1) {
- return { rrule: rrule$1, allDayGuess: allDayGuess };
- }
- return null;
- }
- function convertConstants(input) {
- if (Array.isArray(input)) {
- return input.map(convertConstant);
- }
- return convertConstant(input);
- }
- function convertConstant(input) {
- if (typeof input === 'string') {
- return rrule.RRule[input.toUpperCase()];
- }
- return input;
- }
-
- exports.default = main;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/rrule/main.min.js b/library/fullcalendar/packages/rrule/main.min.js
deleted file mode 100644
index 68addc2bd..000000000
--- a/library/fullcalendar/packages/rrule/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar RRule Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("rrule"),require("@fullcalendar/core")):"function"==typeof define&&define.amd?define(["exports","rrule","@fullcalendar/core"],r):r((e=e||self).FullCalendarRrule={},e.rrule,e.FullCalendar)}(this,(function(e,r,t){"use strict";var n=function(){return(n=Object.assign||function(e){for(var r,t=1,n=arguments.length;t<n;t++)for(var u in r=arguments[t])Object.prototype.hasOwnProperty.call(r,u)&&(e[u]=r[u]);return e}).apply(this,arguments)},u={rrule:null,duration:t.createDuration},l={parse:function(e,l,a){if(null!=e.rrule){var f=t.refineProps(e,u,{},l),o=function(e,t){var u,l=null;if("string"==typeof e)u=r.rrulestr(e);else if("object"==typeof e&&e){var a=n({},e);if("string"==typeof a.dtstart){var f=t.createMarkerMeta(a.dtstart);f?(a.dtstart=f.marker,l=f.isTimeUnspecified):delete a.dtstart}"string"==typeof a.until&&(a.until=t.createMarker(a.until)),null!=a.freq&&(a.freq=i(a.freq)),null!=a.wkst?a.wkst=i(a.wkst):a.wkst=(t.weekDow-1+7)%7,null!=a.byweekday&&(a.byweekday=function(e){if(Array.isArray(e))return e.map(i);return i(e)}(a.byweekday)),u=new r.RRule(a)}if(u)return{rrule:u,allDayGuess:l};return null}(f.rrule,a);if(o)return{typeData:o.rrule,allDayGuess:o.allDayGuess,duration:f.duration}}return null},expand:function(e,r){return e.between(r.start,r.end,!0).filter((function(e){return e.valueOf()<r.end.valueOf()}))}},a=t.createPlugin({recurringTypes:[l]});function i(e){return"string"==typeof e?r.RRule[e.toUpperCase()]:e}e.default=a,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/rrule/package.json b/library/fullcalendar/packages/rrule/package.json
deleted file mode 100644
index 4cd35d029..000000000
--- a/library/fullcalendar/packages/rrule/package.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "@fullcalendar/rrule",
- "version": "4.4.2",
- "title": "FullCalendar RRule Plugin",
- "description": "A connector to the RRule library, for recurring events",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/rrule-plugin",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0",
- "rrule": "^2.6.0"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/timegrid/LICENSE.txt b/library/fullcalendar/packages/timegrid/LICENSE.txt
deleted file mode 100644
index 2149cfbef..000000000
--- a/library/fullcalendar/packages/timegrid/LICENSE.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2019 Adam Shaw
-
-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/library/fullcalendar/packages/timegrid/README.md b/library/fullcalendar/packages/timegrid/README.md
deleted file mode 100644
index ac13676c8..000000000
--- a/library/fullcalendar/packages/timegrid/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
-# FullCalendar Time Grid Plugin
-
-Display your events on a grid of time slots
-
-[View the docs &raquo;](https://fullcalendar.io/docs/timegrid-view)
-
-This package was created from the [FullCalendar monorepo &raquo;](https://github.com/fullcalendar/fullcalendar)
diff --git a/library/fullcalendar/packages/timegrid/index.global.js b/library/fullcalendar/packages/timegrid/index.global.js
new file mode 100644
index 000000000..830c7ee2c
--- /dev/null
+++ b/library/fullcalendar/packages/timegrid/index.global.js
@@ -0,0 +1,1198 @@
+/*!
+FullCalendar Time Grid Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/timegrid-view
+(c) 2022 Adam Shaw
+*/
+FullCalendar.TimeGrid = (function (exports, core, internal$1, preact, internal$2) {
+ 'use strict';
+
+ class AllDaySplitter extends internal$1.Splitter {
+ getKeyInfo() {
+ return {
+ allDay: {},
+ timed: {},
+ };
+ }
+ getKeysForDateSpan(dateSpan) {
+ if (dateSpan.allDay) {
+ return ['allDay'];
+ }
+ return ['timed'];
+ }
+ getKeysForEventDef(eventDef) {
+ if (!eventDef.allDay) {
+ return ['timed'];
+ }
+ if (internal$1.hasBgRendering(eventDef)) {
+ return ['timed', 'allDay'];
+ }
+ return ['allDay'];
+ }
+ }
+
+ const DEFAULT_SLAT_LABEL_FORMAT = internal$1.createFormatter({
+ hour: 'numeric',
+ minute: '2-digit',
+ omitZeroMinute: true,
+ meridiem: 'short',
+ });
+ function TimeColsAxisCell(props) {
+ let classNames = [
+ 'fc-timegrid-slot',
+ 'fc-timegrid-slot-label',
+ props.isLabeled ? 'fc-scrollgrid-shrink' : 'fc-timegrid-slot-minor',
+ ];
+ return (preact.createElement(internal$1.ViewContextType.Consumer, null, (context) => {
+ if (!props.isLabeled) {
+ return (preact.createElement("td", { className: classNames.join(' '), "data-time": props.isoTimeStr }));
+ }
+ let { dateEnv, options, viewApi } = context;
+ let labelFormat = // TODO: fully pre-parse
+ options.slotLabelFormat == null ? DEFAULT_SLAT_LABEL_FORMAT :
+ Array.isArray(options.slotLabelFormat) ? internal$1.createFormatter(options.slotLabelFormat[0]) :
+ internal$1.createFormatter(options.slotLabelFormat);
+ let renderProps = {
+ level: 0,
+ time: props.time,
+ date: dateEnv.toDate(props.date),
+ view: viewApi,
+ text: dateEnv.format(props.date, labelFormat),
+ };
+ return (preact.createElement(internal$1.ContentContainer, { elTag: "td", elClasses: classNames, elAttrs: {
+ 'data-time': props.isoTimeStr,
+ }, renderProps: renderProps, generatorName: "slotLabelContent", generator: options.slotLabelContent || renderInnerContent, classNameGenerator: options.slotLabelClassNames, didMount: options.slotLabelDidMount, willUnmount: options.slotLabelWillUnmount }, (InnerContent) => (preact.createElement("div", { className: "fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame" },
+ preact.createElement(InnerContent, { elTag: "div", elClasses: [
+ 'fc-timegrid-slot-label-cushion',
+ 'fc-scrollgrid-shrink-cushion',
+ ] })))));
+ }));
+ }
+ function renderInnerContent(props) {
+ return props.text;
+ }
+
+ class TimeBodyAxis extends internal$1.BaseComponent {
+ render() {
+ return this.props.slatMetas.map((slatMeta) => (preact.createElement("tr", { key: slatMeta.key },
+ preact.createElement(TimeColsAxisCell, Object.assign({}, slatMeta)))));
+ }
+ }
+
+ const DEFAULT_WEEK_NUM_FORMAT = internal$1.createFormatter({ week: 'short' });
+ const AUTO_ALL_DAY_MAX_EVENT_ROWS = 5;
+ class TimeColsView extends internal$1.DateComponent {
+ constructor() {
+ super(...arguments);
+ this.allDaySplitter = new AllDaySplitter(); // for use by subclasses
+ this.headerElRef = preact.createRef();
+ this.rootElRef = preact.createRef();
+ this.scrollerElRef = preact.createRef();
+ this.state = {
+ slatCoords: null,
+ };
+ this.handleScrollTopRequest = (scrollTop) => {
+ let scrollerEl = this.scrollerElRef.current;
+ if (scrollerEl) { // TODO: not sure how this could ever be null. weirdness with the reducer
+ scrollerEl.scrollTop = scrollTop;
+ }
+ };
+ /* Header Render Methods
+ ------------------------------------------------------------------------------------------------------------------*/
+ this.renderHeadAxis = (rowKey, frameHeight = '') => {
+ let { options } = this.context;
+ let { dateProfile } = this.props;
+ let range = dateProfile.renderRange;
+ let dayCnt = internal$1.diffDays(range.start, range.end);
+ // only do in day views (to avoid doing in week views that dont need it)
+ let navLinkAttrs = (dayCnt === 1)
+ ? internal$1.buildNavLinkAttrs(this.context, range.start, 'week')
+ : {};
+ if (options.weekNumbers && rowKey === 'day') {
+ return (preact.createElement(internal$1.WeekNumberContainer, { elTag: "th", elClasses: [
+ 'fc-timegrid-axis',
+ 'fc-scrollgrid-shrink',
+ ], elAttrs: {
+ 'aria-hidden': true,
+ }, date: range.start, defaultFormat: DEFAULT_WEEK_NUM_FORMAT }, (InnerContent) => (preact.createElement("div", { className: [
+ 'fc-timegrid-axis-frame',
+ 'fc-scrollgrid-shrink-frame',
+ 'fc-timegrid-axis-frame-liquid',
+ ].join(' '), style: { height: frameHeight } },
+ preact.createElement(InnerContent, { elTag: "a", elClasses: [
+ 'fc-timegrid-axis-cushion',
+ 'fc-scrollgrid-shrink-cushion',
+ 'fc-scrollgrid-sync-inner',
+ ], elAttrs: navLinkAttrs })))));
+ }
+ return (preact.createElement("th", { "aria-hidden": true, className: "fc-timegrid-axis" },
+ preact.createElement("div", { className: "fc-timegrid-axis-frame", style: { height: frameHeight } })));
+ };
+ /* Table Component Render Methods
+ ------------------------------------------------------------------------------------------------------------------*/
+ // only a one-way height sync. we don't send the axis inner-content height to the DayGrid,
+ // but DayGrid still needs to have classNames on inner elements in order to measure.
+ this.renderTableRowAxis = (rowHeight) => {
+ let { options, viewApi } = this.context;
+ let renderProps = {
+ text: options.allDayText,
+ view: viewApi,
+ };
+ return (
+ // TODO: make reusable hook. used in list view too
+ preact.createElement(internal$1.ContentContainer, { elTag: "td", elClasses: [
+ 'fc-timegrid-axis',
+ 'fc-scrollgrid-shrink',
+ ], elAttrs: {
+ 'aria-hidden': true,
+ }, renderProps: renderProps, generatorName: "allDayContent", generator: options.allDayContent || renderAllDayInner, classNameGenerator: options.allDayClassNames, didMount: options.allDayDidMount, willUnmount: options.allDayWillUnmount }, (InnerContent) => (preact.createElement("div", { className: [
+ 'fc-timegrid-axis-frame',
+ 'fc-scrollgrid-shrink-frame',
+ rowHeight == null ? ' fc-timegrid-axis-frame-liquid' : '',
+ ].join(' '), style: { height: rowHeight } },
+ preact.createElement(InnerContent, { elTag: "span", elClasses: [
+ 'fc-timegrid-axis-cushion',
+ 'fc-scrollgrid-shrink-cushion',
+ 'fc-scrollgrid-sync-inner',
+ ] })))));
+ };
+ this.handleSlatCoords = (slatCoords) => {
+ this.setState({ slatCoords });
+ };
+ }
+ // rendering
+ // ----------------------------------------------------------------------------------------------------
+ renderSimpleLayout(headerRowContent, allDayContent, timeContent) {
+ let { context, props } = this;
+ let sections = [];
+ let stickyHeaderDates = internal$1.getStickyHeaderDates(context.options);
+ if (headerRowContent) {
+ sections.push({
+ type: 'header',
+ key: 'header',
+ isSticky: stickyHeaderDates,
+ chunk: {
+ elRef: this.headerElRef,
+ tableClassName: 'fc-col-header',
+ rowContent: headerRowContent,
+ },
+ });
+ }
+ if (allDayContent) {
+ sections.push({
+ type: 'body',
+ key: 'all-day',
+ chunk: { content: allDayContent },
+ });
+ sections.push({
+ type: 'body',
+ key: 'all-day-divider',
+ outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?
+ preact.createElement("tr", { role: "presentation", className: "fc-scrollgrid-section" },
+ preact.createElement("td", { className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),
+ });
+ }
+ sections.push({
+ type: 'body',
+ key: 'body',
+ liquid: true,
+ expandRows: Boolean(context.options.expandRows),
+ chunk: {
+ scrollerElRef: this.scrollerElRef,
+ content: timeContent,
+ },
+ });
+ return (preact.createElement(internal$1.ViewContainer, { elRef: this.rootElRef, elClasses: ['fc-timegrid'], viewSpec: context.viewSpec },
+ preact.createElement(internal$1.SimpleScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: props.forPrint, cols: [{ width: 'shrink' }], sections: sections })));
+ }
+ renderHScrollLayout(headerRowContent, allDayContent, timeContent, colCnt, dayMinWidth, slatMetas, slatCoords) {
+ let ScrollGrid = this.context.pluginHooks.scrollGridImpl;
+ if (!ScrollGrid) {
+ throw new Error('No ScrollGrid implementation');
+ }
+ let { context, props } = this;
+ let stickyHeaderDates = !props.forPrint && internal$1.getStickyHeaderDates(context.options);
+ let stickyFooterScrollbar = !props.forPrint && internal$1.getStickyFooterScrollbar(context.options);
+ let sections = [];
+ if (headerRowContent) {
+ sections.push({
+ type: 'header',
+ key: 'header',
+ isSticky: stickyHeaderDates,
+ syncRowHeights: true,
+ chunks: [
+ {
+ key: 'axis',
+ rowContent: (arg) => (preact.createElement("tr", { role: "presentation" }, this.renderHeadAxis('day', arg.rowSyncHeights[0]))),
+ },
+ {
+ key: 'cols',
+ elRef: this.headerElRef,
+ tableClassName: 'fc-col-header',
+ rowContent: headerRowContent,
+ },
+ ],
+ });
+ }
+ if (allDayContent) {
+ sections.push({
+ type: 'body',
+ key: 'all-day',
+ syncRowHeights: true,
+ chunks: [
+ {
+ key: 'axis',
+ rowContent: (contentArg) => (preact.createElement("tr", { role: "presentation" }, this.renderTableRowAxis(contentArg.rowSyncHeights[0]))),
+ },
+ {
+ key: 'cols',
+ content: allDayContent,
+ },
+ ],
+ });
+ sections.push({
+ key: 'all-day-divider',
+ type: 'body',
+ outerContent: ( // TODO: rename to cellContent so don't need to define <tr>?
+ preact.createElement("tr", { role: "presentation", className: "fc-scrollgrid-section" },
+ preact.createElement("td", { colSpan: 2, className: 'fc-timegrid-divider ' + context.theme.getClass('tableCellShaded') }))),
+ });
+ }
+ let isNowIndicator = context.options.nowIndicator;
+ sections.push({
+ type: 'body',
+ key: 'body',
+ liquid: true,
+ expandRows: Boolean(context.options.expandRows),
+ chunks: [
+ {
+ key: 'axis',
+ content: (arg) => (
+ // TODO: make this now-indicator arrow more DRY with TimeColsContent
+ preact.createElement("div", { className: "fc-timegrid-axis-chunk" },
+ preact.createElement("table", { "aria-hidden": true, style: { height: arg.expandRows ? arg.clientHeight : '' } },
+ arg.tableColGroupNode,
+ preact.createElement("tbody", null,
+ preact.createElement(TimeBodyAxis, { slatMetas: slatMetas }))),
+ preact.createElement("div", { className: "fc-timegrid-now-indicator-container" },
+ preact.createElement(internal$1.NowTimer, { unit: isNowIndicator ? 'minute' : 'day' /* hacky */ }, (nowDate) => {
+ let nowIndicatorTop = isNowIndicator &&
+ slatCoords &&
+ slatCoords.safeComputeTop(nowDate); // might return void
+ if (typeof nowIndicatorTop === 'number') {
+ return (preact.createElement(internal$1.NowIndicatorContainer, { elClasses: ['fc-timegrid-now-indicator-arrow'], elStyle: { top: nowIndicatorTop }, isAxis: true, date: nowDate }));
+ }
+ return null;
+ })))),
+ },
+ {
+ key: 'cols',
+ scrollerElRef: this.scrollerElRef,
+ content: timeContent,
+ },
+ ],
+ });
+ if (stickyFooterScrollbar) {
+ sections.push({
+ key: 'footer',
+ type: 'footer',
+ isSticky: true,
+ chunks: [
+ {
+ key: 'axis',
+ content: internal$1.renderScrollShim,
+ },
+ {
+ key: 'cols',
+ content: internal$1.renderScrollShim,
+ },
+ ],
+ });
+ }
+ return (preact.createElement(internal$1.ViewContainer, { elRef: this.rootElRef, elClasses: ['fc-timegrid'], viewSpec: context.viewSpec },
+ preact.createElement(ScrollGrid, { liquid: !props.isHeightAuto && !props.forPrint, collapsibleWidth: false, colGroups: [
+ { width: 'shrink', cols: [{ width: 'shrink' }] },
+ { cols: [{ span: colCnt, minWidth: dayMinWidth }] },
+ ], sections: sections })));
+ }
+ /* Dimensions
+ ------------------------------------------------------------------------------------------------------------------*/
+ getAllDayMaxEventProps() {
+ let { dayMaxEvents, dayMaxEventRows } = this.context.options;
+ if (dayMaxEvents === true || dayMaxEventRows === true) { // is auto?
+ dayMaxEvents = undefined;
+ dayMaxEventRows = AUTO_ALL_DAY_MAX_EVENT_ROWS; // make sure "auto" goes to a real number
+ }
+ return { dayMaxEvents, dayMaxEventRows };
+ }
+ }
+ function renderAllDayInner(renderProps) {
+ return renderProps.text;
+ }
+
+ class TimeColsSlatsCoords {
+ constructor(positions, dateProfile, slotDuration) {
+ this.positions = positions;
+ this.dateProfile = dateProfile;
+ this.slotDuration = slotDuration;
+ }
+ safeComputeTop(date) {
+ let { dateProfile } = this;
+ if (internal$1.rangeContainsMarker(dateProfile.currentRange, date)) {
+ let startOfDayDate = internal$1.startOfDay(date);
+ let timeMs = date.valueOf() - startOfDayDate.valueOf();
+ if (timeMs >= internal$1.asRoughMs(dateProfile.slotMinTime) &&
+ timeMs < internal$1.asRoughMs(dateProfile.slotMaxTime)) {
+ return this.computeTimeTop(internal$1.createDuration(timeMs));
+ }
+ }
+ return null;
+ }
+ // Computes the top coordinate, relative to the bounds of the grid, of the given date.
+ // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
+ computeDateTop(when, startOfDayDate) {
+ if (!startOfDayDate) {
+ startOfDayDate = internal$1.startOfDay(when);
+ }
+ return this.computeTimeTop(internal$1.createDuration(when.valueOf() - startOfDayDate.valueOf()));
+ }
+ // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
+ // This is a makeshify way to compute the time-top. Assumes all slatMetas dates are uniform.
+ // Eventually allow computation with arbirary slat dates.
+ computeTimeTop(duration) {
+ let { positions, dateProfile } = this;
+ let len = positions.els.length;
+ // floating-point value of # of slots covered
+ let slatCoverage = (duration.milliseconds - internal$1.asRoughMs(dateProfile.slotMinTime)) / internal$1.asRoughMs(this.slotDuration);
+ let slatIndex;
+ let slatRemainder;
+ // compute a floating-point number for how many slats should be progressed through.
+ // from 0 to number of slats (inclusive)
+ // constrained because slotMinTime/slotMaxTime might be customized.
+ slatCoverage = Math.max(0, slatCoverage);
+ slatCoverage = Math.min(len, slatCoverage);
+ // an integer index of the furthest whole slat
+ // from 0 to number slats (*exclusive*, so len-1)
+ slatIndex = Math.floor(slatCoverage);
+ slatIndex = Math.min(slatIndex, len - 1);
+ // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
+ // could be 1.0 if slatCoverage is covering *all* the slots
+ slatRemainder = slatCoverage - slatIndex;
+ return positions.tops[slatIndex] +
+ positions.getHeight(slatIndex) * slatRemainder;
+ }
+ }
+
+ class TimeColsSlatsBody extends internal$1.BaseComponent {
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let { slatElRefs } = props;
+ return (preact.createElement("tbody", null, props.slatMetas.map((slatMeta, i) => {
+ let renderProps = {
+ time: slatMeta.time,
+ date: context.dateEnv.toDate(slatMeta.date),
+ view: context.viewApi,
+ };
+ return (preact.createElement("tr", { key: slatMeta.key, ref: slatElRefs.createRef(slatMeta.key) },
+ props.axis && (preact.createElement(TimeColsAxisCell, Object.assign({}, slatMeta))),
+ preact.createElement(internal$1.ContentContainer, { elTag: "td", elClasses: [
+ 'fc-timegrid-slot',
+ 'fc-timegrid-slot-lane',
+ !slatMeta.isLabeled && 'fc-timegrid-slot-minor',
+ ], elAttrs: {
+ 'data-time': slatMeta.isoTimeStr,
+ }, renderProps: renderProps, generatorName: "slotLaneContent", generator: options.slotLaneContent, classNameGenerator: options.slotLaneClassNames, didMount: options.slotLaneDidMount, willUnmount: options.slotLaneWillUnmount })));
+ })));
+ }
+ }
+
+ /*
+ for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
+ */
+ class TimeColsSlats extends internal$1.BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.rootElRef = preact.createRef();
+ this.slatElRefs = new internal$1.RefMap();
+ }
+ render() {
+ let { props, context } = this;
+ return (preact.createElement("div", { ref: this.rootElRef, className: "fc-timegrid-slots" },
+ preact.createElement("table", { "aria-hidden": true, className: context.theme.getClass('table'), style: {
+ minWidth: props.tableMinWidth,
+ width: props.clientWidth,
+ height: props.minHeight,
+ } },
+ props.tableColGroupNode /* relies on there only being a single <col> for the axis */,
+ preact.createElement(TimeColsSlatsBody, { slatElRefs: this.slatElRefs, axis: props.axis, slatMetas: props.slatMetas }))));
+ }
+ componentDidMount() {
+ this.updateSizing();
+ }
+ componentDidUpdate() {
+ this.updateSizing();
+ }
+ componentWillUnmount() {
+ if (this.props.onCoords) {
+ this.props.onCoords(null);
+ }
+ }
+ updateSizing() {
+ let { context, props } = this;
+ if (props.onCoords &&
+ props.clientWidth !== null // means sizing has stabilized
+ ) {
+ let rootEl = this.rootElRef.current;
+ if (rootEl.offsetHeight) { // not hidden by css
+ props.onCoords(new TimeColsSlatsCoords(new internal$1.PositionCache(this.rootElRef.current, collectSlatEls(this.slatElRefs.currentMap, props.slatMetas), false, true), this.props.dateProfile, context.options.slotDuration));
+ }
+ }
+ }
+ }
+ function collectSlatEls(elMap, slatMetas) {
+ return slatMetas.map((slatMeta) => elMap[slatMeta.key]);
+ }
+
+ function splitSegsByCol(segs, colCnt) {
+ let segsByCol = [];
+ let i;
+ for (i = 0; i < colCnt; i += 1) {
+ segsByCol.push([]);
+ }
+ if (segs) {
+ for (i = 0; i < segs.length; i += 1) {
+ segsByCol[segs[i].col].push(segs[i]);
+ }
+ }
+ return segsByCol;
+ }
+ function splitInteractionByCol(ui, colCnt) {
+ let byRow = [];
+ if (!ui) {
+ for (let i = 0; i < colCnt; i += 1) {
+ byRow[i] = null;
+ }
+ }
+ else {
+ for (let i = 0; i < colCnt; i += 1) {
+ byRow[i] = {
+ affectedInstances: ui.affectedInstances,
+ isEvent: ui.isEvent,
+ segs: [],
+ };
+ }
+ for (let seg of ui.segs) {
+ byRow[seg.col].segs.push(seg);
+ }
+ }
+ return byRow;
+ }
+
+ class TimeColMoreLink extends internal$1.BaseComponent {
+ render() {
+ let { props } = this;
+ return (preact.createElement(internal$1.MoreLinkContainer, { elClasses: ['fc-timegrid-more-link'], elStyle: {
+ top: props.top,
+ bottom: props.bottom,
+ }, allDayDate: null, moreCnt: props.hiddenSegs.length, allSegs: props.hiddenSegs, hiddenSegs: props.hiddenSegs, extraDateSpan: props.extraDateSpan, dateProfile: props.dateProfile, todayRange: props.todayRange, popoverContent: () => renderPlainFgSegs(props.hiddenSegs, props), defaultGenerator: renderMoreLinkInner }, (InnerContent) => (preact.createElement(InnerContent, { elTag: "div", elClasses: ['fc-timegrid-more-link-inner', 'fc-sticky'] }))));
+ }
+ }
+ function renderMoreLinkInner(props) {
+ return props.shortText;
+ }
+
+ // segInputs assumed sorted
+ function buildPositioning(segInputs, strictOrder, maxStackCnt) {
+ let hierarchy = new internal$1.SegHierarchy();
+ if (strictOrder != null) {
+ hierarchy.strictOrder = strictOrder;
+ }
+ if (maxStackCnt != null) {
+ hierarchy.maxStackCnt = maxStackCnt;
+ }
+ let hiddenEntries = hierarchy.addSegs(segInputs);
+ let hiddenGroups = internal$1.groupIntersectingEntries(hiddenEntries);
+ let web = buildWeb(hierarchy);
+ web = stretchWeb(web, 1); // all levelCoords/thickness will have 0.0-1.0
+ let segRects = webToRects(web);
+ return { segRects, hiddenGroups };
+ }
+ function buildWeb(hierarchy) {
+ const { entriesByLevel } = hierarchy;
+ const buildNode = cacheable((level, lateral) => level + ':' + lateral, (level, lateral) => {
+ let siblingRange = findNextLevelSegs(hierarchy, level, lateral);
+ let nextLevelRes = buildNodes(siblingRange, buildNode);
+ let entry = entriesByLevel[level][lateral];
+ return [
+ Object.assign(Object.assign({}, entry), { nextLevelNodes: nextLevelRes[0] }),
+ entry.thickness + nextLevelRes[1], // the pressure builds
+ ];
+ });
+ return buildNodes(entriesByLevel.length
+ ? { level: 0, lateralStart: 0, lateralEnd: entriesByLevel[0].length }
+ : null, buildNode)[0];
+ }
+ function buildNodes(siblingRange, buildNode) {
+ if (!siblingRange) {
+ return [[], 0];
+ }
+ let { level, lateralStart, lateralEnd } = siblingRange;
+ let lateral = lateralStart;
+ let pairs = [];
+ while (lateral < lateralEnd) {
+ pairs.push(buildNode(level, lateral));
+ lateral += 1;
+ }
+ pairs.sort(cmpDescPressures);
+ return [
+ pairs.map(extractNode),
+ pairs[0][1], // first item's pressure
+ ];
+ }
+ function cmpDescPressures(a, b) {
+ return b[1] - a[1];
+ }
+ function extractNode(a) {
+ return a[0];
+ }
+ function findNextLevelSegs(hierarchy, subjectLevel, subjectLateral) {
+ let { levelCoords, entriesByLevel } = hierarchy;
+ let subjectEntry = entriesByLevel[subjectLevel][subjectLateral];
+ let afterSubject = levelCoords[subjectLevel] + subjectEntry.thickness;
+ let levelCnt = levelCoords.length;
+ let level = subjectLevel;
+ // skip past levels that are too high up
+ for (; level < levelCnt && levelCoords[level] < afterSubject; level += 1)
+ ; // do nothing
+ for (; level < levelCnt; level += 1) {
+ let entries = entriesByLevel[level];
+ let entry;
+ let searchIndex = internal$1.binarySearch(entries, subjectEntry.span.start, internal$1.getEntrySpanEnd);
+ let lateralStart = searchIndex[0] + searchIndex[1]; // if exact match (which doesn't collide), go to next one
+ let lateralEnd = lateralStart;
+ while ( // loop through entries that horizontally intersect
+ (entry = entries[lateralEnd]) && // but not past the whole seg list
+ entry.span.start < subjectEntry.span.end) {
+ lateralEnd += 1;
+ }
+ if (lateralStart < lateralEnd) {
+ return { level, lateralStart, lateralEnd };
+ }
+ }
+ return null;
+ }
+ function stretchWeb(topLevelNodes, totalThickness) {
+ const stretchNode = cacheable((node, startCoord, prevThickness) => internal$1.buildEntryKey(node), (node, startCoord, prevThickness) => {
+ let { nextLevelNodes, thickness } = node;
+ let allThickness = thickness + prevThickness;
+ let thicknessFraction = thickness / allThickness;
+ let endCoord;
+ let newChildren = [];
+ if (!nextLevelNodes.length) {
+ endCoord = totalThickness;
+ }
+ else {
+ for (let childNode of nextLevelNodes) {
+ if (endCoord === undefined) {
+ let res = stretchNode(childNode, startCoord, allThickness);
+ endCoord = res[0];
+ newChildren.push(res[1]);
+ }
+ else {
+ let res = stretchNode(childNode, endCoord, 0);
+ newChildren.push(res[1]);
+ }
+ }
+ }
+ let newThickness = (endCoord - startCoord) * thicknessFraction;
+ return [endCoord - newThickness, Object.assign(Object.assign({}, node), { thickness: newThickness, nextLevelNodes: newChildren })];
+ });
+ return topLevelNodes.map((node) => stretchNode(node, 0, 0)[1]);
+ }
+ // not sorted in any particular order
+ function webToRects(topLevelNodes) {
+ let rects = [];
+ const processNode = cacheable((node, levelCoord, stackDepth) => internal$1.buildEntryKey(node), (node, levelCoord, stackDepth) => {
+ let rect = Object.assign(Object.assign({}, node), { levelCoord,
+ stackDepth, stackForward: 0 });
+ rects.push(rect);
+ return (rect.stackForward = processNodes(node.nextLevelNodes, levelCoord + node.thickness, stackDepth + 1) + 1);
+ });
+ function processNodes(nodes, levelCoord, stackDepth) {
+ let stackForward = 0;
+ for (let node of nodes) {
+ stackForward = Math.max(processNode(node, levelCoord, stackDepth), stackForward);
+ }
+ return stackForward;
+ }
+ processNodes(topLevelNodes, 0, 0);
+ return rects; // TODO: sort rects by levelCoord to be consistent with toRects?
+ }
+ // TODO: move to general util
+ function cacheable(keyFunc, workFunc) {
+ const cache = {};
+ return (...args) => {
+ let key = keyFunc(...args);
+ return (key in cache)
+ ? cache[key]
+ : (cache[key] = workFunc(...args));
+ };
+ }
+
+ function computeSegVCoords(segs, colDate, slatCoords = null, eventMinHeight = 0) {
+ let vcoords = [];
+ if (slatCoords) {
+ for (let i = 0; i < segs.length; i += 1) {
+ let seg = segs[i];
+ let spanStart = slatCoords.computeDateTop(seg.start, colDate);
+ let spanEnd = Math.max(spanStart + (eventMinHeight || 0), // :(
+ slatCoords.computeDateTop(seg.end, colDate));
+ vcoords.push({
+ start: Math.round(spanStart),
+ end: Math.round(spanEnd), //
+ });
+ }
+ }
+ return vcoords;
+ }
+ function computeFgSegPlacements(segs, segVCoords, // might not have for every seg
+ eventOrderStrict, eventMaxStack) {
+ let segInputs = [];
+ let dumbSegs = []; // segs without coords
+ for (let i = 0; i < segs.length; i += 1) {
+ let vcoords = segVCoords[i];
+ if (vcoords) {
+ segInputs.push({
+ index: i,
+ thickness: 1,
+ span: vcoords,
+ });
+ }
+ else {
+ dumbSegs.push(segs[i]);
+ }
+ }
+ let { segRects, hiddenGroups } = buildPositioning(segInputs, eventOrderStrict, eventMaxStack);
+ let segPlacements = [];
+ for (let segRect of segRects) {
+ segPlacements.push({
+ seg: segs[segRect.index],
+ rect: segRect,
+ });
+ }
+ for (let dumbSeg of dumbSegs) {
+ segPlacements.push({ seg: dumbSeg, rect: null });
+ }
+ return { segPlacements, hiddenGroups };
+ }
+
+ const DEFAULT_TIME_FORMAT = internal$1.createFormatter({
+ hour: 'numeric',
+ minute: '2-digit',
+ meridiem: false,
+ });
+ class TimeColEvent extends internal$1.BaseComponent {
+ render() {
+ return (preact.createElement(internal$1.StandardEvent, Object.assign({}, this.props, { elClasses: [
+ 'fc-timegrid-event',
+ 'fc-v-event',
+ this.props.isShort && 'fc-timegrid-event-short',
+ ], defaultTimeFormat: DEFAULT_TIME_FORMAT })));
+ }
+ }
+
+ class TimeCol extends internal$1.BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.sortEventSegs = internal$1.memoize(internal$1.sortEventSegs);
+ }
+ // TODO: memoize event-placement?
+ render() {
+ let { props, context } = this;
+ let { options } = context;
+ let isSelectMirror = options.selectMirror;
+ let mirrorSegs = // yuck
+ (props.eventDrag && props.eventDrag.segs) ||
+ (props.eventResize && props.eventResize.segs) ||
+ (isSelectMirror && props.dateSelectionSegs) ||
+ [];
+ let interactionAffectedInstances = // TODO: messy way to compute this
+ (props.eventDrag && props.eventDrag.affectedInstances) ||
+ (props.eventResize && props.eventResize.affectedInstances) ||
+ {};
+ let sortedFgSegs = this.sortEventSegs(props.fgEventSegs, options.eventOrder);
+ return (preact.createElement(internal$1.DayCellContainer, { elTag: "td", elRef: props.elRef, elClasses: [
+ 'fc-timegrid-col',
+ ...(props.extraClassNames || []),
+ ], elAttrs: Object.assign({ role: 'gridcell' }, props.extraDataAttrs), date: props.date, dateProfile: props.dateProfile, todayRange: props.todayRange, extraRenderProps: props.extraRenderProps }, (InnerContent) => (preact.createElement("div", { className: "fc-timegrid-col-frame" },
+ preact.createElement("div", { className: "fc-timegrid-col-bg" },
+ this.renderFillSegs(props.businessHourSegs, 'non-business'),
+ this.renderFillSegs(props.bgEventSegs, 'bg-event'),
+ this.renderFillSegs(props.dateSelectionSegs, 'highlight')),
+ preact.createElement("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(sortedFgSegs, interactionAffectedInstances, false, false, false)),
+ preact.createElement("div", { className: "fc-timegrid-col-events" }, this.renderFgSegs(mirrorSegs, {}, Boolean(props.eventDrag), Boolean(props.eventResize), Boolean(isSelectMirror))),
+ preact.createElement("div", { className: "fc-timegrid-now-indicator-container" }, this.renderNowIndicator(props.nowIndicatorSegs)),
+ internal$1.hasCustomDayCellContent(options) && (preact.createElement(InnerContent, { elTag: "div", elClasses: ['fc-timegrid-col-misc'] }))))));
+ }
+ renderFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting) {
+ let { props } = this;
+ if (props.forPrint) {
+ return renderPlainFgSegs(sortedFgSegs, props);
+ }
+ return this.renderPositionedFgSegs(sortedFgSegs, segIsInvisible, isDragging, isResizing, isDateSelecting);
+ }
+ renderPositionedFgSegs(segs, // if not mirror, needs to be sorted
+ segIsInvisible, isDragging, isResizing, isDateSelecting) {
+ let { eventMaxStack, eventShortHeight, eventOrderStrict, eventMinHeight } = this.context.options;
+ let { date, slatCoords, eventSelection, todayRange, nowDate } = this.props;
+ let isMirror = isDragging || isResizing || isDateSelecting;
+ let segVCoords = computeSegVCoords(segs, date, slatCoords, eventMinHeight);
+ let { segPlacements, hiddenGroups } = computeFgSegPlacements(segs, segVCoords, eventOrderStrict, eventMaxStack);
+ return (preact.createElement(preact.Fragment, null,
+ this.renderHiddenGroups(hiddenGroups, segs),
+ segPlacements.map((segPlacement) => {
+ let { seg, rect } = segPlacement;
+ let instanceId = seg.eventRange.instance.instanceId;
+ let isVisible = isMirror || Boolean(!segIsInvisible[instanceId] && rect);
+ let vStyle = computeSegVStyle(rect && rect.span);
+ let hStyle = (!isMirror && rect) ? this.computeSegHStyle(rect) : { left: 0, right: 0 };
+ let isInset = Boolean(rect) && rect.stackForward > 0;
+ let isShort = Boolean(rect) && (rect.span.end - rect.span.start) < eventShortHeight; // look at other places for this problem
+ return (preact.createElement("div", { className: 'fc-timegrid-event-harness' +
+ (isInset ? ' fc-timegrid-event-harness-inset' : ''), key: instanceId, style: Object.assign(Object.assign({ visibility: isVisible ? '' : 'hidden' }, vStyle), hStyle) },
+ preact.createElement(TimeColEvent, Object.assign({ seg: seg, isDragging: isDragging, isResizing: isResizing, isDateSelecting: isDateSelecting, isSelected: instanceId === eventSelection, isShort: isShort }, internal$1.getSegMeta(seg, todayRange, nowDate)))));
+ })));
+ }
+ // will already have eventMinHeight applied because segInputs already had it
+ renderHiddenGroups(hiddenGroups, segs) {
+ let { extraDateSpan, dateProfile, todayRange, nowDate, eventSelection, eventDrag, eventResize } = this.props;
+ return (preact.createElement(preact.Fragment, null, hiddenGroups.map((hiddenGroup) => {
+ let positionCss = computeSegVStyle(hiddenGroup.span);
+ let hiddenSegs = compileSegsFromEntries(hiddenGroup.entries, segs);
+ return (preact.createElement(TimeColMoreLink, { key: internal$1.buildIsoString(internal$1.computeEarliestSegStart(hiddenSegs)), hiddenSegs: hiddenSegs, top: positionCss.top, bottom: positionCss.bottom, extraDateSpan: extraDateSpan, dateProfile: dateProfile, todayRange: todayRange, nowDate: nowDate, eventSelection: eventSelection, eventDrag: eventDrag, eventResize: eventResize }));
+ })));
+ }
+ renderFillSegs(segs, fillType) {
+ let { props, context } = this;
+ let segVCoords = computeSegVCoords(segs, props.date, props.slatCoords, context.options.eventMinHeight); // don't assume all populated
+ let children = segVCoords.map((vcoords, i) => {
+ let seg = segs[i];
+ return (preact.createElement("div", { key: internal$1.buildEventRangeKey(seg.eventRange), className: "fc-timegrid-bg-harness", style: computeSegVStyle(vcoords) }, fillType === 'bg-event' ?
+ preact.createElement(internal$1.BgEvent, Object.assign({ seg: seg }, internal$1.getSegMeta(seg, props.todayRange, props.nowDate))) :
+ internal$1.renderFill(fillType)));
+ });
+ return preact.createElement(preact.Fragment, null, children);
+ }
+ renderNowIndicator(segs) {
+ let { slatCoords, date } = this.props;
+ if (!slatCoords) {
+ return null;
+ }
+ return segs.map((seg, i) => (preact.createElement(internal$1.NowIndicatorContainer
+ // key doesn't matter. will only ever be one
+ , {
+ // key doesn't matter. will only ever be one
+ key: i, elClasses: ['fc-timegrid-now-indicator-line'], elStyle: {
+ top: slatCoords.computeDateTop(seg.start, date),
+ }, isAxis: false, date: date })));
+ }
+ computeSegHStyle(segHCoords) {
+ let { isRtl, options } = this.context;
+ let shouldOverlap = options.slotEventOverlap;
+ let nearCoord = segHCoords.levelCoord; // the left side if LTR. the right side if RTL. floating-point
+ let farCoord = segHCoords.levelCoord + segHCoords.thickness; // the right side if LTR. the left side if RTL. floating-point
+ let left; // amount of space from left edge, a fraction of the total width
+ let right; // amount of space from right edge, a fraction of the total width
+ if (shouldOverlap) {
+ // double the width, but don't go beyond the maximum forward coordinate (1.0)
+ farCoord = Math.min(1, nearCoord + (farCoord - nearCoord) * 2);
+ }
+ if (isRtl) {
+ left = 1 - farCoord;
+ right = nearCoord;
+ }
+ else {
+ left = nearCoord;
+ right = 1 - farCoord;
+ }
+ let props = {
+ zIndex: segHCoords.stackDepth + 1,
+ left: left * 100 + '%',
+ right: right * 100 + '%',
+ };
+ if (shouldOverlap && !segHCoords.stackForward) {
+ // add padding to the edge so that forward stacked events don't cover the resizer's icon
+ props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
+ }
+ return props;
+ }
+ }
+ function renderPlainFgSegs(sortedFgSegs, { todayRange, nowDate, eventSelection, eventDrag, eventResize }) {
+ let hiddenInstances = (eventDrag ? eventDrag.affectedInstances : null) ||
+ (eventResize ? eventResize.affectedInstances : null) ||
+ {};
+ return (preact.createElement(preact.Fragment, null, sortedFgSegs.map((seg) => {
+ let instanceId = seg.eventRange.instance.instanceId;
+ return (preact.createElement("div", { key: instanceId, style: { visibility: hiddenInstances[instanceId] ? 'hidden' : '' } },
+ preact.createElement(TimeColEvent, Object.assign({ seg: seg, isDragging: false, isResizing: false, isDateSelecting: false, isSelected: instanceId === eventSelection, isShort: false }, internal$1.getSegMeta(seg, todayRange, nowDate)))));
+ })));
+ }
+ function computeSegVStyle(segVCoords) {
+ if (!segVCoords) {
+ return { top: '', bottom: '' };
+ }
+ return {
+ top: segVCoords.start,
+ bottom: -segVCoords.end,
+ };
+ }
+ function compileSegsFromEntries(segEntries, allSegs) {
+ return segEntries.map((segEntry) => allSegs[segEntry.index]);
+ }
+
+ class TimeColsContent extends internal$1.BaseComponent {
+ constructor() {
+ super(...arguments);
+ this.splitFgEventSegs = internal$1.memoize(splitSegsByCol);
+ this.splitBgEventSegs = internal$1.memoize(splitSegsByCol);
+ this.splitBusinessHourSegs = internal$1.memoize(splitSegsByCol);
+ this.splitNowIndicatorSegs = internal$1.memoize(splitSegsByCol);
+ this.splitDateSelectionSegs = internal$1.memoize(splitSegsByCol);
+ this.splitEventDrag = internal$1.memoize(splitInteractionByCol);
+ this.splitEventResize = internal$1.memoize(splitInteractionByCol);
+ this.rootElRef = preact.createRef();
+ this.cellElRefs = new internal$1.RefMap();
+ }
+ render() {
+ let { props, context } = this;
+ let nowIndicatorTop = context.options.nowIndicator &&
+ props.slatCoords &&
+ props.slatCoords.safeComputeTop(props.nowDate); // might return void
+ let colCnt = props.cells.length;
+ let fgEventSegsByRow = this.splitFgEventSegs(props.fgEventSegs, colCnt);
+ let bgEventSegsByRow = this.splitBgEventSegs(props.bgEventSegs, colCnt);
+ let businessHourSegsByRow = this.splitBusinessHourSegs(props.businessHourSegs, colCnt);
+ let nowIndicatorSegsByRow = this.splitNowIndicatorSegs(props.nowIndicatorSegs, colCnt);
+ let dateSelectionSegsByRow = this.splitDateSelectionSegs(props.dateSelectionSegs, colCnt);
+ let eventDragByRow = this.splitEventDrag(props.eventDrag, colCnt);
+ let eventResizeByRow = this.splitEventResize(props.eventResize, colCnt);
+ return (preact.createElement("div", { className: "fc-timegrid-cols", ref: this.rootElRef },
+ preact.createElement("table", { role: "presentation", style: {
+ minWidth: props.tableMinWidth,
+ width: props.clientWidth,
+ } },
+ props.tableColGroupNode,
+ preact.createElement("tbody", { role: "presentation" },
+ preact.createElement("tr", { role: "row" },
+ props.axis && (preact.createElement("td", { "aria-hidden": true, className: "fc-timegrid-col fc-timegrid-axis" },
+ preact.createElement("div", { className: "fc-timegrid-col-frame" },
+ preact.createElement("div", { className: "fc-timegrid-now-indicator-container" }, typeof nowIndicatorTop === 'number' && (preact.createElement(internal$1.NowIndicatorContainer, { elClasses: ['fc-timegrid-now-indicator-arrow'], elStyle: { top: nowIndicatorTop }, isAxis: true, date: props.nowDate })))))),
+ props.cells.map((cell, i) => (preact.createElement(TimeCol, { key: cell.key, elRef: this.cellElRefs.createRef(cell.key), dateProfile: props.dateProfile, date: cell.date, nowDate: props.nowDate, todayRange: props.todayRange, extraRenderProps: cell.extraRenderProps, extraDataAttrs: cell.extraDataAttrs, extraClassNames: cell.extraClassNames, extraDateSpan: cell.extraDateSpan, fgEventSegs: fgEventSegsByRow[i], bgEventSegs: bgEventSegsByRow[i], businessHourSegs: businessHourSegsByRow[i], nowIndicatorSegs: nowIndicatorSegsByRow[i], dateSelectionSegs: dateSelectionSegsByRow[i], eventDrag: eventDragByRow[i], eventResize: eventResizeByRow[i], slatCoords: props.slatCoords, eventSelection: props.eventSelection, forPrint: props.forPrint }))))))));
+ }
+ componentDidMount() {
+ this.updateCoords();
+ }
+ componentDidUpdate() {
+ this.updateCoords();
+ }
+ updateCoords() {
+ let { props } = this;
+ if (props.onColCoords &&
+ props.clientWidth !== null // means sizing has stabilized
+ ) {
+ props.onColCoords(new internal$1.PositionCache(this.rootElRef.current, collectCellEls(this.cellElRefs.currentMap, props.cells), true, // horizontal
+ false));
+ }
+ }
+ }
+ function collectCellEls(elMap, cells) {
+ return cells.map((cell) => elMap[cell.key]);
+ }
+
+ /* A component that renders one or more columns of vertical time slots
+ ----------------------------------------------------------------------------------------------------------------------*/
+ class TimeCols extends internal$1.DateComponent {
+ constructor() {
+ super(...arguments);
+ this.processSlotOptions = internal$1.memoize(processSlotOptions);
+ this.state = {
+ slatCoords: null,
+ };
+ this.handleRootEl = (el) => {
+ if (el) {
+ this.context.registerInteractiveComponent(this, {
+ el,
+ isHitComboAllowed: this.props.isHitComboAllowed,
+ });
+ }
+ else {
+ this.context.unregisterInteractiveComponent(this);
+ }
+ };
+ this.handleScrollRequest = (request) => {
+ let { onScrollTopRequest } = this.props;
+ let { slatCoords } = this.state;
+ if (onScrollTopRequest && slatCoords) {
+ if (request.time) {
+ let top = slatCoords.computeTimeTop(request.time);
+ top = Math.ceil(top); // zoom can give weird floating-point values. rather scroll a little bit further
+ if (top) {
+ top += 1; // to overcome top border that slots beyond the first have. looks better
+ }
+ onScrollTopRequest(top);
+ }
+ return true;
+ }
+ return false;
+ };
+ this.handleColCoords = (colCoords) => {
+ this.colCoords = colCoords;
+ };
+ this.handleSlatCoords = (slatCoords) => {
+ this.setState({ slatCoords });
+ if (this.props.onSlatCoords) {
+ this.props.onSlatCoords(slatCoords);
+ }
+ };
+ }
+ render() {
+ let { props, state } = this;
+ return (preact.createElement("div", { className: "fc-timegrid-body", ref: this.handleRootEl, style: {
+ // these props are important to give this wrapper correct dimensions for interactions
+ // TODO: if we set it here, can we avoid giving to inner tables?
+ width: props.clientWidth,
+ minWidth: props.tableMinWidth,
+ } },
+ preact.createElement(TimeColsSlats, { axis: props.axis, dateProfile: props.dateProfile, slatMetas: props.slatMetas, clientWidth: props.clientWidth, minHeight: props.expandRows ? props.clientHeight : '', tableMinWidth: props.tableMinWidth, tableColGroupNode: props.axis ? props.tableColGroupNode : null /* axis depends on the colgroup's shrinking */, onCoords: this.handleSlatCoords }),
+ preact.createElement(TimeColsContent, { cells: props.cells, axis: props.axis, dateProfile: props.dateProfile, businessHourSegs: props.businessHourSegs, bgEventSegs: props.bgEventSegs, fgEventSegs: props.fgEventSegs, dateSelectionSegs: props.dateSelectionSegs, eventSelection: props.eventSelection, eventDrag: props.eventDrag, eventResize: props.eventResize, todayRange: props.todayRange, nowDate: props.nowDate, nowIndicatorSegs: props.nowIndicatorSegs, clientWidth: props.clientWidth, tableMinWidth: props.tableMinWidth, tableColGroupNode: props.tableColGroupNode, slatCoords: state.slatCoords, onColCoords: this.handleColCoords, forPrint: props.forPrint })));
+ }
+ componentDidMount() {
+ this.scrollResponder = this.context.createScrollResponder(this.handleScrollRequest);
+ }
+ componentDidUpdate(prevProps) {
+ this.scrollResponder.update(prevProps.dateProfile !== this.props.dateProfile);
+ }
+ componentWillUnmount() {
+ this.scrollResponder.detach();
+ }
+ queryHit(positionLeft, positionTop) {
+ let { dateEnv, options } = this.context;
+ let { colCoords } = this;
+ let { dateProfile } = this.props;
+ let { slatCoords } = this.state;
+ let { snapDuration, snapsPerSlot } = this.processSlotOptions(this.props.slotDuration, options.snapDuration);
+ let colIndex = colCoords.leftToIndex(positionLeft);
+ let slatIndex = slatCoords.positions.topToIndex(positionTop);
+ if (colIndex != null && slatIndex != null) {
+ let cell = this.props.cells[colIndex];
+ let slatTop = slatCoords.positions.tops[slatIndex];
+ let slatHeight = slatCoords.positions.getHeight(slatIndex);
+ let partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1
+ let localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
+ let snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
+ let dayDate = this.props.cells[colIndex].date;
+ let time = internal$1.addDurations(dateProfile.slotMinTime, internal$1.multiplyDuration(snapDuration, snapIndex));
+ let start = dateEnv.add(dayDate, time);
+ let end = dateEnv.add(start, snapDuration);
+ return {
+ dateProfile,
+ dateSpan: Object.assign({ range: { start, end }, allDay: false }, cell.extraDateSpan),
+ dayEl: colCoords.els[colIndex],
+ rect: {
+ left: colCoords.lefts[colIndex],
+ right: colCoords.rights[colIndex],
+ top: slatTop,
+ bottom: slatTop + slatHeight,
+ },
+ layer: 0,
+ };
+ }
+ return null;
+ }
+ }
+ function processSlotOptions(slotDuration, snapDurationOverride) {
+ let snapDuration = snapDurationOverride || slotDuration;
+ let snapsPerSlot = internal$1.wholeDivideDurations(slotDuration, snapDuration);
+ if (snapsPerSlot === null) {
+ snapDuration = slotDuration;
+ snapsPerSlot = 1;
+ // TODO: say warning?
+ }
+ return { snapDuration, snapsPerSlot };
+ }
+
+ class DayTimeColsSlicer extends internal$1.Slicer {
+ sliceRange(range, dayRanges) {
+ let segs = [];
+ for (let col = 0; col < dayRanges.length; col += 1) {
+ let segRange = internal$1.intersectRanges(range, dayRanges[col]);
+ if (segRange) {
+ segs.push({
+ start: segRange.start,
+ end: segRange.end,
+ isStart: segRange.start.valueOf() === range.start.valueOf(),
+ isEnd: segRange.end.valueOf() === range.end.valueOf(),
+ col,
+ });
+ }
+ }
+ return segs;
+ }
+ }
+
+ class DayTimeCols extends internal$1.DateComponent {
+ constructor() {
+ super(...arguments);
+ this.buildDayRanges = internal$1.memoize(buildDayRanges);
+ this.slicer = new DayTimeColsSlicer();
+ this.timeColsRef = preact.createRef();
+ }
+ render() {
+ let { props, context } = this;
+ let { dateProfile, dayTableModel } = props;
+ let isNowIndicator = context.options.nowIndicator;
+ let dayRanges = this.buildDayRanges(dayTableModel, dateProfile, context.dateEnv);
+ // give it the first row of cells
+ // TODO: would move this further down hierarchy, but sliceNowDate needs it
+ return (preact.createElement(internal$1.NowTimer, { unit: isNowIndicator ? 'minute' : 'day' }, (nowDate, todayRange) => (preact.createElement(TimeCols, Object.assign({ ref: this.timeColsRef }, this.slicer.sliceProps(props, dateProfile, null, context, dayRanges), { forPrint: props.forPrint, axis: props.axis, dateProfile: dateProfile, slatMetas: props.slatMetas, slotDuration: props.slotDuration, cells: dayTableModel.cells[0], tableColGroupNode: props.tableColGroupNode, tableMinWidth: props.tableMinWidth, clientWidth: props.clientWidth, clientHeight: props.clientHeight, expandRows: props.expandRows, nowDate: nowDate, nowIndicatorSegs: isNowIndicator && this.slicer.sliceNowDate(nowDate, context, dayRanges), todayRange: todayRange, onScrollTopRequest: props.onScrollTopRequest, onSlatCoords: props.onSlatCoords })))));
+ }
+ }
+ function buildDayRanges(dayTableModel, dateProfile, dateEnv) {
+ let ranges = [];
+ for (let date of dayTableModel.headerDates) {
+ ranges.push({
+ start: dateEnv.add(date, dateProfile.slotMinTime),
+ end: dateEnv.add(date, dateProfile.slotMaxTime),
+ });
+ }
+ return ranges;
+ }
+
+ // potential nice values for the slot-duration and interval-duration
+ // from largest to smallest
+ const STOCK_SUB_DURATIONS = [
+ { hours: 1 },
+ { minutes: 30 },
+ { minutes: 15 },
+ { seconds: 30 },
+ { seconds: 15 },
+ ];
+ function buildSlatMetas(slotMinTime, slotMaxTime, explicitLabelInterval, slotDuration, dateEnv) {
+ let dayStart = new Date(0);
+ let slatTime = slotMinTime;
+ let slatIterator = internal$1.createDuration(0);
+ let labelInterval = explicitLabelInterval || computeLabelInterval(slotDuration);
+ let metas = [];
+ while (internal$1.asRoughMs(slatTime) < internal$1.asRoughMs(slotMaxTime)) {
+ let date = dateEnv.add(dayStart, slatTime);
+ let isLabeled = internal$1.wholeDivideDurations(slatIterator, labelInterval) !== null;
+ metas.push({
+ date,
+ time: slatTime,
+ key: date.toISOString(),
+ isoTimeStr: internal$1.formatIsoTimeString(date),
+ isLabeled,
+ });
+ slatTime = internal$1.addDurations(slatTime, slotDuration);
+ slatIterator = internal$1.addDurations(slatIterator, slotDuration);
+ }
+ return metas;
+ }
+ // Computes an automatic value for slotLabelInterval
+ function computeLabelInterval(slotDuration) {
+ let i;
+ let labelInterval;
+ let slotsPerLabel;
+ // find the smallest stock label interval that results in more than one slots-per-label
+ for (i = STOCK_SUB_DURATIONS.length - 1; i >= 0; i -= 1) {
+ labelInterval = internal$1.createDuration(STOCK_SUB_DURATIONS[i]);
+ slotsPerLabel = internal$1.wholeDivideDurations(labelInterval, slotDuration);
+ if (slotsPerLabel !== null && slotsPerLabel > 1) {
+ return labelInterval;
+ }
+ }
+ return slotDuration; // fall back
+ }
+
+ class DayTimeColsView extends TimeColsView {
+ constructor() {
+ super(...arguments);
+ this.buildTimeColsModel = internal$1.memoize(buildTimeColsModel);
+ this.buildSlatMetas = internal$1.memoize(buildSlatMetas);
+ }
+ render() {
+ let { options, dateEnv, dateProfileGenerator } = this.context;
+ let { props } = this;
+ let { dateProfile } = props;
+ let dayTableModel = this.buildTimeColsModel(dateProfile, dateProfileGenerator);
+ let splitProps = this.allDaySplitter.splitProps(props);
+ let slatMetas = this.buildSlatMetas(dateProfile.slotMinTime, dateProfile.slotMaxTime, options.slotLabelInterval, options.slotDuration, dateEnv);
+ let { dayMinWidth } = options;
+ let hasAttachedAxis = !dayMinWidth;
+ let hasDetachedAxis = dayMinWidth;
+ let headerContent = options.dayHeaders && (preact.createElement(internal$1.DayHeader, { dates: dayTableModel.headerDates, dateProfile: dateProfile, datesRepDistinctDays: true, renderIntro: hasAttachedAxis ? this.renderHeadAxis : null }));
+ let allDayContent = (options.allDaySlot !== false) && ((contentArg) => (preact.createElement(internal$2.DayTable, Object.assign({}, splitProps.allDay, { dateProfile: dateProfile, dayTableModel: dayTableModel, nextDayThreshold: options.nextDayThreshold, tableMinWidth: contentArg.tableMinWidth, colGroupNode: contentArg.tableColGroupNode, renderRowIntro: hasAttachedAxis ? this.renderTableRowAxis : null, showWeekNumbers: false, expandRows: false, headerAlignElRef: this.headerElRef, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, forPrint: props.forPrint }, this.getAllDayMaxEventProps()))));
+ let timeGridContent = (contentArg) => (preact.createElement(DayTimeCols, Object.assign({}, splitProps.timed, { dayTableModel: dayTableModel, dateProfile: dateProfile, axis: hasAttachedAxis, slotDuration: options.slotDuration, slatMetas: slatMetas, forPrint: props.forPrint, tableColGroupNode: contentArg.tableColGroupNode, tableMinWidth: contentArg.tableMinWidth, clientWidth: contentArg.clientWidth, clientHeight: contentArg.clientHeight, onSlatCoords: this.handleSlatCoords, expandRows: contentArg.expandRows, onScrollTopRequest: this.handleScrollTopRequest })));
+ return hasDetachedAxis
+ ? this.renderHScrollLayout(headerContent, allDayContent, timeGridContent, dayTableModel.colCnt, dayMinWidth, slatMetas, this.state.slatCoords)
+ : this.renderSimpleLayout(headerContent, allDayContent, timeGridContent);
+ }
+ }
+ function buildTimeColsModel(dateProfile, dateProfileGenerator) {
+ let daySeries = new internal$1.DaySeriesModel(dateProfile.renderRange, dateProfileGenerator);
+ return new internal$1.DayTableModel(daySeries, false);
+ }
+
+ const OPTION_REFINERS = {
+ allDaySlot: Boolean,
+ };
+
+ var css_248z = ".fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:\"\\00a0\"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:\"\\00a0-\\00a0\"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}";
+ internal$1.injectStyles(css_248z);
+
+ var plugin = core.createPlugin({
+ name: '@fullcalendar/timegrid',
+ initialView: 'timeGridWeek',
+ optionRefiners: OPTION_REFINERS,
+ views: {
+ timeGrid: {
+ component: DayTimeColsView,
+ usesMinMaxTime: true,
+ allDaySlot: true,
+ slotDuration: '00:30:00',
+ slotEventOverlap: true, // a bad name. confused with overlap/constraint system
+ },
+ timeGridDay: {
+ type: 'timeGrid',
+ duration: { days: 1 },
+ },
+ timeGridWeek: {
+ type: 'timeGrid',
+ duration: { weeks: 1 },
+ },
+ },
+ });
+
+ var internal = {
+ __proto__: null,
+ TimeColsView: TimeColsView,
+ DayTimeColsView: DayTimeColsView,
+ buildTimeColsModel: buildTimeColsModel,
+ DayTimeCols: DayTimeCols,
+ buildDayRanges: buildDayRanges,
+ DayTimeColsSlicer: DayTimeColsSlicer,
+ TimeCols: TimeCols,
+ buildSlatMetas: buildSlatMetas,
+ TimeColsSlatsCoords: TimeColsSlatsCoords
+ };
+
+ core.globalPlugins.push(plugin);
+
+ exports.Internal = internal;
+ exports["default"] = plugin;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+ return exports;
+
+})({}, FullCalendar, FullCalendar.Internal, FullCalendar.Preact, FullCalendar.DayGrid.Internal);
diff --git a/library/fullcalendar/packages/timegrid/index.global.min.js b/library/fullcalendar/packages/timegrid/index.global.min.js
new file mode 100644
index 000000000..3d05a9b1e
--- /dev/null
+++ b/library/fullcalendar/packages/timegrid/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Time Grid Plugin v6.0.3
+Docs & License: https://fullcalendar.io/docs/timegrid-view
+(c) 2022 Adam Shaw
+*/
+FullCalendar.TimeGrid=function(e,t,i,r,n){"use strict";class o extends i.Splitter{getKeyInfo(){return{allDay:{},timed:{}}}getKeysForDateSpan(e){return e.allDay?["allDay"]:["timed"]}getKeysForEventDef(e){return e.allDay?i.hasBgRendering(e)?["timed","allDay"]:["allDay"]:["timed"]}}const s=i.createFormatter({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"});function l(e){let t=["fc-timegrid-slot","fc-timegrid-slot-label",e.isLabeled?"fc-scrollgrid-shrink":"fc-timegrid-slot-minor"];return r.createElement(i.ViewContextType.Consumer,null,n=>{if(!e.isLabeled)return r.createElement("td",{className:t.join(" "),"data-time":e.isoTimeStr});let{dateEnv:o,options:l,viewApi:c}=n,d=null==l.slotLabelFormat?s:Array.isArray(l.slotLabelFormat)?i.createFormatter(l.slotLabelFormat[0]):i.createFormatter(l.slotLabelFormat),m={level:0,time:e.time,date:o.toDate(e.date),view:c,text:o.format(e.date,d)};return r.createElement(i.ContentContainer,{elTag:"td",elClasses:t,elAttrs:{"data-time":e.isoTimeStr},renderProps:m,generatorName:"slotLabelContent",generator:l.slotLabelContent||a,classNameGenerator:l.slotLabelClassNames,didMount:l.slotLabelDidMount,willUnmount:l.slotLabelWillUnmount},e=>r.createElement("div",{className:"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame"},r.createElement(e,{elTag:"div",elClasses:["fc-timegrid-slot-label-cushion","fc-scrollgrid-shrink-cushion"]})))})}function a(e){return e.text}class c extends i.BaseComponent{render(){return this.props.slatMetas.map(e=>r.createElement("tr",{key:e.key},r.createElement(l,Object.assign({},e))))}}const d=i.createFormatter({week:"short"});class m extends i.DateComponent{constructor(){super(...arguments),this.allDaySplitter=new o,this.headerElRef=r.createRef(),this.rootElRef=r.createRef(),this.scrollerElRef=r.createRef(),this.state={slatCoords:null},this.handleScrollTopRequest=e=>{let t=this.scrollerElRef.current;t&&(t.scrollTop=e)},this.renderHeadAxis=(e,t="")=>{let{options:n}=this.context,{dateProfile:o}=this.props,s=o.renderRange,l=1===i.diffDays(s.start,s.end)?i.buildNavLinkAttrs(this.context,s.start,"week"):{};return n.weekNumbers&&"day"===e?r.createElement(i.WeekNumberContainer,{elTag:"th",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},date:s.start,defaultFormat:d},e=>r.createElement("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame","fc-timegrid-axis-frame-liquid"].join(" "),style:{height:t}},r.createElement(e,{elTag:"a",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"],elAttrs:l}))):r.createElement("th",{"aria-hidden":!0,className:"fc-timegrid-axis"},r.createElement("div",{className:"fc-timegrid-axis-frame",style:{height:t}}))},this.renderTableRowAxis=e=>{let{options:t,viewApi:n}=this.context,o={text:t.allDayText,view:n};return r.createElement(i.ContentContainer,{elTag:"td",elClasses:["fc-timegrid-axis","fc-scrollgrid-shrink"],elAttrs:{"aria-hidden":!0},renderProps:o,generatorName:"allDayContent",generator:t.allDayContent||f,classNameGenerator:t.allDayClassNames,didMount:t.allDayDidMount,willUnmount:t.allDayWillUnmount},t=>r.createElement("div",{className:["fc-timegrid-axis-frame","fc-scrollgrid-shrink-frame",null==e?" fc-timegrid-axis-frame-liquid":""].join(" "),style:{height:e}},r.createElement(t,{elTag:"span",elClasses:["fc-timegrid-axis-cushion","fc-scrollgrid-shrink-cushion","fc-scrollgrid-sync-inner"]})))},this.handleSlatCoords=e=>{this.setState({slatCoords:e})}}renderSimpleLayout(e,t,n){let{context:o,props:s}=this,l=[],a=i.getStickyHeaderDates(o.options);return e&&l.push({type:"header",key:"header",isSticky:a,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),t&&(l.push({type:"body",key:"all-day",chunk:{content:t}}),l.push({type:"body",key:"all-day-divider",outerContent:r.createElement("tr",{role:"presentation",className:"fc-scrollgrid-section"},r.createElement("td",{className:"fc-timegrid-divider "+o.theme.getClass("tableCellShaded")}))})),l.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(o.options.expandRows),chunk:{scrollerElRef:this.scrollerElRef,content:n}}),r.createElement(i.ViewContainer,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:o.viewSpec},r.createElement(i.SimpleScrollGrid,{liquid:!s.isHeightAuto&&!s.forPrint,collapsibleWidth:s.forPrint,cols:[{width:"shrink"}],sections:l}))}renderHScrollLayout(e,t,n,o,s,l,a){let d=this.context.pluginHooks.scrollGridImpl;if(!d)throw new Error("No ScrollGrid implementation");let{context:m,props:f}=this,h=!f.forPrint&&i.getStickyHeaderDates(m.options),g=!f.forPrint&&i.getStickyFooterScrollbar(m.options),p=[];e&&p.push({type:"header",key:"header",isSticky:h,syncRowHeights:!0,chunks:[{key:"axis",rowContent:e=>r.createElement("tr",{role:"presentation"},this.renderHeadAxis("day",e.rowSyncHeights[0]))},{key:"cols",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),t&&(p.push({type:"body",key:"all-day",syncRowHeights:!0,chunks:[{key:"axis",rowContent:e=>r.createElement("tr",{role:"presentation"},this.renderTableRowAxis(e.rowSyncHeights[0]))},{key:"cols",content:t}]}),p.push({key:"all-day-divider",type:"body",outerContent:r.createElement("tr",{role:"presentation",className:"fc-scrollgrid-section"},r.createElement("td",{colSpan:2,className:"fc-timegrid-divider "+m.theme.getClass("tableCellShaded")}))}));let u=m.options.nowIndicator;return p.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(m.options.expandRows),chunks:[{key:"axis",content:e=>r.createElement("div",{className:"fc-timegrid-axis-chunk"},r.createElement("table",{"aria-hidden":!0,style:{height:e.expandRows?e.clientHeight:""}},e.tableColGroupNode,r.createElement("tbody",null,r.createElement(c,{slatMetas:l}))),r.createElement("div",{className:"fc-timegrid-now-indicator-container"},r.createElement(i.NowTimer,{unit:u?"minute":"day"},e=>{let t=u&&a&&a.safeComputeTop(e);return"number"==typeof t?r.createElement(i.NowIndicatorContainer,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:t},isAxis:!0,date:e}):null})))},{key:"cols",scrollerElRef:this.scrollerElRef,content:n}]}),g&&p.push({key:"footer",type:"footer",isSticky:!0,chunks:[{key:"axis",content:i.renderScrollShim},{key:"cols",content:i.renderScrollShim}]}),r.createElement(i.ViewContainer,{elRef:this.rootElRef,elClasses:["fc-timegrid"],viewSpec:m.viewSpec},r.createElement(d,{liquid:!f.isHeightAuto&&!f.forPrint,collapsibleWidth:!1,colGroups:[{width:"shrink",cols:[{width:"shrink"}]},{cols:[{span:o,minWidth:s}]}],sections:p}))}getAllDayMaxEventProps(){let{dayMaxEvents:e,dayMaxEventRows:t}=this.context.options;return!0!==e&&!0!==t||(e=void 0,t=5),{dayMaxEvents:e,dayMaxEventRows:t}}}function f(e){return e.text}class h{constructor(e,t,i){this.positions=e,this.dateProfile=t,this.slotDuration=i}safeComputeTop(e){let{dateProfile:t}=this;if(i.rangeContainsMarker(t.currentRange,e)){let r=i.startOfDay(e),n=e.valueOf()-r.valueOf();if(n>=i.asRoughMs(t.slotMinTime)&&n<i.asRoughMs(t.slotMaxTime))return this.computeTimeTop(i.createDuration(n))}return null}computeDateTop(e,t){return t||(t=i.startOfDay(e)),this.computeTimeTop(i.createDuration(e.valueOf()-t.valueOf()))}computeTimeTop(e){let t,r,{positions:n,dateProfile:o}=this,s=n.els.length,l=(e.milliseconds-i.asRoughMs(o.slotMinTime))/i.asRoughMs(this.slotDuration);return l=Math.max(0,l),l=Math.min(s,l),t=Math.floor(l),t=Math.min(t,s-1),r=l-t,n.tops[t]+n.getHeight(t)*r}}class g extends i.BaseComponent{render(){let{props:e,context:t}=this,{options:n}=t,{slatElRefs:o}=e;return r.createElement("tbody",null,e.slatMetas.map((s,a)=>{let c={time:s.time,date:t.dateEnv.toDate(s.date),view:t.viewApi};return r.createElement("tr",{key:s.key,ref:o.createRef(s.key)},e.axis&&r.createElement(l,Object.assign({},s)),r.createElement(i.ContentContainer,{elTag:"td",elClasses:["fc-timegrid-slot","fc-timegrid-slot-lane",!s.isLabeled&&"fc-timegrid-slot-minor"],elAttrs:{"data-time":s.isoTimeStr},renderProps:c,generatorName:"slotLaneContent",generator:n.slotLaneContent,classNameGenerator:n.slotLaneClassNames,didMount:n.slotLaneDidMount,willUnmount:n.slotLaneWillUnmount}))}))}}class p extends i.BaseComponent{constructor(){super(...arguments),this.rootElRef=r.createRef(),this.slatElRefs=new i.RefMap}render(){let{props:e,context:t}=this;return r.createElement("div",{ref:this.rootElRef,className:"fc-timegrid-slots"},r.createElement("table",{"aria-hidden":!0,className:t.theme.getClass("table"),style:{minWidth:e.tableMinWidth,width:e.clientWidth,height:e.minHeight}},e.tableColGroupNode,r.createElement(g,{slatElRefs:this.slatElRefs,axis:e.axis,slatMetas:e.slatMetas})))}componentDidMount(){this.updateSizing()}componentDidUpdate(){this.updateSizing()}componentWillUnmount(){this.props.onCoords&&this.props.onCoords(null)}updateSizing(){let{context:e,props:t}=this;if(t.onCoords&&null!==t.clientWidth){this.rootElRef.current.offsetHeight&&t.onCoords(new h(new i.PositionCache(this.rootElRef.current,(r=this.slatElRefs.currentMap,t.slatMetas.map(e=>r[e.key])),!1,!0),this.props.dateProfile,e.options.slotDuration))}var r}}function u(e,t){let i,r=[];for(i=0;i<t;i+=1)r.push([]);if(e)for(i=0;i<e.length;i+=1)r[e[i].col].push(e[i]);return r}function v(e,t){let i=[];if(e){for(let r=0;r<t;r+=1)i[r]={affectedInstances:e.affectedInstances,isEvent:e.isEvent,segs:[]};for(let t of e.segs)i[t.col].segs.push(t)}else for(let e=0;e<t;e+=1)i[e]=null;return i}class b extends i.BaseComponent{render(){let{props:e}=this;return r.createElement(i.MoreLinkContainer,{elClasses:["fc-timegrid-more-link"],elStyle:{top:e.top,bottom:e.bottom},allDayDate:null,moreCnt:e.hiddenSegs.length,allSegs:e.hiddenSegs,hiddenSegs:e.hiddenSegs,extraDateSpan:e.extraDateSpan,dateProfile:e.dateProfile,todayRange:e.todayRange,popoverContent:()=>T(e.hiddenSegs,e),defaultGenerator:y},e=>r.createElement(e,{elTag:"div",elClasses:["fc-timegrid-more-link-inner","fc-sticky"]}))}}function y(e){return e.shortText}function x(e,t,r){let n=new i.SegHierarchy;null!=t&&(n.strictOrder=t),null!=r&&(n.maxStackCnt=r);let o=n.addSegs(e),s=i.groupIntersectingEntries(o),l=function(e){const{entriesByLevel:t}=e,r=w((e,t)=>e+":"+t,(n,o)=>{let s=S(function(e,t,r){let{levelCoords:n,entriesByLevel:o}=e,s=o[t][r],l=n[t]+s.thickness,a=n.length,c=t;for(;c<a&&n[c]<l;c+=1);for(;c<a;c+=1){let e,t=o[c],r=i.binarySearch(t,s.span.start,i.getEntrySpanEnd),n=r[0]+r[1],l=n;for(;(e=t[l])&&e.span.start<s.span.end;)l+=1;if(n<l)return{level:c,lateralStart:n,lateralEnd:l}}return null}(e,n,o),r),l=t[n][o];return[Object.assign(Object.assign({},l),{nextLevelNodes:s[0]}),l.thickness+s[1]]});return S(t.length?{level:0,lateralStart:0,lateralEnd:t[0].length}:null,r)[0]}(n);return l=function(e,t){const r=w((e,t,r)=>i.buildEntryKey(e),(e,i,n)=>{let o,{nextLevelNodes:s,thickness:l}=e,a=l+n,c=l/a,d=[];if(s.length)for(let e of s)if(void 0===o){let t=r(e,i,a);o=t[0],d.push(t[1])}else{let t=r(e,o,0);d.push(t[1])}else o=t;let m=(o-i)*c;return[o-m,Object.assign(Object.assign({},e),{thickness:m,nextLevelNodes:d})]});return e.map(e=>r(e,0,0)[1])}(l,1),{segRects:function(e){let t=[];const r=w((e,t,r)=>i.buildEntryKey(e),(e,i,r)=>{let o=Object.assign(Object.assign({},e),{levelCoord:i,stackDepth:r,stackForward:0});return t.push(o),o.stackForward=n(e.nextLevelNodes,i+e.thickness,r+1)+1});function n(e,t,i){let n=0;for(let o of e)n=Math.max(r(o,t,i),n);return n}return n(e,0,0),t}(l),hiddenGroups:s}}function S(e,t){if(!e)return[[],0];let{level:i,lateralStart:r,lateralEnd:n}=e,o=r,s=[];for(;o<n;)s.push(t(i,o)),o+=1;return s.sort(C),[s.map(E),s[0][1]]}function C(e,t){return t[1]-e[1]}function E(e){return e[0]}function w(e,t){const i={};return(...r)=>{let n=e(...r);return n in i?i[n]:i[n]=t(...r)}}function D(e,t,i=null,r=0){let n=[];if(i)for(let o=0;o<e.length;o+=1){let s=e[o],l=i.computeDateTop(s.start,t),a=Math.max(l+(r||0),i.computeDateTop(s.end,t));n.push({start:Math.round(l),end:Math.round(a)})}return n}const R=i.createFormatter({hour:"numeric",minute:"2-digit",meridiem:!1});class k extends i.BaseComponent{render(){return r.createElement(i.StandardEvent,Object.assign({},this.props,{elClasses:["fc-timegrid-event","fc-v-event",this.props.isShort&&"fc-timegrid-event-short"],defaultTimeFormat:R}))}}class M extends i.BaseComponent{constructor(){super(...arguments),this.sortEventSegs=i.memoize(i.sortEventSegs)}render(){let{props:e,context:t}=this,{options:n}=t,o=n.selectMirror,s=e.eventDrag&&e.eventDrag.segs||e.eventResize&&e.eventResize.segs||o&&e.dateSelectionSegs||[],l=e.eventDrag&&e.eventDrag.affectedInstances||e.eventResize&&e.eventResize.affectedInstances||{},a=this.sortEventSegs(e.fgEventSegs,n.eventOrder);return r.createElement(i.DayCellContainer,{elTag:"td",elRef:e.elRef,elClasses:["fc-timegrid-col",...e.extraClassNames||[]],elAttrs:Object.assign({role:"gridcell"},e.extraDataAttrs),date:e.date,dateProfile:e.dateProfile,todayRange:e.todayRange,extraRenderProps:e.extraRenderProps},t=>r.createElement("div",{className:"fc-timegrid-col-frame"},r.createElement("div",{className:"fc-timegrid-col-bg"},this.renderFillSegs(e.businessHourSegs,"non-business"),this.renderFillSegs(e.bgEventSegs,"bg-event"),this.renderFillSegs(e.dateSelectionSegs,"highlight")),r.createElement("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(a,l,!1,!1,!1)),r.createElement("div",{className:"fc-timegrid-col-events"},this.renderFgSegs(s,{},Boolean(e.eventDrag),Boolean(e.eventResize),Boolean(o))),r.createElement("div",{className:"fc-timegrid-now-indicator-container"},this.renderNowIndicator(e.nowIndicatorSegs)),i.hasCustomDayCellContent(n)&&r.createElement(t,{elTag:"div",elClasses:["fc-timegrid-col-misc"]})))}renderFgSegs(e,t,i,r,n){let{props:o}=this;return o.forPrint?T(e,o):this.renderPositionedFgSegs(e,t,i,r,n)}renderPositionedFgSegs(e,t,n,o,s){let{eventMaxStack:l,eventShortHeight:a,eventOrderStrict:c,eventMinHeight:d}=this.context.options,{date:m,slatCoords:f,eventSelection:h,todayRange:g,nowDate:p}=this.props,u=n||o||s,v=D(e,m,f,d),{segPlacements:b,hiddenGroups:y}=function(e,t,i,r){let n=[],o=[];for(let i=0;i<e.length;i+=1){let r=t[i];r?n.push({index:i,thickness:1,span:r}):o.push(e[i])}let{segRects:s,hiddenGroups:l}=x(n,i,r),a=[];for(let t of s)a.push({seg:e[t.index],rect:t});for(let e of o)a.push({seg:e,rect:null});return{segPlacements:a,hiddenGroups:l}}(e,v,c,l);return r.createElement(r.Fragment,null,this.renderHiddenGroups(y,e),b.map(e=>{let{seg:l,rect:c}=e,d=l.eventRange.instance.instanceId,m=u||Boolean(!t[d]&&c),f=N(c&&c.span),v=!u&&c?this.computeSegHStyle(c):{left:0,right:0},b=Boolean(c)&&c.stackForward>0,y=Boolean(c)&&c.span.end-c.span.start<a;return r.createElement("div",{className:"fc-timegrid-event-harness"+(b?" fc-timegrid-event-harness-inset":""),key:d,style:Object.assign(Object.assign({visibility:m?"":"hidden"},f),v)},r.createElement(k,Object.assign({seg:l,isDragging:n,isResizing:o,isDateSelecting:s,isSelected:d===h,isShort:y},i.getSegMeta(l,g,p))))}))}renderHiddenGroups(e,t){let{extraDateSpan:n,dateProfile:o,todayRange:s,nowDate:l,eventSelection:a,eventDrag:c,eventResize:d}=this.props;return r.createElement(r.Fragment,null,e.map(e=>{let m=N(e.span),f=(h=e.entries,g=t,h.map(e=>g[e.index]));var h,g;return r.createElement(b,{key:i.buildIsoString(i.computeEarliestSegStart(f)),hiddenSegs:f,top:m.top,bottom:m.bottom,extraDateSpan:n,dateProfile:o,todayRange:s,nowDate:l,eventSelection:a,eventDrag:c,eventResize:d})}))}renderFillSegs(e,t){let{props:n,context:o}=this,s=D(e,n.date,n.slatCoords,o.options.eventMinHeight).map((o,s)=>{let l=e[s];return r.createElement("div",{key:i.buildEventRangeKey(l.eventRange),className:"fc-timegrid-bg-harness",style:N(o)},"bg-event"===t?r.createElement(i.BgEvent,Object.assign({seg:l},i.getSegMeta(l,n.todayRange,n.nowDate))):i.renderFill(t))});return r.createElement(r.Fragment,null,s)}renderNowIndicator(e){let{slatCoords:t,date:n}=this.props;return t?e.map((e,o)=>r.createElement(i.NowIndicatorContainer,{key:o,elClasses:["fc-timegrid-now-indicator-line"],elStyle:{top:t.computeDateTop(e.start,n)},isAxis:!1,date:n})):null}computeSegHStyle(e){let t,i,{isRtl:r,options:n}=this.context,o=n.slotEventOverlap,s=e.levelCoord,l=e.levelCoord+e.thickness;o&&(l=Math.min(1,s+2*(l-s))),r?(t=1-l,i=s):(t=s,i=1-l);let a={zIndex:e.stackDepth+1,left:100*t+"%",right:100*i+"%"};return o&&!e.stackForward&&(a[r?"marginLeft":"marginRight"]=20),a}}function T(e,{todayRange:t,nowDate:n,eventSelection:o,eventDrag:s,eventResize:l}){let a=(s?s.affectedInstances:null)||(l?l.affectedInstances:null)||{};return r.createElement(r.Fragment,null,e.map(e=>{let s=e.eventRange.instance.instanceId;return r.createElement("div",{key:s,style:{visibility:a[s]?"hidden":""}},r.createElement(k,Object.assign({seg:e,isDragging:!1,isResizing:!1,isDateSelecting:!1,isSelected:s===o,isShort:!1},i.getSegMeta(e,t,n))))}))}function N(e){return e?{top:e.start,bottom:-e.end}:{top:"",bottom:""}}class P extends i.BaseComponent{constructor(){super(...arguments),this.splitFgEventSegs=i.memoize(u),this.splitBgEventSegs=i.memoize(u),this.splitBusinessHourSegs=i.memoize(u),this.splitNowIndicatorSegs=i.memoize(u),this.splitDateSelectionSegs=i.memoize(u),this.splitEventDrag=i.memoize(v),this.splitEventResize=i.memoize(v),this.rootElRef=r.createRef(),this.cellElRefs=new i.RefMap}render(){let{props:e,context:t}=this,n=t.options.nowIndicator&&e.slatCoords&&e.slatCoords.safeComputeTop(e.nowDate),o=e.cells.length,s=this.splitFgEventSegs(e.fgEventSegs,o),l=this.splitBgEventSegs(e.bgEventSegs,o),a=this.splitBusinessHourSegs(e.businessHourSegs,o),c=this.splitNowIndicatorSegs(e.nowIndicatorSegs,o),d=this.splitDateSelectionSegs(e.dateSelectionSegs,o),m=this.splitEventDrag(e.eventDrag,o),f=this.splitEventResize(e.eventResize,o);return r.createElement("div",{className:"fc-timegrid-cols",ref:this.rootElRef},r.createElement("table",{role:"presentation",style:{minWidth:e.tableMinWidth,width:e.clientWidth}},e.tableColGroupNode,r.createElement("tbody",{role:"presentation"},r.createElement("tr",{role:"row"},e.axis&&r.createElement("td",{"aria-hidden":!0,className:"fc-timegrid-col fc-timegrid-axis"},r.createElement("div",{className:"fc-timegrid-col-frame"},r.createElement("div",{className:"fc-timegrid-now-indicator-container"},"number"==typeof n&&r.createElement(i.NowIndicatorContainer,{elClasses:["fc-timegrid-now-indicator-arrow"],elStyle:{top:n},isAxis:!0,date:e.nowDate})))),e.cells.map((t,i)=>r.createElement(M,{key:t.key,elRef:this.cellElRefs.createRef(t.key),dateProfile:e.dateProfile,date:t.date,nowDate:e.nowDate,todayRange:e.todayRange,extraRenderProps:t.extraRenderProps,extraDataAttrs:t.extraDataAttrs,extraClassNames:t.extraClassNames,extraDateSpan:t.extraDateSpan,fgEventSegs:s[i],bgEventSegs:l[i],businessHourSegs:a[i],nowIndicatorSegs:c[i],dateSelectionSegs:d[i],eventDrag:m[i],eventResize:f[i],slatCoords:e.slatCoords,eventSelection:e.eventSelection,forPrint:e.forPrint}))))))}componentDidMount(){this.updateCoords()}componentDidUpdate(){this.updateCoords()}updateCoords(){let{props:e}=this;var t;e.onColCoords&&null!==e.clientWidth&&e.onColCoords(new i.PositionCache(this.rootElRef.current,(t=this.cellElRefs.currentMap,e.cells.map(e=>t[e.key])),!0,!1))}}class z extends i.DateComponent{constructor(){super(...arguments),this.processSlotOptions=i.memoize(H),this.state={slatCoords:null},this.handleRootEl=e=>{e?this.context.registerInteractiveComponent(this,{el:e,isHitComboAllowed:this.props.isHitComboAllowed}):this.context.unregisterInteractiveComponent(this)},this.handleScrollRequest=e=>{let{onScrollTopRequest:t}=this.props,{slatCoords:i}=this.state;if(t&&i){if(e.time){let r=i.computeTimeTop(e.time);r=Math.ceil(r),r&&(r+=1),t(r)}return!0}return!1},this.handleColCoords=e=>{this.colCoords=e},this.handleSlatCoords=e=>{this.setState({slatCoords:e}),this.props.onSlatCoords&&this.props.onSlatCoords(e)}}render(){let{props:e,state:t}=this;return r.createElement("div",{className:"fc-timegrid-body",ref:this.handleRootEl,style:{width:e.clientWidth,minWidth:e.tableMinWidth}},r.createElement(p,{axis:e.axis,dateProfile:e.dateProfile,slatMetas:e.slatMetas,clientWidth:e.clientWidth,minHeight:e.expandRows?e.clientHeight:"",tableMinWidth:e.tableMinWidth,tableColGroupNode:e.axis?e.tableColGroupNode:null,onCoords:this.handleSlatCoords}),r.createElement(P,{cells:e.cells,axis:e.axis,dateProfile:e.dateProfile,businessHourSegs:e.businessHourSegs,bgEventSegs:e.bgEventSegs,fgEventSegs:e.fgEventSegs,dateSelectionSegs:e.dateSelectionSegs,eventSelection:e.eventSelection,eventDrag:e.eventDrag,eventResize:e.eventResize,todayRange:e.todayRange,nowDate:e.nowDate,nowIndicatorSegs:e.nowIndicatorSegs,clientWidth:e.clientWidth,tableMinWidth:e.tableMinWidth,tableColGroupNode:e.tableColGroupNode,slatCoords:t.slatCoords,onColCoords:this.handleColCoords,forPrint:e.forPrint}))}componentDidMount(){this.scrollResponder=this.context.createScrollResponder(this.handleScrollRequest)}componentDidUpdate(e){this.scrollResponder.update(e.dateProfile!==this.props.dateProfile)}componentWillUnmount(){this.scrollResponder.detach()}queryHit(e,t){let{dateEnv:r,options:n}=this.context,{colCoords:o}=this,{dateProfile:s}=this.props,{slatCoords:l}=this.state,{snapDuration:a,snapsPerSlot:c}=this.processSlotOptions(this.props.slotDuration,n.snapDuration),d=o.leftToIndex(e),m=l.positions.topToIndex(t);if(null!=d&&null!=m){let e=this.props.cells[d],n=l.positions.tops[m],f=l.positions.getHeight(m),h=(t-n)/f,g=m*c+Math.floor(h*c),p=this.props.cells[d].date,u=i.addDurations(s.slotMinTime,i.multiplyDuration(a,g)),v=r.add(p,u),b=r.add(v,a);return{dateProfile:s,dateSpan:Object.assign({range:{start:v,end:b},allDay:!1},e.extraDateSpan),dayEl:o.els[d],rect:{left:o.lefts[d],right:o.rights[d],top:n,bottom:n+f},layer:0}}return null}}function H(e,t){let r=t||e,n=i.wholeDivideDurations(e,r);return null===n&&(r=e,n=1),{snapDuration:r,snapsPerSlot:n}}class W extends i.Slicer{sliceRange(e,t){let r=[];for(let n=0;n<t.length;n+=1){let o=i.intersectRanges(e,t[n]);o&&r.push({start:o.start,end:o.end,isStart:o.start.valueOf()===e.start.valueOf(),isEnd:o.end.valueOf()===e.end.valueOf(),col:n})}return r}}class I extends i.DateComponent{constructor(){super(...arguments),this.buildDayRanges=i.memoize(F),this.slicer=new W,this.timeColsRef=r.createRef()}render(){let{props:e,context:t}=this,{dateProfile:n,dayTableModel:o}=e,s=t.options.nowIndicator,l=this.buildDayRanges(o,n,t.dateEnv);return r.createElement(i.NowTimer,{unit:s?"minute":"day"},(i,a)=>r.createElement(z,Object.assign({ref:this.timeColsRef},this.slicer.sliceProps(e,n,null,t,l),{forPrint:e.forPrint,axis:e.axis,dateProfile:n,slatMetas:e.slatMetas,slotDuration:e.slotDuration,cells:o.cells[0],tableColGroupNode:e.tableColGroupNode,tableMinWidth:e.tableMinWidth,clientWidth:e.clientWidth,clientHeight:e.clientHeight,expandRows:e.expandRows,nowDate:i,nowIndicatorSegs:s&&this.slicer.sliceNowDate(i,t,l),todayRange:a,onScrollTopRequest:e.onScrollTopRequest,onSlatCoords:e.onSlatCoords})))}}function F(e,t,i){let r=[];for(let n of e.headerDates)r.push({start:i.add(n,t.slotMinTime),end:i.add(n,t.slotMaxTime)});return r}const O=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}];function G(e,t,r,n,o){let s=new Date(0),l=e,a=i.createDuration(0),c=r||function(e){let t,r,n;for(t=O.length-1;t>=0;t-=1)if(r=i.createDuration(O[t]),n=i.wholeDivideDurations(r,e),null!==n&&n>1)return r;return e}(n),d=[];for(;i.asRoughMs(l)<i.asRoughMs(t);){let e=o.add(s,l),t=null!==i.wholeDivideDurations(a,c);d.push({date:e,time:l,key:e.toISOString(),isoTimeStr:i.formatIsoTimeString(e),isLabeled:t}),l=i.addDurations(l,n),a=i.addDurations(a,n)}return d}class L extends m{constructor(){super(...arguments),this.buildTimeColsModel=i.memoize(A),this.buildSlatMetas=i.memoize(G)}render(){let{options:e,dateEnv:t,dateProfileGenerator:o}=this.context,{props:s}=this,{dateProfile:l}=s,a=this.buildTimeColsModel(l,o),c=this.allDaySplitter.splitProps(s),d=this.buildSlatMetas(l.slotMinTime,l.slotMaxTime,e.slotLabelInterval,e.slotDuration,t),{dayMinWidth:m}=e,f=!m,h=m,g=e.dayHeaders&&r.createElement(i.DayHeader,{dates:a.headerDates,dateProfile:l,datesRepDistinctDays:!0,renderIntro:f?this.renderHeadAxis:null}),p=!1!==e.allDaySlot&&(t=>r.createElement(n.DayTable,Object.assign({},c.allDay,{dateProfile:l,dayTableModel:a,nextDayThreshold:e.nextDayThreshold,tableMinWidth:t.tableMinWidth,colGroupNode:t.tableColGroupNode,renderRowIntro:f?this.renderTableRowAxis:null,showWeekNumbers:!1,expandRows:!1,headerAlignElRef:this.headerElRef,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:s.forPrint},this.getAllDayMaxEventProps()))),u=t=>r.createElement(I,Object.assign({},c.timed,{dayTableModel:a,dateProfile:l,axis:f,slotDuration:e.slotDuration,slatMetas:d,forPrint:s.forPrint,tableColGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,clientWidth:t.clientWidth,clientHeight:t.clientHeight,onSlatCoords:this.handleSlatCoords,expandRows:t.expandRows,onScrollTopRequest:this.handleScrollTopRequest}));return h?this.renderHScrollLayout(g,p,u,a.colCnt,m,d,this.state.slatCoords):this.renderSimpleLayout(g,p,u)}}function A(e,t){let r=new i.DaySeriesModel(e.renderRange,t);return new i.DayTableModel(r,!1)}const j={allDaySlot:Boolean};i.injectStyles('.fc-v-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);display:block}.fc-v-event .fc-event-main{color:var(--fc-event-text-color);height:100%}.fc-v-event .fc-event-main-frame{display:flex;flex-direction:column;height:100%}.fc-v-event .fc-event-time{flex-grow:0;flex-shrink:0;max-height:100%;overflow:hidden}.fc-v-event .fc-event-title-container{flex-grow:1;flex-shrink:1;min-height:0}.fc-v-event .fc-event-title{bottom:0;max-height:100%;overflow:hidden;top:0}.fc-v-event:not(.fc-event-start){border-top-left-radius:0;border-top-right-radius:0;border-top-width:0}.fc-v-event:not(.fc-event-end){border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-width:0}.fc-v-event.fc-event-selected:before{left:-10px;right:-10px}.fc-v-event .fc-event-resizer-start{cursor:n-resize}.fc-v-event .fc-event-resizer-end{cursor:s-resize}.fc-v-event:not(.fc-event-selected) .fc-event-resizer{height:var(--fc-event-resizer-thickness);left:0;right:0}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-start{top:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event:not(.fc-event-selected) .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-thickness)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer{left:50%;margin-left:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-start{top:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc-v-event.fc-event-selected .fc-event-resizer-end{bottom:calc(var(--fc-event-resizer-dot-total-width)/-2)}.fc .fc-timegrid .fc-daygrid-body{z-index:2}.fc .fc-timegrid-divider{padding:0 0 2px}.fc .fc-timegrid-body{min-height:100%;position:relative;z-index:1}.fc .fc-timegrid-axis-chunk{position:relative}.fc .fc-timegrid-axis-chunk>table,.fc .fc-timegrid-slots{position:relative;z-index:1}.fc .fc-timegrid-slot{border-bottom:0;height:1.5em}.fc .fc-timegrid-slot:empty:before{content:"\\00a0"}.fc .fc-timegrid-slot-minor{border-top-style:dotted}.fc .fc-timegrid-slot-label-cushion{display:inline-block;white-space:nowrap}.fc .fc-timegrid-slot-label{vertical-align:middle}.fc .fc-timegrid-axis-cushion,.fc .fc-timegrid-slot-label-cushion{padding:0 4px}.fc .fc-timegrid-axis-frame-liquid{height:100%}.fc .fc-timegrid-axis-frame{align-items:center;display:flex;justify-content:flex-end;overflow:hidden}.fc .fc-timegrid-axis-cushion{flex-shrink:0;max-width:60px}.fc-direction-ltr .fc-timegrid-slot-label-frame{text-align:right}.fc-direction-rtl .fc-timegrid-slot-label-frame{text-align:left}.fc-liquid-hack .fc-timegrid-axis-frame-liquid{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col.fc-day-today{background-color:var(--fc-today-bg-color)}.fc .fc-timegrid-col-frame{min-height:100%;position:relative}.fc-media-screen.fc-liquid-hack .fc-timegrid-col-frame{bottom:0;height:auto;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols{bottom:0;left:0;position:absolute;right:0;top:0}.fc-media-screen .fc-timegrid-cols>table{height:100%}.fc-media-screen .fc-timegrid-col-bg,.fc-media-screen .fc-timegrid-col-events,.fc-media-screen .fc-timegrid-now-indicator-container{left:0;position:absolute;right:0;top:0}.fc .fc-timegrid-col-bg{z-index:2}.fc .fc-timegrid-col-bg .fc-non-business{z-index:1}.fc .fc-timegrid-col-bg .fc-bg-event{z-index:2}.fc .fc-timegrid-col-bg .fc-highlight{z-index:3}.fc .fc-timegrid-bg-harness{left:0;position:absolute;right:0}.fc .fc-timegrid-col-events{z-index:3}.fc .fc-timegrid-now-indicator-container{bottom:0;overflow:hidden}.fc-direction-ltr .fc-timegrid-col-events{margin:0 2.5% 0 2px}.fc-direction-rtl .fc-timegrid-col-events{margin:0 2px 0 2.5%}.fc-timegrid-event-harness{position:absolute}.fc-timegrid-event-harness>.fc-timegrid-event{bottom:0;left:0;position:absolute;right:0;top:0}.fc-timegrid-event-harness-inset .fc-timegrid-event,.fc-timegrid-event.fc-event-mirror,.fc-timegrid-more-link{box-shadow:0 0 0 1px var(--fc-page-bg-color)}.fc-timegrid-event,.fc-timegrid-more-link{border-radius:3px;font-size:var(--fc-small-font-size)}.fc-timegrid-event{margin-bottom:1px}.fc-timegrid-event .fc-event-main{padding:1px 1px 0}.fc-timegrid-event .fc-event-time{font-size:var(--fc-small-font-size);margin-bottom:1px;white-space:nowrap}.fc-timegrid-event-short .fc-event-main-frame{flex-direction:row;overflow:hidden}.fc-timegrid-event-short .fc-event-time:after{content:"\\00a0-\\00a0"}.fc-timegrid-event-short .fc-event-title{font-size:var(--fc-small-font-size)}.fc-timegrid-more-link{background:var(--fc-more-link-bg-color);color:var(--fc-more-link-text-color);cursor:pointer;margin-bottom:1px;position:absolute;z-index:9999}.fc-timegrid-more-link-inner{padding:3px 2px;top:0}.fc-direction-ltr .fc-timegrid-more-link{right:0}.fc-direction-rtl .fc-timegrid-more-link{left:0}.fc .fc-timegrid-now-indicator-line{border-color:var(--fc-now-indicator-color);border-style:solid;border-width:1px 0 0;left:0;position:absolute;right:0;z-index:4}.fc .fc-timegrid-now-indicator-arrow{border-color:var(--fc-now-indicator-color);border-style:solid;margin-top:-5px;position:absolute;z-index:4}.fc-direction-ltr .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 0 5px 6px;left:0}.fc-direction-rtl .fc-timegrid-now-indicator-arrow{border-bottom-color:transparent;border-top-color:transparent;border-width:5px 6px 5px 0;right:0}');var B=t.createPlugin({name:"@fullcalendar/timegrid",initialView:"timeGridWeek",optionRefiners:j,views:{timeGrid:{component:L,usesMinMaxTime:!0,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0},timeGridDay:{type:"timeGrid",duration:{days:1}},timeGridWeek:{type:"timeGrid",duration:{weeks:1}}}}),q={__proto__:null,TimeColsView:m,DayTimeColsView:L,buildTimeColsModel:A,DayTimeCols:I,buildDayRanges:F,DayTimeColsSlicer:W,TimeCols:z,buildSlatMetas:G,TimeColsSlatsCoords:h};return t.globalPlugins.push(B),e.Internal=q,e.default=B,Object.defineProperty(e,"__esModule",{value:!0}),e}({},FullCalendar,FullCalendar.Internal,FullCalendar.Preact,FullCalendar.DayGrid.Internal); \ No newline at end of file
diff --git a/library/fullcalendar/packages/timegrid/main.css b/library/fullcalendar/packages/timegrid/main.css
deleted file mode 100644
index b8ee6448a..000000000
--- a/library/fullcalendar/packages/timegrid/main.css
+++ /dev/null
@@ -1,309 +0,0 @@
-@charset "UTF-8";
-/* TimeGridView all-day area
---------------------------------------------------------------------------------------------------*/
-.fc-timeGrid-view .fc-day-grid {
- position: relative;
- z-index: 2;
- /* so the "more.." popover will be over the time grid */
-}
-
-.fc-timeGrid-view .fc-day-grid .fc-row {
- min-height: 3em;
- /* all-day section will never get shorter than this */
-}
-
-.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton {
- padding-bottom: 1em;
- /* give space underneath events for clicking/selecting days */
-}
-
-/* TimeGrid axis running down the side (for both the all-day area and the slot area)
---------------------------------------------------------------------------------------------------*/
-.fc .fc-axis {
- /* .fc to overcome default cell styles */
- vertical-align: middle;
- padding: 0 4px;
- white-space: nowrap;
-}
-
-.fc-ltr .fc-axis {
- text-align: right;
-}
-
-.fc-rtl .fc-axis {
- text-align: left;
-}
-
-/* TimeGrid Structure
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid-container,
-.fc-time-grid {
- /* so slats/bg/content/etc positions get scoped within here */
- position: relative;
- z-index: 1;
-}
-
-.fc-time-grid {
- min-height: 100%;
- /* so if height setting is 'auto', .fc-bg stretches to fill height */
-}
-
-.fc-time-grid table {
- /* don't put outer borders on slats/bg/content/etc */
- border: 0 hidden transparent;
-}
-
-.fc-time-grid > .fc-bg {
- z-index: 1;
-}
-
-.fc-time-grid .fc-slats,
-.fc-time-grid > hr {
- /* the <hr> TimeGridView injects when grid is shorter than scroller */
- position: relative;
- z-index: 2;
-}
-
-.fc-time-grid .fc-content-col {
- position: relative;
- /* because now-indicator lives directly inside */
-}
-
-.fc-time-grid .fc-content-skeleton {
- position: absolute;
- z-index: 3;
- top: 0;
- left: 0;
- right: 0;
-}
-
-/* divs within a cell within the fc-content-skeleton */
-.fc-time-grid .fc-business-container {
- position: relative;
- z-index: 1;
-}
-
-.fc-time-grid .fc-bgevent-container {
- position: relative;
- z-index: 2;
-}
-
-.fc-time-grid .fc-highlight-container {
- position: relative;
- z-index: 3;
-}
-
-.fc-time-grid .fc-event-container {
- position: relative;
- z-index: 4;
-}
-
-.fc-time-grid .fc-now-indicator-line {
- z-index: 5;
-}
-
-.fc-time-grid .fc-mirror-container {
- /* also is fc-event-container */
- position: relative;
- z-index: 6;
-}
-
-/* TimeGrid Slats (lines that run horizontally)
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-slats td {
- height: 1.5em;
- border-bottom: 0;
- /* each cell is responsible for its top border */
-}
-
-.fc-time-grid .fc-slats .fc-minor td {
- border-top-style: dotted;
-}
-
-/* TimeGrid Highlighting Slots
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-highlight-container {
- /* a div within a cell within the fc-highlight-skeleton */
- position: relative;
- /* scopes the left/right of the fc-highlight to be in the column */
-}
-
-.fc-time-grid .fc-highlight {
- position: absolute;
- left: 0;
- right: 0;
- /* top and bottom will be in by JS */
-}
-
-/* TimeGrid Event Containment
---------------------------------------------------------------------------------------------------*/
-.fc-ltr .fc-time-grid .fc-event-container {
- /* space on the sides of events for LTR (default) */
- margin: 0 2.5% 0 2px;
-}
-
-.fc-rtl .fc-time-grid .fc-event-container {
- /* space on the sides of events for RTL */
- margin: 0 2px 0 2.5%;
-}
-
-.fc-time-grid .fc-event,
-.fc-time-grid .fc-bgevent {
- position: absolute;
- z-index: 1;
- /* scope inner z-index's */
-}
-
-.fc-time-grid .fc-bgevent {
- /* background events always span full width */
- left: 0;
- right: 0;
-}
-
-/* TimeGrid Event Styling
-----------------------------------------------------------------------------------------------------
-We use the full "fc-time-grid-event" class instead of using descendants because the event won't
-be a descendant of the grid when it is being dragged.
-*/
-.fc-time-grid-event {
- margin-bottom: 1px;
-}
-
-.fc-time-grid-event-inset {
- -webkit-box-shadow: 0px 0px 0px 1px #fff;
- box-shadow: 0px 0px 0px 1px #fff;
-}
-
-.fc-time-grid-event.fc-not-start {
- /* events that are continuing from another day */
- /* replace space made by the top border with padding */
- border-top-width: 0;
- padding-top: 1px;
- /* remove top rounded corners */
- border-top-left-radius: 0;
- border-top-right-radius: 0;
-}
-
-.fc-time-grid-event.fc-not-end {
- /* replace space made by the top border with padding */
- border-bottom-width: 0;
- padding-bottom: 1px;
- /* remove bottom rounded corners */
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-.fc-time-grid-event .fc-content {
- overflow: hidden;
- max-height: 100%;
-}
-
-.fc-time-grid-event .fc-time,
-.fc-time-grid-event .fc-title {
- padding: 0 1px;
-}
-
-.fc-time-grid-event .fc-time {
- font-size: 0.85em;
- white-space: nowrap;
-}
-
-/* short mode, where time and title are on the same line */
-.fc-time-grid-event.fc-short .fc-content {
- /* don't wrap to second line (now that contents will be inline) */
- white-space: nowrap;
-}
-
-.fc-time-grid-event.fc-short .fc-time,
-.fc-time-grid-event.fc-short .fc-title {
- /* put the time and title on the same line */
- display: inline-block;
- vertical-align: top;
-}
-
-.fc-time-grid-event.fc-short .fc-time span {
- display: none;
- /* don't display the full time text... */
-}
-
-.fc-time-grid-event.fc-short .fc-time:before {
- content: attr(data-start);
- /* ...instead, display only the start time */
-}
-
-.fc-time-grid-event.fc-short .fc-time:after {
- content: " - ";
- /* seperate with a dash, wrapped in nbsp's */
-}
-
-.fc-time-grid-event.fc-short .fc-title {
- font-size: 0.85em;
- /* make the title text the same size as the time */
- padding: 0;
- /* undo padding from above */
-}
-
-/* resizer (cursor device) */
-.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer {
- left: 0;
- right: 0;
- bottom: 0;
- height: 8px;
- overflow: hidden;
- line-height: 8px;
- font-size: 11px;
- font-family: monospace;
- text-align: center;
- cursor: s-resize;
-}
-
-.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after {
- content: "=";
-}
-
-/* resizer (touch device) */
-.fc-time-grid-event.fc-selected .fc-resizer {
- /* 10x10 dot */
- border-radius: 5px;
- border-width: 1px;
- width: 8px;
- height: 8px;
- border-style: solid;
- border-color: inherit;
- background: #fff;
- /* horizontally center */
- left: 50%;
- margin-left: -5px;
- /* center on the bottom edge */
- bottom: -5px;
-}
-
-/* Now Indicator
---------------------------------------------------------------------------------------------------*/
-.fc-time-grid .fc-now-indicator-line {
- border-top-width: 1px;
- left: 0;
- right: 0;
-}
-
-/* arrow on axis */
-.fc-time-grid .fc-now-indicator-arrow {
- margin-top: -5px;
- /* vertically center on top coordinate */
-}
-
-.fc-ltr .fc-time-grid .fc-now-indicator-arrow {
- left: 0;
- /* triangle pointing right... */
- border-width: 5px 0 5px 6px;
- border-top-color: transparent;
- border-bottom-color: transparent;
-}
-
-.fc-rtl .fc-time-grid .fc-now-indicator-arrow {
- right: 0;
- /* triangle pointing left... */
- border-width: 5px 6px 5px 0;
- border-top-color: transparent;
- border-bottom-color: transparent;
-}
diff --git a/library/fullcalendar/packages/timegrid/main.d.ts b/library/fullcalendar/packages/timegrid/main.d.ts
deleted file mode 100644
index 303b51672..000000000
--- a/library/fullcalendar/packages/timegrid/main.d.ts
+++ /dev/null
@@ -1,224 +0,0 @@
-// Generated by dts-bundle v0.7.3-fork.1
-// Dependencies for this module:
-// ../../../../../@fullcalendar/core
-// ../../../../../@fullcalendar/daygrid
-
-declare module '@fullcalendar/timegrid' {
- import AbstractTimeGridView from '@fullcalendar/timegrid/AbstractTimeGridView';
- import TimeGridView, { buildDayTable } from '@fullcalendar/timegrid/TimeGridView';
- import { TimeGridSeg } from '@fullcalendar/timegrid/TimeGrid';
- import { TimeGridSlicer, buildDayRanges } from '@fullcalendar/timegrid/SimpleTimeGrid';
- export { TimeGridView, AbstractTimeGridView, buildDayTable, buildDayRanges, TimeGridSlicer, TimeGridSeg };
- export { default as TimeGrid } from '@fullcalendar/timegrid/TimeGrid';
- const _default: import("@fullcalendar/core").PluginDef;
- export default _default;
-}
-
-declare module '@fullcalendar/timegrid/AbstractTimeGridView' {
- import { ScrollComponent, View, ComponentContext, Duration, ViewProps } from '@fullcalendar/core';
- import { DayGrid } from '@fullcalendar/daygrid';
- import TimeGrid from '@fullcalendar/timegrid/TimeGrid';
- import AllDaySplitter from '@fullcalendar/timegrid/AllDaySplitter';
- export { AbstractTimeGridView as default, AbstractTimeGridView };
- abstract class AbstractTimeGridView extends View {
- timeGrid: TimeGrid;
- dayGrid: DayGrid;
- scroller: ScrollComponent;
- axisWidth: any;
- protected splitter: AllDaySplitter;
- render(props: ViewProps, context: ComponentContext): void;
- destroy(): void;
- _renderSkeleton(context: ComponentContext): void;
- _unrenderSkeleton(): void;
- renderSkeletonHtml(): string;
- getNowIndicatorUnit(): string;
- unrenderNowIndicator(): void;
- updateSize(isResize: boolean, viewHeight: number, isAuto: boolean): void;
- updateBaseSize(isResize: any, viewHeight: any, isAuto: any): void;
- computeScrollerHeight(viewHeight: any): number;
- computeDateScroll(duration: Duration): {
- top: any;
- };
- queryDateScroll(): {
- top: number;
- };
- applyDateScroll(scroll: any): void;
- renderHeadIntroHtml: () => string;
- axisStyleAttr(): string;
- renderTimeGridBgIntroHtml: () => string;
- renderTimeGridIntroHtml: () => string;
- renderDayGridBgIntroHtml: () => string;
- renderDayGridIntroHtml: () => string;
- }
-}
-
-declare module '@fullcalendar/timegrid/TimeGridView' {
- import { DateProfileGenerator, DateProfile, ComponentContext, DayHeader, DayTable, ViewProps } from '@fullcalendar/core';
- import { SimpleDayGrid } from '@fullcalendar/daygrid';
- import SimpleTimeGrid from '@fullcalendar/timegrid/SimpleTimeGrid';
- import AbstractTimeGridView from '@fullcalendar/timegrid/AbstractTimeGridView';
- export { TimeGridView as default, TimeGridView };
- class TimeGridView extends AbstractTimeGridView {
- header: DayHeader;
- simpleDayGrid: SimpleDayGrid;
- simpleTimeGrid: SimpleTimeGrid;
- render(props: ViewProps, context: ComponentContext): void;
- _renderSkeleton(context: ComponentContext): void;
- _unrenderSkeleton(): void;
- renderNowIndicator(date: any): void;
- }
- export function buildDayTable(dateProfile: DateProfile, dateProfileGenerator: DateProfileGenerator): DayTable;
-}
-
-declare module '@fullcalendar/timegrid/TimeGrid' {
- import { PositionCache, Duration, DateMarker, DateFormatter, ComponentContext, DateComponent, Seg, EventSegUiInteractionState, DateProfile, Theme } from '@fullcalendar/core';
- export interface RenderProps {
- renderBgIntroHtml: () => string;
- renderIntroHtml: () => string;
- }
- export interface TimeGridSeg extends Seg {
- col: number;
- start: DateMarker;
- end: DateMarker;
- }
- export interface TimeGridCell {
- date: DateMarker;
- htmlAttrs?: string;
- }
- export interface TimeGridProps {
- dateProfile: DateProfile;
- cells: TimeGridCell[];
- businessHourSegs: TimeGridSeg[];
- bgEventSegs: TimeGridSeg[];
- fgEventSegs: TimeGridSeg[];
- dateSelectionSegs: TimeGridSeg[];
- eventSelection: string;
- eventDrag: EventSegUiInteractionState | null;
- eventResize: EventSegUiInteractionState | null;
- }
- export { TimeGrid as default, TimeGrid };
- class TimeGrid extends DateComponent<TimeGridProps> {
- renderProps: RenderProps;
- slotDuration: Duration;
- snapDuration: Duration;
- snapsPerSlot: any;
- labelFormat: DateFormatter;
- labelInterval: Duration;
- colCnt: number;
- colEls: HTMLElement[];
- slatContainerEl: HTMLElement;
- slatEls: HTMLElement[];
- nowIndicatorEls: HTMLElement[];
- colPositions: PositionCache;
- slatPositions: PositionCache;
- isSlatSizesDirty: boolean;
- isColSizesDirty: boolean;
- rootBgContainerEl: HTMLElement;
- bottomRuleEl: HTMLElement;
- contentSkeletonEl: HTMLElement;
- colContainerEls: HTMLElement[];
- fgContainerEls: HTMLElement[];
- bgContainerEls: HTMLElement[];
- mirrorContainerEls: HTMLElement[];
- highlightContainerEls: HTMLElement[];
- businessContainerEls: HTMLElement[];
- constructor(el: HTMLElement, renderProps: RenderProps);
- _processOptions(options: any): void;
- computeLabelInterval(slotDuration: any): any;
- render(props: TimeGridProps, context: ComponentContext): void;
- destroy(): void;
- updateSize(isResize: boolean): void;
- _renderSkeleton(theme: Theme): void;
- _renderSlats(dateProfile: DateProfile): void;
- renderSlatRowHtml(dateProfile: DateProfile): string;
- _renderColumns(cells: TimeGridCell[], dateProfile: DateProfile): void;
- _unrenderColumns(): void;
- renderContentSkeleton(): void;
- unrenderContentSkeleton(): void;
- groupSegsByCol(segs: any): any[];
- attachSegsByCol(segsByCol: any, containerEls: HTMLElement[]): void;
- getNowIndicatorUnit(): string;
- renderNowIndicator(segs: TimeGridSeg[], date: any): void;
- unrenderNowIndicator(): void;
- getTotalSlatHeight(): number;
- computeDateTop(when: DateMarker, startOfDayDate?: DateMarker): any;
- computeTimeTop(duration: Duration): any;
- computeSegVerticals(segs: any): void;
- assignSegVerticals(segs: any): void;
- generateSegVerticalCss(seg: any): {
- top: any;
- bottom: number;
- };
- buildPositionCaches(): void;
- buildColPositions(): void;
- buildSlatPositions(): void;
- positionToHit(positionLeft: any, positionTop: any): {
- col: any;
- dateSpan: {
- range: {
- start: Date;
- end: Date;
- };
- allDay: boolean;
- };
- dayEl: HTMLElement;
- relativeRect: {
- left: any;
- right: any;
- top: any;
- bottom: any;
- };
- };
- _renderEventDrag(state: EventSegUiInteractionState): void;
- _unrenderEventDrag(state: EventSegUiInteractionState): void;
- _renderEventResize(state: EventSegUiInteractionState): void;
- _unrenderEventResize(state: EventSegUiInteractionState): void;
- _renderDateSelection(segs: Seg[]): void;
- _unrenderDateSelection(segs: Seg[]): void;
- }
-}
-
-declare module '@fullcalendar/timegrid/SimpleTimeGrid' {
- import { DateComponent, DateProfile, EventStore, EventUiHash, EventInteractionState, DateSpan, DateRange, DayTable, DateEnv, DateMarker, Slicer, Hit, ComponentContext } from '@fullcalendar/core';
- import TimeGrid, { TimeGridSeg } from '@fullcalendar/timegrid/TimeGrid';
- export interface SimpleTimeGridProps {
- dateProfile: DateProfile | null;
- dayTable: DayTable;
- businessHours: EventStore;
- eventStore: EventStore;
- eventUiBases: EventUiHash;
- dateSelection: DateSpan | null;
- eventSelection: string;
- eventDrag: EventInteractionState | null;
- eventResize: EventInteractionState | null;
- }
- export { SimpleTimeGrid as default, SimpleTimeGrid };
- class SimpleTimeGrid extends DateComponent<SimpleTimeGridProps> {
- timeGrid: TimeGrid;
- constructor(timeGrid: TimeGrid);
- firstContext(context: ComponentContext): void;
- destroy(): void;
- render(props: SimpleTimeGridProps, context: ComponentContext): void;
- renderNowIndicator(date: DateMarker): void;
- buildPositionCaches(): void;
- queryHit(positionLeft: number, positionTop: number): Hit;
- }
- export function buildDayRanges(dayTable: DayTable, dateProfile: DateProfile, dateEnv: DateEnv): DateRange[];
- export class TimeGridSlicer extends Slicer<TimeGridSeg, [DateRange[]]> {
- sliceRange(range: DateRange, dayRanges: DateRange[]): TimeGridSeg[];
- }
-}
-
-declare module '@fullcalendar/timegrid/AllDaySplitter' {
- import { Splitter, EventDef, DateSpan } from '@fullcalendar/core';
- export { AllDaySplitter as default, AllDaySplitter };
- class AllDaySplitter extends Splitter {
- getKeyInfo(): {
- allDay: {};
- timed: {};
- };
- getKeysForDateSpan(dateSpan: DateSpan): string[];
- getKeysForEventDef(eventDef: EventDef): string[];
- }
-}
-
diff --git a/library/fullcalendar/packages/timegrid/main.esm.js b/library/fullcalendar/packages/timegrid/main.esm.js
deleted file mode 100644
index 7038488f4..000000000
--- a/library/fullcalendar/packages/timegrid/main.esm.js
+++ /dev/null
@@ -1,1391 +0,0 @@
-/*!
-FullCalendar Time Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-import { createFormatter, removeElement, computeEventDraggable, computeEventStartResizable, computeEventEndResizable, cssToStr, isMultiDayRange, htmlEscape, compareByFieldSpecs, applyStyle, FgEventRenderer, buildSegCompareObj, FillRenderer, memoize, memoizeRendering, createDuration, wholeDivideDurations, findElements, PositionCache, startOfDay, asRoughMs, formatIsoTimeString, addDurations, htmlToElement, createElement, multiplyDuration, DateComponent, hasBgRendering, Splitter, diffDays, buildGotoAnchorHtml, getAllDayHtml, ScrollComponent, matchCellWidths, uncompensateScroll, compensateScroll, subtractInnerElHeight, View, intersectRanges, Slicer, DayHeader, DaySeries, DayTable, createPlugin } from '@fullcalendar/core';
-import { DayBgRow, DayGrid, SimpleDayGrid } from '@fullcalendar/daygrid';
-
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
-};
-
-/*
-Only handles foreground segs.
-Does not own rendering. Use for low-level util methods by TimeGrid.
-*/
-var TimeGridEventRenderer = /** @class */ (function (_super) {
- __extends(TimeGridEventRenderer, _super);
- function TimeGridEventRenderer(timeGrid) {
- var _this = _super.call(this) || this;
- _this.timeGrid = timeGrid;
- return _this;
- }
- TimeGridEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) {
- _super.prototype.renderSegs.call(this, context, segs, mirrorInfo);
- // TODO: dont do every time. memoize
- this.fullTimeFormat = createFormatter({
- hour: 'numeric',
- minute: '2-digit',
- separator: this.context.options.defaultRangeSeparator
- });
- };
- // Given an array of foreground segments, render a DOM element for each, computes position,
- // and attaches to the column inner-container elements.
- TimeGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
- var segsByCol = this.timeGrid.groupSegsByCol(segs);
- // order the segs within each column
- // TODO: have groupSegsByCol do this?
- for (var col = 0; col < segsByCol.length; col++) {
- segsByCol[col] = this.sortEventSegs(segsByCol[col]);
- }
- this.segsByCol = segsByCol;
- this.timeGrid.attachSegsByCol(segsByCol, this.timeGrid.fgContainerEls);
- };
- TimeGridEventRenderer.prototype.detachSegs = function (segs) {
- segs.forEach(function (seg) {
- removeElement(seg.el);
- });
- this.segsByCol = null;
- };
- TimeGridEventRenderer.prototype.computeSegSizes = function (allSegs) {
- var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
- var colCnt = timeGrid.colCnt;
- timeGrid.computeSegVerticals(allSegs); // horizontals relies on this
- if (segsByCol) {
- for (var col = 0; col < colCnt; col++) {
- this.computeSegHorizontals(segsByCol[col]); // compute horizontal coordinates, z-index's, and reorder the array
- }
- }
- };
- TimeGridEventRenderer.prototype.assignSegSizes = function (allSegs) {
- var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
- var colCnt = timeGrid.colCnt;
- timeGrid.assignSegVerticals(allSegs); // horizontals relies on this
- if (segsByCol) {
- for (var col = 0; col < colCnt; col++) {
- this.assignSegCss(segsByCol[col]);
- }
- }
- };
- // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined
- TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {
- return {
- hour: 'numeric',
- minute: '2-digit',
- meridiem: false
- };
- };
- // Computes a default `displayEventEnd` value if one is not expliclty defined
- TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {
- return true;
- };
- // Renders the HTML for a single event segment's default rendering
- TimeGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
- var eventRange = seg.eventRange;
- var eventDef = eventRange.def;
- var eventUi = eventRange.ui;
- var allDay = eventDef.allDay;
- var isDraggable = computeEventDraggable(this.context, eventDef, eventUi);
- var isResizableFromStart = seg.isStart && computeEventStartResizable(this.context, eventDef, eventUi);
- var isResizableFromEnd = seg.isEnd && computeEventEndResizable(this.context, eventDef, eventUi);
- var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
- var skinCss = cssToStr(this.getSkinCss(eventUi));
- var timeText;
- var fullTimeText; // more verbose time text. for the print stylesheet
- var startTimeText; // just the start time text
- classes.unshift('fc-time-grid-event');
- // if the event appears to span more than one day...
- if (isMultiDayRange(eventRange.range)) {
- // Don't display time text on segments that run entirely through a day.
- // That would appear as midnight-midnight and would look dumb.
- // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)
- if (seg.isStart || seg.isEnd) {
- var unzonedStart = seg.start;
- var unzonedEnd = seg.end;
- timeText = this._getTimeText(unzonedStart, unzonedEnd, allDay); // TODO: give the timezones
- fullTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, this.fullTimeFormat);
- startTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, null, false); // displayEnd=false
- }
- }
- else {
- // Display the normal time text for the *event's* times
- timeText = this.getTimeText(eventRange);
- fullTimeText = this.getTimeText(eventRange, this.fullTimeFormat);
- startTimeText = this.getTimeText(eventRange, null, false); // displayEnd=false
- }
- return '<a class="' + classes.join(' ') + '"' +
- (eventDef.url ?
- ' href="' + htmlEscape(eventDef.url) + '"' :
- '') +
- (skinCss ?
- ' style="' + skinCss + '"' :
- '') +
- '>' +
- '<div class="fc-content">' +
- (timeText ?
- '<div class="fc-time"' +
- ' data-start="' + htmlEscape(startTimeText) + '"' +
- ' data-full="' + htmlEscape(fullTimeText) + '"' +
- '>' +
- '<span>' + htmlEscape(timeText) + '</span>' +
- '</div>' :
- '') +
- (eventDef.title ?
- '<div class="fc-title">' +
- htmlEscape(eventDef.title) +
- '</div>' :
- '') +
- '</div>' +
- /* TODO: write CSS for this
- (isResizableFromStart ?
- '<div class="fc-resizer fc-start-resizer"></div>' :
- ''
- ) +
- */
- (isResizableFromEnd ?
- '<div class="fc-resizer fc-end-resizer"></div>' :
- '') +
- '</a>';
- };
- // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.
- // Assumed the segs are already ordered.
- // NOTE: Also reorders the given array by date!
- TimeGridEventRenderer.prototype.computeSegHorizontals = function (segs) {
- var levels;
- var level0;
- var i;
- levels = buildSlotSegLevels(segs);
- computeForwardSlotSegs(levels);
- if ((level0 = levels[0])) {
- for (i = 0; i < level0.length; i++) {
- computeSlotSegPressures(level0[i]);
- }
- for (i = 0; i < level0.length; i++) {
- this.computeSegForwardBack(level0[i], 0, 0);
- }
- }
- };
- // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range
- // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and
- // seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left.
- //
- // The segment might be part of a "series", which means consecutive segments with the same pressure
- // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of
- // segments behind this one in the current series, and `seriesBackwardCoord` is the starting
- // coordinate of the first segment in the series.
- TimeGridEventRenderer.prototype.computeSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {
- var forwardSegs = seg.forwardSegs;
- var i;
- if (seg.forwardCoord === undefined) { // not already computed
- if (!forwardSegs.length) {
- // if there are no forward segments, this segment should butt up against the edge
- seg.forwardCoord = 1;
- }
- else {
- // sort highest pressure first
- this.sortForwardSegs(forwardSegs);
- // this segment's forwardCoord will be calculated from the backwardCoord of the
- // highest-pressure forward segment.
- this.computeSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);
- seg.forwardCoord = forwardSegs[0].backwardCoord;
- }
- // calculate the backwardCoord from the forwardCoord. consider the series
- seg.backwardCoord = seg.forwardCoord -
- (seg.forwardCoord - seriesBackwardCoord) / // available width for series
- (seriesBackwardPressure + 1); // # of segments in the series
- // use this segment's coordinates to computed the coordinates of the less-pressurized
- // forward segments
- for (i = 0; i < forwardSegs.length; i++) {
- this.computeSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);
- }
- }
- };
- TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {
- var objs = forwardSegs.map(buildTimeGridSegCompareObj);
- var specs = [
- // put higher-pressure first
- { field: 'forwardPressure', order: -1 },
- // put segments that are closer to initial edge first (and favor ones with no coords yet)
- { field: 'backwardCoord', order: 1 }
- ].concat(this.context.eventOrderSpecs);
- objs.sort(function (obj0, obj1) {
- return compareByFieldSpecs(obj0, obj1, specs);
- });
- return objs.map(function (c) {
- return c._seg;
- });
- };
- // Given foreground event segments that have already had their position coordinates computed,
- // assigns position-related CSS values to their elements.
- TimeGridEventRenderer.prototype.assignSegCss = function (segs) {
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- applyStyle(seg.el, this.generateSegCss(seg));
- if (seg.level > 0) {
- seg.el.classList.add('fc-time-grid-event-inset');
- }
- // if the event is short that the title will be cut off,
- // attach a className that condenses the title into the time area.
- if (seg.eventRange.def.title && seg.bottom - seg.top < 30) {
- seg.el.classList.add('fc-short'); // TODO: "condensed" is a better name
- }
- }
- };
- // Generates an object with CSS properties/values that should be applied to an event segment element.
- // Contains important positioning-related properties that should be applied to any event element, customized or not.
- TimeGridEventRenderer.prototype.generateSegCss = function (seg) {
- var shouldOverlap = this.context.options.slotEventOverlap;
- var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point
- var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point
- var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first
- var isRtl = this.context.isRtl;
- var left; // amount of space from left edge, a fraction of the total width
- var right; // amount of space from right edge, a fraction of the total width
- if (shouldOverlap) {
- // double the width, but don't go beyond the maximum forward coordinate (1.0)
- forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);
- }
- if (isRtl) {
- left = 1 - forwardCoord;
- right = backwardCoord;
- }
- else {
- left = backwardCoord;
- right = 1 - forwardCoord;
- }
- props.zIndex = seg.level + 1; // convert from 0-base to 1-based
- props.left = left * 100 + '%';
- props.right = right * 100 + '%';
- if (shouldOverlap && seg.forwardPressure) {
- // add padding to the edge so that forward stacked events don't cover the resizer's icon
- props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
- }
- return props;
- };
- return TimeGridEventRenderer;
-}(FgEventRenderer));
-// Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is
-// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.
-function buildSlotSegLevels(segs) {
- var levels = [];
- var i;
- var seg;
- var j;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- // go through all the levels and stop on the first level where there are no collisions
- for (j = 0; j < levels.length; j++) {
- if (!computeSlotSegCollisions(seg, levels[j]).length) {
- break;
- }
- }
- seg.level = j;
- (levels[j] || (levels[j] = [])).push(seg);
- }
- return levels;
-}
-// For every segment, figure out the other segments that are in subsequent
-// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs
-function computeForwardSlotSegs(levels) {
- var i;
- var level;
- var j;
- var seg;
- var k;
- for (i = 0; i < levels.length; i++) {
- level = levels[i];
- for (j = 0; j < level.length; j++) {
- seg = level[j];
- seg.forwardSegs = [];
- for (k = i + 1; k < levels.length; k++) {
- computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);
- }
- }
- }
-}
-// Figure out which path forward (via seg.forwardSegs) results in the longest path until
-// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure
-function computeSlotSegPressures(seg) {
- var forwardSegs = seg.forwardSegs;
- var forwardPressure = 0;
- var i;
- var forwardSeg;
- if (seg.forwardPressure === undefined) { // not already computed
- for (i = 0; i < forwardSegs.length; i++) {
- forwardSeg = forwardSegs[i];
- // figure out the child's maximum forward path
- computeSlotSegPressures(forwardSeg);
- // either use the existing maximum, or use the child's forward pressure
- // plus one (for the forwardSeg itself)
- forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);
- }
- seg.forwardPressure = forwardPressure;
- }
-}
-// Find all the segments in `otherSegs` that vertically collide with `seg`.
-// Append into an optionally-supplied `results` array and return.
-function computeSlotSegCollisions(seg, otherSegs, results) {
- if (results === void 0) { results = []; }
- for (var i = 0; i < otherSegs.length; i++) {
- if (isSlotSegCollision(seg, otherSegs[i])) {
- results.push(otherSegs[i]);
- }
- }
- return results;
-}
-// Do these segments occupy the same vertical space?
-function isSlotSegCollision(seg1, seg2) {
- return seg1.bottom > seg2.top && seg1.top < seg2.bottom;
-}
-function buildTimeGridSegCompareObj(seg) {
- var obj = buildSegCompareObj(seg);
- obj.forwardPressure = seg.forwardPressure;
- obj.backwardCoord = seg.backwardCoord;
- return obj;
-}
-
-var TimeGridMirrorRenderer = /** @class */ (function (_super) {
- __extends(TimeGridMirrorRenderer, _super);
- function TimeGridMirrorRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
- this.segsByCol = this.timeGrid.groupSegsByCol(segs);
- this.timeGrid.attachSegsByCol(this.segsByCol, this.timeGrid.mirrorContainerEls);
- this.sourceSeg = mirrorInfo.sourceSeg;
- };
- TimeGridMirrorRenderer.prototype.generateSegCss = function (seg) {
- var props = _super.prototype.generateSegCss.call(this, seg);
- var sourceSeg = this.sourceSeg;
- if (sourceSeg && sourceSeg.col === seg.col) {
- var sourceSegProps = _super.prototype.generateSegCss.call(this, sourceSeg);
- props.left = sourceSegProps.left;
- props.right = sourceSegProps.right;
- props.marginLeft = sourceSegProps.marginLeft;
- props.marginRight = sourceSegProps.marginRight;
- }
- return props;
- };
- return TimeGridMirrorRenderer;
-}(TimeGridEventRenderer));
-
-var TimeGridFillRenderer = /** @class */ (function (_super) {
- __extends(TimeGridFillRenderer, _super);
- function TimeGridFillRenderer(timeGrid) {
- var _this = _super.call(this) || this;
- _this.timeGrid = timeGrid;
- return _this;
- }
- TimeGridFillRenderer.prototype.attachSegs = function (type, segs) {
- var timeGrid = this.timeGrid;
- var containerEls;
- // TODO: more efficient lookup
- if (type === 'bgEvent') {
- containerEls = timeGrid.bgContainerEls;
- }
- else if (type === 'businessHours') {
- containerEls = timeGrid.businessContainerEls;
- }
- else if (type === 'highlight') {
- containerEls = timeGrid.highlightContainerEls;
- }
- timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);
- return segs.map(function (seg) {
- return seg.el;
- });
- };
- TimeGridFillRenderer.prototype.computeSegSizes = function (segs) {
- this.timeGrid.computeSegVerticals(segs);
- };
- TimeGridFillRenderer.prototype.assignSegSizes = function (segs) {
- this.timeGrid.assignSegVerticals(segs);
- };
- return TimeGridFillRenderer;
-}(FillRenderer));
-
-/* A component that renders one or more columns of vertical time slots
-----------------------------------------------------------------------------------------------------------------------*/
-// potential nice values for the slot-duration and interval-duration
-// from largest to smallest
-var AGENDA_STOCK_SUB_DURATIONS = [
- { hours: 1 },
- { minutes: 30 },
- { minutes: 15 },
- { seconds: 30 },
- { seconds: 15 }
-];
-var TimeGrid = /** @class */ (function (_super) {
- __extends(TimeGrid, _super);
- function TimeGrid(el, renderProps) {
- var _this = _super.call(this, el) || this;
- _this.isSlatSizesDirty = false;
- _this.isColSizesDirty = false;
- _this.processOptions = memoize(_this._processOptions);
- _this.renderSkeleton = memoizeRendering(_this._renderSkeleton);
- _this.renderSlats = memoizeRendering(_this._renderSlats, null, [_this.renderSkeleton]);
- _this.renderColumns = memoizeRendering(_this._renderColumns, _this._unrenderColumns, [_this.renderSkeleton]);
- _this.renderProps = renderProps;
- var renderColumns = _this.renderColumns;
- var eventRenderer = _this.eventRenderer = new TimeGridEventRenderer(_this);
- var fillRenderer = _this.fillRenderer = new TimeGridFillRenderer(_this);
- _this.mirrorRenderer = new TimeGridMirrorRenderer(_this);
- _this.renderBusinessHours = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderColumns]);
- _this.renderDateSelection = memoizeRendering(_this._renderDateSelection, _this._unrenderDateSelection, [renderColumns]);
- _this.renderFgEvents = memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderColumns]);
- _this.renderBgEvents = memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderColumns]);
- _this.renderEventSelection = memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
- _this.renderEventDrag = memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderColumns]);
- _this.renderEventResize = memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderColumns]);
- return _this;
- }
- /* Options
- ------------------------------------------------------------------------------------------------------------------*/
- // Parses various options into properties of this object
- // MUST have context already set
- TimeGrid.prototype._processOptions = function (options) {
- var slotDuration = options.slotDuration, snapDuration = options.snapDuration;
- var snapsPerSlot;
- var input;
- slotDuration = createDuration(slotDuration);
- snapDuration = snapDuration ? createDuration(snapDuration) : slotDuration;
- snapsPerSlot = wholeDivideDurations(slotDuration, snapDuration);
- if (snapsPerSlot === null) {
- snapDuration = slotDuration;
- snapsPerSlot = 1;
- // TODO: say warning?
- }
- this.slotDuration = slotDuration;
- this.snapDuration = snapDuration;
- this.snapsPerSlot = snapsPerSlot;
- // might be an array value (for TimelineView).
- // if so, getting the most granular entry (the last one probably).
- input = options.slotLabelFormat;
- if (Array.isArray(input)) {
- input = input[input.length - 1];
- }
- this.labelFormat = createFormatter(input || {
- hour: 'numeric',
- minute: '2-digit',
- omitZeroMinute: true,
- meridiem: 'short'
- });
- input = options.slotLabelInterval;
- this.labelInterval = input ?
- createDuration(input) :
- this.computeLabelInterval(slotDuration);
- };
- // Computes an automatic value for slotLabelInterval
- TimeGrid.prototype.computeLabelInterval = function (slotDuration) {
- var i;
- var labelInterval;
- var slotsPerLabel;
- // find the smallest stock label interval that results in more than one slots-per-label
- for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {
- labelInterval = createDuration(AGENDA_STOCK_SUB_DURATIONS[i]);
- slotsPerLabel = wholeDivideDurations(labelInterval, slotDuration);
- if (slotsPerLabel !== null && slotsPerLabel > 1) {
- return labelInterval;
- }
- }
- return slotDuration; // fall back
- };
- /* Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.render = function (props, context) {
- this.processOptions(context.options);
- var cells = props.cells;
- this.colCnt = cells.length;
- this.renderSkeleton(context.theme);
- this.renderSlats(props.dateProfile);
- this.renderColumns(props.cells, props.dateProfile);
- this.renderBusinessHours(context, props.businessHourSegs);
- this.renderDateSelection(props.dateSelectionSegs);
- this.renderFgEvents(context, props.fgEventSegs);
- this.renderBgEvents(context, props.bgEventSegs);
- this.renderEventSelection(props.eventSelection);
- this.renderEventDrag(props.eventDrag);
- this.renderEventResize(props.eventResize);
- };
- TimeGrid.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- // should unrender everything else too
- this.renderSlats.unrender();
- this.renderColumns.unrender();
- this.renderSkeleton.unrender();
- };
- TimeGrid.prototype.updateSize = function (isResize) {
- var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
- if (isResize || this.isSlatSizesDirty) {
- this.buildSlatPositions();
- this.isSlatSizesDirty = false;
- }
- if (isResize || this.isColSizesDirty) {
- this.buildColPositions();
- this.isColSizesDirty = false;
- }
- fillRenderer.computeSizes(isResize);
- eventRenderer.computeSizes(isResize);
- mirrorRenderer.computeSizes(isResize);
- fillRenderer.assignSizes(isResize);
- eventRenderer.assignSizes(isResize);
- mirrorRenderer.assignSizes(isResize);
- };
- TimeGrid.prototype._renderSkeleton = function (theme) {
- var el = this.el;
- el.innerHTML =
- '<div class="fc-bg"></div>' +
- '<div class="fc-slats"></div>' +
- '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" style="display:none" />';
- this.rootBgContainerEl = el.querySelector('.fc-bg');
- this.slatContainerEl = el.querySelector('.fc-slats');
- this.bottomRuleEl = el.querySelector('.fc-divider');
- };
- TimeGrid.prototype._renderSlats = function (dateProfile) {
- var theme = this.context.theme;
- this.slatContainerEl.innerHTML =
- '<table class="' + theme.getClass('tableGrid') + '">' +
- this.renderSlatRowHtml(dateProfile) +
- '</table>';
- this.slatEls = findElements(this.slatContainerEl, 'tr');
- this.slatPositions = new PositionCache(this.el, this.slatEls, false, true // vertical
- );
- this.isSlatSizesDirty = true;
- };
- // Generates the HTML for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
- TimeGrid.prototype.renderSlatRowHtml = function (dateProfile) {
- var _a = this.context, dateEnv = _a.dateEnv, theme = _a.theme, isRtl = _a.isRtl;
- var html = '';
- var dayStart = startOfDay(dateProfile.renderRange.start);
- var slotTime = dateProfile.minTime;
- var slotIterator = createDuration(0);
- var slotDate; // will be on the view's first day, but we only care about its time
- var isLabeled;
- var axisHtml;
- // Calculate the time for each slot
- while (asRoughMs(slotTime) < asRoughMs(dateProfile.maxTime)) {
- slotDate = dateEnv.add(dayStart, slotTime);
- isLabeled = wholeDivideDurations(slotIterator, this.labelInterval) !== null;
- axisHtml =
- '<td class="fc-axis fc-time ' + theme.getClass('widgetContent') + '">' +
- (isLabeled ?
- '<span>' + // for matchCellWidths
- htmlEscape(dateEnv.format(slotDate, this.labelFormat)) +
- '</span>' :
- '') +
- '</td>';
- html +=
- '<tr data-time="' + formatIsoTimeString(slotDate) + '"' +
- (isLabeled ? '' : ' class="fc-minor"') +
- '>' +
- (!isRtl ? axisHtml : '') +
- '<td class="' + theme.getClass('widgetContent') + '"></td>' +
- (isRtl ? axisHtml : '') +
- '</tr>';
- slotTime = addDurations(slotTime, this.slotDuration);
- slotIterator = addDurations(slotIterator, this.slotDuration);
- }
- return html;
- };
- TimeGrid.prototype._renderColumns = function (cells, dateProfile) {
- var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, theme = _a.theme, dateEnv = _a.dateEnv;
- var bgRow = new DayBgRow(this.context);
- this.rootBgContainerEl.innerHTML =
- '<table class="' + theme.getClass('tableGrid') + '">' +
- bgRow.renderHtml({
- cells: cells,
- dateProfile: dateProfile,
- renderIntroHtml: this.renderProps.renderBgIntroHtml
- }) +
- '</table>';
- this.colEls = findElements(this.el, '.fc-day, .fc-disabled-day');
- for (var col = 0; col < this.colCnt; col++) {
- calendar.publiclyTrigger('dayRender', [
- {
- date: dateEnv.toDate(cells[col].date),
- el: this.colEls[col],
- view: view
- }
- ]);
- }
- if (isRtl) {
- this.colEls.reverse();
- }
- this.colPositions = new PositionCache(this.el, this.colEls, true, // horizontal
- false);
- this.renderContentSkeleton();
- this.isColSizesDirty = true;
- };
- TimeGrid.prototype._unrenderColumns = function () {
- this.unrenderContentSkeleton();
- };
- /* Content Skeleton
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders the DOM that the view's content will live in
- TimeGrid.prototype.renderContentSkeleton = function () {
- var isRtl = this.context.isRtl;
- var parts = [];
- var skeletonEl;
- parts.push(this.renderProps.renderIntroHtml());
- for (var i = 0; i < this.colCnt; i++) {
- parts.push('<td>' +
- '<div class="fc-content-col">' +
- '<div class="fc-event-container fc-mirror-container"></div>' +
- '<div class="fc-event-container"></div>' +
- '<div class="fc-highlight-container"></div>' +
- '<div class="fc-bgevent-container"></div>' +
- '<div class="fc-business-container"></div>' +
- '</div>' +
- '</td>');
- }
- if (isRtl) {
- parts.reverse();
- }
- skeletonEl = this.contentSkeletonEl = htmlToElement('<div class="fc-content-skeleton">' +
- '<table>' +
- '<tr>' + parts.join('') + '</tr>' +
- '</table>' +
- '</div>');
- this.colContainerEls = findElements(skeletonEl, '.fc-content-col');
- this.mirrorContainerEls = findElements(skeletonEl, '.fc-mirror-container');
- this.fgContainerEls = findElements(skeletonEl, '.fc-event-container:not(.fc-mirror-container)');
- this.bgContainerEls = findElements(skeletonEl, '.fc-bgevent-container');
- this.highlightContainerEls = findElements(skeletonEl, '.fc-highlight-container');
- this.businessContainerEls = findElements(skeletonEl, '.fc-business-container');
- if (isRtl) {
- this.colContainerEls.reverse();
- this.mirrorContainerEls.reverse();
- this.fgContainerEls.reverse();
- this.bgContainerEls.reverse();
- this.highlightContainerEls.reverse();
- this.businessContainerEls.reverse();
- }
- this.el.appendChild(skeletonEl);
- };
- TimeGrid.prototype.unrenderContentSkeleton = function () {
- removeElement(this.contentSkeletonEl);
- };
- // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col
- TimeGrid.prototype.groupSegsByCol = function (segs) {
- var segsByCol = [];
- var i;
- for (i = 0; i < this.colCnt; i++) {
- segsByCol.push([]);
- }
- for (i = 0; i < segs.length; i++) {
- segsByCol[segs[i].col].push(segs[i]);
- }
- return segsByCol;
- };
- // Given segments grouped by column, insert the segments' elements into a parallel array of container
- // elements, each living within a column.
- TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {
- var col;
- var segs;
- var i;
- for (col = 0; col < this.colCnt; col++) { // iterate each column grouping
- segs = segsByCol[col];
- for (i = 0; i < segs.length; i++) {
- containerEls[col].appendChild(segs[i].el);
- }
- }
- };
- /* Now Indicator
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.getNowIndicatorUnit = function () {
- return 'minute'; // will refresh on the minute
- };
- TimeGrid.prototype.renderNowIndicator = function (segs, date) {
- // HACK: if date columns not ready for some reason (scheduler)
- if (!this.colContainerEls) {
- return;
- }
- var top = this.computeDateTop(date);
- var nodes = [];
- var i;
- // render lines within the columns
- for (i = 0; i < segs.length; i++) {
- var lineEl = createElement('div', { className: 'fc-now-indicator fc-now-indicator-line' });
- lineEl.style.top = top + 'px';
- this.colContainerEls[segs[i].col].appendChild(lineEl);
- nodes.push(lineEl);
- }
- // render an arrow over the axis
- if (segs.length > 0) { // is the current time in view?
- var arrowEl = createElement('div', { className: 'fc-now-indicator fc-now-indicator-arrow' });
- arrowEl.style.top = top + 'px';
- this.contentSkeletonEl.appendChild(arrowEl);
- nodes.push(arrowEl);
- }
- this.nowIndicatorEls = nodes;
- };
- TimeGrid.prototype.unrenderNowIndicator = function () {
- if (this.nowIndicatorEls) {
- this.nowIndicatorEls.forEach(removeElement);
- this.nowIndicatorEls = null;
- }
- };
- /* Coordinates
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.getTotalSlatHeight = function () {
- return this.slatContainerEl.getBoundingClientRect().height;
- };
- // Computes the top coordinate, relative to the bounds of the grid, of the given date.
- // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
- TimeGrid.prototype.computeDateTop = function (when, startOfDayDate) {
- if (!startOfDayDate) {
- startOfDayDate = startOfDay(when);
- }
- return this.computeTimeTop(createDuration(when.valueOf() - startOfDayDate.valueOf()));
- };
- // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
- TimeGrid.prototype.computeTimeTop = function (duration) {
- var len = this.slatEls.length;
- var dateProfile = this.props.dateProfile;
- var slatCoverage = (duration.milliseconds - asRoughMs(dateProfile.minTime)) / asRoughMs(this.slotDuration); // floating-point value of # of slots covered
- var slatIndex;
- var slatRemainder;
- // compute a floating-point number for how many slats should be progressed through.
- // from 0 to number of slats (inclusive)
- // constrained because minTime/maxTime might be customized.
- slatCoverage = Math.max(0, slatCoverage);
- slatCoverage = Math.min(len, slatCoverage);
- // an integer index of the furthest whole slat
- // from 0 to number slats (*exclusive*, so len-1)
- slatIndex = Math.floor(slatCoverage);
- slatIndex = Math.min(slatIndex, len - 1);
- // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
- // could be 1.0 if slatCoverage is covering *all* the slots
- slatRemainder = slatCoverage - slatIndex;
- return this.slatPositions.tops[slatIndex] +
- this.slatPositions.getHeight(slatIndex) * slatRemainder;
- };
- // For each segment in an array, computes and assigns its top and bottom properties
- TimeGrid.prototype.computeSegVerticals = function (segs) {
- var options = this.context.options;
- var eventMinHeight = options.timeGridEventMinHeight;
- var i;
- var seg;
- var dayDate;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- dayDate = this.props.cells[seg.col].date;
- seg.top = this.computeDateTop(seg.start, dayDate);
- seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.end, dayDate));
- }
- };
- // Given segments that already have their top/bottom properties computed, applies those values to
- // the segments' elements.
- TimeGrid.prototype.assignSegVerticals = function (segs) {
- var i;
- var seg;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- applyStyle(seg.el, this.generateSegVerticalCss(seg));
- }
- };
- // Generates an object with CSS properties for the top/bottom coordinates of a segment element
- TimeGrid.prototype.generateSegVerticalCss = function (seg) {
- return {
- top: seg.top,
- bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container
- };
- };
- /* Sizing
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.buildPositionCaches = function () {
- this.buildColPositions();
- this.buildSlatPositions();
- };
- TimeGrid.prototype.buildColPositions = function () {
- this.colPositions.build();
- };
- TimeGrid.prototype.buildSlatPositions = function () {
- this.slatPositions.build();
- };
- /* Hit System
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.positionToHit = function (positionLeft, positionTop) {
- var dateEnv = this.context.dateEnv;
- var _a = this, snapsPerSlot = _a.snapsPerSlot, slatPositions = _a.slatPositions, colPositions = _a.colPositions;
- var colIndex = colPositions.leftToIndex(positionLeft);
- var slatIndex = slatPositions.topToIndex(positionTop);
- if (colIndex != null && slatIndex != null) {
- var slatTop = slatPositions.tops[slatIndex];
- var slatHeight = slatPositions.getHeight(slatIndex);
- var partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1
- var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
- var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
- var dayDate = this.props.cells[colIndex].date;
- var time = addDurations(this.props.dateProfile.minTime, multiplyDuration(this.snapDuration, snapIndex));
- var start = dateEnv.add(dayDate, time);
- var end = dateEnv.add(start, this.snapDuration);
- return {
- col: colIndex,
- dateSpan: {
- range: { start: start, end: end },
- allDay: false
- },
- dayEl: this.colEls[colIndex],
- relativeRect: {
- left: colPositions.lefts[colIndex],
- right: colPositions.rights[colIndex],
- top: slatTop,
- bottom: slatTop + slatHeight
- }
- };
- }
- };
- /* Event Drag Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype._renderEventDrag = function (state) {
- if (state) {
- this.eventRenderer.hideByHash(state.affectedInstances);
- if (state.isEvent) {
- this.mirrorRenderer.renderSegs(this.context, state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
- }
- else {
- this.fillRenderer.renderSegs('highlight', this.context, state.segs);
- }
- }
- };
- TimeGrid.prototype._unrenderEventDrag = function (state) {
- if (state) {
- this.eventRenderer.showByHash(state.affectedInstances);
- if (state.isEvent) {
- this.mirrorRenderer.unrender(this.context, state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
- }
- else {
- this.fillRenderer.unrender('highlight', this.context);
- }
- }
- };
- /* Event Resize Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype._renderEventResize = function (state) {
- if (state) {
- this.eventRenderer.hideByHash(state.affectedInstances);
- this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
- }
- };
- TimeGrid.prototype._unrenderEventResize = function (state) {
- if (state) {
- this.eventRenderer.showByHash(state.affectedInstances);
- this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
- }
- };
- /* Selection
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.
- TimeGrid.prototype._renderDateSelection = function (segs) {
- if (segs) {
- if (this.context.options.selectMirror) {
- this.mirrorRenderer.renderSegs(this.context, segs, { isSelecting: true });
- }
- else {
- this.fillRenderer.renderSegs('highlight', this.context, segs);
- }
- }
- };
- TimeGrid.prototype._unrenderDateSelection = function (segs) {
- if (segs) {
- if (this.context.options.selectMirror) {
- this.mirrorRenderer.unrender(this.context, segs, { isSelecting: true });
- }
- else {
- this.fillRenderer.unrender('highlight', this.context);
- }
- }
- };
- return TimeGrid;
-}(DateComponent));
-
-var AllDaySplitter = /** @class */ (function (_super) {
- __extends(AllDaySplitter, _super);
- function AllDaySplitter() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- AllDaySplitter.prototype.getKeyInfo = function () {
- return {
- allDay: {},
- timed: {}
- };
- };
- AllDaySplitter.prototype.getKeysForDateSpan = function (dateSpan) {
- if (dateSpan.allDay) {
- return ['allDay'];
- }
- else {
- return ['timed'];
- }
- };
- AllDaySplitter.prototype.getKeysForEventDef = function (eventDef) {
- if (!eventDef.allDay) {
- return ['timed'];
- }
- else if (hasBgRendering(eventDef)) {
- return ['timed', 'allDay'];
- }
- else {
- return ['allDay'];
- }
- };
- return AllDaySplitter;
-}(Splitter));
-
-var TIMEGRID_ALL_DAY_EVENT_LIMIT = 5;
-var WEEK_HEADER_FORMAT = createFormatter({ week: 'short' });
-/* An abstract class for all timegrid-related views. Displays one more columns with time slots running vertically.
-----------------------------------------------------------------------------------------------------------------------*/
-// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).
-// Responsible for managing width/height.
-var AbstractTimeGridView = /** @class */ (function (_super) {
- __extends(AbstractTimeGridView, _super);
- function AbstractTimeGridView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.splitter = new AllDaySplitter();
- _this.renderSkeleton = memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- /* Header Render Methods
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that will go before the day-of week header cells
- _this.renderHeadIntroHtml = function () {
- var _a = _this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
- var range = _this.props.dateProfile.renderRange;
- var dayCnt = diffDays(range.start, range.end);
- var weekText;
- if (options.weekNumbers) {
- weekText = dateEnv.format(range.start, WEEK_HEADER_FORMAT);
- return '' +
- '<th class="fc-axis fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '>' +
- buildGotoAnchorHtml(// aside from link, important for matchCellWidths
- options, dateEnv, { date: range.start, type: 'week', forceOff: dayCnt > 1 }, htmlEscape(weekText) // inner HTML
- ) +
- '</th>';
- }
- else {
- return '<th class="fc-axis ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '></th>';
- }
- };
- /* Time Grid Render Methods
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.
- _this.renderTimeGridBgIntroHtml = function () {
- var theme = _this.context.theme;
- return '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '></td>';
- };
- // Generates the HTML that goes before all other types of cells.
- // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
- _this.renderTimeGridIntroHtml = function () {
- return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
- };
- /* Day Grid Render Methods
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that goes before the all-day cells
- _this.renderDayGridBgIntroHtml = function () {
- var _a = _this.context, theme = _a.theme, options = _a.options;
- return '' +
- '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '>' +
- '<span>' + // needed for matchCellWidths
- getAllDayHtml(options) +
- '</span>' +
- '</td>';
- };
- // Generates the HTML that goes before all other types of cells.
- // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
- _this.renderDayGridIntroHtml = function () {
- return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
- };
- return _this;
- }
- AbstractTimeGridView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context);
- this.renderSkeleton(context);
- };
- AbstractTimeGridView.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderSkeleton.unrender();
- };
- AbstractTimeGridView.prototype._renderSkeleton = function (context) {
- this.el.classList.add('fc-timeGrid-view');
- this.el.innerHTML = this.renderSkeletonHtml();
- this.scroller = new ScrollComponent('hidden', // overflow x
- 'auto' // overflow y
- );
- var timeGridWrapEl = this.scroller.el;
- this.el.querySelector('.fc-body > tr > td').appendChild(timeGridWrapEl);
- timeGridWrapEl.classList.add('fc-time-grid-container');
- var timeGridEl = createElement('div', { className: 'fc-time-grid' });
- timeGridWrapEl.appendChild(timeGridEl);
- this.timeGrid = new TimeGrid(timeGridEl, {
- renderBgIntroHtml: this.renderTimeGridBgIntroHtml,
- renderIntroHtml: this.renderTimeGridIntroHtml
- });
- if (context.options.allDaySlot) { // should we display the "all-day" area?
- this.dayGrid = new DayGrid(// the all-day subcomponent of this view
- this.el.querySelector('.fc-day-grid'), {
- renderNumberIntroHtml: this.renderDayGridIntroHtml,
- renderBgIntroHtml: this.renderDayGridBgIntroHtml,
- renderIntroHtml: this.renderDayGridIntroHtml,
- colWeekNumbersVisible: false,
- cellWeekNumbersVisible: false
- });
- // have the day-grid extend it's coordinate area over the <hr> dividing the two grids
- var dividerEl = this.el.querySelector('.fc-divider');
- this.dayGrid.bottomCoordPadding = dividerEl.getBoundingClientRect().height;
- }
- };
- AbstractTimeGridView.prototype._unrenderSkeleton = function () {
- this.el.classList.remove('fc-timeGrid-view');
- this.timeGrid.destroy();
- if (this.dayGrid) {
- this.dayGrid.destroy();
- }
- this.scroller.destroy();
- };
- /* Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- // Builds the HTML skeleton for the view.
- // The day-grid and time-grid components will render inside containers defined by this HTML.
- AbstractTimeGridView.prototype.renderSkeletonHtml = function () {
- var _a = this.context, theme = _a.theme, options = _a.options;
- return '' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- (options.columnHeader ?
- '<thead class="fc-head">' +
- '<tr>' +
- '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '">&nbsp;</td>' +
- '</tr>' +
- '</thead>' :
- '') +
- '<tbody class="fc-body">' +
- '<tr>' +
- '<td class="' + theme.getClass('widgetContent') + '">' +
- (options.allDaySlot ?
- '<div class="fc-day-grid"></div>' +
- '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" />' :
- '') +
- '</td>' +
- '</tr>' +
- '</tbody>' +
- '</table>';
- };
- /* Now Indicator
- ------------------------------------------------------------------------------------------------------------------*/
- AbstractTimeGridView.prototype.getNowIndicatorUnit = function () {
- return this.timeGrid.getNowIndicatorUnit();
- };
- // subclasses should implement
- // renderNowIndicator(date: DateMarker) {
- // }
- AbstractTimeGridView.prototype.unrenderNowIndicator = function () {
- this.timeGrid.unrenderNowIndicator();
- };
- /* Dimensions
- ------------------------------------------------------------------------------------------------------------------*/
- AbstractTimeGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
- _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first
- this.timeGrid.updateSize(isResize);
- if (this.dayGrid) {
- this.dayGrid.updateSize(isResize);
- }
- };
- // Adjusts the vertical dimensions of the view to the specified values
- AbstractTimeGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
- var _this = this;
- var eventLimit;
- var scrollerHeight;
- var scrollbarWidths;
- // make all axis cells line up
- this.axisWidth = matchCellWidths(findElements(this.el, '.fc-axis'));
- // hack to give the view some height prior to timeGrid's columns being rendered
- // TODO: separate setting height from scroller VS timeGrid.
- if (!this.timeGrid.colEls) {
- if (!isAuto) {
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- return;
- }
- // set of fake row elements that must compensate when scroller has scrollbars
- var noScrollRowEls = findElements(this.el, '.fc-row').filter(function (node) {
- return !_this.scroller.el.contains(node);
- });
- // reset all dimensions back to the original state
- this.timeGrid.bottomRuleEl.style.display = 'none'; // will be shown later if this <hr> is necessary
- this.scroller.clear(); // sets height to 'auto' and clears overflow
- noScrollRowEls.forEach(uncompensateScroll);
- // limit number of events in the all-day area
- if (this.dayGrid) {
- this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
- eventLimit = this.context.options.eventLimit;
- if (eventLimit && typeof eventLimit !== 'number') {
- eventLimit = TIMEGRID_ALL_DAY_EVENT_LIMIT; // make sure "auto" goes to a real number
- }
- if (eventLimit) {
- this.dayGrid.limitRows(eventLimit);
- }
- }
- if (!isAuto) { // should we force dimensions of the scroll container?
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- scrollbarWidths = this.scroller.getScrollbarWidths();
- if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
- // make the all-day and header rows lines up
- noScrollRowEls.forEach(function (rowEl) {
- compensateScroll(rowEl, scrollbarWidths);
- });
- // the scrollbar compensation might have changed text flow, which might affect height, so recalculate
- // and reapply the desired height to the scroller.
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- // guarantees the same scrollbar widths
- this.scroller.lockOverflow(scrollbarWidths);
- // if there's any space below the slats, show the horizontal rule.
- // this won't cause any new overflow, because lockOverflow already called.
- if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {
- this.timeGrid.bottomRuleEl.style.display = '';
- }
- }
- };
- // given a desired total height of the view, returns what the height of the scroller should be
- AbstractTimeGridView.prototype.computeScrollerHeight = function (viewHeight) {
- return viewHeight -
- subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
- };
- /* Scroll
- ------------------------------------------------------------------------------------------------------------------*/
- // Computes the initial pre-configured scroll state prior to allowing the user to change it
- AbstractTimeGridView.prototype.computeDateScroll = function (duration) {
- var top = this.timeGrid.computeTimeTop(duration);
- // zoom can give weird floating-point values. rather scroll a little bit further
- top = Math.ceil(top);
- if (top) {
- top++; // to overcome top border that slots beyond the first have. looks better
- }
- return { top: top };
- };
- AbstractTimeGridView.prototype.queryDateScroll = function () {
- return { top: this.scroller.getScrollTop() };
- };
- AbstractTimeGridView.prototype.applyDateScroll = function (scroll) {
- if (scroll.top !== undefined) {
- this.scroller.setScrollTop(scroll.top);
- }
- };
- // Generates an HTML attribute string for setting the width of the axis, if it is known
- AbstractTimeGridView.prototype.axisStyleAttr = function () {
- if (this.axisWidth != null) {
- return 'style="width:' + this.axisWidth + 'px"';
- }
- return '';
- };
- return AbstractTimeGridView;
-}(View));
-AbstractTimeGridView.prototype.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering
-
-var SimpleTimeGrid = /** @class */ (function (_super) {
- __extends(SimpleTimeGrid, _super);
- function SimpleTimeGrid(timeGrid) {
- var _this = _super.call(this, timeGrid.el) || this;
- _this.buildDayRanges = memoize(buildDayRanges);
- _this.slicer = new TimeGridSlicer();
- _this.timeGrid = timeGrid;
- return _this;
- }
- SimpleTimeGrid.prototype.firstContext = function (context) {
- context.calendar.registerInteractiveComponent(this, {
- el: this.timeGrid.el
- });
- };
- SimpleTimeGrid.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.context.calendar.unregisterInteractiveComponent(this);
- };
- SimpleTimeGrid.prototype.render = function (props, context) {
- var dateEnv = this.context.dateEnv;
- var dateProfile = props.dateProfile, dayTable = props.dayTable;
- var dayRanges = this.dayRanges = this.buildDayRanges(dayTable, dateProfile, dateEnv);
- var timeGrid = this.timeGrid;
- timeGrid.receiveContext(context); // hack because context is used in sliceProps
- timeGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, null, context.calendar, timeGrid, dayRanges), { dateProfile: dateProfile, cells: dayTable.cells[0] }), context);
- };
- SimpleTimeGrid.prototype.renderNowIndicator = function (date) {
- this.timeGrid.renderNowIndicator(this.slicer.sliceNowDate(date, this.timeGrid, this.dayRanges), date);
- };
- SimpleTimeGrid.prototype.buildPositionCaches = function () {
- this.timeGrid.buildPositionCaches();
- };
- SimpleTimeGrid.prototype.queryHit = function (positionLeft, positionTop) {
- var rawHit = this.timeGrid.positionToHit(positionLeft, positionTop);
- if (rawHit) {
- return {
- component: this.timeGrid,
- dateSpan: rawHit.dateSpan,
- dayEl: rawHit.dayEl,
- rect: {
- left: rawHit.relativeRect.left,
- right: rawHit.relativeRect.right,
- top: rawHit.relativeRect.top,
- bottom: rawHit.relativeRect.bottom
- },
- layer: 0
- };
- }
- };
- return SimpleTimeGrid;
-}(DateComponent));
-function buildDayRanges(dayTable, dateProfile, dateEnv) {
- var ranges = [];
- for (var _i = 0, _a = dayTable.headerDates; _i < _a.length; _i++) {
- var date = _a[_i];
- ranges.push({
- start: dateEnv.add(date, dateProfile.minTime),
- end: dateEnv.add(date, dateProfile.maxTime)
- });
- }
- return ranges;
-}
-var TimeGridSlicer = /** @class */ (function (_super) {
- __extends(TimeGridSlicer, _super);
- function TimeGridSlicer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeGridSlicer.prototype.sliceRange = function (range, dayRanges) {
- var segs = [];
- for (var col = 0; col < dayRanges.length; col++) {
- var segRange = intersectRanges(range, dayRanges[col]);
- if (segRange) {
- segs.push({
- start: segRange.start,
- end: segRange.end,
- isStart: segRange.start.valueOf() === range.start.valueOf(),
- isEnd: segRange.end.valueOf() === range.end.valueOf(),
- col: col
- });
- }
- }
- return segs;
- };
- return TimeGridSlicer;
-}(Slicer));
-
-var TimeGridView = /** @class */ (function (_super) {
- __extends(TimeGridView, _super);
- function TimeGridView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.buildDayTable = memoize(buildDayTable);
- return _this;
- }
- TimeGridView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context); // for flags for updateSize. also _renderSkeleton/_unrenderSkeleton
- var _a = this.props, dateProfile = _a.dateProfile, dateProfileGenerator = _a.dateProfileGenerator;
- var nextDayThreshold = context.nextDayThreshold;
- var dayTable = this.buildDayTable(dateProfile, dateProfileGenerator);
- var splitProps = this.splitter.splitProps(props);
- if (this.header) {
- this.header.receiveProps({
- dateProfile: dateProfile,
- dates: dayTable.headerDates,
- datesRepDistinctDays: true,
- renderIntroHtml: this.renderHeadIntroHtml
- }, context);
- }
- this.simpleTimeGrid.receiveProps(__assign({}, splitProps['timed'], { dateProfile: dateProfile,
- dayTable: dayTable }), context);
- if (this.simpleDayGrid) {
- this.simpleDayGrid.receiveProps(__assign({}, splitProps['allDay'], { dateProfile: dateProfile,
- dayTable: dayTable,
- nextDayThreshold: nextDayThreshold, isRigid: false }), context);
- }
- this.startNowIndicator(dateProfile, dateProfileGenerator);
- };
- TimeGridView.prototype._renderSkeleton = function (context) {
- _super.prototype._renderSkeleton.call(this, context);
- if (context.options.columnHeader) {
- this.header = new DayHeader(this.el.querySelector('.fc-head-container'));
- }
- this.simpleTimeGrid = new SimpleTimeGrid(this.timeGrid);
- if (this.dayGrid) {
- this.simpleDayGrid = new SimpleDayGrid(this.dayGrid);
- }
- };
- TimeGridView.prototype._unrenderSkeleton = function () {
- _super.prototype._unrenderSkeleton.call(this);
- if (this.header) {
- this.header.destroy();
- }
- this.simpleTimeGrid.destroy();
- if (this.simpleDayGrid) {
- this.simpleDayGrid.destroy();
- }
- };
- TimeGridView.prototype.renderNowIndicator = function (date) {
- this.simpleTimeGrid.renderNowIndicator(date);
- };
- return TimeGridView;
-}(AbstractTimeGridView));
-function buildDayTable(dateProfile, dateProfileGenerator) {
- var daySeries = new DaySeries(dateProfile.renderRange, dateProfileGenerator);
- return new DayTable(daySeries, false);
-}
-
-var main = createPlugin({
- defaultView: 'timeGridWeek',
- views: {
- timeGrid: {
- class: TimeGridView,
- allDaySlot: true,
- slotDuration: '00:30:00',
- slotEventOverlap: true // a bad name. confused with overlap/constraint system
- },
- timeGridDay: {
- type: 'timeGrid',
- duration: { days: 1 }
- },
- timeGridWeek: {
- type: 'timeGrid',
- duration: { weeks: 1 }
- }
- }
-});
-
-export default main;
-export { AbstractTimeGridView, TimeGrid, TimeGridSlicer, TimeGridView, buildDayRanges, buildDayTable };
diff --git a/library/fullcalendar/packages/timegrid/main.js b/library/fullcalendar/packages/timegrid/main.js
deleted file mode 100644
index d64a8a2ea..000000000
--- a/library/fullcalendar/packages/timegrid/main.js
+++ /dev/null
@@ -1,1403 +0,0 @@
-/*!
-FullCalendar Time Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fullcalendar/core'), require('@fullcalendar/daygrid')) :
- typeof define === 'function' && define.amd ? define(['exports', '@fullcalendar/core', '@fullcalendar/daygrid'], factory) :
- (global = global || self, factory(global.FullCalendarTimeGrid = {}, global.FullCalendar, global.FullCalendarDayGrid));
-}(this, function (exports, core, daygrid) { 'use strict';
-
- /*! *****************************************************************************
- Copyright (c) Microsoft Corporation.
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- ***************************************************************************** */
- /* global Reflect, Promise */
-
- var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
-
- function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- }
-
- var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
-
- /*
- Only handles foreground segs.
- Does not own rendering. Use for low-level util methods by TimeGrid.
- */
- var TimeGridEventRenderer = /** @class */ (function (_super) {
- __extends(TimeGridEventRenderer, _super);
- function TimeGridEventRenderer(timeGrid) {
- var _this = _super.call(this) || this;
- _this.timeGrid = timeGrid;
- return _this;
- }
- TimeGridEventRenderer.prototype.renderSegs = function (context, segs, mirrorInfo) {
- _super.prototype.renderSegs.call(this, context, segs, mirrorInfo);
- // TODO: dont do every time. memoize
- this.fullTimeFormat = core.createFormatter({
- hour: 'numeric',
- minute: '2-digit',
- separator: this.context.options.defaultRangeSeparator
- });
- };
- // Given an array of foreground segments, render a DOM element for each, computes position,
- // and attaches to the column inner-container elements.
- TimeGridEventRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
- var segsByCol = this.timeGrid.groupSegsByCol(segs);
- // order the segs within each column
- // TODO: have groupSegsByCol do this?
- for (var col = 0; col < segsByCol.length; col++) {
- segsByCol[col] = this.sortEventSegs(segsByCol[col]);
- }
- this.segsByCol = segsByCol;
- this.timeGrid.attachSegsByCol(segsByCol, this.timeGrid.fgContainerEls);
- };
- TimeGridEventRenderer.prototype.detachSegs = function (segs) {
- segs.forEach(function (seg) {
- core.removeElement(seg.el);
- });
- this.segsByCol = null;
- };
- TimeGridEventRenderer.prototype.computeSegSizes = function (allSegs) {
- var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
- var colCnt = timeGrid.colCnt;
- timeGrid.computeSegVerticals(allSegs); // horizontals relies on this
- if (segsByCol) {
- for (var col = 0; col < colCnt; col++) {
- this.computeSegHorizontals(segsByCol[col]); // compute horizontal coordinates, z-index's, and reorder the array
- }
- }
- };
- TimeGridEventRenderer.prototype.assignSegSizes = function (allSegs) {
- var _a = this, timeGrid = _a.timeGrid, segsByCol = _a.segsByCol;
- var colCnt = timeGrid.colCnt;
- timeGrid.assignSegVerticals(allSegs); // horizontals relies on this
- if (segsByCol) {
- for (var col = 0; col < colCnt; col++) {
- this.assignSegCss(segsByCol[col]);
- }
- }
- };
- // Computes a default event time formatting string if `eventTimeFormat` is not explicitly defined
- TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {
- return {
- hour: 'numeric',
- minute: '2-digit',
- meridiem: false
- };
- };
- // Computes a default `displayEventEnd` value if one is not expliclty defined
- TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {
- return true;
- };
- // Renders the HTML for a single event segment's default rendering
- TimeGridEventRenderer.prototype.renderSegHtml = function (seg, mirrorInfo) {
- var eventRange = seg.eventRange;
- var eventDef = eventRange.def;
- var eventUi = eventRange.ui;
- var allDay = eventDef.allDay;
- var isDraggable = core.computeEventDraggable(this.context, eventDef, eventUi);
- var isResizableFromStart = seg.isStart && core.computeEventStartResizable(this.context, eventDef, eventUi);
- var isResizableFromEnd = seg.isEnd && core.computeEventEndResizable(this.context, eventDef, eventUi);
- var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd, mirrorInfo);
- var skinCss = core.cssToStr(this.getSkinCss(eventUi));
- var timeText;
- var fullTimeText; // more verbose time text. for the print stylesheet
- var startTimeText; // just the start time text
- classes.unshift('fc-time-grid-event');
- // if the event appears to span more than one day...
- if (core.isMultiDayRange(eventRange.range)) {
- // Don't display time text on segments that run entirely through a day.
- // That would appear as midnight-midnight and would look dumb.
- // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)
- if (seg.isStart || seg.isEnd) {
- var unzonedStart = seg.start;
- var unzonedEnd = seg.end;
- timeText = this._getTimeText(unzonedStart, unzonedEnd, allDay); // TODO: give the timezones
- fullTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, this.fullTimeFormat);
- startTimeText = this._getTimeText(unzonedStart, unzonedEnd, allDay, null, false); // displayEnd=false
- }
- }
- else {
- // Display the normal time text for the *event's* times
- timeText = this.getTimeText(eventRange);
- fullTimeText = this.getTimeText(eventRange, this.fullTimeFormat);
- startTimeText = this.getTimeText(eventRange, null, false); // displayEnd=false
- }
- return '<a class="' + classes.join(' ') + '"' +
- (eventDef.url ?
- ' href="' + core.htmlEscape(eventDef.url) + '"' :
- '') +
- (skinCss ?
- ' style="' + skinCss + '"' :
- '') +
- '>' +
- '<div class="fc-content">' +
- (timeText ?
- '<div class="fc-time"' +
- ' data-start="' + core.htmlEscape(startTimeText) + '"' +
- ' data-full="' + core.htmlEscape(fullTimeText) + '"' +
- '>' +
- '<span>' + core.htmlEscape(timeText) + '</span>' +
- '</div>' :
- '') +
- (eventDef.title ?
- '<div class="fc-title">' +
- core.htmlEscape(eventDef.title) +
- '</div>' :
- '') +
- '</div>' +
- /* TODO: write CSS for this
- (isResizableFromStart ?
- '<div class="fc-resizer fc-start-resizer"></div>' :
- ''
- ) +
- */
- (isResizableFromEnd ?
- '<div class="fc-resizer fc-end-resizer"></div>' :
- '') +
- '</a>';
- };
- // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.
- // Assumed the segs are already ordered.
- // NOTE: Also reorders the given array by date!
- TimeGridEventRenderer.prototype.computeSegHorizontals = function (segs) {
- var levels;
- var level0;
- var i;
- levels = buildSlotSegLevels(segs);
- computeForwardSlotSegs(levels);
- if ((level0 = levels[0])) {
- for (i = 0; i < level0.length; i++) {
- computeSlotSegPressures(level0[i]);
- }
- for (i = 0; i < level0.length; i++) {
- this.computeSegForwardBack(level0[i], 0, 0);
- }
- }
- };
- // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range
- // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to "left" and
- // seg.forwardCoord maps to "right" (via percentage). Vice-versa if the calendar is right-to-left.
- //
- // The segment might be part of a "series", which means consecutive segments with the same pressure
- // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of
- // segments behind this one in the current series, and `seriesBackwardCoord` is the starting
- // coordinate of the first segment in the series.
- TimeGridEventRenderer.prototype.computeSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {
- var forwardSegs = seg.forwardSegs;
- var i;
- if (seg.forwardCoord === undefined) { // not already computed
- if (!forwardSegs.length) {
- // if there are no forward segments, this segment should butt up against the edge
- seg.forwardCoord = 1;
- }
- else {
- // sort highest pressure first
- this.sortForwardSegs(forwardSegs);
- // this segment's forwardCoord will be calculated from the backwardCoord of the
- // highest-pressure forward segment.
- this.computeSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);
- seg.forwardCoord = forwardSegs[0].backwardCoord;
- }
- // calculate the backwardCoord from the forwardCoord. consider the series
- seg.backwardCoord = seg.forwardCoord -
- (seg.forwardCoord - seriesBackwardCoord) / // available width for series
- (seriesBackwardPressure + 1); // # of segments in the series
- // use this segment's coordinates to computed the coordinates of the less-pressurized
- // forward segments
- for (i = 0; i < forwardSegs.length; i++) {
- this.computeSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);
- }
- }
- };
- TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {
- var objs = forwardSegs.map(buildTimeGridSegCompareObj);
- var specs = [
- // put higher-pressure first
- { field: 'forwardPressure', order: -1 },
- // put segments that are closer to initial edge first (and favor ones with no coords yet)
- { field: 'backwardCoord', order: 1 }
- ].concat(this.context.eventOrderSpecs);
- objs.sort(function (obj0, obj1) {
- return core.compareByFieldSpecs(obj0, obj1, specs);
- });
- return objs.map(function (c) {
- return c._seg;
- });
- };
- // Given foreground event segments that have already had their position coordinates computed,
- // assigns position-related CSS values to their elements.
- TimeGridEventRenderer.prototype.assignSegCss = function (segs) {
- for (var _i = 0, segs_1 = segs; _i < segs_1.length; _i++) {
- var seg = segs_1[_i];
- core.applyStyle(seg.el, this.generateSegCss(seg));
- if (seg.level > 0) {
- seg.el.classList.add('fc-time-grid-event-inset');
- }
- // if the event is short that the title will be cut off,
- // attach a className that condenses the title into the time area.
- if (seg.eventRange.def.title && seg.bottom - seg.top < 30) {
- seg.el.classList.add('fc-short'); // TODO: "condensed" is a better name
- }
- }
- };
- // Generates an object with CSS properties/values that should be applied to an event segment element.
- // Contains important positioning-related properties that should be applied to any event element, customized or not.
- TimeGridEventRenderer.prototype.generateSegCss = function (seg) {
- var shouldOverlap = this.context.options.slotEventOverlap;
- var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point
- var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point
- var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first
- var isRtl = this.context.isRtl;
- var left; // amount of space from left edge, a fraction of the total width
- var right; // amount of space from right edge, a fraction of the total width
- if (shouldOverlap) {
- // double the width, but don't go beyond the maximum forward coordinate (1.0)
- forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);
- }
- if (isRtl) {
- left = 1 - forwardCoord;
- right = backwardCoord;
- }
- else {
- left = backwardCoord;
- right = 1 - forwardCoord;
- }
- props.zIndex = seg.level + 1; // convert from 0-base to 1-based
- props.left = left * 100 + '%';
- props.right = right * 100 + '%';
- if (shouldOverlap && seg.forwardPressure) {
- // add padding to the edge so that forward stacked events don't cover the resizer's icon
- props[isRtl ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width
- }
- return props;
- };
- return TimeGridEventRenderer;
- }(core.FgEventRenderer));
- // Builds an array of segments "levels". The first level will be the leftmost tier of segments if the calendar is
- // left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.
- function buildSlotSegLevels(segs) {
- var levels = [];
- var i;
- var seg;
- var j;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- // go through all the levels and stop on the first level where there are no collisions
- for (j = 0; j < levels.length; j++) {
- if (!computeSlotSegCollisions(seg, levels[j]).length) {
- break;
- }
- }
- seg.level = j;
- (levels[j] || (levels[j] = [])).push(seg);
- }
- return levels;
- }
- // For every segment, figure out the other segments that are in subsequent
- // levels that also occupy the same vertical space. Accumulate in seg.forwardSegs
- function computeForwardSlotSegs(levels) {
- var i;
- var level;
- var j;
- var seg;
- var k;
- for (i = 0; i < levels.length; i++) {
- level = levels[i];
- for (j = 0; j < level.length; j++) {
- seg = level[j];
- seg.forwardSegs = [];
- for (k = i + 1; k < levels.length; k++) {
- computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);
- }
- }
- }
- }
- // Figure out which path forward (via seg.forwardSegs) results in the longest path until
- // the furthest edge is reached. The number of segments in this path will be seg.forwardPressure
- function computeSlotSegPressures(seg) {
- var forwardSegs = seg.forwardSegs;
- var forwardPressure = 0;
- var i;
- var forwardSeg;
- if (seg.forwardPressure === undefined) { // not already computed
- for (i = 0; i < forwardSegs.length; i++) {
- forwardSeg = forwardSegs[i];
- // figure out the child's maximum forward path
- computeSlotSegPressures(forwardSeg);
- // either use the existing maximum, or use the child's forward pressure
- // plus one (for the forwardSeg itself)
- forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);
- }
- seg.forwardPressure = forwardPressure;
- }
- }
- // Find all the segments in `otherSegs` that vertically collide with `seg`.
- // Append into an optionally-supplied `results` array and return.
- function computeSlotSegCollisions(seg, otherSegs, results) {
- if (results === void 0) { results = []; }
- for (var i = 0; i < otherSegs.length; i++) {
- if (isSlotSegCollision(seg, otherSegs[i])) {
- results.push(otherSegs[i]);
- }
- }
- return results;
- }
- // Do these segments occupy the same vertical space?
- function isSlotSegCollision(seg1, seg2) {
- return seg1.bottom > seg2.top && seg1.top < seg2.bottom;
- }
- function buildTimeGridSegCompareObj(seg) {
- var obj = core.buildSegCompareObj(seg);
- obj.forwardPressure = seg.forwardPressure;
- obj.backwardCoord = seg.backwardCoord;
- return obj;
- }
-
- var TimeGridMirrorRenderer = /** @class */ (function (_super) {
- __extends(TimeGridMirrorRenderer, _super);
- function TimeGridMirrorRenderer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeGridMirrorRenderer.prototype.attachSegs = function (segs, mirrorInfo) {
- this.segsByCol = this.timeGrid.groupSegsByCol(segs);
- this.timeGrid.attachSegsByCol(this.segsByCol, this.timeGrid.mirrorContainerEls);
- this.sourceSeg = mirrorInfo.sourceSeg;
- };
- TimeGridMirrorRenderer.prototype.generateSegCss = function (seg) {
- var props = _super.prototype.generateSegCss.call(this, seg);
- var sourceSeg = this.sourceSeg;
- if (sourceSeg && sourceSeg.col === seg.col) {
- var sourceSegProps = _super.prototype.generateSegCss.call(this, sourceSeg);
- props.left = sourceSegProps.left;
- props.right = sourceSegProps.right;
- props.marginLeft = sourceSegProps.marginLeft;
- props.marginRight = sourceSegProps.marginRight;
- }
- return props;
- };
- return TimeGridMirrorRenderer;
- }(TimeGridEventRenderer));
-
- var TimeGridFillRenderer = /** @class */ (function (_super) {
- __extends(TimeGridFillRenderer, _super);
- function TimeGridFillRenderer(timeGrid) {
- var _this = _super.call(this) || this;
- _this.timeGrid = timeGrid;
- return _this;
- }
- TimeGridFillRenderer.prototype.attachSegs = function (type, segs) {
- var timeGrid = this.timeGrid;
- var containerEls;
- // TODO: more efficient lookup
- if (type === 'bgEvent') {
- containerEls = timeGrid.bgContainerEls;
- }
- else if (type === 'businessHours') {
- containerEls = timeGrid.businessContainerEls;
- }
- else if (type === 'highlight') {
- containerEls = timeGrid.highlightContainerEls;
- }
- timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);
- return segs.map(function (seg) {
- return seg.el;
- });
- };
- TimeGridFillRenderer.prototype.computeSegSizes = function (segs) {
- this.timeGrid.computeSegVerticals(segs);
- };
- TimeGridFillRenderer.prototype.assignSegSizes = function (segs) {
- this.timeGrid.assignSegVerticals(segs);
- };
- return TimeGridFillRenderer;
- }(core.FillRenderer));
-
- /* A component that renders one or more columns of vertical time slots
- ----------------------------------------------------------------------------------------------------------------------*/
- // potential nice values for the slot-duration and interval-duration
- // from largest to smallest
- var AGENDA_STOCK_SUB_DURATIONS = [
- { hours: 1 },
- { minutes: 30 },
- { minutes: 15 },
- { seconds: 30 },
- { seconds: 15 }
- ];
- var TimeGrid = /** @class */ (function (_super) {
- __extends(TimeGrid, _super);
- function TimeGrid(el, renderProps) {
- var _this = _super.call(this, el) || this;
- _this.isSlatSizesDirty = false;
- _this.isColSizesDirty = false;
- _this.processOptions = core.memoize(_this._processOptions);
- _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton);
- _this.renderSlats = core.memoizeRendering(_this._renderSlats, null, [_this.renderSkeleton]);
- _this.renderColumns = core.memoizeRendering(_this._renderColumns, _this._unrenderColumns, [_this.renderSkeleton]);
- _this.renderProps = renderProps;
- var renderColumns = _this.renderColumns;
- var eventRenderer = _this.eventRenderer = new TimeGridEventRenderer(_this);
- var fillRenderer = _this.fillRenderer = new TimeGridFillRenderer(_this);
- _this.mirrorRenderer = new TimeGridMirrorRenderer(_this);
- _this.renderBusinessHours = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'businessHours'), fillRenderer.unrender.bind(fillRenderer, 'businessHours'), [renderColumns]);
- _this.renderDateSelection = core.memoizeRendering(_this._renderDateSelection, _this._unrenderDateSelection, [renderColumns]);
- _this.renderFgEvents = core.memoizeRendering(eventRenderer.renderSegs.bind(eventRenderer), eventRenderer.unrender.bind(eventRenderer), [renderColumns]);
- _this.renderBgEvents = core.memoizeRendering(fillRenderer.renderSegs.bind(fillRenderer, 'bgEvent'), fillRenderer.unrender.bind(fillRenderer, 'bgEvent'), [renderColumns]);
- _this.renderEventSelection = core.memoizeRendering(eventRenderer.selectByInstanceId.bind(eventRenderer), eventRenderer.unselectByInstanceId.bind(eventRenderer), [_this.renderFgEvents]);
- _this.renderEventDrag = core.memoizeRendering(_this._renderEventDrag, _this._unrenderEventDrag, [renderColumns]);
- _this.renderEventResize = core.memoizeRendering(_this._renderEventResize, _this._unrenderEventResize, [renderColumns]);
- return _this;
- }
- /* Options
- ------------------------------------------------------------------------------------------------------------------*/
- // Parses various options into properties of this object
- // MUST have context already set
- TimeGrid.prototype._processOptions = function (options) {
- var slotDuration = options.slotDuration, snapDuration = options.snapDuration;
- var snapsPerSlot;
- var input;
- slotDuration = core.createDuration(slotDuration);
- snapDuration = snapDuration ? core.createDuration(snapDuration) : slotDuration;
- snapsPerSlot = core.wholeDivideDurations(slotDuration, snapDuration);
- if (snapsPerSlot === null) {
- snapDuration = slotDuration;
- snapsPerSlot = 1;
- // TODO: say warning?
- }
- this.slotDuration = slotDuration;
- this.snapDuration = snapDuration;
- this.snapsPerSlot = snapsPerSlot;
- // might be an array value (for TimelineView).
- // if so, getting the most granular entry (the last one probably).
- input = options.slotLabelFormat;
- if (Array.isArray(input)) {
- input = input[input.length - 1];
- }
- this.labelFormat = core.createFormatter(input || {
- hour: 'numeric',
- minute: '2-digit',
- omitZeroMinute: true,
- meridiem: 'short'
- });
- input = options.slotLabelInterval;
- this.labelInterval = input ?
- core.createDuration(input) :
- this.computeLabelInterval(slotDuration);
- };
- // Computes an automatic value for slotLabelInterval
- TimeGrid.prototype.computeLabelInterval = function (slotDuration) {
- var i;
- var labelInterval;
- var slotsPerLabel;
- // find the smallest stock label interval that results in more than one slots-per-label
- for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {
- labelInterval = core.createDuration(AGENDA_STOCK_SUB_DURATIONS[i]);
- slotsPerLabel = core.wholeDivideDurations(labelInterval, slotDuration);
- if (slotsPerLabel !== null && slotsPerLabel > 1) {
- return labelInterval;
- }
- }
- return slotDuration; // fall back
- };
- /* Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.render = function (props, context) {
- this.processOptions(context.options);
- var cells = props.cells;
- this.colCnt = cells.length;
- this.renderSkeleton(context.theme);
- this.renderSlats(props.dateProfile);
- this.renderColumns(props.cells, props.dateProfile);
- this.renderBusinessHours(context, props.businessHourSegs);
- this.renderDateSelection(props.dateSelectionSegs);
- this.renderFgEvents(context, props.fgEventSegs);
- this.renderBgEvents(context, props.bgEventSegs);
- this.renderEventSelection(props.eventSelection);
- this.renderEventDrag(props.eventDrag);
- this.renderEventResize(props.eventResize);
- };
- TimeGrid.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- // should unrender everything else too
- this.renderSlats.unrender();
- this.renderColumns.unrender();
- this.renderSkeleton.unrender();
- };
- TimeGrid.prototype.updateSize = function (isResize) {
- var _a = this, fillRenderer = _a.fillRenderer, eventRenderer = _a.eventRenderer, mirrorRenderer = _a.mirrorRenderer;
- if (isResize || this.isSlatSizesDirty) {
- this.buildSlatPositions();
- this.isSlatSizesDirty = false;
- }
- if (isResize || this.isColSizesDirty) {
- this.buildColPositions();
- this.isColSizesDirty = false;
- }
- fillRenderer.computeSizes(isResize);
- eventRenderer.computeSizes(isResize);
- mirrorRenderer.computeSizes(isResize);
- fillRenderer.assignSizes(isResize);
- eventRenderer.assignSizes(isResize);
- mirrorRenderer.assignSizes(isResize);
- };
- TimeGrid.prototype._renderSkeleton = function (theme) {
- var el = this.el;
- el.innerHTML =
- '<div class="fc-bg"></div>' +
- '<div class="fc-slats"></div>' +
- '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" style="display:none" />';
- this.rootBgContainerEl = el.querySelector('.fc-bg');
- this.slatContainerEl = el.querySelector('.fc-slats');
- this.bottomRuleEl = el.querySelector('.fc-divider');
- };
- TimeGrid.prototype._renderSlats = function (dateProfile) {
- var theme = this.context.theme;
- this.slatContainerEl.innerHTML =
- '<table class="' + theme.getClass('tableGrid') + '">' +
- this.renderSlatRowHtml(dateProfile) +
- '</table>';
- this.slatEls = core.findElements(this.slatContainerEl, 'tr');
- this.slatPositions = new core.PositionCache(this.el, this.slatEls, false, true // vertical
- );
- this.isSlatSizesDirty = true;
- };
- // Generates the HTML for the horizontal "slats" that run width-wise. Has a time axis on a side. Depends on RTL.
- TimeGrid.prototype.renderSlatRowHtml = function (dateProfile) {
- var _a = this.context, dateEnv = _a.dateEnv, theme = _a.theme, isRtl = _a.isRtl;
- var html = '';
- var dayStart = core.startOfDay(dateProfile.renderRange.start);
- var slotTime = dateProfile.minTime;
- var slotIterator = core.createDuration(0);
- var slotDate; // will be on the view's first day, but we only care about its time
- var isLabeled;
- var axisHtml;
- // Calculate the time for each slot
- while (core.asRoughMs(slotTime) < core.asRoughMs(dateProfile.maxTime)) {
- slotDate = dateEnv.add(dayStart, slotTime);
- isLabeled = core.wholeDivideDurations(slotIterator, this.labelInterval) !== null;
- axisHtml =
- '<td class="fc-axis fc-time ' + theme.getClass('widgetContent') + '">' +
- (isLabeled ?
- '<span>' + // for matchCellWidths
- core.htmlEscape(dateEnv.format(slotDate, this.labelFormat)) +
- '</span>' :
- '') +
- '</td>';
- html +=
- '<tr data-time="' + core.formatIsoTimeString(slotDate) + '"' +
- (isLabeled ? '' : ' class="fc-minor"') +
- '>' +
- (!isRtl ? axisHtml : '') +
- '<td class="' + theme.getClass('widgetContent') + '"></td>' +
- (isRtl ? axisHtml : '') +
- '</tr>';
- slotTime = core.addDurations(slotTime, this.slotDuration);
- slotIterator = core.addDurations(slotIterator, this.slotDuration);
- }
- return html;
- };
- TimeGrid.prototype._renderColumns = function (cells, dateProfile) {
- var _a = this.context, calendar = _a.calendar, view = _a.view, isRtl = _a.isRtl, theme = _a.theme, dateEnv = _a.dateEnv;
- var bgRow = new daygrid.DayBgRow(this.context);
- this.rootBgContainerEl.innerHTML =
- '<table class="' + theme.getClass('tableGrid') + '">' +
- bgRow.renderHtml({
- cells: cells,
- dateProfile: dateProfile,
- renderIntroHtml: this.renderProps.renderBgIntroHtml
- }) +
- '</table>';
- this.colEls = core.findElements(this.el, '.fc-day, .fc-disabled-day');
- for (var col = 0; col < this.colCnt; col++) {
- calendar.publiclyTrigger('dayRender', [
- {
- date: dateEnv.toDate(cells[col].date),
- el: this.colEls[col],
- view: view
- }
- ]);
- }
- if (isRtl) {
- this.colEls.reverse();
- }
- this.colPositions = new core.PositionCache(this.el, this.colEls, true, // horizontal
- false);
- this.renderContentSkeleton();
- this.isColSizesDirty = true;
- };
- TimeGrid.prototype._unrenderColumns = function () {
- this.unrenderContentSkeleton();
- };
- /* Content Skeleton
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders the DOM that the view's content will live in
- TimeGrid.prototype.renderContentSkeleton = function () {
- var isRtl = this.context.isRtl;
- var parts = [];
- var skeletonEl;
- parts.push(this.renderProps.renderIntroHtml());
- for (var i = 0; i < this.colCnt; i++) {
- parts.push('<td>' +
- '<div class="fc-content-col">' +
- '<div class="fc-event-container fc-mirror-container"></div>' +
- '<div class="fc-event-container"></div>' +
- '<div class="fc-highlight-container"></div>' +
- '<div class="fc-bgevent-container"></div>' +
- '<div class="fc-business-container"></div>' +
- '</div>' +
- '</td>');
- }
- if (isRtl) {
- parts.reverse();
- }
- skeletonEl = this.contentSkeletonEl = core.htmlToElement('<div class="fc-content-skeleton">' +
- '<table>' +
- '<tr>' + parts.join('') + '</tr>' +
- '</table>' +
- '</div>');
- this.colContainerEls = core.findElements(skeletonEl, '.fc-content-col');
- this.mirrorContainerEls = core.findElements(skeletonEl, '.fc-mirror-container');
- this.fgContainerEls = core.findElements(skeletonEl, '.fc-event-container:not(.fc-mirror-container)');
- this.bgContainerEls = core.findElements(skeletonEl, '.fc-bgevent-container');
- this.highlightContainerEls = core.findElements(skeletonEl, '.fc-highlight-container');
- this.businessContainerEls = core.findElements(skeletonEl, '.fc-business-container');
- if (isRtl) {
- this.colContainerEls.reverse();
- this.mirrorContainerEls.reverse();
- this.fgContainerEls.reverse();
- this.bgContainerEls.reverse();
- this.highlightContainerEls.reverse();
- this.businessContainerEls.reverse();
- }
- this.el.appendChild(skeletonEl);
- };
- TimeGrid.prototype.unrenderContentSkeleton = function () {
- core.removeElement(this.contentSkeletonEl);
- };
- // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col
- TimeGrid.prototype.groupSegsByCol = function (segs) {
- var segsByCol = [];
- var i;
- for (i = 0; i < this.colCnt; i++) {
- segsByCol.push([]);
- }
- for (i = 0; i < segs.length; i++) {
- segsByCol[segs[i].col].push(segs[i]);
- }
- return segsByCol;
- };
- // Given segments grouped by column, insert the segments' elements into a parallel array of container
- // elements, each living within a column.
- TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {
- var col;
- var segs;
- var i;
- for (col = 0; col < this.colCnt; col++) { // iterate each column grouping
- segs = segsByCol[col];
- for (i = 0; i < segs.length; i++) {
- containerEls[col].appendChild(segs[i].el);
- }
- }
- };
- /* Now Indicator
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.getNowIndicatorUnit = function () {
- return 'minute'; // will refresh on the minute
- };
- TimeGrid.prototype.renderNowIndicator = function (segs, date) {
- // HACK: if date columns not ready for some reason (scheduler)
- if (!this.colContainerEls) {
- return;
- }
- var top = this.computeDateTop(date);
- var nodes = [];
- var i;
- // render lines within the columns
- for (i = 0; i < segs.length; i++) {
- var lineEl = core.createElement('div', { className: 'fc-now-indicator fc-now-indicator-line' });
- lineEl.style.top = top + 'px';
- this.colContainerEls[segs[i].col].appendChild(lineEl);
- nodes.push(lineEl);
- }
- // render an arrow over the axis
- if (segs.length > 0) { // is the current time in view?
- var arrowEl = core.createElement('div', { className: 'fc-now-indicator fc-now-indicator-arrow' });
- arrowEl.style.top = top + 'px';
- this.contentSkeletonEl.appendChild(arrowEl);
- nodes.push(arrowEl);
- }
- this.nowIndicatorEls = nodes;
- };
- TimeGrid.prototype.unrenderNowIndicator = function () {
- if (this.nowIndicatorEls) {
- this.nowIndicatorEls.forEach(core.removeElement);
- this.nowIndicatorEls = null;
- }
- };
- /* Coordinates
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.getTotalSlatHeight = function () {
- return this.slatContainerEl.getBoundingClientRect().height;
- };
- // Computes the top coordinate, relative to the bounds of the grid, of the given date.
- // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.
- TimeGrid.prototype.computeDateTop = function (when, startOfDayDate) {
- if (!startOfDayDate) {
- startOfDayDate = core.startOfDay(when);
- }
- return this.computeTimeTop(core.createDuration(when.valueOf() - startOfDayDate.valueOf()));
- };
- // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).
- TimeGrid.prototype.computeTimeTop = function (duration) {
- var len = this.slatEls.length;
- var dateProfile = this.props.dateProfile;
- var slatCoverage = (duration.milliseconds - core.asRoughMs(dateProfile.minTime)) / core.asRoughMs(this.slotDuration); // floating-point value of # of slots covered
- var slatIndex;
- var slatRemainder;
- // compute a floating-point number for how many slats should be progressed through.
- // from 0 to number of slats (inclusive)
- // constrained because minTime/maxTime might be customized.
- slatCoverage = Math.max(0, slatCoverage);
- slatCoverage = Math.min(len, slatCoverage);
- // an integer index of the furthest whole slat
- // from 0 to number slats (*exclusive*, so len-1)
- slatIndex = Math.floor(slatCoverage);
- slatIndex = Math.min(slatIndex, len - 1);
- // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.
- // could be 1.0 if slatCoverage is covering *all* the slots
- slatRemainder = slatCoverage - slatIndex;
- return this.slatPositions.tops[slatIndex] +
- this.slatPositions.getHeight(slatIndex) * slatRemainder;
- };
- // For each segment in an array, computes and assigns its top and bottom properties
- TimeGrid.prototype.computeSegVerticals = function (segs) {
- var options = this.context.options;
- var eventMinHeight = options.timeGridEventMinHeight;
- var i;
- var seg;
- var dayDate;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- dayDate = this.props.cells[seg.col].date;
- seg.top = this.computeDateTop(seg.start, dayDate);
- seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.end, dayDate));
- }
- };
- // Given segments that already have their top/bottom properties computed, applies those values to
- // the segments' elements.
- TimeGrid.prototype.assignSegVerticals = function (segs) {
- var i;
- var seg;
- for (i = 0; i < segs.length; i++) {
- seg = segs[i];
- core.applyStyle(seg.el, this.generateSegVerticalCss(seg));
- }
- };
- // Generates an object with CSS properties for the top/bottom coordinates of a segment element
- TimeGrid.prototype.generateSegVerticalCss = function (seg) {
- return {
- top: seg.top,
- bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container
- };
- };
- /* Sizing
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.buildPositionCaches = function () {
- this.buildColPositions();
- this.buildSlatPositions();
- };
- TimeGrid.prototype.buildColPositions = function () {
- this.colPositions.build();
- };
- TimeGrid.prototype.buildSlatPositions = function () {
- this.slatPositions.build();
- };
- /* Hit System
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype.positionToHit = function (positionLeft, positionTop) {
- var dateEnv = this.context.dateEnv;
- var _a = this, snapsPerSlot = _a.snapsPerSlot, slatPositions = _a.slatPositions, colPositions = _a.colPositions;
- var colIndex = colPositions.leftToIndex(positionLeft);
- var slatIndex = slatPositions.topToIndex(positionTop);
- if (colIndex != null && slatIndex != null) {
- var slatTop = slatPositions.tops[slatIndex];
- var slatHeight = slatPositions.getHeight(slatIndex);
- var partial = (positionTop - slatTop) / slatHeight; // floating point number between 0 and 1
- var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat
- var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;
- var dayDate = this.props.cells[colIndex].date;
- var time = core.addDurations(this.props.dateProfile.minTime, core.multiplyDuration(this.snapDuration, snapIndex));
- var start = dateEnv.add(dayDate, time);
- var end = dateEnv.add(start, this.snapDuration);
- return {
- col: colIndex,
- dateSpan: {
- range: { start: start, end: end },
- allDay: false
- },
- dayEl: this.colEls[colIndex],
- relativeRect: {
- left: colPositions.lefts[colIndex],
- right: colPositions.rights[colIndex],
- top: slatTop,
- bottom: slatTop + slatHeight
- }
- };
- }
- };
- /* Event Drag Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype._renderEventDrag = function (state) {
- if (state) {
- this.eventRenderer.hideByHash(state.affectedInstances);
- if (state.isEvent) {
- this.mirrorRenderer.renderSegs(this.context, state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
- }
- else {
- this.fillRenderer.renderSegs('highlight', this.context, state.segs);
- }
- }
- };
- TimeGrid.prototype._unrenderEventDrag = function (state) {
- if (state) {
- this.eventRenderer.showByHash(state.affectedInstances);
- if (state.isEvent) {
- this.mirrorRenderer.unrender(this.context, state.segs, { isDragging: true, sourceSeg: state.sourceSeg });
- }
- else {
- this.fillRenderer.unrender('highlight', this.context);
- }
- }
- };
- /* Event Resize Visualization
- ------------------------------------------------------------------------------------------------------------------*/
- TimeGrid.prototype._renderEventResize = function (state) {
- if (state) {
- this.eventRenderer.hideByHash(state.affectedInstances);
- this.mirrorRenderer.renderSegs(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
- }
- };
- TimeGrid.prototype._unrenderEventResize = function (state) {
- if (state) {
- this.eventRenderer.showByHash(state.affectedInstances);
- this.mirrorRenderer.unrender(this.context, state.segs, { isResizing: true, sourceSeg: state.sourceSeg });
- }
- };
- /* Selection
- ------------------------------------------------------------------------------------------------------------------*/
- // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.
- TimeGrid.prototype._renderDateSelection = function (segs) {
- if (segs) {
- if (this.context.options.selectMirror) {
- this.mirrorRenderer.renderSegs(this.context, segs, { isSelecting: true });
- }
- else {
- this.fillRenderer.renderSegs('highlight', this.context, segs);
- }
- }
- };
- TimeGrid.prototype._unrenderDateSelection = function (segs) {
- if (segs) {
- if (this.context.options.selectMirror) {
- this.mirrorRenderer.unrender(this.context, segs, { isSelecting: true });
- }
- else {
- this.fillRenderer.unrender('highlight', this.context);
- }
- }
- };
- return TimeGrid;
- }(core.DateComponent));
-
- var AllDaySplitter = /** @class */ (function (_super) {
- __extends(AllDaySplitter, _super);
- function AllDaySplitter() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- AllDaySplitter.prototype.getKeyInfo = function () {
- return {
- allDay: {},
- timed: {}
- };
- };
- AllDaySplitter.prototype.getKeysForDateSpan = function (dateSpan) {
- if (dateSpan.allDay) {
- return ['allDay'];
- }
- else {
- return ['timed'];
- }
- };
- AllDaySplitter.prototype.getKeysForEventDef = function (eventDef) {
- if (!eventDef.allDay) {
- return ['timed'];
- }
- else if (core.hasBgRendering(eventDef)) {
- return ['timed', 'allDay'];
- }
- else {
- return ['allDay'];
- }
- };
- return AllDaySplitter;
- }(core.Splitter));
-
- var TIMEGRID_ALL_DAY_EVENT_LIMIT = 5;
- var WEEK_HEADER_FORMAT = core.createFormatter({ week: 'short' });
- /* An abstract class for all timegrid-related views. Displays one more columns with time slots running vertically.
- ----------------------------------------------------------------------------------------------------------------------*/
- // Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).
- // Responsible for managing width/height.
- var AbstractTimeGridView = /** @class */ (function (_super) {
- __extends(AbstractTimeGridView, _super);
- function AbstractTimeGridView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.splitter = new AllDaySplitter();
- _this.renderSkeleton = core.memoizeRendering(_this._renderSkeleton, _this._unrenderSkeleton);
- /* Header Render Methods
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that will go before the day-of week header cells
- _this.renderHeadIntroHtml = function () {
- var _a = _this.context, theme = _a.theme, dateEnv = _a.dateEnv, options = _a.options;
- var range = _this.props.dateProfile.renderRange;
- var dayCnt = core.diffDays(range.start, range.end);
- var weekText;
- if (options.weekNumbers) {
- weekText = dateEnv.format(range.start, WEEK_HEADER_FORMAT);
- return '' +
- '<th class="fc-axis fc-week-number ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '>' +
- core.buildGotoAnchorHtml(// aside from link, important for matchCellWidths
- options, dateEnv, { date: range.start, type: 'week', forceOff: dayCnt > 1 }, core.htmlEscape(weekText) // inner HTML
- ) +
- '</th>';
- }
- else {
- return '<th class="fc-axis ' + theme.getClass('widgetHeader') + '" ' + _this.axisStyleAttr() + '></th>';
- }
- };
- /* Time Grid Render Methods
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.
- _this.renderTimeGridBgIntroHtml = function () {
- var theme = _this.context.theme;
- return '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '></td>';
- };
- // Generates the HTML that goes before all other types of cells.
- // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
- _this.renderTimeGridIntroHtml = function () {
- return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
- };
- /* Day Grid Render Methods
- ------------------------------------------------------------------------------------------------------------------*/
- // Generates the HTML that goes before the all-day cells
- _this.renderDayGridBgIntroHtml = function () {
- var _a = _this.context, theme = _a.theme, options = _a.options;
- return '' +
- '<td class="fc-axis ' + theme.getClass('widgetContent') + '" ' + _this.axisStyleAttr() + '>' +
- '<span>' + // needed for matchCellWidths
- core.getAllDayHtml(options) +
- '</span>' +
- '</td>';
- };
- // Generates the HTML that goes before all other types of cells.
- // Affects content-skeleton, mirror-skeleton, highlight-skeleton for both the time-grid and day-grid.
- _this.renderDayGridIntroHtml = function () {
- return '<td class="fc-axis" ' + _this.axisStyleAttr() + '></td>';
- };
- return _this;
- }
- AbstractTimeGridView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context);
- this.renderSkeleton(context);
- };
- AbstractTimeGridView.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.renderSkeleton.unrender();
- };
- AbstractTimeGridView.prototype._renderSkeleton = function (context) {
- this.el.classList.add('fc-timeGrid-view');
- this.el.innerHTML = this.renderSkeletonHtml();
- this.scroller = new core.ScrollComponent('hidden', // overflow x
- 'auto' // overflow y
- );
- var timeGridWrapEl = this.scroller.el;
- this.el.querySelector('.fc-body > tr > td').appendChild(timeGridWrapEl);
- timeGridWrapEl.classList.add('fc-time-grid-container');
- var timeGridEl = core.createElement('div', { className: 'fc-time-grid' });
- timeGridWrapEl.appendChild(timeGridEl);
- this.timeGrid = new TimeGrid(timeGridEl, {
- renderBgIntroHtml: this.renderTimeGridBgIntroHtml,
- renderIntroHtml: this.renderTimeGridIntroHtml
- });
- if (context.options.allDaySlot) { // should we display the "all-day" area?
- this.dayGrid = new daygrid.DayGrid(// the all-day subcomponent of this view
- this.el.querySelector('.fc-day-grid'), {
- renderNumberIntroHtml: this.renderDayGridIntroHtml,
- renderBgIntroHtml: this.renderDayGridBgIntroHtml,
- renderIntroHtml: this.renderDayGridIntroHtml,
- colWeekNumbersVisible: false,
- cellWeekNumbersVisible: false
- });
- // have the day-grid extend it's coordinate area over the <hr> dividing the two grids
- var dividerEl = this.el.querySelector('.fc-divider');
- this.dayGrid.bottomCoordPadding = dividerEl.getBoundingClientRect().height;
- }
- };
- AbstractTimeGridView.prototype._unrenderSkeleton = function () {
- this.el.classList.remove('fc-timeGrid-view');
- this.timeGrid.destroy();
- if (this.dayGrid) {
- this.dayGrid.destroy();
- }
- this.scroller.destroy();
- };
- /* Rendering
- ------------------------------------------------------------------------------------------------------------------*/
- // Builds the HTML skeleton for the view.
- // The day-grid and time-grid components will render inside containers defined by this HTML.
- AbstractTimeGridView.prototype.renderSkeletonHtml = function () {
- var _a = this.context, theme = _a.theme, options = _a.options;
- return '' +
- '<table class="' + theme.getClass('tableGrid') + '">' +
- (options.columnHeader ?
- '<thead class="fc-head">' +
- '<tr>' +
- '<td class="fc-head-container ' + theme.getClass('widgetHeader') + '">&nbsp;</td>' +
- '</tr>' +
- '</thead>' :
- '') +
- '<tbody class="fc-body">' +
- '<tr>' +
- '<td class="' + theme.getClass('widgetContent') + '">' +
- (options.allDaySlot ?
- '<div class="fc-day-grid"></div>' +
- '<hr class="fc-divider ' + theme.getClass('widgetHeader') + '" />' :
- '') +
- '</td>' +
- '</tr>' +
- '</tbody>' +
- '</table>';
- };
- /* Now Indicator
- ------------------------------------------------------------------------------------------------------------------*/
- AbstractTimeGridView.prototype.getNowIndicatorUnit = function () {
- return this.timeGrid.getNowIndicatorUnit();
- };
- // subclasses should implement
- // renderNowIndicator(date: DateMarker) {
- // }
- AbstractTimeGridView.prototype.unrenderNowIndicator = function () {
- this.timeGrid.unrenderNowIndicator();
- };
- /* Dimensions
- ------------------------------------------------------------------------------------------------------------------*/
- AbstractTimeGridView.prototype.updateSize = function (isResize, viewHeight, isAuto) {
- _super.prototype.updateSize.call(this, isResize, viewHeight, isAuto); // will call updateBaseSize. important that executes first
- this.timeGrid.updateSize(isResize);
- if (this.dayGrid) {
- this.dayGrid.updateSize(isResize);
- }
- };
- // Adjusts the vertical dimensions of the view to the specified values
- AbstractTimeGridView.prototype.updateBaseSize = function (isResize, viewHeight, isAuto) {
- var _this = this;
- var eventLimit;
- var scrollerHeight;
- var scrollbarWidths;
- // make all axis cells line up
- this.axisWidth = core.matchCellWidths(core.findElements(this.el, '.fc-axis'));
- // hack to give the view some height prior to timeGrid's columns being rendered
- // TODO: separate setting height from scroller VS timeGrid.
- if (!this.timeGrid.colEls) {
- if (!isAuto) {
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- return;
- }
- // set of fake row elements that must compensate when scroller has scrollbars
- var noScrollRowEls = core.findElements(this.el, '.fc-row').filter(function (node) {
- return !_this.scroller.el.contains(node);
- });
- // reset all dimensions back to the original state
- this.timeGrid.bottomRuleEl.style.display = 'none'; // will be shown later if this <hr> is necessary
- this.scroller.clear(); // sets height to 'auto' and clears overflow
- noScrollRowEls.forEach(core.uncompensateScroll);
- // limit number of events in the all-day area
- if (this.dayGrid) {
- this.dayGrid.removeSegPopover(); // kill the "more" popover if displayed
- eventLimit = this.context.options.eventLimit;
- if (eventLimit && typeof eventLimit !== 'number') {
- eventLimit = TIMEGRID_ALL_DAY_EVENT_LIMIT; // make sure "auto" goes to a real number
- }
- if (eventLimit) {
- this.dayGrid.limitRows(eventLimit);
- }
- }
- if (!isAuto) { // should we force dimensions of the scroll container?
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- scrollbarWidths = this.scroller.getScrollbarWidths();
- if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?
- // make the all-day and header rows lines up
- noScrollRowEls.forEach(function (rowEl) {
- core.compensateScroll(rowEl, scrollbarWidths);
- });
- // the scrollbar compensation might have changed text flow, which might affect height, so recalculate
- // and reapply the desired height to the scroller.
- scrollerHeight = this.computeScrollerHeight(viewHeight);
- this.scroller.setHeight(scrollerHeight);
- }
- // guarantees the same scrollbar widths
- this.scroller.lockOverflow(scrollbarWidths);
- // if there's any space below the slats, show the horizontal rule.
- // this won't cause any new overflow, because lockOverflow already called.
- if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {
- this.timeGrid.bottomRuleEl.style.display = '';
- }
- }
- };
- // given a desired total height of the view, returns what the height of the scroller should be
- AbstractTimeGridView.prototype.computeScrollerHeight = function (viewHeight) {
- return viewHeight -
- core.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller
- };
- /* Scroll
- ------------------------------------------------------------------------------------------------------------------*/
- // Computes the initial pre-configured scroll state prior to allowing the user to change it
- AbstractTimeGridView.prototype.computeDateScroll = function (duration) {
- var top = this.timeGrid.computeTimeTop(duration);
- // zoom can give weird floating-point values. rather scroll a little bit further
- top = Math.ceil(top);
- if (top) {
- top++; // to overcome top border that slots beyond the first have. looks better
- }
- return { top: top };
- };
- AbstractTimeGridView.prototype.queryDateScroll = function () {
- return { top: this.scroller.getScrollTop() };
- };
- AbstractTimeGridView.prototype.applyDateScroll = function (scroll) {
- if (scroll.top !== undefined) {
- this.scroller.setScrollTop(scroll.top);
- }
- };
- // Generates an HTML attribute string for setting the width of the axis, if it is known
- AbstractTimeGridView.prototype.axisStyleAttr = function () {
- if (this.axisWidth != null) {
- return 'style="width:' + this.axisWidth + 'px"';
- }
- return '';
- };
- return AbstractTimeGridView;
- }(core.View));
- AbstractTimeGridView.prototype.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering
-
- var SimpleTimeGrid = /** @class */ (function (_super) {
- __extends(SimpleTimeGrid, _super);
- function SimpleTimeGrid(timeGrid) {
- var _this = _super.call(this, timeGrid.el) || this;
- _this.buildDayRanges = core.memoize(buildDayRanges);
- _this.slicer = new TimeGridSlicer();
- _this.timeGrid = timeGrid;
- return _this;
- }
- SimpleTimeGrid.prototype.firstContext = function (context) {
- context.calendar.registerInteractiveComponent(this, {
- el: this.timeGrid.el
- });
- };
- SimpleTimeGrid.prototype.destroy = function () {
- _super.prototype.destroy.call(this);
- this.context.calendar.unregisterInteractiveComponent(this);
- };
- SimpleTimeGrid.prototype.render = function (props, context) {
- var dateEnv = this.context.dateEnv;
- var dateProfile = props.dateProfile, dayTable = props.dayTable;
- var dayRanges = this.dayRanges = this.buildDayRanges(dayTable, dateProfile, dateEnv);
- var timeGrid = this.timeGrid;
- timeGrid.receiveContext(context); // hack because context is used in sliceProps
- timeGrid.receiveProps(__assign({}, this.slicer.sliceProps(props, dateProfile, null, context.calendar, timeGrid, dayRanges), { dateProfile: dateProfile, cells: dayTable.cells[0] }), context);
- };
- SimpleTimeGrid.prototype.renderNowIndicator = function (date) {
- this.timeGrid.renderNowIndicator(this.slicer.sliceNowDate(date, this.timeGrid, this.dayRanges), date);
- };
- SimpleTimeGrid.prototype.buildPositionCaches = function () {
- this.timeGrid.buildPositionCaches();
- };
- SimpleTimeGrid.prototype.queryHit = function (positionLeft, positionTop) {
- var rawHit = this.timeGrid.positionToHit(positionLeft, positionTop);
- if (rawHit) {
- return {
- component: this.timeGrid,
- dateSpan: rawHit.dateSpan,
- dayEl: rawHit.dayEl,
- rect: {
- left: rawHit.relativeRect.left,
- right: rawHit.relativeRect.right,
- top: rawHit.relativeRect.top,
- bottom: rawHit.relativeRect.bottom
- },
- layer: 0
- };
- }
- };
- return SimpleTimeGrid;
- }(core.DateComponent));
- function buildDayRanges(dayTable, dateProfile, dateEnv) {
- var ranges = [];
- for (var _i = 0, _a = dayTable.headerDates; _i < _a.length; _i++) {
- var date = _a[_i];
- ranges.push({
- start: dateEnv.add(date, dateProfile.minTime),
- end: dateEnv.add(date, dateProfile.maxTime)
- });
- }
- return ranges;
- }
- var TimeGridSlicer = /** @class */ (function (_super) {
- __extends(TimeGridSlicer, _super);
- function TimeGridSlicer() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- TimeGridSlicer.prototype.sliceRange = function (range, dayRanges) {
- var segs = [];
- for (var col = 0; col < dayRanges.length; col++) {
- var segRange = core.intersectRanges(range, dayRanges[col]);
- if (segRange) {
- segs.push({
- start: segRange.start,
- end: segRange.end,
- isStart: segRange.start.valueOf() === range.start.valueOf(),
- isEnd: segRange.end.valueOf() === range.end.valueOf(),
- col: col
- });
- }
- }
- return segs;
- };
- return TimeGridSlicer;
- }(core.Slicer));
-
- var TimeGridView = /** @class */ (function (_super) {
- __extends(TimeGridView, _super);
- function TimeGridView() {
- var _this = _super !== null && _super.apply(this, arguments) || this;
- _this.buildDayTable = core.memoize(buildDayTable);
- return _this;
- }
- TimeGridView.prototype.render = function (props, context) {
- _super.prototype.render.call(this, props, context); // for flags for updateSize. also _renderSkeleton/_unrenderSkeleton
- var _a = this.props, dateProfile = _a.dateProfile, dateProfileGenerator = _a.dateProfileGenerator;
- var nextDayThreshold = context.nextDayThreshold;
- var dayTable = this.buildDayTable(dateProfile, dateProfileGenerator);
- var splitProps = this.splitter.splitProps(props);
- if (this.header) {
- this.header.receiveProps({
- dateProfile: dateProfile,
- dates: dayTable.headerDates,
- datesRepDistinctDays: true,
- renderIntroHtml: this.renderHeadIntroHtml
- }, context);
- }
- this.simpleTimeGrid.receiveProps(__assign({}, splitProps['timed'], { dateProfile: dateProfile,
- dayTable: dayTable }), context);
- if (this.simpleDayGrid) {
- this.simpleDayGrid.receiveProps(__assign({}, splitProps['allDay'], { dateProfile: dateProfile,
- dayTable: dayTable,
- nextDayThreshold: nextDayThreshold, isRigid: false }), context);
- }
- this.startNowIndicator(dateProfile, dateProfileGenerator);
- };
- TimeGridView.prototype._renderSkeleton = function (context) {
- _super.prototype._renderSkeleton.call(this, context);
- if (context.options.columnHeader) {
- this.header = new core.DayHeader(this.el.querySelector('.fc-head-container'));
- }
- this.simpleTimeGrid = new SimpleTimeGrid(this.timeGrid);
- if (this.dayGrid) {
- this.simpleDayGrid = new daygrid.SimpleDayGrid(this.dayGrid);
- }
- };
- TimeGridView.prototype._unrenderSkeleton = function () {
- _super.prototype._unrenderSkeleton.call(this);
- if (this.header) {
- this.header.destroy();
- }
- this.simpleTimeGrid.destroy();
- if (this.simpleDayGrid) {
- this.simpleDayGrid.destroy();
- }
- };
- TimeGridView.prototype.renderNowIndicator = function (date) {
- this.simpleTimeGrid.renderNowIndicator(date);
- };
- return TimeGridView;
- }(AbstractTimeGridView));
- function buildDayTable(dateProfile, dateProfileGenerator) {
- var daySeries = new core.DaySeries(dateProfile.renderRange, dateProfileGenerator);
- return new core.DayTable(daySeries, false);
- }
-
- var main = core.createPlugin({
- defaultView: 'timeGridWeek',
- views: {
- timeGrid: {
- class: TimeGridView,
- allDaySlot: true,
- slotDuration: '00:30:00',
- slotEventOverlap: true // a bad name. confused with overlap/constraint system
- },
- timeGridDay: {
- type: 'timeGrid',
- duration: { days: 1 }
- },
- timeGridWeek: {
- type: 'timeGrid',
- duration: { weeks: 1 }
- }
- }
- });
-
- exports.AbstractTimeGridView = AbstractTimeGridView;
- exports.TimeGrid = TimeGrid;
- exports.TimeGridSlicer = TimeGridSlicer;
- exports.TimeGridView = TimeGridView;
- exports.buildDayRanges = buildDayRanges;
- exports.buildDayTable = buildDayTable;
- exports.default = main;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
diff --git a/library/fullcalendar/packages/timegrid/main.min.css b/library/fullcalendar/packages/timegrid/main.min.css
deleted file mode 100644
index a1abf91f5..000000000
--- a/library/fullcalendar/packages/timegrid/main.min.css
+++ /dev/null
@@ -1 +0,0 @@
-@charset "UTF-8";.fc-timeGrid-view .fc-day-grid{position:relative;z-index:2}.fc-timeGrid-view .fc-day-grid .fc-row{min-height:3em}.fc-timeGrid-view .fc-day-grid .fc-row .fc-content-skeleton{padding-bottom:1em}.fc .fc-axis{vertical-align:middle;padding:0 4px;white-space:nowrap}.fc-ltr .fc-axis{text-align:right}.fc-rtl .fc-axis{text-align:left}.fc-time-grid,.fc-time-grid-container{position:relative;z-index:1}.fc-time-grid{min-height:100%}.fc-time-grid table{border:0 hidden transparent}.fc-time-grid>.fc-bg{z-index:1}.fc-time-grid .fc-slats,.fc-time-grid>hr{position:relative;z-index:2}.fc-time-grid .fc-content-col{position:relative}.fc-time-grid .fc-content-skeleton{position:absolute;z-index:3;top:0;left:0;right:0}.fc-time-grid .fc-business-container{position:relative;z-index:1}.fc-time-grid .fc-bgevent-container{position:relative;z-index:2}.fc-time-grid .fc-highlight-container{z-index:3;position:relative}.fc-time-grid .fc-event-container{position:relative;z-index:4}.fc-time-grid .fc-now-indicator-line{z-index:5}.fc-time-grid .fc-mirror-container{position:relative;z-index:6}.fc-time-grid .fc-slats td{height:1.5em;border-bottom:0}.fc-time-grid .fc-slats .fc-minor td{border-top-style:dotted}.fc-time-grid .fc-highlight{position:absolute;left:0;right:0}.fc-ltr .fc-time-grid .fc-event-container{margin:0 2.5% 0 2px}.fc-rtl .fc-time-grid .fc-event-container{margin:0 2px 0 2.5%}.fc-time-grid .fc-bgevent,.fc-time-grid .fc-event{position:absolute;z-index:1}.fc-time-grid .fc-bgevent{left:0;right:0}.fc-time-grid-event{margin-bottom:1px}.fc-time-grid-event-inset{-webkit-box-shadow:0 0 0 1px #fff;box-shadow:0 0 0 1px #fff}.fc-time-grid-event.fc-not-start{border-top-width:0;padding-top:1px;border-top-left-radius:0;border-top-right-radius:0}.fc-time-grid-event.fc-not-end{border-bottom-width:0;padding-bottom:1px;border-bottom-left-radius:0;border-bottom-right-radius:0}.fc-time-grid-event .fc-content{overflow:hidden;max-height:100%}.fc-time-grid-event .fc-time,.fc-time-grid-event .fc-title{padding:0 1px}.fc-time-grid-event .fc-time{font-size:.85em;white-space:nowrap}.fc-time-grid-event.fc-short .fc-content{white-space:nowrap}.fc-time-grid-event.fc-short .fc-time,.fc-time-grid-event.fc-short .fc-title{display:inline-block;vertical-align:top}.fc-time-grid-event.fc-short .fc-time span{display:none}.fc-time-grid-event.fc-short .fc-time:before{content:attr(data-start)}.fc-time-grid-event.fc-short .fc-time:after{content:" - "}.fc-time-grid-event.fc-short .fc-title{font-size:.85em;padding:0}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer{left:0;right:0;bottom:0;height:8px;overflow:hidden;line-height:8px;font-size:11px;font-family:monospace;text-align:center;cursor:s-resize}.fc-time-grid-event.fc-allow-mouse-resize .fc-resizer:after{content:"="}.fc-time-grid-event.fc-selected .fc-resizer{border-radius:5px;border-width:1px;width:8px;height:8px;border-style:solid;border-color:inherit;background:#fff;left:50%;margin-left:-5px;bottom:-5px}.fc-time-grid .fc-now-indicator-line{border-top-width:1px;left:0;right:0}.fc-time-grid .fc-now-indicator-arrow{margin-top:-5px}.fc-ltr .fc-time-grid .fc-now-indicator-arrow{left:0;border-width:5px 0 5px 6px;border-top-color:transparent;border-bottom-color:transparent}.fc-rtl .fc-time-grid .fc-now-indicator-arrow{right:0;border-width:5px 6px 5px 0;border-top-color:transparent;border-bottom-color:transparent} \ No newline at end of file
diff --git a/library/fullcalendar/packages/timegrid/main.min.js b/library/fullcalendar/packages/timegrid/main.min.js
deleted file mode 100644
index 106940ffa..000000000
--- a/library/fullcalendar/packages/timegrid/main.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*!
-FullCalendar Time Grid Plugin v4.4.2
-Docs & License: https://fullcalendar.io/
-(c) 2019 Adam Shaw
-*/
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@fullcalendar/core"),require("@fullcalendar/daygrid")):"function"==typeof define&&define.amd?define(["exports","@fullcalendar/core","@fullcalendar/daygrid"],t):t((e=e||self).FullCalendarTimeGrid={},e.FullCalendar,e.FullCalendarDayGrid)}(this,(function(e,t,r){"use strict";var i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function n(e,t){function r(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var o=function(){return(o=Object.assign||function(e){for(var t,r=1,i=arguments.length;r<i;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)},s=function(e){function r(t){var r=e.call(this)||this;return r.timeGrid=t,r}return n(r,e),r.prototype.renderSegs=function(r,i,n){e.prototype.renderSegs.call(this,r,i,n),this.fullTimeFormat=t.createFormatter({hour:"numeric",minute:"2-digit",separator:this.context.options.defaultRangeSeparator})},r.prototype.attachSegs=function(e,t){for(var r=this.timeGrid.groupSegsByCol(e),i=0;i<r.length;i++)r[i]=this.sortEventSegs(r[i]);this.segsByCol=r,this.timeGrid.attachSegsByCol(r,this.timeGrid.fgContainerEls)},r.prototype.detachSegs=function(e){e.forEach((function(e){t.removeElement(e.el)})),this.segsByCol=null},r.prototype.computeSegSizes=function(e){var t=this.timeGrid,r=this.segsByCol,i=t.colCnt;if(t.computeSegVerticals(e),r)for(var n=0;n<i;n++)this.computeSegHorizontals(r[n])},r.prototype.assignSegSizes=function(e){var t=this.timeGrid,r=this.segsByCol,i=t.colCnt;if(t.assignSegVerticals(e),r)for(var n=0;n<i;n++)this.assignSegCss(r[n])},r.prototype.computeEventTimeFormat=function(){return{hour:"numeric",minute:"2-digit",meridiem:!1}},r.prototype.computeDisplayEventEnd=function(){return!0},r.prototype.renderSegHtml=function(e,r){var i,n,o,s=e.eventRange,a=s.def,l=s.ui,d=a.allDay,c=t.computeEventDraggable(this.context,a,l),h=e.isStart&&t.computeEventStartResizable(this.context,a,l),u=e.isEnd&&t.computeEventEndResizable(this.context,a,l),p=this.getSegClasses(e,c,h||u,r),f=t.cssToStr(this.getSkinCss(l));if(p.unshift("fc-time-grid-event"),t.isMultiDayRange(s.range)){if(e.isStart||e.isEnd){var g=e.start,m=e.end;i=this._getTimeText(g,m,d),n=this._getTimeText(g,m,d,this.fullTimeFormat),o=this._getTimeText(g,m,d,null,!1)}}else i=this.getTimeText(s),n=this.getTimeText(s,this.fullTimeFormat),o=this.getTimeText(s,null,!1);return'<a class="'+p.join(" ")+'"'+(a.url?' href="'+t.htmlEscape(a.url)+'"':"")+(f?' style="'+f+'"':"")+'><div class="fc-content">'+(i?'<div class="fc-time" data-start="'+t.htmlEscape(o)+'" data-full="'+t.htmlEscape(n)+'"><span>'+t.htmlEscape(i)+"</span></div>":"")+(a.title?'<div class="fc-title">'+t.htmlEscape(a.title)+"</div>":"")+"</div>"+(u?'<div class="fc-resizer fc-end-resizer"></div>':"")+"</a>"},r.prototype.computeSegHorizontals=function(e){var t,r,i;if(function(e){var t,r,i,n,o;for(t=0;t<e.length;t++)for(r=e[t],i=0;i<r.length;i++)for((n=r[i]).forwardSegs=[],o=t+1;o<e.length;o++)l(n,e[o],n.forwardSegs)}(t=function(e){var t,r,i,n=[];for(t=0;t<e.length;t++){for(r=e[t],i=0;i<n.length&&l(r,n[i]).length;i++);r.level=i,(n[i]||(n[i]=[])).push(r)}return n}(e)),r=t[0]){for(i=0;i<r.length;i++)a(r[i]);for(i=0;i<r.length;i++)this.computeSegForwardBack(r[i],0,0)}},r.prototype.computeSegForwardBack=function(e,t,r){var i,n=e.forwardSegs;if(void 0===e.forwardCoord)for(n.length?(this.sortForwardSegs(n),this.computeSegForwardBack(n[0],t+1,r),e.forwardCoord=n[0].backwardCoord):e.forwardCoord=1,e.backwardCoord=e.forwardCoord-(e.forwardCoord-r)/(t+1),i=0;i<n.length;i++)this.computeSegForwardBack(n[i],0,e.forwardCoord)},r.prototype.sortForwardSegs=function(e){var r=e.map(d),i=[{field:"forwardPressure",order:-1},{field:"backwardCoord",order:1}].concat(this.context.eventOrderSpecs);return r.sort((function(e,r){return t.compareByFieldSpecs(e,r,i)})),r.map((function(e){return e._seg}))},r.prototype.assignSegCss=function(e){for(var r=0,i=e;r<i.length;r++){var n=i[r];t.applyStyle(n.el,this.generateSegCss(n)),n.level>0&&n.el.classList.add("fc-time-grid-event-inset"),n.eventRange.def.title&&n.bottom-n.top<30&&n.el.classList.add("fc-short")}},r.prototype.generateSegCss=function(e){var t,r,i=this.context.options.slotEventOverlap,n=e.backwardCoord,o=e.forwardCoord,s=this.timeGrid.generateSegVerticalCss(e),a=this.context.isRtl;return i&&(o=Math.min(1,n+2*(o-n))),a?(t=1-o,r=n):(t=n,r=1-o),s.zIndex=e.level+1,s.left=100*t+"%",s.right=100*r+"%",i&&e.forwardPressure&&(s[a?"marginLeft":"marginRight"]=20),s},r}(t.FgEventRenderer);function a(e){var t,r,i=e.forwardSegs,n=0;if(void 0===e.forwardPressure){for(t=0;t<i.length;t++)a(r=i[t]),n=Math.max(n,1+r.forwardPressure);e.forwardPressure=n}}function l(e,t,r){void 0===r&&(r=[]);for(var i=0;i<t.length;i++)n=e,o=t[i],n.bottom>o.top&&n.top<o.bottom&&r.push(t[i]);var n,o;return r}function d(e){var r=t.buildSegCompareObj(e);return r.forwardPressure=e.forwardPressure,r.backwardCoord=e.backwardCoord,r}var c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.attachSegs=function(e,t){this.segsByCol=this.timeGrid.groupSegsByCol(e),this.timeGrid.attachSegsByCol(this.segsByCol,this.timeGrid.mirrorContainerEls),this.sourceSeg=t.sourceSeg},t.prototype.generateSegCss=function(t){var r=e.prototype.generateSegCss.call(this,t),i=this.sourceSeg;if(i&&i.col===t.col){var n=e.prototype.generateSegCss.call(this,i);r.left=n.left,r.right=n.right,r.marginLeft=n.marginLeft,r.marginRight=n.marginRight}return r},t}(s),h=function(e){function t(t){var r=e.call(this)||this;return r.timeGrid=t,r}return n(t,e),t.prototype.attachSegs=function(e,t){var r,i=this.timeGrid;return"bgEvent"===e?r=i.bgContainerEls:"businessHours"===e?r=i.businessContainerEls:"highlight"===e&&(r=i.highlightContainerEls),i.attachSegsByCol(i.groupSegsByCol(t),r),t.map((function(e){return e.el}))},t.prototype.computeSegSizes=function(e){this.timeGrid.computeSegVerticals(e)},t.prototype.assignSegSizes=function(e){this.timeGrid.assignSegVerticals(e)},t}(t.FillRenderer),u=[{hours:1},{minutes:30},{minutes:15},{seconds:30},{seconds:15}],p=function(e){function i(r,i){var n=e.call(this,r)||this;n.isSlatSizesDirty=!1,n.isColSizesDirty=!1,n.processOptions=t.memoize(n._processOptions),n.renderSkeleton=t.memoizeRendering(n._renderSkeleton),n.renderSlats=t.memoizeRendering(n._renderSlats,null,[n.renderSkeleton]),n.renderColumns=t.memoizeRendering(n._renderColumns,n._unrenderColumns,[n.renderSkeleton]),n.renderProps=i;var o=n.renderColumns,a=n.eventRenderer=new s(n),l=n.fillRenderer=new h(n);return n.mirrorRenderer=new c(n),n.renderBusinessHours=t.memoizeRendering(l.renderSegs.bind(l,"businessHours"),l.unrender.bind(l,"businessHours"),[o]),n.renderDateSelection=t.memoizeRendering(n._renderDateSelection,n._unrenderDateSelection,[o]),n.renderFgEvents=t.memoizeRendering(a.renderSegs.bind(a),a.unrender.bind(a),[o]),n.renderBgEvents=t.memoizeRendering(l.renderSegs.bind(l,"bgEvent"),l.unrender.bind(l,"bgEvent"),[o]),n.renderEventSelection=t.memoizeRendering(a.selectByInstanceId.bind(a),a.unselectByInstanceId.bind(a),[n.renderFgEvents]),n.renderEventDrag=t.memoizeRendering(n._renderEventDrag,n._unrenderEventDrag,[o]),n.renderEventResize=t.memoizeRendering(n._renderEventResize,n._unrenderEventResize,[o]),n}return n(i,e),i.prototype._processOptions=function(e){var r,i,n=e.slotDuration,o=e.snapDuration;n=t.createDuration(n),o=o?t.createDuration(o):n,null===(r=t.wholeDivideDurations(n,o))&&(o=n,r=1),this.slotDuration=n,this.snapDuration=o,this.snapsPerSlot=r,i=e.slotLabelFormat,Array.isArray(i)&&(i=i[i.length-1]),this.labelFormat=t.createFormatter(i||{hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"}),i=e.slotLabelInterval,this.labelInterval=i?t.createDuration(i):this.computeLabelInterval(n)},i.prototype.computeLabelInterval=function(e){var r,i,n;for(r=u.length-1;r>=0;r--)if(i=t.createDuration(u[r]),null!==(n=t.wholeDivideDurations(i,e))&&n>1)return i;return e},i.prototype.render=function(e,t){this.processOptions(t.options);var r=e.cells;this.colCnt=r.length,this.renderSkeleton(t.theme),this.renderSlats(e.dateProfile),this.renderColumns(e.cells,e.dateProfile),this.renderBusinessHours(t,e.businessHourSegs),this.renderDateSelection(e.dateSelectionSegs),this.renderFgEvents(t,e.fgEventSegs),this.renderBgEvents(t,e.bgEventSegs),this.renderEventSelection(e.eventSelection),this.renderEventDrag(e.eventDrag),this.renderEventResize(e.eventResize)},i.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSlats.unrender(),this.renderColumns.unrender(),this.renderSkeleton.unrender()},i.prototype.updateSize=function(e){var t=this.fillRenderer,r=this.eventRenderer,i=this.mirrorRenderer;(e||this.isSlatSizesDirty)&&(this.buildSlatPositions(),this.isSlatSizesDirty=!1),(e||this.isColSizesDirty)&&(this.buildColPositions(),this.isColSizesDirty=!1),t.computeSizes(e),r.computeSizes(e),i.computeSizes(e),t.assignSizes(e),r.assignSizes(e),i.assignSizes(e)},i.prototype._renderSkeleton=function(e){var t=this.el;t.innerHTML='<div class="fc-bg"></div><div class="fc-slats"></div><hr class="fc-divider '+e.getClass("widgetHeader")+'" style="display:none" />',this.rootBgContainerEl=t.querySelector(".fc-bg"),this.slatContainerEl=t.querySelector(".fc-slats"),this.bottomRuleEl=t.querySelector(".fc-divider")},i.prototype._renderSlats=function(e){var r=this.context.theme;this.slatContainerEl.innerHTML='<table class="'+r.getClass("tableGrid")+'">'+this.renderSlatRowHtml(e)+"</table>",this.slatEls=t.findElements(this.slatContainerEl,"tr"),this.slatPositions=new t.PositionCache(this.el,this.slatEls,!1,!0),this.isSlatSizesDirty=!0},i.prototype.renderSlatRowHtml=function(e){for(var r,i,n,o=this.context,s=o.dateEnv,a=o.theme,l=o.isRtl,d="",c=t.startOfDay(e.renderRange.start),h=e.minTime,u=t.createDuration(0);t.asRoughMs(h)<t.asRoughMs(e.maxTime);)r=s.add(c,h),i=null!==t.wholeDivideDurations(u,this.labelInterval),n='<td class="fc-axis fc-time '+a.getClass("widgetContent")+'">'+(i?"<span>"+t.htmlEscape(s.format(r,this.labelFormat))+"</span>":"")+"</td>",d+='<tr data-time="'+t.formatIsoTimeString(r)+'"'+(i?"":' class="fc-minor"')+">"+(l?"":n)+'<td class="'+a.getClass("widgetContent")+'"></td>'+(l?n:"")+"</tr>",h=t.addDurations(h,this.slotDuration),u=t.addDurations(u,this.slotDuration);return d},i.prototype._renderColumns=function(e,i){var n=this.context,o=n.calendar,s=n.view,a=n.isRtl,l=n.theme,d=n.dateEnv,c=new r.DayBgRow(this.context);this.rootBgContainerEl.innerHTML='<table class="'+l.getClass("tableGrid")+'">'+c.renderHtml({cells:e,dateProfile:i,renderIntroHtml:this.renderProps.renderBgIntroHtml})+"</table>",this.colEls=t.findElements(this.el,".fc-day, .fc-disabled-day");for(var h=0;h<this.colCnt;h++)o.publiclyTrigger("dayRender",[{date:d.toDate(e[h].date),el:this.colEls[h],view:s}]);a&&this.colEls.reverse(),this.colPositions=new t.PositionCache(this.el,this.colEls,!0,!1),this.renderContentSkeleton(),this.isColSizesDirty=!0},i.prototype._unrenderColumns=function(){this.unrenderContentSkeleton()},i.prototype.renderContentSkeleton=function(){var e,r=this.context.isRtl,i=[];i.push(this.renderProps.renderIntroHtml());for(var n=0;n<this.colCnt;n++)i.push('<td><div class="fc-content-col"><div class="fc-event-container fc-mirror-container"></div><div class="fc-event-container"></div><div class="fc-highlight-container"></div><div class="fc-bgevent-container"></div><div class="fc-business-container"></div></div></td>');r&&i.reverse(),e=this.contentSkeletonEl=t.htmlToElement('<div class="fc-content-skeleton"><table><tr>'+i.join("")+"</tr></table></div>"),this.colContainerEls=t.findElements(e,".fc-content-col"),this.mirrorContainerEls=t.findElements(e,".fc-mirror-container"),this.fgContainerEls=t.findElements(e,".fc-event-container:not(.fc-mirror-container)"),this.bgContainerEls=t.findElements(e,".fc-bgevent-container"),this.highlightContainerEls=t.findElements(e,".fc-highlight-container"),this.businessContainerEls=t.findElements(e,".fc-business-container"),r&&(this.colContainerEls.reverse(),this.mirrorContainerEls.reverse(),this.fgContainerEls.reverse(),this.bgContainerEls.reverse(),this.highlightContainerEls.reverse(),this.businessContainerEls.reverse()),this.el.appendChild(e)},i.prototype.unrenderContentSkeleton=function(){t.removeElement(this.contentSkeletonEl)},i.prototype.groupSegsByCol=function(e){var t,r=[];for(t=0;t<this.colCnt;t++)r.push([]);for(t=0;t<e.length;t++)r[e[t].col].push(e[t]);return r},i.prototype.attachSegsByCol=function(e,t){var r,i,n;for(r=0;r<this.colCnt;r++)for(i=e[r],n=0;n<i.length;n++)t[r].appendChild(i[n].el)},i.prototype.getNowIndicatorUnit=function(){return"minute"},i.prototype.renderNowIndicator=function(e,r){if(this.colContainerEls){var i,n=this.computeDateTop(r),o=[];for(i=0;i<e.length;i++){var s=t.createElement("div",{className:"fc-now-indicator fc-now-indicator-line"});s.style.top=n+"px",this.colContainerEls[e[i].col].appendChild(s),o.push(s)}if(e.length>0){var a=t.createElement("div",{className:"fc-now-indicator fc-now-indicator-arrow"});a.style.top=n+"px",this.contentSkeletonEl.appendChild(a),o.push(a)}this.nowIndicatorEls=o}},i.prototype.unrenderNowIndicator=function(){this.nowIndicatorEls&&(this.nowIndicatorEls.forEach(t.removeElement),this.nowIndicatorEls=null)},i.prototype.getTotalSlatHeight=function(){return this.slatContainerEl.getBoundingClientRect().height},i.prototype.computeDateTop=function(e,r){return r||(r=t.startOfDay(e)),this.computeTimeTop(t.createDuration(e.valueOf()-r.valueOf()))},i.prototype.computeTimeTop=function(e){var r,i,n=this.slatEls.length,o=this.props.dateProfile,s=(e.milliseconds-t.asRoughMs(o.minTime))/t.asRoughMs(this.slotDuration);return s=Math.max(0,s),s=Math.min(n,s),r=Math.floor(s),i=s-(r=Math.min(r,n-1)),this.slatPositions.tops[r]+this.slatPositions.getHeight(r)*i},i.prototype.computeSegVerticals=function(e){var t,r,i,n=this.context.options.timeGridEventMinHeight;for(t=0;t<e.length;t++)r=e[t],i=this.props.cells[r.col].date,r.top=this.computeDateTop(r.start,i),r.bottom=Math.max(r.top+n,this.computeDateTop(r.end,i))},i.prototype.assignSegVerticals=function(e){var r,i;for(r=0;r<e.length;r++)i=e[r],t.applyStyle(i.el,this.generateSegVerticalCss(i))},i.prototype.generateSegVerticalCss=function(e){return{top:e.top,bottom:-e.bottom}},i.prototype.buildPositionCaches=function(){this.buildColPositions(),this.buildSlatPositions()},i.prototype.buildColPositions=function(){this.colPositions.build()},i.prototype.buildSlatPositions=function(){this.slatPositions.build()},i.prototype.positionToHit=function(e,r){var i=this.context.dateEnv,n=this.snapsPerSlot,o=this.slatPositions,s=this.colPositions,a=s.leftToIndex(e),l=o.topToIndex(r);if(null!=a&&null!=l){var d=o.tops[l],c=o.getHeight(l),h=(r-d)/c,u=l*n+Math.floor(h*n),p=this.props.cells[a].date,f=t.addDurations(this.props.dateProfile.minTime,t.multiplyDuration(this.snapDuration,u)),g=i.add(p,f);return{col:a,dateSpan:{range:{start:g,end:i.add(g,this.snapDuration)},allDay:!1},dayEl:this.colEls[a],relativeRect:{left:s.lefts[a],right:s.rights[a],top:d,bottom:d+c}}}},i.prototype._renderEventDrag=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),e.isEvent?this.mirrorRenderer.renderSegs(this.context,e.segs,{isDragging:!0,sourceSeg:e.sourceSeg}):this.fillRenderer.renderSegs("highlight",this.context,e.segs))},i.prototype._unrenderEventDrag=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),e.isEvent?this.mirrorRenderer.unrender(this.context,e.segs,{isDragging:!0,sourceSeg:e.sourceSeg}):this.fillRenderer.unrender("highlight",this.context))},i.prototype._renderEventResize=function(e){e&&(this.eventRenderer.hideByHash(e.affectedInstances),this.mirrorRenderer.renderSegs(this.context,e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},i.prototype._unrenderEventResize=function(e){e&&(this.eventRenderer.showByHash(e.affectedInstances),this.mirrorRenderer.unrender(this.context,e.segs,{isResizing:!0,sourceSeg:e.sourceSeg}))},i.prototype._renderDateSelection=function(e){e&&(this.context.options.selectMirror?this.mirrorRenderer.renderSegs(this.context,e,{isSelecting:!0}):this.fillRenderer.renderSegs("highlight",this.context,e))},i.prototype._unrenderDateSelection=function(e){e&&(this.context.options.selectMirror?this.mirrorRenderer.unrender(this.context,e,{isSelecting:!0}):this.fillRenderer.unrender("highlight",this.context))},i}(t.DateComponent),f=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return n(r,e),r.prototype.getKeyInfo=function(){return{allDay:{},timed:{}}},r.prototype.getKeysForDateSpan=function(e){return e.allDay?["allDay"]:["timed"]},r.prototype.getKeysForEventDef=function(e){return e.allDay?t.hasBgRendering(e)?["timed","allDay"]:["allDay"]:["timed"]},r}(t.Splitter),g=t.createFormatter({week:"short"}),m=function(e){function i(){var r=null!==e&&e.apply(this,arguments)||this;return r.splitter=new f,r.renderSkeleton=t.memoizeRendering(r._renderSkeleton,r._unrenderSkeleton),r.renderHeadIntroHtml=function(){var e,i=r.context,n=i.theme,o=i.dateEnv,s=i.options,a=r.props.dateProfile.renderRange,l=t.diffDays(a.start,a.end);return s.weekNumbers?(e=o.format(a.start,g),'<th class="fc-axis fc-week-number '+n.getClass("widgetHeader")+'" '+r.axisStyleAttr()+">"+t.buildGotoAnchorHtml(s,o,{date:a.start,type:"week",forceOff:l>1},t.htmlEscape(e))+"</th>"):'<th class="fc-axis '+n.getClass("widgetHeader")+'" '+r.axisStyleAttr()+"></th>"},r.renderTimeGridBgIntroHtml=function(){return'<td class="fc-axis '+r.context.theme.getClass("widgetContent")+'" '+r.axisStyleAttr()+"></td>"},r.renderTimeGridIntroHtml=function(){return'<td class="fc-axis" '+r.axisStyleAttr()+"></td>"},r.renderDayGridBgIntroHtml=function(){var e=r.context,i=e.theme,n=e.options;return'<td class="fc-axis '+i.getClass("widgetContent")+'" '+r.axisStyleAttr()+"><span>"+t.getAllDayHtml(n)+"</span></td>"},r.renderDayGridIntroHtml=function(){return'<td class="fc-axis" '+r.axisStyleAttr()+"></td>"},r}return n(i,e),i.prototype.render=function(t,r){e.prototype.render.call(this,t,r),this.renderSkeleton(r)},i.prototype.destroy=function(){e.prototype.destroy.call(this),this.renderSkeleton.unrender()},i.prototype._renderSkeleton=function(e){this.el.classList.add("fc-timeGrid-view"),this.el.innerHTML=this.renderSkeletonHtml(),this.scroller=new t.ScrollComponent("hidden","auto");var i=this.scroller.el;this.el.querySelector(".fc-body > tr > td").appendChild(i),i.classList.add("fc-time-grid-container");var n=t.createElement("div",{className:"fc-time-grid"});if(i.appendChild(n),this.timeGrid=new p(n,{renderBgIntroHtml:this.renderTimeGridBgIntroHtml,renderIntroHtml:this.renderTimeGridIntroHtml}),e.options.allDaySlot){this.dayGrid=new r.DayGrid(this.el.querySelector(".fc-day-grid"),{renderNumberIntroHtml:this.renderDayGridIntroHtml,renderBgIntroHtml:this.renderDayGridBgIntroHtml,renderIntroHtml:this.renderDayGridIntroHtml,colWeekNumbersVisible:!1,cellWeekNumbersVisible:!1});var o=this.el.querySelector(".fc-divider");this.dayGrid.bottomCoordPadding=o.getBoundingClientRect().height}},i.prototype._unrenderSkeleton=function(){this.el.classList.remove("fc-timeGrid-view"),this.timeGrid.destroy(),this.dayGrid&&this.dayGrid.destroy(),this.scroller.destroy()},i.prototype.renderSkeletonHtml=function(){var e=this.context,t=e.theme,r=e.options;return'<table class="'+t.getClass("tableGrid")+'">'+(r.columnHeader?'<thead class="fc-head"><tr><td class="fc-head-container '+t.getClass("widgetHeader")+'">&nbsp;</td></tr></thead>':"")+'<tbody class="fc-body"><tr><td class="'+t.getClass("widgetContent")+'">'+(r.allDaySlot?'<div class="fc-day-grid"></div><hr class="fc-divider '+t.getClass("widgetHeader")+'" />':"")+"</td></tr></tbody></table>"},i.prototype.getNowIndicatorUnit=function(){return this.timeGrid.getNowIndicatorUnit()},i.prototype.unrenderNowIndicator=function(){this.timeGrid.unrenderNowIndicator()},i.prototype.updateSize=function(t,r,i){e.prototype.updateSize.call(this,t,r,i),this.timeGrid.updateSize(t),this.dayGrid&&this.dayGrid.updateSize(t)},i.prototype.updateBaseSize=function(e,r,i){var n,o,s,a=this;if(this.axisWidth=t.matchCellWidths(t.findElements(this.el,".fc-axis")),this.timeGrid.colEls){var l=t.findElements(this.el,".fc-row").filter((function(e){return!a.scroller.el.contains(e)}));this.timeGrid.bottomRuleEl.style.display="none",this.scroller.clear(),l.forEach(t.uncompensateScroll),this.dayGrid&&(this.dayGrid.removeSegPopover(),(n=this.context.options.eventLimit)&&"number"!=typeof n&&(n=5),n&&this.dayGrid.limitRows(n)),i||(o=this.computeScrollerHeight(r),this.scroller.setHeight(o),((s=this.scroller.getScrollbarWidths()).left||s.right)&&(l.forEach((function(e){t.compensateScroll(e,s)})),o=this.computeScrollerHeight(r),this.scroller.setHeight(o)),this.scroller.lockOverflow(s),this.timeGrid.getTotalSlatHeight()<o&&(this.timeGrid.bottomRuleEl.style.display=""))}else i||(o=this.computeScrollerHeight(r),this.scroller.setHeight(o))},i.prototype.computeScrollerHeight=function(e){return e-t.subtractInnerElHeight(this.el,this.scroller.el)},i.prototype.computeDateScroll=function(e){var t=this.timeGrid.computeTimeTop(e);return(t=Math.ceil(t))&&t++,{top:t}},i.prototype.queryDateScroll=function(){return{top:this.scroller.getScrollTop()}},i.prototype.applyDateScroll=function(e){void 0!==e.top&&this.scroller.setScrollTop(e.top)},i.prototype.axisStyleAttr=function(){return null!=this.axisWidth?'style="width:'+this.axisWidth+'px"':""},i}(t.View);m.prototype.usesMinMaxTime=!0;var y=function(e){function r(r){var i=e.call(this,r.el)||this;return i.buildDayRanges=t.memoize(v),i.slicer=new S,i.timeGrid=r,i}return n(r,e),r.prototype.firstContext=function(e){e.calendar.registerInteractiveComponent(this,{el:this.timeGrid.el})},r.prototype.destroy=function(){e.prototype.destroy.call(this),this.context.calendar.unregisterInteractiveComponent(this)},r.prototype.render=function(e,t){var r=this.context.dateEnv,i=e.dateProfile,n=e.dayTable,s=this.dayRanges=this.buildDayRanges(n,i,r),a=this.timeGrid;a.receiveContext(t),a.receiveProps(o({},this.slicer.sliceProps(e,i,null,t.calendar,a,s),{dateProfile:i,cells:n.cells[0]}),t)},r.prototype.renderNowIndicator=function(e){this.timeGrid.renderNowIndicator(this.slicer.sliceNowDate(e,this.timeGrid,this.dayRanges),e)},r.prototype.buildPositionCaches=function(){this.timeGrid.buildPositionCaches()},r.prototype.queryHit=function(e,t){var r=this.timeGrid.positionToHit(e,t);if(r)return{component:this.timeGrid,dateSpan:r.dateSpan,dayEl:r.dayEl,rect:{left:r.relativeRect.left,right:r.relativeRect.right,top:r.relativeRect.top,bottom:r.relativeRect.bottom},layer:0}},r}(t.DateComponent);function v(e,t,r){for(var i=[],n=0,o=e.headerDates;n<o.length;n++){var s=o[n];i.push({start:r.add(s,t.minTime),end:r.add(s,t.maxTime)})}return i}var S=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return n(r,e),r.prototype.sliceRange=function(e,r){for(var i=[],n=0;n<r.length;n++){var o=t.intersectRanges(e,r[n]);o&&i.push({start:o.start,end:o.end,isStart:o.start.valueOf()===e.start.valueOf(),isEnd:o.end.valueOf()===e.end.valueOf(),col:n})}return i},r}(t.Slicer),C=function(e){function i(){var r=null!==e&&e.apply(this,arguments)||this;return r.buildDayTable=t.memoize(E),r}return n(i,e),i.prototype.render=function(t,r){e.prototype.render.call(this,t,r);var i=this.props,n=i.dateProfile,s=i.dateProfileGenerator,a=r.nextDayThreshold,l=this.buildDayTable(n,s),d=this.splitter.splitProps(t);this.header&&this.header.receiveProps({dateProfile:n,dates:l.headerDates,datesRepDistinctDays:!0,renderIntroHtml:this.renderHeadIntroHtml},r),this.simpleTimeGrid.receiveProps(o({},d.timed,{dateProfile:n,dayTable:l}),r),this.simpleDayGrid&&this.simpleDayGrid.receiveProps(o({},d.allDay,{dateProfile:n,dayTable:l,nextDayThreshold:a,isRigid:!1}),r),this.startNowIndicator(n,s)},i.prototype._renderSkeleton=function(i){e.prototype._renderSkeleton.call(this,i),i.options.columnHeader&&(this.header=new t.DayHeader(this.el.querySelector(".fc-head-container"))),this.simpleTimeGrid=new y(this.timeGrid),this.dayGrid&&(this.simpleDayGrid=new r.SimpleDayGrid(this.dayGrid))},i.prototype._unrenderSkeleton=function(){e.prototype._unrenderSkeleton.call(this),this.header&&this.header.destroy(),this.simpleTimeGrid.destroy(),this.simpleDayGrid&&this.simpleDayGrid.destroy()},i.prototype.renderNowIndicator=function(e){this.simpleTimeGrid.renderNowIndicator(e)},i}(m);function E(e,r){var i=new t.DaySeries(e.renderRange,r);return new t.DayTable(i,!1)}var b=t.createPlugin({defaultView:"timeGridWeek",views:{timeGrid:{class:C,allDaySlot:!0,slotDuration:"00:30:00",slotEventOverlap:!0},timeGridDay:{type:"timeGrid",duration:{days:1}},timeGridWeek:{type:"timeGrid",duration:{weeks:1}}}});e.AbstractTimeGridView=m,e.TimeGrid=p,e.TimeGridSlicer=S,e.TimeGridView=C,e.buildDayRanges=v,e.buildDayTable=E,e.default=b,Object.defineProperty(e,"__esModule",{value:!0})})); \ No newline at end of file
diff --git a/library/fullcalendar/packages/timegrid/package.json b/library/fullcalendar/packages/timegrid/package.json
deleted file mode 100644
index 3d92bcf78..000000000
--- a/library/fullcalendar/packages/timegrid/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "@fullcalendar/timegrid",
- "version": "4.4.2",
- "title": "FullCalendar Time Grid Plugin",
- "description": "Display your events on a grid of time slots",
- "keywords": [
- "calendar",
- "event",
- "full-sized"
- ],
- "homepage": "https://fullcalendar.io/",
- "docs": "https://fullcalendar.io/docs/timegrid-view",
- "bugs": "https://fullcalendar.io/reporting-bugs",
- "repository": {
- "type": "git",
- "url": "https://github.com/fullcalendar/fullcalendar.git",
- "homepage": "https://github.com/fullcalendar/fullcalendar"
- },
- "license": "MIT",
- "author": {
- "name": "Adam Shaw",
- "email": "arshaw@arshaw.com",
- "url": "http://arshaw.com/"
- },
- "copyright": "2019 Adam Shaw",
- "dependencies": {
- "@fullcalendar/daygrid": "~4.4.0"
- },
- "peerDependencies": {
- "@fullcalendar/core": "~4.4.0"
- },
- "main": "main.js",
- "module": "main.esm.js",
- "unpkg": "main.min.js",
- "types": "main.d.ts"
-}
diff --git a/library/fullcalendar/packages/web-component/index.global.js b/library/fullcalendar/packages/web-component/index.global.js
new file mode 100644
index 000000000..aa22a52a3
--- /dev/null
+++ b/library/fullcalendar/packages/web-component/index.global.js
@@ -0,0 +1,70 @@
+/*!
+FullCalendar Web Component v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+(function (core) {
+ 'use strict';
+
+ class FullCalendarElement extends HTMLElement {
+ constructor() {
+ super(...arguments);
+ this._calendar = null;
+ this._options = null;
+ }
+ connectedCallback() {
+ this._handleOptionsStr(this.getAttribute('options'));
+ }
+ disconnectedCallback() {
+ this._handleOptionsStr(null);
+ }
+ attributeChangedCallback(name, oldVal, newVal) {
+ if (name === 'options' &&
+ this._calendar // initial render happened
+ ) {
+ this._handleOptionsStr(newVal);
+ }
+ }
+ get options() {
+ return this._options;
+ }
+ set options(options) {
+ this._handleOptions(options);
+ }
+ getApi() {
+ return this._calendar;
+ }
+ _handleOptionsStr(optionsStr) {
+ this._handleOptions(optionsStr ? JSON.parse(optionsStr) : null);
+ }
+ _handleOptions(options) {
+ if (options) {
+ if (this._calendar) {
+ this._calendar.resetOptions(options);
+ }
+ else {
+ this.innerHTML = '<div></div>';
+ let calendarEl = this.querySelector('div');
+ let calendar = new core.Calendar(calendarEl, options);
+ calendar.render();
+ this._calendar = calendar;
+ }
+ this._options = options;
+ }
+ else {
+ if (this._calendar) {
+ this._calendar.destroy();
+ this._calendar = null;
+ }
+ this._options = null;
+ }
+ }
+ static get observedAttributes() {
+ return ['options'];
+ }
+ }
+
+ globalThis.FullCalendarElement = FullCalendarElement;
+ customElements.define('full-calendar', FullCalendarElement);
+
+})(FullCalendar);
diff --git a/library/fullcalendar/packages/web-component/index.global.min.js b/library/fullcalendar/packages/web-component/index.global.min.js
new file mode 100644
index 000000000..9a3a78173
--- /dev/null
+++ b/library/fullcalendar/packages/web-component/index.global.min.js
@@ -0,0 +1,6 @@
+/*!
+FullCalendar Web Component v6.0.3
+Docs & License: https://fullcalendar.io
+(c) 2022 Adam Shaw
+*/
+!function(t){"use strict";class e extends HTMLElement{constructor(){super(...arguments),this._calendar=null,this._options=null}connectedCallback(){this._handleOptionsStr(this.getAttribute("options"))}disconnectedCallback(){this._handleOptionsStr(null)}attributeChangedCallback(t,e,n){"options"===t&&this._calendar&&this._handleOptionsStr(n)}get options(){return this._options}set options(t){this._handleOptions(t)}getApi(){return this._calendar}_handleOptionsStr(t){this._handleOptions(t?JSON.parse(t):null)}_handleOptions(e){if(e){if(this._calendar)this._calendar.resetOptions(e);else{this.innerHTML="<div></div>";let n=this.querySelector("div"),s=new t.Calendar(n,e);s.render(),this._calendar=s}this._options=e}else this._calendar&&(this._calendar.destroy(),this._calendar=null),this._options=null}static get observedAttributes(){return["options"]}}globalThis.FullCalendarElement=e,customElements.define("full-calendar",e)}(FullCalendar); \ No newline at end of file
diff --git a/library/fullcalendar/vendor/rrule.js b/library/fullcalendar/vendor/rrule.js
deleted file mode 100644
index 826d9f4f2..000000000
--- a/library/fullcalendar/vendor/rrule.js
+++ /dev/null
@@ -1,3808 +0,0 @@
-(function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory(require("luxon"));
- else if(typeof define === 'function' && define.amd)
- define(["luxon"], factory);
- else if(typeof exports === 'object')
- exports["rrule"] = factory(require("luxon"));
- else
- root["rrule"] = factory(root["luxon"]);
-})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__3__) {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __webpack_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __webpack_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __webpack_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = 1);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return isPresent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return isNumber; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return isWeekdayStr; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return isArray; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return range; });
-/* unused harmony export clone */
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return repeat; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return toArray; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return padStart; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return split; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return pymod; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return divmod; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return empty; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return notEmpty; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return includes; });
-/* harmony import */ var _weekday__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
-// =============================================================================
-// Helper functions
-// =============================================================================
-
-var isPresent = function (value) {
- return value !== null && value !== undefined;
-};
-var isNumber = function (value) {
- return typeof value === 'number';
-};
-var isWeekdayStr = function (value) {
- return _weekday__WEBPACK_IMPORTED_MODULE_0__[/* ALL_WEEKDAYS */ "a"].indexOf(value) >= 0;
-};
-var isArray = Array.isArray;
-/**
- * Simplified version of python's range()
- */
-var range = function (start, end) {
- if (end === void 0) { end = start; }
- if (arguments.length === 1) {
- end = start;
- start = 0;
- }
- var rang = [];
- for (var i = start; i < end; i++)
- rang.push(i);
- return rang;
-};
-var clone = function (array) {
- return [].concat(array);
-};
-var repeat = function (value, times) {
- var i = 0;
- var array = [];
- if (isArray(value)) {
- for (; i < times; i++)
- array[i] = [].concat(value);
- }
- else {
- for (; i < times; i++)
- array[i] = value;
- }
- return array;
-};
-var toArray = function (item) {
- if (isArray(item)) {
- return item;
- }
- return [item];
-};
-function padStart(item, targetLength, padString) {
- if (padString === void 0) { padString = ' '; }
- var str = String(item);
- targetLength = targetLength >> 0;
- if (str.length > targetLength) {
- return String(str);
- }
- targetLength = targetLength - str.length;
- if (targetLength > padString.length) {
- padString += repeat(padString, targetLength / padString.length);
- }
- return padString.slice(0, targetLength) + String(str);
-}
-/**
- * Python like split
- */
-var split = function (str, sep, num) {
- var splits = str.split(sep);
- return num
- ? splits.slice(0, num).concat([splits.slice(num).join(sep)])
- : splits;
-};
-/**
- * closure/goog/math/math.js:modulo
- * Copyright 2006 The Closure Library Authors.
- * The % operator in JavaScript returns the remainder of a / b, but differs from
- * some other languages in that the result will have the same sign as the
- * dividend. For example, -1 % 8 == -1, whereas in some other languages
- * (such as Python) the result would be 7. This function emulates the more
- * correct modulo behavior, which is useful for certain applications such as
- * calculating an offset index in a circular list.
- *
- * @param {number} a The dividend.
- * @param {number} b The divisor.
- * @return {number} a % b where the result is between 0 and b (either 0 <= x < b
- * or b < x <= 0, depending on the sign of b).
- */
-var pymod = function (a, b) {
- var r = a % b;
- // If r and b differ in sign, add b to wrap the result to the correct sign.
- return r * b < 0 ? r + b : r;
-};
-/**
- * @see: <http://docs.python.org/library/functions.html#divmod>
- */
-var divmod = function (a, b) {
- return { div: Math.floor(a / b), mod: pymod(a, b) };
-};
-var empty = function (obj) {
- return !isPresent(obj) || obj.length === 0;
-};
-/**
- * Python-like boolean
- * @return {Boolean} value of an object/primitive, taking into account
- * the fact that in Python an empty list's/tuple's
- * boolean value is False, whereas in JS it's true
- */
-var notEmpty = function (obj) {
- return !empty(obj);
-};
-/**
- * Return true if a value is in an array
- */
-var includes = function (arr, val) {
- return notEmpty(arr) && arr.indexOf(val) !== -1;
-};
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-
-// EXTERNAL MODULE: ./src/helpers.ts
-var helpers = __webpack_require__(0);
-
-// CONCATENATED MODULE: ./src/dateutil.ts
-
-/**
- * General date-related utilities.
- * Also handles several incompatibilities between JavaScript and Python
- *
- */
-var dateutil_dateutil;
-(function (dateutil) {
- dateutil.MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
- /**
- * Number of milliseconds of one day
- */
- dateutil.ONE_DAY = 1000 * 60 * 60 * 24;
- /**
- * @see: <http://docs.python.org/library/datetime.html#datetime.MAXYEAR>
- */
- dateutil.MAXYEAR = 9999;
- /**
- * Python uses 1-Jan-1 as the base for calculating ordinals but we don't
- * want to confuse the JS engine with milliseconds > Number.MAX_NUMBER,
- * therefore we use 1-Jan-1970 instead
- */
- dateutil.ORDINAL_BASE = new Date(Date.UTC(1970, 0, 1));
- /**
- * Python: MO-SU: 0 - 6
- * JS: SU-SAT 0 - 6
- */
- dateutil.PY_WEEKDAYS = [6, 0, 1, 2, 3, 4, 5];
- /**
- * py_date.timetuple()[7]
- */
- dateutil.getYearDay = function (date) {
- var dateNoTime = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
- return (Math.ceil((dateNoTime.valueOf() -
- new Date(date.getUTCFullYear(), 0, 1).valueOf()) /
- dateutil.ONE_DAY) + 1);
- };
- dateutil.isLeapYear = function (year) {
- return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
- };
- dateutil.isDate = function (value) {
- return value instanceof Date;
- };
- dateutil.isValidDate = function (value) {
- return dateutil.isDate(value) && !isNaN(value.getTime());
- };
- /**
- * @return {Number} the date's timezone offset in ms
- */
- dateutil.tzOffset = function (date) {
- return date.getTimezoneOffset() * 60 * 1000;
- };
- /**
- * @see: <http://www.mcfedries.com/JavaScript/DaysBetween.asp>
- */
- dateutil.daysBetween = function (date1, date2) {
- // The number of milliseconds in one day
- // Convert both dates to milliseconds
- var date1ms = date1.getTime() - dateutil.tzOffset(date1);
- var date2ms = date2.getTime() - dateutil.tzOffset(date2);
- // Calculate the difference in milliseconds
- var differencems = date1ms - date2ms;
- // Convert back to days and return
- return Math.round(differencems / dateutil.ONE_DAY);
- };
- /**
- * @see: <http://docs.python.org/library/datetime.html#datetime.date.toordinal>
- */
- dateutil.toOrdinal = function (date) {
- return dateutil.daysBetween(date, dateutil.ORDINAL_BASE);
- };
- /**
- * @see - <http://docs.python.org/library/datetime.html#datetime.date.fromordinal>
- */
- dateutil.fromOrdinal = function (ordinal) {
- return new Date(dateutil.ORDINAL_BASE.getTime() + ordinal * dateutil.ONE_DAY);
- };
- dateutil.getMonthDays = function (date) {
- var month = date.getUTCMonth();
- return month === 1 && dateutil.isLeapYear(date.getUTCFullYear())
- ? 29
- : dateutil.MONTH_DAYS[month];
- };
- /**
- * @return {Number} python-like weekday
- */
- dateutil.getWeekday = function (date) {
- return dateutil.PY_WEEKDAYS[date.getUTCDay()];
- };
- /**
- * @see: <http://docs.python.org/library/calendar.html#calendar.monthrange>
- */
- dateutil.monthRange = function (year, month) {
- var date = new Date(Date.UTC(year, month, 1));
- return [dateutil.getWeekday(date), dateutil.getMonthDays(date)];
- };
- /**
- * @see: <http://docs.python.org/library/datetime.html#datetime.datetime.combine>
- */
- dateutil.combine = function (date, time) {
- time = time || date;
- return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds()));
- };
- dateutil.clone = function (date) {
- var dolly = new Date(date.getTime());
- return dolly;
- };
- dateutil.cloneDates = function (dates) {
- var clones = [];
- for (var i = 0; i < dates.length; i++) {
- clones.push(dateutil.clone(dates[i]));
- }
- return clones;
- };
- /**
- * Sorts an array of Date or dateutil.Time objects
- */
- dateutil.sort = function (dates) {
- dates.sort(function (a, b) {
- return a.getTime() - b.getTime();
- });
- };
- dateutil.timeToUntilString = function (time, utc) {
- if (utc === void 0) { utc = true; }
- var date = new Date(time);
- return [
- Object(helpers["i" /* padStart */])(date.getUTCFullYear().toString(), 4, '0'),
- Object(helpers["i" /* padStart */])(date.getUTCMonth() + 1, 2, '0'),
- Object(helpers["i" /* padStart */])(date.getUTCDate(), 2, '0'),
- 'T',
- Object(helpers["i" /* padStart */])(date.getUTCHours(), 2, '0'),
- Object(helpers["i" /* padStart */])(date.getUTCMinutes(), 2, '0'),
- Object(helpers["i" /* padStart */])(date.getUTCSeconds(), 2, '0'),
- utc ? 'Z' : ''
- ].join('');
- };
- dateutil.untilStringToDate = function (until) {
- var re = /^(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})Z?)?$/;
- var bits = re.exec(until);
- if (!bits)
- throw new Error("Invalid UNTIL value: " + until);
- return new Date(Date.UTC(parseInt(bits[1], 10), parseInt(bits[2], 10) - 1, parseInt(bits[3], 10), parseInt(bits[5], 10) || 0, parseInt(bits[6], 10) || 0, parseInt(bits[7], 10) || 0));
- };
-})(dateutil_dateutil || (dateutil_dateutil = {}));
-/* harmony default export */ var src_dateutil = (dateutil_dateutil);
-
-// CONCATENATED MODULE: ./src/iterresult.ts
-/**
- * This class helps us to emulate python's generators, sorta.
- */
-var IterResult = /** @class */ (function () {
- function IterResult(method, args) {
- this.minDate = null;
- this.maxDate = null;
- this._result = [];
- this.total = 0;
- this.method = method;
- this.args = args;
- if (method === 'between') {
- this.maxDate = args.inc
- ? args.before
- : new Date(args.before.getTime() - 1);
- this.minDate = args.inc ? args.after : new Date(args.after.getTime() + 1);
- }
- else if (method === 'before') {
- this.maxDate = args.inc ? args.dt : new Date(args.dt.getTime() - 1);
- }
- else if (method === 'after') {
- this.minDate = args.inc ? args.dt : new Date(args.dt.getTime() + 1);
- }
- }
- /**
- * Possibly adds a date into the result.
- *
- * @param {Date} date - the date isn't necessarly added to the result
- * list (if it is too late/too early)
- * @return {Boolean} true if it makes sense to continue the iteration
- * false if we're done.
- */
- IterResult.prototype.accept = function (date) {
- ++this.total;
- var tooEarly = this.minDate && date < this.minDate;
- var tooLate = this.maxDate && date > this.maxDate;
- if (this.method === 'between') {
- if (tooEarly)
- return true;
- if (tooLate)
- return false;
- }
- else if (this.method === 'before') {
- if (tooLate)
- return false;
- }
- else if (this.method === 'after') {
- if (tooEarly)
- return true;
- this.add(date);
- return false;
- }
- return this.add(date);
- };
- /**
- *
- * @param {Date} date that is part of the result.
- * @return {Boolean} whether we are interested in more values.
- */
- IterResult.prototype.add = function (date) {
- this._result.push(date);
- return true;
- };
- /**
- * 'before' and 'after' return only one date, whereas 'all'
- * and 'between' an array.
- * @return {Date,Array?}
- */
- IterResult.prototype.getValue = function () {
- var res = this._result;
- switch (this.method) {
- case 'all':
- case 'between':
- return res;
- case 'before':
- case 'after':
- default:
- return (res.length ? res[res.length - 1] : null);
- }
- };
- IterResult.prototype.clone = function () {
- return new IterResult(this.method, this.args);
- };
- return IterResult;
-}());
-/* harmony default export */ var iterresult = (IterResult);
-
-// CONCATENATED MODULE: ./node_modules/tslib/tslib.es6.js
-/*! *****************************************************************************
-Copyright (c) Microsoft Corporation. All rights reserved.
-Licensed under the Apache License, Version 2.0 (the "License"); you may not use
-this file except in compliance with the License. You may obtain a copy of the
-License at http://www.apache.org/licenses/LICENSE-2.0
-
-THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
-WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
-MERCHANTABLITY OR NON-INFRINGEMENT.
-
-See the Apache Version 2.0 License for specific language governing permissions
-and limitations under the License.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
- return extendStatics(d, b);
-};
-
-function __extends(d, b) {
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
- __assign = Object.assign || function __assign(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
- }
- return t;
- }
- return __assign.apply(this, arguments);
-}
-
-function __rest(s, e) {
- var t = {};
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
- t[p] = s[p];
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
- t[p[i]] = s[p[i]];
- }
- return t;
-}
-
-function __decorate(decorators, target, key, desc) {
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
- return c > 3 && r && Object.defineProperty(target, key, r), r;
-}
-
-function __param(paramIndex, decorator) {
- return function (target, key) { decorator(target, key, paramIndex); }
-}
-
-function __metadata(metadataKey, metadataValue) {
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
-}
-
-function __awaiter(thisArg, _arguments, P, generator) {
- return new (P || (P = Promise))(function (resolve, reject) {
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
- function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
- step((generator = generator.apply(thisArg, _arguments || [])).next());
- });
-}
-
-function __generator(thisArg, body) {
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
- function verb(n) { return function (v) { return step([n, v]); }; }
- function step(op) {
- if (f) throw new TypeError("Generator is already executing.");
- while (_) try {
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
- if (y = 0, t) op = [op[0] & 2, t.value];
- switch (op[0]) {
- case 0: case 1: t = op; break;
- case 4: _.label++; return { value: op[1], done: false };
- case 5: _.label++; y = op[1]; op = [0]; continue;
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
- default:
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
- if (t[2]) _.ops.pop();
- _.trys.pop(); continue;
- }
- op = body.call(thisArg, _);
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
- }
-}
-
-function __exportStar(m, exports) {
- for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
-}
-
-function __values(o) {
- var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
- if (m) return m.call(o);
- return {
- next: function () {
- if (o && i >= o.length) o = void 0;
- return { value: o && o[i++], done: !o };
- }
- };
-}
-
-function __read(o, n) {
- var m = typeof Symbol === "function" && o[Symbol.iterator];
- if (!m) return o;
- var i = m.call(o), r, ar = [], e;
- try {
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
- }
- catch (error) { e = { error: error }; }
- finally {
- try {
- if (r && !r.done && (m = i["return"])) m.call(i);
- }
- finally { if (e) throw e.error; }
- }
- return ar;
-}
-
-function __spread() {
- for (var ar = [], i = 0; i < arguments.length; i++)
- ar = ar.concat(__read(arguments[i]));
- return ar;
-}
-
-function __spreadArrays() {
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
- r[k] = a[j];
- return r;
-};
-
-function __await(v) {
- return this instanceof __await ? (this.v = v, this) : new __await(v);
-}
-
-function __asyncGenerator(thisArg, _arguments, generator) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
- function fulfill(value) { resume("next", value); }
- function reject(value) { resume("throw", value); }
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
-}
-
-function __asyncDelegator(o) {
- var i, p;
- return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
- function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
-}
-
-function __asyncValues(o) {
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
- var m = o[Symbol.asyncIterator], i;
- return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
- function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
- function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
-}
-
-function __makeTemplateObject(cooked, raw) {
- if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
- return cooked;
-};
-
-function __importStar(mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
- result.default = mod;
- return result;
-}
-
-function __importDefault(mod) {
- return (mod && mod.__esModule) ? mod : { default: mod };
-}
-
-// CONCATENATED MODULE: ./src/callbackiterresult.ts
-
-
-/**
- * IterResult subclass that calls a callback function on each add,
- * and stops iterating when the callback returns false.
- */
-var callbackiterresult_CallbackIterResult = /** @class */ (function (_super) {
- __extends(CallbackIterResult, _super);
- function CallbackIterResult(method, args, iterator) {
- var _this = _super.call(this, method, args) || this;
- _this.iterator = iterator;
- return _this;
- }
- CallbackIterResult.prototype.add = function (date) {
- if (this.iterator(date, this._result.length)) {
- this._result.push(date);
- return true;
- }
- return false;
- };
- return CallbackIterResult;
-}(iterresult));
-/* harmony default export */ var callbackiterresult = (callbackiterresult_CallbackIterResult);
-
-// CONCATENATED MODULE: ./src/types.ts
-var Frequency;
-(function (Frequency) {
- Frequency[Frequency["YEARLY"] = 0] = "YEARLY";
- Frequency[Frequency["MONTHLY"] = 1] = "MONTHLY";
- Frequency[Frequency["WEEKLY"] = 2] = "WEEKLY";
- Frequency[Frequency["DAILY"] = 3] = "DAILY";
- Frequency[Frequency["HOURLY"] = 4] = "HOURLY";
- Frequency[Frequency["MINUTELY"] = 5] = "MINUTELY";
- Frequency[Frequency["SECONDLY"] = 6] = "SECONDLY";
-})(Frequency || (Frequency = {}));
-function freqIsDailyOrGreater(freq) {
- return freq < Frequency.HOURLY;
-}
-
-// EXTERNAL MODULE: ./src/weekday.ts
-var weekday = __webpack_require__(2);
-
-// CONCATENATED MODULE: ./src/datetime.ts
-
-
-
-
-var Time = /** @class */ (function () {
- function Time(hour, minute, second, millisecond) {
- this.hour = hour;
- this.minute = minute;
- this.second = second;
- this.millisecond = millisecond || 0;
- }
- Time.prototype.getHours = function () {
- return this.hour;
- };
- Time.prototype.getMinutes = function () {
- return this.minute;
- };
- Time.prototype.getSeconds = function () {
- return this.second;
- };
- Time.prototype.getMilliseconds = function () {
- return this.millisecond;
- };
- Time.prototype.getTime = function () {
- return ((this.hour * 60 * 60 + this.minute * 60 + this.second) * 1000 +
- this.millisecond);
- };
- return Time;
-}());
-
-var datetime_DateTime = /** @class */ (function (_super) {
- __extends(DateTime, _super);
- function DateTime(year, month, day, hour, minute, second, millisecond) {
- var _this = _super.call(this, hour, minute, second, millisecond) || this;
- _this.year = year;
- _this.month = month;
- _this.day = day;
- return _this;
- }
- DateTime.fromDate = function (date) {
- return new this(date.getUTCFullYear(), date.getUTCMonth() + 1, date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.valueOf() % 1000);
- };
- DateTime.prototype.getWeekday = function () {
- return dateutil_dateutil.getWeekday(new Date(this.getTime()));
- };
- DateTime.prototype.getTime = function () {
- return new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, this.millisecond)).getTime();
- };
- DateTime.prototype.getDay = function () {
- return this.day;
- };
- DateTime.prototype.getMonth = function () {
- return this.month;
- };
- DateTime.prototype.getYear = function () {
- return this.year;
- };
- DateTime.prototype.addYears = function (years) {
- this.year += years;
- };
- DateTime.prototype.addMonths = function (months) {
- this.month += months;
- if (this.month > 12) {
- var yearDiv = Math.floor(this.month / 12);
- var monthMod = Object(helpers["j" /* pymod */])(this.month, 12);
- this.month = monthMod;
- this.year += yearDiv;
- if (this.month === 0) {
- this.month = 12;
- --this.year;
- }
- }
- };
- DateTime.prototype.addWeekly = function (days, wkst) {
- if (wkst > this.getWeekday()) {
- this.day += -(this.getWeekday() + 1 + (6 - wkst)) + days * 7;
- }
- else {
- this.day += -(this.getWeekday() - wkst) + days * 7;
- }
- this.fixDay();
- };
- DateTime.prototype.addDaily = function (days) {
- this.day += days;
- this.fixDay();
- };
- DateTime.prototype.addHours = function (hours, filtered, byhour) {
- if (filtered) {
- // Jump to one iteration before next day
- this.hour += Math.floor((23 - this.hour) / hours) * hours;
- }
- while (true) {
- this.hour += hours;
- var _a = Object(helpers["a" /* divmod */])(this.hour, 24), dayDiv = _a.div, hourMod = _a.mod;
- if (dayDiv) {
- this.hour = hourMod;
- this.addDaily(dayDiv);
- }
- if (Object(helpers["b" /* empty */])(byhour) || Object(helpers["c" /* includes */])(byhour, this.hour))
- break;
- }
- };
- DateTime.prototype.addMinutes = function (minutes, filtered, byhour, byminute) {
- if (filtered) {
- // Jump to one iteration before next day
- this.minute +=
- Math.floor((1439 - (this.hour * 60 + this.minute)) / minutes) * minutes;
- }
- while (true) {
- this.minute += minutes;
- var _a = Object(helpers["a" /* divmod */])(this.minute, 60), hourDiv = _a.div, minuteMod = _a.mod;
- if (hourDiv) {
- this.minute = minuteMod;
- this.addHours(hourDiv, false, byhour);
- }
- if ((Object(helpers["b" /* empty */])(byhour) || Object(helpers["c" /* includes */])(byhour, this.hour)) &&
- (Object(helpers["b" /* empty */])(byminute) || Object(helpers["c" /* includes */])(byminute, this.minute))) {
- break;
- }
- }
- };
- DateTime.prototype.addSeconds = function (seconds, filtered, byhour, byminute, bysecond) {
- if (filtered) {
- // Jump to one iteration before next day
- this.second +=
- Math.floor((86399 - (this.hour * 3600 + this.minute * 60 + this.second)) / seconds) * seconds;
- }
- while (true) {
- this.second += seconds;
- var _a = Object(helpers["a" /* divmod */])(this.second, 60), minuteDiv = _a.div, secondMod = _a.mod;
- if (minuteDiv) {
- this.second = secondMod;
- this.addMinutes(minuteDiv, false, byhour, byminute);
- }
- if ((Object(helpers["b" /* empty */])(byhour) || Object(helpers["c" /* includes */])(byhour, this.hour)) &&
- (Object(helpers["b" /* empty */])(byminute) || Object(helpers["c" /* includes */])(byminute, this.minute)) &&
- (Object(helpers["b" /* empty */])(bysecond) || Object(helpers["c" /* includes */])(bysecond, this.second))) {
- break;
- }
- }
- };
- DateTime.prototype.fixDay = function () {
- if (this.day <= 28) {
- return;
- }
- var daysinmonth = dateutil_dateutil.monthRange(this.year, this.month - 1)[1];
- if (this.day <= daysinmonth) {
- return;
- }
- while (this.day > daysinmonth) {
- this.day -= daysinmonth;
- ++this.month;
- if (this.month === 13) {
- this.month = 1;
- ++this.year;
- if (this.year > dateutil_dateutil.MAXYEAR) {
- return;
- }
- }
- daysinmonth = dateutil_dateutil.monthRange(this.year, this.month - 1)[1];
- }
- };
- DateTime.prototype.add = function (options, filtered) {
- var freq = options.freq, interval = options.interval, wkst = options.wkst, byhour = options.byhour, byminute = options.byminute, bysecond = options.bysecond;
- switch (freq) {
- case Frequency.YEARLY: return this.addYears(interval);
- case Frequency.MONTHLY: return this.addMonths(interval);
- case Frequency.WEEKLY: return this.addWeekly(interval, wkst);
- case Frequency.DAILY: return this.addDaily(interval);
- case Frequency.HOURLY: return this.addHours(interval, filtered, byhour);
- case Frequency.MINUTELY: return this.addMinutes(interval, filtered, byhour, byminute);
- case Frequency.SECONDLY: return this.addSeconds(interval, filtered, byhour, byminute, bysecond);
- }
- };
- return DateTime;
-}(Time));
-
-
-// CONCATENATED MODULE: ./src/parseoptions.ts
-
-
-
-
-
-
-
-function initializeOptions(options) {
- var invalid = [];
- var keys = Object.keys(options);
- // Shallow copy for options and origOptions and check for invalid
- for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
- var key = keys_1[_i];
- if (!Object(helpers["c" /* includes */])(rrule_defaultKeys, key))
- invalid.push(key);
- if (src_dateutil.isDate(options[key]) && !src_dateutil.isValidDate(options[key]))
- invalid.push(key);
- }
- if (invalid.length) {
- throw new Error('Invalid options: ' + invalid.join(', '));
- }
- return __assign({}, options);
-}
-function parseOptions(options) {
- var opts = __assign(__assign({}, DEFAULT_OPTIONS), initializeOptions(options));
- if (Object(helpers["f" /* isPresent */])(opts.byeaster))
- opts.freq = src_rrule.YEARLY;
- if (!(Object(helpers["f" /* isPresent */])(opts.freq) && src_rrule.FREQUENCIES[opts.freq])) {
- throw new Error("Invalid frequency: " + opts.freq + " " + options.freq);
- }
- if (!opts.dtstart)
- opts.dtstart = new Date(new Date().setMilliseconds(0));
- if (!Object(helpers["f" /* isPresent */])(opts.wkst)) {
- opts.wkst = src_rrule.MO.weekday;
- }
- else if (Object(helpers["e" /* isNumber */])(opts.wkst)) {
- // cool, just keep it like that
- }
- else {
- opts.wkst = opts.wkst.weekday;
- }
- if (Object(helpers["f" /* isPresent */])(opts.bysetpos)) {
- if (Object(helpers["e" /* isNumber */])(opts.bysetpos))
- opts.bysetpos = [opts.bysetpos];
- for (var i = 0; i < opts.bysetpos.length; i++) {
- var v = opts.bysetpos[i];
- if (v === 0 || !(v >= -366 && v <= 366)) {
- throw new Error('bysetpos must be between 1 and 366,' + ' or between -366 and -1');
- }
- }
- }
- if (!(Boolean(opts.byweekno) ||
- Object(helpers["h" /* notEmpty */])(opts.byweekno) ||
- Object(helpers["h" /* notEmpty */])(opts.byyearday) ||
- Boolean(opts.bymonthday) ||
- Object(helpers["h" /* notEmpty */])(opts.bymonthday) ||
- Object(helpers["f" /* isPresent */])(opts.byweekday) ||
- Object(helpers["f" /* isPresent */])(opts.byeaster))) {
- switch (opts.freq) {
- case src_rrule.YEARLY:
- if (!opts.bymonth)
- opts.bymonth = opts.dtstart.getUTCMonth() + 1;
- opts.bymonthday = opts.dtstart.getUTCDate();
- break;
- case src_rrule.MONTHLY:
- opts.bymonthday = opts.dtstart.getUTCDate();
- break;
- case src_rrule.WEEKLY:
- opts.byweekday = [src_dateutil.getWeekday(opts.dtstart)];
- break;
- }
- }
- // bymonth
- if (Object(helpers["f" /* isPresent */])(opts.bymonth) && !Object(helpers["d" /* isArray */])(opts.bymonth)) {
- opts.bymonth = [opts.bymonth];
- }
- // byyearday
- if (Object(helpers["f" /* isPresent */])(opts.byyearday) &&
- !Object(helpers["d" /* isArray */])(opts.byyearday) &&
- Object(helpers["e" /* isNumber */])(opts.byyearday)) {
- opts.byyearday = [opts.byyearday];
- }
- // bymonthday
- if (!Object(helpers["f" /* isPresent */])(opts.bymonthday)) {
- opts.bymonthday = [];
- opts.bynmonthday = [];
- }
- else if (Object(helpers["d" /* isArray */])(opts.bymonthday)) {
- var bymonthday = [];
- var bynmonthday = [];
- for (var i = 0; i < opts.bymonthday.length; i++) {
- var v = opts.bymonthday[i];
- if (v > 0) {
- bymonthday.push(v);
- }
- else if (v < 0) {
- bynmonthday.push(v);
- }
- }
- opts.bymonthday = bymonthday;
- opts.bynmonthday = bynmonthday;
- }
- else if (opts.bymonthday < 0) {
- opts.bynmonthday = [opts.bymonthday];
- opts.bymonthday = [];
- }
- else {
- opts.bynmonthday = [];
- opts.bymonthday = [opts.bymonthday];
- }
- // byweekno
- if (Object(helpers["f" /* isPresent */])(opts.byweekno) && !Object(helpers["d" /* isArray */])(opts.byweekno)) {
- opts.byweekno = [opts.byweekno];
- }
- // byweekday / bynweekday
- if (!Object(helpers["f" /* isPresent */])(opts.byweekday)) {
- opts.bynweekday = null;
- }
- else if (Object(helpers["e" /* isNumber */])(opts.byweekday)) {
- opts.byweekday = [opts.byweekday];
- opts.bynweekday = null;
- }
- else if (Object(helpers["g" /* isWeekdayStr */])(opts.byweekday)) {
- opts.byweekday = [weekday["b" /* Weekday */].fromStr(opts.byweekday).weekday];
- opts.bynweekday = null;
- }
- else if (opts.byweekday instanceof weekday["b" /* Weekday */]) {
- if (!opts.byweekday.n || opts.freq > src_rrule.MONTHLY) {
- opts.byweekday = [opts.byweekday.weekday];
- opts.bynweekday = null;
- }
- else {
- opts.bynweekday = [[opts.byweekday.weekday, opts.byweekday.n]];
- opts.byweekday = null;
- }
- }
- else {
- var byweekday = [];
- var bynweekday = [];
- for (var i = 0; i < opts.byweekday.length; i++) {
- var wday = opts.byweekday[i];
- if (Object(helpers["e" /* isNumber */])(wday)) {
- byweekday.push(wday);
- continue;
- }
- else if (Object(helpers["g" /* isWeekdayStr */])(wday)) {
- byweekday.push(weekday["b" /* Weekday */].fromStr(wday).weekday);
- continue;
- }
- if (!wday.n || opts.freq > src_rrule.MONTHLY) {
- byweekday.push(wday.weekday);
- }
- else {
- bynweekday.push([wday.weekday, wday.n]);
- }
- }
- opts.byweekday = Object(helpers["h" /* notEmpty */])(byweekday) ? byweekday : null;
- opts.bynweekday = Object(helpers["h" /* notEmpty */])(bynweekday) ? bynweekday : null;
- }
- // byhour
- if (!Object(helpers["f" /* isPresent */])(opts.byhour)) {
- opts.byhour =
- opts.freq < src_rrule.HOURLY ? [opts.dtstart.getUTCHours()] : null;
- }
- else if (Object(helpers["e" /* isNumber */])(opts.byhour)) {
- opts.byhour = [opts.byhour];
- }
- // byminute
- if (!Object(helpers["f" /* isPresent */])(opts.byminute)) {
- opts.byminute =
- opts.freq < src_rrule.MINUTELY ? [opts.dtstart.getUTCMinutes()] : null;
- }
- else if (Object(helpers["e" /* isNumber */])(opts.byminute)) {
- opts.byminute = [opts.byminute];
- }
- // bysecond
- if (!Object(helpers["f" /* isPresent */])(opts.bysecond)) {
- opts.bysecond =
- opts.freq < src_rrule.SECONDLY ? [opts.dtstart.getUTCSeconds()] : null;
- }
- else if (Object(helpers["e" /* isNumber */])(opts.bysecond)) {
- opts.bysecond = [opts.bysecond];
- }
- return { parsedOptions: opts };
-}
-function buildTimeset(opts) {
- var millisecondModulo = opts.dtstart.getTime() % 1000;
- if (!freqIsDailyOrGreater(opts.freq)) {
- return [];
- }
- var timeset = [];
- opts.byhour.forEach(function (hour) {
- opts.byminute.forEach(function (minute) {
- opts.bysecond.forEach(function (second) {
- timeset.push(new Time(hour, minute, second, millisecondModulo));
- });
- });
- });
- return timeset;
-}
-
-// CONCATENATED MODULE: ./src/parsestring.ts
-
-
-
-
-
-function parseString(rfcString) {
- var options = rfcString.split('\n').map(parseLine).filter(function (x) { return x !== null; });
- return __assign(__assign({}, options[0]), options[1]);
-}
-function parseDtstart(line) {
- var options = {};
- var dtstartWithZone = /DTSTART(?:;TZID=([^:=]+?))?(?::|=)([^;\s]+)/i.exec(line);
- if (!dtstartWithZone) {
- return options;
- }
- var _ = dtstartWithZone[0], tzid = dtstartWithZone[1], dtstart = dtstartWithZone[2];
- if (tzid) {
- options.tzid = tzid;
- }
- options.dtstart = src_dateutil.untilStringToDate(dtstart);
- return options;
-}
-function parseLine(rfcString) {
- rfcString = rfcString.replace(/^\s+|\s+$/, '');
- if (!rfcString.length)
- return null;
- var header = /^([A-Z]+?)[:;]/.exec(rfcString.toUpperCase());
- if (!header) {
- return parseRrule(rfcString);
- }
- var _ = header[0], key = header[1];
- switch (key.toUpperCase()) {
- case 'RRULE':
- case 'EXRULE':
- return parseRrule(rfcString);
- case 'DTSTART':
- return parseDtstart(rfcString);
- default:
- throw new Error("Unsupported RFC prop " + key + " in " + rfcString);
- }
-}
-function parseRrule(line) {
- var strippedLine = line.replace(/^RRULE:/i, '');
- var options = parseDtstart(strippedLine);
- var attrs = line.replace(/^(?:RRULE|EXRULE):/i, '').split(';');
- attrs.forEach(function (attr) {
- var _a = attr.split('='), key = _a[0], value = _a[1];
- switch (key.toUpperCase()) {
- case 'FREQ':
- options.freq = Frequency[value.toUpperCase()];
- break;
- case 'WKST':
- options.wkst = Days[value.toUpperCase()];
- break;
- case 'COUNT':
- case 'INTERVAL':
- case 'BYSETPOS':
- case 'BYMONTH':
- case 'BYMONTHDAY':
- case 'BYYEARDAY':
- case 'BYWEEKNO':
- case 'BYHOUR':
- case 'BYMINUTE':
- case 'BYSECOND':
- var num = parseNumber(value);
- var optionKey = key.toLowerCase();
- // @ts-ignore
- options[optionKey] = num;
- break;
- case 'BYWEEKDAY':
- case 'BYDAY':
- options.byweekday = parseWeekday(value);
- break;
- case 'DTSTART':
- case 'TZID':
- // for backwards compatibility
- var dtstart = parseDtstart(line);
- options.tzid = dtstart.tzid;
- options.dtstart = dtstart.dtstart;
- break;
- case 'UNTIL':
- options.until = src_dateutil.untilStringToDate(value);
- break;
- case 'BYEASTER':
- options.byeaster = Number(value);
- break;
- default:
- throw new Error("Unknown RRULE property '" + key + "'");
- }
- });
- return options;
-}
-function parseNumber(value) {
- if (value.indexOf(',') !== -1) {
- var values = value.split(',');
- return values.map(parseIndividualNumber);
- }
- return parseIndividualNumber(value);
-}
-function parseIndividualNumber(value) {
- if (/^[+-]?\d+$/.test(value)) {
- return Number(value);
- }
- return value;
-}
-function parseWeekday(value) {
- var days = value.split(',');
- return days.map(function (day) {
- if (day.length === 2) {
- // MO, TU, ...
- return Days[day]; // wday instanceof Weekday
- }
- // -1MO, +3FR, 1SO, 13TU ...
- var parts = day.match(/^([+-]?\d{1,2})([A-Z]{2})$/);
- var n = Number(parts[1]);
- var wdaypart = parts[2];
- var wday = Days[wdaypart].weekday;
- return new weekday["b" /* Weekday */](wday, n);
- });
-}
-
-// EXTERNAL MODULE: external "luxon"
-var external_luxon_ = __webpack_require__(3);
-
-// CONCATENATED MODULE: ./src/datewithzone.ts
-
-
-var datewithzone_DateWithZone = /** @class */ (function () {
- function DateWithZone(date, tzid) {
- this.date = date;
- this.tzid = tzid;
- }
- Object.defineProperty(DateWithZone.prototype, "isUTC", {
- get: function () {
- return !this.tzid || this.tzid.toUpperCase() === 'UTC';
- },
- enumerable: true,
- configurable: true
- });
- DateWithZone.prototype.toString = function () {
- var datestr = src_dateutil.timeToUntilString(this.date.getTime(), this.isUTC);
- if (!this.isUTC) {
- return ";TZID=" + this.tzid + ":" + datestr;
- }
- return ":" + datestr;
- };
- DateWithZone.prototype.getTime = function () {
- return this.date.getTime();
- };
- DateWithZone.prototype.rezonedDate = function () {
- if (this.isUTC) {
- return this.date;
- }
- try {
- var datetime = external_luxon_["DateTime"]
- .fromJSDate(this.date);
- var rezoned = datetime.setZone(this.tzid, { keepLocalTime: true });
- return rezoned.toJSDate();
- }
- catch (e) {
- if (e instanceof TypeError) {
- console.error('Using TZID without Luxon available is unsupported. Returned times are in UTC, not the requested time zone');
- }
- return this.date;
- }
- };
- return DateWithZone;
-}());
-
-
-// CONCATENATED MODULE: ./src/optionstostring.ts
-
-
-
-
-
-function optionsToString(options) {
- var rrule = [];
- var dtstart = '';
- var keys = Object.keys(options);
- var defaultKeys = Object.keys(DEFAULT_OPTIONS);
- for (var i = 0; i < keys.length; i++) {
- if (keys[i] === 'tzid')
- continue;
- if (!Object(helpers["c" /* includes */])(defaultKeys, keys[i]))
- continue;
- var key = keys[i].toUpperCase();
- var value = options[keys[i]];
- var outValue = '';
- if (!Object(helpers["f" /* isPresent */])(value) || (Object(helpers["d" /* isArray */])(value) && !value.length))
- continue;
- switch (key) {
- case 'FREQ':
- outValue = src_rrule.FREQUENCIES[options.freq];
- break;
- case 'WKST':
- if (Object(helpers["e" /* isNumber */])(value)) {
- outValue = new weekday["b" /* Weekday */](value).toString();
- }
- else {
- outValue = value.toString();
- }
- break;
- case 'BYWEEKDAY':
- /*
- NOTE: BYWEEKDAY is a special case.
- RRule() deconstructs the rule.options.byweekday array
- into an array of Weekday arguments.
- On the other hand, rule.origOptions is an array of Weekdays.
- We need to handle both cases here.
- It might be worth change RRule to keep the Weekdays.
-
- Also, BYWEEKDAY (used by RRule) vs. BYDAY (RFC)
-
- */
- key = 'BYDAY';
- outValue = Object(helpers["n" /* toArray */])(value).map(function (wday) {
- if (wday instanceof weekday["b" /* Weekday */]) {
- return wday;
- }
- if (Object(helpers["d" /* isArray */])(wday)) {
- return new weekday["b" /* Weekday */](wday[0], wday[1]);
- }
- return new weekday["b" /* Weekday */](wday);
- }).toString();
- break;
- case 'DTSTART':
- dtstart = buildDtstart(value, options.tzid);
- break;
- case 'UNTIL':
- outValue = src_dateutil.timeToUntilString(value, !options.tzid);
- break;
- default:
- if (Object(helpers["d" /* isArray */])(value)) {
- var strValues = [];
- for (var j = 0; j < value.length; j++) {
- strValues[j] = String(value[j]);
- }
- outValue = strValues.toString();
- }
- else {
- outValue = String(value);
- }
- }
- if (outValue) {
- rrule.push([key, outValue]);
- }
- }
- var rules = rrule.map(function (_a) {
- var key = _a[0], value = _a[1];
- return key + "=" + value.toString();
- }).join(';');
- var ruleString = '';
- if (rules !== '') {
- ruleString = "RRULE:" + rules;
- }
- return [dtstart, ruleString].filter(function (x) { return !!x; }).join('\n');
-}
-function buildDtstart(dtstart, tzid) {
- if (!dtstart) {
- return '';
- }
- return 'DTSTART' + new datewithzone_DateWithZone(new Date(dtstart), tzid).toString();
-}
-
-// CONCATENATED MODULE: ./src/cache.ts
-
-
-
-var cache_Cache = /** @class */ (function () {
- function Cache() {
- this.all = false;
- this.before = [];
- this.after = [];
- this.between = [];
- }
- /**
- * @param {String} what - all/before/after/between
- * @param {Array,Date} value - an array of dates, one date, or null
- * @param {Object?} args - _iter arguments
- */
- Cache.prototype._cacheAdd = function (what, value, args) {
- if (value) {
- value =
- value instanceof Date
- ? src_dateutil.clone(value)
- : src_dateutil.cloneDates(value);
- }
- if (what === 'all') {
- this.all = value;
- }
- else {
- args._value = value;
- this[what].push(args);
- }
- };
- /**
- * @return false - not in the cache
- * null - cached, but zero occurrences (before/after)
- * Date - cached (before/after)
- * [] - cached, but zero occurrences (all/between)
- * [Date1, DateN] - cached (all/between)
- */
- Cache.prototype._cacheGet = function (what, args) {
- var cached = false;
- var argsKeys = args ? Object.keys(args) : [];
- var findCacheDiff = function (item) {
- for (var i = 0; i < argsKeys.length; i++) {
- var key = argsKeys[i];
- if (String(args[key]) !== String(item[key])) {
- return true;
- }
- }
- return false;
- };
- var cachedObject = this[what];
- if (what === 'all') {
- cached = this.all;
- }
- else if (Object(helpers["d" /* isArray */])(cachedObject)) {
- // Let's see whether we've already called the
- // 'what' method with the same 'args'
- for (var i = 0; i < cachedObject.length; i++) {
- var item = cachedObject[i];
- if (argsKeys.length && findCacheDiff(item))
- continue;
- cached = item._value;
- break;
- }
- }
- if (!cached && this.all) {
- // Not in the cache, but we already know all the occurrences,
- // so we can find the correct dates from the cached ones.
- var iterResult = new iterresult(what, args);
- for (var i = 0; i < this.all.length; i++) {
- if (!iterResult.accept(this.all[i]))
- break;
- }
- cached = iterResult.getValue();
- this._cacheAdd(what, cached, args);
- }
- return Object(helpers["d" /* isArray */])(cached)
- ? src_dateutil.cloneDates(cached)
- : cached instanceof Date
- ? src_dateutil.clone(cached)
- : cached;
- };
- return Cache;
-}());
-
-
-// CONCATENATED MODULE: ./src/masks.ts
-
-
-// =============================================================================
-// Date masks
-// =============================================================================
-// Every mask is 7 days longer to handle cross-year weekly periods.
-var M365MASK = __spreadArrays(Object(helpers["l" /* repeat */])(1, 31), Object(helpers["l" /* repeat */])(2, 28), Object(helpers["l" /* repeat */])(3, 31), Object(helpers["l" /* repeat */])(4, 30), Object(helpers["l" /* repeat */])(5, 31), Object(helpers["l" /* repeat */])(6, 30), Object(helpers["l" /* repeat */])(7, 31), Object(helpers["l" /* repeat */])(8, 31), Object(helpers["l" /* repeat */])(9, 30), Object(helpers["l" /* repeat */])(10, 31), Object(helpers["l" /* repeat */])(11, 30), Object(helpers["l" /* repeat */])(12, 31), Object(helpers["l" /* repeat */])(1, 7));
-var M366MASK = __spreadArrays(Object(helpers["l" /* repeat */])(1, 31), Object(helpers["l" /* repeat */])(2, 29), Object(helpers["l" /* repeat */])(3, 31), Object(helpers["l" /* repeat */])(4, 30), Object(helpers["l" /* repeat */])(5, 31), Object(helpers["l" /* repeat */])(6, 30), Object(helpers["l" /* repeat */])(7, 31), Object(helpers["l" /* repeat */])(8, 31), Object(helpers["l" /* repeat */])(9, 30), Object(helpers["l" /* repeat */])(10, 31), Object(helpers["l" /* repeat */])(11, 30), Object(helpers["l" /* repeat */])(12, 31), Object(helpers["l" /* repeat */])(1, 7));
-var M28 = Object(helpers["k" /* range */])(1, 29);
-var M29 = Object(helpers["k" /* range */])(1, 30);
-var M30 = Object(helpers["k" /* range */])(1, 31);
-var M31 = Object(helpers["k" /* range */])(1, 32);
-var MDAY366MASK = __spreadArrays(M31, M29, M31, M30, M31, M30, M31, M31, M30, M31, M30, M31, M31.slice(0, 7));
-var MDAY365MASK = __spreadArrays(M31, M28, M31, M30, M31, M30, M31, M31, M30, M31, M30, M31, M31.slice(0, 7));
-var NM28 = Object(helpers["k" /* range */])(-28, 0);
-var NM29 = Object(helpers["k" /* range */])(-29, 0);
-var NM30 = Object(helpers["k" /* range */])(-30, 0);
-var NM31 = Object(helpers["k" /* range */])(-31, 0);
-var NMDAY366MASK = __spreadArrays(NM31, NM29, NM31, NM30, NM31, NM30, NM31, NM31, NM30, NM31, NM30, NM31, NM31.slice(0, 7));
-var NMDAY365MASK = __spreadArrays(NM31, NM28, NM31, NM30, NM31, NM30, NM31, NM31, NM30, NM31, NM30, NM31, NM31.slice(0, 7));
-var M366RANGE = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];
-var M365RANGE = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
-var WDAYMASK = (function () {
- var wdaymask = [];
- for (var i = 0; i < 55; i++)
- wdaymask = wdaymask.concat(Object(helpers["k" /* range */])(7));
- return wdaymask;
-})();
-
-
-// CONCATENATED MODULE: ./src/iterinfo/yearinfo.ts
-
-
-
-
-function rebuildYear(year, options) {
- var firstyday = new Date(Date.UTC(year, 0, 1));
- var yearlen = src_dateutil.isLeapYear(year) ? 366 : 365;
- var nextyearlen = src_dateutil.isLeapYear(year + 1) ? 366 : 365;
- var yearordinal = src_dateutil.toOrdinal(firstyday);
- var yearweekday = src_dateutil.getWeekday(firstyday);
- var result = __assign(__assign({ yearlen: yearlen,
- nextyearlen: nextyearlen,
- yearordinal: yearordinal,
- yearweekday: yearweekday }, baseYearMasks(year)), { wnomask: null });
- if (Object(helpers["b" /* empty */])(options.byweekno)) {
- return result;
- }
- result.wnomask = Object(helpers["l" /* repeat */])(0, yearlen + 7);
- var firstwkst;
- var wyearlen;
- var no1wkst = firstwkst = Object(helpers["j" /* pymod */])(7 - yearweekday + options.wkst, 7);
- if (no1wkst >= 4) {
- no1wkst = 0;
- // Number of days in the year, plus the days we got
- // from last year.
- wyearlen =
- result.yearlen + Object(helpers["j" /* pymod */])(yearweekday - options.wkst, 7);
- }
- else {
- // Number of days in the year, minus the days we
- // left in last year.
- wyearlen = yearlen - no1wkst;
- }
- var div = Math.floor(wyearlen / 7);
- var mod = Object(helpers["j" /* pymod */])(wyearlen, 7);
- var numweeks = Math.floor(div + mod / 4);
- for (var j = 0; j < options.byweekno.length; j++) {
- var n = options.byweekno[j];
- if (n < 0) {
- n += numweeks + 1;
- }
- if (!(n > 0 && n <= numweeks)) {
- continue;
- }
- var i = void 0;
- if (n > 1) {
- i = no1wkst + (n - 1) * 7;
- if (no1wkst !== firstwkst) {
- i -= 7 - firstwkst;
- }
- }
- else {
- i = no1wkst;
- }
- for (var k = 0; k < 7; k++) {
- result.wnomask[i] = 1;
- i++;
- if (result.wdaymask[i] === options.wkst)
- break;
- }
- }
- if (Object(helpers["c" /* includes */])(options.byweekno, 1)) {
- // Check week number 1 of next year as well
- // orig-TODO : Check -numweeks for next year.
- var i = no1wkst + numweeks * 7;
- if (no1wkst !== firstwkst)
- i -= 7 - firstwkst;
- if (i < yearlen) {
- // If week starts in next year, we
- // don't care about it.
- for (var j = 0; j < 7; j++) {
- result.wnomask[i] = 1;
- i += 1;
- if (result.wdaymask[i] === options.wkst)
- break;
- }
- }
- }
- if (no1wkst) {
- // Check last week number of last year as
- // well. If no1wkst is 0, either the year
- // started on week start, or week number 1
- // got days from last year, so there are no
- // days from last year's last week number in
- // this year.
- var lnumweeks = void 0;
- if (!Object(helpers["c" /* includes */])(options.byweekno, -1)) {
- var lyearweekday = src_dateutil.getWeekday(new Date(Date.UTC(year - 1, 0, 1)));
- var lno1wkst = Object(helpers["j" /* pymod */])(7 - lyearweekday.valueOf() + options.wkst, 7);
- var lyearlen = src_dateutil.isLeapYear(year - 1) ? 366 : 365;
- var weekst = void 0;
- if (lno1wkst >= 4) {
- lno1wkst = 0;
- weekst = lyearlen + Object(helpers["j" /* pymod */])(lyearweekday - options.wkst, 7);
- }
- else {
- weekst = yearlen - no1wkst;
- }
- lnumweeks = Math.floor(52 + Object(helpers["j" /* pymod */])(weekst, 7) / 4);
- }
- else {
- lnumweeks = -1;
- }
- if (Object(helpers["c" /* includes */])(options.byweekno, lnumweeks)) {
- for (var i = 0; i < no1wkst; i++)
- result.wnomask[i] = 1;
- }
- }
- return result;
-}
-function baseYearMasks(year) {
- var yearlen = src_dateutil.isLeapYear(year) ? 366 : 365;
- var firstyday = new Date(Date.UTC(year, 0, 1));
- var wday = src_dateutil.getWeekday(firstyday);
- if (yearlen === 365) {
- return {
- mmask: M365MASK,
- mdaymask: MDAY365MASK,
- nmdaymask: NMDAY365MASK,
- wdaymask: WDAYMASK.slice(wday),
- mrange: M365RANGE
- };
- }
- return {
- mmask: M366MASK,
- mdaymask: MDAY366MASK,
- nmdaymask: NMDAY366MASK,
- wdaymask: WDAYMASK.slice(wday),
- mrange: M366RANGE
- };
-}
-
-// CONCATENATED MODULE: ./src/iterinfo/monthinfo.ts
-
-
-function rebuildMonth(year, month, yearlen, mrange, wdaymask, options) {
- var result = {
- lastyear: year,
- lastmonth: month,
- nwdaymask: []
- };
- var ranges = [];
- if (options.freq === src_rrule.YEARLY) {
- if (Object(helpers["b" /* empty */])(options.bymonth)) {
- ranges = [[0, yearlen]];
- }
- else {
- for (var j = 0; j < options.bymonth.length; j++) {
- month = options.bymonth[j];
- ranges.push(mrange.slice(month - 1, month + 1));
- }
- }
- }
- else if (options.freq === src_rrule.MONTHLY) {
- ranges = [mrange.slice(month - 1, month + 1)];
- }
- if (Object(helpers["b" /* empty */])(ranges)) {
- return result;
- }
- // Weekly frequency won't get here, so we may not
- // care about cross-year weekly periods.
- result.nwdaymask = Object(helpers["l" /* repeat */])(0, yearlen);
- for (var j = 0; j < ranges.length; j++) {
- var rang = ranges[j];
- var first = rang[0];
- var last = rang[1] - 1;
- for (var k = 0; k < options.bynweekday.length; k++) {
- var i = void 0;
- var _a = options.bynweekday[k], wday = _a[0], n = _a[1];
- if (n < 0) {
- i = last + (n + 1) * 7;
- i -= Object(helpers["j" /* pymod */])(wdaymask[i] - wday, 7);
- }
- else {
- i = first + (n - 1) * 7;
- i += Object(helpers["j" /* pymod */])(7 - wdaymask[i] + wday, 7);
- }
- if (first <= i && i <= last)
- result.nwdaymask[i] = 1;
- }
- }
- return result;
-}
-
-// CONCATENATED MODULE: ./src/iterinfo/easter.ts
-function easter(y, offset) {
- if (offset === void 0) { offset = 0; }
- var a = y % 19;
- var b = Math.floor(y / 100);
- var c = y % 100;
- var d = Math.floor(b / 4);
- var e = b % 4;
- var f = Math.floor((b + 8) / 25);
- var g = Math.floor((b - f + 1) / 3);
- var h = Math.floor(19 * a + b - d - g + 15) % 30;
- var i = Math.floor(c / 4);
- var k = c % 4;
- var l = Math.floor(32 + 2 * e + 2 * i - h - k) % 7;
- var m = Math.floor((a + 11 * h + 22 * l) / 451);
- var month = Math.floor((h + l - 7 * m + 114) / 31);
- var day = ((h + l - 7 * m + 114) % 31) + 1;
- var date = Date.UTC(y, month - 1, day + offset);
- var yearStart = Date.UTC(y, 0, 1);
- return [Math.ceil((date - yearStart) / (1000 * 60 * 60 * 24))];
-}
-
-// CONCATENATED MODULE: ./src/iterinfo/index.ts
-
-
-
-
-
-
-
-// =============================================================================
-// Iterinfo
-// =============================================================================
-var iterinfo_Iterinfo = /** @class */ (function () {
- function Iterinfo(options) {
- this.options = options;
- }
- Iterinfo.prototype.rebuild = function (year, month) {
- var options = this.options;
- if (year !== this.lastyear) {
- this.yearinfo = rebuildYear(year, options);
- }
- if (Object(helpers["h" /* notEmpty */])(options.bynweekday) &&
- (month !== this.lastmonth || year !== this.lastyear)) {
- var _a = this.yearinfo, yearlen = _a.yearlen, mrange = _a.mrange, wdaymask = _a.wdaymask;
- this.monthinfo = rebuildMonth(year, month, yearlen, mrange, wdaymask, options);
- }
- if (Object(helpers["f" /* isPresent */])(options.byeaster)) {
- this.eastermask = easter(year, options.byeaster);
- }
- };
- Object.defineProperty(Iterinfo.prototype, "lastyear", {
- get: function () {
- return this.monthinfo ? this.monthinfo.lastyear : null;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "lastmonth", {
- get: function () {
- return this.monthinfo ? this.monthinfo.lastmonth : null;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "yearlen", {
- get: function () {
- return this.yearinfo.yearlen;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "yearordinal", {
- get: function () {
- return this.yearinfo.yearordinal;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "mrange", {
- get: function () {
- return this.yearinfo.mrange;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "wdaymask", {
- get: function () {
- return this.yearinfo.wdaymask;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "mmask", {
- get: function () {
- return this.yearinfo.mmask;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "wnomask", {
- get: function () {
- return this.yearinfo.wnomask;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "nwdaymask", {
- get: function () {
- return this.monthinfo ? this.monthinfo.nwdaymask : [];
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "nextyearlen", {
- get: function () {
- return this.yearinfo.nextyearlen;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "mdaymask", {
- get: function () {
- return this.yearinfo.mdaymask;
- },
- enumerable: true,
- configurable: true
- });
- Object.defineProperty(Iterinfo.prototype, "nmdaymask", {
- get: function () {
- return this.yearinfo.nmdaymask;
- },
- enumerable: true,
- configurable: true
- });
- Iterinfo.prototype.ydayset = function () {
- return [Object(helpers["k" /* range */])(this.yearlen), 0, this.yearlen];
- };
- Iterinfo.prototype.mdayset = function (_, month, __) {
- var start = this.mrange[month - 1];
- var end = this.mrange[month];
- var set = Object(helpers["l" /* repeat */])(null, this.yearlen);
- for (var i = start; i < end; i++)
- set[i] = i;
- return [set, start, end];
- };
- Iterinfo.prototype.wdayset = function (year, month, day) {
- // We need to handle cross-year weeks here.
- var set = Object(helpers["l" /* repeat */])(null, this.yearlen + 7);
- var i = src_dateutil.toOrdinal(new Date(Date.UTC(year, month - 1, day))) -
- this.yearordinal;
- var start = i;
- for (var j = 0; j < 7; j++) {
- set[i] = i;
- ++i;
- if (this.wdaymask[i] === this.options.wkst)
- break;
- }
- return [set, start, i];
- };
- Iterinfo.prototype.ddayset = function (year, month, day) {
- var set = Object(helpers["l" /* repeat */])(null, this.yearlen);
- var i = src_dateutil.toOrdinal(new Date(Date.UTC(year, month - 1, day))) -
- this.yearordinal;
- set[i] = i;
- return [set, i, i + 1];
- };
- Iterinfo.prototype.htimeset = function (hour, _, second, millisecond) {
- var _this = this;
- var set = [];
- this.options.byminute.forEach(function (minute) {
- set = set.concat(_this.mtimeset(hour, minute, second, millisecond));
- });
- src_dateutil.sort(set);
- return set;
- };
- Iterinfo.prototype.mtimeset = function (hour, minute, _, millisecond) {
- var set = this.options.bysecond.map(function (second) {
- return new Time(hour, minute, second, millisecond);
- });
- src_dateutil.sort(set);
- return set;
- };
- Iterinfo.prototype.stimeset = function (hour, minute, second, millisecond) {
- return [new Time(hour, minute, second, millisecond)];
- };
- Iterinfo.prototype.getdayset = function (freq) {
- switch (freq) {
- case Frequency.YEARLY: return this.ydayset.bind(this);
- case Frequency.MONTHLY: return this.mdayset.bind(this);
- case Frequency.WEEKLY: return this.wdayset.bind(this);
- case Frequency.DAILY: return this.ddayset.bind(this);
- default: return this.ddayset.bind(this);
- }
- };
- Iterinfo.prototype.gettimeset = function (freq) {
- switch (freq) {
- case Frequency.HOURLY: return this.htimeset.bind(this);
- case Frequency.MINUTELY: return this.mtimeset.bind(this);
- case Frequency.SECONDLY: return this.stimeset.bind(this);
- }
- };
- return Iterinfo;
-}());
-/* harmony default export */ var iterinfo = (iterinfo_Iterinfo);
-
-// CONCATENATED MODULE: ./src/iter/poslist.ts
-
-
-function buildPoslist(bysetpos, timeset, start, end, ii, dayset) {
- var poslist = [];
- for (var j = 0; j < bysetpos.length; j++) {
- var daypos = void 0;
- var timepos = void 0;
- var pos = bysetpos[j];
- if (pos < 0) {
- daypos = Math.floor(pos / timeset.length);
- timepos = Object(helpers["j" /* pymod */])(pos, timeset.length);
- }
- else {
- daypos = Math.floor((pos - 1) / timeset.length);
- timepos = Object(helpers["j" /* pymod */])(pos - 1, timeset.length);
- }
- var tmp = [];
- for (var k = start; k < end; k++) {
- var val = dayset[k];
- if (!Object(helpers["f" /* isPresent */])(val))
- continue;
- tmp.push(val);
- }
- var i = void 0;
- if (daypos < 0) {
- i = tmp.slice(daypos)[0];
- }
- else {
- i = tmp[daypos];
- }
- var time = timeset[timepos];
- var date = src_dateutil.fromOrdinal(ii.yearordinal + i);
- var res = src_dateutil.combine(date, time);
- // XXX: can this ever be in the array?
- // - compare the actual date instead?
- if (!Object(helpers["c" /* includes */])(poslist, res))
- poslist.push(res);
- }
- src_dateutil.sort(poslist);
- return poslist;
-}
-
-// CONCATENATED MODULE: ./src/iter/index.ts
-
-
-
-
-
-
-
-
-
-function iter(iterResult, options) {
- var dtstart = options.dtstart, freq = options.freq, interval = options.interval, until = options.until, bysetpos = options.bysetpos;
- var count = options.count;
- if (count === 0 || interval === 0) {
- return emitResult(iterResult);
- }
- var counterDate = datetime_DateTime.fromDate(dtstart);
- var ii = new iterinfo(options);
- ii.rebuild(counterDate.year, counterDate.month);
- var timeset = makeTimeset(ii, counterDate, options);
- while (true) {
- var _a = ii.getdayset(freq)(counterDate.year, counterDate.month, counterDate.day), dayset = _a[0], start = _a[1], end = _a[2];
- var filtered = removeFilteredDays(dayset, start, end, ii, options);
- if (Object(helpers["h" /* notEmpty */])(bysetpos)) {
- var poslist = buildPoslist(bysetpos, timeset, start, end, ii, dayset);
- for (var j = 0; j < poslist.length; j++) {
- var res = poslist[j];
- if (until && res > until) {
- return emitResult(iterResult);
- }
- if (res >= dtstart) {
- var rezonedDate = rezoneIfNeeded(res, options);
- if (!iterResult.accept(rezonedDate)) {
- return emitResult(iterResult);
- }
- if (count) {
- --count;
- if (!count) {
- return emitResult(iterResult);
- }
- }
- }
- }
- }
- else {
- for (var j = start; j < end; j++) {
- var currentDay = dayset[j];
- if (!Object(helpers["f" /* isPresent */])(currentDay)) {
- continue;
- }
- var date = src_dateutil.fromOrdinal(ii.yearordinal + currentDay);
- for (var k = 0; k < timeset.length; k++) {
- var time = timeset[k];
- var res = src_dateutil.combine(date, time);
- if (until && res > until) {
- return emitResult(iterResult);
- }
- if (res >= dtstart) {
- var rezonedDate = rezoneIfNeeded(res, options);
- if (!iterResult.accept(rezonedDate)) {
- return emitResult(iterResult);
- }
- if (count) {
- --count;
- if (!count) {
- return emitResult(iterResult);
- }
- }
- }
- }
- }
- }
- if (options.interval === 0) {
- return emitResult(iterResult);
- }
- // Handle frequency and interval
- counterDate.add(options, filtered);
- if (counterDate.year > src_dateutil.MAXYEAR) {
- return emitResult(iterResult);
- }
- if (!freqIsDailyOrGreater(freq)) {
- timeset = ii.gettimeset(freq)(counterDate.hour, counterDate.minute, counterDate.second, 0);
- }
- ii.rebuild(counterDate.year, counterDate.month);
- }
-}
-function isFiltered(ii, currentDay, options) {
- var bymonth = options.bymonth, byweekno = options.byweekno, byweekday = options.byweekday, byeaster = options.byeaster, bymonthday = options.bymonthday, bynmonthday = options.bynmonthday, byyearday = options.byyearday;
- return ((Object(helpers["h" /* notEmpty */])(bymonth) && !Object(helpers["c" /* includes */])(bymonth, ii.mmask[currentDay])) ||
- (Object(helpers["h" /* notEmpty */])(byweekno) && !ii.wnomask[currentDay]) ||
- (Object(helpers["h" /* notEmpty */])(byweekday) && !Object(helpers["c" /* includes */])(byweekday, ii.wdaymask[currentDay])) ||
- (Object(helpers["h" /* notEmpty */])(ii.nwdaymask) && !ii.nwdaymask[currentDay]) ||
- (byeaster !== null && !Object(helpers["c" /* includes */])(ii.eastermask, currentDay)) ||
- ((Object(helpers["h" /* notEmpty */])(bymonthday) || Object(helpers["h" /* notEmpty */])(bynmonthday)) &&
- !Object(helpers["c" /* includes */])(bymonthday, ii.mdaymask[currentDay]) &&
- !Object(helpers["c" /* includes */])(bynmonthday, ii.nmdaymask[currentDay])) ||
- (Object(helpers["h" /* notEmpty */])(byyearday) &&
- ((currentDay < ii.yearlen &&
- !Object(helpers["c" /* includes */])(byyearday, currentDay + 1) &&
- !Object(helpers["c" /* includes */])(byyearday, -ii.yearlen + currentDay)) ||
- (currentDay >= ii.yearlen &&
- !Object(helpers["c" /* includes */])(byyearday, currentDay + 1 - ii.yearlen) &&
- !Object(helpers["c" /* includes */])(byyearday, -ii.nextyearlen + currentDay - ii.yearlen)))));
-}
-function rezoneIfNeeded(date, options) {
- return new datewithzone_DateWithZone(date, options.tzid).rezonedDate();
-}
-function emitResult(iterResult) {
- return iterResult.getValue();
-}
-function removeFilteredDays(dayset, start, end, ii, options) {
- var filtered = false;
- for (var dayCounter = start; dayCounter < end; dayCounter++) {
- var currentDay = dayset[dayCounter];
- filtered = isFiltered(ii, currentDay, options);
- if (filtered)
- dayset[currentDay] = null;
- }
- return filtered;
-}
-function makeTimeset(ii, counterDate, options) {
- var freq = options.freq, byhour = options.byhour, byminute = options.byminute, bysecond = options.bysecond;
- if (freqIsDailyOrGreater(freq)) {
- return buildTimeset(options);
- }
- if ((freq >= src_rrule.HOURLY &&
- Object(helpers["h" /* notEmpty */])(byhour) &&
- !Object(helpers["c" /* includes */])(byhour, counterDate.hour)) ||
- (freq >= src_rrule.MINUTELY &&
- Object(helpers["h" /* notEmpty */])(byminute) &&
- !Object(helpers["c" /* includes */])(byminute, counterDate.minute)) ||
- (freq >= src_rrule.SECONDLY &&
- Object(helpers["h" /* notEmpty */])(bysecond) &&
- !Object(helpers["c" /* includes */])(bysecond, counterDate.second))) {
- return [];
- }
- return ii.gettimeset(freq)(counterDate.hour, counterDate.minute, counterDate.second, counterDate.millisecond);
-}
-
-// CONCATENATED MODULE: ./src/rrule.ts
-
-
-
-
-
-
-
-
-
-
-var getnlp = function () {
- // Lazy, runtime import to avoid circular refs.
- if (!getnlp._nlp) {
- getnlp._nlp = __webpack_require__(4);
- }
- return getnlp._nlp;
-};
-// =============================================================================
-// RRule
-// =============================================================================
-var Days = {
- MO: new weekday["b" /* Weekday */](0),
- TU: new weekday["b" /* Weekday */](1),
- WE: new weekday["b" /* Weekday */](2),
- TH: new weekday["b" /* Weekday */](3),
- FR: new weekday["b" /* Weekday */](4),
- SA: new weekday["b" /* Weekday */](5),
- SU: new weekday["b" /* Weekday */](6)
-};
-var DEFAULT_OPTIONS = {
- freq: Frequency.YEARLY,
- dtstart: null,
- interval: 1,
- wkst: Days.MO,
- count: null,
- until: null,
- tzid: null,
- bysetpos: null,
- bymonth: null,
- bymonthday: null,
- bynmonthday: null,
- byyearday: null,
- byweekno: null,
- byweekday: null,
- bynweekday: null,
- byhour: null,
- byminute: null,
- bysecond: null,
- byeaster: null
-};
-var rrule_defaultKeys = Object.keys(DEFAULT_OPTIONS);
-/**
- *
- * @param {Options?} options - see <http://labix.org/python-dateutil/#head-cf004ee9a75592797e076752b2a889c10f445418>
- * The only required option is `freq`, one of RRule.YEARLY, RRule.MONTHLY, ...
- * @constructor
- */
-var rrule_RRule = /** @class */ (function () {
- function RRule(options, noCache) {
- if (options === void 0) { options = {}; }
- if (noCache === void 0) { noCache = false; }
- // RFC string
- this._cache = noCache ? null : new cache_Cache();
- // used by toString()
- this.origOptions = initializeOptions(options);
- var parsedOptions = parseOptions(options).parsedOptions;
- this.options = parsedOptions;
- }
- RRule.parseText = function (text, language) {
- return getnlp().parseText(text, language);
- };
- RRule.fromText = function (text, language) {
- return getnlp().fromText(text, language);
- };
- RRule.fromString = function (str) {
- return new RRule(RRule.parseString(str) || undefined);
- };
- RRule.prototype._iter = function (iterResult) {
- return iter(iterResult, this.options);
- };
- RRule.prototype._cacheGet = function (what, args) {
- if (!this._cache)
- return false;
- return this._cache._cacheGet(what, args);
- };
- RRule.prototype._cacheAdd = function (what, value, args) {
- if (!this._cache)
- return;
- return this._cache._cacheAdd(what, value, args);
- };
- /**
- * @param {Function} iterator - optional function that will be called
- * on each date that is added. It can return false
- * to stop the iteration.
- * @return Array containing all recurrences.
- */
- RRule.prototype.all = function (iterator) {
- if (iterator) {
- return this._iter(new callbackiterresult('all', {}, iterator));
- }
- var result = this._cacheGet('all');
- if (result === false) {
- result = this._iter(new iterresult('all', {}));
- this._cacheAdd('all', result);
- }
- return result;
- };
- /**
- * Returns all the occurrences of the rrule between after and before.
- * The inc keyword defines what happens if after and/or before are
- * themselves occurrences. With inc == True, they will be included in the
- * list, if they are found in the recurrence set.
- * @return Array
- */
- RRule.prototype.between = function (after, before, inc, iterator) {
- if (inc === void 0) { inc = false; }
- if (!src_dateutil.isValidDate(after) || !src_dateutil.isValidDate(before))
- throw new Error('Invalid date passed in to RRule.between');
- var args = {
- before: before,
- after: after,
- inc: inc
- };
- if (iterator) {
- return this._iter(new callbackiterresult('between', args, iterator));
- }
- var result = this._cacheGet('between', args);
- if (result === false) {
- result = this._iter(new iterresult('between', args));
- this._cacheAdd('between', result, args);
- }
- return result;
- };
- /**
- * Returns the last recurrence before the given datetime instance.
- * The inc keyword defines what happens if dt is an occurrence.
- * With inc == True, if dt itself is an occurrence, it will be returned.
- * @return Date or null
- */
- RRule.prototype.before = function (dt, inc) {
- if (inc === void 0) { inc = false; }
- if (!src_dateutil.isValidDate(dt))
- throw new Error('Invalid date passed in to RRule.before');
- var args = { dt: dt, inc: inc };
- var result = this._cacheGet('before', args);
- if (result === false) {
- result = this._iter(new iterresult('before', args));
- this._cacheAdd('before', result, args);
- }
- return result;
- };
- /**
- * Returns the first recurrence after the given datetime instance.
- * The inc keyword defines what happens if dt is an occurrence.
- * With inc == True, if dt itself is an occurrence, it will be returned.
- * @return Date or null
- */
- RRule.prototype.after = function (dt, inc) {
- if (inc === void 0) { inc = false; }
- if (!src_dateutil.isValidDate(dt))
- throw new Error('Invalid date passed in to RRule.after');
- var args = { dt: dt, inc: inc };
- var result = this._cacheGet('after', args);
- if (result === false) {
- result = this._iter(new iterresult('after', args));
- this._cacheAdd('after', result, args);
- }
- return result;
- };
- /**
- * Returns the number of recurrences in this set. It will have go trough
- * the whole recurrence, if this hasn't been done before.
- */
- RRule.prototype.count = function () {
- return this.all().length;
- };
- /**
- * Converts the rrule into its string representation
- * @see <http://www.ietf.org/rfc/rfc2445.txt>
- * @return String
- */
- RRule.prototype.toString = function () {
- return optionsToString(this.origOptions);
- };
- /**
- * Will convert all rules described in nlp:ToText
- * to text.
- */
- RRule.prototype.toText = function (gettext, language, dateFormatter) {
- return getnlp().toText(this, gettext, language, dateFormatter);
- };
- RRule.prototype.isFullyConvertibleToText = function () {
- return getnlp().isFullyConvertible(this);
- };
- /**
- * @return a RRule instance with the same freq and options
- * as this one (cache is not cloned)
- */
- RRule.prototype.clone = function () {
- return new RRule(this.origOptions);
- };
- // RRule class 'constants'
- RRule.FREQUENCIES = [
- 'YEARLY',
- 'MONTHLY',
- 'WEEKLY',
- 'DAILY',
- 'HOURLY',
- 'MINUTELY',
- 'SECONDLY'
- ];
- RRule.YEARLY = Frequency.YEARLY;
- RRule.MONTHLY = Frequency.MONTHLY;
- RRule.WEEKLY = Frequency.WEEKLY;
- RRule.DAILY = Frequency.DAILY;
- RRule.HOURLY = Frequency.HOURLY;
- RRule.MINUTELY = Frequency.MINUTELY;
- RRule.SECONDLY = Frequency.SECONDLY;
- RRule.MO = Days.MO;
- RRule.TU = Days.TU;
- RRule.WE = Days.WE;
- RRule.TH = Days.TH;
- RRule.FR = Days.FR;
- RRule.SA = Days.SA;
- RRule.SU = Days.SU;
- RRule.parseString = parseString;
- RRule.optionsToString = optionsToString;
- return RRule;
-}());
-/* harmony default export */ var src_rrule = (rrule_RRule);
-
-// CONCATENATED MODULE: ./src/iterset.ts
-
-
-
-function iterSet(iterResult, _rrule, _exrule, _rdate, _exdate, tzid) {
- var _exdateHash = {};
- var _accept = iterResult.accept;
- function evalExdate(after, before) {
- _exrule.forEach(function (rrule) {
- rrule.between(after, before, true).forEach(function (date) {
- _exdateHash[Number(date)] = true;
- });
- });
- }
- _exdate.forEach(function (date) {
- var zonedDate = new datewithzone_DateWithZone(date, tzid).rezonedDate();
- _exdateHash[Number(zonedDate)] = true;
- });
- iterResult.accept = function (date) {
- var dt = Number(date);
- if (isNaN(dt))
- return _accept.call(this, date);
- if (!_exdateHash[dt]) {
- evalExdate(new Date(dt - 1), new Date(dt + 1));
- if (!_exdateHash[dt]) {
- _exdateHash[dt] = true;
- return _accept.call(this, date);
- }
- }
- return true;
- };
- if (iterResult.method === 'between') {
- evalExdate(iterResult.args.after, iterResult.args.before);
- iterResult.accept = function (date) {
- var dt = Number(date);
- if (!_exdateHash[dt]) {
- _exdateHash[dt] = true;
- return _accept.call(this, date);
- }
- return true;
- };
- }
- for (var i = 0; i < _rdate.length; i++) {
- var zonedDate = new datewithzone_DateWithZone(_rdate[i], tzid).rezonedDate();
- if (!iterResult.accept(new Date(zonedDate.getTime())))
- break;
- }
- _rrule.forEach(function (rrule) {
- iter(iterResult, rrule.options);
- });
- var res = iterResult._result;
- src_dateutil.sort(res);
- switch (iterResult.method) {
- case 'all':
- case 'between':
- return res;
- case 'before':
- return ((res.length && res[res.length - 1]) || null);
- case 'after':
- default:
- return ((res.length && res[0]) || null);
- }
-}
-
-// CONCATENATED MODULE: ./src/rrulestr.ts
-
-
-
-
-
-
-/**
- * RRuleStr
- * To parse a set of rrule strings
- */
-var rrulestr_DEFAULT_OPTIONS = {
- dtstart: null,
- cache: false,
- unfold: false,
- forceset: false,
- compatible: false,
- tzid: null
-};
-function parseInput(s, options) {
- var rrulevals = [];
- var rdatevals = [];
- var exrulevals = [];
- var exdatevals = [];
- var _a = parseDtstart(s), dtstart = _a.dtstart, tzid = _a.tzid;
- var lines = splitIntoLines(s, options.unfold);
- lines.forEach(function (line) {
- if (!line)
- return;
- var _a = breakDownLine(line), name = _a.name, parms = _a.parms, value = _a.value;
- switch (name.toUpperCase()) {
- case 'RRULE':
- if (parms.length) {
- throw new Error("unsupported RRULE parm: " + parms.join(','));
- }
- rrulevals.push(parseString(line));
- break;
- case 'RDATE':
- var _b = /RDATE(?:;TZID=([^:=]+))?/i.exec(line), _ = _b[0], rdateTzid = _b[1];
- if (rdateTzid && !tzid) {
- tzid = rdateTzid;
- }
- rdatevals = rdatevals.concat(parseRDate(value, parms));
- break;
- case 'EXRULE':
- if (parms.length) {
- throw new Error("unsupported EXRULE parm: " + parms.join(','));
- }
- exrulevals.push(parseString(value));
- break;
- case 'EXDATE':
- exdatevals = exdatevals.concat(parseRDate(value, parms));
- break;
- case 'DTSTART':
- break;
- default:
- throw new Error('unsupported property: ' + name);
- }
- });
- return {
- dtstart: dtstart,
- tzid: tzid,
- rrulevals: rrulevals,
- rdatevals: rdatevals,
- exrulevals: exrulevals,
- exdatevals: exdatevals
- };
-}
-function buildRule(s, options) {
- var _a = parseInput(s, options), rrulevals = _a.rrulevals, rdatevals = _a.rdatevals, exrulevals = _a.exrulevals, exdatevals = _a.exdatevals, dtstart = _a.dtstart, tzid = _a.tzid;
- var noCache = options.cache === false;
- if (options.compatible) {
- options.forceset = true;
- options.unfold = true;
- }
- if (options.forceset ||
- rrulevals.length > 1 ||
- rdatevals.length ||
- exrulevals.length ||
- exdatevals.length) {
- var rset_1 = new rruleset(noCache);
- rset_1.dtstart(dtstart);
- rset_1.tzid(tzid || undefined);
- rrulevals.forEach(function (val) {
- rset_1.rrule(new src_rrule(groomRruleOptions(val, dtstart, tzid), noCache));
- });
- rdatevals.forEach(function (date) {
- rset_1.rdate(date);
- });
- exrulevals.forEach(function (val) {
- rset_1.exrule(new src_rrule(groomRruleOptions(val, dtstart, tzid), noCache));
- });
- exdatevals.forEach(function (date) {
- rset_1.exdate(date);
- });
- if (options.compatible && options.dtstart)
- rset_1.rdate(dtstart);
- return rset_1;
- }
- var val = rrulevals[0] || {};
- return new src_rrule(groomRruleOptions(val, val.dtstart || options.dtstart || dtstart, val.tzid || options.tzid || tzid), noCache);
-}
-function rrulestr(s, options) {
- if (options === void 0) { options = {}; }
- return buildRule(s, rrulestr_initializeOptions(options));
-}
-function groomRruleOptions(val, dtstart, tzid) {
- return __assign(__assign({}, val), { dtstart: dtstart,
- tzid: tzid });
-}
-function rrulestr_initializeOptions(options) {
- var invalid = [];
- var keys = Object.keys(options);
- var defaultKeys = Object.keys(rrulestr_DEFAULT_OPTIONS);
- keys.forEach(function (key) {
- if (!Object(helpers["c" /* includes */])(defaultKeys, key))
- invalid.push(key);
- });
- if (invalid.length) {
- throw new Error('Invalid options: ' + invalid.join(', '));
- }
- return __assign(__assign({}, rrulestr_DEFAULT_OPTIONS), options);
-}
-function extractName(line) {
- if (line.indexOf(':') === -1) {
- return {
- name: 'RRULE',
- value: line
- };
- }
- var _a = Object(helpers["m" /* split */])(line, ':', 1), name = _a[0], value = _a[1];
- return {
- name: name,
- value: value
- };
-}
-function breakDownLine(line) {
- var _a = extractName(line), name = _a.name, value = _a.value;
- var parms = name.split(';');
- if (!parms)
- throw new Error('empty property name');
- return {
- name: parms[0].toUpperCase(),
- parms: parms.slice(1),
- value: value
- };
-}
-function splitIntoLines(s, unfold) {
- if (unfold === void 0) { unfold = false; }
- s = s && s.trim();
- if (!s)
- throw new Error('Invalid empty string');
- // More info about 'unfold' option
- // Go head to http://www.ietf.org/rfc/rfc2445.txt
- if (!unfold) {
- return s.split(/\s/);
- }
- var lines = s.split('\n');
- var i = 0;
- while (i < lines.length) {
- // TODO
- var line = (lines[i] = lines[i].replace(/\s+$/g, ''));
- if (!line) {
- lines.splice(i, 1);
- }
- else if (i > 0 && line[0] === ' ') {
- lines[i - 1] += line.slice(1);
- lines.splice(i, 1);
- }
- else {
- i += 1;
- }
- }
- return lines;
-}
-function validateDateParm(parms) {
- parms.forEach(function (parm) {
- if (!/(VALUE=DATE(-TIME)?)|(TZID=)/.test(parm)) {
- throw new Error('unsupported RDATE/EXDATE parm: ' + parm);
- }
- });
-}
-function parseRDate(rdateval, parms) {
- validateDateParm(parms);
- return rdateval
- .split(',')
- .map(function (datestr) { return src_dateutil.untilStringToDate(datestr); });
-}
-
-// CONCATENATED MODULE: ./src/rruleset.ts
-
-
-
-
-
-
-
-function createGetterSetter(fieldName) {
- var _this = this;
- return function (field) {
- if (field !== undefined) {
- _this["_" + fieldName] = field;
- }
- if (_this["_" + fieldName] !== undefined) {
- return _this["_" + fieldName];
- }
- for (var i = 0; i < _this._rrule.length; i++) {
- var field_1 = _this._rrule[i].origOptions[fieldName];
- if (field_1) {
- return field_1;
- }
- }
- };
-}
-var rruleset_RRuleSet = /** @class */ (function (_super) {
- __extends(RRuleSet, _super);
- /**
- *
- * @param {Boolean?} noCache
- * The same stratagy as RRule on cache, default to false
- * @constructor
- */
- function RRuleSet(noCache) {
- if (noCache === void 0) { noCache = false; }
- var _this = _super.call(this, {}, noCache) || this;
- _this.dtstart = createGetterSetter.apply(_this, ['dtstart']);
- _this.tzid = createGetterSetter.apply(_this, ['tzid']);
- _this._rrule = [];
- _this._rdate = [];
- _this._exrule = [];
- _this._exdate = [];
- return _this;
- }
- RRuleSet.prototype._iter = function (iterResult) {
- return iterSet(iterResult, this._rrule, this._exrule, this._rdate, this._exdate, this.tzid());
- };
- /**
- * Adds an RRule to the set
- *
- * @param {RRule}
- */
- RRuleSet.prototype.rrule = function (rrule) {
- _addRule(rrule, this._rrule);
- };
- /**
- * Adds an EXRULE to the set
- *
- * @param {RRule}
- */
- RRuleSet.prototype.exrule = function (rrule) {
- _addRule(rrule, this._exrule);
- };
- /**
- * Adds an RDate to the set
- *
- * @param {Date}
- */
- RRuleSet.prototype.rdate = function (date) {
- _addDate(date, this._rdate);
- };
- /**
- * Adds an EXDATE to the set
- *
- * @param {Date}
- */
- RRuleSet.prototype.exdate = function (date) {
- _addDate(date, this._exdate);
- };
- /**
- * Get list of included rrules in this recurrence set.
- *
- * @return List of rrules
- */
- RRuleSet.prototype.rrules = function () {
- return this._rrule.map(function (e) { return rrulestr(e.toString()); });
- };
- /**
- * Get list of excluded rrules in this recurrence set.
- *
- * @return List of exrules
- */
- RRuleSet.prototype.exrules = function () {
- return this._exrule.map(function (e) { return rrulestr(e.toString()); });
- };
- /**
- * Get list of included datetimes in this recurrence set.
- *
- * @return List of rdates
- */
- RRuleSet.prototype.rdates = function () {
- return this._rdate.map(function (e) { return new Date(e.getTime()); });
- };
- /**
- * Get list of included datetimes in this recurrence set.
- *
- * @return List of exdates
- */
- RRuleSet.prototype.exdates = function () {
- return this._exdate.map(function (e) { return new Date(e.getTime()); });
- };
- RRuleSet.prototype.valueOf = function () {
- var result = [];
- if (!this._rrule.length && this._dtstart) {
- result = result.concat(optionsToString({ dtstart: this._dtstart }));
- }
- this._rrule.forEach(function (rrule) {
- result = result.concat(rrule.toString().split('\n'));
- });
- this._exrule.forEach(function (exrule) {
- result = result.concat(exrule.toString().split('\n')
- .map(function (line) { return line.replace(/^RRULE:/, 'EXRULE:'); })
- .filter(function (line) { return !/^DTSTART/.test(line); }));
- });
- if (this._rdate.length) {
- result.push(rdatesToString('RDATE', this._rdate, this.tzid()));
- }
- if (this._exdate.length) {
- result.push(rdatesToString('EXDATE', this._exdate, this.tzid()));
- }
- return result;
- };
- /**
- * to generate recurrence field such as:
- * DTSTART:19970902T010000Z
- * RRULE:FREQ=YEARLY;COUNT=2;BYDAY=TU
- * RRULE:FREQ=YEARLY;COUNT=1;BYDAY=TH
- */
- RRuleSet.prototype.toString = function () {
- return this.valueOf().join('\n');
- };
- /**
- * Create a new RRuleSet Object completely base on current instance
- */
- RRuleSet.prototype.clone = function () {
- var rrs = new RRuleSet(!!this._cache);
- this._rrule.forEach(function (rule) { return rrs.rrule(rule.clone()); });
- this._exrule.forEach(function (rule) { return rrs.exrule(rule.clone()); });
- this._rdate.forEach(function (date) { return rrs.rdate(new Date(date.getTime())); });
- this._exdate.forEach(function (date) { return rrs.exdate(new Date(date.getTime())); });
- return rrs;
- };
- return RRuleSet;
-}(src_rrule));
-/* harmony default export */ var rruleset = (rruleset_RRuleSet);
-function _addRule(rrule, collection) {
- if (!(rrule instanceof src_rrule)) {
- throw new TypeError(String(rrule) + ' is not RRule instance');
- }
- if (!Object(helpers["c" /* includes */])(collection.map(String), String(rrule))) {
- collection.push(rrule);
- }
-}
-function _addDate(date, collection) {
- if (!(date instanceof Date)) {
- throw new TypeError(String(date) + ' is not Date instance');
- }
- if (!Object(helpers["c" /* includes */])(collection.map(Number), Number(date))) {
- collection.push(date);
- src_dateutil.sort(collection);
- }
-}
-function rdatesToString(param, rdates, tzid) {
- var isUTC = !tzid || tzid.toUpperCase() === 'UTC';
- var header = isUTC ? param + ":" : param + ";TZID=" + tzid + ":";
- var dateString = rdates
- .map(function (rdate) { return src_dateutil.timeToUntilString(rdate.valueOf(), isUTC); })
- .join(',');
- return "" + header + dateString;
-}
-
-// CONCATENATED MODULE: ./src/index.ts
-/* concated harmony reexport Frequency */__webpack_require__.d(__webpack_exports__, "Frequency", function() { return Frequency; });
-/* concated harmony reexport Weekday */__webpack_require__.d(__webpack_exports__, "Weekday", function() { return weekday["b" /* Weekday */]; });
-/* concated harmony reexport RRule */__webpack_require__.d(__webpack_exports__, "RRule", function() { return src_rrule; });
-/* concated harmony reexport RRuleSet */__webpack_require__.d(__webpack_exports__, "RRuleSet", function() { return rruleset; });
-/* concated harmony reexport rrulestr */__webpack_require__.d(__webpack_exports__, "rrulestr", function() { return rrulestr; });
-/*!
- * rrule.js - Library for working with recurrence rules for calendar dates.
- * https://github.com/jakubroztocil/rrule
- *
- * Copyright 2010, Jakub Roztocil and Lars Schoning
- * Licenced under the BSD licence.
- * https://github.com/jakubroztocil/rrule/blob/master/LICENCE
- *
- * Based on:
- * python-dateutil - Extensions to the standard Python datetime module.
- * Copyright (c) 2003-2011 - Gustavo Niemeyer <gustavo@niemeyer.net>
- * Copyright (c) 2012 - Tomi Pieviläinen <tomi.pievilainen@iki.fi>
- * https://github.com/jakubroztocil/rrule/blob/master/LICENCE
- *
- */
-
-
-
-
-
-// =============================================================================
-// Export
-// =============================================================================
-
-/* harmony default export */ var src = __webpack_exports__["default"] = (src_rrule);
-
-
-/***/ }),
-/* 2 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ALL_WEEKDAYS; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Weekday; });
-// =============================================================================
-// Weekday
-// =============================================================================
-var ALL_WEEKDAYS = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'];
-var Weekday = /** @class */ (function () {
- function Weekday(weekday, n) {
- if (n === 0)
- throw new Error("Can't create weekday with n == 0");
- this.weekday = weekday;
- this.n = n;
- }
- Weekday.fromStr = function (str) {
- return new Weekday(ALL_WEEKDAYS.indexOf(str));
- };
- // __call__ - Cannot call the object directly, do it through
- // e.g. RRule.TH.nth(-1) instead,
- Weekday.prototype.nth = function (n) {
- return this.n === n ? this : new Weekday(this.weekday, n);
- };
- // __eq__
- Weekday.prototype.equals = function (other) {
- return this.weekday === other.weekday && this.n === other.n;
- };
- // __repr__
- Weekday.prototype.toString = function () {
- var s = ALL_WEEKDAYS[this.weekday];
- if (this.n)
- s = (this.n > 0 ? '+' : '') + String(this.n) + s;
- return s;
- };
- Weekday.prototype.getJsWeekday = function () {
- return this.weekday === 6 ? 0 : this.weekday + 1;
- };
- return Weekday;
-}());
-
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports) {
-
-module.exports = __WEBPACK_EXTERNAL_MODULE__3__;
-
-/***/ }),
-/* 4 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-
-// CONCATENATED MODULE: ./src/nlp/i18n.ts
-// =============================================================================
-// i18n
-// =============================================================================
-var ENGLISH = {
- dayNames: [
- 'Sunday', 'Monday', 'Tuesday', 'Wednesday',
- 'Thursday', 'Friday', 'Saturday'
- ],
- monthNames: [
- 'January', 'February', 'March', 'April', 'May',
- 'June', 'July', 'August', 'September', 'October',
- 'November', 'December'
- ],
- tokens: {
- 'SKIP': /^[ \r\n\t]+|^\.$/,
- 'number': /^[1-9][0-9]*/,
- 'numberAsText': /^(one|two|three)/i,
- 'every': /^every/i,
- 'day(s)': /^days?/i,
- 'weekday(s)': /^weekdays?/i,
- 'week(s)': /^weeks?/i,
- 'hour(s)': /^hours?/i,
- 'minute(s)': /^minutes?/i,
- 'month(s)': /^months?/i,
- 'year(s)': /^years?/i,
- 'on': /^(on|in)/i,
- 'at': /^(at)/i,
- 'the': /^the/i,
- 'first': /^first/i,
- 'second': /^second/i,
- 'third': /^third/i,
- 'nth': /^([1-9][0-9]*)(\.|th|nd|rd|st)/i,
- 'last': /^last/i,
- 'for': /^for/i,
- 'time(s)': /^times?/i,
- 'until': /^(un)?til/i,
- 'monday': /^mo(n(day)?)?/i,
- 'tuesday': /^tu(e(s(day)?)?)?/i,
- 'wednesday': /^we(d(n(esday)?)?)?/i,
- 'thursday': /^th(u(r(sday)?)?)?/i,
- 'friday': /^fr(i(day)?)?/i,
- 'saturday': /^sa(t(urday)?)?/i,
- 'sunday': /^su(n(day)?)?/i,
- 'january': /^jan(uary)?/i,
- 'february': /^feb(ruary)?/i,
- 'march': /^mar(ch)?/i,
- 'april': /^apr(il)?/i,
- 'may': /^may/i,
- 'june': /^june?/i,
- 'july': /^july?/i,
- 'august': /^aug(ust)?/i,
- 'september': /^sep(t(ember)?)?/i,
- 'october': /^oct(ober)?/i,
- 'november': /^nov(ember)?/i,
- 'december': /^dec(ember)?/i,
- 'comma': /^(,\s*|(and|or)\s*)+/i
- }
-};
-/* harmony default export */ var i18n = (ENGLISH);
-
-// EXTERNAL MODULE: ./src/index.ts + 22 modules
-var src = __webpack_require__(1);
-
-// EXTERNAL MODULE: ./src/helpers.ts
-var helpers = __webpack_require__(0);
-
-// CONCATENATED MODULE: ./src/nlp/totext.ts
-
-
-
-// =============================================================================
-// Helper functions
-// =============================================================================
-/**
- * Return true if a value is in an array
- */
-var contains = function (arr, val) {
- return arr.indexOf(val) !== -1;
-};
-var defaultGetText = function (id) { return id.toString(); };
-var defaultDateFormatter = function (year, month, day) { return month + " " + day + ", " + year; };
-/**
- *
- * @param {RRule} rrule
- * Optional:
- * @param {Function} gettext function
- * @param {Object} language definition
- * @constructor
- */
-var totext_ToText = /** @class */ (function () {
- function ToText(rrule, gettext, language, dateFormatter) {
- if (gettext === void 0) { gettext = defaultGetText; }
- if (language === void 0) { language = i18n; }
- if (dateFormatter === void 0) { dateFormatter = defaultDateFormatter; }
- this.text = [];
- this.language = language || i18n;
- this.gettext = gettext;
- this.dateFormatter = dateFormatter;
- this.rrule = rrule;
- this.options = rrule.options;
- this.origOptions = rrule.origOptions;
- if (this.origOptions.bymonthday) {
- var bymonthday = [].concat(this.options.bymonthday);
- var bynmonthday = [].concat(this.options.bynmonthday);
- bymonthday.sort(function (a, b) { return a - b; });
- bynmonthday.sort(function (a, b) { return b - a; });
- // 1, 2, 3, .., -5, -4, -3, ..
- this.bymonthday = bymonthday.concat(bynmonthday);
- if (!this.bymonthday.length)
- this.bymonthday = null;
- }
- if (Object(helpers["f" /* isPresent */])(this.origOptions.byweekday)) {
- var byweekday = !Object(helpers["d" /* isArray */])(this.origOptions.byweekday)
- ? [this.origOptions.byweekday]
- : this.origOptions.byweekday;
- var days = String(byweekday);
- this.byweekday = {
- allWeeks: byweekday.filter(function (weekday) {
- return !weekday.n;
- }),
- someWeeks: byweekday.filter(function (weekday) {
- return Boolean(weekday.n);
- }),
- isWeekdays: days.indexOf('MO') !== -1 &&
- days.indexOf('TU') !== -1 &&
- days.indexOf('WE') !== -1 &&
- days.indexOf('TH') !== -1 &&
- days.indexOf('FR') !== -1 &&
- days.indexOf('SA') === -1 &&
- days.indexOf('SU') === -1,
- isEveryDay: days.indexOf('MO') !== -1 &&
- days.indexOf('TU') !== -1 &&
- days.indexOf('WE') !== -1 &&
- days.indexOf('TH') !== -1 &&
- days.indexOf('FR') !== -1 &&
- days.indexOf('SA') !== -1 &&
- days.indexOf('SU') !== -1
- };
- var sortWeekDays = function (a, b) {
- return a.weekday - b.weekday;
- };
- this.byweekday.allWeeks.sort(sortWeekDays);
- this.byweekday.someWeeks.sort(sortWeekDays);
- if (!this.byweekday.allWeeks.length)
- this.byweekday.allWeeks = null;
- if (!this.byweekday.someWeeks.length)
- this.byweekday.someWeeks = null;
- }
- else {
- this.byweekday = null;
- }
- }
- /**
- * Test whether the rrule can be fully converted to text.
- * @param {RRule} rrule
- * @return {Boolean}
- */
- ToText.isFullyConvertible = function (rrule) {
- var canConvert = true;
- if (!(rrule.options.freq in ToText.IMPLEMENTED))
- return false;
- if (rrule.origOptions.until && rrule.origOptions.count)
- return false;
- for (var key in rrule.origOptions) {
- if (contains(['dtstart', 'wkst', 'freq'], key))
- return true;
- if (!contains(ToText.IMPLEMENTED[rrule.options.freq], key))
- return false;
- }
- return canConvert;
- };
- ToText.prototype.isFullyConvertible = function () {
- return ToText.isFullyConvertible(this.rrule);
- };
- /**
- * Perform the conversion. Only some of the frequencies are supported.
- * If some of the rrule's options aren't supported, they'll
- * be omitted from the output an "(~ approximate)" will be appended.
- * @return {*}
- */
- ToText.prototype.toString = function () {
- var gettext = this.gettext;
- if (!(this.options.freq in ToText.IMPLEMENTED)) {
- return gettext('RRule error: Unable to fully convert this rrule to text');
- }
- this.text = [gettext('every')];
- // @ts-ignore
- this[src["default"].FREQUENCIES[this.options.freq]]();
- if (this.options.until) {
- this.add(gettext('until'));
- var until = this.options.until;
- this.add(this.dateFormatter(until.getUTCFullYear(), this.language.monthNames[until.getUTCMonth()], until.getUTCDate()));
- }
- else if (this.options.count) {
- this.add(gettext('for'))
- .add(this.options.count.toString())
- .add(this.plural(this.options.count) ? gettext('times') : gettext('time'));
- }
- if (!this.isFullyConvertible())
- this.add(gettext('(~ approximate)'));
- return this.text.join('');
- };
- ToText.prototype.HOURLY = function () {
- var gettext = this.gettext;
- if (this.options.interval !== 1)
- this.add(this.options.interval.toString());
- this.add(this.plural(this.options.interval) ? gettext('hours') : gettext('hour'));
- };
- ToText.prototype.MINUTELY = function () {
- var gettext = this.gettext;
- if (this.options.interval !== 1)
- this.add(this.options.interval.toString());
- this.add(this.plural(this.options.interval)
- ? gettext('minutes')
- : gettext('minutes'));
- };
- ToText.prototype.DAILY = function () {
- var gettext = this.gettext;
- if (this.options.interval !== 1)
- this.add(this.options.interval.toString());
- if (this.byweekday && this.byweekday.isWeekdays) {
- this.add(this.plural(this.options.interval)
- ? gettext('weekdays')
- : gettext('weekday'));
- }
- else {
- this.add(this.plural(this.options.interval) ? gettext('days') : gettext('day'));
- }
- if (this.origOptions.bymonth) {
- this.add(gettext('in'));
- this._bymonth();
- }
- if (this.bymonthday) {
- this._bymonthday();
- }
- else if (this.byweekday) {
- this._byweekday();
- }
- else if (this.origOptions.byhour) {
- this._byhour();
- }
- };
- ToText.prototype.WEEKLY = function () {
- var gettext = this.gettext;
- if (this.options.interval !== 1) {
- this.add(this.options.interval.toString()).add(this.plural(this.options.interval) ? gettext('weeks') : gettext('week'));
- }
- if (this.byweekday && this.byweekday.isWeekdays) {
- if (this.options.interval === 1) {
- this.add(this.plural(this.options.interval)
- ? gettext('weekdays')
- : gettext('weekday'));
- }
- else {
- this.add(gettext('on')).add(gettext('weekdays'));
- }
- }
- else if (this.byweekday && this.byweekday.isEveryDay) {
- this.add(this.plural(this.options.interval) ? gettext('days') : gettext('day'));
- }
- else {
- if (this.options.interval === 1)
- this.add(gettext('week'));
- if (this.origOptions.bymonth) {
- this.add(gettext('in'));
- this._bymonth();
- }
- if (this.bymonthday) {
- this._bymonthday();
- }
- else if (this.byweekday) {
- this._byweekday();
- }
- }
- };
- ToText.prototype.MONTHLY = function () {
- var gettext = this.gettext;
- if (this.origOptions.bymonth) {
- if (this.options.interval !== 1) {
- this.add(this.options.interval.toString()).add(gettext('months'));
- if (this.plural(this.options.interval))
- this.add(gettext('in'));
- }
- else {
- // this.add(gettext('MONTH'))
- }
- this._bymonth();
- }
- else {
- if (this.options.interval !== 1)
- this.add(this.options.interval.toString());
- this.add(this.plural(this.options.interval)
- ? gettext('months')
- : gettext('month'));
- }
- if (this.bymonthday) {
- this._bymonthday();
- }
- else if (this.byweekday && this.byweekday.isWeekdays) {
- this.add(gettext('on')).add(gettext('weekdays'));
- }
- else if (this.byweekday) {
- this._byweekday();
- }
- };
- ToText.prototype.YEARLY = function () {
- var gettext = this.gettext;
- if (this.origOptions.bymonth) {
- if (this.options.interval !== 1) {
- this.add(this.options.interval.toString());
- this.add(gettext('years'));
- }
- else {
- // this.add(gettext('YEAR'))
- }
- this._bymonth();
- }
- else {
- if (this.options.interval !== 1)
- this.add(this.options.interval.toString());
- this.add(this.plural(this.options.interval) ? gettext('years') : gettext('year'));
- }
- if (this.bymonthday) {
- this._bymonthday();
- }
- else if (this.byweekday) {
- this._byweekday();
- }
- if (this.options.byyearday) {
- this.add(gettext('on the'))
- .add(this.list(this.options.byyearday, this.nth, gettext('and')))
- .add(gettext('day'));
- }
- if (this.options.byweekno) {
- this.add(gettext('in'))
- .add(this.plural(this.options.byweekno.length)
- ? gettext('weeks')
- : gettext('week'))
- .add(this.list(this.options.byweekno, undefined, gettext('and')));
- }
- };
- ToText.prototype._bymonthday = function () {
- var gettext = this.gettext;
- if (this.byweekday && this.byweekday.allWeeks) {
- this.add(gettext('on'))
- .add(this.list(this.byweekday.allWeeks, this.weekdaytext, gettext('or')))
- .add(gettext('the'))
- .add(this.list(this.bymonthday, this.nth, gettext('or')));
- }
- else {
- this.add(gettext('on the')).add(this.list(this.bymonthday, this.nth, gettext('and')));
- }
- // this.add(gettext('DAY'))
- };
- ToText.prototype._byweekday = function () {
- var gettext = this.gettext;
- if (this.byweekday.allWeeks && !this.byweekday.isWeekdays) {
- this.add(gettext('on')).add(this.list(this.byweekday.allWeeks, this.weekdaytext));
- }
- if (this.byweekday.someWeeks) {
- if (this.byweekday.allWeeks)
- this.add(gettext('and'));
- this.add(gettext('on the')).add(this.list(this.byweekday.someWeeks, this.weekdaytext, gettext('and')));
- }
- };
- ToText.prototype._byhour = function () {
- var gettext = this.gettext;
- this.add(gettext('at')).add(this.list(this.origOptions.byhour, undefined, gettext('and')));
- };
- ToText.prototype._bymonth = function () {
- this.add(this.list(this.options.bymonth, this.monthtext, this.gettext('and')));
- };
- ToText.prototype.nth = function (n) {
- n = parseInt(n.toString(), 10);
- var nth;
- var npos;
- var gettext = this.gettext;
- if (n === -1)
- return gettext('last');
- npos = Math.abs(n);
- switch (npos) {
- case 1:
- case 21:
- case 31:
- nth = npos + gettext('st');
- break;
- case 2:
- case 22:
- nth = npos + gettext('nd');
- break;
- case 3:
- case 23:
- nth = npos + gettext('rd');
- break;
- default:
- nth = npos + gettext('th');
- }
- return n < 0 ? nth + ' ' + gettext('last') : nth;
- };
- ToText.prototype.monthtext = function (m) {
- return this.language.monthNames[m - 1];
- };
- ToText.prototype.weekdaytext = function (wday) {
- var weekday = Object(helpers["e" /* isNumber */])(wday) ? (wday + 1) % 7 : wday.getJsWeekday();
- return ((wday.n ? this.nth(wday.n) + ' ' : '') + this.language.dayNames[weekday]);
- };
- ToText.prototype.plural = function (n) {
- return n % 100 !== 1;
- };
- ToText.prototype.add = function (s) {
- this.text.push(' ');
- this.text.push(s);
- return this;
- };
- ToText.prototype.list = function (arr, callback, finalDelim, delim) {
- if (delim === void 0) { delim = ','; }
- if (!Object(helpers["d" /* isArray */])(arr)) {
- arr = [arr];
- }
- var delimJoin = function (array, delimiter, finalDelimiter) {
- var list = '';
- for (var i = 0; i < array.length; i++) {
- if (i !== 0) {
- if (i === array.length - 1) {
- list += ' ' + finalDelimiter + ' ';
- }
- else {
- list += delimiter + ' ';
- }
- }
- list += array[i];
- }
- return list;
- };
- callback =
- callback ||
- function (o) {
- return o.toString();
- };
- var self = this;
- var realCallback = function (arg) {
- return callback && callback.call(self, arg);
- };
- if (finalDelim) {
- return delimJoin(arr.map(realCallback), delim, finalDelim);
- }
- else {
- return arr.map(realCallback).join(delim + ' ');
- }
- };
- return ToText;
-}());
-/* harmony default export */ var totext = (totext_ToText);
-
-// CONCATENATED MODULE: ./src/nlp/parsetext.ts
-
-
-// =============================================================================
-// Parser
-// =============================================================================
-var Parser = /** @class */ (function () {
- function Parser(rules) {
- this.done = true;
- this.rules = rules;
- }
- Parser.prototype.start = function (text) {
- this.text = text;
- this.done = false;
- return this.nextSymbol();
- };
- Parser.prototype.isDone = function () {
- return this.done && this.symbol === null;
- };
- Parser.prototype.nextSymbol = function () {
- var best;
- var bestSymbol;
- var p = this;
- this.symbol = null;
- this.value = null;
- do {
- if (this.done)
- return false;
- var rule = void 0;
- best = null;
- for (var name_1 in this.rules) {
- rule = this.rules[name_1];
- var match = rule.exec(p.text);
- if (match) {
- if (best === null || match[0].length > best[0].length) {
- best = match;
- bestSymbol = name_1;
- }
- }
- }
- if (best != null) {
- this.text = this.text.substr(best[0].length);
- if (this.text === '')
- this.done = true;
- }
- if (best == null) {
- this.done = true;
- this.symbol = null;
- this.value = null;
- return;
- }
- // @ts-ignore
- } while (bestSymbol === 'SKIP');
- // @ts-ignore
- this.symbol = bestSymbol;
- this.value = best;
- return true;
- };
- Parser.prototype.accept = function (name) {
- if (this.symbol === name) {
- if (this.value) {
- var v = this.value;
- this.nextSymbol();
- return v;
- }
- this.nextSymbol();
- return true;
- }
- return false;
- };
- Parser.prototype.acceptNumber = function () {
- return this.accept('number');
- };
- Parser.prototype.expect = function (name) {
- if (this.accept(name))
- return true;
- throw new Error('expected ' + name + ' but found ' + this.symbol);
- };
- return Parser;
-}());
-function parseText(text, language) {
- if (language === void 0) { language = i18n; }
- var options = {};
- var ttr = new Parser(language.tokens);
- if (!ttr.start(text))
- return null;
- S();
- return options;
- function S() {
- // every [n]
- ttr.expect('every');
- var n = ttr.acceptNumber();
- if (n)
- options.interval = parseInt(n[0], 10);
- if (ttr.isDone())
- throw new Error('Unexpected end');
- switch (ttr.symbol) {
- case 'day(s)':
- options.freq = src["default"].DAILY;
- if (ttr.nextSymbol()) {
- AT();
- F();
- }
- break;
- // FIXME Note: every 2 weekdays != every two weeks on weekdays.
- // DAILY on weekdays is not a valid rule
- case 'weekday(s)':
- options.freq = src["default"].WEEKLY;
- options.byweekday = [
- src["default"].MO,
- src["default"].TU,
- src["default"].WE,
- src["default"].TH,
- src["default"].FR
- ];
- ttr.nextSymbol();
- F();
- break;
- case 'week(s)':
- options.freq = src["default"].WEEKLY;
- if (ttr.nextSymbol()) {
- ON();
- F();
- }
- break;
- case 'hour(s)':
- options.freq = src["default"].HOURLY;
- if (ttr.nextSymbol()) {
- ON();
- F();
- }
- break;
- case 'minute(s)':
- options.freq = src["default"].MINUTELY;
- if (ttr.nextSymbol()) {
- ON();
- F();
- }
- break;
- case 'month(s)':
- options.freq = src["default"].MONTHLY;
- if (ttr.nextSymbol()) {
- ON();
- F();
- }
- break;
- case 'year(s)':
- options.freq = src["default"].YEARLY;
- if (ttr.nextSymbol()) {
- ON();
- F();
- }
- break;
- case 'monday':
- case 'tuesday':
- case 'wednesday':
- case 'thursday':
- case 'friday':
- case 'saturday':
- case 'sunday':
- options.freq = src["default"].WEEKLY;
- var key = ttr.symbol.substr(0, 2).toUpperCase();
- options.byweekday = [src["default"][key]];
- if (!ttr.nextSymbol())
- return;
- // TODO check for duplicates
- while (ttr.accept('comma')) {
- if (ttr.isDone())
- throw new Error('Unexpected end');
- var wkd = decodeWKD();
- if (!wkd) {
- throw new Error('Unexpected symbol ' + ttr.symbol + ', expected weekday');
- }
- // @ts-ignore
- options.byweekday.push(src["default"][wkd]);
- ttr.nextSymbol();
- }
- MDAYs();
- F();
- break;
- case 'january':
- case 'february':
- case 'march':
- case 'april':
- case 'may':
- case 'june':
- case 'july':
- case 'august':
- case 'september':
- case 'october':
- case 'november':
- case 'december':
- options.freq = src["default"].YEARLY;
- options.bymonth = [decodeM()];
- if (!ttr.nextSymbol())
- return;
- // TODO check for duplicates
- while (ttr.accept('comma')) {
- if (ttr.isDone())
- throw new Error('Unexpected end');
- var m = decodeM();
- if (!m) {
- throw new Error('Unexpected symbol ' + ttr.symbol + ', expected month');
- }
- options.bymonth.push(m);
- ttr.nextSymbol();
- }
- ON();
- F();
- break;
- default:
- throw new Error('Unknown symbol');
- }
- }
- function ON() {
- var on = ttr.accept('on');
- var the = ttr.accept('the');
- if (!(on || the))
- return;
- do {
- var nth = decodeNTH();
- var wkd = decodeWKD();
- var m = decodeM();
- // nth <weekday> | <weekday>
- if (nth) {
- // ttr.nextSymbol()
- if (wkd) {
- ttr.nextSymbol();
- if (!options.byweekday)
- options.byweekday = [];
- // @ts-ignore
- options.byweekday.push(src["default"][wkd].nth(nth));
- }
- else {
- if (!options.bymonthday)
- options.bymonthday = [];
- // @ts-ignore
- options.bymonthday.push(nth);
- ttr.accept('day(s)');
- }
- // <weekday>
- }
- else if (wkd) {
- ttr.nextSymbol();
- if (!options.byweekday)
- options.byweekday = [];
- // @ts-ignore
- options.byweekday.push(src["default"][wkd]);
- }
- else if (ttr.symbol === 'weekday(s)') {
- ttr.nextSymbol();
- if (!options.byweekday) {
- options.byweekday = [
- src["default"].MO,
- src["default"].TU,
- src["default"].WE,
- src["default"].TH,
- src["default"].FR
- ];
- }
- }
- else if (ttr.symbol === 'week(s)') {
- ttr.nextSymbol();
- var n = ttr.acceptNumber();
- if (!n) {
- throw new Error('Unexpected symbol ' + ttr.symbol + ', expected week number');
- }
- options.byweekno = [parseInt(n[0], 10)];
- while (ttr.accept('comma')) {
- n = ttr.acceptNumber();
- if (!n) {
- throw new Error('Unexpected symbol ' + ttr.symbol + '; expected monthday');
- }
- options.byweekno.push(parseInt(n[0], 10));
- }
- }
- else if (m) {
- ttr.nextSymbol();
- if (!options.bymonth)
- options.bymonth = [];
- // @ts-ignore
- options.bymonth.push(m);
- }
- else {
- return;
- }
- } while (ttr.accept('comma') || ttr.accept('the') || ttr.accept('on'));
- }
- function AT() {
- var at = ttr.accept('at');
- if (!at)
- return;
- do {
- var n = ttr.acceptNumber();
- if (!n) {
- throw new Error('Unexpected symbol ' + ttr.symbol + ', expected hour');
- }
- options.byhour = [parseInt(n[0], 10)];
- while (ttr.accept('comma')) {
- n = ttr.acceptNumber();
- if (!n) {
- throw new Error('Unexpected symbol ' + ttr.symbol + '; expected hour');
- }
- options.byhour.push(parseInt(n[0], 10));
- }
- } while (ttr.accept('comma') || ttr.accept('at'));
- }
- function decodeM() {
- switch (ttr.symbol) {
- case 'january':
- return 1;
- case 'february':
- return 2;
- case 'march':
- return 3;
- case 'april':
- return 4;
- case 'may':
- return 5;
- case 'june':
- return 6;
- case 'july':
- return 7;
- case 'august':
- return 8;
- case 'september':
- return 9;
- case 'october':
- return 10;
- case 'november':
- return 11;
- case 'december':
- return 12;
- default:
- return false;
- }
- }
- function decodeWKD() {
- switch (ttr.symbol) {
- case 'monday':
- case 'tuesday':
- case 'wednesday':
- case 'thursday':
- case 'friday':
- case 'saturday':
- case 'sunday':
- return ttr.symbol.substr(0, 2).toUpperCase();
- default:
- return false;
- }
- }
- function decodeNTH() {
- switch (ttr.symbol) {
- case 'last':
- ttr.nextSymbol();
- return -1;
- case 'first':
- ttr.nextSymbol();
- return 1;
- case 'second':
- ttr.nextSymbol();
- return ttr.accept('last') ? -2 : 2;
- case 'third':
- ttr.nextSymbol();
- return ttr.accept('last') ? -3 : 3;
- case 'nth':
- var v = parseInt(ttr.value[1], 10);
- if (v < -366 || v > 366)
- throw new Error('Nth out of range: ' + v);
- ttr.nextSymbol();
- return ttr.accept('last') ? -v : v;
- default:
- return false;
- }
- }
- function MDAYs() {
- ttr.accept('on');
- ttr.accept('the');
- var nth = decodeNTH();
- if (!nth)
- return;
- options.bymonthday = [nth];
- ttr.nextSymbol();
- while (ttr.accept('comma')) {
- nth = decodeNTH();
- if (!nth) {
- throw new Error('Unexpected symbol ' + ttr.symbol + '; expected monthday');
- }
- options.bymonthday.push(nth);
- ttr.nextSymbol();
- }
- }
- function F() {
- if (ttr.symbol === 'until') {
- var date = Date.parse(ttr.text);
- if (!date)
- throw new Error('Cannot parse until date:' + ttr.text);
- options.until = new Date(date);
- }
- else if (ttr.accept('for')) {
- options.count = parseInt(ttr.value[0], 10);
- ttr.expect('number');
- // ttr.expect('times')
- }
- }
-}
-
-// CONCATENATED MODULE: ./src/nlp/index.ts
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromText", function() { return fromText; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFullyConvertible", function() { return isFullyConvertible; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toText", function() { return toText; });
-/* concated harmony reexport parseText */__webpack_require__.d(__webpack_exports__, "parseText", function() { return parseText; });
-
-
-
-
-/*!
-* rrule.js - Library for working with recurrence rules for calendar dates.
-* https://github.com/jakubroztocil/rrule
-*
-* Copyright 2010, Jakub Roztocil and Lars Schoning
-* Licenced under the BSD licence.
-* https://github.com/jakubroztocil/rrule/blob/master/LICENCE
-*
-*/
-/**
- *
- * Implementation of RRule.fromText() and RRule::toText().
- *
- *
- * On the client side, this file needs to be included
- * when those functions are used.
- *
- */
-// =============================================================================
-// fromText
-// =============================================================================
-/**
- * Will be able to convert some of the below described rules from
- * text format to a rule object.
- *
- *
- * RULES
- *
- * Every ([n])
- * day(s)
- * | [weekday], ..., (and) [weekday]
- * | weekday(s)
- * | week(s)
- * | month(s)
- * | [month], ..., (and) [month]
- * | year(s)
- *
- *
- * Plus 0, 1, or multiple of these:
- *
- * on [weekday], ..., (or) [weekday] the [monthday], [monthday], ... (or) [monthday]
- *
- * on [weekday], ..., (and) [weekday]
- *
- * on the [monthday], [monthday], ... (and) [monthday] (day of the month)
- *
- * on the [nth-weekday], ..., (and) [nth-weekday] (of the month/year)
- *
- *
- * Plus 0 or 1 of these:
- *
- * for [n] time(s)
- *
- * until [date]
- *
- * Plus (.)
- *
- *
- * Definitely no supported for parsing:
- *
- * (for year):
- * in week(s) [n], ..., (and) [n]
- *
- * on the [yearday], ..., (and) [n] day of the year
- * on day [yearday], ..., (and) [n]
- *
- *
- * NON-TERMINALS
- *
- * [n]: 1, 2 ..., one, two, three ..
- * [month]: January, February, March, April, May, ... December
- * [weekday]: Monday, ... Sunday
- * [nth-weekday]: first [weekday], 2nd [weekday], ... last [weekday], ...
- * [monthday]: first, 1., 2., 1st, 2nd, second, ... 31st, last day, 2nd last day, ..
- * [date]:
- * [month] (0-31(,) ([year])),
- * (the) 0-31.(1-12.([year])),
- * (the) 0-31/(1-12/([year])),
- * [weekday]
- *
- * [year]: 0000, 0001, ... 01, 02, ..
- *
- * Definitely not supported for parsing:
- *
- * [yearday]: first, 1., 2., 1st, 2nd, second, ... 366th, last day, 2nd last day, ..
- *
- * @param {String} text
- * @return {Object, Boolean} the rule, or null.
- */
-var fromText = function (text, language) {
- if (language === void 0) { language = i18n; }
- return new src["default"](parseText(text, language) || undefined);
-};
-var common = [
- 'count',
- 'until',
- 'interval',
- 'byweekday',
- 'bymonthday',
- 'bymonth'
-];
-totext.IMPLEMENTED = [];
-totext.IMPLEMENTED[src["default"].HOURLY] = common;
-totext.IMPLEMENTED[src["default"].MINUTELY] = common;
-totext.IMPLEMENTED[src["default"].DAILY] = ['byhour'].concat(common);
-totext.IMPLEMENTED[src["default"].WEEKLY] = common;
-totext.IMPLEMENTED[src["default"].MONTHLY] = common;
-totext.IMPLEMENTED[src["default"].YEARLY] = ['byweekno', 'byyearday'].concat(common);
-// =============================================================================
-// Export
-// =============================================================================
-var toText = function (rrule, gettext, language, dateFormatter) {
- return new totext(rrule, gettext, language, dateFormatter).toString();
-};
-var isFullyConvertible = totext.isFullyConvertible;
-
-
-
-/***/ })
-/******/ ]);
-});
-//# sourceMappingURL=rrule.js.map \ No newline at end of file
diff --git a/library/textcomplete/textcomplete.js b/library/textcomplete/textcomplete.js
index 5134be691..5507a102c 100644
--- a/library/textcomplete/textcomplete.js
+++ b/library/textcomplete/textcomplete.js
@@ -1863,7 +1863,7 @@ var DropdownItem = function () {
value: function destroy() {
this.el.removeEventListener("mousedown", this.onClick, false);
this.el.removeEventListener("mouseover", this.onMouseover, false);
- this.el.removeEventListener("touchstart", this.onClick, false);
+ //this.el.removeEventListener("touchstart", this.onClick, false);
if (this.active) {
this.dropdown.activeItem = null;
}
@@ -1954,7 +1954,7 @@ var DropdownItem = function () {
this._el = li;
li.addEventListener("mousedown", this.onClick);
li.addEventListener("mouseover", this.onMouseover);
- li.addEventListener("touchstart", this.onClick);
+ //li.addEventListener("touchstart", this.onClick);
return li;
}
}, {
@@ -2406,4 +2406,4 @@ if (typeof module != 'undefined' && typeof module.exports != 'undefined') {
/***/ })
/******/ ]);
-//# sourceMappingURL=textcomplete.js.map \ No newline at end of file
+//# sourceMappingURL=textcomplete.js.map
diff --git a/library/textcomplete/textcomplete.min.js b/library/textcomplete/textcomplete.min.js
index 717a2c905..3bc88376a 100644
--- a/library/textcomplete/textcomplete.min.js
+++ b/library/textcomplete/textcomplete.min.js
@@ -1,2 +1,2 @@
-!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=5)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(2),s=(function(e){e&&e.__esModule}(o),function(){function e(t,n,i){r(this,e),this.data=t,this.term=n,this.strategy=i}return i(e,[{key:"replace",value:function(e,t){var n=this.strategy.replace(this.data);if(null!==n){Array.isArray(n)&&(t=n[1]+t,n=n[0]);var r=this.strategy.matchText(e);if(r)return n=n.replace(/\$&/g,r[0]).replace(/\$(\d)/g,function(e,t){return r[parseInt(t,10)]}),[[e.slice(0,r.index),n,e.slice(r.index+r[0].length)].join(""),t]}}},{key:"render",value:function(){return this.strategy.template(this.data,this.term)}}]),e}());t.default=s},function(e){"use strict";function t(){}function n(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function r(){this._events=new t,this._eventsCount=0}var i=Object.prototype.hasOwnProperty,o="~";Object.create&&(t.prototype=Object.create(null),(new t).__proto__||(o=!1)),r.prototype.eventNames=function(){var e,t,n=[];if(0===this._eventsCount)return n;for(t in e=this._events)i.call(e,t)&&n.push(o?t.slice(1):t);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},r.prototype.listeners=function(e,t){var n=o?o+e:e,r=this._events[n];if(t)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var i=0,s=r.length,a=new Array(s);i<s;i++)a[i]=r[i].fn;return a},r.prototype.emit=function(e,t,n,r,i,s){var a=o?o+e:e;if(!this._events[a])return!1;var u,l,c=this._events[a],h=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),h){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,r),!0;case 5:return c.fn.call(c.context,t,n,r,i),!0;case 6:return c.fn.call(c.context,t,n,r,i,s),!0}for(l=1,u=new Array(h-1);l<h;l++)u[l-1]=arguments[l];c.fn.apply(c.context,u)}else{var f,d=c.length;for(l=0;l<d;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),h){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,n);break;case 4:c[l].fn.call(c[l].context,t,n,r);break;default:if(!u)for(f=1,u=new Array(h-1);f<h;f++)u[f-1]=arguments[f];c[l].fn.apply(c[l].context,u)}}return!0},r.prototype.on=function(e,t,r){var i=new n(t,r||this),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.once=function(e,t,r){var i=new n(t,r||this,!0),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.removeListener=function(e,n,r,i){var s=o?o+e:e;if(!this._events[s])return this;if(!n)return 0==--this._eventsCount?this._events=new t:delete this._events[s],this;var a=this._events[s];if(a.fn)a.fn!==n||i&&!a.once||r&&a.context!==r||(0==--this._eventsCount?this._events=new t:delete this._events[s]);else{for(var u=0,l=[],c=a.length;u<c;u++)(a[u].fn!==n||i&&!a[u].once||r&&a[u].context!==r)&&l.push(a[u]);l.length?this._events[s]=1===l.length?l[0]:l:0==--this._eventsCount?this._events=new t:delete this._events[s]}return this},r.prototype.removeAllListeners=function(e){var n;return e?(n=o?o+e:e,this._events[n]&&(0==--this._eventsCount?this._events=new t:delete this._events[n])):(this._events=new t,this._eventsCount=0),this},r.prototype.off=r.prototype.removeListener,r.prototype.addListener=r.prototype.on,r.prototype.setMaxListeners=function(){return this},r.prefixed=o,r.EventEmitter=r,e.exports=r},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e){return e}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t){n(this,e),this.props=t,this.cache=t.cache?{}:null}return i(e,[{key:"destroy",value:function(){return this.cache=null,this}},{key:"search",value:function(e,t,n){this.cache?this.searchWithCache(e,t,n):this.props.search(e,t,n)}},{key:"replace",value:function(e){return this.props.replace(e)}},{key:"searchWithCache",value:function(e,t,n){var r=this;this.cache&&this.cache[e]?t(this.cache[e]):this.props.search(e,function(n){r.cache&&(r.cache[e]=n),t(n)},n)}},{key:"matchText",value:function(e){return"function"==typeof this.match?this.match(e):e.match(this.match)}},{key:"match",get:function(){return this.props.match}},{key:"index",get:function(){return"number"==typeof this.props.index?this.props.index:2}},{key:"template",get:function(){return this.props.template||r}}]),e}();t.default=o},function(e,t){"use strict";function n(e){var t=e.getBoundingClientRect(),n=e.ownerDocument,r=n.defaultView,i=n.documentElement,o={top:t.top+r.pageYOffset,left:t.left+r.pageXOffset};return i&&(o.top-=i.clientTop,o.left-=i.clientLeft),o}function r(e){return e>=s&&e<=a}function i(e){var t=window.getComputedStyle(e);return r(t.lineHeight.charCodeAt(0))?r(t.lineHeight.charCodeAt(t.lineHeight.length-1))?parseFloat(t.lineHeight)*parseFloat(t.fontSize):parseFloat(t.lineHeight):o(e.nodeName,t)}function o(e,t){var n=document.body;if(!n)return 0;var r=document.createElement(e);r.innerHTML="&nbsp;",r.style.fontSize=t.fontSize,r.style.fontFamily=t.fontFamily,r.style.padding="0",n.appendChild(r),r instanceof HTMLTextAreaElement&&(r.rows=1);var i=r.offsetHeight;return n.removeChild(r),i}Object.defineProperty(t,"__esModule",{value:!0}),t.calculateElementOffset=n,t.getLineHeightPx=i,t.calculateLineHeightPx=o;var s=(t.createCustomEvent=function(){return"function"==typeof window.CustomEvent?function(e,t){return new document.defaultView.CustomEvent(e,{cancelable:t&&t.cancelable||!1,detail:t&&t.detail||void 0})}:function(e,t){var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,!1,t&&t.cancelable||!1,t&&t.detail||void 0),n}}(),"0".charCodeAt(0)),a="9".charCodeAt(0)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(1),l=r(u),c=n(3),h=n(0),f=(r(h),function(e){function t(){return i(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return s(t,e),a(t,[{key:"destroy",value:function(){return this}},{key:"applySearchResult",value:function(){throw new Error("Not implemented.")}},{key:"getCursorOffset",value:function(){throw new Error("Not implemented.")}},{key:"getBeforeCursor",value:function(){throw new Error("Not implemented.")}},{key:"emitMoveEvent",value:function(e){var t=(0,c.createCustomEvent)("move",{cancelable:!0,detail:{code:e}});return this.emit("move",t),t}},{key:"emitEnterEvent",value:function(){var e=(0,c.createCustomEvent)("enter",{cancelable:!0});return this.emit("enter",e),e}},{key:"emitChangeEvent",value:function(){var e=(0,c.createCustomEvent)("change",{detail:{beforeCursor:this.getBeforeCursor()}});return this.emit("change",e),e}},{key:"emitEscEvent",value:function(){var e=(0,c.createCustomEvent)("esc",{cancelable:!0});return this.emit("esc",e),e}},{key:"getCode",value:function(e){return 9===e.keyCode?"ENTER":13===e.keyCode?"ENTER":27===e.keyCode?"ESC":38===e.keyCode?"UP":40===e.keyCode?"DOWN":78===e.keyCode&&e.ctrlKey?"DOWN":80===e.keyCode&&e.ctrlKey?"UP":"OTHER"}}]),t}(l.default));t.default=f},function(e,t,n){"use strict";(function(e){function t(e){return e&&e.__esModule?e:{default:e}}var r=n(7),i=t(r),o=n(12),s=t(o),a=void 0;a=e.Textcomplete&&e.Textcomplete.editors?e.Textcomplete.editors:{},a.Textarea=s.default,e.Textcomplete=i.default,e.Textcomplete.editors=a}).call(t,n(6))},function(e){var t;t=function(){return this}();try{t=t||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(t=window)}e.exports=t},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(8),l=r(u),c=n(4),h=(r(c),n(10)),f=r(h),d=n(2),v=r(d),p=n(0),y=(r(p),n(1)),m=r(y),g=["handleChange","handleEnter","handleEsc","handleHit","handleMove","handleSelect"],b=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.completer=new l.default,r.isQueryInFlight=!1,r.nextPendingQuery=null,r.dropdown=new f.default(n.dropdown||{}),r.editor=e,r.options=n,g.forEach(function(e){r[e]=r[e].bind(r)}),r.startListening(),r}return s(t,e),a(t,[{key:"destroy",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this.completer.destroy(),this.dropdown.destroy(),e&&this.editor.destroy(),this.stopListening(),this}},{key:"hide",value:function(){return this.dropdown.deactivate(),this}},{key:"register",value:function(e){var t=this;return e.forEach(function(e){t.completer.registerStrategy(new v.default(e))}),this}},{key:"trigger",value:function(e){return this.isQueryInFlight?this.nextPendingQuery=e:(this.isQueryInFlight=!0,this.nextPendingQuery=null,this.completer.run(e)),this}},{key:"handleHit",value:function(e){var t=e.searchResults;t.length?this.dropdown.render(t,this.editor.getCursorOffset()):this.dropdown.deactivate(),this.isQueryInFlight=!1,null!==this.nextPendingQuery&&this.trigger(this.nextPendingQuery)}},{key:"handleMove",value:function(e){"UP"===e.detail.code?this.dropdown.up(e):this.dropdown.down(e)}},{key:"handleEnter",value:function(e){var t=this.dropdown.getActiveItem();t?(this.dropdown.select(t),e.preventDefault()):this.dropdown.deactivate()}},{key:"handleEsc",value:function(e){this.dropdown.shown&&(this.dropdown.deactivate(),e.preventDefault())}},{key:"handleChange",value:function(e){null!=e.detail.beforeCursor?this.trigger(e.detail.beforeCursor):this.dropdown.deactivate()}},{key:"handleSelect",value:function(e){this.emit("select",e),e.defaultPrevented||this.editor.applySearchResult(e.detail.searchResult)}},{key:"startListening",value:function(){var e=this;this.editor.on("move",this.handleMove).on("enter",this.handleEnter).on("esc",this.handleEsc).on("change",this.handleChange),this.dropdown.on("select",this.handleSelect),["show","shown","render","rendered","selected","hidden","hide"].forEach(function(t){e.dropdown.on(t,function(){return e.emit(t)})}),this.completer.on("hit",this.handleHit)}},{key:"stopListening",value:function(){this.completer.removeAllListeners(),this.dropdown.removeAllListeners(),this.editor.removeListener("move",this.handleMove).removeListener("enter",this.handleEnter).removeListener("esc",this.handleEsc).removeListener("change",this.handleChange)}}]),t}(m.default);t.default=b},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(1),l=r(u),c=n(9),h=r(c),f=n(0),d=(r(f),n(2)),v=(r(d),["handleQueryResult"]),p=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return e.strategies=[],v.forEach(function(t){e[t]=e[t].bind(e)}),e}return s(t,e),a(t,[{key:"destroy",value:function(){return this.strategies.forEach(function(e){return e.destroy()}),this}},{key:"registerStrategy",value:function(e){return this.strategies.push(e),this}},{key:"run",value:function(e){var t=this.extractQuery(e);t?t.execute(this.handleQueryResult):this.handleQueryResult([])}},{key:"extractQuery",value:function(e){for(var t=0;t<this.strategies.length;t++){var n=h.default.build(this.strategies[t],e);if(n)return n}return null}},{key:"handleQueryResult",value:function(e){this.emit("hit",{searchResults:e})}}]),t}(l.default);t.default=p},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(0),a=r(s),u=n(2),l=(r(u),function(){function e(t,n,r){i(this,e),this.strategy=t,this.term=n,this.match=r}return o(e,null,[{key:"build",value:function(t,n){if("function"==typeof t.props.context){var r=t.props.context(n);if("string"==typeof r)n=r;else if(!r)return null}var i=t.matchText(n);return i?new e(t,i[t.index],i):null}}]),o(e,[{key:"execute",value:function(e){var t=this;this.strategy.search(this.term,function(n){e(n.map(function(e){return new a.default(e,t.term,t.strategy)}))},this.match)}}]),e}());t.default=l},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(1),l=r(u),c=n(11),h=r(c),f=n(0),d=(r(f),n(3)),v="dropdown-menu textcomplete-dropdown",p=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));n.shown=!1,n.items=[],n.activeItem=null,n.footer=e.footer,n.header=e.header,n.maxCount=e.maxCount||10,n.el.className=e.className||v,n.rotate=!e.hasOwnProperty("rotate")||e.rotate,n.placement=e.placement,n.itemOptions=e.item||{};var r=e.style;return r&&Object.keys(r).forEach(function(e){n.el.style[e]=r[e]}),n}return s(t,e),a(t,null,[{key:"createElement",value:function(){var e=document.createElement("ul"),t=e.style;t.display="none",t.position="absolute",t.zIndex="10000";var n=document.body;return n&&n.appendChild(e),e}}]),a(t,[{key:"destroy",value:function(){var e=this.el.parentNode;return e&&e.removeChild(this.el),this.clear()._el=null,this}},{key:"render",value:function(e,t){var n=this,r=(0,d.createCustomEvent)("render",{cancelable:!0});if(this.emit("render",r),r.defaultPrevented)return this;var i=e.map(function(e){return e.data}),o=e.slice(0,this.maxCount||e.length).map(function(e){return new h.default(e,n.itemOptions)});return this.clear().setStrategyId(e[0]).renderEdge(i,"header").append(o).renderEdge(i,"footer").show().setOffset(t),this.emit("rendered",(0,d.createCustomEvent)("rendered")),this}},{key:"deactivate",value:function(){return this.hide().clear()}},{key:"select",value:function(e){var t={searchResult:e.searchResult},n=(0,d.createCustomEvent)("select",{cancelable:!0,detail:t});return this.emit("select",n),n.defaultPrevented?this:(this.deactivate(),this.emit("selected",(0,d.createCustomEvent)("selected",{detail:t})),this)}},{key:"up",value:function(e){return this.shown?this.moveActiveItem("prev",e):this}},{key:"down",value:function(e){return this.shown?this.moveActiveItem("next",e):this}},{key:"getActiveItem",value:function(){return this.activeItem}},{key:"append",value:function(e){var t=this,n=document.createDocumentFragment();return e.forEach(function(e){t.items.push(e),e.appended(t),n.appendChild(e.el)}),this.el.appendChild(n),this}},{key:"setOffset",value:function(e){var t=document.documentElement;if(t){var n=this.el.offsetWidth;if(e.left){var r=t.clientWidth;e.left+n>r&&(e.left=r-n),this.el.style.left=e.left+"px"}else e.right&&(e.right-n<0&&(e.right=0),this.el.style.right=e.right+"px");this.isPlacementTop()?this.el.style.bottom=t.clientHeight-e.top+e.lineHeight+"px":this.el.style.top=e.top+"px"}return this}},{key:"show",value:function(){if(!this.shown){var e=(0,d.createCustomEvent)("show",{cancelable:!0});if(this.emit("show",e),e.defaultPrevented)return this;this.el.style.display="block",this.shown=!0,this.emit("shown",(0,d.createCustomEvent)("shown"))}return this}},{key:"hide",value:function(){if(this.shown){var e=(0,d.createCustomEvent)("hide",{cancelable:!0});if(this.emit("hide",e),e.defaultPrevented)return this;this.el.style.display="none",this.shown=!1,this.emit("hidden",(0,d.createCustomEvent)("hidden"))}return this}},{key:"clear",value:function(){return this.el.innerHTML="",this.items.forEach(function(e){return e.destroy()}),this.items=[],this}},{key:"moveActiveItem",value:function(e,t){var n="next"===e?this.activeItem?this.activeItem.next:this.items[0]:this.activeItem?this.activeItem.prev:this.items[this.items.length-1];return n&&(n.activate(),t.preventDefault()),this}},{key:"setStrategyId",value:function(e){var t=e&&e.strategy.props.id;return t?this.el.setAttribute("data-strategy",t):this.el.removeAttribute("data-strategy"),this}},{key:"renderEdge",value:function(e,t){var n=("header"===t?this.header:this.footer)||"",r="function"==typeof n?n(e):n,i=document.createElement("li");return i.classList.add("textcomplete-"+t),i.innerHTML=r,this.el.appendChild(i),this}},{key:"isPlacementTop",value:function(){return"top"===this.placement}},{key:"el",get:function(){return this._el||(this._el=t.createElement()),this._el}}]),t}(l.default);t.default=p},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CLASS_NAME=void 0;var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(0),s=(function(e){e&&e.__esModule}(o),t.DEFAULT_CLASS_NAME="textcomplete-item"),a=["onClick","onMouseover"],u=function(){function e(t,n){var i=this;r(this,e),this.searchResult=t,this.active=!1,this.className=n.className||s,this.activeClassName=this.className+" active",a.forEach(function(e){i[e]=i[e].bind(i)})}return i(e,[{key:"destroy",value:function(){this.el.removeEventListener("mousedown",this.onClick,!1),this.el.removeEventListener("mouseover",this.onMouseover,!1),this.el.removeEventListener("touchstart",this.onClick,!1),this.active&&(this.dropdown.activeItem=null),this._el=null}},{key:"appended",value:function(e){this.dropdown=e,this.siblings=e.items,this.index=this.siblings.length-1}},{key:"activate",value:function(){if(!this.active){var e=this.dropdown.getActiveItem();e&&e.deactivate(),this.dropdown.activeItem=this,this.active=!0,this.el.className=this.activeClassName}return this}},{key:"deactivate",value:function(){return this.active&&(this.active=!1,this.el.className=this.className,this.dropdown.activeItem=null),this}},{key:"onClick",value:function(e){e.preventDefault(),this.dropdown.select(this)}},{key:"onMouseover",value:function(){this.activate()}},{key:"el",get:function(){if(this._el)return this._el;var e=document.createElement("li");e.className=this.active?this.activeClassName:this.className;var t=document.createElement("a");return t.innerHTML=this.searchResult.render(),e.appendChild(t),this._el=e,e.addEventListener("mousedown",this.onClick),e.addEventListener("mouseover",this.onMouseover),e.addEventListener("touchstart",this.onClick),e}},{key:"next",get:function(){var e=void 0;if(this.index===this.siblings.length-1){if(!this.dropdown.rotate)return null;e=0}else e=this.index+1;return this.siblings[e]}},{key:"prev",get:function(){var e=void 0;if(0===this.index){if(!this.dropdown.rotate)return null;e=this.siblings.length-1}else e=this.index-1;return this.siblings[e]}}]),e}();t.default=u},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var s=i.get;if(void 0!==s)return s.call(r)},l=n(13),c=r(l),h=n(4),f=r(h),d=n(3),v=n(0),p=(r(v),n(14)),y=["onInput","onKeydown"],m=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.el=e,y.forEach(function(e){n[e]=n[e].bind(n)}),n.startListening(),n}return s(t,e),a(t,[{key:"destroy",value:function(){return u(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"destroy",this).call(this),this.stopListening(),this.el=null,this}},{key:"applySearchResult",value:function(e){var t=this.getBeforeCursor();if(null!=t){var n=e.replace(t,this.getAfterCursor());this.el.focus(),Array.isArray(n)&&((0,c.default)(this.el,n[0],n[1]),this.el.dispatchEvent(new Event("input")))}}},{key:"getCursorOffset",value:function(){var e=(0,d.calculateElementOffset)(this.el),t=this.getElScroll(),n=this.getCursorPosition(),r=(0,d.getLineHeightPx)(this.el),i=e.top-t.top+n.top+r,o=e.left-t.left+n.left;return"rtl"!==this.el.dir?{top:i,left:o,lineHeight:r}:{top:i,right:document.documentElement?document.documentElement.clientWidth-o:0,lineHeight:r}}},{key:"getBeforeCursor",value:function(){return this.el.selectionStart!==this.el.selectionEnd?null:this.el.value.substring(0,this.el.selectionEnd)}},{key:"getAfterCursor",value:function(){return this.el.value.substring(this.el.selectionEnd)}},{key:"getElScroll",value:function(){return{top:this.el.scrollTop,left:this.el.scrollLeft}}},{key:"getCursorPosition",value:function(){return p(this.el,this.el.selectionEnd)}},{key:"onInput",value:function(){this.emitChangeEvent()}},{key:"onKeydown",value:function(e){var t=this.getCode(e),n=void 0;"UP"===t||"DOWN"===t?n=this.emitMoveEvent(t):"ENTER"===t?n=this.emitEnterEvent():"ESC"===t&&(n=this.emitEscEvent()),n&&n.defaultPrevented&&e.preventDefault()}},{key:"startListening",value:function(){this.el.addEventListener("input",this.onInput),this.el.addEventListener("keydown",this.onKeydown)}},{key:"stopListening",value:function(){this.el.removeEventListener("input",this.onInput),this.el.removeEventListener("keydown",this.onKeydown)}}]),t}(f.default);t.default=m},function(e,t){"use strict";function n(){if("undefined"!=typeof Event)return new Event("input",{bubbles:!0,cancelable:!0});var e=document.createEvent("Event");return e.initEvent("input",!0,!0),e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){for(var i=e.value,o=t+(r||""),s=document.activeElement,a=0,u=0;a<i.length&&a<o.length&&i[a]===o[a];)a++;for(;i.length-u-1>=0&&o.length-u-1>=0&&i[i.length-u-1]===o[o.length-u-1];)u++;a=Math.min(a,Math.min(i.length,o.length)-u),e.setSelectionRange(a,i.length-u);var l=o.substring(a,o.length-u);return e.focus(),document.execCommand("insertText",!1,l)||(e.value=o,e.dispatchEvent(n())),e.setSelectionRange(t.length,t.length),s&&s.focus(),e}},function(e){!function(){function t(e,t,o){if(!r)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");var s=o&&o.debug||!1;if(s){var a=document.querySelector("#input-textarea-caret-position-mirror-div");a&&a.parentNode.removeChild(a)}var u=document.createElement("div");u.id="input-textarea-caret-position-mirror-div",document.body.appendChild(u);var l=u.style,c=window.getComputedStyle?getComputedStyle(e):e.currentStyle;l.whiteSpace="pre-wrap","INPUT"!==e.nodeName&&(l.wordWrap="break-word"),l.position="absolute",s||(l.visibility="hidden"),n.forEach(function(e){l[e]=c[e]}),i?e.scrollHeight>parseInt(c.height)&&(l.overflowY="scroll"):l.overflow="hidden",u.textContent=e.value.substring(0,t),"INPUT"===e.nodeName&&(u.textContent=u.textContent.replace(/\s/g," "));var h=document.createElement("span");h.textContent=e.value.substring(t)||".",u.appendChild(h);var f={top:h.offsetTop+parseInt(c.borderTopWidth),left:h.offsetLeft+parseInt(c.borderLeftWidth)};return s?h.style.backgroundColor="#aaa":document.body.removeChild(u),f}var n=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],r="undefined"!=typeof window,i=r&&null!=window.mozInnerScreenX;void 0!==e&&void 0!==e.exports?e.exports=t:r&&(window.getCaretCoordinates=t)}()}]);
-//# sourceMappingURL=textcomplete.min.js.map \ No newline at end of file
+!function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=5)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(2),s=(function(e){e&&e.__esModule}(o),function(){function e(t,n,i){r(this,e),this.data=t,this.term=n,this.strategy=i}return i(e,[{key:"replace",value:function(e,t){var n=this.strategy.replace(this.data);if(null!==n){Array.isArray(n)&&(t=n[1]+t,n=n[0]);var r=this.strategy.matchText(e);if(r)return n=n.replace(/\$&/g,r[0]).replace(/\$(\d)/g,function(e,t){return r[parseInt(t,10)]}),[[e.slice(0,r.index),n,e.slice(r.index+r[0].length)].join(""),t]}}},{key:"render",value:function(){return this.strategy.template(this.data,this.term)}}]),e}());t.default=s},function(e){"use strict";function t(){}function n(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function r(){this._events=new t,this._eventsCount=0}var i=Object.prototype.hasOwnProperty,o="~";Object.create&&(t.prototype=Object.create(null),(new t).__proto__||(o=!1)),r.prototype.eventNames=function(){var e,t,n=[];if(0===this._eventsCount)return n;for(t in e=this._events)i.call(e,t)&&n.push(o?t.slice(1):t);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(e)):n},r.prototype.listeners=function(e,t){var n=o?o+e:e,r=this._events[n];if(t)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var i=0,s=r.length,a=new Array(s);i<s;i++)a[i]=r[i].fn;return a},r.prototype.emit=function(e,t,n,r,i,s){var a=o?o+e:e;if(!this._events[a])return!1;var u,l,c=this._events[a],h=arguments.length;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),h){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,n),!0;case 4:return c.fn.call(c.context,t,n,r),!0;case 5:return c.fn.call(c.context,t,n,r,i),!0;case 6:return c.fn.call(c.context,t,n,r,i,s),!0}for(l=1,u=new Array(h-1);l<h;l++)u[l-1]=arguments[l];c.fn.apply(c.context,u)}else{var f,d=c.length;for(l=0;l<d;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),h){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,n);break;case 4:c[l].fn.call(c[l].context,t,n,r);break;default:if(!u)for(f=1,u=new Array(h-1);f<h;f++)u[f-1]=arguments[f];c[l].fn.apply(c[l].context,u)}}return!0},r.prototype.on=function(e,t,r){var i=new n(t,r||this),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.once=function(e,t,r){var i=new n(t,r||this,!0),s=o?o+e:e;return this._events[s]?this._events[s].fn?this._events[s]=[this._events[s],i]:this._events[s].push(i):(this._events[s]=i,this._eventsCount++),this},r.prototype.removeListener=function(e,n,r,i){var s=o?o+e:e;if(!this._events[s])return this;if(!n)return 0==--this._eventsCount?this._events=new t:delete this._events[s],this;var a=this._events[s];if(a.fn)a.fn!==n||i&&!a.once||r&&a.context!==r||(0==--this._eventsCount?this._events=new t:delete this._events[s]);else{for(var u=0,l=[],c=a.length;u<c;u++)(a[u].fn!==n||i&&!a[u].once||r&&a[u].context!==r)&&l.push(a[u]);l.length?this._events[s]=1===l.length?l[0]:l:0==--this._eventsCount?this._events=new t:delete this._events[s]}return this},r.prototype.removeAllListeners=function(e){var n;return e?(n=o?o+e:e,this._events[n]&&(0==--this._eventsCount?this._events=new t:delete this._events[n])):(this._events=new t,this._eventsCount=0),this},r.prototype.off=r.prototype.removeListener,r.prototype.addListener=r.prototype.on,r.prototype.setMaxListeners=function(){return this},r.prefixed=o,r.EventEmitter=r,e.exports=r},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e){return e}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(t){n(this,e),this.props=t,this.cache=t.cache?{}:null}return i(e,[{key:"destroy",value:function(){return this.cache=null,this}},{key:"search",value:function(e,t,n){this.cache?this.searchWithCache(e,t,n):this.props.search(e,t,n)}},{key:"replace",value:function(e){return this.props.replace(e)}},{key:"searchWithCache",value:function(e,t,n){var r=this;this.cache&&this.cache[e]?t(this.cache[e]):this.props.search(e,function(n){r.cache&&(r.cache[e]=n),t(n)},n)}},{key:"matchText",value:function(e){return"function"==typeof this.match?this.match(e):e.match(this.match)}},{key:"match",get:function(){return this.props.match}},{key:"index",get:function(){return"number"==typeof this.props.index?this.props.index:2}},{key:"template",get:function(){return this.props.template||r}}]),e}();t.default=o},function(e,t){"use strict";function n(e){var t=e.getBoundingClientRect(),n=e.ownerDocument,r=n.defaultView,i=n.documentElement,o={top:t.top+r.pageYOffset,left:t.left+r.pageXOffset};return i&&(o.top-=i.clientTop,o.left-=i.clientLeft),o}function r(e){return e>=s&&e<=a}function i(e){var t=window.getComputedStyle(e);return r(t.lineHeight.charCodeAt(0))?r(t.lineHeight.charCodeAt(t.lineHeight.length-1))?parseFloat(t.lineHeight)*parseFloat(t.fontSize):parseFloat(t.lineHeight):o(e.nodeName,t)}function o(e,t){var n=document.body;if(!n)return 0;var r=document.createElement(e);r.innerHTML="&nbsp;",r.style.fontSize=t.fontSize,r.style.fontFamily=t.fontFamily,r.style.padding="0",n.appendChild(r),r instanceof HTMLTextAreaElement&&(r.rows=1);var i=r.offsetHeight;return n.removeChild(r),i}Object.defineProperty(t,"__esModule",{value:!0}),t.calculateElementOffset=n,t.getLineHeightPx=i,t.calculateLineHeightPx=o;var s=(t.createCustomEvent=function(){return"function"==typeof window.CustomEvent?function(e,t){return new document.defaultView.CustomEvent(e,{cancelable:t&&t.cancelable||!1,detail:t&&t.detail||void 0})}:function(e,t){var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,!1,t&&t.cancelable||!1,t&&t.detail||void 0),n}}(),"0".charCodeAt(0)),a="9".charCodeAt(0)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(1),l=r(u),c=n(3),h=n(0),f=(r(h),function(e){function t(){return i(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return s(t,e),a(t,[{key:"destroy",value:function(){return this}},{key:"applySearchResult",value:function(){throw new Error("Not implemented.")}},{key:"getCursorOffset",value:function(){throw new Error("Not implemented.")}},{key:"getBeforeCursor",value:function(){throw new Error("Not implemented.")}},{key:"emitMoveEvent",value:function(e){var t=(0,c.createCustomEvent)("move",{cancelable:!0,detail:{code:e}});return this.emit("move",t),t}},{key:"emitEnterEvent",value:function(){var e=(0,c.createCustomEvent)("enter",{cancelable:!0});return this.emit("enter",e),e}},{key:"emitChangeEvent",value:function(){var e=(0,c.createCustomEvent)("change",{detail:{beforeCursor:this.getBeforeCursor()}});return this.emit("change",e),e}},{key:"emitEscEvent",value:function(){var e=(0,c.createCustomEvent)("esc",{cancelable:!0});return this.emit("esc",e),e}},{key:"getCode",value:function(e){return 9===e.keyCode?"ENTER":13===e.keyCode?"ENTER":27===e.keyCode?"ESC":38===e.keyCode?"UP":40===e.keyCode?"DOWN":78===e.keyCode&&e.ctrlKey?"DOWN":80===e.keyCode&&e.ctrlKey?"UP":"OTHER"}}]),t}(l.default));t.default=f},function(e,t,n){"use strict";(function(e){function t(e){return e&&e.__esModule?e:{default:e}}var r=n(7),i=t(r),o=n(12),s=t(o),a=void 0;a=e.Textcomplete&&e.Textcomplete.editors?e.Textcomplete.editors:{},a.Textarea=s.default,e.Textcomplete=i.default,e.Textcomplete.editors=a}).call(t,n(6))},function(e){var t;t=function(){return this}();try{t=t||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(t=window)}e.exports=t},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(8),l=r(u),c=n(4),h=(r(c),n(10)),f=r(h),d=n(2),v=r(d),p=n(0),y=(r(p),n(1)),m=r(y),g=["handleChange","handleEnter","handleEsc","handleHit","handleMove","handleSelect"],b=function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return r.completer=new l.default,r.isQueryInFlight=!1,r.nextPendingQuery=null,r.dropdown=new f.default(n.dropdown||{}),r.editor=e,r.options=n,g.forEach(function(e){r[e]=r[e].bind(r)}),r.startListening(),r}return s(t,e),a(t,[{key:"destroy",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this.completer.destroy(),this.dropdown.destroy(),e&&this.editor.destroy(),this.stopListening(),this}},{key:"hide",value:function(){return this.dropdown.deactivate(),this}},{key:"register",value:function(e){var t=this;return e.forEach(function(e){t.completer.registerStrategy(new v.default(e))}),this}},{key:"trigger",value:function(e){return this.isQueryInFlight?this.nextPendingQuery=e:(this.isQueryInFlight=!0,this.nextPendingQuery=null,this.completer.run(e)),this}},{key:"handleHit",value:function(e){var t=e.searchResults;t.length?this.dropdown.render(t,this.editor.getCursorOffset()):this.dropdown.deactivate(),this.isQueryInFlight=!1,null!==this.nextPendingQuery&&this.trigger(this.nextPendingQuery)}},{key:"handleMove",value:function(e){"UP"===e.detail.code?this.dropdown.up(e):this.dropdown.down(e)}},{key:"handleEnter",value:function(e){var t=this.dropdown.getActiveItem();t?(this.dropdown.select(t),e.preventDefault()):this.dropdown.deactivate()}},{key:"handleEsc",value:function(e){this.dropdown.shown&&(this.dropdown.deactivate(),e.preventDefault())}},{key:"handleChange",value:function(e){null!=e.detail.beforeCursor?this.trigger(e.detail.beforeCursor):this.dropdown.deactivate()}},{key:"handleSelect",value:function(e){this.emit("select",e),e.defaultPrevented||this.editor.applySearchResult(e.detail.searchResult)}},{key:"startListening",value:function(){var e=this;this.editor.on("move",this.handleMove).on("enter",this.handleEnter).on("esc",this.handleEsc).on("change",this.handleChange),this.dropdown.on("select",this.handleSelect),["show","shown","render","rendered","selected","hidden","hide"].forEach(function(t){e.dropdown.on(t,function(){return e.emit(t)})}),this.completer.on("hit",this.handleHit)}},{key:"stopListening",value:function(){this.completer.removeAllListeners(),this.dropdown.removeAllListeners(),this.editor.removeListener("move",this.handleMove).removeListener("enter",this.handleEnter).removeListener("esc",this.handleEsc).removeListener("change",this.handleChange)}}]),t}(m.default);t.default=b},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(1),l=r(u),c=n(9),h=r(c),f=n(0),d=(r(f),n(2)),v=(r(d),["handleQueryResult"]),p=function(e){function t(){i(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return e.strategies=[],v.forEach(function(t){e[t]=e[t].bind(e)}),e}return s(t,e),a(t,[{key:"destroy",value:function(){return this.strategies.forEach(function(e){return e.destroy()}),this}},{key:"registerStrategy",value:function(e){return this.strategies.push(e),this}},{key:"run",value:function(e){var t=this.extractQuery(e);t?t.execute(this.handleQueryResult):this.handleQueryResult([])}},{key:"extractQuery",value:function(e){for(var t=0;t<this.strategies.length;t++){var n=h.default.build(this.strategies[t],e);if(n)return n}return null}},{key:"handleQueryResult",value:function(e){this.emit("hit",{searchResults:e})}}]),t}(l.default);t.default=p},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(0),a=r(s),u=n(2),l=(r(u),function(){function e(t,n,r){i(this,e),this.strategy=t,this.term=n,this.match=r}return o(e,null,[{key:"build",value:function(t,n){if("function"==typeof t.props.context){var r=t.props.context(n);if("string"==typeof r)n=r;else if(!r)return null}var i=t.matchText(n);return i?new e(t,i[t.index],i):null}}]),o(e,[{key:"execute",value:function(e){var t=this;this.strategy.search(this.term,function(n){e(n.map(function(e){return new a.default(e,t.term,t.strategy)}))},this.match)}}]),e}());t.default=l},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(1),l=r(u),c=n(11),h=r(c),f=n(0),d=(r(f),n(3)),v="dropdown-menu textcomplete-dropdown",p=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));n.shown=!1,n.items=[],n.activeItem=null,n.footer=e.footer,n.header=e.header,n.maxCount=e.maxCount||10,n.el.className=e.className||v,n.rotate=!e.hasOwnProperty("rotate")||e.rotate,n.placement=e.placement,n.itemOptions=e.item||{};var r=e.style;return r&&Object.keys(r).forEach(function(e){n.el.style[e]=r[e]}),n}return s(t,e),a(t,null,[{key:"createElement",value:function(){var e=document.createElement("ul"),t=e.style;t.display="none",t.position="absolute",t.zIndex="10000";var n=document.body;return n&&n.appendChild(e),e}}]),a(t,[{key:"destroy",value:function(){var e=this.el.parentNode;return e&&e.removeChild(this.el),this.clear()._el=null,this}},{key:"render",value:function(e,t){var n=this,r=(0,d.createCustomEvent)("render",{cancelable:!0});if(this.emit("render",r),r.defaultPrevented)return this;var i=e.map(function(e){return e.data}),o=e.slice(0,this.maxCount||e.length).map(function(e){return new h.default(e,n.itemOptions)});return this.clear().setStrategyId(e[0]).renderEdge(i,"header").append(o).renderEdge(i,"footer").show().setOffset(t),this.emit("rendered",(0,d.createCustomEvent)("rendered")),this}},{key:"deactivate",value:function(){return this.hide().clear()}},{key:"select",value:function(e){var t={searchResult:e.searchResult},n=(0,d.createCustomEvent)("select",{cancelable:!0,detail:t});return this.emit("select",n),n.defaultPrevented?this:(this.deactivate(),this.emit("selected",(0,d.createCustomEvent)("selected",{detail:t})),this)}},{key:"up",value:function(e){return this.shown?this.moveActiveItem("prev",e):this}},{key:"down",value:function(e){return this.shown?this.moveActiveItem("next",e):this}},{key:"getActiveItem",value:function(){return this.activeItem}},{key:"append",value:function(e){var t=this,n=document.createDocumentFragment();return e.forEach(function(e){t.items.push(e),e.appended(t),n.appendChild(e.el)}),this.el.appendChild(n),this}},{key:"setOffset",value:function(e){var t=document.documentElement;if(t){var n=this.el.offsetWidth;if(e.left){var r=t.clientWidth;e.left+n>r&&(e.left=r-n),this.el.style.left=e.left+"px"}else e.right&&(e.right-n<0&&(e.right=0),this.el.style.right=e.right+"px");this.isPlacementTop()?this.el.style.bottom=t.clientHeight-e.top+e.lineHeight+"px":this.el.style.top=e.top+"px"}return this}},{key:"show",value:function(){if(!this.shown){var e=(0,d.createCustomEvent)("show",{cancelable:!0});if(this.emit("show",e),e.defaultPrevented)return this;this.el.style.display="block",this.shown=!0,this.emit("shown",(0,d.createCustomEvent)("shown"))}return this}},{key:"hide",value:function(){if(this.shown){var e=(0,d.createCustomEvent)("hide",{cancelable:!0});if(this.emit("hide",e),e.defaultPrevented)return this;this.el.style.display="none",this.shown=!1,this.emit("hidden",(0,d.createCustomEvent)("hidden"))}return this}},{key:"clear",value:function(){return this.el.innerHTML="",this.items.forEach(function(e){return e.destroy()}),this.items=[],this}},{key:"moveActiveItem",value:function(e,t){var n="next"===e?this.activeItem?this.activeItem.next:this.items[0]:this.activeItem?this.activeItem.prev:this.items[this.items.length-1];return n&&(n.activate(),t.preventDefault()),this}},{key:"setStrategyId",value:function(e){var t=e&&e.strategy.props.id;return t?this.el.setAttribute("data-strategy",t):this.el.removeAttribute("data-strategy"),this}},{key:"renderEdge",value:function(e,t){var n=("header"===t?this.header:this.footer)||"",r="function"==typeof n?n(e):n,i=document.createElement("li");return i.classList.add("textcomplete-"+t),i.innerHTML=r,this.el.appendChild(i),this}},{key:"isPlacementTop",value:function(){return"top"===this.placement}},{key:"el",get:function(){return this._el||(this._el=t.createElement()),this._el}}]),t}(l.default);t.default=p},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_CLASS_NAME=void 0;var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=n(0),s=(function(e){e&&e.__esModule}(o),t.DEFAULT_CLASS_NAME="textcomplete-item"),a=["onClick","onMouseover"],u=function(){function e(t,n){var i=this;r(this,e),this.searchResult=t,this.active=!1,this.className=n.className||s,this.activeClassName=this.className+" active",a.forEach(function(e){i[e]=i[e].bind(i)})}return i(e,[{key:"destroy",value:function(){this.el.removeEventListener("mousedown",this.onClick,!1),this.el.removeEventListener("mouseover",this.onMouseover,!1),this.active&&(this.dropdown.activeItem=null),this._el=null}},{key:"appended",value:function(e){this.dropdown=e,this.siblings=e.items,this.index=this.siblings.length-1}},{key:"activate",value:function(){if(!this.active){var e=this.dropdown.getActiveItem();e&&e.deactivate(),this.dropdown.activeItem=this,this.active=!0,this.el.className=this.activeClassName}return this}},{key:"deactivate",value:function(){return this.active&&(this.active=!1,this.el.className=this.className,this.dropdown.activeItem=null),this}},{key:"onClick",value:function(e){e.preventDefault(),this.dropdown.select(this)}},{key:"onMouseover",value:function(){this.activate()}},{key:"el",get:function(){if(this._el)return this._el;var e=document.createElement("li");e.className=this.active?this.activeClassName:this.className;var t=document.createElement("a");return t.innerHTML=this.searchResult.render(),e.appendChild(t),this._el=e,e.addEventListener("mousedown",this.onClick),e.addEventListener("mouseover",this.onMouseover),e}},{key:"next",get:function(){var e=void 0;if(this.index===this.siblings.length-1){if(!this.dropdown.rotate)return null;e=0}else e=this.index+1;return this.siblings[e]}},{key:"prev",get:function(){var e=void 0;if(0===this.index){if(!this.dropdown.rotate)return null;e=this.siblings.length-1}else e=this.index-1;return this.siblings[e]}}]),e}();t.default=u},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=function e(t,n,r){null===t&&(t=Function.prototype);var i=Object.getOwnPropertyDescriptor(t,n);if(void 0===i){var o=Object.getPrototypeOf(t);return null===o?void 0:e(o,n,r)}if("value"in i)return i.value;var s=i.get;if(void 0!==s)return s.call(r)},l=n(13),c=r(l),h=n(4),f=r(h),d=n(3),v=n(0),p=(r(v),n(14)),y=["onInput","onKeydown"],m=function(e){function t(e){i(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.el=e,y.forEach(function(e){n[e]=n[e].bind(n)}),n.startListening(),n}return s(t,e),a(t,[{key:"destroy",value:function(){return u(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"destroy",this).call(this),this.stopListening(),this.el=null,this}},{key:"applySearchResult",value:function(e){var t=this.getBeforeCursor();if(null!=t){var n=e.replace(t,this.getAfterCursor());this.el.focus(),Array.isArray(n)&&((0,c.default)(this.el,n[0],n[1]),this.el.dispatchEvent(new Event("input")))}}},{key:"getCursorOffset",value:function(){var e=(0,d.calculateElementOffset)(this.el),t=this.getElScroll(),n=this.getCursorPosition(),r=(0,d.getLineHeightPx)(this.el),i=e.top-t.top+n.top+r,o=e.left-t.left+n.left;return"rtl"!==this.el.dir?{top:i,left:o,lineHeight:r}:{top:i,right:document.documentElement?document.documentElement.clientWidth-o:0,lineHeight:r}}},{key:"getBeforeCursor",value:function(){return this.el.selectionStart!==this.el.selectionEnd?null:this.el.value.substring(0,this.el.selectionEnd)}},{key:"getAfterCursor",value:function(){return this.el.value.substring(this.el.selectionEnd)}},{key:"getElScroll",value:function(){return{top:this.el.scrollTop,left:this.el.scrollLeft}}},{key:"getCursorPosition",value:function(){return p(this.el,this.el.selectionEnd)}},{key:"onInput",value:function(){this.emitChangeEvent()}},{key:"onKeydown",value:function(e){var t=this.getCode(e),n=void 0;"UP"===t||"DOWN"===t?n=this.emitMoveEvent(t):"ENTER"===t?n=this.emitEnterEvent():"ESC"===t&&(n=this.emitEscEvent()),n&&n.defaultPrevented&&e.preventDefault()}},{key:"startListening",value:function(){this.el.addEventListener("input",this.onInput),this.el.addEventListener("keydown",this.onKeydown)}},{key:"stopListening",value:function(){this.el.removeEventListener("input",this.onInput),this.el.removeEventListener("keydown",this.onKeydown)}}]),t}(f.default);t.default=m},function(e,t){"use strict";function n(){if("undefined"!=typeof Event)return new Event("input",{bubbles:!0,cancelable:!0});var e=document.createEvent("Event");return e.initEvent("input",!0,!0),e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,r){for(var i=e.value,o=t+(r||""),s=document.activeElement,a=0,u=0;a<i.length&&a<o.length&&i[a]===o[a];)a++;for(;i.length-u-1>=0&&o.length-u-1>=0&&i[i.length-u-1]===o[o.length-u-1];)u++;a=Math.min(a,Math.min(i.length,o.length)-u),e.setSelectionRange(a,i.length-u);var l=o.substring(a,o.length-u);return e.focus(),document.execCommand("insertText",!1,l)||(e.value=o,e.dispatchEvent(n())),e.setSelectionRange(t.length,t.length),s&&s.focus(),e}},function(e){!function(){function t(e,t,o){if(!r)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");var s=o&&o.debug||!1;if(s){var a=document.querySelector("#input-textarea-caret-position-mirror-div");a&&a.parentNode.removeChild(a)}var u=document.createElement("div");u.id="input-textarea-caret-position-mirror-div",document.body.appendChild(u);var l=u.style,c=window.getComputedStyle?getComputedStyle(e):e.currentStyle;l.whiteSpace="pre-wrap","INPUT"!==e.nodeName&&(l.wordWrap="break-word"),l.position="absolute",s||(l.visibility="hidden"),n.forEach(function(e){l[e]=c[e]}),i?e.scrollHeight>parseInt(c.height)&&(l.overflowY="scroll"):l.overflow="hidden",u.textContent=e.value.substring(0,t),"INPUT"===e.nodeName&&(u.textContent=u.textContent.replace(/\s/g," "));var h=document.createElement("span");h.textContent=e.value.substring(t)||".",u.appendChild(h);var f={top:h.offsetTop+parseInt(c.borderTopWidth),left:h.offsetLeft+parseInt(c.borderLeftWidth)};return s?h.style.backgroundColor="#aaa":document.body.removeChild(u),f}var n=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],r="undefined"!=typeof window,i=r&&null!=window.mozInnerScreenX;void 0!==e&&void 0!==e.exports?e.exports=t:r&&(window.getCaretCoordinates=t)}()}]);
+//# sourceMappingURL=textcomplete.min.js.map
diff --git a/util/hmessages.po b/util/hmessages.po
index a87a00b4e..9fa7b139c 100644
--- a/util/hmessages.po
+++ b/util/hmessages.po
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: 8.0RC1\n"
+"Project-Id-Version: 8.2RC1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-01-05 11:32+0100\n"
+"POT-Creation-Date: 2023-03-11 20:39+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,11 +17,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:3466
+#: ../../view/theme/redbasic/php/config.php:15
#: ../../addon/cart/submodules/orderoptions.php:335
#: ../../addon/cart/submodules/orderoptions.php:359
#: ../../addon/cart/submodules/orderoptions.php:435
-#: ../../addon/cart/submodules/orderoptions.php:459
+#: ../../addon/cart/submodules/orderoptions.php:459 ../../include/text.php:3464
#: ../../Zotlabs/Module/Admin/Site.php:251
msgid "Default"
msgstr ""
@@ -31,101 +31,103 @@ msgstr ""
msgid "Focus (Hubzilla default)"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:98 ../../include/js_strings.php:23
-#: ../../addon/piwik/piwik.php:95 ../../addon/hubwall/hubwall.php:95
-#: ../../addon/pageheader/Mod_Pageheader.php:52
-#: ../../addon/twitter/Mod_Twitter.php:182
-#: ../../addon/startpage/Mod_Startpage.php:71
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:62
-#: ../../addon/libertree/Mod_Libertree.php:68
-#: ../../addon/nofed/Mod_Nofed.php:51 ../../addon/workflow/workflow.php:1466
-#: ../../addon/workflow/workflow.php:1525
-#: ../../addon/workflow/workflow.php:1644
-#: ../../addon/workflow/workflow.php:2747
-#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:94
-#: ../../addon/xmpp/Mod_Xmpp.php:70
+#: ../../view/theme/redbasic/php/config.php:98
#: ../../addon/channelreputation/channelreputation.php:143
-#: ../../addon/photocache/Mod_Photocache.php:63
-#: ../../addon/dwpost/Mod_Dwpost.php:78
-#: ../../addon/skeleton/Mod_Skeleton.php:49 ../../addon/hzfiles/hzfiles.php:86
-#: ../../addon/openstreetmap/openstreetmap.php:155
-#: ../../addon/redred/Mod_Redred.php:88
-#: ../../addon/socialauth/Mod_SocialAuth.php:341
-#: ../../addon/flashcards/Mod_Flashcards.php:269 ../../addon/irc/irc.php:45
-#: ../../addon/wppost/Mod_Wppost.php:107 ../../addon/pumpio/Mod_Pumpio.php:113
-#: ../../addon/ijpost/Mod_Ijpost.php:72 ../../addon/mailtest/mailtest.php:100
-#: ../../addon/logrot/logrot.php:35 ../../addon/nsfw/Mod_Nsfw.php:59
-#: ../../addon/wiki/Mod_Wiki.php:218 ../../addon/wiki/Mod_Wiki.php:907
-#: ../../addon/wiki/Widget/Wiki_pages.php:69
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:54 ../../addon/diaspora/diaspora.php:87
-#: ../../addon/diaspora/Mod_Diaspora.php:100
+#: ../../addon/wiki/Widget/Wiki_pages.php:69 ../../addon/wiki/Mod_Wiki.php:218
+#: ../../addon/wiki/Mod_Wiki.php:907
#: ../../addon/openclipatar/openclipatar.php:54
-#: ../../addon/likebanner/likebanner.php:57
-#: ../../addon/redphotos/redphotos.php:136 ../../addon/ljpost/Mod_Ljpost.php:80
-#: ../../addon/smileybutton/Mod_Smileybutton.php:53
+#: ../../addon/photocache/Mod_Photocache.php:63
+#: ../../addon/redred/Mod_Redred.php:88 ../../addon/redphotos/redphotos.php:136
#: ../../addon/statusnet/Mod_Statusnet.php:191
#: ../../addon/statusnet/Mod_Statusnet.php:249
#: ../../addon/statusnet/Mod_Statusnet.php:304
-#: ../../addon/statusnet/statusnet.php:602
-#: ../../addon/cart/submodules/hzservices.php:645
-#: ../../addon/cart/submodules/manualcat.php:248
+#: ../../addon/statusnet/statusnet.php:602 ../../addon/rtof/Mod_Rtof.php:70
+#: ../../addon/wppost/Mod_Wppost.php:107
+#: ../../addon/content_import/Mod_content_import.php:141
+#: ../../addon/openstreetmap/openstreetmap.php:155
+#: ../../addon/ijpost/Mod_Ijpost.php:72
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:62
+#: ../../addon/dwpost/Mod_Dwpost.php:78
+#: ../../addon/startpage/Mod_Startpage.php:71
+#: ../../addon/twitter/Mod_Twitter.php:182
+#: ../../addon/pumpio/Mod_Pumpio.php:113
#: ../../addon/cart/submodules/subscriptions.php:410
+#: ../../addon/cart/submodules/hzservices.php:645
#: ../../addon/cart/submodules/orderoptions.php:312
#: ../../addon/cart/submodules/orderoptions.php:412
-#: ../../addon/cart/cart.php:1376 ../../addon/cart/Settings/Cart.php:132
-#: ../../addon/cart/Settings/Cart.php:142 ../../addon/redfiles/redfiles.php:124
-#: ../../addon/rtof/Mod_Rtof.php:70
-#: ../../addon/content_import/Mod_content_import.php:141
-#: ../../Zotlabs/Lib/ThreadItem.php:828 ../../Zotlabs/Module/Locs.php:125
-#: ../../Zotlabs/Module/Invite.php:563 ../../Zotlabs/Module/Poke.php:199
-#: ../../Zotlabs/Module/Xchan.php:15
-#: ../../Zotlabs/Module/Email_validation.php:40
-#: ../../Zotlabs/Module/Connect.php:107 ../../Zotlabs/Module/Oauth2.php:114
-#: ../../Zotlabs/Module/Mitem.php:259 ../../Zotlabs/Module/Appman.php:220
-#: ../../Zotlabs/Module/Import_items.php:125 ../../Zotlabs/Module/Oauth.php:109
-#: ../../Zotlabs/Module/Permcats.php:257 ../../Zotlabs/Module/Mood.php:156
-#: ../../Zotlabs/Module/Import.php:611 ../../Zotlabs/Module/Tokens.php:294
-#: ../../Zotlabs/Module/Pconfig.php:117 ../../Zotlabs/Module/Chat.php:208
-#: ../../Zotlabs/Module/Chat.php:247 ../../Zotlabs/Module/Affinity.php:84
-#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:160
-#: ../../Zotlabs/Module/Regate.php:407 ../../Zotlabs/Module/Connedit.php:714
-#: ../../Zotlabs/Module/Admin/Channels.php:147
+#: ../../addon/cart/submodules/manualcat.php:248
+#: ../../addon/cart/Settings/Cart.php:132
+#: ../../addon/cart/Settings/Cart.php:142 ../../addon/cart/cart.php:1425
+#: ../../addon/nofed/Mod_Nofed.php:51
+#: ../../addon/smileybutton/Mod_Smileybutton.php:53
+#: ../../addon/redfiles/redfiles.php:124 ../../addon/diaspora/diaspora.php:87
+#: ../../addon/diaspora/Mod_Diaspora.php:100 ../../addon/piwik/piwik.php:95
+#: ../../addon/workflow/workflow.php:1466
+#: ../../addon/workflow/workflow.php:1525
+#: ../../addon/workflow/workflow.php:1644
+#: ../../addon/workflow/workflow.php:2747
+#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:94
+#: ../../addon/likebanner/likebanner.php:57
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:54 ../../addon/hubwall/hubwall.php:95
+#: ../../addon/flashcards/Mod_Flashcards.php:269
+#: ../../addon/libertree/Mod_Libertree.php:68 ../../addon/logrot/logrot.php:35
+#: ../../addon/skeleton/Mod_Skeleton.php:49
+#: ../../addon/socialauth/Mod_SocialAuth.php:341
+#: ../../addon/nsfw/Mod_Nsfw.php:59 ../../addon/mailtest/mailtest.php:100
+#: ../../addon/ljpost/Mod_Ljpost.php:80 ../../addon/hzfiles/hzfiles.php:86
+#: ../../addon/pageheader/Mod_Pageheader.php:52 ../../addon/irc/irc.php:45
+#: ../../addon/xmpp/Mod_Xmpp.php:70 ../../include/js_strings.php:23
+#: ../../Zotlabs/Module/Tokens.php:294
+#: ../../Zotlabs/Module/Import_items.php:125
+#: ../../Zotlabs/Module/Import.php:611 ../../Zotlabs/Module/Setup.php:316
+#: ../../Zotlabs/Module/Setup.php:356 ../../Zotlabs/Module/Group.php:150
+#: ../../Zotlabs/Module/Group.php:159 ../../Zotlabs/Module/Oauth.php:109
+#: ../../Zotlabs/Module/Chat.php:208 ../../Zotlabs/Module/Chat.php:247
+#: ../../Zotlabs/Module/Poke.php:199 ../../Zotlabs/Module/Mitem.php:259
+#: ../../Zotlabs/Module/Filestorage.php:208
+#: ../../Zotlabs/Module/Connect.php:107 ../../Zotlabs/Module/Editpost.php:88
+#: ../../Zotlabs/Module/Admin/Themes.php:158
#: ../../Zotlabs/Module/Admin/Features.php:66
-#: ../../Zotlabs/Module/Admin/Account_edit.php:73
+#: ../../Zotlabs/Module/Admin/Security.php:120
#: ../../Zotlabs/Module/Admin/Accounts.php:309
-#: ../../Zotlabs/Module/Admin/Themes.php:158
#: ../../Zotlabs/Module/Admin/Site.php:415
-#: ../../Zotlabs/Module/Admin/Profs.php:178
#: ../../Zotlabs/Module/Admin/Logs.php:84
+#: ../../Zotlabs/Module/Admin/Channels.php:147
+#: ../../Zotlabs/Module/Admin/Account_edit.php:73
+#: ../../Zotlabs/Module/Admin/Profs.php:178
#: ../../Zotlabs/Module/Admin/Addons.php:445
-#: ../../Zotlabs/Module/Admin/Security.php:120
+#: ../../Zotlabs/Module/Regate.php:407 ../../Zotlabs/Module/Permcats.php:257
+#: ../../Zotlabs/Module/Mood.php:156 ../../Zotlabs/Module/Appman.php:220
#: ../../Zotlabs/Module/Contactedit.php:429
#: ../../Zotlabs/Module/Contactedit.php:462
-#: ../../Zotlabs/Module/Settings/Directory.php:42
+#: ../../Zotlabs/Module/Email_validation.php:40
+#: ../../Zotlabs/Module/Photos.php:1053 ../../Zotlabs/Module/Photos.php:1093
+#: ../../Zotlabs/Module/Photos.php:1206 ../../Zotlabs/Module/Profiles.php:740
+#: ../../Zotlabs/Module/Invite.php:563 ../../Zotlabs/Module/Xchan.php:15
+#: ../../Zotlabs/Module/Affinity.php:84
+#: ../../Zotlabs/Module/Settings/Network.php:62
#: ../../Zotlabs/Module/Settings/Features.php:48
-#: ../../Zotlabs/Module/Settings/Display.php:186
-#: ../../Zotlabs/Module/Settings/Conversation.php:49
-#: ../../Zotlabs/Module/Settings/Channel_home.php:91
-#: ../../Zotlabs/Module/Settings/Connections.php:42
-#: ../../Zotlabs/Module/Settings/Account.php:107
#: ../../Zotlabs/Module/Settings/Channel.php:229
-#: ../../Zotlabs/Module/Settings/Editor.php:42
-#: ../../Zotlabs/Module/Settings/Network.php:62
+#: ../../Zotlabs/Module/Settings/Account.php:107
#: ../../Zotlabs/Module/Settings/Events.php:42
+#: ../../Zotlabs/Module/Settings/Manage.php:43
+#: ../../Zotlabs/Module/Settings/Channel_home.php:91
#: ../../Zotlabs/Module/Settings/Calendar.php:42
-#: ../../Zotlabs/Module/Settings/Profiles.php:52
+#: ../../Zotlabs/Module/Settings/Multifactor.php:85
+#: ../../Zotlabs/Module/Settings/Display.php:186
+#: ../../Zotlabs/Module/Settings/Directory.php:42
+#: ../../Zotlabs/Module/Settings/Editor.php:42
+#: ../../Zotlabs/Module/Settings/Connections.php:42
#: ../../Zotlabs/Module/Settings/Photos.php:42
+#: ../../Zotlabs/Module/Settings/Profiles.php:52
#: ../../Zotlabs/Module/Settings/Privacy.php:110
-#: ../../Zotlabs/Module/Settings/Manage.php:43
-#: ../../Zotlabs/Module/Profiles.php:740
-#: ../../Zotlabs/Module/Filestorage.php:208
-#: ../../Zotlabs/Module/Pdledit.php:137 ../../Zotlabs/Module/Defperms.php:262
-#: ../../Zotlabs/Module/Thing.php:328 ../../Zotlabs/Module/Thing.php:381
-#: ../../Zotlabs/Module/Setup.php:316 ../../Zotlabs/Module/Setup.php:356
-#: ../../Zotlabs/Module/Group.php:150 ../../Zotlabs/Module/Group.php:159
-#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Photos.php:1053
-#: ../../Zotlabs/Module/Photos.php:1093 ../../Zotlabs/Module/Photos.php:1206
-#: ../../Zotlabs/Storage/Browser.php:385
+#: ../../Zotlabs/Module/Settings/Conversation.php:49
+#: ../../Zotlabs/Module/Defperms.php:262 ../../Zotlabs/Module/Pconfig.php:117
+#: ../../Zotlabs/Module/Oauth2.php:114 ../../Zotlabs/Module/Thing.php:328
+#: ../../Zotlabs/Module/Thing.php:381 ../../Zotlabs/Module/Pdledit.php:137
+#: ../../Zotlabs/Module/Connedit.php:714 ../../Zotlabs/Module/Locs.php:125
+#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:160
+#: ../../Zotlabs/Lib/ThreadItem.php:828 ../../Zotlabs/Storage/Browser.php:385
msgid "Submit"
msgstr ""
@@ -134,8233 +136,8115 @@ msgid "Theme settings"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:103
-msgid "Narrow navbar"
+msgid "Dark style"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:103
-#: ../../view/theme/redbasic/php/config.php:121 ../../boot.php:1753
-#: ../../include/conversation.php:1477 ../../addon/twitter/Mod_Twitter.php:160
-#: ../../addon/twitter/Mod_Twitter.php:169
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
-#: ../../addon/libertree/Mod_Libertree.php:57
-#: ../../addon/nofed/Mod_Nofed.php:40
+#: ../../view/theme/redbasic/php/config.php:104
+msgid "Light style"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:105
+msgid "Common settings"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:106
+msgid "Default to dark mode"
+msgstr ""
+
+#: ../../view/theme/redbasic/php/config.php:106
+#: ../../view/theme/redbasic/php/config.php:107
+#: ../../view/theme/redbasic/php/config.php:108
+#: ../../view/theme/redbasic/php/config.php:124
#: ../../addon/channelreputation/channelreputation.php:111
-#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
+#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231
#: ../../addon/redred/Mod_Redred.php:61
-#: ../../addon/socialauth/Mod_SocialAuth.php:218
-#: ../../addon/wppost/Mod_Wppost.php:84 ../../addon/wppost/Mod_Wppost.php:88
-#: ../../addon/wppost/Mod_Wppost.php:92 ../../addon/pumpio/Mod_Pumpio.php:92
-#: ../../addon/pumpio/Mod_Pumpio.php:96 ../../addon/pumpio/Mod_Pumpio.php:100
-#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/wiki/Mod_Wiki.php:230
-#: ../../addon/wiki/Mod_Wiki.php:231 ../../addon/diaspora/Mod_Diaspora.php:70
-#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
-#: ../../addon/ljpost/Mod_Ljpost.php:69
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
#: ../../addon/statusnet/Mod_Statusnet.php:258
#: ../../addon/statusnet/Mod_Statusnet.php:280
-#: ../../addon/statusnet/Mod_Statusnet.php:289
-#: ../../addon/cart/submodules/paypalbutton.php:87
-#: ../../addon/cart/submodules/paypalbutton.php:95
-#: ../../addon/cart/submodules/paypalbuttonV2.php:88
-#: ../../addon/cart/submodules/paypalbuttonV2.php:96
+#: ../../addon/statusnet/Mod_Statusnet.php:289 ../../addon/rtof/Mod_Rtof.php:47
+#: ../../addon/wppost/Mod_Wppost.php:84 ../../addon/wppost/Mod_Wppost.php:88
+#: ../../addon/wppost/Mod_Wppost.php:92
+#: ../../addon/content_import/Mod_content_import.php:136
+#: ../../addon/content_import/Mod_content_import.php:137
+#: ../../addon/ijpost/Mod_Ijpost.php:61
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
+#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
+#: ../../addon/twitter/Mod_Twitter.php:160
+#: ../../addon/twitter/Mod_Twitter.php:169 ../../addon/pumpio/Mod_Pumpio.php:92
+#: ../../addon/pumpio/Mod_Pumpio.php:96 ../../addon/pumpio/Mod_Pumpio.php:100
+#: ../../addon/cart/submodules/subscriptions.php:153
+#: ../../addon/cart/submodules/subscriptions.php:425
#: ../../addon/cart/submodules/hzservices.php:67
#: ../../addon/cart/submodules/hzservices.php:651
#: ../../addon/cart/submodules/hzservices.php:655
-#: ../../addon/cart/submodules/manualcat.php:63
-#: ../../addon/cart/submodules/manualcat.php:254
-#: ../../addon/cart/submodules/manualcat.php:258
-#: ../../addon/cart/submodules/subscriptions.php:153
-#: ../../addon/cart/submodules/subscriptions.php:425
#: ../../addon/cart/submodules/orderoptions.php:72
#: ../../addon/cart/submodules/orderoptions.php:338
#: ../../addon/cart/submodules/orderoptions.php:362
#: ../../addon/cart/submodules/orderoptions.php:438
#: ../../addon/cart/submodules/orderoptions.php:462
-#: ../../addon/cart/cart.php:1370 ../../addon/cart/Settings/Cart.php:61
-#: ../../addon/cart/Settings/Cart.php:73 ../../addon/rtof/Mod_Rtof.php:47
-#: ../../addon/content_import/Mod_content_import.php:136
-#: ../../addon/content_import/Mod_content_import.php:137
-#: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166
-#: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Module/Register.php:512
-#: ../../Zotlabs/Module/Api.php:99 ../../Zotlabs/Module/Mitem.php:176
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
-#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
+#: ../../addon/cart/submodules/paypalbutton.php:87
+#: ../../addon/cart/submodules/paypalbutton.php:95
+#: ../../addon/cart/submodules/paypalbuttonV2.php:88
+#: ../../addon/cart/submodules/paypalbuttonV2.php:98
+#: ../../addon/cart/submodules/manualcat.php:63
+#: ../../addon/cart/submodules/manualcat.php:254
+#: ../../addon/cart/submodules/manualcat.php:258
+#: ../../addon/cart/Settings/Cart.php:61 ../../addon/cart/Settings/Cart.php:73
+#: ../../addon/cart/cart.php:1419 ../../addon/nofed/Mod_Nofed.php:40
+#: ../../addon/smileybutton/Mod_Smileybutton.php:42
+#: ../../addon/diaspora/Mod_Diaspora.php:70
+#: ../../addon/libertree/Mod_Libertree.php:57
+#: ../../addon/socialauth/Mod_SocialAuth.php:218
+#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
+#: ../../addon/ljpost/Mod_Ljpost.php:69 ../../include/conversation.php:1478
#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Sources.php:122
-#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Register.php:512
+#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
+#: ../../Zotlabs/Module/Group.php:301 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177
+#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257
+#: ../../Zotlabs/Module/Filestorage.php:203
+#: ../../Zotlabs/Module/Filestorage.php:211
#: ../../Zotlabs/Module/Admin/Site.php:319
+#: ../../Zotlabs/Module/Permcats.php:247
#: ../../Zotlabs/Module/Contactedit.php:284
-#: ../../Zotlabs/Module/Contactedit.php:329
-#: ../../Zotlabs/Module/Settings/Display.php:86
+#: ../../Zotlabs/Module/Contactedit.php:329 ../../Zotlabs/Module/Api.php:99
+#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:676
+#: ../../Zotlabs/Module/Profiles.php:686 ../../Zotlabs/Module/Profiles.php:694
+#: ../../Zotlabs/Module/Profiles.php:698
#: ../../Zotlabs/Module/Settings/Channel.php:224
+#: ../../Zotlabs/Module/Settings/Multifactor.php:82
+#: ../../Zotlabs/Module/Settings/Display.php:86
#: ../../Zotlabs/Module/Settings/Privacy.php:120
#: ../../Zotlabs/Module/Settings/Privacy.php:121
#: ../../Zotlabs/Module/Settings/Privacy.php:122
-#: ../../Zotlabs/Module/Profiles.php:676 ../../Zotlabs/Module/Profiles.php:686
-#: ../../Zotlabs/Module/Profiles.php:694 ../../Zotlabs/Module/Profiles.php:698
-#: ../../Zotlabs/Module/Filestorage.php:203
-#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Group.php:137
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
-#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
-#: ../../Zotlabs/Module/Group.php:302 ../../Zotlabs/Module/Photos.php:666
-#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
-#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:392
-#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
+#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
+#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+#: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Storage/Browser.php:310
+#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312
+#: ../../Zotlabs/Storage/Browser.php:392 ../../Zotlabs/Storage/Browser.php:394
+#: ../../Zotlabs/Storage/Browser.php:558 ../../boot.php:1753
msgid "No"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:103
-#: ../../view/theme/redbasic/php/config.php:121 ../../boot.php:1753
-#: ../../include/conversation.php:1477 ../../addon/twitter/Mod_Twitter.php:160
-#: ../../addon/twitter/Mod_Twitter.php:169
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
-#: ../../addon/libertree/Mod_Libertree.php:57
-#: ../../addon/nofed/Mod_Nofed.php:40
+#: ../../view/theme/redbasic/php/config.php:106
+#: ../../view/theme/redbasic/php/config.php:107
+#: ../../view/theme/redbasic/php/config.php:108
+#: ../../view/theme/redbasic/php/config.php:124
#: ../../addon/channelreputation/channelreputation.php:111
-#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
+#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231
#: ../../addon/redred/Mod_Redred.php:61
-#: ../../addon/socialauth/Mod_SocialAuth.php:218
-#: ../../addon/wppost/Mod_Wppost.php:84 ../../addon/wppost/Mod_Wppost.php:88
-#: ../../addon/wppost/Mod_Wppost.php:92 ../../addon/pumpio/Mod_Pumpio.php:92
-#: ../../addon/pumpio/Mod_Pumpio.php:96 ../../addon/pumpio/Mod_Pumpio.php:100
-#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/wiki/Mod_Wiki.php:230
-#: ../../addon/wiki/Mod_Wiki.php:231 ../../addon/diaspora/Mod_Diaspora.php:70
-#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
-#: ../../addon/ljpost/Mod_Ljpost.php:69
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
#: ../../addon/statusnet/Mod_Statusnet.php:258
#: ../../addon/statusnet/Mod_Statusnet.php:280
-#: ../../addon/statusnet/Mod_Statusnet.php:289
-#: ../../addon/cart/submodules/paypalbutton.php:87
-#: ../../addon/cart/submodules/paypalbutton.php:95
-#: ../../addon/cart/submodules/paypalbuttonV2.php:88
-#: ../../addon/cart/submodules/paypalbuttonV2.php:96
+#: ../../addon/statusnet/Mod_Statusnet.php:289 ../../addon/rtof/Mod_Rtof.php:47
+#: ../../addon/wppost/Mod_Wppost.php:84 ../../addon/wppost/Mod_Wppost.php:88
+#: ../../addon/wppost/Mod_Wppost.php:92
+#: ../../addon/content_import/Mod_content_import.php:136
+#: ../../addon/content_import/Mod_content_import.php:137
+#: ../../addon/ijpost/Mod_Ijpost.php:61
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
+#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
+#: ../../addon/twitter/Mod_Twitter.php:160
+#: ../../addon/twitter/Mod_Twitter.php:169 ../../addon/pumpio/Mod_Pumpio.php:92
+#: ../../addon/pumpio/Mod_Pumpio.php:96 ../../addon/pumpio/Mod_Pumpio.php:100
+#: ../../addon/cart/submodules/subscriptions.php:153
+#: ../../addon/cart/submodules/subscriptions.php:425
#: ../../addon/cart/submodules/hzservices.php:67
#: ../../addon/cart/submodules/hzservices.php:651
#: ../../addon/cart/submodules/hzservices.php:655
-#: ../../addon/cart/submodules/manualcat.php:63
-#: ../../addon/cart/submodules/manualcat.php:254
-#: ../../addon/cart/submodules/manualcat.php:258
-#: ../../addon/cart/submodules/subscriptions.php:153
-#: ../../addon/cart/submodules/subscriptions.php:425
#: ../../addon/cart/submodules/orderoptions.php:72
#: ../../addon/cart/submodules/orderoptions.php:337
#: ../../addon/cart/submodules/orderoptions.php:361
#: ../../addon/cart/submodules/orderoptions.php:437
#: ../../addon/cart/submodules/orderoptions.php:461
-#: ../../addon/cart/cart.php:1370 ../../addon/cart/Settings/Cart.php:61
-#: ../../addon/cart/Settings/Cart.php:73 ../../addon/rtof/Mod_Rtof.php:47
-#: ../../addon/content_import/Mod_content_import.php:136
-#: ../../addon/content_import/Mod_content_import.php:137
-#: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166
-#: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Module/Register.php:512
-#: ../../Zotlabs/Module/Api.php:98 ../../Zotlabs/Module/Mitem.php:176
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
-#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
+#: ../../addon/cart/submodules/paypalbutton.php:87
+#: ../../addon/cart/submodules/paypalbutton.php:95
+#: ../../addon/cart/submodules/paypalbuttonV2.php:88
+#: ../../addon/cart/submodules/paypalbuttonV2.php:98
+#: ../../addon/cart/submodules/manualcat.php:63
+#: ../../addon/cart/submodules/manualcat.php:254
+#: ../../addon/cart/submodules/manualcat.php:258
+#: ../../addon/cart/Settings/Cart.php:61 ../../addon/cart/Settings/Cart.php:73
+#: ../../addon/cart/cart.php:1419 ../../addon/nofed/Mod_Nofed.php:40
+#: ../../addon/smileybutton/Mod_Smileybutton.php:42
+#: ../../addon/diaspora/Mod_Diaspora.php:70
+#: ../../addon/libertree/Mod_Libertree.php:57
+#: ../../addon/socialauth/Mod_SocialAuth.php:218
+#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
+#: ../../addon/ljpost/Mod_Ljpost.php:69 ../../include/conversation.php:1478
#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Sources.php:122
-#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Module/Admin/Site.php:321
-#: ../../Zotlabs/Module/Contactedit.php:284
-#: ../../Zotlabs/Module/Settings/Display.php:86
+#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Register.php:512
+#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:138
+#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
+#: ../../Zotlabs/Module/Group.php:301 ../../Zotlabs/Module/Group.php:302
+#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177
+#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257
+#: ../../Zotlabs/Module/Filestorage.php:203
+#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Module/Admin/Site.php:321
+#: ../../Zotlabs/Module/Permcats.php:247
+#: ../../Zotlabs/Module/Contactedit.php:284 ../../Zotlabs/Module/Api.php:98
+#: ../../Zotlabs/Module/Photos.php:666 ../../Zotlabs/Module/Profiles.php:676
+#: ../../Zotlabs/Module/Profiles.php:686 ../../Zotlabs/Module/Profiles.php:694
+#: ../../Zotlabs/Module/Profiles.php:698
#: ../../Zotlabs/Module/Settings/Channel.php:224
+#: ../../Zotlabs/Module/Settings/Multifactor.php:82
+#: ../../Zotlabs/Module/Settings/Display.php:86
#: ../../Zotlabs/Module/Settings/Privacy.php:120
#: ../../Zotlabs/Module/Settings/Privacy.php:121
#: ../../Zotlabs/Module/Settings/Privacy.php:122
-#: ../../Zotlabs/Module/Profiles.php:676 ../../Zotlabs/Module/Profiles.php:686
-#: ../../Zotlabs/Module/Profiles.php:694 ../../Zotlabs/Module/Profiles.php:698
-#: ../../Zotlabs/Module/Filestorage.php:203
-#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Group.php:137
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
-#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
-#: ../../Zotlabs/Module/Group.php:302 ../../Zotlabs/Module/Photos.php:666
+#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
+#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Sources.php:122
+#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Lib/Libzotdir.php:165
+#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168
#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:392
#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
+#: ../../boot.php:1753
msgid "Yes"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:104
-msgid "Navigation bar background color"
-msgstr ""
-
-#: ../../view/theme/redbasic/php/config.php:105
-msgid "Navigation bar icon color "
-msgstr ""
-
-#: ../../view/theme/redbasic/php/config.php:106
-msgid "Navigation bar active icon color "
+#: ../../view/theme/redbasic/php/config.php:107
+msgid "Always use light icons for navbar"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:107
-msgid "Link color"
+msgid "Enable this option if you use a dark navbar color in light mode"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:108
-msgid "Link hover color"
+msgid "Narrow navbar"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:109
-msgid "Set font-color for banner"
+msgid "Navigation bar background color"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:110
-msgid "Set the background color"
+msgid "Dark navigation bar background color"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:111
-msgid "Set the background image"
+msgid "Link color"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:112
-msgid "Set the background color of items"
+msgid "Dark link color"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:113
-msgid "Set the background color of comments"
-msgstr ""
-
-#: ../../view/theme/redbasic/php/config.php:114
-msgid "Set font-size for the entire application"
+msgid "Link hover color"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:114
-msgid "Examples: 1rem, 100%, 16px"
+msgid "Dark link hover color"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:115
-msgid "Set font-color for posts and comments"
-msgstr ""
-
-#: ../../view/theme/redbasic/php/config.php:116
-msgid "Set radius of corners"
+msgid "Set the background color"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:116
-msgid "Example: 4px"
+msgid "Set the dark background color"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:117
-msgid "Set shadow depth of photos"
+msgid "Set the background image"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:118
-msgid "Set maximum width of content region in rem"
+msgid "Set the dark background image"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:118
-msgid "Leave empty for default width"
+#: ../../view/theme/redbasic/php/config.php:119
+msgid "Set font-size for the entire application"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:119
-msgid "Set size of conversation author photo"
+msgid "Examples: 1rem, 100%, 16px"
msgstr ""
#: ../../view/theme/redbasic/php/config.php:120
-msgid "Set size of followup author photos"
+msgid "Set radius of corners"
msgstr ""
-#: ../../view/theme/redbasic/php/config.php:121
-msgid "Show advanced settings"
+#: ../../view/theme/redbasic/php/config.php:120
+msgid "Example: 4px"
msgstr ""
-#: ../../boot.php:1724
-msgid "Create an account to access services and applications"
+#: ../../view/theme/redbasic/php/config.php:121
+msgid "Set maximum width of content region in rem"
msgstr ""
-#: ../../boot.php:1725 ../../include/nav.php:167
-#: ../../Zotlabs/Module/Register.php:542
-msgid "Register"
+#: ../../view/theme/redbasic/php/config.php:121
+msgid "Leave empty for default width"
msgstr ""
-#: ../../boot.php:1742
-msgid "Email or nickname"
+#: ../../view/theme/redbasic/php/config.php:122
+msgid "Set size of conversation author photo"
msgstr ""
-#: ../../boot.php:1742 ../../addon/redred/Mod_Redred.php:73
-#: ../../addon/openid/MysqlProvider.php:54
-msgid "Nickname"
+#: ../../view/theme/redbasic/php/config.php:123
+msgid "Set size of followup author photos"
msgstr ""
-#: ../../boot.php:1747 ../../include/nav.php:111 ../../include/nav.php:141
-#: ../../include/nav.php:162
-msgid "Logout"
+#: ../../view/theme/redbasic/php/config.php:124
+msgid "Show advanced settings"
msgstr ""
-#: ../../boot.php:1748 ../../include/nav.php:126 ../../include/nav.php:130
-#: ../../Zotlabs/Lib/Apps.php:341
-msgid "Login"
+#: ../../util/nconfig.php:34
+msgid "Source channel not found."
msgstr ""
-#: ../../boot.php:1749 ../../include/channel.php:2609
-#: ../../Zotlabs/Module/Rmagic.php:96
-msgid "Remote Authentication"
+#: ../../addon/channelreputation/channelreputation.php:101
+#: ../../addon/channelreputation/channelreputation.php:102
+#: ../../addon/cart/myshop.php:145 ../../addon/cart/myshop.php:181
+#: ../../addon/cart/myshop.php:215 ../../addon/cart/myshop.php:265
+#: ../../addon/cart/myshop.php:300 ../../addon/cart/myshop.php:323
+msgid "Access Denied"
msgstr ""
-#: ../../boot.php:1752
-msgid "Password"
+#: ../../addon/channelreputation/channelreputation.php:109
+msgid "Enable Community Moderation"
msgstr ""
-#: ../../boot.php:1753
-msgid "Remember me"
+#: ../../addon/channelreputation/channelreputation.php:117
+msgid "Reputation automatically given to new members"
msgstr ""
-#: ../../boot.php:1756
-msgid "Forgot your password?"
+#: ../../addon/channelreputation/channelreputation.php:118
+msgid "Reputation will never fall below this value"
msgstr ""
-#: ../../boot.php:1757 ../../Zotlabs/Module/Lostpass.php:91
-msgid "Password Reset"
+#: ../../addon/channelreputation/channelreputation.php:119
+msgid "Minimum reputation before posting is allowed"
msgstr ""
-#: ../../boot.php:2628
-#, php-format
-msgid "[$Projectname] Website SSL error for %s"
+#: ../../addon/channelreputation/channelreputation.php:120
+msgid "Minimum reputation before commenting is allowed"
msgstr ""
-#: ../../boot.php:2633
-msgid "Website SSL certificate is not valid. Please correct."
+#: ../../addon/channelreputation/channelreputation.php:121
+msgid "Minimum reputation before a member is able to moderate other posts"
msgstr ""
-#: ../../boot.php:2749
-#, php-format
-msgid "[$Projectname] Cron tasks not running on %s"
+#: ../../addon/channelreputation/channelreputation.php:122
+msgid ""
+"Max ratio of moderator's reputation that can be added to/deducted from "
+"reputation of person being moderated"
msgstr ""
-#: ../../boot.php:2754
-msgid "Cron/Scheduled tasks not running."
+#: ../../addon/channelreputation/channelreputation.php:123
+msgid "Reputation \"cost\" to post"
msgstr ""
-#: ../../boot.php:2755 ../../include/datetime.php:238
-msgid "never"
+#: ../../addon/channelreputation/channelreputation.php:124
+msgid "Reputation \"cost\" to comment"
msgstr ""
-#: ../../include/contact_widgets.php:11
-#, php-format
-msgid "%d invitation available"
-msgid_plural "%d invitations available"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145
-#: ../../Zotlabs/Module/Admin/Site.php:419
-msgid "Advanced"
+#: ../../addon/channelreputation/channelreputation.php:125
+msgid ""
+"Reputation automatically recovers at this rate per hour until it reaches "
+"minimum_to_post"
msgstr ""
-#: ../../include/contact_widgets.php:19
-msgid "Find Channels"
+#: ../../addon/channelreputation/channelreputation.php:126
+msgid ""
+"When minimum_to_moderate > reputation > minimum_to_post reputation recovers "
+"at this rate per hour"
msgstr ""
-#: ../../include/contact_widgets.php:20
-msgid "Enter name or interest"
+#: ../../addon/channelreputation/channelreputation.php:140
+msgid "Community Moderation Settings"
msgstr ""
-#: ../../include/contact_widgets.php:21
-msgid "Connect/Follow"
+#: ../../addon/channelreputation/channelreputation.php:232
+msgid "Channel Reputation"
msgstr ""
-#: ../../include/contact_widgets.php:22
-msgid "Examples: Robert Morgenstein, Fishing"
+#: ../../addon/channelreputation/channelreputation.php:233
+#: ../../include/acl_selectors.php:156 ../../Zotlabs/Widget/Pinned.php:163
+#: ../../Zotlabs/Module/Photos.php:1265 ../../Zotlabs/Lib/ThreadItem.php:496
+#: ../../Zotlabs/Storage/Browser.php:414
+msgid "Close"
msgstr ""
-#: ../../include/contact_widgets.php:23 ../../Zotlabs/Module/Directory.php:427
-#: ../../Zotlabs/Module/Directory.php:432
-#: ../../Zotlabs/Module/Connections.php:401
-msgid "Find"
+#: ../../addon/channelreputation/channelreputation.php:236
+msgid "An Error has occurred."
msgstr ""
-#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Directory.php:431
-#: ../../Zotlabs/Module/Suggest.php:77
-msgid "Channel Suggestions"
+#: ../../addon/channelreputation/channelreputation.php:254
+msgid "Upvote"
msgstr ""
-#: ../../include/contact_widgets.php:26
-msgid "Random Profile"
+#: ../../addon/channelreputation/channelreputation.php:255
+msgid "Downvote"
msgstr ""
-#: ../../include/contact_widgets.php:27
-msgid "Invite Friends"
+#: ../../addon/channelreputation/channelreputation.php:414
+msgid "Can moderate reputation on my channel."
msgstr ""
-#: ../../include/contact_widgets.php:29
-msgid "Advanced example: name=fred and country=iceland"
+#: ../../addon/superblock/superblock.php:355
+msgid "Block Completely"
msgstr ""
-#: ../../include/contact_widgets.php:53 ../../include/features.php:318
-#: ../../Zotlabs/Widget/Activity_filter.php:196
-#: ../../Zotlabs/Widget/Filer.php:33
-msgid "Saved Folders"
+#: ../../addon/superblock/Mod_Superblock.php:62
+msgid "superblock settings updated"
msgstr ""
-#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:118
-#: ../../include/contact_widgets.php:152
-#: ../../addon/articles/Widget/Articles_categories.php:83
-#: ../../addon/cards/Widget/Cards_categories.php:83
-#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36
-msgid "Everything"
+#: ../../addon/superblock/Mod_Superblock.php:86
+msgid "Currently blocked"
msgstr ""
-#: ../../include/contact_widgets.php:115 ../../include/contact_widgets.php:149
-#: ../../include/taxonomy.php:422 ../../include/taxonomy.php:504
-#: ../../include/taxonomy.php:524 ../../include/taxonomy.php:545
-#: ../../addon/articles/Widget/Articles_categories.php:80
-#: ../../addon/cards/Widget/Cards_categories.php:80
-#: ../../Zotlabs/Module/Cdav.php:1072 ../../Zotlabs/Storage/Browser.php:293
-#: ../../Zotlabs/Storage/Browser.php:391 ../../Zotlabs/Storage/Browser.php:406
-msgid "Categories"
+#: ../../addon/superblock/Mod_Superblock.php:88
+msgid "No channels currently blocked"
msgstr ""
-#: ../../include/contact_widgets.php:182
-msgid "Common Connections"
+#: ../../addon/superblock/Mod_Superblock.php:90
+#: ../../Zotlabs/Module/Tagrm.php:137 ../../Zotlabs/Module/Admin/Addons.php:462
+#: ../../Zotlabs/Module/Cover_photo.php:424 ../../Zotlabs/Module/Photos.php:991
+msgid "Remove"
msgstr ""
-#: ../../include/contact_widgets.php:186
-#, php-format
-msgid "View all %d common connections"
+#: ../../addon/nsabait/Mod_Nsabait.php:23
+msgid "NSA Bait App"
msgstr ""
-#: ../../include/event.php:33 ../../include/event.php:128
-msgid "l F d, Y \\@ g:i A"
+#: ../../addon/nsabait/Mod_Nsabait.php:25
+msgid "Make yourself a political target."
msgstr ""
-#: ../../include/event.php:41
-msgid "Starts:"
+#: ../../addon/visage/Mod_Visage.php:23
+msgid "Recent Channel/Profile Viewers"
msgstr ""
-#: ../../include/event.php:51
-msgid "Finishes:"
+#: ../../addon/visage/Mod_Visage.php:34
+msgid "No entries."
msgstr ""
-#: ../../include/event.php:63 ../../include/event.php:153
-#: ../../include/channel.php:1627 ../../Zotlabs/Module/Directory.php:350
-msgid "Location:"
+#: ../../addon/wiki/Widget/Wiki_pages.php:55
+msgid "Wiki Pages"
msgstr ""
-#: ../../include/event.php:128
-msgid "l F d, Y"
+#: ../../addon/wiki/Widget/Wiki_pages.php:61 ../../addon/wiki/Mod_Wiki.php:899
+msgid "Add new page"
msgstr ""
-#: ../../include/event.php:132
-msgid "Start:"
+#: ../../addon/wiki/Widget/Wiki_pages.php:65 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
+#: ../../addon/mdpost/mdpost.php:41 ../../include/text.php:2203
+msgid "Markdown"
msgstr ""
-#: ../../include/event.php:136
-msgid "End:"
+#: ../../addon/wiki/Widget/Wiki_pages.php:65 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
+#: ../../include/text.php:2201
+msgid "BBcode"
msgstr ""
-#: ../../include/event.php:141 ../../addon/openid/MysqlProvider.php:67
-msgid "Timezone"
+#: ../../addon/wiki/Widget/Wiki_pages.php:65 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../addon/wiki/Mod_Wiki.php:903 ../../include/text.php:2204
+msgid "Text"
msgstr ""
-#: ../../include/event.php:1202
-msgid "This event has been added to your calendar."
+#: ../../addon/wiki/Widget/Wiki_pages.php:66
+msgid "Page name"
msgstr ""
-#: ../../include/event.php:1356 ../../include/conversation.php:142
-#: ../../include/text.php:2345 ../../Zotlabs/Module/Like.php:447
-#: ../../Zotlabs/Module/Tagger.php:75
-#: ../../Zotlabs/Module/Channel_calendar.php:221
-msgid "event"
+#: ../../addon/wiki/Widget/Wiki_pages.php:68 ../../addon/wiki/Mod_Wiki.php:906
+#: ../../Zotlabs/Module/Dreport.php:133
+msgid "Options"
msgstr ""
-#: ../../include/event.php:1435
-msgid "Not specified"
+#: ../../addon/wiki/Widget/Wiki_list.php:20 ../../addon/wiki/Mod_Wiki.php:209
+#: ../../addon/wiki/wiki.php:70 ../../include/nav.php:522
+msgid "Wikis"
msgstr ""
-#: ../../include/event.php:1436
-msgid "Needs Action"
+#: ../../addon/wiki/Widget/Wiki_page_history.php:28
+#: ../../addon/wiki/Lib/NativeWikiPage.php:588
+#: ../../addon/wiki/Mod_Wiki.php:221 ../../addon/rendezvous/rendezvous.php:172
+#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth.php:137
+#: ../../Zotlabs/Module/Chat.php:256 ../../Zotlabs/Module/Cdav.php:1364
+#: ../../Zotlabs/Module/Sharedwithme.php:107
+#: ../../Zotlabs/Module/Admin/Channels.php:159
+#: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Oauth2.php:144
+#: ../../Zotlabs/Module/Connedit.php:732 ../../Zotlabs/Storage/Browser.php:380
+msgid "Name"
msgstr ""
-#: ../../include/event.php:1437
-msgid "Completed"
+#: ../../addon/wiki/Widget/Wiki_page_history.php:29
+#: ../../addon/wiki/Lib/NativeWikiPage.php:589
+msgctxt "wiki_history"
+msgid "Message"
msgstr ""
-#: ../../include/event.php:1438
-msgid "In Process"
+#: ../../addon/wiki/Widget/Wiki_page_history.php:30
+#: ../../addon/wiki/Lib/NativeWikiPage.php:590
+msgid "Date"
msgstr ""
-#: ../../include/event.php:1439
-msgid "Cancelled"
+#: ../../addon/wiki/Widget/Wiki_page_history.php:31
+#: ../../addon/wiki/Lib/NativeWikiPage.php:591
+#: ../../addon/wiki/Mod_Wiki.php:364
+msgid "Revert"
msgstr ""
-#: ../../include/event.php:1520 ../../include/connections.php:752
-#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1383
-msgid "Mobile"
+#: ../../addon/wiki/Widget/Wiki_page_history.php:32
+#: ../../addon/wiki/Lib/NativeWikiPage.php:592
+msgid "Compare"
msgstr ""
-#: ../../include/event.php:1521 ../../include/connections.php:753
-#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1384
-#: ../../Zotlabs/Widget/Notifications.php:43
-msgid "Home"
+#: ../../addon/wiki/Lib/NativeWiki.php:144
+msgid "Wiki updated successfully"
msgstr ""
-#: ../../include/event.php:1522 ../../include/connections.php:754
-msgid "Home, Voice"
+#: ../../addon/wiki/Lib/NativeWiki.php:204
+msgid "Wiki files deleted successfully"
msgstr ""
-#: ../../include/event.php:1523 ../../include/connections.php:755
-msgid "Home, Fax"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:41
+#: ../../addon/wiki/Lib/NativeWikiPage.php:109
+msgid "(No Title)"
msgstr ""
-#: ../../include/event.php:1524 ../../include/connections.php:756
-#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1385
-msgid "Work"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:123
+msgid "Wiki page create failed."
msgstr ""
-#: ../../include/event.php:1525 ../../include/connections.php:757
-msgid "Work, Voice"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:137
+msgid "Wiki not found."
msgstr ""
-#: ../../include/event.php:1526 ../../include/connections.php:758
-msgid "Work, Fax"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:148
+msgid "Destination name already exists"
msgstr ""
-#: ../../include/event.php:1527 ../../include/event.php:1534
-#: ../../include/connections.php:759 ../../include/connections.php:766
-#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/selectors.php:119 ../../include/selectors.php:155
-#: ../../Zotlabs/Module/Connedit.php:744 ../../Zotlabs/Module/Cdav.php:1386
-#: ../../Zotlabs/Access/PermissionRoles.php:360
-msgid "Other"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:181
+#: ../../addon/wiki/Lib/NativeWikiPage.php:376
+msgid "Page not found"
msgstr ""
-#: ../../include/js_strings.php:5
-msgid "Delete this item?"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:211
+msgid "Error reading page content"
msgstr ""
-#: ../../include/js_strings.php:6
-msgid "Item deleted"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:367
+#: ../../addon/wiki/Lib/NativeWikiPage.php:425
+#: ../../addon/wiki/Lib/NativeWikiPage.php:493
+#: ../../addon/wiki/Lib/NativeWikiPage.php:534
+msgid "Error reading wiki"
msgstr ""
-#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:827
-#: ../../Zotlabs/Module/Photos.php:1092 ../../Zotlabs/Module/Photos.php:1205
-msgid "Comment"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:411
+msgid "Page update failed."
msgstr ""
-#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:536
-#, php-format
-msgid "%s show all"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:447
+msgid "Nothing deleted"
msgstr ""
-#: ../../include/js_strings.php:9
-#, php-format
-msgid "%s show less"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:514
+msgid "Compare: object not found."
msgstr ""
-#: ../../include/js_strings.php:10
-#, php-format
-msgid "%s expand"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:521
+msgid "Page updated"
msgstr ""
-#: ../../include/js_strings.php:11
-#, php-format
-msgid "%s collapse"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:529
+msgid "Wiki resource_id required for git commit"
msgstr ""
-#: ../../include/js_strings.php:12
-msgid "Password too short"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:545 ../../addon/cards/cards.php:104
+#: ../../addon/articles/articles.php:105 ../../include/help.php:133
+#: ../../Zotlabs/Module/Display.php:149 ../../Zotlabs/Module/Page.php:136
+#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Web/Router.php:186
+msgid "Page not found."
msgstr ""
-#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:161
-msgid "Passwords do not match"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:630 ../../include/bbcode.php:1059
+#: ../../include/bbcode.php:1244
+msgid "Different viewers will see this text differently"
msgstr ""
-#: ../../include/js_strings.php:14
-msgid "everybody"
+#: ../../addon/wiki/Mod_Wiki.php:36 ../../addon/cart/cart.php:1459
+#: ../../addon/flashcards/Mod_Flashcards.php:52
+msgid "Profile Unavailable."
msgstr ""
-#: ../../include/js_strings.php:15
-msgid "Secret Passphrase"
+#: ../../addon/wiki/Mod_Wiki.php:63 ../../addon/wiki/Mod_Wiki.php:288
+#: ../../addon/wiki/Mod_Wiki.php:425 ../../addon/openid/Mod_Id.php:53
+#: ../../addon/pumpio/pumpio.php:44 ../../addon/keepout/keepout.php:36
+#: ../../addon/cards/Mod_Card_edit.php:51 ../../addon/cards/Mod_Cards.php:89
+#: ../../addon/articles/Mod_Article_edit.php:51
+#: ../../addon/articles/Mod_Articles.php:94 ../../include/photos.php:30
+#: ../../include/items.php:3893 ../../include/attach.php:156
+#: ../../include/attach.php:205 ../../include/attach.php:278
+#: ../../include/attach.php:329 ../../include/attach.php:424
+#: ../../include/attach.php:438 ../../include/attach.php:445
+#: ../../include/attach.php:527 ../../include/attach.php:1098
+#: ../../include/attach.php:1171 ../../include/attach.php:1336
+#: ../../Zotlabs/Module/Attach_edit.php:90
+#: ../../Zotlabs/Module/Attach_edit.php:99
+#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Network.php:18
+#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Setup.php:218
+#: ../../Zotlabs/Module/Viewconnections.php:28
+#: ../../Zotlabs/Module/Viewconnections.php:33
+#: ../../Zotlabs/Module/Channel.php:222 ../../Zotlabs/Module/Channel.php:383
+#: ../../Zotlabs/Module/Channel.php:422 ../../Zotlabs/Module/Group.php:14
+#: ../../Zotlabs/Module/Group.php:30 ../../Zotlabs/Module/Editwebpage.php:68
+#: ../../Zotlabs/Module/Editwebpage.php:89
+#: ../../Zotlabs/Module/Editwebpage.php:107
+#: ../../Zotlabs/Module/Editwebpage.php:121 ../../Zotlabs/Module/Chat.php:111
+#: ../../Zotlabs/Module/Chat.php:116
+#: ../../Zotlabs/Module/Channel_calendar.php:232
+#: ../../Zotlabs/Module/Like.php:248 ../../Zotlabs/Module/Poke.php:141
+#: ../../Zotlabs/Module/Item.php:516 ../../Zotlabs/Module/Item.php:535
+#: ../../Zotlabs/Module/Item.php:545 ../../Zotlabs/Module/Item.php:1422
+#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Profile.php:99
+#: ../../Zotlabs/Module/Profile.php:114
+#: ../../Zotlabs/Module/Sharedwithme.php:19
+#: ../../Zotlabs/Module/Webpages.php:131
+#: ../../Zotlabs/Module/Filestorage.php:20
+#: ../../Zotlabs/Module/Filestorage.php:78
+#: ../../Zotlabs/Module/Filestorage.php:96
+#: ../../Zotlabs/Module/Filestorage.php:119
+#: ../../Zotlabs/Module/Filestorage.php:165
+#: ../../Zotlabs/Module/Editpost.php:17
+#: ../../Zotlabs/Module/Achievements.php:34 ../../Zotlabs/Module/Manage.php:10
+#: ../../Zotlabs/Module/Authtest.php:13 ../../Zotlabs/Module/Viewsrc.php:19
+#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Display.php:388
+#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/New_channel.php:105
+#: ../../Zotlabs/Module/New_channel.php:130
+#: ../../Zotlabs/Module/Service_limits.php:11 ../../Zotlabs/Module/Mood.php:126
+#: ../../Zotlabs/Module/Appman.php:153 ../../Zotlabs/Module/Api.php:24
+#: ../../Zotlabs/Module/Regmod.php:20 ../../Zotlabs/Module/Blocks.php:73
+#: ../../Zotlabs/Module/Blocks.php:80 ../../Zotlabs/Module/Vote.php:19
+#: ../../Zotlabs/Module/Profile_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:421
+#: ../../Zotlabs/Module/Editblock.php:67 ../../Zotlabs/Module/Settings.php:59
+#: ../../Zotlabs/Module/Editlayout.php:67
+#: ../../Zotlabs/Module/Editlayout.php:90
+#: ../../Zotlabs/Module/Connections.php:32
+#: ../../Zotlabs/Module/Cover_photo.php:341
+#: ../../Zotlabs/Module/Cover_photo.php:354 ../../Zotlabs/Module/Photos.php:71
+#: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133
+#: ../../Zotlabs/Module/Profiles.php:171 ../../Zotlabs/Module/Profiles.php:615
+#: ../../Zotlabs/Module/Bookmarks.php:70 ../../Zotlabs/Module/Invite.php:64
+#: ../../Zotlabs/Module/Invite.php:315 ../../Zotlabs/Module/Block.php:24
+#: ../../Zotlabs/Module/Block.php:74 ../../Zotlabs/Module/Menu.php:130
+#: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Defperms.php:181
+#: ../../Zotlabs/Module/Thing.php:282 ../../Zotlabs/Module/Thing.php:302
+#: ../../Zotlabs/Module/Thing.php:343 ../../Zotlabs/Module/Pdledit.php:35
+#: ../../Zotlabs/Module/Suggest.php:32 ../../Zotlabs/Module/Connedit.php:299
+#: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78
+#: ../../Zotlabs/Module/Layouts.php:89 ../../Zotlabs/Module/Locs.php:98
+#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Lib/Chatroom.php:135
+#: ../../Zotlabs/Web/WebServer.php:119
+msgid "Permission denied."
msgstr ""
-#: ../../include/js_strings.php:16
-msgid "Passphrase hint"
+#: ../../addon/wiki/Mod_Wiki.php:81 ../../addon/cart/manual_payments.php:93
+#: ../../addon/cart/submodules/paypalbutton.php:456
+#: ../../addon/cart/submodules/paypalbuttonV2.php:486
+#: ../../addon/cart/myshop.php:37 ../../addon/cart/cart.php:1610
+msgid "Invalid channel"
msgstr ""
-#: ../../include/js_strings.php:17
-msgid "Notice: Permissions have changed but have not yet been submitted."
+#: ../../addon/wiki/Mod_Wiki.php:136
+msgid "Error retrieving wiki"
msgstr ""
-#: ../../include/js_strings.php:18
-msgid "close all"
+#: ../../addon/wiki/Mod_Wiki.php:143
+msgid "Error creating zip file export folder"
msgstr ""
-#: ../../include/js_strings.php:19
-msgid "Nothing new here"
+#: ../../addon/wiki/Mod_Wiki.php:194
+msgid "Error downloading wiki: "
msgstr ""
-#: ../../include/js_strings.php:20
-msgid "Rate This Channel (this is public)"
+#: ../../addon/wiki/Mod_Wiki.php:214 ../../addon/wiki/Mod_Wiki.php:381
+#: ../../addon/cards/Mod_Card_edit.php:99 ../../addon/cards/cards.php:74
+#: ../../addon/articles/Mod_Article_edit.php:97
+#: ../../addon/articles/articles.php:75 ../../include/menu.php:120
+#: ../../include/channel.php:1530 ../../include/channel.php:1534
+#: ../../Zotlabs/Widget/Cdav.php:144 ../../Zotlabs/Widget/Cdav.php:181
+#: ../../Zotlabs/Module/Group.php:245 ../../Zotlabs/Module/Oauth.php:171
+#: ../../Zotlabs/Module/Editwebpage.php:142
+#: ../../Zotlabs/Module/Webpages.php:250
+#: ../../Zotlabs/Module/Admin/Profs.php:175 ../../Zotlabs/Module/Blocks.php:158
+#: ../../Zotlabs/Module/Editblock.php:114
+#: ../../Zotlabs/Module/Editlayout.php:114
+#: ../../Zotlabs/Module/Connections.php:338
+#: ../../Zotlabs/Module/Connections.php:387
+#: ../../Zotlabs/Module/Connections.php:408 ../../Zotlabs/Module/Menu.php:176
+#: ../../Zotlabs/Module/Oauth2.php:192 ../../Zotlabs/Module/Thing.php:268
+#: ../../Zotlabs/Module/Layouts.php:191 ../../Zotlabs/Lib/Apps.php:601
+#: ../../Zotlabs/Lib/ThreadItem.php:158
+msgid "Edit"
msgstr ""
-#: ../../include/js_strings.php:21
-msgid "Rating"
+#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:407
+msgid "Download"
msgstr ""
-#: ../../include/js_strings.php:22
-msgid "Describe (optional)"
+#: ../../addon/wiki/Mod_Wiki.php:216 ../../addon/wiki/Mod_Wiki.php:406
+#: ../../Zotlabs/Module/Pubsites.php:62 ../../Zotlabs/Module/Webpages.php:256
+#: ../../Zotlabs/Module/Blocks.php:164 ../../Zotlabs/Module/Layouts.php:196
+msgid "View"
msgstr ""
-#: ../../include/js_strings.php:24
-msgid "Please enter a link URL"
+#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Manage.php:137
+#: ../../Zotlabs/Module/Profiles.php:853
+msgid "Create New"
msgstr ""
-#: ../../include/js_strings.php:25
-msgid "Unsaved changes. Are you sure you wish to leave this page?"
+#: ../../addon/wiki/Mod_Wiki.php:219
+msgid "Wiki name"
msgstr ""
-#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Locs.php:121
-#: ../../Zotlabs/Module/Cdav.php:1016 ../../Zotlabs/Module/Profiles.php:480
-#: ../../Zotlabs/Module/Profiles.php:751 ../../Zotlabs/Module/Pubsites.php:54
-msgid "Location"
+#: ../../addon/wiki/Mod_Wiki.php:220
+msgid "Content type"
msgstr ""
-#: ../../include/js_strings.php:27
-msgid "lovely"
+#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:381
+msgid "Type"
msgstr ""
-#: ../../include/js_strings.php:28
-msgid "wonderful"
+#: ../../addon/wiki/Mod_Wiki.php:223
+msgid "Any&nbsp;type"
msgstr ""
-#: ../../include/js_strings.php:29
-msgid "fantastic"
+#: ../../addon/wiki/Mod_Wiki.php:230
+msgid "Lock content type"
msgstr ""
-#: ../../include/js_strings.php:30
-msgid "great"
+#: ../../addon/wiki/Mod_Wiki.php:231
+msgid "Create a status post for this wiki"
msgstr ""
-#: ../../include/js_strings.php:31
-msgid ""
-"Your chosen nickname was either already taken or not valid. Please use our "
-"suggestion ("
+#: ../../addon/wiki/Mod_Wiki.php:232
+msgid "Edit Wiki Name"
msgstr ""
-#: ../../include/js_strings.php:32
-msgid ") or enter a new one."
+#: ../../addon/wiki/Mod_Wiki.php:277
+msgid "Wiki not found"
msgstr ""
-#: ../../include/js_strings.php:33
-msgid "Thank you, this nickname is valid."
+#: ../../addon/wiki/Mod_Wiki.php:303
+msgid "Rename page"
msgstr ""
-#: ../../include/js_strings.php:34
-msgid "A channel name is required."
+#: ../../addon/wiki/Mod_Wiki.php:304 ../../addon/hsse/hsse.php:186
+#: ../../include/conversation.php:1447 ../../Zotlabs/Widget/Cdav.php:142
+#: ../../Zotlabs/Module/Webpages.php:251 ../../Zotlabs/Module/Blocks.php:159
+#: ../../Zotlabs/Module/Photos.php:1073 ../../Zotlabs/Module/Layouts.php:192
+msgid "Share"
msgstr ""
-#: ../../include/js_strings.php:35
-msgid "This is a "
+#: ../../addon/wiki/Mod_Wiki.php:318
+msgid "Error retrieving page content"
msgstr ""
-#: ../../include/js_strings.php:36
-msgid " channel name"
+#: ../../addon/wiki/Mod_Wiki.php:326 ../../addon/wiki/Mod_Wiki.php:328
+msgid "New page"
msgstr ""
-#: ../../include/js_strings.php:37
-msgid "Back to reply"
+#: ../../addon/wiki/Mod_Wiki.php:363
+msgid "Revision Comparison"
msgstr ""
-#: ../../include/js_strings.php:38
-msgid "Pinned"
+#: ../../addon/wiki/Mod_Wiki.php:365 ../../addon/wiki/Mod_Wiki.php:398
+#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258
+#: ../../addon/cards/Mod_Card_edit.php:132
+#: ../../addon/articles/Mod_Article_edit.php:130
+#: ../../include/conversation.php:1470 ../../include/conversation.php:1525
+#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
+#: ../../Zotlabs/Module/Oauth.php:110 ../../Zotlabs/Module/Oauth.php:136
+#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Cdav.php:1049
+#: ../../Zotlabs/Module/Cdav.php:1382 ../../Zotlabs/Module/Tagrm.php:15
+#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Editpost.php:114
+#: ../../Zotlabs/Module/Admin/Addons.php:430
+#: ../../Zotlabs/Module/Profile_photo.php:553
+#: ../../Zotlabs/Module/Editblock.php:141 ../../Zotlabs/Module/Filer.php:56
+#: ../../Zotlabs/Module/Editlayout.php:140
+#: ../../Zotlabs/Module/Cover_photo.php:428 ../../Zotlabs/Module/Oauth2.php:115
+#: ../../Zotlabs/Module/Oauth2.php:143 ../../Zotlabs/Module/Connedit.php:750
+#: ../../Zotlabs/Storage/Browser.php:386
+msgid "Cancel"
msgstr ""
-#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:473
-msgid "Pin to the top"
+#: ../../addon/wiki/Mod_Wiki.php:371
+msgid "Short description of your changes (optional)"
msgstr ""
-#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:473
-#: ../../Zotlabs/Widget/Pinned.php:158
-msgid "Unpin from the top"
+#: ../../addon/wiki/Mod_Wiki.php:381 ../../addon/wppost/wppost.php:174
+#: ../../addon/wppost/Mod_Wppost.php:96 ../../addon/dwpost/Mod_Dwpost.php:67
+#: ../../addon/dwpost/dwpost.php:134 ../../addon/ljpost/ljpost.php:134
+msgid "Source"
msgstr ""
-#: ../../include/js_strings.php:46
-#, php-format
-msgid "%d minutes"
-msgid_plural "%d minutes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/js_strings.php:47
-#, php-format
-msgid "about %d hours"
-msgid_plural "about %d hours"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/js_strings.php:48
-#, php-format
-msgid "%d days"
-msgid_plural "%d days"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/js_strings.php:49
-#, php-format
-msgid "%d months"
-msgid_plural "%d months"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/js_strings.php:50
-#, php-format
-msgid "%d years"
-msgid_plural "%d years"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/js_strings.php:55
-msgid "timeago.prefixAgo"
+#: ../../addon/wiki/Mod_Wiki.php:391
+msgid "New page name"
msgstr ""
-#: ../../include/js_strings.php:56
-msgid "timeago.prefixFromNow"
+#: ../../addon/wiki/Mod_Wiki.php:396
+msgid "Embed image from photo albums"
msgstr ""
-#: ../../include/js_strings.php:57
-msgid "timeago.suffixAgo"
+#: ../../addon/wiki/Mod_Wiki.php:397 ../../addon/hsse/hsse.php:208
+#: ../../include/conversation.php:1469
+msgid "Embed an image from your albums"
msgstr ""
-#: ../../include/js_strings.php:58
-msgid "timeago.suffixFromNow"
+#: ../../addon/wiki/Mod_Wiki.php:399 ../../addon/hsse/hsse.php:210
+#: ../../addon/hsse/hsse.php:257 ../../include/conversation.php:1471
+#: ../../include/conversation.php:1524
+#: ../../Zotlabs/Module/Profile_photo.php:554
+#: ../../Zotlabs/Module/Cover_photo.php:429
+msgid "OK"
msgstr ""
-#: ../../include/js_strings.php:61
-msgid "less than a minute"
+#: ../../addon/wiki/Mod_Wiki.php:400 ../../addon/hsse/hsse.php:139
+#: ../../include/conversation.php:1390
+#: ../../Zotlabs/Module/Profile_photo.php:555
+#: ../../Zotlabs/Module/Cover_photo.php:430
+msgid "Choose images to embed"
msgstr ""
-#: ../../include/js_strings.php:62
-msgid "about a minute"
+#: ../../addon/wiki/Mod_Wiki.php:401 ../../addon/hsse/hsse.php:140
+#: ../../include/conversation.php:1391
+#: ../../Zotlabs/Module/Profile_photo.php:556
+#: ../../Zotlabs/Module/Cover_photo.php:431
+msgid "Choose an album"
msgstr ""
-#: ../../include/js_strings.php:64
-msgid "about an hour"
+#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Profile_photo.php:557
+#: ../../Zotlabs/Module/Cover_photo.php:432
+msgid "Choose a different album"
msgstr ""
-#: ../../include/js_strings.php:66
-msgid "a day"
+#: ../../addon/wiki/Mod_Wiki.php:403 ../../addon/hsse/hsse.php:142
+#: ../../include/conversation.php:1393
+#: ../../Zotlabs/Module/Profile_photo.php:558
+#: ../../Zotlabs/Module/Cover_photo.php:433
+msgid "Error getting album list"
msgstr ""
-#: ../../include/js_strings.php:68
-msgid "about a month"
+#: ../../addon/wiki/Mod_Wiki.php:404 ../../addon/hsse/hsse.php:143
+#: ../../include/conversation.php:1394
+#: ../../Zotlabs/Module/Profile_photo.php:559
+#: ../../Zotlabs/Module/Cover_photo.php:434
+msgid "Error getting photo link"
msgstr ""
-#: ../../include/js_strings.php:70
-msgid "about a year"
+#: ../../addon/wiki/Mod_Wiki.php:405 ../../addon/hsse/hsse.php:144
+#: ../../include/conversation.php:1395
+#: ../../Zotlabs/Module/Profile_photo.php:560
+#: ../../Zotlabs/Module/Cover_photo.php:435
+msgid "Error getting album"
msgstr ""
-#: ../../include/js_strings.php:72
-msgid " "
+#: ../../addon/wiki/Mod_Wiki.php:407
+msgid "History"
msgstr ""
-#: ../../include/js_strings.php:73
-msgid "timeago.numbers"
+#: ../../addon/wiki/Mod_Wiki.php:485
+msgid "Error creating wiki. Invalid name."
msgstr ""
-#: ../../include/js_strings.php:75 ../../include/text.php:1502
-msgid "January"
+#: ../../addon/wiki/Mod_Wiki.php:492
+msgid "A wiki with this name already exists."
msgstr ""
-#: ../../include/js_strings.php:76 ../../include/text.php:1502
-msgid "February"
+#: ../../addon/wiki/Mod_Wiki.php:505
+msgid "Wiki created, but error creating Home page."
msgstr ""
-#: ../../include/js_strings.php:77 ../../include/text.php:1502
-msgid "March"
+#: ../../addon/wiki/Mod_Wiki.php:512
+msgid "Error creating wiki"
msgstr ""
-#: ../../include/js_strings.php:78 ../../include/text.php:1502
-msgid "April"
+#: ../../addon/wiki/Mod_Wiki.php:536
+msgid "Error updating wiki. Invalid name."
msgstr ""
-#: ../../include/js_strings.php:79
-msgctxt "long"
-msgid "May"
+#: ../../addon/wiki/Mod_Wiki.php:555
+msgid "Error updating wiki"
msgstr ""
-#: ../../include/js_strings.php:80 ../../include/text.php:1502
-msgid "June"
+#: ../../addon/wiki/Mod_Wiki.php:570
+msgid "Wiki delete permission denied."
msgstr ""
-#: ../../include/js_strings.php:81 ../../include/text.php:1502
-msgid "July"
+#: ../../addon/wiki/Mod_Wiki.php:580
+msgid "Error deleting wiki"
msgstr ""
-#: ../../include/js_strings.php:82 ../../include/text.php:1502
-msgid "August"
+#: ../../addon/wiki/Mod_Wiki.php:613
+msgid "New page created"
msgstr ""
-#: ../../include/js_strings.php:83 ../../include/text.php:1502
-msgid "September"
+#: ../../addon/wiki/Mod_Wiki.php:739
+msgid "Cannot delete Home"
msgstr ""
-#: ../../include/js_strings.php:84 ../../include/text.php:1502
-msgid "October"
+#: ../../addon/wiki/Mod_Wiki.php:815
+msgid "Current Revision"
msgstr ""
-#: ../../include/js_strings.php:85 ../../include/text.php:1502
-msgid "November"
+#: ../../addon/wiki/Mod_Wiki.php:815
+msgid "Selected Revision"
msgstr ""
-#: ../../include/js_strings.php:86 ../../include/text.php:1502
-msgid "December"
+#: ../../addon/wiki/Mod_Wiki.php:870
+msgid "You must be authenticated."
msgstr ""
-#: ../../include/js_strings.php:87
-msgid "Jan"
+#: ../../addon/openclipatar/openclipatar.php:51
+#: ../../addon/openclipatar/openclipatar.php:129
+msgid "System defaults:"
msgstr ""
-#: ../../include/js_strings.php:88
-msgid "Feb"
+#: ../../addon/openclipatar/openclipatar.php:55
+msgid "Preferred Clipart IDs"
msgstr ""
-#: ../../include/js_strings.php:89
-msgid "Mar"
+#: ../../addon/openclipatar/openclipatar.php:55
+msgid "List of preferred clipart ids. These will be shown first."
msgstr ""
-#: ../../include/js_strings.php:90
-msgid "Apr"
+#: ../../addon/openclipatar/openclipatar.php:56
+msgid "Default Search Term"
msgstr ""
-#: ../../include/js_strings.php:91
-msgctxt "short"
-msgid "May"
+#: ../../addon/openclipatar/openclipatar.php:56
+msgid "The default search term. These will be shown second."
msgstr ""
-#: ../../include/js_strings.php:92
-msgid "Jun"
+#: ../../addon/openclipatar/openclipatar.php:57
+msgid "Return After"
msgstr ""
-#: ../../include/js_strings.php:93
-msgid "Jul"
+#: ../../addon/openclipatar/openclipatar.php:57
+msgid "Page to load after image selection."
msgstr ""
-#: ../../include/js_strings.php:94
-msgid "Aug"
+#: ../../addon/openclipatar/openclipatar.php:58 ../../include/nav.php:114
+#: ../../include/conversation.php:1096 ../../Zotlabs/Module/Connedit.php:480
+#: ../../Zotlabs/Lib/Apps.php:349
+msgid "View Profile"
msgstr ""
-#: ../../include/js_strings.php:95
-msgid "Sep"
+#: ../../addon/openclipatar/openclipatar.php:59 ../../include/nav.php:119
+#: ../../include/channel.php:1534
+msgid "Edit Profile"
msgstr ""
-#: ../../include/js_strings.php:96
-msgid "Oct"
+#: ../../addon/openclipatar/openclipatar.php:60
+msgid "Profile List"
msgstr ""
-#: ../../include/js_strings.php:97
-msgid "Nov"
+#: ../../addon/openclipatar/openclipatar.php:62
+msgid "Order of Preferred"
msgstr ""
-#: ../../include/js_strings.php:98
-msgid "Dec"
+#: ../../addon/openclipatar/openclipatar.php:62
+msgid "Sort order of preferred clipart ids."
msgstr ""
-#: ../../include/js_strings.php:99 ../../include/text.php:1498
-msgid "Sunday"
+#: ../../addon/openclipatar/openclipatar.php:63
+#: ../../addon/openclipatar/openclipatar.php:69
+msgid "Newest first"
msgstr ""
-#: ../../include/js_strings.php:100 ../../include/text.php:1498
-msgid "Monday"
+#: ../../addon/openclipatar/openclipatar.php:66
+msgid "As entered"
msgstr ""
-#: ../../include/js_strings.php:101 ../../include/text.php:1498
-msgid "Tuesday"
+#: ../../addon/openclipatar/openclipatar.php:68
+msgid "Order of other"
msgstr ""
-#: ../../include/js_strings.php:102 ../../include/text.php:1498
-msgid "Wednesday"
+#: ../../addon/openclipatar/openclipatar.php:68
+msgid "Sort order of other clipart ids."
msgstr ""
-#: ../../include/js_strings.php:103 ../../include/text.php:1498
-msgid "Thursday"
+#: ../../addon/openclipatar/openclipatar.php:70
+msgid "Most downloaded first"
msgstr ""
-#: ../../include/js_strings.php:104 ../../include/text.php:1498
-msgid "Friday"
+#: ../../addon/openclipatar/openclipatar.php:71
+msgid "Most liked first"
msgstr ""
-#: ../../include/js_strings.php:105 ../../include/text.php:1498
-msgid "Saturday"
+#: ../../addon/openclipatar/openclipatar.php:73
+msgid "Preferred IDs Message"
msgstr ""
-#: ../../include/js_strings.php:106
-msgid "Sun"
+#: ../../addon/openclipatar/openclipatar.php:73
+msgid "Message to display above preferred results."
msgstr ""
-#: ../../include/js_strings.php:107
-msgid "Mon"
+#: ../../addon/openclipatar/openclipatar.php:79
+msgid "Uploaded by: "
msgstr ""
-#: ../../include/js_strings.php:108
-msgid "Tue"
+#: ../../addon/openclipatar/openclipatar.php:79
+msgid "Drawn by: "
msgstr ""
-#: ../../include/js_strings.php:109
-msgid "Wed"
+#: ../../addon/openclipatar/openclipatar.php:183
+#: ../../addon/openclipatar/openclipatar.php:195
+msgid "Use this image"
msgstr ""
-#: ../../include/js_strings.php:110
-msgid "Thu"
+#: ../../addon/openclipatar/openclipatar.php:193
+msgid "Or select from a free OpenClipart.org image:"
msgstr ""
-#: ../../include/js_strings.php:111
-msgid "Fri"
+#: ../../addon/openclipatar/openclipatar.php:196
+msgid "Search Term"
msgstr ""
-#: ../../include/js_strings.php:112
-msgid "Sat"
+#: ../../addon/openclipatar/openclipatar.php:233
+msgid "Unknown error. Please try again later."
msgstr ""
-#: ../../include/js_strings.php:113
-msgctxt "calendar"
-msgid "today"
+#: ../../addon/openclipatar/openclipatar.php:299
+#: ../../Zotlabs/Module/Profile_photo.php:268
+msgid ""
+"Shift-reload the page or clear browser cache if the new photo does not "
+"display immediately."
msgstr ""
-#: ../../include/js_strings.php:114
-msgctxt "calendar"
-msgid "month"
+#: ../../addon/openclipatar/openclipatar.php:309
+msgid "Profile photo updated successfully."
msgstr ""
-#: ../../include/js_strings.php:115
-msgctxt "calendar"
-msgid "week"
+#: ../../addon/bookmarker/bookmarker.php:38
+#: ../../Zotlabs/Lib/ThreadItem.php:474
+msgid "Save Bookmarks"
msgstr ""
-#: ../../include/js_strings.php:116
-msgctxt "calendar"
-msgid "day"
+#: ../../addon/rainbowtag/Mod_Rainbowtag.php:22
+msgid "Rainbow Tag App"
msgstr ""
-#: ../../include/js_strings.php:117
-msgctxt "calendar"
-msgid "All day"
+#: ../../addon/rainbowtag/Mod_Rainbowtag.php:23
+msgid "Add some colour to tag clouds"
msgstr ""
-#: ../../include/js_strings.php:120
-msgid "Please stand by while your download is being prepared."
+#: ../../addon/rainbowtag/Mod_Rainbowtag.php:30
+msgid "Rainbow Tag"
msgstr ""
-#: ../../include/js_strings.php:123
-msgid "Email address not valid"
+#: ../../addon/photocache/Mod_Photocache.php:27
+msgid "Photo Cache settings saved."
msgstr ""
-#: ../../include/js_strings.php:124 ../../include/datetime.php:211
-#: ../../addon/cart/submodules/orderoptions.php:334
-#: ../../addon/cart/submodules/orderoptions.php:358
-#: ../../addon/cart/submodules/orderoptions.php:434
-#: ../../addon/cart/submodules/orderoptions.php:458
-#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Appman.php:208
-#: ../../Zotlabs/Module/Appman.php:209 ../../Zotlabs/Module/Profiles.php:762
-#: ../../Zotlabs/Module/Profiles.php:766
-msgid "Required"
+#: ../../addon/photocache/Mod_Photocache.php:43
+msgid ""
+"Saves a copy of images from external sites locally to increase your "
+"anonymity in the web."
msgstr ""
-#: ../../include/photo/photo_driver.php:450
-#: ../../Zotlabs/Module/Profile_photo.php:167
-#: ../../Zotlabs/Module/Profile_photo.php:337
-msgid "Profile Photos"
+#: ../../addon/photocache/Mod_Photocache.php:49
+msgid "Minimal photo size for caching"
msgstr ""
-#: ../../include/nav.php:96
-msgid "Remote authentication"
+#: ../../addon/photocache/Mod_Photocache.php:51
+msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default."
msgstr ""
-#: ../../include/nav.php:96
-msgid "Click to authenticate to your home hub"
+#: ../../addon/photocache/Mod_Photocache.php:60
+msgid "Photo Cache"
msgstr ""
-#: ../../include/nav.php:102 ../../Zotlabs/Module/Admin/Channels.php:146
-#: ../../Zotlabs/Module/Admin.php:116 ../../Zotlabs/Module/Manage.php:162
-#: ../../Zotlabs/Widget/Channel_activities.php:239
-#: ../../Zotlabs/Widget/Admin.php:29
-msgid "Channels"
+#: ../../addon/gallery/gallery.php:43 ../../addon/gallery/Mod_Gallery.php:134
+msgid "Gallery"
msgstr ""
-#: ../../include/nav.php:102
-msgid "Manage your channels"
+#: ../../addon/gallery/gallery.php:46
+msgid "Photo Gallery"
msgstr ""
-#: ../../include/nav.php:105 ../../Zotlabs/Lib/Apps.php:344
-#: ../../Zotlabs/Module/Admin/Themes.php:125
-#: ../../Zotlabs/Module/Admin/Addons.php:348
-#: ../../Zotlabs/Widget/Settings_menu.php:71
-#: ../../Zotlabs/Widget/Newmember.php:58
-msgid "Settings"
+#: ../../addon/gallery/Mod_Gallery.php:49 ../../addon/cards/Mod_Cards.php:42
+#: ../../addon/articles/Mod_Articles.php:46 ../../include/channel.php:1427
+#: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Editwebpage.php:32
+#: ../../Zotlabs/Module/Profile.php:27 ../../Zotlabs/Module/Webpages.php:39
+#: ../../Zotlabs/Module/Filestorage.php:59 ../../Zotlabs/Module/Connect.php:17
+#: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Blocks.php:33
+#: ../../Zotlabs/Module/Editblock.php:31 ../../Zotlabs/Module/Editlayout.php:31
+#: ../../Zotlabs/Module/Menu.php:92 ../../Zotlabs/Module/Layouts.php:31
+msgid "Requested profile is not available."
msgstr ""
-#: ../../include/nav.php:105
-msgid "Account/Channel Settings"
+#: ../../addon/planets/Mod_Planets.php:23
+msgid "Random Planet App"
msgstr ""
-#: ../../include/nav.php:111 ../../include/nav.php:141
-msgid "End this session"
+#: ../../addon/planets/Mod_Planets.php:25
+msgid ""
+"Set a random planet from the Star Wars Empire as your location when posting"
msgstr ""
-#: ../../include/nav.php:114 ../../include/conversation.php:1095
-#: ../../addon/openclipatar/openclipatar.php:58 ../../Zotlabs/Lib/Apps.php:349
-#: ../../Zotlabs/Module/Connedit.php:480
-msgid "View Profile"
+#: ../../addon/openid/Mod_Id.php:85 ../../include/selectors.php:64
+#: ../../include/selectors.php:81 ../../include/channel.php:1714
+msgid "Male"
msgstr ""
-#: ../../include/nav.php:114
-msgid "Your profile page"
+#: ../../addon/openid/Mod_Id.php:87 ../../include/selectors.php:64
+#: ../../include/selectors.php:81 ../../include/channel.php:1712
+msgid "Female"
msgstr ""
-#: ../../include/nav.php:117 ../../include/channel.php:1530
-#: ../../Zotlabs/Module/Profiles.php:852
-msgid "Edit Profiles"
+#: ../../addon/openid/Mod_Openid.php:32
+msgid "OpenID protocol error. No ID returned."
msgstr ""
-#: ../../include/nav.php:117
-msgid "Manage/Edit profiles"
+#: ../../addon/openid/Mod_Openid.php:78 ../../addon/openid/Mod_Openid.php:179
+#, php-format
+msgid "Welcome %s. Remote authentication successful."
msgstr ""
-#: ../../include/nav.php:119 ../../include/channel.php:1534
-#: ../../addon/openclipatar/openclipatar.php:59
-msgid "Edit Profile"
+#: ../../addon/openid/Mod_Openid.php:189 ../../include/auth.php:334
+msgid "Login failed."
msgstr ""
-#: ../../include/nav.php:119 ../../Zotlabs/Widget/Newmember.php:40
-msgid "Edit your profile"
+#: ../../addon/openid/openid.php:49
+msgid ""
+"We encountered a problem while logging in with the OpenID you provided. "
+"Please check the correct spelling of the ID."
msgstr ""
-#: ../../include/nav.php:126 ../../include/nav.php:130
-msgid "Sign in"
+#: ../../addon/openid/openid.php:49
+msgid "The error message was:"
msgstr ""
-#: ../../include/nav.php:160
-msgid "Take me home"
+#: ../../addon/openid/MysqlProvider.php:52
+msgid "First Name"
msgstr ""
-#: ../../include/nav.php:162
-msgid "Log me out of this site"
+#: ../../addon/openid/MysqlProvider.php:53
+msgid "Last Name"
msgstr ""
-#: ../../include/nav.php:167
-msgid "Create an account"
+#: ../../addon/openid/MysqlProvider.php:54 ../../addon/redred/Mod_Redred.php:73
+#: ../../boot.php:1742
+msgid "Nickname"
msgstr ""
-#: ../../include/nav.php:181 ../../include/nav.php:320
-#: ../../include/help.php:118 ../../include/help.php:126
-#: ../../Zotlabs/Lib/Apps.php:353 ../../Zotlabs/Module/Layouts.php:184
-msgid "Help"
+#: ../../addon/openid/MysqlProvider.php:55
+msgid "Full Name"
msgstr ""
-#: ../../include/nav.php:181
-msgid "Help and documentation"
+#: ../../addon/openid/MysqlProvider.php:56
+#: ../../addon/openid/MysqlProvider.php:57 ../../addon/redred/Mod_Redred.php:69
+#: ../../addon/rtof/Mod_Rtof.php:55 ../../include/network.php:1771
+#: ../../Zotlabs/Module/Cdav.php:1368
+#: ../../Zotlabs/Module/Admin/Accounts.php:316
+#: ../../Zotlabs/Module/Admin/Accounts.php:330
+#: ../../Zotlabs/Module/Connedit.php:736
+msgid "Email"
msgstr ""
-#: ../../include/nav.php:195 ../../include/acl_selectors.php:149
-#: ../../include/text.php:1168 ../../include/text.php:1180
-#: ../../Zotlabs/Lib/Apps.php:358 ../../Zotlabs/Module/Search.php:46
-#: ../../Zotlabs/Module/Connections.php:397
-#: ../../Zotlabs/Widget/Sitesearch.php:37
-#: ../../Zotlabs/Widget/Activity_filter.php:210
-msgid "Search"
+#: ../../addon/openid/MysqlProvider.php:58
+#: ../../addon/openid/MysqlProvider.php:59
+#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:366
+msgid "Profile Photo"
msgstr ""
-#: ../../include/nav.php:195
-msgid "Search site @name, !forum, #tag, ?docs, content"
+#: ../../addon/openid/MysqlProvider.php:61
+msgid "Profile Photo 16px"
msgstr ""
-#: ../../include/nav.php:201 ../../Zotlabs/Widget/Admin.php:61
-msgid "Admin"
+#: ../../addon/openid/MysqlProvider.php:62
+msgid "Profile Photo 32px"
msgstr ""
-#: ../../include/nav.php:201
-msgid "Site Setup and Configuration"
+#: ../../addon/openid/MysqlProvider.php:63
+msgid "Profile Photo 48px"
msgstr ""
-#: ../../include/nav.php:324 ../../Zotlabs/Module/Defperms.php:254
-#: ../../Zotlabs/Module/New_channel.php:157
-#: ../../Zotlabs/Module/New_channel.php:164
-#: ../../Zotlabs/Widget/Notifications.php:173
-#: ../../Zotlabs/Widget/Messages.php:36
-msgid "Loading"
+#: ../../addon/openid/MysqlProvider.php:64
+msgid "Profile Photo 64px"
msgstr ""
-#: ../../include/nav.php:329
-msgid "@name, #tag, ?doc, content"
+#: ../../addon/openid/MysqlProvider.php:65
+msgid "Profile Photo 80px"
msgstr ""
-#: ../../include/nav.php:330
-msgid "Please wait..."
+#: ../../addon/openid/MysqlProvider.php:66
+msgid "Profile Photo 128px"
msgstr ""
-#: ../../include/nav.php:336 ../../Zotlabs/Lib/Apps.php:328
-msgid "Apps"
+#: ../../addon/openid/MysqlProvider.php:67 ../../include/event.php:141
+msgid "Timezone"
msgstr ""
-#: ../../include/nav.php:337
-msgid "Channel Apps"
+#: ../../addon/openid/MysqlProvider.php:68
+#: ../../Zotlabs/Module/Profiles.php:784
+msgid "Homepage URL"
msgstr ""
-#: ../../include/nav.php:338
-msgid "System Apps"
+#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:364
+msgid "Language"
msgstr ""
-#: ../../include/nav.php:339
-msgid "Pinned Apps"
+#: ../../addon/openid/MysqlProvider.php:70
+msgid "Birth Year"
msgstr ""
-#: ../../include/nav.php:340
-msgid "Featured Apps"
+#: ../../addon/openid/MysqlProvider.php:71
+msgid "Birth Month"
msgstr ""
-#: ../../include/nav.php:426 ../../Zotlabs/Lib/Apps.php:348
-#: ../../Zotlabs/Module/Admin/Channels.php:154
-msgid "Channel"
+#: ../../addon/openid/MysqlProvider.php:72
+msgid "Birth Day"
msgstr ""
-#: ../../include/nav.php:429
-msgid "Status Messages and Posts"
+#: ../../addon/openid/MysqlProvider.php:73
+msgid "Birthdate"
msgstr ""
-#: ../../include/nav.php:439 ../../Zotlabs/Module/Help.php:85
-msgid "About"
+#: ../../addon/openid/MysqlProvider.php:74
+#: ../../Zotlabs/Module/Profiles.php:457
+msgid "Gender"
msgstr ""
-#: ../../include/nav.php:442
-msgid "Profile Details"
+#: ../../addon/moremoods/moremoods.php:19
+msgid "lonely"
msgstr ""
-#: ../../include/nav.php:449 ../../include/features.php:368
-#: ../../Zotlabs/Lib/Apps.php:350 ../../Zotlabs/Module/Fbrowser.php:29
-#: ../../Zotlabs/Widget/Channel_activities.php:93
-msgid "Photos"
+#: ../../addon/moremoods/moremoods.php:20
+msgid "drunk"
msgstr ""
-#: ../../include/nav.php:452 ../../include/photos.php:722
-msgid "Photo Albums"
+#: ../../addon/moremoods/moremoods.php:21
+msgid "horny"
msgstr ""
-#: ../../include/nav.php:457 ../../Zotlabs/Lib/Apps.php:345
-#: ../../Zotlabs/Module/Fbrowser.php:85
-#: ../../Zotlabs/Widget/Channel_activities.php:125
-#: ../../Zotlabs/Widget/Notifications.php:108
-#: ../../Zotlabs/Storage/Browser.php:351
-msgid "Files"
+#: ../../addon/moremoods/moremoods.php:22
+msgid "stoned"
msgstr ""
-#: ../../include/nav.php:460
-msgid "Files and Storage"
+#: ../../addon/moremoods/moremoods.php:23
+msgid "fucked up"
msgstr ""
-#: ../../include/nav.php:468 ../../include/nav.php:471
-#: ../../include/features.php:82 ../../Zotlabs/Lib/Apps.php:351
-msgid "Calendar"
+#: ../../addon/moremoods/moremoods.php:24
+msgid "clusterfucked"
msgstr ""
-#: ../../include/nav.php:482 ../../include/nav.php:485
-#: ../../Zotlabs/Lib/Apps.php:335 ../../Zotlabs/Widget/Chatroom_list.php:22
-msgid "Chatrooms"
+#: ../../addon/moremoods/moremoods.php:25
+msgid "crazy"
msgstr ""
-#: ../../include/nav.php:495 ../../Zotlabs/Lib/Apps.php:334
-#: ../../Zotlabs/Module/Bookmarks.php:90
-msgid "Bookmarks"
+#: ../../addon/moremoods/moremoods.php:26
+msgid "hurt"
msgstr ""
-#: ../../include/nav.php:498
-msgid "Saved Bookmarks"
+#: ../../addon/moremoods/moremoods.php:27
+msgid "sleepy"
msgstr ""
-#: ../../include/nav.php:506 ../../Zotlabs/Lib/Apps.php:346
-#: ../../Zotlabs/Module/Webpages.php:247
-#: ../../Zotlabs/Widget/Channel_activities.php:168
-msgid "Webpages"
+#: ../../addon/moremoods/moremoods.php:28
+msgid "grumpy"
msgstr ""
-#: ../../include/nav.php:509
-msgid "View Webpages"
+#: ../../addon/moremoods/moremoods.php:29
+msgid "high"
msgstr ""
-#: ../../include/nav.php:517 ../../addon/wiki/Mod_Wiki.php:209
-#: ../../addon/wiki/wiki.php:70 ../../addon/wiki/Widget/Wiki_list.php:20
-msgid "Wikis"
+#: ../../addon/moremoods/moremoods.php:30
+msgid "semi-conscious"
msgstr ""
-#: ../../include/nav.php:520 ../../Zotlabs/Lib/Apps.php:347
-msgid "Wiki"
+#: ../../addon/moremoods/moremoods.php:31
+msgid "in love"
msgstr ""
-#: ../../include/datetime.php:58 ../../Zotlabs/Module/Profiles.php:753
-#: ../../Zotlabs/Widget/Newmember.php:56
-msgid "Miscellaneous"
+#: ../../addon/moremoods/moremoods.php:32
+msgid "in lust"
msgstr ""
-#: ../../include/datetime.php:140
-msgid "Birthday"
+#: ../../addon/moremoods/moremoods.php:33
+msgid "naked"
msgstr ""
-#: ../../include/datetime.php:140
-msgid "Age: "
+#: ../../addon/moremoods/moremoods.php:34
+msgid "stinky"
msgstr ""
-#: ../../include/datetime.php:140
-msgid "YYYY-MM-DD or MM-DD"
+#: ../../addon/moremoods/moremoods.php:35
+msgid "sweaty"
msgstr ""
-#: ../../include/datetime.php:244
-msgid "less than a second ago"
+#: ../../addon/moremoods/moremoods.php:36
+msgid "bleeding out"
msgstr ""
-#: ../../include/datetime.php:262
-#, php-format
-msgctxt "e.g. 22 hours ago, 1 minute ago"
-msgid "%1$d %2$s ago"
+#: ../../addon/moremoods/moremoods.php:37
+msgid "victorious"
msgstr ""
-#: ../../include/datetime.php:273
-msgctxt "relative_date"
-msgid "year"
-msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/datetime.php:276
-msgctxt "relative_date"
-msgid "month"
-msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/datetime.php:279
-msgctxt "relative_date"
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/datetime.php:282
-msgctxt "relative_date"
-msgid "day"
-msgid_plural "days"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/datetime.php:285
-msgctxt "relative_date"
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/datetime.php:288
-msgctxt "relative_date"
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/datetime.php:291
-msgctxt "relative_date"
-msgid "second"
-msgid_plural "seconds"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/datetime.php:520
-#, php-format
-msgid "%1$s's birthday"
+#: ../../addon/moremoods/moremoods.php:38
+msgid "defeated"
msgstr ""
-#: ../../include/datetime.php:521
-#, php-format
-msgid "Happy Birthday %1$s"
+#: ../../addon/moremoods/moremoods.php:39
+msgid "envious"
msgstr ""
-#: ../../include/language.php:433 ../../include/text.php:2183
-msgid "default"
+#: ../../addon/moremoods/moremoods.php:40
+msgid "jealous"
msgstr ""
-#: ../../include/language.php:446
-msgid "Select an alternate language"
+#: ../../addon/dirstats/dirstats.php:94
+msgid "Hubzilla Directory Stats"
msgstr ""
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
-#: ../../Zotlabs/Module/Admin/Features.php:56
-#: ../../Zotlabs/Module/Settings/Features.php:38
-msgid "Off"
+#: ../../addon/dirstats/dirstats.php:95
+msgid "Total Hubs"
msgstr ""
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
-#: ../../Zotlabs/Module/Admin/Features.php:56
-#: ../../Zotlabs/Module/Settings/Features.php:38
-msgid "On"
+#: ../../addon/dirstats/dirstats.php:97
+msgid "Hubzilla Hubs"
msgstr ""
-#: ../../include/features.php:86
-msgid "Start calendar week on Monday"
+#: ../../addon/dirstats/dirstats.php:99
+msgid "Friendica Hubs"
msgstr ""
-#: ../../include/features.php:87
-msgid "Default is Sunday"
+#: ../../addon/dirstats/dirstats.php:101
+msgid "Diaspora Pods"
msgstr ""
-#: ../../include/features.php:94
-msgid "Event Timezone Selection"
+#: ../../addon/dirstats/dirstats.php:103
+msgid "Hubzilla Channels"
msgstr ""
-#: ../../include/features.php:95
-msgid "Allow event creation in timezones other than your own."
+#: ../../addon/dirstats/dirstats.php:105
+msgid "Friendica Channels"
msgstr ""
-#: ../../include/features.php:104
-msgid "Channel Home"
+#: ../../addon/dirstats/dirstats.php:107
+msgid "Diaspora Channels"
msgstr ""
-#: ../../include/features.php:108
-msgid "Search by Date"
+#: ../../addon/dirstats/dirstats.php:109
+msgid "Aged 35 and above"
msgstr ""
-#: ../../include/features.php:109
-msgid "Ability to select posts by date ranges"
+#: ../../addon/dirstats/dirstats.php:111
+msgid "Aged 34 and under"
msgstr ""
-#: ../../include/features.php:116
-msgid "Tag Cloud"
+#: ../../addon/dirstats/dirstats.php:113
+msgid "Average Age"
msgstr ""
-#: ../../include/features.php:117
-msgid "Provide a personal tag cloud on your channel page"
+#: ../../addon/dirstats/dirstats.php:115
+msgid "Known Chatrooms"
msgstr ""
-#: ../../include/features.php:124 ../../include/features.php:358
-msgid "Use blog/list mode"
+#: ../../addon/dirstats/dirstats.php:117
+msgid "Known Tags"
msgstr ""
-#: ../../include/features.php:125 ../../include/features.php:359
-msgid "Comments will be displayed separately"
+#: ../../addon/dirstats/dirstats.php:119
+msgid ""
+"Please note Diaspora and Friendica statistics are merely those **this "
+"directory** is aware of, and not all those known in the network. This also "
+"applies to chatrooms,"
msgstr ""
-#: ../../include/features.php:133 ../../include/text.php:1056
-#: ../../Zotlabs/Lib/Apps.php:338 ../../Zotlabs/Module/Connections.php:393
-msgid "Connections"
+#: ../../addon/redred/Mod_Redred.php:24
+msgid "Channel is required."
msgstr ""
-#: ../../include/features.php:137
-msgid "Connection Filtering"
+#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:331
+msgid "Invalid channel."
msgstr ""
-#: ../../include/features.php:138
-msgid "Filter incoming posts from connections based on keywords/content"
+#: ../../addon/redred/Mod_Redred.php:38
+msgid "Hubzilla Crosspost Connector Settings saved."
msgstr ""
-#: ../../include/features.php:146
-msgid "Conversation"
+#: ../../addon/redred/Mod_Redred.php:61
+msgid "Send public postings to Hubzilla channel by default"
msgstr ""
-#: ../../include/features.php:158
-msgid "Emoji Reactions"
+#: ../../addon/redred/Mod_Redred.php:65
+msgid "Hubzilla API Path"
msgstr ""
-#: ../../include/features.php:159
-msgid "Add emoji reaction ability to posts"
+#: ../../addon/redred/Mod_Redred.php:65 ../../addon/rtof/Mod_Rtof.php:51
+msgid "https://{sitename}/api"
msgstr ""
-#: ../../include/features.php:166
-msgid "Dislike Posts"
+#: ../../addon/redred/Mod_Redred.php:69
+msgid "Hubzilla login name"
msgstr ""
-#: ../../include/features.php:167
-msgid "Ability to dislike posts/comments"
+#: ../../addon/redred/Mod_Redred.php:73
+msgid "Hubzilla channel name"
msgstr ""
-#: ../../include/features.php:174
-msgid "Star Posts"
+#: ../../addon/redred/Mod_Redred.php:77
+msgid "Hubzilla password"
msgstr ""
-#: ../../include/features.php:175
-msgid "Ability to mark special posts with a star indicator"
+#: ../../addon/redred/Mod_Redred.php:85
+msgid "Hubzilla Crosspost Connector"
msgstr ""
-#: ../../include/features.php:182
-msgid "Reply on comment"
+#: ../../addon/redred/redred.php:50
+msgid "Post to Hubzilla"
msgstr ""
-#: ../../include/features.php:183
-msgid "Ability to reply on selected comment"
+#: ../../addon/redphotos/redphotos.php:106
+msgid "Photos imported"
msgstr ""
-#: ../../include/features.php:192 ../../Zotlabs/Lib/Apps.php:352
-msgid "Directory"
+#: ../../addon/redphotos/redphotos.php:119
+#: ../../addon/redfiles/redfiles.php:109 ../../addon/hzfiles/hzfiles.php:75
+#: ../../include/items.php:447 ../../Zotlabs/Module/Import_items.php:116
+#: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Group.php:108
+#: ../../Zotlabs/Module/Like.php:348 ../../Zotlabs/Module/Share.php:72
+#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Dreport.php:10
+#: ../../Zotlabs/Module/Dreport.php:55 ../../Zotlabs/Web/WebServer.php:118
+msgid "Permission denied"
msgstr ""
-#: ../../include/features.php:196
-msgid "Advanced Directory Search"
+#: ../../addon/redphotos/redphotos.php:129
+msgid "Redmatrix Photo Album Import"
msgstr ""
-#: ../../include/features.php:197
-msgid "Allows creation of complex directory search queries"
+#: ../../addon/redphotos/redphotos.php:130
+msgid "This will import all your Redmatrix photo albums to this channel."
msgstr ""
-#: ../../include/features.php:206
-msgid "Editor"
+#: ../../addon/redphotos/redphotos.php:131
+#: ../../addon/redfiles/redfiles.php:121
+msgid "Redmatrix Server base URL"
msgstr ""
-#: ../../include/features.php:210
-msgid "Post Categories"
+#: ../../addon/redphotos/redphotos.php:132
+#: ../../addon/redfiles/redfiles.php:122
+msgid "Redmatrix Login Username"
msgstr ""
-#: ../../include/features.php:211
-msgid "Add categories to your posts"
+#: ../../addon/redphotos/redphotos.php:133
+#: ../../addon/redfiles/redfiles.php:123
+msgid "Redmatrix Login Password"
msgstr ""
-#: ../../include/features.php:218
-msgid "Large Photos"
+#: ../../addon/redphotos/redphotos.php:134
+msgid "Import just this album"
msgstr ""
-#: ../../include/features.php:219
-msgid ""
-"Include large (1024px) photo thumbnails in posts. If not enabled, use small "
-"(640px) photo thumbnails"
+#: ../../addon/redphotos/redphotos.php:134
+msgid "Leave blank to import all albums"
msgstr ""
-#: ../../include/features.php:226
-msgid "Even More Encryption"
+#: ../../addon/redphotos/redphotos.php:135
+msgid "Maximum count to import"
msgstr ""
-#: ../../include/features.php:227
-msgid ""
-"Allow optional encryption of content end-to-end with a shared secret key"
+#: ../../addon/redphotos/redphotos.php:135
+msgid "0 or blank to import all available"
msgstr ""
-#: ../../include/features.php:234
-msgid "Disable Comments"
+#: ../../addon/redphotos/redphotohelper.php:71 ../../addon/pubcrawl/as.php:1958
+#: ../../addon/diaspora/Receiver.php:1647 ../../include/text.php:2342
+#: ../../include/conversation.php:138 ../../Zotlabs/Module/Like.php:445
+#: ../../Zotlabs/Module/Tagger.php:71 ../../Zotlabs/Module/Subthread.php:115
+#: ../../Zotlabs/Lib/Activity.php:3607
+msgid "photo"
msgstr ""
-#: ../../include/features.php:235
-msgid "Provide the option to disable comments for a post"
+#: ../../addon/statusnet/Mod_Statusnet.php:61
+msgid ""
+"Please contact your site administrator.<br />The provided API URL is not "
+"valid."
msgstr ""
-#: ../../include/features.php:242
-msgid "Delayed Posting"
+#: ../../addon/statusnet/Mod_Statusnet.php:98
+msgid "We could not contact the GNU social API with the Path you entered."
msgstr ""
-#: ../../include/features.php:243
-msgid "Allow posts to be published at a later date"
+#: ../../addon/statusnet/Mod_Statusnet.php:130
+msgid "GNU social settings updated."
msgstr ""
-#: ../../include/features.php:250
-msgid "Content Expiration"
+#: ../../addon/statusnet/Mod_Statusnet.php:179
+msgid "Globally Available GNU social OAuthKeys"
msgstr ""
-#: ../../include/features.php:251
-msgid "Remove posts/comments and/or private messages at a future time"
+#: ../../addon/statusnet/Mod_Statusnet.php:181
+msgid ""
+"There are preconfigured OAuth key pairs for some GNU social servers "
+"available. If you are using one of them, please use these credentials.<br /"
+">If not feel free to connect to any other GNU social instance (see below)."
msgstr ""
-#: ../../include/features.php:258
-msgid "Suppress Duplicate Posts/Comments"
+#: ../../addon/statusnet/Mod_Statusnet.php:196
+msgid "Provide your own OAuth Credentials"
msgstr ""
-#: ../../include/features.php:259
+#: ../../addon/statusnet/Mod_Statusnet.php:198
msgid ""
-"Prevent posts with identical content to be published with less than two "
-"minutes in between submissions."
+"No consumer key pair for GNU social found. Register your Hubzilla Account as "
+"an desktop client on your GNU social account, copy the consumer key pair "
+"here and enter the API base root.<br />Before you register your own OAuth "
+"key pair ask the administrator if there is already a key pair for this "
+"Hubzilla installation at your favourite GNU social installation."
msgstr ""
-#: ../../include/features.php:266
-msgid "Auto-save drafts of posts and comments"
+#: ../../addon/statusnet/Mod_Statusnet.php:202
+msgid "OAuth Consumer Key"
msgstr ""
-#: ../../include/features.php:267
-msgid ""
-"Automatically saves post and comment drafts in local browser storage to help "
-"prevent accidental loss of compositions"
+#: ../../addon/statusnet/Mod_Statusnet.php:206
+msgid "OAuth Consumer Secret"
msgstr ""
-#: ../../include/features.php:276
-msgid "Manage"
+#: ../../addon/statusnet/Mod_Statusnet.php:210
+msgid "Base API Path"
msgstr ""
-#: ../../include/features.php:280
-msgid "Navigation Channel Select"
+#: ../../addon/statusnet/Mod_Statusnet.php:210
+msgid "Remember the trailing /"
msgstr ""
-#: ../../include/features.php:281
-msgid "Change channels directly from within the navigation dropdown menu"
+#: ../../addon/statusnet/Mod_Statusnet.php:214
+msgid "GNU social application name"
msgstr ""
-#: ../../include/features.php:290 ../../Zotlabs/Module/Connections.php:341
-#: ../../Zotlabs/Widget/Notifications.php:23
-msgid "Network"
+#: ../../addon/statusnet/Mod_Statusnet.php:237
+msgid ""
+"To connect to your GNU social account click the button below to get a "
+"security code from GNU social which you have to copy into the input box "
+"below and submit the form. Only your <strong>public</strong> posts will be "
+"posted to GNU social."
msgstr ""
-#: ../../include/features.php:294
-msgid "Events Filter"
+#: ../../addon/statusnet/Mod_Statusnet.php:239
+msgid "Log in with GNU social"
msgstr ""
-#: ../../include/features.php:295
-msgid "Ability to display only events"
+#: ../../addon/statusnet/Mod_Statusnet.php:242
+msgid "Copy the security code from GNU social here"
msgstr ""
-#: ../../include/features.php:302
-msgid "Polls Filter"
+#: ../../addon/statusnet/Mod_Statusnet.php:252
+msgid "Cancel Connection Process"
msgstr ""
-#: ../../include/features.php:303
-msgid "Ability to display only polls"
+#: ../../addon/statusnet/Mod_Statusnet.php:254
+msgid "Current GNU social API is"
msgstr ""
-#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:89
-msgid "Saved Searches"
+#: ../../addon/statusnet/Mod_Statusnet.php:258
+msgid "Cancel GNU social Connection"
msgstr ""
-#: ../../include/features.php:311
-msgid "Save search terms for re-use"
+#: ../../addon/statusnet/Mod_Statusnet.php:270
+#: ../../addon/twitter/Mod_Twitter.php:145
+msgid "Currently connected to: "
msgstr ""
-#: ../../include/features.php:319
-msgid "Ability to file posts under folders"
+#: ../../addon/statusnet/Mod_Statusnet.php:275
+msgid ""
+"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile "
+"details from unknown viewers?</em>) the link potentially included in public "
+"postings relayed to GNU social will lead the visitor to a blank page "
+"informing the visitor that the access to your profile has been restricted."
msgstr ""
-#: ../../include/features.php:326
-msgid "Alternate Stream Order"
+#: ../../addon/statusnet/Mod_Statusnet.php:280
+msgid "Post to GNU social by default"
msgstr ""
-#: ../../include/features.php:327
+#: ../../addon/statusnet/Mod_Statusnet.php:280
msgid ""
-"Ability to order the stream by last post date, last comment date or "
-"unthreaded activities"
+"If enabled your public postings will be posted to the associated GNU-social "
+"account by default"
msgstr ""
-#: ../../include/features.php:334
-msgid "Contact Filter"
+#: ../../addon/statusnet/Mod_Statusnet.php:289
+#: ../../addon/twitter/Mod_Twitter.php:169
+msgid "Clear OAuth configuration"
msgstr ""
-#: ../../include/features.php:335
-msgid "Ability to display only posts of a selected contact"
+#: ../../addon/statusnet/Mod_Statusnet.php:301
+msgid "GNU-Social Crosspost Connector"
msgstr ""
-#: ../../include/features.php:342
-msgid "Forum Filter"
+#: ../../addon/statusnet/statusnet.php:145
+msgid "Post to GNU social"
msgstr ""
-#: ../../include/features.php:343
-msgid "Ability to display only posts of a specific forum"
+#: ../../addon/statusnet/statusnet.php:593
+#: ../../Zotlabs/Module/Admin/Site.php:423
+msgid "Site name"
msgstr ""
-#: ../../include/features.php:350
-msgid "Personal Posts Filter"
+#: ../../addon/statusnet/statusnet.php:594
+msgid "API URL"
msgstr ""
-#: ../../include/features.php:351
-msgid "Ability to display only posts that you've interacted on"
+#: ../../addon/statusnet/statusnet.php:595 ../../addon/twitter/twitter.php:505
+#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:139
+#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
+msgid "Consumer Secret"
msgstr ""
-#: ../../include/features.php:372
-msgid "Photo Location"
+#: ../../addon/statusnet/statusnet.php:596 ../../addon/twitter/twitter.php:504
+#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:138
+msgid "Consumer Key"
msgstr ""
-#: ../../include/features.php:373
-msgid "If location data is available on uploaded photos, link this to a map."
+#: ../../addon/statusnet/statusnet.php:597
+msgid "Application name"
msgstr ""
-#: ../../include/features.php:380
-msgid "Flag Adult Photos"
+#: ../../addon/rtof/Mod_Rtof.php:24
+msgid "Friendica Crosspost Connector Settings saved."
msgstr ""
-#: ../../include/features.php:381
-msgid ""
-"Provide photo edit option to hide inappropriate photos from default album "
-"view"
+#: ../../addon/rtof/Mod_Rtof.php:47
+msgid "Send public postings to Friendica by default"
msgstr ""
-#: ../../include/features.php:390 ../../Zotlabs/Lib/Apps.php:368
-#: ../../Zotlabs/Module/Contactedit.php:444
-msgid "Profiles"
+#: ../../addon/rtof/Mod_Rtof.php:51
+msgid "Friendica API Path"
msgstr ""
-#: ../../include/features.php:394
-msgid "Advanced Profiles"
+#: ../../addon/rtof/Mod_Rtof.php:55
+msgid "Friendica login name"
msgstr ""
-#: ../../include/features.php:395
-msgid "Additional profile sections and selections"
+#: ../../addon/rtof/Mod_Rtof.php:59
+msgid "Friendica password"
msgstr ""
-#: ../../include/features.php:402
-msgid "Profile Import/Export"
+#: ../../addon/rtof/Mod_Rtof.php:67
+msgid "Friendica Crosspost Connector"
msgstr ""
-#: ../../include/features.php:403
-msgid "Save and load profile details across sites/channels"
+#: ../../addon/rtof/rtof.php:51
+msgid "Post to Friendica"
msgstr ""
-#: ../../include/features.php:410
-msgid "Multiple Profiles"
+#: ../../addon/wppost/wppost.php:47
+msgid "Post to WordPress"
msgstr ""
-#: ../../include/features.php:411
-msgid "Ability to create multiple profiles"
+#: ../../addon/wppost/Mod_Wppost.php:30
+msgid "Wordpress Settings saved."
msgstr ""
-#: ../../include/feedutils.php:871 ../../include/text.php:1570
-msgid "unknown"
+#: ../../addon/wppost/Mod_Wppost.php:67
+msgid "WordPress username"
msgstr ""
-#: ../../include/oembed.php:154
-msgid "View PDF"
+#: ../../addon/wppost/Mod_Wppost.php:71
+msgid "WordPress password"
msgstr ""
-#: ../../include/oembed.php:386
-msgid " by "
+#: ../../addon/wppost/Mod_Wppost.php:75
+msgid "WordPress API URL"
msgstr ""
-#: ../../include/oembed.php:387
-msgid " on "
+#: ../../addon/wppost/Mod_Wppost.php:76
+msgid "Typically https://your-blog.tld/xmlrpc.php"
msgstr ""
-#: ../../include/oembed.php:416
-msgid "Embedded content"
+#: ../../addon/wppost/Mod_Wppost.php:79
+msgid "WordPress blogid"
msgstr ""
-#: ../../include/oembed.php:425
-msgid "Embedding disabled"
+#: ../../addon/wppost/Mod_Wppost.php:80
+msgid "For multi-user sites such as wordpress.com, otherwise leave blank"
msgstr ""
-#: ../../include/markdown.php:206 ../../include/bbcode.php:568
-#, php-format
-msgid "%1$s wrote the following %2$s %3$s"
+#: ../../addon/wppost/Mod_Wppost.php:84
+msgid "Post to WordPress by default"
msgstr ""
-#: ../../include/markdown.php:208 ../../include/bbcode.php:564
-#: ../../include/conversation.php:168 ../../include/text.php:2348
-#: ../../Zotlabs/Lib/Activity.php:3563 ../../Zotlabs/Module/Tagger.php:79
-msgid "post"
+#: ../../addon/wppost/Mod_Wppost.php:88
+msgid "Forward comments (requires hubzilla_wp plugin)"
msgstr ""
-#: ../../include/markdown.php:259 ../../include/bbcode.php:653
-msgid "spoiler"
+#: ../../addon/wppost/Mod_Wppost.php:92 ../../addon/dwpost/Mod_Dwpost.php:63
+#: ../../addon/ljpost/Mod_Ljpost.php:69
+msgid "Add link to original post"
msgstr ""
-#: ../../include/opengraph.php:56
-#, php-format
-msgid "This is the home page of %s."
+#: ../../addon/wppost/Mod_Wppost.php:96 ../../addon/dwpost/Mod_Dwpost.php:67
+msgid "Link description (default:"
msgstr ""
-#: ../../include/group.php:23
-msgid ""
-"A deleted group with this name was revived. Existing item permissions "
-"<strong>may</strong> apply to this group and any future members. If this is "
-"not what you intended, please create another group with a different name."
+#: ../../addon/wppost/Mod_Wppost.php:104
+msgid "Wordpress Post"
msgstr ""
-#: ../../include/group.php:271
-msgid "Add new connections to this privacy group"
+#: ../../addon/content_import/Mod_content_import.php:27
+msgid "No server specified"
msgstr ""
-#: ../../include/group.php:305
-msgid "edit"
+#: ../../addon/content_import/Mod_content_import.php:73
+msgid "Posts imported"
msgstr ""
-#: ../../include/group.php:327 ../../include/acl_selectors.php:87
-#: ../../Zotlabs/Lib/Apps.php:369 ../../Zotlabs/Module/Group.php:143
-#: ../../Zotlabs/Widget/Activity_filter.php:95
-msgid "Privacy Groups"
+#: ../../addon/content_import/Mod_content_import.php:113
+msgid "Files imported"
msgstr ""
-#: ../../include/group.php:328
-msgid "Edit group"
+#: ../../addon/content_import/Mod_content_import.php:134
+#: ../../Zotlabs/Lib/Apps.php:337
+msgid "Content Import"
msgstr ""
-#: ../../include/group.php:329
-msgid "Manage privacy groups"
+#: ../../addon/content_import/Mod_content_import.php:135
+msgid ""
+"This will import all your conversations and cloud files from a cloned "
+"channel on another server. This may take a while if you have lots of posts "
+"and or files."
msgstr ""
-#: ../../include/group.php:330
-msgid "Channels not in any privacy group"
+#: ../../addon/content_import/Mod_content_import.php:136
+msgid "Include posts"
msgstr ""
-#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90
-msgid "add"
+#: ../../addon/content_import/Mod_content_import.php:136
+msgid "Conversations, Articles, Cards, and other posted content"
msgstr ""
-#: ../../include/connections.php:112 ../../include/conversation.php:1119
-#: ../../include/channel.php:1612 ../../Zotlabs/Module/Directory.php:363
-#: ../../Zotlabs/Module/Connections.php:359 ../../Zotlabs/Module/Suggest.php:69
-#: ../../Zotlabs/Widget/Suggestions.php:51 ../../Zotlabs/Widget/Follow.php:37
-msgid "Connect"
+#: ../../addon/content_import/Mod_content_import.php:137
+msgid "Include files"
msgstr ""
-#: ../../include/connections.php:136
-msgid "New window"
+#: ../../addon/content_import/Mod_content_import.php:137
+msgid "Files, Photos and other cloud storage"
msgstr ""
-#: ../../include/connections.php:137
-msgid "Open the selected location in a different window or browser tab"
+#: ../../addon/content_import/Mod_content_import.php:138
+msgid "Original Server base URL"
msgstr ""
-#: ../../include/items.php:441 ../../addon/hzfiles/hzfiles.php:75
-#: ../../addon/redphotos/redphotos.php:119
-#: ../../addon/redfiles/redfiles.php:109 ../../Zotlabs/Web/WebServer.php:118
-#: ../../Zotlabs/Module/Like.php:348 ../../Zotlabs/Module/Share.php:72
-#: ../../Zotlabs/Module/Import_items.php:116
-#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:55
-#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Group.php:108
-#: ../../Zotlabs/Module/Profperm.php:28
-msgid "Permission denied"
+#: ../../addon/content_import/Mod_content_import.php:139
+#: ../../addon/hzfiles/hzfiles.php:84
+msgid "Since modified date yyyy-mm-dd"
msgstr ""
-#: ../../include/items.php:1228
-msgid "Visible to anybody on the internet."
+#: ../../addon/content_import/Mod_content_import.php:140
+#: ../../addon/hzfiles/hzfiles.php:85
+msgid "Until modified date yyyy-mm-dd"
msgstr ""
-#: ../../include/items.php:1230
-msgid "Visible to you only."
+#: ../../addon/hsse/hsse.php:82 ../../include/conversation.php:1335
+msgid "Set your location"
msgstr ""
-#: ../../include/items.php:1232
-msgid "Visible to anybody in this network."
+#: ../../addon/hsse/hsse.php:83 ../../include/conversation.php:1336
+msgid "Clear browser location"
msgstr ""
-#: ../../include/items.php:1234
-msgid "Visible to anybody authenticated."
+#: ../../addon/hsse/hsse.php:95 ../../addon/cards/Mod_Card_edit.php:101
+#: ../../addon/articles/Mod_Article_edit.php:99
+#: ../../include/conversation.php:1348 ../../Zotlabs/Module/Editwebpage.php:143
+#: ../../Zotlabs/Module/Chat.php:219 ../../Zotlabs/Module/Editblock.php:116
+msgid "Insert web link"
msgstr ""
-#: ../../include/items.php:1236
-#, php-format
-msgid "Visible to anybody on %s."
+#: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1352
+msgid "Embed (existing) photo from your photo albums"
msgstr ""
-#: ../../include/items.php:1238
-msgid "Visible to all connections."
+#: ../../addon/hsse/hsse.php:134 ../../include/conversation.php:1385
+#: ../../Zotlabs/Module/Chat.php:217
+msgid "Please enter a link URL:"
msgstr ""
-#: ../../include/items.php:1240
-msgid "Visible to approved connections."
+#: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1386
+msgid "Tag term:"
msgstr ""
-#: ../../include/items.php:1242
-msgid "Visible to specific connections."
+#: ../../addon/hsse/hsse.php:136 ../../include/conversation.php:1387
+msgid "Where are you right now?"
msgstr ""
-#: ../../include/items.php:3296 ../../Zotlabs/Module/Share.php:104
-#, php-format
-msgid "&#x1f501; Repeated %1$s's %2$s"
+#: ../../addon/hsse/hsse.php:141 ../../include/conversation.php:1392
+msgid "Choose a different album..."
msgstr ""
-#: ../../include/items.php:3810 ../../addon/flashcards/Mod_Flashcards.php:291
-#: ../../addon/flashcards/Mod_Flashcards.php:292
-#: ../../Zotlabs/Module/Display.php:53 ../../Zotlabs/Module/Display.php:114
-#: ../../Zotlabs/Module/Display.php:392
-#: ../../Zotlabs/Module/Admin/Themes.php:72
-#: ../../Zotlabs/Module/Admin/Addons.php:263
-#: ../../Zotlabs/Module/Filestorage.php:29 ../../Zotlabs/Module/Thing.php:96
-#: ../../Zotlabs/Module/Admin.php:61 ../../Zotlabs/Module/Viewsrc.php:25
-msgid "Item not found."
+#: ../../addon/hsse/hsse.php:145 ../../include/conversation.php:1396
+msgid "Comments enabled"
msgstr ""
-#: ../../include/items.php:3887 ../../include/photos.php:30
-#: ../../include/attach.php:156 ../../include/attach.php:205
-#: ../../include/attach.php:278 ../../include/attach.php:329
-#: ../../include/attach.php:424 ../../include/attach.php:438
-#: ../../include/attach.php:445 ../../include/attach.php:527
-#: ../../include/attach.php:1098 ../../include/attach.php:1171
-#: ../../include/attach.php:1336 ../../addon/articles/Mod_Article_edit.php:51
-#: ../../addon/articles/Mod_Articles.php:94 ../../addon/pumpio/pumpio.php:44
-#: ../../addon/keepout/keepout.php:36 ../../addon/cards/Mod_Cards.php:89
-#: ../../addon/cards/Mod_Card_edit.php:51 ../../addon/wiki/Mod_Wiki.php:63
-#: ../../addon/wiki/Mod_Wiki.php:288 ../../addon/wiki/Mod_Wiki.php:425
-#: ../../addon/openid/Mod_Id.php:53 ../../Zotlabs/Lib/Chatroom.php:135
-#: ../../Zotlabs/Web/WebServer.php:119
-#: ../../Zotlabs/Module/Service_limits.php:11 ../../Zotlabs/Module/Locs.php:98
-#: ../../Zotlabs/Module/Item.php:516 ../../Zotlabs/Module/Item.php:535
-#: ../../Zotlabs/Module/Item.php:545 ../../Zotlabs/Module/Item.php:1422
-#: ../../Zotlabs/Module/Cover_photo.php:341
-#: ../../Zotlabs/Module/Cover_photo.php:354
-#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Api.php:24
-#: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133
-#: ../../Zotlabs/Module/Profile_photo.php:390
-#: ../../Zotlabs/Module/Profile_photo.php:421
-#: ../../Zotlabs/Module/Invite.php:64 ../../Zotlabs/Module/Invite.php:315
-#: ../../Zotlabs/Module/Poke.php:141 ../../Zotlabs/Module/Block.php:24
-#: ../../Zotlabs/Module/Block.php:74 ../../Zotlabs/Module/Like.php:248
-#: ../../Zotlabs/Module/Vote.php:19 ../../Zotlabs/Module/Profile.php:99
-#: ../../Zotlabs/Module/Profile.php:114 ../../Zotlabs/Module/Display.php:388
-#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Settings.php:59
-#: ../../Zotlabs/Module/Appman.php:153 ../../Zotlabs/Module/Layouts.php:71
-#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89
-#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
-#: ../../Zotlabs/Module/Connections.php:32
-#: ../../Zotlabs/Module/Bookmarks.php:70 ../../Zotlabs/Module/Editlayout.php:67
-#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Menu.php:130
-#: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Mood.php:126
-#: ../../Zotlabs/Module/Channel.php:222 ../../Zotlabs/Module/Channel.php:379
-#: ../../Zotlabs/Module/Channel.php:418
-#: ../../Zotlabs/Module/Viewconnections.php:28
-#: ../../Zotlabs/Module/Viewconnections.php:33
-#: ../../Zotlabs/Module/Attach_edit.php:90
-#: ../../Zotlabs/Module/Attach_edit.php:99
-#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Chat.php:111
-#: ../../Zotlabs/Module/Chat.php:116 ../../Zotlabs/Module/Network.php:18
-#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Suggest.php:32
-#: ../../Zotlabs/Module/Authtest.php:13 ../../Zotlabs/Module/Connedit.php:299
-#: ../../Zotlabs/Module/Profiles.php:171 ../../Zotlabs/Module/Profiles.php:615
-#: ../../Zotlabs/Module/Webpages.php:131
-#: ../../Zotlabs/Module/Filestorage.php:20
-#: ../../Zotlabs/Module/Filestorage.php:78
-#: ../../Zotlabs/Module/Filestorage.php:96
-#: ../../Zotlabs/Module/Filestorage.php:119
-#: ../../Zotlabs/Module/Filestorage.php:165
-#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Pdledit.php:35
-#: ../../Zotlabs/Module/Channel_calendar.php:232
-#: ../../Zotlabs/Module/Regmod.php:20 ../../Zotlabs/Module/Defperms.php:181
-#: ../../Zotlabs/Module/Thing.php:282 ../../Zotlabs/Module/Thing.php:302
-#: ../../Zotlabs/Module/Thing.php:343 ../../Zotlabs/Module/Editblock.php:67
-#: ../../Zotlabs/Module/Sharedwithme.php:19 ../../Zotlabs/Module/Setup.php:218
-#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Group.php:14
-#: ../../Zotlabs/Module/Group.php:30 ../../Zotlabs/Module/Editpost.php:17
-#: ../../Zotlabs/Module/Achievements.php:34
-#: ../../Zotlabs/Module/New_channel.php:105
-#: ../../Zotlabs/Module/New_channel.php:130 ../../Zotlabs/Module/Photos.php:71
-#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/Manage.php:10
-#: ../../Zotlabs/Module/Editwebpage.php:68
-#: ../../Zotlabs/Module/Editwebpage.php:89
-#: ../../Zotlabs/Module/Editwebpage.php:107
-#: ../../Zotlabs/Module/Editwebpage.php:121
-msgid "Permission denied."
+#: ../../addon/hsse/hsse.php:146 ../../include/conversation.php:1397
+msgid "Comments disabled"
msgstr ""
-#: ../../include/items.php:4389 ../../Zotlabs/Module/Group.php:62
-#: ../../Zotlabs/Module/Group.php:206
-msgid "Privacy group not found."
+#: ../../addon/hsse/hsse.php:153 ../../include/conversation.php:1414
+#: ../../Zotlabs/Module/Webpages.php:257 ../../Zotlabs/Module/Photos.php:1094
+#: ../../Zotlabs/Lib/ThreadItem.php:838
+msgid "Preview"
msgstr ""
-#: ../../include/items.php:4405
-msgid "Privacy group is empty."
+#: ../../addon/hsse/hsse.php:195 ../../include/conversation.php:1456
+msgid "Page link name"
msgstr ""
-#: ../../include/items.php:4412
-#, php-format
-msgid "Privacy group: %s"
+#: ../../addon/hsse/hsse.php:198 ../../include/conversation.php:1459
+msgid "Post as"
msgstr ""
-#: ../../include/items.php:4422
-#, php-format
-msgid "Connection: %s"
+#: ../../addon/hsse/hsse.php:200 ../../include/conversation.php:1461
+#: ../../Zotlabs/Lib/ThreadItem.php:829
+msgid "Bold"
msgstr ""
-#: ../../include/items.php:4424
-msgid "Connection not found."
+#: ../../addon/hsse/hsse.php:201 ../../include/conversation.php:1462
+#: ../../Zotlabs/Lib/ThreadItem.php:830
+msgid "Italic"
msgstr ""
-#: ../../include/items.php:4771 ../../Zotlabs/Module/Cover_photo.php:297
-msgid "female"
+#: ../../addon/hsse/hsse.php:202 ../../include/conversation.php:1463
+#: ../../Zotlabs/Lib/ThreadItem.php:831
+msgid "Underline"
msgstr ""
-#: ../../include/items.php:4772 ../../Zotlabs/Module/Cover_photo.php:298
-#, php-format
-msgid "%1$s updated her %2$s"
+#: ../../addon/hsse/hsse.php:203 ../../include/conversation.php:1464
+#: ../../Zotlabs/Lib/ThreadItem.php:832
+msgid "Quote"
msgstr ""
-#: ../../include/items.php:4773 ../../Zotlabs/Module/Cover_photo.php:299
-msgid "male"
+#: ../../addon/hsse/hsse.php:204 ../../include/conversation.php:1465
+#: ../../Zotlabs/Lib/ThreadItem.php:833
+msgid "Code"
msgstr ""
-#: ../../include/items.php:4774 ../../Zotlabs/Module/Cover_photo.php:300
-#, php-format
-msgid "%1$s updated his %2$s"
+#: ../../addon/hsse/hsse.php:205 ../../include/conversation.php:1466
+#: ../../Zotlabs/Lib/ThreadItem.php:835
+msgid "Attach/Upload file"
msgstr ""
-#: ../../include/items.php:4776 ../../Zotlabs/Module/Cover_photo.php:302
-#, php-format
-msgid "%1$s updated their %2$s"
+#: ../../addon/hsse/hsse.php:212 ../../include/conversation.php:1473
+msgid "Toggle voting"
msgstr ""
-#: ../../include/items.php:4778
-msgid "profile photo"
+#: ../../addon/hsse/hsse.php:215 ../../include/conversation.php:1480
+msgid "Disable comments"
msgstr ""
-#: ../../include/items.php:4975
-#, php-format
-msgid "[Edited %s]"
+#: ../../addon/hsse/hsse.php:216 ../../include/conversation.php:1481
+msgid "Toggle comments"
msgstr ""
-#: ../../include/items.php:4975
-msgctxt "edit_activity"
-msgid "Post"
+#: ../../addon/hsse/hsse.php:221 ../../addon/cards/Mod_Card_edit.php:118
+#: ../../addon/articles/Mod_Article_edit.php:116
+#: ../../include/conversation.php:1487 ../../Zotlabs/Module/Editblock.php:129
+#: ../../Zotlabs/Module/Photos.php:667 ../../Zotlabs/Module/Photos.php:1039
+msgid "Title (optional)"
msgstr ""
-#: ../../include/items.php:4975
-msgctxt "edit_activity"
-msgid "Comment"
+#: ../../addon/hsse/hsse.php:224 ../../include/conversation.php:1491
+msgid "Categories (optional, comma-separated list)"
msgstr ""
-#: ../../include/cdav.php:157
-msgid "INVALID EVENT DISMISSED!"
+#: ../../addon/hsse/hsse.php:225 ../../include/conversation.php:1492
+msgid "Permission settings"
msgstr ""
-#: ../../include/cdav.php:158
-msgid "Summary: "
+#: ../../addon/hsse/hsse.php:247 ../../include/conversation.php:1514
+msgid "Other networks and post services"
msgstr ""
-#: ../../include/cdav.php:158 ../../include/cdav.php:159
-#: ../../include/cdav.php:167 ../../include/conversation.php:1216
-#: ../../Zotlabs/Lib/Apps.php:1152 ../../Zotlabs/Lib/Apps.php:1236
-#: ../../Zotlabs/Lib/Activity.php:1615 ../../Zotlabs/Module/Embedphotos.php:177
-#: ../../Zotlabs/Module/Photos.php:788 ../../Zotlabs/Module/Photos.php:1245
-#: ../../Zotlabs/Widget/Pinned.php:271 ../../Zotlabs/Widget/Portfolio.php:99
-#: ../../Zotlabs/Widget/Album.php:90
-msgid "Unknown"
+#: ../../addon/hsse/hsse.php:250 ../../include/conversation.php:1517
+msgid "Set expiration date"
msgstr ""
-#: ../../include/cdav.php:159
-msgid "Date: "
+#: ../../addon/hsse/hsse.php:253 ../../include/conversation.php:1520
+msgid "Set publish date"
msgstr ""
-#: ../../include/cdav.php:160 ../../include/cdav.php:168
-msgid "Reason: "
+#: ../../addon/hsse/hsse.php:255 ../../include/conversation.php:1522
+#: ../../Zotlabs/Module/Chat.php:218 ../../Zotlabs/Lib/ThreadItem.php:841
+msgid "Encrypt text"
msgstr ""
-#: ../../include/cdav.php:166
-msgid "INVALID CARD DISMISSED!"
+#: ../../addon/hsse/Mod_Hsse.php:15
+msgid "WYSIWYG status editor"
msgstr ""
-#: ../../include/cdav.php:167
-msgid "Name: "
+#: ../../addon/hsse/Mod_Hsse.php:24
+msgid "WYSIWYG Status App"
msgstr ""
-#: ../../include/account.php:38
-msgid "The provided email address is not valid"
+#: ../../addon/hsse/Mod_Hsse.php:32
+msgid "WYSIWYG Status"
msgstr ""
-#: ../../include/account.php:41
-msgid "The provided email domain is not among those allowed on this site"
+#: ../../addon/openstreetmap/openstreetmap.php:133
+msgid "View Larger"
msgstr ""
-#: ../../include/account.php:48
-msgid "The provided email address is already registered at this site"
+#: ../../addon/openstreetmap/openstreetmap.php:156
+msgid "Tile Server URL"
msgstr ""
-#: ../../include/account.php:55
+#: ../../addon/openstreetmap/openstreetmap.php:156
msgid ""
-"There is a pending registration for this address - click \"Register\" to "
-"continue verification"
+"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
+"target=\"_blank\">public tile servers</a>"
msgstr ""
-#: ../../include/account.php:94
-msgid "An invitation is required."
+#: ../../addon/openstreetmap/openstreetmap.php:157
+msgid "Nominatim (reverse geocoding) Server URL"
msgstr ""
-#: ../../include/account.php:103
-msgid "Invitation could not be verified."
+#: ../../addon/openstreetmap/openstreetmap.php:157
+msgid ""
+"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
+"target=\"_blank\">Nominatim servers</a>"
msgstr ""
-#: ../../include/account.php:191
-msgid "Please enter the required information."
+#: ../../addon/openstreetmap/openstreetmap.php:158
+msgid "Default zoom"
msgstr ""
-#: ../../include/account.php:258 ../../include/account.php:366
-msgid "Failed to store account information."
+#: ../../addon/openstreetmap/openstreetmap.php:158
+msgid ""
+"The default zoom level. (1:world, 18:highest, also depends on tile server)"
msgstr ""
-#: ../../include/account.php:435 ../../include/account.php:503
-#: ../../Zotlabs/Module/Register.php:328
-#, php-format
-msgid "Registration confirmation for %s"
+#: ../../addon/openstreetmap/openstreetmap.php:159
+msgid "Include marker on map"
msgstr ""
-#: ../../include/account.php:578
-#, php-format
-msgid "Registration request at %s"
+#: ../../addon/openstreetmap/openstreetmap.php:159
+msgid "Include a marker on the map."
msgstr ""
-#: ../../include/account.php:600
-msgid "your registration password"
+#: ../../addon/openstreetmap/openstreetmap.php:171
+#: ../../addon/rendezvous/rendezvous.php:82 ../../addon/twitter/twitter.php:493
+#: ../../addon/msgfooter/msgfooter.php:54 ../../addon/diaspora/diaspora.php:105
+#: ../../addon/piwik/piwik.php:116 ../../addon/logrot/logrot.php:54
+#: ../../addon/xmpp/xmpp.php:54 ../../Zotlabs/Module/Settings/Channel.php:150
+#: ../../Zotlabs/Module/Defperms.php:111
+msgid "Settings updated."
msgstr ""
-#: ../../include/account.php:606 ../../include/account.php:695
-#, php-format
-msgid "Registration details for %s"
+#: ../../addon/ijpost/Mod_Ijpost.php:23
+msgid "Insane Journal Crosspost Connector Settings saved."
msgstr ""
-#: ../../include/account.php:706
-msgid "Account approved."
+#: ../../addon/ijpost/Mod_Ijpost.php:35
+msgid "Insane Journal Crosspost Connector App"
msgstr ""
-#: ../../include/account.php:762
-#, php-format
-msgid "Registration revoked for %s"
+#: ../../addon/ijpost/Mod_Ijpost.php:35 ../../addon/xmpp/Mod_Xmpp.php:35
+#: ../../Zotlabs/Module/Lang.php:20 ../../Zotlabs/Module/Invite.php:69
+msgid "Not Installed"
msgstr ""
-#: ../../include/account.php:769
-#, php-format
-msgid "Could not revoke registration for %s"
+#: ../../addon/ijpost/Mod_Ijpost.php:36
+msgid "Relay public postings to Insane Journal"
msgstr ""
-#: ../../include/account.php:1185 ../../include/account.php:1187
-msgid "Click here to upgrade."
+#: ../../addon/ijpost/Mod_Ijpost.php:53
+msgid "InsaneJournal username"
msgstr ""
-#: ../../include/account.php:1193
-msgid "This action exceeds the limits set by your subscription plan."
+#: ../../addon/ijpost/Mod_Ijpost.php:57
+msgid "InsaneJournal password"
msgstr ""
-#: ../../include/account.php:1198
-msgid "This action is not available under your subscription plan."
+#: ../../addon/ijpost/Mod_Ijpost.php:61
+msgid "Post to InsaneJournal by default"
msgstr ""
-#: ../../include/account.php:1258
-msgid "open"
+#: ../../addon/ijpost/Mod_Ijpost.php:69
+msgid "Insane Journal Crosspost Connector"
msgstr ""
-#: ../../include/account.php:1258
-msgid "closed"
+#: ../../addon/ijpost/ijpost.php:44
+msgid "Post to Insane Journal"
msgstr ""
-#: ../../include/account.php:1265
-msgid "Registration is currently"
+#: ../../addon/totp_bak/Mod_Totp.php:32
+msgid "TOTP Two-Step Verification"
msgstr ""
-#: ../../include/account.php:1274
-msgid "please come back"
+#: ../../addon/totp_bak/Mod_Totp.php:33
+msgid "Enter the 2-step verification generated by your authenticator app:"
msgstr ""
-#: ../../include/help.php:81
-msgid "Help:"
+#: ../../addon/totp_bak/Mod_Totp.php:34
+msgid "Success!"
msgstr ""
-#: ../../include/help.php:130
-msgid "Not Found"
+#: ../../addon/totp_bak/Mod_Totp.php:35
+msgid "Invalid code, please try again."
msgstr ""
-#: ../../include/help.php:133 ../../addon/articles/articles.php:105
-#: ../../addon/cards/cards.php:104 ../../addon/wiki/Lib/NativeWikiPage.php:545
-#: ../../Zotlabs/Web/Router.php:186 ../../Zotlabs/Module/Page.php:136
-#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Module/Display.php:149
-msgid "Page not found."
+#: ../../addon/totp_bak/Mod_Totp.php:36
+msgid "Too many invalid codes..."
msgstr ""
-#: ../../include/taxonomy.php:323
-msgid "Trending"
+#: ../../addon/totp_bak/Mod_Totp.php:37 ../../Zotlabs/Module/Totp_check.php:81
+msgid "Verify"
msgstr ""
-#: ../../include/taxonomy.php:323 ../../include/taxonomy.php:462
-#: ../../include/taxonomy.php:483 ../../Zotlabs/Widget/Tagcloud.php:27
-msgid "Tags"
+#: ../../addon/totp_bak/Settings/Totp.php:92
+msgid ""
+"You haven't set a TOTP secret yet.\n"
+"Please click the button below to generate one and register this site\n"
+"with your preferred authenticator app."
msgstr ""
-#: ../../include/taxonomy.php:563
-msgid "Keywords"
+#: ../../addon/totp_bak/Settings/Totp.php:95
+msgid "Your TOTP secret is"
msgstr ""
-#: ../../include/taxonomy.php:584
-msgid "have"
+#: ../../addon/totp_bak/Settings/Totp.php:96
+msgid ""
+"Be sure to save it somewhere in case you lose or replace your mobile "
+"device.\n"
+"Use your mobile device to scan the QR code below to register this site\n"
+"with your preferred authenticator app."
msgstr ""
-#: ../../include/taxonomy.php:584
-msgid "has"
+#: ../../addon/totp_bak/Settings/Totp.php:101
+#: ../../Zotlabs/Module/Settings/Multifactor.php:86
+msgid "Test"
msgstr ""
-#: ../../include/taxonomy.php:585
-msgid "want"
+#: ../../addon/totp_bak/Settings/Totp.php:102
+msgid "Generate New Secret"
msgstr ""
-#: ../../include/taxonomy.php:585
-msgid "wants"
+#: ../../addon/totp_bak/Settings/Totp.php:103
+msgid "Go"
msgstr ""
-#: ../../include/taxonomy.php:586 ../../Zotlabs/Lib/ThreadItem.php:310
-msgid "like"
+#: ../../addon/totp_bak/Settings/Totp.php:104
+msgid "Enter your password"
msgstr ""
-#: ../../include/taxonomy.php:586
-msgid "likes"
+#: ../../addon/totp_bak/Settings/Totp.php:105
+msgid "enter TOTP code from your device"
msgstr ""
-#: ../../include/taxonomy.php:587 ../../Zotlabs/Lib/ThreadItem.php:311
-msgid "dislike"
+#: ../../addon/totp_bak/Settings/Totp.php:106
+msgid "Pass!"
msgstr ""
-#: ../../include/taxonomy.php:587
-msgid "dislikes"
+#: ../../addon/totp_bak/Settings/Totp.php:107
+msgid "Fail"
msgstr ""
-#: ../../include/taxonomy.php:674 ../../include/conversation.php:1762
-#: ../../include/channel.php:1773 ../../Zotlabs/Lib/ThreadItem.php:233
-#: ../../Zotlabs/Module/Photos.php:1128
-msgctxt "noun"
-msgid "Like"
-msgid_plural "Likes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/photos.php:153
-#, php-format
-msgid "Image exceeds website size limit of %lu bytes"
+#: ../../addon/totp_bak/Settings/Totp.php:108
+msgid "Incorrect password, try again."
msgstr ""
-#: ../../include/photos.php:164
-msgid "Image file is empty."
+#: ../../addon/totp_bak/Settings/Totp.php:109
+msgid "Record your new TOTP secret and rescan the QR code above."
msgstr ""
-#: ../../include/photos.php:198 ../../Zotlabs/Module/Cover_photo.php:241
-#: ../../Zotlabs/Module/Profile_photo.php:275
-msgid "Unable to process image"
+#: ../../addon/totp_bak/Settings/Totp.php:117
+msgid "TOTP Settings"
msgstr ""
-#: ../../include/photos.php:324
-msgid "Photo storage failed."
+#: ../../addon/wholikesme/wholikesme.php:29
+msgid "Who likes me?"
msgstr ""
-#: ../../include/photos.php:373
-msgid "a new photo"
+#: ../../addon/qrator/qrator.php:48
+msgid "QR code"
msgstr ""
-#: ../../include/photos.php:377
-#, php-format
-msgctxt "photo_upload"
-msgid "%1$s posted %2$s to %3$s"
+#: ../../addon/qrator/qrator.php:63
+msgid "QR Generator"
msgstr ""
-#: ../../include/photos.php:723 ../../Zotlabs/Module/Photos.php:1338
-#: ../../Zotlabs/Module/Photos.php:1351 ../../Zotlabs/Module/Photos.php:1352
-msgid "Recent Photos"
+#: ../../addon/qrator/qrator.php:64
+msgid "Enter some text"
msgstr ""
-#: ../../include/photos.php:727
-msgid "Upload New Photos"
+#: ../../addon/pubcrawl/as.php:1332 ../../addon/pubcrawl/as.php:2002
+#: ../../include/network.php:1770 ../../Zotlabs/Lib/Activity.php:3649
+msgid "ActivityPub"
msgstr ""
-#: ../../include/security.php:630
-msgid ""
-"The form security token was not correct. This probably happened because the "
-"form has been opened for too long (>3 hours) before submitting it."
+#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1647
+#: ../../Zotlabs/Module/Like.php:445 ../../Zotlabs/Module/Subthread.php:115
+msgid "status"
msgstr ""
-#: ../../include/bbcode.php:233 ../../include/bbcode.php:937
-#: ../../include/bbcode.php:1558 ../../include/bbcode.php:1566
-msgid "Image/photo"
+#: ../../addon/pubcrawl/as.php:1993 ../../addon/diaspora/Receiver.php:1591
+#: ../../include/conversation.php:184 ../../Zotlabs/Module/Like.php:477
+#: ../../Zotlabs/Lib/Activity.php:3640
+#, php-format
+msgid "%1$s likes %2$s's %3$s"
msgstr ""
-#: ../../include/bbcode.php:280 ../../include/bbcode.php:1583
-msgid "Encrypted content"
+#: ../../addon/pubcrawl/as.php:1995 ../../include/conversation.php:187
+#: ../../Zotlabs/Module/Like.php:479 ../../Zotlabs/Lib/Activity.php:3642
+#, php-format
+msgid "%1$s doesn't like %2$s's %3$s"
msgstr ""
-#: ../../include/bbcode.php:334
-#, php-format
-msgid "Install %1$s element %2$s"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:25
+msgid "ActivityPub Protocol Settings updated."
msgstr ""
-#: ../../include/bbcode.php:338
-#, php-format
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:41
msgid ""
-"This post contains an installable %s element, however you lack permissions "
-"to install it on this site."
+"The activitypub protocol does not support location independence. Connections "
+"you make within that network may be unreachable from alternate channel "
+"locations."
msgstr ""
-#: ../../include/bbcode.php:348 ../../Zotlabs/Module/Impel.php:47
-msgid "webpage"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
+msgid "Deliver to ActivityPub recipients in privacy groups"
msgstr ""
-#: ../../include/bbcode.php:351 ../../Zotlabs/Module/Impel.php:57
-msgid "layout"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
+msgid ""
+"May result in a large number of mentions and expose all the members of your "
+"privacy group"
msgstr ""
-#: ../../include/bbcode.php:354 ../../Zotlabs/Module/Impel.php:52
-msgid "block"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
+msgid "Send multi-media HTML articles"
msgstr ""
-#: ../../include/bbcode.php:357 ../../Zotlabs/Module/Impel.php:64
-msgid "menu"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
+msgid "Not supported by some microblog services such as Mastodon"
msgstr ""
-#: ../../include/bbcode.php:560
-msgid "card"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:59
+msgid "Activitypub Protocol"
msgstr ""
-#: ../../include/bbcode.php:562
-msgid "article"
+#: ../../addon/fediwordle/fediwordle.php:211
+msgid "ERROR: word length is not correct!"
msgstr ""
-#: ../../include/bbcode.php:645 ../../include/bbcode.php:653
-msgid "Click to open/close"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:22
+msgid "Fediwordle App"
msgstr ""
-#: ../../include/bbcode.php:666
-msgid "View article"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:23
+msgid "A distributed word game inspired by wordle."
msgstr ""
-#: ../../include/bbcode.php:666
-msgid "View summary"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:24
+msgid ""
+"To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel "
+"post."
msgstr ""
-#: ../../include/bbcode.php:1059 ../../include/bbcode.php:1244
-#: ../../addon/wiki/Lib/NativeWikiPage.php:630
-msgid "Different viewers will see this text differently"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:25
+msgid "Your contacts can post their guess in the comments."
msgstr ""
-#: ../../include/bbcode.php:1534
-msgid "$1 wrote:"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:26
+msgid ""
+"Your channel will evaluate the guess and automatically post the response."
msgstr ""
-#: ../../include/menu.php:120 ../../include/channel.php:1530
-#: ../../include/channel.php:1534 ../../addon/articles/Mod_Article_edit.php:97
-#: ../../addon/articles/articles.php:75 ../../addon/cards/cards.php:74
-#: ../../addon/cards/Mod_Card_edit.php:99 ../../addon/wiki/Mod_Wiki.php:214
-#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:601
-#: ../../Zotlabs/Lib/ThreadItem.php:158 ../../Zotlabs/Module/Oauth2.php:192
-#: ../../Zotlabs/Module/Layouts.php:191 ../../Zotlabs/Module/Blocks.php:158
-#: ../../Zotlabs/Module/Connections.php:332
-#: ../../Zotlabs/Module/Connections.php:381
-#: ../../Zotlabs/Module/Connections.php:402
-#: ../../Zotlabs/Module/Editlayout.php:114 ../../Zotlabs/Module/Oauth.php:171
-#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Admin/Profs.php:175
-#: ../../Zotlabs/Module/Webpages.php:250 ../../Zotlabs/Module/Thing.php:268
-#: ../../Zotlabs/Module/Editblock.php:114 ../../Zotlabs/Module/Group.php:245
-#: ../../Zotlabs/Module/Editwebpage.php:142 ../../Zotlabs/Widget/Cdav.php:144
-#: ../../Zotlabs/Widget/Cdav.php:181
-msgid "Edit"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:28
+msgid "Correct letters"
msgstr ""
-#: ../../include/attach.php:273 ../../include/attach.php:324
-#: ../../include/attach.php:419
-msgid "Item was not found."
+#: ../../addon/fediwordle/Mod_Fediwordle.php:29
+msgid "Letters contained in the word but at the wrong spot"
msgstr ""
-#: ../../include/attach.php:290
-msgid "Unknown error."
+#: ../../addon/fediwordle/Mod_Fediwordle.php:30
+msgid "Letters not contained in the word"
msgstr ""
-#: ../../include/attach.php:614
-msgid "No source file."
+#: ../../addon/ldapauth/ldapauth.php:101
+msgid "An account has been created for you."
msgstr ""
-#: ../../include/attach.php:636
-msgid "Cannot locate file to replace"
+#: ../../addon/ldapauth/ldapauth.php:108
+msgid "Authentication successful but rejected: account creation is disabled."
msgstr ""
-#: ../../include/attach.php:655
-msgid "Cannot locate file to revise/update"
+#: ../../addon/dwpost/Mod_Dwpost.php:26
+msgid "Dreamwidth Crosspost Connector Settings saved."
msgstr ""
-#: ../../include/attach.php:801
-#, php-format
-msgid "File exceeds size limit of %d"
+#: ../../addon/dwpost/Mod_Dwpost.php:51
+msgid "Dreamwidth username"
msgstr ""
-#: ../../include/attach.php:822
-#, php-format
-msgid "You have reached your limit of %1$.0f Mbytes attachment storage."
+#: ../../addon/dwpost/Mod_Dwpost.php:55
+msgid "Dreamwidth password"
msgstr ""
-#: ../../include/attach.php:1011
-msgid "File upload failed. Possible system limit or action terminated."
+#: ../../addon/dwpost/Mod_Dwpost.php:59
+msgid "Post to Dreamwidth by default"
msgstr ""
-#: ../../include/attach.php:1040
-msgid "Stored file could not be verified. Upload failed."
+#: ../../addon/dwpost/Mod_Dwpost.php:75
+msgid "Dreamwidth Crosspost Connector"
msgstr ""
-#: ../../include/attach.php:1112 ../../include/attach.php:1128
-msgid "Path not available."
+#: ../../addon/dwpost/dwpost.php:49
+msgid "Post to Dreamwidth"
msgstr ""
-#: ../../include/attach.php:1176 ../../include/attach.php:1341
-msgid "Empty pathname"
+#: ../../addon/morepokes/morepokes.php:19
+msgid "bitchslap"
msgstr ""
-#: ../../include/attach.php:1202
-msgid "duplicate filename or path"
+#: ../../addon/morepokes/morepokes.php:19
+msgid "bitchslapped"
msgstr ""
-#: ../../include/attach.php:1230
-msgid "Path not found."
+#: ../../addon/morepokes/morepokes.php:20
+msgid "shag"
msgstr ""
-#: ../../include/attach.php:1297
-msgid "mkdir failed."
+#: ../../addon/morepokes/morepokes.php:20
+msgid "shagged"
msgstr ""
-#: ../../include/attach.php:1301
-msgid "database storage failed."
+#: ../../addon/morepokes/morepokes.php:21
+msgid "patent"
msgstr ""
-#: ../../include/attach.php:1347
-msgid "Empty path"
+#: ../../addon/morepokes/morepokes.php:21
+msgid "patented"
msgstr ""
-#: ../../include/attach.php:2122
-#, php-format
-msgid "%s shared an %s with you"
+#: ../../addon/morepokes/morepokes.php:22
+msgid "hug"
msgstr ""
-#: ../../include/attach.php:2122
-#, php-format
-msgid "%s shared a %s with you"
+#: ../../addon/morepokes/morepokes.php:22
+msgid "hugged"
msgstr ""
-#: ../../include/attach.php:2122
-msgid "image"
+#: ../../addon/morepokes/morepokes.php:23
+msgid "murder"
msgstr ""
-#: ../../include/attach.php:2122 ../../addon/redfiles/redfilehelper.php:64
-msgid "file"
+#: ../../addon/morepokes/morepokes.php:23
+msgid "murdered"
msgstr ""
-#: ../../include/auth.php:195
-msgid "Delegation session ended."
+#: ../../addon/morepokes/morepokes.php:24
+msgid "worship"
msgstr ""
-#: ../../include/auth.php:199
-msgid "Logged out."
+#: ../../addon/morepokes/morepokes.php:24
+msgid "worshipped"
msgstr ""
-#: ../../include/auth.php:298
-msgid "Email validation is incomplete. Please check your email."
+#: ../../addon/morepokes/morepokes.php:25
+msgid "kiss"
msgstr ""
-#: ../../include/auth.php:314
-msgid "Failed authentication"
+#: ../../addon/morepokes/morepokes.php:25
+msgid "kissed"
msgstr ""
-#: ../../include/auth.php:324 ../../addon/openid/Mod_Openid.php:189
-msgid "Login failed."
+#: ../../addon/morepokes/morepokes.php:26
+msgid "tempt"
msgstr ""
-#: ../../include/zid.php:410
-#, php-format
-msgid "OpenWebAuth: %1$s welcomes %2$s"
+#: ../../addon/morepokes/morepokes.php:26
+msgid "tempted"
msgstr ""
-#: ../../include/activities.php:42
-msgid " and "
+#: ../../addon/morepokes/morepokes.php:27
+msgid "raise eyebrows at"
msgstr ""
-#: ../../include/activities.php:50
-msgid "public profile"
+#: ../../addon/morepokes/morepokes.php:27
+msgid "raised their eyebrows at"
msgstr ""
-#: ../../include/activities.php:59
-#, php-format
-msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
+#: ../../addon/morepokes/morepokes.php:28
+msgid "insult"
msgstr ""
-#: ../../include/activities.php:60
-#, php-format
-msgid "Visit %1$s's %2$s"
+#: ../../addon/morepokes/morepokes.php:28
+msgid "insulted"
msgstr ""
-#: ../../include/activities.php:63
-#, php-format
-msgid "%1$s has an updated %2$s, changing %3$s."
+#: ../../addon/morepokes/morepokes.php:29
+msgid "praise"
msgstr ""
-#: ../../include/acl_selectors.php:33
-#: ../../Zotlabs/Lib/PermissionDescription.php:34
-msgid "Visible to your default audience"
+#: ../../addon/morepokes/morepokes.php:29
+msgid "praised"
msgstr ""
-#: ../../include/acl_selectors.php:100
-msgid "Profile-Based Privacy Groups"
+#: ../../addon/morepokes/morepokes.php:30
+msgid "be dubious of"
msgstr ""
-#: ../../include/acl_selectors.php:119
-msgid "Private Forum"
+#: ../../addon/morepokes/morepokes.php:30
+msgid "was dubious of"
msgstr ""
-#: ../../include/acl_selectors.php:125
-#: ../../Zotlabs/Widget/Notifications.php:131
-#: ../../Zotlabs/Widget/Notifications.php:132
-#: ../../Zotlabs/Widget/Activity_filter.php:130
-#: ../../Zotlabs/Widget/Forums.php:77
-msgid "Forums"
+#: ../../addon/morepokes/morepokes.php:31
+msgid "eat"
msgstr ""
-#: ../../include/acl_selectors.php:136
-#: ../../Zotlabs/Lib/PermissionDescription.php:107
-#: ../../Zotlabs/Module/Settings/Privacy.php:56
-msgid "Only me"
+#: ../../addon/morepokes/morepokes.php:31
+msgid "ate"
msgstr ""
-#: ../../include/acl_selectors.php:143
-msgid "Share with"
+#: ../../addon/morepokes/morepokes.php:32
+msgid "giggle and fawn at"
msgstr ""
-#: ../../include/acl_selectors.php:144
-msgid "Custom selection"
+#: ../../addon/morepokes/morepokes.php:32
+msgid "giggled and fawned at"
msgstr ""
-#: ../../include/acl_selectors.php:146
-msgid ""
-"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and "
-"limit the scope of \"Allow\"."
+#: ../../addon/morepokes/morepokes.php:33
+msgid "doubt"
msgstr ""
-#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32
-msgid "Allow"
+#: ../../addon/morepokes/morepokes.php:33
+msgid "doubted"
msgstr ""
-#: ../../include/acl_selectors.php:148
-msgid "Don't allow"
+#: ../../addon/morepokes/morepokes.php:34
+msgid "glare"
msgstr ""
-#: ../../include/acl_selectors.php:154
-#: ../../addon/flashcards/Mod_Flashcards.php:261
-#: ../../Zotlabs/Module/Chat.php:240 ../../Zotlabs/Module/Filestorage.php:195
-#: ../../Zotlabs/Module/Thing.php:321 ../../Zotlabs/Module/Thing.php:374
-#: ../../Zotlabs/Module/Photos.php:671 ../../Zotlabs/Module/Photos.php:1042
-msgid "Permissions"
+#: ../../addon/morepokes/morepokes.php:34
+msgid "glared at"
msgstr ""
-#: ../../include/acl_selectors.php:156
-#: ../../addon/channelreputation/channelreputation.php:233
-#: ../../Zotlabs/Lib/ThreadItem.php:496 ../../Zotlabs/Module/Photos.php:1265
-#: ../../Zotlabs/Widget/Pinned.php:161 ../../Zotlabs/Storage/Browser.php:414
-msgid "Close"
+#: ../../addon/morepokes/morepokes.php:35
+msgid "fuck"
msgstr ""
-#: ../../include/acl_selectors.php:181
-#, php-format
-msgid ""
-"Post permissions %s cannot be changed %s after a post is shared.</br />These "
-"permissions set who is allowed to view the post."
+#: ../../addon/morepokes/morepokes.php:35
+msgid "fucked"
msgstr ""
-#: ../../include/network.php:412
-msgid "url: "
+#: ../../addon/morepokes/morepokes.php:36
+msgid "bonk"
msgstr ""
-#: ../../include/network.php:413
-msgid "error_code: "
+#: ../../addon/morepokes/morepokes.php:36
+msgid "bonked"
msgstr ""
-#: ../../include/network.php:414
-msgid "error_string: "
+#: ../../addon/morepokes/morepokes.php:37
+msgid "declare undying love for"
msgstr ""
-#: ../../include/network.php:415
-msgid "content-type: "
+#: ../../addon/morepokes/morepokes.php:37
+msgid "declared undying love for"
msgstr ""
-#: ../../include/network.php:1765 ../../include/network.php:1766
-msgid "Friendica"
+#: ../../addon/rendezvous/rendezvous.php:57
+msgid "Errors encountered deleting database table "
msgstr ""
-#: ../../include/network.php:1767
-msgid "OStatus"
+#: ../../addon/rendezvous/rendezvous.php:95 ../../addon/twitter/twitter.php:502
+msgid "Submit Settings"
msgstr ""
-#: ../../include/network.php:1768
-msgid "GNU-Social"
+#: ../../addon/rendezvous/rendezvous.php:96
+msgid "Drop tables when uninstalling?"
msgstr ""
-#: ../../include/network.php:1769
-msgid "RSS/Atom"
+#: ../../addon/rendezvous/rendezvous.php:96
+msgid ""
+"If checked, the Rendezvous database tables will be deleted when the plugin "
+"is uninstalled."
msgstr ""
-#: ../../include/network.php:1770 ../../addon/pubcrawl/as.php:1332
-#: ../../addon/pubcrawl/as.php:2002 ../../Zotlabs/Lib/Activity.php:3605
-msgid "ActivityPub"
+#: ../../addon/rendezvous/rendezvous.php:97
+msgid "Mapbox Access Token"
msgstr ""
-#: ../../include/network.php:1771 ../../addon/redred/Mod_Redred.php:69
-#: ../../addon/openid/MysqlProvider.php:56
-#: ../../addon/openid/MysqlProvider.php:57 ../../addon/rtof/Mod_Rtof.php:55
-#: ../../Zotlabs/Module/Connedit.php:736
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
-#: ../../Zotlabs/Module/Admin/Accounts.php:330
-#: ../../Zotlabs/Module/Cdav.php:1378
-msgid "Email"
+#: ../../addon/rendezvous/rendezvous.php:97
+msgid ""
+"If you enter a Mapbox access token, it will be used to retrieve map tiles "
+"from Mapbox instead of the default OpenStreetMap tile server."
msgstr ""
-#: ../../include/network.php:1772
-msgid "Diaspora"
+#: ../../addon/rendezvous/rendezvous.php:162
+msgid "Rendezvous"
msgstr ""
-#: ../../include/network.php:1773
-msgid "Facebook"
+#: ../../addon/rendezvous/rendezvous.php:167
+msgid ""
+"This identity has been deleted by another member due to inactivity. Please "
+"press the \"New identity\" button or refresh the page to register a new "
+"identity. You may use the same name."
msgstr ""
-#: ../../include/network.php:1774
-msgid "Zot"
+#: ../../addon/rendezvous/rendezvous.php:168
+msgid "Welcome to Rendezvous!"
msgstr ""
-#: ../../include/network.php:1775
-msgid "LinkedIn"
+#: ../../addon/rendezvous/rendezvous.php:169
+msgid ""
+"Enter your name to join this rendezvous. To begin sharing your location with "
+"the other members, tap the GPS control. When your location is discovered, a "
+"red dot will appear and others will be able to see you on the map."
msgstr ""
-#: ../../include/network.php:1776
-msgid "XMPP/IM"
+#: ../../addon/rendezvous/rendezvous.php:171
+msgid "Let's meet here"
msgstr ""
-#: ../../include/network.php:1777
-msgid "MySpace"
+#: ../../addon/rendezvous/rendezvous.php:173
+#: ../../addon/cart/submodules/hzservices.php:657
+#: ../../addon/cart/submodules/manualcat.php:260
+#: ../../Zotlabs/Module/Cdav.php:1005 ../../Zotlabs/Module/Appman.php:210
+#: ../../Zotlabs/Module/Rbmark.php:100
+msgid "Description"
msgstr ""
-#: ../../include/conversation.php:138 ../../include/text.php:2342
-#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1647
-#: ../../addon/redphotos/redphotohelper.php:71
-#: ../../Zotlabs/Lib/Activity.php:3563 ../../Zotlabs/Module/Like.php:445
-#: ../../Zotlabs/Module/Subthread.php:115 ../../Zotlabs/Module/Tagger.php:71
-msgid "photo"
+#: ../../addon/rendezvous/rendezvous.php:174
+msgid "New marker"
msgstr ""
-#: ../../include/conversation.php:145 ../../Zotlabs/Module/Like.php:184
-msgid "channel"
+#: ../../addon/rendezvous/rendezvous.php:175
+msgid "Edit marker"
msgstr ""
-#: ../../include/conversation.php:170 ../../include/text.php:2350
-#: ../../Zotlabs/Module/Tagger.php:81
-msgid "comment"
+#: ../../addon/rendezvous/rendezvous.php:176
+msgid "New identity"
msgstr ""
-#: ../../include/conversation.php:184 ../../addon/pubcrawl/as.php:1993
-#: ../../addon/diaspora/Receiver.php:1591 ../../Zotlabs/Lib/Activity.php:3596
-#: ../../Zotlabs/Module/Like.php:477
-#, php-format
-msgid "%1$s likes %2$s's %3$s"
+#: ../../addon/rendezvous/rendezvous.php:177
+msgid "Delete marker"
msgstr ""
-#: ../../include/conversation.php:187 ../../addon/pubcrawl/as.php:1995
-#: ../../Zotlabs/Lib/Activity.php:3598 ../../Zotlabs/Module/Like.php:479
-#, php-format
-msgid "%1$s doesn't like %2$s's %3$s"
+#: ../../addon/rendezvous/rendezvous.php:178
+msgid "Delete member"
msgstr ""
-#: ../../include/conversation.php:193
-#, php-format
-msgid "likes %1$s's %2$s"
+#: ../../addon/rendezvous/rendezvous.php:179
+msgid "Edit proximity alert"
msgstr ""
-#: ../../include/conversation.php:196
-#, php-format
-msgid "doesn't like %1$s's %2$s"
+#: ../../addon/rendezvous/rendezvous.php:180
+msgid ""
+"A proximity alert will be issued when this member is within a certain radius "
+"of you.<br><br>Enter a radius in meters (0 to disable):"
msgstr ""
-#: ../../include/conversation.php:236 ../../include/conversation.php:238
-#, php-format
-msgid "%1$s is now connected with %2$s"
+#: ../../addon/rendezvous/rendezvous.php:180
+#: ../../addon/rendezvous/rendezvous.php:185
+msgid "distance"
msgstr ""
-#: ../../include/conversation.php:273
-#, php-format
-msgid "%1$s poked %2$s"
+#: ../../addon/rendezvous/rendezvous.php:181
+msgid "Proximity alert distance (meters)"
msgstr ""
-#: ../../include/conversation.php:277 ../../include/text.php:1260
-msgid "poked"
+#: ../../addon/rendezvous/rendezvous.php:182
+#: ../../addon/rendezvous/rendezvous.php:184
+msgid ""
+"A proximity alert will be issued when you are within a certain radius of the "
+"marker location.<br><br>Enter a radius in meters (0 to disable):"
msgstr ""
-#: ../../include/conversation.php:296 ../../Zotlabs/Module/Mood.php:76
-#, php-format
-msgctxt "mood"
-msgid "%1$s is %2$s"
+#: ../../addon/rendezvous/rendezvous.php:183
+msgid "Marker proximity alert"
msgstr ""
-#: ../../include/conversation.php:526 ../../Zotlabs/Lib/ThreadItem.php:501
-msgid "This is an unsaved preview"
+#: ../../addon/rendezvous/rendezvous.php:186
+msgid "Reminder note"
msgstr ""
-#: ../../include/conversation.php:658 ../../Zotlabs/Module/Photos.php:1108
-msgctxt "title"
-msgid "Likes"
+#: ../../addon/rendezvous/rendezvous.php:187
+msgid ""
+"Enter a note to be displayed when you are within the specified proximity..."
msgstr ""
-#: ../../include/conversation.php:659 ../../Zotlabs/Module/Photos.php:1108
-msgctxt "title"
-msgid "Dislikes"
+#: ../../addon/rendezvous/rendezvous.php:199
+msgid "Add new rendezvous"
msgstr ""
-#: ../../include/conversation.php:660 ../../Zotlabs/Module/Photos.php:1109
-#: ../../Zotlabs/Widget/Pinned.php:80
-msgctxt "title"
-msgid "Agree"
+#: ../../addon/rendezvous/rendezvous.php:200
+msgid ""
+"Create a new rendezvous and share the access link with those you wish to "
+"invite to the group. Those who open the link become members of the "
+"rendezvous. They can view other member locations, add markers to the map, or "
+"share their own locations with the group."
msgstr ""
-#: ../../include/conversation.php:661 ../../Zotlabs/Module/Photos.php:1109
-#: ../../Zotlabs/Widget/Pinned.php:81
-msgctxt "title"
-msgid "Disagree"
+#: ../../addon/rendezvous/rendezvous.php:232
+msgid "You have no rendezvous. Press the button above to create a rendezvous!"
msgstr ""
-#: ../../include/conversation.php:662 ../../Zotlabs/Module/Photos.php:1109
-#: ../../Zotlabs/Widget/Pinned.php:82
-msgctxt "title"
-msgid "Abstain"
+#: ../../addon/rendezvous/rendezvous.php:401 ../../Zotlabs/Module/Setup.php:730
+msgid "Errors encountered creating database tables."
msgstr ""
-#: ../../include/conversation.php:663 ../../Zotlabs/Module/Photos.php:1110
-#: ../../Zotlabs/Widget/Pinned.php:69
-msgctxt "title"
-msgid "Attending"
+#: ../../addon/startpage/Mod_Startpage.php:60
+msgid "Page to load after login"
msgstr ""
-#: ../../include/conversation.php:664 ../../Zotlabs/Module/Photos.php:1110
-#: ../../Zotlabs/Widget/Pinned.php:70
-msgctxt "title"
-msgid "Not attending"
+#: ../../addon/startpage/Mod_Startpage.php:60
+msgid ""
+"Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy "
+"collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave "
+"blank for default network page (grid)."
msgstr ""
-#: ../../include/conversation.php:665 ../../Zotlabs/Module/Photos.php:1110
-#: ../../Zotlabs/Widget/Pinned.php:71
-msgctxt "title"
-msgid "Might attend"
+#: ../../addon/startpage/Mod_Startpage.php:68
+msgid "Startpage"
msgstr ""
-#: ../../include/conversation.php:735
-msgid "Select"
+#: ../../addon/upgrade_info/upgrade_info.php:48
+msgid "Your channel has been upgraded to $Projectname version"
msgstr ""
-#: ../../include/conversation.php:736 ../../include/conversation.php:799
-#: ../../addon/articles/Mod_Article_edit.php:128
-#: ../../addon/cards/Mod_Card_edit.php:130 ../../Zotlabs/Lib/Apps.php:602
-#: ../../Zotlabs/Lib/ThreadItem.php:179 ../../Zotlabs/Module/Oauth2.php:193
-#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Editlayout.php:138
-#: ../../Zotlabs/Module/Oauth.php:172 ../../Zotlabs/Module/Permcats.php:261
-#: ../../Zotlabs/Module/Tokens.php:295 ../../Zotlabs/Module/Connedit.php:540
-#: ../../Zotlabs/Module/Connedit.php:749
-#: ../../Zotlabs/Module/Admin/Channels.php:149
-#: ../../Zotlabs/Module/Admin/Accounts.php:320
-#: ../../Zotlabs/Module/Admin/Profs.php:176
-#: ../../Zotlabs/Module/Contactedit.php:667 ../../Zotlabs/Module/Cdav.php:1057
-#: ../../Zotlabs/Module/Cdav.php:1391 ../../Zotlabs/Module/Webpages.php:252
-#: ../../Zotlabs/Module/Thing.php:269 ../../Zotlabs/Module/Editblock.php:139
-#: ../../Zotlabs/Module/Group.php:251 ../../Zotlabs/Module/Photos.php:1171
-#: ../../Zotlabs/Module/Editwebpage.php:167
-#: ../../Zotlabs/Storage/Browser.php:387
-msgid "Delete"
+#: ../../addon/upgrade_info/upgrade_info.php:50
+msgid "Please have a look at the"
msgstr ""
-#: ../../include/conversation.php:742 ../../Zotlabs/Lib/ThreadItem.php:263
-msgid "Toggle Star Status"
+#: ../../addon/upgrade_info/upgrade_info.php:52
+msgid "git history"
msgstr ""
-#: ../../include/conversation.php:748
-msgid "Private Message"
+#: ../../addon/upgrade_info/upgrade_info.php:54
+msgid "change log"
msgstr ""
-#: ../../include/conversation.php:757 ../../Zotlabs/Lib/ThreadItem.php:273
-#: ../../Zotlabs/Widget/Pinned.php:91
-msgid "Message signature validated"
+#: ../../addon/upgrade_info/upgrade_info.php:55
+msgid "for further info."
msgstr ""
-#: ../../include/conversation.php:758 ../../Zotlabs/Lib/ThreadItem.php:274
-#: ../../Zotlabs/Widget/Pinned.php:92
-msgid "Message signature incorrect"
+#: ../../addon/upgrade_info/upgrade_info.php:60
+msgid "Upgrade Info"
msgstr ""
-#: ../../include/conversation.php:798 ../../Zotlabs/Module/Connections.php:352
-#: ../../Zotlabs/Module/Connections.php:403
-#: ../../Zotlabs/Module/Admin/Accounts.php:318
-msgid "Approve"
+#: ../../addon/upgrade_info/upgrade_info.php:64
+msgid "Do not show this again"
msgstr ""
-#: ../../include/conversation.php:804
-#, php-format
-msgid "View %s's profile @ %s"
+#: ../../addon/twitter/Mod_Twitter.php:65
+msgid "Twitter settings updated."
msgstr ""
-#: ../../include/conversation.php:825
-msgid "Categories:"
+#: ../../addon/twitter/Mod_Twitter.php:101
+msgid ""
+"No consumer key pair for Twitter found. Please contact your site "
+"administrator."
msgstr ""
-#: ../../include/conversation.php:826
-msgid "Filed under:"
+#: ../../addon/twitter/Mod_Twitter.php:123
+msgid ""
+"At this Hubzilla instance the Twitter plugin was enabled but you have not "
+"yet connected your account to your Twitter account. To do so click the "
+"button below to get a PIN from Twitter which you have to copy into the input "
+"box below and submit the form. Only your <strong>public</strong> posts will "
+"be posted to Twitter."
msgstr ""
-#: ../../include/conversation.php:832 ../../Zotlabs/Lib/ThreadItem.php:430
-#: ../../Zotlabs/Widget/Pinned.php:135
-#, php-format
-msgid "from %s"
+#: ../../addon/twitter/Mod_Twitter.php:125
+msgid "Log in with Twitter"
msgstr ""
-#: ../../include/conversation.php:835 ../../Zotlabs/Lib/ThreadItem.php:433
-#: ../../Zotlabs/Widget/Pinned.php:138
-#, php-format
-msgid "last edited: %s"
+#: ../../addon/twitter/Mod_Twitter.php:128
+msgid "Copy the PIN from Twitter here"
msgstr ""
-#: ../../include/conversation.php:836 ../../Zotlabs/Lib/ThreadItem.php:434
-#: ../../Zotlabs/Widget/Pinned.php:139
-#, php-format
-msgid "Expires: %s"
+#: ../../addon/twitter/Mod_Twitter.php:150
+msgid ""
+"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile "
+"details from unknown viewers?</em>) the link potentially included in public "
+"postings relayed to Twitter will lead the visitor to a blank page informing "
+"the visitor that the access to your profile has been restricted."
msgstr ""
-#: ../../include/conversation.php:851 ../../addon/articles/articles.php:83
-#: ../../addon/cards/cards.php:82
-msgid "View in context"
+#: ../../addon/twitter/Mod_Twitter.php:155
+msgid "Twitter post length"
msgstr ""
-#: ../../include/conversation.php:853 ../../Zotlabs/Lib/ThreadItem.php:502
-#: ../../Zotlabs/Module/Photos.php:1074
-msgid "Please wait"
+#: ../../addon/twitter/Mod_Twitter.php:155
+msgid "Maximum tweet length"
msgstr ""
-#: ../../include/conversation.php:954
-msgid "remove"
+#: ../../addon/twitter/Mod_Twitter.php:160
+msgid "Send public postings to Twitter by default"
msgstr ""
-#: ../../include/conversation.php:958
-msgid "Loading..."
+#: ../../addon/twitter/Mod_Twitter.php:160
+msgid ""
+"If enabled your public postings will be posted to the associated Twitter "
+"account by default"
msgstr ""
-#: ../../include/conversation.php:959 ../../Zotlabs/Lib/ThreadItem.php:290
-msgid "Conversation Features"
+#: ../../addon/twitter/Mod_Twitter.php:179
+msgid "Twitter Crosspost Connector"
msgstr ""
-#: ../../include/conversation.php:960
-msgid "Delete Selected Items"
+#: ../../addon/twitter/twitter.php:109
+msgid "Post to Twitter"
msgstr ""
-#: ../../include/conversation.php:996
-msgid "View Source"
+#: ../../addon/pumpio/pumpio.php:152
+msgid "You are now authenticated to pumpio."
msgstr ""
-#: ../../include/conversation.php:1006
-msgid "Follow Thread"
+#: ../../addon/pumpio/pumpio.php:153
+msgid "return to the featured settings page"
msgstr ""
-#: ../../include/conversation.php:1015
-msgid "Unfollow Thread"
+#: ../../addon/pumpio/pumpio.php:168
+msgid "Post to Pump.io"
msgstr ""
-#: ../../include/conversation.php:1107 ../../Zotlabs/Module/Connedit.php:501
-msgid "Recent Activity"
+#: ../../addon/pumpio/Mod_Pumpio.php:40
+msgid "Pump.io Settings saved."
msgstr ""
-#: ../../include/conversation.php:1131
-msgid "Edit Connection"
+#: ../../addon/pumpio/Mod_Pumpio.php:71
+msgid "Pump.io servername"
msgstr ""
-#: ../../include/conversation.php:1143 ../../Zotlabs/Lib/Apps.php:356
-#: ../../Zotlabs/Module/Poke.php:181 ../../Zotlabs/Module/Poke.php:185
-msgid "Poke"
+#: ../../addon/pumpio/Mod_Pumpio.php:71
+msgid "Without \"http://\" or \"https://\""
msgstr ""
-#: ../../include/conversation.php:1267
-#, php-format
-msgid "%s likes this."
+#: ../../addon/pumpio/Mod_Pumpio.php:75
+msgid "Pump.io username"
msgstr ""
-#: ../../include/conversation.php:1267
-#, php-format
-msgid "%s doesn't like this."
+#: ../../addon/pumpio/Mod_Pumpio.php:75
+msgid "Without the servername"
msgstr ""
-#: ../../include/conversation.php:1271
-#, php-format
-msgid "<span %1$s>%2$d people</span> like this."
-msgid_plural "<span %1$s>%2$d people</span> like this."
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1273
-#, php-format
-msgid "<span %1$s>%2$d people</span> don't like this."
-msgid_plural "<span %1$s>%2$d people</span> don't like this."
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1279
-msgid "and"
+#: ../../addon/pumpio/Mod_Pumpio.php:86
+msgid "You are not authenticated to pumpio"
msgstr ""
-#: ../../include/conversation.php:1282
-#, php-format
-msgid ", and %d other people"
-msgid_plural ", and %d other people"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1283
-#, php-format
-msgid "%s like this."
+#: ../../addon/pumpio/Mod_Pumpio.php:88
+msgid "(Re-)Authenticate your pump.io connection"
msgstr ""
-#: ../../include/conversation.php:1283
-#, php-format
-msgid "%s don't like this."
+#: ../../addon/pumpio/Mod_Pumpio.php:92
+msgid "Post to pump.io by default"
msgstr ""
-#: ../../include/conversation.php:1334 ../../addon/hsse/hsse.php:82
-msgid "Set your location"
+#: ../../addon/pumpio/Mod_Pumpio.php:96
+msgid "Should posts be public"
msgstr ""
-#: ../../include/conversation.php:1335 ../../addon/hsse/hsse.php:83
-msgid "Clear browser location"
+#: ../../addon/pumpio/Mod_Pumpio.php:100
+msgid "Mirror all public posts"
msgstr ""
-#: ../../include/conversation.php:1347 ../../addon/hsse/hsse.php:95
-#: ../../addon/articles/Mod_Article_edit.php:99
-#: ../../addon/cards/Mod_Card_edit.php:101 ../../Zotlabs/Module/Chat.php:219
-#: ../../Zotlabs/Module/Editblock.php:116
-#: ../../Zotlabs/Module/Editwebpage.php:143
-msgid "Insert web link"
+#: ../../addon/pumpio/Mod_Pumpio.php:110
+msgid "Pump.io Crosspost Connector"
msgstr ""
-#: ../../include/conversation.php:1351 ../../addon/hsse/hsse.php:99
-msgid "Embed (existing) photo from your photo albums"
+#: ../../addon/gravatar/gravatar.php:123
+msgid "generic profile image"
msgstr ""
-#: ../../include/conversation.php:1384 ../../addon/hsse/hsse.php:134
-#: ../../Zotlabs/Module/Chat.php:217
-msgid "Please enter a link URL:"
+#: ../../addon/gravatar/gravatar.php:124
+msgid "random geometric pattern"
msgstr ""
-#: ../../include/conversation.php:1385 ../../addon/hsse/hsse.php:135
-msgid "Tag term:"
+#: ../../addon/gravatar/gravatar.php:125
+msgid "monster face"
msgstr ""
-#: ../../include/conversation.php:1386 ../../addon/hsse/hsse.php:136
-msgid "Where are you right now?"
+#: ../../addon/gravatar/gravatar.php:126
+msgid "computer generated face"
msgstr ""
-#: ../../include/conversation.php:1389 ../../addon/hsse/hsse.php:139
-#: ../../addon/wiki/Mod_Wiki.php:400 ../../Zotlabs/Module/Cover_photo.php:430
-#: ../../Zotlabs/Module/Profile_photo.php:555
-msgid "Choose images to embed"
+#: ../../addon/gravatar/gravatar.php:127
+msgid "retro arcade style face"
msgstr ""
-#: ../../include/conversation.php:1390 ../../addon/hsse/hsse.php:140
-#: ../../addon/wiki/Mod_Wiki.php:401 ../../Zotlabs/Module/Cover_photo.php:431
-#: ../../Zotlabs/Module/Profile_photo.php:556
-msgid "Choose an album"
+#: ../../addon/gravatar/gravatar.php:128
+msgid "Hub default profile photo"
msgstr ""
-#: ../../include/conversation.php:1391 ../../addon/hsse/hsse.php:141
-msgid "Choose a different album..."
+#: ../../addon/gravatar/gravatar.php:143
+msgid "Information"
msgstr ""
-#: ../../include/conversation.php:1392 ../../addon/hsse/hsse.php:142
-#: ../../addon/wiki/Mod_Wiki.php:403 ../../Zotlabs/Module/Cover_photo.php:433
-#: ../../Zotlabs/Module/Profile_photo.php:558
-msgid "Error getting album list"
+#: ../../addon/gravatar/gravatar.php:143
+msgid ""
+"Libravatar addon is installed, too. Please disable Libravatar addon or this "
+"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if "
+"nothing was found at Libravatar."
msgstr ""
-#: ../../include/conversation.php:1393 ../../addon/hsse/hsse.php:143
-#: ../../addon/wiki/Mod_Wiki.php:404 ../../Zotlabs/Module/Cover_photo.php:434
-#: ../../Zotlabs/Module/Profile_photo.php:559
-msgid "Error getting photo link"
+#: ../../addon/gravatar/gravatar.php:150 ../../addon/msgfooter/msgfooter.php:46
+#: ../../addon/xmpp/xmpp.php:43
+msgid "Save Settings"
msgstr ""
-#: ../../include/conversation.php:1394 ../../addon/hsse/hsse.php:144
-#: ../../addon/wiki/Mod_Wiki.php:405 ../../Zotlabs/Module/Cover_photo.php:435
-#: ../../Zotlabs/Module/Profile_photo.php:560
-msgid "Error getting album"
+#: ../../addon/gravatar/gravatar.php:151
+msgid "Default avatar image"
msgstr ""
-#: ../../include/conversation.php:1395 ../../addon/hsse/hsse.php:145
-msgid "Comments enabled"
+#: ../../addon/gravatar/gravatar.php:151
+msgid "Select default avatar image if none was found at Gravatar. See README"
msgstr ""
-#: ../../include/conversation.php:1396 ../../addon/hsse/hsse.php:146
-msgid "Comments disabled"
+#: ../../addon/gravatar/gravatar.php:152
+msgid "Rating of images"
msgstr ""
-#: ../../include/conversation.php:1413 ../../addon/hsse/hsse.php:153
-#: ../../Zotlabs/Lib/ThreadItem.php:838 ../../Zotlabs/Module/Webpages.php:257
-#: ../../Zotlabs/Module/Photos.php:1094
-msgid "Preview"
+#: ../../addon/gravatar/gravatar.php:152
+msgid "Select the appropriate avatar rating for your site. See README"
msgstr ""
-#: ../../include/conversation.php:1446 ../../addon/hsse/hsse.php:186
-#: ../../addon/wiki/Mod_Wiki.php:304 ../../Zotlabs/Module/Layouts.php:192
-#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Webpages.php:251
-#: ../../Zotlabs/Module/Photos.php:1073 ../../Zotlabs/Widget/Cdav.php:142
-msgid "Share"
+#: ../../addon/gravatar/gravatar.php:165
+msgid "Gravatar settings updated."
msgstr ""
-#: ../../include/conversation.php:1455 ../../addon/hsse/hsse.php:195
-msgid "Page link name"
+#: ../../addon/msgfooter/msgfooter.php:47
+msgid "text to include in all outgoing posts from this site"
msgstr ""
-#: ../../include/conversation.php:1458 ../../addon/hsse/hsse.php:198
-msgid "Post as"
+#: ../../addon/sendzid/Mod_Sendzid.php:21
+msgid "Send your identity to all websites"
msgstr ""
-#: ../../include/conversation.php:1460 ../../addon/hsse/hsse.php:200
-#: ../../Zotlabs/Lib/ThreadItem.php:829
-msgid "Bold"
+#: ../../addon/sendzid/Mod_Sendzid.php:29
+msgid "Send ZID"
msgstr ""
-#: ../../include/conversation.php:1461 ../../addon/hsse/hsse.php:201
-#: ../../Zotlabs/Lib/ThreadItem.php:830
-msgid "Italic"
+#: ../../addon/cart/widgets/catalogitem.php:57
+#: ../../addon/cart/submodules/hzservices.php:660
+#: ../../addon/cart/submodules/manualcat.php:263
+msgid "Price"
msgstr ""
-#: ../../include/conversation.php:1462 ../../addon/hsse/hsse.php:202
-#: ../../Zotlabs/Lib/ThreadItem.php:831
-msgid "Underline"
+#: ../../addon/cart/manual_payments.php:7
+msgid "Error: order mismatch. Please try again."
msgstr ""
-#: ../../include/conversation.php:1463 ../../addon/hsse/hsse.php:203
-#: ../../Zotlabs/Lib/ThreadItem.php:832
-msgid "Quote"
+#: ../../addon/cart/manual_payments.php:61
+msgid "Manual payments are not enabled."
msgstr ""
-#: ../../include/conversation.php:1464 ../../addon/hsse/hsse.php:204
-#: ../../Zotlabs/Lib/ThreadItem.php:833
-msgid "Code"
+#: ../../addon/cart/manual_payments.php:68
+#: ../../addon/cart/submodules/paypalbutton.php:392
+#: ../../addon/cart/submodules/paypalbuttonV2.php:417
+#: ../../addon/cart/cart.php:1632
+msgid "Order not found."
msgstr ""
-#: ../../include/conversation.php:1465 ../../addon/hsse/hsse.php:205
-#: ../../Zotlabs/Lib/ThreadItem.php:835
-msgid "Attach/Upload file"
+#: ../../addon/cart/manual_payments.php:77
+msgid "Finished"
msgstr ""
-#: ../../include/conversation.php:1468 ../../addon/hsse/hsse.php:208
-#: ../../addon/wiki/Mod_Wiki.php:397
-msgid "Embed an image from your albums"
+#: ../../addon/cart/submodules/subscriptions.php:151
+msgid "Enable Subscription Management Module"
msgstr ""
-#: ../../include/conversation.php:1469 ../../include/conversation.php:1524
-#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258
-#: ../../addon/articles/Mod_Article_edit.php:130
-#: ../../addon/cards/Mod_Card_edit.php:132 ../../addon/wiki/Mod_Wiki.php:365
-#: ../../addon/wiki/Mod_Wiki.php:398 ../../Zotlabs/Module/Cover_photo.php:428
-#: ../../Zotlabs/Module/Profile_photo.php:553
-#: ../../Zotlabs/Module/Oauth2.php:115 ../../Zotlabs/Module/Oauth2.php:143
-#: ../../Zotlabs/Module/Editlayout.php:140 ../../Zotlabs/Module/Oauth.php:110
-#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Connedit.php:750
-#: ../../Zotlabs/Module/Admin/Addons.php:430 ../../Zotlabs/Module/Cdav.php:1059
-#: ../../Zotlabs/Module/Cdav.php:1392 ../../Zotlabs/Module/Filer.php:56
-#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
-#: ../../Zotlabs/Module/Editblock.php:141 ../../Zotlabs/Module/Tagrm.php:15
-#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Editpost.php:114
-#: ../../Zotlabs/Module/Editwebpage.php:169
-#: ../../Zotlabs/Storage/Browser.php:386
-msgid "Cancel"
+#: ../../addon/cart/submodules/subscriptions.php:223
+msgid ""
+"Cannot include subscription items with different terms in the same order."
msgstr ""
-#: ../../include/conversation.php:1470 ../../include/conversation.php:1523
-#: ../../addon/hsse/hsse.php:210 ../../addon/hsse/hsse.php:257
-#: ../../addon/wiki/Mod_Wiki.php:399 ../../Zotlabs/Module/Cover_photo.php:429
-#: ../../Zotlabs/Module/Profile_photo.php:554
-msgid "OK"
+#: ../../addon/cart/submodules/subscriptions.php:372
+msgid "Select Subscription to Edit"
msgstr ""
-#: ../../include/conversation.php:1472 ../../addon/hsse/hsse.php:212
-msgid "Toggle voting"
+#: ../../addon/cart/submodules/subscriptions.php:380
+msgid "Edit Subscriptions"
msgstr ""
-#: ../../include/conversation.php:1473
-msgid "Toggle poll"
+#: ../../addon/cart/submodules/subscriptions.php:414
+msgid "Subscription SKU"
msgstr ""
-#: ../../include/conversation.php:1474
-msgid "Option"
+#: ../../addon/cart/submodules/subscriptions.php:419
+msgid "Catalog Description"
msgstr ""
-#: ../../include/conversation.php:1475
-msgid "Add option"
+#: ../../addon/cart/submodules/subscriptions.php:423
+msgid "Subscription available for purchase."
msgstr ""
-#: ../../include/conversation.php:1476
-msgid "Minutes"
+#: ../../addon/cart/submodules/subscriptions.php:428
+msgid "Maximum active subscriptions to this item per account."
msgstr ""
-#: ../../include/conversation.php:1476
-msgid "Hours"
+#: ../../addon/cart/submodules/subscriptions.php:431
+msgid "Subscription price."
msgstr ""
-#: ../../include/conversation.php:1476
-msgid "Days"
+#: ../../addon/cart/submodules/subscriptions.php:435
+msgid "Quantity"
msgstr ""
-#: ../../include/conversation.php:1477
-msgid "Allow multiple answers"
+#: ../../addon/cart/submodules/subscriptions.php:439
+msgid "Term"
msgstr ""
-#: ../../include/conversation.php:1479 ../../addon/hsse/hsse.php:215
-msgid "Disable comments"
+#: ../../addon/cart/submodules/hzservices.php:65
+msgid "Enable Hubzilla Services Module"
msgstr ""
-#: ../../include/conversation.php:1480 ../../addon/hsse/hsse.php:216
-msgid "Toggle comments"
+#: ../../addon/cart/submodules/hzservices.php:164
+#: ../../addon/cart/submodules/manualcat.php:172
+msgid "New Sku"
msgstr ""
-#: ../../include/conversation.php:1486 ../../addon/hsse/hsse.php:221
-#: ../../addon/articles/Mod_Article_edit.php:116
-#: ../../addon/cards/Mod_Card_edit.php:118
-#: ../../Zotlabs/Module/Editblock.php:129 ../../Zotlabs/Module/Photos.php:667
-#: ../../Zotlabs/Module/Photos.php:1039
-msgid "Title (optional)"
+#: ../../addon/cart/submodules/hzservices.php:199
+#: ../../addon/cart/submodules/manualcat.php:208
+msgid "Cannot save edits to locked item."
msgstr ""
-#: ../../include/conversation.php:1487
-msgid "Summary (optional)"
+#: ../../addon/cart/submodules/hzservices.php:248
+#: ../../addon/cart/submodules/hzservices.php:335
+msgid "SKU not found."
msgstr ""
-#: ../../include/conversation.php:1490 ../../addon/hsse/hsse.php:224
-msgid "Categories (optional, comma-separated list)"
+#: ../../addon/cart/submodules/hzservices.php:301
+#: ../../addon/cart/submodules/hzservices.php:305
+msgid "Invalid Activation Directive."
msgstr ""
-#: ../../include/conversation.php:1491 ../../addon/hsse/hsse.php:225
-msgid "Permission settings"
+#: ../../addon/cart/submodules/hzservices.php:376
+#: ../../addon/cart/submodules/hzservices.php:380
+msgid "Invalid Deactivation Directive."
msgstr ""
-#: ../../include/conversation.php:1513 ../../addon/hsse/hsse.php:247
-msgid "Other networks and post services"
+#: ../../addon/cart/submodules/hzservices.php:566
+msgid "Add to this privacy group"
msgstr ""
-#: ../../include/conversation.php:1516 ../../addon/hsse/hsse.php:250
-msgid "Set expiration date"
+#: ../../addon/cart/submodules/hzservices.php:582
+msgid "Set user service class"
msgstr ""
-#: ../../include/conversation.php:1519 ../../addon/hsse/hsse.php:253
-msgid "Set publish date"
+#: ../../addon/cart/submodules/hzservices.php:609
+msgid "You must be using a local account to purchase this service."
msgstr ""
-#: ../../include/conversation.php:1521 ../../addon/hsse/hsse.php:255
-#: ../../Zotlabs/Lib/ThreadItem.php:841 ../../Zotlabs/Module/Chat.php:218
-msgid "Encrypt text"
+#: ../../addon/cart/submodules/hzservices.php:649
+#: ../../addon/cart/submodules/manualcat.php:252
+msgid "Changes Locked"
msgstr ""
-#: ../../include/conversation.php:1765 ../../Zotlabs/Lib/ThreadItem.php:239
-#: ../../Zotlabs/Module/Photos.php:1133
-msgctxt "noun"
-msgid "Dislike"
-msgid_plural "Dislikes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1768
-msgctxt "noun"
-msgid "Attending"
-msgid_plural "Attending"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1771
-msgctxt "noun"
-msgid "Not Attending"
-msgid_plural "Not Attending"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1774
-msgctxt "noun"
-msgid "Undecided"
-msgid_plural "Undecided"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1777
-msgctxt "noun"
-msgid "Agree"
-msgid_plural "Agrees"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1780
-msgctxt "noun"
-msgid "Disagree"
-msgid_plural "Disagrees"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/conversation.php:1783
-msgctxt "noun"
-msgid "Abstain"
-msgid_plural "Abstains"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/bookmarks.php:34
-#, php-format
-msgid "%1$s's bookmarks"
+#: ../../addon/cart/submodules/hzservices.php:653
+#: ../../addon/cart/submodules/manualcat.php:256
+msgid "Item available for purchase."
msgstr ""
-#: ../../include/text.php:547
-msgid "prev"
+#: ../../addon/cart/submodules/hzservices.php:663
+#: ../../addon/cart/submodules/manualcat.php:266
+msgid "Photo URL"
msgstr ""
-#: ../../include/text.php:549
-msgid "first"
+#: ../../addon/cart/submodules/hzservices.php:667
+msgid "Add buyer to privacy group"
msgstr ""
-#: ../../include/text.php:578
-msgid "last"
+#: ../../addon/cart/submodules/hzservices.php:672
+msgid "Add buyer as connection"
msgstr ""
-#: ../../include/text.php:581
-msgid "next"
+#: ../../addon/cart/submodules/hzservices.php:680
+#: ../../addon/cart/submodules/hzservices.php:722
+msgid "Set Service Class"
msgstr ""
-#: ../../include/text.php:599
-msgid "older"
+#: ../../addon/cart/submodules/orderoptions.php:70
+msgid "Enable Order/Item Options"
msgstr ""
-#: ../../include/text.php:601
-msgid "newer"
+#: ../../addon/cart/submodules/orderoptions.php:333
+#: ../../addon/cart/submodules/orderoptions.php:357
+#: ../../addon/cart/submodules/orderoptions.php:433
+#: ../../addon/cart/submodules/orderoptions.php:457
+msgid "Label"
msgstr ""
-#: ../../include/text.php:1064 ../../Zotlabs/Module/Connections.php:300
-#: ../../Zotlabs/Module/Viewconnections.php:80
-msgid "Accepts"
+#: ../../addon/cart/submodules/orderoptions.php:334
+#: ../../addon/cart/submodules/orderoptions.php:358
+#: ../../addon/cart/submodules/orderoptions.php:434
+#: ../../addon/cart/submodules/orderoptions.php:458
+#: ../../include/js_strings.php:124 ../../include/datetime.php:211
+#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Appman.php:208
+#: ../../Zotlabs/Module/Appman.php:209 ../../Zotlabs/Module/Profiles.php:762
+#: ../../Zotlabs/Module/Profiles.php:766
+#: ../../Zotlabs/Module/Settings/Multifactor.php:84
+msgid "Required"
msgstr ""
-#: ../../include/text.php:1067 ../../Zotlabs/Module/Connections.php:303
-#: ../../Zotlabs/Module/Viewconnections.php:83
-msgid "Comments"
+#: ../../addon/cart/submodules/orderoptions.php:336
+#: ../../addon/cart/submodules/orderoptions.php:360
+#: ../../addon/cart/submodules/orderoptions.php:436
+#: ../../addon/cart/submodules/orderoptions.php:460
+msgid "Instructions"
msgstr ""
-#: ../../include/text.php:1072 ../../Zotlabs/Module/Connections.php:308
-#: ../../Zotlabs/Module/Viewconnections.php:88
-msgid "Stream items"
+#: ../../addon/cart/submodules/paypalbutton.php:85
+msgid "Enable Paypal Button Module"
msgstr ""
-#: ../../include/text.php:1077 ../../Zotlabs/Module/Connections.php:313
-#: ../../Zotlabs/Module/Viewconnections.php:93
-msgid "Wall posts"
+#: ../../addon/cart/submodules/paypalbutton.php:93
+#: ../../addon/cart/submodules/paypalbuttonV2.php:96
+msgid "Use Production Key"
msgstr ""
-#: ../../include/text.php:1081 ../../Zotlabs/Module/Connections.php:317
-#: ../../Zotlabs/Module/Viewconnections.php:97
-msgid "Nothing"
+#: ../../addon/cart/submodules/paypalbutton.php:100
+#: ../../addon/cart/submodules/paypalbuttonV2.php:103
+msgid "Paypal Sandbox Client Key"
msgstr ""
-#: ../../include/text.php:1094
-#, php-format
-msgid "View all %s connections"
+#: ../../addon/cart/submodules/paypalbutton.php:107
+#: ../../addon/cart/submodules/paypalbuttonV2.php:110
+msgid "Paypal Sandbox Secret Key"
msgstr ""
-#: ../../include/text.php:1157
-#, php-format
-msgid "Network: %s"
+#: ../../addon/cart/submodules/paypalbutton.php:113
+#: ../../addon/cart/submodules/paypalbuttonV2.php:116
+msgid "Paypal Production Client Key"
msgstr ""
-#: ../../include/text.php:1169 ../../include/text.php:1181
-#: ../../addon/articles/Mod_Articles.php:120
-#: ../../addon/cards/Mod_Cards.php:116
-#: ../../Zotlabs/Module/Admin/Queueworker.php:114
-#: ../../Zotlabs/Module/Admin/Profs.php:94
-#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Filer.php:54
-#: ../../Zotlabs/Module/Rbmark.php:31 ../../Zotlabs/Module/Rbmark.php:103
-msgid "Save"
+#: ../../addon/cart/submodules/paypalbutton.php:120
+#: ../../addon/cart/submodules/paypalbuttonV2.php:123
+msgid "Paypal Production Secret Key"
msgstr ""
-#: ../../include/text.php:1260
-msgid "poke"
+#: ../../addon/cart/submodules/paypalbutton.php:252
+#: ../../addon/cart/submodules/paypalbuttonV2.php:271
+msgid "Paypal button payments are not enabled."
msgstr ""
-#: ../../include/text.php:1261
-msgid "ping"
+#: ../../addon/cart/submodules/paypalbutton.php:270
+#: ../../addon/cart/submodules/paypalbuttonV2.php:289
+msgid ""
+"Paypal button payments are not properly configured. Please choose another "
+"payment option."
msgstr ""
-#: ../../include/text.php:1261
-msgid "pinged"
+#: ../../addon/cart/submodules/paypalbuttonV2.php:86
+msgid "Enable Paypal Button Module (API-v2)"
msgstr ""
-#: ../../include/text.php:1290
-msgid "happy"
+#: ../../addon/cart/submodules/manualcat.php:61
+msgid "Enable Manual Cart Module"
msgstr ""
-#: ../../include/text.php:1291
-msgid "sad"
+#: ../../addon/cart/myshop.php:30
+msgid "Access Denied."
msgstr ""
-#: ../../include/text.php:1292
-msgid "mellow"
+#: ../../addon/cart/myshop.php:113 ../../addon/cart/cart.php:1495
+msgid "Order Not Found"
msgstr ""
-#: ../../include/text.php:1293
-msgid "tired"
+#: ../../addon/cart/myshop.php:190 ../../addon/cart/myshop.php:224
+#: ../../addon/cart/myshop.php:275 ../../addon/cart/myshop.php:333
+msgid "Invalid Item"
msgstr ""
-#: ../../include/text.php:1294
-msgid "perky"
+#: ../../addon/cart/Settings/Cart.php:58
+msgid "Enable Test Catalog"
msgstr ""
-#: ../../include/text.php:1295
-msgid "angry"
+#: ../../addon/cart/Settings/Cart.php:70
+msgid "Enable Manual Payments"
msgstr ""
-#: ../../include/text.php:1296
-msgid "stupefied"
+#: ../../addon/cart/Settings/Cart.php:90
+msgid "Base Merchant Currency"
msgstr ""
-#: ../../include/text.php:1297
-msgid "puzzled"
+#: ../../addon/cart/Settings/Cart.php:129 ../../addon/cart/cart.php:1424
+msgid "Cart Settings"
msgstr ""
-#: ../../include/text.php:1298
-msgid "interested"
+#: ../../addon/cart/cart.php:259
+msgid "DB Cleanup Failure"
msgstr ""
-#: ../../include/text.php:1299
-msgid "bitter"
+#: ../../addon/cart/cart.php:692
+msgid "[cart] Item Added"
msgstr ""
-#: ../../include/text.php:1300
-msgid "cheerful"
+#: ../../addon/cart/cart.php:1107
+msgid "Order already checked out."
msgstr ""
-#: ../../include/text.php:1301
-msgid "alive"
+#: ../../addon/cart/cart.php:1417
+msgid "Drop database tables when uninstalling."
msgstr ""
-#: ../../include/text.php:1302
-msgid "annoyed"
+#: ../../addon/cart/cart.php:1436 ../../addon/cart/cart.php:1439
+msgid "Shop"
msgstr ""
-#: ../../include/text.php:1303
-msgid "anxious"
+#: ../../addon/cart/cart.php:1599
+msgid "You must be logged into the Grid to shop."
msgstr ""
-#: ../../include/text.php:1304
-msgid "cranky"
+#: ../../addon/cart/cart.php:1648
+msgid "Access denied."
msgstr ""
-#: ../../include/text.php:1305
-msgid "disturbed"
+#: ../../addon/cart/cart.php:1700 ../../addon/cart/cart.php:1843
+msgid "No Order Found"
msgstr ""
-#: ../../include/text.php:1306
-msgid "frustrated"
+#: ../../addon/cart/cart.php:1709
+msgid "An unknown error has occurred Please start again."
msgstr ""
-#: ../../include/text.php:1307
-msgid "depressed"
+#: ../../addon/cart/cart.php:1852
+msgid "Requirements not met."
msgstr ""
-#: ../../include/text.php:1308
-msgid "motivated"
+#: ../../addon/cart/cart.php:1852
+msgid "Review your order and complete any needed requirements."
msgstr ""
-#: ../../include/text.php:1309
-msgid "relaxed"
+#: ../../addon/cart/cart.php:1878
+msgid "Invalid Payment Type. Please start again."
msgstr ""
-#: ../../include/text.php:1310
-msgid "surprised"
+#: ../../addon/cart/cart.php:1885
+msgid "Order not found"
msgstr ""
-#: ../../include/text.php:1502
-msgid "May"
+#: ../../addon/nofed/Mod_Nofed.php:21
+msgid "nofed Settings saved."
msgstr ""
-#: ../../include/text.php:1568
-msgid "Unknown Attachment"
+#: ../../addon/nofed/Mod_Nofed.php:40
+msgid "Federate posts by default"
msgstr ""
-#: ../../include/text.php:1570 ../../Zotlabs/Module/Sharedwithme.php:109
-#: ../../Zotlabs/Storage/Browser.php:382
-msgid "Size"
+#: ../../addon/nofed/Mod_Nofed.php:48
+msgid "No Federation"
msgstr ""
-#: ../../include/text.php:1613
-msgid "remove category"
+#: ../../addon/nofed/nofed.php:47
+msgid "Federate"
msgstr ""
-#: ../../include/text.php:1690
-msgid "remove from file"
+#: ../../addon/smileybutton/Mod_Smileybutton.php:42
+msgid "Hide the button and show the smilies directly."
msgstr ""
-#: ../../include/text.php:1877
-msgid "Download binary/encrypted content"
+#: ../../addon/smileybutton/Mod_Smileybutton.php:50
+msgid "Smileybutton Settings"
msgstr ""
-#: ../../include/text.php:1935 ../../include/text.php:1944
-#: ../../include/text.php:1971 ../../include/text.php:1980
-#, php-format
-msgctxt "noun"
-msgid "%d Vote"
-msgid_plural "%d Votes"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/text.php:1987
-#, php-format
-msgctxt "noun"
-msgid "%d Vote in total"
-msgid_plural "%d Votes in total"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../include/text.php:1993
-msgid "Poll has ended"
+#: ../../addon/redfiles/redfilehelper.php:64 ../../include/attach.php:2122
+msgid "file"
msgstr ""
-#: ../../include/text.php:1996
-#, php-format
-msgid "Poll ends in %s"
+#: ../../addon/redfiles/redfiles.php:119
+msgid "Redmatrix File Storage Import"
msgstr ""
-#: ../../include/text.php:2003 ../../Zotlabs/Lib/ThreadItem.php:446
-msgid "Vote"
+#: ../../addon/redfiles/redfiles.php:120
+msgid "This will import all your Redmatrix cloud files to this channel."
msgstr ""
-#: ../../include/text.php:2158
-msgid "Link to Source"
+#: ../../addon/diaspora/diaspora.php:78
+msgid ""
+"Please install the statistics addon to be able to configure a diaspora relay"
msgstr ""
-#: ../../include/text.php:2191
-msgid "Page layout"
+#: ../../addon/diaspora/diaspora.php:88
+msgid "Diaspora Relay Handle"
msgstr ""
-#: ../../include/text.php:2191
-msgid "You can create your own with the layouts tool"
+#: ../../addon/diaspora/diaspora.php:88
+msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld"
msgstr ""
-#: ../../include/text.php:2201 ../../addon/wiki/Mod_Wiki.php:220
-#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
-#: ../../addon/wiki/Widget/Wiki_pages.php:65
-msgid "BBcode"
+#: ../../addon/diaspora/diaspora.php:108
+msgid "Diaspora relay could not be imported"
msgstr ""
-#: ../../include/text.php:2202
-msgid "HTML"
+#: ../../addon/diaspora/diaspora.php:1068
+msgid "No subject"
msgstr ""
-#: ../../include/text.php:2203 ../../addon/mdpost/mdpost.php:41
-#: ../../addon/wiki/Mod_Wiki.php:220 ../../addon/wiki/Mod_Wiki.php:368
-#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:65
-msgid "Markdown"
+#: ../../addon/diaspora/p.php:48 ../../addon/diaspora/util.php:337
+#: ../../addon/diaspora/util.php:350 ../../Zotlabs/Lib/Enotify.php:61
+msgid "$projectname"
msgstr ""
-#: ../../include/text.php:2204 ../../addon/wiki/Mod_Wiki.php:220
-#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:65
-msgid "Text"
+#: ../../addon/diaspora/import_diaspora.php:18
+msgid "No username found in import file."
msgstr ""
-#: ../../include/text.php:2205
-msgid "Comanche Layout"
+#: ../../addon/diaspora/import_diaspora.php:43 ../../include/import.php:77
+msgid "Unable to create a unique channel address. Import failed."
msgstr ""
-#: ../../include/text.php:2210
-msgid "PHP"
+#: ../../addon/diaspora/import_diaspora.php:140
+msgid "Import completed."
msgstr ""
-#: ../../include/text.php:2222
-msgid "Page content type"
+#: ../../addon/diaspora/Mod_Diaspora.php:43
+msgid "Diaspora Protocol Settings updated."
msgstr ""
-#: ../../include/text.php:2355
-msgid "activity"
+#: ../../addon/diaspora/Mod_Diaspora.php:52
+msgid ""
+"The diaspora protocol does not support location independence. Connections "
+"you make within that network may be unreachable from alternate channel "
+"locations."
msgstr ""
-#: ../../include/text.php:2358
-msgid "poll"
+#: ../../addon/diaspora/Mod_Diaspora.php:75
+msgid "Allow any Diaspora member to comment or like your public posts"
msgstr ""
-#: ../../include/text.php:2471
-msgid "a-z, 0-9, -, and _ only"
+#: ../../addon/diaspora/Mod_Diaspora.php:75
+msgid ""
+"If this setting is disabled only your contacts will be able to comment or "
+"like your public posts"
msgstr ""
-#: ../../include/text.php:2776
-msgid "Design Tools"
+#: ../../addon/diaspora/Mod_Diaspora.php:79
+msgid "Prevent your hashtags from being redirected to other sites"
msgstr ""
-#: ../../include/text.php:2779 ../../Zotlabs/Module/Blocks.php:152
-msgid "Blocks"
+#: ../../addon/diaspora/Mod_Diaspora.php:83
+msgid "Sign and forward posts and comments with no existing Diaspora signature"
msgstr ""
-#: ../../include/text.php:2780 ../../Zotlabs/Module/Menu.php:171
-msgid "Menus"
+#: ../../addon/diaspora/Mod_Diaspora.php:88
+msgid "Followed hashtags (comma separated, do not include the #)"
msgstr ""
-#: ../../include/text.php:2781 ../../Zotlabs/Module/Layouts.php:182
-msgid "Layouts"
+#: ../../addon/diaspora/Mod_Diaspora.php:97
+msgid "Diaspora Protocol"
msgstr ""
-#: ../../include/text.php:2782
-msgid "Pages"
+#: ../../addon/diaspora/Receiver.php:1595
+#, php-format
+msgid "%1$s dislikes %2$s's %3$s"
msgstr ""
-#: ../../include/text.php:2794
-msgid "Import"
+#: ../../addon/diaspora/Receiver.php:2206 ../../Zotlabs/Module/Like.php:487
+#, php-format
+msgid "%1$s is attending %2$s's %3$s"
msgstr ""
-#: ../../include/text.php:2795
-msgid "Import website..."
+#: ../../addon/diaspora/Receiver.php:2208 ../../Zotlabs/Module/Like.php:489
+#, php-format
+msgid "%1$s is not attending %2$s's %3$s"
msgstr ""
-#: ../../include/text.php:2796
-msgid "Select folder to import"
+#: ../../addon/diaspora/Receiver.php:2210 ../../Zotlabs/Module/Like.php:491
+#, php-format
+msgid "%1$s may attend %2$s's %3$s"
msgstr ""
-#: ../../include/text.php:2797
-msgid "Import from a zipped folder:"
+#: ../../addon/piwik/piwik.php:85
+msgid ""
+"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> "
+"analytics tool."
msgstr ""
-#: ../../include/text.php:2798
-msgid "Import from cloud files:"
+#: ../../addon/piwik/piwik.php:88
+#, php-format
+msgid ""
+"If you do not want that your visits are logged this way you <a href='%s'>can "
+"set a cookie to prevent Piwik from tracking further visits of the site</a> "
+"(opt-out)."
msgstr ""
-#: ../../include/text.php:2799
-msgid "/cloud/channel/path/to/folder"
+#: ../../addon/piwik/piwik.php:96
+msgid "Piwik Base URL"
msgstr ""
-#: ../../include/text.php:2800
-msgid "Enter path to website files"
+#: ../../addon/piwik/piwik.php:96
+msgid ""
+"Absolute path to your Piwik installation. (without protocol (http/s), with "
+"trailing slash)"
msgstr ""
-#: ../../include/text.php:2801
-msgid "Select folder"
+#: ../../addon/piwik/piwik.php:97
+msgid "Site ID"
msgstr ""
-#: ../../include/text.php:2802
-msgid "Export website..."
+#: ../../addon/piwik/piwik.php:98
+msgid "Show opt-out cookie link?"
msgstr ""
-#: ../../include/text.php:2803
-msgid "Export to a zip file"
+#: ../../addon/piwik/piwik.php:99
+msgid "Asynchronous tracking"
msgstr ""
-#: ../../include/text.php:2804
-msgid "website.zip"
+#: ../../addon/piwik/piwik.php:100
+msgid "Enable frontend JavaScript error tracking"
msgstr ""
-#: ../../include/text.php:2805
-msgid "Enter a name for the zip file."
+#: ../../addon/piwik/piwik.php:100
+msgid "This feature requires Piwik >= 2.2.0"
msgstr ""
-#: ../../include/text.php:2806
-msgid "Export to cloud files"
+#: ../../addon/workflow/workflow.php:222
+msgid "Workflow user."
msgstr ""
-#: ../../include/text.php:2807
-msgid "/path/to/export/folder"
+#: ../../addon/workflow/workflow.php:272
+msgid "This channel"
msgstr ""
-#: ../../include/text.php:2808
-msgid "Enter a path to a cloud files destination."
+#: ../../addon/workflow/workflow.php:285 ../../Zotlabs/Module/Locs.php:123
+msgid "Primary"
msgstr ""
-#: ../../include/text.php:2809
-msgid "Specify folder"
+#: ../../addon/workflow/workflow.php:327
+msgid "Create New Workflow Item"
msgstr ""
-#: ../../include/selectors.php:17
-msgid "Select a profile to assign to this contact"
+#: ../../addon/workflow/workflow.php:546 ../../addon/workflow/workflow.php:1442
+#: ../../addon/workflow/workflow.php:1461
+msgid "Workflow"
msgstr ""
-#: ../../include/selectors.php:45
-msgid "Frequently"
+#: ../../addon/workflow/workflow.php:1430
+msgid "No Workflows Available"
msgstr ""
-#: ../../include/selectors.php:46
-msgid "Hourly"
+#: ../../addon/workflow/workflow.php:1460
+msgid "Add item to which workflow"
msgstr ""
-#: ../../include/selectors.php:47
-msgid "Twice daily"
+#: ../../addon/workflow/workflow.php:1520
+#: ../../addon/workflow/workflow.php:1639
+msgid "Create Workflow Item"
msgstr ""
-#: ../../include/selectors.php:48
-msgid "Daily"
+#: ../../addon/workflow/workflow.php:2601
+msgid "Link"
msgstr ""
-#: ../../include/selectors.php:49
-msgid "Weekly"
+#: ../../addon/workflow/workflow.php:2603
+msgid "Web link."
msgstr ""
-#: ../../include/selectors.php:50
-msgid "Monthly"
+#: ../../addon/workflow/workflow.php:2622
+#: ../../addon/workflow/workflow.php:2683 ../../Zotlabs/Module/Cdav.php:1366
+#: ../../Zotlabs/Module/Connedit.php:734
+msgid "Title"
msgstr ""
-#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/channel.php:1714 ../../addon/openid/Mod_Id.php:85
-msgid "Male"
+#: ../../addon/workflow/workflow.php:2624
+#: ../../addon/workflow/workflow.php:2685
+msgid "Brief description or title"
msgstr ""
-#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/channel.php:1712 ../../addon/openid/Mod_Id.php:87
-msgid "Female"
+#: ../../addon/workflow/workflow.php:2630 ../../Zotlabs/Widget/Notes.php:38
+#: ../../Zotlabs/Lib/Apps.php:375
+msgid "Notes"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Currently Male"
+#: ../../addon/workflow/workflow.php:2632
+#: ../../addon/workflow/workflow.php:2693
+msgid "Notes and Info"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Currently Female"
+#: ../../addon/workflow/workflow.php:2691
+msgid "Body"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Mostly Male"
+#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:101
+msgid "Workflow Settings"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Mostly Female"
+#: ../../addon/donate/donate.php:21
+msgid "Project Servers and Resources"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Transgender"
+#: ../../addon/donate/donate.php:22
+msgid "Project Creator and Tech Lead"
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Intersex"
+#: ../../addon/donate/donate.php:49
+msgid ""
+"And the hundreds of other people and organisations who helped make the "
+"Hubzilla possible."
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Transsexual"
+#: ../../addon/donate/donate.php:52
+msgid ""
+"The Redmatrix/Hubzilla projects are provided primarily by volunteers giving "
+"their time and expertise - and often paying out of pocket for services they "
+"share with others."
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Hermaphrodite"
+#: ../../addon/donate/donate.php:53
+msgid ""
+"There is no corporate funding and no ads, and we do not collect and sell "
+"your personal information. (We don't control your personal information - "
+"<strong>you do</strong>.)"
msgstr ""
-#: ../../include/selectors.php:64 ../../include/channel.php:1718
-msgid "Neuter"
+#: ../../addon/donate/donate.php:54
+msgid ""
+"Help support our ground-breaking work in decentralisation, web identity, and "
+"privacy."
msgstr ""
-#: ../../include/selectors.php:64 ../../include/channel.php:1720
-msgid "Non-specific"
+#: ../../addon/donate/donate.php:56
+msgid ""
+"Your donations keep servers and services running and also helps us to "
+"provide innovative new features and continued development."
msgstr ""
-#: ../../include/selectors.php:64
-msgid "Undecided"
+#: ../../addon/donate/donate.php:59
+msgid "Donate"
msgstr ""
-#: ../../include/selectors.php:100 ../../include/selectors.php:119
-msgid "Males"
+#: ../../addon/donate/donate.php:61
+msgid ""
+"Choose a project, developer, or public hub to support with a one-time "
+"donation"
msgstr ""
-#: ../../include/selectors.php:100 ../../include/selectors.php:119
-msgid "Females"
+#: ../../addon/donate/donate.php:62
+msgid "Donate Now"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Gay"
+#: ../../addon/donate/donate.php:63
+msgid ""
+"<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Lesbian"
+#: ../../addon/donate/donate.php:64
+msgid ""
+"Please indicate if you would like your first name or full name (or nothing) "
+"to appear in our sponsor listing"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "No Preference"
+#: ../../addon/donate/donate.php:65
+msgid "Sponsor"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Bisexual"
+#: ../../addon/donate/donate.php:68
+msgid "Special thanks to: "
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Autosexual"
+#: ../../addon/likebanner/likebanner.php:51
+msgid "Your Webbie:"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Abstinent"
+#: ../../addon/likebanner/likebanner.php:54
+msgid "Fontsize (px):"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Virgin"
+#: ../../addon/likebanner/likebanner.php:68
+msgid "Link:"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Deviant"
+#: ../../addon/likebanner/likebanner.php:70
+msgid "Like us on Hubzilla"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Fetish"
+#: ../../addon/likebanner/likebanner.php:72
+msgid "Embed:"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Oodles"
+#: ../../addon/opensearch/opensearch.php:26
+#, php-format
+msgctxt "opensearch"
+msgid "Search %1$s (%2$s)"
msgstr ""
-#: ../../include/selectors.php:100
-msgid "Nonsexual"
+#: ../../addon/opensearch/opensearch.php:28
+msgctxt "opensearch"
+msgid "$Projectname"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Single"
+#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Module/Invite.php:238
+#: ../../Zotlabs/Module/Invite.php:507 ../../Zotlabs/Module/Invite.php:521
+#: ../../Zotlabs/Module/Home.php:87 ../../Zotlabs/Module/Home.php:95
+#: ../../Zotlabs/Lib/Enotify.php:66
+msgid "$Projectname"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Lonely"
+#: ../../addon/opensearch/opensearch.php:43
+msgid "Search $Projectname"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Available"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:22
+msgid "Fuzzloc Settings updated."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Unavailable"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:38
+msgid "Minimum offset in meters"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Has crush"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:42
+msgid "Maximum offset in meters"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Infatuated"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:51
+msgid "Fuzzy Location"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Dating"
+#: ../../addon/hubwall/hubwall.php:19
+msgid "Send email to all members"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Unfaithful"
+#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:65
+#, php-format
+msgid "%s Administrator"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Sex Addict"
+#: ../../addon/hubwall/hubwall.php:50 ../../addon/mailtest/mailtest.php:50
+msgid "No recipients found."
msgstr ""
-#: ../../include/selectors.php:138 ../../include/channel.php:456
-#: ../../include/channel.php:459 ../../Zotlabs/Module/Connedit.php:581
-#: ../../Zotlabs/Module/Contactedit.php:297
-#: ../../Zotlabs/Widget/Affinity.php:38
-msgid "Friends"
+#: ../../addon/hubwall/hubwall.php:73
+#, php-format
+msgid "%1$d of %2$d messages sent."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Friends/Benefits"
+#: ../../addon/hubwall/hubwall.php:81
+msgid "Send email to all hub members."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Casual"
+#: ../../addon/hubwall/hubwall.php:92 ../../addon/mailtest/mailtest.php:96
+msgid "Message subject"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Engaged"
+#: ../../addon/hubwall/hubwall.php:93
+msgid "Sender Email address"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Married"
+#: ../../addon/hubwall/hubwall.php:94
+msgid "Test mode (only send to hub administrator)"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Imaginarily married"
+#: ../../addon/cards/Widget/Cards_categories.php:80
+#: ../../addon/articles/Widget/Articles_categories.php:80
+#: ../../include/contact_widgets.php:115 ../../include/contact_widgets.php:149
+#: ../../include/taxonomy.php:422 ../../include/taxonomy.php:504
+#: ../../include/taxonomy.php:524 ../../include/taxonomy.php:545
+#: ../../Zotlabs/Module/Cdav.php:1062 ../../Zotlabs/Storage/Browser.php:293
+#: ../../Zotlabs/Storage/Browser.php:391 ../../Zotlabs/Storage/Browser.php:406
+msgid "Categories"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Partners"
+#: ../../addon/cards/Widget/Cards_categories.php:83
+#: ../../addon/articles/Widget/Articles_categories.php:83
+#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:118
+#: ../../include/contact_widgets.php:152
+#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36
+msgid "Everything"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Cohabiting"
+#: ../../addon/cards/Mod_Card_edit.php:17
+#: ../../addon/cards/Mod_Card_edit.php:33
+#: ../../addon/articles/Mod_Article_edit.php:17
+#: ../../addon/articles/Mod_Article_edit.php:33
+#: ../../Zotlabs/Module/Editwebpage.php:80 ../../Zotlabs/Module/Editpost.php:24
+#: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95
+#: ../../Zotlabs/Module/Editlayout.php:79
+msgid "Item not found"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Common law"
+#: ../../addon/cards/Mod_Card_edit.php:44
+#: ../../addon/articles/Mod_Article_edit.php:44
+#: ../../Zotlabs/Module/Attach_edit.php:52
+#: ../../Zotlabs/Module/Wall_upload.php:31 ../../Zotlabs/Module/Chanview.php:95
+#: ../../Zotlabs/Module/Cal.php:31 ../../Zotlabs/Module/Attach.php:22
+#: ../../Zotlabs/Module/Page.php:75 ../../Zotlabs/Module/Block.php:41
+msgid "Channel not found."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Happy"
+#: ../../addon/cards/Mod_Card_edit.php:129
+msgid "Edit Card"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Not looking"
+#: ../../addon/cards/Mod_Card_edit.php:130
+#: ../../addon/articles/Mod_Article_edit.php:128
+#: ../../include/conversation.php:736 ../../include/conversation.php:799
+#: ../../Zotlabs/Module/Tokens.php:295 ../../Zotlabs/Module/Group.php:251
+#: ../../Zotlabs/Module/Oauth.php:172 ../../Zotlabs/Module/Editwebpage.php:167
+#: ../../Zotlabs/Module/Cdav.php:1047 ../../Zotlabs/Module/Cdav.php:1381
+#: ../../Zotlabs/Module/Webpages.php:252
+#: ../../Zotlabs/Module/Admin/Accounts.php:320
+#: ../../Zotlabs/Module/Admin/Channels.php:149
+#: ../../Zotlabs/Module/Admin/Profs.php:176
+#: ../../Zotlabs/Module/Permcats.php:261
+#: ../../Zotlabs/Module/Contactedit.php:667 ../../Zotlabs/Module/Blocks.php:160
+#: ../../Zotlabs/Module/Editblock.php:139
+#: ../../Zotlabs/Module/Editlayout.php:138 ../../Zotlabs/Module/Photos.php:1171
+#: ../../Zotlabs/Module/Oauth2.php:193 ../../Zotlabs/Module/Thing.php:269
+#: ../../Zotlabs/Module/Connedit.php:540 ../../Zotlabs/Module/Connedit.php:749
+#: ../../Zotlabs/Lib/Apps.php:602 ../../Zotlabs/Lib/ThreadItem.php:179
+#: ../../Zotlabs/Storage/Browser.php:387
+msgid "Delete"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Swinger"
+#: ../../addon/cards/cards.php:48 ../../addon/cards/cards.php:160
+#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:331
+msgid "Cards"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Betrayed"
+#: ../../addon/cards/cards.php:51
+msgid "View Cards"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Separated"
+#: ../../addon/cards/cards.php:82 ../../addon/articles/articles.php:83
+#: ../../include/conversation.php:852
+msgid "View in context"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Unstable"
+#: ../../addon/cards/Mod_Cards.php:115
+msgid "Add Card"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Divorced"
+#: ../../addon/cards/Mod_Cards.php:116
+#: ../../addon/articles/Mod_Articles.php:120 ../../include/text.php:1169
+#: ../../include/text.php:1181 ../../Zotlabs/Module/Admin/Queueworker.php:114
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Filer.php:54
+#: ../../Zotlabs/Module/Rbmark.php:31 ../../Zotlabs/Module/Rbmark.php:103
+msgid "Save"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Imaginarily divorced"
+#: ../../addon/notifyadmin/notifyadmin.php:34
+msgid "New registration"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Widowed"
+#: ../../addon/notifyadmin/notifyadmin.php:40
+#: ../../Zotlabs/Module/Invite.php:265
+#, php-format
+msgid "%s : Message delivery failed."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Uncertain"
+#: ../../addon/notifyadmin/notifyadmin.php:42
+#, php-format
+msgid "Message sent to %s. New account registration: %s"
msgstr ""
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "It's complicated"
+#: ../../addon/flashcards/Mod_Flashcards.php:225
+msgid "Not allowed."
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Don't care"
+#: ../../addon/flashcards/Mod_Flashcards.php:261
+#: ../../include/acl_selectors.php:154 ../../Zotlabs/Module/Chat.php:240
+#: ../../Zotlabs/Module/Filestorage.php:195 ../../Zotlabs/Module/Photos.php:671
+#: ../../Zotlabs/Module/Photos.php:1042 ../../Zotlabs/Module/Thing.php:321
+#: ../../Zotlabs/Module/Thing.php:374
+msgid "Permissions"
msgstr ""
-#: ../../include/selectors.php:138
-msgid "Ask me"
+#: ../../addon/flashcards/Mod_Flashcards.php:268
+#: ../../Zotlabs/Module/Filestorage.php:202
+msgid "Set/edit permissions"
msgstr ""
-#: ../../include/channel.php:48
-msgid "Unable to obtain identity information from database"
+#: ../../addon/flashcards/Mod_Flashcards.php:291
+#: ../../addon/flashcards/Mod_Flashcards.php:292 ../../include/items.php:3816
+#: ../../Zotlabs/Module/Filestorage.php:29
+#: ../../Zotlabs/Module/Admin/Themes.php:72
+#: ../../Zotlabs/Module/Admin/Addons.php:263
+#: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:53
+#: ../../Zotlabs/Module/Display.php:114 ../../Zotlabs/Module/Display.php:392
+#: ../../Zotlabs/Module/Admin.php:61 ../../Zotlabs/Module/Thing.php:96
+msgid "Item not found."
msgstr ""
-#: ../../include/channel.php:81
-msgid "Empty name"
+#: ../../addon/libertree/libertree.php:43
+msgid "Post to Libertree"
msgstr ""
-#: ../../include/channel.php:84
-msgid "Name too long"
+#: ../../addon/libertree/Mod_Libertree.php:25
+msgid "Libertree Crosspost Connector Settings saved."
msgstr ""
-#: ../../include/channel.php:201
-msgid "No account identifier"
+#: ../../addon/libertree/Mod_Libertree.php:49
+msgid "Libertree API token"
msgstr ""
-#: ../../include/channel.php:213 ../../Zotlabs/Module/Register.php:95
-msgid "Nickname is required."
+#: ../../addon/libertree/Mod_Libertree.php:53
+msgid "Libertree site URL"
msgstr ""
-#: ../../include/channel.php:227 ../../include/channel.php:659
-#: ../../Zotlabs/Module/Register.php:100 ../../Zotlabs/Module/Changeaddr.php:46
-msgid "Reserved nickname. Please choose another."
+#: ../../addon/libertree/Mod_Libertree.php:57
+msgid "Post to Libertree by default"
msgstr ""
-#: ../../include/channel.php:232 ../../include/channel.php:664
-#: ../../Zotlabs/Module/Register.php:105 ../../Zotlabs/Module/Changeaddr.php:51
-msgid ""
-"Nickname has unsupported characters or is already being used on this site."
+#: ../../addon/libertree/Mod_Libertree.php:65
+msgid "Libertree Crosspost Connector"
msgstr ""
-#: ../../include/channel.php:292
-msgid "Unable to retrieve created identity"
+#: ../../addon/randpost/randpost.php:99
+msgid "You're welcome."
msgstr ""
-#: ../../include/channel.php:402
-msgid "Default Profile"
+#: ../../addon/randpost/randpost.php:100
+msgid "Ah shucks..."
msgstr ""
-#: ../../include/channel.php:592 ../../include/channel.php:681
-msgid "Unable to retrieve modified identity"
+#: ../../addon/randpost/randpost.php:101
+msgid "Don't mention it."
msgstr ""
-#: ../../include/channel.php:1373
-msgid "Requested channel is not available"
+#: ../../addon/randpost/randpost.php:102
+msgid "&lt;blush&gt;"
msgstr ""
-#: ../../include/channel.php:1427 ../../addon/articles/Mod_Articles.php:46
-#: ../../addon/cards/Mod_Cards.php:42 ../../addon/gallery/Mod_Gallery.php:49
-#: ../../Zotlabs/Module/Profile.php:27 ../../Zotlabs/Module/Connect.php:17
-#: ../../Zotlabs/Module/Layouts.php:31 ../../Zotlabs/Module/Blocks.php:33
-#: ../../Zotlabs/Module/Editlayout.php:31 ../../Zotlabs/Module/Menu.php:92
-#: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Webpages.php:39
-#: ../../Zotlabs/Module/Filestorage.php:59
-#: ../../Zotlabs/Module/Editblock.php:31
-#: ../../Zotlabs/Module/Achievements.php:15
-#: ../../Zotlabs/Module/Editwebpage.php:32
-msgid "Requested profile is not available."
+#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:333
+msgid "Report Bug"
msgstr ""
-#: ../../include/channel.php:1523 ../../Zotlabs/Module/Profiles.php:745
-msgid "Change profile photo"
+#: ../../addon/logrot/logrot.php:36
+msgid "Logfile archive directory"
msgstr ""
-#: ../../include/channel.php:1531
-msgid "Create New Profile"
+#: ../../addon/logrot/logrot.php:36
+msgid "Directory to store rotated logs"
msgstr ""
-#: ../../include/channel.php:1549 ../../Zotlabs/Module/Profiles.php:842
-msgid "Profile Image"
+#: ../../addon/logrot/logrot.php:37
+msgid "Logfile size in bytes before rotating"
msgstr ""
-#: ../../include/channel.php:1552
-msgid "Visible to everybody"
+#: ../../addon/logrot/logrot.php:38
+msgid "Number of logfiles to retain"
msgstr ""
-#: ../../include/channel.php:1553 ../../Zotlabs/Module/Profiles.php:742
-#: ../../Zotlabs/Module/Profiles.php:846
-msgid "Edit visibility"
+#: ../../addon/testdrive/testdrive.php:104
+#, php-format
+msgid "Your account on %s will expire in a few days."
msgstr ""
-#: ../../include/channel.php:1631 ../../include/channel.php:1757
-msgid "Gender:"
+#: ../../addon/testdrive/testdrive.php:105
+msgid "Your test account is about to expire."
msgstr ""
-#: ../../include/channel.php:1632 ../../include/channel.php:1801
-msgid "Status:"
+#: ../../addon/hideaside/Mod_Hideaside.php:28
+msgid "Hide Aside App"
msgstr ""
-#: ../../include/channel.php:1633 ../../include/channel.php:1825
-msgid "Homepage:"
+#: ../../addon/hideaside/Mod_Hideaside.php:29
+msgid "Fade out aside areas after a while when using endless scroll"
msgstr ""
-#: ../../include/channel.php:1634 ../../include/channel.php:1827
-#: ../../Zotlabs/Module/Directory.php:360
-msgid "Hometown:"
+#: ../../addon/skeleton/Mod_Skeleton.php:38
+msgid "Some setting"
msgstr ""
-#: ../../include/channel.php:1635
-msgid "Online Now"
+#: ../../addon/skeleton/Mod_Skeleton.php:38
+msgid "A setting"
msgstr ""
-#: ../../include/channel.php:1685
-msgid "Change your profile photo"
+#: ../../addon/skeleton/Mod_Skeleton.php:46
+msgid "Skeleton Settings"
msgstr ""
-#: ../../include/channel.php:1716
-msgid "Trans"
+#: ../../addon/socialauth/Mod_SocialAuth.php:106
+#: ../../addon/socialauth/Mod_SocialAuth.php:179
+msgid "Network error"
msgstr ""
-#: ../../include/channel.php:1755
-msgid "Full Name:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:110
+#: ../../addon/socialauth/Mod_SocialAuth.php:183
+msgid "API error"
msgstr ""
-#: ../../include/channel.php:1762
-msgid "Like this channel"
+#: ../../addon/socialauth/Mod_SocialAuth.php:114
+#: ../../addon/socialauth/Mod_SocialAuth.php:187
+msgid "Unknown issue"
msgstr ""
-#: ../../include/channel.php:1786
-msgid "j F, Y"
+#: ../../addon/socialauth/Mod_SocialAuth.php:152
+msgid "Unable to retrieve email address from remote identity provider"
msgstr ""
-#: ../../include/channel.php:1787
-msgid "j F"
+#: ../../addon/socialauth/Mod_SocialAuth.php:171
+msgid "Unable to login using email address "
msgstr ""
-#: ../../include/channel.php:1794
-msgid "Birthday:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:211
+msgid "Social Authentication using your social media account"
msgstr ""
-#: ../../include/channel.php:1798 ../../Zotlabs/Module/Directory.php:345
-msgid "Age:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:215
+msgid ""
+"This app enables one or more social provider sign-in buttons on the login "
+"page."
msgstr ""
-#: ../../include/channel.php:1807
-#, php-format
-msgid "for %1$d %2$s"
+#: ../../addon/socialauth/Mod_SocialAuth.php:233
+msgid "Add an identity provider"
msgstr ""
-#: ../../include/channel.php:1819
-msgid "Tags:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:260
+msgid "Enable "
msgstr ""
-#: ../../include/channel.php:1823
-msgid "Sexual Preference:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:267
+msgid "Key"
msgstr ""
-#: ../../include/channel.php:1829
-msgid "Political Views:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:267
+#: ../../addon/socialauth/Mod_SocialAuth.php:272
+#: ../../addon/socialauth/Mod_SocialAuth.php:288
+#: ../../addon/socialauth/Mod_SocialAuth.php:299
+#: ../../addon/socialauth/Mod_SocialAuth.php:308
+msgid "Word"
msgstr ""
-#: ../../include/channel.php:1831
-msgid "Religion:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:272
+msgid "Secret"
msgstr ""
-#: ../../include/channel.php:1833 ../../Zotlabs/Module/Directory.php:362
-msgid "About:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:308
+msgid "Add a custom provider"
msgstr ""
-#: ../../include/channel.php:1835
-msgid "Hobbies/Interests:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:328
+msgid "Remove an identity provider"
msgstr ""
-#: ../../include/channel.php:1837
-msgid "Likes:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:338
+msgid "Social authentication"
msgstr ""
-#: ../../include/channel.php:1839
-msgid "Dislikes:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:380
+msgid "Error while saving provider settings"
msgstr ""
-#: ../../include/channel.php:1841
-msgid "Contact information and Social Networks:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:403
+msgid "Custom provider already exists"
msgstr ""
-#: ../../include/channel.php:1843
-msgid "My other channels:"
+#: ../../addon/socialauth/Mod_SocialAuth.php:420
+msgid "Social authentication settings saved."
msgstr ""
-#: ../../include/channel.php:1845
-msgid "Musical interests:"
+#: ../../addon/nsfw/nsfw.php:153
+msgid "Possible adult content"
msgstr ""
-#: ../../include/channel.php:1847
-msgid "Books, literature:"
+#: ../../addon/nsfw/nsfw.php:168
+#, php-format
+msgid "%s - view"
msgstr ""
-#: ../../include/channel.php:1849
-msgid "Television:"
+#: ../../addon/nsfw/Mod_Nsfw.php:22
+msgid "NSFW Settings saved."
msgstr ""
-#: ../../include/channel.php:1851
-msgid "Film/dance/culture/entertainment:"
+#: ../../addon/nsfw/Mod_Nsfw.php:42
+msgid ""
+"This app looks in posts for the words/text you specify below, and collapses "
+"any content containing those keywords so it is not displayed at "
+"inappropriate times, such as sexual innuendo that may be improper in a work "
+"setting. It is polite and recommended to tag any content containing nudity "
+"with #NSFW. This filter can also match any other word/text you specify, and "
+"can thereby be used as a general purpose content filter."
msgstr ""
-#: ../../include/channel.php:1853
-msgid "Love/Romance:"
+#: ../../addon/nsfw/Mod_Nsfw.php:47
+msgid "Comma separated list of keywords to hide"
msgstr ""
-#: ../../include/channel.php:1855
-msgid "Work/employment:"
+#: ../../addon/nsfw/Mod_Nsfw.php:47
+msgid "Word, /regular-expression/, lang=xx, lang!=xx"
msgstr ""
-#: ../../include/channel.php:1857
-msgid "School/education:"
+#: ../../addon/nsfw/Mod_Nsfw.php:56
+msgid "NSFW"
msgstr ""
-#: ../../include/channel.php:1878 ../../Zotlabs/Lib/Apps.php:367
-#: ../../Zotlabs/Module/Profperm.php:113
-msgid "Profile"
+#: ../../addon/upload_limits/upload_limits.php:25
+msgid "Show Upload Limits"
msgstr ""
-#: ../../include/channel.php:1880
-msgid "Like this thing"
+#: ../../addon/upload_limits/upload_limits.php:27
+msgid "Hubzilla configured maximum size: "
msgstr ""
-#: ../../include/channel.php:1881
-msgid "Export"
+#: ../../addon/upload_limits/upload_limits.php:28
+msgid "PHP upload_max_filesize: "
msgstr ""
-#: ../../include/channel.php:2334 ../../Zotlabs/Module/Cover_photo.php:304
-msgid "cover photo"
+#: ../../addon/upload_limits/upload_limits.php:29
+msgid "PHP post_max_size (must be larger than upload_max_filesize): "
msgstr ""
-#: ../../include/channel.php:2610 ../../Zotlabs/Module/Rmagic.php:97
-msgid "Enter your channel address (e.g. channel@example.com)"
+#: ../../addon/tictac/tictac.php:21
+msgid "Three Dimensional Tic-Tac-Toe"
msgstr ""
-#: ../../include/channel.php:2611 ../../Zotlabs/Module/Rmagic.php:98
-msgid "Authenticate"
+#: ../../addon/tictac/tictac.php:54
+msgid "3D Tic-Tac-Toe"
msgstr ""
-#: ../../include/channel.php:2769 ../../Zotlabs/Module/Admin/Accounts.php:184
-#, php-format
-msgid "Account '%s' deleted"
+#: ../../addon/tictac/tictac.php:59
+msgid "New game"
msgstr ""
-#: ../../include/import.php:30
-msgid "Unable to import a removed channel."
+#: ../../addon/tictac/tictac.php:60
+msgid "New game with handicap"
msgstr ""
-#: ../../include/import.php:56
+#: ../../addon/tictac/tictac.php:61
msgid ""
-"Cannot create a duplicate channel identifier on this system. Import failed."
+"Three dimensional tic-tac-toe is just like the traditional game except that "
+"it is played on multiple levels simultaneously. "
msgstr ""
-#: ../../include/import.php:77 ../../addon/diaspora/import_diaspora.php:43
-msgid "Unable to create a unique channel address. Import failed."
+#: ../../addon/tictac/tictac.php:62
+msgid ""
+"In this case there are three levels. You win by getting three in a row on "
+"any level, as well as up, down, and diagonally across the different levels."
msgstr ""
-#: ../../include/import.php:122
-msgid "Cloned channel not found. Import failed."
+#: ../../addon/tictac/tictac.php:64
+msgid ""
+"The handicap game disables the center position on the middle level because "
+"the player claiming this square often has an unfair advantage."
msgstr ""
-#: ../../addon/qrator/qrator.php:48
-msgid "QR code"
+#: ../../addon/tictac/tictac.php:183
+msgid "You go first..."
msgstr ""
-#: ../../addon/qrator/qrator.php:63
-msgid "QR Generator"
+#: ../../addon/tictac/tictac.php:188
+msgid "I'm going first this time..."
msgstr ""
-#: ../../addon/qrator/qrator.php:64
-msgid "Enter some text"
+#: ../../addon/tictac/tictac.php:194
+msgid "You won!"
msgstr ""
-#: ../../addon/piwik/piwik.php:85
-msgid ""
-"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> "
-"analytics tool."
+#: ../../addon/tictac/tictac.php:200 ../../addon/tictac/tictac.php:225
+msgid "\"Cat\" game!"
msgstr ""
-#: ../../addon/piwik/piwik.php:88
-#, php-format
-msgid ""
-"If you do not want that your visits are logged this way you <a href='%s'>can "
-"set a cookie to prevent Piwik from tracking further visits of the site</a> "
-"(opt-out)."
+#: ../../addon/tictac/tictac.php:223
+msgid "I won!"
msgstr ""
-#: ../../addon/piwik/piwik.php:96
-msgid "Piwik Base URL"
+#: ../../addon/mailtest/mailtest.php:19
+msgid "Send test email"
msgstr ""
-#: ../../addon/piwik/piwik.php:96
-msgid ""
-"Absolute path to your Piwik installation. (without protocol (http/s), with "
-"trailing slash)"
+#: ../../addon/mailtest/mailtest.php:66
+msgid "Mail sent."
msgstr ""
-#: ../../addon/piwik/piwik.php:97
-msgid "Site ID"
+#: ../../addon/mailtest/mailtest.php:68
+msgid "Sending of mail failed."
msgstr ""
-#: ../../addon/piwik/piwik.php:98
-msgid "Show opt-out cookie link?"
+#: ../../addon/mailtest/mailtest.php:77
+msgid "Mail Test"
msgstr ""
-#: ../../addon/piwik/piwik.php:99
-msgid "Asynchronous tracking"
+#: ../../addon/ljpost/Mod_Ljpost.php:53
+msgid "Livejournal username"
msgstr ""
-#: ../../addon/piwik/piwik.php:100
-msgid "Enable frontend JavaScript error tracking"
+#: ../../addon/ljpost/Mod_Ljpost.php:57
+msgid "Livejournal password"
msgstr ""
-#: ../../addon/piwik/piwik.php:100
-msgid "This feature requires Piwik >= 2.2.0"
+#: ../../addon/ljpost/Mod_Ljpost.php:61
+msgid "Post to Livejournal by default"
msgstr ""
-#: ../../addon/piwik/piwik.php:116 ../../addon/twitter/twitter.php:493
-#: ../../addon/xmpp/xmpp.php:54 ../../addon/rendezvous/rendezvous.php:82
-#: ../../addon/openstreetmap/openstreetmap.php:171
-#: ../../addon/logrot/logrot.php:54 ../../addon/msgfooter/msgfooter.php:54
-#: ../../addon/diaspora/diaspora.php:105
-#: ../../Zotlabs/Module/Settings/Channel.php:150
-#: ../../Zotlabs/Module/Defperms.php:111
-msgid "Settings updated."
+#: ../../addon/ljpost/Mod_Ljpost.php:65
+msgid "Send wall-to-wall posts to Livejournal"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:19
-msgid "Send email to all members"
+#: ../../addon/ljpost/Mod_Ljpost.php:77
+msgid "Livejournal Crosspost Connector"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:65
-#, php-format
-msgid "%s Administrator"
+#: ../../addon/ljpost/ljpost.php:49
+msgid "Post to Livejournal"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:50 ../../addon/mailtest/mailtest.php:50
-msgid "No recipients found."
+#: ../../addon/ljpost/ljpost.php:127
+msgid "Posted by"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:73
-#, php-format
-msgid "%1$d of %2$d messages sent."
+#: ../../addon/mdpost/mdpost.php:42
+msgid "Use markdown for editing posts"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:81
-msgid "Send email to all hub members."
+#: ../../addon/articles/Mod_Article_edit.php:127
+msgid "Edit Article"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:92 ../../addon/mailtest/mailtest.php:96
-msgid "Message subject"
+#: ../../addon/articles/articles.php:48 ../../addon/articles/articles.php:160
+#: ../../addon/articles/Mod_Articles.php:228 ../../Zotlabs/Lib/Apps.php:330
+msgid "Articles"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:93
-msgid "Sender Email address"
+#: ../../addon/articles/articles.php:51
+msgid "View Articles"
msgstr ""
-#: ../../addon/hubwall/hubwall.php:94
-msgid "Test mode (only send to hub administrator)"
+#: ../../addon/articles/Mod_Articles.php:119
+msgid "Add Article"
msgstr ""
-#: ../../addon/testdrive/testdrive.php:104
-#, php-format
-msgid "Your account on %s will expire in a few days."
+#: ../../addon/hzfiles/hzfiles.php:81
+msgid "Hubzilla File Storage Import"
msgstr ""
-#: ../../addon/testdrive/testdrive.php:105
-msgid "Your test account is about to expire."
+#: ../../addon/hzfiles/hzfiles.php:82
+msgid "This will import all your cloud files from another server."
msgstr ""
-#: ../../addon/gravatar/gravatar.php:123
-msgid "generic profile image"
+#: ../../addon/hzfiles/hzfiles.php:83
+msgid "Hubzilla Server base URL"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:124
-msgid "random geometric pattern"
+#: ../../addon/authchoose/Mod_Authchoose.php:30
+msgid ""
+"Allow magic authentication only to websites of your immediate connections"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:125
-msgid "monster face"
+#: ../../addon/authchoose/Mod_Authchoose.php:36
+msgid "Authchoose"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:126
-msgid "computer generated face"
+#: ../../addon/pageheader/Mod_Pageheader.php:22
+msgid "pageheader Settings saved."
msgstr ""
-#: ../../addon/gravatar/gravatar.php:127
-msgid "retro arcade style face"
+#: ../../addon/pageheader/Mod_Pageheader.php:41
+msgid "Message to display on every page on this server"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:128
-msgid "Hub default profile photo"
+#: ../../addon/pageheader/Mod_Pageheader.php:49
+msgid "Page Header"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:143
-msgid "Information"
+#: ../../addon/irc/Mod_Irc.php:23 ../../addon/irc/irc.php:41
+msgid "Popular Channels"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:143
-msgid ""
-"Libravatar addon is installed, too. Please disable Libravatar addon or this "
-"Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if "
-"nothing was found at Libravatar."
+#: ../../addon/irc/irc.php:37
+msgid "Channels to auto connect"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:150 ../../addon/xmpp/xmpp.php:43
-#: ../../addon/msgfooter/msgfooter.php:46
-msgid "Save Settings"
+#: ../../addon/irc/irc.php:37 ../../addon/irc/irc.php:41
+msgid "Comma separated list"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:151
-msgid "Default avatar image"
+#: ../../addon/irc/irc.php:45
+msgid "IRC Settings"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:151
-msgid "Select default avatar image if none was found at Gravatar. See README"
+#: ../../addon/irc/irc.php:54
+msgid "IRC settings saved."
msgstr ""
-#: ../../addon/gravatar/gravatar.php:152
-msgid "Rating of images"
+#: ../../addon/irc/irc.php:58
+msgid "IRC Chatroom"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:152
-msgid "Select the appropriate avatar rating for your site. See README"
+#: ../../addon/xmpp/xmpp.php:44
+msgid "Jabber BOSH host"
msgstr ""
-#: ../../addon/gravatar/gravatar.php:165
-msgid "Gravatar settings updated."
+#: ../../addon/xmpp/xmpp.php:45
+msgid "Use central userbase"
msgstr ""
-#: ../../addon/pageheader/Mod_Pageheader.php:22
-msgid "pageheader Settings saved."
+#: ../../addon/xmpp/xmpp.php:45
+msgid ""
+"If enabled, members will automatically login to an ejabberd server that has "
+"to be installed on this machine with synchronized credentials via the "
+"\"auth_ejabberd.php\" script."
msgstr ""
-#: ../../addon/pageheader/Mod_Pageheader.php:41
-msgid "Message to display on every page on this server"
+#: ../../addon/xmpp/Mod_Xmpp.php:23
+msgid "XMPP settings updated."
msgstr ""
-#: ../../addon/pageheader/Mod_Pageheader.php:49
-msgid "Page Header"
+#: ../../addon/xmpp/Mod_Xmpp.php:35
+msgid "XMPP App"
msgstr ""
-#: ../../addon/mdpost/mdpost.php:42
-msgid "Use markdown for editing posts"
+#: ../../addon/xmpp/Mod_Xmpp.php:36
+msgid "Embedded XMPP (Jabber) client"
msgstr ""
-#: ../../addon/ldapauth/ldapauth.php:101
-msgid "An account has been created for you."
+#: ../../addon/xmpp/Mod_Xmpp.php:52
+msgid "Individual credentials"
msgstr ""
-#: ../../addon/ldapauth/ldapauth.php:108
-msgid "Authentication successful but rejected: account creation is disabled."
+#: ../../addon/xmpp/Mod_Xmpp.php:58
+msgid "Jabber BOSH server"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:65
-msgid "Twitter settings updated."
+#: ../../addon/xmpp/Mod_Xmpp.php:67
+msgid "XMPP Settings"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:101
-msgid ""
-"No consumer key pair for Twitter found. Please contact your site "
-"administrator."
+#: ../../include/text.php:547
+msgid "prev"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:123
-msgid ""
-"At this Hubzilla instance the Twitter plugin was enabled but you have not "
-"yet connected your account to your Twitter account. To do so click the "
-"button below to get a PIN from Twitter which you have to copy into the input "
-"box below and submit the form. Only your <strong>public</strong> posts will "
-"be posted to Twitter."
+#: ../../include/text.php:549
+msgid "first"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:125
-msgid "Log in with Twitter"
+#: ../../include/text.php:578
+msgid "last"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:128
-msgid "Copy the PIN from Twitter here"
+#: ../../include/text.php:581
+msgid "next"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:145
-#: ../../addon/statusnet/Mod_Statusnet.php:270
-msgid "Currently connected to: "
+#: ../../include/text.php:599
+msgid "older"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:150
-msgid ""
-"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile "
-"details from unknown viewers?</em>) the link potentially included in public "
-"postings relayed to Twitter will lead the visitor to a blank page informing "
-"the visitor that the access to your profile has been restricted."
+#: ../../include/text.php:601
+msgid "newer"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:155
-msgid "Twitter post length"
+#: ../../include/text.php:1056 ../../include/features.php:133
+#: ../../Zotlabs/Module/Connections.php:399 ../../Zotlabs/Lib/Apps.php:338
+msgid "Connections"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:155
-msgid "Maximum tweet length"
+#: ../../include/text.php:1064 ../../Zotlabs/Module/Viewconnections.php:80
+#: ../../Zotlabs/Module/Connections.php:306
+msgid "Accepts"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:160
-msgid "Send public postings to Twitter by default"
+#: ../../include/text.php:1067 ../../Zotlabs/Module/Viewconnections.php:83
+#: ../../Zotlabs/Module/Connections.php:309
+msgid "Comments"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:160
-msgid ""
-"If enabled your public postings will be posted to the associated Twitter "
-"account by default"
+#: ../../include/text.php:1072 ../../Zotlabs/Module/Viewconnections.php:88
+#: ../../Zotlabs/Module/Connections.php:314
+msgid "Stream items"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:169
-#: ../../addon/statusnet/Mod_Statusnet.php:289
-msgid "Clear OAuth configuration"
+#: ../../include/text.php:1077 ../../Zotlabs/Module/Viewconnections.php:93
+#: ../../Zotlabs/Module/Connections.php:319
+msgid "Wall posts"
msgstr ""
-#: ../../addon/twitter/Mod_Twitter.php:179
-msgid "Twitter Crosspost Connector"
+#: ../../include/text.php:1081 ../../Zotlabs/Module/Viewconnections.php:97
+#: ../../Zotlabs/Module/Connections.php:323
+msgid "Nothing"
msgstr ""
-#: ../../addon/twitter/twitter.php:109
-msgid "Post to Twitter"
+#: ../../include/text.php:1094
+#, php-format
+msgid "View all %s connections"
msgstr ""
-#: ../../addon/twitter/twitter.php:502 ../../addon/rendezvous/rendezvous.php:95
-msgid "Submit Settings"
+#: ../../include/text.php:1157
+#, php-format
+msgid "Network: %s"
msgstr ""
-#: ../../addon/twitter/twitter.php:504 ../../addon/statusnet/statusnet.php:596
-#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:138
-msgid "Consumer Key"
+#: ../../include/text.php:1168 ../../include/text.php:1180
+#: ../../include/nav.php:195 ../../include/acl_selectors.php:149
+#: ../../Zotlabs/Widget/Sitesearch.php:37
+#: ../../Zotlabs/Widget/Activity_filter.php:210
+#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:403
+#: ../../Zotlabs/Lib/Apps.php:358
+msgid "Search"
msgstr ""
-#: ../../addon/twitter/twitter.php:505 ../../addon/statusnet/statusnet.php:595
-#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
-#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:139
-msgid "Consumer Secret"
+#: ../../include/text.php:1260
+msgid "poke"
msgstr ""
-#: ../../addon/planets/Mod_Planets.php:23
-msgid "Random Planet App"
+#: ../../include/text.php:1260 ../../include/conversation.php:277
+msgid "poked"
msgstr ""
-#: ../../addon/planets/Mod_Planets.php:25
-msgid ""
-"Set a random planet from the Star Wars Empire as your location when posting"
+#: ../../include/text.php:1261
+msgid "ping"
msgstr ""
-#: ../../addon/startpage/Mod_Startpage.php:60
-msgid "Page to load after login"
+#: ../../include/text.php:1261
+msgid "pinged"
msgstr ""
-#: ../../addon/startpage/Mod_Startpage.php:60
-msgid ""
-"Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy "
-"collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave "
-"blank for default network page (grid)."
+#: ../../include/text.php:1290
+msgid "happy"
msgstr ""
-#: ../../addon/startpage/Mod_Startpage.php:68
-msgid "Startpage"
+#: ../../include/text.php:1291
+msgid "sad"
msgstr ""
-#: ../../addon/hsse/Mod_Hsse.php:15
-msgid "WYSIWYG status editor"
+#: ../../include/text.php:1292
+msgid "mellow"
msgstr ""
-#: ../../addon/hsse/Mod_Hsse.php:24
-msgid "WYSIWYG Status App"
+#: ../../include/text.php:1293
+msgid "tired"
msgstr ""
-#: ../../addon/hsse/Mod_Hsse.php:32
-msgid "WYSIWYG Status"
+#: ../../include/text.php:1294
+msgid "perky"
msgstr ""
-#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1647
-#: ../../Zotlabs/Module/Like.php:445 ../../Zotlabs/Module/Subthread.php:115
-msgid "status"
+#: ../../include/text.php:1295
+msgid "angry"
msgstr ""
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:25
-msgid "ActivityPub Protocol Settings updated."
+#: ../../include/text.php:1296
+msgid "stupefied"
msgstr ""
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:41
-msgid ""
-"The activitypub protocol does not support location independence. Connections "
-"you make within that network may be unreachable from alternate channel "
-"locations."
+#: ../../include/text.php:1297
+msgid "puzzled"
msgstr ""
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
-msgid "Deliver to ActivityPub recipients in privacy groups"
+#: ../../include/text.php:1298
+msgid "interested"
msgstr ""
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
-msgid ""
-"May result in a large number of mentions and expose all the members of your "
-"privacy group"
+#: ../../include/text.php:1299
+msgid "bitter"
msgstr ""
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
-msgid "Send multi-media HTML articles"
+#: ../../include/text.php:1300
+msgid "cheerful"
msgstr ""
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
-msgid "Not supported by some microblog services such as Mastodon"
+#: ../../include/text.php:1301
+msgid "alive"
msgstr ""
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:59
-msgid "Activitypub Protocol"
+#: ../../include/text.php:1302
+msgid "annoyed"
msgstr ""
-#: ../../addon/fediwordle/Mod_Fediwordle.php:22
-msgid "Fediwordle App"
+#: ../../include/text.php:1303
+msgid "anxious"
msgstr ""
-#: ../../addon/fediwordle/Mod_Fediwordle.php:23
-msgid "A distributed word game inspired by wordle."
+#: ../../include/text.php:1304
+msgid "cranky"
msgstr ""
-#: ../../addon/fediwordle/Mod_Fediwordle.php:24
-msgid ""
-"To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel "
-"post."
+#: ../../include/text.php:1305
+msgid "disturbed"
msgstr ""
-#: ../../addon/fediwordle/Mod_Fediwordle.php:25
-msgid "Your contacts can post their guess in the comments."
+#: ../../include/text.php:1306
+msgid "frustrated"
msgstr ""
-#: ../../addon/fediwordle/Mod_Fediwordle.php:26
-msgid ""
-"Your channel will evaluate the guess and automatically post the response."
+#: ../../include/text.php:1307
+msgid "depressed"
msgstr ""
-#: ../../addon/fediwordle/Mod_Fediwordle.php:28
-msgid "Correct letters"
+#: ../../include/text.php:1308
+msgid "motivated"
msgstr ""
-#: ../../addon/fediwordle/Mod_Fediwordle.php:29
-msgid "Letters contained in the word but at the wrong spot"
+#: ../../include/text.php:1309
+msgid "relaxed"
msgstr ""
-#: ../../addon/fediwordle/Mod_Fediwordle.php:30
-msgid "Letters not contained in the word"
+#: ../../include/text.php:1310
+msgid "surprised"
msgstr ""
-#: ../../addon/fediwordle/fediwordle.php:211
-msgid "ERROR: word length is not correct!"
+#: ../../include/text.php:1498 ../../include/js_strings.php:100
+msgid "Monday"
msgstr ""
-#: ../../addon/notifyadmin/notifyadmin.php:34
-msgid "New registration"
+#: ../../include/text.php:1498 ../../include/js_strings.php:101
+msgid "Tuesday"
msgstr ""
-#: ../../addon/notifyadmin/notifyadmin.php:40
-#: ../../Zotlabs/Module/Invite.php:265
-#, php-format
-msgid "%s : Message delivery failed."
+#: ../../include/text.php:1498 ../../include/js_strings.php:102
+msgid "Wednesday"
msgstr ""
-#: ../../addon/notifyadmin/notifyadmin.php:42
-#, php-format
-msgid "Message sent to %s. New account registration: %s"
+#: ../../include/text.php:1498 ../../include/js_strings.php:103
+msgid "Thursday"
msgstr ""
-#: ../../addon/libertree/Mod_Libertree.php:25
-msgid "Libertree Crosspost Connector Settings saved."
+#: ../../include/text.php:1498 ../../include/js_strings.php:104
+msgid "Friday"
msgstr ""
-#: ../../addon/libertree/Mod_Libertree.php:49
-msgid "Libertree API token"
+#: ../../include/text.php:1498 ../../include/js_strings.php:105
+msgid "Saturday"
msgstr ""
-#: ../../addon/libertree/Mod_Libertree.php:53
-msgid "Libertree site URL"
+#: ../../include/text.php:1498 ../../include/js_strings.php:99
+msgid "Sunday"
msgstr ""
-#: ../../addon/libertree/Mod_Libertree.php:57
-msgid "Post to Libertree by default"
+#: ../../include/text.php:1502 ../../include/js_strings.php:75
+msgid "January"
msgstr ""
-#: ../../addon/libertree/Mod_Libertree.php:65
-msgid "Libertree Crosspost Connector"
+#: ../../include/text.php:1502 ../../include/js_strings.php:76
+msgid "February"
msgstr ""
-#: ../../addon/libertree/libertree.php:43
-msgid "Post to Libertree"
+#: ../../include/text.php:1502 ../../include/js_strings.php:77
+msgid "March"
msgstr ""
-#: ../../addon/nofed/Mod_Nofed.php:21
-msgid "nofed Settings saved."
+#: ../../include/text.php:1502 ../../include/js_strings.php:78
+msgid "April"
msgstr ""
-#: ../../addon/nofed/Mod_Nofed.php:40
-msgid "Federate posts by default"
+#: ../../include/text.php:1502
+msgid "May"
msgstr ""
-#: ../../addon/nofed/Mod_Nofed.php:48
-msgid "No Federation"
+#: ../../include/text.php:1502 ../../include/js_strings.php:80
+msgid "June"
msgstr ""
-#: ../../addon/nofed/nofed.php:47
-msgid "Federate"
+#: ../../include/text.php:1502 ../../include/js_strings.php:81
+msgid "July"
msgstr ""
-#: ../../addon/wholikesme/wholikesme.php:29
-msgid "Who likes me?"
+#: ../../include/text.php:1502 ../../include/js_strings.php:82
+msgid "August"
msgstr ""
-#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:333
-msgid "Report Bug"
+#: ../../include/text.php:1502 ../../include/js_strings.php:83
+msgid "September"
msgstr ""
-#: ../../addon/sendzid/Mod_Sendzid.php:21
-msgid "Send your identity to all websites"
+#: ../../include/text.php:1502 ../../include/js_strings.php:84
+msgid "October"
msgstr ""
-#: ../../addon/sendzid/Mod_Sendzid.php:29
-msgid "Send ZID"
+#: ../../include/text.php:1502 ../../include/js_strings.php:85
+msgid "November"
msgstr ""
-#: ../../addon/workflow/workflow.php:222
-msgid "Workflow user."
+#: ../../include/text.php:1502 ../../include/js_strings.php:86
+msgid "December"
msgstr ""
-#: ../../addon/workflow/workflow.php:272
-msgid "This channel"
+#: ../../include/text.php:1568
+msgid "Unknown Attachment"
msgstr ""
-#: ../../addon/workflow/workflow.php:285 ../../Zotlabs/Module/Locs.php:123
-msgid "Primary"
+#: ../../include/text.php:1570 ../../Zotlabs/Module/Sharedwithme.php:109
+#: ../../Zotlabs/Storage/Browser.php:382
+msgid "Size"
msgstr ""
-#: ../../addon/workflow/workflow.php:327
-msgid "Create New Workflow Item"
+#: ../../include/text.php:1570 ../../include/feedutils.php:871
+msgid "unknown"
msgstr ""
-#: ../../addon/workflow/workflow.php:546 ../../addon/workflow/workflow.php:1442
-#: ../../addon/workflow/workflow.php:1461
-msgid "Workflow"
+#: ../../include/text.php:1613
+msgid "remove category"
msgstr ""
-#: ../../addon/workflow/workflow.php:1430
-msgid "No Workflows Available"
+#: ../../include/text.php:1690
+msgid "remove from file"
msgstr ""
-#: ../../addon/workflow/workflow.php:1460
-msgid "Add item to which workflow"
+#: ../../include/text.php:1877
+msgid "Download binary/encrypted content"
msgstr ""
-#: ../../addon/workflow/workflow.php:1520
-#: ../../addon/workflow/workflow.php:1639
-msgid "Create Workflow Item"
-msgstr ""
+#: ../../include/text.php:1935 ../../include/text.php:1944
+#: ../../include/text.php:1971 ../../include/text.php:1980
+#, php-format
+msgctxt "noun"
+msgid "%d Vote"
+msgid_plural "%d Votes"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/workflow/workflow.php:2601
-msgid "Link"
-msgstr ""
+#: ../../include/text.php:1987
+#, php-format
+msgctxt "noun"
+msgid "%d Vote in total"
+msgid_plural "%d Votes in total"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/workflow/workflow.php:2603
-msgid "Web link."
+#: ../../include/text.php:1993
+msgid "Poll has ended"
msgstr ""
-#: ../../addon/workflow/workflow.php:2622
-#: ../../addon/workflow/workflow.php:2683 ../../Zotlabs/Module/Connedit.php:734
-#: ../../Zotlabs/Module/Cdav.php:1376
-msgid "Title"
+#: ../../include/text.php:1996
+#, php-format
+msgid "Poll ends in %s"
msgstr ""
-#: ../../addon/workflow/workflow.php:2624
-#: ../../addon/workflow/workflow.php:2685
-msgid "Brief description or title"
+#: ../../include/text.php:2003 ../../Zotlabs/Lib/ThreadItem.php:446
+msgid "Vote"
msgstr ""
-#: ../../addon/workflow/workflow.php:2630 ../../Zotlabs/Lib/Apps.php:375
-#: ../../Zotlabs/Widget/Notes.php:38
-msgid "Notes"
+#: ../../include/text.php:2158
+msgid "Link to Source"
msgstr ""
-#: ../../addon/workflow/workflow.php:2632
-#: ../../addon/workflow/workflow.php:2693
-msgid "Notes and Info"
+#: ../../include/text.php:2183 ../../include/language.php:433
+msgid "default"
msgstr ""
-#: ../../addon/workflow/workflow.php:2691
-msgid "Body"
+#: ../../include/text.php:2191
+msgid "Page layout"
msgstr ""
-#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:101
-msgid "Workflow Settings"
+#: ../../include/text.php:2191
+msgid "You can create your own with the layouts tool"
msgstr ""
-#: ../../addon/hideaside/Mod_Hideaside.php:28
-msgid "Hide Aside App"
+#: ../../include/text.php:2202
+msgid "HTML"
msgstr ""
-#: ../../addon/hideaside/Mod_Hideaside.php:29
-msgid "Fade out aside areas after a while when using endless scroll"
+#: ../../include/text.php:2205
+msgid "Comanche Layout"
msgstr ""
-#: ../../addon/xmpp/xmpp.php:44
-msgid "Jabber BOSH host"
+#: ../../include/text.php:2210
+msgid "PHP"
msgstr ""
-#: ../../addon/xmpp/xmpp.php:45
-msgid "Use central userbase"
+#: ../../include/text.php:2222
+msgid "Page content type"
msgstr ""
-#: ../../addon/xmpp/xmpp.php:45
-msgid ""
-"If enabled, members will automatically login to an ejabberd server that has "
-"to be installed on this machine with synchronized credentials via the "
-"\"auth_ejabberd.php\" script."
+#: ../../include/text.php:2345 ../../include/event.php:1356
+#: ../../include/conversation.php:142
+#: ../../Zotlabs/Module/Channel_calendar.php:221
+#: ../../Zotlabs/Module/Like.php:447 ../../Zotlabs/Module/Tagger.php:75
+msgid "event"
msgstr ""
-#: ../../addon/xmpp/Mod_Xmpp.php:23
-msgid "XMPP settings updated."
+#: ../../include/text.php:2348 ../../include/conversation.php:168
+#: ../../include/bbcode.php:564 ../../include/markdown.php:208
+#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3607
+msgid "post"
msgstr ""
-#: ../../addon/xmpp/Mod_Xmpp.php:35
-msgid "XMPP App"
+#: ../../include/text.php:2350 ../../include/conversation.php:170
+#: ../../Zotlabs/Module/Tagger.php:81
+msgid "comment"
msgstr ""
-#: ../../addon/xmpp/Mod_Xmpp.php:35 ../../addon/ijpost/Mod_Ijpost.php:35
-#: ../../Zotlabs/Module/Lang.php:20 ../../Zotlabs/Module/Invite.php:69
-msgid "Not Installed"
+#: ../../include/text.php:2355
+msgid "activity"
msgstr ""
-#: ../../addon/xmpp/Mod_Xmpp.php:36
-msgid "Embedded XMPP (Jabber) client"
+#: ../../include/text.php:2358
+msgid "poll"
msgstr ""
-#: ../../addon/xmpp/Mod_Xmpp.php:52
-msgid "Individual credentials"
+#: ../../include/text.php:2471
+msgid "a-z, 0-9, -, and _ only"
msgstr ""
-#: ../../addon/xmpp/Mod_Xmpp.php:58
-msgid "Jabber BOSH server"
+#: ../../include/text.php:2776
+msgid "Design Tools"
msgstr ""
-#: ../../addon/xmpp/Mod_Xmpp.php:67
-msgid "XMPP Settings"
+#: ../../include/text.php:2779 ../../Zotlabs/Module/Blocks.php:152
+msgid "Blocks"
msgstr ""
-#: ../../addon/visage/Mod_Visage.php:23
-msgid "Recent Channel/Profile Viewers"
+#: ../../include/text.php:2780 ../../Zotlabs/Module/Menu.php:171
+msgid "Menus"
msgstr ""
-#: ../../addon/visage/Mod_Visage.php:34
-msgid "No entries."
+#: ../../include/text.php:2781 ../../Zotlabs/Module/Layouts.php:182
+msgid "Layouts"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:57
-msgid "Errors encountered deleting database table "
+#: ../../include/text.php:2782
+msgid "Pages"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:96
-msgid "Drop tables when uninstalling?"
+#: ../../include/text.php:2794
+msgid "Import"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:96
-msgid ""
-"If checked, the Rendezvous database tables will be deleted when the plugin "
-"is uninstalled."
+#: ../../include/text.php:2795
+msgid "Import website..."
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:97
-msgid "Mapbox Access Token"
+#: ../../include/text.php:2796
+msgid "Select folder to import"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:97
-msgid ""
-"If you enter a Mapbox access token, it will be used to retrieve map tiles "
-"from Mapbox instead of the default OpenStreetMap tile server."
+#: ../../include/text.php:2797
+msgid "Import from a zipped folder:"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:162
-msgid "Rendezvous"
+#: ../../include/text.php:2798
+msgid "Import from cloud files:"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:167
-msgid ""
-"This identity has been deleted by another member due to inactivity. Please "
-"press the \"New identity\" button or refresh the page to register a new "
-"identity. You may use the same name."
+#: ../../include/text.php:2799
+msgid "/cloud/channel/path/to/folder"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:168
-msgid "Welcome to Rendezvous!"
+#: ../../include/text.php:2800
+msgid "Enter path to website files"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:169
-msgid ""
-"Enter your name to join this rendezvous. To begin sharing your location with "
-"the other members, tap the GPS control. When your location is discovered, a "
-"red dot will appear and others will be able to see you on the map."
+#: ../../include/text.php:2801
+msgid "Select folder"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:171
-msgid "Let's meet here"
+#: ../../include/text.php:2802
+msgid "Export website..."
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:172 ../../addon/wiki/Mod_Wiki.php:221
-#: ../../addon/wiki/Lib/NativeWikiPage.php:588
-#: ../../addon/wiki/Widget/Wiki_page_history.php:28
-#: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Oauth2.php:144
-#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth.php:137
-#: ../../Zotlabs/Module/Chat.php:256 ../../Zotlabs/Module/Connedit.php:732
-#: ../../Zotlabs/Module/Admin/Channels.php:159
-#: ../../Zotlabs/Module/Cdav.php:1374 ../../Zotlabs/Module/Sharedwithme.php:107
-#: ../../Zotlabs/Storage/Browser.php:380
-msgid "Name"
+#: ../../include/text.php:2803
+msgid "Export to a zip file"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:173
-#: ../../addon/cart/submodules/hzservices.php:657
-#: ../../addon/cart/submodules/manualcat.php:260
-#: ../../Zotlabs/Module/Appman.php:210 ../../Zotlabs/Module/Cdav.php:1015
-#: ../../Zotlabs/Module/Rbmark.php:100
-msgid "Description"
+#: ../../include/text.php:2804
+msgid "website.zip"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:174
-msgid "New marker"
+#: ../../include/text.php:2805
+msgid "Enter a name for the zip file."
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:175
-msgid "Edit marker"
+#: ../../include/text.php:2806
+msgid "Export to cloud files"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:176
-msgid "New identity"
+#: ../../include/text.php:2807
+msgid "/path/to/export/folder"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:177
-msgid "Delete marker"
+#: ../../include/text.php:2808
+msgid "Enter a path to a cloud files destination."
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:178
-msgid "Delete member"
+#: ../../include/text.php:2809
+msgid "Specify folder"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:179
-msgid "Edit proximity alert"
+#: ../../include/opengraph.php:56
+#, php-format
+msgid "This is the home page of %s."
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:180
-msgid ""
-"A proximity alert will be issued when this member is within a certain radius "
-"of you.<br><br>Enter a radius in meters (0 to disable):"
+#: ../../include/event.php:33 ../../include/event.php:128
+msgid "l F d, Y \\@ g:i A"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:180
-#: ../../addon/rendezvous/rendezvous.php:185
-msgid "distance"
+#: ../../include/event.php:41
+msgid "Starts:"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:181
-msgid "Proximity alert distance (meters)"
+#: ../../include/event.php:51
+msgid "Finishes:"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:182
-#: ../../addon/rendezvous/rendezvous.php:184
-msgid ""
-"A proximity alert will be issued when you are within a certain radius of the "
-"marker location.<br><br>Enter a radius in meters (0 to disable):"
+#: ../../include/event.php:63 ../../include/event.php:153
+#: ../../include/channel.php:1627 ../../Zotlabs/Module/Directory.php:350
+msgid "Location:"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:183
-msgid "Marker proximity alert"
+#: ../../include/event.php:128
+msgid "l F d, Y"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:186
-msgid "Reminder note"
+#: ../../include/event.php:132
+msgid "Start:"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:187
-msgid ""
-"Enter a note to be displayed when you are within the specified proximity..."
+#: ../../include/event.php:136
+msgid "End:"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:199
-msgid "Add new rendezvous"
+#: ../../include/event.php:1202
+msgid "This event has been added to your calendar."
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:200
-msgid ""
-"Create a new rendezvous and share the access link with those you wish to "
-"invite to the group. Those who open the link become members of the "
-"rendezvous. They can view other member locations, add markers to the map, or "
-"share their own locations with the group."
+#: ../../include/event.php:1435
+msgid "Not specified"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:232
-msgid "You have no rendezvous. Press the button above to create a rendezvous!"
+#: ../../include/event.php:1436
+msgid "Needs Action"
msgstr ""
-#: ../../addon/rendezvous/rendezvous.php:401 ../../Zotlabs/Module/Setup.php:730
-msgid "Errors encountered creating database tables."
+#: ../../include/event.php:1437
+msgid "Completed"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:101
-#: ../../addon/channelreputation/channelreputation.php:102
-#: ../../addon/cart/myshop.php:144 ../../addon/cart/myshop.php:180
-#: ../../addon/cart/myshop.php:214 ../../addon/cart/myshop.php:261
-#: ../../addon/cart/myshop.php:296 ../../addon/cart/myshop.php:319
-msgid "Access Denied"
+#: ../../include/event.php:1438
+msgid "In Process"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:109
-msgid "Enable Community Moderation"
+#: ../../include/event.php:1439
+msgid "Cancelled"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:117
-msgid "Reputation automatically given to new members"
+#: ../../include/event.php:1520 ../../include/connections.php:752
+#: ../../Zotlabs/Module/Cdav.php:1373 ../../Zotlabs/Module/Connedit.php:741
+msgid "Mobile"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:118
-msgid "Reputation will never fall below this value"
+#: ../../include/event.php:1521 ../../include/connections.php:753
+#: ../../Zotlabs/Widget/Notifications.php:43 ../../Zotlabs/Module/Cdav.php:1374
+#: ../../Zotlabs/Module/Connedit.php:742
+msgid "Home"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:119
-msgid "Minimum reputation before posting is allowed"
+#: ../../include/event.php:1522 ../../include/connections.php:754
+msgid "Home, Voice"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:120
-msgid "Minimum reputation before commenting is allowed"
+#: ../../include/event.php:1523 ../../include/connections.php:755
+msgid "Home, Fax"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:121
-msgid "Minimum reputation before a member is able to moderate other posts"
+#: ../../include/event.php:1524 ../../include/connections.php:756
+#: ../../Zotlabs/Module/Cdav.php:1375 ../../Zotlabs/Module/Connedit.php:743
+msgid "Work"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:122
-msgid ""
-"Max ratio of moderator's reputation that can be added to/deducted from "
-"reputation of person being moderated"
+#: ../../include/event.php:1525 ../../include/connections.php:757
+msgid "Work, Voice"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:123
-msgid "Reputation \"cost\" to post"
+#: ../../include/event.php:1526 ../../include/connections.php:758
+msgid "Work, Fax"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:124
-msgid "Reputation \"cost\" to comment"
+#: ../../include/event.php:1527 ../../include/event.php:1534
+#: ../../include/selectors.php:64 ../../include/selectors.php:81
+#: ../../include/selectors.php:119 ../../include/selectors.php:155
+#: ../../include/connections.php:759 ../../include/connections.php:766
+#: ../../Zotlabs/Module/Cdav.php:1376 ../../Zotlabs/Module/Connedit.php:744
+#: ../../Zotlabs/Access/PermissionRoles.php:360
+msgid "Other"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:125
-msgid ""
-"Reputation automatically recovers at this rate per hour until it reaches "
-"minimum_to_post"
+#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../Zotlabs/Module/Admin/Features.php:56
+#: ../../Zotlabs/Module/Settings/Features.php:38
+msgid "Off"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:126
-msgid ""
-"When minimum_to_moderate > reputation > minimum_to_post reputation recovers "
-"at this rate per hour"
+#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../Zotlabs/Module/Admin/Features.php:56
+#: ../../Zotlabs/Module/Settings/Features.php:38
+msgid "On"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:140
-msgid "Community Moderation Settings"
+#: ../../include/features.php:82 ../../include/nav.php:473
+#: ../../include/nav.php:476 ../../Zotlabs/Lib/Apps.php:351
+msgid "Calendar"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:232
-msgid "Channel Reputation"
+#: ../../include/features.php:86
+msgid "Start calendar week on Monday"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:236
-msgid "An Error has occurred."
+#: ../../include/features.php:87
+msgid "Default is Sunday"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:254
-msgid "Upvote"
+#: ../../include/features.php:94
+msgid "Event Timezone Selection"
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:255
-msgid "Downvote"
+#: ../../include/features.php:95
+msgid "Allow event creation in timezones other than your own."
msgstr ""
-#: ../../addon/channelreputation/channelreputation.php:414
-msgid "Can moderate reputation on my channel."
+#: ../../include/features.php:104
+msgid "Channel Home"
msgstr ""
-#: ../../addon/bookmarker/bookmarker.php:38
-#: ../../Zotlabs/Lib/ThreadItem.php:474
-msgid "Save Bookmarks"
+#: ../../include/features.php:108
+msgid "Search by Date"
msgstr ""
-#: ../../addon/donate/donate.php:21
-msgid "Project Servers and Resources"
+#: ../../include/features.php:109
+msgid "Ability to select posts by date ranges"
msgstr ""
-#: ../../addon/donate/donate.php:22
-msgid "Project Creator and Tech Lead"
+#: ../../include/features.php:116
+msgid "Tag Cloud"
msgstr ""
-#: ../../addon/donate/donate.php:49
-msgid ""
-"And the hundreds of other people and organisations who helped make the "
-"Hubzilla possible."
+#: ../../include/features.php:117
+msgid "Provide a personal tag cloud on your channel page"
msgstr ""
-#: ../../addon/donate/donate.php:52
-msgid ""
-"The Redmatrix/Hubzilla projects are provided primarily by volunteers giving "
-"their time and expertise - and often paying out of pocket for services they "
-"share with others."
+#: ../../include/features.php:124 ../../include/features.php:358
+msgid "Use blog/list mode"
msgstr ""
-#: ../../addon/donate/donate.php:53
-msgid ""
-"There is no corporate funding and no ads, and we do not collect and sell "
-"your personal information. (We don't control your personal information - "
-"<strong>you do</strong>.)"
+#: ../../include/features.php:125 ../../include/features.php:359
+msgid "Comments will be displayed separately"
msgstr ""
-#: ../../addon/donate/donate.php:54
-msgid ""
-"Help support our ground-breaking work in decentralisation, web identity, and "
-"privacy."
+#: ../../include/features.php:137
+msgid "Connection Filtering"
msgstr ""
-#: ../../addon/donate/donate.php:56
-msgid ""
-"Your donations keep servers and services running and also helps us to "
-"provide innovative new features and continued development."
+#: ../../include/features.php:138
+msgid "Filter incoming posts from connections based on keywords/content"
msgstr ""
-#: ../../addon/donate/donate.php:59
-msgid "Donate"
+#: ../../include/features.php:146
+msgid "Conversation"
msgstr ""
-#: ../../addon/donate/donate.php:61
-msgid ""
-"Choose a project, developer, or public hub to support with a one-time "
-"donation"
+#: ../../include/features.php:158
+msgid "Emoji Reactions"
msgstr ""
-#: ../../addon/donate/donate.php:62
-msgid "Donate Now"
+#: ../../include/features.php:159
+msgid "Add emoji reaction ability to posts"
msgstr ""
-#: ../../addon/donate/donate.php:63
-msgid ""
-"<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"
+#: ../../include/features.php:166
+msgid "Dislike Posts"
msgstr ""
-#: ../../addon/donate/donate.php:64
-msgid ""
-"Please indicate if you would like your first name or full name (or nothing) "
-"to appear in our sponsor listing"
+#: ../../include/features.php:167
+msgid "Ability to dislike posts/comments"
msgstr ""
-#: ../../addon/donate/donate.php:65
-msgid "Sponsor"
+#: ../../include/features.php:174
+msgid "Star Posts"
msgstr ""
-#: ../../addon/donate/donate.php:68
-msgid "Special thanks to: "
+#: ../../include/features.php:175
+msgid "Ability to mark special posts with a star indicator"
msgstr ""
-#: ../../addon/photocache/Mod_Photocache.php:27
-msgid "Photo Cache settings saved."
+#: ../../include/features.php:182
+msgid "Reply on comment"
msgstr ""
-#: ../../addon/photocache/Mod_Photocache.php:43
-msgid ""
-"Saves a copy of images from external sites locally to increase your "
-"anonymity in the web."
+#: ../../include/features.php:183
+msgid "Ability to reply on selected comment"
msgstr ""
-#: ../../addon/photocache/Mod_Photocache.php:49
-msgid "Minimal photo size for caching"
+#: ../../include/features.php:192 ../../Zotlabs/Lib/Apps.php:352
+msgid "Directory"
msgstr ""
-#: ../../addon/photocache/Mod_Photocache.php:51
-msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default."
+#: ../../include/features.php:196
+msgid "Advanced Directory Search"
msgstr ""
-#: ../../addon/photocache/Mod_Photocache.php:60
-msgid "Photo Cache"
+#: ../../include/features.php:197
+msgid "Allows creation of complex directory search queries"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:19
-msgid "bitchslap"
+#: ../../include/features.php:206
+msgid "Editor"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:19
-msgid "bitchslapped"
+#: ../../include/features.php:210
+msgid "Post Categories"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:20
-msgid "shag"
+#: ../../include/features.php:211
+msgid "Add categories to your posts"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:20
-msgid "shagged"
+#: ../../include/features.php:218
+msgid "Large Photos"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:21
-msgid "patent"
+#: ../../include/features.php:219
+msgid ""
+"Include large (1024px) photo thumbnails in posts. If not enabled, use small "
+"(640px) photo thumbnails"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:21
-msgid "patented"
+#: ../../include/features.php:226
+msgid "Even More Encryption"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:22
-msgid "hug"
+#: ../../include/features.php:227
+msgid ""
+"Allow optional encryption of content end-to-end with a shared secret key"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:22
-msgid "hugged"
+#: ../../include/features.php:234
+msgid "Disable Comments"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:23
-msgid "murder"
+#: ../../include/features.php:235
+msgid "Provide the option to disable comments for a post"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:23
-msgid "murdered"
+#: ../../include/features.php:242
+msgid "Delayed Posting"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:24
-msgid "worship"
+#: ../../include/features.php:243
+msgid "Allow posts to be published at a later date"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:24
-msgid "worshipped"
+#: ../../include/features.php:250
+msgid "Content Expiration"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:25
-msgid "kiss"
+#: ../../include/features.php:251
+msgid "Remove posts/comments and/or private messages at a future time"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:25
-msgid "kissed"
+#: ../../include/features.php:258
+msgid "Suppress Duplicate Posts/Comments"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:26
-msgid "tempt"
+#: ../../include/features.php:259
+msgid ""
+"Prevent posts with identical content to be published with less than two "
+"minutes in between submissions."
msgstr ""
-#: ../../addon/morepokes/morepokes.php:26
-msgid "tempted"
+#: ../../include/features.php:266
+msgid "Auto-save drafts of posts and comments"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:27
-msgid "raise eyebrows at"
+#: ../../include/features.php:267
+msgid ""
+"Automatically saves post and comment drafts in local browser storage to help "
+"prevent accidental loss of compositions"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:27
-msgid "raised their eyebrows at"
+#: ../../include/features.php:276
+msgid "Manage"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:28
-msgid "insult"
+#: ../../include/features.php:280
+msgid "Navigation Channel Select"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:28
-msgid "insulted"
+#: ../../include/features.php:281
+msgid "Change channels directly from within the navigation dropdown menu"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:29
-msgid "praise"
+#: ../../include/features.php:290 ../../Zotlabs/Widget/Notifications.php:23
+#: ../../Zotlabs/Module/Connections.php:347
+msgid "Network"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:29
-msgid "praised"
+#: ../../include/features.php:294
+msgid "Events Filter"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:30
-msgid "be dubious of"
+#: ../../include/features.php:295
+msgid "Ability to display only events"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:30
-msgid "was dubious of"
+#: ../../include/features.php:302
+msgid "Polls Filter"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:31
-msgid "eat"
+#: ../../include/features.php:303
+msgid "Ability to display only polls"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:31
-msgid "ate"
+#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:89
+msgid "Saved Searches"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:32
-msgid "giggle and fawn at"
+#: ../../include/features.php:311
+msgid "Save search terms for re-use"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:32
-msgid "giggled and fawned at"
+#: ../../include/features.php:318 ../../include/contact_widgets.php:53
+#: ../../Zotlabs/Widget/Activity_filter.php:196
+#: ../../Zotlabs/Widget/Filer.php:33
+msgid "Saved Folders"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:33
-msgid "doubt"
+#: ../../include/features.php:319
+msgid "Ability to file posts under folders"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:33
-msgid "doubted"
+#: ../../include/features.php:326
+msgid "Alternate Stream Order"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:34
-msgid "glare"
+#: ../../include/features.php:327
+msgid ""
+"Ability to order the stream by last post date, last comment date or "
+"unthreaded activities"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:34
-msgid "glared at"
+#: ../../include/features.php:334
+msgid "Contact Filter"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:35
-msgid "fuck"
+#: ../../include/features.php:335
+msgid "Ability to display only posts of a selected contact"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:35
-msgid "fucked"
+#: ../../include/features.php:342
+msgid "Forum Filter"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:36
-msgid "bonk"
+#: ../../include/features.php:343
+msgid "Ability to display only posts of a specific forum"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:36
-msgid "bonked"
+#: ../../include/features.php:350
+msgid "Personal Posts Filter"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:37
-msgid "declare undying love for"
+#: ../../include/features.php:351
+msgid "Ability to display only posts that you've interacted on"
msgstr ""
-#: ../../addon/morepokes/morepokes.php:37
-msgid "declared undying love for"
+#: ../../include/features.php:368 ../../include/nav.php:454
+#: ../../Zotlabs/Widget/Channel_activities.php:93
+#: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:350
+msgid "Photos"
msgstr ""
-#: ../../addon/dwpost/dwpost.php:49
-msgid "Post to Dreamwidth"
+#: ../../include/features.php:372
+msgid "Photo Location"
msgstr ""
-#: ../../addon/dwpost/dwpost.php:134 ../../addon/dwpost/Mod_Dwpost.php:67
-#: ../../addon/wppost/Mod_Wppost.php:96 ../../addon/wppost/wppost.php:174
-#: ../../addon/wiki/Mod_Wiki.php:381 ../../addon/ljpost/ljpost.php:134
-msgid "Source"
+#: ../../include/features.php:373
+msgid "If location data is available on uploaded photos, link this to a map."
msgstr ""
-#: ../../addon/dwpost/Mod_Dwpost.php:26
-msgid "Dreamwidth Crosspost Connector Settings saved."
+#: ../../include/features.php:380
+msgid "Flag Adult Photos"
msgstr ""
-#: ../../addon/dwpost/Mod_Dwpost.php:51
-msgid "Dreamwidth username"
+#: ../../include/features.php:381
+msgid ""
+"Provide photo edit option to hide inappropriate photos from default album "
+"view"
msgstr ""
-#: ../../addon/dwpost/Mod_Dwpost.php:55
-msgid "Dreamwidth password"
+#: ../../include/features.php:390 ../../Zotlabs/Module/Contactedit.php:444
+#: ../../Zotlabs/Lib/Apps.php:368
+msgid "Profiles"
msgstr ""
-#: ../../addon/dwpost/Mod_Dwpost.php:59
-msgid "Post to Dreamwidth by default"
+#: ../../include/features.php:394
+msgid "Advanced Profiles"
msgstr ""
-#: ../../addon/dwpost/Mod_Dwpost.php:63 ../../addon/wppost/Mod_Wppost.php:92
-#: ../../addon/ljpost/Mod_Ljpost.php:69
-msgid "Add link to original post"
+#: ../../include/features.php:395
+msgid "Additional profile sections and selections"
msgstr ""
-#: ../../addon/dwpost/Mod_Dwpost.php:67 ../../addon/wppost/Mod_Wppost.php:96
-msgid "Link description (default:"
+#: ../../include/features.php:402
+msgid "Profile Import/Export"
msgstr ""
-#: ../../addon/dwpost/Mod_Dwpost.php:75
-msgid "Dreamwidth Crosspost Connector"
+#: ../../include/features.php:403
+msgid "Save and load profile details across sites/channels"
msgstr ""
-#: ../../addon/skeleton/Mod_Skeleton.php:38
-msgid "Some setting"
+#: ../../include/features.php:410
+msgid "Multiple Profiles"
msgstr ""
-#: ../../addon/skeleton/Mod_Skeleton.php:38
-msgid "A setting"
+#: ../../include/features.php:411
+msgid "Ability to create multiple profiles"
msgstr ""
-#: ../../addon/skeleton/Mod_Skeleton.php:46
-msgid "Skeleton Settings"
+#: ../../include/security.php:630
+msgid ""
+"The form security token was not correct. This probably happened because the "
+"form has been opened for too long (>3 hours) before submitting it."
msgstr ""
-#: ../../addon/hzfiles/hzfiles.php:81
-msgid "Hubzilla File Storage Import"
+#: ../../include/js_strings.php:5
+msgid "Delete this item?"
msgstr ""
-#: ../../addon/hzfiles/hzfiles.php:82
-msgid "This will import all your cloud files from another server."
+#: ../../include/js_strings.php:6
+msgid "Item deleted"
msgstr ""
-#: ../../addon/hzfiles/hzfiles.php:83
-msgid "Hubzilla Server base URL"
+#: ../../include/js_strings.php:7 ../../Zotlabs/Module/Photos.php:1092
+#: ../../Zotlabs/Module/Photos.php:1205 ../../Zotlabs/Lib/ThreadItem.php:827
+msgid "Comment"
msgstr ""
-#: ../../addon/hzfiles/hzfiles.php:84
-#: ../../addon/content_import/Mod_content_import.php:139
-msgid "Since modified date yyyy-mm-dd"
+#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:536
+#, php-format
+msgid "%s show all"
msgstr ""
-#: ../../addon/hzfiles/hzfiles.php:85
-#: ../../addon/content_import/Mod_content_import.php:140
-msgid "Until modified date yyyy-mm-dd"
+#: ../../include/js_strings.php:9
+#, php-format
+msgid "%s show less"
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:133
-msgid "View Larger"
+#: ../../include/js_strings.php:10
+#, php-format
+msgid "%s expand"
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:156
-msgid "Tile Server URL"
+#: ../../include/js_strings.php:11
+#, php-format
+msgid "%s collapse"
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:156
-msgid ""
-"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
-"target=\"_blank\">public tile servers</a>"
+#: ../../include/js_strings.php:12
+msgid "Password too short"
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:157
-msgid "Nominatim (reverse geocoding) Server URL"
+#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:161
+msgid "Passwords do not match"
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:157
-msgid ""
-"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
-"target=\"_blank\">Nominatim servers</a>"
+#: ../../include/js_strings.php:14
+msgid "everybody"
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:158
-msgid "Default zoom"
+#: ../../include/js_strings.php:15
+msgid "Secret Passphrase"
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:158
-msgid ""
-"The default zoom level. (1:world, 18:highest, also depends on tile server)"
+#: ../../include/js_strings.php:16
+msgid "Passphrase hint"
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:159
-msgid "Include marker on map"
+#: ../../include/js_strings.php:17
+msgid "Notice: Permissions have changed but have not yet been submitted."
msgstr ""
-#: ../../addon/openstreetmap/openstreetmap.php:159
-msgid "Include a marker on the map."
+#: ../../include/js_strings.php:18
+msgid "close all"
msgstr ""
-#: ../../addon/redred/redred.php:50
-msgid "Post to Hubzilla"
+#: ../../include/js_strings.php:19
+msgid "Nothing new here"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:24
-msgid "Channel is required."
+#: ../../include/js_strings.php:20
+msgid "Rate This Channel (this is public)"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:331
-msgid "Invalid channel."
+#: ../../include/js_strings.php:21
+msgid "Rating"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:38
-msgid "Hubzilla Crosspost Connector Settings saved."
+#: ../../include/js_strings.php:22
+msgid "Describe (optional)"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:61
-msgid "Send public postings to Hubzilla channel by default"
+#: ../../include/js_strings.php:24
+msgid "Please enter a link URL"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:65
-msgid "Hubzilla API Path"
+#: ../../include/js_strings.php:25
+msgid "Unsaved changes. Are you sure you wish to leave this page?"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:65 ../../addon/rtof/Mod_Rtof.php:51
-msgid "https://{sitename}/api"
+#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Pubsites.php:54
+#: ../../Zotlabs/Module/Cdav.php:1006 ../../Zotlabs/Module/Profiles.php:480
+#: ../../Zotlabs/Module/Profiles.php:751 ../../Zotlabs/Module/Locs.php:121
+msgid "Location"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:69
-msgid "Hubzilla login name"
+#: ../../include/js_strings.php:27
+msgid "lovely"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:73
-msgid "Hubzilla channel name"
+#: ../../include/js_strings.php:28
+msgid "wonderful"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:77
-msgid "Hubzilla password"
+#: ../../include/js_strings.php:29
+msgid "fantastic"
msgstr ""
-#: ../../addon/redred/Mod_Redred.php:85
-msgid "Hubzilla Crosspost Connector"
+#: ../../include/js_strings.php:30
+msgid "great"
msgstr ""
-#: ../../addon/upgrade_info/upgrade_info.php:48
-msgid "Your channel has been upgraded to $Projectname version"
+#: ../../include/js_strings.php:31
+msgid ""
+"Your chosen nickname was either already taken or not valid. Please use our "
+"suggestion ("
msgstr ""
-#: ../../addon/upgrade_info/upgrade_info.php:50
-msgid "Please have a look at the"
+#: ../../include/js_strings.php:32
+msgid ") or enter a new one."
msgstr ""
-#: ../../addon/upgrade_info/upgrade_info.php:52
-msgid "git history"
+#: ../../include/js_strings.php:33
+msgid "Thank you, this nickname is valid."
msgstr ""
-#: ../../addon/upgrade_info/upgrade_info.php:54
-msgid "change log"
+#: ../../include/js_strings.php:34
+msgid "A channel name is required."
msgstr ""
-#: ../../addon/upgrade_info/upgrade_info.php:55
-msgid "for further info."
+#: ../../include/js_strings.php:35
+msgid "This is a "
msgstr ""
-#: ../../addon/upgrade_info/upgrade_info.php:60
-msgid "Upgrade Info"
+#: ../../include/js_strings.php:36
+msgid " channel name"
msgstr ""
-#: ../../addon/upgrade_info/upgrade_info.php:64
-msgid "Do not show this again"
+#: ../../include/js_strings.php:37
+msgid "Back to reply"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:106
-#: ../../addon/socialauth/Mod_SocialAuth.php:179
-msgid "Network error"
+#: ../../include/js_strings.php:38
+msgid "Pinned"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:110
-#: ../../addon/socialauth/Mod_SocialAuth.php:183
-msgid "API error"
+#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:473
+msgid "Pin to the top"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:114
-#: ../../addon/socialauth/Mod_SocialAuth.php:187
-msgid "Unknown issue"
+#: ../../include/js_strings.php:40 ../../Zotlabs/Widget/Pinned.php:160
+#: ../../Zotlabs/Lib/ThreadItem.php:473
+msgid "Unpin from the top"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:152
-msgid "Unable to retrieve email address from remote identity provider"
-msgstr ""
+#: ../../include/js_strings.php:46
+#, php-format
+msgid "%d minutes"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:171
-msgid "Unable to login using email address "
-msgstr ""
+#: ../../include/js_strings.php:47
+#, php-format
+msgid "about %d hours"
+msgid_plural "about %d hours"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:211
-msgid "Social Authentication using your social media account"
-msgstr ""
+#: ../../include/js_strings.php:48
+#, php-format
+msgid "%d days"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:215
-msgid ""
-"This app enables one or more social provider sign-in buttons on the login "
-"page."
-msgstr ""
+#: ../../include/js_strings.php:49
+#, php-format
+msgid "%d months"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:233
-msgid "Add an identity provider"
+#: ../../include/js_strings.php:50
+#, php-format
+msgid "%d years"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../include/js_strings.php:55
+msgid "timeago.prefixAgo"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:260
-msgid "Enable "
+#: ../../include/js_strings.php:56
+msgid "timeago.prefixFromNow"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:267
-msgid "Key"
+#: ../../include/js_strings.php:57
+msgid "timeago.suffixAgo"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:267
-#: ../../addon/socialauth/Mod_SocialAuth.php:272
-#: ../../addon/socialauth/Mod_SocialAuth.php:288
-#: ../../addon/socialauth/Mod_SocialAuth.php:299
-#: ../../addon/socialauth/Mod_SocialAuth.php:308
-msgid "Word"
+#: ../../include/js_strings.php:58
+msgid "timeago.suffixFromNow"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:272
-msgid "Secret"
+#: ../../include/js_strings.php:61
+msgid "less than a minute"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:308
-msgid "Add a custom provider"
+#: ../../include/js_strings.php:62
+msgid "about a minute"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:328
-msgid "Remove an identity provider"
+#: ../../include/js_strings.php:64
+msgid "about an hour"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:338
-msgid "Social authentication"
+#: ../../include/js_strings.php:66
+msgid "a day"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:380
-msgid "Error while saving provider settings"
+#: ../../include/js_strings.php:68
+msgid "about a month"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:403
-msgid "Custom provider already exists"
+#: ../../include/js_strings.php:70
+msgid "about a year"
msgstr ""
-#: ../../addon/socialauth/Mod_SocialAuth.php:420
-msgid "Social authentication settings saved."
+#: ../../include/js_strings.php:72
+msgid " "
msgstr ""
-#: ../../addon/dirstats/dirstats.php:94
-msgid "Hubzilla Directory Stats"
+#: ../../include/js_strings.php:73
+msgid "timeago.numbers"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:95
-msgid "Total Hubs"
+#: ../../include/js_strings.php:79
+msgctxt "long"
+msgid "May"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:97
-msgid "Hubzilla Hubs"
+#: ../../include/js_strings.php:87
+msgid "Jan"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:99
-msgid "Friendica Hubs"
+#: ../../include/js_strings.php:88
+msgid "Feb"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:101
-msgid "Diaspora Pods"
+#: ../../include/js_strings.php:89
+msgid "Mar"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:103
-msgid "Hubzilla Channels"
+#: ../../include/js_strings.php:90
+msgid "Apr"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:105
-msgid "Friendica Channels"
+#: ../../include/js_strings.php:91
+msgctxt "short"
+msgid "May"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:107
-msgid "Diaspora Channels"
+#: ../../include/js_strings.php:92
+msgid "Jun"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:109
-msgid "Aged 35 and above"
+#: ../../include/js_strings.php:93
+msgid "Jul"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:111
-msgid "Aged 34 and under"
+#: ../../include/js_strings.php:94
+msgid "Aug"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:113
-msgid "Average Age"
+#: ../../include/js_strings.php:95
+msgid "Sep"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:115
-msgid "Known Chatrooms"
+#: ../../include/js_strings.php:96
+msgid "Oct"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:117
-msgid "Known Tags"
+#: ../../include/js_strings.php:97
+msgid "Nov"
msgstr ""
-#: ../../addon/dirstats/dirstats.php:119
-msgid ""
-"Please note Diaspora and Friendica statistics are merely those **this "
-"directory** is aware of, and not all those known in the network. This also "
-"applies to chatrooms,"
+#: ../../include/js_strings.php:98
+msgid "Dec"
msgstr ""
-#: ../../addon/flashcards/Mod_Flashcards.php:52
-#: ../../addon/wiki/Mod_Wiki.php:36 ../../addon/cart/cart.php:1410
-msgid "Profile Unavailable."
+#: ../../include/js_strings.php:106
+msgid "Sun"
msgstr ""
-#: ../../addon/flashcards/Mod_Flashcards.php:225
-msgid "Not allowed."
+#: ../../include/js_strings.php:107
+msgid "Mon"
msgstr ""
-#: ../../addon/flashcards/Mod_Flashcards.php:268
-#: ../../Zotlabs/Module/Filestorage.php:202
-msgid "Set/edit permissions"
+#: ../../include/js_strings.php:108
+msgid "Tue"
msgstr ""
-#: ../../addon/totp/Mod_Totp.php:32
-msgid "TOTP Two-Step Verification"
+#: ../../include/js_strings.php:109
+msgid "Wed"
msgstr ""
-#: ../../addon/totp/Mod_Totp.php:33
-msgid "Enter the 2-step verification generated by your authenticator app:"
+#: ../../include/js_strings.php:110
+msgid "Thu"
msgstr ""
-#: ../../addon/totp/Mod_Totp.php:34
-msgid "Success!"
+#: ../../include/js_strings.php:111
+msgid "Fri"
msgstr ""
-#: ../../addon/totp/Mod_Totp.php:35
-msgid "Invalid code, please try again."
+#: ../../include/js_strings.php:112
+msgid "Sat"
msgstr ""
-#: ../../addon/totp/Mod_Totp.php:36
-msgid "Too many invalid codes..."
+#: ../../include/js_strings.php:113
+msgctxt "calendar"
+msgid "today"
msgstr ""
-#: ../../addon/totp/Mod_Totp.php:37
-msgid "Verify"
+#: ../../include/js_strings.php:114
+msgctxt "calendar"
+msgid "month"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:92
-msgid ""
-"You haven't set a TOTP secret yet.\n"
-"Please click the button below to generate one and register this site\n"
-"with your preferred authenticator app."
+#: ../../include/js_strings.php:115
+msgctxt "calendar"
+msgid "week"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:95
-msgid "Your TOTP secret is"
+#: ../../include/js_strings.php:116
+msgctxt "calendar"
+msgid "day"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:96
-msgid ""
-"Be sure to save it somewhere in case you lose or replace your mobile "
-"device.\n"
-"Use your mobile device to scan the QR code below to register this site\n"
-"with your preferred authenticator app."
+#: ../../include/js_strings.php:117
+msgctxt "calendar"
+msgid "All day"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:101
-msgid "Test"
+#: ../../include/js_strings.php:120
+msgid "Please stand by while your download is being prepared."
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:102
-msgid "Generate New Secret"
+#: ../../include/js_strings.php:123
+msgid "Email address not valid"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:103
-msgid "Go"
+#: ../../include/help.php:81
+msgid "Help:"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:104
-msgid "Enter your password"
+#: ../../include/help.php:118 ../../include/help.php:126
+#: ../../include/nav.php:181 ../../include/nav.php:325
+#: ../../Zotlabs/Module/Layouts.php:184 ../../Zotlabs/Lib/Apps.php:353
+msgid "Help"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:105
-msgid "enter TOTP code from your device"
+#: ../../include/help.php:130
+msgid "Not Found"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:106
-msgid "Pass!"
+#: ../../include/photos.php:153
+#, php-format
+msgid "Image exceeds website size limit of %lu bytes"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:107
-msgid "Fail"
+#: ../../include/photos.php:164
+msgid "Image file is empty."
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:108
-msgid "Incorrect password, try again."
+#: ../../include/photos.php:198 ../../Zotlabs/Module/Profile_photo.php:275
+#: ../../Zotlabs/Module/Cover_photo.php:241
+msgid "Unable to process image"
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:109
-msgid "Record your new TOTP secret and rescan the QR code above."
+#: ../../include/photos.php:324
+msgid "Photo storage failed."
msgstr ""
-#: ../../addon/totp/Settings/Totp.php:117
-msgid "TOTP Settings"
+#: ../../include/photos.php:373
+msgid "a new photo"
msgstr ""
-#: ../../addon/opensearch/opensearch.php:26
+#: ../../include/photos.php:377
#, php-format
-msgctxt "opensearch"
-msgid "Search %1$s (%2$s)"
+msgctxt "photo_upload"
+msgid "%1$s posted %2$s to %3$s"
msgstr ""
-#: ../../addon/opensearch/opensearch.php:28
-msgctxt "opensearch"
-msgid "$Projectname"
+#: ../../include/photos.php:722 ../../include/nav.php:457
+msgid "Photo Albums"
msgstr ""
-#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Lib/Enotify.php:66
-#: ../../Zotlabs/Module/Home.php:87 ../../Zotlabs/Module/Home.php:95
-#: ../../Zotlabs/Module/Invite.php:238 ../../Zotlabs/Module/Invite.php:507
-#: ../../Zotlabs/Module/Invite.php:521
-msgid "$Projectname"
+#: ../../include/photos.php:723 ../../Zotlabs/Module/Photos.php:1338
+#: ../../Zotlabs/Module/Photos.php:1351 ../../Zotlabs/Module/Photos.php:1352
+msgid "Recent Photos"
msgstr ""
-#: ../../addon/opensearch/opensearch.php:43
-msgid "Search $Projectname"
+#: ../../include/photos.php:727
+msgid "Upload New Photos"
msgstr ""
-#: ../../addon/irc/Mod_Irc.php:23 ../../addon/irc/irc.php:41
-msgid "Popular Channels"
+#: ../../include/network.php:412
+msgid "url: "
msgstr ""
-#: ../../addon/irc/irc.php:37
-msgid "Channels to auto connect"
+#: ../../include/network.php:413
+msgid "error_code: "
msgstr ""
-#: ../../addon/irc/irc.php:37 ../../addon/irc/irc.php:41
-msgid "Comma separated list"
+#: ../../include/network.php:414
+msgid "error_string: "
msgstr ""
-#: ../../addon/irc/irc.php:45
-msgid "IRC Settings"
+#: ../../include/network.php:415
+msgid "content-type: "
msgstr ""
-#: ../../addon/irc/irc.php:54
-msgid "IRC settings saved."
+#: ../../include/network.php:1765 ../../include/network.php:1766
+msgid "Friendica"
msgstr ""
-#: ../../addon/irc/irc.php:58
-msgid "IRC Chatroom"
+#: ../../include/network.php:1767
+msgid "OStatus"
msgstr ""
-#: ../../addon/tictac/tictac.php:21
-msgid "Three Dimensional Tic-Tac-Toe"
+#: ../../include/network.php:1768
+msgid "GNU-Social"
msgstr ""
-#: ../../addon/tictac/tictac.php:54
-msgid "3D Tic-Tac-Toe"
+#: ../../include/network.php:1769
+msgid "RSS/Atom"
msgstr ""
-#: ../../addon/tictac/tictac.php:59
-msgid "New game"
+#: ../../include/network.php:1772
+msgid "Diaspora"
msgstr ""
-#: ../../addon/tictac/tictac.php:60
-msgid "New game with handicap"
+#: ../../include/network.php:1773
+msgid "Facebook"
msgstr ""
-#: ../../addon/tictac/tictac.php:61
-msgid ""
-"Three dimensional tic-tac-toe is just like the traditional game except that "
-"it is played on multiple levels simultaneously. "
+#: ../../include/network.php:1774
+msgid "Zot"
msgstr ""
-#: ../../addon/tictac/tictac.php:62
-msgid ""
-"In this case there are three levels. You win by getting three in a row on "
-"any level, as well as up, down, and diagonally across the different levels."
+#: ../../include/network.php:1775
+msgid "LinkedIn"
msgstr ""
-#: ../../addon/tictac/tictac.php:64
-msgid ""
-"The handicap game disables the center position on the middle level because "
-"the player claiming this square often has an unfair advantage."
+#: ../../include/network.php:1776
+msgid "XMPP/IM"
msgstr ""
-#: ../../addon/tictac/tictac.php:183
-msgid "You go first..."
+#: ../../include/network.php:1777
+msgid "MySpace"
msgstr ""
-#: ../../addon/tictac/tictac.php:188
-msgid "I'm going first this time..."
+#: ../../include/activities.php:42
+msgid " and "
msgstr ""
-#: ../../addon/tictac/tictac.php:194
-msgid "You won!"
+#: ../../include/activities.php:50
+msgid "public profile"
msgstr ""
-#: ../../addon/tictac/tictac.php:200 ../../addon/tictac/tictac.php:225
-msgid "\"Cat\" game!"
+#: ../../include/activities.php:59
+#, php-format
+msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
msgstr ""
-#: ../../addon/tictac/tictac.php:223
-msgid "I won!"
+#: ../../include/activities.php:60
+#, php-format
+msgid "Visit %1$s's %2$s"
msgstr ""
-#: ../../addon/wppost/Mod_Wppost.php:30
-msgid "Wordpress Settings saved."
+#: ../../include/activities.php:63
+#, php-format
+msgid "%1$s has an updated %2$s, changing %3$s."
msgstr ""
-#: ../../addon/wppost/Mod_Wppost.php:67
-msgid "WordPress username"
-msgstr ""
+#: ../../include/contact_widgets.php:11
+#, php-format
+msgid "%d invitation available"
+msgid_plural "%d invitations available"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/wppost/Mod_Wppost.php:71
-msgid "WordPress password"
+#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145
+#: ../../Zotlabs/Module/Admin/Site.php:419
+msgid "Advanced"
msgstr ""
-#: ../../addon/wppost/Mod_Wppost.php:75
-msgid "WordPress API URL"
+#: ../../include/contact_widgets.php:19
+msgid "Find Channels"
msgstr ""
-#: ../../addon/wppost/Mod_Wppost.php:76
-msgid "Typically https://your-blog.tld/xmlrpc.php"
+#: ../../include/contact_widgets.php:20
+msgid "Enter name or interest"
msgstr ""
-#: ../../addon/wppost/Mod_Wppost.php:79
-msgid "WordPress blogid"
+#: ../../include/contact_widgets.php:21
+msgid "Connect/Follow"
msgstr ""
-#: ../../addon/wppost/Mod_Wppost.php:80
-msgid "For multi-user sites such as wordpress.com, otherwise leave blank"
+#: ../../include/contact_widgets.php:22
+msgid "Examples: Robert Morgenstein, Fishing"
msgstr ""
-#: ../../addon/wppost/Mod_Wppost.php:84
-msgid "Post to WordPress by default"
+#: ../../include/contact_widgets.php:23 ../../Zotlabs/Module/Directory.php:427
+#: ../../Zotlabs/Module/Directory.php:432
+#: ../../Zotlabs/Module/Connections.php:407
+msgid "Find"
msgstr ""
-#: ../../addon/wppost/Mod_Wppost.php:88
-msgid "Forward comments (requires hubzilla_wp plugin)"
+#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Directory.php:431
+#: ../../Zotlabs/Module/Suggest.php:77
+msgid "Channel Suggestions"
msgstr ""
-#: ../../addon/wppost/Mod_Wppost.php:104
-msgid "Wordpress Post"
+#: ../../include/contact_widgets.php:26
+msgid "Random Profile"
msgstr ""
-#: ../../addon/wppost/wppost.php:47
-msgid "Post to WordPress"
+#: ../../include/contact_widgets.php:27
+msgid "Invite Friends"
msgstr ""
-#: ../../addon/articles/Mod_Article_edit.php:17
-#: ../../addon/articles/Mod_Article_edit.php:33
-#: ../../addon/cards/Mod_Card_edit.php:17
-#: ../../addon/cards/Mod_Card_edit.php:33
-#: ../../Zotlabs/Module/Editlayout.php:79 ../../Zotlabs/Module/Editblock.php:79
-#: ../../Zotlabs/Module/Editblock.php:95 ../../Zotlabs/Module/Editpost.php:24
-#: ../../Zotlabs/Module/Editwebpage.php:80
-msgid "Item not found"
+#: ../../include/contact_widgets.php:29
+msgid "Advanced example: name=fred and country=iceland"
msgstr ""
-#: ../../addon/articles/Mod_Article_edit.php:44
-#: ../../addon/cards/Mod_Card_edit.php:44 ../../Zotlabs/Module/Page.php:75
-#: ../../Zotlabs/Module/Block.php:41 ../../Zotlabs/Module/Cal.php:31
-#: ../../Zotlabs/Module/Attach_edit.php:52
-#: ../../Zotlabs/Module/Wall_upload.php:31 ../../Zotlabs/Module/Chanview.php:95
-#: ../../Zotlabs/Module/Attach.php:22
-msgid "Channel not found."
+#: ../../include/contact_widgets.php:182
+msgid "Common Connections"
msgstr ""
-#: ../../addon/articles/Mod_Article_edit.php:127
-msgid "Edit Article"
+#: ../../include/contact_widgets.php:186
+#, php-format
+msgid "View all %d common connections"
msgstr ""
-#: ../../addon/articles/Mod_Articles.php:119
-msgid "Add Article"
+#: ../../include/language.php:446
+msgid "Select an alternate language"
msgstr ""
-#: ../../addon/articles/Mod_Articles.php:228
-#: ../../addon/articles/articles.php:48 ../../addon/articles/articles.php:160
-#: ../../Zotlabs/Lib/Apps.php:330
-msgid "Articles"
+#: ../../include/import.php:30
+msgid "Unable to import a removed channel."
msgstr ""
-#: ../../addon/articles/articles.php:51
-msgid "View Articles"
+#: ../../include/import.php:56
+msgid ""
+"Cannot create a duplicate channel identifier on this system. Import failed."
msgstr ""
-#: ../../addon/pumpio/pumpio.php:152
-msgid "You are now authenticated to pumpio."
+#: ../../include/import.php:122
+msgid "Cloned channel not found. Import failed."
msgstr ""
-#: ../../addon/pumpio/pumpio.php:153
-msgid "return to the featured settings page"
+#: ../../include/nav.php:96
+msgid "Remote authentication"
msgstr ""
-#: ../../addon/pumpio/pumpio.php:168
-msgid "Post to Pump.io"
+#: ../../include/nav.php:96
+msgid "Click to authenticate to your home hub"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:40
-msgid "Pump.io Settings saved."
+#: ../../include/nav.php:102 ../../Zotlabs/Widget/Channel_activities.php:239
+#: ../../Zotlabs/Widget/Admin.php:29
+#: ../../Zotlabs/Module/Admin/Channels.php:146
+#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:116
+msgid "Channels"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:71
-msgid "Pump.io servername"
+#: ../../include/nav.php:102
+msgid "Manage your channels"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:71
-msgid "Without \"http://\" or \"https://\""
+#: ../../include/nav.php:105 ../../Zotlabs/Widget/Settings_menu.php:71
+#: ../../Zotlabs/Widget/Newmember.php:58
+#: ../../Zotlabs/Module/Admin/Themes.php:125
+#: ../../Zotlabs/Module/Admin/Addons.php:348 ../../Zotlabs/Lib/Apps.php:344
+msgid "Settings"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:75
-msgid "Pump.io username"
+#: ../../include/nav.php:105
+msgid "Account/Channel Settings"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:75
-msgid "Without the servername"
+#: ../../include/nav.php:111 ../../include/nav.php:141
+#: ../../include/nav.php:162 ../../boot.php:1747
+msgid "Logout"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:86
-msgid "You are not authenticated to pumpio"
+#: ../../include/nav.php:111 ../../include/nav.php:141
+msgid "End this session"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:88
-msgid "(Re-)Authenticate your pump.io connection"
+#: ../../include/nav.php:114
+msgid "Your profile page"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:92
-msgid "Post to pump.io by default"
+#: ../../include/nav.php:117 ../../include/channel.php:1530
+#: ../../Zotlabs/Module/Profiles.php:852
+msgid "Edit Profiles"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:96
-msgid "Should posts be public"
+#: ../../include/nav.php:117
+msgid "Manage/Edit profiles"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:100
-msgid "Mirror all public posts"
+#: ../../include/nav.php:119 ../../Zotlabs/Widget/Newmember.php:40
+msgid "Edit your profile"
msgstr ""
-#: ../../addon/pumpio/Mod_Pumpio.php:110
-msgid "Pump.io Crosspost Connector"
+#: ../../include/nav.php:126 ../../include/nav.php:130
+#: ../../Zotlabs/Lib/Apps.php:341 ../../boot.php:1748
+msgid "Login"
msgstr ""
-#: ../../addon/ijpost/ijpost.php:44
-msgid "Post to Insane Journal"
+#: ../../include/nav.php:126 ../../include/nav.php:130
+msgid "Sign in"
msgstr ""
-#: ../../addon/ijpost/Mod_Ijpost.php:23
-msgid "Insane Journal Crosspost Connector Settings saved."
+#: ../../include/nav.php:160
+msgid "Take me home"
msgstr ""
-#: ../../addon/ijpost/Mod_Ijpost.php:35
-msgid "Insane Journal Crosspost Connector App"
+#: ../../include/nav.php:162
+msgid "Log me out of this site"
msgstr ""
-#: ../../addon/ijpost/Mod_Ijpost.php:36
-msgid "Relay public postings to Insane Journal"
+#: ../../include/nav.php:167 ../../Zotlabs/Module/Register.php:542
+#: ../../boot.php:1725
+msgid "Register"
msgstr ""
-#: ../../addon/ijpost/Mod_Ijpost.php:53
-msgid "InsaneJournal username"
+#: ../../include/nav.php:167
+msgid "Create an account"
msgstr ""
-#: ../../addon/ijpost/Mod_Ijpost.php:57
-msgid "InsaneJournal password"
+#: ../../include/nav.php:181
+msgid "Help and documentation"
msgstr ""
-#: ../../addon/ijpost/Mod_Ijpost.php:61
-msgid "Post to InsaneJournal by default"
+#: ../../include/nav.php:195
+msgid "Search site @name, !forum, #tag, ?docs, content"
msgstr ""
-#: ../../addon/ijpost/Mod_Ijpost.php:69
-msgid "Insane Journal Crosspost Connector"
+#: ../../include/nav.php:201 ../../Zotlabs/Widget/Admin.php:61
+msgid "Admin"
msgstr ""
-#: ../../addon/mailtest/mailtest.php:19
-msgid "Send test email"
+#: ../../include/nav.php:201
+msgid "Site Setup and Configuration"
msgstr ""
-#: ../../addon/mailtest/mailtest.php:66
-msgid "Mail sent."
+#: ../../include/nav.php:329 ../../Zotlabs/Widget/Messages.php:36
+#: ../../Zotlabs/Widget/Notifications.php:173
+#: ../../Zotlabs/Module/New_channel.php:157
+#: ../../Zotlabs/Module/New_channel.php:164
+#: ../../Zotlabs/Module/Defperms.php:254
+msgid "Loading"
msgstr ""
-#: ../../addon/mailtest/mailtest.php:68
-msgid "Sending of mail failed."
+#: ../../include/nav.php:334
+msgid "@name, #tag, ?doc, content"
msgstr ""
-#: ../../addon/mailtest/mailtest.php:77
-msgid "Mail Test"
+#: ../../include/nav.php:335
+msgid "Please wait..."
msgstr ""
-#: ../../addon/logrot/logrot.php:36
-msgid "Logfile archive directory"
+#: ../../include/nav.php:341 ../../Zotlabs/Lib/Apps.php:328
+msgid "Apps"
msgstr ""
-#: ../../addon/logrot/logrot.php:36
-msgid "Directory to store rotated logs"
+#: ../../include/nav.php:342
+msgid "Channel Apps"
msgstr ""
-#: ../../addon/logrot/logrot.php:37
-msgid "Logfile size in bytes before rotating"
+#: ../../include/nav.php:343
+msgid "System Apps"
msgstr ""
-#: ../../addon/logrot/logrot.php:38
-msgid "Number of logfiles to retain"
+#: ../../include/nav.php:344
+msgid "Pinned Apps"
msgstr ""
-#: ../../addon/superblock/superblock.php:355
-msgid "Block Completely"
+#: ../../include/nav.php:345
+msgid "Featured Apps"
msgstr ""
-#: ../../addon/superblock/Mod_Superblock.php:62
-msgid "superblock settings updated"
+#: ../../include/nav.php:431 ../../Zotlabs/Module/Admin/Channels.php:154
+#: ../../Zotlabs/Lib/Apps.php:348
+msgid "Channel"
msgstr ""
-#: ../../addon/superblock/Mod_Superblock.php:86
-msgid "Currently blocked"
+#: ../../include/nav.php:434
+msgid "Status Messages and Posts"
msgstr ""
-#: ../../addon/superblock/Mod_Superblock.php:88
-msgid "No channels currently blocked"
+#: ../../include/nav.php:444 ../../Zotlabs/Module/Help.php:85
+msgid "About"
msgstr ""
-#: ../../addon/superblock/Mod_Superblock.php:90
-#: ../../Zotlabs/Module/Cover_photo.php:424
-#: ../../Zotlabs/Module/Admin/Addons.php:462 ../../Zotlabs/Module/Tagrm.php:137
-#: ../../Zotlabs/Module/Photos.php:991
-msgid "Remove"
+#: ../../include/nav.php:447
+msgid "Profile Details"
msgstr ""
-#: ../../addon/msgfooter/msgfooter.php:47
-msgid "text to include in all outgoing posts from this site"
+#: ../../include/nav.php:462 ../../Zotlabs/Widget/Channel_activities.php:125
+#: ../../Zotlabs/Widget/Notifications.php:108
+#: ../../Zotlabs/Module/Fbrowser.php:85 ../../Zotlabs/Lib/Apps.php:345
+#: ../../Zotlabs/Storage/Browser.php:351
+msgid "Files"
msgstr ""
-#: ../../addon/nsfw/nsfw.php:153
-msgid "Possible adult content"
+#: ../../include/nav.php:465
+msgid "Files and Storage"
msgstr ""
-#: ../../addon/nsfw/nsfw.php:168
-#, php-format
-msgid "%s - view"
+#: ../../include/nav.php:487 ../../include/nav.php:490
+#: ../../Zotlabs/Widget/Chatroom_list.php:22 ../../Zotlabs/Lib/Apps.php:335
+msgid "Chatrooms"
msgstr ""
-#: ../../addon/nsfw/Mod_Nsfw.php:22
-msgid "NSFW Settings saved."
+#: ../../include/nav.php:500 ../../Zotlabs/Module/Bookmarks.php:90
+#: ../../Zotlabs/Lib/Apps.php:334
+msgid "Bookmarks"
msgstr ""
-#: ../../addon/nsfw/Mod_Nsfw.php:42
-msgid ""
-"This app looks in posts for the words/text you specify below, and collapses "
-"any content containing those keywords so it is not displayed at "
-"inappropriate times, such as sexual innuendo that may be improper in a work "
-"setting. It is polite and recommended to tag any content containing nudity "
-"with #NSFW. This filter can also match any other word/text you specify, and "
-"can thereby be used as a general purpose content filter."
+#: ../../include/nav.php:503
+msgid "Saved Bookmarks"
msgstr ""
-#: ../../addon/nsfw/Mod_Nsfw.php:47
-msgid "Comma separated list of keywords to hide"
+#: ../../include/nav.php:511 ../../Zotlabs/Widget/Channel_activities.php:168
+#: ../../Zotlabs/Module/Webpages.php:247 ../../Zotlabs/Lib/Apps.php:346
+msgid "Webpages"
msgstr ""
-#: ../../addon/nsfw/Mod_Nsfw.php:47
-msgid "Word, /regular-expression/, lang=xx, lang!=xx"
+#: ../../include/nav.php:514
+msgid "View Webpages"
msgstr ""
-#: ../../addon/nsfw/Mod_Nsfw.php:56
-msgid "NSFW"
+#: ../../include/nav.php:525 ../../Zotlabs/Lib/Apps.php:347
+msgid "Wiki"
msgstr ""
-#: ../../addon/cards/cards.php:48 ../../addon/cards/cards.php:160
-#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:331
-msgid "Cards"
+#: ../../include/auth.php:197
+msgid "Delegation session ended."
msgstr ""
-#: ../../addon/cards/cards.php:51
-msgid "View Cards"
+#: ../../include/auth.php:201
+msgid "Logged out."
msgstr ""
-#: ../../addon/cards/Mod_Cards.php:115
-msgid "Add Card"
+#: ../../include/auth.php:308
+msgid "Email validation is incomplete. Please check your email."
msgstr ""
-#: ../../addon/cards/Mod_Card_edit.php:129
-msgid "Edit Card"
+#: ../../include/auth.php:324
+msgid "Failed authentication"
msgstr ""
-#: ../../addon/gallery/gallery.php:43 ../../addon/gallery/Mod_Gallery.php:134
-msgid "Gallery"
+#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:56
+#: ../../Zotlabs/Module/Profiles.php:753
+msgid "Miscellaneous"
msgstr ""
-#: ../../addon/gallery/gallery.php:46
-msgid "Photo Gallery"
+#: ../../include/datetime.php:140
+msgid "Birthday"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:81
-#: ../../addon/cart/submodules/paypalbutton.php:456
-#: ../../addon/cart/submodules/paypalbuttonV2.php:478
-#: ../../addon/cart/manual_payments.php:93 ../../addon/cart/cart.php:1558
-#: ../../addon/cart/myshop.php:37
-msgid "Invalid channel"
+#: ../../include/datetime.php:140
+msgid "Age: "
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:136
-msgid "Error retrieving wiki"
+#: ../../include/datetime.php:140
+msgid "YYYY-MM-DD or MM-DD"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:143
-msgid "Error creating zip file export folder"
+#: ../../include/datetime.php:238 ../../boot.php:2754
+msgid "never"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:194
-msgid "Error downloading wiki: "
+#: ../../include/datetime.php:244
+msgid "less than a second ago"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:407
-msgid "Download"
+#: ../../include/datetime.php:262
+#, php-format
+msgctxt "e.g. 22 hours ago, 1 minute ago"
+msgid "%1$d %2$s ago"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:216 ../../addon/wiki/Mod_Wiki.php:406
-#: ../../Zotlabs/Module/Layouts.php:196 ../../Zotlabs/Module/Blocks.php:164
-#: ../../Zotlabs/Module/Webpages.php:256 ../../Zotlabs/Module/Pubsites.php:62
-msgid "View"
-msgstr ""
+#: ../../include/datetime.php:273
+msgctxt "relative_date"
+msgid "year"
+msgid_plural "years"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Profiles.php:853
-#: ../../Zotlabs/Module/Manage.php:137
-msgid "Create New"
-msgstr ""
+#: ../../include/datetime.php:276
+msgctxt "relative_date"
+msgid "month"
+msgid_plural "months"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/wiki/Mod_Wiki.php:219
-msgid "Wiki name"
-msgstr ""
+#: ../../include/datetime.php:279
+msgctxt "relative_date"
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/wiki/Mod_Wiki.php:220
-msgid "Content type"
-msgstr ""
+#: ../../include/datetime.php:282
+msgctxt "relative_date"
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:381
-msgid "Type"
-msgstr ""
+#: ../../include/datetime.php:285
+msgctxt "relative_date"
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/wiki/Mod_Wiki.php:223
-msgid "Any&nbsp;type"
-msgstr ""
+#: ../../include/datetime.php:288
+msgctxt "relative_date"
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/wiki/Mod_Wiki.php:230
-msgid "Lock content type"
-msgstr ""
+#: ../../include/datetime.php:291
+msgctxt "relative_date"
+msgid "second"
+msgid_plural "seconds"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/wiki/Mod_Wiki.php:231
-msgid "Create a status post for this wiki"
+#: ../../include/datetime.php:520
+#, php-format
+msgid "%1$s's birthday"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:232
-msgid "Edit Wiki Name"
+#: ../../include/datetime.php:521
+#, php-format
+msgid "Happy Birthday %1$s"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:277
-msgid "Wiki not found"
+#: ../../include/cdav.php:157
+msgid "INVALID EVENT DISMISSED!"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:303
-msgid "Rename page"
+#: ../../include/cdav.php:158
+msgid "Summary: "
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:318
-msgid "Error retrieving page content"
+#: ../../include/cdav.php:158 ../../include/cdav.php:159
+#: ../../include/cdav.php:167 ../../include/conversation.php:1217
+#: ../../Zotlabs/Widget/Album.php:90 ../../Zotlabs/Widget/Pinned.php:275
+#: ../../Zotlabs/Widget/Portfolio.php:99
+#: ../../Zotlabs/Module/Embedphotos.php:177 ../../Zotlabs/Module/Photos.php:788
+#: ../../Zotlabs/Module/Photos.php:1245 ../../Zotlabs/Lib/Activity.php:1616
+#: ../../Zotlabs/Lib/Apps.php:1152 ../../Zotlabs/Lib/Apps.php:1236
+msgid "Unknown"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:326 ../../addon/wiki/Mod_Wiki.php:328
-msgid "New page"
+#: ../../include/cdav.php:159
+msgid "Date: "
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:363
-msgid "Revision Comparison"
+#: ../../include/cdav.php:160 ../../include/cdav.php:168
+msgid "Reason: "
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:364
-#: ../../addon/wiki/Lib/NativeWikiPage.php:591
-#: ../../addon/wiki/Widget/Wiki_page_history.php:31
-msgid "Revert"
+#: ../../include/cdav.php:166
+msgid "INVALID CARD DISMISSED!"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:371
-msgid "Short description of your changes (optional)"
+#: ../../include/cdav.php:167
+msgid "Name: "
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:391
-msgid "New page name"
+#: ../../include/conversation.php:145 ../../Zotlabs/Module/Like.php:184
+msgid "channel"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:396
-msgid "Embed image from photo albums"
+#: ../../include/conversation.php:193
+#, php-format
+msgid "likes %1$s's %2$s"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:432
-#: ../../Zotlabs/Module/Profile_photo.php:557
-msgid "Choose a different album"
+#: ../../include/conversation.php:196
+#, php-format
+msgid "doesn't like %1$s's %2$s"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:407
-msgid "History"
+#: ../../include/conversation.php:236 ../../include/conversation.php:238
+#, php-format
+msgid "%1$s is now connected with %2$s"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:485
-msgid "Error creating wiki. Invalid name."
+#: ../../include/conversation.php:273
+#, php-format
+msgid "%1$s poked %2$s"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:492
-msgid "A wiki with this name already exists."
+#: ../../include/conversation.php:296 ../../Zotlabs/Module/Mood.php:76
+#, php-format
+msgctxt "mood"
+msgid "%1$s is %2$s"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:505
-msgid "Wiki created, but error creating Home page."
+#: ../../include/conversation.php:526 ../../Zotlabs/Lib/ThreadItem.php:501
+msgid "This is an unsaved preview"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:512
-msgid "Error creating wiki"
+#: ../../include/conversation.php:658 ../../Zotlabs/Module/Photos.php:1108
+msgctxt "title"
+msgid "Likes"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:536
-msgid "Error updating wiki. Invalid name."
+#: ../../include/conversation.php:659 ../../Zotlabs/Module/Photos.php:1108
+msgctxt "title"
+msgid "Dislikes"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:555
-msgid "Error updating wiki"
+#: ../../include/conversation.php:660 ../../Zotlabs/Widget/Pinned.php:82
+#: ../../Zotlabs/Module/Photos.php:1109
+msgctxt "title"
+msgid "Agree"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:570
-msgid "Wiki delete permission denied."
+#: ../../include/conversation.php:661 ../../Zotlabs/Widget/Pinned.php:83
+#: ../../Zotlabs/Module/Photos.php:1109
+msgctxt "title"
+msgid "Disagree"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:580
-msgid "Error deleting wiki"
+#: ../../include/conversation.php:662 ../../Zotlabs/Widget/Pinned.php:84
+#: ../../Zotlabs/Module/Photos.php:1109
+msgctxt "title"
+msgid "Abstain"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:613
-msgid "New page created"
+#: ../../include/conversation.php:663 ../../Zotlabs/Widget/Pinned.php:71
+#: ../../Zotlabs/Module/Photos.php:1110
+msgctxt "title"
+msgid "Attending"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:739
-msgid "Cannot delete Home"
+#: ../../include/conversation.php:664 ../../Zotlabs/Widget/Pinned.php:72
+#: ../../Zotlabs/Module/Photos.php:1110
+msgctxt "title"
+msgid "Not attending"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:815
-msgid "Current Revision"
+#: ../../include/conversation.php:665 ../../Zotlabs/Widget/Pinned.php:73
+#: ../../Zotlabs/Module/Photos.php:1110
+msgctxt "title"
+msgid "Might attend"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:815
-msgid "Selected Revision"
+#: ../../include/conversation.php:735
+msgid "Select"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:870
-msgid "You must be authenticated."
+#: ../../include/conversation.php:742 ../../Zotlabs/Lib/ThreadItem.php:263
+msgid "Toggle Star Status"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:899 ../../addon/wiki/Widget/Wiki_pages.php:61
-msgid "Add new page"
+#: ../../include/conversation.php:748
+msgid "Private Message"
msgstr ""
-#: ../../addon/wiki/Mod_Wiki.php:906 ../../addon/wiki/Widget/Wiki_pages.php:68
-#: ../../Zotlabs/Module/Dreport.php:133
-msgid "Options"
+#: ../../include/conversation.php:757 ../../Zotlabs/Widget/Pinned.php:93
+#: ../../Zotlabs/Lib/ThreadItem.php:273
+msgid "Message signature validated"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:41
-#: ../../addon/wiki/Lib/NativeWikiPage.php:109
-msgid "(No Title)"
+#: ../../include/conversation.php:758 ../../Zotlabs/Widget/Pinned.php:94
+#: ../../Zotlabs/Lib/ThreadItem.php:274
+msgid "Message signature incorrect"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:123
-msgid "Wiki page create failed."
+#: ../../include/conversation.php:798
+#: ../../Zotlabs/Module/Admin/Accounts.php:318
+#: ../../Zotlabs/Module/Connections.php:358
+#: ../../Zotlabs/Module/Connections.php:409
+msgid "Approve"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:137
-msgid "Wiki not found."
+#: ../../include/conversation.php:804
+#, php-format
+msgid "View %s's profile @ %s"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:148
-msgid "Destination name already exists"
+#: ../../include/conversation.php:826
+msgid "Categories:"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:181
-#: ../../addon/wiki/Lib/NativeWikiPage.php:376
-msgid "Page not found"
+#: ../../include/conversation.php:827
+msgid "Filed under:"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:211
-msgid "Error reading page content"
+#: ../../include/conversation.php:833 ../../Zotlabs/Widget/Pinned.php:137
+#: ../../Zotlabs/Lib/ThreadItem.php:430
+#, php-format
+msgid "from %s"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:367
-#: ../../addon/wiki/Lib/NativeWikiPage.php:425
-#: ../../addon/wiki/Lib/NativeWikiPage.php:493
-#: ../../addon/wiki/Lib/NativeWikiPage.php:534
-msgid "Error reading wiki"
+#: ../../include/conversation.php:836 ../../Zotlabs/Widget/Pinned.php:140
+#: ../../Zotlabs/Lib/ThreadItem.php:433
+#, php-format
+msgid "last edited: %s"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:411
-msgid "Page update failed."
+#: ../../include/conversation.php:837 ../../Zotlabs/Widget/Pinned.php:141
+#: ../../Zotlabs/Lib/ThreadItem.php:434
+#, php-format
+msgid "Expires: %s"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:447
-msgid "Nothing deleted"
+#: ../../include/conversation.php:854 ../../Zotlabs/Module/Photos.php:1074
+#: ../../Zotlabs/Lib/ThreadItem.php:502
+msgid "Please wait"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:514
-msgid "Compare: object not found."
+#: ../../include/conversation.php:955
+msgid "remove"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:521
-msgid "Page updated"
+#: ../../include/conversation.php:959
+msgid "Loading..."
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:529
-msgid "Wiki resource_id required for git commit"
+#: ../../include/conversation.php:960 ../../Zotlabs/Lib/ThreadItem.php:290
+msgid "Conversation Features"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:589
-#: ../../addon/wiki/Widget/Wiki_page_history.php:29
-msgctxt "wiki_history"
-msgid "Message"
+#: ../../include/conversation.php:961
+msgid "Delete Selected Items"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:590
-#: ../../addon/wiki/Widget/Wiki_page_history.php:30
-msgid "Date"
+#: ../../include/conversation.php:997
+msgid "View Source"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWikiPage.php:592
-#: ../../addon/wiki/Widget/Wiki_page_history.php:32
-msgid "Compare"
+#: ../../include/conversation.php:1007
+msgid "Follow Thread"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWiki.php:144
-msgid "Wiki updated successfully"
+#: ../../include/conversation.php:1016
+msgid "Unfollow Thread"
msgstr ""
-#: ../../addon/wiki/Lib/NativeWiki.php:204
-msgid "Wiki files deleted successfully"
+#: ../../include/conversation.php:1108 ../../Zotlabs/Module/Connedit.php:501
+msgid "Recent Activity"
msgstr ""
-#: ../../addon/wiki/Widget/Wiki_pages.php:55
-msgid "Wiki Pages"
+#: ../../include/conversation.php:1120 ../../include/connections.php:112
+#: ../../include/channel.php:1612 ../../Zotlabs/Widget/Suggestions.php:51
+#: ../../Zotlabs/Widget/Follow.php:37 ../../Zotlabs/Module/Directory.php:363
+#: ../../Zotlabs/Module/Connections.php:365 ../../Zotlabs/Module/Suggest.php:69
+msgid "Connect"
msgstr ""
-#: ../../addon/wiki/Widget/Wiki_pages.php:66
-msgid "Page name"
+#: ../../include/conversation.php:1132
+msgid "Edit Connection"
msgstr ""
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:22
-msgid "Fuzzloc Settings updated."
+#: ../../include/conversation.php:1144 ../../Zotlabs/Module/Poke.php:181
+#: ../../Zotlabs/Module/Poke.php:185 ../../Zotlabs/Lib/Apps.php:356
+msgid "Poke"
msgstr ""
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:38
-msgid "Minimum offset in meters"
+#: ../../include/conversation.php:1268
+#, php-format
+msgid "%s likes this."
msgstr ""
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:42
-msgid "Maximum offset in meters"
+#: ../../include/conversation.php:1268
+#, php-format
+msgid "%s doesn't like this."
msgstr ""
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:51
-msgid "Fuzzy Location"
-msgstr ""
+#: ../../include/conversation.php:1272
+#, php-format
+msgid "<span %1$s>%2$d people</span> like this."
+msgid_plural "<span %1$s>%2$d people</span> like this."
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/diaspora/diaspora.php:78
-msgid ""
-"Please install the statistics addon to be able to configure a diaspora relay"
-msgstr ""
+#: ../../include/conversation.php:1274
+#, php-format
+msgid "<span %1$s>%2$d people</span> don't like this."
+msgid_plural "<span %1$s>%2$d people</span> don't like this."
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/diaspora/diaspora.php:88
-msgid "Diaspora Relay Handle"
+#: ../../include/conversation.php:1280
+msgid "and"
msgstr ""
-#: ../../addon/diaspora/diaspora.php:88
-msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld"
-msgstr ""
+#: ../../include/conversation.php:1283
+#, php-format
+msgid ", and %d other people"
+msgid_plural ", and %d other people"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/diaspora/diaspora.php:108
-msgid "Diaspora relay could not be imported"
+#: ../../include/conversation.php:1284
+#, php-format
+msgid "%s like this."
msgstr ""
-#: ../../addon/diaspora/diaspora.php:1068
-msgid "No subject"
+#: ../../include/conversation.php:1284
+#, php-format
+msgid "%s don't like this."
msgstr ""
-#: ../../addon/diaspora/util.php:337 ../../addon/diaspora/util.php:350
-#: ../../addon/diaspora/p.php:48 ../../Zotlabs/Lib/Enotify.php:61
-msgid "$projectname"
+#: ../../include/conversation.php:1474
+msgid "Toggle poll"
msgstr ""
-#: ../../addon/diaspora/import_diaspora.php:18
-msgid "No username found in import file."
+#: ../../include/conversation.php:1475
+msgid "Option"
msgstr ""
-#: ../../addon/diaspora/import_diaspora.php:140
-msgid "Import completed."
+#: ../../include/conversation.php:1476
+msgid "Add option"
msgstr ""
-#: ../../addon/diaspora/Mod_Diaspora.php:43
-msgid "Diaspora Protocol Settings updated."
+#: ../../include/conversation.php:1477
+msgid "Minutes"
msgstr ""
-#: ../../addon/diaspora/Mod_Diaspora.php:52
-msgid ""
-"The diaspora protocol does not support location independence. Connections "
-"you make within that network may be unreachable from alternate channel "
-"locations."
+#: ../../include/conversation.php:1477
+msgid "Hours"
msgstr ""
-#: ../../addon/diaspora/Mod_Diaspora.php:75
-msgid "Allow any Diaspora member to comment or like your public posts"
+#: ../../include/conversation.php:1477
+msgid "Days"
msgstr ""
-#: ../../addon/diaspora/Mod_Diaspora.php:75
-msgid ""
-"If this setting is disabled only your contacts will be able to comment or "
-"like your public posts"
+#: ../../include/conversation.php:1478
+msgid "Allow multiple answers"
msgstr ""
-#: ../../addon/diaspora/Mod_Diaspora.php:79
-msgid "Prevent your hashtags from being redirected to other sites"
+#: ../../include/conversation.php:1488
+msgid "Summary (optional)"
msgstr ""
-#: ../../addon/diaspora/Mod_Diaspora.php:83
-msgid "Sign and forward posts and comments with no existing Diaspora signature"
-msgstr ""
+#: ../../include/conversation.php:1763 ../../include/taxonomy.php:674
+#: ../../include/channel.php:1773 ../../Zotlabs/Module/Photos.php:1128
+#: ../../Zotlabs/Lib/ThreadItem.php:233
+msgctxt "noun"
+msgid "Like"
+msgid_plural "Likes"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/diaspora/Mod_Diaspora.php:88
-msgid "Followed hashtags (comma separated, do not include the #)"
-msgstr ""
+#: ../../include/conversation.php:1766 ../../Zotlabs/Module/Photos.php:1133
+#: ../../Zotlabs/Lib/ThreadItem.php:239
+msgctxt "noun"
+msgid "Dislike"
+msgid_plural "Dislikes"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/diaspora/Mod_Diaspora.php:97
-msgid "Diaspora Protocol"
-msgstr ""
+#: ../../include/conversation.php:1769
+msgctxt "noun"
+msgid "Attending"
+msgid_plural "Attending"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/diaspora/Receiver.php:1595
-#, php-format
-msgid "%1$s dislikes %2$s's %3$s"
-msgstr ""
+#: ../../include/conversation.php:1772
+msgctxt "noun"
+msgid "Not Attending"
+msgid_plural "Not Attending"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/diaspora/Receiver.php:2206 ../../Zotlabs/Module/Like.php:487
-#, php-format
-msgid "%1$s is attending %2$s's %3$s"
-msgstr ""
+#: ../../include/conversation.php:1775
+msgctxt "noun"
+msgid "Undecided"
+msgid_plural "Undecided"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/diaspora/Receiver.php:2208 ../../Zotlabs/Module/Like.php:489
-#, php-format
-msgid "%1$s is not attending %2$s's %3$s"
-msgstr ""
+#: ../../include/conversation.php:1778
+msgctxt "noun"
+msgid "Agree"
+msgid_plural "Agrees"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/diaspora/Receiver.php:2210 ../../Zotlabs/Module/Like.php:491
-#, php-format
-msgid "%1$s may attend %2$s's %3$s"
-msgstr ""
+#: ../../include/conversation.php:1781
+msgctxt "noun"
+msgid "Disagree"
+msgid_plural "Disagrees"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/openid/Mod_Openid.php:32
-msgid "OpenID protocol error. No ID returned."
-msgstr ""
+#: ../../include/conversation.php:1784
+msgctxt "noun"
+msgid "Abstain"
+msgid_plural "Abstains"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../addon/openid/Mod_Openid.php:78 ../../addon/openid/Mod_Openid.php:179
-#, php-format
-msgid "Welcome %s. Remote authentication successful."
+#: ../../include/selectors.php:17
+msgid "Select a profile to assign to this contact"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:52
-msgid "First Name"
+#: ../../include/selectors.php:45
+msgid "Frequently"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:53
-msgid "Last Name"
+#: ../../include/selectors.php:46
+msgid "Hourly"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:55
-msgid "Full Name"
+#: ../../include/selectors.php:47
+msgid "Twice daily"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:58
-#: ../../addon/openid/MysqlProvider.php:59
-#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:366
-msgid "Profile Photo"
+#: ../../include/selectors.php:48
+msgid "Daily"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:61
-msgid "Profile Photo 16px"
+#: ../../include/selectors.php:49
+msgid "Weekly"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:62
-msgid "Profile Photo 32px"
+#: ../../include/selectors.php:50
+msgid "Monthly"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:63
-msgid "Profile Photo 48px"
+#: ../../include/selectors.php:64
+msgid "Currently Male"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:64
-msgid "Profile Photo 64px"
+#: ../../include/selectors.php:64
+msgid "Currently Female"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:65
-msgid "Profile Photo 80px"
+#: ../../include/selectors.php:64
+msgid "Mostly Male"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:66
-msgid "Profile Photo 128px"
+#: ../../include/selectors.php:64
+msgid "Mostly Female"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:68
-#: ../../Zotlabs/Module/Profiles.php:784
-msgid "Homepage URL"
+#: ../../include/selectors.php:64
+msgid "Transgender"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:364
-msgid "Language"
+#: ../../include/selectors.php:64
+msgid "Intersex"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:70
-msgid "Birth Year"
+#: ../../include/selectors.php:64
+msgid "Transsexual"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:71
-msgid "Birth Month"
+#: ../../include/selectors.php:64
+msgid "Hermaphrodite"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:72
-msgid "Birth Day"
+#: ../../include/selectors.php:64 ../../include/channel.php:1718
+msgid "Neuter"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:73
-msgid "Birthdate"
+#: ../../include/selectors.php:64 ../../include/channel.php:1720
+msgid "Non-specific"
msgstr ""
-#: ../../addon/openid/MysqlProvider.php:74
-#: ../../Zotlabs/Module/Profiles.php:457
-msgid "Gender"
+#: ../../include/selectors.php:64
+msgid "Undecided"
msgstr ""
-#: ../../addon/openid/openid.php:49
-msgid ""
-"We encountered a problem while logging in with the OpenID you provided. "
-"Please check the correct spelling of the ID."
+#: ../../include/selectors.php:100 ../../include/selectors.php:119
+msgid "Males"
msgstr ""
-#: ../../addon/openid/openid.php:49
-msgid "The error message was:"
+#: ../../include/selectors.php:100 ../../include/selectors.php:119
+msgid "Females"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:51
-#: ../../addon/openclipatar/openclipatar.php:129
-msgid "System defaults:"
+#: ../../include/selectors.php:100
+msgid "Gay"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:55
-msgid "Preferred Clipart IDs"
+#: ../../include/selectors.php:100
+msgid "Lesbian"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:55
-msgid "List of preferred clipart ids. These will be shown first."
+#: ../../include/selectors.php:100
+msgid "No Preference"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:56
-msgid "Default Search Term"
+#: ../../include/selectors.php:100
+msgid "Bisexual"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:56
-msgid "The default search term. These will be shown second."
+#: ../../include/selectors.php:100
+msgid "Autosexual"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:57
-msgid "Return After"
+#: ../../include/selectors.php:100
+msgid "Abstinent"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:57
-msgid "Page to load after image selection."
+#: ../../include/selectors.php:100
+msgid "Virgin"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:60
-msgid "Profile List"
+#: ../../include/selectors.php:100
+msgid "Deviant"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:62
-msgid "Order of Preferred"
+#: ../../include/selectors.php:100
+msgid "Fetish"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:62
-msgid "Sort order of preferred clipart ids."
+#: ../../include/selectors.php:100
+msgid "Oodles"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:63
-#: ../../addon/openclipatar/openclipatar.php:69
-msgid "Newest first"
+#: ../../include/selectors.php:100
+msgid "Nonsexual"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:66
-msgid "As entered"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Single"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:68
-msgid "Order of other"
+#: ../../include/selectors.php:138
+msgid "Lonely"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:68
-msgid "Sort order of other clipart ids."
+#: ../../include/selectors.php:138
+msgid "Available"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:70
-msgid "Most downloaded first"
+#: ../../include/selectors.php:138
+msgid "Unavailable"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:71
-msgid "Most liked first"
+#: ../../include/selectors.php:138
+msgid "Has crush"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:73
-msgid "Preferred IDs Message"
+#: ../../include/selectors.php:138
+msgid "Infatuated"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:73
-msgid "Message to display above preferred results."
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Dating"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:79
-msgid "Uploaded by: "
+#: ../../include/selectors.php:138
+msgid "Unfaithful"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:79
-msgid "Drawn by: "
+#: ../../include/selectors.php:138
+msgid "Sex Addict"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:183
-#: ../../addon/openclipatar/openclipatar.php:195
-msgid "Use this image"
+#: ../../include/selectors.php:138 ../../include/channel.php:456
+#: ../../include/channel.php:459 ../../Zotlabs/Widget/Affinity.php:38
+#: ../../Zotlabs/Module/Contactedit.php:297
+#: ../../Zotlabs/Module/Connedit.php:581
+msgid "Friends"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:193
-msgid "Or select from a free OpenClipart.org image:"
+#: ../../include/selectors.php:138
+msgid "Friends/Benefits"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:196
-msgid "Search Term"
+#: ../../include/selectors.php:138
+msgid "Casual"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:233
-msgid "Unknown error. Please try again later."
+#: ../../include/selectors.php:138
+msgid "Engaged"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:299
-#: ../../Zotlabs/Module/Profile_photo.php:268
-msgid ""
-"Shift-reload the page or clear browser cache if the new photo does not "
-"display immediately."
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Married"
msgstr ""
-#: ../../addon/openclipatar/openclipatar.php:309
-msgid "Profile photo updated successfully."
+#: ../../include/selectors.php:138
+msgid "Imaginarily married"
msgstr ""
-#: ../../addon/likebanner/likebanner.php:51
-msgid "Your Webbie:"
+#: ../../include/selectors.php:138
+msgid "Partners"
msgstr ""
-#: ../../addon/likebanner/likebanner.php:54
-msgid "Fontsize (px):"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Cohabiting"
msgstr ""
-#: ../../addon/likebanner/likebanner.php:68
-msgid "Link:"
+#: ../../include/selectors.php:138
+msgid "Common law"
msgstr ""
-#: ../../addon/likebanner/likebanner.php:70
-msgid "Like us on Hubzilla"
+#: ../../include/selectors.php:138
+msgid "Happy"
msgstr ""
-#: ../../addon/likebanner/likebanner.php:72
-msgid "Embed:"
+#: ../../include/selectors.php:138
+msgid "Not looking"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:106
-msgid "Photos imported"
+#: ../../include/selectors.php:138
+msgid "Swinger"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:129
-msgid "Redmatrix Photo Album Import"
+#: ../../include/selectors.php:138
+msgid "Betrayed"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:130
-msgid "This will import all your Redmatrix photo albums to this channel."
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Separated"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:131
-#: ../../addon/redfiles/redfiles.php:121
-msgid "Redmatrix Server base URL"
+#: ../../include/selectors.php:138
+msgid "Unstable"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:132
-#: ../../addon/redfiles/redfiles.php:122
-msgid "Redmatrix Login Username"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Divorced"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:133
-#: ../../addon/redfiles/redfiles.php:123
-msgid "Redmatrix Login Password"
+#: ../../include/selectors.php:138
+msgid "Imaginarily divorced"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:134
-msgid "Import just this album"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Widowed"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:134
-msgid "Leave blank to import all albums"
+#: ../../include/selectors.php:138
+msgid "Uncertain"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:135
-msgid "Maximum count to import"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "It's complicated"
msgstr ""
-#: ../../addon/redphotos/redphotos.php:135
-msgid "0 or blank to import all available"
+#: ../../include/selectors.php:138
+msgid "Don't care"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:19
-msgid "lonely"
+#: ../../include/selectors.php:138
+msgid "Ask me"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:20
-msgid "drunk"
+#: ../../include/connections.php:136
+msgid "New window"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:21
-msgid "horny"
+#: ../../include/connections.php:137
+msgid "Open the selected location in a different window or browser tab"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:22
-msgid "stoned"
+#: ../../include/group.php:23
+msgid ""
+"A deleted group with this name was revived. Existing item permissions "
+"<strong>may</strong> apply to this group and any future members. If this is "
+"not what you intended, please create another group with a different name."
msgstr ""
-#: ../../addon/moremoods/moremoods.php:23
-msgid "fucked up"
+#: ../../include/group.php:271
+msgid "Add new connections to this privacy group"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:24
-msgid "clusterfucked"
+#: ../../include/group.php:305
+msgid "edit"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:25
-msgid "crazy"
+#: ../../include/group.php:327 ../../include/acl_selectors.php:87
+#: ../../Zotlabs/Widget/Activity_filter.php:95
+#: ../../Zotlabs/Module/Group.php:143 ../../Zotlabs/Lib/Apps.php:369
+msgid "Privacy Groups"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:26
-msgid "hurt"
+#: ../../include/group.php:328
+msgid "Edit group"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:27
-msgid "sleepy"
+#: ../../include/group.php:329
+msgid "Manage privacy groups"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:28
-msgid "grumpy"
+#: ../../include/group.php:330
+msgid "Channels not in any privacy group"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:29
-msgid "high"
+#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90
+msgid "add"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:30
-msgid "semi-conscious"
+#: ../../include/taxonomy.php:323
+msgid "Trending"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:31
-msgid "in love"
+#: ../../include/taxonomy.php:323 ../../include/taxonomy.php:462
+#: ../../include/taxonomy.php:483 ../../Zotlabs/Widget/Tagcloud.php:27
+msgid "Tags"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:32
-msgid "in lust"
+#: ../../include/taxonomy.php:563
+msgid "Keywords"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:33
-msgid "naked"
+#: ../../include/taxonomy.php:584
+msgid "have"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:34
-msgid "stinky"
+#: ../../include/taxonomy.php:584
+msgid "has"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:35
-msgid "sweaty"
+#: ../../include/taxonomy.php:585
+msgid "want"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:36
-msgid "bleeding out"
+#: ../../include/taxonomy.php:585
+msgid "wants"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:37
-msgid "victorious"
+#: ../../include/taxonomy.php:586 ../../Zotlabs/Lib/ThreadItem.php:310
+msgid "like"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:38
-msgid "defeated"
+#: ../../include/taxonomy.php:586
+msgid "likes"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:39
-msgid "envious"
+#: ../../include/taxonomy.php:587 ../../Zotlabs/Lib/ThreadItem.php:311
+msgid "dislike"
msgstr ""
-#: ../../addon/moremoods/moremoods.php:40
-msgid "jealous"
+#: ../../include/taxonomy.php:587
+msgid "dislikes"
msgstr ""
-#: ../../addon/ljpost/Mod_Ljpost.php:53
-msgid "Livejournal username"
+#: ../../include/items.php:1234
+msgid "Visible to anybody on the internet."
msgstr ""
-#: ../../addon/ljpost/Mod_Ljpost.php:57
-msgid "Livejournal password"
+#: ../../include/items.php:1236
+msgid "Visible to you only."
msgstr ""
-#: ../../addon/ljpost/Mod_Ljpost.php:61
-msgid "Post to Livejournal by default"
+#: ../../include/items.php:1238
+msgid "Visible to anybody in this network."
msgstr ""
-#: ../../addon/ljpost/Mod_Ljpost.php:65
-msgid "Send wall-to-wall posts to Livejournal"
+#: ../../include/items.php:1240
+msgid "Visible to anybody authenticated."
msgstr ""
-#: ../../addon/ljpost/Mod_Ljpost.php:77
-msgid "Livejournal Crosspost Connector"
+#: ../../include/items.php:1242
+#, php-format
+msgid "Visible to anybody on %s."
msgstr ""
-#: ../../addon/ljpost/ljpost.php:49
-msgid "Post to Livejournal"
+#: ../../include/items.php:1244
+msgid "Visible to all connections."
msgstr ""
-#: ../../addon/ljpost/ljpost.php:127
-msgid "Posted by"
+#: ../../include/items.php:1246
+msgid "Visible to approved connections."
msgstr ""
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
-msgid "Hide the button and show the smilies directly."
+#: ../../include/items.php:1248
+msgid "Visible to specific connections."
msgstr ""
-#: ../../addon/smileybutton/Mod_Smileybutton.php:50
-msgid "Smileybutton Settings"
+#: ../../include/items.php:3302 ../../Zotlabs/Module/Share.php:104
+#, php-format
+msgid "&#x1f501; Repeated %1$s's %2$s"
msgstr ""
-#: ../../addon/nsabait/Mod_Nsabait.php:23
-msgid "NSA Bait App"
+#: ../../include/items.php:4395 ../../Zotlabs/Module/Group.php:62
+#: ../../Zotlabs/Module/Group.php:206
+msgid "Privacy group not found."
msgstr ""
-#: ../../addon/nsabait/Mod_Nsabait.php:25
-msgid "Make yourself a political target."
+#: ../../include/items.php:4411
+msgid "Privacy group is empty."
msgstr ""
-#: ../../addon/randpost/randpost.php:99
-msgid "You're welcome."
+#: ../../include/items.php:4418
+#, php-format
+msgid "Privacy group: %s"
msgstr ""
-#: ../../addon/randpost/randpost.php:100
-msgid "Ah shucks..."
+#: ../../include/items.php:4428
+#, php-format
+msgid "Connection: %s"
msgstr ""
-#: ../../addon/randpost/randpost.php:101
-msgid "Don't mention it."
+#: ../../include/items.php:4430
+msgid "Connection not found."
msgstr ""
-#: ../../addon/randpost/randpost.php:102
-msgid "&lt;blush&gt;"
+#: ../../include/items.php:4777 ../../Zotlabs/Module/Cover_photo.php:297
+msgid "female"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:61
-msgid ""
-"Please contact your site administrator.<br />The provided API URL is not "
-"valid."
+#: ../../include/items.php:4778 ../../Zotlabs/Module/Cover_photo.php:298
+#, php-format
+msgid "%1$s updated her %2$s"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:98
-msgid "We could not contact the GNU social API with the Path you entered."
+#: ../../include/items.php:4779 ../../Zotlabs/Module/Cover_photo.php:299
+msgid "male"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:130
-msgid "GNU social settings updated."
+#: ../../include/items.php:4780 ../../Zotlabs/Module/Cover_photo.php:300
+#, php-format
+msgid "%1$s updated his %2$s"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:179
-msgid "Globally Available GNU social OAuthKeys"
+#: ../../include/items.php:4782 ../../Zotlabs/Module/Cover_photo.php:302
+#, php-format
+msgid "%1$s updated their %2$s"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:181
-msgid ""
-"There are preconfigured OAuth key pairs for some GNU social servers "
-"available. If you are using one of them, please use these credentials.<br /"
-">If not feel free to connect to any other GNU social instance (see below)."
+#: ../../include/items.php:4784
+msgid "profile photo"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:196
-msgid "Provide your own OAuth Credentials"
+#: ../../include/items.php:4981
+#, php-format
+msgid "[Edited %s]"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:198
-msgid ""
-"No consumer key pair for GNU social found. Register your Hubzilla Account as "
-"an desktop client on your GNU social account, copy the consumer key pair "
-"here and enter the API base root.<br />Before you register your own OAuth "
-"key pair ask the administrator if there is already a key pair for this "
-"Hubzilla installation at your favourite GNU social installation."
+#: ../../include/items.php:4981
+msgctxt "edit_activity"
+msgid "Post"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:202
-msgid "OAuth Consumer Key"
+#: ../../include/items.php:4981
+msgctxt "edit_activity"
+msgid "Comment"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:206
-msgid "OAuth Consumer Secret"
+#: ../../include/account.php:38
+msgid "The provided email address is not valid"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:210
-msgid "Base API Path"
+#: ../../include/account.php:41
+msgid "The provided email domain is not among those allowed on this site"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:210
-msgid "Remember the trailing /"
+#: ../../include/account.php:48
+msgid "The provided email address is already registered at this site"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:214
-msgid "GNU social application name"
+#: ../../include/account.php:55
+msgid ""
+"There is a pending registration for this address - click \"Register\" to "
+"continue verification"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:237
-msgid ""
-"To connect to your GNU social account click the button below to get a "
-"security code from GNU social which you have to copy into the input box "
-"below and submit the form. Only your <strong>public</strong> posts will be "
-"posted to GNU social."
+#: ../../include/account.php:94
+msgid "An invitation is required."
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:239
-msgid "Log in with GNU social"
+#: ../../include/account.php:103
+msgid "Invitation could not be verified."
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:242
-msgid "Copy the security code from GNU social here"
+#: ../../include/account.php:191
+msgid "Please enter the required information."
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:252
-msgid "Cancel Connection Process"
+#: ../../include/account.php:258 ../../include/account.php:366
+msgid "Failed to store account information."
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:254
-msgid "Current GNU social API is"
+#: ../../include/account.php:435 ../../include/account.php:503
+#: ../../Zotlabs/Module/Register.php:328
+#, php-format
+msgid "Registration confirmation for %s"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:258
-msgid "Cancel GNU social Connection"
+#: ../../include/account.php:578
+#, php-format
+msgid "Registration request at %s"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:275
-msgid ""
-"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile "
-"details from unknown viewers?</em>) the link potentially included in public "
-"postings relayed to GNU social will lead the visitor to a blank page "
-"informing the visitor that the access to your profile has been restricted."
+#: ../../include/account.php:600
+msgid "your registration password"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:280
-msgid "Post to GNU social by default"
+#: ../../include/account.php:606 ../../include/account.php:695
+#, php-format
+msgid "Registration details for %s"
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:280
-msgid ""
-"If enabled your public postings will be posted to the associated GNU-social "
-"account by default"
+#: ../../include/account.php:706
+msgid "Account approved."
msgstr ""
-#: ../../addon/statusnet/Mod_Statusnet.php:301
-msgid "GNU-Social Crosspost Connector"
+#: ../../include/account.php:762
+#, php-format
+msgid "Registration revoked for %s"
msgstr ""
-#: ../../addon/statusnet/statusnet.php:145
-msgid "Post to GNU social"
+#: ../../include/account.php:769
+#, php-format
+msgid "Could not revoke registration for %s"
msgstr ""
-#: ../../addon/statusnet/statusnet.php:593
-#: ../../Zotlabs/Module/Admin/Site.php:423
-msgid "Site name"
+#: ../../include/account.php:1185 ../../include/account.php:1187
+msgid "Click here to upgrade."
msgstr ""
-#: ../../addon/statusnet/statusnet.php:594
-msgid "API URL"
+#: ../../include/account.php:1193
+msgid "This action exceeds the limits set by your subscription plan."
msgstr ""
-#: ../../addon/statusnet/statusnet.php:597
-msgid "Application name"
+#: ../../include/account.php:1198
+msgid "This action is not available under your subscription plan."
msgstr ""
-#: ../../addon/cart/submodules/paypalbutton.php:85
-msgid "Enable Paypal Button Module"
+#: ../../include/account.php:1258
+msgid "open"
msgstr ""
-#: ../../addon/cart/submodules/paypalbutton.php:93
-#: ../../addon/cart/submodules/paypalbuttonV2.php:94
-msgid "Use Production Key"
+#: ../../include/account.php:1258
+msgid "closed"
msgstr ""
-#: ../../addon/cart/submodules/paypalbutton.php:100
-#: ../../addon/cart/submodules/paypalbuttonV2.php:101
-msgid "Paypal Sandbox Client Key"
+#: ../../include/account.php:1265
+msgid "Registration is currently"
msgstr ""
-#: ../../addon/cart/submodules/paypalbutton.php:107
-#: ../../addon/cart/submodules/paypalbuttonV2.php:108
-msgid "Paypal Sandbox Secret Key"
+#: ../../include/account.php:1274
+msgid "please come back"
msgstr ""
-#: ../../addon/cart/submodules/paypalbutton.php:113
-#: ../../addon/cart/submodules/paypalbuttonV2.php:114
-msgid "Paypal Production Client Key"
+#: ../../include/photo/photo_driver.php:450
+#: ../../Zotlabs/Module/Profile_photo.php:167
+#: ../../Zotlabs/Module/Profile_photo.php:337
+msgid "Profile Photos"
msgstr ""
-#: ../../addon/cart/submodules/paypalbutton.php:120
-#: ../../addon/cart/submodules/paypalbuttonV2.php:121
-msgid "Paypal Production Secret Key"
+#: ../../include/attach.php:273 ../../include/attach.php:324
+#: ../../include/attach.php:419
+msgid "Item was not found."
msgstr ""
-#: ../../addon/cart/submodules/paypalbutton.php:252
-#: ../../addon/cart/submodules/paypalbuttonV2.php:264
-msgid "Paypal button payments are not enabled."
+#: ../../include/attach.php:290
+msgid "Unknown error."
msgstr ""
-#: ../../addon/cart/submodules/paypalbutton.php:270
-#: ../../addon/cart/submodules/paypalbuttonV2.php:282
-msgid ""
-"Paypal button payments are not properly configured. Please choose another "
-"payment option."
+#: ../../include/attach.php:614
+msgid "No source file."
msgstr ""
-#: ../../addon/cart/submodules/paypalbutton.php:392
-#: ../../addon/cart/submodules/paypalbuttonV2.php:409
-#: ../../addon/cart/manual_payments.php:68 ../../addon/cart/cart.php:1580
-msgid "Order not found."
+#: ../../include/attach.php:636
+msgid "Cannot locate file to replace"
msgstr ""
-#: ../../addon/cart/submodules/paypalbuttonV2.php:86
-msgid "Enable Paypal Button Module (API-v2)"
+#: ../../include/attach.php:655
+msgid "Cannot locate file to revise/update"
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:65
-msgid "Enable Hubzilla Services Module"
+#: ../../include/attach.php:801
+#, php-format
+msgid "File exceeds size limit of %d"
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:164
-#: ../../addon/cart/submodules/manualcat.php:172
-msgid "New Sku"
+#: ../../include/attach.php:822
+#, php-format
+msgid "You have reached your limit of %1$.0f Mbytes attachment storage."
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:199
-#: ../../addon/cart/submodules/manualcat.php:208
-msgid "Cannot save edits to locked item."
+#: ../../include/attach.php:1011
+msgid "File upload failed. Possible system limit or action terminated."
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:248
-#: ../../addon/cart/submodules/hzservices.php:335
-msgid "SKU not found."
+#: ../../include/attach.php:1040
+msgid "Stored file could not be verified. Upload failed."
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:301
-#: ../../addon/cart/submodules/hzservices.php:305
-msgid "Invalid Activation Directive."
+#: ../../include/attach.php:1112 ../../include/attach.php:1128
+msgid "Path not available."
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:376
-#: ../../addon/cart/submodules/hzservices.php:380
-msgid "Invalid Deactivation Directive."
+#: ../../include/attach.php:1176 ../../include/attach.php:1341
+msgid "Empty pathname"
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:566
-msgid "Add to this privacy group"
+#: ../../include/attach.php:1202
+msgid "duplicate filename or path"
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:582
-msgid "Set user service class"
+#: ../../include/attach.php:1230
+msgid "Path not found."
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:609
-msgid "You must be using a local account to purchase this service."
+#: ../../include/attach.php:1297
+msgid "mkdir failed."
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:649
-#: ../../addon/cart/submodules/manualcat.php:252
-msgid "Changes Locked"
+#: ../../include/attach.php:1301
+msgid "database storage failed."
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:653
-#: ../../addon/cart/submodules/manualcat.php:256
-msgid "Item available for purchase."
+#: ../../include/attach.php:1347
+msgid "Empty path"
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:660
-#: ../../addon/cart/submodules/manualcat.php:263
-#: ../../addon/cart/widgets/catalogitem.php:57
-msgid "Price"
+#: ../../include/attach.php:2122
+#, php-format
+msgid "%s shared an %s with you"
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:663
-#: ../../addon/cart/submodules/manualcat.php:266
-msgid "Photo URL"
+#: ../../include/attach.php:2122
+#, php-format
+msgid "%s shared a %s with you"
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:667
-msgid "Add buyer to privacy group"
+#: ../../include/attach.php:2122
+msgid "image"
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:672
-msgid "Add buyer as connection"
+#: ../../include/bookmarks.php:34
+#, php-format
+msgid "%1$s's bookmarks"
msgstr ""
-#: ../../addon/cart/submodules/hzservices.php:680
-#: ../../addon/cart/submodules/hzservices.php:722
-msgid "Set Service Class"
+#: ../../include/bbcode.php:233 ../../include/bbcode.php:937
+#: ../../include/bbcode.php:1558 ../../include/bbcode.php:1566
+msgid "Image/photo"
msgstr ""
-#: ../../addon/cart/submodules/manualcat.php:61
-msgid "Enable Manual Cart Module"
+#: ../../include/bbcode.php:280 ../../include/bbcode.php:1583
+msgid "Encrypted content"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:151
-msgid "Enable Subscription Management Module"
+#: ../../include/bbcode.php:334
+#, php-format
+msgid "Install %1$s element %2$s"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:223
+#: ../../include/bbcode.php:338
+#, php-format
msgid ""
-"Cannot include subscription items with different terms in the same order."
+"This post contains an installable %s element, however you lack permissions "
+"to install it on this site."
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:372
-msgid "Select Subscription to Edit"
+#: ../../include/bbcode.php:348 ../../Zotlabs/Module/Impel.php:47
+msgid "webpage"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:380
-msgid "Edit Subscriptions"
+#: ../../include/bbcode.php:351 ../../Zotlabs/Module/Impel.php:57
+msgid "layout"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:414
-msgid "Subscription SKU"
+#: ../../include/bbcode.php:354 ../../Zotlabs/Module/Impel.php:52
+msgid "block"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:419
-msgid "Catalog Description"
+#: ../../include/bbcode.php:357 ../../Zotlabs/Module/Impel.php:64
+msgid "menu"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:423
-msgid "Subscription available for purchase."
+#: ../../include/bbcode.php:560
+msgid "card"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:428
-msgid "Maximum active subscriptions to this item per account."
+#: ../../include/bbcode.php:562
+msgid "article"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:431
-msgid "Subscription price."
+#: ../../include/bbcode.php:568 ../../include/markdown.php:206
+#, php-format
+msgid "%1$s wrote the following %2$s %3$s"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:435
-msgid "Quantity"
+#: ../../include/bbcode.php:645 ../../include/bbcode.php:653
+msgid "Click to open/close"
msgstr ""
-#: ../../addon/cart/submodules/subscriptions.php:439
-msgid "Term"
+#: ../../include/bbcode.php:653 ../../include/markdown.php:259
+msgid "spoiler"
msgstr ""
-#: ../../addon/cart/submodules/orderoptions.php:70
-msgid "Enable Order/Item Options"
+#: ../../include/bbcode.php:666
+msgid "View article"
msgstr ""
-#: ../../addon/cart/submodules/orderoptions.php:333
-#: ../../addon/cart/submodules/orderoptions.php:357
-#: ../../addon/cart/submodules/orderoptions.php:433
-#: ../../addon/cart/submodules/orderoptions.php:457
-msgid "Label"
+#: ../../include/bbcode.php:666
+msgid "View summary"
msgstr ""
-#: ../../addon/cart/submodules/orderoptions.php:336
-#: ../../addon/cart/submodules/orderoptions.php:360
-#: ../../addon/cart/submodules/orderoptions.php:436
-#: ../../addon/cart/submodules/orderoptions.php:460
-msgid "Instructions"
+#: ../../include/bbcode.php:1534
+msgid "$1 wrote:"
msgstr ""
-#: ../../addon/cart/manual_payments.php:7
-msgid "Error: order mismatch. Please try again."
+#: ../../include/channel.php:48
+msgid "Unable to obtain identity information from database"
msgstr ""
-#: ../../addon/cart/manual_payments.php:61
-msgid "Manual payments are not enabled."
+#: ../../include/channel.php:81
+msgid "Empty name"
msgstr ""
-#: ../../addon/cart/manual_payments.php:77
-msgid "Finished"
+#: ../../include/channel.php:84
+msgid "Name too long"
msgstr ""
-#: ../../addon/cart/cart.php:252
-msgid "DB Cleanup Failure"
+#: ../../include/channel.php:201
+msgid "No account identifier"
msgstr ""
-#: ../../addon/cart/cart.php:674
-msgid "[cart] Item Added"
+#: ../../include/channel.php:213 ../../Zotlabs/Module/Register.php:95
+msgid "Nickname is required."
msgstr ""
-#: ../../addon/cart/cart.php:1063
-msgid "Order already checked out."
+#: ../../include/channel.php:227 ../../include/channel.php:659
+#: ../../Zotlabs/Module/Register.php:100 ../../Zotlabs/Module/Changeaddr.php:46
+msgid "Reserved nickname. Please choose another."
msgstr ""
-#: ../../addon/cart/cart.php:1368
-msgid "Drop database tables when uninstalling."
+#: ../../include/channel.php:232 ../../include/channel.php:664
+#: ../../Zotlabs/Module/Register.php:105 ../../Zotlabs/Module/Changeaddr.php:51
+msgid ""
+"Nickname has unsupported characters or is already being used on this site."
msgstr ""
-#: ../../addon/cart/cart.php:1375 ../../addon/cart/Settings/Cart.php:129
-msgid "Cart Settings"
+#: ../../include/channel.php:292
+msgid "Unable to retrieve created identity"
msgstr ""
-#: ../../addon/cart/cart.php:1387 ../../addon/cart/cart.php:1390
-msgid "Shop"
+#: ../../include/channel.php:402
+msgid "Default Profile"
msgstr ""
-#: ../../addon/cart/cart.php:1446 ../../addon/cart/myshop.php:112
-msgid "Order Not Found"
+#: ../../include/channel.php:592 ../../include/channel.php:681
+msgid "Unable to retrieve modified identity"
msgstr ""
-#: ../../addon/cart/cart.php:1547
-msgid "You must be logged into the Grid to shop."
+#: ../../include/channel.php:1373
+msgid "Requested channel is not available"
msgstr ""
-#: ../../addon/cart/cart.php:1594
-msgid "Access denied."
+#: ../../include/channel.php:1523 ../../Zotlabs/Module/Profiles.php:745
+msgid "Change profile photo"
msgstr ""
-#: ../../addon/cart/cart.php:1646 ../../addon/cart/cart.php:1789
-msgid "No Order Found"
+#: ../../include/channel.php:1531
+msgid "Create New Profile"
msgstr ""
-#: ../../addon/cart/cart.php:1655
-msgid "An unknown error has occurred Please start again."
+#: ../../include/channel.php:1549 ../../Zotlabs/Module/Profiles.php:842
+msgid "Profile Image"
msgstr ""
-#: ../../addon/cart/cart.php:1798
-msgid "Requirements not met."
+#: ../../include/channel.php:1552
+msgid "Visible to everybody"
msgstr ""
-#: ../../addon/cart/cart.php:1798
-msgid "Review your order and complete any needed requirements."
+#: ../../include/channel.php:1553 ../../Zotlabs/Module/Profiles.php:742
+#: ../../Zotlabs/Module/Profiles.php:846
+msgid "Edit visibility"
msgstr ""
-#: ../../addon/cart/cart.php:1824
-msgid "Invalid Payment Type. Please start again."
+#: ../../include/channel.php:1631 ../../include/channel.php:1757
+msgid "Gender:"
msgstr ""
-#: ../../addon/cart/cart.php:1831
-msgid "Order not found"
+#: ../../include/channel.php:1632 ../../include/channel.php:1801
+msgid "Status:"
msgstr ""
-#: ../../addon/cart/Settings/Cart.php:58
-msgid "Enable Test Catalog"
+#: ../../include/channel.php:1633 ../../include/channel.php:1825
+msgid "Homepage:"
msgstr ""
-#: ../../addon/cart/Settings/Cart.php:70
-msgid "Enable Manual Payments"
+#: ../../include/channel.php:1634 ../../include/channel.php:1827
+#: ../../Zotlabs/Module/Directory.php:360
+msgid "Hometown:"
msgstr ""
-#: ../../addon/cart/Settings/Cart.php:90
-msgid "Base Merchant Currency"
+#: ../../include/channel.php:1635
+msgid "Online Now"
msgstr ""
-#: ../../addon/cart/myshop.php:30
-msgid "Access Denied."
+#: ../../include/channel.php:1685
+msgid "Change your profile photo"
msgstr ""
-#: ../../addon/cart/myshop.php:189 ../../addon/cart/myshop.php:223
-#: ../../addon/cart/myshop.php:271 ../../addon/cart/myshop.php:329
-msgid "Invalid Item"
+#: ../../include/channel.php:1716
+msgid "Trans"
msgstr ""
-#: ../../addon/redfiles/redfiles.php:119
-msgid "Redmatrix File Storage Import"
+#: ../../include/channel.php:1755
+msgid "Full Name:"
msgstr ""
-#: ../../addon/redfiles/redfiles.php:120
-msgid "This will import all your Redmatrix cloud files to this channel."
+#: ../../include/channel.php:1762
+msgid "Like this channel"
msgstr ""
-#: ../../addon/upload_limits/upload_limits.php:25
-msgid "Show Upload Limits"
+#: ../../include/channel.php:1786
+msgid "j F, Y"
msgstr ""
-#: ../../addon/upload_limits/upload_limits.php:27
-msgid "Hubzilla configured maximum size: "
+#: ../../include/channel.php:1787
+msgid "j F"
msgstr ""
-#: ../../addon/upload_limits/upload_limits.php:28
-msgid "PHP upload_max_filesize: "
+#: ../../include/channel.php:1794
+msgid "Birthday:"
msgstr ""
-#: ../../addon/upload_limits/upload_limits.php:29
-msgid "PHP post_max_size (must be larger than upload_max_filesize): "
+#: ../../include/channel.php:1798 ../../Zotlabs/Module/Directory.php:345
+msgid "Age:"
msgstr ""
-#: ../../addon/rtof/Mod_Rtof.php:24
-msgid "Friendica Crosspost Connector Settings saved."
+#: ../../include/channel.php:1807
+#, php-format
+msgid "for %1$d %2$s"
msgstr ""
-#: ../../addon/rtof/Mod_Rtof.php:47
-msgid "Send public postings to Friendica by default"
+#: ../../include/channel.php:1819
+msgid "Tags:"
msgstr ""
-#: ../../addon/rtof/Mod_Rtof.php:51
-msgid "Friendica API Path"
+#: ../../include/channel.php:1823
+msgid "Sexual Preference:"
msgstr ""
-#: ../../addon/rtof/Mod_Rtof.php:55
-msgid "Friendica login name"
+#: ../../include/channel.php:1829
+msgid "Political Views:"
msgstr ""
-#: ../../addon/rtof/Mod_Rtof.php:59
-msgid "Friendica password"
+#: ../../include/channel.php:1831
+msgid "Religion:"
msgstr ""
-#: ../../addon/rtof/Mod_Rtof.php:67
-msgid "Friendica Crosspost Connector"
+#: ../../include/channel.php:1833 ../../Zotlabs/Module/Directory.php:362
+msgid "About:"
msgstr ""
-#: ../../addon/rtof/rtof.php:51
-msgid "Post to Friendica"
+#: ../../include/channel.php:1835
+msgid "Hobbies/Interests:"
msgstr ""
-#: ../../addon/rainbowtag/Mod_Rainbowtag.php:22
-msgid "Rainbow Tag App"
+#: ../../include/channel.php:1837
+msgid "Likes:"
msgstr ""
-#: ../../addon/rainbowtag/Mod_Rainbowtag.php:23
-msgid "Add some colour to tag clouds"
+#: ../../include/channel.php:1839
+msgid "Dislikes:"
msgstr ""
-#: ../../addon/rainbowtag/Mod_Rainbowtag.php:30
-msgid "Rainbow Tag"
+#: ../../include/channel.php:1841
+msgid "Contact information and Social Networks:"
msgstr ""
-#: ../../addon/authchoose/Mod_Authchoose.php:30
-msgid ""
-"Allow magic authentication only to websites of your immediate connections"
+#: ../../include/channel.php:1843
+msgid "My other channels:"
msgstr ""
-#: ../../addon/authchoose/Mod_Authchoose.php:36
-msgid "Authchoose"
+#: ../../include/channel.php:1845
+msgid "Musical interests:"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:27
-msgid "No server specified"
+#: ../../include/channel.php:1847
+msgid "Books, literature:"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:73
-msgid "Posts imported"
+#: ../../include/channel.php:1849
+msgid "Television:"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:113
-msgid "Files imported"
+#: ../../include/channel.php:1851
+msgid "Film/dance/culture/entertainment:"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:134
-#: ../../Zotlabs/Lib/Apps.php:337
-msgid "Content Import"
+#: ../../include/channel.php:1853
+msgid "Love/Romance:"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:135
-msgid ""
-"This will import all your conversations and cloud files from a cloned "
-"channel on another server. This may take a while if you have lots of posts "
-"and or files."
+#: ../../include/channel.php:1855
+msgid "Work/employment:"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:136
-msgid "Include posts"
+#: ../../include/channel.php:1857
+msgid "School/education:"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:136
-msgid "Conversations, Articles, Cards, and other posted content"
+#: ../../include/channel.php:1878 ../../Zotlabs/Module/Profperm.php:113
+#: ../../Zotlabs/Lib/Apps.php:367
+msgid "Profile"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:137
-msgid "Include files"
+#: ../../include/channel.php:1880
+msgid "Like this thing"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:137
-msgid "Files, Photos and other cloud storage"
+#: ../../include/channel.php:1881
+msgid "Export"
msgstr ""
-#: ../../addon/content_import/Mod_content_import.php:138
-msgid "Original Server base URL"
+#: ../../include/channel.php:2334 ../../Zotlabs/Module/Cover_photo.php:304
+msgid "cover photo"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:108
-#: ../../Zotlabs/Access/PermissionRoles.php:384
-msgid "Public"
+#: ../../include/channel.php:2609 ../../Zotlabs/Module/Rmagic.php:96
+#: ../../boot.php:1749
+msgid "Remote Authentication"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:109
-msgid "Anybody in the $Projectname network"
+#: ../../include/channel.php:2610 ../../Zotlabs/Module/Rmagic.php:97
+msgid "Enter your channel address (e.g. channel@example.com)"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:110
+#: ../../include/channel.php:2611 ../../Zotlabs/Module/Rmagic.php:98
+msgid "Authenticate"
+msgstr ""
+
+#: ../../include/channel.php:2769 ../../Zotlabs/Module/Admin/Accounts.php:184
#, php-format
-msgid "Any account on %s"
+msgid "Account '%s' deleted"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:111
-msgid "Any of my connections"
+#: ../../include/acl_selectors.php:33
+#: ../../Zotlabs/Lib/PermissionDescription.php:34
+msgid "Visible to your default audience"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:112
-msgid "Only connections I specifically allow"
+#: ../../include/acl_selectors.php:100
+msgid "Profile-Based Privacy Groups"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:113
-msgid "Anybody authenticated (could include visitors from other networks)"
+#: ../../include/acl_selectors.php:119
+msgid "Private Forum"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:114
-msgid "Any connections including those who haven't yet been approved"
+#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:77
+#: ../../Zotlabs/Widget/Activity_filter.php:130
+#: ../../Zotlabs/Widget/Notifications.php:131
+#: ../../Zotlabs/Widget/Notifications.php:132
+msgid "Forums"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:150
-msgid ""
-"This is your default setting for the audience of your normal stream, and "
-"posts."
+#: ../../include/acl_selectors.php:136
+#: ../../Zotlabs/Module/Settings/Privacy.php:56
+#: ../../Zotlabs/Lib/PermissionDescription.php:107
+msgid "Only me"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:151
-msgid ""
-"This is your default setting for who can view your default channel profile"
+#: ../../include/acl_selectors.php:143
+msgid "Share with"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:152
-msgid "This is your default setting for who can view your connections"
+#: ../../include/acl_selectors.php:144
+msgid "Custom selection"
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:153
+#: ../../include/acl_selectors.php:146
msgid ""
-"This is your default setting for who can view your file storage and photos"
+"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and "
+"limit the scope of \"Allow\"."
msgstr ""
-#: ../../Zotlabs/Lib/PermissionDescription.php:154
-msgid "This is your default setting for the audience of your webpages"
+#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32
+msgid "Allow"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:329
-msgid "Affinity Tool"
+#: ../../include/acl_selectors.php:148
+msgid "Don't allow"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:332
-msgid "Site Admin"
+#: ../../include/acl_selectors.php:181
+#, php-format
+msgid ""
+"Post permissions %s cannot be changed %s after a post is shared.</br />These "
+"permissions set who is allowed to view the post."
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:336
-msgid "Content Filter"
+#: ../../include/oembed.php:154
+msgid "View PDF"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:339
-msgid "Remote Diagnostics"
+#: ../../include/oembed.php:386
+msgid " by "
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:340
-msgid "Suggest Channels"
+#: ../../include/oembed.php:387
+msgid " on "
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:342
-msgid "Channel Manager"
+#: ../../include/oembed.php:416
+msgid "Embedded content"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:343
-msgid "Stream"
+#: ../../include/oembed.php:425
+msgid "Embedding disabled"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:354
-msgid "Mail"
+#: ../../include/zid.php:410
+#, php-format
+msgid "OpenWebAuth: %1$s welcomes %2$s"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:355 ../../Zotlabs/Module/Mood.php:152
-msgid "Mood"
+#: ../../Zotlabs/Widget/Activity_order.php:96
+msgid "Commented Date"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:357
-msgid "Chat"
+#: ../../Zotlabs/Widget/Activity_order.php:100
+msgid "Order by last commented date"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:359
-msgid "Probe"
+#: ../../Zotlabs/Widget/Activity_order.php:103
+msgid "Posted Date"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:360
-msgid "Suggest"
+#: ../../Zotlabs/Widget/Activity_order.php:107
+msgid "Order by last posted date"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:361
-msgid "Random Channel"
+#: ../../Zotlabs/Widget/Activity_order.php:110
+msgid "Date Unthreaded"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:362
-msgid "Invite"
+#: ../../Zotlabs/Widget/Activity_order.php:114
+msgid "Order unthreaded by date"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:363 ../../Zotlabs/Widget/Admin.php:31
-msgid "Features"
+#: ../../Zotlabs/Widget/Activity_order.php:129
+msgid "Stream Order"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:365 ../../Zotlabs/Storage/Browser.php:410
-msgid "Post"
+#: ../../Zotlabs/Widget/Tokens.php:41
+msgid "Add new guest"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:370
-msgid "Notifications"
+#: ../../Zotlabs/Widget/Tokens.php:49 ../../Zotlabs/Module/Lockview.php:226
+msgid "Guest access"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:371
-msgid "Order Apps"
+#: ../../Zotlabs/Widget/Archive.php:49
+msgid "Archives"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:372
-msgid "CardDAV"
+#: ../../Zotlabs/Widget/Album.php:84 ../../Zotlabs/Widget/Portfolio.php:91
+#: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Module/Photos.php:782
+#: ../../Zotlabs/Module/Photos.php:1323
+msgid "View Photo"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Sources.php:105
-msgid "Channel Sources"
+#: ../../Zotlabs/Widget/Album.php:101 ../../Zotlabs/Widget/Portfolio.php:112
+#: ../../Zotlabs/Module/Embedphotos.php:187 ../../Zotlabs/Module/Photos.php:813
+msgid "Edit Album"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:374 ../../Zotlabs/Module/Tokens.php:288
-msgid "Guest Access"
+#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Cdav.php:152
+#: ../../Zotlabs/Widget/Cdav.php:188 ../../Zotlabs/Widget/Portfolio.php:114
+#: ../../Zotlabs/Module/Embedphotos.php:189
+#: ../../Zotlabs/Module/Profile_photo.php:547
+#: ../../Zotlabs/Module/Cover_photo.php:423 ../../Zotlabs/Module/Photos.php:681
+#: ../../Zotlabs/Storage/Browser.php:546
+msgid "Upload"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:376
-msgid "OAuth Apps Manager"
+#: ../../Zotlabs/Widget/Tasklist.php:31
+msgid "Tasks"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:377
-msgid "OAuth2 Apps Manager"
+#: ../../Zotlabs/Widget/Chatroom_members.php:17
+msgid "Chat Members"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:378
-msgid "PDL Editor"
+#: ../../Zotlabs/Widget/Channel_activities.php:29
+#: ../../Zotlabs/Module/Go.php:27
+msgid "Welcome"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Module/Permcats.php:248
-msgid "Contact Roles"
+#: ../../Zotlabs/Widget/Channel_activities.php:46
+msgid "No recent activities"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:380 ../../Zotlabs/Module/Pubstream.php:100
-#: ../../Zotlabs/Widget/Notifications.php:154
-msgid "Public Stream"
+#: ../../Zotlabs/Widget/Channel_activities.php:214
+msgctxt "noun"
+msgid "new connection"
+msgid_plural "new connections"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../Zotlabs/Widget/Channel_activities.php:220
+msgctxt "noun"
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../Zotlabs/Widget/Pinned.php:75 ../../Zotlabs/Lib/ThreadItem.php:206
+msgid "I will attend"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:381
-msgid "My Chatrooms"
+#: ../../Zotlabs/Widget/Pinned.php:75 ../../Zotlabs/Lib/ThreadItem.php:206
+msgid "I will not attend"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:382
-msgid "Channel Export"
+#: ../../Zotlabs/Widget/Pinned.php:75 ../../Zotlabs/Lib/ThreadItem.php:206
+msgid "I might attend"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:546 ../../Zotlabs/Module/Oauth2.php:58
-#: ../../Zotlabs/Module/Oauth2.php:142 ../../Zotlabs/Module/Oauth.php:53
-#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Connedit.php:748
-#: ../../Zotlabs/Module/Admin/Addons.php:460 ../../Zotlabs/Module/Cdav.php:1054
-#: ../../Zotlabs/Module/Cdav.php:1390
-msgid "Update"
+#: ../../Zotlabs/Widget/Pinned.php:86
+msgid "I agree"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:546 ../../Zotlabs/Module/Admin/Addons.php:429
-msgid "Install"
+#: ../../Zotlabs/Widget/Pinned.php:86
+msgid "I disagree"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:576 ../../Zotlabs/Lib/Apps.php:598
-msgid "Purchase"
+#: ../../Zotlabs/Widget/Pinned.php:86
+msgid "I abstain"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:603
-msgid "Undelete"
+#: ../../Zotlabs/Widget/Pinned.php:104 ../../Zotlabs/Lib/ThreadItem.php:324
+msgid "Share This"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:611
-msgid "Add to app-tray"
+#: ../../Zotlabs/Widget/Pinned.php:104 ../../Zotlabs/Lib/ThreadItem.php:324
+msgid "share"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:612
-msgid "Remove from app-tray"
+#: ../../Zotlabs/Widget/Pinned.php:127 ../../Zotlabs/Widget/Pinned.php:128
+#, php-format
+msgid "View %s's profile - %s"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:613
-msgid "Pin to navbar"
+#: ../../Zotlabs/Widget/Pinned.php:132 ../../Zotlabs/Widget/Messages.php:146
+#: ../../Zotlabs/Lib/ThreadItem.php:414
+msgid "via"
msgstr ""
-#: ../../Zotlabs/Lib/Apps.php:614
-msgid "Unpin from navbar"
+#: ../../Zotlabs/Widget/Pinned.php:146 ../../Zotlabs/Lib/ThreadItem.php:445
+msgid "Attendance Options"
msgstr ""
-#: ../../Zotlabs/Lib/Permcat.php:83
-msgctxt "permcat"
-msgid "Default"
+#: ../../Zotlabs/Widget/Pinned.php:147 ../../Zotlabs/Lib/ThreadItem.php:447
+msgid "Voting Options"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:46 ../../Zotlabs/Lib/Connect.php:146
-msgid "Channel is blocked on this site."
+#: ../../Zotlabs/Widget/Pinned.php:159 ../../Zotlabs/Lib/ThreadItem.php:471
+msgid "Pinned post"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:51
-msgid "Channel location missing."
+#: ../../Zotlabs/Widget/Pinned.php:161
+msgid "Don't show"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:104
-msgid "Remote channel or protocol unavailable."
+#: ../../Zotlabs/Widget/Activity.php:55
+msgctxt "widget"
+msgid "Activity"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:140
-msgid "Channel discovery failed."
+#: ../../Zotlabs/Widget/Cdav.php:41
+msgid "Select Channel"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:158
-msgid "Protocol disabled."
+#: ../../Zotlabs/Widget/Cdav.php:46
+msgid "Read-write"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:170
-msgid "Cannot connect to yourself."
+#: ../../Zotlabs/Widget/Cdav.php:47
+msgid "Read-only"
msgstr ""
-#: ../../Zotlabs/Lib/Connect.php:275
-msgid "error saving data"
+#: ../../Zotlabs/Widget/Cdav.php:133
+msgid "Channel Calendar"
msgstr ""
-#: ../../Zotlabs/Lib/Libsync.php:818
-#, php-format
-msgid "Unable to verify site signature for %s"
+#: ../../Zotlabs/Widget/Cdav.php:135 ../../Zotlabs/Widget/Cdav.php:149
+#: ../../Zotlabs/Module/Cdav.php:1046
+msgid "CalDAV Calendars"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:60
-msgid "$Projectname Notification"
+#: ../../Zotlabs/Widget/Cdav.php:137
+msgid "Shared CalDAV Calendars"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:63
-msgid "Thank You,"
+#: ../../Zotlabs/Widget/Cdav.php:141
+msgid "Share this calendar"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:66
-#, php-format
-msgid "This email was sent by %1$s at %2$s."
+#: ../../Zotlabs/Widget/Cdav.php:143
+msgid "Calendar name and color"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:67
-#, php-format
-msgid ""
-"To stop receiving these messages, please adjust your Notification Settings "
-"at %s"
+#: ../../Zotlabs/Widget/Cdav.php:145
+msgid "Create new CalDAV calendar"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:68
-#, php-format
-msgid "To stop receiving these messages, please adjust your %s."
+#: ../../Zotlabs/Widget/Cdav.php:146 ../../Zotlabs/Widget/Cdav.php:184
+#: ../../Zotlabs/Module/Cdav.php:1050 ../../Zotlabs/Module/Cdav.php:1379
+#: ../../Zotlabs/Module/Webpages.php:249
+#: ../../Zotlabs/Module/New_channel.php:189 ../../Zotlabs/Module/Blocks.php:157
+#: ../../Zotlabs/Module/Menu.php:182 ../../Zotlabs/Module/Connedit.php:747
+#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Storage/Browser.php:368
+#: ../../Zotlabs/Storage/Browser.php:544
+msgid "Create"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:68
-#: ../../Zotlabs/Module/Settings/Channel.php:241
-msgid "Notification Settings"
+#: ../../Zotlabs/Widget/Cdav.php:147
+msgid "Calendar Name"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:123
-#, php-format
-msgid "%s <!item_type!>"
+#: ../../Zotlabs/Widget/Cdav.php:148
+msgid "Calendar Tools"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:131
-#, php-format
-msgid "[$Projectname:Notify] New direct message received at %s"
+#: ../../Zotlabs/Widget/Cdav.php:149 ../../Zotlabs/Module/Cdav.php:1046
+msgid "Channel Calendars"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:133
-#, php-format
-msgid "%1$s sent you a new direct message at %2$s"
+#: ../../Zotlabs/Widget/Cdav.php:150
+msgid "Import calendar"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:134
-#, php-format
-msgid "%1$s sent you %2$s."
+#: ../../Zotlabs/Widget/Cdav.php:151
+msgid "Select a calendar to import to"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:134
-msgid "a direct message"
+#: ../../Zotlabs/Widget/Cdav.php:178
+msgid "Addressbooks"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:135
-#, php-format
-msgid "Please visit %s to view and/or reply to your direct messages."
+#: ../../Zotlabs/Widget/Cdav.php:180
+msgid "Addressbook name"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:148
-msgid "commented on"
+#: ../../Zotlabs/Widget/Cdav.php:182
+msgid "Create new addressbook"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:310
-msgid "liked"
+#: ../../Zotlabs/Widget/Cdav.php:183
+msgid "Addressbook Name"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:310
-msgid "disliked"
+#: ../../Zotlabs/Widget/Cdav.php:185
+msgid "Addressbook Tools"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:169
-msgid "voted on"
+#: ../../Zotlabs/Widget/Cdav.php:186
+msgid "Import addressbook"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:212
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
+#: ../../Zotlabs/Widget/Cdav.php:187
+msgid "Select an addressbook to import to"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:220
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
+#: ../../Zotlabs/Widget/Savedsearch.php:81
+msgid "Remove term"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:229 ../../Zotlabs/Lib/Enotify.php:314
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
+#: ../../Zotlabs/Widget/Suggestedchats.php:36
+msgid "Suggested Chatrooms"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:241
-#, php-format
-msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
+#: ../../Zotlabs/Widget/Settings_menu.php:37
+msgid "Account settings"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:243
-#, php-format
-msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
+#: ../../Zotlabs/Widget/Settings_menu.php:43
+msgid "Channel settings"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:244
-#, php-format
-msgid "%1$s commented on an item/conversation you have been following"
+#: ../../Zotlabs/Widget/Settings_menu.php:49
+msgid "Privacy settings"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:247 ../../Zotlabs/Lib/Enotify.php:334
-#: ../../Zotlabs/Lib/Enotify.php:350 ../../Zotlabs/Lib/Enotify.php:374
-#: ../../Zotlabs/Lib/Enotify.php:391 ../../Zotlabs/Lib/Enotify.php:404
-#, php-format
-msgid "Please visit %s to view and/or reply to the conversation."
+#: ../../Zotlabs/Widget/Settings_menu.php:56
+msgid "Display settings"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:252
-#, php-format
-msgid "Please visit %s to approve or reject this comment."
+#: ../../Zotlabs/Widget/Settings_menu.php:63
+msgid "Manage locations"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:330
-#, php-format
-msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
+#: ../../Zotlabs/Widget/Chatroom_list.php:26
+msgid "Overview"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:331
-#, php-format
-msgid "%1$s liked an item/conversation you created"
+#: ../../Zotlabs/Widget/Suggestions.php:53 ../../Zotlabs/Module/Suggest.php:71
+msgid "Ignore/Hide"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:342
-#, php-format
-msgid "[$Projectname:Notify] %s posted to your profile wall"
+#: ../../Zotlabs/Widget/Suggestions.php:58
+msgid "Suggestions"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:344
-#, php-format
-msgid "%1$s posted to your profile wall at %2$s"
+#: ../../Zotlabs/Widget/Suggestions.php:59
+msgid "See more..."
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:346
-#, php-format
-msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
+#: ../../Zotlabs/Widget/Bookmarkedchats.php:25
+msgid "Bookmarked Chatrooms"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:368
-#, php-format
-msgid "[$Projectname:Notify] %s tagged you"
+#: ../../Zotlabs/Widget/Appcategories.php:49
+msgid "App Categories"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:369
-#, php-format
-msgid "%1$s tagged you at %2$s"
+#: ../../Zotlabs/Widget/Hq_controls.php:23
+msgid "Toggle post editor"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:370
-#, php-format
-msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
+#: ../../Zotlabs/Widget/Hq_controls.php:33
+msgid "Toggle personal notes"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:381
-#, php-format
-msgid "[$Projectname:Notify] %1$s poked you"
+#: ../../Zotlabs/Widget/Hq_controls.php:43
+msgid "Channel activities"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:382
-#, php-format
-msgid "%1$s poked you at %2$s"
+#: ../../Zotlabs/Widget/Permcats.php:43
+msgid "Add new role"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:383
-#, php-format
-msgid "%1$s [zrl=%2$s]poked you[/zrl]."
+#: ../../Zotlabs/Widget/Permcats.php:92
+#: ../../Zotlabs/Module/Contactedit.php:409
+msgid "Contact roles"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:398
-#, php-format
-msgid "[$Projectname:Notify] %s tagged your post"
+#: ../../Zotlabs/Widget/Permcats.php:93
+msgid "Role members"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:399
-#, php-format
-msgid "%1$s tagged your post at %2$s"
+#: ../../Zotlabs/Widget/Photo.php:54 ../../Zotlabs/Widget/Photo_rand.php:63
+msgid "photo/image"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:400
-#, php-format
-msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
+#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:414
+msgid "Site"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:411
-msgid "[$Projectname:Notify] Introduction received"
+#: ../../Zotlabs/Widget/Admin.php:28
+#: ../../Zotlabs/Module/Admin/Accounts.php:308
+#: ../../Zotlabs/Module/Admin/Accounts.php:327
+#: ../../Zotlabs/Module/Admin.php:95
+msgid "Accounts"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:412
-#, php-format
-msgid "You've received an new connection request from '%1$s' at %2$s"
+#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:66
+msgid "Member registrations waiting for confirmation"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:413
-#, php-format
-msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
+#: ../../Zotlabs/Widget/Admin.php:30 ../../Zotlabs/Module/Admin/Security.php:99
+msgid "Security"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:416 ../../Zotlabs/Lib/Enotify.php:434
-#, php-format
-msgid "You may visit their profile at %s"
+#: ../../Zotlabs/Widget/Admin.php:31 ../../Zotlabs/Lib/Apps.php:363
+msgid "Features"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:418
-#, php-format
-msgid "Please visit %s to approve or reject the connection request."
+#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:346
+#: ../../Zotlabs/Module/Admin/Addons.php:444
+msgid "Addons"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:425
-msgid "[$Projectname:Notify] Friend suggestion received"
+#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:123
+#: ../../Zotlabs/Module/Admin/Themes.php:157
+msgid "Themes"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:426
-#, php-format
-msgid "You've received a friend suggestion from '%1$s' at %2$s"
+#: ../../Zotlabs/Widget/Admin.php:34
+msgid "Inspect queue"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:427
-#, php-format
-msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
+#: ../../Zotlabs/Widget/Admin.php:35
+msgid "Queueworker"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:432
-msgid "Name:"
+#: ../../Zotlabs/Widget/Admin.php:36 ../../Zotlabs/Module/Admin/Profs.php:168
+msgid "Profile Fields"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:433
-msgid "Photo:"
+#: ../../Zotlabs/Widget/Admin.php:37
+msgid "DB updates"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:436
-#, php-format
-msgid "Please visit %s to approve or reject the suggestion."
+#: ../../Zotlabs/Widget/Admin.php:54 ../../Zotlabs/Widget/Admin.php:64
+#: ../../Zotlabs/Module/Admin/Logs.php:83
+msgid "Logs"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:661
-msgid "[$Projectname:Notify]"
+#: ../../Zotlabs/Widget/Admin.php:62
+msgid "Addon Features"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:827
-msgid "created a new poll"
+#: ../../Zotlabs/Widget/Activity_filter.php:44
+#: ../../Zotlabs/Widget/Notifications.php:62
+msgid "Direct Messages"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:827
-msgid "created a new post"
+#: ../../Zotlabs/Widget/Activity_filter.php:48
+msgid "Show direct (private) messages"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:828
-#, php-format
-msgid "voted on %s's poll"
+#: ../../Zotlabs/Widget/Activity_filter.php:53
+#: ../../Zotlabs/Widget/Notifications.php:81
+msgid "Events"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:828
-#, php-format
-msgid "commented on %s's post"
+#: ../../Zotlabs/Widget/Activity_filter.php:57
+msgid "Show posts that include events"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:832
-#, php-format
-msgid "repeated %s's post"
+#: ../../Zotlabs/Widget/Activity_filter.php:63
+msgid "Polls"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:836
-#, php-format
-msgid "liked %s's post"
+#: ../../Zotlabs/Widget/Activity_filter.php:67
+msgid "Show posts that include polls"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:840
+#: ../../Zotlabs/Widget/Activity_filter.php:90
#, php-format
-msgid "disliked %s's post"
+msgid "Show posts related to the %s privacy group"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:844 ../../Zotlabs/Lib/Enotify.php:947
-msgid "shared a file with you"
+#: ../../Zotlabs/Widget/Activity_filter.php:99
+msgid "Show my privacy groups"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:853
-#, php-format
-msgid "edited a post dated %s"
+#: ../../Zotlabs/Widget/Activity_filter.php:123
+msgid "Show posts to this forum"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:856
-#, php-format
-msgid "edited a comment dated %s"
+#: ../../Zotlabs/Widget/Activity_filter.php:134
+msgid "Show forums"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:932
-msgid "added your channel"
+#: ../../Zotlabs/Widget/Activity_filter.php:148
+msgid "Starred Posts"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:962
-msgid "sent you a direct message"
+#: ../../Zotlabs/Widget/Activity_filter.php:152
+msgid "Show posts that I have starred"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:969
-msgid "g A l F d"
+#: ../../Zotlabs/Widget/Activity_filter.php:163
+msgid "Personal Posts"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:972
-msgid "[today]"
+#: ../../Zotlabs/Widget/Activity_filter.php:167
+msgid "Show posts that mention or involve me"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:982
-msgid "created an event"
+#: ../../Zotlabs/Widget/Activity_filter.php:190
+#, php-format
+msgid "Show posts that I have filed to %s"
msgstr ""
-#: ../../Zotlabs/Lib/Enotify.php:997
-msgid "status verified"
+#: ../../Zotlabs/Widget/Activity_filter.php:200
+msgid "Show filed post categories"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:163
-msgid "Directory Options"
+#: ../../Zotlabs/Widget/Activity_filter.php:214
+msgid "Panel search"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:165
-msgid "Safe Mode"
+#: ../../Zotlabs/Widget/Activity_filter.php:224
+msgid "Filter by name"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:166
-msgid "Public Forums Only"
+#: ../../Zotlabs/Widget/Activity_filter.php:239
+msgid "Remove active filter"
msgstr ""
-#: ../../Zotlabs/Lib/Libzotdir.php:168
-msgid "This Website Only"
+#: ../../Zotlabs/Widget/Activity_filter.php:255
+msgid "Stream Filters"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:10
-msgid "0. Beginner/Basic"
+#: ../../Zotlabs/Widget/Appstore.php:16
+msgid "App Collections"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:11
-msgid "1. Novice - not skilled but willing to learn"
+#: ../../Zotlabs/Widget/Appstore.php:18
+msgid "Installed apps"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:12
-msgid "2. Intermediate - somewhat comfortable"
+#: ../../Zotlabs/Widget/Appstore.php:19 ../../Zotlabs/Module/Apps.php:51
+msgid "Available Apps"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:13
-msgid "3. Advanced - very comfortable"
+#: ../../Zotlabs/Widget/Privacygroups.php:45
+msgid "Add new group"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:14
-msgid "4. Expert - I can write computer code"
+#: ../../Zotlabs/Widget/Privacygroups.php:54
+#: ../../Zotlabs/Module/Contactedit.php:443
+msgid "Privacy groups"
msgstr ""
-#: ../../Zotlabs/Lib/Techlevels.php:15
-msgid "5. Wizard - I probably know more than you do"
+#: ../../Zotlabs/Widget/Rating.php:57
+msgid "Rating Tools"
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:67
-msgid "Source code of failed update: "
+#: ../../Zotlabs/Widget/Rating.php:61 ../../Zotlabs/Widget/Rating.php:63
+msgid "Rate Me"
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:88
-#, php-format
-msgid "Update Error at %s"
+#: ../../Zotlabs/Widget/Rating.php:66
+msgid "View Ratings"
msgstr ""
-#: ../../Zotlabs/Lib/DB_Upgrade.php:94
-#, php-format
-msgid "Update %s failed. See error logs."
+#: ../../Zotlabs/Widget/Cover_photo.php:74
+msgid "Click to show more"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:108
-msgid "Restricted message"
+#: ../../Zotlabs/Widget/Follow.php:27 ../../Zotlabs/Module/Connections.php:377
+#, php-format
+msgid "You have %1$.0f of %2$.0f allowed connections."
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:115
-msgid "Direct message"
+#: ../../Zotlabs/Widget/Follow.php:34
+msgid "Add New Connection"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:120
-msgid "Public Policy"
+#: ../../Zotlabs/Widget/Follow.php:35
+msgid "Enter channel address"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:152
-msgid "Privacy conflict. Discretion advised."
+#: ../../Zotlabs/Widget/Follow.php:36
+msgid "Examples: bob@example.com, https://example.com/barbara"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:183 ../../Zotlabs/Storage/Browser.php:372
-msgid "Admin Delete"
+#: ../../Zotlabs/Widget/Messages.php:32
+msgid "Public and restricted messages"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:186 ../../Zotlabs/Module/Filer.php:55
-msgid "Save to Folder"
+#: ../../Zotlabs/Widget/Messages.php:33
+msgid "Direct messages"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:206 ../../Zotlabs/Widget/Pinned.php:73
-msgid "I will attend"
+#: ../../Zotlabs/Widget/Messages.php:34
+msgid "Starred messages"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:206 ../../Zotlabs/Widget/Pinned.php:73
-msgid "I will not attend"
+#: ../../Zotlabs/Widget/Messages.php:35
+#: ../../Zotlabs/Widget/Notifications.php:116
+#: ../../Zotlabs/Widget/Notifications.php:117
+msgid "Notices"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:206 ../../Zotlabs/Widget/Pinned.php:73
-msgid "I might attend"
+#: ../../Zotlabs/Widget/Messages.php:37
+msgid "No messages"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:229 ../../Zotlabs/Lib/ThreadItem.php:242
-#: ../../Zotlabs/Module/Photos.php:1124 ../../Zotlabs/Module/Photos.php:1136
-msgid "View all"
+#: ../../Zotlabs/Widget/Messages.php:38
+msgid "Unseen"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:310 ../../Zotlabs/Module/Photos.php:1071
-msgid "I like this (toggle)"
+#: ../../Zotlabs/Widget/Messages.php:39
+#: ../../Zotlabs/Widget/Notifications.php:34
+#: ../../Zotlabs/Widget/Notifications.php:54
+#: ../../Zotlabs/Widget/Notifications.php:73
+#: ../../Zotlabs/Widget/Notifications.php:134
+#: ../../Zotlabs/Widget/Notifications.php:165
+msgid "Filter by name or address"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:311 ../../Zotlabs/Module/Photos.php:1072
-msgid "I don't like this (toggle)"
+#: ../../Zotlabs/Widget/Newmember.php:36
+msgid "Profile Creation"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:312
-msgid "Reply on this comment"
+#: ../../Zotlabs/Widget/Newmember.php:38
+msgid "Upload profile photo"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:312
-msgid "reply"
+#: ../../Zotlabs/Widget/Newmember.php:39
+msgid "Upload cover photo"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:312
-msgid "Reply to"
+#: ../../Zotlabs/Widget/Newmember.php:43
+msgid "Find and Connect with others"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:324 ../../Zotlabs/Widget/Pinned.php:102
-msgid "Share This"
+#: ../../Zotlabs/Widget/Newmember.php:45
+msgid "View the directory"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:324 ../../Zotlabs/Widget/Pinned.php:102
-msgid "share"
+#: ../../Zotlabs/Widget/Newmember.php:46 ../../Zotlabs/Module/Go.php:38
+msgid "View friend suggestions"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:335
-msgid "Delivery Report"
+#: ../../Zotlabs/Widget/Newmember.php:47
+msgid "Manage your connections"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:355
-#, php-format
-msgid "%d Comment"
-msgid_plural "%d Comments"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Lib/ThreadItem.php:356
-#, php-format
-msgid "%d unseen"
+#: ../../Zotlabs/Widget/Newmember.php:50
+msgid "Communicate"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:406
-msgid "Forum"
+#: ../../Zotlabs/Widget/Newmember.php:52
+msgid "View your channel homepage"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:413
-msgid "to"
+#: ../../Zotlabs/Widget/Newmember.php:53
+msgid "View your network stream"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:414 ../../Zotlabs/Widget/Pinned.php:130
-#: ../../Zotlabs/Widget/Messages.php:137
-msgid "via"
+#: ../../Zotlabs/Widget/Newmember.php:59
+msgid "Documentation"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:415
-msgid "Wall-to-Wall"
+#: ../../Zotlabs/Widget/Newmember.php:62
+msgid "Missing Features?"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:416
-msgid "via Wall-To-Wall:"
+#: ../../Zotlabs/Widget/Newmember.php:64
+msgid "Pin apps to navigation bar"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:444
-msgid "Attend"
+#: ../../Zotlabs/Widget/Newmember.php:65
+msgid "Install more apps"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:445 ../../Zotlabs/Widget/Pinned.php:144
-msgid "Attendance Options"
+#: ../../Zotlabs/Widget/Newmember.php:76
+msgid "View public stream"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:447 ../../Zotlabs/Widget/Pinned.php:145
-msgid "Voting Options"
+#: ../../Zotlabs/Widget/Newmember.php:80
+#: ../../Zotlabs/Module/Settings/Display.php:200
+msgid "New Member Links"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:462
-msgid "Go to previous comment"
+#: ../../Zotlabs/Widget/Notes.php:39
+msgid "Read mode"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:471 ../../Zotlabs/Widget/Pinned.php:157
-msgid "Pinned post"
+#: ../../Zotlabs/Widget/Notes.php:40
+msgid "Edit mode"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:475
-msgid "Add to Calendar"
+#: ../../Zotlabs/Widget/Notes.php:41
+msgid "Editing"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:483
-#: ../../Zotlabs/Module/Notifications.php:111
-msgid "Mark all seen"
+#: ../../Zotlabs/Widget/Notes.php:42
+msgid "Saving"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:490 ../../Zotlabs/Module/Photos.php:1259
-msgctxt "noun"
-msgid "Likes"
+#: ../../Zotlabs/Widget/Notes.php:43
+msgid "Saved"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:491 ../../Zotlabs/Module/Photos.php:1260
-msgctxt "noun"
-msgid "Dislikes"
+#: ../../Zotlabs/Widget/Affinity.php:36
+#: ../../Zotlabs/Module/Contactedit.php:295
+#: ../../Zotlabs/Module/Connedit.php:579
+msgid "Me"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:825 ../../Zotlabs/Module/Photos.php:1090
-#: ../../Zotlabs/Module/Photos.php:1203
-msgid "This is you"
+#: ../../Zotlabs/Widget/Affinity.php:37
+#: ../../Zotlabs/Module/Contactedit.php:296
+#: ../../Zotlabs/Module/Connedit.php:580
+msgid "Family"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:834
-msgid "Image"
+#: ../../Zotlabs/Widget/Affinity.php:39
+#: ../../Zotlabs/Module/Contactedit.php:298
+#: ../../Zotlabs/Module/Connedit.php:582
+msgid "Acquaintances"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:836
-msgid "Insert Link"
+#: ../../Zotlabs/Widget/Affinity.php:40
+#: ../../Zotlabs/Module/Contactedit.php:299
+#: ../../Zotlabs/Module/Connections.php:97
+#: ../../Zotlabs/Module/Connections.php:111
+#: ../../Zotlabs/Module/Connedit.php:583
+msgid "All"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:837
-msgid "Video"
+#: ../../Zotlabs/Widget/Affinity.php:60
+msgid "Refresh"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:846
-msgid "Your full name (required)"
+#: ../../Zotlabs/Widget/Notifications.php:24
+msgid "New network activity notifications"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:847
-msgid "Your email address (required)"
+#: ../../Zotlabs/Widget/Notifications.php:27
+msgid "Network stream"
msgstr ""
-#: ../../Zotlabs/Lib/ThreadItem.php:848
-msgid "Your website URL (optional)"
+#: ../../Zotlabs/Widget/Notifications.php:30
+#: ../../Zotlabs/Widget/Notifications.php:69
+msgid "Mark all notifications read"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2289
-#, php-format
-msgid "Likes %1$s's %2$s"
+#: ../../Zotlabs/Widget/Notifications.php:33
+#: ../../Zotlabs/Widget/Notifications.php:53
+#: ../../Zotlabs/Widget/Notifications.php:72
+#: ../../Zotlabs/Widget/Notifications.php:164
+msgid "Show new posts only"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2292
-#, php-format
-msgid "Doesn't like %1$s's %2$s"
+#: ../../Zotlabs/Widget/Notifications.php:44
+msgid "New home activity notifications"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2298
-#, php-format
-msgid "Will attend %s's event"
+#: ../../Zotlabs/Widget/Notifications.php:47
+msgid "Home stream"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2301
-#, php-format
-msgid "Will not attend %s's event"
+#: ../../Zotlabs/Widget/Notifications.php:50
+#: ../../Zotlabs/Widget/Notifications.php:161
+msgid "Mark all notifications seen"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2304
-#, php-format
-msgid "May attend %s's event"
+#: ../../Zotlabs/Widget/Notifications.php:63
+msgid "New direct messages notifications"
msgstr ""
-#: ../../Zotlabs/Lib/Activity.php:2307
-#, php-format
-msgid "May not attend %s's event"
+#: ../../Zotlabs/Widget/Notifications.php:66
+msgid "Direct messages stream"
msgstr ""
-#: ../../Zotlabs/Lib/Chatroom.php:25
-msgid "Missing room name"
+#: ../../Zotlabs/Widget/Notifications.php:82
+msgid "New events notifications"
msgstr ""
-#: ../../Zotlabs/Lib/Chatroom.php:34
-msgid "Duplicate room name"
+#: ../../Zotlabs/Widget/Notifications.php:85
+msgid "View events"
msgstr ""
-#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92
-msgid "Invalid room specifier."
+#: ../../Zotlabs/Widget/Notifications.php:88
+msgid "Mark all events seen"
msgstr ""
-#: ../../Zotlabs/Lib/Chatroom.php:124
-msgid "Room not found."
+#: ../../Zotlabs/Widget/Notifications.php:96
+#: ../../Zotlabs/Module/Connections.php:168
+msgid "New Connections"
msgstr ""
-#: ../../Zotlabs/Lib/Chatroom.php:145
-msgid "Room is full"
+#: ../../Zotlabs/Widget/Notifications.php:97
+msgid "New connections notifications"
msgstr ""
-#: ../../Zotlabs/Lib/Libzot.php:696
-msgid "Unable to verify channel signature"
+#: ../../Zotlabs/Widget/Notifications.php:100
+msgid "View all connections"
msgstr ""
-#: ../../Zotlabs/Lib/AccessList.php:26
-msgid ""
-"A deleted privacy group with this name was revived. Existing item "
-"permissions <strong>may</strong> apply to this privacy group and any future "
-"members. If this is not what you intended, please create another privacy "
-"group with a different name."
+#: ../../Zotlabs/Widget/Notifications.php:109
+msgid "New files notifications"
msgstr ""
-#: ../../Zotlabs/Lib/AccessList.php:268
-msgid "Select a privacy group"
+#: ../../Zotlabs/Widget/Notifications.php:120
+msgid "View all notices"
msgstr ""
-#: ../../Zotlabs/Module/Service_limits.php:23
-msgid "No service class restrictions found."
+#: ../../Zotlabs/Widget/Notifications.php:123
+msgid "Mark all notices seen"
msgstr ""
-#: ../../Zotlabs/Module/Search.php:23 ../../Zotlabs/Module/Directory.php:72
-#: ../../Zotlabs/Module/Directory.php:77 ../../Zotlabs/Module/Display.php:28
-#: ../../Zotlabs/Module/Viewconnections.php:23
-#: ../../Zotlabs/Module/Photos.php:511
-msgid "Public access denied."
+#: ../../Zotlabs/Widget/Notifications.php:144
+msgid "Registrations"
msgstr ""
-#: ../../Zotlabs/Module/Search.php:250
-#, php-format
-msgid "Items tagged with: %s"
+#: ../../Zotlabs/Widget/Notifications.php:145
+msgid "New registrations notifications"
msgstr ""
-#: ../../Zotlabs/Module/Search.php:252
-#, php-format
-msgid "Search results for: %s"
+#: ../../Zotlabs/Widget/Notifications.php:154
+#: ../../Zotlabs/Module/Pubstream.php:100 ../../Zotlabs/Lib/Apps.php:380
+msgid "Public Stream"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65
-msgid "Location not found."
+#: ../../Zotlabs/Widget/Notifications.php:155
+msgid "New public stream notifications"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:74
-msgid "Location lookup failed."
+#: ../../Zotlabs/Widget/Notifications.php:158
+msgid "Public stream"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:78
-msgid ""
-"Please select another location to become primary before removing the primary "
-"location."
+#: ../../Zotlabs/Widget/Notifications.php:172
+msgid "Sorry, you have got no notifications at the moment"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:106
-msgid "Syncing locations"
+#: ../../Zotlabs/Module/Tokens.php:94
+#, php-format
+msgid "This channel is limited to %d tokens"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:115
-msgid "No locations found."
+#: ../../Zotlabs/Module/Tokens.php:100
+msgid "Name and Password are required."
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:120
-msgid "Manage Channel Locations"
+#: ../../Zotlabs/Module/Tokens.php:215
+msgid "Token saved."
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:122 ../../Zotlabs/Module/Connedit.php:739
-#: ../../Zotlabs/Module/Admin/Channels.php:160
-#: ../../Zotlabs/Module/Cdav.php:1381 ../../Zotlabs/Module/Profiles.php:473
-msgid "Address"
+#: ../../Zotlabs/Module/Tokens.php:261
+msgid ""
+"Use this form to create temporary access identifiers to share things with "
+"non-members. These identities may be used in privacy groups and visitors may "
+"login using these credentials to access private content."
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:124 ../../Zotlabs/Module/Menu.php:177
-msgid "Drop"
+#: ../../Zotlabs/Module/Tokens.php:274
+msgid "Please select a role for this guest!"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:126
-msgid "Sync Now"
+#: ../../Zotlabs/Module/Tokens.php:287
+msgid "Select a role for this guest"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:127
-msgid "Please wait several minutes between consecutive operations."
+#: ../../Zotlabs/Module/Tokens.php:288 ../../Zotlabs/Lib/Apps.php:374
+msgid "Guest Access"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:128
-msgid ""
-"When possible, drop a location by logging into that website/hub and removing "
-"your channel."
+#: ../../Zotlabs/Module/Tokens.php:291
+msgid "Login Name"
msgstr ""
-#: ../../Zotlabs/Module/Locs.php:129
-msgid "Use this form to drop the location if the hub is no longer operating."
+#: ../../Zotlabs/Module/Tokens.php:292
+msgid "Login Password"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:481 ../../Zotlabs/Module/Pin.php:36
-msgid "Unable to locate original post."
+#: ../../Zotlabs/Module/Tokens.php:293
+msgid "Expires (yyyy-mm-dd)"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:767
-msgid "Empty post discarded."
+#: ../../Zotlabs/Module/Attach_edit.php:69
+#: ../../Zotlabs/Module/Filestorage.php:109
+msgid "File not found."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1165
-msgid "Duplicate post suppressed."
+#: ../../Zotlabs/Module/Attach_edit.php:118
+msgid "Can not copy folder into itself."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1308
-msgid "System error. Post not saved."
+#: ../../Zotlabs/Module/Attach_edit.php:131
+#, php-format
+msgid "Can not move folder \"%s\" into itself."
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1342
-msgid "Your comment is awaiting approval."
+#: ../../Zotlabs/Module/Network.php:106
+msgid "No such group"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1479
-msgid "Unable to obtain post information from database."
+#: ../../Zotlabs/Module/Network.php:158
+msgid "No such channel"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1486
-#, php-format
-msgid "You have reached your limit of %1$.0f top level posts."
+#: ../../Zotlabs/Module/Network.php:170 ../../Zotlabs/Module/Channel.php:234
+msgid "Search Results For:"
msgstr ""
-#: ../../Zotlabs/Module/Item.php:1493
-#, php-format
-msgid "You have reached your limit of %1$.0f webpages."
+#: ../../Zotlabs/Module/Network.php:211 ../../Zotlabs/Module/Channel.php:267
+#: ../../Zotlabs/Module/Hq.php:108 ../../Zotlabs/Module/Pubstream.php:89
+#: ../../Zotlabs/Module/Display.php:89
+msgid "Reset form"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:124
-msgid "No default suggestions were found."
+#: ../../Zotlabs/Module/Network.php:246
+msgid "Privacy group is empty"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:289
-msgid "Gender: "
+#: ../../Zotlabs/Module/Network.php:256
+msgid "Privacy group: "
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:291
-msgid "Status: "
+#: ../../Zotlabs/Module/Import_items.php:50
+msgid "Not a zip file or zip file corrupted."
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:293
-msgid "Homepage: "
+#: ../../Zotlabs/Module/Import_items.php:121
+msgid "Import Items"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:353
-msgid "Description:"
+#: ../../Zotlabs/Module/Import_items.php:122
+msgid "Use this form to import existing posts and content from an export file."
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:355
-#: ../../Zotlabs/Module/Admin/Channels.php:151
-msgid "Uncensor"
+#: ../../Zotlabs/Module/Import_items.php:123
+#: ../../Zotlabs/Module/Import.php:594
+msgid "File to Upload"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:355
-#: ../../Zotlabs/Module/Admin/Channels.php:150
-msgid "Censor"
+#: ../../Zotlabs/Module/Import_items.php:136
+#: ../../Zotlabs/Module/Import.php:107
+msgid "Imported file is empty."
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:364
-msgid "Public Forum:"
+#: ../../Zotlabs/Module/Import_items.php:159
+msgid "Content import completed"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:367
-msgid "Keywords: "
+#: ../../Zotlabs/Module/Import_items.php:164
+msgid "Chatroom import completed"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:370
-msgid "Don't suggest"
+#: ../../Zotlabs/Module/Import_items.php:170
+msgid "Channel calendar import 1/2 completed"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:372
-msgid "Common connections (estimated):"
+#: ../../Zotlabs/Module/Import_items.php:176
+msgid "Channel calendar import 2/2 completed"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:422
-msgid "Global Directory"
+#: ../../Zotlabs/Module/Import_items.php:181
+msgid "Menu import completed"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:422
-msgid "Local Directory"
+#: ../../Zotlabs/Module/Import_items.php:186
+msgid "Wiki import completed"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:428
-msgid "Finding:"
+#: ../../Zotlabs/Module/Import_items.php:191
+msgid "Webpages import completed"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:433
-msgid "next page"
+#: ../../Zotlabs/Module/Import.php:70
+msgid "Nothing to import."
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:433
-msgid "previous page"
+#: ../../Zotlabs/Module/Import.php:86 ../../Zotlabs/Module/Import.php:100
+msgid "Unable to download data from old server"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:434
-msgid "Sort options"
+#: ../../Zotlabs/Module/Import.php:163
+#, php-format
+msgid "Your service plan only allows %d channels."
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:435
-msgid "Alphabetic"
+#: ../../Zotlabs/Module/Import.php:190
+msgid "No channel. Import failed."
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:436
-msgid "Reverse Alphabetic"
+#: ../../Zotlabs/Module/Import.php:557
+msgid ""
+"Automatic content and files import was not possible due to API version "
+"incompatiblity. Please import content and files manually!"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:437
-msgid "Newest to Oldest"
+#: ../../Zotlabs/Module/Import.php:585
+msgid "You must be logged in to use this feature."
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:438
-msgid "Oldest to Newest"
+#: ../../Zotlabs/Module/Import.php:592
+msgid "Channel Import"
msgstr ""
-#: ../../Zotlabs/Module/Directory.php:455
-msgid "No entries (some entries may be hidden)."
+#: ../../Zotlabs/Module/Import.php:593
+msgid ""
+"Use this form to import an existing channel from a different server/hub. You "
+"may retrieve the channel identity from the old server/hub via the network or "
+"provide an export file."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:85
-#: ../../Zotlabs/Module/Profile_photo.php:128
-msgid "Image uploaded but image cropping failed."
+#: ../../Zotlabs/Module/Import.php:595
+msgid "Or provide the old server/hub details"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:196
-#: ../../Zotlabs/Module/Cover_photo.php:254
-msgid "Cover Photos"
+#: ../../Zotlabs/Module/Import.php:597
+msgid "Your old identity address (xyz@example.com)"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:212
-#: ../../Zotlabs/Module/Profile_photo.php:184
-msgid "Image resize failed."
+#: ../../Zotlabs/Module/Import.php:598
+msgid "Your old login email address"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:265
-#: ../../Zotlabs/Module/Profile_photo.php:350
-msgid "Image upload failed."
+#: ../../Zotlabs/Module/Import.php:599
+msgid "Your old login password"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:282
-#: ../../Zotlabs/Module/Profile_photo.php:370
-msgid "Unable to process image."
+#: ../../Zotlabs/Module/Import.php:600
+msgid "Import your items and files (limited by available memory)"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:367
-#: ../../Zotlabs/Module/Cover_photo.php:382
-#: ../../Zotlabs/Module/Profile_photo.php:432
-#: ../../Zotlabs/Module/Profile_photo.php:497
-msgid "Photo not available."
+#: ../../Zotlabs/Module/Import.php:602
+msgid ""
+"For either option, please choose whether to make this hub your new primary "
+"address, or whether your old location should continue this role. You will be "
+"able to post from either location, but only one can be marked as the primary "
+"location for files, photos, and media."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:418
-msgid "Your cover photo may be visible to anybody on the internet"
+#: ../../Zotlabs/Module/Import.php:604
+msgid "Make this hub my primary location"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:420
-msgid "Upload File:"
+#: ../../Zotlabs/Module/Import.php:605
+msgid "Move this channel (disable all previous locations)"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:421
-msgid "Select a profile:"
+#: ../../Zotlabs/Module/Import.php:606
+msgid "Use this channel nickname instead of the one provided"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:422
-msgid "Change Cover Photo"
+#: ../../Zotlabs/Module/Import.php:606
+msgid ""
+"Leave blank to keep your existing channel nickname. You will be randomly "
+"assigned a similar nickname if either name is already allocated on this site."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:423
-#: ../../Zotlabs/Module/Profile_photo.php:547
-#: ../../Zotlabs/Module/Embedphotos.php:189 ../../Zotlabs/Module/Photos.php:681
-#: ../../Zotlabs/Widget/Portfolio.php:114 ../../Zotlabs/Widget/Album.php:103
-#: ../../Zotlabs/Widget/Cdav.php:152 ../../Zotlabs/Widget/Cdav.php:188
-#: ../../Zotlabs/Storage/Browser.php:546
-msgid "Upload"
+#: ../../Zotlabs/Module/Import.php:608
+msgid ""
+"This process may take several minutes to complete. Please submit the form "
+"only once and leave this page open until finished."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:426
-#: ../../Zotlabs/Module/Cover_photo.php:427
-#: ../../Zotlabs/Module/Profile_photo.php:551
-#: ../../Zotlabs/Module/Profile_photo.php:552
-msgid "Use a photo from your albums"
+#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Chat.php:29
+msgid "You must be logged in to see this page."
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:438
-msgid "Select existing photo"
+#: ../../Zotlabs/Module/Z6trans.php:19
+msgid "Update to Hubzilla 5.0 step 2"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:455
-#: ../../Zotlabs/Module/Profile_photo.php:581
-msgid "Crop Image"
+#: ../../Zotlabs/Module/Z6trans.php:21
+msgid "To complete the update please run"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:456
-#: ../../Zotlabs/Module/Profile_photo.php:582
-msgid "Please adjust the image cropping for optimum viewing."
+#: ../../Zotlabs/Module/Z6trans.php:23
+msgid "php util/z6convert.php"
msgstr ""
-#: ../../Zotlabs/Module/Cover_photo.php:458
-msgid "Done Editing"
+#: ../../Zotlabs/Module/Z6trans.php:25
+msgid "from the terminal."
msgstr ""
#: ../../Zotlabs/Module/Register.php:112
@@ -8502,1345 +8386,628 @@ msgid ""
"This site has exceeded the number of allowed daily account registrations."
msgstr ""
-#: ../../Zotlabs/Module/Oexchange.php:27
-msgid "Unable to find your hub."
+#: ../../Zotlabs/Module/Search.php:23
+#: ../../Zotlabs/Module/Viewconnections.php:23
+#: ../../Zotlabs/Module/Display.php:28 ../../Zotlabs/Module/Directory.php:72
+#: ../../Zotlabs/Module/Directory.php:77 ../../Zotlabs/Module/Photos.php:511
+msgid "Public access denied."
msgstr ""
-#: ../../Zotlabs/Module/Oexchange.php:41
-msgid "Post successful."
+#: ../../Zotlabs/Module/Search.php:250
+#, php-format
+msgid "Items tagged with: %s"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:74 ../../Zotlabs/Module/Api.php:95
-msgid "Authorize application connection"
+#: ../../Zotlabs/Module/Search.php:252
+#, php-format
+msgid "Search results for: %s"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:75
-msgid "Return to your app and insert this Security Code:"
+#: ../../Zotlabs/Module/Setup.php:179
+msgid "$Projectname Server - Setup"
msgstr ""
-#: ../../Zotlabs/Module/Api.php:85
-msgid "Please login to continue."
+#: ../../Zotlabs/Module/Setup.php:183
+msgid "Could not connect to database."
msgstr ""
-#: ../../Zotlabs/Module/Api.php:97
+#: ../../Zotlabs/Module/Setup.php:187
msgid ""
-"Do you want to authorize this application to access your posts and contacts, "
-"and/or create new posts for you?"
+"Could not connect to specified site URL. Possible SSL certificate or DNS "
+"issue."
msgstr ""
-#: ../../Zotlabs/Module/Page.php:39 ../../Zotlabs/Module/Block.php:29
-msgid "Invalid item."
+#: ../../Zotlabs/Module/Setup.php:194
+msgid "Could not create table."
msgstr ""
-#: ../../Zotlabs/Module/Page.php:174
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
-"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
-"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
-"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
-"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
-"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+#: ../../Zotlabs/Module/Setup.php:200
+msgid "Your site database has been installed."
msgstr ""
-#: ../../Zotlabs/Module/Chatsvc.php:131
-msgid "Away"
+#: ../../Zotlabs/Module/Setup.php:206
+msgid ""
+"You may need to import the file \"install/schema_xxx.sql\" manually using a "
+"database client."
msgstr ""
-#: ../../Zotlabs/Module/Chatsvc.php:136
-msgid "Online"
+#: ../../Zotlabs/Module/Setup.php:207 ../../Zotlabs/Module/Setup.php:271
+#: ../../Zotlabs/Module/Setup.php:778
+msgid "Please see the file \"install/INSTALL.txt\"."
msgstr ""
-#: ../../Zotlabs/Module/Apps.php:51 ../../Zotlabs/Widget/Appstore.php:19
-msgid "Available Apps"
+#: ../../Zotlabs/Module/Setup.php:268
+msgid "System check"
msgstr ""
-#: ../../Zotlabs/Module/Apps.php:51
-msgid "Installed Apps"
+#: ../../Zotlabs/Module/Setup.php:272 ../../Zotlabs/Module/Cdav.php:1027
+#: ../../Zotlabs/Module/Cal.php:200 ../../Zotlabs/Module/Photos.php:951
+msgid "Next"
msgstr ""
-#: ../../Zotlabs/Module/Apps.php:54
-msgid "Manage Apps"
+#: ../../Zotlabs/Module/Setup.php:273
+msgid "Check again"
msgstr ""
-#: ../../Zotlabs/Module/Apps.php:55
-msgid "Create Custom App"
+#: ../../Zotlabs/Module/Setup.php:294
+msgid "Database connection"
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:544
+#: ../../Zotlabs/Module/Setup.php:295
msgid ""
-"This profile photo will be visible to anybody on the internet and may be "
-"distributed to other websites."
+"In order to install $Projectname we need to know how to connect to your "
+"database."
msgstr ""
-#: ../../Zotlabs/Module/Profile_photo.php:544
+#: ../../Zotlabs/Module/Setup.php:296
msgid ""
-"This profile photo will be visible only to channels with permission to view "
-"this profile."
-msgstr ""
-
-#: ../../Zotlabs/Module/Profile_photo.php:546
-msgid "Use Photo for Profile"
-msgstr ""
-
-#: ../../Zotlabs/Module/Profile_photo.php:546
-msgid "Change Profile Photo"
-msgstr ""
-
-#: ../../Zotlabs/Module/Profile_photo.php:548
-msgid "Reset to default"
-msgstr ""
-
-#: ../../Zotlabs/Module/Profile_photo.php:562
-msgid "Select existing"
-msgstr ""
-
-#: ../../Zotlabs/Module/Profile_photo.php:584
-msgid "Done editing"
-msgstr ""
-
-#: ../../Zotlabs/Module/Lang.php:20
-msgid "Language App"
-msgstr ""
-
-#: ../../Zotlabs/Module/Home.php:104
-#, php-format
-msgid "Welcome to %s"
-msgstr ""
-
-#: ../../Zotlabs/Module/Invite.php:69
-msgid "Invite App"
-msgstr ""
-
-#: ../../Zotlabs/Module/Invite.php:81
-msgid "Register is closed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Invite.php:115 ../../Zotlabs/Module/Invite.php:562
-msgid "Note, the invitation code is valid up to"
-msgstr ""
-
-#: ../../Zotlabs/Module/Invite.php:128
-#, php-format
-msgid "Too many recipients for one invitation (max %d)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Invite.php:132
-msgid "No recipients for this invitation"
-msgstr ""
-
-#: ../../Zotlabs/Module/Invite.php:151
-#, php-format
-msgid "(%s) : Not a real email address"
-msgstr ""
-
-#: ../../Zotlabs/Module/Invite.php:158
-#, php-format
-msgid "(%s) : Not allowed email address"
-msgstr ""
-
-#: ../../Zotlabs/Module/Invite.php:171
-#, php-format
-msgid "(%s) : email address already in use"
-msgstr ""
-
-#: ../../Zotlabs/Module/Invite.php:178
-#, php-format
-msgid "(%s) : Accepted email address"
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:270
-#, php-format
-msgid "To %s : Message delivery success."
+#: ../../Zotlabs/Module/Setup.php:297
+msgid ""
+"The database you specify below should already exist. If it does not, please "
+"create it before continuing."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:302
-#, php-format
-msgid "%1$d mail(s) sent, %2$d mail error(s)"
+#: ../../Zotlabs/Module/Setup.php:301
+msgid "Database Server Name"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:327
-msgid "Invites not proposed by configuration"
+#: ../../Zotlabs/Module/Setup.php:301
+msgid "Default is 127.0.0.1"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:328
-msgid "Contact the site admin"
+#: ../../Zotlabs/Module/Setup.php:302
+msgid "Database Port"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:344
-msgid "Invites by users not enabled"
+#: ../../Zotlabs/Module/Setup.php:302
+msgid "Communication port number - use 0 for default"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:349
-msgid "You have no more invitations available"
+#: ../../Zotlabs/Module/Setup.php:303
+msgid "Database Login Name"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:365
-msgid "Not on xchan"
+#: ../../Zotlabs/Module/Setup.php:304
+msgid "Database Login Password"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:398
-msgid "All users invitation limit exceeded."
+#: ../../Zotlabs/Module/Setup.php:305
+msgid "Database Name"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:410 ../../Zotlabs/Module/Admin/Site.php:356
-msgid "Minute(s)"
+#: ../../Zotlabs/Module/Setup.php:306
+msgid "Database Type"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:411 ../../Zotlabs/Module/Admin/Site.php:357
-msgid "Hour(s)"
+#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+msgid "Site administrator email address"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:412 ../../Zotlabs/Module/Admin/Site.php:358
-msgid "Day(s)"
+#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+msgid ""
+"Your account email address must match this in order to use the web admin "
+"panel."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:416
-msgid "Invitation expires after"
+#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+msgid "Website URL"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:421 ../../Zotlabs/Module/Admin/Site.php:375
-#: ../../Zotlabs/Module/Admin/Site.php:397
-msgid "duration up from now"
+#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+msgid "Please use SSL (https) URL if available."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:517 ../../Zotlabs/Module/Invite.php:556
-msgid "Invitation"
+#: ../../Zotlabs/Module/Setup.php:310 ../../Zotlabs/Module/Setup.php:352
+msgid "Please select a default timezone for your website"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:547
-msgid "Send invitations"
+#: ../../Zotlabs/Module/Setup.php:337
+msgid "Site settings"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:548
-msgid "Invitations I am using"
+#: ../../Zotlabs/Module/Setup.php:391
+msgid "PHP version 8.0 or greater is required."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:549
-msgid "Invitations we are using"
+#: ../../Zotlabs/Module/Setup.php:392
+msgid "PHP version"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:550
-msgid "§ Note, the email(s) sent will be recorded in the system logs"
+#: ../../Zotlabs/Module/Setup.php:408
+msgid "Could not find a command line version of PHP in the web server PATH."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:551
-msgid "Enter email addresses, one per line:"
+#: ../../Zotlabs/Module/Setup.php:409
+msgid ""
+"If you don't have a command line version of PHP installed on server, you "
+"will not be able to run background polling via cron."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:552
-msgid "Your message:"
+#: ../../Zotlabs/Module/Setup.php:413
+msgid "PHP executable path"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:553
-msgid "Invite template"
+#: ../../Zotlabs/Module/Setup.php:413
+msgid ""
+"Enter full path to php executable. You can leave this blank to continue the "
+"installation."
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:555
-msgid "Subject:"
+#: ../../Zotlabs/Module/Setup.php:418
+msgid "Command line PHP"
msgstr ""
-#: ../../Zotlabs/Module/Invite.php:561
-msgid "Here you may enter personal notes to the recipient(s)"
+#: ../../Zotlabs/Module/Setup.php:428
+msgid ""
+"Unable to check command line PHP, as shell_exec() is disabled. This is "
+"required."
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:35
+#: ../../Zotlabs/Module/Setup.php:432
msgid ""
-"Account removals are not allowed within 48 hours of changing the account "
-"password."
+"The command line version of PHP on your system does not have "
+"\"register_argc_argv\" enabled."
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:57
-msgid "Remove This Account"
+#: ../../Zotlabs/Module/Setup.php:433
+msgid "This is required for message delivery to work."
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:58
-#: ../../Zotlabs/Module/Changeaddr.php:78 ../../Zotlabs/Module/Removeme.php:61
-msgid "WARNING: "
+#: ../../Zotlabs/Module/Setup.php:436
+msgid "PHP register_argc_argv"
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:58
+#: ../../Zotlabs/Module/Setup.php:456
msgid ""
-"This account and all its channels will be completely removed from the "
-"network. "
+"This is not sufficient to upload larger images or files. You should be able "
+"to upload at least 4 MB at once."
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:58
-msgid "This action is permanent and can not be undone!"
+#: ../../Zotlabs/Module/Setup.php:458
+#, php-format
+msgid ""
+"Your max allowed total upload size is set to %s. Maximum size of one file to "
+"upload is set to %s. You are allowed to upload up to %d files at once."
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:59
-#: ../../Zotlabs/Module/Changeaddr.php:79 ../../Zotlabs/Module/Removeme.php:62
-msgid "Please enter your password for verification:"
+#: ../../Zotlabs/Module/Setup.php:464
+msgid "You can adjust these settings in the server php.ini file."
msgstr ""
-#: ../../Zotlabs/Module/Removeaccount.php:61
-#: ../../Zotlabs/Module/Settings/Account.php:110
-msgid "Remove Account"
+#: ../../Zotlabs/Module/Setup.php:466
+msgid "PHP upload limits"
msgstr ""
-#: ../../Zotlabs/Module/Poke.php:182
-msgid "Poke somebody"
+#: ../../Zotlabs/Module/Setup.php:489
+msgid ""
+"Error: the \"openssl_pkey_new\" function on this system is not able to "
+"generate encryption keys"
msgstr ""
-#: ../../Zotlabs/Module/Poke.php:186
-msgid "Poke or ping somebody"
+#: ../../Zotlabs/Module/Setup.php:490
+msgid ""
+"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
+"installation.php\"."
msgstr ""
-#: ../../Zotlabs/Module/Poke.php:193
-msgid "Recipient"
+#: ../../Zotlabs/Module/Setup.php:493
+msgid "Generate encryption keys"
msgstr ""
-#: ../../Zotlabs/Module/Poke.php:194
-msgid "Choose action"
+#: ../../Zotlabs/Module/Setup.php:510
+msgid "libCurl PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Poke.php:197 ../../Zotlabs/Module/Poke.php:198
-msgid "Make this post private"
+#: ../../Zotlabs/Module/Setup.php:511
+msgid "GD graphics PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Hq.php:41 ../../Zotlabs/Module/Display.php:47
-#: ../../Zotlabs/Module/Oep.php:83 ../../Zotlabs/Module/Channel.php:161
-#: ../../Zotlabs/Module/Channel.php:183 ../../Zotlabs/Module/Pubstream.php:46
-msgid "Malformed message id."
+#: ../../Zotlabs/Module/Setup.php:512
+msgid "OpenSSL PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Hq.php:101 ../../Zotlabs/Module/Display.php:89
-#: ../../Zotlabs/Module/Channel.php:269 ../../Zotlabs/Module/Network.php:211
-#: ../../Zotlabs/Module/Pubstream.php:89
-msgid "Reset form"
+#: ../../Zotlabs/Module/Setup.php:513
+msgid "PDO database PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Regdir.php:52 ../../Zotlabs/Module/Dirsearch.php:24
-msgid "This site is not a directory server"
+#: ../../Zotlabs/Module/Setup.php:514
+msgid "mb_string PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Dirsearch.php:33
-msgid "This directory server requires an access token"
+#: ../../Zotlabs/Module/Setup.php:515
+msgid "xml PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:112
-msgid "Like/Dislike"
+#: ../../Zotlabs/Module/Setup.php:516
+msgid "zip PHP module"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:118
-msgid "This action is restricted to members."
+#: ../../Zotlabs/Module/Setup.php:520 ../../Zotlabs/Module/Setup.php:522
+msgid "Apache mod_rewrite module"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:119
+#: ../../Zotlabs/Module/Setup.php:520
msgid ""
-"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a "
-"href=\"register\">register as a new $Projectname member</a> to continue."
-msgstr ""
-
-#: ../../Zotlabs/Module/Like.php:172 ../../Zotlabs/Module/Like.php:198
-#: ../../Zotlabs/Module/Like.php:236
-msgid "Invalid request."
+"Error: Apache webserver mod-rewrite module is required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Like.php:213
-msgid "thing"
+#: ../../Zotlabs/Module/Setup.php:526 ../../Zotlabs/Module/Setup.php:529
+msgid "exec"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:259
-msgid "Channel unavailable."
+#: ../../Zotlabs/Module/Setup.php:526
+msgid ""
+"Error: exec is required but is either not installed or has been disabled in "
+"php.ini"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:295
-msgid "Previous action reversed."
+#: ../../Zotlabs/Module/Setup.php:532 ../../Zotlabs/Module/Setup.php:535
+msgid "shell_exec"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:481
-#, php-format
-msgid "%1$s agrees with %2$s's %3$s"
+#: ../../Zotlabs/Module/Setup.php:532
+msgid ""
+"Error: shell_exec is required but is either not installed or has been "
+"disabled in php.ini"
msgstr ""
-#: ../../Zotlabs/Module/Like.php:483
-#, php-format
-msgid "%1$s doesn't agree with %2$s's %3$s"
+#: ../../Zotlabs/Module/Setup.php:540
+msgid "Error: libCURL PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Like.php:485
-#, php-format
-msgid "%1$s abstains from a decision on %2$s's %3$s"
+#: ../../Zotlabs/Module/Setup.php:544
+msgid ""
+"Error: GD PHP module with JPEG support or ImageMagick graphics library "
+"required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Like.php:592
-msgid "Action completed."
+#: ../../Zotlabs/Module/Setup.php:548
+msgid "Error: openssl PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Like.php:593
-msgid "Thank you."
+#: ../../Zotlabs/Module/Setup.php:554
+msgid ""
+"Error: PDO database PHP module missing a driver for either mysql or pgsql."
msgstr ""
-#: ../../Zotlabs/Module/Vote.php:40
-msgid "Poll not found."
+#: ../../Zotlabs/Module/Setup.php:559
+msgid "Error: PDO database PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Vote.php:69
-msgid "Invalid response."
+#: ../../Zotlabs/Module/Setup.php:563
+msgid "Error: mb_string PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Vote.php:125
-msgid "Response submitted. Updates may not appear instantly."
+#: ../../Zotlabs/Module/Setup.php:567
+msgid "Error: xml PHP module required for DAV but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Xchan.php:10
-msgid "Xchan Lookup"
+#: ../../Zotlabs/Module/Setup.php:571
+msgid "Error: zip PHP module required but not installed."
msgstr ""
-#: ../../Zotlabs/Module/Xchan.php:13
-msgid "Lookup xchan beginning with (or webbie): "
+#: ../../Zotlabs/Module/Setup.php:590 ../../Zotlabs/Module/Setup.php:599
+msgid ".htconfig.php is writable"
msgstr ""
-#: ../../Zotlabs/Module/Xchan.php:41 ../../Zotlabs/Module/Mitem.php:134
-#: ../../Zotlabs/Module/Menu.php:232
-msgid "Not found."
+#: ../../Zotlabs/Module/Setup.php:595
+msgid ""
+"The web installer needs to be able to create a file called \".htconfig.php\" "
+"in the top folder of your web server and it is unable to do so."
msgstr ""
-#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Chat.php:29
-msgid "You must be logged in to see this page."
+#: ../../Zotlabs/Module/Setup.php:596
+msgid ""
+"This is most often a permission setting, as the web server may not be able "
+"to write files in your folder - even if you can."
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:24
-#: ../../Zotlabs/Module/Email_resend.php:12
-msgid "Token verification failed."
+#: ../../Zotlabs/Module/Setup.php:597
+msgid "Please see install/INSTALL.txt for additional information."
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:36
-msgid "Email Verification Required"
+#: ../../Zotlabs/Module/Setup.php:613
+msgid ""
+"This software uses the Smarty3 template engine to render its web views. "
+"Smarty3 compiles templates to PHP to speed up rendering."
msgstr ""
-#: ../../Zotlabs/Module/Email_validation.php:37
+#: ../../Zotlabs/Module/Setup.php:614
#, php-format
msgid ""
-"A verification token was sent to your email address [%s]. Enter that token "
-"here to complete the account verification step. Please allow a few minutes "
-"for delivery, and check your spam folder if you do not see the message."
-msgstr ""
-
-#: ../../Zotlabs/Module/Email_validation.php:38
-msgid "Resend Email"
-msgstr ""
-
-#: ../../Zotlabs/Module/Email_validation.php:41
-msgid "Validation token"
-msgstr ""
-
-#: ../../Zotlabs/Module/Profile.php:62 ../../Zotlabs/Module/Channel.php:141
-#: ../../Zotlabs/Module/Hcard.php:37
-msgid "Posts and comments"
-msgstr ""
-
-#: ../../Zotlabs/Module/Profile.php:69 ../../Zotlabs/Module/Channel.php:148
-#: ../../Zotlabs/Module/Hcard.php:44
-msgid "Only posts"
-msgstr ""
-
-#: ../../Zotlabs/Module/Profile.php:106
-msgid "vcard"
+"In order to store these compiled templates, the web server needs to have "
+"write access to the directory %s under the top level web folder."
msgstr ""
-#: ../../Zotlabs/Module/Display.php:321 ../../Zotlabs/Module/Channel.php:497
+#: ../../Zotlabs/Module/Setup.php:615 ../../Zotlabs/Module/Setup.php:636
msgid ""
-"You must enable javascript for your browser to be able to view this content."
-msgstr ""
-
-#: ../../Zotlabs/Module/Display.php:341
-msgid "Article"
+"Please ensure that the user that your web server runs as (e.g. www-data) has "
+"write access to this folder."
msgstr ""
-#: ../../Zotlabs/Module/Display.php:385
-msgid "Item has been removed."
+#: ../../Zotlabs/Module/Setup.php:616
+#, php-format
+msgid ""
+"Note: as a security measure, you should give the web server write access to "
+"%s only--not the template files (.tpl) that it contains."
msgstr ""
-#: ../../Zotlabs/Module/Connect.php:65 ../../Zotlabs/Module/Connect.php:118
-msgid "Continue"
+#: ../../Zotlabs/Module/Setup.php:619
+#, php-format
+msgid "%s is writable"
msgstr ""
-#: ../../Zotlabs/Module/Connect.php:99
-msgid "Premium Channel Setup"
+#: ../../Zotlabs/Module/Setup.php:635
+msgid ""
+"This software uses the store directory to save uploaded files. The web "
+"server needs to have write access to the store directory under the top level "
+"web folder"
msgstr ""
-#: ../../Zotlabs/Module/Connect.php:101
-msgid "Enable premium channel connection restrictions"
+#: ../../Zotlabs/Module/Setup.php:639
+msgid "store is writable"
msgstr ""
-#: ../../Zotlabs/Module/Connect.php:102
+#: ../../Zotlabs/Module/Setup.php:671
msgid ""
-"Please enter your restrictions or conditions, such as paypal receipt, usage "
-"guidelines, etc."
+"SSL certificate cannot be validated. Fix certificate or disable https access "
+"to this site."
msgstr ""
-#: ../../Zotlabs/Module/Connect.php:104 ../../Zotlabs/Module/Connect.php:124
+#: ../../Zotlabs/Module/Setup.php:672
msgid ""
-"This channel may require additional steps or acknowledgement of the "
-"following conditions prior to connecting:"
+"If you have https access to your website or allow connections to TCP port "
+"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
+"NOT use self-signed certificates!"
msgstr ""
-#: ../../Zotlabs/Module/Connect.php:105
+#: ../../Zotlabs/Module/Setup.php:673
msgid ""
-"Potential connections will then see the following text before proceeding:"
+"This restriction is incorporated because public posts from you may for "
+"example contain references to images on your own hub."
msgstr ""
-#: ../../Zotlabs/Module/Connect.php:106 ../../Zotlabs/Module/Connect.php:127
+#: ../../Zotlabs/Module/Setup.php:674
msgid ""
-"By continuing, I certify that I have complied with any instructions provided "
-"on this page."
-msgstr ""
-
-#: ../../Zotlabs/Module/Connect.php:115
-msgid "(No specific instructions have been provided by the channel owner.)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connect.php:123
-msgid "Restricted or Premium Channel"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:54
-msgid "Name and Secret are required"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:113
-msgid "Add OAuth2 application"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Oauth2.php:144
-#: ../../Zotlabs/Module/Oauth.php:111
-msgid "Name of application"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
-#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:113
-msgid "Automatically generated - change if desired. Max length 20"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146
-#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:140
-msgid "Redirect"
+"If your certificate is not recognized, members of other sites (who may "
+"themselves have valid certificates) will get a warning message on their own "
+"site complaining about security issues."
msgstr ""
-#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146
-#: ../../Zotlabs/Module/Oauth.php:114
+#: ../../Zotlabs/Module/Setup.php:675
msgid ""
-"Redirect URI - leave blank unless your application specifically requires this"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:147
-msgid "Grant Types"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:120
-msgid "leave blank unless your application sepcifically requires this"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:148
-msgid "Authorization scope"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:132
-msgid "OAuth2 Application not found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:141 ../../Zotlabs/Module/Oauth2.php:191
-#: ../../Zotlabs/Module/Oauth.php:108 ../../Zotlabs/Module/Oauth.php:134
-#: ../../Zotlabs/Module/Oauth.php:170
-msgid "Add application"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148
-msgid "leave blank unless your application specifically requires this"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:190
-msgid "Connected OAuth2 Apps"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:194 ../../Zotlabs/Module/Oauth.php:173
-msgid "Client key starts with"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:195 ../../Zotlabs/Module/Oauth.php:174
-msgid "No name"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth2.php:196 ../../Zotlabs/Module/Oauth.php:175
-msgid "Remove authorization"
-msgstr ""
-
-#: ../../Zotlabs/Module/Uexport.php:108
-msgid "No content available for year"
-msgstr ""
-
-#: ../../Zotlabs/Module/Uexport.php:171
-msgid "Export Channel"
-msgstr ""
-
-#: ../../Zotlabs/Module/Uexport.php:173
-msgid "Export channel"
+"This can cause usability issues elsewhere (not just on your own site) so we "
+"must insist on this requirement."
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:174
+#: ../../Zotlabs/Module/Setup.php:676
msgid ""
-"This will export your identity and social graph into a file which can be "
-"used to import your channel to a new hub."
-msgstr ""
-
-#: ../../Zotlabs/Module/Uexport.php:177
-msgid "Export content"
+"Providers are available that issue free certificates which are browser-valid."
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:178
+#: ../../Zotlabs/Module/Setup.php:677
msgid ""
-"This will export your posts, direct messages, articles and cards per month "
-"stored into a zip file per year. Months with no posts will be dismissed."
-msgstr ""
-
-#: ../../Zotlabs/Module/Uexport.php:180
-msgid "Export wikis"
-msgstr ""
-
-#: ../../Zotlabs/Module/Uexport.php:181
-msgid "This will export your wikis and wiki pages."
-msgstr ""
-
-#: ../../Zotlabs/Module/Uexport.php:183
-msgid "Export webpages"
-msgstr ""
-
-#: ../../Zotlabs/Module/Uexport.php:184
-msgid "This will export your webpages and menus."
+"If you are confident that the certificate is valid and signed by a trusted "
+"authority, check to see if you have failed to install an intermediate cert. "
+"These are not normally required by browsers, but are required for server-to-"
+"server communications."
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:186
-msgid "Export channel calendar"
+#: ../../Zotlabs/Module/Setup.php:679
+msgid "SSL certificate validation"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:187
+#: ../../Zotlabs/Module/Setup.php:685
msgid ""
-"This will export your channel calendar events and associated items. CalDAV "
-"calendars are not included."
-msgstr ""
-
-#: ../../Zotlabs/Module/Uexport.php:189
-msgid "Export chatrooms"
+"Url rewrite in .htaccess is not working. Check your server configuration."
+"Test: "
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:190
-msgid "This will export your chatrooms. Chat history is dismissed."
+#: ../../Zotlabs/Module/Setup.php:688
+msgid "Url rewrite is working"
msgstr ""
-#: ../../Zotlabs/Module/Uexport.php:192
-#, php-format
+#: ../../Zotlabs/Module/Setup.php:701
msgid ""
-"This export can be imported or restored by visiting <a href=\"%1$s\">%2$s</"
-"a> on any site containing your channel."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:31 ../../Zotlabs/Module/Menu.php:209
-msgid "Menu not found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:63
-msgid "Unable to create element."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:87
-msgid "Unable to update menu element."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:103
-msgid "Unable to add menu element."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246
-msgid "Menu Item Permissions"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247
-msgid "(click to open/close)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191
-msgid "Link Name"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255
-msgid "Link or Submenu Target"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:175
-msgid "Enter URL of the link or select a menu name to create a submenu"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256
-msgid "Use magic-auth if available"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257
-msgid "Open link in new window"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
-msgid "Order in list"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
-msgid "Higher numbers will sink to bottom of listing"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:179
-msgid "Submit and finish"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:180
-msgid "Submit and continue"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:189
-msgid "Menu:"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:192
-msgid "Link Target"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:195
-msgid "Edit menu"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:198
-msgid "Edit element"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:199
-msgid "Drop element"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:200
-msgid "New element"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:201
-msgid "Edit this menu container"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:202
-msgid "Add menu element"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:203
-msgid "Delete this menu item"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:204
-msgid "Edit this menu item"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:222
-msgid "Menu item not found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:235
-msgid "Menu item deleted."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:237
-msgid "Menu item could not be deleted."
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:244
-msgid "Edit Menu Element"
-msgstr ""
-
-#: ../../Zotlabs/Module/Mitem.php:254
-msgid "Link text"
-msgstr ""
-
-#: ../../Zotlabs/Module/Notify.php:85
-#: ../../Zotlabs/Module/Notifications.php:106
-msgid "No more system notifications."
-msgstr ""
-
-#: ../../Zotlabs/Module/Notify.php:89
-#: ../../Zotlabs/Module/Notifications.php:110
-msgid "System Notifications"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56
-msgid "App installed."
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:49
-msgid "Malformed app."
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:198
-msgid "Embed code"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:203
-msgid "Edit App"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:203
-msgid "Create App"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:208
-msgid "Name of app"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:209
-msgid "Location (URL) of app"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:211
-msgid "Photo icon URL"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:211
-msgid "80 x 80 pixels - optional"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:212
-msgid "Categories (optional, comma separated list)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:213
-msgid "Version ID"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:214
-msgid "Price of app"
-msgstr ""
-
-#: ../../Zotlabs/Module/Appman.php:215
-msgid "Location (URL) to purchase app"
-msgstr ""
-
-#: ../../Zotlabs/Module/Layouts.php:129 ../../Zotlabs/Module/Layouts.php:187
-#: ../../Zotlabs/Module/Editlayout.php:128
-msgid "Layout Name"
-msgstr ""
-
-#: ../../Zotlabs/Module/Layouts.php:132 ../../Zotlabs/Module/Editlayout.php:129
-msgid "Layout Description (Optional)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Module/Blocks.php:157
-#: ../../Zotlabs/Module/Menu.php:182 ../../Zotlabs/Module/Connedit.php:747
-#: ../../Zotlabs/Module/Cdav.php:1060 ../../Zotlabs/Module/Cdav.php:1389
-#: ../../Zotlabs/Module/Webpages.php:249
-#: ../../Zotlabs/Module/New_channel.php:189 ../../Zotlabs/Widget/Cdav.php:146
-#: ../../Zotlabs/Widget/Cdav.php:184 ../../Zotlabs/Storage/Browser.php:368
-#: ../../Zotlabs/Storage/Browser.php:544
-msgid "Create"
-msgstr ""
-
-#: ../../Zotlabs/Module/Layouts.php:184
-msgid "Comanche page description language help"
-msgstr ""
-
-#: ../../Zotlabs/Module/Layouts.php:188
-msgid "Layout Description"
-msgstr ""
-
-#: ../../Zotlabs/Module/Layouts.php:189 ../../Zotlabs/Module/Blocks.php:155
-#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Webpages.php:261
-msgid "Created"
-msgstr ""
-
-#: ../../Zotlabs/Module/Layouts.php:190 ../../Zotlabs/Module/Blocks.php:156
-#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Webpages.php:262
-msgid "Edited"
-msgstr ""
-
-#: ../../Zotlabs/Module/Layouts.php:193
-msgid "Download PDL file"
+"The database configuration file \".htconfig.php\" could not be written. "
+"Please use the enclosed text to create a configuration file in your web "
+"server root."
msgstr ""
-#: ../../Zotlabs/Module/Share.php:120
-msgid "Post repeated"
+#: ../../Zotlabs/Module/Setup.php:776
+msgid "<h1>What next?</h1>"
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:97 ../../Zotlabs/Module/Blocks.php:153
-#: ../../Zotlabs/Module/Editblock.php:113
-msgid "Block Name"
+#: ../../Zotlabs/Module/Setup.php:777
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
msgstr ""
-#: ../../Zotlabs/Module/Blocks.php:154
-msgid "Block Title"
+#: ../../Zotlabs/Module/Viewconnections.php:65
+msgid "No connections."
msgstr ""
-#: ../../Zotlabs/Module/Authorize.php:17
-msgid "Unknown App"
+#: ../../Zotlabs/Module/Viewconnections.php:105
+#, php-format
+msgid "Visit %s's profile [%s]"
msgstr ""
-#: ../../Zotlabs/Module/Authorize.php:29
-msgid "Authorize"
+#: ../../Zotlabs/Module/Viewconnections.php:135
+msgid "View Connections"
msgstr ""
-#: ../../Zotlabs/Module/Authorize.php:30
-#, php-format
-msgid "Do you authorize the app %s to access your channel data?"
+#: ../../Zotlabs/Module/Pubsites.php:26
+msgid "Public Hubs"
msgstr ""
-#: ../../Zotlabs/Module/Authorize.php:33
-#: ../../Zotlabs/Module/Admin/Accounts.php:319
-msgid "Deny"
+#: ../../Zotlabs/Module/Pubsites.php:29
+msgid ""
+"The listed hubs allow public registration for the $Projectname network. All "
+"hubs in the network are interlinked so membership on any of them conveys "
+"membership in the network as a whole. Some hubs may require subscription or "
+"provide tiered service plans. The hub itself <strong>may</strong> provide "
+"additional details."
msgstr ""
-#: ../../Zotlabs/Module/Follow.php:92
-msgid "Connection added."
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Hub URL"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:58
-#: ../../Zotlabs/Module/Connections.php:116
-msgid "Active"
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Access Type"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:63
-#: ../../Zotlabs/Module/Connections.php:184
-#: ../../Zotlabs/Module/Connections.php:290
-msgid "Blocked"
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Registration Policy"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:68
-#: ../../Zotlabs/Module/Connections.php:191
-#: ../../Zotlabs/Module/Connections.php:289
-msgid "Ignored"
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Stats"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:73
-#: ../../Zotlabs/Module/Connections.php:205
-#: ../../Zotlabs/Module/Connections.php:288
-msgid "Hidden"
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Software"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:78
-#: ../../Zotlabs/Module/Connections.php:198
-msgid "Archived/Unreachable"
+#: ../../Zotlabs/Module/Pubsites.php:37
+msgid "Ratings"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:83
-#: ../../Zotlabs/Module/Connections.php:92 ../../Zotlabs/Module/Menu.php:180
-#: ../../Zotlabs/Module/Notifications.php:101
-msgid "New"
+#: ../../Zotlabs/Module/Pubsites.php:51
+msgid "Rate"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:97
-#: ../../Zotlabs/Module/Connections.php:111
-#: ../../Zotlabs/Module/Connedit.php:583
-#: ../../Zotlabs/Module/Contactedit.php:299
-#: ../../Zotlabs/Widget/Affinity.php:40
-msgid "All"
+#: ../../Zotlabs/Module/Channel.php:141 ../../Zotlabs/Module/Hcard.php:37
+#: ../../Zotlabs/Module/Profile.php:62
+msgid "Posts and comments"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:160
-msgid "Active Connections"
+#: ../../Zotlabs/Module/Channel.php:148 ../../Zotlabs/Module/Hcard.php:44
+#: ../../Zotlabs/Module/Profile.php:69
+msgid "Only posts"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:163
-msgid "Show active connections"
+#: ../../Zotlabs/Module/Channel.php:161 ../../Zotlabs/Module/Channel.php:183
+#: ../../Zotlabs/Module/Hq.php:41 ../../Zotlabs/Module/Pubstream.php:46
+#: ../../Zotlabs/Module/Display.php:47 ../../Zotlabs/Module/Oep.php:83
+msgid "Malformed message id."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:167
-#: ../../Zotlabs/Widget/Notifications.php:96
-msgid "New Connections"
+#: ../../Zotlabs/Module/Channel.php:219
+msgid "Insufficient permissions. Request redirected to profile page."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:170
-msgid "Show pending (new) connections"
+#: ../../Zotlabs/Module/Channel.php:498 ../../Zotlabs/Module/Display.php:321
+msgid ""
+"You must enable javascript for your browser to be able to view this content."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:187
-msgid "Only show blocked connections"
+#: ../../Zotlabs/Module/Profperm.php:34 ../../Zotlabs/Module/Profperm.php:63
+msgid "Invalid profile identifier."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:194
-msgid "Only show ignored connections"
+#: ../../Zotlabs/Module/Profperm.php:111
+msgid "Profile Visibility Editor"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:201
-msgid "Only show archived/unreachable connections"
+#: ../../Zotlabs/Module/Profperm.php:115
+msgid "Click on a contact to add or remove."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:208
-msgid "Only show hidden connections"
+#: ../../Zotlabs/Module/Profperm.php:124
+msgid "Visible To"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:220
#: ../../Zotlabs/Module/Profperm.php:140
+#: ../../Zotlabs/Module/Connections.php:221
msgid "All Connections"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:223
-msgid "Show all connections"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:286
-msgid "Pending approval"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:287
-msgid "Archived"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:291
-msgid "Not connected at this location"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:330
-#, php-format
-msgid "%1$s [%2$s]"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:331
-msgid "Edit connection"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:333
-msgid "Delete connection"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:339
-msgid "Channel address"
+#: ../../Zotlabs/Module/Group.php:47
+msgid "Privacy group created."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:344
-msgid "Call"
+#: ../../Zotlabs/Module/Group.php:50
+msgid "Could not create privacy group."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:346
-msgid "Status"
+#: ../../Zotlabs/Module/Group.php:82
+msgid "Privacy group updated."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:349
-msgid "Connected"
+#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:301
+msgid "Post to this group by default"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:351
-#: ../../Zotlabs/Module/Contactedit.php:462
-msgid "Approve connection"
+#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
+msgid "Add new contacts to this group by default"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:353
-msgid "Ignore connection"
+#: ../../Zotlabs/Module/Group.php:146
+msgid "Privacy group name"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:354
-#: ../../Zotlabs/Module/Connedit.php:516
-#: ../../Zotlabs/Module/Contactedit.php:646
-msgid "Ignore"
+#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
+msgid "Members are visible to other channels"
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:355
-msgid "Recent activity"
+#: ../../Zotlabs/Module/Group.php:175
+msgid "Privacy group removed."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:361
-msgid "Connect at this location"
+#: ../../Zotlabs/Module/Group.php:178
+msgid "Unable to remove privacy group."
msgstr ""
-#: ../../Zotlabs/Module/Connections.php:371 ../../Zotlabs/Widget/Follow.php:27
+#: ../../Zotlabs/Module/Group.php:244
#, php-format
-msgid "You have %1$.0f of %2$.0f allowed connections."
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:398
-#: ../../Zotlabs/Module/Connedit.php:686
-msgid "Contact role"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:399
-msgid "Search your connections"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:400
-msgid "Contact search"
-msgstr ""
-
-#: ../../Zotlabs/Module/Connections.php:408
-#: ../../Zotlabs/Module/Contactedit.php:397
-msgid "This is a group/forum channel"
-msgstr ""
-
-#: ../../Zotlabs/Module/Cal.php:62
-msgid "Permissions denied."
-msgstr ""
-
-#: ../../Zotlabs/Module/Cal.php:165 ../../Zotlabs/Module/Cdav.php:945
-#: ../../Zotlabs/Module/Channel_calendar.php:392
-msgid "Link to source"
-msgstr ""
-
-#: ../../Zotlabs/Module/Cal.php:203 ../../Zotlabs/Module/Cdav.php:1036
-#: ../../Zotlabs/Module/Photos.php:942
-msgid "Previous"
-msgstr ""
-
-#: ../../Zotlabs/Module/Cal.php:204 ../../Zotlabs/Module/Cdav.php:1037
-#: ../../Zotlabs/Module/Setup.php:272 ../../Zotlabs/Module/Photos.php:951
-msgid "Next"
-msgstr ""
-
-#: ../../Zotlabs/Module/Cal.php:205 ../../Zotlabs/Module/Cdav.php:1038
-msgid "Today"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:50
-msgid "Not a zip file or zip file corrupted."
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:121
-msgid "Import Items"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:122
-msgid "Use this form to import existing posts and content from an export file."
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:123
-#: ../../Zotlabs/Module/Import.php:594
-msgid "File to Upload"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:136
-#: ../../Zotlabs/Module/Import.php:107
-msgid "Imported file is empty."
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:159
-msgid "Content import completed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:164
-msgid "Chatroom import completed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:170
-msgid "Channel calendar import 1/2 completed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:176
-msgid "Channel calendar import 2/2 completed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:181
-msgid "Menu import completed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:186
-msgid "Wiki import completed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Import_items.php:191
-msgid "Webpages import completed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Bookmarks.php:62
-msgid "Bookmark added"
-msgstr ""
-
-#: ../../Zotlabs/Module/Bookmarks.php:101
-msgid "My Connections Bookmarks"
-msgstr ""
-
-#: ../../Zotlabs/Module/Editlayout.php:137
-msgid "Edit Layout"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth.php:45
-msgid "Name is required"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth.php:49
-msgid "Key and Secret are required"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:141
-msgid "Icon url"
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth.php:126
-msgid "Application not found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Oauth.php:169
-msgid "Connected OAuth Apps"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:59
-msgid "Contact role deleted."
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:86
-msgid "Permission category name is required."
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:102 ../../Zotlabs/Module/Permcats.php:154
-msgid "Contact role saved."
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:204
-msgid "Role to assign affected contacts and default role to"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:204
-msgid "Role to assign affected contacts to"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:234
-msgid "Assign this role to"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:236
-msgid "All my contacts"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:247
-msgid "Automatically assign this role to new contacts"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:249
-msgid "Role name"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:249
-msgid "System role - not editable"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:250
-msgid "Deleting"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:253 ../../Zotlabs/Module/Connedit.php:713
-#: ../../Zotlabs/Module/Defperms.php:261
-msgid "inherited"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:255
-msgid "Role Permissions"
-msgstr ""
-
-#: ../../Zotlabs/Module/Permcats.php:256
-msgid ""
-"Some permissions may be inherited from your <a href=\"settings\">channel "
-"role</a>, which have higher priority than contact role settings."
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:68
-msgid "Unable to update menu."
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:79
-msgid "Unable to create menu."
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174
-msgid "Menu Name"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:161
-msgid "Unique name (not visible on webpage) - required"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175
-msgid "Menu Title"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:162
-msgid "Visible on webpage - leave empty for no title"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:163
-msgid "Allow Bookmarks"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-msgid "Menu may be used to store saved bookmarks"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225
-msgid "Submit and proceed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:181
-msgid "Bookmarks allowed"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:183
-msgid "Delete this menu"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219
-msgid "Edit menu contents"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:185
-msgid "Edit this menu"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:201
-msgid "Menu could not be deleted."
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:214
-msgid "Edit Menu"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:218
-msgid "Add or remove entries to this menu"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:220
-msgid "Menu name"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:220
-msgid "Must be unique, only seen by you"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:221
-msgid "Menu title"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:221
-msgid "Menu title as seen by others"
-msgstr ""
-
-#: ../../Zotlabs/Module/Menu.php:222
-msgid "Allow bookmarks"
+msgid "Privacy Group: %s"
msgstr ""
-#: ../../Zotlabs/Module/Mood.php:153
-msgid "Set your current mood and tell your friends"
+#: ../../Zotlabs/Module/Group.php:246
+msgid "Privacy group name: "
msgstr ""
-#: ../../Zotlabs/Module/Embedphotos.php:171 ../../Zotlabs/Module/Photos.php:782
-#: ../../Zotlabs/Module/Photos.php:1323 ../../Zotlabs/Widget/Portfolio.php:91
-#: ../../Zotlabs/Widget/Album.php:84
-msgid "View Photo"
+#: ../../Zotlabs/Module/Group.php:262
+msgid "Group members"
msgstr ""
-#: ../../Zotlabs/Module/Embedphotos.php:187 ../../Zotlabs/Module/Photos.php:813
-#: ../../Zotlabs/Widget/Portfolio.php:112 ../../Zotlabs/Widget/Album.php:101
-msgid "Edit Album"
+#: ../../Zotlabs/Module/Group.php:264
+msgid "Not in this group"
msgstr ""
-#: ../../Zotlabs/Module/Rmagic.php:46
-msgid "Authentication failed."
+#: ../../Zotlabs/Module/Group.php:296
+msgid "Click a channel to toggle membership"
msgstr ""
#: ../../Zotlabs/Module/Go.php:21
msgid "This page is available only to site members"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:27
-#: ../../Zotlabs/Widget/Channel_activities.php:29
-msgid "Welcome"
-msgstr ""
-
#: ../../Zotlabs/Module/Go.php:29
msgid "What would you like to do?"
msgstr ""
@@ -9862,10 +9029,6 @@ msgstr ""
msgid "Edit your default profile"
msgstr ""
-#: ../../Zotlabs/Module/Go.php:38 ../../Zotlabs/Widget/Newmember.php:46
-msgid "View friend suggestions"
-msgstr ""
-
#: ../../Zotlabs/Module/Go.php:39
msgid "View the channel directory"
msgstr ""
@@ -9896,1248 +9059,1126 @@ msgstr ""
msgid "View the public stream. Warning: this content is not moderated"
msgstr ""
-#: ../../Zotlabs/Module/Channel.php:219
-msgid "Insufficient permissions. Request redirected to profile page."
-msgstr ""
-
-#: ../../Zotlabs/Module/Channel.php:234 ../../Zotlabs/Module/Network.php:170
-msgid "Search Results For:"
-msgstr ""
-
-#: ../../Zotlabs/Module/Lostpass.php:19
-msgid "No valid account found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Lostpass.php:33
-msgid "Password reset request issued. Check your email."
-msgstr ""
-
-#: ../../Zotlabs/Module/Lostpass.php:39 ../../Zotlabs/Module/Lostpass.php:108
-#, php-format
-msgid "Site Member (%s)"
-msgstr ""
-
-#: ../../Zotlabs/Module/Lostpass.php:44 ../../Zotlabs/Module/Lostpass.php:49
-#, php-format
-msgid "Password reset requested at %s"
-msgstr ""
-
-#: ../../Zotlabs/Module/Lostpass.php:68
-msgid ""
-"Request could not be verified. (You may have previously submitted it.) "
-"Password reset failed."
-msgstr ""
-
-#: ../../Zotlabs/Module/Lostpass.php:92
-msgid "Your password has been reset as requested."
+#: ../../Zotlabs/Module/Oauth.php:45
+msgid "Name is required"
msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:93
-msgid "Your new password is"
+#: ../../Zotlabs/Module/Oauth.php:49
+msgid "Key and Secret are required"
msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:94
-msgid "Save or copy your new password - and then"
+#: ../../Zotlabs/Module/Oauth.php:53 ../../Zotlabs/Module/Oauth.php:135
+#: ../../Zotlabs/Module/Cdav.php:1044 ../../Zotlabs/Module/Cdav.php:1380
+#: ../../Zotlabs/Module/Admin/Addons.php:460 ../../Zotlabs/Module/Oauth2.php:58
+#: ../../Zotlabs/Module/Oauth2.php:142 ../../Zotlabs/Module/Connedit.php:748
+#: ../../Zotlabs/Lib/Apps.php:546
+msgid "Update"
msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:95
-msgid "click here to login"
+#: ../../Zotlabs/Module/Oauth.php:108 ../../Zotlabs/Module/Oauth.php:134
+#: ../../Zotlabs/Module/Oauth.php:170 ../../Zotlabs/Module/Oauth2.php:141
+#: ../../Zotlabs/Module/Oauth2.php:191
+msgid "Add application"
msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:96
-msgid ""
-"Your password may be changed from the <em>Settings</em> page after "
-"successful login."
+#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth2.php:116
+#: ../../Zotlabs/Module/Oauth2.php:144
+msgid "Name of application"
msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:117
-#, php-format
-msgid "Your password has changed at %s"
+#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:113
+#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
+msgid "Automatically generated - change if desired. Max length 20"
msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:130
-msgid "Forgot your Password?"
+#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:140
+#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146
+msgid "Redirect"
msgstr ""
-#: ../../Zotlabs/Module/Lostpass.php:131
+#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth2.php:118
+#: ../../Zotlabs/Module/Oauth2.php:146
msgid ""
-"Enter your email address and submit to have your password reset. Then check "
-"your email for further instructions."
-msgstr ""
-
-#: ../../Zotlabs/Module/Lostpass.php:132
-msgid "Email Address"
-msgstr ""
-
-#: ../../Zotlabs/Module/Lostpass.php:133 ../../Zotlabs/Module/Pdledit.php:76
-#: ../../Zotlabs/Module/Pdledit.php:93
-msgid "Reset"
+"Redirect URI - leave blank unless your application specifically requires this"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:70
-msgid "Nothing to import."
+#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:141
+msgid "Icon url"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:86 ../../Zotlabs/Module/Import.php:100
-msgid "Unable to download data from old server"
+#: ../../Zotlabs/Module/Oauth.php:126
+msgid "Application not found."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:163
-#, php-format
-msgid "Your service plan only allows %d channels."
+#: ../../Zotlabs/Module/Oauth.php:169
+msgid "Connected OAuth Apps"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:190
-msgid "No channel. Import failed."
+#: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Oauth2.php:194
+msgid "Client key starts with"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:557
-msgid ""
-"Automatic content and files import was not possible due to API version "
-"incompatiblity. Please import content and files manually!"
+#: ../../Zotlabs/Module/Oauth.php:174 ../../Zotlabs/Module/Oauth2.php:195
+msgid "No name"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:585
-msgid "You must be logged in to use this feature."
+#: ../../Zotlabs/Module/Oauth.php:175 ../../Zotlabs/Module/Oauth2.php:196
+msgid "Remove authorization"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:592
-msgid "Channel Import"
+#: ../../Zotlabs/Module/Editwebpage.php:139
+msgid "Page link"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:593
-msgid ""
-"Use this form to import an existing channel from a different server/hub. You "
-"may retrieve the channel identity from the old server/hub via the network or "
-"provide an export file."
+#: ../../Zotlabs/Module/Editwebpage.php:166
+msgid "Edit Webpage"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:595
-msgid "Or provide the old server/hub details"
+#: ../../Zotlabs/Module/Dirsearch.php:24 ../../Zotlabs/Module/Regdir.php:52
+msgid "This site is not a directory server"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:597
-msgid "Your old identity address (xyz@example.com)"
+#: ../../Zotlabs/Module/Dirsearch.php:33
+msgid "This directory server requires an access token"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:598
-msgid "Your old login email address"
+#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:481
+msgid "Unable to locate original post."
msgstr ""
-#: ../../Zotlabs/Module/Import.php:599
-msgid "Your old login password"
+#: ../../Zotlabs/Module/Chat.php:193
+msgid "Room not found"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:600
-msgid "Import your items and files (limited by available memory)"
+#: ../../Zotlabs/Module/Chat.php:209
+msgid "Leave Room"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:602
-msgid ""
-"For either option, please choose whether to make this hub your new primary "
-"address, or whether your old location should continue this role. You will be "
-"able to post from either location, but only one can be marked as the primary "
-"location for files, photos, and media."
+#: ../../Zotlabs/Module/Chat.php:210
+msgid "Delete Room"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:604
-msgid "Make this hub my primary location"
+#: ../../Zotlabs/Module/Chat.php:211
+msgid "I am away right now"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:605
-msgid "Move this channel (disable all previous locations)"
+#: ../../Zotlabs/Module/Chat.php:212
+msgid "I am online"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:606
-msgid "Use this channel nickname instead of the one provided"
+#: ../../Zotlabs/Module/Chat.php:214
+msgid "Bookmark this room"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:606
-msgid ""
-"Leave blank to keep your existing channel nickname. You will be randomly "
-"assigned a similar nickname if either name is already allocated on this site."
+#: ../../Zotlabs/Module/Chat.php:237
+msgid "New Chatroom"
msgstr ""
-#: ../../Zotlabs/Module/Import.php:608
-msgid ""
-"This process may take several minutes to complete. Please submit the form "
-"only once and leave this page open until finished."
+#: ../../Zotlabs/Module/Chat.php:238
+msgid "Chatroom name"
msgstr ""
-#: ../../Zotlabs/Module/Viewconnections.php:65
-msgid "No connections."
+#: ../../Zotlabs/Module/Chat.php:239
+msgid "Expiration of chats (minutes)"
msgstr ""
-#: ../../Zotlabs/Module/Viewconnections.php:105
+#: ../../Zotlabs/Module/Chat.php:255
#, php-format
-msgid "Visit %s's profile [%s]"
-msgstr ""
-
-#: ../../Zotlabs/Module/Viewconnections.php:135
-msgid "View Connections"
-msgstr ""
-
-#: ../../Zotlabs/Module/Rpost.php:219 ../../Zotlabs/Module/Editpost.php:113
-msgid "Edit post"
+msgid "%1$s's Chatrooms"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:94
-#, php-format
-msgid "This channel is limited to %d tokens"
+#: ../../Zotlabs/Module/Chat.php:260
+msgid "No chatrooms available"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:100
-msgid "Name and Password are required."
+#: ../../Zotlabs/Module/Chat.php:261
+msgid "Add Room"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:215
-msgid "Token saved."
+#: ../../Zotlabs/Module/Chat.php:264
+msgid "Expiration"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:261
-msgid ""
-"Use this form to create temporary access identifiers to share things with "
-"non-members. These identities may be used in privacy groups and visitors may "
-"login using these credentials to access private content."
+#: ../../Zotlabs/Module/Chat.php:265
+msgid "min"
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:274
-msgid "Please select a role for this guest!"
+#: ../../Zotlabs/Module/Channel_calendar.php:62
+msgid "Event can not end before it has started."
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:287
-msgid "Select a role for this guest"
+#: ../../Zotlabs/Module/Channel_calendar.php:64
+#: ../../Zotlabs/Module/Channel_calendar.php:72
+#: ../../Zotlabs/Module/Channel_calendar.php:87
+msgid "Unable to generate preview."
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:291
-msgid "Login Name"
+#: ../../Zotlabs/Module/Channel_calendar.php:70
+msgid "Event title and start time are required."
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:292
-msgid "Login Password"
+#: ../../Zotlabs/Module/Channel_calendar.php:85
+#: ../../Zotlabs/Module/Channel_calendar.php:226
+msgid "Event not found."
msgstr ""
-#: ../../Zotlabs/Module/Tokens.php:293
-msgid "Expires (yyyy-mm-dd)"
+#: ../../Zotlabs/Module/Channel_calendar.php:370
+msgid "Edit event"
msgstr ""
-#: ../../Zotlabs/Module/Attach_edit.php:69
-#: ../../Zotlabs/Module/Filestorage.php:109
-msgid "File not found."
+#: ../../Zotlabs/Module/Channel_calendar.php:372
+msgid "Delete event"
msgstr ""
-#: ../../Zotlabs/Module/Attach_edit.php:118
-msgid "Can not copy folder into itself."
+#: ../../Zotlabs/Module/Channel_calendar.php:392
+#: ../../Zotlabs/Module/Cdav.php:935 ../../Zotlabs/Module/Cal.php:161
+msgid "Link to source"
msgstr ""
-#: ../../Zotlabs/Module/Attach_edit.php:131
-#, php-format
-msgid "Can not move folder \"%s\" into itself."
+#: ../../Zotlabs/Module/Channel_calendar.php:406
+msgid "calendar"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:25
-msgid "Documentation Search"
+#: ../../Zotlabs/Module/Channel_calendar.php:493
+msgid "Failed to remove event"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:86
-msgid "Members"
+#: ../../Zotlabs/Module/Totp_check.php:71
+#: ../../Zotlabs/Module/Admin/Account_edit.php:61
+msgid "Account not found."
msgstr ""
-#: ../../Zotlabs/Module/Help.php:87
-msgid "Administrators"
+#: ../../Zotlabs/Module/Totp_check.php:78
+msgid "Multifactor Verification"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:88
-msgid "Developers"
+#: ../../Zotlabs/Module/Totp_check.php:80
+msgid "Please enter the verification key from your authenticator app"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:89
-msgid "Tutorials"
+#: ../../Zotlabs/Module/Like.php:112
+msgid "Like/Dislike"
msgstr ""
-#: ../../Zotlabs/Module/Help.php:101
-msgid "$Projectname Documentation"
+#: ../../Zotlabs/Module/Like.php:118
+msgid "This action is restricted to members."
msgstr ""
-#: ../../Zotlabs/Module/Help.php:102
-msgid "Contents"
+#: ../../Zotlabs/Module/Like.php:119
+msgid ""
+"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a "
+"href=\"register\">register as a new $Projectname member</a> to continue."
msgstr ""
-#: ../../Zotlabs/Module/Pconfig.php:33 ../../Zotlabs/Module/Pconfig.php:69
-msgid "This setting requires special processing and editing has been blocked."
+#: ../../Zotlabs/Module/Like.php:172 ../../Zotlabs/Module/Like.php:198
+#: ../../Zotlabs/Module/Like.php:236
+msgid "Invalid request."
msgstr ""
-#: ../../Zotlabs/Module/Pconfig.php:58
-msgid "Configuration Editor"
+#: ../../Zotlabs/Module/Like.php:213
+msgid "thing"
msgstr ""
-#: ../../Zotlabs/Module/Pconfig.php:59
-msgid ""
-"Warning: Changing some settings could render your channel inoperable. Please "
-"leave this page unless you are comfortable with and knowledgeable about how "
-"to correctly use this feature."
+#: ../../Zotlabs/Module/Like.php:259
+msgid "Channel unavailable."
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:193
-msgid "Room not found"
+#: ../../Zotlabs/Module/Like.php:295
+msgid "Previous action reversed."
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:209
-msgid "Leave Room"
+#: ../../Zotlabs/Module/Like.php:481
+#, php-format
+msgid "%1$s agrees with %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:210
-msgid "Delete Room"
+#: ../../Zotlabs/Module/Like.php:483
+#, php-format
+msgid "%1$s doesn't agree with %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:211
-msgid "I am away right now"
+#: ../../Zotlabs/Module/Like.php:485
+#, php-format
+msgid "%1$s abstains from a decision on %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:212
-msgid "I am online"
+#: ../../Zotlabs/Module/Like.php:593
+msgid "Action completed."
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:214
-msgid "Bookmark this room"
+#: ../../Zotlabs/Module/Like.php:594
+msgid "Thank you."
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:237
-msgid "New Chatroom"
+#: ../../Zotlabs/Module/Poke.php:182
+msgid "Poke somebody"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:238
-msgid "Chatroom name"
+#: ../../Zotlabs/Module/Poke.php:186
+msgid "Poke or ping somebody"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:239
-msgid "Expiration of chats (minutes)"
+#: ../../Zotlabs/Module/Poke.php:193
+msgid "Recipient"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:255
-#, php-format
-msgid "%1$s's Chatrooms"
+#: ../../Zotlabs/Module/Poke.php:194
+msgid "Choose action"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:260
-msgid "No chatrooms available"
+#: ../../Zotlabs/Module/Poke.php:197 ../../Zotlabs/Module/Poke.php:198
+msgid "Make this post private"
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:261
-msgid "Add Room"
+#: ../../Zotlabs/Module/Cdav.php:819
+msgid "Calendar entries imported."
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:264
-msgid "Expiration"
+#: ../../Zotlabs/Module/Cdav.php:821
+msgid "No calendar entries found."
msgstr ""
-#: ../../Zotlabs/Module/Chat.php:265
-msgid "min"
+#: ../../Zotlabs/Module/Cdav.php:1000
+msgid "Event title"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:106
-msgid "No such group"
+#: ../../Zotlabs/Module/Cdav.php:1001
+msgid "Start date and time"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:158
-msgid "No such channel"
+#: ../../Zotlabs/Module/Cdav.php:1002
+msgid "End date and time"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:246
-msgid "Privacy group is empty"
+#: ../../Zotlabs/Module/Cdav.php:1003
+msgid "Timezone:"
msgstr ""
-#: ../../Zotlabs/Module/Network.php:256
-msgid "Privacy group: "
+#: ../../Zotlabs/Module/Cdav.php:1026 ../../Zotlabs/Module/Cal.php:199
+#: ../../Zotlabs/Module/Photos.php:942
+msgid "Previous"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:38
-msgid "Invalid message"
+#: ../../Zotlabs/Module/Cdav.php:1028 ../../Zotlabs/Module/Cal.php:201
+msgid "Today"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:68
-msgid "no results"
+#: ../../Zotlabs/Module/Cdav.php:1029
+msgid "Month"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:82
-msgid "channel sync processed"
+#: ../../Zotlabs/Module/Cdav.php:1030
+msgid "Week"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:86
-msgid "queued"
+#: ../../Zotlabs/Module/Cdav.php:1031
+msgid "Day"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:90
-msgid "posted"
+#: ../../Zotlabs/Module/Cdav.php:1032
+msgid "List month"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:94
-msgid "accepted for delivery"
+#: ../../Zotlabs/Module/Cdav.php:1033
+msgid "List week"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:98
-msgid "updated"
+#: ../../Zotlabs/Module/Cdav.php:1034
+msgid "List day"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:102
-msgid "update ignored"
+#: ../../Zotlabs/Module/Cdav.php:1042
+msgid "More"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:105
-msgid "permission denied"
+#: ../../Zotlabs/Module/Cdav.php:1043
+msgid "Less"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:109
-msgid "recipient not found"
+#: ../../Zotlabs/Module/Cdav.php:1045
+msgid "Select calendar"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:129
-#, php-format
-msgid "Delivery report for %1$s"
+#: ../../Zotlabs/Module/Cdav.php:1048
+msgid "Delete all"
msgstr ""
-#: ../../Zotlabs/Module/Dreport.php:134
-msgid "Redeliver"
+#: ../../Zotlabs/Module/Cdav.php:1051
+msgid "Sorry! Editing of recurrent events is not yet implemented."
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:35
-msgid "Affinity Tool settings updated."
+#: ../../Zotlabs/Module/Cdav.php:1052
+msgid ""
+"Could not fetch calendar resource. The selected calendar might be disabled."
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:54
-msgid ""
-"The numbers below represent the minimum and maximum slider default positions "
-"for your network/stream page as a percentage."
+#: ../../Zotlabs/Module/Cdav.php:1365 ../../Zotlabs/Module/Connedit.php:733
+msgid "Organisation"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:61
-msgid "Default maximum affinity level"
+#: ../../Zotlabs/Module/Cdav.php:1367 ../../Zotlabs/Module/Connedit.php:735
+msgid "Phone"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:61
-msgid "0-99 default 99"
+#: ../../Zotlabs/Module/Cdav.php:1369 ../../Zotlabs/Module/Connedit.php:737
+msgid "Instant messenger"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:67
-msgid "Default minimum affinity level"
+#: ../../Zotlabs/Module/Cdav.php:1370 ../../Zotlabs/Module/Connedit.php:738
+msgid "Website"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:67
-msgid "0-99 - default 0"
+#: ../../Zotlabs/Module/Cdav.php:1371
+#: ../../Zotlabs/Module/Admin/Channels.php:160
+#: ../../Zotlabs/Module/Profiles.php:473 ../../Zotlabs/Module/Connedit.php:739
+#: ../../Zotlabs/Module/Locs.php:122
+msgid "Address"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:73
-msgid "Persistent affinity levels"
+#: ../../Zotlabs/Module/Cdav.php:1372 ../../Zotlabs/Module/Connedit.php:740
+msgid "Note"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:73
-msgid ""
-"If disabled the max and min levels will be reset to default after page reload"
+#: ../../Zotlabs/Module/Cdav.php:1377 ../../Zotlabs/Module/Connedit.php:745
+msgid "Add Contact"
msgstr ""
-#: ../../Zotlabs/Module/Affinity.php:81
-msgid "Affinity Tool Settings"
+#: ../../Zotlabs/Module/Cdav.php:1378 ../../Zotlabs/Module/Connedit.php:746
+msgid "Add Field"
msgstr ""
-#: ../../Zotlabs/Module/Dircensor.php:42
-msgid "Entry censored"
+#: ../../Zotlabs/Module/Cdav.php:1383 ../../Zotlabs/Module/Connedit.php:751
+msgid "P.O. Box"
msgstr ""
-#: ../../Zotlabs/Module/Dircensor.php:45
-msgid "Entry uncensored"
+#: ../../Zotlabs/Module/Cdav.php:1384 ../../Zotlabs/Module/Connedit.php:752
+msgid "Additional"
msgstr ""
-#: ../../Zotlabs/Module/Subthread.php:128
-#, php-format
-msgid "%1$s is following %2$s's %3$s"
+#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Connedit.php:753
+msgid "Street"
msgstr ""
-#: ../../Zotlabs/Module/Subthread.php:130
-#, php-format
-msgid "%1$s stopped following %2$s's %3$s"
+#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Connedit.php:754
+msgid "Locality"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:41
-msgid "Failed to create source. No channel selected."
+#: ../../Zotlabs/Module/Cdav.php:1387 ../../Zotlabs/Module/Connedit.php:755
+msgid "Region"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:57
-msgid "Source created."
+#: ../../Zotlabs/Module/Cdav.php:1388 ../../Zotlabs/Module/Connedit.php:756
+msgid "ZIP Code"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:70
-msgid "Source updated."
+#: ../../Zotlabs/Module/Cdav.php:1389 ../../Zotlabs/Module/Profiles.php:774
+#: ../../Zotlabs/Module/Connedit.php:757
+msgid "Country"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:99
-msgid "*"
+#: ../../Zotlabs/Module/Cdav.php:1448
+msgid "Default Calendar"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:106
-msgid "Manage remote sources of content for your channel."
+#: ../../Zotlabs/Module/Cdav.php:1459
+msgid "Default Addressbook"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117
-msgid "New Source"
+#: ../../Zotlabs/Module/Lockview.php:100
+msgid "Remote privacy information not available"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152
-msgid ""
-"Import all or selected content from the following channel into this channel "
-"and distribute it according to your channel settings."
+#: ../../Zotlabs/Module/Lockview.php:143 ../../Zotlabs/Module/Lockview.php:184
+#: ../../Zotlabs/Module/Acl.php:123
+msgctxt "acl"
+msgid "Profile"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
-msgid "Only import content with these words (one per line)"
+#: ../../Zotlabs/Module/Lockview.php:154 ../../Zotlabs/Module/Lockview.php:193
+msgid "Privacy group"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
-msgid "Leave blank to import all public content"
+#: ../../Zotlabs/Module/Lockview.php:214
+#, php-format
+msgid "Click to copy link to this ressource for guest %s to clipboard"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159
-msgid "Channel Name"
+#: ../../Zotlabs/Module/Lockview.php:214
+msgid "Link copied"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
-msgid ""
-"Add the following categories to posts imported from this source (comma "
-"separated)"
+#: ../../Zotlabs/Module/Lockview.php:221
+msgid "Access"
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-msgid "Resend posts with this channel as author"
+#: ../../Zotlabs/Module/Item.php:767
+msgid "Empty post discarded."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-msgid "Copyrights may apply"
+#: ../../Zotlabs/Module/Item.php:1165
+msgid "Duplicate post suppressed."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172
-msgid "Source not found."
+#: ../../Zotlabs/Module/Item.php:1308
+msgid "System error. Post not saved."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:149
-msgid "Edit Source"
+#: ../../Zotlabs/Module/Item.php:1342
+msgid "Your comment is awaiting approval."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:150
-msgid "Delete Source"
+#: ../../Zotlabs/Module/Item.php:1479
+msgid "Unable to obtain post information from database."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:180
-msgid "Source removed"
+#: ../../Zotlabs/Module/Item.php:1486
+#, php-format
+msgid "You have reached your limit of %1$.0f top level posts."
msgstr ""
-#: ../../Zotlabs/Module/Sources.php:182
-msgid "Unable to remove source."
+#: ../../Zotlabs/Module/Item.php:1493
+#, php-format
+msgid "You have reached your limit of %1$.0f webpages."
msgstr ""
-#: ../../Zotlabs/Module/Suggest.php:52
-msgid ""
-"No suggestions available. If this is a new site, please try again in 24 "
-"hours."
+#: ../../Zotlabs/Module/Mitem.php:31 ../../Zotlabs/Module/Menu.php:209
+msgid "Menu not found."
msgstr ""
-#: ../../Zotlabs/Module/Suggest.php:71 ../../Zotlabs/Widget/Suggestions.php:53
-msgid "Ignore/Hide"
+#: ../../Zotlabs/Module/Mitem.php:63
+msgid "Unable to create element."
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:35
-msgid ""
-"Channel name changes are not allowed within 48 hours of changing the account "
-"password."
+#: ../../Zotlabs/Module/Mitem.php:87
+msgid "Unable to update menu element."
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:77
-msgid "Change channel nickname/address"
+#: ../../Zotlabs/Module/Mitem.php:103
+msgid "Unable to add menu element."
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:78
-msgid "Any/all connections on other networks will be lost!"
+#: ../../Zotlabs/Module/Mitem.php:134 ../../Zotlabs/Module/Xchan.php:41
+#: ../../Zotlabs/Module/Menu.php:232
+msgid "Not found."
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:80
-msgid "New channel address"
+#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246
+msgid "Menu Item Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Changeaddr.php:81
-msgid "Rename Channel"
+#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247
+msgid "(click to open/close)"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:84
-msgid "Email resent"
+#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191
+msgid "Link Name"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:84
-msgid "Email resend failed"
+#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255
+msgid "Link or Submenu Target"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:109
-msgid "Verification successful"
+#: ../../Zotlabs/Module/Mitem.php:175
+msgid "Enter URL of the link or select a menu name to create a submenu"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:153
-msgid "Account successfull created"
+#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256
+msgid "Use magic-auth if available"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:211
-msgid "Channel successfull created"
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257
+msgid "Open link in new window"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:217
-msgid "Automatic channel creation failed. Please create a channel."
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
+msgid "Order in list"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:229
-msgid "Account creation error"
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
+msgid "Higher numbers will sink to bottom of listing"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:241
-msgid "Verify failed"
+#: ../../Zotlabs/Module/Mitem.php:179
+msgid "Submit and finish"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:246
-msgid "Token verification failed"
+#: ../../Zotlabs/Module/Mitem.php:180
+msgid "Submit and continue"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:251
-msgid "Request not inside time frame"
+#: ../../Zotlabs/Module/Mitem.php:189
+msgid "Menu:"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:257 ../../Zotlabs/Module/Regate.php:287
-msgid "Identity unknown"
+#: ../../Zotlabs/Module/Mitem.php:192
+msgid "Link Target"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:263
-msgid "dId2 mistaken"
+#: ../../Zotlabs/Module/Mitem.php:195
+msgid "Edit menu"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:291
-msgid "Your Registration ID"
+#: ../../Zotlabs/Module/Mitem.php:198
+msgid "Edit element"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:304 ../../Zotlabs/Module/Regate.php:396
-#: ../../Zotlabs/Module/Regate.php:428
-msgid "Registration verification"
+#: ../../Zotlabs/Module/Mitem.php:199
+msgid "Drop element"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:311 ../../Zotlabs/Module/Regate.php:433
-msgid "Hold on, you can start verification in"
+#: ../../Zotlabs/Module/Mitem.php:200
+msgid "New element"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:312
-msgid "Please remember your verification token for ID"
+#: ../../Zotlabs/Module/Mitem.php:201
+msgid "Edit this menu container"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:314
-msgid "Token validity"
+#: ../../Zotlabs/Module/Mitem.php:202
+msgid "Add menu element"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:350
-msgid "Resend email"
+#: ../../Zotlabs/Module/Mitem.php:203
+msgid "Delete this menu item"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:355
-msgid "Registration status"
+#: ../../Zotlabs/Module/Mitem.php:204
+msgid "Edit this menu item"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:358
-msgid "Verification successful!"
+#: ../../Zotlabs/Module/Mitem.php:222
+msgid "Menu item not found."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:359
-msgid "Your login ID is"
+#: ../../Zotlabs/Module/Mitem.php:235
+msgid "Menu item deleted."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:360
-msgid ""
-"After your account has been approved by our administrator you will be able "
-"to login with your login ID and your provided password."
+#: ../../Zotlabs/Module/Mitem.php:237
+msgid "Menu item could not be deleted."
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:372
-msgid "Registration request revoked"
+#: ../../Zotlabs/Module/Mitem.php:244
+msgid "Edit Menu Element"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:373
-msgid "Sorry for any inconvience. Thank you for your response."
+#: ../../Zotlabs/Module/Mitem.php:254
+msgid "Link text"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:397
-msgid "Please enter your verification token for ID"
+#: ../../Zotlabs/Module/Profile.php:106
+msgid "vcard"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:398 ../../Zotlabs/Module/Regate.php:425
-msgid "Please check your email!"
+#: ../../Zotlabs/Module/Sharedwithme.php:106
+msgid "Files: shared with me"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:408
-msgid "Verification token"
+#: ../../Zotlabs/Module/Sharedwithme.php:108
+msgid "NEW"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:419
-msgid "ID expired"
+#: ../../Zotlabs/Module/Sharedwithme.php:110
+#: ../../Zotlabs/Storage/Browser.php:383
+msgid "Last Modified"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:434
-msgid "You will require the verification token for ID"
+#: ../../Zotlabs/Module/Sharedwithme.php:111
+msgid "Remove all files"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:443
-msgid "Unknown or expired ID"
+#: ../../Zotlabs/Module/Sharedwithme.php:112
+msgid "Remove this file"
msgstr ""
-#: ../../Zotlabs/Module/Regate.php:454
-msgid "dId2 malformed"
+#: ../../Zotlabs/Module/Help.php:25
+msgid "Documentation Search"
msgstr ""
-#: ../../Zotlabs/Module/Chanview.php:132
-msgid "toggle full screen mode"
+#: ../../Zotlabs/Module/Help.php:86
+msgid "Members"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:80 ../../Zotlabs/Module/Contactedit.php:78
-#: ../../Zotlabs/Module/Defperms.php:67
-msgid "Could not access contact record."
+#: ../../Zotlabs/Module/Help.php:87
+msgid "Administrators"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:101
-#: ../../Zotlabs/Module/Contactedit.php:107
-msgid "Could not locate selected profile."
+#: ../../Zotlabs/Module/Help.php:88
+msgid "Developers"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:171
-msgid "Connection updated."
+#: ../../Zotlabs/Module/Help.php:89
+msgid "Tutorials"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:173
-msgid "Failed to update connection record."
+#: ../../Zotlabs/Module/Help.php:101
+msgid "$Projectname Documentation"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:215
-#: ../../Zotlabs/Module/Contactedit.php:192
-msgid "is now connected to"
+#: ../../Zotlabs/Module/Help.php:102
+msgid "Contents"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:320
-msgid "Could not access address book record."
+#: ../../Zotlabs/Module/Webpages.php:67
+msgid "Import Webpage Elements"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:368
-msgid "Refresh failed - channel is currently unavailable."
+#: ../../Zotlabs/Module/Webpages.php:68
+msgid "Import selected"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391
-#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409
-#: ../../Zotlabs/Module/Connedit.php:422
-msgid "Unable to set address book parameters."
+#: ../../Zotlabs/Module/Webpages.php:91
+msgid "Export Webpage Elements"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:441
-msgid "Connection has been removed."
+#: ../../Zotlabs/Module/Webpages.php:92
+msgid "Export selected"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:483
-#, php-format
-msgid "View %s's profile"
+#: ../../Zotlabs/Module/Webpages.php:258
+msgid "Actions"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:487
-#: ../../Zotlabs/Module/Contactedit.php:628
-msgid "Refresh Permissions"
+#: ../../Zotlabs/Module/Webpages.php:259
+msgid "Page Link"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:490
-#: ../../Zotlabs/Module/Contactedit.php:629
-msgid "Fetch updated permissions"
+#: ../../Zotlabs/Module/Webpages.php:260
+msgid "Page Title"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:494
-#: ../../Zotlabs/Module/Contactedit.php:633
-msgid "Refresh Photo"
+#: ../../Zotlabs/Module/Webpages.php:261 ../../Zotlabs/Module/Blocks.php:155
+#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Layouts.php:189
+msgid "Created"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:497
-#: ../../Zotlabs/Module/Contactedit.php:634
-msgid "Fetch updated photo"
+#: ../../Zotlabs/Module/Webpages.php:262 ../../Zotlabs/Module/Blocks.php:156
+#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Layouts.php:190
+msgid "Edited"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:504
-msgid "View recent posts and comments"
+#: ../../Zotlabs/Module/Webpages.php:290
+msgid "Invalid file type."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:508
-#: ../../Zotlabs/Module/Admin/Accounts.php:322
-#: ../../Zotlabs/Module/Contactedit.php:639
-msgid "Unblock"
+#: ../../Zotlabs/Module/Webpages.php:302
+msgid "Error opening zip file"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:508
-#: ../../Zotlabs/Module/Admin/Accounts.php:321
-#: ../../Zotlabs/Module/Contactedit.php:639
-msgid "Block"
+#: ../../Zotlabs/Module/Webpages.php:313
+msgid "Invalid folder path."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:511
-#: ../../Zotlabs/Module/Contactedit.php:641
-msgid "Block (or Unblock) all communications with this connection"
+#: ../../Zotlabs/Module/Webpages.php:340
+msgid "No webpage elements detected."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:512
-#: ../../Zotlabs/Module/Contactedit.php:642
-msgid "This connection is blocked!"
+#: ../../Zotlabs/Module/Webpages.php:415
+msgid "Import complete."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:516
-#: ../../Zotlabs/Module/Contactedit.php:646
-msgid "Unignore"
+#: ../../Zotlabs/Module/Filestorage.php:14
+#: ../../Zotlabs/Module/Filestorage.php:53
+msgid "Deprecated!"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:519
-#: ../../Zotlabs/Module/Contactedit.php:648
-msgid "Ignore (or Unignore) all inbound communications from this connection"
+#: ../../Zotlabs/Module/Filestorage.php:157
+msgid "Permission Denied."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:520
-#: ../../Zotlabs/Module/Contactedit.php:649
-msgid "This connection is ignored!"
+#: ../../Zotlabs/Module/Filestorage.php:190
+msgid "Edit file permissions"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:524
-#: ../../Zotlabs/Module/Contactedit.php:653
-msgid "Unarchive"
+#: ../../Zotlabs/Module/Filestorage.php:203
+msgid "Include all files and sub folders"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:524
-#: ../../Zotlabs/Module/Contactedit.php:653
-msgid "Archive"
+#: ../../Zotlabs/Module/Filestorage.php:204
+msgid "Return to file list"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:527
-#: ../../Zotlabs/Module/Contactedit.php:655
-msgid ""
-"Archive (or Unarchive) this connection - mark channel dead but keep content"
+#: ../../Zotlabs/Module/Filestorage.php:206
+#: ../../Zotlabs/Storage/Browser.php:389
+msgid "Copy/paste this code to attach file to a post"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:528
-#: ../../Zotlabs/Module/Contactedit.php:656
-msgid "This connection is archived!"
+#: ../../Zotlabs/Module/Filestorage.php:207
+#: ../../Zotlabs/Storage/Browser.php:390
+msgid "Copy/paste this URL to link file from a web page"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:532
-#: ../../Zotlabs/Module/Contactedit.php:660
-msgid "Unhide"
+#: ../../Zotlabs/Module/Filestorage.php:209
+msgid "Share this file"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:532
-#: ../../Zotlabs/Module/Contactedit.php:660
-msgid "Hide"
+#: ../../Zotlabs/Module/Filestorage.php:210
+msgid "Show URL to this file"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:535
-#: ../../Zotlabs/Module/Contactedit.php:662
-msgid "Hide or Unhide this connection from your other connections"
+#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Storage/Browser.php:558
+msgid "Show in your contacts shared folder"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:536
-#: ../../Zotlabs/Module/Contactedit.php:663
-msgid "This connection is hidden!"
+#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98
+msgid "Tag removed"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:543
-#: ../../Zotlabs/Module/Contactedit.php:669
-msgid "Delete this connection"
+#: ../../Zotlabs/Module/Tagrm.php:123
+msgid "Remove Item Tag"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:550
-msgid "Fetch Vcard"
+#: ../../Zotlabs/Module/Tagrm.php:125
+msgid "Select a tag to remove: "
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:553
-msgid "Fetch electronic calling card for this connection"
+#: ../../Zotlabs/Module/Connect.php:65 ../../Zotlabs/Module/Connect.php:118
+msgid "Continue"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:572
-#: ../../Zotlabs/Module/Contactedit.php:445
-msgid "Affinity"
+#: ../../Zotlabs/Module/Connect.php:99
+msgid "Premium Channel Setup"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:575
-msgid "Open Set Affinity section by default"
+#: ../../Zotlabs/Module/Connect.php:101
+msgid "Enable premium channel connection restrictions"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:579
-#: ../../Zotlabs/Module/Contactedit.php:295
-#: ../../Zotlabs/Widget/Affinity.php:36
-msgid "Me"
+#: ../../Zotlabs/Module/Connect.php:102
+msgid ""
+"Please enter your restrictions or conditions, such as paypal receipt, usage "
+"guidelines, etc."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:580
-#: ../../Zotlabs/Module/Contactedit.php:296
-#: ../../Zotlabs/Widget/Affinity.php:37
-msgid "Family"
+#: ../../Zotlabs/Module/Connect.php:104 ../../Zotlabs/Module/Connect.php:124
+msgid ""
+"This channel may require additional steps or acknowledgement of the "
+"following conditions prior to connecting:"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:582
-#: ../../Zotlabs/Module/Contactedit.php:298
-#: ../../Zotlabs/Widget/Affinity.php:39
-msgid "Acquaintances"
+#: ../../Zotlabs/Module/Connect.php:105
+msgid ""
+"Potential connections will then see the following text before proceeding:"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:612
-msgid "Filter"
+#: ../../Zotlabs/Module/Connect.php:106 ../../Zotlabs/Module/Connect.php:127
+msgid ""
+"By continuing, I certify that I have complied with any instructions provided "
+"on this page."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:615
-msgid "Open Custom Filter section by default"
+#: ../../Zotlabs/Module/Connect.php:115
+msgid "(No specific instructions have been provided by the channel owner.)"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:622
-#: ../../Zotlabs/Module/Contactedit.php:329
-msgid "Approve this contact"
+#: ../../Zotlabs/Module/Connect.php:123
+msgid "Restricted or Premium Channel"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:622
-#: ../../Zotlabs/Module/Contactedit.php:329
-msgid "Accept contact to allow communication"
+#: ../../Zotlabs/Module/Share.php:120
+msgid "Post repeated"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:626
-msgid "Set Affinity"
+#: ../../Zotlabs/Module/Acl.php:370
+msgid "network"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:629
-msgid "Set Profile"
+#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43
+msgid "Item is not editable"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:632
-msgid "Set Affinity & Profile"
+#: ../../Zotlabs/Module/Editpost.php:113 ../../Zotlabs/Module/Rpost.php:219
+msgid "Edit post"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:658
-#: ../../Zotlabs/Module/Contactedit.php:362
-msgid "Please select a role for this contact!"
+#: ../../Zotlabs/Module/Tagger.php:50
+msgid "Post not found."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:678
-#: ../../Zotlabs/Module/Contactedit.php:382
-msgid "This contact is unreachable from this location."
+#: ../../Zotlabs/Module/Tagger.php:121
+#, php-format
+msgid "%1$s tagged %2$s's %3$s with %4$s"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:679
-#: ../../Zotlabs/Module/Contactedit.php:383
-msgid "This contact may be unreachable from other channel locations."
+#: ../../Zotlabs/Module/Authorize.php:17
+msgid "Unknown App"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:681
-#: ../../Zotlabs/Module/Contactedit.php:385
-msgid "Location independence is not supported by their network."
+#: ../../Zotlabs/Module/Authorize.php:29
+msgid "Authorize"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:685
+#: ../../Zotlabs/Module/Authorize.php:30
#, php-format
-msgid "Contact: %s"
+msgid "Do you authorize the app %s to access your channel data?"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:687
-msgid "Manage contact roles"
+#: ../../Zotlabs/Module/Authorize.php:33
+#: ../../Zotlabs/Module/Admin/Accounts.php:319
+msgid "Deny"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:694
-msgid "This contacts's primary address is"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:65
+msgid "Max queueworker threads"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:695
-msgid "Available locations:"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:67
+msgid "Minimum 4, default 4"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:700 ../../Zotlabs/Module/Defperms.php:259
-msgid ""
-"The permissions indicated on this page will be applied to all new "
-"connections."
+#: ../../Zotlabs/Module/Admin/Queueworker.php:77
+msgid "Assume workers dead after"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:701
-#: ../../Zotlabs/Module/Contactedit.php:252
-#: ../../Zotlabs/Module/Contactedit.php:401
-msgid "Contact Tools"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:79
+msgid "Minimum 120, default 300 seconds"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:703
-#: ../../Zotlabs/Module/Contactedit.php:420
-msgid "Slide to adjust your degree of friendship"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:91
+msgid "Pause before starting next task"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:705
-#: ../../Zotlabs/Module/Contactedit.php:422
-msgid "Custom Filter"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:93
+msgid "Minimum 100, default 100 microseconds"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:706
-#: ../../Zotlabs/Module/Contactedit.php:423
-#: ../../Zotlabs/Module/Settings/Channel.php:286
-msgid "Only import posts with this text"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:102
+msgid "Automatically adjust pause before starting next task"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
-#: ../../Zotlabs/Module/Admin/Site.php:515
-#: ../../Zotlabs/Module/Admin/Site.php:516
-#: ../../Zotlabs/Module/Contactedit.php:423
-#: ../../Zotlabs/Module/Contactedit.php:424
-msgid ""
-"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
-"all posts"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:111
+msgid "Queueworker Settings"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:707
-#: ../../Zotlabs/Module/Contactedit.php:424
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-msgid "Do not import posts with this text"
+#: ../../Zotlabs/Module/Admin/Queue.php:45
+msgid "Queue Statistics"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:710
-msgid "Contact Pending Approval"
+#: ../../Zotlabs/Module/Admin/Queue.php:46
+msgid "Total Entries"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:714
-#: ../../Zotlabs/Module/Contactedit.php:429
-msgid "Approve contact"
+#: ../../Zotlabs/Module/Admin/Queue.php:47
+msgid "Priority"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:715
-#, php-format
-msgid ""
-"Please choose the profile you would like to display to %s when viewing your "
-"profile securely."
+#: ../../Zotlabs/Module/Admin/Queue.php:48
+msgid "Destination URL"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:717
-#: ../../Zotlabs/Module/Contactedit.php:431
-msgid "Their"
+#: ../../Zotlabs/Module/Admin/Queue.php:49
+msgid "Mark hub permanently offline"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:718
-#: ../../Zotlabs/Module/Contactedit.php:432
-msgid "My"
+#: ../../Zotlabs/Module/Admin/Queue.php:50
+msgid "Retry delivery to this hub"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:720 ../../Zotlabs/Module/Defperms.php:266
-msgid "Individual Permissions"
+#: ../../Zotlabs/Module/Admin/Queue.php:51
+msgid "Empty queue for this hub"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:721
-msgid ""
-"Some permissions may be inherited from your channel's <a "
-"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
-"priority than individual settings. You can <strong>not</strong> change those "
-"settings here."
+#: ../../Zotlabs/Module/Admin/Queue.php:52
+msgid "Last known contact"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:722
-msgid ""
-"Some permissions may be inherited from your channel's <a "
-"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
-"priority than individual settings. You can change those settings here but "
-"they wont have any impact unless the inherited setting changes."
+#: ../../Zotlabs/Module/Admin/Themes.php:26
+msgid "Theme settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:723
-msgid "Last update:"
+#: ../../Zotlabs/Module/Admin/Themes.php:61
+msgid "No themes found."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:731
-msgid "Details"
+#: ../../Zotlabs/Module/Admin/Themes.php:95
+#: ../../Zotlabs/Module/Admin/Addons.php:314
+msgid "Disable"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:733 ../../Zotlabs/Module/Cdav.php:1375
-msgid "Organisation"
+#: ../../Zotlabs/Module/Admin/Themes.php:97
+#: ../../Zotlabs/Module/Admin/Addons.php:317
+msgid "Enable"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:735 ../../Zotlabs/Module/Cdav.php:1377
-msgid "Phone"
+#: ../../Zotlabs/Module/Admin/Themes.php:116
+msgid "Screenshot"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:737 ../../Zotlabs/Module/Cdav.php:1379
-msgid "Instant messenger"
+#: ../../Zotlabs/Module/Admin/Themes.php:122
+#: ../../Zotlabs/Module/Admin/Themes.php:156
+#: ../../Zotlabs/Module/Admin/Security.php:98
+#: ../../Zotlabs/Module/Admin/Accounts.php:307
+#: ../../Zotlabs/Module/Admin/Site.php:411
+#: ../../Zotlabs/Module/Admin/Logs.php:82
+#: ../../Zotlabs/Module/Admin/Channels.php:145
+#: ../../Zotlabs/Module/Admin/Addons.php:345
+#: ../../Zotlabs/Module/Admin/Addons.php:443 ../../Zotlabs/Module/Admin.php:140
+msgid "Administration"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:738 ../../Zotlabs/Module/Cdav.php:1380
-msgid "Website"
+#: ../../Zotlabs/Module/Admin/Themes.php:124
+#: ../../Zotlabs/Module/Admin/Addons.php:347
+msgid "Toggle"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:740 ../../Zotlabs/Module/Cdav.php:1382
-msgid "Note"
+#: ../../Zotlabs/Module/Admin/Themes.php:134
+#: ../../Zotlabs/Module/Admin/Addons.php:355
+msgid "Author: "
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:745 ../../Zotlabs/Module/Cdav.php:1387
-msgid "Add Contact"
+#: ../../Zotlabs/Module/Admin/Themes.php:135
+#: ../../Zotlabs/Module/Admin/Addons.php:356
+msgid "Maintainer: "
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:746 ../../Zotlabs/Module/Cdav.php:1388
-msgid "Add Field"
+#: ../../Zotlabs/Module/Admin/Themes.php:162
+msgid "[Experimental]"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:751 ../../Zotlabs/Module/Cdav.php:1393
-msgid "P.O. Box"
+#: ../../Zotlabs/Module/Admin/Themes.php:163
+msgid "[Unsupported]"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:752 ../../Zotlabs/Module/Cdav.php:1394
-msgid "Additional"
+#: ../../Zotlabs/Module/Admin/Features.php:56
+#, php-format
+msgid "Lock feature %s"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:753 ../../Zotlabs/Module/Cdav.php:1395
-msgid "Street"
+#: ../../Zotlabs/Module/Admin/Features.php:64
+msgid "Manage Additional Features"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:754 ../../Zotlabs/Module/Cdav.php:1396
-msgid "Locality"
+#: ../../Zotlabs/Module/Admin/Security.php:89
+msgid ""
+"By default, unfiltered HTML is allowed in embedded media. This is inherently "
+"insecure."
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:755 ../../Zotlabs/Module/Cdav.php:1397
-msgid "Region"
+#: ../../Zotlabs/Module/Admin/Security.php:92
+msgid ""
+"The recommended setting is to only allow unfiltered HTML from the following "
+"sites:"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:756 ../../Zotlabs/Module/Cdav.php:1398
-msgid "ZIP Code"
+#: ../../Zotlabs/Module/Admin/Security.php:93
+msgid ""
+"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/"
+"<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
msgstr ""
-#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Cdav.php:1399
-#: ../../Zotlabs/Module/Profiles.php:774
-msgid "Country"
+#: ../../Zotlabs/Module/Admin/Security.php:94
+msgid ""
+"All other embedded content will be filtered, <strong>unless</strong> "
+"embedded content from that site is explicitly blocked."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:31
-#, php-format
-msgid "%s channel censored/uncensored"
-msgid_plural "%s channels censored/uncensored"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Module/Admin/Channels.php:40
-#, php-format
-msgid "%s channel code allowed/disallowed"
-msgid_plural "%s channels code allowed/disallowed"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Module/Admin/Channels.php:46
-#, php-format
-msgid "%s channel deleted"
-msgid_plural "%s channels deleted"
-msgstr[0] ""
-msgstr[1] ""
+#: ../../Zotlabs/Module/Admin/Security.php:101
+msgid "Block public"
+msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:65
-msgid "Channel not found"
+#: ../../Zotlabs/Module/Admin/Security.php:101
+msgid ""
+"Check to block public access to all otherwise public personal pages on this "
+"site unless you are currently authenticated."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:75
-#, php-format
-msgid "Channel '%s' deleted"
+#: ../../Zotlabs/Module/Admin/Security.php:102
+msgid "Provide a cloud root directory"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:87
-#, php-format
-msgid "Channel '%s' censored"
+#: ../../Zotlabs/Module/Admin/Security.php:102
+msgid ""
+"The cloud root directory lists all channel names which provide public files"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:87
-#, php-format
-msgid "Channel '%s' uncensored"
+#: ../../Zotlabs/Module/Admin/Security.php:103
+msgid "Show total disk space available to cloud uploads"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:98
-#, php-format
-msgid "Channel '%s' code allowed"
+#: ../../Zotlabs/Module/Admin/Security.php:104
+msgid "Set \"Transport Security\" HTTP header"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:98
-#, php-format
-msgid "Channel '%s' code disallowed"
+#: ../../Zotlabs/Module/Admin/Security.php:105
+msgid "Set \"Content Security Policy\" HTTP header"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:145
-#: ../../Zotlabs/Module/Admin/Accounts.php:307
-#: ../../Zotlabs/Module/Admin/Themes.php:122
-#: ../../Zotlabs/Module/Admin/Themes.php:156
-#: ../../Zotlabs/Module/Admin/Site.php:411
-#: ../../Zotlabs/Module/Admin/Logs.php:82
-#: ../../Zotlabs/Module/Admin/Addons.php:345
-#: ../../Zotlabs/Module/Admin/Addons.php:443
-#: ../../Zotlabs/Module/Admin/Security.php:98
-#: ../../Zotlabs/Module/Admin.php:140
-msgid "Administration"
+#: ../../Zotlabs/Module/Admin/Security.php:106
+msgid "Allowed email domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:148
-msgid "select all"
+#: ../../Zotlabs/Module/Admin/Security.php:106
+msgid ""
+"Comma separated list of domains which are allowed in email addresses for "
+"registrations to this site. Wildcards are accepted. Empty to allow any "
+"domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:152
-msgid "Allow Code"
+#: ../../Zotlabs/Module/Admin/Security.php:107
+msgid "Not allowed email domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:153
-msgid "Disallow Code"
+#: ../../Zotlabs/Module/Admin/Security.php:107
+msgid ""
+"Comma separated list of domains which are not allowed in email addresses for "
+"registrations to this site. Wildcards are accepted. Empty to allow any "
+"domains, unless allowed domains have been defined."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:158
-msgid "UID"
+#: ../../Zotlabs/Module/Admin/Security.php:108
+msgid "Allow communications only from these sites"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:162
+#: ../../Zotlabs/Module/Admin/Security.php:108
msgid ""
-"Selected channels will be deleted!\\n\\nEverything that was posted in these "
-"channels on this site will be permanently deleted!\\n\\nAre you sure?"
+"One site per line. Leave empty to allow communication from anywhere by "
+"default"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Channels.php:163
-msgid ""
-"The channel {0} will be deleted!\\n\\nEverything that was posted in this "
-"channel on this site will be permanently deleted!\\n\\nAre you sure?"
+#: ../../Zotlabs/Module/Admin/Security.php:109
+msgid "Block communications from these sites"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Features.php:56
-#, php-format
-msgid "Lock feature %s"
+#: ../../Zotlabs/Module/Admin/Security.php:110
+msgid "Allow communications only from these channels"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Features.php:64
-msgid "Manage Additional Features"
+#: ../../Zotlabs/Module/Admin/Security.php:110
+msgid ""
+"One channel (hash) per line. Leave empty to allow from any channel by default"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:29
-#, php-format
-msgid "Password changed for account %d."
+#: ../../Zotlabs/Module/Admin/Security.php:111
+msgid "Block communications from these channels"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:46
-msgid "Account settings updated."
+#: ../../Zotlabs/Module/Admin/Security.php:112
+msgid "Only allow embeds from secure (SSL) websites and links."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:61
-msgid "Account not found."
+#: ../../Zotlabs/Module/Admin/Security.php:113
+msgid "Allow unfiltered embedded HTML content only from these domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:68
-msgid "Account Edit"
+#: ../../Zotlabs/Module/Admin/Security.php:113
+msgid "One site per line. By default embedded content is filtered."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:69
-msgid "New Password"
+#: ../../Zotlabs/Module/Admin/Security.php:114
+msgid "Block embedded HTML from these domains"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:70
-msgid "New Password again"
+#: ../../Zotlabs/Module/Admin/Security.php:115
+msgid "Allow SVG thumbnails in file browser"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:71
-msgid "Account language (for emails)"
+#: ../../Zotlabs/Module/Admin/Security.php:115
+msgid "WARNING: SVG images may contain malicious code."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Account_edit.php:72
-#: ../../Zotlabs/Module/Admin/Accounts.php:335
-msgid "Service class"
+#: ../../Zotlabs/Module/Admin/Security.php:116
+msgid "Allow embedded (inline) PDF files"
msgstr ""
#: ../../Zotlabs/Module/Admin/Accounts.php:128
@@ -11176,12 +10217,6 @@ msgstr ""
msgid "Expired"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Accounts.php:308
-#: ../../Zotlabs/Module/Admin/Accounts.php:327
-#: ../../Zotlabs/Module/Admin.php:95 ../../Zotlabs/Widget/Admin.php:28
-msgid "Accounts"
-msgstr ""
-
#: ../../Zotlabs/Module/Admin/Accounts.php:310
msgid "Show verified registrations"
msgstr ""
@@ -11226,6 +10261,18 @@ msgstr ""
msgid "No verified registrations available"
msgstr ""
+#: ../../Zotlabs/Module/Admin/Accounts.php:321
+#: ../../Zotlabs/Module/Contactedit.php:639
+#: ../../Zotlabs/Module/Connedit.php:508
+msgid "Block"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Accounts.php:322
+#: ../../Zotlabs/Module/Contactedit.php:639
+#: ../../Zotlabs/Module/Connedit.php:508
+msgid "Unblock"
+msgstr ""
+
#: ../../Zotlabs/Module/Admin/Accounts.php:323
msgid "Verified"
msgstr ""
@@ -11254,6 +10301,11 @@ msgstr ""
msgid "Expires"
msgstr ""
+#: ../../Zotlabs/Module/Admin/Accounts.php:335
+#: ../../Zotlabs/Module/Admin/Account_edit.php:72
+msgid "Service class"
+msgstr ""
+
#: ../../Zotlabs/Module/Admin/Accounts.php:337
msgid ""
"Selected accounts will be deleted!\\n\\nEverything these accounts had posted "
@@ -11270,88 +10322,6 @@ msgstr ""
msgid "Message"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queueworker.php:65
-msgid "Max queueworker threads"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:67
-msgid "Minimum 4, default 4"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:77
-msgid "Assume workers dead after"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:79
-msgid "Minimum 120, default 300 seconds"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:91
-msgid "Pause before starting next task"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:93
-msgid "Minimum 100, default 100 microseconds"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:102
-msgid "Automatically adjust pause before starting next task"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Queueworker.php:111
-msgid "Queueworker Settings"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:26
-msgid "Theme settings updated."
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:61
-msgid "No themes found."
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:95
-#: ../../Zotlabs/Module/Admin/Addons.php:314
-msgid "Disable"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:97
-#: ../../Zotlabs/Module/Admin/Addons.php:317
-msgid "Enable"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:116
-msgid "Screenshot"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:123
-#: ../../Zotlabs/Module/Admin/Themes.php:157 ../../Zotlabs/Widget/Admin.php:33
-msgid "Themes"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:124
-#: ../../Zotlabs/Module/Admin/Addons.php:347
-msgid "Toggle"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:134
-#: ../../Zotlabs/Module/Admin/Addons.php:355
-msgid "Author: "
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:135
-#: ../../Zotlabs/Module/Admin/Addons.php:356
-msgid "Maintainer: "
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:162
-msgid "[Experimental]"
-msgstr ""
-
-#: ../../Zotlabs/Module/Admin/Themes.php:163
-msgid "[Unsupported]"
-msgstr ""
-
#: ../../Zotlabs/Module/Admin/Site.php:112
msgid "Invalid input"
msgstr ""
@@ -11411,6 +10381,18 @@ msgid ""
"This role will be used for the first channel created after registration."
msgstr ""
+#: ../../Zotlabs/Module/Admin/Site.php:356 ../../Zotlabs/Module/Invite.php:410
+msgid "Minute(s)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Site.php:357 ../../Zotlabs/Module/Invite.php:411
+msgid "Hour(s)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Site.php:358 ../../Zotlabs/Module/Invite.php:412
+msgid "Day(s)"
+msgstr ""
+
#: ../../Zotlabs/Module/Admin/Site.php:359
msgid "Week(s)"
msgstr ""
@@ -11431,6 +10413,11 @@ msgstr ""
msgid "Time to wait before a registration can be verified"
msgstr ""
+#: ../../Zotlabs/Module/Admin/Site.php:375
+#: ../../Zotlabs/Module/Admin/Site.php:397 ../../Zotlabs/Module/Invite.php:421
+msgid "duration up from now"
+msgstr ""
+
#: ../../Zotlabs/Module/Admin/Site.php:391
msgid "Register verification expiration time"
msgstr ""
@@ -11439,10 +10426,6 @@ msgstr ""
msgid "Time before an unverified registration will expire"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Site.php:414 ../../Zotlabs/Widget/Admin.php:27
-msgid "Site"
-msgstr ""
-
#: ../../Zotlabs/Module/Admin/Site.php:417
msgid "File upload"
msgstr ""
@@ -11697,6 +10680,16 @@ msgstr ""
msgid "Only import Public stream posts with this text"
msgstr ""
+#: ../../Zotlabs/Module/Admin/Site.php:515
+#: ../../Zotlabs/Module/Admin/Site.php:516
+#: ../../Zotlabs/Module/Contactedit.php:423
+#: ../../Zotlabs/Module/Contactedit.php:424
+#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
+msgid ""
+"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
+"all posts"
+msgstr ""
+
#: ../../Zotlabs/Module/Admin/Site.php:516
msgid "Do not import Public stream posts with this text"
msgstr ""
@@ -11862,36 +10855,143 @@ msgstr ""
msgid "Invalid 24h time value (hhmm/hmm)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:45
-msgid "Queue Statistics"
+#: ../../Zotlabs/Module/Admin/Logs.php:28
+msgid "Log settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:46
-msgid "Total Entries"
+#: ../../Zotlabs/Module/Admin/Logs.php:85
+msgid "Clear"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:47
-msgid "Priority"
+#: ../../Zotlabs/Module/Admin/Logs.php:91
+msgid "Debugging"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:48
-msgid "Destination URL"
+#: ../../Zotlabs/Module/Admin/Logs.php:92
+msgid "Log file"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:49
-msgid "Mark hub permanently offline"
+#: ../../Zotlabs/Module/Admin/Logs.php:92
+msgid ""
+"Must be writable by web server. Relative to your top-level webserver "
+"directory."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:50
-msgid "Retry delivery to this hub"
+#: ../../Zotlabs/Module/Admin/Logs.php:93
+msgid "Log level"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:51
-msgid "Empty queue for this hub"
+#: ../../Zotlabs/Module/Admin/Channels.php:31
+#, php-format
+msgid "%s channel censored/uncensored"
+msgid_plural "%s channels censored/uncensored"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:40
+#, php-format
+msgid "%s channel code allowed/disallowed"
+msgid_plural "%s channels code allowed/disallowed"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:46
+#, php-format
+msgid "%s channel deleted"
+msgid_plural "%s channels deleted"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:65
+msgid "Channel not found"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Queue.php:52
-msgid "Last known contact"
+#: ../../Zotlabs/Module/Admin/Channels.php:75
+#, php-format
+msgid "Channel '%s' deleted"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:87
+#, php-format
+msgid "Channel '%s' censored"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:87
+#, php-format
+msgid "Channel '%s' uncensored"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:98
+#, php-format
+msgid "Channel '%s' code allowed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:98
+#, php-format
+msgid "Channel '%s' code disallowed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:148
+msgid "select all"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:150
+#: ../../Zotlabs/Module/Directory.php:355
+msgid "Censor"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:151
+#: ../../Zotlabs/Module/Directory.php:355
+msgid "Uncensor"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:152
+msgid "Allow Code"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:153
+msgid "Disallow Code"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:158
+msgid "UID"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:162
+msgid ""
+"Selected channels will be deleted!\\n\\nEverything that was posted in these "
+"channels on this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Channels.php:163
+msgid ""
+"The channel {0} will be deleted!\\n\\nEverything that was posted in this "
+"channel on this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:29
+#, php-format
+msgid "Password changed for account %d."
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:46
+msgid "Account settings updated."
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:68
+msgid "Account Edit"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:69
+msgid "New Password"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:70
+msgid "New Password again"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Account_edit.php:71
+msgid "Account language (for emails)"
msgstr ""
#: ../../Zotlabs/Module/Admin/Profs.php:89
@@ -11941,10 +11041,6 @@ msgstr ""
msgid "Edit Profile Field"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Profs.php:168 ../../Zotlabs/Widget/Admin.php:36
-msgid "Profile Fields"
-msgstr ""
-
#: ../../Zotlabs/Module/Admin/Profs.php:169
msgid "Basic Profile Fields"
msgstr ""
@@ -11969,35 +11065,67 @@ msgstr ""
msgid "Create Custom Field"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:28
-msgid "Log settings updated."
+#: ../../Zotlabs/Module/Admin/Dbsync.php:19
+msgid "Update has been marked successful"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:83 ../../Zotlabs/Widget/Admin.php:54
-#: ../../Zotlabs/Widget/Admin.php:64
-msgid "Logs"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:32
+#, php-format
+msgid "Verification of update %s failed. Check system logs."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:85
-msgid "Clear"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:35
+#: ../../Zotlabs/Module/Admin/Dbsync.php:62
+#, php-format
+msgid "Update %s was successfully applied."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:91
-msgid "Debugging"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:39
+#, php-format
+msgid "Verifying update %s did not return a status. Unknown if it succeeded."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:92
-msgid "Log file"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:42
+#, php-format
+msgid "Update %s does not contain a verification function."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:92
+#: ../../Zotlabs/Module/Admin/Dbsync.php:46
+#: ../../Zotlabs/Module/Admin/Dbsync.php:69
+#, php-format
+msgid "Update function %s could not be found."
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:59
+#, php-format
+msgid "Executing update procedure %s failed. Check system logs."
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:66
+#, php-format
msgid ""
-"Must be writable by web server. Relative to your top-level webserver "
-"directory."
+"Update %s did not return a status. It cannot be determined if it was "
+"successful."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Logs.php:93
-msgid "Log level"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:87
+msgid "Failed Updates"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:89
+msgid "Mark success (if update was manually applied)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:90
+msgid "Attempt to verify this update if a verification procedure exists"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:91
+msgid "Attempt to execute this update step automatically"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin/Dbsync.php:96
+msgid "No failed updates."
msgstr ""
#: ../../Zotlabs/Module/Admin/Addons.php:293
@@ -12010,11 +11138,6 @@ msgstr ""
msgid "Plugin %s enabled."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Addons.php:346
-#: ../../Zotlabs/Module/Admin/Addons.php:444 ../../Zotlabs/Widget/Admin.php:32
-msgid "Addons"
-msgstr ""
-
#: ../../Zotlabs/Module/Admin/Addons.php:357
msgid "Minimum project version: "
msgstr ""
@@ -12064,6 +11187,10 @@ msgstr ""
msgid "Install new repo"
msgstr ""
+#: ../../Zotlabs/Module/Admin/Addons.php:429 ../../Zotlabs/Lib/Apps.php:546
+msgid "Install"
+msgstr ""
+
#: ../../Zotlabs/Module/Admin/Addons.php:452
msgid "Manage Repos"
msgstr ""
@@ -12080,220 +11207,805 @@ msgstr ""
msgid "Switch branch"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:19
-msgid "Update has been marked successful"
+#: ../../Zotlabs/Module/Apps.php:51
+msgid "Installed Apps"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:32
-#, php-format
-msgid "Verification of update %s failed. Check system logs."
+#: ../../Zotlabs/Module/Apps.php:54
+msgid "Manage Apps"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:35
-#: ../../Zotlabs/Module/Admin/Dbsync.php:62
-#, php-format
-msgid "Update %s was successfully applied."
+#: ../../Zotlabs/Module/Apps.php:55
+msgid "Create Custom App"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:39
-#, php-format
-msgid "Verifying update %s did not return a status. Unknown if it succeeded."
+#: ../../Zotlabs/Module/Achievements.php:38
+msgid "Some blurb about what to do when you're new here"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:42
-#, php-format
-msgid "Update %s does not contain a verification function."
+#: ../../Zotlabs/Module/Removeme.php:35
+msgid ""
+"Channel removals are not allowed within 48 hours of changing the account "
+"password."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:46
-#: ../../Zotlabs/Module/Admin/Dbsync.php:69
-#, php-format
-msgid "Update function %s could not be found."
+#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
+#: ../../Zotlabs/Module/Settings/Channel.php:282
+msgid "Remove Channel"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:59
+#: ../../Zotlabs/Module/Removeme.php:61
+#: ../../Zotlabs/Module/Removeaccount.php:58
+#: ../../Zotlabs/Module/Changeaddr.php:78
+msgid "WARNING: "
+msgstr ""
+
+#: ../../Zotlabs/Module/Removeme.php:61
+msgid "This channel will be permanently removed. "
+msgstr ""
+
+#: ../../Zotlabs/Module/Removeme.php:61
+msgid "This action can not be undone!"
+msgstr ""
+
+#: ../../Zotlabs/Module/Removeme.php:62
+#: ../../Zotlabs/Module/Removeaccount.php:59
+#: ../../Zotlabs/Module/Changeaddr.php:79
+msgid "Please enter your password for verification:"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:84
+msgid "Email resent"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:84
+msgid "Email resend failed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:109
+msgid "Verification successful"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:153
+msgid "Account successfull created"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:211
+msgid "Channel successfull created"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:217
+msgid "Automatic channel creation failed. Please create a channel."
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:229
+msgid "Account creation error"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:241
+msgid "Verify failed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:246
+msgid "Token verification failed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:251
+msgid "Request not inside time frame"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:257 ../../Zotlabs/Module/Regate.php:287
+msgid "Identity unknown"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:263
+msgid "dId2 mistaken"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:291
+msgid "Your Registration ID"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:304 ../../Zotlabs/Module/Regate.php:396
+#: ../../Zotlabs/Module/Regate.php:428
+msgid "Registration verification"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:311 ../../Zotlabs/Module/Regate.php:433
+msgid "Hold on, you can start verification in"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:312
+msgid "Please remember your verification token for ID"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:314
+msgid "Token validity"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:350
+msgid "Resend email"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:355
+msgid "Registration status"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:358
+msgid "Verification successful!"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:359
+msgid "Your login ID is"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:360
+msgid ""
+"After your account has been approved by our administrator you will be able "
+"to login with your login ID and your provided password."
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:372
+msgid "Registration request revoked"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:373
+msgid "Sorry for any inconvience. Thank you for your response."
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:397
+msgid "Please enter your verification token for ID"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:398 ../../Zotlabs/Module/Regate.php:425
+msgid "Please check your email!"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:408
+msgid "Verification token"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:419
+msgid "ID expired"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:434
+msgid "You will require the verification token for ID"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:443
+msgid "Unknown or expired ID"
+msgstr ""
+
+#: ../../Zotlabs/Module/Regate.php:454
+msgid "dId2 malformed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Manage.php:130 ../../Zotlabs/Module/New_channel.php:147
#, php-format
-msgid "Executing update procedure %s failed. Check system logs."
+msgid "You have created %1$.0f of %2$.0f allowed channels."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:66
+#: ../../Zotlabs/Module/Manage.php:137
+msgid "Create a new channel"
+msgstr ""
+
+#: ../../Zotlabs/Module/Manage.php:163
+msgid "Current Channel"
+msgstr ""
+
+#: ../../Zotlabs/Module/Manage.php:165
+msgid "Switch to one of your channels by selecting it."
+msgstr ""
+
+#: ../../Zotlabs/Module/Manage.php:166
+msgid "Default Channel"
+msgstr ""
+
+#: ../../Zotlabs/Module/Manage.php:167
+msgid "Make Default"
+msgstr ""
+
+#: ../../Zotlabs/Module/Manage.php:170
#, php-format
-msgid ""
-"Update %s did not return a status. It cannot be determined if it was "
-"successful."
+msgid "%d new introductions"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:87
-msgid "Failed Updates"
+#: ../../Zotlabs/Module/Manage.php:172
+msgid "Delegated Channel"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:89
-msgid "Mark success (if update was manually applied)"
+#: ../../Zotlabs/Module/Pdledit_gui.php:119
+msgid "Layout not found"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:90
-msgid "Attempt to verify this update if a verification procedure exists"
+#: ../../Zotlabs/Module/Pdledit_gui.php:127
+msgid "This template does not support pdledi_gui (no content regions defined)"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:91
-msgid "Attempt to execute this update step automatically"
+#: ../../Zotlabs/Module/Pdledit_gui.php:403
+msgid "Main page content"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Dbsync.php:96
-msgid "No failed updates."
+#: ../../Zotlabs/Module/Pdledit_gui.php:404
+msgid "The main page content can not be edited!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:89
+#: ../../Zotlabs/Module/Chanview.php:132
+msgid "toggle full screen mode"
+msgstr ""
+
+#: ../../Zotlabs/Module/Chatsvc.php:131
+msgid "Away"
+msgstr ""
+
+#: ../../Zotlabs/Module/Chatsvc.php:136
+msgid "Online"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:59
+msgid "Contact role deleted."
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:86
+msgid "Permission category name is required."
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:102 ../../Zotlabs/Module/Permcats.php:154
+msgid "Contact role saved."
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:204
+msgid "Role to assign affected contacts and default role to"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:204
+msgid "Role to assign affected contacts to"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:234
+msgid "Assign this role to"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:236
+msgid "All my contacts"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:247
+msgid "Automatically assign this role to new contacts"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:248 ../../Zotlabs/Lib/Apps.php:379
+msgid "Contact Roles"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:249
+msgid "Role name"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:249
+msgid "System role - not editable"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:250
+msgid "Deleting"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:253 ../../Zotlabs/Module/Defperms.php:261
+#: ../../Zotlabs/Module/Connedit.php:713
+msgid "inherited"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:255
+msgid "Role Permissions"
+msgstr ""
+
+#: ../../Zotlabs/Module/Permcats.php:256
msgid ""
-"By default, unfiltered HTML is allowed in embedded media. This is inherently "
-"insecure."
+"Some permissions may be inherited from your <a href=\"settings\">channel "
+"role</a>, which have higher priority than contact role settings."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:92
+#: ../../Zotlabs/Module/Email_resend.php:12
+#: ../../Zotlabs/Module/Email_validation.php:24
+msgid "Token verification failed."
+msgstr ""
+
+#: ../../Zotlabs/Module/Email_resend.php:30
+msgid "Email verification resent"
+msgstr ""
+
+#: ../../Zotlabs/Module/Email_resend.php:33
+msgid "Unable to resend email verification message."
+msgstr ""
+
+#: ../../Zotlabs/Module/Cal.php:62
+msgid "Permissions denied."
+msgstr ""
+
+#: ../../Zotlabs/Module/Viewsrc.php:43
+msgid "item"
+msgstr ""
+
+#: ../../Zotlabs/Module/Apporder.php:47
+msgid "Change Order of Pinned Navbar Apps"
+msgstr ""
+
+#: ../../Zotlabs/Module/Apporder.php:47
+msgid "Change Order of App Tray Apps"
+msgstr ""
+
+#: ../../Zotlabs/Module/Apporder.php:48
msgid ""
-"The recommended setting is to only allow unfiltered HTML from the following "
-"sites:"
+"Use arrows to move the corresponding app left (top) or right (bottom) in the "
+"navbar"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:93
+#: ../../Zotlabs/Module/Apporder.php:48
+msgid "Use arrows to move the corresponding app up or down in the app tray"
+msgstr ""
+
+#: ../../Zotlabs/Module/Oexchange.php:27
+msgid "Unable to find your hub."
+msgstr ""
+
+#: ../../Zotlabs/Module/Oexchange.php:41
+msgid "Post successful."
+msgstr ""
+
+#: ../../Zotlabs/Module/Moderate.php:67
+msgid "Comment approved"
+msgstr ""
+
+#: ../../Zotlabs/Module/Moderate.php:71
+msgid "Comment deleted"
+msgstr ""
+
+#: ../../Zotlabs/Module/Removeaccount.php:35
msgid ""
-"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/"
-"<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
+"Account removals are not allowed within 48 hours of changing the account "
+"password."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:94
+#: ../../Zotlabs/Module/Removeaccount.php:57
+msgid "Remove This Account"
+msgstr ""
+
+#: ../../Zotlabs/Module/Removeaccount.php:58
msgid ""
-"All other embedded content will be filtered, <strong>unless</strong> "
-"embedded content from that site is explicitly blocked."
+"This account and all its channels will be completely removed from the "
+"network. "
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:99 ../../Zotlabs/Widget/Admin.php:30
-msgid "Security"
+#: ../../Zotlabs/Module/Removeaccount.php:58
+msgid "This action is permanent and can not be undone!"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:101
-msgid "Block public"
+#: ../../Zotlabs/Module/Removeaccount.php:61
+#: ../../Zotlabs/Module/Settings/Account.php:111
+msgid "Remove Account"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:101
+#: ../../Zotlabs/Module/Lang.php:20
+msgid "Language App"
+msgstr ""
+
+#: ../../Zotlabs/Module/Uexport.php:108
+msgid "No content available for year"
+msgstr ""
+
+#: ../../Zotlabs/Module/Uexport.php:171
+msgid "Export Channel"
+msgstr ""
+
+#: ../../Zotlabs/Module/Uexport.php:173
+msgid "Export channel"
+msgstr ""
+
+#: ../../Zotlabs/Module/Uexport.php:174
msgid ""
-"Check to block public access to all otherwise public personal pages on this "
-"site unless you are currently authenticated."
+"This will export your identity and social graph into a file which can be "
+"used to import your channel to a new hub."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:102
-msgid "Provide a cloud root directory"
+#: ../../Zotlabs/Module/Uexport.php:177
+msgid "Export content"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:102
+#: ../../Zotlabs/Module/Uexport.php:178
msgid ""
-"The cloud root directory lists all channel names which provide public files"
+"This will export your posts, direct messages, articles and cards per month "
+"stored into a zip file per year. Months with no posts will be dismissed."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:103
-msgid "Show total disk space available to cloud uploads"
+#: ../../Zotlabs/Module/Uexport.php:180
+msgid "Export wikis"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:104
-msgid "Set \"Transport Security\" HTTP header"
+#: ../../Zotlabs/Module/Uexport.php:181
+msgid "This will export your wikis and wiki pages."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:105
-msgid "Set \"Content Security Policy\" HTTP header"
+#: ../../Zotlabs/Module/Uexport.php:183
+msgid "Export webpages"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:106
-msgid "Allowed email domains"
+#: ../../Zotlabs/Module/Uexport.php:184
+msgid "This will export your webpages and menus."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:106
+#: ../../Zotlabs/Module/Uexport.php:186
+msgid "Export channel calendar"
+msgstr ""
+
+#: ../../Zotlabs/Module/Uexport.php:187
msgid ""
-"Comma separated list of domains which are allowed in email addresses for "
-"registrations to this site. Wildcards are accepted. Empty to allow any "
-"domains"
+"This will export your channel calendar events and associated items. CalDAV "
+"calendars are not included."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:107
-msgid "Not allowed email domains"
+#: ../../Zotlabs/Module/Uexport.php:189
+msgid "Export chatrooms"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:107
+#: ../../Zotlabs/Module/Uexport.php:190
+msgid "This will export your chatrooms. Chat history is dismissed."
+msgstr ""
+
+#: ../../Zotlabs/Module/Uexport.php:192
+#, php-format
msgid ""
-"Comma separated list of domains which are not allowed in email addresses for "
-"registrations to this site. Wildcards are accepted. Empty to allow any "
-"domains, unless allowed domains have been defined."
+"This export can be imported or restored by visiting <a href=\"%1$s\">%2$s</"
+"a> on any site containing your channel."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:108
-msgid "Allow communications only from these sites"
+#: ../../Zotlabs/Module/Display.php:341
+msgid "Article"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:108
+#: ../../Zotlabs/Module/Display.php:385
+msgid "Item has been removed."
+msgstr ""
+
+#: ../../Zotlabs/Module/Common.php:14
+msgid "No channel."
+msgstr ""
+
+#: ../../Zotlabs/Module/Common.php:45
+msgid "No connections in common."
+msgstr ""
+
+#: ../../Zotlabs/Module/Common.php:65
+msgid "View Common Connections"
+msgstr ""
+
+#: ../../Zotlabs/Module/Impel.php:188
+#, php-format
+msgid "%s element installed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Impel.php:191
+#, php-format
+msgid "%s element installation failed"
+msgstr ""
+
+#: ../../Zotlabs/Module/New_channel.php:159
+msgid "Your real name is recommended."
+msgstr ""
+
+#: ../../Zotlabs/Module/New_channel.php:160
msgid ""
-"One site per line. Leave empty to allow communication from anywhere by "
-"default"
+"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation "
+"Group\""
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:109
-msgid "Block communications from these sites"
+#: ../../Zotlabs/Module/New_channel.php:165
+msgid ""
+"This will be used to create a unique network address (like an email address)."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:110
-msgid "Allow communications only from these channels"
+#: ../../Zotlabs/Module/New_channel.php:167
+msgid "Allowed characters are a-z 0-9, - and _"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:110
+#: ../../Zotlabs/Module/New_channel.php:175
+msgid "Channel name"
+msgstr ""
+
+#: ../../Zotlabs/Module/New_channel.php:178
+#: ../../Zotlabs/Module/Settings/Channel.php:233
+msgid "Channel role"
+msgstr ""
+
+#: ../../Zotlabs/Module/New_channel.php:181
+msgid "Create a Channel"
+msgstr ""
+
+#: ../../Zotlabs/Module/New_channel.php:182
msgid ""
-"One channel (hash) per line. Leave empty to allow from any channel by default"
+"A channel is a unique network identity. It can represent a person (social "
+"network profile), a forum (group), a business or celebrity page, a newsfeed, "
+"and many other things."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:111
-msgid "Block communications from these channels"
+#: ../../Zotlabs/Module/New_channel.php:183
+msgid ""
+"or <a href=\"import\">import an existing channel</a> from another location."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:112
-msgid "Only allow embeds from secure (SSL) websites and links."
+#: ../../Zotlabs/Module/New_channel.php:188
+msgid "Validate"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:113
-msgid "Allow unfiltered embedded HTML content only from these domains"
+#: ../../Zotlabs/Module/Dircensor.php:42
+msgid "Entry censored"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:113
-msgid "One site per line. By default embedded content is filtered."
+#: ../../Zotlabs/Module/Dircensor.php:45
+msgid "Entry uncensored"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:114
-msgid "Block embedded HTML from these domains"
+#: ../../Zotlabs/Module/Service_limits.php:23
+msgid "No service class restrictions found."
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:115
-msgid "Allow SVG thumbnails in file browser"
+#: ../../Zotlabs/Module/Mood.php:152 ../../Zotlabs/Lib/Apps.php:355
+msgid "Mood"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:115
-msgid "WARNING: SVG images may contain malicious code."
+#: ../../Zotlabs/Module/Mood.php:153
+msgid "Set your current mood and tell your friends"
msgstr ""
-#: ../../Zotlabs/Module/Admin/Security.php:116
-msgid "Allow embedded (inline) PDF files"
+#: ../../Zotlabs/Module/Siteinfo.php:21
+msgid "About this site"
+msgstr ""
+
+#: ../../Zotlabs/Module/Siteinfo.php:22
+msgid "Site Name"
+msgstr ""
+
+#: ../../Zotlabs/Module/Siteinfo.php:26
+msgid "Administrator"
+msgstr ""
+
+#: ../../Zotlabs/Module/Siteinfo.php:29
+msgid "Software and Project information"
+msgstr ""
+
+#: ../../Zotlabs/Module/Siteinfo.php:30
+msgid "This site is powered by $Projectname"
+msgstr ""
+
+#: ../../Zotlabs/Module/Siteinfo.php:31
+msgid ""
+"Federated and decentralised networking and identity services provided by Zot"
+msgstr ""
+
+#: ../../Zotlabs/Module/Siteinfo.php:34
+msgid "Additional federated transport protocols:"
+msgstr ""
+
+#: ../../Zotlabs/Module/Siteinfo.php:36
+#, php-format
+msgid "Version %s"
+msgstr ""
+
+#: ../../Zotlabs/Module/Siteinfo.php:37
+msgid "Project homepage"
+msgstr ""
+
+#: ../../Zotlabs/Module/Siteinfo.php:38
+msgid "Developer homepage"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56
+msgid "App installed."
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:49
+msgid "Malformed app."
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:198
+msgid "Embed code"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:203
+msgid "Edit App"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:203
+msgid "Create App"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:208
+msgid "Name of app"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:209
+msgid "Location (URL) of app"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:211
+msgid "Photo icon URL"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:211
+msgid "80 x 80 pixels - optional"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:212
+msgid "Categories (optional, comma separated list)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:213
+msgid "Version ID"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:214
+msgid "Price of app"
+msgstr ""
+
+#: ../../Zotlabs/Module/Appman.php:215
+msgid "Location (URL) to purchase app"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:96
+msgid "Blocked accounts"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:97
+msgid "Expired accounts"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:98
+msgid "Expiring accounts"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:122
+msgid "Message queues"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:136
+msgid "Your software should be updated"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:141
+msgid "Summary"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:144
+msgid "Registered accounts"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:145
+msgid "Pending registrations"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:146
+msgid "Registered channels"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:147
+msgid "Active addons"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:148
+msgid "Version"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:149
+msgid "Repository version (master)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Admin.php:150
+msgid "Repository version (dev)"
msgstr ""
#: ../../Zotlabs/Module/Contactedit.php:50
msgid "Invalid abook_id"
msgstr ""
+#: ../../Zotlabs/Module/Contactedit.php:78 ../../Zotlabs/Module/Defperms.php:67
+#: ../../Zotlabs/Module/Connedit.php:80
+msgid "Could not access contact record."
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:107
+#: ../../Zotlabs/Module/Connedit.php:101
+msgid "Could not locate selected profile."
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:192
+#: ../../Zotlabs/Module/Connedit.php:215
+msgid "is now connected to"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:252
+#: ../../Zotlabs/Module/Contactedit.php:401
+#: ../../Zotlabs/Module/Connedit.php:701
+msgid "Contact Tools"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:329
+#: ../../Zotlabs/Module/Connedit.php:622
+msgid "Approve this contact"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:329
+#: ../../Zotlabs/Module/Connedit.php:622
+msgid "Accept contact to allow communication"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:362
+#: ../../Zotlabs/Module/Connedit.php:658
+msgid "Please select a role for this contact!"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:382
+#: ../../Zotlabs/Module/Connedit.php:678
+msgid "This contact is unreachable from this location."
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:383
+#: ../../Zotlabs/Module/Connedit.php:679
+msgid "This contact may be unreachable from other channel locations."
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:385
+#: ../../Zotlabs/Module/Connedit.php:681
+msgid "Location independence is not supported by their network."
+msgstr ""
+
#: ../../Zotlabs/Module/Contactedit.php:395
msgid "View profile"
msgstr ""
+#: ../../Zotlabs/Module/Contactedit.php:397
+#: ../../Zotlabs/Module/Connections.php:414
+msgid "This is a group/forum channel"
+msgstr ""
+
#: ../../Zotlabs/Module/Contactedit.php:408
msgid "Select a role for this contact"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:409
-#: ../../Zotlabs/Widget/Permcats.php:92
-msgid "Contact roles"
+#: ../../Zotlabs/Module/Contactedit.php:420
+#: ../../Zotlabs/Module/Connedit.php:703
+msgid "Slide to adjust your degree of friendship"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:422
+#: ../../Zotlabs/Module/Connedit.php:705
+msgid "Custom Filter"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:423
+#: ../../Zotlabs/Module/Settings/Channel.php:286
+#: ../../Zotlabs/Module/Connedit.php:706
+msgid "Only import posts with this text"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:424
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+#: ../../Zotlabs/Module/Connedit.php:707
+msgid "Do not import posts with this text"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:429
+#: ../../Zotlabs/Module/Connedit.php:714
+msgid "Approve contact"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:431
+#: ../../Zotlabs/Module/Connedit.php:717
+msgid "Their"
+msgstr ""
+
+#: ../../Zotlabs/Module/Contactedit.php:432
+#: ../../Zotlabs/Module/Connedit.php:718
+msgid "My"
msgstr ""
#: ../../Zotlabs/Module/Contactedit.php:440
@@ -12308,9 +12020,9 @@ msgstr ""
msgid "Permission"
msgstr ""
-#: ../../Zotlabs/Module/Contactedit.php:443
-#: ../../Zotlabs/Widget/Privacygroups.php:54
-msgid "Privacy groups"
+#: ../../Zotlabs/Module/Contactedit.php:445
+#: ../../Zotlabs/Module/Connedit.php:572
+msgid "Affinity"
msgstr ""
#: ../../Zotlabs/Module/Contactedit.php:446
@@ -12325,6 +12037,11 @@ msgstr ""
msgid "Contact update failed"
msgstr ""
+#: ../../Zotlabs/Module/Contactedit.php:462
+#: ../../Zotlabs/Module/Connections.php:357
+msgid "Approve connection"
+msgstr ""
+
#: ../../Zotlabs/Module/Contactedit.php:508
#: ../../Zotlabs/Module/Contactedit.php:518
msgid "Refresh succeeded"
@@ -12374,680 +12091,768 @@ msgstr ""
msgid "Delete failed"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Directory.php:40
-msgid "Directory Settings"
+#: ../../Zotlabs/Module/Contactedit.php:628
+#: ../../Zotlabs/Module/Connedit.php:487
+msgid "Refresh Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Features.php:45
-msgid "Additional Features"
+#: ../../Zotlabs/Module/Contactedit.php:629
+#: ../../Zotlabs/Module/Connedit.php:490
+msgid "Fetch updated permissions"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:125
-#, php-format
-msgid "%s - (Experimental)"
+#: ../../Zotlabs/Module/Contactedit.php:633
+#: ../../Zotlabs/Module/Connedit.php:494
+msgid "Refresh Photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:181
-msgid "Display Settings"
+#: ../../Zotlabs/Module/Contactedit.php:634
+#: ../../Zotlabs/Module/Connedit.php:497
+msgid "Fetch updated photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:182
-msgid "Theme Settings"
+#: ../../Zotlabs/Module/Contactedit.php:641
+#: ../../Zotlabs/Module/Connedit.php:511
+msgid "Block (or Unblock) all communications with this connection"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:183
-msgid "Custom Theme Settings"
+#: ../../Zotlabs/Module/Contactedit.php:642
+#: ../../Zotlabs/Module/Connedit.php:512
+msgid "This connection is blocked!"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:184
-msgid "Content Settings"
+#: ../../Zotlabs/Module/Contactedit.php:646
+#: ../../Zotlabs/Module/Connedit.php:516
+msgid "Unignore"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:190
-msgid "Display Theme:"
+#: ../../Zotlabs/Module/Contactedit.php:646
+#: ../../Zotlabs/Module/Connections.php:360
+#: ../../Zotlabs/Module/Connedit.php:516
+msgid "Ignore"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:191
-msgid "Select scheme"
+#: ../../Zotlabs/Module/Contactedit.php:648
+#: ../../Zotlabs/Module/Connedit.php:519
+msgid "Ignore (or Unignore) all inbound communications from this connection"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:193
-msgid "Preload images before rendering the page"
+#: ../../Zotlabs/Module/Contactedit.php:649
+#: ../../Zotlabs/Module/Connedit.php:520
+msgid "This connection is ignored!"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:193
-msgid ""
-"The subjective page load time will be longer but the page will be ready when "
-"displayed"
+#: ../../Zotlabs/Module/Contactedit.php:653
+#: ../../Zotlabs/Module/Connedit.php:524
+msgid "Unarchive"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:194
-msgid "Enable user zoom on mobile devices"
+#: ../../Zotlabs/Module/Contactedit.php:653
+#: ../../Zotlabs/Module/Connedit.php:524
+msgid "Archive"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:195
-msgid "Update browser every xx seconds"
+#: ../../Zotlabs/Module/Contactedit.php:655
+#: ../../Zotlabs/Module/Connedit.php:527
+msgid ""
+"Archive (or Unarchive) this connection - mark channel dead but keep content"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:195
-msgid "Minimum of 10 seconds, no maximum"
+#: ../../Zotlabs/Module/Contactedit.php:656
+#: ../../Zotlabs/Module/Connedit.php:528
+msgid "This connection is archived!"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:196
-msgid "Maximum number of conversations to load at any time:"
+#: ../../Zotlabs/Module/Contactedit.php:660
+#: ../../Zotlabs/Module/Connedit.php:532
+msgid "Unhide"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:196
-msgid "Maximum of 30 items"
+#: ../../Zotlabs/Module/Contactedit.php:660
+#: ../../Zotlabs/Module/Connedit.php:532
+msgid "Hide"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:197
-msgid "Show emoticons (smilies) as images"
+#: ../../Zotlabs/Module/Contactedit.php:662
+#: ../../Zotlabs/Module/Connedit.php:535
+msgid "Hide or Unhide this connection from your other connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:198
-msgid "Link post titles to source"
+#: ../../Zotlabs/Module/Contactedit.php:663
+#: ../../Zotlabs/Module/Connedit.php:536
+msgid "This connection is hidden!"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:200
-#: ../../Zotlabs/Widget/Newmember.php:80
-msgid "New Member Links"
+#: ../../Zotlabs/Module/Contactedit.php:669
+#: ../../Zotlabs/Module/Connedit.php:543
+msgid "Delete this connection"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Display.php:200
-msgid "Display new member quick links menu"
+#: ../../Zotlabs/Module/Directory.php:124
+msgid "No default suggestions were found."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Conversation.php:23
-msgid "Settings saved."
+#: ../../Zotlabs/Module/Directory.php:289
+msgid "Gender: "
msgstr ""
-#: ../../Zotlabs/Module/Settings/Conversation.php:25
-msgid "Settings saved. Reload page please."
+#: ../../Zotlabs/Module/Directory.php:291
+msgid "Status: "
msgstr ""
-#: ../../Zotlabs/Module/Settings/Conversation.php:47
-msgid "Conversation Settings"
+#: ../../Zotlabs/Module/Directory.php:293
+msgid "Homepage: "
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel_home.php:46
-#: ../../Zotlabs/Module/Settings/Network.php:42
-msgid "Max height of content (in pixels)"
+#: ../../Zotlabs/Module/Directory.php:353
+msgid "Description:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel_home.php:48
-#: ../../Zotlabs/Module/Settings/Network.php:44
-msgid "Click to expand content exceeding this height"
+#: ../../Zotlabs/Module/Directory.php:364
+msgid "Public Forum:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel_home.php:61
-msgid "Personal menu to display in your channel pages"
+#: ../../Zotlabs/Module/Directory.php:367
+msgid "Keywords: "
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel_home.php:88
-msgid "Channel Home Settings"
+#: ../../Zotlabs/Module/Directory.php:370
+msgid "Don't suggest"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Connections.php:40
-msgid "Connections Settings"
+#: ../../Zotlabs/Module/Directory.php:372
+msgid "Common connections (estimated):"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:21
-msgid "Not valid email."
+#: ../../Zotlabs/Module/Directory.php:422
+msgid "Global Directory"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:24
-msgid "Protected email address. Cannot change to that email."
+#: ../../Zotlabs/Module/Directory.php:422
+msgid "Local Directory"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:33
-msgid "System failure storing new email. Please try again."
+#: ../../Zotlabs/Module/Directory.php:428
+msgid "Finding:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:51
-msgid "Password verification failed."
+#: ../../Zotlabs/Module/Directory.php:433
+msgid "next page"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:58
-msgid "Passwords do not match. Password unchanged."
+#: ../../Zotlabs/Module/Directory.php:433
+msgid "previous page"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:62
-msgid "Empty passwords are not allowed. Password unchanged."
+#: ../../Zotlabs/Module/Directory.php:434
+msgid "Sort options"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:76
-msgid "Password changed."
+#: ../../Zotlabs/Module/Directory.php:435
+msgid "Alphabetic"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:78
-msgid "Password update failed. Please try again."
+#: ../../Zotlabs/Module/Directory.php:436
+msgid "Reverse Alphabetic"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:103
-msgid "Account Settings"
+#: ../../Zotlabs/Module/Directory.php:437
+msgid "Newest to Oldest"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:104
-msgid "Current Password"
+#: ../../Zotlabs/Module/Directory.php:438
+msgid "Oldest to Newest"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:105
-msgid "Enter New Password"
+#: ../../Zotlabs/Module/Directory.php:455
+msgid "No entries (some entries may be hidden)."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:106
-msgid "Confirm New Password"
+#: ../../Zotlabs/Module/Api.php:74 ../../Zotlabs/Module/Api.php:95
+msgid "Authorize application connection"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:106
-msgid "Leave password fields blank unless changing"
+#: ../../Zotlabs/Module/Api.php:75
+msgid "Return to your app and insert this Security Code:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:108
-msgid "DId2 or Email Address:"
+#: ../../Zotlabs/Module/Api.php:85
+msgid "Please login to continue."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Account.php:111
-msgid "Remove this account including all its channels"
+#: ../../Zotlabs/Module/Api.php:97
+msgid ""
+"Do you want to authorize this application to access your posts and contacts, "
+"and/or create new posts for you?"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Featured.php:25
-msgid "No feature settings configured"
+#: ../../Zotlabs/Module/Regmod.php:15
+msgid "Please login."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Featured.php:34
-msgid "Addon Settings"
+#: ../../Zotlabs/Module/Blocks.php:97 ../../Zotlabs/Module/Blocks.php:153
+#: ../../Zotlabs/Module/Editblock.php:113
+msgid "Block Name"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Featured.php:35
-msgid "Please save/submit changes to any panel before opening another."
+#: ../../Zotlabs/Module/Blocks.php:154
+msgid "Block Title"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:105
-#: ../../Zotlabs/Module/Settings/Channel.php:217
-msgid "Please select a channel role"
+#: ../../Zotlabs/Module/Email_validation.php:36
+msgid "Email Verification Required"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:194
-msgid "Your channel address is"
+#: ../../Zotlabs/Module/Email_validation.php:37
+#, php-format
+msgid ""
+"A verification token was sent to your email address [%s]. Enter that token "
+"here to complete the account verification step. Please allow a few minutes "
+"for delivery, and check your spam folder if you do not see the message."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:197
-msgid "Your files/photos are accessible via WebDAV at"
+#: ../../Zotlabs/Module/Email_validation.php:38
+msgid "Resend Email"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:228
-msgid "Channel Settings"
+#: ../../Zotlabs/Module/Email_validation.php:41
+msgid "Validation token"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:233
-#: ../../Zotlabs/Module/New_channel.php:178
-msgid "Channel role"
+#: ../../Zotlabs/Module/Attach.php:68
+msgid "Item not available."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:235
-msgid "Basic Settings"
+#: ../../Zotlabs/Module/Vote.php:40
+msgid "Poll not found."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:236
-msgid "Channel timezone:"
+#: ../../Zotlabs/Module/Vote.php:69
+msgid "Invalid response."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:237
-msgid "Default post location:"
+#: ../../Zotlabs/Module/Vote.php:125
+msgid "Response submitted. Updates may not appear instantly."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:237
-msgid "Geographical location to display on your posts"
+#: ../../Zotlabs/Module/Profile_photo.php:128
+#: ../../Zotlabs/Module/Cover_photo.php:85
+msgid "Image uploaded but image cropping failed."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:238
-msgid "Use browser location"
+#: ../../Zotlabs/Module/Profile_photo.php:184
+#: ../../Zotlabs/Module/Cover_photo.php:212
+msgid "Image resize failed."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:239
-msgid "Adult content"
+#: ../../Zotlabs/Module/Profile_photo.php:350
+#: ../../Zotlabs/Module/Cover_photo.php:265
+msgid "Image upload failed."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:239
-msgid "This channel frequently or regularly publishes adult content"
+#: ../../Zotlabs/Module/Profile_photo.php:370
+#: ../../Zotlabs/Module/Cover_photo.php:282
+msgid "Unable to process image."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:240
-msgid "Maximum Friend Requests/Day:"
+#: ../../Zotlabs/Module/Profile_photo.php:432
+#: ../../Zotlabs/Module/Profile_photo.php:497
+#: ../../Zotlabs/Module/Cover_photo.php:367
+#: ../../Zotlabs/Module/Cover_photo.php:382
+msgid "Photo not available."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:240
-msgid "May reduce spam activity"
+#: ../../Zotlabs/Module/Profile_photo.php:544
+msgid ""
+"This profile photo will be visible to anybody on the internet and may be "
+"distributed to other websites."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:242
-msgid "By default post a status message when:"
+#: ../../Zotlabs/Module/Profile_photo.php:544
+msgid ""
+"This profile photo will be visible only to channels with permission to view "
+"this profile."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:243
-msgid "accepting a friend request"
+#: ../../Zotlabs/Module/Profile_photo.php:546
+msgid "Use Photo for Profile"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:244
-msgid "joining a forum/community"
+#: ../../Zotlabs/Module/Profile_photo.php:546
+msgid "Change Profile Photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:245
-msgid "making an <em>interesting</em> profile change"
+#: ../../Zotlabs/Module/Profile_photo.php:548
+msgid "Reset to default"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:246
-msgid "Send a notification email when:"
+#: ../../Zotlabs/Module/Profile_photo.php:551
+#: ../../Zotlabs/Module/Profile_photo.php:552
+#: ../../Zotlabs/Module/Cover_photo.php:426
+#: ../../Zotlabs/Module/Cover_photo.php:427
+msgid "Use a photo from your albums"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:247
-msgid "You receive a connection request"
+#: ../../Zotlabs/Module/Profile_photo.php:562
+msgid "Select existing"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:248
-msgid "Your connections are confirmed"
+#: ../../Zotlabs/Module/Profile_photo.php:581
+#: ../../Zotlabs/Module/Cover_photo.php:455
+msgid "Crop Image"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:249
-msgid "Someone writes on your profile wall"
+#: ../../Zotlabs/Module/Profile_photo.php:582
+#: ../../Zotlabs/Module/Cover_photo.php:456
+msgid "Please adjust the image cropping for optimum viewing."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:250
-msgid "Someone writes a followup comment"
+#: ../../Zotlabs/Module/Profile_photo.php:584
+msgid "Done editing"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:251
-msgid "You receive a private message"
+#: ../../Zotlabs/Module/Editblock.php:138
+msgid "Edit Block"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:252
-msgid "You receive a friend suggestion"
+#: ../../Zotlabs/Module/Filer.php:53
+msgid "Enter a folder name"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:253
-msgid "You are tagged in a post"
+#: ../../Zotlabs/Module/Filer.php:53
+msgid "or select an existing folder (doubleclick)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:254
-msgid "You are poked/prodded/etc. in a post"
+#: ../../Zotlabs/Module/Filer.php:55 ../../Zotlabs/Lib/ThreadItem.php:186
+msgid "Save to Folder"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:255
-msgid "Someone likes your post/comment"
+#: ../../Zotlabs/Module/Editlayout.php:128 ../../Zotlabs/Module/Layouts.php:129
+#: ../../Zotlabs/Module/Layouts.php:187
+msgid "Layout Name"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:256
-msgid "Show visual notifications including:"
+#: ../../Zotlabs/Module/Editlayout.php:129 ../../Zotlabs/Module/Layouts.php:132
+msgid "Layout Description (Optional)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:257
-msgid "Unseen stream activity"
+#: ../../Zotlabs/Module/Editlayout.php:137
+msgid "Edit Layout"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:258
-msgid "Unseen channel activity"
+#: ../../Zotlabs/Module/Connections.php:58
+#: ../../Zotlabs/Module/Connections.php:116
+msgid "Active"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:259
-msgid "Unseen private messages"
+#: ../../Zotlabs/Module/Connections.php:63
+#: ../../Zotlabs/Module/Connections.php:185
+#: ../../Zotlabs/Module/Connections.php:296
+msgid "Blocked"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:259
-#: ../../Zotlabs/Module/Settings/Channel.php:264
-#: ../../Zotlabs/Module/Settings/Channel.php:265
-#: ../../Zotlabs/Module/Settings/Channel.php:266
-msgid "Recommended"
+#: ../../Zotlabs/Module/Connections.php:68
+#: ../../Zotlabs/Module/Connections.php:192
+#: ../../Zotlabs/Module/Connections.php:295
+msgid "Ignored"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:260
-msgid "Upcoming events"
+#: ../../Zotlabs/Module/Connections.php:73
+#: ../../Zotlabs/Module/Connections.php:206
+#: ../../Zotlabs/Module/Connections.php:294
+msgid "Hidden"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:261
-msgid "Events today"
+#: ../../Zotlabs/Module/Connections.php:78
+#: ../../Zotlabs/Module/Connections.php:199
+msgid "Archived/Unreachable"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:262
-msgid "Upcoming birthdays"
+#: ../../Zotlabs/Module/Connections.php:83
+#: ../../Zotlabs/Module/Connections.php:92 ../../Zotlabs/Module/Menu.php:180
+#: ../../Zotlabs/Module/Notifications.php:101
+msgid "New"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:262
-msgid "Not available in all themes"
+#: ../../Zotlabs/Module/Connections.php:161
+msgid "Active Connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:263
-msgid "System (personal) notifications"
+#: ../../Zotlabs/Module/Connections.php:164
+msgid "Show active connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:264
-msgid "System info messages"
+#: ../../Zotlabs/Module/Connections.php:171
+msgid "Show pending (new) connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:265
-msgid "System critical alerts"
+#: ../../Zotlabs/Module/Connections.php:188
+msgid "Only show blocked connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:266
-msgid "New connections"
+#: ../../Zotlabs/Module/Connections.php:195
+msgid "Only show ignored connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:267
-msgid "System Registrations"
+#: ../../Zotlabs/Module/Connections.php:202
+msgid "Only show archived/unreachable connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:268
-msgid "Unseen shared files"
+#: ../../Zotlabs/Module/Connections.php:209
+msgid "Only show hidden connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:269
-msgid "Unseen public stream activity"
+#: ../../Zotlabs/Module/Connections.php:224
+msgid "Show all connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:270
-msgid "Unseen likes and dislikes"
+#: ../../Zotlabs/Module/Connections.php:292
+msgid "Pending approval"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:271
-msgid "Unseen forum posts"
+#: ../../Zotlabs/Module/Connections.php:293
+msgid "Archived"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:272
-msgid "Email notification hub (hostname)"
+#: ../../Zotlabs/Module/Connections.php:297
+msgid "Not connected at this location"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:272
+#: ../../Zotlabs/Module/Connections.php:336
#, php-format
-msgid ""
-"If your channel is mirrored to multiple hubs, set this to your preferred "
-"location. This will prevent duplicate email notifications. Example: %s"
+msgid "%1$s [%2$s]"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:273
-msgid "Show new wall posts, private messages and connections under Notices"
+#: ../../Zotlabs/Module/Connections.php:337
+msgid "Edit connection"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:274
-msgid "Mark all notices of the thread read if a notice is clicked"
+#: ../../Zotlabs/Module/Connections.php:339
+msgid "Delete connection"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:274
-msgid "If no, only the clicked notice will be marked read"
+#: ../../Zotlabs/Module/Connections.php:345
+msgid "Channel address"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:275
-msgid ""
-"Desktop notifications are unavailable because the required browser "
-"permission has not been granted"
+#: ../../Zotlabs/Module/Connections.php:350
+msgid "Call"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:276
-msgid "Grant permission"
+#: ../../Zotlabs/Module/Connections.php:352
+msgid "Status"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:277
-msgid "Notify me of events this many days in advance"
+#: ../../Zotlabs/Module/Connections.php:355
+msgid "Connected"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:277
-msgid "Must be greater than 0"
+#: ../../Zotlabs/Module/Connections.php:359
+msgid "Ignore connection"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:280
-msgid "Default photo upload folder"
+#: ../../Zotlabs/Module/Connections.php:361
+msgid "Recent activity"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:280
-#: ../../Zotlabs/Module/Settings/Channel.php:281
-msgid "%Y - current year, %m - current month"
+#: ../../Zotlabs/Module/Connections.php:367
+msgid "Connect at this location"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:281
-msgid "Default file upload folder"
+#: ../../Zotlabs/Module/Connections.php:404
+#: ../../Zotlabs/Module/Connedit.php:686
+msgid "Contact role"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:282
-#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
-msgid "Remove Channel"
+#: ../../Zotlabs/Module/Connections.php:405
+msgid "Search your connections"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:283
-msgid "Remove this channel."
+#: ../../Zotlabs/Module/Connections.php:406
+msgid "Contact search"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-msgid "Expire other channel content after this many days"
+#: ../../Zotlabs/Module/Cover_photo.php:196
+#: ../../Zotlabs/Module/Cover_photo.php:254
+msgid "Cover Photos"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-msgid "0 or blank to use the website limit."
+#: ../../Zotlabs/Module/Cover_photo.php:418
+msgid "Your cover photo may be visible to anybody on the internet"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-#, php-format
-msgid "This website expires after %d days."
+#: ../../Zotlabs/Module/Cover_photo.php:420
+msgid "Upload File:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-msgid "This website does not expire imported content."
+#: ../../Zotlabs/Module/Cover_photo.php:421
+msgid "Select a profile:"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-msgid "The website limit takes precedence if lower than your limit."
+#: ../../Zotlabs/Module/Cover_photo.php:422
+msgid "Change Cover Photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-#: ../../Zotlabs/Module/Settings/Channel.php:286
-msgid ""
-"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
-"leave blank to import all posts"
+#: ../../Zotlabs/Module/Cover_photo.php:438
+msgid "Select existing photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Editor.php:40
-msgid "Editor Settings"
+#: ../../Zotlabs/Module/Cover_photo.php:458
+msgid "Done Editing"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Network.php:59
-msgid "Stream Settings"
+#: ../../Zotlabs/Module/Photos.php:84 ../../Zotlabs/Module/Photos.php:103
+msgid "Album not found."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Events.php:40
-msgid "Events Settings"
+#: ../../Zotlabs/Module/Photos.php:93
+msgid "Delete Album"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Calendar.php:40
-msgid "Calendar Settings"
+#: ../../Zotlabs/Module/Photos.php:165 ../../Zotlabs/Module/Photos.php:1054
+msgid "Delete Photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Profiles.php:41
-msgid "Default profile for new contacts"
+#: ../../Zotlabs/Module/Photos.php:522
+msgid "No photos selected"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Profiles.php:49
-msgid "Profiles Settings"
+#: ../../Zotlabs/Module/Photos.php:571
+msgid "Access to this item is restricted."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Photos.php:40
-msgid "Photos Settings"
+#: ../../Zotlabs/Module/Photos.php:614
+#, php-format
+msgid "%1$.2f MB photo storage used."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:39
-msgid "Privacy settings updated."
+#: ../../Zotlabs/Module/Photos.php:618
+#, php-format
+msgid "%1$.2f MB of %2$.2f MB photo storage used."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:57
-msgid "Only those you specifically allow"
+#: ../../Zotlabs/Module/Photos.php:660
+msgid "Upload Photos"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:58
-msgid "Approved connections"
+#: ../../Zotlabs/Module/Photos.php:664
+msgid "Enter an album name"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:59
-msgid "Any connections"
+#: ../../Zotlabs/Module/Photos.php:665
+msgid "or select an existing album (doubleclick)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:60
-msgid "Anybody on this website"
+#: ../../Zotlabs/Module/Photos.php:666
+msgid "Create a status post for this upload"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:61
-msgid "Anybody in this network"
+#: ../../Zotlabs/Module/Photos.php:668
+msgid "Description (optional)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:62
-msgid "Anybody authenticated"
+#: ../../Zotlabs/Module/Photos.php:756
+msgid "Show Newest First"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:63
-msgid "Anybody on the internet"
+#: ../../Zotlabs/Module/Photos.php:758
+msgid "Show Oldest First"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:73
-msgid ""
-"Advise: set to \"Anybody on the internet\" and use privacy groups to "
-"restrict access"
+#: ../../Zotlabs/Module/Photos.php:815 ../../Zotlabs/Module/Photos.php:1354
+msgid "Add Photos"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:109
-msgid "Privacy Settings"
+#: ../../Zotlabs/Module/Photos.php:863
+msgid "Permission denied. Access to this item may be restricted."
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:114
-msgid "Advanced configuration"
+#: ../../Zotlabs/Module/Photos.php:865
+msgid "Photo not available"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:116
-msgid "Proceed with caution"
+#: ../../Zotlabs/Module/Photos.php:923
+msgid "Use as profile photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:117
-msgid ""
-"Changing advanced configuration settings can impact your, and your contacts "
-"channels functionality and security."
+#: ../../Zotlabs/Module/Photos.php:924
+msgid "Use as cover photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:118
-msgid "Accept the risk and continue"
+#: ../../Zotlabs/Module/Photos.php:931
+msgid "Private Photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:120
-msgid "Automatically approve new contacts"
+#: ../../Zotlabs/Module/Photos.php:946
+msgid "View Full Size"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:121
-msgid "Opt-out of search engine indexing"
+#: ../../Zotlabs/Module/Photos.php:1028
+msgid "Edit photo"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:122
-msgid "Group actor"
+#: ../../Zotlabs/Module/Photos.php:1030
+msgid "Rotate CW (right)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Privacy.php:122
-msgid "Allow this channel to act as a forum"
+#: ../../Zotlabs/Module/Photos.php:1031
+msgid "Rotate CCW (left)"
msgstr ""
-#: ../../Zotlabs/Module/Settings/Manage.php:41
-msgid "Channel Manager Settings"
+#: ../../Zotlabs/Module/Photos.php:1034
+msgid "Move photo to album"
msgstr ""
-#: ../../Zotlabs/Module/Sse_bs.php:610
-msgid "Private forum"
+#: ../../Zotlabs/Module/Photos.php:1035
+msgid "Enter a new album name"
msgstr ""
-#: ../../Zotlabs/Module/Sse_bs.php:610
-msgid "Public forum"
+#: ../../Zotlabs/Module/Photos.php:1036
+msgid "or select an existing one (doubleclick)"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:819
-msgid "Calendar entries imported."
+#: ../../Zotlabs/Module/Photos.php:1041
+msgid "Add a Tag"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:821
-msgid "No calendar entries found."
+#: ../../Zotlabs/Module/Photos.php:1049
+msgid "Example: @bob, @Barbara_Jensen, @jim@example.com"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1010
-msgid "Event title"
+#: ../../Zotlabs/Module/Photos.php:1052
+msgid "Flag as adult in album view"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1011
-msgid "Start date and time"
+#: ../../Zotlabs/Module/Photos.php:1071 ../../Zotlabs/Lib/ThreadItem.php:310
+msgid "I like this (toggle)"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1012
-msgid "End date and time"
+#: ../../Zotlabs/Module/Photos.php:1072 ../../Zotlabs/Lib/ThreadItem.php:311
+msgid "I don't like this (toggle)"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1013
-msgid "Timezone:"
+#: ../../Zotlabs/Module/Photos.php:1090 ../../Zotlabs/Module/Photos.php:1203
+#: ../../Zotlabs/Lib/ThreadItem.php:825
+msgid "This is you"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1039
-msgid "Month"
+#: ../../Zotlabs/Module/Photos.php:1124 ../../Zotlabs/Module/Photos.php:1136
+#: ../../Zotlabs/Lib/ThreadItem.php:229 ../../Zotlabs/Lib/ThreadItem.php:242
+msgid "View all"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1040
-msgid "Week"
+#: ../../Zotlabs/Module/Photos.php:1237
+msgid "Photo Tools"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1041
-msgid "Day"
+#: ../../Zotlabs/Module/Photos.php:1246
+msgid "In This Photo:"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1042
-msgid "List month"
+#: ../../Zotlabs/Module/Photos.php:1251
+msgid "Map"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1043
-msgid "List week"
+#: ../../Zotlabs/Module/Photos.php:1259 ../../Zotlabs/Lib/ThreadItem.php:490
+msgctxt "noun"
+msgid "Likes"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1044
-msgid "List day"
+#: ../../Zotlabs/Module/Photos.php:1260 ../../Zotlabs/Lib/ThreadItem.php:491
+msgctxt "noun"
+msgid "Dislikes"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1052
-msgid "More"
+#: ../../Zotlabs/Module/Lostpass.php:19
+msgid "No valid account found."
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1053
-msgid "Less"
+#: ../../Zotlabs/Module/Lostpass.php:33
+msgid "Password reset request issued. Check your email."
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1055
-msgid "Select calendar"
+#: ../../Zotlabs/Module/Lostpass.php:39 ../../Zotlabs/Module/Lostpass.php:108
+#, php-format
+msgid "Site Member (%s)"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1056 ../../Zotlabs/Widget/Cdav.php:149
-msgid "Channel Calendars"
+#: ../../Zotlabs/Module/Lostpass.php:44 ../../Zotlabs/Module/Lostpass.php:49
+#, php-format
+msgid "Password reset requested at %s"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1056 ../../Zotlabs/Widget/Cdav.php:135
-#: ../../Zotlabs/Widget/Cdav.php:149
-msgid "CalDAV Calendars"
+#: ../../Zotlabs/Module/Lostpass.php:68
+msgid ""
+"Request could not be verified. (You may have previously submitted it.) "
+"Password reset failed."
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1058
-msgid "Delete all"
+#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1757
+msgid "Password Reset"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1061
-msgid "Sorry! Editing of recurrent events is not yet implemented."
+#: ../../Zotlabs/Module/Lostpass.php:92
+msgid "Your password has been reset as requested."
+msgstr ""
+
+#: ../../Zotlabs/Module/Lostpass.php:93
+msgid "Your new password is"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1062
+#: ../../Zotlabs/Module/Lostpass.php:94
+msgid "Save or copy your new password - and then"
+msgstr ""
+
+#: ../../Zotlabs/Module/Lostpass.php:95
+msgid "click here to login"
+msgstr ""
+
+#: ../../Zotlabs/Module/Lostpass.php:96
msgid ""
-"Could not fetch calendar resource. The selected calendar might be disabled."
+"Your password may be changed from the <em>Settings</em> page after "
+"successful login."
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1458
-msgid "Default Calendar"
+#: ../../Zotlabs/Module/Lostpass.php:117
+#, php-format
+msgid "Your password has changed at %s"
msgstr ""
-#: ../../Zotlabs/Module/Cdav.php:1469
-msgid "Default Addressbook"
+#: ../../Zotlabs/Module/Lostpass.php:130
+msgid "Forgot your Password?"
+msgstr ""
+
+#: ../../Zotlabs/Module/Lostpass.php:131
+msgid ""
+"Enter your email address and submit to have your password reset. Then check "
+"your email for further instructions."
+msgstr ""
+
+#: ../../Zotlabs/Module/Lostpass.php:132
+msgid "Email Address"
+msgstr ""
+
+#: ../../Zotlabs/Module/Lostpass.php:133 ../../Zotlabs/Module/Pdledit.php:76
+#: ../../Zotlabs/Module/Pdledit.php:93
+msgid "Reset"
+msgstr ""
+
+#: ../../Zotlabs/Module/Follow.php:92
+msgid "Connection added."
+msgstr ""
+
+#: ../../Zotlabs/Module/Page.php:39 ../../Zotlabs/Module/Block.php:29
+msgid "Invalid item."
+msgstr ""
+
+#: ../../Zotlabs/Module/Page.php:174
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, "
+"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
+"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
+"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
msgstr ""
#: ../../Zotlabs/Module/Profiles.php:26 ../../Zotlabs/Module/Profiles.php:214
@@ -13307,1265 +13112,1479 @@ msgstr ""
msgid "My other channels"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:100
-msgid "Remote privacy information not available"
+#: ../../Zotlabs/Module/Subthread.php:128
+#, php-format
+msgid "%1$s is following %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:143 ../../Zotlabs/Module/Lockview.php:184
-#: ../../Zotlabs/Module/Acl.php:123
-msgctxt "acl"
-msgid "Profile"
+#: ../../Zotlabs/Module/Subthread.php:130
+#, php-format
+msgid "%1$s stopped following %2$s's %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:154 ../../Zotlabs/Module/Lockview.php:193
-msgid "Privacy group"
+#: ../../Zotlabs/Module/Bookmarks.php:62
+msgid "Bookmark added"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:214
-#, php-format
-msgid "Click to copy link to this ressource for guest %s to clipboard"
+#: ../../Zotlabs/Module/Bookmarks.php:101
+msgid "My Connections Bookmarks"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:214
-msgid "Link copied"
+#: ../../Zotlabs/Module/Changeaddr.php:35
+msgid ""
+"Channel name changes are not allowed within 48 hours of changing the account "
+"password."
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:221
-msgid "Access"
+#: ../../Zotlabs/Module/Changeaddr.php:77
+msgid "Change channel nickname/address"
msgstr ""
-#: ../../Zotlabs/Module/Lockview.php:226 ../../Zotlabs/Widget/Tokens.php:49
-msgid "Guest access"
+#: ../../Zotlabs/Module/Changeaddr.php:78
+msgid "Any/all connections on other networks will be lost!"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:67
-msgid "Import Webpage Elements"
+#: ../../Zotlabs/Module/Changeaddr.php:80
+msgid "New channel address"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:68
-msgid "Import selected"
+#: ../../Zotlabs/Module/Changeaddr.php:81
+msgid "Rename Channel"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:91
-msgid "Export Webpage Elements"
+#: ../../Zotlabs/Module/Invite.php:69
+msgid "Invite App"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:92
-msgid "Export selected"
+#: ../../Zotlabs/Module/Invite.php:81
+msgid "Register is closed"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:258
-msgid "Actions"
+#: ../../Zotlabs/Module/Invite.php:115 ../../Zotlabs/Module/Invite.php:562
+msgid "Note, the invitation code is valid up to"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:259
-msgid "Page Link"
+#: ../../Zotlabs/Module/Invite.php:128
+#, php-format
+msgid "Too many recipients for one invitation (max %d)"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:260
-msgid "Page Title"
+#: ../../Zotlabs/Module/Invite.php:132
+msgid "No recipients for this invitation"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:290
-msgid "Invalid file type."
+#: ../../Zotlabs/Module/Invite.php:151
+#, php-format
+msgid "(%s) : Not a real email address"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:302
-msgid "Error opening zip file"
+#: ../../Zotlabs/Module/Invite.php:158
+#, php-format
+msgid "(%s) : Not allowed email address"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:313
-msgid "Invalid folder path."
+#: ../../Zotlabs/Module/Invite.php:171
+#, php-format
+msgid "(%s) : email address already in use"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:340
-msgid "No webpage elements detected."
+#: ../../Zotlabs/Module/Invite.php:178
+#, php-format
+msgid "(%s) : Accepted email address"
msgstr ""
-#: ../../Zotlabs/Module/Webpages.php:415
-msgid "Import complete."
+#: ../../Zotlabs/Module/Invite.php:270
+#, php-format
+msgid "To %s : Message delivery success."
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:14
-#: ../../Zotlabs/Module/Filestorage.php:53
-msgid "Deprecated!"
+#: ../../Zotlabs/Module/Invite.php:302
+#, php-format
+msgid "%1$d mail(s) sent, %2$d mail error(s)"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:157
-msgid "Permission Denied."
+#: ../../Zotlabs/Module/Invite.php:327
+msgid "Invites not proposed by configuration"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:190
-msgid "Edit file permissions"
+#: ../../Zotlabs/Module/Invite.php:328
+msgid "Contact the site admin"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:203
-msgid "Include all files and sub folders"
+#: ../../Zotlabs/Module/Invite.php:344
+msgid "Invites by users not enabled"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:204
-msgid "Return to file list"
+#: ../../Zotlabs/Module/Invite.php:349
+msgid "You have no more invitations available"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:206
-#: ../../Zotlabs/Storage/Browser.php:389
-msgid "Copy/paste this code to attach file to a post"
+#: ../../Zotlabs/Module/Invite.php:365
+msgid "Not on xchan"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:207
-#: ../../Zotlabs/Storage/Browser.php:390
-msgid "Copy/paste this URL to link file from a web page"
+#: ../../Zotlabs/Module/Invite.php:398
+msgid "All users invitation limit exceeded."
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:209
-msgid "Share this file"
+#: ../../Zotlabs/Module/Invite.php:416
+msgid "Invitation expires after"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:210
-msgid "Show URL to this file"
+#: ../../Zotlabs/Module/Invite.php:517 ../../Zotlabs/Module/Invite.php:556
+msgid "Invitation"
msgstr ""
-#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Storage/Browser.php:558
-msgid "Show in your contacts shared folder"
+#: ../../Zotlabs/Module/Invite.php:547
+msgid "Send invitations"
msgstr ""
-#: ../../Zotlabs/Module/Filer.php:53
-msgid "Enter a folder name"
+#: ../../Zotlabs/Module/Invite.php:548
+msgid "Invitations I am using"
msgstr ""
-#: ../../Zotlabs/Module/Filer.php:53
-msgid "or select an existing folder (doubleclick)"
+#: ../../Zotlabs/Module/Invite.php:549
+msgid "Invitations we are using"
msgstr ""
-#: ../../Zotlabs/Module/Moderate.php:67
-msgid "Comment approved"
+#: ../../Zotlabs/Module/Invite.php:550
+msgid "§ Note, the email(s) sent will be recorded in the system logs"
msgstr ""
-#: ../../Zotlabs/Module/Moderate.php:71
-msgid "Comment deleted"
+#: ../../Zotlabs/Module/Invite.php:551
+msgid "Enter email addresses, one per line:"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:27
-msgid "Layout updated."
+#: ../../Zotlabs/Module/Invite.php:552
+msgid "Your message:"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:129
-msgid "Edit System Page Description"
+#: ../../Zotlabs/Module/Invite.php:553
+msgid "Invite template"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:76 ../../Zotlabs/Module/Pdledit.php:93
-msgid "(modified)"
+#: ../../Zotlabs/Module/Invite.php:555
+msgid "Subject:"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:124
-msgid "Layout not found."
+#: ../../Zotlabs/Module/Invite.php:561
+msgid "Here you may enter personal notes to the recipient(s)"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:130
-msgid "Module Name:"
+#: ../../Zotlabs/Module/Sse_bs.php:610
+msgid "Private forum"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:131
-msgid "Layout Help"
+#: ../../Zotlabs/Module/Sse_bs.php:610
+msgid "Public forum"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:132
-msgid "Edit another layout"
+#: ../../Zotlabs/Module/Xchan.php:10
+msgid "Xchan Lookup"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit.php:133
-msgid "System layout"
+#: ../../Zotlabs/Module/Xchan.php:13
+msgid "Lookup xchan beginning with (or webbie): "
msgstr ""
-#: ../../Zotlabs/Module/Acl.php:370
-msgid "network"
+#: ../../Zotlabs/Module/Affinity.php:35
+msgid "Affinity Tool settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:21
-msgid "About this site"
+#: ../../Zotlabs/Module/Affinity.php:54
+msgid ""
+"The numbers below represent the minimum and maximum slider default positions "
+"for your network/stream page as a percentage."
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:22
-msgid "Site Name"
+#: ../../Zotlabs/Module/Affinity.php:61
+msgid "Default maximum affinity level"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:26
-msgid "Administrator"
+#: ../../Zotlabs/Module/Affinity.php:61
+msgid "0-99 default 99"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:29
-msgid "Software and Project information"
+#: ../../Zotlabs/Module/Affinity.php:67
+msgid "Default minimum affinity level"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:30
-msgid "This site is powered by $Projectname"
+#: ../../Zotlabs/Module/Affinity.php:67
+msgid "0-99 - default 0"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:31
+#: ../../Zotlabs/Module/Affinity.php:73
+msgid "Persistent affinity levels"
+msgstr ""
+
+#: ../../Zotlabs/Module/Affinity.php:73
msgid ""
-"Federated and decentralised networking and identity services provided by Zot"
+"If disabled the max and min levels will be reset to default after page reload"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:34
-msgid "Additional federated transport protocols:"
+#: ../../Zotlabs/Module/Affinity.php:81
+msgid "Affinity Tool Settings"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:36
-#, php-format
-msgid "Version %s"
+#: ../../Zotlabs/Module/Settings/Network.php:42
+#: ../../Zotlabs/Module/Settings/Channel_home.php:46
+msgid "Max height of content (in pixels)"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:37
-msgid "Project homepage"
+#: ../../Zotlabs/Module/Settings/Network.php:44
+#: ../../Zotlabs/Module/Settings/Channel_home.php:48
+msgid "Click to expand content exceeding this height"
msgstr ""
-#: ../../Zotlabs/Module/Siteinfo.php:38
-msgid "Developer homepage"
+#: ../../Zotlabs/Module/Settings/Network.php:59
+msgid "Stream Settings"
msgstr ""
-#: ../../Zotlabs/Module/Attach.php:68
-msgid "Item not available."
+#: ../../Zotlabs/Module/Settings/Features.php:45
+msgid "Additional Features"
msgstr ""
-#: ../../Zotlabs/Module/Tagger.php:50
-msgid "Post not found."
+#: ../../Zotlabs/Module/Settings/Channel.php:105
+#: ../../Zotlabs/Module/Settings/Channel.php:217
+msgid "Please select a channel role"
msgstr ""
-#: ../../Zotlabs/Module/Tagger.php:121
-#, php-format
-msgid "%1$s tagged %2$s's %3$s with %4$s"
+#: ../../Zotlabs/Module/Settings/Channel.php:194
+msgid "Your channel address is"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:62
-msgid "Event can not end before it has started."
+#: ../../Zotlabs/Module/Settings/Channel.php:197
+msgid "Your files/photos are accessible via WebDAV at"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:64
-#: ../../Zotlabs/Module/Channel_calendar.php:72
-#: ../../Zotlabs/Module/Channel_calendar.php:87
-msgid "Unable to generate preview."
+#: ../../Zotlabs/Module/Settings/Channel.php:228
+msgid "Channel Settings"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:70
-msgid "Event title and start time are required."
+#: ../../Zotlabs/Module/Settings/Channel.php:235
+msgid "Basic Settings"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:85
-#: ../../Zotlabs/Module/Channel_calendar.php:226
-msgid "Event not found."
+#: ../../Zotlabs/Module/Settings/Channel.php:236
+msgid "Channel timezone:"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:370
-msgid "Edit event"
+#: ../../Zotlabs/Module/Settings/Channel.php:237
+msgid "Default post location:"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:372
-msgid "Delete event"
+#: ../../Zotlabs/Module/Settings/Channel.php:237
+msgid "Geographical location to display on your posts"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:406
-msgid "calendar"
+#: ../../Zotlabs/Module/Settings/Channel.php:238
+msgid "Use browser location"
msgstr ""
-#: ../../Zotlabs/Module/Channel_calendar.php:493
-msgid "Failed to remove event"
+#: ../../Zotlabs/Module/Settings/Channel.php:239
+msgid "Adult content"
msgstr ""
-#: ../../Zotlabs/Module/Regmod.php:15
-msgid "Please login."
+#: ../../Zotlabs/Module/Settings/Channel.php:239
+msgid "This channel frequently or regularly publishes adult content"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:252
-msgid "Connection Default Permissions"
+#: ../../Zotlabs/Module/Settings/Channel.php:240
+msgid "Maximum Friend Requests/Day:"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:253
-msgid "Apply these permissions automatically"
+#: ../../Zotlabs/Module/Settings/Channel.php:240
+msgid "May reduce spam activity"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:253
-msgid ""
-"If enabled, connection requests will be approved without your interaction"
+#: ../../Zotlabs/Module/Settings/Channel.php:241
+#: ../../Zotlabs/Lib/Enotify.php:68
+msgid "Notification Settings"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:254
-msgid "Permission role"
+#: ../../Zotlabs/Module/Settings/Channel.php:242
+msgid "By default post a status message when:"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:255
-msgid "Add permission role"
+#: ../../Zotlabs/Module/Settings/Channel.php:243
+msgid "accepting a friend request"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:260
-msgid "Automatic approval settings"
+#: ../../Zotlabs/Module/Settings/Channel.php:244
+msgid "joining a forum/community"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:263
-msgid "My Settings"
+#: ../../Zotlabs/Module/Settings/Channel.php:245
+msgid "making an <em>interesting</em> profile change"
msgstr ""
-#: ../../Zotlabs/Module/Defperms.php:267
-msgid ""
-"Some individual permissions may have been preset or locked based on your "
-"channel type and privacy settings."
+#: ../../Zotlabs/Module/Settings/Channel.php:246
+msgid "Send a notification email when:"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:122
-msgid "Thing updated"
+#: ../../Zotlabs/Module/Settings/Channel.php:247
+msgid "You receive a connection request"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:174
-msgid "Object store: failed"
+#: ../../Zotlabs/Module/Settings/Channel.php:248
+msgid "Your connections are confirmed"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:178
-msgid "Thing added"
+#: ../../Zotlabs/Module/Settings/Channel.php:249
+msgid "Someone writes on your profile wall"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:204
-#, php-format
-msgid "OBJ: %1$s %2$s %3$s"
+#: ../../Zotlabs/Module/Settings/Channel.php:250
+msgid "Someone writes a followup comment"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:267
-msgid "Show Thing"
+#: ../../Zotlabs/Module/Settings/Channel.php:251
+msgid "You receive a private message"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:274
-msgid "item not found."
+#: ../../Zotlabs/Module/Settings/Channel.php:252
+msgid "You receive a friend suggestion"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:307
-msgid "Edit Thing"
+#: ../../Zotlabs/Module/Settings/Channel.php:253
+msgid "You are tagged in a post"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:309 ../../Zotlabs/Module/Thing.php:366
-msgid "Select a profile"
+#: ../../Zotlabs/Module/Settings/Channel.php:254
+msgid "You are poked/prodded/etc. in a post"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
-msgid "Post an activity"
+#: ../../Zotlabs/Module/Settings/Channel.php:255
+msgid "Someone likes your post/comment"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
-msgid "Only sends to viewers of the applicable profile"
+#: ../../Zotlabs/Module/Settings/Channel.php:256
+msgid "Show visual notifications including:"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:315 ../../Zotlabs/Module/Thing.php:371
-msgid "Name of thing e.g. something"
+#: ../../Zotlabs/Module/Settings/Channel.php:257
+msgid "Unseen stream activity"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:317 ../../Zotlabs/Module/Thing.php:372
-msgid "URL of thing (optional)"
+#: ../../Zotlabs/Module/Settings/Channel.php:258
+msgid "Unseen channel activity"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:319 ../../Zotlabs/Module/Thing.php:373
-msgid "URL for photo of thing (optional)"
+#: ../../Zotlabs/Module/Settings/Channel.php:259
+msgid "Unseen private messages"
msgstr ""
-#: ../../Zotlabs/Module/Thing.php:364
-msgid "Add Thing to your Profile"
+#: ../../Zotlabs/Module/Settings/Channel.php:259
+#: ../../Zotlabs/Module/Settings/Channel.php:264
+#: ../../Zotlabs/Module/Settings/Channel.php:265
+#: ../../Zotlabs/Module/Settings/Channel.php:266
+msgid "Recommended"
msgstr ""
-#: ../../Zotlabs/Module/Editblock.php:138
-msgid "Edit Block"
+#: ../../Zotlabs/Module/Settings/Channel.php:260
+msgid "Upcoming events"
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:106
-msgid "Files: shared with me"
+#: ../../Zotlabs/Module/Settings/Channel.php:261
+msgid "Events today"
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:108
-msgid "NEW"
+#: ../../Zotlabs/Module/Settings/Channel.php:262
+msgid "Upcoming birthdays"
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:110
-#: ../../Zotlabs/Storage/Browser.php:383
-msgid "Last Modified"
+#: ../../Zotlabs/Module/Settings/Channel.php:262
+msgid "Not available in all themes"
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:111
-msgid "Remove all files"
+#: ../../Zotlabs/Module/Settings/Channel.php:263
+msgid "System (personal) notifications"
msgstr ""
-#: ../../Zotlabs/Module/Sharedwithme.php:112
-msgid "Remove this file"
+#: ../../Zotlabs/Module/Settings/Channel.php:264
+msgid "System info messages"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:179
-msgid "$Projectname Server - Setup"
+#: ../../Zotlabs/Module/Settings/Channel.php:265
+msgid "System critical alerts"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:183
-msgid "Could not connect to database."
+#: ../../Zotlabs/Module/Settings/Channel.php:266
+msgid "New connections"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:187
+#: ../../Zotlabs/Module/Settings/Channel.php:267
+msgid "System Registrations"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:268
+msgid "Unseen shared files"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:269
+msgid "Unseen public stream activity"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:270
+msgid "Unseen likes and dislikes"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:271
+msgid "Unseen forum posts"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:272
+msgid "Email notification hub (hostname)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:272
+#, php-format
msgid ""
-"Could not connect to specified site URL. Possible SSL certificate or DNS "
-"issue."
+"If your channel is mirrored to multiple hubs, set this to your preferred "
+"location. This will prevent duplicate email notifications. Example: %s"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:194
-msgid "Could not create table."
+#: ../../Zotlabs/Module/Settings/Channel.php:273
+msgid "Show new wall posts, private messages and connections under Notices"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:200
-msgid "Your site database has been installed."
+#: ../../Zotlabs/Module/Settings/Channel.php:274
+msgid "Mark all notices of the thread read if a notice is clicked"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:206
+#: ../../Zotlabs/Module/Settings/Channel.php:274
+msgid "If no, only the clicked notice will be marked read"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:275
msgid ""
-"You may need to import the file \"install/schema_xxx.sql\" manually using a "
-"database client."
+"Desktop notifications are unavailable because the required browser "
+"permission has not been granted"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:207 ../../Zotlabs/Module/Setup.php:271
-#: ../../Zotlabs/Module/Setup.php:778
-msgid "Please see the file \"install/INSTALL.txt\"."
+#: ../../Zotlabs/Module/Settings/Channel.php:276
+msgid "Grant permission"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:268
-msgid "System check"
+#: ../../Zotlabs/Module/Settings/Channel.php:277
+msgid "Notify me of events this many days in advance"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:273
-msgid "Check again"
+#: ../../Zotlabs/Module/Settings/Channel.php:277
+msgid "Must be greater than 0"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:294
-msgid "Database connection"
+#: ../../Zotlabs/Module/Settings/Channel.php:280
+msgid "Default photo upload folder"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:295
-msgid ""
-"In order to install $Projectname we need to know how to connect to your "
-"database."
+#: ../../Zotlabs/Module/Settings/Channel.php:280
+#: ../../Zotlabs/Module/Settings/Channel.php:281
+msgid "%Y - current year, %m - current month"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:296
-msgid ""
-"Please contact your hosting provider or site administrator if you have "
-"questions about these settings."
+#: ../../Zotlabs/Module/Settings/Channel.php:281
+msgid "Default file upload folder"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:297
+#: ../../Zotlabs/Module/Settings/Channel.php:283
+msgid "Remove this channel."
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "Expire other channel content after this many days"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "0 or blank to use the website limit."
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+#, php-format
+msgid "This website expires after %d days."
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "This website does not expire imported content."
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "The website limit takes precedence if lower than your limit."
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+#: ../../Zotlabs/Module/Settings/Channel.php:286
msgid ""
-"The database you specify below should already exist. If it does not, please "
-"create it before continuing."
+"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
+"leave blank to import all posts"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:301
-msgid "Database Server Name"
+#: ../../Zotlabs/Module/Settings/Account.php:21
+msgid "Not valid email."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:301
-msgid "Default is 127.0.0.1"
+#: ../../Zotlabs/Module/Settings/Account.php:24
+msgid "Protected email address. Cannot change to that email."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:302
-msgid "Database Port"
+#: ../../Zotlabs/Module/Settings/Account.php:33
+msgid "System failure storing new email. Please try again."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:302
-msgid "Communication port number - use 0 for default"
+#: ../../Zotlabs/Module/Settings/Account.php:51
+msgid "Password verification failed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:303
-msgid "Database Login Name"
+#: ../../Zotlabs/Module/Settings/Account.php:58
+msgid "Passwords do not match. Password unchanged."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:304
-msgid "Database Login Password"
+#: ../../Zotlabs/Module/Settings/Account.php:62
+msgid "Empty passwords are not allowed. Password unchanged."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:305
-msgid "Database Name"
+#: ../../Zotlabs/Module/Settings/Account.php:76
+msgid "Password changed."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:306
-msgid "Database Type"
+#: ../../Zotlabs/Module/Settings/Account.php:78
+msgid "Password update failed. Please try again."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
-msgid "Site administrator email address"
+#: ../../Zotlabs/Module/Settings/Account.php:103
+msgid "Account Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
-msgid ""
-"Your account email address must match this in order to use the web admin "
-"panel."
+#: ../../Zotlabs/Module/Settings/Account.php:104
+msgid "Current Password"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
-msgid "Website URL"
+#: ../../Zotlabs/Module/Settings/Account.php:105
+msgid "Enter New Password"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
-msgid "Please use SSL (https) URL if available."
+#: ../../Zotlabs/Module/Settings/Account.php:106
+msgid "Confirm New Password"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:310 ../../Zotlabs/Module/Setup.php:352
-msgid "Please select a default timezone for your website"
+#: ../../Zotlabs/Module/Settings/Account.php:106
+msgid "Leave password fields blank unless changing"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:337
-msgid "Site settings"
+#: ../../Zotlabs/Module/Settings/Account.php:108
+msgid "Multi-Factor Authentication"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:391
-msgid "PHP version 8.0 or greater is required."
+#: ../../Zotlabs/Module/Settings/Account.php:109
+msgid "DId2 or Email Address:"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:392
-msgid "PHP version"
+#: ../../Zotlabs/Module/Settings/Account.php:112
+msgid "Remove this account including all its channels"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:408
-msgid "Could not find a command line version of PHP in the web server PATH."
+#: ../../Zotlabs/Module/Settings/Featured.php:25
+msgid "No feature settings configured"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:409
-msgid ""
-"If you don't have a command line version of PHP installed on server, you "
-"will not be able to run background polling via cron."
+#: ../../Zotlabs/Module/Settings/Featured.php:34
+msgid "Addon Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:413
-msgid "PHP executable path"
+#: ../../Zotlabs/Module/Settings/Featured.php:35
+msgid "Please save/submit changes to any panel before opening another."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:413
-msgid ""
-"Enter full path to php executable. You can leave this blank to continue the "
-"installation."
+#: ../../Zotlabs/Module/Settings/Events.php:40
+msgid "Events Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:418
-msgid "Command line PHP"
+#: ../../Zotlabs/Module/Settings/Manage.php:41
+msgid "Channel Manager Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:428
-msgid ""
-"Unable to check command line PHP, as shell_exec() is disabled. This is "
-"required."
+#: ../../Zotlabs/Module/Settings/Channel_home.php:61
+msgid "Personal menu to display in your channel pages"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:432
-msgid ""
-"The command line version of PHP on your system does not have "
-"\"register_argc_argv\" enabled."
+#: ../../Zotlabs/Module/Settings/Channel_home.php:88
+msgid "Channel Home Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:433
-msgid "This is required for message delivery to work."
+#: ../../Zotlabs/Module/Settings/Calendar.php:40
+msgid "Calendar Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:436
-msgid "PHP register_argc_argv"
+#: ../../Zotlabs/Module/Settings/Multifactor.php:23
+msgid "Password is required"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:456
+#: ../../Zotlabs/Module/Settings/Multifactor.php:29
+msgid "The provided password is not correct"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:68
+msgid "Account Multi-Factor Authentication"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:69
msgid ""
-"This is not sufficient to upload larger images or files. You should be able "
-"to upload at least 4 MB at once."
+"This is your generated secret. It may be used in some cases if the QR image "
+"cannot be read. Please store it in a safe place."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:458
+#: ../../Zotlabs/Module/Settings/Multifactor.php:70
+msgid "Please enter the code from your authenticator app"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:71
+msgid "You will only be able to enable MFA if the test passes"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:75
+msgid "Congratulations, the provided code was correct"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:76
+msgid "Incorrect code"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:79
+msgid "Enable Multi-Factor Authentication"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:81
+msgid "Logging in will require you to be in possession of your smartphone"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Multifactor.php:84
+msgid "Your account password"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Display.php:125
#, php-format
-msgid ""
-"Your max allowed total upload size is set to %s. Maximum size of one file to "
-"upload is set to %s. You are allowed to upload up to %d files at once."
+msgid "%s - (Experimental)"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:464
-msgid "You can adjust these settings in the server php.ini file."
+#: ../../Zotlabs/Module/Settings/Display.php:181
+msgid "Display Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:466
-msgid "PHP upload limits"
+#: ../../Zotlabs/Module/Settings/Display.php:182
+msgid "Theme Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:489
-msgid ""
-"Error: the \"openssl_pkey_new\" function on this system is not able to "
-"generate encryption keys"
+#: ../../Zotlabs/Module/Settings/Display.php:183
+msgid "Custom Theme Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:490
+#: ../../Zotlabs/Module/Settings/Display.php:184
+msgid "Content Settings"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Display.php:190
+msgid "Display Theme:"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Display.php:191
+msgid "Select scheme"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Display.php:193
+msgid "Preload images before rendering the page"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Display.php:193
msgid ""
-"If running under Windows, please see \"http://www.php.net/manual/en/openssl."
-"installation.php\"."
+"The subjective page load time will be longer but the page will be ready when "
+"displayed"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:493
-msgid "Generate encryption keys"
+#: ../../Zotlabs/Module/Settings/Display.php:194
+msgid "Enable user zoom on mobile devices"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:510
-msgid "libCurl PHP module"
+#: ../../Zotlabs/Module/Settings/Display.php:195
+msgid "Update browser every xx seconds"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:511
-msgid "GD graphics PHP module"
+#: ../../Zotlabs/Module/Settings/Display.php:195
+msgid "Minimum of 10 seconds, no maximum"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:512
-msgid "OpenSSL PHP module"
+#: ../../Zotlabs/Module/Settings/Display.php:196
+msgid "Maximum number of conversations to load at any time:"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:513
-msgid "PDO database PHP module"
+#: ../../Zotlabs/Module/Settings/Display.php:196
+msgid "Maximum of 30 items"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:514
-msgid "mb_string PHP module"
+#: ../../Zotlabs/Module/Settings/Display.php:197
+msgid "Show emoticons (smilies) as images"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:515
-msgid "xml PHP module"
+#: ../../Zotlabs/Module/Settings/Display.php:198
+msgid "Link post titles to source"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:516
-msgid "zip PHP module"
+#: ../../Zotlabs/Module/Settings/Display.php:200
+msgid "Display new member quick links menu"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:520 ../../Zotlabs/Module/Setup.php:522
-msgid "Apache mod_rewrite module"
+#: ../../Zotlabs/Module/Settings/Directory.php:40
+msgid "Directory Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:520
-msgid ""
-"Error: Apache webserver mod-rewrite module is required but not installed."
+#: ../../Zotlabs/Module/Settings/Editor.php:40
+msgid "Editor Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:526 ../../Zotlabs/Module/Setup.php:529
-msgid "exec"
+#: ../../Zotlabs/Module/Settings/Connections.php:40
+msgid "Connections Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:526
-msgid ""
-"Error: exec is required but is either not installed or has been disabled in "
-"php.ini"
+#: ../../Zotlabs/Module/Settings/Photos.php:40
+msgid "Photos Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:532 ../../Zotlabs/Module/Setup.php:535
-msgid "shell_exec"
+#: ../../Zotlabs/Module/Settings/Profiles.php:41
+msgid "Default profile for new contacts"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:532
-msgid ""
-"Error: shell_exec is required but is either not installed or has been "
-"disabled in php.ini"
+#: ../../Zotlabs/Module/Settings/Profiles.php:49
+msgid "Profiles Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:540
-msgid "Error: libCURL PHP module required but not installed."
+#: ../../Zotlabs/Module/Settings/Privacy.php:39
+msgid "Privacy settings updated."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:544
+#: ../../Zotlabs/Module/Settings/Privacy.php:57
+msgid "Only those you specifically allow"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:58
+msgid "Approved connections"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:59
+msgid "Any connections"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:60
+msgid "Anybody on this website"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:61
+msgid "Anybody in this network"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:62
+msgid "Anybody authenticated"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:63
+msgid "Anybody on the internet"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:73
msgid ""
-"Error: GD PHP module with JPEG support or ImageMagick graphics library "
-"required but not installed."
+"Advise: set to \"Anybody on the internet\" and use privacy groups to "
+"restrict access"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:548
-msgid "Error: openssl PHP module required but not installed."
+#: ../../Zotlabs/Module/Settings/Privacy.php:109
+msgid "Privacy Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:554
+#: ../../Zotlabs/Module/Settings/Privacy.php:114
+msgid "Advanced configuration"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:116
+msgid "Proceed with caution"
+msgstr ""
+
+#: ../../Zotlabs/Module/Settings/Privacy.php:117
msgid ""
-"Error: PDO database PHP module missing a driver for either mysql or pgsql."
+"Changing advanced configuration settings can impact your, and your contacts "
+"channels functionality and security."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:559
-msgid "Error: PDO database PHP module required but not installed."
+#: ../../Zotlabs/Module/Settings/Privacy.php:118
+msgid "Accept the risk and continue"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:563
-msgid "Error: mb_string PHP module required but not installed."
+#: ../../Zotlabs/Module/Settings/Privacy.php:120
+msgid "Automatically approve new contacts"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:567
-msgid "Error: xml PHP module required for DAV but not installed."
+#: ../../Zotlabs/Module/Settings/Privacy.php:121
+msgid "Opt-out of search engine indexing"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:571
-msgid "Error: zip PHP module required but not installed."
+#: ../../Zotlabs/Module/Settings/Privacy.php:122
+msgid "Group actor"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:590 ../../Zotlabs/Module/Setup.php:599
-msgid ".htconfig.php is writable"
+#: ../../Zotlabs/Module/Settings/Privacy.php:122
+msgid "Allow this channel to act as a forum"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:595
-msgid ""
-"The web installer needs to be able to create a file called \".htconfig.php\" "
-"in the top folder of your web server and it is unable to do so."
+#: ../../Zotlabs/Module/Settings/Conversation.php:23
+msgid "Settings saved."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:596
-msgid ""
-"This is most often a permission setting, as the web server may not be able "
-"to write files in your folder - even if you can."
+#: ../../Zotlabs/Module/Settings/Conversation.php:25
+msgid "Settings saved. Reload page please."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:597
-msgid "Please see install/INSTALL.txt for additional information."
+#: ../../Zotlabs/Module/Settings/Conversation.php:47
+msgid "Conversation Settings"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:613
-msgid ""
-"This software uses the Smarty3 template engine to render its web views. "
-"Smarty3 compiles templates to PHP to speed up rendering."
+#: ../../Zotlabs/Module/Menu.php:68
+msgid "Unable to update menu."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:614
-#, php-format
-msgid ""
-"In order to store these compiled templates, the web server needs to have "
-"write access to the directory %s under the top level web folder."
+#: ../../Zotlabs/Module/Menu.php:79
+msgid "Unable to create menu."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:615 ../../Zotlabs/Module/Setup.php:636
-msgid ""
-"Please ensure that the user that your web server runs as (e.g. www-data) has "
-"write access to this folder."
+#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174
+msgid "Menu Name"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:616
-#, php-format
-msgid ""
-"Note: as a security measure, you should give the web server write access to "
-"%s only--not the template files (.tpl) that it contains."
+#: ../../Zotlabs/Module/Menu.php:161
+msgid "Unique name (not visible on webpage) - required"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:619
-#, php-format
-msgid "%s is writable"
+#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175
+msgid "Menu Title"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:635
-msgid ""
-"This software uses the store directory to save uploaded files. The web "
-"server needs to have write access to the store directory under the top level "
-"web folder"
+#: ../../Zotlabs/Module/Menu.php:162
+msgid "Visible on webpage - leave empty for no title"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:639
-msgid "store is writable"
+#: ../../Zotlabs/Module/Menu.php:163
+msgid "Allow Bookmarks"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:671
-msgid ""
-"SSL certificate cannot be validated. Fix certificate or disable https access "
-"to this site."
+#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
+msgid "Menu may be used to store saved bookmarks"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:672
-msgid ""
-"If you have https access to your website or allow connections to TCP port "
-"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
-"NOT use self-signed certificates!"
+#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225
+msgid "Submit and proceed"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:673
-msgid ""
-"This restriction is incorporated because public posts from you may for "
-"example contain references to images on your own hub."
+#: ../../Zotlabs/Module/Menu.php:177 ../../Zotlabs/Module/Locs.php:124
+msgid "Drop"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:674
-msgid ""
-"If your certificate is not recognized, members of other sites (who may "
-"themselves have valid certificates) will get a warning message on their own "
-"site complaining about security issues."
+#: ../../Zotlabs/Module/Menu.php:181
+msgid "Bookmarks allowed"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:675
-msgid ""
-"This can cause usability issues elsewhere (not just on your own site) so we "
-"must insist on this requirement."
+#: ../../Zotlabs/Module/Menu.php:183
+msgid "Delete this menu"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:676
-msgid ""
-"Providers are available that issue free certificates which are browser-valid."
+#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219
+msgid "Edit menu contents"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:677
-msgid ""
-"If you are confident that the certificate is valid and signed by a trusted "
-"authority, check to see if you have failed to install an intermediate cert. "
-"These are not normally required by browsers, but are required for server-to-"
-"server communications."
+#: ../../Zotlabs/Module/Menu.php:185
+msgid "Edit this menu"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:679
-msgid "SSL certificate validation"
+#: ../../Zotlabs/Module/Menu.php:201
+msgid "Menu could not be deleted."
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:685
-msgid ""
-"Url rewrite in .htaccess is not working. Check your server configuration."
-"Test: "
+#: ../../Zotlabs/Module/Menu.php:214
+msgid "Edit Menu"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:688
-msgid "Url rewrite is working"
+#: ../../Zotlabs/Module/Menu.php:218
+msgid "Add or remove entries to this menu"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:701
-msgid ""
-"The database configuration file \".htconfig.php\" could not be written. "
-"Please use the enclosed text to create a configuration file in your web "
-"server root."
+#: ../../Zotlabs/Module/Menu.php:220
+msgid "Menu name"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:776
-msgid "<h1>What next?</h1>"
+#: ../../Zotlabs/Module/Menu.php:220
+msgid "Must be unique, only seen by you"
msgstr ""
-#: ../../Zotlabs/Module/Setup.php:777
+#: ../../Zotlabs/Module/Menu.php:221
+msgid "Menu title"
+msgstr ""
+
+#: ../../Zotlabs/Module/Menu.php:221
+msgid "Menu title as seen by others"
+msgstr ""
+
+#: ../../Zotlabs/Module/Menu.php:222
+msgid "Allow bookmarks"
+msgstr ""
+
+#: ../../Zotlabs/Module/Defperms.php:252
+msgid "Connection Default Permissions"
+msgstr ""
+
+#: ../../Zotlabs/Module/Defperms.php:253
+msgid "Apply these permissions automatically"
+msgstr ""
+
+#: ../../Zotlabs/Module/Defperms.php:253
msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the poller."
+"If enabled, connection requests will be approved without your interaction"
msgstr ""
-#: ../../Zotlabs/Module/Apporder.php:47
-msgid "Change Order of Pinned Navbar Apps"
+#: ../../Zotlabs/Module/Defperms.php:254
+msgid "Permission role"
msgstr ""
-#: ../../Zotlabs/Module/Apporder.php:47
-msgid "Change Order of App Tray Apps"
+#: ../../Zotlabs/Module/Defperms.php:255
+msgid "Add permission role"
msgstr ""
-#: ../../Zotlabs/Module/Apporder.php:48
+#: ../../Zotlabs/Module/Defperms.php:259 ../../Zotlabs/Module/Connedit.php:700
msgid ""
-"Use arrows to move the corresponding app left (top) or right (bottom) in the "
-"navbar"
+"The permissions indicated on this page will be applied to all new "
+"connections."
msgstr ""
-#: ../../Zotlabs/Module/Apporder.php:48
-msgid "Use arrows to move the corresponding app up or down in the app tray"
+#: ../../Zotlabs/Module/Defperms.php:260
+msgid "Automatic approval settings"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:96
-msgid "Blocked accounts"
+#: ../../Zotlabs/Module/Defperms.php:263
+msgid "My Settings"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:97
-msgid "Expired accounts"
+#: ../../Zotlabs/Module/Defperms.php:266 ../../Zotlabs/Module/Connedit.php:720
+msgid "Individual Permissions"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:98
-msgid "Expiring accounts"
+#: ../../Zotlabs/Module/Defperms.php:267
+msgid ""
+"Some individual permissions may have been preset or locked based on your "
+"channel type and privacy settings."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:122
-msgid "Message queues"
+#: ../../Zotlabs/Module/Pconfig.php:33 ../../Zotlabs/Module/Pconfig.php:69
+msgid "This setting requires special processing and editing has been blocked."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:136
-msgid "Your software should be updated"
+#: ../../Zotlabs/Module/Pconfig.php:58
+msgid "Configuration Editor"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:141
-msgid "Summary"
+#: ../../Zotlabs/Module/Pconfig.php:59
+msgid ""
+"Warning: Changing some settings could render your channel inoperable. Please "
+"leave this page unless you are comfortable with and knowledgeable about how "
+"to correctly use this feature."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:144
-msgid "Registered accounts"
+#: ../../Zotlabs/Module/Oauth2.php:54
+msgid "Name and Secret are required"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:145
-msgid "Pending registrations"
+#: ../../Zotlabs/Module/Oauth2.php:113
+msgid "Add OAuth2 application"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:146
-msgid "Registered channels"
+#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:147
+msgid "Grant Types"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:147
-msgid "Active addons"
+#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:120
+msgid "leave blank unless your application sepcifically requires this"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:148
-msgid "Version"
+#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:148
+msgid "Authorization scope"
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:149
-msgid "Repository version (master)"
+#: ../../Zotlabs/Module/Oauth2.php:132
+msgid "OAuth2 Application not found."
msgstr ""
-#: ../../Zotlabs/Module/Admin.php:150
-msgid "Repository version (dev)"
+#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148
+msgid "leave blank unless your application specifically requires this"
msgstr ""
-#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98
-msgid "Tag removed"
+#: ../../Zotlabs/Module/Oauth2.php:190
+msgid "Connected OAuth2 Apps"
msgstr ""
-#: ../../Zotlabs/Module/Tagrm.php:123
-msgid "Remove Item Tag"
+#: ../../Zotlabs/Module/Dreport.php:38
+msgid "Invalid message"
msgstr ""
-#: ../../Zotlabs/Module/Tagrm.php:125
-msgid "Select a tag to remove: "
+#: ../../Zotlabs/Module/Dreport.php:68
+msgid "no results"
msgstr ""
-#: ../../Zotlabs/Module/Viewsrc.php:43
-msgid "item"
+#: ../../Zotlabs/Module/Dreport.php:82
+msgid "channel sync processed"
msgstr ""
-#: ../../Zotlabs/Module/Email_resend.php:30
-msgid "Email verification resent"
+#: ../../Zotlabs/Module/Dreport.php:86
+msgid "queued"
msgstr ""
-#: ../../Zotlabs/Module/Email_resend.php:33
-msgid "Unable to resend email verification message."
+#: ../../Zotlabs/Module/Dreport.php:90
+msgid "posted"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:47
-msgid "Privacy group created."
+#: ../../Zotlabs/Module/Dreport.php:94
+msgid "accepted for delivery"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:50
-msgid "Could not create privacy group."
+#: ../../Zotlabs/Module/Dreport.php:98
+msgid "updated"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:82
-msgid "Privacy group updated."
+#: ../../Zotlabs/Module/Dreport.php:102
+msgid "update ignored"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:301
-msgid "Post to this group by default"
+#: ../../Zotlabs/Module/Dreport.php:105
+msgid "permission denied"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
-msgid "Add new contacts to this group by default"
+#: ../../Zotlabs/Module/Dreport.php:109
+msgid "recipient not found"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:146
-msgid "Privacy group name"
+#: ../../Zotlabs/Module/Dreport.php:129
+#, php-format
+msgid "Delivery report for %1$s"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
-msgid "Members are visible to other channels"
+#: ../../Zotlabs/Module/Dreport.php:134
+msgid "Redeliver"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:175
-msgid "Privacy group removed."
+#: ../../Zotlabs/Module/Thing.php:122
+msgid "Thing updated"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:178
-msgid "Unable to remove privacy group."
+#: ../../Zotlabs/Module/Thing.php:174
+msgid "Object store: failed"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:244
+#: ../../Zotlabs/Module/Thing.php:178
+msgid "Thing added"
+msgstr ""
+
+#: ../../Zotlabs/Module/Thing.php:204
#, php-format
-msgid "Privacy Group: %s"
+msgid "OBJ: %1$s %2$s %3$s"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:246
-msgid "Privacy group name: "
+#: ../../Zotlabs/Module/Thing.php:267
+msgid "Show Thing"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:262
-msgid "Group members"
+#: ../../Zotlabs/Module/Thing.php:274
+msgid "item not found."
msgstr ""
-#: ../../Zotlabs/Module/Group.php:264
-msgid "Not in this group"
+#: ../../Zotlabs/Module/Thing.php:307
+msgid "Edit Thing"
msgstr ""
-#: ../../Zotlabs/Module/Group.php:296
-msgid "Click a channel to toggle membership"
+#: ../../Zotlabs/Module/Thing.php:309 ../../Zotlabs/Module/Thing.php:366
+msgid "Select a profile"
msgstr ""
-#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43
-msgid "Item is not editable"
+#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
+msgid "Post an activity"
msgstr ""
-#: ../../Zotlabs/Module/Achievements.php:38
-msgid "Some blurb about what to do when you're new here"
+#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
+msgid "Only sends to viewers of the applicable profile"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit_gui.php:119
-msgid "Layout not found"
+#: ../../Zotlabs/Module/Thing.php:315 ../../Zotlabs/Module/Thing.php:371
+msgid "Name of thing e.g. something"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit_gui.php:127
-msgid "This template does not support pdledi_gui (no content regions defined)"
+#: ../../Zotlabs/Module/Thing.php:317 ../../Zotlabs/Module/Thing.php:372
+msgid "URL of thing (optional)"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit_gui.php:403
-msgid "Main page content"
+#: ../../Zotlabs/Module/Thing.php:319 ../../Zotlabs/Module/Thing.php:373
+msgid "URL for photo of thing (optional)"
msgstr ""
-#: ../../Zotlabs/Module/Pdledit_gui.php:404
-msgid "The main page content can not be edited!"
+#: ../../Zotlabs/Module/Thing.php:364
+msgid "Add Thing to your Profile"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:147 ../../Zotlabs/Module/Manage.php:130
-#, php-format
-msgid "You have created %1$.0f of %2$.0f allowed channels."
+#: ../../Zotlabs/Module/Rmagic.php:46
+msgid "Authentication failed."
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:159
-msgid "Your real name is recommended."
+#: ../../Zotlabs/Module/Import_progress.php:36
+msgid "Item sync completed!"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:160
-msgid ""
-"Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation "
-"Group\""
+#: ../../Zotlabs/Module/Import_progress.php:51
+msgid "Item sync completed but no items were found!"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:165
-msgid ""
-"This will be used to create a unique network address (like an email address)."
+#: ../../Zotlabs/Module/Import_progress.php:68
+msgid "File sync completed!"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:167
-msgid "Allowed characters are a-z 0-9, - and _"
+#: ../../Zotlabs/Module/Import_progress.php:83
+msgid "File sync completed but no files were found!"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:175
-msgid "Channel name"
+#: ../../Zotlabs/Module/Import_progress.php:98
+msgid "Channel clone status"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:181
-msgid "Create a Channel"
+#: ../../Zotlabs/Module/Import_progress.php:99
+msgid "Item sync status"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:182
-msgid ""
-"A channel is a unique network identity. It can represent a person (social "
-"network profile), a forum (group), a business or celebrity page, a newsfeed, "
-"and many other things."
+#: ../../Zotlabs/Module/Import_progress.php:100
+msgid "File sync status"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:183
-msgid ""
-"or <a href=\"import\">import an existing channel</a> from another location."
+#: ../../Zotlabs/Module/Import_progress.php:107
+msgid "Channel cloning completed!"
msgstr ""
-#: ../../Zotlabs/Module/New_channel.php:188
-msgid "Validate"
+#: ../../Zotlabs/Module/Import_progress.php:108
+msgid "Resume"
msgstr ""
-#: ../../Zotlabs/Module/Z6trans.php:19
-msgid "Update to Hubzilla 5.0 step 2"
+#: ../../Zotlabs/Module/Import_progress.php:109
+msgid "Only resume if sync stalled!"
msgstr ""
-#: ../../Zotlabs/Module/Z6trans.php:21
-msgid "To complete the update please run"
+#: ../../Zotlabs/Module/Pdledit.php:27
+msgid "Layout updated."
msgstr ""
-#: ../../Zotlabs/Module/Z6trans.php:23
-msgid "php util/z6convert.php"
+#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:129
+msgid "Edit System Page Description"
msgstr ""
-#: ../../Zotlabs/Module/Z6trans.php:25
-msgid "from the terminal."
+#: ../../Zotlabs/Module/Pdledit.php:76 ../../Zotlabs/Module/Pdledit.php:93
+msgid "(modified)"
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:26
-msgid "Public Hubs"
+#: ../../Zotlabs/Module/Pdledit.php:124
+msgid "Layout not found."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:29
+#: ../../Zotlabs/Module/Pdledit.php:130
+msgid "Module Name:"
+msgstr ""
+
+#: ../../Zotlabs/Module/Pdledit.php:131
+msgid "Layout Help"
+msgstr ""
+
+#: ../../Zotlabs/Module/Pdledit.php:132
+msgid "Edit another layout"
+msgstr ""
+
+#: ../../Zotlabs/Module/Pdledit.php:133
+msgid "System layout"
+msgstr ""
+
+#: ../../Zotlabs/Module/Home.php:104
+#, php-format
+msgid "Welcome to %s"
+msgstr ""
+
+#: ../../Zotlabs/Module/Suggest.php:52
msgid ""
-"The listed hubs allow public registration for the $Projectname network. All "
-"hubs in the network are interlinked so membership on any of them conveys "
-"membership in the network as a whole. Some hubs may require subscription or "
-"provide tiered service plans. The hub itself <strong>may</strong> provide "
-"additional details."
+"No suggestions available. If this is a new site, please try again in 24 "
+"hours."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Hub URL"
+#: ../../Zotlabs/Module/Connedit.php:171
+msgid "Connection updated."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Access Type"
+#: ../../Zotlabs/Module/Connedit.php:173
+msgid "Failed to update connection record."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Registration Policy"
+#: ../../Zotlabs/Module/Connedit.php:320
+msgid "Could not access address book record."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Stats"
+#: ../../Zotlabs/Module/Connedit.php:368
+msgid "Refresh failed - channel is currently unavailable."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Software"
+#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391
+#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409
+#: ../../Zotlabs/Module/Connedit.php:422
+msgid "Unable to set address book parameters."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:37
-msgid "Ratings"
+#: ../../Zotlabs/Module/Connedit.php:441
+msgid "Connection has been removed."
msgstr ""
-#: ../../Zotlabs/Module/Pubsites.php:51
-msgid "Rate"
+#: ../../Zotlabs/Module/Connedit.php:483
+#, php-format
+msgid "View %s's profile"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:84 ../../Zotlabs/Module/Photos.php:103
-msgid "Album not found."
+#: ../../Zotlabs/Module/Connedit.php:504
+msgid "View recent posts and comments"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:93
-msgid "Delete Album"
+#: ../../Zotlabs/Module/Connedit.php:550
+msgid "Fetch Vcard"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:165 ../../Zotlabs/Module/Photos.php:1054
-msgid "Delete Photo"
+#: ../../Zotlabs/Module/Connedit.php:553
+msgid "Fetch electronic calling card for this connection"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:522
-msgid "No photos selected"
+#: ../../Zotlabs/Module/Connedit.php:575
+msgid "Open Set Affinity section by default"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:571
-msgid "Access to this item is restricted."
+#: ../../Zotlabs/Module/Connedit.php:612
+msgid "Filter"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:614
+#: ../../Zotlabs/Module/Connedit.php:615
+msgid "Open Custom Filter section by default"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:626
+msgid "Set Affinity"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:629
+msgid "Set Profile"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:632
+msgid "Set Affinity & Profile"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:685
#, php-format
-msgid "%1$.2f MB photo storage used."
+msgid "Contact: %s"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:618
+#: ../../Zotlabs/Module/Connedit.php:687
+msgid "Manage contact roles"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:694
+msgid "This contacts's primary address is"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:695
+msgid "Available locations:"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:710
+msgid "Contact Pending Approval"
+msgstr ""
+
+#: ../../Zotlabs/Module/Connedit.php:715
#, php-format
-msgid "%1$.2f MB of %2$.2f MB photo storage used."
+msgid ""
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:660
-msgid "Upload Photos"
+#: ../../Zotlabs/Module/Connedit.php:721
+msgid ""
+"Some permissions may be inherited from your channel's <a "
+"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
+"priority than individual settings. You can <strong>not</strong> change those "
+"settings here."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:664
-msgid "Enter an album name"
+#: ../../Zotlabs/Module/Connedit.php:722
+msgid ""
+"Some permissions may be inherited from your channel's <a "
+"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
+"priority than individual settings. You can change those settings here but "
+"they wont have any impact unless the inherited setting changes."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:665
-msgid "or select an existing album (doubleclick)"
+#: ../../Zotlabs/Module/Connedit.php:723
+msgid "Last update:"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:666
-msgid "Create a status post for this upload"
+#: ../../Zotlabs/Module/Connedit.php:731
+msgid "Details"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:668
-msgid "Description (optional)"
+#: ../../Zotlabs/Module/Notifications.php:106
+#: ../../Zotlabs/Module/Notify.php:85
+msgid "No more system notifications."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:756
-msgid "Show Newest First"
+#: ../../Zotlabs/Module/Notifications.php:110
+#: ../../Zotlabs/Module/Notify.php:89
+msgid "System Notifications"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:758
-msgid "Show Oldest First"
+#: ../../Zotlabs/Module/Notifications.php:111
+#: ../../Zotlabs/Lib/ThreadItem.php:483
+msgid "Mark all seen"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:815 ../../Zotlabs/Module/Photos.php:1354
-msgid "Add Photos"
+#: ../../Zotlabs/Module/Layouts.php:184
+msgid "Comanche page description language help"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:863
-msgid "Permission denied. Access to this item may be restricted."
+#: ../../Zotlabs/Module/Layouts.php:188
+msgid "Layout Description"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:865
-msgid "Photo not available"
+#: ../../Zotlabs/Module/Layouts.php:193
+msgid "Download PDL file"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:923
-msgid "Use as profile photo"
+#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65
+msgid "Location not found."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:924
-msgid "Use as cover photo"
+#: ../../Zotlabs/Module/Locs.php:74
+msgid "Location lookup failed."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:931
-msgid "Private Photo"
+#: ../../Zotlabs/Module/Locs.php:78
+msgid ""
+"Please select another location to become primary before removing the primary "
+"location."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:946
-msgid "View Full Size"
+#: ../../Zotlabs/Module/Locs.php:106
+msgid "Syncing locations"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1028
-msgid "Edit photo"
+#: ../../Zotlabs/Module/Locs.php:115
+msgid "No locations found."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1030
-msgid "Rotate CW (right)"
+#: ../../Zotlabs/Module/Locs.php:120
+msgid "Manage Channel Locations"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1031
-msgid "Rotate CCW (left)"
+#: ../../Zotlabs/Module/Locs.php:126
+msgid "Sync Now"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1034
-msgid "Move photo to album"
+#: ../../Zotlabs/Module/Locs.php:127
+msgid "Please wait several minutes between consecutive operations."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1035
-msgid "Enter a new album name"
+#: ../../Zotlabs/Module/Locs.php:128
+msgid ""
+"When possible, drop a location by logging into that website/hub and removing "
+"your channel."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1036
-msgid "or select an existing one (doubleclick)"
+#: ../../Zotlabs/Module/Locs.php:129
+msgid "Use this form to drop the location if the hub is no longer operating."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1041
-msgid "Add a Tag"
+#: ../../Zotlabs/Module/Sources.php:41
+msgid "Failed to create source. No channel selected."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1049
-msgid "Example: @bob, @Barbara_Jensen, @jim@example.com"
+#: ../../Zotlabs/Module/Sources.php:57
+msgid "Source created."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1052
-msgid "Flag as adult in album view"
+#: ../../Zotlabs/Module/Sources.php:70
+msgid "Source updated."
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1237
-msgid "Photo Tools"
+#: ../../Zotlabs/Module/Sources.php:99
+msgid "*"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1246
-msgid "In This Photo:"
+#: ../../Zotlabs/Module/Sources.php:105 ../../Zotlabs/Lib/Apps.php:373
+msgid "Channel Sources"
msgstr ""
-#: ../../Zotlabs/Module/Photos.php:1251
-msgid "Map"
+#: ../../Zotlabs/Module/Sources.php:106
+msgid "Manage remote sources of content for your channel."
msgstr ""
-#: ../../Zotlabs/Module/Impel.php:188
-#, php-format
-msgid "%s element installed"
+#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117
+msgid "New Source"
msgstr ""
-#: ../../Zotlabs/Module/Impel.php:191
-#, php-format
-msgid "%s element installation failed"
+#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152
+msgid ""
+"Import all or selected content from the following channel into this channel "
+"and distribute it according to your channel settings."
msgstr ""
-#: ../../Zotlabs/Module/Common.php:14
-msgid "No channel."
+#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
+msgid "Only import content with these words (one per line)"
msgstr ""
-#: ../../Zotlabs/Module/Common.php:45
-msgid "No connections in common."
+#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
+msgid "Leave blank to import all public content"
msgstr ""
-#: ../../Zotlabs/Module/Common.php:65
-msgid "View Common Connections"
+#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159
+msgid "Channel Name"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
+msgid ""
+"Add the following categories to posts imported from this source (comma "
+"separated)"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+msgid "Resend posts with this channel as author"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+msgid "Copyrights may apply"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172
+msgid "Source not found."
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:149
+msgid "Edit Source"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:150
+msgid "Delete Source"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:180
+msgid "Source removed"
+msgstr ""
+
+#: ../../Zotlabs/Module/Sources.php:182
+msgid "Unable to remove source."
msgstr ""
#: ../../Zotlabs/Module/Rbmark.php:93
@@ -14584,698 +14603,736 @@ msgstr ""
msgid "Or enter new bookmark folder name"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:34 ../../Zotlabs/Module/Profperm.php:63
-msgid "Invalid profile identifier."
+#: ../../Zotlabs/Lib/AccessList.php:26
+msgid ""
+"A deleted privacy group with this name was revived. Existing item "
+"permissions <strong>may</strong> apply to this privacy group and any future "
+"members. If this is not what you intended, please create another privacy "
+"group with a different name."
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:111
-msgid "Profile Visibility Editor"
+#: ../../Zotlabs/Lib/AccessList.php:268
+msgid "Select a privacy group"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:115
-msgid "Click on a contact to add or remove."
+#: ../../Zotlabs/Lib/Permcat.php:83
+msgctxt "permcat"
+msgid "Default"
msgstr ""
-#: ../../Zotlabs/Module/Profperm.php:124
-msgid "Visible To"
+#: ../../Zotlabs/Lib/Activity.php:2324
+#, php-format
+msgid "Likes %1$s's %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Removeme.php:35
-msgid ""
-"Channel removals are not allowed within 48 hours of changing the account "
-"password."
+#: ../../Zotlabs/Lib/Activity.php:2327
+#, php-format
+msgid "Doesn't like %1$s's %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Removeme.php:61
-msgid "This channel will be permanently removed. "
+#: ../../Zotlabs/Lib/Activity.php:2333
+#, php-format
+msgid "Will attend %s's event"
msgstr ""
-#: ../../Zotlabs/Module/Removeme.php:61
-msgid "This action can not be undone!"
+#: ../../Zotlabs/Lib/Activity.php:2336
+#, php-format
+msgid "Will not attend %s's event"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:36
-msgid "Item sync completed!"
+#: ../../Zotlabs/Lib/Activity.php:2339
+#, php-format
+msgid "May attend %s's event"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:51
-msgid "Item sync completed but no items were found!"
+#: ../../Zotlabs/Lib/Activity.php:2342
+#, php-format
+msgid "May not attend %s's event"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:68
-msgid "File sync completed!"
+#: ../../Zotlabs/Lib/Enotify.php:60
+msgid "$Projectname Notification"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:83
-msgid "File sync completed but no files were found!"
+#: ../../Zotlabs/Lib/Enotify.php:63
+msgid "Thank You,"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:98
-msgid "Channel clone status"
+#: ../../Zotlabs/Lib/Enotify.php:66
+#, php-format
+msgid "This email was sent by %1$s at %2$s."
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:99
-msgid "Item sync status"
+#: ../../Zotlabs/Lib/Enotify.php:67
+#, php-format
+msgid ""
+"To stop receiving these messages, please adjust your Notification Settings "
+"at %s"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:100
-msgid "File sync status"
+#: ../../Zotlabs/Lib/Enotify.php:68
+#, php-format
+msgid "To stop receiving these messages, please adjust your %s."
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:107
-msgid "Channel cloning completed!"
+#: ../../Zotlabs/Lib/Enotify.php:123
+#, php-format
+msgid "%s <!item_type!>"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:108
-msgid "Resume"
+#: ../../Zotlabs/Lib/Enotify.php:131
+#, php-format
+msgid "[$Projectname:Notify] New direct message received at %s"
msgstr ""
-#: ../../Zotlabs/Module/Import_progress.php:109
-msgid "Only resume if sync stalled!"
+#: ../../Zotlabs/Lib/Enotify.php:133
+#, php-format
+msgid "%1$s sent you a new direct message at %2$s"
msgstr ""
-#: ../../Zotlabs/Module/Manage.php:137
-msgid "Create a new channel"
+#: ../../Zotlabs/Lib/Enotify.php:134
+#, php-format
+msgid "%1$s sent you %2$s."
msgstr ""
-#: ../../Zotlabs/Module/Manage.php:163
-msgid "Current Channel"
+#: ../../Zotlabs/Lib/Enotify.php:134
+msgid "a direct message"
msgstr ""
-#: ../../Zotlabs/Module/Manage.php:165
-msgid "Switch to one of your channels by selecting it."
+#: ../../Zotlabs/Lib/Enotify.php:135
+#, php-format
+msgid "Please visit %s to view and/or reply to your direct messages."
msgstr ""
-#: ../../Zotlabs/Module/Manage.php:166
-msgid "Default Channel"
+#: ../../Zotlabs/Lib/Enotify.php:148
+msgid "commented on"
msgstr ""
-#: ../../Zotlabs/Module/Manage.php:167
-msgid "Make Default"
+#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:310
+msgid "liked"
msgstr ""
-#: ../../Zotlabs/Module/Manage.php:170
-#, php-format
-msgid "%d new introductions"
+#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:310
+msgid "disliked"
msgstr ""
-#: ../../Zotlabs/Module/Manage.php:172
-msgid "Delegated Channel"
+#: ../../Zotlabs/Lib/Enotify.php:169
+msgid "voted on"
msgstr ""
-#: ../../Zotlabs/Module/Editwebpage.php:139
-msgid "Page link"
+#: ../../Zotlabs/Lib/Enotify.php:212
+#, php-format
+msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Module/Editwebpage.php:166
-msgid "Edit Webpage"
+#: ../../Zotlabs/Lib/Enotify.php:220
+#, php-format
+msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Widget/Cover_photo.php:74
-msgid "Click to show more"
+#: ../../Zotlabs/Lib/Enotify.php:229 ../../Zotlabs/Lib/Enotify.php:314
+#, php-format
+msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
msgstr ""
-#: ../../Zotlabs/Widget/Appcategories.php:49
-msgid "App Categories"
+#: ../../Zotlabs/Lib/Enotify.php:241
+#, php-format
+msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Bookmarkedchats.php:25
-msgid "Bookmarked Chatrooms"
+#: ../../Zotlabs/Lib/Enotify.php:243
+#, php-format
+msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Suggestions.php:58
-msgid "Suggestions"
+#: ../../Zotlabs/Lib/Enotify.php:244
+#, php-format
+msgid "%1$s commented on an item/conversation you have been following"
msgstr ""
-#: ../../Zotlabs/Widget/Suggestions.php:59
-msgid "See more..."
+#: ../../Zotlabs/Lib/Enotify.php:247 ../../Zotlabs/Lib/Enotify.php:334
+#: ../../Zotlabs/Lib/Enotify.php:350 ../../Zotlabs/Lib/Enotify.php:374
+#: ../../Zotlabs/Lib/Enotify.php:391 ../../Zotlabs/Lib/Enotify.php:404
+#, php-format
+msgid "Please visit %s to view and/or reply to the conversation."
msgstr ""
-#: ../../Zotlabs/Widget/Chatroom_list.php:26
-msgid "Overview"
+#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:252
+#, php-format
+msgid "Please visit %s to approve or reject this comment."
msgstr ""
-#: ../../Zotlabs/Widget/Channel_activities.php:46
-msgid "No recent activities"
+#: ../../Zotlabs/Lib/Enotify.php:330
+#, php-format
+msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Channel_activities.php:214
-msgctxt "noun"
-msgid "new connection"
-msgid_plural "new connections"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Widget/Channel_activities.php:220
-msgctxt "noun"
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] ""
-msgstr[1] ""
-
-#: ../../Zotlabs/Widget/Suggestedchats.php:36
-msgid "Suggested Chatrooms"
+#: ../../Zotlabs/Lib/Enotify.php:331
+#, php-format
+msgid "%1$s liked an item/conversation you created"
msgstr ""
-#: ../../Zotlabs/Widget/Privacygroups.php:45
-msgid "Add new group"
+#: ../../Zotlabs/Lib/Enotify.php:342
+#, php-format
+msgid "[$Projectname:Notify] %s posted to your profile wall"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:84
-msgid "I agree"
+#: ../../Zotlabs/Lib/Enotify.php:344
+#, php-format
+msgid "%1$s posted to your profile wall at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:84
-msgid "I disagree"
+#: ../../Zotlabs/Lib/Enotify.php:346
+#, php-format
+msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:84
-msgid "I abstain"
+#: ../../Zotlabs/Lib/Enotify.php:368
+#, php-format
+msgid "[$Projectname:Notify] %s tagged you"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:125 ../../Zotlabs/Widget/Pinned.php:126
+#: ../../Zotlabs/Lib/Enotify.php:369
#, php-format
-msgid "View %s's profile - %s"
+msgid "%1$s tagged you at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Pinned.php:159
-msgid "Don't show"
+#: ../../Zotlabs/Lib/Enotify.php:370
+#, php-format
+msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:39
-msgid "Read mode"
+#: ../../Zotlabs/Lib/Enotify.php:381
+#, php-format
+msgid "[$Projectname:Notify] %1$s poked you"
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:40
-msgid "Edit mode"
+#: ../../Zotlabs/Lib/Enotify.php:382
+#, php-format
+msgid "%1$s poked you at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:41
-msgid "Editing"
+#: ../../Zotlabs/Lib/Enotify.php:383
+#, php-format
+msgid "%1$s [zrl=%2$s]poked you[/zrl]."
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:42
-msgid "Saving"
+#: ../../Zotlabs/Lib/Enotify.php:398
+#, php-format
+msgid "[$Projectname:Notify] %s tagged your post"
msgstr ""
-#: ../../Zotlabs/Widget/Notes.php:43
-msgid "Saved"
+#: ../../Zotlabs/Lib/Enotify.php:399
+#, php-format
+msgid "%1$s tagged your post at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Follow.php:34
-msgid "Add New Connection"
+#: ../../Zotlabs/Lib/Enotify.php:400
+#, php-format
+msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
msgstr ""
-#: ../../Zotlabs/Widget/Follow.php:35
-msgid "Enter channel address"
+#: ../../Zotlabs/Lib/Enotify.php:411
+msgid "[$Projectname:Notify] Introduction received"
msgstr ""
-#: ../../Zotlabs/Widget/Follow.php:36
-msgid "Examples: bob@example.com, https://example.com/barbara"
+#: ../../Zotlabs/Lib/Enotify.php:412
+#, php-format
+msgid "You've received an new connection request from '%1$s' at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Archive.php:49
-msgid "Archives"
+#: ../../Zotlabs/Lib/Enotify.php:413
+#, php-format
+msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
msgstr ""
-#: ../../Zotlabs/Widget/Permcats.php:43
-msgid "Add new role"
+#: ../../Zotlabs/Lib/Enotify.php:416 ../../Zotlabs/Lib/Enotify.php:434
+#, php-format
+msgid "You may visit their profile at %s"
msgstr ""
-#: ../../Zotlabs/Widget/Permcats.php:93
-msgid "Role members"
+#: ../../Zotlabs/Lib/Enotify.php:418
+#, php-format
+msgid "Please visit %s to approve or reject the connection request."
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:24
-msgid "New network activity notifications"
+#: ../../Zotlabs/Lib/Enotify.php:425
+msgid "[$Projectname:Notify] Friend suggestion received"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:27
-msgid "Network stream"
+#: ../../Zotlabs/Lib/Enotify.php:426
+#, php-format
+msgid "You've received a friend suggestion from '%1$s' at %2$s"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:30
-#: ../../Zotlabs/Widget/Notifications.php:69
-msgid "Mark all notifications read"
+#: ../../Zotlabs/Lib/Enotify.php:427
+#, php-format
+msgid "You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:33
-#: ../../Zotlabs/Widget/Notifications.php:53
-#: ../../Zotlabs/Widget/Notifications.php:72
-#: ../../Zotlabs/Widget/Notifications.php:164
-msgid "Show new posts only"
+#: ../../Zotlabs/Lib/Enotify.php:432
+msgid "Name:"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:34
-#: ../../Zotlabs/Widget/Notifications.php:54
-#: ../../Zotlabs/Widget/Notifications.php:73
-#: ../../Zotlabs/Widget/Notifications.php:134
-#: ../../Zotlabs/Widget/Notifications.php:165
-msgid "Filter by name or address"
+#: ../../Zotlabs/Lib/Enotify.php:433
+msgid "Photo:"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:44
-msgid "New home activity notifications"
+#: ../../Zotlabs/Lib/Enotify.php:436
+#, php-format
+msgid "Please visit %s to approve or reject the suggestion."
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:47
-msgid "Home stream"
+#: ../../Zotlabs/Lib/Enotify.php:661
+msgid "[$Projectname:Notify]"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:50
-#: ../../Zotlabs/Widget/Notifications.php:161
-msgid "Mark all notifications seen"
+#: ../../Zotlabs/Lib/Enotify.php:827
+msgid "created a new poll"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:62
-#: ../../Zotlabs/Widget/Activity_filter.php:44
-msgid "Direct Messages"
+#: ../../Zotlabs/Lib/Enotify.php:827
+msgid "created a new post"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:63
-msgid "New direct messages notifications"
+#: ../../Zotlabs/Lib/Enotify.php:828
+#, php-format
+msgid "voted on %s's poll"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:66
-msgid "Direct messages stream"
+#: ../../Zotlabs/Lib/Enotify.php:828
+#, php-format
+msgid "commented on %s's post"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:81
-#: ../../Zotlabs/Widget/Activity_filter.php:53
-msgid "Events"
+#: ../../Zotlabs/Lib/Enotify.php:832
+#, php-format
+msgid "repeated %s's post"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:82
-msgid "New events notifications"
+#: ../../Zotlabs/Lib/Enotify.php:836
+#, php-format
+msgid "liked %s's post"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:85
-msgid "View events"
+#: ../../Zotlabs/Lib/Enotify.php:840
+#, php-format
+msgid "disliked %s's post"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:88
-msgid "Mark all events seen"
+#: ../../Zotlabs/Lib/Enotify.php:844 ../../Zotlabs/Lib/Enotify.php:947
+msgid "shared a file with you"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:97
-msgid "New connections notifications"
+#: ../../Zotlabs/Lib/Enotify.php:853
+#, php-format
+msgid "edited a post dated %s"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:100
-msgid "View all connections"
+#: ../../Zotlabs/Lib/Enotify.php:856
+#, php-format
+msgid "edited a comment dated %s"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:109
-msgid "New files notifications"
+#: ../../Zotlabs/Lib/Enotify.php:932
+msgid "added your channel"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:116
-#: ../../Zotlabs/Widget/Notifications.php:117
-#: ../../Zotlabs/Widget/Messages.php:35
-msgid "Notices"
+#: ../../Zotlabs/Lib/Enotify.php:962
+msgid "sent you a direct message"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:120
-msgid "View all notices"
+#: ../../Zotlabs/Lib/Enotify.php:969
+msgid "g A l F d"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:123
-msgid "Mark all notices seen"
+#: ../../Zotlabs/Lib/Enotify.php:972
+msgid "[today]"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:144
-msgid "Registrations"
+#: ../../Zotlabs/Lib/Enotify.php:982
+msgid "created an event"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:145
-msgid "New registrations notifications"
+#: ../../Zotlabs/Lib/Enotify.php:997
+msgid "status verified"
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:155
-msgid "New public stream notifications"
+#: ../../Zotlabs/Lib/Connect.php:46 ../../Zotlabs/Lib/Connect.php:146
+msgid "Channel is blocked on this site."
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:158
-msgid "Public stream"
+#: ../../Zotlabs/Lib/Connect.php:51
+msgid "Channel location missing."
msgstr ""
-#: ../../Zotlabs/Widget/Notifications.php:172
-msgid "Sorry, you have got no notifications at the moment"
+#: ../../Zotlabs/Lib/Connect.php:104
+msgid "Remote channel or protocol unavailable."
msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:37
-msgid "Account settings"
+#: ../../Zotlabs/Lib/Connect.php:140
+msgid "Channel discovery failed."
msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:43
-msgid "Channel settings"
+#: ../../Zotlabs/Lib/Connect.php:158
+msgid "Protocol disabled."
msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:49
-msgid "Privacy settings"
+#: ../../Zotlabs/Lib/Connect.php:170
+msgid "Cannot connect to yourself."
msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:56
-msgid "Display settings"
+#: ../../Zotlabs/Lib/Connect.php:275
+msgid "error saving data"
msgstr ""
-#: ../../Zotlabs/Widget/Settings_menu.php:63
-msgid "Manage locations"
+#: ../../Zotlabs/Lib/Chatroom.php:25
+msgid "Missing room name"
msgstr ""
-#: ../../Zotlabs/Widget/Tokens.php:41
-msgid "Add new guest"
+#: ../../Zotlabs/Lib/Chatroom.php:34
+msgid "Duplicate room name"
msgstr ""
-#: ../../Zotlabs/Widget/Rating.php:57
-msgid "Rating Tools"
+#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92
+msgid "Invalid room specifier."
msgstr ""
-#: ../../Zotlabs/Widget/Rating.php:61 ../../Zotlabs/Widget/Rating.php:63
-msgid "Rate Me"
+#: ../../Zotlabs/Lib/Chatroom.php:124
+msgid "Room not found."
msgstr ""
-#: ../../Zotlabs/Widget/Rating.php:66
-msgid "View Ratings"
+#: ../../Zotlabs/Lib/Chatroom.php:145
+msgid "Room is full"
msgstr ""
-#: ../../Zotlabs/Widget/Affinity.php:60
-msgid "Refresh"
+#: ../../Zotlabs/Lib/Apps.php:329
+msgid "Affinity Tool"
msgstr ""
-#: ../../Zotlabs/Widget/Savedsearch.php:81
-msgid "Remove term"
+#: ../../Zotlabs/Lib/Apps.php:332
+msgid "Site Admin"
msgstr ""
-#: ../../Zotlabs/Widget/Photo_rand.php:63 ../../Zotlabs/Widget/Photo.php:54
-msgid "photo/image"
+#: ../../Zotlabs/Lib/Apps.php:336
+msgid "Content Filter"
msgstr ""
-#: ../../Zotlabs/Widget/Hq_controls.php:23
-msgid "Toggle post editor"
+#: ../../Zotlabs/Lib/Apps.php:339
+msgid "Remote Diagnostics"
msgstr ""
-#: ../../Zotlabs/Widget/Hq_controls.php:33
-msgid "Toggle personal notes"
+#: ../../Zotlabs/Lib/Apps.php:340
+msgid "Suggest Channels"
msgstr ""
-#: ../../Zotlabs/Widget/Hq_controls.php:43
-msgid "Channel activities"
+#: ../../Zotlabs/Lib/Apps.php:342
+msgid "Channel Manager"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:48
-msgid "Show direct (private) messages"
+#: ../../Zotlabs/Lib/Apps.php:343
+msgid "Stream"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:57
-msgid "Show posts that include events"
+#: ../../Zotlabs/Lib/Apps.php:354
+msgid "Mail"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:63
-msgid "Polls"
+#: ../../Zotlabs/Lib/Apps.php:357
+msgid "Chat"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:67
-msgid "Show posts that include polls"
+#: ../../Zotlabs/Lib/Apps.php:359
+msgid "Probe"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:90
-#, php-format
-msgid "Show posts related to the %s privacy group"
+#: ../../Zotlabs/Lib/Apps.php:360
+msgid "Suggest"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:99
-msgid "Show my privacy groups"
+#: ../../Zotlabs/Lib/Apps.php:361
+msgid "Random Channel"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:123
-msgid "Show posts to this forum"
+#: ../../Zotlabs/Lib/Apps.php:362
+msgid "Invite"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:134
-msgid "Show forums"
+#: ../../Zotlabs/Lib/Apps.php:365 ../../Zotlabs/Storage/Browser.php:410
+msgid "Post"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:148
-msgid "Starred Posts"
+#: ../../Zotlabs/Lib/Apps.php:370
+msgid "Notifications"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:152
-msgid "Show posts that I have starred"
+#: ../../Zotlabs/Lib/Apps.php:371
+msgid "Order Apps"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:163
-msgid "Personal Posts"
+#: ../../Zotlabs/Lib/Apps.php:372
+msgid "CardDAV"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:167
-msgid "Show posts that mention or involve me"
+#: ../../Zotlabs/Lib/Apps.php:376
+msgid "OAuth Apps Manager"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:190
-#, php-format
-msgid "Show posts that I have filed to %s"
+#: ../../Zotlabs/Lib/Apps.php:377
+msgid "OAuth2 Apps Manager"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:200
-msgid "Show filed post categories"
+#: ../../Zotlabs/Lib/Apps.php:378
+msgid "PDL Editor"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:214
-msgid "Panel search"
+#: ../../Zotlabs/Lib/Apps.php:381
+msgid "My Chatrooms"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:224
-msgid "Filter by name"
+#: ../../Zotlabs/Lib/Apps.php:382
+msgid "Channel Export"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:239
-msgid "Remove active filter"
+#: ../../Zotlabs/Lib/Apps.php:576 ../../Zotlabs/Lib/Apps.php:598
+msgid "Purchase"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_filter.php:255
-msgid "Stream Filters"
+#: ../../Zotlabs/Lib/Apps.php:603
+msgid "Undelete"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:41
-msgid "Select Channel"
+#: ../../Zotlabs/Lib/Apps.php:611
+msgid "Add to app-tray"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:46
-msgid "Read-write"
+#: ../../Zotlabs/Lib/Apps.php:612
+msgid "Remove from app-tray"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:47
-msgid "Read-only"
+#: ../../Zotlabs/Lib/Apps.php:613
+msgid "Pin to navbar"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:133
-msgid "Channel Calendar"
+#: ../../Zotlabs/Lib/Apps.php:614
+msgid "Unpin from navbar"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:137
-msgid "Shared CalDAV Calendars"
+#: ../../Zotlabs/Lib/Techlevels.php:10
+msgid "0. Beginner/Basic"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:141
-msgid "Share this calendar"
+#: ../../Zotlabs/Lib/Techlevels.php:11
+msgid "1. Novice - not skilled but willing to learn"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:143
-msgid "Calendar name and color"
+#: ../../Zotlabs/Lib/Techlevels.php:12
+msgid "2. Intermediate - somewhat comfortable"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:145
-msgid "Create new CalDAV calendar"
+#: ../../Zotlabs/Lib/Techlevels.php:13
+msgid "3. Advanced - very comfortable"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:147
-msgid "Calendar Name"
+#: ../../Zotlabs/Lib/Techlevels.php:14
+msgid "4. Expert - I can write computer code"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:148
-msgid "Calendar Tools"
+#: ../../Zotlabs/Lib/Techlevels.php:15
+msgid "5. Wizard - I probably know more than you do"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:150
-msgid "Import calendar"
+#: ../../Zotlabs/Lib/Libzotdir.php:163
+msgid "Directory Options"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:151
-msgid "Select a calendar to import to"
+#: ../../Zotlabs/Lib/Libzotdir.php:165
+msgid "Safe Mode"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:178
-msgid "Addressbooks"
+#: ../../Zotlabs/Lib/Libzotdir.php:166
+msgid "Public Forums Only"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:180
-msgid "Addressbook name"
+#: ../../Zotlabs/Lib/Libzotdir.php:168
+msgid "This Website Only"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:182
-msgid "Create new addressbook"
+#: ../../Zotlabs/Lib/Libzot.php:695
+msgid "Unable to verify channel signature"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:183
-msgid "Addressbook Name"
+#: ../../Zotlabs/Lib/ThreadItem.php:108
+msgid "Restricted message"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:185
-msgid "Addressbook Tools"
+#: ../../Zotlabs/Lib/ThreadItem.php:115
+msgid "Direct message"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:186
-msgid "Import addressbook"
+#: ../../Zotlabs/Lib/ThreadItem.php:120
+msgid "Public Policy"
msgstr ""
-#: ../../Zotlabs/Widget/Cdav.php:187
-msgid "Select an addressbook to import to"
+#: ../../Zotlabs/Lib/ThreadItem.php:152
+msgid "Privacy conflict. Discretion advised."
msgstr ""
-#: ../../Zotlabs/Widget/Appstore.php:16
-msgid "App Collections"
+#: ../../Zotlabs/Lib/ThreadItem.php:183 ../../Zotlabs/Storage/Browser.php:372
+msgid "Admin Delete"
msgstr ""
-#: ../../Zotlabs/Widget/Appstore.php:18
-msgid "Installed apps"
+#: ../../Zotlabs/Lib/ThreadItem.php:312
+msgid "Reply on this comment"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:36
-msgid "Profile Creation"
+#: ../../Zotlabs/Lib/ThreadItem.php:312
+msgid "reply"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:38
-msgid "Upload profile photo"
+#: ../../Zotlabs/Lib/ThreadItem.php:312
+msgid "Reply to"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:39
-msgid "Upload cover photo"
+#: ../../Zotlabs/Lib/ThreadItem.php:335
+msgid "Delivery Report"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:43
-msgid "Find and Connect with others"
-msgstr ""
+#: ../../Zotlabs/Lib/ThreadItem.php:355
+#, php-format
+msgid "%d Comment"
+msgid_plural "%d Comments"
+msgstr[0] ""
+msgstr[1] ""
-#: ../../Zotlabs/Widget/Newmember.php:45
-msgid "View the directory"
+#: ../../Zotlabs/Lib/ThreadItem.php:356
+#, php-format
+msgid "%d unseen"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:47
-msgid "Manage your connections"
+#: ../../Zotlabs/Lib/ThreadItem.php:406
+msgid "Forum"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:50
-msgid "Communicate"
+#: ../../Zotlabs/Lib/ThreadItem.php:413
+msgid "to"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:52
-msgid "View your channel homepage"
+#: ../../Zotlabs/Lib/ThreadItem.php:415
+msgid "Wall-to-Wall"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:53
-msgid "View your network stream"
+#: ../../Zotlabs/Lib/ThreadItem.php:416
+msgid "via Wall-To-Wall:"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:59
-msgid "Documentation"
+#: ../../Zotlabs/Lib/ThreadItem.php:444
+msgid "Attend"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:62
-msgid "Missing Features?"
+#: ../../Zotlabs/Lib/ThreadItem.php:462
+msgid "Go to previous comment"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:64
-msgid "Pin apps to navigation bar"
+#: ../../Zotlabs/Lib/ThreadItem.php:475
+msgid "Add to Calendar"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:65
-msgid "Install more apps"
+#: ../../Zotlabs/Lib/ThreadItem.php:834
+msgid "Image"
msgstr ""
-#: ../../Zotlabs/Widget/Newmember.php:76
-msgid "View public stream"
+#: ../../Zotlabs/Lib/ThreadItem.php:836
+msgid "Insert Link"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:96
-msgid "Commented Date"
+#: ../../Zotlabs/Lib/ThreadItem.php:837
+msgid "Video"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:100
-msgid "Order by last commented date"
+#: ../../Zotlabs/Lib/ThreadItem.php:846
+msgid "Your full name (required)"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:103
-msgid "Posted Date"
+#: ../../Zotlabs/Lib/ThreadItem.php:847
+msgid "Your email address (required)"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:107
-msgid "Order by last posted date"
+#: ../../Zotlabs/Lib/ThreadItem.php:848
+msgid "Your website URL (optional)"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:110
-msgid "Date Unthreaded"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:67
+msgid "Source code of failed update: "
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:114
-msgid "Order unthreaded by date"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:88
+#, php-format
+msgid "Update Error at %s"
msgstr ""
-#: ../../Zotlabs/Widget/Activity_order.php:129
-msgid "Stream Order"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:94
+#, php-format
+msgid "Update %s failed. See error logs."
msgstr ""
-#: ../../Zotlabs/Widget/Activity.php:55
-msgctxt "widget"
-msgid "Activity"
+#: ../../Zotlabs/Lib/PermissionDescription.php:108
+#: ../../Zotlabs/Access/PermissionRoles.php:384
+msgid "Public"
msgstr ""
-#: ../../Zotlabs/Widget/Tasklist.php:31
-msgid "Tasks"
+#: ../../Zotlabs/Lib/PermissionDescription.php:109
+msgid "Anybody in the $Projectname network"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:66
-msgid "Member registrations waiting for confirmation"
+#: ../../Zotlabs/Lib/PermissionDescription.php:110
+#, php-format
+msgid "Any account on %s"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:34
-msgid "Inspect queue"
+#: ../../Zotlabs/Lib/PermissionDescription.php:111
+msgid "Any of my connections"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:35
-msgid "Queueworker"
+#: ../../Zotlabs/Lib/PermissionDescription.php:112
+msgid "Only connections I specifically allow"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:37
-msgid "DB updates"
+#: ../../Zotlabs/Lib/PermissionDescription.php:113
+msgid "Anybody authenticated (could include visitors from other networks)"
msgstr ""
-#: ../../Zotlabs/Widget/Admin.php:62
-msgid "Addon Features"
+#: ../../Zotlabs/Lib/PermissionDescription.php:114
+msgid "Any connections including those who haven't yet been approved"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:32
-msgid "Public and restricted messages"
+#: ../../Zotlabs/Lib/PermissionDescription.php:150
+msgid ""
+"This is your default setting for the audience of your normal stream, and "
+"posts."
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:33
-msgid "Direct messages"
+#: ../../Zotlabs/Lib/PermissionDescription.php:151
+msgid ""
+"This is your default setting for who can view your default channel profile"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:34
-msgid "Starred messages"
+#: ../../Zotlabs/Lib/PermissionDescription.php:152
+msgid "This is your default setting for who can view your connections"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:37
-msgid "No messages"
+#: ../../Zotlabs/Lib/PermissionDescription.php:153
+msgid ""
+"This is your default setting for who can view your file storage and photos"
msgstr ""
-#: ../../Zotlabs/Widget/Messages.php:38
-msgid "Unseen"
+#: ../../Zotlabs/Lib/PermissionDescription.php:154
+msgid "This is your default setting for the audience of your webpages"
msgstr ""
-#: ../../Zotlabs/Widget/Chatroom_members.php:17
-msgid "Chat Members"
+#: ../../Zotlabs/Lib/Libsync.php:814
+#, php-format
+msgid "Unable to verify site signature for %s"
msgstr ""
#: ../../Zotlabs/Access/PermissionRoles.php:337
@@ -15530,6 +15587,40 @@ msgid ""
"an existing folder."
msgstr ""
-#: ../../util/nconfig.php:34
-msgid "Source channel not found."
+#: ../../boot.php:1724
+msgid "Create an account to access services and applications"
+msgstr ""
+
+#: ../../boot.php:1742
+msgid "Email or nickname"
+msgstr ""
+
+#: ../../boot.php:1752
+msgid "Password"
+msgstr ""
+
+#: ../../boot.php:1753
+msgid "Remember me"
+msgstr ""
+
+#: ../../boot.php:1756
+msgid "Forgot your password?"
+msgstr ""
+
+#: ../../boot.php:2627
+#, php-format
+msgid "[$Projectname] Website SSL error for %s"
+msgstr ""
+
+#: ../../boot.php:2632
+msgid "Website SSL certificate is not valid. Please correct."
+msgstr ""
+
+#: ../../boot.php:2748
+#, php-format
+msgid "[$Projectname] Cron tasks not running on %s"
+msgstr ""
+
+#: ../../boot.php:2753
+msgid "Cron/Scheduled tasks not running."
msgstr ""
diff --git a/vendor/chillerlan/php-qrcode/.github/FUNDING.yml b/vendor/chillerlan/php-qrcode/.github/FUNDING.yml
new file mode 100644
index 000000000..16a077f52
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+ko_fi: codemasher
+custom: "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4"
diff --git a/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml b/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml
new file mode 100644
index 000000000..9b26bb201
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/.github/workflows/tests.yml
@@ -0,0 +1,82 @@
+# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
+# https://github.com/sebastianbergmann/phpunit/blob/master/.github/workflows/ci.yml
+
+on:
+ push:
+ branches:
+ - v4.3.x
+ pull_request:
+ branches:
+ - v4.3.x
+
+name: "Continuous Integration"
+
+jobs:
+
+ static-code-analysis:
+ name: "Static Code Analysis"
+
+ runs-on: ubuntu-latest
+
+ env:
+ PHAN_ALLOW_XDEBUG: 0
+ PHAN_DISABLE_XDEBUG_WARN: 1
+
+ steps:
+ - name: "Checkout"
+ uses: actions/checkout@v3
+
+ - name: "Install PHP"
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: "7.4"
+ coverage: none
+ tools: pecl
+ extensions: ast, gd, imagick, json, mbstring
+
+ - name: "Update dependencies with composer"
+ run: composer update --no-interaction --no-ansi --no-progress --no-suggest
+
+ - name: "Run phan"
+ run: php vendor/bin/phan
+
+ tests:
+ name: "Unit Tests"
+
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ fail-fast: false
+ matrix:
+ os:
+ - ubuntu-latest
+ - windows-latest
+ php-version:
+ - "7.4"
+ - "8.0"
+ - "8.1"
+
+ steps:
+# - name: "Configure git to avoid issues with line endings"
+# if: matrix.os == 'windows-latest'
+# run: git config --global core.autocrlf false
+
+ - name: "Checkout"
+ uses: actions/checkout@v3
+
+ - name: "Install PHP with extensions"
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php-version }}
+ coverage: pcov
+ tools: pecl
+ extensions: gd, imagick, json, mbstring
+
+ - name: "Install dependencies with composer"
+ run: composer update --no-ansi --no-interaction --no-progress --no-suggest
+
+ - name: "Run tests with phpunit"
+ run: php vendor/bin/phpunit --configuration=phpunit.xml
+
+ - name: "Send code coverage report to Codecov.io"
+ uses: codecov/codecov-action@v3
diff --git a/vendor/chillerlan/php-qrcode/.gitignore b/vendor/chillerlan/php-qrcode/.gitignore
new file mode 100644
index 000000000..8f74009cd
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/.gitignore
@@ -0,0 +1,5 @@
+.build/*
+.idea/*
+docs/*
+vendor/*
+composer.lock
diff --git a/vendor/chillerlan/php-qrcode/.phan/config.php b/vendor/chillerlan/php-qrcode/.phan/config.php
new file mode 100644
index 000000000..442d5f7d5
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/.phan/config.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * This configuration will be read and overlaid on top of the
+ * default configuration. Command-line arguments will be applied
+ * after this file is read.
+ */
+return [
+ // Supported values: `'5.6'`, `'7.0'`, `'7.1'`, `'7.2'`, `'7.3'`,
+ // `'7.4'`, `null`.
+ // If this is set to `null`,
+ // then Phan assumes the PHP version which is closest to the minor version
+ // of the php executable used to execute Phan.
+ //
+ // Note that the **only** effect of choosing `'5.6'` is to infer
+ // that functions removed in php 7.0 exist.
+ // (See `backward_compatibility_checks` for additional options)
+ 'target_php_version' => '7.4',
+
+ // A list of directories that should be parsed for class and
+ // method information. After excluding the directories
+ // defined in exclude_analysis_directory_list, the remaining
+ // files will be statically analyzed for errors.
+ //
+ // Thus, both first-party and third-party code being used by
+ // your application should be included in this list.
+ 'directory_list' => [
+ 'examples',
+ 'src',
+ 'tests',
+ 'vendor',
+ '.phan/stubs'
+ ],
+
+ // A regex used to match every file name that you want to
+ // exclude from parsing. Actual value will exclude every
+ // "test", "tests", "Test" and "Tests" folders found in
+ // "vendor/" directory.
+ 'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@',
+
+ // A directory list that defines files that will be excluded
+ // from static analysis, but whose class and method
+ // information should be included.
+ //
+ // Generally, you'll want to include the directories for
+ // third-party code (such as "vendor/") in this list.
+ //
+ // n.b.: If you'd like to parse but not analyze 3rd
+ // party code, directories containing that code
+ // should be added to both the `directory_list`
+ // and `exclude_analysis_directory_list` arrays.
+ 'exclude_analysis_directory_list' => [
+ 'vendor/',
+ '.phan/stubs'
+ ],
+];
diff --git a/vendor/chillerlan/php-qrcode/.phan/stubs/imagick.php b/vendor/chillerlan/php-qrcode/.phan/stubs/imagick.php
new file mode 100644
index 000000000..508d2018f
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/.phan/stubs/imagick.php
@@ -0,0 +1,6744 @@
+<?php
+
+// Start of imagick v.3.4.3
+
+class ImagickException extends Exception {
+}
+
+class ImagickDrawException extends Exception {
+}
+
+class ImagickPixelIteratorException extends Exception {
+}
+
+class ImagickPixelException extends Exception {
+}
+
+/**
+ * @method Imagick clone() (PECL imagick 2.0.0)<br/>Makes an exact copy of the Imagick object
+ * @link https://php.net/manual/en/class.imagick.php
+ */
+class Imagick implements Iterator, Countable {
+ const COLOR_BLACK = 11;
+ const COLOR_BLUE = 12;
+ const COLOR_CYAN = 13;
+ const COLOR_GREEN = 14;
+ const COLOR_RED = 15;
+ const COLOR_YELLOW = 16;
+ const COLOR_MAGENTA = 17;
+ const COLOR_OPACITY = 18;
+ const COLOR_ALPHA = 19;
+ const COLOR_FUZZ = 20;
+ const IMAGICK_EXTNUM = 30403;
+ const IMAGICK_EXTVER = "3.4.3";
+ const QUANTUM_RANGE = 65535;
+ const USE_ZEND_MM = 0;
+ const COMPOSITE_DEFAULT = 40;
+ const COMPOSITE_UNDEFINED = 0;
+ const COMPOSITE_NO = 1;
+ const COMPOSITE_ADD = 2;
+ const COMPOSITE_ATOP = 3;
+ const COMPOSITE_BLEND = 4;
+ const COMPOSITE_BUMPMAP = 5;
+ const COMPOSITE_CLEAR = 7;
+ const COMPOSITE_COLORBURN = 8;
+ const COMPOSITE_COLORDODGE = 9;
+ const COMPOSITE_COLORIZE = 10;
+ const COMPOSITE_COPYBLACK = 11;
+ const COMPOSITE_COPYBLUE = 12;
+ const COMPOSITE_COPY = 13;
+ const COMPOSITE_COPYCYAN = 14;
+ const COMPOSITE_COPYGREEN = 15;
+ const COMPOSITE_COPYMAGENTA = 16;
+ const COMPOSITE_COPYOPACITY = 17;
+ const COMPOSITE_COPYRED = 18;
+ const COMPOSITE_COPYYELLOW = 19;
+ const COMPOSITE_DARKEN = 20;
+ const COMPOSITE_DSTATOP = 21;
+ const COMPOSITE_DST = 22;
+ const COMPOSITE_DSTIN = 23;
+ const COMPOSITE_DSTOUT = 24;
+ const COMPOSITE_DSTOVER = 25;
+ const COMPOSITE_DIFFERENCE = 26;
+ const COMPOSITE_DISPLACE = 27;
+ const COMPOSITE_DISSOLVE = 28;
+ const COMPOSITE_EXCLUSION = 29;
+ const COMPOSITE_HARDLIGHT = 30;
+ const COMPOSITE_HUE = 31;
+ const COMPOSITE_IN = 32;
+ const COMPOSITE_LIGHTEN = 33;
+ const COMPOSITE_LUMINIZE = 35;
+ const COMPOSITE_MINUS = 36;
+ const COMPOSITE_MODULATE = 37;
+ const COMPOSITE_MULTIPLY = 38;
+ const COMPOSITE_OUT = 39;
+ const COMPOSITE_OVER = 40;
+ const COMPOSITE_OVERLAY = 41;
+ const COMPOSITE_PLUS = 42;
+ const COMPOSITE_REPLACE = 43;
+ const COMPOSITE_SATURATE = 44;
+ const COMPOSITE_SCREEN = 45;
+ const COMPOSITE_SOFTLIGHT = 46;
+ const COMPOSITE_SRCATOP = 47;
+ const COMPOSITE_SRC = 48;
+ const COMPOSITE_SRCIN = 49;
+ const COMPOSITE_SRCOUT = 50;
+ const COMPOSITE_SRCOVER = 51;
+ const COMPOSITE_SUBTRACT = 52;
+ const COMPOSITE_THRESHOLD = 53;
+ const COMPOSITE_XOR = 54;
+ const COMPOSITE_CHANGEMASK = 6;
+ const COMPOSITE_LINEARLIGHT = 34;
+ const COMPOSITE_DIVIDE = 55;
+ const COMPOSITE_DISTORT = 56;
+ const COMPOSITE_BLUR = 57;
+ const COMPOSITE_PEGTOPLIGHT = 58;
+ const COMPOSITE_VIVIDLIGHT = 59;
+ const COMPOSITE_PINLIGHT = 60;
+ const COMPOSITE_LINEARDODGE = 61;
+ const COMPOSITE_LINEARBURN = 62;
+ const COMPOSITE_MATHEMATICS = 63;
+ const COMPOSITE_MODULUSADD = 2;
+ const COMPOSITE_MODULUSSUBTRACT = 52;
+ const COMPOSITE_MINUSDST = 36;
+ const COMPOSITE_DIVIDEDST = 55;
+ const COMPOSITE_DIVIDESRC = 64;
+ const COMPOSITE_MINUSSRC = 65;
+ const COMPOSITE_DARKENINTENSITY = 66;
+ const COMPOSITE_LIGHTENINTENSITY = 67;
+ const MONTAGEMODE_FRAME = 1;
+ const MONTAGEMODE_UNFRAME = 2;
+ const MONTAGEMODE_CONCATENATE = 3;
+ const STYLE_NORMAL = 1;
+ const STYLE_ITALIC = 2;
+ const STYLE_OBLIQUE = 3;
+ const STYLE_ANY = 4;
+ const FILTER_UNDEFINED = 0;
+ const FILTER_POINT = 1;
+ const FILTER_BOX = 2;
+ const FILTER_TRIANGLE = 3;
+ const FILTER_HERMITE = 4;
+ const FILTER_HANNING = 5;
+ const FILTER_HAMMING = 6;
+ const FILTER_BLACKMAN = 7;
+ const FILTER_GAUSSIAN = 8;
+ const FILTER_QUADRATIC = 9;
+ const FILTER_CUBIC = 10;
+ const FILTER_CATROM = 11;
+ const FILTER_MITCHELL = 12;
+ const FILTER_LANCZOS = 22;
+ const FILTER_BESSEL = 13;
+ const FILTER_SINC = 14;
+ const FILTER_KAISER = 16;
+ const FILTER_WELSH = 17;
+ const FILTER_PARZEN = 18;
+ const FILTER_LAGRANGE = 21;
+ const FILTER_SENTINEL = 31;
+ const FILTER_BOHMAN = 19;
+ const FILTER_BARTLETT = 20;
+ const FILTER_JINC = 13;
+ const FILTER_SINCFAST = 15;
+ const FILTER_ROBIDOUX = 26;
+ const FILTER_LANCZOSSHARP = 23;
+ const FILTER_LANCZOS2 = 24;
+ const FILTER_LANCZOS2SHARP = 25;
+ const FILTER_ROBIDOUXSHARP = 27;
+ const FILTER_COSINE = 28;
+ const FILTER_SPLINE = 29;
+ const FILTER_LANCZOSRADIUS = 30;
+ const IMGTYPE_UNDEFINED = 0;
+ const IMGTYPE_BILEVEL = 1;
+ const IMGTYPE_GRAYSCALE = 2;
+ const IMGTYPE_GRAYSCALEMATTE = 3;
+ const IMGTYPE_PALETTE = 4;
+ const IMGTYPE_PALETTEMATTE = 5;
+ const IMGTYPE_TRUECOLOR = 6;
+ const IMGTYPE_TRUECOLORMATTE = 7;
+ const IMGTYPE_COLORSEPARATION = 8;
+ const IMGTYPE_COLORSEPARATIONMATTE = 9;
+ const IMGTYPE_OPTIMIZE = 10;
+ const IMGTYPE_PALETTEBILEVELMATTE = 11;
+ const RESOLUTION_UNDEFINED = 0;
+ const RESOLUTION_PIXELSPERINCH = 1;
+ const RESOLUTION_PIXELSPERCENTIMETER = 2;
+ const COMPRESSION_UNDEFINED = 0;
+ const COMPRESSION_NO = 1;
+ const COMPRESSION_BZIP = 2;
+ const COMPRESSION_FAX = 6;
+ const COMPRESSION_GROUP4 = 7;
+ const COMPRESSION_JPEG = 8;
+ const COMPRESSION_JPEG2000 = 9;
+ const COMPRESSION_LOSSLESSJPEG = 10;
+ const COMPRESSION_LZW = 11;
+ const COMPRESSION_RLE = 12;
+ const COMPRESSION_ZIP = 13;
+ const COMPRESSION_DXT1 = 3;
+ const COMPRESSION_DXT3 = 4;
+ const COMPRESSION_DXT5 = 5;
+ const COMPRESSION_ZIPS = 14;
+ const COMPRESSION_PIZ = 15;
+ const COMPRESSION_PXR24 = 16;
+ const COMPRESSION_B44 = 17;
+ const COMPRESSION_B44A = 18;
+ const COMPRESSION_LZMA = 19;
+ const COMPRESSION_JBIG1 = 20;
+ const COMPRESSION_JBIG2 = 21;
+ const PAINT_POINT = 1;
+ const PAINT_REPLACE = 2;
+ const PAINT_FLOODFILL = 3;
+ const PAINT_FILLTOBORDER = 4;
+ const PAINT_RESET = 5;
+ const GRAVITY_NORTHWEST = 1;
+ const GRAVITY_NORTH = 2;
+ const GRAVITY_NORTHEAST = 3;
+ const GRAVITY_WEST = 4;
+ const GRAVITY_CENTER = 5;
+ const GRAVITY_EAST = 6;
+ const GRAVITY_SOUTHWEST = 7;
+ const GRAVITY_SOUTH = 8;
+ const GRAVITY_SOUTHEAST = 9;
+ const GRAVITY_FORGET = 0;
+ const GRAVITY_STATIC = 10;
+ const STRETCH_NORMAL = 1;
+ const STRETCH_ULTRACONDENSED = 2;
+ const STRETCH_EXTRACONDENSED = 3;
+ const STRETCH_CONDENSED = 4;
+ const STRETCH_SEMICONDENSED = 5;
+ const STRETCH_SEMIEXPANDED = 6;
+ const STRETCH_EXPANDED = 7;
+ const STRETCH_EXTRAEXPANDED = 8;
+ const STRETCH_ULTRAEXPANDED = 9;
+ const STRETCH_ANY = 10;
+ const ALIGN_UNDEFINED = 0;
+ const ALIGN_LEFT = 1;
+ const ALIGN_CENTER = 2;
+ const ALIGN_RIGHT = 3;
+ const DECORATION_NO = 1;
+ const DECORATION_UNDERLINE = 2;
+ const DECORATION_OVERLINE = 3;
+ const DECORATION_LINETROUGH = 4;
+ const DECORATION_LINETHROUGH = 4;
+ const NOISE_UNIFORM = 1;
+ const NOISE_GAUSSIAN = 2;
+ const NOISE_MULTIPLICATIVEGAUSSIAN = 3;
+ const NOISE_IMPULSE = 4;
+ const NOISE_LAPLACIAN = 5;
+ const NOISE_POISSON = 6;
+ const NOISE_RANDOM = 7;
+ const CHANNEL_UNDEFINED = 0;
+ const CHANNEL_RED = 1;
+ const CHANNEL_GRAY = 1;
+ const CHANNEL_CYAN = 1;
+ const CHANNEL_GREEN = 2;
+ const CHANNEL_MAGENTA = 2;
+ const CHANNEL_BLUE = 4;
+ const CHANNEL_YELLOW = 4;
+ const CHANNEL_ALPHA = 8;
+ const CHANNEL_OPACITY = 8;
+ const CHANNEL_MATTE = 8;
+ const CHANNEL_BLACK = 32;
+ const CHANNEL_INDEX = 32;
+ const CHANNEL_ALL = 134217727;
+ const CHANNEL_DEFAULT = 134217719;
+ const CHANNEL_RGBA = 15;
+ const CHANNEL_TRUEALPHA = 64;
+ const CHANNEL_RGBS = 128;
+ const CHANNEL_GRAY_CHANNELS = 128;
+ const CHANNEL_SYNC = 256;
+ const CHANNEL_COMPOSITES = 47;
+ const METRIC_UNDEFINED = 0;
+ const METRIC_ABSOLUTEERRORMETRIC = 1;
+ const METRIC_MEANABSOLUTEERROR = 2;
+ const METRIC_MEANERRORPERPIXELMETRIC = 3;
+ const METRIC_MEANSQUAREERROR = 4;
+ const METRIC_PEAKABSOLUTEERROR = 5;
+ const METRIC_PEAKSIGNALTONOISERATIO = 6;
+ const METRIC_ROOTMEANSQUAREDERROR = 7;
+ const METRIC_NORMALIZEDCROSSCORRELATIONERRORMETRIC = 8;
+ const METRIC_FUZZERROR = 9;
+ const PIXEL_CHAR = 1;
+ const PIXEL_DOUBLE = 2;
+ const PIXEL_FLOAT = 3;
+ const PIXEL_INTEGER = 4;
+ const PIXEL_LONG = 5;
+ const PIXEL_QUANTUM = 6;
+ const PIXEL_SHORT = 7;
+ const EVALUATE_UNDEFINED = 0;
+ const EVALUATE_ADD = 1;
+ const EVALUATE_AND = 2;
+ const EVALUATE_DIVIDE = 3;
+ const EVALUATE_LEFTSHIFT = 4;
+ const EVALUATE_MAX = 5;
+ const EVALUATE_MIN = 6;
+ const EVALUATE_MULTIPLY = 7;
+ const EVALUATE_OR = 8;
+ const EVALUATE_RIGHTSHIFT = 9;
+ const EVALUATE_SET = 10;
+ const EVALUATE_SUBTRACT = 11;
+ const EVALUATE_XOR = 12;
+ const EVALUATE_POW = 13;
+ const EVALUATE_LOG = 14;
+ const EVALUATE_THRESHOLD = 15;
+ const EVALUATE_THRESHOLDBLACK = 16;
+ const EVALUATE_THRESHOLDWHITE = 17;
+ const EVALUATE_GAUSSIANNOISE = 18;
+ const EVALUATE_IMPULSENOISE = 19;
+ const EVALUATE_LAPLACIANNOISE = 20;
+ const EVALUATE_MULTIPLICATIVENOISE = 21;
+ const EVALUATE_POISSONNOISE = 22;
+ const EVALUATE_UNIFORMNOISE = 23;
+ const EVALUATE_COSINE = 24;
+ const EVALUATE_SINE = 25;
+ const EVALUATE_ADDMODULUS = 26;
+ const EVALUATE_MEAN = 27;
+ const EVALUATE_ABS = 28;
+ const EVALUATE_EXPONENTIAL = 29;
+ const EVALUATE_MEDIAN = 30;
+ const EVALUATE_SUM = 31;
+ const COLORSPACE_UNDEFINED = 0;
+ const COLORSPACE_RGB = 1;
+ const COLORSPACE_GRAY = 2;
+ const COLORSPACE_TRANSPARENT = 3;
+ const COLORSPACE_OHTA = 4;
+ const COLORSPACE_LAB = 5;
+ const COLORSPACE_XYZ = 6;
+ const COLORSPACE_YCBCR = 7;
+ const COLORSPACE_YCC = 8;
+ const COLORSPACE_YIQ = 9;
+ const COLORSPACE_YPBPR = 10;
+ const COLORSPACE_YUV = 11;
+ const COLORSPACE_CMYK = 12;
+ const COLORSPACE_SRGB = 13;
+ const COLORSPACE_HSB = 14;
+ const COLORSPACE_HSL = 15;
+ const COLORSPACE_HWB = 16;
+ const COLORSPACE_REC601LUMA = 17;
+ const COLORSPACE_REC709LUMA = 19;
+ const COLORSPACE_LOG = 21;
+ const COLORSPACE_CMY = 22;
+ const COLORSPACE_LUV = 23;
+ const COLORSPACE_HCL = 24;
+ const COLORSPACE_LCH = 25;
+ const COLORSPACE_LMS = 26;
+ const COLORSPACE_LCHAB = 27;
+ const COLORSPACE_LCHUV = 28;
+ const COLORSPACE_SCRGB = 29;
+ const COLORSPACE_HSI = 30;
+ const COLORSPACE_HSV = 31;
+ const COLORSPACE_HCLP = 32;
+ const COLORSPACE_YDBDR = 33;
+ const COLORSPACE_REC601YCBCR = 18;
+ const COLORSPACE_REC709YCBCR = 20;
+ const VIRTUALPIXELMETHOD_UNDEFINED = 0;
+ const VIRTUALPIXELMETHOD_BACKGROUND = 1;
+ const VIRTUALPIXELMETHOD_CONSTANT = 2;
+ const VIRTUALPIXELMETHOD_EDGE = 4;
+ const VIRTUALPIXELMETHOD_MIRROR = 5;
+ const VIRTUALPIXELMETHOD_TILE = 7;
+ const VIRTUALPIXELMETHOD_TRANSPARENT = 8;
+ const VIRTUALPIXELMETHOD_MASK = 9;
+ const VIRTUALPIXELMETHOD_BLACK = 10;
+ const VIRTUALPIXELMETHOD_GRAY = 11;
+ const VIRTUALPIXELMETHOD_WHITE = 12;
+ const VIRTUALPIXELMETHOD_HORIZONTALTILE = 13;
+ const VIRTUALPIXELMETHOD_VERTICALTILE = 14;
+ const VIRTUALPIXELMETHOD_HORIZONTALTILEEDGE = 15;
+ const VIRTUALPIXELMETHOD_VERTICALTILEEDGE = 16;
+ const VIRTUALPIXELMETHOD_CHECKERTILE = 17;
+ const PREVIEW_UNDEFINED = 0;
+ const PREVIEW_ROTATE = 1;
+ const PREVIEW_SHEAR = 2;
+ const PREVIEW_ROLL = 3;
+ const PREVIEW_HUE = 4;
+ const PREVIEW_SATURATION = 5;
+ const PREVIEW_BRIGHTNESS = 6;
+ const PREVIEW_GAMMA = 7;
+ const PREVIEW_SPIFF = 8;
+ const PREVIEW_DULL = 9;
+ const PREVIEW_GRAYSCALE = 10;
+ const PREVIEW_QUANTIZE = 11;
+ const PREVIEW_DESPECKLE = 12;
+ const PREVIEW_REDUCENOISE = 13;
+ const PREVIEW_ADDNOISE = 14;
+ const PREVIEW_SHARPEN = 15;
+ const PREVIEW_BLUR = 16;
+ const PREVIEW_THRESHOLD = 17;
+ const PREVIEW_EDGEDETECT = 18;
+ const PREVIEW_SPREAD = 19;
+ const PREVIEW_SOLARIZE = 20;
+ const PREVIEW_SHADE = 21;
+ const PREVIEW_RAISE = 22;
+ const PREVIEW_SEGMENT = 23;
+ const PREVIEW_SWIRL = 24;
+ const PREVIEW_IMPLODE = 25;
+ const PREVIEW_WAVE = 26;
+ const PREVIEW_OILPAINT = 27;
+ const PREVIEW_CHARCOALDRAWING = 28;
+ const PREVIEW_JPEG = 29;
+ const RENDERINGINTENT_UNDEFINED = 0;
+ const RENDERINGINTENT_SATURATION = 1;
+ const RENDERINGINTENT_PERCEPTUAL = 2;
+ const RENDERINGINTENT_ABSOLUTE = 3;
+ const RENDERINGINTENT_RELATIVE = 4;
+ const INTERLACE_UNDEFINED = 0;
+ const INTERLACE_NO = 1;
+ const INTERLACE_LINE = 2;
+ const INTERLACE_PLANE = 3;
+ const INTERLACE_PARTITION = 4;
+ const INTERLACE_GIF = 5;
+ const INTERLACE_JPEG = 6;
+ const INTERLACE_PNG = 7;
+ const FILLRULE_UNDEFINED = 0;
+ const FILLRULE_EVENODD = 1;
+ const FILLRULE_NONZERO = 2;
+ const PATHUNITS_UNDEFINED = 0;
+ const PATHUNITS_USERSPACE = 1;
+ const PATHUNITS_USERSPACEONUSE = 2;
+ const PATHUNITS_OBJECTBOUNDINGBOX = 3;
+ const LINECAP_UNDEFINED = 0;
+ const LINECAP_BUTT = 1;
+ const LINECAP_ROUND = 2;
+ const LINECAP_SQUARE = 3;
+ const LINEJOIN_UNDEFINED = 0;
+ const LINEJOIN_MITER = 1;
+ const LINEJOIN_ROUND = 2;
+ const LINEJOIN_BEVEL = 3;
+ const RESOURCETYPE_UNDEFINED = 0;
+ const RESOURCETYPE_AREA = 1;
+ const RESOURCETYPE_DISK = 2;
+ const RESOURCETYPE_FILE = 3;
+ const RESOURCETYPE_MAP = 4;
+ const RESOURCETYPE_MEMORY = 5;
+ const RESOURCETYPE_TIME = 7;
+ const RESOURCETYPE_THROTTLE = 8;
+ const RESOURCETYPE_THREAD = 6;
+ const DISPOSE_UNRECOGNIZED = 0;
+ const DISPOSE_UNDEFINED = 0;
+ const DISPOSE_NONE = 1;
+ const DISPOSE_BACKGROUND = 2;
+ const DISPOSE_PREVIOUS = 3;
+ const INTERPOLATE_UNDEFINED = 0;
+ const INTERPOLATE_AVERAGE = 1;
+ const INTERPOLATE_BICUBIC = 2;
+ const INTERPOLATE_BILINEAR = 3;
+ const INTERPOLATE_FILTER = 4;
+ const INTERPOLATE_INTEGER = 5;
+ const INTERPOLATE_MESH = 6;
+ const INTERPOLATE_NEARESTNEIGHBOR = 7;
+ const INTERPOLATE_SPLINE = 8;
+ const LAYERMETHOD_UNDEFINED = 0;
+ const LAYERMETHOD_COALESCE = 1;
+ const LAYERMETHOD_COMPAREANY = 2;
+ const LAYERMETHOD_COMPARECLEAR = 3;
+ const LAYERMETHOD_COMPAREOVERLAY = 4;
+ const LAYERMETHOD_DISPOSE = 5;
+ const LAYERMETHOD_OPTIMIZE = 6;
+ const LAYERMETHOD_OPTIMIZEPLUS = 8;
+ const LAYERMETHOD_OPTIMIZETRANS = 9;
+ const LAYERMETHOD_COMPOSITE = 12;
+ const LAYERMETHOD_OPTIMIZEIMAGE = 7;
+ const LAYERMETHOD_REMOVEDUPS = 10;
+ const LAYERMETHOD_REMOVEZERO = 11;
+ const LAYERMETHOD_TRIMBOUNDS = 16;
+ const ORIENTATION_UNDEFINED = 0;
+ const ORIENTATION_TOPLEFT = 1;
+ const ORIENTATION_TOPRIGHT = 2;
+ const ORIENTATION_BOTTOMRIGHT = 3;
+ const ORIENTATION_BOTTOMLEFT = 4;
+ const ORIENTATION_LEFTTOP = 5;
+ const ORIENTATION_RIGHTTOP = 6;
+ const ORIENTATION_RIGHTBOTTOM = 7;
+ const ORIENTATION_LEFTBOTTOM = 8;
+ const DISTORTION_UNDEFINED = 0;
+ const DISTORTION_AFFINE = 1;
+ const DISTORTION_AFFINEPROJECTION = 2;
+ const DISTORTION_ARC = 9;
+ const DISTORTION_BILINEAR = 6;
+ const DISTORTION_PERSPECTIVE = 4;
+ const DISTORTION_PERSPECTIVEPROJECTION = 5;
+ const DISTORTION_SCALEROTATETRANSLATE = 3;
+ const DISTORTION_POLYNOMIAL = 8;
+ const DISTORTION_POLAR = 10;
+ const DISTORTION_DEPOLAR = 11;
+ const DISTORTION_BARREL = 14;
+ const DISTORTION_SHEPARDS = 16;
+ const DISTORTION_SENTINEL = 18;
+ const DISTORTION_BARRELINVERSE = 15;
+ const DISTORTION_BILINEARFORWARD = 6;
+ const DISTORTION_BILINEARREVERSE = 7;
+ const DISTORTION_RESIZE = 17;
+ const DISTORTION_CYLINDER2PLANE = 12;
+ const DISTORTION_PLANE2CYLINDER = 13;
+ const LAYERMETHOD_MERGE = 13;
+ const LAYERMETHOD_FLATTEN = 14;
+ const LAYERMETHOD_MOSAIC = 15;
+ const ALPHACHANNEL_ACTIVATE = 1;
+ const ALPHACHANNEL_RESET = 7;
+ const ALPHACHANNEL_SET = 8;
+ const ALPHACHANNEL_UNDEFINED = 0;
+ const ALPHACHANNEL_COPY = 3;
+ const ALPHACHANNEL_DEACTIVATE = 4;
+ const ALPHACHANNEL_EXTRACT = 5;
+ const ALPHACHANNEL_OPAQUE = 6;
+ const ALPHACHANNEL_SHAPE = 9;
+ const ALPHACHANNEL_TRANSPARENT = 10;
+ const SPARSECOLORMETHOD_UNDEFINED = 0;
+ const SPARSECOLORMETHOD_BARYCENTRIC = 1;
+ const SPARSECOLORMETHOD_BILINEAR = 7;
+ const SPARSECOLORMETHOD_POLYNOMIAL = 8;
+ const SPARSECOLORMETHOD_SPEPARDS = 16;
+ const SPARSECOLORMETHOD_VORONOI = 18;
+ const SPARSECOLORMETHOD_INVERSE = 19;
+ const DITHERMETHOD_UNDEFINED = 0;
+ const DITHERMETHOD_NO = 1;
+ const DITHERMETHOD_RIEMERSMA = 2;
+ const DITHERMETHOD_FLOYDSTEINBERG = 3;
+ const FUNCTION_UNDEFINED = 0;
+ const FUNCTION_POLYNOMIAL = 1;
+ const FUNCTION_SINUSOID = 2;
+ const ALPHACHANNEL_BACKGROUND = 2;
+ const FUNCTION_ARCSIN = 3;
+ const FUNCTION_ARCTAN = 4;
+ const ALPHACHANNEL_FLATTEN = 11;
+ const ALPHACHANNEL_REMOVE = 12;
+ const STATISTIC_GRADIENT = 1;
+ const STATISTIC_MAXIMUM = 2;
+ const STATISTIC_MEAN = 3;
+ const STATISTIC_MEDIAN = 4;
+ const STATISTIC_MINIMUM = 5;
+ const STATISTIC_MODE = 6;
+ const STATISTIC_NONPEAK = 7;
+ const STATISTIC_STANDARD_DEVIATION = 8;
+ const MORPHOLOGY_CONVOLVE = 1;
+ const MORPHOLOGY_CORRELATE = 2;
+ const MORPHOLOGY_ERODE = 3;
+ const MORPHOLOGY_DILATE = 4;
+ const MORPHOLOGY_ERODE_INTENSITY = 5;
+ const MORPHOLOGY_DILATE_INTENSITY = 6;
+ const MORPHOLOGY_DISTANCE = 7;
+ const MORPHOLOGY_OPEN = 8;
+ const MORPHOLOGY_CLOSE = 9;
+ const MORPHOLOGY_OPEN_INTENSITY = 10;
+ const MORPHOLOGY_CLOSE_INTENSITY = 11;
+ const MORPHOLOGY_SMOOTH = 12;
+ const MORPHOLOGY_EDGE_IN = 13;
+ const MORPHOLOGY_EDGE_OUT = 14;
+ const MORPHOLOGY_EDGE = 15;
+ const MORPHOLOGY_TOP_HAT = 16;
+ const MORPHOLOGY_BOTTOM_HAT = 17;
+ const MORPHOLOGY_HIT_AND_MISS = 18;
+ const MORPHOLOGY_THINNING = 19;
+ const MORPHOLOGY_THICKEN = 20;
+ const MORPHOLOGY_VORONOI = 21;
+ const MORPHOLOGY_ITERATIVE = 22;
+ const KERNEL_UNITY = 1;
+ const KERNEL_GAUSSIAN = 2;
+ const KERNEL_DIFFERENCE_OF_GAUSSIANS = 3;
+ const KERNEL_LAPLACIAN_OF_GAUSSIANS = 4;
+ const KERNEL_BLUR = 5;
+ const KERNEL_COMET = 6;
+ const KERNEL_LAPLACIAN = 7;
+ const KERNEL_SOBEL = 8;
+ const KERNEL_FREI_CHEN = 9;
+ const KERNEL_ROBERTS = 10;
+ const KERNEL_PREWITT = 11;
+ const KERNEL_COMPASS = 12;
+ const KERNEL_KIRSCH = 13;
+ const KERNEL_DIAMOND = 14;
+ const KERNEL_SQUARE = 15;
+ const KERNEL_RECTANGLE = 16;
+ const KERNEL_OCTAGON = 17;
+ const KERNEL_DISK = 18;
+ const KERNEL_PLUS = 19;
+ const KERNEL_CROSS = 20;
+ const KERNEL_RING = 21;
+ const KERNEL_PEAKS = 22;
+ const KERNEL_EDGES = 23;
+ const KERNEL_CORNERS = 24;
+ const KERNEL_DIAGONALS = 25;
+ const KERNEL_LINE_ENDS = 26;
+ const KERNEL_LINE_JUNCTIONS = 27;
+ const KERNEL_RIDGES = 28;
+ const KERNEL_CONVEX_HULL = 29;
+ const KERNEL_THIN_SE = 30;
+ const KERNEL_SKELETON = 31;
+ const KERNEL_CHEBYSHEV = 32;
+ const KERNEL_MANHATTAN = 33;
+ const KERNEL_OCTAGONAL = 34;
+ const KERNEL_EUCLIDEAN = 35;
+ const KERNEL_USER_DEFINED = 36;
+ const KERNEL_BINOMIAL = 37;
+ const DIRECTION_LEFT_TO_RIGHT = 2;
+ const DIRECTION_RIGHT_TO_LEFT = 1;
+ const NORMALIZE_KERNEL_NONE = 0;
+ const NORMALIZE_KERNEL_VALUE = 8192;
+ const NORMALIZE_KERNEL_CORRELATE = 65536;
+ const NORMALIZE_KERNEL_PERCENT = 4096;
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Removes repeated portions of images to optimize
+ * @link https://php.net/manual/en/imagick.optimizeimagelayers.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function optimizeImageLayers () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the maximum bounding region between images
+ * @link https://php.net/manual/en/imagick.compareimagelayers.php
+ * @param int $method <p>
+ * One of the layer method constants.
+ * </p>
+ * @return Imagick <b>TRUE</b> on success.
+ */
+ public function compareImageLayers ($method) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Quickly fetch attributes
+ * @link https://php.net/manual/en/imagick.pingimageblob.php
+ * @param string $image <p>
+ * A string containing the image.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function pingImageBlob ($image) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Get basic image attributes in a lightweight manner
+ * @link https://php.net/manual/en/imagick.pingimagefile.php
+ * @param resource $filehandle <p>
+ * An open filehandle to the image.
+ * </p>
+ * @param string $fileName [optional] <p>
+ * Optional filename for this image.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function pingImageFile ($filehandle, $fileName = null) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a vertical mirror image
+ * @link https://php.net/manual/en/imagick.transposeimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function transposeImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a horizontal mirror image
+ * @link https://php.net/manual/en/imagick.transverseimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function transverseImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Remove edges from the image
+ * @link https://php.net/manual/en/imagick.trimimage.php
+ * @param float $fuzz <p>
+ * By default target must match a particular pixel color exactly.
+ * However, in many cases two colors may differ by a small amount.
+ * The fuzz member of image defines how much tolerance is acceptable
+ * to consider two colors as the same. This parameter represents the variation
+ * on the quantum range.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function trimImage ($fuzz) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Applies wave filter to the image
+ * @link https://php.net/manual/en/imagick.waveimage.php
+ * @param float $amplitude <p>
+ * The amplitude of the wave.
+ * </p>
+ * @param float $length <p>
+ * The length of the wave.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function waveImage ($amplitude, $length) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds vignette filter to the image
+ * @link https://php.net/manual/en/imagick.vignetteimage.php
+ * @param float $blackPoint <p>
+ * The black point.
+ * </p>
+ * @param float $whitePoint <p>
+ * The white point
+ * </p>
+ * @param int $x <p>
+ * X offset of the ellipse
+ * </p>
+ * @param int $y <p>
+ * Y offset of the ellipse
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function vignetteImage ($blackPoint, $whitePoint, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Discards all but one of any pixel color
+ * @link https://php.net/manual/en/imagick.uniqueimagecolors.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function uniqueImageColors () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Return if the image has a matte channel
+ * @link https://php.net/manual/en/imagick.getimagematte.php
+ * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
+ */
+ public function getImageMatte () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image matte channel
+ * @link https://php.net/manual/en/imagick.setimagematte.php
+ * @param bool $matte <p>
+ * True activates the matte channel and false disables it.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageMatte ($matte) {}
+
+ /**
+ * Adaptively resize image with data dependent triangulation
+ *
+ * If legacy is true, the calculations are done with the small rounding bug that existed in Imagick before 3.4.0.<br>
+ * If false, the calculations should produce the same results as ImageMagick CLI does.<br>
+ * <br>
+ * <b>Note:</b> The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched.
+ * In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
+ * @link https://php.net/manual/en/imagick.adaptiveresizeimage.php
+ * @param int $columns The number of columns in the scaled image.
+ * @param int $rows The number of rows in the scaled image.
+ * @param bool $bestfit [optional] Whether to fit the image inside a bounding box.<br>
+ * The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched. In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
+ * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
+ * @return bool TRUE on success
+ * @throws ImagickException Throws ImagickException on error
+ * @since 2.0.0
+ */
+ public function adaptiveResizeImage ($columns, $rows, $bestfit = false, $legacy = false) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Simulates a pencil sketch
+ * @link https://php.net/manual/en/imagick.sketchimage.php
+ * @param float $radius <p>
+ * The radius of the Gaussian, in pixels, not counting the center pixel
+ * </p>
+ * @param float $sigma <p>
+ * The standard deviation of the Gaussian, in pixels.
+ * </p>
+ * @param float $angle <p>
+ * Apply the effect along this angle.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function sketchImage ($radius, $sigma, $angle) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a 3D effect
+ * @link https://php.net/manual/en/imagick.shadeimage.php
+ * @param bool $gray <p>
+ * A value other than zero shades the intensity of each pixel.
+ * </p>
+ * @param float $azimuth <p>
+ * Defines the light source direction.
+ * </p>
+ * @param float $elevation <p>
+ * Defines the light source direction.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function shadeImage ($gray, $azimuth, $elevation) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the size offset
+ * @link https://php.net/manual/en/imagick.getsizeoffset.php
+ * @return int the size offset associated with the Imagick object.
+ */
+ public function getSizeOffset () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the size and offset of the Imagick object
+ * @link https://php.net/manual/en/imagick.setsizeoffset.php
+ * @param int $columns <p>
+ * The width in pixels.
+ * </p>
+ * @param int $rows <p>
+ * The height in pixels.
+ * </p>
+ * @param int $offset <p>
+ * The image offset.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setSizeOffset ($columns, $rows, $offset) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds adaptive blur filter to image
+ * @link https://php.net/manual/en/imagick.adaptiveblurimage.php
+ * @param float $radius <p>
+ * The radius of the Gaussian, in pixels, not counting the center pixel.
+ * Provide a value of 0 and the radius will be chosen automagically.
+ * </p>
+ * @param float $sigma <p>
+ * The standard deviation of the Gaussian, in pixels.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function adaptiveBlurImage ($radius, $sigma, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Enhances the contrast of a color image
+ * @link https://php.net/manual/en/imagick.contraststretchimage.php
+ * @param float $black_point <p>
+ * The black point.
+ * </p>
+ * @param float $white_point <p>
+ * The white point.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. <b>Imagick::CHANNEL_ALL</b>. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function contrastStretchImage ($black_point, $white_point, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adaptively sharpen the image
+ * @link https://php.net/manual/en/imagick.adaptivesharpenimage.php
+ * @param float $radius <p>
+ * The radius of the Gaussian, in pixels, not counting the center pixel. Use 0 for auto-select.
+ * </p>
+ * @param float $sigma <p>
+ * The standard deviation of the Gaussian, in pixels.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function adaptiveSharpenImage ($radius, $sigma, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a high-contrast, two-color image
+ * @link https://php.net/manual/en/imagick.randomthresholdimage.php
+ * @param float $low <p>
+ * The low point
+ * </p>
+ * @param float $high <p>
+ * The high point
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function randomThresholdImage ($low, $high, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * @param $xRounding
+ * @param $yRounding
+ * @param $strokeWidth [optional]
+ * @param $displace [optional]
+ * @param $sizeCorrection [optional]
+ */
+ public function roundCornersImage ($xRounding, $yRounding, $strokeWidth, $displace, $sizeCorrection) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Rounds image corners
+ * @link https://php.net/manual/en/imagick.roundcorners.php
+ * @param float $x_rounding <p>
+ * x rounding
+ * </p>
+ * @param float $y_rounding <p>
+ * y rounding
+ * </p>
+ * @param float $stroke_width [optional] <p>
+ * stroke width
+ * </p>
+ * @param float $displace [optional] <p>
+ * image displace
+ * </p>
+ * @param float $size_correction [optional] <p>
+ * size correction
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function roundCorners ($x_rounding, $y_rounding, $stroke_width = 10.0, $displace = 5.0, $size_correction = -6.0) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Set the iterator position
+ * @link https://php.net/manual/en/imagick.setiteratorindex.php
+ * @param int $index <p>
+ * The position to set the iterator to
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setIteratorIndex ($index) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the index of the current active image
+ * @link https://php.net/manual/en/imagick.getiteratorindex.php
+ * @return int an integer containing the index of the image in the stack.
+ */
+ public function getIteratorIndex () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Convenience method for setting crop size and the image geometry
+ * @link https://php.net/manual/en/imagick.transformimage.php
+ * @param string $crop <p>
+ * A crop geometry string. This geometry defines a subregion of the image to crop.
+ * </p>
+ * @param string $geometry <p>
+ * An image geometry string. This geometry defines the final size of the image.
+ * </p>
+ * @return Imagick <b>TRUE</b> on success.
+ */
+ public function transformImage ($crop, $geometry) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image opacity level
+ * @link https://php.net/manual/en/imagick.setimageopacity.php
+ * @param float $opacity <p>
+ * The level of transparency: 1.0 is fully opaque and 0.0 is fully
+ * transparent.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageOpacity ($opacity) {}
+
+ /**
+ * (PECL imagick 2.2.2)<br/>
+ * Performs an ordered dither
+ * @link https://php.net/manual/en/imagick.orderedposterizeimage.php
+ * @param string $threshold_map <p>
+ * A string containing the name of the threshold dither map to use
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function orderedPosterizeImage ($threshold_map, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Simulates a Polaroid picture
+ * @link https://php.net/manual/en/imagick.polaroidimage.php
+ * @param ImagickDraw $properties <p>
+ * The polaroid properties
+ * </p>
+ * @param float $angle <p>
+ * The polaroid angle
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function polaroidImage (ImagickDraw $properties, $angle) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the named image property
+ * @link https://php.net/manual/en/imagick.getimageproperty.php
+ * @param string $name <p>
+ * name of the property (for example Exif:DateTime)
+ * </p>
+ * @return string|false a string containing the image property, false if a
+ * property with the given name does not exist.
+ */
+ public function getImageProperty ($name) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets an image property
+ * @link https://php.net/manual/en/imagick.setimageproperty.php
+ * @param string $name
+ * @param string $value
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageProperty ($name, $value) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image interpolate pixel method
+ * @link https://php.net/manual/en/imagick.setimageinterpolatemethod.php
+ * @param int $method <p>
+ * The method is one of the <b>Imagick::INTERPOLATE_*</b> constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageInterpolateMethod ($method) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the interpolation method
+ * @link https://php.net/manual/en/imagick.getimageinterpolatemethod.php
+ * @return int the interpolate method on success.
+ */
+ public function getImageInterpolateMethod () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Stretches with saturation the image intensity
+ * @link https://php.net/manual/en/imagick.linearstretchimage.php
+ * @param float $blackPoint <p>
+ * The image black point
+ * </p>
+ * @param float $whitePoint <p>
+ * The image white point
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function linearStretchImage ($blackPoint, $whitePoint) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the image length in bytes
+ * @link https://php.net/manual/en/imagick.getimagelength.php
+ * @return int an int containing the current image size.
+ */
+ public function getImageLength () {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Set image size
+ * @link https://php.net/manual/en/imagick.extentimage.php
+ * @param int $width <p>
+ * The new width
+ * </p>
+ * @param int $height <p>
+ * The new height
+ * </p>
+ * @param int $x <p>
+ * X position for the new size
+ * </p>
+ * @param int $y <p>
+ * Y position for the new size
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function extentImage ($width, $height, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image orientation
+ * @link https://php.net/manual/en/imagick.getimageorientation.php
+ * @return int an int on success.
+ */
+ public function getImageOrientation () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image orientation
+ * @link https://php.net/manual/en/imagick.setimageorientation.php
+ * @param int $orientation <p>
+ * One of the orientation constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageOrientation ($orientation) {}
+
+ /**
+ * (PECL imagick 2.1.0)<br/>
+ * Changes the color value of any pixel that matches target
+ * @link https://php.net/manual/en/imagick.paintfloodfillimage.php
+ * @param mixed $fill <p>
+ * ImagickPixel object or a string containing the fill color
+ * </p>
+ * @param float $fuzz <p>
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at
+ * intensities of 100 and 102 respectively are now interpreted as the
+ * same color for the purposes of the floodfill.
+ * </p>
+ * @param mixed $bordercolor <p>
+ * ImagickPixel object or a string containing the border color
+ * </p>
+ * @param int $x <p>
+ * X start position of the floodfill
+ * </p>
+ * @param int $y <p>
+ * Y start position of the floodfill
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function paintFloodfillImage ($fill, $fuzz, $bordercolor, $x, $y, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Replaces colors in the image from a color lookup table. Optional second parameter to replace colors in a specific channel. This method is available if Imagick has been compiled against ImageMagick version 6.3.6 or newer.
+ * @link https://php.net/manual/en/imagick.clutimage.php
+ * @param Imagick $lookup_table <p>
+ * Imagick object containing the color lookup table
+ * </p>
+ * @param int $channel [optional] <p>
+ * The Channeltype
+ * constant. When not supplied, default channels are replaced.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ * @since 2.0.0
+ */
+ public function clutImage (Imagick $lookup_table, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the image properties
+ * @link https://php.net/manual/en/imagick.getimageproperties.php
+ * @param string $pattern [optional] <p>
+ * The pattern for property names.
+ * </p>
+ * @param bool $only_names [optional] <p>
+ * Whether to return only property names. If <b>FALSE</b> then also the values are returned
+ * </p>
+ * @return array an array containing the image properties or property names.
+ */
+ public function getImageProperties ($pattern = "*", $only_names = true) {}
+
+ /**
+ * (PECL imagick 2.2.0)<br/>
+ * Returns the image profiles
+ * @link https://php.net/manual/en/imagick.getimageprofiles.php
+ * @param string $pattern [optional] <p>
+ * The pattern for profile names.
+ * </p>
+ * @param bool $include_values [optional] <p>
+ * Whether to return only profile names. If <b>FALSE</b> then only profile names will be returned.
+ * </p>
+ * @return array an array containing the image profiles or profile names.
+ */
+ public function getImageProfiles ($pattern = "*", $include_values = true) {}
+
+ /**
+ * (PECL imagick 2.0.1)<br/>
+ * Distorts an image using various distortion methods
+ * @link https://php.net/manual/en/imagick.distortimage.php
+ * @param int $method <p>
+ * The method of image distortion. See distortion constants
+ * </p>
+ * @param array $arguments <p>
+ * The arguments for this distortion method
+ * </p>
+ * @param bool $bestfit <p>
+ * Attempt to resize destination to fit distorted source
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function distortImage ($method, array $arguments, $bestfit) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Writes an image to a filehandle
+ * @link https://php.net/manual/en/imagick.writeimagefile.php
+ * @param resource $filehandle <p>
+ * Filehandle where to write the image
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function writeImageFile ($filehandle) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Writes frames to a filehandle
+ * @link https://php.net/manual/en/imagick.writeimagesfile.php
+ * @param resource $filehandle <p>
+ * Filehandle where to write the images
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function writeImagesFile ($filehandle) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Reset image page
+ * @link https://php.net/manual/en/imagick.resetimagepage.php
+ * @param string $page <p>
+ * The page definition. For example 7168x5147+0+0
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function resetImagePage ($page) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Sets image clip mask
+ * @link https://php.net/manual/en/imagick.setimageclipmask.php
+ * @param Imagick $clip_mask <p>
+ * The Imagick object containing the clip mask
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageClipMask (Imagick $clip_mask) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Gets image clip mask
+ * @link https://php.net/manual/en/imagick.getimageclipmask.php
+ * @return Imagick an Imagick object containing the clip mask.
+ */
+ public function getImageClipMask () {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Animates an image or images
+ * @link https://php.net/manual/en/imagick.animateimages.php
+ * @param string $x_server <p>
+ * X server address
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function animateImages ($x_server) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Recolors image
+ * @link https://php.net/manual/en/imagick.recolorimage.php
+ * @param array $matrix <p>
+ * The matrix containing the color values
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function recolorImage (array $matrix) {}
+
+ /**
+ * (PECL imagick 2.1.0)<br/>
+ * Sets font
+ * @link https://php.net/manual/en/imagick.setfont.php
+ * @param string $font <p>
+ * Font name or a filename
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setFont ($font) {}
+
+ /**
+ * (PECL imagick 2.1.0)<br/>
+ * Gets font
+ * @link https://php.net/manual/en/imagick.getfont.php
+ * @return string|false the string containing the font name or <b>FALSE</b> if not font is set.
+ */
+ public function getFont () {}
+
+ /**
+ * (PECL imagick 2.1.0)<br/>
+ * Sets point size
+ * @link https://php.net/manual/en/imagick.setpointsize.php
+ * @param float $point_size <p>
+ * Point size
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setPointSize ($point_size) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Gets point size
+ * @link https://php.net/manual/en/imagick.getpointsize.php
+ * @return float a float containing the point size.
+ */
+ public function getPointSize () {}
+
+ /**
+ * (PECL imagick 2.1.0)<br/>
+ * Merges image layers
+ * @link https://php.net/manual/en/imagick.mergeimagelayers.php
+ * @param int $layer_method <p>
+ * One of the <b>Imagick::LAYERMETHOD_*</b> constants
+ * </p>
+ * @return Imagick Returns an Imagick object containing the merged image.
+ * @throws ImagickException
+ */
+ public function mergeImageLayers ($layer_method) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Sets image alpha channel
+ * @link https://php.net/manual/en/imagick.setimagealphachannel.php
+ * @param int $mode <p>
+ * One of the <b>Imagick::ALPHACHANNEL_*</b> constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageAlphaChannel ($mode) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Changes the color value of any pixel that matches target
+ * @link https://php.net/manual/en/imagick.floodfillpaintimage.php
+ * @param mixed $fill <p>
+ * ImagickPixel object or a string containing the fill color
+ * </p>
+ * @param float $fuzz <p>
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.
+ * </p>
+ * @param mixed $target <p>
+ * ImagickPixel object or a string containing the target color to paint
+ * </p>
+ * @param int $x <p>
+ * X start position of the floodfill
+ * </p>
+ * @param int $y <p>
+ * Y start position of the floodfill
+ * </p>
+ * @param bool $invert <p>
+ * If <b>TRUE</b> paints any pixel that does not match the target color.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function floodFillPaintImage ($fill, $fuzz, $target, $x, $y, $invert, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Changes the color value of any pixel that matches target
+ * @link https://php.net/manual/en/imagick.opaquepaintimage.php
+ * @param mixed $target <p>
+ * ImagickPixel object or a string containing the color to change
+ * </p>
+ * @param mixed $fill <p>
+ * The replacement color
+ * </p>
+ * @param float $fuzz <p>
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.
+ * </p>
+ * @param bool $invert <p>
+ * If <b>TRUE</b> paints any pixel that does not match the target color.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function opaquePaintImage ($target, $fill, $fuzz, $invert, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Paints pixels transparent
+ * @link https://php.net/manual/en/imagick.transparentpaintimage.php
+ * @param mixed $target <p>
+ * The target color to paint
+ * </p>
+ * @param float $alpha <p>
+ * The level of transparency: 1.0 is fully opaque and 0.0 is fully transparent.
+ * </p>
+ * @param float $fuzz <p>
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at intensities of 100 and 102 respectively are now interpreted as the same color.
+ * </p>
+ * @param bool $invert <p>
+ * If <b>TRUE</b> paints any pixel that does not match the target color.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function transparentPaintImage ($target, $alpha, $fuzz, $invert) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Animates an image or images
+ * @link https://php.net/manual/en/imagick.liquidrescaleimage.php
+ * @param int $width <p>
+ * The width of the target size
+ * </p>
+ * @param int $height <p>
+ * The height of the target size
+ * </p>
+ * @param float $delta_x <p>
+ * How much the seam can traverse on x-axis.
+ * Passing 0 causes the seams to be straight.
+ * </p>
+ * @param float $rigidity <p>
+ * Introduces a bias for non-straight seams. This parameter is
+ * typically 0.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function liquidRescaleImage ($width, $height, $delta_x, $rigidity) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Enciphers an image
+ * @link https://php.net/manual/en/imagick.encipherimage.php
+ * @param string $passphrase <p>
+ * The passphrase
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function encipherImage ($passphrase) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Deciphers an image
+ * @link https://php.net/manual/en/imagick.decipherimage.php
+ * @param string $passphrase <p>
+ * The passphrase
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function decipherImage ($passphrase) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Sets the gravity
+ * @link https://php.net/manual/en/imagick.setgravity.php
+ * @param int $gravity <p>
+ * The gravity property. Refer to the list of
+ * gravity constants.
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setGravity ($gravity) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Gets the gravity
+ * @link https://php.net/manual/en/imagick.getgravity.php
+ * @return int the gravity property. Refer to the list of
+ * gravity constants.
+ */
+ public function getGravity () {}
+
+ /**
+ * (PECL imagick 2.2.1)<br/>
+ * Gets channel range
+ * @link https://php.net/manual/en/imagick.getimagechannelrange.php
+ * @param int $channel <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return array an array containing minima and maxima values of the channel(s).
+ */
+ public function getImageChannelRange ($channel) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Gets the image alpha channel
+ * @link https://php.net/manual/en/imagick.getimagealphachannel.php
+ * @return int a constant defining the current alpha channel value. Refer to this
+ * list of alpha channel constants.
+ */
+ public function getImageAlphaChannel () {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Gets channel distortions
+ * @link https://php.net/manual/en/imagick.getimagechanneldistortions.php
+ * @param Imagick $reference <p>
+ * Imagick object containing the reference image
+ * </p>
+ * @param int $metric <p>
+ * Refer to this list of metric type constants.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return float a float describing the channel distortion.
+ */
+ public function getImageChannelDistortions (Imagick $reference, $metric, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Sets the image gravity
+ * @link https://php.net/manual/en/imagick.setimagegravity.php
+ * @param int $gravity <p>
+ * The gravity property. Refer to the list of
+ * gravity constants.
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setImageGravity ($gravity) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Gets the image gravity
+ * @link https://php.net/manual/en/imagick.getimagegravity.php
+ * @return int the images gravity property. Refer to the list of
+ * gravity constants.
+ */
+ public function getImageGravity () {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Imports image pixels
+ * @link https://php.net/manual/en/imagick.importimagepixels.php
+ * @param int $x <p>
+ * The image x position
+ * </p>
+ * @param int $y <p>
+ * The image y position
+ * </p>
+ * @param int $width <p>
+ * The image width
+ * </p>
+ * @param int $height <p>
+ * The image height
+ * </p>
+ * @param string $map <p>
+ * Map of pixel ordering as a string. This can be for example RGB.
+ * The value can be any combination or order of R = red, G = green, B = blue, A = alpha (0 is transparent),
+ * O = opacity (0 is opaque), C = cyan, Y = yellow, M = magenta, K = black, I = intensity (for grayscale), P = pad.
+ * </p>
+ * @param int $storage <p>
+ * The pixel storage method.
+ * Refer to this list of pixel constants.
+ * </p>
+ * @param array $pixels <p>
+ * The array of pixels
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function importImagePixels ($x, $y, $width, $height, $map, $storage, array $pixels) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Removes skew from the image
+ * @link https://php.net/manual/en/imagick.deskewimage.php
+ * @param float $threshold <p>
+ * Deskew threshold
+ * </p>
+ * @return bool
+ */
+ public function deskewImage ($threshold) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Segments an image
+ * @link https://php.net/manual/en/imagick.segmentimage.php
+ * @param int $COLORSPACE <p>
+ * One of the COLORSPACE constants.
+ * </p>
+ * @param float $cluster_threshold <p>
+ * A percentage describing minimum number of pixels
+ * contained in hexedra before it is considered valid.
+ * </p>
+ * @param float $smooth_threshold <p>
+ * Eliminates noise from the histogram.
+ * </p>
+ * @param bool $verbose [optional] <p>
+ * Whether to output detailed information about recognised classes.
+ * </p>
+ * @return bool
+ */
+ public function segmentImage ($COLORSPACE, $cluster_threshold, $smooth_threshold, $verbose = false) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Interpolates colors
+ * @link https://php.net/manual/en/imagick.sparsecolorimage.php
+ * @param int $SPARSE_METHOD <p>
+ * Refer to this list of sparse method constants
+ * </p>
+ * @param array $arguments <p>
+ * An array containing the coordinates.
+ * The array is in format array(1,1, 2,45)
+ * </p>
+ * @param int $channel [optional]
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function sparseColorImage ($SPARSE_METHOD, array $arguments, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Remaps image colors
+ * @link https://php.net/manual/en/imagick.remapimage.php
+ * @param Imagick $replacement <p>
+ * An Imagick object containing the replacement colors
+ * </p>
+ * @param int $DITHER <p>
+ * Refer to this list of dither method constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function remapImage (Imagick $replacement, $DITHER) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Exports raw image pixels
+ * @link https://php.net/manual/en/imagick.exportimagepixels.php
+ * @param int $x <p>
+ * X-coordinate of the exported area
+ * </p>
+ * @param int $y <p>
+ * Y-coordinate of the exported area
+ * </p>
+ * @param int $width <p>
+ * Width of the exported aread
+ * </p>
+ * @param int $height <p>
+ * Height of the exported area
+ * </p>
+ * @param string $map <p>
+ * Ordering of the exported pixels. For example "RGB".
+ * Valid characters for the map are R, G, B, A, O, C, Y, M, K, I and P.
+ * </p>
+ * @param int $STORAGE <p>
+ * Refer to this list of pixel type constants
+ * </p>
+ * @return array an array containing the pixels values.
+ */
+ public function exportImagePixels ($x, $y, $width, $height, $map, $STORAGE) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * The getImageChannelKurtosis purpose
+ * @link https://php.net/manual/en/imagick.getimagechannelkurtosis.php
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return array an array with kurtosis and skewness
+ * members.
+ */
+ public function getImageChannelKurtosis ($channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Applies a function on the image
+ * @link https://php.net/manual/en/imagick.functionimage.php
+ * @param int $function <p>
+ * Refer to this list of function constants
+ * </p>
+ * @param array $arguments <p>
+ * Array of arguments to pass to this function.
+ * </p>
+ * @param int $channel [optional]
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function functionImage ($function, array $arguments, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * @param $COLORSPACE
+ */
+ public function transformImageColorspace ($COLORSPACE) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Replaces colors in the image
+ * @link https://php.net/manual/en/imagick.haldclutimage.php
+ * @param Imagick $clut <p>
+ * Imagick object containing the Hald lookup image.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function haldClutImage (Imagick $clut, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * @param $CHANNEL [optional]
+ */
+ public function autoLevelImage ($CHANNEL) {}
+
+ /**
+ * @param $factor [optional]
+ */
+ public function blueShiftImage ($factor) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Get image artifact
+ * @link https://php.net/manual/en/imagick.getimageartifact.php
+ * @param string $artifact <p>
+ * The name of the artifact
+ * </p>
+ * @return string the artifact value on success.
+ */
+ public function getImageArtifact ($artifact) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Set image artifact
+ * @link https://php.net/manual/en/imagick.setimageartifact.php
+ * @param string $artifact <p>
+ * The name of the artifact
+ * </p>
+ * @param string $value <p>
+ * The value of the artifact
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageArtifact ($artifact, $value) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Delete image artifact
+ * @link https://php.net/manual/en/imagick.deleteimageartifact.php
+ * @param string $artifact <p>
+ * The name of the artifact to delete
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function deleteImageArtifact ($artifact) {}
+
+ /**
+ * (PECL imagick 0.9.10-0.9.9)<br/>
+ * Gets the colorspace
+ * @link https://php.net/manual/en/imagick.getcolorspace.php
+ * @return int an integer which can be compared against COLORSPACE constants.
+ */
+ public function getColorspace () {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Set colorspace
+ * @link https://php.net/manual/en/imagick.setcolorspace.php
+ * @param int $COLORSPACE <p>
+ * One of the COLORSPACE constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setColorspace ($COLORSPACE) {}
+
+ /**
+ * @param $CHANNEL [optional]
+ */
+ public function clampImage ($CHANNEL) {}
+
+ /**
+ * @param $stack
+ * @param $offset
+ */
+ public function smushImages ($stack, $offset) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * The Imagick constructor
+ * @link https://php.net/manual/en/imagick.construct.php
+ * @param mixed $files <p>
+ * The path to an image to load or an array of paths. Paths can include
+ * wildcards for file names, or can be URLs.
+ * </p>
+ * @throws ImagickException Throws ImagickException on error.
+ */
+ public function __construct ($files = null) {}
+
+ /**
+ * @return string
+ */
+ public function __toString () {}
+
+ public function count () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns a MagickPixelIterator
+ * @link https://php.net/manual/en/imagick.getpixeliterator.php
+ * @return ImagickPixelIterator an ImagickPixelIterator on success.
+ */
+ public function getPixelIterator () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Get an ImagickPixelIterator for an image section
+ * @link https://php.net/manual/en/imagick.getpixelregioniterator.php
+ * @param int $x <p>
+ * The x-coordinate of the region.
+ * </p>
+ * @param int $y <p>
+ * The y-coordinate of the region.
+ * </p>
+ * @param int $columns <p>
+ * The width of the region.
+ * </p>
+ * @param int $rows <p>
+ * The height of the region.
+ * </p>
+ * @return ImagickPixelIterator an ImagickPixelIterator for an image section.
+ */
+ public function getPixelRegionIterator ($x, $y, $columns, $rows) {}
+
+ /**
+ * (PECL imagick 0.9.0-0.9.9)<br/>
+ * Reads image from filename
+ * @link https://php.net/manual/en/imagick.readimage.php
+ * @param string $filename
+ * @return bool <b>TRUE</b> on success.
+ * @throws ImagickException Throws ImagickException on error.
+ */
+ public function readImage ($filename) {}
+
+ /**
+ * @param $filenames
+ * @throws ImagickException Throws ImagickException on error.
+ */
+ public function readImages ($filenames) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Reads image from a binary string
+ * @link https://php.net/manual/en/imagick.readimageblob.php
+ * @param string $image
+ * @param string $filename [optional]
+ * @return bool <b>TRUE</b> on success.
+ * @throws ImagickException Throws ImagickException on error.
+ */
+ public function readImageBlob ($image, $filename = null) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the format of a particular image
+ * @link https://php.net/manual/en/imagick.setimageformat.php
+ * @param string $format <p>
+ * String presentation of the image format. Format support
+ * depends on the ImageMagick installation.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageFormat ($format) {}
+
+ /**
+ * Scales the size of an image to the given dimensions. Passing zero as either of the arguments will preserve dimension while scaling.<br>
+ * If legacy is true, the calculations are done with the small rounding bug that existed in Imagick before 3.4.0.<br>
+ * If false, the calculations should produce the same results as ImageMagick CLI does.
+ * @link https://php.net/manual/en/imagick.scaleimage.php
+ * @param int $cols
+ * @param int $rows
+ * @param bool $bestfit [optional] The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched. In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
+ * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
+ * @return bool <b>TRUE</b> on success.
+ * @throws ImagickException Throws ImagickException on error
+ * @since 2.0.0
+ */
+ public function scaleImage ($cols, $rows, $bestfit = false, $legacy = false) {}
+
+ /**
+ * (PECL imagick 0.9.0-0.9.9)<br/>
+ * Writes an image to the specified filename
+ * @link https://php.net/manual/en/imagick.writeimage.php
+ * @param string $filename [optional] <p>
+ * Filename where to write the image. The extension of the filename
+ * defines the type of the file.
+ * Format can be forced regardless of file extension using format: prefix,
+ * for example "jpg:test.png".
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function writeImage ($filename = null) {}
+
+ /**
+ * (PECL imagick 0.9.0-0.9.9)<br/>
+ * Writes an image or image sequence
+ * @link https://php.net/manual/en/imagick.writeimages.php
+ * @param string $filename
+ * @param bool $adjoin
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function writeImages ($filename, $adjoin) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds blur filter to image
+ * @link https://php.net/manual/en/imagick.blurimage.php
+ * @param float $radius <p>
+ * Blur radius
+ * </p>
+ * @param float $sigma <p>
+ * Standard deviation
+ * </p>
+ * @param int $channel [optional] <p>
+ * The Channeltype
+ * constant. When not supplied, all channels are blurred.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function blurImage ($radius, $sigma, $channel = null) {}
+
+ /**
+ * Changes the size of an image to the given dimensions and removes any associated profiles.<br>
+ * If legacy is true, the calculations are done with the small rounding bug that existed in Imagick before 3.4.0.<br>
+ * If false, the calculations should produce the same results as ImageMagick CLI does.<br>
+ * <br>
+ * <b>Note:</b> The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched. In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
+ * @link https://php.net/manual/en/imagick.thumbnailimage.php
+ * @param int $columns <p>
+ * Image width
+ * </p>
+ * @param int $rows <p>
+ * Image height
+ * </p>
+ * @param bool $bestfit [optional] <p>
+ * Whether to force maximum values
+ * </p>
+ * The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched. In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
+ * @param bool $fill [optional]
+ * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
+ * @return bool <b>TRUE</b> on success.
+ * @since 2.0.0
+ */
+ public function thumbnailImage ($columns, $rows, $bestfit = false, $fill = false, $legacy = false) {}
+
+ /**
+ * Creates a cropped thumbnail at the requested size.
+ * If legacy is true, uses the incorrect behaviour that was present until Imagick 3.4.0.
+ * If false it uses the correct behaviour.
+ * @link https://php.net/manual/en/imagick.cropthumbnailimage.php
+ * @param int $width The width of the thumbnail
+ * @param int $height The Height of the thumbnail
+ * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
+ * @return bool TRUE on succes
+ * @throws ImagickException Throws ImagickException on error
+ * @since 2.0.0
+ */
+ public function cropThumbnailImage ($width, $height, $legacy = false) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the filename of a particular image in a sequence
+ * @link https://php.net/manual/en/imagick.getimagefilename.php
+ * @return string a string with the filename of the image.
+ */
+ public function getImageFilename () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the filename of a particular image
+ * @link https://php.net/manual/en/imagick.setimagefilename.php
+ * @param string $filename
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageFilename ($filename) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the format of a particular image in a sequence
+ * @link https://php.net/manual/en/imagick.getimageformat.php
+ * @return string a string containing the image format on success.
+ */
+ public function getImageFormat () {}
+
+ /**
+ * @link https://secure.php.net/manual/en/imagick.getimagemimetype.php
+ * @return string Returns the image mime-type.
+ */
+ public function getImageMimeType () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Removes an image from the image list
+ * @link https://php.net/manual/en/imagick.removeimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function removeImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Destroys the Imagick object
+ * @link https://php.net/manual/en/imagick.destroy.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function destroy () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Clears all resources associated to Imagick object
+ * @link https://php.net/manual/en/imagick.clear.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function clear () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the image length in bytes
+ * @link https://php.net/manual/en/imagick.getimagesize.php
+ * @return int an int containing the current image size.
+ * @deprecated use {@see Imagick::getImageLength()} instead
+ */
+ public function getImageSize () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the image sequence as a blob
+ * @link https://php.net/manual/en/imagick.getimageblob.php
+ * @return string a string containing the image.
+ */
+ public function getImageBlob () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns all image sequences as a blob
+ * @link https://php.net/manual/en/imagick.getimagesblob.php
+ * @return string a string containing the images. On failure, throws ImagickException on failure
+ * @throws ImagickException on failure
+ */
+ public function getImagesBlob () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the Imagick iterator to the first image
+ * @link https://php.net/manual/en/imagick.setfirstiterator.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setFirstIterator () {}
+
+ /**
+ * (PECL imagick 2.0.1)<br/>
+ * Sets the Imagick iterator to the last image
+ * @link https://php.net/manual/en/imagick.setlastiterator.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setLastIterator () {}
+
+ public function resetIterator () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Move to the previous image in the object
+ * @link https://php.net/manual/en/imagick.previousimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function previousImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Moves to the next image
+ * @link https://php.net/manual/en/imagick.nextimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function nextImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Checks if the object has a previous image
+ * @link https://php.net/manual/en/imagick.haspreviousimage.php
+ * @return bool <b>TRUE</b> if the object has more images when traversing the list in the
+ * reverse direction, returns <b>FALSE</b> if there are none.
+ */
+ public function hasPreviousImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Checks if the object has more images
+ * @link https://php.net/manual/en/imagick.hasnextimage.php
+ * @return bool <b>TRUE</b> if the object has more images when traversing the list in the
+ * forward direction, returns <b>FALSE</b> if there are none.
+ */
+ public function hasNextImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Set the iterator position
+ * @link https://php.net/manual/en/imagick.setimageindex.php
+ * @param int $index <p>
+ * The position to set the iterator to
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageIndex ($index) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the index of the current active image
+ * @link https://php.net/manual/en/imagick.getimageindex.php
+ * @return int an integer containing the index of the image in the stack.
+ */
+ public function getImageIndex () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds a comment to your image
+ * @link https://php.net/manual/en/imagick.commentimage.php
+ * @param string $comment <p>
+ * The comment to add
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function commentImage ($comment) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Extracts a region of the image
+ * @link https://php.net/manual/en/imagick.cropimage.php
+ * @param int $width <p>
+ * The width of the crop
+ * </p>
+ * @param int $height <p>
+ * The height of the crop
+ * </p>
+ * @param int $x <p>
+ * The X coordinate of the cropped region's top left corner
+ * </p>
+ * @param int $y <p>
+ * The Y coordinate of the cropped region's top left corner
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function cropImage ($width, $height, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds a label to an image
+ * @link https://php.net/manual/en/imagick.labelimage.php
+ * @param string $label <p>
+ * The label to add
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function labelImage ($label) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the width and height as an associative array
+ * @link https://php.net/manual/en/imagick.getimagegeometry.php
+ * @return array an array with the width/height of the image.
+ */
+ public function getImageGeometry () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Renders the ImagickDraw object on the current image
+ * @link https://php.net/manual/en/imagick.drawimage.php
+ * @param ImagickDraw $draw <p>
+ * The drawing operations to render on the image.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function drawImage (ImagickDraw $draw) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Sets the image compression quality
+ * @link https://php.net/manual/en/imagick.setimagecompressionquality.php
+ * @param int $quality <p>
+ * The image compression quality as an integer
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageCompressionQuality ($quality) {}
+
+ /**
+ * (PECL imagick 2.2.2)<br/>
+ * Gets the current image's compression quality
+ * @link https://php.net/manual/en/imagick.getimagecompressionquality.php
+ * @return int integer describing the images compression quality
+ */
+ public function getImageCompressionQuality () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Annotates an image with text
+ * @link https://php.net/manual/en/imagick.annotateimage.php
+ * @param ImagickDraw $draw_settings <p>
+ * The ImagickDraw object that contains settings for drawing the text
+ * </p>
+ * @param float $x <p>
+ * Horizontal offset in pixels to the left of text
+ * </p>
+ * @param float $y <p>
+ * Vertical offset in pixels to the baseline of text
+ * </p>
+ * @param float $angle <p>
+ * The angle at which to write the text
+ * </p>
+ * @param string $text <p>
+ * The string to draw
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function annotateImage (ImagickDraw $draw_settings, $x, $y, $angle, $text) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Composite one image onto another
+ * @link https://php.net/manual/en/imagick.compositeimage.php
+ * @param Imagick $composite_object <p>
+ * Imagick object which holds the composite image
+ * </p>
+ * @param int $composite Composite operator
+ * @param int $x <p>
+ * The column offset of the composited image
+ * </p>
+ * @param int $y <p>
+ * The row offset of the composited image
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function compositeImage (Imagick $composite_object, $composite, $x, $y, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Control the brightness, saturation, and hue
+ * @link https://php.net/manual/en/imagick.modulateimage.php
+ * @param float $brightness
+ * @param float $saturation
+ * @param float $hue
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function modulateImage ($brightness, $saturation, $hue) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the number of unique colors in the image
+ * @link https://php.net/manual/en/imagick.getimagecolors.php
+ * @return int <b>TRUE</b> on success.
+ */
+ public function getImageColors () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a composite image
+ * @link https://php.net/manual/en/imagick.montageimage.php
+ * @param ImagickDraw $draw <p>
+ * The font name, size, and color are obtained from this object.
+ * </p>
+ * @param string $tile_geometry <p>
+ * The number of tiles per row and page (e.g. 6x4+0+0).
+ * </p>
+ * @param string $thumbnail_geometry <p>
+ * Preferred image size and border size of each thumbnail
+ * (e.g. 120x120+4+3>).
+ * </p>
+ * @param int $mode <p>
+ * Thumbnail framing mode, see Montage Mode constants.
+ * </p>
+ * @param string $frame <p>
+ * Surround the image with an ornamental border (e.g. 15x15+3+3). The
+ * frame color is that of the thumbnail's matte color.
+ * </p>
+ * @return Imagick <b>TRUE</b> on success.
+ */
+ public function montageImage (ImagickDraw $draw, $tile_geometry, $thumbnail_geometry, $mode, $frame) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Identifies an image and fetches attributes
+ * @link https://php.net/manual/en/imagick.identifyimage.php
+ * @param bool $appendRawOutput [optional]
+ * @return array Identifies an image and returns the attributes. Attributes include
+ * the image width, height, size, and others.
+ */
+ public function identifyImage ($appendRawOutput = false) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Changes the value of individual pixels based on a threshold
+ * @link https://php.net/manual/en/imagick.thresholdimage.php
+ * @param float $threshold
+ * @param int $channel [optional]
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function thresholdImage ($threshold, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Selects a threshold for each pixel based on a range of intensity
+ * @link https://php.net/manual/en/imagick.adaptivethresholdimage.php
+ * @param int $width <p>
+ * Width of the local neighborhood.
+ * </p>
+ * @param int $height <p>
+ * Height of the local neighborhood.
+ * </p>
+ * @param int $offset <p>
+ * The mean offset
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function adaptiveThresholdImage ($width, $height, $offset) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Forces all pixels below the threshold into black
+ * @link https://php.net/manual/en/imagick.blackthresholdimage.php
+ * @param mixed $threshold <p>
+ * The threshold below which everything turns black
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function blackThresholdImage ($threshold) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Force all pixels above the threshold into white
+ * @link https://php.net/manual/en/imagick.whitethresholdimage.php
+ * @param mixed $threshold
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function whiteThresholdImage ($threshold) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Append a set of images
+ * @link https://php.net/manual/en/imagick.appendimages.php
+ * @param bool $stack [optional] <p>
+ * Whether to stack the images vertically.
+ * By default (or if <b>FALSE</b> is specified) images are stacked left-to-right.
+ * If <i>stack</i> is <b>TRUE</b>, images are stacked top-to-bottom.
+ * </p>
+ * @return Imagick Imagick instance on success.
+ */
+ public function appendImages ($stack = false) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Simulates a charcoal drawing
+ * @link https://php.net/manual/en/imagick.charcoalimage.php
+ * @param float $radius <p>
+ * The radius of the Gaussian, in pixels, not counting the center pixel
+ * </p>
+ * @param float $sigma <p>
+ * The standard deviation of the Gaussian, in pixels
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function charcoalImage ($radius, $sigma) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Enhances the contrast of a color image
+ * @link https://php.net/manual/en/imagick.normalizeimage.php
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function normalizeImage ($channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Simulates an oil painting
+ * @link https://php.net/manual/en/imagick.oilpaintimage.php
+ * @param float $radius <p>
+ * The radius of the circular neighborhood.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function oilPaintImage ($radius) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Reduces the image to a limited number of color level
+ * @link https://php.net/manual/en/imagick.posterizeimage.php
+ * @param int $levels
+ * @param bool $dither
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function posterizeImage ($levels, $dither) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Radial blurs an image
+ * @link https://php.net/manual/en/imagick.radialblurimage.php
+ * @param float $angle
+ * @param int $channel [optional]
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function radialBlurImage ($angle, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a simulated 3d button-like effect
+ * @link https://php.net/manual/en/imagick.raiseimage.php
+ * @param int $width
+ * @param int $height
+ * @param int $x
+ * @param int $y
+ * @param bool $raise
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function raiseImage ($width, $height, $x, $y, $raise) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Resample image to desired resolution
+ * @link https://php.net/manual/en/imagick.resampleimage.php
+ * @param float $x_resolution
+ * @param float $y_resolution
+ * @param int $filter
+ * @param float $blur
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function resampleImage ($x_resolution, $y_resolution, $filter, $blur) {}
+
+ /**
+ * Scales an image to the desired dimensions with one of these filters:<br>
+ * If legacy is true, the calculations are done with the small rounding bug that existed in Imagick before 3.4.0.<br>
+ * If false, the calculations should produce the same results as ImageMagick CLI does.<br>
+ * <br>
+ * <b>Note:</b> The behavior of the parameter bestfit changed in Imagick 3.0.0. Before this version given dimensions 400x400 an image of dimensions 200x150 would be left untouched.<br>
+ * In Imagick 3.0.0 and later the image would be scaled up to size 400x300 as this is the "best fit" for the given dimensions. If bestfit parameter is used both width and height must be given.
+ * @link https://php.net/manual/en/imagick.resizeimage.php
+ * @param int $columns Width of the image
+ * @param int $rows Height of the image
+ * @param int $filter Refer to the list of filter constants.
+ * @param float $blur The blur factor where > 1 is blurry, < 1 is sharp.
+ * @param bool $bestfit [optional] Added since 2.1.0. Added optional fit parameter. This method now supports proportional scaling. Pass zero as either parameter for proportional scaling
+ * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
+ * @return bool TRUE on success
+ * @since 2.0.0
+ */
+ public function resizeImage ($columns, $rows, $filter, $blur, $bestfit = false, $legacy = false) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Offsets an image
+ * @link https://php.net/manual/en/imagick.rollimage.php
+ * @param int $x <p>
+ * The X offset.
+ * </p>
+ * @param int $y <p>
+ * The Y offset.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function rollImage ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Rotates an image
+ * @link https://php.net/manual/en/imagick.rotateimage.php
+ * @param mixed $background <p>
+ * The background color
+ * </p>
+ * @param float $degrees <p>
+ * The number of degrees to rotate the image
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function rotateImage ($background, $degrees) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Scales an image with pixel sampling
+ * @link https://php.net/manual/en/imagick.sampleimage.php
+ * @param int $columns
+ * @param int $rows
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function sampleImage ($columns, $rows) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Applies a solarizing effect to the image
+ * @link https://php.net/manual/en/imagick.solarizeimage.php
+ * @param int $threshold
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function solarizeImage ($threshold) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Simulates an image shadow
+ * @link https://php.net/manual/en/imagick.shadowimage.php
+ * @param float $opacity
+ * @param float $sigma
+ * @param int $x
+ * @param int $y
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function shadowImage ($opacity, $sigma, $x, $y) {}
+
+ /**
+ * @param $key
+ * @param $value
+ */
+ public function setImageAttribute ($key, $value) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image background color
+ * @link https://php.net/manual/en/imagick.setimagebackgroundcolor.php
+ * @param mixed $background
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageBackgroundColor ($background) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image composite operator
+ * @link https://php.net/manual/en/imagick.setimagecompose.php
+ * @param int $compose
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageCompose ($compose) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image compression
+ * @link https://php.net/manual/en/imagick.setimagecompression.php
+ * @param int $compression <p>
+ * One of the <b>COMPRESSION</b> constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageCompression ($compression) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image delay
+ * @link https://php.net/manual/en/imagick.setimagedelay.php
+ * @param int $delay <p>
+ * The amount of time expressed in 'ticks' that the image should be
+ * displayed for. For animated GIFs there are 100 ticks per second, so a
+ * value of 20 would be 20/100 of a second aka 1/5th of a second.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageDelay ($delay) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image depth
+ * @link https://php.net/manual/en/imagick.setimagedepth.php
+ * @param int $depth
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageDepth ($depth) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image gamma
+ * @link https://php.net/manual/en/imagick.setimagegamma.php
+ * @param float $gamma
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageGamma ($gamma) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image iterations
+ * @link https://php.net/manual/en/imagick.setimageiterations.php
+ * @param int $iterations <p>
+ * The number of iterations the image should loop over. Set to '0' to loop
+ * continuously.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageIterations ($iterations) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image matte color
+ * @link https://php.net/manual/en/imagick.setimagemattecolor.php
+ * @param mixed $matte
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageMatteColor ($matte) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the page geometry of the image
+ * @link https://php.net/manual/en/imagick.setimagepage.php
+ * @param int $width
+ * @param int $height
+ * @param int $x
+ * @param int $y
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImagePage ($width, $height, $x, $y) {}
+
+ /**
+ * @param $filename
+ */
+ public function setImageProgressMonitor ($filename) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image resolution
+ * @link https://php.net/manual/en/imagick.setimageresolution.php
+ * @param float $x_resolution
+ * @param float $y_resolution
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageResolution ($x_resolution, $y_resolution) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image scene
+ * @link https://php.net/manual/en/imagick.setimagescene.php
+ * @param int $scene
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageScene ($scene) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image ticks-per-second
+ * @link https://php.net/manual/en/imagick.setimagetickspersecond.php
+ * @param int $ticks_per_second <p>
+ * The duration for which an image should be displayed expressed in ticks
+ * per second.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageTicksPerSecond ($ticks_per_second) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image type
+ * @link https://php.net/manual/en/imagick.setimagetype.php
+ * @param int $image_type
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageType ($image_type) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image units of resolution
+ * @link https://php.net/manual/en/imagick.setimageunits.php
+ * @param int $units
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageUnits ($units) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sharpens an image
+ * @link https://php.net/manual/en/imagick.sharpenimage.php
+ * @param float $radius
+ * @param float $sigma
+ * @param int $channel [optional]
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function sharpenImage ($radius, $sigma, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Shaves pixels from the image edges
+ * @link https://php.net/manual/en/imagick.shaveimage.php
+ * @param int $columns
+ * @param int $rows
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function shaveImage ($columns, $rows) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creating a parallelogram
+ * @link https://php.net/manual/en/imagick.shearimage.php
+ * @param mixed $background <p>
+ * The background color
+ * </p>
+ * @param float $x_shear <p>
+ * The number of degrees to shear on the x axis
+ * </p>
+ * @param float $y_shear <p>
+ * The number of degrees to shear on the y axis
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function shearImage ($background, $x_shear, $y_shear) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Splices a solid color into the image
+ * @link https://php.net/manual/en/imagick.spliceimage.php
+ * @param int $width
+ * @param int $height
+ * @param int $x
+ * @param int $y
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function spliceImage ($width, $height, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Fetch basic attributes about the image
+ * @link https://php.net/manual/en/imagick.pingimage.php
+ * @param string $filename <p>
+ * The filename to read the information from.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function pingImage ($filename) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Reads image from open filehandle
+ * @link https://php.net/manual/en/imagick.readimagefile.php
+ * @param resource $filehandle
+ * @param string $fileName [optional]
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function readImageFile ($filehandle, $fileName = null) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Displays an image
+ * @link https://php.net/manual/en/imagick.displayimage.php
+ * @param string $servername <p>
+ * The X server name
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function displayImage ($servername) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Displays an image or image sequence
+ * @link https://php.net/manual/en/imagick.displayimages.php
+ * @param string $servername <p>
+ * The X server name
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function displayImages ($servername) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Randomly displaces each pixel in a block
+ * @link https://php.net/manual/en/imagick.spreadimage.php
+ * @param float $radius
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function spreadImage ($radius) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Swirls the pixels about the center of the image
+ * @link https://php.net/manual/en/imagick.swirlimage.php
+ * @param float $degrees
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function swirlImage ($degrees) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Strips an image of all profiles and comments
+ * @link https://php.net/manual/en/imagick.stripimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function stripImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns formats supported by Imagick
+ * @link https://php.net/manual/en/imagick.queryformats.php
+ * @param string $pattern [optional]
+ * @return array an array containing the formats supported by Imagick.
+ */
+ public static function queryFormats ($pattern = "*") {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the configured fonts
+ * @link https://php.net/manual/en/imagick.queryfonts.php
+ * @param string $pattern [optional] <p>
+ * The query pattern
+ * </p>
+ * @return array an array containing the configured fonts.
+ */
+ public static function queryFonts ($pattern = "*") {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns an array representing the font metrics
+ * @link https://php.net/manual/en/imagick.queryfontmetrics.php
+ * @param ImagickDraw $properties <p>
+ * ImagickDraw object containing font properties
+ * </p>
+ * @param string $text <p>
+ * The text
+ * </p>
+ * @param bool $multiline [optional] <p>
+ * Multiline parameter. If left empty it is autodetected
+ * </p>
+ * @return array a multi-dimensional array representing the font metrics.
+ */
+ public function queryFontMetrics (ImagickDraw $properties, $text, $multiline = null) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Hides a digital watermark within the image
+ * @link https://php.net/manual/en/imagick.steganoimage.php
+ * @param Imagick $watermark_wand
+ * @param int $offset
+ * @return Imagick <b>TRUE</b> on success.
+ */
+ public function steganoImage (Imagick $watermark_wand, $offset) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds random noise to the image
+ * @link https://php.net/manual/en/imagick.addnoiseimage.php
+ * @param int $noise_type <p>
+ * The type of the noise. Refer to this list of
+ * noise constants.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function addNoiseImage ($noise_type, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Simulates motion blur
+ * @link https://php.net/manual/en/imagick.motionblurimage.php
+ * @param float $radius <p>
+ * The radius of the Gaussian, in pixels, not counting the center pixel.
+ * </p>
+ * @param float $sigma <p>
+ * The standard deviation of the Gaussian, in pixels.
+ * </p>
+ * @param float $angle <p>
+ * Apply the effect along this angle.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * The channel argument affects only if Imagick is compiled against ImageMagick version
+ * 6.4.4 or greater.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function motionBlurImage ($radius, $sigma, $angle, $channel = Imagick::CHANNEL_DEFAULT) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Forms a mosaic from images
+ * @link https://php.net/manual/en/imagick.mosaicimages.php
+ * @return Imagick <b>TRUE</b> on success.
+ */
+ public function mosaicImages () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Method morphs a set of images
+ * @link https://php.net/manual/en/imagick.morphimages.php
+ * @param int $number_frames <p>
+ * The number of in-between images to generate.
+ * </p>
+ * @return Imagick This method returns a new Imagick object on success.
+ * Throw an <b>ImagickException</b> on error.
+ * @throws ImagickException on error
+ */
+ public function morphImages ($number_frames) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Scales an image proportionally to half its size
+ * @link https://php.net/manual/en/imagick.minifyimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function minifyImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Transforms an image
+ * @link https://php.net/manual/en/imagick.affinetransformimage.php
+ * @param ImagickDraw $matrix <p>
+ * The affine matrix
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function affineTransformImage (ImagickDraw $matrix) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Average a set of images
+ * @link https://php.net/manual/en/imagick.averageimages.php
+ * @return Imagick a new Imagick object on success.
+ */
+ public function averageImages () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Surrounds the image with a border
+ * @link https://php.net/manual/en/imagick.borderimage.php
+ * @param mixed $bordercolor <p>
+ * ImagickPixel object or a string containing the border color
+ * </p>
+ * @param int $width <p>
+ * Border width
+ * </p>
+ * @param int $height <p>
+ * Border height
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function borderImage ($bordercolor, $width, $height) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Removes a region of an image and trims
+ * @link https://php.net/manual/en/imagick.chopimage.php
+ * @param int $width <p>
+ * Width of the chopped area
+ * </p>
+ * @param int $height <p>
+ * Height of the chopped area
+ * </p>
+ * @param int $x <p>
+ * X origo of the chopped area
+ * </p>
+ * @param int $y <p>
+ * Y origo of the chopped area
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function chopImage ($width, $height, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Clips along the first path from the 8BIM profile
+ * @link https://php.net/manual/en/imagick.clipimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function clipImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Clips along the named paths from the 8BIM profile
+ * @link https://php.net/manual/en/imagick.clippathimage.php
+ * @param string $pathname <p>
+ * The name of the path
+ * </p>
+ * @param bool $inside <p>
+ * If <b>TRUE</b> later operations take effect inside clipping path.
+ * Otherwise later operations take effect outside clipping path.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function clipPathImage ($pathname, $inside) {}
+
+ /**
+ * @param $pathname
+ * @param $inside
+ */
+ public function clipImagePath ($pathname, $inside) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Composites a set of images
+ * @link https://php.net/manual/en/imagick.coalesceimages.php
+ * @return Imagick a new Imagick object on success.
+ */
+ public function coalesceImages () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Changes the color value of any pixel that matches target
+ * @link https://php.net/manual/en/imagick.colorfloodfillimage.php
+ * @param mixed $fill <p>
+ * ImagickPixel object containing the fill color
+ * </p>
+ * @param float $fuzz <p>
+ * The amount of fuzz. For example, set fuzz to 10 and the color red at
+ * intensities of 100 and 102 respectively are now interpreted as the
+ * same color for the purposes of the floodfill.
+ * </p>
+ * @param mixed $bordercolor <p>
+ * ImagickPixel object containing the border color
+ * </p>
+ * @param int $x <p>
+ * X start position of the floodfill
+ * </p>
+ * @param int $y <p>
+ * Y start position of the floodfill
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function colorFloodfillImage ($fill, $fuzz, $bordercolor, $x, $y) {}
+
+ /**
+ * Blends the fill color with each pixel in the image. The 'opacity' color is a per channel strength factor for how strongly the color should be applied.<br>
+ * If legacy is true, the behaviour of this function is incorrect, but consistent with how it behaved before Imagick version 3.4.0
+ * @link https://php.net/manual/en/imagick.colorizeimage.php
+ * @param mixed $colorize <p>
+ * ImagickPixel object or a string containing the colorize color
+ * </p>
+ * @param mixed $opacity <p>
+ * ImagickPixel object or an float containing the opacity value.
+ * 1.0 is fully opaque and 0.0 is fully transparent.
+ * </p>
+ * @param bool $legacy [optional] Added since 3.4.0. Default value FALSE
+ * @return bool <b>TRUE</b> on success.
+ * @throws ImagickException Throws ImagickException on error
+ * @since 2.0.0
+ */
+ public function colorizeImage ($colorize, $opacity, $legacy = false) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the difference in one or more images
+ * @link https://php.net/manual/en/imagick.compareimagechannels.php
+ * @param Imagick $image <p>
+ * Imagick object containing the image to compare.
+ * </p>
+ * @param int $channelType <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @param int $metricType <p>
+ * One of the metric type constants.
+ * </p>
+ * @return array Array consisting of new_wand and
+ * distortion.
+ */
+ public function compareImageChannels (Imagick $image, $channelType, $metricType) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Compares an image to a reconstructed image
+ * @link https://php.net/manual/en/imagick.compareimages.php
+ * @param Imagick $compare <p>
+ * An image to compare to.
+ * </p>
+ * @param int $metric <p>
+ * Provide a valid metric type constant. Refer to this
+ * list of metric constants.
+ * </p>
+ * @return array Array consisting of an Imagick object of the
+ * reconstructed image and a float representing the difference.
+ * @throws ImagickException Throws ImagickException on error.
+ */
+ public function compareImages (Imagick $compare, $metric) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Change the contrast of the image
+ * @link https://php.net/manual/en/imagick.contrastimage.php
+ * @param bool $sharpen <p>
+ * The sharpen value
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function contrastImage ($sharpen) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Combines one or more images into a single image
+ * @link https://php.net/manual/en/imagick.combineimages.php
+ * @param int $channelType <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return Imagick <b>TRUE</b> on success.
+ */
+ public function combineImages ($channelType) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Applies a custom convolution kernel to the image
+ * @link https://php.net/manual/en/imagick.convolveimage.php
+ * @param array $kernel <p>
+ * The convolution kernel
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function convolveImage (array $kernel, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Displaces an image's colormap
+ * @link https://php.net/manual/en/imagick.cyclecolormapimage.php
+ * @param int $displace <p>
+ * The amount to displace the colormap.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function cycleColormapImage ($displace) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns certain pixel differences between images
+ * @link https://php.net/manual/en/imagick.deconstructimages.php
+ * @return Imagick a new Imagick object on success.
+ */
+ public function deconstructImages () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Reduces the speckle noise in an image
+ * @link https://php.net/manual/en/imagick.despeckleimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function despeckleImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Enhance edges within the image
+ * @link https://php.net/manual/en/imagick.edgeimage.php
+ * @param float $radius <p>
+ * The radius of the operation.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function edgeImage ($radius) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns a grayscale image with a three-dimensional effect
+ * @link https://php.net/manual/en/imagick.embossimage.php
+ * @param float $radius <p>
+ * The radius of the effect
+ * </p>
+ * @param float $sigma <p>
+ * The sigma of the effect
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function embossImage ($radius, $sigma) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Improves the quality of a noisy image
+ * @link https://php.net/manual/en/imagick.enhanceimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function enhanceImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Equalizes the image histogram
+ * @link https://php.net/manual/en/imagick.equalizeimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function equalizeImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Applies an expression to an image
+ * @link https://php.net/manual/en/imagick.evaluateimage.php
+ * @param int $op <p>
+ * The evaluation operator
+ * </p>
+ * @param float $constant <p>
+ * The value of the operator
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function evaluateImage ($op, $constant, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * Merges a sequence of images. This is useful for combining Photoshop layers into a single image.
+ * This is replaced by:
+ * <pre>
+ * $im = $im->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN)
+ * </pre>
+ * @link https://php.net/manual/en/imagick.flattenimages.php
+ * @return Imagick Returns an Imagick object containing the merged image.
+ * @throws ImagickException Throws ImagickException on error.
+ * @since 2.0.0
+ */
+ public function flattenImages () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a vertical mirror image
+ * @link https://php.net/manual/en/imagick.flipimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function flipImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a horizontal mirror image
+ * @link https://php.net/manual/en/imagick.flopimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function flopImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds a simulated three-dimensional border
+ * @link https://php.net/manual/en/imagick.frameimage.php
+ * @param mixed $matte_color <p>
+ * ImagickPixel object or a string representing the matte color
+ * </p>
+ * @param int $width <p>
+ * The width of the border
+ * </p>
+ * @param int $height <p>
+ * The height of the border
+ * </p>
+ * @param int $inner_bevel <p>
+ * The inner bevel width
+ * </p>
+ * @param int $outer_bevel <p>
+ * The outer bevel width
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function frameImage ($matte_color, $width, $height, $inner_bevel, $outer_bevel) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Evaluate expression for each pixel in the image
+ * @link https://php.net/manual/en/imagick.fximage.php
+ * @param string $expression <p>
+ * The expression.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return Imagick <b>TRUE</b> on success.
+ */
+ public function fxImage ($expression, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gamma-corrects an image
+ * @link https://php.net/manual/en/imagick.gammaimage.php
+ * @param float $gamma <p>
+ * The amount of gamma-correction.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function gammaImage ($gamma, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Blurs an image
+ * @link https://php.net/manual/en/imagick.gaussianblurimage.php
+ * @param float $radius <p>
+ * The radius of the Gaussian, in pixels, not counting the center pixel.
+ * </p>
+ * @param float $sigma <p>
+ * The standard deviation of the Gaussian, in pixels.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function gaussianBlurImage ($radius, $sigma, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * @param $key
+ */
+ public function getImageAttribute ($key) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the image background color
+ * @link https://php.net/manual/en/imagick.getimagebackgroundcolor.php
+ * @return ImagickPixel an ImagickPixel set to the background color of the image.
+ */
+ public function getImageBackgroundColor () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the chromaticy blue primary point
+ * @link https://php.net/manual/en/imagick.getimageblueprimary.php
+ * @return array Array consisting of "x" and "y" coordinates of point.
+ */
+ public function getImageBluePrimary () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the image border color
+ * @link https://php.net/manual/en/imagick.getimagebordercolor.php
+ * @return ImagickPixel <b>TRUE</b> on success.
+ */
+ public function getImageBorderColor () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the depth for a particular image channel
+ * @link https://php.net/manual/en/imagick.getimagechanneldepth.php
+ * @param int $channel <p>
+ * Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to <b>Imagick::CHANNEL_DEFAULT</b>. Refer to this list of channel constants
+ * </p>
+ * @return int <b>TRUE</b> on success.
+ */
+ public function getImageChannelDepth ($channel) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Compares image channels of an image to a reconstructed image
+ * @link https://php.net/manual/en/imagick.getimagechanneldistortion.php
+ * @param Imagick $reference <p>
+ * Imagick object to compare to.
+ * </p>
+ * @param int $channel <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @param int $metric <p>
+ * One of the metric type constants.
+ * </p>
+ * @return float <b>TRUE</b> on success.
+ */
+ public function getImageChannelDistortion (Imagick $reference, $channel, $metric) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the extrema for one or more image channels
+ * @link https://php.net/manual/en/imagick.getimagechannelextrema.php
+ * @param int $channel <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return array <b>TRUE</b> on success.
+ */
+ public function getImageChannelExtrema ($channel) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the mean and standard deviation
+ * @link https://php.net/manual/en/imagick.getimagechannelmean.php
+ * @param int $channel <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return array <b>TRUE</b> on success.
+ */
+ public function getImageChannelMean ($channel) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns statistics for each channel in the image
+ * @link https://php.net/manual/en/imagick.getimagechannelstatistics.php
+ * @return array <b>TRUE</b> on success.
+ */
+ public function getImageChannelStatistics () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the color of the specified colormap index
+ * @link https://php.net/manual/en/imagick.getimagecolormapcolor.php
+ * @param int $index <p>
+ * The offset into the image colormap.
+ * </p>
+ * @return ImagickPixel <b>TRUE</b> on success.
+ */
+ public function getImageColormapColor ($index) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image colorspace
+ * @link https://php.net/manual/en/imagick.getimagecolorspace.php
+ * @return int <b>TRUE</b> on success.
+ */
+ public function getImageColorspace () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the composite operator associated with the image
+ * @link https://php.net/manual/en/imagick.getimagecompose.php
+ * @return int <b>TRUE</b> on success.
+ */
+ public function getImageCompose () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image delay
+ * @link https://php.net/manual/en/imagick.getimagedelay.php
+ * @return int the image delay.
+ */
+ public function getImageDelay () {}
+
+ /**
+ * (PECL imagick 0.9.1-0.9.9)<br/>
+ * Gets the image depth
+ * @link https://php.net/manual/en/imagick.getimagedepth.php
+ * @return int The image depth.
+ */
+ public function getImageDepth () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Compares an image to a reconstructed image
+ * @link https://php.net/manual/en/imagick.getimagedistortion.php
+ * @param Imagick $reference <p>
+ * Imagick object to compare to.
+ * </p>
+ * @param int $metric <p>
+ * One of the metric type constants.
+ * </p>
+ * @return float the distortion metric used on the image (or the best guess
+ * thereof).
+ */
+ public function getImageDistortion (Imagick $reference, $metric) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the extrema for the image
+ * @link https://php.net/manual/en/imagick.getimageextrema.php
+ * @return array an associative array with the keys "min" and "max".
+ */
+ public function getImageExtrema () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image disposal method
+ * @link https://php.net/manual/en/imagick.getimagedispose.php
+ * @return int the dispose method on success.
+ */
+ public function getImageDispose () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image gamma
+ * @link https://php.net/manual/en/imagick.getimagegamma.php
+ * @return float the image gamma on success.
+ */
+ public function getImageGamma () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the chromaticy green primary point
+ * @link https://php.net/manual/en/imagick.getimagegreenprimary.php
+ * @return array an array with the keys "x" and "y" on success, throws an ImagickException on failure.
+ * @throws ImagickException on failure
+ */
+ public function getImageGreenPrimary () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the image height
+ * @link https://php.net/manual/en/imagick.getimageheight.php
+ * @return int the image height in pixels.
+ */
+ public function getImageHeight () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image histogram
+ * @link https://php.net/manual/en/imagick.getimagehistogram.php
+ * @return array the image histogram as an array of ImagickPixel objects.
+ */
+ public function getImageHistogram () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image interlace scheme
+ * @link https://php.net/manual/en/imagick.getimageinterlacescheme.php
+ * @return int the interlace scheme as an integer on success.
+ * Trhow an <b>ImagickException</b> on error.
+ * @throws ImagickException on error
+ */
+ public function getImageInterlaceScheme () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image iterations
+ * @link https://php.net/manual/en/imagick.getimageiterations.php
+ * @return int the image iterations as an integer.
+ */
+ public function getImageIterations () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the image matte color
+ * @link https://php.net/manual/en/imagick.getimagemattecolor.php
+ * @return ImagickPixel ImagickPixel object on success.
+ */
+ public function getImageMatteColor () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the page geometry
+ * @link https://php.net/manual/en/imagick.getimagepage.php
+ * @return array the page geometry associated with the image in an array with the
+ * keys "width", "height", "x", and "y".
+ */
+ public function getImagePage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the color of the specified pixel
+ * @link https://php.net/manual/en/imagick.getimagepixelcolor.php
+ * @param int $x <p>
+ * The x-coordinate of the pixel
+ * </p>
+ * @param int $y <p>
+ * The y-coordinate of the pixel
+ * </p>
+ * @return ImagickPixel an ImagickPixel instance for the color at the coordinates given.
+ */
+ public function getImagePixelColor ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the named image profile
+ * @link https://php.net/manual/en/imagick.getimageprofile.php
+ * @param string $name <p>
+ * The name of the profile to return.
+ * </p>
+ * @return string a string containing the image profile.
+ */
+ public function getImageProfile ($name) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the chromaticity red primary point
+ * @link https://php.net/manual/en/imagick.getimageredprimary.php
+ * @return array the chromaticity red primary point as an array with the keys "x"
+ * and "y".
+ * Throw an <b>ImagickException</b> on error.
+ * @throws ImagickException on error
+ */
+ public function getImageRedPrimary () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image rendering intent
+ * @link https://php.net/manual/en/imagick.getimagerenderingintent.php
+ * @return int the image rendering intent.
+ */
+ public function getImageRenderingIntent () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image X and Y resolution
+ * @link https://php.net/manual/en/imagick.getimageresolution.php
+ * @return array the resolution as an array.
+ */
+ public function getImageResolution () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image scene
+ * @link https://php.net/manual/en/imagick.getimagescene.php
+ * @return int the image scene.
+ */
+ public function getImageScene () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Generates an SHA-256 message digest
+ * @link https://php.net/manual/en/imagick.getimagesignature.php
+ * @return string a string containing the SHA-256 hash of the file.
+ */
+ public function getImageSignature () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image ticks-per-second
+ * @link https://php.net/manual/en/imagick.getimagetickspersecond.php
+ * @return int the image ticks-per-second.
+ */
+ public function getImageTicksPerSecond () {}
+
+ /**
+ * (PECL imagick 0.9.10-0.9.9)<br/>
+ * Gets the potential image type
+ * @link https://php.net/manual/en/imagick.getimagetype.php
+ * @return int the potential image type.
+ * <b>imagick::IMGTYPE_UNDEFINED</b>
+ * <b>imagick::IMGTYPE_BILEVEL</b>
+ * <b>imagick::IMGTYPE_GRAYSCALE</b>
+ * <b>imagick::IMGTYPE_GRAYSCALEMATTE</b>
+ * <b>imagick::IMGTYPE_PALETTE</b>
+ * <b>imagick::IMGTYPE_PALETTEMATTE</b>
+ * <b>imagick::IMGTYPE_TRUECOLOR</b>
+ * <b>imagick::IMGTYPE_TRUECOLORMATTE</b>
+ * <b>imagick::IMGTYPE_COLORSEPARATION</b>
+ * <b>imagick::IMGTYPE_COLORSEPARATIONMATTE</b>
+ * <b>imagick::IMGTYPE_OPTIMIZE</b>
+ */
+ public function getImageType () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image units of resolution
+ * @link https://php.net/manual/en/imagick.getimageunits.php
+ * @return int the image units of resolution.
+ */
+ public function getImageUnits () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the virtual pixel method
+ * @link https://php.net/manual/en/imagick.getimagevirtualpixelmethod.php
+ * @return int the virtual pixel method on success.
+ */
+ public function getImageVirtualPixelMethod () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the chromaticity white point
+ * @link https://php.net/manual/en/imagick.getimagewhitepoint.php
+ * @return array the chromaticity white point as an associative array with the keys
+ * "x" and "y".
+ */
+ public function getImageWhitePoint () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the image width
+ * @link https://php.net/manual/en/imagick.getimagewidth.php
+ * @return int the image width.
+ */
+ public function getImageWidth () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the number of images in the object
+ * @link https://php.net/manual/en/imagick.getnumberimages.php
+ * @return int the number of images associated with Imagick object.
+ */
+ public function getNumberImages () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the image total ink density
+ * @link https://php.net/manual/en/imagick.getimagetotalinkdensity.php
+ * @return float the image total ink density of the image.
+ * Throw an <b>ImagickException</b> on error.
+ * @throws ImagickException on error
+ */
+ public function getImageTotalInkDensity () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Extracts a region of the image
+ * @link https://php.net/manual/en/imagick.getimageregion.php
+ * @param int $width <p>
+ * The width of the extracted region.
+ * </p>
+ * @param int $height <p>
+ * The height of the extracted region.
+ * </p>
+ * @param int $x <p>
+ * X-coordinate of the top-left corner of the extracted region.
+ * </p>
+ * @param int $y <p>
+ * Y-coordinate of the top-left corner of the extracted region.
+ * </p>
+ * @return Imagick Extracts a region of the image and returns it as a new wand.
+ */
+ public function getImageRegion ($width, $height, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a new image as a copy
+ * @link https://php.net/manual/en/imagick.implodeimage.php
+ * @param float $radius <p>
+ * The radius of the implode
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function implodeImage ($radius) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adjusts the levels of an image
+ * @link https://php.net/manual/en/imagick.levelimage.php
+ * @param float $blackPoint <p>
+ * The image black point
+ * </p>
+ * @param float $gamma <p>
+ * The gamma value
+ * </p>
+ * @param float $whitePoint <p>
+ * The image white point
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function levelImage ($blackPoint, $gamma, $whitePoint, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Scales an image proportionally 2x
+ * @link https://php.net/manual/en/imagick.magnifyimage.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function magnifyImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Replaces the colors of an image with the closest color from a reference image.
+ * @link https://php.net/manual/en/imagick.mapimage.php
+ * @param Imagick $map
+ * @param bool $dither
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function mapImage (Imagick $map, $dither) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Changes the transparency value of a color
+ * @link https://php.net/manual/en/imagick.mattefloodfillimage.php
+ * @param float $alpha <p>
+ * The level of transparency: 1.0 is fully opaque and 0.0 is fully
+ * transparent.
+ * </p>
+ * @param float $fuzz <p>
+ * The fuzz member of image defines how much tolerance is acceptable to
+ * consider two colors as the same.
+ * </p>
+ * @param mixed $bordercolor <p>
+ * An <b>ImagickPixel</b> object or string representing the border color.
+ * </p>
+ * @param int $x <p>
+ * The starting x coordinate of the operation.
+ * </p>
+ * @param int $y <p>
+ * The starting y coordinate of the operation.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function matteFloodfillImage ($alpha, $fuzz, $bordercolor, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Applies a digital filter
+ * @link https://php.net/manual/en/imagick.medianfilterimage.php
+ * @param float $radius <p>
+ * The radius of the pixel neighborhood.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function medianFilterImage ($radius) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Negates the colors in the reference image
+ * @link https://php.net/manual/en/imagick.negateimage.php
+ * @param bool $gray <p>
+ * Whether to only negate grayscale pixels within the image.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function negateImage ($gray, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Change any pixel that matches color
+ * @link https://php.net/manual/en/imagick.paintopaqueimage.php
+ * @param mixed $target <p>
+ * Change this target color to the fill color within the image. An
+ * ImagickPixel object or a string representing the target color.
+ * </p>
+ * @param mixed $fill <p>
+ * An ImagickPixel object or a string representing the fill color.
+ * </p>
+ * @param float $fuzz <p>
+ * The fuzz member of image defines how much tolerance is acceptable to
+ * consider two colors as the same.
+ * </p>
+ * @param int $channel [optional] <p>
+ * Provide any channel constant that is valid for your channel mode. To
+ * apply to more than one channel, combine channeltype constants using
+ * bitwise operators. Refer to this
+ * list of channel constants.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function paintOpaqueImage ($target, $fill, $fuzz, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Changes any pixel that matches color with the color defined by fill
+ * @link https://php.net/manual/en/imagick.painttransparentimage.php
+ * @param mixed $target <p>
+ * Change this target color to specified opacity value within the image.
+ * </p>
+ * @param float $alpha <p>
+ * The level of transparency: 1.0 is fully opaque and 0.0 is fully
+ * transparent.
+ * </p>
+ * @param float $fuzz <p>
+ * The fuzz member of image defines how much tolerance is acceptable to
+ * consider two colors as the same.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function paintTransparentImage ($target, $alpha, $fuzz) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Quickly pin-point appropriate parameters for image processing
+ * @link https://php.net/manual/en/imagick.previewimages.php
+ * @param int $preview <p>
+ * Preview type. See Preview type constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function previewImages ($preview) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds or removes a profile from an image
+ * @link https://php.net/manual/en/imagick.profileimage.php
+ * @param string $name
+ * @param string $profile
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function profileImage ($name, $profile) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Analyzes the colors within a reference image
+ * @link https://php.net/manual/en/imagick.quantizeimage.php
+ * @param int $numberColors
+ * @param int $colorspace
+ * @param int $treedepth
+ * @param bool $dither
+ * @param bool $measureError
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function quantizeImage ($numberColors, $colorspace, $treedepth, $dither, $measureError) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Analyzes the colors within a sequence of images
+ * @link https://php.net/manual/en/imagick.quantizeimages.php
+ * @param int $numberColors
+ * @param int $colorspace
+ * @param int $treedepth
+ * @param bool $dither
+ * @param bool $measureError
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function quantizeImages ($numberColors, $colorspace, $treedepth, $dither, $measureError) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Smooths the contours of an image
+ * @link https://php.net/manual/en/imagick.reducenoiseimage.php
+ * @param float $radius
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function reduceNoiseImage ($radius) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Removes the named image profile and returns it
+ * @link https://php.net/manual/en/imagick.removeimageprofile.php
+ * @param string $name
+ * @return string a string containing the profile of the image.
+ */
+ public function removeImageProfile ($name) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Separates a channel from the image
+ * @link https://php.net/manual/en/imagick.separateimagechannel.php
+ * @param int $channel
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function separateImageChannel ($channel) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sepia tones an image
+ * @link https://php.net/manual/en/imagick.sepiatoneimage.php
+ * @param float $threshold
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function sepiaToneImage ($threshold) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image bias for any method that convolves an image
+ * @link https://php.net/manual/en/imagick.setimagebias.php
+ * @param float $bias
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageBias ($bias) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image chromaticity blue primary point
+ * @link https://php.net/manual/en/imagick.setimageblueprimary.php
+ * @param float $x
+ * @param float $y
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageBluePrimary ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image border color
+ * @link https://php.net/manual/en/imagick.setimagebordercolor.php
+ * @param mixed $border <p>
+ * The border color
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageBorderColor ($border) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the depth of a particular image channel
+ * @link https://php.net/manual/en/imagick.setimagechanneldepth.php
+ * @param int $channel
+ * @param int $depth
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageChannelDepth ($channel, $depth) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the color of the specified colormap index
+ * @link https://php.net/manual/en/imagick.setimagecolormapcolor.php
+ * @param int $index
+ * @param ImagickPixel $color
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageColormapColor ($index, ImagickPixel $color) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image colorspace
+ * @link https://php.net/manual/en/imagick.setimagecolorspace.php
+ * @param int $colorspace <p>
+ * One of the COLORSPACE constants
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageColorspace ($colorspace) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image disposal method
+ * @link https://php.net/manual/en/imagick.setimagedispose.php
+ * @param int $dispose
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageDispose ($dispose) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image size
+ * @link https://php.net/manual/en/imagick.setimageextent.php
+ * @param int $columns
+ * @param int $rows
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageExtent ($columns, $rows) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image chromaticity green primary point
+ * @link https://php.net/manual/en/imagick.setimagegreenprimary.php
+ * @param float $x
+ * @param float $y
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageGreenPrimary ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image compression
+ * @link https://php.net/manual/en/imagick.setimageinterlacescheme.php
+ * @param int $interlace_scheme
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageInterlaceScheme ($interlace_scheme) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds a named profile to the Imagick object
+ * @link https://php.net/manual/en/imagick.setimageprofile.php
+ * @param string $name
+ * @param string $profile
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageProfile ($name, $profile) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image chromaticity red primary point
+ * @link https://php.net/manual/en/imagick.setimageredprimary.php
+ * @param float $x
+ * @param float $y
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageRedPrimary ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image rendering intent
+ * @link https://php.net/manual/en/imagick.setimagerenderingintent.php
+ * @param int $rendering_intent
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageRenderingIntent ($rendering_intent) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image virtual pixel method
+ * @link https://php.net/manual/en/imagick.setimagevirtualpixelmethod.php
+ * @param int $method
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageVirtualPixelMethod ($method) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image chromaticity white point
+ * @link https://php.net/manual/en/imagick.setimagewhitepoint.php
+ * @param float $x
+ * @param float $y
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImageWhitePoint ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adjusts the contrast of an image
+ * @link https://php.net/manual/en/imagick.sigmoidalcontrastimage.php
+ * @param bool $sharpen
+ * @param float $alpha
+ * @param float $beta
+ * @param int $channel [optional]
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function sigmoidalContrastImage ($sharpen, $alpha, $beta, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Composites two images
+ * @link https://php.net/manual/en/imagick.stereoimage.php
+ * @param Imagick $offset_wand
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function stereoImage (Imagick $offset_wand) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Repeatedly tiles the texture image
+ * @link https://php.net/manual/en/imagick.textureimage.php
+ * @param Imagick $texture_wand
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function textureImage (Imagick $texture_wand) {}
+
+ /**
+ * pplies a color vector to each pixel in the image. The 'opacity' color is a per channel strength factor for how strongly the color should be applied.
+ * If legacy is true, the behaviour of this function is incorrect, but consistent with how it behaved before Imagick version 3.4.0
+ * @link https://php.net/manual/en/imagick.tintimage.php
+ * @param mixed $tint
+ * @param mixed $opacity
+ * @param bool $legacy [optional]
+ * @return bool <b>TRUE</b> on success.
+ * @throws ImagickException Throws ImagickException on error
+ * @since 2.0.0
+ */
+ public function tintImage ($tint, $opacity, $legacy = false) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sharpens an image
+ * @link https://php.net/manual/en/imagick.unsharpmaskimage.php
+ * @param float $radius
+ * @param float $sigma
+ * @param float $amount
+ * @param float $threshold
+ * @param int $channel [optional]
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function unsharpMaskImage ($radius, $sigma, $amount, $threshold, $channel = Imagick::CHANNEL_ALL) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns a new Imagick object
+ * @link https://php.net/manual/en/imagick.getimage.php
+ * @return Imagick a new Imagick object with the current image sequence.
+ */
+ public function getImage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds new image to Imagick object image list
+ * @link https://php.net/manual/en/imagick.addimage.php
+ * @param Imagick $source <p>
+ * The source Imagick object
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function addImage (Imagick $source) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Replaces image in the object
+ * @link https://php.net/manual/en/imagick.setimage.php
+ * @param Imagick $replace <p>
+ * The replace Imagick object
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setImage (Imagick $replace) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a new image
+ * @link https://php.net/manual/en/imagick.newimage.php
+ * @param int $cols <p>
+ * Columns in the new image
+ * </p>
+ * @param int $rows <p>
+ * Rows in the new image
+ * </p>
+ * @param mixed $background <p>
+ * The background color used for this image
+ * </p>
+ * @param string $format [optional] <p>
+ * Image format. This parameter was added in Imagick version 2.0.1.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function newImage ($cols, $rows, $background, $format = null) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Creates a new image
+ * @link https://php.net/manual/en/imagick.newpseudoimage.php
+ * @param int $columns <p>
+ * columns in the new image
+ * </p>
+ * @param int $rows <p>
+ * rows in the new image
+ * </p>
+ * @param string $pseudoString <p>
+ * string containing pseudo image definition.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function newPseudoImage ($columns, $rows, $pseudoString) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the object compression type
+ * @link https://php.net/manual/en/imagick.getcompression.php
+ * @return int the compression constant
+ */
+ public function getCompression () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the object compression quality
+ * @link https://php.net/manual/en/imagick.getcompressionquality.php
+ * @return int integer describing the compression quality
+ */
+ public function getCompressionQuality () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the ImageMagick API copyright as a string
+ * @link https://php.net/manual/en/imagick.getcopyright.php
+ * @return string a string containing the copyright notice of Imagemagick and
+ * Magickwand C API.
+ */
+ public static function getCopyright () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * The filename associated with an image sequence
+ * @link https://php.net/manual/en/imagick.getfilename.php
+ * @return string a string on success.
+ */
+ public function getFilename () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the format of the Imagick object
+ * @link https://php.net/manual/en/imagick.getformat.php
+ * @return string the format of the image.
+ */
+ public function getFormat () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the ImageMagick home URL
+ * @link https://php.net/manual/en/imagick.gethomeurl.php
+ * @return string a link to the imagemagick homepage.
+ */
+ public static function getHomeURL () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the object interlace scheme
+ * @link https://php.net/manual/en/imagick.getinterlacescheme.php
+ * @return int Gets the wand interlace
+ * scheme.
+ */
+ public function getInterlaceScheme () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns a value associated with the specified key
+ * @link https://php.net/manual/en/imagick.getoption.php
+ * @param string $key <p>
+ * The name of the option
+ * </p>
+ * @return string a value associated with a wand and the specified key.
+ */
+ public function getOption ($key) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the ImageMagick package name
+ * @link https://php.net/manual/en/imagick.getpackagename.php
+ * @return string the ImageMagick package name as a string.
+ */
+ public static function getPackageName () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the page geometry
+ * @link https://php.net/manual/en/imagick.getpage.php
+ * @return array the page geometry associated with the Imagick object in
+ * an associative array with the keys "width", "height", "x", and "y",
+ * throwing ImagickException on error.
+ * @throws ImagickException on error
+ */
+ public function getPage () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the quantum depth
+ * @link https://php.net/manual/en/imagick.getquantumdepth.php
+ * @return array the Imagick quantum depth as a string.
+ */
+ public static function getQuantumDepth () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the Imagick quantum range
+ * @link https://php.net/manual/en/imagick.getquantumrange.php
+ * @return array the Imagick quantum range as a string.
+ */
+ public static function getQuantumRange () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the ImageMagick release date
+ * @link https://php.net/manual/en/imagick.getreleasedate.php
+ * @return string the ImageMagick release date as a string.
+ */
+ public static function getReleaseDate () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the specified resource's memory usage
+ * @link https://php.net/manual/en/imagick.getresource.php
+ * @param int $type <p>
+ * Refer to the list of resourcetype constants.
+ * </p>
+ * @return int the specified resource's memory usage in megabytes.
+ */
+ public static function getResource ($type) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the specified resource limit
+ * @link https://php.net/manual/en/imagick.getresourcelimit.php
+ * @param int $type <p>
+ * Refer to the list of resourcetype constants.
+ * </p>
+ * @return int the specified resource limit in megabytes.
+ */
+ public static function getResourceLimit ($type) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the horizontal and vertical sampling factor
+ * @link https://php.net/manual/en/imagick.getsamplingfactors.php
+ * @return array an associative array with the horizontal and vertical sampling
+ * factors of the image.
+ */
+ public function getSamplingFactors () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the size associated with the Imagick object
+ * @link https://php.net/manual/en/imagick.getsize.php
+ * @return array the size associated with the Imagick object as an array with the
+ * keys "columns" and "rows".
+ */
+ public function getSize () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the ImageMagick API version
+ * @link https://php.net/manual/en/imagick.getversion.php
+ * @return array the ImageMagick API version as a string and as a number.
+ */
+ public static function getVersion () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the object's default background color
+ * @link https://php.net/manual/en/imagick.setbackgroundcolor.php
+ * @param mixed $background
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setBackgroundColor ($background) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the object's default compression type
+ * @link https://php.net/manual/en/imagick.setcompression.php
+ * @param int $compression
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setCompression ($compression) {}
+
+ /**
+ * (PECL imagick 0.9.10-0.9.9)<br/>
+ * Sets the object's default compression quality
+ * @link https://php.net/manual/en/imagick.setcompressionquality.php
+ * @param int $quality
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setCompressionQuality ($quality) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the filename before you read or write the image
+ * @link https://php.net/manual/en/imagick.setfilename.php
+ * @param string $filename
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setFilename ($filename) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the format of the Imagick object
+ * @link https://php.net/manual/en/imagick.setformat.php
+ * @param string $format
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setFormat ($format) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image compression
+ * @link https://php.net/manual/en/imagick.setinterlacescheme.php
+ * @param int $interlace_scheme
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setInterlaceScheme ($interlace_scheme) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Set an option
+ * @link https://php.net/manual/en/imagick.setoption.php
+ * @param string $key
+ * @param string $value
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setOption ($key, $value) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the page geometry of the Imagick object
+ * @link https://php.net/manual/en/imagick.setpage.php
+ * @param int $width
+ * @param int $height
+ * @param int $x
+ * @param int $y
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setPage ($width, $height, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the limit for a particular resource in megabytes
+ * @link https://php.net/manual/en/imagick.setresourcelimit.php
+ * @param int $type <p>
+ * Refer to the list of resourcetype constants.
+ * </p>
+ * @param int $limit <p>
+ * The resource limit. The unit depends on the type of the resource being limited.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public static function setResourceLimit ($type, $limit) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image resolution
+ * @link https://php.net/manual/en/imagick.setresolution.php
+ * @param float $x_resolution <p>
+ * The horizontal resolution.
+ * </p>
+ * @param float $y_resolution <p>
+ * The vertical resolution.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setResolution ($x_resolution, $y_resolution) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image sampling factors
+ * @link https://php.net/manual/en/imagick.setsamplingfactors.php
+ * @param array $factors
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setSamplingFactors (array $factors) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the size of the Imagick object
+ * @link https://php.net/manual/en/imagick.setsize.php
+ * @param int $columns
+ * @param int $rows
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setSize ($columns, $rows) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the image type attribute
+ * @link https://php.net/manual/en/imagick.settype.php
+ * @param int $image_type
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setType ($image_type) {}
+
+ public function key () {}
+
+ public function next () {}
+
+ public function rewind () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Checks if the current item is valid
+ * @link https://php.net/manual/en/imagick.valid.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function valid () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns a reference to the current Imagick object
+ * @link https://php.net/manual/en/imagick.current.php
+ * @return Imagick self on success.
+ */
+ public function current () {}
+
+ /**
+ * Change the brightness and/or contrast of an image. It converts the brightness and contrast parameters into slope and intercept and calls a polynomical function to apply to the image.
+ * @link https://php.net/manual/en/imagick.brightnesscontrastimage.php
+ * @param string $brightness
+ * @param string $contrast
+ * @param int $CHANNEL [optional]
+ * @return void
+ * @since 3.3.0
+ */
+ public function brightnessContrastImage ($brightness, $contrast, $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
+
+ /**
+ * Applies a user supplied kernel to the image according to the given morphology method.
+ * @link https://php.net/manual/en/imagick.morphology.php
+ * @param int $morphologyMethod Which morphology method to use one of the \Imagick::MORPHOLOGY_* constants.
+ * @param int $iterations The number of iteration to apply the morphology function. A value of -1 means loop until no change found. How this is applied may depend on the morphology method. Typically this is a value of 1.
+ * @param ImagickKernel $ImagickKernel
+ * @param int $CHANNEL [optional]
+ * @return void
+ * @since 3.3.0
+ */
+ public function morphology ($morphologyMethod, $iterations, ImagickKernel $ImagickKernel, $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
+
+ /**
+ * Applies a custom convolution kernel to the image.
+ * @link https://php.net/manual/en/imagick.filter.php
+ * @param ImagickKernel $ImagickKernel An instance of ImagickKernel that represents either a single kernel or a linked series of kernels.
+ * @param int $CHANNEL [optional] Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT. Refer to this list of channel constants
+ * @return void
+ * @since 3.3.0
+ */
+ public function filter (ImagickKernel $ImagickKernel , $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
+
+ /**
+ * Apply color transformation to an image. The method permits saturation changes, hue rotation, luminance to alpha, and various other effects. Although variable-sized transformation matrices can be used, typically one uses a 5x5 matrix for an RGBA image and a 6x6 for CMYKA (or RGBA with offsets).
+ * The matrix is similar to those used by Adobe Flash except offsets are in column 6 rather than 5 (in support of CMYKA images) and offsets are normalized (divide Flash offset by 255)
+ * @link https://php.net/manual/en/imagick.colormatriximage.php
+ * @param string $color_matrix
+ * @return void
+ * @since 3.3.0
+ */
+ public function colorMatrixImage ($color_matrix = Imagick::CHANNEL_DEFAULT) { }
+
+ /**
+ * Deletes an image property.
+ * @link https://php.net/manual/en/imagick.deleteimageproperty.php
+ * @param string $name The name of the property to delete.
+ * @return void
+ * @since 3.3.0
+ */
+ public function deleteImageProperty ($name) { }
+
+ /**
+ * Implements the discrete Fourier transform (DFT) of the image either as a magnitude / phase or real / imaginary image pair.
+ * @link https://php.net/manual/en/imagick.forwardfouriertransformimage.php
+ * @param bool $magnitude If true, return as magnitude / phase pair otherwise a real / imaginary image pair.
+ * @return void
+ * @since 3.3.0
+ */
+ public function forwardFourierTransformimage ($magnitude) { }
+
+ /**
+ * Gets the current image's compression type.
+ * @link https://php.net/manual/en/imagick.getimagecompression.php
+ * @return int
+ * @since 3.3.0
+ */
+ public function getImageCompression () { }
+
+ /**
+ * Get the StringRegistry entry for the named key or false if not set.
+ * @link https://php.net/manual/en/imagick.getregistry.php
+ * @param string $key
+ * @return string|false
+ * @throws Exception Since version >=3.4.3. Throws an exception if the key does not exist, rather than terminating the program.
+ * @since 3.3.0
+ */
+ public static function getRegistry ($key) { }
+
+ /**
+ * Returns the ImageMagick quantum range as an integer.
+ * @link https://php.net/manual/en/imagick.getquantum.php
+ * @return int
+ * @since 3.3.0
+ */
+ public static function getQuantum () { }
+
+ /**
+ * Replaces any embedded formatting characters with the appropriate image property and returns the interpreted text. See https://www.imagemagick.org/script/escape.php for escape sequences.
+ * @link https://php.net/manual/en/imagick.identifyformat.php
+ * @see https://www.imagemagick.org/script/escape.php
+ * @param string $embedText A string containing formatting sequences e.g. "Trim box: %@ number of unique colors: %k".
+ * @return bool
+ * @since 3.3.0
+ */
+ public function identifyFormat ($embedText) { }
+
+ /**
+ * Implements the inverse discrete Fourier transform (DFT) of the image either as a magnitude / phase or real / imaginary image pair.
+ * @link https://php.net/manual/en/imagick.inversefouriertransformimage.php
+ * @param Imagick $complement The second image to combine with this one to form either the magnitude / phase or real / imaginary image pair.
+ * @param bool $magnitude If true, combine as magnitude / phase pair otherwise a real / imaginary image pair.
+ * @return void
+ * @since 3.3.0
+ */
+ public function inverseFourierTransformImage ($complement, $magnitude) { }
+
+ /**
+ * List all the registry settings. Returns an array of all the key/value pairs in the registry
+ * @link https://php.net/manual/en/imagick.listregistry.php
+ * @return array An array containing the key/values from the registry.
+ * @since 3.3.0
+ */
+ public static function listRegistry () { }
+
+ /**
+ * Rotational blurs an image.
+ * @link https://php.net/manual/en/imagick.rotationalblurimage.php
+ * @param string $angle
+ * @param string $CHANNEL
+ * @return void
+ * @since 3.3.0
+ */
+ public function rotationalBlurImage ($angle, $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
+
+ /**
+ * Selectively blur an image within a contrast threshold. It is similar to the unsharpen mask that sharpens everything with contrast above a certain threshold.
+ * @link https://php.net/manual/en/imagick.selectiveblurimage.php
+ * @param float $radius
+ * @param float $sigma
+ * @param float $threshold
+ * @param int $CHANNEL Provide any channel constant that is valid for your channel mode. To apply to more than one channel, combine channel constants using bitwise operators. Defaults to Imagick::CHANNEL_DEFAULT. Refer to this list of channel constants
+ * @return void
+ * @since 3.3.0
+ */
+ public function selectiveBlurImage ($radius, $sigma, $threshold, $CHANNEL = Imagick::CHANNEL_DEFAULT) { }
+
+ /**
+ * Set whether antialiasing should be used for operations. On by default.
+ * @param bool $antialias
+ * @return int
+ * @since 3.3.0
+ */
+ public function setAntiAlias ($antialias) { }
+
+ /**
+ * @link https://php.net/manual/en/imagick.setimagebiasquantum.php
+ * @param string $bias
+ * @return void
+ * @since 3.3.0
+ */
+ public function setImageBiasQuantum ($bias) { }
+
+ /**
+ * Set a callback that will be called during the processing of the Imagick image.
+ * @link https://php.net/manual/en/imagick.setprogressmonitor.php
+ * @param callable $callback The progress function to call. It should return true if image processing should continue, or false if it should be cancelled.
+ * The offset parameter indicates the progress and the span parameter indicates the total amount of work needed to be done.
+ * <pre> bool callback ( mixed $offset , mixed $span ) </pre>
+ * <b>Caution</b>
+ * The values passed to the callback function are not consistent. In particular the span parameter can increase during image processing. Because of this calculating the percentage complete of an image operation is not trivial.
+ * @return void
+ * @since 3.3.0
+ */
+ public function setProgressMonitor ($callback) { }
+
+ /**
+ * Sets the ImageMagick registry entry named key to value. This is most useful for setting "temporary-path" which controls where ImageMagick creates temporary images e.g. while processing PDFs.
+ * @link https://php.net/manual/en/imagick.setregistry.php
+ * @param string $key
+ * @param string $value
+ * @return void
+ * @since 3.3.0
+ */
+ public static function setRegistry ($key, $value) { }
+
+ /**
+ * Replace each pixel with corresponding statistic from the neighborhood of the specified width and height.
+ * @link https://php.net/manual/en/imagick.statisticimage.php
+ * @param int $type
+ * @param int $width
+ * @param int $height
+ * @param int $channel [optional]
+ * @return void
+ * @since 3.3.0
+ */
+ public function statisticImage ($type, $width, $height, $channel = Imagick::CHANNEL_DEFAULT ) { }
+
+ /**
+ * Searches for a subimage in the current image and returns a similarity image such that an exact match location is
+ * completely white and if none of the pixels match, black, otherwise some gray level in-between.
+ * You can also pass in the optional parameters bestMatch and similarity. After calling the function similarity will
+ * be set to the 'score' of the similarity between the subimage and the matching position in the larger image,
+ * bestMatch will contain an associative array with elements x, y, width, height that describe the matching region.
+ *
+ * @link https://php.net/manual/en/imagick.subimagematch.php
+ * @param Imagick $imagick
+ * @param array &$bestMatch [optional]
+ * @param float &$similarity [optional] A new image that displays the amount of similarity at each pixel.
+ * @param float $similarity_threshold [optional] Only used if compiled with ImageMagick (library) > 7
+ * @param int $metric [optional] Only used if compiled with ImageMagick (library) > 7
+ * @return Imagick
+ * @since 3.3.0
+ */
+ public function subImageMatch (Imagick $imagick, array &$bestMatch, &$similarity, $similarity_threshold, $metric) { }
+
+ /**
+ * Is an alias of Imagick::subImageMatch
+ *
+ * @param Imagick $imagick
+ * @param array $bestMatch [optional]
+ * @param float $similarity [optional] A new image that displays the amount of similarity at each pixel.
+ * @param float $similarity_threshold [optional]
+ * @param int $metric [optional]
+ * @return Imagick
+ * @see Imagick::subImageMatch() This function is an alias of subImageMatch()
+ * @since 3.4.0
+ */
+ public function similarityImage (Imagick $imagick, array &$bestMatch, &$similarity, $similarity_threshold, $metric) { }
+
+ /**
+ * Returns any ImageMagick configure options that match the specified pattern (e.g. "*" for all). Options include NAME, VERSION, LIB_VERSION, etc.
+ * @return string
+ * @since 3.4.0
+ */
+ public function getConfigureOptions () { }
+
+ /**
+ * GetFeatures() returns the ImageMagick features that have been compiled into the runtime.
+ * @return string
+ * @since 3.4.0
+ */
+ public function getFeatures () { }
+
+ /**
+ * @return int
+ * @since 3.4.0
+ */
+ public function getHDRIEnabled () { }
+
+ /**
+ * Sets the image channel mask. Returns the previous set channel mask.
+ * Only works with Imagick >=7
+ * @param int $channel
+ * @since 3.4.0
+ */
+ public function setImageChannelMask ($channel) {}
+
+ /**
+ * Merge multiple images of the same size together with the selected operator. https://www.imagemagick.org/Usage/layers/#evaluate-sequence
+ * @param int $EVALUATE_CONSTANT
+ * @return bool
+ * @see https://www.imagemagick.org/Usage/layers/#evaluate-sequence
+ * @since 3.4.0
+ */
+ public function evaluateImages ($EVALUATE_CONSTANT) { }
+
+ /**
+ * Extracts the 'mean' from the image and adjust the image to try make set its gamma appropriately.
+ * @param int $channel [optional] Default value Imagick::CHANNEL_ALL
+ * @return bool
+ * @since 3.4.1
+ */
+ public function autoGammaImage ($channel = Imagick::CHANNEL_ALL) { }
+
+ /**
+ * Adjusts an image so that its orientation is suitable $ for viewing (i.e. top-left orientation).
+ * @return bool
+ * @since 3.4.1
+ */
+ public function autoOrient () { }
+
+ /**
+ * Composite one image onto another using the specified gravity.
+ *
+ * @param Imagick $imagick
+ * @param int $COMPOSITE_CONSTANT
+ * @param int $GRAVITY_CONSTANT
+ * @return bool
+ * @since 3.4.1
+ */
+ public function compositeImageGravity(Imagick $imagick, $COMPOSITE_CONSTANT, $GRAVITY_CONSTANT) { }
+
+ /**
+ * Attempts to increase the appearance of large-scale light-dark transitions.
+ *
+ * @param float $radius
+ * @param float $strength
+ * @return bool
+ * @since 3.4.1
+ */
+ public function localContrastImage($radius, $strength) { }
+
+ /**
+ * Identifies the potential image type, returns one of the Imagick::IMGTYPE_* constants
+ * @return int
+ * @since 3.4.3
+ */
+ public function identifyImageType() { }
+
+ /**
+ * Sets the image to the specified alpha level. Will replace ImagickDraw::setOpacity()
+ *
+ * @param float $alpha
+ * @return bool
+ * @since 3.4.3
+ */
+ public function setImageAlpha($alpha) { }
+}
+
+/**
+ * @method ImagickDraw clone() (PECL imagick 2.0.0)<br/>Makes an exact copy of the specified ImagickDraw object
+ * @link https://php.net/manual/en/class.imagickdraw.php
+ */
+class ImagickDraw {
+
+ public function resetVectorGraphics () {}
+
+ public function getTextKerning () {}
+
+ /**
+ * @param $kerning
+ */
+ public function setTextKerning ($kerning) {}
+
+ public function getTextInterWordSpacing () {}
+
+ /**
+ * @param $spacing
+ */
+ public function setTextInterWordSpacing ($spacing) {}
+
+ public function getTextInterLineSpacing () {}
+
+ /**
+ * @param $spacing
+ */
+ public function setTextInterLineSpacing ($spacing) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * The ImagickDraw constructor
+ * @link https://php.net/manual/en/imagickdraw.construct.php
+ */
+ public function __construct () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the fill color to be used for drawing filled objects
+ * @link https://php.net/manual/en/imagickdraw.setfillcolor.php
+ * @param ImagickPixel $fill_pixel <p>
+ * ImagickPixel to use to set the color
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setFillColor (ImagickPixel $fill_pixel) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the opacity to use when drawing using the fill color or fill texture
+ * @link https://php.net/manual/en/imagickdraw.setfillalpha.php
+ * @param float $opacity <p>
+ * fill alpha
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setFillAlpha ($opacity) {}
+
+ /**
+ * @param $x_resolution
+ * @param $y_resolution
+ */
+ public function setResolution ($x_resolution, $y_resolution) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the color used for stroking object outlines
+ * @link https://php.net/manual/en/imagickdraw.setstrokecolor.php
+ * @param ImagickPixel $stroke_pixel <p>
+ * the stroke color
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setStrokeColor (ImagickPixel $stroke_pixel) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies the opacity of stroked object outlines
+ * @link https://php.net/manual/en/imagickdraw.setstrokealpha.php
+ * @param float $opacity <p>
+ * opacity
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setStrokeAlpha ($opacity) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the width of the stroke used to draw object outlines
+ * @link https://php.net/manual/en/imagickdraw.setstrokewidth.php
+ * @param float $stroke_width <p>
+ * stroke width
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setStrokeWidth ($stroke_width) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Clears the ImagickDraw
+ * @link https://php.net/manual/en/imagickdraw.clear.php
+ * @return bool an ImagickDraw object.
+ */
+ public function clear () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a circle
+ * @link https://php.net/manual/en/imagickdraw.circle.php
+ * @param float $ox <p>
+ * origin x coordinate
+ * </p>
+ * @param float $oy <p>
+ * origin y coordinate
+ * </p>
+ * @param float $px <p>
+ * perimeter x coordinate
+ * </p>
+ * @param float $py <p>
+ * perimeter y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function circle ($ox, $oy, $px, $py) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws text on the image
+ * @link https://php.net/manual/en/imagickdraw.annotation.php
+ * @param float $x <p>
+ * The x coordinate where text is drawn
+ * </p>
+ * @param float $y <p>
+ * The y coordinate where text is drawn
+ * </p>
+ * @param string $text <p>
+ * The text to draw on the image
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function annotation ($x, $y, $text) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Controls whether text is antialiased
+ * @link https://php.net/manual/en/imagickdraw.settextantialias.php
+ * @param bool $antiAlias
+ * @return bool No value is returned.
+ */
+ public function setTextAntialias ($antiAlias) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies specifies the text code set
+ * @link https://php.net/manual/en/imagickdraw.settextencoding.php
+ * @param string $encoding <p>
+ * the encoding name
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setTextEncoding ($encoding) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the fully-specified font to use when annotating with text
+ * @link https://php.net/manual/en/imagickdraw.setfont.php
+ * @param string $font_name
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setFont ($font_name) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the font family to use when annotating with text
+ * @link https://php.net/manual/en/imagickdraw.setfontfamily.php
+ * @param string $font_family <p>
+ * the font family
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setFontFamily ($font_family) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the font pointsize to use when annotating with text
+ * @link https://php.net/manual/en/imagickdraw.setfontsize.php
+ * @param float $pointsize <p>
+ * the point size
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setFontSize ($pointsize) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the font style to use when annotating with text
+ * @link https://php.net/manual/en/imagickdraw.setfontstyle.php
+ * @param int $style <p>
+ * STYLETYPE_ constant
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setFontStyle ($style) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the font weight
+ * @link https://php.net/manual/en/imagickdraw.setfontweight.php
+ * @param int $font_weight
+ * @return bool
+ */
+ public function setFontWeight ($font_weight) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the font
+ * @link https://php.net/manual/en/imagickdraw.getfont.php
+ * @return string|false a string on success and false if no font is set.
+ */
+ public function getFont () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the font family
+ * @link https://php.net/manual/en/imagickdraw.getfontfamily.php
+ * @return string|false the font family currently selected or false if font family is not set.
+ */
+ public function getFontFamily () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the font pointsize
+ * @link https://php.net/manual/en/imagickdraw.getfontsize.php
+ * @return float the font size associated with the current ImagickDraw object.
+ */
+ public function getFontSize () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the font style
+ * @link https://php.net/manual/en/imagickdraw.getfontstyle.php
+ * @return int the font style constant (STYLE_) associated with the ImagickDraw object
+ * or 0 if no style is set.
+ */
+ public function getFontStyle () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the font weight
+ * @link https://php.net/manual/en/imagickdraw.getfontweight.php
+ * @return int an int on success and 0 if no weight is set.
+ */
+ public function getFontWeight () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Frees all associated resources
+ * @link https://php.net/manual/en/imagickdraw.destroy.php
+ * @return bool No value is returned.
+ */
+ public function destroy () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a rectangle
+ * @link https://php.net/manual/en/imagickdraw.rectangle.php
+ * @param float $x1 <p>
+ * x coordinate of the top left corner
+ * </p>
+ * @param float $y1 <p>
+ * y coordinate of the top left corner
+ * </p>
+ * @param float $x2 <p>
+ * x coordinate of the bottom right corner
+ * </p>
+ * @param float $y2 <p>
+ * y coordinate of the bottom right corner
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function rectangle ($x1, $y1, $x2, $y2) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a rounded rectangle
+ * @link https://php.net/manual/en/imagickdraw.roundrectangle.php
+ * @param float $x1 <p>
+ * x coordinate of the top left corner
+ * </p>
+ * @param float $y1 <p>
+ * y coordinate of the top left corner
+ * </p>
+ * @param float $x2 <p>
+ * x coordinate of the bottom right
+ * </p>
+ * @param float $y2 <p>
+ * y coordinate of the bottom right
+ * </p>
+ * @param float $rx <p>
+ * x rounding
+ * </p>
+ * @param float $ry <p>
+ * y rounding
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function roundRectangle ($x1, $y1, $x2, $y2, $rx, $ry) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws an ellipse on the image
+ * @link https://php.net/manual/en/imagickdraw.ellipse.php
+ * @param float $ox
+ * @param float $oy
+ * @param float $rx
+ * @param float $ry
+ * @param float $start
+ * @param float $end
+ * @return bool No value is returned.
+ */
+ public function ellipse ($ox, $oy, $rx, $ry, $start, $end) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Skews the current coordinate system in the horizontal direction
+ * @link https://php.net/manual/en/imagickdraw.skewx.php
+ * @param float $degrees <p>
+ * degrees to skew
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function skewX ($degrees) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Skews the current coordinate system in the vertical direction
+ * @link https://php.net/manual/en/imagickdraw.skewy.php
+ * @param float $degrees <p>
+ * degrees to skew
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function skewY ($degrees) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Applies a translation to the current coordinate system
+ * @link https://php.net/manual/en/imagickdraw.translate.php
+ * @param float $x <p>
+ * horizontal translation
+ * </p>
+ * @param float $y <p>
+ * vertical translation
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function translate ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a line
+ * @link https://php.net/manual/en/imagickdraw.line.php
+ * @param float $sx <p>
+ * starting x coordinate
+ * </p>
+ * @param float $sy <p>
+ * starting y coordinate
+ * </p>
+ * @param float $ex <p>
+ * ending x coordinate
+ * </p>
+ * @param float $ey <p>
+ * ending y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function line ($sx, $sy, $ex, $ey) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws an arc
+ * @link https://php.net/manual/en/imagickdraw.arc.php
+ * @param float $sx <p>
+ * Starting x ordinate of bounding rectangle
+ * </p>
+ * @param float $sy <p>
+ * starting y ordinate of bounding rectangle
+ * </p>
+ * @param float $ex <p>
+ * ending x ordinate of bounding rectangle
+ * </p>
+ * @param float $ey <p>
+ * ending y ordinate of bounding rectangle
+ * </p>
+ * @param float $sd <p>
+ * starting degrees of rotation
+ * </p>
+ * @param float $ed <p>
+ * ending degrees of rotation
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function arc ($sx, $sy, $ex, $ey, $sd, $ed) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Paints on the image's opacity channel
+ * @link https://php.net/manual/en/imagickdraw.matte.php
+ * @param float $x <p>
+ * x coordinate of the matte
+ * </p>
+ * @param float $y <p>
+ * y coordinate of the matte
+ * </p>
+ * @param int $paintMethod <p>
+ * PAINT_ constant
+ * </p>
+ * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
+ */
+ public function matte ($x, $y, $paintMethod) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a polygon
+ * @link https://php.net/manual/en/imagickdraw.polygon.php
+ * @param array $coordinates <p>
+ * multidimensional array like array( array( 'x' => 3, 'y' => 4 ), array( 'x' => 2, 'y' => 6 ) );
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function polygon (array $coordinates) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a point
+ * @link https://php.net/manual/en/imagickdraw.point.php
+ * @param float $x <p>
+ * point's x coordinate
+ * </p>
+ * @param float $y <p>
+ * point's y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function point ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the text decoration
+ * @link https://php.net/manual/en/imagickdraw.gettextdecoration.php
+ * @return int one of the DECORATION_ constants
+ * and 0 if no decoration is set.
+ */
+ public function getTextDecoration () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the code set used for text annotations
+ * @link https://php.net/manual/en/imagickdraw.gettextencoding.php
+ * @return string a string specifying the code set
+ * or false if text encoding is not set.
+ */
+ public function getTextEncoding () {}
+
+ public function getFontStretch () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the font stretch to use when annotating with text
+ * @link https://php.net/manual/en/imagickdraw.setfontstretch.php
+ * @param int $fontStretch <p>
+ * STRETCH_ constant
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setFontStretch ($fontStretch) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Controls whether stroked outlines are antialiased
+ * @link https://php.net/manual/en/imagickdraw.setstrokeantialias.php
+ * @param bool $stroke_antialias <p>
+ * the antialias setting
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setStrokeAntialias ($stroke_antialias) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies a text alignment
+ * @link https://php.net/manual/en/imagickdraw.settextalignment.php
+ * @param int $alignment <p>
+ * ALIGN_ constant
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setTextAlignment ($alignment) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies a decoration
+ * @link https://php.net/manual/en/imagickdraw.settextdecoration.php
+ * @param int $decoration <p>
+ * DECORATION_ constant
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setTextDecoration ($decoration) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies the color of a background rectangle
+ * @link https://php.net/manual/en/imagickdraw.settextundercolor.php
+ * @param ImagickPixel $under_color <p>
+ * the under color
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setTextUnderColor (ImagickPixel $under_color) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the overall canvas size
+ * @link https://php.net/manual/en/imagickdraw.setviewbox.php
+ * @param int $x1 <p>
+ * left x coordinate
+ * </p>
+ * @param int $y1 <p>
+ * left y coordinate
+ * </p>
+ * @param int $x2 <p>
+ * right x coordinate
+ * </p>
+ * @param int $y2 <p>
+ * right y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setViewbox ($x1, $y1, $x2, $y2) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adjusts the current affine transformation matrix
+ * @link https://php.net/manual/en/imagickdraw.affine.php
+ * @param array $affine <p>
+ * Affine matrix parameters
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function affine (array $affine) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a bezier curve
+ * @link https://php.net/manual/en/imagickdraw.bezier.php
+ * @param array $coordinates <p>
+ * Multidimensional array like array( array( 'x' => 1, 'y' => 2 ),
+ * array( 'x' => 3, 'y' => 4 ) )
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function bezier (array $coordinates) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Composites an image onto the current image
+ * @link https://php.net/manual/en/imagickdraw.composite.php
+ * @param int $compose <p>
+ * composition operator. One of COMPOSITE_ constants
+ * </p>
+ * @param float $x <p>
+ * x coordinate of the top left corner
+ * </p>
+ * @param float $y <p>
+ * y coordinate of the top left corner
+ * </p>
+ * @param float $width <p>
+ * width of the composition image
+ * </p>
+ * @param float $height <p>
+ * height of the composition image
+ * </p>
+ * @param Imagick $compositeWand <p>
+ * the Imagick object where composition image is taken from
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function composite ($compose, $x, $y, $width, $height, Imagick $compositeWand) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws color on image
+ * @link https://php.net/manual/en/imagickdraw.color.php
+ * @param float $x <p>
+ * x coordinate of the paint
+ * </p>
+ * @param float $y <p>
+ * y coordinate of the paint
+ * </p>
+ * @param int $paintMethod <p>
+ * one of the PAINT_ constants
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function color ($x, $y, $paintMethod) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds a comment
+ * @link https://php.net/manual/en/imagickdraw.comment.php
+ * @param string $comment <p>
+ * The comment string to add to vector output stream
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function comment ($comment) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Obtains the current clipping path ID
+ * @link https://php.net/manual/en/imagickdraw.getclippath.php
+ * @return string|false a string containing the clip path ID or false if no clip path exists.
+ */
+ public function getClipPath () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the current polygon fill rule
+ * @link https://php.net/manual/en/imagickdraw.getcliprule.php
+ * @return int one of the FILLRULE_ constants.
+ */
+ public function getClipRule () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the interpretation of clip path units
+ * @link https://php.net/manual/en/imagickdraw.getclipunits.php
+ * @return int an int on success.
+ */
+ public function getClipUnits () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the fill color
+ * @link https://php.net/manual/en/imagickdraw.getfillcolor.php
+ * @return ImagickPixel an ImagickPixel object.
+ */
+ public function getFillColor () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the opacity used when drawing
+ * @link https://php.net/manual/en/imagickdraw.getfillopacity.php
+ * @return float The opacity.
+ */
+ public function getFillOpacity () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the fill rule
+ * @link https://php.net/manual/en/imagickdraw.getfillrule.php
+ * @return int a FILLRULE_ constant
+ */
+ public function getFillRule () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the text placement gravity
+ * @link https://php.net/manual/en/imagickdraw.getgravity.php
+ * @return int a GRAVITY_ constant on success and 0 if no gravity is set.
+ */
+ public function getGravity () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the current stroke antialias setting
+ * @link https://php.net/manual/en/imagickdraw.getstrokeantialias.php
+ * @return bool <b>TRUE</b> if antialiasing is on and false if it is off.
+ */
+ public function getStrokeAntialias () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the color used for stroking object outlines
+ * @link https://php.net/manual/en/imagickdraw.getstrokecolor.php
+ * @return ImagickPixel an ImagickPixel object which describes the color.
+ */
+ public function getStrokeColor () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns an array representing the pattern of dashes and gaps used to stroke paths
+ * @link https://php.net/manual/en/imagickdraw.getstrokedasharray.php
+ * @return array an array on success and empty array if not set.
+ */
+ public function getStrokeDashArray () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the offset into the dash pattern to start the dash
+ * @link https://php.net/manual/en/imagickdraw.getstrokedashoffset.php
+ * @return float a float representing the offset and 0 if it's not set.
+ */
+ public function getStrokeDashOffset () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the shape to be used at the end of open subpaths when they are stroked
+ * @link https://php.net/manual/en/imagickdraw.getstrokelinecap.php
+ * @return int one of the LINECAP_ constants or 0 if stroke linecap is not set.
+ */
+ public function getStrokeLineCap () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the shape to be used at the corners of paths when they are stroked
+ * @link https://php.net/manual/en/imagickdraw.getstrokelinejoin.php
+ * @return int one of the LINEJOIN_ constants or 0 if stroke line join is not set.
+ */
+ public function getStrokeLineJoin () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the stroke miter limit
+ * @link https://php.net/manual/en/imagickdraw.getstrokemiterlimit.php
+ * @return int an int describing the miter limit
+ * and 0 if no miter limit is set.
+ */
+ public function getStrokeMiterLimit () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the opacity of stroked object outlines
+ * @link https://php.net/manual/en/imagickdraw.getstrokeopacity.php
+ * @return float a float describing the opacity.
+ */
+ public function getStrokeOpacity () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the width of the stroke used to draw object outlines
+ * @link https://php.net/manual/en/imagickdraw.getstrokewidth.php
+ * @return float a float describing the stroke width.
+ */
+ public function getStrokeWidth () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the text alignment
+ * @link https://php.net/manual/en/imagickdraw.gettextalignment.php
+ * @return int one of the ALIGN_ constants and 0 if no align is set.
+ */
+ public function getTextAlignment () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the current text antialias setting
+ * @link https://php.net/manual/en/imagickdraw.gettextantialias.php
+ * @return bool <b>TRUE</b> if text is antialiased and false if not.
+ */
+ public function getTextAntialias () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns a string containing vector graphics
+ * @link https://php.net/manual/en/imagickdraw.getvectorgraphics.php
+ * @return string a string containing the vector graphics.
+ */
+ public function getVectorGraphics () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the text under color
+ * @link https://php.net/manual/en/imagickdraw.gettextundercolor.php
+ * @return ImagickPixel an ImagickPixel object describing the color.
+ */
+ public function getTextUnderColor () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adds a path element to the current path
+ * @link https://php.net/manual/en/imagickdraw.pathclose.php
+ * @return bool No value is returned.
+ */
+ public function pathClose () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a cubic Bezier curve
+ * @link https://php.net/manual/en/imagickdraw.pathcurvetoabsolute.php
+ * @param float $x1 <p>
+ * x coordinate of the first control point
+ * </p>
+ * @param float $y1 <p>
+ * y coordinate of the first control point
+ * </p>
+ * @param float $x2 <p>
+ * x coordinate of the second control point
+ * </p>
+ * @param float $y2 <p>
+ * y coordinate of the first control point
+ * </p>
+ * @param float $x <p>
+ * x coordinate of the curve end
+ * </p>
+ * @param float $y <p>
+ * y coordinate of the curve end
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathCurveToAbsolute ($x1, $y1, $x2, $y2, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a cubic Bezier curve
+ * @link https://php.net/manual/en/imagickdraw.pathcurvetorelative.php
+ * @param float $x1 <p>
+ * x coordinate of starting control point
+ * </p>
+ * @param float $y1 <p>
+ * y coordinate of starting control point
+ * </p>
+ * @param float $x2 <p>
+ * x coordinate of ending control point
+ * </p>
+ * @param float $y2 <p>
+ * y coordinate of ending control point
+ * </p>
+ * @param float $x <p>
+ * ending x coordinate
+ * </p>
+ * @param float $y <p>
+ * ending y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathCurveToRelative ($x1, $y1, $x2, $y2, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a quadratic Bezier curve
+ * @link https://php.net/manual/en/imagickdraw.pathcurvetoquadraticbezierabsolute.php
+ * @param float $x1 <p>
+ * x coordinate of the control point
+ * </p>
+ * @param float $y1 <p>
+ * y coordinate of the control point
+ * </p>
+ * @param float $x <p>
+ * x coordinate of the end point
+ * </p>
+ * @param float $y <p>
+ * y coordinate of the end point
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathCurveToQuadraticBezierAbsolute ($x1, $y1, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a quadratic Bezier curve
+ * @link https://php.net/manual/en/imagickdraw.pathcurvetoquadraticbezierrelative.php
+ * @param float $x1 <p>
+ * starting x coordinate
+ * </p>
+ * @param float $y1 <p>
+ * starting y coordinate
+ * </p>
+ * @param float $x <p>
+ * ending x coordinate
+ * </p>
+ * @param float $y <p>
+ * ending y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathCurveToQuadraticBezierRelative ($x1, $y1, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a quadratic Bezier curve
+ * @link https://php.net/manual/en/imagickdraw.pathcurvetoquadraticbeziersmoothabsolute.php
+ * @param float $x <p>
+ * ending x coordinate
+ * </p>
+ * @param float $y <p>
+ * ending y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathCurveToQuadraticBezierSmoothAbsolute ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a quadratic Bezier curve
+ * @link https://php.net/manual/en/imagickdraw.pathcurvetoquadraticbeziersmoothrelative.php
+ * @param float $x <p>
+ * ending x coordinate
+ * </p>
+ * @param float $y <p>
+ * ending y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathCurveToQuadraticBezierSmoothRelative ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a cubic Bezier curve
+ * @link https://php.net/manual/en/imagickdraw.pathcurvetosmoothabsolute.php
+ * @param float $x2 <p>
+ * x coordinate of the second control point
+ * </p>
+ * @param float $y2 <p>
+ * y coordinate of the second control point
+ * </p>
+ * @param float $x <p>
+ * x coordinate of the ending point
+ * </p>
+ * @param float $y <p>
+ * y coordinate of the ending point
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathCurveToSmoothAbsolute ($x2, $y2, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a cubic Bezier curve
+ * @link https://php.net/manual/en/imagickdraw.pathcurvetosmoothrelative.php
+ * @param float $x2 <p>
+ * x coordinate of the second control point
+ * </p>
+ * @param float $y2 <p>
+ * y coordinate of the second control point
+ * </p>
+ * @param float $x <p>
+ * x coordinate of the ending point
+ * </p>
+ * @param float $y <p>
+ * y coordinate of the ending point
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathCurveToSmoothRelative ($x2, $y2, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws an elliptical arc
+ * @link https://php.net/manual/en/imagickdraw.pathellipticarcabsolute.php
+ * @param float $rx <p>
+ * x radius
+ * </p>
+ * @param float $ry <p>
+ * y radius
+ * </p>
+ * @param float $x_axis_rotation <p>
+ * x axis rotation
+ * </p>
+ * @param bool $large_arc_flag <p>
+ * large arc flag
+ * </p>
+ * @param bool $sweep_flag <p>
+ * sweep flag
+ * </p>
+ * @param float $x <p>
+ * x coordinate
+ * </p>
+ * @param float $y <p>
+ * y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathEllipticArcAbsolute ($rx, $ry, $x_axis_rotation, $large_arc_flag, $sweep_flag, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws an elliptical arc
+ * @link https://php.net/manual/en/imagickdraw.pathellipticarcrelative.php
+ * @param float $rx <p>
+ * x radius
+ * </p>
+ * @param float $ry <p>
+ * y radius
+ * </p>
+ * @param float $x_axis_rotation <p>
+ * x axis rotation
+ * </p>
+ * @param bool $large_arc_flag <p>
+ * large arc flag
+ * </p>
+ * @param bool $sweep_flag <p>
+ * sweep flag
+ * </p>
+ * @param float $x <p>
+ * x coordinate
+ * </p>
+ * @param float $y <p>
+ * y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathEllipticArcRelative ($rx, $ry, $x_axis_rotation, $large_arc_flag, $sweep_flag, $x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Terminates the current path
+ * @link https://php.net/manual/en/imagickdraw.pathfinish.php
+ * @return bool No value is returned.
+ */
+ public function pathFinish () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a line path
+ * @link https://php.net/manual/en/imagickdraw.pathlinetoabsolute.php
+ * @param float $x <p>
+ * starting x coordinate
+ * </p>
+ * @param float $y <p>
+ * ending x coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathLineToAbsolute ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a line path
+ * @link https://php.net/manual/en/imagickdraw.pathlinetorelative.php
+ * @param float $x <p>
+ * starting x coordinate
+ * </p>
+ * @param float $y <p>
+ * starting y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathLineToRelative ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a horizontal line path
+ * @link https://php.net/manual/en/imagickdraw.pathlinetohorizontalabsolute.php
+ * @param float $x <p>
+ * x coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathLineToHorizontalAbsolute ($x) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a horizontal line
+ * @link https://php.net/manual/en/imagickdraw.pathlinetohorizontalrelative.php
+ * @param float $x <p>
+ * x coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathLineToHorizontalRelative ($x) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a vertical line
+ * @link https://php.net/manual/en/imagickdraw.pathlinetoverticalabsolute.php
+ * @param float $y <p>
+ * y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathLineToVerticalAbsolute ($y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a vertical line path
+ * @link https://php.net/manual/en/imagickdraw.pathlinetoverticalrelative.php
+ * @param float $y <p>
+ * y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathLineToVerticalRelative ($y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Starts a new sub-path
+ * @link https://php.net/manual/en/imagickdraw.pathmovetoabsolute.php
+ * @param float $x <p>
+ * x coordinate of the starting point
+ * </p>
+ * @param float $y <p>
+ * y coordinate of the starting point
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathMoveToAbsolute ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Starts a new sub-path
+ * @link https://php.net/manual/en/imagickdraw.pathmovetorelative.php
+ * @param float $x <p>
+ * target x coordinate
+ * </p>
+ * @param float $y <p>
+ * target y coordinate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pathMoveToRelative ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Declares the start of a path drawing list
+ * @link https://php.net/manual/en/imagickdraw.pathstart.php
+ * @return bool No value is returned.
+ */
+ public function pathStart () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Draws a polyline
+ * @link https://php.net/manual/en/imagickdraw.polyline.php
+ * @param array $coordinates <p>
+ * array of x and y coordinates: array( array( 'x' => 4, 'y' => 6 ), array( 'x' => 8, 'y' => 10 ) )
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function polyline (array $coordinates) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Terminates a clip path definition
+ * @link https://php.net/manual/en/imagickdraw.popclippath.php
+ * @return bool No value is returned.
+ */
+ public function popClipPath () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Terminates a definition list
+ * @link https://php.net/manual/en/imagickdraw.popdefs.php
+ * @return bool No value is returned.
+ */
+ public function popDefs () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Terminates a pattern definition
+ * @link https://php.net/manual/en/imagickdraw.poppattern.php
+ * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
+ */
+ public function popPattern () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Starts a clip path definition
+ * @link https://php.net/manual/en/imagickdraw.pushclippath.php
+ * @param string $clip_mask_id <p>
+ * Clip mask Id
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function pushClipPath ($clip_mask_id) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Indicates that following commands create named elements for early processing
+ * @link https://php.net/manual/en/imagickdraw.pushdefs.php
+ * @return bool No value is returned.
+ */
+ public function pushDefs () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Indicates that subsequent commands up to a ImagickDraw::opPattern() command comprise the definition of a named pattern
+ * @link https://php.net/manual/en/imagickdraw.pushpattern.php
+ * @param string $pattern_id <p>
+ * the pattern Id
+ * </p>
+ * @param float $x <p>
+ * x coordinate of the top-left corner
+ * </p>
+ * @param float $y <p>
+ * y coordinate of the top-left corner
+ * </p>
+ * @param float $width <p>
+ * width of the pattern
+ * </p>
+ * @param float $height <p>
+ * height of the pattern
+ * </p>
+ * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
+ */
+ public function pushPattern ($pattern_id, $x, $y, $width, $height) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Renders all preceding drawing commands onto the image
+ * @link https://php.net/manual/en/imagickdraw.render.php
+ * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
+ */
+ public function render () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Applies the specified rotation to the current coordinate space
+ * @link https://php.net/manual/en/imagickdraw.rotate.php
+ * @param float $degrees <p>
+ * degrees to rotate
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function rotate ($degrees) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Adjusts the scaling factor
+ * @link https://php.net/manual/en/imagickdraw.scale.php
+ * @param float $x <p>
+ * horizontal factor
+ * </p>
+ * @param float $y <p>
+ * vertical factor
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function scale ($x, $y) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Associates a named clipping path with the image
+ * @link https://php.net/manual/en/imagickdraw.setclippath.php
+ * @param string $clip_mask <p>
+ * the clipping path name
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setClipPath ($clip_mask) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Set the polygon fill rule to be used by the clipping path
+ * @link https://php.net/manual/en/imagickdraw.setcliprule.php
+ * @param int $fill_rule <p>
+ * FILLRULE_ constant
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setClipRule ($fill_rule) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the interpretation of clip path units
+ * @link https://php.net/manual/en/imagickdraw.setclipunits.php
+ * @param int $clip_units <p>
+ * the number of clip units
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setClipUnits ($clip_units) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the opacity to use when drawing using the fill color or fill texture
+ * @link https://php.net/manual/en/imagickdraw.setfillopacity.php
+ * @param float $fillOpacity <p>
+ * the fill opacity
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setFillOpacity ($fillOpacity) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the URL to use as a fill pattern for filling objects
+ * @link https://php.net/manual/en/imagickdraw.setfillpatternurl.php
+ * @param string $fill_url <p>
+ * URL to use to obtain fill pattern.
+ * </p>
+ * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
+ */
+ public function setFillPatternURL ($fill_url) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the fill rule to use while drawing polygons
+ * @link https://php.net/manual/en/imagickdraw.setfillrule.php
+ * @param int $fill_rule <p>
+ * FILLRULE_ constant
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setFillRule ($fill_rule) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the text placement gravity
+ * @link https://php.net/manual/en/imagickdraw.setgravity.php
+ * @param int $gravity <p>
+ * GRAVITY_ constant
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setGravity ($gravity) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the pattern used for stroking object outlines
+ * @link https://php.net/manual/en/imagickdraw.setstrokepatternurl.php
+ * @param string $stroke_url <p>
+ * stroke URL
+ * </p>
+ * @return bool imagick.imagickdraw.return.success;
+ */
+ public function setStrokePatternURL ($stroke_url) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies the offset into the dash pattern to start the dash
+ * @link https://php.net/manual/en/imagickdraw.setstrokedashoffset.php
+ * @param float $dash_offset <p>
+ * dash offset
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setStrokeDashOffset ($dash_offset) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies the shape to be used at the end of open subpaths when they are stroked
+ * @link https://php.net/manual/en/imagickdraw.setstrokelinecap.php
+ * @param int $linecap <p>
+ * LINECAP_ constant
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setStrokeLineCap ($linecap) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies the shape to be used at the corners of paths when they are stroked
+ * @link https://php.net/manual/en/imagickdraw.setstrokelinejoin.php
+ * @param int $linejoin <p>
+ * LINEJOIN_ constant
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setStrokeLineJoin ($linejoin) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies the miter limit
+ * @link https://php.net/manual/en/imagickdraw.setstrokemiterlimit.php
+ * @param int $miterlimit <p>
+ * the miter limit
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setStrokeMiterLimit ($miterlimit) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies the opacity of stroked object outlines
+ * @link https://php.net/manual/en/imagickdraw.setstrokeopacity.php
+ * @param float $stroke_opacity <p>
+ * stroke opacity. 1.0 is fully opaque
+ * </p>
+ * @return bool No value is returned.
+ */
+ public function setStrokeOpacity ($stroke_opacity) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the vector graphics
+ * @link https://php.net/manual/en/imagickdraw.setvectorgraphics.php
+ * @param string $xml <p>
+ * xml containing the vector graphics
+ * </p>
+ * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
+ */
+ public function setVectorGraphics ($xml) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Destroys the current ImagickDraw in the stack, and returns to the previously pushed ImagickDraw
+ * @link https://php.net/manual/en/imagickdraw.pop.php
+ * @return bool <b>TRUE</b> on success and false on failure.
+ */
+ public function pop () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Clones the current ImagickDraw and pushes it to the stack
+ * @link https://php.net/manual/en/imagickdraw.push.php
+ * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
+ */
+ public function push () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Specifies the pattern of dashes and gaps used to stroke paths
+ * @link https://php.net/manual/en/imagickdraw.setstrokedasharray.php
+ * @param array $dashArray <p>
+ * array of floats
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setStrokeDashArray (array $dashArray) {}
+
+ /**
+ * Sets the opacity to use when drawing using the fill or stroke color or texture. Fully opaque is 1.0.
+ *
+ * @param float $opacity
+ * @return void
+ * @since 3.4.1
+ */
+ public function setOpacity($opacity) { }
+
+ /**
+ * Returns the opacity used when drawing with the fill or stroke color or texture. Fully opaque is 1.0.
+ *
+ * @return float
+ * @since 3.4.1
+ */
+ public function getOpacity() { }
+
+ /**
+ * Sets the image font resolution.
+ *
+ * @param float $x
+ * @param float $y
+ * @return bool
+ * @since 3.4.1
+ */
+ public function setFontResolution($x, $y) { }
+
+ /**
+ * Gets the image X and Y resolution.
+ *
+ * @return array
+ * @since 3.4.1
+ */
+ public function getFontResolution() { }
+
+ /**
+ * Returns the direction that will be used when annotating with text.
+ * @return bool
+ * @since 3.4.1
+ */
+ public function getTextDirection() { }
+
+ /**
+ * Sets the font style to use when annotating with text. The AnyStyle enumeration acts as a wild-card "don't care" option.
+ *
+ * @param int $direction
+ * @return bool
+ * @since 3.4.1
+ */
+ public function setTextDirection($direction) { }
+
+ /**
+ * Returns the border color used for drawing bordered objects.
+ *
+ * @return ImagickPixel
+ * @since 3.4.1
+ */
+ public function getBorderColor() { }
+
+ /**
+ * Sets the border color to be used for drawing bordered objects.
+ * @param ImagickPixel $color
+ * @return bool
+ * @since 3.4.1
+ */
+ public function setBorderColor(ImagickPixel $color) { }
+
+ /**
+ * Obtains the vertical and horizontal resolution.
+ *
+ * @return string|null
+ * @since 3.4.1
+ */
+ public function getDensity() { }
+
+ /**
+ * Sets the vertical and horizontal resolution.
+ * @param string $density_string
+ * @return bool
+ * @since 3.4.1
+ */
+ public function setDensity($density_string) { }
+}
+
+/**
+ * @link https://php.net/manual/en/class.imagickpixeliterator.php
+ */
+class ImagickPixelIterator implements Iterator {
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * The ImagickPixelIterator constructor
+ * @link https://php.net/manual/en/imagickpixeliterator.construct.php
+ * @param Imagick $wand
+ */
+ public function __construct (Imagick $wand) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns a new pixel iterator
+ * @link https://php.net/manual/en/imagickpixeliterator.newpixeliterator.php
+ * @param Imagick $wand
+ * @return bool <b>TRUE</b> on success. Throwing ImagickPixelIteratorException.
+ * @throws ImagickPixelIteratorException
+ */
+ public function newPixelIterator (Imagick $wand) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns a new pixel iterator
+ * @link https://php.net/manual/en/imagickpixeliterator.newpixelregioniterator.php
+ * @param Imagick $wand
+ * @param int $x
+ * @param int $y
+ * @param int $columns
+ * @param int $rows
+ * @return bool a new ImagickPixelIterator on success; on failure, throws ImagickPixelIteratorException
+ * @throws ImagickPixelIteratorException
+ */
+ public function newPixelRegionIterator (Imagick $wand, $x, $y, $columns, $rows) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the current pixel iterator row
+ * @link https://php.net/manual/en/imagickpixeliterator.getiteratorrow.php
+ * @return int the integer offset of the row, throwing ImagickPixelIteratorException on error.
+ * @throws ImagickPixelIteratorException on error
+ */
+ public function getIteratorRow () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Set the pixel iterator row
+ * @link https://php.net/manual/en/imagickpixeliterator.setiteratorrow.php
+ * @param int $row
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setIteratorRow ($row) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the pixel iterator to the first pixel row
+ * @link https://php.net/manual/en/imagickpixeliterator.setiteratorfirstrow.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setIteratorFirstRow () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the pixel iterator to the last pixel row
+ * @link https://php.net/manual/en/imagickpixeliterator.setiteratorlastrow.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setIteratorLastRow () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the previous row
+ * @link https://php.net/manual/en/imagickpixeliterator.getpreviousiteratorrow.php
+ * @return array the previous row as an array of ImagickPixelWand objects from the
+ * ImagickPixelIterator, throwing ImagickPixelIteratorException on error.
+ * @throws ImagickPixelIteratorException on error
+ */
+ public function getPreviousIteratorRow () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the current row of ImagickPixel objects
+ * @link https://php.net/manual/en/imagickpixeliterator.getcurrentiteratorrow.php
+ * @return array a row as an array of ImagickPixel objects that can themselves be iterated.
+ */
+ public function getCurrentIteratorRow () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the next row of the pixel iterator
+ * @link https://php.net/manual/en/imagickpixeliterator.getnextiteratorrow.php
+ * @return array the next row as an array of ImagickPixel objects, throwing
+ * ImagickPixelIteratorException on error.
+ * @throws ImagickPixelIteratorException on error
+ */
+ public function getNextIteratorRow () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Resets the pixel iterator
+ * @link https://php.net/manual/en/imagickpixeliterator.resetiterator.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function resetIterator () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Syncs the pixel iterator
+ * @link https://php.net/manual/en/imagickpixeliterator.synciterator.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function syncIterator () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Deallocates resources associated with a PixelIterator
+ * @link https://php.net/manual/en/imagickpixeliterator.destroy.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function destroy () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Clear resources associated with a PixelIterator
+ * @link https://php.net/manual/en/imagickpixeliterator.clear.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function clear () {}
+
+ /**
+ * @param Imagick $Imagick
+ */
+ public static function getpixeliterator (Imagick $Imagick) {}
+
+ /**
+ * @param Imagick $Imagick
+ * @param $x
+ * @param $y
+ * @param $columns
+ * @param $rows
+ */
+ public static function getpixelregioniterator (Imagick $Imagick, $x, $y, $columns, $rows) {}
+
+ public function key () {}
+
+ public function next () {}
+
+ public function rewind () {}
+
+ public function current () {}
+
+ public function valid () {}
+
+}
+
+/**
+ * @method clone()
+ * @link https://php.net/manual/en/class.imagickpixel.php
+ */
+class ImagickPixel {
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the normalized HSL color of the ImagickPixel object
+ * @link https://php.net/manual/en/imagickpixel.gethsl.php
+ * @return array the HSL value in an array with the keys "hue",
+ * "saturation", and "luminosity". Throws ImagickPixelException on failure.
+ * @throws ImagickPixelException on failure
+ */
+ public function getHSL () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the normalized HSL color
+ * @link https://php.net/manual/en/imagickpixel.sethsl.php
+ * @param float $hue <p>
+ * The normalized value for hue, described as a fractional arc
+ * (between 0 and 1) of the hue circle, where the zero value is
+ * red.
+ * </p>
+ * @param float $saturation <p>
+ * The normalized value for saturation, with 1 as full saturation.
+ * </p>
+ * @param float $luminosity <p>
+ * The normalized value for luminosity, on a scale from black at
+ * 0 to white at 1, with the full HS value at 0.5 luminosity.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setHSL ($hue, $saturation, $luminosity) {}
+
+ public function getColorValueQuantum () {}
+
+ /**
+ * @param $color_value
+ */
+ public function setColorValueQuantum ($color_value) {}
+
+ public function getIndex () {}
+
+ /**
+ * @param $index
+ */
+ public function setIndex ($index) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * The ImagickPixel constructor
+ * @link https://php.net/manual/en/imagickpixel.construct.php
+ * @param string $color [optional] <p>
+ * The optional color string to use as the initial value of this object.
+ * </p>
+ */
+ public function __construct ($color = null) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the color
+ * @link https://php.net/manual/en/imagickpixel.setcolor.php
+ * @param string $color <p>
+ * The color definition to use in order to initialise the
+ * ImagickPixel object.
+ * </p>
+ * @return bool <b>TRUE</b> if the specified color was set, <b>FALSE</b> otherwise.
+ */
+ public function setColor ($color) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Sets the normalized value of one of the channels
+ * @link https://php.net/manual/en/imagickpixel.setcolorvalue.php
+ * @param int $color <p>
+ * One of the Imagick color constants e.g. \Imagick::COLOR_GREEN or \Imagick::COLOR_ALPHA.
+ * </p>
+ * @param float $value <p>
+ * The value to set this channel to, ranging from 0 to 1.
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function setColorValue ($color, $value) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Gets the normalized value of the provided color channel
+ * @link https://php.net/manual/en/imagickpixel.getcolorvalue.php
+ * @param int $color <p>
+ * The color to get the value of, specified as one of the Imagick color
+ * constants. This can be one of the RGB colors, CMYK colors, alpha and
+ * opacity e.g (Imagick::COLOR_BLUE, Imagick::COLOR_MAGENTA).
+ * </p>
+ * @return float The value of the channel, as a normalized floating-point number, throwing
+ * ImagickPixelException on error.
+ * @throws ImagickPixelException on error
+ */
+ public function getColorValue ($color) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Clears resources associated with this object
+ * @link https://php.net/manual/en/imagickpixel.clear.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function clear () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Deallocates resources associated with this object
+ * @link https://php.net/manual/en/imagickpixel.destroy.php
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function destroy () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Check the distance between this color and another
+ * @link https://php.net/manual/en/imagickpixel.issimilar.php
+ * @param ImagickPixel $color <p>
+ * The ImagickPixel object to compare this object against.
+ * </p>
+ * @param float $fuzz <p>
+ * The maximum distance within which to consider these colors as similar.
+ * The theoretical maximum for this value is the square root of three
+ * (1.732).
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function isSimilar (ImagickPixel $color, $fuzz) {}
+
+ /**
+ * (No version information available, might only be in SVN)<br/>
+ * Check the distance between this color and another
+ * @link https://php.net/manual/en/imagickpixel.ispixelsimilar.php
+ * @param ImagickPixel $color <p>
+ * The ImagickPixel object to compare this object against.
+ * </p>
+ * @param float $fuzz <p>
+ * The maximum distance within which to consider these colors as similar.
+ * The theoretical maximum for this value is the square root of three
+ * (1.732).
+ * </p>
+ * @return bool <b>TRUE</b> on success.
+ */
+ public function isPixelSimilar (ImagickPixel $color, $fuzz) {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the color
+ * @link https://php.net/manual/en/imagickpixel.getcolor.php
+ * @param bool $normalized [optional] <p>
+ * Normalize the color values
+ * </p>
+ * @return array An array of channel values, each normalized if <b>TRUE</b> is given as param. Throws
+ * ImagickPixelException on error.
+ * @throws ImagickPixelException on error.
+ */
+ public function getColor ($normalized = false) {}
+
+ /**
+ * (PECL imagick 2.1.0)<br/>
+ * Returns the color as a string
+ * @link https://php.net/manual/en/imagickpixel.getcolorasstring.php
+ * @return string the color of the ImagickPixel object as a string.
+ */
+ public function getColorAsString () {}
+
+ /**
+ * (PECL imagick 2.0.0)<br/>
+ * Returns the color count associated with this color
+ * @link https://php.net/manual/en/imagickpixel.getcolorcount.php
+ * @return int the color count as an integer on success, throws
+ * ImagickPixelException on failure.
+ * @throws ImagickPixelException on failure.
+ */
+ public function getColorCount () {}
+
+ /**
+ * @param $colorCount
+ */
+ public function setColorCount ($colorCount) {}
+
+
+ /**
+ * Returns true if the distance between two colors is less than the specified distance. The fuzz value should be in the range 0-QuantumRange.<br>
+ * The maximum value represents the longest possible distance in the colorspace. e.g. from RGB(0, 0, 0) to RGB(255, 255, 255) for the RGB colorspace
+ * @link https://php.net/manual/en/imagickpixel.ispixelsimilarquantum.php
+ * @param string $pixel
+ * @param string $fuzz
+ * @return bool
+ * @since 3.3.0
+ */
+ public function isPixelSimilarQuantum($color, $fuzz) { }
+
+ /**
+ * Returns the color of the pixel in an array as Quantum values. If ImageMagick was compiled as HDRI these will be floats, otherwise they will be integers.
+ * @link https://php.net/manual/en/imagickpixel.getcolorquantum.php
+ * @return mixed The quantum value of the color element. Float if ImageMagick was compiled with HDRI, otherwise an int.
+ * @since 3.3.0
+ */
+ public function getColorQuantum() { }
+
+ /**
+ * Sets the color count associated with this color from another ImagickPixel object.
+ *
+ * @param ImagickPixel $srcPixel
+ * @return bool
+ * @since 3.4.1
+ */
+ public function setColorFromPixel(ImagickPixel $srcPixel) { }
+}
+// End of imagick v.3.2.0RC1
+
+// Start of Imagick v3.3.0RC1
+
+/**
+ * @link https://php.net/manual/en/class.imagickkernel.php
+ */
+class ImagickKernel {
+ /**
+ * Attach another kernel to this kernel to allow them to both be applied in a single morphology or filter function. Returns the new combined kernel.
+ * @link https://php.net/manual/en/imagickkernel.addkernel.php
+ * @param ImagickKernel $imagickKernel
+ * @return void
+ * @since 3.3.0
+ */
+ public function addKernel(ImagickKernel $imagickKernel) { }
+
+ /**
+ * Adds a given amount of the 'Unity' Convolution Kernel to the given pre-scaled and normalized Kernel. This in effect adds that amount of the original image into the resulting convolution kernel. The resulting effect is to convert the defined kernels into blended soft-blurs, unsharp kernels or into sharpening kernels.
+ * @link https://php.net/manual/en/imagickkernel.addunitykernel.php
+ * @return void
+ * @since 3.3.0
+ */
+ public function addUnityKernel() { }
+
+ /**
+ * Create a kernel from a builtin in kernel. See https://www.imagemagick.org/Usage/morphology/#kernel for examples.<br>
+ * Currently the 'rotation' symbols are not supported. Example: $diamondKernel = ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DIAMOND, "2");
+ * @link https://php.net/manual/en/imagickkernel.frombuiltin.php
+ * @param string $kernelType The type of kernel to build e.g. \Imagick::KERNEL_DIAMOND
+ * @param string $kernelString A string that describes the parameters e.g. "4,2.5"
+ * @return void
+ * @since 3.3.0
+ */
+ public static function fromBuiltin($kernelType, $kernelString) { }
+
+ /**
+ * Create a kernel from a builtin in kernel. See https://www.imagemagick.org/Usage/morphology/#kernel for examples.<br>
+ * Currently the 'rotation' symbols are not supported. Example: $diamondKernel = ImagickKernel::fromBuiltIn(\Imagick::KERNEL_DIAMOND, "2");
+ * @link https://php.net/manual/en/imagickkernel.frombuiltin.php
+ * @see https://www.imagemagick.org/Usage/morphology/#kernel
+ * @param array $matrix A matrix (i.e. 2d array) of values that define the kernel. Each element should be either a float value, or FALSE if that element shouldn't be used by the kernel.
+ * @param array $origin [optional] Which element of the kernel should be used as the origin pixel. e.g. For a 3x3 matrix specifying the origin as [2, 2] would specify that the bottom right element should be the origin pixel.
+ * @return ImagickKernel
+ * @since 3.3.0
+ */
+ public static function fromMatrix($matrix, $origin) { }
+
+ /**
+ * Get the 2d matrix of values used in this kernel. The elements are either float for elements that are used or 'false' if the element should be skipped.
+ * @link https://php.net/manual/en/imagickkernel.getmatrix.php
+ * @return array A matrix (2d array) of the values that represent the kernel.
+ * @since 3.3.0
+ */
+ public function getMatrix() { }
+
+ /**
+ * ScaleKernelInfo() scales the given kernel list by the given amount, with or without normalization of the sum of the kernel values (as per given flags).<br>
+ * The exact behaviour of this function depends on the normalization type being used please see https://www.imagemagick.org/api/morphology.php#ScaleKernelInfo for details.<br>
+ * Flag should be one of Imagick::NORMALIZE_KERNEL_VALUE, Imagick::NORMALIZE_KERNEL_CORRELATE, Imagick::NORMALIZE_KERNEL_PERCENT or not set.
+ * @link https://php.net/manual/en/imagickkernel.scale.php
+ * @see https://www.imagemagick.org/api/morphology.php#ScaleKernelInfo
+ * @return void
+ * @since 3.3.0
+ */
+ public function scale() { }
+
+ /**
+ * Separates a linked set of kernels and returns an array of ImagickKernels.
+ * @link https://php.net/manual/en/imagickkernel.separate.php
+ * @return void
+ * @since 3.3.0
+ */
+ public function seperate() { }
+}
diff --git a/vendor/chillerlan/php-qrcode/.scrutinizer.yml b/vendor/chillerlan/php-qrcode/.scrutinizer.yml
new file mode 100644
index 000000000..2a7e7028b
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/.scrutinizer.yml
@@ -0,0 +1,16 @@
+build:
+ nodes:
+ analysis:
+ tests:
+ override:
+ - php-scrutinizer-run
+ environment:
+ php: 8.0.0
+
+filter:
+ excluded_paths:
+ - examples/*
+ - tests/*
+ - vendor/*
+ - .github/*
+ - .phan/*
diff --git a/vendor/chillerlan/php-qrcode/LICENSE b/vendor/chillerlan/php-qrcode/LICENSE
new file mode 100644
index 000000000..dac852818
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Smiley <smiley@chillerlan.net>
+
+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/vendor/chillerlan/php-qrcode/README.md b/vendor/chillerlan/php-qrcode/README.md
new file mode 100644
index 000000000..f266e9bd5
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/README.md
@@ -0,0 +1,422 @@
+# chillerlan/php-qrcode
+
+A PHP 7.4+ QR Code library based on the [implementation](https://github.com/kazuhikoarase/qrcode-generator) by [Kazuhiko Arase](https://github.com/kazuhikoarase),
+namespaced, cleaned up, improved and other stuff.
+
+**Attention:** there is now also a javascript port: [chillerlan/js-qrcode](https://github.com/chillerlan/js-qrcode).
+
+[![PHP Version Support][php-badge]][php]
+[![Packagist version][packagist-badge]][packagist]
+[![License][license-badge]][license]
+[![CodeCov][coverage-badge]][coverage]
+[![Scrunitizer CI][scrutinizer-badge]][scrutinizer]
+[![Packagist downloads][downloads-badge]][downloads]<br/>
+[![Continuous Integration][gh-action-badge]][gh-action]
+
+[php-badge]: https://img.shields.io/packagist/php-v/chillerlan/php-qrcode?logo=php&color=8892BF
+[php]: https://www.php.net/supported-versions.php
+[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-qrcode.svg?logo=packagist
+[packagist]: https://packagist.org/packages/chillerlan/php-qrcode
+[license-badge]: https://img.shields.io/github/license/chillerlan/php-qrcode.svg
+[license]: https://github.com/chillerlan/php-qrcode/blob/main/LICENSE
+[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-qrcode.svg?logo=codecov
+[coverage]: https://codecov.io/github/chillerlan/php-qrcode
+[scrutinizer-badge]: https://img.shields.io/scrutinizer/g/chillerlan/php-qrcode.svg?logo=scrutinizer
+[scrutinizer]: https://scrutinizer-ci.com/g/chillerlan/php-qrcode
+[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-qrcode.svg?logo=packagist
+[downloads]: https://packagist.org/packages/chillerlan/php-qrcode/stats
+[gh-action-badge]: https://github.com/chillerlan/php-qrcode/workflows/Continuous%20Integration/badge.svg
+[gh-action]: https://github.com/chillerlan/php-qrcode/actions?query=workflow%3A%22Continuous+Integration%22+branch%3Av4.3.x
+
+# Documentation
+
+## Requirements
+- PHP 7.4+
+ - `ext-mbstring`
+ - optional:
+ - `ext-json`, `ext-gd`
+ - `ext-imagick` with [ImageMagick](https://imagemagick.org) installed
+ - [`setasign/fpdf`](https://github.com/setasign/fpdf) for the PDF output module
+
+## Installation
+**requires [composer](https://getcomposer.org)**
+
+via terminal: `composer require chillerlan/php-qrcode`
+
+*composer.json*
+```json
+{
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "chillerlan/php-qrcode": "v4.3.x-dev"
+ }
+}
+```
+
+Note: replace `v4.3.x-dev` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^4.3` - see [releases](https://github.com/chillerlan/php-qrcode/releases) for valid versions.
+For PHP version ...
+ - 7.4+ use `^4.3`
+ - 7.2+ use `^3.4.1` (v3.4.1 also supports PHP8)
+ - 7.0+ use `^2.0`
+ - 5.6+ use `^1.0` (please let PHP 5 die!)
+
+In case you want to keep using `v4.3.x-dev`, specify the hash of a commit to avoid running into unforseen issues like so: `v4.3.x-dev#c115f7bc51d466ccb24c544e88329804aad8c2a0`
+
+PSA: [PHP 7.0 - 7.3 are EOL](https://www.php.net/supported-versions.php) and therefore the respective `QRCode` versions are also no longer supported!
+
+## Quickstart
+We want to encode this URI for a mobile authenticator into a QRcode image:
+```php
+$data = 'otpauth://totp/test?secret=B3JX4VCVJDVNXNZ5&issuer=chillerlan.net';
+
+// quick and simple:
+echo '<img src="'.(new QRCode)->render($data).'" alt="QR Code" />';
+```
+
+<p align="center">
+ <img alt="QR codes are awesome!" src="https://raw.githubusercontent.com/chillerlan/php-qrcode/v4.3.x/examples/example_image.png">
+ <img alt="QR codes are awesome!" src="https://raw.githubusercontent.com/chillerlan/php-qrcode/v4.3.x/examples/example_svg.png">
+</p>
+
+Wait, what was that? Please again, slower!
+
+
+## Advanced usage
+
+Ok, step by step. First you'll need a `QRCode` instance, which can be optionally invoked with a `QROptions` (or a [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/master/src/SettingsContainerInterface.php), respectively) object as the only parameter.
+
+```php
+$options = new QROptions([
+ 'version' => 5,
+ 'outputType' => QRCode::OUTPUT_MARKUP_SVG,
+ 'eccLevel' => QRCode::ECC_L,
+]);
+
+// invoke a fresh QRCode instance
+$qrcode = new QRCode($options);
+
+// and dump the output
+$qrcode->render($data);
+
+// ...with additional cache file
+$qrcode->render($data, '/path/to/file.svg');
+```
+
+In case you just want the raw QR code matrix, call `QRCode::getMatrix()` - this method is also called internally from `QRCode::render()`. See also [[Custom output interface]].
+
+```php
+$matrix = $qrcode->getMatrix($data);
+
+foreach($matrix->matrix() as $y => $row){
+ foreach($row as $x => $module){
+
+ // get a module's value
+ $value = $module;
+
+ // or via the matrix's getter method
+ $value = $matrix->get($x, $y);
+
+ // boolean check a module
+ if($matrix->check($x, $y)){ // if($module >> 8 > 0)
+ // do stuff, the module is dark
+ }
+ else{
+ // do other stuff, the module is light
+ }
+
+ }
+}
+```
+
+Have a look [in the examples folder](https://github.com/chillerlan/php-qrcode/tree/main/examples) for some more usage examples.
+
+### Notes
+The QR encoder, especially the subroutines for mask pattern testing, can cause high CPU load on increased matrix size.
+You can avoid a part of this load by choosing a fast output module, like `OUTPUT_IMAGE_*` and maybe setting the mask pattern manually (which may result in unreadable QR Codes).
+Oh hey and don't forget to sanitize any user input!
+
+
+## Custom output interface
+
+Instead of bloating your code you can simply create your own output interface by creating a `QROutputInterface` (i.e. extending `QROutputAbstract`).
+
+```php
+class MyCustomOutput extends QROutputAbstract{
+
+ // inherited from QROutputAbstract
+ protected QRMatrix $matrix; // QRMatrix
+ protected int $moduleCount; // modules QRMatrix::size()
+ protected QROptions $options; // MyCustomOptions or QROptions
+ protected int $scale; // scale factor from options
+ protected int $length; // length of the matrix ($moduleCount * $scale)
+
+ // ...check/set default module values (abstract method, called by the constructor)
+ protected function setModuleValues():void{
+ // $this->moduleValues = ...
+ }
+
+ // QROutputInterface::dump()
+ public function dump(string $file = null):string{
+ $output = '';
+
+ for($row = 0; $row < $this->moduleCount; $row++){
+ for($col = 0; $col < $this->moduleCount; $col++){
+ $output .= (int)$this->matrix->check($col, $row);
+ }
+ }
+
+ return $output;
+ }
+
+}
+```
+For more examples, have a look at the [built-in output modules](https://github.com/chillerlan/php-qrcode/tree/main/src/Output).
+
+In case you need additional settings for your output module, just extend `QROptions`...
+```
+class MyCustomOptions extends QROptions{
+ protected string $myParam = 'defaultValue';
+
+ // ...
+}
+```
+...or use the [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php), which is the more flexible approach.
+
+```php
+trait MyCustomOptionsTrait{
+ protected string $myParam = 'defaultValue';
+
+ // ...
+}
+```
+set the options:
+```php
+$myOptions = [
+ 'version' => 5,
+ 'eccLevel' => QRCode::ECC_L,
+ 'outputType' => QRCode::OUTPUT_CUSTOM,
+ 'outputInterface' => MyCustomOutput::class,
+ // your custom settings
+ 'myParam' => 'whatever value',
+ ];
+
+// extends QROptions
+$myCustomOptions = new MyCustomOptions($myOptions);
+
+// using the SettingsContainerInterface
+$myCustomOptions = new class($myOptions) extends SettingsContainerAbstract{
+ use QROptionsTrait, MyCustomOptionsTrait;
+};
+
+```
+
+You can then call `QRCode` with the custom modules...
+```php
+(new QRCode($myCustomOptions))->render($data);
+```
+...or invoke the `QROutputInterface` manually.
+```php
+$qrOutputInterface = new MyCustomOutput($myCustomOptions, (new QRCode($myCustomOptions))->getMatrix($data));
+
+//dump the output, which is equivalent to QRCode::render()
+$qrOutputInterface->dump();
+```
+
+### Custom module values
+
+You can distinguish between different parts of the matrix, namely the several required patterns from the QR Code specification, and use them in different ways, i.e. to assign different colors for each part of the matrix (see the [image example](https://github.com/chillerlan/php-qrcode/blob/main/examples/image.php)).
+The dark value is the module value (light) shifted by 8 bits to the left: `$value = $M_TYPE << ($bool ? 8 : 0);`, where `$M_TYPE` is one of the `QRMatrix::M_*` constants.
+You can check the value for a type explicitly like...
+```php
+// for true (dark)
+($value >> 8) === $M_TYPE;
+
+// for false (light)
+$value === $M_TYPE;
+```
+...or you can perform a loose check, ignoring the module value
+```php
+// for true
+($value >> 8) > 0;
+
+// for false
+($value >> 8) === 0;
+```
+
+See also `QRMatrix::set()`, `QRMatrix::check()` and [`QRMatrix` constants](#qrmatrix-constants).
+
+To map the values and properly render the modules for the given `QROutputInterface`, it's necessary to overwrite the default values:
+```php
+$options = new QROptions;
+
+// for HTML, SVG and ImageMagick
+$options->moduleValues = [
+ // finder
+ 1536 => '#A71111', // dark (true)
+ 6 => '#FFBFBF', // light (false)
+ // alignment
+ 2560 => '#A70364',
+ 10 => '#FFC9C9',
+ // timing
+ 3072 => '#98005D',
+ 12 => '#FFB8E9',
+ // format
+ 3584 => '#003804',
+ 14 => '#00FB12',
+ // version
+ 4096 => '#650098',
+ 16 => '#E0B8FF',
+ // data
+ 1024 => '#4A6000',
+ 4 => '#ECF9BE',
+ // darkmodule
+ 512 => '#080063',
+ // separator
+ 8 => '#AFBFBF',
+ // quietzone
+ 18 => '#FFFFFF',
+];
+
+// for the image output types
+$options->moduleValues = [
+ 512 => [0, 0, 0],
+ // ...
+];
+
+// for string/text output
+$options->moduleValues = [
+ 512 => '#',
+ // ...
+];
+```
+
+
+## Public API
+
+### `QRCode` API
+#### Methods
+method | return | description
+------ | ------ | -----------
+`__construct(QROptions $options = null)` | - | see [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php)
+`render(string $data, string $file = null)` | mixed, `QROutputInterface::dump()` | renders a QR Code for the given `$data` and `QROptions`, saves `$file` optional
+`getMatrix(string $data)` | `QRMatrix` | returns a `QRMatrix` object for the given `$data` and current `QROptions`
+`initDataInterface(string $data)` | `QRDataInterface` | returns a fresh `QRDataInterface` for the given `$data`
+`isNumber(string $string)` | bool | checks if a string qualifies for `Number`
+`isAlphaNum(string $string)` | bool | checks if a string qualifies for `AlphaNum`
+`isKanji(string $string)` | bool | checks if a string qualifies for `Kanji`
+`isByte(string $string)` | bool | checks if a string is non-empty
+
+#### Constants
+name | description
+---- | -----------
+`VERSION_AUTO` | `QROptions::$version`
+`MASK_PATTERN_AUTO` | `QROptions::$maskPattern`
+`OUTPUT_MARKUP_SVG`, `OUTPUT_MARKUP_HTML` | `QROptions::$outputType` markup
+`OUTPUT_IMAGE_PNG`, `OUTPUT_IMAGE_JPG`, `OUTPUT_IMAGE_GIF` | `QROptions::$outputType` image
+`OUTPUT_STRING_JSON`, `OUTPUT_STRING_TEXT` | `QROptions::$outputType` string
+`OUTPUT_IMAGICK` | `QROptions::$outputType` ImageMagick
+`OUTPUT_FPDF` | `QROptions::$outputType` PDF, using [FPDF](https://github.com/setasign/fpdf)
+`OUTPUT_CUSTOM` | `QROptions::$outputType`, requires `QROptions::$outputInterface`
+`ECC_L`, `ECC_M`, `ECC_Q`, `ECC_H`, | ECC-Level: 7%, 15%, 25%, 30% in `QROptions::$eccLevel`
+`DATA_NUMBER`, `DATA_ALPHANUM`, `DATA_BYTE`, `DATA_KANJI` | `QRDataInterface::$datamode`
+
+
+### `QRMatrix` API
+
+#### Methods
+method | return | description
+------ | ------ | -----------
+`__construct(int $version, int $eclevel)` | - | -
+`init(int $maskPattern, bool $test = null)` | `QRMatrix` |
+`matrix()` | array | the internal matrix representation as a 2 dimensional array
+`version()` | int | the current QR Code version
+`eccLevel()` | int | current ECC level
+`maskPattern()` | int | the used mask pattern
+`size()` | int | the absoulute size of the matrix, including quiet zone (if set). `$version * 4 + 17 + 2 * $quietzone`
+`get(int $x, int $y)` | int | returns the value of the module
+`set(int $x, int $y, bool $value, int $M_TYPE)` | `QRMatrix` | sets the `$M_TYPE` value for the module
+`check(int $x, int $y)` | bool | checks whether a module is true (dark) or false (light)
+
+#### Constants
+name | light (false) | dark (true) | description
+---- | ------------- | ----------- | -----------
+`M_NULL` | 0 | - | module not set (should never appear. if so, there's an error)
+`M_DARKMODULE` | - | 512 | once per matrix at `$xy = [8, 4 * $version + 9]`
+`M_DATA` | 4 | 1024 | the actual encoded data
+`M_FINDER` | 6 | 1536 | the 7x7 finder patterns
+`M_SEPARATOR` | 8 | - | separator lines around the finder patterns
+`M_ALIGNMENT` | 10 | 2560 | the 5x5 alignment patterns
+`M_TIMING` | 12 | 3072 | the timing pattern lines
+`M_FORMAT` | 14 | 3584 | format information pattern
+`M_VERSION` | 16 | 4096 | version information pattern
+`M_QUIETZONE` | 18 | - | margin around the QR Code
+`M_LOGO` | 20 | - | space for a logo image (not used yet)
+`M_TEST` | 255 | 65280 | test value
+
+### `QROptions` API
+
+#### Properties
+property | type | default | allowed | description
+-------- | ---- | ------- | ------- | -----------
+`$version` | int | `QRCode::VERSION_AUTO` | 1...40 | the [QR Code version number](http://www.qrcode.com/en/about/version.html)
+`$versionMin` | int | 1 | 1...40 | Minimum QR version (if `$version = QRCode::VERSION_AUTO`)
+`$versionMax` | int | 40 | 1...40 | Maximum QR version (if `$version = QRCode::VERSION_AUTO`)
+`$eccLevel` | int | `QRCode::ECC_L` | `QRCode::ECC_X` | Error correct level, where X = L (7%), M (15%), Q (25%), H (30%)
+`$maskPattern` | int | `QRCode::MASK_PATTERN_AUTO` | 0...7 | Mask Pattern to use
+`$addQuietzone` | bool | `true` | - | Add a "quiet zone" (margin) according to the QR code spec
+`$quietzoneSize` | int | 4 | clamped to 0 ... `$matrixSize / 2` | Size of the quiet zone
+`$dataModeOverride` | string | `null` | `Number`, `AlphaNum`, `Kanji`, `Byte` | allows overriding the data type detection
+`$outputType` | string | `QRCode::OUTPUT_IMAGE_PNG` | `QRCode::OUTPUT_*` | built-in output type
+`$outputInterface` | string | `null` | * | FQCN of the custom `QROutputInterface` if `QROptions::$outputType` is set to `QRCode::OUTPUT_CUSTOM`
+`$cachefile` | string | `null` | * | optional cache file path
+`$eol` | string | `PHP_EOL` | * | newline string (HTML, SVG, TEXT)
+`$scale` | int | 5 | * | size of a QR code pixel (SVG, IMAGE_*), HTML -> via CSS
+`$cssClass` | string | `null` | * | a common css class
+`$svgOpacity` | float | 1.0 | 0...1 |
+`$svgDefs` | string | * | * | anything between [`<defs>`](https://developer.mozilla.org/docs/Web/SVG/Element/defs)
+`$svgViewBoxSize` | int | `null` | * | a positive integer which defines width/height of the [viewBox attribute](https://css-tricks.com/scale-svg/#article-header-id-3)
+`$textDark` | string | '🔴' | * | string substitute for dark
+`$textLight` | string | '⭕' | * | string substitute for light
+`$markupDark` | string | '#000' | * | markup substitute for dark (CSS value)
+`$markupLight` | string | '#fff' | * | markup substitute for light (CSS value)
+`$imageBase64` | bool | `true` | - | whether to return the image data as base64 or raw like from `file_get_contents()`
+`$imageTransparent` | bool | `true` | - | toggle transparency (no jpeg support)
+`$imageTransparencyBG` | array | `[255, 255, 255]` | `[R, G, B]` | the RGB values for the transparent color, see [`imagecolortransparent()`](http://php.net/manual/function.imagecolortransparent.php)
+`$pngCompression` | int | -1 | -1 ... 9 | `imagepng()` compression level, -1 = auto
+`$jpegQuality` | int | 85 | 0 - 100 | `imagejpeg()` quality
+`$imagickFormat` | string | 'png' | * | ImageMagick output type, see `Imagick::setType()`
+`$imagickBG` | string | `null` | * | ImageMagick background color, see `ImagickPixel::__construct()`
+`$moduleValues` | array | `null` | * | Module values map, see [[Custom output interface]] and `QROutputInterface::DEFAULT_MODULE_VALUES`
+
+
+## Framework Integration
+- Drupal:
+ - [Google Authenticator Login `ga_login`](https://www.drupal.org/project/ga_login)
+- Symfony
+ - [phpqrcode-bundle](https://github.com/jonasarts/phpqrcode-bundle)
+- WordPress:
+ - [`wp-two-factor-auth`](https://github.com/sjinks/wp-two-factor-auth)
+ - [`simple-2fa`](https://wordpress.org/plugins/simple-2fa/)
+ - [`wordpress-seo`](https://github.com/Yoast/wordpress-seo)
+ - [`floating-share-button`](https://github.com/qriouslad/floating-share-button)
+- WoltLab Suite
+ - [two-step-verification](http://pluginstore.woltlab.com/file/3007-two-step-verification/)
+- [Appwrite](https://github.com/appwrite/appwrite)
+- [Cachet](https://github.com/CachetHQ/Cachet)
+- [twill](https://github.com/area17/twill)
+- other uses: [dependents](https://github.com/chillerlan/php-qrcode/network/dependents) / [packages](https://github.com/chillerlan/php-qrcode/network/dependents?dependent_type=PACKAGE)
+
+## Shameless advertising
+Hi, please check out my other projects that are way cooler than qrcodes!
+
+- [php-oauth-core](https://github.com/chillerlan/php-oauth-core) - an OAuth 1/2 client library along with a bunch of [providers](https://github.com/chillerlan/php-oauth-providers)
+- [php-httpinterface](https://github.com/chillerlan/php-httpinterface) - a PSR-7/15/17/18 implemetation
+- [php-database](https://github.com/chillerlan/php-database) - a database client & querybuilder for MySQL, Postgres, SQLite, MSSQL, Firebird
+
+## Disclaimer!
+I don't take responsibility for molten CPUs, misled applications, failed log-ins etc.. Use at your own risk!
+
+### Trademark Notice
+
+The word "QR Code" is a registered trademark of *DENSO WAVE INCORPORATED*<br>
+https://www.qrcode.com/en/faq.html#patentH2Title
diff --git a/vendor/chillerlan/php-qrcode/composer.json b/vendor/chillerlan/php-qrcode/composer.json
new file mode 100644
index 000000000..afe5bf68e
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/composer.json
@@ -0,0 +1,61 @@
+{
+ "name": "chillerlan/php-qrcode",
+ "description": "A QR code generator. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
+ "license": "MIT",
+ "minimum-stability": "stable",
+ "type": "library",
+ "keywords": [
+ "QR code", "qrcode", "qr", "qrcode-generator", "phpqrcode"
+ ],
+ "authors": [
+ {
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ },
+ {
+ "name": "Contributors",
+ "homepage":"https://github.com/chillerlan/php-qrcode/graphs/contributors"
+ }
+ ],
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "ext-mbstring": "*",
+ "chillerlan/php-settings-container": "^2.1.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5",
+ "phan/phan": "^5.3",
+ "setasign/fpdf": "^1.8.2"
+ },
+ "suggest": {
+ "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
+ "setasign/fpdf": "Required to use the QR FPDF output."
+ },
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\QRCode\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "chillerlan\\QRCodePublic\\": "public/",
+ "chillerlan\\QRCodeTest\\": "tests/",
+ "chillerlan\\QRCodeExamples\\": "examples/"
+ }
+ },
+ "scripts": {
+ "phpunit": "@php vendor/bin/phpunit",
+ "phan": "@php vendor/bin/phan"
+ },
+ "config": {
+ "lock": false,
+ "sort-packages": true,
+ "platform-check": true
+ }
+}
diff --git a/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php b/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php
new file mode 100644
index 000000000..3664989b8
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/MyCustomOutput.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Class MyCustomOutput
+ *
+ * @filesource MyCustomOutput.php
+ * @created 24.12.2017
+ * @package chillerlan\QRCodeExamples
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\Output\QROutputAbstract;
+
+class MyCustomOutput extends QROutputAbstract{
+
+ protected function setModuleValues():void{
+ // TODO: Implement setModuleValues() method.
+ }
+
+ public function dump(string $file = null){
+
+ $output = '';
+
+ for($row = 0; $row < $this->moduleCount; $row++){
+ for($col = 0; $col < $this->moduleCount; $col++){
+ $output .= (int)$this->matrix->check($col, $row);
+ }
+
+ $output .= \PHP_EOL;
+ }
+
+ return $output;
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php b/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php
new file mode 100644
index 000000000..76aa5ced7
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/QRImageWithLogo.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Class QRImageWithLogo
+ *
+ * @filesource QRImageWithLogo.php
+ * @created 18.11.2020
+ * @package chillerlan\QRCodeExamples
+ * @author smiley <smiley@chillerlan.net>
+ * @copyright 2020 smiley
+ * @license MIT
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\Output\{QRCodeOutputException, QRImage};
+
+use function imagecopyresampled, imagecreatefrompng, imagesx, imagesy, is_file, is_readable;
+
+/**
+ * @property \chillerlan\QRCodeExamples\LogoOptions $options
+ */
+class QRImageWithLogo extends QRImage{
+
+ /**
+ * @param string|null $file
+ * @param string|null $logo
+ *
+ * @return string
+ * @throws \chillerlan\QRCode\Output\QRCodeOutputException
+ */
+ public function dump(string $file = null, string $logo = null):string{
+ // set returnResource to true to skip further processing for now
+ $this->options->returnResource = true;
+
+ // of course you could accept other formats too (such as resource or Imagick)
+ // i'm not checking for the file type either for simplicity reasons (assuming PNG)
+ if(!is_file($logo) || !is_readable($logo)){
+ throw new QRCodeOutputException('invalid logo');
+ }
+
+ $this->matrix->setLogoSpace(
+ $this->options->logoSpaceWidth,
+ $this->options->logoSpaceHeight
+ // not utilizing the position here
+ );
+
+ // there's no need to save the result of dump() into $this->image here
+ parent::dump($file);
+
+ $im = imagecreatefrompng($logo);
+
+ // get logo image size
+ $w = imagesx($im);
+ $h = imagesy($im);
+
+ // set new logo size, leave a border of 1 module (no proportional resize/centering)
+ $lw = ($this->options->logoSpaceWidth - 2) * $this->options->scale;
+ $lh = ($this->options->logoSpaceHeight - 2) * $this->options->scale;
+
+ // get the qrcode size
+ $ql = $this->matrix->size() * $this->options->scale;
+
+ // scale the logo and copy it over. done!
+ imagecopyresampled($this->image, $im, ($ql - $lw) / 2, ($ql - $lh) / 2, 0, 0, $lw, $lh, $w, $h);
+
+ $imageData = $this->dumpImage();
+
+ if($file !== null){
+ $this->saveToFile($imageData, $file);
+ }
+
+ if($this->options->imageBase64){
+ $imageData = 'data:image/'.$this->options->outputType.';base64,'.base64_encode($imageData);
+ }
+
+ return $imageData;
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php b/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php
new file mode 100644
index 000000000..fe6b962a9
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/QRImageWithText.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Class QRImageWithText
+ *
+ * example for additional text
+ *
+ * @link https://github.com/chillerlan/php-qrcode/issues/35
+ *
+ * @filesource QRImageWithText.php
+ * @created 22.06.2019
+ * @package chillerlan\QRCodeExamples
+ * @author smiley <smiley@chillerlan.net>
+ * @copyright 2019 smiley
+ * @license MIT
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\Output\QRImage;
+
+use function base64_encode, imagechar, imagecolorallocate, imagecolortransparent, imagecopymerge, imagecreatetruecolor,
+ imagedestroy, imagefilledrectangle, imagefontwidth, in_array, round, str_split, strlen;
+
+class QRImageWithText extends QRImage{
+
+ /**
+ * @param string|null $file
+ * @param string|null $text
+ *
+ * @return string
+ */
+ public function dump(string $file = null, string $text = null):string{
+ // set returnResource to true to skip further processing for now
+ $this->options->returnResource = true;
+
+ // there's no need to save the result of dump() into $this->image here
+ parent::dump($file);
+
+ // render text output if a string is given
+ if($text !== null){
+ $this->addText($text);
+ }
+
+ $imageData = $this->dumpImage();
+
+ if($file !== null){
+ $this->saveToFile($imageData, $file);
+ }
+
+ if($this->options->imageBase64){
+ $imageData = 'data:image/'.$this->options->outputType.';base64,'.base64_encode($imageData);
+ }
+
+ return $imageData;
+ }
+
+ /**
+ * @param string $text
+ */
+ protected function addText(string $text):void{
+ // save the qrcode image
+ $qrcode = $this->image;
+
+ // options things
+ $textSize = 3; // see imagefontheight() and imagefontwidth()
+ $textBG = [200, 200, 200];
+ $textColor = [50, 50, 50];
+
+ $bgWidth = $this->length;
+ $bgHeight = $bgWidth + 20; // 20px extra space
+
+ // create a new image with additional space
+ $this->image = imagecreatetruecolor($bgWidth, $bgHeight);
+ $background = imagecolorallocate($this->image, ...$textBG);
+
+ // allow transparency
+ if($this->options->imageTransparent && in_array($this->options->outputType, $this::TRANSPARENCY_TYPES, true)){
+ imagecolortransparent($this->image, $background);
+ }
+
+ // fill the background
+ imagefilledrectangle($this->image, 0, 0, $bgWidth, $bgHeight, $background);
+
+ // copy over the qrcode
+ imagecopymerge($this->image, $qrcode, 0, 0, 0, 0, $this->length, $this->length, 100);
+ imagedestroy($qrcode);
+
+ $fontColor = imagecolorallocate($this->image, ...$textColor);
+ $w = imagefontwidth($textSize);
+ $x = round(($bgWidth - strlen($text) * $w) / 2);
+
+ // loop through the string and draw the letters
+ foreach(str_split($text) as $i => $chr){
+ imagechar($this->image, $textSize, (int)($i * $w + $x), $this->length, $chr, $fontColor);
+ }
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/examples/custom_output.php b/vendor/chillerlan/php-qrcode/examples/custom_output.php
new file mode 100644
index 000000000..71ea62682
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/custom_output.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ *
+ * @filesource custom_output.php
+ * @created 24.12.2017
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+// invoke the QROutputInterface manually
+$options = new QROptions([
+ 'version' => 5,
+ 'eccLevel' => QRCode::ECC_L,
+]);
+
+$qrOutputInterface = new MyCustomOutput($options, (new QRCode($options))->getMatrix($data));
+
+var_dump($qrOutputInterface->dump());
+
+
+// or just
+$options = new QROptions([
+ 'version' => 5,
+ 'eccLevel' => QRCode::ECC_L,
+ 'outputType' => QRCode::OUTPUT_CUSTOM,
+ 'outputInterface' => MyCustomOutput::class,
+]);
+
+var_dump((new QRCode($options))->render($data));
diff --git a/vendor/chillerlan/php-qrcode/examples/example_image.png b/vendor/chillerlan/php-qrcode/examples/example_image.png
new file mode 100644
index 000000000..b4a80f2ab
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/example_image.png
Binary files differ
diff --git a/vendor/chillerlan/php-qrcode/examples/example_svg.png b/vendor/chillerlan/php-qrcode/examples/example_svg.png
new file mode 100644
index 000000000..f1e7b32f7
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/example_svg.png
Binary files differ
diff --git a/vendor/chillerlan/php-qrcode/examples/fpdf.php b/vendor/chillerlan/php-qrcode/examples/fpdf.php
new file mode 100644
index 000000000..9c690a7f7
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/fpdf.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once __DIR__ . '/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$options = new QROptions([
+ 'version' => 7,
+ 'outputType' => QRCode::OUTPUT_FPDF,
+ 'eccLevel' => QRCode::ECC_L,
+ 'scale' => 5,
+ 'imageBase64' => false,
+ 'moduleValues' => [
+ // finder
+ 1536 => [0, 63, 255], // dark (true)
+ 6 => [255, 255, 255], // light (false), white is the transparency color and is enabled by default
+ // alignment
+ 2560 => [255, 0, 255],
+ 10 => [255, 255, 255],
+ // timing
+ 3072 => [255, 0, 0],
+ 12 => [255, 255, 255],
+ // format
+ 3584 => [67, 191, 84],
+ 14 => [255, 255, 255],
+ // version
+ 4096 => [62, 174, 190],
+ 16 => [255, 255, 255],
+ // data
+ 1024 => [0, 0, 0],
+ 4 => [255, 255, 255],
+ // darkmodule
+ 512 => [0, 0, 0],
+ // separator
+ 8 => [255, 255, 255],
+ // quietzone
+ 18 => [255, 255, 255],
+ ],
+]);
+
+\header('Content-type: application/pdf');
+
+echo (new QRCode($options))->render($data);
diff --git a/vendor/chillerlan/php-qrcode/examples/html.php b/vendor/chillerlan/php-qrcode/examples/html.php
new file mode 100644
index 000000000..aa5305d24
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/html.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ *
+ * @filesource html.php
+ * @created 21.12.2017
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once '../vendor/autoload.php';
+
+header('Content-Type: text/html; charset=utf-8');
+
+?>
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="UTF-8"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+ <title>QRCode test</title>
+ <style>
+ body{
+ margin: 5em;
+ padding: 0;
+ }
+
+ div.qrcode{
+ margin: 0;
+ padding: 0;
+ }
+
+ /* rows */
+ div.qrcode > div {
+ margin: 0;
+ padding: 0;
+ height: 10px;
+ }
+
+ /* modules */
+ div.qrcode > div > span {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ }
+
+ div.qrcode > div > span {
+ background-color: #ccc;
+ }
+ </style>
+</head>
+<body>
+ <div class="qrcode">
+<?php
+
+ $data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+ $options = new QROptions([
+ 'version' => 5,
+ 'outputType' => QRCode::OUTPUT_MARKUP_HTML,
+ 'eccLevel' => QRCode::ECC_L,
+ 'moduleValues' => [
+ // finder
+ 1536 => '#A71111', // dark (true)
+ 6 => '#FFBFBF', // light (false)
+ // alignment
+ 2560 => '#A70364',
+ 10 => '#FFC9C9',
+ // timing
+ 3072 => '#98005D',
+ 12 => '#FFB8E9',
+ // format
+ 3584 => '#003804',
+ 14 => '#00FB12',
+ // version
+ 4096 => '#650098',
+ 16 => '#E0B8FF',
+ // data
+ 1024 => '#4A6000',
+ 4 => '#ECF9BE',
+ // darkmodule
+ 512 => '#080063',
+ // separator
+ 8 => '#AFBFBF',
+ // quietzone
+ 18 => '#FFFFFF',
+ ],
+ ]);
+
+ echo (new QRCode($options))->render($data);
+
+?>
+ </div>
+</body>
+</html>
+
+
+
diff --git a/vendor/chillerlan/php-qrcode/examples/image.php b/vendor/chillerlan/php-qrcode/examples/image.php
new file mode 100644
index 000000000..54426c68a
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/image.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ *
+ * @filesource image.php
+ * @created 24.12.2017
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$options = new QROptions([
+ 'version' => 10,
+ 'outputType' => QRCode::OUTPUT_IMAGE_PNG,
+ 'eccLevel' => QRCode::ECC_H,
+ 'scale' => 5,
+ 'imageBase64' => false,
+ 'moduleValues' => [
+ // finder
+ 1536 => [0, 63, 255], // dark (true)
+ 6 => [255, 255, 255], // light (false), white is the transparency color and is enabled by default
+ 5632 => [241, 28, 163], // finder dot, dark (true)
+ // alignment
+ 2560 => [255, 0, 255],
+ 10 => [255, 255, 255],
+ // timing
+ 3072 => [255, 0, 0],
+ 12 => [255, 255, 255],
+ // format
+ 3584 => [67, 99, 84],
+ 14 => [255, 255, 255],
+ // version
+ 4096 => [62, 174, 190],
+ 16 => [255, 255, 255],
+ // data
+ 1024 => [0, 0, 0],
+ 4 => [255, 255, 255],
+ // darkmodule
+ 512 => [0, 0, 0],
+ // separator
+ 8 => [255, 255, 255],
+ // quietzone
+ 18 => [255, 255, 255],
+ // logo (requires a call to QRMatrix::setLogoSpace())
+ 20 => [255, 255, 255],
+ ],
+]);
+
+header('Content-type: image/png');
+
+echo (new QRCode($options))->render($data);
+
+
+
+
+
diff --git a/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php b/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php
new file mode 100644
index 000000000..f93aa8dd1
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/imageWithLogo.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ *
+ * @filesource imageWithLogo.php
+ * @created 18.11.2020
+ * @author smiley <smiley@chillerlan.net>
+ * @copyright 2020 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+/**
+ * @property int $logoSpaceWidth
+ * @property int $logoSpaceHeight
+ *
+ * @noinspection PhpIllegalPsrClassPathInspection
+ */
+class LogoOptions extends QROptions{
+ // size in QR modules, multiply with QROptions::$scale for pixel size
+ protected int $logoSpaceWidth;
+ protected int $logoSpaceHeight;
+}
+
+$options = new LogoOptions;
+
+$options->version = 7;
+$options->eccLevel = QRCode::ECC_H;
+$options->imageBase64 = false;
+$options->logoSpaceWidth = 13;
+$options->logoSpaceHeight = 13;
+$options->scale = 5;
+$options->imageTransparent = false;
+
+header('Content-type: image/png');
+
+$qrOutputInterface = new QRImageWithLogo($options, (new QRCode($options))->getMatrix($data));
+
+// dump the output, with an additional logo
+echo $qrOutputInterface->dump(null, __DIR__.'/octocat.png');
diff --git a/vendor/chillerlan/php-qrcode/examples/imageWithText.php b/vendor/chillerlan/php-qrcode/examples/imageWithText.php
new file mode 100644
index 000000000..050781cba
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/imageWithText.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * example for additional text
+ * @link https://github.com/chillerlan/php-qrcode/issues/35
+ *
+ * @filesource imageWithText.php
+ * @created 22.06.2019
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2019 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$options = new QROptions([
+ 'version' => 7,
+ 'outputType' => QRCode::OUTPUT_IMAGE_PNG,
+ 'scale' => 3,
+ 'imageBase64' => false,
+]);
+
+header('Content-type: image/png');
+
+$qrOutputInterface = new QRImageWithText($options, (new QRCode($options))->getMatrix($data));
+
+// dump the output, with additional text
+echo $qrOutputInterface->dump(null, 'example text');
diff --git a/vendor/chillerlan/php-qrcode/examples/imagick.php b/vendor/chillerlan/php-qrcode/examples/imagick.php
new file mode 100644
index 000000000..6bec4d02e
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/imagick.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ *
+ * @filesource image.php
+ * @created 24.12.2017
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$options = new QROptions([
+ 'version' => 7,
+ 'outputType' => QRCode::OUTPUT_IMAGICK,
+ 'eccLevel' => QRCode::ECC_L,
+ 'scale' => 5,
+ 'moduleValues' => [
+ // finder
+ 1536 => '#A71111', // dark (true)
+ 6 => '#FFBFBF', // light (false)
+ // alignment
+ 2560 => '#A70364',
+ 10 => '#FFC9C9',
+ // timing
+ 3072 => '#98005D',
+ 12 => '#FFB8E9',
+ // format
+ 3584 => '#003804',
+ 14 => '#00FB12',
+ // version
+ 4096 => '#650098',
+ 16 => '#E0B8FF',
+ // data
+ 1024 => '#4A6000',
+ 4 => '#ECF9BE',
+ // darkmodule
+ 512 => '#080063',
+ // separator
+ 8 => '#DDDDDD',
+ // quietzone
+ 18 => '#DDDDDD',
+ ],
+]);
+
+header('Content-type: image/png');
+
+echo (new QRCode($options))->render($data);
+
+
+
+
+
diff --git a/vendor/chillerlan/php-qrcode/examples/octocat.png b/vendor/chillerlan/php-qrcode/examples/octocat.png
new file mode 100644
index 000000000..f9050b935
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/octocat.png
Binary files differ
diff --git a/vendor/chillerlan/php-qrcode/examples/svg.php b/vendor/chillerlan/php-qrcode/examples/svg.php
new file mode 100644
index 000000000..d171cbe07
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/svg.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ *
+ * @filesource svg.php
+ * @created 21.12.2017
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+$gzip = true;
+
+$options = new QROptions([
+ 'version' => 7,
+ 'outputType' => QRCode::OUTPUT_MARKUP_SVG,
+ 'imageBase64' => false,
+ 'eccLevel' => QRCode::ECC_L,
+ 'svgViewBoxSize' => 530,
+ 'addQuietzone' => true,
+ 'cssClass' => 'my-css-class',
+ 'svgOpacity' => 1.0,
+ 'svgDefs' => '
+ <linearGradient id="g2">
+ <stop offset="0%" stop-color="#39F" />
+ <stop offset="100%" stop-color="#F3F" />
+ </linearGradient>
+ <linearGradient id="g1">
+ <stop offset="0%" stop-color="#F3F" />
+ <stop offset="100%" stop-color="#39F" />
+ </linearGradient>
+ <style>rect{shape-rendering:crispEdges}</style>',
+ 'moduleValues' => [
+ // finder
+ 1536 => 'url(#g1)', // dark (true)
+ 6 => '#fff', // light (false)
+ // alignment
+ 2560 => 'url(#g1)',
+ 10 => '#fff',
+ // timing
+ 3072 => 'url(#g1)',
+ 12 => '#fff',
+ // format
+ 3584 => 'url(#g1)',
+ 14 => '#fff',
+ // version
+ 4096 => 'url(#g1)',
+ 16 => '#fff',
+ // data
+ 1024 => 'url(#g2)',
+ 4 => '#fff',
+ // darkmodule
+ 512 => 'url(#g1)',
+ // separator
+ 8 => '#fff',
+ // quietzone
+ 18 => '#fff',
+ ],
+]);
+
+$qrcode = (new QRCode($options))->render($data);
+
+header('Content-type: image/svg+xml');
+
+if($gzip === true){
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ $qrcode = gzencode($qrcode ,9);
+}
+echo $qrcode;
+
+
diff --git a/vendor/chillerlan/php-qrcode/examples/text.php b/vendor/chillerlan/php-qrcode/examples/text.php
new file mode 100644
index 000000000..9bdf154f0
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/examples/text.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ *
+ * @filesource text.php
+ * @created 21.12.2017
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodeExamples;
+
+use chillerlan\QRCode\{QRCode, QROptions};
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+$data = 'https://www.youtube.com/watch?v=DLzxrzFCyOs&t=43s';
+
+$options = new QROptions([
+ 'version' => 5,
+ 'outputType' => QRCode::OUTPUT_STRING_TEXT,
+ 'eccLevel' => QRCode::ECC_L,
+]);
+
+// <pre> to view it in a browser
+echo '<pre style="font-size: 75%; line-height: 1;">'.(new QRCode($options))->render($data).'</pre>';
+
+
+// custom values
+$options = new QROptions([
+ 'version' => 5,
+ 'outputType' => QRCode::OUTPUT_STRING_TEXT,
+ 'eccLevel' => QRCode::ECC_L,
+ 'moduleValues' => [
+ // finder
+ 1536 => 'A', // dark (true)
+ 6 => 'a', // light (false)
+ // alignment
+ 2560 => 'B',
+ 10 => 'b',
+ // timing
+ 3072 => 'C',
+ 12 => 'c',
+ // format
+ 3584 => 'D',
+ 14 => 'd',
+ // version
+ 4096 => 'E',
+ 16 => 'e',
+ // data
+ 1024 => 'F',
+ 4 => 'f',
+ // darkmodule
+ 512 => 'G',
+ // separator
+ 8 => 'h',
+ // quietzone
+ 18 => 'i',
+ ],
+]);
+
+// <pre> to view it in a browser
+echo '<pre style="font-size: 75%; line-height: 1;">'.(new QRCode($options))->render($data).'</pre>';
+
+
+
+
+
diff --git a/vendor/chillerlan/php-qrcode/phpdoc.xml b/vendor/chillerlan/php-qrcode/phpdoc.xml
new file mode 100644
index 000000000..d440f1d8a
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/phpdoc.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<phpdoc>
+ <parser>
+ <target>docs</target>
+ <encoding>utf8</encoding>
+ <markers>
+ <item>TODO</item>
+ </markers>
+ </parser>
+ <transformer>
+ <target>docs</target>
+ </transformer>
+ <files>
+ <directory>src</directory>
+ <directory>tests</directory>
+ </files>
+ <transformations>
+ <template name="responsive-twig"/>
+ </transformations>
+</phpdoc>
diff --git a/vendor/chillerlan/php-qrcode/phpunit.xml b/vendor/chillerlan/php-qrcode/phpunit.xml
new file mode 100644
index 000000000..1fea31626
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/phpunit.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
+ bootstrap="vendor/autoload.php"
+ cacheResultFile=".build/phpunit.result.cache"
+ colors="true"
+ verbose="true"
+>
+ <coverage processUncoveredFiles="true">
+ <include>
+ <directory suffix=".php">./src</directory>
+ </include>
+ <report>
+ <clover outputFile=".build/coverage/clover.xml"/>
+ <xml outputDirectory=".build/coverage/coverage-xml"/>
+ </report>
+ </coverage>
+ <testsuites>
+ <testsuite name="php-qrcode test suite">
+ <directory suffix=".php">./tests/</directory>
+ </testsuite>
+ </testsuites>
+ <logging>
+ <junit outputFile=".build/logs/junit.xml"/>
+ </logging>
+</phpunit>
diff --git a/vendor/chillerlan/php-qrcode/public/index.html b/vendor/chillerlan/php-qrcode/public/index.html
new file mode 100644
index 000000000..d7bf6c891
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/public/index.html
@@ -0,0 +1,163 @@
+<!DOCTYPE html>
+<html lang="en" >
+<head >
+ <meta charset="UTF-8" >
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title >QR Code Generator</title >
+ <style >
+ body{ font-size: 20px; line-height: 1.4em; font-family: "Trebuchet MS", sans-serif; color: #000;}
+ input, textarea, select{font-family: Consolas, "Liberation Mono", Courier, monospace; font-size: 75%; line-height: 1.25em; border: 1px solid #aaa; }
+ input:focus, textarea:focus, select:focus{ border: 1px solid #ccc; }
+ label{ cursor: pointer; }
+ #qrcode-settings, div#qrcode-output{ text-align: center; }
+ div#qrcode-output > div {margin: 0;padding: 0;height: 3px;}
+ div#qrcode-output > div > span {display: inline-block;width: 3px;height: 3px;}
+ div#qrcode-output > div > span {background-color: lightgrey;}
+ </style >
+</head >
+<body >
+
+<form id="qrcode-settings" >
+
+ <label for="inputstring" >Input String</label ><br /><textarea name="inputstring" id="inputstring" cols="80" rows="3" autocomplete="off" spellcheck="false"></textarea ><br />
+
+ <label for="version" >Version</label >
+ <input id="version" name="version" class="options" type="number" min="1" max="40" value="5" placeholder="version" />
+
+ <label for="maskpattern" >Mask Pattern</label >
+ <input id="maskpattern" name="maskpattern" class="options" type="number" min="-1" max="7" value="-1" placeholder="mask pattern" />
+
+ <label for="ecc" >ECC</label >
+ <select class="options" id="ecc" name="ecc" >
+ <option value="L" selected="selected" >L - 7%</option >
+ <option value="M" >M - 15%</option >
+ <option value="Q" >Q - 25%</option >
+ <option value="H" >H - 30%</option >
+ </select >
+
+ <br />
+
+ <label for="quietzone" >Quiet Zone
+ <input id="quietzone" name="quietzone" class="options" type="checkbox" value="true" />
+ </label >
+
+ <label for="quietzonesize" >size</label >
+ <input id="quietzonesize" name="quietzonesize" class="options" type="number" min="0" max="100" value="4" placeholder="quiet zone" />
+
+ <br />
+
+ <label for="output_type" >Output</label >
+ <select class="options" id="output_type" name="output_type" >
+ <option value="html" >Markup - HTML</option >
+ <option value="svg" selected="selected" >Markup - SVG</option >
+ <option value="png">Image - png</option >
+ <option value="jpg" >Image - jpg</option >
+ <option value="gif" >Image - gif</option >
+ <option value="text" >String - text</option >
+ <option value="json" >String - json</option >
+ </select >
+
+ <label for="scale" >scale</label >
+ <input id="scale" name="scale" class="options" type="number" min="1" max="10" value="5" placeholder="scale" />
+
+ <div>Finder</div>
+ <label for="m_finder_light" >
+ <input type="text" id="m_finder_light" name="m_finder_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+ <label for="m_finder_dark" >
+ <input type="text" id="m_finder_dark" name="m_finder_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+
+ <div>Alignment</div>
+ <label for="m_alignment_light" >
+ <input type="text" id="m_alignment_light" name="m_alignment_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+ <label for="m_alignment_dark" >
+ <input type="text" id="m_alignment_dark" name="m_alignment_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+
+ <div>Timing</div>
+ <label for="m_timing_light" >
+ <input type="text" id="m_timing_light" name="m_timing_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+ <label for="m_timing_dark" >
+ <input type="text" id="m_timing_dark" name="m_timing_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+
+ <div>Format</div>
+ <label for="m_format_light" >
+ <input type="text" id="m_format_light" name="m_format_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+ <label for="m_format_dark" >
+ <input type="text" id="m_format_dark" name="m_format_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+
+ <div>Version</div>
+ <label for="m_version_light" >
+ <input type="text" id="m_version_light" name="m_version_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+ <label for="m_version_dark" >
+ <input type="text" id="m_version_dark" name="m_version_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+
+ <div>Data</div>
+ <label for="m_data_light" >
+ <input type="text" id="m_data_light" name="m_data_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+ <label for="m_data_dark" >
+ <input type="text" id="m_data_dark" name="m_data_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+
+ <div>Dark Module</div>
+ <label for="m_darkmodule_light" >
+ <input disabled="disabled" type="text" id="m_darkmodule_light" class="options" value="" autocomplete="off" spellcheck="false" />
+ </label >
+ <label for="m_darkmodule_dark" >
+ <input type="text" id="m_darkmodule_dark" name="m_darkmodule_dark" class="jscolor options" value="000000" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+
+ <div>Separator</div>
+ <label for="m_separator_light" >
+ <input type="text" id="m_separator_light" name="m_separator_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+ <label for="m_separator_dark" >
+ <input disabled="disabled" type="text" id="m_separator_dark" class="options" value="" autocomplete="off" spellcheck="false" />
+ </label >
+
+ <div>Quiet Zone</div>
+ <label for="m_quietzone_light" >
+ <input type="text" id="m_quietzone_light" name="m_quietzone_light" class="jscolor options" value="ffffff" autocomplete="off" spellcheck="false" minlength="6" maxlength="6" />
+ </label >
+ <label for="m_quietzone_dark" >
+ <input disabled="disabled" type="text" id="m_quietzone_dark" class="options" value="" autocomplete="off" spellcheck="false" />
+ </label >
+
+ <br />
+ <button type="submit" >generate</button >
+</form >
+<div id="qrcode-output" ></div >
+
+<div><a href="https://play.google.com/store/apps/details?id=com.google.zxing.client.android" >ZXing Barcode Scanner</a ></div>
+<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.3/prototype.js" ></script >
+<script src="https://cdnjs.cloudflare.com/ajax/libs/jscolor/2.0.4/jscolor.js" ></script >
+<script >
+ ((form, output, url) => {
+
+ $(form).observe('submit', ev => {
+ Event.stop(ev);
+
+ new Ajax.Request(url, {
+ method: 'post',
+ parameters: ev.target.serialize(true),
+ onUninitialized: $(output).update(),
+ onLoading: $(output).update('[portlandia_screaming.gif]'),
+ onFailure: response => $(output).update(response.responseJSON.error),
+ onSuccess: response => $(output).update(response.responseJSON.qrcode),
+ });
+
+ });
+ })('qrcode-settings', 'qrcode-output', './qrcode.php');
+</script >
+
+</body >
+</html > \ No newline at end of file
diff --git a/vendor/chillerlan/php-qrcode/public/qrcode.php b/vendor/chillerlan/php-qrcode/public/qrcode.php
new file mode 100644
index 000000000..1f8427c7e
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/public/qrcode.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * @filesource qrcode.php
+ * @created 18.11.2017
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCodePublic;
+
+use chillerlan\QRCode\QRCode;
+use chillerlan\QRCode\QROptions;
+
+require_once '../vendor/autoload.php';
+
+try{
+
+ $moduleValues = [
+ // finder
+ 1536 => $_POST['m_finder_dark'],
+ 6 => $_POST['m_finder_light'],
+ // alignment
+ 2560 => $_POST['m_alignment_dark'],
+ 10 => $_POST['m_alignment_light'],
+ // timing
+ 3072 => $_POST['m_timing_dark'],
+ 12 => $_POST['m_timing_light'],
+ // format
+ 3584 => $_POST['m_format_dark'],
+ 14 => $_POST['m_format_light'],
+ // version
+ 4096 => $_POST['m_version_dark'],
+ 16 => $_POST['m_version_light'],
+ // data
+ 1024 => $_POST['m_data_dark'],
+ 4 => $_POST['m_data_light'],
+ // darkmodule
+ 512 => $_POST['m_darkmodule_dark'],
+ // separator
+ 8 => $_POST['m_separator_light'],
+ // quietzone
+ 18 => $_POST['m_quietzone_light'],
+ ];
+
+ $moduleValues = array_map(function($v){
+ if(preg_match('/[a-f\d]{6}/i', $v) === 1){
+ return in_array($_POST['output_type'], ['png', 'jpg', 'gif'])
+ ? array_map('hexdec', str_split($v, 2))
+ : '#'.$v ;
+ }
+ return null;
+ }, $moduleValues);
+
+
+ $ecc = in_array($_POST['ecc'], ['L', 'M', 'Q', 'H'], true) ? $_POST['ecc'] : 'L';
+
+ $qro = new QROptions;
+
+ $qro->version = (int)$_POST['version'];
+ $qro->eccLevel = constant('chillerlan\\QRCode\\QRCode::ECC_'.$ecc);
+ $qro->maskPattern = (int)$_POST['maskpattern'];
+ $qro->addQuietzone = isset($_POST['quietzone']);
+ $qro->quietzoneSize = (int)$_POST['quietzonesize'];
+ $qro->moduleValues = $moduleValues;
+ $qro->outputType = $_POST['output_type'];
+ $qro->scale = (int)$_POST['scale'];
+ $qro->imageTransparent = false;
+
+ $qrcode = (new QRCode($qro))->render($_POST['inputstring']);
+
+ if(in_array($_POST['output_type'], ['png', 'jpg', 'gif'])){
+ $qrcode = '<img src="'.$qrcode.'" />';
+ }
+ elseif($_POST['output_type'] === 'text'){
+ $qrcode = '<pre style="font-size: 75%; line-height: 1;">'.$qrcode.'</pre>';
+ }
+ elseif($_POST['output_type'] === 'json'){
+ $qrcode = '<pre style="font-size: 75%; overflow-x: auto;">'.$qrcode.'</pre>';
+ }
+
+ send_response(['qrcode' => $qrcode]);
+}
+// Pokémon exception handler
+catch(\Exception $e){
+ header('HTTP/1.1 500 Internal Server Error');
+ send_response(['error' => $e->getMessage()]);
+}
+
+/**
+ * @param array $response
+ */
+function send_response(array $response){
+ header('Content-type: application/json;charset=utf-8;');
+ echo json_encode($response);
+ exit;
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/AlphaNum.php b/vendor/chillerlan/php-qrcode/src/Data/AlphaNum.php
new file mode 100644
index 000000000..28d9d7563
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/AlphaNum.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Class AlphaNum
+ *
+ * @filesource AlphaNum.php
+ * @created 25.11.2015
+ * @package chillerlan\QRCode\Data
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\QRCode;
+
+use function ord, sprintf;
+
+/**
+ * Alphanumeric mode: 0 to 9, A to Z, space, $ % * + - . / :
+ *
+ * ISO/IEC 18004:2000 Section 8.3.3
+ * ISO/IEC 18004:2000 Section 8.4.3
+ */
+final class AlphaNum extends QRDataAbstract{
+
+ protected int $datamode = QRCode::DATA_ALPHANUM;
+
+ protected array $lengthBits = [9, 11, 13];
+
+ /**
+ * @inheritdoc
+ */
+ protected function write(string $data):void{
+
+ for($i = 0; $i + 1 < $this->strlen; $i += 2){
+ $this->bitBuffer->put($this->getCharCode($data[$i]) * 45 + $this->getCharCode($data[$i + 1]), 11);
+ }
+
+ if($i < $this->strlen){
+ $this->bitBuffer->put($this->getCharCode($data[$i]), 6);
+ }
+
+ }
+
+ /**
+ * get the code for the given character
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException on an illegal character occurence
+ */
+ protected function getCharCode(string $chr):int{
+
+ if(!isset($this::CHAR_MAP_ALPHANUM[$chr])){
+ throw new QRCodeDataException(sprintf('illegal char: "%s" [%d]', $chr, ord($chr)));
+ }
+
+ return $this::CHAR_MAP_ALPHANUM[$chr];
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/Byte.php b/vendor/chillerlan/php-qrcode/src/Data/Byte.php
new file mode 100644
index 000000000..02e76a639
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/Byte.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Class Byte
+ *
+ * @filesource Byte.php
+ * @created 25.11.2015
+ * @package chillerlan\QRCode\Data
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\QRCode;
+
+use function ord;
+
+/**
+ * Byte mode, ISO-8859-1 or UTF-8
+ *
+ * ISO/IEC 18004:2000 Section 8.3.4
+ * ISO/IEC 18004:2000 Section 8.4.4
+ */
+final class Byte extends QRDataAbstract{
+
+ protected int $datamode = QRCode::DATA_BYTE;
+
+ protected array $lengthBits = [8, 16, 16];
+
+ /**
+ * @inheritdoc
+ */
+ protected function write(string $data):void{
+ $i = 0;
+
+ while($i < $this->strlen){
+ $this->bitBuffer->put(ord($data[$i]), 8);
+ $i++;
+ }
+
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/Kanji.php b/vendor/chillerlan/php-qrcode/src/Data/Kanji.php
new file mode 100644
index 000000000..e106c50f1
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/Kanji.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Class Kanji
+ *
+ * @filesource Kanji.php
+ * @created 25.11.2015
+ * @package chillerlan\QRCode\Data
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\QRCode;
+
+use function mb_strlen, ord, sprintf, strlen;
+
+/**
+ * Kanji mode: double-byte characters from the Shift JIS character set
+ *
+ * ISO/IEC 18004:2000 Section 8.3.5
+ * ISO/IEC 18004:2000 Section 8.4.5
+ */
+final class Kanji extends QRDataAbstract{
+
+ protected int $datamode = QRCode::DATA_KANJI;
+
+ protected array $lengthBits = [8, 10, 12];
+
+ /**
+ * @inheritdoc
+ */
+ protected function getLength(string $data):int{
+ return mb_strlen($data, 'SJIS');
+ }
+
+ /**
+ * @inheritdoc
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException on an illegal character occurence
+ */
+ protected function write(string $data):void{
+ $len = strlen($data);
+
+ for($i = 0; $i + 1 < $len; $i += 2){
+ $c = ((0xff & ord($data[$i])) << 8) | (0xff & ord($data[$i + 1]));
+
+ if($c >= 0x8140 && $c <= 0x9FFC){
+ $c -= 0x8140;
+ }
+ elseif($c >= 0xE040 && $c <= 0xEBBF){
+ $c -= 0xC140;
+ }
+ else{
+ throw new QRCodeDataException(sprintf('illegal char at %d [%d]', $i + 1, $c));
+ }
+
+ $this->bitBuffer->put(((($c >> 8) & 0xff) * 0xC0) + ($c & 0xff), 13);
+
+ }
+
+ if($i < $len){
+ throw new QRCodeDataException(sprintf('illegal char at %d', $i + 1));
+ }
+
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php b/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php
new file mode 100644
index 000000000..7874cb53d
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/MaskPatternTester.php
@@ -0,0 +1,203 @@
+<?php
+/**
+ * Class MaskPatternTester
+ *
+ * @filesource MaskPatternTester.php
+ * @created 22.11.2017
+ * @package chillerlan\QRCode\Data
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ *
+ * @noinspection PhpUnused
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use function abs, array_search, call_user_func_array, min;
+
+/**
+ * Receives a QRDataInterface object and runs the mask pattern tests on it.
+ *
+ * ISO/IEC 18004:2000 Section 8.8.2 - Evaluation of masking results
+ *
+ * @see http://www.thonky.com/qr-code-tutorial/data-masking
+ */
+final class MaskPatternTester{
+
+ /**
+ * The data interface that contains the data matrix to test
+ */
+ protected QRDataInterface $dataInterface;
+
+ /**
+ * Receives the QRDataInterface
+ *
+ * @see \chillerlan\QRCode\QROptions::$maskPattern
+ * @see \chillerlan\QRCode\Data\QRMatrix::$maskPattern
+ */
+ public function __construct(QRDataInterface $dataInterface){
+ $this->dataInterface = $dataInterface;
+ }
+
+ /**
+ * shoves a QRMatrix through the MaskPatternTester to find the lowest penalty mask pattern
+ *
+ * @see \chillerlan\QRCode\Data\MaskPatternTester
+ */
+ public function getBestMaskPattern():int{
+ $penalties = [];
+
+ for($pattern = 0; $pattern < 8; $pattern++){
+ $penalties[$pattern] = $this->testPattern($pattern);
+ }
+
+ return array_search(min($penalties), $penalties, true);
+ }
+
+ /**
+ * Returns the penalty for the given mask pattern
+ *
+ * @see \chillerlan\QRCode\QROptions::$maskPattern
+ * @see \chillerlan\QRCode\Data\QRMatrix::$maskPattern
+ */
+ public function testPattern(int $pattern):int{
+ $matrix = $this->dataInterface->initMatrix($pattern, true);
+ $penalty = 0;
+
+ for($level = 1; $level <= 4; $level++){
+ $penalty += call_user_func_array([$this, 'testLevel'.$level], [$matrix->matrix(true), $matrix->size()]);
+ }
+
+ return (int)$penalty;
+ }
+
+ /**
+ * Checks for each group of five or more same-colored modules in a row (or column)
+ */
+ protected function testLevel1(array $m, int $size):int{
+ $penalty = 0;
+
+ foreach($m as $y => $row){
+ foreach($row as $x => $val){
+ $count = 0;
+
+ for($ry = -1; $ry <= 1; $ry++){
+
+ if($y + $ry < 0 || $size <= $y + $ry){
+ continue;
+ }
+
+ for($rx = -1; $rx <= 1; $rx++){
+
+ if(($ry === 0 && $rx === 0) || (($x + $rx) < 0 || $size <= ($x + $rx))){
+ continue;
+ }
+
+ if($m[$y + $ry][$x + $rx] === $val){
+ $count++;
+ }
+
+ }
+ }
+
+ if($count > 5){
+ $penalty += (3 + $count - 5);
+ }
+
+ }
+ }
+
+ return $penalty;
+ }
+
+ /**
+ * Checks for each 2x2 area of same-colored modules in the matrix
+ */
+ protected function testLevel2(array $m, int $size):int{
+ $penalty = 0;
+
+ foreach($m as $y => $row){
+
+ if($y > $size - 2){
+ break;
+ }
+
+ foreach($row as $x => $val){
+
+ if($x > $size - 2){
+ break;
+ }
+
+ if(
+ $val === $m[$y][$x + 1]
+ && $val === $m[$y + 1][$x]
+ && $val === $m[$y + 1][$x + 1]
+ ){
+ $penalty++;
+ }
+ }
+ }
+
+ return 3 * $penalty;
+ }
+
+ /**
+ * Checks if there are patterns that look similar to the finder patterns (1:1:3:1:1 ratio)
+ */
+ protected function testLevel3(array $m, int $size):int{
+ $penalties = 0;
+
+ foreach($m as $y => $row){
+ foreach($row as $x => $val){
+
+ if(
+ $x + 6 < $size
+ && $val
+ && !$m[$y][$x + 1]
+ && $m[$y][$x + 2]
+ && $m[$y][$x + 3]
+ && $m[$y][$x + 4]
+ && !$m[$y][$x + 5]
+ && $m[$y][$x + 6]
+ ){
+ $penalties++;
+ }
+
+ if(
+ $y + 6 < $size
+ && $val
+ && !$m[$y + 1][$x]
+ && $m[$y + 2][$x]
+ && $m[$y + 3][$x]
+ && $m[$y + 4][$x]
+ && !$m[$y + 5][$x]
+ && $m[$y + 6][$x]
+ ){
+ $penalties++;
+ }
+
+ }
+ }
+
+ return $penalties * 40;
+ }
+
+ /**
+ * Checks if more than half of the modules are dark or light, with a larger penalty for a larger difference
+ */
+ protected function testLevel4(array $m, int $size):float{
+ $count = 0;
+
+ foreach($m as $y => $row){
+ foreach($row as $x => $val){
+ if($val){
+ $count++;
+ }
+ }
+ }
+
+ return (abs(100 * $count / $size / $size - 50) / 5) * 10;
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/Number.php b/vendor/chillerlan/php-qrcode/src/Data/Number.php
new file mode 100644
index 000000000..0a905b13e
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/Number.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Class Number
+ *
+ * @filesource Number.php
+ * @created 26.11.2015
+ * @package chillerlan\QRCode\Data
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\QRCode;
+
+use function ord, sprintf, str_split, substr;
+
+/**
+ * Numeric mode: decimal digits 0 to 9
+ *
+ * ISO/IEC 18004:2000 Section 8.3.2
+ * ISO/IEC 18004:2000 Section 8.4.2
+ */
+final class Number extends QRDataAbstract{
+
+ protected int $datamode = QRCode::DATA_NUMBER;
+
+ protected array $lengthBits = [10, 12, 14];
+
+ /**
+ * @inheritdoc
+ */
+ protected function write(string $data):void{
+ $i = 0;
+
+ while($i + 2 < $this->strlen){
+ $this->bitBuffer->put($this->parseInt(substr($data, $i, 3)), 10);
+ $i += 3;
+ }
+
+ if($i < $this->strlen){
+
+ if($this->strlen - $i === 1){
+ $this->bitBuffer->put($this->parseInt(substr($data, $i, $i + 1)), 4);
+ }
+ elseif($this->strlen - $i === 2){
+ $this->bitBuffer->put($this->parseInt(substr($data, $i, $i + 2)), 7);
+ }
+
+ }
+
+ }
+
+ /**
+ * get the code for the given numeric string
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException on an illegal character occurence
+ */
+ protected function parseInt(string $string):int{
+ $num = 0;
+
+ foreach(str_split($string) as $chr){
+ $c = ord($chr);
+
+ if(!isset($this::CHAR_MAP_NUMBER[$chr])){
+ throw new QRCodeDataException(sprintf('illegal char: "%s" [%d]', $chr, $c));
+ }
+
+ $c = $c - 48; // ord('0')
+ $num = $num * 10 + $c;
+ }
+
+ return $num;
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php b/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php
new file mode 100644
index 000000000..862f57ba0
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/QRCodeDataException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Class QRCodeDataException
+ *
+ * @filesource QRCodeDataException.php
+ * @created 09.12.2015
+ * @package chillerlan\QRCode\Data
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\QRCodeException;
+
+class QRCodeDataException extends QRCodeException{}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php b/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php
new file mode 100644
index 000000000..72b67b7b9
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/QRDataAbstract.php
@@ -0,0 +1,311 @@
+<?php
+/**
+ * Class QRDataAbstract
+ *
+ * @filesource QRDataAbstract.php
+ * @created 25.11.2015
+ * @package chillerlan\QRCode\Data
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\QRCode;
+use chillerlan\QRCode\Helpers\{BitBuffer, Polynomial};
+use chillerlan\Settings\SettingsContainerInterface;
+
+use function array_fill, array_merge, count, max, mb_convert_encoding, mb_detect_encoding, range, sprintf, strlen;
+
+/**
+ * Processes the binary data and maps it on a matrix which is then being returned
+ */
+abstract class QRDataAbstract implements QRDataInterface{
+
+ /**
+ * the string byte count
+ */
+ protected ?int $strlen = null;
+
+ /**
+ * the current data mode: Num, Alphanum, Kanji, Byte
+ */
+ protected int $datamode;
+
+ /**
+ * mode length bits for the version breakpoints 1-9, 10-26 and 27-40
+ *
+ * ISO/IEC 18004:2000 Table 3 - Number of bits in Character Count Indicator
+ */
+ protected array $lengthBits = [0, 0, 0];
+
+ /**
+ * current QR Code version
+ */
+ protected int $version;
+
+ /**
+ * ECC temp data
+ */
+ protected array $ecdata;
+
+ /**
+ * ECC temp data
+ */
+ protected array $dcdata;
+
+ /**
+ * the options instance
+ *
+ * @var \chillerlan\Settings\SettingsContainerInterface|\chillerlan\QRCode\QROptions
+ */
+ protected SettingsContainerInterface $options;
+
+ /**
+ * a BitBuffer instance
+ */
+ protected BitBuffer $bitBuffer;
+
+ /**
+ * QRDataInterface constructor.
+ */
+ public function __construct(SettingsContainerInterface $options, string $data = null){
+ $this->options = $options;
+
+ if($data !== null){
+ $this->setData($data);
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function setData(string $data):QRDataInterface{
+
+ if($this->datamode === QRCode::DATA_KANJI){
+ $data = mb_convert_encoding($data, 'SJIS', mb_detect_encoding($data));
+ }
+
+ $this->strlen = $this->getLength($data);
+ $this->version = $this->options->version === QRCode::VERSION_AUTO
+ ? $this->getMinimumVersion()
+ : $this->options->version;
+
+ $this->writeBitBuffer($data);
+
+ return $this;
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function initMatrix(int $maskPattern, bool $test = null):QRMatrix{
+ return (new QRMatrix($this->version, $this->options->eccLevel))
+ ->init($maskPattern, $test)
+ ->mapData($this->maskECC(), $maskPattern)
+ ;
+ }
+
+ /**
+ * returns the length bits for the version breakpoints 1-9, 10-26 and 27-40
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ * @codeCoverageIgnore
+ */
+ protected function getLengthBits():int{
+
+ foreach([9, 26, 40] as $key => $breakpoint){
+ if($this->version <= $breakpoint){
+ return $this->lengthBits[$key];
+ }
+ }
+
+ throw new QRCodeDataException(sprintf('invalid version number: %d', $this->version));
+ }
+
+ /**
+ * returns the byte count of the $data string
+ */
+ protected function getLength(string $data):int{
+ return strlen($data);
+ }
+
+ /**
+ * returns the minimum version number for the given string
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ protected function getMinimumVersion():int{
+ $maxlength = 0;
+
+ // guess the version number within the given range
+ $dataMode = QRCode::DATA_MODES[$this->datamode];
+ $eccMode = QRCode::ECC_MODES[$this->options->eccLevel];
+
+ foreach(range($this->options->versionMin, $this->options->versionMax) as $version){
+ $maxlength = $this::MAX_LENGTH[$version][$dataMode][$eccMode];
+
+ if($this->strlen <= $maxlength){
+ return $version;
+ }
+ }
+
+ throw new QRCodeDataException(sprintf('data exceeds %d characters', $maxlength));
+ }
+
+ /**
+ * writes the actual data string to the BitBuffer
+ *
+ * @see \chillerlan\QRCode\Data\QRDataAbstract::writeBitBuffer()
+ */
+ abstract protected function write(string $data):void;
+
+ /**
+ * creates a BitBuffer and writes the string data to it
+ *
+ * @throws \chillerlan\QRCode\QRCodeException on data overflow
+ */
+ protected function writeBitBuffer(string $data):void{
+ $this->bitBuffer = new BitBuffer;
+
+ $MAX_BITS = $this::MAX_BITS[$this->version][QRCode::ECC_MODES[$this->options->eccLevel]];
+
+ $this->bitBuffer
+ ->put($this->datamode, 4)
+ ->put($this->strlen, $this->getLengthBits())
+ ;
+
+ $this->write($data);
+
+ // overflow, likely caused due to invalid version setting
+ if($this->bitBuffer->getLength() > $MAX_BITS){
+ throw new QRCodeDataException(sprintf('code length overflow. (%d > %d bit)', $this->bitBuffer->getLength(), $MAX_BITS));
+ }
+
+ // add terminator (ISO/IEC 18004:2000 Table 2)
+ if($this->bitBuffer->getLength() + 4 <= $MAX_BITS){
+ $this->bitBuffer->put(0, 4);
+ }
+
+ // padding
+ while($this->bitBuffer->getLength() % 8 !== 0){
+ $this->bitBuffer->putBit(false);
+ }
+
+ // padding
+ while(true){
+
+ if($this->bitBuffer->getLength() >= $MAX_BITS){
+ break;
+ }
+
+ $this->bitBuffer->put(0xEC, 8);
+
+ if($this->bitBuffer->getLength() >= $MAX_BITS){
+ break;
+ }
+
+ $this->bitBuffer->put(0x11, 8);
+ }
+
+ }
+
+ /**
+ * ECC masking
+ *
+ * ISO/IEC 18004:2000 Section 8.5 ff
+ *
+ * @see http://www.thonky.com/qr-code-tutorial/error-correction-coding
+ */
+ protected function maskECC():array{
+ [$l1, $l2, $b1, $b2] = $this::RSBLOCKS[$this->version][QRCode::ECC_MODES[$this->options->eccLevel]];
+
+ $rsBlocks = array_fill(0, $l1, [$b1, $b2]);
+ $rsCount = $l1 + $l2;
+ $this->ecdata = array_fill(0, $rsCount, []);
+ $this->dcdata = $this->ecdata;
+
+ if($l2 > 0){
+ $rsBlocks = array_merge($rsBlocks, array_fill(0, $l2, [$b1 + 1, $b2 + 1]));
+ }
+
+ $totalCodeCount = 0;
+ $maxDcCount = 0;
+ $maxEcCount = 0;
+ $offset = 0;
+
+ $bitBuffer = $this->bitBuffer->getBuffer();
+
+ foreach($rsBlocks as $key => $block){
+ [$rsBlockTotal, $dcCount] = $block;
+
+ $ecCount = $rsBlockTotal - $dcCount;
+ $maxDcCount = max($maxDcCount, $dcCount);
+ $maxEcCount = max($maxEcCount, $ecCount);
+ $this->dcdata[$key] = array_fill(0, $dcCount, null);
+
+ foreach($this->dcdata[$key] as $a => $_z){
+ $this->dcdata[$key][$a] = 0xff & $bitBuffer[$a + $offset];
+ }
+
+ [$num, $add] = $this->poly($key, $ecCount);
+
+ foreach($this->ecdata[$key] as $c => $_){
+ $modIndex = $c + $add;
+ $this->ecdata[$key][$c] = $modIndex >= 0 ? $num[$modIndex] : 0;
+ }
+
+ $offset += $dcCount;
+ $totalCodeCount += $rsBlockTotal;
+ }
+
+ $data = array_fill(0, $totalCodeCount, null);
+ $index = 0;
+
+ $mask = function(array $arr, int $count) use (&$data, &$index, $rsCount):void{
+ for($x = 0; $x < $count; $x++){
+ for($y = 0; $y < $rsCount; $y++){
+ if($x < count($arr[$y])){
+ $data[$index] = $arr[$y][$x];
+ $index++;
+ }
+ }
+ }
+ };
+
+ $mask($this->dcdata, $maxDcCount);
+ $mask($this->ecdata, $maxEcCount);
+
+ return $data;
+ }
+
+ /**
+ * helper method for the polynomial operations
+ */
+ protected function poly(int $key, int $count):array{
+ $rsPoly = new Polynomial;
+ $modPoly = new Polynomial;
+
+ for($i = 0; $i < $count; $i++){
+ $modPoly->setNum([1, $modPoly->gexp($i)]);
+ $rsPoly->multiply($modPoly->getNum());
+ }
+
+ $rsPolyCount = count($rsPoly->getNum());
+
+ $modPoly
+ ->setNum($this->dcdata[$key], $rsPolyCount - 1)
+ ->mod($rsPoly->getNum())
+ ;
+
+ $this->ecdata[$key] = array_fill(0, $rsPolyCount - 1, null);
+ $num = $modPoly->getNum();
+
+ return [
+ $num,
+ count($num) - count($this->ecdata[$key]),
+ ];
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php b/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php
new file mode 100644
index 000000000..93ad6221d
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/QRDataInterface.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * Interface QRDataInterface
+ *
+ * @filesource QRDataInterface.php
+ * @created 01.12.2015
+ * @package chillerlan\QRCode\Data
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+/**
+ * Specifies the methods reqired for the data modules (Number, Alphanum, Byte and Kanji)
+ * and holds version information in several constants
+ */
+interface QRDataInterface{
+
+ /**
+ * @var int[]
+ */
+ const CHAR_MAP_NUMBER = [
+ '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9,
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Table 5
+ *
+ * @var int[]
+ */
+ const CHAR_MAP_ALPHANUM = [
+ '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7,
+ '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, 'F' => 15,
+ 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23,
+ 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31,
+ 'W' => 32, 'X' => 33, 'Y' => 34, 'Z' => 35, ' ' => 36, '$' => 37, '%' => 38, '*' => 39,
+ '+' => 40, '-' => 41, '.' => 42, '/' => 43, ':' => 44,
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Tables 7-11 - Number of symbol characters and input data capacity for versions 1 to 40
+ *
+ * @see http://www.qrcode.com/en/about/version.html
+ *
+ * @var int [][][]
+ */
+ const MAX_LENGTH =[
+ // v => [NUMERIC => [L, M, Q, H ], ALPHANUM => [L, M, Q, H], BINARY => [L, M, Q, H ], KANJI => [L, M, Q, H ]] // modules
+ 1 => [[ 41, 34, 27, 17], [ 25, 20, 16, 10], [ 17, 14, 11, 7], [ 10, 8, 7, 4]], // 21
+ 2 => [[ 77, 63, 48, 34], [ 47, 38, 29, 20], [ 32, 26, 20, 14], [ 20, 16, 12, 8]], // 25
+ 3 => [[ 127, 101, 77, 58], [ 77, 61, 47, 35], [ 53, 42, 32, 24], [ 32, 26, 20, 15]], // 29
+ 4 => [[ 187, 149, 111, 82], [ 114, 90, 67, 50], [ 78, 62, 46, 34], [ 48, 38, 28, 21]], // 33
+ 5 => [[ 255, 202, 144, 106], [ 154, 122, 87, 64], [ 106, 84, 60, 44], [ 65, 52, 37, 27]], // 37
+ 6 => [[ 322, 255, 178, 139], [ 195, 154, 108, 84], [ 134, 106, 74, 58], [ 82, 65, 45, 36]], // 41
+ 7 => [[ 370, 293, 207, 154], [ 224, 178, 125, 93], [ 154, 122, 86, 64], [ 95, 75, 53, 39]], // 45
+ 8 => [[ 461, 365, 259, 202], [ 279, 221, 157, 122], [ 192, 152, 108, 84], [ 118, 93, 66, 52]], // 49
+ 9 => [[ 552, 432, 312, 235], [ 335, 262, 189, 143], [ 230, 180, 130, 98], [ 141, 111, 80, 60]], // 53
+ 10 => [[ 652, 513, 364, 288], [ 395, 311, 221, 174], [ 271, 213, 151, 119], [ 167, 131, 93, 74]], // 57
+ 11 => [[ 772, 604, 427, 331], [ 468, 366, 259, 200], [ 321, 251, 177, 137], [ 198, 155, 109, 85]], // 61
+ 12 => [[ 883, 691, 489, 374], [ 535, 419, 296, 227], [ 367, 287, 203, 155], [ 226, 177, 125, 96]], // 65
+ 13 => [[1022, 796, 580, 427], [ 619, 483, 352, 259], [ 425, 331, 241, 177], [ 262, 204, 149, 109]], // 69 NICE!
+ 14 => [[1101, 871, 621, 468], [ 667, 528, 376, 283], [ 458, 362, 258, 194], [ 282, 223, 159, 120]], // 73
+ 15 => [[1250, 991, 703, 530], [ 758, 600, 426, 321], [ 520, 412, 292, 220], [ 320, 254, 180, 136]], // 77
+ 16 => [[1408, 1082, 775, 602], [ 854, 656, 470, 365], [ 586, 450, 322, 250], [ 361, 277, 198, 154]], // 81
+ 17 => [[1548, 1212, 876, 674], [ 938, 734, 531, 408], [ 644, 504, 364, 280], [ 397, 310, 224, 173]], // 85
+ 18 => [[1725, 1346, 948, 746], [1046, 816, 574, 452], [ 718, 560, 394, 310], [ 442, 345, 243, 191]], // 89
+ 19 => [[1903, 1500, 1063, 813], [1153, 909, 644, 493], [ 792, 624, 442, 338], [ 488, 384, 272, 208]], // 93
+ 20 => [[2061, 1600, 1159, 919], [1249, 970, 702, 557], [ 858, 666, 482, 382], [ 528, 410, 297, 235]], // 97
+ 21 => [[2232, 1708, 1224, 969], [1352, 1035, 742, 587], [ 929, 711, 509, 403], [ 572, 438, 314, 248]], // 101
+ 22 => [[2409, 1872, 1358, 1056], [1460, 1134, 823, 640], [1003, 779, 565, 439], [ 618, 480, 348, 270]], // 105
+ 23 => [[2620, 2059, 1468, 1108], [1588, 1248, 890, 672], [1091, 857, 611, 461], [ 672, 528, 376, 284]], // 109
+ 24 => [[2812, 2188, 1588, 1228], [1704, 1326, 963, 744], [1171, 911, 661, 511], [ 721, 561, 407, 315]], // 113
+ 25 => [[3057, 2395, 1718, 1286], [1853, 1451, 1041, 779], [1273, 997, 715, 535], [ 784, 614, 440, 330]], // 117
+ 26 => [[3283, 2544, 1804, 1425], [1990, 1542, 1094, 864], [1367, 1059, 751, 593], [ 842, 652, 462, 365]], // 121
+ 27 => [[3517, 2701, 1933, 1501], [2132, 1637, 1172, 910], [1465, 1125, 805, 625], [ 902, 692, 496, 385]], // 125
+ 28 => [[3669, 2857, 2085, 1581], [2223, 1732, 1263, 958], [1528, 1190, 868, 658], [ 940, 732, 534, 405]], // 129
+ 29 => [[3909, 3035, 2181, 1677], [2369, 1839, 1322, 1016], [1628, 1264, 908, 698], [1002, 778, 559, 430]], // 133
+ 30 => [[4158, 3289, 2358, 1782], [2520, 1994, 1429, 1080], [1732, 1370, 982, 742], [1066, 843, 604, 457]], // 137
+ 31 => [[4417, 3486, 2473, 1897], [2677, 2113, 1499, 1150], [1840, 1452, 1030, 790], [1132, 894, 634, 486]], // 141
+ 32 => [[4686, 3693, 2670, 2022], [2840, 2238, 1618, 1226], [1952, 1538, 1112, 842], [1201, 947, 684, 518]], // 145
+ 33 => [[4965, 3909, 2805, 2157], [3009, 2369, 1700, 1307], [2068, 1628, 1168, 898], [1273, 1002, 719, 553]], // 149
+ 34 => [[5253, 4134, 2949, 2301], [3183, 2506, 1787, 1394], [2188, 1722, 1228, 958], [1347, 1060, 756, 590]], // 153
+ 35 => [[5529, 4343, 3081, 2361], [3351, 2632, 1867, 1431], [2303, 1809, 1283, 983], [1417, 1113, 790, 605]], // 157
+ 36 => [[5836, 4588, 3244, 2524], [3537, 2780, 1966, 1530], [2431, 1911, 1351, 1051], [1496, 1176, 832, 647]], // 161
+ 37 => [[6153, 4775, 3417, 2625], [3729, 2894, 2071, 1591], [2563, 1989, 1423, 1093], [1577, 1224, 876, 673]], // 165
+ 38 => [[6479, 5039, 3599, 2735], [3927, 3054, 2181, 1658], [2699, 2099, 1499, 1139], [1661, 1292, 923, 701]], // 169
+ 39 => [[6743, 5313, 3791, 2927], [4087, 3220, 2298, 1774], [2809, 2213, 1579, 1219], [1729, 1362, 972, 750]], // 173
+ 40 => [[7089, 5596, 3993, 3057], [4296, 3391, 2420, 1852], [2953, 2331, 1663, 1273], [1817, 1435, 1024, 784]], // 177
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Tables 7-11 - Number of symbol characters and input data capacity for versions 1 to 40
+ *
+ * @var int [][]
+ */
+ const MAX_BITS = [
+ // version => [L, M, Q, H ]
+ 1 => [ 152, 128, 104, 72],
+ 2 => [ 272, 224, 176, 128],
+ 3 => [ 440, 352, 272, 208],
+ 4 => [ 640, 512, 384, 288],
+ 5 => [ 864, 688, 496, 368],
+ 6 => [ 1088, 864, 608, 480],
+ 7 => [ 1248, 992, 704, 528],
+ 8 => [ 1552, 1232, 880, 688],
+ 9 => [ 1856, 1456, 1056, 800],
+ 10 => [ 2192, 1728, 1232, 976],
+ 11 => [ 2592, 2032, 1440, 1120],
+ 12 => [ 2960, 2320, 1648, 1264],
+ 13 => [ 3424, 2672, 1952, 1440],
+ 14 => [ 3688, 2920, 2088, 1576],
+ 15 => [ 4184, 3320, 2360, 1784],
+ 16 => [ 4712, 3624, 2600, 2024],
+ 17 => [ 5176, 4056, 2936, 2264],
+ 18 => [ 5768, 4504, 3176, 2504],
+ 19 => [ 6360, 5016, 3560, 2728],
+ 20 => [ 6888, 5352, 3880, 3080],
+ 21 => [ 7456, 5712, 4096, 3248],
+ 22 => [ 8048, 6256, 4544, 3536],
+ 23 => [ 8752, 6880, 4912, 3712],
+ 24 => [ 9392, 7312, 5312, 4112],
+ 25 => [10208, 8000, 5744, 4304],
+ 26 => [10960, 8496, 6032, 4768],
+ 27 => [11744, 9024, 6464, 5024],
+ 28 => [12248, 9544, 6968, 5288],
+ 29 => [13048, 10136, 7288, 5608],
+ 30 => [13880, 10984, 7880, 5960],
+ 31 => [14744, 11640, 8264, 6344],
+ 32 => [15640, 12328, 8920, 6760],
+ 33 => [16568, 13048, 9368, 7208],
+ 34 => [17528, 13800, 9848, 7688],
+ 35 => [18448, 14496, 10288, 7888],
+ 36 => [19472, 15312, 10832, 8432],
+ 37 => [20528, 15936, 11408, 8768],
+ 38 => [21616, 16816, 12016, 9136],
+ 39 => [22496, 17728, 12656, 9776],
+ 40 => [23648, 18672, 13328, 10208],
+ ];
+
+ /**
+ * @see http://www.thonky.com/qr-code-tutorial/error-correction-table
+ *
+ * @var int [][][]
+ */
+ const RSBLOCKS = [
+ 1 => [[ 1, 0, 26, 19], [ 1, 0, 26, 16], [ 1, 0, 26, 13], [ 1, 0, 26, 9]],
+ 2 => [[ 1, 0, 44, 34], [ 1, 0, 44, 28], [ 1, 0, 44, 22], [ 1, 0, 44, 16]],
+ 3 => [[ 1, 0, 70, 55], [ 1, 0, 70, 44], [ 2, 0, 35, 17], [ 2, 0, 35, 13]],
+ 4 => [[ 1, 0, 100, 80], [ 2, 0, 50, 32], [ 2, 0, 50, 24], [ 4, 0, 25, 9]],
+ 5 => [[ 1, 0, 134, 108], [ 2, 0, 67, 43], [ 2, 2, 33, 15], [ 2, 2, 33, 11]],
+ 6 => [[ 2, 0, 86, 68], [ 4, 0, 43, 27], [ 4, 0, 43, 19], [ 4, 0, 43, 15]],
+ 7 => [[ 2, 0, 98, 78], [ 4, 0, 49, 31], [ 2, 4, 32, 14], [ 4, 1, 39, 13]],
+ 8 => [[ 2, 0, 121, 97], [ 2, 2, 60, 38], [ 4, 2, 40, 18], [ 4, 2, 40, 14]],
+ 9 => [[ 2, 0, 146, 116], [ 3, 2, 58, 36], [ 4, 4, 36, 16], [ 4, 4, 36, 12]],
+ 10 => [[ 2, 2, 86, 68], [ 4, 1, 69, 43], [ 6, 2, 43, 19], [ 6, 2, 43, 15]],
+ 11 => [[ 4, 0, 101, 81], [ 1, 4, 80, 50], [ 4, 4, 50, 22], [ 3, 8, 36, 12]],
+ 12 => [[ 2, 2, 116, 92], [ 6, 2, 58, 36], [ 4, 6, 46, 20], [ 7, 4, 42, 14]],
+ 13 => [[ 4, 0, 133, 107], [ 8, 1, 59, 37], [ 8, 4, 44, 20], [12, 4, 33, 11]],
+ 14 => [[ 3, 1, 145, 115], [ 4, 5, 64, 40], [11, 5, 36, 16], [11, 5, 36, 12]],
+ 15 => [[ 5, 1, 109, 87], [ 5, 5, 65, 41], [ 5, 7, 54, 24], [11, 7, 36, 12]],
+ 16 => [[ 5, 1, 122, 98], [ 7, 3, 73, 45], [15, 2, 43, 19], [ 3, 13, 45, 15]],
+ 17 => [[ 1, 5, 135, 107], [10, 1, 74, 46], [ 1, 15, 50, 22], [ 2, 17, 42, 14]],
+ 18 => [[ 5, 1, 150, 120], [ 9, 4, 69, 43], [17, 1, 50, 22], [ 2, 19, 42, 14]],
+ 19 => [[ 3, 4, 141, 113], [ 3, 11, 70, 44], [17, 4, 47, 21], [ 9, 16, 39, 13]],
+ 20 => [[ 3, 5, 135, 107], [ 3, 13, 67, 41], [15, 5, 54, 24], [15, 10, 43, 15]],
+ 21 => [[ 4, 4, 144, 116], [17, 0, 68, 42], [17, 6, 50, 22], [19, 6, 46, 16]],
+ 22 => [[ 2, 7, 139, 111], [17, 0, 74, 46], [ 7, 16, 54, 24], [34, 0, 37, 13]],
+ 23 => [[ 4, 5, 151, 121], [ 4, 14, 75, 47], [11, 14, 54, 24], [16, 14, 45, 15]],
+ 24 => [[ 6, 4, 147, 117], [ 6, 14, 73, 45], [11, 16, 54, 24], [30, 2, 46, 16]],
+ 25 => [[ 8, 4, 132, 106], [ 8, 13, 75, 47], [ 7, 22, 54, 24], [22, 13, 45, 15]],
+ 26 => [[10, 2, 142, 114], [19, 4, 74, 46], [28, 6, 50, 22], [33, 4, 46, 16]],
+ 27 => [[ 8, 4, 152, 122], [22, 3, 73, 45], [ 8, 26, 53, 23], [12, 28, 45, 15]],
+ 28 => [[ 3, 10, 147, 117], [ 3, 23, 73, 45], [ 4, 31, 54, 24], [11, 31, 45, 15]],
+ 29 => [[ 7, 7, 146, 116], [21, 7, 73, 45], [ 1, 37, 53, 23], [19, 26, 45, 15]],
+ 30 => [[ 5, 10, 145, 115], [19, 10, 75, 47], [15, 25, 54, 24], [23, 25, 45, 15]],
+ 31 => [[13, 3, 145, 115], [ 2, 29, 74, 46], [42, 1, 54, 24], [23, 28, 45, 15]],
+ 32 => [[17, 0, 145, 115], [10, 23, 74, 46], [10, 35, 54, 24], [19, 35, 45, 15]],
+ 33 => [[17, 1, 145, 115], [14, 21, 74, 46], [29, 19, 54, 24], [11, 46, 45, 15]],
+ 34 => [[13, 6, 145, 115], [14, 23, 74, 46], [44, 7, 54, 24], [59, 1, 46, 16]],
+ 35 => [[12, 7, 151, 121], [12, 26, 75, 47], [39, 14, 54, 24], [22, 41, 45, 15]],
+ 36 => [[ 6, 14, 151, 121], [ 6, 34, 75, 47], [46, 10, 54, 24], [ 2, 64, 45, 15]],
+ 37 => [[17, 4, 152, 122], [29, 14, 74, 46], [49, 10, 54, 24], [24, 46, 45, 15]],
+ 38 => [[ 4, 18, 152, 122], [13, 32, 74, 46], [48, 14, 54, 24], [42, 32, 45, 15]],
+ 39 => [[20, 4, 147, 117], [40, 7, 75, 47], [43, 22, 54, 24], [10, 67, 45, 15]],
+ 40 => [[19, 6, 148, 118], [18, 31, 75, 47], [34, 34, 54, 24], [20, 61, 45, 15]],
+ ];
+
+ /**
+ * Sets the data string (internally called by the constructor)
+ */
+ public function setData(string $data):QRDataInterface;
+
+ /**
+ * returns a fresh matrix object with the data written for the given $maskPattern
+ */
+ public function initMatrix(int $maskPattern, bool $test = null):QRMatrix;
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php b/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php
new file mode 100755
index 000000000..05c8b9069
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Data/QRMatrix.php
@@ -0,0 +1,740 @@
+<?php
+/**
+ * Class QRMatrix
+ *
+ * @filesource QRMatrix.php
+ * @created 15.11.2017
+ * @package chillerlan\QRCode\Data
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2017 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Data;
+
+use chillerlan\QRCode\QRCode;
+use Closure;
+
+use function array_fill, array_key_exists, array_push, array_unshift, count, floor, in_array, max, min, range;
+
+/**
+ * Holds a numerical representation of the final QR Code;
+ * maps the ECC coded binary data and applies the mask pattern
+ *
+ * @see http://www.thonky.com/qr-code-tutorial/format-version-information
+ */
+final class QRMatrix{
+
+ /** @var int */
+ public const M_NULL = 0x00;
+ /** @var int */
+ public const M_DARKMODULE = 0x02;
+ /** @var int */
+ public const M_DATA = 0x04;
+ /** @var int */
+ public const M_FINDER = 0x06;
+ /** @var int */
+ public const M_SEPARATOR = 0x08;
+ /** @var int */
+ public const M_ALIGNMENT = 0x0a;
+ /** @var int */
+ public const M_TIMING = 0x0c;
+ /** @var int */
+ public const M_FORMAT = 0x0e;
+ /** @var int */
+ public const M_VERSION = 0x10;
+ /** @var int */
+ public const M_QUIETZONE = 0x12;
+ /** @var int */
+ public const M_LOGO = 0x14;
+ /** @var int */
+ public const M_FINDER_DOT = 0x16;
+ /** @var int */
+ public const M_TEST = 0xff;
+
+ /**
+ * ISO/IEC 18004:2000 Annex E, Table E.1 - Row/column coordinates of center module of Alignment Patterns
+ *
+ * version -> pattern
+ *
+ * @var int[][]
+ */
+ protected const alignmentPattern = [
+ 1 => [],
+ 2 => [6, 18],
+ 3 => [6, 22],
+ 4 => [6, 26],
+ 5 => [6, 30],
+ 6 => [6, 34],
+ 7 => [6, 22, 38],
+ 8 => [6, 24, 42],
+ 9 => [6, 26, 46],
+ 10 => [6, 28, 50],
+ 11 => [6, 30, 54],
+ 12 => [6, 32, 58],
+ 13 => [6, 34, 62],
+ 14 => [6, 26, 46, 66],
+ 15 => [6, 26, 48, 70],
+ 16 => [6, 26, 50, 74],
+ 17 => [6, 30, 54, 78],
+ 18 => [6, 30, 56, 82],
+ 19 => [6, 30, 58, 86],
+ 20 => [6, 34, 62, 90],
+ 21 => [6, 28, 50, 72, 94],
+ 22 => [6, 26, 50, 74, 98],
+ 23 => [6, 30, 54, 78, 102],
+ 24 => [6, 28, 54, 80, 106],
+ 25 => [6, 32, 58, 84, 110],
+ 26 => [6, 30, 58, 86, 114],
+ 27 => [6, 34, 62, 90, 118],
+ 28 => [6, 26, 50, 74, 98, 122],
+ 29 => [6, 30, 54, 78, 102, 126],
+ 30 => [6, 26, 52, 78, 104, 130],
+ 31 => [6, 30, 56, 82, 108, 134],
+ 32 => [6, 34, 60, 86, 112, 138],
+ 33 => [6, 30, 58, 86, 114, 142],
+ 34 => [6, 34, 62, 90, 118, 146],
+ 35 => [6, 30, 54, 78, 102, 126, 150],
+ 36 => [6, 24, 50, 76, 102, 128, 154],
+ 37 => [6, 28, 54, 80, 106, 132, 158],
+ 38 => [6, 32, 58, 84, 110, 136, 162],
+ 39 => [6, 26, 54, 82, 110, 138, 166],
+ 40 => [6, 30, 58, 86, 114, 142, 170],
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Annex D, Table D.1 - Version information bit stream for each version
+ *
+ * no version pattern for QR Codes < 7
+ *
+ * @var int[]
+ */
+ protected const versionPattern = [
+ 7 => 0b000111110010010100,
+ 8 => 0b001000010110111100,
+ 9 => 0b001001101010011001,
+ 10 => 0b001010010011010011,
+ 11 => 0b001011101111110110,
+ 12 => 0b001100011101100010,
+ 13 => 0b001101100001000111,
+ 14 => 0b001110011000001101,
+ 15 => 0b001111100100101000,
+ 16 => 0b010000101101111000,
+ 17 => 0b010001010001011101,
+ 18 => 0b010010101000010111,
+ 19 => 0b010011010100110010,
+ 20 => 0b010100100110100110,
+ 21 => 0b010101011010000011,
+ 22 => 0b010110100011001001,
+ 23 => 0b010111011111101100,
+ 24 => 0b011000111011000100,
+ 25 => 0b011001000111100001,
+ 26 => 0b011010111110101011,
+ 27 => 0b011011000010001110,
+ 28 => 0b011100110000011010,
+ 29 => 0b011101001100111111,
+ 30 => 0b011110110101110101,
+ 31 => 0b011111001001010000,
+ 32 => 0b100000100111010101,
+ 33 => 0b100001011011110000,
+ 34 => 0b100010100010111010,
+ 35 => 0b100011011110011111,
+ 36 => 0b100100101100001011,
+ 37 => 0b100101010000101110,
+ 38 => 0b100110101001100100,
+ 39 => 0b100111010101000001,
+ 40 => 0b101000110001101001,
+ ];
+
+ /**
+ * ISO/IEC 18004:2000 Section 8.9 - Format Information
+ *
+ * ECC level -> mask pattern
+ *
+ * @var int[][]
+ */
+ protected const formatPattern = [
+ [ // L
+ 0b111011111000100,
+ 0b111001011110011,
+ 0b111110110101010,
+ 0b111100010011101,
+ 0b110011000101111,
+ 0b110001100011000,
+ 0b110110001000001,
+ 0b110100101110110,
+ ],
+ [ // M
+ 0b101010000010010,
+ 0b101000100100101,
+ 0b101111001111100,
+ 0b101101101001011,
+ 0b100010111111001,
+ 0b100000011001110,
+ 0b100111110010111,
+ 0b100101010100000,
+ ],
+ [ // Q
+ 0b011010101011111,
+ 0b011000001101000,
+ 0b011111100110001,
+ 0b011101000000110,
+ 0b010010010110100,
+ 0b010000110000011,
+ 0b010111011011010,
+ 0b010101111101101,
+ ],
+ [ // H
+ 0b001011010001001,
+ 0b001001110111110,
+ 0b001110011100111,
+ 0b001100111010000,
+ 0b000011101100010,
+ 0b000001001010101,
+ 0b000110100001100,
+ 0b000100000111011,
+ ],
+ ];
+
+ /**
+ * the current QR Code version number
+ */
+ protected int $version;
+
+ /**
+ * the current ECC level
+ */
+ protected int $eclevel;
+
+ /**
+ * the used mask pattern, set via QRMatrix::mapData()
+ */
+ protected int $maskPattern = QRCode::MASK_PATTERN_AUTO;
+
+ /**
+ * the size (side length) of the matrix
+ */
+ protected int $moduleCount;
+
+ /**
+ * the actual matrix data array
+ *
+ * @var int[][]
+ */
+ protected array $matrix;
+
+ /**
+ * QRMatrix constructor.
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public function __construct(int $version, int $eclevel){
+
+ if(!in_array($version, range(1, 40), true)){
+ throw new QRCodeDataException('invalid QR Code version');
+ }
+
+ if(!array_key_exists($eclevel, QRCode::ECC_MODES)){
+ throw new QRCodeDataException('invalid ecc level');
+ }
+
+ $this->version = $version;
+ $this->eclevel = $eclevel;
+ $this->moduleCount = $this->version * 4 + 17;
+ $this->matrix = array_fill(0, $this->moduleCount, array_fill(0, $this->moduleCount, $this::M_NULL));
+ }
+
+ /**
+ * shortcut to initialize the matrix
+ */
+ public function init(int $maskPattern, bool $test = null):QRMatrix{
+ return $this
+ ->setFinderPattern()
+ ->setSeparators()
+ ->setAlignmentPattern()
+ ->setTimingPattern()
+ ->setVersionNumber($test)
+ ->setFormatInfo($maskPattern, $test)
+ ->setDarkModule()
+ ;
+ }
+
+ /**
+ * Returns the data matrix, returns a pure boolean representation if $boolean is set to true
+ *
+ * @return int[][]|bool[][]
+ */
+ public function matrix(bool $boolean = false):array{
+
+ if(!$boolean){
+ return $this->matrix;
+ }
+
+ $matrix = [];
+
+ foreach($this->matrix as $y => $row){
+ $matrix[$y] = [];
+
+ foreach($row as $x => $val){
+ $matrix[$y][$x] = ($val >> 8) > 0;
+ }
+ }
+
+ return $matrix;
+ }
+
+ /**
+ * Returns the current version number
+ */
+ public function version():int{
+ return $this->version;
+ }
+
+ /**
+ * Returns the current ECC level
+ */
+ public function eccLevel():int{
+ return $this->eclevel;
+ }
+
+ /**
+ * Returns the current mask pattern
+ */
+ public function maskPattern():int{
+ return $this->maskPattern;
+ }
+
+ /**
+ * Returns the absoulute size of the matrix, including quiet zone (after setting it).
+ *
+ * size = version * 4 + 17 [ + 2 * quietzone size]
+ */
+ public function size():int{
+ return $this->moduleCount;
+ }
+
+ /**
+ * Returns the value of the module at position [$x, $y]
+ */
+ public function get(int $x, int $y):int{
+ return $this->matrix[$y][$x];
+ }
+
+ /**
+ * Sets the $M_TYPE value for the module at position [$x, $y]
+ *
+ * true => $M_TYPE << 8
+ * false => $M_TYPE
+ */
+ public function set(int $x, int $y, bool $value, int $M_TYPE):QRMatrix{
+ $this->matrix[$y][$x] = $M_TYPE << ($value ? 8 : 0);
+
+ return $this;
+ }
+
+ /**
+ * Checks whether a module is true (dark) or false (light)
+ *
+ * true => $value >> 8 === $M_TYPE
+ * $value >> 8 > 0
+ *
+ * false => $value === $M_TYPE
+ * $value >> 8 === 0
+ */
+ public function check(int $x, int $y):bool{
+ return ($this->matrix[$y][$x] >> 8) > 0;
+ }
+
+
+ /**
+ * Sets the "dark module", that is always on the same position 1x1px away from the bottom left finder
+ */
+ public function setDarkModule():QRMatrix{
+ $this->set(8, 4 * $this->version + 9, true, $this::M_DARKMODULE);
+
+ return $this;
+ }
+
+ /**
+ * Draws the 7x7 finder patterns in the corners top left/right and bottom left
+ *
+ * ISO/IEC 18004:2000 Section 7.3.2
+ */
+ public function setFinderPattern():QRMatrix{
+
+ $pos = [
+ [0, 0], // top left
+ [$this->moduleCount - 7, 0], // bottom left
+ [0, $this->moduleCount - 7], // top right
+ ];
+
+ foreach($pos as $c){
+ for($y = 0; $y < 7; $y++){
+ for($x = 0; $x < 7; $x++){
+ // outer (dark) 7*7 square
+ if($x === 0 || $x === 6 || $y === 0 || $y === 6){
+ $this->set($c[0] + $y, $c[1] + $x, true, $this::M_FINDER);
+ }
+ // inner (light) 5*5 square
+ elseif($x === 1 || $x === 5 || $y === 1 || $y === 5){
+ $this->set($c[0] + $y, $c[1] + $x, false, $this::M_FINDER);
+ }
+ // 3*3 dot
+ else{
+ $this->set($c[0] + $y, $c[1] + $x, true, $this::M_FINDER_DOT);
+ }
+ }
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Draws the separator lines around the finder patterns
+ *
+ * ISO/IEC 18004:2000 Section 7.3.3
+ */
+ public function setSeparators():QRMatrix{
+
+ $h = [
+ [7, 0],
+ [$this->moduleCount - 8, 0],
+ [7, $this->moduleCount - 8],
+ ];
+
+ $v = [
+ [7, 7],
+ [$this->moduleCount - 1, 7],
+ [7, $this->moduleCount - 8],
+ ];
+
+ for($c = 0; $c < 3; $c++){
+ for($i = 0; $i < 8; $i++){
+ $this->set($h[$c][0] , $h[$c][1] + $i, false, $this::M_SEPARATOR);
+ $this->set($v[$c][0] - $i, $v[$c][1] , false, $this::M_SEPARATOR);
+ }
+ }
+
+ return $this;
+ }
+
+
+ /**
+ * Draws the 5x5 alignment patterns
+ *
+ * ISO/IEC 18004:2000 Section 7.3.5
+ */
+ public function setAlignmentPattern():QRMatrix{
+
+ foreach($this::alignmentPattern[$this->version] as $y){
+ foreach($this::alignmentPattern[$this->version] as $x){
+
+ // skip existing patterns
+ if($this->matrix[$y][$x] !== $this::M_NULL){
+ continue;
+ }
+
+ for($ry = -2; $ry <= 2; $ry++){
+ for($rx = -2; $rx <= 2; $rx++){
+ $v = ($ry === 0 && $rx === 0) || $ry === 2 || $ry === -2 || $rx === 2 || $rx === -2;
+
+ $this->set($x + $rx, $y + $ry, $v, $this::M_ALIGNMENT);
+ }
+ }
+
+ }
+ }
+
+ return $this;
+ }
+
+
+ /**
+ * Draws the timing pattern (h/v checkered line between the finder patterns)
+ *
+ * ISO/IEC 18004:2000 Section 7.3.4
+ */
+ public function setTimingPattern():QRMatrix{
+
+ foreach(range(8, $this->moduleCount - 8 - 1) as $i){
+
+ if($this->matrix[6][$i] !== $this::M_NULL || $this->matrix[$i][6] !== $this::M_NULL){
+ continue;
+ }
+
+ $v = $i % 2 === 0;
+
+ $this->set($i, 6, $v, $this::M_TIMING); // h
+ $this->set(6, $i, $v, $this::M_TIMING); // v
+ }
+
+ return $this;
+ }
+
+ /**
+ * Draws the version information, 2x 3x6 pixel
+ *
+ * ISO/IEC 18004:2000 Section 8.10
+ */
+ public function setVersionNumber(bool $test = null):QRMatrix{
+ $bits = $this::versionPattern[$this->version] ?? false;
+
+ if($bits !== false){
+
+ for($i = 0; $i < 18; $i++){
+ $a = (int)floor($i / 3);
+ $b = $i % 3 + $this->moduleCount - 8 - 3;
+ $v = !$test && (($bits >> $i) & 1) === 1;
+
+ $this->set($b, $a, $v, $this::M_VERSION); // ne
+ $this->set($a, $b, $v, $this::M_VERSION); // sw
+ }
+
+ }
+
+ return $this;
+ }
+
+ /**
+ * Draws the format info along the finder patterns
+ *
+ * ISO/IEC 18004:2000 Section 8.9
+ */
+ public function setFormatInfo(int $maskPattern, bool $test = null):QRMatrix{
+ $bits = $this::formatPattern[QRCode::ECC_MODES[$this->eclevel]][$maskPattern] ?? 0;
+
+ for($i = 0; $i < 15; $i++){
+ $v = !$test && (($bits >> $i) & 1) === 1;
+
+ if($i < 6){
+ $this->set(8, $i, $v, $this::M_FORMAT);
+ }
+ elseif($i < 8){
+ $this->set(8, $i + 1, $v, $this::M_FORMAT);
+ }
+ else{
+ $this->set(8, $this->moduleCount - 15 + $i, $v, $this::M_FORMAT);
+ }
+
+ if($i < 8){
+ $this->set($this->moduleCount - $i - 1, 8, $v, $this::M_FORMAT);
+ }
+ elseif($i < 9){
+ $this->set(15 - $i, 8, $v, $this::M_FORMAT);
+ }
+ else{
+ $this->set(15 - $i - 1, 8, $v, $this::M_FORMAT);
+ }
+
+ }
+
+ $this->set(8, $this->moduleCount - 8, !$test, $this::M_FORMAT);
+
+ return $this;
+ }
+
+ /**
+ * Draws the "quiet zone" of $size around the matrix
+ *
+ * ISO/IEC 18004:2000 Section 7.3.7
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public function setQuietZone(int $size = null):QRMatrix{
+
+ if($this->matrix[$this->moduleCount - 1][$this->moduleCount - 1] === $this::M_NULL){
+ throw new QRCodeDataException('use only after writing data');
+ }
+
+ $size = $size !== null
+ ? max(0, min($size, floor($this->moduleCount / 2)))
+ : 4;
+
+ for($y = 0; $y < $this->moduleCount; $y++){
+ for($i = 0; $i < $size; $i++){
+ array_unshift($this->matrix[$y], $this::M_QUIETZONE);
+ array_push($this->matrix[$y], $this::M_QUIETZONE);
+ }
+ }
+
+ $this->moduleCount += ($size * 2);
+
+ $r = array_fill(0, $this->moduleCount, $this::M_QUIETZONE);
+
+ for($i = 0; $i < $size; $i++){
+ array_unshift($this->matrix, $r);
+ array_push($this->matrix, $r);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Clears a space of $width * $height in order to add a logo or text.
+ *
+ * Additionally, the logo space can be positioned within the QR Code - respecting the main functional patterns -
+ * using $startX and $startY. If either of these are null, the logo space will be centered in that direction.
+ * ECC level "H" (30%) is required.
+ *
+ * Please note that adding a logo space minimizes the error correction capacity of the QR Code and
+ * created images may become unreadable, especially when printed with a chance to receive damage.
+ * Please test thoroughly before using this feature in production.
+ *
+ * This method should be called from within an output module (after the matrix has been filled with data).
+ * Note that there is no restiction on how many times this method could be called on the same matrix instance.
+ *
+ * @link https://github.com/chillerlan/php-qrcode/issues/52
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public function setLogoSpace(int $width, int $height, int $startX = null, int $startY = null):QRMatrix{
+
+ // for logos we operate in ECC H (30%) only
+ if($this->eclevel !== QRCode::ECC_H){
+ throw new QRCodeDataException('ECC level "H" required to add logo space');
+ }
+
+ // we need uneven sizes to center the logo space, adjust if needed
+ if($startX === null && ($width % 2) === 0){
+ $width++;
+ }
+
+ if($startY === null && ($height % 2) === 0){
+ $height++;
+ }
+
+ // $this->moduleCount includes the quiet zone (if created), we need the QR size here
+ $length = $this->version * 4 + 17;
+
+ // throw if the logo space exceeds the maximum error correction capacity
+ if($width * $height > floor($length * $length * 0.2)){
+ throw new QRCodeDataException('logo space exceeds the maximum error correction capacity');
+ }
+
+ // quiet zone size
+ $qz = ($this->moduleCount - $length) / 2;
+ // skip quiet zone and the first 9 rows/columns (finder-, mode-, version- and timing patterns)
+ $start = $qz + 9;
+ // skip quiet zone
+ $end = $this->moduleCount - $qz;
+
+ // determine start coordinates
+ $startX = ($startX !== null ? $startX : ($length - $width) / 2) + $qz;
+ $startY = ($startY !== null ? $startY : ($length - $height) / 2) + $qz;
+
+ // clear the space
+ foreach($this->matrix as $y => $row){
+ foreach($row as $x => $val){
+ // out of bounds, skip
+ if($x < $start || $y < $start ||$x >= $end || $y >= $end){
+ continue;
+ }
+ // a match
+ if($x >= $startX && $x < ($startX + $width) && $y >= $startY && $y < ($startY + $height)){
+ $this->set($x, $y, false, $this::M_LOGO);
+ }
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * Maps the binary $data array from QRDataInterface::maskECC() on the matrix,
+ * masking the data using $maskPattern (ISO/IEC 18004:2000 Section 8.8)
+ *
+ * @see \chillerlan\QRCode\Data\QRDataAbstract::maskECC()
+ *
+ * @param int[] $data
+ * @param int $maskPattern
+ *
+ * @return \chillerlan\QRCode\Data\QRMatrix
+ */
+ public function mapData(array $data, int $maskPattern):QRMatrix{
+ $this->maskPattern = $maskPattern;
+ $byteCount = count($data);
+ $y = $this->moduleCount - 1;
+ $inc = -1;
+ $byteIndex = 0;
+ $bitIndex = 7;
+ $mask = $this->getMask($this->maskPattern);
+
+ for($i = $y; $i > 0; $i -= 2){
+
+ if($i === 6){
+ $i--;
+ }
+
+ while(true){
+ for($c = 0; $c < 2; $c++){
+ $x = $i - $c;
+
+ if($this->matrix[$y][$x] === $this::M_NULL){
+ $v = false;
+
+ if($byteIndex < $byteCount){
+ $v = (($data[$byteIndex] >> $bitIndex) & 1) === 1;
+ }
+
+ if($mask($x, $y) === 0){
+ $v = !$v;
+ }
+
+ $this->matrix[$y][$x] = $this::M_DATA << ($v ? 8 : 0);
+ $bitIndex--;
+
+ if($bitIndex === -1){
+ $byteIndex++;
+ $bitIndex = 7;
+ }
+
+ }
+ }
+
+ $y += $inc;
+
+ if($y < 0 || $this->moduleCount <= $y){
+ $y -= $inc;
+ $inc = -$inc;
+
+ break;
+ }
+
+ }
+ }
+
+ return $this;
+ }
+
+ /**
+ * ISO/IEC 18004:2000 Section 8.8.1
+ *
+ * Note that some versions of the QR code standard have had errors in the section about mask patterns.
+ * The information below has been corrected. (https://www.thonky.com/qr-code-tutorial/mask-patterns)
+ *
+ * @see \chillerlan\QRCode\QRMatrix::mapData()
+ *
+ * @internal
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ protected function getMask(int $maskPattern):Closure{
+
+ if((0b111 & $maskPattern) !== $maskPattern){
+ throw new QRCodeDataException('invalid mask pattern'); // @codeCoverageIgnore
+ }
+
+ return [
+ 0b000 => fn($x, $y):int => ($x + $y) % 2,
+ 0b001 => fn($x, $y):int => $y % 2,
+ 0b010 => fn($x, $y):int => $x % 3,
+ 0b011 => fn($x, $y):int => ($x + $y) % 3,
+ 0b100 => fn($x, $y):int => ((int)($y / 2) + (int)($x / 3)) % 2,
+ 0b101 => fn($x, $y):int => (($x * $y) % 2) + (($x * $y) % 3),
+ 0b110 => fn($x, $y):int => ((($x * $y) % 2) + (($x * $y) % 3)) % 2,
+ 0b111 => fn($x, $y):int => ((($x * $y) % 3) + (($x + $y) % 2)) % 2,
+ ][$maskPattern];
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php b/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php
new file mode 100644
index 000000000..de47f20f4
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Helpers/BitBuffer.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Class BitBuffer
+ *
+ * @filesource BitBuffer.php
+ * @created 25.11.2015
+ * @package chillerlan\QRCode\Helpers
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Helpers;
+
+use function count, floor;
+
+/**
+ * Holds the raw binary data
+ */
+final class BitBuffer{
+
+ /**
+ * The buffer content
+ *
+ * @var int[]
+ */
+ protected array $buffer = [];
+
+ /**
+ * Length of the content (bits)
+ */
+ protected int $length = 0;
+
+ /**
+ * clears the buffer
+ */
+ public function clear():BitBuffer{
+ $this->buffer = [];
+ $this->length = 0;
+
+ return $this;
+ }
+
+ /**
+ * appends a sequence of bits
+ */
+ public function put(int $num, int $length):BitBuffer{
+
+ for($i = 0; $i < $length; $i++){
+ $this->putBit((($num >> ($length - $i - 1)) & 1) === 1);
+ }
+
+ return $this;
+ }
+
+ /**
+ * appends a single bit
+ */
+ public function putBit(bool $bit):BitBuffer{
+ $bufIndex = floor($this->length / 8);
+
+ if(count($this->buffer) <= $bufIndex){
+ $this->buffer[] = 0;
+ }
+
+ if($bit === true){
+ $this->buffer[(int)$bufIndex] |= (0x80 >> ($this->length % 8));
+ }
+
+ $this->length++;
+
+ return $this;
+ }
+
+ /**
+ * returns the current buffer length
+ */
+ public function getLength():int{
+ return $this->length;
+ }
+
+ /**
+ * returns the buffer content
+ */
+ public function getBuffer():array{
+ return $this->buffer;
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php b/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php
new file mode 100644
index 000000000..c42e0831c
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Helpers/Polynomial.php
@@ -0,0 +1,178 @@
+<?php
+/**
+ * Class Polynomial
+ *
+ * @filesource Polynomial.php
+ * @created 25.11.2015
+ * @package chillerlan\QRCode\Helpers
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Helpers;
+
+use chillerlan\QRCode\QRCodeException;
+
+use function array_fill, count, sprintf;
+
+/**
+ * Polynomial long division helpers
+ *
+ * @see http://www.thonky.com/qr-code-tutorial/error-correction-coding
+ */
+final class Polynomial{
+
+ /**
+ * @see http://www.thonky.com/qr-code-tutorial/log-antilog-table
+ */
+ protected const table = [
+ [ 1, 0], [ 2, 0], [ 4, 1], [ 8, 25], [ 16, 2], [ 32, 50], [ 64, 26], [128, 198],
+ [ 29, 3], [ 58, 223], [116, 51], [232, 238], [205, 27], [135, 104], [ 19, 199], [ 38, 75],
+ [ 76, 4], [152, 100], [ 45, 224], [ 90, 14], [180, 52], [117, 141], [234, 239], [201, 129],
+ [143, 28], [ 3, 193], [ 6, 105], [ 12, 248], [ 24, 200], [ 48, 8], [ 96, 76], [192, 113],
+ [157, 5], [ 39, 138], [ 78, 101], [156, 47], [ 37, 225], [ 74, 36], [148, 15], [ 53, 33],
+ [106, 53], [212, 147], [181, 142], [119, 218], [238, 240], [193, 18], [159, 130], [ 35, 69],
+ [ 70, 29], [140, 181], [ 5, 194], [ 10, 125], [ 20, 106], [ 40, 39], [ 80, 249], [160, 185],
+ [ 93, 201], [186, 154], [105, 9], [210, 120], [185, 77], [111, 228], [222, 114], [161, 166],
+ [ 95, 6], [190, 191], [ 97, 139], [194, 98], [153, 102], [ 47, 221], [ 94, 48], [188, 253],
+ [101, 226], [202, 152], [137, 37], [ 15, 179], [ 30, 16], [ 60, 145], [120, 34], [240, 136],
+ [253, 54], [231, 208], [211, 148], [187, 206], [107, 143], [214, 150], [177, 219], [127, 189],
+ [254, 241], [225, 210], [223, 19], [163, 92], [ 91, 131], [182, 56], [113, 70], [226, 64],
+ [217, 30], [175, 66], [ 67, 182], [134, 163], [ 17, 195], [ 34, 72], [ 68, 126], [136, 110],
+ [ 13, 107], [ 26, 58], [ 52, 40], [104, 84], [208, 250], [189, 133], [103, 186], [206, 61],
+ [129, 202], [ 31, 94], [ 62, 155], [124, 159], [248, 10], [237, 21], [199, 121], [147, 43],
+ [ 59, 78], [118, 212], [236, 229], [197, 172], [151, 115], [ 51, 243], [102, 167], [204, 87],
+ [133, 7], [ 23, 112], [ 46, 192], [ 92, 247], [184, 140], [109, 128], [218, 99], [169, 13],
+ [ 79, 103], [158, 74], [ 33, 222], [ 66, 237], [132, 49], [ 21, 197], [ 42, 254], [ 84, 24],
+ [168, 227], [ 77, 165], [154, 153], [ 41, 119], [ 82, 38], [164, 184], [ 85, 180], [170, 124],
+ [ 73, 17], [146, 68], [ 57, 146], [114, 217], [228, 35], [213, 32], [183, 137], [115, 46],
+ [230, 55], [209, 63], [191, 209], [ 99, 91], [198, 149], [145, 188], [ 63, 207], [126, 205],
+ [252, 144], [229, 135], [215, 151], [179, 178], [123, 220], [246, 252], [241, 190], [255, 97],
+ [227, 242], [219, 86], [171, 211], [ 75, 171], [150, 20], [ 49, 42], [ 98, 93], [196, 158],
+ [149, 132], [ 55, 60], [110, 57], [220, 83], [165, 71], [ 87, 109], [174, 65], [ 65, 162],
+ [130, 31], [ 25, 45], [ 50, 67], [100, 216], [200, 183], [141, 123], [ 7, 164], [ 14, 118],
+ [ 28, 196], [ 56, 23], [112, 73], [224, 236], [221, 127], [167, 12], [ 83, 111], [166, 246],
+ [ 81, 108], [162, 161], [ 89, 59], [178, 82], [121, 41], [242, 157], [249, 85], [239, 170],
+ [195, 251], [155, 96], [ 43, 134], [ 86, 177], [172, 187], [ 69, 204], [138, 62], [ 9, 90],
+ [ 18, 203], [ 36, 89], [ 72, 95], [144, 176], [ 61, 156], [122, 169], [244, 160], [245, 81],
+ [247, 11], [243, 245], [251, 22], [235, 235], [203, 122], [139, 117], [ 11, 44], [ 22, 215],
+ [ 44, 79], [ 88, 174], [176, 213], [125, 233], [250, 230], [233, 231], [207, 173], [131, 232],
+ [ 27, 116], [ 54, 214], [108, 244], [216, 234], [173, 168], [ 71, 80], [142, 88], [ 1, 175],
+ ];
+
+ /**
+ * @var int[]
+ */
+ protected array $num = [];
+
+ /**
+ * Polynomial constructor.
+ */
+ public function __construct(array $num = null, int $shift = null){
+ $this->setNum($num ?? [1], $shift);
+ }
+
+ /**
+ *
+ */
+ public function getNum():array{
+ return $this->num;
+ }
+
+ /**
+ * @param int[] $num
+ * @param int|null $shift
+ *
+ * @return \chillerlan\QRCode\Helpers\Polynomial
+ */
+ public function setNum(array $num, int $shift = null):Polynomial{
+ $offset = 0;
+ $numCount = count($num);
+
+ while($offset < $numCount && $num[$offset] === 0){
+ $offset++;
+ }
+
+ $this->num = array_fill(0, $numCount - $offset + ($shift ?? 0), 0);
+
+ for($i = 0; $i < $numCount - $offset; $i++){
+ $this->num[$i] = $num[$i + $offset];
+ }
+
+ return $this;
+ }
+
+ /**
+ * @param int[] $e
+ *
+ * @return \chillerlan\QRCode\Helpers\Polynomial
+ */
+ public function multiply(array $e):Polynomial{
+ $n = array_fill(0, count($this->num) + count($e) - 1, 0);
+
+ foreach($this->num as $i => $vi){
+ $vi = $this->glog($vi);
+
+ foreach($e as $j => $vj){
+ $n[$i + $j] ^= $this->gexp($vi + $this->glog($vj));
+ }
+
+ }
+
+ $this->setNum($n);
+
+ return $this;
+ }
+
+ /**
+ * @param int[] $e
+ *
+ * @return \chillerlan\QRCode\Helpers\Polynomial
+ */
+ public function mod(array $e):Polynomial{
+ $n = $this->num;
+
+ if(count($n) - count($e) < 0){
+ return $this;
+ }
+
+ $ratio = $this->glog($n[0]) - $this->glog($e[0]);
+
+ foreach($e as $i => $v){
+ $n[$i] ^= $this->gexp($this->glog($v) + $ratio);
+ }
+
+ $this->setNum($n)->mod($e);
+
+ return $this;
+ }
+
+ /**
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ public function glog(int $n):int{
+
+ if($n < 1){
+ throw new QRCodeException(sprintf('log(%s)', $n));
+ }
+
+ return Polynomial::table[$n][1];
+ }
+
+ /**
+ *
+ */
+ public function gexp(int $n):int{
+
+ if($n < 0){
+ $n += 255;
+ }
+ elseif($n >= 256){
+ $n -= 255;
+ }
+
+ return Polynomial::table[$n][0];
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php b/vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php
new file mode 100644
index 000000000..639bdd111
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Class QRCodeOutputException
+ *
+ * @filesource QRCodeOutputException.php
+ * @created 09.12.2015
+ * @package chillerlan\QRCode\Output
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\QRCodeException;
+
+class QRCodeOutputException extends QRCodeException{}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php b/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php
new file mode 100644
index 000000000..a15ae9ff3
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRFpdf.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Class QRFpdf
+ *
+ * https://github.com/chillerlan/php-qrcode/pull/49
+ *
+ * @filesource QRFpdf.php
+ * @created 03.06.2020
+ * @package chillerlan\QRCode\Output
+ * @author Maximilian Kresse
+ *
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\QRCodeException;
+use chillerlan\Settings\SettingsContainerInterface;
+use FPDF;
+
+use function array_values, class_exists, count, is_array;
+
+/**
+ * QRFpdf output module (requires fpdf)
+ *
+ * @see https://github.com/Setasign/FPDF
+ * @see http://www.fpdf.org/
+ */
+class QRFpdf extends QROutputAbstract{
+
+ public function __construct(SettingsContainerInterface $options, QRMatrix $matrix){
+
+ if(!class_exists(FPDF::class)){
+ // @codeCoverageIgnoreStart
+ throw new QRCodeException(
+ 'The QRFpdf output requires FPDF as dependency but the class "\FPDF" couldn\'t be found.'
+ );
+ // @codeCoverageIgnoreEnd
+ }
+
+ parent::__construct($options, $matrix);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function setModuleValues():void{
+
+ foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){
+ $v = $this->options->moduleValues[$M_TYPE] ?? null;
+
+ if(!is_array($v) || count($v) < 3){
+ $this->moduleValues[$M_TYPE] = $defaultValue
+ ? [0, 0, 0]
+ : [255, 255, 255];
+ }
+ else{
+ $this->moduleValues[$M_TYPE] = array_values($v);
+ }
+
+ }
+
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @return string|\FPDF
+ */
+ public function dump(string $file = null){
+ $file ??= $this->options->cachefile;
+
+ $fpdf = new FPDF('P', $this->options->fpdfMeasureUnit, [$this->length, $this->length]);
+ $fpdf->AddPage();
+
+ $prevColor = null;
+
+ foreach($this->matrix->matrix() as $y => $row){
+
+ foreach($row as $x => $M_TYPE){
+ /** @var int $M_TYPE */
+ $color = $this->moduleValues[$M_TYPE];
+
+ if($prevColor === null || $prevColor !== $color){
+ /** @phan-suppress-next-line PhanParamTooFewUnpack */
+ $fpdf->SetFillColor(...$color);
+ $prevColor = $color;
+ }
+
+ $fpdf->Rect($x * $this->scale, $y * $this->scale, 1 * $this->scale, 1 * $this->scale, 'F');
+ }
+
+ }
+
+ if($this->options->returnResource){
+ return $fpdf;
+ }
+
+ $pdfData = $fpdf->Output('S');
+
+ if($file !== null){
+ $this->saveToFile($pdfData, $file);
+ }
+
+ if($this->options->imageBase64){
+ $pdfData = sprintf('data:application/pdf;base64,%s', base64_encode($pdfData));
+ }
+
+ return $pdfData;
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRImage.php b/vendor/chillerlan/php-qrcode/src/Output/QRImage.php
new file mode 100644
index 000000000..8f533d341
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRImage.php
@@ -0,0 +1,217 @@
+<?php
+/**
+ * Class QRImage
+ *
+ * @filesource QRImage.php
+ * @created 05.12.2015
+ * @package chillerlan\QRCode\Output
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\{QRCode, QRCodeException};
+use chillerlan\Settings\SettingsContainerInterface;
+use Exception;
+
+use function array_values, base64_encode, call_user_func, count, extension_loaded, imagecolorallocate, imagecolortransparent,
+ imagecreatetruecolor, imagedestroy, imagefilledrectangle, imagegif, imagejpeg, imagepng, in_array,
+ is_array, ob_end_clean, ob_get_contents, ob_start, range, sprintf;
+
+/**
+ * Converts the matrix into GD images, raw or base64 output (requires ext-gd)
+ *
+ * @see http://php.net/manual/book.image.php
+ */
+class QRImage extends QROutputAbstract{
+
+ /**
+ * GD image types that support transparency
+ *
+ * @var string[]
+ */
+ protected const TRANSPARENCY_TYPES = [
+ QRCode::OUTPUT_IMAGE_PNG,
+ QRCode::OUTPUT_IMAGE_GIF,
+ ];
+
+ protected string $defaultMode = QRCode::OUTPUT_IMAGE_PNG;
+
+ /**
+ * The GD image resource
+ *
+ * @see imagecreatetruecolor()
+ * @var resource|\GdImage
+ *
+ * @phan-suppress PhanUndeclaredTypeProperty
+ */
+ protected $image;
+
+ /**
+ * @inheritDoc
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ public function __construct(SettingsContainerInterface $options, QRMatrix $matrix){
+
+ if(!extension_loaded('gd')){
+ throw new QRCodeException('ext-gd not loaded'); // @codeCoverageIgnore
+ }
+
+ parent::__construct($options, $matrix);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function setModuleValues():void{
+
+ foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){
+ $v = $this->options->moduleValues[$M_TYPE] ?? null;
+
+ if(!is_array($v) || count($v) < 3){
+ $this->moduleValues[$M_TYPE] = $defaultValue
+ ? [0, 0, 0]
+ : [255, 255, 255];
+ }
+ else{
+ $this->moduleValues[$M_TYPE] = array_values($v);
+ }
+
+ }
+
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @return string|resource|\GdImage
+ *
+ * @phan-suppress PhanUndeclaredTypeReturnType, PhanTypeMismatchReturn
+ */
+ public function dump(string $file = null){
+ $file ??= $this->options->cachefile;
+
+ $this->image = imagecreatetruecolor($this->length, $this->length);
+
+ // avoid: Indirect modification of overloaded property $imageTransparencyBG has no effect
+ // https://stackoverflow.com/a/10455217
+ $tbg = $this->options->imageTransparencyBG;
+ /** @phan-suppress-next-line PhanParamTooFewInternalUnpack */
+ $background = imagecolorallocate($this->image, ...$tbg);
+
+ if((bool)$this->options->imageTransparent && in_array($this->options->outputType, $this::TRANSPARENCY_TYPES, true)){
+ imagecolortransparent($this->image, $background);
+ }
+
+ imagefilledrectangle($this->image, 0, 0, $this->length, $this->length, $background);
+
+ foreach($this->matrix->matrix() as $y => $row){
+ foreach($row as $x => $M_TYPE){
+ $this->setPixel($x, $y, $this->moduleValues[$M_TYPE]);
+ }
+ }
+
+ if($this->options->returnResource){
+ return $this->image;
+ }
+
+ $imageData = $this->dumpImage();
+
+ if($file !== null){
+ $this->saveToFile($imageData, $file);
+ }
+
+ if($this->options->imageBase64){
+ $imageData = sprintf('data:image/%s;base64,%s', $this->options->outputType, base64_encode($imageData));
+ }
+
+ return $imageData;
+ }
+
+ /**
+ * Creates a single QR pixel with the given settings
+ */
+ protected function setPixel(int $x, int $y, array $rgb):void{
+ imagefilledrectangle(
+ $this->image,
+ $x * $this->scale,
+ $y * $this->scale,
+ ($x + 1) * $this->scale,
+ ($y + 1) * $this->scale,
+ /** @phan-suppress-next-line PhanParamTooFewInternalUnpack */
+ imagecolorallocate($this->image, ...$rgb)
+ );
+ }
+
+ /**
+ * Creates the final image by calling the desired GD output function
+ *
+ * @throws \chillerlan\QRCode\Output\QRCodeOutputException
+ */
+ protected function dumpImage():string{
+ ob_start();
+
+ try{
+ call_user_func([$this, $this->outputMode ?? $this->defaultMode]);
+ }
+ // not going to cover edge cases
+ // @codeCoverageIgnoreStart
+ catch(Exception $e){
+ throw new QRCodeOutputException($e->getMessage());
+ }
+ // @codeCoverageIgnoreEnd
+
+ $imageData = ob_get_contents();
+ imagedestroy($this->image);
+
+ ob_end_clean();
+
+ return $imageData;
+ }
+
+ /**
+ * PNG output
+ *
+ * @return void
+ */
+ protected function png():void{
+ imagepng(
+ $this->image,
+ null,
+ in_array($this->options->pngCompression, range(-1, 9), true)
+ ? $this->options->pngCompression
+ : -1
+ );
+ }
+
+ /**
+ * Jiff - like... JitHub!
+ *
+ * @return void
+ */
+ protected function gif():void{
+ imagegif($this->image);
+ }
+
+ /**
+ * JPG output
+ *
+ * @return void
+ */
+ protected function jpg():void{
+ imagejpeg(
+ $this->image,
+ null,
+ in_array($this->options->jpegQuality, range(0, 100), true)
+ ? $this->options->jpegQuality
+ : 85
+ );
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php b/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php
new file mode 100644
index 000000000..49516d30e
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRImagick.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * Class QRImagick
+ *
+ * @filesource QRImagick.php
+ * @created 04.07.2018
+ * @package chillerlan\QRCode\Output
+ * @author smiley <smiley@chillerlan.net>
+ * @copyright 2018 smiley
+ * @license MIT
+ *
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\Data\QRMatrix;
+use chillerlan\QRCode\QRCodeException;
+use chillerlan\Settings\SettingsContainerInterface;
+use Imagick, ImagickDraw, ImagickPixel;
+
+use function extension_loaded, is_string;
+
+/**
+ * ImageMagick output module (requires ext-imagick)
+ *
+ * @see http://php.net/manual/book.imagick.php
+ * @see http://phpimagick.com
+ */
+class QRImagick extends QROutputAbstract{
+
+ protected Imagick $imagick;
+
+ /**
+ * @inheritDoc
+ */
+ public function __construct(SettingsContainerInterface $options, QRMatrix $matrix){
+
+ if(!extension_loaded('imagick')){
+ throw new QRCodeException('ext-imagick not loaded'); // @codeCoverageIgnore
+ }
+
+ parent::__construct($options, $matrix);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ protected function setModuleValues():void{
+
+ foreach($this::DEFAULT_MODULE_VALUES as $type => $defaultValue){
+ $v = $this->options->moduleValues[$type] ?? null;
+
+ if(!is_string($v)){
+ $this->moduleValues[$type] = $defaultValue
+ ? new ImagickPixel($this->options->markupDark)
+ : new ImagickPixel($this->options->markupLight);
+ }
+ else{
+ $this->moduleValues[$type] = new ImagickPixel($v);
+ }
+ }
+ }
+
+ /**
+ * @inheritDoc
+ *
+ * @return string|\Imagick
+ */
+ public function dump(string $file = null){
+ $file ??= $this->options->cachefile;
+ $this->imagick = new Imagick;
+
+ $this->imagick->newImage(
+ $this->length,
+ $this->length,
+ new ImagickPixel($this->options->imagickBG ?? 'transparent'),
+ $this->options->imagickFormat
+ );
+
+ $this->drawImage();
+
+ if($this->options->returnResource){
+ return $this->imagick;
+ }
+
+ $imageData = $this->imagick->getImageBlob();
+
+ if($file !== null){
+ $this->saveToFile($imageData, $file);
+ }
+
+ return $imageData;
+ }
+
+ /**
+ * Creates the QR image via ImagickDraw
+ */
+ protected function drawImage():void{
+ $draw = new ImagickDraw;
+
+ foreach($this->matrix->matrix() as $y => $row){
+ foreach($row as $x => $M_TYPE){
+ $draw->setStrokeColor($this->moduleValues[$M_TYPE]);
+ $draw->setFillColor($this->moduleValues[$M_TYPE]);
+ $draw->rectangle(
+ $x * $this->scale,
+ $y * $this->scale,
+ ($x + 1) * $this->scale,
+ ($y + 1) * $this->scale
+ );
+
+ }
+ }
+
+ $this->imagick->drawImage($draw);
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php b/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php
new file mode 100644
index 000000000..06d6e88cb
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRMarkup.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * Class QRMarkup
+ *
+ * @filesource QRMarkup.php
+ * @created 17.12.2016
+ * @package chillerlan\QRCode\Output
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2016 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\QRCode;
+
+use function is_string, sprintf, strip_tags, trim;
+
+/**
+ * Converts the matrix into markup types: HTML, SVG, ...
+ */
+class QRMarkup extends QROutputAbstract{
+
+ protected string $defaultMode = QRCode::OUTPUT_MARKUP_SVG;
+
+ /**
+ * @see \sprintf()
+ */
+ protected string $svgHeader = '<svg xmlns="http://www.w3.org/2000/svg" class="qr-svg %1$s" '.
+ 'style="width: 100%%; height: auto;" viewBox="0 0 %2$d %2$d">';
+
+ /**
+ * @inheritDoc
+ */
+ protected function setModuleValues():void{
+
+ foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){
+ $v = $this->options->moduleValues[$M_TYPE] ?? null;
+
+ if(!is_string($v)){
+ $this->moduleValues[$M_TYPE] = $defaultValue
+ ? $this->options->markupDark
+ : $this->options->markupLight;
+ }
+ else{
+ $this->moduleValues[$M_TYPE] = trim(strip_tags($v), '\'"');
+ }
+
+ }
+
+ }
+
+ /**
+ * HTML output
+ */
+ protected function html(string $file = null):string{
+
+ $html = empty($this->options->cssClass)
+ ? '<div>'
+ : '<div class="'.$this->options->cssClass.'">';
+
+ $html .= $this->options->eol;
+
+ foreach($this->matrix->matrix() as $row){
+ $html .= '<div>';
+
+ foreach($row as $M_TYPE){
+ $html .= '<span style="background: '.$this->moduleValues[$M_TYPE].';"></span>';
+ }
+
+ $html .= '</div>'.$this->options->eol;
+ }
+
+ $html .= '</div>'.$this->options->eol;
+
+ if($file !== null){
+ return '<!DOCTYPE html>'.
+ '<head><meta charset="UTF-8"><title>QR Code</title></head>'.
+ '<body>'.$this->options->eol.$html.'</body>';
+ }
+
+ return $html;
+ }
+
+ /**
+ * SVG output
+ *
+ * @see https://github.com/codemasher/php-qrcode/pull/5
+ */
+ protected function svg(string $file = null):string{
+ $matrix = $this->matrix->matrix();
+
+ $svg = sprintf($this->svgHeader, $this->options->cssClass, $this->options->svgViewBoxSize ?? $this->moduleCount)
+ .$this->options->eol
+ .'<defs>'.$this->options->svgDefs.'</defs>'
+ .$this->options->eol;
+
+ foreach($this->moduleValues as $M_TYPE => $value){
+ $path = '';
+
+ foreach($matrix as $y => $row){
+ //we'll combine active blocks within a single row as a lightweight compression technique
+ $start = null;
+ $count = 0;
+
+ foreach($row as $x => $module){
+
+ if($module === $M_TYPE){
+ $count++;
+
+ if($start === null){
+ $start = $x;
+ }
+
+ if(isset($row[$x + 1])){
+ continue;
+ }
+ }
+
+ if($count > 0){
+ $len = $count;
+ $start ??= 0; // avoid type coercion in sprintf() - phan happy
+
+ $path .= sprintf('M%s %s h%s v1 h-%sZ ', $start, $y, $len, $len);
+
+ // reset count
+ $count = 0;
+ $start = null;
+ }
+
+ }
+
+ }
+
+ if(!empty($path)){
+ $svg .= sprintf(
+ '<path class="qr-%s %s" stroke="transparent" fill="%s" fill-opacity="%s" d="%s" />',
+ $M_TYPE, $this->options->cssClass, $value, $this->options->svgOpacity, $path
+ );
+ }
+
+ }
+
+ // close svg
+ $svg .= '</svg>'.$this->options->eol;
+
+ // if saving to file, append the correct headers
+ if($file !== null){
+ return '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">'.
+ $this->options->eol.$svg;
+ }
+
+ if($this->options->imageBase64){
+ $svg = sprintf('data:image/svg+xml;base64,%s', base64_encode($svg));
+ }
+
+ return $svg;
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php b/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php
new file mode 100644
index 000000000..d4ed3d0c9
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Output/QROutputAbstract.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Class QROutputAbstract
+ *
+ * @filesource QROutputAbstract.php
+ * @created 09.12.2015
+ * @package chillerlan\QRCode\Output
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\{Data\QRMatrix, QRCode};
+use chillerlan\Settings\SettingsContainerInterface;
+
+use function call_user_func_array, dirname, file_put_contents, get_called_class, in_array, is_writable, sprintf;
+
+/**
+ * common output abstract
+ */
+abstract class QROutputAbstract implements QROutputInterface{
+
+ /**
+ * the current size of the QR matrix
+ *
+ * @see \chillerlan\QRCode\Data\QRMatrix::size()
+ */
+ protected int $moduleCount;
+
+ /**
+ * the current output mode
+ *
+ * @see \chillerlan\QRCode\QROptions::$outputType
+ */
+ protected string $outputMode;
+
+ /**
+ * the default output mode of the current output module
+ */
+ protected string $defaultMode;
+
+ /**
+ * the current scaling for a QR pixel
+ *
+ * @see \chillerlan\QRCode\QROptions::$scale
+ */
+ protected int $scale;
+
+ /**
+ * the side length of the QR image (modules * scale)
+ */
+ protected int $length;
+
+ /**
+ * an (optional) array of color values for the several QR matrix parts
+ */
+ protected array $moduleValues;
+
+ /**
+ * the (filled) data matrix object
+ */
+ protected QRMatrix $matrix;
+
+ /**
+ * @var \chillerlan\Settings\SettingsContainerInterface|\chillerlan\QRCode\QROptions
+ */
+ protected SettingsContainerInterface $options;
+
+ /**
+ * QROutputAbstract constructor.
+ */
+ public function __construct(SettingsContainerInterface $options, QRMatrix $matrix){
+ $this->options = $options;
+ $this->matrix = $matrix;
+ $this->moduleCount = $this->matrix->size();
+ $this->scale = $this->options->scale;
+ $this->length = $this->moduleCount * $this->scale;
+
+ $class = get_called_class();
+
+ if(isset(QRCode::OUTPUT_MODES[$class]) && in_array($this->options->outputType, QRCode::OUTPUT_MODES[$class])){
+ $this->outputMode = $this->options->outputType;
+ }
+
+ $this->setModuleValues();
+ }
+
+ /**
+ * Sets the initial module values (clean-up & defaults)
+ */
+ abstract protected function setModuleValues():void;
+
+ /**
+ * saves the qr data to a file
+ *
+ * @see file_put_contents()
+ * @see \chillerlan\QRCode\QROptions::cachefile
+ *
+ * @throws \chillerlan\QRCode\Output\QRCodeOutputException
+ */
+ protected function saveToFile(string $data, string $file):bool{
+
+ if(!is_writable(dirname($file))){
+ throw new QRCodeOutputException(sprintf('Could not write data to cache file: %s', $file));
+ }
+
+ return (bool)file_put_contents($file, $data);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function dump(string $file = null){
+ $file ??= $this->options->cachefile;
+
+ // call the built-in output method with the optional file path as parameter
+ // to make the called method aware if a cache file was given
+ $data = call_user_func_array([$this, $this->outputMode ?? $this->defaultMode], [$file]);
+
+ if($file !== null){
+ $this->saveToFile($data, $file);
+ }
+
+ return $data;
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php b/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php
new file mode 100644
index 000000000..b07b8e7a5
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Output/QROutputInterface.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Interface QROutputInterface,
+ *
+ * @filesource QROutputInterface.php
+ * @created 02.12.2015
+ * @package chillerlan\QRCode\Output
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\Data\QRMatrix;
+
+/**
+ * Converts the data matrix into readable output
+ */
+interface QROutputInterface{
+
+ const DEFAULT_MODULE_VALUES = [
+ // light
+ QRMatrix::M_NULL => false, // 0
+ QRMatrix::M_DATA => false, // 4
+ QRMatrix::M_FINDER => false, // 6
+ QRMatrix::M_SEPARATOR => false, // 8
+ QRMatrix::M_ALIGNMENT => false, // 10
+ QRMatrix::M_TIMING => false, // 12
+ QRMatrix::M_FORMAT => false, // 14
+ QRMatrix::M_VERSION => false, // 16
+ QRMatrix::M_QUIETZONE => false, // 18
+ QRMatrix::M_LOGO => false, // 20
+ QRMatrix::M_TEST => false, // 255
+ // dark
+ QRMatrix::M_DARKMODULE << 8 => true, // 512
+ QRMatrix::M_DATA << 8 => true, // 1024
+ QRMatrix::M_FINDER << 8 => true, // 1536
+ QRMatrix::M_ALIGNMENT << 8 => true, // 2560
+ QRMatrix::M_TIMING << 8 => true, // 3072
+ QRMatrix::M_FORMAT << 8 => true, // 3584
+ QRMatrix::M_VERSION << 8 => true, // 4096
+ QRMatrix::M_FINDER_DOT << 8 => true, // 5632
+ QRMatrix::M_TEST << 8 => true, // 65280
+ ];
+
+ /**
+ * generates the output, optionally dumps it to a file, and returns it
+ *
+ * @return mixed
+ */
+ public function dump(string $file = null);
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/Output/QRString.php b/vendor/chillerlan/php-qrcode/src/Output/QRString.php
new file mode 100644
index 000000000..3ed5153e1
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/Output/QRString.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Class QRString
+ *
+ * @filesource QRString.php
+ * @created 05.12.2015
+ * @package chillerlan\QRCode\Output
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ *
+ * @noinspection PhpUnusedParameterInspection
+ * @noinspection PhpComposerExtensionStubsInspection
+ */
+
+namespace chillerlan\QRCode\Output;
+
+use chillerlan\QRCode\QRCode;
+
+use function implode, is_string, json_encode;
+
+/**
+ * Converts the matrix data into string types
+ */
+class QRString extends QROutputAbstract{
+
+ protected string $defaultMode = QRCode::OUTPUT_STRING_TEXT;
+
+ /**
+ * @inheritDoc
+ */
+ protected function setModuleValues():void{
+
+ foreach($this::DEFAULT_MODULE_VALUES as $M_TYPE => $defaultValue){
+ $v = $this->options->moduleValues[$M_TYPE] ?? null;
+
+ if(!is_string($v)){
+ $this->moduleValues[$M_TYPE] = $defaultValue
+ ? $this->options->textDark
+ : $this->options->textLight;
+ }
+ else{
+ $this->moduleValues[$M_TYPE] = $v;
+ }
+
+ }
+
+ }
+
+ /**
+ * string output
+ */
+ protected function text(string $file = null):string{
+ $str = [];
+
+ foreach($this->matrix->matrix() as $row){
+ $r = [];
+
+ foreach($row as $M_TYPE){
+ $r[] = $this->moduleValues[$M_TYPE];
+ }
+
+ $str[] = implode('', $r);
+ }
+
+ return implode($this->options->eol, $str);
+ }
+
+ /**
+ * JSON output
+ */
+ protected function json(string $file = null):string{
+ return json_encode($this->matrix->matrix());
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/QRCode.php b/vendor/chillerlan/php-qrcode/src/QRCode.php
new file mode 100755
index 000000000..908030feb
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/QRCode.php
@@ -0,0 +1,313 @@
+<?php
+/**
+ * Class QRCode
+ *
+ * @filesource QRCode.php
+ * @created 26.11.2015
+ * @package chillerlan\QRCode
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode;
+
+use chillerlan\QRCode\Data\{
+ AlphaNum, Byte, Kanji, MaskPatternTester, Number, QRCodeDataException, QRDataInterface, QRMatrix
+};
+use chillerlan\QRCode\Output\{
+ QRCodeOutputException, QRFpdf, QRImage, QRImagick, QRMarkup, QROutputInterface, QRString
+};
+use chillerlan\Settings\SettingsContainerInterface;
+
+use function call_user_func_array, class_exists, in_array, ord, strlen, strtolower, str_split;
+
+/**
+ * Turns a text string into a Model 2 QR Code
+ *
+ * @see https://github.com/kazuhikoarase/qrcode-generator/tree/master/php
+ * @see http://www.qrcode.com/en/codes/model12.html
+ * @see https://www.swisseduc.ch/informatik/theoretische_informatik/qr_codes/docs/qr_standard.pdf
+ * @see https://en.wikipedia.org/wiki/QR_code
+ * @see http://www.thonky.com/qr-code-tutorial/
+ */
+class QRCode{
+
+ /** @var int */
+ public const VERSION_AUTO = -1;
+ /** @var int */
+ public const MASK_PATTERN_AUTO = -1;
+
+ // ISO/IEC 18004:2000 Table 2
+
+ /** @var int */
+ public const DATA_NUMBER = 0b0001;
+ /** @var int */
+ public const DATA_ALPHANUM = 0b0010;
+ /** @var int */
+ public const DATA_BYTE = 0b0100;
+ /** @var int */
+ public const DATA_KANJI = 0b1000;
+
+ /**
+ * References to the keys of the following tables:
+ *
+ * @see \chillerlan\QRCode\Data\QRDataInterface::MAX_LENGTH
+ *
+ * @var int[]
+ */
+ public const DATA_MODES = [
+ self::DATA_NUMBER => 0,
+ self::DATA_ALPHANUM => 1,
+ self::DATA_BYTE => 2,
+ self::DATA_KANJI => 3,
+ ];
+
+ // ISO/IEC 18004:2000 Tables 12, 25
+
+ /** @var int */
+ public const ECC_L = 0b01; // 7%.
+ /** @var int */
+ public const ECC_M = 0b00; // 15%.
+ /** @var int */
+ public const ECC_Q = 0b11; // 25%.
+ /** @var int */
+ public const ECC_H = 0b10; // 30%.
+
+ /**
+ * References to the keys of the following tables:
+ *
+ * @see \chillerlan\QRCode\Data\QRDataInterface::MAX_BITS
+ * @see \chillerlan\QRCode\Data\QRDataInterface::RSBLOCKS
+ * @see \chillerlan\QRCode\Data\QRMatrix::formatPattern
+ *
+ * @var int[]
+ */
+ public const ECC_MODES = [
+ self::ECC_L => 0,
+ self::ECC_M => 1,
+ self::ECC_Q => 2,
+ self::ECC_H => 3,
+ ];
+
+ /** @var string */
+ public const OUTPUT_MARKUP_HTML = 'html';
+ /** @var string */
+ public const OUTPUT_MARKUP_SVG = 'svg';
+ /** @var string */
+ public const OUTPUT_IMAGE_PNG = 'png';
+ /** @var string */
+ public const OUTPUT_IMAGE_JPG = 'jpg';
+ /** @var string */
+ public const OUTPUT_IMAGE_GIF = 'gif';
+ /** @var string */
+ public const OUTPUT_STRING_JSON = 'json';
+ /** @var string */
+ public const OUTPUT_STRING_TEXT = 'text';
+ /** @var string */
+ public const OUTPUT_IMAGICK = 'imagick';
+ /** @var string */
+ public const OUTPUT_FPDF = 'fpdf';
+ /** @var string */
+ public const OUTPUT_CUSTOM = 'custom';
+
+ /**
+ * Map of built-in output modules => capabilities
+ *
+ * @var string[][]
+ */
+ public const OUTPUT_MODES = [
+ QRMarkup::class => [
+ self::OUTPUT_MARKUP_SVG,
+ self::OUTPUT_MARKUP_HTML,
+ ],
+ QRImage::class => [
+ self::OUTPUT_IMAGE_PNG,
+ self::OUTPUT_IMAGE_GIF,
+ self::OUTPUT_IMAGE_JPG,
+ ],
+ QRString::class => [
+ self::OUTPUT_STRING_JSON,
+ self::OUTPUT_STRING_TEXT,
+ ],
+ QRImagick::class => [
+ self::OUTPUT_IMAGICK,
+ ],
+ QRFpdf::class => [
+ self::OUTPUT_FPDF
+ ]
+ ];
+
+ /**
+ * Map of data mode => interface
+ *
+ * @var string[]
+ */
+ protected const DATA_INTERFACES = [
+ 'number' => Number::class,
+ 'alphanum' => AlphaNum::class,
+ 'kanji' => Kanji::class,
+ 'byte' => Byte::class,
+ ];
+
+ /**
+ * The settings container
+ *
+ * @var \chillerlan\QRCode\QROptions|\chillerlan\Settings\SettingsContainerInterface
+ */
+ protected SettingsContainerInterface $options;
+
+ /**
+ * The selected data interface (Number, AlphaNum, Kanji, Byte)
+ */
+ protected QRDataInterface $dataInterface;
+
+ /**
+ * QRCode constructor.
+ *
+ * Sets the options instance, determines the current mb-encoding and sets it to UTF-8
+ */
+ public function __construct(SettingsContainerInterface $options = null){
+ $this->options = $options ?? new QROptions;
+ }
+
+ /**
+ * Renders a QR Code for the given $data and QROptions
+ *
+ * @return mixed
+ */
+ public function render(string $data, string $file = null){
+ return $this->initOutputInterface($data)->dump($file);
+ }
+
+ /**
+ * Returns a QRMatrix object for the given $data and current QROptions
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public function getMatrix(string $data):QRMatrix{
+
+ if(empty($data)){
+ throw new QRCodeDataException('QRCode::getMatrix() No data given.');
+ }
+
+ $this->dataInterface = $this->initDataInterface($data);
+
+ $maskPattern = $this->options->maskPattern === $this::MASK_PATTERN_AUTO
+ ? (new MaskPatternTester($this->dataInterface))->getBestMaskPattern()
+ : $this->options->maskPattern;
+
+ $matrix = $this->dataInterface->initMatrix($maskPattern);
+
+ if((bool)$this->options->addQuietzone){
+ $matrix->setQuietZone($this->options->quietzoneSize);
+ }
+
+ return $matrix;
+ }
+
+ /**
+ * returns a fresh QRDataInterface for the given $data
+ *
+ * @throws \chillerlan\QRCode\Data\QRCodeDataException
+ */
+ public function initDataInterface(string $data):QRDataInterface{
+
+ // allow forcing the data mode
+ // see https://github.com/chillerlan/php-qrcode/issues/39
+ $interface = $this::DATA_INTERFACES[strtolower($this->options->dataModeOverride)] ?? null;
+
+ if($interface !== null){
+ return new $interface($this->options, $data);
+ }
+
+ foreach($this::DATA_INTERFACES as $mode => $dataInterface){
+
+ if(call_user_func_array([$this, 'is'.$mode], [$data])){
+ return new $dataInterface($this->options, $data);
+ }
+
+ }
+
+ throw new QRCodeDataException('invalid data type'); // @codeCoverageIgnore
+ }
+
+ /**
+ * returns a fresh (built-in) QROutputInterface
+ *
+ * @throws \chillerlan\QRCode\Output\QRCodeOutputException
+ */
+ protected function initOutputInterface(string $data):QROutputInterface{
+
+ if($this->options->outputType === $this::OUTPUT_CUSTOM && class_exists($this->options->outputInterface)){
+ /** @phan-suppress-next-line PhanTypeExpectedObjectOrClassName */
+ return new $this->options->outputInterface($this->options, $this->getMatrix($data));
+ }
+
+ foreach($this::OUTPUT_MODES as $outputInterface => $modes){
+
+ if(in_array($this->options->outputType, $modes, true) && class_exists($outputInterface)){
+ return new $outputInterface($this->options, $this->getMatrix($data));
+ }
+
+ }
+
+ throw new QRCodeOutputException('invalid output type');
+ }
+
+ /**
+ * checks if a string qualifies as numeric
+ */
+ public function isNumber(string $string):bool{
+ return $this->checkString($string, QRDataInterface::CHAR_MAP_NUMBER);
+ }
+
+ /**
+ * checks if a string qualifies as alphanumeric
+ */
+ public function isAlphaNum(string $string):bool{
+ return $this->checkString($string, QRDataInterface::CHAR_MAP_ALPHANUM);
+ }
+
+ /**
+ * checks is a given $string matches the characters of a given $charmap, returns false on the first invalid occurence.
+ */
+ protected function checkString(string $string, array $charmap):bool{
+
+ foreach(str_split($string) as $chr){
+ if(!isset($charmap[$chr])){
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * checks if a string qualifies as Kanji
+ */
+ public function isKanji(string $string):bool{
+ $i = 0;
+ $len = strlen($string);
+
+ while($i + 1 < $len){
+ $c = ((0xff & ord($string[$i])) << 8) | (0xff & ord($string[$i + 1]));
+
+ if(!($c >= 0x8140 && $c <= 0x9FFC) && !($c >= 0xE040 && $c <= 0xEBBF)){
+ return false;
+ }
+
+ $i += 2;
+ }
+
+ return $i >= $len;
+ }
+
+ /**
+ * a dummy
+ */
+ public function isByte(string $data):bool{
+ return $data !== '';
+ }
+
+}
diff --git a/vendor/chillerlan/php-qrcode/src/QRCodeException.php b/vendor/chillerlan/php-qrcode/src/QRCodeException.php
new file mode 100644
index 000000000..737a0803e
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/QRCodeException.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Class QRCodeException
+ *
+ * @filesource QRCodeException.php
+ * @created 27.11.2015
+ * @package chillerlan\QRCode
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode;
+
+use Exception;
+
+/**
+ * An exception container
+ */
+class QRCodeException extends Exception{}
diff --git a/vendor/chillerlan/php-qrcode/src/QROptions.php b/vendor/chillerlan/php-qrcode/src/QROptions.php
new file mode 100644
index 000000000..e36f6701a
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/QROptions.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Class QROptions
+ *
+ * @filesource QROptions.php
+ * @created 08.12.2015
+ * @package chillerlan\QRCode
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2015 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\QRCode;
+
+use chillerlan\Settings\SettingsContainerAbstract;
+
+/**
+ * The QRCode settings container
+ *
+ * @property int $version
+ * @property int $versionMin
+ * @property int $versionMax
+ * @property int $eccLevel
+ * @property int $maskPattern
+ * @property bool $addQuietzone
+ * @property int $quietzoneSize
+ * @property string|null $dataModeOverride
+ * @property string $outputType
+ * @property string|null $outputInterface
+ * @property string|null $cachefile
+ * @property string $eol
+ * @property int $scale
+ * @property string $cssClass
+ * @property float $svgOpacity
+ * @property string $svgDefs
+ * @property int $svgViewBoxSize
+ * @property string $textDark
+ * @property string $textLight
+ * @property string $markupDark
+ * @property string $markupLight
+ * @property bool $returnResource
+ * @property bool $imageBase64
+ * @property bool $imageTransparent
+ * @property array $imageTransparencyBG
+ * @property int $pngCompression
+ * @property int $jpegQuality
+ * @property string $imagickFormat
+ * @property string|null $imagickBG
+ * @property string $fpdfMeasureUnit
+ * @property array|null $moduleValues
+ */
+class QROptions extends SettingsContainerAbstract{
+ use QROptionsTrait;
+}
diff --git a/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php b/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php
new file mode 100644
index 000000000..74c384b13
--- /dev/null
+++ b/vendor/chillerlan/php-qrcode/src/QROptionsTrait.php
@@ -0,0 +1,341 @@
+<?php
+/**
+ * Trait QROptionsTrait
+ *
+ * @filesource QROptionsTrait.php
+ * @created 10.03.2018
+ * @package chillerlan\QRCode
+ * @author smiley <smiley@chillerlan.net>
+ * @copyright 2018 smiley
+ * @license MIT
+ *
+ * @noinspection PhpUnused
+ */
+
+namespace chillerlan\QRCode;
+
+use function array_values, count, in_array, is_numeric, max, min, sprintf, strtolower;
+
+/**
+ * The QRCode plug-in settings & setter functionality
+ */
+trait QROptionsTrait{
+
+ /**
+ * QR Code version number
+ *
+ * [1 ... 40] or QRCode::VERSION_AUTO
+ */
+ protected int $version = QRCode::VERSION_AUTO;
+
+ /**
+ * Minimum QR version
+ *
+ * if $version = QRCode::VERSION_AUTO
+ */
+ protected int $versionMin = 1;
+
+ /**
+ * Maximum QR version
+ */
+ protected int $versionMax = 40;
+
+ /**
+ * Error correct level
+ *
+ * QRCode::ECC_X where X is:
+ *
+ * - L => 7%
+ * - M => 15%
+ * - Q => 25%
+ * - H => 30%
+ */
+ protected int $eccLevel = QRCode::ECC_L;
+
+ /**
+ * Mask Pattern to use
+ *
+ * [0...7] or QRCode::MASK_PATTERN_AUTO
+ */
+ protected int $maskPattern = QRCode::MASK_PATTERN_AUTO;
+
+ /**
+ * Add a "quiet zone" (margin) according to the QR code spec
+ */
+ protected bool $addQuietzone = true;
+
+ /**
+ * Size of the quiet zone
+ *
+ * internally clamped to [0 ... $moduleCount / 2], defaults to 4 modules
+ */
+ protected int $quietzoneSize = 4;
+
+ /**
+ * Use this to circumvent the data mode detection and force the usage of the given mode.
+ *
+ * valid modes are: Number, AlphaNum, Kanji, Byte (case insensitive)
+ *
+ * @see https://github.com/chillerlan/php-qrcode/issues/39
+ * @see https://github.com/chillerlan/php-qrcode/issues/97 (changed default value to '')
+ */
+ protected string $dataModeOverride = '';
+
+ /**
+ * The output type
+ *
+ * - QRCode::OUTPUT_MARKUP_XXXX where XXXX = HTML, SVG
+ * - QRCode::OUTPUT_IMAGE_XXX where XXX = PNG, GIF, JPG
+ * - QRCode::OUTPUT_STRING_XXXX where XXXX = TEXT, JSON
+ * - QRCode::OUTPUT_CUSTOM
+ */
+ protected string $outputType = QRCode::OUTPUT_IMAGE_PNG;
+
+ /**
+ * the FQCN of the custom QROutputInterface if $outputType is set to QRCode::OUTPUT_CUSTOM
+ */
+ protected ?string $outputInterface = null;
+
+ /**
+ * /path/to/cache.file
+ */
+ protected ?string $cachefile = null;
+
+ /**
+ * newline string [HTML, SVG, TEXT]
+ */
+ protected string $eol = PHP_EOL;
+
+ /**
+ * size of a QR code pixel [SVG, IMAGE_*], HTML via CSS
+ */
+ protected int $scale = 5;
+
+ /**
+ * a common css class
+ */
+ protected string $cssClass = '';
+
+ /**
+ * SVG opacity
+ */
+ protected float $svgOpacity = 1.0;
+
+ /**
+ * anything between <defs>
+ *
+ * @see https://developer.mozilla.org/docs/Web/SVG/Element/defs
+ */
+ protected string $svgDefs = '<style>rect{shape-rendering:crispEdges}</style>';
+
+ /**
+ * SVG viewBox size. a single integer number which defines width/height of the viewBox attribute.
+ *
+ * viewBox="0 0 x x"
+ *
+ * @see https://css-tricks.com/scale-svg/#article-header-id-3
+ */
+ protected ?int $svgViewBoxSize = null;
+
+ /**
+ * string substitute for dark
+ */
+ protected string $textDark = '🔴';
+
+ /**
+ * string substitute for light
+ */
+ protected string $textLight = '⭕';
+
+ /**
+ * markup substitute for dark (CSS value)
+ */
+ protected string $markupDark = '#000';
+
+ /**
+ * markup substitute for light (CSS value)
+ */
+ protected string $markupLight = '#fff';
+
+ /**
+ * Return the image resource instead of a render if applicable.
+ * This option overrides other output options, such as $cachefile and $imageBase64.
+ *
+ * Supported by the following modules:
+ *
+ * - QRImage: resource (PHP < 8), GdImage
+ * - QRImagick: Imagick
+ * - QRFpdf: FPDF
+ *
+ * @see \chillerlan\QRCode\Output\QROutputInterface::dump()
+ *
+ * @var bool
+ */
+ protected bool $returnResource = false;
+
+ /**
+ * toggle base64 or raw image data
+ */
+ protected bool $imageBase64 = true;
+
+ /**
+ * toggle transparency, not supported by jpg
+ */
+ protected bool $imageTransparent = true;
+
+ /**
+ * @see imagecolortransparent()
+ *
+ * [R, G, B]
+ */
+ protected array $imageTransparencyBG = [255, 255, 255];
+
+ /**
+ * @see imagepng()
+ */
+ protected int $pngCompression = -1;
+
+ /**
+ * @see imagejpeg()
+ */
+ protected int $jpegQuality = 85;
+
+ /**
+ * Imagick output format
+ *
+ * @see \Imagick::setType()
+ */
+ protected string $imagickFormat = 'png';
+
+ /**
+ * Imagick background color (defaults to "transparent")
+ *
+ * @see \ImagickPixel::__construct()
+ */
+ protected ?string $imagickBG = null;
+
+ /**
+ * Measurement unit for FPDF output: pt, mm, cm, in (defaults to "pt")
+ *
+ * @see \FPDF::__construct()
+ */
+ protected string $fpdfMeasureUnit = 'pt';
+
+ /**
+ * Module values map
+ *
+ * - HTML, IMAGICK: #ABCDEF, cssname, rgb(), rgba()...
+ * - IMAGE: [63, 127, 255] // R, G, B
+ */
+ protected ?array $moduleValues = null;
+
+ /**
+ * clamp min/max version number
+ */
+ protected function setMinMaxVersion(int $versionMin, int $versionMax):void{
+ $min = max(1, min(40, $versionMin));
+ $max = max(1, min(40, $versionMax));
+
+ $this->versionMin = min($min, $max);
+ $this->versionMax = max($min, $max);
+ }
+
+ /**
+ * sets the minimum version number
+ */
+ protected function set_versionMin(int $version):void{
+ $this->setMinMaxVersion($version, $this->versionMax);
+ }
+
+ /**
+ * sets the maximum version number
+ */
+ protected function set_versionMax(int $version):void{
+ $this->setMinMaxVersion($this->versionMin, $version);
+ }
+
+ /**
+ * sets the error correction level
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ protected function set_eccLevel(int $eccLevel):void{
+
+ if(!isset(QRCode::ECC_MODES[$eccLevel])){
+ throw new QRCodeException(sprintf('Invalid error correct level: %s', $eccLevel));
+ }
+
+ $this->eccLevel = $eccLevel;
+ }
+
+ /**
+ * sets/clamps the mask pattern
+ */
+ protected function set_maskPattern(int $maskPattern):void{
+
+ if($maskPattern !== QRCode::MASK_PATTERN_AUTO){
+ $this->maskPattern = max(0, min(7, $maskPattern));
+ }
+
+ }
+
+ /**
+ * sets the transparency background color
+ *
+ * @throws \chillerlan\QRCode\QRCodeException
+ */
+ protected function set_imageTransparencyBG(array $imageTransparencyBG):void{
+
+ // invalid value - set to white as default
+ if(count($imageTransparencyBG) < 3){
+ $this->imageTransparencyBG = [255, 255, 255];
+
+ return;
+ }
+
+ foreach($imageTransparencyBG as $k => $v){
+
+ // cut off exceeding items
+ if($k > 2){
+ break;
+ }
+
+ if(!is_numeric($v)){
+ throw new QRCodeException('Invalid RGB value.');
+ }
+
+ // clamp the values
+ $this->imageTransparencyBG[$k] = max(0, min(255, (int)$v));
+ }
+
+ // use the array values to not run into errors with the spread operator (...$arr)
+ $this->imageTransparencyBG = array_values($this->imageTransparencyBG);
+ }
+
+ /**
+ * sets/clamps the version number
+ */
+ protected function set_version(int $version):void{
+
+ if($version !== QRCode::VERSION_AUTO){
+ $this->version = max(1, min(40, $version));
+ }
+
+ }
+
+ /**
+ * sets the FPDF measurement unit
+ *
+ * @codeCoverageIgnore
+ */
+ protected function set_fpdfMeasureUnit(string $unit):void{
+ $unit = strtolower($unit);
+
+ if(in_array($unit, ['cm', 'in', 'mm', 'pt'], true)){
+ $this->fpdfMeasureUnit = $unit;
+ }
+
+ // @todo throw or ignore silently?
+ }
+
+}
diff --git a/vendor/chillerlan/php-settings-container/.github/FUNDING.yml b/vendor/chillerlan/php-settings-container/.github/FUNDING.yml
new file mode 100644
index 000000000..16a077f52
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+ko_fi: codemasher
+custom: "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4"
diff --git a/vendor/chillerlan/php-settings-container/.github/workflows/tests.yml b/vendor/chillerlan/php-settings-container/.github/workflows/tests.yml
new file mode 100644
index 000000000..8f108f0dd
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/.github/workflows/tests.yml
@@ -0,0 +1,105 @@
+# https://help.github.com/en/categories/automating-your-workflow-with-github-actions
+# https://github.com/sebastianbergmann/phpunit/blob/master/.github/workflows/ci.yml
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+
+name: "CI"
+
+jobs:
+
+ static-code-analysis:
+ name: "Static Code Analysis"
+
+ runs-on: ubuntu-latest
+
+ env:
+ PHAN_ALLOW_XDEBUG: 0
+ PHAN_DISABLE_XDEBUG_WARN: 1
+
+ steps:
+ - name: "Checkout"
+ uses: actions/checkout@v3
+
+ - name: "Install PHP"
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: "7.4"
+ tools: pecl
+ coverage: none
+ extensions: ast, json
+
+ - name: "Update dependencies with composer"
+ run: composer update --no-interaction --no-ansi --no-progress --no-suggest
+
+ - name: "Run phan"
+ run: php vendor/bin/phan
+
+ build-docs:
+ name: "Build and publish Docs"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: "Checkout sources"
+ uses: actions/checkout@v3
+
+ - name: "Install PHP"
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: "8.1"
+ coverage: none
+ tools: phpDocumentor
+ extensions: json
+
+ - name: "Build Docs"
+ run: phpdoc --config=phpdoc.xml
+
+ - name: "Publish Docs to gh-pages"
+ uses: JamesIves/github-pages-deploy-action@v4.3.4
+ with:
+ branch: gh-pages
+ folder: docs
+ clean: true
+
+ tests:
+ name: "Unit Tests"
+
+ runs-on: ${{ matrix.os }}
+
+ strategy:
+ fail-fast: false
+ matrix:
+ os:
+ - ubuntu-latest
+ - windows-latest
+ php-version:
+ - "7.4"
+ - "8.0"
+ - "8.1"
+
+ steps:
+ - name: "Checkout"
+ uses: actions/checkout@v3
+
+ - name: "Install PHP with extensions"
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php-version }}
+ coverage: pcov
+ extensions: json
+
+ - name: "Install dependencies with composer"
+ run: composer update --no-ansi --no-interaction --no-progress --no-suggest
+
+ - name: "Run tests with phpunit"
+ run: php vendor/phpunit/phpunit/phpunit --configuration=phpunit.xml
+
+ - name: "Send code coverage report to Codecov.io"
+ uses: codecov/codecov-action@v3
diff --git a/vendor/chillerlan/php-settings-container/.gitignore b/vendor/chillerlan/php-settings-container/.gitignore
new file mode 100644
index 000000000..142dd453a
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/.gitignore
@@ -0,0 +1,4 @@
+/.build
+/.idea
+/vendor
+composer.lock
diff --git a/vendor/chillerlan/php-settings-container/.phan/config.php b/vendor/chillerlan/php-settings-container/.phan/config.php
new file mode 100644
index 000000000..468bd9983
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/.phan/config.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * This configuration will be read and overlaid on top of the
+ * default configuration. Command-line arguments will be applied
+ * after this file is read.
+ */
+return [
+ // Supported values: `'5.6'`, `'7.0'`, `'7.1'`, `'7.2'`, `'7.3'`,
+ // `'7.4'`, `null`.
+ // If this is set to `null`,
+ // then Phan assumes the PHP version which is closest to the minor version
+ // of the php executable used to execute Phan.
+ //
+ // Note that the **only** effect of choosing `'5.6'` is to infer
+ // that functions removed in php 7.0 exist.
+ // (See `backward_compatibility_checks` for additional options)
+ 'target_php_version' => '7.4',
+
+ // A list of directories that should be parsed for class and
+ // method information. After excluding the directories
+ // defined in exclude_analysis_directory_list, the remaining
+ // files will be statically analyzed for errors.
+ //
+ // Thus, both first-party and third-party code being used by
+ // your application should be included in this list.
+ 'directory_list' => [
+ 'examples',
+ 'src',
+ 'tests',
+ 'vendor',
+ ],
+
+ // A regex used to match every file name that you want to
+ // exclude from parsing. Actual value will exclude every
+ // "test", "tests", "Test" and "Tests" folders found in
+ // "vendor/" directory.
+ 'exclude_file_regex' => '@^vendor/.*/(tests?|Tests?)/@',
+
+ // A directory list that defines files that will be excluded
+ // from static analysis, but whose class and method
+ // information should be included.
+ //
+ // Generally, you'll want to include the directories for
+ // third-party code (such as "vendor/") in this list.
+ //
+ // n.b.: If you'd like to parse but not analyze 3rd
+ // party code, directories containing that code
+ // should be added to both the `directory_list`
+ // and `exclude_analysis_directory_list` arrays.
+ 'exclude_analysis_directory_list' => [
+ 'tests',
+ 'vendor',
+ ],
+];
diff --git a/vendor/chillerlan/php-settings-container/.scrutinizer.yml b/vendor/chillerlan/php-settings-container/.scrutinizer.yml
new file mode 100644
index 000000000..daeb475f4
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/.scrutinizer.yml
@@ -0,0 +1,14 @@
+build:
+ nodes:
+ analysis:
+ tests:
+ override:
+ - php-scrutinizer-run
+ environment:
+ php: 8.0.0
+
+filter:
+ excluded_paths:
+ - examples/*
+ - tests/*
+ - vendor/*
diff --git a/vendor/chillerlan/php-settings-container/LICENSE b/vendor/chillerlan/php-settings-container/LICENSE
new file mode 100644
index 000000000..25d371fc3
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 Smiley <smiley@chillerlan.net>
+
+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/vendor/chillerlan/php-settings-container/README.md b/vendor/chillerlan/php-settings-container/README.md
new file mode 100644
index 000000000..579696b6e
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/README.md
@@ -0,0 +1,156 @@
+# chillerlan/php-settings-container
+
+A container class for immutable settings objects. Not a DI container. PHP 7.4+
+- [`SettingsContainerInterface`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerInterface.php) provides immutable properties with magic getter & setter and some fancy - decouple configuration logic from your application!
+
+[![PHP Version Support][php-badge]][php]
+[![version][packagist-badge]][packagist]
+[![license][license-badge]][license]
+[![Coverage][coverage-badge]][coverage]
+[![Scrunitizer][scrutinizer-badge]][scrutinizer]
+[![Packagist downloads][downloads-badge]][downloads]
+[![Continuous Integration][gh-action-badge]][gh-action]
+
+[php-badge]: https://img.shields.io/packagist/php-v/chillerlan/php-settings-container?logo=php&color=8892BF
+[php]: https://www.php.net/supported-versions.php
+[packagist-badge]: https://img.shields.io/packagist/v/chillerlan/php-settings-container.svg?logo=packagist
+[packagist]: https://packagist.org/packages/chillerlan/php-settings-container
+[license-badge]: https://img.shields.io/github/license/chillerlan/php-settings-container.svg
+[license]: https://github.com/chillerlan/php-settings-container/blob/main/LICENSE
+[coverage-badge]: https://img.shields.io/codecov/c/github/chillerlan/php-settings-container.svg?logo=codecov
+[coverage]: https://codecov.io/github/chillerlan/php-settings-container
+[scrutinizer-badge]: https://img.shields.io/scrutinizer/g/chillerlan/php-settings-container.svg?logo=scrutinizer
+[scrutinizer]: https://scrutinizer-ci.com/g/chillerlan/php-settings-container
+[downloads-badge]: https://img.shields.io/packagist/dt/chillerlan/php-settings-container.svg?logo=packagist
+[downloads]: https://packagist.org/packages/chillerlan/php-settings-container/stats
+[gh-action-badge]: https://github.com/chillerlan/php-settings-container/workflows/CI/badge.svg
+[gh-action]: https://github.com/chillerlan/php-settings-container/actions?query=workflow%3A%22CI%22
+
+## Documentation
+
+### Installation
+**requires [composer](https://getcomposer.org)**
+
+*composer.json* (note: replace `dev-main` with a [version constraint](https://getcomposer.org/doc/articles/versions.md#writing-version-constraints), e.g. `^2.1` - see [releases](https://github.com/chillerlan/php-settings-container/releases) for valid versions)
+```json
+{
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "chillerlan/php-settings-container": "dev-main"
+ }
+}
+```
+
+Profit!
+
+## Usage
+
+The `SettingsContainerInterface` (wrapped in`SettingsContainerAbstract` ) provides plug-in functionality for immutable object properties and adds some fancy, like loading/saving JSON, arrays etc.
+It takes an `iterable` as the only constructor argument and calls a method with the trait's name on invocation (`MyTrait::MyTrait()`) for each used trait.
+
+### Simple usage
+```php
+class MyContainer extends SettingsContainerAbstract{
+ protected $foo;
+ protected $bar;
+}
+```
+Typed properties in PHP 7.4+:
+```php
+class MyContainer extends SettingsContainerAbstract{
+ protected string $foo;
+ protected string $bar;
+}
+```
+
+```php
+// use it just like a \stdClass
+$container = new MyContainer;
+$container->foo = 'what';
+$container->bar = 'foo';
+
+// which is equivalent to
+$container = new MyContainer(['bar' => 'foo', 'foo' => 'what']);
+// ...or try
+$container->fromJSON('{"foo": "what", "bar": "foo"}');
+
+
+// fetch all properties as array
+$container->toArray(); // -> ['foo' => 'what', 'bar' => 'foo']
+// or JSON
+$container->toJSON(); // -> {"foo": "what", "bar": "foo"}
+// JSON via JsonSerializable
+$json = json_encode($container); // -> {"foo": "what", "bar": "foo"}
+
+//non-existing properties will be ignored:
+$container->nope = 'what';
+
+var_dump($container->nope); // -> null
+```
+
+### Advanced usage
+```php
+trait SomeOptions{
+ protected $foo;
+ protected $what;
+
+ // this method will be called in SettingsContainerAbstract::construct()
+ // after the properties have been set
+ protected function SomeOptions(){
+ // just some constructor stuff...
+ $this->foo = strtoupper($this->foo);
+ }
+
+ // this method will be called from __set() when property $what is set
+ protected function set_what(string $value){
+ $this->what = md5($value);
+ }
+}
+
+trait MoreOptions{
+ protected $bar = 'whatever'; // provide default values
+}
+```
+
+```php
+$commonOptions = [
+ // SomeOptions
+ 'foo' => 'whatever',
+ // MoreOptions
+ 'bar' => 'nothing',
+];
+
+// now plug the several library options together to a single object
+$container = new class ($commonOptions) extends SettingsContainerAbstract{
+ use SomeOptions, MoreOptions;
+};
+
+var_dump($container->foo); // -> WHATEVER (constructor ran strtoupper on the value)
+var_dump($container->bar); // -> nothing
+
+$container->what = 'some value';
+var_dump($container->what); // -> md5 hash of "some value"
+```
+
+### API
+
+#### [`SettingsContainerAbstract`](https://github.com/chillerlan/php-settings-container/blob/main/src/SettingsContainerAbstract.php)
+
+method | return | info
+-------- | ---- | -----------
+`__construct(iterable $properties = null)` | - | calls `construct()` internally after the properties have been set
+(protected) `construct()` | void | calls a method with trait name as replacement constructor for each used trait
+`__get(string $property)` | mixed | calls `$this->{'get_'.$property}()` if such a method exists
+`__set(string $property, $value)` | void | calls `$this->{'set_'.$property}($value)` if such a method exists
+`__isset(string $property)` | bool |
+`__unset(string $property)` | void |
+`__toString()` | string | a JSON string
+`toArray()` | array |
+`fromIterable(iterable $properties)` | `SettingsContainerInterface` |
+`toJSON(int $jsonOptions = null)` | string | accepts [JSON options constants](http://php.net/manual/json.constants.php)
+`fromJSON(string $json)` | `SettingsContainerInterface` |
+`jsonSerialize()` | mixed | implements the [`JsonSerializable`](https://www.php.net/manual/en/jsonserializable.jsonserialize.php) interface
+
+## Disclaimer
+This might be either an utterly genius or completely stupid idea - you decide. However, i like it and it works.
+Also, this is not a dependency injection container. Stop using DI containers FFS.
diff --git a/vendor/chillerlan/php-settings-container/composer.json b/vendor/chillerlan/php-settings-container/composer.json
new file mode 100644
index 000000000..1d89b6c41
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/composer.json
@@ -0,0 +1,50 @@
+{
+ "name": "chillerlan/php-settings-container",
+ "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-settings-container",
+ "license": "MIT",
+ "type": "library",
+ "minimum-stability": "stable",
+ "keywords": [
+ "php7", "helper", "container", "settings", "configuration"
+ ],
+ "authors": [
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ }
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-settings-container/issues",
+ "source": "https://github.com/chillerlan/php-settings-container"
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "ext-json": "*"
+ },
+ "require-dev": {
+ "phan/phan": "^5.3",
+ "phpunit/phpunit": "^9.5"
+ },
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\Settings\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "chillerlan\\SettingsTest\\": "tests/",
+ "chillerlan\\SettingsExamples\\": "examples/"
+ }
+ },
+ "scripts": {
+ "phpunit": "@php vendor/bin/phpunit",
+ "phan": "@php vendor/bin/phan"
+ },
+ "config": {
+ "lock": false,
+ "sort-packages": true,
+ "platform-check": true
+ }
+}
diff --git a/vendor/chillerlan/php-settings-container/docs/Readme.md b/vendor/chillerlan/php-settings-container/docs/Readme.md
new file mode 100644
index 000000000..7749a1e7f
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/docs/Readme.md
@@ -0,0 +1,13 @@
+# Auto generated API documentation
+
+The API documentation can be auto generated with [phpDocumentor](https://www.phpdoc.org/).
+There is an [online version available](https://chillerlan.github.io/php-settings-container/) via the [gh-pages branch](https://github.com/chillerlan/php-settings-container/tree/gh-pages) that is [automatically deployed](https://github.com/chillerlan/php-settings-container/deployments) on each push to main.
+
+Locally created docs will appear in this directory. If you'd like to create local docs, please follow these steps:
+
+- [download phpDocumentor](https://github.com/phpDocumentor/phpDocumentor/releases) v3+ as .phar archive
+- run it in the repository root directory:
+ - on Windows `c:\path\to\php.exe c:\path\to\phpDocumentor.phar --config=phpdoc.xml`
+ - on Linux just `php /path/to/phpDocumentor.phar --config=phpdoc.xml`
+- open [index.html](./index.html) in a browser
+- profit!
diff --git a/vendor/chillerlan/php-settings-container/examples/advanced.php b/vendor/chillerlan/php-settings-container/examples/advanced.php
new file mode 100644
index 000000000..f11642c83
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/examples/advanced.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * @created 28.08.2018
+ * @author smiley <smiley@chillerlan.net>
+ * @copyright 2018 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\SettingsExamples;
+
+use chillerlan\Settings\SettingsContainerAbstract;
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+// from library #1
+trait SomeOptions{
+ protected string $foo = '';
+
+ // this method will be called in SettingsContainerAbstract::__construct() after the properties have been set
+ protected function SomeOptions(){
+ // just some constructor stuff...
+ $this->foo = strtoupper($this->foo);
+ }
+}
+
+// from library #2
+trait MoreOptions{
+ protected string $bar = 'whatever'; // provide default values
+}
+
+$commonOptions = [
+ // SomeOptions
+ 'foo' => 'whatever',
+ // MoreOptions
+ 'bar' => 'nothing',
+];
+
+// now plug the several library options together to a single object
+
+/**
+ * @property string $foo
+ * @property string $bar
+ */
+class MySettings extends SettingsContainerAbstract{
+ use SomeOptions, MoreOptions; // ...
+};
+
+$container = new MySettings($commonOptions);
+
+var_dump($container->foo); // -> WHATEVER (constructor ran strtoupper on the value)
+var_dump($container->bar); // -> nothing
diff --git a/vendor/chillerlan/php-settings-container/examples/simple.php b/vendor/chillerlan/php-settings-container/examples/simple.php
new file mode 100644
index 000000000..acdbe4cb3
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/examples/simple.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * @created 28.08.2018
+ * @author smiley <smiley@chillerlan.net>
+ * @copyright 2018 smiley
+ * @license MIT
+ */
+
+namespace chillerlan\SettingsExamples;
+
+use chillerlan\Settings\SettingsContainerAbstract;
+
+require_once __DIR__.'/../vendor/autoload.php';
+
+class MyContainer extends SettingsContainerAbstract{
+ protected $foo;
+ protected $bar;
+}
+
+/** @var \chillerlan\Settings\SettingsContainerInterface $container */
+$container = new MyContainer(['foo' => 'what']);
+$container->bar = 'foo';
+
+var_dump($container->toJSON()); // -> {"foo":"what","bar":"foo"}
+
+// non-existing properties will be ignored:
+$container->nope = 'what';
+
+var_dump($container->nope); // -> NULL
diff --git a/vendor/chillerlan/php-settings-container/phpdoc.xml b/vendor/chillerlan/php-settings-container/phpdoc.xml
new file mode 100644
index 000000000..d440f1d8a
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/phpdoc.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<phpdoc>
+ <parser>
+ <target>docs</target>
+ <encoding>utf8</encoding>
+ <markers>
+ <item>TODO</item>
+ </markers>
+ </parser>
+ <transformer>
+ <target>docs</target>
+ </transformer>
+ <files>
+ <directory>src</directory>
+ <directory>tests</directory>
+ </files>
+ <transformations>
+ <template name="responsive-twig"/>
+ </transformations>
+</phpdoc>
diff --git a/vendor/chillerlan/php-settings-container/phpunit.xml b/vendor/chillerlan/php-settings-container/phpunit.xml
new file mode 100644
index 000000000..9271a1bb1
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/phpunit.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
+ bootstrap="vendor/autoload.php"
+ cacheResultFile=".build/phpunit.result.cache"
+ colors="true"
+ verbose="true"
+>
+ <coverage processUncoveredFiles="true">
+ <include>
+ <directory suffix=".php">./src</directory>
+ </include>
+ <report>
+ <clover outputFile=".build/coverage/clover.xml"/>
+ <xml outputDirectory=".build/coverage/coverage-xml"/>
+ </report>
+ </coverage>
+ <testsuites>
+ <testsuite name="php-settings-container test suite">
+ <directory suffix=".php">./tests/</directory>
+ </testsuite>
+ </testsuites>
+ <logging>
+ <junit outputFile=".build/logs/junit.xml"/>
+ </logging>
+</phpunit>
diff --git a/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php b/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php
new file mode 100644
index 000000000..6b7a1ecc2
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/src/SettingsContainerAbstract.php
@@ -0,0 +1,162 @@
+<?php
+/**
+ * Class SettingsContainerAbstract
+ *
+ * @created 28.08.2018
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2018 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\Settings;
+
+use ReflectionClass, ReflectionProperty;
+
+use function get_object_vars, json_decode, json_encode, method_exists, property_exists;
+use const JSON_THROW_ON_ERROR;
+
+abstract class SettingsContainerAbstract implements SettingsContainerInterface{
+
+ /**
+ * SettingsContainerAbstract constructor.
+ */
+ public function __construct(iterable $properties = null){
+
+ if(!empty($properties)){
+ $this->fromIterable($properties);
+ }
+
+ $this->construct();
+ }
+
+ /**
+ * calls a method with trait name as replacement constructor for each used trait
+ * (remember pre-php5 classname constructors? yeah, basically this.)
+ */
+ protected function construct():void{
+ $traits = (new ReflectionClass($this))->getTraits();
+
+ foreach($traits as $trait){
+ $method = $trait->getShortName();
+
+ if(method_exists($this, $method)){
+ $this->{$method}();
+ }
+ }
+
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function __get(string $property){
+
+ if(!property_exists($this, $property) || $this->isPrivate($property)){
+ return null;
+ }
+
+ $method = 'get_'.$property;
+
+ if(method_exists($this, $method)){
+ return $this->{$method}();
+ }
+
+ return $this->{$property};
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function __set(string $property, $value):void{
+
+ if(!property_exists($this, $property) || $this->isPrivate($property)){
+ return;
+ }
+
+ $method = 'set_'.$property;
+
+ if(method_exists($this, $method)){
+ $this->{$method}($value);
+
+ return;
+ }
+
+ $this->{$property} = $value;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function __isset(string $property):bool{
+ return isset($this->{$property}) && !$this->isPrivate($property);
+ }
+
+ /**
+ * @internal Checks if a property is private
+ */
+ protected function isPrivate(string $property):bool{
+ return (new ReflectionProperty($this, $property))->isPrivate();
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function __unset(string $property):void{
+
+ if($this->__isset($property)){
+ unset($this->{$property});
+ }
+
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function __toString():string{
+ return $this->toJSON();
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function toArray():array{
+ return get_object_vars($this);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function fromIterable(iterable $properties):SettingsContainerInterface{
+
+ foreach($properties as $key => $value){
+ $this->__set($key, $value);
+ }
+
+ return $this;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function toJSON(int $jsonOptions = null):string{
+ return json_encode($this, $jsonOptions ?? 0);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function fromJSON(string $json):SettingsContainerInterface{
+ $data = json_decode($json, true, 512, JSON_THROW_ON_ERROR);
+
+ return $this->fromIterable($data);
+ }
+
+ /**
+ * @inheritdoc
+ */
+ #[\ReturnTypeWillChange]
+ public function jsonSerialize():array{
+ return $this->toArray();
+ }
+
+}
diff --git a/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php b/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php
new file mode 100644
index 000000000..ddacccd29
--- /dev/null
+++ b/vendor/chillerlan/php-settings-container/src/SettingsContainerInterface.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Interface SettingsContainerInterface
+ *
+ * @created 28.08.2018
+ * @author Smiley <smiley@chillerlan.net>
+ * @copyright 2018 Smiley
+ * @license MIT
+ */
+
+namespace chillerlan\Settings;
+
+use JsonSerializable;
+
+/**
+ * a generic container with magic getter and setter
+ */
+interface SettingsContainerInterface extends JsonSerializable{
+
+ /**
+ * Retrieve the value of $property
+ *
+ * @return mixed|null
+ */
+ public function __get(string $property);
+
+ /**
+ * Set $property to $value while avoiding private and non-existing properties
+ *
+ * @param string $property
+ * @param mixed $value
+ */
+ public function __set(string $property, $value):void;
+
+ /**
+ * Checks if $property is set (aka. not null), excluding private properties
+ */
+ public function __isset(string $property):bool;
+
+ /**
+ * Unsets $property while avoiding private and non-existing properties
+ */
+ public function __unset(string $property):void;
+
+ /**
+ * @see SettingsContainerInterface::toJSON()
+ */
+ public function __toString():string;
+
+ /**
+ * Returns an array representation of the settings object
+ */
+ public function toArray():array;
+
+ /**
+ * Sets properties from a given iterable
+ */
+ public function fromIterable(iterable $properties):SettingsContainerInterface;
+
+ /**
+ * Returns a JSON representation of the settings object
+ * @see \json_encode()
+ */
+ public function toJSON(int $jsonOptions = null):string;
+
+ /**
+ * Sets properties from a given JSON string
+ *
+ * @throws \Exception
+ * @throws \JsonException
+ */
+ public function fromJSON(string $json):SettingsContainerInterface;
+
+}
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index 3a8ed4886..a72151c77 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -43,7 +43,7 @@ namespace Composer\Autoload;
class ClassLoader
{
/** @var \Closure(string):void */
- private $includeFile;
+ private static $includeFile;
/** @var ?string */
private $vendorDir;
@@ -109,18 +109,7 @@ class ClassLoader
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
-
- /**
- * Scope isolated include.
- *
- * Prevents access to $this/self from included files.
- *
- * @param string $file
- * @return void
- */
- $this->includeFile = static function($file) {
- include $file;
- };
+ self::initializeIncludeClosure();
}
/**
@@ -440,7 +429,8 @@ class ClassLoader
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
- ($this->includeFile)($file);
+ $includeFile = self::$includeFile;
+ $includeFile($file);
return true;
}
@@ -570,4 +560,26 @@ class ClassLoader
return false;
}
+
+ /**
+ * @return void
+ */
+ private static function initializeIncludeClosure()
+ {
+ if (self::$includeFile !== null) {
+ return;
+ }
+
+ /**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ *
+ * @param string $file
+ * @return void
+ */
+ self::$includeFile = \Closure::bind(static function($file) {
+ include $file;
+ }, null, null);
+ }
}
diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php
index 896daae0b..3f3766e5b 100644
--- a/vendor/composer/autoload_classmap.php
+++ b/vendor/composer/autoload_classmap.php
@@ -379,6 +379,27 @@ return array(
'OAuth2\\TokenType\\Bearer' => $vendorDir . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Bearer.php',
'OAuth2\\TokenType\\Mac' => $vendorDir . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Mac.php',
'OAuth2\\TokenType\\TokenTypeInterface' => $vendorDir . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/TokenTypeInterface.php',
+ 'OTPHP\\Factory' => $vendorDir . '/spomky-labs/otphp/src/Factory.php',
+ 'OTPHP\\FactoryInterface' => $vendorDir . '/spomky-labs/otphp/src/FactoryInterface.php',
+ 'OTPHP\\HOTP' => $vendorDir . '/spomky-labs/otphp/src/HOTP.php',
+ 'OTPHP\\HOTPInterface' => $vendorDir . '/spomky-labs/otphp/src/HOTPInterface.php',
+ 'OTPHP\\OTP' => $vendorDir . '/spomky-labs/otphp/src/OTP.php',
+ 'OTPHP\\OTPInterface' => $vendorDir . '/spomky-labs/otphp/src/OTPInterface.php',
+ 'OTPHP\\ParameterTrait' => $vendorDir . '/spomky-labs/otphp/src/ParameterTrait.php',
+ 'OTPHP\\TOTP' => $vendorDir . '/spomky-labs/otphp/src/TOTP.php',
+ 'OTPHP\\TOTPInterface' => $vendorDir . '/spomky-labs/otphp/src/TOTPInterface.php',
+ 'OTPHP\\Url' => $vendorDir . '/spomky-labs/otphp/src/Url.php',
+ 'ParagonIE\\ConstantTime\\Base32' => $vendorDir . '/paragonie/constant_time_encoding/src/Base32.php',
+ 'ParagonIE\\ConstantTime\\Base32Hex' => $vendorDir . '/paragonie/constant_time_encoding/src/Base32Hex.php',
+ 'ParagonIE\\ConstantTime\\Base64' => $vendorDir . '/paragonie/constant_time_encoding/src/Base64.php',
+ 'ParagonIE\\ConstantTime\\Base64DotSlash' => $vendorDir . '/paragonie/constant_time_encoding/src/Base64DotSlash.php',
+ 'ParagonIE\\ConstantTime\\Base64DotSlashOrdered' => $vendorDir . '/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php',
+ 'ParagonIE\\ConstantTime\\Base64UrlSafe' => $vendorDir . '/paragonie/constant_time_encoding/src/Base64UrlSafe.php',
+ 'ParagonIE\\ConstantTime\\Binary' => $vendorDir . '/paragonie/constant_time_encoding/src/Binary.php',
+ 'ParagonIE\\ConstantTime\\EncoderInterface' => $vendorDir . '/paragonie/constant_time_encoding/src/EncoderInterface.php',
+ 'ParagonIE\\ConstantTime\\Encoding' => $vendorDir . '/paragonie/constant_time_encoding/src/Encoding.php',
+ 'ParagonIE\\ConstantTime\\Hex' => $vendorDir . '/paragonie/constant_time_encoding/src/Hex.php',
+ 'ParagonIE\\ConstantTime\\RFC4648' => $vendorDir . '/paragonie/constant_time_encoding/src/RFC4648.php',
'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/src/AbstractLogger.php',
'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/src/InvalidArgumentException.php',
'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/src/LogLevel.php',
@@ -883,11 +904,16 @@ return array(
'SimplePie\\Author' => $vendorDir . '/simplepie/simplepie/src/Author.php',
'SimplePie\\Cache' => $vendorDir . '/simplepie/simplepie/src/Cache.php',
'SimplePie\\Cache\\Base' => $vendorDir . '/simplepie/simplepie/src/Cache/Base.php',
+ 'SimplePie\\Cache\\BaseDataCache' => $vendorDir . '/simplepie/simplepie/src/Cache/BaseDataCache.php',
+ 'SimplePie\\Cache\\CallableNameFilter' => $vendorDir . '/simplepie/simplepie/src/Cache/CallableNameFilter.php',
'SimplePie\\Cache\\DB' => $vendorDir . '/simplepie/simplepie/src/Cache/DB.php',
+ 'SimplePie\\Cache\\DataCache' => $vendorDir . '/simplepie/simplepie/src/Cache/DataCache.php',
'SimplePie\\Cache\\File' => $vendorDir . '/simplepie/simplepie/src/Cache/File.php',
'SimplePie\\Cache\\Memcache' => $vendorDir . '/simplepie/simplepie/src/Cache/Memcache.php',
'SimplePie\\Cache\\Memcached' => $vendorDir . '/simplepie/simplepie/src/Cache/Memcached.php',
'SimplePie\\Cache\\MySQL' => $vendorDir . '/simplepie/simplepie/src/Cache/MySQL.php',
+ 'SimplePie\\Cache\\NameFilter' => $vendorDir . '/simplepie/simplepie/src/Cache/NameFilter.php',
+ 'SimplePie\\Cache\\Psr16' => $vendorDir . '/simplepie/simplepie/src/Cache/Psr16.php',
'SimplePie\\Cache\\Redis' => $vendorDir . '/simplepie/simplepie/src/Cache/Redis.php',
'SimplePie\\Caption' => $vendorDir . '/simplepie/simplepie/src/Caption.php',
'SimplePie\\Category' => $vendorDir . '/simplepie/simplepie/src/Category.php',
@@ -908,6 +934,7 @@ return array(
'SimplePie\\Parser' => $vendorDir . '/simplepie/simplepie/src/Parser.php',
'SimplePie\\Rating' => $vendorDir . '/simplepie/simplepie/src/Rating.php',
'SimplePie\\Registry' => $vendorDir . '/simplepie/simplepie/src/Registry.php',
+ 'SimplePie\\RegistryAware' => $vendorDir . '/simplepie/simplepie/src/RegistryAware.php',
'SimplePie\\Restriction' => $vendorDir . '/simplepie/simplepie/src/Restriction.php',
'SimplePie\\Sanitize' => $vendorDir . '/simplepie/simplepie/src/Sanitize.php',
'SimplePie\\SimplePie' => $vendorDir . '/simplepie/simplepie/src/SimplePie.php',
@@ -1192,6 +1219,7 @@ return array(
'Zotlabs\\Lib\\Libzotdir' => $baseDir . '/Zotlabs/Lib/Libzotdir.php',
'Zotlabs\\Lib\\MarkdownSoap' => $baseDir . '/Zotlabs/Lib/MarkdownSoap.php',
'Zotlabs\\Lib\\MessageFilter' => $baseDir . '/Zotlabs/Lib/MessageFilter.php',
+ 'Zotlabs\\Lib\\ObjCache' => $baseDir . '/Zotlabs/Lib/ObjCache.php',
'Zotlabs\\Lib\\PConfig' => $baseDir . '/Zotlabs/Lib/PConfig.php',
'Zotlabs\\Lib\\Permcat' => $baseDir . '/Zotlabs/Lib/Permcat.php',
'Zotlabs\\Lib\\PermissionDescription' => $baseDir . '/Zotlabs/Lib/PermissionDescription.php',
@@ -1382,6 +1410,7 @@ return array(
'Zotlabs\\Module\\Settings\\Featured' => $baseDir . '/Zotlabs/Module/Settings/Featured.php',
'Zotlabs\\Module\\Settings\\Features' => $baseDir . '/Zotlabs/Module/Settings/Features.php',
'Zotlabs\\Module\\Settings\\Manage' => $baseDir . '/Zotlabs/Module/Settings/Manage.php',
+ 'Zotlabs\\Module\\Settings\\Multifactor' => $baseDir . '/Zotlabs/Module/Settings/Multifactor.php',
'Zotlabs\\Module\\Settings\\Network' => $baseDir . '/Zotlabs/Module/Settings/Network.php',
'Zotlabs\\Module\\Settings\\Photos' => $baseDir . '/Zotlabs/Module/Settings/Photos.php',
'Zotlabs\\Module\\Settings\\Privacy' => $baseDir . '/Zotlabs/Module/Settings/Privacy.php',
@@ -1409,6 +1438,7 @@ return array(
'Zotlabs\\Module\\Toggle_safesearch' => $baseDir . '/Zotlabs/Module/Toggle_safesearch.php',
'Zotlabs\\Module\\Token' => $baseDir . '/Zotlabs/Module/Token.php',
'Zotlabs\\Module\\Tokens' => $baseDir . '/Zotlabs/Module/Tokens.php',
+ 'Zotlabs\\Module\\Totp_check' => $baseDir . '/Zotlabs/Module/Totp_check.php',
'Zotlabs\\Module\\Uexport' => $baseDir . '/Zotlabs/Module/Uexport.php',
'Zotlabs\\Module\\Update' => $baseDir . '/Zotlabs/Module/Update.php',
'Zotlabs\\Module\\Userinfo' => $baseDir . '/Zotlabs/Module/Userinfo.php',
@@ -1781,6 +1811,31 @@ return array(
'Zotlabs\\Zot6\\IHandler' => $baseDir . '/Zotlabs/Zot6/IHandler.php',
'Zotlabs\\Zot6\\Receiver' => $baseDir . '/Zotlabs/Zot6/Receiver.php',
'Zotlabs\\Zot6\\Zot6Handler' => $baseDir . '/Zotlabs/Zot6/Zot6Handler.php',
+ 'chillerlan\\QRCode\\Data\\AlphaNum' => $vendorDir . '/chillerlan/php-qrcode/src/Data/AlphaNum.php',
+ 'chillerlan\\QRCode\\Data\\Byte' => $vendorDir . '/chillerlan/php-qrcode/src/Data/Byte.php',
+ 'chillerlan\\QRCode\\Data\\Kanji' => $vendorDir . '/chillerlan/php-qrcode/src/Data/Kanji.php',
+ 'chillerlan\\QRCode\\Data\\MaskPatternTester' => $vendorDir . '/chillerlan/php-qrcode/src/Data/MaskPatternTester.php',
+ 'chillerlan\\QRCode\\Data\\Number' => $vendorDir . '/chillerlan/php-qrcode/src/Data/Number.php',
+ 'chillerlan\\QRCode\\Data\\QRCodeDataException' => $vendorDir . '/chillerlan/php-qrcode/src/Data/QRCodeDataException.php',
+ 'chillerlan\\QRCode\\Data\\QRDataAbstract' => $vendorDir . '/chillerlan/php-qrcode/src/Data/QRDataAbstract.php',
+ 'chillerlan\\QRCode\\Data\\QRDataInterface' => $vendorDir . '/chillerlan/php-qrcode/src/Data/QRDataInterface.php',
+ 'chillerlan\\QRCode\\Data\\QRMatrix' => $vendorDir . '/chillerlan/php-qrcode/src/Data/QRMatrix.php',
+ 'chillerlan\\QRCode\\Helpers\\BitBuffer' => $vendorDir . '/chillerlan/php-qrcode/src/Helpers/BitBuffer.php',
+ 'chillerlan\\QRCode\\Helpers\\Polynomial' => $vendorDir . '/chillerlan/php-qrcode/src/Helpers/Polynomial.php',
+ 'chillerlan\\QRCode\\Output\\QRCodeOutputException' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php',
+ 'chillerlan\\QRCode\\Output\\QRFpdf' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRFpdf.php',
+ 'chillerlan\\QRCode\\Output\\QRImage' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRImage.php',
+ 'chillerlan\\QRCode\\Output\\QRImagick' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRImagick.php',
+ 'chillerlan\\QRCode\\Output\\QRMarkup' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRMarkup.php',
+ 'chillerlan\\QRCode\\Output\\QROutputAbstract' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QROutputAbstract.php',
+ 'chillerlan\\QRCode\\Output\\QROutputInterface' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QROutputInterface.php',
+ 'chillerlan\\QRCode\\Output\\QRString' => $vendorDir . '/chillerlan/php-qrcode/src/Output/QRString.php',
+ 'chillerlan\\QRCode\\QRCode' => $vendorDir . '/chillerlan/php-qrcode/src/QRCode.php',
+ 'chillerlan\\QRCode\\QRCodeException' => $vendorDir . '/chillerlan/php-qrcode/src/QRCodeException.php',
+ 'chillerlan\\QRCode\\QROptions' => $vendorDir . '/chillerlan/php-qrcode/src/QROptions.php',
+ 'chillerlan\\QRCode\\QROptionsTrait' => $vendorDir . '/chillerlan/php-qrcode/src/QROptionsTrait.php',
+ 'chillerlan\\Settings\\SettingsContainerAbstract' => $vendorDir . '/chillerlan/php-settings-container/src/SettingsContainerAbstract.php',
+ 'chillerlan\\Settings\\SettingsContainerInterface' => $vendorDir . '/chillerlan/php-settings-container/src/SettingsContainerInterface.php',
'phpseclib\\Crypt\\AES' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/AES.php',
'phpseclib\\Crypt\\Base' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Base.php',
'phpseclib\\Crypt\\Blowfish' => $vendorDir . '/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php',
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index 03b61bfa7..7ccef2c0a 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -8,6 +8,8 @@ $baseDir = dirname($vendorDir);
return array(
'voku\\' => array($vendorDir . '/voku/portable-ascii/src/voku', $vendorDir . '/voku/stop-words/src/voku'),
'phpseclib\\' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
+ 'chillerlan\\Settings\\' => array($vendorDir . '/chillerlan/php-settings-container/src'),
+ 'chillerlan\\QRCode\\' => array($vendorDir . '/chillerlan/php-qrcode/src'),
'Zotlabs\\' => array($baseDir . '/Zotlabs'),
'Symfony\\Polyfill\\Php81\\' => array($vendorDir . '/symfony/polyfill-php81'),
'SimplePie\\' => array($vendorDir . '/simplepie/simplepie/src'),
@@ -23,6 +25,8 @@ return array(
'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'),
'Ramsey\\Collection\\' => array($vendorDir . '/ramsey/collection/src'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
+ 'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'),
+ 'OTPHP\\' => array($vendorDir . '/spomky-labs/otphp/src'),
'Michelf\\' => array($vendorDir . '/michelf/php-markdown/Michelf'),
'League\\HTMLToMarkdown\\' => array($vendorDir . '/league/html-to-markdown/src'),
'ID3Parser\\' => array($vendorDir . '/lukasreschke/id3parser/src'),
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index 16298a0b9..655b7a2af 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -38,15 +38,15 @@ class ComposerAutoloaderInit7b34d7e50a62201ec5d5e526a5b8b35d
$loader->register(true);
$filesToLoad = \Composer\Autoload\ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d::$files;
- $requireFile = static function ($fileIdentifier, $file) {
+ $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
require $file;
}
- };
+ }, null, null);
foreach ($filesToLoad as $fileIdentifier => $file) {
- ($requireFile)($fileIdentifier, $file);
+ $requireFile($fileIdentifier, $file);
}
return $loader;
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 1a3ed33e7..4f8b2763d 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -29,6 +29,11 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
array (
'phpseclib\\' => 10,
),
+ 'c' =>
+ array (
+ 'chillerlan\\Settings\\' => 20,
+ 'chillerlan\\QRCode\\' => 18,
+ ),
'Z' =>
array (
'Zotlabs\\' => 8,
@@ -55,6 +60,11 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'P' =>
array (
'Psr\\Log\\' => 8,
+ 'ParagonIE\\ConstantTime\\' => 23,
+ ),
+ 'O' =>
+ array (
+ 'OTPHP\\' => 6,
),
'M' =>
array (
@@ -92,6 +102,14 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
array (
0 => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib',
),
+ 'chillerlan\\Settings\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/chillerlan/php-settings-container/src',
+ ),
+ 'chillerlan\\QRCode\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/chillerlan/php-qrcode/src',
+ ),
'Zotlabs\\' =>
array (
0 => __DIR__ . '/../..' . '/Zotlabs',
@@ -152,6 +170,14 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
array (
0 => __DIR__ . '/..' . '/psr/log/src',
),
+ 'ParagonIE\\ConstantTime\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src',
+ ),
+ 'OTPHP\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/spomky-labs/otphp/src',
+ ),
'Michelf\\' =>
array (
0 => __DIR__ . '/..' . '/michelf/php-markdown/Michelf',
@@ -590,6 +616,27 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'OAuth2\\TokenType\\Bearer' => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Bearer.php',
'OAuth2\\TokenType\\Mac' => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Mac.php',
'OAuth2\\TokenType\\TokenTypeInterface' => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src/OAuth2/TokenType/TokenTypeInterface.php',
+ 'OTPHP\\Factory' => __DIR__ . '/..' . '/spomky-labs/otphp/src/Factory.php',
+ 'OTPHP\\FactoryInterface' => __DIR__ . '/..' . '/spomky-labs/otphp/src/FactoryInterface.php',
+ 'OTPHP\\HOTP' => __DIR__ . '/..' . '/spomky-labs/otphp/src/HOTP.php',
+ 'OTPHP\\HOTPInterface' => __DIR__ . '/..' . '/spomky-labs/otphp/src/HOTPInterface.php',
+ 'OTPHP\\OTP' => __DIR__ . '/..' . '/spomky-labs/otphp/src/OTP.php',
+ 'OTPHP\\OTPInterface' => __DIR__ . '/..' . '/spomky-labs/otphp/src/OTPInterface.php',
+ 'OTPHP\\ParameterTrait' => __DIR__ . '/..' . '/spomky-labs/otphp/src/ParameterTrait.php',
+ 'OTPHP\\TOTP' => __DIR__ . '/..' . '/spomky-labs/otphp/src/TOTP.php',
+ 'OTPHP\\TOTPInterface' => __DIR__ . '/..' . '/spomky-labs/otphp/src/TOTPInterface.php',
+ 'OTPHP\\Url' => __DIR__ . '/..' . '/spomky-labs/otphp/src/Url.php',
+ 'ParagonIE\\ConstantTime\\Base32' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base32.php',
+ 'ParagonIE\\ConstantTime\\Base32Hex' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base32Hex.php',
+ 'ParagonIE\\ConstantTime\\Base64' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base64.php',
+ 'ParagonIE\\ConstantTime\\Base64DotSlash' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base64DotSlash.php',
+ 'ParagonIE\\ConstantTime\\Base64DotSlashOrdered' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php',
+ 'ParagonIE\\ConstantTime\\Base64UrlSafe' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Base64UrlSafe.php',
+ 'ParagonIE\\ConstantTime\\Binary' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Binary.php',
+ 'ParagonIE\\ConstantTime\\EncoderInterface' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/EncoderInterface.php',
+ 'ParagonIE\\ConstantTime\\Encoding' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Encoding.php',
+ 'ParagonIE\\ConstantTime\\Hex' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/Hex.php',
+ 'ParagonIE\\ConstantTime\\RFC4648' => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src/RFC4648.php',
'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/src/AbstractLogger.php',
'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/src/InvalidArgumentException.php',
'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/src/LogLevel.php',
@@ -1094,11 +1141,16 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'SimplePie\\Author' => __DIR__ . '/..' . '/simplepie/simplepie/src/Author.php',
'SimplePie\\Cache' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache.php',
'SimplePie\\Cache\\Base' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/Base.php',
+ 'SimplePie\\Cache\\BaseDataCache' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/BaseDataCache.php',
+ 'SimplePie\\Cache\\CallableNameFilter' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/CallableNameFilter.php',
'SimplePie\\Cache\\DB' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/DB.php',
+ 'SimplePie\\Cache\\DataCache' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/DataCache.php',
'SimplePie\\Cache\\File' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/File.php',
'SimplePie\\Cache\\Memcache' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/Memcache.php',
'SimplePie\\Cache\\Memcached' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/Memcached.php',
'SimplePie\\Cache\\MySQL' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/MySQL.php',
+ 'SimplePie\\Cache\\NameFilter' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/NameFilter.php',
+ 'SimplePie\\Cache\\Psr16' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/Psr16.php',
'SimplePie\\Cache\\Redis' => __DIR__ . '/..' . '/simplepie/simplepie/src/Cache/Redis.php',
'SimplePie\\Caption' => __DIR__ . '/..' . '/simplepie/simplepie/src/Caption.php',
'SimplePie\\Category' => __DIR__ . '/..' . '/simplepie/simplepie/src/Category.php',
@@ -1119,6 +1171,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'SimplePie\\Parser' => __DIR__ . '/..' . '/simplepie/simplepie/src/Parser.php',
'SimplePie\\Rating' => __DIR__ . '/..' . '/simplepie/simplepie/src/Rating.php',
'SimplePie\\Registry' => __DIR__ . '/..' . '/simplepie/simplepie/src/Registry.php',
+ 'SimplePie\\RegistryAware' => __DIR__ . '/..' . '/simplepie/simplepie/src/RegistryAware.php',
'SimplePie\\Restriction' => __DIR__ . '/..' . '/simplepie/simplepie/src/Restriction.php',
'SimplePie\\Sanitize' => __DIR__ . '/..' . '/simplepie/simplepie/src/Sanitize.php',
'SimplePie\\SimplePie' => __DIR__ . '/..' . '/simplepie/simplepie/src/SimplePie.php',
@@ -1403,6 +1456,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Lib\\Libzotdir' => __DIR__ . '/../..' . '/Zotlabs/Lib/Libzotdir.php',
'Zotlabs\\Lib\\MarkdownSoap' => __DIR__ . '/../..' . '/Zotlabs/Lib/MarkdownSoap.php',
'Zotlabs\\Lib\\MessageFilter' => __DIR__ . '/../..' . '/Zotlabs/Lib/MessageFilter.php',
+ 'Zotlabs\\Lib\\ObjCache' => __DIR__ . '/../..' . '/Zotlabs/Lib/ObjCache.php',
'Zotlabs\\Lib\\PConfig' => __DIR__ . '/../..' . '/Zotlabs/Lib/PConfig.php',
'Zotlabs\\Lib\\Permcat' => __DIR__ . '/../..' . '/Zotlabs/Lib/Permcat.php',
'Zotlabs\\Lib\\PermissionDescription' => __DIR__ . '/../..' . '/Zotlabs/Lib/PermissionDescription.php',
@@ -1593,6 +1647,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Module\\Settings\\Featured' => __DIR__ . '/../..' . '/Zotlabs/Module/Settings/Featured.php',
'Zotlabs\\Module\\Settings\\Features' => __DIR__ . '/../..' . '/Zotlabs/Module/Settings/Features.php',
'Zotlabs\\Module\\Settings\\Manage' => __DIR__ . '/../..' . '/Zotlabs/Module/Settings/Manage.php',
+ 'Zotlabs\\Module\\Settings\\Multifactor' => __DIR__ . '/../..' . '/Zotlabs/Module/Settings/Multifactor.php',
'Zotlabs\\Module\\Settings\\Network' => __DIR__ . '/../..' . '/Zotlabs/Module/Settings/Network.php',
'Zotlabs\\Module\\Settings\\Photos' => __DIR__ . '/../..' . '/Zotlabs/Module/Settings/Photos.php',
'Zotlabs\\Module\\Settings\\Privacy' => __DIR__ . '/../..' . '/Zotlabs/Module/Settings/Privacy.php',
@@ -1620,6 +1675,7 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Module\\Toggle_safesearch' => __DIR__ . '/../..' . '/Zotlabs/Module/Toggle_safesearch.php',
'Zotlabs\\Module\\Token' => __DIR__ . '/../..' . '/Zotlabs/Module/Token.php',
'Zotlabs\\Module\\Tokens' => __DIR__ . '/../..' . '/Zotlabs/Module/Tokens.php',
+ 'Zotlabs\\Module\\Totp_check' => __DIR__ . '/../..' . '/Zotlabs/Module/Totp_check.php',
'Zotlabs\\Module\\Uexport' => __DIR__ . '/../..' . '/Zotlabs/Module/Uexport.php',
'Zotlabs\\Module\\Update' => __DIR__ . '/../..' . '/Zotlabs/Module/Update.php',
'Zotlabs\\Module\\Userinfo' => __DIR__ . '/../..' . '/Zotlabs/Module/Userinfo.php',
@@ -1992,6 +2048,31 @@ class ComposerStaticInit7b34d7e50a62201ec5d5e526a5b8b35d
'Zotlabs\\Zot6\\IHandler' => __DIR__ . '/../..' . '/Zotlabs/Zot6/IHandler.php',
'Zotlabs\\Zot6\\Receiver' => __DIR__ . '/../..' . '/Zotlabs/Zot6/Receiver.php',
'Zotlabs\\Zot6\\Zot6Handler' => __DIR__ . '/../..' . '/Zotlabs/Zot6/Zot6Handler.php',
+ 'chillerlan\\QRCode\\Data\\AlphaNum' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Data/AlphaNum.php',
+ 'chillerlan\\QRCode\\Data\\Byte' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Data/Byte.php',
+ 'chillerlan\\QRCode\\Data\\Kanji' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Data/Kanji.php',
+ 'chillerlan\\QRCode\\Data\\MaskPatternTester' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Data/MaskPatternTester.php',
+ 'chillerlan\\QRCode\\Data\\Number' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Data/Number.php',
+ 'chillerlan\\QRCode\\Data\\QRCodeDataException' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Data/QRCodeDataException.php',
+ 'chillerlan\\QRCode\\Data\\QRDataAbstract' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Data/QRDataAbstract.php',
+ 'chillerlan\\QRCode\\Data\\QRDataInterface' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Data/QRDataInterface.php',
+ 'chillerlan\\QRCode\\Data\\QRMatrix' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Data/QRMatrix.php',
+ 'chillerlan\\QRCode\\Helpers\\BitBuffer' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Helpers/BitBuffer.php',
+ 'chillerlan\\QRCode\\Helpers\\Polynomial' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Helpers/Polynomial.php',
+ 'chillerlan\\QRCode\\Output\\QRCodeOutputException' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Output/QRCodeOutputException.php',
+ 'chillerlan\\QRCode\\Output\\QRFpdf' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Output/QRFpdf.php',
+ 'chillerlan\\QRCode\\Output\\QRImage' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Output/QRImage.php',
+ 'chillerlan\\QRCode\\Output\\QRImagick' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Output/QRImagick.php',
+ 'chillerlan\\QRCode\\Output\\QRMarkup' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Output/QRMarkup.php',
+ 'chillerlan\\QRCode\\Output\\QROutputAbstract' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Output/QROutputAbstract.php',
+ 'chillerlan\\QRCode\\Output\\QROutputInterface' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Output/QROutputInterface.php',
+ 'chillerlan\\QRCode\\Output\\QRString' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/Output/QRString.php',
+ 'chillerlan\\QRCode\\QRCode' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/QRCode.php',
+ 'chillerlan\\QRCode\\QRCodeException' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/QRCodeException.php',
+ 'chillerlan\\QRCode\\QROptions' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/QROptions.php',
+ 'chillerlan\\QRCode\\QROptionsTrait' => __DIR__ . '/..' . '/chillerlan/php-qrcode/src/QROptionsTrait.php',
+ 'chillerlan\\Settings\\SettingsContainerAbstract' => __DIR__ . '/..' . '/chillerlan/php-settings-container/src/SettingsContainerAbstract.php',
+ 'chillerlan\\Settings\\SettingsContainerInterface' => __DIR__ . '/..' . '/chillerlan/php-settings-container/src/SettingsContainerInterface.php',
'phpseclib\\Crypt\\AES' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/AES.php',
'phpseclib\\Crypt\\Base' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Base.php',
'phpseclib\\Crypt\\Blowfish' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php',
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 97833cf60..9a4a2a6d8 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -198,6 +198,154 @@
"install-path": "../bshaffer/oauth2-server-php"
},
{
+ "name": "chillerlan/php-qrcode",
+ "version": "4.3.4",
+ "version_normalized": "4.3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-qrcode.git",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "reference": "2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d",
+ "shasum": ""
+ },
+ "require": {
+ "chillerlan/php-settings-container": "^2.1.4",
+ "ext-mbstring": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^5.3",
+ "phpunit/phpunit": "^9.5",
+ "setasign/fpdf": "^1.8.2"
+ },
+ "suggest": {
+ "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.",
+ "setasign/fpdf": "Required to use the QR FPDF output."
+ },
+ "time": "2022-07-25T09:12:45+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\QRCode\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kazuhiko Arase",
+ "homepage": "https://github.com/kazuhikoarase"
+ },
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/chillerlan/php-qrcode/graphs/contributors"
+ }
+ ],
+ "description": "A QR code generator. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-qrcode",
+ "keywords": [
+ "phpqrcode",
+ "qr",
+ "qr code",
+ "qrcode",
+ "qrcode-generator"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-qrcode/issues",
+ "source": "https://github.com/chillerlan/php-qrcode/tree/4.3.4"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "install-path": "../chillerlan/php-qrcode"
+ },
+ {
+ "name": "chillerlan/php-settings-container",
+ "version": "2.1.4",
+ "version_normalized": "2.1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/chillerlan/php-settings-container.git",
+ "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
+ "reference": "1beb7df3c14346d4344b0b2e12f6f9a74feabd4a",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "phan/phan": "^5.3",
+ "phpunit/phpunit": "^9.5"
+ },
+ "time": "2022-07-05T22:32:14+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "chillerlan\\Settings\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Smiley",
+ "email": "smiley@chillerlan.net",
+ "homepage": "https://github.com/codemasher"
+ }
+ ],
+ "description": "A container class for immutable settings objects. Not a DI container. PHP 7.4+",
+ "homepage": "https://github.com/chillerlan/php-settings-container",
+ "keywords": [
+ "PHP7",
+ "Settings",
+ "configuration",
+ "container",
+ "helper"
+ ],
+ "support": {
+ "issues": "https://github.com/chillerlan/php-settings-container/issues",
+ "source": "https://github.com/chillerlan/php-settings-container"
+ },
+ "funding": [
+ {
+ "url": "https://www.paypal.com/donate?hosted_button_id=WLYUNAT9ZTJZ4",
+ "type": "custom"
+ },
+ {
+ "url": "https://ko-fi.com/codemasher",
+ "type": "ko_fi"
+ }
+ ],
+ "install-path": "../chillerlan/php-settings-container"
+ },
+ {
"name": "commerceguys/intl",
"version": "v1.1.1",
"version_normalized": "1.1.1.0",
@@ -619,6 +767,76 @@
"install-path": "../michelf/php-markdown"
},
{
+ "name": "paragonie/constant_time_encoding",
+ "version": "v2.6.3",
+ "version_normalized": "2.6.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/constant_time_encoding.git",
+ "reference": "58c3f47f650c94ec05a151692652a868995d2938"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938",
+ "reference": "58c3f47f650c94ec05a151692652a868995d2938",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7|^8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "vimeo/psalm": "^1|^2|^3|^4"
+ },
+ "time": "2022-06-14T06:56:20+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Steve 'Sc00bz' Thomas",
+ "email": "steve@tobtu.com",
+ "homepage": "https://www.tobtu.com",
+ "role": "Original Developer"
+ }
+ ],
+ "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+ "keywords": [
+ "base16",
+ "base32",
+ "base32_decode",
+ "base32_encode",
+ "base64",
+ "base64_decode",
+ "base64_encode",
+ "bin2hex",
+ "encoding",
+ "hex",
+ "hex2bin",
+ "rfc4648"
+ ],
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+ "source": "https://github.com/paragonie/constant_time_encoding"
+ },
+ "install-path": "../paragonie/constant_time_encoding"
+ },
+ {
"name": "pear/text_languagedetect",
"version": "v1.0.1",
"version_normalized": "1.0.1.0",
@@ -1478,27 +1696,28 @@
},
{
"name": "simplepie/simplepie",
- "version": "1.7.0",
- "version_normalized": "1.7.0.0",
+ "version": "1.8.0",
+ "version_normalized": "1.8.0.0",
"source": {
"type": "git",
"url": "https://github.com/simplepie/simplepie.git",
- "reference": "9e9add3428ce86aede874bcf9a59c78e272f8dc1"
+ "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/simplepie/simplepie/zipball/9e9add3428ce86aede874bcf9a59c78e272f8dc1",
- "reference": "9e9add3428ce86aede874bcf9a59c78e272f8dc1",
+ "url": "https://api.github.com/repos/simplepie/simplepie/zipball/65b095d87bc00898d8fa7737bdbcda93a3fbcc55",
+ "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55",
"shasum": ""
},
"require": {
"ext-pcre": "*",
"ext-xml": "*",
"ext-xmlreader": "*",
- "php": ">=5.6.0"
+ "php": ">=7.2.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.19 || ^3.8",
+ "psr/simple-cache": "^1 || ^2 || ^3",
"yoast/phpunit-polyfills": "^1.0.1"
},
"suggest": {
@@ -1508,7 +1727,7 @@
"ext-mbstring": "",
"mf2/mf2": "Microformat module that allows for parsing HTML for microformats"
},
- "time": "2022-09-30T06:49:48+00:00",
+ "time": "2023-01-20T08:37:35+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1559,24 +1778,24 @@
"rss"
],
"support": {
- "source": "https://github.com/simplepie/simplepie/tree/1.7.0",
+ "source": "https://github.com/simplepie/simplepie/tree/1.8.0",
"issues": "https://github.com/simplepie/simplepie/issues"
},
"install-path": "../simplepie/simplepie"
},
{
"name": "smarty/smarty",
- "version": "v4.2.1",
- "version_normalized": "4.2.1.0",
+ "version": "v4.3.0",
+ "version_normalized": "4.3.0.0",
"source": {
"type": "git",
"url": "https://github.com/smarty-php/smarty.git",
- "reference": "ffa2b81a8e354a49fd8a2f24742dc9dc399e8007"
+ "reference": "c02e9e135ea719b91f457a0072748ded0e852e7d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/smarty-php/smarty/zipball/ffa2b81a8e354a49fd8a2f24742dc9dc399e8007",
- "reference": "ffa2b81a8e354a49fd8a2f24742dc9dc399e8007",
+ "url": "https://api.github.com/repos/smarty-php/smarty/zipball/c02e9e135ea719b91f457a0072748ded0e852e7d",
+ "reference": "c02e9e135ea719b91f457a0072748ded0e852e7d",
"shasum": ""
},
"require": {
@@ -1586,7 +1805,7 @@
"phpunit/phpunit": "^8.5 || ^7.5",
"smarty/smarty-lexer": "^3.1"
},
- "time": "2022-09-14T10:59:01+00:00",
+ "time": "2022-11-22T21:47:32+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -1629,11 +1848,94 @@
"support": {
"forum": "https://github.com/smarty-php/smarty/discussions",
"issues": "https://github.com/smarty-php/smarty/issues",
- "source": "https://github.com/smarty-php/smarty/tree/v4.2.1"
+ "source": "https://github.com/smarty-php/smarty/tree/v4.3.0"
},
"install-path": "../smarty/smarty"
},
{
+ "name": "spomky-labs/otphp",
+ "version": "11.1.0",
+ "version_normalized": "11.1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Spomky-Labs/otphp.git",
+ "reference": "4849ac1aa560bfc56c0d1534b0d72532da4665ab"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/4849ac1aa560bfc56c0d1534b0d72532da4665ab",
+ "reference": "4849ac1aa560bfc56c0d1534b0d72532da4665ab",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "paragonie/constant_time_encoding": "^2.0",
+ "php": "^8.1"
+ },
+ "require-dev": {
+ "ekino/phpstan-banned-code": "^1.0",
+ "infection/infection": "^0.26",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-deprecation-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.0",
+ "phpunit/phpunit": "^9.5.26",
+ "qossmic/deptrac-shim": "^1.0",
+ "rector/rector": "^0.14",
+ "symfony/phpunit-bridge": "^6.1",
+ "symplify/easy-coding-standard": "^11.0"
+ },
+ "time": "2022-11-11T12:57:17+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "OTPHP\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Florent Morselli",
+ "homepage": "https://github.com/Spomky"
+ },
+ {
+ "name": "All contributors",
+ "homepage": "https://github.com/Spomky-Labs/otphp/contributors"
+ }
+ ],
+ "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator",
+ "homepage": "https://github.com/Spomky-Labs/otphp",
+ "keywords": [
+ "FreeOTP",
+ "RFC 4226",
+ "RFC 6238",
+ "google authenticator",
+ "hotp",
+ "otp",
+ "totp"
+ ],
+ "support": {
+ "issues": "https://github.com/Spomky-Labs/otphp/issues",
+ "source": "https://github.com/Spomky-Labs/otphp/tree/11.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Spomky",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/FlorentMorselli",
+ "type": "patreon"
+ }
+ ],
+ "install-path": "../spomky-labs/otphp"
+ },
+ {
"name": "symfony/polyfill-php81",
"version": "v1.26.0",
"version_normalized": "1.26.0.0",
@@ -1717,23 +2019,23 @@
},
{
"name": "twbs/bootstrap",
- "version": "v5.2.2",
- "version_normalized": "5.2.2.0",
+ "version": "v5.3.0-alpha1",
+ "version_normalized": "5.3.0.0-alpha1",
"source": {
"type": "git",
"url": "https://github.com/twbs/bootstrap.git",
- "reference": "961d5ff9844372a4e294980c667bbe7e0651cdeb"
+ "reference": "cf9454caa00872899215603e5e036d9a824b1b11"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twbs/bootstrap/zipball/961d5ff9844372a4e294980c667bbe7e0651cdeb",
- "reference": "961d5ff9844372a4e294980c667bbe7e0651cdeb",
+ "url": "https://api.github.com/repos/twbs/bootstrap/zipball/cf9454caa00872899215603e5e036d9a824b1b11",
+ "reference": "cf9454caa00872899215603e5e036d9a824b1b11",
"shasum": ""
},
"replace": {
"twitter/bootstrap": "self.version"
},
- "time": "2022-10-03T07:44:02+00:00",
+ "time": "2022-12-24T16:37:22+00:00",
"type": "library",
"installation-source": "dist",
"notification-url": "https://packagist.org/downloads/",
@@ -1764,7 +2066,7 @@
],
"support": {
"issues": "https://github.com/twbs/bootstrap/issues",
- "source": "https://github.com/twbs/bootstrap/tree/v5.2.2"
+ "source": "https://github.com/twbs/bootstrap/tree/v5.3.0-alpha1"
},
"install-path": "../twbs/bootstrap"
},
diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php
index fdcb79777..7a0de70bf 100644
--- a/vendor/composer/installed.php
+++ b/vendor/composer/installed.php
@@ -3,7 +3,7 @@
'name' => 'zotlabs/hubzilla',
'pretty_version' => 'dev-master',
'version' => 'dev-master',
- 'reference' => 'e1f9b1c47d8f3ed3400465ec279e894a0d9255c5',
+ 'reference' => 'd43a56614cd93982d19f4f82aae6e62f9ca533a9',
'type' => 'application',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -37,6 +37,24 @@
'aliases' => array(),
'dev_requirement' => false,
),
+ 'chillerlan/php-qrcode' => array(
+ 'pretty_version' => '4.3.4',
+ 'version' => '4.3.4.0',
+ 'reference' => '2ca4bf5ae048af1981d1023ee42a0a2a9d51e51d',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../chillerlan/php-qrcode',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
+ 'chillerlan/php-settings-container' => array(
+ 'pretty_version' => '2.1.4',
+ 'version' => '2.1.4.0',
+ 'reference' => '1beb7df3c14346d4344b0b2e12f6f9a74feabd4a',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../chillerlan/php-settings-container',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
'commerceguys/intl' => array(
'pretty_version' => 'v1.1.1',
'version' => '1.1.1.0',
@@ -100,6 +118,15 @@
'aliases' => array(),
'dev_requirement' => false,
),
+ 'paragonie/constant_time_encoding' => array(
+ 'pretty_version' => 'v2.6.3',
+ 'version' => '2.6.3.0',
+ 'reference' => '58c3f47f650c94ec05a151692652a868995d2938',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../paragonie/constant_time_encoding',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
'pear/text_languagedetect' => array(
'pretty_version' => 'v1.0.1',
'version' => '1.0.1.0',
@@ -206,23 +233,32 @@
'dev_requirement' => false,
),
'simplepie/simplepie' => array(
- 'pretty_version' => '1.7.0',
- 'version' => '1.7.0.0',
- 'reference' => '9e9add3428ce86aede874bcf9a59c78e272f8dc1',
+ 'pretty_version' => '1.8.0',
+ 'version' => '1.8.0.0',
+ 'reference' => '65b095d87bc00898d8fa7737bdbcda93a3fbcc55',
'type' => 'library',
'install_path' => __DIR__ . '/../simplepie/simplepie',
'aliases' => array(),
'dev_requirement' => false,
),
'smarty/smarty' => array(
- 'pretty_version' => 'v4.2.1',
- 'version' => '4.2.1.0',
- 'reference' => 'ffa2b81a8e354a49fd8a2f24742dc9dc399e8007',
+ 'pretty_version' => 'v4.3.0',
+ 'version' => '4.3.0.0',
+ 'reference' => 'c02e9e135ea719b91f457a0072748ded0e852e7d',
'type' => 'library',
'install_path' => __DIR__ . '/../smarty/smarty',
'aliases' => array(),
'dev_requirement' => false,
),
+ 'spomky-labs/otphp' => array(
+ 'pretty_version' => '11.1.0',
+ 'version' => '11.1.0.0',
+ 'reference' => '4849ac1aa560bfc56c0d1534b0d72532da4665ab',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../spomky-labs/otphp',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
'symfony/polyfill-php81' => array(
'pretty_version' => 'v1.26.0',
'version' => '1.26.0.0',
@@ -233,9 +269,9 @@
'dev_requirement' => false,
),
'twbs/bootstrap' => array(
- 'pretty_version' => 'v5.2.2',
- 'version' => '5.2.2.0',
- 'reference' => '961d5ff9844372a4e294980c667bbe7e0651cdeb',
+ 'pretty_version' => 'v5.3.0-alpha1',
+ 'version' => '5.3.0.0-alpha1',
+ 'reference' => 'cf9454caa00872899215603e5e036d9a824b1b11',
'type' => 'library',
'install_path' => __DIR__ . '/../twbs/bootstrap',
'aliases' => array(),
@@ -244,7 +280,7 @@
'twitter/bootstrap' => array(
'dev_requirement' => false,
'replaced' => array(
- 0 => 'v5.2.2',
+ 0 => 'v5.3.0-alpha1',
),
),
'voku/portable-ascii' => array(
@@ -268,7 +304,7 @@
'zotlabs/hubzilla' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
- 'reference' => 'e1f9b1c47d8f3ed3400465ec279e894a0d9255c5',
+ 'reference' => 'd43a56614cd93982d19f4f82aae6e62f9ca533a9',
'type' => 'application',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php
index b168ddd5d..4c3a5d68f 100644
--- a/vendor/composer/platform_check.php
+++ b/vendor/composer/platform_check.php
@@ -4,8 +4,8 @@
$issues = array();
-if (!(PHP_VERSION_ID >= 80002)) {
- $issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.2". You are running ' . PHP_VERSION . '.';
+if (!(PHP_VERSION_ID >= 80100)) {
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
diff --git a/vendor/paragonie/constant_time_encoding/LICENSE.txt b/vendor/paragonie/constant_time_encoding/LICENSE.txt
new file mode 100644
index 000000000..91acaca67
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/LICENSE.txt
@@ -0,0 +1,48 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 - 2022 Paragon Initiative Enterprises
+
+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.
+
+------------------------------------------------------------------------------
+This library was based on the work of Steve "Sc00bz" Thomas.
+------------------------------------------------------------------------------
+
+The MIT License (MIT)
+
+Copyright (c) 2014 Steve Thomas
+
+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/vendor/paragonie/constant_time_encoding/README.md b/vendor/paragonie/constant_time_encoding/README.md
new file mode 100644
index 000000000..cedddd863
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/README.md
@@ -0,0 +1,84 @@
+# Constant-Time Encoding
+
+[![Build Status](https://github.com/paragonie/constant_time_encoding/actions/workflows/ci.yml/badge.svg)](https://github.com/paragonie/constant_time_encoding/actions)
+[![Latest Stable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/stable)](https://packagist.org/packages/paragonie/constant_time_encoding)
+[![Latest Unstable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/unstable)](https://packagist.org/packages/paragonie/constant_time_encoding)
+[![License](https://poser.pugx.org/paragonie/constant_time_encoding/license)](https://packagist.org/packages/paragonie/constant_time_encoding)
+[![Downloads](https://img.shields.io/packagist/dt/paragonie/constant_time_encoding.svg)](https://packagist.org/packages/paragonie/constant_time_encoding)
+
+Based on the [constant-time base64 implementation made by Steve "Sc00bz" Thomas](https://github.com/Sc00bz/ConstTimeEncoding),
+this library aims to offer character encoding functions that do not leak
+information about what you are encoding/decoding via processor cache
+misses. Further reading on [cache-timing attacks](http://blog.ircmaxell.com/2014/11/its-all-about-time.html).
+
+Our fork offers the following enchancements:
+
+* `mbstring.func_overload` resistance
+* Unit tests
+* Composer- and Packagist-ready
+* Base16 encoding
+* Base32 encoding
+* Uses `pack()` and `unpack()` instead of `chr()` and `ord()`
+
+## PHP Version Requirements
+
+Version 2 of this library should work on **PHP 7** or newer. For PHP 5
+support, see [the v1.x branch](https://github.com/paragonie/constant_time_encoding/tree/v1.x).
+
+If you are adding this as a dependency to a project intended to work on both PHP 5 and PHP 7, please set the required version to `^1|^2` instead of just `^1` or `^2`.
+
+## How to Install
+
+```sh
+composer require paragonie/constant_time_encoding
+```
+
+## How to Use
+
+```php
+use ParagonIE\ConstantTime\Encoding;
+
+// possibly (if applicable):
+// require 'vendor/autoload.php';
+
+$data = random_bytes(32);
+echo Encoding::base64Encode($data), "\n";
+echo Encoding::base32EncodeUpper($data), "\n";
+echo Encoding::base32Encode($data), "\n";
+echo Encoding::hexEncode($data), "\n";
+echo Encoding::hexEncodeUpper($data), "\n";
+```
+
+Example output:
+
+```
+1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
+2VMKKPSHSWVCVZJ6E7SONRY3ZXCNG3GE6ZZFU7TGJSX7KUKFNLAQ====
+2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
+d558a53e4795aa2ae53e27e4e6c71bcdc4d36cc4f6725a7e664caff551456ac1
+D558A53E4795AA2AE53E27E4E6C71BDCC4D36CC4F6725A7E664CAFF551456AC1
+```
+
+If you only need a particular variant, you can just reference the
+required class like so:
+
+```php
+use ParagonIE\ConstantTime\Base64;
+use ParagonIE\ConstantTime\Base32;
+
+$data = random_bytes(32);
+echo Base64::encode($data), "\n";
+echo Base32::encode($data), "\n";
+```
+
+Example output:
+
+```
+1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
+2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
+```
+
+## Support Contracts
+
+If your company uses this library in their products or services, you may be
+interested in [purchasing a support contract from Paragon Initiative Enterprises](https://paragonie.com/enterprise).
diff --git a/vendor/paragonie/constant_time_encoding/composer.json b/vendor/paragonie/constant_time_encoding/composer.json
new file mode 100644
index 000000000..2fe9717ad
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/composer.json
@@ -0,0 +1,56 @@
+{
+ "name": "paragonie/constant_time_encoding",
+ "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
+ "keywords": [
+ "base64",
+ "encoding",
+ "rfc4648",
+ "base32",
+ "base16",
+ "hex",
+ "bin2hex",
+ "hex2bin",
+ "base64_encode",
+ "base64_decode",
+ "base32_encode",
+ "base32_decode"
+ ],
+ "license": "MIT",
+ "type": "library",
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Steve 'Sc00bz' Thomas",
+ "email": "steve@tobtu.com",
+ "homepage": "https://www.tobtu.com",
+ "role": "Original Developer"
+ }
+ ],
+ "support": {
+ "issues": "https://github.com/paragonie/constant_time_encoding/issues",
+ "email": "info@paragonie.com",
+ "source": "https://github.com/paragonie/constant_time_encoding"
+ },
+ "require": {
+ "php": "^7|^8"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6|^7|^8|^9",
+ "vimeo/psalm": "^1|^2|^3|^4"
+ },
+ "autoload": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "ParagonIE\\ConstantTime\\Tests\\": "tests/"
+ }
+ }
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/Base32.php b/vendor/paragonie/constant_time_encoding/src/Base32.php
new file mode 100644
index 000000000..7508b3df6
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/Base32.php
@@ -0,0 +1,519 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+use InvalidArgumentException;
+use RangeException;
+use TypeError;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class Base32
+ * [A-Z][2-7]
+ *
+ * @package ParagonIE\ConstantTime
+ */
+abstract class Base32 implements EncoderInterface
+{
+ /**
+ * Decode a Base32-encoded string into raw binary
+ *
+ * @param string $encodedString
+ * @param bool $strictPadding
+ * @return string
+ */
+ public static function decode(string $encodedString, bool $strictPadding = false): string
+ {
+ return static::doDecode($encodedString, false, $strictPadding);
+ }
+
+ /**
+ * Decode an uppercase Base32-encoded string into raw binary
+ *
+ * @param string $src
+ * @param bool $strictPadding
+ * @return string
+ */
+ public static function decodeUpper(string $src, bool $strictPadding = false): string
+ {
+ return static::doDecode($src, true, $strictPadding);
+ }
+
+ /**
+ * Encode into Base32 (RFC 4648)
+ *
+ * @param string $binString
+ * @return string
+ * @throws TypeError
+ */
+ public static function encode(string $binString): string
+ {
+ return static::doEncode($binString, false, true);
+ }
+ /**
+ * Encode into Base32 (RFC 4648)
+ *
+ * @param string $src
+ * @return string
+ * @throws TypeError
+ */
+ public static function encodeUnpadded(string $src): string
+ {
+ return static::doEncode($src, false, false);
+ }
+
+ /**
+ * Encode into uppercase Base32 (RFC 4648)
+ *
+ * @param string $src
+ * @return string
+ * @throws TypeError
+ */
+ public static function encodeUpper(string $src): string
+ {
+ return static::doEncode($src, true, true);
+ }
+
+ /**
+ * Encode into uppercase Base32 (RFC 4648)
+ *
+ * @param string $src
+ * @return string
+ * @throws TypeError
+ */
+ public static function encodeUpperUnpadded(string $src): string
+ {
+ return static::doEncode($src, true, false);
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 5-bit integers
+ * into 8-bit integers.
+ *
+ * @param int $src
+ * @return int
+ */
+ protected static function decode5Bits(int $src): int
+ {
+ $ret = -1;
+
+ // if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64
+ $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 96);
+
+ // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23
+ $ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);
+
+ return $ret;
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 5-bit integers
+ * into 8-bit integers.
+ *
+ * Uppercase variant.
+ *
+ * @param int $src
+ * @return int
+ */
+ protected static function decode5BitsUpper(int $src): int
+ {
+ $ret = -1;
+
+ // if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64
+ $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);
+
+ // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23
+ $ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);
+
+ return $ret;
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 8-bit integers
+ * into 5-bit integers.
+ *
+ * @param int $src
+ * @return string
+ */
+ protected static function encode5Bits(int $src): string
+ {
+ $diff = 0x61;
+
+ // if ($src > 25) $ret -= 72;
+ $diff -= ((25 - $src) >> 8) & 73;
+
+ return \pack('C', $src + $diff);
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 8-bit integers
+ * into 5-bit integers.
+ *
+ * Uppercase variant.
+ *
+ * @param int $src
+ * @return string
+ */
+ protected static function encode5BitsUpper(int $src): string
+ {
+ $diff = 0x41;
+
+ // if ($src > 25) $ret -= 40;
+ $diff -= ((25 - $src) >> 8) & 41;
+
+ return \pack('C', $src + $diff);
+ }
+
+ /**
+ * @param string $encodedString
+ * @param bool $upper
+ * @return string
+ */
+ public static function decodeNoPadding(string $encodedString, bool $upper = false): string
+ {
+ $srcLen = Binary::safeStrlen($encodedString);
+ if ($srcLen === 0) {
+ return '';
+ }
+ if (($srcLen & 7) === 0) {
+ for ($j = 0; $j < 7 && $j < $srcLen; ++$j) {
+ if ($encodedString[$srcLen - $j - 1] === '=') {
+ throw new InvalidArgumentException(
+ "decodeNoPadding() doesn't tolerate padding"
+ );
+ }
+ }
+ }
+ return static::doDecode(
+ $encodedString,
+ $upper,
+ true
+ );
+ }
+
+ /**
+ * Base32 decoding
+ *
+ * @param string $src
+ * @param bool $upper
+ * @param bool $strictPadding
+ * @return string
+ *
+ * @throws TypeError
+ * @psalm-suppress RedundantCondition
+ */
+ protected static function doDecode(
+ string $src,
+ bool $upper = false,
+ bool $strictPadding = false
+ ): string {
+ // We do this to reduce code duplication:
+ $method = $upper
+ ? 'decode5BitsUpper'
+ : 'decode5Bits';
+
+ // Remove padding
+ $srcLen = Binary::safeStrlen($src);
+ if ($srcLen === 0) {
+ return '';
+ }
+ if ($strictPadding) {
+ if (($srcLen & 7) === 0) {
+ for ($j = 0; $j < 7; ++$j) {
+ if ($src[$srcLen - 1] === '=') {
+ $srcLen--;
+ } else {
+ break;
+ }
+ }
+ }
+ if (($srcLen & 7) === 1) {
+ throw new RangeException(
+ 'Incorrect padding'
+ );
+ }
+ } else {
+ $src = \rtrim($src, '=');
+ $srcLen = Binary::safeStrlen($src);
+ }
+
+ $err = 0;
+ $dest = '';
+ // Main loop (no padding):
+ for ($i = 0; $i + 8 <= $srcLen; $i += 8) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C*', Binary::safeSubstr($src, $i, 8));
+ /** @var int $c0 */
+ $c0 = static::$method($chunk[1]);
+ /** @var int $c1 */
+ $c1 = static::$method($chunk[2]);
+ /** @var int $c2 */
+ $c2 = static::$method($chunk[3]);
+ /** @var int $c3 */
+ $c3 = static::$method($chunk[4]);
+ /** @var int $c4 */
+ $c4 = static::$method($chunk[5]);
+ /** @var int $c5 */
+ $c5 = static::$method($chunk[6]);
+ /** @var int $c6 */
+ $c6 = static::$method($chunk[7]);
+ /** @var int $c7 */
+ $c7 = static::$method($chunk[8]);
+
+ $dest .= \pack(
+ 'CCCCC',
+ (($c0 << 3) | ($c1 >> 2) ) & 0xff,
+ (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
+ (($c3 << 4) | ($c4 >> 1) ) & 0xff,
+ (($c4 << 7) | ($c5 << 2) | ($c6 >> 3)) & 0xff,
+ (($c6 << 5) | ($c7 ) ) & 0xff
+ );
+ $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5 | $c6 | $c7) >> 8;
+ }
+ // The last chunk, which may have padding:
+ if ($i < $srcLen) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C*', Binary::safeSubstr($src, $i, $srcLen - $i));
+ /** @var int $c0 */
+ $c0 = static::$method($chunk[1]);
+
+ if ($i + 6 < $srcLen) {
+ /** @var int $c1 */
+ $c1 = static::$method($chunk[2]);
+ /** @var int $c2 */
+ $c2 = static::$method($chunk[3]);
+ /** @var int $c3 */
+ $c3 = static::$method($chunk[4]);
+ /** @var int $c4 */
+ $c4 = static::$method($chunk[5]);
+ /** @var int $c5 */
+ $c5 = static::$method($chunk[6]);
+ /** @var int $c6 */
+ $c6 = static::$method($chunk[7]);
+
+ $dest .= \pack(
+ 'CCCC',
+ (($c0 << 3) | ($c1 >> 2) ) & 0xff,
+ (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
+ (($c3 << 4) | ($c4 >> 1) ) & 0xff,
+ (($c4 << 7) | ($c5 << 2) | ($c6 >> 3)) & 0xff
+ );
+ $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5 | $c6) >> 8;
+ if ($strictPadding) {
+ $err |= ($c6 << 5) & 0xff;
+ }
+ } elseif ($i + 5 < $srcLen) {
+ /** @var int $c1 */
+ $c1 = static::$method($chunk[2]);
+ /** @var int $c2 */
+ $c2 = static::$method($chunk[3]);
+ /** @var int $c3 */
+ $c3 = static::$method($chunk[4]);
+ /** @var int $c4 */
+ $c4 = static::$method($chunk[5]);
+ /** @var int $c5 */
+ $c5 = static::$method($chunk[6]);
+
+ $dest .= \pack(
+ 'CCCC',
+ (($c0 << 3) | ($c1 >> 2) ) & 0xff,
+ (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
+ (($c3 << 4) | ($c4 >> 1) ) & 0xff,
+ (($c4 << 7) | ($c5 << 2) ) & 0xff
+ );
+ $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5) >> 8;
+ } elseif ($i + 4 < $srcLen) {
+ /** @var int $c1 */
+ $c1 = static::$method($chunk[2]);
+ /** @var int $c2 */
+ $c2 = static::$method($chunk[3]);
+ /** @var int $c3 */
+ $c3 = static::$method($chunk[4]);
+ /** @var int $c4 */
+ $c4 = static::$method($chunk[5]);
+
+ $dest .= \pack(
+ 'CCC',
+ (($c0 << 3) | ($c1 >> 2) ) & 0xff,
+ (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
+ (($c3 << 4) | ($c4 >> 1) ) & 0xff
+ );
+ $err |= ($c0 | $c1 | $c2 | $c3 | $c4) >> 8;
+ if ($strictPadding) {
+ $err |= ($c4 << 7) & 0xff;
+ }
+ } elseif ($i + 3 < $srcLen) {
+ /** @var int $c1 */
+ $c1 = static::$method($chunk[2]);
+ /** @var int $c2 */
+ $c2 = static::$method($chunk[3]);
+ /** @var int $c3 */
+ $c3 = static::$method($chunk[4]);
+
+ $dest .= \pack(
+ 'CC',
+ (($c0 << 3) | ($c1 >> 2) ) & 0xff,
+ (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff
+ );
+ $err |= ($c0 | $c1 | $c2 | $c3) >> 8;
+ if ($strictPadding) {
+ $err |= ($c3 << 4) & 0xff;
+ }
+ } elseif ($i + 2 < $srcLen) {
+ /** @var int $c1 */
+ $c1 = static::$method($chunk[2]);
+ /** @var int $c2 */
+ $c2 = static::$method($chunk[3]);
+
+ $dest .= \pack(
+ 'CC',
+ (($c0 << 3) | ($c1 >> 2) ) & 0xff,
+ (($c1 << 6) | ($c2 << 1) ) & 0xff
+ );
+ $err |= ($c0 | $c1 | $c2) >> 8;
+ if ($strictPadding) {
+ $err |= ($c2 << 6) & 0xff;
+ }
+ } elseif ($i + 1 < $srcLen) {
+ /** @var int $c1 */
+ $c1 = static::$method($chunk[2]);
+
+ $dest .= \pack(
+ 'C',
+ (($c0 << 3) | ($c1 >> 2) ) & 0xff
+ );
+ $err |= ($c0 | $c1) >> 8;
+ if ($strictPadding) {
+ $err |= ($c1 << 6) & 0xff;
+ }
+ } else {
+ $dest .= \pack(
+ 'C',
+ (($c0 << 3) ) & 0xff
+ );
+ $err |= ($c0) >> 8;
+ }
+ }
+ $check = ($err === 0);
+ if (!$check) {
+ throw new RangeException(
+ 'Base32::doDecode() only expects characters in the correct base32 alphabet'
+ );
+ }
+ return $dest;
+ }
+
+ /**
+ * Base32 Encoding
+ *
+ * @param string $src
+ * @param bool $upper
+ * @param bool $pad
+ * @return string
+ * @throws TypeError
+ */
+ protected static function doEncode(string $src, bool $upper = false, $pad = true): string
+ {
+ // We do this to reduce code duplication:
+ $method = $upper
+ ? 'encode5BitsUpper'
+ : 'encode5Bits';
+
+ $dest = '';
+ $srcLen = Binary::safeStrlen($src);
+
+ // Main loop (no padding):
+ for ($i = 0; $i + 5 <= $srcLen; $i += 5) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C*', Binary::safeSubstr($src, $i, 5));
+ $b0 = $chunk[1];
+ $b1 = $chunk[2];
+ $b2 = $chunk[3];
+ $b3 = $chunk[4];
+ $b4 = $chunk[5];
+ $dest .=
+ static::$method( ($b0 >> 3) & 31) .
+ static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
+ static::$method((($b1 >> 1) ) & 31) .
+ static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .
+ static::$method((($b2 << 1) | ($b3 >> 7)) & 31) .
+ static::$method((($b3 >> 2) ) & 31) .
+ static::$method((($b3 << 3) | ($b4 >> 5)) & 31) .
+ static::$method( $b4 & 31);
+ }
+ // The last chunk, which may have padding:
+ if ($i < $srcLen) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C*', Binary::safeSubstr($src, $i, $srcLen - $i));
+ $b0 = $chunk[1];
+ if ($i + 3 < $srcLen) {
+ $b1 = $chunk[2];
+ $b2 = $chunk[3];
+ $b3 = $chunk[4];
+ $dest .=
+ static::$method( ($b0 >> 3) & 31) .
+ static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
+ static::$method((($b1 >> 1) ) & 31) .
+ static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .
+ static::$method((($b2 << 1) | ($b3 >> 7)) & 31) .
+ static::$method((($b3 >> 2) ) & 31) .
+ static::$method((($b3 << 3) ) & 31);
+ if ($pad) {
+ $dest .= '=';
+ }
+ } elseif ($i + 2 < $srcLen) {
+ $b1 = $chunk[2];
+ $b2 = $chunk[3];
+ $dest .=
+ static::$method( ($b0 >> 3) & 31) .
+ static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
+ static::$method((($b1 >> 1) ) & 31) .
+ static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .
+ static::$method((($b2 << 1) ) & 31);
+ if ($pad) {
+ $dest .= '===';
+ }
+ } elseif ($i + 1 < $srcLen) {
+ $b1 = $chunk[2];
+ $dest .=
+ static::$method( ($b0 >> 3) & 31) .
+ static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
+ static::$method((($b1 >> 1) ) & 31) .
+ static::$method((($b1 << 4) ) & 31);
+ if ($pad) {
+ $dest .= '====';
+ }
+ } else {
+ $dest .=
+ static::$method( ($b0 >> 3) & 31) .
+ static::$method( ($b0 << 2) & 31);
+ if ($pad) {
+ $dest .= '======';
+ }
+ }
+ }
+ return $dest;
+ }
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/Base32Hex.php b/vendor/paragonie/constant_time_encoding/src/Base32Hex.php
new file mode 100644
index 000000000..b868dd048
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/Base32Hex.php
@@ -0,0 +1,111 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class Base32Hex
+ * [0-9][A-V]
+ *
+ * @package ParagonIE\ConstantTime
+ */
+abstract class Base32Hex extends Base32
+{
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 5-bit integers
+ * into 8-bit integers.
+ *
+ * @param int $src
+ * @return int
+ */
+ protected static function decode5Bits(int $src): int
+ {
+ $ret = -1;
+
+ // if ($src > 0x30 && $src < 0x3a) ret += $src - 0x2e + 1; // -47
+ $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src - 47);
+
+ // if ($src > 0x60 && $src < 0x77) ret += $src - 0x61 + 10 + 1; // -86
+ $ret += (((0x60 - $src) & ($src - 0x77)) >> 8) & ($src - 86);
+
+ return $ret;
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 5-bit integers
+ * into 8-bit integers.
+ *
+ * @param int $src
+ * @return int
+ */
+ protected static function decode5BitsUpper(int $src): int
+ {
+ $ret = -1;
+
+ // if ($src > 0x30 && $src < 0x3a) ret += $src - 0x2e + 1; // -47
+ $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src - 47);
+
+ // if ($src > 0x40 && $src < 0x57) ret += $src - 0x41 + 10 + 1; // -54
+ $ret += (((0x40 - $src) & ($src - 0x57)) >> 8) & ($src - 54);
+
+ return $ret;
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 8-bit integers
+ * into 5-bit integers.
+ *
+ * @param int $src
+ * @return string
+ */
+ protected static function encode5Bits(int $src): string
+ {
+ $src += 0x30;
+
+ // if ($src > 0x39) $src += 0x61 - 0x3a; // 39
+ $src += ((0x39 - $src) >> 8) & 39;
+
+ return \pack('C', $src);
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 8-bit integers
+ * into 5-bit integers.
+ *
+ * Uppercase variant.
+ *
+ * @param int $src
+ * @return string
+ */
+ protected static function encode5BitsUpper(int $src): string
+ {
+ $src += 0x30;
+
+ // if ($src > 0x39) $src += 0x41 - 0x3a; // 7
+ $src += ((0x39 - $src) >> 8) & 7;
+
+ return \pack('C', $src);
+ }
+} \ No newline at end of file
diff --git a/vendor/paragonie/constant_time_encoding/src/Base64.php b/vendor/paragonie/constant_time_encoding/src/Base64.php
new file mode 100644
index 000000000..f5716179f
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/Base64.php
@@ -0,0 +1,314 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+use InvalidArgumentException;
+use RangeException;
+use TypeError;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class Base64
+ * [A-Z][a-z][0-9]+/
+ *
+ * @package ParagonIE\ConstantTime
+ */
+abstract class Base64 implements EncoderInterface
+{
+ /**
+ * Encode into Base64
+ *
+ * Base64 character set "[A-Z][a-z][0-9]+/"
+ *
+ * @param string $binString
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function encode(string $binString): string
+ {
+ return static::doEncode($binString, true);
+ }
+
+ /**
+ * Encode into Base64, no = padding
+ *
+ * Base64 character set "[A-Z][a-z][0-9]+/"
+ *
+ * @param string $src
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function encodeUnpadded(string $src): string
+ {
+ return static::doEncode($src, false);
+ }
+
+ /**
+ * @param string $src
+ * @param bool $pad Include = padding?
+ * @return string
+ *
+ * @throws TypeError
+ */
+ protected static function doEncode(string $src, bool $pad = true): string
+ {
+ $dest = '';
+ $srcLen = Binary::safeStrlen($src);
+ // Main loop (no padding):
+ for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C*', Binary::safeSubstr($src, $i, 3));
+ $b0 = $chunk[1];
+ $b1 = $chunk[2];
+ $b2 = $chunk[3];
+
+ $dest .=
+ static::encode6Bits( $b0 >> 2 ) .
+ static::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
+ static::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
+ static::encode6Bits( $b2 & 63);
+ }
+ // The last chunk, which may have padding:
+ if ($i < $srcLen) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C*', Binary::safeSubstr($src, $i, $srcLen - $i));
+ $b0 = $chunk[1];
+ if ($i + 1 < $srcLen) {
+ $b1 = $chunk[2];
+ $dest .=
+ static::encode6Bits($b0 >> 2) .
+ static::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
+ static::encode6Bits(($b1 << 2) & 63);
+ if ($pad) {
+ $dest .= '=';
+ }
+ } else {
+ $dest .=
+ static::encode6Bits( $b0 >> 2) .
+ static::encode6Bits(($b0 << 4) & 63);
+ if ($pad) {
+ $dest .= '==';
+ }
+ }
+ }
+ return $dest;
+ }
+
+ /**
+ * decode from base64 into binary
+ *
+ * Base64 character set "./[A-Z][a-z][0-9]"
+ *
+ * @param string $encodedString
+ * @param bool $strictPadding
+ * @return string
+ *
+ * @throws RangeException
+ * @throws TypeError
+ * @psalm-suppress RedundantCondition
+ */
+ public static function decode(string $encodedString, bool $strictPadding = false): string
+ {
+ // Remove padding
+ $srcLen = Binary::safeStrlen($encodedString);
+ if ($srcLen === 0) {
+ return '';
+ }
+
+ if ($strictPadding) {
+ if (($srcLen & 3) === 0) {
+ if ($encodedString[$srcLen - 1] === '=') {
+ $srcLen--;
+ if ($encodedString[$srcLen - 1] === '=') {
+ $srcLen--;
+ }
+ }
+ }
+ if (($srcLen & 3) === 1) {
+ throw new RangeException(
+ 'Incorrect padding'
+ );
+ }
+ if ($encodedString[$srcLen - 1] === '=') {
+ throw new RangeException(
+ 'Incorrect padding'
+ );
+ }
+ } else {
+ $encodedString = \rtrim($encodedString, '=');
+ $srcLen = Binary::safeStrlen($encodedString);
+ }
+
+ $err = 0;
+ $dest = '';
+ // Main loop (no padding):
+ for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C*', Binary::safeSubstr($encodedString, $i, 4));
+ $c0 = static::decode6Bits($chunk[1]);
+ $c1 = static::decode6Bits($chunk[2]);
+ $c2 = static::decode6Bits($chunk[3]);
+ $c3 = static::decode6Bits($chunk[4]);
+
+ $dest .= \pack(
+ 'CCC',
+ ((($c0 << 2) | ($c1 >> 4)) & 0xff),
+ ((($c1 << 4) | ($c2 >> 2)) & 0xff),
+ ((($c2 << 6) | $c3 ) & 0xff)
+ );
+ $err |= ($c0 | $c1 | $c2 | $c3) >> 8;
+ }
+ // The last chunk, which may have padding:
+ if ($i < $srcLen) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C*', Binary::safeSubstr($encodedString, $i, $srcLen - $i));
+ $c0 = static::decode6Bits($chunk[1]);
+
+ if ($i + 2 < $srcLen) {
+ $c1 = static::decode6Bits($chunk[2]);
+ $c2 = static::decode6Bits($chunk[3]);
+ $dest .= \pack(
+ 'CC',
+ ((($c0 << 2) | ($c1 >> 4)) & 0xff),
+ ((($c1 << 4) | ($c2 >> 2)) & 0xff)
+ );
+ $err |= ($c0 | $c1 | $c2) >> 8;
+ if ($strictPadding) {
+ $err |= ($c2 << 6) & 0xff;
+ }
+ } elseif ($i + 1 < $srcLen) {
+ $c1 = static::decode6Bits($chunk[2]);
+ $dest .= \pack(
+ 'C',
+ ((($c0 << 2) | ($c1 >> 4)) & 0xff)
+ );
+ $err |= ($c0 | $c1) >> 8;
+ if ($strictPadding) {
+ $err |= ($c1 << 4) & 0xff;
+ }
+ } elseif ($strictPadding) {
+ $err |= 1;
+ }
+ }
+ $check = ($err === 0);
+ if (!$check) {
+ throw new RangeException(
+ 'Base64::decode() only expects characters in the correct base64 alphabet'
+ );
+ }
+ return $dest;
+ }
+
+ /**
+ * @param string $encodedString
+ * @return string
+ */
+ public static function decodeNoPadding(string $encodedString): string
+ {
+ $srcLen = Binary::safeStrlen($encodedString);
+ if ($srcLen === 0) {
+ return '';
+ }
+ if (($srcLen & 3) === 0) {
+ if ($encodedString[$srcLen - 1] === '=') {
+ throw new InvalidArgumentException(
+ "decodeNoPadding() doesn't tolerate padding"
+ );
+ }
+ if (($srcLen & 3) > 1) {
+ if ($encodedString[$srcLen - 2] === '=') {
+ throw new InvalidArgumentException(
+ "decodeNoPadding() doesn't tolerate padding"
+ );
+ }
+ }
+ }
+ return static::decode(
+ $encodedString,
+ true
+ );
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 6-bit integers
+ * into 8-bit integers.
+ *
+ * Base64 character set:
+ * [A-Z] [a-z] [0-9] + /
+ * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
+ *
+ * @param int $src
+ * @return int
+ */
+ protected static function decode6Bits(int $src): int
+ {
+ $ret = -1;
+
+ // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
+ $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);
+
+ // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
+ $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);
+
+ // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
+ $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);
+
+ // if ($src == 0x2b) $ret += 62 + 1;
+ $ret += (((0x2a - $src) & ($src - 0x2c)) >> 8) & 63;
+
+ // if ($src == 0x2f) ret += 63 + 1;
+ $ret += (((0x2e - $src) & ($src - 0x30)) >> 8) & 64;
+
+ return $ret;
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 8-bit integers
+ * into 6-bit integers.
+ *
+ * @param int $src
+ * @return string
+ */
+ protected static function encode6Bits(int $src): string
+ {
+ $diff = 0x41;
+
+ // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
+ $diff += ((25 - $src) >> 8) & 6;
+
+ // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
+ $diff -= ((51 - $src) >> 8) & 75;
+
+ // if ($src > 61) $diff += 0x2b - 0x30 - 10; // -15
+ $diff -= ((61 - $src) >> 8) & 15;
+
+ // if ($src > 62) $diff += 0x2f - 0x2b - 1; // 3
+ $diff += ((62 - $src) >> 8) & 3;
+
+ return \pack('C', $src + $diff);
+ }
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php b/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php
new file mode 100644
index 000000000..5e98a8f79
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php
@@ -0,0 +1,88 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class Base64DotSlash
+ * ./[A-Z][a-z][0-9]
+ *
+ * @package ParagonIE\ConstantTime
+ */
+abstract class Base64DotSlash extends Base64
+{
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 6-bit integers
+ * into 8-bit integers.
+ *
+ * Base64 character set:
+ * ./ [A-Z] [a-z] [0-9]
+ * 0x2e-0x2f, 0x41-0x5a, 0x61-0x7a, 0x30-0x39
+ *
+ * @param int $src
+ * @return int
+ */
+ protected static function decode6Bits(int $src): int
+ {
+ $ret = -1;
+
+ // if ($src > 0x2d && $src < 0x30) ret += $src - 0x2e + 1; // -45
+ $ret += (((0x2d - $src) & ($src - 0x30)) >> 8) & ($src - 45);
+
+ // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 2 + 1; // -62
+ $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 62);
+
+ // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 28 + 1; // -68
+ $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 68);
+
+ // if ($src > 0x2f && $src < 0x3a) ret += $src - 0x30 + 54 + 1; // 7
+ $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 7);
+
+ return $ret;
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 8-bit integers
+ * into 6-bit integers.
+ *
+ * @param int $src
+ * @return string
+ */
+ protected static function encode6Bits(int $src): string
+ {
+ $src += 0x2e;
+
+ // if ($src > 0x2f) $src += 0x41 - 0x30; // 17
+ $src += ((0x2f - $src) >> 8) & 17;
+
+ // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6
+ $src += ((0x5a - $src) >> 8) & 6;
+
+ // if ($src > 0x7a) $src += 0x30 - 0x7b; // -75
+ $src -= ((0x7a - $src) >> 8) & 75;
+
+ return \pack('C', $src);
+ }
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php b/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php
new file mode 100644
index 000000000..9780b14bb
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php
@@ -0,0 +1,82 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class Base64DotSlashOrdered
+ * ./[0-9][A-Z][a-z]
+ *
+ * @package ParagonIE\ConstantTime
+ */
+abstract class Base64DotSlashOrdered extends Base64
+{
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 6-bit integers
+ * into 8-bit integers.
+ *
+ * Base64 character set:
+ * [.-9] [A-Z] [a-z]
+ * 0x2e-0x39, 0x41-0x5a, 0x61-0x7a
+ *
+ * @param int $src
+ * @return int
+ */
+ protected static function decode6Bits(int $src): int
+ {
+ $ret = -1;
+
+ // if ($src > 0x2d && $src < 0x3a) ret += $src - 0x2e + 1; // -45
+ $ret += (((0x2d - $src) & ($src - 0x3a)) >> 8) & ($src - 45);
+
+ // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 12 + 1; // -52
+ $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 52);
+
+ // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 38 + 1; // -58
+ $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 58);
+
+ return $ret;
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 8-bit integers
+ * into 6-bit integers.
+ *
+ * @param int $src
+ * @return string
+ */
+ protected static function encode6Bits(int $src): string
+ {
+ $src += 0x2e;
+
+ // if ($src > 0x39) $src += 0x41 - 0x3a; // 7
+ $src += ((0x39 - $src) >> 8) & 7;
+
+ // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6
+ $src += ((0x5a - $src) >> 8) & 6;
+
+ return \pack('C', $src);
+ }
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php b/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php
new file mode 100644
index 000000000..8192c63d5
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php
@@ -0,0 +1,95 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class Base64UrlSafe
+ * [A-Z][a-z][0-9]\-_
+ *
+ * @package ParagonIE\ConstantTime
+ */
+abstract class Base64UrlSafe extends Base64
+{
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 6-bit integers
+ * into 8-bit integers.
+ *
+ * Base64 character set:
+ * [A-Z] [a-z] [0-9] - _
+ * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2d, 0x5f
+ *
+ * @param int $src
+ * @return int
+ */
+ protected static function decode6Bits(int $src): int
+ {
+ $ret = -1;
+
+ // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
+ $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);
+
+ // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
+ $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);
+
+ // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
+ $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);
+
+ // if ($src == 0x2c) $ret += 62 + 1;
+ $ret += (((0x2c - $src) & ($src - 0x2e)) >> 8) & 63;
+
+ // if ($src == 0x5f) ret += 63 + 1;
+ $ret += (((0x5e - $src) & ($src - 0x60)) >> 8) & 64;
+
+ return $ret;
+ }
+
+ /**
+ * Uses bitwise operators instead of table-lookups to turn 8-bit integers
+ * into 6-bit integers.
+ *
+ * @param int $src
+ * @return string
+ */
+ protected static function encode6Bits(int $src): string
+ {
+ $diff = 0x41;
+
+ // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
+ $diff += ((25 - $src) >> 8) & 6;
+
+ // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
+ $diff -= ((51 - $src) >> 8) & 75;
+
+ // if ($src > 61) $diff += 0x2d - 0x30 - 10; // -13
+ $diff -= ((61 - $src) >> 8) & 13;
+
+ // if ($src > 62) $diff += 0x5f - 0x2b - 1; // 3
+ $diff += ((62 - $src) >> 8) & 49;
+
+ return \pack('C', $src + $diff);
+ }
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/Binary.php b/vendor/paragonie/constant_time_encoding/src/Binary.php
new file mode 100644
index 000000000..828f3e0f6
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/Binary.php
@@ -0,0 +1,90 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+use TypeError;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class Binary
+ *
+ * Binary string operators that don't choke on
+ * mbstring.func_overload
+ *
+ * @package ParagonIE\ConstantTime
+ */
+abstract class Binary
+{
+ /**
+ * Safe string length
+ *
+ * @ref mbstring.func_overload
+ *
+ * @param string $str
+ * @return int
+ */
+ public static function safeStrlen(string $str): int
+ {
+ if (\function_exists('mb_strlen')) {
+ // mb_strlen in PHP 7.x can return false.
+ /** @psalm-suppress RedundantCast */
+ return (int) \mb_strlen($str, '8bit');
+ } else {
+ return \strlen($str);
+ }
+ }
+
+ /**
+ * Safe substring
+ *
+ * @ref mbstring.func_overload
+ *
+ * @staticvar boolean $exists
+ * @param string $str
+ * @param int $start
+ * @param ?int $length
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function safeSubstr(
+ string $str,
+ int $start = 0,
+ $length = null
+ ): string {
+ if ($length === 0) {
+ return '';
+ }
+ if (\function_exists('mb_substr')) {
+ return \mb_substr($str, $start, $length, '8bit');
+ }
+ // Unlike mb_substr(), substr() doesn't accept NULL for length
+ if ($length !== null) {
+ return \substr($str, $start, $length);
+ } else {
+ return \substr($str, $start);
+ }
+ }
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/EncoderInterface.php b/vendor/paragonie/constant_time_encoding/src/EncoderInterface.php
new file mode 100644
index 000000000..9cafbf96c
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/EncoderInterface.php
@@ -0,0 +1,52 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Interface EncoderInterface
+ * @package ParagonIE\ConstantTime
+ */
+interface EncoderInterface
+{
+ /**
+ * Convert a binary string into a hexadecimal string without cache-timing
+ * leaks
+ *
+ * @param string $binString (raw binary)
+ * @return string
+ */
+ public static function encode(string $binString): string;
+
+ /**
+ * Convert a binary string into a hexadecimal string without cache-timing
+ * leaks
+ *
+ * @param string $encodedString
+ * @param bool $strictPadding Error on invalid padding
+ * @return string (raw binary)
+ */
+ public static function decode(string $encodedString, bool $strictPadding = false): string;
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/Encoding.php b/vendor/paragonie/constant_time_encoding/src/Encoding.php
new file mode 100644
index 000000000..8649f31fc
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/Encoding.php
@@ -0,0 +1,262 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+use TypeError;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class Encoding
+ * @package ParagonIE\ConstantTime
+ */
+abstract class Encoding
+{
+ /**
+ * RFC 4648 Base32 encoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base32Encode(string $str): string
+ {
+ return Base32::encode($str);
+ }
+
+ /**
+ * RFC 4648 Base32 encoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base32EncodeUpper(string $str): string
+ {
+ return Base32::encodeUpper($str);
+ }
+
+ /**
+ * RFC 4648 Base32 decoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base32Decode(string $str): string
+ {
+ return Base32::decode($str);
+ }
+
+ /**
+ * RFC 4648 Base32 decoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base32DecodeUpper(string $str): string
+ {
+ return Base32::decodeUpper($str);
+ }
+
+ /**
+ * RFC 4648 Base32 encoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base32HexEncode(string $str): string
+ {
+ return Base32Hex::encode($str);
+ }
+
+ /**
+ * RFC 4648 Base32Hex encoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base32HexEncodeUpper(string $str): string
+ {
+ return Base32Hex::encodeUpper($str);
+ }
+
+ /**
+ * RFC 4648 Base32Hex decoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base32HexDecode(string $str): string
+ {
+ return Base32Hex::decode($str);
+ }
+
+ /**
+ * RFC 4648 Base32Hex decoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base32HexDecodeUpper(string $str): string
+ {
+ return Base32Hex::decodeUpper($str);
+ }
+
+ /**
+ * RFC 4648 Base64 encoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base64Encode(string $str): string
+ {
+ return Base64::encode($str);
+ }
+
+ /**
+ * RFC 4648 Base64 decoding
+ *
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base64Decode(string $str): string
+ {
+ return Base64::decode($str);
+ }
+
+ /**
+ * Encode into Base64
+ *
+ * Base64 character set "./[A-Z][a-z][0-9]"
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base64EncodeDotSlash(string $str): string
+ {
+ return Base64DotSlash::encode($str);
+ }
+
+ /**
+ * Decode from base64 to raw binary
+ *
+ * Base64 character set "./[A-Z][a-z][0-9]"
+ *
+ * @param string $str
+ * @return string
+ * @throws \RangeException
+ * @throws TypeError
+ */
+ public static function base64DecodeDotSlash(string $str): string
+ {
+ return Base64DotSlash::decode($str);
+ }
+
+ /**
+ * Encode into Base64
+ *
+ * Base64 character set "[.-9][A-Z][a-z]" or "./[0-9][A-Z][a-z]"
+ * @param string $str
+ * @return string
+ * @throws TypeError
+ */
+ public static function base64EncodeDotSlashOrdered(string $str): string
+ {
+ return Base64DotSlashOrdered::encode($str);
+ }
+
+ /**
+ * Decode from base64 to raw binary
+ *
+ * Base64 character set "[.-9][A-Z][a-z]" or "./[0-9][A-Z][a-z]"
+ *
+ * @param string $str
+ * @return string
+ * @throws \RangeException
+ * @throws TypeError
+ */
+ public static function base64DecodeDotSlashOrdered(string $str): string
+ {
+ return Base64DotSlashOrdered::decode($str);
+ }
+
+ /**
+ * Convert a binary string into a hexadecimal string without cache-timing
+ * leaks
+ *
+ * @param string $bin_string (raw binary)
+ * @return string
+ * @throws TypeError
+ */
+ public static function hexEncode(string $bin_string): string
+ {
+ return Hex::encode($bin_string);
+ }
+
+ /**
+ * Convert a hexadecimal string into a binary string without cache-timing
+ * leaks
+ *
+ * @param string $hex_string
+ * @return string (raw binary)
+ * @throws \RangeException
+ */
+ public static function hexDecode(string $hex_string): string
+ {
+ return Hex::decode($hex_string);
+ }
+
+ /**
+ * Convert a binary string into a hexadecimal string without cache-timing
+ * leaks
+ *
+ * @param string $bin_string (raw binary)
+ * @return string
+ * @throws TypeError
+ */
+ public static function hexEncodeUpper(string $bin_string): string
+ {
+ return Hex::encodeUpper($bin_string);
+ }
+
+ /**
+ * Convert a binary string into a hexadecimal string without cache-timing
+ * leaks
+ *
+ * @param string $bin_string (raw binary)
+ * @return string
+ */
+ public static function hexDecodeUpper(string $bin_string): string
+ {
+ return Hex::decode($bin_string);
+ }
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/Hex.php b/vendor/paragonie/constant_time_encoding/src/Hex.php
new file mode 100644
index 000000000..a9e058cd3
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/Hex.php
@@ -0,0 +1,146 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+use RangeException;
+use TypeError;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class Hex
+ * @package ParagonIE\ConstantTime
+ */
+abstract class Hex implements EncoderInterface
+{
+ /**
+ * Convert a binary string into a hexadecimal string without cache-timing
+ * leaks
+ *
+ * @param string $binString (raw binary)
+ * @return string
+ * @throws TypeError
+ */
+ public static function encode(string $binString): string
+ {
+ $hex = '';
+ $len = Binary::safeStrlen($binString);
+ for ($i = 0; $i < $len; ++$i) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C', $binString[$i]);
+ $c = $chunk[1] & 0xf;
+ $b = $chunk[1] >> 4;
+
+ $hex .= \pack(
+ 'CC',
+ (87 + $b + ((($b - 10) >> 8) & ~38)),
+ (87 + $c + ((($c - 10) >> 8) & ~38))
+ );
+ }
+ return $hex;
+ }
+
+ /**
+ * Convert a binary string into a hexadecimal string without cache-timing
+ * leaks, returning uppercase letters (as per RFC 4648)
+ *
+ * @param string $binString (raw binary)
+ * @return string
+ * @throws TypeError
+ */
+ public static function encodeUpper(string $binString): string
+ {
+ $hex = '';
+ $len = Binary::safeStrlen($binString);
+
+ for ($i = 0; $i < $len; ++$i) {
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C', $binString[$i]);
+ $c = $chunk[1] & 0xf;
+ $b = $chunk[1] >> 4;
+
+ $hex .= \pack(
+ 'CC',
+ (55 + $b + ((($b - 10) >> 8) & ~6)),
+ (55 + $c + ((($c - 10) >> 8) & ~6))
+ );
+ }
+ return $hex;
+ }
+
+ /**
+ * Convert a hexadecimal string into a binary string without cache-timing
+ * leaks
+ *
+ * @param string $encodedString
+ * @param bool $strictPadding
+ * @return string (raw binary)
+ * @throws RangeException
+ */
+ public static function decode(
+ string $encodedString,
+ bool $strictPadding = false
+ ): string {
+ $hex_pos = 0;
+ $bin = '';
+ $c_acc = 0;
+ $hex_len = Binary::safeStrlen($encodedString);
+ $state = 0;
+ if (($hex_len & 1) !== 0) {
+ if ($strictPadding) {
+ throw new RangeException(
+ 'Expected an even number of hexadecimal characters'
+ );
+ } else {
+ $encodedString = '0' . $encodedString;
+ ++$hex_len;
+ }
+ }
+
+ /** @var array<int, int> $chunk */
+ $chunk = \unpack('C*', $encodedString);
+ while ($hex_pos < $hex_len) {
+ ++$hex_pos;
+ $c = $chunk[$hex_pos];
+ $c_num = $c ^ 48;
+ $c_num0 = ($c_num - 10) >> 8;
+ $c_alpha = ($c & ~32) - 55;
+ $c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8;
+
+ if (($c_num0 | $c_alpha0) === 0) {
+ throw new RangeException(
+ 'Expected hexadecimal character'
+ );
+ }
+ $c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0);
+ if ($state === 0) {
+ $c_acc = $c_val * 16;
+ } else {
+ $bin .= \pack('C', $c_acc | $c_val);
+ }
+ $state ^= 1;
+ }
+ return $bin;
+ }
+}
diff --git a/vendor/paragonie/constant_time_encoding/src/RFC4648.php b/vendor/paragonie/constant_time_encoding/src/RFC4648.php
new file mode 100644
index 000000000..f124d65bf
--- /dev/null
+++ b/vendor/paragonie/constant_time_encoding/src/RFC4648.php
@@ -0,0 +1,186 @@
+<?php
+declare(strict_types=1);
+namespace ParagonIE\ConstantTime;
+
+use TypeError;
+
+/**
+ * Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
+ * Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
+ *
+ * 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.
+ */
+
+/**
+ * Class RFC4648
+ *
+ * This class conforms strictly to the RFC
+ *
+ * @package ParagonIE\ConstantTime
+ */
+abstract class RFC4648
+{
+ /**
+ * RFC 4648 Base64 encoding
+ *
+ * "foo" -> "Zm9v"
+ *
+ * @param string $str
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function base64Encode(string $str): string
+ {
+ return Base64::encode($str);
+ }
+
+ /**
+ * RFC 4648 Base64 decoding
+ *
+ * "Zm9v" -> "foo"
+ *
+ * @param string $str
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function base64Decode(string $str): string
+ {
+ return Base64::decode($str, true);
+ }
+
+ /**
+ * RFC 4648 Base64 (URL Safe) encoding
+ *
+ * "foo" -> "Zm9v"
+ *
+ * @param string $str
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function base64UrlSafeEncode(string $str): string
+ {
+ return Base64UrlSafe::encode($str);
+ }
+
+ /**
+ * RFC 4648 Base64 (URL Safe) decoding
+ *
+ * "Zm9v" -> "foo"
+ *
+ * @param string $str
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function base64UrlSafeDecode(string $str): string
+ {
+ return Base64UrlSafe::decode($str, true);
+ }
+
+ /**
+ * RFC 4648 Base32 encoding
+ *
+ * "foo" -> "MZXW6==="
+ *
+ * @param string $str
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function base32Encode(string $str): string
+ {
+ return Base32::encodeUpper($str);
+ }
+
+ /**
+ * RFC 4648 Base32 encoding
+ *
+ * "MZXW6===" -> "foo"
+ *
+ * @param string $str
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function base32Decode(string $str): string
+ {
+ return Base32::decodeUpper($str, true);
+ }
+
+ /**
+ * RFC 4648 Base32-Hex encoding
+ *
+ * "foo" -> "CPNMU==="
+ *
+ * @param string $str
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function base32HexEncode(string $str): string
+ {
+ return Base32::encodeUpper($str);
+ }
+
+ /**
+ * RFC 4648 Base32-Hex decoding
+ *
+ * "CPNMU===" -> "foo"
+ *
+ * @param string $str
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function base32HexDecode(string $str): string
+ {
+ return Base32::decodeUpper($str, true);
+ }
+
+ /**
+ * RFC 4648 Base16 decoding
+ *
+ * "foo" -> "666F6F"
+ *
+ * @param string $str
+ * @return string
+ *
+ * @throws TypeError
+ */
+ public static function base16Encode(string $str): string
+ {
+ return Hex::encodeUpper($str);
+ }
+
+ /**
+ * RFC 4648 Base16 decoding
+ *
+ * "666F6F" -> "foo"
+ *
+ * @param string $str
+ * @return string
+ */
+ public static function base16Decode(string $str): string
+ {
+ return Hex::decode($str, true);
+ }
+} \ No newline at end of file
diff --git a/vendor/simplepie/simplepie/.php-cs-fixer.dist.php b/vendor/simplepie/simplepie/.php-cs-fixer.dist.php
index 97d39cbcd..d26f7c6c6 100644
--- a/vendor/simplepie/simplepie/.php-cs-fixer.dist.php
+++ b/vendor/simplepie/simplepie/.php-cs-fixer.dist.php
@@ -2,7 +2,6 @@
$finder = (new PhpCsFixer\Finder())
->in('build')
- ->in('demo')
->in('library')
->in('src')
->in('tests')
@@ -11,9 +10,10 @@ $finder = (new PhpCsFixer\Finder())
return (new PhpCsFixer\Config())
->setRules([
'@PSR12' => true,
- '@PHP54Migration' => true,
- // TODO: Allow `const` after bump requirements to PHP >=7.1
- 'visibility_required' => ['elements' => ['property', 'method', /* 'const' */]],
+ '@PHP71Migration' => true,
+ '@PHP71Migration:risky' => true,
+ 'void_return' => false,
+ '@PHPUnit84Migration:risky' => true,
])
->setFinder($finder)
;
diff --git a/vendor/simplepie/simplepie/CHANGELOG.md b/vendor/simplepie/simplepie/CHANGELOG.md
index 18d8c3f1f..dba92bbf7 100644
--- a/vendor/simplepie/simplepie/CHANGELOG.md
+++ b/vendor/simplepie/simplepie/CHANGELOG.md
@@ -5,7 +5,58 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## [Unreleased](https://github.com/simplepie/simplepie/compare/1.7.0...master)
+## [Unreleased](https://github.com/simplepie/simplepie/compare/1.8.0...master)
+
+## [1.8.0](https://github.com/simplepie/simplepie/compare/1.7.0...1.8.0) - 2023-01-20
+
+### Added
+
+- New method `SimplePie\SimplePie::set_cache()` for providing a PSR-16 cache implementation by @Art4 in [#742](https://github.com/simplepie/simplepie/pull/742)
+- New method `SimplePie\SimplePie::set_cache_namefilter()` for customize the cache key in [#762](https://github.com/simplepie/simplepie/pull/762)
+- New class `SimplePie\Cache\CallableNameFilter` to provide a `callable` to customize the cache key in [#762](https://github.com/simplepie/simplepie/pull/762)
+- New interface `SimplePie\RegistryAware` to inject the `Registry` instance into classes created by `Registry` by @Art4 in [#760](https://github.com/simplepie/simplepie/pull/760)
+- update PHP versions in GH Actions workflows by @jrfnl in [#767](https://github.com/simplepie/simplepie/pull/767)
+- Registry: Allow using class-strings instead of magic strings by @jtojnar and @Art4 in [#766](https://github.com/simplepie/simplepie/pull/766)
+
+### Changed
+
+- Clarify branching strategy by @Art4 in [#751](https://github.com/simplepie/simplepie/pull/751)
+- Use native array_replace_recursive() by @Alkarex in [#749](https://github.com/simplepie/simplepie/pull/749)
+- PHP 7.2 or newer is now required by @Art4 in [#743](https://github.com/simplepie/simplepie/pull/743)
+- Parse\Date: Clean up regex structure by @jtojnar in [#765](https://github.com/simplepie/simplepie/pull/765)
+- Declare strict_types=1 in every file by @Art4 in [#763](https://github.com/simplepie/simplepie/pull/763)
+
+### Fixed
+
+- Item::get_date(): fix return type on unparsable date by @jtojnar in [#753](https://github.com/simplepie/simplepie/pull/753)
+- Fix error handling for PHP 8.1 by @cedric-anne in [#747](https://github.com/simplepie/simplepie/pull/747)
+- The method `SimplePie\SimplePie::get_image_height()` returns the pixel number as `int` instead of `float` by @Art4 in [#763](https://github.com/simplepie/simplepie/pull/763)
+- The method `SimplePie\SimplePie::get_image_width()` returns the pixel number as `int` instead of `float` by @Art4 in [#763](https://github.com/simplepie/simplepie/pull/763)
+- No URL Decode for enclosure links by @Alkarex in [#768](https://github.com/simplepie/simplepie/pull/768)
+- Sanitize thumbnail URL by @Alkarex in [#770](https://github.com/simplepie/simplepie/pull/770)
+- Fix case of multiple RSS2.0 enclosures by @Alkarex in [#769](https://github.com/simplepie/simplepie/pull/769)
+- Fix broken phpdoc references by @jtojnar in [#771](https://github.com/simplepie/simplepie/pull/771)
+
+### Deprecated
+
+- The method `SimplePie\Misc::array_merge_recursive()` is deprecated, use native `array_replace_recursive()` instead
+- The method `SimplePie\SimplePie::set_cache_name_function()` is deprecated, use `SimplePie\SimplePie::set_cache_namefilter()` instead
+- The method `SimplePie\SimplePie::set_cache_location()` is deprecated, use `SimplePie\SimplePie::set_cache()` instead
+- The method `SimplePie\SimplePie::force_cache_fallback()` is deprecated, expired cache will not be used anymore
+- The class `SimplePie\Cache` is deprecated, use implementation of `SimplePie\SimplePie::set_cache()` instead
+- The class `SimplePie\Cache\DB` is deprecated, use implementation of `Psr\SimpleCache\CacheInterface` instead
+- The class `SimplePie\Cache\File` is deprecated, use implementation of `Psr\SimpleCache\CacheInterface` instead
+- The class `SimplePie\Cache\Memcache` is deprecated, use implementation of `Psr\SimpleCache\CacheInterface` instead
+- The class `SimplePie\Cache\Memcached` is deprecated, use implementation of `Psr\SimpleCache\CacheInterface` instead
+- The class `SimplePie\Cache\MySQL` is deprecated, use implementation of `Psr\SimpleCache\CacheInterface` instead
+- The class `SimplePie\Cache\Redis` is deprecated, use implementation of `Psr\SimpleCache\CacheInterface` instead
+- The interface `SimplePie\Cache\Base` is deprecated, use interface `Psr\SimpleCache\CacheInterface` instead
+
+### Removed
+
+- ROADMAP.md removed by @Art4 in [#748](https://github.com/simplepie/simplepie/pull/748)
+- remove check for E_USER_DEPRECATED definition by @Art4 in [#750](https://github.com/simplepie/simplepie/pull/750)
+- remove broken BC code in Registry by @Art4 in [#764](https://github.com/simplepie/simplepie/pull/764)
## [1.7.0](https://github.com/simplepie/simplepie/compare/1.6.0...1.7.0) - 2022-09-30
diff --git a/vendor/simplepie/simplepie/README.markdown b/vendor/simplepie/simplepie/README.markdown
index ca982cabe..5500f03c2 100644
--- a/vendor/simplepie/simplepie/README.markdown
+++ b/vendor/simplepie/simplepie/README.markdown
@@ -11,7 +11,7 @@ compatibility and standards compliance][what_is].
Requirements
------------
-* PHP 5.6+ (Required since SimplePie 1.5.3)
+* PHP 7.2+ (Required since SimplePie 1.8.0)
* libxml2 (certain 2.7.x releases are too buggy for words, and will crash)
* One of iconv, mbstring or intl extensions
* cURL or fsockopen()
@@ -75,9 +75,20 @@ to be prioritized.
If you'd like to contribute to SimplePie, the best way to get started is to fork
the project on GitHub and send pull requests for patches. When doing so, please
-be aware of our [coding standards][].
+be aware of our [coding standards](http://simplepie.org/wiki/misc/coding_standards).
-[coding standards]: http://simplepie.org/wiki/misc/coding_standards
+The main development for the next minor release happens in `master` branch.
+Please create your pull requests primarily against this branch.
+
+We do not actively provide bug fixes or security fixes for older versions. Nevertheless,
+you are welcome to create backport PRs if you still need support for older PHP versions.
+Please open your PR against the appropriate branch.
+
+| branch | requires |
+|----------------------------------------------------------------------------|-------------|
+| [master](https://github.com/simplepie/simplepie/tree/master) | PHP 7.2.0+ |
+| [one-dot-seven](https://github.com/simplepie/simplepie/tree/one-dot-seven) | PHP 5.6.0+ |
+| [one-dot-three](https://github.com/simplepie/simplepie/tree/one-dot-three) | PHP 5.2.0+ |
Authors and contributors
diff --git a/vendor/simplepie/simplepie/composer.json b/vendor/simplepie/simplepie/composer.json
index 71267ce0c..cfede2b53 100644
--- a/vendor/simplepie/simplepie/composer.json
+++ b/vendor/simplepie/simplepie/composer.json
@@ -24,13 +24,14 @@
}
],
"require": {
- "php": ">=5.6.0",
+ "php": ">=7.2.0",
"ext-pcre": "*",
"ext-xml": "*",
"ext-xmlreader": "*"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.19 || ^3.8",
+ "psr/simple-cache": "^1 || ^2 || ^3",
"yoast/phpunit-polyfills": "^1.0.1"
},
"suggest": {
diff --git a/vendor/simplepie/simplepie/library/SimplePie.php b/vendor/simplepie/simplepie/library/SimplePie.php
index 76c1c2213..8a2b334e1 100755
--- a/vendor/simplepie/simplepie/library/SimplePie.php
+++ b/vendor/simplepie/simplepie/library/SimplePie.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -46,10 +48,10 @@ use SimplePie\SimplePie as NamespacedSimplePie;
class_exists('SimplePie\SimplePie');
-// @trigger_error(sprintf('Using the "SimplePie" class is deprecated since SimplePie 1.7, use "SimplePie\SimplePie" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie" class is deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\SimplePie" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\SimplePie" instead */
class SimplePie extends NamespacedSimplePie
{
}
@@ -57,430 +59,430 @@ if (\false) {
/**
* SimplePie Name
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAME instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAME instead.
*/
define('SIMPLEPIE_NAME', NamespacedSimplePie::NAME);
/**
* SimplePie Version
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::VERSION instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::VERSION instead.
*/
define('SIMPLEPIE_VERSION', NamespacedSimplePie::VERSION);
/**
* SimplePie Build
* @todo Hardcode for release (there's no need to have to call SimplePie_Misc::get_build() only every load of simplepie.inc)
- * @deprecated since SimplePie 1.7, use \SimplePie\Misc::get_build() instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_build() instead.
*/
define('SIMPLEPIE_BUILD', gmdate('YmdHis', \SimplePie\Misc::get_build()));
/**
* SimplePie Website URL
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::URL instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::URL instead.
*/
define('SIMPLEPIE_URL', NamespacedSimplePie::URL);
/**
* SimplePie Useragent
* @see SimplePie::set_useragent()
- * @deprecated since SimplePie 1.7, use \SimplePie\Misc::get_default_useragent() instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\Misc::get_default_useragent() instead.
*/
define('SIMPLEPIE_USERAGENT', \SimplePie\Misc::get_default_useragent());
/**
* SimplePie Linkback
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::LINKBACK instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LINKBACK instead.
*/
define('SIMPLEPIE_LINKBACK', NamespacedSimplePie::LINKBACK);
/**
* No Autodiscovery
* @see SimplePie::set_autodiscovery_level()
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::LOCATOR_NONE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_NONE instead.
*/
define('SIMPLEPIE_LOCATOR_NONE', NamespacedSimplePie::LOCATOR_NONE);
/**
* Feed Link Element Autodiscovery
* @see SimplePie::set_autodiscovery_level()
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_AUTODISCOVERY instead.
*/
define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', NamespacedSimplePie::LOCATOR_AUTODISCOVERY);
/**
* Local Feed Extension Autodiscovery
* @see SimplePie::set_autodiscovery_level()
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_EXTENSION instead.
*/
define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', NamespacedSimplePie::LOCATOR_LOCAL_EXTENSION);
/**
* Local Feed Body Autodiscovery
* @see SimplePie::set_autodiscovery_level()
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::LOCATOR_LOCAL_BODY instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_LOCAL_BODY instead.
*/
define('SIMPLEPIE_LOCATOR_LOCAL_BODY', NamespacedSimplePie::LOCATOR_LOCAL_BODY);
/**
* Remote Feed Extension Autodiscovery
* @see SimplePie::set_autodiscovery_level()
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_EXTENSION instead.
*/
define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', NamespacedSimplePie::LOCATOR_REMOTE_EXTENSION);
/**
* Remote Feed Body Autodiscovery
* @see SimplePie::set_autodiscovery_level()
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::LOCATOR_REMOTE_BODY instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_REMOTE_BODY instead.
*/
define('SIMPLEPIE_LOCATOR_REMOTE_BODY', NamespacedSimplePie::LOCATOR_REMOTE_BODY);
/**
* All Feed Autodiscovery
* @see SimplePie::set_autodiscovery_level()
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::LOCATOR_ALL instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOCATOR_ALL instead.
*/
define('SIMPLEPIE_LOCATOR_ALL', NamespacedSimplePie::LOCATOR_ALL);
/**
* No known feed type
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_NONE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_NONE instead.
*/
define('SIMPLEPIE_TYPE_NONE', NamespacedSimplePie::TYPE_NONE);
/**
* RSS 0.90
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_090 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_090 instead.
*/
define('SIMPLEPIE_TYPE_RSS_090', NamespacedSimplePie::TYPE_RSS_090);
/**
* RSS 0.91 (Netscape)
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_091_NETSCAPE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_NETSCAPE instead.
*/
define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', NamespacedSimplePie::TYPE_RSS_091_NETSCAPE);
/**
* RSS 0.91 (Userland)
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_091_USERLAND instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091_USERLAND instead.
*/
define('SIMPLEPIE_TYPE_RSS_091_USERLAND', NamespacedSimplePie::TYPE_RSS_091_USERLAND);
/**
* RSS 0.91 (both Netscape and Userland)
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_091 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_091 instead.
*/
define('SIMPLEPIE_TYPE_RSS_091', NamespacedSimplePie::TYPE_RSS_091);
/**
* RSS 0.92
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_092 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_092 instead.
*/
define('SIMPLEPIE_TYPE_RSS_092', NamespacedSimplePie::TYPE_RSS_092);
/**
* RSS 0.93
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_093 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_093 instead.
*/
define('SIMPLEPIE_TYPE_RSS_093', NamespacedSimplePie::TYPE_RSS_093);
/**
* RSS 0.94
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_094 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_094 instead.
*/
define('SIMPLEPIE_TYPE_RSS_094', NamespacedSimplePie::TYPE_RSS_094);
/**
* RSS 1.0
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_10 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_10 instead.
*/
define('SIMPLEPIE_TYPE_RSS_10', NamespacedSimplePie::TYPE_RSS_10);
/**
* RSS 2.0
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_20 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_20 instead.
*/
define('SIMPLEPIE_TYPE_RSS_20', NamespacedSimplePie::TYPE_RSS_20);
/**
* RDF-based RSS
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_RDF instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_RDF instead.
*/
define('SIMPLEPIE_TYPE_RSS_RDF', NamespacedSimplePie::TYPE_RSS_RDF);
/**
* Non-RDF-based RSS (truly intended as syndication format)
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_SYNDICATION instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_SYNDICATION instead.
*/
define('SIMPLEPIE_TYPE_RSS_SYNDICATION', NamespacedSimplePie::TYPE_RSS_SYNDICATION);
/**
* All RSS
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_RSS_ALL instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_RSS_ALL instead.
*/
define('SIMPLEPIE_TYPE_RSS_ALL', NamespacedSimplePie::TYPE_RSS_ALL);
/**
* Atom 0.3
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_ATOM_03 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_03 instead.
*/
define('SIMPLEPIE_TYPE_ATOM_03', NamespacedSimplePie::TYPE_ATOM_03);
/**
* Atom 1.0
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_ATOM_10 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_10 instead.
*/
define('SIMPLEPIE_TYPE_ATOM_10', NamespacedSimplePie::TYPE_ATOM_10);
/**
* All Atom
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_ATOM_ALL instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ATOM_ALL instead.
*/
define('SIMPLEPIE_TYPE_ATOM_ALL', NamespacedSimplePie::TYPE_ATOM_ALL);
/**
* All feed types
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::TYPE_ALL instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::TYPE_ALL instead.
*/
define('SIMPLEPIE_TYPE_ALL', NamespacedSimplePie::TYPE_ALL);
/**
* No construct
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::CONSTRUCT_NONE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_NONE instead.
*/
define('SIMPLEPIE_CONSTRUCT_NONE', NamespacedSimplePie::CONSTRUCT_NONE);
/**
* Text construct
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::CONSTRUCT_TEXT instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_TEXT instead.
*/
define('SIMPLEPIE_CONSTRUCT_TEXT', NamespacedSimplePie::CONSTRUCT_TEXT);
/**
* HTML construct
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::CONSTRUCT_HTML instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_HTML instead.
*/
define('SIMPLEPIE_CONSTRUCT_HTML', NamespacedSimplePie::CONSTRUCT_HTML);
/**
* XHTML construct
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::CONSTRUCT_XHTML instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_XHTML instead.
*/
define('SIMPLEPIE_CONSTRUCT_XHTML', NamespacedSimplePie::CONSTRUCT_XHTML);
/**
* base64-encoded construct
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::CONSTRUCT_BASE64 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_BASE64 instead.
*/
define('SIMPLEPIE_CONSTRUCT_BASE64', NamespacedSimplePie::CONSTRUCT_BASE64);
/**
* IRI construct
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::CONSTRUCT_IRI instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_IRI instead.
*/
define('SIMPLEPIE_CONSTRUCT_IRI', NamespacedSimplePie::CONSTRUCT_IRI);
/**
* A construct that might be HTML
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML instead.
*/
define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', NamespacedSimplePie::CONSTRUCT_MAYBE_HTML);
/**
* All constructs
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::CONSTRUCT_ALL instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::CONSTRUCT_ALL instead.
*/
define('SIMPLEPIE_CONSTRUCT_ALL', NamespacedSimplePie::CONSTRUCT_ALL);
/**
* Don't change case
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::SAME_CASE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::SAME_CASE instead.
*/
define('SIMPLEPIE_SAME_CASE', NamespacedSimplePie::SAME_CASE);
/**
* Change to lowercase
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::LOWERCASE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::LOWERCASE instead.
*/
define('SIMPLEPIE_LOWERCASE', NamespacedSimplePie::LOWERCASE);
/**
* Change to uppercase
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::UPPERCASE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::UPPERCASE instead.
*/
define('SIMPLEPIE_UPPERCASE', NamespacedSimplePie::UPPERCASE);
/**
* PCRE for HTML attributes
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_HTML_ATTRIBUTE instead.
*/
define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', NamespacedSimplePie::PCRE_HTML_ATTRIBUTE);
/**
* PCRE for XML attributes
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::PCRE_XML_ATTRIBUTE instead.
*/
define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', NamespacedSimplePie::PCRE_XML_ATTRIBUTE);
/**
* XML Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_XML instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XML instead.
*/
define('SIMPLEPIE_NAMESPACE_XML', NamespacedSimplePie::NAMESPACE_XML);
/**
* Atom 1.0 Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_ATOM_10 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_10 instead.
*/
define('SIMPLEPIE_NAMESPACE_ATOM_10', NamespacedSimplePie::NAMESPACE_ATOM_10);
/**
* Atom 0.3 Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_ATOM_03 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ATOM_03 instead.
*/
define('SIMPLEPIE_NAMESPACE_ATOM_03', NamespacedSimplePie::NAMESPACE_ATOM_03);
/**
* RDF Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_RDF instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RDF instead.
*/
define('SIMPLEPIE_NAMESPACE_RDF', NamespacedSimplePie::NAMESPACE_RDF);
/**
* RSS 0.90 Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_RSS_090 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_090 instead.
*/
define('SIMPLEPIE_NAMESPACE_RSS_090', NamespacedSimplePie::NAMESPACE_RSS_090);
/**
* RSS 1.0 Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_RSS_10 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10 instead.
*/
define('SIMPLEPIE_NAMESPACE_RSS_10', NamespacedSimplePie::NAMESPACE_RSS_10);
/**
* RSS 1.0 Content Module Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_RSS_10_MODULES_CONTENT instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_10_MODULES_CONTENT instead.
*/
define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', NamespacedSimplePie::NAMESPACE_RSS_10_MODULES_CONTENT);
/**
* RSS 2.0 Namespace
* (Stupid, I know, but I'm certain it will confuse people less with support.)
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_RSS_20 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_RSS_20 instead.
*/
define('SIMPLEPIE_NAMESPACE_RSS_20', NamespacedSimplePie::NAMESPACE_RSS_20);
/**
* DC 1.0 Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_DC_10 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_10 instead.
*/
define('SIMPLEPIE_NAMESPACE_DC_10', NamespacedSimplePie::NAMESPACE_DC_10);
/**
* DC 1.1 Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_DC_11 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_DC_11 instead.
*/
define('SIMPLEPIE_NAMESPACE_DC_11', NamespacedSimplePie::NAMESPACE_DC_11);
/**
* W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_W3C_BASIC_GEO instead.
*/
define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', NamespacedSimplePie::NAMESPACE_W3C_BASIC_GEO);
/**
* GeoRSS Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_GEORSS instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_GEORSS instead.
*/
define('SIMPLEPIE_NAMESPACE_GEORSS', NamespacedSimplePie::NAMESPACE_GEORSS);
/**
* Media RSS Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS instead.
*/
define('SIMPLEPIE_NAMESPACE_MEDIARSS', NamespacedSimplePie::NAMESPACE_MEDIARSS);
/**
* Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG instead.
*/
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG);
/**
* Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG2 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG2 instead.
*/
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG2);
/**
* Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG3 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG3 instead.
*/
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG3);
/**
* Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG4 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG4 instead.
*/
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG4);
/**
* Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG5 instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_MEDIARSS_WRONG5 instead.
*/
define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5', NamespacedSimplePie::NAMESPACE_MEDIARSS_WRONG5);
/**
* iTunes RSS Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_ITUNES instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_ITUNES instead.
*/
define('SIMPLEPIE_NAMESPACE_ITUNES', NamespacedSimplePie::NAMESPACE_ITUNES);
/**
* XHTML Namespace
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::NAMESPACE_XHTML instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::NAMESPACE_XHTML instead.
*/
define('SIMPLEPIE_NAMESPACE_XHTML', NamespacedSimplePie::NAMESPACE_XHTML);
/**
* IANA Link Relations Registry
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY instead.
*/
define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', NamespacedSimplePie::IANA_LINK_RELATIONS_REGISTRY);
/**
* No file source
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::FILE_SOURCE_NONE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_NONE instead.
*/
define('SIMPLEPIE_FILE_SOURCE_NONE', NamespacedSimplePie::FILE_SOURCE_NONE);
/**
* Remote file source
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::FILE_SOURCE_REMOTE instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_REMOTE instead.
*/
define('SIMPLEPIE_FILE_SOURCE_REMOTE', NamespacedSimplePie::FILE_SOURCE_REMOTE);
/**
* Local file source
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::FILE_SOURCE_LOCAL instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_LOCAL instead.
*/
define('SIMPLEPIE_FILE_SOURCE_LOCAL', NamespacedSimplePie::FILE_SOURCE_LOCAL);
/**
* fsockopen() file source
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FSOCKOPEN instead.
*/
define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', NamespacedSimplePie::FILE_SOURCE_FSOCKOPEN);
/**
* cURL file source
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::FILE_SOURCE_CURL instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_CURL instead.
*/
define('SIMPLEPIE_FILE_SOURCE_CURL', NamespacedSimplePie::FILE_SOURCE_CURL);
/**
* file_get_contents() file source
- * @deprecated since SimplePie 1.7, use \SimplePie\SimplePie::FILE_SOURCE_FILE_GET_CONTENTS instead.
+ * @deprecated since SimplePie 1.7.0, use \SimplePie\SimplePie::FILE_SOURCE_FILE_GET_CONTENTS instead.
*/
define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', NamespacedSimplePie::FILE_SOURCE_FILE_GET_CONTENTS);
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Author.php b/vendor/simplepie/simplepie/library/SimplePie/Author.php
index 1da49e2c2..3b3ab50e6 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Author.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Author.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Author;
class_exists('SimplePie\Author');
-// @trigger_error(sprintf('Using the "SimplePie_Author" class is deprecated since SimplePie 1.7, use "SimplePie\Author" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Author" class is deprecated since SimplePie 1.7.0, use "SimplePie\Author" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Author" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Author" instead */
class SimplePie_Author extends Author
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache.php b/vendor/simplepie/simplepie/library/SimplePie/Cache.php
index 034af74e2..9f2883ed6 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Cache;
class_exists('SimplePie\Cache');
-// @trigger_error(sprintf('Using the "SimplePie_Cache" class is deprecated since SimplePie 1.7, use "SimplePie\Cache" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Cache" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Cache" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache" instead */
class SimplePie_Cache extends Cache
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php
index 3eddd1f3e..2988ce7c8 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Base.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Cache\Base;
interface_exists('SimplePie\Cache\Base');
-// @trigger_error(sprintf('Using the "SimplePie_Cache_Base" class is deprecated since SimplePie 1.7, use "SimplePie\Cache\Base" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Cache_Base" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Base" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Cache\Base" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Base" instead */
interface SimplePie_Cache_Base extends Base
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php
index 778b0d117..4fb8d2c65 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/DB.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Cache\DB;
class_exists('SimplePie\Cache\DB');
-// @trigger_error(sprintf('Using the "SimplePie_Cache_DB" class is deprecated since SimplePie 1.7, use "SimplePie\Cache\DB" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Cache_DB" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\DB" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Cache\DB" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\DB" instead */
abstract class SimplePie_Cache_DB extends DB
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
index be1005d71..cd5646f20 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Cache\File;
class_exists('SimplePie\Cache\File');
-// @trigger_error(sprintf('Using the "SimplePie_Cache_File" class is deprecated since SimplePie 1.7, use "SimplePie\Cache\File" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Cache_File" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\File" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Cache\File" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\File" instead */
class SimplePie_Cache_File extends File
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php
index 97f6f2a00..a5e088f00 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcache.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Cache\Memcache;
class_exists('SimplePie\Cache\Memcache');
-// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcache" class is deprecated since SimplePie 1.7, use "SimplePie\Cache\Memcache" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcache" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcache" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Cache\Memcache" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcache" instead */
class SimplePie_Cache_Memcache extends Memcache
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php
index 937053257..aef5b953a 100755
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Memcached.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Cache\Memcached;
class_exists('SimplePie\Cache\Memcached');
-// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcached" class is deprecated since SimplePie 1.7, use "SimplePie\Cache\Memcached" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Cache_Memcached" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcached" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Cache\Memcached" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Memcached" instead */
class SimplePie_Cache_Memcached extends Memcached
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
index c3b9d4f86..01ea48cbb 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Cache\MySQL;
class_exists('SimplePie\Cache\MySQL');
-// @trigger_error(sprintf('Using the "SimplePie_Cache_MySQL" class is deprecated since SimplePie 1.7, use "SimplePie\Cache\MySQL" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Cache_MySQL" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\MySQL" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Cache\MySQL" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\MySQL" instead */
class SimplePie_Cache_MySQL extends MySQL
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
index 3beec3ecc..7d68c9795 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
@@ -1,5 +1,7 @@
<?php
+declare(strict_types=1);
+
/**
* SimplePie Redis Cache Extension
*
@@ -14,10 +16,10 @@ use SimplePie\Cache\Redis;
class_exists('SimplePie\Cache\Redis');
-// @trigger_error(sprintf('Using the "SimplePie_Cache_Redis" class is deprecated since SimplePie 1.7, use "SimplePie\Cache\Redis" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Cache_Redis" class is deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Redis" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Cache\Redis" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Cache\Redis" instead */
class SimplePie_Cache_Redis extends Redis
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Caption.php b/vendor/simplepie/simplepie/library/SimplePie/Caption.php
index c6006ae62..6e96e11b2 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Caption.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Caption.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Caption;
class_exists('SimplePie\Caption');
-// @trigger_error(sprintf('Using the "SimplePie_Caption" class is deprecated since SimplePie 1.7, use "SimplePie\Caption" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Caption" class is deprecated since SimplePie 1.7.0, use "SimplePie\Caption" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Caption" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Caption" instead */
class SimplePie_Caption extends Caption
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Category.php b/vendor/simplepie/simplepie/library/SimplePie/Category.php
index f5df6073a..7bdf595df 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Category.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Category.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Category;
class_exists('SimplePie\Category');
-// @trigger_error(sprintf('Using the "SimplePie_Category" class is deprecated since SimplePie 1.7, use "SimplePie\Category" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Category" class is deprecated since SimplePie 1.7.0, use "SimplePie\Category" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Category" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Category" instead */
class SimplePie_Category extends Category
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php b/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
index f37257f8a..016755753 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Content\Type\Sniffer;
class_exists('SimplePie\Content\Type\Sniffer');
-// @trigger_error(sprintf('Using the "SimplePie_Content_Type_Sniffer" class is deprecated since SimplePie 1.7, use "SimplePie\Content\Type\Sniffer" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Content_Type_Sniffer" class is deprecated since SimplePie 1.7.0, use "SimplePie\Content\Type\Sniffer" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Content\Type\Sniffer" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Content\Type\Sniffer" instead */
class SimplePie_Content_Type_Sniffer extends Sniffer
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Copyright.php b/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
index 19c008969..fd50d702c 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Copyright;
class_exists('SimplePie\Copyright');
-// @trigger_error(sprintf('Using the "SimplePie_Copyright" class is deprecated since SimplePie 1.7, use "SimplePie\Copyright" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Copyright" class is deprecated since SimplePie 1.7.0, use "SimplePie\Copyright" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Copyright" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Copyright" instead */
class SimplePie_Copyright extends Copyright
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Core.php b/vendor/simplepie/simplepie/library/SimplePie/Core.php
index bb68d470f..7f3313345 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Core.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Core.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Credit.php b/vendor/simplepie/simplepie/library/SimplePie/Credit.php
index 119c86071..14a197224 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Credit.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Credit.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Credit;
class_exists('SimplePie\Credit');
-// @trigger_error(sprintf('Using the "SimplePie_Credit" class is deprecated since SimplePie 1.7, use "SimplePie\Credit" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Credit" class is deprecated since SimplePie 1.7.0, use "SimplePie\Credit" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Credit" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Credit" instead */
class SimplePie_Credit extends Credit
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php b/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
index e8a1617c0..496c7bf52 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
index db8ab091e..a0e057511 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Enclosure;
class_exists('SimplePie\Enclosure');
-// @trigger_error(sprintf('Using the "SimplePie_Enclosure" class is deprecated since SimplePie 1.7, use "SimplePie\Enclosure" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Enclosure" class is deprecated since SimplePie 1.7.0, use "SimplePie\Enclosure" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Enclosure" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Enclosure" instead */
class SimplePie_Enclosure extends Enclosure
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Exception.php b/vendor/simplepie/simplepie/library/SimplePie/Exception.php
index b3228350f..218a8e3c4 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Exception.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Exception.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Exception as SimplePieException;
class_exists('SimplePie\Exception');
-// @trigger_error(sprintf('Using the "SimplePie_Exception" class is deprecated since SimplePie 1.7, use "SimplePie\Exception" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Exception" class is deprecated since SimplePie 1.7.0, use "SimplePie\Exception" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Exception" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Exception" instead */
class SimplePie_Exception extends SimplePieException
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/File.php b/vendor/simplepie/simplepie/library/SimplePie/File.php
index 89e00de09..99f14fa6b 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/File.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/File.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\File;
class_exists('SimplePie\File');
-// @trigger_error(sprintf('Using the "SimplePie_File" class is deprecated since SimplePie 1.7, use "SimplePie\File" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_File" class is deprecated since SimplePie 1.7.0, use "SimplePie\File" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\File" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\File" instead */
class SimplePie_File extends File
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
index 4d859df4b..65f6c9f6d 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\HTTP\Parser;
class_exists('SimplePie\HTTP\Parser');
-// @trigger_error(sprintf('Using the "SimplePie_HTTP_Parser" class is deprecated since SimplePie 1.7, use "SimplePie\HTTP\Parser" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_HTTP_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\HTTP\Parser" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\HTTP\Parser" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\HTTP\Parser" instead */
class SimplePie_HTTP_Parser extends Parser
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/IRI.php b/vendor/simplepie/simplepie/library/SimplePie/IRI.php
index cb374b862..561cfca06 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/IRI.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/IRI.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\IRI;
class_exists('SimplePie\IRI');
-// @trigger_error(sprintf('Using the "SimplePie_IRI" class is deprecated since SimplePie 1.7, use "SimplePie\IRI" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_IRI" class is deprecated since SimplePie 1.7.0, use "SimplePie\IRI" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\IRI" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\IRI" instead */
class SimplePie_IRI extends IRI
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Item.php b/vendor/simplepie/simplepie/library/SimplePie/Item.php
index 238c6e397..13c51c3b7 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Item.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Item.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Item;
class_exists('SimplePie\Item');
-// @trigger_error(sprintf('Using the "SimplePie_Item" class is deprecated since SimplePie 1.7, use "SimplePie\Item" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Item" class is deprecated since SimplePie 1.7.0, use "SimplePie\Item" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Item" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Item" instead */
class SimplePie_Item extends Item
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Locator.php b/vendor/simplepie/simplepie/library/SimplePie/Locator.php
index 4d1c0fe87..77f83d6af 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Locator.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Locator.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Locator;
class_exists('SimplePie\Locator');
-// @trigger_error(sprintf('Using the "SimplePie_Locator" class is deprecated since SimplePie 1.7, use "SimplePie\Locator" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Locator" class is deprecated since SimplePie 1.7.0, use "SimplePie\Locator" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Locator" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Locator" instead */
class SimplePie_Locator extends Locator
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Misc.php b/vendor/simplepie/simplepie/library/SimplePie/Misc.php
index 80933e770..d357b040c 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Misc.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Misc.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Misc;
class_exists('SimplePie\Misc');
-// @trigger_error(sprintf('Using the "SimplePie_Misc" class is deprecated since SimplePie 1.7, use "SimplePie\Misc" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Misc" class is deprecated since SimplePie 1.7.0, use "SimplePie\Misc" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Misc" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Misc" instead */
class SimplePie_Misc extends Misc
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php b/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
index 42fc06459..8d125e3a0 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Net\IPv6;
class_exists('SimplePie\Net\IPv6');
-// @trigger_error(sprintf('Using the "SimplePie_Net_IPv6" class is deprecated since SimplePie 1.7, use "SimplePie\Net\IPv6" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Net_IPv6" class is deprecated since SimplePie 1.7.0, use "SimplePie\Net\IPv6" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Net\IPv6" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Net\IPv6" instead */
class SimplePie_Net_IPv6 extends IPv6
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php b/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
index d171ee6a4..e55c2f468 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Parse\Date;
class_exists('SimplePie\Parse\Date');
-// @trigger_error(sprintf('Using the "SimplePie_Parse_Date" class is deprecated since SimplePie 1.7, use "SimplePie\Parse\Date" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Parse_Date" class is deprecated since SimplePie 1.7.0, use "SimplePie\Parse\Date" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Parse\Date" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Parse\Date" instead */
class SimplePie_Parse_Date extends Date
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/Parser.php
index 967abd10d..1a1ff9ab4 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Parser.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Parser.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Parser;
class_exists('SimplePie\Parser');
-// @trigger_error(sprintf('Using the "SimplePie_Parser" class is deprecated since SimplePie 1.7, use "SimplePie\Parser" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\Parser" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Parser" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Parser" instead */
class SimplePie_Parser extends Parser
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Rating.php b/vendor/simplepie/simplepie/library/SimplePie/Rating.php
index 69ca4eff1..c096850c4 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Rating.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Rating.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Rating;
class_exists('SimplePie\Rating');
-// @trigger_error(sprintf('Using the "SimplePie_Rating" class is deprecated since SimplePie 1.7, use "SimplePie\Rating" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Rating" class is deprecated since SimplePie 1.7.0, use "SimplePie\Rating" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Rating" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Rating" instead */
class SimplePie_Rating extends Rating
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Registry.php b/vendor/simplepie/simplepie/library/SimplePie/Registry.php
index a04fd7149..eaf32c05a 100755
--- a/vendor/simplepie/simplepie/library/SimplePie/Registry.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Registry.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Registry;
class_exists('SimplePie\Registry');
-// @trigger_error(sprintf('Using the "SimplePie_Registry" class is deprecated since SimplePie 1.7, use "SimplePie\Registry" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Registry" class is deprecated since SimplePie 1.7.0, use "SimplePie\Registry" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Registry" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Registry" instead */
class SimplePie_Registry extends Registry
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Restriction.php b/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
index 7a3b92055..28a1ebfb2 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Restriction;
class_exists('SimplePie\Restriction');
-// @trigger_error(sprintf('Using the "SimplePie_Restriction" class is deprecated since SimplePie 1.7, use "SimplePie\Restriction" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Restriction" class is deprecated since SimplePie 1.7.0, use "SimplePie\Restriction" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Restriction" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Restriction" instead */
class SimplePie_Restriction extends Restriction
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
index 4f8b49086..36c59ebce 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Sanitize;
class_exists('SimplePie\Sanitize');
-// @trigger_error(sprintf('Using the "SimplePie_Sanitize" class is deprecated since SimplePie 1.7, use "SimplePie\Sanitize" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Sanitize" class is deprecated since SimplePie 1.7.0, use "SimplePie\Sanitize" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Sanitize" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Sanitize" instead */
class SimplePie_Sanitize extends Sanitize
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Source.php b/vendor/simplepie/simplepie/library/SimplePie/Source.php
index 7847b41d3..d2205e5dd 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Source.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Source.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Source;
class_exists('SimplePie\Source');
-// @trigger_error(sprintf('Using the "SimplePie_Source" class is deprecated since SimplePie 1.7, use "SimplePie\Source" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_Source" class is deprecated since SimplePie 1.7.0, use "SimplePie\Source" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Source" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Source" instead */
class SimplePie_Source extends Source
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
index f7be9f399..3bedaabe2 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\XML\Declaration\Parser;
class_exists('SimplePie\XML\Declaration\Parser');
-// @trigger_error(sprintf('Using the "SimplePie_XML_Declaration_Parser" class is deprecated since SimplePie 1.7, use "SimplePie\XML\Declaration\Parser" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_XML_Declaration_Parser" class is deprecated since SimplePie 1.7.0, use "SimplePie\XML\Declaration\Parser" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\XML\Declaration\Parser" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\XML\Declaration\Parser" instead */
class SimplePie_XML_Declaration_Parser extends Parser
{
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php b/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
index ec97a1fe7..dea37ed47 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -45,10 +47,10 @@ use SimplePie\Gzdecode;
class_exists('SimplePie\Gzdecode');
-// @trigger_error(sprintf('Using the "SimplePie_gzdecode" class is deprecated since SimplePie 1.7, use "SimplePie\Gzdecode" instead.'), \E_USER_DEPRECATED);
+// @trigger_error(sprintf('Using the "SimplePie_gzdecode" class is deprecated since SimplePie 1.7.0, use "SimplePie\Gzdecode" instead.'), \E_USER_DEPRECATED);
if (\false) {
- /** @deprecated since SimplePie 1.7, use "SimplePie\Gzdecode" instead */
+ /** @deprecated since SimplePie 1.7.0, use "SimplePie\Gzdecode" instead */
class SimplePie_gzdecode extends Gzdecode
{
}
diff --git a/vendor/simplepie/simplepie/src/Author.php b/vendor/simplepie/simplepie/src/Author.php
index 0f7039a87..f82a021e2 100644
--- a/vendor/simplepie/simplepie/src/Author.php
+++ b/vendor/simplepie/simplepie/src/Author.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Cache.php b/vendor/simplepie/simplepie/src/Cache.php
index f91a9ca84..740091f08 100644
--- a/vendor/simplepie/simplepie/src/Cache.php
+++ b/vendor/simplepie/simplepie/src/Cache.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -43,6 +45,8 @@
namespace SimplePie;
+use SimplePie\Cache\Base;
+
/**
* Used to create cache objects
*
@@ -52,6 +56,7 @@ namespace SimplePie;
*
* @package SimplePie
* @subpackage Caching
+ * @deprecated since SimplePie 1.8.0, use "SimplePie\SimplePie::set_cache()" instead
*/
class Cache
{
@@ -81,8 +86,8 @@ class Cache
*
* @param string $location URL location (scheme is used to determine handler)
* @param string $filename Unique identifier for cache object
- * @param string $extension 'spi' or 'spc'
- * @return \SimplePie\Cache\Base Type of object depends on scheme of `$location`
+ * @param Base::TYPE_FEED|Base::TYPE_IMAGE $extension 'spi' or 'spc'
+ * @return Base Type of object depends on scheme of `$location`
*/
public static function get_handler($location, $filename, $extension)
{
@@ -99,11 +104,12 @@ class Cache
/**
* Create a new SimplePie\Cache object
*
- * @deprecated Use {@see get_handler} instead
+ * @deprecated since SimplePie 1.3.1, use {@see get_handler()} instead
*/
public function create($location, $filename, $extension)
{
- trigger_error('Cache::create() has been replaced with Cache::get_handler(). Switch to the registry system to use this.', E_USER_DEPRECATED);
+ trigger_error('Cache::create() has been replaced with Cache::get_handler() since SimplePie 1.3.1, use the registry system instead.', \E_USER_DEPRECATED);
+
return self::get_handler($location, $filename, $extension);
}
@@ -111,7 +117,7 @@ class Cache
* Register a handler
*
* @param string $type DSN type to register for
- * @param string $class Name of handler class. Must implement \SimplePie\Cache\Base
+ * @param class-string<Base> $class Name of handler class. Must implement Base
*/
public static function register($type, $class)
{
diff --git a/vendor/simplepie/simplepie/src/Cache/Base.php b/vendor/simplepie/simplepie/src/Cache/Base.php
index 08304648b..134d097fc 100644
--- a/vendor/simplepie/simplepie/src/Cache/Base.php
+++ b/vendor/simplepie/simplepie/src/Cache/Base.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -51,6 +53,7 @@ namespace SimplePie\Cache;
*
* @package SimplePie
* @subpackage Caching
+ * @deprecated since SimplePie 1.8.0, use "Psr\SimpleCache\CacheInterface" instead
*/
interface Base
{
@@ -59,28 +62,28 @@ interface Base
*
* @var string
*/
- const TYPE_FEED = 'spc';
+ public const TYPE_FEED = 'spc';
/**
* Image cache type
*
* @var string
*/
- const TYPE_IMAGE = 'spi';
+ public const TYPE_IMAGE = 'spi';
/**
* Create a new cache object
*
* @param string $location Location string (from SimplePie::$cache_location)
* @param string $name Unique ID for the cache
- * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
+ * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
*/
public function __construct($location, $name, $type);
/**
* Save data to the cache
*
- * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
+ * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
* @return bool Successfulness
*/
public function save($data);
diff --git a/vendor/simplepie/simplepie/src/Cache/BaseDataCache.php b/vendor/simplepie/simplepie/src/Cache/BaseDataCache.php
new file mode 100644
index 000000000..b8b239195
--- /dev/null
+++ b/vendor/simplepie/simplepie/src/Cache/BaseDataCache.php
@@ -0,0 +1,159 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
+ * @author Ryan Parman
+ * @author Sam Sneddon
+ * @author Ryan McCue
+ * @link http://simplepie.org/ SimplePie
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ */
+
+namespace SimplePie\Cache;
+
+use InvalidArgumentException;
+
+/**
+ * Adapter for deprecated \SimplePie\Cache\Base implementations
+ *
+ * @package SimplePie
+ * @subpackage Caching
+ * @internal
+ */
+final class BaseDataCache implements DataCache
+{
+ /**
+ * @var Base
+ */
+ private $cache;
+
+ public function __construct(Base $cache)
+ {
+ $this->cache = $cache;
+ }
+
+ /**
+ * Fetches a value from the cache.
+ *
+ * Equivalent to \Psr\SimpleCache\CacheInterface::get()
+ * <code>
+ * public function get(string $key, mixed $default = null): mixed;
+ * </code>
+ *
+ * @param string $key The unique key of this item in the cache.
+ * @param mixed $default Default value to return if the key does not exist.
+ *
+ * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
+ *
+ * @throws InvalidArgumentException
+ * MUST be thrown if the $key string is not a legal value.
+ */
+ public function get_data(string $key, $default = null)
+ {
+ $data = $this->cache->load();
+
+ if (! is_array($data)) {
+ return $default;
+ }
+
+ // ignore data if internal cache expiration time is not set
+ if (! array_key_exists('__cache_expiration_time', $data)) {
+ return $default;
+ }
+
+ // ignore data if internal cache expiration time is expired
+ if ($data['__cache_expiration_time'] < time()) {
+ return $default;
+ }
+
+ // remove internal cache expiration time
+ unset($data['__cache_expiration_time']);
+
+ return $data;
+ }
+
+ /**
+ * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
+ *
+ * Equivalent to \Psr\SimpleCache\CacheInterface::set()
+ * <code>
+ * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
+ * </code>
+ *
+ * @param string $key The key of the item to store.
+ * @param array $value The value of the item to store, must be serializable.
+ * @param null|int $ttl Optional. The TTL value of this item. If no value is sent and
+ * the driver supports TTL then the library may set a default value
+ * for it or let the driver take care of that.
+ *
+ * @return bool True on success and false on failure.
+ *
+ * @throws InvalidArgumentException
+ * MUST be thrown if the $key string is not a legal value.
+ */
+ public function set_data(string $key, array $value, ?int $ttl = null): bool
+ {
+ if ($ttl === null) {
+ $ttl = 3600;
+ }
+
+ // place internal cache expiration time
+ $value['__cache_expiration_time'] = time() + $ttl;
+
+ return $this->cache->save($value);
+ }
+
+ /**
+ * Delete an item from the cache by its unique key.
+ *
+ * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
+ * <code>
+ * public function delete(string $key): bool;
+ * </code>
+ *
+ * @param string $key The unique cache key of the item to delete.
+ *
+ * @return bool True if the item was successfully removed. False if there was an error.
+ *
+ * @throws InvalidArgumentException
+ * MUST be thrown if the $key string is not a legal value.
+ */
+ public function delete_data(string $key): bool
+ {
+ return $this->cache->unlink();
+ }
+}
diff --git a/vendor/simplepie/simplepie/src/Cache/CallableNameFilter.php b/vendor/simplepie/simplepie/src/Cache/CallableNameFilter.php
new file mode 100644
index 000000000..0583d0d9b
--- /dev/null
+++ b/vendor/simplepie/simplepie/src/Cache/CallableNameFilter.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
+ * @author Ryan Parman
+ * @author Sam Sneddon
+ * @author Ryan McCue
+ * @link http://simplepie.org/ SimplePie
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ */
+
+namespace SimplePie\Cache;
+
+/**
+ * Creating a cache filename with callables
+ *
+ * @package SimplePie
+ * @subpackage Caching
+ */
+final class CallableNameFilter implements NameFilter
+{
+ /**
+ * @var callable
+ */
+ private $callable;
+
+ public function __construct(callable $callable)
+ {
+ $this->callable = $callable;
+ }
+
+ /**
+ * Method to create cache filename with.
+ *
+ * The returning name MUST follow the rules for keys in PSR-16.
+ *
+ * @link https://www.php-fig.org/psr/psr-16/
+ *
+ * The returning name MUST be a string of at least one character
+ * that uniquely identifies a cached item, MUST only contain the
+ * characters A-Z, a-z, 0-9, _, and . in any order in UTF-8 encoding
+ * and MUST not longer then 64 characters. The following characters
+ * are reserved for future extensions and MUST NOT be used: {}()/\@:
+ *
+ * A provided implementing library MAY support additional characters
+ * and encodings or longer lengths, but MUST support at least that
+ * minimum.
+ *
+ * @param string $name The name for the cache will be most likly an url with query string
+ *
+ * @return string the new cache name
+ */
+ public function filter(string $name): string
+ {
+ return call_user_func($this->callable, $name);
+ }
+}
diff --git a/vendor/simplepie/simplepie/src/Cache/DB.php b/vendor/simplepie/simplepie/src/Cache/DB.php
index 6bb37d283..7994e3210 100644
--- a/vendor/simplepie/simplepie/src/Cache/DB.php
+++ b/vendor/simplepie/simplepie/src/Cache/DB.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -48,6 +50,7 @@ namespace SimplePie\Cache;
*
* @package SimplePie
* @subpackage Caching
+ * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
*/
abstract class DB implements Base
{
@@ -56,7 +59,7 @@ abstract class DB implements Base
*
* Converts a given {@see SimplePie} object into data to be stored
*
- * @param SimplePie $data
+ * @param \SimplePie\SimplePie $data
* @return array First item is the serialized data for storage, second item is the unique ID for this item
*/
protected static function prepare_simplepie_object_for_cache($data)
diff --git a/vendor/simplepie/simplepie/src/Cache/DataCache.php b/vendor/simplepie/simplepie/src/Cache/DataCache.php
new file mode 100644
index 000000000..bf3aebe90
--- /dev/null
+++ b/vendor/simplepie/simplepie/src/Cache/DataCache.php
@@ -0,0 +1,120 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
+ * @author Ryan Parman
+ * @author Sam Sneddon
+ * @author Ryan McCue
+ * @link http://simplepie.org/ SimplePie
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ */
+
+namespace SimplePie\Cache;
+
+use InvalidArgumentException;
+
+/**
+ * Subset of PSR-16 Cache client for caching data arrays
+ *
+ * Only get(), set() and delete() methods are used,
+ * but not has(), getMultiple(), setMultiple() or deleteMultiple().
+ *
+ * The methods names must be different, but should be compatible to the
+ * methods of \Psr\SimpleCache\CacheInterface.
+ *
+ * @package SimplePie
+ * @subpackage Caching
+ * @internal
+ */
+interface DataCache
+{
+ /**
+ * Fetches a value from the cache.
+ *
+ * Equivalent to \Psr\SimpleCache\CacheInterface::get()
+ * <code>
+ * public function get(string $key, mixed $default = null): mixed;
+ * </code>
+ *
+ * @param string $key The unique key of this item in the cache.
+ * @param mixed $default Default value to return if the key does not exist.
+ *
+ * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
+ *
+ * @throws InvalidArgumentException
+ * MUST be thrown if the $key string is not a legal value.
+ */
+ public function get_data(string $key, $default = null);
+
+ /**
+ * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
+ *
+ * Equivalent to \Psr\SimpleCache\CacheInterface::set()
+ * <code>
+ * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
+ * </code>
+ *
+ * @param string $key The key of the item to store.
+ * @param array $value The value of the item to store, must be serializable.
+ * @param null|int $ttl Optional. The TTL value of this item. If no value is sent and
+ * the driver supports TTL then the library may set a default value
+ * for it or let the driver take care of that.
+ *
+ * @return bool True on success and false on failure.
+ *
+ * @throws InvalidArgumentException
+ * MUST be thrown if the $key string is not a legal value.
+ */
+ public function set_data(string $key, array $value, ?int $ttl = null): bool;
+
+ /**
+ * Delete an item from the cache by its unique key.
+ *
+ * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
+ * <code>
+ * public function delete(string $key): bool;
+ * </code>
+ *
+ * @param string $key The unique cache key of the item to delete.
+ *
+ * @return bool True if the item was successfully removed. False if there was an error.
+ *
+ * @throws InvalidArgumentException
+ * MUST be thrown if the $key string is not a legal value.
+ */
+ public function delete_data(string $key): bool;
+}
diff --git a/vendor/simplepie/simplepie/src/Cache/File.php b/vendor/simplepie/simplepie/src/Cache/File.php
index b4076ba0a..248d41a8a 100644
--- a/vendor/simplepie/simplepie/src/Cache/File.php
+++ b/vendor/simplepie/simplepie/src/Cache/File.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -48,6 +50,7 @@ namespace SimplePie\Cache;
*
* @package SimplePie
* @subpackage Caching
+ * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
*/
class File implements Base
{
@@ -85,7 +88,7 @@ class File implements Base
*
* @param string $location Location string (from SimplePie::$cache_location)
* @param string $name Unique ID for the cache
- * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
+ * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
*/
public function __construct($location, $name, $type)
{
@@ -98,7 +101,7 @@ class File implements Base
/**
* Save data to the cache
*
- * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
+ * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
* @return bool Successfulness
*/
public function save($data)
diff --git a/vendor/simplepie/simplepie/src/Cache/Memcache.php b/vendor/simplepie/simplepie/src/Cache/Memcache.php
index 36cf4b785..aeabd51b3 100644
--- a/vendor/simplepie/simplepie/src/Cache/Memcache.php
+++ b/vendor/simplepie/simplepie/src/Cache/Memcache.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -57,6 +59,7 @@ use Memcache as NativeMemcache;
* @package SimplePie
* @subpackage Caching
* @uses Memcache
+ * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
*/
class Memcache implements Base
{
@@ -86,7 +89,7 @@ class Memcache implements Base
*
* @param string $location Location string (from SimplePie::$cache_location)
* @param string $name Unique ID for the cache
- * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
+ * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
*/
public function __construct($location, $name, $type)
{
@@ -98,7 +101,7 @@ class Memcache implements Base
'prefix' => 'simplepie_',
],
];
- $this->options = \SimplePie\Misc::array_merge_recursive($this->options, \SimplePie\Cache::parse_URL($location));
+ $this->options = array_replace_recursive($this->options, \SimplePie\Cache::parse_URL($location));
$this->name = $this->options['extras']['prefix'] . md5("$name:$type");
@@ -109,7 +112,7 @@ class Memcache implements Base
/**
* Save data to the cache
*
- * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
+ * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
* @return bool Successfulness
*/
public function save($data)
diff --git a/vendor/simplepie/simplepie/src/Cache/Memcached.php b/vendor/simplepie/simplepie/src/Cache/Memcached.php
index db58ddc02..4aa3701b5 100644
--- a/vendor/simplepie/simplepie/src/Cache/Memcached.php
+++ b/vendor/simplepie/simplepie/src/Cache/Memcached.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -58,6 +60,7 @@ use Memcached as NativeMemcached;
* @subpackage Caching
* @author Paul L. McNeely
* @uses Memcached
+ * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
*/
class Memcached implements Base
{
@@ -82,8 +85,8 @@ class Memcached implements Base
/**
* Create a new cache object
* @param string $location Location string (from SimplePie::$cache_location)
- * @param string $name Unique ID for the cache
- * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
+ * @param string $name Unique ID for the cache
+ * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
*/
public function __construct($location, $name, $type)
{
@@ -95,7 +98,7 @@ class Memcached implements Base
'prefix' => 'simplepie_',
],
];
- $this->options = \SimplePie\Misc::array_merge_recursive($this->options, \SimplePie\Cache::parse_URL($location));
+ $this->options = array_replace_recursive($this->options, \SimplePie\Cache::parse_URL($location));
$this->name = $this->options['extras']['prefix'] . md5("$name:$type");
@@ -105,7 +108,7 @@ class Memcached implements Base
/**
* Save data to the cache
- * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
+ * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
* @return bool Successfulness
*/
public function save($data)
diff --git a/vendor/simplepie/simplepie/src/Cache/MySQL.php b/vendor/simplepie/simplepie/src/Cache/MySQL.php
index 7d645b277..62abb12cd 100644
--- a/vendor/simplepie/simplepie/src/Cache/MySQL.php
+++ b/vendor/simplepie/simplepie/src/Cache/MySQL.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -54,13 +56,14 @@ namespace SimplePie\Cache;
*
* @package SimplePie
* @subpackage Caching
+ * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
*/
class MySQL extends DB
{
/**
* PDO instance
*
- * @var PDO
+ * @var \PDO
*/
protected $mysql;
@@ -83,7 +86,7 @@ class MySQL extends DB
*
* @param string $location Location string (from SimplePie::$cache_location)
* @param string $name Unique ID for the cache
- * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
+ * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
*/
public function __construct($location, $name, $type)
{
@@ -99,7 +102,7 @@ class MySQL extends DB
],
];
- $this->options = \SimplePie\Misc::array_merge_recursive($this->options, \SimplePie\Cache::parse_URL($location));
+ $this->options = array_replace_recursive($this->options, \SimplePie\Cache::parse_URL($location));
// Path is prefixed with a "/"
$this->options['dbname'] = substr($this->options['path'], 1);
@@ -145,7 +148,7 @@ class MySQL extends DB
/**
* Save data to the cache
*
- * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
+ * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
* @return bool Successfulness
*/
public function save($data)
diff --git a/vendor/simplepie/simplepie/src/Cache/NameFilter.php b/vendor/simplepie/simplepie/src/Cache/NameFilter.php
new file mode 100644
index 000000000..19ce7b0a2
--- /dev/null
+++ b/vendor/simplepie/simplepie/src/Cache/NameFilter.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
+ * @author Ryan Parman
+ * @author Sam Sneddon
+ * @author Ryan McCue
+ * @link http://simplepie.org/ SimplePie
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ */
+
+namespace SimplePie\Cache;
+
+/**
+ * Interface for creating a cache filename
+ *
+ * @package SimplePie
+ * @subpackage Caching
+ */
+interface NameFilter
+{
+ /**
+ * Method to create cache filename with.
+ *
+ * The returning name MUST follow the rules for keys in PSR-16.
+ *
+ * @link https://www.php-fig.org/psr/psr-16/
+ *
+ * The returning name MUST be a string of at least one character
+ * that uniquely identifies a cached item, MUST only contain the
+ * characters A-Z, a-z, 0-9, _, and . in any order in UTF-8 encoding
+ * and MUST not longer then 64 characters. The following characters
+ * are reserved for future extensions and MUST NOT be used: {}()/\@:
+ *
+ * A provided implementing library MAY support additional characters
+ * and encodings or longer lengths, but MUST support at least that
+ * minimum.
+ *
+ * @param string $name The name for the cache will be most likly an url with query string
+ *
+ * @return string the new cache name
+ */
+ public function filter(string $name): string;
+}
diff --git a/vendor/simplepie/simplepie/src/Cache/Psr16.php b/vendor/simplepie/simplepie/src/Cache/Psr16.php
new file mode 100644
index 000000000..710996b4d
--- /dev/null
+++ b/vendor/simplepie/simplepie/src/Cache/Psr16.php
@@ -0,0 +1,147 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
+ * @author Ryan Parman
+ * @author Sam Sneddon
+ * @author Ryan McCue
+ * @link http://simplepie.org/ SimplePie
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ */
+
+namespace SimplePie\Cache;
+
+use Psr\SimpleCache\CacheInterface;
+use Psr\SimpleCache\InvalidArgumentException;
+
+/**
+ * Caches data into a PSR-16 cache implementation
+ *
+ * @package SimplePie
+ * @subpackage Caching
+ * @internal
+ */
+final class Psr16 implements DataCache
+{
+ /**
+ * PSR-16 cache implementation
+ *
+ * @var CacheInterface
+ */
+ private $cache;
+
+ /**
+ * PSR-16 cache implementation
+ *
+ * @param CacheInterface $cache
+ */
+ public function __construct(CacheInterface $cache)
+ {
+ $this->cache = $cache;
+ }
+
+ /**
+ * Fetches a value from the cache.
+ *
+ * Equivalent to \Psr\SimpleCache\CacheInterface::get()
+ * <code>
+ * public function get(string $key, mixed $default = null): mixed;
+ * </code>
+ *
+ * @param string $key The unique key of this item in the cache.
+ * @param mixed $default Default value to return if the key does not exist.
+ *
+ * @return array|mixed The value of the item from the cache, or $default in case of cache miss.
+ *
+ * @throws InvalidArgumentException
+ * MUST be thrown if the $key string is not a legal value.
+ */
+ public function get_data(string $key, $default = null)
+ {
+ $data = $this->cache->get($key, $default);
+
+ if (! is_array($data) || $data === $default) {
+ return $default;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.
+ *
+ * Equivalent to \Psr\SimpleCache\CacheInterface::set()
+ * <code>
+ * public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool;
+ * </code>
+ *
+ * @param string $key The key of the item to store.
+ * @param array $value The value of the item to store, must be serializable.
+ * @param null|int $ttl Optional. The TTL value of this item. If no value is sent and
+ * the driver supports TTL then the library may set a default value
+ * for it or let the driver take care of that.
+ *
+ * @return bool True on success and false on failure.
+ *
+ * @throws InvalidArgumentException
+ * MUST be thrown if the $key string is not a legal value.
+ */
+ public function set_data(string $key, array $value, ?int $ttl = null): bool
+ {
+ return $this->cache->set($key, $value, $ttl);
+ }
+
+ /**
+ * Delete an item from the cache by its unique key.
+ *
+ * Equivalent to \Psr\SimpleCache\CacheInterface::delete()
+ * <code>
+ * public function delete(string $key): bool;
+ * </code>
+ *
+ * @param string $key The unique cache key of the item to delete.
+ *
+ * @return bool True if the item was successfully removed. False if there was an error.
+ *
+ * @throws InvalidArgumentException
+ * MUST be thrown if the $key string is not a legal value.
+ */
+ public function delete_data(string $key): bool
+ {
+ return $this->cache->delete($key);
+ }
+}
diff --git a/vendor/simplepie/simplepie/src/Cache/Redis.php b/vendor/simplepie/simplepie/src/Cache/Redis.php
index 96f47f658..0effccadb 100644
--- a/vendor/simplepie/simplepie/src/Cache/Redis.php
+++ b/vendor/simplepie/simplepie/src/Cache/Redis.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -57,6 +59,7 @@ use Redis as NativeRedis;
* @package SimplePie
* @subpackage Caching
* @uses Redis
+ * @deprecated since SimplePie 1.8.0, use implementation of "Psr\SimpleCache\CacheInterface" instead
*/
class Redis implements Base
{
@@ -82,18 +85,11 @@ class Redis implements Base
protected $name;
/**
- * Cache Data
- *
- * @var type
- */
- protected $data;
-
- /**
* Create a new cache object
*
* @param string $location Location string (from SimplePie::$cache_location)
* @param string $name Unique ID for the cache
- * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
+ * @param Base::TYPE_FEED|Base::TYPE_IMAGE $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
*/
public function __construct($location, $name, $options = null)
{
@@ -132,7 +128,7 @@ class Redis implements Base
/**
* Save data to the cache
*
- * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
+ * @param array|\SimplePie\SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
* @return bool Successfulness
*/
public function save($data)
diff --git a/vendor/simplepie/simplepie/src/Caption.php b/vendor/simplepie/simplepie/src/Caption.php
index 0795115c9..467183239 100644
--- a/vendor/simplepie/simplepie/src/Caption.php
+++ b/vendor/simplepie/simplepie/src/Caption.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Category.php b/vendor/simplepie/simplepie/src/Category.php
index 351e93bed..b49b4fd96 100644
--- a/vendor/simplepie/simplepie/src/Category.php
+++ b/vendor/simplepie/simplepie/src/Category.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Content/Type/Sniffer.php b/vendor/simplepie/simplepie/src/Content/Type/Sniffer.php
index c74b0885e..33c27b64b 100644
--- a/vendor/simplepie/simplepie/src/Content/Type/Sniffer.php
+++ b/vendor/simplepie/simplepie/src/Content/Type/Sniffer.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Copyright.php b/vendor/simplepie/simplepie/src/Copyright.php
index d2840b184..878e4ffa4 100644
--- a/vendor/simplepie/simplepie/src/Copyright.php
+++ b/vendor/simplepie/simplepie/src/Copyright.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Credit.php b/vendor/simplepie/simplepie/src/Credit.php
index 9834c3da8..6b1402266 100644
--- a/vendor/simplepie/simplepie/src/Credit.php
+++ b/vendor/simplepie/simplepie/src/Credit.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Enclosure.php b/vendor/simplepie/simplepie/src/Enclosure.php
index 7ec92e67f..065577653 100644
--- a/vendor/simplepie/simplepie/src/Enclosure.php
+++ b/vendor/simplepie/simplepie/src/Enclosure.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -604,7 +606,7 @@ class Enclosure
public function get_link()
{
if ($this->link !== null) {
- return urldecode($this->link);
+ return $this->link;
}
return null;
@@ -875,6 +877,7 @@ class Enclosure
$widescreen = false;
$handler = $this->get_handler();
$type = $this->get_real_type();
+ $placeholder = '';
// Process options and reassign values as necessary
if (is_array($options)) {
diff --git a/vendor/simplepie/simplepie/src/Exception.php b/vendor/simplepie/simplepie/src/Exception.php
index 5c34c3483..a20681f55 100644
--- a/vendor/simplepie/simplepie/src/Exception.php
+++ b/vendor/simplepie/simplepie/src/Exception.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/File.php b/vendor/simplepie/simplepie/src/File.php
index 597661652..bdbf56927 100644
--- a/vendor/simplepie/simplepie/src/File.php
+++ b/vendor/simplepie/simplepie/src/File.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Gzdecode.php b/vendor/simplepie/simplepie/src/Gzdecode.php
index 786125e0b..67cbfefe0 100644
--- a/vendor/simplepie/simplepie/src/Gzdecode.php
+++ b/vendor/simplepie/simplepie/src/Gzdecode.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -202,6 +204,8 @@ class Gzdecode
public function parse()
{
if ($this->compressed_size >= $this->min_compressed_size) {
+ $len = 0;
+
// Check ID1, ID2, and CM
if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08") {
return false;
diff --git a/vendor/simplepie/simplepie/src/HTTP/Parser.php b/vendor/simplepie/simplepie/src/HTTP/Parser.php
index a36c32f4f..15c46ebe8 100644
--- a/vendor/simplepie/simplepie/src/HTTP/Parser.php
+++ b/vendor/simplepie/simplepie/src/HTTP/Parser.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -86,62 +88,33 @@ class Parser
*/
public $body = '';
- /**
- * @access private
- */
- const STATE_HTTP_VERSION = 'http_version';
- /**
- * @access private
- */
- const STATE_STATUS = 'status';
- /**
- * @access private
- */
- const STATE_REASON = 'reason';
- /**
- * @access private
- */
- const STATE_NEW_LINE = 'new_line';
- /**
- * @access private
- */
- const STATE_BODY = 'body';
- /**
- * @access private
- */
- const STATE_NAME = 'name';
- /**
- * @access private
- */
- const STATE_VALUE = 'value';
- /**
- * @access private
- */
- const STATE_VALUE_CHAR = 'value_char';
- /**
- * @access private
- */
- const STATE_QUOTE = 'quote';
- /**
- * @access private
- */
- const STATE_QUOTE_ESCAPED = 'quote_escaped';
- /**
- * @access private
- */
- const STATE_QUOTE_CHAR = 'quote_char';
- /**
- * @access private
- */
- const STATE_CHUNKED = 'chunked';
- /**
- * @access private
- */
- const STATE_EMIT = 'emit';
- /**
- * @access private
- */
- const STATE_ERROR = false;
+ private const STATE_HTTP_VERSION = 'http_version';
+
+ private const STATE_STATUS = 'status';
+
+ private const STATE_REASON = 'reason';
+
+ private const STATE_NEW_LINE = 'new_line';
+
+ private const STATE_BODY = 'body';
+
+ private const STATE_NAME = 'name';
+
+ private const STATE_VALUE = 'value';
+
+ private const STATE_VALUE_CHAR = 'value_char';
+
+ private const STATE_QUOTE = 'quote';
+
+ private const STATE_QUOTE_ESCAPED = 'quote_escaped';
+
+ private const STATE_QUOTE_CHAR = 'quote_char';
+
+ private const STATE_CHUNKED = 'chunked';
+
+ private const STATE_EMIT = 'emit';
+
+ private const STATE_ERROR = false;
/**
* Current state of the state machine
@@ -495,9 +468,12 @@ class Parser
}
$chunk_length = strlen($matches[0]);
- $decoded .= $part = substr($encoded, $chunk_length, $length);
+ $decoded .= substr($encoded, $chunk_length, $length);
$encoded = substr($encoded, $chunk_length + $length + 2);
+ // BC for PHP < 8.0: substr() can return bool instead of string
+ $encoded = ($encoded === false) ? '' : $encoded;
+
if (trim($encoded) === '0' || empty($encoded)) {
$this->state = self::STATE_EMIT;
$this->body = $decoded;
diff --git a/vendor/simplepie/simplepie/src/IRI.php b/vendor/simplepie/simplepie/src/IRI.php
index 09e8488f5..ce4c2c211 100644
--- a/vendor/simplepie/simplepie/src/IRI.php
+++ b/vendor/simplepie/simplepie/src/IRI.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -152,7 +154,7 @@ class IRI
if (method_exists($this, 'set_' . $name)) {
call_user_func([$this, 'set_' . $name], $value);
} elseif (
- $name === 'iauthority'
+ $name === 'iauthority'
|| $name === 'iuserinfo'
|| $name === 'ihost'
|| $name === 'ipath'
@@ -373,10 +375,10 @@ class IRI
// C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
elseif (strpos($input, '/../') === 0) {
$input = substr($input, 3);
- $output = substr_replace($output, '', strrpos($output, '/'));
+ $output = substr_replace($output, '', intval(strrpos($output, '/')));
} elseif ($input === '/..') {
$input = '/';
- $output = substr_replace($output, '', strrpos($output, '/'));
+ $output = substr_replace($output, '', intval(strrpos($output, '/')));
}
// D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
elseif ($input === '.' || $input === '..') {
@@ -420,6 +422,7 @@ class IRI
$strlen = strlen($string);
while (($position += strspn($string, $extra_chars, $position)) < $strlen) {
$value = ord($string[$position]);
+ $character = 0;
// Start position
$start = $position;
@@ -489,13 +492,13 @@ class IRI
|| $character >= 0xFDD0 && $character <= 0xFDEF
|| (
// Everything else not in ucschar
- $character > 0xD7FF && $character < 0xF900
+ $character > 0xD7FF && $character < 0xF900
|| $character < 0xA0
|| $character > 0xEFFFD
)
&& (
// Everything not in iprivate, if it applies
- !$iprivate
+ !$iprivate
|| $character < 0xE000
|| $character > 0x10FFFD
)
@@ -538,6 +541,12 @@ class IRI
$string = '';
$remaining = 0;
+ // these variables will be initialized in the loop but PHPStan is not able to detect it currently
+ $start = 0;
+ $character = 0;
+ $length = 0;
+ $valid = true;
+
// Loop over each and every byte, and set $value to its value
for ($i = 1, $len = count($bytes); $i < $len; $i++) {
$value = hexdec($bytes[$i]);
@@ -717,14 +726,17 @@ class IRI
if ($iri === null) {
return true;
} elseif (isset($cache[$iri])) {
- list($this->scheme,
- $this->iuserinfo,
- $this->ihost,
- $this->port,
- $this->ipath,
- $this->iquery,
- $this->ifragment,
- $return) = $cache[$iri];
+ [
+ $this->scheme,
+ $this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $this->ipath,
+ $this->iquery,
+ $this->ifragment,
+ $return
+ ] = $cache[$iri];
+
return $return;
}
@@ -739,14 +751,17 @@ class IRI
&& $this->set_query($parsed['query'])
&& $this->set_fragment($parsed['fragment']);
- $cache[$iri] = [$this->scheme,
- $this->iuserinfo,
- $this->ihost,
- $this->port,
- $this->ipath,
- $this->iquery,
- $this->ifragment,
- $return];
+ $cache[$iri] = [
+ $this->scheme,
+ $this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $this->ipath,
+ $this->iquery,
+ $this->ifragment,
+ $return
+ ];
+
return $return;
}
@@ -794,10 +809,12 @@ class IRI
$this->port = null;
return true;
} elseif (isset($cache[$authority])) {
- list($this->iuserinfo,
- $this->ihost,
- $this->port,
- $return) = $cache[$authority];
+ [
+ $this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $return
+ ] = $cache[$authority];
return $return;
}
@@ -809,7 +826,7 @@ class IRI
} else {
$iuserinfo = null;
}
- if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false) {
+ if (($port_start = strpos($remaining, ':', intval(strpos($remaining, ']')))) !== false) {
if (($port = substr($remaining, $port_start + 1)) === false) {
$port = null;
}
@@ -822,10 +839,12 @@ class IRI
$this->set_host($remaining) &&
$this->set_port($port);
- $cache[$authority] = [$this->iuserinfo,
- $this->ihost,
- $this->port,
- $return];
+ $cache[$authority] = [
+ $this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $return
+ ];
return $return;
}
diff --git a/vendor/simplepie/simplepie/src/Item.php b/vendor/simplepie/simplepie/src/Item.php
index 61fd35fa0..f25b50d04 100644
--- a/vendor/simplepie/simplepie/src/Item.php
+++ b/vendor/simplepie/simplepie/src/Item.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -53,7 +55,7 @@ namespace SimplePie;
* @package \SimplePie\SimplePie
* @subpackage API
*/
-class Item
+class Item implements RegistryAware
{
/**
* Parent feed
@@ -102,7 +104,7 @@ class Item
* @since 1.3
* @param \SimplePie\Registry $registry
*/
- public function set_registry(\SimplePie\Registry $registry)
+ public function set_registry(\SimplePie\Registry $registry)/* : void */
{
$this->registry = $registry;
}
@@ -253,9 +255,9 @@ class Item
{
if (!isset($this->data['title'])) {
if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'title')) {
- $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'title')) {
- $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'title')) {
$this->data['title'] = $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
} elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'title')) {
@@ -291,10 +293,10 @@ class Item
public function get_description($description_only = false)
{
if (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'summary')) &&
- ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
+ ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
return $return;
} elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'summary')) &&
- ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
+ ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
return $return;
} elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'description')) &&
($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($tags[0])))) {
@@ -341,10 +343,10 @@ class Item
public function get_content($content_only = false)
{
if (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'content')) &&
- ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
+ ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_10_content_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
return $return;
} elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'content')) &&
- ($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
+ ($return = $this->sanitize($tags[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$tags[0]['attribs']]), $this->get_base($tags[0])))) {
return $return;
} elseif (($tags = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) &&
($return = $this->sanitize($tags[0]['data'], \SimplePie\SimplePie::CONSTRUCT_HTML, $this->get_base($tags[0])))) {
@@ -368,7 +370,13 @@ class Item
{
if (!isset($this->data['thumbnail'])) {
if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'thumbnail')) {
- $this->data['thumbnail'] = $return[0]['attribs'][''];
+ $thumbnail = $return[0]['attribs'][''];
+ if (empty($thumbnail['url'])) {
+ $this->data['thumbnail'] = null;
+ } else {
+ $thumbnail['url'] = $this->sanitize($thumbnail['url'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($return[0]));
+ $this->data['thumbnail'] = $thumbnail;
+ }
} else {
$this->data['thumbnail'] = null;
}
@@ -419,7 +427,7 @@ class Item
if (isset($category['attribs']['']['label'])) {
$label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $categories[] = $this->registry->create('Category', [$term, $scheme, $label, $type]);
+ $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label, $type]);
}
foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, $type) as $category) {
// This is really the label, but keep this as the term also for BC.
@@ -430,15 +438,15 @@ class Item
} else {
$scheme = null;
}
- $categories[] = $this->registry->create('Category', [$term, $scheme, null, $type]);
+ $categories[] = $this->registry->create(Category::class, [$term, $scheme, null, $type]);
}
$type = 'subject';
foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, $type) as $category) {
- $categories[] = $this->registry->create('Category', [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null, $type]);
+ $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null, $type]);
}
foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, $type) as $category) {
- $categories[] = $this->registry->create('Category', [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null, $type]);
+ $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null, $type]);
}
if (!empty($categories)) {
@@ -507,7 +515,7 @@ class Item
$email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $uri !== null) {
- $contributors[] = $this->registry->create('Author', [$name, $uri, $email]);
+ $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
}
}
foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
@@ -524,7 +532,7 @@ class Item
$email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $url !== null) {
- $contributors[] = $this->registry->create('Author', [$name, $url, $email]);
+ $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
}
}
@@ -560,7 +568,7 @@ class Item
$email = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $uri !== null) {
- $authors[] = $this->registry->create('Author', [$name, $uri, $email]);
+ $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
}
}
if ($author = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'author')) {
@@ -577,20 +585,20 @@ class Item
$email = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $url !== null) {
- $authors[] = $this->registry->create('Author', [$name, $url, $email]);
+ $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
}
}
if ($author = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'author')) {
- $authors[] = $this->registry->create('Author', [null, null, $this->sanitize($author[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT)]);
+ $authors[] = $this->registry->create(Author::class, [null, null, $this->sanitize($author[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT)]);
}
foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'creator') as $author) {
- $authors[] = $this->registry->create('Author', [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
+ $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
}
foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'creator') as $author) {
- $authors[] = $this->registry->create('Author', [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
+ $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
}
foreach ((array) $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'author') as $author) {
- $authors[] = $this->registry->create('Author', [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
+ $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
}
if (!empty($authors)) {
@@ -615,7 +623,7 @@ class Item
public function get_copyright()
{
if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'rights')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'rights')) {
return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
} elseif ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'rights')) {
@@ -661,8 +669,8 @@ class Item
}
if (!empty($this->data['date']['raw'])) {
- $parser = $this->registry->call('Parse_Date', 'get');
- $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']);
+ $parser = $this->registry->call(Parse\Date::class, 'get');
+ $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']) ?: null;
} else {
$this->data['date'] = null;
}
@@ -703,8 +711,8 @@ class Item
}
if (!empty($this->data['updated']['raw'])) {
- $parser = $this->registry->call('Parse_Date', 'get');
- $this->data['updated']['parsed'] = $parser->parse($this->data['updated']['raw']);
+ $parser = $this->registry->call(Parse\Date::class, 'get');
+ $this->data['updated']['parsed'] = $parser->parse($this->data['updated']['raw']) ?: null;
} else {
$this->data['updated'] = null;
}
@@ -867,7 +875,7 @@ class Item
$keys = array_keys($this->data['links']);
foreach ($keys as $key) {
- if ($this->registry->call('Misc', 'is_isegment_nz_nc', [$key])) {
+ if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
if (isset($this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key])) {
$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key]);
$this->data['links'][$key] =& $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
@@ -967,7 +975,7 @@ class Item
if (isset($caption['data'])) {
$caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $captions_parent[] = $this->registry->create('Caption', [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
+ $captions_parent[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
}
} elseif ($captions = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'text')) {
foreach ($captions as $caption) {
@@ -991,7 +999,7 @@ class Item
if (isset($caption['data'])) {
$caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $captions_parent[] = $this->registry->create('Caption', [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
+ $captions_parent[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
}
}
if (is_array($captions_parent)) {
@@ -1014,7 +1022,7 @@ class Item
if (isset($category['attribs']['']['label'])) {
$label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $categories_parent[] = $this->registry->create('Category', [$term, $scheme, $label]);
+ $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
}
foreach ((array) $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'category') as $category) {
$term = null;
@@ -1031,7 +1039,7 @@ class Item
if (isset($category['attribs']['']['label'])) {
$label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $categories_parent[] = $this->registry->create('Category', [$term, $scheme, $label]);
+ $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
}
foreach ((array) $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'category') as $category) {
$term = null;
@@ -1040,14 +1048,14 @@ class Item
if (isset($category['attribs']['']['text'])) {
$label = $this->sanitize($category['attribs']['']['text'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $categories_parent[] = $this->registry->create('Category', [$term, $scheme, $label]);
+ $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
if (isset($category['child'][\SimplePie\SimplePie::NAMESPACE_ITUNES]['category'])) {
foreach ((array) $category['child'][\SimplePie\SimplePie::NAMESPACE_ITUNES]['category'] as $subcategory) {
if (isset($subcategory['attribs']['']['text'])) {
$label = $this->sanitize($subcategory['attribs']['']['text'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $categories_parent[] = $this->registry->create('Category', [$term, $scheme, $label]);
+ $categories_parent[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
}
}
}
@@ -1065,7 +1073,7 @@ class Item
if (isset($copyright[0]['data'])) {
$copyright_label = $this->sanitize($copyright[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $copyrights_parent = $this->registry->create('Copyright', [$copyright_url, $copyright_label]);
+ $copyrights_parent = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
} elseif ($copyright = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'copyright')) {
$copyright_url = null;
$copyright_label = null;
@@ -1075,7 +1083,7 @@ class Item
if (isset($copyright[0]['data'])) {
$copyright_label = $this->sanitize($copyright[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $copyrights_parent = $this->registry->create('Copyright', [$copyright_url, $copyright_label]);
+ $copyrights_parent = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
}
// CREDITS
@@ -1095,7 +1103,7 @@ class Item
if (isset($credit['data'])) {
$credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $credits_parent[] = $this->registry->create('Credit', [$credit_role, $credit_scheme, $credit_name]);
+ $credits_parent[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
}
} elseif ($credits = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'credit')) {
foreach ($credits as $credit) {
@@ -1113,7 +1121,7 @@ class Item
if (isset($credit['data'])) {
$credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $credits_parent[] = $this->registry->create('Credit', [$credit_role, $credit_scheme, $credit_name]);
+ $credits_parent[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
}
}
if (is_array($credits_parent)) {
@@ -1250,7 +1258,7 @@ class Item
if (isset($rating['data'])) {
$rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $ratings_parent[] = $this->registry->create('Rating', [$rating_scheme, $rating_value]);
+ $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
}
} elseif ($ratings = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'explicit')) {
foreach ($ratings as $rating) {
@@ -1259,7 +1267,7 @@ class Item
if (isset($rating['data'])) {
$rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $ratings_parent[] = $this->registry->create('Rating', [$rating_scheme, $rating_value]);
+ $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
}
} elseif ($ratings = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'rating')) {
foreach ($ratings as $rating) {
@@ -1273,7 +1281,7 @@ class Item
if (isset($rating['data'])) {
$rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $ratings_parent[] = $this->registry->create('Rating', [$rating_scheme, $rating_value]);
+ $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
}
} elseif ($ratings = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'explicit')) {
foreach ($ratings as $rating) {
@@ -1282,7 +1290,7 @@ class Item
if (isset($rating['data'])) {
$rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $ratings_parent[] = $this->registry->create('Rating', [$rating_scheme, $rating_value]);
+ $ratings_parent[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
}
}
if (is_array($ratings_parent)) {
@@ -1304,7 +1312,7 @@ class Item
if (isset($restriction['data'])) {
$restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $restrictions_parent[] = $this->registry->create('Restriction', [$restriction_relationship, $restriction_type, $restriction_value]);
+ $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
}
} elseif ($restrictions = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'block')) {
foreach ($restrictions as $restriction) {
@@ -1314,7 +1322,7 @@ class Item
if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') {
$restriction_relationship = 'deny';
}
- $restrictions_parent[] = $this->registry->create('Restriction', [$restriction_relationship, $restriction_type, $restriction_value]);
+ $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
}
} elseif ($restrictions = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_MEDIARSS, 'restriction')) {
foreach ($restrictions as $restriction) {
@@ -1330,7 +1338,7 @@ class Item
if (isset($restriction['data'])) {
$restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $restrictions_parent[] = $this->registry->create('Restriction', [$restriction_relationship, $restriction_type, $restriction_value]);
+ $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
}
} elseif ($restrictions = $parent->get_channel_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'block')) {
foreach ($restrictions as $restriction) {
@@ -1340,7 +1348,7 @@ class Item
if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes') {
$restriction_relationship = 'deny';
}
- $restrictions_parent[] = $this->registry->create('Restriction', [$restriction_relationship, $restriction_type, $restriction_value]);
+ $restrictions_parent[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
}
}
if (is_array($restrictions_parent)) {
@@ -1510,7 +1518,7 @@ class Item
if (isset($caption['data'])) {
$caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $captions[] = $this->registry->create('Caption', [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
+ $captions[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
}
if (is_array($captions)) {
$captions = array_values(array_unique($captions));
@@ -1537,7 +1545,7 @@ class Item
if (isset($caption['data'])) {
$caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $captions[] = $this->registry->create('Caption', [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
+ $captions[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
}
if (is_array($captions)) {
$captions = array_values(array_unique($captions));
@@ -1563,7 +1571,7 @@ class Item
if (isset($category['attribs']['']['label'])) {
$label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $categories[] = $this->registry->create('Category', [$term, $scheme, $label]);
+ $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
}
}
if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['category'])) {
@@ -1582,7 +1590,7 @@ class Item
if (isset($category['attribs']['']['label'])) {
$label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $categories[] = $this->registry->create('Category', [$term, $scheme, $label]);
+ $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
}
}
if (is_array($categories) && is_array($categories_parent)) {
@@ -1603,7 +1611,7 @@ class Item
if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'])) {
$copyright_label = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $copyrights = $this->registry->create('Copyright', [$copyright_url, $copyright_label]);
+ $copyrights = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
} elseif (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'])) {
$copyright_url = null;
$copyright_label = null;
@@ -1613,7 +1621,7 @@ class Item
if (isset($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'])) {
$copyright_label = $this->sanitize($group['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $copyrights = $this->registry->create('Copyright', [$copyright_url, $copyright_label]);
+ $copyrights = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
} else {
$copyrights = $copyrights_parent;
}
@@ -1635,7 +1643,7 @@ class Item
if (isset($credit['data'])) {
$credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $credits[] = $this->registry->create('Credit', [$credit_role, $credit_scheme, $credit_name]);
+ $credits[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
}
if (is_array($credits)) {
$credits = array_values(array_unique($credits));
@@ -1656,7 +1664,7 @@ class Item
if (isset($credit['data'])) {
$credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $credits[] = $this->registry->create('Credit', [$credit_role, $credit_scheme, $credit_name]);
+ $credits[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
}
if (is_array($credits)) {
$credits = array_values(array_unique($credits));
@@ -1762,7 +1770,7 @@ class Item
if (isset($rating['data'])) {
$rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $ratings[] = $this->registry->create('Rating', [$rating_scheme, $rating_value]);
+ $ratings[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
}
if (is_array($ratings)) {
$ratings = array_values(array_unique($ratings));
@@ -1779,7 +1787,7 @@ class Item
if (isset($rating['data'])) {
$rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $ratings[] = $this->registry->create('Rating', [$rating_scheme, $rating_value]);
+ $ratings[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
}
if (is_array($ratings)) {
$ratings = array_values(array_unique($ratings));
@@ -1803,7 +1811,7 @@ class Item
if (isset($restriction['data'])) {
$restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $restrictions[] = $this->registry->create('Restriction', [$restriction_relationship, $restriction_type, $restriction_value]);
+ $restrictions[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
}
if (is_array($restrictions)) {
$restrictions = array_values(array_unique($restrictions));
@@ -1822,7 +1830,7 @@ class Item
if (isset($restriction['data'])) {
$restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $restrictions[] = $this->registry->create('Restriction', [$restriction_relationship, $restriction_type, $restriction_value]);
+ $restrictions[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
}
if (is_array($restrictions)) {
$restrictions = array_values(array_unique($restrictions));
@@ -1859,7 +1867,7 @@ class Item
$title = $title_parent;
}
- $this->data['enclosures'][] = $this->registry->create('Enclosure', [$url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width]);
+ $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width]);
}
}
}
@@ -1966,7 +1974,7 @@ class Item
if (isset($caption['data'])) {
$caption_text = $this->sanitize($caption['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $captions[] = $this->registry->create('Caption', [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
+ $captions[] = $this->registry->create(Caption::class, [$caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text]);
}
if (is_array($captions)) {
$captions = array_values(array_unique($captions));
@@ -1992,7 +2000,7 @@ class Item
if (isset($category['attribs']['']['label'])) {
$label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $categories[] = $this->registry->create('Category', [$term, $scheme, $label]);
+ $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
}
}
if (is_array($categories) && is_array($categories_parent)) {
@@ -2015,7 +2023,7 @@ class Item
if (isset($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'])) {
$copyright_label = $this->sanitize($content['child'][\SimplePie\SimplePie::NAMESPACE_MEDIARSS]['copyright'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $copyrights = $this->registry->create('Copyright', [$copyright_url, $copyright_label]);
+ $copyrights = $this->registry->create(Copyright::class, [$copyright_url, $copyright_label]);
} else {
$copyrights = $copyrights_parent;
}
@@ -2037,7 +2045,7 @@ class Item
if (isset($credit['data'])) {
$credit_name = $this->sanitize($credit['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $credits[] = $this->registry->create('Credit', [$credit_role, $credit_scheme, $credit_name]);
+ $credits[] = $this->registry->create(Credit::class, [$credit_role, $credit_scheme, $credit_name]);
}
if (is_array($credits)) {
$credits = array_values(array_unique($credits));
@@ -2113,7 +2121,7 @@ class Item
if (isset($rating['data'])) {
$rating_value = $this->sanitize($rating['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $ratings[] = $this->registry->create('Rating', [$rating_scheme, $rating_value]);
+ $ratings[] = $this->registry->create(Rating::class, [$rating_scheme, $rating_value]);
}
if (is_array($ratings)) {
$ratings = array_values(array_unique($ratings));
@@ -2137,7 +2145,7 @@ class Item
if (isset($restriction['data'])) {
$restriction_value = $this->sanitize($restriction['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $restrictions[] = $this->registry->create('Restriction', [$restriction_relationship, $restriction_type, $restriction_value]);
+ $restrictions[] = $this->registry->create(Restriction::class, [$restriction_relationship, $restriction_type, $restriction_value]);
}
if (is_array($restrictions)) {
$restrictions = array_values(array_unique($restrictions));
@@ -2167,7 +2175,7 @@ class Item
$title = $title_parent;
}
- $this->data['enclosures'][] = $this->registry->create('Enclosure', [$url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width]);
+ $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width]);
}
}
}
@@ -2204,7 +2212,7 @@ class Item
}
// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
- $this->data['enclosures'][] = $this->registry->create('Enclosure', [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width]);
+ $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width]);
}
}
@@ -2235,12 +2243,12 @@ class Item
}
// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
- $this->data['enclosures'][] = $this->registry->create('Enclosure', [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
+ $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
}
}
- if ($enclosure = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'enclosure')) {
- if (isset($enclosure[0]['attribs']['']['url'])) {
+ foreach ($this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'enclosure') ?? [] as $enclosure) {
+ if (isset($enclosure['attribs']['']['url'])) {
// Attributes
$bitrate = null;
$channels = null;
@@ -2257,23 +2265,23 @@ class Item
$url = null;
$width = null;
- $url = $this->sanitize($enclosure[0]['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($enclosure[0]));
+ $url = $this->sanitize($enclosure['attribs']['']['url'], \SimplePie\SimplePie::CONSTRUCT_IRI, $this->get_base($enclosure));
$url = $this->feed->sanitize->https_url($url);
- if (isset($enclosure[0]['attribs']['']['type'])) {
- $type = $this->sanitize($enclosure[0]['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
+ if (isset($enclosure['attribs']['']['type'])) {
+ $type = $this->sanitize($enclosure['attribs']['']['type'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- if (isset($enclosure[0]['attribs']['']['length'])) {
- $length = intval($enclosure[0]['attribs']['']['length']);
+ if (isset($enclosure['attribs']['']['length'])) {
+ $length = intval($enclosure['attribs']['']['length']);
}
// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
- $this->data['enclosures'][] = $this->registry->create('Enclosure', [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
+ $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
}
}
if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width)) {
// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
- $this->data['enclosures'][] = $this->registry->create('Enclosure', [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
+ $this->data['enclosures'][] = $this->registry->create(Enclosure::class, [$url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width]);
}
$this->data['enclosures'] = array_values(array_unique($this->data['enclosures']));
@@ -2342,7 +2350,7 @@ class Item
public function get_source()
{
if ($return = $this->get_item_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'source')) {
- return $this->registry->create('Source', [$this, $return[0]]);
+ return $this->registry->create(Source::class, [$this, $return[0]]);
}
return null;
diff --git a/vendor/simplepie/simplepie/src/Locator.php b/vendor/simplepie/simplepie/src/Locator.php
index 2eebf10df..1dc005b47 100644
--- a/vendor/simplepie/simplepie/src/Locator.php
+++ b/vendor/simplepie/simplepie/src/Locator.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -51,7 +53,7 @@ namespace SimplePie;
*
* @package SimplePie
*/
-class Locator
+class Locator implements RegistryAware
{
public $useragent;
public $timeout;
@@ -93,7 +95,7 @@ class Locator
}
}
- public function set_registry(\SimplePie\Registry $registry)
+ public function set_registry(\SimplePie\Registry $registry)/* : void */
{
$this->registry = $registry;
}
@@ -105,7 +107,7 @@ class Locator
}
if ($this->file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE) {
- $sniffer = $this->registry->create('Content_Type_Sniffer', [$this->file]);
+ $sniffer = $this->registry->create(Content\Type\Sniffer::class, [$this->file]);
if ($sniffer->get_type() !== 'text/html') {
return null;
}
@@ -142,7 +144,7 @@ class Locator
public function is_feed($file, $check_html = false)
{
if ($file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE) {
- $sniffer = $this->registry->create('Content_Type_Sniffer', [$file]);
+ $sniffer = $this->registry->create(Content\Type\Sniffer::class, [$file]);
$sniffed = $sniffer->get_type();
$mime_types = ['application/rss+xml', 'application/rdf+xml',
'text/rdf', 'application/atom+xml', 'text/xml',
@@ -169,7 +171,7 @@ class Locator
$elements = $this->dom->getElementsByTagName('base');
foreach ($elements as $element) {
if ($element->hasAttribute('href')) {
- $base = $this->registry->call('Misc', 'absolutize_url', [trim($element->getAttribute('href')), $this->http_base]);
+ $base = $this->registry->call(Misc::class, 'absolutize_url', [trim($element->getAttribute('href')), $this->http_base]);
if ($base === false) {
continue;
}
@@ -207,24 +209,24 @@ class Locator
break;
}
if ($link->hasAttribute('href') && $link->hasAttribute('rel')) {
- $rel = array_unique($this->registry->call('Misc', 'space_separated_tokens', [strtolower($link->getAttribute('rel'))]));
+ $rel = array_unique($this->registry->call(Misc::class, 'space_separated_tokens', [strtolower($link->getAttribute('rel'))]));
$line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
if ($this->base_location < $line) {
- $href = $this->registry->call('Misc', 'absolutize_url', [trim($link->getAttribute('href')), $this->base]);
+ $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->base]);
} else {
- $href = $this->registry->call('Misc', 'absolutize_url', [trim($link->getAttribute('href')), $this->http_base]);
+ $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->http_base]);
}
if ($href === false) {
continue;
}
- if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call('Misc', 'parse_mime', [$link->getAttribute('type')])), ['text/html', 'application/rss+xml', 'application/atom+xml'])) && !isset($feeds[$href])) {
+ if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call(Misc::class, 'parse_mime', [$link->getAttribute('type')])), ['text/html', 'application/rss+xml', 'application/atom+xml'])) && !isset($feeds[$href])) {
$this->checked_feeds++;
$headers = [
'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
];
- $feed = $this->registry->create('File', [$href, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
+ $feed = $this->registry->create(File::class, [$href, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
if ($feed->success && ($feed->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed, true)) {
$feeds[$href] = $feed;
}
@@ -246,18 +248,18 @@ class Locator
foreach ($links as $link) {
if ($link->hasAttribute('href')) {
$href = trim($link->getAttribute('href'));
- $parsed = $this->registry->call('Misc', 'parse_url', [$href]);
+ $parsed = $this->registry->call(Misc::class, 'parse_url', [$href]);
if ($parsed['scheme'] === '' || preg_match('/^(https?|feed)?$/i', $parsed['scheme'])) {
if (method_exists($link, 'getLineNo') && $this->base_location < $link->getLineNo()) {
- $href = $this->registry->call('Misc', 'absolutize_url', [trim($link->getAttribute('href')), $this->base]);
+ $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->base]);
} else {
- $href = $this->registry->call('Misc', 'absolutize_url', [trim($link->getAttribute('href')), $this->http_base]);
+ $href = $this->registry->call(Misc::class, 'absolutize_url', [trim($link->getAttribute('href')), $this->http_base]);
}
if ($href === false) {
continue;
}
- $current = $this->registry->call('Misc', 'parse_url', [$this->file->url]);
+ $current = $this->registry->call(Misc::class, 'parse_url', [$this->file->url]);
if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority']) {
$this->local[] = $href;
@@ -290,26 +292,22 @@ class Locator
$query = '//a[@rel and @href] | //link[@rel and @href]';
foreach ($xpath->query($query) as $link) {
$href = trim($link->getAttribute('href'));
- $parsed = $this->registry->call('Misc', 'parse_url', [$href]);
+ $parsed = $this->registry->call(Misc::class, 'parse_url', [$href]);
if ($parsed['scheme'] === '' ||
preg_match('/^https?$/i', $parsed['scheme'])) {
if (method_exists($link, 'getLineNo') &&
$this->base_location < $link->getLineNo()) {
- $href =
- $this->registry->call(
- 'Misc',
- 'absolutize_url',
- [trim($link->getAttribute('href')),
- $this->base]
- );
+ $href = $this->registry->call(
+ Misc::class,
+ 'absolutize_url',
+ [trim($link->getAttribute('href')), $this->base]
+ );
} else {
- $href =
- $this->registry->call(
- 'Misc',
- 'absolutize_url',
- [trim($link->getAttribute('href')),
- $this->http_base]
- );
+ $href = $this->registry->call(
+ Misc::class,
+ 'absolutize_url',
+ [trim($link->getAttribute('href')), $this->http_base]
+ );
}
if ($href === false) {
return null;
@@ -335,7 +333,7 @@ class Locator
$headers = [
'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
];
- $feed = $this->registry->create('File', [$value, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
+ $feed = $this->registry->create(File::class, [$value, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
if ($feed->success && ($feed->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) {
return [$feed];
} else {
@@ -357,7 +355,7 @@ class Locator
$headers = [
'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
];
- $feed = $this->registry->create('File', [$value, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen, $this->curl_options]);
+ $feed = $this->registry->create(File::class, [$value, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen, $this->curl_options]);
if ($feed->success && ($feed->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed)) {
return [$feed];
} else {
diff --git a/vendor/simplepie/simplepie/src/Misc.php b/vendor/simplepie/simplepie/src/Misc.php
index b40a1b8ef..87d7f6e2c 100644
--- a/vendor/simplepie/simplepie/src/Misc.php
+++ b/vendor/simplepie/simplepie/src/Misc.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -43,6 +45,8 @@
namespace SimplePie;
+use SimplePie\XML\Declaration\Parser;
+
/**
* Miscellaneous utilities
*
@@ -89,14 +93,14 @@ class Misc
/**
* Get a HTML/XML element from a HTML string
*
- * @deprecated Use DOMDocument instead (parsing HTML with regex is bad!)
+ * @deprecated since SimplePie 1.3, use DOMDocument instead (parsing HTML with regex is bad!)
* @param string $realname Element name (including namespace prefix if applicable)
* @param string $string HTML document
* @return array
*/
public static function get_element($realname, $string)
{
- // trigger_error(sprintf('Using method "' . __METHOD__ . '" is deprecated since SimplePie 1.7, use "DOMDocument" instead.'), \E_USER_DEPRECATED);
+ // trigger_error(sprintf('Using method "' . __METHOD__ . '" is deprecated since SimplePie 1.3, use "DOMDocument" instead.'), \E_USER_DEPRECATED);
$return = [];
$name = preg_quote($realname, '/');
@@ -142,7 +146,7 @@ class Misc
public static function error($message, $level, $file, $line)
{
- if ((ini_get('error_reporting') & $level) > 0) {
+ if ((error_reporting() & $level) > 0) {
switch ($level) {
case E_USER_ERROR:
$note = 'PHP Error';
@@ -199,6 +203,9 @@ class Misc
return $url;
}
+ /**
+ * @deprecated since SimplePie 1.8.0, use PHP native array_replace_recursive() instead.
+ */
public static function array_merge_recursive($array1, $array2)
{
foreach ($array2 as $key => $value) {
@@ -1724,13 +1731,13 @@ class Misc
/**
* Decode HTML entities
*
- * @deprecated Use DOMDocument instead
+ * @deprecated since SimplePie 1.3, use DOMDocument instead
* @param string $data Input data
* @return string Output data
*/
public static function entities_decode($data)
{
- // trigger_error(sprintf('Using method "' . __METHOD__ . '" is deprecated since SimplePie 1.7, use "DOMDocument" instead.'), \E_USER_DEPRECATED);
+ // trigger_error(sprintf('Using method "' . __METHOD__ . '" is deprecated since SimplePie 1.3, use "DOMDocument" instead.'), \E_USER_DEPRECATED);
$decoder = new \SimplePie_Decode_HTML_Entities($data);
return $decoder->parse();
@@ -1796,7 +1803,7 @@ class Misc
public static function atom_03_construct_type($attribs)
{
- if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) === 'base64')) {
+ if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode'])) === 'base64') {
$mode = \SimplePie\SimplePie::CONSTRUCT_BASE64;
} else {
$mode = \SimplePie\SimplePie::CONSTRUCT_NONE;
@@ -1933,7 +1940,7 @@ class Misc
foreach ($str as $section) {
if (strpos($section, '=') !== false) {
- list($name, $value) = explode('=', $section, 2);
+ [$name, $value] = explode('=', $section, 2);
$return[urldecode($name)][] = urldecode($value);
} else {
$return[urldecode($section)][] = null;
@@ -1976,7 +1983,7 @@ class Misc
// UTF-32 Big Endian Without BOM
elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C") {
if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E")) {
- $parser = $registry->create('XML_Declaration_Parser', [Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')]);
+ $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')]);
if ($parser->parse()) {
$encoding[] = $parser->encoding;
}
@@ -1986,7 +1993,7 @@ class Misc
// UTF-32 Little Endian Without BOM
elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00") {
if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00")) {
- $parser = $registry->create('XML_Declaration_Parser', [Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')]);
+ $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')]);
if ($parser->parse()) {
$encoding[] = $parser->encoding;
}
@@ -1996,7 +2003,7 @@ class Misc
// UTF-16 Big Endian Without BOM
elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C") {
if ($pos = strpos($data, "\x00\x3F\x00\x3E")) {
- $parser = $registry->create('XML_Declaration_Parser', [Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')]);
+ $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')]);
if ($parser->parse()) {
$encoding[] = $parser->encoding;
}
@@ -2006,7 +2013,7 @@ class Misc
// UTF-16 Little Endian Without BOM
elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00") {
if ($pos = strpos($data, "\x3F\x00\x3E\x00")) {
- $parser = $registry->create('XML_Declaration_Parser', [Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')]);
+ $parser = $registry->create(Parser::class, [Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')]);
if ($parser->parse()) {
$encoding[] = $parser->encoding;
}
@@ -2016,7 +2023,7 @@ class Misc
// US-ASCII (or superset)
elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C") {
if ($pos = strpos($data, "\x3F\x3E")) {
- $parser = $registry->create('XML_Declaration_Parser', [substr($data, 5, $pos - 5)]);
+ $parser = $registry->create(Parser::class, [substr($data, 5, $pos - 5)]);
if ($parser->parse()) {
$encoding[] = $parser->encoding;
}
@@ -2076,7 +2083,7 @@ END;
return static::$SIMPLEPIE_BUILD;
}
- $root = dirname(dirname(__FILE__));
+ $root = dirname(__FILE__, 2);
if (file_exists($root . '/.git/index')) {
static::$SIMPLEPIE_BUILD = filemtime($root . '/.git/index');
diff --git a/vendor/simplepie/simplepie/src/Net/IPv6.php b/vendor/simplepie/simplepie/src/Net/IPv6.php
index 8f192cbfb..da25f8353 100644
--- a/vendor/simplepie/simplepie/src/Net/IPv6.php
+++ b/vendor/simplepie/simplepie/src/Net/IPv6.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -81,7 +83,7 @@ class IPv6
$c1 = -1;
$c2 = -1;
if (substr_count($ip, '::') === 1) {
- list($ip1, $ip2) = explode('::', $ip);
+ [$ip1, $ip2] = explode('::', $ip);
if ($ip1 === '') {
$c1 = -1;
} else {
@@ -197,7 +199,7 @@ class IPv6
public static function check_ipv6($ip)
{
$ip = self::uncompress($ip);
- list($ipv6, $ipv4) = self::split_v6_v4($ip);
+ [$ipv6, $ipv4] = self::split_v6_v4($ip);
$ipv6 = explode(':', $ipv6);
$ipv4 = explode('.', $ipv4);
if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4) {
diff --git a/vendor/simplepie/simplepie/src/Parse/Date.php b/vendor/simplepie/simplepie/src/Parse/Date.php
index 91f082b97..4792bc5e6 100644
--- a/vendor/simplepie/simplepie/src/Parse/Date.php
+++ b/vendor/simplepie/simplepie/src/Parse/Date.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -658,7 +660,7 @@ class Date
*
* @final
* @access public
- * @param callback $callback
+ * @param callable $callback
*/
public function add_callback($callback)
{
@@ -679,54 +681,66 @@ class Date
*/
public function date_w3cdtf($date)
{
- static $pcre;
- if (!$pcre) {
- $year = '([0-9]{4})';
- $month = $day = $hour = $minute = $second = '([0-9]{2})';
- $decimal = '([0-9]*)';
- $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))';
- $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/';
- }
+ $pcre = <<<'PCRE'
+ /
+ ^
+ (?P<year>[0-9]{4})
+ (?:
+ -?
+ (?P<month>[0-9]{2})
+ (?:
+ -?
+ (?P<day>[0-9]{2})
+ (?:
+ [Tt\x09\x20]+
+ (?P<hour>[0-9]{2})
+ (?:
+ :?
+ (?P<minute>[0-9]{2})
+ (?:
+ :?
+ (?P<second>[0-9]{2})
+ (?:
+ .
+ (?P<second_fraction>[0-9]*)
+ )?
+ )?
+ )?
+ (?:
+ (?P<zulu>Z)
+ | (?P<tz_sign>[+\-])
+ (?P<tz_hour>[0-9]{1,2})
+ :?
+ (?P<tz_minute>[0-9]{1,2})
+ )
+ )?
+ )?
+ )?
+ $
+ /x
+PCRE;
if (preg_match($pcre, $date, $match)) {
- /*
- Capturing subpatterns:
- 1: Year
- 2: Month
- 3: Day
- 4: Hour
- 5: Minute
- 6: Second
- 7: Decimal fraction of a second
- 8: Zulu
- 9: Timezone ±
- 10: Timezone hours
- 11: Timezone minutes
- */
-
- // Fill in empty matches
- for ($i = count($match); $i <= 3; $i++) {
- $match[$i] = '1';
- }
-
- for ($i = count($match); $i <= 7; $i++) {
- $match[$i] = '0';
- }
+ // Fill in empty matches and convert to proper types.
+ $year = (int) $match['year'];
+ $month = isset($match['month']) ? (int) $match['month'] : 1;
+ $day = isset($match['day']) ? (int) $match['day'] : 1;
+ $hour = isset($match['hour']) ? (int) $match['hour'] : 0;
+ $minute = isset($match['minute']) ? (int) $match['minute'] : 0;
+ $second = isset($match['second']) ? (int) $match['second'] : 0;
+ $second_fraction = isset($match['second_fraction']) ? ((int) $match['second_fraction']) / (10 ** strlen($match['second_fraction'])) : 0;
+ $tz_sign = ($match['tz_sign'] ?? '') === '-' ? -1 : 1;
+ $tz_hour = isset($match['tz_hour']) ? (int) $match['tz_hour'] : 0;
+ $tz_minute = isset($match['tz_minute']) ? (int) $match['tz_minute'] : 0;
// Numeric timezone
- if (isset($match[9]) && $match[9] !== '') {
- $timezone = $match[10] * 3600;
- $timezone += $match[11] * 60;
- if ($match[9] === '-') {
- $timezone = 0 - $timezone;
- }
- } else {
- $timezone = 0;
- }
+ $timezone = $tz_hour * 3600;
+ $timezone += $tz_minute * 60;
+ $timezone *= $tz_sign;
// Convert the number of seconds to an integer, taking decimals into account
- $second = round((int)$match[6] + (int)$match[7] / (10 ** strlen($match[7])));
+ $second = (int) round($second + $second_fraction);
- return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone;
+ return gmmktime($hour, $minute, $second, $month, $day, $year) - $timezone;
}
return false;
@@ -855,7 +869,7 @@ class Date
$second = 0;
}
- return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone;
+ return gmmktime(intval($match[5]), intval($match[6]), intval($second), intval($month), intval($match[2]), intval($match[4])) - $timezone;
}
return false;
@@ -949,7 +963,7 @@ class Date
*/
$month = $this->month[strtolower($match[2])];
- return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]);
+ return gmmktime((int) $match[4], (int) $match[5], (int) $match[6], $month, (int) $match[3], (int) $match[7]);
}
return false;
diff --git a/vendor/simplepie/simplepie/src/Parser.php b/vendor/simplepie/simplepie/src/Parser.php
index 25c379ef6..4987825e6 100644
--- a/vendor/simplepie/simplepie/src/Parser.php
+++ b/vendor/simplepie/simplepie/src/Parser.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -43,6 +45,8 @@
namespace SimplePie;
+use SimplePie\XML\Declaration\Parser as DeclarationParser;
+
/**
* Parses XML into something sane
*
@@ -52,7 +56,7 @@ namespace SimplePie;
* @package SimplePie
* @subpackage Parsing
*/
-class Parser
+class Parser implements RegistryAware
{
public $error_code;
public $error_string;
@@ -71,7 +75,7 @@ class Parser
public $encoding;
protected $registry;
- public function set_registry(\SimplePie\Registry $registry)
+ public function set_registry(\SimplePie\Registry $registry)/* : void */
{
$this->registry = $registry;
}
@@ -122,7 +126,7 @@ class Parser
}
if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false) {
- $declaration = $this->registry->create('XML_Declaration_Parser', [substr($data, 5, $pos - 5)]);
+ $declaration = $this->registry->create(DeclarationParser::class, [substr($data, 5, $pos - 5)]);
if ($declaration->parse()) {
$data = substr($data, $pos + 2);
$data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' ."\n". $this->declare_html_entities() . $data;
@@ -183,7 +187,6 @@ class Parser
$xml->xml($data);
while (@$xml->read()) {
switch ($xml->nodeType) {
-
case constant('XMLReader::END_ELEMENT'):
if ($xml->namespaceURI !== '') {
$tagName = $xml->namespaceURI . $this->separator . $xml->localName;
@@ -263,16 +266,16 @@ class Parser
public function tag_open($parser, $tag, $attributes)
{
- list($this->namespace[], $this->element[]) = $this->split_ns($tag);
+ [$this->namespace[], $this->element[]] = $this->split_ns($tag);
$attribs = [];
foreach ($attributes as $name => $value) {
- list($attrib_namespace, $attribute) = $this->split_ns($name);
+ [$attrib_namespace, $attribute] = $this->split_ns($name);
$attribs[$attrib_namespace][$attribute] = $value;
}
if (isset($attribs[\SimplePie\SimplePie::NAMESPACE_XML]['base'])) {
- $base = $this->registry->call('Misc', 'absolutize_url', [$attribs[\SimplePie\SimplePie::NAMESPACE_XML]['base'], end($this->xml_base)]);
+ $base = $this->registry->call(Misc::class, 'absolutize_url', [$attribs[\SimplePie\SimplePie::NAMESPACE_XML]['base'], end($this->xml_base)]);
if ($base !== false) {
$this->xml_base[] = $base;
$this->xml_base_explicit[] = true;
@@ -394,7 +397,7 @@ class Parser
return '<a class="h-card" href="'.$link.'">'.$person_tag.$name.'</a>';
}
}
- return isset($data['value']) ? $data['value'] : '';
+ return $data['value'] ?? '';
}
private function parse_microformats(&$data, $url)
@@ -477,8 +480,7 @@ class Parser
// author is a special case, it can be plain text or an h-card array.
// If it's plain text it can also be a url that should be followed to
// get the actual h-card.
- $author = isset($entry['properties']['author'][0]) ?
- $entry['properties']['author'][0] : $feed_author;
+ $author = $entry['properties']['author'][0] ?? $feed_author;
if (!is_string($author)) {
$author = $this->parse_hcard($author);
} elseif (strpos($author, 'http') === 0) {
diff --git a/vendor/simplepie/simplepie/src/Rating.php b/vendor/simplepie/simplepie/src/Rating.php
index 70e018ad7..f4f303d99 100644
--- a/vendor/simplepie/simplepie/src/Rating.php
+++ b/vendor/simplepie/simplepie/src/Rating.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Registry.php b/vendor/simplepie/simplepie/src/Registry.php
index 1db2a619e..8e2ea13e3 100644
--- a/vendor/simplepie/simplepie/src/Registry.php
+++ b/vendor/simplepie/simplepie/src/Registry.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -43,6 +45,10 @@
namespace SimplePie;
+use SimplePie\Content\Type\Sniffer;
+use SimplePie\Parse\Date;
+use SimplePie\XML\Declaration\Parser as DeclarationParser;
+
/**
* Handles creating objects and calling methods
*
@@ -57,9 +63,53 @@ class Registry
*
* Overriding classes *must* subclass these.
*
- * @var array
+ * @var array<class-string, class-string>
*/
protected $default = [
+ Cache::class => Cache::class,
+ Locator::class => Locator::class,
+ Parser::class => Parser::class,
+ File::class => File::class,
+ Sanitize::class => Sanitize::class,
+ Item::class => Item::class,
+ Author::class => Author::class,
+ Category::class => Category::class,
+ Enclosure::class => Enclosure::class,
+ Caption::class => Caption::class,
+ Copyright::class => Copyright::class,
+ Credit::class => Credit::class,
+ Rating::class => Rating::class,
+ Restriction::class => Restriction::class,
+ Sniffer::class => Sniffer::class,
+ Source::class => Source::class,
+ Misc::class => Misc::class,
+ DeclarationParser::class => DeclarationParser::class,
+ Date::class => Date::class,
+ ];
+
+ /**
+ * Class mapping
+ *
+ * @see register()
+ * @var array
+ */
+ protected $classes = [];
+
+ /**
+ * Legacy classes
+ *
+ * @see register()
+ * @var array<class-string>
+ */
+ protected $legacy = [];
+
+ /**
+ * Legacy types
+ *
+ * @see register()
+ * @var array<string, class-string>
+ */
+ private $legacyTypes = [
'Cache' => Cache::class,
'Locator' => Locator::class,
'Parser' => Parser::class,
@@ -74,30 +124,14 @@ class Registry
'Credit' => Credit::class,
'Rating' => Rating::class,
'Restriction' => Restriction::class,
- 'Content_Type_Sniffer' => Content\Type\Sniffer::class,
+ 'Content_Type_Sniffer' => Sniffer::class,
'Source' => Source::class,
'Misc' => Misc::class,
- 'XML_Declaration_Parser' => XML\Declaration\Parser::class,
- 'Parse_Date' => Parse\Date::class,
+ 'XML_Declaration_Parser' => DeclarationParser::class,
+ 'Parse_Date' => Date::class,
];
/**
- * Class mapping
- *
- * @see register()
- * @var array
- */
- protected $classes = [];
-
- /**
- * Legacy classes
- *
- * @see register()
- * @var array
- */
- protected $legacy = [];
-
- /**
* Constructor
*
* No-op
@@ -110,13 +144,30 @@ class Registry
* Register a class
*
* @param string $type See {@see $default} for names
- * @param string $class Class name, must subclass the corresponding default
+ * @param class-string $class Class name, must subclass the corresponding default
* @param bool $legacy Whether to enable legacy support for this class
* @return bool Successfulness
*/
public function register($type, $class, $legacy = false)
{
- if (!@is_subclass_of($class, $this->default[$type])) {
+ if (array_key_exists($type, $this->legacyTypes)) {
+ // trigger_error(sprintf('"%s"(): Using argument #1 ($type) with value "%s" is deprecated since SimplePie 1.8.0, use class-string "%s" instead.', __METHOD__, $type, $this->legacyTypes[$type]), \E_USER_DEPRECATED);
+
+ $type = $this->legacyTypes[$type];
+ }
+
+ if (! array_key_exists($type, $this->default)) {
+ return false;
+ }
+
+ if (!class_exists($class)) {
+ return false;
+ }
+
+ /** @var string */
+ $base_class = $this->default[$type];
+
+ if (!is_subclass_of($class, $base_class)) {
return false;
}
@@ -134,43 +185,43 @@ class Registry
*
* Where possible, use {@see create()} or {@see call()} instead
*
- * @param string $type
- * @return string|null
+ * @template T
+ * @param class-string<T> $type
+ * @return class-string<T>|null
*/
public function get_class($type)
{
- if (!empty($this->classes[$type])) {
- return $this->classes[$type];
+ if (array_key_exists($type, $this->legacyTypes)) {
+ // trigger_error(sprintf('"%s"(): Using argument #1 ($type) with value "%s" is deprecated since SimplePie 1.8.0, use class-string "%s" instead.', __METHOD__, $type, $this->legacyTypes[$type]), \E_USER_DEPRECATED);
+
+ $type = $this->legacyTypes[$type];
}
- if (!empty($this->default[$type])) {
- return $this->default[$type];
+
+ if (! array_key_exists($type, $this->default)) {
+ return null;
+ }
+
+ $class = $this->default[$type];
+
+ if (array_key_exists($type, $this->classes)) {
+ $class = $this->classes[$type];
}
- return null;
+ return $class;
}
/**
* Create a new instance of a given type
*
- * @param string $type
+ * @template T class-string $type
+ * @param class-string<T> $type
* @param array $parameters Parameters to pass to the constructor
- * @return object Instance of class
+ * @return T Instance of class
*/
public function &create($type, $parameters = [])
{
$class = $this->get_class($type);
- if (in_array($class, $this->legacy)) {
- switch ($type) {
- case 'locator':
- // Legacy: file, timeout, useragent, file_class, max_checked_feeds, content_type_sniffer_class
- // Specified: file, timeout, useragent, max_checked_feeds
- $replacement = [$this->get_class('file'), $parameters[3], $this->get_class('content_type_sniffer')];
- array_splice($parameters, 3, 1, $replacement);
- break;
- }
- }
-
if (!method_exists($class, '__construct')) {
$instance = new $class();
} else {
@@ -178,7 +229,10 @@ class Registry
$instance = $reflector->newInstanceArgs($parameters);
}
- if (method_exists($instance, 'set_registry')) {
+ if ($instance instanceof RegistryAware) {
+ $instance->set_registry($this);
+ } elseif (method_exists($instance, 'set_registry')) {
+ trigger_error(sprintf('Using the method "set_registry()" without implementing "%s" is deprecated since SimplePie 1.8.0, implement "%s" in "%s".', RegistryAware::class, RegistryAware::class, $class), \E_USER_DEPRECATED);
$instance->set_registry($this);
}
return $instance;
@@ -187,7 +241,7 @@ class Registry
/**
* Call a static method for a type
*
- * @param string $type
+ * @param class-string $type
* @param string $method
* @param array $parameters
* @return mixed
@@ -198,7 +252,7 @@ class Registry
if (in_array($class, $this->legacy)) {
switch ($type) {
- case 'Cache':
+ case Cache::class:
// For backwards compatibility with old non-static
// Cache::create() methods in PHP < 8.0.
// No longer supported as of PHP 8.0.
diff --git a/vendor/simplepie/simplepie/src/RegistryAware.php b/vendor/simplepie/simplepie/src/RegistryAware.php
new file mode 100644
index 000000000..9d60bdd0f
--- /dev/null
+++ b/vendor/simplepie/simplepie/src/RegistryAware.php
@@ -0,0 +1,65 @@
+<?php
+
+declare(strict_types=1);
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2022, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * * Neither the name of the SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package SimplePie
+ * @copyright 2004-2022 Ryan Parman, Sam Sneddon, Ryan McCue
+ * @author Ryan Parman
+ * @author Sam Sneddon
+ * @author Ryan McCue
+ * @link http://simplepie.org/ SimplePie
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ */
+
+namespace SimplePie;
+
+/**
+ * Handles the injection of Registry into other class
+ *
+ * {@see \SimplePie\SimplePie::get_registry()}
+ *
+ * @package SimplePie
+ */
+interface RegistryAware
+{
+ /**
+ * Set the Registry into the class
+ *
+ * @param Registry $registry
+ *
+ * @return void
+ */
+ public function set_registry(Registry $registry)/* : void */;
+}
diff --git a/vendor/simplepie/simplepie/src/Restriction.php b/vendor/simplepie/simplepie/src/Restriction.php
index bd7a0e951..42b456a1c 100644
--- a/vendor/simplepie/simplepie/src/Restriction.php
+++ b/vendor/simplepie/simplepie/src/Restriction.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
diff --git a/vendor/simplepie/simplepie/src/Sanitize.php b/vendor/simplepie/simplepie/src/Sanitize.php
index 55103461e..1f15bb967 100644
--- a/vendor/simplepie/simplepie/src/Sanitize.php
+++ b/vendor/simplepie/simplepie/src/Sanitize.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -43,6 +45,13 @@
namespace SimplePie;
+use InvalidArgumentException;
+use SimplePie\Cache\Base;
+use SimplePie\Cache\BaseDataCache;
+use SimplePie\Cache\CallableNameFilter;
+use SimplePie\Cache\DataCache;
+use SimplePie\Cache\NameFilter;
+
/**
* Used for data cleanup and post-processing
*
@@ -52,7 +61,7 @@ namespace SimplePie;
* @package SimplePie
* @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags
*/
-class Sanitize
+class Sanitize implements RegistryAware
{
// Private vars
public $base;
@@ -70,6 +79,11 @@ class Sanitize
public $enable_cache = true;
public $cache_location = './cache';
public $cache_name_function = 'md5';
+
+ /**
+ * @var NameFilter
+ */
+ private $cache_namefilter;
public $timeout = 10;
public $useragent = '';
public $force_fsockopen = false;
@@ -77,6 +91,16 @@ class Sanitize
public $registry;
/**
+ * @var DataCache|null
+ */
+ private $cache = null;
+
+ /**
+ * @var int Cache duration (in seconds)
+ */
+ private $cache_duration = 3600;
+
+ /**
* List of domains for which to force HTTPS.
* @see \SimplePie\Sanitize::set_https_domains()
* Array is a tree split at DNS levels. Example:
@@ -104,12 +128,12 @@ class Sanitize
}
}
- public function set_registry(\SimplePie\Registry $registry)
+ public function set_registry(\SimplePie\Registry $registry)/* : void */
{
$this->registry = $registry;
}
- public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie\Cache')
+ public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie\Cache', DataCache $cache = null)
{
if (isset($enable_cache)) {
$this->enable_cache = (bool) $enable_cache;
@@ -119,8 +143,26 @@ class Sanitize
$this->cache_location = (string) $cache_location;
}
- if ($cache_name_function) {
+ if (! is_string($cache_name_function) && ! is_object($cache_name_function) && ! $cache_name_function instanceof NameFilter) {
+ throw new InvalidArgumentException(sprintf(
+ '%s(): Argument #3 ($cache_name_function) must be of type %s',
+ __METHOD__,
+ NameFilter::class
+ ), 1);
+ }
+
+ // BC: $cache_name_function could be a callable as string
+ if (is_string($cache_name_function)) {
+ // trigger_error(sprintf('Providing $cache_name_function as string in "%s()" is deprecated since SimplePie 1.8.0, provide as "%s" instead.', __METHOD__, NameFilter::class), \E_USER_DEPRECATED);
$this->cache_name_function = (string) $cache_name_function;
+
+ $cache_name_function = new CallableNameFilter($cache_name_function);
+ }
+
+ $this->cache_namefilter = $cache_name_function;
+
+ if ($cache !== null) {
+ $this->cache = $cache;
}
}
@@ -374,19 +416,20 @@ class Sanitize
// If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache) {
$images = $document->getElementsByTagName('img');
+
foreach ($images as $img) {
if ($img->hasAttribute('src')) {
- $image_url = call_user_func($this->cache_name_function, $img->getAttribute('src'));
- $cache = $this->registry->call('Cache', 'get_handler', [$this->cache_location, $image_url, 'spi']);
+ $image_url = $this->cache_namefilter->filter($img->getAttribute('src'));
+ $cache = $this->get_cache($image_url);
- if ($cache->load()) {
+ if ($cache->get_data($image_url, false)) {
$img->setAttribute('src', $this->image_handler . $image_url);
} else {
- $file = $this->registry->create('File', [$img->getAttribute('src'), $this->timeout, 5, ['X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']], $this->useragent, $this->force_fsockopen]);
+ $file = $this->registry->create(File::class, [$img->getAttribute('src'), $this->timeout, 5, ['X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']], $this->useragent, $this->force_fsockopen]);
$headers = $file->headers;
if ($file->success && ($file->method & \SimplePie\SimplePie::FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300))) {
- if ($cache->save(['headers' => $file->headers, 'body' => $file->body])) {
+ if ($cache->set_data($image_url, ['headers' => $file->headers, 'body' => $file->body], $this->cache_duration)) {
$img->setAttribute('src', $this->image_handler . $image_url);
} else {
trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
@@ -413,7 +456,7 @@ class Sanitize
}
if ($type & \SimplePie\SimplePie::CONSTRUCT_IRI) {
- $absolute = $this->registry->call('Misc', 'absolutize_url', [$data, $base]);
+ $absolute = $this->registry->call(Misc::class, 'absolutize_url', [$data, $base]);
if ($absolute !== false) {
$data = $absolute;
}
@@ -424,7 +467,7 @@ class Sanitize
}
if ($this->output_encoding !== 'UTF-8') {
- $data = $this->registry->call('Misc', 'change_encoding', [$data, 'UTF-8', $this->output_encoding]);
+ $data = $this->registry->call(Misc::class, 'change_encoding', [$data, 'UTF-8', $this->output_encoding]);
}
}
return $data;
@@ -462,7 +505,7 @@ class Sanitize
foreach ($elements as $element) {
foreach ($attributes as $attribute) {
if ($element->hasAttribute($attribute)) {
- $value = $this->registry->call('Misc', 'absolutize_url', [$element->getAttribute($attribute), $this->base]);
+ $value = $this->registry->call(Misc::class, 'absolutize_url', [$element->getAttribute($attribute), $this->base]);
if ($value !== false) {
$value = $this->https_url($value);
$element->setAttribute($attribute, $value);
@@ -586,6 +629,29 @@ class Sanitize
}
}
}
+
+ /**
+ * Get a DataCache
+ *
+ * @param string $image_url Only needed for BC, can be removed in SimplePie 2.0.0
+ *
+ * @return DataCache
+ */
+ private function get_cache($image_url = '')
+ {
+ if ($this->cache === null) {
+ // @trigger_error(sprintf('Not providing as PSR-16 cache implementation is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()".'), \E_USER_DEPRECATED);
+ $cache = $this->registry->call(Cache::class, 'get_handler', [
+ $this->cache_location,
+ $image_url,
+ Base::TYPE_IMAGE
+ ]);
+
+ return new BaseDataCache($cache);
+ }
+
+ return $this->cache;
+ }
}
class_alias('SimplePie\Sanitize', 'SimplePie_Sanitize');
diff --git a/vendor/simplepie/simplepie/src/SimplePie.php b/vendor/simplepie/simplepie/src/SimplePie.php
index 22daa17aa..1dfa39fad 100644
--- a/vendor/simplepie/simplepie/src/SimplePie.php
+++ b/vendor/simplepie/simplepie/src/SimplePie.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -43,6 +45,16 @@
namespace SimplePie;
+use InvalidArgumentException;
+use Psr\SimpleCache\CacheInterface;
+use SimplePie\Cache\Base;
+use SimplePie\Cache\BaseDataCache;
+use SimplePie\Cache\CallableNameFilter;
+use SimplePie\Cache\DataCache;
+use SimplePie\Cache\NameFilter;
+use SimplePie\Cache\Psr16;
+use SimplePie\Content\Type\Sniffer;
+
/**
* SimplePie
*
@@ -54,350 +66,350 @@ class SimplePie
/**
* SimplePie Name
*/
- const NAME = 'SimplePie';
+ public const NAME = 'SimplePie';
/**
* SimplePie Version
*/
- const VERSION = '1.7.0';
+ public const VERSION = '1.8.0';
/**
* SimplePie Website URL
*/
- const URL = 'http://simplepie.org';
+ public const URL = 'http://simplepie.org';
/**
* SimplePie Linkback
*/
- const LINKBACK = '<a href="' . self::URL . '" title="' . self::NAME . ' ' . self::VERSION . '">' . self::NAME . '</a>';
+ public const LINKBACK = '<a href="' . self::URL . '" title="' . self::NAME . ' ' . self::VERSION . '">' . self::NAME . '</a>';
/**
* No Autodiscovery
* @see SimplePie::set_autodiscovery_level()
*/
- const LOCATOR_NONE = 0;
+ public const LOCATOR_NONE = 0;
/**
* Feed Link Element Autodiscovery
* @see SimplePie::set_autodiscovery_level()
*/
- const LOCATOR_AUTODISCOVERY = 1;
+ public const LOCATOR_AUTODISCOVERY = 1;
/**
* Local Feed Extension Autodiscovery
* @see SimplePie::set_autodiscovery_level()
*/
- const LOCATOR_LOCAL_EXTENSION = 2;
+ public const LOCATOR_LOCAL_EXTENSION = 2;
/**
* Local Feed Body Autodiscovery
* @see SimplePie::set_autodiscovery_level()
*/
- const LOCATOR_LOCAL_BODY = 4;
+ public const LOCATOR_LOCAL_BODY = 4;
/**
* Remote Feed Extension Autodiscovery
* @see SimplePie::set_autodiscovery_level()
*/
- const LOCATOR_REMOTE_EXTENSION = 8;
+ public const LOCATOR_REMOTE_EXTENSION = 8;
/**
* Remote Feed Body Autodiscovery
* @see SimplePie::set_autodiscovery_level()
*/
- const LOCATOR_REMOTE_BODY = 16;
+ public const LOCATOR_REMOTE_BODY = 16;
/**
* All Feed Autodiscovery
* @see SimplePie::set_autodiscovery_level()
*/
- const LOCATOR_ALL = 31;
+ public const LOCATOR_ALL = 31;
/**
* No known feed type
*/
- const TYPE_NONE = 0;
+ public const TYPE_NONE = 0;
/**
* RSS 0.90
*/
- const TYPE_RSS_090 = 1;
+ public const TYPE_RSS_090 = 1;
/**
* RSS 0.91 (Netscape)
*/
- const TYPE_RSS_091_NETSCAPE = 2;
+ public const TYPE_RSS_091_NETSCAPE = 2;
/**
* RSS 0.91 (Userland)
*/
- const TYPE_RSS_091_USERLAND = 4;
+ public const TYPE_RSS_091_USERLAND = 4;
/**
* RSS 0.91 (both Netscape and Userland)
*/
- const TYPE_RSS_091 = 6;
+ public const TYPE_RSS_091 = 6;
/**
* RSS 0.92
*/
- const TYPE_RSS_092 = 8;
+ public const TYPE_RSS_092 = 8;
/**
* RSS 0.93
*/
- const TYPE_RSS_093 = 16;
+ public const TYPE_RSS_093 = 16;
/**
* RSS 0.94
*/
- const TYPE_RSS_094 = 32;
+ public const TYPE_RSS_094 = 32;
/**
* RSS 1.0
*/
- const TYPE_RSS_10 = 64;
+ public const TYPE_RSS_10 = 64;
/**
* RSS 2.0
*/
- const TYPE_RSS_20 = 128;
+ public const TYPE_RSS_20 = 128;
/**
* RDF-based RSS
*/
- const TYPE_RSS_RDF = 65;
+ public const TYPE_RSS_RDF = 65;
/**
* Non-RDF-based RSS (truly intended as syndication format)
*/
- const TYPE_RSS_SYNDICATION = 190;
+ public const TYPE_RSS_SYNDICATION = 190;
/**
* All RSS
*/
- const TYPE_RSS_ALL = 255;
+ public const TYPE_RSS_ALL = 255;
/**
* Atom 0.3
*/
- const TYPE_ATOM_03 = 256;
+ public const TYPE_ATOM_03 = 256;
/**
* Atom 1.0
*/
- const TYPE_ATOM_10 = 512;
+ public const TYPE_ATOM_10 = 512;
/**
* All Atom
*/
- const TYPE_ATOM_ALL = 768;
+ public const TYPE_ATOM_ALL = 768;
/**
* All feed types
*/
- const TYPE_ALL = 1023;
+ public const TYPE_ALL = 1023;
/**
* No construct
*/
- const CONSTRUCT_NONE = 0;
+ public const CONSTRUCT_NONE = 0;
/**
* Text construct
*/
- const CONSTRUCT_TEXT = 1;
+ public const CONSTRUCT_TEXT = 1;
/**
* HTML construct
*/
- const CONSTRUCT_HTML = 2;
+ public const CONSTRUCT_HTML = 2;
/**
* XHTML construct
*/
- const CONSTRUCT_XHTML = 4;
+ public const CONSTRUCT_XHTML = 4;
/**
* base64-encoded construct
*/
- const CONSTRUCT_BASE64 = 8;
+ public const CONSTRUCT_BASE64 = 8;
/**
* IRI construct
*/
- const CONSTRUCT_IRI = 16;
+ public const CONSTRUCT_IRI = 16;
/**
* A construct that might be HTML
*/
- const CONSTRUCT_MAYBE_HTML = 32;
+ public const CONSTRUCT_MAYBE_HTML = 32;
/**
* All constructs
*/
- const CONSTRUCT_ALL = 63;
+ public const CONSTRUCT_ALL = 63;
/**
* Don't change case
*/
- const SAME_CASE = 1;
+ public const SAME_CASE = 1;
/**
* Change to lowercase
*/
- const LOWERCASE = 2;
+ public const LOWERCASE = 2;
/**
* Change to uppercase
*/
- const UPPERCASE = 4;
+ public const UPPERCASE = 4;
/**
* PCRE for HTML attributes
*/
- const PCRE_HTML_ATTRIBUTE = '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*';
+ public const PCRE_HTML_ATTRIBUTE = '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*';
/**
* PCRE for XML attributes
*/
- const PCRE_XML_ATTRIBUTE = '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*';
+ public const PCRE_XML_ATTRIBUTE = '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*';
/**
* XML Namespace
*/
- const NAMESPACE_XML = 'http://www.w3.org/XML/1998/namespace';
+ public const NAMESPACE_XML = 'http://www.w3.org/XML/1998/namespace';
/**
* Atom 1.0 Namespace
*/
- const NAMESPACE_ATOM_10 = 'http://www.w3.org/2005/Atom';
+ public const NAMESPACE_ATOM_10 = 'http://www.w3.org/2005/Atom';
/**
* Atom 0.3 Namespace
*/
- const NAMESPACE_ATOM_03 = 'http://purl.org/atom/ns#';
+ public const NAMESPACE_ATOM_03 = 'http://purl.org/atom/ns#';
/**
* RDF Namespace
*/
- const NAMESPACE_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
+ public const NAMESPACE_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#';
/**
* RSS 0.90 Namespace
*/
- const NAMESPACE_RSS_090 = 'http://my.netscape.com/rdf/simple/0.9/';
+ public const NAMESPACE_RSS_090 = 'http://my.netscape.com/rdf/simple/0.9/';
/**
* RSS 1.0 Namespace
*/
- const NAMESPACE_RSS_10 = 'http://purl.org/rss/1.0/';
+ public const NAMESPACE_RSS_10 = 'http://purl.org/rss/1.0/';
/**
* RSS 1.0 Content Module Namespace
*/
- const NAMESPACE_RSS_10_MODULES_CONTENT = 'http://purl.org/rss/1.0/modules/content/';
+ public const NAMESPACE_RSS_10_MODULES_CONTENT = 'http://purl.org/rss/1.0/modules/content/';
/**
* RSS 2.0 Namespace
* (Stupid, I know, but I'm certain it will confuse people less with support.)
*/
- const NAMESPACE_RSS_20 = '';
+ public const NAMESPACE_RSS_20 = '';
/**
* DC 1.0 Namespace
*/
- const NAMESPACE_DC_10 = 'http://purl.org/dc/elements/1.0/';
+ public const NAMESPACE_DC_10 = 'http://purl.org/dc/elements/1.0/';
/**
* DC 1.1 Namespace
*/
- const NAMESPACE_DC_11 = 'http://purl.org/dc/elements/1.1/';
+ public const NAMESPACE_DC_11 = 'http://purl.org/dc/elements/1.1/';
/**
* W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
*/
- const NAMESPACE_W3C_BASIC_GEO = 'http://www.w3.org/2003/01/geo/wgs84_pos#';
+ public const NAMESPACE_W3C_BASIC_GEO = 'http://www.w3.org/2003/01/geo/wgs84_pos#';
/**
* GeoRSS Namespace
*/
- const NAMESPACE_GEORSS = 'http://www.georss.org/georss';
+ public const NAMESPACE_GEORSS = 'http://www.georss.org/georss';
/**
* Media RSS Namespace
*/
- const NAMESPACE_MEDIARSS = 'http://search.yahoo.com/mrss/';
+ public const NAMESPACE_MEDIARSS = 'http://search.yahoo.com/mrss/';
/**
* Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
*/
- const NAMESPACE_MEDIARSS_WRONG = 'http://search.yahoo.com/mrss';
+ public const NAMESPACE_MEDIARSS_WRONG = 'http://search.yahoo.com/mrss';
/**
* Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
*/
- const NAMESPACE_MEDIARSS_WRONG2 = 'http://video.search.yahoo.com/mrss';
+ public const NAMESPACE_MEDIARSS_WRONG2 = 'http://video.search.yahoo.com/mrss';
/**
* Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
*/
- const NAMESPACE_MEDIARSS_WRONG3 = 'http://video.search.yahoo.com/mrss/';
+ public const NAMESPACE_MEDIARSS_WRONG3 = 'http://video.search.yahoo.com/mrss/';
/**
* Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
*/
- const NAMESPACE_MEDIARSS_WRONG4 = 'http://www.rssboard.org/media-rss';
+ public const NAMESPACE_MEDIARSS_WRONG4 = 'http://www.rssboard.org/media-rss';
/**
* Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
*/
- const NAMESPACE_MEDIARSS_WRONG5 = 'http://www.rssboard.org/media-rss/';
+ public const NAMESPACE_MEDIARSS_WRONG5 = 'http://www.rssboard.org/media-rss/';
/**
* iTunes RSS Namespace
*/
- const NAMESPACE_ITUNES = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
+ public const NAMESPACE_ITUNES = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
/**
* XHTML Namespace
*/
- const NAMESPACE_XHTML = 'http://www.w3.org/1999/xhtml';
+ public const NAMESPACE_XHTML = 'http://www.w3.org/1999/xhtml';
/**
* IANA Link Relations Registry
*/
- const IANA_LINK_RELATIONS_REGISTRY = 'http://www.iana.org/assignments/relation/';
+ public const IANA_LINK_RELATIONS_REGISTRY = 'http://www.iana.org/assignments/relation/';
/**
* No file source
*/
- const FILE_SOURCE_NONE = 0;
+ public const FILE_SOURCE_NONE = 0;
/**
* Remote file source
*/
- const FILE_SOURCE_REMOTE = 1;
+ public const FILE_SOURCE_REMOTE = 1;
/**
* Local file source
*/
- const FILE_SOURCE_LOCAL = 2;
+ public const FILE_SOURCE_LOCAL = 2;
/**
* fsockopen() file source
*/
- const FILE_SOURCE_FSOCKOPEN = 4;
+ public const FILE_SOURCE_FSOCKOPEN = 4;
/**
* cURL file source
*/
- const FILE_SOURCE_CURL = 8;
+ public const FILE_SOURCE_CURL = 8;
/**
* file_get_contents() file source
*/
- const FILE_SOURCE_FILE_GET_CONTENTS = 16;
+ public const FILE_SOURCE_FILE_GET_CONTENTS = 16;
/**
* @var array Raw data
@@ -495,7 +507,19 @@ class SimplePie
* @see SimplePie::enable_cache()
* @access private
*/
- public $cache = true;
+ private $enable_cache = true;
+
+ /**
+ * @var DataCache|null
+ * @see SimplePie::set_cache()
+ */
+ private $cache = null;
+
+ /**
+ * @var NameFilter
+ * @see SimplePie::set_cache_namefilter()
+ */
+ private $cache_namefilter;
/**
* @var bool Force SimplePie to fallback to expired cache, if enabled,
@@ -666,20 +690,21 @@ class SimplePie
*/
public function __construct()
{
- if (version_compare(PHP_VERSION, '5.6', '<')) {
- trigger_error('Please upgrade to PHP 5.6 or newer.');
+ if (version_compare(PHP_VERSION, '7.2', '<')) {
+ trigger_error('Please upgrade to PHP 7.2 or newer.');
die();
}
$this->set_useragent();
+ $this->set_cache_namefilter(new CallableNameFilter($this->cache_name_function));
+
// Other objects, instances created here so we can set options on them
$this->sanitize = new \SimplePie\Sanitize();
$this->registry = new \SimplePie\Registry();
if (func_num_args() > 0) {
- $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
- trigger_error('Passing parameters to the constructor is no longer supported. Please use set_feed_url(), set_cache_location(), and set_cache_duration() directly.', $level);
+ trigger_error('Passing parameters to the constructor is no longer supported. Please use set_feed_url(), set_cache_location(), and set_cache_duration() directly.', \E_USER_DEPRECATED);
$args = func_get_args();
switch (count($args)) {
@@ -759,10 +784,10 @@ class SimplePie
$this->multifeed_url = [];
if (is_array($url)) {
foreach ($url as $value) {
- $this->multifeed_url[] = $this->registry->call('Misc', 'fix_protocol', [$value, 1]);
+ $this->multifeed_url[] = $this->registry->call(Misc::class, 'fix_protocol', [$value, 1]);
}
} else {
- $this->feed_url = $this->registry->call('Misc', 'fix_protocol', [$url, 1]);
+ $this->feed_url = $this->registry->call(Misc::class, 'fix_protocol', [$url, 1]);
$this->permanent_url = $this->feed_url;
}
}
@@ -851,7 +876,19 @@ class SimplePie
*/
public function enable_cache($enable = true)
{
- $this->cache = (bool) $enable;
+ $this->enable_cache = (bool) $enable;
+ }
+
+ /**
+ * Set a PSR-16 implementation as cache
+ *
+ * @param CacheInterface $psr16cache The PSR-16 cache implementation
+ *
+ * @return void
+ */
+ public function set_cache(CacheInterface $cache)
+ {
+ $this->cache = new Psr16($cache);
}
/**
@@ -861,12 +898,15 @@ class SimplePie
* This tells SimplePie to ignore any file errors and fall back to cache
* instead. This only works if caching is enabled and cached content
* still exists.
-
+ *
+ * @deprecated since SimplePie 1.8.0, expired cache will not be used anymore.
+ *
* @param bool $enable Force use of cache on fail.
*/
public function force_cache_fallback($enable = false)
{
- $this->force_cache_fallback= (bool) $enable;
+ // @trigger_error(sprintf('SimplePie\SimplePie::force_cache_fallback() is deprecated since SimplePie 1.8.0, expired cache will not be used anymore.'), \E_USER_DEPRECATED);
+ $this->force_cache_fallback = (bool) $enable;
}
/**
@@ -894,15 +934,19 @@ class SimplePie
/**
* Set the file system location where the cached files should be stored
*
+ * @deprecated since SimplePie 1.8.0, use \SimplePie\SimplePie::set_cache() instead.
+ *
* @param string $location The file system location.
*/
public function set_cache_location($location = './cache')
{
+ // @trigger_error(sprintf('SimplePie\SimplePie::set_cache_location() is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()" instead.'), \E_USER_DEPRECATED);
$this->cache_location = (string) $location;
}
/**
* Return the filename (i.e. hash, without path and without extension) of the file to cache a given URL.
+ *
* @param string $url The URL of the feed to be cached.
* @return string A filename (i.e. hash, without path and without extension).
*/
@@ -926,7 +970,8 @@ class SimplePie
ksort($options);
$url .= '#' . urlencode(var_export($options, true));
}
- return call_user_func($this->cache_name_function, $url);
+
+ return $this->cache_namefilter->filter($url);
}
/**
@@ -978,149 +1023,269 @@ class SimplePie
*
* Use this to override SimplePie's default classes
* @see \SimplePie\Registry
- * @return \SimplePie\Registry
+ *
+ * @return Registry
*/
public function &get_registry()
{
return $this->registry;
}
- /**#@+
- * Useful when you are overloading or extending SimplePie's default classes.
+ /**
+ * Set which class SimplePie uses for caching
+ *
+ * @deprecated since SimplePie 1.3, use {@see set_cache()} instead
*
- * @deprecated Use {@see get_registry()} instead
- * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
* @param string $class Name of custom class
+ *
* @return boolean True on success, false otherwise
*/
- /**
- * Set which class SimplePie uses for caching
- */
- public function set_cache_class($class = 'SimplePie\Cache')
+ public function set_cache_class($class = Cache::class)
{
- return $this->registry->register('Cache', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::set_cache()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Cache::class, $class, true);
}
/**
* Set which class SimplePie uses for auto-discovery
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_locator_class($class = 'SimplePie\Locator')
+ public function set_locator_class($class = Locator::class)
{
- return $this->registry->register('Locator', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Locator::class, $class, true);
}
/**
* Set which class SimplePie uses for XML parsing
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_parser_class($class = 'SimplePie\Parser')
+ public function set_parser_class($class = Parser::class)
{
- return $this->registry->register('Parser', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Parser::class, $class, true);
}
/**
* Set which class SimplePie uses for remote file fetching
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_file_class($class = 'SimplePie\File')
+ public function set_file_class($class = File::class)
{
- return $this->registry->register('File', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(File::class, $class, true);
}
/**
* Set which class SimplePie uses for data sanitization
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_sanitize_class($class = 'SimplePie\Sanitize')
+ public function set_sanitize_class($class = Sanitize::class)
{
- return $this->registry->register('Sanitize', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Sanitize::class, $class, true);
}
/**
* Set which class SimplePie uses for handling feed items
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_item_class($class = 'SimplePie\Item')
+ public function set_item_class($class = Item::class)
{
- return $this->registry->register('Item', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Item::class, $class, true);
}
/**
* Set which class SimplePie uses for handling author data
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_author_class($class = 'SimplePie\Author')
+ public function set_author_class($class = Author::class)
{
- return $this->registry->register('Author', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Author::class, $class, true);
}
/**
* Set which class SimplePie uses for handling category data
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_category_class($class = 'SimplePie\Category')
+ public function set_category_class($class = Category::class)
{
- return $this->registry->register('Category', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Category::class, $class, true);
}
/**
* Set which class SimplePie uses for feed enclosures
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_enclosure_class($class = 'SimplePie\Enclosure')
+ public function set_enclosure_class($class = Enclosure::class)
{
- return $this->registry->register('Enclosure', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Enclosure::class, $class, true);
}
/**
* Set which class SimplePie uses for `<media:text>` captions
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_caption_class($class = 'SimplePie\Caption')
+ public function set_caption_class($class = Caption::class)
{
- return $this->registry->register('Caption', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Caption::class, $class, true);
}
/**
* Set which class SimplePie uses for `<media:copyright>`
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_copyright_class($class = 'SimplePie\Copyright')
+ public function set_copyright_class($class = Copyright::class)
{
- return $this->registry->register('Copyright', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Copyright::class, $class, true);
}
/**
* Set which class SimplePie uses for `<media:credit>`
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_credit_class($class = 'SimplePie\Credit')
+ public function set_credit_class($class = Credit::class)
{
- return $this->registry->register('Credit', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Credit::class, $class, true);
}
/**
* Set which class SimplePie uses for `<media:rating>`
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_rating_class($class = 'SimplePie\Rating')
+ public function set_rating_class($class = Rating::class)
{
- return $this->registry->register('Rating', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Rating::class, $class, true);
}
/**
* Set which class SimplePie uses for `<media:restriction>`
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_restriction_class($class = 'SimplePie\Restriction')
+ public function set_restriction_class($class = Restriction::class)
{
- return $this->registry->register('Restriction', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Restriction::class, $class, true);
}
/**
* Set which class SimplePie uses for content-type sniffing
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_content_type_sniffer_class($class = 'SimplePie\Content\Type\Sniffer')
+ public function set_content_type_sniffer_class($class = Sniffer::class)
{
- return $this->registry->register('Content_Type_Sniffer', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Sniffer::class, $class, true);
}
/**
* Set which class SimplePie uses item sources
+ *
+ * @deprecated since SimplePie 1.3, use {@see get_registry()} instead
+ *
+ * @param string $class Name of custom class
+ *
+ * @return boolean True on success, false otherwise
*/
- public function set_source_class($class = 'SimplePie\Source')
+ public function set_source_class($class = Source::class)
{
- return $this->registry->register('Source', $class, true);
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.3, please use "SimplePie\SimplePie::get_registry()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
+ return $this->registry->register(Source::class, $class, true);
}
- /**#@-*/
/**
* Set the user agent string
@@ -1137,14 +1302,32 @@ class SimplePie
}
/**
+ * Set a namefilter to modify the cache filename with
+ *
+ * @param NameFilter $filter
+ *
+ * @return void
+ */
+ public function set_cache_namefilter(NameFilter $filter): void
+ {
+ $this->cache_namefilter = $filter;
+ }
+
+ /**
* Set callback function to create cache filename with
*
+ * @deprecated since SimplePie 1.8.0, use {@see set_cache_namefilter()} instead
+ *
* @param mixed $function Callback function
*/
public function set_cache_name_function($function = 'md5')
{
+ // trigger_error(sprintf('"%s()" is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache_namefilter()" instead.', __METHOD__), \E_USER_DEPRECATED);
+
if (is_callable($function)) {
$this->cache_name_function = $function;
+
+ $this->set_cache_namefilter(new CallableNameFilter($this->cache_name_function));
}
}
@@ -1352,8 +1535,8 @@ class SimplePie
// The default sanitize class gets set in the constructor, check if it has
// changed.
- if ($this->registry->get_class('Sanitize') !== 'SimplePie\Sanitize') {
- $this->sanitize = $this->registry->create('Sanitize');
+ if ($this->registry->get_class(Sanitize::class) !== 'SimplePie\Sanitize') {
+ $this->sanitize = $this->registry->create(Sanitize::class);
}
if (method_exists($this->sanitize, 'set_registry')) {
$this->sanitize->set_registry($this->registry);
@@ -1361,8 +1544,14 @@ class SimplePie
// Pass whatever was set with config options over to the sanitizer.
// Pass the classes in for legacy support; new classes should use the registry instead
- $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->registry->get_class('Cache'));
- $this->sanitize->pass_file_data($this->registry->get_class('File'), $this->timeout, $this->useragent, $this->force_fsockopen, $this->curl_options);
+ $this->sanitize->pass_cache_data(
+ $this->enable_cache,
+ $this->cache_location,
+ $this->cache_namefilter,
+ $this->registry->get_class(Cache::class),
+ $this->cache
+ );
+ $this->sanitize->pass_file_data($this->registry->get_class(File::class), $this->timeout, $this->useragent, $this->force_fsockopen, $this->curl_options);
if (!empty($this->multifeed_url)) {
$i = 0;
@@ -1391,12 +1580,11 @@ class SimplePie
$cache = false;
if ($this->feed_url !== null) {
- $parsed_feed_url = $this->registry->call('Misc', 'parse_url', [$this->feed_url]);
+ $parsed_feed_url = $this->registry->call(Misc::class, 'parse_url', [$this->feed_url]);
// Decide whether to enable caching
- if ($this->cache && $parsed_feed_url['scheme'] !== '') {
- $filename = $this->get_cache_filename($this->feed_url);
- $cache = $this->registry->call('Cache', 'get_handler', [$this->cache_location, $filename, 'spc']);
+ if ($this->enable_cache && $parsed_feed_url['scheme'] !== '') {
+ $cache = $this->get_cache($this->feed_url);
}
// Fetch the data via \SimplePie\File into $this->raw_data
@@ -1406,13 +1594,13 @@ class SimplePie
return false;
}
- list($headers, $sniffed) = $fetched;
+ [$headers, $sniffed] = $fetched;
}
// Empty response check
if (empty($this->raw_data)) {
$this->error = "A feed could not be found at `$this->feed_url`. Empty body.";
- $this->registry->call('Misc', 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
+ $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
return false;
}
@@ -1433,7 +1621,7 @@ class SimplePie
if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) {
$encodings[] = strtoupper($charset[1]);
}
- $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', [$this->raw_data, &$this->registry]));
+ $encodings = array_merge($encodings, $this->registry->call(Misc::class, 'xml_encoding', [$this->raw_data, &$this->registry]));
$encodings[] = 'UTF-8';
} elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml') {
if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset)) {
@@ -1448,7 +1636,7 @@ class SimplePie
}
// Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1
- $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', [$this->raw_data, &$this->registry]));
+ $encodings = array_merge($encodings, $this->registry->call(Misc::class, 'xml_encoding', [$this->raw_data, &$this->registry]));
$encodings[] = 'UTF-8';
$encodings[] = 'ISO-8859-1';
@@ -1458,16 +1646,16 @@ class SimplePie
// Loop through each possible encoding, till we return something, or run out of possibilities
foreach ($encodings as $encoding) {
// Change the encoding to UTF-8 (as we always use UTF-8 internally)
- if ($utf8_data = $this->registry->call('Misc', 'change_encoding', [$this->raw_data, $encoding, 'UTF-8'])) {
+ if ($utf8_data = $this->registry->call(Misc::class, 'change_encoding', [$this->raw_data, $encoding, 'UTF-8'])) {
// Create new parser
- $parser = $this->registry->create('Parser');
+ $parser = $this->registry->create(Parser::class);
// If it's parsed fine
if ($parser->parse($utf8_data, 'UTF-8', $this->permanent_url)) {
$this->data = $parser->get_data();
if (!($this->get_type() & ~self::TYPE_NONE)) {
$this->error = "A feed could not be found at `$this->feed_url`. This does not appear to be a valid RSS or Atom feed.";
- $this->registry->call('Misc', 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
+ $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
return false;
}
@@ -1477,7 +1665,8 @@ class SimplePie
$this->data['build'] = \SimplePie\Misc::get_build();
// Cache the file if caching is enabled
- if ($cache && !$cache->save($this)) {
+ $this->data['cache_expiration_time'] = $this->cache_duration + time();
+ if ($cache && ! $cache->set_data($this->get_cache_filename($this->feed_url), $this->data, $this->cache_duration)) {
trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
}
return true;
@@ -1508,7 +1697,7 @@ class SimplePie
}
}
- $this->registry->call('Misc', 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
+ $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
return false;
}
@@ -1517,19 +1706,35 @@ class SimplePie
* Fetch the data via \SimplePie\File
*
* If the data is already cached, attempt to fetch it from there instead
- * @param \SimplePie\Cache\Base|false $cache Cache handler, or false to not load from the cache
+ * @param Base|DataCache|false $cache Cache handler, or false to not load from the cache
* @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type
*/
protected function fetch_data(&$cache)
{
+ if (is_object($cache) && $cache instanceof Base) {
+ // @trigger_error(sprintf('Providing $cache as "\SimplePie\Cache\Base" in %s() is deprecated since SimplePie 1.8.0, please provide "\SimplePie\Cache\DataCache" implementation instead.', __METHOD__), \E_USER_DEPRECATED);
+ $cache = new BaseDataCache($cache);
+ }
+
+ if ($cache !== false && ! $cache instanceof DataCache) {
+ throw new InvalidArgumentException(sprintf(
+ '%s(): Argument #1 ($cache) must be of type %s|false',
+ __METHOD__,
+ DataCache::class
+ ), 1);
+ }
+
+ $cacheKey = $this->get_cache_filename($this->feed_url);
+
// If it's enabled, use the cache
if ($cache) {
// Load the Cache
- $this->data = $cache->load();
+ $this->data = $cache->get_data($cacheKey, []);
+
if (!empty($this->data)) {
// If the cache is for an outdated build of SimplePie
if (!isset($this->data['build']) || $this->data['build'] !== \SimplePie\Misc::get_build()) {
- $cache->unlink();
+ $cache->delete_data($cacheKey);
$this->data = [];
}
// If we've hit a collision just rerun it with caching disabled
@@ -1539,20 +1744,21 @@ class SimplePie
}
// If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
elseif (isset($this->data['feed_url'])) {
- // If the autodiscovery cache is still valid use it.
- if ($cache->mtime() + $this->autodiscovery_cache_duration > time()) {
- // Do not need to do feed autodiscovery yet.
- if ($this->data['feed_url'] !== $this->data['url']) {
- $this->set_feed_url($this->data['feed_url']);
- return $this->init();
- }
+ // Do not need to do feed autodiscovery yet.
+ if ($this->data['feed_url'] !== $this->data['url']) {
+ $this->set_feed_url($this->data['feed_url']);
+ $this->data['url'] = $this->data['feed_url'];
+
+ $cache->set_data($this->get_cache_filename($this->feed_url), $this->data, $this->autodiscovery_cache_duration);
- $cache->unlink();
- $this->data = [];
+ return $this->init();
}
+
+ $cache->delete_data($this->get_cache_filename($this->feed_url));
+ $this->data = [];
}
// Check if the cache has been updated
- elseif ($cache->mtime() + $this->cache_duration < time()) {
+ elseif (isset($this->data['cache_expiration_time']) && $this->data['cache_expiration_time'] > time()) {
// Want to know if we tried to send last-modified and/or etag headers
// when requesting this file. (Note that it's up to the file to
// support this, but we don't always send the headers either.)
@@ -1568,7 +1774,7 @@ class SimplePie
$headers['if-none-match'] = $this->data['headers']['etag'];
}
- $file = $this->registry->create('File', [$this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
+ $file = $this->registry->create(File::class, [$this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
$this->status_code = $file->status_code;
if ($file->success) {
@@ -1576,13 +1782,13 @@ class SimplePie
// Set raw_data to false here too, to signify that the cache
// is still valid.
$this->raw_data = false;
- $cache->touch();
+ $cache->set_data($cacheKey, $this->data, $this->cache_duration);
return true;
}
} else {
$this->check_modified = false;
if ($this->force_cache_fallback) {
- $cache->touch();
+ $cache->set_data($cacheKey, $this->data, $this->cache_duration);
return true;
}
@@ -1596,12 +1802,12 @@ class SimplePie
return true;
}
}
- // If the cache is empty, delete it
+ // If the cache is empty
else {
- $cache->unlink();
$this->data = [];
}
}
+
// If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
if (!isset($file)) {
if ($this->file instanceof \SimplePie\File && $this->file->url === $this->feed_url) {
@@ -1610,7 +1816,7 @@ class SimplePie
$headers = [
'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
];
- $file = $this->registry->create('File', [$this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
+ $file = $this->registry->create(File::class, [$this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options]);
}
}
$this->status_code = $file->status_code;
@@ -1623,7 +1829,7 @@ class SimplePie
if (!$this->force_feed) {
// Check if the supplied URL is a feed, if it isn't, look for it.
- $locate = $this->registry->create('Locator', [&$file, $this->timeout, $this->useragent, $this->max_checked_feeds, $this->force_fsockopen, $this->curl_options]);
+ $locate = $this->registry->create(Locator::class, [&$file, $this->timeout, $this->useragent, $this->max_checked_feeds, $this->force_fsockopen, $this->curl_options]);
if (!$locate->is_feed($file)) {
$copyStatusCode = $file->status_code;
@@ -1665,7 +1871,7 @@ class SimplePie
// been called that object is untouched
unset($file);
$this->error = "A feed could not be found at `$this->feed_url`; the status code is `$copyStatusCode` and content-type is `$copyContentType`";
- $this->registry->call('Misc', 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
+ $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, __FILE__, __LINE__]);
return false;
}
}
@@ -1674,15 +1880,21 @@ class SimplePie
unset($file);
// This is usually because DOMDocument doesn't exist
$this->error = $e->getMessage();
- $this->registry->call('Misc', 'error', [$this->error, E_USER_NOTICE, $e->getFile(), $e->getLine()]);
+ $this->registry->call(Misc::class, 'error', [$this->error, E_USER_NOTICE, $e->getFile(), $e->getLine()]);
return false;
}
+
if ($cache) {
- $this->data = ['url' => $this->feed_url, 'feed_url' => $file->url, 'build' => \SimplePie\Misc::get_build()];
- if (!$cache->save($this)) {
+ $this->data = [
+ 'url' => $this->feed_url,
+ 'feed_url' => $file->url,
+ 'build' => \SimplePie\Misc::get_build(),
+ 'cache_expiration_time' => $this->cache_duration + time(),
+ ];
+
+ if (!$cache->set_data($cacheKey, $this->data, $this->cache_duration)) {
trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
}
- $cache = $this->registry->call('Cache', 'get_handler', [$this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc']);
}
}
$this->feed_url = $file->url;
@@ -1692,7 +1904,7 @@ class SimplePie
$this->raw_data = $file->body;
$this->permanent_url = $file->permanent_url;
$headers = $file->headers;
- $sniffer = $this->registry->create('Content_Type_Sniffer', [&$file]);
+ $sniffer = $this->registry->create(Sniffer::class, [&$file]);
$sniffed = $sniffer->get_type();
return [$headers, $sniffed];
@@ -2096,7 +2308,7 @@ class SimplePie
} catch (\SimplePie\Exception $e) {
if (!$this->enable_exceptions) {
$this->error = $e->getMessage();
- $this->registry->call('Misc', 'error', [$this->error, E_USER_WARNING, $e->getFile(), $e->getLine()]);
+ $this->registry->call(Misc::class, 'error', [$this->error, E_USER_WARNING, $e->getFile(), $e->getLine()]);
return '';
}
@@ -2115,9 +2327,9 @@ class SimplePie
public function get_title()
{
if ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'title')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'title')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_10, 'title')) {
return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
} elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_090, 'title')) {
@@ -2175,7 +2387,7 @@ class SimplePie
if (isset($category['attribs']['']['label'])) {
$label = $this->sanitize($category['attribs']['']['label'], self::CONSTRUCT_TEXT);
}
- $categories[] = $this->registry->create('Category', [$term, $scheme, $label]);
+ $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
}
foreach ((array) $this->get_channel_tags(self::NAMESPACE_RSS_20, 'category') as $category) {
// This is really the label, but keep this as the term also for BC.
@@ -2186,13 +2398,13 @@ class SimplePie
} else {
$scheme = null;
}
- $categories[] = $this->registry->create('Category', [$term, $scheme, null]);
+ $categories[] = $this->registry->create(Category::class, [$term, $scheme, null]);
}
foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_11, 'subject') as $category) {
- $categories[] = $this->registry->create('Category', [$this->sanitize($category['data'], self::CONSTRUCT_TEXT), null, null]);
+ $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], self::CONSTRUCT_TEXT), null, null]);
}
foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_10, 'subject') as $category) {
- $categories[] = $this->registry->create('Category', [$this->sanitize($category['data'], self::CONSTRUCT_TEXT), null, null]);
+ $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], self::CONSTRUCT_TEXT), null, null]);
}
if (!empty($categories)) {
@@ -2244,7 +2456,7 @@ class SimplePie
$email = $this->sanitize($author['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'], self::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $uri !== null) {
- $authors[] = $this->registry->create('Author', [$name, $uri, $email]);
+ $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
}
}
if ($author = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'author')) {
@@ -2261,17 +2473,17 @@ class SimplePie
$email = $this->sanitize($author[0]['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'], self::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $url !== null) {
- $authors[] = $this->registry->create('Author', [$name, $url, $email]);
+ $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
}
}
foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_11, 'creator') as $author) {
- $authors[] = $this->registry->create('Author', [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
+ $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
}
foreach ((array) $this->get_channel_tags(self::NAMESPACE_DC_10, 'creator') as $author) {
- $authors[] = $this->registry->create('Author', [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
+ $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
}
foreach ((array) $this->get_channel_tags(self::NAMESPACE_ITUNES, 'author') as $author) {
- $authors[] = $this->registry->create('Author', [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
+ $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], self::CONSTRUCT_TEXT), null, null]);
}
if (!empty($authors)) {
@@ -2323,7 +2535,7 @@ class SimplePie
$email = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_10]['email'][0]['data'], self::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $uri !== null) {
- $contributors[] = $this->registry->create('Author', [$name, $uri, $email]);
+ $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
}
}
foreach ((array) $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
@@ -2340,7 +2552,7 @@ class SimplePie
$email = $this->sanitize($contributor['child'][self::NAMESPACE_ATOM_03]['email'][0]['data'], self::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $url !== null) {
- $contributors[] = $this->registry->create('Author', [$name, $url, $email]);
+ $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
}
}
@@ -2426,7 +2638,7 @@ class SimplePie
$keys = array_keys($this->data['links']);
foreach ($keys as $key) {
- if ($this->registry->call('Misc', 'is_isegment_nz_nc', [$key])) {
+ if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
if (isset($this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key])) {
$this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key]);
$this->data['links'][$key] =& $this->data['links'][self::IANA_LINK_RELATIONS_REGISTRY . $key];
@@ -2476,9 +2688,9 @@ class SimplePie
public function get_description()
{
if ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'subtitle')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'tagline')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_10, 'description')) {
return $this->sanitize($return[0]['data'], self::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
} elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_090, 'description')) {
@@ -2509,9 +2721,9 @@ class SimplePie
public function get_copyright()
{
if ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_10, 'rights')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_channel_tags(self::NAMESPACE_ATOM_03, 'copyright')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'copyright')) {
return $this->sanitize($return[0]['data'], self::CONSTRUCT_TEXT);
} elseif ($return = $this->get_channel_tags(self::NAMESPACE_DC_11, 'rights')) {
@@ -2686,17 +2898,17 @@ class SimplePie
*
* RSS 2.0 feeds are allowed to have a "feed logo" width.
*
- * Uses `<image><width>` or defaults to 88.0 if no width is specified and
+ * Uses `<image><width>` or defaults to 88 if no width is specified and
* the feed is an RSS 2.0 feed.
*
- * @return int|float|null
+ * @return int|null
*/
public function get_image_width()
{
if ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'width')) {
- return round($return[0]['data']);
+ return intval($return[0]['data']);
} elseif ($this->get_type() & self::TYPE_RSS_SYNDICATION && $this->get_image_tags(self::NAMESPACE_RSS_20, 'url')) {
- return 88.0;
+ return 88;
}
return null;
@@ -2707,17 +2919,17 @@ class SimplePie
*
* RSS 2.0 feeds are allowed to have a "feed logo" height.
*
- * Uses `<image><height>` or defaults to 31.0 if no height is specified and
+ * Uses `<image><height>` or defaults to 31 if no height is specified and
* the feed is an RSS 2.0 feed.
*
- * @return int|float|null
+ * @return int|null
*/
public function get_image_height()
{
if ($return = $this->get_image_tags(self::NAMESPACE_RSS_20, 'height')) {
- return round($return[0]['data']);
+ return intval($return[0]['data']);
} elseif ($this->get_type() & self::TYPE_RSS_SYNDICATION && $this->get_image_tags(self::NAMESPACE_RSS_20, 'url')) {
- return 31.0;
+ return 31;
}
return null;
@@ -2792,31 +3004,31 @@ class SimplePie
if ($items = $this->get_feed_tags(self::NAMESPACE_ATOM_10, 'entry')) {
$keys = array_keys($items);
foreach ($keys as $key) {
- $this->data['items'][] = $this->registry->create('Item', [$this, $items[$key]]);
+ $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
}
}
if ($items = $this->get_feed_tags(self::NAMESPACE_ATOM_03, 'entry')) {
$keys = array_keys($items);
foreach ($keys as $key) {
- $this->data['items'][] = $this->registry->create('Item', [$this, $items[$key]]);
+ $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
}
}
if ($items = $this->get_feed_tags(self::NAMESPACE_RSS_10, 'item')) {
$keys = array_keys($items);
foreach ($keys as $key) {
- $this->data['items'][] = $this->registry->create('Item', [$this, $items[$key]]);
+ $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
}
}
if ($items = $this->get_feed_tags(self::NAMESPACE_RSS_090, 'item')) {
$keys = array_keys($items);
foreach ($keys as $key) {
- $this->data['items'][] = $this->registry->create('Item', [$this, $items[$key]]);
+ $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
}
}
if ($items = $this->get_channel_tags(self::NAMESPACE_RSS_20, 'item')) {
$keys = array_keys($items);
foreach ($keys as $key) {
- $this->data['items'][] = $this->registry->create('Item', [$this, $items[$key]]);
+ $this->data['items'][] = $this->registry->create(Item::class, [$this, $items[$key]]);
}
}
}
@@ -2849,8 +3061,7 @@ class SimplePie
*/
public function set_favicon_handler($page = false, $qs = 'i')
{
- $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
- trigger_error('Favicon handling has been removed, please use your own handling', $level);
+ trigger_error('Favicon handling has been removed, please use your own handling', \E_USER_DEPRECATED);
return false;
}
@@ -2861,8 +3072,7 @@ class SimplePie
*/
public function get_favicon()
{
- $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
- trigger_error('Favicon handling has been removed, please use your own handling', $level);
+ trigger_error('Favicon handling has been removed, please use your own handling', \E_USER_DEPRECATED);
if (($url = $this->get_link()) !== null) {
return 'https://www.google.com/s2/favicons?domain=' . urlencode($url);
@@ -2881,13 +3091,11 @@ class SimplePie
public function __call($method, $args)
{
if (strpos($method, 'subscribe_') === 0) {
- $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
- trigger_error('subscribe_*() has been deprecated, implement the callback yourself', $level);
+ trigger_error('subscribe_*() has been deprecated, implement the callback yourself', \E_USER_DEPRECATED);
return '';
}
if ($method === 'enable_xml_dump') {
- $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
- trigger_error('enable_xml_dump() has been deprecated, use get_raw_data() instead', $level);
+ trigger_error('enable_xml_dump() has been deprecated, use get_raw_data() instead', \E_USER_DEPRECATED);
return false;
}
@@ -2992,6 +3200,29 @@ class SimplePie
}
}
}
+
+ /**
+ * Get a DataCache
+ *
+ * @param string $feed_url Only needed for BC, can be removed in SimplePie 2.0.0
+ *
+ * @return DataCache
+ */
+ private function get_cache($feed_url = '')
+ {
+ if ($this->cache === null) {
+ // @trigger_error(sprintf('Not providing as PSR-16 cache implementation is deprecated since SimplePie 1.8.0, please use "SimplePie\SimplePie::set_cache()".'), \E_USER_DEPRECATED);
+ $cache = $this->registry->call(Cache::class, 'get_handler', [
+ $this->cache_location,
+ $this->get_cache_filename($feed_url),
+ Base::TYPE_FEED
+ ]);
+
+ return new BaseDataCache($cache);
+ }
+
+ return $this->cache;
+ }
}
class_alias('SimplePie\SimplePie', 'SimplePie');
diff --git a/vendor/simplepie/simplepie/src/Source.php b/vendor/simplepie/simplepie/src/Source.php
index d4e50bc4d..c7ed11600 100644
--- a/vendor/simplepie/simplepie/src/Source.php
+++ b/vendor/simplepie/simplepie/src/Source.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -53,7 +55,7 @@ namespace SimplePie;
* @package SimplePie
* @subpackage API
*/
-class Source
+class Source implements RegistryAware
{
public $item;
public $data = [];
@@ -65,7 +67,7 @@ class Source
$this->data = $data;
}
- public function set_registry(\SimplePie\Registry $registry)
+ public function set_registry(\SimplePie\Registry $registry)/* : void */
{
$this->registry = $registry;
}
@@ -102,9 +104,9 @@ class Source
public function get_title()
{
if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'title')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'title')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'title')) {
return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
} elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'title')) {
@@ -147,7 +149,7 @@ class Source
if (isset($category['attribs']['']['label'])) {
$label = $this->sanitize($category['attribs']['']['label'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
- $categories[] = $this->registry->create('Category', [$term, $scheme, $label]);
+ $categories[] = $this->registry->create(Category::class, [$term, $scheme, $label]);
}
foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'category') as $category) {
// This is really the label, but keep this as the term also for BC.
@@ -158,13 +160,13 @@ class Source
} else {
$scheme = null;
}
- $categories[] = $this->registry->create('Category', [$term, $scheme, null]);
+ $categories[] = $this->registry->create(Category::class, [$term, $scheme, null]);
}
foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'subject') as $category) {
- $categories[] = $this->registry->create('Category', [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
+ $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
}
foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'subject') as $category) {
- $categories[] = $this->registry->create('Category', [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
+ $categories[] = $this->registry->create(Category::class, [$this->sanitize($category['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
}
if (!empty($categories)) {
@@ -201,7 +203,7 @@ class Source
$email = $this->sanitize($author['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $uri !== null) {
- $authors[] = $this->registry->create('Author', [$name, $uri, $email]);
+ $authors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
}
}
if ($author = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'author')) {
@@ -218,17 +220,17 @@ class Source
$email = $this->sanitize($author[0]['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $url !== null) {
- $authors[] = $this->registry->create('Author', [$name, $url, $email]);
+ $authors[] = $this->registry->create(Author::class, [$name, $url, $email]);
}
}
foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'creator') as $author) {
- $authors[] = $this->registry->create('Author', [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
+ $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
}
foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_10, 'creator') as $author) {
- $authors[] = $this->registry->create('Author', [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
+ $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
}
foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ITUNES, 'author') as $author) {
- $authors[] = $this->registry->create('Author', [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
+ $authors[] = $this->registry->create(Author::class, [$this->sanitize($author['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT), null, null]);
}
if (!empty($authors)) {
@@ -265,7 +267,7 @@ class Source
$email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_10]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $uri !== null) {
- $contributors[] = $this->registry->create('Author', [$name, $uri, $email]);
+ $contributors[] = $this->registry->create(Author::class, [$name, $uri, $email]);
}
}
foreach ((array) $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'contributor') as $contributor) {
@@ -282,7 +284,7 @@ class Source
$email = $this->sanitize($contributor['child'][\SimplePie\SimplePie::NAMESPACE_ATOM_03]['email'][0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
}
if ($name !== null || $email !== null || $url !== null) {
- $contributors[] = $this->registry->create('Author', [$name, $url, $email]);
+ $contributors[] = $this->registry->create(Author::class, [$name, $url, $email]);
}
}
@@ -343,7 +345,7 @@ class Source
$keys = array_keys($this->data['links']);
foreach ($keys as $key) {
- if ($this->registry->call('Misc', 'is_isegment_nz_nc', [$key])) {
+ if ($this->registry->call(Misc::class, 'is_isegment_nz_nc', [$key])) {
if (isset($this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key])) {
$this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key]);
$this->data['links'][$key] =& $this->data['links'][\SimplePie\SimplePie::IANA_LINK_RELATIONS_REGISTRY . $key];
@@ -367,9 +369,9 @@ class Source
public function get_description()
{
if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'subtitle')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'tagline')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_10, 'description')) {
return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
} elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_090, 'description')) {
@@ -392,9 +394,9 @@ class Source
public function get_copyright()
{
if ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_10, 'rights')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_10_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_ATOM_03, 'copyright')) {
- return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
+ return $this->sanitize($return[0]['data'], $this->registry->call(Misc::class, 'atom_03_construct_type', [$return[0]['attribs']]), $this->get_base($return[0]));
} elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_RSS_20, 'copyright')) {
return $this->sanitize($return[0]['data'], \SimplePie\SimplePie::CONSTRUCT_TEXT);
} elseif ($return = $this->get_source_tags(\SimplePie\SimplePie::NAMESPACE_DC_11, 'rights')) {
diff --git a/vendor/simplepie/simplepie/src/XML/Declaration/Parser.php b/vendor/simplepie/simplepie/src/XML/Declaration/Parser.php
index 44d9416d2..5062e683f 100644
--- a/vendor/simplepie/simplepie/src/XML/Declaration/Parser.php
+++ b/vendor/simplepie/simplepie/src/XML/Declaration/Parser.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SimplePie
*
@@ -75,54 +77,29 @@ class Parser
*/
public $standalone = false;
- /**
- * @access private
- */
- const STATE_BEFORE_VERSION_NAME = 'before_version_name';
- /**
- * @access private
- */
- const STATE_VERSION_NAME = 'version_name';
- /**
- * @access private
- */
- const STATE_VERSION_EQUALS = 'version_equals';
- /**
- * @access private
- */
- const STATE_VERSION_VALUE = 'version_value';
- /**
- * @access private
- */
- const STATE_ENCODING_NAME = 'encoding_name';
- /**
- * @access private
- */
- const STATE_EMIT = 'emit';
- /**
- * @access private
- */
- const STATE_ENCODING_EQUALS = 'encoding_equals';
- /**
- * @access private
- */
- const STATE_STANDALONE_NAME = 'standalone_name';
- /**
- * @access private
- */
- const STATE_ENCODING_VALUE = 'encoding_value';
- /**
- * @access private
- */
- const STATE_STANDALONE_EQUALS = 'standalone_equals';
- /**
- * @access private
- */
- const STATE_STANDALONE_VALUE = 'standalone_value';
- /**
- * @access private
- */
- const STATE_ERROR = false;
+ private const STATE_BEFORE_VERSION_NAME = 'before_version_name';
+
+ private const STATE_VERSION_NAME = 'version_name';
+
+ private const STATE_VERSION_EQUALS = 'version_equals';
+
+ private const STATE_VERSION_VALUE = 'version_value';
+
+ private const STATE_ENCODING_NAME = 'encoding_name';
+
+ private const STATE_EMIT = 'emit';
+
+ private const STATE_ENCODING_EQUALS = 'encoding_equals';
+
+ private const STATE_STANDALONE_NAME = 'standalone_name';
+
+ private const STATE_ENCODING_VALUE = 'encoding_value';
+
+ private const STATE_STANDALONE_EQUALS = 'standalone_equals';
+
+ private const STATE_STANDALONE_VALUE = 'standalone_value';
+
+ private const STATE_ERROR = false;
/**
* Current state of the state machine
diff --git a/vendor/smarty/smarty/CHANGELOG.md b/vendor/smarty/smarty/CHANGELOG.md
index 85fc91ec3..e036ce694 100644
--- a/vendor/smarty/smarty/CHANGELOG.md
+++ b/vendor/smarty/smarty/CHANGELOG.md
@@ -6,14 +6,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## [4.3.0] - 2022-11-22
+
+### Added
+- PHP8.2 compatibility [#775](https://github.com/smarty-php/smarty/pull/775)
+
+### Changed
+- Include docs and demo in the releases [#799](https://github.com/smarty-php/smarty/issues/799)
+- Using PHP functions as modifiers now triggers a deprecation notice because we will drop support for this in the next major release [#813](https://github.com/smarty-php/smarty/issues/813)
+- Dropped remaining references to removed PHP-support in Smarty 4 from docs, lexer and security class. [#816](https://github.com/smarty-php/smarty/issues/816)
+- Support umask when writing (template) files and set dir permissions to 777 [#548](https://github.com/smarty-php/smarty/issues/548) [#819](https://github.com/smarty-php/smarty/issues/819)
+
+### Fixed
+- Output buffer is now cleaned for internal PHP errors as well, not just for Exceptions [#514](https://github.com/smarty-php/smarty/issues/514)
+- Fixed recursion and out of memory errors when caching in complicated template set-ups using inheritance and includes [#801](https://github.com/smarty-php/smarty/pull/801)
+- Fixed PHP8.1 deprecation errors in strip_tags
+- Fix Variable Usage in Exception message when unable to load subtemplate [#808](https://github.com/smarty-php/smarty/pull/808)
+- Fixed PHP8.1 deprecation notices for strftime [#672](https://github.com/smarty-php/smarty/issues/672)
+- Fixed PHP8.1 deprecation errors passing null to parameter in trim [#807](https://github.com/smarty-php/smarty/pull/807)
+- Adapt Smarty upper/lower functions to be codesafe (e.g. for Turkish locale) [#586](https://github.com/smarty-php/smarty/pull/586)
+- Bug fix for underscore and limited length in template name in custom resources [#581](https://github.com/smarty-php/smarty/pull/581)
+
+
## [4.2.1] - 2022-09-14
### Security
- Applied appropriate javascript and html escaping in mailto plugin to counter injection attacks [#454](https://github.com/smarty-php/smarty/issues/454)
### Fixed
-- Fixed PHP8.1 deprecation errors in modifiers (upper, explode, number_format and replace) [#755](https://github.com/smarty-php/smarty/pull/755) and [#788](https://github.com/smarty-php/smarty/pull/788)
-- Fixed PHP8.1 deprecation errors in capitalize modifier [#789](https://github.com/smarty-php/smarty/issues/789)
+- Fixed PHP8.1 deprecation notices in modifiers (upper, explode, number_format and replace) [#755](https://github.com/smarty-php/smarty/pull/755) and [#788](https://github.com/smarty-php/smarty/pull/788)
+- Fixed PHP8.1 deprecation notices in capitalize modifier [#789](https://github.com/smarty-php/smarty/issues/789)
- Fixed use of `rand()` without a parameter in math function [#794](https://github.com/smarty-php/smarty/issues/794)
- Fixed unselected year/month/day not working in html_select_date [#395](https://github.com/smarty-php/smarty/issues/395)
diff --git a/vendor/smarty/smarty/README.md b/vendor/smarty/smarty/README.md
index 782f0b2cb..0ef3cfab6 100644
--- a/vendor/smarty/smarty/README.md
+++ b/vendor/smarty/smarty/README.md
@@ -7,7 +7,7 @@ Smarty is a template engine for PHP, facilitating the separation of presentation
Read the [documentation](https://smarty-php.github.io/smarty/) to find out how to use it.
## Requirements
-Smarty can be run with PHP 7.1 to PHP 8.1.
+Smarty can be run with PHP 7.1 to PHP 8.2.
## Installation
Smarty versions 3.1.11 or later can be installed with [Composer](https://getcomposer.org/).
diff --git a/vendor/smarty/smarty/demo/configs/test.conf b/vendor/smarty/smarty/demo/configs/test.conf
new file mode 100644
index 000000000..5eac748ec
--- /dev/null
+++ b/vendor/smarty/smarty/demo/configs/test.conf
@@ -0,0 +1,5 @@
+title = Welcome to Smarty!
+cutoff_size = 40
+
+[setup]
+bold = true
diff --git a/vendor/smarty/smarty/demo/index.php b/vendor/smarty/smarty/demo/index.php
new file mode 100644
index 000000000..3aed37168
--- /dev/null
+++ b/vendor/smarty/smarty/demo/index.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Example Application
+ *
+ * @package Example-application
+ */
+require '../libs/Smarty.class.php';
+$smarty = new Smarty;
+//$smarty->force_compile = true;
+$smarty->debugging = true;
+$smarty->caching = true;
+$smarty->cache_lifetime = 120;
+$smarty->assign("Name", "Fred Irving Johnathan Bradley Peppergill", true);
+$smarty->assign("FirstName", array("John", "Mary", "James", "Henry"));
+$smarty->assign("LastName", array("Doe", "Smith", "Johnson", "Case"));
+$smarty->assign(
+ "Class",
+ array(
+ array("A", "B", "C", "D"),
+ array("E", "F", "G", "H"),
+ array("I", "J", "K", "L"),
+ array("M", "N", "O", "P")
+ )
+);
+$smarty->assign(
+ "contacts",
+ array(
+ array("phone" => "1", "fax" => "2", "cell" => "3"),
+ array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")
+ )
+);
+$smarty->assign("option_values", array("NY", "NE", "KS", "IA", "OK", "TX"));
+$smarty->assign("option_output", array("New York", "Nebraska", "Kansas", "Iowa", "Oklahoma", "Texas"));
+$smarty->assign("option_selected", "NE");
+$smarty->display('index.tpl');
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.apc.php b/vendor/smarty/smarty/demo/plugins/cacheresource.apc.php
new file mode 100644
index 000000000..7867cc598
--- /dev/null
+++ b/vendor/smarty/smarty/demo/plugins/cacheresource.apc.php
@@ -0,0 +1,85 @@
+<?php
+
+/**
+ * APC CacheResource
+ * CacheResource Implementation based on the KeyValueStore API to use
+ * memcache as the storage resource for Smarty's output caching.
+ * *
+ *
+ * @package CacheResource-examples
+ * @author Uwe Tews
+ */
+class Smarty_CacheResource_Apc extends Smarty_CacheResource_KeyValueStore
+{
+ /**
+ * Smarty_CacheResource_Apc constructor.
+ *
+ * @throws \Exception
+ */
+ public function __construct()
+ {
+ // test if APC is present
+ if (!function_exists('apc_cache_info')) {
+ throw new Exception('APC Template Caching Error: APC is not installed');
+ }
+ }
+
+ /**
+ * Read values for a set of keys from cache
+ *
+ * @param array $keys list of keys to fetch
+ *
+ * @return array list of values with the given keys used as indexes
+ * @return boolean true on success, false on failure
+ */
+ protected function read(array $keys)
+ {
+ $_res = array();
+ $res = apc_fetch($keys);
+ foreach ($res as $k => $v) {
+ $_res[ $k ] = $v;
+ }
+ return $_res;
+ }
+
+ /**
+ * Save values for a set of keys to cache
+ *
+ * @param array $keys list of values to save
+ * @param int $expire expiration time
+ *
+ * @return boolean true on success, false on failure
+ */
+ protected function write(array $keys, $expire = null)
+ {
+ foreach ($keys as $k => $v) {
+ apc_store($k, $v, $expire);
+ }
+ return true;
+ }
+
+ /**
+ * Remove values from cache
+ *
+ * @param array $keys list of keys to delete
+ *
+ * @return boolean true on success, false on failure
+ */
+ protected function delete(array $keys)
+ {
+ foreach ($keys as $k) {
+ apc_delete($k);
+ }
+ return true;
+ }
+
+ /**
+ * Remove *all* values from cache
+ *
+ * @return boolean true on success, false on failure
+ */
+ protected function purge()
+ {
+ return apc_clear_cache('user');
+ }
+}
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.memcache.php b/vendor/smarty/smarty/demo/plugins/cacheresource.memcache.php
new file mode 100644
index 000000000..71fe9d3f1
--- /dev/null
+++ b/vendor/smarty/smarty/demo/plugins/cacheresource.memcache.php
@@ -0,0 +1,99 @@
+<?php
+
+/**
+ * Memcache CacheResource
+ * CacheResource Implementation based on the KeyValueStore API to use
+ * memcache as the storage resource for Smarty's output caching.
+ * Note that memcache has a limitation of 256 characters per cache-key.
+ * To avoid complications all cache-keys are translated to a sha1 hash.
+ *
+ * @package CacheResource-examples
+ * @author Rodney Rehm
+ */
+class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore
+{
+ /**
+ * memcache instance
+ *
+ * @var Memcache
+ */
+ protected $memcache = null;
+
+ /**
+ * Smarty_CacheResource_Memcache constructor.
+ */
+ public function __construct()
+ {
+ if (class_exists('Memcached')) {
+ $this->memcache = new Memcached();
+ } else {
+ $this->memcache = new Memcache();
+ }
+ $this->memcache->addServer('127.0.0.1', 11211);
+ }
+
+ /**
+ * Read values for a set of keys from cache
+ *
+ * @param array $keys list of keys to fetch
+ *
+ * @return array list of values with the given keys used as indexes
+ * @return boolean true on success, false on failure
+ */
+ protected function read(array $keys)
+ {
+ $res = array();
+ foreach ($keys as $key) {
+ $k = sha1($key);
+ $res[$key] = $this->memcache->get($k);
+ }
+ return $res;
+ }
+
+ /**
+ * Save values for a set of keys to cache
+ *
+ * @param array $keys list of values to save
+ * @param int $expire expiration time
+ *
+ * @return boolean true on success, false on failure
+ */
+ protected function write(array $keys, $expire = null)
+ {
+ foreach ($keys as $k => $v) {
+ $k = sha1($k);
+ if (class_exists('Memcached')) {
+ $this->memcache->set($k, $v, $expire);
+ } else {
+ $this->memcache->set($k, $v, 0, $expire);
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Remove values from cache
+ *
+ * @param array $keys list of keys to delete
+ *
+ * @return boolean true on success, false on failure
+ */
+ protected function delete(array $keys)
+ {
+ foreach ($keys as $k) {
+ $k = sha1($k);
+ $this->memcache->delete($k);
+ }
+ return true;
+ }
+
+ /**
+ * Remove *all* values from cache
+ *
+ * @return boolean true on success, false on failure
+ */
+ protected function purge()
+ {
+ return $this->memcache->flush();
+ }
+}
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php b/vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php
new file mode 100644
index 000000000..c5037eb13
--- /dev/null
+++ b/vendor/smarty/smarty/demo/plugins/cacheresource.mysql.php
@@ -0,0 +1,183 @@
+<?php
+
+/**
+ * MySQL CacheResource
+ * CacheResource Implementation based on the Custom API to use
+ * MySQL as the storage resource for Smarty's output caching.
+ * Table definition:
+ * <pre>CREATE TABLE IF NOT EXISTS `output_cache` (
+ * `id` CHAR(40) NOT NULL COMMENT 'sha1 hash',
+ * `name` VARCHAR(250) NOT NULL,
+ * `cache_id` VARCHAR(250) NULL DEFAULT NULL,
+ * `compile_id` VARCHAR(250) NULL DEFAULT NULL,
+ * `modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ * `content` LONGTEXT NOT NULL,
+ * PRIMARY KEY (`id`),
+ * INDEX(`name`),
+ * INDEX(`cache_id`),
+ * INDEX(`compile_id`),
+ * INDEX(`modified`)
+ * ) ENGINE = InnoDB;</pre>
+ *
+ * @package CacheResource-examples
+ * @author Rodney Rehm
+ */
+class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom
+{
+ /**
+ * @var \PDO
+ */
+ protected $db;
+
+ /**
+ * @var \PDOStatement
+ */
+ protected $fetch;
+
+ /**
+ * @var \PDOStatement
+ */
+ protected $fetchTimestamp;
+
+ /**
+ * @var \PDOStatement
+ */
+ protected $save;
+
+ /**
+ * Smarty_CacheResource_Mysql constructor.
+ *
+ * @throws \SmartyException
+ */
+ public function __construct()
+ {
+ try {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
+ } catch (PDOException $e) {
+ throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
+ }
+ $this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id');
+ $this->fetchTimestamp = $this->db->prepare('SELECT modified FROM output_cache WHERE id = :id');
+ $this->save = $this->db->prepare(
+ 'REPLACE INTO output_cache (id, name, cache_id, compile_id, content)
+ VALUES (:id, :name, :cache_id, :compile_id, :content)'
+ );
+ }
+
+ /**
+ * fetch cached content and its modification time from data source
+ *
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $content cached content
+ * @param integer $mtime cache modification timestamp (epoch)
+ *
+ * @return void
+ */
+ protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime)
+ {
+ $this->fetch->execute(array('id' => $id));
+ $row = $this->fetch->fetch();
+ $this->fetch->closeCursor();
+ if ($row) {
+ $content = $row[ 'content' ];
+ $mtime = strtotime($row[ 'modified' ]);
+ } else {
+ $content = null;
+ $mtime = null;
+ }
+ }
+
+ /**
+ * Fetch cached content's modification timestamp from data source
+ *
+ * @note implementing this method is optional. Only implement it if modification times can be accessed faster than
+ * loading the complete cached content.
+ *
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ *
+ * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
+ */
+ protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
+ {
+ $this->fetchTimestamp->execute(array('id' => $id));
+ $mtime = strtotime($this->fetchTimestamp->fetchColumn());
+ $this->fetchTimestamp->closeCursor();
+ return $mtime;
+ }
+
+ /**
+ * Save content to cache
+ *
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration time in seconds or null
+ * @param string $content content to cache
+ *
+ * @return boolean success
+ */
+ protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content)
+ {
+ $this->save->execute(
+ array('id' => $id,
+ 'name' => $name,
+ 'cache_id' => $cache_id,
+ 'compile_id' => $compile_id,
+ 'content' => $content,)
+ );
+ return !!$this->save->rowCount();
+ }
+
+ /**
+ * Delete content from cache
+ *
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration or null
+ *
+ * @return integer number of deleted caches
+ */
+ protected function delete($name, $cache_id, $compile_id, $exp_time)
+ {
+ // delete the whole cache
+ if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) {
+ // returning the number of deleted caches would require a second query to count them
+ $query = $this->db->query('TRUNCATE TABLE output_cache');
+ return -1;
+ }
+ // build the filter
+ $where = array();
+ // equal test name
+ if ($name !== null) {
+ $where[] = 'name = ' . $this->db->quote($name);
+ }
+ // equal test compile_id
+ if ($compile_id !== null) {
+ $where[] = 'compile_id = ' . $this->db->quote($compile_id);
+ }
+ // range test expiration time
+ if ($exp_time !== null) {
+ $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)';
+ }
+ // equal test cache_id and match sub-groups
+ if ($cache_id !== null) {
+ $where[] =
+ '(cache_id = ' .
+ $this->db->quote($cache_id) .
+ ' OR cache_id LIKE ' .
+ $this->db->quote($cache_id . '|%') .
+ ')';
+ }
+ // run delete query
+ $query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where));
+ return $query->rowCount();
+ }
+}
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.pdo.php b/vendor/smarty/smarty/demo/plugins/cacheresource.pdo.php
new file mode 100644
index 000000000..ae3ebbf7d
--- /dev/null
+++ b/vendor/smarty/smarty/demo/plugins/cacheresource.pdo.php
@@ -0,0 +1,346 @@
+<?php
+
+/**
+ * PDO Cache Handler
+ * Allows you to store Smarty Cache files into your db.
+ * Example table :
+ * CREATE TABLE `smarty_cache` (
+ * `id` char(40) NOT NULL COMMENT 'sha1 hash',
+ * `name` varchar(250) NOT NULL,
+ * `cache_id` varchar(250) DEFAULT NULL,
+ * `compile_id` varchar(250) DEFAULT NULL,
+ * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ * `expire` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
+ * `content` mediumblob NOT NULL,
+ * PRIMARY KEY (`id`),
+ * KEY `name` (`name`),
+ * KEY `cache_id` (`cache_id`),
+ * KEY `compile_id` (`compile_id`),
+ * KEY `modified` (`modified`),
+ * KEY `expire` (`expire`)
+ * ) ENGINE=InnoDB
+ * Example usage :
+ * $cnx = new PDO("mysql:host=localhost;dbname=mydb", "username", "password");
+ * $smarty->setCachingType('pdo');
+ * $smarty->loadPlugin('Smarty_CacheResource_Pdo');
+ * $smarty->registerCacheResource('pdo', new Smarty_CacheResource_Pdo($cnx, 'smarty_cache'));
+ *
+ * @author Beno!t POLASZEK - 2014
+ */
+class Smarty_CacheResource_Pdo extends Smarty_CacheResource_Custom
+{
+ /**
+ * @var string[]
+ */
+ protected $fetchStatements = array('default' => 'SELECT %2$s
+ FROM %1$s
+ WHERE 1
+ AND id = :id
+ AND cache_id IS NULL
+ AND compile_id IS NULL',
+ 'withCacheId' => 'SELECT %2$s
+ FROM %1$s
+ WHERE 1
+ AND id = :id
+ AND cache_id = :cache_id
+ AND compile_id IS NULL',
+ 'withCompileId' => 'SELECT %2$s
+ FROM %1$s
+ WHERE 1
+ AND id = :id
+ AND compile_id = :compile_id
+ AND cache_id IS NULL',
+ 'withCacheIdAndCompileId' => 'SELECT %2$s
+ FROM %1$s
+ WHERE 1
+ AND id = :id
+ AND cache_id = :cache_id
+ AND compile_id = :compile_id');
+
+ /**
+ * @var string
+ */
+ protected $insertStatement = 'INSERT INTO %s
+
+ SET id = :id,
+ name = :name,
+ cache_id = :cache_id,
+ compile_id = :compile_id,
+ modified = CURRENT_TIMESTAMP,
+ expire = DATE_ADD(CURRENT_TIMESTAMP, INTERVAL :expire SECOND),
+ content = :content
+
+ ON DUPLICATE KEY UPDATE
+ name = :name,
+ cache_id = :cache_id,
+ compile_id = :compile_id,
+ modified = CURRENT_TIMESTAMP,
+ expire = DATE_ADD(CURRENT_TIMESTAMP, INTERVAL :expire SECOND),
+ content = :content';
+
+ /**
+ * @var string
+ */
+ protected $deleteStatement = 'DELETE FROM %1$s WHERE %2$s';
+
+ /**
+ * @var string
+ */
+ protected $truncateStatement = 'TRUNCATE TABLE %s';
+
+ /**
+ * @var string
+ */
+ protected $fetchColumns = 'modified, content';
+
+ /**
+ * @var string
+ */
+ protected $fetchTimestampColumns = 'modified';
+
+ /**
+ * @var \PDO
+ */
+ protected $pdo;
+
+ /**
+ * @var
+ */
+ protected $table;
+
+ /**
+ * @var null
+ */
+ protected $database;
+
+ /**
+ * Constructor
+ *
+ * @param PDO $pdo PDO : active connection
+ * @param string $table : table (or view) name
+ * @param string $database : optional - if table is located in another db
+ *
+ * @throws \SmartyException
+ */
+ public function __construct(PDO $pdo, $table, $database = null)
+ {
+ if (is_null($table)) {
+ throw new SmartyException("Table name for caching can't be null");
+ }
+ $this->pdo = $pdo;
+ $this->table = $table;
+ $this->database = $database;
+ $this->fillStatementsWithTableName();
+ }
+
+ /**
+ * Fills the table name into the statements.
+ *
+ * @return $this Current Instance
+ * @access protected
+ */
+ protected function fillStatementsWithTableName()
+ {
+ foreach ($this->fetchStatements as &$statement) {
+ $statement = sprintf($statement, $this->getTableName(), '%s');
+ }
+ $this->insertStatement = sprintf($this->insertStatement, $this->getTableName());
+ $this->deleteStatement = sprintf($this->deleteStatement, $this->getTableName(), '%s');
+ $this->truncateStatement = sprintf($this->truncateStatement, $this->getTableName());
+ return $this;
+ }
+
+ /**
+ * Gets the fetch statement, depending on what you specify
+ *
+ * @param string $columns : the column(s) name(s) you want to retrieve from the database
+ * @param string $id unique cache content identifier
+ * @param string|null $cache_id cache id
+ * @param string|null $compile_id compile id
+ *
+ * @access protected
+ * @return \PDOStatement
+ */
+ protected function getFetchStatement($columns, $id, $cache_id = null, $compile_id = null)
+ {
+ $args = array();
+ if (!is_null($cache_id) && !is_null($compile_id)) {
+ $query = $this->fetchStatements[ 'withCacheIdAndCompileId' ] and
+ $args = array('id' => $id, 'cache_id' => $cache_id, 'compile_id' => $compile_id);
+ } elseif (is_null($cache_id) && !is_null($compile_id)) {
+ $query = $this->fetchStatements[ 'withCompileId' ] and
+ $args = array('id' => $id, 'compile_id' => $compile_id);
+ } elseif (!is_null($cache_id) && is_null($compile_id)) {
+ $query = $this->fetchStatements[ 'withCacheId' ] and $args = array('id' => $id, 'cache_id' => $cache_id);
+ } else {
+ $query = $this->fetchStatements[ 'default' ] and $args = array('id' => $id);
+ }
+ $query = sprintf($query, $columns);
+ $stmt = $this->pdo->prepare($query);
+ foreach ($args as $key => $value) {
+ $stmt->bindValue($key, $value);
+ }
+ return $stmt;
+ }
+
+ /**
+ * fetch cached content and its modification time from data source
+ *
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string|null $cache_id cache id
+ * @param string|null $compile_id compile id
+ * @param string $content cached content
+ * @param integer $mtime cache modification timestamp (epoch)
+ *
+ * @return void
+ * @access protected
+ */
+ protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime)
+ {
+ $stmt = $this->getFetchStatement($this->fetchColumns, $id, $cache_id, $compile_id);
+ $stmt->execute();
+ $row = $stmt->fetch();
+ $stmt->closeCursor();
+ if ($row) {
+ $content = $this->outputContent($row[ 'content' ]);
+ $mtime = strtotime($row[ 'modified' ]);
+ } else {
+ $content = null;
+ $mtime = null;
+ }
+ }
+
+ /**
+ * Fetch cached content's modification timestamp from data source
+ * {@internal implementing this method is optional.
+ * Only implement it if modification times can be accessed faster than loading the complete cached content.}}
+ *
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string|null $cache_id cache id
+ * @param string|null $compile_id compile id
+ *
+ * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
+ * @access protected
+ */
+ // protected function fetchTimestamp($id, $name, $cache_id = null, $compile_id = null) {
+ // $stmt = $this->getFetchStatement($this->fetchTimestampColumns, $id, $cache_id, $compile_id);
+ // $stmt -> execute();
+ // $mtime = strtotime($stmt->fetchColumn());
+ // $stmt -> closeCursor();
+ // return $mtime;
+ // }
+ /**
+ * Save content to cache
+ *
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string|null $cache_id cache id
+ * @param string|null $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration time in seconds or null
+ * @param string $content content to cache
+ *
+ * @return boolean success
+ * @access protected
+ */
+ protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content)
+ {
+ $stmt = $this->pdo->prepare($this->insertStatement);
+ $stmt->bindValue('id', $id);
+ $stmt->bindValue('name', $name);
+ $stmt->bindValue('cache_id', $cache_id, (is_null($cache_id)) ? PDO::PARAM_NULL : PDO::PARAM_STR);
+ $stmt->bindValue('compile_id', $compile_id, (is_null($compile_id)) ? PDO::PARAM_NULL : PDO::PARAM_STR);
+ $stmt->bindValue('expire', (int)$exp_time, PDO::PARAM_INT);
+ $stmt->bindValue('content', $this->inputContent($content));
+ $stmt->execute();
+ return !!$stmt->rowCount();
+ }
+
+ /**
+ * Encodes the content before saving to database
+ *
+ * @param string $content
+ *
+ * @return string $content
+ * @access protected
+ */
+ protected function inputContent($content)
+ {
+ return $content;
+ }
+
+ /**
+ * Decodes the content before saving to database
+ *
+ * @param string $content
+ *
+ * @return string $content
+ * @access protected
+ */
+ protected function outputContent($content)
+ {
+ return $content;
+ }
+
+ /**
+ * Delete content from cache
+ *
+ * @param string|null $name template name
+ * @param string|null $cache_id cache id
+ * @param string|null $compile_id compile id
+ * @param integer|null|-1 $exp_time seconds till expiration or null
+ *
+ * @return integer number of deleted caches
+ * @access protected
+ */
+ protected function delete($name = null, $cache_id = null, $compile_id = null, $exp_time = null)
+ {
+ // delete the whole cache
+ if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) {
+ // returning the number of deleted caches would require a second query to count them
+ $this->pdo->query($this->truncateStatement);
+ return -1;
+ }
+ // build the filter
+ $where = array();
+ // equal test name
+ if ($name !== null) {
+ $where[] = 'name = ' . $this->pdo->quote($name);
+ }
+ // equal test cache_id and match sub-groups
+ if ($cache_id !== null) {
+ $where[] =
+ '(cache_id = ' .
+ $this->pdo->quote($cache_id) .
+ ' OR cache_id LIKE ' .
+ $this->pdo->quote($cache_id . '|%') .
+ ')';
+ }
+ // equal test compile_id
+ if ($compile_id !== null) {
+ $where[] = 'compile_id = ' . $this->pdo->quote($compile_id);
+ }
+ // for clearing expired caches
+ if ($exp_time === Smarty::CLEAR_EXPIRED) {
+ $where[] = 'expire < CURRENT_TIMESTAMP';
+ } // range test expiration time
+ elseif ($exp_time !== null) {
+ $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)';
+ }
+ // run delete query
+ $query = $this->pdo->query(sprintf($this->deleteStatement, join(' AND ', $where)));
+ return $query->rowCount();
+ }
+
+ /**
+ * Gets the formatted table name
+ *
+ * @return string
+ * @access protected
+ */
+ protected function getTableName()
+ {
+ return (is_null($this->database)) ? "`{$this->table}`" : "`{$this->database}`.`{$this->table}`";
+ }
+}
diff --git a/vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php b/vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php
new file mode 100644
index 000000000..5560b9e39
--- /dev/null
+++ b/vendor/smarty/smarty/demo/plugins/cacheresource.pdo_gzip.php
@@ -0,0 +1,42 @@
+<?php
+require_once 'cacheresource.pdo.php';
+
+/**
+ * PDO Cache Handler with GZIP support
+ * Example usage :
+ * $cnx = new PDO("mysql:host=localhost;dbname=mydb", "username", "password");
+ * $smarty->setCachingType('pdo_gzip');
+ * $smarty->loadPlugin('Smarty_CacheResource_Pdo_Gzip');
+ * $smarty->registerCacheResource('pdo_gzip', new Smarty_CacheResource_Pdo_Gzip($cnx, 'smarty_cache'));
+ *
+ * @require Smarty_CacheResource_Pdo class
+ * @author Beno!t POLASZEK - 2014
+ */
+class Smarty_CacheResource_Pdo_Gzip extends Smarty_CacheResource_Pdo
+{
+ /**
+ * Encodes the content before saving to database
+ *
+ * @param string $content
+ *
+ * @return string $content
+ * @access protected
+ */
+ protected function inputContent($content)
+ {
+ return gzdeflate($content);
+ }
+
+ /**
+ * Decodes the content before saving to database
+ *
+ * @param string $content
+ *
+ * @return string $content
+ * @access protected
+ */
+ protected function outputContent($content)
+ {
+ return gzinflate($content);
+ }
+}
diff --git a/vendor/smarty/smarty/demo/plugins/resource.extendsall.php b/vendor/smarty/smarty/demo/plugins/resource.extendsall.php
new file mode 100644
index 000000000..a547d41db
--- /dev/null
+++ b/vendor/smarty/smarty/demo/plugins/resource.extendsall.php
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Extends All Resource
+ * Resource Implementation modifying the extends-Resource to walk
+ * through the template_dirs and inherit all templates of the same name
+ *
+ * @package Resource-examples
+ * @author Rodney Rehm
+ */
+class Smarty_Resource_Extendsall extends Smarty_Internal_Resource_Extends
+{
+ /**
+ * populate Source Object with meta data from Resource
+ *
+ * @param Smarty_Template_Source $source source object
+ * @param Smarty_Internal_Template $_template template object
+ *
+ * @return void
+ */
+ public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
+ {
+ $uid = '';
+ $sources = array();
+ $timestamp = 0;
+ foreach ($source->smarty->getTemplateDir() as $key => $directory) {
+ try {
+ $s = Smarty_Resource::source(null, $source->smarty, 'file:' . '[' . $key . ']' . $source->name);
+ if (!$s->exists) {
+ continue;
+ }
+ $sources[ $s->uid ] = $s;
+ $uid .= $s->filepath;
+ $timestamp = $s->timestamp > $timestamp ? $s->timestamp : $timestamp;
+ } catch (SmartyException $e) {
+ }
+ }
+ if (!$sources) {
+ $source->exists = false;
+ return;
+ }
+ $sources = array_reverse($sources, true);
+ reset($sources);
+ $s = current($sources);
+ $source->components = $sources;
+ $source->filepath = $s->filepath;
+ $source->uid = sha1($uid . $source->smarty->_joined_template_dir);
+ $source->exists = true;
+ $source->timestamp = $timestamp;
+ }
+
+ /**
+ * Disable timestamp checks for extendsall resource.
+ * The individual source components will be checked.
+ *
+ * @return bool false
+ */
+ public function checkTimestamps()
+ {
+ return false;
+ }
+}
diff --git a/vendor/smarty/smarty/demo/plugins/resource.mysql.php b/vendor/smarty/smarty/demo/plugins/resource.mysql.php
new file mode 100644
index 000000000..95a3c2baf
--- /dev/null
+++ b/vendor/smarty/smarty/demo/plugins/resource.mysql.php
@@ -0,0 +1,101 @@
+<?php
+
+/**
+ * MySQL Resource
+ * Resource Implementation based on the Custom API to use
+ * MySQL as the storage resource for Smarty's templates and configs.
+ * Table definition:
+ * <pre>CREATE TABLE IF NOT EXISTS `templates` (
+ * `name` varchar(100) NOT NULL,
+ * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ * `source` text,
+ * PRIMARY KEY (`name`)
+ * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
+ * Demo data:
+ * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello
+ * world"}{$x}');</pre>
+ *
+ *
+ * @package Resource-examples
+ * @author Rodney Rehm
+ */
+class Smarty_Resource_Mysql extends Smarty_Resource_Custom
+{
+ /**
+ * PDO instance
+ *
+ * @var \PDO
+ */
+ protected $db;
+
+ /**
+ * prepared fetch() statement
+ *
+ * @var \PDOStatement
+ */
+ protected $fetch;
+
+ /**
+ * prepared fetchTimestamp() statement
+ *
+ * @var \PDOStatement
+ */
+ protected $mtime;
+
+ /**
+ * Smarty_Resource_Mysql constructor.
+ *
+ * @throws \SmartyException
+ */
+ public function __construct()
+ {
+ try {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
+ } catch (PDOException $e) {
+ throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
+ }
+ $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
+ $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
+ }
+
+ /**
+ * Fetch a template and its modification time from database
+ *
+ * @param string $name template name
+ * @param string $source template source
+ * @param integer $mtime template modification timestamp (epoch)
+ *
+ * @return void
+ */
+ protected function fetch($name, &$source, &$mtime)
+ {
+ $this->fetch->execute(array('name' => $name));
+ $row = $this->fetch->fetch();
+ $this->fetch->closeCursor();
+ if ($row) {
+ $source = $row[ 'source' ];
+ $mtime = strtotime($row[ 'modified' ]);
+ } else {
+ $source = null;
+ $mtime = null;
+ }
+ }
+
+ /**
+ * Fetch a template's modification time from database
+ *
+ * @note implementing this method is optional. Only implement it if modification times can be accessed faster than
+ * loading the comple template source.
+ *
+ * @param string $name template name
+ *
+ * @return integer timestamp (epoch) the template was modified
+ */
+ protected function fetchTimestamp($name)
+ {
+ $this->mtime->execute(array('name' => $name));
+ $mtime = $this->mtime->fetchColumn();
+ $this->mtime->closeCursor();
+ return strtotime($mtime);
+ }
+}
diff --git a/vendor/smarty/smarty/demo/plugins/resource.mysqls.php b/vendor/smarty/smarty/demo/plugins/resource.mysqls.php
new file mode 100644
index 000000000..148a8dd61
--- /dev/null
+++ b/vendor/smarty/smarty/demo/plugins/resource.mysqls.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * MySQL Resource
+ * Resource Implementation based on the Custom API to use
+ * MySQL as the storage resource for Smarty's templates and configs.
+ * Note that this MySQL implementation fetches the source and timestamps in
+ * a single database query, instead of two separate like resource.mysql.php does.
+ * Table definition:
+ * <pre>CREATE TABLE IF NOT EXISTS `templates` (
+ * `name` varchar(100) NOT NULL,
+ * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ * `source` text,
+ * PRIMARY KEY (`name`)
+ * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
+ * Demo data:
+ * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello
+ * world"}{$x}');</pre>
+ *
+ *
+ * @package Resource-examples
+ * @author Rodney Rehm
+ */
+class Smarty_Resource_Mysqls extends Smarty_Resource_Custom
+{
+ /**
+ * PDO instance
+ *
+ * @var \PDO
+ */
+ protected $db;
+
+ /**
+ * prepared fetch() statement
+ *
+ * @var \PDOStatement
+ */
+ protected $fetch;
+
+ /**
+ * Smarty_Resource_Mysqls constructor.
+ *
+ * @throws \SmartyException
+ */
+ public function __construct()
+ {
+ try {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty");
+ } catch (PDOException $e) {
+ throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
+ }
+ $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
+ }
+
+ /**
+ * Fetch a template and its modification time from database
+ *
+ * @param string $name template name
+ * @param string $source template source
+ * @param integer $mtime template modification timestamp (epoch)
+ *
+ * @return void
+ */
+ protected function fetch($name, &$source, &$mtime)
+ {
+ $this->fetch->execute(array('name' => $name));
+ $row = $this->fetch->fetch();
+ $this->fetch->closeCursor();
+ if ($row) {
+ $source = $row[ 'source' ];
+ $mtime = strtotime($row[ 'modified' ]);
+ } else {
+ $source = null;
+ $mtime = null;
+ }
+ }
+}
diff --git a/vendor/smarty/smarty/demo/templates/footer.tpl b/vendor/smarty/smarty/demo/templates/footer.tpl
new file mode 100644
index 000000000..e04310fdd
--- /dev/null
+++ b/vendor/smarty/smarty/demo/templates/footer.tpl
@@ -0,0 +1,2 @@
+</BODY>
+</HTML>
diff --git a/vendor/smarty/smarty/demo/templates/header.tpl b/vendor/smarty/smarty/demo/templates/header.tpl
new file mode 100644
index 000000000..783210a18
--- /dev/null
+++ b/vendor/smarty/smarty/demo/templates/header.tpl
@@ -0,0 +1,5 @@
+<HTML>
+<HEAD>
+<TITLE>{$title} - {$Name}</TITLE>
+</HEAD>
+<BODY bgcolor="#ffffff">
diff --git a/vendor/smarty/smarty/demo/templates/index.tpl b/vendor/smarty/smarty/demo/templates/index.tpl
new file mode 100644
index 000000000..1fbb6d379
--- /dev/null
+++ b/vendor/smarty/smarty/demo/templates/index.tpl
@@ -0,0 +1,87 @@
+{config_load file="test.conf" section="setup"}
+{include file="header.tpl" title=foo}
+
+<PRE>
+
+{* bold and title are read from the config file *}
+ {if #bold#}<b>{/if}
+ {* capitalize the first letters of each word of the title *}
+ Title: {#title#|capitalize}
+ {if #bold#}</b>{/if}
+
+ The current date and time is {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
+
+ The value of global assigned variable $SCRIPT_NAME is {$SCRIPT_NAME}
+
+ Example of accessing server environment variable SERVER_NAME: {$smarty.server.SERVER_NAME}
+
+ The value of {ldelim}$Name{rdelim} is <b>{$Name}</b>
+
+variable modifier example of {ldelim}$Name|upper{rdelim}
+
+<b>{$Name|upper}</b>
+
+
+An example of a section loop:
+
+ {section name=outer
+ loop=$FirstName}
+ {if $smarty.section.outer.index is odd by 2}
+ {$smarty.section.outer.rownum} . {$FirstName[outer]} {$LastName[outer]}
+ {else}
+ {$smarty.section.outer.rownum} * {$FirstName[outer]} {$LastName[outer]}
+ {/if}
+ {sectionelse}
+ none
+ {/section}
+
+ An example of section looped key values:
+
+ {section name=sec1 loop=$contacts}
+ phone: {$contacts[sec1].phone}
+ <br>
+
+ fax: {$contacts[sec1].fax}
+ <br>
+
+ cell: {$contacts[sec1].cell}
+ <br>
+ {/section}
+ <p>
+
+ testing strip tags
+ {strip}
+<table border=0>
+ <tr>
+ <td>
+ <A HREF="{$SCRIPT_NAME}">
+ <font color="red">This is a test </font>
+ </A>
+ </td>
+ </tr>
+</table>
+ {/strip}
+
+</PRE>
+
+This is an example of the html_select_date function:
+
+<form>
+ {html_select_date start_year=1998 end_year=2010}
+</form>
+
+This is an example of the html_select_time function:
+
+<form>
+ {html_select_time use_24_hours=false}
+</form>
+
+This is an example of the html_options function:
+
+<form>
+ <select name=states>
+ {html_options values=$option_values selected=$option_selected output=$option_output}
+ </select>
+</form>
+
+{include file="footer.tpl"}
diff --git a/vendor/smarty/smarty/docs/_config.yml b/vendor/smarty/smarty/docs/_config.yml
new file mode 100644
index 000000000..2f7efbeab
--- /dev/null
+++ b/vendor/smarty/smarty/docs/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-minimal \ No newline at end of file
diff --git a/vendor/smarty/smarty/docs/appendixes/tips.md b/vendor/smarty/smarty/docs/appendixes/tips.md
new file mode 100644
index 000000000..cdcc56b19
--- /dev/null
+++ b/vendor/smarty/smarty/docs/appendixes/tips.md
@@ -0,0 +1,269 @@
+Tips & Tricks {#tips}
+=============
+
+Blank Variable Handling {#tips.blank.var.handling}
+=======================
+
+There may be times when you want to print a default value for an empty
+variable instead of printing nothing, such as printing `&nbsp;` so that
+html table backgrounds work properly. Many would use an
+[`{if}`](#language.function.if) statement to handle this, but there is a
+shorthand way with Smarty, using the
+[`default`](#language.modifier.default) variable modifier.
+
+> **Note**
+>
+> "Undefined variable" errors will show an E\_NOTICE if not disabled in
+> PHP\'s [`error_reporting()`](&url.php-manual;error_reporting) level or
+> Smarty\'s [`$error_reporting`](#variable.error.reporting) property and
+> a variable had not been assigned to Smarty.
+
+
+ {* the long way *}
+ {if $title eq ''}
+ &nbsp;
+ {else}
+ {$title}
+ {/if}
+
+ {* the short way *}
+ {$title|default:'&nbsp;'}
+
+
+
+See also [`default`](#language.modifier.default) modifier and [default
+variable handling](#tips.default.var.handling).
+
+Default Variable Handling {#tips.default.var.handling}
+=========================
+
+If a variable is used frequently throughout your templates, applying the
+[`default`](#language.modifier.default) modifier every time it is
+mentioned can get a bit ugly. You can remedy this by assigning the
+variable its default value with the
+[`{assign}`](#language.function.assign) function.
+
+
+ {* do this somewhere at the top of your template *}
+ {assign var='title' value=$title|default:'no title'}
+
+ {* if $title was empty, it now contains the value "no title" when you use it *}
+ {$title}
+
+
+
+See also [`default`](#language.modifier.default) modifier and [blank
+variable handling](#tips.blank.var.handling).
+
+Passing variable title to header template {#tips.passing.vars}
+=========================================
+
+When the majority of your templates use the same headers and footers, it
+is common to split those out into their own templates and
+[`{include}`](#language.function.include) them. But what if the header
+needs to have a different title, depending on what page you are coming
+from? You can pass the title to the header as an
+[attribute](#language.syntax.attributes) when it is included.
+
+`mainpage.tpl` - When the main page is drawn, the title of "Main Page"
+is passed to the `header.tpl`, and will subsequently be used as the
+title.
+
+
+ {include file='header.tpl' title='Main Page'}
+ {* template body goes here *}
+ {include file='footer.tpl'}
+
+
+
+`archives.tpl` - When the archives page is drawn, the title will be
+"Archives". Notice in the archive example, we are using a variable from
+the `archives_page.conf` file instead of a hard coded variable.
+
+
+ {config_load file='archive_page.conf'}
+
+ {include file='header.tpl' title=#archivePageTitle#}
+ {* template body goes here *}
+ {include file='footer.tpl'}
+
+
+
+`header.tpl` - Notice that "Smarty News" is printed if the `$title`
+variable is not set, using the [`default`](#language.modifier.default)
+variable modifier.
+
+
+ <html>
+ <head>
+ <title>{$title|default:'Smarty News'}</title>
+ </head>
+ <body>
+
+
+
+`footer.tpl`
+
+
+ </body>
+ </html>
+
+
+
+Dates {#tips.dates}
+=====
+
+As a rule of thumb, always pass dates to Smarty as
+[timestamps](&url.php-manual;time). This allows template designers to
+use the [`date_format`](#language.modifier.date.format) modifier for
+full control over date formatting, and also makes it easy to compare
+dates if necessary.
+
+
+ {$startDate|date_format}
+
+
+
+This will output:
+
+
+ Jan 4, 2009
+
+
+
+
+ {$startDate|date_format:"%Y/%m/%d"}
+
+
+
+This will output:
+
+
+ 2009/01/04
+
+
+
+Dates can be compared in the template by timestamps with:
+
+
+ {if $order_date < $invoice_date}
+ ...do something..
+ {/if}
+
+
+
+When using [`{html_select_date}`](#language.function.html.select.date)
+in a template, the programmer will most likely want to convert the
+output from the form back into timestamp format. Here is a function to
+help you with that.
+
+
+ <?php
+
+ // this assumes your form elements are named
+ // startDate_Day, startDate_Month, startDate_Year
+
+ $startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);
+
+ function makeTimeStamp($year='', $month='', $day='')
+ {
+ if(empty($year)) {
+ $year = strftime('%Y');
+ }
+ if(empty($month)) {
+ $month = strftime('%m');
+ }
+ if(empty($day)) {
+ $day = strftime('%d');
+ }
+
+ return mktime(0, 0, 0, $month, $day, $year);
+ }
+ ?>
+
+
+
+See also [`{html_select_date}`](#language.function.html.select.date),
+[`{html_select_time}`](#language.function.html.select.time),
+[`date_format`](#language.modifier.date.format) and
+[`$smarty.now`](#language.variables.smarty.now),
+
+Componentized Templates {#tips.componentized.templates}
+=======================
+
+Traditionally, programming templates into your applications goes as
+follows: First, you accumulate your variables within your PHP
+application, (maybe with database queries.) Then, you instantiate your
+Smarty object, [`assign()`](#api.assign) the variables and
+[`display()`](#api.display) the template. So lets say for example we
+have a stock ticker on our template. We would collect the stock data in
+our application, then assign these variables in the template and display
+it. Now wouldn't it be nice if you could add this stock ticker to any
+application by merely including the template, and not worry about
+fetching the data up front?
+
+You can do this by writing a custom plugin for fetching the content and
+assigning it to a template variable.
+
+`function.load_ticker.php` - drop file in
+[`$plugins directory`](#variable.plugins.dir)
+
+
+ <?php
+
+ // setup our function for fetching stock data
+ function fetch_ticker($symbol)
+ {
+ // put logic here that fetches $ticker_info
+ // from some ticker resource
+ return $ticker_info;
+ }
+
+ function smarty_function_load_ticker($params, $smarty)
+ {
+ // call the function
+ $ticker_info = fetch_ticker($params['symbol']);
+
+ // assign template variable
+ $smarty->assign($params['assign'], $ticker_info);
+ }
+ ?>
+
+
+
+`index.tpl`
+
+
+ {load_ticker symbol='SMARTY' assign='ticker'}
+
+ Stock Name: {$ticker.name} Stock Price: {$ticker.price}
+
+
+
+See also: [`{include}`](#language.function.include).
+
+Obfuscating E-mail Addresses {#tips.obfuscating.email}
+============================
+
+Do you ever wonder how your email address gets on so many spam mailing
+lists? One way spammers collect email addresses is from web pages. To
+help combat this problem, you can make your email address show up in
+scrambled javascript in the HTML source, yet it it will look and work
+correctly in the browser. This is done with the
+[`{mailto}`](#language.function.mailto) plugin.
+
+
+ <div id="contact">Send inquiries to
+ {mailto address=$EmailAddress encode='javascript' subject='Hello'}
+ </div>
+
+
+
+> **Note**
+>
+> This method isn\'t 100% foolproof. A spammer could conceivably program
+> his e-mail collector to decode these values, but not likely\....
+> hopefully..yet \... wheres that quantum computer :-?.
+
+See also [`escape`](#language.modifier.escape) modifier and
+[`{mailto}`](#language.function.mailto).
diff --git a/vendor/smarty/smarty/docs/appendixes/troubleshooting.md b/vendor/smarty/smarty/docs/appendixes/troubleshooting.md
new file mode 100644
index 000000000..d605dd2bd
--- /dev/null
+++ b/vendor/smarty/smarty/docs/appendixes/troubleshooting.md
@@ -0,0 +1,120 @@
+Troubleshooting
+===============
+
+Smarty/PHP errors {#smarty.php.errors}
+=================
+
+Smarty can catch many errors such as missing tag attributes or malformed
+variable names. If this happens, you will see an error similar to the
+following:
+
+
+ Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
+ in /path/to/smarty/Smarty.class.php on line 1041
+
+ Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
+ in /path/to/smarty/Smarty.class.php on line 1041
+
+
+
+Smarty shows you the template name, the line number and the error. After
+that, the error consists of the actual line number in the Smarty class
+that the error occurred.
+
+There are certain errors that Smarty cannot catch, such as missing close
+tags. These types of errors usually end up in PHP compile-time parsing
+errors.
+
+
+ Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75
+
+
+
+When you encounter a PHP parsing error, the error line number will
+correspond to the compiled PHP script, NOT the template itself. Usually
+you can look at the template and spot the syntax error. Here are some
+common things to look for: missing close tags for
+[`{if}{/if}`](#language.function.if) or
+[`{section}{/section}`](#language.function.if), or syntax of logic
+within an `{if}` tag. If you can\'t find the error, you might have to
+open the compiled PHP file and go to the line number to figure out where
+the corresponding error is in the template.
+
+
+ Warning: Smarty error: unable to read resource: "index.tpl" in...
+ or
+ Warning: Smarty error: unable to read resource: "site.conf" in...
+
+- The [`$template_dir`](#variable.template.dir) is incorrect, doesn\'t
+ exist or the file `index.tpl` is not in the `templates/` directory
+
+- A [`{config_load}`](#language.function.config.load) function is
+ within a template (or [`configLoad()`](#api.config.load) has been
+ called) and either [`$config_dir`](#variable.config.dir) is
+ incorrect, does not exist or `site.conf` is not in the directory.
+
+<!-- -->
+
+
+ Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist,
+ or is not a directory...
+
+
+
+- Either the [`$compile_dir`](#variable.compile.dir)is incorrectly
+ set, the directory does not exist, or `templates_c` is a file and
+ not a directory.
+
+<!-- -->
+
+
+ Fatal error: Smarty error: unable to write to $compile_dir '....
+
+
+
+- The [`$compile_dir`](#variable.compile.dir) is not writable by the
+ web server. See the bottom of the [installing
+ smarty](#installing.smarty.basic) page for more about permissions.
+
+<!-- -->
+
+
+ Fatal error: Smarty error: the $cache_dir 'cache' does not exist,
+ or is not a directory. in /..
+
+
+
+- This means that [`$caching`](#variable.caching) is enabled and
+ either; the [`$cache_dir`](#variable.cache.dir) is incorrectly set,
+ the directory does not exist, or `cache/` is a file and not a
+ directory.
+
+<!-- -->
+
+
+ Fatal error: Smarty error: unable to write to $cache_dir '/...
+
+
+
+- This means that [`$caching`](#variable.caching) is enabled and the
+ [`$cache_dir`](#variable.cache.dir) is not writable by the web
+ server. See the bottom of the [installing
+ smarty](#installing.smarty.basic) page for permissions.
+
+<!-- -->
+
+
+ Warning: filemtime(): stat failed for /path/to/smarty/cache/3ab50a623e65185c49bf17c63c90cc56070ea85c.one.tpl.php
+ in /path/to/smarty/libs/sysplugins/smarty_resource.php
+
+
+
+- This means that your application registered a custom error handler
+ (using [set\_error\_handler()](&url.php-manual;set_error_handler))
+ which is not respecting the given `$errno` as it should. If, for
+ whatever reason, this is the desired behaviour of your custom error
+ handler, please call
+ [`muteExpectedErrors()`](#api.mute.expected.errors) after you\'ve
+ registered your custom error handler.
+
+See also [debugging](#chapter.debugging.console).
diff --git a/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md b/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md
new file mode 100644
index 000000000..6429b4876
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/chapter-debugging-console.md
@@ -0,0 +1,41 @@
+Debugging Console {#chapter.debugging.console}
+=================
+
+There is a debugging console included with Smarty. The console informs
+you of all the [included](./language-builtin-functions/language-function-include.md) templates,
+[assigned](../programmers/api-functions/api-assign.md) variables and
+[config](./language-variables/language-config-variables.md) file variables for the current
+invocation of the template. A template file named `debug.tpl` is
+included with the distribution of Smarty which controls the formatting
+of the console.
+
+Set [`$debugging`](../programmers/api-variables/variable-debugging.md) to TRUE in Smarty, and if needed
+set [`$debug_tpl`](../programmers/api-variables/variable-debug-template.md) to the template resource
+path to `debug.tpl` (this is in [`SMARTY_DIR`](../programmers/smarty-constants.md) by
+default). When you load the page, a Javascript console window will pop
+up and give you the names of all the included templates and assigned
+variables for the current page.
+
+To see the available variables for a particular template, see the
+[`{debug}`](./language-builtin-functions/language-function-debug.md) template function. To disable the
+debugging console, set [`$debugging`](../programmers/api-variables/variable-debugging.md) to FALSE. You
+can also temporarily turn on the debugging console by putting
+`SMARTY_DEBUG` in the URL if you enable this option with
+[`$debugging_ctrl`](../programmers/api-variables/variable-debugging-ctrl.md).
+
+> **Note**
+>
+> The debugging console does not work when you use the
+> [`fetch()`](../programmers/api-functions/api-fetch.md) API, only when using
+> [`display()`](../programmers/api-functions/api-display.md). It is a set of javascript statements
+> added to the very bottom of the generated template. If you do not like
+> javascript, you can edit the `debug.tpl` template to format the output
+> however you like. Debug data is not cached and `debug.tpl` info is not
+> included in the output of the debug console.
+
+> **Note**
+>
+> The load times of each template and config file are in seconds, or
+> fractions thereof.
+
+See also [troubleshooting](../appendixes/troubleshooting.md).
diff --git a/vendor/smarty/smarty/docs/designers/config-files.md b/vendor/smarty/smarty/docs/designers/config-files.md
new file mode 100644
index 000000000..c840e3a67
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/config-files.md
@@ -0,0 +1,77 @@
+Config Files {#config.files}
+============
+
+Config files are handy for designers to manage global template variables
+from one file. One example is template colors. Normally if you wanted to
+change the color scheme of an application, you would have to go through
+each and every template file and change the colors. With a config file,
+the colors can be kept in one place, and only one file needs to be
+updated.
+
+
+ # global variables
+ pageTitle = "Main Menu"
+ bodyBgColor = #000000
+ tableBgColor = #000000
+ rowBgColor = #00ff00
+
+ [Customer]
+ pageTitle = "Customer Info"
+
+ [Login]
+ pageTitle = "Login"
+ focus = "username"
+ Intro = """This is a value that spans more
+ than one line. you must enclose
+ it in triple quotes."""
+
+ # hidden section
+ [.Database]
+ host=my.example.com
+ db=ADDRESSBOOK
+ user=php-user
+ pass=foobar
+
+
+
+Values of [config file variables](./language-variables/language-config-variables.md) can be in
+quotes, but not necessary. You can use either single or double quotes.
+If you have a value that spans more than one line, enclose the entire
+value with triple quotes (\"\"\"). You can put comments into config
+files by any syntax that is not a valid config file syntax. We recommend
+using a `
+ #` (hash) at the beginning of the line.
+
+The example config file above has two sections. Section names are
+enclosed in \[brackets\]. Section names can be arbitrary strings not
+containing `[` or `]` symbols. The four variables at the top are global
+variables, or variables not within a section. These variables are always
+loaded from the config file. If a particular section is loaded, then the
+global variables and the variables from that section are also loaded. If
+a variable exists both as a global and in a section, the section
+variable is used. If you name two variables the same within a section,
+the last one will be used unless
+[`$config_overwrite`](../programmers/api-variables/variable-config-overwrite.md) is disabled.
+
+Config files are loaded into templates with the built-in template
+function [`
+ {config_load}`](./language-builtin-functions/language-function-config-load.md) or the API
+[`configLoad()`](../programmers/api-functions/api-config-load.md) function.
+
+You can hide variables or entire sections by prepending the variable
+name or section name with a period(.) eg `[.hidden]`. This is useful if
+your application reads the config files and gets sensitive data from
+them that the template engine does not need. If you have third parties
+doing template editing, you can be certain that they cannot read
+sensitive data from the config file by loading it into the template.
+
+Config files (or resources) are loaded by the same resource facilities
+as templates. That means that a config file can also be loaded from a db
+`$smarty->configLoad("db:my.conf")`.
+
+See also [`{config_load}`](./language-builtin-functions/language-function-config-load.md),
+[`$config_overwrite`](../programmers/api-variables/variable-config-overwrite.md),
+[`$default_config_handler_func`](../programmers/api-variables/variable-default-config-handler-func.md),
+[`getConfigVars()`](../programmers/api-functions/api-get-config-vars.md),
+[`clearConfig()`](../programmers/api-functions/api-clear-config.md) and
+[`configLoad()`](../programmers/api-functions/api-config-load.md)
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax.md
new file mode 100644
index 000000000..2509857c3
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax.md
@@ -0,0 +1,33 @@
+Basic Syntax
+============
+
+A simple Smarty template could look like this:
+```html
+<h1>{$title|escape}</h1>
+<ul>
+ {foreach $cities as $city}
+ <li>{$city.name|escape} ({$city.population})</li>
+ {foreachelse}
+ <li>no cities found</li>
+ {/foreach}
+</ul>
+```
+
+All Smarty template tags are enclosed within delimiters. By default
+these are `{` and `}`, but they can be
+[changed](../programmers/api-variables/variable-left-delimiter.md).
+
+For the examples in this manual, we will assume that you are using the
+default delimiters. In Smarty, all content outside of delimiters is
+displayed as static content, or unchanged. When Smarty encounters
+template tags, it attempts to interpret them, and displays the
+appropriate output in their place.
+
+The basis components of the Smarty syntax are:
+- [Comments](./language-basic-syntax/language-syntax-comments.md)
+- [Variables](./language-basic-syntax/language-syntax-variables.md)
+- [Functions](./language-basic-syntax/language-syntax-functions.md)
+- [Attributes](./language-basic-syntax/language-syntax-attributes.md)
+- [Quotes](./language-basic-syntax/language-syntax-quotes.md)
+- [Math](./language-basic-syntax/language-math.md)
+- [Escaping](./language-basic-syntax/language-escaping.md)
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md
new file mode 100644
index 000000000..a62e7de89
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-escaping.md
@@ -0,0 +1,84 @@
+Escaping Smarty Parsing {#language.escaping}
+=======================
+
+It is sometimes desirable or even necessary to have Smarty ignore
+sections it would otherwise parse. A classic example is embedding
+Javascript or CSS code in a template. The problem arises as those
+languages use the { and } characters which are also the default
+[delimiters](#language.function.ldelim) for Smarty.
+
+> **Note**
+>
+> A good practice for avoiding escapement altogether is by separating
+> your Javascript/CSS into their own files and use standard HTML methods
+> to access them. This will also take advantage of browser script
+> caching. When you need to embed Smarty variables/functions into your
+> Javascript/CSS, then the following applies.
+
+In Smarty templates, the { and } braces will be ignored so long as they
+are surrounded by white space. This behavior can be disabled by setting
+the Smarty class variable [`$auto_literal`](#variable.auto.literal) to
+false.
+
+
+ <script>
+ // the following braces are ignored by Smarty
+ // since they are surrounded by whitespace
+ function foobar {
+ alert('foobar!');
+ }
+ // this one will need literal escapement
+ {literal}
+ function bazzy {alert('foobar!');}
+ {/literal}
+ </script>
+
+
+
+[`{literal}..{/literal}`](#language.function.literal) blocks are used
+for escaping blocks of template logic. You can also escape the braces
+individually with
+[`{ldelim}`](#language.function.ldelim),[`{rdelim}`](#language.function.ldelim)
+tags or
+[`{$smarty.ldelim}`,`{$smarty.rdelim}`](#language.variables.smarty.ldelim)
+variables.
+
+Smarty\'s default delimiters { and } cleanly represent presentational
+content. However if another set of delimiters suit your needs better,
+you can change them with Smarty\'s
+[`$left_delimiter`](#variable.left.delimiter) and
+[`$right_delimiter`](#variable.right.delimiter) values.
+
+> **Note**
+>
+> Changing delimiters affects ALL template syntax and escapement. Be
+> sure to clear out cache and compiled files if you decide to change
+> them.
+
+
+ <?php
+
+ $smarty->left_delimiter = '<!--{';
+ $smarty->right_delimiter = '}-->';
+
+ $smarty->assign('foo', 'bar');
+ $smarty->assign('name', 'Albert');
+ $smarty->display('example.tpl');
+
+ ?>
+
+
+
+Where the template is:
+
+
+ Welcome <!--{$name}--> to Smarty
+ <script language="javascript">
+ var foo = <!--{$foo}-->;
+ function dosomething() {
+ alert("foo is " + foo);
+ }
+ dosomething();
+ </script>
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md
new file mode 100644
index 000000000..dc78a3512
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-math.md
@@ -0,0 +1,29 @@
+Math {#language.math}
+====
+
+Math can be applied directly to variable values.
+
+
+ {$foo+1}
+
+ {$foo*$bar}
+
+ {* some more complicated examples *}
+
+ {$foo->bar-$bar[1]*$baz->foo->bar()-3*7}
+
+ {if ($foo+$bar.test%$baz*134232+10+$b+10)}
+
+ {$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}
+
+ {assign var="foo" value="`$foo+$bar`"}
+
+
+
+> **Note**
+>
+> Although Smarty can handle some very complex expressions and syntax,
+> it is a good rule of thumb to keep the template syntax minimal and
+> focused on presentation. If you find your template syntax getting too
+> complex, it may be a good idea to move the bits that do not deal
+> explicitly with presentation to PHP by way of plugins or modifiers.
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md
new file mode 100644
index 000000000..417ac9727
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-attributes.md
@@ -0,0 +1,50 @@
+Attributes {#language.syntax.attributes}
+==========
+
+Most of the [functions](#language.syntax.functions) take attributes that
+specify or modify their behavior. Attributes to Smarty functions are
+much like HTML attributes. Static values don't have to be enclosed in
+quotes, but it is required for literal strings. Variables with or
+without modifiers may also be used, and should not be in quotes. You can
+even use PHP function results, plugin results and complex expressions.
+
+Some attributes require boolean values (TRUE or FALSE). These can be
+specified as `true` and `false`. If an attribute has no value assigned
+it gets the default boolean value of true.
+
+
+ {include file="header.tpl"}
+
+ {include file="header.tpl" nocache} // is equivalent to nocache=true
+
+ {include file="header.tpl" attrib_name="attrib value"}
+
+ {include file=$includeFile}
+
+ {include file=#includeFile# title="My Title"}
+
+ {assign var=foo value={counter}} // plugin result
+
+ {assign var=foo value=substr($bar,2,5)} // PHP function result
+
+ {assign var=foo value=$bar|strlen} // using modifier
+
+ {assign var=foo value=$buh+$bar|strlen} // more complex expression
+
+ {html_select_date display_days=true}
+
+ {mailto address="smarty@example.com"}
+
+ <select name="company_id">
+ {html_options options=$companies selected=$company_id}
+ </select>
+
+
+
+> **Note**
+>
+> Although Smarty can handle some very complex expressions and syntax,
+> it is a good rule of thumb to keep the template syntax minimal and
+> focused on presentation. If you find your template syntax getting too
+> complex, it may be a good idea to move the bits that do not deal
+> explicitly with presentation to PHP by way of plugins or modifiers.
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md
new file mode 100644
index 000000000..43104dbb6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-comments.md
@@ -0,0 +1,71 @@
+Comments {#language.syntax.comments}
+========
+
+Template comments are surrounded by asterisks, and that is surrounded by
+the [delimiter](#variable.left.delimiter) tags like so:
+
+::: {.informalexample}
+
+ {* this is a comment *}
+
+
+:::
+
+Smarty comments are NOT displayed in the final output of the template,
+unlike `<!-- HTML comments -->`. These are useful for making internal
+notes in the templates which no one will see ;-)
+
+
+ {* I am a Smarty comment, I don't exist in the compiled output *}
+ <html>
+ <head>
+ <title>{$title}</title>
+ </head>
+ <body>
+
+ {* another single line smarty comment *}
+ <!-- HTML comment that is sent to the browser -->
+
+ {* this multiline smarty
+ comment is
+ not sent to browser
+ *}
+
+ {*********************************************************
+ Multi line comment block with credits block
+ @ author: bg@example.com
+ @ maintainer: support@example.com
+ @ para: var that sets block style
+ @ css: the style output
+ **********************************************************}
+
+ {* The header file with the main logo and stuff *}
+ {include file='header.tpl'}
+
+
+ {* Dev note: the $includeFile var is assigned in foo.php script *}
+ <!-- Displays main content block -->
+ {include file=$includeFile}
+
+ {* this <select> block is redundant *}
+ {*
+ <select name="company">
+ {html_options options=$vals selected=$selected_id}
+ </select>
+ *}
+
+ <!-- Show header from affiliate is disabled -->
+ {* $affiliate|upper *}
+
+ {* you cannot nest comments *}
+ {*
+ <select name="company">
+ {* <option value="0">-- none -- </option> *}
+ {html_options options=$vals selected=$selected_id}
+ </select>
+ *}
+
+ </body>
+ </html>
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md
new file mode 100644
index 000000000..9c8c94049
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-functions.md
@@ -0,0 +1,40 @@
+Functions {#language.syntax.functions}
+=========
+
+Every Smarty tag either prints a [variable](#language.variables) or
+invokes some sort of function. These are processed and displayed by
+enclosing the function and its [attributes](#language.syntax.attributes)
+within delimiters like so: `{funcname attr1="val1" attr2="val2"}`.
+
+
+ {config_load file="colors.conf"}
+
+ {include file="header.tpl"}
+ {insert file="banner_ads.tpl" title="My Site"}
+
+ {if $logged_in}
+ Welcome, <span style="color:{#fontColor#}">{$name}!</span>
+ {else}
+ hi, {$name}
+ {/if}
+
+ {include file="footer.tpl"}
+
+
+
+- Both [built-in functions](#language.builtin.functions) and [custom
+ functions](#language.custom.functions) have the same syntax within
+ templates.
+
+- Built-in functions are the **inner** workings of Smarty, such as
+ [`{if}`](#language.function.if),
+ [`{section}`](#language.function.section) and
+ [`{strip}`](#language.function.strip). There should be no need to
+ change or modify them.
+
+- Custom functions are **additional** functions implemented via
+ [plugins](#plugins). They can be modified to your liking, or you can
+ create new ones. [`{html_options}`](#language.function.html.options)
+ is an example of a custom function.
+
+See also [`registerPlugin()`](#api.register.plugin)
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md
new file mode 100644
index 000000000..6fe185c97
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-quotes.md
@@ -0,0 +1,61 @@
+Embedding Vars in Double Quotes {#language.syntax.quotes}
+===============================
+
+- Smarty will recognize [assigned](#api.assign)
+ [variables](#language.syntax.variables) embedded in \"double
+ quotes\" so long as the variable name contains only numbers, letters
+ and under\_scores. See [naming](&url.php-manual;language.variables)
+ for more detail.
+
+- With any other characters, for example a period(.) or
+ `$object->reference`, then the variable must be surrounded by
+ `` `backticks` ``.
+
+- In addition Smarty3 does allow embedded Smarty tags in double quoted
+ strings. This is useful if you want to include variables with
+ modifiers, plugin or PHP function results.
+
+<!-- -->
+
+
+ {func var="test $foo test"} // sees $foo
+ {func var="test $foo_bar test"} // sees $foo_bar
+ {func var="test `$foo[0]` test"} // sees $foo[0]
+ {func var="test `$foo[bar]` test"} // sees $foo[bar]
+ {func var="test $foo.bar test"} // sees $foo (not $foo.bar)
+ {func var="test `$foo.bar` test"} // sees $foo.bar
+ {func var="test `$foo.bar` test"|escape} // modifiers outside quotes!
+ {func var="test {$foo|escape} test"} // modifiers inside quotes!
+ {func var="test {time()} test"} // PHP function result
+ {func var="test {counter} test"} // plugin result
+ {func var="variable foo is {if !$foo}not {/if} defined"} // Smarty block function
+
+
+
+
+ {* will replace $tpl_name with value *}
+ {include file="subdir/$tpl_name.tpl"}
+
+ {* does NOT replace $tpl_name *}
+ {include file='subdir/$tpl_name.tpl'} // vars require double quotes!
+
+ {* must have backticks as it contains a dot "." *}
+ {cycle values="one,two,`$smarty.config.myval`"}
+
+ {* must have backticks as it contains a dot "." *}
+ {include file="`$module.contact`.tpl"}
+
+ {* can use variable with dot syntax *}
+ {include file="`$module.$view`.tpl"}
+
+
+
+> **Note**
+>
+> Although Smarty can handle some very complex expressions and syntax,
+> it is a good rule of thumb to keep the template syntax minimal and
+> focused on presentation. If you find your template syntax getting too
+> complex, it may be a good idea to move the bits that do not deal
+> explicitly with presentation to PHP by way of plugins or modifiers.
+
+See also [`escape`](#language.modifier.escape).
diff --git a/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md
new file mode 100644
index 000000000..671ad8bb8
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-basic-syntax/language-syntax-variables.md
@@ -0,0 +1,111 @@
+Variables {#language.syntax.variables}
+=========
+
+Template variables start with the \$dollar sign. They can contain
+numbers, letters and underscores, much like a [PHP
+variable](&url.php-manual;language.variables). You can reference arrays
+by index numerically or non-numerically. Also reference object
+properties and methods.
+
+[Config file variables](#language.config.variables) are an exception to
+the \$dollar syntax and are instead referenced with surrounding
+\#hashmarks\#, or via the
+[`$smarty.config`](#language.variables.smarty.config) variable.
+
+
+ {$foo} <-- displaying a simple variable (non array/object)
+ {$foo[4]} <-- display the 5th element of a zero-indexed array
+ {$foo.bar} <-- display the "bar" key value of an array, similar to PHP $foo['bar']
+ {$foo.$bar} <-- display variable key value of an array, similar to PHP $foo[$bar]
+ {$foo->bar} <-- display the object property "bar"
+ {$foo->bar()} <-- display the return value of object method "bar"
+ {#foo#} <-- display the config file variable "foo"
+ {$smarty.config.foo} <-- synonym for {#foo#}
+ {$foo[bar]} <-- syntax only valid in a section loop, see {section}
+ {assign var=foo value='baa'}{$foo} <-- displays "baa", see {assign}
+
+ Many other combinations are allowed
+
+ {$foo.bar.baz}
+ {$foo.$bar.$baz}
+ {$foo[4].baz}
+ {$foo[4].$baz}
+ {$foo.bar.baz[4]}
+ {$foo->bar($baz,2,$bar)} <-- passing parameters
+ {"foo"} <-- static values are allowed
+
+ {* display the server variable "SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
+ {$smarty.server.SERVER_NAME}
+
+ Math and embedding tags:
+
+ {$x+$y} // will output the sum of x and y.
+ {assign var=foo value=$x+$y} // in attributes
+ {$foo[$x+3]} // as array index
+ {$foo={counter}+3} // tags within tags
+ {$foo="this is message {counter}"} // tags within double quoted strings
+
+ Defining Arrays:
+
+ {assign var=foo value=[1,2,3]}
+ {assign var=foo value=['y'=>'yellow','b'=>'blue']}
+ {assign var=foo value=[1,[9,8],3]} // can be nested
+
+ Short variable assignment:
+
+ {$foo=$bar+2}
+ {$foo = strlen($bar)} // function in assignment
+ {$foo = myfunct( ($x+$y)*3 )} // as function parameter
+ {$foo.bar=1} // assign to specific array element
+ {$foo.bar.baz=1}
+ {$foo[]=1} // appending to an array
+
+ Smarty "dot" syntax (note: embedded {} are used to address ambiguities):
+
+ {$foo.a.b.c} => $foo['a']['b']['c']
+ {$foo.a.$b.c} => $foo['a'][$b]['c'] // with variable index
+ {$foo.a.{$b+4}.c} => $foo['a'][$b+4]['c'] // with expression as index
+ {$foo.a.{$b.c}} => $foo['a'][$b['c']] // with nested index
+
+ PHP-like syntax, alternative to "dot" syntax:
+
+ {$foo[1]} // normal access
+ {$foo['bar']}
+ {$foo['bar'][1]}
+ {$foo[$x+$x]} // index may contain any expression
+ {$foo[$bar[1]]} // nested index
+ {$foo[section_name]} // smarty {section} access, not array access!
+
+ Variable variables:
+
+ $foo // normal variable
+ $foo_{$bar} // variable name containing other variable
+ $foo_{$x+$y} // variable name containing expressions
+ $foo_{$bar}_buh_{$blar} // variable name with multiple segments
+ {$foo_{$x}} // will output the variable $foo_1 if $x has a value of 1.
+
+ Object chaining:
+
+ {$object->method1($x)->method2($y)}
+
+ Direct PHP function access:
+
+ {time()}
+
+
+
+
+> **Note**
+>
+> Although Smarty can handle some very complex expressions and syntax,
+> it is a good rule of thumb to keep the template syntax minimal and
+> focused on presentation. If you find your template syntax getting too
+> complex, it may be a good idea to move the bits that do not deal
+> explicitly with presentation to PHP by way of plugins or modifiers.
+
+Request variables such as `$_GET`, `$_SESSION`, etc are available via
+the reserved [`$smarty`](#language.variables.smarty) variable.
+
+See also [`$smarty`](#language.variables.smarty), [config
+variables](#language.config.variables)
+[`{assign}`](#language.function.assign) and [`assign()`](#api.assign).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions.md
new file mode 100644
index 000000000..fa6155550
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions.md
@@ -0,0 +1,38 @@
+Built-in Functions {#language.builtin.functions}
+==================
+
+## Table of contents
+- [{$var=...}](./language-builtin-functions/language-function-shortform-assign.md)
+- [{append}](./language-builtin-functions/language-function-append.md)
+- [{assign}](./language-builtin-functions/language-function-assign.md)
+- [{block}](./language-builtin-functions/language-function-block.md)
+- [{call}](./language-builtin-functions/language-function-call.md)
+- [{capture}](./language-builtin-functions/language-function-capture.md)
+- [{config_load}](./language-builtin-functions/language-function-config.load)
+- [{debug}](./language-builtin-functions/language-function-debug.md)
+- [{extends}](./language-builtin-functions/language-function-extends.md)
+- [{for}](./language-builtin-functions/language-function-for.md)
+- [{foreach},{foreachelse}](./language-builtin-functions/language-function-foreach.md)
+- [{function}](./language-builtin-functions/language-function-function.md)
+- [{if},{elseif},{else}](./language-builtin-functions/language-function-if.md)
+- [{include}](./language-builtin-functions/language-function-include.md)
+- [{insert}](./language-builtin-functions/language-function-insert.md)
+- [{ldelim},{rdelim}](./language-builtin-functions/language-function-ldelim.md)
+- [{literal}](./language-builtin-functions/language-function-literal.md)
+- [{nocache}](./language-builtin-functions/language-function-nocache.md)
+- [{section},{sectionelse}](./language-builtin-functions/language-function-section.md)
+- [{setfilter}](./language-builtin-functions/language-function-setfilter.md)
+- [{strip}](./language-builtin-functions/language-function-strip.md)
+- [{while}](./language-builtin-functions/language-function-while.md)
+
+Smarty comes with several built-in functions. These built-in functions
+are the integral part of the smarty template engine. They are compiled
+into corresponding inline PHP code for maximum performance.
+
+You cannot create your own [custom
+functions](./language-custom-functions.md) with the same name; and you
+should not need to modify the built-in functions.
+
+A few of these functions have an `assign` attribute which collects the
+result the function to a named template variable instead of being
+output; much like the [`{assign}`](./language-builtin-functions/language-function-assign.md) function.
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md
new file mode 100644
index 000000000..62f2c7e19
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-append.md
@@ -0,0 +1,49 @@
+{append} {#language.function.append}
+========
+
+`{append}` is used for creating or appending template variable arrays
+**during the execution of a template**.
+
+> **Note**
+>
+> Assignment of variables in-template is essentially placing application
+> logic into the presentation that may be better handled in PHP. Use at
+> your own discretion.
+
+**Attributes:**
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- --------- ----------------------------------------------------------------------------------------------------
+ var string Yes *n/a* The name of the variable being assigned
+ value string Yes *n/a* The value being assigned
+ index string No *n/a* The index for the new array element. If not specified the value is append to the end of the array.
+ scope string No *n/a* The scope of the assigned variable: \'parent\',\'root\' or \'global\'
+
+**Option Flags:**
+
+ Name Description
+ --------- -----------------------------------------------------
+ nocache Assigns the variable with the \'nocache\' attribute
+
+
+ {append var='name' value='Bob' index='first'}
+ {append var='name' value='Meyer' index='last'}
+ // or
+ {append 'name' 'Bob' index='first'} {* short-hand *}
+ {append 'name' 'Meyer' index='last'} {* short-hand *}
+
+ The first name is {$name.first}.<br>
+ The last name is {$name.last}.
+
+
+
+The above example will output:
+
+
+ The first name is Bob.
+ The last name is Meyer.
+
+
+
+See also [`append()`](#api.append) and
+[`getTemplateVars()`](#api.get.template.vars).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md
new file mode 100644
index 000000000..e4d50d300
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-assign.md
@@ -0,0 +1,148 @@
+{assign} {#language.function.assign}
+========
+
+`{assign}` is used for assigning template variables **during the
+execution of a template**.
+
+> **Note**
+>
+> Assignment of variables in-template is essentially placing application
+> logic into the presentation that may be better handled in PHP. Use at
+> your own discretion.
+
+> **Note**
+>
+> See also the [`short-form`](#language.function.shortform.assign)
+> method of assigning template vars.
+
+**Attributes:**
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- --------- -----------------------------------------------------------------------
+ var string Yes *n/a* The name of the variable being assigned
+ value string Yes *n/a* The value being assigned
+ scope string No *n/a* The scope of the assigned variable: \'parent\',\'root\' or \'global\'
+
+**Option Flags:**
+
+ Name Description
+ --------- -----------------------------------------------------
+ nocache Assigns the variable with the \'nocache\' attribute
+
+
+ {assign var="name" value="Bob"}
+ {assign "name" "Bob"} {* short-hand *}
+
+ The value of $name is {$name}.
+
+
+
+The above example will output:
+
+
+ The value of $name is Bob.
+
+
+
+
+ {assign var="name" value="Bob" nocache}
+ {assign "name" "Bob" nocache} {* short-hand *}
+
+ The value of $name is {$name}.
+
+
+
+The above example will output:
+
+
+ The value of $name is Bob.
+
+
+
+
+ {assign var=running_total value=$running_total+$some_array[$row].some_value}
+
+
+
+Variables assigned in the included template will be seen in the
+including template.
+
+
+ {include file="sub_template.tpl"}
+ ...
+ {* display variable assigned in sub_template *}
+ {$foo}<br>
+ ...
+
+
+
+The template above includes the example `sub_template.tpl` below
+
+
+ ...
+ {* foo will be known also in the including template *}
+ {assign var="foo" value="something" scope=parent}
+ {* bar is assigned only local in the including template *}
+ {assign var="bar" value="value"}
+ ...
+
+You can assign a variable to root of the current root tree. The variable
+is seen by all templates using the same root tree.
+
+
+ {assign var=foo value="bar" scope="root"}
+
+
+
+A global variable is seen by all templates.
+
+
+ {assign var=foo value="bar" scope="global"}
+ {assign "foo" "bar" scope="global"} {* short-hand *}
+
+
+
+To access `{assign}` variables from a php script use
+[`getTemplateVars()`](#api.get.template.vars). Here\'s the template that
+creates the variable `$foo`.
+
+
+ {assign var="foo" value="Smarty"}
+
+The template variables are only available after/during template
+execution as in the following script.
+
+
+ <?php
+
+ // this will output nothing as the template has not been executed
+ echo $smarty->getTemplateVars('foo');
+
+ // fetch the template to a variable
+ $whole_page = $smarty->fetch('index.tpl');
+
+ // this will output 'smarty' as the template has been executed
+ echo $smarty->getTemplateVars('foo');
+
+ $smarty->assign('foo','Even smarter');
+
+ // this will output 'Even smarter'
+ echo $smarty->getTemplateVars('foo');
+
+ ?>
+
+The following functions can also *optionally* assign template variables.
+
+[`{capture}`](#language.function.capture),
+[`{include}`](#language.function.include),
+[`{insert}`](#language.function.insert),
+[`{counter}`](#language.function.counter),
+[`{cycle}`](#language.function.cycle),
+[`{eval}`](#language.function.eval),
+[`{fetch}`](#language.function.fetch),
+[`{math}`](#language.function.math),
+[`{textformat}`](#language.function.textformat)
+
+See also [`{$var=...}`](#language.function.shortform.assign),
+[`assign()`](#api.assign) and
+[`getTemplateVars()`](#api.get.template.vars).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md
new file mode 100644
index 000000000..82659852c
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-block.md
@@ -0,0 +1,191 @@
+{block} {#language.function.block}
+=======
+
+`{block}` is used to define a named area of template source for template
+inheritance. For details see section of [Template
+Inheritance](#advanced.features.template.inheritance).
+
+The `{block}` template source area of a child template will replace the
+corresponding areas in the parent template(s).
+
+Optionally `{block}` areas of child and parent templates can be merged
+into each other. You can append or prepend the parent `{block}` content
+by using the `append` or `prepend` option flag with the child's `{block}`
+definition. With the {\$smarty.block.parent} the `{block}` content of
+the parent template can be inserted at any location of the child
+`{block}` content. {\$smarty.block.child} inserts the `{block}` content
+of the child template at any location of the parent `{block}`.
+
+`{blocks}'s` can be nested.
+
+**Attributes:**
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- --------- ---------------------------------------
+ name string Yes *n/a* The name of the template source block
+
+**Option Flags (in child templates only):**
+
+ Name Description
+ --------- -------------------------------------------------------------------------------------------
+ append The `{block}` content will be be appended to the content of the parent template `{block}`
+ prepend The `{block}` content will be prepended to the content of the parent template `{block}`
+ hide Ignore the block content if no child block of same name is existing.
+ nocache Disables caching of the `{block}` content
+
+parent.tpl
+
+
+ <html>
+ <head>
+ <title>{block name="title"}Default Title{/block}</title>
+ <title>{block "title"}Default Title{/block}</title> {* short-hand *}
+ </head>
+ </html>
+
+
+
+child.tpl
+
+
+ {extends file="parent.tpl"}
+ {block name="title"}
+ Page Title
+ {/block}
+
+
+
+The result would look like
+
+
+ <html>
+ <head>
+ <title>Page Title</title>
+ </head>
+ </html>
+
+parent.tpl
+
+
+ <html>
+ <head>
+ <title>{block name="title"}Title - {/block}</title>
+ </head>
+ </html>
+
+
+
+child.tpl
+
+
+ {extends file="parent.tpl"}
+ {block name="title" prepend}
+ Page Title
+ {/block}
+
+
+
+The result would look like
+
+
+ <html>
+ <head>
+ <title>Title - Page Title</title>
+ </head>
+ </html>
+
+parent.tpl
+
+
+ <html>
+ <head>
+ <title>{block name="title"} is my title{/block}</title>
+ </head>
+ </html>
+
+
+
+child.tpl
+
+
+ {extends file="parent.tpl"}
+ {block name="title" append}
+ Page Title
+ {/block}
+
+
+
+The result would look like
+
+
+ <html>
+ <head>
+ <title>Page title is my titel</title>
+ </head>
+ </html>
+
+parent.tpl
+
+
+ <html>
+ <head>
+ <title>{block name="title"}The {$smarty.block.child} was inserted here{/block}</title>
+ </head>
+ </html>
+
+
+
+child.tpl
+
+
+ {extends file="parent.tpl"}
+ {block name="title"}
+ Child Title
+ {/block}
+
+
+
+The result would look like
+
+
+ <html>
+ <head>
+ <title>The Child Title was inserted here</title>
+ </head>
+ </html>
+
+parent.tpl
+
+
+ <html>
+ <head>
+ <title>{block name="title"}Parent Title{/block}</title>
+ </head>
+ </html>
+
+
+
+child.tpl
+
+
+ {extends file="parent.tpl"}
+ {block name="title"}
+ You will see now - {$smarty.block.parent} - here
+ {/block}
+
+
+
+The result would look like
+
+
+ <html>
+ <head>
+ <title>You will see now - Parent Title - here</title>
+ </head>
+ </html>
+
+See also [Template
+Inheritance](#advanced.features.template.inheritance),
+[`$smarty.block.parent`](#language.variables.smarty.block.parent),
+[`$smarty.block.child`](#language.variables.smarty.block.child), and
+[`{extends}`](#language.function.extends)
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md
new file mode 100644
index 000000000..786f0c10c
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-call.md
@@ -0,0 +1,76 @@
+{call} {#language.function.call}
+======
+
+`{call}` is used to call a template function defined by the
+[`{function}`](#language.function.function) tag just like a plugin
+function.
+
+> **Note**
+>
+> Template functions are defined global. Since the Smarty compiler is a
+> single-pass compiler, The [`{call}`](#language.function.call) tag must
+> be used to call a template function defined externally from the given
+> template. Otherwise you can directly use the function as
+> `{funcname ...}` in the template.
+
+- The `{call}` tag must have the `name` attribute which contains the
+ the name of the template function.
+
+- Values for variables can be passed to the template function as
+ [attributes](#language.syntax.attributes).
+
+**Attributes:**
+
+ Attribute Name Type Required Default Description
+ ---------------- -------------- ---------- --------- ------------------------------------------------------------------------------------------
+ name string Yes *n/a* The name of the template function
+ assign string No *n/a* The name of the variable that the output of called template function will be assigned to
+ \[var \...\] \[var type\] No *n/a* variable to pass local to template function
+
+**Option Flags:**
+
+ Name Description
+ --------- --------------------------------------------
+ nocache Call the template function in nocache mode
+
+
+ {* define the function *}
+ {function name=menu level=0}
+ <ul class="level{$level}">
+ {foreach $data as $entry}
+ {if is_array($entry)}
+ <li>{$entry@key}</li>
+ {call name=menu data=$entry level=$level+1}
+ {else}
+ <li>{$entry}</li>
+ {/if}
+ {/foreach}
+ </ul>
+ {/function}
+
+ {* create an array to demonstrate *}
+ {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
+ ['item3-3-1','item3-3-2']],'item4']}
+
+ {* run the array through the function *}
+ {call name=menu data=$menu}
+ {call menu data=$menu} {* short-hand *}
+
+
+
+Will generate the following output
+
+
+ * item1
+ * item2
+ * item3
+ o item3-1
+ o item3-2
+ o item3-3
+ + item3-3-1
+ + item3-3-2
+ * item4
+
+
+
+See also [`{function}`](#language.function.function)
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md
new file mode 100644
index 000000000..9121b2874
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-capture.md
@@ -0,0 +1,82 @@
+{capture} {#language.function.capture}
+=========
+
+`{capture}` is used to collect the output of the template between the
+tags into a variable instead of displaying it. Any content between
+`{capture name='foo'}` and `{/capture}` is collected into the variable
+specified in the `name` attribute.
+
+The captured content can be used in the template from the variable
+[`$smarty.capture.foo`](#language.variables.smarty.capture) where "foo"
+is the value passed in the `name` attribute. If you do not supply the
+`name` attribute, then "default" will be used as the name ie
+`$smarty.capture.default`.
+
+`{capture}'s` can be nested.
+
+**Attributes:**
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- --------- ----------------------------------------------------------------------
+ name string Yes *n/a* The name of the captured block
+ assign string No *n/a* The variable name where to assign the captured output to
+ append string No *n/a* The name of an array variable where to append the captured output to
+
+**Option Flags:**
+
+ Name Description
+ --------- -----------------------------------------
+ nocache Disables caching of this captured block
+
+> **Note**
+>
+> Be careful when capturing [`{insert}`](#language.function.insert)
+> output. If you have [`$caching`](#caching) enabled and you have
+> [`{insert}`](#language.function.insert) commands that you expect to
+> run within cached content, do not capture this content.
+
+
+ {* we don't want to print a div tag unless content is displayed *}
+ {capture name="banner"}
+ {capture "banner"} {* short-hand *}
+ {include file="get_banner.tpl"}
+ {/capture}
+
+ {if $smarty.capture.banner ne ""}
+ <div id="banner">{$smarty.capture.banner}</div>
+ {/if}
+
+
+
+This example demonstrates the capture function.
+
+
+ {capture name=some_content assign=popText}
+ {capture some_content assign=popText} {* short-hand *}
+ The server is {$my_server_name|upper} at {$my_server_addr}<br>
+ Your ip is {$my_ip}.
+ {/capture}
+ <a href="#">{$popText}</a>
+
+
+
+This example also demonstrates how multiple calls of capture can be used
+to create an array with captured content.
+
+
+ {capture append="foo"}hello{/capture}I say just {capture append="foo"}world{/capture}
+ {foreach $foo as $text}{$text} {/foreach}
+
+
+
+The above example will output:
+
+
+ I say just hello world
+
+
+
+See also [`$smarty.capture`](#language.variables.smarty.capture),
+[`{eval}`](#language.function.eval),
+[`{fetch}`](#language.function.fetch), [`fetch()`](#api.fetch) and
+[`{assign}`](#language.function.assign).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md
new file mode 100644
index 000000000..750f337c4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-config-load.md
@@ -0,0 +1,91 @@
+{config\_load} {#language.function.config.load}
+==============
+
+`{config_load}` is used for loading config
+[`#variables#`](#language.config.variables) from a [configuration
+file](#config.files) into the template.
+
+**Attributes:**
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- --------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ file string Yes *n/a* The name of the config file to include
+ section string No *n/a* The name of the section to load
+ scope string no *local* How the scope of the loaded variables are treated, which must be one of local, parent or global. local means variables are loaded into the local template context. parent means variables are loaded into both the local context and the parent template that called it. global means variables are available to all templates.
+
+The `example.conf` file.
+
+
+ #this is config file comment
+
+ # global variables
+ pageTitle = "Main Menu"
+ bodyBgColor = #000000
+ tableBgColor = #000000
+ rowBgColor = #00ff00
+
+ #customer variables section
+ [Customer]
+ pageTitle = "Customer Info"
+
+
+
+and the template
+
+
+ {config_load file="example.conf"}
+ {config_load "example.conf"} {* short-hand *}
+
+ <html>
+ <title>{#pageTitle#|default:"No title"}</title>
+ <body bgcolor="{#bodyBgColor#}">
+ <table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+ <tr bgcolor="{#rowBgColor#}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+ </tr>
+ </table>
+ </body>
+ </html>
+
+
+
+[Config Files](#config.files) may also contain sections. You can load
+variables from within a section with the added attribute `section`. Note
+that global config variables are always loaded along with section
+variables, and same-named section variables overwrite the globals.
+
+> **Note**
+>
+> Config file *sections* and the built-in template function called
+> [`{section}`](#language.function.section) have nothing to do with each
+> other, they just happen to share a common naming convention.
+
+
+ {config_load file='example.conf' section='Customer'}
+ {config_load 'example.conf' 'Customer'} {* short-hand *}
+
+ <html>
+ <title>{#pageTitle#}</title>
+ <body bgcolor="{#bodyBgColor#}">
+ <table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+ <tr bgcolor="{#rowBgColor#}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+ </tr>
+ </table>
+ </body>
+ </html>
+
+
+
+See [`$config_overwrite`](#variable.config.overwrite) to create arrays
+of config file variables.
+
+See also the [config files](#config.files) page, [config
+variables](#language.config.variables) page,
+[`$config_dir`](#variable.config.dir),
+[`getConfigVars()`](#api.get.config.vars) and
+[`configLoad()`](#api.config.load).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md
new file mode 100644
index 000000000..fbaae1944
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-debug.md
@@ -0,0 +1,18 @@
+{debug} {#language.function.debug}
+=======
+
+`{debug}` dumps the debug console to the page. This works regardless of
+the [debug](#chapter.debugging.console) settings in the php script.
+Since this gets executed at runtime, this is only able to show the
+[assigned](#api.assign) variables; not the templates that are in use.
+However, you can see all the currently available variables within the
+scope of a template.
+
+If caching is enabled and a page is loaded from cache `{debug}` does
+show only the variables which assigned for the cached page.
+
+In order to see also the variables which have been locally assigned
+within the template it does make sense to place the `{debug}` tag at the
+end of the template.
+
+See also the [debugging console page](#chapter.debugging.console).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md
new file mode 100644
index 000000000..59f246451
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-extends.md
@@ -0,0 +1,37 @@
+{extends} {#language.function.extends}
+=========
+
+`{extends}` tags are used in child templates in template inheritance for
+extending parent templates. For details see section of [Template
+Inheritance](#advanced.features.template.inheritance).
+
+- The `{extends}` tag must be on the first line of the template.
+
+- If a child template extends a parent template with the `{extends}`
+ tag it may contain only `{block}` tags. Any other template content
+ is ignored.
+
+- Use the syntax for [template resources](#resources) to extend files
+ outside of the [`$template_dir`](#variable.template.dir) directory.
+
+> **Note**
+>
+> When extending a variable parent like `{extends file=$parent_file}`,
+> make sure you include `$parent_file` in the
+> [`$compile_id`](#variable.compile.id). Otherwise Smarty cannot
+> distinguish between different `$parent_file`s.
+
+**Attributes:**
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- --------- -------------------------------------------------
+ file string Yes *n/a* The name of the template file which is extended
+
+
+ {extends file='parent.tpl'}
+ {extends 'parent.tpl'} {* short-hand *}
+
+
+
+See also [Template Inheritance](#advanced.features.template.inheritance)
+and [`{block}`](#language.function.block).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md
new file mode 100644
index 000000000..5445f6f3b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-for.md
@@ -0,0 +1,97 @@
+{for} {#language.function.for}
+=====
+
+The `{for}{forelse}` tag is used to create simple loops. The following
+different formats are supported:
+
+- `{for $var=$start to $end}` simple loop with step size of 1.
+
+- `{for $var=$start to $end step $step}` loop with individual step
+ size.
+
+`{forelse}` is executed when the loop is not iterated.
+
+**Attributes:**
+
+ Attribute Name Shorthand Type Required Default Description
+ ---------------- ----------- --------- ---------- --------- --------------------------------
+ max n/a integer No *n/a* Limit the number of iterations
+
+**Option Flags:**
+
+ Name Description
+ --------- --------------------------------------
+ nocache Disables caching of the `{for}` loop
+
+
+ <ul>
+ {for $foo=1 to 3}
+ <li>{$foo}</li>
+ {/for}
+ </ul>
+
+
+
+The above example will output:
+
+
+ <ul>
+ <li>1</li>
+ <li>2</li>
+ <li>3</li>
+ </ul>
+
+
+
+
+ $smarty->assign('to',10);
+
+
+
+
+ <ul>
+ {for $foo=3 to $to max=3}
+ <li>{$foo}</li>
+ {/for}
+ </ul>
+
+
+
+The above example will output:
+
+
+ <ul>
+ <li>3</li>
+ <li>4</li>
+ <li>5</li>
+ </ul>
+
+
+
+
+ $smarty->assign('start',10);
+ $smarty->assign('to',5);
+
+
+
+
+ <ul>
+ {for $foo=$start to $to}
+ <li>{$foo}</li>
+ {forelse}
+ no iteration
+ {/for}
+ </ul>
+
+
+
+The above example will output:
+
+
+ no iteration
+
+
+
+See also [`{foreach}`](#language.function.foreach),
+[`{section}`](#language.function.section) and
+[`{while}`](#language.function.while)
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md
new file mode 100644
index 000000000..fdd740148
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-foreach.md
@@ -0,0 +1,407 @@
+{foreach},{foreachelse} {#language.function.foreach}
+=======================
+
+`{foreach}` is used for looping over arrays of data. `{foreach}` has a
+simpler and cleaner syntax than the
+[`{section}`](#language.function.section) loop, and can also loop over
+associative arrays.
+
+`{foreach $arrayvar as $itemvar}`
+
+`{foreach $arrayvar as $keyvar=>$itemvar}`
+
+> **Note**
+>
+> This foreach syntax does not accept any named attributes. This syntax
+> is new to Smarty 3, however the Smarty 2.x syntax
+> `{foreach from=$myarray key="mykey" item="myitem"}` is still
+> supported.
+
+- `{foreach}` loops can be nested.
+
+- The `array` variable, usually an array of values, determines the
+ number of times `{foreach}` will loop. You can also pass an integer
+ for arbitrary loops.
+
+- `{foreachelse}` is executed when there are no values in the `array`
+ variable.
+
+- `{foreach}` properties are [`@index`](#foreach.property.index),
+ [`@iteration`](#foreach.property.iteration),
+ [`@first`](#foreach.property.first),
+ [`@last`](#foreach.property.last),
+ [`@show`](#foreach.property.show),
+ [`@total`](#foreach.property.total).
+
+- `{foreach}` constructs are [`{break}`](#foreach.construct.break),
+ [`{continue}`](#foreach.construct.continue).
+
+- Instead of specifying the `key` variable you can access the current
+ key of the loop item by `{$item@key}` (see examples below).
+
+> **Note**
+>
+> The `$var@property` syntax is new to Smarty 3, however when using the
+> Smarty 2 `{foreach from=$myarray key="mykey" item="myitem"}` style
+> syntax, the `$smarty.foreach.name.property` syntax is still supported.
+
+> **Note**
+>
+> Although you can retrieve the array key with the syntax
+> `{foreach $myArray as $myKey => $myValue}`, the key is always
+> available as `$myValue@key` within the foreach loop.
+
+**Option Flags:**
+
+ Name Description
+ --------- ------------------------------------------
+ nocache Disables caching of the `{foreach}` loop
+
+
+ <?php
+ $arr = array('red', 'green', 'blue');
+ $smarty->assign('myColors', $arr);
+ ?>
+
+
+
+Template to output `$myColors` in an un-ordered list
+
+
+ <ul>
+ {foreach $myColors as $color}
+ <li>{$color}</li>
+ {/foreach}
+ </ul>
+
+
+
+The above example will output:
+
+
+ <ul>
+ <li>red</li>
+ <li>green</li>
+ <li>blue</li>
+ </ul>
+
+
+
+
+ <?php
+ $people = array('fname' => 'John', 'lname' => 'Doe', 'email' => 'j.doe@example.com');
+ $smarty->assign('myPeople', $people);
+ ?>
+
+
+
+Template to output `$myArray` as key/value pairs.
+
+
+ <ul>
+ {foreach $myPeople as $value}
+ <li>{$value@key}: {$value}</li>
+ {/foreach}
+ </ul>
+
+
+
+The above example will output:
+
+
+ <ul>
+ <li>fname: John</li>
+ <li>lname: Doe</li>
+ <li>email: j.doe@example.com</li>
+ </ul>
+
+
+
+Assign an array to Smarty, the key contains the key for each looped
+value.
+
+
+ <?php
+ $smarty->assign('contacts', array(
+ array('phone' => '555-555-1234',
+ 'fax' => '555-555-5678',
+ 'cell' => '555-555-0357'),
+ array('phone' => '800-555-4444',
+ 'fax' => '800-555-3333',
+ 'cell' => '800-555-2222')
+ ));
+ ?>
+
+
+
+The template to output `$contact`.
+
+
+ {* key always available as a property *}
+ {foreach $contacts as $contact}
+ {foreach $contact as $value}
+ {$value@key}: {$value}
+ {/foreach}
+ {/foreach}
+
+ {* accessing key the PHP syntax alternate *}
+ {foreach $contacts as $contact}
+ {foreach $contact as $key => $value}
+ {$key}: {$value}
+ {/foreach}
+ {/foreach}
+
+
+
+Either of the above examples will output:
+
+
+ phone: 555-555-1234
+ fax: 555-555-5678
+ cell: 555-555-0357
+ phone: 800-555-4444
+ fax: 800-555-3333
+ cell: 800-555-2222
+
+
+
+A database (PDO) example of looping over search results. This example is
+looping over a PHP iterator instead of an array().
+
+
+ <?php
+ include('Smarty.class.php');
+
+ $smarty = new Smarty;
+
+ $dsn = 'mysql:host=localhost;dbname=test';
+ $login = 'test';
+ $passwd = 'test';
+
+ // setting PDO to use buffered queries in mysql is
+ // important if you plan on using multiple result cursors
+ // in the template.
+
+ $db = new PDO($dsn, $login, $passwd, array(
+ PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));
+
+ $res = $db->prepare("select * from users");
+ $res->execute();
+ $res->setFetchMode(PDO::FETCH_LAZY);
+
+ // assign to smarty
+ $smarty->assign('res',$res);
+
+ $smarty->display('index.tpl');?>
+ ?>
+
+
+
+
+ {foreach $res as $r}
+ {$r.id}
+ {$r.name}
+ {foreachelse}
+ .. no results ..
+ {/foreach}
+
+
+
+The above is assuming the results contain the columns named `id` and
+`name`.
+
+What is the advantage of an iterator vs. looping over a plain old array?
+With an array, all the results are accumulated into memory before being
+looped. With an iterator, each result is loaded/released within the
+loop. This saves processing time and memory, especially for very large
+result sets.
+
+\@index {#foreach.property.index}
+-------
+
+`index` contains the current array index, starting with zero.
+
+
+ {* output empty row on the 4th iteration (when index is 3) *}
+ <table>
+ {foreach $items as $i}
+ {if $i@index eq 3}
+ {* put empty table row *}
+ <tr><td>nbsp;</td></tr>
+ {/if}
+ <tr><td>{$i.label}</td></tr>
+ {/foreach}
+ </table>
+
+
+
+\@iteration {#foreach.property.iteration}
+-----------
+
+`iteration` contains the current loop iteration and always starts at
+one, unlike [`index`](#foreach.property.index). It is incremented by one
+on each iteration.
+
+The *\"is div by\"* operator can be used to detect a specific iteration.
+Here we bold-face the name every 4th iteration.
+
+
+ {foreach $myNames as $name}
+ {if $name@iteration is div by 4}
+ <b>{$name}</b>
+ {/if}
+ {$name}
+ {/foreach}
+
+The *\"is even by\"* and *\"is odd by\"* operators can be used to
+alternate something every so many iterations. Choosing between even or
+odd rotates which one starts. Here we switch the font color every 3rd
+iteration.
+
+
+ {foreach $myNames as $name}
+ {if $name@iteration is even by 3}
+ <span style="color: #000">{$name}</span>
+ {else}
+ <span style="color: #eee">{$name}</span>
+ {/if}
+ {/foreach}
+
+
+
+This will output something similar to this:
+
+
+ <span style="color: #000">...</span>
+ <span style="color: #000">...</span>
+ <span style="color: #000">...</span>
+ <span style="color: #eee">...</span>
+ <span style="color: #eee">...</span>
+ <span style="color: #eee">...</span>
+ <span style="color: #000">...</span>
+ <span style="color: #000">...</span>
+ <span style="color: #000">...</span>
+ <span style="color: #eee">...</span>
+ <span style="color: #eee">...</span>
+ <span style="color: #eee">...</span>
+ ...
+
+
+
+\@first {#foreach.property.first}
+-------
+
+`first` is TRUE if the current `{foreach}` iteration is the initial one.
+Here we display a table header row on the first iteration.
+
+
+ {* show table header at first iteration *}
+ <table>
+ {foreach $items as $i}
+ {if $i@first}
+ <tr>
+ <th>key</td>
+ <th>name</td>
+ </tr>
+ {/if}
+ <tr>
+ <td>{$i@key}</td>
+ <td>{$i.name}</td>
+ </tr>
+ {/foreach}
+ </table>
+
+
+
+\@last {#foreach.property.last}
+------
+
+`last` is set to TRUE if the current `{foreach}` iteration is the final
+one. Here we display a horizontal rule on the last iteration.
+
+
+ {* Add horizontal rule at end of list *}
+ {foreach $items as $item}
+ <a href="#{$item.id}">{$item.name}</a>{if $item@last}<hr>{else},{/if}
+ {foreachelse}
+ ... no items to loop ...
+ {/foreach}
+
+
+
+\@show {#foreach.property.show}
+------
+
+The show `show` property can be used after the execution of a
+`{foreach}` loop to detect if data has been displayed or not. `show` is
+a boolean value.
+
+
+ <ul>
+ {foreach $myArray as $name}
+ <li>{$name}</li>
+ {/foreach}
+ </ul>
+ {if $name@show} do something here if the array contained data {/if}
+
+\@total {#foreach.property.total}
+-------
+
+`total` contains the number of iterations that this `{foreach}` will
+loop. This can be used inside or after the `{foreach}`.
+
+
+ {* show number of rows at end *}
+ {foreach $items as $item}
+ {$item.name}<hr/>
+ {if $item@last}
+ <div id="total">{$item@total} items</div>
+ {/if}
+ {foreachelse}
+ ... no items to loop ...
+ {/foreach}
+
+See also [`{section}`](#language.function.section),
+[`{for}`](#language.function.for) and
+[`{while}`](#language.function.while)
+
+{break} {#foreach.construct.break}
+-------
+
+`{break}` aborts the iteration of the array
+
+
+ {$data = [1,2,3,4,5]}
+ {foreach $data as $value}
+ {if $value == 3}
+ {* abort iterating the array *}
+ {break}
+ {/if}
+ {$value}
+ {/foreach}
+ {*
+ prints: 1 2
+ *}
+
+
+
+{continue} {#foreach.construct.continue}
+----------
+
+`{continue}` leaves the current iteration and begins with the next
+iteration.
+
+
+ {$data = [1,2,3,4,5]}
+ {foreach $data as $value}
+ {if $value == 3}
+ {* skip this iteration *}
+ {continue}
+ {/if}
+ {$value}
+ {/foreach}
+ {*
+ prints: 1 2 4 5
+ *}
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md
new file mode 100644
index 000000000..647e4bfc8
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-function.md
@@ -0,0 +1,88 @@
+{function} {#language.function.function}
+==========
+
+`{function}` is used to create functions within a template and call them
+just like a plugin function. Instead of writing a plugin that generates
+presentational content, keeping it in the template is often a more
+manageable choice. It also simplifies data traversal, such as deeply
+nested menus.
+
+> **Note**
+>
+> Template functions are defined global. Since the Smarty compiler is a
+> single-pass compiler, The [`{call}`](#language.function.call) tag must
+> be used to call a template function defined externally from the given
+> template. Otherwise you can directly use the function as
+> `{funcname ...}` in the template.
+
+- The `{function}` tag must have the `name` attribute which contains
+ the the name of the template function. A tag with this name can be
+ used to call the template function.
+
+- Default values for variables can be passed to the template function
+ as [attributes](#language.syntax.attributes). Like in PHP function
+ declarations you can only use scalar values as default. The default
+ values can be overwritten when the template function is being
+ called.
+
+- You can use all variables from the calling template inside the
+ template function. Changes to variables or new created variables
+ inside the template function have local scope and are not visible
+ inside the calling template after the template function is executed.
+
+**Attributes:**
+
+ Attribute Name Type Required Default Description
+ ---------------- -------------- ---------- --------- ---------------------------------------------------------------
+ name string Yes *n/a* The name of the template function
+ \[var \...\] \[var type\] No *n/a* default variable value to pass local to the template function
+
+> **Note**
+>
+> You can pass any number of parameter to the template function when it
+> is called. The parameter variables must not be declared in the
+> `{funcname ...}` tag unless you what to use default values. Default
+> values must be scalar and can not be variable. Variables must be
+> passed when the template is called.
+
+
+ {* define the function *}
+ {function name=menu level=0}
+ {function menu level=0} {* short-hand *}
+ <ul class="level{$level}">
+ {foreach $data as $entry}
+ {if is_array($entry)}
+ <li>{$entry@key}</li>
+ {menu data=$entry level=$level+1}
+ {else}
+ <li>{$entry}</li>
+ {/if}
+ {/foreach}
+ </ul>
+ {/function}
+
+ {* create an array to demonstrate *}
+ {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
+ ['item3-3-1','item3-3-2']],'item4']}
+
+ {* run the array through the function *}
+ {menu data=$menu}
+
+
+
+Will generate the following output
+
+
+ * item1
+ * item2
+ * item3
+ o item3-1
+ o item3-2
+ o item3-3
+ + item3-3-1
+ + item3-3-2
+ * item4
+
+
+
+See also [`{call}`](#language.function.call)
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md
new file mode 100644
index 000000000..2c1d68eea
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-if.md
@@ -0,0 +1,121 @@
+{if},{elseif},{else} {#language.function.if}
+====================
+
+`{if}` statements in Smarty have much the same flexibility as PHP
+[if](&url.php-manual;if) statements, with a few added features for the
+template engine. Every `{if}` must be paired with a matching `{/if}`.
+`{else}` and `{elseif}` are also permitted. All PHP conditionals and
+functions are recognized, such as *\|\|*, *or*, *&&*, *and*,
+*is\_array()*, etc.
+
+If securty is enabled, only PHP functions from `$php_functions` property
+of the securty policy are allowed. See the
+[Security](#advanced.features.security) section for details.
+
+The following is a list of recognized qualifiers, which must be
+separated from surrounding elements by spaces. Note that items listed in
+\[brackets\] are optional. PHP equivalents are shown where applicable.
+
+ Qualifier Alternates Syntax Example Meaning PHP Equivalent
+ -------------------- ------------ ------------------------ -------------------------------- ----------------------
+ == eq \$a eq \$b equals ==
+ != ne, neq \$a neq \$b not equals !=
+ \> gt \$a gt \$b greater than \>
+ \< lt \$a lt \$b less than \<
+ \>= gte, ge \$a ge \$b greater than or equal \>=
+ \<= lte, le \$a le \$b less than or equal \<=
+ === \$a === 0 check for identity ===
+ ! not not \$a negation (unary) !
+ \% mod \$a mod \$b modulous \%
+ is \[not\] div by \$a is not div by 4 divisible by \$a % \$b == 0
+ is \[not\] even \$a is not even \[not\] an even number (unary) \$a % 2 == 0
+ is \[not\] even by \$a is not even by \$b grouping level \[not\] even (\$a / \$b) % 2 == 0
+ is \[not\] odd \$a is not odd \[not\] an odd number (unary) \$a % 2 != 0
+ is \[not\] odd by \$a is not odd by \$b \[not\] an odd grouping (\$a / \$b) % 2 != 0
+
+
+ {if $name eq 'Fred'}
+ Welcome Sir.
+ {elseif $name eq 'Wilma'}
+ Welcome Ma'am.
+ {else}
+ Welcome, whatever you are.
+ {/if}
+
+ {* an example with "or" logic *}
+ {if $name eq 'Fred' or $name eq 'Wilma'}
+ ...
+ {/if}
+
+ {* same as above *}
+ {if $name == 'Fred' || $name == 'Wilma'}
+ ...
+ {/if}
+
+
+ {* parenthesis are allowed *}
+ {if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}
+ ...
+ {/if}
+
+
+ {* you can also embed php function calls *}
+ {if count($var) gt 0}
+ ...
+ {/if}
+
+ {* check for array. *}
+ {if is_array($foo) }
+ .....
+ {/if}
+
+ {* check for not null. *}
+ {if isset($foo) }
+ .....
+ {/if}
+
+
+ {* test if values are even or odd *}
+ {if $var is even}
+ ...
+ {/if}
+ {if $var is odd}
+ ...
+ {/if}
+ {if $var is not odd}
+ ...
+ {/if}
+
+
+ {* test if var is divisible by 4 *}
+ {if $var is div by 4}
+ ...
+ {/if}
+
+
+ {*
+ test if var is even, grouped by two. i.e.,
+ 0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc.
+ *}
+ {if $var is even by 2}
+ ...
+ {/if}
+
+ {* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *}
+ {if $var is even by 3}
+ ...
+ {/if}
+
+
+
+
+ {if isset($name) && $name == 'Blog'}
+ {* do something *}
+ {elseif $name == $foo}
+ {* do something *}
+ {/if}
+
+ {if is_array($foo) && count($foo) > 0}
+ {* do a foreach loop *}
+ {/if}
+
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md
new file mode 100644
index 000000000..bda2d802f
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-include.md
@@ -0,0 +1,192 @@
+{include} {#language.function.include}
+=========
+
+`{include}` tags are used for including other templates in the current
+template. Any variables available in the current template are also
+available within the included template.
+
+- The `{include}` tag must have the `file` attribute which contains
+ the template resource path.
+
+- Setting the optional `assign` attribute specifies the template
+ variable that the output of `{include}` is assigned to, instead of
+ being displayed. Similar to [`{assign}`](#language.function.assign).
+
+- Variables can be passed to included templates as
+ [attributes](#language.syntax.attributes). Any variables explicitly
+ passed to an included template are only available within the scope
+ of the included file. Attribute variables override current template
+ variables, in the case when they are named the same.
+
+- You can use all variables from the including template inside the
+ included template. But changes to variables or new created variables
+ inside the included template have local scope and are not visible
+ inside the including template after the `{include}` statement. This
+ default behaviour can be changed for all variables assigned in the
+ included template by using the scope attribute at the `{include}`
+ statement or for individual variables by using the scope attribute
+ at the [`{assign}`](#language.function.assign) statement. The later
+ is useful to return values from the included template to the
+ including template.
+
+- Use the syntax for [template resources](#resources) to `{include}`
+ files outside of the [`$template_dir`](#variable.template.dir)
+ directory.
+
+**Attributes:**
+
+ Attribute Name Type Required Default Description
+ ----------------- ---------------- ---------- --------- --------------------------------------------------------------------------------------------------
+ file string Yes *n/a* The name of the template file to include
+ assign string No *n/a* The name of the variable that the output of include will be assigned to
+ cache\_lifetime integer No *n/a* Enable caching of this subtemplate with an individual cache lifetime
+ compile\_id string/integer No *n/a* Compile this subtemplate with an individual compile\_id
+ cache\_id string/integer No *n/a* Enable caching of this subtemplate with an individual cache\_id
+ scope string No *n/a* Define the scope of all in the subtemplate assigned variables: \'parent\',\'root\' or \'global\'
+ \[var \...\] \[var type\] No *n/a* variable to pass local to template
+
+**Option Flags:**
+
+ Name Description
+ --------- -------------------------------------------------------------------------------------
+ nocache Disables caching of this subtemplate
+ caching Enable caching of this subtemplate
+ inline If set merge the compile code of the subtemplate into the compiled calling template
+
+
+ <html>
+ <head>
+ <title>{$title}</title>
+ </head>
+ <body>
+ {include file='page_header.tpl'}
+
+ {* body of template goes here, the $tpl_name variable
+ is replaced with a value eg 'contact.tpl'
+ *}
+ {include file="$tpl_name.tpl"}
+
+ {* using shortform file attribute *}
+ {include 'page_footer.tpl'}
+ </body>
+ </html>
+
+
+
+
+ {include 'links.tpl' title='Newest links' links=$link_array}
+ {* body of template goes here *}
+ {include 'footer.tpl' foo='bar'}
+
+
+
+The template above includes the example `links.tpl` below
+
+
+ <div id="box">
+ <h3>{$title}{/h3>
+ <ul>
+ {foreach from=$links item=l}
+ .. do stuff ...
+ </foreach}
+ </ul>
+ </div>
+
+Variables assigned in the included template will be seen in the
+including template.
+
+
+ {include 'sub_template.tpl' scope=parent}
+ ...
+ {* display variables assigned in sub_template *}
+ {$foo}<br>
+ {$bar}<br>
+ ...
+
+
+
+The template above includes the example `sub_template.tpl` below
+
+
+ ...
+ {assign var=foo value='something'}
+ {assign var=bar value='value'}
+ ...
+
+The included template will not be cached.
+
+
+ {include 'sub_template.tpl' nocache}
+ ...
+
+
+
+In this example included template will be cached with an individual
+cache lifetime of 500 seconds.
+
+
+ {include 'sub_template.tpl' cache_lifetime=500}
+ ...
+
+
+
+In this example included template will be cached independent of the
+global caching setting.
+
+
+ {include 'sub_template.tpl' caching}
+ ...
+
+
+
+This example assigns the contents of `nav.tpl` to the `$navbar`
+variable, which is then output at both the top and bottom of the page.
+
+
+ <body>
+ {include 'nav.tpl' assign=navbar}
+ {include 'header.tpl' title='Smarty is cool'}
+ {$navbar}
+ {* body of template goes here *}
+ {$navbar}
+ {include 'footer.tpl'}
+ </body>
+
+
+
+This example includes another template relative to the directory of the
+current template.
+
+
+ {include 'template-in-a-template_dir-directory.tpl'}
+ {include './template-in-same-directory.tpl'}
+ {include '../template-in-parent-directory.tpl'}
+
+
+
+
+ {* absolute filepath *}
+ {include file='/usr/local/include/templates/header.tpl'}
+
+ {* absolute filepath (same thing) *}
+ {include file='file:/usr/local/include/templates/header.tpl'}
+
+ {* windows absolute filepath (MUST use "file:" prefix) *}
+ {include file='file:C:/www/pub/templates/header.tpl'}
+
+ {* include from template resource named "db" *}
+ {include file='db:header.tpl'}
+
+ {* include a $variable template - eg $module = 'contacts' *}
+ {include file="$module.tpl"}
+
+ {* wont work as its single quotes ie no variable substitution *}
+ {include file='$module.tpl'}
+
+ {* include a multi $variable template - eg amber/links.view.tpl *}
+ {include file="$style_dir/$module.$view.tpl"}
+
+
+
+See also [`{insert}`](#language.function.insert), [template resources](#resources) and
+[componentized templates](#tips.componentized.templates).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md
new file mode 100644
index 000000000..e5bc7dcb4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-insert.md
@@ -0,0 +1,86 @@
+{insert} {#language.function.insert}
+========
+
+> **Note**
+>
+> `{insert}` tags are deprecated from Smarty, and should not be used.
+> Put your PHP logic in PHP scripts or plugin functions instead.
+
+> **Note**
+>
+> As of Smarty 3.1 the `{insert}` tags are only available from
+> [SmartyBC](#bc).
+
+`{insert}` tags work much like [`{include}`](#language.function.include)
+tags, except that `{insert}` tags are NOT cached when template
+[caching](#caching) is enabled. They will be executed on every
+invocation of the template.
+
+ Attribute Name Type Required Default Description
+ ---------------- -------------- ---------- --------- ----------------------------------------------------------------------------------
+ name string Yes *n/a* The name of the insert function (insert\_`name`) or insert plugin
+ assign string No *n/a* The name of the template variable the output will be assigned to
+ script string No *n/a* The name of the php script that is included before the insert function is called
+ \[var \...\] \[var type\] No *n/a* variable to pass to insert function
+
+Let\'s say you have a template with a banner slot at the top of the
+page. The banner can contain any mixture of HTML, images, flash, etc. so
+we can\'t just use a static link here, and we don\'t want this contents
+cached with the page. In comes the {insert} tag: the template knows
+\#banner\_location\_id\# and \#site\_id\# values (gathered from a
+[config file](#config.files)), and needs to call a function to get the
+banner contents.
+
+ {* example of fetching a banner *}
+ {insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
+ {insert "getBanner" lid=#banner_location_id# sid=#site_id#} {* short-hand *}
+
+In this example, we are using the name "getBanner" and passing the
+parameters \#banner\_location\_id\# and \#site\_id\#. Smarty will look
+for a function named insert\_getBanner() in your PHP application,
+passing the values of \#banner\_location\_id\# and \#site\_id\# as the
+first argument in an associative array. All {insert} function names in
+your application must be prepended with \"insert\_\" to remedy possible
+function name-space conflicts. Your insert\_getBanner() function should
+do something with the passed values and return the results. These
+results are then displayed in the template in place of the {insert} tag.
+In this example, Smarty would call this function:
+insert\_getBanner(array(\"lid\" =\> \"12345\",\"sid\" =\> \"67890\"));
+and display the returned results in place of the {insert} tag.
+
+- If you supply the `assign` attribute, the output of the `{insert}`
+ tag will be assigned to this template variable instead of being
+ output to the template.
+
+ > **Note**
+ >
+ > Assigning the output to a template variable isn\'t too useful with
+ > [caching](#variable.caching) enabled.
+
+- If you supply the `script` attribute, this php script will be
+ included (only once) before the `{insert}` function is executed.
+ This is the case where the insert function may not exist yet, and a
+ php script must be included first to make it work.
+
+ The path can be either absolute, or relative to
+ [`$trusted_dir`](#variable.trusted.dir). If security is enabled,
+ then the script must be located in the `$trusted_dir` path of the
+ security policy. See the [Security](#advanced.features.security)
+ section for details.
+
+The Smarty object is passed as the second argument. This way you can
+reference and modify information in the Smarty object from within the
+`{insert}` function.
+
+If no PHP script can be found Smarty is looking for a corresponding
+insert plugin.
+
+> **Note**
+>
+> It is possible to have portions of the template not cached. If you
+> have [caching](#caching) turned on, `{insert}` tags will not be
+> cached. They will run dynamically every time the page is created, even
+> within cached pages. This works good for things like banners, polls,
+> live weather, search results, user feedback areas, etc.
+
+See also [`{include}`](#language.function.include)
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md
new file mode 100644
index 000000000..2afda031a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-ldelim.md
@@ -0,0 +1,55 @@
+{ldelim},{rdelim} {#language.function.ldelim}
+=================
+
+`{ldelim}` and `{rdelim}` are used for [escaping](#language.escaping)
+template delimiters, by default **{** and **}**. You can also use
+[`{literal}{/literal}`](#language.function.literal) to escape blocks of
+text eg Javascript or CSS. See also the complementary
+[`{$smarty.ldelim}`](#language.variables.smarty.ldelim).
+
+
+ {* this will print literal delimiters out of the template *}
+
+ {ldelim}funcname{rdelim} is how functions look in Smarty!
+
+
+
+The above example will output:
+
+
+ {funcname} is how functions look in Smarty!
+
+
+
+Another example with some Javascript
+
+
+ <script language="JavaScript">
+ function foo() {ldelim}
+ ... code ...
+ {rdelim}
+ </script>
+
+
+
+will output
+
+
+ <script language="JavaScript">
+ function foo() {
+ .... code ...
+ }
+ </script>
+
+
+
+
+ <script language="JavaScript" type="text/javascript">
+ function myJsFunction(){ldelim}
+ alert("The server name\n{$smarty.server.SERVER_NAME}\n{$smarty.server.SERVER_ADDR}");
+ {rdelim}
+ </script>
+ <a href="javascript:myJsFunction()">Click here for Server Info</a>
+
+See also [`{literal}`](#language.function.literal) and [escaping Smarty
+parsing](#language.escaping).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md
new file mode 100644
index 000000000..27ebb3ff4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-literal.md
@@ -0,0 +1,36 @@
+{literal} {#language.function.literal}
+=========
+
+`{literal}` tags allow a block of data to be taken literally. This is
+typically used around Javascript or stylesheet blocks where {curly
+braces} would interfere with the template
+[delimiter](#variable.left.delimiter) syntax. Anything within
+`{literal}{/literal}` tags is not interpreted, but displayed as-is. If
+you need template tags embedded in a `{literal}` block, consider using
+[`{ldelim}{rdelim}`](#language.function.ldelim) to escape the individual
+delimiters instead.
+
+> **Note**
+>
+> `{literal}{/literal}` tags are normally not necessary, as Smarty
+> ignores delimiters that are surrounded by whitespace. Be sure your
+> javascript and CSS curly braces are surrounded by whitespace. This is
+> new behavior to Smarty 3.
+
+
+ <script>
+ // the following braces are ignored by Smarty
+ // since they are surrounded by whitespace
+ function myFoo {
+ alert('Foo!');
+ }
+ // this one will need literal escapement
+ {literal}
+ function myBar {alert('Bar!');}
+ {/literal}
+ </script>
+
+
+
+See also [`{ldelim} {rdelim}`](#language.function.ldelim) and the
+[escaping Smarty parsing](#language.escaping) page.
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md
new file mode 100644
index 000000000..a5922f838
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-nocache.md
@@ -0,0 +1,23 @@
+{nocache} {#language.function.nocache}
+=========
+
+`{nocache}` is used to disable caching of a template section. Every
+`{nocache}` must be paired with a matching `{/nocache}`.
+
+> **Note**
+>
+> Be sure any variables used within a non-cached section are also
+> assigned from PHP when the page is loaded from the cache.
+
+
+
+ Today's date is
+ {nocache}
+ {$smarty.now|date_format}
+ {/nocache}
+
+
+
+The above code will output the current date on a cached page.
+
+See also the [caching section](#caching).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md
new file mode 100644
index 000000000..b28bb924a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-section.md
@@ -0,0 +1,644 @@
+{section},{sectionelse} {#language.function.section}
+=======================
+
+A `{section}` is for looping over **sequentially indexed arrays of
+data**, unlike [`{foreach}`](#language.function.foreach) which is used
+to loop over a **single associative array**. Every `{section}` tag must
+be paired with a closing `{/section}` tag.
+
+> **Note**
+>
+> The [`{foreach}`](#language.function.foreach) loop can do everything a
+> {section} loop can do, and has a simpler and easier syntax. It is
+> usually preferred over the {section} loop.
+
+> **Note**
+>
+> {section} loops cannot loop over associative arrays, they must be
+> numerically indexed, and sequential (0,1,2,\...). For associative
+> arrays, use the [`{foreach}`](#language.function.foreach) loop.
+
+ Attribute Name Type Required Default Description
+ ---------------- --------- ---------- --------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ name string Yes *n/a* The name of the section
+ loop mixed Yes *n/a* Value to determine the number of loop iterations
+ start integer No *0* The index position that the section will begin looping. If the value is negative, the start position is calculated from the end of the array. For example, if there are seven values in the loop array and start is -2, the start index is 5. Invalid values (values outside of the length of the loop array) are automatically truncated to the closest valid value.
+ step integer No *1* The step value that will be used to traverse the loop array. For example, step=2 will loop on index 0,2,4, etc. If step is negative, it will step through the array backwards.
+ max integer No *n/a* Sets the maximum number of times the section will loop.
+ show boolean No *TRUE* Determines whether or not to show this section
+
+**Option Flags:**
+
+ Name Description
+ --------- ------------------------------------------
+ nocache Disables caching of the `{section}` loop
+
+- Required attributes are `name` and `loop`.
+
+- The `name` of the `{section}` can be anything you like, made up of
+ letters, numbers and underscores, like [PHP
+ variables](&url.php-manual;language.variables).
+
+- {section}\'s can be nested, and the nested `{section}` names must be
+ unique from each other.
+
+- The `loop` attribute, usually an array of values, determines the
+ number of times the `{section}` will loop. You can also pass an
+ integer as the loop value.
+
+- When printing a variable within a `{section}`, the `{section}`
+ `name` must be given next to variable name within \[brackets\].
+
+- `{sectionelse}` is executed when there are no values in the loop
+ variable.
+
+- A `{section}` also has its own variables that handle `{section}`
+ properties. These properties are accessible as:
+ [`{$smarty.section.name.property}`](#language.variables.smarty.loops)
+ where "name" is the attribute `name`.
+
+- `{section}` properties are [`index`](#section.property.index),
+ [`index_prev`](#section.property.index.prev),
+ [`index_next`](#section.property.index.next),
+ [`iteration`](#section.property.iteration),
+ [`first`](#section.property.first),
+ [`last`](#section.property.last),
+ [`rownum`](#section.property.rownum),
+ [`loop`](#section.property.loop), [`show`](#section.property.show),
+ [`total`](#section.property.total).
+
+[`assign()`](#api.assign) an array to Smarty
+
+
+ <?php
+ $data = array(1000,1001,1002);
+ $smarty->assign('custid',$data);
+ ?>
+
+The template that outputs the array
+
+
+ {* this example will print out all the values of the $custid array *}
+ {section name=customer loop=$custid}
+ {section customer $custid} {* short-hand *}
+ id: {$custid[customer]}<br />
+ {/section}
+ <hr />
+ {* print out all the values of the $custid array reversed *}
+ {section name=foo loop=$custid step=-1}
+ {section foo $custid step=-1} {* short-hand *}
+ {$custid[foo]}<br />
+ {/section}
+
+
+
+The above example will output:
+
+
+ id: 1000<br />
+ id: 1001<br />
+ id: 1002<br />
+ <hr />
+ id: 1002<br />
+ id: 1001<br />
+ id: 1000<br />
+
+
+
+
+ {section name=foo start=10 loop=20 step=2}
+ {$smarty.section.foo.index}
+ {/section}
+ <hr />
+ {section name=bar loop=21 max=6 step=-2}
+ {$smarty.section.bar.index}
+ {/section}
+
+The above example will output:
+
+
+ 10 12 14 16 18
+ <hr />
+ 20 18 16 14 12 10
+
+
+
+The `name` of the `{section}` can be anything you like, see [PHP
+variables](&url.php-manual;language.variables). It is used to reference
+the data within the `{section}`.
+
+
+ {section name=anything loop=$myArray}
+ {$myArray[anything].foo}
+ {$name[anything]}
+ {$address[anything].bar}
+ {/section}
+
+
+
+This is an example of printing an associative array of data with a
+`{section}`. Following is the php script to assign the `$contacts` array
+to Smarty.
+
+
+ <?php
+ $data = array(
+ array('name' => 'John Smith', 'home' => '555-555-5555',
+ 'cell' => '666-555-5555', 'email' => 'john@myexample.com'),
+ array('name' => 'Jack Jones', 'home' => '777-555-5555',
+ 'cell' => '888-555-5555', 'email' => 'jack@myexample.com'),
+ array('name' => 'Jane Munson', 'home' => '000-555-5555',
+ 'cell' => '123456', 'email' => 'jane@myexample.com')
+ );
+ $smarty->assign('contacts',$data);
+ ?>
+
+
+
+The template to output `$contacts`
+
+
+ {section name=customer loop=$contacts}
+ <p>
+ name: {$contacts[customer].name}<br />
+ home: {$contacts[customer].home}<br />
+ cell: {$contacts[customer].cell}<br />
+ e-mail: {$contacts[customer].email}
+ </p>
+ {/section}
+
+
+
+The above example will output:
+
+
+ <p>
+ name: John Smith<br />
+ home: 555-555-5555<br />
+ cell: 666-555-5555<br />
+ e-mail: john@myexample.com
+ </p>
+ <p>
+ name: Jack Jones<br />
+ home phone: 777-555-5555<br />
+ cell phone: 888-555-5555<br />
+ e-mail: jack@myexample.com
+ </p>
+ <p>
+ name: Jane Munson<br />
+ home phone: 000-555-5555<br />
+ cell phone: 123456<br />
+ e-mail: jane@myexample.com
+ </p>
+
+
+
+This example assumes that `$custid`, `$name` and `$address` are all
+arrays containing the same number of values. First the php script that
+assign\'s the arrays to Smarty.
+
+
+ <?php
+
+ $id = array(1001,1002,1003);
+ $smarty->assign('custid',$id);
+
+ $fullnames = array('John Smith','Jack Jones','Jane Munson');
+ $smarty->assign('name',$fullnames);
+
+ $addr = array('253 Abbey road', '417 Mulberry ln', '5605 apple st');
+ $smarty->assign('address',$addr);
+
+ ?>
+
+The `loop` variable only determines the number of times to loop. You can
+access ANY variable from the template within the `{section}`. This is
+useful for looping multiple arrays. You can pass an array which will
+determine the loop count by the array size, or you can pass an integer
+to specify the number of loops.
+
+
+ {section name=customer loop=$custid}
+ <p>
+ id: {$custid[customer]}<br />
+ name: {$name[customer]}<br />
+ address: {$address[customer]}
+ </p>
+ {/section}
+
+
+
+The above example will output:
+
+
+ <p>
+ id: 1000<br />
+ name: John Smith<br />
+ address: 253 Abbey road
+ </p>
+ <p>
+ id: 1001<br />
+ name: Jack Jones<br />
+ address: 417 Mulberry ln
+ </p>
+ <p>
+ id: 1002<br />
+ name: Jane Munson<br />
+ address: 5605 apple st
+ </p>
+
+
+
+{section}\'s can be nested as deep as you like. With nested
+{section}\'s, you can access complex data structures, such as
+multi-dimensional arrays. This is an example `.php` script that
+assigns the arrays.
+
+
+ <?php
+
+ $id = array(1001,1002,1003);
+ $smarty->assign('custid',$id);
+
+ $fullnames = array('John Smith','Jack Jones','Jane Munson');
+ $smarty->assign('name',$fullnames);
+
+ $addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st');
+ $smarty->assign('address',$addr);
+
+ $types = array(
+ array( 'home phone', 'cell phone', 'e-mail'),
+ array( 'home phone', 'web'),
+ array( 'cell phone')
+ );
+ $smarty->assign('contact_type', $types);
+
+ $info = array(
+ array('555-555-5555', '666-555-5555', 'john@myexample.com'),
+ array( '123-456-4', 'www.example.com'),
+ array( '0457878')
+ );
+ $smarty->assign('contact_info', $info);
+
+ ?>
+
+
+In this template, *\$contact\_type\[customer\]* is an array of contact
+types for the current customer.
+
+
+ {section name=customer loop=$custid}
+ <hr>
+ id: {$custid[customer]}<br />
+ name: {$name[customer]}<br />
+ address: {$address[customer]}<br />
+ {section name=contact loop=$contact_type[customer]}
+ {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br />
+ {/section}
+ {/section}
+
+
+
+The above example will output:
+
+
+ <hr>
+ id: 1000<br />
+ name: John Smith<br />
+ address: 253 N 45th<br />
+ home phone: 555-555-5555<br />
+ cell phone: 666-555-5555<br />
+ e-mail: john@myexample.com<br />
+ <hr>
+ id: 1001<br />
+ name: Jack Jones<br />
+ address: 417 Mulberry ln<br />
+ home phone: 123-456-4<br />
+ web: www.example.com<br />
+ <hr>
+ id: 1002<br />
+ name: Jane Munson<br />
+ address: 5605 apple st<br />
+ cell phone: 0457878<br />
+
+
+
+Results of a database search (eg ADODB or PEAR) are assigned to Smarty
+
+
+ <?php
+ $sql = 'select id, name, home, cell, email from contacts '
+ ."where name like '$foo%' ";
+ $smarty->assign('contacts', $db->getAll($sql));
+ ?>
+
+The template to output the database result in a HTML table
+
+
+ <table>
+ <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
+ {section name=co loop=$contacts}
+ <tr>
+ <td><a href="view.php?id={$contacts[co].id}">view<a></td>
+ <td>{$contacts[co].name}</td>
+ <td>{$contacts[co].home}</td>
+ <td>{$contacts[co].cell}</td>
+ <td>{$contacts[co].email}</td>
+ <tr>
+ {sectionelse}
+ <tr><td colspan="5">No items found</td></tr>
+ {/section}
+ </table>
+
+.index {#section.property.index}
+------
+
+`index` contains the current array index, starting with zero or the
+`start` attribute if given. It increments by one or by the `step`
+attribute if given.
+
+> **Note**
+>
+> If the `step` and `start` properties are not modified, then this works
+> the same as the [`iteration`](#section.property.iteration) property,
+> except it starts at zero instead of one.
+
+> **Note**
+>
+> `$custid[customer.index]` and `$custid[customer]` are identical.
+
+
+ {section name=customer loop=$custid}
+ {$smarty.section.customer.index} id: {$custid[customer]}<br />
+ {/section}
+
+
+
+The above example will output:
+
+
+ 0 id: 1000<br />
+ 1 id: 1001<br />
+ 2 id: 1002<br />
+
+
+
+.index\_prev {#section.property.index.prev}
+------------
+
+`index_prev` is the previous loop index. On the first loop, this is set
+to -1.
+
+.index\_next {#section.property.index.next}
+------------
+
+`index_next` is the next loop index. On the last loop, this is still one
+more than the current index, respecting the setting of the `step`
+attribute, if given.
+
+
+ <?php
+ $data = array(1001,1002,1003,1004,1005);
+ $smarty->assign('rows',$data);
+ ?>
+
+Template to output the above array in a table
+
+
+ {* $rows[row.index] and $rows[row] are identical in meaning *}
+ <table>
+ <tr>
+ <th>index</th><th>id</th>
+ <th>index_prev</th><th>prev_id</th>
+ <th>index_next</th><th>next_id</th>
+ </tr>
+ {section name=row loop=$rows}
+ <tr>
+ <td>{$smarty.section.row.index}</td><td>{$rows[row]}</td>
+ <td>{$smarty.section.row.index_prev}</td><td>{$rows[row.index_prev]}</td>
+ <td>{$smarty.section.row.index_next}</td><td>{$rows[row.index_next]}</td>
+ </tr>
+ {/section}
+ </table>
+
+
+
+The above example will output a table containing the following:
+
+
+ index id index_prev prev_id index_next next_id
+ 0 1001 -1 1 1002
+ 1 1002 0 1001 2 1003
+ 2 1003 1 1002 3 1004
+ 3 1004 2 1003 4 1005
+ 4 1005 3 1004 5
+
+
+
+.iteration {#section.property.iteration}
+----------
+
+`iteration` contains the current loop iteration and starts at one.
+
+> **Note**
+>
+> This is not affected by the `{section}` properties `start`, `step` and
+> `max`, unlike the [`index`](#section.property.index) property.
+> `iteration` also starts with one instead of zero unlike `index`.
+> [`rownum`](#section.property.rownum) is an alias to `iteration`, they
+> are identical.
+
+
+ <?php
+ // array of 3000 to 3015
+ $id = range(3000,3015);
+ $smarty->assign('arr',$id);
+ ?>
+
+Template to output every other element of the `$arr` array as `step=2`
+
+
+ {section name=cu loop=$arr start=5 step=2}
+ iteration={$smarty.section.cu.iteration}
+ index={$smarty.section.cu.index}
+ id={$custid[cu]}<br />
+ {/section}
+
+
+
+The above example will output:
+
+
+ iteration=1 index=5 id=3005<br />
+ iteration=2 index=7 id=3007<br />
+ iteration=3 index=9 id=3009<br />
+ iteration=4 index=11 id=3011<br />
+ iteration=5 index=13 id=3013<br />
+ iteration=6 index=15 id=3015<br />
+
+
+
+Another example that uses the `iteration` property to output a table
+header block every five rows.
+
+
+ <table>
+ {section name=co loop=$contacts}
+ {if $smarty.section.co.iteration is div by 5}
+ <tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
+ {/if}
+ <tr>
+ <td><a href="view.php?id={$contacts[co].id}">view<a></td>
+ <td>{$contacts[co].name}</td>
+ <td>{$contacts[co].home}</td>
+ <td>{$contacts[co].cell}</td>
+ <td>{$contacts[co].email}</td>
+ <tr>
+ {/section}
+ </table>
+
+
+
+An that uses the `iteration` property to alternate a text color every
+third row.
+
+
+ <table>
+ {section name=co loop=$contacts}
+ {if $smarty.section.co.iteration is even by 3}
+ <span style="color: #ffffff">{$contacts[co].name}</span>
+ {else}
+ <span style="color: #dddddd">{$contacts[co].name}</span>
+ {/if}
+ {/section}
+ </table>
+
+
+
+> **Note**
+>
+> The *\"is div by\"* syntax is a simpler alternative to the PHP mod
+> operator syntax. The mod operator is allowed:
+> `{if $smarty.section.co.iteration % 5 == 1}` will work just the same.
+
+> **Note**
+>
+> You can also use *\"is odd by\"* to reverse the alternating.
+
+.first {#section.property.first}
+------
+
+`first` is set to TRUE if the current `{section}` iteration is the
+initial one.
+
+.last {#section.property.last}
+-----
+
+`last` is set to TRUE if the current section iteration is the final one.
+
+This example loops the `$customers` array, outputs a header block on the
+first iteration and on the last outputs the footer block. Also uses the
+[`total`](#section.property.total) property.
+
+
+ {section name=customer loop=$customers}
+ {if $smarty.section.customer.first}
+ <table>
+ <tr><th>id</th><th>customer</th></tr>
+ {/if}
+
+ <tr>
+ <td>{$customers[customer].id}}</td>
+ <td>{$customers[customer].name}</td>
+ </tr>
+
+ {if $smarty.section.customer.last}
+ <tr><td></td><td>{$smarty.section.customer.total} customers</td></tr>
+ </table>
+ {/if}
+ {/section}
+
+
+
+.rownum {#section.property.rownum}
+-------
+
+`rownum` contains the current loop iteration, starting with one. It is
+an alias to [`iteration`](#section.property.iteration), they work
+identically.
+
+.loop {#section.property.loop}
+-----
+
+`loop` contains the last index number that this {section} looped. This
+can be used inside or after the `{section}`.
+
+
+ {section name=customer loop=$custid}
+ {$smarty.section.customer.index} id: {$custid[customer]}<br />
+ {/section}
+ There are {$smarty.section.customer.loop} customers shown above.
+
+
+
+The above example will output:
+
+
+ 0 id: 1000<br />
+ 1 id: 1001<br />
+ 2 id: 1002<br />
+ There are 3 customers shown above.
+
+
+
+.show {#section.property.show}
+-----
+
+`show` is used as a parameter to section and is a boolean value. If
+FALSE, the section will not be displayed. If there is a `{sectionelse}`
+present, that will be alternately displayed.
+
+Boolean `$show_customer_info` has been passed from the PHP application,
+to regulate whether or not this section shows.
+
+
+ {section name=customer loop=$customers show=$show_customer_info}
+ {$smarty.section.customer.rownum} id: {$customers[customer]}<br />
+ {/section}
+
+ {if $smarty.section.customer.show}
+ the section was shown.
+ {else}
+ the section was not shown.
+ {/if}
+
+
+
+The above example will output:
+
+
+ 1 id: 1000<br />
+ 2 id: 1001<br />
+ 3 id: 1002<br />
+
+ the section was shown.
+
+
+
+.total {#section.property.total}
+------
+
+`total` contains the number of iterations that this `{section}` will
+loop. This can be used inside or after a `{section}`.
+
+
+ {section name=customer loop=$custid step=2}
+ {$smarty.section.customer.index} id: {$custid[customer]}<br />
+ {/section}
+ There are {$smarty.section.customer.total} customers shown above.
+
+
+
+See also [`{foreach}`](#language.function.foreach),
+[`{for}`](#language.function.for), [`{while}`](#language.function.while)
+and [`$smarty.section`](#language.variables.smarty.loops).
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md
new file mode 100644
index 000000000..c7f99e783
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-setfilter.md
@@ -0,0 +1,42 @@
+{setfilter} {#language.function.setfilter}
+===========
+
+The `{setfilter}...{/setfilter}` block tag allows the definition of
+template instance\'s variable filters.
+
+SYNTAX: {setfilter filter1\|filter2\|filter3\....}\...{/setfilter}
+
+The filter can be:
+
+- A variable filter plugin specified by it\'s name.
+
+- A modifier specified by it\'s name and optional additional
+ parameter.
+
+`{setfilter}...{/setfilter}` blocks can be nested. The filter definition
+of inner blocks does replace the definition of the outer block.
+
+Template instance filters run in addition to other modifiers and
+filters. They run in the following order: modifier, default\_modifier,
+\$escape\_html, registered variable filters, autoloaded variable
+filters, template instance\'s variable filters. Everything after
+default\_modifier can be disabled with the `nofilter` flag.
+
+
+ <script>
+ {setfilter filter1}
+ {$foo} {* filter1 runs on output of $foo *}
+ {setfilter filter2|mod:true}
+ {$bar} {* filter2 and modifier mod runs on output of $bar *}
+ {/setfilter}
+ {$buh} {* filter1 runs on output of $buh *}
+ {/setfilter}
+ {$blar} {* no template instance filter runs on output of $blar}
+ </script>
+
+
+
+> **Note**
+>
+> The setting of template instance filters does not effect the output of
+> included subtemplates.
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-shortform-assign.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-shortform-assign.md
new file mode 100644
index 000000000..d6a9e9798
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-shortform-assign.md
@@ -0,0 +1,84 @@
+{\$var=\...} {#language.function.shortform.assign}
+============
+
+This is a short-hand version of the {assign} function. You can assign
+values directly to the template, or assign values to array elements too.
+
+> **Note**
+>
+> Assignment of variables in-template is essentially placing application
+> logic into the presentation that may be better handled in PHP. Use at
+> your own discretion.
+
+The following attributes can be added to the tag:
+
+**Attributes:**
+
+ Attribute Name Shorthand Type Required Default Description
+ ---------------- ----------- -------- ---------- --------- -----------------------------------------------------------------------
+ scope n/a string No *n/a* The scope of the assigned variable: \'parent\',\'root\' or \'global\'
+
+**Option Flags:**
+
+ Name Description
+ --------- -----------------------------------------------------
+ nocache Assigns the variable with the \'nocache\' attribute
+
+
+ {$name='Bob'}
+
+ The value of $name is {$name}.
+
+
+
+The above example will output:
+
+
+ The value of $name is Bob.
+
+
+
+
+ {$running_total=$running_total+$some_array[row].some_value}
+
+
+
+
+ {$user.name="Bob"}
+
+
+
+
+ {$user.name.first="Bob"}
+
+
+
+
+ {$users[]="Bob"}
+
+
+
+Variables assigned in the included template will be seen in the
+including template.
+
+
+ {include file="sub_template.tpl"}
+ ...
+ {* display variable assigned in sub_template *}
+ {$foo}<br>
+ ...
+
+
+
+The template above includes the example `sub_template.tpl` below
+
+
+ ...
+ {* foo will be known also in the including template *}
+ {$foo="something" scope=parent}
+ {* bar is assigned only local in the including template *}
+ {$bar="value"}
+ ...
+
+See also [`{assign}`](#language.function.assign) and
+[`{append}`](#language.function.append)
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md
new file mode 100644
index 000000000..d40646e5f
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-strip.md
@@ -0,0 +1,48 @@
+{strip} {#language.function.strip}
+=======
+
+Many times web designers run into the issue where white space and
+carriage returns affect the output of the rendered HTML (browser
+\"features\"), so you must run all your tags together in the template to
+get the desired results. This usually ends up in unreadable or
+unmanageable templates.
+
+Anything within `{strip}{/strip}` tags are stripped of the extra spaces
+or carriage returns at the beginnings and ends of the lines before they
+are displayed. This way you can keep your templates readable, and not
+worry about extra white space causing problems.
+
+> **Note**
+>
+> `{strip}{/strip}` does not affect the contents of template variables,
+> see the [strip modifier](#language.modifier.strip) instead.
+
+
+ {* the following will be all run into one line upon output *}
+ {strip}
+ <table border='0'>
+ <tr>
+ <td>
+ <a href="{$url}">
+ <font color="red">This is a test</font>
+ </a>
+ </td>
+ </tr>
+ </table>
+ {/strip}
+
+
+
+The above example will output:
+
+
+ <table border='0'><tr><td><a href="http://. snipped...</a></td></tr></table>
+
+
+
+Notice that in the above example, all the lines begin and end with HTML
+tags. Be aware that all the lines are run together. If you have plain
+text at the beginning or end of any line, they will be run together, and
+may not be desired results.
+
+See also the [`strip`](#language.modifier.strip) modifier.
diff --git a/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md
new file mode 100644
index 000000000..755c091f6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-builtin-functions/language-function-while.md
@@ -0,0 +1,43 @@
+{while} {#language.function.while}
+=======
+
+`{while}` loops in Smarty have much the same flexibility as PHP
+[while](&url.php-manual;while) statements, with a few added features for
+the template engine. Every `{while}` must be paired with a matching
+`{/while}`. All PHP conditionals and functions are recognized, such as
+*\|\|*, *or*, *&&*, *and*, *is\_array()*, etc.
+
+The following is a list of recognized qualifiers, which must be
+separated from surrounding elements by spaces. Note that items listed in
+\[brackets\] are optional. PHP equivalents are shown where applicable.
+
+ Qualifier Alternates Syntax Example Meaning PHP Equivalent
+ -------------------- ------------ ------------------------ -------------------------------- ----------------------
+ == eq \$a eq \$b equals ==
+ != ne, neq \$a neq \$b not equals !=
+ \> gt \$a gt \$b greater than \>
+ \< lt \$a lt \$b less than \<
+ \>= gte, ge \$a ge \$b greater than or equal \>=
+ \<= lte, le \$a le \$b less than or equal \<=
+ === \$a === 0 check for identity ===
+ ! not not \$a negation (unary) !
+ \% mod \$a mod \$b modulous \%
+ is \[not\] div by \$a is not div by 4 divisible by \$a % \$b == 0
+ is \[not\] even \$a is not even \[not\] an even number (unary) \$a % 2 == 0
+ is \[not\] even by \$a is not even by \$b grouping level \[not\] even (\$a / \$b) % 2 == 0
+ is \[not\] odd \$a is not odd \[not\] an odd number (unary) \$a % 2 != 0
+ is \[not\] odd by \$a is not odd by \$b \[not\] an odd grouping (\$a / \$b) % 2 != 0
+
+
+
+ {while $foo > 0}
+ {$foo--}
+ {/while}
+
+
+
+The above example will count down the value of \$foo until 1 is reached.
+
+See also [`{foreach}`](#language.function.foreach),
+[`{for}`](#language.function.for) and
+[`{section}`](#language.function.section).
diff --git a/vendor/smarty/smarty/docs/designers/language-combining-modifiers.md b/vendor/smarty/smarty/docs/designers/language-combining-modifiers.md
new file mode 100644
index 000000000..edf1a83ea
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-combining-modifiers.md
@@ -0,0 +1,35 @@
+Combining Modifiers {#language.combining.modifiers}
+===================
+
+You can apply any number of modifiers to a variable. They will be
+applied in the order they are combined, from left to right. They must be
+separated with a `|` (pipe) character.
+
+
+ <?php
+
+ $smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
+
+ ?>
+
+where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|upper|spacify}
+ {$articleTitle|lower|spacify|truncate}
+ {$articleTitle|lower|truncate:30|spacify}
+ {$articleTitle|lower|spacify|truncate:30:". . ."}
+
+
+
+The above example will output:
+
+
+ Smokers are Productive, but Death Cuts Efficiency.
+ S M O K E R S A R ....snip.... H C U T S E F F I C I E N C Y .
+ s m o k e r s a r ....snip.... b u t d e a t h c u t s...
+ s m o k e r s a r e p r o d u c t i v e , b u t . . .
+ s m o k e r s a r e p. . .
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions.md b/vendor/smarty/smarty/docs/designers/language-custom-functions.md
new file mode 100644
index 000000000..20ad54e99
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions.md
@@ -0,0 +1,21 @@
+Custom Functions {#language.custom.functions}
+================
+
+Smarty comes with several custom plugin functions that you can use in
+the templates.
+
+## Table of contents
+- [{counter}](./language-custom-functions/language-function-counter.md)
+- [{cycle}](./language-custom-functions/language-function-cycle.md)
+- [{eval}](./language-custom-functions/language-function-eval.md)
+- [{fetch}](./language-custom-functions/language-function-fetch.md)
+- [{html_checkboxes}](./language-custom-functions/language-function-html-checkboxes.md)
+- [{html_image}](./language-custom-functions/language-function-html-image.md)
+- [{html_options}](./language-custom-functions/language-function-html-options.md)
+- [{html_radios}](./language-custom-functions/language-function-html-radios.md)
+- [{html_select_date}](./language-custom-functions/language-function-html-select-date.md)
+- [{html_select_time}](./language-custom-functions/language-function-html-select-time.md)
+- [{html_table}](./language-custom-functions/language-function-html-table.md)
+- [{mailto}](./language-custom-functions/language-function-mailto.md)
+- [{math}](./language-custom-functions/language-function-math.md)
+- [{textformat}](./language-custom-functions/language-function-textformat.md)
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md
new file mode 100644
index 000000000..cc1ac08f2
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-counter.md
@@ -0,0 +1,41 @@
+{counter} {#language.function.counter}
+=========
+
+`{counter}` is used to print out a count. `{counter}` will remember the
+count on each iteration. You can adjust the number, the interval and the
+direction of the count, as well as determine whether or not to print the
+value. You can run multiple counters concurrently by supplying a unique
+name for each one. If you do not supply a name, the name "default" will
+be used.
+
+If you supply the `assign` attribute, the output of the `{counter}`
+function will be assigned to this template variable instead of being
+output to the template.
+
+ Attribute Name Type Required Default Description
+ ---------------- --------- ---------- ----------- ------------------------------------------------------
+ name string No *default* The name of the counter
+ start number No *1* The initial number to start counting from
+ skip number No *1* The interval to count by
+ direction string No *up* The direction to count (up/down)
+ print boolean No *TRUE* Whether or not to print the value
+ assign string No *n/a* the template variable the output will be assigned to
+
+
+ {* initialize the count *}
+ {counter start=0 skip=2}<br />
+ {counter}<br />
+ {counter}<br />
+ {counter}<br />
+
+
+
+this will output:
+
+
+ 0<br />
+ 2<br />
+ 4<br />
+ 6<br />
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md
new file mode 100644
index 000000000..5986e6322
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-cycle.md
@@ -0,0 +1,57 @@
+{cycle} {#language.function.cycle}
+=======
+
+`{cycle}` is used to alternate a set of values. This makes it easy to
+for example, alternate between two or more colors in a table, or cycle
+through an array of values.
+
+ Attribute Name Type Required Default Description
+ ---------------- --------- ---------- ----------- -------------------------------------------------------------------------------------------------------------
+ name string No *default* The name of the cycle
+ values mixed Yes *N/A* The values to cycle through, either a comma delimited list (see delimiter attribute), or an array of values
+ print boolean No *TRUE* Whether to print the value or not
+ advance boolean No *TRUE* Whether or not to advance to the next value
+ delimiter string No *,* The delimiter to use in the values attribute
+ assign string No *n/a* The template variable the output will be assigned to
+ reset boolean No *FALSE* The cycle will be set to the first value and not advanced
+
+- You can `{cycle}` through more than one set of values in a template
+ by supplying a `name` attribute. Give each `{cycle}` an unique
+ `name`.
+
+- You can force the current value not to print with the `print`
+ attribute set to FALSE. This would be useful for silently skipping a
+ value.
+
+- The `advance` attribute is used to repeat a value. When set to
+ FALSE, the next call to `{cycle}` will print the same value.
+
+- If you supply the `assign` attribute, the output of the `{cycle}`
+ function will be assigned to a template variable instead of being
+ output to the template.
+
+<!-- -->
+
+
+ {section name=rows loop=$data}
+ <tr class="{cycle values="odd,even"}">
+ <td>{$data[rows]}</td>
+ </tr>
+ {/section}
+
+
+
+The above template would output:
+
+
+ <tr class="odd">
+ <td>1</td>
+ </tr>
+ <tr class="even">
+ <td>2</td>
+ </tr>
+ <tr class="odd">
+ <td>3</td>
+ </tr>
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md
new file mode 100644
index 000000000..79b3477c1
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-debug.md
@@ -0,0 +1,15 @@
+{debug} {#language.function.debug}
+=======
+
+`{debug}` dumps the debug console to the page. This works regardless of
+the [debug](#chapter.debugging.console) settings in the php script.
+Since this gets executed at runtime, this is only able to show the
+[assigned](#api.assign) variables; not the templates that are in use.
+However, you can see all the currently available variables within the
+scope of a template.
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- -------------- ---------------------------------
+ output string No *javascript* output type, html or javascript
+
+See also the [debugging console page](#chapter.debugging.console).
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md
new file mode 100644
index 000000000..e11f57e3e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-eval.md
@@ -0,0 +1,84 @@
+{eval} {#language.function.eval}
+======
+
+`{eval}` is used to evaluate a variable as a template. This can be used
+for things like embedding template tags/variables into variables or
+tags/variables into config file variables.
+
+If you supply the `assign` attribute, the output of the `{eval}`
+function will be assigned to this template variable instead of being
+output to the template.
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- --------- ------------------------------------------------------
+ var mixed Yes *n/a* Variable (or string) to evaluate
+ assign string No *n/a* The template variable the output will be assigned to
+
+> **Note**
+>
+> - Evaluated variables are treated the same as templates. They follow
+> the same escapement and security features just as if they were
+> templates.
+>
+> - Evaluated variables are compiled on every invocation, the compiled
+> versions are not saved! However if you have [caching](#caching)
+> enabled, the output will be cached with the rest of the template.
+>
+> - If the content to evaluate doesn\'t change often, or is used
+> repeatedly, consider using
+> `{include file="string:{$template_code}"}` instead. This may cache
+> the compiled state and thus doesn\'t have to run the (comparably
+> slow) compiler on every invocation.
+>
+The contents of the config file, `setup.conf`.
+
+
+ emphstart = <strong>
+ emphend = </strong>
+ title = Welcome to {$company}'s home page!
+ ErrorCity = You must supply a {#emphstart#}city{#emphend#}.
+ ErrorState = You must supply a {#emphstart#}state{#emphend#}.
+
+
+
+Where the template is:
+
+
+ {config_load file='setup.conf'}
+
+ {eval var=$foo}
+ {eval var=#title#}
+ {eval var=#ErrorCity#}
+ {eval var=#ErrorState# assign='state_error'}
+ {$state_error}
+
+
+
+The above template will output:
+
+
+ This is the contents of foo.
+ Welcome to Foobar Pub & Grill's home page!
+ You must supply a <strong>city</strong>.
+ You must supply a <strong>state</strong>.
+
+
+
+This outputs the server name (in uppercase) and IP. The assigned
+variable `$str` could be from a database query.
+
+
+ <?php
+ $str = 'The server name is {$smarty.server.SERVER_NAME|upper} '
+ .'at {$smarty.server.SERVER_ADDR}';
+ $smarty->assign('foo',$str);
+ ?>
+
+
+
+Where the template is:
+
+
+ {eval var=$foo}
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md
new file mode 100644
index 000000000..3dbc5610f
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-fetch.md
@@ -0,0 +1,59 @@
+{fetch} {#language.function.fetch}
+=======
+
+`{fetch}` is used to retrieve files from the local file system, http, or
+ftp and display the contents.
+
+- If the file name begins with `http://`, the web site page will be
+ fetched and displayed.
+
+ > **Note**
+ >
+ > This will not support http redirects, be sure to include a
+ > trailing slash on your web page fetches where necessary.
+
+- If the file name begins with `ftp://`, the file will be downloaded
+ from the ftp server and displayed.
+
+- For local files, either a full system file path must be given, or a
+ path relative to the executed php script.
+
+ > **Note**
+ >
+ > If security is enabled and you are fetching a file from the local
+ > file system, `{fetch}` will only allow files from within the
+ > `$secure_dir` path of the security policy. See the
+ > [Security](#advanced.features.security) section for details.
+
+- If the `assign` attribute is set, the output of the `{fetch}`
+ function will be assigned to this template variable instead of being
+ output to the template.
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- --------- ------------------------------------------------------
+ file string Yes *n/a* The file, http or ftp site to fetch
+ assign string No *n/a* The template variable the output will be assigned to
+
+
+ {* include some javascript in your template *}
+ {fetch file='/export/httpd/www.example.com/docs/navbar.js'}
+
+ {* embed some weather text in your template from another web site *}
+ {fetch file='http://www.myweather.com/68502/'}
+
+ {* fetch a news headline file via ftp *}
+ {fetch file='ftp://user:password@ftp.example.com/path/to/currentheadlines.txt'}
+ {* as above but with variables *}
+ {fetch file="ftp://`$user`:`$password`@`$server`/`$path`"}
+
+ {* assign the fetched contents to a template variable *}
+ {fetch file='http://www.myweather.com/68502/' assign='weather'}
+ {if $weather ne ''}
+ <div id="weather">{$weather}</div>
+ {/if}
+
+
+
+See also [`{capture}`](#language.function.capture),
+[`{eval}`](#language.function.eval),
+[`{assign}`](#language.function.assign) and [`fetch()`](#api.fetch).
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md
new file mode 100644
index 000000000..23af713b7
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-checkboxes.md
@@ -0,0 +1,113 @@
+{html\_checkboxes} {#language.function.html.checkboxes}
+==================
+
+`{html_checkboxes}` is a [custom function](#language.custom.functions)
+that creates an html checkbox group with provided data. It takes care of
+which item(s) are selected by default as well.
+
+ Attribute Name Type Required Default Description
+ ---------------- ------------------- ------------------------------------- ------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ name string No *checkbox* Name of checkbox list
+ values array Yes, unless using options attribute *n/a* An array of values for checkbox buttons
+ output array Yes, unless using options attribute *n/a* An array of output for checkbox buttons
+ selected string/array No *empty* The selected checkbox element(s)
+ options associative array Yes, unless using values and output *n/a* An associative array of values and output
+ separator string No *empty* String of text to separate each checkbox item
+ assign string No *empty* Assign checkbox tags to an array instead of output
+ labels boolean No *TRUE* Add \<label\>-tags to the output
+ label\_ids boolean No *FALSE* Add id-attributes to \<label\> and \<input\> to the output
+ escape boolean No *TRUE* Escape the output / content (values are always escaped)
+ strict boolean No *FALSE* Will make the \"extra\" attributes *disabled* and *readonly* only be set, if they were supplied with either boolean *TRUE* or string *\"disabled\"* and *\"readonly\"* respectively
+
+- Required attributes are `values` and `output`, unless you use
+ `options` instead.
+
+- All output is XHTML compliant.
+
+- All parameters that are not in the list above are printed as
+ name/value-pairs inside each of the created \<input\>-tags.
+
+<!-- -->
+
+
+ <?php
+
+ $smarty->assign('cust_ids', array(1000,1001,1002,1003));
+ $smarty->assign('cust_names', array(
+ 'Joe Schmoe',
+ 'Jack Smith',
+ 'Jane Johnson',
+ 'Charlie Brown')
+ );
+ $smarty->assign('customer_id', 1001);
+
+ ?>
+
+
+
+where template is
+
+
+ {html_checkboxes name='id' values=$cust_ids output=$cust_names
+ selected=$customer_id separator='<br />'}
+
+
+
+or where PHP code is:
+
+
+ <?php
+
+ $smarty->assign('cust_checkboxes', array(
+ 1000 => 'Joe Schmoe',
+ 1001 => 'Jack Smith',
+ 1002 => 'Jane Johnson',
+ 1003 => 'Charlie Brown')
+ );
+ $smarty->assign('customer_id', 1001);
+
+ ?>
+
+
+
+and the template is
+
+
+ {html_checkboxes name='id' options=$cust_checkboxes
+ selected=$customer_id separator='<br />'}
+
+
+
+both examples will output:
+
+
+ <label><input type="checkbox" name="id[]" value="1000" />Joe Schmoe</label><br />
+ <label><input type="checkbox" name="id[]" value="1001" checked="checked" />Jack Smith</label>
+ <br />
+ <label><input type="checkbox" name="id[]" value="1002" />Jane Johnson</label><br />
+ <label><input type="checkbox" name="id[]" value="1003" />Charlie Brown</label><br />
+
+
+
+
+ <?php
+
+ $sql = 'select type_id, types from contact_types order by type';
+ $smarty->assign('contact_types',$db->getAssoc($sql));
+
+ $sql = 'select contact_id, contact_type_id, contact '
+ .'from contacts where contact_id=12';
+ $smarty->assign('contact',$db->getRow($sql));
+
+ ?>
+
+
+
+The results of the database queries above would be output with.
+
+
+ {html_checkboxes name='contact_type_id' options=$contact_types
+ selected=$contact.contact_type_id separator='<br />'}
+
+See also [`{html_radios}`](#language.function.html.radios) and
+[`{html_options}`](#language.function.html.options)
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md
new file mode 100644
index 000000000..e21f2a121
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-image.md
@@ -0,0 +1,56 @@
+{html\_image} {#language.function.html.image}
+=============
+
+`{html_image}` is a [custom function](#language.custom.functions) that
+generates an HTML `<img>` tag. The `height` and `width` are
+automatically calculated from the image file if they are not supplied.
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- ----------------------- ---------------------------------------
+ file string Yes *n/a* name/path to image
+ height string No *actual image height* Height to display image
+ width string No *actual image width* Width to display image
+ basedir string no *web server doc root* Directory to base relative paths from
+ alt string no *""* Alternative description of the image
+ href string no *n/a* href value to link the image to
+ path\_prefix string no *n/a* Prefix for output path
+
+- `basedir` is the base directory that relative image paths are based
+ from. If not given, the web server\'s document root
+ `$_ENV['DOCUMENT_ROOT']` is used as the base. If security is
+ enabled, then the image must be located in the `$secure_dir` path of
+ the security policy. See the [Security](#advanced.features.security)
+ section for details.
+
+- `href` is the href value to link the image to. If link is supplied,
+ an `<a href="LINKVALUE"><a>` tag is placed around the image tag.
+
+- `path_prefix` is an optional prefix string you can give the output
+ path. This is useful if you want to supply a different server name
+ for the image.
+
+- All parameters that are not in the list above are printed as
+ name/value-pairs inside the created `<img>` tag.
+
+> **Note**
+>
+> `{html_image}` requires a hit to the disk to read the image and
+> calculate the height and width. If you don\'t use template
+> [caching](#caching), it is generally better to avoid `{html_image}`
+> and leave image tags static for optimal performance.
+
+
+ {html_image file='pumpkin.jpg'}
+ {html_image file='/path/from/docroot/pumpkin.jpg'}
+ {html_image file='../path/relative/to/currdir/pumpkin.jpg'}
+
+
+
+Example output of the above template would be:
+
+
+ <img src="pumpkin.jpg" alt="" width="44" height="68" />
+ <img src="/path/from/docroot/pumpkin.jpg" alt="" width="44" height="68" />
+ <img src="../path/relative/to/currdir/pumpkin.jpg" alt="" width="44" height="68" />
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md
new file mode 100644
index 000000000..b7c04e940
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-options.md
@@ -0,0 +1,155 @@
+{html\_options} {#language.function.html.options}
+===============
+
+`{html_options}` is a [custom function](#language.custom.functions) that
+creates the html `<select><option>` group with the assigned data. It
+takes care of which item(s) are selected by default as well.
+
+ Attribute Name Type Required Default Description
+ ---------------- ------------------- ------------------------------------- --------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ values array Yes, unless using options attribute *n/a* An array of values for dropdown
+ output array Yes, unless using options attribute *n/a* An array of output for dropdown
+ selected string/array No *empty* The selected option element(s)
+ options associative array Yes, unless using values and output *n/a* An associative array of values and output
+ name string No *empty* Name of select group
+ strict boolean No *FALSE* Will make the \"extra\" attributes *disabled* and *readonly* only be set, if they were supplied with either boolean *TRUE* or string *\"disabled\"* and *\"readonly\"* respectively
+
+- Required attributes are `values` and `output`, unless you use the
+ combined `options` instead.
+
+- If the optional `name` attribute is given, the `<select></select>`
+ tags are created, otherwise ONLY the `<option>` list is generated.
+
+- If a given value is an array, it will treat it as an html
+ `<optgroup>`, and display the groups. Recursion is supported with
+ `<optgroup>`.
+
+- All parameters that are not in the list above are printed as
+ name/value-pairs inside the `<select>` tag. They are ignored if the
+ optional `name` is not given.
+
+- All output is XHTML compliant.
+
+<!-- -->
+
+
+ <?php
+ $smarty->assign('myOptions', array(
+ 1800 => 'Joe Schmoe',
+ 9904 => 'Jack Smith',
+ 2003 => 'Charlie Brown')
+ );
+ $smarty->assign('mySelect', 9904);
+ ?>
+
+
+
+The following template will generate a drop-down list. Note the presence
+of the `name` attribute which creates the `<select>` tags.
+
+
+ {html_options name=foo options=$myOptions selected=$mySelect}
+
+
+
+Output of the above example would be:
+
+
+ <select name="foo">
+ <option value="1800">Joe Schmoe</option>
+ <option value="9904" selected="selected">Jack Smith</option>
+ <option value="2003">Charlie Brown</option>
+ </select>
+
+
+ <?php
+ $smarty->assign('cust_ids', array(56,92,13));
+ $smarty->assign('cust_names', array(
+ 'Joe Schmoe',
+ 'Jane Johnson',
+ 'Charlie Brown'));
+ $smarty->assign('customer_id', 92);
+ ?>
+
+
+
+The above arrays would be output with the following template (note the
+use of the php [`count()`](&url.php-manual;function.count) function as a
+modifier to set the select size).
+
+
+ <select name="customer_id" size="{$cust_names|@count}">
+ {html_options values=$cust_ids output=$cust_names selected=$customer_id}
+ </select>
+
+
+
+The above example would output:
+
+
+ <select name="customer_id" size="3">
+ <option value="56">Joe Schmoe</option>
+ <option value="92" selected="selected">Jane Johnson</option>
+ <option value="13">Charlie Brown</option>
+ </select>
+
+
+
+
+
+ <?php
+
+ $sql = 'select type_id, types from contact_types order by type';
+ $smarty->assign('contact_types',$db->getAssoc($sql));
+
+ $sql = 'select contact_id, name, email, contact_type_id
+ from contacts where contact_id='.$contact_id;
+ $smarty->assign('contact',$db->getRow($sql));
+
+ ?>
+
+Where a template could be as follows. Note the use of the
+[`truncate`](#language.modifier.truncate) modifier.
+
+
+ <select name="type_id">
+ <option value='null'>-- none --</option>
+ {html_options options=$contact_types|truncate:20 selected=$contact.type_id}
+ </select>
+
+
+
+
+ <?php
+ $arr['Sport'] = array(6 => 'Golf', 9 => 'Cricket',7 => 'Swim');
+ $arr['Rest'] = array(3 => 'Sauna',1 => 'Massage');
+ $smarty->assign('lookups', $arr);
+ $smarty->assign('fav', 7);
+ ?>
+
+
+
+The script above and the following template
+
+
+ {html_options name=foo options=$lookups selected=$fav}
+
+
+
+would output:
+
+
+ <select name="foo">
+ <optgroup label="Sport">
+ <option value="6">Golf</option>
+ <option value="9">Cricket</option>
+ <option value="7" selected="selected">Swim</option>
+ </optgroup>
+ <optgroup label="Rest">
+ <option value="3">Sauna</option>
+ <option value="1">Massage</option>
+ </optgroup>
+ </select>
+
+See also [`{html_checkboxes}`](#language.function.html.checkboxes) and
+[`{html_radios}`](#language.function.html.radios)
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md
new file mode 100644
index 000000000..992adaeaf
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-radios.md
@@ -0,0 +1,112 @@
+{html\_radios} {#language.function.html.radios}
+==============
+
+`{html_radios}` is a [custom function](#language.custom.functions) that
+creates a HTML radio button group. It also takes care of which item is
+selected by default as well.
+
+ Attribute Name Type Required Default Description
+ ---------------- ------------------- ------------------------------------- --------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ name string No *radio* Name of radio list
+ values array Yes, unless using options attribute *n/a* An array of values for radio buttons
+ output array Yes, unless using options attribute *n/a* An array of output for radio buttons
+ selected string No *empty* The selected radio element
+ options associative array Yes, unless using values and output *n/a* An associative array of values and output
+ separator string No *empty* String of text to separate each radio item
+ assign string No *empty* Assign radio tags to an array instead of output
+ labels boolean No *TRUE* Add \<label\>-tags to the output
+ label\_ids boolean No *FALSE* Add id-attributes to \<label\> and \<input\> to the output
+ escape boolean No *TRUE* Escape the output / content (values are always escaped)
+ strict boolean No *FALSE* Will make the \"extra\" attributes *disabled* and *readonly* only be set, if they were supplied with either boolean *TRUE* or string *\"disabled\"* and *\"readonly\"* respectively
+
+- Required attributes are `values` and `output`, unless you use
+ `options` instead.
+
+- All output is XHTML compliant.
+
+- All parameters that are not in the list above are output as
+ name/value-pairs inside each of the created `<input>`-tags.
+
+<!-- -->
+
+
+ <?php
+
+ $smarty->assign('cust_ids', array(1000,1001,1002,1003));
+ $smarty->assign('cust_names', array(
+ 'Joe Schmoe',
+ 'Jack Smith',
+ 'Jane Johnson',
+ 'Charlie Brown')
+ );
+ $smarty->assign('customer_id', 1001);
+
+ ?>
+
+
+
+Where template is:
+
+
+ {html_radios name='id' values=$cust_ids output=$cust_names
+ selected=$customer_id separator='<br />'}
+
+
+
+
+ <?php
+
+ $smarty->assign('cust_radios', array(
+ 1000 => 'Joe Schmoe',
+ 1001 => 'Jack Smith',
+ 1002 => 'Jane Johnson',
+ 1003 => 'Charlie Brown'));
+ $smarty->assign('customer_id', 1001);
+
+ ?>
+
+
+
+Where template is:
+
+
+ {html_radios name='id' options=$cust_radios
+ selected=$customer_id separator='<br />'}
+
+
+
+Both examples will output:
+
+
+ <label><input type="radio" name="id" value="1000" />Joe Schmoe</label><br />
+ <label><input type="radio" name="id" value="1001" checked="checked" />Jack Smith</label><br />
+ <label><input type="radio" name="id" value="1002" />Jane Johnson</label><br />
+ <label><input type="radio" name="id" value="1003" />Charlie Brown</label><br />
+
+
+
+
+ <?php
+
+ $sql = 'select type_id, types from contact_types order by type';
+ $smarty->assign('contact_types',$db->getAssoc($sql));
+
+ $sql = 'select contact_id, name, email, contact_type_id '
+ .'from contacts where contact_id='.$contact_id;
+ $smarty->assign('contact',$db->getRow($sql));
+
+ ?>
+
+
+
+The variable assigned from the database above would be output with the
+template:
+
+
+ {html_radios name='contact_type_id' options=$contact_types
+ selected=$contact.contact_type_id separator='<br />'}
+
+
+
+See also [`{html_checkboxes}`](#language.function.html.checkboxes) and
+[`{html_options}`](#language.function.html.options)
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-date.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-date.md
new file mode 100644
index 000000000..b46eb0419
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-date.md
@@ -0,0 +1,119 @@
+{html\_select\_date} {#language.function.html.select.date}
+====================
+
+`{html_select_date}` is a [custom function](#language.custom.functions)
+that creates date dropdowns. It can display any or all of year, month,
+and day. All parameters that are not in the list below are printed as
+name/value-pairs inside the `<select>` tags of day, month and year.
+
+ Attribute Name Type Required Default Description
+ ---------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- ---------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ prefix string No Date\_ What to prefix the var name with
+ time [timestamp](&url.php-manual;function.time), [DateTime](&url.php-manual;class.DateTime), mysql timestamp or any string parsable by [`strtotime()`](&url.php-manual;strtotime), arrays as produced by this function if field\_array is set. No current [timestamp](&url.php-manual;function.time) What date/time to pre-select. If an array is given, the attributes field\_array and prefix are used to identify the array elements to extract year, month and day from. Omitting this parameter or supplying a falsy value will select the current date. To prevent date selection, pass in NULL
+ start\_year string No current year The first year in the dropdown, either year number, or relative to current year (+/- N)
+ end\_year string No same as start\_year The last year in the dropdown, either year number, or relative to current year (+/- N)
+ display\_days boolean No TRUE Whether to display days or not
+ display\_months boolean No TRUE Whether to display months or not
+ display\_years boolean No TRUE Whether to display years or not
+ month\_names array No null List of strings to display for months. array(1 =\> \'Jan\', ..., 12 =\> \'Dec\')
+ month\_format string No \%B What format the month should be in (strftime)
+ day\_format string No \%02d What format the day output should be in (sprintf)
+ day\_value\_format string No \%d What format the day value should be in (sprintf)
+ year\_as\_text boolean No FALSE Whether or not to display the year as text
+ reverse\_years boolean No FALSE Display years in reverse order
+ field\_array string No null If a name is given, the select boxes will be drawn such that the results will be returned to PHP in the form of name\[Day\], name\[Year\], name\[Month\].
+ day\_size string No null Adds size attribute to select tag if given
+ month\_size string No null Adds size attribute to select tag if given
+ year\_size string No null Adds size attribute to select tag if given
+ all\_extra string No null Adds extra attributes to all select/input tags if given
+ day\_extra string No null Adds extra attributes to select/input tags if given
+ month\_extra string No null Adds extra attributes to select/input tags if given
+ year\_extra string No null Adds extra attributes to select/input tags if given
+ all\_id string No null Adds id-attribute to all select/input tags if given
+ day\_id string No null Adds id-attribute to select/input tags if given
+ month\_id string No null Adds id-attribute to select/input tags if given
+ year\_id string No null Adds id-attribute to select/input tags if given
+ field\_order string No MDY The order in which to display the fields
+ field\_separator string No \\n String printed between different fields
+ month\_value\_format string No \%m strftime() format of the month values, default is %m for month numbers.
+ all\_empty string No null If supplied then the first element of any select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-boxes read "Please select" for example.
+ year\_empty string No null If supplied then the first element of the year\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select a year" for example. Note that you can use values like "-MM-DD" as time-attribute to indicate an unselected year.
+ month\_empty string No null If supplied then the first element of the month\'s select-box has this value as it\'s label and "" as it\'s value. . Note that you can use values like "YYYY\--DD" as time-attribute to indicate an unselected month.
+ day\_empty string No null If supplied then the first element of the day\'s select-box has this value as it\'s label and "" as it\'s value. Note that you can use values like "YYYY-MM-" as time-attribute to indicate an unselected day.
+
+> **Note**
+>
+> There is an useful php function on the [date tips page](#tips.dates)
+> for converting `{html_select_date}` form values to a timestamp.
+
+Template code
+
+
+ {html_select_date}
+
+
+
+This will output:
+
+
+ <select name="Date_Month">
+ <option value="1">January</option>
+ <option value="2">February</option>
+ <option value="3">March</option>
+ ..... snipped .....
+ <option value="10">October</option>
+ <option value="11">November</option>
+ <option value="12" selected="selected">December</option>
+ </select>
+ <select name="Date_Day">
+ <option value="1">01</option>
+ <option value="2">02</option>
+ <option value="3">03</option>
+ ..... snipped .....
+ <option value="11">11</option>
+ <option value="12">12</option>
+ <option value="13" selected="selected">13</option>
+ <option value="14">14</option>
+ <option value="15">15</option>
+ ..... snipped .....
+ <option value="29">29</option>
+ <option value="30">30</option>
+ <option value="31">31</option>
+ </select>
+ <select name="Date_Year">
+ <option value="2006" selected="selected">2006</option>
+ </select>
+
+
+
+
+ {* start and end year can be relative to current year *}
+ {html_select_date prefix='StartDate' time=$time start_year='-5'
+ end_year='+1' display_days=false}
+
+
+
+With 2000 as the current year the output:
+
+
+ <select name="StartDateMonth">
+ <option value="1">January</option>
+ <option value="2">February</option>
+ .... snipped ....
+ <option value="11">November</option>
+ <option value="12" selected="selected">December</option>
+ </select>
+ <select name="StartDateYear">
+ <option value="1995">1995</option>
+ .... snipped ....
+ <option value="1999">1999</option>
+ <option value="2000" selected="selected">2000</option>
+ <option value="2001">2001</option>
+ </select>
+
+
+
+See also [`{html_select_time}`](#language.function.html.select.time),
+[`date_format`](#language.modifier.date.format),
+[`$smarty.now`](#language.variables.smarty.now) and the [date tips
+page](#tips.dates).
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-time.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-time.md
new file mode 100644
index 000000000..6ccc59907
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-select-time.md
@@ -0,0 +1,98 @@
+{html\_select\_time} {#language.function.html.select.time}
+====================
+
+`{html_select_time}` is a [custom function](#language.custom.functions)
+that creates time dropdowns for you. It can display any or all of hour,
+minute, second and meridian.
+
+The `time` attribute can have different formats. It can be a unique
+timestamp, a string of the format `YYYYMMDDHHMMSS` or a string that is
+parseable by PHP\'s [`strtotime()`](&url.php-manual;strtotime).
+
+ Attribute Name Type Required Default Description
+ ----------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------- ---------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ prefix string No Time\_ What to prefix the var name with
+ time [timestamp](&url.php-manual;function.time), [DateTime](&url.php-manual;class.DateTime), mysql timestamp or any string parsable by [`strtotime()`](&url.php-manual;strtotime), arrays as produced by this function if field\_array is set. No current [timestamp](&url.php-manual;function.time) What date/time to pre-select. If an array is given, the attributes field\_array and prefix are used to identify the array elements to extract hour, minute, second and meridian from.
+ display\_hours boolean No TRUE Whether or not to display hours
+ display\_minutes boolean No TRUE Whether or not to display minutes
+ display\_seconds boolean No TRUE Whether or not to display seconds
+ display\_meridian boolean No TRUE Whether or not to display meridian (am/pm)
+ use\_24\_hours boolean No TRUE Whether or not to use 24 hour clock
+ minute\_interval integer No 1 Number interval in minute dropdown
+ second\_interval integer No 1 Number interval in second dropdown
+ hour\_format string No \%02d What format the hour label should be in (sprintf)
+ hour\_value\_format string No \%20d What format the hour value should be in (sprintf)
+ minute\_format string No \%02d What format the minute label should be in (sprintf)
+ minute\_value\_format string No \%20d What format the minute value should be in (sprintf)
+ second\_format string No \%02d What format the second label should be in (sprintf)
+ second\_value\_format string No \%20d What format the second value should be in (sprintf)
+ field\_array string No n/a Outputs values to array of this name
+ all\_extra string No null Adds extra attributes to select/input tags if given
+ hour\_extra string No null Adds extra attributes to select/input tags if given
+ minute\_extra string No null Adds extra attributes to select/input tags if given
+ second\_extra string No null Adds extra attributes to select/input tags if given
+ meridian\_extra string No null Adds extra attributes to select/input tags if given
+ field\_separator string No \\n String printed between different fields
+ option\_separator string No \\n String printed between different options of a field
+ all\_id string No null Adds id-attribute to all select/input tags if given
+ hour\_id string No null Adds id-attribute to select/input tags if given
+ minute\_id string No null Adds id-attribute to select/input tags if given
+ second\_id string No null Adds id-attribute to select/input tags if given
+ meridian\_id string No null Adds id-attribute to select/input tags if given
+ all\_empty string No null If supplied then the first element of any select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-boxes read "Please select" for example.
+ hour\_empty string No null If supplied then the first element of the hour\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select an hour" for example.
+ minute\_empty string No null If supplied then the first element of the minute\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select an minute" for example.
+ second\_empty string No null If supplied then the first element of the second\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select an second" for example.
+ meridian\_empty string No null If supplied then the first element of the meridian\'s select-box has this value as it\'s label and "" as it\'s value. This is useful to make the select-box read "Please select an meridian" for example.
+
+
+ {html_select_time use_24_hours=true}
+
+
+
+At 9:20 and 23 seconds in the morning the template above would output:
+
+
+ <select name="Time_Hour">
+ <option value="00">00</option>
+ <option value="01">01</option>
+ ... snipped ....
+ <option value="08">08</option>
+ <option value="09" selected>09</option>
+ <option value="10">10</option>
+ ... snipped ....
+ <option value="22">22</option>
+ <option value="23">23</option>
+ </select>
+ <select name="Time_Minute">
+ <option value="00">00</option>
+ <option value="01">01</option>
+ ... snipped ....
+ <option value="19">19</option>
+ <option value="20" selected>20</option>
+ <option value="21">21</option>
+ ... snipped ....
+ <option value="58">58</option>
+ <option value="59">59</option>
+ </select>
+ <select name="Time_Second">
+ <option value="00">00</option>
+ <option value="01">01</option>
+ ... snipped ....
+ <option value="22">22</option>
+ <option value="23" selected>23</option>
+ <option value="24">24</option>
+ ... snipped ....
+ <option value="58">58</option>
+ <option value="59">59</option>
+ </select>
+ <select name="Time_Meridian">
+ <option value="am" selected>AM</option>
+ <option value="pm">PM</option>
+ </select>
+
+
+
+See also [`$smarty.now`](#language.variables.smarty.now),
+[`{html_select_date}`](#language.function.html.select.date) and the
+[date tips page](#tips.dates).
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-table.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-table.md
new file mode 100644
index 000000000..fed4ae4d7
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-html-table.md
@@ -0,0 +1,89 @@
+{html\_table} {#language.function.html.table}
+=============
+
+`{html_table}` is a [custom function](#language.custom.functions) that
+dumps an array of data into an HTML `<table>`.
+
+ Attribute Name Type Required Default Description
+ ---------------- --------- ---------- ---------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ loop array Yes *n/a* Array of data to loop through
+ cols mixed No *3* Number of columns in the table or a comma-separated list of column heading names or an array of column heading names.if the cols-attribute is empty, but rows are given, then the number of cols is computed by the number of rows and the number of elements to display to be just enough cols to display all elements. If both, rows and cols, are omitted cols defaults to 3. if given as a list or array, the number of columns is computed from the number of elements in the list or array.
+ rows integer No *empty* Number of rows in the table. if the rows-attribute is empty, but cols are given, then the number of rows is computed by the number of cols and the number of elements to display to be just enough rows to display all elements.
+ inner string No *cols* Direction of consecutive elements in the loop-array to be rendered. *cols* means elements are displayed col-by-col. *rows* means elements are displayed row-by-row.
+ caption string No *empty* Text to be used for the `<caption>` element of the table
+ table\_attr string No *border=\"1\"* Attributes for `<table>` tag
+ th\_attr string No *empty* Attributes for `<th>` tag (arrays are cycled)
+ tr\_attr string No *empty* attributes for `<tr>` tag (arrays are cycled)
+ td\_attr string No *empty* Attributes for `<td>` tag (arrays are cycled)
+ trailpad string No *&nbsp;* Value to pad the trailing cells on last row with (if any)
+ hdir string No *right* Direction of each row to be rendered. possible values: *right* (left-to-right), and *left* (right-to-left)
+ vdir string No *down* Direction of each column to be rendered. possible values: *down* (top-to-bottom), *up* (bottom-to-top)
+
+- The `cols` attribute determines how many columns will be in the
+ table.
+
+- The `table_attr`, `tr_attr` and `td_attr` values determine the
+ attributes given to the `<table>`, `<tr>` and `<td>` tags.
+
+- If `tr_attr` or `td_attr` are arrays, they will be cycled through.
+
+- `trailpad` is the value put into the trailing cells on the last
+ table row if there are any present.
+
+<!-- -->
+
+
+ <?php
+ $smarty->assign( 'data', array(1,2,3,4,5,6,7,8,9) );
+ $smarty->assign( 'tr', array('bgcolor="#eeeeee"','bgcolor="#dddddd"') );
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+The variables assigned from php could be displayed as these three
+examples demonstrate. Each example shows the template followed by
+output.
+
+
+ {**** Example One ****}
+ {html_table loop=$data}
+
+ <table border="1">
+ <tbody>
+ <tr><td>1</td><td>2</td><td>3</td></tr>
+ <tr><td>4</td><td>5</td><td>6</td></tr>
+ <tr><td>7</td><td>8</td><td>9</td></tr>
+ </tbody>
+ </table>
+
+
+ {**** Example Two ****}
+ {html_table loop=$data cols=4 table_attr='border="0"'}
+
+ <table border="0">
+ <tbody>
+ <tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
+ <tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
+ <tr><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+ </tbody>
+ </table>
+
+
+ {**** Example Three ****}
+ {html_table loop=$data cols="first,second,third,fourth" tr_attr=$tr}
+
+ <table border="1">
+ <thead>
+ <tr>
+ <th>first</th><th>second</th><th>third</th><th>fourth</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr bgcolor="#eeeeee"><td>1</td><td>2</td><td>3</td><td>4</td></tr>
+ <tr bgcolor="#dddddd"><td>5</td><td>6</td><td>7</td><td>8</td></tr>
+ <tr bgcolor="#eeeeee"><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+ </tbody>
+ </table>
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md
new file mode 100644
index 000000000..cc5bf6968
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-mailto.md
@@ -0,0 +1,56 @@
+{mailto} {#language.function.mailto}
+========
+
+`{mailto}` automates the creation of a `mailto:` anchor links and
+optionally encodes them. Encoding emails makes it more difficult for web
+spiders to lift email addresses off of a site.
+
+> **Note**
+>
+> Javascript is probably the most thorough form of encoding, although
+> you can use hex encoding too.
+
+ Attribute Name Type Required Default Description
+ ---------------- -------- ---------- --------- -----------------------------------------------------------------------------------------------
+ address string Yes *n/a* The e-mail address
+ text string No *n/a* The text to display, default is the e-mail address
+ encode string No *none* How to encode the e-mail. Can be one of `none`, `hex`, `javascript` or `javascript_charcode`.
+ cc string No *n/a* Email addresses to carbon copy, separate entries by a comma.
+ bcc string No *n/a* Email addresses to blind carbon copy, separate entries by a comma
+ subject string No *n/a* Email subject
+ newsgroups string No *n/a* Newsgroups to post to, separate entries by a comma.
+ followupto string No *n/a* Addresses to follow up to, separate entries by a comma.
+ extra string No *n/a* Any extra information you want passed to the link, such as style sheet classes
+
+
+ {mailto address="me@example.com"}
+ <a href="mailto:me@example.com" >me@example.com</a>
+
+ {mailto address="me@example.com" text="send me some mail"}
+ <a href="mailto:me@example.com" >send me some mail</a>
+
+ {mailto address="me@example.com" encode="javascript"}
+ <script type="text/javascript" language="javascript">
+ eval(unescape('%64%6f% ... snipped ...%61%3e%27%29%3b'))
+ </script>
+
+ {mailto address="me@example.com" encode="hex"}
+ <a href="mailto:%6d%65.. snipped..3%6f%6d">&#x6d;&..snipped...#x6f;&#x6d;</a>
+
+ {mailto address="me@example.com" subject="Hello to you!"}
+ <a href="mailto:me@example.com?subject=Hello%20to%20you%21" >me@example.com</a>
+
+ {mailto address="me@example.com" cc="you@example.com,they@example.com"}
+ <a href="mailto:me@example.com?cc=you@example.com,they@example.com" >me@example.com</a>
+
+ {mailto address="me@example.com" extra='class="email"'}
+ <a href="mailto:me@example.com" class="email">me@example.com</a>
+
+ {mailto address="me@example.com" encode="javascript_charcode"}
+ <script type="text/javascript" language="javascript">
+ {document.write(String.fromCharCode(60,97, ... snipped ....60,47,97,62))}
+ </script>
+
+See also [`escape`](#language.modifier.escape),
+[`{textformat}`](#language.function.textformat) and [obfuscating email
+addresses](#tips.obfuscating.email).
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-math.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-math.md
new file mode 100644
index 000000000..9adfd1c5a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-math.md
@@ -0,0 +1,104 @@
+{math} {#language.function.math}
+======
+
+`{math}` allows the template designer to do math equations in the
+template.
+
+- Any numeric template variables may be used in the equations, and the
+ result is printed in place of the tag.
+
+- The variables used in the equation are passed as parameters, which
+ can be template variables or static values.
+
+- +, -, /, \*, abs, ceil, cos, exp, floor, log, log10, max, min, pi,
+ pow, rand, round, sin, sqrt, srans and tan are all valid operators.
+ Check the PHP documentation for further information on these
+ [math](&url.php-manual;eval) functions.
+
+- If you supply the `assign` attribute, the output of the `{math}`
+ function will be assigned to this template variable instead of being
+ output to the template.
+
+> **Note**
+>
+> `{math}` is an expensive function in performance due to its use of the
+> php [`eval()`](&url.php-manual;eval) function. Doing the math in PHP
+> is much more efficient, so whenever possible do the math calculations
+> in the script and [`assign()`](#api.assign) the results to the
+> template. Definitely avoid repetitive `{math}` function calls, eg
+> within [`{section}`](#language.function.section) loops.
+
+ Attribute Name Type Required Default Description
+ ---------------- --------- ---------- --------- --------------------------------------------------
+ equation string Yes *n/a* The equation to execute
+ format string No *n/a* The format of the result (sprintf)
+ var numeric Yes *n/a* Equation variable value
+ assign string No *n/a* Template variable the output will be assigned to
+ \[var \...\] numeric Yes *n/a* Equation variable value
+
+**Example a:**
+
+
+ {* $height=4, $width=5 *}
+
+ {math equation="x + y" x=$height y=$width}
+
+
+
+The above example will output:
+
+
+ 9
+
+
+
+**Example b:**
+
+
+ {* $row_height = 10, $row_width = 20, #col_div# = 2, assigned in template *}
+
+ {math equation="height * width / division"
+ height=$row_height
+ width=$row_width
+ division=#col_div#}
+
+
+
+The above example will output:
+
+
+ 100
+
+
+
+**Example c:**
+
+
+ {* you can use parenthesis *}
+
+ {math equation="(( x + y ) / z )" x=2 y=10 z=2}
+
+
+
+The above example will output:
+
+
+ 6
+
+
+
+**Example d:**
+
+
+ {* you can supply a format parameter in sprintf format *}
+
+ {math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
+
+
+
+The above example will output:
+
+
+ 9.44
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md
new file mode 100644
index 000000000..d0cd4cfc8
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-custom-functions/language-function-textformat.md
@@ -0,0 +1,190 @@
+{textformat} {#language.function.textformat}
+============
+
+`{textformat}` is a [block function](#plugins.block.functions) used to
+format text. It basically cleans up spaces and special characters, and
+formats paragraphs by wrapping at a boundary and indenting lines.
+
+You can set the parameters explicitly, or use a preset style. Currently
+"email" is the only available style.
+
+ Attribute Name Type Required Default Description
+ ---------------- --------- ---------- ------------------ ----------------------------------------------------------------------------------------
+ style string No *n/a* Preset style
+ indent number No *0* The number of chars to indent every line
+ indent\_first number No *0* The number of chars to indent the first line
+ indent\_char string No *(single space)* The character (or string of chars) to indent with
+ wrap number No *80* How many characters to wrap each line to
+ wrap\_char string No *\\n* The character (or string of chars) to break each line with
+ wrap\_cut boolean No *FALSE* If TRUE, wrap will break the line at the exact character instead of at a word boundary
+ assign string No *n/a* The template variable the output will be assigned to
+
+
+ {textformat wrap=40}
+
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+
+ This is bar.
+
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+
+ {/textformat}
+
+
+
+
+The above example will output:
+
+
+
+ This is foo. This is foo. This is foo.
+ This is foo. This is foo. This is foo.
+
+ This is bar.
+
+ bar foo bar foo foo. bar foo bar foo
+ foo. bar foo bar foo foo. bar foo bar
+ foo foo. bar foo bar foo foo. bar foo
+ bar foo foo. bar foo bar foo foo.
+
+
+
+
+ {textformat wrap=40 indent=4}
+
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+
+ This is bar.
+
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+
+ {/textformat}
+
+
+
+
+The above example will output:
+
+
+
+ This is foo. This is foo. This is
+ foo. This is foo. This is foo. This
+ is foo.
+
+ This is bar.
+
+ bar foo bar foo foo. bar foo bar foo
+ foo. bar foo bar foo foo. bar foo
+ bar foo foo. bar foo bar foo foo.
+ bar foo bar foo foo. bar foo bar
+ foo foo.
+
+
+
+
+ {textformat wrap=40 indent=4 indent_first=4}
+
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+
+ This is bar.
+
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+
+ {/textformat}
+
+
+
+The above example will output:
+
+
+
+ This is foo. This is foo. This
+ is foo. This is foo. This is foo.
+ This is foo.
+
+ This is bar.
+
+ bar foo bar foo foo. bar foo bar
+ foo foo. bar foo bar foo foo. bar
+ foo bar foo foo. bar foo bar foo
+ foo. bar foo bar foo foo. bar foo
+ bar foo foo.
+
+
+
+
+ {textformat style="email"}
+
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+ This is foo.
+
+ This is bar.
+
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+ bar foo bar foo foo.
+
+ {/textformat}
+
+
+
+
+The above example will output:
+
+
+
+ This is foo. This is foo. This is foo. This is foo. This is foo. This is
+ foo.
+
+ This is bar.
+
+ bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo
+ bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo
+ foo.
+
+
+
+
+See also [`{strip}`](#language.function.strip) and
+[`wordwrap`](#language.modifier.wordwrap).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers.md b/vendor/smarty/smarty/docs/designers/language-modifiers.md
new file mode 100644
index 000000000..4626dbe55
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers.md
@@ -0,0 +1,123 @@
+Variable Modifiers {#language.modifiers}
+==================
+
+## Table of contents
+- [capitalize](./language-modifiers/language-modifier-capitalize.md)
+- [cat](./language-modifiers/language-modifier-cat.md)
+- [count_characters](./language-modifiers/language-modifier-count-characters.md)
+- [count_paragraphs](./language-modifiers/language-modifier-count-paragraphs.md)
+- [count_sentences](./language-modifiers/language-modifier-count-sentences.md)
+- [count_words](./language-modifiers/language-modifier-count-words.md)
+- [date_format](./language-modifiers/language-modifier-date-format.md)
+- [default](./language-modifiers/language-modifier-default.md)
+- [escape](./language-modifiers/language-modifier-escape.md)
+- [from_charset](./language-modifiers/language-modifier-from-charset.md)
+- [indent](./language-modifiers/language-modifier-indent.md)
+- [lower](./language-modifiers/language-modifier-lower.md)
+- [nl2br](./language-modifiers/language-modifier-nl2br.md)
+- [regex_replace](./language-modifiers/language-modifier-regex-replace.md)
+- [replace](./language-modifiers/language-modifier-replace.md)
+- [spacify](./language-modifiers/language-modifier-spacify.md)
+- [string_format](./language-modifiers/language-modifier-string-format.md)
+- [strip](./language-modifiers/language-modifier-strip.md)
+- [strip_tags](./language-modifiers/language-modifier-strip-tags.md)
+- [to_charset](./language-modifiers/language-modifier-to-charset.md)
+- [truncate](./language-modifiers/language-modifier-truncate.md)
+- [unescape](./language-modifiers/language-modifier-unescape.md)
+- [upper](./language-modifiers/language-modifier-upper.md)
+- [wordwrap](./language-modifiers/language-modifier-wordwrap.md)
+
+Variable modifiers can be applied to
+[variables](./language-variables.md), [custom
+functions](./language-custom-functions.md) or strings. To apply a modifier,
+specify the value followed by a `|` (pipe) and the modifier name. A
+modifier may accept additional parameters that affect its behavior.
+These parameters follow the modifier name and are separated by a `:`
+(colon). Also, *all php-functions can be used as modifiers implicitly*
+(more below) and modifiers can be
+[combined](./language-combining-modifiers.md).
+
+
+ {* apply modifier to a variable *}
+ {$title|upper}
+
+ {* modifier with parameters *}
+ {$title|truncate:40:"..."}
+
+ {* apply modifier to a function parameter *}
+ {html_table loop=$myvar|upper}
+
+ {* with parameters *}
+ {html_table loop=$myvar|truncate:40:"..."}
+
+ {* apply modifier to literal string *}
+ {"foobar"|upper}
+
+ {* using date_format to format the current date *}
+ {$smarty.now|date_format:"%Y/%m/%d"}
+
+ {* apply modifier to a custom function *}
+ {mailto|upper address="smarty@example.com"}
+
+ {* using php's str_repeat *}
+ {"="|str_repeat:80}
+
+ {* php's count *}
+ {$myArray|@count}
+
+ {* this will uppercase and truncate the whole array *}
+ <select name="name_id">
+ {html_options output=$my_array|upper|truncate:20}
+ </select>
+
+
+
+- Modifiers can be applied to any type of variables, including arrays
+ and objects.
+
+ > **Note**
+ >
+ > The default behavior was changed with Smarty 3. In Smarty 2.x, you
+ > had to use an \"`@`\" symbol to apply a modifier to an array, such
+ > as `{$articleTitle|@count}`. With Smarty 3, the \"`@`\" is no
+ > longer necessary, and is ignored.
+ >
+ > If you want a modifier to apply to each individual item of an
+ > array, you will either need to loop the array in the template, or
+ > provide for this functionality inside your modifier function.
+
+ > **Note**
+ >
+ > Second, in Smarty 2.x, modifiers were applied to the result of
+ > math expressions like `{8+2}`, meaning that
+ > `{8+2|count_characters}` would give `2`, as 8+2=10 and 10 is two
+ > characters long. With Smarty 3, modifiers are applied to the
+ > variables or atomic expressions before executing the calculations,
+ > so since 2 is one character long, `{8+2|count_characters}`
+ > gives 9. To get the old result use parentheses like
+ > `{(8+2)|count_characters}`.
+
+- Modifiers are autoloaded from the
+ [`$plugins_dir`](../programmers/api-variables/variable-plugins-dir.md) or can be registered
+ explicitly with the [`registerPlugin()`](../programmers/api-functions/api-register-plugin.md)
+ function. The later is useful for sharing a function between php
+ scripts and smarty templates.
+
+- All php-functions can be used as modifiers implicitly, as
+ demonstrated in the example above. However, using php-functions as
+ modifiers has two little pitfalls:
+
+ - First - sometimes the order of the function-parameters is not
+ the desirable one. Formatting `$foo` with
+ `{"%2.f"|sprintf:$foo}` actually works, but asks for the more
+ intuitive, like `{$foo|string_format:"%2.f"}` that is provided
+ by the Smarty distribution.
+
+ - Secondly - if security is enabled, all php-functions that are to
+ be used as modifiers have to be declared trusted in the
+ `$modifiers` property of the security policy. See the
+ [Security](../programmers/advanced-features/advanced-features-security.md) section for details.
+
+See also [`registerPlugin()`](../programmers/api-functions/api-register-plugin.md), [combining
+modifiers](./language-combining-modifiers.md). and [extending smarty with
+plugins](../programmers/plugins.md)
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-capitalize.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-capitalize.md
new file mode 100644
index 000000000..015bb3bc0
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-capitalize.md
@@ -0,0 +1,41 @@
+capitalize {#language.modifier.capitalize}
+==========
+
+This is used to capitalize the first letter of all words in a variable.
+This is similar to the PHP [`ucwords()`](&url.php-manual;ucwords)
+function.
+
+ Parameter Position Type Required Default Description
+ -------------------- --------- ---------- --------- -----------------------------------------------------------------------------------------------------------
+ 1 boolean No FALSE This determines whether or not words with digits will be uppercased
+ 2 boolean No FALSE This determines whether or not Capital letters within words should be lowercased, e.g. \"aAa\" to \"Aaa\"
+
+
+ <?php
+
+ $smarty->assign('articleTitle', 'next x-men film, x3, delayed.');
+
+ ?>
+
+
+
+Where the template is:
+
+
+ {$articleTitle}
+ {$articleTitle|capitalize}
+ {$articleTitle|capitalize:true}
+
+
+
+Will output:
+
+
+ next x-men film, x3, delayed.
+ Next X-Men Film, x3, Delayed.
+ Next X-Men Film, X3, Delayed.
+
+
+
+See also [`lower`](#language.modifier.lower) and
+[`upper`](#language.modifier.upper)
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-cat.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-cat.md
new file mode 100644
index 000000000..1f43ae177
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-cat.md
@@ -0,0 +1,31 @@
+cat {#language.modifier.cat}
+===
+
+This value is concatenated to the given variable.
+
+ Parameter Position Type Required Default Description
+ -------------------- -------- ---------- --------- -----------------------------------------------
+ 1 string No *empty* This value to catenate to the given variable.
+
+
+ <?php
+
+ $smarty->assign('articleTitle', "Psychics predict world didn't end");
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle|cat:' yesterday.'}
+
+
+
+Will output:
+
+
+ Psychics predict world didn't end yesterday.
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-characters.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-characters.md
new file mode 100644
index 000000000..23bc00d51
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-characters.md
@@ -0,0 +1,39 @@
+count\_characters {#language.modifier.count.characters}
+=================
+
+This is used to count the number of characters in a variable.
+
+ Parameter Position Type Required Default Description
+ -------------------- --------- ---------- --------- -------------------------------------------------------------------------------
+ 1 boolean No FALSE This determines whether or not to include whitespace characters in the count.
+
+
+ <?php
+
+ $smarty->assign('articleTitle', 'Cold Wave Linked to Temperatures.');
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|count_characters}
+ {$articleTitle|count_characters:true}
+
+
+
+Will output:
+
+
+ Cold Wave Linked to Temperatures.
+ 29
+ 33
+
+
+
+See also [`count_words`](#language.modifier.count.words),
+[`count_sentences`](#language.modifier.count.sentences) and
+[`count_paragraphs`](#language.modifier.count.paragraphs).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-paragraphs.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-paragraphs.md
new file mode 100644
index 000000000..02c474e6b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-paragraphs.md
@@ -0,0 +1,38 @@
+count\_paragraphs {#language.modifier.count.paragraphs}
+=================
+
+This is used to count the number of paragraphs in a variable.
+
+
+ <?php
+
+ $smarty->assign('articleTitle',
+ "War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.\n\n
+ Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation."
+ );
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|count_paragraphs}
+
+
+
+Will output:
+
+
+ War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.
+
+ Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation.
+ 2
+
+
+
+See also [`count_characters`](#language.modifier.count.characters),
+[`count_sentences`](#language.modifier.count.sentences) and
+[`count_words`](#language.modifier.count.words).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-sentences.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-sentences.md
new file mode 100644
index 000000000..0a77ab82a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-sentences.md
@@ -0,0 +1,37 @@
+count\_sentences {#language.modifier.count.sentences}
+================
+
+This is used to count the number of sentences in a variable. A sentence
+being delimited by a dot, question- or exclamation-mark (.?!).
+
+
+ <?php
+
+ $smarty->assign('articleTitle',
+ 'Two Soviet Ships Collide - One Dies.
+ Enraged Cow Injures Farmer with Axe.'
+ );
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|count_sentences}
+
+
+
+Will output:
+
+
+ Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe.
+ 2
+
+
+
+See also [`count_characters`](#language.modifier.count.characters),
+[`count_paragraphs`](#language.modifier.count.paragraphs) and
+[`count_words`](#language.modifier.count.words).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-words.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-words.md
new file mode 100644
index 000000000..d25fbd5b8
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-count-words.md
@@ -0,0 +1,33 @@
+count\_words {#language.modifier.count.words}
+============
+
+This is used to count the number of words in a variable.
+
+
+ <?php
+
+ $smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|count_words}
+
+
+
+This will output:
+
+
+ Dealers Will Hear Car Talk at Noon.
+ 7
+
+
+
+See also [`count_characters`](#language.modifier.count.characters),
+[`count_paragraphs`](#language.modifier.count.paragraphs) and
+[`count_sentences`](#language.modifier.count.sentences).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-date-format.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-date-format.md
new file mode 100644
index 000000000..edd81937b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-date-format.md
@@ -0,0 +1,175 @@
+date\_format {#language.modifier.date.format}
+============
+
+This formats a date and time into the given
+[`strftime()`](&url.php-manual;strftime) format. Dates can be passed to
+Smarty as unix [timestamps](&url.php-manual;function.time), [DateTime
+objects](&url.php-manual;class.DateTime), mysql timestamps or any string
+made up of month day year, parsable by php\'s
+[`strtotime()`](&url.php-manual;strtotime). Designers can then use
+`date_format` to have complete control of the formatting of the date. If
+the date passed to `date_format` is empty and a second parameter is
+passed, that will be used as the date to format.
+
+ Parameter Position Type Required Default Description
+ -------------------- -------- ---------- ------------ -------------------------------------------------
+ 1 string No \%b %e, %Y This is the format for the outputted date.
+ 2 string No n/a This is the default date if the input is empty.
+
+> **Note**
+>
+> Since Smarty-2.6.10 numeric values passed to `date_format` are
+> *always* (except for mysql timestamps, see below) interpreted as a
+> unix timestamp.
+>
+> Before Smarty-2.6.10 numeric strings that where also parsable by
+> `strtotime()` in php (like `YYYYMMDD`) where sometimes (depending on
+> the underlying implementation of `strtotime()`) interpreted as date
+> strings and NOT as timestamps.
+>
+> The only exception are mysql timestamps: They are also numeric only
+> and 14 characters long (`YYYYMMDDHHMMSS`), mysql timestamps have
+> precedence over unix timestamps.
+
+> **Note**
+>
+> `date_format` is essentially a wrapper to PHP\'s
+> [`strftime()`](&url.php-manual;strftime) function. You may have more
+> or less conversion specifiers available depending on your system\'s
+> [`strftime()`](&url.php-manual;strftime) function where PHP was
+> compiled. Check your system\'s manpage for a full list of valid
+> specifiers. However, a few of the specifiers are emulated on Windows.
+> These are: %D, %e, %h, %l, %n, %r, %R, %t, %T.
+
+
+ <?php
+
+ $config['date'] = '%I:%M %p';
+ $config['time'] = '%H:%M:%S';
+ $smarty->assign('config', $config);
+ $smarty->assign('yesterday', strtotime('-1 day'));
+
+ ?>
+
+
+
+This template uses [`$smarty.now`](#language.variables.smarty.now) to
+get the current time:
+
+
+ {$smarty.now|date_format}
+ {$smarty.now|date_format:"%D"}
+ {$smarty.now|date_format:$config.date}
+ {$yesterday|date_format}
+ {$yesterday|date_format:"%A, %B %e, %Y"}
+ {$yesterday|date_format:$config.time}
+
+
+
+This above will output:
+
+
+ Jan 1, 2022
+ 01/01/22
+ 02:33 pm
+ Dec 31, 2021
+ Monday, December 1, 2021
+ 14:33:00
+
+
+
+`date_format` conversion specifiers:
+
+- \%a - abbreviated weekday name according to the current locale
+
+- \%A - full weekday name according to the current locale
+
+- \%b - abbreviated month name according to the current locale
+
+- \%B - full month name according to the current locale
+
+- \%c - preferred date and time representation for the current locale
+
+- \%C - century number (the year divided by 100 and truncated to an
+ integer, range 00 to 99)
+
+- \%d - day of the month as a decimal number (range 01 to 31)
+
+- \%D - same as %m/%d/%y
+
+- \%e - day of the month as a decimal number, a single digit is
+ preceded by a space (range 1 to 31)
+
+- \%g - Week-based year within century \[00,99\]
+
+- \%G - Week-based year, including the century \[0000,9999\]
+
+- \%h - same as %b
+
+- \%H - hour as a decimal number using a 24-hour clock (range 00
+ to 23)
+
+- \%I - hour as a decimal number using a 12-hour clock (range 01
+ to 12)
+
+- \%j - day of the year as a decimal number (range 001 to 366)
+
+- \%k - Hour (24-hour clock) single digits are preceded by a blank.
+ (range 0 to 23)
+
+- \%l - hour as a decimal number using a 12-hour clock, single digits
+ preceded by a space (range 1 to 12)
+
+- \%m - month as a decimal number (range 01 to 12)
+
+- \%M - minute as a decimal number
+
+- \%n - newline character
+
+- \%p - either \`am\' or \`pm\' according to the given time value, or
+ the corresponding strings for the current locale
+
+- \%r - time in a.m. and p.m. notation
+
+- \%R - time in 24 hour notation
+
+- \%S - second as a decimal number
+
+- \%t - tab character
+
+- \%T - current time, equal to %H:%M:%S
+
+- \%u - weekday as a decimal number \[1,7\], with 1 representing
+ Monday
+
+- \%U - week number of the current year as a decimal number, starting
+ with the first Sunday as the first day of the first week
+
+- \%V - The ISO 8601:1988 week number of the current year as a decimal
+ number, range 01 to 53, where week 1 is the first week that has at
+ least 4 days in the current year, and with Monday as the first day
+ of the week.
+
+- \%w - day of the week as a decimal, Sunday being 0
+
+- \%W - week number of the current year as a decimal number, starting
+ with the first Monday as the first day of the first week
+
+- \%x - preferred date representation for the current locale without
+ the time
+
+- \%X - preferred time representation for the current locale without
+ the date
+
+- \%y - year as a decimal number without a century (range 00 to 99)
+
+- \%Y - year as a decimal number including the century
+
+- \%Z - time zone or name or abbreviation
+
+- \%% - a literal \`%\' character
+
+See also [`$smarty.now`](#language.variables.smarty.now),
+[`strftime()`](&url.php-manual;strftime),
+[`{html_select_date}`](#language.function.html.select.date) and the
+[date tips](#tips.dates) page.
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-default.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-default.md
new file mode 100644
index 000000000..ce08e96ef
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-default.md
@@ -0,0 +1,41 @@
+default {#language.modifier.default}
+=======
+
+This is used to set a default value for a variable. If the variable is
+unset or an empty string, the given default value is printed instead.
+Default takes the one argument.
+
+ Parameter Position Type Required Default Description
+ -------------------- -------- ---------- --------- ---------------------------------------------------------------
+ 1 string No *empty* This is the default value to output if the variable is empty.
+
+
+ <?php
+
+ $smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');
+ $smarty->assign('email', '');
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle|default:'no title'}
+ {$myTitle|default:'no title'}
+ {$email|default:'No email address available'}
+
+
+
+Will output:
+
+
+ Dealers Will Hear Car Talk at Noon.
+ no title
+ No email address available
+
+
+
+See also the [default variable handling](#tips.default.var.handling) and
+the [blank variable handling](#tips.blank.var.handling) pages.
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md
new file mode 100644
index 000000000..37c71dde9
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-escape.md
@@ -0,0 +1,74 @@
+escape {#language.modifier.escape}
+======
+
+`escape` is used to encode or escape a variable to `html`, `url`,
+`single quotes`, `hex`, `hexentity`, `javascript` and `mail`. By default
+its `html`.
+
+ Parameter Position Type Required Possible Values Default Description
+ -------------------- --------- ---------- ------------------------------------------------------------------------------------------------------------ --------- -------------------------------------------------------------------------------------
+ 1 string No `html`, `htmlall`, `url`, `urlpathinfo`, `quotes`, `hex`, `hexentity`, `javascript`, `mail` `html` This is the escape format to use.
+ 2 string No `ISO-8859-1`, `UTF-8`, and any character set supported by [`htmlentities()`](&url.php-manual;htmlentities) `UTF-8` The character set encoding passed to htmlentities() et. al.
+ 3 boolean No FALSE TRUE Double encode entites from &amp; to &amp;amp; (applys to `html` and `htmlall` only)
+
+
+ <?php
+
+ $smarty->assign('articleTitle',
+ "'Stiff Opposition Expected to Casketless Funeral Plan'"
+ );
+ $smarty->assign('EmailAddress','smarty@example.com');
+
+ ?>
+
+
+
+These are example `escape` template lines followed by the output
+
+
+ {$articleTitle}
+ 'Stiff Opposition Expected to Casketless Funeral Plan'
+
+ {$articleTitle|escape}
+ &#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;
+
+ {$articleTitle|escape:'html'} {* escapes & " ' < > *}
+ &#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;
+
+ {$articleTitle|escape:'htmlall'} {* escapes ALL html entities *}
+ &#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;
+
+ <a href="?title={$articleTitle|escape:'url'}">click here</a>
+ <a
+ href="?title=%27Stiff%20Opposition%20Expected%20to%20Casketless%20Funeral%20Plan%27">click here</a>
+
+ {$articleTitle|escape:'quotes'}
+ \'Stiff Opposition Expected to Casketless Funeral Plan\'
+
+ <a href="mailto:{$EmailAddress|escape:"hex"}">{$EmailAddress|escape:"hexentity"}</a>
+ {$EmailAddress|escape:'mail'} {* this converts to email to text *}
+ <a href="mailto:%62%6f%..snip..%65%74">&#x62;&#x6f;&#x62..snip..&#x65;&#x74;</a>
+
+ {'mail@example.com'|escape:'mail'}
+ smarty [AT] example [DOT] com
+
+
+
+
+ {* the "rewind" parameter registers the current location *}
+ <a href="$my_path?page=foo&rewind=$my_uri|urlencode}">click here</a>
+
+
+
+This snippet is useful for emails, but see also
+[`{mailto}`](#language.function.mailto)
+
+
+ {* email address mangled *}
+ <a href="mailto:{$EmailAddress|escape:'hex'}">{$EmailAddress|escape:'mail'}</a>
+
+
+
+See also [escaping smarty parsing](#language.escaping),
+[`{mailto}`](#language.function.mailto) and the [obfuscating email
+addresses](#tips.obfuscating.email) page.
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md
new file mode 100644
index 000000000..1c301c3b1
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-from-charset.md
@@ -0,0 +1,19 @@
+from\_charset {#language.modifier.from_charset}
+=============
+
+`from_charset` is used to transcode a string from a given charset to the
+internal charset. This is the exact opposite of the [to\_charset
+modifier](#language.modifier.to_charset).
+
+ Parameter Position Type Required Possible Values Default Description
+ -------------------- -------- ---------- -------------------------------------------------------------------------------------------------------------------------- -------------- ---------------------------------------------------------------
+ 1 string No `ISO-8859-1`, `UTF-8`, and any character set supported by [`mb_convert_encoding()`](&url.php-manual;mb_convert_encoding) `ISO-8859-1` The charset encoding the value is supposed to be decoded from
+
+> **Note**
+>
+> Charset encoding should be handled by the application itself. This
+> modifier should only be used in cases where the application cannot
+> anticipate that a certain string is required in another encoding.
+
+See also [Charset Encoding](#charset), [from\_charset
+modifier](#language.modifier.from_charset).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-indent.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-indent.md
new file mode 100644
index 000000000..d0264dca3
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-indent.md
@@ -0,0 +1,62 @@
+indent {#language.modifier.indent}
+======
+
+This indents a string on each line, default is 4. As an optional
+parameter, you can specify the number of characters to indent. As an
+optional second parameter, you can specify the character to use to
+indent with eg use `"\t"` for a tab.
+
+ Parameter Position Type Required Default Description
+ -------------------- --------- ---------- ------------- ---------------------------------------------------
+ 1 integer No 4 This determines how many characters to indent to.
+ 2 string No (one space) This is the character used to indent with.
+
+
+ <?php
+
+ $smarty->assign('articleTitle',
+ 'NJ judge to rule on nude beach.
+ Sun or rain expected today, dark tonight.
+ Statistics show that teen pregnancy drops off significantly after 25.'
+ );
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+
+ {$articleTitle|indent}
+
+ {$articleTitle|indent:10}
+
+ {$articleTitle|indent:1:"\t"}
+
+
+
+Will output:
+
+
+ NJ judge to rule on nude beach.
+ Sun or rain expected today, dark tonight.
+ Statistics show that teen pregnancy drops off significantly after 25.
+
+ NJ judge to rule on nude beach.
+ Sun or rain expected today, dark tonight.
+ Statistics show that teen pregnancy drops off significantly after 25.
+
+ NJ judge to rule on nude beach.
+ Sun or rain expected today, dark tonight.
+ Statistics show that teen pregnancy drops off significantly after 25.
+
+ NJ judge to rule on nude beach.
+ Sun or rain expected today, dark tonight.
+ Statistics show that teen pregnancy drops off significantly after 25.
+
+
+
+See also [`strip`](#language.modifier.strip),
+[`wordwrap`](#language.modifier.wordwrap) and
+[`spacify`](#language.modifier.spacify).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-lower.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-lower.md
new file mode 100644
index 000000000..90122e9e4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-lower.md
@@ -0,0 +1,33 @@
+lower {#language.modifier.lower}
+=====
+
+This is used to lowercase a variable. This is equivalent to the PHP
+[`strtolower()`](&url.php-manual;strtolower) function.
+
+
+ <?php
+
+ $smarty->assign('articleTitle', 'Two Convicts Evade Noose, Jury Hung.');
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|lower}
+
+
+
+This will output:
+
+
+ Two Convicts Evade Noose, Jury Hung.
+ two convicts evade noose, jury hung.
+
+
+
+See also [`upper`](#language.modifier.upper) and
+[`capitalize`](#language.modifier.capitalize).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-nl2br.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-nl2br.md
new file mode 100644
index 000000000..541233c8b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-nl2br.md
@@ -0,0 +1,35 @@
+nl2br {#language.modifier.nl2br}
+=====
+
+All `"\n"` line breaks will be converted to html `<br />` tags in the
+given variable. This is equivalent to the PHP\'s
+[`nl2br()`](&url.php-manual;nl2br) function.
+
+
+ <?php
+
+ $smarty->assign('articleTitle',
+ "Sun or rain expected\ntoday, dark tonight"
+ );
+
+ ?>
+
+
+
+Where the template is:
+
+
+ {$articleTitle|nl2br}
+
+
+
+Will output:
+
+
+ Sun or rain expected<br />today, dark tonight
+
+
+
+See also [`word_wrap`](#language.modifier.wordwrap),
+[`count_paragraphs`](#language.modifier.count.paragraphs) and
+[`count_sentences`](#language.modifier.count.sentences).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-regex-replace.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-regex-replace.md
new file mode 100644
index 000000000..6fcb33fad
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-regex-replace.md
@@ -0,0 +1,51 @@
+regex\_replace {#language.modifier.regex.replace}
+==============
+
+A regular expression search and replace on a variable. Use the
+[`preg_replace()`](&url.php-manual;preg_replace) syntax from the PHP
+manual.
+
+> **Note**
+>
+> Although Smarty supplies this regex convenience modifier, it is
+> usually better to apply regular expressions in PHP, either via custom
+> functions or modifiers. Regular expressions are considered application
+> code and are not part of presentation logic.
+
+Parameters
+
+ Parameter Position Type Required Default Description
+ -------------------- -------- ---------- --------- ------------------------------------------------
+ 1 string Yes *n/a* This is the regular expression to be replaced.
+ 2 string Yes *n/a* This is the string of text to replace with.
+
+
+ <?php
+
+ $smarty->assign('articleTitle', "Infertility unlikely to\nbe passed on, experts say.");
+
+ ?>
+
+
+
+Where template is:
+
+
+ {* replace each carriage return, tab and new line with a space *}
+
+ {$articleTitle}
+ {$articleTitle|regex_replace:"/[\r\t\n]/":" "}
+
+
+
+Will output:
+
+
+ Infertility unlikely to
+ be passed on, experts say.
+ Infertility unlikely to be passed on, experts say.
+
+
+
+See also [`replace`](#language.modifier.replace) and
+[`escape`](#language.modifier.escape).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-replace.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-replace.md
new file mode 100644
index 000000000..c7c2903ea
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-replace.md
@@ -0,0 +1,40 @@
+replace {#language.modifier.replace}
+=======
+
+A simple search and replace on a variable. This is equivalent to the
+PHP\'s [`str_replace()`](&url.php-manual;str_replace) function.
+
+ Parameter Position Type Required Default Description
+ -------------------- -------- ---------- --------- ---------------------------------------------
+ 1 string Yes *n/a* This is the string of text to be replaced.
+ 2 string Yes *n/a* This is the string of text to replace with.
+
+
+ <?php
+
+ $smarty->assign('articleTitle', "Child's Stool Great for Use in Garden.");
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|replace:'Garden':'Vineyard'}
+ {$articleTitle|replace:' ':' '}
+
+
+
+Will output:
+
+
+ Child's Stool Great for Use in Garden.
+ Child's Stool Great for Use in Vineyard.
+ Child's Stool Great for Use in Garden.
+
+
+
+See also [`regex_replace`](#language.modifier.regex.replace) and
+[`escape`](#language.modifier.escape).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-spacify.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-spacify.md
new file mode 100644
index 000000000..8856dab43
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-spacify.md
@@ -0,0 +1,40 @@
+spacify {#language.modifier.spacify}
+=======
+
+`spacify` is a way to insert a space between every character of a
+variable. You can optionally pass a different character or string to
+insert.
+
+ Parameter Position Type Required Default Description
+ -------------------- -------- ---------- ------------- -----------------------------------------------------------------
+ 1 string No *one space* This what gets inserted between each character of the variable.
+
+
+ <?php
+
+ $smarty->assign('articleTitle', 'Something Went Wrong in Jet Crash, Experts Say.');
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|spacify}
+ {$articleTitle|spacify:"^^"}
+
+
+
+Will output:
+
+
+ Something Went Wrong in Jet Crash, Experts Say.
+ S o m e t h i n g W .... snip .... s h , E x p e r t s S a y .
+ S^^o^^m^^e^^t^^h^^i^^n^^g^^ .... snip .... ^^e^^r^^t^^s^^ ^^S^^a^^y^^.
+
+
+
+See also [`wordwrap`](#language.modifier.wordwrap) and
+[`nl2br`](#language.modifier.nl2br).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-string-format.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-string-format.md
new file mode 100644
index 000000000..754014e2d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-string-format.md
@@ -0,0 +1,39 @@
+string\_format {#language.modifier.string.format}
+==============
+
+This is a way to format strings, such as decimal numbers and such. Use
+the syntax for [`sprintf()`](&url.php-manual;sprintf) for the
+formatting.
+
+ Parameter Position Type Required Default Description
+ -------------------- -------- ---------- --------- ---------------------------------------
+ 1 string Yes *n/a* This is what format to use. (sprintf)
+
+
+ <?php
+
+ $smarty->assign('number', 23.5787446);
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$number}
+ {$number|string_format:"%.2f"}
+ {$number|string_format:"%d"}
+
+
+
+Will output:
+
+
+ 23.5787446
+ 23.58
+ 23
+
+
+
+See also [`date_format`](#language.modifier.date.format).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip-tags.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip-tags.md
new file mode 100644
index 000000000..4a019767b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip-tags.md
@@ -0,0 +1,41 @@
+strip\_tags {#language.modifier.strip.tags}
+===========
+
+This strips out markup tags, basically anything between `<` and `>`.
+
+ Parameter Position Type Required Default Description
+ -------------------- ------ ---------- --------- ----------------------------------------------------------------
+ 1 bool No TRUE This determines whether the tags are replaced by \' \' or \'\'
+
+
+ <?php
+
+ $smarty->assign('articleTitle',
+ "Blind Woman Gets <font face=\"helvetica\">New
+ Kidney</font> from Dad she Hasn't Seen in <b>years</b>."
+ );
+
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|strip_tags} {* same as {$articleTitle|strip_tags:true} *}
+ {$articleTitle|strip_tags:false}
+
+
+
+Will output:
+
+
+ Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.
+ Blind Woman Gets New Kidney from Dad she Hasn't Seen in years .
+ Blind Woman Gets New Kidney from Dad she Hasn't Seen in years.
+
+
+
+See also [`replace`](#language.modifier.replace) and
+[`regex_replace`](#language.modifier.regex.replace).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip.md
new file mode 100644
index 000000000..7027e0313
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-strip.md
@@ -0,0 +1,40 @@
+strip {#language.modifier.strip}
+=====
+
+This replaces all spaces, newlines and tabs with a single space, or with
+the supplied string.
+
+> **Note**
+>
+> If you want to strip blocks of template text, use the built-in
+> [`{strip}`](#language.function.strip) function.
+
+
+ <?php
+ $smarty->assign('articleTitle', "Grandmother of\neight makes\t hole in one.");
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|strip}
+ {$articleTitle|strip:'&nbsp;'}
+
+
+
+Will output:
+
+
+ Grandmother of
+ eight makes hole in one.
+ Grandmother of eight makes hole in one.
+ Grandmother&nbsp;of&nbsp;eight&nbsp;makes&nbsp;hole&nbsp;in&nbsp;one.
+
+
+
+See also [`{strip}`](#language.function.strip) and
+[`truncate`](#language.modifier.truncate).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md
new file mode 100644
index 000000000..a0d95f53f
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-to-charset.md
@@ -0,0 +1,19 @@
+to\_charset {#language.modifier.to_charset}
+===========
+
+`to_charset` is used to transcode a string from the internal charset to
+a given charset. This is the exact opposite of the [from\_charset
+modifier](#language.modifier.from_charset).
+
+ Parameter Position Type Required Possible Values Default Description
+ -------------------- -------- ---------- -------------------------------------------------------------------------------------------------------------------------- -------------- -------------------------------------------------------------
+ 1 string No `ISO-8859-1`, `UTF-8`, and any character set supported by [`mb_convert_encoding()`](&url.php-manual;mb_convert_encoding) `ISO-8859-1` The charset encoding the value is supposed to be encoded to
+
+> **Note**
+>
+> Charset encoding should be handled by the application itself. This
+> modifier should only be used in cases where the application cannot
+> anticipate that a certain string is required in another encoding.
+
+See also [Charset Encoding](#charset), [from\_charset
+modifier](#language.modifier.from_charset).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-truncate.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-truncate.md
new file mode 100644
index 000000000..2303a5432
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-truncate.md
@@ -0,0 +1,52 @@
+truncate {#language.modifier.truncate}
+========
+
+This truncates a variable to a character length, the default is 80. As
+an optional second parameter, you can specify a string of text to
+display at the end if the variable was truncated. The characters in the
+string are included with the original truncation length. By default,
+`truncate` will attempt to cut off at a word boundary. If you want to
+cut off at the exact character length, pass the optional third parameter
+of TRUE.
+
+ Parameter Position Type Required Default Description
+ -------------------- --------- ---------- --------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ 1 integer No 80 This determines how many characters to truncate to.
+ 2 string No \... This is a text string that replaces the truncated text. Its length is included in the truncation length setting.
+ 3 boolean No FALSE This determines whether or not to truncate at a word boundary with FALSE, or at the exact character with TRUE.
+ 4 boolean No FALSE This determines whether the truncation happens at the end of the string with FALSE, or in the middle of the string with TRUE. Note that if this setting is TRUE, then word boundaries are ignored.
+
+
+ <?php
+ $smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
+ ?>
+
+
+
+where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|truncate}
+ {$articleTitle|truncate:30}
+ {$articleTitle|truncate:30:""}
+ {$articleTitle|truncate:30:"---"}
+ {$articleTitle|truncate:30:"":true}
+ {$articleTitle|truncate:30:"...":true}
+ {$articleTitle|truncate:30:'..':true:true}
+
+
+
+This will output:
+
+
+ Two Sisters Reunite after Eighteen Years at Checkout Counter.
+ Two Sisters Reunite after Eighteen Years at Checkout Counter.
+ Two Sisters Reunite after...
+ Two Sisters Reunite after
+ Two Sisters Reunite after---
+ Two Sisters Reunite after Eigh
+ Two Sisters Reunite after E...
+ Two Sisters Re..ckout Counter.
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-unescape.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-unescape.md
new file mode 100644
index 000000000..58d0b3f75
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-unescape.md
@@ -0,0 +1,39 @@
+unescape {#language.modifier.unescape}
+========
+
+`unescape` is used to decode `entity`, `html` and `htmlall`. It counters
+the effects of the [escape modifier](#language.modifier.escape) for the
+given types.
+
+ Parameter Position Type Required Possible Values Default Description
+ -------------------- -------- ---------- ------------------------------------------------------------------------------------------------------------ --------- ------------------------------------------------------------------------------------------------------------------------------
+ 1 string No `html`, `htmlall`, `entity`, `html` This is the escape format to use.
+ 2 string No `ISO-8859-1`, `UTF-8`, and any character set supported by [`htmlentities()`](&url.php-manual;htmlentities) `UTF-8` The character set encoding passed to html\_entity\_decode() or htmlspecialchars\_decode() or mb\_convert\_encoding() et. al.
+
+
+ <?php
+
+ $smarty->assign('articleTitle',
+ "Germans use &quot;&Uuml;mlauts&quot; and pay in &euro;uro"
+ );
+
+ ?>
+
+
+
+These are example `unescape` template lines followed by the output
+
+
+ {$articleTitle}
+ Germans use &quot;&Uuml;mlauts&quot; and pay in &euro;uro
+
+ {$articleTitle|unescape:"html"}
+ Germans use "&Uuml;mlauts" and pay in &euro;uro
+
+ {$articleTitle|unescape:"htmlall"}
+ Germans use "Ümlauts" and pay in €uro
+
+
+
+See also [escaping smarty parsing](#language.escaping), [escape
+modifier](#language.modifier.escape).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md
new file mode 100644
index 000000000..9240f42d6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-upper.md
@@ -0,0 +1,31 @@
+upper {#language.modifier.upper}
+=====
+
+This is used to uppercase a variable. This is equivalent to the PHP
+[`strtoupper()`](&url.php-manual;strtoupper) function.
+
+
+ <?php
+ $smarty->assign('articleTitle', "If Strike isn't Settled Quickly it may Last a While.");
+ ?>
+
+
+
+Where template is:
+
+
+ {$articleTitle}
+ {$articleTitle|upper}
+
+
+
+Will output:
+
+
+ If Strike isn't Settled Quickly it may Last a While.
+ IF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE.
+
+
+
+See also [`lower`](#language.modifier.lower) and
+[`capitalize`](#language.modifier.capitalize).
diff --git a/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-wordwrap.md b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-wordwrap.md
new file mode 100644
index 000000000..97cd774f7
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-modifiers/language-modifier-wordwrap.md
@@ -0,0 +1,69 @@
+wordwrap {#language.modifier.wordwrap}
+========
+
+Wraps a string to a column width, the default is 80. As an optional
+second parameter, you can specify a string of text to wrap the text to
+the next line, the default is a carriage return `"\n"`. By default,
+`wordwrap` will attempt to wrap at a word boundary. If you want to cut
+off at the exact character length, pass the optional third parameter as
+TRUE. This is equivalent to the PHP
+[`wordwrap()`](&url.php-manual;wordwrap) function.
+
+ Parameter Position Type Required Default Description
+ -------------------- --------- ---------- --------- ------------------------------------------------------------------------------------------------------
+ 1 integer No 80 This determines how many columns to wrap to.
+ 2 string No \\n This is the string used to wrap words with.
+ 3 boolean No FALSE This determines whether or not to wrap at a word boundary (FALSE), or at the exact character (TRUE).
+
+
+ <?php
+
+ $smarty->assign('articleTitle',
+ "Blind woman gets new kidney from dad she hasn't seen in years."
+ );
+
+ ?>
+
+
+
+Where template is
+
+
+ {$articleTitle}
+
+ {$articleTitle|wordwrap:30}
+
+ {$articleTitle|wordwrap:20}
+
+ {$articleTitle|wordwrap:30:"<br />\n"}
+
+ {$articleTitle|wordwrap:26:"\n":true}
+
+
+
+Will output:
+
+
+ Blind woman gets new kidney from dad she hasn't seen in years.
+
+ Blind woman gets new kidney
+ from dad she hasn't seen in
+ years.
+
+ Blind woman gets new
+ kidney from dad she
+ hasn't seen in
+ years.
+
+ Blind woman gets new kidney<br />
+ from dad she hasn't seen in<br />
+ years.
+
+ Blind woman gets new kidn
+ ey from dad she hasn't se
+ en in years.
+
+
+
+See also [`nl2br`](#language.modifier.nl2br) and
+[`{textformat}`](#language.function.textformat).
diff --git a/vendor/smarty/smarty/docs/designers/language-variables.md b/vendor/smarty/smarty/docs/designers/language-variables.md
new file mode 100644
index 000000000..3950d0baf
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-variables.md
@@ -0,0 +1,37 @@
+Variables
+=========
+
+## Table of contents
+- [Variables assigned from PHP](./language-variables/language-assigned-variables.md)
+- [Variable scopes](./language-variables/language-variable-scopes.md)
+- [Variables loaded from config files](./language-variables/language-config-variables.md)
+- [{$smarty} reserved variable](./language-variables/language-variables-smarty.md)
+
+
+Smarty has several different types of variables. The type of the
+variable depends on what symbol it is prefixed or enclosed within.
+
+Variables in Smarty can be either displayed directly or used as
+arguments for [functions](./language-basic-syntax/language-syntax-functions.md),
+[attributes](./language-basic-syntax/language-syntax-attributes.md) and
+[modifiers](./language-modifiers.md), inside conditional expressions, etc.
+To print a variable, simply enclose it in the
+[delimiters](../programmers/api-variables/variable-left-delimiter.md) so that it is the only thing
+contained between them.
+
+
+ {$Name}
+
+ {$product.part_no} <b>{$product.description}</b>
+
+ {$Contacts[row].Phone}
+
+ <body bgcolor="{#bgcolor#}">
+
+
+
+> **Note**
+>
+> An easy way to examine assigned Smarty variables is with the
+> [debugging console](./chapter-debugging-console.md).
+
diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md b/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md
new file mode 100644
index 000000000..005dea4a9
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-variables/language-assigned-variables.md
@@ -0,0 +1,142 @@
+Variables assigned from PHP {#language.assigned.variables}
+===========================
+
+Assigned variables that are referenced by preceding them with a dollar
+(`$`) sign.
+
+PHP code
+
+
+ <?php
+
+ $smarty = new Smarty();
+
+ $smarty->assign('firstname', 'Doug');
+ $smarty->assign('lastname', 'Evans');
+ $smarty->assign('meetingPlace', 'New York');
+
+ $smarty->display('index.tpl');
+
+ ?>
+
+`index.tpl` source:
+
+
+ Hello {$firstname} {$lastname}, glad to see you can make it.
+ <br />
+ {* this will not work as $variables are case sensitive *}
+ This weeks meeting is in {$meetingplace}.
+ {* this will work *}
+ This weeks meeting is in {$meetingPlace}.
+
+
+
+This above would output:
+
+
+ Hello Doug Evans, glad to see you can make it.
+ <br />
+ This weeks meeting is in .
+ This weeks meeting is in New York.
+
+
+
+Associative arrays {#language.variables.assoc.arrays}
+------------------
+
+You can also reference associative array variables by specifying the key
+after a dot \".\" symbol.
+
+
+ <?php
+ $smarty->assign('Contacts',
+ array('fax' => '555-222-9876',
+ 'email' => 'zaphod@slartibartfast.example.com',
+ 'phone' => array('home' => '555-444-3333',
+ 'cell' => '555-111-1234')
+ )
+ );
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+`index.tpl` source:
+
+
+ {$Contacts.fax}<br />
+ {$Contacts.email}<br />
+ {* you can print arrays of arrays as well *}
+ {$Contacts.phone.home}<br />
+ {$Contacts.phone.cell}<br />
+
+
+
+this will output:
+
+
+ 555-222-9876<br />
+ zaphod@slartibartfast.example.com<br />
+ 555-444-3333<br />
+ 555-111-1234<br />
+
+
+
+Array indexes {#language.variables.array.indexes}
+-------------
+
+You can reference arrays by their index, much like native PHP syntax.
+
+
+ <?php
+ $smarty->assign('Contacts', array(
+ '555-222-9876',
+ 'zaphod@slartibartfast.example.com',
+ array('555-444-3333',
+ '555-111-1234')
+ ));
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+`index.tpl` source:
+
+
+ {$Contacts[0]}<br />
+ {$Contacts[1]}<br />
+ {* you can print arrays of arrays as well *}
+ {$Contacts[2][0]}<br />
+ {$Contacts[2][1]}<br />
+
+
+
+This will output:
+
+
+ 555-222-9876<br />
+ zaphod@slartibartfast.example.com<br />
+ 555-444-3333<br />
+ 555-111-1234<br />
+
+
+
+Objects {#language.variables.objects}
+-------
+
+Properties of [objects](#advanced.features.objects) assigned from PHP
+can be referenced by specifying the property name after the `->` symbol.
+
+
+ name: {$person->name}<br />
+ email: {$person->email}<br />
+
+
+
+this will output:
+
+
+ name: Zaphod Beeblebrox<br />
+ email: zaphod@slartibartfast.example.com<br />
+
+
diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-config-variables.md b/vendor/smarty/smarty/docs/designers/language-variables/language-config-variables.md
new file mode 100644
index 000000000..a3683d99b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-variables/language-config-variables.md
@@ -0,0 +1,83 @@
+Variables loaded from config files {#language.config.variables}
+==================================
+
+Variables that are loaded from the [config files](#config.files) are
+referenced by enclosing them within `#hash_marks#`, or with the smarty
+variable [`$smarty.config`](#language.variables.smarty.config). The
+later syntax is useful for embedding into quoted attribute values, or
+accessing variable values such as \$smarty.config.\$foo.
+
+Example config file - `foo.conf`:
+
+
+ pageTitle = "This is mine"
+ bodyBgColor = '#eeeeee'
+ tableBorderSize = 3
+ tableBgColor = "#bbbbbb"
+ rowBgColor = "#cccccc"
+
+
+
+A template demonstrating the `#hash#` method:
+
+
+ {config_load file='foo.conf'}
+ <html>
+ <title>{#pageTitle#}</title>
+ <body bgcolor="{#bodyBgColor#}">
+ <table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
+ <tr bgcolor="{#rowBgColor#}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+ </tr>
+ </table>
+ </body>
+ </html>
+
+
+
+A template demonstrating the
+[`$smarty.config`](#language.variables.smarty.config) method:
+
+
+ {config_load file='foo.conf'}
+ <html>
+ <title>{$smarty.config.pageTitle}</title>
+ <body bgcolor="{$smarty.config.bodyBgColor}">
+ <table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}">
+ <tr bgcolor="{$smarty.config.rowBgColor}">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+ </tr>
+ </table>
+ </body>
+ </html>
+
+
+
+Both examples would output:
+
+
+ <html>
+ <title>This is mine</title>
+ <body bgcolor="#eeeeee">
+ <table border="3" bgcolor="#bbbbbb">
+ <tr bgcolor="#cccccc">
+ <td>First</td>
+ <td>Last</td>
+ <td>Address</td>
+ </tr>
+ </table>
+ </body>
+ </html>
+
+
+
+Config file variables cannot be used until after they are loaded in from
+a config file. This procedure is explained later in this document under
+[`{config_load}`](#language.function.config.load).
+
+See also [variables](#language.syntax.variables) and [\$smarty reserved
+variables](#language.variables.smarty)
diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-variable-scopes.md b/vendor/smarty/smarty/docs/designers/language-variables/language-variable-scopes.md
new file mode 100644
index 000000000..2ba3f026b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-variables/language-variable-scopes.md
@@ -0,0 +1,61 @@
+Variable scopes {#language.variable.scopes}
+===============
+
+You have the choice to assign variables to the scope of the main Smarty
+object, data objects created with [`createData()`](#api.create.data),
+and template objects created with
+[`createTemplate()`](#api.create.template). These objects can be
+chained. A template sees all the variables of its own object and all
+variables assigned to the objects in its chain of parent objects.
+
+By default templates which are rendered by
+[`$smarty->display(...)`](#api.display) or
+[`$smarty->fetch(...)`](#api.fetch) calls are automatically linked to
+the Smarty object variable scope.
+
+By assigning variables to individual data or template objects you have
+full control which variables can be seen by a template.
+
+
+
+ // assign variable to Smarty object scope
+ $smarty->assign('foo','smarty');
+
+ // assign variables to data object scope
+ $data = $smarty->createData();
+ $data->assign('foo','data');
+ $data->assign('bar','bar-data');
+
+ // assign variables to other data object scope
+ $data2 = $smarty->createData($data);
+ $data2->assign('bar','bar-data2');
+
+ // assign variable to template object scope
+ $tpl = $smarty->createTemplate('index.tpl');
+ $tpl->assign('bar','bar-template');
+
+ // assign variable to template object scope with link to Smarty object
+ $tpl2 = $smarty->createTemplate('index.tpl',$smarty);
+ $tpl2->assign('bar','bar-template2');
+
+ // This display() does see $foo='smarty' from the $smarty object
+ $smarty->display('index.tpl');
+
+ // This display() does see $foo='data' and $bar='bar-data' from the data object $data
+ $smarty->display('index.tpl',$data);
+
+ // This display() does see $foo='data' from the data object $data
+ // and $bar='bar-data2' from the data object $data2
+ $smarty->display('index.tpl',$data2);
+
+ // This display() does see $bar='bar-template' from the template object $tpl
+ $tpl->display(); // or $smarty->display($tpl);
+
+ // This display() does see $bar='bar-template2' from the template object $tpl2
+ // and $foo='smarty' form the Smarty object $foo
+ $tpl2->display(); // or $smarty->display($tpl2);
+
+
+
+See also [`assign()`](#api.assign), [`createData()`](#api.create.data)
+and [`createTemplate()`](#api.create.template).
diff --git a/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md b/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md
new file mode 100644
index 000000000..e2949e0e5
--- /dev/null
+++ b/vendor/smarty/smarty/docs/designers/language-variables/language-variables-smarty.md
@@ -0,0 +1,176 @@
+{\$smarty} reserved variable {#language.variables.smarty}
+============================
+
+The PHP reserved `{$smarty}` variable can be used to access several
+environment and request variables. The full list of them follows.
+
+Request variables {#language.variables.smarty.request}
+-----------------
+
+The [request variables](&url.php-manual;reserved.variables) such as
+`$_GET`, `$_POST`, `$_COOKIE`, `$_SERVER`, `$_ENV` and `$_SESSION` can
+be accessed as demonstrated in the examples below:
+
+
+ {* display value of page from URL ($_GET) http://www.example.com/index.php?page=foo *}
+ {$smarty.get.page}
+
+ {* display the variable "page" from a form ($_POST['page']) *}
+ {$smarty.post.page}
+
+ {* display the value of the cookie "username" ($_COOKIE['username']) *}
+ {$smarty.cookies.username}
+
+ {* display the server variable "SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
+ {$smarty.server.SERVER_NAME}
+
+ {* display the system environment variable "PATH" *}
+ {$smarty.env.PATH}
+
+ {* display the php session variable "id" ($_SESSION['id']) *}
+ {$smarty.session.id}
+
+ {* display the variable "username" from merged get/post/cookies/server/env *}
+ {$smarty.request.username}
+
+
+
+> **Note**
+>
+> For historical reasons `{$SCRIPT_NAME}` is short-hand for
+> `{$smarty.server.SCRIPT_NAME}`.
+>
+>
+> <a href="{$SCRIPT_NAME}?page=smarty">click me</a>
+> <a href="{$smarty.server.SCRIPT_NAME}?page=smarty">click me</a>
+
+> **Note**
+>
+> Although Smarty provides direct access to PHP super globals for
+> convenience, it should be used with caution. Directly accessing super
+> globals mixes underlying application code structure with templates. A
+> good practice is to assign specific needed values to template vars.
+
+{\$smarty.now} {#language.variables.smarty.now}
+--------------
+
+The current [timestamp](&url.php-manual;function.time) can be accessed
+with `{$smarty.now}`. The value reflects the number of seconds passed
+since the so-called Epoch on January 1, 1970, and can be passed directly
+to the [`date_format`](#language.modifier.date.format) modifier for
+display. Note that [`time()`](&url.php-manual;function.time) is called
+on each invocation; eg a script that takes three seconds to execute with
+a call to `$smarty.now` at start and end will show the three second
+difference.
+
+::: {.informalexample}
+
+ {* use the date_format modifier to show current date and time *}
+ {$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}
+
+
+:::
+
+{\$smarty.const} {#language.variables.smarty.const}
+----------------
+
+You can access PHP constant values directly. See also [smarty
+constants](#smarty.constants).
+
+::: {.informalexample}
+
+ <?php
+ // the constant defined in php
+ define('MY_CONST_VAL','CHERRIES');
+ ?>
+:::
+
+Output the constant in a template with
+
+::: {.informalexample}
+
+ {$smarty.const.MY_CONST_VAL}
+:::
+
+> **Note**
+>
+> Although Smarty provides direct access to PHP constants for
+> convenience, it is typically avoided as this is mixing underlying
+> application code structure into the templates. A good practice is to
+> assign specific needed values to template vars.
+
+{\$smarty.capture} {#language.variables.smarty.capture}
+------------------
+
+Template output captured via the built-in
+[`{capture}..{/capture}`](#language.function.capture) function can be
+accessed using the `{$smarty.capture}` variable. See the
+[`{capture}`](#language.function.capture) page for more information.
+
+{\$smarty.config} {#language.variables.smarty.config}
+-----------------
+
+`{$smarty.config}` variable can be used to refer to loaded [config
+variables](#language.config.variables). `{$smarty.config.foo}` is a
+synonym for `{#foo#}`. See the
+[{config\_load}](#language.function.config.load) page for more info.
+
+{\$smarty.section} {#language.variables.smarty.loops}
+------------------
+
+The `{$smarty.section}` variables can be used to refer to
+[`{section}`](#language.function.section) loop properties. These have
+some very useful values such as `.first`, `.index`, etc.
+
+> **Note**
+>
+> The `{$smarty.foreach}` variable is no longer used with the new
+> [`{foreach}`](#language.function.foreach) syntax, but is still
+> supported with Smarty 2.x style foreach syntax.
+
+{\$smarty.template} {#language.variables.smarty.template}
+-------------------
+
+Returns the name of the current template being processed (without the
+directory).
+
+{\$smarty.template\_object} {#language.variables.smarty.template_object}
+---------------------------
+
+Returns the template object of the current template being processed.
+
+{\$smarty.current\_dir} {#language.variables.smarty.current_dir}
+-----------------------
+
+Returns the name of the directory for the current template being
+processed.
+
+{\$smarty.version} {#language.variables.smarty.version}
+------------------
+
+Returns the version of Smarty the template was compiled with.
+
+
+ <div id="footer">Powered by Smarty {$smarty.version}</div>
+
+{\$smarty.block.child} {#language.variables.smarty.block.child}
+----------------------
+
+Returns block text from child template. See [Template
+inheritance](#advanced.features.template.inheritance).
+
+{\$smarty.block.parent} {#language.variables.smarty.block.parent}
+-----------------------
+
+Returns block text from parent template. See [Template
+inheritance](#advanced.features.template.inheritance)
+
+{\$smarty.ldelim}, {\$smarty.rdelim} {#language.variables.smarty.ldelim}
+------------------------------------
+
+These variables are used for printing the left-delimiter and
+right-delimiter value literally, the same as
+[`{ldelim},{rdelim}`](#language.function.ldelim).
+
+See also [assigned variables](#language.assigned.variables) and [config
+variables](#language.config.variables)
diff --git a/vendor/smarty/smarty/docs/features.md b/vendor/smarty/smarty/docs/features.md
new file mode 100644
index 000000000..8405b46eb
--- /dev/null
+++ b/vendor/smarty/smarty/docs/features.md
@@ -0,0 +1,152 @@
+Features
+=======
+
+Some of Smarty's features:
+- It is extremely fast.
+- It is efficient since the PHP parser does the dirty work.
+- No template parsing overhead, only compiles once.
+- It is smart about [recompiling](#variable.compile.check) only the
+ template files that have changed.
+- You can easily create your own custom
+ [functions](#language.custom.functions) and [variable
+ modifiers](#language.modifiers), so the template language is
+ extremely extensible.
+- Configurable template [{delimiter}](#variable.left.delimiter) tag
+ syntax, so you can use `{$foo}`, `{{$foo}}`, `<!--{$foo}-->`, etc.
+- The [`{if}..{elseif}..{else}..{/if}`](#language.function.if)
+ constructs are passed to the PHP parser, so the `{if...}` expression
+ syntax can be as simple or as complex an evaluation as you like.
+- Allows unlimited nesting of
+ [`sections`](#language.function.section), `if's` etc.
+- Built-in [caching](#caching) support
+- Arbitrary [template](#resources) sources
+- [Template Inheritance](#advanced.features.template.inheritance) for
+ easy management of template content.
+- [Plugin](#plugins) architecture
+
+## Separation of presentation from application code
+- This means templates can certainly contain logic under the condition
+ that it is for presentation only. Things such as
+ [including](./designers/language-builtin-functions/language-function-include.md) other templates,
+ [alternating](./designers/language-custom-functions/language-function-cycle.md) table row colors,
+ [upper-casing](./designers/language-modifiers/language-modifier-upper.md) a variable,
+ [looping](./designers/language-builtin-functions/language-function-foreach.md) over an array of data and
+ rendering it are examples of presentation logic.
+- This does not mean however that Smarty forces a separation of
+ business and presentation logic. Smarty has no knowledge of which is
+ which, so placing business logic in the template is your own doing.
+- Also, if you desire *no* logic in your templates you certainly can
+ do so by boiling the content down to text and variables only.
+
+## How does it work?
+
+Under the hood, Smarty "compiles" (basically copies and converts) the
+templates into PHP scripts. This happens once when each template is
+first invoked, and then the compiled versions are used from that point
+forward. Smarty takes care of this for you, so the template designer
+just edits the Smarty templates and never has to manage the compiled
+versions. This approach keeps the templates easy to maintain, and yet
+keeps execution times extremely fast since the compiled code is just
+PHP. And of course, all PHP scripts take advantage of PHP op-code caches
+such as APC.
+
+## Template Inheritance
+
+Template inheritance was introduced in Smarty 3. Before template
+inheritance, we managed our templates in
+pieces such as header and footer templates. This organization lends
+itself to many problems that require some hoop-jumping, such as managing
+content within the header/footer on a per-page basis. With template
+inheritance, instead of including other templates we maintain our
+templates as single pages. We can then manipulate blocks of content
+within by inheriting them. This makes templates intuitive, efficient and
+easy to manage. See
+[Template Inheritance](./programmers/advanced-features/advanced-features-template-inheritance.md)
+for more info.
+
+## Why not use XML/XSLT syntax?
+There are a couple of good reasons. First, Smarty can be used for more
+than just XML/HTML based templates, such as generating emails,
+javascript, CSV, and PDF documents. Second, XML/XSLT syntax is even more
+verbose and fragile than PHP code! It is perfect for computers, but
+horrible for humans. Smarty is about being easy to read, understand and
+maintain.
+
+## Template Security
+Although Smarty insulates you from PHP, you still have the option to use
+it in certain ways if you wish. Template security forces the restriction
+of PHP (and select Smarty functions.) This is useful if you have third
+parties editing templates, and you don't want to unleash the full power
+of PHP or Smarty to them.
+
+## Integration
+Sometimes Smarty gets compared to Model-View-Controller (MVC)
+frameworks. Smarty is not an MVC, it is just the presentation layer,
+much like the View (V) part of an MVC. As a matter of fact, Smarty can
+easily be integrated as the view layer of an MVC. Many of the more
+popular ones have integration instructions for Smarty, or you may find
+some help here in the forums and documentation.
+
+## Other Template Engines
+Smarty is not the only engine following the *"Separate Programming Code
+from Presentation"* philosophy. For instance, Python has template
+engines built around the same principles such as Django Templates and
+CheetahTemplate. *Note: Languages such as Python do not mix with HTML
+natively, which give them the advantage of proper programming code
+separation from the outset. There are libraries available to mix Python
+with HTML, but they are typically avoided.*
+
+## What Smarty is Not
+
+Smarty is not an application development framework. Smarty is not an
+MVC. Smarty is not an alternative to Laravel, Symfony, CodeIgniter,
+or any of the other application development frameworks for PHP.
+
+Smarty is a template engine, and works as the (V)iew component of your
+application. Smarty can easily be coupled to any of the engines listed
+above as the view component. No different than any other software,
+Smarty has a learning curve. Smarty does not guarantee good application
+design or proper separation of presentation, this still needs to be
+addressed by a competent developer and web designer.
+
+## Is Smarty Right for Me?
+
+Smarty is not meant to be a tool for every job. The important thing is
+to identify if Smarty fits your needs. There are some important
+questions to ask yourself:
+
+### Template Syntax
+Are you content with PHP tags mixed with HTML? Are your
+web designers comfortable with PHP? Would your web designers prefer a
+tag-based syntax designed for presentation? Some experience working with
+both Smarty and PHP helps answer these questions.
+
+### The Business Case
+Is there a requirement to insulate the templates from
+PHP? Do you have untrusted parties editing templates that you do not
+wish to unleash the power of PHP to? Do you need to programmatically
+control what is and is not available within the templates? Smarty
+supplies these capabilities by design.
+
+## Feature set
+Does Smarty's features such as caching, template
+inheritance and plugin architecture save development cycles writing code
+that would be needed otherwise? Does the codebase or framework you plan
+on using have the features you need for the presentation component?
+
+## Sites using Smarty
+Many well-known PHP projects make use of Smarty such as XOOPS CMS, CMS Made Simple, Tiki
+CMS/Groupware and X-Cart to name a few.
+
+## Summary
+Whether you are using Smarty for a small website or massive enterprise
+solution, it can accommodate your needs. There are numerous features
+that make Smarty a great choice:
+
+- separation of PHP from HTML/CSS just makes sense
+- readability for organization and management
+- security for 3rd party template access
+- feature completeness, and easily extendable to your own needs
+- massive user base, Smarty is here to stay
+- LGPL license for commercial use
+- 100% free to use, open source project
diff --git a/vendor/smarty/smarty/docs/getting-started.md b/vendor/smarty/smarty/docs/getting-started.md
new file mode 100644
index 000000000..2a1391f4b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/getting-started.md
@@ -0,0 +1,169 @@
+What is Smarty?
+==============
+
+## Requirements
+Smarty can be run with PHP 7.1 to PHP 8.2.
+
+## Installation
+Smarty versions 3.1.11 or later can be installed with [Composer](https://getcomposer.org/).
+
+To get the latest stable version of Smarty use:
+```bash
+composer require smarty/smarty
+````
+
+To get the latest, unreleased version, use:
+```bash
+composer require smarty/smarty:dev-master
+````
+
+To get the previous stable version of Smarty, Smarty 3, use:
+```bash
+composer require smarty/smarty:^3
+````
+
+Here's how you create an instance of Smarty in your PHP scripts:
+```php
+<?php
+
+require 'vendor/autoload.php';
+$smarty = new Smarty();
+```
+
+Now that the library files are in place, it's time to setup the Smarty
+directories for your application.
+
+Smarty requires four directories which are by default named
+ [`templates`](./programmers/api-variables/variable-template-dir.md),
+ [`configs`](./programmers/api-variables/variable-config-dir.md),
+ [`templates_c`](./programmers/api-variables/variable-compile-dir.md)
+ and
+ [`cache`](./programmers/api-variables/variable-cache-dir.md)
+ relative to the current working directory.
+
+The defaults can be changed as follows:
+```php
+$smarty = new Smarty();
+$smarty->setTemplateDir('/some/template/dir');
+$smarty->setConfigDir('/some/config/dir');
+$smarty->setCompileDir('/some/compile/dir');
+$smarty->setCacheDir('/some/cache/dir');
+```
+
+The compile dir and cache dir need to be writable for the user running the PHP script.
+
+> **Note**
+>
+> This is usually user "nobody" and group "nobody". For OS X users, the
+> default is user "www" and group "www". If you are using Apache, you
+> can look in your `httpd.conf` file to see what user and group are
+> being used.
+
+```bash
+chown nobody:nobody /web/www.example.com/guestbook/templates_c/
+chmod 770 /web/www.example.com/guestbook/templates_c/
+
+chown nobody:nobody /web/www.example.com/guestbook/cache/
+chmod 770 /web/www.example.com/guestbook/cache/
+```
+
+You can verify if your system has the correct access rights for
+ these directories with [`testInstall()`](./programmers/api-functions/api-test-install.md):
+
+```php
+$smarty = new Smarty();
+$smarty->setTemplateDir('/some/template/dir');
+$smarty->setConfigDir('/some/config/dir');
+$smarty->setCompileDir('/some/compile/dir');
+$smarty->setCacheDir('/some/cache/dir');
+$smarty->testInstall();
+```
+
+Now, let's create the `index.tpl` file that Smarty will display. This
+needs to be located in the [`$template_dir`](./programmers/api-variables/variable-template-dir.md).
+
+```html
+{* Smarty *}
+Hello {$name}, welcome to Smarty!
+```
+
+> **Note**
+>
+> `{* Smarty *}` is a template [comment](./designers/language-basic-syntax/language-syntax-comments.md). It
+> is not required, but it is good practice to start all your template
+> files with this comment. It makes the file easy to recognize
+> regardless of the file extension. For example, text editors could
+> recognize the file and turn on special syntax highlighting.
+
+Now lets edit our php file. We'll create an instance of Smarty,
+[`assign()`](./programmers/api-functions/api-assign.md) a template variable and
+[`display()`](./programmers/api-functions/api-display.md) the `index.tpl` file.
+
+```php
+<?php
+
+require 'vendor/autoload.php';
+
+$smarty = new Smarty();
+
+$smarty->setTemplateDir('/web/www.example.com/guestbook/templates/');
+$smarty->setCompileDir('/web/www.example.com/guestbook/templates_c/');
+$smarty->setConfigDir('/web/www.example.com/guestbook/configs/');
+$smarty->setCacheDir('/web/www.example.com/guestbook/cache/');
+
+$smarty->assign('name', 'Ned');
+$smarty->display('index.tpl');
+
+```
+
+> **Note**
+>
+> In our example, we are setting absolute paths to all of the Smarty
+> directories. If `/web/www.example.com/guestbook/` is within your PHP
+> include\_path, then these settings are not necessary. However, it is
+> more efficient and (from experience) less error-prone to set them to
+> absolute paths. This ensures that Smarty is getting files from the
+> directories you intended.
+
+Now, run your PHP file. You should see *\"Hello Ned, welcome to Smarty!\"*
+
+You have completed the basic setup for Smarty!
+
+## Extended Setup {#installing.smarty.extended}
+==============
+
+This is a continuation of the [basic
+installation](#installing.smarty.basic), please read that first!
+
+A slightly more flexible way to setup Smarty is to extend the Smarty
+class and initialize your Smarty
+environment. So instead of repeatedly setting directory paths, assigning
+the same vars, etc., we can do that in one place.
+
+```php
+<?php
+
+class Smarty_GuestBook extends Smarty {
+
+ public function __construct()
+ {
+ parent::__construct();
+
+ $this->setTemplateDir('/web/www.example.com/guestbook/templates/');
+ $this->setCompileDir('/web/www.example.com/guestbook/templates_c/');
+ $this->setConfigDir('/web/www.example.com/guestbook/configs/');
+ $this->setCacheDir('/web/www.example.com/guestbook/cache/');
+
+ $this->caching = Smarty::CACHING_LIFETIME_CURRENT;
+ $this->assign('app_name', 'Guest Book');
+ }
+
+}
+```
+
+Now, we can use `Smarty_GuestBook` instead of `Smarty` in our scripts:
+```php
+$smarty = new Smarty_GuestBook();
+$smarty->assign('name','Ned');
+$smarty->display('index.tpl');
+```
diff --git a/vendor/smarty/smarty/docs/index.md b/vendor/smarty/smarty/docs/index.md
new file mode 100644
index 000000000..cf2b2ddcd
--- /dev/null
+++ b/vendor/smarty/smarty/docs/index.md
@@ -0,0 +1,50 @@
+# Smarty 4 Documentation
+Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic.
+
+It allows you to write **templates**, using **variables**, **modifiers**, **functions** and **comments**, like this:
+```html
+<h1>{$title|escape}</h1>
+
+<p>
+ The number of pixels is: {math equation="x * y" x=$height y=$width}.
+</p>
+```
+
+When this template is rendered, with the value "Hello world" for the variable $title, 640 for $width,
+and 480 for $height, the result is:
+```html
+<h1>Hello world</h1>
+
+<p>
+ The number of pixels is: 307200.
+</p>
+```
+
+## Introduction
+- [Philosophy](./philosophy.md) - or "Why do I need a template engine?"
+- [Features](./features.md) - or "Why do I want Smarty?"
+- [Getting Started](./getting-started.md)
+
+## Smarty for template designers
+- [Basic Syntax](./designers/language-basic-syntax.md)
+- [Variables](./designers/language-variables.md)
+- [Variable Modifiers](./designers/language-modifiers.md)
+- [Combining Modifiers](./designers/language-combining-modifiers.md)
+- [Built-in Functions](./designers/language-builtin-functions.md)
+- [Custom Functions](./designers/language-custom-functions.md)
+- [Config Files](./designers/config-files.md)
+- [Debugging Console](./designers/chapter-debugging-console.md)
+
+## Smarty for php developers
+- [Charset Encoding](./programmers/charset.md)
+- [Constants](./programmers/smarty-constants.md)
+- [Smarty Class Variables](./programmers/api-variables.md)
+- [Smarty Class Methods](./programmers/api-functions.md)
+- [Caching](./programmers/caching.md)
+- [Resources](./programmers/resources.md)
+- [Advanced Features](./programmers/advanced-features.md)
+- [Extending Smarty With Plugins](./programmers/plugins.md)
+
+## Other
+- [Some random tips & tricks](./appendixes/tips.md)
+- [Troubleshooting](./appendixes/troubleshooting.md)
diff --git a/vendor/smarty/smarty/docs/philosophy.md b/vendor/smarty/smarty/docs/philosophy.md
new file mode 100644
index 000000000..86f6c46ed
--- /dev/null
+++ b/vendor/smarty/smarty/docs/philosophy.md
@@ -0,0 +1,108 @@
+Philosophy
+=======
+
+## What is Smarty?
+
+Smarty is a template engine for PHP. More specifically, it facilitates a
+manageable way to separate application logic and content from its
+presentation. This is best described in a situation where the
+application programmer and the template designer play different roles,
+or in most cases are not the same person.
+
+For example, let\'s say you are creating a web page that is displaying a
+newspaper article.
+
+- The article `$headline`, `$tagline`, `$author` and `$body` are
+ content elements, they contain no information about how they will be
+ presented. They are [passed](#api.assign) into Smarty by the
+ application.
+
+- Then the template designer edits the templates and uses a
+ combination of HTML tags and [template tags](#language.basic.syntax)
+ to format the presentation of these
+ [variables](#language.syntax.variables) with elements such as
+ tables, div\'s, background colors, font sizes, style sheets, svg
+ etc.
+
+- One day the programmer needs to change the way the article content
+ is retrieved, ie a change in application logic. This change does not
+ affect the template designer, the content will still arrive in the
+ template exactly the same.
+
+- Likewise, if the template designer wants to completely redesign the
+ templates, this would require no change to the application logic.
+
+- Therefore, the programmer can make changes to the application logic
+ without the need to restructure templates, and the template designer
+ can make changes to templates without breaking application logic.
+
+## Goals
+
+The Smarty design was largely driven by these goals:
+- clean separation of presentation from application code
+- PHP backend, Smarty template frontend
+- complement PHP, not replace it
+- fast development/deployment for programmers and designers
+- quick and easy to maintain
+- syntax easy to understand, no PHP knowledge necessary
+- flexibility for custom development
+- security: insulation from PHP
+- free, open source
+
+
+
+## Two camps of thought
+
+When it comes to templating in PHP, there are basically two camps of
+thought. The first camp exclaims that \"PHP is a template engine\". This
+approach simply mixes PHP code with HTML. Although this approach is
+fastest from a pure script-execution point of view, many would argue
+that the PHP syntax is messy and complicated when mixed with tagged
+markup such as HTML.
+
+The second camp exclaims that presentation should be void of all
+programming code, and instead use simple tags to indicate where
+application content is revealed. This approach is common with other
+template engines (even in other programming languages), and is also the
+approach that Smarty takes. The idea is to keep the templates focused
+squarely on presentation, void of application code, and with as little
+overhead as possible.
+
+## Why is separating PHP from templates important?
+
+Two major benefits:
+
+- SYNTAX: Templates typically consist of semantic markup such as HTML.
+ PHP syntax works well for application code, but quickly degenerates
+ when mixed with HTML. Smarty\'s simple {tag} syntax is designed
+ specifically to express presentation. Smarty focuses your templates
+ on presentation and less on \"code\". This lends to quicker template
+ deployment and easier maintenance. Smarty syntax requires no working
+ knowledge of PHP, and is intuitive for programmers and
+ non-programmers alike.
+
+- INSULATION: When PHP is mixed with templates, there are no
+ restrictions on what type of logic can be injected into a template.
+ Smarty insulates the templates from PHP, creating a controlled
+ separation of presentation from business logic. Smarty also has
+ security features that can further enforce restrictions on
+ templates.
+
+## Web designers and PHP
+
+A common question: "Web designers have to learn a syntax anyway, why
+not PHP?" Of course web designers can learn PHP, and they may already
+be familiar with it. The issue isn't their ability to learn PHP, it is
+about the consequences of mixing PHP with HTML. If designers use PHP, it
+is too easy to add code into templates that doesn't belong there (you
+just handed them a swiss-army knife when they just needed a knife.) You
+can teach them the rules of application design, but this is probably
+something they don't really need to learn (now they are developers!)
+The PHP manual is also an overwhelming pile of information to sift
+through. It is like handing the owner of a car the factory assembly
+manual when all they need is the owners manual. Smarty gives web
+designers exactly the tools they need, and gives developers fine-grained
+control over those tools. The simplicity of the tag-based syntax is also
+a huge welcome for designers, it helps them streamline the organization
+and management of templates.
+
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features.md b/vendor/smarty/smarty/docs/programmers/advanced-features.md
new file mode 100644
index 000000000..60d4416b5
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features.md
@@ -0,0 +1,14 @@
+Advanced Features {#advanced.features}
+=================
+
+## Table of contents
+
+- [Security](./advanced-features/advanced-features-security.md)
+- [Changing settings by template](./advanced-features/advanced-features-template-settings.md)
+- [Template Inheritance](./advanced-features/advanced-features-template-inheritance.md)
+- [Streams](./advanced-features/advanced-features-streams.md)
+- [Objects](./advanced-features/advanced-features-objects.md)
+- [Static Classes](./advanced-features/advanced-features-static-classes.md)
+- [Prefilters](./advanced-features/advanced-features-prefilters.md)
+- [Postfilters](./advanced-features/advanced-features-postfilters.md)
+- [Output Filters](./advanced-features/advanced-features-outputfilters.md)
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md
new file mode 100644
index 000000000..88bd647a7
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-objects.md
@@ -0,0 +1,99 @@
+Objects {#advanced.features.objects}
+=======
+
+Smarty allows access to PHP [objects](&url.php-manual;object) through
+the templates.
+
+> **Note**
+>
+> When you assign/register objects to templates, be sure that all
+> properties and methods accessed from the template are for presentation
+> purposes only. It is very easy to inject application logic through
+> objects, and this leads to poor designs that are difficult to manage.
+> See the Best Practices section of the Smarty website.
+
+There are two ways to access them.
+
+- One way is to [register objects](#api.register.object) to the
+ template, then use access them via syntax similar to [custom
+ functions](#language.custom.functions).
+
+- The other way is to [`assign()`](#api.assign) objects to the
+ templates and access them much like any other assigned variable.
+
+The first method has a much nicer template syntax. It is also more
+secure, as a registered object can be restricted to certain methods or
+properties. However, **a registered object cannot be looped over or
+assigned in arrays of objects**, etc. The method you choose will be
+determined by your needs, but use the first method whenever possible to
+keep template syntax to a minimum.
+
+If security is enabled, no private methods or functions can be accessed
+(beginning with \'\_\'). If a method and property of the same name exist,
+the method will be used.
+
+You can restrict the methods and properties that can be accessed by
+listing them in an array as the third registration parameter.
+
+By default, parameters passed to objects through the templates are
+passed the same way [custom functions](#language.custom.functions) get
+them. An associative array is passed as the first parameter, and the
+smarty object as the second. If you want the parameters passed one at a
+time for each argument like traditional object parameter passing, set
+the fourth registration parameter to FALSE.
+
+The optional fifth parameter has only effect with `format` being TRUE
+and contains a list of methods that should be treated as blocks. That
+means these methods have a closing tag in the template
+(`{foobar->meth2}...{/foobar->meth2}`) and the parameters to the methods
+have the same synopsis as the parameters for
+[`block-function-plugins`](#plugins.block.functions): They get the four
+parameters `$params`, `$content`, `$smarty` and `&$repeat` and they also
+behave like block-function-plugins.
+
+
+ <?php
+ // the object
+
+ class My_Object {
+ function meth1($params, $smarty_obj) {
+ return 'this is my meth1';
+ }
+ }
+
+ $myobj = new My_Object;
+
+ // registering the object (will be by reference)
+ $smarty->registerObject('foobar',$myobj);
+
+ // if we want to restrict access to certain methods or properties, list them
+ $smarty->registerObject('foobar',$myobj,array('meth1','meth2','prop1'));
+
+ // if you want to use the traditional object parameter format, pass a boolean of false
+ $smarty->registerObject('foobar',$myobj,null,false);
+
+ // We can also assign objects. assign_by_ref when possible.
+ $smarty->assign_by_ref('myobj', $myobj);
+
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+And here\'s how to access your objects in `index.tpl`:
+
+
+ {* access our registered object *}
+ {foobar->meth1 p1='foo' p2=$bar}
+
+ {* you can also assign the output *}
+ {foobar->meth1 p1='foo' p2=$bar assign='output'}
+ the output was {$output}
+
+ {* access our assigned object *}
+ {$myobj->meth1('foo',$bar)}
+
+
+
+See also [`registerObject()`](#api.register.object) and
+[`assign()`](#api.assign).
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md
new file mode 100644
index 000000000..393d7da23
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-outputfilters.md
@@ -0,0 +1,43 @@
+Output Filters {#advanced.features.outputfilters}
+==============
+
+When the template is invoked via [`display()`](#api.display) or
+[`fetch()`](#api.fetch), its output can be sent through one or more
+output filters. This differs from
+[`postfilters`](#advanced.features.postfilters) because postfilters
+operate on compiled templates before they are saved to the disk, whereas
+output filters operate on the template output when it is executed.
+
+Output filters can be either [registered](#api.register.filter) or
+loaded from the [plugins directory](#variable.plugins.dir) by using the
+[`loadFilter()`](#api.load.filter) method or by setting the
+[`$autoload_filters`](#variable.autoload.filters) variable. Smarty will
+pass the template output as the first argument, and expect the function
+to return the result of the processing.
+
+
+ <?php
+ // put this in your application
+ function protect_email($tpl_output, Smarty_Internal_Template $template)
+ {
+ $tpl_output =
+ preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
+ '$1%40$2', $tpl_output);
+ return $tpl_output;
+ }
+
+ // register the outputfilter
+ $smarty->registerFilter("output","protect_email");
+ $smarty->display("index.tpl');
+
+ // now any occurrence of an email address in the template output will have
+ // a simple protection against spambots
+ ?>
+
+
+
+See also [`registerFilter()`](#api.register.filter),
+[`loadFilter()`](#api.load.filter),
+[`$autoload_filters`](#variable.autoload.filters),
+[postfilters](#advanced.features.postfilters) and
+[`$plugins_dir`](#variable.plugins.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md
new file mode 100644
index 000000000..d3bad546a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-postfilters.md
@@ -0,0 +1,40 @@
+Postfilters {#advanced.features.postfilters}
+===========
+
+Template postfilters are PHP functions that your templates are ran
+through *after they are compiled*. Postfilters can be either
+[registered](#api.register.filter) or loaded from the [plugins
+directory](#variable.plugins.dir) by using the
+[`loadFilter()`](#api.load.filter) function or by setting the
+[`$autoload_filters`](#variable.autoload.filters) variable. Smarty will
+pass the compiled template code as the first argument, and expect the
+function to return the result of the processing.
+
+
+ <?php
+ // put this in your application
+ function add_header_comment($tpl_source, Smarty_Internal_Template $template)
+ {
+ return "<?php echo \"<!-- Created by Smarty! -->\n\"; ?>\n".$tpl_source;
+ }
+
+ // register the postfilter
+ $smarty->registerFilter('post','add_header_comment');
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+The postfilter above will make the compiled Smarty template `index.tpl`
+look like:
+
+
+ <!-- Created by Smarty! -->
+ {* rest of template content... *}
+
+
+
+See also [`registerFilter()`](#api.register.filter),
+[prefilters](#advanced.features.prefilters),
+[outputfilters](#advanced.features.outputfilters), and
+[`loadFilter()`](#api.load.filter).
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md
new file mode 100644
index 000000000..76229e633
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-prefilters.md
@@ -0,0 +1,36 @@
+Prefilters {#advanced.features.prefilters}
+==========
+
+Template prefilters are PHP functions that your templates are ran
+through *before they are compiled*. This is good for preprocessing your
+templates to remove unwanted comments, keeping an eye on what people are
+putting in their templates, etc.
+
+Prefilters can be either [registered](#api.register.filter) or loaded
+from the [plugins directory](#variable.plugins.dir) by using
+[`loadFilter()`](#api.load.filter) function or by setting the
+[`$autoload_filters`](#variable.autoload.filters) variable.
+
+Smarty will pass the template source code as the first argument, and
+expect the function to return the resulting template source code.
+
+This will remove all the html comments in the template source.
+
+
+ <?php
+ // put this in your application
+ function remove_dw_comments($tpl_source, Smarty_Internal_Template $template)
+ {
+ return preg_replace("/<!--#.*-->/U",'',$tpl_source);
+ }
+
+ // register the prefilter
+ $smarty->registerFilter('pre','remove_dw_comments');
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+See also [`registerFilter()`](#api.register.filter),
+[postfilters](#advanced.features.postfilters) and
+[`loadFilter()`](#api.load.filter).
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md
new file mode 100644
index 000000000..730915f14
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-security.md
@@ -0,0 +1,144 @@
+Security {#advanced.features.security}
+========
+
+Security is good for situations when you have untrusted parties editing
+the templates e.g. via ftp, and you want to reduce the risk of system
+security compromises through the template language.
+
+The settings of the security policy are defined by properties of an
+instance of the Smarty\_Security class. These are the possible settings:
+
+- `$secure_dir` is an array of template directories that are
+ considered secure. [`$template_dir`](#variable.template.dir)
+ considered secure implicitly. The default is an empty array.
+
+- `$trusted_dir` is an array of all directories that are considered
+ trusted. Trusted directories are where you keep php scripts that are
+ executed directly from the templates with
+ [`{insert}`](#language.function.insert.php). The default is an
+ empty array.
+
+- `$trusted_uri` is an array of regular expressions matching URIs that
+ are considered trusted. This security directive used by
+ [`{fetch}`](#language.function.fetch) and
+ [`{html_image}`](#language.function.html.image). URIs passed to
+ these functions are reduced to `{$PROTOCOL}://{$HOSTNAME}` to allow
+ simple regular expressions (without having to deal with edge cases
+ like authentication-tokens).
+
+ The expression `'#https?://.*smarty.net$#i'` would allow accessing
+ the following URIs:
+
+ - `http://smarty.net/foo`
+
+ - `http://smarty.net/foo`
+
+ - `http://www.smarty.net/foo`
+
+ - `http://smarty.net/foo`
+
+ - `https://foo.bar.www.smarty.net/foo/bla?blubb=1`
+
+ but deny access to these URIs:
+
+ - `http://smarty.com/foo` (not matching top-level domain \"com\")
+
+ - `ftp://www.smarty.net/foo` (not matching protocol \"ftp\")
+
+ - `http://www.smarty.net.otherdomain.com/foo` (not matching end of
+ domain \"smarty.net\")
+
+- `$static_classes` is an array of classes that are considered
+ trusted. The default is an empty array which allows access to all
+ static classes. To disable access to all static classes set
+ \$static\_classes = null.
+
+- `$php_functions` is an array of PHP functions that are considered
+ trusted and can be used from within template. To disable access to
+ all PHP functions set \$php\_functions = null. An empty array (
+ \$php\_functions = array() ) will allow all PHP functions. The
+ default is array(\'isset\', \'empty\', \'count\', \'sizeof\',
+ \'in\_array\', \'is\_array\',\'time\',\'nl2br\').
+
+- `$php_modifiers` is an array of PHP functions that are considered
+ trusted and can be used from within template as modifier. To disable
+ access to all PHP modifier set \$php\_modifier = null. An empty
+ array ( \$php\_modifier = array() ) will allow all PHP functions.
+ The default is array(\'escape\',\'count\').
+
+- `$streams` is an array of streams that are considered trusted and
+ can be used from within template. To disable access to all streams
+ set \$streams = null. An empty array ( \$streams = array() ) will
+ allow all streams. The default is array(\'file\').
+
+- `$allowed_modifiers` is an array of (registered / autoloaded)
+ modifiers that should be accessible to the template. If this array
+ is non-empty, only the herein listed modifiers may be used. This is
+ a whitelist.
+
+- `$disabled_modifiers` is an array of (registered / autoloaded)
+ modifiers that may not be accessible to the template.
+
+- `$allowed_tags` is a boolean flag which controls if constants can
+ function-, block and filter plugins that should be accessible to the
+ template. If this array is non-empty, only the herein listed
+ modifiers may be used. This is a whitelist.
+
+- `$disabled_tags` is an array of (registered / autoloaded) function-,
+ block and filter plugins that may not be accessible to the template.
+
+- `$allow_constants` is a boolean flag which controls if constants can
+ be accessed by the template. The default is \"true\".
+
+- `$allow_super_globals` is a boolean flag which controls if the PHP
+ super globals can be accessed by the template. The default is
+ \"true\".
+
+If security is enabled, no private methods, functions or properties of
+static classes or assigned objects can be accessed (beginning with
+\'\_\') by the template.
+
+To customize the security policy settings you can extend the
+Smarty\_Security class or create an instance of it.
+
+
+ <?php
+ require 'Smarty.class.php';
+
+ class My_Security_Policy extends Smarty_Security {
+ // disable all PHP functions
+ public $php_functions = null;
+ // allow everthing as modifier
+ public $php_modifiers = array();
+ }
+ $smarty = new Smarty();
+ // enable security
+ $smarty->enableSecurity('My_Security_Policy');
+ ?>
+
+
+ <?php
+ require 'Smarty.class.php';
+ $smarty = new Smarty();
+ $my_security_policy = new Smarty_Security($smarty);
+ // disable all PHP functions
+ $my_security_policy->php_functions = null;
+ // allow everthing as modifier
+ $my_security_policy->php_modifiers = array();
+ // enable security
+ $smarty->enableSecurity($my_security_policy);
+ ?>
+
+
+ <?php
+ require 'Smarty.class.php';
+ $smarty = new Smarty();
+ // enable default security
+ $smarty->enableSecurity();
+ ?>
+
+> **Note**
+>
+> Most security policy settings are only checked when the template gets
+> compiled. For that reason you should delete all cached and compiled
+> template files when you change your security settings.
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md
new file mode 100644
index 000000000..8ef79113c
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-static-classes.md
@@ -0,0 +1,27 @@
+Static Classes {#advanced.features.static.classes}
+==============
+
+You can directly access static classes. The syntax is the same as in
+PHP.
+
+> **Note**
+>
+> Direct access to PHP classes is not recommended. This ties the
+> underlying application code structure directly to the presentation,
+> and also complicates template syntax. It is recommended to register
+> plugins which insulate templates from PHP classes/objects. Use at your
+> own discretion. See the Best Practices section of the Smarty website.
+
+
+ {assign var=foo value=myclass::BAR} <--- class constant BAR
+
+ {assign var=foo value=myclass::method()} <--- method result
+
+ {assign var=foo value=myclass::method1()->method2} <--- method chaining
+
+ {assign var=foo value=myclass::$bar} <--- property bar of class myclass
+
+ {assign var=foo value=$bar::method} <--- using Smarty variable bar as class name
+
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md
new file mode 100644
index 000000000..d6f7a0de5
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-streams.md
@@ -0,0 +1,15 @@
+Streams {#advanced.features.streams}
+=======
+
+You can also use streams to call variables. *{\$foo:bar}* will use the
+*foo://bar* stream to get the template variable.
+
+Using a PHP stream for a template variable resource from within a
+template.
+
+
+ {$foo:bar}
+
+
+
+See also [`Template Resources`](#resources)
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md
new file mode 100644
index 000000000..ce47310ca
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-inheritance.md
@@ -0,0 +1,128 @@
+Template Inheritance {#advanced.features.template.inheritance}
+====================
+
+Inheritance brings the concept of Object Oriented Programming to
+templates, allowing you to define one (or more) base templates that can
+be extended by child templates. Extending means that the child template
+can override all or some of the parent named block areas.
+
+- The inheritance tree can be as deep as you want, meaning you can
+ extend a file that extends another one that extends another one and
+ so on.
+
+- The child templates can not define any content besides what\'s
+ inside [`{block}`](#language.function.block) tags they override.
+ Anything outside of [`{block}`](#language.function.block) tags will
+ be removed.
+
+- The content of [`{block}`](#language.function.block) tags from child
+ and parent templates can be merged by the `append` or `prepend`
+ [`{block}`](#language.function.block) tag option flags and
+ `{$smarty.block.parent}` or `{$smarty.block.child}` placeholders.
+
+- Template inheritance is a compile time process which creates a
+ single compiled template file. Compared to corresponding solutions
+ based on subtemplates included with the
+ [`{include}`](#language.function.include) tag it does have much
+ better performance when rendering.
+
+- The child template extends its parent defined with the
+ [`{extends}`](#language.function.extends) tag, which must be the
+ first line in the child template. Instead of using the
+ [`{extends}`](#language.function.extends) tags in the template files
+ you can define the whole template inheritance tree in the PHP script
+ when you are calling [`fetch()`](#api.fetch) or
+ [`display()`](#api.display) with the `extends:` template resource
+ type. The later provides even more flexibility.
+
+> **Note**
+>
+> When `$compile_check` is enabled, all files in the inheritance tree
+> are checked for modifications upon each invocation. You may want to
+> disable `$compile_check` on production servers for this reason.
+
+> **Note**
+>
+> If you have a subtemplate which is included with
+> [`{include}`](#language.function.include) and it contains
+> [`{block}`](#language.function.block) areas it works only if the
+> [`{include}`](#language.function.include) itself is called from within
+> a surrounding [`{block}`](#language.function.block). In the final
+> parent template you may need a dummy
+> [`{block}`](#language.function.block) for it.
+
+layout.tpl (parent)
+
+
+ <html>
+ <head>
+ <title>{block name=title}Default Page Title{/block}</title>
+ {block name=head}{/block}
+ </head>
+ <body>
+ {block name=body}{/block}
+ </body>
+ </html>
+
+
+
+myproject.tpl (child)
+
+
+ {extends file='layout.tpl'}
+ {block name=head}
+ <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
+ <script src="/js/mypage.js"></script>
+ {/block}
+
+
+
+
+mypage.tpl (grandchild)
+
+
+ {extends file='myproject.tpl'}
+ {block name=title}My Page Title{/block}
+ {block name=head}
+ <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
+ <script src="/js/mypage.js"></script>
+ {/block}
+ {block name=body}My HTML Page Body goes here{/block}
+
+
+
+To render the above use
+
+
+ $smarty->display('mypage.tpl');
+
+The resulting output is
+
+
+ <html>
+ <head>
+ <title>My Page Title</title>
+ <link href="/css/mypage.css" rel="stylesheet" type="text/css"/>
+ <script src="/js/mypage.js"></script>
+ </head>
+ <body>
+ My HTML Page Body goes here
+ </body>
+ </html>
+
+Instead of using [`{extends}`](#language.function.extends) tags in the
+template files you can define the inheritance tree in your PHP script by
+using the [`extends:` resource](#resources.extends) type.
+
+The code below will return same result as the example above.
+
+
+ <?php
+ $smarty->display('extends:layout.tpl|myproject.tpl|mypage.tpl');
+ ?>
+
+
+
+See also [`{block}`](#language.function.block),
+[`{extends}`](#language.function.extends) and [`extends:`
+resource](#resources.extends)
diff --git a/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md
new file mode 100644
index 000000000..b06430ff0
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/advanced-features/advanced-features-template-settings.md
@@ -0,0 +1,32 @@
+Changing settings by template {#advanced.features.template.settings}
+=============================
+
+Normally you configure the Smarty settings by modifying the
+[`Smarty class variables`](#api.variables). Furthermore you can register
+plugins, filters etc. with [`Smarty functions`](#api.functions).
+Modifications done to the Smarty object will be global for all
+templates.
+
+However the Smarty class variables and functions can be accessed or
+called by individual template objects. Modification done to a template
+object will apply only for that template and its included subtemplates.
+
+
+ <?php
+ $tpl = $smarty->createTemplate('index.tpl);
+ $tpl->cache_lifetime = 600;
+ //or
+ $tpl->setCacheLifetime(600);
+ $smarty->display($tpl);
+ ?>
+
+
+
+
+ <?php
+ $tpl = $smarty->createTemplate('index.tpl);
+ $tpl->registerPlugin('modifier','mymodifier');
+ $smarty->display($tpl);
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions.md b/vendor/smarty/smarty/docs/programmers/api-functions.md
new file mode 100644
index 000000000..6f120fa9a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions.md
@@ -0,0 +1,64 @@
+Smarty Class Methods {#api.functions}
+====================
+
+## Table of contents
+
+- [addConfigDir()](./api-functions/api-add-config-dir.md) — add a directory to the list of directories where config files are stored
+- [addPluginsDir()](./api-functions/api-add-plugins-dir.md) — add a directory to the list of directories where plugins are stored
+- [addTemplateDir()](./api-functions/api-add-template-dir.md) — add a directory to the list of directories where templates are stored
+- [append()](./api-functions/api-append.md) — append an element to an assigned array
+- [appendByRef()](./api-functions/api-append-by-ref.md) — append values by reference
+- [assign()](./api-functions/api-assign.md) — assign variables/objects to the templates
+- [assignByRef()](./api-functions/api-assign-by-ref.md) — assign values by reference
+- [clearAllAssign()](./api-functions/api-clear-all-assign.md) — clears the values of all assigned variables
+- [clearAllCache()](./api-functions/api-clear-all-cache.md) — clears the entire template cache
+- [clearAssign()](./api-functions/api-clear-assign.md) — clears the value of an assigned variable
+- [clearCache()](./api-functions/api-clear-cache.md) — clears the cache for a specific template
+- [clearCompiledTemplate()](./api-functions/api-clear-compiled-tpl.md) — clears the compiled version of the specified template resource
+- [clearConfig()](./api-functions/api-clear-config.md) — clears assigned config variables
+- [compileAllConfig()](./api-functions/api-compile-all-config.md) — compiles all known config files
+- [compileAllTemplates()](./api-functions/api-compile-all-templates.md) — compiles all known templates
+- [configLoad()](./api-functions/api-config-load.md) — loads config file data and assigns it to the template
+- [createData()](./api-functions/api-create-data.md) — creates a data object
+- [createTemplate()](./api-functions/api-create-template.md) — returns a template object
+- [disableSecurity()](./api-functions/api-disable-security.md) — disables template security
+- [display()](./api-functions/api-display.md) — displays the template
+- [enableSecurity()](./api-functions/api-enable-security.md) — enables template security
+- [fetch()](./api-functions/api-fetch.md) — returns the template output
+- [getCacheDir()](./api-functions/api-get-cache-dir.md) — return the directory where the rendered template's output is stored
+- [getCompileDir()](./api-functions/api-get-compile-dir.md) — returns the directory where compiled templates are stored
+- [getConfigDir()](./api-functions/api-get-config-dir.md) — return the directory where config files are stored
+- [getConfigVars()](./api-functions/api-get-config-vars.md) — returns the given loaded config variable value
+- [getPluginsDir()](./api-functions/api-get-plugins-dir.md) — return the directory where plugins are stored
+- [getRegisteredObject()](./api-functions/api-get-registered-object.md) — returns a reference to a registered object
+- [getTags()](./api-functions/api-get-tags.md) — return tags used by template
+- [getTemplateDir()](./api-functions/api-get-template-dir.md) — return the directory where templates are stored
+- [getTemplateVars()](./api-functions/api-get-template-vars.md) — returns assigned variable value(s)
+- [isCached()](./api-functions/api-is-cached.md) — returns true if there is a valid cache for this template
+- [loadFilter()](./api-functions/api-load-filter.md) — load a filter plugin
+- [muteExpectedErrors()](./api-functions/api-mute-expected-errors.md) — mutes expected warnings and notices deliberately generated by Smarty
+- [registerCacheResource()](./api-functions/api-register-cacheresource.md) — dynamically register CacheResources
+- [registerClass()](./api-functions/api-register-class.md) — register a class for use in the templates
+- [registerDefaultPluginHandler()](./api-functions/api-register-default-plugin-handler.md) — register a function which gets called on undefined tags
+- [registerFilter()](./api-functions/api-register-filter.md) — dynamically register filters
+- [registerPlugin()](./api-functions/api-register-plugin.md) — dynamically register plugins
+- [registerObject()](./api-functions/api-register-object.md) — register an object for use in the templates
+- [registerResource()](./api-functions/api-register-resource.md) — dynamically register resources
+- [setCacheDir()](./api-functions/api-set-cache-dir.md) — set the directory where the rendered template's output is stored
+- [setCompileDir()](./api-functions/api-set-compile-dir.md) — set the directory where compiled templates are stored
+- [setConfigDir()](./api-functions/api-set-config-dir.md) — set the directories where config files are stored
+- [setPluginsDir()](./api-functions/api-set-plugins-dir.md) — set the directories where plugins are stored
+- [setTemplateDir()](./api-functions/api-set-template-dir.md) — set the directories where templates are stored
+- [templateExists()](./api-functions/api-template-exists.md) — checks whether the specified template exists
+- [unregisterCacheResource()](./api-functions/api-unregister-cacheresource.md) — dynamically unregister a CacheResource plugin
+- [unregisterFilter()](./api-functions/api-unregister-filter.md) — dynamically unregister a filter
+- [unregisterPlugin()](./api-functions/api-unregister-plugin.md) — dynamically unregister plugins
+- [unregisterObject()](./api-functions/api-unregister-object.md) — dynamically unregister an object
+- [unregisterResource()](./api-functions/api-unregister-resource.md) — dynamically unregister a resource plugin
+- [testInstall()](./api-functions/api-test-install.md) — checks Smarty installation
+
+> **Note**
+>
+> See
+> [`Changing settings by template`](./advanced-features/advanced-features-template-settings.md)
+> section for how to use the functions for individual templates.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md
new file mode 100644
index 000000000..6c8b54e41
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-config-dir.md
@@ -0,0 +1,49 @@
+addConfigDir()
+
+add a directory to the list of directories where config files are stored
+
+Description
+===========
+
+Smarty
+
+addConfigDir
+
+string\|array
+
+config\_dir
+
+string
+
+key
+
+
+ <?php
+
+ // add directory where config files are stored
+ $smarty->addConigDir('./config_1');
+
+ // add directory where config files are stored and specify array-key
+ $smarty->addConfigDir('./config_1', 'one');
+
+ // add multiple directories where config files are stored and specify array-keys
+ $smarty->addTemplateDir(array(
+ 'two' => './config_2',
+ 'three' => './config_3',
+ ));
+
+ // view the template dir chain
+ var_dump($smarty->getConfigDir());
+
+ // chaining of method calls
+ $smarty->setConfigDir('./config')
+ ->addConfigDir('./config_1', 'one')
+ ->addConfigDir('./config_2', 'two');
+
+ ?>
+
+
+
+See also [`getConfigDir()`](#api.get.config.dir),
+[`setConfigDir()`](#api.set.config.dir) and
+[`$config_dir`](#variable.config.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-plugins-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-plugins-dir.md
new file mode 100644
index 000000000..ec9741b6e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-plugins-dir.md
@@ -0,0 +1,42 @@
+addPluginsDir()
+
+add a directory to the list of directories where plugins are stored
+
+Description
+===========
+
+Smarty
+
+addPluginsDir
+
+string\|array
+
+plugins\_dir
+
+
+ <?php
+
+ // add directory where plugins are stored
+ $smarty->addPluginsDir('./plugins_1');
+
+ // add multiple directories where plugins are stored
+ $smarty->setPluginsDir(array(
+ './plugins_2',
+ './plugins_3',
+ ));
+
+ // view the plugins dir chain
+ var_dump($smarty->getPluginsDir());
+
+ // chaining of method calls
+ $smarty->setPluginsDir('./plugins')
+ ->addPluginsDir('./plugins_1')
+ ->addPluginsDir('./plugins_2');
+
+ ?>
+
+
+
+See also [`getPluginsDir()`](#api.get.plugins.dir),
+[`setPluginsDir()`](#api.set.plugins.dir) and
+[`$plugins_dir`](#variable.plugins.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md
new file mode 100644
index 000000000..e0d24564c
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-add-template-dir.md
@@ -0,0 +1,49 @@
+addTemplateDir()
+
+add a directory to the list of directories where templates are stored
+
+Description
+===========
+
+Smarty
+
+addTemplateDir
+
+string\|array
+
+template\_dir
+
+string
+
+key
+
+
+ <?php
+
+ // add directory where templates are stored
+ $smarty->addTemplateDir('./templates_1');
+
+ // add directory where templates are stored and specify array-key
+ $smarty->addTemplateDir('./templates_1', 'one');
+
+ // add multiple directories where templates are stored and specify array-keys
+ $smarty->addTemplateDir(array(
+ 'two' => './templates_2',
+ 'three' => './templates_3',
+ ));
+
+ // view the template dir chain
+ var_dump($smarty->getTemplateDir());
+
+ // chaining of method calls
+ $smarty->setTemplateDir('./templates')
+ ->addTemplateDir('./templates_1', 'one')
+ ->addTemplateDir('./templates_2', 'two');
+
+ ?>
+
+
+
+See also [`getTemplateDir()`](#api.get.template.dir),
+[`setTemplateDir()`](#api.set.template.dir) and
+[`$template_dir`](#variable.template.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md
new file mode 100644
index 000000000..cd396d9cc
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-append-by-ref.md
@@ -0,0 +1,46 @@
+appendByRef()
+
+append values by reference
+
+Description
+===========
+
+void
+
+appendByRef
+
+string
+
+varname
+
+mixed
+
+var
+
+bool
+
+merge
+
+This is used to [`append()`](#api.append) values to the templates by
+reference.
+
+> **Note**
+>
+> With the introduction of PHP5, `appendByRef()` is not necessary for
+> most intents and purposes. `appendByRef()` is useful if you want a PHP
+> array index value to be affected by its reassignment from a template.
+> Assigned object properties behave this way by default.
+
+NOTE.PARAMETER.MERGE
+
+
+ <?php
+ // appending name/value pairs
+ $smarty->appendByRef('Name', $myname);
+ $smarty->appendByRef('Address', $address);
+ ?>
+
+
+
+See also [`append()`](#api.append), [`assign()`](#api.assign) and
+[`getTemplateVars()`](#api.get.template.vars).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md
new file mode 100644
index 000000000..b94586417
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-append.md
@@ -0,0 +1,61 @@
+append()
+
+append an element to an assigned array
+
+Description
+===========
+
+void
+
+append
+
+mixed
+
+var
+
+void
+
+append
+
+string
+
+varname
+
+mixed
+
+var
+
+bool
+
+merge
+
+If you append to a string value, it is converted to an array value and
+then appended to. You can explicitly pass name/value pairs, or
+associative arrays containing the name/value pairs. If you pass the
+optional third parameter of TRUE, the value will be merged with the
+current array instead of appended.
+
+NOTE.PARAMETER.MERGE
+
+
+ <?php
+ // This is effectively the same as assign()
+ $smarty->append('foo', 'Fred');
+ // After this line, foo will now be seen as an array in the template
+ $smarty->append('foo', 'Albert');
+
+ $array = array(1 => 'one', 2 => 'two');
+ $smarty->append('X', $array);
+ $array2 = array(3 => 'three', 4 => 'four');
+ // The following line will add a second element to the X array
+ $smarty->append('X', $array2);
+
+ // passing an associative array
+ $smarty->append(array('city' => 'Lincoln', 'state' => 'Nebraska'));
+ ?>
+
+
+
+See also [`appendByRef()`](#api.append.by.ref),
+[`assign()`](#api.assign) and
+[`getTemplateVars()`](#api.get.template.vars)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md
new file mode 100644
index 000000000..7c42b4836
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign-by-ref.md
@@ -0,0 +1,42 @@
+assignByRef()
+
+assign values by reference
+
+Description
+===========
+
+void
+
+assignByRef
+
+string
+
+varname
+
+mixed
+
+var
+
+This is used to [`assign()`](#api.assign) values to the templates by
+reference.
+
+> **Note**
+>
+> With the introduction of PHP5, `assignByRef()` is not necessary for
+> most intents and purposes. `assignByRef()` is useful if you want a PHP
+> array index value to be affected by its reassignment from a template.
+> Assigned object properties behave this way by default.
+
+
+ <?php
+ // passing name/value pairs
+ $smarty->assignByRef('Name', $myname);
+ $smarty->assignByRef('Address', $address);
+ ?>
+
+
+
+See also [`assign()`](#api.assign),
+[`clearAllAssign()`](#api.clear.all.assign), [`append()`](#api.append),
+[`{assign}`](#language.function.assign) and
+[`getTemplateVars()`](#api.get.template.vars).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md
new file mode 100644
index 000000000..c3b9985d4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-assign.md
@@ -0,0 +1,84 @@
+assign()
+
+assign variables/objects to the templates
+
+Description
+===========
+
+void
+
+assign
+
+mixed
+
+var
+
+void
+
+assign
+
+string
+
+varname
+
+mixed
+
+var
+
+bool
+
+nocache
+
+You can explicitly pass name/value pairs, or associative arrays
+containing the name/value pairs.
+
+If you pass the optional third `nocache` parameter of TRUE, the variable
+is assigned as nocache variable. See
+[`Cacheability of Variables`](#cacheability.variables) for details.
+
+> **Note**
+>
+> When you assign/register objects to templates, be sure that all
+> properties and methods accessed from the template are for presentation
+> purposes only. It is very easy to inject application logic through
+> objects, and this leads to poor designs that are difficult to manage.
+> See the Best Practices section of the Smarty website.
+
+
+ <?php
+ // passing name/value pairs
+ $smarty->assign('Name', 'Fred');
+ $smarty->assign('Address', $address);
+
+ // passing an associative array
+ $smarty->assign(array('city' => 'Lincoln', 'state' => 'Nebraska'));
+
+ // passing an array
+ $myArray = array('no' => 10, 'label' => 'Peanuts');
+ $smarty->assign('foo',$myArray);
+
+ // passing a row from a database (eg adodb)
+ $sql = 'select id, name, email from contacts where contact ='.$id;
+ $smarty->assign('contact', $db->getRow($sql));
+ ?>
+
+These are accessed in the template with
+
+
+ {* note the vars are case sensitive like php *}
+ {$Name}
+ {$Address}
+ {$city}
+ {$state}
+
+ {$foo.no}, {$foo.label}
+ {$contact.id}, {$contact.name},{$contact.email}
+
+To access more complex array assignments see
+[`{foreach}`](#language.function.foreach) and
+[`{section}`](#language.function.section)
+
+See also [`assignByRef()`](#api.assign.by.ref),
+[`getTemplateVars()`](#api.get.template.vars),
+[`clearAssign()`](#api.clear.assign), [`append()`](#api.append) and
+[`{assign}`](#language.function.assign)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-assign.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-assign.md
new file mode 100644
index 000000000..cc75fad0f
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-assign.md
@@ -0,0 +1,34 @@
+clearAllAssign()
+
+clears the values of all assigned variables
+
+Description
+===========
+
+void
+
+clearAllAssign
+
+
+ <?php
+ // passing name/value pairs
+ $smarty->assign('Name', 'Fred');
+ $smarty->assign('Address', $address);
+
+ // will output above
+ print_r( $smarty->getTemplateVars() );
+
+ // clear all assigned variables
+ $smarty->clearAllAssign();
+
+ // will output nothing
+ print_r( $smarty->getTemplateVars() );
+
+ ?>
+
+
+
+See also [`clearAssign()`](#api.clear.assign),
+[`clearConfig()`](#api.clear.config),
+[`getTemplateVars()`](#api.get.template.vars), [`assign()`](#api.assign)
+and [`append()`](#api.append)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-cache.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-cache.md
new file mode 100644
index 000000000..55cbe5795
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-all-cache.md
@@ -0,0 +1,37 @@
+clearAllCache()
+
+clears the entire template cache
+
+Description
+===========
+
+void
+
+clearAllCache
+
+int
+
+expire\_time
+
+As an optional parameter, you can supply a minimum age in seconds the
+cache files must be before they will get cleared.
+
+> **Note**
+>
+> Since Smarty version 3.1.14 it is possible to delete cache files by
+> their individual expiration time at creation by passing constant
+> SMARTY::CLEAR\_EXPIRED as `expire_time` parameter.
+
+
+ <?php
+ // clear the entire cache
+ $smarty->clearAllCache();
+
+ // clears all files over one hour old
+ $smarty->clearAllCache(3600);
+ ?>
+
+
+
+See also [`clearCache()`](#api.clear.cache),
+[`isCached()`](#api.is.cached) and the [caching](#caching) page.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-assign.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-assign.md
new file mode 100644
index 000000000..ac0731e86
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-assign.md
@@ -0,0 +1,32 @@
+clearAssign()
+
+clears the value of an assigned variable
+
+Description
+===========
+
+void
+
+clearAssign
+
+mixed
+
+var
+
+This can be a single value, or an array of values.
+
+
+ <?php
+ // clear a single variable
+ $smarty->clearAssign('Name');
+
+ // clears multiple variables
+ $smarty->clearAssign(array('Name', 'Address', 'Zip'));
+ ?>
+
+
+
+See also [`clearAllAssign()`](#api.clear.all.assign),
+[`clearConfig()`](#api.clear.config),
+[`getTemplateVars()`](#api.get.template.vars), [`assign()`](#api.assign)
+and [`append()`](#api.append)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-cache.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-cache.md
new file mode 100644
index 000000000..3e17d80c8
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-cache.md
@@ -0,0 +1,60 @@
+clearCache()
+
+clears the cache for a specific template
+
+Description
+===========
+
+void
+
+clearCache
+
+string
+
+template
+
+string
+
+cache\_id
+
+string
+
+compile\_id
+
+int
+
+expire\_time
+
+- If you have [multiple caches](#caching.multiple.caches) for a
+ template, you can clear a specific cache by supplying the `cache_id`
+ as the second parameter.
+
+- You can also pass a [`$compile_id`](#variable.compile.id) as a third
+ parameter. You can [group templates together](#caching.groups) so
+ they can be removed as a group, see the [caching section](#caching)
+ for more information.
+
+- As an optional fourth parameter, you can supply a minimum age in
+ seconds the cache file must be before it will get cleared.
+
+ > **Note**
+ >
+ > Since Smarty version 3.1.14 it is possible to delete cache files
+ > by their individual expiration time at creation by passing
+ > constant SMARTY::CLEAR\_EXPIRED as fourth parameter.
+
+<!-- -->
+
+
+ <?php
+ // clear the cache for a template
+ $smarty->clearCache('index.tpl');
+
+ // clear the cache for a particular cache id in an multiple-cache template
+ $smarty->clearCache('index.tpl', 'MY_CACHE_ID');
+ ?>
+
+
+
+See also [`clearAllCache()`](#api.clear.all.cache) and
+[`caching`](#caching) section.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-compiled-tpl.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-compiled-tpl.md
new file mode 100644
index 000000000..dfa688eb6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-compiled-tpl.md
@@ -0,0 +1,44 @@
+clearCompiledTemplate()
+
+clears the compiled version of the specified template resource
+
+Description
+===========
+
+void
+
+clearCompiledTemplate
+
+string
+
+tpl\_file
+
+string
+
+compile\_id
+
+int
+
+exp\_time
+
+This clears the compiled version of the specified template resource, or
+all compiled template files if one is not specified. If you pass a
+[`$compile_id`](#variable.compile.id) only the compiled template for
+this specific [`$compile_id`](#variable.compile.id) is cleared. If you
+pass an exp\_time, then only compiled templates older than `exp_time`
+seconds are cleared, by default all compiled templates are cleared
+regardless of their age. This function is for advanced use only, not
+normally needed.
+
+
+ <?php
+ // clear a specific template resource
+ $smarty->clearCompiledTemplate('index.tpl');
+
+ // clear entire compile directory
+ $smarty->clearCompiledTemplate();
+ ?>
+
+
+
+See also [`clearCache()`](#api.clear.cache).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-config.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-config.md
new file mode 100644
index 000000000..43e86be17
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-clear-config.md
@@ -0,0 +1,35 @@
+clearConfig()
+
+clears assigned config variables
+
+Description
+===========
+
+void
+
+clearConfig
+
+string
+
+var
+
+This clears all assigned [config variables](#language.config.variables).
+If a variable name is supplied, only that variable is cleared.
+
+
+ <?php
+ // clear all assigned config variables.
+ $smarty->clearConfig();
+
+ // clear one variable
+ $smarty->clearConfig('foobar');
+ ?>
+
+
+
+See also [`getConfigVars()`](#api.get.config.vars),
+[`config variables`](#language.config.variables),
+[`config files`](#config.files),
+[`{config_load}`](#language.function.config.load),
+[`configLoad()`](#api.config.load) and
+[`clearAssign()`](#api.clear.assign).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md
new file mode 100644
index 000000000..a102fc97e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-config.md
@@ -0,0 +1,61 @@
+compileAllConfig()
+
+compiles all known config files
+
+Description
+===========
+
+string
+
+compileAllConfig
+
+string
+
+extension
+
+boolean
+
+force
+
+integer
+
+timelimit
+
+integer
+
+maxerror
+
+This function compiles config files found in the
+[`$config_dir`](#variable.config.dir) folder. It uses the following
+parameters:
+
+- `extension` is an optional string which defines the file extension
+ for the config files. The default is \".conf\".
+
+- `force` is an optional boolean which controls if only modified
+ (false) or all (true) config files shall be compiled. The default is
+ \"false\".
+
+- `timelimit` is an optional integer to set a runtime limit in seconds
+ for the compilation process. The default is no limit.
+
+- `maxerror` is an optional integer to set an error limit. If more
+ config files failed to compile the function will be aborted. The
+ default is no limit.
+
+> **Note**
+>
+> This function may not create desired results in all configurations.
+> Use is on own risk.
+
+
+ <?php
+ include('Smarty.class.php');
+ $smarty = new Smarty;
+
+ // force compilation of all config files
+ $smarty->compileAllConfig('.config',true);
+
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md
new file mode 100644
index 000000000..53a021da8
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-compile-all-templates.md
@@ -0,0 +1,71 @@
+compileAllTemplates()
+
+compiles all known templates
+
+Description
+===========
+
+string
+
+compileAllTemplates
+
+string
+
+extension
+
+boolean
+
+force
+
+integer
+
+timelimit
+
+integer
+
+maxerror
+
+This function compiles template files found in the
+[`$template_dir`](#variable.template.dir) folder. It uses the following
+parameters:
+
+- `extension` is an optional string which defines the file extension
+ for the template files. The default is \".tpl\".
+
+- `force` is an optional boolean which controls if only modified
+ (false) or all (true) templates shall be compiled. The default is
+ \"false\".
+
+- `timelimit` is an optional integer to set a runtime limit in seconds
+ for the compilation process. The default is no limit.
+
+- `maxerror` is an optional integer to set an error limit. If more
+ templates failed to compile the function will be aborted. The
+ default is no limit.
+
+> **Note**
+>
+> This function may not create desired results in all configurations.
+> Use is on own risk.
+
+> **Note**
+>
+> If any template requires registered plugins, filters or objects you
+> must register all of them before running this function.
+
+> **Note**
+>
+> If you are using template inheritance this function will create
+> compiled files of parent templates which will never be used.
+
+
+ <?php
+ include('Smarty.class.php');
+ $smarty = new Smarty;
+
+ // force compilation of all template files
+ $smarty->compileAllTemplates('.tpl',true);
+
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-config-load.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-config-load.md
new file mode 100644
index 000000000..bf6001fa4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-config-load.md
@@ -0,0 +1,47 @@
+configLoad()
+
+loads config file data and assigns it to the template
+
+Description
+===========
+
+void
+
+configLoad
+
+string
+
+file
+
+string
+
+section
+
+This loads [config file](#config.files) data and assigns it to the
+template. This works identically to the template
+[`{config_load}`](#language.function.config.load) function.
+
+> **Note**
+>
+> As of Smarty 2.4.0, assigned template variables are kept across
+> invocations of [`fetch()`](#api.fetch) and
+> [`display()`](#api.display). Config vars loaded from `configLoad()`
+> are always global in scope. Config files are also compiled for faster
+> execution, and respect the [`$force_compile`](#variable.force.compile)
+> and [`$compile_check`](#variable.compile.check) settings.
+
+
+ <?php
+ // load config variables and assign them
+ $smarty->configLoad('my.conf');
+
+ // load a section
+ $smarty->configLoad('my.conf', 'foobar');
+ ?>
+
+
+
+See also [`{config_load}`](#language.function.config.load),
+[`getConfigVars()`](#api.get.config.vars),
+[`clearConfig()`](#api.clear.config), and
+[`config variables`](#language.config.variables)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md
new file mode 100644
index 000000000..7e083776e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-data.md
@@ -0,0 +1,52 @@
+createData()
+
+creates a data object
+
+Description
+===========
+
+string
+
+createData
+
+object
+
+parent
+
+string
+
+createData
+
+This creates a data object which will hold assigned variables. It uses
+the following parameters:
+
+- `parent` is an optional parameter. It is an uplink to the main
+ Smarty object, a another user-created data object or to user-created
+ template object. These objects can be chained. Templates can access
+ variables assigned to any of the objects in it\'s parent chain.
+
+Data objects are used to create scopes for assigned variables. They can
+be used to control which variables are seen by which templates.
+
+
+ <?php
+ include('Smarty.class.php');
+ $smarty = new Smarty;
+
+ // create data object with its private variable scope
+ $data = $smarty->createData();
+
+ // assign variable to data scope
+ $data->assign('foo','bar');
+
+ // create template object which will use variables from data object
+ $tpl = $smarty->createTemplate('index.tpl',$data);
+
+ // display the template
+ $tpl->display();
+ ?>
+
+
+
+See also [`display()`](#api.display), and
+[`createTemplate()`](#api.create.template),
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md
new file mode 100644
index 000000000..5129406d4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-create-template.md
@@ -0,0 +1,99 @@
+createTemplate()
+
+returns a template object
+
+Description
+===========
+
+Smarty\_Internal\_Template
+
+createTemplate
+
+string
+
+template
+
+object
+
+parent
+
+Smarty\_Internal\_Template
+
+createTemplate
+
+string
+
+template
+
+array
+
+data
+
+Smarty\_Internal\_Template
+
+createTemplate
+
+string
+
+template
+
+string
+
+cache\_id
+
+string
+
+compile\_id
+
+object
+
+parent
+
+Smarty\_Internal\_Template
+
+createTemplate
+
+string
+
+template
+
+string
+
+cache\_id
+
+string
+
+compile\_id
+
+array
+
+data
+
+This creates a template object which later can be rendered by the
+[display](#api.display) or [fetch](#api.fetch) method. It uses the
+following parameters:
+
+- `template` must be a valid [template resource](#resources) type and
+ path.
+
+<!-- -->
+
+
+ <?php
+ include('Smarty.class.php');
+ $smarty = new Smarty;
+
+ // create template object with its private variable scope
+ $tpl = $smarty->createTemplate('index.tpl');
+
+ // assign variable to template scope
+ $tpl->assign('foo','bar');
+
+ // display the template
+ $tpl->display();
+ ?>
+
+
+
+See also [`display()`](#api.display), and
+[`templateExists()`](#api.template.exists).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-disable-security.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-disable-security.md
new file mode 100644
index 000000000..1166828e5
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-disable-security.md
@@ -0,0 +1,15 @@
+disableSecurity()
+
+disables template security
+
+Description
+===========
+
+string
+
+disableSecurity
+
+This disables security checking on templates.
+
+See also [`enableSecurity()`](#api.enable.security), and
+[Security](#advanced.features.security).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md
new file mode 100644
index 000000000..59726195e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-display.md
@@ -0,0 +1,82 @@
+display()
+
+displays the template
+
+Description
+===========
+
+void
+
+display
+
+string
+
+template
+
+string
+
+cache\_id
+
+string
+
+compile\_id
+
+This displays the contents of a template. To return the contents of a
+template into a variable, use [`fetch()`](#api.fetch). Supply a valid
+[template resource](#resources) type and path. As an optional second
+parameter, you can pass a `$cache_id`, see the [caching
+section](#caching) for more information.
+
+PARAMETER.COMPILEID
+
+
+ <?php
+ include(SMARTY_DIR.'Smarty.class.php');
+ $smarty = new Smarty();
+ $smarty->setCaching(true);
+
+ // only do db calls if cache doesn't exist
+ if(!$smarty->isCached('index.tpl')) {
+
+ // dummy up some data
+ $address = '245 N 50th';
+ $db_data = array(
+ 'City' => 'Lincoln',
+ 'State' => 'Nebraska',
+ 'Zip' => '68502'
+ );
+
+ $smarty->assign('Name', 'Fred');
+ $smarty->assign('Address', $address);
+ $smarty->assign('data', $db_data);
+
+ }
+
+ // display the output
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+Use the syntax for [template resources](#resources) to display files
+outside of the [`$template_dir`](#variable.template.dir) directory.
+
+
+ <?php
+ // absolute filepath
+ $smarty->display('/usr/local/include/templates/header.tpl');
+
+ // absolute filepath (same thing)
+ $smarty->display('file:/usr/local/include/templates/header.tpl');
+
+ // windows absolute filepath (MUST use "file:" prefix)
+ $smarty->display('file:C:/www/pub/templates/header.tpl');
+
+ // include from template resource named "db"
+ $smarty->display('db:header.tpl');
+ ?>
+
+
+
+See also [`fetch()`](#api.fetch) and
+[`templateExists()`](#api.template.exists).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-enable-security.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-enable-security.md
new file mode 100644
index 000000000..72ee38bb9
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-enable-security.md
@@ -0,0 +1,41 @@
+enableSecurity()
+
+enables template security
+
+Description
+===========
+
+string
+
+enableSecurity
+
+string
+
+securityclass
+
+string
+
+enableSecurity
+
+object
+
+securityobject
+
+string
+
+enableSecurity
+
+This enables security checking on templates. It uses the following
+parameters:
+
+- `securityclass` is an optional parameter. It\'s the name of the
+ class with defines the security policy parameters.
+
+- `securityobject` is an optional parameter. It\'s the object with
+ defines the security policy parameters.
+
+For the details how to setup a security policy see the
+[Security](#advanced.features.security) section.
+
+See also [`disableSecurity()`](#api.disable.security), and
+[Security](#advanced.features.security).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md
new file mode 100644
index 000000000..a0c1676aa
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-fetch.md
@@ -0,0 +1,91 @@
+fetch()
+
+returns the template output
+
+Description
+===========
+
+string
+
+fetch
+
+string
+
+template
+
+string
+
+cache\_id
+
+string
+
+compile\_id
+
+This returns the template output instead of [displaying](#api.display)
+it. Supply a valid [template resource](#resources) type and path. As an
+optional second parameter, you can pass a `$cache id`, see the [caching
+section](#caching) for more information.
+
+PARAMETER.COMPILEID
+
+
+ <?php
+ include('Smarty.class.php');
+ $smarty = new Smarty;
+
+ $smarty->setCaching(true);
+
+ // set a separate cache_id for each unique URL
+ $cache_id = md5($_SERVER['REQUEST_URI']);
+
+ // capture the output
+ $output = $smarty->fetch('index.tpl', $cache_id);
+
+ // do something with $output here
+ echo $output;
+ ?>
+
+
+
+The `email_body.tpl` template
+
+
+ Dear {$contact_info.name},
+
+ Welcome and thank you for signing up as a member of our user group.
+
+ Click on the link below to login with your user name
+ of '{$contact_info.username}' so you can post in our forums.
+
+ {$login_url}
+
+ List master
+
+ {textformat wrap=40}
+ This is some long-winded disclaimer text that would automatically get wrapped
+ at 40 characters. This helps make the text easier to read in mail programs that
+ do not wrap sentences for you.
+ {/textformat}
+
+
+
+The php script using the PHP [`mail()`](&url.php-manual;function.mail)
+function
+
+
+ <?php
+
+ // get $contact_info from db or other resource here
+
+ $smarty->assign('contact_info',$contact_info);
+ $smarty->assign('login_url',"http://{$_SERVER['SERVER_NAME']}/login");
+
+ mail($contact_info['email'], 'Thank You', $smarty->fetch('email_body.tpl'));
+
+ ?>
+
+
+
+See also [`{fetch}`](#language.function.fetch)
+[`display()`](#api.display), [`{eval}`](#language.function.eval), and
+[`templateExists()`](#api.template.exists).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md
new file mode 100644
index 000000000..9e55d8d0b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-cache-dir.md
@@ -0,0 +1,23 @@
+getCacheDir()
+
+return the directory where the rendered template\'s output is stored
+
+Description
+===========
+
+string
+
+getCacheDir
+
+
+ <?php
+
+ // get directory where compiled templates are stored
+ $cacheDir = $smarty->getCacheDir();
+
+ ?>
+
+
+
+See also [`setCacheDir()`](#api.set.cache.dir) and
+[`$cache_dir`](#variable.cache.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md
new file mode 100644
index 000000000..3bfae7306
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-compile-dir.md
@@ -0,0 +1,23 @@
+getCompileDir()
+
+returns the directory where compiled templates are stored
+
+Description
+===========
+
+string
+
+getCompileDir
+
+
+ <?php
+
+ // get directory where compiled templates are stored
+ $compileDir = $smarty->getCompileDir();
+
+ ?>
+
+
+
+See also [`setCompileDir()`](#api.set.compile.dir) and
+[`$compile_dir`](#variable.compile.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-dir.md
new file mode 100644
index 000000000..f41472ca4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-dir.md
@@ -0,0 +1,40 @@
+getConfigDir()
+
+return the directory where config files are stored
+
+Description
+===========
+
+string\|array
+
+getConfigDir
+
+string
+
+key
+
+
+ <?php
+
+ // set some config directories
+ $smarty->setConfigDir(array(
+ 'one' => './config',
+ 'two' => './config_2',
+ 'three' => './config_3',
+ ));
+
+ // get all directories where config files are stored
+ $config_dir = $smarty->getConfigDir();
+ var_dump($config_dir); // array
+
+ // get directory identified by key
+ $config_dir = $smarty->getConfigDir('one');
+ var_dump($config_dir); // string
+
+ ?>
+
+
+
+See also [`setConfigDir()`](#api.set.config.dir),
+[`addConfigDir()`](#api.add.config.dir) and
+[`$config_dir`](#variable.config.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-vars.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-vars.md
new file mode 100644
index 000000000..f252e8674
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-config-vars.md
@@ -0,0 +1,37 @@
+getConfigVars()
+
+returns the given loaded config variable value
+
+Description
+===========
+
+array
+
+getConfigVars
+
+string
+
+varname
+
+If no parameter is given, an array of all loaded [config
+variables](#language.config.variables) is returned.
+
+
+ <?php
+
+ // get loaded config template var #foo#
+ $myVar = $smarty->getConfigVars('foo');
+
+ // get all loaded config template vars
+ $all_config_vars = $smarty->getConfigVars();
+
+ // take a look at them
+ print_r($all_config_vars);
+ ?>
+
+
+
+See also [`clearConfig()`](#api.clear.config),
+[`{config_load}`](#language.function.config.load),
+[`configLoad()`](#api.config.load) and
+[`getTemplateVars()`](#api.get.template.vars).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-plugins-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-plugins-dir.md
new file mode 100644
index 000000000..aa6035549
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-plugins-dir.md
@@ -0,0 +1,31 @@
+getPluginsDir()
+
+return the directory where plugins are stored
+
+Description
+===========
+
+array
+
+getPluginsDir
+
+
+ <?php
+
+ // set some plugins directories
+ $smarty->setPluginsDir(array(
+ './plugins',
+ './plugins_2',
+ ));
+
+ // get all directories where plugins are stored
+ $config_dir = $smarty->getPluginsDir();
+ var_dump($config_dir); // array
+
+ ?>
+
+
+
+See also [`setPluginsDir()`](#api.set.plugins.dir),
+[`addPluginsDir()`](#api.add.plugins.dir) and
+[`$plugins_dir`](#variable.plugins.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-registered-object.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-registered-object.md
new file mode 100644
index 000000000..a7c920e14
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-registered-object.md
@@ -0,0 +1,36 @@
+getRegisteredObject()
+
+returns a reference to a registered object
+
+Description
+===========
+
+array
+
+getRegisteredObject
+
+string
+
+object\_name
+
+This is useful from within a custom function when you need direct access
+to a [registered object](#api.register.object). See the
+[objects](#advanced.features.objects) page for more info.
+
+
+ <?php
+ function smarty_block_foo($params, $smarty)
+ {
+ if (isset($params['object'])) {
+ // get reference to registered object
+ $obj_ref = $smarty->getRegisteredObject($params['object']);
+ // use $obj_ref is now a reference to the object
+ }
+ }
+ ?>
+
+
+
+See also [`registerObject()`](#api.register.object),
+[`unregisterObject()`](#api.unregister.object) and [objects
+page](#advanced.features.objects)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md
new file mode 100644
index 000000000..7729b468b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-tags.md
@@ -0,0 +1,40 @@
+getTags()
+
+return tags used by template
+
+Description
+===========
+
+string
+
+getTags
+
+object
+
+template
+
+This function returns an array of tagname/attribute pairs for all tags
+used by the template. It uses the following parameters:
+
+- `template` is the template object.
+
+> **Note**
+>
+> This function is experimental.
+
+
+ <?php
+ include('Smarty.class.php');
+ $smarty = new Smarty;
+
+ // create template object
+ $tpl = $smarty->createTemplate('index.tpl');
+
+ // get tags
+ $tags = $smarty->getTags($tpl);
+
+ print_r($tags);
+
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md
new file mode 100644
index 000000000..42c75908b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-dir.md
@@ -0,0 +1,40 @@
+getTemplateDir()
+
+return the directory where templates are stored
+
+Description
+===========
+
+string\|array
+
+getTemplateDir
+
+string
+
+key
+
+
+ <?php
+
+ // set some template directories
+ $smarty->setTemplateDir(array(
+ 'one' => './templates',
+ 'two' => './templates_2',
+ 'three' => './templates_3',
+ ));
+
+ // get all directories where templates are stored
+ $template_dir = $smarty->getTemplateDir();
+ var_dump($template_dir); // array
+
+ // get directory identified by key
+ $template_dir = $smarty->getTemplateDir('one');
+ var_dump($template_dir); // string
+
+ ?>
+
+
+
+See also [`setTemplateDir()`](#api.set.template.dir),
+[`addTemplateDir()`](#api.add.template.dir) and
+[`$template_dir`](#variable.template.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-vars.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-vars.md
new file mode 100644
index 000000000..27882eef4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-get-template-vars.md
@@ -0,0 +1,37 @@
+getTemplateVars()
+
+returns assigned variable value(s)
+
+Description
+===========
+
+array
+
+getTemplateVars
+
+string
+
+varname
+
+If no parameter is given, an array of all [assigned](#api.assign)
+variables are returned.
+
+
+ <?php
+ // get assigned template var 'foo'
+ $myVar = $smarty->getTemplateVars('foo');
+
+ // get all assigned template vars
+ $all_tpl_vars = $smarty->getTemplateVars();
+
+ // take a look at them
+ print_r($all_tpl_vars);
+ ?>
+
+
+
+See also [`assign()`](#api.assign),
+[`{assign}`](#language.function.assign), [`append()`](#api.append),
+[`clearAssign()`](#api.clear.assign),
+[`clearAllAssign()`](#api.clear.all.assign) and
+[`getConfigVars()`](#api.get.config.vars)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md
new file mode 100644
index 000000000..0c41bf04a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-is-cached.md
@@ -0,0 +1,81 @@
+isCached()
+
+returns true if there is a valid cache for this template
+
+Description
+===========
+
+bool
+
+isCached
+
+string
+
+template
+
+string
+
+cache\_id
+
+string
+
+compile\_id
+
+- This only works if [`$caching`](#variable.caching) is set to one of
+ `Smarty::CACHING_LIFETIME_CURRENT` or
+ `Smarty::CACHING_LIFETIME_SAVED` to enable caching. See the [caching
+ section](#caching) for more info.
+
+- You can also pass a `$cache_id` as an optional second parameter in
+ case you want [multiple caches](#caching.multiple.caches) for the
+ given template.
+
+- You can supply a [`$compile id`](#variable.compile.id) as an
+ optional third parameter. If you omit that parameter the persistent
+ [`$compile_id`](#variable.compile.id) is used if its set.
+
+- If you do not want to pass a `$cache_id` but want to pass a
+ [`$compile_id`](#variable.compile.id) you have to pass NULL as a
+ `$cache_id`.
+
+> **Note**
+>
+> If `isCached()` returns TRUE it actually loads the cached output and
+> stores it internally. Any subsequent call to
+> [`display()`](#api.display) or [`fetch()`](#api.fetch) will return
+> this internally stored output and does not try to reload the cache
+> file. This prevents a race condition that may occur when a second
+> process clears the cache between the calls to `isCached()` and to
+> [`display()`](#api.display) in the example above. This also means
+> calls to [`clearCache()`](#api.clear.cache) and other changes of the
+> cache-settings may have no effect after `isCached()` returned TRUE.
+
+
+ <?php
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ if(!$smarty->isCached('index.tpl')) {
+ // do database calls, assign vars here
+ }
+
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+
+ <?php
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ if(!$smarty->isCached('index.tpl', 'FrontPage')) {
+ // do database calls, assign vars here
+ }
+
+ $smarty->display('index.tpl', 'FrontPage');
+ ?>
+
+
+
+See also [`clearCache()`](#api.clear.cache),
+[`clearAllCache()`](#api.clear.all.cache), and [caching
+section](#caching).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md
new file mode 100644
index 000000000..19286ee33
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-load-filter.md
@@ -0,0 +1,42 @@
+loadFilter()
+
+load a filter plugin
+
+Description
+===========
+
+void
+
+loadFilter
+
+string
+
+type
+
+string
+
+name
+
+The first argument specifies the type of the filter to load and can be
+one of the following: `pre`, `post` or `output`. The second argument
+specifies the `name` of the filter plugin.
+
+
+ <?php
+
+ // load prefilter named 'trim'
+ $smarty->loadFilter('pre', 'trim');
+
+ // load another prefilter named 'datefooter'
+ $smarty->loadFilter('pre', 'datefooter');
+
+ // load output filter named 'compress'
+ $smarty->loadFilter('output', 'compress');
+
+ ?>
+
+
+
+See also [`registerFilter()`](#api.register.filter),
+[`$autoload_filters`](#variable.autoload.filters) and [advanced
+features](#advanced.features).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md
new file mode 100644
index 000000000..c0c29c061
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-mute-expected-errors.md
@@ -0,0 +1,21 @@
+Smarty::muteExpectedErrors()
+
+mutes expected warnings and notices deliberately generated by Smarty
+
+Description
+===========
+
+string
+
+muteExpectedErrors
+
+muteExpectedErrors() registers a custom error handler using
+[set\_error\_handler()](&url.php-manual;set_error_handler). The error
+handler merely inspects `$errno` and `$errfile` to determine if the
+given error was produced deliberately and must be ignored, or should be
+passed on to the next error handler.
+
+`Smarty::unmuteExpectedErrors()` removes the current error handler.
+Please note, that if you\'ve registered any custom error handlers after
+the muteExpectedErrors() call, the unmute will not remove Smarty\'s
+muting error handler, but the one registered last.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md
new file mode 100644
index 000000000..60ae60308
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-cacheresource.md
@@ -0,0 +1,40 @@
+registerCacheResource()
+
+dynamically register CacheResources
+
+Description
+===========
+
+void
+
+registerCacheResource
+
+string
+
+name
+
+Smarty\_CacheResource
+
+resource\_handler
+
+Use this to dynamically register a [CacheResource
+plugin](#caching.custom) with Smarty. Pass in the `name` of the
+CacheResource and the object extending Smarty\_CacheResource. See
+[Custom Cache Implementation](#caching.custom) for more information on
+how to create custom CacheResources.
+
+> **Note**
+>
+> In Smarty2 this used to be a callback function called
+> `$cache_handler_func`. Smarty3 replaced this callback by the
+> `Smarty_CacheResource` module.
+
+
+ <?php
+ $smarty->registerCacheResource('mysql', new Smarty_CacheResource_Mysql());
+ ?>
+
+
+
+See also [`unregisterCacheResource()`](#api.unregister.cacheresource)
+and the [Custom CacheResource Implementation](#caching.custom) section.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md
new file mode 100644
index 000000000..ee339cadb
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-class.md
@@ -0,0 +1,65 @@
+registerClass()
+
+register a class for use in the templates
+
+Description
+===========
+
+void
+
+registerClass
+
+string
+
+class\_name
+
+string
+
+class\_impl
+
+Smarty allows you to access static classes from templates as long as the
+[Security Policy](#advanced.features.security) does not tell it
+otherwise. If security is enabled, classes registered with
+`registerClass()` are accessible to templates.
+
+
+ <?php
+
+ class Bar {
+ $property = "hello world";
+ }
+
+ $smarty = new Smarty();
+ $smarty->registerClass("Foo", "Bar");
+
+
+
+
+ {* Smarty will access this class as long as it's not prohibited by security *}
+ {Bar::$property}
+ {* Foo translates to the real class Bar *}
+ {Foo::$property}
+
+
+
+
+ <?php
+ namespace my\php\application {
+ class Bar {
+ $property = "hello world";
+ }
+ }
+
+ $smarty = new Smarty();
+ $smarty->registerClass("Foo", "\my\php\application\Bar");
+
+
+
+
+ {* Foo translates to the real class \my\php\application\Bar *}
+ {Foo::$property}
+
+
+
+See also [`registerObject()`](#api.register.object), and
+[Security](#advanced.features.security).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md
new file mode 100644
index 000000000..03547df71
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-default-plugin-handler.md
@@ -0,0 +1,93 @@
+registerDefaultPluginHandler()
+
+register a function which gets called on undefined tags
+
+Description
+===========
+
+void
+
+registerDefaultPluginHandler
+
+mixed
+
+callback
+
+Register a default plugin handler which gets called if the compiler can
+not find a definition for a tag otherwise. It uses the following
+parameters:
+
+If during compilation Smarty encounters tag which is not defined
+internal, registered or located in the plugins folder it tries to
+resolve it by calling the registered default plugin handler. The handler
+may be called several times for same undefined tag looping over valid
+plugin types.
+
+
+ <?php
+
+ $smarty = new Smarty();
+ $smarty->registerDefaultPluginHandler('my_plugin_handler');
+
+ /**
+ * Default Plugin Handler
+ *
+ * called when Smarty encounters an undefined tag during compilation
+ *
+ * @param string $name name of the undefined tag
+ * @param string $type tag type (e.g. Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK,
+ Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_MODIFIER, Smarty::PLUGIN_MODIFIERCOMPILER)
+ * @param Smarty_Internal_Template $template template object
+ * @param string &$callback returned function name
+ * @param string &$script optional returned script filepath if function is external
+ * @param bool &$cacheable true by default, set to false if plugin is not cachable (Smarty >= 3.1.8)
+ * @return bool true if successfull
+ */
+ function my_plugin_handler ($name, $type, $template, &$callback, &$script, &$cacheable)
+ {
+ switch ($type) {
+ case Smarty::PLUGIN_FUNCTION:
+ switch ($name) {
+ case 'scriptfunction':
+ $script = './scripts/script_function_tag.php';
+ $callback = 'default_script_function_tag';
+ return true;
+ case 'localfunction':
+ $callback = 'default_local_function_tag';
+ return true;
+ default:
+ return false;
+ }
+ case Smarty::PLUGIN_COMPILER:
+ switch ($name) {
+ case 'scriptcompilerfunction':
+ $script = './scripts/script_compiler_function_tag.php';
+ $callback = 'default_script_compiler_function_tag';
+ return true;
+ default:
+ return false;
+ }
+ case Smarty::PLUGIN_BLOCK:
+ switch ($name) {
+ case 'scriptblock':
+ $script = './scripts/script_block_tag.php';
+ $callback = 'default_script_block_tag';
+ return true;
+ default:
+ return false;
+ }
+ default:
+ return false;
+ }
+ }
+
+ ?>
+
+
+
+> **Note**
+>
+> The return callback must be static; a function name or an array of
+> class and method name.
+>
+> Dynamic callbacks like objects methods are not supported.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md
new file mode 100644
index 000000000..fd91d2661
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-filter.md
@@ -0,0 +1,45 @@
+registerFilter()
+
+dynamically register filters
+
+Description
+===========
+
+void
+
+registerFilter
+
+string
+
+type
+
+mixed
+
+callback
+
+Use this to dynamically register filters to operate on a templates. It
+uses the following parameters:
+
+NOTE.PARAMETER.FUNCTION
+
+A [prefilter](#plugins.prefilters.postfilters) runs through the template
+source before it gets compiled. See [template
+prefilters](#advanced.features.prefilters) for more information on how
+to setup a prefiltering function.
+
+A [postfilter](#plugins.prefilters.postfilters) runs through the
+template code after it was compiled to PHP. See [template
+postfilters](#advanced.features.postfilters) for more information on how
+to setup a postfiltering function.
+
+A [outputfilter](#plugins.outputfilters) operates on a template\'s
+output before it is [displayed](#api.display). See [template output
+filters](#advanced.features.outputfilters) for more information on how
+to set up an output filter function.
+
+See also [`unregisterFilter()`](#api.unregister.filter),
+[`loadFilter()`](#api.load.filter),
+[`$autoload_filters`](#variable.autoload.filters), [template pre
+filters](#advanced.features.prefilters) [template post
+filters](#advanced.features.postfilters) [template output
+filters](#advanced.features.outputfilters) section.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-object.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-object.md
new file mode 100644
index 000000000..c310e8c2a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-object.md
@@ -0,0 +1,44 @@
+registerObject()
+
+register an object for use in the templates
+
+Description
+===========
+
+void
+
+registerObject
+
+string
+
+object\_name
+
+object
+
+object
+
+array
+
+allowed\_methods\_properties
+
+boolean
+
+format
+
+array
+
+block\_methods
+
+> **Note**
+>
+> When you register/assign objects to templates, be sure that all
+> properties and methods accessed from the template are for presentation
+> purposes only. It is very easy to inject application logic through
+> objects, and this leads to poor designs that are difficult to manage.
+> See the Best Practices section of the Smarty website.
+
+See the [objects section](#advanced.features.objects) for more
+information.
+
+See also [`getRegisteredObject()`](#api.get.registered.object), and
+[`unregisterObject()`](#api.unregister.object).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md
new file mode 100644
index 000000000..6eb433810
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-plugin.md
@@ -0,0 +1,110 @@
+registerPlugin()
+
+dynamically register plugins
+
+Description
+===========
+
+void
+
+registerPlugin
+
+string
+
+type
+
+string
+
+name
+
+mixed
+
+callback
+
+bool
+
+cacheable
+
+mixed
+
+cache\_attrs
+
+This method registers functions or methods defined in your script as
+plugin. It uses the following parameters:
+
+- `cacheable` and `cache_attrs` can be omitted in most cases. See
+ [controlling cacheability of plugins output](#caching.cacheable) on
+ how to use them properly.
+
+<!-- -->
+
+
+ <?php
+ $smarty->registerPlugin("function","date_now", "print_current_date");
+
+ function print_current_date($params, $smarty)
+ {
+ if(empty($params["format"])) {
+ $format = "%b %e, %Y";
+ } else {
+ $format = $params["format"];
+ }
+ return strftime($format,time());
+ }
+ ?>
+
+
+
+And in the template
+
+
+ {date_now}
+
+ {* or to format differently *}
+ {date_now format="%Y/%m/%d"}
+
+
+ <?php
+ // function declaration
+ function do_translation ($params, $content, $smarty, &$repeat, $template)
+ {
+ if (isset($content)) {
+ $lang = $params["lang"];
+ // do some translation with $content
+ return $translation;
+ }
+ }
+
+ // register with smarty
+ $smarty->registerPlugin("block","translate", "do_translation");
+ ?>
+
+
+
+Where the template is:
+
+
+ {translate lang="br"}Hello, world!{/translate}
+
+
+
+
+ <?php
+
+ // let's map PHP's stripslashes function to a Smarty modifier.
+ $smarty->registerPlugin("modifier","ss", "stripslashes");
+
+ ?>
+
+In the template, use `ss` to strip slashes.
+
+
+ <?php
+ {$var|ss}
+ ?>
+
+See also [`unregisterPlugin()`](#api.unregister.plugin), [plugin
+functions](#plugins.functions), [plugin block
+functions](#plugins.block.functions), [plugin compiler
+functions](#plugins.compiler.functions), and the [creating plugin
+modifiers](#plugins.modifiers) section.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md
new file mode 100644
index 000000000..ca4005460
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-register-resource.md
@@ -0,0 +1,46 @@
+registerResource()
+
+dynamically register resources
+
+Description
+===========
+
+void
+
+registerResource
+
+string
+
+name
+
+Smarty\_resource
+
+resource\_handler
+
+Use this to dynamically register a [Resource plugin](#resources) with
+Smarty. Pass in the `name` of the Resource and the object extending
+Smarty\_Resource. See [template resources](#resources) for more
+information on how to setup a function for fetching templates.
+
+> **Note**
+>
+> A resource name must be at least two characters in length. One
+> character resource names will be ignored and used as part of the file
+> path, such as `$smarty->display('c:/path/to/index.tpl');`
+
+> **Note**
+>
+> Prior to Smarty 3.1 `registerResource()` accepted an array of callback
+> functions. While this is still possible for backward compatibility
+> reasons, it is strongly discouraged as callback functions have been
+> deprecated as of Smarty 3.1.
+
+
+ <?php
+ $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
+ ?>
+
+
+
+See also [`unregisterResource()`](#api.unregister.resource) and the
+[template resources](#resources) section.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md
new file mode 100644
index 000000000..7f7c4b60d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-cache-dir.md
@@ -0,0 +1,32 @@
+setCacheDir()
+
+set the directory where the rendered template\'s output is stored
+
+Description
+===========
+
+Smarty
+
+setCacheDir
+
+string
+
+cache\_dir
+
+
+ <?php
+
+ // set directory where rendered template's output is stored
+ $smarty->setCacheDir('./cache');
+
+ // chaining of method calls
+ $smarty->setTemplateDir('./templates')
+ ->setCompileDir('./templates_c')
+ ->setCacheDir('./cache');
+
+ ?>
+
+
+
+See also [`getCacheDir()`](#api.get.cache.dir) and
+[`$cache_dir`](#variable.cache.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md
new file mode 100644
index 000000000..bfeb55a53
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-compile-dir.md
@@ -0,0 +1,32 @@
+setCompileDir()
+
+set the directory where compiled templates are stored
+
+Description
+===========
+
+Smarty
+
+setCompileDir
+
+string
+
+compile\_dir
+
+
+ <?php
+
+ // set directory where compiled templates are stored
+ $smarty->setCompileDir('./templates_c');
+
+ // chaining of method calls
+ $smarty->setTemplateDir('./templates')
+ ->setCompileDir('./templates_c')
+ ->setCacheDir('./cache');
+
+ ?>
+
+
+
+See also [`getCompileDir()`](#api.get.compile.dir) and
+[`$compile_dir`](#variable.compile.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md
new file mode 100644
index 000000000..97a6ae977
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-config-dir.md
@@ -0,0 +1,47 @@
+setConfigDir()
+
+set the directories where config files are stored
+
+Description
+===========
+
+Smarty
+
+setConfigDir
+
+string\|array
+
+config\_dir
+
+
+ <?php
+
+ // set a single directory where the config files are stored
+ $smarty->setConfigDir('./config');
+
+ // view the config dir chain
+ var_dump($smarty->getConfigDir());
+
+ // set multiple directoríes where config files are stored
+ $smarty->setConfigDir(array(
+ 'one' => './config',
+ 'two' => './config_2',
+ 'three' => './config_3',
+ ));
+
+ // view the config dir chain
+ var_dump($smarty->getConfigDir());
+
+ // chaining of method calls
+ $smarty->setTemplateDir('./templates')
+ ->setConfigDir('./config')
+ ->setCompileDir('./templates_c')
+ ->setCacheDir('./cache');
+
+ ?>
+
+
+
+See also [`getConfigDir()`](#api.get.config.dir),
+[`addConfigDir()`](#api.add.config.dir) and
+[`$config_dir`](#variable.config.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-plugins-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-plugins-dir.md
new file mode 100644
index 000000000..25b0567b1
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-plugins-dir.md
@@ -0,0 +1,46 @@
+setPluginsDir()
+
+set the directories where plugins are stored
+
+Description
+===========
+
+Smarty
+
+setPluginsDir
+
+string\|array
+
+plugins\_dir
+
+
+ <?php
+
+ // set a single directory where the plugins are stored
+ $smarty->setPluginsDir('./plugins');
+
+ // view the plugins dir chain
+ var_dump($smarty->getPluginsDir());
+
+ // set multiple directoríes where plugins are stored
+ $smarty->setPluginsDir(array(
+ './plugins',
+ './plugins_2',
+ ));
+
+ // view the plugins dir chain
+ var_dump($smarty->getPluginsDir());
+
+ // chaining of method calls
+ $smarty->setTemplateDir('./templates')
+ ->setPluginsDir('./plugins')
+ ->setCompileDir('./templates_c')
+ ->setCacheDir('./cache');
+
+ ?>
+
+
+
+See also [`getPluginsDir()`](#api.get.plugins.dir),
+[`addPluginsDir()`](#api.add.plugins.dir) and
+[`$plugins_dir`](#variable.plugins.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md
new file mode 100644
index 000000000..2de23309b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-set-template-dir.md
@@ -0,0 +1,46 @@
+setTemplateDir()
+
+set the directories where templates are stored
+
+Description
+===========
+
+Smarty
+
+setTemplateDir
+
+string\|array
+
+template\_dir
+
+
+ <?php
+
+ // set a single directory where the templates are stored
+ $smarty->setTemplateDir('./cache');
+
+ // view the template dir chain
+ var_dump($smarty->getTemplateDir());
+
+ // set multiple directoríes where templates are stored
+ $smarty->setTemplateDir(array(
+ 'one' => './templates',
+ 'two' => './templates_2',
+ 'three' => './templates_3',
+ ));
+
+ // view the template dir chain
+ var_dump($smarty->getTemplateDir());
+
+ // chaining of method calls
+ $smarty->setTemplateDir('./templates')
+ ->setCompileDir('./templates_c')
+ ->setCacheDir('./cache');
+
+ ?>
+
+
+
+See also [`getTemplateDir()`](#api.get.template.dir),
+[`addTemplateDir()`](#api.add.template.dir) and
+[`$template_dir`](#variable.template.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md
new file mode 100644
index 000000000..07f61b12e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-template-exists.md
@@ -0,0 +1,59 @@
+templateExists()
+
+checks whether the specified template exists
+
+Description
+===========
+
+bool
+
+templateExists
+
+string
+
+template
+
+It can accept either a path to the template on the filesystem or a
+resource string specifying the template.
+
+This example uses `$_GET['page']` to
+[`{include}`](#language.function.include) a content template. If the
+template does not exist then an error page is displayed instead. First
+the `page_container.tpl`
+
+
+ <html>
+ <head><title>{$title}</title></head>
+ <body>
+ {include file='page_top.tpl'}
+
+ {* include middle content page *}
+ {include file=$content_template}
+
+ {include file='page_footer.tpl'}
+ </body>
+
+
+
+And the php script
+
+
+ <?php
+
+ // set the filename eg index.inc.tpl
+ $mid_template = $_GET['page'].'.inc.tpl';
+
+ if( !$smarty->templateExists($mid_template) ){
+ $mid_template = 'page_not_found.tpl';
+ }
+ $smarty->assign('content_template', $mid_template);
+
+ $smarty->display('page_container.tpl');
+
+ ?>
+
+
+
+See also [`display()`](#api.display), [`fetch()`](#api.fetch),
+[`{include}`](#language.function.include) and
+[`{insert}`](#language.function.insert)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md
new file mode 100644
index 000000000..918bd220a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-test-install.md
@@ -0,0 +1,22 @@
+testInstall()
+
+checks Smarty installation
+
+Description
+===========
+
+void
+
+testInstall
+
+This function verifies that all required working folders of the Smarty
+installation can be accessed. It does output a corresponding protocol.
+
+
+ <?php
+ require_once('Smarty.class.php');
+ $smarty = new Smarty();
+ $smarty->testInstall();
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-cacheresource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-cacheresource.md
new file mode 100644
index 000000000..d097519db
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-cacheresource.md
@@ -0,0 +1,28 @@
+unregisterCacheResource()
+
+dynamically unregister a CacheResource plugin
+
+Description
+===========
+
+void
+
+unregisterCacheResource
+
+string
+
+name
+
+Pass in the `name` of the CacheResource.
+
+
+ <?php
+
+ $smarty->unregisterCacheResource('mysql');
+
+ ?>
+
+
+
+See also [`registerCacheResource()`](#api.register.cacheresource) and
+the [Custom CacheResource Implementation](#caching.custom) section.
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-filter.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-filter.md
new file mode 100644
index 000000000..44020eb40
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-filter.md
@@ -0,0 +1,23 @@
+unregisterFilter()
+
+dynamically unregister a filter
+
+Description
+===========
+
+void
+
+unregisterFilter
+
+string
+
+type
+
+string\|array
+
+callback
+
+Use this to dynamically unregister filters. It uses the following
+parameters:
+
+See also [`registerFilter()`](#api.register.filter).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-object.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-object.md
new file mode 100644
index 000000000..c012581f9
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-object.md
@@ -0,0 +1,17 @@
+unregisterObject()
+
+dynamically unregister an object
+
+Description
+===========
+
+void
+
+unregisterObject
+
+string
+
+object\_name
+
+See also [`registerObject()`](#api.register.object) and [objects
+section](#advanced.features.objects)
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-plugin.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-plugin.md
new file mode 100644
index 000000000..c692ac60f
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-plugin.md
@@ -0,0 +1,36 @@
+unregisterPlugin
+
+dynamically unregister plugins
+
+Description
+===========
+
+void
+
+unregisterPlugin
+
+string
+
+type
+
+string
+
+name
+
+This method unregisters plugins which previously have been registered by
+[registerPlugin()](#api.register.plugin), It uses the following
+parameters:
+
+<!-- -->
+
+
+ <?php
+
+ // we don't want template designers to have access to function plugin "date_now"
+ $smarty->unregisterPlugin("function","date_now");
+
+ ?>
+
+
+
+See also [`registerPlugin()`](#api.register.plugin).
diff --git a/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-resource.md b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-resource.md
new file mode 100644
index 000000000..1a6067bd2
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-functions/api-unregister-resource.md
@@ -0,0 +1,28 @@
+unregisterResource()
+
+dynamically unregister a resource plugin
+
+Description
+===========
+
+void
+
+unregisterResource
+
+string
+
+name
+
+Pass in the `name` of the resource.
+
+
+ <?php
+
+ $smarty->unregisterResource('db');
+
+ ?>
+
+
+
+See also [`registerResource()`](#api.register.resource) and [template
+resources](#resources)
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables.md b/vendor/smarty/smarty/docs/programmers/api-variables.md
new file mode 100644
index 000000000..ee9c07611
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables.md
@@ -0,0 +1,63 @@
+Smarty Class Variables {#api.variables}
+======================
+
+These are all of the available Smarty class variables. You can access
+them directly, or use the corresponding setter/getter methods.
+
+- [$allow_php_templates](./api-variables/variable-allow-php-templates.md)
+- [$auto_literal](./api-variables/variable-auto-literal.md)
+- [$autoload_filters](./api-variables/variable-autoload-filters.md)
+- [$cache_dir](./api-variables/variable-cache-dir.md)
+- [$cache_id](./api-variables/variable-cache-id.md)
+- [$cache_lifetime](./api-variables/variable-cache-lifetime.md)
+- [$cache_locking](./api-variables/variable-cache-locking.md)
+- [$cache_modified_check](./api-variables/variable-cache-modified-check.md)
+- [$caching](./api-variables/variable-caching.md)
+- [$caching_type](./api-variables/variable-caching-type.md)
+- [$compile_check](./api-variables/variable-compile-check.md)
+- [$compile_dir](./api-variables/variable-compile-dir.md)
+- [$compile_id](./api-variables/variable-compile-id.md)
+- [$compile_locking](./api-variables/variable-compile-locking.md)
+- [$compiler_class](./api-variables/variable-compiler-class.md)
+- [$config_booleanize](./api-variables/variable-config-booleanize.md)
+- [$config_dir](./api-variables/variable-config-dir.md)
+- [$config_overwrite](./api-variables/variable-config-overwrite.md)
+- [$config_read_hidden](./api-variables/variable-config-read-hidden.md)
+- [$debug_tpl](./api-variables/variable-debug-template.md)
+- [$debugging](./api-variables/variable-debugging.md)
+- [$debugging_ctrl](./api-variables/variable-debugging-ctrl.md)
+- [$default_config_type](./api-variables/variable-default-config-type.md)
+- [$default_modifiers](./api-variables/variable-default-modifiers.md)
+- [$default_resource_type](./api-variables/variable-default-resource-type.md)
+- [$default_config_handler_func](./api-variables/variable-default-config-handler-func.md)
+- [$default_template_handler_func](./api-variables/variable-default-template-handler-func.md)
+- [$direct_access_security](./api-variables/variable-direct-access-security.md)
+- [$error_reporting](./api-variables/variable-error-reporting.md)
+- [$escape_html](./api-variables/variable-escape-html.md)
+- [$force_cache](./api-variables/variable-force-cache.md)
+- [$force_compile](./api-variables/variable-force-compile.md)
+- [$left_delimiter](./api-variables/variable-left-delimiter.md)
+- [$locking_timeout](./api-variables/variable-locking-timeout.md)
+- [$merge_compiled_includes](./api-variables/variable-merge-compiled-includes.md)
+- [$plugins_dir](./api-variables/variable-plugins-dir.md)
+- [$right_delimiter](./api-variables/variable-right-delimiter.md)
+- [$smarty_debug_id](./api-variables/variable-smarty-debug-id.md)
+- [$template_dir](./api-variables/variable-template-dir.md)
+- [$trusted_dir](./api-variables/variable-trusted-dir.md)
+- [$use_include_path](./api-variables/variable-use-include-path.md)
+- [$use_sub_dirs](./api-variables/variable-use-sub-dirs.md)
+
+> **Note**
+>
+> All class variables have magic setter/getter methods available.
+> setter/getter methods are camelCaseFormat, unlike the variable itself.
+> So for example, you can set and get the \$smarty-\>template\_dir
+> variable with \$smarty-\>setTemplateDir(\$dir) and \$dir =
+> \$smarty-\>getTemplateDir() respectively.
+
+> **Note**
+>
+> See
+> [`Changing settings by template`](./advanced-features/advanced-features-template-settings.md)
+> section for how to change Smarty class variables for individual
+> templates.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md
new file mode 100644
index 000000000..e15520e2d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-allow-php-templates.md
@@ -0,0 +1,18 @@
+\$allow\_php\_templates {#variable.allow.php.templates}
+=======================
+
+By default the PHP template file resource is disabled. Setting
+`$allow_php_templates` to TRUE will enable PHP template files.
+
+::: {.informalexample}
+
+ <?php
+ $smarty->allow_php_templates = true;
+ ?>
+
+
+:::
+
+> **Note**
+>
+> The PHP template file resource is an undocumented deprecated feature.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-auto-literal.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-auto-literal.md
new file mode 100644
index 000000000..e5ddb34fc
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-auto-literal.md
@@ -0,0 +1,17 @@
+\$auto\_literal {#variable.auto.literal}
+===============
+
+The Smarty delimiter tags { and } will be ignored so long as they are
+surrounded by white space. This behavior can be disabled by setting
+auto\_literal to false.
+
+::: {.informalexample}
+
+ <?php
+ $smarty->auto_literal = false;
+ ?>
+
+
+:::
+
+See also [Escaping Smarty Parsing](#language.escaping),
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md
new file mode 100644
index 000000000..8a300b065
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-autoload-filters.md
@@ -0,0 +1,21 @@
+\$autoload\_filters {#variable.autoload.filters}
+===================
+
+If there are some filters that you wish to load on every template
+invocation, you can specify them using this variable and Smarty will
+automatically load them for you. The variable is an associative array
+where keys are filter types and values are arrays of the filter names.
+For example:
+
+::: {.informalexample}
+
+ <?php
+ $smarty->autoload_filters = array('pre' => array('trim', 'stamp'),
+ 'output' => array('convert'));
+ ?>
+
+
+:::
+
+See also [`registerFilter()`](#api.register.filter) and
+[`loadFilter()`](#api.load.filter)
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-dir.md
new file mode 100644
index 000000000..6cb2b5559
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-dir.md
@@ -0,0 +1,35 @@
+\$cache\_dir {#variable.cache.dir}
+============
+
+This is the name of the directory where template caches are stored. By
+default this is `./cache`, meaning that Smarty will look for the
+`cache/` directory in the same directory as the executing php script.
+**This directory must be writeable by the web server**, [see
+install](#installing.smarty.basic) for more info.
+
+You can also use your own [custom cache implementation](#caching.custom)
+to control cache files, which will ignore this setting. See also
+[`$use_sub_dirs`](#variable.use.sub.dirs).
+
+> **Note**
+>
+> This setting must be either a relative or absolute path. include\_path
+> is not used for writing files.
+
+> **Note**
+>
+> It is not recommended to put this directory under the web server
+> document root.
+
+> **Note**
+>
+> As of Smarty 3.1 the attribute \$cache\_dir is no longer accessible
+> directly. Use [`getCacheDir()`](#api.get.cache.dir) and
+> [`setCacheDir()`](#api.set.cache.dir) instead.
+
+See also [`getCacheDir()`](#api.get.cache.dir),
+[`setCacheDir()`](#api.set.cache.dir), [`$caching`](#variable.caching),
+[`$use_sub_dirs`](#variable.use.sub.dirs),
+[`$cache_lifetime`](#variable.cache.lifetime),
+[`$cache_modified_check`](#variable.cache.modified.check) and the
+[caching section](#caching).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-id.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-id.md
new file mode 100644
index 000000000..c27fae921
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-id.md
@@ -0,0 +1,11 @@
+\$cache\_id {#variable.cache.id}
+===========
+
+Persistent cache\_id identifier. As an alternative to passing the same
+`$cache_id` to each and every function call, you can set this
+`$cache_id` and it will be used implicitly thereafter.
+
+With a `$cache_id` you can have multiple cache files for a single call
+to [`display()`](#api.display) or [`fetch()`](#api.fetch) depending for
+example from different content of the same template. See the [caching
+section](#caching) for more information.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md
new file mode 100644
index 000000000..c9624b556
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-lifetime.md
@@ -0,0 +1,30 @@
+\$cache\_lifetime {#variable.cache.lifetime}
+=================
+
+This is the length of time in seconds that a template cache is valid.
+Once this time has expired, the cache will be regenerated.
+
+- `$caching` must be turned on (either
+ Smarty::CACHING\_LIFETIME\_CURRENT or
+ Smarty::CACHING\_LIFETIME\_SAVED) for `$cache_lifetime` to have any
+ purpose.
+
+- A `$cache_lifetime` value of -1 will force the cache to never
+ expire.
+
+- A value of 0 will cause the cache to always regenerate (good for
+ testing only, to disable caching a more efficient method is to set
+ [`$caching`](#variable.caching) = Smarty::CACHING\_OFF).
+
+- If you want to give certain templates their own cache lifetime, you
+ could do this by setting [`$caching`](#variable.caching) =
+ Smarty::CACHING\_LIFETIME\_SAVED, then set `$cache_lifetime` to a
+ unique value just before calling [`display()`](#api.display) or
+ [`fetch()`](#api.fetch).
+
+If [`$force_compile`](#variable.force.compile) is enabled, the cache
+files will be regenerated every time, effectively disabling caching. You
+can clear all the cache files with the
+[`clear_all_cache()`](#api.clear.all.cache) function, or individual
+cache files (or groups) with the [`clear_cache()`](#api.clear.cache)
+function.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-locking.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-locking.md
new file mode 100644
index 000000000..6dca30c7b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-locking.md
@@ -0,0 +1,11 @@
+\$cache\_locking {#variable.cache.locking}
+================
+
+Cache locking avoids concurrent cache generation. This means resource
+intensive pages can be generated only once, even if they\'ve been
+requested multiple times in the same moment.
+
+Cache locking is disabled by default. To enable it set `$cache_locking`
+to TRUE.
+
+See also [`$locking_timeout`](#variable.locking.timeout)
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md
new file mode 100644
index 000000000..05e00bb91
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-cache-modified-check.md
@@ -0,0 +1,12 @@
+\$cache\_modified\_check {#variable.cache.modified.check}
+========================
+
+If set to TRUE, Smarty will respect the If-Modified-Since header sent
+from the client. If the cached file timestamp has not changed since the
+last visit, then a `'304: Not Modified'` header will be sent instead of
+the content. This works only on cached content without
+[`{insert}`](#language.function.insert) tags.
+
+See also [`$caching`](#variable.caching),
+[`$cache_lifetime`](#variable.cache.lifetime), and the [caching
+section](#caching).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching-type.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching-type.md
new file mode 100644
index 000000000..22b88cf6a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching-type.md
@@ -0,0 +1,9 @@
+\$caching\_type {#variable.caching.type}
+===============
+
+This property specifies the name of the caching handler to use. It
+defaults to `file`, enabling the internal filesystem based cache
+handler.
+
+See [Custom Cache Implementation](#caching.custom) for pointers on
+setting up your own cache handler.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md
new file mode 100644
index 000000000..9377e3b6d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-caching.md
@@ -0,0 +1,38 @@
+\$caching {#variable.caching}
+=========
+
+This tells Smarty whether or not to cache the output of the templates to
+the [`$cache_dir`](#variable.cache.dir). By default this is set to the
+constant Smarty::CACHING\_OFF. If your templates consistently generate
+the same content, it is advisable to turn on `$caching`, as this may
+result in significant performance gains.
+
+You can also have [multiple](#caching.multiple.caches) caches for the
+same template.
+
+- A constant value of Smarty::CACHING\_LIFETIME\_CURRENT or
+ Smarty::CACHING\_LIFETIME\_SAVED enables caching.
+
+- A value of Smarty::CACHING\_LIFETIME\_CURRENT tells Smarty to use
+ the current [`$cache_lifetime`](#variable.cache.lifetime) variable
+ to determine if the cache has expired.
+
+- A value of Smarty::CACHING\_LIFETIME\_SAVED tells Smarty to use the
+ [`$cache_lifetime`](#variable.cache.lifetime) value at the time the
+ cache was generated. This way you can set the
+ [`$cache_lifetime`](#variable.cache.lifetime) just before
+ [fetching](#api.fetch) the template to have granular control over
+ when that particular cache expires. See also
+ [`isCached()`](#api.is.cached).
+
+- If [`$compile_check`](#variable.compile.check) is enabled, the
+ cached content will be regenerated if any of the templates or config
+ files that are part of this cache are changed.
+
+- If [`$force_compile`](#variable.force.compile) is enabled, the
+ cached content will always be regenerated.
+
+See also [`$cache_dir`](#variable.cache.dir),
+[`$cache_lifetime`](#variable.cache.lifetime),
+[`$cache_modified_check`](#variable.cache.modified.check),
+[`is_cached()`](#api.is.cached) and the [caching section](#caching).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md
new file mode 100644
index 000000000..c0582d4d4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-check.md
@@ -0,0 +1,27 @@
+\$compile\_check {#variable.compile.check}
+================
+
+Upon each invocation of the PHP application, Smarty tests to see if the
+current template has changed (different timestamp) since the last time
+it was compiled. If it has changed, it recompiles that template. If the
+template has yet not been compiled at all, it will compile regardless of
+this setting. By default this variable is set to TRUE.
+
+Once an application is put into production (ie the templates won\'t be
+changing), the compile check step is no longer needed. Be sure to set
+`$compile_check` to FALSE for maximum performance. Note that if you
+change this to FALSE and a template file is changed, you will \*not\*
+see the change since the template will not get recompiled.
+
+If [`$caching`](#variable.caching) is enabled and `$compile_check` is
+enabled, then the cache files will get regenerated if an involved
+template file or config file was updated.
+
+As of Smarty 3.1 `$compile_check` can be set to the value
+`Smarty::COMPILECHECK_CACHEMISS`. This enables Smarty to revalidate the
+compiled template, once a cache file is regenerated. So if there was a
+cached template, but it\'s expired, Smarty will run a single
+compile\_check before regenerating the cache.
+
+See [`$force_compile`](#variable.force.compile) and
+[`clearCompiledTemplate()`](#api.clear.compiled.tpl).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-dir.md
new file mode 100644
index 000000000..c18c9acba
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-dir.md
@@ -0,0 +1,29 @@
+\$compile\_dir {#variable.compile.dir}
+==============
+
+This is the name of the directory where compiled templates are located.
+By default this is `./templates_c`, meaning that Smarty will look for
+the `templates_c/` directory in the same directory as the executing php
+script. **This directory must be writeable by the web server**, [see
+install](#installing.smarty.basic) for more info.
+
+> **Note**
+>
+> This setting must be either a relative or absolute path. include\_path
+> is not used for writing files.
+
+> **Note**
+>
+> It is not recommended to put this directory under the web server
+> document root.
+
+> **Note**
+>
+> As of Smarty 3.1 the attribute \$compile\_dir is no longer accessible
+> directly. Use [`getCompileDir()`](#api.get.compile.dir) and
+> [`setCompileDir()`](#api.set.compile.dir) instead.
+
+See also [`getCompileDir()`](#api.get.compile.dir),
+[`setCompileDir()`](#api.set.compile.dir),
+[`$compile_id`](#variable.compile.id) and
+[`$use_sub_dirs`](#variable.use.sub.dirs).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-id.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-id.md
new file mode 100644
index 000000000..ca2b08fb5
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-id.md
@@ -0,0 +1,44 @@
+\$compile\_id {#variable.compile.id}
+=============
+
+Persistent compile identifier. As an alternative to passing the same
+`$compile_id` to each and every function call, you can set this
+`$compile_id` and it will be used implicitly thereafter.
+
+If you use the same template with different [pre- and/or
+post-filters](#plugins.prefilters.postfilters) you must use a unique
+`$compile_id` to keep the compiled template files separated.
+
+For example a [prefilter](#plugins.prefilters.postfilters) that
+localizes your templates (that is: translates language dependent parts)
+at compile time, then you could use the current language as
+`$compile_id` and you will get a set of compiled templates for each
+language you use.
+
+
+ <?php
+ $smarty->compile_id = 'en';
+ ?>
+
+
+
+Another application would be to use the same compile directory across
+multiple domains / multiple virtual hosts.
+
+
+ <?php
+
+ $smarty->compile_id = $_SERVER['SERVER_NAME'];
+ $smarty->compile_dir = '/path/to/shared_compile_dir';
+
+ ?>
+
+
+
+> **Note**
+>
+> In Smarty 3 a `$compile_id` is no longer required to keep templates
+> with same name in different [`$template_dir`
+> folders](#variable.template.dir) separated. The [`$template_dir` file
+> path](#variable.template.dir) is encoded in the file name of compiled
+> and cached template files.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-locking.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-locking.md
new file mode 100644
index 000000000..ff7a66f3a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compile-locking.md
@@ -0,0 +1,7 @@
+\$compile\_locking {#variable.compile.locking}
+==================
+
+Compile locking avoids concurrent compilation of the same template.
+
+Compile locking is enabled by default. To disable it set
+`$compile_locking` to FALSE.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-compiler-class.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compiler-class.md
new file mode 100644
index 000000000..32ea982d6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-compiler-class.md
@@ -0,0 +1,6 @@
+\$compiler\_class {#variable.compiler.class}
+=================
+
+Specifies the name of the compiler class that Smarty will use to compile
+the templates. The default is \'Smarty\_Compiler\'. For advanced users
+only.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-booleanize.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-booleanize.md
new file mode 100644
index 000000000..4ba555f84
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-booleanize.md
@@ -0,0 +1,8 @@
+\$config\_booleanize {#variable.config.booleanize}
+====================
+
+If set to TRUE, [config files](#config.files) values of `on/true/yes`
+and `off/false/no` get converted to boolean values automatically. This
+way you can use the values in the template like so:
+`{if #foobar#}...{/if}`. If foobar was `on`, `true` or `yes`, the `{if}`
+statement will execute. Defaults to TRUE.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-dir.md
new file mode 100644
index 000000000..d73f3274f
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-dir.md
@@ -0,0 +1,23 @@
+\$config\_dir {#variable.config.dir}
+=============
+
+This is the directory used to store [config files](#config.files) used
+in the templates. Default is `./configs`, meaning that Smarty will look
+for the `configs/` directory in the same directory as the executing php
+script.
+
+> **Note**
+>
+> It is not recommended to put this directory under the web server
+> document root.
+
+> **Note**
+>
+> As of Smarty 3.1 the attribute \$config\_dir is no longer accessible
+> directly. Use [`getConfigDir()`](#api.get.config.dir),
+> [`setConfigDir()`](#api.set.config.dir) and
+> [`addConfigDir()`](#api.add.config.dir) instead.
+
+See also [`getConfigDir()`](#api.get.config.dir),
+[`setConfigDir()`](#api.set.config.dir) and
+[`addConfigDir()`](#api.add.config.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-overwrite.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-overwrite.md
new file mode 100644
index 000000000..0b8968374
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-overwrite.md
@@ -0,0 +1,40 @@
+\$config\_overwrite {#variable.config.overwrite}
+===================
+
+If set to TRUE, the default then variables read in from [config
+files](#config.files) will overwrite each other. Otherwise, the
+variables will be pushed onto an array. This is helpful if you want to
+store arrays of data in config files, just list each element multiple
+times.
+
+This examples uses [`{cycle}`](#language.function.cycle) to output a
+table with alternating red/green/blue row colors with
+`$config_overwrite` = FALSE.
+
+The config file.
+
+
+ # row colors
+ rowColors = #FF0000
+ rowColors = #00FF00
+ rowColors = #0000FF
+
+
+
+The template with a [`{section}`](#language.function.section) loop.
+
+
+ <table>
+ {section name=r loop=$rows}
+ <tr bgcolor="{cycle values=#rowColors#}">
+ <td> ....etc.... </td>
+ </tr>
+ {/section}
+ </table>
+
+
+
+See also [`{config_load}`](#language.function.config.load),
+[`getConfigVars()`](#api.get.config.vars),
+[`clearConfig()`](#api.clear.config), [`configLoad()`](#api.config.load)
+and the [config files section](#config.files).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-read-hidden.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-read-hidden.md
new file mode 100644
index 000000000..19cde68bd
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-config-read-hidden.md
@@ -0,0 +1,8 @@
+\$config\_read\_hidden {#variable.config.read.hidden}
+======================
+
+If set to TRUE, hidden sections ie section names beginning with a
+period(.) in [config files](#config.files) can be read from templates.
+Typically you would leave this FALSE, that way you can store sensitive
+data in the config files such as database parameters and not worry about
+the template loading them. FALSE by default.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md
new file mode 100644
index 000000000..faec0e171
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debug-template.md
@@ -0,0 +1,9 @@
+\$debug\_tpl {#variable.debug_template}
+============
+
+This is the name of the template file used for the debugging console. By
+default, it is named `debug.tpl` and is located in the
+[`SMARTY_DIR`](#constant.smarty.dir).
+
+See also [`$debugging`](#variable.debugging) and the [debugging
+console](#chapter.debugging.console) section.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging-ctrl.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging-ctrl.md
new file mode 100644
index 000000000..a9355c0a2
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging-ctrl.md
@@ -0,0 +1,20 @@
+\$debugging\_ctrl {#variable.debugging.ctrl}
+=================
+
+This allows alternate ways to enable debugging. `NONE` means no
+alternate methods are allowed. `URL` means when the keyword
+`SMARTY_DEBUG` is found in the `QUERY_STRING`, debugging is enabled for
+that invocation of the script. If [`$debugging`](#variable.debugging) is
+TRUE, this value is ignored.
+
+
+ <?php
+ // shows debug console only on localhost ie
+ // http://localhost/script.php?foo=bar&SMARTY_DEBUG
+ $smarty->debugging = false; // the default
+ $smarty->debugging_ctrl = ($_SERVER['SERVER_NAME'] == 'localhost') ? 'URL' : 'NONE';
+ ?>
+
+See also [debugging console](#chapter.debugging.console) section,
+[`$debugging`](#variable.debugging) and
+[`$smarty_debug_id`](#variable.smarty.debug.id).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging.md
new file mode 100644
index 000000000..4473e0c8d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-debugging.md
@@ -0,0 +1,17 @@
+\$debugging {#variable.debugging}
+===========
+
+This enables the [debugging console](#chapter.debugging.console). The
+console is a javascript popup window that informs you of the
+[included](#language.function.include) templates, variables
+[assigned](#api.assign) from php and [config file
+variables](#language.config.variables) for the current script. It does
+not show variables assigned within a template with the
+[`{assign}`](#language.function.assign) function.
+
+The console can also be enabled from the url with
+[`$debugging_ctrl`](#variable.debugging.ctrl).
+
+See also [`{debug}`](#language.function.debug),
+[`$debug_tpl`](#variable.debug_template), and
+[`$debugging_ctrl`](#variable.debugging.ctrl).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md
new file mode 100644
index 000000000..0d6ec5e0d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-handler-func.md
@@ -0,0 +1,50 @@
+\$default\_config\_handler\_func {#variable.default.config.handler.func}
+================================
+
+This function is called when a config file cannot be obtained from its
+resource.
+
+> **Note**
+>
+> The default handler is currently only invoked for file resources. It
+> is not triggered when the resource itself cannot be found, in which
+> case a SmartyException is thrown.
+
+
+ <?php
+
+ $smarty = new Smarty();
+ $smarty->default_config_handler_func = 'my_default_config_handler_func';
+
+ /**
+ * Default Config Handler
+ *
+ * called when Smarty's file: resource is unable to load a requested file
+ *
+ * @param string $type resource type (e.g. "file", "string", "eval", "resource")
+ * @param string $name resource name (e.g. "foo/bar.tpl")
+ * @param string &$content config's content
+ * @param integer &$modified config's modification time
+ * @param Smarty $smarty Smarty instance
+ * @return string|boolean path to file or boolean true if $content and $modified
+ * have been filled, boolean false if no default config
+ * could be loaded
+ */
+ function my_default_config_handler_func($type, $name, &$content, &$modified, Smarty $smarty) {
+ if (false) {
+ // return corrected filepath
+ return "/tmp/some/foobar.tpl";
+ } elseif (false) {
+ // return a config directly
+ $content = 'someVar = "the config source"';
+ $modified = time();
+ return true;
+ } else {
+ // tell smarty that we failed
+ return false;
+ }
+ }
+
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-type.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-type.md
new file mode 100644
index 000000000..60bf9f1ea
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-config-type.md
@@ -0,0 +1,7 @@
+\$default\_config\_type {#variable.default.config.type}
+=======================
+
+This tells smarty what resource type to use for config files. The
+default value is `file`, meaning that `$smarty->configLoad('test.conf')`
+and `$smarty->configLoad('file:test.conf')` are identical in meaning.
+See the [resource](#resources) chapter for more details.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-modifiers.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-modifiers.md
new file mode 100644
index 000000000..c6b73eb12
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-modifiers.md
@@ -0,0 +1,8 @@
+\$default\_modifiers {#variable.default.modifiers}
+====================
+
+This is an array of modifiers to implicitly apply to every variable in a
+template. For example, to HTML-escape every variable by default, use
+`array('escape:"htmlall"')`. To make a variable exempt from default
+modifiers, add the \'nofilter\' attribute to the output tag such as
+`{$var nofilter}`.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-resource-type.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-resource-type.md
new file mode 100644
index 000000000..e8a803178
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-resource-type.md
@@ -0,0 +1,7 @@
+\$default\_resource\_type {#variable.default.resource.type}
+=========================
+
+This tells smarty what resource type to use implicitly. The default
+value is `file`, meaning that `$smarty->display('index.tpl')` and
+`$smarty->display('file:index.tpl')` are identical in meaning. See the
+[resource](#resources) chapter for more details.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md
new file mode 100644
index 000000000..d8fcbb1ad
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-default-template-handler-func.md
@@ -0,0 +1,50 @@
+\$default\_template\_handler\_func {#variable.default.template.handler.func}
+==================================
+
+This function is called when a template cannot be obtained from its
+resource.
+
+> **Note**
+>
+> The default handler is currently only invoked for file resources. It
+> is not triggered when the resource itself cannot be found, in which
+> case a SmartyException is thrown.
+
+
+ <?php
+
+ $smarty = new Smarty();
+ $smarty->default_template_handler_func = 'my_default_template_handler_func';
+
+ /**
+ * Default Template Handler
+ *
+ * called when Smarty's file: resource is unable to load a requested file
+ *
+ * @param string $type resource type (e.g. "file", "string", "eval", "resource")
+ * @param string $name resource name (e.g. "foo/bar.tpl")
+ * @param string &$content template's content
+ * @param integer &$modified template's modification time
+ * @param Smarty $smarty Smarty instance
+ * @return string|boolean path to file or boolean true if $content and $modified
+ * have been filled, boolean false if no default template
+ * could be loaded
+ */
+ function my_default_template_handler_func($type, $name, &$content, &$modified, Smarty $smarty) {
+ if (false) {
+ // return corrected filepath
+ return "/tmp/some/foobar.tpl";
+ } elseif (false) {
+ // return a template directly
+ $content = "the template source";
+ $modified = time();
+ return true;
+ } else {
+ // tell smarty that we failed
+ return false;
+ }
+ }
+
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md
new file mode 100644
index 000000000..f471f5de0
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-direct-access-security.md
@@ -0,0 +1,13 @@
+\$direct\_access\_security {#variable.direct.access.security}
+==========================
+
+Direct access security inhibits direct browser access to compiled or
+cached template files.
+
+Direct access security is enabled by default. To disable it set
+`$direct_access_security` to FALSE.
+
+> **Note**
+>
+> This is a compile time option. If you change the setting you must make
+> sure that the templates get recompiled.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md
new file mode 100644
index 000000000..eec7894da
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-error-reporting.md
@@ -0,0 +1,17 @@
+\$error\_reporting {#variable.error.reporting}
+==================
+
+When this value is set to a non-null-value it\'s value is used as php\'s
+[`error_reporting`](&url.php-manual;error_reporting) level inside of
+[`display()`](#api.display) and [`fetch()`](#api.fetch).
+
+Smarty 3.1.2 introduced the
+[`muteExpectedErrors()`](#api.mute.expected.errors) function. Calling
+`Smarty::muteExpectedErrors();` after setting up custom error handling
+will ensure that warnings and notices (deliberately) produced by Smarty
+will not be passed to other custom error handlers. If your error logs
+are filling up with warnings regarding `filemtime()` or `unlink()`
+calls, please enable Smarty\'s error muting.
+
+See also [debugging](#chapter.debugging.console) and
+[troubleshooting](#troubleshooting).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-escape-html.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-escape-html.md
new file mode 100644
index 000000000..87c7b9672
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-escape-html.md
@@ -0,0 +1,21 @@
+\$escape\_html {#variable.escape.html}
+==============
+
+Setting `$escape_html` to TRUE will escape all template variable output
+by wrapping it in
+`htmlspecialchars({$output}, ENT_QUOTES, $char_set);`,
+which is the same as `{$variable|escape:"html"}`.
+
+Template designers can choose to selectively disable this feature by
+adding the `nofilter` flag: `{$variable nofilter}`.
+
+Modifiers and Filters are run in the following order: modifier,
+default\_modifier, \$escape\_html, registered variable filters,
+autoloaded variable filters, template instance\'s variable filters.
+Everything except the individual modifier can be disabled with the
+`nofilter` flag.
+
+> **Note**
+>
+> This is a compile time option. If you change the setting you must make
+> sure that the templates get recompiled.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-cache.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-cache.md
new file mode 100644
index 000000000..de0c0c15a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-cache.md
@@ -0,0 +1,6 @@
+\$force\_cache {#variable.force.cache}
+==============
+
+This forces Smarty to (re)cache templates on every invocation. It does
+not override the [`$caching`](#variable.caching) level, but merely
+pretends the template has never been cached before.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-compile.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-compile.md
new file mode 100644
index 000000000..73f1e792d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-force-compile.md
@@ -0,0 +1,9 @@
+\$force\_compile {#variable.force.compile}
+================
+
+This forces Smarty to (re)compile templates on every invocation. This
+setting overrides [`$compile_check`](#variable.compile.check). By
+default this is FALSE. This is handy for development and
+[debugging](#chapter.debugging.console). It should never be used in a
+production environment. If [`$caching`](#variable.caching) is enabled,
+the cache file(s) will be regenerated every time.
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md
new file mode 100644
index 000000000..bcc13f0e5
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-left-delimiter.md
@@ -0,0 +1,8 @@
+\$left\_delimiter {#variable.left.delimiter}
+=================
+
+This is the left delimiter used by the template language. Default is
+`{`.
+
+See also [`$right_delimiter`](#variable.right.delimiter) and [escaping
+smarty parsing](#language.escaping) .
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-locking-timeout.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-locking-timeout.md
new file mode 100644
index 000000000..82fd0568a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-locking-timeout.md
@@ -0,0 +1,7 @@
+\$locking\_timeout {#variable.locking.timeout}
+==================
+
+This is maximum time in seconds a cache lock is valid to avoid dead
+locks. The default value is 10 seconds.
+
+See also [`$cache_locking`](#variable.cache.locking)
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-merge-compiled-includes.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-merge-compiled-includes.md
new file mode 100644
index 000000000..8220c442b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-merge-compiled-includes.md
@@ -0,0 +1,27 @@
+\$merge\_compiled\_includes {#variable.merge.compiled.includes}
+===========================
+
+By setting `$merge_compiled_includes` to TRUE Smarty will merge the
+compiled template code of subtemplates into the compiled code of the
+main template. This increases rendering speed of templates using a many
+different sub-templates.
+
+Individual sub-templates can be merged by setting the `inline` option
+flag within the `{include}` tag. `$merge_compiled_includes` does not
+have to be enabled for the `inline` merge.
+
+::: {.informalexample}
+
+ <?php
+ $smarty->merge_compiled_includes = true;
+ ?>
+
+
+:::
+
+> **Note**
+>
+> This is a compile time option. If you change the setting you must make
+> sure that the templates get recompiled.
+
+See also [`{include}`](#language.function.include) tag
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md
new file mode 100644
index 000000000..8a7cfcdb2
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-plugins-dir.md
@@ -0,0 +1,28 @@
+\$plugins\_dir {#variable.plugins.dir}
+==============
+
+This is the directory or directories where Smarty will look for the
+plugins that it needs. Default is `plugins/` under the
+[`SMARTY_DIR`](#constant.smarty.dir). If you supply a relative path,
+Smarty will first look under the [`SMARTY_DIR`](#constant.smarty.dir),
+then relative to the current working directory, then relative to the PHP
+include\_path. If `$plugins_dir` is an array of directories, Smarty will
+search for your plugin in each plugin directory **in the order they are
+given**.
+
+> **Note**
+>
+> For best performance, do not setup your `$plugins_dir` to have to use
+> the PHP include path. Use an absolute pathname, or a path relative to
+> `SMARTY_DIR` or the current working directory.
+
+> **Note**
+>
+> As of Smarty 3.1 the attribute \$plugins\_dir is no longer accessible
+> directly. Use [`getPluginsDir()`](#api.get.plugins.dir),
+> [`setPluginsDir()`](#api.set.plugins.dir) and
+> [`addPluginsDir()`](#api.add.plugins.dir) instead.
+
+See also [`getPluginsDir()`](#api.get.plugins.dir),
+[`setPluginsDir()`](#api.set.plugins.dir) and
+[`addPluginsDir()`](#api.add.plugins.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md
new file mode 100644
index 000000000..14a9b568e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-right-delimiter.md
@@ -0,0 +1,8 @@
+\$right\_delimiter {#variable.right.delimiter}
+==================
+
+This is the right delimiter used by the template language. Default is
+`}`.
+
+See also [`$left_delimiter`](#variable.left.delimiter) and [escaping
+smarty parsing](#language.escaping).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-smarty-debug-id.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-smarty-debug-id.md
new file mode 100644
index 000000000..0733ed518
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-smarty-debug-id.md
@@ -0,0 +1,9 @@
+\$smarty\_debug\_id {#variable.smarty.debug.id}
+===================
+
+The value of `$smarty_debug_id` defines the URL keyword to enable
+debugging at browser level. The default value is `SMARTY_DEBUG`.
+
+See also [debugging console](#chapter.debugging.console) section,
+[`$debugging`](#variable.debugging) and
+[`$debugging_ctrl`](#variable.debugging.ctrl).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md
new file mode 100644
index 000000000..e49578b1b
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-template-dir.md
@@ -0,0 +1,36 @@
+\$template\_dir {#variable.template.dir}
+===============
+
+This is the name of the default template directory. If you do not supply
+a resource type when including files, they will be found here. By
+default this is `./templates`, meaning that Smarty will look for the
+`templates/` directory in the same directory as the executing php
+script. \$template\_dir can also be an array of directory paths: Smarty
+will traverse the directories and stop on the first matching template
+found.
+
+> **Note**
+>
+> It is not recommended to put this directory under the web server
+> document root.
+
+> **Note**
+>
+> If the directories known to `$template_dir` are relative to
+> directories known to the
+> [include\_path](&url.php-manual;ini.core.php#ini.include-path) you
+> need to activate the [`$use_include_path`](#variable.use.include.path)
+> option.
+
+> **Note**
+>
+> As of Smarty 3.1 the attribute \$template\_dir is no longer accessible
+> directly. Use [`getTemplateDir()`](#api.get.template.dir),
+> [`setTemplateDir()`](#api.set.template.dir) and
+> [`addTemplateDir()`](#api.add.template.dir) instead.
+
+See also [`Template Resources`](#resources),
+[`$use_include_path`](#variable.use.include.path),
+[`getTemplateDir()`](#api.get.template.dir),
+[`setTemplateDir()`](#api.set.template.dir) and
+[`addTemplateDir()`](#api.add.template.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md
new file mode 100644
index 000000000..9720ae8a6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-trusted-dir.md
@@ -0,0 +1,8 @@
+\$trusted\_dir {#variable.trusted.dir}
+==============
+
+`$trusted_dir` is only for use when security is enabled. This is an
+array of all directories that are considered trusted. Trusted
+directories are where you keep php scripts that are executed directly
+from the templates with
+[`{insert}`](#language.function.insert.php).
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md
new file mode 100644
index 000000000..103a9767d
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-include-path.md
@@ -0,0 +1,49 @@
+\$use\_include\_path {#variable.use.include.path}
+====================
+
+This tells smarty to respect the
+[include\_path](&url.php-manual;ini.core.php#ini.include-path) within
+the [`File Template Resource`](#resources.file) handler and the plugin
+loader to resolve the directories known to
+[`$template_dir`](#variable.template.dir). The flag also makes the
+plugin loader check the include\_path for
+[`$plugins_dir`](#variable.plugins.dir).
+
+> **Note**
+>
+> You should not design your applications to rely on the include\_path,
+> as this may - depending on your implementation - slow down your system
+> (and Smarty) considerably.
+
+If use\_include\_path is enabled, file discovery for
+[`$template_dir`](#variable.template.dir) and
+[`$plugins_dir`](#variable.plugins.dir) work as follows.
+
+- For each element `$directory` in array (\$template\_dir or
+ \$plugins\_dir) do
+
+- Test if requested file is in `$directory` relative to the [current
+ working directory](&url.php-manual;function.getcwd.php). If file
+ found, return it.
+
+- For each `$path` in include\_path do
+
+- Test if requested file is in `$directory` relative to the `$path`
+ (possibly relative to the [current working
+ directory](&url.php-manual;function.getcwd.php)). If file found,
+ return it.
+
+- Try default\_handler or fail.
+
+This means that whenever a directory/file relative to the current
+working directory is encountered, it is preferred over anything
+potentially accessible through the include\_path.
+
+> **Note**
+>
+> Smarty does not filter elements of the include\_path. That means a
+> \".:\" within your include path will trigger the current working
+> directory lookup twice.
+
+See also [`Template Resources`](#resources) and
+[`$template_dir`](#variable.template.dir)
diff --git a/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-sub-dirs.md b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-sub-dirs.md
new file mode 100644
index 000000000..d973c2409
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/api-variables/variable-use-sub-dirs.md
@@ -0,0 +1,31 @@
+\$use\_sub\_dirs {#variable.use.sub.dirs}
+================
+
+Smarty will create subdirectories under the [compiled
+templates](#variable.compile.dir) and [cache](#variable.cache.dir)
+directories if `$use_sub_dirs` is set to TRUE, default is FALSE. In an
+environment where there are potentially tens of thousands of files
+created, this may help the filesystem speed. On the other hand, some
+environments do not allow PHP processes to create directories, so this
+must be disabled which is the default.
+
+Sub directories are more efficient, so use them if you can.
+Theoretically you get much better performance on a filesystem with 10
+directories each having 100 files, than with 1 directory having 1000
+files. This was certainly the case with Solaris 7 (UFS)\... with newer
+filesystems such as ext3 and especially reiserfs, the difference is
+almost nothing.
+
+> **Note**
+>
+> - `$use_sub_dirs=true` doesn\'t work with
+> [safe\_mode=On](&url.php-manual;features.safe-mode), that\'s why
+> it\'s switchable and why it\'s off by default.
+>
+> - `$use_sub_dirs=true` on Windows can cause problems.
+>
+> - Safe\_mode is being deprecated in PHP6.
+>
+See also [`$compile_id`](#variable.compile.id),
+[`$cache_dir`](#variable.cache.dir), and
+[`$compile_dir`](#variable.compile.dir).
diff --git a/vendor/smarty/smarty/docs/programmers/caching.md b/vendor/smarty/smarty/docs/programmers/caching.md
new file mode 100644
index 000000000..5656b71b5
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/caching.md
@@ -0,0 +1,24 @@
+Caching
+=======
+
+Caching is used to speed up a call to [`display()`](./api-functions/api-display.md) or
+[`fetch()`](./api-functions/api-fetch.md) by saving its output to a file. If a cached
+version of the call is available, that is displayed instead of
+regenerating the output. Caching can speed things up tremendously,
+especially templates with longer computation times. Since the output of
+[`display()`](./api-functions/api-display.md) or [`fetch()`](./api-functions/api-fetch.md) is cached, one
+cache file could conceivably be made up of several template files,
+config files, etc.
+
+Since templates are dynamic, it is important to be careful what you are
+caching and for how long. For instance, if you are displaying the front
+page of your website that does not change its content very often, it
+might work well to cache this page for an hour or more. On the other
+hand, if you are displaying a page with a timetable containing new
+information by the minute, it would not make sense to cache this page.
+
+## Table of contents
+- [Setting Up Caching](./caching/caching-setting-up.md)
+- [Multiple Caches Per Page](./caching/caching-multiple-caches.md)
+- [Controlling Cacheability of Output](./caching/caching-groups.md)
+- [Custom Cache Implementation](./caching/caching-custom.md)
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md b/vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md
new file mode 100644
index 000000000..ee9b60090
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/caching/caching-cacheable.md
@@ -0,0 +1,176 @@
+Controlling Cacheability of Output {#caching.cacheable}
+==================================
+
+If caching is enabled normally the whole final output of the page gets
+cached. However Smarty3 offers several options how to exclude sections
+of your output from caching.
+
+> **Note**
+>
+> Be sure any variables used within a non-cached section are also
+> assigned from PHP when the page is loaded from the cache.
+
+Cacheability of Template Section {#cacheability.sections}
+--------------------------------
+
+A larger section of your template can easily excluded from caching by
+using the [`{nocache}`](#language.function.nocache) and
+[`{/nocache}`](#language.function.nocache) tags.
+
+
+
+ Today's date is
+ {nocache}
+ {$smarty.now|date_format}
+ {/nocache}
+
+
+
+The above code will output the current date on a cached page.
+
+Cacheability of Tags {#cacheability.tags}
+--------------------
+
+Caching for an individual tag can be disabled by adding the \"nocache\"
+option flag to the tag.
+
+
+ Today's date is
+ {$smarty.now|date_format nocache}
+
+
+
+Cacheability of Variables {#cacheability.variables}
+-------------------------
+
+You can [`assign()`](#api.assign) variables as not cachable. Any tag
+which uses such variable will be automatically executed in nocache mode.
+
+> **Note**
+>
+> If a tag is executed in nocache mode you must make sure that all other
+> variables used by that tag are also assigned from PHP when the page is
+> loaded from the cache.
+
+> **Note**
+>
+> The nocache status of an assigned variable will effect the compiled
+> template code. If you change the status you must manually delete
+> existing compiled and cached template files to force a recompile.
+
+
+ // assign $foo as nocahe variable
+ $smarty->assign('foo',time(),true);
+
+
+ Dynamic time value is {$foo}
+
+
+
+Cacheability of Plugins {#cacheability.plugins}
+-----------------------
+
+The cacheability of plugins can be declared when registering them. The
+third parameter to [`registerPlugin()`](#api.register.plugin) is called
+`$cacheable` and defaults to TRUE.
+
+When registering a plugin with `$cacheable=false` the plugin is called
+everytime the page is displayed, even if the page comes from the cache.
+The plugin function behaves a little like an
+[`{insert}`](#plugins.inserts) function.
+
+> **Note**
+>
+> The `$cacheable` status will effect the compiled template code. If you
+> change the status you must manually delete existing compiled and
+> cached template files to force a recompile.
+
+In contrast to [`{insert}`](#plugins.inserts) the attributes to the
+plugins are not cached by default. They can be declared to be cached
+with the fourth parameter `$cache_attrs`. `$cache_attrs` is an array of
+attribute-names that should be cached, so the plugin-function get value
+as it was the time the page was written to cache everytime it is fetched
+from the cache.
+
+
+ <?php
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ function remaining_seconds($params, $smarty) {
+ $remain = $params['endtime'] - time();
+ if($remain >= 0){
+ return $remain . ' second(s)';
+ }else{
+ return 'done';
+ }
+ }
+
+ $smarty->registerPlugin('function','remaining', 'remaining_seconds', false, array('endtime'));
+
+ if (!$smarty->isCached('index.tpl')) {
+ // fetch $obj from db and assign...
+ $smarty->assignByRef('obj', $obj);
+ }
+
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+where `index.tpl` is:
+
+
+ Time Remaining: {remaining endtime=$obj->endtime}
+
+
+
+The number of seconds till the endtime of `$obj` is reached changes on
+each display of the page, even if the page is cached. Since the endtime
+attribute is cached the object only has to be pulled from the database
+when page is written to the cache but not on subsequent requests of the
+page.
+
+
+ index.php:
+
+ <?php
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ function smarty_block_dynamic($param, $content, $smarty) {
+ return $content;
+ }
+ $smarty->registerPlugin('block','dynamic', 'smarty_block_dynamic', false);
+
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+where `index.tpl` is:
+
+
+ Page created: {'0'|date_format:'%D %H:%M:%S'}
+
+ {dynamic}
+
+ Now is: {'0'|date_format:'%D %H:%M:%S'}
+
+ ... do other stuff ...
+
+ {/dynamic}
+
+
+
+When reloading the page you will notice that both dates differ. One is
+"dynamic" one is "static". You can do everything between
+`{dynamic}...{/dynamic}` and be sure it will not be cached like the rest
+of the page.
+
+> **Note**
+>
+> The above example shall just demonstrate how a dynamic block plugins
+> works. See
+> [`Cacheability of Template Section`](#cacheability.sections) on how to
+> disable caching of a template section by the built-in
+> [`{nocache}`](#language.function.nocache) and
+> [`{/nocache}`](#language.function.nocache) tags.
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-custom.md b/vendor/smarty/smarty/docs/programmers/caching/caching-custom.md
new file mode 100644
index 000000000..77d2ce7b3
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/caching/caching-custom.md
@@ -0,0 +1,296 @@
+Custom Cache Implementation {#caching.custom}
+===========================
+
+As an alternative to using the default file-based caching mechanism, you
+can specify a custom cache implementation that will be used to read,
+write and clear cached files.
+
+> **Note**
+>
+> In Smarty2 this used to be a callback function called
+> `$cache_handler_func`. Smarty3 replaced this callback by the
+> `Smarty_CacheResource` module.
+
+With a custom cache implementation you\'re likely trying to achieve at
+least one of the following goals: replace the slow filesystem by a
+faster storage engine, centralize the cache to be accessible to multiple
+servers.
+
+Smarty allows CacheResource implementations to use one of the APIs
+`Smarty_CacheResource_Custom` or `Smarty_CacheResource_KeyValueStore`.
+`Smarty_CacheResource_Custom` is a simple API directing all read, write,
+clear calls to your implementation. This API allows you to store
+wherever and however you deem fit. The
+`Smarty_CacheResource_KeyValueStore` API allows you to turn any \"dumb\"
+KeyValue-Store (like APC, Memcache, ...) into a full-featured
+CacheResource implementation. That is, everything around deep
+cache-groups like \"a\|b\|c\" is being handled for you in way that
+allows clearing the cache-group \"a\" and all nested groups are cleared
+as well - even though KeyValue-Stores don\'t allow this kind of
+hierarchy by nature.
+
+Custom CacheResources may be put in a file `cacheresource.foobarxyz.php`
+within your [`$plugins_dir`](#variable.plugins.dir), or registered on
+runtime with [`registerCacheResource()`](#api.register.cacheresource).
+In either case you need to set [`$caching_type`](#variable.caching.type)
+to invoke your custom CacheResource implementation.
+
+
+ <?php
+
+ require_once 'libs/Smarty.class.php';
+ $smarty = new Smarty();
+ $smarty->caching_type = 'mysql';
+
+ /**
+ * MySQL CacheResource
+ *
+ * CacheResource Implementation based on the Custom API to use
+ * MySQL as the storage resource for Smarty's output caching.
+ *
+ * Table definition:
+ * <pre>CREATE TABLE IF NOT EXISTS `output_cache` (
+ * `id` CHAR(40) NOT NULL COMMENT 'sha1 hash',
+ * `name` VARCHAR(250) NOT NULL,
+ * `cache_id` VARCHAR(250) NULL DEFAULT NULL,
+ * `compile_id` VARCHAR(250) NULL DEFAULT NULL,
+ * `modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ * `content` LONGTEXT NOT NULL,
+ * PRIMARY KEY (`id`),
+ * INDEX(`name`),
+ * INDEX(`cache_id`),
+ * INDEX(`compile_id`),
+ * INDEX(`modified`)
+ * ) ENGINE = InnoDB;</pre>
+ *
+ * @package CacheResource-examples
+ * @author Rodney Rehm
+ */
+ class Smarty_CacheResource_Mysql extends Smarty_CacheResource_Custom {
+ // PDO instance
+ protected $db;
+ protected $fetch;
+ protected $fetchTimestamp;
+ protected $save;
+
+ public function __construct() {
+ try {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
+ } catch (PDOException $e) {
+ throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
+ }
+ $this->fetch = $this->db->prepare('SELECT modified, content FROM output_cache WHERE id = :id');
+ $this->fetchTimestamp = $this->db->prepare('SELECT modified FROM output_cache WHERE id = :id');
+ $this->save = $this->db->prepare('REPLACE INTO output_cache (id, name, cache_id, compile_id, content)
+ VALUES (:id, :name, :cache_id, :compile_id, :content)');
+ }
+
+ /**
+ * fetch cached content and its modification time from data source
+ *
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param string $content cached content
+ * @param integer $mtime cache modification timestamp (epoch)
+ * @return void
+ */
+ protected function fetch($id, $name, $cache_id, $compile_id, &$content, &$mtime)
+ {
+ $this->fetch->execute(array('id' => $id));
+ $row = $this->fetch->fetch();
+ $this->fetch->closeCursor();
+ if ($row) {
+ $content = $row['content'];
+ $mtime = strtotime($row['modified']);
+ } else {
+ $content = null;
+ $mtime = null;
+ }
+ }
+
+ /**
+ * Fetch cached content's modification timestamp from data source
+ *
+ * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the complete cached content.
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @return integer|boolean timestamp (epoch) the template was modified, or false if not found
+ */
+ protected function fetchTimestamp($id, $name, $cache_id, $compile_id)
+ {
+ $this->fetchTimestamp->execute(array('id' => $id));
+ $mtime = strtotime($this->fetchTimestamp->fetchColumn());
+ $this->fetchTimestamp->closeCursor();
+ return $mtime;
+ }
+
+ /**
+ * Save content to cache
+ *
+ * @param string $id unique cache content identifier
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration time in seconds or null
+ * @param string $content content to cache
+ * @return boolean success
+ */
+ protected function save($id, $name, $cache_id, $compile_id, $exp_time, $content)
+ {
+ $this->save->execute(array(
+ 'id' => $id,
+ 'name' => $name,
+ 'cache_id' => $cache_id,
+ 'compile_id' => $compile_id,
+ 'content' => $content,
+ ));
+ return !!$this->save->rowCount();
+ }
+
+ /**
+ * Delete content from cache
+ *
+ * @param string $name template name
+ * @param string $cache_id cache id
+ * @param string $compile_id compile id
+ * @param integer|null $exp_time seconds till expiration or null
+ * @return integer number of deleted caches
+ */
+ protected function delete($name, $cache_id, $compile_id, $exp_time)
+ {
+ // delete the whole cache
+ if ($name === null && $cache_id === null && $compile_id === null && $exp_time === null) {
+ // returning the number of deleted caches would require a second query to count them
+ $query = $this->db->query('TRUNCATE TABLE output_cache');
+ return -1;
+ }
+ // build the filter
+ $where = array();
+ // equal test name
+ if ($name !== null) {
+ $where[] = 'name = ' . $this->db->quote($name);
+ }
+ // equal test compile_id
+ if ($compile_id !== null) {
+ $where[] = 'compile_id = ' . $this->db->quote($compile_id);
+ }
+ // range test expiration time
+ if ($exp_time !== null) {
+ $where[] = 'modified < DATE_SUB(NOW(), INTERVAL ' . intval($exp_time) . ' SECOND)';
+ }
+ // equal test cache_id and match sub-groups
+ if ($cache_id !== null) {
+ $where[] = '(cache_id = '. $this->db->quote($cache_id)
+ . ' OR cache_id LIKE '. $this->db->quote($cache_id .'|%') .')';
+ }
+ // run delete query
+ $query = $this->db->query('DELETE FROM output_cache WHERE ' . join(' AND ', $where));
+ return $query->rowCount();
+ }
+ }
+
+
+
+
+ <?php
+
+ require_once 'libs/Smarty.class.php';
+ $smarty = new Smarty();
+ $smarty->caching_type = 'memcache';
+
+ /**
+ * Memcache CacheResource
+ *
+ * CacheResource Implementation based on the KeyValueStore API to use
+ * memcache as the storage resource for Smarty's output caching.
+ *
+ * Note that memcache has a limitation of 256 characters per cache-key.
+ * To avoid complications all cache-keys are translated to a sha1 hash.
+ *
+ * @package CacheResource-examples
+ * @author Rodney Rehm
+ */
+ class Smarty_CacheResource_Memcache extends Smarty_CacheResource_KeyValueStore {
+ /**
+ * memcache instance
+ * @var Memcache
+ */
+ protected $memcache = null;
+
+ public function __construct()
+ {
+ $this->memcache = new Memcache();
+ $this->memcache->addServer( '127.0.0.1', 11211 );
+ }
+
+ /**
+ * Read values for a set of keys from cache
+ *
+ * @param array $keys list of keys to fetch
+ * @return array list of values with the given keys used as indexes
+ * @return boolean true on success, false on failure
+ */
+ protected function read(array $keys)
+ {
+ $_keys = $lookup = array();
+ foreach ($keys as $k) {
+ $_k = sha1($k);
+ $_keys[] = $_k;
+ $lookup[$_k] = $k;
+ }
+ $_res = array();
+ $res = $this->memcache->get($_keys);
+ foreach ($res as $k => $v) {
+ $_res[$lookup[$k]] = $v;
+ }
+ return $_res;
+ }
+
+ /**
+ * Save values for a set of keys to cache
+ *
+ * @param array $keys list of values to save
+ * @param int $expire expiration time
+ * @return boolean true on success, false on failure
+ */
+ protected function write(array $keys, $expire=null)
+ {
+ foreach ($keys as $k => $v) {
+ $k = sha1($k);
+ $this->memcache->set($k, $v, 0, $expire);
+ }
+ return true;
+ }
+
+ /**
+ * Remove values from cache
+ *
+ * @param array $keys list of keys to delete
+ * @return boolean true on success, false on failure
+ */
+ protected function delete(array $keys)
+ {
+ foreach ($keys as $k) {
+ $k = sha1($k);
+ $this->memcache->delete($k);
+ }
+ return true;
+ }
+
+ /**
+ * Remove *all* values from cache
+ *
+ * @return boolean true on success, false on failure
+ */
+ protected function purge()
+ {
+ return $this->memcache->flush();
+ }
+ }
+
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-groups.md b/vendor/smarty/smarty/docs/programmers/caching/caching-groups.md
new file mode 100644
index 000000000..7e248b2f3
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/caching/caching-groups.md
@@ -0,0 +1,60 @@
+Cache Groups {#caching.groups}
+============
+
+You can do more elaborate grouping by setting up `$cache_id` groups.
+This is accomplished by separating each sub-group with a vertical bar
+`|` in the `$cache_id` value. You can have as many sub-groups as you
+like.
+
+- You can think of cache groups like a directory hierarchy. For
+ instance, a cache group of `'a|b|c'` could be thought of as the
+ directory structure `'/a/b/c/'`.
+
+- `clearCache(null,'a|b|c')` would be like removing the files
+ `'/a/b/c/*'`. `clearCache(null,'a|b')` would be like removing the
+ files `'/a/b/*'`.
+
+- If you specify a [`$compile_id`](#variable.compile.id) such as
+ `clearCache(null,'a|b','foo')` it is treated as an appended cache
+ group `'/a/b/c/foo/'`.
+
+- If you specify a template name such as
+ `clearCache('foo.tpl','a|b|c')` then Smarty will attempt to remove
+ `'/a/b/c/foo.tpl'`.
+
+- You CANNOT remove a specified template name under multiple cache
+ groups such as `'/a/b/*/foo.tpl'`, the cache grouping works
+ left-to-right ONLY. You will need to group your templates under a
+ single cache group hierarchy to be able to clear them as a group.
+
+Cache grouping should not be confused with your template directory
+hierarchy, the cache grouping has no knowledge of how your templates are
+structured. So for example, if you have a template structure like
+`themes/blue/index.tpl` and you want to be able to clear all the cache
+files for the "blue" theme, you will need to create a cache group
+structure that mimics your template file structure, such as
+`display('themes/blue/index.tpl','themes|blue')`, then clear them with
+`clearCache(null,'themes|blue')`.
+
+
+ <?php
+ require('Smarty.class.php');
+ $smarty = new Smarty;
+
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ // clear all caches with 'sports|basketball' as the first two cache_id groups
+ $smarty->clearCache(null,'sports|basketball');
+
+ // clear all caches with "sports" as the first cache_id group. This would
+ // include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..."
+ $smarty->clearCache(null,'sports');
+
+ // clear the foo.tpl cache file with "sports|basketball" as the cache_id
+ $smarty->clearCache('foo.tpl','sports|basketball');
+
+
+ $smarty->display('index.tpl','sports|basketball');
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md b/vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md
new file mode 100644
index 000000000..40fffc3d7
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/caching/caching-multiple-caches.md
@@ -0,0 +1,87 @@
+Multiple Caches Per Page {#caching.multiple.caches}
+========================
+
+You can have multiple cache files for a single call to
+[`display()`](#api.display) or [`fetch()`](#api.fetch). Let\'s say that
+a call to `display('index.tpl')` may have several different output
+contents depending on some condition, and you want separate caches for
+each one. You can do this by passing a `$cache_id` as the second
+parameter to the function call.
+
+
+ <?php
+ require('Smarty.class.php');
+ $smarty = new Smarty;
+
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ $my_cache_id = $_GET['article_id'];
+
+ $smarty->display('index.tpl', $my_cache_id);
+ ?>
+
+
+
+Above, we are passing the variable `$my_cache_id` to
+[`display()`](#api.display) as the `$cache_id`. For each unique value of
+`$my_cache_id`, a separate cache will be generated for `index.tpl`. In
+this example, `article_id` was passed in the URL and is used as the
+`$cache_id`.
+
+> **Note**
+>
+> Be very cautious when passing values from a client (web browser) into
+> Smarty or any PHP application. Although the above example of using the
+> article\_id from the URL looks handy, it could have bad consequences.
+> The `$cache_id` is used to create a directory on the file system, so
+> if the user decided to pass an extremely large value for article\_id,
+> or write a script that sends random article\_id\'s at a rapid pace,
+> this could possibly cause problems at the server level. Be sure to
+> sanitize any data passed in before using it. In this instance, maybe
+> you know the article\_id has a length of ten characters and is made up
+> of alpha-numerics only, and must be a valid article\_id in the
+> database. Check for this!
+
+Be sure to pass the same `$cache_id` as the second parameter to
+[`isCached()`](#api.is.cached) and [`clearCache()`](#api.clear.cache).
+
+
+ <?php
+ require('Smarty.class.php');
+ $smarty = new Smarty;
+
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ $my_cache_id = $_GET['article_id'];
+
+ if(!$smarty->isCached('index.tpl',$my_cache_id)) {
+ // No cache available, do variable assignments here.
+ $contents = get_database_contents();
+ $smarty->assign($contents);
+ }
+
+ $smarty->display('index.tpl',$my_cache_id);
+ ?>
+
+
+
+You can clear all caches for a particular `$cache_id` by passing NULL as
+the first parameter to [`clearCache()`](#api.clear.cache).
+
+
+ <?php
+ require('Smarty.class.php');
+ $smarty = new Smarty;
+
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ // clear all caches with "sports" as the $cache_id
+ $smarty->clearCache(null,'sports');
+
+ $smarty->display('index.tpl','sports');
+ ?>
+
+
+
+In this manner, you can "group" your caches together by giving them the
+same `$cache_id`.
diff --git a/vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md b/vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md
new file mode 100644
index 000000000..bc9d2ad9e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/caching/caching-setting-up.md
@@ -0,0 +1,153 @@
+Setting Up Caching {#caching.setting.up}
+==================
+
+The first thing to do is enable caching by setting
+[`$caching`](#variable.caching) to one of
+`Smarty::CACHING_LIFETIME_CURRENT` or `Smarty::CACHING_LIFETIME_SAVED`.
+
+
+ <?php
+ require('Smarty.class.php');
+ $smarty = new Smarty;
+
+ // uses the value of $smarty->cacheLifetime() to determine
+ // the number of seconds a cache is good for
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+With caching enabled, the function call to `display('index.tpl')` will
+render the template as usual, but also saves a copy of its output to a
+file (a cached copy) in the [`$cache_dir`](#variable.cache.dir). On the
+next call to `display('index.tpl')`, the cached copy will be used
+instead of rendering the template again.
+
+> **Note**
+>
+> The files in the [`$cache_dir`](#variable.cache.dir) are named similar
+> to the template name. Although they end in the `.php` extension, they
+> are not intended to be directly executable. Do not edit these files!
+
+Each cached page has a limited lifetime determined by
+[`$cache_lifetime`](#variable.cache.lifetime). The default value is 3600
+seconds, or one hour. After that time expires, the cache is regenerated.
+It is possible to give individual caches their own expiration time by
+setting [`$caching`](#variable.caching) to
+`Smarty::CACHING_LIFETIME_SAVED`. See
+[`$cache_lifetime`](#variable.cache.lifetime) for more details.
+
+
+ <?php
+ require('Smarty.class.php');
+ $smarty = new Smarty;
+
+ // retain current cache lifetime for each specific display call
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_SAVED);
+
+ // set the cache_lifetime for index.tpl to 5 minutes
+ $smarty->setCacheLifetime(300);
+ $smarty->display('index.tpl');
+
+ // set the cache_lifetime for home.tpl to 1 hour
+ $smarty->setCacheLifetime(3600);
+ $smarty->display('home.tpl');
+
+ // NOTE: the following $cache_lifetime setting will not work when $caching
+ // is set to Smarty::CACHING_LIFETIME_SAVED.
+ // The cache lifetime for home.tpl has already been set
+ // to 1 hour, and will no longer respect the value of $cache_lifetime.
+ // The home.tpl cache will still expire after 1 hour.
+ $smarty->setCacheLifetime(30); // 30 seconds
+ $smarty->display('home.tpl');
+ ?>
+
+
+
+If [`$compile_check`](#variable.compile.check) is enabled (default),
+every template file and config file that is involved with the cache file
+is checked for modification. If any of the files have been modified
+since the cache was generated, the cache is immediately regenerated.
+This is a computational overhead, so for optimum performance set
+[`$compile_check`](#variable.compile.check) to FALSE.
+
+
+ <?php
+ require('Smarty.class.php');
+ $smarty = new Smarty;
+
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+ $smarty->setCompileCheck(false);
+
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+If [`$force_compile`](#variable.force.compile) is enabled, the cache
+files will always be regenerated. This effectively disables caching,
+however this also seriously degrades performance.
+[`$force_compile`](#variable.force.compile) is meant to be used for
+[debugging](#chapter.debugging.console) purposes. The appropriate way to
+disable caching is to set [`$caching`](#variable.caching) to
+Smarty::CACHING\_OFF.
+
+The [`isCached()`](#api.is.cached) function can be used to test if a
+template has a valid cache or not. If you have a cached template that
+requires something like a database fetch, you can use this to skip that
+process.
+
+
+ <?php
+ require('Smarty.class.php');
+ $smarty = new Smarty;
+
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ if(!$smarty->isCached('index.tpl')) {
+ // No cache available, do variable assignments here.
+ $contents = get_database_contents();
+ $smarty->assign($contents);
+ }
+
+ $smarty->display('index.tpl');
+ ?>
+
+
+
+You can keep parts of a page dynamic (disable caching) with the
+[`{nocache}{/nocache}`](#language.function.nocache) block function, the
+[`{insert}`](#language.function.insert) function, or by using the
+`nocache` parameter for most template functions.
+
+Let\'s say the whole page can be cached except for a banner that is
+displayed down the side of the page. By using the
+[`{insert}`](#language.function.insert) function for the banner, you can
+keep this element dynamic within the cached content. See the
+documentation on [`{insert}`](#language.function.insert) for more
+details and examples.
+
+You can clear all the cache files with the
+[`clearAllCache()`](#api.clear.all.cache) function, or individual cache
+files [and groups](#caching.groups) with the
+[`clearCache()`](#api.clear.cache) function.
+
+
+ <?php
+ require('Smarty.class.php');
+ $smarty = new Smarty;
+
+ $smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
+
+ // clear only cache for index.tpl
+ $smarty->clearCache('index.tpl');
+
+ // clear out all cache files
+ $smarty->clearAllCache();
+
+ $smarty->display('index.tpl');
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/charset.md b/vendor/smarty/smarty/docs/programmers/charset.md
new file mode 100644
index 000000000..9dedf4dcd
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/charset.md
@@ -0,0 +1,44 @@
+Charset Encoding {#charset}
+================
+
+Charset Encoding {#charset.encoding}
+================
+
+There are a variety of encodings for textual data, ISO-8859-1 (Latin1)
+and UTF-8 being the most popular. Unless you change `Smarty::$_CHARSET`,
+Smarty recognizes `UTF-8` as the internal charset if
+[Multibyte String](https://www.php.net/mbstring) is available,
+`ISO-8859-1` if not.
+
+> **Note**
+>
+> `ISO-8859-1` has been PHP\'s default internal charset since the
+> beginning. Unicode has been evolving since 1991. Since then it has
+> become the one charset to conquer them all, as it is capable of
+> encoding most of the known characters even across different character
+> systems (latin, cyrillic, japanese, ...). `UTF-8` is unicode\'s most
+> used encoding, as it allows referencing the thousands of character
+> with the smallest size overhead possible.
+>
+> Since unicode and UTF-8 are very wide spread nowadays, their use is
+> strongly encouraged.
+
+> **Note**
+>
+> Smarty\'s internals and core plugins are truly UTF-8 compatible since
+> Smarty 3.1. To achieve unicode compatibility, the [Multibyte
+> String](https://www.php.net/mbstring) PECL is required. Unless your PHP
+> environment offers this package, Smarty will not be able to offer
+> full-scale UTF-8 compatibility.
+
+
+ // use japanese character encoding
+ if (function_exists('mb_internal_charset')) {
+ mb_internal_charset('EUC-JP');
+ }
+
+ require_once 'libs/Smarty.class.php';
+ Smarty::$_CHARSET = 'EUC-JP';
+ $smarty = new Smarty();
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/plugins.md b/vendor/smarty/smarty/docs/programmers/plugins.md
new file mode 100644
index 000000000..41a7ea0c4
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins.md
@@ -0,0 +1,44 @@
+Extending Smarty With Plugins {#plugins}
+=============================
+
+## Table of contents
+
+- [How Plugins Work](./plugins/plugins-howto.md)
+- [Naming Conventions](./plugins/plugins-naming-conventions.md)
+- [Writing Plugins](./plugins/plugins-writing.md)
+- [Template Functions](./plugins/plugins-functions.md)
+- [Modifiers](./plugins/plugins-modifiers.md)
+- [Block Functions](./plugins/plugins-block-functions.md)
+- [Compiler Functions](./plugins/plugins-compiler-functions.md)
+- [Prefilters/Postfilters](./plugins/plugins-prefilters-postfilters.md)
+- [Output Filters](./plugins/plugins-outputfilters.md)
+- [Resources](./plugins/plugins-resources.md)
+- [Inserts](./plugins/plugins-inserts.md)
+
+Version 2.0 introduced the plugin architecture that is used for almost
+all the customizable functionality of Smarty. This includes:
+
+- functions
+
+- modifiers
+
+- block functions
+
+- compiler functions
+
+- prefilters
+
+- postfilters
+
+- outputfilters
+
+- resources
+
+- inserts
+
+With the exception of resources, backwards compatibility with the old
+way of registering handler functions via register\_\* API is preserved.
+If you did not use the API but instead modified the class variables
+`$custom_funcs`, `$custom_mods`, and other ones directly, then you will
+need to adjust your scripts to either use the API or convert your custom
+functionality into plugins.
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md
new file mode 100644
index 000000000..47281fef5
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-block-functions.md
@@ -0,0 +1,95 @@
+Block Functions {#plugins.block.functions}
+===============
+
+void
+
+smarty\_block\_
+
+name
+
+array
+
+\$params
+
+mixed
+
+\$content
+
+object
+
+\$template
+
+boolean
+
+&\$repeat
+
+Block functions are functions of the form: `{func} .. {/func}`. In other
+words, they enclose a template block and operate on the contents of this
+block. Block functions take precedence over [custom
+functions](#language.custom.functions) of the same name, that is, you
+cannot have both custom function `{func}` and block function
+`{func}..{/func}`.
+
+- By default your function implementation is called twice by Smarty:
+ once for the opening tag, and once for the closing tag. (See
+ `$repeat` below on how to change this.)
+
+- Starting with Smarty 3.1 the returned value of the opening tag call
+ is displayed as well.
+
+- Only the opening tag of the block function may have
+ [attributes](#language.syntax.attributes). All attributes passed to
+ template functions from the template are contained in the `$params`
+ variable as an associative array. The opening tag attributes are
+ also accessible to your function when processing the closing tag.
+
+- The value of the `$content` variable depends on whether your
+ function is called for the opening or closing tag. In case of the
+ opening tag, it will be NULL, and in case of the closing tag it will
+ be the contents of the template block. Note that the template block
+ will have already been processed by Smarty, so all you will receive
+ is the template output, not the template source.
+
+- The parameter `$repeat` is passed by reference to the function
+ implementation and provides a possibility for it to control how many
+ times the block is displayed. By default `$repeat` is TRUE at the
+ first call of the block-function (the opening tag) and FALSE on all
+ subsequent calls to the block function (the block\'s closing tag).
+ Each time the function implementation returns with `$repeat` being
+ TRUE, the contents between `{func}...{/func}` are evaluated and the
+ function implementation is called again with the new block contents
+ in the parameter `$content`.
+
+If you have nested block functions, it\'s possible to find out what the
+parent block function is by accessing `$smarty->_tag_stack` variable.
+Just do a [`var_dump()`](&url.php-manual;var_dump) on it and the
+structure should be apparent.
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: block.translate.php
+ * Type: block
+ * Name: translate
+ * Purpose: translate a block of text
+ * -------------------------------------------------------------
+ */
+ function smarty_block_translate($params, $content, Smarty_Internal_Template $template, &$repeat)
+ {
+ // only output on the closing tag
+ if(!$repeat){
+ if (isset($content)) {
+ $lang = $params['lang'];
+ // do some intelligent translation thing here with $content
+ return $translation;
+ }
+ }
+ }
+ ?>
+
+
+
+See also: [`registerPlugin()`](#api.register.plugin),
+[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md
new file mode 100644
index 000000000..ef2454e8a
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-compiler-functions.md
@@ -0,0 +1,66 @@
+Compiler Functions {#plugins.compiler.functions}
+==================
+
+Compiler functions are called only during compilation of the template.
+They are useful for injecting PHP code or time-sensitive static content
+into the template. If there is both a compiler function and a [custom
+function](#language.custom.functions) registered under the same name,
+the compiler function has precedence.
+
+mixed
+
+smarty\_compiler\_
+
+name
+
+array
+
+\$params
+
+object
+
+\$smarty
+
+The compiler function is passed two parameters: the params array which
+contains precompiled strings for the attribute values and the Smarty
+object. It\'s supposed to return the code to be injected into the
+compiled template including the surrounding PHP tags.
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: compiler.tplheader.php
+ * Type: compiler
+ * Name: tplheader
+ * Purpose: Output header containing the source file name and
+ * the time it was compiled.
+ * -------------------------------------------------------------
+ */
+ function smarty_compiler_tplheader($params, Smarty $smarty)
+ {
+ return "<?php\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';\n?>";
+ }
+ ?>
+
+This function can be called from the template as:
+
+
+ {* this function gets executed at compile time only *}
+ {tplheader}
+
+
+
+The resulting PHP code in the compiled template would be something like
+this:
+
+
+ <?php
+ echo 'index.tpl compiled at 2002-02-20 20:02';
+ ?>
+
+
+
+See also [`registerPlugin()`](#api.register.plugin),
+[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md
new file mode 100644
index 000000000..067b93826
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-functions.md
@@ -0,0 +1,94 @@
+Template Functions {#plugins.functions}
+==================
+
+void
+
+smarty\_function\_
+
+name
+
+array
+
+\$params
+
+object
+
+\$template
+
+All [attributes](#language.syntax.attributes) passed to template
+functions from the template are contained in the `$params` as an
+associative array.
+
+The output (return value) of the function will be substituted in place
+of the function tag in the template, eg the
+[`{fetch}`](#language.function.fetch) function. Alternatively, the
+function can simply perform some other task without any output, eg the
+[`{assign}`](#language.function.assign) function.
+
+If the function needs to assign some variables to the template or use
+some other Smarty-provided functionality, it can use the supplied
+`$template` object to do so eg `$template->foo()`.
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: function.eightball.php
+ * Type: function
+ * Name: eightball
+ * Purpose: outputs a random magic answer
+ * -------------------------------------------------------------
+ */
+ function smarty_function_eightball($params, Smarty_Internal_Template $template)
+ {
+ $answers = array('Yes',
+ 'No',
+ 'No way',
+ 'Outlook not so good',
+ 'Ask again soon',
+ 'Maybe in your reality');
+
+ $result = array_rand($answers);
+ return $answers[$result];
+ }
+ ?>
+
+which can be used in the template as:
+
+ Question: Will we ever have time travel?
+ Answer: {eightball}.
+
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: function.assign.php
+ * Type: function
+ * Name: assign
+ * Purpose: assign a value to a template variable
+ * -------------------------------------------------------------
+ */
+ function smarty_function_assign($params, Smarty_Internal_Template $template)
+ {
+ if (empty($params['var'])) {
+ trigger_error("assign: missing 'var' parameter");
+ return;
+ }
+
+ if (!in_array('value', array_keys($params))) {
+ trigger_error("assign: missing 'value' parameter");
+ return;
+ }
+
+ $template->assign($params['var'], $params['value']);
+
+ }
+ ?>
+
+
+
+See also: [`registerPlugin()`](#api.register.plugin),
+[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md
new file mode 100644
index 000000000..5738c3fcb
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-howto.md
@@ -0,0 +1,18 @@
+How Plugins Work {#plugins.howto}
+================
+
+Plugins are always loaded on demand. Only the specific modifiers,
+functions, resources, etc invoked in the templates scripts will be
+loaded. Moreover, each plugin is loaded only once, even if you have
+several different instances of Smarty running within the same request.
+
+Pre/postfilters and output filters are a bit of a special case. Since
+they are not mentioned in the templates, they must be registered or
+loaded explicitly via API functions before the template is processed.
+The order in which multiple filters of the same type are executed
+depends on the order in which they are registered or loaded.
+
+The [plugins directory](#variable.plugins.dir) can be a string
+containing a path or an array containing multiple paths. To install a
+plugin, simply place it in one of the directories and Smarty will use it
+automatically.
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md
new file mode 100644
index 000000000..370a97bd0
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-inserts.md
@@ -0,0 +1,48 @@
+Inserts {#plugins.inserts}
+=======
+
+Insert plugins are used to implement functions that are invoked by
+[`{insert}`](#language.function.insert) tags in the template.
+
+string
+
+smarty\_insert\_
+
+name
+
+array
+
+\$params
+
+object
+
+\$template
+
+The first parameter to the function is an associative array of
+attributes passed to the insert.
+
+The insert function is supposed to return the result which will be
+substituted in place of the `{insert}` tag in the template.
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: insert.time.php
+ * Type: time
+ * Name: time
+ * Purpose: Inserts current date/time according to format
+ * -------------------------------------------------------------
+ */
+ function smarty_insert_time($params, Smarty_Internal_Template $template)
+ {
+ if (empty($params['format'])) {
+ trigger_error("insert time: missing 'format' parameter");
+ return;
+ }
+ return strftime($params['format']);
+ }
+ ?>
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md
new file mode 100644
index 000000000..b089821a6
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-modifiers.md
@@ -0,0 +1,86 @@
+Modifiers {#plugins.modifiers}
+=========
+
+[Modifiers](#language.modifiers) are little functions that are applied
+to a variable in the template before it is displayed or used in some
+other context. Modifiers can be chained together.
+
+mixed
+
+smarty\_modifier\_
+
+name
+
+mixed
+
+\$value
+
+\[mixed
+
+\$param1
+
+, \...\]
+
+The first parameter to the modifier plugin is the value on which the
+modifier is to operate. The rest of the parameters are optional,
+depending on what kind of operation is to be performed.
+
+The modifier has to [return](&url.php-manual;return) the result of its
+processing.
+
+This plugin basically aliases one of the built-in PHP functions. It does
+not have any additional parameters.
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: modifier.capitalize.php
+ * Type: modifier
+ * Name: capitalize
+ * Purpose: capitalize words in the string
+ * -------------------------------------------------------------
+ */
+ function smarty_modifier_capitalize($string)
+ {
+ return ucwords($string);
+ }
+ ?>
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: modifier.truncate.php
+ * Type: modifier
+ * Name: truncate
+ * Purpose: Truncate a string to a certain length if necessary,
+ * optionally splitting in the middle of a word, and
+ * appending the $etc string.
+ * -------------------------------------------------------------
+ */
+ function smarty_modifier_truncate($string, $length = 80, $etc = '...',
+ $break_words = false)
+ {
+ if ($length == 0)
+ return '';
+
+ if (strlen($string) > $length) {
+ $length -= strlen($etc);
+ $fragment = substr($string, 0, $length+1);
+ if ($break_words)
+ $fragment = substr($fragment, 0, -1);
+ else
+ $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment);
+ return $fragment.$etc;
+ } else
+ return $string;
+ }
+ ?>
+
+
+
+See also [`registerPlugin()`](#api.register.plugin),
+[`unregisterPlugin()`](#api.unregister.plugin).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md
new file mode 100644
index 000000000..28bbcfde8
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-naming-conventions.md
@@ -0,0 +1,51 @@
+Naming Conventions {#plugins.naming.conventions}
+==================
+
+Plugin files and functions must follow a very specific naming convention
+in order to be located by Smarty.
+
+**plugin files** must be named as follows:
+
+> `
+> type.name.php
+> `
+
+- Where `type` is one of these plugin types:
+
+ - function
+
+ - modifier
+
+ - block
+
+ - compiler
+
+ - prefilter
+
+ - postfilter
+
+ - outputfilter
+
+ - resource
+
+ - insert
+
+- And `name` should be a valid identifier; letters, numbers, and
+ underscores only, see [php
+ variables](&url.php-manual;language.variables).
+
+- Some examples: `function.html_select_date.php`, `resource.db.php`,
+ `modifier.spacify.php`.
+
+**plugin functions** inside the PHP files must be named as follows:
+
+> `smarty_type_name`
+
+- The meanings of `type` and `name` are the same as above.
+
+- An example modifier name `foo` would be
+ `function smarty_modifier_foo()`.
+
+Smarty will output appropriate error messages if the plugin file it
+needs is not found, or if the file or the plugin function are named
+improperly.
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md
new file mode 100644
index 000000000..4e34ab7eb
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-outputfilters.md
@@ -0,0 +1,48 @@
+Output Filters {#plugins.outputfilters}
+==============
+
+Output filter plugins operate on a template\'s output, after the
+template is loaded and executed, but before the output is displayed.
+
+string
+
+smarty\_outputfilter\_
+
+name
+
+string
+
+\$template\_output
+
+object
+
+\$template
+
+The first parameter to the output filter function is the template output
+that needs to be processed, and the second parameter is the instance of
+Smarty invoking the plugin. The plugin is supposed to do the processing
+and return the results.
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: outputfilter.protect_email.php
+ * Type: outputfilter
+ * Name: protect_email
+ * Purpose: Converts @ sign in email addresses to %40 as
+ * a simple protection against spambots
+ * -------------------------------------------------------------
+ */
+ function smarty_outputfilter_protect_email($output, Smarty_Internal_Template $template)
+ {
+ return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
+ '$1%40$2', $output);
+ }
+ ?>
+
+
+
+See also [`registerFilter()`](#api.register.filter),
+[`unregisterFilter()`](#api.unregister.filter).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md
new file mode 100644
index 000000000..39467cbcb
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-prefilters-postfilters.md
@@ -0,0 +1,89 @@
+Prefilters/Postfilters {#plugins.prefilters.postfilters}
+======================
+
+Prefilter and postfilter plugins are very similar in concept; where they
+differ is in the execution \-- more precisely the time of their
+execution.
+
+string
+
+smarty\_prefilter\_
+
+name
+
+string
+
+\$source
+
+object
+
+\$template
+
+Prefilters are used to process the source of the template immediately
+before compilation. The first parameter to the prefilter function is the
+template source, possibly modified by some other prefilters. The plugin
+is supposed to return the modified source. Note that this source is not
+saved anywhere, it is only used for compilation.
+
+string
+
+smarty\_postfilter\_
+
+name
+
+string
+
+\$compiled
+
+object
+
+\$template
+
+Postfilters are used to process the compiled output of the template (the
+PHP code) immediately after the compilation is done but before the
+compiled template is saved to the filesystem. The first parameter to the
+postfilter function is the compiled template code, possibly modified by
+other postfilters. The plugin is supposed to return the modified version
+of this code.
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: prefilter.pre01.php
+ * Type: prefilter
+ * Name: pre01
+ * Purpose: Convert html tags to be lowercase.
+ * -------------------------------------------------------------
+ */
+ function smarty_prefilter_pre01($source, Smarty_Internal_Template $template)
+ {
+ return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source);
+ }
+ ?>
+
+
+
+
+ <?php
+ /*
+ * Smarty plugin
+ * -------------------------------------------------------------
+ * File: postfilter.post01.php
+ * Type: postfilter
+ * Name: post01
+ * Purpose: Output code that lists all current template vars.
+ * -------------------------------------------------------------
+ */
+ function smarty_postfilter_post01($compiled, Smarty_Internal_Template $template)
+ {
+ $compiled = "<pre>\n<?php print_r(\$template->getTemplateVars()); ?>\n</pre>" . $compiled;
+ return $compiled;
+ }
+ ?>
+
+
+
+See also [`registerFilter()`](#api.register.filter) and
+[`unregisterFilter()`](#api.unregister.filter).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md
new file mode 100644
index 000000000..1b1fdf0ab
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-resources.md
@@ -0,0 +1,128 @@
+Resources {#plugins.resources}
+=========
+
+Resource plugins are meant as a generic way of providing template
+sources or PHP script components to Smarty. Some examples of resources:
+databases, LDAP, shared memory, sockets, and so on.
+
+Custom Resources may be put in a file `resource.foobarxyz.php` within
+your [`$plugins_dir`](#variable.plugins.dir), or registered on runtime
+with [`registerResource()`](#api.register.resource). In either case you
+will be able to access that resource by prepending its name to the
+template you\'re addressing: `foobarxyz:yourtemplate.tpl`.
+
+If a Resource\'s templates should not be run through the Smarty
+compiler, the Custom Resource may extend `Smarty_Resource_Uncompiled`.
+The Resource Handler must then implement the function
+`renderUncompiled(Smarty_Internal_Template $_template)`. `$_template` is
+a reference to the current template and contains all assigned variables
+which the implementor can access via
+`$_template->smarty->getTemplateVars()`. These Resources simply echo
+their rendered content to the output stream. The rendered output will be
+output-cached if the Smarty instance was configured accordingly. See
+`libs/sysplugins/smarty_internal_resource_php.php` for an example.
+
+If the Resource\'s compiled templates should not be cached on disk, the
+Custom Resource may extend `Smarty_Resource_Recompiled`. These Resources
+are compiled every time they are accessed. This may be an expensive
+overhead. See `libs/sysplugins/smarty_internal_resource_eval.php` for an
+example.
+
+
+ <?php
+
+ /**
+ * MySQL Resource
+ *
+ * Resource Implementation based on the Custom API to use
+ * MySQL as the storage resource for Smarty's templates and configs.
+ *
+ * Table definition:
+ * <pre>CREATE TABLE IF NOT EXISTS `templates` (
+ * `name` varchar(100) NOT NULL,
+ * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ * `source` text,
+ * PRIMARY KEY (`name`)
+ * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
+ *
+ * Demo data:
+ * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
+ *
+ * @package Resource-examples
+ * @author Rodney Rehm
+ */
+ class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
+ // PDO instance
+ protected $db;
+ // prepared fetch() statement
+ protected $fetch;
+ // prepared fetchTimestamp() statement
+ protected $mtime;
+
+ public function __construct() {
+ try {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
+ } catch (PDOException $e) {
+ throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
+ }
+ $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
+ $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
+ }
+
+ /**
+ * Fetch a template and its modification time from database
+ *
+ * @param string $name template name
+ * @param string $source template source
+ * @param integer $mtime template modification timestamp (epoch)
+ * @return void
+ */
+ protected function fetch($name, &$source, &$mtime)
+ {
+ $this->fetch->execute(array('name' => $name));
+ $row = $this->fetch->fetch();
+ $this->fetch->closeCursor();
+ if ($row) {
+ $source = $row['source'];
+ $mtime = strtotime($row['modified']);
+ } else {
+ $source = null;
+ $mtime = null;
+ }
+ }
+
+ /**
+ * Fetch a template's modification time from database
+ *
+ * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source.
+ * @param string $name template name
+ * @return integer timestamp (epoch) the template was modified
+ */
+ protected function fetchTimestamp($name) {
+ $this->mtime->execute(array('name' => $name));
+ $mtime = $this->mtime->fetchColumn();
+ $this->mtime->closeCursor();
+ return strtotime($mtime);
+ }
+ }
+
+
+ require_once 'libs/Smarty.class.php';
+ $smarty = new Smarty();
+ $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
+
+ // using resource from php script
+ $smarty->display("mysql:index.tpl");
+ ?>
+
+
+
+And from within Smarty template:
+
+
+ {include file='mysql:extras/navigation.tpl'}
+
+
+
+See also [`registerResource()`](#api.register.resource),
+[`unregisterResource()`](#api.unregister.resource).
diff --git a/vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md b/vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md
new file mode 100644
index 000000000..972911d97
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/plugins/plugins-writing.md
@@ -0,0 +1,36 @@
+Writing Plugins {#plugins.writing}
+===============
+
+Plugins can be either loaded by Smarty automatically from the filesystem
+or they can be registered at runtime via one of the register\_\* API
+functions. They can also be unregistered by using unregister\_\* API
+functions.
+
+For the plugins that are registered at runtime, the name of the plugin
+function(s) does not have to follow the naming convention.
+
+If a plugin depends on some functionality provided by another plugin (as
+is the case with some plugins bundled with Smarty), then the proper way
+to load the needed plugin is this:
+
+
+ <?php
+ function smarty_function_yourPlugin(array $params, Smarty_Internal_Template $template)
+ {
+ // load plugin depended upon
+ $template->smarty->loadPlugin('smarty_shared_make_timestamp');
+ // plugin code
+ }
+ ?>
+
+
+
+As a general rule, the currently evaluated template\'s
+Smarty\_Internal\_Template object is always passed to the plugins as the
+last parameter with two exceptions:
+
+- modifiers do not get passed the Smarty\_Internal\_Template object at
+ all
+
+- blocks get passed `$repeat` after the Smarty\_Internal\_Template
+ object to keep backwards compatibility to older versions of Smarty.
diff --git a/vendor/smarty/smarty/docs/programmers/resources.md b/vendor/smarty/smarty/docs/programmers/resources.md
new file mode 100644
index 000000000..239690061
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/resources.md
@@ -0,0 +1,19 @@
+Resources
+=========
+
+The templates may come from a variety of sources. When you
+[`display()`](./api-functions/api-display.md) or [`fetch()`](./api-functions/api-fetch.md) a template, or
+when you include a template from within another template, you supply a
+resource type, followed by the appropriate path and template name. If a
+resource is not explicitly given, the value of
+[`$default_resource_type`](./api-variables/variable-default-resource-type.md) (default:
+\"file\") is assumed.
+
+## Table of contents
+
+- [File Template Resources](./resources/resources-file.md)
+- [String Template Resources](./resources/resources-string.md)
+- [Stream Template Resources](./resources/resources-streams.md)
+- [Extends Template Resources](./resources/resources-extends.md)
+- [Custom Template Resources](./resources/resources-custom.md)
+
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-custom.md b/vendor/smarty/smarty/docs/programmers/resources/resources-custom.md
new file mode 100644
index 000000000..d679afcb1
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/resources/resources-custom.md
@@ -0,0 +1,111 @@
+Custom Template Resources {#resources.custom}
+=========================
+
+You can retrieve templates using whatever possible source you can access
+with PHP: databases, sockets, files, etc. You do this by writing
+resource plugin functions and registering them with Smarty.
+
+See [resource plugins](#plugins.resources) section for more information
+on the functions you are supposed to provide.
+
+> **Note**
+>
+> Note that you cannot override the built-in `file:` resource, but you
+> can provide a resource that fetches templates from the file system in
+> some other way by registering under another resource name.
+
+
+ <?php
+
+ /**
+ * MySQL Resource
+ *
+ * Resource Implementation based on the Custom API to use
+ * MySQL as the storage resource for Smarty's templates and configs.
+ *
+ * Table definition:
+ * <pre>CREATE TABLE IF NOT EXISTS `templates` (
+ * `name` varchar(100) NOT NULL,
+ * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ * `source` text,
+ * PRIMARY KEY (`name`)
+ * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
+ *
+ * Demo data:
+ * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
+ *
+ * @package Resource-examples
+ * @author Rodney Rehm
+ */
+ class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
+ // PDO instance
+ protected $db;
+ // prepared fetch() statement
+ protected $fetch;
+ // prepared fetchTimestamp() statement
+ protected $mtime;
+
+ public function __construct() {
+ try {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
+ } catch (PDOException $e) {
+ throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
+ }
+ $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
+ $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
+ }
+
+ /**
+ * Fetch a template and its modification time from database
+ *
+ * @param string $name template name
+ * @param string $source template source
+ * @param integer $mtime template modification timestamp (epoch)
+ * @return void
+ */
+ protected function fetch($name, &$source, &$mtime)
+ {
+ $this->fetch->execute(array('name' => $name));
+ $row = $this->fetch->fetch();
+ $this->fetch->closeCursor();
+ if ($row) {
+ $source = $row['source'];
+ $mtime = strtotime($row['modified']);
+ } else {
+ $source = null;
+ $mtime = null;
+ }
+ }
+
+ /**
+ * Fetch a template's modification time from database
+ *
+ * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source.
+ * @param string $name template name
+ * @return integer timestamp (epoch) the template was modified
+ */
+ protected function fetchTimestamp($name) {
+ $this->mtime->execute(array('name' => $name));
+ $mtime = $this->mtime->fetchColumn();
+ $this->mtime->closeCursor();
+ return strtotime($mtime);
+ }
+ }
+
+
+ require_once 'libs/Smarty.class.php';
+ $smarty = new Smarty();
+ $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
+
+ // using resource from php script
+ $smarty->display("mysql:index.tpl");
+ ?>
+
+
+
+And from within Smarty template:
+
+
+ {include file='mysql:extras/navigation.tpl'}
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-extends.md b/vendor/smarty/smarty/docs/programmers/resources/resources-extends.md
new file mode 100644
index 000000000..d7213d894
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/resources/resources-extends.md
@@ -0,0 +1,36 @@
+Extends Template Resources {#resources.extends}
+==========================
+
+The `extends:` resource is used to define child/parent relationships for
+template inheritance from the PHP script. For details see section of
+[Template Inheritance](#advanced.features.template.inheritance).
+
+As of Smarty 3.1 the `extends:` resource may use any available [template
+resource](#resources), including `string:` and `eval:`. When [templates
+from strings](#resources.string) are used, make sure they are properly
+(url or base64) encoded. Is an `eval:` resource found within an
+inheritance chain, its \"don\'t save a compile file\" property is
+superseded by the `extends:` resource. The templates within an
+inheritance chain are not compiled separately, though. Only a single
+compiled template will be generated.
+
+> **Note**
+>
+> Use this when inheritance is required programmatically. When inheriting
+> within PHP, it is not obvious from the child template what inheritance
+> took place. If you have a choice, it is normally more flexible and
+> intuitive to handle inheritance chains from within the templates.
+
+
+ <?php
+ $smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl');
+
+ // inheritance from multiple template sources
+ $smarty->display('extends:db:parent.tpl|file:child.tpl|grandchild.tpl|eval:{block name="fooBazVar_"}hello world{/block}');
+ ?>
+
+
+
+See also [Template Inheritance](#advanced.features.template.inheritance)
+[`{block}`](#language.function.block) and
+[`{extends}`](#language.function.extends).
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-file.md b/vendor/smarty/smarty/docs/programmers/resources/resources-file.md
new file mode 100644
index 000000000..e49f4737e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/resources/resources-file.md
@@ -0,0 +1,160 @@
+File Template Resources {#resources.file}
+=======================
+
+Smarty ships with a built-in template resource for the filesystem. The
+`file:` is the default resource. The resource key `file:` must only be
+specified, if the
+[`$default_resource_type`](#variable.default.resource.type) has been
+changed.
+
+If the file resource cannot find the requested template, the
+[`$default_template_handler_func`](#variable.default.template.handler.func)
+is invoked.
+
+> **Note**
+>
+> As of Smarty 3.1 the file resource no longer walks through the
+> [include\_path](&url.php-manual;ini.core.php#ini.include-path) unless
+> [`$use_include_path` is activated](#variable.use.include.path)
+
+Templates from \$template\_dir {#templates.from.template.dir}
+------------------------------
+
+The file resource pulls templates source files from the directories
+specified in [`$template_dir`](#variable.template.dir). The list of
+directories is traversed in the order they appear in the array. The
+first template found is the one to process.
+
+
+ <?php
+ $smarty->display('index.tpl');
+ $smarty->display('file:index.tpl'); // same as above
+ ?>
+
+
+
+From within a Smarty template
+
+
+ {include file='index.tpl'}
+ {include file='file:index.tpl'} {* same as above *}
+
+
+
+Templates from a specific \$template\_dir {#templates.from.specified.template.dir}
+-----------------------------------------
+
+Smarty 3.1 introduced the bracket-syntax for specifying an element from
+[`$template_dir`](#variable.template.dir). This allows websites
+employing multiple sets of templates better control over which template
+to access.
+
+The bracket-syntax can be used from anywhere you can specify the `file:`
+resource type.
+
+
+ <?php
+
+ // setup template directories
+ $smarty->setTemplateDir(array(
+ './templates', // element: 0, index: 0
+ './templates_2', // element: 1, index: 1
+ '10' => 'templates_10', // element: 2, index: '10'
+ 'foo' => 'templates_foo', // element: 3, index: 'foo'
+ ));
+
+ /*
+ assume the template structure
+ ./templates/foo.tpl
+ ./templates_2/foo.tpl
+ ./templates_2/bar.tpl
+ ./templates_10/foo.tpl
+ ./templates_10/bar.tpl
+ ./templates_foo/foo.tpl
+ */
+
+ // regular access
+ $smarty->display('file:foo.tpl');
+ // will load ./templates/foo.tpl
+
+ // using numeric index
+ $smarty->display('file:[1]foo.tpl');
+ // will load ./templates_2/foo.tpl
+
+ // using numeric string index
+ $smarty->display('file:[10]foo.tpl');
+ // will load ./templates_10/foo.tpl
+
+ // using string index
+ $smarty->display('file:[foo]foo.tpl');
+ // will load ./templates_foo/foo.tpl
+
+ // using "unknown" numeric index (using element number)
+ $smarty->display('file:[2]foo.tpl');
+ // will load ./templates_10/foo.tpl
+
+ ?>
+
+
+
+From within a Smarty template
+
+
+ {include file="file:foo.tpl"}
+ {* will load ./templates/foo.tpl *}
+
+ {include file="file:[1]foo.tpl"}
+ {* will load ./templates_2/foo.tpl *}
+
+ {include file="file:[foo]foo.tpl"}
+ {* will load ./templates_foo/foo.tpl *}
+
+
+
+Templates from any directory {#templates.from.any.dir}
+----------------------------
+
+Templates outside of the [`$template_dir`](#variable.template.dir)
+require the `file:` template resource type, followed by the absolute
+path to the template (with leading slash.)
+
+> **Note**
+>
+> With [`Security`](#advanced.features.security) enabled, access to
+> templates outside of the [`$template_dir`](#variable.template.dir) is
+> not allowed unless you list those directories in `$secure_dir`.
+
+
+ <?php
+ $smarty->display('file:/export/templates/index.tpl');
+ $smarty->display('file:/path/to/my/templates/menu.tpl');
+ ?>
+
+
+
+And from within a Smarty template:
+
+
+ {include file='file:/usr/local/share/templates/navigation.tpl'}
+
+
+
+Windows Filepaths {#templates.windows.filepath}
+-----------------
+
+If you are using a Windows machine, filepaths usually include a drive
+letter (C:) at the beginning of the pathname. Be sure to use `file:` in
+the path to avoid namespace conflicts and get the desired results.
+
+
+ <?php
+ $smarty->display('file:C:/export/templates/index.tpl');
+ $smarty->display('file:F:/path/to/my/templates/menu.tpl');
+ ?>
+
+
+
+And from within Smarty template:
+
+
+ {include file='file:D:/usr/local/share/templates/navigation.tpl'}
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-streams.md b/vendor/smarty/smarty/docs/programmers/resources/resources-streams.md
new file mode 100644
index 000000000..e0596f591
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/resources/resources-streams.md
@@ -0,0 +1,27 @@
+Stream Template Resources {#resources.streams}
+=========================
+
+Streams allow you to use PHP streams as a template resource. The syntax
+is much the same a traditional template resource names.
+
+Smarty will first look for a registered template resource. If nothing is
+found, it will check if a PHP stream is available. If a stream is
+available, Smarty will use it to fetch the template.
+
+> **Note**
+>
+> You can further define allowed streams with security enabled.
+
+Using a PHP stream for a template resource from the display() function.
+
+
+ $smarty->display('foo:bar.tpl');
+
+
+
+Using a PHP stream for a template resource from within a template.
+
+
+ {include file="foo:bar.tpl"}
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/resources/resources-string.md b/vendor/smarty/smarty/docs/programmers/resources/resources-string.md
new file mode 100644
index 000000000..4b19d8e32
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/resources/resources-string.md
@@ -0,0 +1,73 @@
+String Template Resources {#resources.string}
+=========================
+
+Smarty can render templates from a string by using the `string:` or
+`eval:` resource.
+
+- The `string:` resource behaves much the same as a template file. The
+ template source is compiled from a string and stores the compiled
+ template code for later reuse. Each unique template string will
+ create a new compiled template file. If your template strings are
+ accessed frequently, this is a good choice. If you have frequently
+ changing template strings (or strings with low reuse value), the
+ `eval:` resource may be a better choice, as it doesn\'t save
+ compiled templates to disk.
+
+- The `eval:` resource evaluates the template source every time a page
+ is rendered. This is a good choice for strings with low reuse value.
+ If the same string is accessed frequently, the `string:` resource
+ may be a better choice.
+
+> **Note**
+>
+> With a `string:` resource type, each unique string generates a
+> compiled file. Smarty cannot detect a string that has changed, and
+> therefore will generate a new compiled file for each unique string. It
+> is important to choose the correct resource so that you do not fill
+> your disk space with wasted compiled strings.
+
+
+ <?php
+ $smarty->assign('foo','value');
+ $template_string = 'display {$foo} here';
+ $smarty->display('string:'.$template_string); // compiles for later reuse
+ $smarty->display('eval:'.$template_string); // compiles every time
+ ?>
+
+
+
+From within a Smarty template
+
+
+ {include file="string:$template_string"} {* compiles for later reuse *}
+ {include file="eval:$template_string"} {* compiles every time *}
+
+
+
+
+Both `string:` and `eval:` resources may be encoded with
+[`urlencode()`](&url.php-manual;urlencode) or
+[`base64_encode()`](&url.php-manual;urlencode). This is not necessary
+for the usual use of `string:` and `eval:`, but is required when using
+either of them in conjunction with
+[`Extends Template Resource`](#resources.extends)
+
+
+ <?php
+ $smarty->assign('foo','value');
+ $template_string_urlencode = urlencode('display {$foo} here');
+ $template_string_base64 = base64_encode('display {$foo} here');
+ $smarty->display('eval:urlencode:'.$template_string_urlencode); // will decode string using urldecode()
+ $smarty->display('eval:base64:'.$template_string_base64); // will decode string using base64_decode()
+ ?>
+
+
+
+From within a Smarty template
+
+
+ {include file="string:urlencode:$template_string_urlencode"} {* will decode string using urldecode() *}
+ {include file="eval:base64:$template_string_base64"} {* will decode string using base64_decode() *}
+
+
+
diff --git a/vendor/smarty/smarty/docs/programmers/resources/template-resources.md b/vendor/smarty/smarty/docs/programmers/resources/template-resources.md
new file mode 100644
index 000000000..7bb5d752e
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/resources/template-resources.md
@@ -0,0 +1,130 @@
+Resources {#resasdources}
+=========
+
+The templates may come from a variety of sources. When you
+[`display()`](#api.display) or [`fetch()`](#api.fetch) a template, or
+when you include a template from within another template, you supply a
+resource type, followed by the appropriate path and template name. If a
+resource is not explicitly given, the value of
+[`$default_resource_type`](#variable.default.resource.type) is assumed.
+
+Templates from other sources {#templates.from.elsewhere}
+----------------------------
+
+You can retrieve templates using whatever possible source you can access
+with PHP: databases, sockets, files, etc. You do this by writing
+resource plugin functions and registering them with Smarty.
+
+See [resource plugins](#plugins.resources) section for more information
+on the functions you are supposed to provide.
+
+> **Note**
+>
+> Note that you cannot override the built-in `file:` resource, but you
+> can provide a resource that fetches templates from the file system in
+> some other way by registering under another resource name.
+
+
+ <?php
+
+ /**
+ * MySQL Resource
+ *
+ * Resource Implementation based on the Custom API to use
+ * MySQL as the storage resource for Smarty's templates and configs.
+ *
+ * Table definition:
+ * <pre>CREATE TABLE IF NOT EXISTS `templates` (
+ * `name` varchar(100) NOT NULL,
+ * `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ * `source` text,
+ * PRIMARY KEY (`name`)
+ * ) ENGINE=InnoDB DEFAULT CHARSET=utf8;</pre>
+ *
+ * Demo data:
+ * <pre>INSERT INTO `templates` (`name`, `modified`, `source`) VALUES ('test.tpl', "2010-12-25 22:00:00", '{$x="hello world"}{$x}');</pre>
+ *
+ * @package Resource-examples
+ * @author Rodney Rehm
+ */
+ class Smarty_Resource_Mysql extends Smarty_Resource_Custom {
+ // PDO instance
+ protected $db;
+ // prepared fetch() statement
+ protected $fetch;
+ // prepared fetchTimestamp() statement
+ protected $mtime;
+
+ public function __construct() {
+ try {
+ $this->db = new PDO("mysql:dbname=test;host=127.0.0.1", "smarty", "smarty");
+ } catch (PDOException $e) {
+ throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
+ }
+ $this->fetch = $this->db->prepare('SELECT modified, source FROM templates WHERE name = :name');
+ $this->mtime = $this->db->prepare('SELECT modified FROM templates WHERE name = :name');
+ }
+
+ /**
+ * Fetch a template and its modification time from database
+ *
+ * @param string $name template name
+ * @param string $source template source
+ * @param integer $mtime template modification timestamp (epoch)
+ * @return void
+ */
+ protected function fetch($name, &$source, &$mtime)
+ {
+ $this->fetch->execute(array('name' => $name));
+ $row = $this->fetch->fetch();
+ $this->fetch->closeCursor();
+ if ($row) {
+ $source = $row['source'];
+ $mtime = strtotime($row['modified']);
+ } else {
+ $source = null;
+ $mtime = null;
+ }
+ }
+
+ /**
+ * Fetch a template's modification time from database
+ *
+ * @note implementing this method is optional. Only implement it if modification times can be accessed faster than loading the comple template source.
+ * @param string $name template name
+ * @return integer timestamp (epoch) the template was modified
+ */
+ protected function fetchTimestamp($name) {
+ $this->mtime->execute(array('name' => $name));
+ $mtime = $this->mtime->fetchColumn();
+ $this->mtime->closeCursor();
+ return strtotime($mtime);
+ }
+ }
+
+
+ require_once 'libs/Smarty.class.php';
+ $smarty = new Smarty();
+ $smarty->registerResource('mysql', new Smarty_Resource_Mysql());
+
+ // using resource from php script
+ $smarty->display("mysql:index.tpl");
+ ?>
+
+
+
+And from within Smarty template:
+
+
+ {include file='mysql:extras/navigation.tpl'}
+
+
+
+Default template handler function {#default.template.handler.function}
+---------------------------------
+
+You can specify a function that is used to retrieve template contents in
+the event the template cannot be retrieved from its resource. One use of
+this is to create templates that do not exist on-the-fly.
+
+See also [`Streams`](#advanced.features.streams)
diff --git a/vendor/smarty/smarty/docs/programmers/smarty-constants.md b/vendor/smarty/smarty/docs/programmers/smarty-constants.md
new file mode 100644
index 000000000..de04e1b59
--- /dev/null
+++ b/vendor/smarty/smarty/docs/programmers/smarty-constants.md
@@ -0,0 +1,26 @@
+Constants {#smarty.constants}
+=========
+
+SMARTY\_DIR {#constant.smarty.dir}
+===========
+
+This is the **full system path** to the location of the Smarty class
+files. If this is not defined in your script, then Smarty will attempt
+to determine the appropriate value automatically. If defined, the path
+**must end with a trailing slash/**.
+
+
+ <?php
+ // set path to Smarty directory *nix style
+ define('SMARTY_DIR', '/usr/local/lib/php/Smarty-v.e.r/libs/');
+
+ // path to Smarty windows style
+ define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
+
+ // include the smarty class, note 'S' is upper case
+ require_once(SMARTY_DIR . 'Smarty.class.php');
+ ?>
+
+
+
+See also [`$smarty.const`](../designers/language-variables/language-variables-smarty.md).
diff --git a/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex b/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex
index 67c840d74..2cd46df97 100644
--- a/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex
+++ b/vendor/smarty/smarty/lexer/smarty_internal_templatelexer.plex
@@ -161,7 +161,6 @@ class Smarty_Internal_Templatelexer
'COMMENT' => 'comment',
'AS' => 'as',
'TO' => 'to',
- 'PHP' => '"<?php", "<%", "{php}" tag',
'LOGOP' => '"<", "==" ... logical operator',
'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition',
'SCOND' => '"is even" ... if condition',
diff --git a/vendor/smarty/smarty/libs/Autoloader.php b/vendor/smarty/smarty/libs/Autoloader.php
index 1673ce2ff..da7e32abf 100644
--- a/vendor/smarty/smarty/libs/Autoloader.php
+++ b/vendor/smarty/smarty/libs/Autoloader.php
@@ -5,6 +5,11 @@
* @package Smarty
*/
+
+if (!defined('SMARTY_HELPER_FUNCTIONS_LOADED')) {
+ include __DIR__ . '/functions.php';
+}
+
/**
* Smarty Autoloader
*
@@ -73,7 +78,7 @@ class Smarty_Autoloader
*/
public static function register($prepend = false)
{
- self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR;
+ self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : __DIR__ . DIRECTORY_SEPARATOR;
self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR :
self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR;
spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
@@ -89,7 +94,7 @@ class Smarty_Autoloader
if ($class[ 0 ] !== 'S' || strpos($class, 'Smarty') !== 0) {
return;
}
- $_class = strtolower($class);
+ $_class = smarty_strtolower_ascii($class);
if (isset(self::$rootClasses[ $_class ])) {
$file = self::$SMARTY_DIR . self::$rootClasses[ $_class ];
if (is_file($file)) {
diff --git a/vendor/smarty/smarty/libs/Smarty.class.php b/vendor/smarty/smarty/libs/Smarty.class.php
index 21beafdf0..5d2e3a4b4 100644
--- a/vendor/smarty/smarty/libs/Smarty.class.php
+++ b/vendor/smarty/smarty/libs/Smarty.class.php
@@ -36,7 +36,7 @@ if (!defined('SMARTY_DIR')) {
/**
*
*/
- define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
+ define('SMARTY_DIR', __DIR__ . DIRECTORY_SEPARATOR);
}
/**
* set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins.
@@ -60,12 +60,21 @@ if (!defined('SMARTY_MBSTRING')) {
*/
define('SMARTY_MBSTRING', function_exists('mb_get_info'));
}
+
+/**
+ * Load helper functions
+ */
+if (!defined('SMARTY_HELPER_FUNCTIONS_LOADED')) {
+ include __DIR__ . '/functions.php';
+}
+
/**
* Load Smarty_Autoloader
*/
if (!class_exists('Smarty_Autoloader')) {
- include dirname(__FILE__) . '/bootstrap.php';
+ include __DIR__ . '/bootstrap.php';
}
+
/**
* Load always needed external class files
*/
@@ -98,7 +107,7 @@ class Smarty extends Smarty_Internal_TemplateBase
/**
* smarty version
*/
- const SMARTY_VERSION = '4.2.1';
+ const SMARTY_VERSION = '4.3.0';
/**
* define variable scopes
*/
diff --git a/vendor/smarty/smarty/libs/bootstrap.php b/vendor/smarty/smarty/libs/bootstrap.php
index 2c830468e..a226ac04e 100644
--- a/vendor/smarty/smarty/libs/bootstrap.php
+++ b/vendor/smarty/smarty/libs/bootstrap.php
@@ -11,6 +11,6 @@
* Load and register Smarty Autoloader
*/
if (!class_exists('Smarty_Autoloader')) {
- include dirname(__FILE__) . '/Autoloader.php';
+ include __DIR__ . '/Autoloader.php';
}
Smarty_Autoloader::register(true);
diff --git a/vendor/smarty/smarty/libs/functions.php b/vendor/smarty/smarty/libs/functions.php
new file mode 100644
index 000000000..bac00e521
--- /dev/null
+++ b/vendor/smarty/smarty/libs/functions.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * This file is part of the Smarty package.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+/**
+ * Registers some helper/polyfill functions.
+ */
+
+const SMARTY_HELPER_FUNCTIONS_LOADED = true;
+
+/**
+ * Converts the first characters in $string to uppercase (A-Z) if it is an ASCII lowercase character (a-z).
+ *
+ * May not be required when running PHP8.2+: https://wiki.php.net/rfc/strtolower-ascii
+ *
+ * @param $string
+ *
+ * @return string
+ */
+function smarty_ucfirst_ascii($string): string {
+ return smarty_strtoupper_ascii(substr($string, 0, 1)) . substr($string, 1);
+}
+
+/**
+ * Converts all uppercase ASCII characters (A-Z) in $string to lowercase (a-z).
+ *
+ * May not be required when running PHP8.2+: https://wiki.php.net/rfc/strtolower-ascii
+ *
+ * @param $string
+ *
+ * @return string
+ */
+function smarty_strtolower_ascii($string): string {
+ return strtr($string, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');
+}
+
+/**
+ * Converts all lowercase ASCII characters (a-z) in $string to uppercase (A-Z).
+ *
+ * May not be required when running PHP8.2+: https://wiki.php.net/rfc/strtolower-ascii
+ *
+ * @param $string
+ *
+ * @return string
+ */
+function smarty_strtoupper_ascii($string): string {
+ return strtr($string, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
+} \ No newline at end of file
diff --git a/vendor/smarty/smarty/libs/plugins/function.html_select_date.php b/vendor/smarty/smarty/libs/plugins/function.html_select_date.php
index a396046b2..d9c571976 100644
--- a/vendor/smarty/smarty/libs/plugins/function.html_select_date.php
+++ b/vendor/smarty/smarty/libs/plugins/function.html_select_date.php
@@ -316,8 +316,8 @@ function smarty_function_html_select_date($params, Smarty_Internal_Template $tem
for ($i = 1; $i <= 12; $i++) {
$_val = sprintf('%02d', $i);
$_text = isset($month_names) ? smarty_function_escape_special_chars($month_names[ $i ]) :
- ($month_format === '%m' ? $_val : strftime($month_format, $_month_timestamps[ $i ]));
- $_value = $month_value_format === '%m' ? $_val : strftime($month_value_format, $_month_timestamps[ $i ]);
+ ($month_format === '%m' ? $_val : @strftime($month_format, $_month_timestamps[ $i ]));
+ $_value = $month_value_format === '%m' ? $_val : @strftime($month_value_format, $_month_timestamps[ $i ]);
$_html_months .= '<option value="' . $_value . '"' . ($_val == $_month ? ' selected="selected"' : '') .
'>' . $_text . '</option>' . $option_separator;
}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.capitalize.php b/vendor/smarty/smarty/libs/plugins/modifier.capitalize.php
index b7da08980..2903d61d7 100644
--- a/vendor/smarty/smarty/libs/plugins/modifier.capitalize.php
+++ b/vendor/smarty/smarty/libs/plugins/modifier.capitalize.php
@@ -22,7 +22,7 @@
*/
function smarty_modifier_capitalize($string, $uc_digits = false, $lc_rest = false)
{
- $string = (string) $string;
+ $string = (string) $string;
if (Smarty::$_MBSTRING) {
if ($lc_rest) {
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.count.php b/vendor/smarty/smarty/libs/plugins/modifier.count.php
new file mode 100644
index 000000000..ca35fc115
--- /dev/null
+++ b/vendor/smarty/smarty/libs/plugins/modifier.count.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifier
+ */
+/**
+ * Smarty count modifier plugin
+ * Type: modifier
+ * Name: count
+ * Purpose: counts all elements in an array or in a Countable object
+ * Input:
+ * - Countable|array: array or object to count
+ * - mode: int defaults to 0 for normal count mode, if set to 1 counts recursive
+ *
+ * @param mixed $arrayOrObject input array/object
+ * @param int $mode count mode
+ *
+ * @return int
+ */
+function smarty_modifier_count($arrayOrObject, $mode = 0)
+{
+ /*
+ * @see https://www.php.net/count
+ * > Prior to PHP 8.0.0, if the parameter was neither an array nor an object that implements the Countable interface,
+ * > 1 would be returned, unless value was null, in which case 0 would be returned.
+ */
+
+ if ($arrayOrObject instanceof Countable || is_array($arrayOrObject)) {
+ return count($arrayOrObject, (int) $mode);
+ } elseif ($arrayOrObject === null) {
+ return 0;
+ }
+ return 1;
+}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.date_format.php b/vendor/smarty/smarty/libs/plugins/modifier.date_format.php
index 8e7e0b6e1..e3589fd07 100644
--- a/vendor/smarty/smarty/libs/plugins/modifier.date_format.php
+++ b/vendor/smarty/smarty/libs/plugins/modifier.date_format.php
@@ -78,7 +78,8 @@ function smarty_modifier_date_format($string, $format = null, $default_date = ''
}
$format = str_replace($_win_from, $_win_to, $format);
}
- return strftime($format, $timestamp);
+ // @ to suppress deprecation errors when running in PHP8.1 or higher.
+ return @strftime($format, $timestamp);
} else {
return date($format, $timestamp);
}
diff --git a/vendor/smarty/smarty/libs/plugins/modifier.escape.php b/vendor/smarty/smarty/libs/plugins/modifier.escape.php
index 3ce483827..11e44682e 100644
--- a/vendor/smarty/smarty/libs/plugins/modifier.escape.php
+++ b/vendor/smarty/smarty/libs/plugins/modifier.escape.php
@@ -23,7 +23,6 @@
*/
function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $double_encode = true)
{
- static $_double_encode = true;
static $is_loaded_1 = false;
static $is_loaded_2 = false;
if (!$char_set) {
@@ -34,87 +33,15 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = null, $
switch ($esc_type) {
case 'html':
- if ($_double_encode) {
- // php >=5.3.2 - go native
- return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
- } else {
- if ($double_encode) {
- // php <5.2.3 - only handle double encoding
- return htmlspecialchars($string, ENT_QUOTES, $char_set);
- } else {
- // php <5.2.3 - prevent double encoding
- $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
- $string = htmlspecialchars($string, ENT_QUOTES, $char_set);
- $string = str_replace(
- array(
- '%%%SMARTY_START%%%',
- '%%%SMARTY_END%%%'
- ),
- array(
- '&',
- ';'
- ),
- $string
- );
- return $string;
- }
- }
+ return htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
// no break
case 'htmlall':
if (Smarty::$_MBSTRING) {
- // mb_convert_encoding ignores htmlspecialchars()
- if ($_double_encode) {
- // php >=5.3.2 - go native
- $string = htmlspecialchars($string, ENT_QUOTES, $char_set, $double_encode);
- } else {
- if ($double_encode) {
- // php <5.2.3 - only handle double encoding
- $string = htmlspecialchars($string, ENT_QUOTES, $char_set);
- } else {
- // php <5.2.3 - prevent double encoding
- $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
- $string = htmlspecialchars($string, ENT_QUOTES, $char_set);
- $string =
- str_replace(
- array(
- '%%%SMARTY_START%%%',
- '%%%SMARTY_END%%%'
- ),
- array(
- '&',
- ';'
- ),
- $string
- );
- return $string;
- }
- }
- // htmlentities() won't convert everything, so use mb_convert_encoding
- return mb_convert_encoding($string, 'HTML-ENTITIES', $char_set);
+ $string = mb_convert_encoding($string, 'UTF-8', $char_set);
+ return htmlentities($string, ENT_QUOTES, 'UTF-8', $double_encode);
}
// no MBString fallback
- if ($_double_encode) {
- return htmlentities($string, ENT_QUOTES, $char_set, $double_encode);
- } else {
- if ($double_encode) {
- return htmlentities($string, ENT_QUOTES, $char_set);
- } else {
- $string = preg_replace('!&(#?\w+);!', '%%%SMARTY_START%%%\\1%%%SMARTY_END%%%', $string);
- $string = htmlentities($string, ENT_QUOTES, $char_set);
- $string = str_replace(
- array(
- '%%%SMARTY_START%%%',
- '%%%SMARTY_END%%%'
- ),
- array(
- '&',
- ';'
- ),
- $string
- );
- return $string;
- }
- }
+ return htmlentities($string, ENT_QUOTES, $char_set, $double_encode);
// no break
case 'url':
return rawurlencode($string);
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php
index 1fc5e7817..602c3dbfc 100644
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php
+++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.escape.php
@@ -18,12 +18,10 @@
* @param Smarty_Internal_TemplateCompilerBase $compiler
*
* @return string with compiled code
- * @throws \SmartyException
+ * @throws SmartyException
*/
function smarty_modifiercompiler_escape($params, Smarty_Internal_TemplateCompilerBase $compiler)
{
- static $_double_encode = true;
- static $is_loaded = false;
$compiler->template->_checkPlugins(
array(
array(
@@ -41,41 +39,18 @@ function smarty_modifiercompiler_escape($params, Smarty_Internal_TemplateCompile
}
switch ($esc_type) {
case 'html':
- if ($_double_encode) {
- return 'htmlspecialchars((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
- var_export($double_encode, true) . ')';
- } elseif ($double_encode) {
- return 'htmlspecialchars((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ')';
- } else {
- // fall back to modifier.escape.php
- }
+ return 'htmlspecialchars((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
+ var_export($double_encode, true) . ')';
// no break
case 'htmlall':
if (Smarty::$_MBSTRING) {
- if ($_double_encode) {
- // php >=5.2.3 - go native
- return 'mb_convert_encoding(htmlspecialchars((string)' . $params[ 0 ] . ', ENT_QUOTES, ' .
- var_export($char_set, true) . ', ' . var_export($double_encode, true) .
- '), "HTML-ENTITIES", ' . var_export($char_set, true) . ')';
- } elseif ($double_encode) {
- // php <5.2.3 - only handle double encoding
- return 'mb_convert_encoding(htmlspecialchars((string)' . $params[ 0 ] . ', ENT_QUOTES, ' .
- var_export($char_set, true) . '), "HTML-ENTITIES", ' . var_export($char_set, true) . ')';
- } else {
- // fall back to modifier.escape.php
- }
+ return 'htmlentities(mb_convert_encoding((string)' . $params[ 0 ] . ', \'UTF-8\', ' .
+ var_export($char_set, true) . '), ENT_QUOTES, \'UTF-8\', ' .
+ var_export($double_encode, true) . ')';
}
// no MBString fallback
- if ($_double_encode) {
- // php >=5.2.3 - go native
- return 'htmlentities((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
- var_export($double_encode, true) . ')';
- } elseif ($double_encode) {
- // php <5.2.3 - only handle double encoding
- return 'htmlentities((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ')';
- } else {
- // fall back to modifier.escape.php
- }
+ return 'htmlentities((string)' . $params[ 0 ] . ', ENT_QUOTES, ' . var_export($char_set, true) . ', ' .
+ var_export($double_encode, true) . ')';
// no break
case 'url':
return 'rawurlencode((string)' . $params[ 0 ] . ')';
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.nl2br.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.nl2br.php
new file mode 100644
index 000000000..308c00e42
--- /dev/null
+++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.nl2br.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+/**
+ * Smarty nl2br modifier plugin
+ * Type: modifier
+ * Name: nl2br
+ * Purpose: insert HTML line breaks before all newlines in a string
+ *
+ * @link https://www.smarty.net/docs/en/language.modifier.nl2br.tpl nl2br (Smarty online manual)
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_nl2br($params) {
+ return 'nl2br((string) ' . $params[0] . ', (bool) ' . ($params[1] ?? true) . ')';
+}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.round.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.round.php
new file mode 100644
index 000000000..97f072f00
--- /dev/null
+++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.round.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+/**
+ * Smarty round modifier plugin
+ * Type: modifier
+ * Name: round
+ * Purpose: Returns the rounded value of num to specified precision (number of digits after the decimal point)
+ *
+ * @link https://www.smarty.net/docs/en/language.modifier.round.tpl round (Smarty online manual)
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_round($params) {
+ return 'round((float) ' . $params[0] . ', (int) ' . ($params[1] ?? 0) . ', (int) ' . ($params[2] ?? PHP_ROUND_HALF_UP) . ')';
+}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.str_repeat.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.str_repeat.php
new file mode 100644
index 000000000..18eb7a762
--- /dev/null
+++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.str_repeat.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+/**
+ * Smarty str_repeat modifier plugin
+ * Type: modifier
+ * Name: str_repeat
+ * Purpose: returns string repeated times times
+ *
+ * @link https://www.smarty.net/docs/en/language.modifier.str_repeat.tpl str_repeat (Smarty online manual)
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_str_repeat($params) {
+ return 'str_repeat((string) ' . $params[0] . ', (int) ' . $params[1] . ')';
+}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php
index 6ee3df9a5..bd866a61f 100644
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php
+++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strip_tags.php
@@ -21,8 +21,8 @@
function smarty_modifiercompiler_strip_tags($params)
{
if (!isset($params[ 1 ]) || $params[ 1 ] === true || trim($params[ 1 ], '"') === 'true') {
- return "preg_replace('!<[^>]*?>!', ' ', {$params[0]})";
+ return "preg_replace('!<[^>]*?>!', ' ', {$params[0]} ?: '')";
} else {
- return 'strip_tags(' . $params[ 0 ] . ')';
+ return 'strip_tags((string) ' . $params[ 0 ] . ')';
}
}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.strlen.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strlen.php
new file mode 100644
index 000000000..d43e8ef1c
--- /dev/null
+++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.strlen.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifierCompiler
+ */
+/**
+ * Smarty strlen modifier plugin
+ * Type: modifier
+ * Name: strlen
+ * Purpose: return the length of the given string
+ *
+ * @link https://www.smarty.net/docs/en/language.modifier.strlen.tpl strlen (Smarty online manual)
+ *
+ * @param array $params parameters
+ *
+ * @return string with compiled code
+ */
+function smarty_modifiercompiler_strlen($params) {
+ return 'strlen((string) ' . $params[0] . ')';
+}
diff --git a/vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php b/vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php
index 3438fe3e0..9e1f06d67 100644
--- a/vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php
+++ b/vendor/smarty/smarty/libs/plugins/modifiercompiler.unescape.php
@@ -39,9 +39,9 @@ function smarty_modifiercompiler_unescape($params, Smarty_Internal_TemplateCompi
case 'entity':
case 'htmlall':
if (Smarty::$_MBSTRING) {
- return 'mb_convert_encoding(' . $params[ 0 ] . ', ' . $params[ 2 ] . ', \'HTML-ENTITIES\')';
+ return 'html_entity_decode(mb_convert_encoding(' . $params[ 0 ] . ', ' . $params[ 2 ] . ', \'UTF-8\'), ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ' . $params[ 2 ] . ')';
}
- return 'html_entity_decode(' . $params[ 0 ] . ', ENT_NOQUOTES, ' . $params[ 2 ] . ')';
+ return 'html_entity_decode(' . $params[ 0 ] . ', ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, ' . $params[ 2 ] . ')';
case 'html':
return 'htmlspecialchars_decode(' . $params[ 0 ] . ', ENT_QUOTES)';
case 'url':
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php
index 91e9f3924..db68f9bfd 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource.php
@@ -205,11 +205,11 @@ abstract class Smarty_CacheResource
}
// try sysplugins dir
if (isset(self::$sysplugins[ $type ])) {
- $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type);
+ $cache_resource_class = 'Smarty_Internal_CacheResource_' . smarty_ucfirst_ascii($type);
return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class();
}
// try plugins dir
- $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type);
+ $cache_resource_class = 'Smarty_CacheResource_' . smarty_ucfirst_ascii($type);
if ($smarty->loadPlugin($cache_resource_class)) {
return $smarty->_cache[ 'cacheresource_handlers' ][ $type ] = new $cache_resource_class();
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
index 59bf1d4a8..4b1c0f6d8 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_cacheresource_keyvaluestore.php
@@ -244,7 +244,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
*/
protected function sanitize($string)
{
- $string = trim($string, '|');
+ $string = trim((string)$string, '|');
if (!$string) {
return '';
}
@@ -428,7 +428,7 @@ abstract class Smarty_CacheResource_KeyValueStore extends Smarty_CacheResource
$t[] = 'IVK#COMPILE' . $_compile;
}
$_name .= '#';
- $cid = trim($cache_id, '|');
+ $cid = trim((string)$cache_id, '|');
if (!$cid) {
return $t;
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
index d3aab24bb..246350dc8 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_foreachsection.php
@@ -143,7 +143,7 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com
foreach ($this->resultOffsets as $key => $offset) {
foreach ($match[ $offset ] as $m) {
if (!empty($m)) {
- $this->matchResults[ $key ][ strtolower($m) ] = true;
+ $this->matchResults[ $key ][ smarty_strtolower_ascii($m) ] = true;
}
}
}
@@ -213,12 +213,12 @@ class Smarty_Internal_Compile_Private_ForeachSection extends Smarty_Internal_Com
*/
public function compileSpecialVariable($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
- $tag = strtolower(trim($parameter[ 0 ], '"\''));
+ $tag = smarty_strtolower_ascii(trim($parameter[ 0 ], '"\''));
$name = isset($parameter[ 1 ]) ? $compiler->getId($parameter[ 1 ]) : false;
if (!$name) {
$compiler->trigger_template_error("missing or illegal \$smarty.{$tag} name attribute", null, true);
}
- $property = isset($parameter[ 2 ]) ? strtolower($compiler->getId($parameter[ 2 ])) : false;
+ $property = isset($parameter[ 2 ]) ? smarty_strtolower_ascii($compiler->getId($parameter[ 2 ])) : false;
if (!$property || !in_array($property, $this->nameProperties)) {
$compiler->trigger_template_error("missing or illegal \$smarty.{$tag} property attribute", null, true);
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
index 72773fff8..aea082f01 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_modifier.php
@@ -109,6 +109,9 @@ class Smarty_Internal_Compile_Private_Modifier extends Smarty_Internal_CompileBa
if (!is_object($compiler->smarty->security_policy)
|| $compiler->smarty->security_policy->isTrustedPhpModifier($modifier, $compiler)
) {
+ trigger_error('Using php-function "' . $modifier . '" as a modifier is deprecated and will be ' .
+ 'removed in a future release. Use Smarty::registerPlugin to explicitly register ' .
+ 'a custom modifier.', E_USER_DEPRECATED);
$output = "{$modifier}({$params})";
}
$compiler->known_modifier_type[ $modifier ] = $type;
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
index d53ef51ff..590cba5af 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_compile_private_special_variable.php
@@ -29,7 +29,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $parameter)
{
$_index = preg_split("/\]\[/", substr($parameter, 1, strlen($parameter) - 2));
- $variable = strtolower($compiler->getId($_index[ 0 ]));
+ $variable = smarty_strtolower_ascii($compiler->getId($_index[ 0 ]));
if ($variable === false) {
$compiler->trigger_template_error("special \$Smarty variable name index can not be variable", null, true);
}
@@ -40,7 +40,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
case 'foreach':
case 'section':
if (!isset(Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ])) {
- $class = 'Smarty_Internal_Compile_' . ucfirst($variable);
+ $class = 'Smarty_Internal_Compile_' . smarty_ucfirst_ascii($variable);
Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ] = new $class;
}
return Smarty_Internal_TemplateCompilerBase::$_tag_objects[ $variable ]->compileSpecialVariable(
@@ -76,7 +76,7 @@ class Smarty_Internal_Compile_Private_Special_Variable extends Smarty_Internal_C
$compiler->trigger_template_error("(secure mode) super globals not permitted");
break;
}
- $compiled_ref = '$_' . strtoupper($variable);
+ $compiled_ref = '$_' . smarty_strtoupper_ascii($variable);
break;
case 'template':
return 'basename($_smarty_tpl->source->filepath)';
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php
index 24b233e26..570819d26 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_debug.php
@@ -210,7 +210,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
// copy the working dirs from application
$debObj->setCompileDir($smarty->getCompileDir());
// init properties by hand as user may have edited the original Smarty class
- $debObj->setPluginsDir(is_dir(dirname(__FILE__) . '/../plugins') ? dirname(__FILE__) .
+ $debObj->setPluginsDir(is_dir(__DIR__ . '/../plugins') ? __DIR__ .
'/../plugins' : $smarty->getPluginsDir());
$debObj->force_compile = false;
$debObj->compile_check = Smarty::COMPILECHECK_ON;
@@ -221,7 +221,7 @@ class Smarty_Internal_Debug extends Smarty_Internal_Data
$debObj->debugging_ctrl = 'NONE';
$debObj->error_reporting = E_ALL & ~E_NOTICE;
$debObj->debug_tpl =
- isset($smarty->debug_tpl) ? $smarty->debug_tpl : 'file:' . dirname(__FILE__) . '/../debug.tpl';
+ isset($smarty->debug_tpl) ? $smarty->debug_tpl : 'file:' . __DIR__ . '/../debug.tpl';
$debObj->registered_plugins = array();
$debObj->registered_resources = array();
$debObj->registered_filters = array();
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php
index b07615526..3ef040ab1 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_extension_handler.php
@@ -36,6 +36,7 @@
* @property Smarty_Internal_Method_RegisterPlugin $registerPlugin
* @property mixed|\Smarty_Template_Cached configLoad
*/
+#[\AllowDynamicProperties]
class Smarty_Internal_Extension_Handler
{
public $objType = null;
@@ -88,20 +89,19 @@ class Smarty_Internal_Extension_Handler
$objType = $data->_objType;
$propertyType = false;
if (!isset($this->resolvedProperties[ $match[ 0 ] ][ $objType ])) {
- $property = isset($this->resolvedProperties[ 'property' ][ $basename ]) ?
- $this->resolvedProperties[ 'property' ][ $basename ] :
- $property = $this->resolvedProperties[ 'property' ][ $basename ] = strtolower(
- join(
- '_',
- preg_split(
- '/([A-Z][^A-Z]*)/',
- $basename,
- -1,
- PREG_SPLIT_NO_EMPTY |
- PREG_SPLIT_DELIM_CAPTURE
- )
+ $property = $this->resolvedProperties['property'][$basename] ??
+ $this->resolvedProperties['property'][$basename] = smarty_strtolower_ascii(
+ join(
+ '_',
+ preg_split(
+ '/([A-Z][^A-Z]*)/',
+ $basename,
+ -1,
+ PREG_SPLIT_NO_EMPTY |
+ PREG_SPLIT_DELIM_CAPTURE
)
- );
+ )
+ );
if ($property !== false) {
if (property_exists($data, $property)) {
$propertyType = $this->resolvedProperties[ $match[ 0 ] ][ $objType ] = 1;
@@ -145,7 +145,7 @@ class Smarty_Internal_Extension_Handler
public function upperCase($name)
{
$_name = explode('_', $name);
- $_name = array_map('ucfirst', $_name);
+ $_name = array_map('smarty_ucfirst_ascii', $_name);
return implode('_', $_name);
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php
index 3bd659cb8..6ddcaec94 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_loadplugin.php
@@ -40,7 +40,7 @@ class Smarty_Internal_Method_LoadPlugin
throw new SmartyException("plugin {$plugin_name} is not a valid name format");
}
if (!empty($match[ 2 ])) {
- $file = SMARTY_SYSPLUGINS_DIR . strtolower($plugin_name) . '.php';
+ $file = SMARTY_SYSPLUGINS_DIR . smarty_strtolower_ascii($plugin_name) . '.php';
if (isset($this->plugin_files[ $file ])) {
if ($this->plugin_files[ $file ] !== false) {
return $this->plugin_files[ $file ];
@@ -60,7 +60,7 @@ class Smarty_Internal_Method_LoadPlugin
}
// plugin filename is expected to be: [type].[name].php
$_plugin_filename = "{$match[1]}.{$match[4]}.php";
- $_lower_filename = strtolower($_plugin_filename);
+ $_lower_filename = smarty_strtolower_ascii($_plugin_filename);
if (isset($this->plugin_files)) {
if (isset($this->plugin_files[ 'plugins_dir' ][ $_lower_filename ])) {
if (!$smarty->use_include_path || $this->plugin_files[ 'plugins_dir' ][ $_lower_filename ] !== false) {
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php
index 39318838e..381346c8f 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_method_mustcompile.php
@@ -32,7 +32,7 @@ class Smarty_Internal_Method_MustCompile
{
if (!$_template->source->exists) {
if ($_template->_isSubTpl()) {
- $parent_resource = " in '$_template->parent->template_resource}'";
+ $parent_resource = " in '{$_template->parent->template_resource}'";
} else {
$parent_resource = '';
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php
index 53069148d..7994aa048 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_make_nocache.php
@@ -22,7 +22,7 @@ class Smarty_Internal_Runtime_Make_Nocache
{
if (isset($tpl->tpl_vars[ $var ])) {
$export =
- preg_replace('/^Smarty_Variable::__set_state[(]|[)]$/', '', var_export($tpl->tpl_vars[ $var ], true));
+ preg_replace('/^\\\\?Smarty_Variable::__set_state[(]|[)]$/', '', var_export($tpl->tpl_vars[ $var ], true));
if (preg_match('/(\w+)::__set_state/', $export, $match)) {
throw new SmartyException("{make_nocache \${$var}} in template '{$tpl->source->name}': variable does contain object '{$match[1]}' not implementing method '__set_state'");
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php
index 18c149459..492d5eb25 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_runtime_writefile.php
@@ -29,7 +29,6 @@ class Smarty_Internal_Runtime_WriteFile
{
$_error_reporting = error_reporting();
error_reporting($_error_reporting & ~E_NOTICE & ~E_WARNING);
- $old_umask = umask(0);
$_dirpath = dirname($_filepath);
// if subdirs, create dir structure
if ($_dirpath !== '.') {
@@ -37,7 +36,7 @@ class Smarty_Internal_Runtime_WriteFile
// loop if concurrency problem occurs
// see https://bugs.php.net/bug.php?id=35326
while (!is_dir($_dirpath)) {
- if (@mkdir($_dirpath, 0771, true)) {
+ if (@mkdir($_dirpath, 0777, true)) {
break;
}
clearstatcache();
@@ -85,8 +84,7 @@ class Smarty_Internal_Runtime_WriteFile
throw new SmartyException("unable to write file {$_filepath}");
}
// set file permissions
- chmod($_filepath, 0644);
- umask($old_umask);
+ @chmod($_filepath, 0666 & ~umask());
error_reporting($_error_reporting);
return true;
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php
index bae22a7d5..72d1d52e0 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_template.php
@@ -24,6 +24,7 @@
*
* @method bool mustCompile()
*/
+#[\AllowDynamicProperties]
class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
{
/**
@@ -292,7 +293,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
$smarty = &$this->smarty;
$_templateId = $smarty->_getTemplateId($template, $cache_id, $compile_id, $caching, $tpl);
// recursive call ?
- if (isset($tpl->templateId) ? $tpl->templateId : $tpl->_getTemplateId() !== $_templateId) {
+ if ((isset($tpl->templateId) ? $tpl->templateId : $tpl->_getTemplateId()) !== $_templateId) {
// already in template cache?
if (isset(self::$tplObjCache[ $_templateId ])) {
// copy data from cached object
@@ -358,7 +359,7 @@ class Smarty_Internal_Template extends Smarty_Internal_TemplateBase
}
if ($tpl->caching === 9999) {
if (!isset($tpl->compiled)) {
- $this->loadCompiled(true);
+ $tpl->loadCompiled(true);
}
if ($tpl->compiled->has_nocache_code) {
$this->cached->hashes[ $tpl->compiled->nocache_hash ] = true;
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php
index 2ffb896fa..918362e91 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatebase.php
@@ -257,7 +257,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data
error_reporting($_smarty_old_error_level);
}
return $result;
- } catch (Exception $e) {
+ } catch (Throwable $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
index d6f86ac0a..d5c18d31a 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_templatecompilerbase.php
@@ -605,7 +605,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
if (strcasecmp($name, 'isset') === 0 || strcasecmp($name, 'empty') === 0
|| strcasecmp($name, 'array') === 0 || is_callable($name)
) {
- $func_name = strtolower($name);
+ $func_name = smarty_strtolower_ascii($name);
if ($func_name === 'isset') {
if (count($parameter) === 0) {
@@ -765,7 +765,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
if (!isset(self::$_tag_objects[ $tag ])) {
// lazy load internal compiler plugin
$_tag = explode('_', $tag);
- $_tag = array_map('ucfirst', $_tag);
+ $_tag = array_map('smarty_ucfirst_ascii', $_tag);
$class_name = 'Smarty_Internal_Compile_' . implode('_', $_tag);
if (class_exists($class_name)
&& (!isset($this->smarty->security_policy) || $this->smarty->security_policy->isTrustedTag($tag, $this))
@@ -1131,8 +1131,12 @@ abstract class Smarty_Internal_TemplateCompilerBase
echo ob_get_clean();
flush();
}
- $e = new SmartyCompilerException($error_text);
- $e->setLine($line);
+ $e = new SmartyCompilerException(
+ $error_text,
+ 0,
+ $this->template->source->filepath,
+ $line
+ );
$e->source = trim(preg_replace('![\t\r\n]+!', ' ', $match[ $line - 1 ]));
$e->desc = $args;
$e->template = $this->template->source->filepath;
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php
index 1fac79b74..c8ffd4cc6 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_internal_testinstall.php
@@ -144,7 +144,7 @@ class Smarty_Internal_TestInstall
}
// test if all registered plugins_dir are accessible
// and if core plugins directory is still registered
- $_core_plugins_dir = realpath(dirname(__FILE__) . '/../plugins');
+ $_core_plugins_dir = realpath(__DIR__ . '/../plugins');
$_core_plugins_available = false;
foreach ($smarty->getPluginsDir() as $plugin_dir) {
$_plugin_dir = $plugin_dir;
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php
index 7fe84536f..3c43a9f46 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_resource.php
@@ -76,11 +76,11 @@ abstract class Smarty_Resource
}
// try sysplugins dir
if (isset(self::$sysplugins[ $type ])) {
- $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type);
+ $_resource_class = 'Smarty_Internal_Resource_' . smarty_ucfirst_ascii($type);
return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class();
}
// try plugins dir
- $_resource_class = 'Smarty_Resource_' . ucfirst($type);
+ $_resource_class = 'Smarty_Resource_' . smarty_ucfirst_ascii($type);
if ($smarty->loadPlugin($_resource_class)) {
if (class_exists($_resource_class, false)) {
return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class();
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php
index 8d66be3ae..191fa7c90 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_resource_custom.php
@@ -47,7 +47,7 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource
*/
public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
{
- $source->filepath = $source->type . ':' . substr(preg_replace('/[^A-Za-z0-9.]/', '', $source->name), 0, 25);
+ $source->filepath = $source->type . ':' . $this->generateSafeName($source->name);
$source->uid = sha1($source->type . ':' . $source->name);
$mtime = $this->fetchTimestamp($source->name);
if ($mtime !== null) {
@@ -88,6 +88,17 @@ abstract class Smarty_Resource_Custom extends Smarty_Resource
*/
public function getBasename(Smarty_Template_Source $source)
{
- return basename(substr(preg_replace('/[^A-Za-z0-9.]/', '', $source->name), 0, 25));
+ return basename($this->generateSafeName($source->name));
+ }
+
+ /**
+ * Removes special characters from $name and limits its length to 127 characters.
+ *
+ * @param $name
+ *
+ * @return string
+ */
+ private function generateSafeName($name): string {
+ return substr(preg_replace('/[^A-Za-z0-9._]/', '', (string) $name), 0, 127);
}
}
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_security.php b/vendor/smarty/smarty/libs/sysplugins/smarty_security.php
index 3c29c8132..97cd0521d 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_security.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_security.php
@@ -19,6 +19,7 @@
/**
* This class does contain the security settings
*/
+#[\AllowDynamicProperties]
class Smarty_Security
{
@@ -105,7 +106,7 @@ class Smarty_Security
*
* @var array
*/
- public $php_modifiers = array('escape', 'count', 'nl2br',);
+ public $php_modifiers = array('escape', 'count', 'sizeof', 'nl2br',);
/**
* This is an array of allowed tags.
@@ -328,7 +329,7 @@ class Smarty_Security
*
* @param string $modifier_name
* @param object $compiler compiler object
- *
+ * @deprecated
* @return boolean true if modifier is trusted
*/
public function isTrustedPhpModifier($modifier_name, $compiler)
@@ -556,35 +557,6 @@ class Smarty_Security
}
/**
- * Check if directory of file resource is trusted.
- *
- * @param string $filepath
- *
- * @return boolean true if directory is trusted
- * @throws SmartyException if PHP directory is not trusted
- */
- public function isTrustedPHPDir($filepath)
- {
- if (empty($this->trusted_dir)) {
- throw new SmartyException("directory '{$filepath}' not allowed by security setting (no trusted_dir specified)");
- }
- // check if index is outdated
- if (!$this->_trusted_dir || $this->_trusted_dir !== $this->trusted_dir) {
- $this->_php_resource_dir = array();
- $this->_trusted_dir = $this->trusted_dir;
- foreach ((array)$this->trusted_dir as $directory) {
- $directory = $this->smarty->_realpath($directory . '/', true);
- $this->_php_resource_dir[ $directory ] = true;
- }
- }
- $addPath = $this->_checkDir($filepath, $this->_php_resource_dir);
- if ($addPath !== false) {
- $this->_php_resource_dir = array_merge($this->_php_resource_dir, $addPath);
- }
- return true;
- }
-
- /**
* Remove old directories and its sub folders, add new directories
*
* @param array $oldDir
diff --git a/vendor/smarty/smarty/libs/sysplugins/smarty_variable.php b/vendor/smarty/smarty/libs/sysplugins/smarty_variable.php
index 914d99bd7..6a534228b 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smarty_variable.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smarty_variable.php
@@ -7,6 +7,7 @@
* @package Smarty
* @subpackage Template
*/
+#[\AllowDynamicProperties]
class Smarty_Variable
{
/**
diff --git a/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php b/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php
index 8833aa52c..0a0a32351 100644
--- a/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php
+++ b/vendor/smarty/smarty/libs/sysplugins/smartycompilerexception.php
@@ -8,6 +8,33 @@
class SmartyCompilerException extends SmartyException
{
/**
+ * The constructor of the exception
+ *
+ * @param string $message The Exception message to throw.
+ * @param int $code The Exception code.
+ * @param string|null $filename The filename where the exception is thrown.
+ * @param int|null $line The line number where the exception is thrown.
+ * @param Throwable|null $previous The previous exception used for the exception chaining.
+ */
+ public function __construct(
+ string $message = "",
+ int $code = 0,
+ ?string $filename = null,
+ ?int $line = null,
+ Throwable $previous = null
+ ) {
+ parent::__construct($message, $code, $previous);
+
+ // These are optional parameters, should be be overridden only when present!
+ if ($filename) {
+ $this->file = $filename;
+ }
+ if ($line) {
+ $this->line = $line;
+ }
+ }
+
+ /**
* @return string
*/
public function __toString()
@@ -22,6 +49,7 @@ class SmartyCompilerException extends SmartyException
{
$this->line = $line;
}
+
/**
* The template source snippet relating to the error
*
diff --git a/vendor/smarty/smarty/run-tests-for-all-php-versions.sh b/vendor/smarty/smarty/run-tests-for-all-php-versions.sh
new file mode 100755
index 000000000..6ecd9afbc
--- /dev/null
+++ b/vendor/smarty/smarty/run-tests-for-all-php-versions.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+Help()
+{
+ # Display Help
+ echo "Runs PHPUnit tests for all PHP versions supported by this version of Smarty."
+ echo
+ echo "Syntax: $0 [-e|h]"
+ echo "options:"
+ echo "e Exclude a group of unit tests, e.g. -e 'slow'"
+ echo "h Print this Help."
+ echo
+}
+
+Exclude=""
+
+# Get the options
+while getopts ":he:" option; do
+ case $option in
+ e) # Exclude
+ echo $OPTARG
+ Exclude=$OPTARG;;
+ h) # display Help
+ Help
+ exit;;
+ \?) # Invalid option
+ echo "Error: Invalid option"
+ exit;;
+ esac
+done
+
+if [ -z $Exclude ];
+then
+ Entrypoint="./run-tests.sh"
+else
+ Entrypoint="./run-tests.sh $Exclude"
+fi
+
+# Runs tests for all supported PHP versions
+docker-compose run --entrypoint "$Entrypoint" php71 && \
+docker-compose run --entrypoint "$Entrypoint" php72 && \
+docker-compose run --entrypoint "$Entrypoint" php73 && \
+docker-compose run --entrypoint "$Entrypoint" php74 && \
+docker-compose run --entrypoint "$Entrypoint" php80 && \
+docker-compose run --entrypoint "$Entrypoint" php81
diff --git a/vendor/smarty/smarty/run-tests.sh b/vendor/smarty/smarty/run-tests.sh
new file mode 100755
index 000000000..ddcad01b1
--- /dev/null
+++ b/vendor/smarty/smarty/run-tests.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+composer update
+
+php -r 'echo "\nPHP version " . phpversion() . ". ";';
+
+if [ -z $1 ];
+then
+ echo "Running all unit tests.\n"
+ php ./vendor/phpunit/phpunit/phpunit
+else
+ echo "Running all unit tests, except tests marked with @group $1.\n"
+ php ./vendor/phpunit/phpunit/phpunit --exclude-group $1
+fi \ No newline at end of file
diff --git a/vendor/spomky-labs/otphp/LICENSE b/vendor/spomky-labs/otphp/LICENSE
new file mode 100644
index 000000000..e6a673e34
--- /dev/null
+++ b/vendor/spomky-labs/otphp/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016 Florent Morselli
+
+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/vendor/spomky-labs/otphp/README.md b/vendor/spomky-labs/otphp/README.md
new file mode 100644
index 000000000..b23282ea1
--- /dev/null
+++ b/vendor/spomky-labs/otphp/README.md
@@ -0,0 +1,42 @@
+TOTP / HOTP library in PHP
+==========================
+
+![Build Status](https://github.com/spomky-labs/otphp/workflows/Integrate/badge.svg)
+
+[![Latest Stable Version](https://poser.pugx.org/spomky-labs/otphp/v/stable.png)](https://packagist.org/packages/spomky-labs/otphp)
+[![Total Downloads](https://poser.pugx.org/spomky-labs/otphp/downloads.png)](https://packagist.org/packages/spomky-labs/otphp)
+[![Latest Unstable Version](https://poser.pugx.org/spomky-labs/otphp/v/unstable.png)](https://packagist.org/packages/spomky-labs/otphp)
+[![License](https://poser.pugx.org/spomky-labs/otphp/license.png)](https://packagist.org/packages/spomky-labs/otphp)
+
+A php library for generating one-time passwords according to [RFC 4226](https://datatracker.ietf.org/doc/html/rfc4226) (HOTP Algorithm) and [RFC 6238](https://datatracker.ietf.org/doc/html/rfc6238) (TOTP Algorithm)
+
+This library is compatible with Google Authenticator apps available for Android and iPhone.
+It is also compatible with other applications such as [FreeOTP](https://play.google.com/store/apps/details?id=org.fedorahosted.freeotp) for example.
+
+# Documentation
+
+The documentation of this project is available in the [*doc* folder](doc/index.md).
+
+# Support
+
+I bring solutions to your problems and answer your questions.
+
+If you really love that project, and the work I have done or if you want I prioritize your issues, then you can help me out for a couple of :beers: or more!
+
+[Become a sponsor](https://github.com/sponsors/Spomky)
+
+Or
+
+[![Become a Patreon](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/FlorentMorselli)
+
+## Contributing
+
+Requests for new features, bug fixed and all other ideas to make this project useful are welcome.
+
+Please report all issues in [the repository bug tracker](hhttps://github.com/Spomky-Labs/otphp/issues).
+
+Also make sure to [follow these best practices](.github/CONTRIBUTING.md).
+
+## Licence
+
+This software is release under the [MIT licence](LICENSE).
diff --git a/vendor/spomky-labs/otphp/SECURITY.md b/vendor/spomky-labs/otphp/SECURITY.md
new file mode 100644
index 000000000..706ad9a32
--- /dev/null
+++ b/vendor/spomky-labs/otphp/SECURITY.md
@@ -0,0 +1,87 @@
+# Security Policy
+
+## Supported Versions
+
+| Version | Supported |
+| ------- |----------------------------------------|
+| 11.0.x | :white_check_mark: |
+| 10.0.x | :white_check_mark: (security fix only) |
+| < 10.0 | :x: |
+
+## Reporting a Vulnerability
+
+Please email `security@spomky-labs.com`.
+If deemed necessary, you can encrypt your message using one of the following GPG key
+
+```
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+xjMEXTsJVxYJKwYBBAHaRw8BAQdAZCS93eHRx97V+LQbAWuAaeKIdUZ9YIkn
+QH5pQ7dDU0TNMWNvbnRhY3RAc3BvbWt5LWxhYnMuY29tIDxjb250YWN0QHNw
+b21reS1sYWJzLmNvbT7CdwQQFgoAHwUCXTsJVwYLCQcIAwIEFQgKAgMWAgEC
+GQECGwMCHgEACgkQG6hbCDSDj+1/tgEAoy11uHvDV7kkG/iN2/0ylV72hU8y
+c/xoqGd7qFaKD6ABANcthlg63OrQVTf0dUPOT9Y2BJpOOA88JJWgILtuUPIO
+zjgEXTsJVxIKKwYBBAGXVQEFAQEHQKiX7nldkmICePhzwReZnBPmjpsmNt7V
+Y8xHdICKsr8cAwEIB8JhBBgWCAAJBQJdOwlXAhsMAAoJEBuoWwg0g4/t0KgA
+/31ucb/bL/MGpWFrpSjTs6uQhZWlBmcFoeMhwCYepIpZAQDd65UBqFDKXJWv
+Xy3zoMQQzD9Z6fUATnFrWkzjHwhvDQ==
+=j4dw
+-----END PGP PUBLIC KEY BLOCK-----
+```
+
+
+```
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+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
+BUqlX5YJHneD9Q8Sfz/HKDQDCqg=
+=o+4z
+-----END PGP PUBLIC KEY BLOCK-----
+```
diff --git a/vendor/spomky-labs/otphp/composer.json b/vendor/spomky-labs/otphp/composer.json
new file mode 100644
index 000000000..30db9729d
--- /dev/null
+++ b/vendor/spomky-labs/otphp/composer.json
@@ -0,0 +1,57 @@
+{
+ "name": "spomky-labs/otphp",
+ "type": "library",
+ "description": "A PHP library for generating one time passwords according to RFC 4226 (HOTP Algorithm) and the RFC 6238 (TOTP Algorithm) and compatible with Google Authenticator",
+ "license": "MIT",
+ "keywords": ["otp", "hotp", "totp", "RFC 4226", "RFC 6238", "Google Authenticator", "FreeOTP"],
+ "homepage": "https://github.com/Spomky-Labs/otphp",
+ "authors": [
+ {
+ "name": "Florent Morselli",
+ "homepage": "https://github.com/Spomky"
+ },
+ {
+ "name": "All contributors",
+ "homepage": "https://github.com/Spomky-Labs/otphp/contributors"
+ }
+ ],
+ "require": {
+ "php": "^8.1",
+ "ext-mbstring": "*",
+ "paragonie/constant_time_encoding": "^2.0"
+ },
+ "require-dev": {
+ "ekino/phpstan-banned-code": "^1.0",
+ "infection/infection": "^0.26",
+ "php-parallel-lint/php-parallel-lint": "^1.3",
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-deprecation-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.0",
+ "phpunit/phpunit": "^9.5.26",
+ "qossmic/deptrac-shim": "^1.0",
+ "rector/rector": "^0.14",
+ "symfony/phpunit-bridge": "^6.1",
+ "symplify/easy-coding-standard": "^11.0"
+ },
+ "autoload": {
+ "psr-4": { "OTPHP\\": "src/" }
+ },
+ "autoload-dev": {
+ "psr-4": { "OTPHP\\Test\\": "tests/" }
+ },
+ "config": {
+ "allow-plugins": {
+ "phpstan/extension-installer": true,
+ "infection/extension-installer": true,
+ "composer/package-versions-deprecated": true,
+ "symfony/flex": true,
+ "symfony/runtime": true
+ },
+ "optimize-autoloader": true,
+ "preferred-install": {
+ "*": "dist"
+ },
+ "sort-packages": true
+ }
+}
diff --git a/vendor/spomky-labs/otphp/src/Factory.php b/vendor/spomky-labs/otphp/src/Factory.php
new file mode 100644
index 000000000..d5c60cc34
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/Factory.php
@@ -0,0 +1,85 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+use function count;
+use InvalidArgumentException;
+use Throwable;
+
+/**
+ * This class is used to load OTP object from a provisioning Uri.
+ *
+ * @see \OTPHP\Test\FactoryTest
+ */
+final class Factory implements FactoryInterface
+{
+ public static function loadFromProvisioningUri(string $uri): OTPInterface
+ {
+ try {
+ $parsed_url = Url::fromString($uri);
+ $parsed_url->getScheme() === 'otpauth' || throw new InvalidArgumentException('Invalid scheme.');
+ } catch (Throwable $throwable) {
+ throw new InvalidArgumentException('Not a valid OTP provisioning URI', $throwable->getCode(), $throwable);
+ }
+
+ $otp = self::createOTP($parsed_url);
+
+ self::populateOTP($otp, $parsed_url);
+
+ return $otp;
+ }
+
+ private static function populateParameters(OTPInterface $otp, Url $data): void
+ {
+ foreach ($data->getQuery() as $key => $value) {
+ $otp->setParameter($key, $value);
+ }
+ }
+
+ private static function populateOTP(OTPInterface $otp, Url $data): void
+ {
+ self::populateParameters($otp, $data);
+ $result = explode(':', rawurldecode(mb_substr($data->getPath(), 1)));
+
+ if (count($result) < 2) {
+ $otp->setIssuerIncludedAsParameter(false);
+
+ return;
+ }
+
+ if ($otp->getIssuer() !== null) {
+ $result[0] === $otp->getIssuer() || throw new InvalidArgumentException(
+ 'Invalid OTP: invalid issuer in parameter'
+ );
+ $otp->setIssuerIncludedAsParameter(true);
+ }
+ $otp->setIssuer($result[0]);
+ }
+
+ private static function createOTP(Url $parsed_url): OTPInterface
+ {
+ switch ($parsed_url->getHost()) {
+ case 'totp':
+ $totp = TOTP::createFromSecret($parsed_url->getSecret());
+ $totp->setLabel(self::getLabel($parsed_url->getPath()));
+
+ return $totp;
+ case 'hotp':
+ $hotp = HOTP::createFromSecret($parsed_url->getSecret());
+ $hotp->setLabel(self::getLabel($parsed_url->getPath()));
+
+ return $hotp;
+ default:
+ throw new InvalidArgumentException(sprintf('Unsupported "%s" OTP type', $parsed_url->getHost()));
+ }
+ }
+
+ private static function getLabel(string $data): string
+ {
+ $result = explode(':', rawurldecode(mb_substr($data, 1)));
+
+ return count($result) === 2 ? $result[1] : $result[0];
+ }
+}
diff --git a/vendor/spomky-labs/otphp/src/FactoryInterface.php b/vendor/spomky-labs/otphp/src/FactoryInterface.php
new file mode 100644
index 000000000..74386adeb
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/FactoryInterface.php
@@ -0,0 +1,14 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+interface FactoryInterface
+{
+ /**
+ * This method is the unique public method of the class. It can load a provisioning Uri and convert it into an OTP
+ * object.
+ */
+ public static function loadFromProvisioningUri(string $uri): OTPInterface;
+}
diff --git a/vendor/spomky-labs/otphp/src/HOTP.php b/vendor/spomky-labs/otphp/src/HOTP.php
new file mode 100644
index 000000000..aa5a22754
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/HOTP.php
@@ -0,0 +1,124 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+use InvalidArgumentException;
+use function is_int;
+
+/**
+ * @see \OTPHP\Test\HOTPTest
+ */
+final class HOTP extends OTP implements HOTPInterface
+{
+ private const DEFAULT_WINDOW = 0;
+
+ public static function create(
+ null|string $secret = null,
+ int $counter = self::DEFAULT_COUNTER,
+ string $digest = self::DEFAULT_DIGEST,
+ int $digits = self::DEFAULT_DIGITS
+ ): self {
+ $htop = $secret !== null
+ ? self::createFromSecret($secret)
+ : self::generate()
+ ;
+ $htop->setCounter($counter);
+ $htop->setDigest($digest);
+ $htop->setDigits($digits);
+
+ return $htop;
+ }
+
+ public static function createFromSecret(string $secret): self
+ {
+ $htop = new self($secret);
+ $htop->setCounter(self::DEFAULT_COUNTER);
+ $htop->setDigest(self::DEFAULT_DIGEST);
+ $htop->setDigits(self::DEFAULT_DIGITS);
+
+ return $htop;
+ }
+
+ public static function generate(): self
+ {
+ return self::createFromSecret(self::generateSecret());
+ }
+
+ public function getCounter(): int
+ {
+ $value = $this->getParameter('counter');
+ is_int($value) || throw new InvalidArgumentException('Invalid "counter" parameter.');
+
+ return $value;
+ }
+
+ public function getProvisioningUri(): string
+ {
+ return $this->generateURI('hotp', [
+ 'counter' => $this->getCounter(),
+ ]);
+ }
+
+ /**
+ * If the counter is not provided, the OTP is verified at the actual counter.
+ */
+ public function verify(string $otp, null|int $counter = null, null|int $window = null): bool
+ {
+ $counter >= 0 || throw new InvalidArgumentException('The counter must be at least 0.');
+
+ if ($counter === null) {
+ $counter = $this->getCounter();
+ } elseif ($counter < $this->getCounter()) {
+ return false;
+ }
+
+ return $this->verifyOtpWithWindow($otp, $counter, $window);
+ }
+
+ public function setCounter(int $counter): void
+ {
+ $this->setParameter('counter', $counter);
+ }
+
+ /**
+ * @return array<string, callable>
+ */
+ protected function getParameterMap(): array
+ {
+ return [...parent::getParameterMap(), ...[
+ 'counter' => static function (mixed $value): int {
+ $value = (int) $value;
+ $value >= 0 || throw new InvalidArgumentException('Counter must be at least 0.');
+
+ return $value;
+ },
+ ]];
+ }
+
+ private function updateCounter(int $counter): void
+ {
+ $this->setCounter($counter);
+ }
+
+ private function getWindow(null|int $window): int
+ {
+ return abs($window ?? self::DEFAULT_WINDOW);
+ }
+
+ private function verifyOtpWithWindow(string $otp, int $counter, null|int $window): bool
+ {
+ $window = $this->getWindow($window);
+
+ for ($i = $counter; $i <= $counter + $window; ++$i) {
+ if ($this->compareOTP($this->at($i), $otp)) {
+ $this->updateCounter($i + 1);
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/vendor/spomky-labs/otphp/src/HOTPInterface.php b/vendor/spomky-labs/otphp/src/HOTPInterface.php
new file mode 100644
index 000000000..853e76c07
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/HOTPInterface.php
@@ -0,0 +1,34 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+interface HOTPInterface extends OTPInterface
+{
+ public const DEFAULT_COUNTER = 0;
+
+ /**
+ * The initial counter (a positive integer).
+ */
+ public function getCounter(): int;
+
+ /**
+ * Create a new HOTP object.
+ *
+ * If the secret is null, a random 64 bytes secret will be generated.
+ *
+ * @param null|non-empty-string $secret
+ * @param non-empty-string $digest
+ *
+ * @deprecated Deprecated since v11.1, use ::createFromSecret or ::generate instead
+ */
+ public static function create(
+ null|string $secret = null,
+ int $counter = 0,
+ string $digest = 'sha1',
+ int $digits = 6
+ ): self;
+
+ public function setCounter(int $counter): void;
+}
diff --git a/vendor/spomky-labs/otphp/src/OTP.php b/vendor/spomky-labs/otphp/src/OTP.php
new file mode 100644
index 000000000..2cba067b3
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/OTP.php
@@ -0,0 +1,129 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+use function chr;
+use function count;
+use Exception;
+use InvalidArgumentException;
+use function is_string;
+use ParagonIE\ConstantTime\Base32;
+use RuntimeException;
+use const STR_PAD_LEFT;
+
+abstract class OTP implements OTPInterface
+{
+ use ParameterTrait;
+
+ private const DEFAULT_SECRET_SIZE = 64;
+
+ /**
+ * @param non-empty-string $secret
+ */
+ protected function __construct(string $secret)
+ {
+ $this->setSecret($secret);
+ }
+
+ public function getQrCodeUri(string $uri, string $placeholder): string
+ {
+ $provisioning_uri = urlencode($this->getProvisioningUri());
+
+ return str_replace($placeholder, $provisioning_uri, $uri);
+ }
+
+ public function at(int $input): string
+ {
+ return $this->generateOTP($input);
+ }
+
+ /**
+ * @return non-empty-string
+ */
+ final protected static function generateSecret(): string
+ {
+ return Base32::encodeUpper(random_bytes(self::DEFAULT_SECRET_SIZE));
+ }
+
+ /**
+ * The OTP at the specified input.
+ */
+ protected function generateOTP(int $input): string
+ {
+ $hash = hash_hmac($this->getDigest(), $this->intToByteString($input), $this->getDecodedSecret(), true);
+ $unpacked = unpack('C*', $hash);
+ $unpacked !== false || throw new InvalidArgumentException('Invalid data.');
+ $hmac = array_values($unpacked);
+
+ $offset = ($hmac[count($hmac) - 1] & 0xF);
+ $code = ($hmac[$offset] & 0x7F) << 24 | ($hmac[$offset + 1] & 0xFF) << 16 | ($hmac[$offset + 2] & 0xFF) << 8 | ($hmac[$offset + 3] & 0xFF);
+ $otp = $code % (10 ** $this->getDigits());
+
+ return str_pad((string) $otp, $this->getDigits(), '0', STR_PAD_LEFT);
+ }
+
+ /**
+ * @param array<string, mixed> $options
+ */
+ protected function filterOptions(array &$options): void
+ {
+ foreach ([
+ 'algorithm' => 'sha1',
+ 'period' => 30,
+ 'digits' => 6,
+ ] as $key => $default) {
+ if (isset($options[$key]) && $default === $options[$key]) {
+ unset($options[$key]);
+ }
+ }
+
+ ksort($options);
+ }
+
+ /**
+ * @param array<string, mixed> $options
+ */
+ protected function generateURI(string $type, array $options): string
+ {
+ $label = $this->getLabel();
+ is_string($label) || throw new InvalidArgumentException('The label is not set.');
+ $this->hasColon($label) === false || throw new InvalidArgumentException('Label must not contain a colon.');
+ $options = [...$options, ...$this->getParameters()];
+ $this->filterOptions($options);
+ $params = str_replace(['+', '%7E'], ['%20', '~'], http_build_query($options));
+
+ return sprintf(
+ 'otpauth://%s/%s?%s',
+ $type,
+ rawurlencode(($this->getIssuer() !== null ? $this->getIssuer() . ':' : '') . $label),
+ $params
+ );
+ }
+
+ protected function compareOTP(string $safe, string $user): bool
+ {
+ return hash_equals($safe, $user);
+ }
+
+ private function getDecodedSecret(): string
+ {
+ try {
+ return Base32::decodeUpper($this->getSecret());
+ } catch (Exception) {
+ throw new RuntimeException('Unable to decode the secret. Is it correctly base32 encoded?');
+ }
+ }
+
+ private function intToByteString(int $int): string
+ {
+ $result = [];
+ while ($int !== 0) {
+ $result[] = chr($int & 0xFF);
+ $int >>= 8;
+ }
+
+ return str_pad(implode('', array_reverse($result)), 8, "\000", STR_PAD_LEFT);
+ }
+}
diff --git a/vendor/spomky-labs/otphp/src/OTPInterface.php b/vendor/spomky-labs/otphp/src/OTPInterface.php
new file mode 100644
index 000000000..3b27f5456
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/OTPInterface.php
@@ -0,0 +1,110 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+interface OTPInterface
+{
+ public const DEFAULT_DIGITS = 6;
+
+ public const DEFAULT_DIGEST = 'sha1';
+
+ /**
+ * Create a OTP object from an existing secret.
+ *
+ * @param non-empty-string $secret
+ */
+ public static function createFromSecret(string $secret): self;
+
+ /**
+ * Create a new OTP object. A random 64 bytes secret will be generated.
+ */
+ public static function generate(): self;
+
+ /**
+ * @param non-empty-string $secret
+ */
+ public function setSecret(string $secret): void;
+
+ public function setDigits(int $digits): void;
+
+ /**
+ * @param non-empty-string $digest
+ */
+ public function setDigest(string $digest): void;
+
+ /**
+ * @return string Return the OTP at the specified timestamp
+ */
+ public function at(int $input): string;
+
+ /**
+ * Verify that the OTP is valid with the specified input. If no input is provided, the input is set to a default
+ * value or false is returned.
+ */
+ public function verify(string $otp, null|int $input = null, null|int $window = null): bool;
+
+ /**
+ * @return string The secret of the OTP
+ */
+ public function getSecret(): string;
+
+ /**
+ * @param string $label The label of the OTP
+ */
+ public function setLabel(string $label): void;
+
+ /**
+ * @return string|null The label of the OTP
+ */
+ public function getLabel(): null|string;
+
+ /**
+ * @return string|null The issuer
+ */
+ public function getIssuer(): ?string;
+
+ public function setIssuer(string $issuer): void;
+
+ /**
+ * @return bool If true, the issuer will be added as a parameter in the provisioning URI
+ */
+ public function isIssuerIncludedAsParameter(): bool;
+
+ public function setIssuerIncludedAsParameter(bool $issuer_included_as_parameter): void;
+
+ /**
+ * @return int Number of digits in the OTP
+ */
+ public function getDigits(): int;
+
+ /**
+ * @return string Digest algorithm used to calculate the OTP. Possible values are 'md5', 'sha1', 'sha256' and 'sha512'
+ */
+ public function getDigest(): string;
+
+ public function getParameter(string $parameter): mixed;
+
+ public function hasParameter(string $parameter): bool;
+
+ /**
+ * @return array<string, mixed>
+ */
+ public function getParameters(): array;
+
+ public function setParameter(string $parameter, mixed $value): void;
+
+ /**
+ * Get the provisioning URI.
+ */
+ public function getProvisioningUri(): string;
+
+ /**
+ * Get the provisioning URI.
+ *
+ * @param string $uri The Uri of the QRCode generator with all parameters. This Uri MUST contain a placeholder that will be replaced by the method.
+ * @param string $placeholder the placeholder to be replaced in the QR Code generator URI
+ */
+ public function getQrCodeUri(string $uri, string $placeholder): string;
+}
diff --git a/vendor/spomky-labs/otphp/src/ParameterTrait.php b/vendor/spomky-labs/otphp/src/ParameterTrait.php
new file mode 100644
index 000000000..b05092351
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/ParameterTrait.php
@@ -0,0 +1,188 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+use function array_key_exists;
+use function in_array;
+use InvalidArgumentException;
+use function is_int;
+use function is_string;
+
+trait ParameterTrait
+{
+ /**
+ * @var array<string, mixed>
+ */
+ private array $parameters = [];
+
+ private null|string $issuer = null;
+
+ private null|string $label = null;
+
+ private bool $issuer_included_as_parameter = true;
+
+ /**
+ * @return array<string, mixed>
+ */
+ public function getParameters(): array
+ {
+ $parameters = $this->parameters;
+
+ if ($this->getIssuer() !== null && $this->isIssuerIncludedAsParameter() === true) {
+ $parameters['issuer'] = $this->getIssuer();
+ }
+
+ return $parameters;
+ }
+
+ public function getSecret(): string
+ {
+ $value = $this->getParameter('secret');
+ is_string($value) || throw new InvalidArgumentException('Invalid "secret" parameter.');
+
+ return $value;
+ }
+
+ public function getLabel(): null|string
+ {
+ return $this->label;
+ }
+
+ public function setLabel(string $label): void
+ {
+ $this->setParameter('label', $label);
+ }
+
+ public function getIssuer(): null|string
+ {
+ return $this->issuer;
+ }
+
+ public function setIssuer(string $issuer): void
+ {
+ $this->setParameter('issuer', $issuer);
+ }
+
+ public function isIssuerIncludedAsParameter(): bool
+ {
+ return $this->issuer_included_as_parameter;
+ }
+
+ public function setIssuerIncludedAsParameter(bool $issuer_included_as_parameter): void
+ {
+ $this->issuer_included_as_parameter = $issuer_included_as_parameter;
+ }
+
+ public function getDigits(): int
+ {
+ $value = $this->getParameter('digits');
+ is_int($value) || throw new InvalidArgumentException('Invalid "digits" parameter.');
+
+ return $value;
+ }
+
+ public function getDigest(): string
+ {
+ $value = $this->getParameter('algorithm');
+ is_string($value) || throw new InvalidArgumentException('Invalid "algorithm" parameter.');
+
+ return $value;
+ }
+
+ public function hasParameter(string $parameter): bool
+ {
+ return array_key_exists($parameter, $this->parameters);
+ }
+
+ public function getParameter(string $parameter): mixed
+ {
+ if ($this->hasParameter($parameter)) {
+ return $this->getParameters()[$parameter];
+ }
+
+ throw new InvalidArgumentException(sprintf('Parameter "%s" does not exist', $parameter));
+ }
+
+ public function setParameter(string $parameter, mixed $value): void
+ {
+ $map = $this->getParameterMap();
+
+ if (array_key_exists($parameter, $map) === true) {
+ $callback = $map[$parameter];
+ $value = $callback($value);
+ }
+
+ if (property_exists($this, $parameter)) {
+ $this->{$parameter} = $value;
+ } else {
+ $this->parameters[$parameter] = $value;
+ }
+ }
+
+ public function setSecret(string $secret): void
+ {
+ $this->setParameter('secret', $secret);
+ }
+
+ public function setDigits(int $digits): void
+ {
+ $this->setParameter('digits', $digits);
+ }
+
+ public function setDigest(string $digest): void
+ {
+ $this->setParameter('algorithm', $digest);
+ }
+
+ /**
+ * @return array<string, callable>
+ */
+ protected function getParameterMap(): array
+ {
+ return [
+ 'label' => function ($value) {
+ $this->hasColon($value) === false || throw new InvalidArgumentException(
+ 'Label must not contain a colon.'
+ );
+
+ return $value;
+ },
+ 'secret' => static fn ($value): string => mb_strtoupper(trim((string) $value, '=')),
+ 'algorithm' => static function ($value): string {
+ $value = mb_strtolower($value);
+ in_array($value, hash_algos(), true) || throw new InvalidArgumentException(sprintf(
+ 'The "%s" digest is not supported.',
+ $value
+ ));
+
+ return $value;
+ },
+ 'digits' => static function ($value): int {
+ $value > 0 || throw new InvalidArgumentException('Digits must be at least 1.');
+
+ return (int) $value;
+ },
+ 'issuer' => function ($value) {
+ $this->hasColon($value) === false || throw new InvalidArgumentException(
+ 'Issuer must not contain a colon.'
+ );
+
+ return $value;
+ },
+ ];
+ }
+
+ private function hasColon(string $value): bool
+ {
+ $colons = [':', '%3A', '%3a'];
+ foreach ($colons as $colon) {
+ if (str_contains($value, $colon)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/vendor/spomky-labs/otphp/src/TOTP.php b/vendor/spomky-labs/otphp/src/TOTP.php
new file mode 100644
index 000000000..e9bce9e14
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/TOTP.php
@@ -0,0 +1,172 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+use InvalidArgumentException;
+use function is_int;
+
+/**
+ * @see \OTPHP\Test\TOTPTest
+ */
+final class TOTP extends OTP implements TOTPInterface
+{
+ public static function create(
+ null|string $secret = null,
+ int $period = self::DEFAULT_PERIOD,
+ string $digest = self::DEFAULT_DIGEST,
+ int $digits = self::DEFAULT_DIGITS,
+ int $epoch = self::DEFAULT_EPOCH
+ ): self {
+ $totp = $secret !== null
+ ? self::createFromSecret($secret)
+ : self::generate()
+ ;
+ $totp->setPeriod($period);
+ $totp->setDigest($digest);
+ $totp->setDigits($digits);
+ $totp->setEpoch($epoch);
+
+ return $totp;
+ }
+
+ public static function createFromSecret(string $secret): self
+ {
+ $totp = new self($secret);
+ $totp->setPeriod(self::DEFAULT_PERIOD);
+ $totp->setDigest(self::DEFAULT_DIGEST);
+ $totp->setDigits(self::DEFAULT_DIGITS);
+ $totp->setEpoch(self::DEFAULT_EPOCH);
+
+ return $totp;
+ }
+
+ public static function generate(): self
+ {
+ return self::createFromSecret(self::generateSecret());
+ }
+
+ public function getPeriod(): int
+ {
+ $value = $this->getParameter('period');
+ is_int($value) || throw new InvalidArgumentException('Invalid "period" parameter.');
+
+ return $value;
+ }
+
+ public function getEpoch(): int
+ {
+ $value = $this->getParameter('epoch');
+ is_int($value) || throw new InvalidArgumentException('Invalid "epoch" parameter.');
+
+ return $value;
+ }
+
+ public function expiresIn(): int
+ {
+ $period = $this->getPeriod();
+
+ return $period - (time() % $this->getPeriod());
+ }
+
+ public function at(int $input): string
+ {
+ return $this->generateOTP($this->timecode($input));
+ }
+
+ public function now(): string
+ {
+ return $this->at(time());
+ }
+
+ /**
+ * If no timestamp is provided, the OTP is verified at the actual timestamp. When used, the leeway parameter will
+ * allow time drift. The passed value is in seconds.
+ */
+ public function verify(string $otp, null|int $timestamp = null, null|int $leeway = null): bool
+ {
+ $timestamp ??= time();
+ $timestamp >= 0 || throw new InvalidArgumentException('Timestamp must be at least 0.');
+
+ if ($leeway === null) {
+ return $this->compareOTP($this->at($timestamp), $otp);
+ }
+
+ $leeway = abs($leeway);
+ $leeway < $this->getPeriod() || throw new InvalidArgumentException(
+ 'The leeway must be lower than the TOTP period'
+ );
+
+ return $this->compareOTP($this->at($timestamp - $leeway), $otp)
+ || $this->compareOTP($this->at($timestamp), $otp)
+ || $this->compareOTP($this->at($timestamp + $leeway), $otp);
+ }
+
+ public function getProvisioningUri(): string
+ {
+ $params = [];
+ if ($this->getPeriod() !== 30) {
+ $params['period'] = $this->getPeriod();
+ }
+
+ if ($this->getEpoch() !== 0) {
+ $params['epoch'] = $this->getEpoch();
+ }
+
+ return $this->generateURI('totp', $params);
+ }
+
+ public function setPeriod(int $period): void
+ {
+ $this->setParameter('period', $period);
+ }
+
+ public function setEpoch(int $epoch): void
+ {
+ $this->setParameter('epoch', $epoch);
+ }
+
+ /**
+ * @return array<string, callable>
+ */
+ protected function getParameterMap(): array
+ {
+ return array_merge(
+ parent::getParameterMap(),
+ [
+ 'period' => static function ($value): int {
+ (int) $value > 0 || throw new InvalidArgumentException('Period must be at least 1.');
+
+ return (int) $value;
+ },
+ 'epoch' => static function ($value): int {
+ (int) $value >= 0 || throw new InvalidArgumentException(
+ 'Epoch must be greater than or equal to 0.'
+ );
+
+ return (int) $value;
+ },
+ ]
+ );
+ }
+
+ /**
+ * @param array<string, mixed> $options
+ */
+ protected function filterOptions(array &$options): void
+ {
+ parent::filterOptions($options);
+
+ if (isset($options['epoch']) && $options['epoch'] === 0) {
+ unset($options['epoch']);
+ }
+
+ ksort($options);
+ }
+
+ private function timecode(int $timestamp): int
+ {
+ return (int) floor(($timestamp - $this->getEpoch()) / $this->getPeriod());
+ }
+}
diff --git a/vendor/spomky-labs/otphp/src/TOTPInterface.php b/vendor/spomky-labs/otphp/src/TOTPInterface.php
new file mode 100644
index 000000000..afb54e8e9
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/TOTPInterface.php
@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+interface TOTPInterface extends OTPInterface
+{
+ public const DEFAULT_PERIOD = 30;
+
+ public const DEFAULT_EPOCH = 0;
+
+ /**
+ * Create a new TOTP object.
+ *
+ * If the secret is null, a random 64 bytes secret will be generated.
+ *
+ * @param null|non-empty-string $secret
+ * @param non-empty-string $digest
+ *
+ * @deprecated Deprecated since v11.1, use ::createFromSecret or ::generate instead
+ */
+ public static function create(
+ null|string $secret = null,
+ int $period = self::DEFAULT_PERIOD,
+ string $digest = self::DEFAULT_DIGEST,
+ int $digits = self::DEFAULT_DIGITS
+ ): self;
+
+ public function setPeriod(int $period): void;
+
+ public function setEpoch(int $epoch): void;
+
+ /**
+ * Return the TOTP at the current time.
+ */
+ public function now(): string;
+
+ /**
+ * Get the period of time for OTP generation (a non-null positive integer, in second).
+ */
+ public function getPeriod(): int;
+
+ public function expiresIn(): int;
+
+ public function getEpoch(): int;
+}
diff --git a/vendor/spomky-labs/otphp/src/Url.php b/vendor/spomky-labs/otphp/src/Url.php
new file mode 100644
index 000000000..56ad979c5
--- /dev/null
+++ b/vendor/spomky-labs/otphp/src/Url.php
@@ -0,0 +1,88 @@
+<?php
+
+declare(strict_types=1);
+
+namespace OTPHP;
+
+use function array_key_exists;
+use InvalidArgumentException;
+use function is_string;
+
+/**
+ * @internal
+ */
+final class Url
+{
+ /**
+ * @param non-empty-string $secret
+ * @param array<string, mixed> $query
+ */
+ public function __construct(
+ private readonly string $scheme,
+ private readonly string $host,
+ private readonly string $path,
+ private readonly string $secret,
+ private readonly array $query
+ ) {
+ }
+
+ public function getScheme(): string
+ {
+ return $this->scheme;
+ }
+
+ public function getHost(): string
+ {
+ return $this->host;
+ }
+
+ public function getPath(): string
+ {
+ return $this->path;
+ }
+
+ /**
+ * @return non-empty-string
+ */
+ public function getSecret(): string
+ {
+ return $this->secret;
+ }
+
+ /**
+ * @return array<string, mixed>
+ */
+ public function getQuery(): array
+ {
+ return $this->query;
+ }
+
+ public static function fromString(string $uri): self
+ {
+ $parsed_url = parse_url($uri);
+ $parsed_url !== false || throw new InvalidArgumentException('Invalid URI.');
+ foreach (['scheme', 'host', 'path', 'query'] as $key) {
+ array_key_exists($key, $parsed_url) || throw new InvalidArgumentException(
+ 'Not a valid OTP provisioning URI'
+ );
+ is_string($parsed_url[$key]) || throw new InvalidArgumentException('Not a valid OTP provisioning URI');
+ }
+ $scheme = $parsed_url['scheme'] ?? null;
+ $host = $parsed_url['host'] ?? null;
+ $path = $parsed_url['path'] ?? null;
+ $query = $parsed_url['query'] ?? null;
+ $scheme === 'otpauth' || throw new InvalidArgumentException('Not a valid OTP provisioning URI');
+ is_string($host) || throw new InvalidArgumentException('Invalid URI.');
+ is_string($path) || throw new InvalidArgumentException('Invalid URI.');
+ is_string($query) || throw new InvalidArgumentException('Invalid URI.');
+ $parsedQuery = [];
+ parse_str($query, $parsedQuery);
+ array_key_exists('secret', $parsedQuery) || throw new InvalidArgumentException(
+ 'Not a valid OTP provisioning URI'
+ );
+ $secret = $parsedQuery['secret'];
+ unset($parsedQuery['secret']);
+
+ return new self($scheme, $host, $path, $secret, $parsedQuery);
+ }
+}
diff --git a/vendor/twbs/bootstrap/.bundlewatch.config.json b/vendor/twbs/bootstrap/.bundlewatch.config.json
index 4c9acc990..49880e124 100644
--- a/vendor/twbs/bootstrap/.bundlewatch.config.json
+++ b/vendor/twbs/bootstrap/.bundlewatch.config.json
@@ -2,43 +2,43 @@
"files": [
{
"path": "./dist/css/bootstrap-grid.css",
- "maxSize": "7.5 kB"
+ "maxSize": "8.25 kB"
},
{
"path": "./dist/css/bootstrap-grid.min.css",
- "maxSize": "6.55 kB"
+ "maxSize": "7.5 kB"
},
{
"path": "./dist/css/bootstrap-reboot.css",
- "maxSize": "2.75 kB"
+ "maxSize": "3.5 kB"
},
{
"path": "./dist/css/bootstrap-reboot.min.css",
- "maxSize": "2.5 kB"
+ "maxSize": "3.25 kB"
},
{
"path": "./dist/css/bootstrap-utilities.css",
- "maxSize": "8.0 kB"
+ "maxSize": "10.5 kB"
},
{
"path": "./dist/css/bootstrap-utilities.min.css",
- "maxSize": "7.25 kB"
+ "maxSize": "9.75 kB"
},
{
"path": "./dist/css/bootstrap.css",
- "maxSize": "28.75 kB"
+ "maxSize": "31.25 kB"
},
{
"path": "./dist/css/bootstrap.min.css",
- "maxSize": "26.75 kB"
+ "maxSize": "29.25 kB"
},
{
"path": "./dist/js/bootstrap.bundle.js",
- "maxSize": "43.25 kB"
+ "maxSize": "43.0 kB"
},
{
"path": "./dist/js/bootstrap.bundle.min.js",
- "maxSize": "22.75 kB"
+ "maxSize": "23.0 kB"
},
{
"path": "./dist/js/bootstrap.esm.js",
@@ -46,7 +46,7 @@
},
{
"path": "./dist/js/bootstrap.esm.min.js",
- "maxSize": "18.5 kB"
+ "maxSize": "18.25 kB"
},
{
"path": "./dist/js/bootstrap.js",
@@ -54,7 +54,7 @@
},
{
"path": "./dist/js/bootstrap.min.js",
- "maxSize": "16.25 kB"
+ "maxSize": "16.0 kB"
}
],
"ci": {
@@ -63,4 +63,4 @@
"v4-dev"
]
}
-}
+} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/.cspell.json b/vendor/twbs/bootstrap/.cspell.json
index d528823b1..752acd521 100644
--- a/vendor/twbs/bootstrap/.cspell.json
+++ b/vendor/twbs/bootstrap/.cspell.json
@@ -8,6 +8,7 @@
"autohiding",
"autoplay",
"autoplays",
+ "autoplaying",
"blazingly",
"Blockquotes",
"Bootstrappers",
diff --git a/vendor/twbs/bootstrap/.eslintrc.json b/vendor/twbs/bootstrap/.eslintrc.json
index d8e83a8d2..5443b97bc 100644
--- a/vendor/twbs/bootstrap/.eslintrc.json
+++ b/vendor/twbs/bootstrap/.eslintrc.json
@@ -46,6 +46,7 @@
"error",
"after"
],
+ "prefer-template": "error",
"semi": [
"error",
"never"
@@ -54,6 +55,7 @@
"unicorn/no-array-callback-reference": "off",
"unicorn/no-array-method-this-argument": "off",
"unicorn/no-null": "off",
+ "unicorn/no-typeof-undefined": "off",
"unicorn/no-unused-properties": "error",
"unicorn/prefer-array-flat": "off",
"unicorn/prefer-dom-node-dataset": "off",
diff --git a/vendor/twbs/bootstrap/.github/CONTRIBUTING.md b/vendor/twbs/bootstrap/.github/CONTRIBUTING.md
index c7211e689..446344580 100644
--- a/vendor/twbs/bootstrap/.github/CONTRIBUTING.md
+++ b/vendor/twbs/bootstrap/.github/CONTRIBUTING.md
@@ -18,16 +18,16 @@ the preferred channel for [bug reports](#bug-reports), [features requests](#feat
and [submitting pull requests](#pull-requests), but please respect the following
restrictions:
-* Please **do not** use the issue tracker for personal support requests. Stack Overflow ([`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5) tag), [our GitHub Discussions](https://github.com/twbs/bootstrap/discussions) or [IRC](/README.md#community) are better places to get help.
+- Please **do not** use the issue tracker for personal support requests. Stack Overflow ([`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5) tag), [our GitHub Discussions](https://github.com/twbs/bootstrap/discussions) or [IRC](/README.md#community) are better places to get help.
-* Please **do not** derail or troll issues. Keep the discussion on topic and
+- Please **do not** derail or troll issues. Keep the discussion on topic and
respect the opinions of others.
-* Please **do not** post comments consisting solely of "+1" or ":thumbsup:".
+- Please **do not** post comments consisting solely of "+1" or ":thumbsup:".
Use [GitHub's "reactions" feature](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/)
instead. We reserve the right to delete comments which violate this rule.
-* Please **do not** open issues regarding the official themes offered on <https://themes.getbootstrap.com/>.
+- Please **do not** open issues regarding the official themes offered on <https://themes.getbootstrap.com/>.
Instead, please email any questions or feedback regarding those themes to `themes AT getbootstrap DOT com`.
@@ -101,16 +101,16 @@ Sometimes bugs reported to us are actually caused by bugs in the browser(s) them
| Vendor(s) | Browser(s) | Rendering engine | Bug reporting website(s) | Notes |
| ------------- | ---------------------------- | ---------------- | ------------------------------------------------------ | -------------------------------------------------------- |
-| Mozilla | Firefox | Gecko | https://bugzilla.mozilla.org/enter_bug.cgi | "Core" is normally the right product option to choose. |
-| Apple | Safari | WebKit | https://bugs.webkit.org/enter_bug.cgi?product=WebKit | In Apple's bug reporter, choose "Safari" as the product. |
-| Google, Opera | Chrome, Chromium, Opera v15+ | Blink | https://bugs.chromium.org/p/chromium/issues/list | Click the "New issue" button. |
-| Microsoft | Edge | Blink | https://developer.microsoft.com/en-us/microsoft-edge/ | Go to "Help > Send Feedback" from the browser |
+| Mozilla | Firefox | Gecko | <https://bugzilla.mozilla.org/enter_bug.cgi> | "Core" is normally the right product option to choose. |
+| Apple | Safari | WebKit | <https://bugs.webkit.org/enter_bug.cgi?product=WebKit> | In Apple's bug reporter, choose "Safari" as the product. |
+| Google, Opera | Chrome, Chromium, Opera v15+ | Blink | <https://bugs.chromium.org/p/chromium/issues/list> | Click the "New issue" button. |
+| Microsoft | Edge | Blink | <https://developer.microsoft.com/en-us/microsoft-edge/> | Go to "Help > Send Feedback" from the browser |
## Feature requests
Feature requests are welcome. But take a moment to find out whether your idea
-fits with the scope and aims of the project. It's up to *you* to make a strong
+fits with the scope and aims of the project. It's up to _you_ to make a strong
case to convince the project's developers of the merits of this feature. Please
provide as much detail and context as possible.
diff --git a/vendor/twbs/bootstrap/.github/PULL_REQUEST_TEMPLATE.md b/vendor/twbs/bootstrap/.github/PULL_REQUEST_TEMPLATE.md
index 4675f7007..98e45c55a 100644
--- a/vendor/twbs/bootstrap/.github/PULL_REQUEST_TEMPLATE.md
+++ b/vendor/twbs/bootstrap/.github/PULL_REQUEST_TEMPLATE.md
@@ -31,7 +31,7 @@
<!-- Please add direct links where your modifications can be seen in the documentation -->
-* https://deploy-preview-{your pr number}--twbs-bootstrap.netlify.app/
+- <https://deploy-preview-{your_pr_number}--twbs-bootstrap.netlify.app/>
### Related issues
diff --git a/vendor/twbs/bootstrap/.github/codeql/codeql-config.yml b/vendor/twbs/bootstrap/.github/codeql/codeql-config.yml
new file mode 100644
index 000000000..957877282
--- /dev/null
+++ b/vendor/twbs/bootstrap/.github/codeql/codeql-config.yml
@@ -0,0 +1,3 @@
+name: "CodeQL config"
+paths-ignore:
+ - dist
diff --git a/vendor/twbs/bootstrap/.github/workflows/browserstack.yml b/vendor/twbs/bootstrap/.github/workflows/browserstack.yml
index 425c56684..9a2fc91e5 100644
--- a/vendor/twbs/bootstrap/.github/workflows/browserstack.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/browserstack.yml
@@ -6,7 +6,10 @@ on:
env:
FORCE_COLOR: 2
- NODE: 16
+ NODE: 18
+
+permissions:
+ contents: read
jobs:
browserstack:
@@ -17,6 +20,8 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Set up Node.js
uses: actions/setup-node@v3
diff --git a/vendor/twbs/bootstrap/.github/workflows/bundlewatch.yml b/vendor/twbs/bootstrap/.github/workflows/bundlewatch.yml
index d1a174784..2add86c49 100644
--- a/vendor/twbs/bootstrap/.github/workflows/bundlewatch.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/bundlewatch.yml
@@ -9,7 +9,10 @@ on:
env:
FORCE_COLOR: 2
- NODE: 16
+ NODE: 18
+
+permissions:
+ contents: read
jobs:
bundlewatch:
@@ -18,6 +21,8 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Set up Node.js
uses: actions/setup-node@v3
diff --git a/vendor/twbs/bootstrap/.github/workflows/calibreapp-image-actions.yml b/vendor/twbs/bootstrap/.github/workflows/calibreapp-image-actions.yml
index e23f5626e..21df1f626 100644
--- a/vendor/twbs/bootstrap/.github/workflows/calibreapp-image-actions.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/calibreapp-image-actions.yml
@@ -17,6 +17,8 @@ jobs:
steps:
- name: Checkout Repo
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Compress Images
uses: calibreapp/image-actions@1.1.0
diff --git a/vendor/twbs/bootstrap/.github/workflows/codeql.yml b/vendor/twbs/bootstrap/.github/workflows/codeql.yml
index 70be0563c..98aa891c4 100644
--- a/vendor/twbs/bootstrap/.github/workflows/codeql.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/codeql.yml
@@ -7,7 +7,6 @@ on:
- v4-dev
- "!dependabot/**"
pull_request:
- # The branches below must be a subset of the branches above
branches:
- main
- v4-dev
@@ -28,11 +27,20 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
+ config-file: ./.github/codeql/codeql-config.yml
languages: "javascript"
+ queries: +security-and-quality
+
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v2
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
+ with:
+ category: "/language:javascript"
diff --git a/vendor/twbs/bootstrap/.github/workflows/cspell.yml b/vendor/twbs/bootstrap/.github/workflows/cspell.yml
index 3751ad339..1d946981c 100644
--- a/vendor/twbs/bootstrap/.github/workflows/cspell.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/cspell.yml
@@ -9,15 +9,23 @@ on:
env:
FORCE_COLOR: 2
- NODE: 16
+
+permissions:
+ contents: read
jobs:
cspell:
+ permissions:
+ # allow streetsidesoftware/cspell-action to fetch files for commits and PRs
+ contents: read
+ pull-requests: read
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Run cspell
uses: streetsidesoftware/cspell-action@v2
diff --git a/vendor/twbs/bootstrap/.github/workflows/css.yml b/vendor/twbs/bootstrap/.github/workflows/css.yml
index 857a5672c..6bfde50af 100644
--- a/vendor/twbs/bootstrap/.github/workflows/css.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/css.yml
@@ -9,7 +9,10 @@ on:
env:
FORCE_COLOR: 2
- NODE: 16
+ NODE: 18
+
+permissions:
+ contents: read
jobs:
css:
@@ -18,6 +21,8 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Set up Node.js
uses: actions/setup-node@v3
diff --git a/vendor/twbs/bootstrap/.github/workflows/docs.yml b/vendor/twbs/bootstrap/.github/workflows/docs.yml
index f33413eb4..bdeae6043 100644
--- a/vendor/twbs/bootstrap/.github/workflows/docs.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/docs.yml
@@ -9,7 +9,10 @@ on:
env:
FORCE_COLOR: 2
- NODE: 16
+ NODE: 18
+
+permissions:
+ contents: read
jobs:
docs:
@@ -18,6 +21,8 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Set up Node.js
uses: actions/setup-node@v3
diff --git a/vendor/twbs/bootstrap/.github/workflows/issue-close-require.yml b/vendor/twbs/bootstrap/.github/workflows/issue-close-require.yml
index b251cd75e..b5000d8b4 100644
--- a/vendor/twbs/bootstrap/.github/workflows/issue-close-require.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/issue-close-require.yml
@@ -4,8 +4,15 @@ on:
schedule:
- cron: "0 0 * * *"
+permissions:
+ contents: read
+
jobs:
issue-close-require:
+ permissions:
+ # allow actions-cool/issues-helper to update issues and PRs
+ issues: write
+ pull-requests: write
runs-on: ubuntu-latest
if: github.repository == 'twbs/bootstrap'
steps:
diff --git a/vendor/twbs/bootstrap/.github/workflows/issue-labeled.yml b/vendor/twbs/bootstrap/.github/workflows/issue-labeled.yml
index fac58493b..584879dd8 100644
--- a/vendor/twbs/bootstrap/.github/workflows/issue-labeled.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/issue-labeled.yml
@@ -4,8 +4,15 @@ on:
issues:
types: [labeled]
+permissions:
+ contents: read
+
jobs:
issue-labeled:
+ permissions:
+ # allow actions-cool/issues-helper to update issues and PRs
+ issues: write
+ pull-requests: write
if: github.repository == 'twbs/bootstrap'
runs-on: ubuntu-latest
steps:
diff --git a/vendor/twbs/bootstrap/.github/workflows/js.yml b/vendor/twbs/bootstrap/.github/workflows/js.yml
index 82616c574..a8994b6cc 100644
--- a/vendor/twbs/bootstrap/.github/workflows/js.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/js.yml
@@ -9,16 +9,25 @@ on:
env:
FORCE_COLOR: 2
- NODE: 16
+ NODE: 18
+
+permissions:
+ contents: read
jobs:
run:
+ permissions:
+ # allow coverallsapp/github-action to create new checks issues and fetch code
+ checks: write
+ contents: read
name: JS Tests
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Set up Node.js
uses: actions/setup-node@v3
diff --git a/vendor/twbs/bootstrap/.github/workflows/lint.yml b/vendor/twbs/bootstrap/.github/workflows/lint.yml
index 816694ec2..51ee18999 100644
--- a/vendor/twbs/bootstrap/.github/workflows/lint.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/lint.yml
@@ -9,7 +9,10 @@ on:
env:
FORCE_COLOR: 2
- NODE: 16
+ NODE: 18
+
+permissions:
+ contents: read
jobs:
lint:
@@ -18,6 +21,8 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Set up Node.js
uses: actions/setup-node@v3
diff --git a/vendor/twbs/bootstrap/.github/workflows/node-sass.yml b/vendor/twbs/bootstrap/.github/workflows/node-sass.yml
index 465cee485..dc687ca46 100644
--- a/vendor/twbs/bootstrap/.github/workflows/node-sass.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/node-sass.yml
@@ -9,7 +9,10 @@ on:
env:
FORCE_COLOR: 2
- NODE: 16
+ NODE: 18
+
+permissions:
+ contents: read
jobs:
css:
@@ -18,6 +21,8 @@ jobs:
steps:
- name: Clone repository
uses: actions/checkout@v3
+ with:
+ persist-credentials: false
- name: Set up Node.js
uses: actions/setup-node@v3
diff --git a/vendor/twbs/bootstrap/.github/workflows/release-notes.yml b/vendor/twbs/bootstrap/.github/workflows/release-notes.yml
index bbd0a2448..f620dd31d 100644
--- a/vendor/twbs/bootstrap/.github/workflows/release-notes.yml
+++ b/vendor/twbs/bootstrap/.github/workflows/release-notes.yml
@@ -6,8 +6,15 @@ on:
- main
workflow_dispatch:
+permissions:
+ contents: read
+
jobs:
update_release_draft:
+ permissions:
+ # allow release-drafter/release-drafter to create GitHub releases and add labels to PRs
+ contents: write
+ pull-requests: write
runs-on: ubuntu-latest
if: github.repository == 'twbs/bootstrap'
steps:
diff --git a/vendor/twbs/bootstrap/.github/workflows/scorecards.yml b/vendor/twbs/bootstrap/.github/workflows/scorecards.yml
new file mode 100644
index 000000000..01977ac1c
--- /dev/null
+++ b/vendor/twbs/bootstrap/.github/workflows/scorecards.yml
@@ -0,0 +1,65 @@
+name: Scorecards supply-chain security
+
+on:
+ # Only the default branch is supported.
+ branch_protection_rule:
+ push:
+ branches:
+ - main
+ schedule:
+ - cron: "16 10 * * 6"
+ workflow_dispatch:
+
+# Declare default permissions as read only.
+permissions: read-all
+
+jobs:
+ analysis:
+ name: Scorecards analysis
+ runs-on: ubuntu-latest
+ permissions:
+ # Needed to upload the results to code-scanning dashboard.
+ security-events: write
+ # Used to receive a badge.
+ id-token: write
+ # Needs for private repositories.
+ contents: read
+ actions: read
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v3
+ with:
+ persist-credentials: false
+
+ - name: Run analysis
+ uses: ossf/scorecard-action@v2.1.1
+ with:
+ results_file: results.sarif
+ results_format: sarif
+ # (Optional) Read-only PAT token. Uncomment the `repo_token` line below if:
+ # - you want to enable the Branch-Protection check on a *public* repository, or
+ # - you are installing Scorecards on a *private* repository
+ # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
+ # repo_token: ${{ secrets.SCORECARD_READ_TOKEN }}
+
+ # Publish the results for public repositories to enable scorecard badges. For more details, see
+ # https://github.com/ossf/scorecard-action#publishing-results.
+ # For private repositories, `publish_results` will automatically be set to `false`, regardless
+ # of the value entered here.
+ publish_results: true
+
+ # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
+ # format to the repository Actions tab.
+ - name: Upload artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: SARIF file
+ path: results.sarif
+ retention-days: 5
+
+ # Upload the results to GitHub's code scanning dashboard.
+ - name: Upload to code-scanning
+ uses: github/codeql-action/upload-sarif@v1
+ with:
+ sarif_file: results.sarif
diff --git a/vendor/twbs/bootstrap/CODE_OF_CONDUCT.md b/vendor/twbs/bootstrap/CODE_OF_CONDUCT.md
index 28fd5e8d4..b983cba20 100644
--- a/vendor/twbs/bootstrap/CODE_OF_CONDUCT.md
+++ b/vendor/twbs/bootstrap/CODE_OF_CONDUCT.md
@@ -17,23 +17,23 @@ diverse, inclusive, and healthy community.
Examples of behavior that contributes to a positive environment for our
community include:
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
+- Demonstrating empathy and kindness toward other people
+- Being respectful of differing opinions, viewpoints, and experiences
+- Giving and gracefully accepting constructive feedback
+- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the overall
+- Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
-* The use of sexualized language or imagery, and sexual attention or advances of
+- The use of sexualized language or imagery, and sexual attention or advances of
any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email address,
+- Trolling, insulting or derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or email address,
without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
+- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
diff --git a/vendor/twbs/bootstrap/LICENSE b/vendor/twbs/bootstrap/LICENSE
index dda75ca9a..c11d10ff8 100644
--- a/vendor/twbs/bootstrap/LICENSE
+++ b/vendor/twbs/bootstrap/LICENSE
@@ -1,6 +1,5 @@
The MIT License (MIT)
-Copyright (c) 2011-2022 Twitter, Inc.
Copyright (c) 2011-2022 The Bootstrap Authors
Permission is hereby granted, free of charge, to any person obtaining a copy
diff --git a/vendor/twbs/bootstrap/README.md b/vendor/twbs/bootstrap/README.md
index 5ad3d9094..9f9374ced 100644
--- a/vendor/twbs/bootstrap/README.md
+++ b/vendor/twbs/bootstrap/README.md
@@ -1,6 +1,6 @@
<p align="center">
<a href="https://getbootstrap.com/">
- <img src="https://getbootstrap.com/docs/5.2/assets/brand/bootstrap-logo-shadow.png" alt="Bootstrap logo" width="200" height="165">
+ <img src="https://getbootstrap.com/docs/5.3/assets/brand/bootstrap-logo-shadow.png" alt="Bootstrap logo" width="200" height="165">
</a>
</p>
@@ -9,7 +9,7 @@
<p align="center">
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
<br>
- <a href="https://getbootstrap.com/docs/5.2/"><strong>Explore Bootstrap docs »</strong></a>
+ <a href="https://getbootstrap.com/docs/5.3/"><strong>Explore Bootstrap docs »</strong></a>
<br>
<br>
<a href="https://github.com/twbs/bootstrap/issues/new?assignees=-&labels=bug&template=bug_report.yml">Report bug</a>
@@ -46,32 +46,33 @@ Our default branch is for development of our Bootstrap 5 release. Head to the [`
Several quick start options are available:
-- [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.2.2.zip)
+- [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.3.0-alpha1.zip)
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`
-- Install with [npm](https://www.npmjs.com/): `npm install bootstrap@v5.2.2`
-- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@v5.2.2`
-- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.2.2`
+- Install with [npm](https://www.npmjs.com/): `npm install bootstrap@v5.3.0-alpha1`
+- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@v5.3.0-alpha1`
+- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.3.0-alpha1`
- Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass`
-Read the [Getting started page](https://getbootstrap.com/docs/5.2/getting-started/introduction/) for information on the framework contents, templates, examples, and more.
+Read the [Getting started page](https://getbootstrap.com/docs/5.3/getting-started/introduction/) for information on the framework contents, templates, examples, and more.
## Status
-[![Build Status](https://img.shields.io/github/workflow/status/twbs/bootstrap/JS%20Tests/main?label=JS%20Tests&logo=github)](https://github.com/twbs/bootstrap/actions?query=workflow%3AJS+Tests+branch%3Amain)
-[![npm version](https://img.shields.io/npm/v/bootstrap)](https://www.npmjs.com/package/bootstrap)
-[![Gem version](https://img.shields.io/gem/v/bootstrap)](https://rubygems.org/gems/bootstrap)
-[![Meteor Atmosphere](https://img.shields.io/badge/meteor-twbs%3Abootstrap-blue)](https://atmospherejs.com/twbs/bootstrap)
-[![Packagist Prerelease](https://img.shields.io/packagist/vpre/twbs/bootstrap)](https://packagist.org/packages/twbs/bootstrap)
-[![NuGet](https://img.shields.io/nuget/vpre/bootstrap)](https://www.nuget.org/packages/bootstrap/absoluteLatest)
-[![Coverage Status](https://img.shields.io/coveralls/github/twbs/bootstrap/main)](https://coveralls.io/github/twbs/bootstrap?branch=main)
+[![Build Status](https://img.shields.io/github/actions/workflow/status/twbs/bootstrap/js.yml?branch=main&label=JS%20Tests&logo=github)](https://github.com/twbs/bootstrap/actions?query=workflow%3AJS+Tests+branch%3Amain)
+[![npm version](https://img.shields.io/npm/v/bootstrap?logo=npm&logoColor=fff)](https://www.npmjs.com/package/bootstrap)
+[![Gem version](https://img.shields.io/gem/v/bootstrap?logo=rubygems&logoColor=fff)](https://rubygems.org/gems/bootstrap)
+[![Meteor Atmosphere](https://img.shields.io/badge/meteor-twbs%3Abootstrap-blue?logo=meteor&logoColor=fff)](https://atmospherejs.com/twbs/bootstrap)
+[![Packagist Prerelease](https://img.shields.io/packagist/vpre/twbs/bootstrap?logo=packagist&logoColor=fff)](https://packagist.org/packages/twbs/bootstrap)
+[![NuGet](https://img.shields.io/nuget/vpre/bootstrap?logo=nuget&logoColor=fff)](https://www.nuget.org/packages/bootstrap/absoluteLatest)
+[![Coverage Status](https://img.shields.io/coveralls/github/twbs/bootstrap/main?logo=coveralls&logoColor=fff)](https://coveralls.io/github/twbs/bootstrap?branch=main)
[![CSS gzip size](https://img.badgesize.io/twbs/bootstrap/main/dist/css/bootstrap.min.css?compression=gzip&label=CSS%20gzip%20size)](https://github.com/twbs/bootstrap/blob/main/dist/css/bootstrap.min.css)
[![CSS Brotli size](https://img.badgesize.io/twbs/bootstrap/main/dist/css/bootstrap.min.css?compression=brotli&label=CSS%20Brotli%20size)](https://github.com/twbs/bootstrap/blob/main/dist/css/bootstrap.min.css)
[![JS gzip size](https://img.badgesize.io/twbs/bootstrap/main/dist/js/bootstrap.min.js?compression=gzip&label=JS%20gzip%20size)](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js)
[![JS Brotli size](https://img.badgesize.io/twbs/bootstrap/main/dist/js/bootstrap.min.js?compression=brotli&label=JS%20Brotli%20size)](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js)
[![BrowserStack Status](https://www.browserstack.com/automate/badge.svg?badge_key=SkxZcStBeExEdVJqQ2hWYnlWckpkNmNEY213SFp6WHFETWk2bGFuY3pCbz0tLXhqbHJsVlZhQnRBdEpod3NLSDMzaHc9PQ==--3d0b75245708616eb93113221beece33e680b229)](https://www.browserstack.com/automate/public-build/SkxZcStBeExEdVJqQ2hWYnlWckpkNmNEY213SFp6WHFETWk2bGFuY3pCbz0tLXhqbHJsVlZhQnRBdEpod3NLSDMzaHc9PQ==--3d0b75245708616eb93113221beece33e680b229)
-[![Backers on Open Collective](https://img.shields.io/opencollective/backers/bootstrap)](#backers)
-[![Sponsors on Open Collective](https://img.shields.io/opencollective/sponsors/bootstrap)](#sponsors)
+[![Backers on Open Collective](https://img.shields.io/opencollective/backers/bootstrap?logo=opencollective&logoColor=fff)](#backers)
+[![Sponsors on Open Collective](https://img.shields.io/opencollective/sponsors/bootstrap?logo=opencollective&logoColor=fff)](#sponsors)
+![OpenSSF Scorecard](https://img.shields.io/ossf-scorecard/github.com/twbs/bootstrap)
## What's included
@@ -243,4 +244,4 @@ Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com
## Copyright and license
-Code and documentation copyright 2011–2022 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors) and [Twitter, Inc.](https://twitter.com) Code released under the [MIT License](https://github.com/twbs/bootstrap/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
+Code and documentation copyright 2011–2022 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors). Code released under the [MIT License](https://github.com/twbs/bootstrap/blob/main/LICENSE). Docs released under [Creative Commons](https://creativecommons.org/licenses/by/3.0/).
diff --git a/vendor/twbs/bootstrap/build/build-plugins.js b/vendor/twbs/bootstrap/build/build-plugins.js
index a160209b0..a29e83d83 100644
--- a/vendor/twbs/bootstrap/build/build-plugins.js
+++ b/vendor/twbs/bootstrap/build/build-plugins.js
@@ -3,7 +3,6 @@
/*!
* Script to build our plugins to use them separately.
* Copyright 2020-2022 The Bootstrap Authors
- * Copyright 2020-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -16,7 +15,7 @@ const { babel } = require('@rollup/plugin-babel')
const banner = require('./banner.js')
const sourcePath = path.resolve(__dirname, '../js/src/').replace(/\\/g, '/')
-const jsFiles = globby.sync(sourcePath + '/**/*.js')
+const jsFiles = globby.sync(`${sourcePath}/**/*.js`)
// Array which holds the resolved plugins
const resolvedPlugins = []
@@ -27,7 +26,7 @@ const filenameToEntity = filename => filename.replace('.js', '')
for (const file of jsFiles) {
resolvedPlugins.push({
- src: file.replace('.js', ''),
+ src: file,
dist: file.replace('src', 'dist'),
fileName: path.basename(file),
className: filenameToEntity(path.basename(file))
diff --git a/vendor/twbs/bootstrap/build/change-version.js b/vendor/twbs/bootstrap/build/change-version.js
index 57c5fdec8..0de927d77 100644
--- a/vendor/twbs/bootstrap/build/change-version.js
+++ b/vendor/twbs/bootstrap/build/change-version.js
@@ -3,7 +3,6 @@
/*!
* Script to update version number references in the project.
* Copyright 2017-2022 The Bootstrap Authors
- * Copyright 2017-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
diff --git a/vendor/twbs/bootstrap/build/generate-sri.js b/vendor/twbs/bootstrap/build/generate-sri.js
index ef1b39f97..652955721 100644
--- a/vendor/twbs/bootstrap/build/generate-sri.js
+++ b/vendor/twbs/bootstrap/build/generate-sri.js
@@ -6,7 +6,6 @@
* otherwise the hashes won't match!
*
* Copyright 2017-2022 The Bootstrap Authors
- * Copyright 2017-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
diff --git a/vendor/twbs/bootstrap/build/rollup.config.js b/vendor/twbs/bootstrap/build/rollup.config.js
index 27f12ac03..f01918ebf 100644
--- a/vendor/twbs/bootstrap/build/rollup.config.js
+++ b/vendor/twbs/bootstrap/build/rollup.config.js
@@ -40,7 +40,7 @@ if (BUNDLE) {
const rollupConfig = {
input: path.resolve(__dirname, `../js/index.${ESM ? 'esm' : 'umd'}.js`),
output: {
- banner,
+ banner: banner(),
file: path.resolve(__dirname, `../dist/js/${fileDestination}.js`),
format: ESM ? 'esm' : 'umd',
globals,
diff --git a/vendor/twbs/bootstrap/build/vnu-jar.js b/vendor/twbs/bootstrap/build/vnu-jar.js
index f29eeb722..4da9b53c8 100644
--- a/vendor/twbs/bootstrap/build/vnu-jar.js
+++ b/vendor/twbs/bootstrap/build/vnu-jar.js
@@ -3,7 +3,6 @@
/*!
* Script to run vnu-jar if Java is available.
* Copyright 2017-2022 The Bootstrap Authors
- * Copyright 2017-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
diff --git a/vendor/twbs/bootstrap/config.yml b/vendor/twbs/bootstrap/config.yml
index 02ede2bc4..b217aaa53 100644
--- a/vendor/twbs/bootstrap/config.yml
+++ b/vendor/twbs/bootstrap/config.yml
@@ -31,7 +31,7 @@ publishDir: "_site"
module:
mounts:
- source: dist
- target: static/docs/5.2/dist
+ target: static/docs/5.3/dist
- source: site/assets
target: assets
- source: site/content
@@ -42,9 +42,9 @@ module:
target: layouts
- source: site/static
target: static
- - source: site/static/docs/5.2/assets/img/favicons/apple-touch-icon.png
+ - source: site/static/docs/5.3/assets/img/favicons/apple-touch-icon.png
target: static/apple-touch-icon.png
- - source: site/static/docs/5.2/assets/img/favicons/favicon.ico
+ - source: site/static/docs/5.3/assets/img/favicons/favicon.ico
target: static/favicon.ico
params:
@@ -52,9 +52,9 @@ params:
description: "Powerful, extensible, and feature-packed frontend toolkit. Build and customize with Sass, utilize prebuilt grid system and components, and bring projects to life with powerful JavaScript plugins."
authors: "Mark Otto, Jacob Thornton, and Bootstrap contributors"
- current_version: "5.2.2"
- current_ruby_version: "5.2.2"
- docs_version: "5.2"
+ current_version: "5.3.0-alpha1"
+ current_ruby_version: "5.3.0-alpha1"
+ docs_version: "5.3"
rfs_version: "v9.0.6"
github_org: "https://github.com/twbs"
repo: "https://github.com/twbs/bootstrap"
@@ -66,20 +66,20 @@ params:
swag: "https://cottonbureau.com/people/bootstrap"
download:
- source: "https://github.com/twbs/bootstrap/archive/v5.2.2.zip"
- dist: "https://github.com/twbs/bootstrap/releases/download/v5.2.2/bootstrap-5.2.2-dist.zip"
- dist_examples: "https://github.com/twbs/bootstrap/releases/download/v5.2.2/bootstrap-5.2.2-examples.zip"
+ source: "https://github.com/twbs/bootstrap/archive/v5.3.0-alpha1.zip"
+ dist: "https://github.com/twbs/bootstrap/releases/download/v5.3.0-alpha1/bootstrap-5.3.0-alpha1-dist.zip"
+ dist_examples: "https://github.com/twbs/bootstrap/releases/download/v5.3.0-alpha1/bootstrap-5.3.0-alpha1-examples.zip"
cdn:
# See https://www.srihash.org for info on how to generate the hashes
- css: "https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"
- css_hash: "sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
- css_rtl: "https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.rtl.min.css"
- css_rtl_hash: "sha384-7mQhpDl5nRA5nY9lr8F1st2NbIly/8WqhjTp+0oFxEA/QUuvlbF6M1KXezGBh3Nb"
- js: "https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.min.js"
- js_hash: "sha384-IDwe1+LCz02ROU9k972gdyvl+AESN10+x7tBKgc9I5HFtuNz0wWnPclzo6p9vxnk"
- js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
- js_bundle_hash: "sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
+ css: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css"
+ css_hash: "sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD"
+ css_rtl: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.rtl.min.css"
+ css_rtl_hash: "sha384-WJUUqfoMmnfkBLne5uxXj+na/c7sesSJ32gI7GfCk4zO4GthUKhSEGyvQ839BC51"
+ js: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.min.js"
+ js_hash: "sha384-mQ93GR66B00ZXjt0YO5KlohRA5SY2XofN4zfuZxLkoj1gXtW8ANNCe9d5Y3eG5eD"
+ js_bundle: "https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"
+ js_bundle_hash: "sha384-w76AqPfDkMBDXo30jS1Sgez6pr3x5MlQ1ZAGC+nuZB+EYdgRZgiwxhTBTkF7CXvN"
popper: "https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"
popper_hash: "sha384-oBqDVmMz9ATKxIep9tiCxS/Z9fNfEXiDAYTujMAeBAsjFuCZSmKbSSUnQlmh/jp3"
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css
index 3f7fb426f..5792f32e7 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css
@@ -1,10 +1,10 @@
/*!
- * Bootstrap Grid v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
-:root {
+:root,
+[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
@@ -44,6 +44,30 @@
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
+ --bs-primary-text: #0a58ca;
+ --bs-secondary-text: #6c757d;
+ --bs-success-text: #146c43;
+ --bs-info-text: #087990;
+ --bs-warning-text: #997404;
+ --bs-danger-text: #b02a37;
+ --bs-light-text: #6c757d;
+ --bs-dark-text: #495057;
+ --bs-primary-bg-subtle: #cfe2ff;
+ --bs-secondary-bg-subtle: #f8f9fa;
+ --bs-success-bg-subtle: #d1e7dd;
+ --bs-info-bg-subtle: #cff4fc;
+ --bs-warning-bg-subtle: #fff3cd;
+ --bs-danger-bg-subtle: #f8d7da;
+ --bs-light-bg-subtle: #fcfcfd;
+ --bs-dark-bg-subtle: #ced4da;
+ --bs-primary-border-subtle: #9ec5fe;
+ --bs-secondary-border-subtle: #e9ecef;
+ --bs-success-border-subtle: #a3cfbb;
+ --bs-info-border-subtle: #9eeaf9;
+ --bs-warning-border-subtle: #ffe69c;
+ --bs-danger-border-subtle: #f1aeb5;
+ --bs-light-border-subtle: #e9ecef;
+ --bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
@@ -56,7 +80,25 @@
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
+ --bs-emphasis-color: #000;
+ --bs-emphasis-color-rgb: 0, 0, 0;
+ --bs-secondary-color: rgba(33, 37, 41, 0.75);
+ --bs-secondary-color-rgb: 33, 37, 41;
+ --bs-secondary-bg: #e9ecef;
+ --bs-secondary-bg-rgb: 233, 236, 239;
+ --bs-tertiary-color: rgba(33, 37, 41, 0.5);
+ --bs-tertiary-color-rgb: 33, 37, 41;
+ --bs-tertiary-bg: #f8f9fa;
+ --bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-link-color: #0d6efd;
+ --bs-link-color-rgb: 13, 110, 253;
+ --bs-link-decoration: underline;
+ --bs-link-hover-color: #0a58ca;
+ --bs-link-hover-color-rgb: 10, 88, 202;
+ --bs-code-color: #d63384;
+ --bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
@@ -67,10 +109,70 @@
--bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem;
- --bs-link-color: #0d6efd;
- --bs-link-hover-color: #0a58ca;
- --bs-code-color: #d63384;
+ --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
+ --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-emphasis-color: #000;
+ --bs-form-control-bg: var(--bs-body-bg);
+ --bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd;
+ --bs-breakpoint-xs: 0;
+ --bs-breakpoint-sm: 576px;
+ --bs-breakpoint-md: 768px;
+ --bs-breakpoint-lg: 992px;
+ --bs-breakpoint-xl: 1200px;
+ --bs-breakpoint-xxl: 1400px;
+}
+
+[data-bs-theme=dark] {
+ --bs-body-color: #adb5bd;
+ --bs-body-color-rgb: 173, 181, 189;
+ --bs-body-bg: #212529;
+ --bs-body-bg-rgb: 33, 37, 41;
+ --bs-emphasis-color: #f8f9fa;
+ --bs-emphasis-color-rgb: 248, 249, 250;
+ --bs-secondary-color: rgba(173, 181, 189, 0.75);
+ --bs-secondary-color-rgb: 173, 181, 189;
+ --bs-secondary-bg: #343a40;
+ --bs-secondary-bg-rgb: 52, 58, 64;
+ --bs-tertiary-color: rgba(173, 181, 189, 0.5);
+ --bs-tertiary-color-rgb: 173, 181, 189;
+ --bs-tertiary-bg: #2b3035;
+ --bs-tertiary-bg-rgb: 43, 48, 53;
+ --bs-emphasis-color: #fff;
+ --bs-primary-text: #6ea8fe;
+ --bs-secondary-text: #dee2e6;
+ --bs-success-text: #75b798;
+ --bs-info-text: #6edff6;
+ --bs-warning-text: #ffda6a;
+ --bs-danger-text: #ea868f;
+ --bs-light-text: #f8f9fa;
+ --bs-dark-text: #dee2e6;
+ --bs-primary-bg-subtle: #031633;
+ --bs-secondary-bg-subtle: #212529;
+ --bs-success-bg-subtle: #051b11;
+ --bs-info-bg-subtle: #032830;
+ --bs-warning-bg-subtle: #332701;
+ --bs-danger-bg-subtle: #2c0b0e;
+ --bs-light-bg-subtle: #343a40;
+ --bs-dark-bg-subtle: #1a1d20;
+ --bs-primary-border-subtle: #084298;
+ --bs-secondary-border-subtle: #495057;
+ --bs-success-border-subtle: #0f5132;
+ --bs-info-border-subtle: #055160;
+ --bs-warning-border-subtle: #664d03;
+ --bs-danger-border-subtle: #842029;
+ --bs-light-border-subtle: #495057;
+ --bs-dark-border-subtle: #343a40;
+ --bs-heading-color: #fff;
+ --bs-link-color: #6ea8fe;
+ --bs-link-hover-color: #9ec5fe;
+ --bs-link-color-rgb: 110, 168, 254;
+ --bs-link-hover-color-rgb: 158, 197, 254;
+ --bs-code-color: #e685b5;
+ --bs-border-color: #495057;
+ --bs-border-color-translucent: rgba(255, 255, 255, 0.15);
}
.container,
@@ -462,51 +564,51 @@
margin-left: 91.66666667%;
}
.g-sm-0,
-.gx-sm-0 {
+ .gx-sm-0 {
--bs-gutter-x: 0;
}
.g-sm-0,
-.gy-sm-0 {
+ .gy-sm-0 {
--bs-gutter-y: 0;
}
.g-sm-1,
-.gx-sm-1 {
+ .gx-sm-1 {
--bs-gutter-x: 0.25rem;
}
.g-sm-1,
-.gy-sm-1 {
+ .gy-sm-1 {
--bs-gutter-y: 0.25rem;
}
.g-sm-2,
-.gx-sm-2 {
+ .gx-sm-2 {
--bs-gutter-x: 0.5rem;
}
.g-sm-2,
-.gy-sm-2 {
+ .gy-sm-2 {
--bs-gutter-y: 0.5rem;
}
.g-sm-3,
-.gx-sm-3 {
+ .gx-sm-3 {
--bs-gutter-x: 1rem;
}
.g-sm-3,
-.gy-sm-3 {
+ .gy-sm-3 {
--bs-gutter-y: 1rem;
}
.g-sm-4,
-.gx-sm-4 {
+ .gx-sm-4 {
--bs-gutter-x: 1.5rem;
}
.g-sm-4,
-.gy-sm-4 {
+ .gy-sm-4 {
--bs-gutter-y: 1.5rem;
}
.g-sm-5,
-.gx-sm-5 {
+ .gx-sm-5 {
--bs-gutter-x: 3rem;
}
.g-sm-5,
-.gy-sm-5 {
+ .gy-sm-5 {
--bs-gutter-y: 3rem;
}
}
@@ -631,51 +733,51 @@
margin-left: 91.66666667%;
}
.g-md-0,
-.gx-md-0 {
+ .gx-md-0 {
--bs-gutter-x: 0;
}
.g-md-0,
-.gy-md-0 {
+ .gy-md-0 {
--bs-gutter-y: 0;
}
.g-md-1,
-.gx-md-1 {
+ .gx-md-1 {
--bs-gutter-x: 0.25rem;
}
.g-md-1,
-.gy-md-1 {
+ .gy-md-1 {
--bs-gutter-y: 0.25rem;
}
.g-md-2,
-.gx-md-2 {
+ .gx-md-2 {
--bs-gutter-x: 0.5rem;
}
.g-md-2,
-.gy-md-2 {
+ .gy-md-2 {
--bs-gutter-y: 0.5rem;
}
.g-md-3,
-.gx-md-3 {
+ .gx-md-3 {
--bs-gutter-x: 1rem;
}
.g-md-3,
-.gy-md-3 {
+ .gy-md-3 {
--bs-gutter-y: 1rem;
}
.g-md-4,
-.gx-md-4 {
+ .gx-md-4 {
--bs-gutter-x: 1.5rem;
}
.g-md-4,
-.gy-md-4 {
+ .gy-md-4 {
--bs-gutter-y: 1.5rem;
}
.g-md-5,
-.gx-md-5 {
+ .gx-md-5 {
--bs-gutter-x: 3rem;
}
.g-md-5,
-.gy-md-5 {
+ .gy-md-5 {
--bs-gutter-y: 3rem;
}
}
@@ -800,51 +902,51 @@
margin-left: 91.66666667%;
}
.g-lg-0,
-.gx-lg-0 {
+ .gx-lg-0 {
--bs-gutter-x: 0;
}
.g-lg-0,
-.gy-lg-0 {
+ .gy-lg-0 {
--bs-gutter-y: 0;
}
.g-lg-1,
-.gx-lg-1 {
+ .gx-lg-1 {
--bs-gutter-x: 0.25rem;
}
.g-lg-1,
-.gy-lg-1 {
+ .gy-lg-1 {
--bs-gutter-y: 0.25rem;
}
.g-lg-2,
-.gx-lg-2 {
+ .gx-lg-2 {
--bs-gutter-x: 0.5rem;
}
.g-lg-2,
-.gy-lg-2 {
+ .gy-lg-2 {
--bs-gutter-y: 0.5rem;
}
.g-lg-3,
-.gx-lg-3 {
+ .gx-lg-3 {
--bs-gutter-x: 1rem;
}
.g-lg-3,
-.gy-lg-3 {
+ .gy-lg-3 {
--bs-gutter-y: 1rem;
}
.g-lg-4,
-.gx-lg-4 {
+ .gx-lg-4 {
--bs-gutter-x: 1.5rem;
}
.g-lg-4,
-.gy-lg-4 {
+ .gy-lg-4 {
--bs-gutter-y: 1.5rem;
}
.g-lg-5,
-.gx-lg-5 {
+ .gx-lg-5 {
--bs-gutter-x: 3rem;
}
.g-lg-5,
-.gy-lg-5 {
+ .gy-lg-5 {
--bs-gutter-y: 3rem;
}
}
@@ -969,51 +1071,51 @@
margin-left: 91.66666667%;
}
.g-xl-0,
-.gx-xl-0 {
+ .gx-xl-0 {
--bs-gutter-x: 0;
}
.g-xl-0,
-.gy-xl-0 {
+ .gy-xl-0 {
--bs-gutter-y: 0;
}
.g-xl-1,
-.gx-xl-1 {
+ .gx-xl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xl-1,
-.gy-xl-1 {
+ .gy-xl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xl-2,
-.gx-xl-2 {
+ .gx-xl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xl-2,
-.gy-xl-2 {
+ .gy-xl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xl-3,
-.gx-xl-3 {
+ .gx-xl-3 {
--bs-gutter-x: 1rem;
}
.g-xl-3,
-.gy-xl-3 {
+ .gy-xl-3 {
--bs-gutter-y: 1rem;
}
.g-xl-4,
-.gx-xl-4 {
+ .gx-xl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xl-4,
-.gy-xl-4 {
+ .gy-xl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xl-5,
-.gx-xl-5 {
+ .gx-xl-5 {
--bs-gutter-x: 3rem;
}
.g-xl-5,
-.gy-xl-5 {
+ .gy-xl-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1138,51 +1240,51 @@
margin-left: 91.66666667%;
}
.g-xxl-0,
-.gx-xxl-0 {
+ .gx-xxl-0 {
--bs-gutter-x: 0;
}
.g-xxl-0,
-.gy-xxl-0 {
+ .gy-xxl-0 {
--bs-gutter-y: 0;
}
.g-xxl-1,
-.gx-xxl-1 {
+ .gx-xxl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xxl-1,
-.gy-xxl-1 {
+ .gy-xxl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xxl-2,
-.gx-xxl-2 {
+ .gx-xxl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xxl-2,
-.gy-xxl-2 {
+ .gy-xxl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xxl-3,
-.gx-xxl-3 {
+ .gx-xxl-3 {
--bs-gutter-x: 1rem;
}
.g-xxl-3,
-.gy-xxl-3 {
+ .gy-xxl-3 {
--bs-gutter-y: 1rem;
}
.g-xxl-4,
-.gx-xxl-4 {
+ .gx-xxl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xxl-4,
-.gy-xxl-4 {
+ .gy-xxl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xxl-5,
-.gx-xxl-5 {
+ .gx-xxl-5 {
--bs-gutter-x: 3rem;
}
.g-xxl-5,
-.gy-xxl-5 {
+ .gy-xxl-5 {
--bs-gutter-y: 3rem;
}
}
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map
index 2f92d251d..41b6c20aa 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-grid.css","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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IGI;IAOI,0BAAA;EPwrDV;EO/rDM;IAOI,gCAAA;EP2rDV;EOlsDM;IAOI,yBAAA;EP8rDV;EOrsDM;IAOI,wBAAA;EPisDV;EOxsDM;IAOI,yBAAA;EPosDV;EO3sDM;IAOI,6BAAA;EPusDV;EO9sDM;IAOI,8BAAA;EP0sDV;EOjtDM;IAOI,wBAAA;EP6sDV;EOptDM;IAOI,+BAAA;EPgtDV;EOvtDM;IAOI,wBAAA;EPmtDV;EO1tDM;IAOI,yBAAA;EPstDV;EO7tDM;IAOI,8BAAA;EPytDV;EOhuDM;IAOI,iCAAA;EP4tDV;EOnuDM;IAOI,sCAAA;EP+tDV;EOtuDM;IAOI,yCAAA;EPkuDV;EOzuDM;IAOI,uBAAA;EPquDV;EO5uDM;IAOI,uBAAA;EPwuDV;EO/uDM;IAOI,yBAAA;EP2uDV;EOlvDM;IAOI,yBAAA;EP8uDV;EOrvDM;IAOI,0BAAA;EPivDV;EOxvDM;IAOI,4BAAA;EPovDV;EO3vDM;IAOI,kCAAA;EPuvDV;EO9vDM;IAOI,sCAAA;EP0vDV;EOjwDM;IAOI,oCAAA;EP6vDV;EOpwDM;IAOI,kCAAA;EPgwDV;EOvwDM;IAOI,yCAAA;EPmwDV;EO1wDM;IAOI,wCAAA;EPswDV;EO7wDM;IAOI,wCAAA;EPywDV;EOhxDM;IAOI,kCAAA;EP4wDV;EOnxDM;IAOI,gCAAA;EP+wDV;EOtxDM;IAOI,8BAAA;EPkxDV;EOzxDM;IAOI,gCAAA;EPqxDV;EO5xDM;IAOI,+BAAA;EPwxDV;EO/xDM;IAOI,oCAAA;EP2xDV;EOlyDM;IAOI,kCAAA;EP8xDV;EOryDM;IAOI,gCAAA;EPiyDV;EOxyDM;IAOI,uCAAA;EPoyDV;EO3yDM;IAOI,sCAAA;EPuyDV;EO9yDM;IAOI,iCAAA;EP0yDV;EOjzDM;IAOI,2BAAA;EP6yDV;EOpzDM;IAOI,iCAAA;EPgzDV;EOvzDM;IAOI,+BAAA;EPmzDV;EO1zDM;IAOI,6BAAA;EPszDV;EO7zDM;IAOI,+BAAA;EPyzDV;EOh0DM;IAOI,8BAAA;EP4zDV;EOn0DM;IAOI,oBAAA;EP+zDV;EOt0DM;IAOI,mBAAA;EPk0DV;EOz0DM;IAOI,mBAAA;EPq0DV;EO50DM;IAOI,mBAAA;EPw0DV;EO/0DM;IAOI,mBAAA;EP20DV;EOl1DM;IAOI,mBAAA;EP80DV;EOr1DM;IAOI,mBAAA;EPi1DV;EOx1DM;IAOI,mBAAA;EPo1DV;EO31DM;IAOI,oBAAA;EPu1DV;EO91DM;IAOI,0BAAA;EP01DV;EOj2DM;IAOI,yBAAA;EP61DV;EOp2DM;IAOI,uBAAA;EPg2DV;EOv2DM;IAOI,yBAAA;EPm2DV;EO12DM;IAOI,uBAAA;EPs2DV;EO72DM;IAOI,uBAAA;EPy2DV;EOh3DM;IAOI,0BAAA;IAAA,yBAAA;EP62DV;EOp3DM;IAOI,gCAAA;IAAA,+BAAA;EPi3DV;EOx3DM;IAOI,+BAAA;IAAA,8BAAA;EPq3DV;EO53DM;IAOI,6BAAA;IAAA,4BAAA;EPy3DV;EOh4DM;IAOI,+BAAA;IAAA,8BAAA;EP63DV;EOp4DM;IAOI,6BAAA;IAAA,4BAAA;EPi4DV;EOx4DM;IAOI,6BAAA;IAAA,4BAAA;EPq4DV;EO54DM;IAOI,wBAAA;IAAA,2BAAA;EPy4DV;EOh5DM;IAOI,8BAAA;IAAA,iCAAA;EP64DV;EOp5DM;IAOI,6BAAA;IAAA,gCAAA;EPi5DV;EOx5DM;IAOI,2BAAA;IAAA,8BAAA;EPq5DV;EO55DM;IAOI,6BAAA;IAAA,gCAAA;EPy5DV;EOh6DM;IAOI,2BAAA;IAAA,8BAAA;EP65DV;EOp6DM;IAOI,2BAAA;IAAA,8BAAA;EPi6DV;EOx6DM;IAOI,wBAAA;EPo6DV;EO36DM;IAOI,8BAAA;EPu6DV;EO96DM;IAOI,6BAAA;EP06DV;EOj7DM;IAOI,2BAAA;EP66DV;EOp7DM;IAOI,6BAAA;EPg7DV;EOv7DM;IAOI,2BAAA;EPm7DV;EO17DM;IAOI,2BAAA;EPs7DV;EO77DM;IAOI,0BAAA;EPy7DV;EOh8DM;IAOI,gCAAA;EP47DV;EOn8DM;IAOI,+BAAA;EP+7DV;EOt8DM;IAOI,6BAAA;EPk8DV;EOz8DM;IAOI,+BAAA;EPq8DV;EO58DM;IAOI,6BAAA;EPw8DV;EO/8DM;IAOI,6BAAA;EP28DV;EOl9DM;IAOI,2BAAA;EP88DV;EOr9DM;IAOI,iCAAA;EPi9DV;EOx9DM;IAOI,gCAAA;EPo9DV;EO39DM;IAOI,8BAAA;EPu9DV;EO99DM;IAOI,gCAAA;EP09DV;EOj+DM;IAOI,8BAAA;EP69DV;EOp+DM;IAOI,8BAAA;EPg+DV;EOv+DM;IAOI,yBAAA;EPm+DV;EO1+DM;IAOI,+BAAA;EPs+DV;EO7+DM;IAOI,8BAAA;EPy+DV;EOh/DM;IAOI,4BAAA;EP4+DV;EOn/DM;IAOI,8BAAA;EP++DV;EOt/DM;IAOI,4BAAA;EPk/DV;EOz/DM;IAOI,4BAAA;EPq/DV;EO5/DM;IAOI,qBAAA;EPw/DV;EO//DM;IAOI,2BAAA;EP2/DV;EOlgEM;IAOI,0BAAA;EP8/DV;EOrgEM;IAOI,wBAAA;EPigEV;EOxgEM;IAOI,0BAAA;EPogEV;EO3gEM;IAOI,wBAAA;EPugEV;EO9gEM;IAOI,2BAAA;IAAA,0BAAA;EP2gEV;EOlhEM;IAOI,iCAAA;IAAA,gCAAA;EP+gEV;EOthEM;IAOI,gCAAA;IAAA,+BAAA;EPmhEV;EO1hEM;IAOI,8BAAA;IAAA,6BAAA;EPuhEV;EO9hEM;IAOI,gCAAA;IAAA,+BAAA;EP2hEV;EOliEM;IAOI,8BAAA;IAAA,6BAAA;EP+hEV;EOtiEM;IAOI,yBAAA;IAAA,4BAAA;EPmiEV;EO1iEM;IAOI,+BAAA;IAAA,kCAAA;EPuiEV;EO9iEM;IAOI,8BAAA;IAAA,iCAAA;EP2iEV;EOljEM;IAOI,4BAAA;IAAA,+BAAA;EP+iEV;EOtjEM;IAOI,8BAAA;IAAA,iCAAA;EPmjEV;EO1jEM;IAOI,4BAAA;IAAA,+BAAA;EPujEV;EO9jEM;IAOI,yBAAA;EP0jEV;EOjkEM;IAOI,+BAAA;EP6jEV;EOpkEM;IAOI,8BAAA;EPgkEV;EOvkEM;IAOI,4BAAA;EPmkEV;EO1kEM;IAOI,8BAAA;EPskEV;EO7kEM;IAOI,4BAAA;EPykEV;EOhlEM;IAOI,2BAAA;EP4kEV;EOnlEM;IAOI,iCAAA;EP+kEV;EOtlEM;IAOI,gCAAA;EPklEV;EOzlEM;IAOI,8BAAA;EPqlEV;EO5lEM;IAOI,gCAAA;EPwlEV;EO/lEM;IAOI,8BAAA;EP2lEV;EOlmEM;IAOI,4BAAA;EP8lEV;EOrmEM;IAOI,kCAAA;EPimEV;EOxmEM;IAOI,iCAAA;EPomEV;EO3mEM;IAOI,+BAAA;EPumEV;EO9mEM;IAOI,iCAAA;EP0mEV;EOjnEM;IAOI,+BAAA;EP6mEV;EOpnEM;IAOI,0BAAA;EPgnEV;EOvnEM;IAOI,gCAAA;EPmnEV;EO1nEM;IAOI,+BAAA;EPsnEV;EO7nEM;IAOI,6BAAA;EPynEV;EOhoEM;IAOI,+BAAA;EP4nEV;EOnoEM;IAOI,6BAAA;EP+nEV;AACF;AG1oEI;EIGI;IAOI,0BAAA;EPooEV;EO3oEM;IAOI,gCAAA;EPuoEV;EO9oEM;IAOI,yBAAA;EP0oEV;EOjpEM;IAOI,wBAAA;EP6oEV;EOppEM;IAOI,yBAAA;EPgpEV;EOvpEM;IAOI,6BAAA;EPmpEV;EO1pEM;IAOI,8BAAA;EPspEV;EO7pEM;IAOI,wBAAA;EPypEV;EOhqEM;IAOI,+BAAA;EP4pEV;EOnqEM;IAOI,wBAAA;EP+pEV;EOtqEM;IAOI,yBAAA;EPkqEV;EOzqEM;IAOI,8BAAA;EPqqEV;EO5qEM;IAOI,iCAAA;EPwqEV;EO/qEM;IAOI,sCAAA;EP2qEV;EOlrEM;IAOI,yCAAA;EP8qEV;EOrrEM;IAOI,uBAAA;EPirEV;EOxrEM;IAOI,uBAAA;EPorEV;EO3rEM;IAOI,yBAAA;EPurEV;EO9rEM;IAOI,yBAAA;EP0rEV;EOjsEM;IAOI,0BAAA;EP6rEV;EOpsEM;IAOI,4BAAA;EPgsEV;EOvsEM;IAOI,kCAAA;EPmsEV;EO1sEM;IAOI,sCAAA;EPssEV;EO7sEM;IAOI,oCAAA;EPysEV;EOhtEM;IAOI,kCAAA;EP4sEV;EOntEM;IAOI,yCAAA;EP+sEV;EOttEM;IAOI,wCAAA;EPktEV;EOztEM;IAOI,wCAAA;EPqtEV;EO5tEM;IAOI,kCAAA;EPwtEV;EO/tEM;IAOI,gCAAA;EP2tEV;EOluEM;IAOI,8BAAA;EP8tEV;EOruEM;IAOI,gCAAA;EPiuEV;EOxuEM;IAOI,+BAAA;EPouEV;EO3uEM;IAOI,oCAAA;EPuuEV;EO9uEM;IAOI,kCAAA;EP0uEV;EOjvEM;IAOI,gCAAA;EP6uEV;EOpvEM;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gFV;EO7gFM;IAOI,+BAAA;EPygFV;EOhhFM;IAOI,8BAAA;EP4gFV;EOnhFM;IAOI,4BAAA;EP+gFV;EOthFM;IAOI,8BAAA;EPkhFV;EOzhFM;IAOI,4BAAA;EPqhFV;EO5hFM;IAOI,2BAAA;EPwhFV;EO/hFM;IAOI,iCAAA;EP2hFV;EOliFM;IAOI,gCAAA;EP8hFV;EOriFM;IAOI,8BAAA;EPiiFV;EOxiFM;IAOI,gCAAA;EPoiFV;EO3iFM;IAOI,8BAAA;EPuiFV;EO9iFM;IAOI,4BAAA;EP0iFV;EOjjFM;IAOI,kCAAA;EP6iFV;EOpjFM;IAOI,iCAAA;EPgjFV;EOvjFM;IAOI,+BAAA;EPmjFV;EO1jFM;IAOI,iCAAA;EPsjFV;EO7jFM;IAOI,+BAAA;EPyjFV;EOhkFM;IAOI,0BAAA;EP4jFV;EOnkFM;IAOI,gCAAA;EP+jFV;EOtkFM;IAOI,+BAAA;EPkkFV;EOzkFM;IAOI,6BAAA;EPqkFV;EO5kFM;IAOI,+BAAA;EPwkFV;EO/kFM;IAOI,6BAAA;EP2kFV;AACF;AGtlFI;EIGI;IAOI,0BAAA;EPglFV;EOvlFM;IAOI,gCAAA;EPmlFV;EO1lFM;IAOI,yBAAA;EPslFV;EO7lFM;IAOI,wBAAA;EPylFV;EOhmFM;IAOI,yBAAA;EP4lFV;EOnmFM;IAOI,6BAAA;EP+lFV;EOtmFM;IAOI,8BAAA;EPkmFV;EOzmFM;IAOI,wBAAA;EPqmFV;EO5mFM;IAOI,+BAAA;EPwmFV;EO/mFM;IAOI,wBAAA;EP2mFV;EOlnFM;IAOI,yBAAA;EP8mFV;EOrnFM;IAOI,8BAAA;EPinFV;EOxnFM;IAOI,iCAAA;EPonFV;EO3nFM;IAOI,sCAAA;EPunFV;EO9nFM;IAOI,yCAAA;EP0nFV;EOjoFM;IAOI,uBAAA;EP6nFV;EOpoFM;IAOI,uBAAA;EPgoFV;EOvoFM;IAOI,yBAAA;EPmoFV;EO1oFM;IAOI,yBAAA;EPsoFV;EO7oFM;IAOI,0BAAA;EPyoFV;EOhpFM;IAOI,4BAAA;EP4oFV;EOnpFM;IAOI,kCAAA;EP+oFV;EOtpFM;IAOI,sCAAA;EPkpFV;EOzpFM;IAOI,oCAAA;EPqpFV;EO5pFM;IAOI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AA;EPgkGV;EOvkGM;IAOI,sCAAA;EPmkGV;EO1kGM;IAOI,yCAAA;EPskGV;EO7kGM;IAOI,uBAAA;EPykGV;EOhlGM;IAOI,uBAAA;EP4kGV;EOnlGM;IAOI,yBAAA;EP+kGV;EOtlGM;IAOI,yBAAA;EPklGV;EOzlGM;IAOI,0BAAA;EPqlGV;EO5lGM;IAOI,4BAAA;EPwlGV;EO/lGM;IAOI,kCAAA;EP2lGV;EOlmGM;IAOI,sCAAA;EP8lGV;EOrmGM;IAOI,oCAAA;EPimGV;EOxmGM;IAOI,kCAAA;EPomGV;EO3mGM;IAOI,yCAAA;EPumGV;EO9mGM;IAOI,wCAAA;EP0mGV;EOjnGM;IAOI,wCAAA;EP6mGV;EOpnGM;IAOI,kCAAA;EPgnGV;EOvnGM;IAOI,gCAAA;EPmnGV;EO1nGM;IAOI,8BAAA;EPsnGV;EO7nGM;IAOI,gCAAA;EPynGV;EOhoGM;IAOI,+BAAA;EP4nGV;EOnoGM;IAOI,oCAAA;EP+nGV;EOtoGM;IAOI,kCAAA;EPkoGV;EOzoGM;IAOI,gCAAA;EPqoGV;EO5oGM;IAOI,uCAAA;EPwoGV;EO/oGM;IAOI,sCAAA;EP2oGV;EOlpGM;IAOI,iCAAA;EP8oGV;EOrpGM;IAOI,2BAAA;EPipGV;EOxpGM;IAOI,iCAAA;EPopGV;EO3pGM;IAOI,+BAAA;EPupGV;EO9pGM;IAOI,6BAAA;EP0pGV;EOjqGM;IAOI,+BAAA;EP6pGV;EOpqGM;IAOI,8BAAA;EPgqGV;EOvqGM;IAOI,oBAAA;EPmqGV;EO1qGM;IAOI,mBAAA;EPsqGV;EO7qGM;IAOI,mBAAA;EPyqGV;EOhrGM;IAOI,mBAAA;EP4qGV;EOnrGM;IAOI,mBAAA;EP+qGV;EOtrGM;IAOI,mBAAA;EPkrGV;EOzrGM;IAOI,mBAAA;EPqrGV;EO5rGM;IAOI,mBAAA;EPwrGV;EO/rGM;IAOI,oBAAA;EP2rGV;EOlsGM;IAOI,0BAAA;EP8rGV;EOrsGM;IAOI,yBAAA;EPisGV;EOxsGM;IAOI,uBAAA;EPosGV;EO3sGM;IAOI,yBAAA;EPusGV;EO9sGM;IAOI,uBAAA;EP0sGV;EOjtGM;IAOI,uBAAA;EP6sGV;EOptGM;IAOI,0BA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Pw+GV;EO/+GM;IAOI,gCAAA;EP2+GV;EOl/GM;IAOI,yBAAA;EP8+GV;EOr/GM;IAOI,wBAAA;EPi/GV;EOx/GM;IAOI,yBAAA;EPo/GV;EO3/GM;IAOI,6BAAA;EPu/GV;EO9/GM;IAOI,8BAAA;EP0/GV;EOjgHM;IAOI,wBAAA;EP6/GV;EOpgHM;IAOI,+BAAA;EPggHV;EOvgHM;IAOI,wBAAA;EPmgHV;EO1gHM;IAOI,yBAAA;EPsgHV;EO7gHM;IAOI,8BAAA;EPygHV;EOhhHM;IAOI,iCAAA;EP4gHV;EOnhHM;IAOI,sCAAA;EP+gHV;EOthHM;IAOI,yCAAA;EPkhHV;EOzhHM;IAOI,uBAAA;EPqhHV;EO5hHM;IAOI,uBAAA;EPwhHV;EO/hHM;IAOI,yBAAA;EP2hHV;EOliHM;IAOI,yBAAA;EP8hHV;EOriHM;IAOI,0BAAA;EPiiHV;EOxiHM;IAOI,4BAAA;EPoiHV;EO3iHM;IAOI,kCAAA;EPuiHV;EO9iHM;IAOI,sCAAA;EP0iHV;EOjjHM;IAOI,oCAAA;EP6iHV;EOpjHM;IAOI,kCAAA;EPgjHV;EOvjHM;IAOI,yCAAA;EPmjHV;EO1jHM;IAOI,wCAAA;EPsjHV;EO7jHM;IAOI,wCAAA;EPyjHV;EOhkHM;IAOI,kCAAA;EP4jHV;EOnkHM;IAOI,gCAAA;EP+jHV;EOtkHM;IAOI,8BAAA;EPkkHV;EOzkHM;IAOI,gCAAA;EPqkHV;EO5kHM;IAOI,+BAAA;EPwkHV;EO/kHM;IAOI,oCAAA;EP2kHV;EOllHM;IAOI,kCAAA;EP8kHV;EOrlHM;IAOI,gCAAA;EPilHV;EOxlHM;IAOI,uCAAA;EPolHV;EO3lHM;IAOI,sCAAA;EPulHV;EO9lHM;IAOI,iCAAA;EP0lHV;EOjmHM;IAOI,2BAAA;EP6lHV;EOpmHM;IAOI,iCAAA;EPgmHV;EOvmHM;IAOI,+BAAA;EPmmHV;EO1mHM;IAOI,6BAAA;EPsmHV;EO7mHM;IAOI,+BAAA;EPymHV;EOhnHM;IAOI,8BAAA;EP4mHV;EOnnHM;IAOI,oBAAA;EP+mHV;EOtnHM;IAOI,mBAAA;EPknHV;EOznHM;IAOI,mBAAA;EPqnHV;EO5nHM;IAOI,mBAAA;E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","file":"bootstrap-grid.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Grid v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-grid.css","../../scss/mixins/_color-mode.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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,yBAAA;ERoyDV;EQ3yDM;IAOI,wBAAA;ERuyDV;EQ9yDM;IAOI,yBAAA;ER0yDV;EQjzDM;IAOI,6BAAA;ER6yDV;EQpzDM;IAOI,8BAAA;ERgzDV;EQvzDM;IAOI,wBAAA;ERmzDV;EQ1zDM;IAOI,+BAAA;ERszDV;EQ7zDM;IAOI,wBAAA;ERyzDV;EQh0DM;IAOI,yBAAA;ER4zDV;EQn0DM;IAOI,8BAAA;ER+zDV;EQt0DM;IAOI,iCAAA;ERk0DV;EQz0DM;IAOI,sCAAA;ERq0DV;EQ50DM;IAOI,yCAAA;ERw0DV;EQ/0DM;IAOI,uBAAA;ER20DV;EQl1DM;IAOI,uBAAA;ER80DV;EQr1DM;IAOI,yBAAA;ERi1DV;EQx1DM;IAOI,yBAAA;ERo1DV;EQ31DM;IAOI,0BAAA;ERu1DV;EQ91DM;IAOI,4BAAA;ER01DV;EQj2DM;IAOI,kCAAA;ER61DV;EQp2DM;IAOI,sCAAA;ERg2DV;EQv2DM;IAOI,oCAAA;ERm2DV;EQ12DM;IAOI,kCAAA;ERs2DV;EQ72DM;IAOI,yCAAA;ERy2DV;EQh3DM;IAOI,wCAAA;ER42DV;EQn3DM;IAOI,wCAAA;ER+2DV;EQt3DM;IAOI,kCAAA;ERk3DV;EQz3DM;IAOI,gCAAA;ERq3DV;EQ53DM;IAOI,8BAAA;ERw3DV;EQ/3DM;IAOI,gCAAA;ER23DV;EQl4DM;IAOI,+BAAA;ER83DV;EQr4DM;IAOI,oCAAA;ERi4DV;EQx4DM;IAOI,kCAAA;ERo4DV;EQ34DM;IAOI,gCAAA;ERu4DV;EQ94DM;IAOI,uCAAA;ER04DV;EQj5DM;IAOI,sCAAA;ER64DV;EQp5DM;IAOI,iCAAA;ERg5DV;EQv5DM;IAOI,2BAAA;ERm5DV;EQ15DM;IAOI,iCAAA;ERs5DV;EQ75DM;IAOI,+BAAA;ERy5DV;EQh6DM;IAOI,6BAAA;ER45DV;EQn6DM;IAOI,+BAAA;ER+5DV;EQt6DM;IAOI,8BAAA;ERk6DV;EQz6DM;IAOI,oBAAA;ERq6DV;EQ56DM;IAOI,mBAAA;ERw6DV;EQ/6DM;IAOI,mBAAA;ER26DV;EQl7DM;IAOI,mBAAA;ER86DV;EQr7DM;IAOI,mBAAA;ERi7DV;EQx7DM;IAOI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EQjtEM;IAOI,+BAAA;ER6sEV;EQptEM;IAOI,iCAAA;ERgtEV;EQvtEM;IAOI,+BAAA;ERmtEV;EQ1tEM;IAOI,0BAAA;ERstEV;EQ7tEM;IAOI,gCAAA;ERytEV;EQhuEM;IAOI,+BAAA;ER4tEV;EQnuEM;IAOI,6BAAA;ER+tEV;EQtuEM;IAOI,+BAAA;ERkuEV;EQzuEM;IAOI,6BAAA;ERquEV;AACF;AIhvEI;EIGI;IAOI,0BAAA;ER0uEV;EQjvEM;IAOI,gCAAA;ER6uEV;EQpvEM;IAOI,yBAAA;ERgvEV;EQvvEM;IAOI,wBAAA;ERmvEV;EQ1vEM;IAOI,yBAAA;ERsvEV;EQ7vEM;IAOI,6BAAA;ERyvEV;EQhwEM;IAOI,8BAAA;ER4vEV;EQnwEM;IAOI,wBAAA;ER+vEV;EQtwEM;IAOI,+BAAA;ERkwEV;EQzwEM;IAOI,wBAAA;ERqwEV;EQ5wEM;IAOI,yBAAA;ERwwEV;EQ/wEM;IAOI,8BAAA;ER2wEV;EQlxEM;IAOI,iCAAA;ER8wEV;EQrxEM;IAOI,sCAAA;ERixEV;EQxxEM;IAOI,yCAAA;ERoxEV;EQ3xEM;IAOI,uBAAA;ERuxEV;EQ9xEM;IAOI,uBAAA;ER0xEV;EQjyEM;IAOI,yBAAA;ER6xEV;EQpyEM;IAOI,yBAAA;ERgyEV;EQvyEM;IAOI,0BAAA;ERmyEV;EQ1yEM;IAOI,4BAAA;ERsyEV;EQ7yEM;IAOI,kCAAA;ERyyEV;EQhzEM;IAOI,sCAAA;ER4yEV;EQnzEM;IAOI,oCAAA;ER+yEV;EQtzEM;IAOI,kCAAA;ERkzEV;EQzzEM;IAOI,yCAAA;ERqzEV;EQ5zEM;IAOI,wCAAA;ERwzEV;EQ/zEM;IAOI,wCAAA;ER2zEV;EQl0EM;IAOI,kCAAA;ER8zEV;EQr0EM;IAOI,gCAAA;ERi0EV;EQx0EM;IAOI,8BAAA;ERo0EV;EQ30EM;IAOI,gCAAA;ERu0EV;EQ90EM;IAOI,+BAAA;ER00EV;EQj1EM;IAOI,oCAAA;ER60EV;EQp1EM;IAOI,kCAAA;ERg1EV;EQv1EM;IAOI,gCAAA;ERm1EV;EQ11EM;IAOI,uCAAA;ERs1EV;EQ71EM;IAOI,sCAAA;ERy1EV;EQh2EM;IAOI,iCA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FM;IAOI,4BAAA;ERqnFV;EQ5nFM;IAOI,8BAAA;ERwnFV;EQ/nFM;IAOI,4BAAA;ER2nFV;EQloFM;IAOI,2BAAA;ER8nFV;EQroFM;IAOI,iCAAA;ERioFV;EQxoFM;IAOI,gCAAA;ERooFV;EQ3oFM;IAOI,8BAAA;ERuoFV;EQ9oFM;IAOI,gCAAA;ER0oFV;EQjpFM;IAOI,8BAAA;ER6oFV;EQppFM;IAOI,4BAAA;ERgpFV;EQvpFM;IAOI,kCAAA;ERmpFV;EQ1pFM;IAOI,iCAAA;ERspFV;EQ7pFM;IAOI,+BAAA;ERypFV;EQhqFM;IAOI,iCAAA;ER4pFV;EQnqFM;IAOI,+BAAA;ER+pFV;EQtqFM;IAOI,0BAAA;ERkqFV;EQzqFM;IAOI,gCAAA;ERqqFV;EQ5qFM;IAOI,+BAAA;ERwqFV;EQ/qFM;IAOI,6BAAA;ER2qFV;EQlrFM;IAOI,+BAAA;ER8qFV;EQrrFM;IAOI,6BAAA;ERirFV;AACF;AI5rFI;EIGI;IAOI,0BAAA;ERsrFV;EQ7rFM;IAOI,gCAAA;ERyrFV;EQhsFM;IAOI,yBAAA;ER4rFV;EQnsFM;IAOI,wBAAA;ER+rFV;EQtsFM;IAOI,yBAAA;ERksFV;EQzsFM;IAOI,6BAAA;ERqsFV;EQ5sFM;IAOI,8BAAA;ERwsFV;EQ/sFM;IAOI,wBAAA;ER2sFV;EQltFM;IAOI,+BAAA;ER8sFV;EQrtFM;IAOI,wBAAA;ERitFV;EQxtFM;IAOI,yBAAA;ERotFV;EQ3tFM;IAOI,8BAAA;ERutFV;EQ9tFM;IAOI,iCAAA;ER0tFV;EQjuFM;IAOI,sCAAA;ER6tFV;EQpuFM;IAOI,yCAAA;ERguFV;EQvuFM;IAOI,uBAAA;ERmuFV;EQ1uFM;IAOI,uBAAA;ERsuFV;EQ7uFM;IAOI,yBAAA;ERyuFV;EQhvFM;IAOI,yBAAA;ER4uFV;EQnvFM;IAOI,0BAAA;ER+uFV;EQtvFM;IAOI,4BAAA;ERkvFV;EQzvFM;IAOI,kCAAA;ERqvFV;EQ5vFM;IAOI,sCAAA;ERwvFV;EQ/vFM;IAOI,oCAAA;ER2vFV;EQlwFM;IAOI,kCAAA;ER8vFV;EQrwFM;IAOI,yCAAA;ERiwFV;EQxwFM;IAOI,wCAAA;E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3lHM;IAOI,wBAAA;ERulHV;EQ9lHM;IAOI,yBAAA;ER0lHV;EQjmHM;IAOI,6BAAA;ER6lHV;EQpmHM;IAOI,8BAAA;ERgmHV;EQvmHM;IAOI,wBAAA;ERmmHV;EQ1mHM;IAOI,+BAAA;ERsmHV;EQ7mHM;IAOI,wBAAA;ERymHV;EQhnHM;IAOI,yBAAA;ER4mHV;EQnnHM;IAOI,8BAAA;ER+mHV;EQtnHM;IAOI,iCAAA;ERknHV;EQznHM;IAOI,sCAAA;ERqnHV;EQ5nHM;IAOI,yCAAA;ERwnHV;EQ/nHM;IAOI,uBAAA;ER2nHV;EQloHM;IAOI,uBAAA;ER8nHV;EQroHM;IAOI,yBAAA;ERioHV;EQxoHM;IAOI,yBAAA;ERooHV;EQ3oHM;IAOI,0BAAA;ERuoHV;EQ9oHM;IAOI,4BAAA;ER0oHV;EQjpHM;IAOI,kCAAA;ER6oHV;EQppHM;IAOI,sCAAA;ERgpHV;EQvpHM;IAOI,oCAAA;ERmpHV;EQ1pHM;IAOI,kCAAA;ERspHV;EQ7pHM;IAOI,yCAAA;ERypHV;EQhqHM;IAOI,wCAAA;ER4pHV;EQnqHM;IAOI,wCAAA;ER+pHV;EQtqHM;IAOI,kCAAA;ERkqHV;EQzqHM;IAOI,gCAAA;ERqqHV;EQ5qHM;IAOI,8BAAA;ERwqHV;EQ/qHM;IAOI,gCAAA;ER2qHV;EQlrHM;IAOI,+BAAA;ER8qHV;EQrrHM;IAOI,oCAAA;ERirHV;EQxrHM;IAOI,kCAAA;ERorHV;EQ3rHM;IAOI,gCAAA;ERurHV;EQ9rHM;IAOI,uCAAA;ER0rHV;EQjsHM;IAOI,sCAAA;ER6rHV;EQpsHM;IAOI,iCAAA;ERgsHV;EQvsHM;IAOI,2BAAA;ERmsHV;EQ1sHM;IAOI,iCAAA;ERssHV;EQ7sHM;IAOI,+BAAA;ERysHV;EQhtHM;IAOI,6BAAA;ER4sHV;EQntHM;IAOI,+BAAA;ER+sHV;EQttHM;IAOI,8BAAA;ERktHV;EQztHM;IAOI,oBAAA;ERqtHV;EQ5tHM;IAOI,mBAAA;ERwtHV;EQ/tHM;IAOI,mBAAA;ER2tHV;EQluHM;IAOI,mBAAA;ER8tHV;EQruHM;IAOI,mBAAA;ERiuHV;EQxuHM;IAOI,mBAAA;ERouHV;EQ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","file":"bootstrap-grid.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n$primary-text: $blue-600 !default;\n$secondary-text: $gray-600 !default;\n$success-text: $green-600 !default;\n$info-text: $cyan-700 !default;\n$warning-text: $yellow-700 !default;\n$danger-text: $red-600 !default;\n$light-text: $gray-600 !default;\n$dark-text: $gray-700 !default;\n\n$primary-bg-subtle: $blue-100 !default;\n$secondary-bg-subtle: $gray-100 !default;\n$success-bg-subtle: $green-100 !default;\n$info-bg-subtle: $cyan-100 !default;\n$warning-bg-subtle: $yellow-100 !default;\n$danger-bg-subtle: $red-100 !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n\n$primary-border-subtle: $blue-200 !default;\n$secondary-border-subtle: $gray-200 !default;\n$success-border-subtle: $green-200 !default;\n$info-border-subtle: $cyan-200 !default;\n$warning-border-subtle: $yellow-200 !default;\n$danger-border-subtle: $red-200 !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-emphasis-color: $black !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba(var(--#{$prefix}body-color-rgb), .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba(var(--#{$prefix}body-color-rgb), .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: var(--#{$prefix}secondary-color) !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}form-control-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default; //$gray-400\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc($input-border-width * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.875em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}success-text),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}success),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}danger-text),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}danger),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{rgba($body-color, .75)}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc($pagination-border-width * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc($popover-border-radius - $popover-border-width) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css
index f026a3fe4..d6c50ce7a 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css
@@ -1,7 +1,6 @@
/*!
- * Bootstrap Grid v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text:#0a58ca;--bs-secondary-text:#6c757d;--bs-success-text:#146c43;--bs-info-text:#087990;--bs-warning-text:#997404;--bs-danger-text:#b02a37;--bs-light-text:#6c757d;--bs-dark-text:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#f8f9fa;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#e9ecef;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);--bs-emphasis-color:#000;--bs-form-control-bg:var(--bs-body-bg);--bs-form-control-disabled-bg:var(--bs-secondary-bg);--bs-highlight-bg:#fff3cd;--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}[data-bs-theme=dark]{--bs-body-color:#adb5bd;--bs-body-color-rgb:173,181,189;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#f8f9fa;--bs-emphasis-color-rgb:248,249,250;--bs-secondary-color:rgba(173, 181, 189, 0.75);--bs-secondary-color-rgb:173,181,189;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(173, 181, 189, 0.5);--bs-tertiary-color-rgb:173,181,189;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-emphasis-color:#fff;--bs-primary-text:#6ea8fe;--bs-secondary-text:#dee2e6;--bs-success-text:#75b798;--bs-info-text:#6edff6;--bs-warning-text:#ffda6a;--bs-danger-text:#ea868f;--bs-light-text:#f8f9fa;--bs-dark-text:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#212529;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#495057;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#055160;--bs-warning-border-subtle:#664d03;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:#fff;--bs-link-color:#6ea8fe;--bs-link-hover-color:#9ec5fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:158,197,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map
index 3a95aa82a..ff0a5e4a6 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_containers.scss","dist/css/bootstrap-grid.css","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","/*!\n * Bootstrap Grid v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","dist/css/bootstrap-grid.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","/*!\n * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css
index 3e1bb2bba..a35343af1 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css
@@ -1,10 +1,10 @@
/*!
- * Bootstrap Grid v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
-:root {
+:root,
+[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
@@ -44,6 +44,30 @@
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
+ --bs-primary-text: #0a58ca;
+ --bs-secondary-text: #6c757d;
+ --bs-success-text: #146c43;
+ --bs-info-text: #087990;
+ --bs-warning-text: #997404;
+ --bs-danger-text: #b02a37;
+ --bs-light-text: #6c757d;
+ --bs-dark-text: #495057;
+ --bs-primary-bg-subtle: #cfe2ff;
+ --bs-secondary-bg-subtle: #f8f9fa;
+ --bs-success-bg-subtle: #d1e7dd;
+ --bs-info-bg-subtle: #cff4fc;
+ --bs-warning-bg-subtle: #fff3cd;
+ --bs-danger-bg-subtle: #f8d7da;
+ --bs-light-bg-subtle: #fcfcfd;
+ --bs-dark-bg-subtle: #ced4da;
+ --bs-primary-border-subtle: #9ec5fe;
+ --bs-secondary-border-subtle: #e9ecef;
+ --bs-success-border-subtle: #a3cfbb;
+ --bs-info-border-subtle: #9eeaf9;
+ --bs-warning-border-subtle: #ffe69c;
+ --bs-danger-border-subtle: #f1aeb5;
+ --bs-light-border-subtle: #e9ecef;
+ --bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
@@ -56,7 +80,25 @@
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
+ --bs-emphasis-color: #000;
+ --bs-emphasis-color-rgb: 0, 0, 0;
+ --bs-secondary-color: rgba(33, 37, 41, 0.75);
+ --bs-secondary-color-rgb: 33, 37, 41;
+ --bs-secondary-bg: #e9ecef;
+ --bs-secondary-bg-rgb: 233, 236, 239;
+ --bs-tertiary-color: rgba(33, 37, 41, 0.5);
+ --bs-tertiary-color-rgb: 33, 37, 41;
+ --bs-tertiary-bg: #f8f9fa;
+ --bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-link-color: #0d6efd;
+ --bs-link-color-rgb: 13, 110, 253;
+ --bs-link-decoration: underline;
+ --bs-link-hover-color: #0a58ca;
+ --bs-link-hover-color-rgb: 10, 88, 202;
+ --bs-code-color: #d63384;
+ --bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
@@ -67,10 +109,70 @@
--bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem;
- --bs-link-color: #0d6efd;
- --bs-link-hover-color: #0a58ca;
- --bs-code-color: #d63384;
+ --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
+ --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-emphasis-color: #000;
+ --bs-form-control-bg: var(--bs-body-bg);
+ --bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd;
+ --bs-breakpoint-xs: 0;
+ --bs-breakpoint-sm: 576px;
+ --bs-breakpoint-md: 768px;
+ --bs-breakpoint-lg: 992px;
+ --bs-breakpoint-xl: 1200px;
+ --bs-breakpoint-xxl: 1400px;
+}
+
+[data-bs-theme=dark] {
+ --bs-body-color: #adb5bd;
+ --bs-body-color-rgb: 173, 181, 189;
+ --bs-body-bg: #212529;
+ --bs-body-bg-rgb: 33, 37, 41;
+ --bs-emphasis-color: #f8f9fa;
+ --bs-emphasis-color-rgb: 248, 249, 250;
+ --bs-secondary-color: rgba(173, 181, 189, 0.75);
+ --bs-secondary-color-rgb: 173, 181, 189;
+ --bs-secondary-bg: #343a40;
+ --bs-secondary-bg-rgb: 52, 58, 64;
+ --bs-tertiary-color: rgba(173, 181, 189, 0.5);
+ --bs-tertiary-color-rgb: 173, 181, 189;
+ --bs-tertiary-bg: #2b3035;
+ --bs-tertiary-bg-rgb: 43, 48, 53;
+ --bs-emphasis-color: #fff;
+ --bs-primary-text: #6ea8fe;
+ --bs-secondary-text: #dee2e6;
+ --bs-success-text: #75b798;
+ --bs-info-text: #6edff6;
+ --bs-warning-text: #ffda6a;
+ --bs-danger-text: #ea868f;
+ --bs-light-text: #f8f9fa;
+ --bs-dark-text: #dee2e6;
+ --bs-primary-bg-subtle: #031633;
+ --bs-secondary-bg-subtle: #212529;
+ --bs-success-bg-subtle: #051b11;
+ --bs-info-bg-subtle: #032830;
+ --bs-warning-bg-subtle: #332701;
+ --bs-danger-bg-subtle: #2c0b0e;
+ --bs-light-bg-subtle: #343a40;
+ --bs-dark-bg-subtle: #1a1d20;
+ --bs-primary-border-subtle: #084298;
+ --bs-secondary-border-subtle: #495057;
+ --bs-success-border-subtle: #0f5132;
+ --bs-info-border-subtle: #055160;
+ --bs-warning-border-subtle: #664d03;
+ --bs-danger-border-subtle: #842029;
+ --bs-light-border-subtle: #495057;
+ --bs-dark-border-subtle: #343a40;
+ --bs-heading-color: #fff;
+ --bs-link-color: #6ea8fe;
+ --bs-link-hover-color: #9ec5fe;
+ --bs-link-color-rgb: 110, 168, 254;
+ --bs-link-hover-color-rgb: 158, 197, 254;
+ --bs-code-color: #e685b5;
+ --bs-border-color: #495057;
+ --bs-border-color-translucent: rgba(255, 255, 255, 0.15);
}
.container,
@@ -462,51 +564,51 @@
margin-right: 91.66666667%;
}
.g-sm-0,
-.gx-sm-0 {
+ .gx-sm-0 {
--bs-gutter-x: 0;
}
.g-sm-0,
-.gy-sm-0 {
+ .gy-sm-0 {
--bs-gutter-y: 0;
}
.g-sm-1,
-.gx-sm-1 {
+ .gx-sm-1 {
--bs-gutter-x: 0.25rem;
}
.g-sm-1,
-.gy-sm-1 {
+ .gy-sm-1 {
--bs-gutter-y: 0.25rem;
}
.g-sm-2,
-.gx-sm-2 {
+ .gx-sm-2 {
--bs-gutter-x: 0.5rem;
}
.g-sm-2,
-.gy-sm-2 {
+ .gy-sm-2 {
--bs-gutter-y: 0.5rem;
}
.g-sm-3,
-.gx-sm-3 {
+ .gx-sm-3 {
--bs-gutter-x: 1rem;
}
.g-sm-3,
-.gy-sm-3 {
+ .gy-sm-3 {
--bs-gutter-y: 1rem;
}
.g-sm-4,
-.gx-sm-4 {
+ .gx-sm-4 {
--bs-gutter-x: 1.5rem;
}
.g-sm-4,
-.gy-sm-4 {
+ .gy-sm-4 {
--bs-gutter-y: 1.5rem;
}
.g-sm-5,
-.gx-sm-5 {
+ .gx-sm-5 {
--bs-gutter-x: 3rem;
}
.g-sm-5,
-.gy-sm-5 {
+ .gy-sm-5 {
--bs-gutter-y: 3rem;
}
}
@@ -631,51 +733,51 @@
margin-right: 91.66666667%;
}
.g-md-0,
-.gx-md-0 {
+ .gx-md-0 {
--bs-gutter-x: 0;
}
.g-md-0,
-.gy-md-0 {
+ .gy-md-0 {
--bs-gutter-y: 0;
}
.g-md-1,
-.gx-md-1 {
+ .gx-md-1 {
--bs-gutter-x: 0.25rem;
}
.g-md-1,
-.gy-md-1 {
+ .gy-md-1 {
--bs-gutter-y: 0.25rem;
}
.g-md-2,
-.gx-md-2 {
+ .gx-md-2 {
--bs-gutter-x: 0.5rem;
}
.g-md-2,
-.gy-md-2 {
+ .gy-md-2 {
--bs-gutter-y: 0.5rem;
}
.g-md-3,
-.gx-md-3 {
+ .gx-md-3 {
--bs-gutter-x: 1rem;
}
.g-md-3,
-.gy-md-3 {
+ .gy-md-3 {
--bs-gutter-y: 1rem;
}
.g-md-4,
-.gx-md-4 {
+ .gx-md-4 {
--bs-gutter-x: 1.5rem;
}
.g-md-4,
-.gy-md-4 {
+ .gy-md-4 {
--bs-gutter-y: 1.5rem;
}
.g-md-5,
-.gx-md-5 {
+ .gx-md-5 {
--bs-gutter-x: 3rem;
}
.g-md-5,
-.gy-md-5 {
+ .gy-md-5 {
--bs-gutter-y: 3rem;
}
}
@@ -800,51 +902,51 @@
margin-right: 91.66666667%;
}
.g-lg-0,
-.gx-lg-0 {
+ .gx-lg-0 {
--bs-gutter-x: 0;
}
.g-lg-0,
-.gy-lg-0 {
+ .gy-lg-0 {
--bs-gutter-y: 0;
}
.g-lg-1,
-.gx-lg-1 {
+ .gx-lg-1 {
--bs-gutter-x: 0.25rem;
}
.g-lg-1,
-.gy-lg-1 {
+ .gy-lg-1 {
--bs-gutter-y: 0.25rem;
}
.g-lg-2,
-.gx-lg-2 {
+ .gx-lg-2 {
--bs-gutter-x: 0.5rem;
}
.g-lg-2,
-.gy-lg-2 {
+ .gy-lg-2 {
--bs-gutter-y: 0.5rem;
}
.g-lg-3,
-.gx-lg-3 {
+ .gx-lg-3 {
--bs-gutter-x: 1rem;
}
.g-lg-3,
-.gy-lg-3 {
+ .gy-lg-3 {
--bs-gutter-y: 1rem;
}
.g-lg-4,
-.gx-lg-4 {
+ .gx-lg-4 {
--bs-gutter-x: 1.5rem;
}
.g-lg-4,
-.gy-lg-4 {
+ .gy-lg-4 {
--bs-gutter-y: 1.5rem;
}
.g-lg-5,
-.gx-lg-5 {
+ .gx-lg-5 {
--bs-gutter-x: 3rem;
}
.g-lg-5,
-.gy-lg-5 {
+ .gy-lg-5 {
--bs-gutter-y: 3rem;
}
}
@@ -969,51 +1071,51 @@
margin-right: 91.66666667%;
}
.g-xl-0,
-.gx-xl-0 {
+ .gx-xl-0 {
--bs-gutter-x: 0;
}
.g-xl-0,
-.gy-xl-0 {
+ .gy-xl-0 {
--bs-gutter-y: 0;
}
.g-xl-1,
-.gx-xl-1 {
+ .gx-xl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xl-1,
-.gy-xl-1 {
+ .gy-xl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xl-2,
-.gx-xl-2 {
+ .gx-xl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xl-2,
-.gy-xl-2 {
+ .gy-xl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xl-3,
-.gx-xl-3 {
+ .gx-xl-3 {
--bs-gutter-x: 1rem;
}
.g-xl-3,
-.gy-xl-3 {
+ .gy-xl-3 {
--bs-gutter-y: 1rem;
}
.g-xl-4,
-.gx-xl-4 {
+ .gx-xl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xl-4,
-.gy-xl-4 {
+ .gy-xl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xl-5,
-.gx-xl-5 {
+ .gx-xl-5 {
--bs-gutter-x: 3rem;
}
.g-xl-5,
-.gy-xl-5 {
+ .gy-xl-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1138,51 +1240,51 @@
margin-right: 91.66666667%;
}
.g-xxl-0,
-.gx-xxl-0 {
+ .gx-xxl-0 {
--bs-gutter-x: 0;
}
.g-xxl-0,
-.gy-xxl-0 {
+ .gy-xxl-0 {
--bs-gutter-y: 0;
}
.g-xxl-1,
-.gx-xxl-1 {
+ .gx-xxl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xxl-1,
-.gy-xxl-1 {
+ .gy-xxl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xxl-2,
-.gx-xxl-2 {
+ .gx-xxl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xxl-2,
-.gy-xxl-2 {
+ .gy-xxl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xxl-3,
-.gx-xxl-3 {
+ .gx-xxl-3 {
--bs-gutter-x: 1rem;
}
.g-xxl-3,
-.gy-xxl-3 {
+ .gy-xxl-3 {
--bs-gutter-y: 1rem;
}
.g-xxl-4,
-.gx-xxl-4 {
+ .gx-xxl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xxl-4,
-.gy-xxl-4 {
+ .gy-xxl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xxl-5,
-.gx-xxl-5 {
+ .gx-xxl-5 {
--bs-gutter-x: 3rem;
}
.g-xxl-5,
-.gy-xxl-5 {
+ .gy-xxl-5 {
--bs-gutter-y: 3rem;
}
}
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css.map
index cd15cfc2f..66b21178a 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-grid.css","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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IGI;IAOI,0BAAA;EPwrDV;EO/rDM;IAOI,gCAAA;EP2rDV;EOlsDM;IAOI,yBAAA;EP8rDV;EOrsDM;IAOI,wBAAA;EPisDV;EOxsDM;IAOI,yBAAA;EPosDV;EO3sDM;IAOI,6BAAA;EPusDV;EO9sDM;IAOI,8BAAA;EP0sDV;EOjtDM;IAOI,wBAAA;EP6sDV;EOptDM;IAOI,+BAAA;EPgtDV;EOvtDM;IAOI,wBAAA;EPmtDV;EO1tDM;IAOI,yBAAA;EPstDV;EO7tDM;IAOI,8BAAA;EPytDV;EOhuDM;IAOI,iCAAA;EP4tDV;EOnuDM;IAOI,sCAAA;EP+tDV;EOtuDM;IAOI,yCAAA;EPkuDV;EOzuDM;IAOI,uBAAA;EPquDV;EO5uDM;IAOI,uBAAA;EPwuDV;EO/uDM;IAOI,yBAAA;EP2uDV;EOlvDM;IAOI,yBAAA;EP8uDV;EOrvDM;IAOI,0BAAA;EPivDV;EOxvDM;IAOI,4BAAA;EPovDV;EO3vDM;IAOI,kCAAA;EPuvDV;EO9vDM;IAOI,sCAAA;EP0vDV;EOjwDM;IAOI,oCAAA;EP6vDV;EOpwDM;IAOI,kCAAA;EPgwDV;EOvwDM;IAOI,yCAAA;EPmwDV;EO1wDM;IAOI,wCAAA;EPswDV;EO7wDM;IAOI,wCAAA;EPywDV;EOhxDM;IAOI,kCAAA;EP4wDV;EOnxDM;IAOI,gCAAA;EP+wDV;EOtxDM;IAOI,8BAAA;EPkxDV;EOzxDM;IAOI,gCAAA;EPqxDV;EO5xDM;IAOI,+BAAA;EPwxDV;EO/xDM;IAOI,oCAAA;EP2xDV;EOlyDM;IAOI,kCAAA;EP8xDV;EOryDM;IAOI,gCAAA;EPiyDV;EOxyDM;IAOI,uCAAA;EPoyDV;EO3yDM;IAOI,sCAAA;EPuyDV;EO9yDM;IAOI,iCAAA;EP0yDV;EOjzDM;IAOI,2BAAA;EP6yDV;EOpzDM;IAOI,iCAAA;EPgzDV;EOvzDM;IAOI,+BAAA;EPmzDV;EO1zDM;IAOI,6BAAA;EPszDV;EO7zDM;IAOI,+BAAA;EPyzDV;EOh0DM;IAOI,8BAAA;EP4zDV;EOn0DM;IAOI,oBAAA;EP+zDV;EOt0DM;IAOI,mBAAA;EPk0DV;EOz0DM;IAOI,mBAAA;EPq0DV;EO5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;EP8lEV;EOrmEM;IAOI,kCAAA;EPimEV;EOxmEM;IAOI,iCAAA;EPomEV;EO3mEM;IAOI,+BAAA;EPumEV;EO9mEM;IAOI,iCAAA;EP0mEV;EOjnEM;IAOI,+BAAA;EP6mEV;EOpnEM;IAOI,2BAAA;EPgnEV;EOvnEM;IAOI,iCAAA;EPmnEV;EO1nEM;IAOI,gCAAA;EPsnEV;EO7nEM;IAOI,8BAAA;EPynEV;EOhoEM;IAOI,gCAAA;EP4nEV;EOnoEM;IAOI,8BAAA;EP+nEV;AACF;AG1oEI;EIGI;IAOI,0BAAA;EPooEV;EO3oEM;IAOI,gCAAA;EPuoEV;EO9oEM;IAOI,yBAAA;EP0oEV;EOjpEM;IAOI,wBAAA;EP6oEV;EOppEM;IAOI,yBAAA;EPgpEV;EOvpEM;IAOI,6BAAA;EPmpEV;EO1pEM;IAOI,8BAAA;EPspEV;EO7pEM;IAOI,wBAAA;EPypEV;EOhqEM;IAOI,+BAAA;EP4pEV;EOnqEM;IAOI,wBAAA;EP+pEV;EOtqEM;IAOI,yBAAA;EPkqEV;EOzqEM;IAOI,8BAAA;EPqqEV;EO5qEM;IAOI,iCAAA;EPwqEV;EO/qEM;IAOI,sCAAA;EP2qEV;EOlrEM;IAOI,yCAAA;EP8qEV;EOrrEM;IAOI,uBAAA;EPirEV;EOxrEM;IAOI,uBAAA;EPorEV;EO3rEM;IAOI,yBAAA;EPurEV;EO9rEM;IAOI,yBAAA;EP0rEV;EOjsEM;IAOI,0BAAA;EP6rEV;EOpsEM;IAOI,4BAAA;EPgsEV;EOvsEM;IAOI,kCAAA;EPmsEV;EO1sEM;IAOI,sCAAA;EPssEV;EO7sEM;IAOI,oCAAA;EPysEV;EOhtEM;IAOI,kCAAA;EP4sEV;EOntEM;IAOI,yCAAA;EP+sEV;EOttEM;IAOI,wCAAA;EPktEV;EOztEM;IAOI,wCAAA;EPqtEV;EO5tEM;IAOI,kCAAA;EPwtEV;EO/tEM;IAOI,gCAAA;EP2tEV;EOluEM;IAOI,8BAAA;EP8tEV;EOruEM;IAOI,gCAAA;EPiuEV;EOxuEM;IAOI,+BAAA;EPouEV;EO3uEM;IAOI,oCAAA;EPuuEV;EO9uEM;IAOI,kCAAA;EP0uEV;EOjvEM;IAOI,gCAAA;EP6uEV;EOpvEM;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gFV;EO7gFM;IAOI,+BAAA;EPygFV;EOhhFM;IAOI,8BAAA;EP4gFV;EOnhFM;IAOI,4BAAA;EP+gFV;EOthFM;IAOI,8BAAA;EPkhFV;EOzhFM;IAOI,4BAAA;EPqhFV;EO5hFM;IAOI,0BAAA;EPwhFV;EO/hFM;IAOI,gCAAA;EP2hFV;EOliFM;IAOI,+BAAA;EP8hFV;EOriFM;IAOI,6BAAA;EPiiFV;EOxiFM;IAOI,+BAAA;EPoiFV;EO3iFM;IAOI,6BAAA;EPuiFV;EO9iFM;IAOI,4BAAA;EP0iFV;EOjjFM;IAOI,kCAAA;EP6iFV;EOpjFM;IAOI,iCAAA;EPgjFV;EOvjFM;IAOI,+BAAA;EPmjFV;EO1jFM;IAOI,iCAAA;EPsjFV;EO7jFM;IAOI,+BAAA;EPyjFV;EOhkFM;IAOI,2BAAA;EP4jFV;EOnkFM;IAOI,iCAAA;EP+jFV;EOtkFM;IAOI,gCAAA;EPkkFV;EOzkFM;IAOI,8BAAA;EPqkFV;EO5kFM;IAOI,gCAAA;EPwkFV;EO/kFM;IAOI,8BAAA;EP2kFV;AACF;AGtlFI;EIGI;IAOI,0BAAA;EPglFV;EOvlFM;IAOI,gCAAA;EPmlFV;EO1lFM;IAOI,yBAAA;EPslFV;EO7lFM;IAOI,wBAAA;EPylFV;EOhmFM;IAOI,yBAAA;EP4lFV;EOnmFM;IAOI,6BAAA;EP+lFV;EOtmFM;IAOI,8BAAA;EPkmFV;EOzmFM;IAOI,wBAAA;EPqmFV;EO5mFM;IAOI,+BAAA;EPwmFV;EO/mFM;IAOI,wBAAA;EP2mFV;EOlnFM;IAOI,yBAAA;EP8mFV;EOrnFM;IAOI,8BAAA;EPinFV;EOxnFM;IAOI,iCAAA;EPonFV;EO3nFM;IAOI,sCAAA;EPunFV;EO9nFM;IAOI,yCAAA;EP0nFV;EOjoFM;IAOI,uBAAA;EP6nFV;EOpoFM;IAOI,uBAAA;EPgoFV;EOvoFM;IAOI,yBAAA;EPmoFV;EO1oFM;IAOI,yBAAA;EPsoFV;EO7oFM;IAOI,0BAAA;EPyoFV;EOhpFM;IAOI,4BAAA;EP4oFV;EOnpFM;IAOI,kCAAA;EP+oFV;EOtpFM;IAOI,sCAAA;EPkpFV;EOzpFM;IAOI,oCAAA;EPqpFV;EO5pFM;IAOI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AA;EPgkGV;EOvkGM;IAOI,sCAAA;EPmkGV;EO1kGM;IAOI,yCAAA;EPskGV;EO7kGM;IAOI,uBAAA;EPykGV;EOhlGM;IAOI,uBAAA;EP4kGV;EOnlGM;IAOI,yBAAA;EP+kGV;EOtlGM;IAOI,yBAAA;EPklGV;EOzlGM;IAOI,0BAAA;EPqlGV;EO5lGM;IAOI,4BAAA;EPwlGV;EO/lGM;IAOI,kCAAA;EP2lGV;EOlmGM;IAOI,sCAAA;EP8lGV;EOrmGM;IAOI,oCAAA;EPimGV;EOxmGM;IAOI,kCAAA;EPomGV;EO3mGM;IAOI,yCAAA;EPumGV;EO9mGM;IAOI,wCAAA;EP0mGV;EOjnGM;IAOI,wCAAA;EP6mGV;EOpnGM;IAOI,kCAAA;EPgnGV;EOvnGM;IAOI,gCAAA;EPmnGV;EO1nGM;IAOI,8BAAA;EPsnGV;EO7nGM;IAOI,gCAAA;EPynGV;EOhoGM;IAOI,+BAAA;EP4nGV;EOnoGM;IAOI,oCAAA;EP+nGV;EOtoGM;IAOI,kCAAA;EPkoGV;EOzoGM;IAOI,gCAAA;EPqoGV;EO5oGM;IAOI,uCAAA;EPwoGV;EO/oGM;IAOI,sCAAA;EP2oGV;EOlpGM;IAOI,iCAAA;EP8oGV;EOrpGM;IAOI,2BAAA;EPipGV;EOxpGM;IAOI,iCAAA;EPopGV;EO3pGM;IAOI,+BAAA;EPupGV;EO9pGM;IAOI,6BAAA;EP0pGV;EOjqGM;IAOI,+BAAA;EP6pGV;EOpqGM;IAOI,8BAAA;EPgqGV;EOvqGM;IAOI,oBAAA;EPmqGV;EO1qGM;IAOI,mBAAA;EPsqGV;EO7qGM;IAOI,mBAAA;EPyqGV;EOhrGM;IAOI,mBAAA;EP4qGV;EOnrGM;IAOI,mBAAA;EP+qGV;EOtrGM;IAOI,mBAAA;EPkrGV;EOzrGM;IAOI,mBAAA;EPqrGV;EO5rGM;IAOI,mBAAA;EPwrGV;EO/rGM;IAOI,oBAAA;EP2rGV;EOlsGM;IAOI,0BAAA;EP8rGV;EOrsGM;IAOI,yBAAA;EPisGV;EOxsGM;IAOI,uBAAA;EPosGV;EO3sGM;IAOI,yBAAA;EPusGV;EO9sGM;IAOI,uBAAA;EP0sGV;EOjtGM;IAOI,uBAAA;EP6sGV;EOptGM;IAOI,yBAAA;IAAA,0BAAA;EPitGV;EOxtGM;IAOI,+BAAA;IAAA,gCAAA;EPqtGV;EO5tGM;IAOI,8BAAA;IAAA,+BAAA;EPytGV;EOhuGM;IAOI,4BAAA;IAAA,6BAAA;EP6tGV;EOpuGM;IAOI,8BAAA;IAAA,+BAAA;EPiuGV;EOxuGM;IAOI,4BAAA;IAAA,6BAAA;EPquGV;EO5uGM;IAOI,4BAAA;IAAA,6BAAA;EPyuGV;EOhvGM;IAOI,wBAAA;IAAA,2BAAA;EP6uGV;EOpvGM;IAOI,8BAAA;IAAA,iCAAA;EPivGV;EOxvGM;IAOI,6BAAA;IAAA,gCAAA;EPqvGV;EO5vGM;IAOI,2BAAA;IAAA,8BAAA;EPyvGV;EOhwGM;IAOI,6BAAA;IAAA,gCAAA;EP6vGV;EOpwGM;IAOI,2BAAA;IAAA,8BAAA;EPiwGV;EOxwGM;IAOI,2BAAA;IAAA,8BAAA;EPqwGV;EO5wGM;IAOI,wBAAA;EPwwGV;EO/wGM;IAOI,8BAAA;EP2wGV;EOlxGM;IAOI,6BAAA;EP8wGV;EOrxGM;IAOI,2BAAA;EPixGV;EOxxGM;IAOI,6BAAA;EPoxGV;EO3xGM;IAOI,2BAAA;EPuxGV;EO9xGM;IAOI,2BAAA;EP0xGV;EOjyGM;IAOI,yBAAA;EP6xGV;EOpyGM;IAOI,+BAAA;EPgyGV;EOvyGM;IAOI,8BAAA;EPmyGV;EO1yGM;IAOI,4BAAA;EPsyGV;EO7yGM;IAOI,8BAAA;EPyyGV;EOhzGM;IAOI,4BAAA;EP4yGV;EOnzGM;IAOI,4BAAA;EP+yGV;EOtzGM;IAOI,2BAAA;EPkzGV;EOzzGM;IAOI,iCAAA;EPqzGV;EO5zGM;IAOI,gCAAA;EPwzGV;EO/zGM;IAOI,8BAAA;EP2zGV;EOl0GM;IAOI,gCAAA;EP8zGV;EOr0GM;IAOI,8BAAA;EPi0GV;EOx0GM;IAOI,8BAAA;EPo0GV;EO30GM;IAOI,0BAAA;EPu0GV;EO90GM;IAOI,gCAAA;EP00GV;EOj1GM;IAOI,+BAAA;EP60GV;EOp1GM;IAOI,6BAAA;EPg1GV;EOv1GM;IAOI,+BAAA;EPm1GV;EO11GM;IAOI,6BAAA;EPs1GV;EO71GM;IAOI,6BAAA;EPy1GV;EOh2GM;IAOI,qBAAA;EP41GV;EOn2GM;IAOI,2BAAA;EP+1GV;EOt2GM;IAOI,0BAAA;EPk2GV;EOz2GM;IAOI,wBAAA;EPq2GV;EO52GM;IAOI,0BAAA;EPw2GV;EO/2GM;IAOI,wBAAA;EP22GV;EOl3GM;IAOI,0BAAA;IAAA,2BAAA;EP+2GV;EOt3GM;IAOI,gCAAA;IAAA,iCAAA;EPm3GV;EO13GM;IAOI,+BAAA;IAAA,gCAAA;EPu3GV;EO93GM;IAOI,6BAAA;IAAA,8BAAA;EP23GV;EOl4GM;IAOI,+BAAA;IAAA,gCAAA;EP+3GV;EOt4GM;IAOI,6BAAA;IAAA,8BAAA;EPm4GV;EO14GM;IAOI,yBAAA;IAAA,4BAAA;EPu4GV;EO94GM;IAOI,+BAAA;IAAA,kCAAA;EP24GV;EOl5GM;IAOI,8BAAA;IAAA,iCAAA;EP+4GV;EOt5GM;IAOI,4BAAA;IAAA,+BAAA;EPm5GV;EO15GM;IAOI,8BAAA;IAAA,iCAAA;EPu5GV;EO95GM;IAOI,4BAAA;IAAA,+BAAA;EP25GV;EOl6GM;IAOI,yBAAA;EP85GV;EOr6GM;IAOI,+BAAA;EPi6GV;EOx6GM;IAOI,8BAAA;EPo6GV;EO36GM;IAOI,4BAAA;EPu6GV;EO96GM;IAOI,8BAAA;EP06GV;EOj7GM;IAOI,4BAAA;EP66GV;EOp7GM;IAOI,0BAAA;EPg7GV;EOv7GM;IAOI,gCAAA;EPm7GV;EO17GM;IAOI,+BAAA;EPs7GV;EO77GM;IAOI,6BAAA;EPy7GV;EOh8GM;IAOI,+BAAA;EP47GV;EOn8GM;IAOI,6BAAA;EP+7GV;EOt8GM;IAOI,4BAAA;EPk8GV;EOz8GM;IAOI,kCAAA;EPq8GV;EO58GM;IAOI,iCAAA;EPw8GV;EO/8GM;IAOI,+BAAA;EP28GV;EOl9GM;IAOI,iCAAA;EP88GV;EOr9GM;IAOI,+BAAA;EPi9GV;EOx9GM;IAOI,2BAAA;EPo9GV;EO39GM;IAOI,iCAAA;EPu9GV;EO99GM;IAOI,gCAAA;EP09GV;EOj+GM;IAOI,8BAAA;EP69GV;EOp+GM;IAOI,gCAAA;EPg+GV;EOv+GM;IAOI,8BAAA;EPm+GV;AACF;AG9+GI;EIGI;IAOI,0BAAA;EPw+GV;EO/+GM;IAOI,gCAAA;EP2+GV;EOl/GM;IAOI,yBAAA;EP8+GV;EOr/GM;IAOI,wBAAA;EPi/GV;EOx/GM;IAOI,yBAAA;EPo/GV;EO3/GM;IAOI,6BAAA;EPu/GV;EO9/GM;IAOI,8BAAA;EP0/GV;EOjgHM;IAOI,wBAAA;EP6/GV;EOpgHM;IAOI,+BAAA;EPggHV;EOvgHM;IAOI,wBAAA;EPmgHV;EO1gHM;IAOI,yBAAA;EPsgHV;EO7gHM;IAOI,8BAAA;EPygHV;EOhhHM;IAOI,iCAAA;EP4gHV;EOnhHM;IAOI,sCAAA;EP+gHV;EOthHM;IAOI,yCAAA;EPkhHV;EOzhHM;IAOI,uBAAA;EPqhHV;EO5hHM;IAOI,uBAAA;EPwhHV;EO/hHM;IAOI,yBAAA;EP2hHV;EOliHM;IAOI,yBAAA;EP8hHV;EOriHM;IAOI,0BAAA;EPiiHV;EOxiHM;IAOI,4BAAA;EPoiHV;EO3iHM;IAOI,kCAAA;EPuiHV;EO9iHM;IAOI,sCAAA;EP0iHV;EOjjHM;IAOI,oCAAA;EP6iHV;EOpjHM;IAOI,kCAAA;EPgjHV;EOvjHM;IAOI,yCAAA;EPmjHV;EO1jHM;IAOI,wCAAA;EPsjHV;EO7jHM;IAOI,wCAAA;EPyjHV;EOhkHM;IAOI,kCAAA;EP4jHV;EOnkHM;IAOI,gCAAA;EP+jHV;EOtkHM;IAOI,8BAAA;EPkkHV;EOzkHM;IAOI,gCAAA;EPqkHV;EO5kHM;IAOI,+BAAA;EPwkHV;EO/kHM;IAOI,oCAAA;EP2kHV;EOllHM;IAOI,kCAAA;EP8kHV;EOrlHM;IAOI,gCAAA;EPilHV;EOxlHM;IAOI,uCAAA;EPolHV;EO3lHM;IAOI,sCAAA;EPulHV;EO9lHM;IAOI,iCAAA;EP0lHV;EOjmHM;IAOI,2BAAA;EP6lHV;EOpmHM;IAOI,iCAAA;EPgmHV;EOvmHM;IAOI,+BAAA;EPmmHV;EO1mHM;IAOI,6BAAA;EPsmHV;EO7mHM;IAOI,+BAAA;EPymHV;EOhnHM;IAOI,8BAAA;EP4mHV;EOnnHM;IAOI,oBAAA;EP+mHV;EOtnHM;IAOI,mBAAA;EPknHV;EOznHM;IAOI,mBAAA;EPqnHV;EO5nHM;IAOI,mBAAA;E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","file":"bootstrap-grid.rtl.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Grid v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-grid.css","../../scss/mixins/_color-mode.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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,yBAAA;ERoyDV;EQ3yDM;IAOI,wBAAA;ERuyDV;EQ9yDM;IAOI,yBAAA;ER0yDV;EQjzDM;IAOI,6BAAA;ER6yDV;EQpzDM;IAOI,8BAAA;ERgzDV;EQvzDM;IAOI,wBAAA;ERmzDV;EQ1zDM;IAOI,+BAAA;ERszDV;EQ7zDM;IAOI,wBAAA;ERyzDV;EQh0DM;IAOI,yBAAA;ER4zDV;EQn0DM;IAOI,8BAAA;ER+zDV;EQt0DM;IAOI,iCAAA;ERk0DV;EQz0DM;IAOI,sCAAA;ERq0DV;EQ50DM;IAOI,yCAAA;ERw0DV;EQ/0DM;IAOI,uBAAA;ER20DV;EQl1DM;IAOI,uBAAA;ER80DV;EQr1DM;IAOI,yBAAA;ERi1DV;EQx1DM;IAOI,yBAAA;ERo1DV;EQ31DM;IAOI,0BAAA;ERu1DV;EQ91DM;IAOI,4BAAA;ER01DV;EQj2DM;IAOI,kCAAA;ER61DV;EQp2DM;IAOI,sCAAA;ERg2DV;EQv2DM;IAOI,oCAAA;ERm2DV;EQ12DM;IAOI,kCAAA;ERs2DV;EQ72DM;IAOI,yCAAA;ERy2DV;EQh3DM;IAOI,wCAAA;ER42DV;EQn3DM;IAOI,wCAAA;ER+2DV;EQt3DM;IAOI,kCAAA;ERk3DV;EQz3DM;IAOI,gCAAA;ERq3DV;EQ53DM;IAOI,8BAAA;ERw3DV;EQ/3DM;IAOI,gCAAA;ER23DV;EQl4DM;IAOI,+BAAA;ER83DV;EQr4DM;IAOI,oCAAA;ERi4DV;EQx4DM;IAOI,kCAAA;ERo4DV;EQ34DM;IAOI,gCAAA;ERu4DV;EQ94DM;IAOI,uCAAA;ER04DV;EQj5DM;IAOI,sCAAA;ER64DV;EQp5DM;IAOI,iCAAA;ERg5DV;EQv5DM;IAOI,2BAAA;ERm5DV;EQ15DM;IAOI,iCAAA;ERs5DV;EQ75DM;IAOI,+BAAA;ERy5DV;EQh6DM;IAOI,6BAAA;ER45DV;EQn6DM;IAOI,+BAAA;ER+5DV;EQt6DM;IAOI,8BAAA;ERk6DV;EQz6DM;IAOI,oBAAA;ERq6DV;EQ56DM;IAOI,mBAAA;ERw6DV;EQ/6DM;IAOI,mBAAA;ER26DV;EQl7DM;IAOI,mBAAA;ER86DV;EQr7DM;IAOI,mBAAA;ERi7DV;EQx7DM;IAOI,mBAAA;ERo7DV;EQ37DM;IAOI,mBAAA;ERu7DV;EQ97DM;IAOI,mBAAA;ER07DV;EQj8DM;IAOI,oBAAA;ER67DV;EQp8DM;IAOI,0BAAA;ERg8DV;EQv8DM;IAOI,yBAAA;ERm8DV;EQ18DM;IAOI,uBAAA;ERs8DV;EQ78DM;IAOI,yBAAA;ERy8DV;EQh9DM;IAOI,uBAAA;ER48DV;EQn9DM;IAOI,uBAAA;ER+8DV;EQt9DM;IAOI,yBAAA;IAAA,0BAAA;ERm9DV;EQ19DM;IAOI,+BAAA;IAAA,gCAAA;ERu9DV;EQ99DM;IAOI,8BAAA;IAAA,+BAAA;ER29DV;EQl+DM;IAOI,4BAAA;IAAA,6BAAA;ER+9DV;EQt+DM;IAOI,8BAAA;IAAA,+BAAA;ERm+DV;EQ1+DM;IAOI,4BAAA;IAAA,6BAAA;ERu+DV;EQ9+DM;IAOI,4BAAA;IAAA,6BAAA;ER2+DV;EQl/DM;IAOI,wBAAA;IAAA,2BAAA;ER++DV;EQt/DM;IAOI,8BAAA;IAAA,iCAAA;ERm/DV;EQ1/DM;IAOI,6BAAA;IAAA,gCAAA;ERu/DV;EQ9/DM;IAOI,2BAAA;IAAA,8BAAA;ER2/DV;EQlgEM;IAOI,6BAAA;IAAA,gCAAA;ER+/DV;EQtgEM;IAOI,2BAAA;IAAA,8BAAA;ERmgEV;EQ1gEM;IAOI,2BAAA;IAAA,8BAAA;ERugEV;EQ9gEM;IAOI,wBAAA;ER0gEV;EQjhEM;IAOI,8BAAA;ER6gEV;EQphEM;IAOI,6BAAA;ERghEV;EQvhEM;IAOI,2BAAA;ERmhEV;EQ1hEM;IAOI,6BAAA;ERshEV;EQ7hEM;IAOI,2BAAA;ERyhEV;EQhiEM;IAOI,2BAAA;ER4hEV;EQniEM;IAOI,yBAAA;ER+hEV;EQtiEM;IAOI,+BAAA;ERkiEV;EQziEM;IAOI,8BAAA;ERqiEV;EQ5iEM;IAOI,4BAAA;ERwiEV;EQ/iEM;IAOI,8BAAA;ER2iEV;EQljEM;IAOI,4BAAA;ER8iEV;EQrjEM;IAOI,4BAAA;ERijEV;EQxjEM;IAOI,2BAAA;ERojEV;EQ3jEM;IAOI,iCAAA;ERujEV;EQ9jEM;IAOI,gCAAA;ER0jEV;EQjkEM;IAOI,8BAAA;ER6jEV;EQpkEM;IAOI,gCAAA;ERgkEV;EQvkEM;IAOI,8BAAA;ERmkEV;EQ1kEM;IAOI,8BAAA;ERskEV;EQ7kEM;IAOI,0BAAA;ERykEV;EQhlEM;IAOI,gCAAA;ER4kEV;EQnlEM;IAOI,+BAAA;ER+kEV;EQtlEM;IAOI,6BAAA;ERklEV;EQzlEM;IAOI,+BAAA;ERqlEV;EQ5lEM;IAOI,6BAAA;ERwlEV;EQ/lEM;IAOI,6BAAA;ER2lEV;EQlmEM;IAOI,qBAAA;ER8lEV;EQrmEM;IAOI,2BAAA;ERimEV;EQxmEM;IAOI,0BAAA;ERomEV;EQ3mEM;IAOI,wBAAA;ERumEV;EQ9mEM;IAOI,0BAAA;ER0mEV;EQjnEM;IAOI,wBAAA;ER6mEV;EQpnEM;IAOI,0BAAA;IAAA,2BAAA;ERinEV;EQxnEM;IAOI,gCAAA;IAAA,iCAAA;ERqnEV;EQ5nEM;IAOI,+BAAA;IAAA,gCAAA;ERynEV;EQhoEM;IAOI,6BAAA;IAAA,8BAAA;ER6nEV;EQpoEM;IAOI,+BAAA;IAAA,gCAAA;ERioEV;EQxoEM;IAOI,6BAAA;IAAA,8BAAA;ERqoEV;EQ5oEM;IAOI,yBAAA;IAAA,4BAAA;ERyoEV;EQhpEM;IAOI,+BAAA;IAAA,kCAAA;ER6oEV;EQppEM;IAOI,8BAAA;IAAA,iCAAA;ERipEV;EQxpEM;IAOI,4BAAA;IAAA,+BAAA;ERqpEV;EQ5pEM;IAOI,8BAAA;IAAA,iCAAA;ERypEV;EQhqEM;IAOI,4BAAA;IAAA,+BAAA;ER6pEV;EQpqEM;IAOI,yBAAA;ERgqEV;EQvqEM;IAOI,+BAAA;ERmqEV;EQ1qEM;IAOI,8BAAA;ERsqEV;EQ7qEM;IAOI,4BAAA;ERyqEV;EQhrEM;IAOI,8BAAA;ER4qEV;EQnrEM;IAOI,4BAAA;ER+qEV;EQtrEM;IAOI,0BAAA;ERkrEV;EQzrEM;IAOI,gCAAA;ERqrEV;EQ5rEM;IAOI,+BAAA;ERwrEV;EQ/rEM;IAOI,6BAAA;ER2rEV;EQlsEM;IAOI,+BAAA;ER8rEV;EQrsEM;IAOI,6BAAA;ERisEV;EQxsEM;IAOI,4BAAA;ERosEV;EQ3sEM;IAOI,kCAAA;ERusEV;EQ9sEM;IAOI,iCAAA;ER0sEV;EQjtEM;IAOI,+BAAA;ER6sEV;EQptEM;IAOI,iCAAA;ERgtEV;EQvtEM;IAOI,+BAAA;ERmtEV;EQ1tEM;IAOI,2BAAA;ERstEV;EQ7tEM;IAOI,iCAAA;ERytEV;EQhuEM;IAOI,gCAAA;ER4tEV;EQnuEM;IAOI,8BAAA;ER+tEV;EQtuEM;IAOI,gCAAA;ERkuEV;EQzuEM;IAOI,8BAAA;ERquEV;AACF;AIhvEI;EIGI;IAOI,0BAAA;ER0uEV;EQjvEM;IAOI,gCAAA;ER6uEV;EQpvEM;IAOI,yBAAA;ERgvEV;EQvvEM;IAOI,wBAAA;ERmvEV;EQ1vEM;IAOI,yBAAA;ERsvEV;EQ7vEM;IAOI,6BAAA;ERyvEV;EQhwEM;IAOI,8BAAA;ER4vEV;EQnwEM;IAOI,wBAAA;ER+vEV;EQtwEM;IAOI,+BAAA;ERkwEV;EQzwEM;IAOI,wBAAA;ERqwEV;EQ5wEM;IAOI,yBAAA;ERwwEV;EQ/wEM;IAOI,8BAAA;ER2wEV;EQlxEM;IAOI,iCAAA;ER8wEV;EQrxEM;IAOI,sCAAA;ERixEV;EQxxEM;IAOI,yCAAA;ERoxEV;EQ3xEM;IAOI,uBAAA;ERuxEV;EQ9xEM;IAOI,uBAAA;ER0xEV;EQjyEM;IAOI,yBAAA;ER6xEV;EQpyEM;IAOI,yBAAA;ERgyEV;EQvyEM;IAOI,0BAAA;ERmyEV;EQ1yEM;IAOI,4BAAA;ERsyEV;EQ7yEM;IAOI,kCAAA;ERyyEV;EQhzEM;IAOI,sCAAA;ER4yEV;EQnzEM;IAOI,oCAAA;ER+yEV;EQtzEM;IAOI,kCAAA;ERkzEV;EQzzEM;IAOI,yCAAA;ERqzEV;EQ5zEM;IAOI,wCAAA;ERwzEV;EQ/zEM;IAOI,wCAAA;ER2zEV;EQl0EM;IAOI,kCAAA;ER8zEV;EQr0EM;IAOI,gCAAA;ERi0EV;EQx0EM;IAOI,8BAAA;ERo0EV;EQ30EM;IAOI,gCAAA;ERu0EV;EQ90EM;IAOI,+BAAA;ER00EV;EQj1EM;IAOI,oCAAA;ER60EV;EQp1EM;IAOI,kCAAA;ERg1EV;EQv1EM;IAOI,gCAAA;ERm1EV;EQ11EM;IAOI,uCAAA;ERs1EV;EQ71EM;IAOI,sCAAA;ERy1EV;EQh2EM;IAOI,iCA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FM;IAOI,4BAAA;ERqnFV;EQ5nFM;IAOI,8BAAA;ERwnFV;EQ/nFM;IAOI,4BAAA;ER2nFV;EQloFM;IAOI,0BAAA;ER8nFV;EQroFM;IAOI,gCAAA;ERioFV;EQxoFM;IAOI,+BAAA;ERooFV;EQ3oFM;IAOI,6BAAA;ERuoFV;EQ9oFM;IAOI,+BAAA;ER0oFV;EQjpFM;IAOI,6BAAA;ER6oFV;EQppFM;IAOI,4BAAA;ERgpFV;EQvpFM;IAOI,kCAAA;ERmpFV;EQ1pFM;IAOI,iCAAA;ERspFV;EQ7pFM;IAOI,+BAAA;ERypFV;EQhqFM;IAOI,iCAAA;ER4pFV;EQnqFM;IAOI,+BAAA;ER+pFV;EQtqFM;IAOI,2BAAA;ERkqFV;EQzqFM;IAOI,iCAAA;ERqqFV;EQ5qFM;IAOI,gCAAA;ERwqFV;EQ/qFM;IAOI,8BAAA;ER2qFV;EQlrFM;IAOI,gCAAA;ER8qFV;EQrrFM;IAOI,8BAAA;ERirFV;AACF;AI5rFI;EIGI;IAOI,0BAAA;ERsrFV;EQ7rFM;IAOI,gCAAA;ERyrFV;EQhsFM;IAOI,yBAAA;ER4rFV;EQnsFM;IAOI,wBAAA;ER+rFV;EQtsFM;IAOI,yBAAA;ERksFV;EQzsFM;IAOI,6BAAA;ERqsFV;EQ5sFM;IAOI,8BAAA;ERwsFV;EQ/sFM;IAOI,wBAAA;ER2sFV;EQltFM;IAOI,+BAAA;ER8sFV;EQrtFM;IAOI,wBAAA;ERitFV;EQxtFM;IAOI,yBAAA;ERotFV;EQ3tFM;IAOI,8BAAA;ERutFV;EQ9tFM;IAOI,iCAAA;ER0tFV;EQjuFM;IAOI,sCAAA;ER6tFV;EQpuFM;IAOI,yCAAA;ERguFV;EQvuFM;IAOI,uBAAA;ERmuFV;EQ1uFM;IAOI,uBAAA;ERsuFV;EQ7uFM;IAOI,yBAAA;ERyuFV;EQhvFM;IAOI,yBAAA;ER4uFV;EQnvFM;IAOI,0BAAA;ER+uFV;EQtvFM;IAOI,4BAAA;ERkvFV;EQzvFM;IAOI,kCAAA;ERqvFV;EQ5vFM;IAOI,sCAAA;ERwvFV;EQ/vFM;IAOI,oCAAA;ER2vFV;EQlwFM;IAOI,kCAAA;ER8vFV;EQrwFM;IAOI,yCAAA;ERiwFV;EQxwFM;IAOI,wCAAA;E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3lHM;IAOI,wBAAA;ERulHV;EQ9lHM;IAOI,yBAAA;ER0lHV;EQjmHM;IAOI,6BAAA;ER6lHV;EQpmHM;IAOI,8BAAA;ERgmHV;EQvmHM;IAOI,wBAAA;ERmmHV;EQ1mHM;IAOI,+BAAA;ERsmHV;EQ7mHM;IAOI,wBAAA;ERymHV;EQhnHM;IAOI,yBAAA;ER4mHV;EQnnHM;IAOI,8BAAA;ER+mHV;EQtnHM;IAOI,iCAAA;ERknHV;EQznHM;IAOI,sCAAA;ERqnHV;EQ5nHM;IAOI,yCAAA;ERwnHV;EQ/nHM;IAOI,uBAAA;ER2nHV;EQloHM;IAOI,uBAAA;ER8nHV;EQroHM;IAOI,yBAAA;ERioHV;EQxoHM;IAOI,yBAAA;ERooHV;EQ3oHM;IAOI,0BAAA;ERuoHV;EQ9oHM;IAOI,4BAAA;ER0oHV;EQjpHM;IAOI,kCAAA;ER6oHV;EQppHM;IAOI,sCAAA;ERgpHV;EQvpHM;IAOI,oCAAA;ERmpHV;EQ1pHM;IAOI,kCAAA;ERspHV;EQ7pHM;IAOI,yCAAA;ERypHV;EQhqHM;IAOI,wCAAA;ER4pHV;EQnqHM;IAOI,wCAAA;ER+pHV;EQtqHM;IAOI,kCAAA;ERkqHV;EQzqHM;IAOI,gCAAA;ERqqHV;EQ5qHM;IAOI,8BAAA;ERwqHV;EQ/qHM;IAOI,gCAAA;ER2qHV;EQlrHM;IAOI,+BAAA;ER8qHV;EQrrHM;IAOI,oCAAA;ERirHV;EQxrHM;IAOI,kCAAA;ERorHV;EQ3rHM;IAOI,gCAAA;ERurHV;EQ9rHM;IAOI,uCAAA;ER0rHV;EQjsHM;IAOI,sCAAA;ER6rHV;EQpsHM;IAOI,iCAAA;ERgsHV;EQvsHM;IAOI,2BAAA;ERmsHV;EQ1sHM;IAOI,iCAAA;ERssHV;EQ7sHM;IAOI,+BAAA;ERysHV;EQhtHM;IAOI,6BAAA;ER4sHV;EQntHM;IAOI,+BAAA;ER+sHV;EQttHM;IAOI,8BAAA;ERktHV;EQztHM;IAOI,oBAAA;ERqtHV;EQ5tHM;IAOI,mBAAA;ERwtHV;EQ/tHM;IAOI,mBAAA;ER2tHV;EQluHM;IAOI,mBAAA;ER8tHV;EQruHM;IAOI,mBAAA;ERiuHV;EQxuHM;IAOI,mBAAA;ERouHV;EQ3uHM;IAOI,mBAAA;ERuuHV;EQ9uHM;IAOI,mBAAA;ER0uHV;EQjvHM;IAOI,oBAAA;ER6uHV;EQpvHM;IAOI,0BAAA;ERgvHV;EQvvHM;IAOI,yBAAA;ERmvHV;EQ1vHM;IAOI,uBAAA;ERsvHV;EQ7vHM;IAOI,yBAAA;ERyvHV;EQhwHM;IAOI,uBAAA;ER4vHV;EQnwHM;IAOI,uBAAA;ER+vHV;EQtwHM;IAOI,yBAAA;IAAA,0BAAA;ERmwHV;EQ1wHM;IAOI,+BAAA;IAAA,gCAAA;ERuwHV;EQ9wHM;IAOI,8BAAA;IAAA,+BAAA;ER2wHV;EQlxHM;IAOI,4BAAA;IAAA,6BAAA;ER+wHV;EQtxHM;IAOI,8BAAA;IAAA,+BAAA;ERmxHV;EQ1xHM;IAOI,4BAAA;IAAA,6BAAA;ERuxHV;EQ9xHM;IAOI,4BAAA;IAAA,6BAAA;ER2xHV;EQlyHM;IAOI,wBAAA;IAAA,2BAAA;ER+xHV;EQtyHM;IAOI,8BAAA;IAAA,iCAAA;ERmyHV;EQ1yHM;IAOI,6BAAA;IAAA,gCAAA;ERuyHV;EQ9yHM;IAOI,2BAAA;IAAA,8BAAA;ER2yHV;EQlzHM;IAOI,6BAAA;IAAA,gCAAA;ER+yHV;EQtzHM;IAOI,2BAAA;IAAA,8BAAA;ERmzHV;EQ1zHM;IAOI,2BAAA;IAAA,8BAAA;ERuzHV;EQ9zHM;IAOI,wBAAA;ER0zHV;EQj0HM;IAOI,8BAAA;ER6zHV;EQp0HM;IAOI,6BAAA;ERg0HV;EQv0HM;IAOI,2BAAA;ERm0HV;EQ10HM;IAOI,6BAAA;ERs0HV;EQ70HM;IAOI,2BAAA;ERy0HV;EQh1HM;IAOI,2BAAA;ER40HV;EQn1HM;IAOI,yBAAA;ER+0HV;EQt1HM;IAOI,+BAAA;ERk1HV;EQz1HM;IAOI,8BAAA;ERq1HV;EQ51HM;IAOI,4BAAA;ERw1HV;EQ/1HM;IAOI,8BAAA;ER21HV;EQl2HM;IAOI,4BAAA;ER81HV;EQr2HM;IAOI,4BAAA;ERi2HV;EQx2HM;IAOI,2BAAA;ERo2HV;EQ32HM;IAOI,iCAAA;ERu2HV;EQ92HM;IAOI,gCAAA;ER02HV;EQj3HM;IAOI,8BAAA;ER62HV;EQp3HM;IAOI,gCAAA;ERg3HV;EQv3HM;IAOI,8BAAA;ERm3HV;EQ13HM;IAOI,8BAAA;ERs3HV;EQ73HM;IAOI,0BAAA;ERy3HV;EQh4HM;IAOI,gCAAA;ER43HV;EQn4HM;IAOI,+BAAA;ER+3HV;EQt4HM;IAOI,6BAAA;ERk4HV;EQz4HM;IAOI,+BAAA;ERq4HV;EQ54HM;IAOI,6BAAA;ERw4HV;EQ/4HM;IAOI,6BAAA;ER24HV;EQl5HM;IAOI,qBAAA;ER84HV;EQr5HM;IAOI,2BAAA;ERi5HV;EQx5HM;IAOI,0BAAA;ERo5HV;EQ35HM;IAOI,wBAAA;ERu5HV;EQ95HM;IAOI,0BAAA;ER05HV;EQj6HM;IAOI,wBAAA;ER65HV;EQp6HM;IAOI,0BAAA;IAAA,2BAAA;ERi6HV;EQx6HM;IAOI,gCAAA;IAAA,iCAAA;ERq6HV;EQ56HM;IAOI,+BAAA;IAAA,gCAAA;ERy6HV;EQh7HM;IAOI,6BAAA;IAAA,8BAAA;ER66HV;EQp7HM;IAOI,+BAAA;IAAA,gCAAA;ERi7HV;EQx7HM;IAOI,6BAAA;IAAA,8BAAA;ERq7HV;EQ57HM;IAOI,yBAAA;IAAA,4BAAA;ERy7HV;EQh8HM;IAOI,+BAAA;IAAA,kCAAA;ER67HV;EQp8HM;IAOI,8BAAA;IAAA,iCAAA;ERi8HV;EQx8HM;IAOI,4BAAA;IAAA,+BAAA;ERq8HV;EQ58HM;IAOI,8BAAA;IAAA,iCAAA;ERy8HV;EQh9HM;IAOI,4BAAA;IAAA,+BAAA;ER68HV;EQp9HM;IAOI,yBAAA;ERg9HV;EQv9HM;IAOI,+BAAA;ERm9HV;EQ19HM;IAOI,8BAAA;ERs9HV;EQ79HM;IAOI,4BAAA;ERy9HV;EQh+HM;IAOI,8BAAA;ER49HV;EQn+HM;IAOI,4BAAA;ER+9HV;EQt+HM;IAOI,0BAAA;ERk+HV;EQz+HM;IAOI,gCAAA;ERq+HV;EQ5+HM;IAOI,+BAAA;ERw+HV;EQ/+HM;IAOI,6BAAA;ER2+HV;EQl/HM;IAOI,+BAAA;ER8+HV;EQr/HM;IAOI,6BAAA;ERi/HV;EQx/HM;IAOI,4BAAA;ERo/HV;EQ3/HM;IAOI,kCAAA;ERu/HV;EQ9/HM;IAOI,iCAAA;ER0/HV;EQjgIM;IAOI,+BAAA;ER6/HV;EQpgIM;IAOI,iCAAA;ERggIV;EQvgIM;IAOI,+BAAA;ERmgIV;EQ1gIM;IAOI,2BAAA;ERsgIV;EQ7gIM;IAOI,iCAAA;ERygIV;EQhhIM;IAOI,gCAAA;ER4gIV;EQnhIM;IAOI,8BAAA;ER+gIV;EQthIM;IAOI,gCAAA;ERkhIV;EQzhIM;IAOI,8BAAA;ERqhIV;AACF;ASzjIA;ED4BQ;IAOI,0BAAA;ER0hIV;EQjiIM;IAOI,gCAAA;ER6hIV;EQpiIM;IAOI,yBAAA;ERgiIV;EQviIM;IAOI,wBAAA;ERmiIV;EQ1iIM;IAOI,yBAAA;ERsiIV;EQ7iIM;IAOI,6BAAA;ERyiIV;EQhjIM;IAOI,8BAAA;ER4iIV;EQnjIM;IAOI,wBAAA;ER+iIV;EQtjIM;IAOI,+BAAA;ERkjIV;EQzjIM;IAOI,wBAAA;ERqjIV;AACF","file":"bootstrap-grid.rtl.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n$primary-text: $blue-600 !default;\n$secondary-text: $gray-600 !default;\n$success-text: $green-600 !default;\n$info-text: $cyan-700 !default;\n$warning-text: $yellow-700 !default;\n$danger-text: $red-600 !default;\n$light-text: $gray-600 !default;\n$dark-text: $gray-700 !default;\n\n$primary-bg-subtle: $blue-100 !default;\n$secondary-bg-subtle: $gray-100 !default;\n$success-bg-subtle: $green-100 !default;\n$info-bg-subtle: $cyan-100 !default;\n$warning-bg-subtle: $yellow-100 !default;\n$danger-bg-subtle: $red-100 !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n\n$primary-border-subtle: $blue-200 !default;\n$secondary-border-subtle: $gray-200 !default;\n$success-border-subtle: $green-200 !default;\n$info-border-subtle: $cyan-200 !default;\n$warning-border-subtle: $yellow-200 !default;\n$danger-border-subtle: $red-200 !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-emphasis-color: $black !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba(var(--#{$prefix}body-color-rgb), .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba(var(--#{$prefix}body-color-rgb), .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: var(--#{$prefix}secondary-color) !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}form-control-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default; //$gray-400\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc($input-border-width * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.875em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}success-text),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}success),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}danger-text),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}danger),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{rgba($body-color, .75)}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc($pagination-border-width * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc($popover-border-radius - $popover-border-width) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css
index 2e401cf28..25518fa23 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css
@@ -1,7 +1,6 @@
/*!
- * Bootstrap Grid v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-left:auto;margin-right:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-left:calc(-.5 * var(--bs-gutter-x));margin-right:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:3rem!important}.me-auto{margin-left:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:3rem!important}.ms-auto{margin-right:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:3rem!important}.me-sm-auto{margin-left:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:3rem!important}.ms-sm-auto{margin-right:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:3rem!important}.me-md-auto{margin-left:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:3rem!important}.ms-md-auto{margin-right:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:3rem!important}.me-lg-auto{margin-left:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:3rem!important}.ms-lg-auto{margin-right:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:3rem!important}.me-xl-auto{margin-left:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:3rem!important}.ms-xl-auto{margin-right:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:3rem!important}.me-xxl-auto{margin-left:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:3rem!important}.ms-xxl-auto{margin-right:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text:#0a58ca;--bs-secondary-text:#6c757d;--bs-success-text:#146c43;--bs-info-text:#087990;--bs-warning-text:#997404;--bs-danger-text:#b02a37;--bs-light-text:#6c757d;--bs-dark-text:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#f8f9fa;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#e9ecef;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);--bs-emphasis-color:#000;--bs-form-control-bg:var(--bs-body-bg);--bs-form-control-disabled-bg:var(--bs-secondary-bg);--bs-highlight-bg:#fff3cd;--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}[data-bs-theme=dark]{--bs-body-color:#adb5bd;--bs-body-color-rgb:173,181,189;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#f8f9fa;--bs-emphasis-color-rgb:248,249,250;--bs-secondary-color:rgba(173, 181, 189, 0.75);--bs-secondary-color-rgb:173,181,189;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(173, 181, 189, 0.5);--bs-tertiary-color-rgb:173,181,189;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-emphasis-color:#fff;--bs-primary-text:#6ea8fe;--bs-secondary-text:#dee2e6;--bs-success-text:#75b798;--bs-info-text:#6edff6;--bs-warning-text:#ffda6a;--bs-danger-text:#ea868f;--bs-light-text:#f8f9fa;--bs-dark-text:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#212529;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#495057;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#055160;--bs-warning-border-subtle:#664d03;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:#fff;--bs-link-color:#6ea8fe;--bs-link-hover-color:#9ec5fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:158,197,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-left:auto;margin-right:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-left:calc(-.5 * var(--bs-gutter-x));margin-right:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:3rem!important}.me-auto{margin-left:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:3rem!important}.ms-auto{margin-right:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:3rem!important}.me-sm-auto{margin-left:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:3rem!important}.ms-sm-auto{margin-right:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:3rem!important}.me-md-auto{margin-left:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:3rem!important}.ms-md-auto{margin-right:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:3rem!important}.me-lg-auto{margin-left:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:3rem!important}.ms-lg-auto{margin-right:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:3rem!important}.me-xl-auto{margin-left:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:3rem!important}.ms-xl-auto{margin-right:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:3rem!important}.me-xxl-auto{margin-left:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:3rem!important}.ms-xxl-auto{margin-right:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
/*# sourceMappingURL=bootstrap-grid.rtl.min.css.map */ \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map
index 85798a3a4..93574dcd9 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_containers.scss","dist/css/bootstrap-grid.rtl.css","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","/*!\n * Bootstrap Grid v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-right: 8.33333333%;\n}\n\n.offset-2 {\n margin-right: 16.66666667%;\n}\n\n.offset-3 {\n margin-right: 25%;\n}\n\n.offset-4 {\n margin-right: 33.33333333%;\n}\n\n.offset-5 {\n margin-right: 41.66666667%;\n}\n\n.offset-6 {\n margin-right: 50%;\n}\n\n.offset-7 {\n margin-right: 58.33333333%;\n}\n\n.offset-8 {\n margin-right: 66.66666667%;\n}\n\n.offset-9 {\n margin-right: 75%;\n}\n\n.offset-10 {\n margin-right: 83.33333333%;\n}\n\n.offset-11 {\n margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-right: 0;\n }\n .offset-sm-1 {\n margin-right: 8.33333333%;\n }\n .offset-sm-2 {\n margin-right: 16.66666667%;\n }\n .offset-sm-3 {\n margin-right: 25%;\n }\n .offset-sm-4 {\n margin-right: 33.33333333%;\n }\n .offset-sm-5 {\n margin-right: 41.66666667%;\n }\n .offset-sm-6 {\n margin-right: 50%;\n }\n .offset-sm-7 {\n margin-right: 58.33333333%;\n }\n .offset-sm-8 {\n margin-right: 66.66666667%;\n }\n .offset-sm-9 {\n margin-right: 75%;\n }\n .offset-sm-10 {\n margin-right: 83.33333333%;\n }\n .offset-sm-11 {\n margin-right: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-right: 0;\n }\n .offset-md-1 {\n margin-right: 8.33333333%;\n }\n .offset-md-2 {\n margin-right: 16.66666667%;\n }\n .offset-md-3 {\n margin-right: 25%;\n }\n .offset-md-4 {\n margin-right: 33.33333333%;\n }\n .offset-md-5 {\n margin-right: 41.66666667%;\n }\n .offset-md-6 {\n margin-right: 50%;\n }\n .offset-md-7 {\n margin-right: 58.33333333%;\n }\n .offset-md-8 {\n margin-right: 66.66666667%;\n }\n .offset-md-9 {\n margin-right: 75%;\n }\n .offset-md-10 {\n margin-right: 83.33333333%;\n }\n .offset-md-11 {\n margin-right: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-right: 0;\n }\n .offset-lg-1 {\n margin-right: 8.33333333%;\n }\n .offset-lg-2 {\n margin-right: 16.66666667%;\n }\n .offset-lg-3 {\n margin-right: 25%;\n }\n .offset-lg-4 {\n margin-right: 33.33333333%;\n }\n .offset-lg-5 {\n margin-right: 41.66666667%;\n }\n .offset-lg-6 {\n margin-right: 50%;\n }\n .offset-lg-7 {\n margin-right: 58.33333333%;\n }\n .offset-lg-8 {\n margin-right: 66.66666667%;\n }\n .offset-lg-9 {\n margin-right: 75%;\n }\n .offset-lg-10 {\n margin-right: 83.33333333%;\n }\n .offset-lg-11 {\n margin-right: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-right: 0;\n }\n .offset-xl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xl-3 {\n margin-right: 25%;\n }\n .offset-xl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xl-6 {\n margin-right: 50%;\n }\n .offset-xl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xl-9 {\n margin-right: 75%;\n }\n .offset-xl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xl-11 {\n margin-right: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-right: 0;\n }\n .offset-xxl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-right: 25%;\n }\n .offset-xxl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-right: 50%;\n }\n .offset-xxl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-right: 75%;\n }\n .offset-xxl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-right: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.mx-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.mx-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-left: 0 !important;\n}\n\n.me-1 {\n margin-left: 0.25rem !important;\n}\n\n.me-2 {\n margin-left: 0.5rem !important;\n}\n\n.me-3 {\n margin-left: 1rem !important;\n}\n\n.me-4 {\n margin-left: 1.5rem !important;\n}\n\n.me-5 {\n margin-left: 3rem !important;\n}\n\n.me-auto {\n margin-left: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-right: 0 !important;\n}\n\n.ms-1 {\n margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n margin-right: 1rem !important;\n}\n\n.ms-4 {\n margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n margin-right: 3rem !important;\n}\n\n.ms-auto {\n margin-right: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.px-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n\n.px-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n}\n\n.px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-left: 0 !important;\n}\n\n.pe-1 {\n padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n padding-left: 1rem !important;\n}\n\n.pe-4 {\n padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n padding-left: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-right: 0 !important;\n}\n\n.ps-1 {\n padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n padding-right: 1rem !important;\n}\n\n.ps-4 {\n padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n padding-right: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-left: 0 !important;\n }\n .me-sm-1 {\n margin-left: 0.25rem !important;\n }\n .me-sm-2 {\n margin-left: 0.5rem !important;\n }\n .me-sm-3 {\n margin-left: 1rem !important;\n }\n .me-sm-4 {\n margin-left: 1.5rem !important;\n }\n .me-sm-5 {\n margin-left: 3rem !important;\n }\n .me-sm-auto {\n margin-left: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-right: 0 !important;\n }\n .ms-sm-1 {\n margin-right: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-right: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-right: 1rem !important;\n }\n .ms-sm-4 {\n margin-right: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-right: 3rem !important;\n }\n .ms-sm-auto {\n margin-right: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-left: 0 !important;\n }\n .pe-sm-1 {\n padding-left: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-left: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-left: 1rem !important;\n }\n .pe-sm-4 {\n padding-left: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-left: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-right: 0 !important;\n }\n .ps-sm-1 {\n padding-right: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-right: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-right: 1rem !important;\n }\n .ps-sm-4 {\n padding-right: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-left: 0 !important;\n }\n .me-md-1 {\n margin-left: 0.25rem !important;\n }\n .me-md-2 {\n margin-left: 0.5rem !important;\n }\n .me-md-3 {\n margin-left: 1rem !important;\n }\n .me-md-4 {\n margin-left: 1.5rem !important;\n }\n .me-md-5 {\n margin-left: 3rem !important;\n }\n .me-md-auto {\n margin-left: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-right: 0 !important;\n }\n .ms-md-1 {\n margin-right: 0.25rem !important;\n }\n .ms-md-2 {\n margin-right: 0.5rem !important;\n }\n .ms-md-3 {\n margin-right: 1rem !important;\n }\n .ms-md-4 {\n margin-right: 1.5rem !important;\n }\n .ms-md-5 {\n margin-right: 3rem !important;\n }\n .ms-md-auto {\n margin-right: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-left: 0 !important;\n }\n .pe-md-1 {\n padding-left: 0.25rem !important;\n }\n .pe-md-2 {\n padding-left: 0.5rem !important;\n }\n .pe-md-3 {\n padding-left: 1rem !important;\n }\n .pe-md-4 {\n padding-left: 1.5rem !important;\n }\n .pe-md-5 {\n padding-left: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-right: 0 !important;\n }\n .ps-md-1 {\n padding-right: 0.25rem !important;\n }\n .ps-md-2 {\n padding-right: 0.5rem !important;\n }\n .ps-md-3 {\n padding-right: 1rem !important;\n }\n .ps-md-4 {\n padding-right: 1.5rem !important;\n }\n .ps-md-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-left: 0 !important;\n }\n .me-lg-1 {\n margin-left: 0.25rem !important;\n }\n .me-lg-2 {\n margin-left: 0.5rem !important;\n }\n .me-lg-3 {\n margin-left: 1rem !important;\n }\n .me-lg-4 {\n margin-left: 1.5rem !important;\n }\n .me-lg-5 {\n margin-left: 3rem !important;\n }\n .me-lg-auto {\n margin-left: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-right: 0 !important;\n }\n .ms-lg-1 {\n margin-right: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-right: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-right: 1rem !important;\n }\n .ms-lg-4 {\n margin-right: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-right: 3rem !important;\n }\n .ms-lg-auto {\n margin-right: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-left: 0 !important;\n }\n .pe-lg-1 {\n padding-left: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-left: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-left: 1rem !important;\n }\n .pe-lg-4 {\n padding-left: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-left: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-right: 0 !important;\n }\n .ps-lg-1 {\n padding-right: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-right: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-right: 1rem !important;\n }\n .ps-lg-4 {\n padding-right: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-left: 0 !important;\n }\n .me-xl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xl-3 {\n margin-left: 1rem !important;\n }\n .me-xl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xl-5 {\n margin-left: 3rem !important;\n }\n .me-xl-auto {\n margin-left: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-right: 0 !important;\n }\n .ms-xl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-right: 1rem !important;\n }\n .ms-xl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-right: 3rem !important;\n }\n .ms-xl-auto {\n margin-right: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-left: 0 !important;\n }\n .pe-xl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-left: 1rem !important;\n }\n .pe-xl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-left: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-right: 0 !important;\n }\n .ps-xl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-right: 1rem !important;\n }\n .ps-xl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xxl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-left: 0 !important;\n }\n .me-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-left: 1rem !important;\n }\n .me-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-left: 3rem !important;\n }\n .me-xxl-auto {\n margin-left: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-right: 0 !important;\n }\n .ms-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-right: 1rem !important;\n }\n .ms-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-right: 3rem !important;\n }\n .ms-xxl-auto {\n margin-right: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xxl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-left: 0 !important;\n }\n .pe-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-left: 1rem !important;\n }\n .pe-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-left: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-right: 0 !important;\n }\n .ps-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-right: 1rem !important;\n }\n .ps-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-right: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.rtl.css.map */","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","dist/css/bootstrap-grid.rtl.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","/*!\n * Bootstrap Grid v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-right: 8.33333333%;\n}\n\n.offset-2 {\n margin-right: 16.66666667%;\n}\n\n.offset-3 {\n margin-right: 25%;\n}\n\n.offset-4 {\n margin-right: 33.33333333%;\n}\n\n.offset-5 {\n margin-right: 41.66666667%;\n}\n\n.offset-6 {\n margin-right: 50%;\n}\n\n.offset-7 {\n margin-right: 58.33333333%;\n}\n\n.offset-8 {\n margin-right: 66.66666667%;\n}\n\n.offset-9 {\n margin-right: 75%;\n}\n\n.offset-10 {\n margin-right: 83.33333333%;\n}\n\n.offset-11 {\n margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-right: 0;\n }\n .offset-sm-1 {\n margin-right: 8.33333333%;\n }\n .offset-sm-2 {\n margin-right: 16.66666667%;\n }\n .offset-sm-3 {\n margin-right: 25%;\n }\n .offset-sm-4 {\n margin-right: 33.33333333%;\n }\n .offset-sm-5 {\n margin-right: 41.66666667%;\n }\n .offset-sm-6 {\n margin-right: 50%;\n }\n .offset-sm-7 {\n margin-right: 58.33333333%;\n }\n .offset-sm-8 {\n margin-right: 66.66666667%;\n }\n .offset-sm-9 {\n margin-right: 75%;\n }\n .offset-sm-10 {\n margin-right: 83.33333333%;\n }\n .offset-sm-11 {\n margin-right: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-right: 0;\n }\n .offset-md-1 {\n margin-right: 8.33333333%;\n }\n .offset-md-2 {\n margin-right: 16.66666667%;\n }\n .offset-md-3 {\n margin-right: 25%;\n }\n .offset-md-4 {\n margin-right: 33.33333333%;\n }\n .offset-md-5 {\n margin-right: 41.66666667%;\n }\n .offset-md-6 {\n margin-right: 50%;\n }\n .offset-md-7 {\n margin-right: 58.33333333%;\n }\n .offset-md-8 {\n margin-right: 66.66666667%;\n }\n .offset-md-9 {\n margin-right: 75%;\n }\n .offset-md-10 {\n margin-right: 83.33333333%;\n }\n .offset-md-11 {\n margin-right: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-right: 0;\n }\n .offset-lg-1 {\n margin-right: 8.33333333%;\n }\n .offset-lg-2 {\n margin-right: 16.66666667%;\n }\n .offset-lg-3 {\n margin-right: 25%;\n }\n .offset-lg-4 {\n margin-right: 33.33333333%;\n }\n .offset-lg-5 {\n margin-right: 41.66666667%;\n }\n .offset-lg-6 {\n margin-right: 50%;\n }\n .offset-lg-7 {\n margin-right: 58.33333333%;\n }\n .offset-lg-8 {\n margin-right: 66.66666667%;\n }\n .offset-lg-9 {\n margin-right: 75%;\n }\n .offset-lg-10 {\n margin-right: 83.33333333%;\n }\n .offset-lg-11 {\n margin-right: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-right: 0;\n }\n .offset-xl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xl-3 {\n margin-right: 25%;\n }\n .offset-xl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xl-6 {\n margin-right: 50%;\n }\n .offset-xl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xl-9 {\n margin-right: 75%;\n }\n .offset-xl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xl-11 {\n margin-right: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-right: 0;\n }\n .offset-xxl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-right: 25%;\n }\n .offset-xxl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-right: 50%;\n }\n .offset-xxl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-right: 75%;\n }\n .offset-xxl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-right: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.mx-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.mx-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-left: 0 !important;\n}\n\n.me-1 {\n margin-left: 0.25rem !important;\n}\n\n.me-2 {\n margin-left: 0.5rem !important;\n}\n\n.me-3 {\n margin-left: 1rem !important;\n}\n\n.me-4 {\n margin-left: 1.5rem !important;\n}\n\n.me-5 {\n margin-left: 3rem !important;\n}\n\n.me-auto {\n margin-left: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-right: 0 !important;\n}\n\n.ms-1 {\n margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n margin-right: 1rem !important;\n}\n\n.ms-4 {\n margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n margin-right: 3rem !important;\n}\n\n.ms-auto {\n margin-right: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.px-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n\n.px-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n}\n\n.px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-left: 0 !important;\n}\n\n.pe-1 {\n padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n padding-left: 1rem !important;\n}\n\n.pe-4 {\n padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n padding-left: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-right: 0 !important;\n}\n\n.ps-1 {\n padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n padding-right: 1rem !important;\n}\n\n.ps-4 {\n padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n padding-right: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-left: 0 !important;\n }\n .me-sm-1 {\n margin-left: 0.25rem !important;\n }\n .me-sm-2 {\n margin-left: 0.5rem !important;\n }\n .me-sm-3 {\n margin-left: 1rem !important;\n }\n .me-sm-4 {\n margin-left: 1.5rem !important;\n }\n .me-sm-5 {\n margin-left: 3rem !important;\n }\n .me-sm-auto {\n margin-left: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-right: 0 !important;\n }\n .ms-sm-1 {\n margin-right: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-right: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-right: 1rem !important;\n }\n .ms-sm-4 {\n margin-right: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-right: 3rem !important;\n }\n .ms-sm-auto {\n margin-right: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-left: 0 !important;\n }\n .pe-sm-1 {\n padding-left: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-left: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-left: 1rem !important;\n }\n .pe-sm-4 {\n padding-left: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-left: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-right: 0 !important;\n }\n .ps-sm-1 {\n padding-right: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-right: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-right: 1rem !important;\n }\n .ps-sm-4 {\n padding-right: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-left: 0 !important;\n }\n .me-md-1 {\n margin-left: 0.25rem !important;\n }\n .me-md-2 {\n margin-left: 0.5rem !important;\n }\n .me-md-3 {\n margin-left: 1rem !important;\n }\n .me-md-4 {\n margin-left: 1.5rem !important;\n }\n .me-md-5 {\n margin-left: 3rem !important;\n }\n .me-md-auto {\n margin-left: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-right: 0 !important;\n }\n .ms-md-1 {\n margin-right: 0.25rem !important;\n }\n .ms-md-2 {\n margin-right: 0.5rem !important;\n }\n .ms-md-3 {\n margin-right: 1rem !important;\n }\n .ms-md-4 {\n margin-right: 1.5rem !important;\n }\n .ms-md-5 {\n margin-right: 3rem !important;\n }\n .ms-md-auto {\n margin-right: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-left: 0 !important;\n }\n .pe-md-1 {\n padding-left: 0.25rem !important;\n }\n .pe-md-2 {\n padding-left: 0.5rem !important;\n }\n .pe-md-3 {\n padding-left: 1rem !important;\n }\n .pe-md-4 {\n padding-left: 1.5rem !important;\n }\n .pe-md-5 {\n padding-left: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-right: 0 !important;\n }\n .ps-md-1 {\n padding-right: 0.25rem !important;\n }\n .ps-md-2 {\n padding-right: 0.5rem !important;\n }\n .ps-md-3 {\n padding-right: 1rem !important;\n }\n .ps-md-4 {\n padding-right: 1.5rem !important;\n }\n .ps-md-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-left: 0 !important;\n }\n .me-lg-1 {\n margin-left: 0.25rem !important;\n }\n .me-lg-2 {\n margin-left: 0.5rem !important;\n }\n .me-lg-3 {\n margin-left: 1rem !important;\n }\n .me-lg-4 {\n margin-left: 1.5rem !important;\n }\n .me-lg-5 {\n margin-left: 3rem !important;\n }\n .me-lg-auto {\n margin-left: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-right: 0 !important;\n }\n .ms-lg-1 {\n margin-right: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-right: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-right: 1rem !important;\n }\n .ms-lg-4 {\n margin-right: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-right: 3rem !important;\n }\n .ms-lg-auto {\n margin-right: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-left: 0 !important;\n }\n .pe-lg-1 {\n padding-left: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-left: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-left: 1rem !important;\n }\n .pe-lg-4 {\n padding-left: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-left: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-right: 0 !important;\n }\n .ps-lg-1 {\n padding-right: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-right: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-right: 1rem !important;\n }\n .ps-lg-4 {\n padding-right: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-left: 0 !important;\n }\n .me-xl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xl-3 {\n margin-left: 1rem !important;\n }\n .me-xl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xl-5 {\n margin-left: 3rem !important;\n }\n .me-xl-auto {\n margin-left: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-right: 0 !important;\n }\n .ms-xl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-right: 1rem !important;\n }\n .ms-xl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-right: 3rem !important;\n }\n .ms-xl-auto {\n margin-right: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-left: 0 !important;\n }\n .pe-xl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-left: 1rem !important;\n }\n .pe-xl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-left: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-right: 0 !important;\n }\n .ps-xl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-right: 1rem !important;\n }\n .ps-xl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xxl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-left: 0 !important;\n }\n .me-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-left: 1rem !important;\n }\n .me-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-left: 3rem !important;\n }\n .me-xxl-auto {\n margin-left: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-right: 0 !important;\n }\n .ms-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-right: 1rem !important;\n }\n .ms-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-right: 3rem !important;\n }\n .ms-xxl-auto {\n margin-right: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xxl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-left: 0 !important;\n }\n .pe-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-left: 1rem !important;\n }\n .pe-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-left: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-right: 0 !important;\n }\n .ps-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-right: 1rem !important;\n }\n .ps-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-right: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.rtl.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css
index 245c0dc0d..34713f916 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css
@@ -1,10 +1,10 @@
/*!
- * Bootstrap Reboot v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
-:root {
+:root,
+[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
@@ -44,6 +44,30 @@
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
+ --bs-primary-text: #0a58ca;
+ --bs-secondary-text: #6c757d;
+ --bs-success-text: #146c43;
+ --bs-info-text: #087990;
+ --bs-warning-text: #997404;
+ --bs-danger-text: #b02a37;
+ --bs-light-text: #6c757d;
+ --bs-dark-text: #495057;
+ --bs-primary-bg-subtle: #cfe2ff;
+ --bs-secondary-bg-subtle: #f8f9fa;
+ --bs-success-bg-subtle: #d1e7dd;
+ --bs-info-bg-subtle: #cff4fc;
+ --bs-warning-bg-subtle: #fff3cd;
+ --bs-danger-bg-subtle: #f8d7da;
+ --bs-light-bg-subtle: #fcfcfd;
+ --bs-dark-bg-subtle: #ced4da;
+ --bs-primary-border-subtle: #9ec5fe;
+ --bs-secondary-border-subtle: #e9ecef;
+ --bs-success-border-subtle: #a3cfbb;
+ --bs-info-border-subtle: #9eeaf9;
+ --bs-warning-border-subtle: #ffe69c;
+ --bs-danger-border-subtle: #f1aeb5;
+ --bs-light-border-subtle: #e9ecef;
+ --bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
@@ -56,7 +80,25 @@
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
+ --bs-emphasis-color: #000;
+ --bs-emphasis-color-rgb: 0, 0, 0;
+ --bs-secondary-color: rgba(33, 37, 41, 0.75);
+ --bs-secondary-color-rgb: 33, 37, 41;
+ --bs-secondary-bg: #e9ecef;
+ --bs-secondary-bg-rgb: 233, 236, 239;
+ --bs-tertiary-color: rgba(33, 37, 41, 0.5);
+ --bs-tertiary-color-rgb: 33, 37, 41;
+ --bs-tertiary-bg: #f8f9fa;
+ --bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-link-color: #0d6efd;
+ --bs-link-color-rgb: 13, 110, 253;
+ --bs-link-decoration: underline;
+ --bs-link-hover-color: #0a58ca;
+ --bs-link-hover-color-rgb: 10, 88, 202;
+ --bs-code-color: #d63384;
+ --bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
@@ -67,10 +109,70 @@
--bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem;
- --bs-link-color: #0d6efd;
- --bs-link-hover-color: #0a58ca;
- --bs-code-color: #d63384;
+ --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
+ --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-emphasis-color: #000;
+ --bs-form-control-bg: var(--bs-body-bg);
+ --bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd;
+ --bs-breakpoint-xs: 0;
+ --bs-breakpoint-sm: 576px;
+ --bs-breakpoint-md: 768px;
+ --bs-breakpoint-lg: 992px;
+ --bs-breakpoint-xl: 1200px;
+ --bs-breakpoint-xxl: 1400px;
+}
+
+[data-bs-theme=dark] {
+ --bs-body-color: #adb5bd;
+ --bs-body-color-rgb: 173, 181, 189;
+ --bs-body-bg: #212529;
+ --bs-body-bg-rgb: 33, 37, 41;
+ --bs-emphasis-color: #f8f9fa;
+ --bs-emphasis-color-rgb: 248, 249, 250;
+ --bs-secondary-color: rgba(173, 181, 189, 0.75);
+ --bs-secondary-color-rgb: 173, 181, 189;
+ --bs-secondary-bg: #343a40;
+ --bs-secondary-bg-rgb: 52, 58, 64;
+ --bs-tertiary-color: rgba(173, 181, 189, 0.5);
+ --bs-tertiary-color-rgb: 173, 181, 189;
+ --bs-tertiary-bg: #2b3035;
+ --bs-tertiary-bg-rgb: 43, 48, 53;
+ --bs-emphasis-color: #fff;
+ --bs-primary-text: #6ea8fe;
+ --bs-secondary-text: #dee2e6;
+ --bs-success-text: #75b798;
+ --bs-info-text: #6edff6;
+ --bs-warning-text: #ffda6a;
+ --bs-danger-text: #ea868f;
+ --bs-light-text: #f8f9fa;
+ --bs-dark-text: #dee2e6;
+ --bs-primary-bg-subtle: #031633;
+ --bs-secondary-bg-subtle: #212529;
+ --bs-success-bg-subtle: #051b11;
+ --bs-info-bg-subtle: #032830;
+ --bs-warning-bg-subtle: #332701;
+ --bs-danger-bg-subtle: #2c0b0e;
+ --bs-light-bg-subtle: #343a40;
+ --bs-dark-bg-subtle: #1a1d20;
+ --bs-primary-border-subtle: #084298;
+ --bs-secondary-border-subtle: #495057;
+ --bs-success-border-subtle: #0f5132;
+ --bs-info-border-subtle: #055160;
+ --bs-warning-border-subtle: #664d03;
+ --bs-danger-border-subtle: #842029;
+ --bs-light-border-subtle: #495057;
+ --bs-dark-border-subtle: #343a40;
+ --bs-heading-color: #fff;
+ --bs-link-color: #6ea8fe;
+ --bs-link-hover-color: #9ec5fe;
+ --bs-link-color-rgb: 110, 168, 254;
+ --bs-link-hover-color-rgb: 158, 197, 254;
+ --bs-code-color: #e685b5;
+ --bs-border-color: #495057;
+ --bs-border-color-translucent: rgba(255, 255, 255, 0.15);
}
*,
@@ -102,7 +204,7 @@ hr {
margin: 1rem 0;
color: inherit;
border: 0;
- border-top: 1px solid;
+ border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
@@ -111,6 +213,7 @@ h6, h5, h4, h3, h2, h1 {
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
+ color: var(--bs-heading-color, inherit);
}
h1 {
@@ -239,11 +342,11 @@ sup {
}
a {
- color: var(--bs-link-color);
+ color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
- color: var(--bs-link-hover-color);
+ --bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
@@ -310,7 +413,7 @@ table {
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
- color: #6c757d;
+ color: var(--bs-secondary-color);
text-align: left;
}
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map
index 396b607fb..b9c26376f 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"AACE;;;;;EAAA;ACDF;EAQI,kBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,kBAAA;EAAA,iBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAAA,kBAAA;EAAA,gBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,uBAAA;EAIA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAIA,qBAAA;EAAA,uBAAA;EAAA,qBAAA;EAAA,kBAAA;EAAA,qBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAIA,8BAAA;EAAA,iCAAA;EAAA,6BAAA;EAAA,2BAAA;EAAA,6BAAA;EAAA,4BAAA;EAAA,6BAAA;EAAA,yBAAA;EAGF,6BAAA;EACA,uBAAA;EACA,+BAAA;EACA,+BAAA;EAMA,qNAAA;EACA,yGAAA;EACA,yFAAA;EAOA,gDAAA;EC4PI,yBALI;EDrPR,0BAAA;EACA,0BAAA;EACA,wBAAA;EAIA,kBAAA;EAIA,sBAAA;EACA,wBAAA;EACA,0BAAA;EACA,mDAAA;EAEA,4BAAA;EACA,8BAAA;EACA,6BAAA;EACA,2BAAA;EACA,4BAAA;EACA,8BAAA;EAGA,wBAAA;EACA,8BAAA;EAEA,wBAAA;EAEA,0BAAA;AEEF;;AC1DA;;;EAGE,sBAAA;AD6DF;;AC9CI;EANJ;IAOM,uBAAA;EDkDJ;AACF;;ACrCA;EACE,SAAA;EACA,uCAAA;EFmPI,mCALI;EE5OR,uCAAA;EACA,uCAAA;EACA,2BAAA;EACA,qCAAA;EACA,mCAAA;EACA,8BAAA;EACA,6CAAA;ADwCF;;AC/BA;EACE,cAAA;EACA,cCijB4B;EDhjB5B,SAAA;EACA,qBAAA;EACA,aCujB4B;AFrhB9B;;ACxBA;EACE,aAAA;EACA,qBCwf4B;EDrf5B,gBCwf4B;EDvf5B,gBCwf4B;AF/d9B;;ACrBA;EF6MQ,iCAAA;ACpLR;ADkBI;EE3CJ;IFoNQ,iBAAA;ECvLN;AACF;;ACzBA;EFwMQ,iCAAA;AC3KR;ADSI;EEtCJ;IF+MQ,eAAA;EC9KN;AACF;;AC7BA;EFmMQ,+BAAA;AClKR;ADAI;EEjCJ;IF0MQ,kBAAA;ECrKN;AACF;;ACjCA;EF8LQ,iCAAA;ACzJR;ADTI;EE5BJ;IFqMQ,iBAAA;EC5JN;AACF;;ACrCA;EFqLM,kBALI;ACvIV;;ACpCA;EFgLM,eALI;ACnIV;;AC7BA;EACE,aAAA;EACA,mBCmS0B;AFnQ5B;;ACtBA;EACE,yCAAA;EAAA,iCAAA;EACA,YAAA;EACA,sCAAA;EAAA,8BAAA;ADyBF;;ACnBA;EACE,mBAAA;EACA,kBAAA;EACA,oBAAA;ADsBF;;AChBA;;EAEE,kBAAA;ADmBF;;AChBA;;;EAGE,aAAA;EACA,mBAAA;ADmBF;;AChBA;;;;EAIE,gBAAA;ADmBF;;AChBA;EACE,gBC6X4B;AF1W9B;;ACdA;EACE,qBAAA;EACA,cAAA;ADiBF;;ACXA;EACE,gBAAA;ADcF;;ACNA;;EAEE,mBCsW4B;AF7V9B;;ACDA;EFmFM,kBALI;ACzEV;;ACEA;EACE,iBC+a4B;ED9a5B,wCAAA;ADCF;;ACQA;;EAEE,kBAAA;EF+DI,iBALI;EExDR,cAAA;EACA,wBAAA;ADLF;;ACQA;EAAM,eAAA;ADJN;;ACKA;EAAM,WAAA;ADDN;;ACMA;EACE,2BAAA;EACA,0BCqKwC;AFxK1C;ACKE;EACE,iCAAA;ADHJ;;ACcE;EAEE,cAAA;EACA,qBAAA;ADZJ;;ACmBA;;;;EAIE,qCCkR4B;EH7PxB,cALI;AC/BV;;ACuBA;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;EFSI,kBALI;ACvBV;ACwBE;EFII,kBALI;EEGN,cAAA;EACA,kBAAA;ADtBJ;;AC0BA;EFHM,kBALI;EEUR,2BAAA;EACA,qBAAA;ADvBF;AC0BE;EACE,cAAA;ADxBJ;;AC4BA;EACE,2BAAA;EFfI,kBALI;EEsBR,wBCuyCkC;EDtyClC,sCCuyCkC;EC3kDhC,sBAAA;AH4QJ;AC2BE;EACE,UAAA;EFtBE,cALI;ACGV;;ACmCA;EACE,gBAAA;ADhCF;;ACsCA;;EAEE,sBAAA;ADnCF;;AC2CA;EACE,oBAAA;EACA,yBAAA;ADxCF;;AC2CA;EACE,mBCsT4B;EDrT5B,sBCqT4B;EDpT5B,cCjVS;EDkVT,gBAAA;ADxCF;;AC+CA;EAEE,mBAAA;EACA,gCAAA;AD7CF;;ACgDA;;;;;;EAME,qBAAA;EACA,mBAAA;EACA,eAAA;AD7CF;;ACqDA;EACE,qBAAA;ADlDF;;ACwDA;EAEE,gBAAA;ADtDF;;AC8DA;EACE,UAAA;AD3DF;;ACgEA;;;;;EAKE,SAAA;EACA,oBAAA;EFrHI,kBALI;EE4HR,oBAAA;AD7DF;;ACiEA;;EAEE,oBAAA;AD9DF;;ACmEA;EACE,eAAA;ADhEF;;ACmEA;EAGE,iBAAA;ADlEF;ACqEE;EACE,UAAA;ADnEJ;;AC0EA;EACE,wBAAA;ADvEF;;AC+EA;;;;EAIE,0BAAA;AD5EF;AC+EI;;;;EACE,eAAA;AD1EN;;ACiFA;EACE,UAAA;EACA,kBAAA;AD9EF;;ACmFA;EACE,gBAAA;ADhFF;;AC0FA;EACE,YAAA;EACA,UAAA;EACA,SAAA;EACA,SAAA;ADvFF;;AC+FA;EACE,WAAA;EACA,WAAA;EACA,UAAA;EACA,qBC8I4B;EHxVtB,iCAAA;EE6MN,oBAAA;AD7FF;ADlRI;EEwWJ;IF/LQ,iBAAA;EC6GN;AACF;AC0FE;EACE,WAAA;ADxFJ;;AC+FA;;;;;;;EAOE,UAAA;AD5FF;;AC+FA;EACE,YAAA;AD5FF;;ACqGA;EACE,oBAAA;EACA,6BAAA;ADlGF;;AC0GA;;;;;;;CAAA;AAWA;EACE,wBAAA;AD1GF;;AC+GA;EACE,UAAA;AD5GF;;ACmHA;EACE,aAAA;EACA,0BAAA;ADhHF;;AC8GA;EACE,aAAA;EACA,0BAAA;ADhHF;;ACqHA;EACE,qBAAA;ADlHF;;ACuHA;EACE,SAAA;ADpHF;;AC2HA;EACE,kBAAA;EACA,eAAA;ADxHF;;ACgIA;EACE,wBAAA;AD7HF;;ACqIA;EACE,wBAAA;ADlIF","file":"bootstrap-reboot.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Reboot v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"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R;ADhHI;EG5BJ;IHqMQ,iBAAA;ECrDN;AACF;;AE5IA;EHqLM,kBALI;AChCV;;AE3IA;EHgLM,eALI;AC5BV;;AEpIA;EACE,aAAA;EACA,mBC2U0B;AHpM5B;;AE7HA;EACE,yCAAA;EAAA,iCAAA;EACA,YAAA;EACA,sCAAA;EAAA,8BAAA;AFgIF;;AE1HA;EACE,mBAAA;EACA,kBAAA;EACA,oBAAA;AF6HF;;AEvHA;;EAEE,kBAAA;AF0HF;;AEvHA;;;EAGE,aAAA;EACA,mBAAA;AF0HF;;AEvHA;;;;EAIE,gBAAA;AF0HF;;AEvHA;EACE,gBCqa4B;AH3S9B;;AErHA;EACE,qBAAA;EACA,cAAA;AFwHF;;AElHA;EACE,gBAAA;AFqHF;;AE7GA;;EAEE,mBC8Y4B;AH9R9B;;AExGA;EHmFM,kBALI;AC8BV;;AErGA;EACE,iBCud4B;EDtd5B,wCAAA;AFwGF;;AE/FA;;EAEE,kBAAA;EH+DI,iBALI;EGxDR,cAAA;EACA,wBAAA;AFkGF;;AE/FA;EAAM,eAAA;AFmGN;;AElGA;EAAM,WAAA;AFsGN;;AEjGA;EACE,gEAAA;EACA,0BC6MwC;AHzG1C;AElGE;EACE,mDAAA;AFoGJ;;AEzFE;EAEE,cAAA;EACA,qBAAA;AF2FJ;;AEpFA;;;;EAIE,qCCyT4B;EJpSxB,cALI;ACwEV;;AEhFA;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;EHSI,kBALI;ACgFV;AE/EE;EHII,kBALI;EGGN,cAAA;EACA,kBAAA;AFiFJ;;AE7EA;EHHM,kBALI;EGUR,2BAAA;EACA,qBAAA;AFgFF;AE7EE;EACE,cAAA;AF+EJ;;AE3EA;EACE,2BAAA;EHfI,kBALI;EGsBR,wBC42CkC;ED32ClC,sCC42CkC;EChpDhC,sBAAA;AJmXJ;AE5EE;EACE,UAAA;EHtBE,cALI;AC0GV;;AEpEA;EACE,gBAAA;AFuEF;;AEjEA;;EAEE,sBAAA;AFoEF;;AE5DA;EACE,oBAAA;EACA,yBAAA;AF+DF;;AE5DA;EACE,mBC8V4B;ED7V5B,sBC6V4B;ED5V5B,gCCqT4B;EDpT5B,gBAAA;AF+DF;;AExDA;EAEE,mBAAA;EACA,gCAAA;AF0DF;;AEvDA;;;;;;EAME,qBAAA;EACA,mBAAA;EACA,eAAA;AF0DF;;AElDA;EACE,qBAAA;AFqDF;;AE/CA;EAEE,gBAAA;AFiDF;;AEzCA;EACE,UAAA;AF4CF;;AEvCA;;;;;EAKE,SAAA;EACA,oBAAA;EHrHI,kBALI;EG4HR,oBAAA;AF0CF;;AEtCA;;EAEE,oBAAA;AFyCF;;AEpCA;EACE,eAAA;AFuCF;;AEpCA;EAGE,iBAAA;AFqCF;AElCE;EACE,UAAA;AFoCJ;;AE7BA;EACE,wBAAA;AFgCF;;AExBA;;;;EAIE,0BAAA;AF2BF;AExBI;;;;EACE,eAAA;AF6BN;;AEtBA;EACE,UAAA;EACA,kBAAA;AFyBF;;AEpBA;EACE,gBAAA;AFuBF;;AEbA;EACE,YAAA;EACA,UAAA;EACA,SAAA;EACA,SAAA;AFgBF;;AERA;EACE,WAAA;EACA,WAAA;EACA,UAAA;EACA,qBCsL4B;EJhYtB,iCAAA;EG6MN,oBAAA;AFUF;ADzXI;EGwWJ;IH/LQ,iBAAA;ECoNN;AACF;AEbE;EACE,WAAA;AFeJ;;AERA;;;;;;;EAOE,UAAA;AFWF;;AERA;EACE,YAAA;AFWF;;AEFA;EACE,oBAAA;EACA,6BAAA;AFKF;;AEGA;;;;;;;CAAA;AAWA;EACE,wBAAA;AFHF;;AEQA;EACE,UAAA;AFLF;;AEYA;EACE,aAAA;EACA,0BAAA;AFTF;;AEOA;EACE,aAAA;EACA,0BAAA;AFTF;;AEcA;EACE,qBAAA;AFXF;;AEgBA;EACE,SAAA;AFbF;;AEoBA;EACE,kBAAA;EACA,eAAA;AFjBF;;AEyBA;EACE,wBAAA;AFtBF;;AE8BA;EACE,wBAAA;AF3BF","file":"bootstrap-reboot.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color, inherit);\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color, inherit);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n$primary-text: $blue-600 !default;\n$secondary-text: $gray-600 !default;\n$success-text: $green-600 !default;\n$info-text: $cyan-700 !default;\n$warning-text: $yellow-700 !default;\n$danger-text: $red-600 !default;\n$light-text: $gray-600 !default;\n$dark-text: $gray-700 !default;\n\n$primary-bg-subtle: $blue-100 !default;\n$secondary-bg-subtle: $gray-100 !default;\n$success-bg-subtle: $green-100 !default;\n$info-bg-subtle: $cyan-100 !default;\n$warning-bg-subtle: $yellow-100 !default;\n$danger-bg-subtle: $red-100 !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n\n$primary-border-subtle: $blue-200 !default;\n$secondary-border-subtle: $gray-200 !default;\n$success-border-subtle: $green-200 !default;\n$info-border-subtle: $cyan-200 !default;\n$warning-border-subtle: $yellow-200 !default;\n$danger-border-subtle: $red-200 !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-emphasis-color: $black !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba(var(--#{$prefix}body-color-rgb), .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba(var(--#{$prefix}body-color-rgb), .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: var(--#{$prefix}secondary-color) !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}form-control-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default; //$gray-400\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc($input-border-width * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.875em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}success-text),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}success),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}danger-text),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}danger),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{rgba($body-color, .75)}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc($pagination-border-width * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc($popover-border-radius - $popover-border-width) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css
index b1156f95b..51eebfab9 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css
@@ -1,7 +1,6 @@
/*!
- * Bootstrap Reboot v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:var(--bs-link-color);text-decoration:underline}a:hover{color:var(--bs-link-hover-color)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text:#0a58ca;--bs-secondary-text:#6c757d;--bs-success-text:#146c43;--bs-info-text:#087990;--bs-warning-text:#997404;--bs-danger-text:#b02a37;--bs-light-text:#6c757d;--bs-dark-text:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#f8f9fa;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#e9ecef;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);--bs-emphasis-color:#000;--bs-form-control-bg:var(--bs-body-bg);--bs-form-control-disabled-bg:var(--bs-secondary-bg);--bs-highlight-bg:#fff3cd;--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}[data-bs-theme=dark]{--bs-body-color:#adb5bd;--bs-body-color-rgb:173,181,189;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#f8f9fa;--bs-emphasis-color-rgb:248,249,250;--bs-secondary-color:rgba(173, 181, 189, 0.75);--bs-secondary-color-rgb:173,181,189;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(173, 181, 189, 0.5);--bs-tertiary-color-rgb:173,181,189;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-emphasis-color:#fff;--bs-primary-text:#6ea8fe;--bs-secondary-text:#dee2e6;--bs-success-text:#75b798;--bs-info-text:#6edff6;--bs-warning-text:#ffda6a;--bs-danger-text:#ea868f;--bs-light-text:#f8f9fa;--bs-dark-text:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#212529;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#495057;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#055160;--bs-warning-border-subtle:#664d03;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:#fff;--bs-link-color:#6ea8fe;--bs-link-hover-color:#9ec5fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:158,197,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color,inherit)}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */ \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map
index 28cedbd5e..a5b72f5e4 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.css","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"AACE;;;;;ACDF,MAQI,UAAA,QAAA,YAAA,QAAA,YAAA,QAAA,UAAA,QAAA,SAAA,QAAA,YAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAAA,UAAA,QAAA,WAAA,KAAA,WAAA,KAAA,UAAA,QAAA,eAAA,QAIA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAIA,aAAA,QAAA,eAAA,QAAA,aAAA,QAAA,UAAA,QAAA,aAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAIA,iBAAA,EAAA,CAAA,GAAA,CAAA,IAAA,mBAAA,GAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,EAAA,CAAA,GAAA,CAAA,GAAA,cAAA,EAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,GAAA,CAAA,GAAA,CAAA,EAAA,gBAAA,GAAA,CAAA,EAAA,CAAA,GAAA,eAAA,GAAA,CAAA,GAAA,CAAA,IAAA,cAAA,EAAA,CAAA,EAAA,CAAA,GAGF,eAAA,GAAA,CAAA,GAAA,CAAA,IACA,eAAA,CAAA,CAAA,CAAA,CAAA,EACA,oBAAA,EAAA,CAAA,EAAA,CAAA,GACA,iBAAA,GAAA,CAAA,GAAA,CAAA,IAMA,qBAAA,SAAA,CAAA,aAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBACA,oBAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UACA,cAAA,2EAOA,sBAAA,0BC4PI,oBAAA,KD1PJ,sBAAA,IACA,sBAAA,IACA,gBAAA,QAIA,aAAA,KAIA,kBAAA,IACA,kBAAA,MACA,kBAAA,QACA,8BAAA,qBAEA,mBAAA,SACA,sBAAA,QACA,sBAAA,OACA,sBAAA,KACA,uBAAA,KACA,wBAAA,MAGA,gBAAA,QACA,sBAAA,QAEA,gBAAA,QAEA,kBAAA,QExDF,EC8DA,QADA,SD1DE,WAAA,WAeE,8CANJ,MAOM,gBAAA,QAcN,KACE,OAAA,EACA,YAAA,2BDmPI,UAAA,yBCjPJ,YAAA,2BACA,YAAA,2BACA,MAAA,qBACA,WAAA,0BACA,iBAAA,kBACA,yBAAA,KACA,4BAAA,YASF,GACE,OAAA,KAAA,EACA,MAAA,QACA,OAAA,EACA,WAAA,IAAA,MACA,QAAA,IAUF,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAGA,YAAA,IACA,YAAA,IAIF,GD6MQ,UAAA,uBAlKJ,0BC3CJ,GDoNQ,UAAA,QC/MR,GDwMQ,UAAA,sBAlKJ,0BCtCJ,GD+MQ,UAAA,MC1MR,GDmMQ,UAAA,oBAlKJ,0BCjCJ,GD0MQ,UAAA,SCrMR,GD8LQ,UAAA,sBAlKJ,0BC5BJ,GDqMQ,UAAA,QChMR,GDqLM,UAAA,QChLN,GDgLM,UAAA,KCrKN,EACE,WAAA,EACA,cAAA,KAUF,YACE,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,iCAAA,KAAA,yBAAA,KAMF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QAMF,GCqBA,GDnBE,aAAA,KCyBF,GDtBA,GCqBA,GDlBE,WAAA,EACA,cAAA,KAGF,MCsBA,MACA,MAFA,MDjBE,cAAA,EAGF,GACE,YAAA,IAKF,GACE,cAAA,MACA,YAAA,EAMF,WACE,OAAA,EAAA,EAAA,KAQF,ECWA,ODTE,YAAA,OAQF,MDmFM,UAAA,OC5EN,KACE,QAAA,QACA,iBAAA,uBASF,ICHA,IDKE,SAAA,SD+DI,UAAA,MC7DJ,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAKN,EACE,MAAA,qBACA,gBAAA,UAEA,QACE,MAAA,2BAWF,2BAAA,iCAEE,MAAA,QACA,gBAAA,KCPJ,KACA,IDaA,ICZA,KDgBE,YAAA,yBDqBI,UAAA,ICbN,IACE,QAAA,MACA,WAAA,EACA,cAAA,KACA,SAAA,KDSI,UAAA,OCJJ,SDII,UAAA,QCFF,MAAA,QACA,WAAA,OAIJ,KDHM,UAAA,OCKJ,MAAA,qBACA,UAAA,WAGA,OACE,MAAA,QAIJ,IACE,QAAA,SAAA,QDfI,UAAA,OCiBJ,MAAA,kBACA,iBAAA,qBEpSE,cAAA,OFuSF,QACE,QAAA,EDtBE,UAAA,ICiCN,OACE,OAAA,EAAA,EAAA,KAMF,ICjCA,IDmCE,eAAA,OAQF,MACE,aAAA,OACA,gBAAA,SAGF,QACE,YAAA,MACA,eAAA,MACA,MAAA,QACA,WAAA,KAOF,GAEE,WAAA,QACA,WAAA,qBCxCF,MAGA,GAFA,MAGA,GDuCA,MCzCA,GD+CE,aAAA,QACA,aAAA,MACA,aAAA,EAQF,MACE,QAAA,aAMF,OAEE,cAAA,EAQF,iCACE,QAAA,ECtDF,OD2DA,MCzDA,SADA,OAEA,SD6DE,OAAA,EACA,YAAA,QDrHI,UAAA,QCuHJ,YAAA,QAIF,OC5DA,OD8DE,eAAA,KAKF,cACE,OAAA,QAGF,OAGE,UAAA,OAGA,gBACE,QAAA,EAOJ,0IACE,QAAA,eClEF,cACA,aACA,cDwEA,OAIE,mBAAA,OCxEF,6BACA,4BACA,6BDyEI,sBACE,OAAA,QAON,mBACE,QAAA,EACA,aAAA,KAKF,SACE,OAAA,SAUF,SACE,UAAA,EACA,QAAA,EACA,OAAA,EACA,OAAA,EAQF,OACE,MAAA,KACA,MAAA,KACA,QAAA,EACA,cAAA,MD1MM,UAAA,sBC6MN,YAAA,QD/WE,0BCwWJ,OD/LQ,UAAA,QCwMN,SACE,MAAA,KChFJ,kCDuFA,uCCxFA,mCADA,+BAGA,oCAJA,6BAKA,mCD4FE,QAAA,EAGF,4BACE,OAAA,KASF,cACE,eAAA,KACA,mBAAA,UAmBF,4BACE,mBAAA,KAKF,+BACE,QAAA,EAOF,6BACE,KAAA,QACA,mBAAA,OAFF,uBACE,KAAA,QACA,mBAAA,OAKF,OACE,QAAA,aAKF,OACE,OAAA,EAOF,QACE,QAAA,UACA,OAAA,QAQF,SACE,eAAA,SAQF,SACE,QAAA","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","dist/css/bootstrap-reboot.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","/*!\n * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color, inherit);\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color, inherit);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css
index c8238cace..6ed43aed8 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css
@@ -1,10 +1,10 @@
/*!
- * Bootstrap Reboot v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
-:root {
+:root,
+[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
@@ -44,6 +44,30 @@
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
+ --bs-primary-text: #0a58ca;
+ --bs-secondary-text: #6c757d;
+ --bs-success-text: #146c43;
+ --bs-info-text: #087990;
+ --bs-warning-text: #997404;
+ --bs-danger-text: #b02a37;
+ --bs-light-text: #6c757d;
+ --bs-dark-text: #495057;
+ --bs-primary-bg-subtle: #cfe2ff;
+ --bs-secondary-bg-subtle: #f8f9fa;
+ --bs-success-bg-subtle: #d1e7dd;
+ --bs-info-bg-subtle: #cff4fc;
+ --bs-warning-bg-subtle: #fff3cd;
+ --bs-danger-bg-subtle: #f8d7da;
+ --bs-light-bg-subtle: #fcfcfd;
+ --bs-dark-bg-subtle: #ced4da;
+ --bs-primary-border-subtle: #9ec5fe;
+ --bs-secondary-border-subtle: #e9ecef;
+ --bs-success-border-subtle: #a3cfbb;
+ --bs-info-border-subtle: #9eeaf9;
+ --bs-warning-border-subtle: #ffe69c;
+ --bs-danger-border-subtle: #f1aeb5;
+ --bs-light-border-subtle: #e9ecef;
+ --bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
@@ -56,7 +80,25 @@
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
+ --bs-emphasis-color: #000;
+ --bs-emphasis-color-rgb: 0, 0, 0;
+ --bs-secondary-color: rgba(33, 37, 41, 0.75);
+ --bs-secondary-color-rgb: 33, 37, 41;
+ --bs-secondary-bg: #e9ecef;
+ --bs-secondary-bg-rgb: 233, 236, 239;
+ --bs-tertiary-color: rgba(33, 37, 41, 0.5);
+ --bs-tertiary-color-rgb: 33, 37, 41;
+ --bs-tertiary-bg: #f8f9fa;
+ --bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-link-color: #0d6efd;
+ --bs-link-color-rgb: 13, 110, 253;
+ --bs-link-decoration: underline;
+ --bs-link-hover-color: #0a58ca;
+ --bs-link-hover-color-rgb: 10, 88, 202;
+ --bs-code-color: #d63384;
+ --bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
@@ -67,10 +109,70 @@
--bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem;
- --bs-link-color: #0d6efd;
- --bs-link-hover-color: #0a58ca;
- --bs-code-color: #d63384;
+ --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
+ --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-emphasis-color: #000;
+ --bs-form-control-bg: var(--bs-body-bg);
+ --bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd;
+ --bs-breakpoint-xs: 0;
+ --bs-breakpoint-sm: 576px;
+ --bs-breakpoint-md: 768px;
+ --bs-breakpoint-lg: 992px;
+ --bs-breakpoint-xl: 1200px;
+ --bs-breakpoint-xxl: 1400px;
+}
+
+[data-bs-theme=dark] {
+ --bs-body-color: #adb5bd;
+ --bs-body-color-rgb: 173, 181, 189;
+ --bs-body-bg: #212529;
+ --bs-body-bg-rgb: 33, 37, 41;
+ --bs-emphasis-color: #f8f9fa;
+ --bs-emphasis-color-rgb: 248, 249, 250;
+ --bs-secondary-color: rgba(173, 181, 189, 0.75);
+ --bs-secondary-color-rgb: 173, 181, 189;
+ --bs-secondary-bg: #343a40;
+ --bs-secondary-bg-rgb: 52, 58, 64;
+ --bs-tertiary-color: rgba(173, 181, 189, 0.5);
+ --bs-tertiary-color-rgb: 173, 181, 189;
+ --bs-tertiary-bg: #2b3035;
+ --bs-tertiary-bg-rgb: 43, 48, 53;
+ --bs-emphasis-color: #fff;
+ --bs-primary-text: #6ea8fe;
+ --bs-secondary-text: #dee2e6;
+ --bs-success-text: #75b798;
+ --bs-info-text: #6edff6;
+ --bs-warning-text: #ffda6a;
+ --bs-danger-text: #ea868f;
+ --bs-light-text: #f8f9fa;
+ --bs-dark-text: #dee2e6;
+ --bs-primary-bg-subtle: #031633;
+ --bs-secondary-bg-subtle: #212529;
+ --bs-success-bg-subtle: #051b11;
+ --bs-info-bg-subtle: #032830;
+ --bs-warning-bg-subtle: #332701;
+ --bs-danger-bg-subtle: #2c0b0e;
+ --bs-light-bg-subtle: #343a40;
+ --bs-dark-bg-subtle: #1a1d20;
+ --bs-primary-border-subtle: #084298;
+ --bs-secondary-border-subtle: #495057;
+ --bs-success-border-subtle: #0f5132;
+ --bs-info-border-subtle: #055160;
+ --bs-warning-border-subtle: #664d03;
+ --bs-danger-border-subtle: #842029;
+ --bs-light-border-subtle: #495057;
+ --bs-dark-border-subtle: #343a40;
+ --bs-heading-color: #fff;
+ --bs-link-color: #6ea8fe;
+ --bs-link-hover-color: #9ec5fe;
+ --bs-link-color-rgb: 110, 168, 254;
+ --bs-link-hover-color-rgb: 158, 197, 254;
+ --bs-code-color: #e685b5;
+ --bs-border-color: #495057;
+ --bs-border-color-translucent: rgba(255, 255, 255, 0.15);
}
*,
@@ -102,7 +204,7 @@ hr {
margin: 1rem 0;
color: inherit;
border: 0;
- border-top: 1px solid;
+ border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
@@ -111,6 +213,7 @@ h6, h5, h4, h3, h2, h1 {
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
+ color: var(--bs-heading-color, inherit);
}
h1 {
@@ -239,11 +342,11 @@ sup {
}
a {
- color: var(--bs-link-color);
+ color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
- color: var(--bs-link-hover-color);
+ --bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
@@ -310,7 +413,7 @@ table {
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
- color: #6c757d;
+ color: var(--bs-secondary-color);
text-align: right;
}
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css.map
index 8f3742cbd..99b71a28e 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"AACE;;;;;EAAA;ACDF;EAQI,kBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,kBAAA;EAAA,iBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAAA,kBAAA;EAAA,gBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,uBAAA;EAIA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAIA,qBAAA;EAAA,uBAAA;EAAA,qBAAA;EAAA,kBAAA;EAAA,qBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAIA,8BAAA;EAAA,iCAAA;EAAA,6BAAA;EAAA,2BAAA;EAAA,6BAAA;EAAA,4BAAA;EAAA,6BAAA;EAAA,yBAAA;EAGF,6BAAA;EACA,uBAAA;EACA,+BAAA;EACA,+BAAA;EAMA,qNAAA;EACA,yGAAA;EACA,yFAAA;EAOA,gDAAA;EC4PI,yBALI;EDrPR,0BAAA;EACA,0BAAA;EACA,wBAAA;EAIA,kBAAA;EAIA,sBAAA;EACA,wBAAA;EACA,0BAAA;EACA,mDAAA;EAEA,4BAAA;EACA,8BAAA;EACA,6BAAA;EACA,2BAAA;EACA,4BAAA;EACA,8BAAA;EAGA,wBAAA;EACA,8BAAA;EAEA,wBAAA;EAEA,0BAAA;AEEF;;AC1DA;;;EAGE,sBAAA;AD6DF;;AC9CI;EANJ;IAOM,uBAAA;EDkDJ;AACF;;ACrCA;EACE,SAAA;EACA,uCAAA;EFmPI,mCALI;EE5OR,uCAAA;EACA,uCAAA;EACA,2BAAA;EACA,qCAAA;EACA,mCAAA;EACA,8BAAA;EACA,6CAAA;ADwCF;;AC/BA;EACE,cAAA;EACA,cCijB4B;EDhjB5B,SAAA;EACA,qBAAA;EACA,aCujB4B;AFrhB9B;;ACxBA;EACE,aAAA;EACA,qBCwf4B;EDrf5B,gBCwf4B;EDvf5B,gBCwf4B;AF/d9B;;ACrBA;EF6MQ,iCAAA;ACpLR;ADkBI;EE3CJ;IFoNQ,iBAAA;ECvLN;AACF;;ACzBA;EFwMQ,iCAAA;AC3KR;ADSI;EEtCJ;IF+MQ,eAAA;EC9KN;AACF;;AC7BA;EFmMQ,+BAAA;AClKR;ADAI;EEjCJ;IF0MQ,kBAAA;ECrKN;AACF;;ACjCA;EF8LQ,iCAAA;ACzJR;ADTI;EE5BJ;IFqMQ,iBAAA;EC5JN;AACF;;ACrCA;EFqLM,kBALI;ACvIV;;ACpCA;EFgLM,eALI;ACnIV;;AC7BA;EACE,aAAA;EACA,mBCmS0B;AFnQ5B;;ACtBA;EACE,yCAAA;EAAA,iCAAA;EACA,YAAA;EACA,sCAAA;EAAA,8BAAA;ADyBF;;ACnBA;EACE,mBAAA;EACA,kBAAA;EACA,oBAAA;ADsBF;;AChBA;;EAEE,mBAAA;ADmBF;;AChBA;;;EAGE,aAAA;EACA,mBAAA;ADmBF;;AChBA;;;;EAIE,gBAAA;ADmBF;;AChBA;EACE,gBC6X4B;AF1W9B;;ACdA;EACE,qBAAA;EACA,eAAA;ADiBF;;ACXA;EACE,gBAAA;ADcF;;ACNA;;EAEE,mBCsW4B;AF7V9B;;ACDA;EFmFM,kBALI;ACzEV;;ACEA;EACE,iBC+a4B;ED9a5B,wCAAA;ADCF;;ACQA;;EAEE,kBAAA;EF+DI,iBALI;EExDR,cAAA;EACA,wBAAA;ADLF;;ACQA;EAAM,eAAA;ADJN;;ACKA;EAAM,WAAA;ADDN;;ACMA;EACE,2BAAA;EACA,0BCqKwC;AFxK1C;ACKE;EACE,iCAAA;ADHJ;;ACcE;EAEE,cAAA;EACA,qBAAA;ADZJ;;ACmBA;;;;EAIE,qCCkR4B;EH7PxB,cALI;AC/BV;;ACuBA;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;EFSI,kBALI;ACvBV;ACwBE;EFII,kBALI;EEGN,cAAA;EACA,kBAAA;ADtBJ;;AC0BA;EFHM,kBALI;EEUR,2BAAA;EACA,qBAAA;ADvBF;AC0BE;EACE,cAAA;ADxBJ;;AC4BA;EACE,2BAAA;EFfI,kBALI;EEsBR,wBCuyCkC;EDtyClC,sCCuyCkC;EC3kDhC,sBAAA;AH4QJ;AC2BE;EACE,UAAA;EFtBE,cALI;ACGV;;ACmCA;EACE,gBAAA;ADhCF;;ACsCA;;EAEE,sBAAA;ADnCF;;AC2CA;EACE,oBAAA;EACA,yBAAA;ADxCF;;AC2CA;EACE,mBCsT4B;EDrT5B,sBCqT4B;EDpT5B,cCjVS;EDkVT,iBAAA;ADxCF;;AC+CA;EAEE,mBAAA;EACA,gCAAA;AD7CF;;ACgDA;;;;;;EAME,qBAAA;EACA,mBAAA;EACA,eAAA;AD7CF;;ACqDA;EACE,qBAAA;ADlDF;;ACwDA;EAEE,gBAAA;ADtDF;;AC8DA;EACE,UAAA;AD3DF;;ACgEA;;;;;EAKE,SAAA;EACA,oBAAA;EFrHI,kBALI;EE4HR,oBAAA;AD7DF;;ACiEA;;EAEE,oBAAA;AD9DF;;ACmEA;EACE,eAAA;ADhEF;;ACmEA;EAGE,iBAAA;ADlEF;ACqEE;EACE,UAAA;ADnEJ;;AC0EA;EACE,wBAAA;ADvEF;;AC+EA;;;;EAIE,0BAAA;AD5EF;AC+EI;;;;EACE,eAAA;AD1EN;;ACiFA;EACE,UAAA;EACA,kBAAA;AD9EF;;ACmFA;EACE,gBAAA;ADhFF;;AC0FA;EACE,YAAA;EACA,UAAA;EACA,SAAA;EACA,SAAA;ADvFF;;AC+FA;EACE,YAAA;EACA,WAAA;EACA,UAAA;EACA,qBC8I4B;EHxVtB,iCAAA;EE6MN,oBAAA;AD7FF;ADlRI;EEwWJ;IF/LQ,iBAAA;EC6GN;AACF;AC0FE;EACE,YAAA;ADxFJ;;AC+FA;;;;;;;EAOE,UAAA;AD5FF;;AC+FA;EACE,YAAA;AD5FF;;ACqGA;EACE,oBAAA;EACA,6BAAA;ADlGF;;AAnbA;;;;EHAE,cAAA;ACDF;AGyiBA;EACE,wBAAA;AD1GF;;AC+GA;EACE,UAAA;AD5GF;;ACmHA;EACE,aAAA;EACA,0BAAA;ADhHF;;AC8GA;EACE,aAAA;EACA,0BAAA;ADhHF;;ACqHA;EACE,qBAAA;ADlHF;;ACuHA;EACE,SAAA;ADpHF;;AC2HA;EACE,kBAAA;EACA,eAAA;ADxHF;;ACgIA;EACE,wBAAA;AD7HF;;ACqIA;EACE,wBAAA;ADlIF","file":"bootstrap-reboot.rtl.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Reboot v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"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R;ADhHI;EG5BJ;IHqMQ,iBAAA;ECrDN;AACF;;AE5IA;EHqLM,kBALI;AChCV;;AE3IA;EHgLM,eALI;AC5BV;;AEpIA;EACE,aAAA;EACA,mBC2U0B;AHpM5B;;AE7HA;EACE,yCAAA;EAAA,iCAAA;EACA,YAAA;EACA,sCAAA;EAAA,8BAAA;AFgIF;;AE1HA;EACE,mBAAA;EACA,kBAAA;EACA,oBAAA;AF6HF;;AEvHA;;EAEE,mBAAA;AF0HF;;AEvHA;;;EAGE,aAAA;EACA,mBAAA;AF0HF;;AEvHA;;;;EAIE,gBAAA;AF0HF;;AEvHA;EACE,gBCqa4B;AH3S9B;;AErHA;EACE,qBAAA;EACA,eAAA;AFwHF;;AElHA;EACE,gBAAA;AFqHF;;AE7GA;;EAEE,mBC8Y4B;AH9R9B;;AExGA;EHmFM,kBALI;AC8BV;;AErGA;EACE,iBCud4B;EDtd5B,wCAAA;AFwGF;;AE/FA;;EAEE,kBAAA;EH+DI,iBALI;EGxDR,cAAA;EACA,wBAAA;AFkGF;;AE/FA;EAAM,eAAA;AFmGN;;AElGA;EAAM,WAAA;AFsGN;;AEjGA;EACE,gEAAA;EACA,0BC6MwC;AHzG1C;AElGE;EACE,mDAAA;AFoGJ;;AEzFE;EAEE,cAAA;EACA,qBAAA;AF2FJ;;AEpFA;;;;EAIE,qCCyT4B;EJpSxB,cALI;ACwEV;;AEhFA;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;EHSI,kBALI;ACgFV;AE/EE;EHII,kBALI;EGGN,cAAA;EACA,kBAAA;AFiFJ;;AE7EA;EHHM,kBALI;EGUR,2BAAA;EACA,qBAAA;AFgFF;AE7EE;EACE,cAAA;AF+EJ;;AE3EA;EACE,2BAAA;EHfI,kBALI;EGsBR,wBC42CkC;ED32ClC,sCC42CkC;EChpDhC,sBAAA;AJmXJ;AE5EE;EACE,UAAA;EHtBE,cALI;AC0GV;;AEpEA;EACE,gBAAA;AFuEF;;AEjEA;;EAEE,sBAAA;AFoEF;;AE5DA;EACE,oBAAA;EACA,yBAAA;AF+DF;;AE5DA;EACE,mBC8V4B;ED7V5B,sBC6V4B;ED5V5B,gCCqT4B;EDpT5B,iBAAA;AF+DF;;AExDA;EAEE,mBAAA;EACA,gCAAA;AF0DF;;AEvDA;;;;;;EAME,qBAAA;EACA,mBAAA;EACA,eAAA;AF0DF;;AElDA;EACE,qBAAA;AFqDF;;AE/CA;EAEE,gBAAA;AFiDF;;AEzCA;EACE,UAAA;AF4CF;;AEvCA;;;;;EAKE,SAAA;EACA,oBAAA;EHrHI,kBALI;EG4HR,oBAAA;AF0CF;;AEtCA;;EAEE,oBAAA;AFyCF;;AEpCA;EACE,eAAA;AFuCF;;AEpCA;EAGE,iBAAA;AFqCF;AElCE;EACE,UAAA;AFoCJ;;AE7BA;EACE,wBAAA;AFgCF;;AExBA;;;;EAIE,0BAAA;AF2BF;AExBI;;;;EACE,eAAA;AF6BN;;AEtBA;EACE,UAAA;EACA,kBAAA;AFyBF;;AEpBA;EACE,gBAAA;AFuBF;;AEbA;EACE,YAAA;EACA,UAAA;EACA,SAAA;EACA,SAAA;AFgBF;;AERA;EACE,YAAA;EACA,WAAA;EACA,UAAA;EACA,qBCsL4B;EJhYtB,iCAAA;EG6MN,oBAAA;AFUF;ADzXI;EGwWJ;IH/LQ,iBAAA;ECoNN;AACF;AEbE;EACE,YAAA;AFeJ;;AERA;;;;;;;EAOE,UAAA;AFWF;;AERA;EACE,YAAA;AFWF;;AEFA;EACE,oBAAA;EACA,6BAAA;AFKF;;AA1hBA;;;;EFDA,cAAA;AEMA;AEmiBA;EACE,wBAAA;AFHF;;AEQA;EACE,UAAA;AFLF;;AEYA;EACE,aAAA;EACA,0BAAA;AFTF;;AEOA;EACE,aAAA;EACA,0BAAA;AFTF;;AEcA;EACE,qBAAA;AFXF;;AEgBA;EACE,SAAA;AFbF;;AEoBA;EACE,kBAAA;EACA,eAAA;AFjBF;;AEyBA;EACE,wBAAA;AFtBF;;AE8BA;EACE,wBAAA;AF3BF","file":"bootstrap-reboot.rtl.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color, inherit);\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color, inherit);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n$primary-text: $blue-600 !default;\n$secondary-text: $gray-600 !default;\n$success-text: $green-600 !default;\n$info-text: $cyan-700 !default;\n$warning-text: $yellow-700 !default;\n$danger-text: $red-600 !default;\n$light-text: $gray-600 !default;\n$dark-text: $gray-700 !default;\n\n$primary-bg-subtle: $blue-100 !default;\n$secondary-bg-subtle: $gray-100 !default;\n$success-bg-subtle: $green-100 !default;\n$info-bg-subtle: $cyan-100 !default;\n$warning-bg-subtle: $yellow-100 !default;\n$danger-bg-subtle: $red-100 !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n\n$primary-border-subtle: $blue-200 !default;\n$secondary-border-subtle: $gray-200 !default;\n$success-border-subtle: $green-200 !default;\n$info-border-subtle: $cyan-200 !default;\n$warning-border-subtle: $yellow-200 !default;\n$danger-border-subtle: $red-200 !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-emphasis-color: $black !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba(var(--#{$prefix}body-color-rgb), .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba(var(--#{$prefix}body-color-rgb), .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: var(--#{$prefix}secondary-color) !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}form-control-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default; //$gray-400\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc($input-border-width * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.875em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}success-text),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}success),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}danger-text),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}danger),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{rgba($body-color, .75)}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc($pagination-border-width * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc($popover-border-radius - $popover-border-width) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css
index bfe9dc5c8..2b84277d7 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css
@@ -1,7 +1,6 @@
/*!
- * Bootstrap Reboot v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:var(--bs-link-color);text-decoration:underline}a:hover{color:var(--bs-link-hover-color)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text:#0a58ca;--bs-secondary-text:#6c757d;--bs-success-text:#146c43;--bs-info-text:#087990;--bs-warning-text:#997404;--bs-danger-text:#b02a37;--bs-light-text:#6c757d;--bs-dark-text:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#f8f9fa;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#e9ecef;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);--bs-emphasis-color:#000;--bs-form-control-bg:var(--bs-body-bg);--bs-form-control-disabled-bg:var(--bs-secondary-bg);--bs-highlight-bg:#fff3cd;--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}[data-bs-theme=dark]{--bs-body-color:#adb5bd;--bs-body-color-rgb:173,181,189;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#f8f9fa;--bs-emphasis-color-rgb:248,249,250;--bs-secondary-color:rgba(173, 181, 189, 0.75);--bs-secondary-color-rgb:173,181,189;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(173, 181, 189, 0.5);--bs-tertiary-color-rgb:173,181,189;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-emphasis-color:#fff;--bs-primary-text:#6ea8fe;--bs-secondary-text:#dee2e6;--bs-success-text:#75b798;--bs-info-text:#6edff6;--bs-warning-text:#ffda6a;--bs-danger-text:#ea868f;--bs-light-text:#f8f9fa;--bs-dark-text:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#212529;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#495057;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#055160;--bs-warning-border-subtle:#664d03;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:#fff;--bs-link-color:#6ea8fe;--bs-link-hover-color:#9ec5fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:158,197,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color,inherit)}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.rtl.min.css.map */ \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map
index 995661774..5b3b163c3 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_reboot.scss","dist/css/bootstrap-reboot.rtl.css","../../scss/mixins/_border-radius.scss","bootstrap-reboot.css"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","/*!\n * Bootstrap Reboot v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-right: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-right: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: right;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: right;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: right;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","/*!\n * Bootstrap Reboot v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","dist/css/bootstrap-reboot.rtl.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/mixins/_border-radius.scss","bootstrap-reboot.css"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","/*!\n * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color, inherit);\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-right: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-right: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: right;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: right;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: right;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color, inherit);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","/*!\n * Bootstrap Reboot v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color, inherit);\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css
index 9b2900b89..05022b68b 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css
@@ -1,9 +1,180 @@
/*!
- * Bootstrap Utilities v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Utilities v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
+:root,
+[data-bs-theme=light] {
+ --bs-blue: #0d6efd;
+ --bs-indigo: #6610f2;
+ --bs-purple: #6f42c1;
+ --bs-pink: #d63384;
+ --bs-red: #dc3545;
+ --bs-orange: #fd7e14;
+ --bs-yellow: #ffc107;
+ --bs-green: #198754;
+ --bs-teal: #20c997;
+ --bs-cyan: #0dcaf0;
+ --bs-black: #000;
+ --bs-white: #fff;
+ --bs-gray: #6c757d;
+ --bs-gray-dark: #343a40;
+ --bs-gray-100: #f8f9fa;
+ --bs-gray-200: #e9ecef;
+ --bs-gray-300: #dee2e6;
+ --bs-gray-400: #ced4da;
+ --bs-gray-500: #adb5bd;
+ --bs-gray-600: #6c757d;
+ --bs-gray-700: #495057;
+ --bs-gray-800: #343a40;
+ --bs-gray-900: #212529;
+ --bs-primary: #0d6efd;
+ --bs-secondary: #6c757d;
+ --bs-success: #198754;
+ --bs-info: #0dcaf0;
+ --bs-warning: #ffc107;
+ --bs-danger: #dc3545;
+ --bs-light: #f8f9fa;
+ --bs-dark: #212529;
+ --bs-primary-rgb: 13, 110, 253;
+ --bs-secondary-rgb: 108, 117, 125;
+ --bs-success-rgb: 25, 135, 84;
+ --bs-info-rgb: 13, 202, 240;
+ --bs-warning-rgb: 255, 193, 7;
+ --bs-danger-rgb: 220, 53, 69;
+ --bs-light-rgb: 248, 249, 250;
+ --bs-dark-rgb: 33, 37, 41;
+ --bs-primary-text: #0a58ca;
+ --bs-secondary-text: #6c757d;
+ --bs-success-text: #146c43;
+ --bs-info-text: #087990;
+ --bs-warning-text: #997404;
+ --bs-danger-text: #b02a37;
+ --bs-light-text: #6c757d;
+ --bs-dark-text: #495057;
+ --bs-primary-bg-subtle: #cfe2ff;
+ --bs-secondary-bg-subtle: #f8f9fa;
+ --bs-success-bg-subtle: #d1e7dd;
+ --bs-info-bg-subtle: #cff4fc;
+ --bs-warning-bg-subtle: #fff3cd;
+ --bs-danger-bg-subtle: #f8d7da;
+ --bs-light-bg-subtle: #fcfcfd;
+ --bs-dark-bg-subtle: #ced4da;
+ --bs-primary-border-subtle: #9ec5fe;
+ --bs-secondary-border-subtle: #e9ecef;
+ --bs-success-border-subtle: #a3cfbb;
+ --bs-info-border-subtle: #9eeaf9;
+ --bs-warning-border-subtle: #ffe69c;
+ --bs-danger-border-subtle: #f1aeb5;
+ --bs-light-border-subtle: #e9ecef;
+ --bs-dark-border-subtle: #adb5bd;
+ --bs-white-rgb: 255, 255, 255;
+ --bs-black-rgb: 0, 0, 0;
+ --bs-body-color-rgb: 33, 37, 41;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
+ --bs-body-font-family: var(--bs-font-sans-serif);
+ --bs-body-font-size: 1rem;
+ --bs-body-font-weight: 400;
+ --bs-body-line-height: 1.5;
+ --bs-body-color: #212529;
+ --bs-emphasis-color: #000;
+ --bs-emphasis-color-rgb: 0, 0, 0;
+ --bs-secondary-color: rgba(33, 37, 41, 0.75);
+ --bs-secondary-color-rgb: 33, 37, 41;
+ --bs-secondary-bg: #e9ecef;
+ --bs-secondary-bg-rgb: 233, 236, 239;
+ --bs-tertiary-color: rgba(33, 37, 41, 0.5);
+ --bs-tertiary-color-rgb: 33, 37, 41;
+ --bs-tertiary-bg: #f8f9fa;
+ --bs-tertiary-bg-rgb: 248, 249, 250;
+ --bs-body-bg: #fff;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-link-color: #0d6efd;
+ --bs-link-color-rgb: 13, 110, 253;
+ --bs-link-decoration: underline;
+ --bs-link-hover-color: #0a58ca;
+ --bs-link-hover-color-rgb: 10, 88, 202;
+ --bs-code-color: #d63384;
+ --bs-highlight-bg: #fff3cd;
+ --bs-border-width: 1px;
+ --bs-border-style: solid;
+ --bs-border-color: #dee2e6;
+ --bs-border-color-translucent: rgba(0, 0, 0, 0.175);
+ --bs-border-radius: 0.375rem;
+ --bs-border-radius-sm: 0.25rem;
+ --bs-border-radius-lg: 0.5rem;
+ --bs-border-radius-xl: 1rem;
+ --bs-border-radius-2xl: 2rem;
+ --bs-border-radius-pill: 50rem;
+ --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
+ --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-emphasis-color: #000;
+ --bs-form-control-bg: var(--bs-body-bg);
+ --bs-form-control-disabled-bg: var(--bs-secondary-bg);
+ --bs-highlight-bg: #fff3cd;
+ --bs-breakpoint-xs: 0;
+ --bs-breakpoint-sm: 576px;
+ --bs-breakpoint-md: 768px;
+ --bs-breakpoint-lg: 992px;
+ --bs-breakpoint-xl: 1200px;
+ --bs-breakpoint-xxl: 1400px;
+}
+
+[data-bs-theme=dark] {
+ --bs-body-color: #adb5bd;
+ --bs-body-color-rgb: 173, 181, 189;
+ --bs-body-bg: #212529;
+ --bs-body-bg-rgb: 33, 37, 41;
+ --bs-emphasis-color: #f8f9fa;
+ --bs-emphasis-color-rgb: 248, 249, 250;
+ --bs-secondary-color: rgba(173, 181, 189, 0.75);
+ --bs-secondary-color-rgb: 173, 181, 189;
+ --bs-secondary-bg: #343a40;
+ --bs-secondary-bg-rgb: 52, 58, 64;
+ --bs-tertiary-color: rgba(173, 181, 189, 0.5);
+ --bs-tertiary-color-rgb: 173, 181, 189;
+ --bs-tertiary-bg: #2b3035;
+ --bs-tertiary-bg-rgb: 43, 48, 53;
+ --bs-emphasis-color: #fff;
+ --bs-primary-text: #6ea8fe;
+ --bs-secondary-text: #dee2e6;
+ --bs-success-text: #75b798;
+ --bs-info-text: #6edff6;
+ --bs-warning-text: #ffda6a;
+ --bs-danger-text: #ea868f;
+ --bs-light-text: #f8f9fa;
+ --bs-dark-text: #dee2e6;
+ --bs-primary-bg-subtle: #031633;
+ --bs-secondary-bg-subtle: #212529;
+ --bs-success-bg-subtle: #051b11;
+ --bs-info-bg-subtle: #032830;
+ --bs-warning-bg-subtle: #332701;
+ --bs-danger-bg-subtle: #2c0b0e;
+ --bs-light-bg-subtle: #343a40;
+ --bs-dark-bg-subtle: #1a1d20;
+ --bs-primary-border-subtle: #084298;
+ --bs-secondary-border-subtle: #495057;
+ --bs-success-border-subtle: #0f5132;
+ --bs-info-border-subtle: #055160;
+ --bs-warning-border-subtle: #664d03;
+ --bs-danger-border-subtle: #842029;
+ --bs-light-border-subtle: #495057;
+ --bs-dark-border-subtle: #343a40;
+ --bs-heading-color: #fff;
+ --bs-link-color: #6ea8fe;
+ --bs-link-hover-color: #9ec5fe;
+ --bs-link-color-rgb: 110, 168, 254;
+ --bs-link-hover-color-rgb: 158, 197, 254;
+ --bs-code-color: #e685b5;
+ --bs-border-color: #495057;
+ --bs-border-color-translucent: rgba(255, 255, 255, 0.15);
+}
+
.clearfix::after {
display: block;
clear: both;
@@ -327,6 +498,31 @@
float: none !important;
}
+.object-fit-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+}
+
+.object-fit-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+}
+
+.object-fit-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+}
+
+.object-fit-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+}
+
+.object-fit-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+}
+
.opacity-0 {
opacity: 0 !important;
}
@@ -363,6 +559,38 @@
overflow: scroll !important;
}
+.overflow-x-auto {
+ overflow-x: auto !important;
+}
+
+.overflow-x-hidden {
+ overflow-x: hidden !important;
+}
+
+.overflow-x-visible {
+ overflow-x: visible !important;
+}
+
+.overflow-x-scroll {
+ overflow-x: scroll !important;
+}
+
+.overflow-y-auto {
+ overflow-y: auto !important;
+}
+
+.overflow-y-hidden {
+ overflow-y: hidden !important;
+}
+
+.overflow-y-visible {
+ overflow-y: visible !important;
+}
+
+.overflow-y-scroll {
+ overflow-y: scroll !important;
+}
+
.d-inline {
display: inline !important;
}
@@ -404,15 +632,15 @@
}
.shadow {
- box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
+ box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;
}
.shadow-sm {
- box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+ box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;
}
.shadow-lg {
- box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+ box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;
}
.shadow-none {
@@ -585,6 +813,38 @@
border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;
}
+.border-primary-subtle {
+ border-color: var(--bs-primary-border-subtle) !important;
+}
+
+.border-secondary-subtle {
+ border-color: var(--bs-secondary-border-subtle) !important;
+}
+
+.border-success-subtle {
+ border-color: var(--bs-success-border-subtle) !important;
+}
+
+.border-info-subtle {
+ border-color: var(--bs-info-border-subtle) !important;
+}
+
+.border-warning-subtle {
+ border-color: var(--bs-warning-border-subtle) !important;
+}
+
+.border-danger-subtle {
+ border-color: var(--bs-danger-border-subtle) !important;
+}
+
+.border-light-subtle {
+ border-color: var(--bs-light-border-subtle) !important;
+}
+
+.border-dark-subtle {
+ border-color: var(--bs-dark-border-subtle) !important;
+}
+
.border-1 {
--bs-border-width: 1px;
}
@@ -1275,6 +1535,60 @@
gap: 3rem !important;
}
+.row-gap-0 {
+ row-gap: 0 !important;
+}
+
+.row-gap-1 {
+ row-gap: 0.25rem !important;
+}
+
+.row-gap-2 {
+ row-gap: 0.5rem !important;
+}
+
+.row-gap-3 {
+ row-gap: 1rem !important;
+}
+
+.row-gap-4 {
+ row-gap: 1.5rem !important;
+}
+
+.row-gap-5 {
+ row-gap: 3rem !important;
+}
+
+.column-gap-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+}
+
+.column-gap-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+}
+
+.column-gap-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+}
+
+.column-gap-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+}
+
+.column-gap-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+}
+
+.column-gap-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+}
+
.font-monospace {
font-family: var(--bs-font-monospace) !important;
}
@@ -1311,26 +1625,30 @@
font-style: normal !important;
}
-.fw-light {
- font-weight: 300 !important;
-}
-
.fw-lighter {
font-weight: lighter !important;
}
+.fw-light {
+ font-weight: 300 !important;
+}
+
.fw-normal {
font-weight: 400 !important;
}
-.fw-bold {
- font-weight: 700 !important;
+.fw-medium {
+ font-weight: 500 !important;
}
.fw-semibold {
font-weight: 600 !important;
}
+.fw-bold {
+ font-weight: 700 !important;
+}
+
.fw-bolder {
font-weight: bolder !important;
}
@@ -1459,7 +1777,7 @@
.text-muted {
--bs-text-opacity: 1;
- color: #6c757d !important;
+ color: var(--bs-secondary-color) !important;
}
.text-black-50 {
@@ -1472,6 +1790,21 @@
color: rgba(255, 255, 255, 0.5) !important;
}
+.text-body-secondary {
+ --bs-text-opacity: 1;
+ color: var(--bs-secondary-color) !important;
+}
+
+.text-body-tertiary {
+ --bs-text-opacity: 1;
+ color: var(--bs-tertiary-color) !important;
+}
+
+.text-body-emphasis {
+ --bs-text-opacity: 1;
+ color: var(--bs-emphasis-color) !important;
+}
+
.text-reset {
--bs-text-opacity: 1;
color: inherit !important;
@@ -1493,6 +1826,38 @@
--bs-text-opacity: 1;
}
+.text-primary-emphasis {
+ color: var(--bs-primary-text) !important;
+}
+
+.text-secondary-emphasis {
+ color: var(--bs-secondary-text) !important;
+}
+
+.text-success-emphasis {
+ color: var(--bs-success-text) !important;
+}
+
+.text-info-emphasis {
+ color: var(--bs-info-text) !important;
+}
+
+.text-warning-emphasis {
+ color: var(--bs-warning-text) !important;
+}
+
+.text-danger-emphasis {
+ color: var(--bs-danger-text) !important;
+}
+
+.text-light-emphasis {
+ color: var(--bs-light-text) !important;
+}
+
+.text-dark-emphasis {
+ color: var(--bs-dark-text) !important;
+}
+
.bg-primary {
--bs-bg-opacity: 1;
background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
@@ -1553,6 +1918,21 @@
background-color: transparent !important;
}
+.bg-body-secondary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body-tertiary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body-emphasis {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
.bg-opacity-10 {
--bs-bg-opacity: 0.1;
}
@@ -1573,6 +1953,38 @@
--bs-bg-opacity: 1;
}
+.bg-primary-subtle {
+ background-color: var(--bs-primary-bg-subtle) !important;
+}
+
+.bg-secondary-subtle {
+ background-color: var(--bs-secondary-bg-subtle) !important;
+}
+
+.bg-success-subtle {
+ background-color: var(--bs-success-bg-subtle) !important;
+}
+
+.bg-info-subtle {
+ background-color: var(--bs-info-bg-subtle) !important;
+}
+
+.bg-warning-subtle {
+ background-color: var(--bs-warning-bg-subtle) !important;
+}
+
+.bg-danger-subtle {
+ background-color: var(--bs-danger-bg-subtle) !important;
+}
+
+.bg-light-subtle {
+ background-color: var(--bs-light-bg-subtle) !important;
+}
+
+.bg-dark-subtle {
+ background-color: var(--bs-dark-bg-subtle) !important;
+}
+
.bg-gradient {
background-image: var(--bs-gradient) !important;
}
@@ -1644,21 +2056,181 @@
border-top-right-radius: var(--bs-border-radius) !important;
}
+.rounded-top-0 {
+ border-top-left-radius: 0 !important;
+ border-top-right-radius: 0 !important;
+}
+
+.rounded-top-1 {
+ border-top-left-radius: var(--bs-border-radius-sm) !important;
+ border-top-right-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-top-2 {
+ border-top-left-radius: var(--bs-border-radius) !important;
+ border-top-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-top-3 {
+ border-top-left-radius: var(--bs-border-radius-lg) !important;
+ border-top-right-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-top-4 {
+ border-top-left-radius: var(--bs-border-radius-xl) !important;
+ border-top-right-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-top-5 {
+ border-top-left-radius: var(--bs-border-radius-2xl) !important;
+ border-top-right-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-top-circle {
+ border-top-left-radius: 50% !important;
+ border-top-right-radius: 50% !important;
+}
+
+.rounded-top-pill {
+ border-top-left-radius: var(--bs-border-radius-pill) !important;
+ border-top-right-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-end {
border-top-right-radius: var(--bs-border-radius) !important;
border-bottom-right-radius: var(--bs-border-radius) !important;
}
+.rounded-end-0 {
+ border-top-right-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+.rounded-end-1 {
+ border-top-right-radius: var(--bs-border-radius-sm) !important;
+ border-bottom-right-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-end-2 {
+ border-top-right-radius: var(--bs-border-radius) !important;
+ border-bottom-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-end-3 {
+ border-top-right-radius: var(--bs-border-radius-lg) !important;
+ border-bottom-right-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-end-4 {
+ border-top-right-radius: var(--bs-border-radius-xl) !important;
+ border-bottom-right-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-end-5 {
+ border-top-right-radius: var(--bs-border-radius-2xl) !important;
+ border-bottom-right-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-end-circle {
+ border-top-right-radius: 50% !important;
+ border-bottom-right-radius: 50% !important;
+}
+
+.rounded-end-pill {
+ border-top-right-radius: var(--bs-border-radius-pill) !important;
+ border-bottom-right-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-bottom {
border-bottom-right-radius: var(--bs-border-radius) !important;
border-bottom-left-radius: var(--bs-border-radius) !important;
}
+.rounded-bottom-0 {
+ border-bottom-right-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+}
+
+.rounded-bottom-1 {
+ border-bottom-right-radius: var(--bs-border-radius-sm) !important;
+ border-bottom-left-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-bottom-2 {
+ border-bottom-right-radius: var(--bs-border-radius) !important;
+ border-bottom-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-bottom-3 {
+ border-bottom-right-radius: var(--bs-border-radius-lg) !important;
+ border-bottom-left-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-bottom-4 {
+ border-bottom-right-radius: var(--bs-border-radius-xl) !important;
+ border-bottom-left-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-bottom-5 {
+ border-bottom-right-radius: var(--bs-border-radius-2xl) !important;
+ border-bottom-left-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-bottom-circle {
+ border-bottom-right-radius: 50% !important;
+ border-bottom-left-radius: 50% !important;
+}
+
+.rounded-bottom-pill {
+ border-bottom-right-radius: var(--bs-border-radius-pill) !important;
+ border-bottom-left-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-start {
border-bottom-left-radius: var(--bs-border-radius) !important;
border-top-left-radius: var(--bs-border-radius) !important;
}
+.rounded-start-0 {
+ border-bottom-left-radius: 0 !important;
+ border-top-left-radius: 0 !important;
+}
+
+.rounded-start-1 {
+ border-bottom-left-radius: var(--bs-border-radius-sm) !important;
+ border-top-left-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-start-2 {
+ border-bottom-left-radius: var(--bs-border-radius) !important;
+ border-top-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-start-3 {
+ border-bottom-left-radius: var(--bs-border-radius-lg) !important;
+ border-top-left-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-start-4 {
+ border-bottom-left-radius: var(--bs-border-radius-xl) !important;
+ border-top-left-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-start-5 {
+ border-bottom-left-radius: var(--bs-border-radius-2xl) !important;
+ border-top-left-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-start-circle {
+ border-bottom-left-radius: 50% !important;
+ border-top-left-radius: 50% !important;
+}
+
+.rounded-start-pill {
+ border-bottom-left-radius: var(--bs-border-radius-pill) !important;
+ border-top-left-radius: var(--bs-border-radius-pill) !important;
+}
+
.visible {
visibility: visible !important;
}
@@ -1667,6 +2239,26 @@
visibility: hidden !important;
}
+.z-n1 {
+ z-index: -1 !important;
+}
+
+.z-0 {
+ z-index: 0 !important;
+}
+
+.z-1 {
+ z-index: 1 !important;
+}
+
+.z-2 {
+ z-index: 2 !important;
+}
+
+.z-3 {
+ z-index: 3 !important;
+}
+
@media (min-width: 576px) {
.float-sm-start {
float: left !important;
@@ -1677,6 +2269,26 @@
.float-sm-none {
float: none !important;
}
+ .object-fit-sm-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-sm-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-sm-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-sm-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-sm-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-sm-inline {
display: inline !important;
}
@@ -2153,6 +2765,48 @@
.gap-sm-5 {
gap: 3rem !important;
}
+ .row-gap-sm-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-sm-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-sm-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-sm-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-sm-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-sm-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-sm-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-sm-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-sm-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-sm-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-sm-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-sm-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-sm-start {
text-align: left !important;
}
@@ -2173,6 +2827,26 @@
.float-md-none {
float: none !important;
}
+ .object-fit-md-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-md-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-md-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-md-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-md-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-md-inline {
display: inline !important;
}
@@ -2649,6 +3323,48 @@
.gap-md-5 {
gap: 3rem !important;
}
+ .row-gap-md-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-md-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-md-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-md-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-md-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-md-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-md-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-md-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-md-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-md-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-md-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-md-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-md-start {
text-align: left !important;
}
@@ -2669,6 +3385,26 @@
.float-lg-none {
float: none !important;
}
+ .object-fit-lg-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-lg-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-lg-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-lg-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-lg-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-lg-inline {
display: inline !important;
}
@@ -3145,6 +3881,48 @@
.gap-lg-5 {
gap: 3rem !important;
}
+ .row-gap-lg-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-lg-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-lg-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-lg-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-lg-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-lg-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-lg-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-lg-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-lg-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-lg-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-lg-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-lg-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-lg-start {
text-align: left !important;
}
@@ -3165,6 +3943,26 @@
.float-xl-none {
float: none !important;
}
+ .object-fit-xl-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-xl-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-xl-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-xl-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-xl-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-xl-inline {
display: inline !important;
}
@@ -3641,6 +4439,48 @@
.gap-xl-5 {
gap: 3rem !important;
}
+ .row-gap-xl-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-xl-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-xl-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-xl-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-xl-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-xl-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-xl-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-xl-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-xl-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-xl-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-xl-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-xl-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-xl-start {
text-align: left !important;
}
@@ -3661,6 +4501,26 @@
.float-xxl-none {
float: none !important;
}
+ .object-fit-xxl-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-xxl-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-xxl-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-xxl-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-xxl-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-xxl-inline {
display: inline !important;
}
@@ -4137,6 +4997,48 @@
.gap-xxl-5 {
gap: 3rem !important;
}
+ .row-gap-xxl-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-xxl-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-xxl-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-xxl-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-xxl-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-xxl-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-xxl-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-xxl-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-xxl-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-xxl-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-xxl-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-xxl-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-xxl-start {
text-align: left !important;
}
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css.map
index 5f67c086a..2fbc27434 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/mixins/_clearfix.scss","bootstrap-utilities.css","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/_variables.scss","../../scss/mixins/_breakpoints.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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mBQ;EAOI,8BAAA;AdmmBZ;;Ac1mBQ;EAOI,iCAAA;AdumBZ;;Ac9mBQ;EAOI,sCAAA;Ad2mBZ;;AclnBQ;EAOI,yCAAA;Ad+mBZ;;ActnBQ;EAOI,uBAAA;AdmnBZ;;Ac1nBQ;EAOI,uBAAA;AdunBZ;;Ac9nBQ;EAOI,yBAAA;Ad2nBZ;;AcloBQ;EAOI,yBAAA;Ad+nBZ;;ActoBQ;EAOI,0BAAA;AdmoBZ;;Ac1oBQ;EAOI,4BAAA;AduoBZ;;Ac9oBQ;EAOI,kCAAA;Ad2oBZ;;AclpBQ;EAOI,sCAAA;Ad+oBZ;;ActpBQ;EAOI,oCAAA;AdmpBZ;;Ac1pBQ;EAOI,kCAAA;AdupBZ;;Ac9pBQ;EAOI,yCAAA;Ad2pBZ;;AclqBQ;EAOI,wCAAA;Ad+pBZ;;ActqBQ;EAOI,wCAAA;AdmqBZ;;Ac1qBQ;EAOI,kCAAA;AduqBZ;;Ac9qBQ;EAOI,gCAAA;Ad2qBZ;;AclrBQ;EAOI,8BAAA;Ad+qBZ;;ActrBQ;EAOI,gCAAA;AdmrBZ;;Ac1rBQ;EAOI,+BAAA;AdurBZ;;Ac9rBQ;EAOI,oCAAA;Ad2rBZ;;AclsBQ;EAOI,kCAAA;Ad+rBZ;;ActsBQ;EAOI,gCAAA;AdmsBZ;;Ac1sBQ;EAOI,uCAAA;AdusBZ;;Ac9sBQ;EAOI,sCAAA;Ad2sBZ;;AcltBQ;EAOI,iCAAA;Ad+sBZ;;ActtBQ;EAOI,2BAAA;AdmtBZ;;Ac1tBQ;EAOI,iCAAA;AdutBZ;;Ac9tBQ;EAOI,+BAAA;Ad2tBZ;;AcluBQ;EAOI,6BAAA;Ad+tBZ;;ActuBQ;EAOI,+BAAA;AdmuBZ;;Ac1uBQ;EAOI,8BAAA;AduuBZ;;Ac9uBQ;EAOI,oBAAA;Ad2uBZ;;AclvBQ;EAOI,mBAAA;Ad+uBZ;;ActvBQ;EAOI,mBAAA;AdmvBZ;;Ac1vBQ;EAOI,mBAAA;AduvBZ;;Ac9vBQ;EAOI,mBAAA;Ad2vBZ;;AclwBQ;EAOI,mBAAA;Ad+vBZ;;ActwBQ;EAOI,mBAAA;AdmwBZ;;Ac1wBQ;EAOI,mBAAA;AduwBZ;;Ac9wBQ;EAOI,oBAAA;Ad2wBZ;;AclxBQ;EAOI,0BAAA;Ad+wBZ;;ActxBQ;EAOI,yBAAA;AdmxBZ;;Ac1xBQ;EAOI,uBAAA;AduxBZ;;Ac9xBQ;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AOI,6BAAA;EduhEV;AACF;AMliEI;EQGI;IAOI,sBAAA;Ed4hEV;EcniEM;IAOI,uBAAA;Ed+hEV;EctiEM;IAOI,sBAAA;EdkiEV;EcziEM;IAOI,0BAAA;EdqiEV;Ec5iEM;IAOI,gCAAA;EdwiEV;Ec/iEM;IAOI,yBAAA;Ed2iEV;EcljEM;IAOI,wBAAA;Ed8iEV;EcrjEM;IAOI,yBAAA;EdijEV;EcxjEM;IAOI,6BAAA;EdojEV;Ec3jEM;IAOI,8BAAA;EdujEV;Ec9jEM;IAOI,wBAAA;Ed0jEV;EcjkEM;IAOI,+BAAA;Ed6jEV;EcpkEM;IAOI,wBAAA;EdgkEV;EcvkEM;IAOI,yBAAA;EdmkEV;Ec1kEM;IAOI,8BAAA;EdskEV;Ec7kEM;IAOI,iCAAA;EdykEV;EchlEM;IAOI,sCAAA;Ed4kEV;EcnlEM;IAOI,yCAAA;Ed+kEV;EctlEM;IAOI,uBAAA;EdklEV;EczlEM;IAOI,uBAAA;EdqlEV;Ec5lEM;IAOI,yBAAA;EdwlEV;Ec/lEM;IAOI,yBAAA;Ed2lEV;EclmEM;IAOI,0BAAA;Ed8lEV;EcrmEM;IAOI,4BAAA;EdimEV;EcxmEM;IAOI,kCAAA;EdomEV;Ec3mEM;IAOI,sCAAA;EdumEV;Ec9mEM;IAOI,oCAAA;Ed0mEV;EcjnEM;IAOI,kCAAA;Ed6mEV;EcpnEM;IAOI,yCAAA;EdgnEV;EcvnEM;IAOI,wCAAA;EdmnEV;Ec1nEM;IAOI,wCAAA;EdsnEV;Ec7nEM;IAOI,kCAAA;EdynEV;EchoEM;IAOI,gCAAA;Ed4nEV;EcnoEM;IAOI,8BAAA;Ed+nEV;EctoEM;IAOI,gCAAA;EdkoEV;EczoEM;IAOI,+BAAA;EdqoEV;Ec5oEM;IAOI,oCAAA;EdwoEV;Ec/oEM;IAOI,kCAAA;Ed2oEV;EclpEM;IAOI,gCAAA;Ed8oEV;EcrpEM;IAOI,uCAAA;EdipEV;EcxpEM;IAOI,sCAAA;EdopEV;Ec3pEM;IAOI,iCAAA;EdupEV;Ec9pEM;IAOI,2BAAA;Ed0pEV;EcjqEM;IAOI,iCAAA;Ed6pEV;EcpqEM;IAOI,+BAAA;EdgqEV;EcvqEM;IAOI,6BAAA;EdmqEV;Ec1qEM;IAOI,+BAAA;EdsqE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gCAAA;Ed+7EV;Ect8EM;IAOI,8BAAA;Edk8EV;Ecz8EM;IAOI,gCAAA;Edq8EV;Ec58EM;IAOI,8BAAA;Edw8EV;Ec/8EM;IAOI,4BAAA;Ed28EV;Ecl9EM;IAOI,kCAAA;Ed88EV;Ecr9EM;IAOI,iCAAA;Edi9EV;Ecx9EM;IAOI,+BAAA;Edo9EV;Ec39EM;IAOI,iCAAA;Edu9EV;Ec99EM;IAOI,+BAAA;Ed09EV;Ecj+EM;IAOI,0BAAA;Ed69EV;Ecp+EM;IAOI,gCAAA;Edg+EV;Ecv+EM;IAOI,+BAAA;Edm+EV;Ec1+EM;IAOI,6BAAA;Eds+EV;Ec7+EM;IAOI,+BAAA;Edy+EV;Ech/EM;IAOI,6BAAA;Ed4+EV;Ecn/EM;IAOI,iBAAA;Ed++EV;Ect/EM;IAOI,uBAAA;Edk/EV;Ecz/EM;IAOI,sBAAA;Edq/EV;Ec5/EM;IAOI,oBAAA;Edw/EV;Ec//EM;IAOI,sBAAA;Ed2/EV;EclgFM;IAOI,oBAAA;Ed8/EV;EcrgFM;IAOI,2BAAA;EdigFV;EcxgFM;IAOI,4BAAA;EdogFV;Ec3gFM;IAOI,6BAAA;EdugFV;AACF;AMlhFI;EQGI;IAOI,sBAAA;Ed4gFV;EcnhFM;IAOI,uBAAA;Ed+gFV;EcthFM;IAOI,sBAAA;EdkhFV;EczhFM;IAOI,0BAAA;EdqhFV;Ec5hFM;IAOI,gCAAA;EdwhFV;Ec/hFM;IAOI,yBAAA;Ed2hFV;EcliFM;IAOI,wBAAA;Ed8hFV;EcriFM;IAOI,yBAAA;EdiiFV;EcxiFM;IAOI,6BAAA;EdoiFV;Ec3iFM;IAOI,8BAAA;EduiFV;Ec9iFM;IAOI,wBAAA;Ed0iFV;EcjjFM;IAOI,+BAAA;Ed6iFV;EcpjFM;IAOI,wBAAA;EdgjFV;EcvjFM;IAOI,yBAAA;EdmjFV;Ec1jFM;IAOI,8BAAA;EdsjFV;Ec7jFM;IAOI,iCAAA;EdyjFV;EchkFM;IAOI,sCAAA;Ed4jFV;EcnkFM;IAOI,yCAAA;Ed+jFV;EctkFM;IAOI,uBAAA;EdkkFV;EczkFM;IAOI,uBAAA;EdqkFV;Ec5kFM;IAOI,yBAAA;EdwkFV;Ec/kFM;IAOI,yBAAA;Ed2kFV;EcllFM;IAOI,0BAAA;Ed8kFV;Ec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A;Edu/FV;AACF;AMlgGI;EQGI;IAOI,sBAAA;Ed4/FV;EcngGM;IAOI,uBAAA;Ed+/FV;EctgGM;IAOI,sBAAA;EdkgGV;EczgGM;IAOI,0BAAA;EdqgGV;Ec5gGM;IAOI,gCAAA;EdwgGV;Ec/gGM;IAOI,yBAAA;Ed2gGV;EclhGM;IAOI,wBAAA;Ed8gGV;EcrhGM;IAOI,yBAAA;EdihGV;EcxhGM;IAOI,6BAAA;EdohGV;Ec3hGM;IAOI,8BAAA;EduhGV;Ec9hGM;IAOI,wBAAA;Ed0hGV;EcjiGM;IAOI,+BAAA;Ed6hGV;EcpiGM;IAOI,wBAAA;EdgiGV;EcviGM;IAOI,yBAAA;EdmiGV;Ec1iGM;IAOI,8BAAA;EdsiGV;Ec7iGM;IAOI,iCAAA;EdyiGV;EchjGM;IAOI,sCAAA;Ed4iGV;EcnjGM;IAOI,yCAAA;Ed+iGV;EctjGM;IAOI,uBAAA;EdkjGV;EczjGM;IAOI,uBAAA;EdqjGV;Ec5jGM;IAOI,yBAAA;EdwjGV;Ec/jGM;IAOI,yBAAA;Ed2jGV;EclkGM;IAOI,0BAAA;Ed8jGV;EcrkGM;IAOI,4BAAA;EdikGV;EcxkGM;IAOI,kCAAA;EdokGV;Ec3kGM;IAOI,sCAAA;EdukGV;Ec9kGM;IAOI,oCAAA;Ed0kGV;EcjlGM;IAOI,kCAAA;Ed6kGV;EcplGM;IAOI,yCAAA;EdglGV;EcvlGM;IAOI,wCAAA;EdmlGV;Ec1lGM;IAOI,wCAAA;EdslGV;Ec7lGM;IAOI,kCAAA;EdylGV;EchmGM;IAOI,gCAAA;Ed4lGV;EcnmGM;IAOI,8BAAA;Ed+lGV;EctmGM;IAOI,gCAAA;EdkmGV;EczmGM;IAOI,+BAAA;EdqmGV;Ec5mGM;IAOI,oCAAA;EdwmGV;Ec/mGM;IAOI,kCAAA;Ed2mGV;EclnGM;IAOI,gCAAA;Ed8mGV;EcrnGM;IAOI,uCAAA;EdinGV;EcxnGM;IAOI,sCAAA;EdonGV;Ec3nGM;IAOI,iCAAA;EdunGV;Ec9nGM;IAOI,2BAAA;Ed0nGV;EcjoGM;IAOI,iCAAA;Ed6nGV;EcpoGM;IAOI,+BAAA;EdgoGV;EcvoGM;IAOI,6BAAA;EdmoGV;Ec1oGM;IAOI,+BAAA;EdsoGV;Ec7oGM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+5GV;Ect6GM;IAOI,8BAAA;Edk6GV;Ecz6GM;IAOI,gCAAA;Edq6GV;Ec56GM;IAOI,8BAAA;Edw6GV;Ec/6GM;IAOI,4BAAA;Ed26GV;Ecl7GM;IAOI,kCAAA;Ed86GV;Ecr7GM;IAOI,iCAAA;Edi7GV;Ecx7GM;IAOI,+BAAA;Edo7GV;Ec37GM;IAOI,iCAAA;Edu7GV;Ec97GM;IAOI,+BAAA;Ed07GV;Ecj8GM;IAOI,0BAAA;Ed67GV;Ecp8GM;IAOI,gCAAA;Edg8GV;Ecv8GM;IAOI,+BAAA;Edm8GV;Ec18GM;IAOI,6BAAA;Eds8GV;Ec78GM;IAOI,+BAAA;Edy8GV;Ech9GM;IAOI,6BAAA;Ed48GV;Ecn9GM;IAOI,iBAAA;Ed+8GV;Ect9GM;IAOI,uBAAA;Edk9GV;Ecz9GM;IAOI,sBAAA;Edq9GV;Ec59GM;IAOI,oBAAA;Edw9GV;Ec/9GM;IAOI,sBAAA;Ed29GV;Ecl+GM;IAOI,oBAAA;Ed89GV;Ecr+GM;IAOI,2BAAA;Edi+GV;Ecx+GM;IAOI,4BAAA;Edo+GV;Ec3+GM;IAOI,6BAAA;Edu+GV;AACF;AMl/GI;EQGI;IAOI,sBAAA;Ed4+GV;Ecn/GM;IAOI,uBAAA;Ed++GV;Ect/GM;IAOI,sBAAA;Edk/GV;Ecz/GM;IAOI,0BAAA;Edq/GV;Ec5/GM;IAOI,gCAAA;Edw/GV;Ec//GM;IAOI,yBAAA;Ed2/GV;EclgHM;IAOI,wBAAA;Ed8/GV;EcrgHM;IAOI,yBAAA;EdigHV;EcxgHM;IAOI,6BAAA;EdogHV;Ec3gHM;IAOI,8BAAA;EdugHV;Ec9gHM;IAOI,wBAAA;Ed0gHV;EcjhHM;IAOI,+BAAA;Ed6gHV;EcphHM;IAOI,wBAAA;EdghHV;EcvhHM;IAOI,yBAAA;EdmhHV;Ec1hHM;IAOI,8BAAA;EdshHV;Ec7hHM;IAOI,iCAAA;EdyhHV;EchiHM;IAOI,sCAAA;Ed4hHV;EcniHM;IAOI,yCAAA;Ed+hHV;EctiHM;IAOI,uBAAA;EdkiHV;EcziHM;IAOI,uBAAA;EdqiHV;Ec5iHM;IAOI,yBAAA;EdwiHV;Ec/iHM;IAOI,yBAAA;Ed2iHV;EcljHM;IAOI,0BAAA;Ed8iHV;EcrjHM;IAO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","file":"bootstrap-utilities.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","/*!\n * Bootstrap Utilities v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-utilities.css.map */\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value !important; // stylelint-disable-line declaration-no-important\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-utilities.css","../../scss/mixins/_color-mode.scss","../../scss/mixins/_clearfix.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/_variables.scss","../../scss/mixins/_breakpoints.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"AACE;;;;EAAA;ACDF;;EASI,kBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,kBAAA;EAAA,iBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAAA,kBAAA;EAAA,gBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,uBAAA;EAIA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAIA,qBAAA;EAAA,uBAAA;EAAA,qBAAA;EAAA,kBAAA;EAAA,qBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAIA,8BAAA;EAAA,iCAAA;EAAA,6BAAA;EAAA,2BAAA;EAAA,6BAAA;EAAA,4BAAA;EAAA,6BAAA;EAAA,yBAAA;EAIA,0BAAA;EAAA,4BAAA;EAAA,0BAAA;EAAA,uBAAA;EAAA,0BAAA;EAAA,yBAAA;EAAA,wBAAA;EAAA,uBAAA;EAIA,+BAAA;EAAA,iCAAA;EAAA,+BAAA;EAAA,4BAAA;EAAA,+BAAA;EAAA,8BAAA;EAAA,6BAAA;EAAA,4BAAA;EAIA,mCAAA;EAAA,qCAAA;EAAA,mCAAA;EAAA,gCAAA;EAAA,mCAAA;EAAA,kCAAA;EAAA,iCAAA;EAAA,gCAAA;EAGF,6BAAA;EACA,uBAAA;EACA,+BAAA;EACA,+BAAA;EAMA,qNAAA;EACA,yGAAA;EACA,yFAAA;EAOA,gDAAA;EC+OI,yBALI;EDxOR,0BAAA;EACA,0BAAA;EACA,wBAAA;EAEA,yBAAA;EACA,gCAAA;EAEA,4CAAA;EACA,oCAAA;EACA,0BAAA;EACA,oCAAA;EAEA,0CAAA;EACA,mCAAA;EACA,yBAAA;EACA,mCAAA;EAKA,kBAAA;EACA,+BAAA;EAOA,wBAAA;EACA,iCAAA;EACA,+BAAA;EAEA,8BAAA;EACA,sCAAA;EAMA,wBAAA;EACA,0BAAA;EAGA,sBAAA;EACA,wBAAA;EACA,0BAAA;EACA,mDAAA;EAEA,4BAAA;EACA,8BAAA;EACA,6BAAA;EACA,2BAAA;EACA,4BAAA;EACA,8BAAA;EAGA,mEAAA;EACA,4EAAA;EACA,qEAAA;EACA,4EAAA;EAEA,yBAAA;EAGA,uCAAA;EACA,qDAAA;EAGA,0BAAA;EAGE,qBAAA;EAAA,yBAAA;EAAA,yBAAA;EAAA,yBAAA;EAAA,0BAAA;EAAA,2BAAA;AEFJ;;AC9GI;EHuHA,wBAAA;EACA,kCAAA;EACA,qBAAA;EACA,4BAAA;EAEA,4BAAA;EACA,sCAAA;EAEA,+CAAA;EACA,uCAAA;EACA,0BAAA;EACA,iCAAA;EAEA,6CAAA;EACA,sCAAA;EACA,yBAAA;EACA,gCAAA;EAEA,yBAAA;EAEA,0BAAA;EACA,4BAAA;EACA,0BAAA;EACA,uBAAA;EACA,0BAAA;EACA,yBAAA;EACA,wBAAA;EACA,uBAAA;EAEA,+BAAA;EACA,iCAAA;EACA,+BAAA;EACA,4BAAA;EACA,+BAAA;EACA,8BAAA;EACA,6BAAA;EACA,4BAAA;EAEA,mCAAA;EACA,qCAAA;EACA,mCAAA;EACA,gCAAA;EACA,mCAAA;EACA,kCAAA;EACA,iCAAA;EACA,gCAAA;EAEA,wBAAA;EAEA,wBAAA;EACA,8BAAA;EACA,kCAAA;EACA,wCAAA;EAEA,wBAAA;EAEA,0BAAA;EACA,wDAAA;AEhBJ;;AE7KE;EACE,cAAA;EACA,WAAA;EACA,WAAA;AFgLJ;;AGhLE;EACE,sBAAA;EACA,wEAAA;AHmLJ;;AGrLE;EACE,sBAAA;EACA,yEAAA;AHwLJ;;AG1LE;EACE,sBAAA;EACA,uEAAA;AH6LJ;;AG/LE;EACE,sBAAA;EACA,wEAAA;AHkMJ;;AGpME;EACE,sBAAA;EACA,uEAAA;AHuMJ;;AGzME;EACE,sBAAA;EACA,uEAAA;AH4MJ;;AG9ME;EACE,sBAAA;EACA,yEAAA;AHiNJ;;AGnNE;EACE,sBAAA;EACA,sEAAA;AHsNJ;;AI5NE;EACE,yBAAA;AJ+NJ;AI5NM;EAEE,yBAAA;AJ6NR;;AInOE;EACE,yBAAA;AJsOJ;AInOM;EAEE,yBAAA;AJoOR;;AI1OE;EACE,yBAAA;AJ6OJ;AI1OM;EAEE,yBAAA;AJ2OR;;AIjPE;EACE,yBAAA;AJoPJ;AIjPM;EAEE,yBAAA;AJkPR;;AIxPE;EACE,yBAAA;AJ2PJ;AIxPM;EAEE,yBAAA;AJyPR;;AI/PE;EACE,yBAAA;AJkQJ;AI/PM;EAEE,yBAAA;AJgQR;;AItQE;EACE,yBAAA;AJyQJ;AItQM;EAEE,yBAAA;AJuQR;;AI7QE;EACE,yBAAA;AJgRJ;AI7QM;EAEE,yBAAA;AJ8QR;;AKnRA;EACE,kBAAA;EACA,WAAA;ALsRF;AKpRE;EACE,cAAA;EACA,mCAAA;EACA,WAAA;ALsRJ;AKnRE;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;ALqRJ;;AKhRE;EACE,uBAAA;ALmRJ;;AKpRE;EACE,sBAAA;ALuRJ;;AKxRE;EACE,yBAAA;AL2RJ;;AK5RE;EACE,iCAAA;AL+RJ;;AMpTA;EACE,eAAA;EACA,MAAA;EACA,QAAA;EACA,OAAA;EACA,aC+jCkC;APxwBpC;;AMpTA;EACE,eAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,aCujCkC;APhwBpC;;AM/SI;EACE,wBAAA;EAAA,gBAAA;EACA,MAAA;EACA,aC2iC8B;APzvBpC;;AM/SI;EACE,wBAAA;EAAA,gBAAA;EACA,SAAA;EACA,aCqiC8B;APnvBpC;;AQnRI;EFxCA;IACE,wBAAA;IAAA,gBAAA;IACA,MAAA;IACA,aC2iC8B;EP5uBlC;EM5TE;IACE,wBAAA;IAAA,gBAAA;IACA,SAAA;IACA,aCqiC8B;EPvuBlC;AACF;AQhSI;EFxCA;IACE,wBAAA;IAAA,gBAAA;IACA,MAAA;IACA,aC2iC8B;EPhuBlC;EMxUE;IACE,wBAAA;IAAA,gBAAA;IACA,SAAA;IACA,aCqiC8B;EP3tBlC;AACF;AQ5SI;EFxCA;IACE,wBAAA;IAAA,gBAAA;IACA,MAAA;IACA,aC2iC8B;EPptBlC;EMpVE;IACE,wBAAA;IAAA,gBAAA;IACA,SAAA;IACA,aCqiC8B;EP/sBlC;AACF;AQxTI;EFxCA;IACE,wBAAA;IAAA,gBAAA;IACA,MAAA;IACA,aC2iC8B;EPxsBlC;EMhWE;IACE,wBAAA;IAAA,gBAAA;IACA,SAAA;IACA,aCqiC8B;EPnsBlC;AACF;AQpUI;EFxCA;IACE,wBAAA;IAAA,gBAAA;IACA,MAAA;IACA,aC2iC8B;EP5rBlC;EM5WE;IACE,wBAAA;IAAA,gBAAA;IACA,SAAA;IACA,aCqiC8B;EPvrBlC;AACF;AS9YA;EACE,aAAA;EACA,mBAAA;EACA,mBAAA;EACA,mBAAA;ATgZF;;AS7YA;EACE,aAAA;EACA,cAAA;EACA,sBAAA;EACA,mBAAA;ATgZF;;AUxZA;;ECIE,6BAAA;EACA,qBAAA;EACA,sBAAA;EACA,qBAAA;EACA,uBAAA;EACA,2BAAA;EACA,iCAAA;EACA,8BAAA;EACA,oBAAA;AXyZF;;AYpaE;EACE,kBAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,UL4bsC;EK3btC,WAAA;AZuaJ;;Aa/aA;ECAE,gBAAA;EACA,uBAAA;EACA,mBAAA;AdmbF;;AezbA;EACE,qBAAA;EACA,mBAAA;EACA,UAAA;EACA,eAAA;EACA,8BAAA;EACA,aRiqB4B;APrO9B;;AgBhYQ;EAOI,mCAAA;AhB6XZ;;AgBpYQ;EAOI,8BAAA;AhBiYZ;;AgBxYQ;EAOI,iCAAA;AhBqYZ;;AgB5YQ;EAOI,iCAAA;AhByYZ;;AgBhZQ;EAOI,sCAAA;AhB6YZ;;AgBpZQ;EAOI,mCAAA;AhBiZZ;;AgBxZQ;EAOI,sBAAA;AhBqZZ;;AgB5ZQ;EAOI,uBAAA;AhByZZ;;AgBhaQ;EAOI,sBAAA;AhB6ZZ;;AgBpaQ;EAOI,iCAAA;EAAA,8BAAA;AhBiaZ;;AgBxaQ;EAOI,+BAAA;EAAA,4BAAA;AhBqaZ;;AgB5aQ;EAOI,8BAAA;EAAA,2BAAA;AhByaZ;;AgBhbQ;EAOI,oCAAA;EAAA,iCAAA;AhB6aZ;;AgBpbQ;EAOI,8BAAA;EAAA,2BAAA;AhBibZ;;AgBxbQ;EAOI,qBAAA;AhBqbZ;;AgB5bQ;EAOI,wBAAA;AhBybZ;;AgBhcQ;EAOI,uBAAA;AhB6bZ;;AgBpcQ;EAOI,wBAAA;AhBicZ;;AgBxcQ;EAOI,qBAAA;AhBqcZ;;AgB5cQ;EAOI,yBAAA;AhBycZ;;AgBhdQ;EAOI,2BAAA;AhB6cZ;;AgBpdQ;EAOI,4BAAA;AhBidZ;;AgBxdQ;EAOI,2BAAA;AhBqdZ;;AgB5dQ;EAOI,2BAAA;AhBydZ;;AgBheQ;EAOI,6BAAA;AhB6dZ;;AgBpeQ;EAOI,8BAAA;AhBieZ;;AgBxeQ;EAOI,6BAAA;AhBqeZ;;AgB5eQ;EAOI,2BAAA;AhByeZ;;AgBhfQ;EAOI,6BAAA;AhB6eZ;;AgBpfQ;EAOI,8BAAA;AhBifZ;;AgBxfQ;EAOI,6BAAA;AhBqfZ;;AgB5fQ;EAOI,0BAAA;AhByfZ;;AgBhgBQ;EAOI,gCAAA;AhB6fZ;;AgBpgBQ;EAOI,yBAAA;AhBigBZ;;AgBxgBQ;EAOI,wBAAA;AhBqgBZ;;AgB5gBQ;EAOI,yBAAA;AhBygBZ;;AgBhhBQ;EAOI,6BAAA;AhB6gBZ;;AgBphBQ;EAOI,8BAAA;AhBihBZ;;AgBxhBQ;EAOI,wBAAA;AhBqhBZ;;AgB5hBQ;EAOI,+BAAA;AhByhBZ;;AgBhiBQ;EAOI,wBAAA;AhB6hBZ;;AgBpiBQ;EAOI,yEAAA;AhBiiBZ;;AgBxiBQ;EAOI,+EAAA;AhBqiBZ;;AgB5iBQ;EAOI,wEAAA;AhByiBZ;;AgBhjBQ;EAOI,2BAAA;AhB6iBZ;;AgBpjBQ;EAOI,2BAAA;AhBijBZ;;AgBxjBQ;EAOI,6BAAA;AhBqjBZ;;AgB5jBQ;EAOI,6BAAA;AhByjBZ;;AgBhkBQ;EAOI,0BAAA;AhB6jBZ;;AgBpkBQ;EAOI,mCAAA;EAAA,2BAAA;AhBikBZ;;AgBxkBQ;EAOI,iBAAA;AhBqkBZ;;AgB5kBQ;EAOI,mBAAA;AhBykBZ;;AgBhlBQ;EAOI,oBAAA;AhB6kBZ;;AgBplBQ;EAOI,oBAAA;AhBilBZ;;AgBxlBQ;EAOI,sBAAA;AhBqlBZ;;AgB5lBQ;EAOI,uBAAA;AhBylBZ;;AgBhmBQ;EAOI,kBAAA;AhB6lBZ;;AgBpmBQ;EAOI,oBAAA;AhBimBZ;;AgBxmBQ;EAOI,qBAAA;AhBqmBZ;;AgB5mBQ;EAOI,mBAAA;AhBymBZ;;AgBhnBQ;EAOI,qBAAA;AhB6mBZ;;AgBpnBQ;EAOI,sBAAA;AhBinBZ;;AgBxnBQ;EAOI,2CAAA;AhBqnBZ;;AgB5nBQ;EAOI,sCAAA;AhBynBZ;;AgBhoBQ;EAOI,sCAAA;AhB6nBZ;;AgBpoBQ;EAOI,uFAAA;AhBioBZ;;AgBxoBQ;EAOI,oBAAA;AhBqoBZ;;AgB5oBQ;EAOI,2FAAA;AhByoBZ;;AgBhpBQ;EAOI,wBAAA;AhB6oBZ;;AgBppBQ;EAOI,6FAAA;AhBipBZ;;AgBxpBQ;EAOI,0BAAA;AhBqpBZ;;AgB5pBQ;EAOI,8FAAA;AhBypBZ;;AgBhqBQ;EAOI,2BAAA;AhB6pBZ;;AgBpqBQ;EAOI,4FAAA;AhBiqBZ;;AgBxqBQ;EAOI,yBAAA;AhBqqBZ;;AgB5qBQ;EAIQ,sBAAA;EAGJ,8EAAA;AhB0qBZ;;AgBjrBQ;EAIQ,sBAAA;EAGJ,gFAAA;AhB+qBZ;;AgBtrBQ;EAIQ,sBAAA;EAGJ,8EAAA;AhBorBZ;;AgB3rBQ;EAIQ,sBAAA;EAGJ,2EAAA;AhByrBZ;;AgBhsBQ;EAIQ,sBAAA;EAGJ,8EAAA;AhB8rBZ;;AgBrsBQ;EAIQ,sBAAA;EAGJ,6EAAA;AhBmsBZ;;AgB1sBQ;EAIQ,sBAAA;EAGJ,4EAAA;AhBwsBZ;;AgB/sBQ;EAIQ,sBAAA;EAGJ,2EAAA;AhB6sBZ;;AgBptBQ;EAIQ,sBAAA;EAGJ,4EAAA;AhBktBZ;;AgBztBQ;EAOI,wDAAA;AhBstBZ;;AgB7tBQ;EAOI,0DAAA;AhB0tBZ;;AgBjuBQ;EAOI,wDAAA;AhB8tBZ;;AgBruBQ;EAOI,qDAAA;AhBkuBZ;;AgBzuBQ;EAOI,wDAAA;AhBsuBZ;;AgB7uBQ;EAOI,uDAAA;AhB0uBZ;;AgBjvBQ;EAOI,sDAAA;AhB8uBZ;;AgBrvBQ;EAOI,qDAAA;AhBkvBZ;;AgBnwBQ;EACE,sBAAA;AhBswBV;;AgBvwBQ;EACE,sBAAA;AhB0wBV;;AgB3wBQ;EACE,sBAAA;AhB8wBV;;AgB/wBQ;EACE,sBAAA;AhBkxBV;;AgBnxBQ;EACE,sBAAA;AhBsxBV;;AgBvxBQ;EACE,wBAAA;AhB0xBV;;AgB3xBQ;EACE,yBAAA;AhB8xBV;;AgB/xBQ;EACE,wBAAA;AhBkyBV;;AgBnyBQ;EACE,yBAAA;AhBsyBV;;AgBvyBQ;EACE,sBAAA;AhB0yBV;;AgBjyBQ;EAOI,qBAAA;AhB8xBZ;;AgBryBQ;EAOI,qBAAA;AhBkyBZ;;AgBzyBQ;EAOI,qBAAA;AhBsyBZ;;AgB7yBQ;EAOI,sBAAA;AhB0yBZ;;AgBjzBQ;EAOI,sBAAA;AhB8yBZ;;AgBrzBQ;EAOI,0BAAA;AhBkzBZ;;AgBzzBQ;EAOI,uBAAA;AhBszBZ;;AgB7zBQ;EAOI,2BAAA;AhB0zBZ;;AgBj0BQ;EAOI,sBAAA;AhB8zBZ;;AgBr0BQ;EAOI,sBAAA;AhBk0BZ;;AgBz0BQ;EAOI,sBAAA;AhBs0BZ;;AgB70BQ;EAOI,uBAAA;AhB00BZ;;AgBj1BQ;EAOI,uBAAA;AhB80BZ;;AgBr1BQ;EAOI,2BAAA;AhBk1BZ;;AgBz1BQ;EAOI,wBAAA;AhBs1BZ;;AgB71BQ;EAOI,4BAAA;AhB01BZ;;AgBj2BQ;EAOI,yBAAA;AhB81BZ;;AgBr2BQ;EAOI,8BAAA;AhBk2BZ;;AgBz2BQ;EAOI,iCAAA;AhBs2BZ;;AgB72BQ;EAOI,sCAAA;AhB02BZ;;AgBj3BQ;EAOI,yCAAA;AhB82BZ;;AgBr3BQ;EAOI,uBAAA;AhBk3BZ;;AgBz3BQ;EAOI,uBAAA;AhBs3BZ;;AgB73BQ;EAOI,yBAAA;AhB03BZ;;AgBj4BQ;EAOI,yBAAA;AhB83BZ;;AgBr4BQ;EAOI,0BAAA;AhBk4BZ;;AgBz4BQ;EAOI,4BAAA;AhBs4BZ;;AgB74BQ;EAOI,kCAAA;AhB04BZ;;AgBj5BQ;EAOI,sCAAA;AhB84BZ;;AgBr5BQ;EAOI,oCAAA;AhBk5BZ;;AgBz5BQ;EAOI,kCAAA;AhBs5BZ;;AgB75BQ;EAOI,yCAAA;AhB05BZ;;AgBj6BQ;EAOI,wCAAA;AhB85BZ;;AgBr6BQ;EAOI,wCAAA;AhBk6BZ;;AgBz6BQ;EAOI,kCAAA;AhBs6BZ;;AgB76BQ;EAOI,gCAAA;AhB06BZ;;AgBj7BQ;EAOI,8BAAA;AhB86BZ;;AgBr7BQ;EAOI,gCAAA;AhBk7BZ;;AgBz7BQ;EAOI,+BAAA;AhBs7BZ;;AgB77BQ;EAOI,oCAAA;AhB07BZ;;AgBj8BQ;EAOI,kCAAA;AhB87BZ;;AgBr8BQ;EAOI,gCAAA;AhBk8BZ;;AgBz8BQ;EAOI,uCAAA;AhBs8BZ;;AgB78BQ;EAOI,sCAAA;AhB08BZ;;AgBj9BQ;EAOI,iCAAA;AhB88BZ;;AgBr9BQ;EAOI,2BAAA;AhBk9BZ;;AgBz9BQ;EAOI,iCAAA;AhBs9BZ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sFV;EgBjtFM;IAOI,8BAAA;EhB6sFV;EgBptFM;IAOI,iCAAA;EhBgtFV;EgBvtFM;IAOI,sCAAA;EhBmtFV;EgB1tFM;IAOI,yCAAA;EhBstFV;EgB7tFM;IAOI,uBAAA;EhBytFV;EgBhuFM;IAOI,uBAAA;EhB4tFV;EgBnuFM;IAOI,yBAAA;EhB+tFV;EgBtuFM;IAOI,yBAAA;EhBkuFV;EgBzuFM;IAOI,0BAAA;EhBquFV;EgB5uFM;IAOI,4BAAA;EhBwuFV;EgB/uFM;IAOI,kCAAA;EhB2uFV;EgBlvFM;IAOI,sCAAA;EhB8uFV;EgBrvFM;IAOI,oCAAA;EhBivFV;EgBxvFM;IAOI,kCAAA;EhBovFV;EgB3vFM;IAOI,yCAAA;EhBuvFV;EgB9vFM;IAOI,wCAAA;EhB0vFV;EgBjwFM;IAOI,wCAAA;EhB6vFV;EgBpwFM;IAOI,kCAAA;EhBgwFV;EgBvwFM;IAOI,gCAAA;EhBmwFV;EgB1wFM;IAOI,8BAAA;EhBswFV;EgB7wFM;IAOI,gCAAA;EhBywFV;EgBhxFM;IAOI,+BAAA;EhB4wFV;EgBnxFM;IAOI,oCAAA;EhB+wFV;EgBtxFM;IAOI,kCAAA;EhBkxFV;EgBzxFM;IAOI,gCAAA;EhBqxFV;EgB5xFM;IAOI,uCAAA;EhBwxFV;EgB/xFM;IAOI,sCAAA;EhB2xFV;EgBlyFM;IAOI,iCAAA;EhB8xFV;EgBryFM;IAOI,2BAAA;EhBiyFV;EgBxyFM;IAOI,iCAAA;EhBoyFV;EgB3yFM;IAOI,+BAAA;EhBuyFV;EgB9yFM;IAOI,6BAAA;EhB0yFV;EgBjzFM;IAOI,+BAAA;EhB6yFV;EgBpzFM;IAOI,8BAAA;EhBgzFV;EgBvzFM;IAOI,oBAAA;EhBmzFV;EgB1zFM;IAOI,mBAAA;EhBszFV;EgB7zFM;IAOI,mBAAA;EhByzFV;EgBh0FM;IAOI,mBAAA;EhB4zFV;EgBn0FM;IAOI,mBAAA;EhB+zFV;EgBt0FM;IAOI,mBAAA;EhBk0FV;EgBz0FM;IAOI,mBAAA;EhBq0FV;EgB50FM;IAOI,mBAAA;EhBw0FV;EgB/0FM;IAOI,oBAAA;EhB20FV;EgBl1FM;IAOI,0BAAA;EhB80FV;EgBr1FM;IAOI,yBAAA;EhBi1FV;EgBx1FM;IAOI,uBAAA;EhBo1FV;EgB31FM;IAOI,yBAAA;EhBu1FV;EgB91FM;IAOI,uBAAA;EhB01FV;EgBj2FM;IAOI,uBAAA;EhB61FV;EgBp2FM;IAOI,0BAAA;IAAA,yBAAA;EhBi2FV;EgBx2FM;IAOI,gCAAA;IAAA,+BAAA;EhBq2FV;EgB52FM;IAOI,+BAAA;IAAA,8BAAA;EhBy2FV;EgBh3FM;IAOI,6BAAA;IAAA,4BAAA;EhB62FV;EgBp3FM;IAOI,+BAAA;IAAA,8BAAA;EhBi3FV;EgBx3FM;IAOI,6BAAA;IAAA,4BAAA;EhBq3FV;EgB53FM;IAOI,6BAAA;IAAA,4BAAA;EhBy3FV;EgBh4FM;IAOI,wBAAA;IAAA,2BAAA;EhB63FV;EgBp4FM;IAOI,8BAAA;IAAA,iCAAA;EhBi4FV;EgBx4FM;IAOI,6BAAA;IAAA,gCAAA;EhBq4FV;EgB54FM;IAOI,2BAAA;IAAA,8BAAA;EhBy4FV;EgBh5FM;IAOI,6BAAA;IAAA,gCAAA;EhB64FV;EgBp5FM;IAOI,2BAAA;IAAA,8BAAA;EhBi5FV;EgBx5FM;IAOI,2BAAA;IAAA,8BAAA;EhBq5FV;EgB55FM;IAOI,wBAAA;EhBw5FV;EgB/5FM;IAOI,8BAAA;EhB25FV;EgBl6FM;IAOI,6BAAA;EhB85FV;EgBr6FM;IAOI,2BAAA;EhBi6FV;EgBx6FM;IAOI,6BAAA;EhBo6FV;EgB36FM;IAOI,2BAAA;EhBu6FV;EgB96FM;IAOI,2BAAA;EhB06FV;EgBj7FM;IAOI,0BAAA;EhB66FV;EgBp7FM;IAOI,gCAAA;EhBg7FV;EgBv7FM;IAOI,+BAAA;EhBm7FV;EgB17FM;IAOI,6BAAA;EhBs7FV;EgB77FM;IAOI,+BAAA;EhBy7FV;EgBh8FM;IAOI,6BAAA;EhB47FV;EgBn8FM;IAOI,6BAAA;EhB+7FV;EgBt8FM;IAOI,2BAAA;EhBk8FV;EgBz8FM;IAOI,iCAAA;EhBq8FV;EgB58FM;IAOI,gCAAA;EhBw8FV;EgB/8FM;IAOI,8BAAA;EhB28FV;EgBl9FM;IAOI,gCAAA;EhB88FV;EgBr9FM;IAOI,8BAAA;EhBi9FV;EgBx9FM;IAOI,8BAAA;EhBo9FV;EgB39FM;IAOI,yBAAA;EhBu9FV;EgB99FM;IAOI,+BAAA;EhB09FV;EgBj+FM;IAOI,8BAAA;EhB69FV;EgBp+FM;IAOI,4BAAA;EhBg+FV;EgBv+FM;IAOI,8BAAA;EhBm+FV;EgB1+FM;IAOI,4BAAA;EhBs+FV;EgB7+FM;IAOI,4BAAA;EhBy+FV;EgBh/FM;IAOI,qBAAA;EhB4+FV;EgBn/FM;IAOI,2BAAA;EhB++FV;EgBt/FM;IAOI,0BAAA;EhBk/FV;EgBz/FM;IAOI,wBAAA;EhBq/FV;EgB5/FM;IAOI,0BAAA;EhBw/FV;EgB//FM;IAOI,wBAAA;EhB2/FV;EgBlgGM;IAOI,2BAAA;IAAA,0BAAA;EhB+/FV;EgBtgGM;IAOI,iCAAA;IAAA,gCAAA;EhBmgGV;EgB1gGM;IAOI,gCAAA;IAAA,+BAAA;EhBugGV;EgB9gGM;IAOI,8BAAA;IAAA,6BAAA;EhB2gGV;EgBlhGM;IAOI,gCAAA;IAAA,+BAAA;EhB+gGV;EgBthGM;IAOI,8BAAA;IAAA,6BAAA;EhBmhGV;EgB1hGM;IAOI,yBAAA;IAAA,4BAAA;EhBuhGV;EgB9hGM;IAOI,+BAAA;IAAA,kCAAA;EhB2hGV;EgBliGM;IAOI,8BAAA;IAAA,iCAAA;EhB+hGV;EgBtiGM;IAOI,4BAAA;IAAA,+BAAA;EhBmiGV;EgB1iGM;IAOI,8BAAA;IAAA,iCAAA;EhBuiGV;EgB9iGM;IAOI,4BAAA;IAAA,+BAAA;EhB2iGV;EgBljGM;IAOI,yBAAA;EhB8iGV;EgBrjGM;IAOI,+BAAA;EhBijGV;EgBxjGM;IAOI,8BAAA;EhBojGV;EgB3jGM;IAOI,4BAAA;EhBujGV;EgB9jGM;IAOI,8BAAA;EhB0jGV;EgBjkGM;IAOI,4BAAA;EhB6jGV;EgBpkGM;IAOI,2BAAA;EhBgkGV;EgBvkGM;IAOI,iCAAA;EhBmkGV;EgB1kGM;IAOI,gCAAA;EhBskGV;EgB7kGM;IAOI,8BAAA;EhBykGV;EgBhlGM;IAOI,gCAAA;EhB4kGV;EgBnlGM;IAOI,8BAAA;EhB+kGV;EgBtlGM;IAOI,4BAAA;EhBklGV;EgBzlGM;IAOI,kCAAA;EhBqlGV;EgB5lGM;IAOI,iCAAA;EhBwlGV;EgB/lGM;IAOI,+BAAA;EhB2lGV;EgBlmGM;IAOI,iCAAA;EhB8lGV;EgBrmGM;IAOI,+BAAA;EhBimGV;EgBxmGM;IAOI,0BAAA;EhBomGV;EgB3mGM;IAOI,gCAAA;EhBumGV;EgB9mGM;IAOI,+BAAA;EhB0mGV;EgBjnGM;IAOI,6BAAA;EhB6mGV;EgBpnGM;IAOI,+BAAA;EhBgnGV;EgBvnGM;IAOI,6BAAA;EhBmnGV;EgB1nGM;IAOI,iBAAA;EhBsnGV;EgB7nGM;IAOI,uBAAA;EhBynGV;EgBhoGM;IAOI,sBAAA;EhB4nGV;EgBnoGM;IAOI,oBAAA;EhB+nGV;EgBtoGM;IAOI,sBAAA;EhBkoGV;EgBzoGM;IAOI,oBAAA;EhBqoGV;EgB5oGM;IAOI,qBAAA;EhBwoGV;EgB/oGM;IAOI,2BAAA;EhB2oGV;EgBlpGM;IAOI,0BAAA;EhB8oGV;EgBrpGM;IAOI,wBAAA;EhBipGV;EgBxpGM;IAOI,0BAAA;EhBopGV;EgB3pGM;IAOI,wBAAA;EhBupGV;EgB9pGM;IAOI,6BAAA;IAAA,wBAAA;EhB0pGV;EgBjqGM;IAOI,mCAAA;IAAA,8BAAA;EhB6pGV;EgBpqGM;IAOI,kCAAA;IAAA,6BAAA;EhBgqGV;EgBvqGM;IAOI,gCAAA;IAAA,2BAAA;EhBmqGV;EgB1qGM;IAOI,kCAAA;IAAA,6BAAA;EhBsqGV;EgB7qGM;IAOI,gCAAA;IAAA,2BAAA;EhByqGV;EgBhrGM;IAOI,2BAAA;EhB4qGV;EgBnrGM;IAOI,4BAAA;EhB+qGV;EgBtrGM;IAOI,6BAAA;EhBkrGV;AACF;AQ7rGI;EQGI;IAOI,sBAAA;EhBurGV;EgB9rGM;IAOI,uBAAA;EhB0rGV;EgBjsGM;IAOI,sBAAA;EhB6rGV;EgBpsGM;IAOI,iCAAA;IAAA,8BAAA;EhBgsGV;EgBvsGM;IAOI,+BAAA;IAAA,4BAAA;EhBmsGV;EgB1sGM;IAOI,8BAAA;IAAA,2BAAA;EhBssGV;EgB7sGM;IAOI,oCAAA;IAAA,iCAAA;EhBysGV;EgBhtGM;IAOI,8BAAA;IAAA,2BAAA;EhB4sGV;EgBntGM;IAOI,0BAAA;EhB+sGV;EgBttGM;IAOI,gCAAA;EhBktGV;EgBztGM;IAOI,yBAAA;EhBqtGV;EgB5tGM;IAOI,wBAAA;EhBwtGV;EgB/tGM;IAOI,yBAAA;EhB2tGV;EgBluGM;IAOI,6BAAA;EhB8tGV;EgBruGM;IAOI,8BAAA;EhBiuGV;EgBxuGM;IAOI,wBAAA;EhBouGV;EgB3uGM;IAOI,+BAAA;EhBuuGV;EgB9uGM;IAOI,wBAAA;EhB0uGV;EgBjvGM;IAOI,yBAAA;EhB6uGV;EgBpvGM;IAOI,8BAAA;EhBgvGV;EgBvvGM;IAOI,iCAAA;EhBmvGV;EgB1vGM;IAOI,sCAAA;EhBsvGV;EgB7vGM;IAOI,yCAAA;EhByvGV;EgBhwGM;IAOI,uBAAA;EhB4vGV;EgBnwGM;IAOI,uBAAA;EhB+vGV;EgBtwGM;IAOI,yBAAA;EhBkwGV;EgBzwGM;IAOI,yBAAA;EhBqwGV;EgB5wGM;IAOI,0BAAA;EhBwwGV;EgB/wGM;IAOI,4BAAA;EhB2wGV;EgBlxGM;IAOI,kCAAA;EhB8wGV;EgBrxGM;IAOI,sCAAA;EhBixGV;EgBxxGM;IAOI,oCAAA;EhBoxGV;EgB3xGM;IAOI,kCAAA;EhBuxGV;EgB9xGM;IAOI,yCAAA;EhB0xGV;EgBjyGM;IAOI,wCAAA;EhB6xGV;EgBpyGM;IAOI,wCAAA;EhBgyGV;EgBvyGM;IAOI,kCAAA;EhBmyGV;EgB1yGM;IAOI,gCAAA;EhBsyGV;EgB7yGM;IAOI,8BAAA;EhByyGV;EgBhzGM;IAOI,gCAAA;EhB4yGV;EgBnzGM;IAOI,+BAAA;EhB+yGV;EgBtzGM;IAOI,oCAAA;EhBkzGV;EgBzzGM;IAOI,kCAAA;EhBqzGV;EgB5zGM;IAOI,gCAAA;EhBwzGV;EgB/zGM;IAOI,uCAAA;EhB2zGV;EgBl0GM;IAOI,sCAAA;EhB8zGV;EgBr0GM;IAOI,iCAAA;EhBi0GV;EgBx0GM;IAOI,2BAAA;EhBo0GV;EgB30GM;IAOI,iCAAA;EhBu0GV;EgB90GM;IAOI,+BAAA;EhB00GV;EgBj1GM;IAOI,6BAAA;EhB60GV;EgBp1GM;IAOI,+BAAA;EhBg1GV;EgBv1GM;IAOI,8BAAA;EhBm1GV;EgB11GM;IAOI,oBAAA;EhBs1GV;EgB71GM;IAOI,mBAAA;EhBy1GV;EgBh2GM;IAOI,mBAAA;EhB41GV;EgBn2GM;IAOI,mBAAA;EhB+1GV;EgBt2GM;IAOI,mBAAA;EhBk2GV;EgBz2GM;IAOI,mBAAA;EhBq2GV;EgB52GM;IAOI,mBAAA;EhBw2GV;EgB/2GM;IAOI,mBAAA;EhB22GV;EgBl3GM;IAOI,oBAAA;EhB82GV;EgBr3GM;IAOI,0BAAA;EhBi3GV;EgBx3GM;IAOI,yBAAA;EhBo3GV;EgB33GM;IAOI,uBAAA;EhBu3GV;EgB93GM;IAOI,yBAAA;EhB03GV;EgBj4GM;IAOI,uBAAA;EhB63GV;EgBp4GM;IAOI,uBAAA;EhBg4GV;EgBv4GM;IAOI,0BAAA;IAAA,yBAAA;EhBo4GV;EgB34GM;IAOI,gCAAA;IAAA,+BAAA;EhBw4GV;EgB/4GM;IAOI,+BAAA;IAAA,8BAAA;EhB44GV;EgBn5GM;IAOI,6BAAA;IAAA,4BAAA;EhBg5GV;EgBv5GM;IAOI,+BAAA;IAAA,8BAAA;EhBo5GV;EgB35GM;IAOI,6BAAA;IAAA,4BAAA;EhBw5GV;EgB/5GM;IAOI,6BAAA;IAAA,4BAAA;EhB45GV;EgBn6GM;IAOI,wBAAA;IAAA,2BAAA;EhBg6GV;EgBv6GM;IAOI,8BAAA;IAAA,iCAAA;EhBo6GV;EgB36GM;IAOI,6BAAA;IAAA,gCAAA;EhBw6GV;EgB/6GM;IAOI,2BAAA;IAAA,8BAAA;EhB46GV;EgBn7GM;IAOI,6BAAA;IAAA,gCAAA;EhBg7GV;EgBv7GM;IAOI,2BAAA;IAAA,8BAAA;EhBo7GV;EgB37GM;IAOI,2BAAA;IAAA,8BAAA;EhBw7GV;EgB/7GM;IAOI,wBAAA;EhB27GV;EgBl8GM;IAOI,8BAAA;EhB87GV;EgBr8GM;IAOI,6BAAA;EhBi8GV;EgBx8GM;IAOI,2BAAA;EhBo8GV;EgB38GM;IAOI,6BAAA;EhBu8GV;EgB98GM;IAOI,2BAAA;EhB08GV;EgBj9GM;IAOI,2BAAA;EhB68GV;EgBp9GM;IAOI,0BAAA;EhBg9GV;EgBv9GM;IAOI,gCAAA;EhBm9GV;EgB19GM;IAOI,+BAAA;EhBs9GV;EgB79GM;IAOI,6BAAA;EhBy9GV;EgBh+GM;IAOI,+BAAA;EhB49GV;EgBn+GM;IAOI,6BAAA;EhB+9GV;EgBt+GM;IAOI,6BAAA;EhBk+GV;EgBz+GM;IAOI,2BAAA;EhBq+GV;EgB5+GM;IAOI,iCAAA;EhBw+GV;EgB/+GM;IAOI,gCAAA;EhB2+GV;EgBl/GM;IAOI,8BAAA;EhB8+GV;EgBr/GM;IAOI,gCAAA;EhBi/GV;EgBx/GM;IAOI,8BAAA;EhBo/GV;EgB3/GM;IAOI,8BAAA;EhBu/GV;EgB9/GM;IAOI,yBAAA;EhB0/GV;EgBjgHM;IAOI,+BAAA;EhB6/GV;EgBpgHM;IAOI,8BAAA;EhBggHV;EgBvgHM;IAOI,4BAAA;EhBmgHV;EgB1gHM;IAOI,8BAAA;EhBsgHV;EgB7gHM;IAOI,4BAAA;EhBygHV;EgBhhHM;IAOI,4BAAA;EhB4gHV;EgBnhHM;IAOI,qBAAA;EhB+gHV;EgBthHM;IAOI,2BAAA;EhBkhHV;EgBzhHM;IAOI,0BAAA;EhBqhHV;EgB5hHM;IAOI,wBAAA;EhBwhHV;EgB/hHM;IAOI,0BAAA;EhB2hHV;EgBliHM;IAOI,wBAAA;EhB8hHV;EgBriHM;IAOI,2BAAA;IAAA,0BAAA;EhBkiHV;EgBziHM;IAOI,iCAAA;IAAA,gCAAA;EhBsiHV;EgB7iHM;IAOI,gCAAA;IAAA,+BAAA;EhB0iHV;EgBjjHM;IAOI,8BAAA;IAAA,6BAAA;EhB8iHV;EgBrjHM;IAOI,gCAAA;IAAA,+BAAA;EhBkjHV;EgBzjHM;IAOI,8BAAA;IAAA,6BAAA;EhBsjHV;EgB7jHM;IAOI,yBAAA;IAAA,4BAAA;EhB0jHV;EgBjkHM;IAOI,+BAAA;IAAA,kCAAA;EhB8jHV;EgBrkHM;IAOI,8BAAA;IAAA,iCAAA;EhBkkHV;EgBzkHM;IAOI,4BAAA;IAAA,+BAAA;EhBskHV;EgB7kHM;IAOI,8BAAA;IAAA,iCAAA;EhB0kHV;EgBjlHM;IAOI,4BAAA;IAAA,+BAAA;EhB8kHV;EgBrlHM;IAOI,yBAAA;EhBilHV;EgBxlHM;IAOI,+BAAA;EhBolHV;EgB3lHM;IAOI,8BAAA;EhBulHV;EgB9lHM;IAOI,4BAAA;EhB0lHV;EgBjmHM;IAOI,8BAAA;EhB6lHV;EgBpmHM;IAOI,4BAAA;EhBgmHV;EgBvmHM;IAOI,2BAAA;EhBmmHV;EgB1mHM;IAOI,iCAAA;EhBsmHV;EgB7mHM;IAOI,gCAAA;EhBymHV;EgBhnHM;IAOI,8BAAA;EhB4mHV;EgBnnHM;IAOI,gCAAA;EhB+mHV;EgBtnHM;IAOI,8BAAA;EhBknHV;EgBznHM;IAOI,4BAAA;EhBqnHV;EgB5nHM;IAOI,kCAAA;EhBwnHV;EgB/nHM;IAOI,iCAAA;EhB2nHV;EgBloHM;IAOI,+BAAA;EhB8nHV;EgBroHM;IAOI,iCAAA;EhBioHV;EgBxoHM;IAOI,+BAAA;EhBooHV;EgB3oHM;IAOI,0BAAA;EhBuoHV;EgB9oHM;IAOI,gCAAA;EhB0oHV;EgBjpHM;IAOI,+BAAA;EhB6oHV;EgBppHM;IAOI,6BAAA;EhBgpHV;EgBvpHM;IAOI,+BAAA;EhBmpHV;EgB1pHM;IAOI,6BAAA;EhBspHV;EgB7pHM;IAOI,iBAAA;EhBypHV;EgBhqHM;IAOI,uBAAA;EhB4pHV;EgBnqHM;IAOI,sBAAA;EhB+pHV;EgBtqHM;IAOI,oBAAA;EhBkqHV;EgBzqHM;IAOI,sBAAA;EhBqqHV;EgB5qHM;IAOI,oBAAA;EhBwqHV;EgB/qHM;IAOI,qBAAA;EhB2qHV;EgBlrHM;IAOI,2BAAA;EhB8qHV;EgBrrHM;IAOI,0BAAA;EhBirHV;EgBxrHM;IAOI,wBAAA;EhBorHV;EgB3rHM;IAOI,0BAAA;EhBurHV;EgB9rHM;IAOI,wBAAA;EhB0rHV;EgBjsHM;IAOI,6BAAA;IAAA,wBAAA;EhB6rHV;EgBpsHM;IAOI,mCAAA;IAAA,8BAAA;EhBgsHV;EgBvsHM;IAOI,kCAAA;IAAA,6BAAA;EhBmsHV;EgB1sHM;IAOI,gCAAA;IAAA,2BAAA;EhBssHV;EgB7sHM;IAOI,kCAAA;IAAA,6BAAA;EhBysHV;EgBhtHM;IAOI,gCAAA;IAAA,2BAAA;EhB4sHV;EgBntHM;IAOI,2BAAA;EhB+sHV;EgBttHM;IAOI,4BAAA;EhBktHV;EgBztHM;IAOI,6BAAA;EhBqtHV;AACF;AQhuHI;EQGI;IAOI,sBAAA;EhB0tHV;EgBjuHM;IAOI,uBAAA;EhB6tHV;EgBpuHM;IAOI,sBAAA;EhBguHV;EgBvuHM;IAOI,iCAAA;IAAA,8BAAA;EhBmuHV;EgB1uHM;IAOI,+BAAA;IAAA,4BAAA;EhBsuHV;EgB7uHM;IAOI,8BAAA;IAAA,2BAAA;EhByuHV;EgBhvHM;IAOI,oCAAA;IAAA,iCAAA;EhB4uHV;EgBnvHM;IAOI,8BAAA;IAAA,2BAAA;EhB+uHV;EgBtvHM;IAOI,0BAAA;EhBkvHV;EgBzvHM;IAOI,gCAAA;EhBqvHV;EgB5vHM;IAOI,yBAAA;EhBwvHV;EgB/vHM;IAOI,wBAAA;EhB2vHV;EgBlwHM;IAOI,yBAAA;EhB8vHV;EgBrwHM;IAOI,6BAAA;EhBiwHV;EgBxwHM;IAOI,8BAAA;EhBowHV;EgB3wHM;IAOI,wBAAA;EhBuwHV;EgB9wHM;IAOI,+BAAA;EhB0wHV;EgBjxHM;IAOI,wBAAA;EhB6wHV;EgBpxHM;IAOI,yBAAA;EhBgxHV;EgBvxHM;IAOI,8BAAA;EhBmxHV;EgB1xHM;IAOI,iCAAA;EhBsxHV;EgB7xHM;IAOI,sCAAA;EhByxHV;EgBhyHM;IAOI,yCAAA;EhB4xHV;EgBnyHM;IAOI,uBAAA;EhB+xHV;EgBtyHM;IAOI,uBAAA;EhBkyHV;EgBzyHM;IAOI,yBAAA;EhBqyHV;EgB5yHM;IAOI,yBAAA;EhBwyHV;EgB/yHM;IAOI,0BAAA;EhB2yHV;EgBlzHM;IAOI,4BAAA;EhB8yHV;EgBrzHM;IAOI,kCAAA;EhBizHV;EgBxzHM;IAOI,sCAAA;EhBozHV;EgB3zHM;IAOI,oCAAA;EhBuzHV;EgB9zHM;IAOI,kCAAA;EhB0zHV;EgBj0HM;IAOI,yCAAA;EhB6zHV;EgBp0HM;IAOI,wCAAA;EhBg0HV;EgBv0HM;IAOI,wCAAA;EhBm0HV;EgB10HM;IAOI,kCAAA;EhBs0HV;EgB70HM;IAOI,gCAAA;EhBy0HV;EgBh1HM;IAOI,8BAAA;EhB40HV;EgBn1HM;IAOI,gCAAA;EhB+0HV;EgBt1HM;IAOI,+BAAA;EhBk1HV;EgBz1HM;IAOI,oCAAA;EhBq1HV;EgB51HM;IAOI,kCAAA;EhBw1HV;EgB/1HM;IAOI,gCAAA;EhB21HV;EgBl2HM;IAOI,uCAAA;EhB81HV;EgBr2HM;IAOI,sCAAA;EhBi2HV;EgBx2HM;IAOI,iCAAA;EhBo2HV;EgB32HM;IAOI,2BAAA;EhBu2HV;EgB92HM;IAOI,iCAAA;EhB02HV;EgBj3HM;IAOI,+BAAA;EhB62HV;EgBp3HM;IAOI,6BAAA;EhBg3HV;EgBv3HM;IAOI,+BAAA;EhBm3HV;EgB13HM;IAOI,8BAAA;EhBs3HV;EgB73HM;IAOI,oBAAA;EhBy3HV;EgBh4HM;IAOI,mBAAA;EhB43HV;EgBn4HM;IAOI,mBAAA;EhB+3HV;EgBt4HM;IAOI,mBAAA;EhBk4HV;EgBz4HM;IAOI,mBAAA;EhBq4HV;EgB54HM;IAOI,mBAAA;EhBw4HV;EgB/4HM;IAOI,mBAAA;EhB24HV;EgBl5HM;IAOI,mBAAA;EhB84HV;EgBr5HM;IAOI,oBAAA;EhBi5HV;EgBx5HM;IAOI,0BAAA;EhBo5HV;EgB35HM;IAOI,yBAAA;EhBu5HV;EgB95HM;IAOI,uBAAA;EhB05HV;EgBj6HM;IAOI,yBAAA;EhB65HV;EgBp6HM;IAOI,uBAAA;EhBg6HV;EgBv6HM;IAOI,uBAAA;EhBm6HV;EgB16HM;IAOI,0BAAA;IAAA,yBAAA;EhBu6HV;EgB96HM;IAOI,gCAAA;IAAA,+BAAA;EhB26HV;EgBl7HM;IAOI,+BAAA;IAAA,8BAAA;EhB+6HV;EgBt7HM;IAOI,6BAAA;IAAA,4BAAA;EhBm7HV;EgB17HM;IAOI,+BAAA;IAAA,8BAAA;EhBu7HV;EgB97HM;IAOI,6BAAA;IAAA,4BAAA;EhB27HV;EgBl8HM;IAOI,6BAAA;IAAA,4BAAA;EhB+7HV;EgBt8HM;IAOI,wBAAA;IAAA,2BAAA;EhBm8HV;EgB18HM;IAOI,8BAAA;IAAA,iCAAA;EhBu8HV;EgB98HM;IAOI,6BAAA;IAAA,gCAAA;EhB28HV;EgBl9HM;IAOI,2BAAA;IAAA,8BAAA;EhB+8HV;EgBt9HM;IAOI,6BAAA;IAAA,gCAAA;EhBm9HV;EgB19HM;IAOI,2BAAA;IAAA,8BAAA;EhBu9HV;EgB99HM;IAOI,2BAAA;IAAA,8BAAA;EhB29HV;EgBl+HM;IAOI,wBAAA;EhB89HV;EgBr+HM;IAOI,8BAAA;EhBi+HV;EgBx+HM;IAOI,6BAAA;EhBo+HV;EgB3+HM;IAOI,2BAAA;EhBu+HV;EgB9+HM;IAOI,6BAAA;EhB0+HV;EgBj/HM;IAOI,2BAAA;EhB6+HV;EgBp/HM;IAOI,2BAAA;EhBg/HV;EgBv/HM;IAOI,0BAAA;EhBm/HV;EgB1/HM;IAOI,gCAAA;EhBs/HV;EgB7/HM;IAOI,+BAAA;EhBy/HV;EgBhgIM;IAOI,6BAAA;EhB4/HV;EgBngIM;IAOI,+BAAA;EhB+/HV;EgBtgIM;IAOI,6BAAA;EhBkgIV;EgBzgIM;IAOI,6BAAA;EhBqgIV;EgB5gIM;IAOI,2BAAA;EhBwgIV;EgB/gIM;IAOI,iCAAA;EhB2gIV;EgBlhIM;IAOI,gCAAA;EhB8gIV;EgBrhIM;IAOI,8BAAA;EhBihIV;EgBxhIM;IAOI,gCAAA;EhBohIV;EgB3hIM;IAOI,8BAAA;EhBuhIV;EgB9hIM;IAOI,8BAAA;EhB0hIV;EgBjiIM;IAOI,yBAAA;EhB6hIV;EgBpiIM;IAOI,+BAAA;EhBgiIV;EgBviIM;IAOI,8BAAA;EhBmiIV;EgB1iIM;IAOI,4BAAA;EhBsiIV;EgB7iIM;IAOI,8BAAA;EhByiIV;EgBhjIM;IAOI,4BAAA;EhB4iIV;EgBnjIM;IAOI,4BAAA;EhB+iIV;EgBtjIM;IAOI,qBAAA;EhBkjIV;EgBzjIM;IAOI,2BAAA;EhBqjIV;EgB5jIM;IAOI,0BAAA;EhBwjIV;EgB/jIM;IAOI,wBAAA;EhB2jIV;EgBlkIM;IAOI,0BAAA;EhB8jIV;EgBrkIM;IAOI,wBAAA;EhBikIV;EgBxkIM;IAOI,2BAAA;IAAA,0BAAA;EhBqkIV;EgB5kIM;IAOI,iCAAA;IAAA,gCAAA;EhBykIV;EgBhlIM;IAOI,gCAAA;IAAA,+BAAA;EhB6kIV;EgBplIM;IAOI,8BAAA;IAAA,6BAAA;EhBilIV;EgBxlIM;IAOI,gCAAA;IAAA,+BAAA;EhBqlIV;EgB5lIM;IAOI,8BAAA;IAAA,6BAAA;EhBylIV;EgBhmIM;IAOI,yBAAA;IAAA,4BAAA;EhB6lIV;EgBpmIM;IAOI,+BAAA;IAAA,kCAAA;EhBimIV;EgBxmIM;IAOI,8BAAA;IAAA,iCAAA;EhBqmIV;EgB5mIM;IAOI,4BAAA;IAAA,+BAAA;EhBymIV;EgBhnIM;IAOI,8BAAA;IAAA,iCAAA;EhB6mIV;EgBpnIM;IAOI,4BAAA;IAAA,+BAAA;EhBinIV;EgBxnIM;IAOI,yBAAA;EhBonIV;EgB3nIM;IAOI,+BAAA;EhBunIV;EgB9nIM;IAOI,8BAAA;EhB0nIV;EgBjoIM;IAOI,4BAAA;EhB6nIV;EgBpoIM;IAOI,8BAAA;EhBgoIV;EgBvoIM;IAOI,4BAAA;EhBmoIV;EgB1oIM;IAOI,2BAAA;EhBsoIV;EgB7oIM;IAOI,iCAAA;EhByoIV;EgBhpIM;IAOI,gCAAA;EhB4oIV;EgBnpIM;IAOI,8BAAA;EhB+oIV;EgBtpIM;IAOI,gCAAA;EhBkpIV;EgBzpIM;IAOI,8BAAA;EhBqpIV;EgB5pIM;IAOI,4BAAA;EhBwpIV;EgB/pIM;IAOI,kCAAA;EhB2pIV;EgBlqIM;IAOI,iCAAA;EhB8pIV;EgBrqIM;IAOI,+BAAA;EhBiqIV;EgBxqIM;IAOI,iCAAA;EhBoqIV;EgB3qIM;IAOI,+BAAA;EhBuqIV;EgB9qIM;IAOI,0BAAA;EhB0qIV;EgBjrIM;IAOI,gCAAA;EhB6qIV;EgBprIM;IAOI,+BAAA;EhBgrIV;EgBvrIM;IAOI,6BAAA;EhBmrIV;EgB1rIM;IAOI,+BAAA;EhBsrIV;EgB7rIM;IAOI,6BAAA;EhByrIV;EgBhsIM;IAOI,iBAAA;EhB4rIV;EgBnsIM;IAOI,uBAAA;EhB+rIV;EgBtsIM;IAOI,sBAAA;EhBksIV;EgBzsIM;IAOI,oBAAA;EhBqsIV;EgB5sIM;IAOI,sBAAA;EhBwsIV;EgB/sIM;IAOI,oBAAA;EhB2sIV;EgBltIM;IAOI,qBAAA;EhB8sIV;EgBrtIM;IAOI,2BAAA;EhBitIV;EgBxtIM;IAOI,0BAAA;EhBotIV;EgB3tIM;IAOI,wBAAA;EhButIV;EgB9tIM;IAOI,0BAAA;EhB0tIV;EgBjuIM;IAOI,wBAAA;EhB6tIV;EgBpuIM;IAOI,6BAAA;IAAA,wBAAA;EhBguIV;EgBvuIM;IAOI,mCAAA;IAAA,8BAAA;EhBmuIV;EgB1uIM;IAOI,kCAAA;IAAA,6BAAA;EhBsuIV;EgB7uIM;IAOI,gCAAA;IAAA,2BAAA;EhByuIV;EgBhvIM;IAOI,kCAAA;IAAA,6BAAA;EhB4uIV;EgBnvIM;IAOI,gCAAA;IAAA,2BAAA;EhB+uIV;EgBtvIM;IAOI,2BAAA;EhBkvIV;EgBzvIM;IAOI,4BAAA;EhBqvIV;EgB5vIM;IAOI,6BAAA;EhBwvIV;AACF;AQnwII;EQGI;IAOI,sBAAA;EhB6vIV;EgBpwIM;IAOI,uBAAA;EhBgwIV;EgBvwIM;IAOI,sBAAA;EhBmwIV;EgB1wIM;IAOI,iCAAA;IAAA,8BAAA;EhBswIV;EgB7wIM;IAOI,+BAAA;IAAA,4BAAA;EhBywIV;EgBhxIM;IAOI,8BAAA;IAAA,2BAAA;EhB4wIV;EgBnxIM;IAOI,oCAAA;IAAA,iCAAA;EhB+wIV;EgBtxIM;IAOI,8BAAA;IAAA,2BAAA;EhBkxIV;EgBzxIM;IAOI,0BAAA;EhBqxIV;EgB5xIM;IAOI,gCAAA;EhBwxIV;EgB/xIM;IAOI,yBAAA;EhB2xIV;EgBlyIM;IAOI,wBAAA;EhB8xIV;EgBryIM;IAOI,yBAAA;EhBiyIV;EgBxyIM;IAOI,6BAAA;EhBoyIV;EgB3yIM;IAOI,8BAAA;EhBuyIV;EgB9yIM;IAOI,wBAAA;EhB0yIV;EgBjzIM;IAOI,+BAAA;EhB6yIV;EgBpzIM;IAOI,wBAAA;EhBgzIV;EgBvzIM;IAOI,yBAAA;EhBmzIV;EgB1zIM;IAOI,8BAAA;EhBszIV;EgB7zIM;IAOI,iCAAA;EhByzIV;EgBh0IM;IAOI,sCAAA;EhB4zIV;EgBn0IM;IAOI,yCAAA;EhB+zIV;EgBt0IM;IAOI,uBAAA;EhBk0IV;EgBz0IM;IAOI,uBAAA;EhBq0IV;EgB50IM;IAOI,yBAAA;EhBw0IV;EgB/0IM;IAOI,yBAAA;EhB20IV;EgBl1IM;IAOI,0BAAA;EhB80IV;EgBr1IM;IAOI,4BAAA;EhBi1IV;EgBx1IM;IAOI,kCAAA;EhBo1IV;EgB31IM;IAOI,sCAAA;EhBu1IV;EgB91IM;IAOI,oCAAA;EhB01IV;EgBj2IM;IAOI,kCAAA;EhB61IV;EgBp2IM;IAOI,yCAAA;EhBg2IV;EgBv2IM;IAOI,wCAAA;EhBm2IV;EgB12IM;IAOI,wCAAA;EhBs2IV;EgB72IM;IAOI,kCAAA;EhBy2IV;EgBh3IM;IAOI,gCAAA;EhB42IV;EgBn3IM;IAOI,8BAAA;EhB+2IV;EgBt3IM;IAOI,gCAAA;EhBk3IV;EgBz3IM;IAOI,+BAAA;EhBq3IV;EgB53IM;IAOI,oCAAA;EhBw3IV;EgB/3IM;IAOI,kCAAA;EhB23IV;EgBl4IM;IAOI,gCAAA;EhB83IV;EgBr4IM;IAOI,uCAAA;EhBi4IV;EgBx4IM;IAOI,sCAAA;EhBo4IV;EgB34IM;IAOI,iCAAA;EhBu4IV;EgB94IM;IAOI,2BAAA;EhB04IV;EgBj5IM;IAOI,iCAAA;EhB64IV;EgBp5IM;IAOI,+BAAA;EhBg5IV;EgBv5IM;IAOI,6BAAA;EhBm5IV;EgB15IM;IAOI,+BAAA;EhBs5IV;EgB75IM;IAOI,8BAAA;EhBy5IV;EgBh6IM;IAOI,oBAAA;EhB45IV;EgBn6IM;IAOI,mBAAA;EhB+5IV;EgBt6IM;IAOI,mBAAA;EhBk6IV;EgBz6IM;IAOI,mBAAA;EhBq6IV;EgB56IM;IAOI,mBAAA;EhBw6IV;EgB/6IM;IAOI,mBAAA;EhB26IV;EgBl7IM;IAOI,mBAAA;EhB86IV;EgBr7IM;IAOI,mBAAA;EhBi7IV;EgBx7IM;IAOI,oBAAA;EhBo7IV;EgB37IM;IAOI,0BAAA;EhBu7IV;EgB97IM;IAOI,yBAAA;EhB07IV;EgBj8IM;IAOI,uBAAA;EhB67IV;EgBp8IM;IAOI,yBAAA;EhBg8IV;EgBv8IM;IAOI,uBAAA;EhBm8IV;EgB18IM;IAOI,uBAAA;EhBs8IV;EgB78IM;IAOI,0BAAA;IAAA,yBAAA;EhB08IV;EgBj9IM;IAOI,gCAAA;IAAA,+BAAA;EhB88IV;EgBr9IM;IAOI,+BAAA;IAAA,8BAAA;EhBk9IV;EgBz9IM;IAOI,6BAAA;IAAA,4BAAA;EhBs9IV;EgB79IM;IAOI,+BAAA;IAAA,8BAAA;EhB09IV;EgBj+IM;IAOI,6BAAA;IAAA,4BAAA;EhB89IV;EgBr+IM;IAOI,6BAAA;IAAA,4BAAA;EhBk+IV;EgBz+IM;IAOI,wBAAA;IAAA,2BAAA;EhBs+IV;EgB7+IM;IAOI,8BAAA;IAAA,iCAAA;EhB0+IV;EgBj/IM;IAOI,6BAAA;IAAA,gCAAA;EhB8+IV;EgBr/IM;IAOI,2BAAA;IAAA,8BAAA;EhBk/IV;EgBz/IM;IAOI,6BAAA;IAAA,gCAAA;EhBs/IV;EgB7/IM;IAOI,2BAAA;IAAA,8BAAA;EhB0/IV;EgBjgJM;IAOI,2BAAA;IAAA,8BAAA;EhB8/IV;EgBrgJM;IAOI,wBAAA;EhBigJV;EgBxgJM;IAOI,8BAAA;EhBogJV;EgB3gJM;IAOI,6BAAA;EhBugJV;EgB9gJM;IAOI,2BAAA;EhB0gJV;EgBjhJM;IAOI,6BAAA;EhB6gJV;EgBphJM;IAOI,2BAAA;EhBghJV;EgBvhJM;IAOI,2BAAA;EhBmhJV;EgB1hJM;IAOI,0BAAA;EhBshJV;EgB7hJM;IAOI,gCAAA;EhByhJV;EgBhiJM;IAOI,+BAAA;EhB4hJV;EgBniJM;IAOI,6BAAA;EhB+hJV;EgBtiJM;IAOI,+BAAA;EhBkiJV;EgBziJM;IAOI,6BAAA;EhBqiJV;EgB5iJM;IAOI,6BAAA;EhBwiJV;EgB/iJM;IAOI,2BAAA;EhB2iJV;EgBljJM;IAOI,iCAAA;EhB8iJV;EgBrjJM;IAOI,gCAAA;EhBijJV;EgBxjJM;IAOI,8BAAA;EhBojJV;EgB3jJM;IAOI,gCAAA;EhBujJV;EgB9jJM;IAOI,8BAAA;EhB0jJV;EgBjkJM;IAOI,8BAAA;EhB6jJV;EgBpkJM;IAOI,yBAAA;EhBgkJV;EgBvkJM;IAOI,+BAAA;EhBmkJV;EgB1kJM;IAOI,8BAAA;EhBskJV;EgB7kJM;IAOI,4BAAA;EhBykJV;EgBhlJM;IAOI,8BAAA;EhB4kJV;EgBnlJM;IAOI,4BAAA;EhB+kJV;EgBtlJM;IAOI,4BAAA;EhBklJV;EgBzlJM;IAOI,qBAAA;EhBqlJV;EgB5lJM;IAOI,2BAAA;EhBwlJV;EgB/lJM;IAOI,0BAAA;EhB2lJV;EgBlmJM;IAOI,wBAAA;EhB8lJV;EgBrmJM;IAOI,0BAAA;EhBimJV;EgBxmJM;IAOI,wBAAA;EhBomJV;EgB3mJM;IAOI,2BAAA;IAAA,0BAAA;EhBwmJV;EgB/mJM;IAOI,iCAAA;IAAA,gCAAA;EhB4mJV;EgBnnJM;IAOI,gCAAA;IAAA,+BAAA;EhBgnJV;EgBvnJM;IAOI,8BAAA;IAAA,6BAAA;EhBonJV;EgB3nJM;IAOI,gCAAA;IAAA,+BAAA;EhBwnJV;EgB/nJM;IAOI,8BAAA;IAAA,6BAAA;EhB4nJV;EgBnoJM;IAOI,yBAAA;IAAA,4BAAA;EhBgoJV;EgBvoJM;IAOI,+BAAA;IAAA,kCAAA;EhBooJV;EgB3oJM;IAOI,8BAAA;IAAA,iCAAA;EhBwoJV;EgB/oJM;IAOI,4BAAA;IAAA,+BAAA;EhB4oJV;EgBnpJM;IAOI,8BAAA;IAAA,iCAAA;EhBgpJV;EgBvpJM;IAOI,4BAAA;IAAA,+BAAA;EhBopJV;EgB3pJM;IAOI,yBAAA;EhBupJV;EgB9pJM;IAOI,+BAAA;EhB0pJV;EgBjqJM;IAOI,8BAAA;EhB6pJV;EgBpqJM;IAOI,4BAAA;EhBgqJV;EgBvqJM;IAOI,8BAAA;EhBmqJV;EgB1qJM;IAOI,4BAAA;EhBsqJV;EgB7qJM;IAOI,2BAAA;EhByqJV;EgBhrJM;IAOI,iCAAA;EhB4qJV;EgBnrJM;IAOI,gCAAA;EhB+qJV;EgBtrJM;IAOI,8BAAA;EhBkrJV;EgBzrJM;IAOI,gCAAA;EhBqrJV;EgB5rJM;IAOI,8BAAA;EhBwrJV;EgB/rJM;IAOI,4BAAA;EhB2rJV;EgBlsJM;IAOI,kCAAA;EhB8rJV;EgBrsJM;IAOI,iCAAA;EhBisJV;EgBxsJM;IAOI,+BAAA;EhBosJV;EgB3sJM;IAOI,iCAAA;EhBusJV;EgB9sJM;IAOI,+BAAA;EhB0sJV;EgBjtJM;IAOI,0BAAA;EhB6sJV;EgBptJM;IAOI,gCAAA;EhBgtJV;EgBvtJM;IAOI,+BAAA;EhBmtJV;EgB1tJM;IAOI,6BAAA;EhBstJV;EgB7tJM;IAOI,+BAAA;EhBytJV;EgBhuJM;IAOI,6BAAA;EhB4tJV;EgBnuJM;IAOI,iBAAA;EhB+tJV;EgBtuJM;IAOI,uBAAA;EhBkuJV;EgBzuJM;IAOI,sBAAA;EhBquJV;EgB5uJM;IAOI,oBAAA;EhBwuJV;EgB/uJM;IAOI,sBAAA;EhB2uJV;EgBlvJM;IAOI,oBAAA;EhB8uJV;EgBrvJM;IAOI,qBAAA;EhBivJV;EgBxvJM;IAOI,2BAAA;EhBovJV;EgB3vJM;IAOI,0BAAA;EhBuvJV;EgB9vJM;IAOI,wBAAA;EhB0vJV;EgBjwJM;IAOI,0BAAA;EhB6vJV;EgBpwJM;IAOI,wBAAA;EhBgwJV;EgBvwJM;IAOI,6BAAA;IAAA,wBAAA;EhBmwJV;EgB1wJM;IAOI,mCAAA;IAAA,8BAAA;EhBswJV;EgB7wJM;IAOI,kCAAA;IAAA,6BAAA;EhBywJV;EgBhxJM;IAOI,gCAAA;IAAA,2BAAA;EhB4wJV;EgBnxJM;IAOI,kCAAA;IAAA,6BAAA;EhB+wJV;EgBtxJM;IAOI,gCAAA;IAAA,2BAAA;EhBkxJV;EgBzxJM;IAOI,2BAAA;EhBqxJV;EgB5xJM;IAOI,4BAAA;EhBwxJV;EgB/xJM;IAOI,6BAAA;EhB2xJV;AACF;AiBl1JA;ED+CQ;IAOI,4BAAA;EhBgyJV;EgBvyJM;IAOI,0BAAA;EhBmyJV;EgB1yJM;IAOI,6BAAA;EhBsyJV;EgB7yJM;IAOI,4BAAA;EhByyJV;AACF;AiB70JA;ED4BQ;IAOI,0BAAA;EhB8yJV;EgBrzJM;IAOI,gCAAA;EhBizJV;EgBxzJM;IAOI,yBAAA;EhBozJV;EgB3zJM;IAOI,wBAAA;EhBuzJV;EgB9zJM;IAOI,yBAAA;EhB0zJV;EgBj0JM;IAOI,6BAAA;EhB6zJV;EgBp0JM;IAOI,8BAAA;EhBg0JV;EgBv0JM;IAOI,wBAAA;EhBm0JV;EgB10JM;IAOI,+BAAA;EhBs0JV;EgB70JM;IAOI,wBAAA;EhBy0JV;AACF","file":"bootstrap-utilities.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Utilities v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text) !important;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-emphasis {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-utilities.css.map */\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) if($enable-important-utilities, !important, null);\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n$primary-text: $blue-600 !default;\n$secondary-text: $gray-600 !default;\n$success-text: $green-600 !default;\n$info-text: $cyan-700 !default;\n$warning-text: $yellow-700 !default;\n$danger-text: $red-600 !default;\n$light-text: $gray-600 !default;\n$dark-text: $gray-700 !default;\n\n$primary-bg-subtle: $blue-100 !default;\n$secondary-bg-subtle: $gray-100 !default;\n$success-bg-subtle: $green-100 !default;\n$info-bg-subtle: $cyan-100 !default;\n$warning-bg-subtle: $yellow-100 !default;\n$danger-bg-subtle: $red-100 !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n\n$primary-border-subtle: $blue-200 !default;\n$secondary-border-subtle: $gray-200 !default;\n$success-border-subtle: $green-200 !default;\n$info-border-subtle: $cyan-200 !default;\n$warning-border-subtle: $yellow-200 !default;\n$danger-border-subtle: $red-200 !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-emphasis-color: $black !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba(var(--#{$prefix}body-color-rgb), .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba(var(--#{$prefix}body-color-rgb), .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: var(--#{$prefix}secondary-color) !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}form-control-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default; //$gray-400\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc($input-border-width * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.875em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}success-text),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}success),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}danger-text),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}danger),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{rgba($body-color, .75)}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc($pagination-border-width * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc($popover-border-radius - $popover-border-width) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css
index fed38d45f..ccf264e39 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css
@@ -1,7 +1,6 @@
/*!
- * Bootstrap Utilities v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Utilities v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(13,110,253,var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(108,117,125,var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(25,135,84,var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(13,202,240,var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(255,193,7,var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(33,37,41,var(--bs-bg-opacity,1))!important}.link-primary{color:#0d6efd!important}.link-primary:focus,.link-primary:hover{color:#0a58ca!important}.link-secondary{color:#6c757d!important}.link-secondary:focus,.link-secondary:hover{color:#565e64!important}.link-success{color:#198754!important}.link-success:focus,.link-success:hover{color:#146c43!important}.link-info{color:#0dcaf0!important}.link-info:focus,.link-info:hover{color:#3dd5f3!important}.link-warning{color:#ffc107!important}.link-warning:focus,.link-warning:hover{color:#ffcd39!important}.link-danger{color:#dc3545!important}.link-danger:focus,.link-danger:hover{color:#b02a37!important}.link-light{color:#f8f9fa!important}.link-light:focus,.link-light:hover{color:#f9fafb!important}.link-dark{color:#212529!important}.link-dark:focus,.link-dark:hover{color:#1a1e21!important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-1{--bs-border-width:1px}.border-2{--bs-border-width:2px}.border-3{--bs-border-width:3px}.border-4{--bs-border-width:4px}.border-5{--bs-border-width:5px}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-semibold{font-weight:600!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-2xl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text:#0a58ca;--bs-secondary-text:#6c757d;--bs-success-text:#146c43;--bs-info-text:#087990;--bs-warning-text:#997404;--bs-danger-text:#b02a37;--bs-light-text:#6c757d;--bs-dark-text:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#f8f9fa;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#e9ecef;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);--bs-emphasis-color:#000;--bs-form-control-bg:var(--bs-body-bg);--bs-form-control-disabled-bg:var(--bs-secondary-bg);--bs-highlight-bg:#fff3cd;--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}[data-bs-theme=dark]{--bs-body-color:#adb5bd;--bs-body-color-rgb:173,181,189;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#f8f9fa;--bs-emphasis-color-rgb:248,249,250;--bs-secondary-color:rgba(173, 181, 189, 0.75);--bs-secondary-color-rgb:173,181,189;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(173, 181, 189, 0.5);--bs-tertiary-color-rgb:173,181,189;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-emphasis-color:#fff;--bs-primary-text:#6ea8fe;--bs-secondary-text:#dee2e6;--bs-success-text:#75b798;--bs-info-text:#6edff6;--bs-warning-text:#ffda6a;--bs-danger-text:#ea868f;--bs-light-text:#f8f9fa;--bs-dark-text:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#212529;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#495057;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#055160;--bs-warning-border-subtle:#664d03;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:#fff;--bs-link-color:#6ea8fe;--bs-link-hover-color:#9ec5fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:158,197,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(13,110,253,var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(108,117,125,var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(25,135,84,var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(13,202,240,var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(255,193,7,var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(33,37,41,var(--bs-bg-opacity,1))!important}.link-primary{color:#0d6efd!important}.link-primary:focus,.link-primary:hover{color:#0a58ca!important}.link-secondary{color:#6c757d!important}.link-secondary:focus,.link-secondary:hover{color:#565e64!important}.link-success{color:#198754!important}.link-success:focus,.link-success:hover{color:#146c43!important}.link-info{color:#0dcaf0!important}.link-info:focus,.link-info:hover{color:#3dd5f3!important}.link-warning{color:#ffc107!important}.link-warning:focus,.link-warning:hover{color:#ffcd39!important}.link-danger{color:#dc3545!important}.link-danger:focus,.link-danger:hover{color:#b02a37!important}.link-light{color:#f8f9fa!important}.link-light:focus,.link-light:hover{color:#f9fafb!important}.link-dark{color:#212529!important}.link-dark:focus,.link-dark:hover{color:#1a1e21!important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(var(--bs-body-color-rgb),.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(var(--bs-body-color-rgb),.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(var(--bs-body-color-rgb),.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{--bs-border-width:1px}.border-2{--bs-border-width:2px}.border-3{--bs-border-width:3px}.border-4{--bs-border-width:4px}.border-5{--bs-border-width:5px}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text)!important}.text-secondary-emphasis{color:var(--bs-secondary-text)!important}.text-success-emphasis{color:var(--bs-success-text)!important}.text-info-emphasis{color:var(--bs-info-text)!important}.text-warning-emphasis{color:var(--bs-warning-text)!important}.text-danger-emphasis{color:var(--bs-danger-text)!important}.text-light-emphasis{color:var(--bs-light-text)!important}.text-dark-emphasis{color:var(--bs-dark-text)!important}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-emphasis{--bs-bg-opacity:1;background-color:rgba(var(--bs-emphasis-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-2xl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-2xl)!important;border-top-right-radius:var(--bs-border-radius-2xl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-2xl)!important;border-bottom-right-radius:var(--bs-border-radius-2xl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-2xl)!important;border-bottom-left-radius:var(--bs-border-radius-2xl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-2xl)!important;border-top-left-radius:var(--bs-border-radius-2xl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
/*# sourceMappingURL=bootstrap-utilities.min.css.map */ \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css.map
index f2981269f..aa7bf7e09 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/mixins/_clearfix.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/mixins/_breakpoints.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","dist/css/bootstrap-utilities.css","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value !important; // stylelint-disable-line declaration-no-important\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","/*!\n * Bootstrap Utilities v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-utilities.css.map */","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","dist/css/bootstrap-utilities.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/mixins/_clearfix.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/mixins/_breakpoints.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","/*!\n * Bootstrap Utilities v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text) !important;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-emphasis {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-utilities.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) if($enable-important-utilities, !important, null);\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css
index fedbacedc..6c66bc076 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css
@@ -1,9 +1,180 @@
/*!
- * Bootstrap Utilities v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Utilities v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
+:root,
+[data-bs-theme=light] {
+ --bs-blue: #0d6efd;
+ --bs-indigo: #6610f2;
+ --bs-purple: #6f42c1;
+ --bs-pink: #d63384;
+ --bs-red: #dc3545;
+ --bs-orange: #fd7e14;
+ --bs-yellow: #ffc107;
+ --bs-green: #198754;
+ --bs-teal: #20c997;
+ --bs-cyan: #0dcaf0;
+ --bs-black: #000;
+ --bs-white: #fff;
+ --bs-gray: #6c757d;
+ --bs-gray-dark: #343a40;
+ --bs-gray-100: #f8f9fa;
+ --bs-gray-200: #e9ecef;
+ --bs-gray-300: #dee2e6;
+ --bs-gray-400: #ced4da;
+ --bs-gray-500: #adb5bd;
+ --bs-gray-600: #6c757d;
+ --bs-gray-700: #495057;
+ --bs-gray-800: #343a40;
+ --bs-gray-900: #212529;
+ --bs-primary: #0d6efd;
+ --bs-secondary: #6c757d;
+ --bs-success: #198754;
+ --bs-info: #0dcaf0;
+ --bs-warning: #ffc107;
+ --bs-danger: #dc3545;
+ --bs-light: #f8f9fa;
+ --bs-dark: #212529;
+ --bs-primary-rgb: 13, 110, 253;
+ --bs-secondary-rgb: 108, 117, 125;
+ --bs-success-rgb: 25, 135, 84;
+ --bs-info-rgb: 13, 202, 240;
+ --bs-warning-rgb: 255, 193, 7;
+ --bs-danger-rgb: 220, 53, 69;
+ --bs-light-rgb: 248, 249, 250;
+ --bs-dark-rgb: 33, 37, 41;
+ --bs-primary-text: #0a58ca;
+ --bs-secondary-text: #6c757d;
+ --bs-success-text: #146c43;
+ --bs-info-text: #087990;
+ --bs-warning-text: #997404;
+ --bs-danger-text: #b02a37;
+ --bs-light-text: #6c757d;
+ --bs-dark-text: #495057;
+ --bs-primary-bg-subtle: #cfe2ff;
+ --bs-secondary-bg-subtle: #f8f9fa;
+ --bs-success-bg-subtle: #d1e7dd;
+ --bs-info-bg-subtle: #cff4fc;
+ --bs-warning-bg-subtle: #fff3cd;
+ --bs-danger-bg-subtle: #f8d7da;
+ --bs-light-bg-subtle: #fcfcfd;
+ --bs-dark-bg-subtle: #ced4da;
+ --bs-primary-border-subtle: #9ec5fe;
+ --bs-secondary-border-subtle: #e9ecef;
+ --bs-success-border-subtle: #a3cfbb;
+ --bs-info-border-subtle: #9eeaf9;
+ --bs-warning-border-subtle: #ffe69c;
+ --bs-danger-border-subtle: #f1aeb5;
+ --bs-light-border-subtle: #e9ecef;
+ --bs-dark-border-subtle: #adb5bd;
+ --bs-white-rgb: 255, 255, 255;
+ --bs-black-rgb: 0, 0, 0;
+ --bs-body-color-rgb: 33, 37, 41;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));
+ --bs-body-font-family: var(--bs-font-sans-serif);
+ --bs-body-font-size: 1rem;
+ --bs-body-font-weight: 400;
+ --bs-body-line-height: 1.5;
+ --bs-body-color: #212529;
+ --bs-emphasis-color: #000;
+ --bs-emphasis-color-rgb: 0, 0, 0;
+ --bs-secondary-color: rgba(33, 37, 41, 0.75);
+ --bs-secondary-color-rgb: 33, 37, 41;
+ --bs-secondary-bg: #e9ecef;
+ --bs-secondary-bg-rgb: 233, 236, 239;
+ --bs-tertiary-color: rgba(33, 37, 41, 0.5);
+ --bs-tertiary-color-rgb: 33, 37, 41;
+ --bs-tertiary-bg: #f8f9fa;
+ --bs-tertiary-bg-rgb: 248, 249, 250;
+ --bs-body-bg: #fff;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-link-color: #0d6efd;
+ --bs-link-color-rgb: 13, 110, 253;
+ --bs-link-decoration: underline;
+ --bs-link-hover-color: #0a58ca;
+ --bs-link-hover-color-rgb: 10, 88, 202;
+ --bs-code-color: #d63384;
+ --bs-highlight-bg: #fff3cd;
+ --bs-border-width: 1px;
+ --bs-border-style: solid;
+ --bs-border-color: #dee2e6;
+ --bs-border-color-translucent: rgba(0, 0, 0, 0.175);
+ --bs-border-radius: 0.375rem;
+ --bs-border-radius-sm: 0.25rem;
+ --bs-border-radius-lg: 0.5rem;
+ --bs-border-radius-xl: 1rem;
+ --bs-border-radius-2xl: 2rem;
+ --bs-border-radius-pill: 50rem;
+ --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
+ --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-emphasis-color: #000;
+ --bs-form-control-bg: var(--bs-body-bg);
+ --bs-form-control-disabled-bg: var(--bs-secondary-bg);
+ --bs-highlight-bg: #fff3cd;
+ --bs-breakpoint-xs: 0;
+ --bs-breakpoint-sm: 576px;
+ --bs-breakpoint-md: 768px;
+ --bs-breakpoint-lg: 992px;
+ --bs-breakpoint-xl: 1200px;
+ --bs-breakpoint-xxl: 1400px;
+}
+
+[data-bs-theme=dark] {
+ --bs-body-color: #adb5bd;
+ --bs-body-color-rgb: 173, 181, 189;
+ --bs-body-bg: #212529;
+ --bs-body-bg-rgb: 33, 37, 41;
+ --bs-emphasis-color: #f8f9fa;
+ --bs-emphasis-color-rgb: 248, 249, 250;
+ --bs-secondary-color: rgba(173, 181, 189, 0.75);
+ --bs-secondary-color-rgb: 173, 181, 189;
+ --bs-secondary-bg: #343a40;
+ --bs-secondary-bg-rgb: 52, 58, 64;
+ --bs-tertiary-color: rgba(173, 181, 189, 0.5);
+ --bs-tertiary-color-rgb: 173, 181, 189;
+ --bs-tertiary-bg: #2b3035;
+ --bs-tertiary-bg-rgb: 43, 48, 53;
+ --bs-emphasis-color: #fff;
+ --bs-primary-text: #6ea8fe;
+ --bs-secondary-text: #dee2e6;
+ --bs-success-text: #75b798;
+ --bs-info-text: #6edff6;
+ --bs-warning-text: #ffda6a;
+ --bs-danger-text: #ea868f;
+ --bs-light-text: #f8f9fa;
+ --bs-dark-text: #dee2e6;
+ --bs-primary-bg-subtle: #031633;
+ --bs-secondary-bg-subtle: #212529;
+ --bs-success-bg-subtle: #051b11;
+ --bs-info-bg-subtle: #032830;
+ --bs-warning-bg-subtle: #332701;
+ --bs-danger-bg-subtle: #2c0b0e;
+ --bs-light-bg-subtle: #343a40;
+ --bs-dark-bg-subtle: #1a1d20;
+ --bs-primary-border-subtle: #084298;
+ --bs-secondary-border-subtle: #495057;
+ --bs-success-border-subtle: #0f5132;
+ --bs-info-border-subtle: #055160;
+ --bs-warning-border-subtle: #664d03;
+ --bs-danger-border-subtle: #842029;
+ --bs-light-border-subtle: #495057;
+ --bs-dark-border-subtle: #343a40;
+ --bs-heading-color: #fff;
+ --bs-link-color: #6ea8fe;
+ --bs-link-hover-color: #9ec5fe;
+ --bs-link-color-rgb: 110, 168, 254;
+ --bs-link-hover-color-rgb: 158, 197, 254;
+ --bs-code-color: #e685b5;
+ --bs-border-color: #495057;
+ --bs-border-color-translucent: rgba(255, 255, 255, 0.15);
+}
+
.clearfix::after {
display: block;
clear: both;
@@ -327,6 +498,31 @@
float: none !important;
}
+.object-fit-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+}
+
+.object-fit-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+}
+
+.object-fit-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+}
+
+.object-fit-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+}
+
+.object-fit-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+}
+
.opacity-0 {
opacity: 0 !important;
}
@@ -363,6 +559,38 @@
overflow: scroll !important;
}
+.overflow-x-auto {
+ overflow-x: auto !important;
+}
+
+.overflow-x-hidden {
+ overflow-x: hidden !important;
+}
+
+.overflow-x-visible {
+ overflow-x: visible !important;
+}
+
+.overflow-x-scroll {
+ overflow-x: scroll !important;
+}
+
+.overflow-y-auto {
+ overflow-y: auto !important;
+}
+
+.overflow-y-hidden {
+ overflow-y: hidden !important;
+}
+
+.overflow-y-visible {
+ overflow-y: visible !important;
+}
+
+.overflow-y-scroll {
+ overflow-y: scroll !important;
+}
+
.d-inline {
display: inline !important;
}
@@ -404,15 +632,15 @@
}
.shadow {
- box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
+ box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;
}
.shadow-sm {
- box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+ box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;
}
.shadow-lg {
- box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+ box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;
}
.shadow-none {
@@ -585,6 +813,38 @@
border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;
}
+.border-primary-subtle {
+ border-color: var(--bs-primary-border-subtle) !important;
+}
+
+.border-secondary-subtle {
+ border-color: var(--bs-secondary-border-subtle) !important;
+}
+
+.border-success-subtle {
+ border-color: var(--bs-success-border-subtle) !important;
+}
+
+.border-info-subtle {
+ border-color: var(--bs-info-border-subtle) !important;
+}
+
+.border-warning-subtle {
+ border-color: var(--bs-warning-border-subtle) !important;
+}
+
+.border-danger-subtle {
+ border-color: var(--bs-danger-border-subtle) !important;
+}
+
+.border-light-subtle {
+ border-color: var(--bs-light-border-subtle) !important;
+}
+
+.border-dark-subtle {
+ border-color: var(--bs-dark-border-subtle) !important;
+}
+
.border-1 {
--bs-border-width: 1px;
}
@@ -1275,6 +1535,60 @@
gap: 3rem !important;
}
+.row-gap-0 {
+ row-gap: 0 !important;
+}
+
+.row-gap-1 {
+ row-gap: 0.25rem !important;
+}
+
+.row-gap-2 {
+ row-gap: 0.5rem !important;
+}
+
+.row-gap-3 {
+ row-gap: 1rem !important;
+}
+
+.row-gap-4 {
+ row-gap: 1.5rem !important;
+}
+
+.row-gap-5 {
+ row-gap: 3rem !important;
+}
+
+.column-gap-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+}
+
+.column-gap-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+}
+
+.column-gap-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+}
+
+.column-gap-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+}
+
+.column-gap-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+}
+
+.column-gap-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+}
+
.font-monospace {
font-family: var(--bs-font-monospace) !important;
}
@@ -1311,26 +1625,30 @@
font-style: normal !important;
}
-.fw-light {
- font-weight: 300 !important;
-}
-
.fw-lighter {
font-weight: lighter !important;
}
+.fw-light {
+ font-weight: 300 !important;
+}
+
.fw-normal {
font-weight: 400 !important;
}
-.fw-bold {
- font-weight: 700 !important;
+.fw-medium {
+ font-weight: 500 !important;
}
.fw-semibold {
font-weight: 600 !important;
}
+.fw-bold {
+ font-weight: 700 !important;
+}
+
.fw-bolder {
font-weight: bolder !important;
}
@@ -1451,7 +1769,7 @@
.text-muted {
--bs-text-opacity: 1;
- color: #6c757d !important;
+ color: var(--bs-secondary-color) !important;
}
.text-black-50 {
@@ -1464,6 +1782,21 @@
color: rgba(255, 255, 255, 0.5) !important;
}
+.text-body-secondary {
+ --bs-text-opacity: 1;
+ color: var(--bs-secondary-color) !important;
+}
+
+.text-body-tertiary {
+ --bs-text-opacity: 1;
+ color: var(--bs-tertiary-color) !important;
+}
+
+.text-body-emphasis {
+ --bs-text-opacity: 1;
+ color: var(--bs-emphasis-color) !important;
+}
+
.text-reset {
--bs-text-opacity: 1;
color: inherit !important;
@@ -1485,6 +1818,38 @@
--bs-text-opacity: 1;
}
+.text-primary-emphasis {
+ color: var(--bs-primary-text) !important;
+}
+
+.text-secondary-emphasis {
+ color: var(--bs-secondary-text) !important;
+}
+
+.text-success-emphasis {
+ color: var(--bs-success-text) !important;
+}
+
+.text-info-emphasis {
+ color: var(--bs-info-text) !important;
+}
+
+.text-warning-emphasis {
+ color: var(--bs-warning-text) !important;
+}
+
+.text-danger-emphasis {
+ color: var(--bs-danger-text) !important;
+}
+
+.text-light-emphasis {
+ color: var(--bs-light-text) !important;
+}
+
+.text-dark-emphasis {
+ color: var(--bs-dark-text) !important;
+}
+
.bg-primary {
--bs-bg-opacity: 1;
background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
@@ -1545,6 +1910,21 @@
background-color: transparent !important;
}
+.bg-body-secondary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body-tertiary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body-emphasis {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
.bg-opacity-10 {
--bs-bg-opacity: 0.1;
}
@@ -1565,6 +1945,38 @@
--bs-bg-opacity: 1;
}
+.bg-primary-subtle {
+ background-color: var(--bs-primary-bg-subtle) !important;
+}
+
+.bg-secondary-subtle {
+ background-color: var(--bs-secondary-bg-subtle) !important;
+}
+
+.bg-success-subtle {
+ background-color: var(--bs-success-bg-subtle) !important;
+}
+
+.bg-info-subtle {
+ background-color: var(--bs-info-bg-subtle) !important;
+}
+
+.bg-warning-subtle {
+ background-color: var(--bs-warning-bg-subtle) !important;
+}
+
+.bg-danger-subtle {
+ background-color: var(--bs-danger-bg-subtle) !important;
+}
+
+.bg-light-subtle {
+ background-color: var(--bs-light-bg-subtle) !important;
+}
+
+.bg-dark-subtle {
+ background-color: var(--bs-dark-bg-subtle) !important;
+}
+
.bg-gradient {
background-image: var(--bs-gradient) !important;
}
@@ -1636,21 +2048,181 @@
border-top-left-radius: var(--bs-border-radius) !important;
}
+.rounded-top-0 {
+ border-top-right-radius: 0 !important;
+ border-top-left-radius: 0 !important;
+}
+
+.rounded-top-1 {
+ border-top-right-radius: var(--bs-border-radius-sm) !important;
+ border-top-left-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-top-2 {
+ border-top-right-radius: var(--bs-border-radius) !important;
+ border-top-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-top-3 {
+ border-top-right-radius: var(--bs-border-radius-lg) !important;
+ border-top-left-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-top-4 {
+ border-top-right-radius: var(--bs-border-radius-xl) !important;
+ border-top-left-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-top-5 {
+ border-top-right-radius: var(--bs-border-radius-2xl) !important;
+ border-top-left-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-top-circle {
+ border-top-right-radius: 50% !important;
+ border-top-left-radius: 50% !important;
+}
+
+.rounded-top-pill {
+ border-top-right-radius: var(--bs-border-radius-pill) !important;
+ border-top-left-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-end {
border-top-left-radius: var(--bs-border-radius) !important;
border-bottom-left-radius: var(--bs-border-radius) !important;
}
+.rounded-end-0 {
+ border-top-left-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+}
+
+.rounded-end-1 {
+ border-top-left-radius: var(--bs-border-radius-sm) !important;
+ border-bottom-left-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-end-2 {
+ border-top-left-radius: var(--bs-border-radius) !important;
+ border-bottom-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-end-3 {
+ border-top-left-radius: var(--bs-border-radius-lg) !important;
+ border-bottom-left-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-end-4 {
+ border-top-left-radius: var(--bs-border-radius-xl) !important;
+ border-bottom-left-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-end-5 {
+ border-top-left-radius: var(--bs-border-radius-2xl) !important;
+ border-bottom-left-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-end-circle {
+ border-top-left-radius: 50% !important;
+ border-bottom-left-radius: 50% !important;
+}
+
+.rounded-end-pill {
+ border-top-left-radius: var(--bs-border-radius-pill) !important;
+ border-bottom-left-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-bottom {
border-bottom-left-radius: var(--bs-border-radius) !important;
border-bottom-right-radius: var(--bs-border-radius) !important;
}
+.rounded-bottom-0 {
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+.rounded-bottom-1 {
+ border-bottom-left-radius: var(--bs-border-radius-sm) !important;
+ border-bottom-right-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-bottom-2 {
+ border-bottom-left-radius: var(--bs-border-radius) !important;
+ border-bottom-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-bottom-3 {
+ border-bottom-left-radius: var(--bs-border-radius-lg) !important;
+ border-bottom-right-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-bottom-4 {
+ border-bottom-left-radius: var(--bs-border-radius-xl) !important;
+ border-bottom-right-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-bottom-5 {
+ border-bottom-left-radius: var(--bs-border-radius-2xl) !important;
+ border-bottom-right-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-bottom-circle {
+ border-bottom-left-radius: 50% !important;
+ border-bottom-right-radius: 50% !important;
+}
+
+.rounded-bottom-pill {
+ border-bottom-left-radius: var(--bs-border-radius-pill) !important;
+ border-bottom-right-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-start {
border-bottom-right-radius: var(--bs-border-radius) !important;
border-top-right-radius: var(--bs-border-radius) !important;
}
+.rounded-start-0 {
+ border-bottom-right-radius: 0 !important;
+ border-top-right-radius: 0 !important;
+}
+
+.rounded-start-1 {
+ border-bottom-right-radius: var(--bs-border-radius-sm) !important;
+ border-top-right-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-start-2 {
+ border-bottom-right-radius: var(--bs-border-radius) !important;
+ border-top-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-start-3 {
+ border-bottom-right-radius: var(--bs-border-radius-lg) !important;
+ border-top-right-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-start-4 {
+ border-bottom-right-radius: var(--bs-border-radius-xl) !important;
+ border-top-right-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-start-5 {
+ border-bottom-right-radius: var(--bs-border-radius-2xl) !important;
+ border-top-right-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-start-circle {
+ border-bottom-right-radius: 50% !important;
+ border-top-right-radius: 50% !important;
+}
+
+.rounded-start-pill {
+ border-bottom-right-radius: var(--bs-border-radius-pill) !important;
+ border-top-right-radius: var(--bs-border-radius-pill) !important;
+}
+
.visible {
visibility: visible !important;
}
@@ -1659,6 +2231,26 @@
visibility: hidden !important;
}
+.z-n1 {
+ z-index: -1 !important;
+}
+
+.z-0 {
+ z-index: 0 !important;
+}
+
+.z-1 {
+ z-index: 1 !important;
+}
+
+.z-2 {
+ z-index: 2 !important;
+}
+
+.z-3 {
+ z-index: 3 !important;
+}
+
@media (min-width: 576px) {
.float-sm-start {
float: right !important;
@@ -1669,6 +2261,26 @@
.float-sm-none {
float: none !important;
}
+ .object-fit-sm-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-sm-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-sm-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-sm-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-sm-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-sm-inline {
display: inline !important;
}
@@ -2145,6 +2757,48 @@
.gap-sm-5 {
gap: 3rem !important;
}
+ .row-gap-sm-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-sm-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-sm-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-sm-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-sm-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-sm-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-sm-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-sm-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-sm-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-sm-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-sm-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-sm-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-sm-start {
text-align: right !important;
}
@@ -2165,6 +2819,26 @@
.float-md-none {
float: none !important;
}
+ .object-fit-md-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-md-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-md-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-md-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-md-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-md-inline {
display: inline !important;
}
@@ -2641,6 +3315,48 @@
.gap-md-5 {
gap: 3rem !important;
}
+ .row-gap-md-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-md-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-md-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-md-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-md-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-md-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-md-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-md-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-md-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-md-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-md-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-md-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-md-start {
text-align: right !important;
}
@@ -2661,6 +3377,26 @@
.float-lg-none {
float: none !important;
}
+ .object-fit-lg-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-lg-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-lg-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-lg-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-lg-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-lg-inline {
display: inline !important;
}
@@ -3137,6 +3873,48 @@
.gap-lg-5 {
gap: 3rem !important;
}
+ .row-gap-lg-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-lg-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-lg-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-lg-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-lg-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-lg-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-lg-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-lg-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-lg-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-lg-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-lg-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-lg-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-lg-start {
text-align: right !important;
}
@@ -3157,6 +3935,26 @@
.float-xl-none {
float: none !important;
}
+ .object-fit-xl-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-xl-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-xl-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-xl-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-xl-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-xl-inline {
display: inline !important;
}
@@ -3633,6 +4431,48 @@
.gap-xl-5 {
gap: 3rem !important;
}
+ .row-gap-xl-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-xl-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-xl-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-xl-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-xl-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-xl-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-xl-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-xl-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-xl-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-xl-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-xl-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-xl-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-xl-start {
text-align: right !important;
}
@@ -3653,6 +4493,26 @@
.float-xxl-none {
float: none !important;
}
+ .object-fit-xxl-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-xxl-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-xxl-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-xxl-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-xxl-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-xxl-inline {
display: inline !important;
}
@@ -4129,6 +4989,48 @@
.gap-xxl-5 {
gap: 3rem !important;
}
+ .row-gap-xxl-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-xxl-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-xxl-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-xxl-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-xxl-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-xxl-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-xxl-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-xxl-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-xxl-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-xxl-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-xxl-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-xxl-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-xxl-start {
text-align: right !important;
}
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css.map
index 986dafea0..ab9305ddb 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/mixins/_clearfix.scss","bootstrap-utilities.css","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/_variables.scss","../../scss/mixins/_breakpoints.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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mBQ;EAOI,8BAAA;AdmmBZ;;Ac1mBQ;EAOI,iCAAA;AdumBZ;;Ac9mBQ;EAOI,sCAAA;Ad2mBZ;;AclnBQ;EAOI,yCAAA;Ad+mBZ;;ActnBQ;EAOI,uBAAA;AdmnBZ;;Ac1nBQ;EAOI,uBAAA;AdunBZ;;Ac9nBQ;EAOI,yBAAA;Ad2nBZ;;AcloBQ;EAOI,yBAAA;Ad+nBZ;;ActoBQ;EAOI,0BAAA;AdmoBZ;;Ac1oBQ;EAOI,4BAAA;AduoBZ;;Ac9oBQ;EAOI,kCAAA;Ad2oBZ;;AclpBQ;EAOI,sCAAA;Ad+oBZ;;ActpBQ;EAOI,oCAAA;AdmpBZ;;Ac1pBQ;EAOI,kCAAA;AdupBZ;;Ac9pBQ;EAOI,yCAAA;Ad2pBZ;;AclqBQ;EAOI,wCAAA;Ad+pBZ;;ActqBQ;EAOI,wCAAA;AdmqBZ;;Ac1qBQ;EAOI,kCAAA;AduqBZ;;Ac9qBQ;EAOI,gCAAA;Ad2qBZ;;AclrBQ;EAOI,8BAAA;Ad+qBZ;;ActrBQ;EAOI,gCAAA;AdmrBZ;;Ac1rBQ;EAOI,+BAAA;AdurBZ;;Ac9rBQ;EAOI,oCAAA;Ad2rBZ;;AclsBQ;EAOI,kCAAA;Ad+rBZ;;ActsBQ;EAOI,gCAAA;AdmsBZ;;Ac1sBQ;EAOI,uCAAA;AdusBZ;;Ac9sBQ;EAOI,sCAAA;Ad2sBZ;;AcltBQ;EAOI,iCAAA;Ad+sBZ;;ActtBQ;EAOI,2BAAA;AdmtBZ;;Ac1tBQ;EAOI,iCAAA;AdutBZ;;Ac9tBQ;EAOI,+BAAA;Ad2tBZ;;AcluBQ;EAOI,6BAAA;Ad+tBZ;;ActuBQ;EAOI,+BAAA;AdmuBZ;;Ac1uBQ;EAOI,8BAAA;AduuBZ;;Ac9uBQ;EAOI,oBAAA;Ad2uBZ;;AclvBQ;EAOI,mBAAA;Ad+uBZ;;ActvBQ;EAOI,mBAAA;AdmvBZ;;Ac1vBQ;EAOI,mBAAA;AduvBZ;;Ac9vBQ;EAOI,mBAAA;Ad2vBZ;;AclwBQ;EAOI,mBAAA;Ad+vBZ;;ActwBQ;EAOI,mBAAA;AdmwBZ;;Ac1wBQ;EAOI,mBAAA;AduwBZ;;Ac9wBQ;EAOI,oBAAA;Ad2wBZ;;AclxBQ;EAOI,0BAAA;Ad+wBZ;;ActxBQ;EAOI,yBAAA;AdmxBZ;;Ac1xBQ;EAOI,uBAAA;AduxBZ;;Ac9xBQ;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OI,sBAAA;Ed+hEV;EctiEM;IAOI,sBAAA;EdkiEV;EcziEM;IAOI,0BAAA;EdqiEV;Ec5iEM;IAOI,gCAAA;EdwiEV;Ec/iEM;IAOI,yBAAA;Ed2iEV;EcljEM;IAOI,wBAAA;Ed8iEV;EcrjEM;IAOI,yBAAA;EdijEV;EcxjEM;IAOI,6BAAA;EdojEV;Ec3jEM;IAOI,8BAAA;EdujEV;Ec9jEM;IAOI,wBAAA;Ed0jEV;EcjkEM;IAOI,+BAAA;Ed6jEV;EcpkEM;IAOI,wBAAA;EdgkEV;EcvkEM;IAOI,yBAAA;EdmkEV;Ec1kEM;IAOI,8BAAA;EdskEV;Ec7kEM;IAOI,iCAAA;EdykEV;EchlEM;IAOI,sCAAA;Ed4kEV;EcnlEM;IAOI,yCAAA;Ed+kEV;EctlEM;IAOI,uBAAA;EdklEV;EczlEM;IAOI,uBAAA;EdqlEV;Ec5lEM;IAOI,yBAAA;EdwlEV;Ec/lEM;IAOI,yBAAA;Ed2lEV;EclmEM;IAOI,0BAAA;Ed8lEV;EcrmEM;IAOI,4BAAA;EdimEV;EcxmEM;IAOI,kCAAA;EdomEV;Ec3mEM;IAOI,sCAAA;EdumEV;Ec9mEM;IAOI,oCAAA;Ed0mEV;EcjnEM;IAOI,kCAAA;Ed6mEV;EcpnEM;IAOI,yCAAA;EdgnEV;EcvnEM;IAOI,wCAAA;EdmnEV;Ec1nEM;IAOI,wCAAA;EdsnEV;Ec7nEM;IAOI,kCAAA;EdynEV;EchoEM;IAOI,gCAAA;Ed4nEV;EcnoEM;IAOI,8BAAA;Ed+nEV;EctoEM;IAOI,gCAAA;EdkoEV;EczoEM;IAOI,+BAAA;EdqoEV;Ec5oEM;IAOI,oCAAA;EdwoEV;Ec/oEM;IAOI,kCAAA;Ed2oEV;EclpEM;IAOI,gCAAA;Ed8oEV;EcrpEM;IAOI,uCAAA;EdipEV;EcxpEM;IAOI,sCAAA;EdopEV;Ec3pEM;IAOI,iCAAA;EdupEV;Ec9pEM;IAOI,2BAAA;Ed0pEV;EcjqEM;IAOI,iCAAA;Ed6pEV;EcpqEM;IAOI,+BAAA;EdgqEV;EcvqEM;IAOI,6BAAA;EdmqEV;Ec1qEM;IAOI,+BAAA;EdsqEV;Ec7qEM;IAOI,8BAAA;EdyqEV;EchrEM;IAOI,oBAAA;Ed4qEV;EcnrEM;IA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V;Ec58EM;IAOI,6BAAA;Edw8EV;Ec/8EM;IAOI,4BAAA;Ed28EV;Ecl9EM;IAOI,kCAAA;Ed88EV;Ecr9EM;IAOI,iCAAA;Edi9EV;Ecx9EM;IAOI,+BAAA;Edo9EV;Ec39EM;IAOI,iCAAA;Edu9EV;Ec99EM;IAOI,+BAAA;Ed09EV;Ecj+EM;IAOI,2BAAA;Ed69EV;Ecp+EM;IAOI,iCAAA;Edg+EV;Ecv+EM;IAOI,gCAAA;Edm+EV;Ec1+EM;IAOI,8BAAA;Eds+EV;Ec7+EM;IAOI,gCAAA;Edy+EV;Ech/EM;IAOI,8BAAA;Ed4+EV;Ecn/EM;IAOI,iBAAA;Ed++EV;Ect/EM;IAOI,uBAAA;Edk/EV;Ecz/EM;IAOI,sBAAA;Edq/EV;Ec5/EM;IAOI,oBAAA;Edw/EV;Ec//EM;IAOI,sBAAA;Ed2/EV;EclgFM;IAOI,oBAAA;Ed8/EV;EcrgFM;IAOI,4BAAA;EdigFV;EcxgFM;IAOI,2BAAA;EdogFV;Ec3gFM;IAOI,6BAAA;EdugFV;AACF;AMlhFI;EQGI;IAOI,uBAAA;Ed4gFV;EcnhFM;IAOI,sBAAA;Ed+gFV;EcthFM;IAOI,sBAAA;EdkhFV;EczhFM;IAOI,0BAAA;EdqhFV;Ec5hFM;IAOI,gCAAA;EdwhFV;Ec/hFM;IAOI,yBAAA;Ed2hFV;EcliFM;IAOI,wBAAA;Ed8hFV;EcriFM;IAOI,yBAAA;EdiiFV;EcxiFM;IAOI,6BAAA;EdoiFV;Ec3iFM;IAOI,8BAAA;EduiFV;Ec9iFM;IAOI,wBAAA;Ed0iFV;EcjjFM;IAOI,+BAAA;Ed6iFV;EcpjFM;IAOI,wBAAA;EdgjFV;EcvjFM;IAOI,yBAAA;EdmjFV;Ec1jFM;IAOI,8BAAA;EdsjFV;Ec7jFM;IAOI,iCAAA;EdyjFV;EchkFM;IAOI,sCAAA;Ed4jFV;EcnkFM;IAOI,yCAAA;Ed+jFV;EctkFM;IAOI,uBAAA;EdkkFV;EczkFM;IAOI,uBAAA;EdqkFV;Ec5kFM;IAOI,yBAAA;EdwkFV;Ec/kFM;IAOI,yBAAA;Ed2kFV;EcllFM;IAOI,0BAAA;Ed8kFV;EcrlFM;IAOI,4BAAA;EdilFV;EcxlFM;IAOI,kCAAA;EdolFV;Ec3lFM;IAOI,s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;Ed+/FV;EctgGM;IAOI,sBAAA;EdkgGV;EczgGM;IAOI,0BAAA;EdqgGV;Ec5gGM;IAOI,gCAAA;EdwgGV;Ec/gGM;IAOI,yBAAA;Ed2gGV;EclhGM;IAOI,wBAAA;Ed8gGV;EcrhGM;IAOI,yBAAA;EdihGV;EcxhGM;IAOI,6BAAA;EdohGV;Ec3hGM;IAOI,8BAAA;EduhGV;Ec9hGM;IAOI,wBAAA;Ed0hGV;EcjiGM;IAOI,+BAAA;Ed6hGV;EcpiGM;IAOI,wBAAA;EdgiGV;EcviGM;IAOI,yBAAA;EdmiGV;Ec1iGM;IAOI,8BAAA;EdsiGV;Ec7iGM;IAOI,iCAAA;EdyiGV;EchjGM;IAOI,sCAAA;Ed4iGV;EcnjGM;IAOI,yCAAA;Ed+iGV;EctjGM;IAOI,uBAAA;EdkjGV;EczjGM;IAOI,uBAAA;EdqjGV;Ec5jGM;IAOI,yBAAA;EdwjGV;Ec/jGM;IAOI,yBAAA;Ed2jGV;EclkGM;IAOI,0BAAA;Ed8jGV;EcrkGM;IAOI,4BAAA;EdikGV;EcxkGM;IAOI,kCAAA;EdokGV;Ec3kGM;IAOI,sCAAA;EdukGV;Ec9kGM;IAOI,oCAAA;Ed0kGV;EcjlGM;IAOI,kCAAA;Ed6kGV;EcplGM;IAOI,yCAAA;EdglGV;EcvlGM;IAOI,wCAAA;EdmlGV;Ec1lGM;IAOI,wCAAA;EdslGV;Ec7lGM;IAOI,kCAAA;EdylGV;EchmGM;IAOI,gCAAA;Ed4lGV;EcnmGM;IAOI,8BAAA;Ed+lGV;EctmGM;IAOI,gCAAA;EdkmGV;EczmGM;IAOI,+BAAA;EdqmGV;Ec5mGM;IAOI,oCAAA;EdwmGV;Ec/mGM;IAOI,kCAAA;Ed2mGV;EclnGM;IAOI,gCAAA;Ed8mGV;EcrnGM;IAOI,uCAAA;EdinGV;EcxnGM;IAOI,sCAAA;EdonGV;Ec3nGM;IAOI,iCAAA;EdunGV;Ec9nGM;IAOI,2BAAA;Ed0nGV;EcjoGM;IAOI,iCAAA;Ed6nGV;EcpoGM;IAOI,+BAAA;EdgoGV;EcvoGM;IAOI,6BAAA;EdmoGV;Ec1oGM;IAOI,+BAAA;EdsoGV;Ec7oGM;IAOI,8BAAA;EdyoGV;EchpGM;IAOI,oBAAA;Ed4oGV;EcnpGM;IAOI,mBAAA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","file":"bootstrap-utilities.rtl.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","/*!\n * Bootstrap Utilities v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-utilities.css.map */\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value !important; // stylelint-disable-line declaration-no-important\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-utilities.css","../../scss/mixins/_color-mode.scss","../../scss/mixins/_clearfix.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/_variables.scss","../../scss/mixins/_breakpoints.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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BjzBQ;EAOI,sBAAA;AhB8yBZ;;AgBrzBQ;EAOI,0BAAA;AhBkzBZ;;AgBzzBQ;EAOI,uBAAA;AhBszBZ;;AgB7zBQ;EAOI,2BAAA;AhB0zBZ;;AgBj0BQ;EAOI,sBAAA;AhB8zBZ;;AgBr0BQ;EAOI,sBAAA;AhBk0BZ;;AgBz0BQ;EAOI,sBAAA;AhBs0BZ;;AgB70BQ;EAOI,uBAAA;AhB00BZ;;AgBj1BQ;EAOI,uBAAA;AhB80BZ;;AgBr1BQ;EAOI,2BAAA;AhBk1BZ;;AgBz1BQ;EAOI,wBAAA;AhBs1BZ;;AgB71BQ;EAOI,4BAAA;AhB01BZ;;AgBj2BQ;EAOI,yBAAA;AhB81BZ;;AgBr2BQ;EAOI,8BAAA;AhBk2BZ;;AgBz2BQ;EAOI,iCAAA;AhBs2BZ;;AgB72BQ;EAOI,sCAAA;AhB02BZ;;AgBj3BQ;EAOI,yCAAA;AhB82BZ;;AgBr3BQ;EAOI,uBAAA;AhBk3BZ;;AgBz3BQ;EAOI,uBAAA;AhBs3BZ;;AgB73BQ;EAOI,yBAAA;AhB03BZ;;AgBj4BQ;EAOI,yBAAA;AhB83BZ;;AgBr4BQ;EAOI,0BAAA;AhBk4BZ;;AgBz4BQ;EAOI,4BAAA;AhBs4BZ;;AgB74BQ;EAOI,kCAAA;AhB04BZ;;AgBj5BQ;EAOI,sCAAA;AhB84BZ;;AgBr5BQ;EAOI,oCAAA;AhBk5BZ;;AgBz5BQ;EAOI,kCAAA;AhBs5BZ;;AgB75BQ;EAOI,yCAAA;AhB05BZ;;AgBj6BQ;EAOI,wCAAA;AhB85BZ;;AgBr6BQ;EAOI,wCAAA;AhBk6BZ;;AgBz6BQ;EAOI,kCAAA;AhBs6BZ;;AgB76BQ;EAOI,gCAAA;AhB06BZ;;AgBj7BQ;EAOI,8BAAA;AhB86BZ;;AgBr7BQ;EAOI,gCAAA;AhBk7BZ;;AgBz7BQ;EAOI,+BAAA;AhBs7BZ;;AgB77BQ;EAOI,oCAAA;AhB07BZ;;AgBj8BQ;EAOI,kCAAA;AhB87BZ;;AgBr8BQ;EAOI,gCAAA;AhBk8BZ;;AgBz8BQ;EAOI,uCAAA;AhBs8BZ;;AgB78BQ;EAOI,sCAAA;AhB08BZ;;AgBj9BQ;EAOI,iCAAA;AhB88BZ;;AgBr9BQ;EAOI,2BAAA;AhBk9BZ;;AgBz9BQ;EAOI,iCAAA;AhBs9BZ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FM;IAOI,sCAAA;EhBmtFV;EgB1tFM;IAOI,yCAAA;EhBstFV;EgB7tFM;IAOI,uBAAA;EhBytFV;EgBhuFM;IAOI,uBAAA;EhB4tFV;EgBnuFM;IAOI,yBAAA;EhB+tFV;EgBtuFM;IAOI,yBAAA;EhBkuFV;EgBzuFM;IAOI,0BAAA;EhBquFV;EgB5uFM;IAOI,4BAAA;EhBwuFV;EgB/uFM;IAOI,kCAAA;EhB2uFV;EgBlvFM;IAOI,sCAAA;EhB8uFV;EgBrvFM;IAOI,oCAAA;EhBivFV;EgBxvFM;IAOI,kCAAA;EhBovFV;EgB3vFM;IAOI,yCAAA;EhBuvFV;EgB9vFM;IAOI,wCAAA;EhB0vFV;EgBjwFM;IAOI,wCAAA;EhB6vFV;EgBpwFM;IAOI,kCAAA;EhBgwFV;EgBvwFM;IAOI,gCAAA;EhBmwFV;EgB1wFM;IAOI,8BAAA;EhBswFV;EgB7wFM;IAOI,gCAAA;EhBywFV;EgBhxFM;IAOI,+BAAA;EhB4wFV;EgBnxFM;IAOI,oCAAA;EhB+wFV;EgBtxFM;IAOI,kCAAA;EhBkxFV;EgBzxFM;IAOI,gCAAA;EhBqxFV;EgB5xFM;IAOI,uCAAA;EhBwxFV;EgB/xFM;IAOI,sCAAA;EhB2xFV;EgBlyFM;IAOI,iCAAA;EhB8xFV;EgBryFM;IAOI,2BAAA;EhBiyFV;EgBxyFM;IAOI,iCAAA;EhBoyFV;EgB3yFM;IAOI,+BAAA;EhBuyFV;EgB9yFM;IAOI,6BAAA;EhB0yFV;EgBjzFM;IAOI,+BAAA;EhB6yFV;EgBpzFM;IAOI,8BAAA;EhBgzFV;EgBvzFM;IAOI,oBAAA;EhBmzFV;EgB1zFM;IAOI,mBAAA;EhBszFV;EgB7zFM;IAOI,mBAAA;EhByzFV;EgBh0FM;IAOI,mBAAA;EhB4zFV;EgBn0FM;IAOI,mBAAA;EhB+zFV;EgBt0FM;IAOI,mBAAA;EhBk0FV;EgBz0FM;IAOI,mBAAA;EhBq0FV;EgB50FM;IAOI,mBAAA;EhBw0FV;EgB/0FM;IAOI,oBAAA;EhB20FV;EgBl1FM;IAOI,0BAAA;EhB80FV;EgBr1FM;IAOI,yBAAA;EhBi1FV;EgBx1FM;IAOI,uBAAA;EhBo1FV;EgB31FM;IAOI,yBAA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AAA;EhBqtGV;EgB5tGM;IAOI,wBAAA;EhBwtGV;EgB/tGM;IAOI,yBAAA;EhB2tGV;EgBluGM;IAOI,6BAAA;EhB8tGV;EgBruGM;IAOI,8BAAA;EhBiuGV;EgBxuGM;IAOI,wBAAA;EhBouGV;EgB3uGM;IAOI,+BAAA;EhBuuGV;EgB9uGM;IAOI,wBAAA;EhB0uGV;EgBjvGM;IAOI,yBAAA;EhB6uGV;EgBpvGM;IAOI,8BAAA;EhBgvGV;EgBvvGM;IAOI,iCAAA;EhBmvGV;EgB1vGM;IAOI,sCAAA;EhBsvGV;EgB7vGM;IAOI,yCAAA;EhByvGV;EgBhwGM;IAOI,uBAAA;EhB4vGV;EgBnwGM;IAOI,uBAAA;EhB+vGV;EgBtwGM;IAOI,yBAAA;EhBkwGV;EgBzwGM;IAOI,yBAAA;EhBqwGV;EgB5wGM;IAOI,0BAAA;EhBwwGV;EgB/wGM;IAOI,4BAAA;EhB2wGV;EgBlxGM;IAOI,kCAAA;EhB8wGV;EgBrxGM;IAOI,sCAAA;EhBixGV;EgBxxGM;IAOI,oCAAA;EhBoxGV;EgB3xGM;IAOI,kCAAA;EhBuxGV;EgB9xGM;IAOI,yCAAA;EhB0xGV;EgBjyGM;IAOI,wCAAA;EhB6xGV;EgBpyGM;IAOI,wCAAA;EhBgyGV;EgBvyGM;IAOI,kCAAA;EhBmyGV;EgB1yGM;IAOI,gCAAA;EhBsyGV;EgB7yGM;IAOI,8BAAA;EhByyGV;EgBhzGM;IAOI,gCAAA;EhB4yGV;EgBnzGM;IAOI,+BAAA;EhB+yGV;EgBtzGM;IAOI,oCAAA;EhBkzGV;EgBzzGM;IAOI,kCAAA;EhBqzGV;EgB5zGM;IAOI,gCAAA;EhBwzGV;EgB/zGM;IAOI,uCAAA;EhB2zGV;EgBl0GM;IAOI,sCAAA;EhB8zGV;EgBr0GM;IAOI,iCAAA;EhBi0GV;EgBx0GM;IAOI,2BAAA;EhBo0GV;EgB30GM;IAOI,iCAAA;EhBu0GV;EgB90GM;IAOI,+BAAA;EhB00GV;EgBj1GM;IAOI,6BAAA;EhB60GV;EgBp1GM;IAOI,+BAAA;EhBg1GV;EgBv1GM;IAOI,8BAAA;EhBm1GV;EgB11GM;IAOI,oBAAA;EhBs1GV;EgB71GM;IAOI,mBAAA;EhBy1GV;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","file":"bootstrap-utilities.rtl.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Utilities v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text) !important;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-emphasis {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-utilities.css.map */\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) if($enable-important-utilities, !important, null);\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n$primary-text: $blue-600 !default;\n$secondary-text: $gray-600 !default;\n$success-text: $green-600 !default;\n$info-text: $cyan-700 !default;\n$warning-text: $yellow-700 !default;\n$danger-text: $red-600 !default;\n$light-text: $gray-600 !default;\n$dark-text: $gray-700 !default;\n\n$primary-bg-subtle: $blue-100 !default;\n$secondary-bg-subtle: $gray-100 !default;\n$success-bg-subtle: $green-100 !default;\n$info-bg-subtle: $cyan-100 !default;\n$warning-bg-subtle: $yellow-100 !default;\n$danger-bg-subtle: $red-100 !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n\n$primary-border-subtle: $blue-200 !default;\n$secondary-border-subtle: $gray-200 !default;\n$success-border-subtle: $green-200 !default;\n$info-border-subtle: $cyan-200 !default;\n$warning-border-subtle: $yellow-200 !default;\n$danger-border-subtle: $red-200 !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-emphasis-color: $black !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba(var(--#{$prefix}body-color-rgb), .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba(var(--#{$prefix}body-color-rgb), .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: var(--#{$prefix}secondary-color) !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}form-control-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default; //$gray-400\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc($input-border-width * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.875em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}success-text),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}success),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}danger-text),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}danger),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{rgba($body-color, .75)}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc($pagination-border-width * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc($popover-border-radius - $popover-border-width) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css
index db1d97807..26a0468ca 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css
@@ -1,7 +1,6 @@
/*!
- * Bootstrap Utilities v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap Utilities v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(13,110,253,var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(108,117,125,var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(25,135,84,var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(13,202,240,var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(255,193,7,var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(33,37,41,var(--bs-bg-opacity,1))!important}.link-primary{color:#0d6efd!important}.link-primary:focus,.link-primary:hover{color:#0a58ca!important}.link-secondary{color:#6c757d!important}.link-secondary:focus,.link-secondary:hover{color:#565e64!important}.link-success{color:#198754!important}.link-success:focus,.link-success:hover{color:#146c43!important}.link-info{color:#0dcaf0!important}.link-info:focus,.link-info:hover{color:#3dd5f3!important}.link-warning{color:#ffc107!important}.link-warning:focus,.link-warning:hover{color:#ffcd39!important}.link-danger{color:#dc3545!important}.link-danger:focus,.link-danger:hover{color:#b02a37!important}.link-light{color:#f8f9fa!important}.link-light:focus,.link-light:hover{color:#f9fafb!important}.link-dark{color:#212529!important}.link-dark:focus,.link-dark:hover{color:#1a1e21!important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:right!important}.float-end{float:left!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{right:0!important}.start-50{right:50%!important}.start-100{right:100%!important}.end-0{left:0!important}.end-50{left:50%!important}.end-100{left:100%!important}.translate-middle{transform:translate(50%,-50%)!important}.translate-middle-x{transform:translateX(50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-left:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-right:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-1{--bs-border-width:1px}.border-2{--bs-border-width:2px}.border-3{--bs-border-width:3px}.border-4{--bs-border-width:4px}.border-5{--bs-border-width:5px}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:3rem!important}.me-auto{margin-left:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:3rem!important}.ms-auto{margin-right:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-semibold{font-weight:600!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:right!important}.text-end{text-align:left!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-2xl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-right-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-end{border-top-left-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-start{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:right!important}.float-sm-end{float:left!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:3rem!important}.me-sm-auto{margin-left:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:3rem!important}.ms-sm-auto{margin-right:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.text-sm-start{text-align:right!important}.text-sm-end{text-align:left!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:right!important}.float-md-end{float:left!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:3rem!important}.me-md-auto{margin-left:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:3rem!important}.ms-md-auto{margin-right:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.text-md-start{text-align:right!important}.text-md-end{text-align:left!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:right!important}.float-lg-end{float:left!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:3rem!important}.me-lg-auto{margin-left:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:3rem!important}.ms-lg-auto{margin-right:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.text-lg-start{text-align:right!important}.text-lg-end{text-align:left!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:right!important}.float-xl-end{float:left!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:3rem!important}.me-xl-auto{margin-left:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:3rem!important}.ms-xl-auto{margin-right:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.text-xl-start{text-align:right!important}.text-xl-end{text-align:left!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:right!important}.float-xxl-end{float:left!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:3rem!important}.me-xxl-auto{margin-left:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:3rem!important}.ms-xxl-auto{margin-right:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.text-xxl-start{text-align:right!important}.text-xxl-end{text-align:left!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text:#0a58ca;--bs-secondary-text:#6c757d;--bs-success-text:#146c43;--bs-info-text:#087990;--bs-warning-text:#997404;--bs-danger-text:#b02a37;--bs-light-text:#6c757d;--bs-dark-text:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#f8f9fa;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#e9ecef;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);--bs-emphasis-color:#000;--bs-form-control-bg:var(--bs-body-bg);--bs-form-control-disabled-bg:var(--bs-secondary-bg);--bs-highlight-bg:#fff3cd;--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}[data-bs-theme=dark]{--bs-body-color:#adb5bd;--bs-body-color-rgb:173,181,189;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#f8f9fa;--bs-emphasis-color-rgb:248,249,250;--bs-secondary-color:rgba(173, 181, 189, 0.75);--bs-secondary-color-rgb:173,181,189;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(173, 181, 189, 0.5);--bs-tertiary-color-rgb:173,181,189;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-emphasis-color:#fff;--bs-primary-text:#6ea8fe;--bs-secondary-text:#dee2e6;--bs-success-text:#75b798;--bs-info-text:#6edff6;--bs-warning-text:#ffda6a;--bs-danger-text:#ea868f;--bs-light-text:#f8f9fa;--bs-dark-text:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#212529;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#495057;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#055160;--bs-warning-border-subtle:#664d03;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:#fff;--bs-link-color:#6ea8fe;--bs-link-hover-color:#9ec5fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:158,197,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(13,110,253,var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(108,117,125,var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(25,135,84,var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(13,202,240,var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(255,193,7,var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(33,37,41,var(--bs-bg-opacity,1))!important}.link-primary{color:#0d6efd!important}.link-primary:focus,.link-primary:hover{color:#0a58ca!important}.link-secondary{color:#6c757d!important}.link-secondary:focus,.link-secondary:hover{color:#565e64!important}.link-success{color:#198754!important}.link-success:focus,.link-success:hover{color:#146c43!important}.link-info{color:#0dcaf0!important}.link-info:focus,.link-info:hover{color:#3dd5f3!important}.link-warning{color:#ffc107!important}.link-warning:focus,.link-warning:hover{color:#ffcd39!important}.link-danger{color:#dc3545!important}.link-danger:focus,.link-danger:hover{color:#b02a37!important}.link-light{color:#f8f9fa!important}.link-light:focus,.link-light:hover{color:#f9fafb!important}.link-dark{color:#212529!important}.link-dark:focus,.link-dark:hover{color:#1a1e21!important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:right!important}.float-end{float:left!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(var(--bs-body-color-rgb),.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(var(--bs-body-color-rgb),.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(var(--bs-body-color-rgb),.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{right:0!important}.start-50{right:50%!important}.start-100{right:100%!important}.end-0{left:0!important}.end-50{left:50%!important}.end-100{left:100%!important}.translate-middle{transform:translate(50%,-50%)!important}.translate-middle-x{transform:translateX(50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-left:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-right:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{--bs-border-width:1px}.border-2{--bs-border-width:2px}.border-3{--bs-border-width:3px}.border-4{--bs-border-width:4px}.border-5{--bs-border-width:5px}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:3rem!important}.me-auto{margin-left:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:3rem!important}.ms-auto{margin-right:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:right!important}.text-end{text-align:left!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text)!important}.text-secondary-emphasis{color:var(--bs-secondary-text)!important}.text-success-emphasis{color:var(--bs-success-text)!important}.text-info-emphasis{color:var(--bs-info-text)!important}.text-warning-emphasis{color:var(--bs-warning-text)!important}.text-danger-emphasis{color:var(--bs-danger-text)!important}.text-light-emphasis{color:var(--bs-light-text)!important}.text-dark-emphasis{color:var(--bs-dark-text)!important}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-emphasis{--bs-bg-opacity:1;background-color:rgba(var(--bs-emphasis-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-2xl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-right-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-right-radius:0!important;border-top-left-radius:0!important}.rounded-top-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-right-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-right-radius:var(--bs-border-radius-2xl)!important;border-top-left-radius:var(--bs-border-radius-2xl)!important}.rounded-top-circle{border-top-right-radius:50%!important;border-top-left-radius:50%!important}.rounded-top-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-left-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.rounded-end-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-left-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-left-radius:var(--bs-border-radius-2xl)!important;border-bottom-left-radius:var(--bs-border-radius-2xl)!important}.rounded-end-circle{border-top-left-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-end-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-bottom-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-left-radius:var(--bs-border-radius-2xl)!important;border-bottom-right-radius:var(--bs-border-radius-2xl)!important}.rounded-bottom-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-bottom-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-start-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-right-radius:var(--bs-border-radius-2xl)!important;border-top-right-radius:var(--bs-border-radius-2xl)!important}.rounded-start-circle{border-bottom-right-radius:50%!important;border-top-right-radius:50%!important}.rounded-start-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:right!important}.float-sm-end{float:left!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:3rem!important}.me-sm-auto{margin-left:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:3rem!important}.ms-sm-auto{margin-right:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:right!important}.text-sm-end{text-align:left!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:right!important}.float-md-end{float:left!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:3rem!important}.me-md-auto{margin-left:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:3rem!important}.ms-md-auto{margin-right:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:right!important}.text-md-end{text-align:left!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:right!important}.float-lg-end{float:left!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:3rem!important}.me-lg-auto{margin-left:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:3rem!important}.ms-lg-auto{margin-right:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:right!important}.text-lg-end{text-align:left!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:right!important}.float-xl-end{float:left!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:3rem!important}.me-xl-auto{margin-left:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:3rem!important}.ms-xl-auto{margin-right:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:right!important}.text-xl-end{text-align:left!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:right!important}.float-xxl-end{float:left!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:3rem!important}.me-xxl-auto{margin-left:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:3rem!important}.ms-xxl-auto{margin-right:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:right!important}.text-xxl-end{text-align:left!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
/*# sourceMappingURL=bootstrap-utilities.rtl.min.css.map */ \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map
index 33cdee940..d288ea8bc 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/mixins/_clearfix.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/mixins/_breakpoints.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","dist/css/bootstrap-utilities.rtl.css","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value !important; // stylelint-disable-line declaration-no-important\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","/*!\n * Bootstrap Utilities v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: right !important;\n}\n\n.float-end {\n float: left !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n right: 0 !important;\n}\n\n.start-50 {\n right: 50% !important;\n}\n\n.start-100 {\n right: 100% !important;\n}\n\n.end-0 {\n left: 0 !important;\n}\n\n.end-50 {\n left: 50% !important;\n}\n\n.end-100 {\n left: 100% !important;\n}\n\n.translate-middle {\n transform: translate(50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-left: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-right: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.mx-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.mx-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-left: 0 !important;\n}\n\n.me-1 {\n margin-left: 0.25rem !important;\n}\n\n.me-2 {\n margin-left: 0.5rem !important;\n}\n\n.me-3 {\n margin-left: 1rem !important;\n}\n\n.me-4 {\n margin-left: 1.5rem !important;\n}\n\n.me-5 {\n margin-left: 3rem !important;\n}\n\n.me-auto {\n margin-left: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-right: 0 !important;\n}\n\n.ms-1 {\n margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n margin-right: 1rem !important;\n}\n\n.ms-4 {\n margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n margin-right: 3rem !important;\n}\n\n.ms-auto {\n margin-right: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.px-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n\n.px-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n}\n\n.px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-left: 0 !important;\n}\n\n.pe-1 {\n padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n padding-left: 1rem !important;\n}\n\n.pe-4 {\n padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n padding-left: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-right: 0 !important;\n}\n\n.ps-1 {\n padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n padding-right: 1rem !important;\n}\n\n.ps-4 {\n padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n padding-right: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: right !important;\n}\n\n.text-end {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: right !important;\n }\n .float-sm-end {\n float: left !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-left: 0 !important;\n }\n .me-sm-1 {\n margin-left: 0.25rem !important;\n }\n .me-sm-2 {\n margin-left: 0.5rem !important;\n }\n .me-sm-3 {\n margin-left: 1rem !important;\n }\n .me-sm-4 {\n margin-left: 1.5rem !important;\n }\n .me-sm-5 {\n margin-left: 3rem !important;\n }\n .me-sm-auto {\n margin-left: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-right: 0 !important;\n }\n .ms-sm-1 {\n margin-right: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-right: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-right: 1rem !important;\n }\n .ms-sm-4 {\n margin-right: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-right: 3rem !important;\n }\n .ms-sm-auto {\n margin-right: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-left: 0 !important;\n }\n .pe-sm-1 {\n padding-left: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-left: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-left: 1rem !important;\n }\n .pe-sm-4 {\n padding-left: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-left: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-right: 0 !important;\n }\n .ps-sm-1 {\n padding-right: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-right: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-right: 1rem !important;\n }\n .ps-sm-4 {\n padding-right: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-right: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: right !important;\n }\n .text-sm-end {\n text-align: left !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: right !important;\n }\n .float-md-end {\n float: left !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-left: 0 !important;\n }\n .me-md-1 {\n margin-left: 0.25rem !important;\n }\n .me-md-2 {\n margin-left: 0.5rem !important;\n }\n .me-md-3 {\n margin-left: 1rem !important;\n }\n .me-md-4 {\n margin-left: 1.5rem !important;\n }\n .me-md-5 {\n margin-left: 3rem !important;\n }\n .me-md-auto {\n margin-left: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-right: 0 !important;\n }\n .ms-md-1 {\n margin-right: 0.25rem !important;\n }\n .ms-md-2 {\n margin-right: 0.5rem !important;\n }\n .ms-md-3 {\n margin-right: 1rem !important;\n }\n .ms-md-4 {\n margin-right: 1.5rem !important;\n }\n .ms-md-5 {\n margin-right: 3rem !important;\n }\n .ms-md-auto {\n margin-right: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-left: 0 !important;\n }\n .pe-md-1 {\n padding-left: 0.25rem !important;\n }\n .pe-md-2 {\n padding-left: 0.5rem !important;\n }\n .pe-md-3 {\n padding-left: 1rem !important;\n }\n .pe-md-4 {\n padding-left: 1.5rem !important;\n }\n .pe-md-5 {\n padding-left: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-right: 0 !important;\n }\n .ps-md-1 {\n padding-right: 0.25rem !important;\n }\n .ps-md-2 {\n padding-right: 0.5rem !important;\n }\n .ps-md-3 {\n padding-right: 1rem !important;\n }\n .ps-md-4 {\n padding-right: 1.5rem !important;\n }\n .ps-md-5 {\n padding-right: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: right !important;\n }\n .text-md-end {\n text-align: left !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: right !important;\n }\n .float-lg-end {\n float: left !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-left: 0 !important;\n }\n .me-lg-1 {\n margin-left: 0.25rem !important;\n }\n .me-lg-2 {\n margin-left: 0.5rem !important;\n }\n .me-lg-3 {\n margin-left: 1rem !important;\n }\n .me-lg-4 {\n margin-left: 1.5rem !important;\n }\n .me-lg-5 {\n margin-left: 3rem !important;\n }\n .me-lg-auto {\n margin-left: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-right: 0 !important;\n }\n .ms-lg-1 {\n margin-right: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-right: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-right: 1rem !important;\n }\n .ms-lg-4 {\n margin-right: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-right: 3rem !important;\n }\n .ms-lg-auto {\n margin-right: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-left: 0 !important;\n }\n .pe-lg-1 {\n padding-left: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-left: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-left: 1rem !important;\n }\n .pe-lg-4 {\n padding-left: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-left: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-right: 0 !important;\n }\n .ps-lg-1 {\n padding-right: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-right: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-right: 1rem !important;\n }\n .ps-lg-4 {\n padding-right: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-right: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: right !important;\n }\n .text-lg-end {\n text-align: left !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: right !important;\n }\n .float-xl-end {\n float: left !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-left: 0 !important;\n }\n .me-xl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xl-3 {\n margin-left: 1rem !important;\n }\n .me-xl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xl-5 {\n margin-left: 3rem !important;\n }\n .me-xl-auto {\n margin-left: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-right: 0 !important;\n }\n .ms-xl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-right: 1rem !important;\n }\n .ms-xl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-right: 3rem !important;\n }\n .ms-xl-auto {\n margin-right: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-left: 0 !important;\n }\n .pe-xl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-left: 1rem !important;\n }\n .pe-xl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-left: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-right: 0 !important;\n }\n .ps-xl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-right: 1rem !important;\n }\n .ps-xl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-right: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: right !important;\n }\n .text-xl-end {\n text-align: left !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: right !important;\n }\n .float-xxl-end {\n float: left !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xxl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-left: 0 !important;\n }\n .me-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-left: 1rem !important;\n }\n .me-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-left: 3rem !important;\n }\n .me-xxl-auto {\n margin-left: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-right: 0 !important;\n }\n .ms-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-right: 1rem !important;\n }\n .ms-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-right: 3rem !important;\n }\n .ms-xxl-auto {\n margin-right: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xxl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-left: 0 !important;\n }\n .pe-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-left: 1rem !important;\n }\n .pe-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-left: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-right: 0 !important;\n }\n .ps-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-right: 1rem !important;\n }\n .ps-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-right: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: right !important;\n }\n .text-xxl-end {\n text-align: left !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap-utilities.rtl.css.map */","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","dist/css/bootstrap-utilities.rtl.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/mixins/_clearfix.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/mixins/_breakpoints.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","/*!\n * Bootstrap Utilities v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: right !important;\n}\n\n.float-end {\n float: left !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n right: 0 !important;\n}\n\n.start-50 {\n right: 50% !important;\n}\n\n.start-100 {\n right: 100% !important;\n}\n\n.end-0 {\n left: 0 !important;\n}\n\n.end-50 {\n left: 50% !important;\n}\n\n.end-100 {\n left: 100% !important;\n}\n\n.translate-middle {\n transform: translate(50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-left: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-right: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.mx-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.mx-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-left: 0 !important;\n}\n\n.me-1 {\n margin-left: 0.25rem !important;\n}\n\n.me-2 {\n margin-left: 0.5rem !important;\n}\n\n.me-3 {\n margin-left: 1rem !important;\n}\n\n.me-4 {\n margin-left: 1.5rem !important;\n}\n\n.me-5 {\n margin-left: 3rem !important;\n}\n\n.me-auto {\n margin-left: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-right: 0 !important;\n}\n\n.ms-1 {\n margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n margin-right: 1rem !important;\n}\n\n.ms-4 {\n margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n margin-right: 3rem !important;\n}\n\n.ms-auto {\n margin-right: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.px-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n\n.px-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n}\n\n.px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-left: 0 !important;\n}\n\n.pe-1 {\n padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n padding-left: 1rem !important;\n}\n\n.pe-4 {\n padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n padding-left: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-right: 0 !important;\n}\n\n.ps-1 {\n padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n padding-right: 1rem !important;\n}\n\n.ps-4 {\n padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n padding-right: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: right !important;\n}\n\n.text-end {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text) !important;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-emphasis {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-right-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-top-circle {\n border-top-right-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-end-circle {\n border-top-left-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-left-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-left-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-right-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-right-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: right !important;\n }\n .float-sm-end {\n float: left !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-left: 0 !important;\n }\n .me-sm-1 {\n margin-left: 0.25rem !important;\n }\n .me-sm-2 {\n margin-left: 0.5rem !important;\n }\n .me-sm-3 {\n margin-left: 1rem !important;\n }\n .me-sm-4 {\n margin-left: 1.5rem !important;\n }\n .me-sm-5 {\n margin-left: 3rem !important;\n }\n .me-sm-auto {\n margin-left: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-right: 0 !important;\n }\n .ms-sm-1 {\n margin-right: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-right: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-right: 1rem !important;\n }\n .ms-sm-4 {\n margin-right: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-right: 3rem !important;\n }\n .ms-sm-auto {\n margin-right: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-left: 0 !important;\n }\n .pe-sm-1 {\n padding-left: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-left: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-left: 1rem !important;\n }\n .pe-sm-4 {\n padding-left: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-left: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-right: 0 !important;\n }\n .ps-sm-1 {\n padding-right: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-right: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-right: 1rem !important;\n }\n .ps-sm-4 {\n padding-right: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-right: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: right !important;\n }\n .text-sm-end {\n text-align: left !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: right !important;\n }\n .float-md-end {\n float: left !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-left: 0 !important;\n }\n .me-md-1 {\n margin-left: 0.25rem !important;\n }\n .me-md-2 {\n margin-left: 0.5rem !important;\n }\n .me-md-3 {\n margin-left: 1rem !important;\n }\n .me-md-4 {\n margin-left: 1.5rem !important;\n }\n .me-md-5 {\n margin-left: 3rem !important;\n }\n .me-md-auto {\n margin-left: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-right: 0 !important;\n }\n .ms-md-1 {\n margin-right: 0.25rem !important;\n }\n .ms-md-2 {\n margin-right: 0.5rem !important;\n }\n .ms-md-3 {\n margin-right: 1rem !important;\n }\n .ms-md-4 {\n margin-right: 1.5rem !important;\n }\n .ms-md-5 {\n margin-right: 3rem !important;\n }\n .ms-md-auto {\n margin-right: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-left: 0 !important;\n }\n .pe-md-1 {\n padding-left: 0.25rem !important;\n }\n .pe-md-2 {\n padding-left: 0.5rem !important;\n }\n .pe-md-3 {\n padding-left: 1rem !important;\n }\n .pe-md-4 {\n padding-left: 1.5rem !important;\n }\n .pe-md-5 {\n padding-left: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-right: 0 !important;\n }\n .ps-md-1 {\n padding-right: 0.25rem !important;\n }\n .ps-md-2 {\n padding-right: 0.5rem !important;\n }\n .ps-md-3 {\n padding-right: 1rem !important;\n }\n .ps-md-4 {\n padding-right: 1.5rem !important;\n }\n .ps-md-5 {\n padding-right: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: right !important;\n }\n .text-md-end {\n text-align: left !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: right !important;\n }\n .float-lg-end {\n float: left !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-left: 0 !important;\n }\n .me-lg-1 {\n margin-left: 0.25rem !important;\n }\n .me-lg-2 {\n margin-left: 0.5rem !important;\n }\n .me-lg-3 {\n margin-left: 1rem !important;\n }\n .me-lg-4 {\n margin-left: 1.5rem !important;\n }\n .me-lg-5 {\n margin-left: 3rem !important;\n }\n .me-lg-auto {\n margin-left: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-right: 0 !important;\n }\n .ms-lg-1 {\n margin-right: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-right: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-right: 1rem !important;\n }\n .ms-lg-4 {\n margin-right: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-right: 3rem !important;\n }\n .ms-lg-auto {\n margin-right: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-left: 0 !important;\n }\n .pe-lg-1 {\n padding-left: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-left: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-left: 1rem !important;\n }\n .pe-lg-4 {\n padding-left: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-left: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-right: 0 !important;\n }\n .ps-lg-1 {\n padding-right: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-right: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-right: 1rem !important;\n }\n .ps-lg-4 {\n padding-right: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-right: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: right !important;\n }\n .text-lg-end {\n text-align: left !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: right !important;\n }\n .float-xl-end {\n float: left !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-left: 0 !important;\n }\n .me-xl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xl-3 {\n margin-left: 1rem !important;\n }\n .me-xl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xl-5 {\n margin-left: 3rem !important;\n }\n .me-xl-auto {\n margin-left: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-right: 0 !important;\n }\n .ms-xl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-right: 1rem !important;\n }\n .ms-xl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-right: 3rem !important;\n }\n .ms-xl-auto {\n margin-right: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-left: 0 !important;\n }\n .pe-xl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-left: 1rem !important;\n }\n .pe-xl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-left: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-right: 0 !important;\n }\n .ps-xl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-right: 1rem !important;\n }\n .ps-xl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-right: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: right !important;\n }\n .text-xl-end {\n text-align: left !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: right !important;\n }\n .float-xxl-end {\n float: left !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xxl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-left: 0 !important;\n }\n .me-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-left: 1rem !important;\n }\n .me-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-left: 3rem !important;\n }\n .me-xxl-auto {\n margin-left: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-right: 0 !important;\n }\n .ms-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-right: 1rem !important;\n }\n .ms-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-right: 3rem !important;\n }\n .ms-xxl-auto {\n margin-right: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xxl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-left: 0 !important;\n }\n .pe-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-left: 1rem !important;\n }\n .pe-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-left: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-right: 0 !important;\n }\n .ps-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-right: 1rem !important;\n }\n .ps-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-right: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: right !important;\n }\n .text-xxl-end {\n text-align: left !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap-utilities.rtl.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) if($enable-important-utilities, !important, null);\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.css b/vendor/twbs/bootstrap/dist/css/bootstrap.css
index a3a568284..ef6e21690 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap.css
@@ -1,11 +1,11 @@
@charset "UTF-8";
/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
-:root {
+:root,
+[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
@@ -45,6 +45,30 @@
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
+ --bs-primary-text: #0a58ca;
+ --bs-secondary-text: #6c757d;
+ --bs-success-text: #146c43;
+ --bs-info-text: #087990;
+ --bs-warning-text: #997404;
+ --bs-danger-text: #b02a37;
+ --bs-light-text: #6c757d;
+ --bs-dark-text: #495057;
+ --bs-primary-bg-subtle: #cfe2ff;
+ --bs-secondary-bg-subtle: #f8f9fa;
+ --bs-success-bg-subtle: #d1e7dd;
+ --bs-info-bg-subtle: #cff4fc;
+ --bs-warning-bg-subtle: #fff3cd;
+ --bs-danger-bg-subtle: #f8d7da;
+ --bs-light-bg-subtle: #fcfcfd;
+ --bs-dark-bg-subtle: #ced4da;
+ --bs-primary-border-subtle: #9ec5fe;
+ --bs-secondary-border-subtle: #e9ecef;
+ --bs-success-border-subtle: #a3cfbb;
+ --bs-info-border-subtle: #9eeaf9;
+ --bs-warning-border-subtle: #ffe69c;
+ --bs-danger-border-subtle: #f1aeb5;
+ --bs-light-border-subtle: #e9ecef;
+ --bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
@@ -57,7 +81,25 @@
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
+ --bs-emphasis-color: #000;
+ --bs-emphasis-color-rgb: 0, 0, 0;
+ --bs-secondary-color: rgba(33, 37, 41, 0.75);
+ --bs-secondary-color-rgb: 33, 37, 41;
+ --bs-secondary-bg: #e9ecef;
+ --bs-secondary-bg-rgb: 233, 236, 239;
+ --bs-tertiary-color: rgba(33, 37, 41, 0.5);
+ --bs-tertiary-color-rgb: 33, 37, 41;
+ --bs-tertiary-bg: #f8f9fa;
+ --bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-link-color: #0d6efd;
+ --bs-link-color-rgb: 13, 110, 253;
+ --bs-link-decoration: underline;
+ --bs-link-hover-color: #0a58ca;
+ --bs-link-hover-color-rgb: 10, 88, 202;
+ --bs-code-color: #d63384;
+ --bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
@@ -68,10 +110,70 @@
--bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem;
- --bs-link-color: #0d6efd;
- --bs-link-hover-color: #0a58ca;
- --bs-code-color: #d63384;
+ --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
+ --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-emphasis-color: #000;
+ --bs-form-control-bg: var(--bs-body-bg);
+ --bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd;
+ --bs-breakpoint-xs: 0;
+ --bs-breakpoint-sm: 576px;
+ --bs-breakpoint-md: 768px;
+ --bs-breakpoint-lg: 992px;
+ --bs-breakpoint-xl: 1200px;
+ --bs-breakpoint-xxl: 1400px;
+}
+
+[data-bs-theme=dark] {
+ --bs-body-color: #adb5bd;
+ --bs-body-color-rgb: 173, 181, 189;
+ --bs-body-bg: #212529;
+ --bs-body-bg-rgb: 33, 37, 41;
+ --bs-emphasis-color: #f8f9fa;
+ --bs-emphasis-color-rgb: 248, 249, 250;
+ --bs-secondary-color: rgba(173, 181, 189, 0.75);
+ --bs-secondary-color-rgb: 173, 181, 189;
+ --bs-secondary-bg: #343a40;
+ --bs-secondary-bg-rgb: 52, 58, 64;
+ --bs-tertiary-color: rgba(173, 181, 189, 0.5);
+ --bs-tertiary-color-rgb: 173, 181, 189;
+ --bs-tertiary-bg: #2b3035;
+ --bs-tertiary-bg-rgb: 43, 48, 53;
+ --bs-emphasis-color: #fff;
+ --bs-primary-text: #6ea8fe;
+ --bs-secondary-text: #dee2e6;
+ --bs-success-text: #75b798;
+ --bs-info-text: #6edff6;
+ --bs-warning-text: #ffda6a;
+ --bs-danger-text: #ea868f;
+ --bs-light-text: #f8f9fa;
+ --bs-dark-text: #dee2e6;
+ --bs-primary-bg-subtle: #031633;
+ --bs-secondary-bg-subtle: #212529;
+ --bs-success-bg-subtle: #051b11;
+ --bs-info-bg-subtle: #032830;
+ --bs-warning-bg-subtle: #332701;
+ --bs-danger-bg-subtle: #2c0b0e;
+ --bs-light-bg-subtle: #343a40;
+ --bs-dark-bg-subtle: #1a1d20;
+ --bs-primary-border-subtle: #084298;
+ --bs-secondary-border-subtle: #495057;
+ --bs-success-border-subtle: #0f5132;
+ --bs-info-border-subtle: #055160;
+ --bs-warning-border-subtle: #664d03;
+ --bs-danger-border-subtle: #842029;
+ --bs-light-border-subtle: #495057;
+ --bs-dark-border-subtle: #343a40;
+ --bs-heading-color: #fff;
+ --bs-link-color: #6ea8fe;
+ --bs-link-hover-color: #9ec5fe;
+ --bs-link-color-rgb: 110, 168, 254;
+ --bs-link-hover-color-rgb: 158, 197, 254;
+ --bs-code-color: #e685b5;
+ --bs-border-color: #495057;
+ --bs-border-color-translucent: rgba(255, 255, 255, 0.15);
}
*,
@@ -103,7 +205,7 @@ hr {
margin: 1rem 0;
color: inherit;
border: 0;
- border-top: 1px solid;
+ border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
@@ -112,6 +214,7 @@ h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
+ color: var(--bs-heading-color, inherit);
}
h1, .h1 {
@@ -240,11 +343,11 @@ sup {
}
a {
- color: var(--bs-link-color);
+ color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
- color: var(--bs-link-hover-color);
+ --bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
@@ -311,7 +414,7 @@ table {
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
- color: #6c757d;
+ color: var(--bs-secondary-color);
text-align: left;
}
@@ -604,9 +707,9 @@ progress {
.img-thumbnail {
padding: 0.25rem;
- background-color: #fff;
- border: 1px solid var(--bs-border-color);
- border-radius: 0.375rem;
+ background-color: var(--bs-body-bg);
+ border: var(--bs-border-width) solid var(--bs-border-color);
+ border-radius: var(--bs-border-radius);
max-width: 100%;
height: auto;
}
@@ -622,7 +725,7 @@ progress {
.figure-caption {
font-size: 0.875em;
- color: #6c757d;
+ color: var(--bs-secondary-color);
}
.container,
@@ -1013,51 +1116,51 @@ progress {
margin-left: 91.66666667%;
}
.g-sm-0,
-.gx-sm-0 {
+ .gx-sm-0 {
--bs-gutter-x: 0;
}
.g-sm-0,
-.gy-sm-0 {
+ .gy-sm-0 {
--bs-gutter-y: 0;
}
.g-sm-1,
-.gx-sm-1 {
+ .gx-sm-1 {
--bs-gutter-x: 0.25rem;
}
.g-sm-1,
-.gy-sm-1 {
+ .gy-sm-1 {
--bs-gutter-y: 0.25rem;
}
.g-sm-2,
-.gx-sm-2 {
+ .gx-sm-2 {
--bs-gutter-x: 0.5rem;
}
.g-sm-2,
-.gy-sm-2 {
+ .gy-sm-2 {
--bs-gutter-y: 0.5rem;
}
.g-sm-3,
-.gx-sm-3 {
+ .gx-sm-3 {
--bs-gutter-x: 1rem;
}
.g-sm-3,
-.gy-sm-3 {
+ .gy-sm-3 {
--bs-gutter-y: 1rem;
}
.g-sm-4,
-.gx-sm-4 {
+ .gx-sm-4 {
--bs-gutter-x: 1.5rem;
}
.g-sm-4,
-.gy-sm-4 {
+ .gy-sm-4 {
--bs-gutter-y: 1.5rem;
}
.g-sm-5,
-.gx-sm-5 {
+ .gx-sm-5 {
--bs-gutter-x: 3rem;
}
.g-sm-5,
-.gy-sm-5 {
+ .gy-sm-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1182,51 +1285,51 @@ progress {
margin-left: 91.66666667%;
}
.g-md-0,
-.gx-md-0 {
+ .gx-md-0 {
--bs-gutter-x: 0;
}
.g-md-0,
-.gy-md-0 {
+ .gy-md-0 {
--bs-gutter-y: 0;
}
.g-md-1,
-.gx-md-1 {
+ .gx-md-1 {
--bs-gutter-x: 0.25rem;
}
.g-md-1,
-.gy-md-1 {
+ .gy-md-1 {
--bs-gutter-y: 0.25rem;
}
.g-md-2,
-.gx-md-2 {
+ .gx-md-2 {
--bs-gutter-x: 0.5rem;
}
.g-md-2,
-.gy-md-2 {
+ .gy-md-2 {
--bs-gutter-y: 0.5rem;
}
.g-md-3,
-.gx-md-3 {
+ .gx-md-3 {
--bs-gutter-x: 1rem;
}
.g-md-3,
-.gy-md-3 {
+ .gy-md-3 {
--bs-gutter-y: 1rem;
}
.g-md-4,
-.gx-md-4 {
+ .gx-md-4 {
--bs-gutter-x: 1.5rem;
}
.g-md-4,
-.gy-md-4 {
+ .gy-md-4 {
--bs-gutter-y: 1.5rem;
}
.g-md-5,
-.gx-md-5 {
+ .gx-md-5 {
--bs-gutter-x: 3rem;
}
.g-md-5,
-.gy-md-5 {
+ .gy-md-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1351,51 +1454,51 @@ progress {
margin-left: 91.66666667%;
}
.g-lg-0,
-.gx-lg-0 {
+ .gx-lg-0 {
--bs-gutter-x: 0;
}
.g-lg-0,
-.gy-lg-0 {
+ .gy-lg-0 {
--bs-gutter-y: 0;
}
.g-lg-1,
-.gx-lg-1 {
+ .gx-lg-1 {
--bs-gutter-x: 0.25rem;
}
.g-lg-1,
-.gy-lg-1 {
+ .gy-lg-1 {
--bs-gutter-y: 0.25rem;
}
.g-lg-2,
-.gx-lg-2 {
+ .gx-lg-2 {
--bs-gutter-x: 0.5rem;
}
.g-lg-2,
-.gy-lg-2 {
+ .gy-lg-2 {
--bs-gutter-y: 0.5rem;
}
.g-lg-3,
-.gx-lg-3 {
+ .gx-lg-3 {
--bs-gutter-x: 1rem;
}
.g-lg-3,
-.gy-lg-3 {
+ .gy-lg-3 {
--bs-gutter-y: 1rem;
}
.g-lg-4,
-.gx-lg-4 {
+ .gx-lg-4 {
--bs-gutter-x: 1.5rem;
}
.g-lg-4,
-.gy-lg-4 {
+ .gy-lg-4 {
--bs-gutter-y: 1.5rem;
}
.g-lg-5,
-.gx-lg-5 {
+ .gx-lg-5 {
--bs-gutter-x: 3rem;
}
.g-lg-5,
-.gy-lg-5 {
+ .gy-lg-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1520,51 +1623,51 @@ progress {
margin-left: 91.66666667%;
}
.g-xl-0,
-.gx-xl-0 {
+ .gx-xl-0 {
--bs-gutter-x: 0;
}
.g-xl-0,
-.gy-xl-0 {
+ .gy-xl-0 {
--bs-gutter-y: 0;
}
.g-xl-1,
-.gx-xl-1 {
+ .gx-xl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xl-1,
-.gy-xl-1 {
+ .gy-xl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xl-2,
-.gx-xl-2 {
+ .gx-xl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xl-2,
-.gy-xl-2 {
+ .gy-xl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xl-3,
-.gx-xl-3 {
+ .gx-xl-3 {
--bs-gutter-x: 1rem;
}
.g-xl-3,
-.gy-xl-3 {
+ .gy-xl-3 {
--bs-gutter-y: 1rem;
}
.g-xl-4,
-.gx-xl-4 {
+ .gx-xl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xl-4,
-.gy-xl-4 {
+ .gy-xl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xl-5,
-.gx-xl-5 {
+ .gx-xl-5 {
--bs-gutter-x: 3rem;
}
.g-xl-5,
-.gy-xl-5 {
+ .gy-xl-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1689,51 +1792,51 @@ progress {
margin-left: 91.66666667%;
}
.g-xxl-0,
-.gx-xxl-0 {
+ .gx-xxl-0 {
--bs-gutter-x: 0;
}
.g-xxl-0,
-.gy-xxl-0 {
+ .gy-xxl-0 {
--bs-gutter-y: 0;
}
.g-xxl-1,
-.gx-xxl-1 {
+ .gx-xxl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xxl-1,
-.gy-xxl-1 {
+ .gy-xxl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xxl-2,
-.gx-xxl-2 {
+ .gx-xxl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xxl-2,
-.gy-xxl-2 {
+ .gy-xxl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xxl-3,
-.gx-xxl-3 {
+ .gx-xxl-3 {
--bs-gutter-x: 1rem;
}
.g-xxl-3,
-.gy-xxl-3 {
+ .gy-xxl-3 {
--bs-gutter-y: 1rem;
}
.g-xxl-4,
-.gx-xxl-4 {
+ .gx-xxl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xxl-4,
-.gy-xxl-4 {
+ .gy-xxl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xxl-5,
-.gx-xxl-5 {
+ .gx-xxl-5 {
--bs-gutter-x: 3rem;
}
.g-xxl-5,
-.gy-xxl-5 {
+ .gy-xxl-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1757,7 +1860,7 @@ progress {
.table > :not(caption) > * > * {
padding: 0.5rem 0.5rem;
background-color: var(--bs-table-bg);
- border-bottom-width: 1px;
+ border-bottom-width: var(--bs-border-width);
box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);
}
.table > tbody {
@@ -1768,7 +1871,7 @@ progress {
}
.table-group-divider {
- border-top: 2px solid currentcolor;
+ border-top: calc(var(--bs-border-width) * 2) solid currentcolor;
}
.caption-top {
@@ -1780,10 +1883,10 @@ progress {
}
.table-bordered > :not(caption) > * {
- border-width: 1px 0;
+ border-width: var(--bs-border-width) 0;
}
.table-bordered > :not(caption) > * > * {
- border-width: 0 1px;
+ border-width: 0 var(--bs-border-width);
}
.table-borderless > :not(caption) > * > * {
@@ -1965,29 +2068,29 @@ progress {
}
.col-form-label {
- padding-top: calc(0.375rem + 1px);
- padding-bottom: calc(0.375rem + 1px);
+ padding-top: calc(0.375rem + var(--bs-border-width));
+ padding-bottom: calc(0.375rem + var(--bs-border-width));
margin-bottom: 0;
font-size: inherit;
line-height: 1.5;
}
.col-form-label-lg {
- padding-top: calc(0.5rem + 1px);
- padding-bottom: calc(0.5rem + 1px);
+ padding-top: calc(0.5rem + var(--bs-border-width));
+ padding-bottom: calc(0.5rem + var(--bs-border-width));
font-size: 1.25rem;
}
.col-form-label-sm {
- padding-top: calc(0.25rem + 1px);
- padding-bottom: calc(0.25rem + 1px);
+ padding-top: calc(0.25rem + var(--bs-border-width));
+ padding-bottom: calc(0.25rem + var(--bs-border-width));
font-size: 0.875rem;
}
.form-text {
margin-top: 0.25rem;
font-size: 0.875em;
- color: #6c757d;
+ color: var(--bs-secondary-color);
}
.form-control {
@@ -1997,10 +2100,10 @@ progress {
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
- color: #212529;
- background-color: #fff;
+ color: var(--bs-body-color);
+ background-color: var(--bs-form-control-bg);
background-clip: padding-box;
- border: 1px solid #ced4da;
+ border: var(--bs-border-width) solid var(--bs-border-color);
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
@@ -2019,8 +2122,8 @@ progress {
cursor: pointer;
}
.form-control:focus {
- color: #212529;
- background-color: #fff;
+ color: var(--bs-body-color);
+ background-color: var(--bs-form-control-bg);
border-color: #86b7fe;
outline: 0;
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
@@ -2028,16 +2131,20 @@ progress {
.form-control::-webkit-date-and-time-value {
height: 1.5em;
}
+.form-control::-webkit-datetime-edit {
+ display: block;
+ padding: 0;
+}
.form-control::-moz-placeholder {
- color: #6c757d;
+ color: var(--bs-secondary-color);
opacity: 1;
}
.form-control::placeholder {
- color: #6c757d;
+ color: var(--bs-secondary-color);
opacity: 1;
}
.form-control:disabled {
- background-color: #e9ecef;
+ background-color: var(--bs-form-control-disabled-bg);
opacity: 1;
}
.form-control::-webkit-file-upload-button {
@@ -2045,13 +2152,13 @@ progress {
margin: -0.375rem -0.75rem;
-webkit-margin-end: 0.75rem;
margin-inline-end: 0.75rem;
- color: #212529;
- background-color: #e9ecef;
+ color: var(--bs-body-color);
+ background-color: var(--bs-tertiary-bg);
pointer-events: none;
border-color: inherit;
border-style: solid;
border-width: 0;
- border-inline-end-width: 1px;
+ border-inline-end-width: var(--bs-border-width);
border-radius: 0;
-webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
@@ -2061,13 +2168,13 @@ progress {
margin: -0.375rem -0.75rem;
-webkit-margin-end: 0.75rem;
margin-inline-end: 0.75rem;
- color: #212529;
- background-color: #e9ecef;
+ color: var(--bs-body-color);
+ background-color: var(--bs-tertiary-bg);
pointer-events: none;
border-color: inherit;
border-style: solid;
border-width: 0;
- border-inline-end-width: 1px;
+ border-inline-end-width: var(--bs-border-width);
border-radius: 0;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
@@ -2081,10 +2188,10 @@ progress {
}
}
.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
- background-color: #dde0e3;
+ background-color: var(--bs-secondary-bg);
}
.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
- background-color: #dde0e3;
+ background-color: var(--bs-secondary-bg);
}
.form-control-plaintext {
@@ -2093,10 +2200,10 @@ progress {
padding: 0.375rem 0;
margin-bottom: 0;
line-height: 1.5;
- color: #212529;
+ color: var(--bs-body-color);
background-color: transparent;
border: solid transparent;
- border-width: 1px 0;
+ border-width: var(--bs-border-width) 0;
}
.form-control-plaintext:focus {
outline: 0;
@@ -2107,7 +2214,7 @@ progress {
}
.form-control-sm {
- min-height: calc(1.5em + 0.5rem + 2px);
+ min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
border-radius: 0.25rem;
@@ -2126,7 +2233,7 @@ progress {
}
.form-control-lg {
- min-height: calc(1.5em + 1rem + 2px);
+ min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));
padding: 0.5rem 1rem;
font-size: 1.25rem;
border-radius: 0.5rem;
@@ -2145,18 +2252,18 @@ progress {
}
textarea.form-control {
- min-height: calc(1.5em + 0.75rem + 2px);
+ min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));
}
textarea.form-control-sm {
- min-height: calc(1.5em + 0.5rem + 2px);
+ min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));
}
textarea.form-control-lg {
- min-height: calc(1.5em + 1rem + 2px);
+ min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));
}
.form-control-color {
width: 3rem;
- height: calc(1.5em + 0.75rem + 2px);
+ height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));
padding: 0.375rem;
}
.form-control-color:not(:disabled):not([readonly]) {
@@ -2170,13 +2277,14 @@ textarea.form-control-lg {
border-radius: 0.375rem;
}
.form-control-color.form-control-sm {
- height: calc(1.5em + 0.5rem + 2px);
+ height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));
}
.form-control-color.form-control-lg {
- height: calc(1.5em + 1rem + 2px);
+ height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));
}
.form-select {
+ --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
display: block;
width: 100%;
padding: 0.375rem 2.25rem 0.375rem 0.75rem;
@@ -2184,13 +2292,13 @@ textarea.form-control-lg {
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
- color: #212529;
- background-color: #fff;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+ color: var(--bs-body-color);
+ background-color: var(--bs-form-control-bg);
+ background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);
background-repeat: no-repeat;
background-position: right 0.75rem center;
background-size: 16px 12px;
- border: 1px solid #ced4da;
+ border: var(--bs-border-width) solid var(--bs-border-color);
border-radius: 0.375rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-webkit-appearance: none;
@@ -2212,11 +2320,11 @@ textarea.form-control-lg {
background-image: none;
}
.form-select:disabled {
- background-color: #e9ecef;
+ background-color: var(--bs-form-control-disabled-bg);
}
.form-select:-moz-focusring {
color: transparent;
- text-shadow: 0 0 0 #212529;
+ text-shadow: 0 0 0 var(--bs-body-color);
}
.form-select-sm {
@@ -2235,6 +2343,10 @@ textarea.form-control-lg {
border-radius: 0.5rem;
}
+[data-bs-theme=dark] .form-select {
+ --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+}
+
.form-check {
display: block;
min-height: 1.5rem;
@@ -2258,15 +2370,17 @@ textarea.form-control-lg {
}
.form-check-input {
+ --bs-form-check-bg: var(--bs-form-control-bg);
width: 1em;
height: 1em;
margin-top: 0.25em;
vertical-align: top;
- background-color: #fff;
+ background-color: var(--bs-form-check-bg);
+ background-image: var(--bs-form-check-bg-image);
background-repeat: no-repeat;
background-position: center;
background-size: contain;
- border: 1px solid rgba(0, 0, 0, 0.25);
+ border: var(--bs-border-width) solid var(--bs-border-color);
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
@@ -2293,15 +2407,15 @@ textarea.form-control-lg {
border-color: #0d6efd;
}
.form-check-input:checked[type=checkbox] {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
+ --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
}
.form-check-input:checked[type=radio] {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
+ --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
}
.form-check-input[type=checkbox]:indeterminate {
background-color: #0d6efd;
border-color: #0d6efd;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
+ --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
}
.form-check-input:disabled {
pointer-events: none;
@@ -2317,9 +2431,10 @@ textarea.form-control-lg {
padding-left: 2.5em;
}
.form-switch .form-check-input {
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");
width: 2em;
margin-left: -2.5em;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");
+ background-image: var(--bs-form-switch-bg);
background-position: left center;
border-radius: 2em;
transition: background-position 0.15s ease-in-out;
@@ -2330,11 +2445,11 @@ textarea.form-control-lg {
}
}
.form-switch .form-check-input:focus {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e");
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e");
}
.form-switch .form-check-input:checked {
background-position: right center;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
}
.form-switch.form-check-reverse {
padding-right: 2.5em;
@@ -2361,6 +2476,10 @@ textarea.form-control-lg {
opacity: 0.65;
}
+[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e");
+}
+
.form-range {
width: 100%;
height: 1.5rem;
@@ -2408,7 +2527,7 @@ textarea.form-control-lg {
height: 0.5rem;
color: transparent;
cursor: pointer;
- background-color: #dee2e6;
+ background-color: var(--bs-tertiary-bg);
border-color: transparent;
border-radius: 1rem;
}
@@ -2437,7 +2556,7 @@ textarea.form-control-lg {
height: 0.5rem;
color: transparent;
cursor: pointer;
- background-color: #dee2e6;
+ background-color: var(--bs-tertiary-bg);
border-color: transparent;
border-radius: 1rem;
}
@@ -2445,19 +2564,29 @@ textarea.form-control-lg {
pointer-events: none;
}
.form-range:disabled::-webkit-slider-thumb {
- background-color: #adb5bd;
+ background-color: var(--bs-secondary-color);
}
.form-range:disabled::-moz-range-thumb {
- background-color: #adb5bd;
+ background-color: var(--bs-secondary-color);
}
.form-floating {
position: relative;
}
+.form-floating::before:not(.form-control:disabled) {
+ position: absolute;
+ top: var(--bs-border-width);
+ left: var(--bs-border-width);
+ width: calc(100% - (calc(calc(0.375em + 0.1875rem) + calc(0.75em + 0.375rem))));
+ height: 1.875em;
+ content: "";
+ background-color: var(--bs-form-control-bg);
+ border-radius: 0.375rem;
+}
.form-floating > .form-control,
.form-floating > .form-control-plaintext,
.form-floating > .form-select {
- height: calc(3.5rem + 2px);
+ height: calc(3.5rem + calc(var(--bs-border-width) * 2));
line-height: 1.25;
}
.form-floating > label {
@@ -2472,7 +2601,7 @@ textarea.form-control-lg {
text-overflow: ellipsis;
white-space: nowrap;
pointer-events: none;
- border: 1px solid transparent;
+ border: var(--bs-border-width) solid transparent;
transform-origin: 0 0;
transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
}
@@ -2527,7 +2656,10 @@ textarea.form-control-lg {
transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);
}
.form-floating > .form-control-plaintext ~ label {
- border-width: 1px 0;
+ border-width: var(--bs-border-width) 0;
+}
+.form-floating > .form-control:disabled ~ label {
+ color: #6c757d;
}
.input-group {
@@ -2565,11 +2697,11 @@ textarea.form-control-lg {
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
- color: #212529;
+ color: var(--bs-body-color);
text-align: center;
white-space: nowrap;
- background-color: #e9ecef;
- border: 1px solid #ced4da;
+ background-color: var(--bs-tertiary-bg);
+ border: var(--bs-border-width) solid var(--bs-border-color);
border-radius: 0.375rem;
}
@@ -2611,7 +2743,7 @@ textarea.form-control-lg {
border-bottom-right-radius: 0;
}
.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
- margin-left: -1px;
+ margin-left: calc(var(--bs-border-width) * -1);
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
@@ -2626,7 +2758,7 @@ textarea.form-control-lg {
width: 100%;
margin-top: 0.25rem;
font-size: 0.875em;
- color: #198754;
+ color: var(--bs-success-text);
}
.valid-tooltip {
@@ -2639,8 +2771,8 @@ textarea.form-control-lg {
margin-top: 0.1rem;
font-size: 0.875rem;
color: #fff;
- background-color: rgba(25, 135, 84, 0.9);
- border-radius: 0.375rem;
+ background-color: var(--bs-success);
+ border-radius: var(--bs-border-radius);
}
.was-validated :valid ~ .valid-feedback,
@@ -2651,7 +2783,7 @@ textarea.form-control-lg {
}
.was-validated .form-control:valid, .form-control.is-valid {
- border-color: #198754;
+ border-color: var(--bs-success);
padding-right: calc(1.5em + 0.75rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
background-repeat: no-repeat;
@@ -2659,8 +2791,8 @@ textarea.form-control-lg {
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.was-validated .form-control:valid:focus, .form-control.is-valid:focus {
- border-color: #198754;
- box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+ border-color: var(--bs-success);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);
}
.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
@@ -2669,17 +2801,17 @@ textarea.form-control-lg {
}
.was-validated .form-select:valid, .form-select.is-valid {
- border-color: #198754;
+ border-color: var(--bs-success);
}
.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] {
+ --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
padding-right: 4.125rem;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
background-position: right 0.75rem center, center right 2.25rem;
background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.was-validated .form-select:valid:focus, .form-select.is-valid:focus {
- border-color: #198754;
- box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+ border-color: var(--bs-success);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);
}
.was-validated .form-control-color:valid, .form-control-color.is-valid {
@@ -2687,16 +2819,16 @@ textarea.form-control-lg {
}
.was-validated .form-check-input:valid, .form-check-input.is-valid {
- border-color: #198754;
+ border-color: var(--bs-success);
}
.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {
- background-color: #198754;
+ background-color: var(--bs-success-text);
}
.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {
- box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);
}
.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
- color: #198754;
+ color: var(--bs-success-text);
}
.form-check-inline .form-check-input ~ .valid-feedback {
@@ -2716,7 +2848,7 @@ textarea.form-control-lg {
width: 100%;
margin-top: 0.25rem;
font-size: 0.875em;
- color: #dc3545;
+ color: var(--bs-danger-text);
}
.invalid-tooltip {
@@ -2729,8 +2861,8 @@ textarea.form-control-lg {
margin-top: 0.1rem;
font-size: 0.875rem;
color: #fff;
- background-color: rgba(220, 53, 69, 0.9);
- border-radius: 0.375rem;
+ background-color: var(--bs-danger);
+ border-radius: var(--bs-border-radius);
}
.was-validated :invalid ~ .invalid-feedback,
@@ -2741,7 +2873,7 @@ textarea.form-control-lg {
}
.was-validated .form-control:invalid, .form-control.is-invalid {
- border-color: #dc3545;
+ border-color: var(--bs-danger);
padding-right: calc(1.5em + 0.75rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
background-repeat: no-repeat;
@@ -2749,8 +2881,8 @@ textarea.form-control-lg {
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+ border-color: var(--bs-danger);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);
}
.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
@@ -2759,17 +2891,17 @@ textarea.form-control-lg {
}
.was-validated .form-select:invalid, .form-select.is-invalid {
- border-color: #dc3545;
+ border-color: var(--bs-danger);
}
.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] {
+ --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
padding-right: 4.125rem;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
background-position: right 0.75rem center, center right 2.25rem;
background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+ border-color: var(--bs-danger);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);
}
.was-validated .form-control-color:invalid, .form-control-color.is-invalid {
@@ -2777,16 +2909,16 @@ textarea.form-control-lg {
}
.was-validated .form-check-input:invalid, .form-check-input.is-invalid {
- border-color: #dc3545;
+ border-color: var(--bs-danger);
}
.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {
- background-color: #dc3545;
+ background-color: var(--bs-danger-text);
}
.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {
- box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);
}
.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
- color: #dc3545;
+ color: var(--bs-danger-text);
}
.form-check-inline .form-check-input ~ .invalid-feedback {
@@ -2810,7 +2942,7 @@ textarea.form-control-lg {
--bs-btn-line-height: 1.5;
--bs-btn-color: #212529;
--bs-btn-bg: transparent;
- --bs-btn-border-width: 1px;
+ --bs-btn-border-width: var(--bs-border-width);
--bs-btn-border-color: transparent;
--bs-btn-border-radius: 0.375rem;
--bs-btn-hover-border-color: transparent;
@@ -3257,18 +3389,18 @@ textarea.form-control-lg {
--bs-dropdown-padding-y: 0.5rem;
--bs-dropdown-spacer: 0.125rem;
--bs-dropdown-font-size: 1rem;
- --bs-dropdown-color: #212529;
- --bs-dropdown-bg: #fff;
+ --bs-dropdown-color: var(--bs-body-color);
+ --bs-dropdown-bg: var(--bs-body-bg);
--bs-dropdown-border-color: var(--bs-border-color-translucent);
--bs-dropdown-border-radius: 0.375rem;
- --bs-dropdown-border-width: 1px;
- --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);
+ --bs-dropdown-border-width: var(--bs-border-width);
+ --bs-dropdown-inner-border-radius: calc(0.375rem - var(--bs-border-width));
--bs-dropdown-divider-bg: var(--bs-border-color-translucent);
--bs-dropdown-divider-margin-y: 0.5rem;
- --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
- --bs-dropdown-link-color: #212529;
- --bs-dropdown-link-hover-color: #1e2125;
- --bs-dropdown-link-hover-bg: #e9ecef;
+ --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-dropdown-link-color: var(--bs-body-color);
+ --bs-dropdown-link-hover-color: var(--bs-body-color);
+ --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);
--bs-dropdown-link-active-color: #fff;
--bs-dropdown-link-active-bg: #0d6efd;
--bs-dropdown-link-disabled-color: #adb5bd;
@@ -3490,6 +3622,7 @@ textarea.form-control-lg {
white-space: nowrap;
background-color: transparent;
border: 0;
+ border-radius: var(--bs-dropdown-item-border-radius, 0);
}
.dropdown-item:hover, .dropdown-item:focus {
color: var(--bs-dropdown-link-hover-color);
@@ -3580,7 +3713,7 @@ textarea.form-control-lg {
}
.btn-group > :not(.btn-check:first-child) + .btn,
.btn-group > .btn-group:not(:first-child) {
- margin-left: -1px;
+ margin-left: calc(var(--bs-border-width) * -1);
}
.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
.btn-group > .btn.dropdown-toggle-split:first-child,
@@ -3627,7 +3760,7 @@ textarea.form-control-lg {
}
.btn-group-vertical > .btn:not(:first-child),
.btn-group-vertical > .btn-group:not(:first-child) {
- margin-top: -1px;
+ margin-top: calc(var(--bs-border-width) * -1);
}
.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
.btn-group-vertical > .btn-group:not(:last-child) > .btn {
@@ -3646,7 +3779,7 @@ textarea.form-control-lg {
--bs-nav-link-font-weight: ;
--bs-nav-link-color: var(--bs-link-color);
--bs-nav-link-hover-color: var(--bs-link-hover-color);
- --bs-nav-link-disabled-color: #6c757d;
+ --bs-nav-link-disabled-color: var(--bs-secondary-color);
display: flex;
flex-wrap: wrap;
padding-left: 0;
@@ -3678,13 +3811,13 @@ textarea.form-control-lg {
}
.nav-tabs {
- --bs-nav-tabs-border-width: 1px;
- --bs-nav-tabs-border-color: #dee2e6;
- --bs-nav-tabs-border-radius: 0.375rem;
- --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;
- --bs-nav-tabs-link-active-color: #495057;
- --bs-nav-tabs-link-active-bg: #fff;
- --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;
+ --bs-nav-tabs-border-width: var(--bs-border-width);
+ --bs-nav-tabs-border-color: var(--bs-border-color);
+ --bs-nav-tabs-border-radius: var(--bs-border-radius);
+ --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);
+ --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);
+ --bs-nav-tabs-link-active-bg: var(--bs-body-bg);
+ --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);
border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);
}
.nav-tabs .nav-link {
@@ -3764,21 +3897,21 @@ textarea.form-control-lg {
.navbar {
--bs-navbar-padding-x: 0;
--bs-navbar-padding-y: 0.5rem;
- --bs-navbar-color: rgba(0, 0, 0, 0.55);
- --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);
- --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);
- --bs-navbar-active-color: rgba(0, 0, 0, 0.9);
+ --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);
+ --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);
+ --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);
+ --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);
--bs-navbar-brand-padding-y: 0.3125rem;
--bs-navbar-brand-margin-end: 1rem;
--bs-navbar-brand-font-size: 1.25rem;
- --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);
- --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);
+ --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);
+ --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);
--bs-navbar-nav-link-padding-x: 0.5rem;
--bs-navbar-toggler-padding-y: 0.25rem;
--bs-navbar-toggler-padding-x: 0.75rem;
--bs-navbar-toggler-font-size: 1.25rem;
- --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
- --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);
+ --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+ --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);
--bs-navbar-toggler-border-radius: 0.375rem;
--bs-navbar-toggler-focus-width: 0.25rem;
--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;
@@ -4184,22 +4317,28 @@ textarea.form-control-lg {
--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}
+[data-bs-theme=dark] .navbar {
+ --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+
.card {
--bs-card-spacer-y: 1rem;
--bs-card-spacer-x: 1rem;
--bs-card-title-spacer-y: 0.5rem;
- --bs-card-border-width: 1px;
+ --bs-card-title-color: ;
+ --bs-card-subtitle-color: ;
+ --bs-card-border-width: var(--bs-border-width);
--bs-card-border-color: var(--bs-border-color-translucent);
- --bs-card-border-radius: 0.375rem;
+ --bs-card-border-radius: var(--bs-border-radius);
--bs-card-box-shadow: ;
- --bs-card-inner-border-radius: calc(0.375rem - 1px);
+ --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));
--bs-card-cap-padding-y: 0.5rem;
--bs-card-cap-padding-x: 1rem;
- --bs-card-cap-bg: rgba(0, 0, 0, 0.03);
+ --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);
--bs-card-cap-color: ;
--bs-card-height: ;
--bs-card-color: ;
- --bs-card-bg: #fff;
+ --bs-card-bg: var(--bs-body-bg);
--bs-card-img-overlay-padding: 1rem;
--bs-card-group-margin: 0.75rem;
position: relative;
@@ -4244,11 +4383,13 @@ textarea.form-control-lg {
.card-title {
margin-bottom: var(--bs-card-title-spacer-y);
+ color: var(--bs-card-title-color);
}
.card-subtitle {
margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));
margin-bottom: 0;
+ color: var(--bs-card-subtitle-color);
}
.card-text:last-child {
@@ -4345,11 +4486,11 @@ textarea.form-control-lg {
border-bottom-right-radius: 0;
}
.card-group > .card:not(:last-child) .card-img-top,
-.card-group > .card:not(:last-child) .card-header {
+ .card-group > .card:not(:last-child) .card-header {
border-top-right-radius: 0;
}
.card-group > .card:not(:last-child) .card-img-bottom,
-.card-group > .card:not(:last-child) .card-footer {
+ .card-group > .card:not(:last-child) .card-footer {
border-bottom-right-radius: 0;
}
.card-group > .card:not(:first-child) {
@@ -4357,38 +4498,38 @@ textarea.form-control-lg {
border-bottom-left-radius: 0;
}
.card-group > .card:not(:first-child) .card-img-top,
-.card-group > .card:not(:first-child) .card-header {
+ .card-group > .card:not(:first-child) .card-header {
border-top-left-radius: 0;
}
.card-group > .card:not(:first-child) .card-img-bottom,
-.card-group > .card:not(:first-child) .card-footer {
+ .card-group > .card:not(:first-child) .card-footer {
border-bottom-left-radius: 0;
}
}
.accordion {
- --bs-accordion-color: #212529;
- --bs-accordion-bg: #fff;
+ --bs-accordion-color: var(--bs-body-color);
+ --bs-accordion-bg: var(--bs-body-bg);
--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
--bs-accordion-border-color: var(--bs-border-color);
- --bs-accordion-border-width: 1px;
- --bs-accordion-border-radius: 0.375rem;
- --bs-accordion-inner-border-radius: calc(0.375rem - 1px);
+ --bs-accordion-border-width: var(--bs-border-width);
+ --bs-accordion-border-radius: var(--bs-border-radius);
+ --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));
--bs-accordion-btn-padding-x: 1.25rem;
--bs-accordion-btn-padding-y: 1rem;
- --bs-accordion-btn-color: #212529;
+ --bs-accordion-btn-color: var(--bs-body-color);
--bs-accordion-btn-bg: var(--bs-accordion-bg);
--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--bs-accordion-btn-icon-width: 1.25rem;
--bs-accordion-btn-icon-transform: rotate(-180deg);
--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;
- --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230a58ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--bs-accordion-btn-focus-border-color: #86b7fe;
--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
--bs-accordion-body-padding-x: 1.25rem;
--bs-accordion-body-padding-y: 1rem;
- --bs-accordion-active-color: #0c63e4;
- --bs-accordion-active-bg: #e7f1ff;
+ --bs-accordion-active-color: var(--bs-primary-text);
+ --bs-accordion-active-bg: var(--bs-primary-bg-subtle);
}
.accordion-button {
@@ -4501,15 +4642,20 @@ textarea.form-control-lg {
border-radius: 0;
}
+[data-bs-theme=dark] .accordion-button::after {
+ --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+}
+
.breadcrumb {
--bs-breadcrumb-padding-x: 0;
--bs-breadcrumb-padding-y: 0;
--bs-breadcrumb-margin-bottom: 1rem;
--bs-breadcrumb-bg: ;
--bs-breadcrumb-border-radius: ;
- --bs-breadcrumb-divider-color: #6c757d;
+ --bs-breadcrumb-divider-color: var(--bs-secondary-color);
--bs-breadcrumb-item-padding-x: 0.5rem;
- --bs-breadcrumb-item-active-color: #6c757d;
+ --bs-breadcrumb-item-active-color: var(--bs-secondary-color);
display: flex;
flex-wrap: wrap;
padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);
@@ -4538,22 +4684,22 @@ textarea.form-control-lg {
--bs-pagination-padding-y: 0.375rem;
--bs-pagination-font-size: 1rem;
--bs-pagination-color: var(--bs-link-color);
- --bs-pagination-bg: #fff;
- --bs-pagination-border-width: 1px;
- --bs-pagination-border-color: #dee2e6;
- --bs-pagination-border-radius: 0.375rem;
+ --bs-pagination-bg: var(--bs-body-bg);
+ --bs-pagination-border-width: var(--bs-border-width);
+ --bs-pagination-border-color: var(--bs-border-color);
+ --bs-pagination-border-radius: var(--bs-border-radius);
--bs-pagination-hover-color: var(--bs-link-hover-color);
- --bs-pagination-hover-bg: #e9ecef;
- --bs-pagination-hover-border-color: #dee2e6;
+ --bs-pagination-hover-bg: var(--bs-tertiary-bg);
+ --bs-pagination-hover-border-color: var(--bs-border-color);
--bs-pagination-focus-color: var(--bs-link-hover-color);
- --bs-pagination-focus-bg: #e9ecef;
+ --bs-pagination-focus-bg: var(--bs-secondary-bg);
--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
--bs-pagination-active-color: #fff;
--bs-pagination-active-bg: #0d6efd;
--bs-pagination-active-border-color: #0d6efd;
- --bs-pagination-disabled-color: #6c757d;
- --bs-pagination-disabled-bg: #fff;
- --bs-pagination-disabled-border-color: #dee2e6;
+ --bs-pagination-disabled-color: var(--bs-secondary-color);
+ --bs-pagination-disabled-bg: var(--bs-secondary-bg);
+ --bs-pagination-disabled-border-color: var(--bs-border-color);
display: flex;
padding-left: 0;
list-style: none;
@@ -4602,7 +4748,7 @@ textarea.form-control-lg {
}
.page-item:not(:first-child) .page-link {
- margin-left: -1px;
+ margin-left: calc(var(--bs-border-width) * -1);
}
.page-item:first-child .page-link {
border-top-left-radius: var(--bs-pagination-border-radius);
@@ -4661,8 +4807,9 @@ textarea.form-control-lg {
--bs-alert-margin-bottom: 1rem;
--bs-alert-color: inherit;
--bs-alert-border-color: transparent;
- --bs-alert-border: 1px solid var(--bs-alert-border-color);
+ --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);
--bs-alert-border-radius: 0.375rem;
+ --bs-alert-link-color: inherit;
position: relative;
padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);
margin-bottom: var(--bs-alert-margin-bottom);
@@ -4678,6 +4825,7 @@ textarea.form-control-lg {
.alert-link {
font-weight: 700;
+ color: var(--bs-alert-link-color);
}
.alert-dismissible {
@@ -4692,75 +4840,59 @@ textarea.form-control-lg {
}
.alert-primary {
- --bs-alert-color: #084298;
- --bs-alert-bg: #cfe2ff;
- --bs-alert-border-color: #b6d4fe;
-}
-.alert-primary .alert-link {
- color: #06357a;
+ --bs-alert-color: var(--bs-primary-text);
+ --bs-alert-bg: var(--bs-primary-bg-subtle);
+ --bs-alert-border-color: var(--bs-primary-border-subtle);
+ --bs-alert-link-color: var(--bs-primary-text);
}
.alert-secondary {
- --bs-alert-color: #41464b;
- --bs-alert-bg: #e2e3e5;
- --bs-alert-border-color: #d3d6d8;
-}
-.alert-secondary .alert-link {
- color: #34383c;
+ --bs-alert-color: var(--bs-secondary-text);
+ --bs-alert-bg: var(--bs-secondary-bg-subtle);
+ --bs-alert-border-color: var(--bs-secondary-border-subtle);
+ --bs-alert-link-color: var(--bs-secondary-text);
}
.alert-success {
- --bs-alert-color: #0f5132;
- --bs-alert-bg: #d1e7dd;
- --bs-alert-border-color: #badbcc;
-}
-.alert-success .alert-link {
- color: #0c4128;
+ --bs-alert-color: var(--bs-success-text);
+ --bs-alert-bg: var(--bs-success-bg-subtle);
+ --bs-alert-border-color: var(--bs-success-border-subtle);
+ --bs-alert-link-color: var(--bs-success-text);
}
.alert-info {
- --bs-alert-color: #055160;
- --bs-alert-bg: #cff4fc;
- --bs-alert-border-color: #b6effb;
-}
-.alert-info .alert-link {
- color: #04414d;
+ --bs-alert-color: var(--bs-info-text);
+ --bs-alert-bg: var(--bs-info-bg-subtle);
+ --bs-alert-border-color: var(--bs-info-border-subtle);
+ --bs-alert-link-color: var(--bs-info-text);
}
.alert-warning {
- --bs-alert-color: #664d03;
- --bs-alert-bg: #fff3cd;
- --bs-alert-border-color: #ffecb5;
-}
-.alert-warning .alert-link {
- color: #523e02;
+ --bs-alert-color: var(--bs-warning-text);
+ --bs-alert-bg: var(--bs-warning-bg-subtle);
+ --bs-alert-border-color: var(--bs-warning-border-subtle);
+ --bs-alert-link-color: var(--bs-warning-text);
}
.alert-danger {
- --bs-alert-color: #842029;
- --bs-alert-bg: #f8d7da;
- --bs-alert-border-color: #f5c2c7;
-}
-.alert-danger .alert-link {
- color: #6a1a21;
+ --bs-alert-color: var(--bs-danger-text);
+ --bs-alert-bg: var(--bs-danger-bg-subtle);
+ --bs-alert-border-color: var(--bs-danger-border-subtle);
+ --bs-alert-link-color: var(--bs-danger-text);
}
.alert-light {
- --bs-alert-color: #636464;
- --bs-alert-bg: #fefefe;
- --bs-alert-border-color: #fdfdfe;
-}
-.alert-light .alert-link {
- color: #4f5050;
+ --bs-alert-color: var(--bs-light-text);
+ --bs-alert-bg: var(--bs-light-bg-subtle);
+ --bs-alert-border-color: var(--bs-light-border-subtle);
+ --bs-alert-link-color: var(--bs-light-text);
}
.alert-dark {
- --bs-alert-color: #141619;
- --bs-alert-bg: #d3d3d4;
- --bs-alert-border-color: #bcbebf;
-}
-.alert-dark .alert-link {
- color: #101214;
+ --bs-alert-color: var(--bs-dark-text);
+ --bs-alert-bg: var(--bs-dark-bg-subtle);
+ --bs-alert-border-color: var(--bs-dark-border-subtle);
+ --bs-alert-link-color: var(--bs-dark-text);
}
@keyframes progress-bar-stripes {
@@ -4768,12 +4900,13 @@ textarea.form-control-lg {
background-position-x: 1rem;
}
}
-.progress {
+.progress,
+.progress-stacked {
--bs-progress-height: 1rem;
--bs-progress-font-size: 0.75rem;
- --bs-progress-bg: #e9ecef;
- --bs-progress-border-radius: 0.375rem;
- --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
+ --bs-progress-bg: var(--bs-secondary-bg);
+ --bs-progress-border-radius: var(--bs-border-radius);
+ --bs-progress-box-shadow: var(--bs-box-shadow-inset);
--bs-progress-bar-color: #fff;
--bs-progress-bar-bg: #0d6efd;
--bs-progress-bar-transition: width 0.6s ease;
@@ -4807,6 +4940,14 @@ textarea.form-control-lg {
background-size: var(--bs-progress-height) var(--bs-progress-height);
}
+.progress-stacked > .progress {
+ overflow: visible;
+}
+
+.progress-stacked > .progress > .progress-bar {
+ width: 100%;
+}
+
.progress-bar-animated {
animation: 1s linear infinite progress-bar-stripes;
}
@@ -4817,20 +4958,20 @@ textarea.form-control-lg {
}
.list-group {
- --bs-list-group-color: #212529;
- --bs-list-group-bg: #fff;
- --bs-list-group-border-color: rgba(0, 0, 0, 0.125);
- --bs-list-group-border-width: 1px;
- --bs-list-group-border-radius: 0.375rem;
+ --bs-list-group-color: var(--bs-body-color);
+ --bs-list-group-bg: var(--bs-body-bg);
+ --bs-list-group-border-color: var(--bs-border-color);
+ --bs-list-group-border-width: var(--bs-border-width);
+ --bs-list-group-border-radius: var(--bs-border-radius);
--bs-list-group-item-padding-x: 1rem;
--bs-list-group-item-padding-y: 0.5rem;
- --bs-list-group-action-color: #495057;
- --bs-list-group-action-hover-color: #495057;
- --bs-list-group-action-hover-bg: #f8f9fa;
- --bs-list-group-action-active-color: #212529;
- --bs-list-group-action-active-bg: #e9ecef;
- --bs-list-group-disabled-color: #6c757d;
- --bs-list-group-disabled-bg: #fff;
+ --bs-list-group-action-color: var(--bs-secondary-color);
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);
+ --bs-list-group-action-active-color: var(--bs-body-color);
+ --bs-list-group-action-active-bg: var(--bs-secondary-bg);
+ --bs-list-group-disabled-color: var(--bs-secondary-color);
+ --bs-list-group-disabled-bg: var(--bs-body-bg);
--bs-list-group-active-color: #fff;
--bs-list-group-active-bg: #0d6efd;
--bs-list-group-active-border-color: #0d6efd;
@@ -5056,148 +5197,168 @@ textarea.form-control-lg {
}
.list-group-item-primary {
- color: #084298;
- background-color: #cfe2ff;
+ --bs-list-group-color: var(--bs-primary-text);
+ --bs-list-group-bg: var(--bs-primary-bg-subtle);
+ --bs-list-group-border-color: var(--bs-primary-border-subtle);
}
.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
- color: #084298;
- background-color: #bacbe6;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);
}
-.list-group-item-primary.list-group-item-action.active {
- color: #fff;
- background-color: #084298;
- border-color: #084298;
+.list-group-item-primary.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-primary-text);
+ --bs-list-group-active-border-color: var(--bs-primary-text);
}
.list-group-item-secondary {
- color: #41464b;
- background-color: #e2e3e5;
+ --bs-list-group-color: var(--bs-secondary-text);
+ --bs-list-group-bg: var(--bs-secondary-bg-subtle);
+ --bs-list-group-border-color: var(--bs-secondary-border-subtle);
}
.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
- color: #41464b;
- background-color: #cbccce;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);
}
-.list-group-item-secondary.list-group-item-action.active {
- color: #fff;
- background-color: #41464b;
- border-color: #41464b;
+.list-group-item-secondary.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-secondary-text);
+ --bs-list-group-active-border-color: var(--bs-secondary-text);
}
.list-group-item-success {
- color: #0f5132;
- background-color: #d1e7dd;
+ --bs-list-group-color: var(--bs-success-text);
+ --bs-list-group-bg: var(--bs-success-bg-subtle);
+ --bs-list-group-border-color: var(--bs-success-border-subtle);
}
.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
- color: #0f5132;
- background-color: #bcd0c7;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);
}
-.list-group-item-success.list-group-item-action.active {
- color: #fff;
- background-color: #0f5132;
- border-color: #0f5132;
+.list-group-item-success.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-success-text);
+ --bs-list-group-active-border-color: var(--bs-success-text);
}
.list-group-item-info {
- color: #055160;
- background-color: #cff4fc;
+ --bs-list-group-color: var(--bs-info-text);
+ --bs-list-group-bg: var(--bs-info-bg-subtle);
+ --bs-list-group-border-color: var(--bs-info-border-subtle);
}
.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
- color: #055160;
- background-color: #badce3;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);
}
-.list-group-item-info.list-group-item-action.active {
- color: #fff;
- background-color: #055160;
- border-color: #055160;
+.list-group-item-info.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-info-text);
+ --bs-list-group-active-border-color: var(--bs-info-text);
}
.list-group-item-warning {
- color: #664d03;
- background-color: #fff3cd;
+ --bs-list-group-color: var(--bs-warning-text);
+ --bs-list-group-bg: var(--bs-warning-bg-subtle);
+ --bs-list-group-border-color: var(--bs-warning-border-subtle);
}
.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
- color: #664d03;
- background-color: #e6dbb9;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);
}
-.list-group-item-warning.list-group-item-action.active {
- color: #fff;
- background-color: #664d03;
- border-color: #664d03;
+.list-group-item-warning.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-warning-text);
+ --bs-list-group-active-border-color: var(--bs-warning-text);
}
.list-group-item-danger {
- color: #842029;
- background-color: #f8d7da;
+ --bs-list-group-color: var(--bs-danger-text);
+ --bs-list-group-bg: var(--bs-danger-bg-subtle);
+ --bs-list-group-border-color: var(--bs-danger-border-subtle);
}
.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
- color: #842029;
- background-color: #dfc2c4;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);
}
-.list-group-item-danger.list-group-item-action.active {
- color: #fff;
- background-color: #842029;
- border-color: #842029;
+.list-group-item-danger.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-danger-text);
+ --bs-list-group-active-border-color: var(--bs-danger-text);
}
.list-group-item-light {
- color: #636464;
- background-color: #fefefe;
+ --bs-list-group-color: var(--bs-light-text);
+ --bs-list-group-bg: var(--bs-light-bg-subtle);
+ --bs-list-group-border-color: var(--bs-light-border-subtle);
}
.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
- color: #636464;
- background-color: #e5e5e5;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);
}
-.list-group-item-light.list-group-item-action.active {
- color: #fff;
- background-color: #636464;
- border-color: #636464;
+.list-group-item-light.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-light-text);
+ --bs-list-group-active-border-color: var(--bs-light-text);
}
.list-group-item-dark {
- color: #141619;
- background-color: #d3d3d4;
+ --bs-list-group-color: var(--bs-dark-text);
+ --bs-list-group-bg: var(--bs-dark-bg-subtle);
+ --bs-list-group-border-color: var(--bs-dark-border-subtle);
}
.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
- color: #141619;
- background-color: #bebebf;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);
}
-.list-group-item-dark.list-group-item-action.active {
- color: #fff;
- background-color: #141619;
- border-color: #141619;
+.list-group-item-dark.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-dark-text);
+ --bs-list-group-active-border-color: var(--bs-dark-text);
}
.btn-close {
+ --bs-btn-close-color: #000;
+ --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");
+ --bs-btn-close-opacity: 0.5;
+ --bs-btn-close-hover-opacity: 0.75;
+ --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+ --bs-btn-close-focus-opacity: 1;
+ --bs-btn-close-disabled-opacity: 0.25;
+ --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);
box-sizing: content-box;
width: 1em;
height: 1em;
padding: 0.25em 0.25em;
- color: #000;
- background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;
+ color: var(--bs-btn-close-color);
+ background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;
border: 0;
border-radius: 0.375rem;
- opacity: 0.5;
+ opacity: var(--bs-btn-close-opacity);
}
.btn-close:hover {
- color: #000;
+ color: var(--bs-btn-close-color);
text-decoration: none;
- opacity: 0.75;
+ opacity: var(--bs-btn-close-hover-opacity);
}
.btn-close:focus {
outline: 0;
- box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
- opacity: 1;
+ box-shadow: var(--bs-btn-close-focus-shadow);
+ opacity: var(--bs-btn-close-focus-opacity);
}
.btn-close:disabled, .btn-close.disabled {
pointer-events: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
- opacity: 0.25;
+ opacity: var(--bs-btn-close-disabled-opacity);
}
.btn-close-white {
- filter: invert(1) grayscale(100%) brightness(200%);
+ filter: var(--bs-btn-close-white-filter);
+}
+
+[data-bs-theme=dark] .btn-close {
+ filter: var(--bs-btn-close-white-filter);
}
.toast {
@@ -5208,14 +5369,14 @@ textarea.form-control-lg {
--bs-toast-max-width: 350px;
--bs-toast-font-size: 0.875rem;
--bs-toast-color: ;
- --bs-toast-bg: rgba(255, 255, 255, 0.85);
- --bs-toast-border-width: 1px;
+ --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);
+ --bs-toast-border-width: var(--bs-border-width);
--bs-toast-border-color: var(--bs-border-color-translucent);
- --bs-toast-border-radius: 0.375rem;
- --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
- --bs-toast-header-color: #6c757d;
- --bs-toast-header-bg: rgba(255, 255, 255, 0.85);
- --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);
+ --bs-toast-border-radius: var(--bs-border-radius);
+ --bs-toast-box-shadow: var(--bs-box-shadow);
+ --bs-toast-header-color: var(--bs-secondary-color);
+ --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);
+ --bs-toast-header-border-color: var(--bs-border-color-translucent);
width: var(--bs-toast-max-width);
max-width: 100%;
font-size: var(--bs-toast-font-size);
@@ -5275,22 +5436,22 @@ textarea.form-control-lg {
--bs-modal-padding: 1rem;
--bs-modal-margin: 0.5rem;
--bs-modal-color: ;
- --bs-modal-bg: #fff;
+ --bs-modal-bg: var(--bs-body-bg);
--bs-modal-border-color: var(--bs-border-color-translucent);
- --bs-modal-border-width: 1px;
- --bs-modal-border-radius: 0.5rem;
- --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
- --bs-modal-inner-border-radius: calc(0.5rem - 1px);
+ --bs-modal-border-width: var(--bs-border-width);
+ --bs-modal-border-radius: var(--bs-border-radius-lg);
+ --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));
--bs-modal-header-padding-x: 1rem;
--bs-modal-header-padding-y: 1rem;
--bs-modal-header-padding: 1rem 1rem;
--bs-modal-header-border-color: var(--bs-border-color);
- --bs-modal-header-border-width: 1px;
+ --bs-modal-header-border-width: var(--bs-border-width);
--bs-modal-title-line-height: 1.5;
--bs-modal-footer-gap: 0.5rem;
--bs-modal-footer-bg: ;
--bs-modal-footer-border-color: var(--bs-border-color);
- --bs-modal-footer-border-width: 1px;
+ --bs-modal-footer-border-width: var(--bs-border-width);
position: fixed;
top: 0;
left: 0;
@@ -5420,7 +5581,7 @@ textarea.form-control-lg {
@media (min-width: 576px) {
.modal {
--bs-modal-margin: 1.75rem;
- --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+ --bs-modal-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
}
.modal-dialog {
max-width: var(--bs-modal-width);
@@ -5433,7 +5594,7 @@ textarea.form-control-lg {
}
@media (min-width: 992px) {
.modal-lg,
-.modal-xl {
+ .modal-xl {
--bs-modal-width: 800px;
}
}
@@ -5474,7 +5635,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-sm-down .modal-header,
-.modal-fullscreen-sm-down .modal-footer {
+ .modal-fullscreen-sm-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-sm-down .modal-body {
@@ -5494,7 +5655,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-md-down .modal-header,
-.modal-fullscreen-md-down .modal-footer {
+ .modal-fullscreen-md-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-md-down .modal-body {
@@ -5514,7 +5675,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-lg-down .modal-header,
-.modal-fullscreen-lg-down .modal-footer {
+ .modal-fullscreen-lg-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-lg-down .modal-body {
@@ -5534,7 +5695,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-xl-down .modal-header,
-.modal-fullscreen-xl-down .modal-footer {
+ .modal-fullscreen-xl-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-xl-down .modal-body {
@@ -5554,7 +5715,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-xxl-down .modal-header,
-.modal-fullscreen-xxl-down .modal-footer {
+ .modal-fullscreen-xxl-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-xxl-down .modal-body {
@@ -5568,9 +5729,9 @@ textarea.form-control-lg {
--bs-tooltip-padding-y: 0.25rem;
--bs-tooltip-margin: ;
--bs-tooltip-font-size: 0.875rem;
- --bs-tooltip-color: #fff;
- --bs-tooltip-bg: #000;
- --bs-tooltip-border-radius: 0.375rem;
+ --bs-tooltip-color: var(--bs-body-bg);
+ --bs-tooltip-bg: var(--bs-emphasis-color);
+ --bs-tooltip-border-radius: var(--bs-border-radius);
--bs-tooltip-opacity: 0.9;
--bs-tooltip-arrow-width: 0.8rem;
--bs-tooltip-arrow-height: 0.4rem;
@@ -5668,20 +5829,20 @@ textarea.form-control-lg {
--bs-popover-zindex: 1070;
--bs-popover-max-width: 276px;
--bs-popover-font-size: 0.875rem;
- --bs-popover-bg: #fff;
- --bs-popover-border-width: 1px;
+ --bs-popover-bg: var(--bs-body-bg);
+ --bs-popover-border-width: var(--bs-border-width);
--bs-popover-border-color: var(--bs-border-color-translucent);
- --bs-popover-border-radius: 0.5rem;
- --bs-popover-inner-border-radius: calc(0.5rem - 1px);
- --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+ --bs-popover-border-radius: var(--bs-border-radius-lg);
+ --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));
+ --bs-popover-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
--bs-popover-header-padding-x: 1rem;
--bs-popover-header-padding-y: 0.5rem;
--bs-popover-header-font-size: 1rem;
--bs-popover-header-color: ;
- --bs-popover-header-bg: #f0f0f0;
+ --bs-popover-header-bg: var(--bs-secondary-bg);
--bs-popover-body-padding-x: 1rem;
--bs-popover-body-padding-y: 1rem;
- --bs-popover-body-color: #212529;
+ --bs-popover-body-color: var(--bs-body-color);
--bs-popover-arrow-width: 1rem;
--bs-popover-arrow-height: 0.5rem;
--bs-popover-arrow-border: var(--bs-popover-border-color);
@@ -5861,7 +6022,6 @@ textarea.form-control-lg {
display: block;
}
-/* rtl:begin:ignore */
.carousel-item-next:not(.carousel-item-start),
.active.carousel-item-end {
transform: translateX(100%);
@@ -5872,7 +6032,6 @@ textarea.form-control-lg {
transform: translateX(-100%);
}
-/* rtl:end:ignore */
.carousel-fade .carousel-item {
opacity: 0;
transition-property: opacity;
@@ -5892,7 +6051,7 @@ textarea.form-control-lg {
}
@media (prefers-reduced-motion: reduce) {
.carousel-fade .active.carousel-item-start,
-.carousel-fade .active.carousel-item-end {
+ .carousel-fade .active.carousel-item-end {
transition: none;
}
}
@@ -5917,7 +6076,7 @@ textarea.form-control-lg {
}
@media (prefers-reduced-motion: reduce) {
.carousel-control-prev,
-.carousel-control-next {
+ .carousel-control-next {
transition: none;
}
}
@@ -6027,6 +6186,17 @@ textarea.form-control-lg {
color: #000;
}
+[data-bs-theme=dark] .carousel .carousel-control-prev-icon,
+[data-bs-theme=dark] .carousel .carousel-control-next-icon {
+ filter: invert(1) grayscale(100);
+}
+[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target] {
+ background-color: #000;
+}
+[data-bs-theme=dark] .carousel .carousel-caption {
+ color: #000;
+}
+
.spinner-grow,
.spinner-border {
display: inline-block;
@@ -6085,7 +6255,7 @@ textarea.form-control-lg {
@media (prefers-reduced-motion: reduce) {
.spinner-border,
-.spinner-grow {
+ .spinner-grow {
--bs-spinner-animation-speed: 1.5s;
}
}
@@ -6095,11 +6265,13 @@ textarea.form-control-lg {
--bs-offcanvas-height: 30vh;
--bs-offcanvas-padding-x: 1rem;
--bs-offcanvas-padding-y: 1rem;
- --bs-offcanvas-color: ;
- --bs-offcanvas-bg: #fff;
- --bs-offcanvas-border-width: 1px;
+ --bs-offcanvas-color: var(--bs-body-color);
+ --bs-offcanvas-bg: var(--bs-body-bg);
+ --bs-offcanvas-border-width: var(--bs-border-width);
--bs-offcanvas-border-color: var(--bs-border-color-translucent);
- --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+ --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-offcanvas-transition: transform 0.3s ease-in-out;
+ --bs-offcanvas-title-line-height: 1.5;
}
@media (max-width: 575.98px) {
@@ -6115,7 +6287,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {
@@ -6203,7 +6375,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
@@ -6291,7 +6463,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
@@ -6379,7 +6551,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {
@@ -6467,7 +6639,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {
@@ -6554,7 +6726,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
@media (prefers-reduced-motion: reduce) {
.offcanvas {
@@ -6630,7 +6802,7 @@ textarea.form-control-lg {
.offcanvas-title {
margin-bottom: 0;
- line-height: 1.5;
+ line-height: var(--bs-offcanvas-title-line-height);
}
.offcanvas-body {
@@ -7010,6 +7182,31 @@ textarea.form-control-lg {
float: none !important;
}
+.object-fit-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+}
+
+.object-fit-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+}
+
+.object-fit-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+}
+
+.object-fit-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+}
+
+.object-fit-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+}
+
.opacity-0 {
opacity: 0 !important;
}
@@ -7046,6 +7243,38 @@ textarea.form-control-lg {
overflow: scroll !important;
}
+.overflow-x-auto {
+ overflow-x: auto !important;
+}
+
+.overflow-x-hidden {
+ overflow-x: hidden !important;
+}
+
+.overflow-x-visible {
+ overflow-x: visible !important;
+}
+
+.overflow-x-scroll {
+ overflow-x: scroll !important;
+}
+
+.overflow-y-auto {
+ overflow-y: auto !important;
+}
+
+.overflow-y-hidden {
+ overflow-y: hidden !important;
+}
+
+.overflow-y-visible {
+ overflow-y: visible !important;
+}
+
+.overflow-y-scroll {
+ overflow-y: scroll !important;
+}
+
.d-inline {
display: inline !important;
}
@@ -7087,15 +7316,15 @@ textarea.form-control-lg {
}
.shadow {
- box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
+ box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;
}
.shadow-sm {
- box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+ box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;
}
.shadow-lg {
- box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+ box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;
}
.shadow-none {
@@ -7268,6 +7497,38 @@ textarea.form-control-lg {
border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;
}
+.border-primary-subtle {
+ border-color: var(--bs-primary-border-subtle) !important;
+}
+
+.border-secondary-subtle {
+ border-color: var(--bs-secondary-border-subtle) !important;
+}
+
+.border-success-subtle {
+ border-color: var(--bs-success-border-subtle) !important;
+}
+
+.border-info-subtle {
+ border-color: var(--bs-info-border-subtle) !important;
+}
+
+.border-warning-subtle {
+ border-color: var(--bs-warning-border-subtle) !important;
+}
+
+.border-danger-subtle {
+ border-color: var(--bs-danger-border-subtle) !important;
+}
+
+.border-light-subtle {
+ border-color: var(--bs-light-border-subtle) !important;
+}
+
+.border-dark-subtle {
+ border-color: var(--bs-dark-border-subtle) !important;
+}
+
.border-1 {
--bs-border-width: 1px;
}
@@ -7958,6 +8219,60 @@ textarea.form-control-lg {
gap: 3rem !important;
}
+.row-gap-0 {
+ row-gap: 0 !important;
+}
+
+.row-gap-1 {
+ row-gap: 0.25rem !important;
+}
+
+.row-gap-2 {
+ row-gap: 0.5rem !important;
+}
+
+.row-gap-3 {
+ row-gap: 1rem !important;
+}
+
+.row-gap-4 {
+ row-gap: 1.5rem !important;
+}
+
+.row-gap-5 {
+ row-gap: 3rem !important;
+}
+
+.column-gap-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+}
+
+.column-gap-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+}
+
+.column-gap-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+}
+
+.column-gap-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+}
+
+.column-gap-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+}
+
+.column-gap-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+}
+
.font-monospace {
font-family: var(--bs-font-monospace) !important;
}
@@ -7994,26 +8309,30 @@ textarea.form-control-lg {
font-style: normal !important;
}
-.fw-light {
- font-weight: 300 !important;
-}
-
.fw-lighter {
font-weight: lighter !important;
}
+.fw-light {
+ font-weight: 300 !important;
+}
+
.fw-normal {
font-weight: 400 !important;
}
-.fw-bold {
- font-weight: 700 !important;
+.fw-medium {
+ font-weight: 500 !important;
}
.fw-semibold {
font-weight: 600 !important;
}
+.fw-bold {
+ font-weight: 700 !important;
+}
+
.fw-bolder {
font-weight: bolder !important;
}
@@ -8142,7 +8461,7 @@ textarea.form-control-lg {
.text-muted {
--bs-text-opacity: 1;
- color: #6c757d !important;
+ color: var(--bs-secondary-color) !important;
}
.text-black-50 {
@@ -8155,6 +8474,21 @@ textarea.form-control-lg {
color: rgba(255, 255, 255, 0.5) !important;
}
+.text-body-secondary {
+ --bs-text-opacity: 1;
+ color: var(--bs-secondary-color) !important;
+}
+
+.text-body-tertiary {
+ --bs-text-opacity: 1;
+ color: var(--bs-tertiary-color) !important;
+}
+
+.text-body-emphasis {
+ --bs-text-opacity: 1;
+ color: var(--bs-emphasis-color) !important;
+}
+
.text-reset {
--bs-text-opacity: 1;
color: inherit !important;
@@ -8176,6 +8510,38 @@ textarea.form-control-lg {
--bs-text-opacity: 1;
}
+.text-primary-emphasis {
+ color: var(--bs-primary-text) !important;
+}
+
+.text-secondary-emphasis {
+ color: var(--bs-secondary-text) !important;
+}
+
+.text-success-emphasis {
+ color: var(--bs-success-text) !important;
+}
+
+.text-info-emphasis {
+ color: var(--bs-info-text) !important;
+}
+
+.text-warning-emphasis {
+ color: var(--bs-warning-text) !important;
+}
+
+.text-danger-emphasis {
+ color: var(--bs-danger-text) !important;
+}
+
+.text-light-emphasis {
+ color: var(--bs-light-text) !important;
+}
+
+.text-dark-emphasis {
+ color: var(--bs-dark-text) !important;
+}
+
.bg-primary {
--bs-bg-opacity: 1;
background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
@@ -8236,6 +8602,21 @@ textarea.form-control-lg {
background-color: transparent !important;
}
+.bg-body-secondary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body-tertiary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body-emphasis {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
.bg-opacity-10 {
--bs-bg-opacity: 0.1;
}
@@ -8256,6 +8637,38 @@ textarea.form-control-lg {
--bs-bg-opacity: 1;
}
+.bg-primary-subtle {
+ background-color: var(--bs-primary-bg-subtle) !important;
+}
+
+.bg-secondary-subtle {
+ background-color: var(--bs-secondary-bg-subtle) !important;
+}
+
+.bg-success-subtle {
+ background-color: var(--bs-success-bg-subtle) !important;
+}
+
+.bg-info-subtle {
+ background-color: var(--bs-info-bg-subtle) !important;
+}
+
+.bg-warning-subtle {
+ background-color: var(--bs-warning-bg-subtle) !important;
+}
+
+.bg-danger-subtle {
+ background-color: var(--bs-danger-bg-subtle) !important;
+}
+
+.bg-light-subtle {
+ background-color: var(--bs-light-bg-subtle) !important;
+}
+
+.bg-dark-subtle {
+ background-color: var(--bs-dark-bg-subtle) !important;
+}
+
.bg-gradient {
background-image: var(--bs-gradient) !important;
}
@@ -8327,21 +8740,181 @@ textarea.form-control-lg {
border-top-right-radius: var(--bs-border-radius) !important;
}
+.rounded-top-0 {
+ border-top-left-radius: 0 !important;
+ border-top-right-radius: 0 !important;
+}
+
+.rounded-top-1 {
+ border-top-left-radius: var(--bs-border-radius-sm) !important;
+ border-top-right-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-top-2 {
+ border-top-left-radius: var(--bs-border-radius) !important;
+ border-top-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-top-3 {
+ border-top-left-radius: var(--bs-border-radius-lg) !important;
+ border-top-right-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-top-4 {
+ border-top-left-radius: var(--bs-border-radius-xl) !important;
+ border-top-right-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-top-5 {
+ border-top-left-radius: var(--bs-border-radius-2xl) !important;
+ border-top-right-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-top-circle {
+ border-top-left-radius: 50% !important;
+ border-top-right-radius: 50% !important;
+}
+
+.rounded-top-pill {
+ border-top-left-radius: var(--bs-border-radius-pill) !important;
+ border-top-right-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-end {
border-top-right-radius: var(--bs-border-radius) !important;
border-bottom-right-radius: var(--bs-border-radius) !important;
}
+.rounded-end-0 {
+ border-top-right-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+.rounded-end-1 {
+ border-top-right-radius: var(--bs-border-radius-sm) !important;
+ border-bottom-right-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-end-2 {
+ border-top-right-radius: var(--bs-border-radius) !important;
+ border-bottom-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-end-3 {
+ border-top-right-radius: var(--bs-border-radius-lg) !important;
+ border-bottom-right-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-end-4 {
+ border-top-right-radius: var(--bs-border-radius-xl) !important;
+ border-bottom-right-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-end-5 {
+ border-top-right-radius: var(--bs-border-radius-2xl) !important;
+ border-bottom-right-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-end-circle {
+ border-top-right-radius: 50% !important;
+ border-bottom-right-radius: 50% !important;
+}
+
+.rounded-end-pill {
+ border-top-right-radius: var(--bs-border-radius-pill) !important;
+ border-bottom-right-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-bottom {
border-bottom-right-radius: var(--bs-border-radius) !important;
border-bottom-left-radius: var(--bs-border-radius) !important;
}
+.rounded-bottom-0 {
+ border-bottom-right-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+}
+
+.rounded-bottom-1 {
+ border-bottom-right-radius: var(--bs-border-radius-sm) !important;
+ border-bottom-left-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-bottom-2 {
+ border-bottom-right-radius: var(--bs-border-radius) !important;
+ border-bottom-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-bottom-3 {
+ border-bottom-right-radius: var(--bs-border-radius-lg) !important;
+ border-bottom-left-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-bottom-4 {
+ border-bottom-right-radius: var(--bs-border-radius-xl) !important;
+ border-bottom-left-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-bottom-5 {
+ border-bottom-right-radius: var(--bs-border-radius-2xl) !important;
+ border-bottom-left-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-bottom-circle {
+ border-bottom-right-radius: 50% !important;
+ border-bottom-left-radius: 50% !important;
+}
+
+.rounded-bottom-pill {
+ border-bottom-right-radius: var(--bs-border-radius-pill) !important;
+ border-bottom-left-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-start {
border-bottom-left-radius: var(--bs-border-radius) !important;
border-top-left-radius: var(--bs-border-radius) !important;
}
+.rounded-start-0 {
+ border-bottom-left-radius: 0 !important;
+ border-top-left-radius: 0 !important;
+}
+
+.rounded-start-1 {
+ border-bottom-left-radius: var(--bs-border-radius-sm) !important;
+ border-top-left-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-start-2 {
+ border-bottom-left-radius: var(--bs-border-radius) !important;
+ border-top-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-start-3 {
+ border-bottom-left-radius: var(--bs-border-radius-lg) !important;
+ border-top-left-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-start-4 {
+ border-bottom-left-radius: var(--bs-border-radius-xl) !important;
+ border-top-left-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-start-5 {
+ border-bottom-left-radius: var(--bs-border-radius-2xl) !important;
+ border-top-left-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-start-circle {
+ border-bottom-left-radius: 50% !important;
+ border-top-left-radius: 50% !important;
+}
+
+.rounded-start-pill {
+ border-bottom-left-radius: var(--bs-border-radius-pill) !important;
+ border-top-left-radius: var(--bs-border-radius-pill) !important;
+}
+
.visible {
visibility: visible !important;
}
@@ -8350,6 +8923,26 @@ textarea.form-control-lg {
visibility: hidden !important;
}
+.z-n1 {
+ z-index: -1 !important;
+}
+
+.z-0 {
+ z-index: 0 !important;
+}
+
+.z-1 {
+ z-index: 1 !important;
+}
+
+.z-2 {
+ z-index: 2 !important;
+}
+
+.z-3 {
+ z-index: 3 !important;
+}
+
@media (min-width: 576px) {
.float-sm-start {
float: left !important;
@@ -8360,6 +8953,26 @@ textarea.form-control-lg {
.float-sm-none {
float: none !important;
}
+ .object-fit-sm-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-sm-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-sm-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-sm-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-sm-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-sm-inline {
display: inline !important;
}
@@ -8836,6 +9449,48 @@ textarea.form-control-lg {
.gap-sm-5 {
gap: 3rem !important;
}
+ .row-gap-sm-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-sm-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-sm-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-sm-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-sm-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-sm-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-sm-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-sm-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-sm-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-sm-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-sm-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-sm-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-sm-start {
text-align: left !important;
}
@@ -8856,6 +9511,26 @@ textarea.form-control-lg {
.float-md-none {
float: none !important;
}
+ .object-fit-md-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-md-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-md-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-md-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-md-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-md-inline {
display: inline !important;
}
@@ -9332,6 +10007,48 @@ textarea.form-control-lg {
.gap-md-5 {
gap: 3rem !important;
}
+ .row-gap-md-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-md-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-md-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-md-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-md-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-md-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-md-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-md-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-md-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-md-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-md-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-md-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-md-start {
text-align: left !important;
}
@@ -9352,6 +10069,26 @@ textarea.form-control-lg {
.float-lg-none {
float: none !important;
}
+ .object-fit-lg-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-lg-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-lg-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-lg-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-lg-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-lg-inline {
display: inline !important;
}
@@ -9828,6 +10565,48 @@ textarea.form-control-lg {
.gap-lg-5 {
gap: 3rem !important;
}
+ .row-gap-lg-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-lg-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-lg-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-lg-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-lg-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-lg-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-lg-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-lg-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-lg-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-lg-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-lg-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-lg-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-lg-start {
text-align: left !important;
}
@@ -9848,6 +10627,26 @@ textarea.form-control-lg {
.float-xl-none {
float: none !important;
}
+ .object-fit-xl-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-xl-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-xl-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-xl-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-xl-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-xl-inline {
display: inline !important;
}
@@ -10324,6 +11123,48 @@ textarea.form-control-lg {
.gap-xl-5 {
gap: 3rem !important;
}
+ .row-gap-xl-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-xl-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-xl-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-xl-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-xl-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-xl-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-xl-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-xl-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-xl-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-xl-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-xl-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-xl-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-xl-start {
text-align: left !important;
}
@@ -10344,6 +11185,26 @@ textarea.form-control-lg {
.float-xxl-none {
float: none !important;
}
+ .object-fit-xxl-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-xxl-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-xxl-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-xxl-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-xxl-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-xxl-inline {
display: inline !important;
}
@@ -10820,6 +11681,48 @@ textarea.form-control-lg {
.gap-xxl-5 {
gap: 3rem !important;
}
+ .row-gap-xxl-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-xxl-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-xxl-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-xxl-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-xxl-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-xxl-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-xxl-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-xxl-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-xxl-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-xxl-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-xxl-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-xxl-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-xxl-start {
text-align: left !important;
}
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap.css.map
index f6b0829cc..e83e183c5 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap.css.map
@@ -1 +1 @@
-{"version":3,"sources":["bootstrap.css","../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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BkB;EExjBlB,gBFwiB0B;AL3F9B;AG9WI;EIpGF;IJ6QM,iBAAA;EHyMN;AACF;;AOvdE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;ALhF9B;AGzXI;EIpGF;IJ6QM,eAAA;EHoNN;AACF;;AOleE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;ALrE9B;AGpYI;EIpGF;IJ6QM,iBAAA;EH+NN;AACF;;AO7eE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;AL1D9B;AG/YI;EIpGF;IJ6QM,eAAA;EH0ON;AACF;;AOxfE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;AL/C9B;AG1ZI;EIpGF;IJ6QM,iBAAA;EHqPN;AACF;;AO3eA;ECvDE,eAAA;EACA,gBAAA;ARsiBF;;AO3eA;EC5DE,eAAA;EACA,gBAAA;AR2iBF;;AO7eA;EACE,qBAAA;APgfF;AO9eE;EACE,oBFgkB0B;ALhF9B;;AOteA;EJoNM,kBALI;EI7MR,yBAAA;APyeF;;AOreA;EACE,mBF6RO;EFhFH,kBALI;AHiSV;AOteE;EACE,gBAAA;APweJ;;AOpeA;EACE,iBAAA;EACA,mBFmRO;EFhFH,kBALI;EI5LR,cFtFS;AL6jBX;AOreE;EACE,aAAA;APueJ;;ASvkBA;ECIE,eAAA;EAGA,YAAA;AVqkBF;;AStkBA;EACE,gBJ48CkC;EI38ClC,sBJPS;EIQT,wCAAA;EHGE,uBAAA;EIRF,eAAA;EAGA,YAAA;AV8kBF;;AShkBA;EAEE,qBAAA;ATkkBF;;AS/jBA;EACE,qBAAA;EACA,cAAA;ATkkBF;;AS/jBA;EN+PM,kBALI;EMxPR,cJ1BS;AL4lBX;;AWpmBE;;;;;;;ECHA,qBAAA;EACA,gBAAA;EACA,WAAA;EACA,6CAAA;EACA,4CAAA;EACA,kBAAA;EACA,iBAAA;AZinBF;;Aa3jBI;EF5CE;IACE,gBN6ae;EL8LrB;AACF;AajkBI;EF5CE;IACE,gBN6ae;ELmMrB;AACF;AatkBI;EF5CE;IACE,gBN6ae;ELwMrB;AACF;Aa3kBI;EF5CE;IACE,iBN6ae;EL6MrB;AA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AAA;EACA,yBAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EdGE,uBAAA;EeHE,wEDMJ;ApBy7DF;AqB37DM;EDhBN;ICiBQ,gBAAA;ErB87DN;AACF;AoB57DE;EACE,gBAAA;ApB87DJ;AoB57DI;EACE,eAAA;ApB87DN;AoBz7DE;EACE,cfjBO;EekBP,sBf3BO;Ee4BP,qBfqyBoC;EepyBpC,UAAA;EAKE,kDf6qB0B;AL0wChC;AoBh7DE;EAEE,aAAA;ApBi7DJ;AoB76DE;EACE,cf1CO;Ee4CP,UAAA;ApB86DJ;AoBj7DE;EACE,cf1CO;Ee4CP,UAAA;ApB86DJ;AoBt6DE;EAEE,yBf1DO;Ee6DP,UAAA;ApBq6DJ;AoBj6DE;EACE,yBAAA;EACA,0BAAA;EACA,2BfgoB0B;EehoB1B,0BfgoB0B;Ee/nB1B,cf9DO;EiBbT,yBjBMS;EeuEP,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,4Bf0Y0B;EezY1B,gBAAA;ECtEE,6IDuEF;ECvEE,qIDuEF;ApBm6DJ;AoB/6DE;EACE,yBAAA;EACA,0BAAA;EACA,2BfgoB0B;EehoB1B,0BfgoB0B;Ee/nB1B,cf9DO;EiBbT,yBjBMS;EeuEP,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,4Bf0Y0B;EezY1B,gBAAA;ECtEE,qIDuEF;ApBm6DJ;AqBt+DM;EDuDJ;ICtDM,wBAAA;IAAA,gBAAA;ErBy+DN;EoBn7DA;ICtDM,gBAAA;ErBy+DN;AACF;AoBr6DE;EACE,yBfs4B8B;ALiiClC;AoBx6DE;EACE,yBfs4B8B;ALiiClC;;AoB95DA;EACE,cAAA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBf2c4B;Ee1c5B,cfzFS;Ee0FT,6BAAA;EACA,yBAAA;EACA,mBAAA;ApBi6DF;AoB/5DE;EACE,UAAA;ApBi6DJ;AoB95DE;EAEE,gBAAA;EACA,eAAA;ApB+5DJ;;AoBp5DA;EACE,sCfstBsC;EertBtC,uBAAA;EjBkKI,mBALI;EG7QN,sBAAA;ANygEJ;AoBr5DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfglB0B;EehlB1B,yBfglB0B;ALu0C9B;AoB15DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfglB0B;EehlB1B,yBfglB0B;ALu0C9B;;AoBn5DA;EACE,oCf0sBsC;EezsBtC,oBAAA;EjBqJI,kBALI;EG7QN,qBAAA;ANqhEJ;AoBp5DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfukB0B;EevkB1B,uBfukB0B;AL+0C9B;AoBz5DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfukB0B;EevkB1B,uBfukB0B;AL+0C9B;;AoB94DE;EACE,uCfurBoC;AL0tCxC;AoB94DE;EACE,sCforBoC;AL4tCxC;AoB74DE;EACE,oCfirBoC;AL8tCxC;;AoB14DA;EACE,Wf+qBsC;Ee9qBtC,mCfwqBsC;EevqBtC,iBf6hB4B;ALg3C9B;AoB34DE;EACE,eAAA;ApB64DJ;AoB14DE;EACE,oBAAA;EdpKA,uBAAA;ANijEJ;AoBz4DE;EdxKE,uBAAA;ANojEJ;AoBx4DE;EAAoB,kCfypBkB;ALkvCxC;AoB14DE;EAAoB,gCfypBkB;ALovCxC;;AuBxkEA;EACE,cAAA;EACA,WAAA;EACA,0CAAA;EACA,uCAAA;EpB4RI,eALI;EoBpRR,gBlBiiB4B;EkBhiB5B,gBlBuiB4B;EkBtiB5B,clBGS;EkBFT,sBlBPS;EkBQT,iPAAA;EACA,4BAAA;EACA,yClBw5BkC;EkBv5BlC,0BlBw5BkC;EkBv5BlC,yBAAA;EjBDE,uBAAA;EeHE,wEEOJ;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AvBykEF;AqB7kEM;EEfN;IFgBQ,gBAAA;ErBglEN;AACF;AuB5kEE;EACE,qBlB8yBoC;EkB7yBpC,UAAA;EAKE,kDlBy5B4B;ALirClC;AuBtkEE;EAEE,sBlBuqB0B;EkBtqB1B,sBAAA;AvBukEJ;AuBpkEE;EAEE,yBlBnCO;ALwmEX;AuBhkEE;EACE,kBAAA;EACA,0BAAA;AvBkkEJ;;AuB9jEA;EACE,oBlBgqB4B;EkB/pB5B,uBlB+pB4B;EkB9pB5B,oBlB+pB4B;EFrbxB,mBALI;EG7QN,sBAAA;AN2mEJ;;AuB9jEA;EACE,mBlB4pB4B;EkB3pB5B,sBlB2pB4B;EkB1pB5B,kBlB2pB4B;EFzbxB,kBALI;EG7QN,qBAAA;ANmnEJ;;AwBloEA;EACE,cAAA;EACA,kBnB41BwC;EmB31BxC,mBnB41BwC;EmB31BxC,uBnB41BwC;ALyyC1C;AwBnoEE;EACE,WAAA;EACA,mBAAA;AxBqoEJ;;AwBjoEA;EACE,oBnBk1BwC;EmBj1BxC,eAAA;EACA,iBAAA;AxBooEF;AwBloEE;EACE,YAAA;EACA,oBAAA;EACA,cAAA;AxBooEJ;;AwBhoEA;EACE,UnBo0BwC;EmBn0BxC,WnBm0BwC;EmBl0BxC,kBAAA;EACA,mBAAA;EACA,sBnBzBS;EmB0BT,4BAAA;EACA,2BAAA;EACA,wBAAA;EACA,qCnBu0BwC;EmBt0BxC,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EACA,iCAAA;EAAA,mBAAA;EAAA,yBAAA;AxBmoEF;AwBhoEE;ElBvBE,qBAAA;AN0pEJ;AwB/nEE;EAEE,kBnB8zBsC;ALk0C1C;AwB7nEE;EACE,uBnBqzBsC;AL00C1C;AwB5nEE;EACE,qBnBixBoC;EmBhxBpC,UAAA;EACA,kDnB6pB4B;ALi+ChC;AwB3nEE;EACE,yBnBxBM;EmByBN,qBnBzBM;ALspEV;AwB3nEI;EAII,+OAAA;AxB0nER;AwBtnEI;EAII,uJAAA;AxBqnER;AwBhnEE;EACE,yBnB7CM;EmB8CN,qBnB9CM;EmBmDJ,yOAAA;AxB8mEN;AwB1mEE;EACE,oBAAA;EACA,YAAA;EACA,YnB6xBuC;AL+0C3C;AwBrmEI;EACE,eAAA;EACA,YnBoxBqC;ALm1C3C;;AwBzlEA;EACE,mBnB+wBgC;AL60ClC;AwB1lEE;EACE,UnB2wB8B;EmB1wB9B,mBAAA;EACA,wKAAA;EACA,gCAAA;ElB3GA,kBAAA;EeHE,iDGgHF;AxB4lEJ;AqBxsEM;EGsGJ;IHrGM,gBAAA;ErB2sEN;AACF;AwB/lEI;EACE,0JAAA;AxBimEN;AwB9lEI;EACE,iCnB0wB4B;EmBrwB1B,uJAAA;AxB4lER;AwBvlEE;EACE,oBnBqvB8B;EmBpvB9B,eAAA;AxBylEJ;AwBvlEI;EACE,oBAAA;EACA,cAAA;AxBylEN;;AwBplEA;EACE,qBAAA;EACA,kBnBmuBgC;ALo3ClC;;AwBplEA;EACE,kBAAA;EACA,sBAAA;EACA,oBAAA;AxBulEF;AwBnlEI;EACE,oBAAA;EACA,YAAA;EACA,anBolBwB;ALigD9B;;AyB1vEA;EACE,WAAA;EACA,cAAA;EACA,UAAA;EACA,6BAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AzB6vEF;AyB3vEE;EACE,UAAA;AzB6vEJ;AyBzvEI;EAA0B,kEpBq8Ba;ALuzC3C;AyB3vEI;EAA0B,kEpBo8Ba;AL0zC3C;AyB3vEE;EACE,SAAA;AzB6vEJ;AyB1vEE;EACE,WpBs7BuC;EoBr7BvC,YpBq7BuC;EoBp7BvC,oBAAA;EHzBF,yBjBkCQ;EoBPN,SpBq7BuC;ECj8BvC,mBAAA;EeHE,oHIkBF;EJlBE,4GIkBF;EACA,wBAAA;EAAA,gBAAA;AzB2vEJ;AqB1wEM;EIMJ;IJLM,wBAAA;IAAA,gBAAA;ErB6wEN;AACF;AyB9vEI;EHjCF,yBjBq9ByC;AL60C3C;AyB5vEE;EACE,WpB+5B8B;EoB95B9B,cpB+5B8B;EoB95B9B,kBAAA;EACA,epB85B8B;EoB75B9B,yBpBpCO;EoBqCP,yBAAA;EnB7BA,mBAAA;AN4xEJ;AyB1vEE;EACE,WpB25BuC;EoB15BvC,YpB05BuC;EiB78BzC,yBjBkCQ;EoBmBN,SpB25BuC;ECj8BvC,mBAAA;EeHE,iHI4CF;EJ5CE,4GI4CF;EACA,qBAAA;EAAA,gBAAA;AzB2vEJ;AqBpyEM;EIiCJ;IJhCM,qBAAA;IAAA,gBAAA;ErBuyEN;AACF;AyB9vEI;EH3DF,yBjBq9ByC;ALu2C3C;AyB5vEE;EACE,WpBq4B8B;EoBp4B9B,cpBq4B8B;EoBp4B9B,kBAAA;EACA,epBo4B8B;EoBn4B9B,yBpB9DO;EoB+DP,yBAAA;EnBvDA,mBAAA;ANszEJ;AyB1vEE;EACE,oBAAA;AzB4vEJ;AyB1vEI;EACE,yBpBtEK;ALk0EX;AyBzvEI;EACE,yBpB1EK;ALq0EX;;A0Bl1EA;EACE,kBAAA;A1Bq1EF;A0Bn1EE;;;EAGE,0BrB+9B8B;EqB99B9B,iB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B,yBDiLsB;A9C6sJ1B;A+C33JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/C43JR;A+Cz3JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CqtJ7B;;A+Cz4JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9C2tJ1B;A+Cz4JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/C04JR;A+Cv4JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CmuJ7B;;A+Cv5JE;EACE,cDqL2B;ECpL3B,yBDiLsB;A9CyuJ1B;A+Cv5JM;EAEE,cD+KuB;EC9KvB,yBAAA;A/Cw5JR;A+Cr5JM;EACE,W1CRG;E0CSH,yBDyKuB;ECxKvB,qBDwKuB;A9C+uJ/B;;A+Cr6JE;EACE,cDqL2B;ECpL3B,yBDiLsB;A9CuvJ1B;A+Cr6JM;EAEE,cD+KuB;EC9KvB,yBAAA;A/Cs6JR;A+Cn6JM;EACE,W1CRG;E0CSH,yBDyKuB;ECxKvB,qBDwKuB;A9C6vJ/B;;A+Cn7JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9CqwJ1B;A+Cn7JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/Co7JR;A+Cj7JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9C6wJ7B;;A+Cj8JE;EACE,cDqL2B;ECpL3B,yBDiLsB;A9CmxJ1B;A+Cj8JM;EAEE,cD+KuB;EC9KvB,yBAAA;A/Ck8JR;A+C/7JM;EACE,W1CRG;E0CSH,yBDyKuB;ECxKvB,qBDwKuB;A9CyxJ/B;;A+C/8JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9CiyJ1B;A+C/8JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/Cg9JR;A+C78JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CyyJ7B;;AgD59JA;EACE,uBAAA;EACA,U3C6iD2B;E2C5iD3B,W3C4iD2B;E2C3iD3B,sBAAA;EACA,W3CQS;E2CPT,mXAAA;EACA,SAAA;E1COE,uBAAA;E0CLF,Y3C6iD2B;ALk7G7B;AgD59JE;EACE,WAAA;EACA,qBAAA;EACA,a3CwiDyB;ALs7G7B;AgD39JE;EACE,UAAA;EACA,kD3C8rB4B;E2C7rB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/hQM;IAOI,8BAAA;EvE2hQV;EuEliQM;IAOI,iCAAA;EvE8hQV;EuEriQM;IAOI,sCAAA;EvEiiQV;EuExiQM;IAOI,yCAAA;EvEoiQV;EuE3iQM;IAOI,uBAAA;EvEuiQV;EuE9iQM;IAOI,uBAAA;EvE0iQV;EuEjjQM;IAOI,yBAAA;EvE6iQV;EuEpjQM;IAOI,yBAAA;EvEgjQV;EuEvjQM;IAOI,0BAAA;EvEmjQV;EuE1jQM;IAOI,4BAAA;EvEsjQV;EuE7jQM;IAOI,kCAAA;EvEyjQV;EuEhkQM;IAOI,sCAAA;EvE4jQV;EuEnkQM;IAOI,oCAAA;EvE+jQV;EuEtkQM;IAOI,kCAAA;EvEkkQV;EuEzkQM;IAOI,yCAAA;EvEqkQV;EuE5kQM;IAOI,wCAAA;EvEwkQV;EuE/kQM;IAOI,wCAAA;EvE2kQV;EuEllQM;IAOI,kCAAA;EvE8kQV;EuErlQM;IAOI,gCAAA;EvEilQV;EuExlQM;IAOI,8BAAA;EvEolQV;EuE3lQM;IAOI,gCAAA;EvEulQV;EuE9lQM;IAOI,+BAAA;EvE0lQV;EuEjmQM;IAOI,oCAAA;EvE6lQV;EuEpmQM;IAOI,kCAAA;EvEgmQV;EuEvmQM;IAOI,gCAAA;EvEmmQV;EuE1mQM;IAOI,uCAAA;EvEsmQV;EuE7mQM;IAOI,sCAAA;EvEymQV;EuEhnQM;IAOI,iCAAA;EvE4mQV;EuEnnQM;IAOI,2BAAA;EvE+mQV;EuEtnQM;IAOI,iCAAA;EvEknQV;EuEznQM;IAOI,+BAAA;EvEqnQV;EuE5nQM;IAOI,6BAAA;EvEwnQV;EuE/nQM;IAOI,+BAAA;EvE2nQV;EuEloQM;IAOI,8BAAA;EvE8nQV;EuEroQM;IAOI,oBAAA;EvEioQV;EuExoQM;IAOI,mBAAA;EvEooQV;EuE3oQM;IAOI,mBAAA;EvEuoQV;EuE9oQM;IAOI,mBAAA;EvE0oQV;EuEjpQM;IAOI,mBAAA;EvE6oQV;EuEppQM;IAOI,mBAAA;EvEgpQV;EuEvpQM;IAOI,mBAAA;EvEmpQV;EuE1pQM;IAOI,mBAAA;EvEspQV;EuE7pQM;IAOI,oBAAA;EvEypQV;EuEhqQM;IAOI,0BAAA;EvE4pQV;EuEnqQM;IAOI,yB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6QV;EuE16QM;IAOI,iCAAA;EvEs6QV;EuE76QM;IAOI,+BAAA;EvEy6QV;EuEh7QM;IAOI,iCAAA;EvE46QV;EuEn7QM;IAOI,+BAAA;EvE+6QV;EuEt7QM;IAOI,0BAAA;EvEk7QV;EuEz7QM;IAOI,gCAAA;EvEq7QV;EuE57QM;IAOI,+BAAA;EvEw7QV;EuE/7QM;IAOI,6BAAA;EvE27QV;EuEl8QM;IAOI,+BAAA;EvE87QV;EuEr8QM;IAOI,6BAAA;EvEi8QV;EuEx8QM;IAOI,iBAAA;EvEo8QV;EuE38QM;IAOI,uBAAA;EvEu8QV;EuE98QM;IAOI,sBAAA;EvE08QV;EuEj9QM;IAOI,oBAAA;EvE68QV;EuEp9QM;IAOI,sBAAA;EvEg9QV;EuEv9QM;IAOI,oBAAA;EvEm9QV;EuE19QM;IAOI,2BAAA;EvEs9QV;EuE79QM;IAOI,4BAAA;EvEy9QV;EuEh+QM;IAOI,6BAAA;EvE49QV;AACF;Aav+QI;E0DGI;IAOI,sBAAA;EvEi+QV;EuEx+QM;IAOI,uBAAA;EvEo+QV;EuE3+QM;IAOI,sBAAA;EvEu+QV;EuE9+QM;IAOI,0BAAA;EvE0+QV;EuEj/QM;IAOI,gCAAA;EvE6+QV;EuEp/QM;IAOI,yBAAA;EvEg/QV;EuEv/QM;IAOI,wBAAA;EvEm/QV;EuE1/QM;IAOI,yBAAA;EvEs/QV;EuE7/QM;IAOI,6BAAA;EvEy/QV;EuEhgRM;IAOI,8BAAA;EvE4/QV;EuEngRM;IAOI,wBAAA;EvE+/QV;EuEtgRM;IAOI,+BAAA;EvEkgRV;EuEzgRM;IAOI,wBAAA;EvEqgRV;EuE5gRM;IAOI,yBAAA;EvEwgRV;EuE/gRM;IAOI,8BAAA;EvE2gRV;EuElhRM;IAOI,iCAAA;EvE8gRV;EuErhRM;IAOI,sCAAA;EvEihRV;EuExhRM;IAOI,yCAAA;EvEohRV;EuE3hRM;IAOI,uBAAA;EvEuhRV;EuE9hRM;IAOI,uBAAA;EvE0hRV;EuEjiRM;IAOI,yBAAA;EvE6hRV;EuEpiRM;IAOI,yBAAA;EvEgiRV;EuEviRM;IAOI,0BAAA;EvEmiRV;EuE1iRM;IAOI,4BAAA;EvEsiRV;EuE7iRM;IAOI,kCAAA;EvEyiR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;EvEo7RV;EuE37RM;IAOI,uBAAA;EvEu7RV;EuE97RM;IAOI,sBAAA;EvE07RV;EuEj8RM;IAOI,oBAAA;EvE67RV;EuEp8RM;IAOI,sBAAA;EvEg8RV;EuEv8RM;IAOI,oBAAA;EvEm8RV;EuE18RM;IAOI,2BAAA;EvEs8RV;EuE78RM;IAOI,4BAAA;EvEy8RV;EuEh9RM;IAOI,6BAAA;EvE48RV;AACF;Aav9RI;E0DGI;IAOI,sBAAA;EvEi9RV;EuEx9RM;IAOI,uBAAA;EvEo9RV;EuE39RM;IAOI,sBAAA;EvEu9RV;EuE99RM;IAOI,0BAAA;EvE09RV;EuEj+RM;IAOI,gCAAA;EvE69RV;EuEp+RM;IAOI,yBAAA;EvEg+RV;EuEv+RM;IAOI,wBAAA;EvEm+RV;EuE1+RM;IAOI,yBAAA;EvEs+RV;EuE7+RM;IAOI,6BAAA;EvEy+RV;EuEh/RM;IAOI,8BAAA;EvE4+RV;EuEn/RM;IAOI,wBAAA;EvE++RV;EuEt/RM;IAOI,+BAAA;EvEk/RV;EuEz/RM;IAOI,wBAAA;EvEq/RV;EuE5/RM;IAOI,yBAAA;EvEw/RV;EuE//RM;IAOI,8BAAA;EvE2/RV;EuElgSM;IAOI,iCAAA;EvE8/RV;EuErgSM;IAOI,sCAAA;EvEigSV;EuExgSM;IAOI,yCAAA;EvEogSV;EuE3gSM;IAOI,uBAAA;EvEugSV;EuE9gSM;IAOI,uBAAA;EvE0gSV;EuEjhSM;IAOI,yBAAA;EvE6gSV;EuEphSM;IAOI,yBAAA;EvEghSV;EuEvhSM;IAOI,0BAAA;EvEmhSV;EuE1hSM;IAOI,4BAAA;EvEshSV;EuE7hSM;IAOI,kCAAA;EvEyhSV;EuEhiSM;IAOI,sCAAA;EvE4hSV;EuEniSM;IAOI,oCAAA;EvE+hSV;EuEtiSM;IAOI,kCAAA;EvEkiSV;EuEziSM;IAOI,yCAAA;EvEqiSV;EuE5iSM;IAOI,wCAAA;EvEwiSV;EuE/iSM;IAOI,wCAAA;EvE2iSV;EuEljSM;IAOI,kCAAA;EvE8iSV;EuErjSM;IAOI,gCAAA;EvEijSV;EuExjSM;IAOI,8BAAA;EvEojSV;EuE3jSM;IAOI,gCAAA;EvEujSV;EuE9jSM;IAOI,+BAAA;E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38SM;IAOI,sBAAA;EvEu8SV;EuE98SM;IAOI,0BAAA;EvE08SV;EuEj9SM;IAOI,gCAAA;EvE68SV;EuEp9SM;IAOI,yBAAA;EvEg9SV;EuEv9SM;IAOI,wBAAA;EvEm9SV;EuE19SM;IAOI,yBAAA;EvEs9SV;EuE79SM;IAOI,6BAAA;EvEy9SV;EuEh+SM;IAOI,8BAAA;EvE49SV;EuEn+SM;IAOI,wBAAA;EvE+9SV;EuEt+SM;IAOI,+BAAA;EvEk+SV;EuEz+SM;IAOI,wBAAA;EvEq+SV;EuE5+SM;IAOI,yBAAA;EvEw+SV;EuE/+SM;IAOI,8BAAA;EvE2+SV;EuEl/SM;IAOI,iCAAA;EvE8+SV;EuEr/SM;IAOI,sCAAA;EvEi/SV;EuEx/SM;IAOI,yCAAA;EvEo/SV;EuE3/SM;IAOI,uBAAA;EvEu/SV;EuE9/SM;IAOI,uBAAA;EvE0/SV;EuEjgTM;IAOI,yBAAA;EvE6/SV;EuEpgTM;IAOI,yBAAA;EvEggTV;EuEvgTM;IAOI,0BAAA;EvEmgTV;EuE1gTM;IAOI,4BAAA;EvEsgTV;EuE7gTM;IAOI,kCAAA;EvEygTV;EuEhhTM;IAOI,sCAAA;EvE4gTV;EuEnhTM;IAOI,oCAAA;EvE+gTV;EuEthTM;IAOI,kCAAA;EvEkhTV;EuEzhTM;IAOI,yCAAA;EvEqhTV;EuE5hTM;IAOI,wCAAA;EvEwhTV;EuE/hTM;IAOI,wCAAA;EvE2hTV;EuEliTM;IAOI,kCAAA;EvE8hTV;EuEriTM;IAOI,gCAAA;EvEiiTV;EuExiTM;IAOI,8BAAA;EvEoiTV;EuE3iTM;IAOI,gCAAA;EvEuiTV;EuE9iTM;IAOI,+BAAA;EvE0iTV;EuEjjTM;IAOI,oCAAA;EvE6iTV;EuEpjTM;IAOI,kCAAA;EvEgjTV;EuEvjTM;IAOI,gCAAA;EvEmjTV;EuE1jTM;IAOI,uCAAA;EvEsjTV;EuE7jTM;IAOI,sCAAA;EvEyjTV;EuEhkTM;IAOI,iCAAA;EvE4jTV;EuEnkTM;IAOI,2BAAA;EvE+jTV;EuEtkTM;IAOI,iCAAA;EvEkkTV;EuEzkTM;IAOI,+BAAA;EvEqkTV;EuE5kTM;IAOI,6BAAA;EvEwkTV;EuE/kTM;IAOI,+B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0TV;EuEt1TM;IAOI,8BAAA;EvEk1TV;EuEz1TM;IAOI,4BAAA;EvEq1TV;EuE51TM;IAOI,8BAAA;EvEw1TV;EuE/1TM;IAOI,4BAAA;EvE21TV;EuEl2TM;IAOI,2BAAA;EvE81TV;EuEr2TM;IAOI,iCAAA;EvEi2TV;EuEx2TM;IAOI,gCAAA;EvEo2TV;EuE32TM;IAOI,8BAAA;EvEu2TV;EuE92TM;IAOI,gCAAA;EvE02TV;EuEj3TM;IAOI,8BAAA;EvE62TV;EuEp3TM;IAOI,4BAAA;EvEg3TV;EuEv3TM;IAOI,kCAAA;EvEm3TV;EuE13TM;IAOI,iCAAA;EvEs3TV;EuE73TM;IAOI,+BAAA;EvEy3TV;EuEh4TM;IAOI,iCAAA;EvE43TV;EuEn4TM;IAOI,+BAAA;EvE+3TV;EuEt4TM;IAOI,0BAAA;EvEk4TV;EuEz4TM;IAOI,gCAAA;EvEq4TV;EuE54TM;IAOI,+BAAA;EvEw4TV;EuE/4TM;IAOI,6BAAA;EvE24TV;EuEl5TM;IAOI,+BAAA;EvE84TV;EuEr5TM;IAOI,6BAAA;EvEi5TV;EuEx5TM;IAOI,iBAAA;EvEo5TV;EuE35TM;IAOI,uBAAA;EvEu5TV;EuE95TM;IAOI,sBAAA;EvE05TV;EuEj6TM;IAOI,oBAAA;EvE65TV;EuEp6TM;IAOI,sBAAA;EvEg6TV;EuEv6TM;IAOI,oBAAA;EvEm6TV;EuE16TM;IAOI,2BAAA;EvEs6TV;EuE76TM;IAOI,4BAAA;EvEy6TV;EuEh7TM;IAOI,6BAAA;EvE46TV;AACF;Aav7TI;E0DGI;IAOI,sBAAA;EvEi7TV;EuEx7TM;IAOI,uBAAA;EvEo7TV;EuE37TM;IAOI,sBAAA;EvEu7TV;EuE97TM;IAOI,0BAAA;EvE07TV;EuEj8TM;IAOI,gCAAA;EvE67TV;EuEp8TM;IAOI,yBAAA;EvEg8TV;EuEv8TM;IAOI,wBAAA;EvEm8TV;EuE18TM;IAOI,yBAAA;EvEs8TV;EuE78TM;IAOI,6BAAA;EvEy8TV;EuEh9TM;IAOI,8BAAA;EvE48TV;EuEn9TM;IAOI,wBAAA;EvE+8TV;EuEt9TM;IAOI,+BAAA;EvEk9TV;EuEz9TM;IAOI,wBAAA;EvEq9TV;EuE59TM;IAOI,yBAAA;EvEw9TV;EuE/9TM;IAOI,8BAAA;EvE29TV;EuEl+TM;IAOI,iCAAA;EvE89TV;EuEr+TM;IAOI,sCAAA;EvEi+TV;EuEx+TM;IAOI,yCAAA;EvEo+TV;EuE3+TM;IAOI,uBAAA;EvEu+TV;EuE9+TM;IAOI,uBAAA;EvE0+TV;EuEj/TM;IAOI,yBAAA;EvE6+TV;EuEp/TM;IAOI,yBAAA;EvEg/TV;EuEv/TM;IAOI,0BAAA;EvEm/TV;EuE1/TM;IAOI,4BAAA;EvEs/TV;EuE7/TM;IAOI,kCAAA;EvEy/TV;EuEhgUM;IAOI,sCAAA;EvE4/TV;EuEngUM;IAOI,oCAAA;EvE+/TV;EuEtgUM;IAOI,kCAAA;EvEkgUV;EuEzgUM;IAOI,yCAAA;EvEqgUV;EuE5gUM;IAOI,wCAAA;EvEwgUV;EuE/gUM;IAOI,wCAAA;EvE2gUV;EuElhUM;IAOI,kCAAA;EvE8gUV;EuErhUM;IAOI,gCAAA;EvEihUV;EuExhUM;IAOI,8BAAA;EvEohUV;EuE3hUM;IAOI,gCAAA;EvEuhUV;EuE9hUM;IAOI,+BAAA;EvE0hUV;EuEjiUM;IAOI,oCAAA;EvE6hUV;EuEpiUM;IAOI,kCAAA;EvEgiUV;EuEviUM;IAOI,gCAAA;EvEmiUV;EuE1iUM;IAOI,uCAAA;EvEsiUV;EuE7iUM;IAOI,sCAAA;EvEyiUV;EuEhjUM;IAOI,iCAAA;EvE4iUV;EuEnjUM;IAOI,2BAAA;EvE+iUV;EuEtjUM;IAOI,iCAAA;EvEkjUV;EuEzjUM;IAOI,+BAAA;EvEqjUV;EuE5jUM;IAOI,6BAAA;EvEwjUV;EuE/jUM;IAOI,+BAAA;EvE2jUV;EuElkUM;IAOI,8BAAA;EvE8jUV;EuErkUM;IAOI,oBAAA;EvEikUV;EuExkUM;IAOI,mBAAA;EvEokUV;EuE3kUM;IAOI,mBAAA;EvEukUV;EuE9kUM;IAOI,mBAAA;EvE0kUV;EuEjlUM;IAOI,mBAAA;EvE6kUV;EuEplUM;IAOI,mBAAA;EvEglUV;EuEvlUM;IAOI,mBAAA;EvEmlUV;EuE1lUM;IAOI,mBAAA;EvEslUV;EuE7lUM;IAOI,oBAAA;EvEylUV;EuEhmUM;IA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;EvEg2UV;EuEv2UM;IAOI,kCAAA;EvEm2UV;EuE12UM;IAOI,iCAAA;EvEs2UV;EuE72UM;IAOI,+BAAA;EvEy2UV;EuEh3UM;IAOI,iCAAA;EvE42UV;EuEn3UM;IAOI,+BAAA;EvE+2UV;EuEt3UM;IAOI,0BAAA;EvEk3UV;EuEz3UM;IAOI,gCAAA;EvEq3UV;EuE53UM;IAOI,+BAAA;EvEw3UV;EuE/3UM;IAOI,6BAAA;EvE23UV;EuEl4UM;IAOI,+BAAA;EvE83UV;EuEr4UM;IAOI,6BAAA;EvEi4UV;EuEx4UM;IAOI,iBAAA;EvEo4UV;EuE34UM;IAOI,uBAAA;EvEu4UV;EuE94UM;IAOI,sBAAA;EvE04UV;EuEj5UM;IAOI,oBAAA;EvE64UV;EuEp5UM;IAOI,sBAAA;EvEg5UV;EuEv5UM;IAOI,oBAAA;EvEm5UV;EuE15UM;IAOI,2BAAA;EvEs5UV;EuE75UM;IAOI,4BAAA;EvEy5UV;EuEh6UM;IAOI,6BAAA;EvE45UV;AACF;AwEn9UA;ED+CQ;IAOI,4BAAA;EvEi6UV;EuEx6UM;IAOI,0BAAA;EvEo6UV;EuE36UM;IAOI,6BAAA;EvEu6UV;EuE96UM;IAOI,4BAAA;EvE06UV;AACF;AwE98UA;ED4BQ;IAOI,0BAAA;EvE+6UV;EuEt7UM;IAOI,gCAAA;EvEk7UV;EuEz7UM;IAOI,yBAAA;EvEq7UV;EuE57UM;IAOI,wBAAA;EvEw7UV;EuE/7UM;IAOI,yBAAA;EvE27UV;EuEl8UM;IAOI,6BAAA;EvE87UV;EuEr8UM;IAOI,8BAAA;EvEi8UV;EuEx8UM;IAOI,wBAAA;EvEo8UV;EuE38UM;IAOI,+BAAA;EvEu8UV;EuE98UM;IAOI,wBAAA;EvE08UV;AACF","file":"bootstrap.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * Bootstrap v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: 2px solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control:disabled {\n background-color: #e9ecef;\n opacity: 1;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.form-select {\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: #fff;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: 1px solid rgba(0, 0, 0, 0.25);\n appearance: none;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n width: 2em;\n margin-left: -2.5em;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + 2px);\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: 1px solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: 1px 0;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #198754;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(25, 135, 84, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #198754;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: #198754;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: 1px;\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: #212529;\n --bs-dropdown-bg: #fff;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: 1px;\n --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-dropdown-link-color: #212529;\n --bs-dropdown-link-hover-color: #1e2125;\n --bs-dropdown-link-hover-bg: #e9ecef;\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: 1px;\n --bs-nav-tabs-border-color: #dee2e6;\n --bs-nav-tabs-border-radius: 0.375rem;\n --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;\n --bs-nav-tabs-link-active-color: #495057;\n --bs-nav-tabs-link-active-bg: #fff;\n --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(0, 0, 0, 0.55);\n --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);\n --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);\n --bs-navbar-active-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-border-width: 1px;\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: 0.375rem;\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(0.375rem - 1px);\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(0, 0, 0, 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: #fff;\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: #212529;\n --bs-accordion-bg: #fff;\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: 1px;\n --bs-accordion-border-radius: 0.375rem;\n --bs-accordion-inner-border-radius: calc(0.375rem - 1px);\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: #212529;\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: #0c63e4;\n --bs-accordion-active-bg: #e7f1ff;\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: #6c757d;\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: #fff;\n --bs-pagination-border-width: 1px;\n --bs-pagination-border-color: #dee2e6;\n --bs-pagination-border-radius: 0.375rem;\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: #e9ecef;\n --bs-pagination-hover-border-color: #dee2e6;\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: #e9ecef;\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: #6c757d;\n --bs-pagination-disabled-bg: #fff;\n --bs-pagination-disabled-border-color: #dee2e6;\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: -1px;\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: 1px solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: #084298;\n --bs-alert-bg: #cfe2ff;\n --bs-alert-border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n color: #06357a;\n}\n\n.alert-secondary {\n --bs-alert-color: #41464b;\n --bs-alert-bg: #e2e3e5;\n --bs-alert-border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n color: #34383c;\n}\n\n.alert-success {\n --bs-alert-color: #0f5132;\n --bs-alert-bg: #d1e7dd;\n --bs-alert-border-color: #badbcc;\n}\n.alert-success .alert-link {\n color: #0c4128;\n}\n\n.alert-info {\n --bs-alert-color: #055160;\n --bs-alert-bg: #cff4fc;\n --bs-alert-border-color: #b6effb;\n}\n.alert-info .alert-link {\n color: #04414d;\n}\n\n.alert-warning {\n --bs-alert-color: #664d03;\n --bs-alert-bg: #fff3cd;\n --bs-alert-border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n color: #523e02;\n}\n\n.alert-danger {\n --bs-alert-color: #842029;\n --bs-alert-bg: #f8d7da;\n --bs-alert-border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n color: #6a1a21;\n}\n\n.alert-light {\n --bs-alert-color: #636464;\n --bs-alert-bg: #fefefe;\n --bs-alert-border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n color: #4f5050;\n}\n\n.alert-dark {\n --bs-alert-color: #141619;\n --bs-alert-bg: #d3d3d4;\n --bs-alert-border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n color: #101214;\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: #e9ecef;\n --bs-progress-border-radius: 0.375rem;\n --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: #212529;\n --bs-list-group-bg: #fff;\n --bs-list-group-border-color: rgba(0, 0, 0, 0.125);\n --bs-list-group-border-width: 1px;\n --bs-list-group-border-radius: 0.375rem;\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: #495057;\n --bs-list-group-action-hover-color: #495057;\n --bs-list-group-action-hover-bg: #f8f9fa;\n --bs-list-group-action-active-color: #212529;\n --bs-list-group-action-active-bg: #e9ecef;\n --bs-list-group-disabled-color: #6c757d;\n --bs-list-group-disabled-bg: #fff;\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #084298;\n background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #084298;\n background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #084298;\n border-color: #084298;\n}\n\n.list-group-item-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #41464b;\n background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #41464b;\n border-color: #41464b;\n}\n\n.list-group-item-success {\n color: #0f5132;\n background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #0f5132;\n background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #0f5132;\n border-color: #0f5132;\n}\n\n.list-group-item-info {\n color: #055160;\n background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #055160;\n background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #055160;\n border-color: #055160;\n}\n\n.list-group-item-warning {\n color: #664d03;\n background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #664d03;\n background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #664d03;\n border-color: #664d03;\n}\n\n.list-group-item-danger {\n color: #842029;\n background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #842029;\n background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #842029;\n border-color: #842029;\n}\n\n.list-group-item-light {\n color: #636464;\n background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #636464;\n background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #636464;\n border-color: #636464;\n}\n\n.list-group-item-dark {\n color: #141619;\n background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #141619;\n background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #141619;\n border-color: #141619;\n}\n\n.btn-close {\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: #000;\n background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: 0.5;\n}\n.btn-close:hover {\n color: #000;\n text-decoration: none;\n opacity: 0.75;\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n user-select: none;\n opacity: 0.25;\n}\n\n.btn-close-white {\n filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-border-width: 1px;\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: 0.375rem;\n --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-toast-header-color: #6c757d;\n --bs-toast-header-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: #fff;\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: 1px;\n --bs-modal-border-radius: 0.5rem;\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-modal-inner-border-radius: calc(0.5rem - 1px);\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: 1px;\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: 1px;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n.modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n.modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n.modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n.modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n.modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n.modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: #fff;\n --bs-tooltip-bg: #000;\n --bs-tooltip-border-radius: 0.375rem;\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: #fff;\n --bs-popover-border-width: 1px;\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: 0.5rem;\n --bs-popover-inner-border-radius: calc(0.5rem - 1px);\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: #f0f0f0;\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: #212529;\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n.carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n.spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: ;\n --bs-offcanvas-bg: #fff;\n --bs-offcanvas-border-width: 1px;\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */\n","@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: var(--#{$prefix}table-color);\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: ($table-border-width * 2) solid $table-group-separator-color;\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-active-bg);\n color: var(--#{$prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-hover-bg);\n color: var(--#{$prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: escape-svg($form-select-indicator);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: $form-check-input-bg;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-checked-bg-image);\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-radio-checked-bg-image);\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-indeterminate-bg-image);\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: escape-svg($form-switch-bg-image);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n background-image: escape-svg($form-switch-focus-bg-image);\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n background-image: escape-svg($form-switch-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-switch-checked-bg-image);\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: -$input-border-width;\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n padding-right: $form-select-feedback-icon-padding-end;\n background-image: escape-svg($form-select-indicator), escape-svg($icon);\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$body-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: none;\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($primary), $primary, 15%))};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n clear: both;\n font-weight: $font-weight-normal;\n color: var(--#{$prefix}dropdown-link-color);\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}dropdown-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n }\n\n &.active,\n &:active {\n color: var(--#{$prefix}dropdown-link-active-color);\n text-decoration: none;\n @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: var(--#{$prefix}dropdown-header-color);\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n // scss-docs-start dropdown-dark-css-vars\n --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n // scss-docs-end dropdown-dark-css-vars\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-end {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-start {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == end {\n @include caret-end();\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-start();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n background: none;\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n background: none;\n border: 0;\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .show > .nav-link,\n .nav-link.active {\n color: var(--#{$prefix}navbar-active-color);\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n line-height: 1;\n color: var(--#{$prefix}navbar-color);\n background-color: transparent; // remove default button style\n border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas {\n // stylelint-disable declaration-no-important\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n @include box-shadow(none);\n @include transition(none);\n // stylelint-enable declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n @include deprecate(\"`.navbar-light`\", \"v5.2.0\", \"v6.0.0\", true);\n}\n\n.navbar-dark {\n // scss-docs-start navbar-dark-css-vars\n --#{$prefix}navbar-color: #{$navbar-dark-color};\n --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n // scss-docs-end navbar-dark-css-vars\n}\n","//\n// Base styles\n//\n\n.card {\n // scss-docs-start card-css-vars\n --#{$prefix}card-spacer-y: #{$card-spacer-y};\n --#{$prefix}card-spacer-x: #{$card-spacer-x};\n --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n --#{$prefix}card-border-width: #{$card-border-width};\n --#{$prefix}card-border-color: #{$card-border-color};\n --#{$prefix}card-border-radius: #{$card-border-radius};\n --#{$prefix}card-box-shadow: #{$card-box-shadow};\n --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n --#{$prefix}card-cap-bg: #{$card-cap-bg};\n --#{$prefix}card-cap-color: #{$card-cap-color};\n --#{$prefix}card-height: #{$card-height};\n --#{$prefix}card-color: #{$card-color};\n --#{$prefix}card-bg: #{$card-bg};\n --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n --#{$prefix}card-group-margin: #{$card-group-margin};\n // scss-docs-end card-css-vars\n\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: var(--#{$prefix}card-height);\n word-wrap: break-word;\n background-color: var(--#{$prefix}card-bg);\n background-clip: border-box;\n border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n @include border-radius(var(--#{$prefix}card-border-radius));\n @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n margin-bottom: var(--#{$prefix}card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: var(--#{$prefix}card-spacer-x);\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:first-child {\n @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0);\n }\n}\n\n.card-footer {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:last-child {\n @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius));\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n border-bottom: 0;\n\n .nav-link.active {\n background-color: var(--#{$prefix}card-bg);\n border-bottom-color: var(--#{$prefix}card-bg);\n }\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--#{$prefix}card-img-overlay-padding);\n @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: var(--#{$prefix}card-group-margin);\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion {\n // scss-docs-start accordion-css-vars\n --#{$prefix}accordion-color: #{$accordion-color};\n --#{$prefix}accordion-bg: #{$accordion-bg};\n --#{$prefix}accordion-transition: #{$accordion-transition};\n --#{$prefix}accordion-border-color: #{$accordion-border-color};\n --#{$prefix}accordion-border-width: #{$accordion-border-width};\n --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};\n --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n @include font-size($font-size-base);\n color: var(--#{$prefix}accordion-btn-color);\n text-align: left; // Reset button style\n background-color: var(--#{$prefix}accordion-btn-bg);\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition(var(--#{$prefix}accordion-transition));\n\n &:not(.collapsed) {\n color: var(--#{$prefix}accordion-active-color);\n background-color: var(--#{$prefix}accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n &::after {\n background-image: var(--#{$prefix}accordion-btn-active-icon);\n transform: var(--#{$prefix}accordion-btn-icon-transform);\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: var(--#{$prefix}accordion-btn-icon-width);\n height: var(--#{$prefix}accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--#{$prefix}accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--#{$prefix}accordion-btn-icon-width);\n @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--#{$prefix}accordion-color);\n background-color: var(--#{$prefix}accordion-bg);\n border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n &:first-of-type {\n @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n }\n }\n}\n\n.accordion-body {\n padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n &,\n &.collapsed {\n @include border-radius(0);\n }\n }\n }\n}\n",".breadcrumb {\n // scss-docs-start breadcrumb-css-vars\n --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n // scss-docs-end breadcrumb-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n @include font-size(var(--#{$prefix}breadcrumb-font-size));\n list-style: none;\n background-color: var(--#{$prefix}breadcrumb-bg);\n @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n color: var(--#{$prefix}breadcrumb-divider-color);\n content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: var(--#{$prefix}breadcrumb-item-active-color);\n }\n}\n",".pagination {\n // scss-docs-start pagination-css-vars\n --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-color: #{$pagination-color};\n --#{$prefix}pagination-bg: #{$pagination-bg};\n --#{$prefix}pagination-border-width: #{$pagination-border-width};\n --#{$prefix}pagination-border-color: #{$pagination-border-color};\n --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n --#{$prefix}pagination-active-color: #{$pagination-active-color};\n --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n // scss-docs-end pagination-css-vars\n\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n @include font-size(var(--#{$prefix}pagination-font-size));\n color: var(--#{$prefix}pagination-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}pagination-bg);\n border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: var(--#{$prefix}pagination-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}pagination-hover-bg);\n border-color: var(--#{$prefix}pagination-hover-border-color);\n }\n\n &:focus {\n z-index: 3;\n color: var(--#{$prefix}pagination-focus-color);\n background-color: var(--#{$prefix}pagination-focus-bg);\n outline: $pagination-focus-outline;\n box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n }\n\n &.active,\n .active > & {\n z-index: 3;\n color: var(--#{$prefix}pagination-active-color);\n @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n border-color: var(--#{$prefix}pagination-active-border-color);\n }\n\n &.disabled,\n .disabled > & {\n color: var(--#{$prefix}pagination-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}pagination-disabled-bg);\n border-color: var(--#{$prefix}pagination-disabled-border-color);\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n @if $pagination-margin-start == ($pagination-border-width * -1) {\n &:first-child {\n .page-link {\n @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n } @else {\n // Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}pagination-padding-x: #{$padding-x};\n --#{$prefix}pagination-padding-y: #{$padding-y};\n @include rfs($font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $state, $value in $theme-colors {\n $alert-background: shift-color($value, $alert-bg-scale);\n $alert-border: shift-color($value, $alert-border-scale);\n $alert-color: shift-color($value, $alert-color-scale);\n\n @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {\n $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));\n }\n .alert-#{$state} {\n @include alert-variant($alert-background, $alert-border, $alert-color);\n }\n}\n// scss-docs-end alert-modifiers\n","// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n --#{$prefix}alert-color: #{$color};\n --#{$prefix}alert-bg: #{$background};\n --#{$prefix}alert-border-color: #{$border};\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n\n .alert-link {\n color: shade-color($color, 20%);\n }\n}\n// scss-docs-end alert-variant-mixin\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress {\n // scss-docs-start progress-css-vars\n --#{$prefix}progress-height: #{$progress-height};\n @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n --#{$prefix}progress-bg: #{$progress-bg};\n --#{$prefix}progress-border-radius: #{$progress-border-radius};\n --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n --#{$prefix}progress-bar-color: #{$progress-bar-color};\n --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n // scss-docs-end progress-css-vars\n\n display: flex;\n height: var(--#{$prefix}progress-height);\n overflow: hidden; // force rounded corners by cropping it\n @include font-size(var(--#{$prefix}progress-font-size));\n background-color: var(--#{$prefix}progress-bg);\n @include border-radius(var(--#{$prefix}progress-border-radius));\n @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--#{$prefix}progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--#{$prefix}progress-bar-bg);\n @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // scss-docs-start list-group-css-vars\n --#{$prefix}list-group-color: #{$list-group-color};\n --#{$prefix}list-group-bg: #{$list-group-bg};\n --#{$prefix}list-group-border-color: #{$list-group-border-color};\n --#{$prefix}list-group-border-width: #{$list-group-border-width};\n --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n --#{$prefix}list-group-action-color: #{$list-group-action-color};\n --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n --#{$prefix}list-group-active-color: #{$list-group-active-color};\n --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n // scss-docs-end list-group-css-vars\n\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > .list-group-item::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: var(--#{$prefix}list-group-action-color);\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--#{$prefix}list-group-action-hover-bg);\n }\n\n &:active {\n color: var(--#{$prefix}list-group-action-active-color);\n background-color: var(--#{$prefix}list-group-action-active-bg);\n }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n color: var(--#{$prefix}list-group-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}list-group-bg);\n border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}list-group-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}list-group-disabled-bg);\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-active-color);\n background-color: var(--#{$prefix}list-group-active-bg);\n border-color: var(--#{$prefix}list-group-active-border-color);\n }\n\n // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n & + .list-group-item {\n border-top-width: 0;\n\n &.active {\n margin-top: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-top-width: var(--#{$prefix}list-group-border-width);\n }\n }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child:not(:last-child) {\n @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n @include border-top-end-radius(0);\n }\n\n &:last-child:not(:first-child) {\n @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: var(--#{$prefix}list-group-border-width);\n border-left-width: 0;\n\n &.active {\n margin-left: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-left-width: var(--#{$prefix}list-group-border-width);\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state, $value in $theme-colors {\n $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);\n $list-group-variant-color: shift-color($value, $list-group-item-color-scale);\n @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {\n $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));\n }\n\n @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);\n}\n// scss-docs-end list-group-modifiers\n","// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n color: $color;\n background-color: shade-color($background, 10%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n// scss-docs-end list-group-mixin\n","// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: $btn-close-color;\n background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: $btn-close-opacity;\n\n // Override <a>'s hover style\n &:hover {\n color: $btn-close-color;\n text-decoration: none;\n opacity: $btn-close-hover-opacity;\n }\n\n &:focus {\n outline: 0;\n box-shadow: $btn-close-focus-shadow;\n opacity: $btn-close-focus-opacity;\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: $btn-close-disabled-opacity;\n }\n}\n\n.btn-close-white {\n filter: $btn-close-white-filter;\n}\n",".toast {\n // scss-docs-start toast-css-vars\n --#{$prefix}toast-zindex: #{$zindex-toast};\n --#{$prefix}toast-padding-x: #{$toast-padding-x};\n --#{$prefix}toast-padding-y: #{$toast-padding-y};\n --#{$prefix}toast-spacing: #{$toast-spacing};\n --#{$prefix}toast-max-width: #{$toast-max-width};\n @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n --#{$prefix}toast-color: #{$toast-color};\n --#{$prefix}toast-bg: #{$toast-background-color};\n --#{$prefix}toast-border-width: #{$toast-border-width};\n --#{$prefix}toast-border-color: #{$toast-border-color};\n --#{$prefix}toast-border-radius: #{$toast-border-radius};\n --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n --#{$prefix}toast-header-color: #{$toast-header-color};\n --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n // scss-docs-end toast-css-vars\n\n width: var(--#{$prefix}toast-max-width);\n max-width: 100%;\n @include font-size(var(--#{$prefix}toast-font-size));\n color: var(--#{$prefix}toast-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}toast-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n box-shadow: var(--#{$prefix}toast-box-shadow);\n @include border-radius(var(--#{$prefix}toast-border-radius));\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n --#{$prefix}toast-zindex: #{$zindex-toast};\n\n position: absolute;\n z-index: var(--#{$prefix}toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: var(--#{$prefix}toast-spacing);\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n color: var(--#{$prefix}toast-header-color);\n background-color: var(--#{$prefix}toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);\n @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));\n\n .btn-close {\n margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: var(--#{$prefix}toast-padding-x);\n }\n}\n\n.toast-body {\n padding: var(--#{$prefix}toast-padding-x);\n word-wrap: break-word;\n}\n","// stylelint-disable function-disallowed-list\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n // scss-docs-start modal-css-vars\n --#{$prefix}modal-zindex: #{$zindex-modal};\n --#{$prefix}modal-width: #{$modal-md};\n --#{$prefix}modal-padding: #{$modal-inner-padding};\n --#{$prefix}modal-margin: #{$modal-dialog-margin};\n --#{$prefix}modal-color: #{$modal-content-color};\n --#{$prefix}modal-bg: #{$modal-content-bg};\n --#{$prefix}modal-border-color: #{$modal-content-border-color};\n --#{$prefix}modal-border-width: #{$modal-content-border-width};\n --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n // scss-docs-end modal-css-vars\n\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--#{$prefix}modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--#{$prefix}modal-margin);\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: var(--#{$prefix}modal-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}modal-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n @include border-radius(var(--#{$prefix}modal-border-radius));\n @include box-shadow(var(--#{$prefix}modal-box-shadow));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n // scss-docs-start modal-backdrop-css-vars\n --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n // scss-docs-end modal-backdrop-css-vars\n\n @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: var(--#{$prefix}modal-header-padding);\n border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);\n @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n .btn-close {\n padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);\n margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * .5);\n background-color: var(--#{$prefix}modal-footer-bg);\n border-top: var(--#{$prefix}modal-footer-border-width) solid var(--#{$prefix}modal-footer-border-color);\n @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: calc(var(--#{$prefix}modal-footer-gap) * .5); // Todo in v6: replace with gap on parent class\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n .modal {\n --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n }\n\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: var(--#{$prefix}modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n\n .modal-sm {\n --#{$prefix}modal-width: #{$modal-sm};\n }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-lg};\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-xl};\n }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header,\n .modal-footer {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n // scss-docs-start tooltip-css-vars\n --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n --#{$prefix}tooltip-margin: #{$tooltip-margin};\n @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n --#{$prefix}tooltip-color: #{$tooltip-color};\n --#{$prefix}tooltip-bg: #{$tooltip-bg};\n --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n // scss-docs-end tooltip-css-vars\n\n z-index: var(--#{$prefix}tooltip-zindex);\n display: block;\n padding: var(--#{$prefix}tooltip-arrow-height);\n margin: var(--#{$prefix}tooltip-margin);\n @include deprecate(\"`$tooltip-margin`\", \"v5\", \"v5.x\", true);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}tooltip-font-size));\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: var(--#{$prefix}tooltip-opacity); }\n\n .tooltip-arrow {\n display: block;\n width: var(--#{$prefix}tooltip-arrow-width);\n height: var(--#{$prefix}tooltip-arrow-height);\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-top-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n left: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n right: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-right-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-bottom-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n right: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n left: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-left-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: var(--#{$prefix}tooltip-max-width);\n padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n color: var(--#{$prefix}tooltip-color);\n text-align: center;\n background-color: var(--#{$prefix}tooltip-bg);\n @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n}\n",".popover {\n // scss-docs-start popover-css-vars\n --#{$prefix}popover-zindex: #{$zindex-popover};\n --#{$prefix}popover-max-width: #{$popover-max-width};\n @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n --#{$prefix}popover-bg: #{$popover-bg};\n --#{$prefix}popover-border-width: #{$popover-border-width};\n --#{$prefix}popover-border-color: #{$popover-border-color};\n --#{$prefix}popover-border-radius: #{$popover-border-radius};\n --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n --#{$prefix}popover-header-color: #{$popover-header-color};\n --#{$prefix}popover-header-bg: #{$popover-header-bg};\n --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n --#{$prefix}popover-body-color: #{$popover-body-color};\n --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n // scss-docs-end popover-css-vars\n\n z-index: var(--#{$prefix}popover-zindex);\n display: block;\n max-width: var(--#{$prefix}popover-max-width);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}popover-font-size));\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: var(--#{$prefix}popover-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-radius(var(--#{$prefix}popover-border-radius));\n @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n .popover-arrow {\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n height: var(--#{$prefix}popover-arrow-height);\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n bottom: 0;\n border-top-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n bottom: var(--#{$prefix}popover-border-width);\n border-top-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n > .popover-arrow {\n left: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n left: 0;\n border-right-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n left: var(--#{$prefix}popover-border-width);\n border-right-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n top: 0;\n border-bottom-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n top: var(--#{$prefix}popover-border-width);\n border-bottom-color: var(--#{$prefix}popover-bg);\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n margin-left: calc(-.5 * var(--#{$prefix}popover-arrow-width)); // stylelint-disable-line function-disallowed-list\n content: \"\";\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start {\n > .popover-arrow {\n right: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n right: 0;\n border-left-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n right: var(--#{$prefix}popover-border-width);\n border-left-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size(var(--#{$prefix}popover-header-font-size));\n color: var(--#{$prefix}popover-header-color);\n background-color: var(--#{$prefix}popover-header-bg);\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n color: var(--#{$prefix}popover-body-color);\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n.carousel-dark {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--#{$prefix}spinner-width);\n height: var(--#{$prefix}spinner-height);\n vertical-align: var(--#{$prefix}spinner-vertical-align);\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n // scss-docs-start spinner-border-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-border-width: #{$spinner-border-width};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-border;\n // scss-docs-end spinner-border-css-vars\n\n border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n // scss-docs-start spinner-border-sm-css-vars\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n // scss-docs-start spinner-grow-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-grow;\n // scss-docs-end spinner-grow-css-vars\n\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n }\n }\n}\n","// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n // scss-docs-start offcanvas-css-vars\n --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n --#{$prefix}offcanvas-color: #{$offcanvas-color};\n --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @extend %offcanvas-css-vars;\n }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @include media-breakpoint-down($next) {\n position: fixed;\n bottom: 0;\n z-index: var(--#{$prefix}offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--#{$prefix}offcanvas-color);\n visibility: hidden;\n background-color: var(--#{$prefix}offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n @include transition(transform $offcanvas-transition-duration ease-in-out);\n\n &.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(-100%);\n }\n\n &.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(100%);\n }\n\n &.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(-100%);\n }\n\n &.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(100%);\n }\n\n &.showing,\n &.show:not(.hiding) {\n transform: none;\n }\n\n &.showing,\n &.hiding,\n &.show {\n visibility: visible;\n }\n }\n\n @if not ($infix == \"\") {\n @include media-breakpoint-up($next) {\n --#{$prefix}offcanvas-height: auto;\n --#{$prefix}offcanvas-border-width: 0;\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n }\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n .btn-close {\n padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: $offcanvas-title-line-height;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n overflow-y: auto;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value !important; // stylelint-disable-line declaration-no-important\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["bootstrap.css","../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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M,iCAAA;EKlQJ,gBFimBkB;EEhmBlB,gBFglB0B;ANjB9B;AGheI;EKpGF;IL6QM,eAAA;EH2TN;AACF;;AQzkBE;ELsQM,iCAAA;EKlQJ,gBFimBkB;EEhmBlB,gBFglB0B;ANN9B;AG3eI;EKpGF;IL6QM,iBAAA;EHsUN;AACF;;AQplBE;ELsQM,iCAAA;EKlQJ,gBFimBkB;EEhmBlB,gBFglB0B;ANK9B;AGtfI;EKpGF;IL6QM,eAAA;EHiVN;AACF;;AQ/lBE;ELsQM,iCAAA;EKlQJ,gBFimBkB;EEhmBlB,gBFglB0B;ANgB9B;AGjgBI;EKpGF;IL6QM,iBAAA;EH4VN;AACF;;AQllBA;ECvDE,eAAA;EACA,gBAAA;AT6oBF;;AQllBA;EC5DE,eAAA;EACA,gBAAA;ATkpBF;;AQplBA;EACE,qBAAA;ARulBF;AQrlBE;EACE,oBFwmB0B;ANjB9B;;AQ7kBA;ELoNM,kBALI;EK7MR,yBAAA;ARglBF;;AQ5kBA;EACE,mBF2TO;EH9GH,kBALI;AHwYV;AQ7kBE;EACE,gBAAA;AR+kBJ;;AQ3kBA;EACE,iBAAA;EACA,mBFiTO;EH9GH,kBALI;EK5LR,cFtFS;ANoqBX;AQ5kBE;EACE,aAAA;AR8kBJ;;AU9qBA;ECIE,eAAA;EAGA,YAAA;AX4qBF;;AU7qBA;EACE,gBJihDkC;EIhhDlC,mCJihDkC;EIhhDlC,2DAAA;EHGE,sCAAA;EIRF,eAAA;EAGA,YAAA;AXqrBF;;AUvqBA;EAEE,qBAAA;AVyqBF;;AUtqBA;EACE,qBAAA;EACA,cAAA;AVyqBF;;AUtqBA;EP+PM,kBALI;EOxPR,gCJogDkC;AN31BpC;;AY3sBE;;;;;;;ECHA,qBAAA;EACA,gBAAA;EACA,WAAA;EACA,6CAAA;EACA,4CAAA;EACA,kBAAA;EACA,iBAAA;AbwtBF;;AclqBI;EF5CE;IACE,gBNqde;EN6PrB;AACF;AcxqBI;EF5CE;IACE,gBNqde;ENkQrB;AACF;Ac7qBI;EF5CE;IACE,gBNqde;ENuQrB;AACF;AclrBI;EF5CE;IACE,iBNqde;EN4QrB;AACF;AcvrBI;EF5CE;IACE,iBNqde;ENiRrB;AACF;AetvBE;EC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;EjB41DJ;AACF;Acj7DI;EGkFA;IACE,gBAAA;IACA,iCAAA;EjBk2DJ;AACF;Acv7DI;EGkFA;IACE,gBAAA;IACA,iCAAA;EjBw2DJ;AACF;AmBrgEA;EACE,qBbs0BsC;ANisCxC;;AmB9/DA;EACE,oDAAA;EACA,uDAAA;EACA,gBAAA;EhBoRI,kBALI;EgB3QR,gBbukB4B;ANw7C9B;;AmB3/DA;EACE,kDAAA;EACA,qDAAA;EhB0QI,kBALI;AH0vDV;;AmB3/DA;EACE,mDAAA;EACA,sDAAA;EhBoQI,mBALI;AHgwDV;;AoB5hEA;EACE,mBd8zBsC;EH9hBlC,kBALI;EiBvRR,gCd2oB4B;ANk5C9B;;AqBliEA;EACE,cAAA;EACA,WAAA;EACA,yBAAA;ElB8RI,eALI;EkBtRR,gBf0kB4B;EezkB5B,gBfilB4B;EehlB5B,2Bf21BsC;Ee11BtC,2Cfq1BsC;Eep1BtC,4BAAA;EACA,2DAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EdGE,uBAAA;EeHE,wEDMJ;ArBgiEF;AsBliEM;EDhBN;ICiBQ,gBAAA;EtBqiEN;AACF;AqBniEE;EACE,gBAAA;ArBqiEJ;AqBniEI;EACE,eAAA;ArBqiEN;AqBhiEE;EACE,2Bfq0BoC;Eep0BpC,2Cf+zBoC;Ee9zBpC,qBf60BoC;Ee50BpC,UAAA;EAKE,kDfqtB0B;ANy0ChC;AqBvhEE;EAEE,aAAA;ArBwhEJ;AqBnhEE;EACE,cAAA;EACA,UAAA;ArBqhEJ;AqBjhEE;EACE,gCfuzBoC;EerzBpC,UAAA;ArBkhEJ;AqBrhEE;EACE,gCfuzBoC;EerzBpC,UAAA;ArBkhEJ;AqB1gEE;EAEE,oDfyxBoC;EetxBpC,UAAA;ArBygEJ;AqBrgEE;EACE,yBAAA;EACA,0BAAA;EACA,2BfiqB0B;EejqB1B,0BfiqB0B;EehqB1B,2BfixBoC;EiBn2BtC,uCjBogCgC;Eeh7B9B,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,+Cf6qB0B;Ee5qB1B,gBAAA;EC7EE,6ID8EF;EC9EE,qID8EF;ArBugEJ;AqBnhEE;EACE,yBAAA;EACA,0BAAA;EACA,2BfiqB0B;EejqB1B,0BfiqB0B;EehqB1B,2BfixBoC;EiBn2BtC,uCjBogCgC;Eeh7B9B,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,+Cf6qB0B;Ee5qB1B,gBAAA;EC7EE,qID8EF;ArBugEJ;AsBjlEM;ED8DJ;IC7DM,wBAAA;IAAA,gBAAA;EtBolEN;EqBvhEA;IC7DM,gBAAA;EtBolEN;AACF;AqBzgEE;EACE,wCfu6B8B;ANomClC;AqB5gEE;EACE,wCfu6B8B;ANomClC;;AqBlgEA;EACE,cAAA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBf4e4B;Ee3e5B,2BfswBsC;EerwBtC,6BAAA;EACA,yBAAA;EACA,sCAAA;ArBqgEF;AqBngEE;EACE,UAAA;ArBqgEJ;AqBlgEE;EAEE,gBAAA;EACA,eAAA;ArBmgEJ;;AqBx/DA;EACE,mEfuvBsC;EetvBtC,uBAAA;ElB2JI,mBALI;EI7QN,sBAAA;APonEJ;AqBz/DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfinB0B;EejnB1B,yBfinB0B;AN04C9B;AqB9/DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfinB0B;EejnB1B,yBfinB0B;AN04C9B;;AqBv/DA;EACE,iEf2uBsC;Ee1uBtC,oBAAA;ElB8II,kBALI;EI7QN,qBAAA;APgoEJ;AqBx/DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfwmB0B;EexmB1B,uBfwmB0B;ANk5C9B;AqB7/DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfwmB0B;EexmB1B,uBfwmB0B;ANk5C9B;;AqBl/DE;EACE,oEfwtBoC;AN6xCxC;AqBl/DE;EACE,mEfqtBoC;AN+xCxC;AqBj/DE;EACE,iEfktBoC;ANiyCxC;;AqB9+DA;EACE,WfgtBsC;Ee/sBtC,gEfysBsC;EexsBtC,iBf8jB4B;ANm7C9B;AqB/+DE;EACE,eAAA;ArBi/DJ;AqB9+DE;EACE,oBAAA;Ed3KA,uBAAA;AP4pEJ;AqB7+DE;Ed/KE,uBAAA;AP+pEJ;AqB5+DE;EAAoB,+Df0rBkB;ANqzCxC;AqB9+DE;EAAoB,6Df0rBkB;ANuzCxC;;AwBnrEA;EACE,wPAAA;EAEA,cAAA;EACA,WAAA;EACA,0CAAA;EACA,uCAAA;ErB0RI,eALI;EqBlRR,gBlBskB4B;EkBrkB5B,gBlB6kB4B;EkB5kB5B,2BlBu1BsC;EkBt1BtC,2ClBi1BsC;EkBh1BtC,mFAAA;EACA,4BAAA;EACA,yClB87BkC;EkB77BlC,0BlB87BkC;EkB77BlC,2DAAA;EjBHE,uBAAA;EeHE,wEESJ;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AxBmrEF;AsBzrEM;EEfN;IFgBQ,gBAAA;EtB4rEN;AACF;AwBtrEE;EACE,qBlBo1BoC;EkBn1BpC,UAAA;EAKE,kDlB+7B4B;ANqvClC;AwBhrEE;EAEE,sBlB6sB0B;EkB5sB1B,sBAAA;AxBirEJ;AwB9qEE;EAEE,oDlBqzBoC;AN03CxC;AwB1qEE;EACE,kBAAA;EACA,uCAAA;AxB4qEJ;;AwBxqEA;EACE,oBlBssB4B;EkBrsB5B,uBlBqsB4B;EkBpsB5B,oBlBqsB4B;EH7dxB,mBALI;EI7QN,sBAAA;APutEJ;;AwBxqEA;EACE,mBlBksB4B;EkBjsB5B,sBlBisB4B;EkBhsB5B,kBlBisB4B;EHjexB,kBALI;EI7QN,qBAAA;AP+tEJ;;AwBtqEI;EACE,wPAAA;AxByqEN;;AyBlvEA;EACE,cAAA;EACA,kBnBo4BwC;EmBn4BxC,mBnBo4BwC;EmBn4BxC,uBnBo4BwC;ANi3C1C;AyBnvEE;EACE,WAAA;EACA,mBAAA;AzBqvEJ;;AyBjvEA;EACE,oBnB03BwC;EmBz3BxC,eAAA;EACA,iBAAA;AzBovEF;AyBlvEE;EACE,YAAA;EACA,oBAAA;EACA,cAAA;AzBovEJ;;AyBhvEA;EACE,6CAAA;EAEA,UnB02BwC;EmBz2BxC,WnBy2BwC;EmBx2BxC,kBAAA;EACA,mBAAA;EACA,yCAAA;EACA,+CAAA;EACA,4BAAA;EACA,2BAAA;EACA,wBAAA;EACA,2DnB42BwC;EmB32BxC,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EACA,iCAAA;EAAA,mBAAA;EAAA,yBAAA;AzBkvEF;AyB/uEE;ElB1BE,qBAAA;AP4wEJ;AyB9uEE;EAEE,kBnBm2BsC;AN44C1C;AyB5uEE;EACE,uBnB01BsC;ANo5C1C;AyB3uEE;EACE,qBnBszBoC;EmBrzBpC,UAAA;EACA,kDnBksB4B;AN2iDhC;AyB1uEE;EACE,yBnB3BM;EmB4BN,qBnB5BM;ANwwEV;AyB1uEI;EAII,uPAAA;AzByuER;AyBruEI;EAII,+JAAA;AzBouER;AyB/tEE;EACE,yBnBhDM;EmBiDN,qBnBjDM;EmBsDJ,iPAAA;AzB6tEN;AyBztEE;EACE,oBAAA;EACA,YAAA;EACA,YnBk0BuC;ANy5C3C;AyBptEI;EACE,eAAA;EACA,YnByzBqC;AN65C3C;;AyBxsEA;EACE,mBnBozBgC;ANu5ClC;AyBzsEE;EACE,2KAAA;EAEA,UnB8yB8B;EmB7yB9B,mBAAA;EACA,0CAAA;EACA,gCAAA;ElBhHA,kBAAA;EeHE,iDGqHF;AzB0sEJ;AsB3zEM;EGyGJ;IHxGM,gBAAA;EtB8zEN;AACF;AyB7sEI;EACE,6JAAA;AzB+sEN;AyB5sEI;EACE,iCnB6yB4B;EmBxyB1B,0JAAA;AzB0sER;AyBrsEE;EACE,oBnBwxB8B;EmBvxB9B,eAAA;AzBusEJ;AyBrsEI;EACE,oBAAA;EACA,cAAA;AzBusEN;;AyBlsEA;EACE,qBAAA;EACA,kBnBswBgC;AN+7ClC;;AyBlsEA;EACE,kBAAA;EACA,sBAAA;EACA,oBAAA;AzBqsEF;AyBjsEI;EACE,oBAAA;EACA,YAAA;EACA,anBunBwB;AN4kD9B;;AyB5rEI;EACE,iLAAA;AzB+rEN;;A0Bj3EA;EACE,WAAA;EACA,cAAA;EACA,UAAA;EACA,6BAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;A1Bo3EF;A0Bl3EE;EACE,UAAA;A1Bo3EJ;A0Bh3EI;EAA0B,kEpB6+Ba;ANs4C3C;A0Bl3EI;EAA0B,kEpB4+Ba;ANy4C3C;A0Bl3EE;EACE,SAAA;A1Bo3EJ;A0Bj3EE;EACE,WpB89BuC;EoB79BvC,YpB69BuC;EoB59BvC,oBAAA;EHzBF,yBjBkCQ;EoBPN,SpB69BuC;ECz+BvC,mBAAA;EeHE,oHIkBF;EJlBE,4GIkBF;EACA,wBAAA;EAAA,gBAAA;A1Bk3EJ;AsBj4EM;EIMJ;IJLM,wBAAA;IAAA,gBAAA;EtBo4EN;AACF;A0Br3EI;EHjCF,yBjB6/ByC;AN45C3C;A0Bn3EE;EACE,WpBu8B8B;EoBt8B9B,cpBu8B8B;EoBt8B9B,kBAAA;EACA,epBs8B8B;EoBr8B9B,uCpBs8B8B;EoBr8B9B,yBAAA;EnB7BA,mBAAA;APm5EJ;A0Bj3EE;EACE,WpBm8BuC;EoBl8BvC,YpBk8BuC;EiBr/BzC,yBjBkCQ;EoBmBN,SpBm8BuC;ECz+BvC,mBAAA;EeHE,iHI4CF;EJ5CE,4GI4CF;EACA,qBAAA;EAAA,gBAAA;A1Bk3EJ;AsB35EM;EIiCJ;IJhCM,qBAAA;IAAA,gBAAA;EtB85EN;AACF;A0Br3EI;EH3DF,yBjB6/ByC;ANs7C3C;A0Bn3EE;EACE,WpB66B8B;EoB56B9B,cpB66B8B;EoB56B9B,kBAAA;EACA,epB46B8B;EoB36B9B,uCpB46B8B;EoB36B9B,yBAAA;EnBvDA,mBAAA;AP66EJ;A0Bj3EE;EACE,oBAAA;A1Bm3EJ;A0Bj3EI;EACE,2CpB+6BqC;ANo8C3C;A0Bh3EI;EACE,2CpB26BqC;ANu8C3C;;A2Bz8EA;EACE,kBAAA;A3B48EF;A2B18EE;EACE,kBAAA;EACA,2BrBowB0B;EqBnwB1B,4BrBmwB0B;EqBlwB1B,+EAAA;EACA,erB2gCoC;EqB1gCpC,WAAA;EACA,2CrBw1BoC;EC/0BpC,uBAAA;APo8EJ;A2Bz8EE;;;EAGE,uDrB4/BoC;EqB3/BpC,iBrB4/BoC;AN+8CxC;A2Bx8EE;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,qBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;EACA,gDAAA;EACA,qBAAA;ELlBE,gEKmBF;A3B08EJ;AsBz9EM;EKCJ;ILAM,gBAAA;EtB49EN;AACF;A2B58EE;;EAEE,qBAAA;A3B88EJ;A2B58EI;EACE,kBAAA;A3B+8EN;A2Bh9EI;;EACE,kBAAA;A3B+8EN;A2B58EI;EAEE,qBrBi+BkC;EqBh+BlC,wBrBi+BkC;AN8+CxC;A2Bl9EI;;;EAEE,qBrBi+BkC;EqBh+BlC,wBrBi+BkC;AN8+CxC;A2B58EI;;EACE,qBrB49BkC;EqB39BlC,wBrB49BkC;ANm/CxC;A2B38EE;EACE,qBrBs9BoC;EqBr9BpC,wBrBs9BoC;ANu/CxC;A2Bt8EI;EACE,arBg9BkC;EqB/8BlC,8DrBg9BkC;AN2/CxC;A2B78EI;;;;EACE,arBg9BkC;EqB/8BlC,8DrBg9BkC;AN2/CxC;A2Bt8EI;EACE,arBy8BkC;EqBx8BlC,8DrBy8BkC;AN+/CxC;A2Bn8EI;EACE,sCAAA;A3Bq8EN;A2Bj8EE;EACE,crBzEO;AN4gFX;;A4BthFA;EACE,kBAAA;EACA,aAAA;EACA,eAAA;EACA,oBAAA;EACA,WAAA;A5ByhFF;A4BvhFE;;;EAGE,kBAAA;EACA,cAAA;EACA,SAAA;EACA,YAAA;A5ByhFJ;A4BrhFE;;;EAGE,UAAA;A5BuhFJ;A4BjhFE;EACE,kBAAA;EACA,UAAA;A5BmhFJ;A4BjhFI;EACE,UAAA;A5BmhFN;;A4BxgFA;EACE,aAAA;EACA,mBAAA;EACA,yBAAA;EzBoPI,eALI;EyB7OR,gBtBiiB4B;EsBhiB5B,gBtBwiB4B;EsBviB5B,2BtBkzBsC;EsBjzBtC,kBAAA;EACA,mBAAA;EACA,uCtBy4BsC;EsBx4BtC,2DAAA;ErBtCE,uBAAA;APkjFJ;;A4BlgFA;;;;EAIE,oBAAA;EzB8NI,kBALI;EI7QN,qBAAA;AP2jFJ;;A4BlgFA;;;;EAIE,uBAAA;EzBqNI,mBALI;EI7QN,sBAAA;APokFJ;;A4BlgFA;;EAEE,mBAAA;A5BqgFF;;A4Bx/EI;;;;ErBjEA,0BAAA;EACA,6BAAA;APgkFJ;A4Bv/EI;;;;ErB1EA,0BAAA;EACA,6BAAA;APukFJ;A4Bj/EE;EACE,8CAAA;ErB1EA,yBAAA;EACA,4BAAA;AP8jFJ;A4Bj/EE;;ErB9EE,yBAAA;EACA,4BAAA;APmkFJ;;A6B3lFE;EACE,aAAA;EACA,WAAA;EACA,mBvBsyBoC;EH9hBlC,kBALI;E0BhQN,6BvB0gCqB;ANmlDzB;;A6B1lFE;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,uBAAA;EACA,kBAAA;E1B2PE,mBALI;E0BnPN,WvB6/BqB;EuB5/BrB,mCvB4/BqB;ECvhCrB,sCAAA;APwnFJ;;A6BxlFI;;;;EAEE,cAAA;A7B6lFN;;A6B5oFI;EAqDE,+BvB++BmB;EuB5+BjB,oCvB6zBgC;EuB5zBhC,2PAAA;EACA,4BAAA;EACA,2DAAA;EACA,gEAAA;A7BylFR;A6BtlFM;EACE,+BvBo+BiB;EuBn+BjB,2DvBm+BiB;ANqnDzB;;A6BzpFI;EA0EI,oCvB2yBgC;EuB1yBhC,kFAAA;A7BmlFR;;A6B9pFI;EAkFE,+BvBk9BmB;AN8nDzB;A6B7kFQ;EAEE,mQAAA;EACA,uBvBy3B8B;EuBx3B9B,+DAAA;EACA,2EAAA;A7B8kFV;A6B1kFM;EACE,+BvBq8BiB;EuBp8BjB,2DvBo8BiB;ANwoDzB;;A6B5qFI;EAwGI,yCAAA;A7BwkFR;;A6BhrFI;EA+GE,+BvBq7BmB;ANgpDzB;A6BnkFM;EACE,wCvBk7BiB;ANmpDzB;A6BlkFM;EACE,2DvB86BiB;ANspDzB;A6BjkFM;EACE,6BvB06BiB;ANypDzB;;A6B9jFI;EACE,kBAAA;A7BikFN;;A6BjsFI;;;;;EA0IM,UAAA;A7B+jFV;;A6BrrFE;EACE,aAAA;EACA,WAAA;EACA,mBvBsyBoC;EH9hBlC,kBALI;E0BhQN,4BvB0gCqB;AN6qDzB;;A6BprFE;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,uBAAA;EACA,kBAAA;E1B2PE,mBALI;E0BnPN,WvB6/BqB;EuB5/BrB,kCvB4/BqB;ECvhCrB,sCAAA;APktFJ;;A6BlrFI;;;;EAEE,cAAA;A7BurFN;;A6BtuFI;EAqDE,8BvB++BmB;EuB5+BjB,oCvB6zBgC;EuB5zBhC,4UAAA;EACA,4BAAA;EACA,2DAAA;EACA,gEAAA;A7BmrFR;A6BhrFM;EACE,8BvBo+BiB;EuBn+BjB,0DvBm+BiB;AN+sDzB;;A6BnvFI;EA0EI,oCvB2yBgC;EuB1yBhC,kFAAA;A7B6qFR;;A6BxvFI;EAkFE,8BvBk9Bm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vOQ;EAOI,0BAAA;AtEwvOZ;;AsE/vOQ;EAOI,uBAAA;AtE4vOZ;;AsEnwOQ;EAOI,2BAAA;AtEgwOZ;;AsEvwOQ;EAOI,sBAAA;AtEowOZ;;AsE3wOQ;EAOI,sBAAA;AtEwwOZ;;AsE/wOQ;EAOI,sBAAA;AtE4wOZ;;AsEnxOQ;EAOI,uBAAA;AtEgxOZ;;AsEvxOQ;EAOI,uBAAA;AtEoxOZ;;AsE3xOQ;EAOI,2BAAA;AtEwxOZ;;AsE/xOQ;EAOI,wBAAA;AtE4xOZ;;AsEnyOQ;EAOI,4BAAA;AtEgyOZ;;AsEvyOQ;EAOI,yBAAA;AtEoyOZ;;AsE3yOQ;EAOI,8BAAA;AtEwyOZ;;AsE/yOQ;EAOI,iCAAA;AtE4yOZ;;AsEnzOQ;EAOI,sCAAA;AtEgzOZ;;AsEvzOQ;EAOI,yCAAA;AtEozOZ;;AsE3zOQ;EAOI,uBAAA;AtEwzOZ;;AsE/zOQ;EAOI,uBAAA;AtE4zOZ;;AsEn0OQ;EAOI,yBAAA;AtEg0OZ;;AsEv0OQ;EAOI,yBAAA;AtEo0OZ;;AsE30OQ;EAOI,0BAAA;AtEw0OZ;;AsE/0OQ;EAOI,4BAAA;AtE40OZ;;AsEn1OQ;EAOI,kCAAA;AtEg1OZ;;AsEv1OQ;EAOI,sCAAA;AtEo1OZ;;AsE31OQ;EAOI,oCAAA;AtEw1OZ;;AsE/1OQ;EAOI,kCAAA;AtE41OZ;;AsEn2OQ;EAOI,yCAAA;AtEg2OZ;;AsEv2OQ;EAOI,wCAAA;AtEo2OZ;;AsE32OQ;EAOI,wCAAA;AtEw2OZ;;AsE/2OQ;EAOI,kCAAA;AtE42OZ;;AsEn3OQ;EAOI,gCAAA;AtEg3OZ;;AsEv3OQ;EAOI,8BAAA;AtEo3OZ;;AsE33OQ;EAOI,gCAAA;AtEw3OZ;;AsE/3OQ;EAOI,+BAAA;AtE43OZ;;AsEn4OQ;EAOI,oCAAA;AtEg4OZ;;AsEv4OQ;EAOI,kCAAA;AtEo4OZ;;AsE34OQ;EAOI,gCAAA;AtEw4OZ;;AsE/4OQ;EAOI,uCAAA;AtE44OZ;;AsEn5OQ;EAOI,sCAAA;AtEg5OZ;;AsEv5OQ;EAOI,iCAAA;AtEo5OZ;;AsE35OQ;EAOI,2BAAA;AtEw5OZ;;AsE/5OQ;EAOI,iCAAA;AtE45OZ;;AsEn6OQ;EAOI,+BAAA;AtEg6OZ;;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SV;EsE1pSM;IAOI,iCAAA;EtEspSV;EsE7pSM;IAOI,sCAAA;EtEypSV;EsEhqSM;IAOI,yCAAA;EtE4pSV;EsEnqSM;IAOI,uBAAA;EtE+pSV;EsEtqSM;IAOI,uBAAA;EtEkqSV;EsEzqSM;IAOI,yBAAA;EtEqqSV;EsE5qSM;IAOI,yBAAA;EtEwqSV;EsE/qSM;IAOI,0BAAA;EtE2qSV;EsElrSM;IAOI,4BAAA;EtE8qSV;EsErrSM;IAOI,kCAAA;EtEirSV;EsExrSM;IAOI,sCAAA;EtEorSV;EsE3rSM;IAOI,oCAAA;EtEurSV;EsE9rSM;IAOI,kCAAA;EtE0rSV;EsEjsSM;IAOI,yCAAA;EtE6rSV;EsEpsSM;IAOI,wCAAA;EtEgsSV;EsEvsSM;IAOI,wCAAA;EtEmsSV;EsE1sSM;IAOI,kCAAA;EtEssSV;EsE7sSM;IAOI,gCAAA;EtEysSV;EsEhtSM;IAOI,8BAAA;EtE4sSV;EsEntSM;IAOI,gCAAA;EtE+sSV;EsEttSM;IAOI,+BAAA;EtEktSV;EsEztSM;IAOI,oCAAA;EtEqtSV;EsE5tSM;IAOI,kCAAA;EtEwtSV;EsE/tSM;IAOI,gCAAA;EtE2tSV;EsEluSM;IAOI,uCAAA;EtE8tSV;EsEruSM;IAOI,sCAAA;EtEiuSV;EsExuSM;IAOI,iCAAA;EtEouSV;EsE3uSM;IAOI,2BAAA;EtEuuSV;EsE9uSM;IAOI,iCAAA;EtE0uSV;EsEjvSM;IAOI,+BAAA;EtE6uSV;EsEpvSM;IAOI,6BAAA;EtEgvSV;EsEvvSM;IAOI,+BAAA;EtEmvSV;EsE1vSM;IAOI,8BAAA;EtEsvSV;EsE7vSM;IAOI,oBAAA;EtEyvSV;EsEhwSM;IAOI,mBAAA;EtE4vSV;EsEnwSM;IAOI,mBAAA;EtE+vSV;EsEtwSM;IAOI,mBAAA;EtEkwSV;EsEzwSM;IAOI,mBAAA;EtEqwSV;EsE5wSM;IAOI,mBAAA;EtEwwSV;EsE/wSM;IAOI,mBAAA;EtE2wSV;EsElxSM;IAOI,mBAAA;EtE8wSV;EsErxSM;IAOI,oBAAA;EtEixSV;EsExxSM;IAOI,0BAAA;EtEoxSV;EsE3xSM;IAOI,yBAAA;EtEuxSV;EsE9xSM;I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","file":"bootstrap.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color, inherit);\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: var(--bs-border-width);\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + var(--bs-border-width));\n padding-bottom: calc(0.375rem + var(--bs-border-width));\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + var(--bs-border-width));\n padding-bottom: calc(0.5rem + var(--bs-border-width));\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + var(--bs-border-width));\n padding-bottom: calc(0.25rem + var(--bs-border-width));\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n background-clip: padding-box;\n border: var(--bs-border-width) solid var(--bs-border-color);\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::-webkit-datetime-edit {\n display: block;\n padding: 0;\n}\n.form-control::placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control:disabled {\n background-color: var(--bs-form-control-disabled-bg);\n opacity: 1;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: transparent;\n border: solid transparent;\n border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: var(--bs-form-control-disabled-bg);\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n[data-bs-theme=dark] .form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n --bs-form-check-bg: var(--bs-form-control-bg);\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: var(--bs-form-check-bg);\n background-image: var(--bs-form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: var(--bs-border-width) solid var(--bs-border-color);\n appearance: none;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n width: 2em;\n margin-left: -2.5em;\n background-image: var(--bs-form-switch-bg);\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-tertiary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-tertiary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating::before:not(.form-control:disabled) {\n position: absolute;\n top: var(--bs-border-width);\n left: var(--bs-border-width);\n width: calc(100% - (calc(calc(0.375em + 0.1875rem) + calc(0.75em + 0.375rem))));\n height: 1.875em;\n content: \"\";\n background-color: var(--bs-form-control-bg);\n border-radius: 0.375rem;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: var(--bs-border-width) solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: var(--bs-border-width) 0;\n}\n.form-floating > .form-control:disabled ~ label {\n color: #6c757d;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-tertiary-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: calc(var(--bs-border-width) * -1);\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-success-text);\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-success);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: var(--bs-success);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: var(--bs-success);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: var(--bs-success);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: var(--bs-success);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: var(--bs-success);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: var(--bs-success-text);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: var(--bs-success-text);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-danger-text);\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-danger);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: var(--bs-danger);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: var(--bs-danger);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: var(--bs-danger);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: var(--bs-danger);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: var(--bs-danger);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: var(--bs-danger-text);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: var(--bs-danger-text);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: var(--bs-border-width);\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: var(--bs-body-color);\n --bs-dropdown-bg: var(--bs-body-bg);\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: var(--bs-border-width);\n --bs-dropdown-inner-border-radius: calc(0.375rem - var(--bs-border-width));\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-dropdown-link-color: var(--bs-body-color);\n --bs-dropdown-link-hover-color: var(--bs-body-color);\n --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar {\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-title-color: ;\n --bs-card-subtitle-color: ;\n --bs-card-border-width: var(--bs-border-width);\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: var(--bs-border-radius);\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: var(--bs-body-bg);\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: var(--bs-body-color);\n --bs-accordion-bg: var(--bs-body-bg);\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: var(--bs-border-width);\n --bs-accordion-border-radius: var(--bs-border-radius);\n --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: var(--bs-body-color);\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230a58ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: var(--bs-primary-text);\n --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: var(--bs-body-bg);\n --bs-pagination-border-width: var(--bs-border-width);\n --bs-pagination-border-color: var(--bs-border-color);\n --bs-pagination-border-radius: var(--bs-border-radius);\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n --bs-pagination-hover-border-color: var(--bs-border-color);\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: var(--bs-secondary-bg);\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: var(--bs-secondary-color);\n --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n --bs-pagination-disabled-border-color: var(--bs-border-color);\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n --bs-alert-link-color: inherit;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: var(--bs-primary-text);\n --bs-alert-bg: var(--bs-primary-bg-subtle);\n --bs-alert-border-color: var(--bs-primary-border-subtle);\n --bs-alert-link-color: var(--bs-primary-text);\n}\n\n.alert-secondary {\n --bs-alert-color: var(--bs-secondary-text);\n --bs-alert-bg: var(--bs-secondary-bg-subtle);\n --bs-alert-border-color: var(--bs-secondary-border-subtle);\n --bs-alert-link-color: var(--bs-secondary-text);\n}\n\n.alert-success {\n --bs-alert-color: var(--bs-success-text);\n --bs-alert-bg: var(--bs-success-bg-subtle);\n --bs-alert-border-color: var(--bs-success-border-subtle);\n --bs-alert-link-color: var(--bs-success-text);\n}\n\n.alert-info {\n --bs-alert-color: var(--bs-info-text);\n --bs-alert-bg: var(--bs-info-bg-subtle);\n --bs-alert-border-color: var(--bs-info-border-subtle);\n --bs-alert-link-color: var(--bs-info-text);\n}\n\n.alert-warning {\n --bs-alert-color: var(--bs-warning-text);\n --bs-alert-bg: var(--bs-warning-bg-subtle);\n --bs-alert-border-color: var(--bs-warning-border-subtle);\n --bs-alert-link-color: var(--bs-warning-text);\n}\n\n.alert-danger {\n --bs-alert-color: var(--bs-danger-text);\n --bs-alert-bg: var(--bs-danger-bg-subtle);\n --bs-alert-border-color: var(--bs-danger-border-subtle);\n --bs-alert-link-color: var(--bs-danger-text);\n}\n\n.alert-light {\n --bs-alert-color: var(--bs-light-text);\n --bs-alert-bg: var(--bs-light-bg-subtle);\n --bs-alert-border-color: var(--bs-light-border-subtle);\n --bs-alert-link-color: var(--bs-light-text);\n}\n\n.alert-dark {\n --bs-alert-color: var(--bs-dark-text);\n --bs-alert-bg: var(--bs-dark-bg-subtle);\n --bs-alert-border-color: var(--bs-dark-border-subtle);\n --bs-alert-link-color: var(--bs-dark-text);\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress,\n.progress-stacked {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: var(--bs-secondary-bg);\n --bs-progress-border-radius: var(--bs-border-radius);\n --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: var(--bs-body-color);\n --bs-list-group-bg: var(--bs-body-bg);\n --bs-list-group-border-color: var(--bs-border-color);\n --bs-list-group-border-width: var(--bs-border-width);\n --bs-list-group-border-radius: var(--bs-border-radius);\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: var(--bs-secondary-color);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n --bs-list-group-action-active-color: var(--bs-body-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n --bs-list-group-disabled-color: var(--bs-secondary-color);\n --bs-list-group-disabled-bg: var(--bs-body-bg);\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n --bs-list-group-color: var(--bs-primary-text);\n --bs-list-group-bg: var(--bs-primary-bg-subtle);\n --bs-list-group-border-color: var(--bs-primary-border-subtle);\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n}\n.list-group-item-primary.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-primary-text);\n --bs-list-group-active-border-color: var(--bs-primary-text);\n}\n\n.list-group-item-secondary {\n --bs-list-group-color: var(--bs-secondary-text);\n --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n}\n.list-group-item-secondary.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-secondary-text);\n --bs-list-group-active-border-color: var(--bs-secondary-text);\n}\n\n.list-group-item-success {\n --bs-list-group-color: var(--bs-success-text);\n --bs-list-group-bg: var(--bs-success-bg-subtle);\n --bs-list-group-border-color: var(--bs-success-border-subtle);\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n}\n.list-group-item-success.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-success-text);\n --bs-list-group-active-border-color: var(--bs-success-text);\n}\n\n.list-group-item-info {\n --bs-list-group-color: var(--bs-info-text);\n --bs-list-group-bg: var(--bs-info-bg-subtle);\n --bs-list-group-border-color: var(--bs-info-border-subtle);\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n}\n.list-group-item-info.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-info-text);\n --bs-list-group-active-border-color: var(--bs-info-text);\n}\n\n.list-group-item-warning {\n --bs-list-group-color: var(--bs-warning-text);\n --bs-list-group-bg: var(--bs-warning-bg-subtle);\n --bs-list-group-border-color: var(--bs-warning-border-subtle);\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n}\n.list-group-item-warning.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-warning-text);\n --bs-list-group-active-border-color: var(--bs-warning-text);\n}\n\n.list-group-item-danger {\n --bs-list-group-color: var(--bs-danger-text);\n --bs-list-group-bg: var(--bs-danger-bg-subtle);\n --bs-list-group-border-color: var(--bs-danger-border-subtle);\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n}\n.list-group-item-danger.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-danger-text);\n --bs-list-group-active-border-color: var(--bs-danger-text);\n}\n\n.list-group-item-light {\n --bs-list-group-color: var(--bs-light-text);\n --bs-list-group-bg: var(--bs-light-bg-subtle);\n --bs-list-group-border-color: var(--bs-light-border-subtle);\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n}\n.list-group-item-light.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-light-text);\n --bs-list-group-active-border-color: var(--bs-light-text);\n}\n\n.list-group-item-dark {\n --bs-list-group-color: var(--bs-dark-text);\n --bs-list-group-bg: var(--bs-dark-bg-subtle);\n --bs-list-group-border-color: var(--bs-dark-border-subtle);\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n}\n.list-group-item-dark.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-dark-text);\n --bs-list-group-active-border-color: var(--bs-dark-text);\n}\n\n.btn-close {\n --bs-btn-close-color: #000;\n --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n --bs-btn-close-opacity: 0.5;\n --bs-btn-close-hover-opacity: 0.75;\n --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-btn-close-focus-opacity: 1;\n --bs-btn-close-disabled-opacity: 0.25;\n --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: var(--bs-btn-close-color);\n background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n color: var(--bs-btn-close-color);\n text-decoration: none;\n opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: var(--bs-btn-close-focus-shadow);\n opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n user-select: none;\n opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-border-width: var(--bs-border-width);\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: var(--bs-border-radius);\n --bs-toast-box-shadow: var(--bs-box-shadow);\n --bs-toast-header-color: var(--bs-secondary-color);\n --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-header-border-color: var(--bs-border-color-translucent);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: var(--bs-body-bg);\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: var(--bs-border-width);\n --bs-modal-border-radius: var(--bs-border-radius-lg);\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: var(--bs-border-width);\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: var(--bs-border-width);\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: var(--bs-body-bg);\n --bs-tooltip-bg: var(--bs-emphasis-color);\n --bs-tooltip-border-radius: var(--bs-border-radius);\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: var(--bs-body-bg);\n --bs-popover-border-width: var(--bs-border-width);\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: var(--bs-border-radius-lg);\n --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: var(--bs-secondary-bg);\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: var(--bs-body-color);\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n .carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon,\n[data-bs-theme=dark] .carousel .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: var(--bs-body-color);\n --bs-offcanvas-bg: var(--bs-body-bg);\n --bs-offcanvas-border-width: var(--bs-border-width);\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-offcanvas-transition: transform 0.3s ease-in-out;\n --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text) !important;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-emphasis {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */\n","@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color, inherit);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n$primary-text: $blue-600 !default;\n$secondary-text: $gray-600 !default;\n$success-text: $green-600 !default;\n$info-text: $cyan-700 !default;\n$warning-text: $yellow-700 !default;\n$danger-text: $red-600 !default;\n$light-text: $gray-600 !default;\n$dark-text: $gray-700 !default;\n\n$primary-bg-subtle: $blue-100 !default;\n$secondary-bg-subtle: $gray-100 !default;\n$success-bg-subtle: $green-100 !default;\n$info-bg-subtle: $cyan-100 !default;\n$warning-bg-subtle: $yellow-100 !default;\n$danger-bg-subtle: $red-100 !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n\n$primary-border-subtle: $blue-200 !default;\n$secondary-border-subtle: $gray-200 !default;\n$success-border-subtle: $green-200 !default;\n$info-border-subtle: $cyan-200 !default;\n$warning-border-subtle: $yellow-200 !default;\n$danger-border-subtle: $red-200 !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-emphasis-color: $black !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba(var(--#{$prefix}body-color-rgb), .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba(var(--#{$prefix}body-color-rgb), .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: var(--#{$prefix}secondary-color) !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}form-control-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default; //$gray-400\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc($input-border-width * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.875em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}success-text),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}success),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}danger-text),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}danger),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{rgba($body-color, .75)}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc($pagination-border-width * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc($popover-border-radius - $popover-border-width) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: var(--#{$prefix}table-color);\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: calc($table-border-width * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-active-bg);\n color: var(--#{$prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-hover-bg);\n color: var(--#{$prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Prevent excessive date input height in Webkit\n // https://github.com/twbs/bootstrap/issues/34433\n &::-webkit-datetime-edit {\n display: block;\n padding: 0;\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};\n\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};\n }\n }\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n --#{$prefix}form-check-bg: #{$form-check-input-bg};\n\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: var(--#{$prefix}form-check-bg);\n background-image: var(--#{$prefix}form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};\n\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: var(--#{$prefix}form-switch-bg);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-switch .form-check-input:not(:checked):not(:focus) {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n &::before:not(.form-control:disabled) {\n position: absolute;\n top: $input-border-width;\n left: $input-border-width;\n width: subtract(100%, add($input-height-inner-quarter, $input-height-inner-half));\n height: $form-floating-label-height;\n content: \"\";\n background-color: $input-bg;\n @include border-radius($input-border-radius);\n }\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n\n > .form-control:disabled ~ label {\n color: $form-floating-label-disabled-color;\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: calc($input-border-width * -1); // stylelint-disable-line function-disallowed-list\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity),\n $border-color: $color\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};\n padding-right: $form-select-feedback-icon-padding-end;\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$body-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: none;\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($primary), $primary, 15%))};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n clear: both;\n font-weight: $font-weight-normal;\n color: var(--#{$prefix}dropdown-link-color);\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}dropdown-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n }\n\n &.active,\n &:active {\n color: var(--#{$prefix}dropdown-link-active-color);\n text-decoration: none;\n @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: var(--#{$prefix}dropdown-header-color);\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n // scss-docs-start dropdown-dark-css-vars\n --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n // scss-docs-end dropdown-dark-css-vars\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down($width: $caret-width) {\n border-top: $width solid;\n border-right: $width solid transparent;\n border-bottom: 0;\n border-left: $width solid transparent;\n}\n\n@mixin caret-up($width: $caret-width) {\n border-top: 0;\n border-right: $width solid transparent;\n border-bottom: $width solid;\n border-left: $width solid transparent;\n}\n\n@mixin caret-end($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: 0;\n border-bottom: $width solid transparent;\n border-left: $width solid;\n}\n\n@mixin caret-start($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: $width solid;\n border-bottom: $width solid transparent;\n}\n\n@mixin caret(\n $direction: down,\n $width: $caret-width,\n $spacing: $caret-spacing,\n $vertical-align: $caret-vertical-align\n) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down($width);\n } @else if $direction == up {\n @include caret-up($width);\n } @else if $direction == end {\n @include caret-end($width);\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @include caret-start($width);\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n background: none;\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n background: none;\n border: 0;\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .show > .nav-link,\n .nav-link.active {\n color: var(--#{$prefix}navbar-active-color);\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n line-height: 1;\n color: var(--#{$prefix}navbar-color);\n background-color: transparent; // remove default button style\n border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas {\n // stylelint-disable declaration-no-important\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n @include box-shadow(none);\n @include transition(none);\n // stylelint-enable declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n @include deprecate(\"`.navbar-light`\", \"v5.2.0\", \"v6.0.0\", true);\n}\n\n.navbar-dark {\n // scss-docs-start navbar-dark-css-vars\n --#{$prefix}navbar-color: #{$navbar-dark-color};\n --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n // scss-docs-end navbar-dark-css-vars\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .navbar {\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n // scss-docs-start card-css-vars\n --#{$prefix}card-spacer-y: #{$card-spacer-y};\n --#{$prefix}card-spacer-x: #{$card-spacer-x};\n --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n --#{$prefix}card-title-color: #{$card-title-color};\n --#{$prefix}card-subtitle-color: #{$card-subtitle-color};\n --#{$prefix}card-border-width: #{$card-border-width};\n --#{$prefix}card-border-color: #{$card-border-color};\n --#{$prefix}card-border-radius: #{$card-border-radius};\n --#{$prefix}card-box-shadow: #{$card-box-shadow};\n --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n --#{$prefix}card-cap-bg: #{$card-cap-bg};\n --#{$prefix}card-cap-color: #{$card-cap-color};\n --#{$prefix}card-height: #{$card-height};\n --#{$prefix}card-color: #{$card-color};\n --#{$prefix}card-bg: #{$card-bg};\n --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n --#{$prefix}card-group-margin: #{$card-group-margin};\n // scss-docs-end card-css-vars\n\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: var(--#{$prefix}card-height);\n word-wrap: break-word;\n background-color: var(--#{$prefix}card-bg);\n background-clip: border-box;\n border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n @include border-radius(var(--#{$prefix}card-border-radius));\n @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n margin-bottom: var(--#{$prefix}card-title-spacer-y);\n color: var(--#{$prefix}card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list\n margin-bottom: 0;\n color: var(--#{$prefix}card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: var(--#{$prefix}card-spacer-x);\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:first-child {\n @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0);\n }\n}\n\n.card-footer {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:last-child {\n @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius));\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n border-bottom: 0;\n\n .nav-link.active {\n background-color: var(--#{$prefix}card-bg);\n border-bottom-color: var(--#{$prefix}card-bg);\n }\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--#{$prefix}card-img-overlay-padding);\n @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: var(--#{$prefix}card-group-margin);\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion {\n // scss-docs-start accordion-css-vars\n --#{$prefix}accordion-color: #{$accordion-color};\n --#{$prefix}accordion-bg: #{$accordion-bg};\n --#{$prefix}accordion-transition: #{$accordion-transition};\n --#{$prefix}accordion-border-color: #{$accordion-border-color};\n --#{$prefix}accordion-border-width: #{$accordion-border-width};\n --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};\n --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n @include font-size($font-size-base);\n color: var(--#{$prefix}accordion-btn-color);\n text-align: left; // Reset button style\n background-color: var(--#{$prefix}accordion-btn-bg);\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition(var(--#{$prefix}accordion-transition));\n\n &:not(.collapsed) {\n color: var(--#{$prefix}accordion-active-color);\n background-color: var(--#{$prefix}accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n &::after {\n background-image: var(--#{$prefix}accordion-btn-active-icon);\n transform: var(--#{$prefix}accordion-btn-icon-transform);\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: var(--#{$prefix}accordion-btn-icon-width);\n height: var(--#{$prefix}accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--#{$prefix}accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--#{$prefix}accordion-btn-icon-width);\n @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--#{$prefix}accordion-color);\n background-color: var(--#{$prefix}accordion-bg);\n border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n &:first-of-type {\n @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n }\n }\n}\n\n.accordion-body {\n padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n &,\n &.collapsed {\n @include border-radius(0);\n }\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .accordion-button::after {\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon-dark)};\n }\n }\n}\n",".breadcrumb {\n // scss-docs-start breadcrumb-css-vars\n --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n // scss-docs-end breadcrumb-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n @include font-size(var(--#{$prefix}breadcrumb-font-size));\n list-style: none;\n background-color: var(--#{$prefix}breadcrumb-bg);\n @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n color: var(--#{$prefix}breadcrumb-divider-color);\n content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: var(--#{$prefix}breadcrumb-item-active-color);\n }\n}\n",".pagination {\n // scss-docs-start pagination-css-vars\n --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-color: #{$pagination-color};\n --#{$prefix}pagination-bg: #{$pagination-bg};\n --#{$prefix}pagination-border-width: #{$pagination-border-width};\n --#{$prefix}pagination-border-color: #{$pagination-border-color};\n --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n --#{$prefix}pagination-active-color: #{$pagination-active-color};\n --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n // scss-docs-end pagination-css-vars\n\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n @include font-size(var(--#{$prefix}pagination-font-size));\n color: var(--#{$prefix}pagination-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}pagination-bg);\n border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: var(--#{$prefix}pagination-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}pagination-hover-bg);\n border-color: var(--#{$prefix}pagination-hover-border-color);\n }\n\n &:focus {\n z-index: 3;\n color: var(--#{$prefix}pagination-focus-color);\n background-color: var(--#{$prefix}pagination-focus-bg);\n outline: $pagination-focus-outline;\n box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n }\n\n &.active,\n .active > & {\n z-index: 3;\n color: var(--#{$prefix}pagination-active-color);\n @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n border-color: var(--#{$prefix}pagination-active-border-color);\n }\n\n &.disabled,\n .disabled > & {\n color: var(--#{$prefix}pagination-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}pagination-disabled-bg);\n border-color: var(--#{$prefix}pagination-disabled-border-color);\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n @if $pagination-margin-start == calc($pagination-border-width * -1) {\n &:first-child {\n .page-link {\n @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n } @else {\n // Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}pagination-padding-x: #{$padding-x};\n --#{$prefix}pagination-padding-y: #{$padding-y};\n @include rfs($font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n --#{$prefix}alert-link-color: inherit;\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n color: var(--#{$prefix}alert-link-color);\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert\n@each $state in map-keys($theme-colors) {\n .alert-#{$state} {\n --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text);\n --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);\n --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle);\n --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text);\n }\n}\n// scss-docs-end alert-modifiers\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress,\n.progress-stacked {\n // scss-docs-start progress-css-vars\n --#{$prefix}progress-height: #{$progress-height};\n @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n --#{$prefix}progress-bg: #{$progress-bg};\n --#{$prefix}progress-border-radius: #{$progress-border-radius};\n --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n --#{$prefix}progress-bar-color: #{$progress-bar-color};\n --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n // scss-docs-end progress-css-vars\n\n display: flex;\n height: var(--#{$prefix}progress-height);\n overflow: hidden; // force rounded corners by cropping it\n @include font-size(var(--#{$prefix}progress-font-size));\n background-color: var(--#{$prefix}progress-bg);\n @include border-radius(var(--#{$prefix}progress-border-radius));\n @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--#{$prefix}progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--#{$prefix}progress-bar-bg);\n @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // scss-docs-start list-group-css-vars\n --#{$prefix}list-group-color: #{$list-group-color};\n --#{$prefix}list-group-bg: #{$list-group-bg};\n --#{$prefix}list-group-border-color: #{$list-group-border-color};\n --#{$prefix}list-group-border-width: #{$list-group-border-width};\n --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n --#{$prefix}list-group-action-color: #{$list-group-action-color};\n --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n --#{$prefix}list-group-active-color: #{$list-group-active-color};\n --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n // scss-docs-end list-group-css-vars\n\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > .list-group-item::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: var(--#{$prefix}list-group-action-color);\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--#{$prefix}list-group-action-hover-bg);\n }\n\n &:active {\n color: var(--#{$prefix}list-group-action-active-color);\n background-color: var(--#{$prefix}list-group-action-active-bg);\n }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n color: var(--#{$prefix}list-group-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}list-group-bg);\n border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}list-group-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}list-group-disabled-bg);\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-active-color);\n background-color: var(--#{$prefix}list-group-active-bg);\n border-color: var(--#{$prefix}list-group-active-border-color);\n }\n\n // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n & + .list-group-item {\n border-top-width: 0;\n\n &.active {\n margin-top: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-top-width: var(--#{$prefix}list-group-border-width);\n }\n }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child:not(:last-child) {\n @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n @include border-top-end-radius(0);\n }\n\n &:last-child:not(:first-child) {\n @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: var(--#{$prefix}list-group-border-width);\n border-left-width: 0;\n\n &.active {\n margin-left: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-left-width: var(--#{$prefix}list-group-border-width);\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state in map-keys($theme-colors) {\n .list-group-item-#{$state} {\n --#{$prefix}list-group-color: var(--#{$prefix}#{$state}-text);\n --#{$prefix}list-group-bg: var(--#{$prefix}#{$state}-bg-subtle);\n --#{$prefix}list-group-border-color: var(--#{$prefix}#{$state}-border-subtle);\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n --#{$prefix}list-group-action-hover-color: var(--#{$prefix}emphasis-color);\n --#{$prefix}list-group-action-hover-bg: var(--#{$prefix}#{$state}-border-subtle);\n }\n\n &:active {\n --#{$prefix}list-group-active-color: var(--#{$prefix}emphasis-color);\n --#{$prefix}list-group-active-bg: var(--#{$prefix}#{$state}-text);\n --#{$prefix}list-group-active-border-color: var(--#{$prefix}#{$state}-text);\n }\n }\n }\n}\n// scss-docs-end list-group-modifiers\n","// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n --#{$prefix}btn-close-color: #{$btn-close-color};\n --#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };\n --#{$prefix}btn-close-opacity: #{$btn-close-opacity};\n --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};\n --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};\n --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};\n --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};\n --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};\n\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: var(--#{$prefix}btn-close-color);\n background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: var(--#{$prefix}btn-close-opacity);\n\n // Override <a>'s hover style\n &:hover {\n color: var(--#{$prefix}btn-close-color);\n text-decoration: none;\n opacity: var(--#{$prefix}btn-close-hover-opacity);\n }\n\n &:focus {\n outline: 0;\n box-shadow: var(--#{$prefix}btn-close-focus-shadow);\n opacity: var(--#{$prefix}btn-close-focus-opacity);\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: var(--#{$prefix}btn-close-disabled-opacity);\n }\n}\n\n@mixin btn-close-white() {\n filter: var(--#{$prefix}btn-close-white-filter);\n}\n\n.btn-close-white {\n @include btn-close-white();\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .btn-close {\n @include btn-close-white();\n }\n }\n}\n",".toast {\n // scss-docs-start toast-css-vars\n --#{$prefix}toast-zindex: #{$zindex-toast};\n --#{$prefix}toast-padding-x: #{$toast-padding-x};\n --#{$prefix}toast-padding-y: #{$toast-padding-y};\n --#{$prefix}toast-spacing: #{$toast-spacing};\n --#{$prefix}toast-max-width: #{$toast-max-width};\n @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n --#{$prefix}toast-color: #{$toast-color};\n --#{$prefix}toast-bg: #{$toast-background-color};\n --#{$prefix}toast-border-width: #{$toast-border-width};\n --#{$prefix}toast-border-color: #{$toast-border-color};\n --#{$prefix}toast-border-radius: #{$toast-border-radius};\n --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n --#{$prefix}toast-header-color: #{$toast-header-color};\n --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n // scss-docs-end toast-css-vars\n\n width: var(--#{$prefix}toast-max-width);\n max-width: 100%;\n @include font-size(var(--#{$prefix}toast-font-size));\n color: var(--#{$prefix}toast-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}toast-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n box-shadow: var(--#{$prefix}toast-box-shadow);\n @include border-radius(var(--#{$prefix}toast-border-radius));\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n --#{$prefix}toast-zindex: #{$zindex-toast};\n\n position: absolute;\n z-index: var(--#{$prefix}toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: var(--#{$prefix}toast-spacing);\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n color: var(--#{$prefix}toast-header-color);\n background-color: var(--#{$prefix}toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);\n @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));\n\n .btn-close {\n margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: var(--#{$prefix}toast-padding-x);\n }\n}\n\n.toast-body {\n padding: var(--#{$prefix}toast-padding-x);\n word-wrap: break-word;\n}\n","// stylelint-disable function-disallowed-list\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n // scss-docs-start modal-css-vars\n --#{$prefix}modal-zindex: #{$zindex-modal};\n --#{$prefix}modal-width: #{$modal-md};\n --#{$prefix}modal-padding: #{$modal-inner-padding};\n --#{$prefix}modal-margin: #{$modal-dialog-margin};\n --#{$prefix}modal-color: #{$modal-content-color};\n --#{$prefix}modal-bg: #{$modal-content-bg};\n --#{$prefix}modal-border-color: #{$modal-content-border-color};\n --#{$prefix}modal-border-width: #{$modal-content-border-width};\n --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n // scss-docs-end modal-css-vars\n\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--#{$prefix}modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--#{$prefix}modal-margin);\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: var(--#{$prefix}modal-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}modal-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n @include border-radius(var(--#{$prefix}modal-border-radius));\n @include box-shadow(var(--#{$prefix}modal-box-shadow));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n // scss-docs-start modal-backdrop-css-vars\n --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n // scss-docs-end modal-backdrop-css-vars\n\n @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: var(--#{$prefix}modal-header-padding);\n border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);\n @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n .btn-close {\n padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);\n margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * .5);\n background-color: var(--#{$prefix}modal-footer-bg);\n border-top: var(--#{$prefix}modal-footer-border-width) solid var(--#{$prefix}modal-footer-border-color);\n @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: calc(var(--#{$prefix}modal-footer-gap) * .5); // Todo in v6: replace with gap on parent class\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n .modal {\n --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n }\n\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: var(--#{$prefix}modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n\n .modal-sm {\n --#{$prefix}modal-width: #{$modal-sm};\n }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-lg};\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-xl};\n }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header,\n .modal-footer {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n // scss-docs-start tooltip-css-vars\n --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n --#{$prefix}tooltip-margin: #{$tooltip-margin};\n @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n --#{$prefix}tooltip-color: #{$tooltip-color};\n --#{$prefix}tooltip-bg: #{$tooltip-bg};\n --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n // scss-docs-end tooltip-css-vars\n\n z-index: var(--#{$prefix}tooltip-zindex);\n display: block;\n padding: var(--#{$prefix}tooltip-arrow-height);\n margin: var(--#{$prefix}tooltip-margin);\n @include deprecate(\"`$tooltip-margin`\", \"v5\", \"v5.x\", true);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}tooltip-font-size));\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: var(--#{$prefix}tooltip-opacity); }\n\n .tooltip-arrow {\n display: block;\n width: var(--#{$prefix}tooltip-arrow-width);\n height: var(--#{$prefix}tooltip-arrow-height);\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-top-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n left: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n right: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-right-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-bottom-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n right: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n left: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-left-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: var(--#{$prefix}tooltip-max-width);\n padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n color: var(--#{$prefix}tooltip-color);\n text-align: center;\n background-color: var(--#{$prefix}tooltip-bg);\n @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n}\n",".popover {\n // scss-docs-start popover-css-vars\n --#{$prefix}popover-zindex: #{$zindex-popover};\n --#{$prefix}popover-max-width: #{$popover-max-width};\n @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n --#{$prefix}popover-bg: #{$popover-bg};\n --#{$prefix}popover-border-width: #{$popover-border-width};\n --#{$prefix}popover-border-color: #{$popover-border-color};\n --#{$prefix}popover-border-radius: #{$popover-border-radius};\n --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n --#{$prefix}popover-header-color: #{$popover-header-color};\n --#{$prefix}popover-header-bg: #{$popover-header-bg};\n --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n --#{$prefix}popover-body-color: #{$popover-body-color};\n --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n // scss-docs-end popover-css-vars\n\n z-index: var(--#{$prefix}popover-zindex);\n display: block;\n max-width: var(--#{$prefix}popover-max-width);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}popover-font-size));\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: var(--#{$prefix}popover-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-radius(var(--#{$prefix}popover-border-radius));\n @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n .popover-arrow {\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n height: var(--#{$prefix}popover-arrow-height);\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n bottom: 0;\n border-top-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n bottom: var(--#{$prefix}popover-border-width);\n border-top-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n > .popover-arrow {\n left: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n left: 0;\n border-right-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n left: var(--#{$prefix}popover-border-width);\n border-right-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n top: 0;\n border-bottom-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n top: var(--#{$prefix}popover-border-width);\n border-bottom-color: var(--#{$prefix}popover-bg);\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n margin-left: calc(-.5 * var(--#{$prefix}popover-arrow-width)); // stylelint-disable-line function-disallowed-list\n content: \"\";\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start {\n > .popover-arrow {\n right: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n right: 0;\n border-left-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n right: var(--#{$prefix}popover-border-width);\n border-left-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size(var(--#{$prefix}popover-header-font-size));\n color: var(--#{$prefix}popover-header-color);\n background-color: var(--#{$prefix}popover-header-bg);\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n color: var(--#{$prefix}popover-body-color);\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n@mixin carousel-dark() {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n\n.carousel-dark {\n @include carousel-dark();\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .carousel {\n @include carousel-dark();\n }\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--#{$prefix}spinner-width);\n height: var(--#{$prefix}spinner-height);\n vertical-align: var(--#{$prefix}spinner-vertical-align);\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n // scss-docs-start spinner-border-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-border-width: #{$spinner-border-width};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-border;\n // scss-docs-end spinner-border-css-vars\n\n border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n // scss-docs-start spinner-border-sm-css-vars\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n // scss-docs-start spinner-grow-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-grow;\n // scss-docs-end spinner-grow-css-vars\n\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n }\n }\n}\n","// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n // scss-docs-start offcanvas-css-vars\n --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n --#{$prefix}offcanvas-color: #{$offcanvas-color};\n --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n --#{$prefix}offcanvas-transition: #{transform $offcanvas-transition-duration ease-in-out};\n --#{$prefix}offcanvas-title-line-height: #{$offcanvas-title-line-height};\n // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @extend %offcanvas-css-vars;\n }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @include media-breakpoint-down($next) {\n position: fixed;\n bottom: 0;\n z-index: var(--#{$prefix}offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--#{$prefix}offcanvas-color);\n visibility: hidden;\n background-color: var(--#{$prefix}offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n @include transition(var(--#{$prefix}offcanvas-transition));\n\n &.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(-100%);\n }\n\n &.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(100%);\n }\n\n &.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(-100%);\n }\n\n &.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(100%);\n }\n\n &.showing,\n &.show:not(.hiding) {\n transform: none;\n }\n\n &.showing,\n &.hiding,\n &.show {\n visibility: visible;\n }\n }\n\n @if not ($infix == \"\") {\n @include media-breakpoint-up($next) {\n --#{$prefix}offcanvas-height: auto;\n --#{$prefix}offcanvas-border-width: 0;\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n }\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n .btn-close {\n padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n overflow-y: auto;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) if($enable-important-utilities, !important, null);\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap.min.css
index 1359b3b72..596784f3f 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap.min.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap.min.css
@@ -1,7 +1,6 @@
@charset "UTF-8";/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:var(--bs-link-color);text-decoration:underline}a:hover{color:var(--bs-link-hover-color)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid var(--bs-border-color);border-radius:.375rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color:var(--bs-body-color);--bs-table-bg:transparent;--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-body-color);--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:var(--bs-body-color);--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:var(--bs-body-color);--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:var(--bs-table-color);vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:2px solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#bacbe6;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#cbccce;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#bcd0c7;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#badce3;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#e6dbb9;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#dfc2c4;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#dfe0e1;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#373b3e;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:calc(1.5em + .75rem + 2px);padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:.375rem}.form-control-color::-webkit-color-swatch{border-radius:.375rem}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + 2px)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + 2px)}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.25rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.5rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;width:100%;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.375rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.375rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.375rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:#212529;--bs-btn-bg:transparent;--bs-btn-border-width:1px;--bs-btn-border-color:transparent;--bs-btn-border-radius:0.375rem;--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:none;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:0.5rem}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:0.25rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:#212529;--bs-dropdown-bg:#fff;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:0.375rem;--bs-dropdown-border-width:1px;--bs-dropdown-inner-border-radius:calc(0.375rem - 1px);--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color:#212529;--bs-dropdown-link-hover-color:#1e2125;--bs-dropdown-link-hover-bg:#e9ecef;--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.375rem}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:#6c757d;display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link.disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:1px;--bs-nav-tabs-border-color:#dee2e6;--bs-nav-tabs-border-radius:0.375rem;--bs-nav-tabs-link-hover-border-color:#e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color:#495057;--bs-nav-tabs-link-active-bg:#fff;--bs-nav-tabs-link-active-border-color:#dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));background:0 0;border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:0.375rem;--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{background:0 0;border:0;border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(0, 0, 0, 0.55);--bs-navbar-hover-color:rgba(0, 0, 0, 0.7);--bs-navbar-disabled-color:rgba(0, 0, 0, 0.3);--bs-navbar-active-color:rgba(0, 0, 0, 0.9);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(0, 0, 0, 0.9);--bs-navbar-brand-hover-color:rgba(0, 0, 0, 0.9);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(0, 0, 0, 0.1);--bs-navbar-toggler-border-radius:0.375rem;--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .show>.nav-link{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-border-width:1px;--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:0.375rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(0.375rem - 1px);--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(0, 0, 0, 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:#fff;--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:#212529;--bs-accordion-bg:#fff;--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:1px;--bs-accordion-border-radius:0.375rem;--bs-accordion-inner-border-radius:calc(0.375rem - 1px);--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:#212529;--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:#0c63e4;--bs-accordion-active-bg:#e7f1ff}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:#6c757d;--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:#6c757d;display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:#fff;--bs-pagination-border-width:1px;--bs-pagination-border-color:#dee2e6;--bs-pagination-border-radius:0.375rem;--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:#e9ecef;--bs-pagination-hover-border-color:#dee2e6;--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:#e9ecef;--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:#6c757d;--bs-pagination-disabled-bg:#fff;--bs-pagination-disabled-border-color:#dee2e6;display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:0.5rem}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:0.25rem}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:0.375rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:1px solid var(--bs-alert-border-color);--bs-alert-border-radius:0.375rem;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:#084298;--bs-alert-bg:#cfe2ff;--bs-alert-border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{--bs-alert-color:#41464b;--bs-alert-bg:#e2e3e5;--bs-alert-border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{--bs-alert-color:#0f5132;--bs-alert-bg:#d1e7dd;--bs-alert-border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{--bs-alert-color:#055160;--bs-alert-bg:#cff4fc;--bs-alert-border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{--bs-alert-color:#664d03;--bs-alert-bg:#fff3cd;--bs-alert-border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{--bs-alert-color:#842029;--bs-alert-bg:#f8d7da;--bs-alert-border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{--bs-alert-color:#636464;--bs-alert-bg:#fefefe;--bs-alert-border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{--bs-alert-color:#141619;--bs-alert-bg:#d3d3d4;--bs-alert-border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:#e9ecef;--bs-progress-border-radius:0.375rem;--bs-progress-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:#212529;--bs-list-group-bg:#fff;--bs-list-group-border-color:rgba(0, 0, 0, 0.125);--bs-list-group-border-width:1px;--bs-list-group-border-radius:0.375rem;--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:#495057;--bs-list-group-action-hover-color:#495057;--bs-list-group-action-hover-bg:#f8f9fa;--bs-list-group-action-active-color:#212529;--bs-list-group-action-active-bg:#e9ecef;--bs-list-group-disabled-color:#6c757d;--bs-list-group-disabled-bg:#fff;--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(255, 255, 255, 0.85);--bs-toast-border-width:1px;--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:0.375rem;--bs-toast-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color:#6c757d;--bs-toast-header-bg:rgba(255, 255, 255, 0.85);--bs-toast-header-border-color:rgba(0, 0, 0, 0.05);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:#fff;--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:1px;--bs-modal-border-radius:0.5rem;--bs-modal-box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius:calc(0.5rem - 1px);--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:1px;--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:#fff;--bs-tooltip-bg:#000;--bs-tooltip-border-radius:0.375rem;--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;padding:var(--bs-tooltip-arrow-height);margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:#fff;--bs-popover-border-width:1px;--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:0.5rem;--bs-popover-inner-border-radius:calc(0.5rem - 1px);--bs-popover-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: ;--bs-popover-header-bg:#f0f0f0;--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:#212529;--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color: ;--bs-offcanvas-bg:#fff;--bs-offcanvas-border-width:1px;--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075)}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:575.98px){.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}}@media (max-width:575.98px){.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:767.98px){.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}}@media (max-width:767.98px){.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:991.98px){.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}}@media (max-width:991.98px){.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:1199.98px){.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}}@media (max-width:1199.98px){.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:1399.98px){.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}}@media (max-width:1399.98px){.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(13,110,253,var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(108,117,125,var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(25,135,84,var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(13,202,240,var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(255,193,7,var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(33,37,41,var(--bs-bg-opacity,1))!important}.link-primary{color:#0d6efd!important}.link-primary:focus,.link-primary:hover{color:#0a58ca!important}.link-secondary{color:#6c757d!important}.link-secondary:focus,.link-secondary:hover{color:#565e64!important}.link-success{color:#198754!important}.link-success:focus,.link-success:hover{color:#146c43!important}.link-info{color:#0dcaf0!important}.link-info:focus,.link-info:hover{color:#3dd5f3!important}.link-warning{color:#ffc107!important}.link-warning:focus,.link-warning:hover{color:#ffcd39!important}.link-danger{color:#dc3545!important}.link-danger:focus,.link-danger:hover{color:#b02a37!important}.link-light{color:#f8f9fa!important}.link-light:focus,.link-light:hover{color:#f9fafb!important}.link-dark{color:#212529!important}.link-dark:focus,.link-dark:hover{color:#1a1e21!important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-1{--bs-border-width:1px}.border-2{--bs-border-width:2px}.border-3{--bs-border-width:3px}.border-4{--bs-border-width:4px}.border-5{--bs-border-width:5px}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-semibold{font-weight:600!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-2xl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text:#0a58ca;--bs-secondary-text:#6c757d;--bs-success-text:#146c43;--bs-info-text:#087990;--bs-warning-text:#997404;--bs-danger-text:#b02a37;--bs-light-text:#6c757d;--bs-dark-text:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#f8f9fa;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#e9ecef;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);--bs-emphasis-color:#000;--bs-form-control-bg:var(--bs-body-bg);--bs-form-control-disabled-bg:var(--bs-secondary-bg);--bs-highlight-bg:#fff3cd;--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}[data-bs-theme=dark]{--bs-body-color:#adb5bd;--bs-body-color-rgb:173,181,189;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#f8f9fa;--bs-emphasis-color-rgb:248,249,250;--bs-secondary-color:rgba(173, 181, 189, 0.75);--bs-secondary-color-rgb:173,181,189;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(173, 181, 189, 0.5);--bs-tertiary-color-rgb:173,181,189;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-emphasis-color:#fff;--bs-primary-text:#6ea8fe;--bs-secondary-text:#dee2e6;--bs-success-text:#75b798;--bs-info-text:#6edff6;--bs-warning-text:#ffda6a;--bs-danger-text:#ea868f;--bs-light-text:#f8f9fa;--bs-dark-text:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#212529;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#495057;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#055160;--bs-warning-border-subtle:#664d03;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:#fff;--bs-link-color:#6ea8fe;--bs-link-hover-color:#9ec5fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:158,197,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color,inherit)}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color:var(--bs-body-color);--bs-table-bg:transparent;--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-body-color);--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:var(--bs-body-color);--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:var(--bs-body-color);--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:var(--bs-table-color);vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#bacbe6;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#cbccce;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#bcd0c7;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#badce3;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#e6dbb9;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#dfc2c4;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#dfe0e1;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#373b3e;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-form-control-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-form-control-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-form-control-disabled-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:.375rem}.form-control-color::-webkit-color-swatch{border-radius:.375rem}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-form-control-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-form-control-disabled-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.25rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.5rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-reverse{padding-right:1.5em;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:-1.5em;margin-left:0}.form-check-input{--bs-form-check-bg:var(--bs-form-control-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating::before:not(.form-control:disabled){position:absolute;top:var(--bs-border-width);left:var(--bs-border-width);width:calc(100% - (calc(calc(.375em + .1875rem) + calc(.75em + .375rem))));height:1.875em;content:"";background-color:var(--bs-form-control-bg);border-radius:.375rem}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;width:100%;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label{color:#6c757d}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(var(--bs-border-width) * -1);border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-success-text)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-success);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-success);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-success)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-success);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-success)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-success-text)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-success-text)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-danger-text)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-danger);padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-danger);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-danger)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-danger);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-danger)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-danger-text)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-danger-text)}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:#212529;--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:0.375rem;--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:none;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:0.5rem}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:0.25rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:0.375rem;--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(0.375rem - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.375rem}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--bs-border-width) * -1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link.disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));background:0 0;border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius:0.375rem;--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{background:0 0;border:0;border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius:0.375rem;--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .show>.nav-link{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230a58ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:0.5rem}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:0.25rem}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:0.375rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:0.375rem;--bs-alert-link-color:inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:var(--bs-primary-text);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text)}.alert-success{--bs-alert-color:var(--bs-success-text);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text)}.alert-info{--bs-alert-color:var(--bs-info-text);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text)}.alert-warning{--bs-alert-color:var(--bs-warning-text);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text)}.alert-danger{--bs-alert-color:var(--bs-danger-text);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text)}.alert-light{--bs-alert-color:var(--bs-light-text);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text)}.alert-dark{--bs-alert-color:var(--bs-dark-text);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle)}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle)}.list-group-item-primary.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-primary-text);--bs-list-group-active-border-color:var(--bs-primary-text)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle)}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle)}.list-group-item-secondary.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-secondary-text);--bs-list-group-active-border-color:var(--bs-secondary-text)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle)}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle)}.list-group-item-success.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-success-text);--bs-list-group-active-border-color:var(--bs-success-text)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle)}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle)}.list-group-item-info.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-info-text);--bs-list-group-active-border-color:var(--bs-info-text)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle)}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle)}.list-group-item-warning.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-warning-text);--bs-list-group-active-border-color:var(--bs-warning-text)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle)}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle)}.list-group-item-danger.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-danger-text);--bs-list-group-active-border-color:var(--bs-danger-text)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle)}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle)}.list-group-item-light.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-light-text);--bs-list-group-active-border-color:var(--bs-light-text)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle)}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle)}.list-group-item-dark.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-dark-text);--bs-list-group-active-border-color:var(--bs-dark-text)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;padding:var(--bs-tooltip-arrow-height);margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: ;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:575.98px){.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}}@media (max-width:575.98px){.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:767.98px){.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}}@media (max-width:767.98px){.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:991.98px){.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}}@media (max-width:991.98px){.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:1199.98px){.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}}@media (max-width:1199.98px){.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:1399.98px){.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}}@media (max-width:1399.98px){.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(13,110,253,var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(108,117,125,var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(25,135,84,var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(13,202,240,var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(255,193,7,var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(33,37,41,var(--bs-bg-opacity,1))!important}.link-primary{color:#0d6efd!important}.link-primary:focus,.link-primary:hover{color:#0a58ca!important}.link-secondary{color:#6c757d!important}.link-secondary:focus,.link-secondary:hover{color:#565e64!important}.link-success{color:#198754!important}.link-success:focus,.link-success:hover{color:#146c43!important}.link-info{color:#0dcaf0!important}.link-info:focus,.link-info:hover{color:#3dd5f3!important}.link-warning{color:#ffc107!important}.link-warning:focus,.link-warning:hover{color:#ffcd39!important}.link-danger{color:#dc3545!important}.link-danger:focus,.link-danger:hover{color:#b02a37!important}.link-light{color:#f8f9fa!important}.link-light:focus,.link-light:hover{color:#f9fafb!important}.link-dark{color:#212529!important}.link-dark:focus,.link-dark:hover{color:#1a1e21!important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(var(--bs-body-color-rgb),.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(var(--bs-body-color-rgb),.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(var(--bs-body-color-rgb),.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-left:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{--bs-border-width:1px}.border-2{--bs-border-width:2px}.border-3{--bs-border-width:3px}.border-4{--bs-border-width:4px}.border-5{--bs-border-width:5px}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:left!important}.text-end{text-align:right!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-break{word-wrap:break-word!important;word-break:break-word!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text)!important}.text-secondary-emphasis{color:var(--bs-secondary-text)!important}.text-success-emphasis{color:var(--bs-success-text)!important}.text-info-emphasis{color:var(--bs-info-text)!important}.text-warning-emphasis{color:var(--bs-warning-text)!important}.text-danger-emphasis{color:var(--bs-danger-text)!important}.text-light-emphasis{color:var(--bs-light-text)!important}.text-dark-emphasis{color:var(--bs-dark-text)!important}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-emphasis{--bs-bg-opacity:1;background-color:rgba(var(--bs-emphasis-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-2xl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-left-radius:0!important;border-top-right-radius:0!important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-2xl)!important;border-top-right-radius:var(--bs-border-radius-2xl)!important}.rounded-top-circle{border-top-left-radius:50%!important;border-top-right-radius:50%!important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-right-radius:0!important;border-bottom-right-radius:0!important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-2xl)!important;border-bottom-right-radius:var(--bs-border-radius-2xl)!important}.rounded-end-circle{border-top-right-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-right-radius:0!important;border-bottom-left-radius:0!important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-2xl)!important;border-bottom-left-radius:var(--bs-border-radius-2xl)!important}.rounded-bottom-circle{border-bottom-right-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-2xl)!important;border-top-left-radius:var(--bs-border-radius-2xl)!important}.rounded-start-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:left!important}.float-sm-end{float:right!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:left!important}.float-md-end{float:right!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:left!important}.float-lg-end{float:right!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:left!important}.float-xl-end{float:right!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:left!important}.float-xxl-end{float:right!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map
index 1b98783d1..3477bc51b 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_reboot.scss","dist/css/bootstrap.css","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"iBACE;;;;;ACDF,MAQI,UAAA,QAAA,YAAA,QAAA,YAAA,QAAA,UAAA,QAAA,SAAA,QAAA,YAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAAA,UAAA,QAAA,WAAA,KAAA,WAAA,KAAA,UAAA,QAAA,eAAA,QAIA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAAA,cAAA,QAIA,aAAA,QAAA,eAAA,QAAA,aAAA,QAAA,UAAA,QAAA,aAAA,QAAA,YAAA,QAAA,WAAA,QAAA,UAAA,QAIA,iBAAA,EAAA,CAAA,GAAA,CAAA,IAAA,mBAAA,GAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,EAAA,CAAA,GAAA,CAAA,GAAA,cAAA,EAAA,CAAA,GAAA,CAAA,IAAA,iBAAA,GAAA,CAAA,GAAA,CAAA,EAAA,gBAAA,GAAA,CAAA,EAAA,CAAA,GAAA,eAAA,GAAA,CAAA,GAAA,CAAA,IAAA,cAAA,EAAA,CAAA,EAAA,CAAA,GAGF,eAAA,GAAA,CAAA,GAAA,CAAA,IACA,eAAA,CAAA,CAAA,CAAA,CAAA,EACA,oBAAA,EAAA,CAAA,EAAA,CAAA,GACA,iBAAA,GAAA,CAAA,GAAA,CAAA,IAMA,qBAAA,SAAA,CAAA,aAAA,CAAA,UAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,mBACA,oBAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,UACA,cAAA,2EAOA,sBAAA,0BC4PI,oBAAA,KD1PJ,sBAAA,IACA,sBAAA,IACA,gBAAA,QAIA,aAAA,KAIA,kBAAA,IACA,kBAAA,MACA,kBAAA,QACA,8BAAA,qBAEA,mBAAA,SACA,sBAAA,QACA,sBAAA,OACA,sBAAA,KACA,uBAAA,KACA,wBAAA,MAGA,gBAAA,QACA,sBAAA,QAEA,gBAAA,QAEA,kBAAA,QExDF,EC+DA,QADA,SD3DE,WAAA,WAeE,8CANJ,MAOM,gBAAA,QAcN,KACE,OAAA,EACA,YAAA,2BDmPI,UAAA,yBCjPJ,YAAA,2BACA,YAAA,2BACA,MAAA,qBACA,WAAA,0BACA,iBAAA,kBACA,yBAAA,KACA,4BAAA,YASF,GACE,OAAA,KAAA,EACA,MAAA,QACA,OAAA,EACA,WAAA,IAAA,MACA,QAAA,IAUF,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GACE,WAAA,EACA,cAAA,MAGA,YAAA,IACA,YAAA,IAIF,IAAA,GD6MQ,UAAA,uBAlKJ,0BC3CJ,IAAA,GDoNQ,UAAA,QC/MR,IAAA,GDwMQ,UAAA,sBAlKJ,0BCtCJ,IAAA,GD+MQ,UAAA,MC1MR,IAAA,GDmMQ,UAAA,oBAlKJ,0BCjCJ,IAAA,GD0MQ,UAAA,SCrMR,IAAA,GD8LQ,UAAA,sBAlKJ,0BC5BJ,IAAA,GDqMQ,UAAA,QChMR,IAAA,GDqLM,UAAA,QChLN,IAAA,GDgLM,UAAA,KCrKN,EACE,WAAA,EACA,cAAA,KAUF,YACE,wBAAA,UAAA,OAAA,gBAAA,UAAA,OACA,OAAA,KACA,iCAAA,KAAA,yBAAA,KAMF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QAMF,GCsBA,GDpBE,aAAA,KC0BF,GDvBA,GCsBA,GDnBE,WAAA,EACA,cAAA,KAGF,MCuBA,MACA,MAFA,MDlBE,cAAA,EAGF,GACE,YAAA,IAKF,GACE,cAAA,MACA,YAAA,EAMF,WACE,OAAA,EAAA,EAAA,KAQF,ECYA,ODVE,YAAA,OAQF,OAAA,MDmFM,UAAA,OC5EN,MAAA,KACE,QAAA,QACA,iBAAA,uBASF,ICFA,IDIE,SAAA,SD+DI,UAAA,MC7DJ,YAAA,EACA,eAAA,SAGF,IAAM,OAAA,OACN,IAAM,IAAA,MAKN,EACE,MAAA,qBACA,gBAAA,UAEA,QACE,MAAA,2BAWF,2BAAA,iCAEE,MAAA,QACA,gBAAA,KCNJ,KACA,IDYA,ICXA,KDeE,YAAA,yBDqBI,UAAA,ICbN,IACE,QAAA,MACA,WAAA,EACA,cAAA,KACA,SAAA,KDSI,UAAA,OCJJ,SDII,UAAA,QCFF,MAAA,QACA,WAAA,OAIJ,KDHM,UAAA,OCKJ,MAAA,qBACA,UAAA,WAGA,OACE,MAAA,QAIJ,IACE,QAAA,SAAA,QDfI,UAAA,OCiBJ,MAAA,kBACA,iBAAA,qBEpSE,cAAA,OFuSF,QACE,QAAA,EDtBE,UAAA,ICiCN,OACE,OAAA,EAAA,EAAA,KAMF,IChCA,IDkCE,eAAA,OAQF,MACE,aAAA,OACA,gBAAA,SAGF,QACE,YAAA,MACA,eAAA,MACA,MAAA,QACA,WAAA,KAOF,GAEE,WAAA,QACA,WAAA,qBCvCF,MAGA,GAFA,MAGA,GDsCA,MCxCA,GD8CE,aAAA,QACA,aAAA,MACA,aAAA,EAQF,MACE,QAAA,aAMF,OAEE,cAAA,EAQF,iCACE,QAAA,ECrDF,OD0DA,MCxDA,SADA,OAEA,SD4DE,OAAA,EACA,YAAA,QDrHI,UAAA,QCuHJ,YAAA,QAIF,OC3DA,OD6DE,eAAA,KAKF,cACE,OAAA,QAGF,OAGE,UAAA,OAGA,gBACE,QAAA,EAOJ,0IACE,QAAA,eCjEF,cACA,aACA,cDuEA,OAIE,mBAAA,OCvEF,6BACA,4BACA,6BDwEI,sBACE,OAAA,QAON,mBACE,QAAA,EACA,aAAA,KAKF,SACE,OAAA,SAUF,SACE,UAAA,EACA,QAAA,EACA,OAAA,EACA,OAAA,EAQF,OACE,MAAA,KACA,MAAA,KACA,QAAA,EACA,cAAA,MD1MM,UAAA,sBC6MN,YAAA,QD/WE,0BCwWJ,OD/LQ,UAAA,QCwMN,SACE,MAAA,KC/EJ,kCDsFA,uCCvFA,mCADA,+BAGA,oCAJA,6BAKA,mCD2FE,QAAA,EAGF,4BACE,OAAA,KASF,cACE,eAAA,KACA,mBAAA,UAmBF,4BACE,mBAAA,KAKF,+BACE,QAAA,EAOF,6BACE,KAAA,QACA,mBAAA,OAFF,uBACE,KAAA,QACA,mBAAA,OAKF,OACE,QAAA,aAKF,OACE,OAAA,EAOF,QACE,QAAA,UACA,OAAA,QAQF,SACE,eAAA,SAQF,SACE,QAAA,eGpkBF,MJyQM,UAAA,QIvQJ,YAAA,IAKA,WJsQM,UAAA,uBIlQJ,YAAA,IACA,YAAA,IJ+FA,0BIpGF,WJ6QM,UAAA,MI7QN,WJsQM,UAAA,uBIlQJ,YAAA,IACA,YAAA,IJ+FA,0BIpGF,WJ6QM,UAAA,QI7QN,WJsQM,UAAA,uBIlQJ,YAAA,IACA,YAAA,IJ+FA,0BIpGF,WJ6QM,UAAA,MI7QN,WJsQM,UAAA,uBIlQJ,YAAA,IACA,YAAA,IJ+FA,0BIpGF,WJ6QM,UAAA,QI7QN,WJsQM,UAAA,uBIlQJ,YAAA,IACA,YAAA,IJ+FA,0BIpGF,WJ6QM,UAAA,MI7QN,WJsQM,UAAA,uBIlQJ,YAAA,IACA,YAAA,IJ+FA,0BIpGF,WJ6QM,UAAA,QIrPR,eCvDE,aAAA,EACA,WAAA,KD2DF,aC5DE,aAAA,EACA,WAAA,KD8DF,kBACE,QAAA,aAEA,mCACE,aAAA,MAUJ,YJoNM,UAAA,OIlNJ,eAAA,UAIF,YACE,cAAA,KJ6MI,UAAA,QI1MJ,wBACE,cAAA,EAIJ,mBACE,WAAA,MACA,cAAA,KJmMI,UAAA,OIjMJ,MAAA,QAEA,2BACE,QAAA,KEhGJ,WCIE,UAAA,KAGA,OAAA,KDDF,eACE,QAAA,OACA,iBAAA,KACA,OAAA,IAAA,MAAA,uBHGE,cAAA,QIRF,UAAA,KAGA,OAAA,KDcF,QAEE,QAAA,aAGF,YACE,cAAA,MACA,YAAA,EAGF,gBN+PM,UAAA,OM7PJ,MAAA,QElCA,WN8mBF,iBAGA,cACA,cACA,cAHA,cADA,eOlnBE,cAAA,OACA,cAAA,EACA,MAAA,KACA,cAAA,8BACA,aAAA,8BACA,aAAA,KACA,YAAA,KCsDE,yBF5CE,WAAA,cACE,UAAA,OE2CJ,yBF5CE,WAAA,cAAA,cACE,UAAA,OE2CJ,yBF5CE,WAAA,cAAA,cAAA,cACE,UAAA,OE2CJ,0BF5CE,WAAA,cAAA,cAAA,cAAA,cACE,UAAA,QE2CJ,0BF5CE,WAAA,cAAA,cAAA,cAAA,cAAA,eACE,UAAA,QGfN,KCAA,cAAA,OACA,cAAA,EACA,QAAA,KACA,UAAA,KAEA,WAAA,8BACA,aAAA,+BACA,YAAA,+BDJE,OCaF,YAAA,EACA,MAAA,KACA,UAAA,KACA,cAAA,8BACA,aAAA,8BACA,WAAA,mBA+CI,KACE,KAAA,EAAA,EAAA,GAGF,iBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,cACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,cACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,UAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,OAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,QAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,QAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,QAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,UAxDV,YAAA,YAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,IAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,IAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,aAwDU,UAxDV,YAAA,IAwDU,WAxDV,YAAA,aAwDU,WAxDV,YAAA,aAmEM,KVitBR,MU/sBU,cAAA,EAGF,KVitBR,MU/sBU,cAAA,EAPF,KV2tBR,MUztBU,cAAA,QAGF,KV2tBR,MUztBU,cAAA,QAPF,KVquBR,MUnuBU,cAAA,OAGF,KVquBR,MUnuBU,cAAA,OAPF,KV+uBR,MU7uBU,cAAA,KAGF,KV+uBR,MU7uBU,cAAA,KAPF,KVyvBR,MUvvBU,cAAA,OAGF,KVyvBR,MUvvBU,cAAA,OAPF,KVmwBR,MUjwBU,cAAA,KAGF,KVmwBR,MUjwBU,cAAA,KF1DN,yBEUE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QVq4BR,SUn4BU,cAAA,EAGF,QVo4BR,SUl4BU,cAAA,EAPF,QV64BR,SU34BU,cAAA,QAGF,QV44BR,SU14BU,cAAA,QAPF,QVq5BR,SUn5BU,cAAA,OAGF,QVo5BR,SUl5BU,cAAA,OAPF,QV65BR,SU35BU,cAAA,KAGF,QV45BR,SU15BU,cAAA,KAPF,QVq6BR,SUn6BU,cAAA,OAGF,QVo6BR,SUl6BU,cAAA,OAPF,QV66BR,SU36BU,cAAA,KAGF,QV46BR,SU16BU,cAAA,MF1DN,yBEUE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QV8iCR,SU5iCU,cAAA,EAGF,QV6iCR,SU3iCU,cAAA,EAPF,QVsjCR,SUpjCU,cAAA,QAGF,QVqjCR,SUnjCU,cAAA,QAPF,QV8jCR,SU5jCU,cAAA,OAGF,QV6jCR,SU3jCU,cAAA,OAPF,QVskCR,SUpkCU,cAAA,KAGF,QVqkCR,SUnkCU,cAAA,KAPF,QV8kCR,SU5kCU,cAAA,OAGF,QV6kCR,SU3kCU,cAAA,OAPF,QVslCR,SUplCU,cAAA,KAGF,QVqlCR,SUnlCU,cAAA,MF1DN,yBEUE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QVutCR,SUrtCU,cAAA,EAGF,QVstCR,SUptCU,cAAA,EAPF,QV+tCR,SU7tCU,cAAA,QAGF,QV8tCR,SU5tCU,cAAA,QAPF,QVuuCR,SUruCU,cAAA,OAGF,QVsuCR,SUpuCU,cAAA,OAPF,QV+uCR,SU7uCU,cAAA,KAGF,QV8uCR,SU5uCU,cAAA,KAPF,QVuvCR,SUrvCU,cAAA,OAGF,QVsvCR,SUpvCU,cAAA,OAPF,QV+vCR,SU7vCU,cAAA,KAGF,QV8vCR,SU5vCU,cAAA,MF1DN,0BEUE,QACE,KAAA,EAAA,EAAA,GAGF,oBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,iBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,aAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,UAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,aAxDV,YAAA,EAwDU,aAxDV,YAAA,YAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,aAwDU,aAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAmEM,QVg4CR,SU93CU,cAAA,EAGF,QV+3CR,SU73CU,cAAA,EAPF,QVw4CR,SUt4CU,cAAA,QAGF,QVu4CR,SUr4CU,cAAA,QAPF,QVg5CR,SU94CU,cAAA,OAGF,QV+4CR,SU74CU,cAAA,OAPF,QVw5CR,SUt5CU,cAAA,KAGF,QVu5CR,SUr5CU,cAAA,KAPF,QVg6CR,SU95CU,cAAA,OAGF,QV+5CR,SU75CU,cAAA,OAPF,QVw6CR,SUt6CU,cAAA,KAGF,QVu6CR,SUr6CU,cAAA,MF1DN,0BEUE,SACE,KAAA,EAAA,EAAA,GAGF,qBApCJ,KAAA,EAAA,EAAA,KACA,MAAA,KAcA,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,KAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,eAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,IAFF,kBACE,KAAA,EAAA,EAAA,KACA,MAAA,eA+BE,cAhDJ,KAAA,EAAA,EAAA,KACA,MAAA,KAqDQ,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,YA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,WAhEN,KAAA,EAAA,EAAA,KACA,MAAA,IA+DM,YAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,YAhEN,KAAA,EAAA,EAAA,KACA,MAAA,aA+DM,YAhEN,KAAA,EAAA,EAAA,KACA,MAAA,KAuEQ,cAxDV,YAAA,EAwDU,cAxDV,YAAA,YAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,IAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,aAwDU,cAxDV,YAAA,IAwDU,eAxDV,YAAA,aAwDU,eAxDV,YAAA,aAmEM,SVyiDR,UUviDU,cAAA,EAGF,SVwiDR,UUtiDU,cAAA,EAPF,SVijDR,UU/iDU,cAAA,QAGF,SVgjDR,UU9iDU,cAAA,QAPF,SVyjDR,UUvjDU,cAAA,OAGF,SVwjDR,UUtjDU,cAAA,OAPF,SVikDR,UU/jDU,cAAA,KAGF,SVgkDR,UU9jDU,cAAA,KAPF,SVykDR,UUvkDU,cAAA,OAGF,SVwkDR,UUtkDU,cAAA,OAPF,SVilDR,UU/kDU,cAAA,KAGF,SVglDR,UU9kDU,cAAA,MCrHV,OACE,iBAAA,qBACA,cAAA,YACA,wBAAA,uBACA,qBAAA,YACA,yBAAA,qBACA,sBAAA,oBACA,wBAAA,qBACA,qBAAA,mBACA,uBAAA,qBACA,oBAAA,qBAEA,MAAA,KACA,cAAA,KACA,MAAA,sBACA,eAAA,IACA,aAAA,6BAOA,yBACE,QAAA,MAAA,MACA,iBAAA,mBACA,oBAAA,IACA,WAAA,MAAA,EAAA,EAAA,EAAA,OAAA,0BAGF,aACE,eAAA,QAGF,aACE,eAAA,OAIJ,qBACE,WAAA,IAAA,MAAA,aAOF,aACE,aAAA,IAUA,4BACE,QAAA,OAAA,OAeF,gCACE,aAAA,IAAA,EAGA,kCACE,aAAA,EAAA,IAOJ,oCACE,oBAAA,EAGF,qCACE,iBAAA,EAUF,2CACE,qBAAA,2BACA,MAAA,8BAMF,uDACE,qBAAA,2BACA,MAAA,8BAQJ,cACE,qBAAA,0BACA,MAAA,6BAQA,8BACE,qBAAA,yBACA,MAAA,4BCrIF,eAOE,iBAAA,KACA,cAAA,QACA,wBAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,sBACA,aAAA,6BAlBF,iBAOE,iBAAA,KACA,cAAA,QACA,wBAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,sBACA,aAAA,6BAlBF,eAOE,iBAAA,KACA,cAAA,QACA,wBAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,sBACA,aAAA,6BAlBF,YAOE,iBAAA,KACA,cAAA,QACA,wBAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,sBACA,aAAA,6BAlBF,eAOE,iBAAA,KACA,cAAA,QACA,wBAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,sBACA,aAAA,6BAlBF,cAOE,iBAAA,KACA,cAAA,QACA,wBAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,sBACA,aAAA,6BAlBF,aAOE,iBAAA,KACA,cAAA,QACA,wBAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,sBACA,aAAA,6BAlBF,YAOE,iBAAA,KACA,cAAA,QACA,wBAAA,QACA,sBAAA,QACA,yBAAA,KACA,qBAAA,QACA,wBAAA,KACA,oBAAA,QACA,uBAAA,KAEA,MAAA,sBACA,aAAA,6BD0IA,kBACE,WAAA,KACA,2BAAA,MHpFF,4BGkFA,qBACE,WAAA,KACA,2BAAA,OHpFF,4BGkFA,qBACE,WAAA,KACA,2BAAA,OHpFF,4BGkFA,qBACE,WAAA,KACA,2BAAA,OHpFF,6BGkFA,qBACE,WAAA,KACA,2BAAA,OHpFF,6BGkFA,sBACE,WAAA,KACA,2BAAA,OE5JN,YACE,cAAA,MASF,gBACE,YAAA,oBACA,eAAA,oBACA,cAAA,EfoRI,UAAA,QehRJ,YAAA,IAIF,mBACE,YAAA,kBACA,eAAA,kBf0QI,UAAA,QetQN,mBACE,YAAA,mBACA,eAAA,mBfoQI,UAAA,QgBjSN,WACE,WAAA,OhBgSI,UAAA,OgB5RJ,MAAA,QCLF,cACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,OjB8RI,UAAA,KiB3RJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,iBAAA,KACA,gBAAA,YACA,OAAA,IAAA,MAAA,QACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KdGE,cAAA,QeHE,WAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCDhBN,cCiBQ,WAAA,MDGN,yBACE,SAAA,OAEA,wDACE,OAAA,QAKJ,oBACE,MAAA,QACA,iBAAA,KACA,aAAA,QACA,QAAA,EAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAOJ,2CAEE,OAAA,MAIF,gCACE,MAAA,QAEA,QAAA,EAHF,2BACE,MAAA,QAEA,QAAA,EAQF,uBAEE,iBAAA,QAGA,QAAA,EAIF,0CACE,QAAA,QAAA,OACA,OAAA,SAAA,QACA,mBAAA,OAAA,kBAAA,OACA,MAAA,QE3EF,iBAAA,QF6EE,eAAA,KACA,aAAA,QACA,aAAA,MACA,aAAA,EACA,wBAAA,IACA,cAAA,ECtEE,mBAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YD2DJ,oCACE,QAAA,QAAA,OACA,OAAA,SAAA,QACA,mBAAA,OAAA,kBAAA,OACA,MAAA,QE3EF,iBAAA,QF6EE,eAAA,KACA,aAAA,QACA,aAAA,MACA,aAAA,EACA,wBAAA,IACA,cAAA,ECtEE,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCDuDJ,0CCtDM,mBAAA,KAAA,WAAA,KDsDN,oCCtDM,WAAA,MDqEN,+EACE,iBAAA,QADF,yEACE,iBAAA,QASJ,wBACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,EACA,cAAA,EACA,YAAA,IACA,MAAA,QACA,iBAAA,YACA,OAAA,MAAA,YACA,aAAA,IAAA,EAEA,8BACE,QAAA,EAGF,wCAAA,wCAEE,cAAA,EACA,aAAA,EAWJ,iBACE,WAAA,0BACA,QAAA,OAAA,MjBkKI,UAAA,QGlRF,cAAA,OcoHF,6CACE,QAAA,OAAA,MACA,OAAA,QAAA,OACA,mBAAA,MAAA,kBAAA,MAHF,uCACE,QAAA,OAAA,MACA,OAAA,QAAA,OACA,mBAAA,MAAA,kBAAA,MAIJ,iBACE,WAAA,yBACA,QAAA,MAAA,KjBqJI,UAAA,QGlRF,cAAA,MciIF,6CACE,QAAA,MAAA,KACA,OAAA,OAAA,MACA,mBAAA,KAAA,kBAAA,KAHF,uCACE,QAAA,MAAA,KACA,OAAA,OAAA,MACA,mBAAA,KAAA,kBAAA,KAQF,sBACE,WAAA,2BAGF,yBACE,WAAA,0BAGF,yBACE,WAAA,yBAKJ,oBACE,MAAA,KACA,OAAA,2BACA,QAAA,QAEA,mDACE,OAAA,QAGF,uCACE,OAAA,YdpKA,cAAA,QcwKF,0CdxKE,cAAA,Qc4KF,oCAAoB,OAAA,0BACpB,oCAAoB,OAAA,yBG3LtB,aACE,QAAA,MACA,MAAA,KACA,QAAA,QAAA,QAAA,QAAA,OACA,mBAAA,oBpB4RI,UAAA,KoBzRJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,iBAAA,KACA,iBAAA,gOACA,kBAAA,UACA,oBAAA,MAAA,OAAA,OACA,gBAAA,KAAA,KACA,OAAA,IAAA,MAAA,QjBDE,cAAA,QeHE,WAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YEQJ,mBAAA,KAAA,gBAAA,KAAA,WAAA,KFJI,uCEfN,aFgBQ,WAAA,MEKN,mBACE,aAAA,QACA,QAAA,EAKE,WAAA,EAAA,EAAA,EAAA,OAAA,qBAIJ,uBAAA,mCAEE,cAAA,OACA,iBAAA,KAGF,sBAEE,iBAAA,QAKF,4BACE,MAAA,YACA,YAAA,EAAA,EAAA,EAAA,QAIJ,gBACE,YAAA,OACA,eAAA,OACA,aAAA,MpB0OI,UAAA,QGlRF,cAAA,OiB6CJ,gBACE,YAAA,MACA,eAAA,MACA,aAAA,KpBkOI,UAAA,QGlRF,cAAA,MkBfJ,YACE,QAAA,MACA,WAAA,OACA,aAAA,MACA,cAAA,QAEA,8BACE,MAAA,KACA,YAAA,OAIJ,oBACE,cAAA,MACA,aAAA,EACA,WAAA,MAEA,sCACE,MAAA,MACA,aAAA,OACA,YAAA,EAIJ,kBACE,MAAA,IACA,OAAA,IACA,WAAA,MACA,eAAA,IACA,iBAAA,KACA,kBAAA,UACA,oBAAA,OACA,gBAAA,QACA,OAAA,IAAA,MAAA,gBACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KACA,2BAAA,MAAA,aAAA,MAAA,mBAAA,MAGA,iClBvBE,cAAA,MkB2BF,8BAEE,cAAA,IAGF,yBACE,OAAA,gBAGF,wBACE,aAAA,QACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBAGF,0BACE,iBAAA,QACA,aAAA,QAEA,yCAII,iBAAA,8NAIJ,sCAII,iBAAA,sIAKN,+CACE,iBAAA,QACA,aAAA,QAKE,iBAAA,wNAIJ,2BACE,eAAA,KACA,OAAA,KACA,QAAA,GAOA,6CAAA,8CACE,OAAA,QACA,QAAA,GAcN,aACE,aAAA,MAEA,+BACE,MAAA,IACA,YAAA,OACA,iBAAA,uJACA,oBAAA,KAAA,OlB3GA,cAAA,IeHE,WAAA,oBAAA,KAAA,YAIA,uCGsGJ,+BHrGM,WAAA,MG6GJ,qCACE,iBAAA,yIAGF,uCACE,oBAAA,MAAA,OAKE,iBAAA,sIAKN,gCACE,cAAA,MACA,aAAA,EAEA,kDACE,aAAA,OACA,YAAA,EAKN,mBACE,QAAA,aACA,aAAA,KAGF,WACE,SAAA,SACA,KAAA,cACA,eAAA,KAIE,yBAAA,0BACE,eAAA,KACA,OAAA,KACA,QAAA,ICrKN,YACE,MAAA,KACA,OAAA,OACA,QAAA,EACA,iBAAA,YACA,mBAAA,KAAA,gBAAA,KAAA,WAAA,KAEA,kBACE,QAAA,EAIA,wCAA0B,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,OAAA,qBAC1B,oCAA0B,WAAA,EAAA,EAAA,EAAA,IAAA,IAAA,CAAA,EAAA,EAAA,EAAA,OAAA,qBAG5B,8BACE,OAAA,EAGF,kCACE,MAAA,KACA,OAAA,KACA,WAAA,QHzBF,iBAAA,QG2BE,OAAA,EnBZA,cAAA,KeHE,mBAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YImBF,mBAAA,KAAA,WAAA,KJfE,uCIMJ,kCJLM,mBAAA,KAAA,WAAA,MIgBJ,yCHjCF,iBAAA,QGsCA,2CACE,MAAA,KACA,OAAA,MACA,MAAA,YACA,OAAA,QACA,iBAAA,QACA,aAAA,YnB7BA,cAAA,KmBkCF,8BACE,MAAA,KACA,OAAA,KHnDF,iBAAA,QGqDE,OAAA,EnBtCA,cAAA,KeHE,gBAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAAA,WAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YI6CF,gBAAA,KAAA,WAAA,KJzCE,uCIiCJ,8BJhCM,gBAAA,KAAA,WAAA,MI0CJ,qCH3DF,iBAAA,QGgEA,8BACE,MAAA,KACA,OAAA,MACA,MAAA,YACA,OAAA,QACA,iBAAA,QACA,aAAA,YnBvDA,cAAA,KmB4DF,qBACE,eAAA,KAEA,2CACE,iBAAA,QAGF,uCACE,iBAAA,QCvFN,eACE,SAAA,SAEA,6BrBs5EF,uCACA,4BqBp5EI,OAAA,mBACA,YAAA,KAGF,qBACE,SAAA,SACA,IAAA,EACA,KAAA,EACA,MAAA,KACA,OAAA,KACA,QAAA,KAAA,OACA,SAAA,OACA,WAAA,MACA,cAAA,SACA,YAAA,OACA,eAAA,KACA,OAAA,IAAA,MAAA,YACA,iBAAA,EAAA,ELPE,WAAA,QAAA,IAAA,WAAA,CAAA,UAAA,IAAA,YAIA,uCKVJ,qBLWM,WAAA,MKMN,6BrBy5EF,uCqBv5EI,QAAA,KAAA,OAEA,yDAAA,+CACE,MAAA,YrB25EN,oDqB55EI,0CACE,MAAA,YAGF,oEAAA,0DAEE,YAAA,SACA,eAAA,QrB65EN,6CACA,+DqBj6EI,mCAAA,qDAEE,YAAA,SACA,eAAA,QrBm6EN,wDqBh6EI,8CACE,YAAA,SACA,eAAA,QAIJ,4BACE,YAAA,SACA,eAAA,QAOA,gEACE,QAAA,IACA,UAAA,WAAA,mBAAA,mBrB65EN,6CqB/5EI,yCrB85EJ,2DAEA,kCqB/5EM,QAAA,IACA,UAAA,WAAA,mBAAA,mBAKF,oDACE,QAAA,IACA,UAAA,WAAA,mBAAA,mBAKF,6CACE,aAAA,IAAA,ECnEN,aACE,SAAA,SACA,QAAA,KACA,UAAA,KACA,YAAA,QACA,MAAA,KAEA,2BtBk+EF,4BADA,0BsB99EI,SAAA,SACA,KAAA,EAAA,EAAA,KACA,MAAA,GACA,UAAA,EAIF,iCtBg+EF,yCADA,gCsB59EI,QAAA,EAMF,kBACE,SAAA,SACA,QAAA,EAEA,wBACE,QAAA,EAWN,kBACE,QAAA,KACA,YAAA,OACA,QAAA,QAAA,OxBoPI,UAAA,KwBlPJ,YAAA,IACA,YAAA,IACA,MAAA,QACA,WAAA,OACA,YAAA,OACA,iBAAA,QACA,OAAA,IAAA,MAAA,QrBtCE,cAAA,QD+/EJ,qBsB/8EA,8BtB68EA,6BACA,kCsB18EE,QAAA,MAAA,KxB8NI,UAAA,QGlRF,cAAA,MDwgFJ,qBsB/8EA,8BtB68EA,6BACA,kCsB18EE,QAAA,OAAA,MxBqNI,UAAA,QGlRF,cAAA,OqBkEJ,6BtB68EA,6BsB38EE,cAAA,KtBg9EF,uEACA,gFACA,+EsBr8EI,kHrBjEA,wBAAA,EACA,2BAAA,ED0gFJ,iEACA,6EACA,4EsBn8EI,+GrB1EA,wBAAA,EACA,2BAAA,EqBsFF,0IACE,YAAA,KrB1EA,uBAAA,EACA,0BAAA,EqB6EF,4DtB27EF,2DCzgFI,uBAAA,EACA,0BAAA,EsBzBF,gBACE,QAAA,KACA,MAAA,KACA,WAAA,OzByQE,UAAA,OyBtQF,MAAA,QAGF,eACE,SAAA,SACA,IAAA,KACA,QAAA,EACA,QAAA,KACA,UAAA,KACA,QAAA,OAAA,MACA,WAAA,MzB4PE,UAAA,QyBzPF,MAAA,KACA,iBAAA,mBtB1BA,cAAA,QDokFJ,0BACA,yBuBtiFI,sCvBoiFJ,qCuBliFM,QAAA,MA9CF,uBAAA,mCAoDE,aAAA,QAGE,cAAA,qBACA,iBAAA,0OACA,kBAAA,UACA,oBAAA,MAAA,wBAAA,OACA,gBAAA,sBAAA,sBAGF,6BAAA,yCACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBAhEJ,2CAAA,+BAyEI,cAAA,qBACA,oBAAA,IAAA,wBAAA,MAAA,wBA1EJ,sBAAA,kCAiFE,aAAA,QAGE,kDAAA,gDAAA,8DAAA,4DAEE,cAAA,SACA,iBAAA,+NAAA,CAAA,0OACA,oBAAA,MAAA,OAAA,MAAA,CAAA,OAAA,MAAA,QACA,gBAAA,KAAA,IAAA,CAAA,sBAAA,sBAIJ,4BAAA,wCACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBA/FJ,6BAAA,yCAuGI,MAAA,kCAvGJ,2BAAA,uCA8GE,aAAA,QAEA,mCAAA,+CACE,iBAAA,QAGF,iCAAA,6CACE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,6CAAA,yDACE,MAAA,QAKJ,qDACE,YAAA,KA/HF,gDvB+oFJ,wDAFA,+CuB7oFI,4DvB8oFJ,oEAFA,2DuBngFU,QAAA,EAtHR,kBACE,QAAA,KACA,MAAA,KACA,WAAA,OzByQE,UAAA,OyBtQF,MAAA,QAGF,iBACE,SAAA,SACA,IAAA,KACA,QAAA,EACA,QAAA,KACA,UAAA,KACA,QAAA,OAAA,MACA,WAAA,MzB4PE,UAAA,QyBzPF,MAAA,KACA,iBAAA,mBtB1BA,cAAA,QD8pFJ,8BACA,6BuBhoFI,0CvB8nFJ,yCuB5nFM,QAAA,MA9CF,yBAAA,qCAoDE,aAAA,QAGE,cAAA,qBACA,iBAAA,2TACA,kBAAA,UACA,oBAAA,MAAA,wBAAA,OACA,gBAAA,sBAAA,sBAGF,+BAAA,2CACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBAhEJ,6CAAA,iCAyEI,cAAA,qBACA,oBAAA,IAAA,wBAAA,MAAA,wBA1EJ,wBAAA,oCAiFE,aAAA,QAGE,oDAAA,kDAAA,gEAAA,8DAEE,cAAA,SACA,iBAAA,+NAAA,CAAA,2TACA,oBAAA,MAAA,OAAA,MAAA,CAAA,OAAA,MAAA,QACA,gBAAA,KAAA,IAAA,CAAA,sBAAA,sBAIJ,8BAAA,0CACE,aAAA,QACA,WAAA,EAAA,EAAA,EAAA,OAAA,oBA/FJ,+BAAA,2CAuGI,MAAA,kCAvGJ,6BAAA,yCA8GE,aAAA,QAEA,qCAAA,iDACE,iBAAA,QAGF,mCAAA,+CACE,WAAA,EAAA,EAAA,EAAA,OAAA,oBAGF,+CAAA,2DACE,MAAA,QAKJ,uDACE,YAAA,KA/HF,kDvByuFJ,0DAFA,iDuBvuFI,8DvBwuFJ,sEAFA,6DuB3lFU,QAAA,EC7IV,KAEE,mBAAA,QACA,mBAAA,SACA,qBAAA,E1B6RI,mBAAA,K0B3RJ,qBAAA,IACA,qBAAA,IACA,eAAA,QACA,YAAA,YACA,sBAAA,IACA,sBAAA,YACA,uBAAA,SACA,4BAAA,YACA,oBAAA,MAAA,EAAA,IAAA,EAAA,yBAAA,CAAA,EAAA,IAAA,IAAA,qBACA,0BAAA,KACA,0BAAA,EAAA,EAAA,EAAA,QAAA,yCAGA,QAAA,aACA,QAAA,wBAAA,wBACA,YAAA,0B1B4QI,UAAA,wB0B1QJ,YAAA,0BACA,YAAA,0BACA,MAAA,oBACA,WAAA,OACA,gBAAA,KAEA,eAAA,OACA,OAAA,QACA,oBAAA,KAAA,iBAAA,KAAA,YAAA,KACA,OAAA,2BAAA,MAAA,2BvBjBE,cAAA,4BgBfF,iBAAA,iBDYI,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCQhBN,KRiBQ,WAAA,MQqBN,WACE,MAAA,0BAEA,iBAAA,uBACA,aAAA,iCAGF,sBAEE,MAAA,oBACA,iBAAA,iBACA,aAAA,2BAGF,mBACE,MAAA,0BPrDF,iBAAA,uBOuDE,aAAA,iCACA,QAAA,EAKE,WAAA,+BAIJ,8BACE,aAAA,iCACA,QAAA,EAKE,WAAA,+BAIJ,wBAAA,YAAA,UAAA,wBAAA,6BAKE,MAAA,2BACA,iBAAA,wBAGA,aAAA,kCAGA,sCAAA,0BAAA,wBAAA,sCAAA,2CAKI,WAAA,+BAKN,cAAA,cAAA,uBAGE,MAAA,6BACA,eAAA,KACA,iBAAA,0BAEA,aAAA,oCACA,QAAA,+BAYF,aCtGA,eAAA,KACA,YAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,EAAA,CAAA,GAAA,CAAA,IACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,KACA,qBAAA,QACA,+BAAA,QDyFA,eCtGA,eAAA,KACA,YAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,GAAA,CAAA,GAAA,CAAA,IACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,KACA,qBAAA,QACA,+BAAA,QDyFA,aCtGA,eAAA,KACA,YAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,EAAA,CAAA,GAAA,CAAA,IACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,KACA,qBAAA,QACA,+BAAA,QDyFA,UCtGA,eAAA,KACA,YAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,EAAA,CAAA,GAAA,CAAA,IACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,KACA,qBAAA,QACA,+BAAA,QDyFA,aCtGA,eAAA,KACA,YAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,GAAA,CAAA,GAAA,CAAA,EACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,KACA,qBAAA,QACA,+BAAA,QDyFA,YCtGA,eAAA,KACA,YAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,GAAA,CAAA,EAAA,CAAA,GACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,KACA,qBAAA,QACA,+BAAA,QDyFA,WCtGA,eAAA,KACA,YAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,GAAA,CAAA,GAAA,CAAA,IACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,KACA,qBAAA,QACA,+BAAA,QDyFA,UCtGA,eAAA,KACA,YAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,EAAA,CAAA,EAAA,CAAA,GACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,KACA,qBAAA,QACA,+BAAA,QDmHA,qBCvGA,eAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,EAAA,CAAA,GAAA,CAAA,IACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,QACA,qBAAA,YACA,+BAAA,QACA,cAAA,KD0FA,uBCvGA,eAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,GAAA,CAAA,GAAA,CAAA,IACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,QACA,qBAAA,YACA,+BAAA,QACA,cAAA,KD0FA,qBCvGA,eAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,EAAA,CAAA,GAAA,CAAA,GACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,QACA,qBAAA,YACA,+BAAA,QACA,cAAA,KD0FA,kBCvGA,eAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,EAAA,CAAA,GAAA,CAAA,IACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,QACA,qBAAA,YACA,+BAAA,QACA,cAAA,KD0FA,qBCvGA,eAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,GAAA,CAAA,GAAA,CAAA,EACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,QACA,qBAAA,YACA,+BAAA,QACA,cAAA,KD0FA,oBCvGA,eAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,GAAA,CAAA,EAAA,CAAA,GACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,QACA,qBAAA,YACA,+BAAA,QACA,cAAA,KD0FA,mBCvGA,eAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,GAAA,CAAA,GAAA,CAAA,IACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,QACA,qBAAA,YACA,+BAAA,QACA,cAAA,KD0FA,kBCvGA,eAAA,QACA,sBAAA,QACA,qBAAA,KACA,kBAAA,QACA,4BAAA,QACA,0BAAA,EAAA,CAAA,EAAA,CAAA,GACA,sBAAA,KACA,mBAAA,QACA,6BAAA,QACA,uBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,QACA,qBAAA,YACA,+BAAA,QACA,cAAA,KDsGF,UACE,qBAAA,IACA,eAAA,qBACA,YAAA,YACA,sBAAA,YACA,qBAAA,2BACA,4BAAA,YACA,sBAAA,2BACA,6BAAA,YACA,wBAAA,QACA,+BAAA,YACA,oBAAA,KACA,0BAAA,EAAA,CAAA,GAAA,CAAA,IAEA,gBAAA,UAUA,wBACE,MAAA,oBAGF,gBACE,MAAA,0BAWJ,mBAAA,QCxIE,mBAAA,OACA,mBAAA,K3BoOI,mBAAA,Q2BlOJ,uBAAA,ODyIF,mBAAA,QC5IE,mBAAA,QACA,mBAAA,O3BoOI,mBAAA,S2BlOJ,uBAAA,QCnEF,MVgBM,WAAA,QAAA,KAAA,OAIA,uCUpBN,MVqBQ,WAAA,MUlBN,iBACE,QAAA,EAMF,qBACE,QAAA,KAIJ,YACE,OAAA,EACA,SAAA,OVDI,WAAA,OAAA,KAAA,KAIA,uCULN,YVMQ,WAAA,MUDN,gCACE,MAAA,EACA,OAAA,KVNE,WAAA,MAAA,KAAA,KAIA,uCUAJ,gCVCM,WAAA,MhBuoGR,UAGA,iBAJA,SAEA,W2B5pGA,Q3B6pGA,e2BvpGE,SAAA,SAGF,iBACE,YAAA,OCmBE,wBACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAhCJ,WAAA,KAAA,MACA,aAAA,KAAA,MAAA,YACA,cAAA,EACA,YAAA,KAAA,MAAA,YAqDE,8BACE,YAAA,EDzCN,eAEE,qBAAA,KACA,wBAAA,MACA,wBAAA,EACA,wBAAA,OACA,qBAAA,S7B6QI,wBAAA,K6B3QJ,oBAAA,QACA,iBAAA,KACA,2BAAA,mCACA,4BAAA,SACA,2BAAA,IACA,kCAAA,qBACA,yBAAA,mCACA,+BAAA,OACA,yBAAA,EAAA,OAAA,KAAA,oBACA,yBAAA,QACA,+BAAA,QACA,4BAAA,QACA,gCAAA,KACA,6BAAA,QACA,kCAAA,QACA,6BAAA,KACA,6BAAA,QACA,2BAAA,QACA,+BAAA,KACA,+BAAA,OAGA,SAAA,SACA,QAAA,0BACA,QAAA,KACA,UAAA,6BACA,QAAA,6BAAA,6BACA,OAAA,E7BgPI,UAAA,6B6B9OJ,MAAA,yBACA,WAAA,KACA,WAAA,KACA,iBAAA,sBACA,gBAAA,YACA,OAAA,gCAAA,MAAA,gC1BzCE,cAAA,iC0B6CF,+BACE,IAAA,KACA,KAAA,EACA,WAAA,0BAwBA,qBACE,cAAA,MAEA,qCACE,MAAA,KACA,KAAA,EAIJ,mBACE,cAAA,IAEA,mCACE,MAAA,EACA,KAAA,KnB1CJ,yBmB4BA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnB1CJ,yBmB4BA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnB1CJ,yBmB4BA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnB1CJ,0BmB4BA,wBACE,cAAA,MAEA,wCACE,MAAA,KACA,KAAA,EAIJ,sBACE,cAAA,IAEA,sCACE,MAAA,EACA,KAAA,MnB1CJ,0BmB4BA,yBACE,cAAA,MAEA,yCACE,MAAA,KACA,KAAA,EAIJ,uBACE,cAAA,IAEA,uCACE,MAAA,EACA,KAAA,MAUN,uCACE,IAAA,KACA,OAAA,KACA,WAAA,EACA,cAAA,0BCzFA,gCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAzBJ,WAAA,EACA,aAAA,KAAA,MAAA,YACA,cAAA,KAAA,MACA,YAAA,KAAA,MAAA,YA8CE,sCACE,YAAA,EDqEJ,wCACE,IAAA,EACA,MAAA,KACA,KAAA,KACA,WAAA,EACA,YAAA,0BCvGA,iCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAlBJ,WAAA,KAAA,MAAA,YACA,aAAA,EACA,cAAA,KAAA,MAAA,YACA,YAAA,KAAA,MAuCE,uCACE,YAAA,ED+EF,iCACE,eAAA,EAMJ,0CACE,IAAA,EACA,MAAA,KACA,KAAA,KACA,WAAA,EACA,aAAA,0BCxHA,mCACE,QAAA,aACA,YAAA,OACA,eAAA,OACA,QAAA,GAWA,mCACE,QAAA,KAGF,oCACE,QAAA,aACA,aAAA,OACA,eAAA,OACA,QAAA,GA9BN,WAAA,KAAA,MAAA,YACA,aAAA,KAAA,MACA,cAAA,KAAA,MAAA,YAiCE,yCACE,YAAA,EDgGF,oCACE,eAAA,EAON,kBACE,OAAA,EACA,OAAA,oCAAA,EACA,SAAA,OACA,WAAA,IAAA,MAAA,8BACA,QAAA,EAMF,eACE,QAAA,MACA,MAAA,KACA,QAAA,kCAAA,kCACA,MAAA,KACA,YAAA,IACA,MAAA,8BACA,WAAA,QACA,gBAAA,KACA,YAAA,OACA,iBAAA,YACA,OAAA,EAEA,qBAAA,qBAEE,MAAA,oCVzLF,iBAAA,iCU8LA,sBAAA,sBAEE,MAAA,qCACA,gBAAA,KVjMF,iBAAA,kCUqMA,wBAAA,wBAEE,MAAA,uCACA,eAAA,KACA,iBAAA,YAMJ,oBACE,QAAA,MAIF,iBACE,QAAA,MACA,QAAA,oCAAA,oCACA,cAAA,E7B0EI,UAAA,Q6BxEJ,MAAA,gCACA,YAAA,OAIF,oBACE,QAAA,MACA,QAAA,kCAAA,kCACA,MAAA,8BAIF,oBAEE,oBAAA,QACA,iBAAA,QACA,2BAAA,mCACA,yBAAA,EACA,yBAAA,QACA,+BAAA,KACA,yBAAA,mCACA,4BAAA,0BACA,gCAAA,KACA,6BAAA,QACA,kCAAA,QACA,2BAAA,QErPF,W7Bs9GA,oB6Bp9GE,SAAA,SACA,QAAA,YACA,eAAA,O7Bw9GF,yB6Bt9GE,gBACE,SAAA,SACA,KAAA,EAAA,EAAA,K7B89GJ,4CACA,0CAIA,gCADA,gCADA,+BADA,+B6B39GE,mC7Bo9GF,iCAIA,uBADA,uBADA,sBADA,sB6B/8GI,QAAA,EAKJ,aACE,QAAA,KACA,UAAA,KACA,gBAAA,WAEA,0BACE,MAAA,KAIJ,W5BhBI,cAAA,QD0+GJ,wC6Bt9GE,6CAEE,YAAA,K7By9GJ,4CADA,kD6Bp9GE,uD5BVE,wBAAA,EACA,2BAAA,EDo+GJ,6C6Bj9GE,+B7Bg9GF,iCCt9GI,uBAAA,EACA,0BAAA,E4BwBJ,uBACE,cAAA,SACA,aAAA,SAEA,8BAAA,uCAAA,sCAGE,YAAA,EAGF,0CACE,aAAA,EAIJ,0CAAA,+BACE,cAAA,QACA,aAAA,QAGF,0CAAA,+BACE,cAAA,OACA,aAAA,OAoBF,oBACE,eAAA,OACA,YAAA,WACA,gBAAA,OAEA,yB7B+6GF,+B6B76GI,MAAA,K7Bi7GJ,iD6B96GE,2CAEE,WAAA,K7Bg7GJ,qD6B56GE,gE5B1FE,2BAAA,EACA,0BAAA,ED0gHJ,sD6B56GE,8B5B7GE,uBAAA,EACA,wBAAA,E6BxBJ,KAEE,wBAAA,KACA,wBAAA,OAEA,0BAAA,EACA,oBAAA,qBACA,0BAAA,2BACA,6BAAA,QAGA,QAAA,KACA,UAAA,KACA,aAAA,EACA,cAAA,EACA,WAAA,KAGF,UACE,QAAA,MACA,QAAA,6BAAA,6BhC4QI,UAAA,6BgC1QJ,YAAA,+BACA,MAAA,yBACA,gBAAA,KdbI,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,YAIA,uCcGN,UdFQ,WAAA,McWN,gBAAA,gBAEE,MAAA,+BAKF,mBACE,MAAA,kCACA,eAAA,KACA,OAAA,QAQJ,UAEE,2BAAA,IACA,2BAAA,QACA,4BAAA,SACA,sCAAA,QAAA,QAAA,QACA,gCAAA,QACA,6BAAA,KACA,uCAAA,QAAA,QAAA,KAGA,cAAA,gCAAA,MAAA,gCAEA,oBACE,cAAA,2CACA,WAAA,IACA,OAAA,gCAAA,MAAA,Y7BtCA,uBAAA,iCACA,wBAAA,iC6BwCA,0BAAA,0BAGE,UAAA,QACA,aAAA,2CAGF,6BAAA,6BAEE,MAAA,kCACA,iBAAA,YACA,aAAA,Y9B0iHN,mC8BtiHE,2BAEE,MAAA,qCACA,iBAAA,kCACA,aAAA,4CAGF,yBAEE,WAAA,2C7BjEA,uBAAA,EACA,wBAAA,E6B2EJ,WAEE,6BAAA,SACA,iCAAA,KACA,8BAAA,QAGA,qBACE,WAAA,IACA,OAAA,E7B9FA,cAAA,kC6BiGA,8BACE,MAAA,kCACA,iBAAA,YACA,aAAA,YAIJ,4B9B0hHF,2B8BxhHI,MAAA,sCbzHF,iBAAA,mCjBupHF,oB8BnhHE,oBAEE,KAAA,EAAA,EAAA,KACA,WAAA,O9BshHJ,yB8BjhHE,yBAEE,WAAA,EACA,UAAA,EACA,WAAA,OAMF,8B9B8gHF,mC8B7gHI,MAAA,KAUF,uBACE,QAAA,KAEF,qBACE,QAAA,MCpKJ,QAEE,sBAAA,EACA,sBAAA,OACA,kBAAA,oBACA,wBAAA,mBACA,2BAAA,mBACA,yBAAA,mBACA,4BAAA,UACA,6BAAA,KACA,4BAAA,QACA,wBAAA,mBACA,8BAAA,mBACA,+BAAA,OACA,8BAAA,QACA,8BAAA,QACA,8BAAA,QACA,4BAAA,4OACA,iCAAA,mBACA,kCAAA,SACA,gCAAA,QACA,+BAAA,WAAA,MAAA,YAGA,SAAA,SACA,QAAA,KACA,UAAA,KACA,YAAA,OACA,gBAAA,cACA,QAAA,2BAAA,2BAMA,mB/BwqHF,yBAGA,sBADA,sBADA,sBAGA,sBACA,uB+B5qHI,QAAA,KACA,UAAA,QACA,YAAA,OACA,gBAAA,cAoBJ,cACE,YAAA,iCACA,eAAA,iCACA,aAAA,kCjCkOI,UAAA,iCiChOJ,MAAA,6BACA,gBAAA,KACA,YAAA,OAEA,oBAAA,oBAEE,MAAA,mCAUJ,YAEE,wBAAA,EACA,wBAAA,OAEA,0BAAA,EACA,oBAAA,uBACA,0BAAA,6BACA,6BAAA,gCAGA,QAAA,KACA,eAAA,OACA,aAAA,EACA,cAAA,EACA,WAAA,K/BkpHF,6B+BhpHE,4BAEE,MAAA,8BAGF,2BACE,SAAA,OASJ,aACE,YAAA,MACA,eAAA,MACA,MAAA,uBAEA,e/B0oHF,qBADA,qB+BtoHI,MAAA,8BAaJ,iBACE,WAAA,KACA,UAAA,EAGA,YAAA,OAIF,gBACE,QAAA,mCAAA,mCjCiJI,UAAA,mCiC/IJ,YAAA,EACA,MAAA,uBACA,iBAAA,YACA,OAAA,uBAAA,MAAA,sC9BtIE,cAAA,uCeHE,WAAA,oCAIA,uCe+HN,gBf9HQ,WAAA,MewIN,sBACE,gBAAA,KAGF,sBACE,gBAAA,KACA,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,qCAMJ,qBACE,QAAA,aACA,MAAA,MACA,OAAA,MACA,eAAA,OACA,iBAAA,iCACA,kBAAA,UACA,oBAAA,OACA,gBAAA,KAGF,mBACE,WAAA,6BACA,WAAA,KvBxHE,yBuBoIA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,oCACA,aAAA,oCAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,6BAEE,SAAA,OACA,QAAA,KACA,UAAA,EACA,MAAA,eACA,OAAA,eACA,WAAA,kBACA,iBAAA,sBACA,OAAA,YACA,UAAA,ef5NJ,WAAA,KeiOI,+CACE,QAAA,KAGF,6CACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvB1LR,yBuBoIA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,oCACA,aAAA,oCAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,6BAEE,SAAA,OACA,QAAA,KACA,UAAA,EACA,MAAA,eACA,OAAA,eACA,WAAA,kBACA,iBAAA,sBACA,OAAA,YACA,UAAA,ef5NJ,WAAA,KeiOI,+CACE,QAAA,KAGF,6CACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvB1LR,yBuBoIA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,oCACA,aAAA,oCAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,6BAEE,SAAA,OACA,QAAA,KACA,UAAA,EACA,MAAA,eACA,OAAA,eACA,WAAA,kBACA,iBAAA,sBACA,OAAA,YACA,UAAA,ef5NJ,WAAA,KeiOI,+CACE,QAAA,KAGF,6CACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvB1LR,0BuBoIA,kBAEI,UAAA,OACA,gBAAA,WAEA,8BACE,eAAA,IAEA,6CACE,SAAA,SAGF,wCACE,cAAA,oCACA,aAAA,oCAIJ,qCACE,SAAA,QAGF,mCACE,QAAA,eACA,WAAA,KAGF,kCACE,QAAA,KAGF,6BAEE,SAAA,OACA,QAAA,KACA,UAAA,EACA,MAAA,eACA,OAAA,eACA,WAAA,kBACA,iBAAA,sBACA,OAAA,YACA,UAAA,ef5NJ,WAAA,KeiOI,+CACE,QAAA,KAGF,6CACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SvB1LR,0BuBoIA,mBAEI,UAAA,OACA,gBAAA,WAEA,+BACE,eAAA,IAEA,8CACE,SAAA,SAGF,yCACE,cAAA,oCACA,aAAA,oCAIJ,sCACE,SAAA,QAGF,oCACE,QAAA,eACA,WAAA,KAGF,mCACE,QAAA,KAGF,8BAEE,SAAA,OACA,QAAA,KACA,UAAA,EACA,MAAA,eACA,OAAA,eACA,WAAA,kBACA,iBAAA,sBACA,OAAA,YACA,UAAA,ef5NJ,WAAA,KeiOI,gDACE,QAAA,KAGF,8CACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,SAtDR,eAEI,UAAA,OACA,gBAAA,WAEA,2BACE,eAAA,IAEA,0CACE,SAAA,SAGF,qCACE,cAAA,oCACA,aAAA,oCAIJ,kCACE,SAAA,QAGF,gCACE,QAAA,eACA,WAAA,KAGF,+BACE,QAAA,KAGF,0BAEE,SAAA,OACA,QAAA,KACA,UAAA,EACA,MAAA,eACA,OAAA,eACA,WAAA,kBACA,iBAAA,sBACA,OAAA,YACA,UAAA,ef5NJ,WAAA,KeiOI,4CACE,QAAA,KAGF,0CACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,QAiBZ,aAEE,kBAAA,0BACA,wBAAA,0BACA,2BAAA,0BACA,yBAAA,KACA,wBAAA,KACA,8BAAA,KACA,iCAAA,yBACA,4BAAA,kPC/QF,MAEE,mBAAA,KACA,mBAAA,KACA,yBAAA,OACA,uBAAA,IACA,uBAAA,mCACA,wBAAA,SACA,qBAAA,EACA,8BAAA,qBACA,wBAAA,OACA,wBAAA,KACA,iBAAA,oBACA,oBAAA,EACA,iBAAA,EACA,gBAAA,EACA,aAAA,KACA,8BAAA,KACA,uBAAA,QAGA,SAAA,SACA,QAAA,KACA,eAAA,OACA,UAAA,EACA,OAAA,sBACA,UAAA,WACA,iBAAA,kBACA,gBAAA,WACA,OAAA,4BAAA,MAAA,4B/BdE,cAAA,6B+BkBF,SACE,aAAA,EACA,YAAA,EAGF,kBACE,WAAA,QACA,cAAA,QAEA,8BACE,iBAAA,E/BnBF,uBAAA,mCACA,wBAAA,mC+BsBA,6BACE,oBAAA,E/BVF,2BAAA,mCACA,0BAAA,mC+BgBF,+BhC+kIF,+BgC7kII,WAAA,EAIJ,WAGE,KAAA,EAAA,EAAA,KACA,QAAA,wBAAA,wBACA,MAAA,qBAGF,YACE,cAAA,8BAGF,eACE,WAAA,0CACA,cAAA,EAGF,sBACE,cAAA,EAQA,sBACE,YAAA,wBAQJ,aACE,QAAA,6BAAA,6BACA,cAAA,EACA,MAAA,yBACA,iBAAA,sBACA,cAAA,4BAAA,MAAA,4BAEA,yB/BxFE,cAAA,mCAAA,mCAAA,EAAA,E+B6FJ,aACE,QAAA,6BAAA,6BACA,MAAA,yBACA,iBAAA,sBACA,WAAA,4BAAA,MAAA,4BAEA,wB/BnGE,cAAA,EAAA,EAAA,mCAAA,mC+B6GJ,kBACE,aAAA,yCACA,cAAA,wCACA,YAAA,yCACA,cAAA,EAEA,mCACE,iBAAA,kBACA,oBAAA,kBAIJ,mBACE,aAAA,yCACA,YAAA,yCAIF,kBACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,mC/BrIE,cAAA,mC+ByIJ,UhC0jIA,iBADA,cgCtjIE,MAAA,KAGF,UhCyjIA,cC/rII,uBAAA,mCACA,wBAAA,mC+B0IJ,UhC0jIA,iBCvrII,2BAAA,mCACA,0BAAA,mC+ByIF,kBACE,cAAA,4BxBtHA,yBwBkHJ,YAQI,QAAA,KACA,UAAA,IAAA,KAGA,kBAEE,KAAA,EAAA,EAAA,GACA,cAAA,EAEA,wBACE,YAAA,EACA,YAAA,EAKA,mC/BtKJ,wBAAA,EACA,2BAAA,EDutIJ,gDgC/iIU,iDAGE,wBAAA,EhCgjIZ,gDgC9iIU,oDAGE,2BAAA,EAIJ,oC/BvKJ,uBAAA,EACA,0BAAA,EDqtIJ,iDgC5iIU,kDAGE,uBAAA,EhC6iIZ,iDgC3iIU,qDAGE,0BAAA,GC/NZ,WAEE,qBAAA,QACA,kBAAA,KACA,0BAAA,MAAA,MAAA,WAAA,CAAA,iBAAA,MAAA,WAAA,CAAA,aAAA,MAAA,WAAA,CAAA,WAAA,MAAA,WAAA,CAAA,cAAA,MAAA,KACA,4BAAA,uBACA,4BAAA,IACA,6BAAA,SACA,mCAAA,qBACA,6BAAA,QACA,6BAAA,KACA,yBAAA,QACA,sBAAA,uBACA,wBAAA,gRACA,8BAAA,QACA,kCAAA,gBACA,mCAAA,UAAA,KAAA,YACA,+BAAA,gRACA,sCAAA,QACA,oCAAA,EAAA,EAAA,EAAA,QAAA,yBACA,8BAAA,QACA,8BAAA,KACA,4BAAA,QACA,yBAAA,QAIF,kBACE,SAAA,SACA,QAAA,KACA,YAAA,OACA,MAAA,KACA,QAAA,kCAAA,kCnCiQI,UAAA,KmC/PJ,MAAA,8BACA,WAAA,KACA,iBAAA,2BACA,OAAA,EhCtBE,cAAA,EgCwBF,gBAAA,KjB3BI,WAAA,+BAIA,uCiBWN,kBjBVQ,WAAA,MiByBN,kCACE,MAAA,iCACA,iBAAA,8BACA,WAAA,MAAA,EAAA,4CAAA,EAAA,iCAEA,yCACE,iBAAA,oCACA,UAAA,uCAKJ,yBACE,YAAA,EACA,MAAA,mCACA,OAAA,mCACA,YAAA,KACA,QAAA,GACA,iBAAA,6BACA,kBAAA,UACA,gBAAA,mCjBlDE,WAAA,wCAIA,uCiBsCJ,yBjBrCM,WAAA,MiBiDN,wBACE,QAAA,EAGF,wBACE,QAAA,EACA,aAAA,2CACA,QAAA,EACA,WAAA,yCAIJ,kBACE,cAAA,EAGF,gBACE,MAAA,0BACA,iBAAA,uBACA,OAAA,iCAAA,MAAA,iCAEA,8BhC/DE,uBAAA,kCACA,wBAAA,kCgCiEA,gDhClEA,uBAAA,wCACA,wBAAA,wCgCsEF,oCACE,WAAA,EAIF,6BhC9DE,2BAAA,kCACA,0BAAA,kCgCiEE,yDhClEF,2BAAA,wCACA,0BAAA,wCgCsEA,iDhCvEA,2BAAA,kCACA,0BAAA,kCgC4EJ,gBACE,QAAA,mCAAA,mCASA,qCACE,aAAA,EAGF,iCACE,aAAA,EACA,YAAA,EhCpHA,cAAA,EgCuHA,6CAAgB,WAAA,EAChB,4CAAe,cAAA,EAGb,mDAAA,6DhC3HF,cAAA,EiCnBJ,YAEE,0BAAA,EACA,0BAAA,EACA,8BAAA,KAEA,mBAAA,EACA,8BAAA,EACA,8BAAA,QACA,+BAAA,OACA,kCAAA,QAGA,QAAA,KACA,UAAA,KACA,QAAA,+BAAA,+BACA,cAAA,mCpCqRI,UAAA,+BoCnRJ,WAAA,KACA,iBAAA,wBjCAE,cAAA,mCiCMF,kCACE,aAAA,oCAEA,0CACE,MAAA,KACA,cAAA,oCACA,MAAA,mCACA,QAAA,kCAIJ,wBACE,MAAA,uCCrCJ,YAEE,0BAAA,QACA,0BAAA,SrCkSI,0BAAA,KqChSJ,sBAAA,qBACA,mBAAA,KACA,6BAAA,IACA,6BAAA,QACA,8BAAA,SACA,4BAAA,2BACA,yBAAA,QACA,mCAAA,QACA,4BAAA,2BACA,yBAAA,QACA,iCAAA,EAAA,EAAA,EAAA,QAAA,yBACA,6BAAA,KACA,0BAAA,QACA,oCAAA,QACA,+BAAA,QACA,4BAAA,KACA,sCAAA,QAGA,QAAA,KhCpBA,aAAA,EACA,WAAA,KgCuBF,WACE,SAAA,SACA,QAAA,MACA,QAAA,+BAAA,+BrCsQI,UAAA,+BqCpQJ,MAAA,2BACA,gBAAA,KACA,iBAAA,wBACA,OAAA,kCAAA,MAAA,kCnBpBI,WAAA,MAAA,KAAA,WAAA,CAAA,iBAAA,KAAA,WAAA,CAAA,aAAA,KAAA,WAAA,CAAA,WAAA,KAAA,YAIA,uCmBQN,WnBPQ,WAAA,MmBkBN,iBACE,QAAA,EACA,MAAA,iCAEA,iBAAA,8BACA,aAAA,wCAGF,iBACE,QAAA,EACA,MAAA,iCACA,iBAAA,8BACA,QAAA,EACA,WAAA,sCAGF,mBAAA,kBAEE,QAAA,EACA,MAAA,kClBtDF,iBAAA,+BkBwDE,aAAA,yCAGF,qBAAA,oBAEE,MAAA,oCACA,eAAA,KACA,iBAAA,iCACA,aAAA,2CAKF,wCACE,YAAA,KAKE,kClC9BF,uBAAA,mCACA,0BAAA,mCkCmCE,iClClDF,wBAAA,mCACA,2BAAA,mCkCkEJ,eClGE,0BAAA,OACA,0BAAA,QtCgSI,0BAAA,QsC9RJ,8BAAA,ODmGF,eCtGE,0BAAA,OACA,0BAAA,QtCgSI,0BAAA,SsC9RJ,8BAAA,QCFF,OAEE,qBAAA,OACA,qBAAA,OvC6RI,qBAAA,OuC3RJ,uBAAA,IACA,iBAAA,KACA,yBAAA,SAGA,QAAA,aACA,QAAA,0BAAA,0BvCqRI,UAAA,0BuCnRJ,YAAA,4BACA,YAAA,EACA,MAAA,sBACA,WAAA,OACA,YAAA,OACA,eAAA,SpCJE,cAAA,8BoCSF,aACE,QAAA,KAKJ,YACE,SAAA,SACA,IAAA,KChCF,OAEE,cAAA,YACA,qBAAA,KACA,qBAAA,KACA,yBAAA,KACA,iBAAA,QACA,wBAAA,YACA,kBAAA,IAAA,MAAA,6BACA,yBAAA,SAGA,SAAA,SACA,QAAA,0BAAA,0BACA,cAAA,8BACA,MAAA,sBACA,iBAAA,mBACA,OAAA,uBrCFE,cAAA,8BqCOJ,eAEE,MAAA,QAIF,YACE,YAAA,IAQF,mBACE,cAAA,KAGA,8BACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,QAAA,EACA,QAAA,QAAA,KAgBF,eChEA,iBAAA,QACA,cAAA,QACA,wBAAA,QAMA,2BACE,MAAA,QDuDF,iBChEA,iBAAA,QACA,cAAA,QACA,wBAAA,QAMA,6BACE,MAAA,QDuDF,eChEA,iBAAA,QACA,cAAA,QACA,wBAAA,QAMA,2BACE,MAAA,QDuDF,YChEA,iBAAA,QACA,cAAA,QACA,wBAAA,QAMA,wBACE,MAAA,QDuDF,eChEA,iBAAA,QACA,cAAA,QACA,wBAAA,QAMA,2BACE,MAAA,QDuDF,cChEA,iBAAA,QACA,cAAA,QACA,wBAAA,QAMA,0BACE,MAAA,QDuDF,aChEA,iBAAA,QACA,cAAA,QACA,wBAAA,QAMA,yBACE,MAAA,QDuDF,YChEA,iBAAA,QACA,cAAA,QACA,wBAAA,QAMA,wBACE,MAAA,QCPF,gCACE,GAAK,sBAAA,MAKT,UAEE,qBAAA,K1CyRI,wBAAA,Q0CvRJ,iBAAA,QACA,4BAAA,SACA,yBAAA,MAAA,EAAA,IAAA,IAAA,qBACA,wBAAA,KACA,qBAAA,QACA,6BAAA,MAAA,KAAA,KAGA,QAAA,KACA,OAAA,0BACA,SAAA,O1C6QI,UAAA,6B0C3QJ,iBAAA,sBvCPE,cAAA,iCuCYJ,cACE,QAAA,KACA,eAAA,OACA,gBAAA,OACA,SAAA,OACA,MAAA,6BACA,WAAA,OACA,YAAA,OACA,iBAAA,0BxBvBI,WAAA,kCAIA,uCwBWN,cxBVQ,WAAA,MwBsBR,sBvBCE,iBAAA,iKuBCA,gBAAA,0BAAA,0BAIA,uBACE,UAAA,GAAA,OAAA,SAAA,qBAGE,uCAJJ,uBAKM,UAAA,MClDR,YAEE,sBAAA,QACA,mBAAA,KACA,6BAAA,qBACA,6BAAA,IACA,8BAAA,SACA,+BAAA,KACA,+BAAA,OACA,6BAAA,QACA,mCAAA,QACA,gCAAA,QACA,oCAAA,QACA,iCAAA,QACA,+BAAA,QACA,4BAAA,KACA,6BAAA,KACA,0BAAA,QACA,oCAAA,QAGA,QAAA,KACA,eAAA,OAGA,aAAA,EACA,cAAA,ExCXE,cAAA,mCwCeJ,qBACE,gBAAA,KACA,cAAA,QAEA,8CAEE,QAAA,uBAAA,KACA,kBAAA,QASJ,wBACE,MAAA,KACA,MAAA,kCACA,WAAA,QAGA,8BAAA,8BAEE,QAAA,EACA,MAAA,wCACA,gBAAA,KACA,iBAAA,qCAGF,+BACE,MAAA,yCACA,iBAAA,sCAQJ,iBACE,SAAA,SACA,QAAA,MACA,QAAA,oCAAA,oCACA,MAAA,2BACA,gBAAA,KACA,iBAAA,wBACA,OAAA,kCAAA,MAAA,kCAEA,6BxCvDE,uBAAA,QACA,wBAAA,QwC0DF,4BxC7CE,2BAAA,QACA,0BAAA,QwCgDF,0BAAA,0BAEE,MAAA,oCACA,eAAA,KACA,iBAAA,iCAIF,wBACE,QAAA,EACA,MAAA,kCACA,iBAAA,+BACA,aAAA,yCAIF,kCACE,iBAAA,EAEA,yCACE,WAAA,6CACA,iBAAA,kCAaF,uBACE,eAAA,IAGE,qExCvDJ,0BAAA,mCAZA,wBAAA,EwCwEI,qExCxEJ,wBAAA,mCAYA,0BAAA,EwCiEI,+CACE,WAAA,EAGF,yDACE,iBAAA,kCACA,kBAAA,EAEA,gEACE,YAAA,6CACA,kBAAA,kCjCtFR,yBiC8DA,0BACE,eAAA,IAGE,wExCvDJ,0BAAA,mCAZA,wBAAA,EwCwEI,wExCxEJ,wBAAA,mCAYA,0BAAA,EwCiEI,kDACE,WAAA,EAGF,4DACE,iBAAA,kCACA,kBAAA,EAEA,mEACE,YAAA,6CACA,kBAAA,mCjCtFR,yBiC8DA,0BACE,eAAA,IAGE,wExCvDJ,0BAAA,mCAZA,wBAAA,EwCwEI,wExCxEJ,wBAAA,mCAYA,0BAAA,EwCiEI,kDACE,WAAA,EAGF,4DACE,iBAAA,kCACA,kBAAA,EAEA,mEACE,YAAA,6CACA,kBAAA,mCjCtFR,yBiC8DA,0BACE,eAAA,IAGE,wExCvDJ,0BAAA,mCAZA,wBAAA,EwCwEI,wExCxEJ,wBAAA,mCAYA,0BAAA,EwCiEI,kDACE,WAAA,EAGF,4DACE,iBAAA,kCACA,kBAAA,EAEA,mEACE,YAAA,6CACA,kBAAA,mCjCtFR,0BiC8DA,0BACE,eAAA,IAGE,wExCvDJ,0BAAA,mCAZA,wBAAA,EwCwEI,wExCxEJ,wBAAA,mCAYA,0BAAA,EwCiEI,kDACE,WAAA,EAGF,4DACE,iBAAA,kCACA,kBAAA,EAEA,mEACE,YAAA,6CACA,kBAAA,mCjCtFR,0BiC8DA,2BACE,eAAA,IAGE,yExCvDJ,0BAAA,mCAZA,wBAAA,EwCwEI,yExCxEJ,wBAAA,mCAYA,0BAAA,EwCiEI,mDACE,WAAA,EAGF,6DACE,iBAAA,kCACA,kBAAA,EAEA,oEACE,YAAA,6CACA,kBAAA,mCAcZ,kBxChJI,cAAA,EwCmJF,mCACE,aAAA,EAAA,EAAA,kCAEA,8CACE,oBAAA,ECtKJ,yBACE,MAAA,QACA,iBAAA,QAGE,sDAAA,sDAEE,MAAA,QACA,iBAAA,QAGF,uDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,2BACE,MAAA,QACA,iBAAA,QAGE,wDAAA,wDAEE,MAAA,QACA,iBAAA,QAGF,yDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,yBACE,MAAA,QACA,iBAAA,QAGE,sDAAA,sDAEE,MAAA,QACA,iBAAA,QAGF,uDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,sBACE,MAAA,QACA,iBAAA,QAGE,mDAAA,mDAEE,MAAA,QACA,iBAAA,QAGF,oDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,yBACE,MAAA,QACA,iBAAA,QAGE,sDAAA,sDAEE,MAAA,QACA,iBAAA,QAGF,uDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,wBACE,MAAA,QACA,iBAAA,QAGE,qDAAA,qDAEE,MAAA,QACA,iBAAA,QAGF,sDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,uBACE,MAAA,QACA,iBAAA,QAGE,oDAAA,oDAEE,MAAA,QACA,iBAAA,QAGF,qDACE,MAAA,KACA,iBAAA,QACA,aAAA,QAdN,sBACE,MAAA,QACA,iBAAA,QAGE,mDAAA,mDAEE,MAAA,QACA,iBAAA,QAGF,oDACE,MAAA,KACA,iBAAA,QACA,aAAA,QCbR,WACE,WAAA,YACA,MAAA,IACA,OAAA,IACA,QAAA,MAAA,MACA,MAAA,KACA,WAAA,YAAA,kUAAA,MAAA,CAAA,IAAA,KAAA,UACA,OAAA,E1COE,cAAA,Q0CLF,QAAA,GAGA,iBACE,MAAA,KACA,gBAAA,KACA,QAAA,IAGF,iBACE,QAAA,EACA,WAAA,EAAA,EAAA,EAAA,OAAA,qBACA,QAAA,EAGF,oBAAA,oBAEE,eAAA,KACA,oBAAA,KAAA,iBAAA,KAAA,YAAA,KACA,QAAA,IAIJ,iBACE,OAAA,UAAA,gBAAA,iBCtCF,OAEE,kBAAA,KACA,qBAAA,QACA,qBAAA,OACA,mBAAA,OACA,qBAAA,M9C+RI,qBAAA,S8C7RJ,iBAAA,EACA,cAAA,0BACA,wBAAA,IACA,wBAAA,mCACA,yBAAA,SACA,sBAAA,EAAA,OAAA,KAAA,oBACA,wBAAA,QACA,qBAAA,0BACA,+BAAA,oBAGA,MAAA,0BACA,UAAA,K9CiRI,UAAA,0B8C/QJ,MAAA,sBACA,eAAA,KACA,iBAAA,mBACA,gBAAA,YACA,OAAA,6BAAA,MAAA,6BACA,WAAA,2B3CRE,cAAA,8B2CWF,eACE,QAAA,EAGF,kBACE,QAAA,KAIJ,iBACE,kBAAA,KAEA,SAAA,SACA,QAAA,uBACA,MAAA,oBAAA,MAAA,iBAAA,MAAA,YACA,UAAA,KACA,eAAA,KAEA,mCACE,cAAA,wBAIJ,cACE,QAAA,KACA,YAAA,OACA,QAAA,0BAAA,0BACA,MAAA,6BACA,iBAAA,0BACA,gBAAA,YACA,cAAA,6BAAA,MAAA,oC3ChCE,uBAAA,mEACA,wBAAA,mE2CkCF,yBACE,aAAA,sCACA,YAAA,0BAIJ,YACE,QAAA,0BACA,UAAA,WC9DF,OAEE,kBAAA,KACA,iBAAA,MACA,mBAAA,KACA,kBAAA,OACA,iBAAA,EACA,cAAA,KACA,wBAAA,mCACA,wBAAA,IACA,yBAAA,OACA,sBAAA,EAAA,SAAA,QAAA,qBACA,+BAAA,mBACA,4BAAA,KACA,4BAAA,KACA,0BAAA,KAAA,KACA,+BAAA,uBACA,+BAAA,IACA,6BAAA,IACA,sBAAA,OACA,qBAAA,EACA,+BAAA,uBACA,+BAAA,IAGA,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,uBACA,QAAA,KACA,MAAA,KACA,OAAA,KACA,WAAA,OACA,WAAA,KAGA,QAAA,EAOF,cACE,SAAA,SACA,MAAA,KACA,OAAA,uBAEA,eAAA,KAGA,0B7B5CI,WAAA,UAAA,IAAA,S6B8CF,UAAA,mB7B1CE,uC6BwCJ,0B7BvCM,WAAA,M6B2CN,0BACE,UAAA,KAIF,kCACE,UAAA,YAIJ,yBACE,OAAA,wCAEA,wCACE,WAAA,KACA,SAAA,OAGF,qCACE,WAAA,KAIJ,uBACE,QAAA,KACA,YAAA,OACA,WAAA,wCAIF,eACE,SAAA,SACA,QAAA,KACA,eAAA,OACA,MAAA,KAEA,MAAA,sBACA,eAAA,KACA,iBAAA,mBACA,gBAAA,YACA,OAAA,6BAAA,MAAA,6B5CrFE,cAAA,8B4CyFF,QAAA,EAIF,gBAEE,qBAAA,KACA,iBAAA,KACA,sBAAA,IClHA,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,0BACA,MAAA,MACA,OAAA,MACA,iBAAA,sBAGA,qBAAS,QAAA,EACT,qBAAS,QAAA,2BDgHX,cACE,QAAA,KACA,YAAA,EACA,YAAA,OACA,gBAAA,cACA,QAAA,+BACA,cAAA,oCAAA,MAAA,oC5CtGE,uBAAA,oCACA,wBAAA,oC4CwGF,yBACE,QAAA,4CAAA,4CACA,OAAA,6CAAA,6CAAA,6CAAA,KAKJ,aACE,cAAA,EACA,YAAA,kCAKF,YACE,SAAA,SAGA,KAAA,EAAA,EAAA,KACA,QAAA,wBAIF,cACE,QAAA,KACA,YAAA,EACA,UAAA,KACA,YAAA,OACA,gBAAA,SACA,QAAA,gEACA,iBAAA,0BACA,WAAA,oCAAA,MAAA,oC5C1HE,2BAAA,oCACA,0BAAA,oC4C+HF,gBACE,OAAA,sCrC5GA,yBqCkHF,OACE,kBAAA,QACA,sBAAA,EAAA,OAAA,KAAA,oBAIF,cACE,UAAA,sBACA,aAAA,KACA,YAAA,KAGF,UACE,iBAAA,OrC/HA,yBqCoIF,U7CwnKF,U6CtnKI,iBAAA,OrCtIA,0BqC2IF,UACE,iBAAA,QAUA,kBACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,iCACE,OAAA,KACA,OAAA,E5C1MJ,cAAA,ED6zKJ,gC6C/mKM,gC5C9MF,cAAA,E4CmNE,8BACE,WAAA,KrC3JJ,4BqCyIA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C1MJ,cAAA,EDi1KJ,wC6CnoKM,wC5C9MF,cAAA,E4CmNE,sCACE,WAAA,MrC3JJ,4BqCyIA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C1MJ,cAAA,EDq2KJ,wC6CvpKM,wC5C9MF,cAAA,E4CmNE,sCACE,WAAA,MrC3JJ,4BqCyIA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C1MJ,cAAA,EDy3KJ,wC6C3qKM,wC5C9MF,cAAA,E4CmNE,sCACE,WAAA,MrC3JJ,6BqCyIA,0BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,yCACE,OAAA,KACA,OAAA,E5C1MJ,cAAA,ED64KJ,wC6C/rKM,wC5C9MF,cAAA,E4CmNE,sCACE,WAAA,MrC3JJ,6BqCyIA,2BACE,MAAA,MACA,UAAA,KACA,OAAA,KACA,OAAA,EAEA,0CACE,OAAA,KACA,OAAA,E5C1MJ,cAAA,EDi6KJ,yC6CntKM,yC5C9MF,cAAA,E4CmNE,uCACE,WAAA,MEtOR,SAEE,oBAAA,KACA,uBAAA,MACA,uBAAA,OACA,uBAAA,QACA,oBAAA,EjD8RI,uBAAA,SiD5RJ,mBAAA,KACA,gBAAA,KACA,2BAAA,SACA,qBAAA,IACA,yBAAA,OACA,0BAAA,OAGA,QAAA,yBACA,QAAA,MACA,QAAA,+BACA,OAAA,yBCnBA,YAAA,0BAEA,WAAA,OACA,YAAA,IACA,YAAA,IACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,OACA,WAAA,OACA,YAAA,OACA,aAAA,OACA,WAAA,KlDsRI,UAAA,4BiD1QJ,UAAA,WACA,QAAA,EAEA,cAAS,QAAA,0BAET,wBACE,QAAA,MACA,MAAA,8BACA,OAAA,+BAEA,gCACE,SAAA,SACA,QAAA,GACA,aAAA,YACA,aAAA,MAKN,4DAAA,+BACE,OAAA,EAEA,oEAAA,uCACE,IAAA,KACA,aAAA,+BAAA,yCAAA,EACA,iBAAA,qBAKJ,8DAAA,+BACE,KAAA,EACA,MAAA,+BACA,OAAA,8BAEA,sEAAA,uCACE,MAAA,KACA,aAAA,yCAAA,+BAAA,yCAAA,EACA,mBAAA,qBAMJ,+DAAA,kCACE,IAAA,EAEA,uEAAA,0CACE,OAAA,KACA,aAAA,EAAA,yCAAA,+BACA,oBAAA,qBAKJ,6DAAA,iCACE,MAAA,EACA,MAAA,+BACA,OAAA,8BAEA,qEAAA,yCACE,KAAA,KACA,aAAA,yCAAA,EAAA,yCAAA,+BACA,kBAAA,qBAsBJ,eACE,UAAA,4BACA,QAAA,4BAAA,4BACA,MAAA,wBACA,WAAA,OACA,iBAAA,qB9ClGE,cAAA,gCgDnBJ,SAEE,oBAAA,KACA,uBAAA,MnDkSI,uBAAA,SmDhSJ,gBAAA,KACA,0BAAA,IACA,0BAAA,mCACA,2BAAA,OACA,iCAAA,mBACA,wBAAA,EAAA,OAAA,KAAA,oBACA,8BAAA,KACA,8BAAA,OnDyRI,8BAAA,KmDvRJ,0BAAA,EACA,uBAAA,QACA,4BAAA,KACA,4BAAA,KACA,wBAAA,QACA,yBAAA,KACA,0BAAA,OACA,0BAAA,+BAGA,QAAA,yBACA,QAAA,MACA,UAAA,4BDzBA,YAAA,0BAEA,WAAA,OACA,YAAA,IACA,YAAA,IACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,OACA,WAAA,OACA,YAAA,OACA,aAAA,OACA,WAAA,KlDsRI,UAAA,4BmDrQJ,UAAA,WACA,iBAAA,qBACA,gBAAA,YACA,OAAA,+BAAA,MAAA,+BhDhBE,cAAA,gCgDoBF,wBACE,QAAA,MACA,MAAA,8BACA,OAAA,+BAEA,+BAAA,gCAEE,SAAA,SACA,QAAA,MACA,QAAA,GACA,aAAA,YACA,aAAA,MACA,aAAA,EAMJ,4DAAA,+BACE,OAAA,6EAEA,mEAAA,oEAAA,sCAAA,uCAEE,aAAA,+BAAA,yCAAA,EAGF,oEAAA,uCACE,OAAA,EACA,iBAAA,+BAGF,mEAAA,sCACE,OAAA,+BACA,iBAAA,qBAOJ,8DAAA,+BACE,KAAA,6EACA,MAAA,+BACA,OAAA,8BAEA,qEAAA,sEAAA,sCAAA,uCAEE,aAAA,yCAAA,+BAAA,yCAAA,EAGF,sEAAA,uCACE,KAAA,EACA,mBAAA,+BAGF,qEAAA,sCACE,KAAA,+BACA,mBAAA,qBAQJ,+DAAA,kCACE,IAAA,6EAEA,sEAAA,uEAAA,yCAAA,0CAEE,aAAA,EAAA,yCAAA,+BAGF,uEAAA,0CACE,IAAA,EACA,oBAAA,+BAGF,sEAAA,yCACE,IAAA,+BACA,oBAAA,qBAKJ,wEAAA,2CACE,SAAA,SACA,IAAA,EACA,KAAA,IACA,QAAA,MACA,MAAA,8BACA,YAAA,0CACA,QAAA,GACA,cAAA,+BAAA,MAAA,4BAMF,6DAAA,iCACE,MAAA,6EACA,MAAA,+BACA,OAAA,8BAEA,oEAAA,qEAAA,wCAAA,yCAEE,aAAA,yCAAA,EAAA,yCAAA,+BAGF,qEAAA,yCACE,MAAA,EACA,kBAAA,+BAGF,oEAAA,wCACE,MAAA,+BACA,kBAAA,qBAuBN,gBACE,QAAA,mCAAA,mCACA,cAAA,EnDiHI,UAAA,mCmD/GJ,MAAA,+BACA,iBAAA,4BACA,cAAA,+BAAA,MAAA,+BhD5JE,uBAAA,sCACA,wBAAA,sCgD8JF,sBACE,QAAA,KAIJ,cACE,QAAA,iCAAA,iCACA,MAAA,6BCrLF,UACE,SAAA,SAGF,wBACE,aAAA,MAGF,gBACE,SAAA,SACA,MAAA,KACA,SAAA,OCtBA,uBACE,QAAA,MACA,MAAA,KACA,QAAA,GDuBJ,eACE,SAAA,SACA,QAAA,KACA,MAAA,KACA,MAAA,KACA,aAAA,MACA,4BAAA,OAAA,oBAAA,OlClBI,WAAA,UAAA,IAAA,YAIA,uCkCQN,elCPQ,WAAA,MhB6sLR,oBACA,oBkD7rLA,sBAGE,QAAA,MlDgsLF,0BkD5rLA,8CAEE,UAAA,iBlD+rLF,4BkD5rLA,4CAEE,UAAA,kBAWA,8BACE,QAAA,EACA,oBAAA,QACA,UAAA,KlDurLJ,uDACA,qDkDrrLE,qCAGE,QAAA,EACA,QAAA,ElDsrLJ,yCkDnrLE,2CAEE,QAAA,EACA,QAAA,ElC/DE,WAAA,QAAA,GAAA,IAIA,uChBkvLN,yCkD1rLE,2ClCvDM,WAAA,MhBuvLR,uBkDnrLA,uBAEE,SAAA,SACA,IAAA,EACA,OAAA,EACA,QAAA,EAEA,QAAA,KACA,YAAA,OACA,gBAAA,OACA,MAAA,IACA,QAAA,EACA,MAAA,KACA,WAAA,OACA,WAAA,IACA,OAAA,EACA,QAAA,GlCzFI,WAAA,QAAA,KAAA,KAIA,uChB2wLN,uBkDtsLA,uBlCpEQ,WAAA,MhBgxLR,6BADA,6BkDvrLE,6BAAA,6BAEE,MAAA,KACA,gBAAA,KACA,QAAA,EACA,QAAA,GAGJ,uBACE,KAAA,EAGF,uBACE,MAAA,ElD2rLF,4BkDtrLA,4BAEE,QAAA,aACA,MAAA,KACA,OAAA,KACA,kBAAA,UACA,oBAAA,IACA,gBAAA,KAAA,KAWF,4BACE,iBAAA,wPAEF,4BACE,iBAAA,yPAQF,qBACE,SAAA,SACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,EACA,QAAA,KACA,gBAAA,OACA,QAAA,EAEA,aAAA,IACA,cAAA,KACA,YAAA,IACA,WAAA,KAEA,sCACE,WAAA,YACA,KAAA,EAAA,EAAA,KACA,MAAA,KACA,OAAA,IACA,QAAA,EACA,aAAA,IACA,YAAA,IACA,YAAA,OACA,OAAA,QACA,iBAAA,KACA,gBAAA,YACA,OAAA,EAEA,WAAA,KAAA,MAAA,YACA,cAAA,KAAA,MAAA,YACA,QAAA,GlC5KE,WAAA,QAAA,IAAA,KAIA,uCkCwJJ,sClCvJM,WAAA,MkC2KN,6BACE,QAAA,EASJ,kBACE,SAAA,SACA,MAAA,IACA,OAAA,QACA,KAAA,IACA,YAAA,QACA,eAAA,QACA,MAAA,KACA,WAAA,OlDirLF,2CkD3qLE,2CAEE,OAAA,UAAA,eAGF,qDACE,iBAAA,KAGF,iCACE,MAAA,KlD4qLJ,gBoD14LA,cAEE,QAAA,aACA,MAAA,wBACA,OAAA,yBACA,eAAA,iCAEA,cAAA,IACA,UAAA,kCAAA,OAAA,SAAA,iCAIF,0BACE,GAAK,UAAA,gBAIP,gBAEE,mBAAA,KACA,oBAAA,KACA,4BAAA,SACA,0BAAA,OACA,6BAAA,MACA,4BAAA,eAGA,OAAA,+BAAA,MAAA,aACA,mBAAA,YAGF,mBAEE,mBAAA,KACA,oBAAA,KACA,0BAAA,MASF,wBACE,GACE,UAAA,SAEF,IACE,QAAA,EACA,UAAA,MAKJ,cAEE,mBAAA,KACA,oBAAA,KACA,4BAAA,SACA,6BAAA,MACA,4BAAA,aAGA,iBAAA,aACA,QAAA,EAGF,iBACE,mBAAA,KACA,oBAAA,KAIA,uCACE,gBpDw3LJ,coDt3LM,6BAAA,MC/EN,WAAA,cAAA,cAAA,cAAA,cAAA,eAEE,sBAAA,KACA,qBAAA,MACA,sBAAA,KACA,yBAAA,KACA,yBAAA,KACA,qBAAA,EACA,kBAAA,KACA,4BAAA,IACA,4BAAA,mCACA,0BAAA,EAAA,SAAA,QAAA,qB7C+DE,4B6C9CF,cAEI,SAAA,MACA,OAAA,EACA,QAAA,2BACA,QAAA,KACA,eAAA,OACA,UAAA,KACA,MAAA,0BACA,WAAA,OACA,iBAAA,uBACA,gBAAA,YACA,QAAA,ErC1BA,WAAA,UAAA,IAAA,aAIA,gEqCUJ,crCTM,WAAA,MRuDJ,4B6C9BE,8BACE,IAAA,EACA,KAAA,EACA,MAAA,0BACA,aAAA,iCAAA,MAAA,iCACA,UAAA,mB7CyBJ,4B6CtBE,4BACE,IAAA,EACA,MAAA,EACA,MAAA,0BACA,YAAA,iCAAA,MAAA,iCACA,UAAA,kB7CiBJ,4B6CdE,4BACE,IAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,cAAA,iCAAA,MAAA,iCACA,UAAA,mB7COJ,4B6CJE,+BACE,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,WAAA,iCAAA,MAAA,iCACA,UAAA,kB7CFJ,4B6CKE,gCAAA,sBAEE,UAAA,M7CPJ,4B6CUE,qBAAA,mBAAA,sBAGE,WAAA,S7C1BJ,yB6CjCF,cAiEM,sBAAA,KACA,4BAAA,EACA,iBAAA,sBAEA,gCACE,QAAA,KAGF,8BACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,QAEA,iBAAA,uB7CjCN,4B6C9CF,cAEI,SAAA,MACA,OAAA,EACA,QAAA,2BACA,QAAA,KACA,eAAA,OACA,UAAA,KACA,MAAA,0BACA,WAAA,OACA,iBAAA,uBACA,gBAAA,YACA,QAAA,ErC1BA,WAAA,UAAA,IAAA,aAIA,gEqCUJ,crCTM,WAAA,MRuDJ,4B6C9BE,8BACE,IAAA,EACA,KAAA,EACA,MAAA,0BACA,aAAA,iCAAA,MAAA,iCACA,UAAA,mB7CyBJ,4B6CtBE,4BACE,IAAA,EACA,MAAA,EACA,MAAA,0BACA,YAAA,iCAAA,MAAA,iCACA,UAAA,kB7CiBJ,4B6CdE,4BACE,IAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,cAAA,iCAAA,MAAA,iCACA,UAAA,mB7COJ,4B6CJE,+BACE,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,WAAA,iCAAA,MAAA,iCACA,UAAA,kB7CFJ,4B6CKE,gCAAA,sBAEE,UAAA,M7CPJ,4B6CUE,qBAAA,mBAAA,sBAGE,WAAA,S7C1BJ,yB6CjCF,cAiEM,sBAAA,KACA,4BAAA,EACA,iBAAA,sBAEA,gCACE,QAAA,KAGF,8BACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,QAEA,iBAAA,uB7CjCN,4B6C9CF,cAEI,SAAA,MACA,OAAA,EACA,QAAA,2BACA,QAAA,KACA,eAAA,OACA,UAAA,KACA,MAAA,0BACA,WAAA,OACA,iBAAA,uBACA,gBAAA,YACA,QAAA,ErC1BA,WAAA,UAAA,IAAA,aAIA,gEqCUJ,crCTM,WAAA,MRuDJ,4B6C9BE,8BACE,IAAA,EACA,KAAA,EACA,MAAA,0BACA,aAAA,iCAAA,MAAA,iCACA,UAAA,mB7CyBJ,4B6CtBE,4BACE,IAAA,EACA,MAAA,EACA,MAAA,0BACA,YAAA,iCAAA,MAAA,iCACA,UAAA,kB7CiBJ,4B6CdE,4BACE,IAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,cAAA,iCAAA,MAAA,iCACA,UAAA,mB7COJ,4B6CJE,+BACE,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,WAAA,iCAAA,MAAA,iCACA,UAAA,kB7CFJ,4B6CKE,gCAAA,sBAEE,UAAA,M7CPJ,4B6CUE,qBAAA,mBAAA,sBAGE,WAAA,S7C1BJ,yB6CjCF,cAiEM,sBAAA,KACA,4BAAA,EACA,iBAAA,sBAEA,gCACE,QAAA,KAGF,8BACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,QAEA,iBAAA,uB7CjCN,6B6C9CF,cAEI,SAAA,MACA,OAAA,EACA,QAAA,2BACA,QAAA,KACA,eAAA,OACA,UAAA,KACA,MAAA,0BACA,WAAA,OACA,iBAAA,uBACA,gBAAA,YACA,QAAA,ErC1BA,WAAA,UAAA,IAAA,aAIA,iEqCUJ,crCTM,WAAA,MRuDJ,6B6C9BE,8BACE,IAAA,EACA,KAAA,EACA,MAAA,0BACA,aAAA,iCAAA,MAAA,iCACA,UAAA,mB7CyBJ,6B6CtBE,4BACE,IAAA,EACA,MAAA,EACA,MAAA,0BACA,YAAA,iCAAA,MAAA,iCACA,UAAA,kB7CiBJ,6B6CdE,4BACE,IAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,cAAA,iCAAA,MAAA,iCACA,UAAA,mB7COJ,6B6CJE,+BACE,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,WAAA,iCAAA,MAAA,iCACA,UAAA,kB7CFJ,6B6CKE,gCAAA,sBAEE,UAAA,M7CPJ,6B6CUE,qBAAA,mBAAA,sBAGE,WAAA,S7C1BJ,0B6CjCF,cAiEM,sBAAA,KACA,4BAAA,EACA,iBAAA,sBAEA,gCACE,QAAA,KAGF,8BACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,QAEA,iBAAA,uB7CjCN,6B6C9CF,eAEI,SAAA,MACA,OAAA,EACA,QAAA,2BACA,QAAA,KACA,eAAA,OACA,UAAA,KACA,MAAA,0BACA,WAAA,OACA,iBAAA,uBACA,gBAAA,YACA,QAAA,ErC1BA,WAAA,UAAA,IAAA,aAIA,iEqCUJ,erCTM,WAAA,MRuDJ,6B6C9BE,+BACE,IAAA,EACA,KAAA,EACA,MAAA,0BACA,aAAA,iCAAA,MAAA,iCACA,UAAA,mB7CyBJ,6B6CtBE,6BACE,IAAA,EACA,MAAA,EACA,MAAA,0BACA,YAAA,iCAAA,MAAA,iCACA,UAAA,kB7CiBJ,6B6CdE,6BACE,IAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,cAAA,iCAAA,MAAA,iCACA,UAAA,mB7COJ,6B6CJE,gCACE,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,WAAA,iCAAA,MAAA,iCACA,UAAA,kB7CFJ,6B6CKE,iCAAA,uBAEE,UAAA,M7CPJ,6B6CUE,sBAAA,oBAAA,uBAGE,WAAA,S7C1BJ,0B6CjCF,eAiEM,sBAAA,KACA,4BAAA,EACA,iBAAA,sBAEA,iCACE,QAAA,KAGF,+BACE,QAAA,KACA,UAAA,EACA,QAAA,EACA,WAAA,QAEA,iBAAA,uBA/ER,WAEI,SAAA,MACA,OAAA,EACA,QAAA,2BACA,QAAA,KACA,eAAA,OACA,UAAA,KACA,MAAA,0BACA,WAAA,OACA,iBAAA,uBACA,gBAAA,YACA,QAAA,ErC1BA,WAAA,UAAA,IAAA,YAIA,uCqCUJ,WrCTM,WAAA,MqCyBF,2BACE,IAAA,EACA,KAAA,EACA,MAAA,0BACA,aAAA,iCAAA,MAAA,iCACA,UAAA,kBAGF,yBACE,IAAA,EACA,MAAA,EACA,MAAA,0BACA,YAAA,iCAAA,MAAA,iCACA,UAAA,iBAGF,yBACE,IAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,cAAA,iCAAA,MAAA,iCACA,UAAA,kBAGF,4BACE,MAAA,EACA,KAAA,EACA,OAAA,2BACA,WAAA,KACA,WAAA,iCAAA,MAAA,iCACA,UAAA,iBAGF,6BAAA,mBAEE,UAAA,KAGF,kBAAA,gBAAA,mBAGE,WAAA,QA2BR,oBPlHE,SAAA,MACA,IAAA,EACA,KAAA,EACA,QAAA,KACA,MAAA,MACA,OAAA,MACA,iBAAA,KAGA,yBAAS,QAAA,EACT,yBAAS,QAAA,GO4GX,kBACE,QAAA,KACA,YAAA,OACA,gBAAA,cACA,QAAA,8BAAA,8BAEA,6BACE,QAAA,yCAAA,yCACA,WAAA,0CACA,aAAA,0CACA,cAAA,0CAIJ,iBACE,cAAA,EACA,YAAA,IAGF,gBACE,UAAA,EACA,QAAA,8BAAA,8BACA,WAAA,KC9IF,aACE,QAAA,aACA,WAAA,IACA,eAAA,OACA,OAAA,KACA,iBAAA,aACA,QAAA,GAEA,yBACE,QAAA,aACA,QAAA,GAKJ,gBACE,WAAA,KAGF,gBACE,WAAA,KAGF,gBACE,WAAA,MAKA,+BACE,UAAA,iBAAA,GAAA,YAAA,SAIJ,4BACE,IACE,QAAA,IAIJ,kBACE,mBAAA,8DAAA,WAAA,8DACA,kBAAA,KAAA,KAAA,UAAA,KAAA,KACA,UAAA,iBAAA,GAAA,OAAA,SAGF,4BACE,KACE,sBAAA,MAAA,GAAA,cAAA,MAAA,IH9CF,iBACE,QAAA,MACA,MAAA,KACA,QAAA,GIAF,iBACE,MAAA,eACA,iBAAA,kDAFF,mBACE,MAAA,eACA,iBAAA,mDAFF,iBACE,MAAA,eACA,iBAAA,iDAFF,cACE,MAAA,eACA,iBAAA,kDAFF,iBACE,MAAA,eACA,iBAAA,iDAFF,gBACE,MAAA,eACA,iBAAA,iDAFF,eACE,MAAA,eACA,iBAAA,mDAFF,cACE,MAAA,eACA,iBAAA,gDCNF,cACE,MAAA,kBAGE,oBAAA,oBAEE,MAAA,kBANN,gBACE,MAAA,kBAGE,sBAAA,sBAEE,MAAA,kBANN,cACE,MAAA,kBAGE,oBAAA,oBAEE,MAAA,kBANN,WACE,MAAA,kBAGE,iBAAA,iBAEE,MAAA,kBANN,cACE,MAAA,kBAGE,oBAAA,oBAEE,MAAA,kBANN,aACE,MAAA,kBAGE,mBAAA,mBAEE,MAAA,kBANN,YACE,MAAA,kBAGE,kBAAA,kBAEE,MAAA,kBANN,WACE,MAAA,kBAGE,iBAAA,iBAEE,MAAA,kBCLR,OACE,SAAA,SACA,MAAA,KAEA,eACE,QAAA,MACA,YAAA,uBACA,QAAA,GAGF,SACE,SAAA,SACA,IAAA,EACA,KAAA,EACA,MAAA,KACA,OAAA,KAKF,WACE,kBAAA,KADF,WACE,kBAAA,IADF,YACE,kBAAA,OADF,YACE,kBAAA,eCrBJ,WACE,SAAA,MACA,IAAA,EACA,MAAA,EACA,KAAA,EACA,QAAA,KAGF,cACE,SAAA,MACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,KAQE,YACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,KAGF,eACE,SAAA,eAAA,SAAA,OACA,OAAA,EACA,QAAA,KlD+BF,yBkDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,KAGF,kBACE,SAAA,eAAA,SAAA,OACA,OAAA,EACA,QAAA,MlD+BF,yBkDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,KAGF,kBACE,SAAA,eAAA,SAAA,OACA,OAAA,EACA,QAAA,MlD+BF,yBkDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,KAGF,kBACE,SAAA,eAAA,SAAA,OACA,OAAA,EACA,QAAA,MlD+BF,0BkDxCA,eACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,KAGF,kBACE,SAAA,eAAA,SAAA,OACA,OAAA,EACA,QAAA,MlD+BF,0BkDxCA,gBACE,SAAA,eAAA,SAAA,OACA,IAAA,EACA,QAAA,KAGF,mBACE,SAAA,eAAA,SAAA,OACA,OAAA,EACA,QAAA,MC/BN,QACE,QAAA,KACA,eAAA,IACA,YAAA,OACA,WAAA,QAGF,QACE,QAAA,KACA,KAAA,EAAA,EAAA,KACA,eAAA,OACA,WAAA,QCRF,iB5DuxNA,0D6DnxNE,SAAA,mBACA,MAAA,cACA,OAAA,cACA,QAAA,YACA,OAAA,eACA,SAAA,iBACA,KAAA,wBACA,YAAA,iBACA,OAAA,YCXA,uBACE,SAAA,SACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EACA,QAAA,EACA,QAAA,GCRJ,eCAE,SAAA,OACA,cAAA,SACA,YAAA,OCNF,IACE,QAAA,aACA,WAAA,QACA,MAAA,IACA,WAAA,IACA,iBAAA,aACA,QAAA,IC4DM,gBAOI,eAAA,mBAPJ,WAOI,eAAA,cAPJ,cAOI,eAAA,iBAPJ,cAOI,eAAA,iBAPJ,mBAOI,eAAA,sBAPJ,gBAOI,eAAA,mBAPJ,aAOI,MAAA,eAPJ,WAOI,MAAA,gBAPJ,YAOI,MAAA,eAPJ,WAOI,QAAA,YAPJ,YAOI,QAAA,cAPJ,YAOI,QAAA,aAPJ,YAOI,QAAA,cAPJ,aAOI,QAAA,YAPJ,eAOI,SAAA,eAPJ,iBAOI,SAAA,iBAPJ,kBAOI,SAAA,kBAPJ,iBAOI,SAAA,iBAPJ,UAOI,QAAA,iBAPJ,gBAOI,QAAA,uBAPJ,SAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,SAOI,QAAA,gBAPJ,aAOI,QAAA,oBAPJ,cAOI,QAAA,qBAPJ,QAOI,QAAA,eAPJ,eAOI,QAAA,sBAPJ,QAOI,QAAA,eAPJ,QAOI,WAAA,EAAA,MAAA,KAAA,0BAPJ,WAOI,WAAA,EAAA,QAAA,OAAA,2BAPJ,WAOI,WAAA,EAAA,KAAA,KAAA,2BAPJ,aAOI,WAAA,eAPJ,iBAOI,SAAA,iBAPJ,mBAOI,SAAA,mBAPJ,mBAOI,SAAA,mBAPJ,gBAOI,SAAA,gBAPJ,iBAOI,SAAA,yBAAA,SAAA,iBAPJ,OAOI,IAAA,YAPJ,QAOI,IAAA,cAPJ,SAOI,IAAA,eAPJ,UAOI,OAAA,YAPJ,WAOI,OAAA,cAPJ,YAOI,OAAA,eAPJ,SAOI,KAAA,YAPJ,UAOI,KAAA,cAPJ,WAOI,KAAA,eAPJ,OAOI,MAAA,YAPJ,QAOI,MAAA,cAPJ,SAOI,MAAA,eAPJ,kBAOI,UAAA,+BAPJ,oBAOI,UAAA,2BAPJ,oBAOI,UAAA,2BAPJ,QAOI,OAAA,uBAAA,uBAAA,iCAPJ,UAOI,OAAA,YAPJ,YAOI,WAAA,uBAAA,uBAAA,iCAPJ,cAOI,WAAA,YAPJ,YAOI,aAAA,uBAAA,uBAAA,iCAPJ,cAOI,aAAA,YAPJ,eAOI,cAAA,uBAAA,uBAAA,iCAPJ,iBAOI,cAAA,YAPJ,cAOI,YAAA,uBAAA,uBAAA,iCAPJ,gBAOI,YAAA,YAPJ,gBAIQ,oBAAA,EAGJ,aAAA,+DAPJ,kBAIQ,oBAAA,EAGJ,aAAA,iEAPJ,gBAIQ,oBAAA,EAGJ,aAAA,+DAPJ,aAIQ,oBAAA,EAGJ,aAAA,4DAPJ,gBAIQ,oBAAA,EAGJ,aAAA,+DAPJ,eAIQ,oBAAA,EAGJ,aAAA,8DAPJ,cAIQ,oBAAA,EAGJ,aAAA,6DAPJ,aAIQ,oBAAA,EAGJ,aAAA,4DAPJ,cAIQ,oBAAA,EAGJ,aAAA,6DAjBJ,UACE,kBAAA,IADF,UACE,kBAAA,IADF,UACE,kBAAA,IADF,UACE,kBAAA,IADF,UACE,kBAAA,IADF,mBACE,oBAAA,IADF,mBACE,oBAAA,KADF,mBACE,oBAAA,IADF,mBACE,oBAAA,KADF,oBACE,oBAAA,EASF,MAOI,MAAA,cAPJ,MAOI,MAAA,cAPJ,MAOI,MAAA,cAPJ,OAOI,MAAA,eAPJ,QAOI,MAAA,eAPJ,QAOI,UAAA,eAPJ,QAOI,MAAA,gBAPJ,YAOI,UAAA,gBAPJ,MAOI,OAAA,cAPJ,MAOI,OAAA,cAPJ,MAOI,OAAA,cAPJ,OAOI,OAAA,eAPJ,QAOI,OAAA,eAPJ,QAOI,WAAA,eAPJ,QAOI,OAAA,gBAPJ,YAOI,WAAA,gBAPJ,WAOI,KAAA,EAAA,EAAA,eAPJ,UAOI,eAAA,cAPJ,aAOI,eAAA,iBAPJ,kBAOI,eAAA,sBAPJ,qBAOI,eAAA,yBAPJ,aAOI,UAAA,YAPJ,aAOI,UAAA,YAPJ,eAOI,YAAA,YAPJ,eAOI,YAAA,YAPJ,WAOI,UAAA,eAPJ,aAOI,UAAA,iBAPJ,mBAOI,UAAA,uBAPJ,uBAOI,gBAAA,qBAPJ,qBAOI,gBAAA,mBAPJ,wBAOI,gBAAA,iBAPJ,yBAOI,gBAAA,wBAPJ,wBAOI,gBAAA,uBAPJ,wBAOI,gBAAA,uBAPJ,mBAOI,YAAA,qBAPJ,iBAOI,YAAA,mBAPJ,oBAOI,YAAA,iBAPJ,sBAOI,YAAA,mBAPJ,qBAOI,YAAA,kBAPJ,qBAOI,cAAA,qBAPJ,mBAOI,cAAA,mBAPJ,sBAOI,cAAA,iBAPJ,uBAOI,cAAA,wBAPJ,sBAOI,cAAA,uBAPJ,uBAOI,cAAA,kBAPJ,iBAOI,WAAA,eAPJ,kBAOI,WAAA,qBAPJ,gBAOI,WAAA,mBAPJ,mBAOI,WAAA,iBAPJ,qBAOI,WAAA,mBAPJ,oBAOI,WAAA,kBAPJ,aAOI,MAAA,aAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,SAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,KAOI,OAAA,YAPJ,KAOI,OAAA,iBAPJ,KAOI,OAAA,gBAPJ,KAOI,OAAA,eAPJ,KAOI,OAAA,iBAPJ,KAOI,OAAA,eAPJ,QAOI,OAAA,eAPJ,MAOI,aAAA,YAAA,YAAA,YAPJ,MAOI,aAAA,iBAAA,YAAA,iBAPJ,MAOI,aAAA,gBAAA,YAAA,gBAPJ,MAOI,aAAA,eAAA,YAAA,eAPJ,MAOI,aAAA,iBAAA,YAAA,iBAPJ,MAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,MAOI,WAAA,YAAA,cAAA,YAPJ,MAOI,WAAA,iBAAA,cAAA,iBAPJ,MAOI,WAAA,gBAAA,cAAA,gBAPJ,MAOI,WAAA,eAAA,cAAA,eAPJ,MAOI,WAAA,iBAAA,cAAA,iBAPJ,MAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,MAOI,WAAA,YAPJ,MAOI,WAAA,iBAPJ,MAOI,WAAA,gBAPJ,MAOI,WAAA,eAPJ,MAOI,WAAA,iBAPJ,MAOI,WAAA,eAPJ,SAOI,WAAA,eAPJ,MAOI,aAAA,YAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,gBAPJ,MAOI,aAAA,eAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,eAPJ,SAOI,aAAA,eAPJ,MAOI,cAAA,YAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,gBAPJ,MAOI,cAAA,eAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,eAPJ,SAOI,cAAA,eAPJ,MAOI,YAAA,YAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,gBAPJ,MAOI,YAAA,eAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,eAPJ,SAOI,YAAA,eAPJ,KAOI,QAAA,YAPJ,KAOI,QAAA,iBAPJ,KAOI,QAAA,gBAPJ,KAOI,QAAA,eAPJ,KAOI,QAAA,iBAPJ,KAOI,QAAA,eAPJ,MAOI,cAAA,YAAA,aAAA,YAPJ,MAOI,cAAA,iBAAA,aAAA,iBAPJ,MAOI,cAAA,gBAAA,aAAA,gBAPJ,MAOI,cAAA,eAAA,aAAA,eAPJ,MAOI,cAAA,iBAAA,aAAA,iBAPJ,MAOI,cAAA,eAAA,aAAA,eAPJ,MAOI,YAAA,YAAA,eAAA,YAPJ,MAOI,YAAA,iBAAA,eAAA,iBAPJ,MAOI,YAAA,gBAAA,eAAA,gBAPJ,MAOI,YAAA,eAAA,eAAA,eAPJ,MAOI,YAAA,iBAAA,eAAA,iBAPJ,MAOI,YAAA,eAAA,eAAA,eAPJ,MAOI,YAAA,YAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,gBAPJ,MAOI,YAAA,eAPJ,MAOI,YAAA,iBAPJ,MAOI,YAAA,eAPJ,MAOI,cAAA,YAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,gBAPJ,MAOI,cAAA,eAPJ,MAOI,cAAA,iBAPJ,MAOI,cAAA,eAPJ,MAOI,eAAA,YAPJ,MAOI,eAAA,iBAPJ,MAOI,eAAA,gBAPJ,MAOI,eAAA,eAPJ,MAOI,eAAA,iBAPJ,MAOI,eAAA,eAPJ,MAOI,aAAA,YAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,gBAPJ,MAOI,aAAA,eAPJ,MAOI,aAAA,iBAPJ,MAOI,aAAA,eAPJ,OAOI,IAAA,YAPJ,OAOI,IAAA,iBAPJ,OAOI,IAAA,gBAPJ,OAOI,IAAA,eAPJ,OAOI,IAAA,iBAPJ,OAOI,IAAA,eAPJ,gBAOI,YAAA,mCAPJ,MAOI,UAAA,iCAPJ,MAOI,UAAA,gCAPJ,MAOI,UAAA,8BAPJ,MAOI,UAAA,gCAPJ,MAOI,UAAA,kBAPJ,MAOI,UAAA,eAPJ,YAOI,WAAA,iBAPJ,YAOI,WAAA,iBAPJ,UAOI,YAAA,cAPJ,YAOI,YAAA,kBAPJ,WAOI,YAAA,cAPJ,SAOI,YAAA,cAPJ,aAOI,YAAA,cAPJ,WAOI,YAAA,iBAPJ,MAOI,YAAA,YAPJ,OAOI,YAAA,eAPJ,SAOI,YAAA,cAPJ,OAOI,YAAA,YAPJ,YAOI,WAAA,eAPJ,UAOI,WAAA,gBAPJ,aAOI,WAAA,iBAPJ,sBAOI,gBAAA,eAPJ,2BAOI,gBAAA,oBAPJ,8BAOI,gBAAA,uBAPJ,gBAOI,eAAA,oBAPJ,gBAOI,eAAA,oBAPJ,iBAOI,eAAA,qBAPJ,WAOI,YAAA,iBAPJ,aAOI,YAAA,iBAPJ,YAOI,UAAA,qBAAA,WAAA,qBAPJ,cAIQ,kBAAA,EAGJ,MAAA,6DAPJ,gBAIQ,kBAAA,EAGJ,MAAA,+DAPJ,cAIQ,kBAAA,EAGJ,MAAA,6DAPJ,WAIQ,kBAAA,EAGJ,MAAA,0DAPJ,cAIQ,kBAAA,EAGJ,MAAA,6DAPJ,aAIQ,kBAAA,EAGJ,MAAA,4DAPJ,YAIQ,kBAAA,EAGJ,MAAA,2DAPJ,WAIQ,kBAAA,EAGJ,MAAA,0DAPJ,YAIQ,kBAAA,EAGJ,MAAA,2DAPJ,YAIQ,kBAAA,EAGJ,MAAA,2DAPJ,WAIQ,kBAAA,EAGJ,MAAA,gEAPJ,YAIQ,kBAAA,EAGJ,MAAA,kBAPJ,eAIQ,kBAAA,EAGJ,MAAA,yBAPJ,eAIQ,kBAAA,EAGJ,MAAA,+BAPJ,YAIQ,kBAAA,EAGJ,MAAA,kBAjBJ,iBACE,kBAAA,KADF,iBACE,kBAAA,IADF,iBACE,kBAAA,KADF,kBACE,kBAAA,EASF,YAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,cAIQ,gBAAA,EAGJ,iBAAA,6DAPJ,YAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,SAIQ,gBAAA,EAGJ,iBAAA,wDAPJ,YAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,WAIQ,gBAAA,EAGJ,iBAAA,0DAPJ,UAIQ,gBAAA,EAGJ,iBAAA,yDAPJ,SAIQ,gBAAA,EAGJ,iBAAA,wDAPJ,UAIQ,gBAAA,EAGJ,iBAAA,yDAPJ,UAIQ,gBAAA,EAGJ,iBAAA,yDAPJ,SAIQ,gBAAA,EAGJ,iBAAA,2DAPJ,gBAIQ,gBAAA,EAGJ,iBAAA,sBAjBJ,eACE,gBAAA,IADF,eACE,gBAAA,KADF,eACE,gBAAA,IADF,eACE,gBAAA,KADF,gBACE,gBAAA,EASF,aAOI,iBAAA,6BAPJ,iBAOI,oBAAA,cAAA,iBAAA,cAAA,YAAA,cAPJ,kBAOI,oBAAA,eAAA,iBAAA,eAAA,YAAA,eAPJ,kBAOI,oBAAA,eAAA,iBAAA,eAAA,YAAA,eAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,eAPJ,SAOI,cAAA,kCAPJ,WAOI,cAAA,YAPJ,WAOI,cAAA,qCAPJ,WAOI,cAAA,kCAPJ,WAOI,cAAA,qCAPJ,WAOI,cAAA,qCAPJ,WAOI,cAAA,sCAPJ,gBAOI,cAAA,cAPJ,cAOI,cAAA,uCAPJ,aAOI,uBAAA,kCAAA,wBAAA,kCAPJ,aAOI,wBAAA,kCAAA,2BAAA,kCAPJ,gBAOI,2BAAA,kCAAA,0BAAA,kCAPJ,eAOI,0BAAA,kCAAA,uBAAA,kCAPJ,SAOI,WAAA,kBAPJ,WAOI,WAAA,iB1DVR,yB0DGI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kB1DVR,yB0DGI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kB1DVR,yB0DGI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kB1DVR,0B0DGI,gBAOI,MAAA,eAPJ,cAOI,MAAA,gBAPJ,eAOI,MAAA,eAPJ,aAOI,QAAA,iBAPJ,mBAOI,QAAA,uBAPJ,YAOI,QAAA,gBAPJ,WAOI,QAAA,eAPJ,YAOI,QAAA,gBAPJ,gBAOI,QAAA,oBAPJ,iBAOI,QAAA,qBAPJ,WAOI,QAAA,eAPJ,kBAOI,QAAA,sBAPJ,WAOI,QAAA,eAPJ,cAOI,KAAA,EAAA,EAAA,eAPJ,aAOI,eAAA,cAPJ,gBAOI,eAAA,iBAPJ,qBAOI,eAAA,sBAPJ,wBAOI,eAAA,yBAPJ,gBAOI,UAAA,YAPJ,gBAOI,UAAA,YAPJ,kBAOI,YAAA,YAPJ,kBAOI,YAAA,YAPJ,cAOI,UAAA,eAPJ,gBAOI,UAAA,iBAPJ,sBAOI,UAAA,uBAPJ,0BAOI,gBAAA,qBAPJ,wBAOI,gBAAA,mBAPJ,2BAOI,gBAAA,iBAPJ,4BAOI,gBAAA,wBAPJ,2BAOI,gBAAA,uBAPJ,2BAOI,gBAAA,uBAPJ,sBAOI,YAAA,qBAPJ,oBAOI,YAAA,mBAPJ,uBAOI,YAAA,iBAPJ,yBAOI,YAAA,mBAPJ,wBAOI,YAAA,kBAPJ,wBAOI,cAAA,qBAPJ,sBAOI,cAAA,mBAPJ,yBAOI,cAAA,iBAPJ,0BAOI,cAAA,wBAPJ,yBAOI,cAAA,uBAPJ,0BAOI,cAAA,kBAPJ,oBAOI,WAAA,eAPJ,qBAOI,WAAA,qBAPJ,mBAOI,WAAA,mBAPJ,sBAOI,WAAA,iBAPJ,wBAOI,WAAA,mBAPJ,uBAOI,WAAA,kBAPJ,gBAOI,MAAA,aAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,YAOI,MAAA,YAPJ,eAOI,MAAA,YAPJ,QAOI,OAAA,YAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,gBAPJ,QAOI,OAAA,eAPJ,QAOI,OAAA,iBAPJ,QAOI,OAAA,eAPJ,WAOI,OAAA,eAPJ,SAOI,aAAA,YAAA,YAAA,YAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,gBAAA,YAAA,gBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,aAAA,iBAAA,YAAA,iBAPJ,SAOI,aAAA,eAAA,YAAA,eAPJ,YAOI,aAAA,eAAA,YAAA,eAPJ,SAOI,WAAA,YAAA,cAAA,YAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,gBAAA,cAAA,gBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,iBAAA,cAAA,iBAPJ,SAOI,WAAA,eAAA,cAAA,eAPJ,YAOI,WAAA,eAAA,cAAA,eAPJ,SAOI,WAAA,YAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,gBAPJ,SAOI,WAAA,eAPJ,SAOI,WAAA,iBAPJ,SAOI,WAAA,eAPJ,YAOI,WAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,YAOI,aAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,YAOI,cAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,YAOI,YAAA,eAPJ,QAOI,QAAA,YAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,gBAPJ,QAOI,QAAA,eAPJ,QAOI,QAAA,iBAPJ,QAOI,QAAA,eAPJ,SAOI,cAAA,YAAA,aAAA,YAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,gBAAA,aAAA,gBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,cAAA,iBAAA,aAAA,iBAPJ,SAOI,cAAA,eAAA,aAAA,eAPJ,SAOI,YAAA,YAAA,eAAA,YAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,gBAAA,eAAA,gBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,iBAAA,eAAA,iBAPJ,SAOI,YAAA,eAAA,eAAA,eAPJ,SAOI,YAAA,YAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,gBAPJ,SAOI,YAAA,eAPJ,SAOI,YAAA,iBAPJ,SAOI,YAAA,eAPJ,SAOI,cAAA,YAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,gBAPJ,SAOI,cAAA,eAPJ,SAOI,cAAA,iBAPJ,SAOI,cAAA,eAPJ,SAOI,eAAA,YAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,gBAPJ,SAOI,eAAA,eAPJ,SAOI,eAAA,iBAPJ,SAOI,eAAA,eAPJ,SAOI,aAAA,YAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,gBAPJ,SAOI,aAAA,eAPJ,SAOI,aAAA,iBAPJ,SAOI,aAAA,eAPJ,UAOI,IAAA,YAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,gBAPJ,UAOI,IAAA,eAPJ,UAOI,IAAA,iBAPJ,UAOI,IAAA,eAPJ,eAOI,WAAA,eAPJ,aAOI,WAAA,gBAPJ,gBAOI,WAAA,kB1DVR,0B0DGI,iBAOI,MAAA,eAPJ,eAOI,MAAA,gBAPJ,gBAOI,MAAA,eAPJ,cAOI,QAAA,iBAPJ,oBAOI,QAAA,uBAPJ,aAOI,QAAA,gBAPJ,YAOI,QAAA,eAPJ,aAOI,QAAA,gBAPJ,iBAOI,QAAA,oBAPJ,kBAOI,QAAA,qBAPJ,YAOI,QAAA,eAPJ,mBAOI,QAAA,sBAPJ,YAOI,QAAA,eAPJ,eAOI,KAAA,EAAA,EAAA,eAPJ,cAOI,eAAA,cAPJ,iBAOI,eAAA,iBAPJ,sBAOI,eAAA,sBAPJ,yBAOI,eAAA,yBAPJ,iBAOI,UAAA,YAPJ,iBAOI,UAAA,YAPJ,mBAOI,YAAA,YAPJ,mBAOI,YAAA,YAPJ,eAOI,UAAA,eAPJ,iBAOI,UAAA,iBAPJ,uBAOI,UAAA,uBAPJ,2BAOI,gBAAA,qBAPJ,yBAOI,gBAAA,mBAPJ,4BAOI,gBAAA,iBAPJ,6BAOI,gBAAA,wBAPJ,4BAOI,gBAAA,uBAPJ,4BAOI,gBAAA,uBAPJ,uBAOI,YAAA,qBAPJ,qBAOI,YAAA,mBAPJ,wBAOI,YAAA,iBAPJ,0BAOI,YAAA,mBAPJ,yBAOI,YAAA,kBAPJ,yBAOI,cAAA,qBAPJ,uBAOI,cAAA,mBAPJ,0BAOI,cAAA,iBAPJ,2BAOI,cAAA,wBAPJ,0BAOI,cAAA,uBAPJ,2BAOI,cAAA,kBAPJ,qBAOI,WAAA,eAPJ,sBAOI,WAAA,qBAPJ,oBAOI,WAAA,mBAPJ,uBAOI,WAAA,iBAPJ,yBAOI,WAAA,mBAPJ,wBAOI,WAAA,kBAPJ,iBAOI,MAAA,aAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,aAOI,MAAA,YAPJ,gBAOI,MAAA,YAPJ,SAOI,OAAA,YAPJ,SAOI,OAAA,iBAPJ,SAOI,OAAA,gBAPJ,SAOI,OAAA,eAPJ,SAOI,OAAA,iBAPJ,SAOI,OAAA,eAPJ,YAOI,OAAA,eAPJ,UAOI,aAAA,YAAA,YAAA,YAPJ,UAOI,aAAA,iBAAA,YAAA,iBAPJ,UAOI,aAAA,gBAAA,YAAA,gBAPJ,UAOI,aAAA,eAAA,YAAA,eAPJ,UAOI,aAAA,iBAAA,YAAA,iBAPJ,UAOI,aAAA,eAAA,YAAA,eAPJ,aAOI,aAAA,eAAA,YAAA,eAPJ,UAOI,WAAA,YAAA,cAAA,YAPJ,UAOI,WAAA,iBAAA,cAAA,iBAPJ,UAOI,WAAA,gBAAA,cAAA,gBAPJ,UAOI,WAAA,eAAA,cAAA,eAPJ,UAOI,WAAA,iBAAA,cAAA,iBAPJ,UAOI,WAAA,eAAA,cAAA,eAPJ,aAOI,WAAA,eAAA,cAAA,eAPJ,UAOI,WAAA,YAPJ,UAOI,WAAA,iBAPJ,UAOI,WAAA,gBAPJ,UAOI,WAAA,eAPJ,UAOI,WAAA,iBAPJ,UAOI,WAAA,eAPJ,aAOI,WAAA,eAPJ,UAOI,aAAA,YAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,gBAPJ,UAOI,aAAA,eAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,eAPJ,aAOI,aAAA,eAPJ,UAOI,cAAA,YAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,gBAPJ,UAOI,cAAA,eAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,eAPJ,aAOI,cAAA,eAPJ,UAOI,YAAA,YAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,gBAPJ,UAOI,YAAA,eAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,eAPJ,aAOI,YAAA,eAPJ,SAOI,QAAA,YAPJ,SAOI,QAAA,iBAPJ,SAOI,QAAA,gBAPJ,SAOI,QAAA,eAPJ,SAOI,QAAA,iBAPJ,SAOI,QAAA,eAPJ,UAOI,cAAA,YAAA,aAAA,YAPJ,UAOI,cAAA,iBAAA,aAAA,iBAPJ,UAOI,cAAA,gBAAA,aAAA,gBAPJ,UAOI,cAAA,eAAA,aAAA,eAPJ,UAOI,cAAA,iBAAA,aAAA,iBAPJ,UAOI,cAAA,eAAA,aAAA,eAPJ,UAOI,YAAA,YAAA,eAAA,YAPJ,UAOI,YAAA,iBAAA,eAAA,iBAPJ,UAOI,YAAA,gBAAA,eAAA,gBAPJ,UAOI,YAAA,eAAA,eAAA,eAPJ,UAOI,YAAA,iBAAA,eAAA,iBAPJ,UAOI,YAAA,eAAA,eAAA,eAPJ,UAOI,YAAA,YAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,gBAPJ,UAOI,YAAA,eAPJ,UAOI,YAAA,iBAPJ,UAOI,YAAA,eAPJ,UAOI,cAAA,YAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,gBAPJ,UAOI,cAAA,eAPJ,UAOI,cAAA,iBAPJ,UAOI,cAAA,eAPJ,UAOI,eAAA,YAPJ,UAOI,eAAA,iBAPJ,UAOI,eAAA,gBAPJ,UAOI,eAAA,eAPJ,UAOI,eAAA,iBAPJ,UAOI,eAAA,eAPJ,UAOI,aAAA,YAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,gBAPJ,UAOI,aAAA,eAPJ,UAOI,aAAA,iBAPJ,UAOI,aAAA,eAPJ,WAOI,IAAA,YAPJ,WAOI,IAAA,iBAPJ,WAOI,IAAA,gBAPJ,WAOI,IAAA,eAPJ,WAOI,IAAA,iBAPJ,WAOI,IAAA,eAPJ,gBAOI,WAAA,eAPJ,cAOI,WAAA,gBAPJ,iBAOI,WAAA,kBCtDZ,0BD+CQ,MAOI,UAAA,iBAPJ,MAOI,UAAA,eAPJ,MAOI,UAAA,kBAPJ,MAOI,UAAA,kBCnCZ,aD4BQ,gBAOI,QAAA,iBAPJ,sBAOI,QAAA,uBAPJ,eAOI,QAAA,gBAPJ,cAOI,QAAA,eAPJ,eAOI,QAAA,gBAPJ,mBAOI,QAAA,oBAPJ,oBAOI,QAAA,qBAPJ,cAOI,QAAA,eAPJ,qBAOI,QAAA,sBAPJ,cAOI,QAAA","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: 2px solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::-moz-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control:disabled {\n background-color: #e9ecef;\n opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: #dde0e3;\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.form-select {\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: #fff;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: 1px solid rgba(0, 0, 0, 0.25);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n width: 2em;\n margin-left: -2.5em;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + 2px);\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: 1px solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n color: transparent;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: 1px 0;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #198754;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(25, 135, 84, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #198754;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: #198754;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: 1px;\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: #212529;\n --bs-dropdown-bg: #fff;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: 1px;\n --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-dropdown-link-color: #212529;\n --bs-dropdown-link-hover-color: #1e2125;\n --bs-dropdown-link-hover-bg: #e9ecef;\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: 1px;\n --bs-nav-tabs-border-color: #dee2e6;\n --bs-nav-tabs-border-radius: 0.375rem;\n --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;\n --bs-nav-tabs-link-active-color: #495057;\n --bs-nav-tabs-link-active-bg: #fff;\n --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(0, 0, 0, 0.55);\n --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);\n --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);\n --bs-navbar-active-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-border-width: 1px;\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: 0.375rem;\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(0.375rem - 1px);\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(0, 0, 0, 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: #fff;\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: #212529;\n --bs-accordion-bg: #fff;\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: 1px;\n --bs-accordion-border-radius: 0.375rem;\n --bs-accordion-inner-border-radius: calc(0.375rem - 1px);\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: #212529;\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: #0c63e4;\n --bs-accordion-active-bg: #e7f1ff;\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: #6c757d;\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: #fff;\n --bs-pagination-border-width: 1px;\n --bs-pagination-border-color: #dee2e6;\n --bs-pagination-border-radius: 0.375rem;\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: #e9ecef;\n --bs-pagination-hover-border-color: #dee2e6;\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: #e9ecef;\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: #6c757d;\n --bs-pagination-disabled-bg: #fff;\n --bs-pagination-disabled-border-color: #dee2e6;\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: -1px;\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: 1px solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: #084298;\n --bs-alert-bg: #cfe2ff;\n --bs-alert-border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n color: #06357a;\n}\n\n.alert-secondary {\n --bs-alert-color: #41464b;\n --bs-alert-bg: #e2e3e5;\n --bs-alert-border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n color: #34383c;\n}\n\n.alert-success {\n --bs-alert-color: #0f5132;\n --bs-alert-bg: #d1e7dd;\n --bs-alert-border-color: #badbcc;\n}\n.alert-success .alert-link {\n color: #0c4128;\n}\n\n.alert-info {\n --bs-alert-color: #055160;\n --bs-alert-bg: #cff4fc;\n --bs-alert-border-color: #b6effb;\n}\n.alert-info .alert-link {\n color: #04414d;\n}\n\n.alert-warning {\n --bs-alert-color: #664d03;\n --bs-alert-bg: #fff3cd;\n --bs-alert-border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n color: #523e02;\n}\n\n.alert-danger {\n --bs-alert-color: #842029;\n --bs-alert-bg: #f8d7da;\n --bs-alert-border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n color: #6a1a21;\n}\n\n.alert-light {\n --bs-alert-color: #636464;\n --bs-alert-bg: #fefefe;\n --bs-alert-border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n color: #4f5050;\n}\n\n.alert-dark {\n --bs-alert-color: #141619;\n --bs-alert-bg: #d3d3d4;\n --bs-alert-border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n color: #101214;\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: #e9ecef;\n --bs-progress-border-radius: 0.375rem;\n --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: #212529;\n --bs-list-group-bg: #fff;\n --bs-list-group-border-color: rgba(0, 0, 0, 0.125);\n --bs-list-group-border-width: 1px;\n --bs-list-group-border-radius: 0.375rem;\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: #495057;\n --bs-list-group-action-hover-color: #495057;\n --bs-list-group-action-hover-bg: #f8f9fa;\n --bs-list-group-action-active-color: #212529;\n --bs-list-group-action-active-bg: #e9ecef;\n --bs-list-group-disabled-color: #6c757d;\n --bs-list-group-disabled-bg: #fff;\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #084298;\n background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #084298;\n background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #084298;\n border-color: #084298;\n}\n\n.list-group-item-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #41464b;\n background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #41464b;\n border-color: #41464b;\n}\n\n.list-group-item-success {\n color: #0f5132;\n background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #0f5132;\n background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #0f5132;\n border-color: #0f5132;\n}\n\n.list-group-item-info {\n color: #055160;\n background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #055160;\n background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #055160;\n border-color: #055160;\n}\n\n.list-group-item-warning {\n color: #664d03;\n background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #664d03;\n background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #664d03;\n border-color: #664d03;\n}\n\n.list-group-item-danger {\n color: #842029;\n background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #842029;\n background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #842029;\n border-color: #842029;\n}\n\n.list-group-item-light {\n color: #636464;\n background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #636464;\n background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #636464;\n border-color: #636464;\n}\n\n.list-group-item-dark {\n color: #141619;\n background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #141619;\n background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #141619;\n border-color: #141619;\n}\n\n.btn-close {\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: #000;\n background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: 0.5;\n}\n.btn-close:hover {\n color: #000;\n text-decoration: none;\n opacity: 0.75;\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n opacity: 0.25;\n}\n\n.btn-close-white {\n filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-border-width: 1px;\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: 0.375rem;\n --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-toast-header-color: #6c757d;\n --bs-toast-header-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: #fff;\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: 1px;\n --bs-modal-border-radius: 0.5rem;\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-modal-inner-border-radius: calc(0.5rem - 1px);\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: 1px;\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: 1px;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n.modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n.modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n.modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n.modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n.modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n.modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: #fff;\n --bs-tooltip-bg: #000;\n --bs-tooltip-border-radius: 0.375rem;\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: #fff;\n --bs-popover-border-width: 1px;\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: 0.5rem;\n --bs-popover-inner-border-radius: calc(0.5rem - 1px);\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: #f0f0f0;\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: #212529;\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n.carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n.spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: ;\n --bs-offcanvas-bg: #fff;\n --bs-offcanvas-border-width: 1px;\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n -webkit-mask-size: 200% 100%;\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: var(--#{$prefix}table-color);\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: ($table-border-width * 2) solid $table-group-separator-color;\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-active-bg);\n color: var(--#{$prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-hover-bg);\n color: var(--#{$prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: escape-svg($form-select-indicator);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: $form-check-input-bg;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-checked-bg-image);\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-radio-checked-bg-image);\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-indeterminate-bg-image);\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: escape-svg($form-switch-bg-image);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n background-image: escape-svg($form-switch-focus-bg-image);\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n background-image: escape-svg($form-switch-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-switch-checked-bg-image);\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: -$input-border-width;\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n padding-right: $form-select-feedback-icon-padding-end;\n background-image: escape-svg($form-select-indicator), escape-svg($icon);\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$body-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: none;\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($primary), $primary, 15%))};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n clear: both;\n font-weight: $font-weight-normal;\n color: var(--#{$prefix}dropdown-link-color);\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}dropdown-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n }\n\n &.active,\n &:active {\n color: var(--#{$prefix}dropdown-link-active-color);\n text-decoration: none;\n @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: var(--#{$prefix}dropdown-header-color);\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n // scss-docs-start dropdown-dark-css-vars\n --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n // scss-docs-end dropdown-dark-css-vars\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-end {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-start {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == end {\n @include caret-end();\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-start();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n background: none;\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n background: none;\n border: 0;\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .show > .nav-link,\n .nav-link.active {\n color: var(--#{$prefix}navbar-active-color);\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n line-height: 1;\n color: var(--#{$prefix}navbar-color);\n background-color: transparent; // remove default button style\n border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas {\n // stylelint-disable declaration-no-important\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n @include box-shadow(none);\n @include transition(none);\n // stylelint-enable declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n @include deprecate(\"`.navbar-light`\", \"v5.2.0\", \"v6.0.0\", true);\n}\n\n.navbar-dark {\n // scss-docs-start navbar-dark-css-vars\n --#{$prefix}navbar-color: #{$navbar-dark-color};\n --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n // scss-docs-end navbar-dark-css-vars\n}\n","//\n// Base styles\n//\n\n.card {\n // scss-docs-start card-css-vars\n --#{$prefix}card-spacer-y: #{$card-spacer-y};\n --#{$prefix}card-spacer-x: #{$card-spacer-x};\n --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n --#{$prefix}card-border-width: #{$card-border-width};\n --#{$prefix}card-border-color: #{$card-border-color};\n --#{$prefix}card-border-radius: #{$card-border-radius};\n --#{$prefix}card-box-shadow: #{$card-box-shadow};\n --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n --#{$prefix}card-cap-bg: #{$card-cap-bg};\n --#{$prefix}card-cap-color: #{$card-cap-color};\n --#{$prefix}card-height: #{$card-height};\n --#{$prefix}card-color: #{$card-color};\n --#{$prefix}card-bg: #{$card-bg};\n --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n --#{$prefix}card-group-margin: #{$card-group-margin};\n // scss-docs-end card-css-vars\n\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: var(--#{$prefix}card-height);\n word-wrap: break-word;\n background-color: var(--#{$prefix}card-bg);\n background-clip: border-box;\n border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n @include border-radius(var(--#{$prefix}card-border-radius));\n @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n margin-bottom: var(--#{$prefix}card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: var(--#{$prefix}card-spacer-x);\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:first-child {\n @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0);\n }\n}\n\n.card-footer {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:last-child {\n @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius));\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n border-bottom: 0;\n\n .nav-link.active {\n background-color: var(--#{$prefix}card-bg);\n border-bottom-color: var(--#{$prefix}card-bg);\n }\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--#{$prefix}card-img-overlay-padding);\n @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: var(--#{$prefix}card-group-margin);\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion {\n // scss-docs-start accordion-css-vars\n --#{$prefix}accordion-color: #{$accordion-color};\n --#{$prefix}accordion-bg: #{$accordion-bg};\n --#{$prefix}accordion-transition: #{$accordion-transition};\n --#{$prefix}accordion-border-color: #{$accordion-border-color};\n --#{$prefix}accordion-border-width: #{$accordion-border-width};\n --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};\n --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n @include font-size($font-size-base);\n color: var(--#{$prefix}accordion-btn-color);\n text-align: left; // Reset button style\n background-color: var(--#{$prefix}accordion-btn-bg);\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition(var(--#{$prefix}accordion-transition));\n\n &:not(.collapsed) {\n color: var(--#{$prefix}accordion-active-color);\n background-color: var(--#{$prefix}accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n &::after {\n background-image: var(--#{$prefix}accordion-btn-active-icon);\n transform: var(--#{$prefix}accordion-btn-icon-transform);\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: var(--#{$prefix}accordion-btn-icon-width);\n height: var(--#{$prefix}accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--#{$prefix}accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--#{$prefix}accordion-btn-icon-width);\n @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--#{$prefix}accordion-color);\n background-color: var(--#{$prefix}accordion-bg);\n border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n &:first-of-type {\n @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n }\n }\n}\n\n.accordion-body {\n padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n &,\n &.collapsed {\n @include border-radius(0);\n }\n }\n }\n}\n",".breadcrumb {\n // scss-docs-start breadcrumb-css-vars\n --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n // scss-docs-end breadcrumb-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n @include font-size(var(--#{$prefix}breadcrumb-font-size));\n list-style: none;\n background-color: var(--#{$prefix}breadcrumb-bg);\n @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n color: var(--#{$prefix}breadcrumb-divider-color);\n content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: var(--#{$prefix}breadcrumb-item-active-color);\n }\n}\n",".pagination {\n // scss-docs-start pagination-css-vars\n --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-color: #{$pagination-color};\n --#{$prefix}pagination-bg: #{$pagination-bg};\n --#{$prefix}pagination-border-width: #{$pagination-border-width};\n --#{$prefix}pagination-border-color: #{$pagination-border-color};\n --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n --#{$prefix}pagination-active-color: #{$pagination-active-color};\n --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n // scss-docs-end pagination-css-vars\n\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n @include font-size(var(--#{$prefix}pagination-font-size));\n color: var(--#{$prefix}pagination-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}pagination-bg);\n border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: var(--#{$prefix}pagination-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}pagination-hover-bg);\n border-color: var(--#{$prefix}pagination-hover-border-color);\n }\n\n &:focus {\n z-index: 3;\n color: var(--#{$prefix}pagination-focus-color);\n background-color: var(--#{$prefix}pagination-focus-bg);\n outline: $pagination-focus-outline;\n box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n }\n\n &.active,\n .active > & {\n z-index: 3;\n color: var(--#{$prefix}pagination-active-color);\n @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n border-color: var(--#{$prefix}pagination-active-border-color);\n }\n\n &.disabled,\n .disabled > & {\n color: var(--#{$prefix}pagination-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}pagination-disabled-bg);\n border-color: var(--#{$prefix}pagination-disabled-border-color);\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n @if $pagination-margin-start == ($pagination-border-width * -1) {\n &:first-child {\n .page-link {\n @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n } @else {\n // Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}pagination-padding-x: #{$padding-x};\n --#{$prefix}pagination-padding-y: #{$padding-y};\n @include rfs($font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $state, $value in $theme-colors {\n $alert-background: shift-color($value, $alert-bg-scale);\n $alert-border: shift-color($value, $alert-border-scale);\n $alert-color: shift-color($value, $alert-color-scale);\n\n @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {\n $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));\n }\n .alert-#{$state} {\n @include alert-variant($alert-background, $alert-border, $alert-color);\n }\n}\n// scss-docs-end alert-modifiers\n","// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n --#{$prefix}alert-color: #{$color};\n --#{$prefix}alert-bg: #{$background};\n --#{$prefix}alert-border-color: #{$border};\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n\n .alert-link {\n color: shade-color($color, 20%);\n }\n}\n// scss-docs-end alert-variant-mixin\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress {\n // scss-docs-start progress-css-vars\n --#{$prefix}progress-height: #{$progress-height};\n @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n --#{$prefix}progress-bg: #{$progress-bg};\n --#{$prefix}progress-border-radius: #{$progress-border-radius};\n --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n --#{$prefix}progress-bar-color: #{$progress-bar-color};\n --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n // scss-docs-end progress-css-vars\n\n display: flex;\n height: var(--#{$prefix}progress-height);\n overflow: hidden; // force rounded corners by cropping it\n @include font-size(var(--#{$prefix}progress-font-size));\n background-color: var(--#{$prefix}progress-bg);\n @include border-radius(var(--#{$prefix}progress-border-radius));\n @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--#{$prefix}progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--#{$prefix}progress-bar-bg);\n @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // scss-docs-start list-group-css-vars\n --#{$prefix}list-group-color: #{$list-group-color};\n --#{$prefix}list-group-bg: #{$list-group-bg};\n --#{$prefix}list-group-border-color: #{$list-group-border-color};\n --#{$prefix}list-group-border-width: #{$list-group-border-width};\n --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n --#{$prefix}list-group-action-color: #{$list-group-action-color};\n --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n --#{$prefix}list-group-active-color: #{$list-group-active-color};\n --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n // scss-docs-end list-group-css-vars\n\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > .list-group-item::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: var(--#{$prefix}list-group-action-color);\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--#{$prefix}list-group-action-hover-bg);\n }\n\n &:active {\n color: var(--#{$prefix}list-group-action-active-color);\n background-color: var(--#{$prefix}list-group-action-active-bg);\n }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n color: var(--#{$prefix}list-group-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}list-group-bg);\n border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}list-group-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}list-group-disabled-bg);\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-active-color);\n background-color: var(--#{$prefix}list-group-active-bg);\n border-color: var(--#{$prefix}list-group-active-border-color);\n }\n\n // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n & + .list-group-item {\n border-top-width: 0;\n\n &.active {\n margin-top: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-top-width: var(--#{$prefix}list-group-border-width);\n }\n }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child:not(:last-child) {\n @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n @include border-top-end-radius(0);\n }\n\n &:last-child:not(:first-child) {\n @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: var(--#{$prefix}list-group-border-width);\n border-left-width: 0;\n\n &.active {\n margin-left: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-left-width: var(--#{$prefix}list-group-border-width);\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state, $value in $theme-colors {\n $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);\n $list-group-variant-color: shift-color($value, $list-group-item-color-scale);\n @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {\n $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));\n }\n\n @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);\n}\n// scss-docs-end list-group-modifiers\n","// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n color: $color;\n background-color: shade-color($background, 10%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n// scss-docs-end list-group-mixin\n","// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: $btn-close-color;\n background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: $btn-close-opacity;\n\n // Override <a>'s hover style\n &:hover {\n color: $btn-close-color;\n text-decoration: none;\n opacity: $btn-close-hover-opacity;\n }\n\n &:focus {\n outline: 0;\n box-shadow: $btn-close-focus-shadow;\n opacity: $btn-close-focus-opacity;\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: $btn-close-disabled-opacity;\n }\n}\n\n.btn-close-white {\n filter: $btn-close-white-filter;\n}\n",".toast {\n // scss-docs-start toast-css-vars\n --#{$prefix}toast-zindex: #{$zindex-toast};\n --#{$prefix}toast-padding-x: #{$toast-padding-x};\n --#{$prefix}toast-padding-y: #{$toast-padding-y};\n --#{$prefix}toast-spacing: #{$toast-spacing};\n --#{$prefix}toast-max-width: #{$toast-max-width};\n @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n --#{$prefix}toast-color: #{$toast-color};\n --#{$prefix}toast-bg: #{$toast-background-color};\n --#{$prefix}toast-border-width: #{$toast-border-width};\n --#{$prefix}toast-border-color: #{$toast-border-color};\n --#{$prefix}toast-border-radius: #{$toast-border-radius};\n --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n --#{$prefix}toast-header-color: #{$toast-header-color};\n --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n // scss-docs-end toast-css-vars\n\n width: var(--#{$prefix}toast-max-width);\n max-width: 100%;\n @include font-size(var(--#{$prefix}toast-font-size));\n color: var(--#{$prefix}toast-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}toast-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n box-shadow: var(--#{$prefix}toast-box-shadow);\n @include border-radius(var(--#{$prefix}toast-border-radius));\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n --#{$prefix}toast-zindex: #{$zindex-toast};\n\n position: absolute;\n z-index: var(--#{$prefix}toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: var(--#{$prefix}toast-spacing);\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n color: var(--#{$prefix}toast-header-color);\n background-color: var(--#{$prefix}toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);\n @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));\n\n .btn-close {\n margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: var(--#{$prefix}toast-padding-x);\n }\n}\n\n.toast-body {\n padding: var(--#{$prefix}toast-padding-x);\n word-wrap: break-word;\n}\n","// stylelint-disable function-disallowed-list\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n // scss-docs-start modal-css-vars\n --#{$prefix}modal-zindex: #{$zindex-modal};\n --#{$prefix}modal-width: #{$modal-md};\n --#{$prefix}modal-padding: #{$modal-inner-padding};\n --#{$prefix}modal-margin: #{$modal-dialog-margin};\n --#{$prefix}modal-color: #{$modal-content-color};\n --#{$prefix}modal-bg: #{$modal-content-bg};\n --#{$prefix}modal-border-color: #{$modal-content-border-color};\n --#{$prefix}modal-border-width: #{$modal-content-border-width};\n --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n // scss-docs-end modal-css-vars\n\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--#{$prefix}modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--#{$prefix}modal-margin);\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: var(--#{$prefix}modal-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}modal-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n @include border-radius(var(--#{$prefix}modal-border-radius));\n @include box-shadow(var(--#{$prefix}modal-box-shadow));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n // scss-docs-start modal-backdrop-css-vars\n --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n // scss-docs-end modal-backdrop-css-vars\n\n @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: var(--#{$prefix}modal-header-padding);\n border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);\n @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n .btn-close {\n padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);\n margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * .5);\n background-color: var(--#{$prefix}modal-footer-bg);\n border-top: var(--#{$prefix}modal-footer-border-width) solid var(--#{$prefix}modal-footer-border-color);\n @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: calc(var(--#{$prefix}modal-footer-gap) * .5); // Todo in v6: replace with gap on parent class\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n .modal {\n --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n }\n\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: var(--#{$prefix}modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n\n .modal-sm {\n --#{$prefix}modal-width: #{$modal-sm};\n }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-lg};\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-xl};\n }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header,\n .modal-footer {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n // scss-docs-start tooltip-css-vars\n --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n --#{$prefix}tooltip-margin: #{$tooltip-margin};\n @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n --#{$prefix}tooltip-color: #{$tooltip-color};\n --#{$prefix}tooltip-bg: #{$tooltip-bg};\n --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n // scss-docs-end tooltip-css-vars\n\n z-index: var(--#{$prefix}tooltip-zindex);\n display: block;\n padding: var(--#{$prefix}tooltip-arrow-height);\n margin: var(--#{$prefix}tooltip-margin);\n @include deprecate(\"`$tooltip-margin`\", \"v5\", \"v5.x\", true);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}tooltip-font-size));\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: var(--#{$prefix}tooltip-opacity); }\n\n .tooltip-arrow {\n display: block;\n width: var(--#{$prefix}tooltip-arrow-width);\n height: var(--#{$prefix}tooltip-arrow-height);\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-top-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n left: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n right: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-right-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-bottom-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n right: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n left: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-left-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: var(--#{$prefix}tooltip-max-width);\n padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n color: var(--#{$prefix}tooltip-color);\n text-align: center;\n background-color: var(--#{$prefix}tooltip-bg);\n @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n}\n",".popover {\n // scss-docs-start popover-css-vars\n --#{$prefix}popover-zindex: #{$zindex-popover};\n --#{$prefix}popover-max-width: #{$popover-max-width};\n @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n --#{$prefix}popover-bg: #{$popover-bg};\n --#{$prefix}popover-border-width: #{$popover-border-width};\n --#{$prefix}popover-border-color: #{$popover-border-color};\n --#{$prefix}popover-border-radius: #{$popover-border-radius};\n --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n --#{$prefix}popover-header-color: #{$popover-header-color};\n --#{$prefix}popover-header-bg: #{$popover-header-bg};\n --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n --#{$prefix}popover-body-color: #{$popover-body-color};\n --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n // scss-docs-end popover-css-vars\n\n z-index: var(--#{$prefix}popover-zindex);\n display: block;\n max-width: var(--#{$prefix}popover-max-width);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}popover-font-size));\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: var(--#{$prefix}popover-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-radius(var(--#{$prefix}popover-border-radius));\n @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n .popover-arrow {\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n height: var(--#{$prefix}popover-arrow-height);\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n bottom: 0;\n border-top-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n bottom: var(--#{$prefix}popover-border-width);\n border-top-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n > .popover-arrow {\n left: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n left: 0;\n border-right-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n left: var(--#{$prefix}popover-border-width);\n border-right-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n top: 0;\n border-bottom-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n top: var(--#{$prefix}popover-border-width);\n border-bottom-color: var(--#{$prefix}popover-bg);\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n margin-left: calc(-.5 * var(--#{$prefix}popover-arrow-width)); // stylelint-disable-line function-disallowed-list\n content: \"\";\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start {\n > .popover-arrow {\n right: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n right: 0;\n border-left-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n right: var(--#{$prefix}popover-border-width);\n border-left-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size(var(--#{$prefix}popover-header-font-size));\n color: var(--#{$prefix}popover-header-color);\n background-color: var(--#{$prefix}popover-header-bg);\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n color: var(--#{$prefix}popover-body-color);\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n.carousel-dark {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--#{$prefix}spinner-width);\n height: var(--#{$prefix}spinner-height);\n vertical-align: var(--#{$prefix}spinner-vertical-align);\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n // scss-docs-start spinner-border-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-border-width: #{$spinner-border-width};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-border;\n // scss-docs-end spinner-border-css-vars\n\n border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n // scss-docs-start spinner-border-sm-css-vars\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n // scss-docs-start spinner-grow-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-grow;\n // scss-docs-end spinner-grow-css-vars\n\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n }\n }\n}\n","// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n // scss-docs-start offcanvas-css-vars\n --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n --#{$prefix}offcanvas-color: #{$offcanvas-color};\n --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @extend %offcanvas-css-vars;\n }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @include media-breakpoint-down($next) {\n position: fixed;\n bottom: 0;\n z-index: var(--#{$prefix}offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--#{$prefix}offcanvas-color);\n visibility: hidden;\n background-color: var(--#{$prefix}offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n @include transition(transform $offcanvas-transition-duration ease-in-out);\n\n &.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(-100%);\n }\n\n &.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(100%);\n }\n\n &.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(-100%);\n }\n\n &.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(100%);\n }\n\n &.showing,\n &.show:not(.hiding) {\n transform: none;\n }\n\n &.showing,\n &.hiding,\n &.show {\n visibility: visible;\n }\n }\n\n @if not ($infix == \"\") {\n @include media-breakpoint-up($next) {\n --#{$prefix}offcanvas-height: auto;\n --#{$prefix}offcanvas-border-width: 0;\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n }\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n .btn-close {\n padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: $offcanvas-title-line-height;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n overflow-y: auto;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value !important; // stylelint-disable-line declaration-no-important\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","dist/css/bootstrap.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color, inherit);\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: var(--bs-border-width);\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + var(--bs-border-width));\n padding-bottom: calc(0.375rem + var(--bs-border-width));\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + var(--bs-border-width));\n padding-bottom: calc(0.5rem + var(--bs-border-width));\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + var(--bs-border-width));\n padding-bottom: calc(0.25rem + var(--bs-border-width));\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n background-clip: padding-box;\n border: var(--bs-border-width) solid var(--bs-border-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::-webkit-datetime-edit {\n display: block;\n padding: 0;\n}\n.form-control::-moz-placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control::placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control:disabled {\n background-color: var(--bs-form-control-disabled-bg);\n opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: var(--bs-secondary-bg);\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: transparent;\n border: solid transparent;\n border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: var(--bs-form-control-disabled-bg);\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n[data-bs-theme=dark] .form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n --bs-form-check-bg: var(--bs-form-control-bg);\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: var(--bs-form-check-bg);\n background-image: var(--bs-form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: var(--bs-border-width) solid var(--bs-border-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n width: 2em;\n margin-left: -2.5em;\n background-image: var(--bs-form-switch-bg);\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-tertiary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-tertiary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating::before:not(.form-control:disabled) {\n position: absolute;\n top: var(--bs-border-width);\n left: var(--bs-border-width);\n width: calc(100% - (calc(calc(0.375em + 0.1875rem) + calc(0.75em + 0.375rem))));\n height: 1.875em;\n content: \"\";\n background-color: var(--bs-form-control-bg);\n border-radius: 0.375rem;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: var(--bs-border-width) solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n color: transparent;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: var(--bs-border-width) 0;\n}\n.form-floating > .form-control:disabled ~ label {\n color: #6c757d;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-tertiary-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: calc(var(--bs-border-width) * -1);\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-success-text);\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-success);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: var(--bs-success);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: var(--bs-success);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: var(--bs-success);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: var(--bs-success);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: var(--bs-success);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: var(--bs-success-text);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: var(--bs-success-text);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-danger-text);\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-danger);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: var(--bs-danger);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: var(--bs-danger);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: var(--bs-danger);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: var(--bs-danger);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: var(--bs-danger);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: var(--bs-danger-text);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: var(--bs-danger-text);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: var(--bs-border-width);\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: var(--bs-body-color);\n --bs-dropdown-bg: var(--bs-body-bg);\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: var(--bs-border-width);\n --bs-dropdown-inner-border-radius: calc(0.375rem - var(--bs-border-width));\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-dropdown-link-color: var(--bs-body-color);\n --bs-dropdown-link-hover-color: var(--bs-body-color);\n --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar {\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-title-color: ;\n --bs-card-subtitle-color: ;\n --bs-card-border-width: var(--bs-border-width);\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: var(--bs-border-radius);\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: var(--bs-body-bg);\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: var(--bs-body-color);\n --bs-accordion-bg: var(--bs-body-bg);\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: var(--bs-border-width);\n --bs-accordion-border-radius: var(--bs-border-radius);\n --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: var(--bs-body-color);\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230a58ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: var(--bs-primary-text);\n --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: var(--bs-body-bg);\n --bs-pagination-border-width: var(--bs-border-width);\n --bs-pagination-border-color: var(--bs-border-color);\n --bs-pagination-border-radius: var(--bs-border-radius);\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n --bs-pagination-hover-border-color: var(--bs-border-color);\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: var(--bs-secondary-bg);\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: var(--bs-secondary-color);\n --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n --bs-pagination-disabled-border-color: var(--bs-border-color);\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n --bs-alert-link-color: inherit;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: var(--bs-primary-text);\n --bs-alert-bg: var(--bs-primary-bg-subtle);\n --bs-alert-border-color: var(--bs-primary-border-subtle);\n --bs-alert-link-color: var(--bs-primary-text);\n}\n\n.alert-secondary {\n --bs-alert-color: var(--bs-secondary-text);\n --bs-alert-bg: var(--bs-secondary-bg-subtle);\n --bs-alert-border-color: var(--bs-secondary-border-subtle);\n --bs-alert-link-color: var(--bs-secondary-text);\n}\n\n.alert-success {\n --bs-alert-color: var(--bs-success-text);\n --bs-alert-bg: var(--bs-success-bg-subtle);\n --bs-alert-border-color: var(--bs-success-border-subtle);\n --bs-alert-link-color: var(--bs-success-text);\n}\n\n.alert-info {\n --bs-alert-color: var(--bs-info-text);\n --bs-alert-bg: var(--bs-info-bg-subtle);\n --bs-alert-border-color: var(--bs-info-border-subtle);\n --bs-alert-link-color: var(--bs-info-text);\n}\n\n.alert-warning {\n --bs-alert-color: var(--bs-warning-text);\n --bs-alert-bg: var(--bs-warning-bg-subtle);\n --bs-alert-border-color: var(--bs-warning-border-subtle);\n --bs-alert-link-color: var(--bs-warning-text);\n}\n\n.alert-danger {\n --bs-alert-color: var(--bs-danger-text);\n --bs-alert-bg: var(--bs-danger-bg-subtle);\n --bs-alert-border-color: var(--bs-danger-border-subtle);\n --bs-alert-link-color: var(--bs-danger-text);\n}\n\n.alert-light {\n --bs-alert-color: var(--bs-light-text);\n --bs-alert-bg: var(--bs-light-bg-subtle);\n --bs-alert-border-color: var(--bs-light-border-subtle);\n --bs-alert-link-color: var(--bs-light-text);\n}\n\n.alert-dark {\n --bs-alert-color: var(--bs-dark-text);\n --bs-alert-bg: var(--bs-dark-bg-subtle);\n --bs-alert-border-color: var(--bs-dark-border-subtle);\n --bs-alert-link-color: var(--bs-dark-text);\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress,\n.progress-stacked {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: var(--bs-secondary-bg);\n --bs-progress-border-radius: var(--bs-border-radius);\n --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: var(--bs-body-color);\n --bs-list-group-bg: var(--bs-body-bg);\n --bs-list-group-border-color: var(--bs-border-color);\n --bs-list-group-border-width: var(--bs-border-width);\n --bs-list-group-border-radius: var(--bs-border-radius);\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: var(--bs-secondary-color);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n --bs-list-group-action-active-color: var(--bs-body-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n --bs-list-group-disabled-color: var(--bs-secondary-color);\n --bs-list-group-disabled-bg: var(--bs-body-bg);\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n --bs-list-group-color: var(--bs-primary-text);\n --bs-list-group-bg: var(--bs-primary-bg-subtle);\n --bs-list-group-border-color: var(--bs-primary-border-subtle);\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n}\n.list-group-item-primary.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-primary-text);\n --bs-list-group-active-border-color: var(--bs-primary-text);\n}\n\n.list-group-item-secondary {\n --bs-list-group-color: var(--bs-secondary-text);\n --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n}\n.list-group-item-secondary.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-secondary-text);\n --bs-list-group-active-border-color: var(--bs-secondary-text);\n}\n\n.list-group-item-success {\n --bs-list-group-color: var(--bs-success-text);\n --bs-list-group-bg: var(--bs-success-bg-subtle);\n --bs-list-group-border-color: var(--bs-success-border-subtle);\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n}\n.list-group-item-success.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-success-text);\n --bs-list-group-active-border-color: var(--bs-success-text);\n}\n\n.list-group-item-info {\n --bs-list-group-color: var(--bs-info-text);\n --bs-list-group-bg: var(--bs-info-bg-subtle);\n --bs-list-group-border-color: var(--bs-info-border-subtle);\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n}\n.list-group-item-info.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-info-text);\n --bs-list-group-active-border-color: var(--bs-info-text);\n}\n\n.list-group-item-warning {\n --bs-list-group-color: var(--bs-warning-text);\n --bs-list-group-bg: var(--bs-warning-bg-subtle);\n --bs-list-group-border-color: var(--bs-warning-border-subtle);\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n}\n.list-group-item-warning.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-warning-text);\n --bs-list-group-active-border-color: var(--bs-warning-text);\n}\n\n.list-group-item-danger {\n --bs-list-group-color: var(--bs-danger-text);\n --bs-list-group-bg: var(--bs-danger-bg-subtle);\n --bs-list-group-border-color: var(--bs-danger-border-subtle);\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n}\n.list-group-item-danger.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-danger-text);\n --bs-list-group-active-border-color: var(--bs-danger-text);\n}\n\n.list-group-item-light {\n --bs-list-group-color: var(--bs-light-text);\n --bs-list-group-bg: var(--bs-light-bg-subtle);\n --bs-list-group-border-color: var(--bs-light-border-subtle);\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n}\n.list-group-item-light.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-light-text);\n --bs-list-group-active-border-color: var(--bs-light-text);\n}\n\n.list-group-item-dark {\n --bs-list-group-color: var(--bs-dark-text);\n --bs-list-group-bg: var(--bs-dark-bg-subtle);\n --bs-list-group-border-color: var(--bs-dark-border-subtle);\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n}\n.list-group-item-dark.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-dark-text);\n --bs-list-group-active-border-color: var(--bs-dark-text);\n}\n\n.btn-close {\n --bs-btn-close-color: #000;\n --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n --bs-btn-close-opacity: 0.5;\n --bs-btn-close-hover-opacity: 0.75;\n --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-btn-close-focus-opacity: 1;\n --bs-btn-close-disabled-opacity: 0.25;\n --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: var(--bs-btn-close-color);\n background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n color: var(--bs-btn-close-color);\n text-decoration: none;\n opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: var(--bs-btn-close-focus-shadow);\n opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-border-width: var(--bs-border-width);\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: var(--bs-border-radius);\n --bs-toast-box-shadow: var(--bs-box-shadow);\n --bs-toast-header-color: var(--bs-secondary-color);\n --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-header-border-color: var(--bs-border-color-translucent);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: var(--bs-body-bg);\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: var(--bs-border-width);\n --bs-modal-border-radius: var(--bs-border-radius-lg);\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: var(--bs-border-width);\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: var(--bs-border-width);\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: var(--bs-body-bg);\n --bs-tooltip-bg: var(--bs-emphasis-color);\n --bs-tooltip-border-radius: var(--bs-border-radius);\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: var(--bs-body-bg);\n --bs-popover-border-width: var(--bs-border-width);\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: var(--bs-border-radius-lg);\n --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: var(--bs-secondary-bg);\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: var(--bs-body-color);\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n .carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon,\n[data-bs-theme=dark] .carousel .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: var(--bs-body-color);\n --bs-offcanvas-bg: var(--bs-body-bg);\n --bs-offcanvas-border-width: var(--bs-border-width);\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-offcanvas-transition: transform 0.3s ease-in-out;\n --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n -webkit-mask-size: 200% 100%;\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text) !important;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-emphasis {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color, inherit);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: var(--#{$prefix}table-color);\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: calc($table-border-width * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-active-bg);\n color: var(--#{$prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-hover-bg);\n color: var(--#{$prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Prevent excessive date input height in Webkit\n // https://github.com/twbs/bootstrap/issues/34433\n &::-webkit-datetime-edit {\n display: block;\n padding: 0;\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};\n\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};\n }\n }\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n --#{$prefix}form-check-bg: #{$form-check-input-bg};\n\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: var(--#{$prefix}form-check-bg);\n background-image: var(--#{$prefix}form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};\n\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: var(--#{$prefix}form-switch-bg);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-switch .form-check-input:not(:checked):not(:focus) {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n &::before:not(.form-control:disabled) {\n position: absolute;\n top: $input-border-width;\n left: $input-border-width;\n width: subtract(100%, add($input-height-inner-quarter, $input-height-inner-half));\n height: $form-floating-label-height;\n content: \"\";\n background-color: $input-bg;\n @include border-radius($input-border-radius);\n }\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n\n > .form-control:disabled ~ label {\n color: $form-floating-label-disabled-color;\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: calc($input-border-width * -1); // stylelint-disable-line function-disallowed-list\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity),\n $border-color: $color\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};\n padding-right: $form-select-feedback-icon-padding-end;\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$body-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: none;\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($primary), $primary, 15%))};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n clear: both;\n font-weight: $font-weight-normal;\n color: var(--#{$prefix}dropdown-link-color);\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}dropdown-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n }\n\n &.active,\n &:active {\n color: var(--#{$prefix}dropdown-link-active-color);\n text-decoration: none;\n @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: var(--#{$prefix}dropdown-header-color);\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n // scss-docs-start dropdown-dark-css-vars\n --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n // scss-docs-end dropdown-dark-css-vars\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down($width: $caret-width) {\n border-top: $width solid;\n border-right: $width solid transparent;\n border-bottom: 0;\n border-left: $width solid transparent;\n}\n\n@mixin caret-up($width: $caret-width) {\n border-top: 0;\n border-right: $width solid transparent;\n border-bottom: $width solid;\n border-left: $width solid transparent;\n}\n\n@mixin caret-end($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: 0;\n border-bottom: $width solid transparent;\n border-left: $width solid;\n}\n\n@mixin caret-start($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: $width solid;\n border-bottom: $width solid transparent;\n}\n\n@mixin caret(\n $direction: down,\n $width: $caret-width,\n $spacing: $caret-spacing,\n $vertical-align: $caret-vertical-align\n) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down($width);\n } @else if $direction == up {\n @include caret-up($width);\n } @else if $direction == end {\n @include caret-end($width);\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @include caret-start($width);\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n background: none;\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n background: none;\n border: 0;\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .show > .nav-link,\n .nav-link.active {\n color: var(--#{$prefix}navbar-active-color);\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n line-height: 1;\n color: var(--#{$prefix}navbar-color);\n background-color: transparent; // remove default button style\n border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas {\n // stylelint-disable declaration-no-important\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n @include box-shadow(none);\n @include transition(none);\n // stylelint-enable declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n @include deprecate(\"`.navbar-light`\", \"v5.2.0\", \"v6.0.0\", true);\n}\n\n.navbar-dark {\n // scss-docs-start navbar-dark-css-vars\n --#{$prefix}navbar-color: #{$navbar-dark-color};\n --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n // scss-docs-end navbar-dark-css-vars\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .navbar {\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n // scss-docs-start card-css-vars\n --#{$prefix}card-spacer-y: #{$card-spacer-y};\n --#{$prefix}card-spacer-x: #{$card-spacer-x};\n --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n --#{$prefix}card-title-color: #{$card-title-color};\n --#{$prefix}card-subtitle-color: #{$card-subtitle-color};\n --#{$prefix}card-border-width: #{$card-border-width};\n --#{$prefix}card-border-color: #{$card-border-color};\n --#{$prefix}card-border-radius: #{$card-border-radius};\n --#{$prefix}card-box-shadow: #{$card-box-shadow};\n --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n --#{$prefix}card-cap-bg: #{$card-cap-bg};\n --#{$prefix}card-cap-color: #{$card-cap-color};\n --#{$prefix}card-height: #{$card-height};\n --#{$prefix}card-color: #{$card-color};\n --#{$prefix}card-bg: #{$card-bg};\n --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n --#{$prefix}card-group-margin: #{$card-group-margin};\n // scss-docs-end card-css-vars\n\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: var(--#{$prefix}card-height);\n word-wrap: break-word;\n background-color: var(--#{$prefix}card-bg);\n background-clip: border-box;\n border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n @include border-radius(var(--#{$prefix}card-border-radius));\n @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n margin-bottom: var(--#{$prefix}card-title-spacer-y);\n color: var(--#{$prefix}card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list\n margin-bottom: 0;\n color: var(--#{$prefix}card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: var(--#{$prefix}card-spacer-x);\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:first-child {\n @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0);\n }\n}\n\n.card-footer {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:last-child {\n @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius));\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n border-bottom: 0;\n\n .nav-link.active {\n background-color: var(--#{$prefix}card-bg);\n border-bottom-color: var(--#{$prefix}card-bg);\n }\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--#{$prefix}card-img-overlay-padding);\n @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: var(--#{$prefix}card-group-margin);\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion {\n // scss-docs-start accordion-css-vars\n --#{$prefix}accordion-color: #{$accordion-color};\n --#{$prefix}accordion-bg: #{$accordion-bg};\n --#{$prefix}accordion-transition: #{$accordion-transition};\n --#{$prefix}accordion-border-color: #{$accordion-border-color};\n --#{$prefix}accordion-border-width: #{$accordion-border-width};\n --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};\n --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n @include font-size($font-size-base);\n color: var(--#{$prefix}accordion-btn-color);\n text-align: left; // Reset button style\n background-color: var(--#{$prefix}accordion-btn-bg);\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition(var(--#{$prefix}accordion-transition));\n\n &:not(.collapsed) {\n color: var(--#{$prefix}accordion-active-color);\n background-color: var(--#{$prefix}accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n &::after {\n background-image: var(--#{$prefix}accordion-btn-active-icon);\n transform: var(--#{$prefix}accordion-btn-icon-transform);\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: var(--#{$prefix}accordion-btn-icon-width);\n height: var(--#{$prefix}accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--#{$prefix}accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--#{$prefix}accordion-btn-icon-width);\n @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--#{$prefix}accordion-color);\n background-color: var(--#{$prefix}accordion-bg);\n border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n &:first-of-type {\n @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n }\n }\n}\n\n.accordion-body {\n padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n &,\n &.collapsed {\n @include border-radius(0);\n }\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .accordion-button::after {\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon-dark)};\n }\n }\n}\n",".breadcrumb {\n // scss-docs-start breadcrumb-css-vars\n --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n // scss-docs-end breadcrumb-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n @include font-size(var(--#{$prefix}breadcrumb-font-size));\n list-style: none;\n background-color: var(--#{$prefix}breadcrumb-bg);\n @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n color: var(--#{$prefix}breadcrumb-divider-color);\n content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: var(--#{$prefix}breadcrumb-item-active-color);\n }\n}\n",".pagination {\n // scss-docs-start pagination-css-vars\n --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-color: #{$pagination-color};\n --#{$prefix}pagination-bg: #{$pagination-bg};\n --#{$prefix}pagination-border-width: #{$pagination-border-width};\n --#{$prefix}pagination-border-color: #{$pagination-border-color};\n --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n --#{$prefix}pagination-active-color: #{$pagination-active-color};\n --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n // scss-docs-end pagination-css-vars\n\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n @include font-size(var(--#{$prefix}pagination-font-size));\n color: var(--#{$prefix}pagination-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}pagination-bg);\n border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: var(--#{$prefix}pagination-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}pagination-hover-bg);\n border-color: var(--#{$prefix}pagination-hover-border-color);\n }\n\n &:focus {\n z-index: 3;\n color: var(--#{$prefix}pagination-focus-color);\n background-color: var(--#{$prefix}pagination-focus-bg);\n outline: $pagination-focus-outline;\n box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n }\n\n &.active,\n .active > & {\n z-index: 3;\n color: var(--#{$prefix}pagination-active-color);\n @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n border-color: var(--#{$prefix}pagination-active-border-color);\n }\n\n &.disabled,\n .disabled > & {\n color: var(--#{$prefix}pagination-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}pagination-disabled-bg);\n border-color: var(--#{$prefix}pagination-disabled-border-color);\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n @if $pagination-margin-start == calc($pagination-border-width * -1) {\n &:first-child {\n .page-link {\n @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n } @else {\n // Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}pagination-padding-x: #{$padding-x};\n --#{$prefix}pagination-padding-y: #{$padding-y};\n @include rfs($font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n --#{$prefix}alert-link-color: inherit;\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n color: var(--#{$prefix}alert-link-color);\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert\n@each $state in map-keys($theme-colors) {\n .alert-#{$state} {\n --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text);\n --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);\n --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle);\n --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text);\n }\n}\n// scss-docs-end alert-modifiers\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress,\n.progress-stacked {\n // scss-docs-start progress-css-vars\n --#{$prefix}progress-height: #{$progress-height};\n @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n --#{$prefix}progress-bg: #{$progress-bg};\n --#{$prefix}progress-border-radius: #{$progress-border-radius};\n --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n --#{$prefix}progress-bar-color: #{$progress-bar-color};\n --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n // scss-docs-end progress-css-vars\n\n display: flex;\n height: var(--#{$prefix}progress-height);\n overflow: hidden; // force rounded corners by cropping it\n @include font-size(var(--#{$prefix}progress-font-size));\n background-color: var(--#{$prefix}progress-bg);\n @include border-radius(var(--#{$prefix}progress-border-radius));\n @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--#{$prefix}progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--#{$prefix}progress-bar-bg);\n @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // scss-docs-start list-group-css-vars\n --#{$prefix}list-group-color: #{$list-group-color};\n --#{$prefix}list-group-bg: #{$list-group-bg};\n --#{$prefix}list-group-border-color: #{$list-group-border-color};\n --#{$prefix}list-group-border-width: #{$list-group-border-width};\n --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n --#{$prefix}list-group-action-color: #{$list-group-action-color};\n --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n --#{$prefix}list-group-active-color: #{$list-group-active-color};\n --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n // scss-docs-end list-group-css-vars\n\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > .list-group-item::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: var(--#{$prefix}list-group-action-color);\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--#{$prefix}list-group-action-hover-bg);\n }\n\n &:active {\n color: var(--#{$prefix}list-group-action-active-color);\n background-color: var(--#{$prefix}list-group-action-active-bg);\n }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n color: var(--#{$prefix}list-group-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}list-group-bg);\n border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}list-group-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}list-group-disabled-bg);\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-active-color);\n background-color: var(--#{$prefix}list-group-active-bg);\n border-color: var(--#{$prefix}list-group-active-border-color);\n }\n\n // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n & + .list-group-item {\n border-top-width: 0;\n\n &.active {\n margin-top: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-top-width: var(--#{$prefix}list-group-border-width);\n }\n }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child:not(:last-child) {\n @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n @include border-top-end-radius(0);\n }\n\n &:last-child:not(:first-child) {\n @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: var(--#{$prefix}list-group-border-width);\n border-left-width: 0;\n\n &.active {\n margin-left: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-left-width: var(--#{$prefix}list-group-border-width);\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state in map-keys($theme-colors) {\n .list-group-item-#{$state} {\n --#{$prefix}list-group-color: var(--#{$prefix}#{$state}-text);\n --#{$prefix}list-group-bg: var(--#{$prefix}#{$state}-bg-subtle);\n --#{$prefix}list-group-border-color: var(--#{$prefix}#{$state}-border-subtle);\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n --#{$prefix}list-group-action-hover-color: var(--#{$prefix}emphasis-color);\n --#{$prefix}list-group-action-hover-bg: var(--#{$prefix}#{$state}-border-subtle);\n }\n\n &:active {\n --#{$prefix}list-group-active-color: var(--#{$prefix}emphasis-color);\n --#{$prefix}list-group-active-bg: var(--#{$prefix}#{$state}-text);\n --#{$prefix}list-group-active-border-color: var(--#{$prefix}#{$state}-text);\n }\n }\n }\n}\n// scss-docs-end list-group-modifiers\n","// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n --#{$prefix}btn-close-color: #{$btn-close-color};\n --#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };\n --#{$prefix}btn-close-opacity: #{$btn-close-opacity};\n --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};\n --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};\n --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};\n --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};\n --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};\n\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: var(--#{$prefix}btn-close-color);\n background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: var(--#{$prefix}btn-close-opacity);\n\n // Override <a>'s hover style\n &:hover {\n color: var(--#{$prefix}btn-close-color);\n text-decoration: none;\n opacity: var(--#{$prefix}btn-close-hover-opacity);\n }\n\n &:focus {\n outline: 0;\n box-shadow: var(--#{$prefix}btn-close-focus-shadow);\n opacity: var(--#{$prefix}btn-close-focus-opacity);\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: var(--#{$prefix}btn-close-disabled-opacity);\n }\n}\n\n@mixin btn-close-white() {\n filter: var(--#{$prefix}btn-close-white-filter);\n}\n\n.btn-close-white {\n @include btn-close-white();\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .btn-close {\n @include btn-close-white();\n }\n }\n}\n",".toast {\n // scss-docs-start toast-css-vars\n --#{$prefix}toast-zindex: #{$zindex-toast};\n --#{$prefix}toast-padding-x: #{$toast-padding-x};\n --#{$prefix}toast-padding-y: #{$toast-padding-y};\n --#{$prefix}toast-spacing: #{$toast-spacing};\n --#{$prefix}toast-max-width: #{$toast-max-width};\n @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n --#{$prefix}toast-color: #{$toast-color};\n --#{$prefix}toast-bg: #{$toast-background-color};\n --#{$prefix}toast-border-width: #{$toast-border-width};\n --#{$prefix}toast-border-color: #{$toast-border-color};\n --#{$prefix}toast-border-radius: #{$toast-border-radius};\n --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n --#{$prefix}toast-header-color: #{$toast-header-color};\n --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n // scss-docs-end toast-css-vars\n\n width: var(--#{$prefix}toast-max-width);\n max-width: 100%;\n @include font-size(var(--#{$prefix}toast-font-size));\n color: var(--#{$prefix}toast-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}toast-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n box-shadow: var(--#{$prefix}toast-box-shadow);\n @include border-radius(var(--#{$prefix}toast-border-radius));\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n --#{$prefix}toast-zindex: #{$zindex-toast};\n\n position: absolute;\n z-index: var(--#{$prefix}toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: var(--#{$prefix}toast-spacing);\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n color: var(--#{$prefix}toast-header-color);\n background-color: var(--#{$prefix}toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);\n @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));\n\n .btn-close {\n margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: var(--#{$prefix}toast-padding-x);\n }\n}\n\n.toast-body {\n padding: var(--#{$prefix}toast-padding-x);\n word-wrap: break-word;\n}\n","// stylelint-disable function-disallowed-list\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n // scss-docs-start modal-css-vars\n --#{$prefix}modal-zindex: #{$zindex-modal};\n --#{$prefix}modal-width: #{$modal-md};\n --#{$prefix}modal-padding: #{$modal-inner-padding};\n --#{$prefix}modal-margin: #{$modal-dialog-margin};\n --#{$prefix}modal-color: #{$modal-content-color};\n --#{$prefix}modal-bg: #{$modal-content-bg};\n --#{$prefix}modal-border-color: #{$modal-content-border-color};\n --#{$prefix}modal-border-width: #{$modal-content-border-width};\n --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n // scss-docs-end modal-css-vars\n\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--#{$prefix}modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--#{$prefix}modal-margin);\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: var(--#{$prefix}modal-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}modal-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n @include border-radius(var(--#{$prefix}modal-border-radius));\n @include box-shadow(var(--#{$prefix}modal-box-shadow));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n // scss-docs-start modal-backdrop-css-vars\n --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n // scss-docs-end modal-backdrop-css-vars\n\n @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: var(--#{$prefix}modal-header-padding);\n border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);\n @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n .btn-close {\n padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);\n margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * .5);\n background-color: var(--#{$prefix}modal-footer-bg);\n border-top: var(--#{$prefix}modal-footer-border-width) solid var(--#{$prefix}modal-footer-border-color);\n @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: calc(var(--#{$prefix}modal-footer-gap) * .5); // Todo in v6: replace with gap on parent class\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n .modal {\n --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n }\n\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: var(--#{$prefix}modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n\n .modal-sm {\n --#{$prefix}modal-width: #{$modal-sm};\n }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-lg};\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-xl};\n }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header,\n .modal-footer {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n // scss-docs-start tooltip-css-vars\n --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n --#{$prefix}tooltip-margin: #{$tooltip-margin};\n @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n --#{$prefix}tooltip-color: #{$tooltip-color};\n --#{$prefix}tooltip-bg: #{$tooltip-bg};\n --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n // scss-docs-end tooltip-css-vars\n\n z-index: var(--#{$prefix}tooltip-zindex);\n display: block;\n padding: var(--#{$prefix}tooltip-arrow-height);\n margin: var(--#{$prefix}tooltip-margin);\n @include deprecate(\"`$tooltip-margin`\", \"v5\", \"v5.x\", true);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}tooltip-font-size));\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: var(--#{$prefix}tooltip-opacity); }\n\n .tooltip-arrow {\n display: block;\n width: var(--#{$prefix}tooltip-arrow-width);\n height: var(--#{$prefix}tooltip-arrow-height);\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-top-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n left: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n right: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-right-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-bottom-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n right: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n left: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-left-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: var(--#{$prefix}tooltip-max-width);\n padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n color: var(--#{$prefix}tooltip-color);\n text-align: center;\n background-color: var(--#{$prefix}tooltip-bg);\n @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n}\n",".popover {\n // scss-docs-start popover-css-vars\n --#{$prefix}popover-zindex: #{$zindex-popover};\n --#{$prefix}popover-max-width: #{$popover-max-width};\n @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n --#{$prefix}popover-bg: #{$popover-bg};\n --#{$prefix}popover-border-width: #{$popover-border-width};\n --#{$prefix}popover-border-color: #{$popover-border-color};\n --#{$prefix}popover-border-radius: #{$popover-border-radius};\n --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n --#{$prefix}popover-header-color: #{$popover-header-color};\n --#{$prefix}popover-header-bg: #{$popover-header-bg};\n --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n --#{$prefix}popover-body-color: #{$popover-body-color};\n --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n // scss-docs-end popover-css-vars\n\n z-index: var(--#{$prefix}popover-zindex);\n display: block;\n max-width: var(--#{$prefix}popover-max-width);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}popover-font-size));\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: var(--#{$prefix}popover-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-radius(var(--#{$prefix}popover-border-radius));\n @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n .popover-arrow {\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n height: var(--#{$prefix}popover-arrow-height);\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n bottom: 0;\n border-top-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n bottom: var(--#{$prefix}popover-border-width);\n border-top-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n > .popover-arrow {\n left: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n left: 0;\n border-right-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n left: var(--#{$prefix}popover-border-width);\n border-right-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n top: 0;\n border-bottom-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n top: var(--#{$prefix}popover-border-width);\n border-bottom-color: var(--#{$prefix}popover-bg);\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n margin-left: calc(-.5 * var(--#{$prefix}popover-arrow-width)); // stylelint-disable-line function-disallowed-list\n content: \"\";\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start {\n > .popover-arrow {\n right: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n right: 0;\n border-left-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n right: var(--#{$prefix}popover-border-width);\n border-left-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size(var(--#{$prefix}popover-header-font-size));\n color: var(--#{$prefix}popover-header-color);\n background-color: var(--#{$prefix}popover-header-bg);\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n color: var(--#{$prefix}popover-body-color);\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n@mixin carousel-dark() {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n\n.carousel-dark {\n @include carousel-dark();\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .carousel {\n @include carousel-dark();\n }\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--#{$prefix}spinner-width);\n height: var(--#{$prefix}spinner-height);\n vertical-align: var(--#{$prefix}spinner-vertical-align);\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n // scss-docs-start spinner-border-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-border-width: #{$spinner-border-width};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-border;\n // scss-docs-end spinner-border-css-vars\n\n border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n // scss-docs-start spinner-border-sm-css-vars\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n // scss-docs-start spinner-grow-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-grow;\n // scss-docs-end spinner-grow-css-vars\n\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n }\n }\n}\n","// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n // scss-docs-start offcanvas-css-vars\n --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n --#{$prefix}offcanvas-color: #{$offcanvas-color};\n --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n --#{$prefix}offcanvas-transition: #{transform $offcanvas-transition-duration ease-in-out};\n --#{$prefix}offcanvas-title-line-height: #{$offcanvas-title-line-height};\n // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @extend %offcanvas-css-vars;\n }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @include media-breakpoint-down($next) {\n position: fixed;\n bottom: 0;\n z-index: var(--#{$prefix}offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--#{$prefix}offcanvas-color);\n visibility: hidden;\n background-color: var(--#{$prefix}offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n @include transition(var(--#{$prefix}offcanvas-transition));\n\n &.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(-100%);\n }\n\n &.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(100%);\n }\n\n &.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(-100%);\n }\n\n &.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(100%);\n }\n\n &.showing,\n &.show:not(.hiding) {\n transform: none;\n }\n\n &.showing,\n &.hiding,\n &.show {\n visibility: visible;\n }\n }\n\n @if not ($infix == \"\") {\n @include media-breakpoint-up($next) {\n --#{$prefix}offcanvas-height: auto;\n --#{$prefix}offcanvas-border-width: 0;\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n }\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n .btn-close {\n padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n overflow-y: auto;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) if($enable-important-utilities, !important, null);\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css b/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css
index d4734d0b1..a4175d4dd 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css
@@ -1,11 +1,11 @@
@charset "UTF-8";
/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
-:root {
+:root,
+[data-bs-theme=light] {
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
@@ -45,6 +45,30 @@
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
+ --bs-primary-text: #0a58ca;
+ --bs-secondary-text: #6c757d;
+ --bs-success-text: #146c43;
+ --bs-info-text: #087990;
+ --bs-warning-text: #997404;
+ --bs-danger-text: #b02a37;
+ --bs-light-text: #6c757d;
+ --bs-dark-text: #495057;
+ --bs-primary-bg-subtle: #cfe2ff;
+ --bs-secondary-bg-subtle: #f8f9fa;
+ --bs-success-bg-subtle: #d1e7dd;
+ --bs-info-bg-subtle: #cff4fc;
+ --bs-warning-bg-subtle: #fff3cd;
+ --bs-danger-bg-subtle: #f8d7da;
+ --bs-light-bg-subtle: #fcfcfd;
+ --bs-dark-bg-subtle: #ced4da;
+ --bs-primary-border-subtle: #9ec5fe;
+ --bs-secondary-border-subtle: #e9ecef;
+ --bs-success-border-subtle: #a3cfbb;
+ --bs-info-border-subtle: #9eeaf9;
+ --bs-warning-border-subtle: #ffe69c;
+ --bs-danger-border-subtle: #f1aeb5;
+ --bs-light-border-subtle: #e9ecef;
+ --bs-dark-border-subtle: #adb5bd;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
@@ -57,7 +81,25 @@
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
+ --bs-emphasis-color: #000;
+ --bs-emphasis-color-rgb: 0, 0, 0;
+ --bs-secondary-color: rgba(33, 37, 41, 0.75);
+ --bs-secondary-color-rgb: 33, 37, 41;
+ --bs-secondary-bg: #e9ecef;
+ --bs-secondary-bg-rgb: 233, 236, 239;
+ --bs-tertiary-color: rgba(33, 37, 41, 0.5);
+ --bs-tertiary-color-rgb: 33, 37, 41;
+ --bs-tertiary-bg: #f8f9fa;
+ --bs-tertiary-bg-rgb: 248, 249, 250;
--bs-body-bg: #fff;
+ --bs-body-bg-rgb: 255, 255, 255;
+ --bs-link-color: #0d6efd;
+ --bs-link-color-rgb: 13, 110, 253;
+ --bs-link-decoration: underline;
+ --bs-link-hover-color: #0a58ca;
+ --bs-link-hover-color-rgb: 10, 88, 202;
+ --bs-code-color: #d63384;
+ --bs-highlight-bg: #fff3cd;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
@@ -68,10 +110,70 @@
--bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem;
- --bs-link-color: #0d6efd;
- --bs-link-hover-color: #0a58ca;
- --bs-code-color: #d63384;
+ --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);
+ --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-emphasis-color: #000;
+ --bs-form-control-bg: var(--bs-body-bg);
+ --bs-form-control-disabled-bg: var(--bs-secondary-bg);
--bs-highlight-bg: #fff3cd;
+ --bs-breakpoint-xs: 0;
+ --bs-breakpoint-sm: 576px;
+ --bs-breakpoint-md: 768px;
+ --bs-breakpoint-lg: 992px;
+ --bs-breakpoint-xl: 1200px;
+ --bs-breakpoint-xxl: 1400px;
+}
+
+[data-bs-theme=dark] {
+ --bs-body-color: #adb5bd;
+ --bs-body-color-rgb: 173, 181, 189;
+ --bs-body-bg: #212529;
+ --bs-body-bg-rgb: 33, 37, 41;
+ --bs-emphasis-color: #f8f9fa;
+ --bs-emphasis-color-rgb: 248, 249, 250;
+ --bs-secondary-color: rgba(173, 181, 189, 0.75);
+ --bs-secondary-color-rgb: 173, 181, 189;
+ --bs-secondary-bg: #343a40;
+ --bs-secondary-bg-rgb: 52, 58, 64;
+ --bs-tertiary-color: rgba(173, 181, 189, 0.5);
+ --bs-tertiary-color-rgb: 173, 181, 189;
+ --bs-tertiary-bg: #2b3035;
+ --bs-tertiary-bg-rgb: 43, 48, 53;
+ --bs-emphasis-color: #fff;
+ --bs-primary-text: #6ea8fe;
+ --bs-secondary-text: #dee2e6;
+ --bs-success-text: #75b798;
+ --bs-info-text: #6edff6;
+ --bs-warning-text: #ffda6a;
+ --bs-danger-text: #ea868f;
+ --bs-light-text: #f8f9fa;
+ --bs-dark-text: #dee2e6;
+ --bs-primary-bg-subtle: #031633;
+ --bs-secondary-bg-subtle: #212529;
+ --bs-success-bg-subtle: #051b11;
+ --bs-info-bg-subtle: #032830;
+ --bs-warning-bg-subtle: #332701;
+ --bs-danger-bg-subtle: #2c0b0e;
+ --bs-light-bg-subtle: #343a40;
+ --bs-dark-bg-subtle: #1a1d20;
+ --bs-primary-border-subtle: #084298;
+ --bs-secondary-border-subtle: #495057;
+ --bs-success-border-subtle: #0f5132;
+ --bs-info-border-subtle: #055160;
+ --bs-warning-border-subtle: #664d03;
+ --bs-danger-border-subtle: #842029;
+ --bs-light-border-subtle: #495057;
+ --bs-dark-border-subtle: #343a40;
+ --bs-heading-color: #fff;
+ --bs-link-color: #6ea8fe;
+ --bs-link-hover-color: #9ec5fe;
+ --bs-link-color-rgb: 110, 168, 254;
+ --bs-link-hover-color-rgb: 158, 197, 254;
+ --bs-code-color: #e685b5;
+ --bs-border-color: #495057;
+ --bs-border-color-translucent: rgba(255, 255, 255, 0.15);
}
*,
@@ -103,7 +205,7 @@ hr {
margin: 1rem 0;
color: inherit;
border: 0;
- border-top: 1px solid;
+ border-top: var(--bs-border-width) solid;
opacity: 0.25;
}
@@ -112,6 +214,7 @@ h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
+ color: var(--bs-heading-color, inherit);
}
h1, .h1 {
@@ -240,11 +343,11 @@ sup {
}
a {
- color: var(--bs-link-color);
+ color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));
text-decoration: underline;
}
a:hover {
- color: var(--bs-link-hover-color);
+ --bs-link-color-rgb: var(--bs-link-hover-color-rgb);
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
@@ -311,7 +414,7 @@ table {
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
- color: #6c757d;
+ color: var(--bs-secondary-color);
text-align: right;
}
@@ -602,9 +705,9 @@ progress {
.img-thumbnail {
padding: 0.25rem;
- background-color: #fff;
- border: 1px solid var(--bs-border-color);
- border-radius: 0.375rem;
+ background-color: var(--bs-body-bg);
+ border: var(--bs-border-width) solid var(--bs-border-color);
+ border-radius: var(--bs-border-radius);
max-width: 100%;
height: auto;
}
@@ -620,7 +723,7 @@ progress {
.figure-caption {
font-size: 0.875em;
- color: #6c757d;
+ color: var(--bs-secondary-color);
}
.container,
@@ -1011,51 +1114,51 @@ progress {
margin-right: 91.66666667%;
}
.g-sm-0,
-.gx-sm-0 {
+ .gx-sm-0 {
--bs-gutter-x: 0;
}
.g-sm-0,
-.gy-sm-0 {
+ .gy-sm-0 {
--bs-gutter-y: 0;
}
.g-sm-1,
-.gx-sm-1 {
+ .gx-sm-1 {
--bs-gutter-x: 0.25rem;
}
.g-sm-1,
-.gy-sm-1 {
+ .gy-sm-1 {
--bs-gutter-y: 0.25rem;
}
.g-sm-2,
-.gx-sm-2 {
+ .gx-sm-2 {
--bs-gutter-x: 0.5rem;
}
.g-sm-2,
-.gy-sm-2 {
+ .gy-sm-2 {
--bs-gutter-y: 0.5rem;
}
.g-sm-3,
-.gx-sm-3 {
+ .gx-sm-3 {
--bs-gutter-x: 1rem;
}
.g-sm-3,
-.gy-sm-3 {
+ .gy-sm-3 {
--bs-gutter-y: 1rem;
}
.g-sm-4,
-.gx-sm-4 {
+ .gx-sm-4 {
--bs-gutter-x: 1.5rem;
}
.g-sm-4,
-.gy-sm-4 {
+ .gy-sm-4 {
--bs-gutter-y: 1.5rem;
}
.g-sm-5,
-.gx-sm-5 {
+ .gx-sm-5 {
--bs-gutter-x: 3rem;
}
.g-sm-5,
-.gy-sm-5 {
+ .gy-sm-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1180,51 +1283,51 @@ progress {
margin-right: 91.66666667%;
}
.g-md-0,
-.gx-md-0 {
+ .gx-md-0 {
--bs-gutter-x: 0;
}
.g-md-0,
-.gy-md-0 {
+ .gy-md-0 {
--bs-gutter-y: 0;
}
.g-md-1,
-.gx-md-1 {
+ .gx-md-1 {
--bs-gutter-x: 0.25rem;
}
.g-md-1,
-.gy-md-1 {
+ .gy-md-1 {
--bs-gutter-y: 0.25rem;
}
.g-md-2,
-.gx-md-2 {
+ .gx-md-2 {
--bs-gutter-x: 0.5rem;
}
.g-md-2,
-.gy-md-2 {
+ .gy-md-2 {
--bs-gutter-y: 0.5rem;
}
.g-md-3,
-.gx-md-3 {
+ .gx-md-3 {
--bs-gutter-x: 1rem;
}
.g-md-3,
-.gy-md-3 {
+ .gy-md-3 {
--bs-gutter-y: 1rem;
}
.g-md-4,
-.gx-md-4 {
+ .gx-md-4 {
--bs-gutter-x: 1.5rem;
}
.g-md-4,
-.gy-md-4 {
+ .gy-md-4 {
--bs-gutter-y: 1.5rem;
}
.g-md-5,
-.gx-md-5 {
+ .gx-md-5 {
--bs-gutter-x: 3rem;
}
.g-md-5,
-.gy-md-5 {
+ .gy-md-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1349,51 +1452,51 @@ progress {
margin-right: 91.66666667%;
}
.g-lg-0,
-.gx-lg-0 {
+ .gx-lg-0 {
--bs-gutter-x: 0;
}
.g-lg-0,
-.gy-lg-0 {
+ .gy-lg-0 {
--bs-gutter-y: 0;
}
.g-lg-1,
-.gx-lg-1 {
+ .gx-lg-1 {
--bs-gutter-x: 0.25rem;
}
.g-lg-1,
-.gy-lg-1 {
+ .gy-lg-1 {
--bs-gutter-y: 0.25rem;
}
.g-lg-2,
-.gx-lg-2 {
+ .gx-lg-2 {
--bs-gutter-x: 0.5rem;
}
.g-lg-2,
-.gy-lg-2 {
+ .gy-lg-2 {
--bs-gutter-y: 0.5rem;
}
.g-lg-3,
-.gx-lg-3 {
+ .gx-lg-3 {
--bs-gutter-x: 1rem;
}
.g-lg-3,
-.gy-lg-3 {
+ .gy-lg-3 {
--bs-gutter-y: 1rem;
}
.g-lg-4,
-.gx-lg-4 {
+ .gx-lg-4 {
--bs-gutter-x: 1.5rem;
}
.g-lg-4,
-.gy-lg-4 {
+ .gy-lg-4 {
--bs-gutter-y: 1.5rem;
}
.g-lg-5,
-.gx-lg-5 {
+ .gx-lg-5 {
--bs-gutter-x: 3rem;
}
.g-lg-5,
-.gy-lg-5 {
+ .gy-lg-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1518,51 +1621,51 @@ progress {
margin-right: 91.66666667%;
}
.g-xl-0,
-.gx-xl-0 {
+ .gx-xl-0 {
--bs-gutter-x: 0;
}
.g-xl-0,
-.gy-xl-0 {
+ .gy-xl-0 {
--bs-gutter-y: 0;
}
.g-xl-1,
-.gx-xl-1 {
+ .gx-xl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xl-1,
-.gy-xl-1 {
+ .gy-xl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xl-2,
-.gx-xl-2 {
+ .gx-xl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xl-2,
-.gy-xl-2 {
+ .gy-xl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xl-3,
-.gx-xl-3 {
+ .gx-xl-3 {
--bs-gutter-x: 1rem;
}
.g-xl-3,
-.gy-xl-3 {
+ .gy-xl-3 {
--bs-gutter-y: 1rem;
}
.g-xl-4,
-.gx-xl-4 {
+ .gx-xl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xl-4,
-.gy-xl-4 {
+ .gy-xl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xl-5,
-.gx-xl-5 {
+ .gx-xl-5 {
--bs-gutter-x: 3rem;
}
.g-xl-5,
-.gy-xl-5 {
+ .gy-xl-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1687,51 +1790,51 @@ progress {
margin-right: 91.66666667%;
}
.g-xxl-0,
-.gx-xxl-0 {
+ .gx-xxl-0 {
--bs-gutter-x: 0;
}
.g-xxl-0,
-.gy-xxl-0 {
+ .gy-xxl-0 {
--bs-gutter-y: 0;
}
.g-xxl-1,
-.gx-xxl-1 {
+ .gx-xxl-1 {
--bs-gutter-x: 0.25rem;
}
.g-xxl-1,
-.gy-xxl-1 {
+ .gy-xxl-1 {
--bs-gutter-y: 0.25rem;
}
.g-xxl-2,
-.gx-xxl-2 {
+ .gx-xxl-2 {
--bs-gutter-x: 0.5rem;
}
.g-xxl-2,
-.gy-xxl-2 {
+ .gy-xxl-2 {
--bs-gutter-y: 0.5rem;
}
.g-xxl-3,
-.gx-xxl-3 {
+ .gx-xxl-3 {
--bs-gutter-x: 1rem;
}
.g-xxl-3,
-.gy-xxl-3 {
+ .gy-xxl-3 {
--bs-gutter-y: 1rem;
}
.g-xxl-4,
-.gx-xxl-4 {
+ .gx-xxl-4 {
--bs-gutter-x: 1.5rem;
}
.g-xxl-4,
-.gy-xxl-4 {
+ .gy-xxl-4 {
--bs-gutter-y: 1.5rem;
}
.g-xxl-5,
-.gx-xxl-5 {
+ .gx-xxl-5 {
--bs-gutter-x: 3rem;
}
.g-xxl-5,
-.gy-xxl-5 {
+ .gy-xxl-5 {
--bs-gutter-y: 3rem;
}
}
@@ -1755,7 +1858,7 @@ progress {
.table > :not(caption) > * > * {
padding: 0.5rem 0.5rem;
background-color: var(--bs-table-bg);
- border-bottom-width: 1px;
+ border-bottom-width: var(--bs-border-width);
box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);
}
.table > tbody {
@@ -1766,7 +1869,7 @@ progress {
}
.table-group-divider {
- border-top: 2px solid currentcolor;
+ border-top: calc(var(--bs-border-width) * 2) solid currentcolor;
}
.caption-top {
@@ -1778,10 +1881,10 @@ progress {
}
.table-bordered > :not(caption) > * {
- border-width: 1px 0;
+ border-width: var(--bs-border-width) 0;
}
.table-bordered > :not(caption) > * > * {
- border-width: 0 1px;
+ border-width: 0 var(--bs-border-width);
}
.table-borderless > :not(caption) > * > * {
@@ -1963,29 +2066,29 @@ progress {
}
.col-form-label {
- padding-top: calc(0.375rem + 1px);
- padding-bottom: calc(0.375rem + 1px);
+ padding-top: calc(0.375rem + var(--bs-border-width));
+ padding-bottom: calc(0.375rem + var(--bs-border-width));
margin-bottom: 0;
font-size: inherit;
line-height: 1.5;
}
.col-form-label-lg {
- padding-top: calc(0.5rem + 1px);
- padding-bottom: calc(0.5rem + 1px);
+ padding-top: calc(0.5rem + var(--bs-border-width));
+ padding-bottom: calc(0.5rem + var(--bs-border-width));
font-size: 1.25rem;
}
.col-form-label-sm {
- padding-top: calc(0.25rem + 1px);
- padding-bottom: calc(0.25rem + 1px);
+ padding-top: calc(0.25rem + var(--bs-border-width));
+ padding-bottom: calc(0.25rem + var(--bs-border-width));
font-size: 0.875rem;
}
.form-text {
margin-top: 0.25rem;
font-size: 0.875em;
- color: #6c757d;
+ color: var(--bs-secondary-color);
}
.form-control {
@@ -1995,10 +2098,10 @@ progress {
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
- color: #212529;
- background-color: #fff;
+ color: var(--bs-body-color);
+ background-color: var(--bs-form-control-bg);
background-clip: padding-box;
- border: 1px solid #ced4da;
+ border: var(--bs-border-width) solid var(--bs-border-color);
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
@@ -2017,8 +2120,8 @@ progress {
cursor: pointer;
}
.form-control:focus {
- color: #212529;
- background-color: #fff;
+ color: var(--bs-body-color);
+ background-color: var(--bs-form-control-bg);
border-color: #86b7fe;
outline: 0;
box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
@@ -2026,16 +2129,20 @@ progress {
.form-control::-webkit-date-and-time-value {
height: 1.5em;
}
+.form-control::-webkit-datetime-edit {
+ display: block;
+ padding: 0;
+}
.form-control::-moz-placeholder {
- color: #6c757d;
+ color: var(--bs-secondary-color);
opacity: 1;
}
.form-control::placeholder {
- color: #6c757d;
+ color: var(--bs-secondary-color);
opacity: 1;
}
.form-control:disabled {
- background-color: #e9ecef;
+ background-color: var(--bs-form-control-disabled-bg);
opacity: 1;
}
.form-control::-webkit-file-upload-button {
@@ -2043,13 +2150,13 @@ progress {
margin: -0.375rem -0.75rem;
-webkit-margin-end: 0.75rem;
margin-inline-end: 0.75rem;
- color: #212529;
- background-color: #e9ecef;
+ color: var(--bs-body-color);
+ background-color: var(--bs-tertiary-bg);
pointer-events: none;
border-color: inherit;
border-style: solid;
border-width: 0;
- border-inline-end-width: 1px;
+ border-inline-end-width: var(--bs-border-width);
border-radius: 0;
-webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
@@ -2059,13 +2166,13 @@ progress {
margin: -0.375rem -0.75rem;
-webkit-margin-end: 0.75rem;
margin-inline-end: 0.75rem;
- color: #212529;
- background-color: #e9ecef;
+ color: var(--bs-body-color);
+ background-color: var(--bs-tertiary-bg);
pointer-events: none;
border-color: inherit;
border-style: solid;
border-width: 0;
- border-inline-end-width: 1px;
+ border-inline-end-width: var(--bs-border-width);
border-radius: 0;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}
@@ -2079,10 +2186,10 @@ progress {
}
}
.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {
- background-color: #dde0e3;
+ background-color: var(--bs-secondary-bg);
}
.form-control:hover:not(:disabled):not([readonly])::file-selector-button {
- background-color: #dde0e3;
+ background-color: var(--bs-secondary-bg);
}
.form-control-plaintext {
@@ -2091,10 +2198,10 @@ progress {
padding: 0.375rem 0;
margin-bottom: 0;
line-height: 1.5;
- color: #212529;
+ color: var(--bs-body-color);
background-color: transparent;
border: solid transparent;
- border-width: 1px 0;
+ border-width: var(--bs-border-width) 0;
}
.form-control-plaintext:focus {
outline: 0;
@@ -2105,7 +2212,7 @@ progress {
}
.form-control-sm {
- min-height: calc(1.5em + 0.5rem + 2px);
+ min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
border-radius: 0.25rem;
@@ -2124,7 +2231,7 @@ progress {
}
.form-control-lg {
- min-height: calc(1.5em + 1rem + 2px);
+ min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));
padding: 0.5rem 1rem;
font-size: 1.25rem;
border-radius: 0.5rem;
@@ -2143,18 +2250,18 @@ progress {
}
textarea.form-control {
- min-height: calc(1.5em + 0.75rem + 2px);
+ min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));
}
textarea.form-control-sm {
- min-height: calc(1.5em + 0.5rem + 2px);
+ min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));
}
textarea.form-control-lg {
- min-height: calc(1.5em + 1rem + 2px);
+ min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));
}
.form-control-color {
width: 3rem;
- height: calc(1.5em + 0.75rem + 2px);
+ height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));
padding: 0.375rem;
}
.form-control-color:not(:disabled):not([readonly]) {
@@ -2168,13 +2275,14 @@ textarea.form-control-lg {
border-radius: 0.375rem;
}
.form-control-color.form-control-sm {
- height: calc(1.5em + 0.5rem + 2px);
+ height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));
}
.form-control-color.form-control-lg {
- height: calc(1.5em + 1rem + 2px);
+ height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));
}
.form-select {
+ --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
display: block;
width: 100%;
padding: 0.375rem 0.75rem 0.375rem 2.25rem;
@@ -2182,13 +2290,13 @@ textarea.form-control-lg {
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
- color: #212529;
- background-color: #fff;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+ color: var(--bs-body-color);
+ background-color: var(--bs-form-control-bg);
+ background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);
background-repeat: no-repeat;
background-position: left 0.75rem center;
background-size: 16px 12px;
- border: 1px solid #ced4da;
+ border: var(--bs-border-width) solid var(--bs-border-color);
border-radius: 0.375rem;
transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-webkit-appearance: none;
@@ -2210,11 +2318,11 @@ textarea.form-control-lg {
background-image: none;
}
.form-select:disabled {
- background-color: #e9ecef;
+ background-color: var(--bs-form-control-disabled-bg);
}
.form-select:-moz-focusring {
color: transparent;
- text-shadow: 0 0 0 #212529;
+ text-shadow: 0 0 0 var(--bs-body-color);
}
.form-select-sm {
@@ -2233,6 +2341,10 @@ textarea.form-control-lg {
border-radius: 0.5rem;
}
+[data-bs-theme=dark] .form-select {
+ --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
+}
+
.form-check {
display: block;
min-height: 1.5rem;
@@ -2256,15 +2368,17 @@ textarea.form-control-lg {
}
.form-check-input {
+ --bs-form-check-bg: var(--bs-form-control-bg);
width: 1em;
height: 1em;
margin-top: 0.25em;
vertical-align: top;
- background-color: #fff;
+ background-color: var(--bs-form-check-bg);
+ background-image: var(--bs-form-check-bg-image);
background-repeat: no-repeat;
background-position: center;
background-size: contain;
- border: 1px solid rgba(0, 0, 0, 0.25);
+ border: var(--bs-border-width) solid var(--bs-border-color);
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
@@ -2291,15 +2405,15 @@ textarea.form-control-lg {
border-color: #0d6efd;
}
.form-check-input:checked[type=checkbox] {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
+ --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e");
}
.form-check-input:checked[type=radio] {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
+ --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e");
}
.form-check-input[type=checkbox]:indeterminate {
background-color: #0d6efd;
border-color: #0d6efd;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
+ --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e");
}
.form-check-input:disabled {
pointer-events: none;
@@ -2315,9 +2429,10 @@ textarea.form-control-lg {
padding-right: 2.5em;
}
.form-switch .form-check-input {
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");
width: 2em;
margin-right: -2.5em;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");
+ background-image: var(--bs-form-switch-bg);
background-position: right center;
border-radius: 2em;
transition: background-position 0.15s ease-in-out;
@@ -2328,11 +2443,11 @@ textarea.form-control-lg {
}
}
.form-switch .form-check-input:focus {
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e");
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e");
}
.form-switch .form-check-input:checked {
background-position: left center;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e");
}
.form-switch.form-check-reverse {
padding-left: 2.5em;
@@ -2359,6 +2474,10 @@ textarea.form-control-lg {
opacity: 0.65;
}
+[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {
+ --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e");
+}
+
.form-range {
width: 100%;
height: 1.5rem;
@@ -2406,7 +2525,7 @@ textarea.form-control-lg {
height: 0.5rem;
color: transparent;
cursor: pointer;
- background-color: #dee2e6;
+ background-color: var(--bs-tertiary-bg);
border-color: transparent;
border-radius: 1rem;
}
@@ -2435,7 +2554,7 @@ textarea.form-control-lg {
height: 0.5rem;
color: transparent;
cursor: pointer;
- background-color: #dee2e6;
+ background-color: var(--bs-tertiary-bg);
border-color: transparent;
border-radius: 1rem;
}
@@ -2443,19 +2562,29 @@ textarea.form-control-lg {
pointer-events: none;
}
.form-range:disabled::-webkit-slider-thumb {
- background-color: #adb5bd;
+ background-color: var(--bs-secondary-color);
}
.form-range:disabled::-moz-range-thumb {
- background-color: #adb5bd;
+ background-color: var(--bs-secondary-color);
}
.form-floating {
position: relative;
}
+.form-floating::before:not(.form-control:disabled) {
+ position: absolute;
+ top: var(--bs-border-width);
+ right: var(--bs-border-width);
+ width: calc(100% - (calc(calc(0.375em + 0.1875rem) + calc(0.75em + 0.375rem))));
+ height: 1.875em;
+ content: "";
+ background-color: var(--bs-form-control-bg);
+ border-radius: 0.375rem;
+}
.form-floating > .form-control,
.form-floating > .form-control-plaintext,
.form-floating > .form-select {
- height: calc(3.5rem + 2px);
+ height: calc(3.5rem + calc(var(--bs-border-width) * 2));
line-height: 1.25;
}
.form-floating > label {
@@ -2470,7 +2599,7 @@ textarea.form-control-lg {
text-overflow: ellipsis;
white-space: nowrap;
pointer-events: none;
- border: 1px solid transparent;
+ border: var(--bs-border-width) solid transparent;
transform-origin: 100% 0;
transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;
}
@@ -2525,7 +2654,10 @@ textarea.form-control-lg {
transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);
}
.form-floating > .form-control-plaintext ~ label {
- border-width: 1px 0;
+ border-width: var(--bs-border-width) 0;
+}
+.form-floating > .form-control:disabled ~ label {
+ color: #6c757d;
}
.input-group {
@@ -2563,11 +2695,11 @@ textarea.form-control-lg {
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
- color: #212529;
+ color: var(--bs-body-color);
text-align: center;
white-space: nowrap;
- background-color: #e9ecef;
- border: 1px solid #ced4da;
+ background-color: var(--bs-tertiary-bg);
+ border: var(--bs-border-width) solid var(--bs-border-color);
border-radius: 0.375rem;
}
@@ -2609,7 +2741,7 @@ textarea.form-control-lg {
border-bottom-left-radius: 0;
}
.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {
- margin-right: -1px;
+ margin-right: calc(var(--bs-border-width) * -1);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
@@ -2624,7 +2756,7 @@ textarea.form-control-lg {
width: 100%;
margin-top: 0.25rem;
font-size: 0.875em;
- color: #198754;
+ color: var(--bs-success-text);
}
.valid-tooltip {
@@ -2637,8 +2769,8 @@ textarea.form-control-lg {
margin-top: 0.1rem;
font-size: 0.875rem;
color: #fff;
- background-color: rgba(25, 135, 84, 0.9);
- border-radius: 0.375rem;
+ background-color: var(--bs-success);
+ border-radius: var(--bs-border-radius);
}
.was-validated :valid ~ .valid-feedback,
@@ -2649,7 +2781,7 @@ textarea.form-control-lg {
}
.was-validated .form-control:valid, .form-control.is-valid {
- border-color: #198754;
+ border-color: var(--bs-success);
padding-left: calc(1.5em + 0.75rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
background-repeat: no-repeat;
@@ -2657,8 +2789,8 @@ textarea.form-control-lg {
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.was-validated .form-control:valid:focus, .form-control.is-valid:focus {
- border-color: #198754;
- box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+ border-color: var(--bs-success);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);
}
.was-validated textarea.form-control:valid, textarea.form-control.is-valid {
@@ -2667,17 +2799,17 @@ textarea.form-control-lg {
}
.was-validated .form-select:valid, .form-select.is-valid {
- border-color: #198754;
+ border-color: var(--bs-success);
}
.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] {
+ --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
padding-left: 4.125rem;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
background-position: left 0.75rem center, center left 2.25rem;
background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.was-validated .form-select:valid:focus, .form-select.is-valid:focus {
- border-color: #198754;
- box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+ border-color: var(--bs-success);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);
}
.was-validated .form-control-color:valid, .form-control-color.is-valid {
@@ -2685,16 +2817,16 @@ textarea.form-control-lg {
}
.was-validated .form-check-input:valid, .form-check-input.is-valid {
- border-color: #198754;
+ border-color: var(--bs-success);
}
.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {
- background-color: #198754;
+ background-color: var(--bs-success-text);
}
.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {
- box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);
}
.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
- color: #198754;
+ color: var(--bs-success-text);
}
.form-check-inline .form-check-input ~ .valid-feedback {
@@ -2714,7 +2846,7 @@ textarea.form-control-lg {
width: 100%;
margin-top: 0.25rem;
font-size: 0.875em;
- color: #dc3545;
+ color: var(--bs-danger-text);
}
.invalid-tooltip {
@@ -2727,8 +2859,8 @@ textarea.form-control-lg {
margin-top: 0.1rem;
font-size: 0.875rem;
color: #fff;
- background-color: rgba(220, 53, 69, 0.9);
- border-radius: 0.375rem;
+ background-color: var(--bs-danger);
+ border-radius: var(--bs-border-radius);
}
.was-validated :invalid ~ .invalid-feedback,
@@ -2739,7 +2871,7 @@ textarea.form-control-lg {
}
.was-validated .form-control:invalid, .form-control.is-invalid {
- border-color: #dc3545;
+ border-color: var(--bs-danger);
padding-left: calc(1.5em + 0.75rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
background-repeat: no-repeat;
@@ -2747,8 +2879,8 @@ textarea.form-control-lg {
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+ border-color: var(--bs-danger);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);
}
.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {
@@ -2757,17 +2889,17 @@ textarea.form-control-lg {
}
.was-validated .form-select:invalid, .form-select.is-invalid {
- border-color: #dc3545;
+ border-color: var(--bs-danger);
}
.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] {
+ --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
padding-left: 4.125rem;
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
background-position: left 0.75rem center, center left 2.25rem;
background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {
- border-color: #dc3545;
- box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+ border-color: var(--bs-danger);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);
}
.was-validated .form-control-color:invalid, .form-control-color.is-invalid {
@@ -2775,16 +2907,16 @@ textarea.form-control-lg {
}
.was-validated .form-check-input:invalid, .form-check-input.is-invalid {
- border-color: #dc3545;
+ border-color: var(--bs-danger);
}
.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {
- background-color: #dc3545;
+ background-color: var(--bs-danger-text);
}
.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {
- box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);
+ box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);
}
.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
- color: #dc3545;
+ color: var(--bs-danger-text);
}
.form-check-inline .form-check-input ~ .invalid-feedback {
@@ -2808,7 +2940,7 @@ textarea.form-control-lg {
--bs-btn-line-height: 1.5;
--bs-btn-color: #212529;
--bs-btn-bg: transparent;
- --bs-btn-border-width: 1px;
+ --bs-btn-border-width: var(--bs-border-width);
--bs-btn-border-color: transparent;
--bs-btn-border-radius: 0.375rem;
--bs-btn-hover-border-color: transparent;
@@ -3255,18 +3387,18 @@ textarea.form-control-lg {
--bs-dropdown-padding-y: 0.5rem;
--bs-dropdown-spacer: 0.125rem;
--bs-dropdown-font-size: 1rem;
- --bs-dropdown-color: #212529;
- --bs-dropdown-bg: #fff;
+ --bs-dropdown-color: var(--bs-body-color);
+ --bs-dropdown-bg: var(--bs-body-bg);
--bs-dropdown-border-color: var(--bs-border-color-translucent);
--bs-dropdown-border-radius: 0.375rem;
- --bs-dropdown-border-width: 1px;
- --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);
+ --bs-dropdown-border-width: var(--bs-border-width);
+ --bs-dropdown-inner-border-radius: calc(0.375rem - var(--bs-border-width));
--bs-dropdown-divider-bg: var(--bs-border-color-translucent);
--bs-dropdown-divider-margin-y: 0.5rem;
- --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
- --bs-dropdown-link-color: #212529;
- --bs-dropdown-link-hover-color: #1e2125;
- --bs-dropdown-link-hover-bg: #e9ecef;
+ --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
+ --bs-dropdown-link-color: var(--bs-body-color);
+ --bs-dropdown-link-hover-color: var(--bs-body-color);
+ --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);
--bs-dropdown-link-active-color: #fff;
--bs-dropdown-link-active-bg: #0d6efd;
--bs-dropdown-link-disabled-color: #adb5bd;
@@ -3488,6 +3620,7 @@ textarea.form-control-lg {
white-space: nowrap;
background-color: transparent;
border: 0;
+ border-radius: var(--bs-dropdown-item-border-radius, 0);
}
.dropdown-item:hover, .dropdown-item:focus {
color: var(--bs-dropdown-link-hover-color);
@@ -3578,7 +3711,7 @@ textarea.form-control-lg {
}
.btn-group > :not(.btn-check:first-child) + .btn,
.btn-group > .btn-group:not(:first-child) {
- margin-right: -1px;
+ margin-right: calc(var(--bs-border-width) * -1);
}
.btn-group > .btn:not(:last-child):not(.dropdown-toggle),
.btn-group > .btn.dropdown-toggle-split:first-child,
@@ -3625,7 +3758,7 @@ textarea.form-control-lg {
}
.btn-group-vertical > .btn:not(:first-child),
.btn-group-vertical > .btn-group:not(:first-child) {
- margin-top: -1px;
+ margin-top: calc(var(--bs-border-width) * -1);
}
.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),
.btn-group-vertical > .btn-group:not(:last-child) > .btn {
@@ -3644,7 +3777,7 @@ textarea.form-control-lg {
--bs-nav-link-font-weight: ;
--bs-nav-link-color: var(--bs-link-color);
--bs-nav-link-hover-color: var(--bs-link-hover-color);
- --bs-nav-link-disabled-color: #6c757d;
+ --bs-nav-link-disabled-color: var(--bs-secondary-color);
display: flex;
flex-wrap: wrap;
padding-right: 0;
@@ -3676,13 +3809,13 @@ textarea.form-control-lg {
}
.nav-tabs {
- --bs-nav-tabs-border-width: 1px;
- --bs-nav-tabs-border-color: #dee2e6;
- --bs-nav-tabs-border-radius: 0.375rem;
- --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;
- --bs-nav-tabs-link-active-color: #495057;
- --bs-nav-tabs-link-active-bg: #fff;
- --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;
+ --bs-nav-tabs-border-width: var(--bs-border-width);
+ --bs-nav-tabs-border-color: var(--bs-border-color);
+ --bs-nav-tabs-border-radius: var(--bs-border-radius);
+ --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);
+ --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);
+ --bs-nav-tabs-link-active-bg: var(--bs-body-bg);
+ --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);
border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);
}
.nav-tabs .nav-link {
@@ -3762,21 +3895,21 @@ textarea.form-control-lg {
.navbar {
--bs-navbar-padding-x: 0;
--bs-navbar-padding-y: 0.5rem;
- --bs-navbar-color: rgba(0, 0, 0, 0.55);
- --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);
- --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);
- --bs-navbar-active-color: rgba(0, 0, 0, 0.9);
+ --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);
+ --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);
+ --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);
+ --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);
--bs-navbar-brand-padding-y: 0.3125rem;
--bs-navbar-brand-margin-end: 1rem;
--bs-navbar-brand-font-size: 1.25rem;
- --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);
- --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);
+ --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);
+ --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);
--bs-navbar-nav-link-padding-x: 0.5rem;
--bs-navbar-toggler-padding-y: 0.25rem;
--bs-navbar-toggler-padding-x: 0.75rem;
--bs-navbar-toggler-font-size: 1.25rem;
- --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
- --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);
+ --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+ --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);
--bs-navbar-toggler-border-radius: 0.375rem;
--bs-navbar-toggler-focus-width: 0.25rem;
--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;
@@ -4182,22 +4315,28 @@ textarea.form-control-lg {
--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
}
+[data-bs-theme=dark] .navbar {
+ --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");
+}
+
.card {
--bs-card-spacer-y: 1rem;
--bs-card-spacer-x: 1rem;
--bs-card-title-spacer-y: 0.5rem;
- --bs-card-border-width: 1px;
+ --bs-card-title-color: ;
+ --bs-card-subtitle-color: ;
+ --bs-card-border-width: var(--bs-border-width);
--bs-card-border-color: var(--bs-border-color-translucent);
- --bs-card-border-radius: 0.375rem;
+ --bs-card-border-radius: var(--bs-border-radius);
--bs-card-box-shadow: ;
- --bs-card-inner-border-radius: calc(0.375rem - 1px);
+ --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));
--bs-card-cap-padding-y: 0.5rem;
--bs-card-cap-padding-x: 1rem;
- --bs-card-cap-bg: rgba(0, 0, 0, 0.03);
+ --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);
--bs-card-cap-color: ;
--bs-card-height: ;
--bs-card-color: ;
- --bs-card-bg: #fff;
+ --bs-card-bg: var(--bs-body-bg);
--bs-card-img-overlay-padding: 1rem;
--bs-card-group-margin: 0.75rem;
position: relative;
@@ -4242,11 +4381,13 @@ textarea.form-control-lg {
.card-title {
margin-bottom: var(--bs-card-title-spacer-y);
+ color: var(--bs-card-title-color);
}
.card-subtitle {
margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));
margin-bottom: 0;
+ color: var(--bs-card-subtitle-color);
}
.card-text:last-child {
@@ -4343,11 +4484,11 @@ textarea.form-control-lg {
border-bottom-left-radius: 0;
}
.card-group > .card:not(:last-child) .card-img-top,
-.card-group > .card:not(:last-child) .card-header {
+ .card-group > .card:not(:last-child) .card-header {
border-top-left-radius: 0;
}
.card-group > .card:not(:last-child) .card-img-bottom,
-.card-group > .card:not(:last-child) .card-footer {
+ .card-group > .card:not(:last-child) .card-footer {
border-bottom-left-radius: 0;
}
.card-group > .card:not(:first-child) {
@@ -4355,38 +4496,38 @@ textarea.form-control-lg {
border-bottom-right-radius: 0;
}
.card-group > .card:not(:first-child) .card-img-top,
-.card-group > .card:not(:first-child) .card-header {
+ .card-group > .card:not(:first-child) .card-header {
border-top-right-radius: 0;
}
.card-group > .card:not(:first-child) .card-img-bottom,
-.card-group > .card:not(:first-child) .card-footer {
+ .card-group > .card:not(:first-child) .card-footer {
border-bottom-right-radius: 0;
}
}
.accordion {
- --bs-accordion-color: #212529;
- --bs-accordion-bg: #fff;
+ --bs-accordion-color: var(--bs-body-color);
+ --bs-accordion-bg: var(--bs-body-bg);
--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;
--bs-accordion-border-color: var(--bs-border-color);
- --bs-accordion-border-width: 1px;
- --bs-accordion-border-radius: 0.375rem;
- --bs-accordion-inner-border-radius: calc(0.375rem - 1px);
+ --bs-accordion-border-width: var(--bs-border-width);
+ --bs-accordion-border-radius: var(--bs-border-radius);
+ --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));
--bs-accordion-btn-padding-x: 1.25rem;
--bs-accordion-btn-padding-y: 1rem;
- --bs-accordion-btn-color: #212529;
+ --bs-accordion-btn-color: var(--bs-body-color);
--bs-accordion-btn-bg: var(--bs-accordion-bg);
--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--bs-accordion-btn-icon-width: 1.25rem;
--bs-accordion-btn-icon-transform: rotate(-180deg);
--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;
- --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230a58ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
--bs-accordion-btn-focus-border-color: #86b7fe;
--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
--bs-accordion-body-padding-x: 1.25rem;
--bs-accordion-body-padding-y: 1rem;
- --bs-accordion-active-color: #0c63e4;
- --bs-accordion-active-bg: #e7f1ff;
+ --bs-accordion-active-color: var(--bs-primary-text);
+ --bs-accordion-active-bg: var(--bs-primary-bg-subtle);
}
.accordion-button {
@@ -4499,15 +4640,20 @@ textarea.form-control-lg {
border-radius: 0;
}
+[data-bs-theme=dark] .accordion-button::after {
+ --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+ --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+}
+
.breadcrumb {
--bs-breadcrumb-padding-x: 0;
--bs-breadcrumb-padding-y: 0;
--bs-breadcrumb-margin-bottom: 1rem;
--bs-breadcrumb-bg: ;
--bs-breadcrumb-border-radius: ;
- --bs-breadcrumb-divider-color: #6c757d;
+ --bs-breadcrumb-divider-color: var(--bs-secondary-color);
--bs-breadcrumb-item-padding-x: 0.5rem;
- --bs-breadcrumb-item-active-color: #6c757d;
+ --bs-breadcrumb-item-active-color: var(--bs-secondary-color);
display: flex;
flex-wrap: wrap;
padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);
@@ -4536,22 +4682,22 @@ textarea.form-control-lg {
--bs-pagination-padding-y: 0.375rem;
--bs-pagination-font-size: 1rem;
--bs-pagination-color: var(--bs-link-color);
- --bs-pagination-bg: #fff;
- --bs-pagination-border-width: 1px;
- --bs-pagination-border-color: #dee2e6;
- --bs-pagination-border-radius: 0.375rem;
+ --bs-pagination-bg: var(--bs-body-bg);
+ --bs-pagination-border-width: var(--bs-border-width);
+ --bs-pagination-border-color: var(--bs-border-color);
+ --bs-pagination-border-radius: var(--bs-border-radius);
--bs-pagination-hover-color: var(--bs-link-hover-color);
- --bs-pagination-hover-bg: #e9ecef;
- --bs-pagination-hover-border-color: #dee2e6;
+ --bs-pagination-hover-bg: var(--bs-tertiary-bg);
+ --bs-pagination-hover-border-color: var(--bs-border-color);
--bs-pagination-focus-color: var(--bs-link-hover-color);
- --bs-pagination-focus-bg: #e9ecef;
+ --bs-pagination-focus-bg: var(--bs-secondary-bg);
--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
--bs-pagination-active-color: #fff;
--bs-pagination-active-bg: #0d6efd;
--bs-pagination-active-border-color: #0d6efd;
- --bs-pagination-disabled-color: #6c757d;
- --bs-pagination-disabled-bg: #fff;
- --bs-pagination-disabled-border-color: #dee2e6;
+ --bs-pagination-disabled-color: var(--bs-secondary-color);
+ --bs-pagination-disabled-bg: var(--bs-secondary-bg);
+ --bs-pagination-disabled-border-color: var(--bs-border-color);
display: flex;
padding-right: 0;
list-style: none;
@@ -4600,7 +4746,7 @@ textarea.form-control-lg {
}
.page-item:not(:first-child) .page-link {
- margin-right: -1px;
+ margin-right: calc(var(--bs-border-width) * -1);
}
.page-item:first-child .page-link {
border-top-right-radius: var(--bs-pagination-border-radius);
@@ -4659,8 +4805,9 @@ textarea.form-control-lg {
--bs-alert-margin-bottom: 1rem;
--bs-alert-color: inherit;
--bs-alert-border-color: transparent;
- --bs-alert-border: 1px solid var(--bs-alert-border-color);
+ --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);
--bs-alert-border-radius: 0.375rem;
+ --bs-alert-link-color: inherit;
position: relative;
padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);
margin-bottom: var(--bs-alert-margin-bottom);
@@ -4676,6 +4823,7 @@ textarea.form-control-lg {
.alert-link {
font-weight: 700;
+ color: var(--bs-alert-link-color);
}
.alert-dismissible {
@@ -4690,75 +4838,59 @@ textarea.form-control-lg {
}
.alert-primary {
- --bs-alert-color: #084298;
- --bs-alert-bg: #cfe2ff;
- --bs-alert-border-color: #b6d4fe;
-}
-.alert-primary .alert-link {
- color: #06357a;
+ --bs-alert-color: var(--bs-primary-text);
+ --bs-alert-bg: var(--bs-primary-bg-subtle);
+ --bs-alert-border-color: var(--bs-primary-border-subtle);
+ --bs-alert-link-color: var(--bs-primary-text);
}
.alert-secondary {
- --bs-alert-color: #41464b;
- --bs-alert-bg: #e2e3e5;
- --bs-alert-border-color: #d3d6d8;
-}
-.alert-secondary .alert-link {
- color: #34383c;
+ --bs-alert-color: var(--bs-secondary-text);
+ --bs-alert-bg: var(--bs-secondary-bg-subtle);
+ --bs-alert-border-color: var(--bs-secondary-border-subtle);
+ --bs-alert-link-color: var(--bs-secondary-text);
}
.alert-success {
- --bs-alert-color: #0f5132;
- --bs-alert-bg: #d1e7dd;
- --bs-alert-border-color: #badbcc;
-}
-.alert-success .alert-link {
- color: #0c4128;
+ --bs-alert-color: var(--bs-success-text);
+ --bs-alert-bg: var(--bs-success-bg-subtle);
+ --bs-alert-border-color: var(--bs-success-border-subtle);
+ --bs-alert-link-color: var(--bs-success-text);
}
.alert-info {
- --bs-alert-color: #055160;
- --bs-alert-bg: #cff4fc;
- --bs-alert-border-color: #b6effb;
-}
-.alert-info .alert-link {
- color: #04414d;
+ --bs-alert-color: var(--bs-info-text);
+ --bs-alert-bg: var(--bs-info-bg-subtle);
+ --bs-alert-border-color: var(--bs-info-border-subtle);
+ --bs-alert-link-color: var(--bs-info-text);
}
.alert-warning {
- --bs-alert-color: #664d03;
- --bs-alert-bg: #fff3cd;
- --bs-alert-border-color: #ffecb5;
-}
-.alert-warning .alert-link {
- color: #523e02;
+ --bs-alert-color: var(--bs-warning-text);
+ --bs-alert-bg: var(--bs-warning-bg-subtle);
+ --bs-alert-border-color: var(--bs-warning-border-subtle);
+ --bs-alert-link-color: var(--bs-warning-text);
}
.alert-danger {
- --bs-alert-color: #842029;
- --bs-alert-bg: #f8d7da;
- --bs-alert-border-color: #f5c2c7;
-}
-.alert-danger .alert-link {
- color: #6a1a21;
+ --bs-alert-color: var(--bs-danger-text);
+ --bs-alert-bg: var(--bs-danger-bg-subtle);
+ --bs-alert-border-color: var(--bs-danger-border-subtle);
+ --bs-alert-link-color: var(--bs-danger-text);
}
.alert-light {
- --bs-alert-color: #636464;
- --bs-alert-bg: #fefefe;
- --bs-alert-border-color: #fdfdfe;
-}
-.alert-light .alert-link {
- color: #4f5050;
+ --bs-alert-color: var(--bs-light-text);
+ --bs-alert-bg: var(--bs-light-bg-subtle);
+ --bs-alert-border-color: var(--bs-light-border-subtle);
+ --bs-alert-link-color: var(--bs-light-text);
}
.alert-dark {
- --bs-alert-color: #141619;
- --bs-alert-bg: #d3d3d4;
- --bs-alert-border-color: #bcbebf;
-}
-.alert-dark .alert-link {
- color: #101214;
+ --bs-alert-color: var(--bs-dark-text);
+ --bs-alert-bg: var(--bs-dark-bg-subtle);
+ --bs-alert-border-color: var(--bs-dark-border-subtle);
+ --bs-alert-link-color: var(--bs-dark-text);
}
@keyframes progress-bar-stripes {
@@ -4766,12 +4898,13 @@ textarea.form-control-lg {
background-position-x: 1rem;
}
}
-.progress {
+.progress,
+.progress-stacked {
--bs-progress-height: 1rem;
--bs-progress-font-size: 0.75rem;
- --bs-progress-bg: #e9ecef;
- --bs-progress-border-radius: 0.375rem;
- --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);
+ --bs-progress-bg: var(--bs-secondary-bg);
+ --bs-progress-border-radius: var(--bs-border-radius);
+ --bs-progress-box-shadow: var(--bs-box-shadow-inset);
--bs-progress-bar-color: #fff;
--bs-progress-bar-bg: #0d6efd;
--bs-progress-bar-transition: width 0.6s ease;
@@ -4805,6 +4938,14 @@ textarea.form-control-lg {
background-size: var(--bs-progress-height) var(--bs-progress-height);
}
+.progress-stacked > .progress {
+ overflow: visible;
+}
+
+.progress-stacked > .progress > .progress-bar {
+ width: 100%;
+}
+
.progress-bar-animated {
animation: 1s linear infinite progress-bar-stripes;
}
@@ -4815,20 +4956,20 @@ textarea.form-control-lg {
}
.list-group {
- --bs-list-group-color: #212529;
- --bs-list-group-bg: #fff;
- --bs-list-group-border-color: rgba(0, 0, 0, 0.125);
- --bs-list-group-border-width: 1px;
- --bs-list-group-border-radius: 0.375rem;
+ --bs-list-group-color: var(--bs-body-color);
+ --bs-list-group-bg: var(--bs-body-bg);
+ --bs-list-group-border-color: var(--bs-border-color);
+ --bs-list-group-border-width: var(--bs-border-width);
+ --bs-list-group-border-radius: var(--bs-border-radius);
--bs-list-group-item-padding-x: 1rem;
--bs-list-group-item-padding-y: 0.5rem;
- --bs-list-group-action-color: #495057;
- --bs-list-group-action-hover-color: #495057;
- --bs-list-group-action-hover-bg: #f8f9fa;
- --bs-list-group-action-active-color: #212529;
- --bs-list-group-action-active-bg: #e9ecef;
- --bs-list-group-disabled-color: #6c757d;
- --bs-list-group-disabled-bg: #fff;
+ --bs-list-group-action-color: var(--bs-secondary-color);
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);
+ --bs-list-group-action-active-color: var(--bs-body-color);
+ --bs-list-group-action-active-bg: var(--bs-secondary-bg);
+ --bs-list-group-disabled-color: var(--bs-secondary-color);
+ --bs-list-group-disabled-bg: var(--bs-body-bg);
--bs-list-group-active-color: #fff;
--bs-list-group-active-bg: #0d6efd;
--bs-list-group-active-border-color: #0d6efd;
@@ -5054,148 +5195,168 @@ textarea.form-control-lg {
}
.list-group-item-primary {
- color: #084298;
- background-color: #cfe2ff;
+ --bs-list-group-color: var(--bs-primary-text);
+ --bs-list-group-bg: var(--bs-primary-bg-subtle);
+ --bs-list-group-border-color: var(--bs-primary-border-subtle);
}
.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
- color: #084298;
- background-color: #bacbe6;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);
}
-.list-group-item-primary.list-group-item-action.active {
- color: #fff;
- background-color: #084298;
- border-color: #084298;
+.list-group-item-primary.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-primary-text);
+ --bs-list-group-active-border-color: var(--bs-primary-text);
}
.list-group-item-secondary {
- color: #41464b;
- background-color: #e2e3e5;
+ --bs-list-group-color: var(--bs-secondary-text);
+ --bs-list-group-bg: var(--bs-secondary-bg-subtle);
+ --bs-list-group-border-color: var(--bs-secondary-border-subtle);
}
.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
- color: #41464b;
- background-color: #cbccce;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);
}
-.list-group-item-secondary.list-group-item-action.active {
- color: #fff;
- background-color: #41464b;
- border-color: #41464b;
+.list-group-item-secondary.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-secondary-text);
+ --bs-list-group-active-border-color: var(--bs-secondary-text);
}
.list-group-item-success {
- color: #0f5132;
- background-color: #d1e7dd;
+ --bs-list-group-color: var(--bs-success-text);
+ --bs-list-group-bg: var(--bs-success-bg-subtle);
+ --bs-list-group-border-color: var(--bs-success-border-subtle);
}
.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
- color: #0f5132;
- background-color: #bcd0c7;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);
}
-.list-group-item-success.list-group-item-action.active {
- color: #fff;
- background-color: #0f5132;
- border-color: #0f5132;
+.list-group-item-success.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-success-text);
+ --bs-list-group-active-border-color: var(--bs-success-text);
}
.list-group-item-info {
- color: #055160;
- background-color: #cff4fc;
+ --bs-list-group-color: var(--bs-info-text);
+ --bs-list-group-bg: var(--bs-info-bg-subtle);
+ --bs-list-group-border-color: var(--bs-info-border-subtle);
}
.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
- color: #055160;
- background-color: #badce3;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);
}
-.list-group-item-info.list-group-item-action.active {
- color: #fff;
- background-color: #055160;
- border-color: #055160;
+.list-group-item-info.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-info-text);
+ --bs-list-group-active-border-color: var(--bs-info-text);
}
.list-group-item-warning {
- color: #664d03;
- background-color: #fff3cd;
+ --bs-list-group-color: var(--bs-warning-text);
+ --bs-list-group-bg: var(--bs-warning-bg-subtle);
+ --bs-list-group-border-color: var(--bs-warning-border-subtle);
}
.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
- color: #664d03;
- background-color: #e6dbb9;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);
}
-.list-group-item-warning.list-group-item-action.active {
- color: #fff;
- background-color: #664d03;
- border-color: #664d03;
+.list-group-item-warning.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-warning-text);
+ --bs-list-group-active-border-color: var(--bs-warning-text);
}
.list-group-item-danger {
- color: #842029;
- background-color: #f8d7da;
+ --bs-list-group-color: var(--bs-danger-text);
+ --bs-list-group-bg: var(--bs-danger-bg-subtle);
+ --bs-list-group-border-color: var(--bs-danger-border-subtle);
}
.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
- color: #842029;
- background-color: #dfc2c4;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);
}
-.list-group-item-danger.list-group-item-action.active {
- color: #fff;
- background-color: #842029;
- border-color: #842029;
+.list-group-item-danger.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-danger-text);
+ --bs-list-group-active-border-color: var(--bs-danger-text);
}
.list-group-item-light {
- color: #636464;
- background-color: #fefefe;
+ --bs-list-group-color: var(--bs-light-text);
+ --bs-list-group-bg: var(--bs-light-bg-subtle);
+ --bs-list-group-border-color: var(--bs-light-border-subtle);
}
.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
- color: #636464;
- background-color: #e5e5e5;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);
}
-.list-group-item-light.list-group-item-action.active {
- color: #fff;
- background-color: #636464;
- border-color: #636464;
+.list-group-item-light.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-light-text);
+ --bs-list-group-active-border-color: var(--bs-light-text);
}
.list-group-item-dark {
- color: #141619;
- background-color: #d3d3d4;
+ --bs-list-group-color: var(--bs-dark-text);
+ --bs-list-group-bg: var(--bs-dark-bg-subtle);
+ --bs-list-group-border-color: var(--bs-dark-border-subtle);
}
.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
- color: #141619;
- background-color: #bebebf;
+ --bs-list-group-action-hover-color: var(--bs-emphasis-color);
+ --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);
}
-.list-group-item-dark.list-group-item-action.active {
- color: #fff;
- background-color: #141619;
- border-color: #141619;
+.list-group-item-dark.list-group-item-action:active {
+ --bs-list-group-active-color: var(--bs-emphasis-color);
+ --bs-list-group-active-bg: var(--bs-dark-text);
+ --bs-list-group-active-border-color: var(--bs-dark-text);
}
.btn-close {
+ --bs-btn-close-color: #000;
+ --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");
+ --bs-btn-close-opacity: 0.5;
+ --bs-btn-close-hover-opacity: 0.75;
+ --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
+ --bs-btn-close-focus-opacity: 1;
+ --bs-btn-close-disabled-opacity: 0.25;
+ --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);
box-sizing: content-box;
width: 1em;
height: 1em;
padding: 0.25em 0.25em;
- color: #000;
- background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;
+ color: var(--bs-btn-close-color);
+ background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;
border: 0;
border-radius: 0.375rem;
- opacity: 0.5;
+ opacity: var(--bs-btn-close-opacity);
}
.btn-close:hover {
- color: #000;
+ color: var(--bs-btn-close-color);
text-decoration: none;
- opacity: 0.75;
+ opacity: var(--bs-btn-close-hover-opacity);
}
.btn-close:focus {
outline: 0;
- box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);
- opacity: 1;
+ box-shadow: var(--bs-btn-close-focus-shadow);
+ opacity: var(--bs-btn-close-focus-opacity);
}
.btn-close:disabled, .btn-close.disabled {
pointer-events: none;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
- opacity: 0.25;
+ opacity: var(--bs-btn-close-disabled-opacity);
}
.btn-close-white {
- filter: invert(1) grayscale(100%) brightness(200%);
+ filter: var(--bs-btn-close-white-filter);
+}
+
+[data-bs-theme=dark] .btn-close {
+ filter: var(--bs-btn-close-white-filter);
}
.toast {
@@ -5206,14 +5367,14 @@ textarea.form-control-lg {
--bs-toast-max-width: 350px;
--bs-toast-font-size: 0.875rem;
--bs-toast-color: ;
- --bs-toast-bg: rgba(255, 255, 255, 0.85);
- --bs-toast-border-width: 1px;
+ --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);
+ --bs-toast-border-width: var(--bs-border-width);
--bs-toast-border-color: var(--bs-border-color-translucent);
- --bs-toast-border-radius: 0.375rem;
- --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
- --bs-toast-header-color: #6c757d;
- --bs-toast-header-bg: rgba(255, 255, 255, 0.85);
- --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);
+ --bs-toast-border-radius: var(--bs-border-radius);
+ --bs-toast-box-shadow: var(--bs-box-shadow);
+ --bs-toast-header-color: var(--bs-secondary-color);
+ --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);
+ --bs-toast-header-border-color: var(--bs-border-color-translucent);
width: var(--bs-toast-max-width);
max-width: 100%;
font-size: var(--bs-toast-font-size);
@@ -5273,22 +5434,22 @@ textarea.form-control-lg {
--bs-modal-padding: 1rem;
--bs-modal-margin: 0.5rem;
--bs-modal-color: ;
- --bs-modal-bg: #fff;
+ --bs-modal-bg: var(--bs-body-bg);
--bs-modal-border-color: var(--bs-border-color-translucent);
- --bs-modal-border-width: 1px;
- --bs-modal-border-radius: 0.5rem;
- --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
- --bs-modal-inner-border-radius: calc(0.5rem - 1px);
+ --bs-modal-border-width: var(--bs-border-width);
+ --bs-modal-border-radius: var(--bs-border-radius-lg);
+ --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));
--bs-modal-header-padding-x: 1rem;
--bs-modal-header-padding-y: 1rem;
--bs-modal-header-padding: 1rem 1rem;
--bs-modal-header-border-color: var(--bs-border-color);
- --bs-modal-header-border-width: 1px;
+ --bs-modal-header-border-width: var(--bs-border-width);
--bs-modal-title-line-height: 1.5;
--bs-modal-footer-gap: 0.5rem;
--bs-modal-footer-bg: ;
--bs-modal-footer-border-color: var(--bs-border-color);
- --bs-modal-footer-border-width: 1px;
+ --bs-modal-footer-border-width: var(--bs-border-width);
position: fixed;
top: 0;
right: 0;
@@ -5418,7 +5579,7 @@ textarea.form-control-lg {
@media (min-width: 576px) {
.modal {
--bs-modal-margin: 1.75rem;
- --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+ --bs-modal-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
}
.modal-dialog {
max-width: var(--bs-modal-width);
@@ -5431,7 +5592,7 @@ textarea.form-control-lg {
}
@media (min-width: 992px) {
.modal-lg,
-.modal-xl {
+ .modal-xl {
--bs-modal-width: 800px;
}
}
@@ -5472,7 +5633,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-sm-down .modal-header,
-.modal-fullscreen-sm-down .modal-footer {
+ .modal-fullscreen-sm-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-sm-down .modal-body {
@@ -5492,7 +5653,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-md-down .modal-header,
-.modal-fullscreen-md-down .modal-footer {
+ .modal-fullscreen-md-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-md-down .modal-body {
@@ -5512,7 +5673,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-lg-down .modal-header,
-.modal-fullscreen-lg-down .modal-footer {
+ .modal-fullscreen-lg-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-lg-down .modal-body {
@@ -5532,7 +5693,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-xl-down .modal-header,
-.modal-fullscreen-xl-down .modal-footer {
+ .modal-fullscreen-xl-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-xl-down .modal-body {
@@ -5552,7 +5713,7 @@ textarea.form-control-lg {
border-radius: 0;
}
.modal-fullscreen-xxl-down .modal-header,
-.modal-fullscreen-xxl-down .modal-footer {
+ .modal-fullscreen-xxl-down .modal-footer {
border-radius: 0;
}
.modal-fullscreen-xxl-down .modal-body {
@@ -5566,9 +5727,9 @@ textarea.form-control-lg {
--bs-tooltip-padding-y: 0.25rem;
--bs-tooltip-margin: ;
--bs-tooltip-font-size: 0.875rem;
- --bs-tooltip-color: #fff;
- --bs-tooltip-bg: #000;
- --bs-tooltip-border-radius: 0.375rem;
+ --bs-tooltip-color: var(--bs-body-bg);
+ --bs-tooltip-bg: var(--bs-emphasis-color);
+ --bs-tooltip-border-radius: var(--bs-border-radius);
--bs-tooltip-opacity: 0.9;
--bs-tooltip-arrow-width: 0.8rem;
--bs-tooltip-arrow-height: 0.4rem;
@@ -5658,20 +5819,20 @@ textarea.form-control-lg {
--bs-popover-zindex: 1070;
--bs-popover-max-width: 276px;
--bs-popover-font-size: 0.875rem;
- --bs-popover-bg: #fff;
- --bs-popover-border-width: 1px;
+ --bs-popover-bg: var(--bs-body-bg);
+ --bs-popover-border-width: var(--bs-border-width);
--bs-popover-border-color: var(--bs-border-color-translucent);
- --bs-popover-border-radius: 0.5rem;
- --bs-popover-inner-border-radius: calc(0.5rem - 1px);
- --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);
+ --bs-popover-border-radius: var(--bs-border-radius-lg);
+ --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));
+ --bs-popover-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);
--bs-popover-header-padding-x: 1rem;
--bs-popover-header-padding-y: 0.5rem;
--bs-popover-header-font-size: 1rem;
--bs-popover-header-color: ;
- --bs-popover-header-bg: #f0f0f0;
+ --bs-popover-header-bg: var(--bs-secondary-bg);
--bs-popover-body-padding-x: 1rem;
--bs-popover-body-padding-y: 1rem;
- --bs-popover-body-color: #212529;
+ --bs-popover-body-color: var(--bs-body-color);
--bs-popover-arrow-width: 1rem;
--bs-popover-arrow-height: 0.5rem;
--bs-popover-arrow-border: var(--bs-popover-border-color);
@@ -5842,15 +6003,17 @@ textarea.form-control-lg {
.carousel-item-prev {
display: block;
}
+
.carousel-item-next:not(.carousel-item-start),
.active.carousel-item-end {
- transform: translateX(100%);
+ transform: translateX(-100%);
}
.carousel-item-prev:not(.carousel-item-end),
.active.carousel-item-start {
- transform: translateX(-100%);
+ transform: translateX(100%);
}
+
.carousel-fade .carousel-item {
opacity: 0;
transition-property: opacity;
@@ -5870,7 +6033,7 @@ textarea.form-control-lg {
}
@media (prefers-reduced-motion: reduce) {
.carousel-fade .active.carousel-item-start,
-.carousel-fade .active.carousel-item-end {
+ .carousel-fade .active.carousel-item-end {
transition: none;
}
}
@@ -5895,7 +6058,7 @@ textarea.form-control-lg {
}
@media (prefers-reduced-motion: reduce) {
.carousel-control-prev,
-.carousel-control-next {
+ .carousel-control-next {
transition: none;
}
}
@@ -5996,6 +6159,17 @@ textarea.form-control-lg {
color: #000;
}
+[data-bs-theme=dark] .carousel .carousel-control-next-icon,
+[data-bs-theme=dark] .carousel .carousel-control-prev-icon {
+ filter: invert(1) grayscale(100);
+}
+[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target] {
+ background-color: #000;
+}
+[data-bs-theme=dark] .carousel .carousel-caption {
+ color: #000;
+}
+
.spinner-grow,
.spinner-border {
display: inline-block;
@@ -6054,7 +6228,7 @@ textarea.form-control-lg {
@media (prefers-reduced-motion: reduce) {
.spinner-border,
-.spinner-grow {
+ .spinner-grow {
--bs-spinner-animation-speed: 1.5s;
}
}
@@ -6064,11 +6238,13 @@ textarea.form-control-lg {
--bs-offcanvas-height: 30vh;
--bs-offcanvas-padding-x: 1rem;
--bs-offcanvas-padding-y: 1rem;
- --bs-offcanvas-color: ;
- --bs-offcanvas-bg: #fff;
- --bs-offcanvas-border-width: 1px;
+ --bs-offcanvas-color: var(--bs-body-color);
+ --bs-offcanvas-bg: var(--bs-body-bg);
+ --bs-offcanvas-border-width: var(--bs-border-width);
--bs-offcanvas-border-color: var(--bs-border-color-translucent);
- --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);
+ --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);
+ --bs-offcanvas-transition: transform 0.3s ease-in-out;
+ --bs-offcanvas-title-line-height: 1.5;
}
@media (max-width: 575.98px) {
@@ -6084,7 +6260,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {
@@ -6172,7 +6348,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {
@@ -6260,7 +6436,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {
@@ -6348,7 +6524,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {
@@ -6436,7 +6612,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
}
@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {
@@ -6523,7 +6699,7 @@ textarea.form-control-lg {
background-color: var(--bs-offcanvas-bg);
background-clip: padding-box;
outline: 0;
- transition: transform 0.3s ease-in-out;
+ transition: var(--bs-offcanvas-transition);
}
@media (prefers-reduced-motion: reduce) {
.offcanvas {
@@ -6599,7 +6775,7 @@ textarea.form-control-lg {
.offcanvas-title {
margin-bottom: 0;
- line-height: 1.5;
+ line-height: var(--bs-offcanvas-title-line-height);
}
.offcanvas-body {
@@ -6979,6 +7155,31 @@ textarea.form-control-lg {
float: none !important;
}
+.object-fit-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+}
+
+.object-fit-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+}
+
+.object-fit-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+}
+
+.object-fit-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+}
+
+.object-fit-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+}
+
.opacity-0 {
opacity: 0 !important;
}
@@ -7015,6 +7216,38 @@ textarea.form-control-lg {
overflow: scroll !important;
}
+.overflow-x-auto {
+ overflow-x: auto !important;
+}
+
+.overflow-x-hidden {
+ overflow-x: hidden !important;
+}
+
+.overflow-x-visible {
+ overflow-x: visible !important;
+}
+
+.overflow-x-scroll {
+ overflow-x: scroll !important;
+}
+
+.overflow-y-auto {
+ overflow-y: auto !important;
+}
+
+.overflow-y-hidden {
+ overflow-y: hidden !important;
+}
+
+.overflow-y-visible {
+ overflow-y: visible !important;
+}
+
+.overflow-y-scroll {
+ overflow-y: scroll !important;
+}
+
.d-inline {
display: inline !important;
}
@@ -7056,15 +7289,15 @@ textarea.form-control-lg {
}
.shadow {
- box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
+ box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;
}
.shadow-sm {
- box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
+ box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;
}
.shadow-lg {
- box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
+ box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;
}
.shadow-none {
@@ -7237,6 +7470,38 @@ textarea.form-control-lg {
border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;
}
+.border-primary-subtle {
+ border-color: var(--bs-primary-border-subtle) !important;
+}
+
+.border-secondary-subtle {
+ border-color: var(--bs-secondary-border-subtle) !important;
+}
+
+.border-success-subtle {
+ border-color: var(--bs-success-border-subtle) !important;
+}
+
+.border-info-subtle {
+ border-color: var(--bs-info-border-subtle) !important;
+}
+
+.border-warning-subtle {
+ border-color: var(--bs-warning-border-subtle) !important;
+}
+
+.border-danger-subtle {
+ border-color: var(--bs-danger-border-subtle) !important;
+}
+
+.border-light-subtle {
+ border-color: var(--bs-light-border-subtle) !important;
+}
+
+.border-dark-subtle {
+ border-color: var(--bs-dark-border-subtle) !important;
+}
+
.border-1 {
--bs-border-width: 1px;
}
@@ -7927,6 +8192,60 @@ textarea.form-control-lg {
gap: 3rem !important;
}
+.row-gap-0 {
+ row-gap: 0 !important;
+}
+
+.row-gap-1 {
+ row-gap: 0.25rem !important;
+}
+
+.row-gap-2 {
+ row-gap: 0.5rem !important;
+}
+
+.row-gap-3 {
+ row-gap: 1rem !important;
+}
+
+.row-gap-4 {
+ row-gap: 1.5rem !important;
+}
+
+.row-gap-5 {
+ row-gap: 3rem !important;
+}
+
+.column-gap-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+}
+
+.column-gap-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+}
+
+.column-gap-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+}
+
+.column-gap-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+}
+
+.column-gap-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+}
+
+.column-gap-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+}
+
.font-monospace {
font-family: var(--bs-font-monospace) !important;
}
@@ -7963,26 +8282,30 @@ textarea.form-control-lg {
font-style: normal !important;
}
-.fw-light {
- font-weight: 300 !important;
-}
-
.fw-lighter {
font-weight: lighter !important;
}
+.fw-light {
+ font-weight: 300 !important;
+}
+
.fw-normal {
font-weight: 400 !important;
}
-.fw-bold {
- font-weight: 700 !important;
+.fw-medium {
+ font-weight: 500 !important;
}
.fw-semibold {
font-weight: 600 !important;
}
+.fw-bold {
+ font-weight: 700 !important;
+}
+
.fw-bolder {
font-weight: bolder !important;
}
@@ -8103,7 +8426,7 @@ textarea.form-control-lg {
.text-muted {
--bs-text-opacity: 1;
- color: #6c757d !important;
+ color: var(--bs-secondary-color) !important;
}
.text-black-50 {
@@ -8116,6 +8439,21 @@ textarea.form-control-lg {
color: rgba(255, 255, 255, 0.5) !important;
}
+.text-body-secondary {
+ --bs-text-opacity: 1;
+ color: var(--bs-secondary-color) !important;
+}
+
+.text-body-tertiary {
+ --bs-text-opacity: 1;
+ color: var(--bs-tertiary-color) !important;
+}
+
+.text-body-emphasis {
+ --bs-text-opacity: 1;
+ color: var(--bs-emphasis-color) !important;
+}
+
.text-reset {
--bs-text-opacity: 1;
color: inherit !important;
@@ -8137,6 +8475,38 @@ textarea.form-control-lg {
--bs-text-opacity: 1;
}
+.text-primary-emphasis {
+ color: var(--bs-primary-text) !important;
+}
+
+.text-secondary-emphasis {
+ color: var(--bs-secondary-text) !important;
+}
+
+.text-success-emphasis {
+ color: var(--bs-success-text) !important;
+}
+
+.text-info-emphasis {
+ color: var(--bs-info-text) !important;
+}
+
+.text-warning-emphasis {
+ color: var(--bs-warning-text) !important;
+}
+
+.text-danger-emphasis {
+ color: var(--bs-danger-text) !important;
+}
+
+.text-light-emphasis {
+ color: var(--bs-light-text) !important;
+}
+
+.text-dark-emphasis {
+ color: var(--bs-dark-text) !important;
+}
+
.bg-primary {
--bs-bg-opacity: 1;
background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
@@ -8197,6 +8567,21 @@ textarea.form-control-lg {
background-color: transparent !important;
}
+.bg-body-secondary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body-tertiary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
+.bg-body-emphasis {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;
+}
+
.bg-opacity-10 {
--bs-bg-opacity: 0.1;
}
@@ -8217,6 +8602,38 @@ textarea.form-control-lg {
--bs-bg-opacity: 1;
}
+.bg-primary-subtle {
+ background-color: var(--bs-primary-bg-subtle) !important;
+}
+
+.bg-secondary-subtle {
+ background-color: var(--bs-secondary-bg-subtle) !important;
+}
+
+.bg-success-subtle {
+ background-color: var(--bs-success-bg-subtle) !important;
+}
+
+.bg-info-subtle {
+ background-color: var(--bs-info-bg-subtle) !important;
+}
+
+.bg-warning-subtle {
+ background-color: var(--bs-warning-bg-subtle) !important;
+}
+
+.bg-danger-subtle {
+ background-color: var(--bs-danger-bg-subtle) !important;
+}
+
+.bg-light-subtle {
+ background-color: var(--bs-light-bg-subtle) !important;
+}
+
+.bg-dark-subtle {
+ background-color: var(--bs-dark-bg-subtle) !important;
+}
+
.bg-gradient {
background-image: var(--bs-gradient) !important;
}
@@ -8288,21 +8705,181 @@ textarea.form-control-lg {
border-top-left-radius: var(--bs-border-radius) !important;
}
+.rounded-top-0 {
+ border-top-right-radius: 0 !important;
+ border-top-left-radius: 0 !important;
+}
+
+.rounded-top-1 {
+ border-top-right-radius: var(--bs-border-radius-sm) !important;
+ border-top-left-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-top-2 {
+ border-top-right-radius: var(--bs-border-radius) !important;
+ border-top-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-top-3 {
+ border-top-right-radius: var(--bs-border-radius-lg) !important;
+ border-top-left-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-top-4 {
+ border-top-right-radius: var(--bs-border-radius-xl) !important;
+ border-top-left-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-top-5 {
+ border-top-right-radius: var(--bs-border-radius-2xl) !important;
+ border-top-left-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-top-circle {
+ border-top-right-radius: 50% !important;
+ border-top-left-radius: 50% !important;
+}
+
+.rounded-top-pill {
+ border-top-right-radius: var(--bs-border-radius-pill) !important;
+ border-top-left-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-end {
border-top-left-radius: var(--bs-border-radius) !important;
border-bottom-left-radius: var(--bs-border-radius) !important;
}
+.rounded-end-0 {
+ border-top-left-radius: 0 !important;
+ border-bottom-left-radius: 0 !important;
+}
+
+.rounded-end-1 {
+ border-top-left-radius: var(--bs-border-radius-sm) !important;
+ border-bottom-left-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-end-2 {
+ border-top-left-radius: var(--bs-border-radius) !important;
+ border-bottom-left-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-end-3 {
+ border-top-left-radius: var(--bs-border-radius-lg) !important;
+ border-bottom-left-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-end-4 {
+ border-top-left-radius: var(--bs-border-radius-xl) !important;
+ border-bottom-left-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-end-5 {
+ border-top-left-radius: var(--bs-border-radius-2xl) !important;
+ border-bottom-left-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-end-circle {
+ border-top-left-radius: 50% !important;
+ border-bottom-left-radius: 50% !important;
+}
+
+.rounded-end-pill {
+ border-top-left-radius: var(--bs-border-radius-pill) !important;
+ border-bottom-left-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-bottom {
border-bottom-left-radius: var(--bs-border-radius) !important;
border-bottom-right-radius: var(--bs-border-radius) !important;
}
+.rounded-bottom-0 {
+ border-bottom-left-radius: 0 !important;
+ border-bottom-right-radius: 0 !important;
+}
+
+.rounded-bottom-1 {
+ border-bottom-left-radius: var(--bs-border-radius-sm) !important;
+ border-bottom-right-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-bottom-2 {
+ border-bottom-left-radius: var(--bs-border-radius) !important;
+ border-bottom-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-bottom-3 {
+ border-bottom-left-radius: var(--bs-border-radius-lg) !important;
+ border-bottom-right-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-bottom-4 {
+ border-bottom-left-radius: var(--bs-border-radius-xl) !important;
+ border-bottom-right-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-bottom-5 {
+ border-bottom-left-radius: var(--bs-border-radius-2xl) !important;
+ border-bottom-right-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-bottom-circle {
+ border-bottom-left-radius: 50% !important;
+ border-bottom-right-radius: 50% !important;
+}
+
+.rounded-bottom-pill {
+ border-bottom-left-radius: var(--bs-border-radius-pill) !important;
+ border-bottom-right-radius: var(--bs-border-radius-pill) !important;
+}
+
.rounded-start {
border-bottom-right-radius: var(--bs-border-radius) !important;
border-top-right-radius: var(--bs-border-radius) !important;
}
+.rounded-start-0 {
+ border-bottom-right-radius: 0 !important;
+ border-top-right-radius: 0 !important;
+}
+
+.rounded-start-1 {
+ border-bottom-right-radius: var(--bs-border-radius-sm) !important;
+ border-top-right-radius: var(--bs-border-radius-sm) !important;
+}
+
+.rounded-start-2 {
+ border-bottom-right-radius: var(--bs-border-radius) !important;
+ border-top-right-radius: var(--bs-border-radius) !important;
+}
+
+.rounded-start-3 {
+ border-bottom-right-radius: var(--bs-border-radius-lg) !important;
+ border-top-right-radius: var(--bs-border-radius-lg) !important;
+}
+
+.rounded-start-4 {
+ border-bottom-right-radius: var(--bs-border-radius-xl) !important;
+ border-top-right-radius: var(--bs-border-radius-xl) !important;
+}
+
+.rounded-start-5 {
+ border-bottom-right-radius: var(--bs-border-radius-2xl) !important;
+ border-top-right-radius: var(--bs-border-radius-2xl) !important;
+}
+
+.rounded-start-circle {
+ border-bottom-right-radius: 50% !important;
+ border-top-right-radius: 50% !important;
+}
+
+.rounded-start-pill {
+ border-bottom-right-radius: var(--bs-border-radius-pill) !important;
+ border-top-right-radius: var(--bs-border-radius-pill) !important;
+}
+
.visible {
visibility: visible !important;
}
@@ -8311,6 +8888,26 @@ textarea.form-control-lg {
visibility: hidden !important;
}
+.z-n1 {
+ z-index: -1 !important;
+}
+
+.z-0 {
+ z-index: 0 !important;
+}
+
+.z-1 {
+ z-index: 1 !important;
+}
+
+.z-2 {
+ z-index: 2 !important;
+}
+
+.z-3 {
+ z-index: 3 !important;
+}
+
@media (min-width: 576px) {
.float-sm-start {
float: right !important;
@@ -8321,6 +8918,26 @@ textarea.form-control-lg {
.float-sm-none {
float: none !important;
}
+ .object-fit-sm-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-sm-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-sm-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-sm-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-sm-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-sm-inline {
display: inline !important;
}
@@ -8797,6 +9414,48 @@ textarea.form-control-lg {
.gap-sm-5 {
gap: 3rem !important;
}
+ .row-gap-sm-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-sm-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-sm-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-sm-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-sm-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-sm-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-sm-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-sm-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-sm-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-sm-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-sm-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-sm-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-sm-start {
text-align: right !important;
}
@@ -8817,6 +9476,26 @@ textarea.form-control-lg {
.float-md-none {
float: none !important;
}
+ .object-fit-md-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-md-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-md-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-md-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-md-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-md-inline {
display: inline !important;
}
@@ -9293,6 +9972,48 @@ textarea.form-control-lg {
.gap-md-5 {
gap: 3rem !important;
}
+ .row-gap-md-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-md-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-md-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-md-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-md-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-md-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-md-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-md-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-md-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-md-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-md-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-md-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-md-start {
text-align: right !important;
}
@@ -9313,6 +10034,26 @@ textarea.form-control-lg {
.float-lg-none {
float: none !important;
}
+ .object-fit-lg-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-lg-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-lg-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-lg-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-lg-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-lg-inline {
display: inline !important;
}
@@ -9789,6 +10530,48 @@ textarea.form-control-lg {
.gap-lg-5 {
gap: 3rem !important;
}
+ .row-gap-lg-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-lg-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-lg-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-lg-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-lg-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-lg-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-lg-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-lg-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-lg-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-lg-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-lg-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-lg-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-lg-start {
text-align: right !important;
}
@@ -9809,6 +10592,26 @@ textarea.form-control-lg {
.float-xl-none {
float: none !important;
}
+ .object-fit-xl-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-xl-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-xl-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-xl-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-xl-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-xl-inline {
display: inline !important;
}
@@ -10285,6 +11088,48 @@ textarea.form-control-lg {
.gap-xl-5 {
gap: 3rem !important;
}
+ .row-gap-xl-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-xl-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-xl-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-xl-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-xl-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-xl-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-xl-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-xl-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-xl-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-xl-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-xl-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-xl-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-xl-start {
text-align: right !important;
}
@@ -10305,6 +11150,26 @@ textarea.form-control-lg {
.float-xxl-none {
float: none !important;
}
+ .object-fit-xxl-contain {
+ -o-object-fit: contain !important;
+ object-fit: contain !important;
+ }
+ .object-fit-xxl-cover {
+ -o-object-fit: cover !important;
+ object-fit: cover !important;
+ }
+ .object-fit-xxl-fill {
+ -o-object-fit: fill !important;
+ object-fit: fill !important;
+ }
+ .object-fit-xxl-scale {
+ -o-object-fit: scale-down !important;
+ object-fit: scale-down !important;
+ }
+ .object-fit-xxl-none {
+ -o-object-fit: none !important;
+ object-fit: none !important;
+ }
.d-xxl-inline {
display: inline !important;
}
@@ -10781,6 +11646,48 @@ textarea.form-control-lg {
.gap-xxl-5 {
gap: 3rem !important;
}
+ .row-gap-xxl-0 {
+ row-gap: 0 !important;
+ }
+ .row-gap-xxl-1 {
+ row-gap: 0.25rem !important;
+ }
+ .row-gap-xxl-2 {
+ row-gap: 0.5rem !important;
+ }
+ .row-gap-xxl-3 {
+ row-gap: 1rem !important;
+ }
+ .row-gap-xxl-4 {
+ row-gap: 1.5rem !important;
+ }
+ .row-gap-xxl-5 {
+ row-gap: 3rem !important;
+ }
+ .column-gap-xxl-0 {
+ -moz-column-gap: 0 !important;
+ column-gap: 0 !important;
+ }
+ .column-gap-xxl-1 {
+ -moz-column-gap: 0.25rem !important;
+ column-gap: 0.25rem !important;
+ }
+ .column-gap-xxl-2 {
+ -moz-column-gap: 0.5rem !important;
+ column-gap: 0.5rem !important;
+ }
+ .column-gap-xxl-3 {
+ -moz-column-gap: 1rem !important;
+ column-gap: 1rem !important;
+ }
+ .column-gap-xxl-4 {
+ -moz-column-gap: 1.5rem !important;
+ column-gap: 1.5rem !important;
+ }
+ .column-gap-xxl-5 {
+ -moz-column-gap: 3rem !important;
+ column-gap: 3rem !important;
+ }
.text-xxl-start {
text-align: right !important;
}
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css.map
index 96df4fbbb..e74b62b31 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.css.map
@@ -1 +1 @@
-{"version":3,"sources":["bootstrap.css","../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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IlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;AL3F9B;AG9WI;EIpGF;IJ6QM,iBAAA;EHyMN;AACF;;AOvdE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;ALhF9B;AGzXI;EIpGF;IJ6QM,eAAA;EHoNN;AACF;;AOleE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;ALrE9B;AGpYI;EIpGF;IJ6QM,iBAAA;EH+NN;AACF;;AO7eE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;AL1D9B;AG/YI;EIpGF;IJ6QM,eAAA;EH0ON;AACF;;AOxfE;EJsQM,iCAAA;EIlQJ,gBFyjBkB;EExjBlB,gBFwiB0B;AL/C9B;AG1ZI;EIpGF;IJ6QM,iBAAA;EHqPN;AACF;;AO3eA;ECvDE,gBAAA;EACA,gBAAA;ARsiBF;;AO3eA;EC5DE,gBAAA;EACA,gBAAA;AR2iBF;;AO7eA;EACE,qBAAA;APgfF;AO9eE;EACE,mBFgkB0B;ALhF9B;;AOteA;EJoNM,kBALI;EI7MR,yBAAA;APyeF;;AOreA;EACE,mBF6RO;EFhFH,kBALI;AHiSV;AOteE;EACE,gBAAA;APweJ;;AOpeA;EACE,iBAAA;EACA,mBFmRO;EFhFH,kBALI;EI5LR,cFtFS;AL6jBX;AOreE;EACE,aAAA;APueJ;;ASvkBA;ECIE,eAAA;EAGA,YAAA;AVqkBF;;AStkBA;EACE,gBJ48CkC;EI38ClC,sBJPS;EIQT,wCAAA;EHGE,uBAAA;EIRF,eAAA;EAGA,YAAA;AV8kBF;;AShkBA;EAEE,qBAAA;ATkkBF;;AS/jBA;EACE,qBAAA;EACA,cAAA;ATkkBF;;AS/jBA;EN+PM,kBALI;EMxPR,cJ1BS;AL4lBX;;AWpmBE;;;;;;;ECHA,qBAAA;EACA,gBAAA;EACA,WAAA;EACA,4CAAA;EACA,6CAAA;EACA,iBAAA;EACA,kBAAA;AZinBF;;Aa3jBI;EF5CE;IACE,gBN6ae;EL8LrB;AACF;AajkBI;EF5CE;IACE,gBN6ae;ELmMrB;AACF;AatkBI;EF5CE;IACE,gBN6ae;ELwMrB;AACF;Aa3kBI;EF5CE;IACE,iBN6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BfLS;EeMT,4BAAA;EACA,yBAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EdGE,uBAAA;EeHE,wEDMJ;ApBy7DF;AqB37DM;EDhBN;ICiBQ,gBAAA;ErB87DN;AACF;AoB57DE;EACE,gBAAA;ApB87DJ;AoB57DI;EACE,eAAA;ApB87DN;AoBz7DE;EACE,cfjBO;EekBP,sBf3BO;Ee4BP,qBfqyBoC;EepyBpC,UAAA;EAKE,kDf6qB0B;AL0wChC;AoBh7DE;EAEE,aAAA;ApBi7DJ;AoB76DE;EACE,cf1CO;Ee4CP,UAAA;ApB86DJ;AoBj7DE;EACE,cf1CO;Ee4CP,UAAA;ApB86DJ;AoBt6DE;EAEE,yBf1DO;Ee6DP,UAAA;ApBq6DJ;AoBj6DE;EACE,yBAAA;EACA,0BAAA;EACA,2BfgoB0B;EehoB1B,0BfgoB0B;Ee/nB1B,cf9DO;EiBbT,yBjBMS;EeuEP,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,4Bf0Y0B;EezY1B,gBAAA;ECtEE,6IDuEF;ECvEE,qIDuEF;ApBm6DJ;AoB/6DE;EACE,yBAAA;EACA,0BAAA;EACA,2BfgoB0B;EehoB1B,0BfgoB0B;Ee/nB1B,cf9DO;EiBbT,yBjBMS;EeuEP,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,4Bf0Y0B;EezY1B,gBAAA;ECtEE,qIDuEF;ApBm6DJ;AqBt+DM;EDuDJ;ICtDM,wBAAA;IAAA,gBAAA;ErBy+DN;EoBn7DA;ICtDM,gBAAA;ErBy+DN;AACF;AoBr6DE;EACE,yBfs4B8B;ALiiClC;AoBx6DE;EACE,yBfs4B8B;ALiiClC;;AoB95DA;EACE,cAAA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBf2c4B;Ee1c5B,cfzFS;Ee0FT,6BAAA;EACA,yBAAA;EACA,mBAAA;ApBi6DF;AoB/5DE;EACE,UAAA;ApBi6DJ;AoB95DE;EAEE,eAAA;EACA,gBAAA;ApB+5DJ;;AoBp5DA;EACE,sCfstBsC;EertBtC,uBAAA;EjBkKI,mBALI;EG7QN,sBAAA;ANygEJ;AoBr5DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfglB0B;EehlB1B,yBfglB0B;ALu0C9B;AoB15DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfglB0B;EehlB1B,yBfglB0B;ALu0C9B;;AoBn5DA;EACE,oCf0sBsC;EezsBtC,oBAAA;EjBqJI,kBALI;EG7QN,qBAAA;ANqhEJ;AoBp5DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfukB0B;EevkB1B,uBfukB0B;AL+0C9B;AoBz5DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfukB0B;EevkB1B,uBfukB0B;AL+0C9B;;AoB94DE;EACE,uCfurBoC;AL0tCxC;AoB94DE;EACE,sCforBoC;AL4tCxC;AoB74DE;EACE,oCfirBoC;AL8tCxC;;AoB14DA;EACE,Wf+qBsC;Ee9qBtC,mCfwqBsC;EevqBtC,iBf6hB4B;ALg3C9B;AoB34DE;EACE,eAAA;ApB64DJ;AoB14DE;EACE,oBAAA;EdpKA,uBAAA;ANijEJ;AoBz4DE;EdxKE,uBAAA;ANojEJ;AoBx4DE;EAAoB,kCfypBkB;ALkvCxC;AoB14DE;EAAoB,gCfypBkB;ALovCxC;;AuBxkEA;EACE,cAAA;EACA,WAAA;EACA,0CAAA;EACA,uCAAA;EpB4RI,eALI;EoBpRR,gBlBiiB4B;EkBhiB5B,gBlBuiB4B;EkBtiB5B,clBGS;EkBFT,sBlBPS;EkBQT,iPAAA;EACA,4BAAA;EACA,wClBw5BkC;EkBv5BlC,0BlBw5BkC;EkBv5BlC,yBAAA;EjBDE,uBAAA;EeHE,wEEOJ;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AvBykEF;AqB7kEM;EEfN;IFgBQ,gBAAA;ErBglEN;AACF;AuB5kEE;EACE,qBlB8yBoC;EkB7yBpC,UAAA;EAKE,kDlBy5B4B;ALirClC;AuBtkEE;EAEE,qBlBuqB0B;EkBtqB1B,sBAAA;AvBukEJ;AuBpkEE;EAEE,yBlBnCO;ALwmEX;AuBhkEE;EACE,kBAAA;EACA,0BAAA;AvBkkEJ;;AuB9jEA;EACE,oBlBgqB4B;EkB/pB5B,uBlB+pB4B;EkB9pB5B,qBlB+pB4B;EFrbxB,mBALI;EG7QN,sBAAA;AN2mEJ;;AuB9jEA;EACE,mBlB4pB4B;EkB3pB5B,sBlB2pB4B;EkB1pB5B,mBlB2pB4B;EFzbxB,kBALI;EG7QN,qBAAA;ANmnEJ;;AwBloEA;EACE,cAAA;EACA,kBnB41BwC;EmB31BxC,oBnB41BwC;EmB31BxC,uBnB41BwC;ALyyC1C;AwBnoEE;EACE,YAAA;EACA,oBAAA;AxBqoEJ;;AwBjoEA;EACE,mBnBk1BwC;EmBj1BxC,gBAAA;EACA,gBAAA;AxBooEF;AwBloEE;EACE,WAAA;EACA,mBAAA;EACA,eAAA;AxBooEJ;;AwBhoEA;EACE,UnBo0BwC;EmBn0BxC,WnBm0BwC;EmBl0BxC,kBAAA;EACA,mBAAA;EACA,sBnBzBS;EmB0BT,4BAAA;EACA,2BAAA;EACA,wBAAA;EACA,qCnBu0BwC;EmBt0BxC,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EACA,iCAAA;EAAA,mBAAA;EAAA,yBAAA;AxBmoEF;AwBhoEE;ElBvBE,qBAAA;AN0pEJ;AwB/nEE;EAEE,kBnB8zBsC;ALk0C1C;AwB7nEE;EACE,uBnBqzBsC;AL00C1C;AwB5nEE;EACE,qBnBixBoC;EmBhxBpC,UAAA;EACA,kDnB6pB4B;ALi+ChC;AwB3nEE;EACE,yBnBxBM;EmByBN,qBnBzBM;ALspEV;AwB3nEI;EAII,+OAAA;AxB0nER;AwBtnEI;EAII,uJAAA;AxBqnER;AwBhnEE;EACE,yBnB7CM;EmB8CN,qBnB9CM;EmBmDJ,yOAAA;AxB8mEN;AwB1mEE;EACE,oBAAA;EACA,YAAA;EACA,YnB6xBuC;AL+0C3C;AwBrmEI;EACE,eAAA;EACA,YnBoxBqC;ALm1C3C;;AwBzlEA;EACE,oBnB+wBgC;AL60ClC;AwB1lEE;EACE,UnB2wB8B;EmB1wB9B,oBAAA;EACA,wKAAA;EACA,iCAAA;ElB3GA,kBAAA;EeHE,iDGgHF;AxB4lEJ;AqBxsEM;EGsGJ;IHrGM,gBAAA;ErB2sEN;AACF;AwB/lEI;EACE,0JAAA;AxBimEN;AwB9lEI;EACE,gCnB0wB4B;EmBrwB1B,uJAAA;AxB4lER;AwBvlEE;EACE,mBnBqvB8B;EmBpvB9B,gBAAA;AxBylEJ;AwBvlEI;EACE,mBAAA;EACA,eAAA;AxBylEN;;AwBplEA;EACE,qBAAA;EACA,iBnBmuBgC;ALo3ClC;;AwBplEA;EACE,kBAAA;EACA,sBAAA;EACA,oBAAA;AxBulEF;AwBnlEI;EACE,oBAAA;EACA,YAAA;EACA,anBolBwB;ALigD9B;;AyB1vEA;EACE,WAAA;EACA,cAAA;EACA,UAAA;EACA,6BAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AzB6vEF;AyB3vEE;EACE,UAAA;AzB6vEJ;AyBzvEI;EAA0B,kEpBq8Ba;ALuzC3C;AyB3vEI;EAA0B,kEpBo8Ba;AL0zC3C;AyB3vEE;EACE,SAAA;AzB6vEJ;AyB1vEE;EACE,WpBs7BuC;EoBr7BvC,YpBq7BuC;EoBp7BvC,oBAAA;EHzBF,yBjBkCQ;EoBPN,SpBq7BuC;ECj8BvC,mBAAA;EeHE,oHIkBF;EJlBE,4GIkBF;EACA,wBAAA;EAAA,gBAAA;AzB2vEJ;AqB1wEM;EIMJ;IJLM,wBAAA;IAAA,gBAAA;ErB6wEN;AACF;AyB9vEI;EHjCF,yBjBq9ByC;AL60C3C;AyB5vEE;EACE,WpB+5B8B;EoB95B9B,cpB+5B8B;EoB95B9B,kBAAA;EACA,epB85B8B;EoB75B9B,yBpBpCO;EoBqCP,yBAAA;EnB7BA,mBAAA;AN4xEJ;AyB1vEE;EACE,WpB25BuC;EoB15BvC,YpB05BuC;EiB78BzC,yBjBkCQ;EoBmBN,SpB25BuC;ECj8BvC,mBAAA;EeHE,iHI4CF;EJ5CE,4GI4CF;EACA,qBAAA;EAAA,gBAAA;AzB2vEJ;AqBpyEM;EIiCJ;IJhCM,qBAAA;IAAA,gBAAA;ErBuyEN;AACF;AyB9vEI;EH3DF,yBjBq9ByC;ALu2C3C;AyB5vEE;EACE,WpBq4B8B;EoBp4B9B,cpBq4B8B;EoBp4B9B,kBAAA;EACA,epBo4B8B;EoBn4B9B,yBpB9DO;EoB+DP,yBAAA;EnBvDA,mBAAA;ANszEJ;AyB1vEE;EACE,oBAAA;AzB4vEJ;AyB1vEI;EACE,yBpBtEK;ALk0EX;AyBzvEI;EACE,yBpB1EK;ALq0EX;;A0Bl1EA;EACE,kBAAA;A1Bq1EF;A0Bn1EE;;;EAGE,0BrB+9B8B;EqB99B9B,iBrB+9B8B;ALs3ClC;A0Bl1EE;EACE,kBAAA;EACA,MAAA;EACA,QAAA;EACA,WAAA;EACA,YAAA;EACA,qBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,wBAAA;ELPE,gEKQF;A1Bo1EJ;AqBx1EM;EKVJ;ILWM,gBAAA;ErB21EN;AACF;A0Bt1EE;;EAEE,qBAAA;A1Bw1EJ;A0Bt1EI;EACE,kBAAA;A1By1EN;A0B11EI;;EACE,kBAAA;A1By1EN;A0Bt1EI;EAEE,qBrBo8B4B;EqBn8B5B,wBrBo8B4B;ALq5ClC;A0B51EI;;;EAEE,qBrBo8B4B;EqBn8B5B,wBrBo8B4B;ALq5ClC;A0Bt1EI;;EACE,qBrB+7B4B;EqB97B5B,wBrB+7B4B;AL05ClC;A0Br1EE;EACE,qBrBy7B8B;EqBx7B9B,wBrBy7B8B;AL85ClC;A0Bh1EI;EACE,arBk7B4B;EqBj7B5B,+DrBk7B4B;ALm6ClC;A0Bv1EI;;;;EACE,arBk7B4B;EqBj7B5B,+DrBk7B4B;ALm6ClC;A0Bh1EI;EACE,arB26B4B;EqB16B5B,+DrB26B4B;ALu6ClC;A0B70EI;EACE,mBAAA;A1B+0EN;;A2Bl5EA;EACE,kBAAA;EACA,aAAA;EACA,eAAA;EACA,oBAAA;EACA,WAAA;A3Bq5EF;A2Bn5EE;;;EAGE,kBAAA;EACA,cAAA;EACA,SAAA;EACA,YAAA;A3Bq5EJ;A2Bj5EE;;;EAGE,UAAA;A3Bm5EJ;A2B74EE;EACE,kBAAA;EACA,UAAA;A3B+4EJ;A2B74EI;EACE,UAAA;A3B+4EN;;A2Bp4EA;EACE,aAAA;EACA,mBAAA;EACA,yBAAA;ExBoPI,eALI;EwB7OR,gBtB0f4B;EsBzf5B,gBtBggB4B;EsB/f5B,ctBpCS;EsBqCT,kBAAA;EACA,mBAAA;EACA,yBtB9CS;EsB+CT,yBAAA;ErBtCE,uBAAA;AN86EJ;;A2B93EA;;;;EAIE,oBAAA;ExB8NI,kBALI;EG7QN,qBAAA;ANu7EJ;;A2B93EA;;;;EAIE,uBAAA;ExBqNI,mBALI;EG7QN,sBAAA;ANg8EJ;;A2B93EA;;EAEE,kBAAA;A3Bi4EF;;A2Bp3EI;;;;ErBjEA,yBAAA;EACA,4BAAA;AN47EJ;A2Bn3EI;;;;ErB1EA,yBAAA;EACA,4BAAA;ANm8EJ;A2B72EE;EACE,kBAAA;ErB1EA,0BAAA;EACA,6BAAA;AN07EJ;A2B72EE;;ErB9EE,0BAAA;EACA,6BAAA;AN+7EJ;;A4Bx9EE;EACE,aAAA;EACA,WAAA;EACA,mBvB+vBoC;EFtflC,kBALI;EyBjQN,cvBi+BqB;ALy/CzB;;A4Bv9EE;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,uBAAA;EACA,kBAAA;EzB4PE,mBALI;EyBpPN,WAvBc;EAwBd,wCAvBiB;EtBHjB,uBAAA;ANo/EJ;;A4Br9EI;;;;EAEE,cAAA;A5B09EN;;A4BxgFI;EAoDE,qBvBs8BmB;EuBn8BjB,mCvBsxBgC;EuBrxBhC,2PAAA;EACA,4BAAA;EACA,0DAAA;EACA,gEAAA;A5Bs9ER;A4Bn9EM;EACE,qBvB27BiB;EuB17BjB,iDA/Ca;A5BogFrB;;A4BrhFI;EAyEI,mCvBowBgC;EuBnwBhC,iFAAA;A5Bg9ER;;A4B1hFI;EAiFE,qBvBy6BmB;ALoiDzB;A4B18EQ;EAEE,sBvBm1B8B;EuBl1B9B,4dAAA;EACA,6DAAA;EACA,2EAAA;A5B28EV;A4Bv8EM;EACE,qBvB45BiB;EuB35BjB,iDA9Ea;A5BuhFrB;;A4BxiFI;EAuGI,yCAAA;A5Bq8ER;;A4B5iFI;EA8GE,qBvB44BmB;ALsjDzB;A4Bh8EM;EACE,yBvBy4BiB;ALyjDzB;A4B/7EM;EACE,iDApGa;A5BqiFrB;A4B97EM;EACE,cvBi4BiB;AL+jDzB;;A4B37EI;EACE,mBAAA;A5B87EN;;A4B7jFI;;;;;EAyIM,UAAA;A5B47EV;;A4BljFE;EACE,aAAA;EACA,WAAA;EACA,mBvB+vBoC;EFtflC,kBALI;EyBjQN,cvBi+BqB;ALmlDzB;;A4BjjFE;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,uBAAA;EACA,kBAAA;EzB4PE,mBALI;EyBpPN,WAvBc;EAwBd,wCAvBiB;EtBHjB,uBAAA;AN8kFJ;;A4B/iFI;;;;EAEE,cAAA;A5BojFN;;A4BlmFI;EAoDE,qBvBs8BmB;EuBn8BjB,mCvBsxBgC;EuBrxBhC,4UAAA;EACA,4BAAA;EACA,0DAAA;EACA,gEAAA;A5BgjFR;A4B7iFM;EACE,qBvB27BiB;EuB17BjB,iDA/Ca;A5B8lFrB;;A4B/mFI;EAyEI,mCvBowBgC;EuBnwBhC,iFAAA;A5B0iFR;;A4BpnFI;EAiFE,qBvBy6BmB;AL8nDzB;A4BpiFQ;EAEE,sBvBm1B8B;EuBl1B9B,6iBAAA;EACA,6DAAA;EACA,2EAAA;A5BqiFV;A4BjiFM;EACE,qBvB45BiB;EuB35BjB,iDA9Ea;A5BinFrB;;A4BloFI;EAuGI,yCAAA;A5B+hFR;;A4BtoFI;EA8GE,qBvB44BmB;ALgpDzB;A4B1hFM;EACE,yBvBy4BiB;ALmpDzB;A4BzhFM;EACE,iDApGa;A5B+nFrB;A4BxhFM;EACE,cvBi4BiB;ALypDzB;;A4BrhFI;EACE,mBAAA;A5BwhFN;;A4BvpFI;;;;;EA2IM,UAAA;A5BohFV;;A6BjqFA;EAEE,2BAAA;EACA,4BAAA;EACA,sBAAA;E1B6RI,wBALI;E0BtRR,yBAAA;EACA,yBAAA;EACA,uBAAA;EACA,wBAAA;EACA,0BAAA;EACA,kCAAA;EACA,gCAAA;EACA,wCAAA;EACA,4FAAA;EACA,+BAAA;EACA,iFAAA;EAGA,qBAAA;EACA,wDAAA;EACA,sCAAA;E1B4QI,kCALI;E0BrQR,sCAAA;EACA,sCAAA;EACA,0BAAA;EACA,kBAAA;EACA,qBAAA;EAEA,sBAAA;EACA,eAAA;EACA,yBAAA;EAAA,sBAAA;EAAA,iBAAA;EACA,mEAAA;EvBjBE,0CAAA;EgBfF,kCOkCqB;ERtBjB,qIQwBJ;A7B+pFF;AqBnrFM;EQhBN;IRiBQ,gBAAA;ErBsrFN;AACF;A6BlqFE;EACE,gCAAA;EAEA,wCAAA;EACA,8CAAA;A7BmqFJ;A6BhqFE;EAEE,0BAAA;EACA,kCAAA;EACA,wCAAA;A7BiqFJ;A6B9pFE;EACE,gCAAA;EPrDF,wCOsDuB;EACrB,8CAAA;EACA,UAAA;EAKE,0CAAA;A7B4pFN;A6BxpFE;EACE,8CAAA;EACA,UAAA;EAKE,0CAAA;A7BspFN;A6BlpFE;EAKE,iCAAA;EACA,yCAAA;EAGA,+CAAA;A7B8oFJ;A6B3oFI;EAKI,0CAAA;A7ByoFR;A6BpoFE;EAGE,mCAAA;EACA,oBAAA;EACA,2CAAA;EAEA,iDAAA;EACA,uCAAA;A7BmoFJ;;A6BvnFE;ECtGA,oBAAA;EACA,oBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,uCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,6BAAA;EACA,6BAAA;EACA,uCAAA;A9BiuFF;;A6BxoFE;ECtGA,oBAAA;EACA,oBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,wCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,6BAAA;EACA,6BAAA;EACA,uCAAA;A9BkvFF;;A6BzpFE;ECtGA,oBAAA;EACA,oBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,uCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,6BAAA;EACA,6BAAA;EACA,uCAAA;A9BmwFF;;A6B1qFE;ECtGA,oBAAA;EACA,oBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,uCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,6BAAA;EACA,6BAAA;EACA,uCAAA;A9BoxFF;;A6B3rFE;ECtGA,oBAAA;EACA,oBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,sCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,6BAAA;EACA,6BAAA;EACA,uCAAA;A9BqyFF;;A6B5sFE;ECtGA,oBAAA;EACA,oBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,sCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,6BAAA;EACA,6BAAA;EACA,uCAAA;A9BszFF;;A6B7tFE;ECtGA,oBAAA;EACA,oBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,wCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,6BAAA;EACA,6BAAA;EACA,uCAAA;A9Bu0FF;;A6B9uFE;ECtGA,oBAAA;EACA,oBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,qCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,6BAAA;EACA,6BAAA;EACA,uCAAA;A9Bw1FF;;A6BruFE;ECvGA,uBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,uCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,gCAAA;EACA,iCAAA;EACA,uCAAA;EACA,mBAAA;A9Bg1FF;;A6BtvFE;ECvGA,uBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,wCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,gCAAA;EACA,iCAAA;EACA,uCAAA;EACA,mBAAA;A9Bi2FF;;A6BvwFE;ECvGA,uBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,sCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,gCAAA;EACA,iCAAA;EACA,uCAAA;EACA,mBAAA;A9Bk3FF;;A6BxxFE;ECvGA,uBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,uCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,gCAAA;EACA,iCAAA;EACA,uCAAA;EACA,mBAAA;A9Bm4FF;;A6BzyFE;ECvGA,uBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,sCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,gCAAA;EACA,iCAAA;EACA,uCAAA;EACA,mBAAA;A9Bo5FF;;A6B1zFE;ECvGA,uBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,sCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,gCAAA;EACA,iCAAA;EACA,uCAAA;EACA,mBAAA;A9Bq6FF;;A6B30FE;ECvGA,uBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,wCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,gCAAA;EACA,iCAAA;EACA,uCAAA;EACA,mBAAA;A9Bs7FF;;A6B51FE;ECvGA,uBAAA;EACA,8BAAA;EACA,0BAAA;EACA,0BAAA;EACA,oCAAA;EACA,qCAAA;EACA,2BAAA;EACA,2BAAA;EACA,qCAAA;EACA,4DAAA;EACA,gCAAA;EACA,iCAAA;EACA,uCAAA;EACA,mBAAA;A9Bu8FF;;A6Bj2FA;EACE,yBAAA;EACA,oCAAA;EACA,wBAAA;EACA,kCAAA;EACA,gDAAA;EACA,wCAAA;EACA,iDAAA;EACA,yCAAA;EACA,gCAAA;EACA,2CAAA;EACA,yBAAA;EACA,uCAAA;EAEA,0BxB2OwC;ALwnF1C;A6Bz1FE;EACE,0BAAA;A7B21FJ;A6Bx1FE;EACE,gCAAA;A7B01FJ;;A6B/0FA;ECxIE,0BAAA;EACA,wBAAA;E3BoOI,2BALI;E2B7NR,8BAAA;A9B29FF;;A6Bl1FA;EC5IE,2BAAA;EACA,0BAAA;E3BoOI,4BALI;E2B7NR,+BAAA;A9Bk+FF;;A+BriGA;EVgBM,gCUfJ;A/BwiGF;AqBrhGM;EUpBN;IVqBQ,gBAAA;ErBwhGN;AACF;A+B3iGE;EACE,UAAA;A/B6iGJ;;A+BviGE;EACE,aAAA;A/B0iGJ;;A+BtiGA;EACE,SAAA;EACA,gBAAA;EVDI,6BUEJ;A/ByiGF;AqBviGM;EULN;IVMQ,gBAAA;ErB0iGN;AACF;A+B5iGE;EACE,QAAA;EACA,YAAA;EVNE,4BUOF;A/B8iGJ;AqBjjGM;EUAJ;IVCM,gBAAA;ErBojGN;AACF;;AgCzkGA;;;;;;EAME,kBAAA;AhC4kGF;;AgCzkGA;EACE,mBAAA;AhC4kGF;AiCzjGI;EACE,qBAAA;EACA,qB5BmewB;E4BlexB,uB5BiewB;E4BhexB,WAAA;EAhCJ,uBAAA;EACA,oCAAA;EACA,gBAAA;EACA,qCAAA;AjC4lGF;AiCviGI;EACE,eAAA;AjCyiGN;;AgCllGA;EAEE,0BAAA;EACA,8BAAA;EACA,0BAAA;EACA,+BAAA;EACA,8BAAA;E7B6QI,6BALI;E6BtQR,4BAAA;EACA,sBAAA;EACA,8DAAA;EACA,qCAAA;EACA,+BAAA;EACA,uDAAA;EACA,4DAAA;EACA,sCAAA;EACA,2DAAA;EACA,iCAAA;EACA,uCAAA;EACA,oCAAA;EACA,qCAAA;EACA,qCAAA;EACA,0CAAA;EACA,kCAAA;EACA,qCAAA;EACA,mCAAA;EACA,oCAAA;EACA,sCAAA;EAGA,kBAAA;EACA,kCAAA;EACA,aAAA;EACA,uCAAA;EACA,kEAAA;EACA,SAAA;E7BgPI,uCALI;E6BzOR,+BAAA;EACA,iBAAA;EACA,gBAAA;EACA,uCAAA;EACA,4BAAA;EACA,6EAAA;E1BzCE,+CAAA;AN4nGJ;AgC/kGE;EACE,SAAA;EACA,QAAA;EACA,qCAAA;AhCilGJ;;AgCzjGI;EACE,oBAAA;AhC4jGN;AgC1jGM;EACE,UAAA;EACA,QAAA;AhC4jGR;;AgCxjGI;EACE,kBAAA;AhC2jGN;AgCzjGM;EACE,OAAA;EACA,WAAA;AhC2jGR;;AarmGI;EmB4BA;IACE,oBAAA;EhC6kGJ;EgC3kGI;IACE,UAAA;IACA,QAAA;EhC6kGN;EgCzkGE;IACE,kBAAA;EhC2kGJ;EgCzkGI;IACE,OAAA;IACA,WAAA;EhC2kGN;AACF;AatnGI;EmB4BA;IACE,oBAAA;EhC6lGJ;EgC3lGI;IACE,UAAA;IACA,QAAA;EhC6lGN;EgCzlGE;IACE,kBAAA;EhC2lGJ;EgCzlGI;IACE,OAAA;IACA,WAAA;EhC2lGN;AACF;AatoGI;EmB4BA;IACE,oBAAA;EhC6mGJ;EgC3mGI;IACE,UAAA;IACA,QAAA;EhC6mGN;EgCzmGE;IACE,kBAAA;EhC2mGJ;EgCzmGI;IACE,OAAA;IACA,WAAA;EhC2mGN;AACF;AatpGI;EmB4BA;IACE,oBAAA;EhC6nGJ;EgC3nGI;IACE,UAAA;IACA,QAAA;EhC6nGN;EgCznGE;IACE,kBAAA;EhC2nGJ;EgCznGI;IACE,OAAA;IACA,WAAA;EhC2nGN;AACF;AatqGI;EmB4BA;IACE,oBAAA;EhC6oGJ;EgC3oGI;IACE,UAAA;IACA,QAAA;EhC6oGN;EgCzoGE;IACE,kBAAA;EhC2oGJ;EgCzoGI;IACE,OAAA;IACA,WAAA;EhC2oGN;AACF;AgCloGE;EACE,SAAA;EACA,YAAA;EACA,aAAA;EACA,wCAAA;AhCooGJ;AiC7tGI;EACE,qBAAA;EACA,qB5BmewB;E4BlexB,uB5BiewB;E4BhexB,WAAA;EAzBJ,aAAA;EACA,oCAAA;EACA,0BAAA;EACA,qCAAA;AjCyvGF;AiC3sGI;EACE,eAAA;AjC6sGN;;AgCxoGE;EACE,MAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,uCAAA;AhC2oGJ;AiClvGI;EACE,qBAAA;EACA,qB5BmewB;E4BlexB,uB5BiewB;E4BhexB,WAAA;EAlBJ,mCAAA;EACA,cAAA;EACA,sCAAA;EACA,yBAAA;AjCuwGF;AiChuGI;EACE,eAAA;AjCkuGN;AgCnpGI;EACE,iBAAA;AhCqpGN;;AgC/oGE;EACE,MAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,sCAAA;AhCkpGJ;AiC1wGI;EACE,qBAAA;EACA,qB5BmewB;E4BlexB,uB5BiewB;E4BhexB,WAAA;AjC4wGN;AiCjwGM;EACE,aAAA;AjCmwGR;AiChwGM;EACE,qBAAA;EACA,oB5BgdsB;E4B/ctB,uB5B8csB;E4B7ctB,WAAA;EA9BN,mCAAA;EACA,wBAAA;EACA,sCAAA;AjCiyGF;AiChwGI;EACE,eAAA;AjCkwGN;AgClqGI;EACE,iBAAA;AhCoqGN;;AgC7pGA;EACE,SAAA;EACA,6CAAA;EACA,gBAAA;EACA,mDAAA;EACA,UAAA;AhCgqGF;;AgC1pGA;EACE,cAAA;EACA,WAAA;EACA,4EAAA;EACA,WAAA;EACA,gB3B0X4B;E2BzX5B,oCAAA;EACA,mBAAA;EACA,qBAAA;EACA,mBAAA;EACA,6BAAA;EACA,SAAA;AhC6pGF;AgC3pGE;EAEE,0CAAA;EVzLF,kDU2LuB;AhC2pGzB;AgCxpGE;EAEE,2CAAA;EACA,qBAAA;EVjMF,mDUkMuB;AhCypGzB;AgCtpGE;EAEE,6CAAA;EACA,oBAAA;EACA,6BAAA;AhCupGJ;;AgCjpGA;EACE,cAAA;AhCopGF;;AgChpGA;EACE,cAAA;EACA,gFAAA;EACA,gBAAA;E7B0EI,mBALI;E6BnER,sCAAA;EACA,mBAAA;AhCmpGF;;AgC/oGA;EACE,cAAA;EACA,4EAAA;EACA,oCAAA;AhCkpGF;;AgC9oGA;EAEE,4BAAA;EACA,yBAAA;EACA,8DAAA;EACA,0BAAA;EACA,iCAAA;EACA,oCAAA;EACA,4DAAA;EACA,sDAAA;EACA,qCAAA;EACA,qCAAA;EACA,0CAAA;EACA,mCAAA;AhCgpGF;;AkCr4GA;;EAEE,kBAAA;EACA,oBAAA;EACA,sBAAA;AlCw4GF;AkCt4GE;;EACE,kBAAA;EACA,cAAA;AlCy4GJ;AkCp4GE;;;;;;;;;;;;EAME,UAAA;AlC44GJ;;AkCv4GA;EACE,aAAA;EACA,eAAA;EACA,2BAAA;AlC04GF;AkCx4GE;EACE,WAAA;AlC04GJ;;AkCt4GA;E5BhBI,uBAAA;AN05GJ;AkCt4GE;;EAEE,kBAAA;AlCw4GJ;AkCp4GE;;;E5BVE,yBAAA;EACA,4BAAA;ANm5GJ;AkCh4GE;;;E5BNE,0BAAA;EACA,6BAAA;AN24GJ;;AkCn3GA;EACE,uBAAA;EACA,wBAAA;AlCs3GF;AkCp3GE;EAGE,eAAA;AlCo3GJ;AkCj3GE;EACE,cAAA;AlCm3GJ;;AkC/2GA;EACE,sBAAA;EACA,uBAAA;AlCk3GF;;AkC/2GA;EACE,qBAAA;EACA,sBAAA;AlCk3GF;;AkC91GA;EACE,sBAAA;EACA,uBAAA;EACA,uBAAA;AlCi2GF;AkC/1GE;;EAEE,WAAA;AlCi2GJ;AkC91GE;;EAEE,gBAAA;AlCg2GJ;AkC51GE;;E5B1FE,4BAAA;EACA,6BAAA;AN07GJ;AkC51GE;;E5B7GE,0BAAA;EACA,yBAAA;AN68GJ;;AmCr+GA;EAEE,6BAAA;EACA,+BAAA;EAEA,2BAAA;EACA,yCAAA;EACA,qDAAA;EACA,qCAAA;EAGA,aAAA;EACA,eAAA;EACA,gBAAA;EACA,gBAAA;EACA,gBAAA;AnCo+GF;;AmCj+GA;EACE,cAAA;EACA,kEAAA;EhC4QI,uCALI;EgCrQR,2CAAA;EACA,+BAAA;EACA,qBAAA;EdbI,uGccJ;AnCo+GF;AqB9+GM;EcGN;IdFQ,gBAAA;ErBi/GN;AACF;AmCv+GE;EAEE,qCAAA;AnCw+GJ;AmCn+GE;EACE,wCAAA;EACA,oBAAA;EACA,eAAA;AnCq+GJ;;AmC79GA;EAEE,+BAAA;EACA,mCAAA;EACA,qCAAA;EACA,8DAAA;EACA,wCAAA;EACA,kCAAA;EACA,4DAAA;EAGA,oFAAA;AnC69GF;AmC39GE;EACE,yDAAA;EACA,gBAAA;EACA,yDAAA;E7BtCA,yDAAA;EACA,wDAAA;ANogHJ;AmC59GI;EAGE,kBAAA;EACA,wDAAA;AnC49GN;AmCz9GI;EAEE,wCAAA;EACA,6BAAA;EACA,yBAAA;AnC09GN;AmCt9GE;;EAEE,2CAAA;EACA,mDAAA;EACA,yDAAA;AnCw9GJ;AmCr9GE;EAEE,sDAAA;E7BjEA,0BAAA;EACA,yBAAA;ANwhHJ;;AmC78GA;EAEE,sCAAA;EACA,sCAAA;EACA,sCAAA;AnC+8GF;AmC58GE;EACE,gBAAA;EACA,SAAA;E7B9FA,gDAAA;AN6iHJ;AmC58GI;EACE,wCAAA;EACA,6BAAA;EACA,yBAAA;AnC88GN;AmC18GE;;EAEE,4CAAA;EbzHF,oDa0HuB;AnC48GzB;;AmCl8GE;;EAEE,cAAA;EACA,kBAAA;AnCq8GJ;;AmCh8GE;;EAEE,aAAA;EACA,YAAA;EACA,kBAAA;AnCm8GJ;;AmC77GE;;EACE,WAAA;AnCi8GJ;;AmCv7GE;EACE,aAAA;AnC07GJ;AmCx7GE;EACE,cAAA;AnC07GJ;;AoC9lHA;EAEE,wBAAA;EACA,6BAAA;EACA,sCAAA;EACA,2CAAA;EACA,8CAAA;EACA,4CAAA;EACA,sCAAA;EACA,kCAAA;EACA,oCAAA;EACA,2CAAA;EACA,iDAAA;EACA,sCAAA;EACA,sCAAA;EACA,sCAAA;EACA,sCAAA;EACA,wQAAA;EACA,oDAAA;EACA,2CAAA;EACA,wCAAA;EACA,4DAAA;EAGA,kBAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,8BAAA;EACA,8DAAA;ApC8lHF;AoCxlHE;;;;;;;EACE,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,8BAAA;ApCgmHJ;AoC5kHA;EACE,6CAAA;EACA,gDAAA;EACA,8CAAA;EjCkOI,2CALI;EiC3NR,mCAAA;EACA,qBAAA;EACA,mBAAA;ApC8kHF;AoC5kHE;EAEE,yCAAA;ApC6kHJ;;AoCnkHA;EAEE,0BAAA;EACA,+BAAA;EAEA,2BAAA;EACA,2CAAA;EACA,uDAAA;EACA,6DAAA;EAGA,aAAA;EACA,sBAAA;EACA,gBAAA;EACA,gBAAA;EACA,gBAAA;ApCkkHF;AoChkHE;;EAEE,oCAAA;ApCkkHJ;AoC/jHE;EACE,gBAAA;ApCikHJ;;AoCxjHA;EACE,mB/B46BkC;E+B36BlC,sB/B26BkC;E+B16BlC,6BAAA;ApC2jHF;AoCzjHE;;;EAGE,oCAAA;ApC2jHJ;;AoC9iHA;EACE,gBAAA;EACA,YAAA;EAGA,mBAAA;ApC+iHF;;AoC3iHA;EACE,8EAAA;EjCiJI,6CALI;EiC1IR,cAAA;EACA,6BAAA;EACA,6BAAA;EACA,0EAAA;E9BtIE,qDAAA;EeHE,+Ce2IJ;ApC8iHF;AqBrrHM;Ee+HN;If9HQ,gBAAA;ErBwrHN;AACF;AoCjjHE;EACE,qBAAA;ApCmjHJ;AoChjHE;EACE,qBAAA;EACA,UAAA;EACA,sDAAA;ApCkjHJ;;AoC5iHA;EACE,qBAAA;EACA,YAAA;EACA,aAAA;EACA,sBAAA;EACA,kDAAA;EACA,4BAAA;EACA,2BAAA;EACA,qBAAA;ApC+iHF;;AoC5iHA;EACE,yCAAA;EACA,gBAAA;ApC+iHF;;AavqHI;EuBoIA;IAEI,iBAAA;IACA,2BAAA;EpCsiHN;EoCpiHM;IACE,mBAAA;EpCsiHR;EoCpiHQ;IACE,kBAAA;EpCsiHV;EoCniHQ;IACE,iDAAA;IACA,kDAAA;EpCqiHV;EoCjiHM;IACE,iBAAA;EpCmiHR;EoChiHM;IACE,wBAAA;IACA,gBAAA;EpCkiHR;EoC/hHM;IACE,aAAA;EpCiiHR;EoC9hHM;IAEE,gBAAA;IACA,aAAA;IACA,YAAA;IACA,sBAAA;IACA,uBAAA;IACA,8BAAA;IACA,wCAAA;IACA,oBAAA;IACA,0BAAA;If5NJ,gBe8NI;EpC8hHR;EoC3hHQ;IACE,aAAA;EpC6hHV;EoC1hHQ;IACE,aAAA;IACA,YAAA;IACA,UAAA;IACA,mBAAA;EpC4hHV;AACF;AavtHI;EuBoIA;IAEI,iBAAA;IACA,2BAAA;EpCqlHN;EoCnlHM;IACE,mBAAA;EpCqlHR;EoCnlHQ;IACE,kBAAA;EpCqlHV;EoCllHQ;IACE,iDAAA;IACA,kDAAA;EpColHV;EoChlHM;IACE,iBAAA;EpCklHR;EoC/kHM;IACE,wBAAA;IACA,gBAAA;EpCilHR;EoC9kHM;IACE,aAAA;EpCglHR;EoC7kHM;IAEE,gBAAA;IACA,aAAA;IACA,YAAA;IACA,sBAAA;IACA,uBAAA;IACA,8BAAA;IACA,wCAAA;IACA,oBAAA;IACA,0BAAA;If5NJ,gBe8NI;EpC6kHR;EoC1kHQ;IACE,aAAA;EpC4kHV;EoCzkHQ;IACE,aAAA;IACA,YAAA;IACA,UAAA;IACA,mBAAA;EpC2kHV;AACF;AatwHI;EuBoIA;IAEI,iBAAA;IACA,2BAAA;EpCooHN;EoCloHM;IACE,mBAAA;EpCooHR;EoCloHQ;IACE,kBAAA;EpCooHV;EoCjoHQ;IACE,iDAAA;IACA,kDAAA;EpCmoHV;EoC/nHM;IACE,iBAAA;EpCioHR;EoC9nHM;IACE,wBAAA;IACA,gBAAA;EpCgoHR;EoC7nHM;IACE,aAAA;EpC+nHR;EoC5nHM;IAEE,gBAAA;IACA,aAAA;IACA,YAAA;IACA,sBAAA;IACA,uBAAA;IACA,8BAAA;IACA,wCAAA;IACA,oBAAA;IACA,0BAAA;If5NJ,gBe8NI;EpC4nHR;EoCznHQ;IACE,aAAA;EpC2nHV;EoCxnHQ;IACE,aAAA;IACA,YAAA;IACA,UAAA;IACA,mBAAA;EpC0nHV;AACF;AarzHI;EuBoIA;IAEI,iBAAA;IACA,2BAAA;EpCmrHN;EoCjrHM;IACE,mBAAA;EpCmrHR;EoCjrHQ;IACE,kBAAA;EpCmrHV;EoChrHQ;IACE,iDAAA;IACA,kDAAA;EpCkrHV;EoC9qHM;IACE,iBAAA;EpCgrHR;EoC7qHM;IACE,wBAAA;IACA,gBAAA;EpC+qHR;EoC5qHM;IACE,aAAA;EpC8qHR;EoC3qHM;IAEE,gBAAA;IACA,aAAA;IACA,YAAA;IACA,sBAAA;IACA,uBAAA;IACA,8BAAA;IACA,wCAAA;IACA,oBAAA;IACA,0BAAA;If5NJ,gBe8NI;EpC2qHR;EoCxqHQ;IACE,aAAA;EpC0qHV;EoCvqHQ;IACE,aAAA;IACA,YAAA;IACA,UAAA;IACA,mBAAA;EpCyqHV;AACF;Aap2HI;EuBoIA;IAEI,iBAAA;IACA,2BAAA;EpCkuHN;EoChuHM;IACE,mBAAA;EpCkuHR;EoChuHQ;IACE,kBAAA;EpCkuHV;EoC/tHQ;IACE,iDAAA;IACA,kDAAA;EpCiuHV;EoC7tHM;IACE,iBAAA;EpC+tHR;EoC5tHM;IACE,wBAAA;IACA,gBAAA;EpC8tHR;EoC3tHM;IACE,aAAA;EpC6tHR;EoC1tHM;IAEE,gBAAA;IACA,aAAA;IACA,YAAA;IACA,sBAAA;IACA,uBAAA;IACA,8BAAA;IACA,wCAAA;IACA,oBAAA;IACA,0BAAA;If5NJ,gBe8NI;EpC0tHR;EoCvtHQ;IACE,aAAA;EpCytHV;EoCttHQ;IACE,aAAA;IACA,YAAA;IACA,UAAA;IACA,mBAAA;EpCwtHV;AACF;AoC/wHI;EAEI,iBAAA;EACA,2BAAA;ApCgxHR;AoC9wHQ;EACE,mBAAA;ApCgxHV;AoC9wHU;EACE,kBAAA;ApCgxHZ;AoC7wHU;EACE,iDAAA;EACA,kDAAA;ApC+wHZ;AoC3wHQ;EACE,iBAAA;ApC6wHV;AoC1wHQ;EACE,wBAAA;EACA,gBAAA;ApC4wHV;AoCzwHQ;EACE,aAAA;ApC2wHV;AoCxwHQ;EAEE,gBAAA;EACA,aAAA;EACA,YAAA;EACA,sBAAA;EACA,uBAAA;EACA,8BAAA;EACA,wCAAA;EACA,oBAAA;EACA,0BAAA;Ef5NJ,gBe8NI;ApCwwHV;AoCrwHU;EACE,aAAA;ApCuwHZ;AoCpwHU;EACE,aAAA;EACA,YAAA;EACA,UAAA;EACA,mBAAA;ApCswHZ;;AoCrvHA;EAEE,4CAAA;EACA,kDAAA;EACA,qDAAA;EACA,8BAAA;EACA,6BAAA;EACA,mCAAA;EACA,0DAAA;EACA,8QAAA;ApCuvHF;;AqCtgIA;EAEE,wBAAA;EACA,wBAAA;EACA,gCAAA;EACA,2BAAA;EACA,0DAAA;EACA,iCAAA;EACA,sBAAA;EACA,mDAAA;EACA,+BAAA;EACA,6BAAA;EACA,qCAAA;EACA,qBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,mCAAA;EACA,+BAAA;EAGA,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,YAAA;EACA,6BAAA;EACA,qBAAA;EACA,mCAAA;EACA,2BAAA;EACA,qEAAA;E/BdE,2CAAA;ANqhIJ;AqCngIE;EACE,cAAA;EACA,eAAA;ArCqgIJ;AqClgIE;EACE,mBAAA;EACA,sBAAA;ArCogIJ;AqClgII;EACE,mBAAA;E/BnBF,2DAAA;EACA,0DAAA;ANwhIJ;AqClgII;EACE,sBAAA;E/BVF,6DAAA;EACA,8DAAA;AN+gIJ;AqC//HE;;EAEE,aAAA;ArCigIJ;;AqC7/HA;EAGE,cAAA;EACA,wDAAA;EACA,2BAAA;ArC8/HF;;AqC3/HA;EACE,4CAAA;ArC8/HF;;AqC3/HA;EACE,sDAAA;EACA,gBAAA;ArC8/HF;;AqC3/HA;EACE,gBAAA;ArC8/HF;;AqCt/HE;EACE,qCAAA;ArCy/HJ;;AqCj/HA;EACE,kEAAA;EACA,gBAAA;EACA,+BAAA;EACA,uCAAA;EACA,4EAAA;ArCo/HF;AqCl/HE;E/BxFE,wFAAA;AN6kIJ;;AqCh/HA;EACE,kEAAA;EACA,+BAAA;EACA,uCAAA;EACA,yEAAA;ArCm/HF;AqCj/HE;E/BnGE,wFAAA;ANulIJ;;AqC1+HA;EACE,sDAAA;EACA,sDAAA;EACA,uDAAA;EACA,gBAAA;ArC6+HF;AqC3+HE;EACE,mCAAA;EACA,sCAAA;ArC6+HJ;;AqCz+HA;EACE,sDAAA;EACA,uDAAA;ArC4+HF;;AqCx+HA;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,QAAA;EACA,2CAAA;E/BrIE,iDAAA;ANinIJ;;AqCx+HA;;;EAGE,WAAA;ArC2+HF;;AqCx+HA;;E/BtII,2DAAA;EACA,0DAAA;ANmnIJ;;AqCz+HA;;E/B7HI,6DAAA;EACA,8DAAA;AN2mIJ;;AqCl+HE;EACE,0CAAA;ArCq+HJ;Aa3lII;EwBkHJ;IAQI,aAAA;IACA,mBAAA;ErCq+HF;EqCl+HE;IAEE,YAAA;IACA,gBAAA;ErCm+HJ;EqCj+HI;IACE,eAAA;IACA,eAAA;ErCm+HN;EqC99HM;I/BtKJ,yBAAA;IACA,4BAAA;ENuoIF;EqC/9HQ;;IAGE,yBAAA;ErCg+HV;EqC99HQ;;IAGE,4BAAA;ErC+9HV;EqC39HM;I/BvKJ,0BAAA;IACA,6BAAA;ENqoIF;EqC59HQ;;IAGE,0BAAA;ErC69HV;EqC39HQ;;IAGE,6BAAA;ErC49HV;AACF;;AsC5rIA;EAEE,6BAAA;EACA,uBAAA;EACA,8KAAA;EACA,mDAAA;EACA,gCAAA;EACA,sCAAA;EACA,wDAAA;EACA,qCAAA;EACA,kCAAA;EACA,iCAAA;EACA,6CAAA;EACA,wSAAA;EACA,sCAAA;EACA,kDAAA;EACA,8DAAA;EACA,+SAAA;EACA,8CAAA;EACA,2EAAA;EACA,sCAAA;EACA,mCAAA;EACA,oCAAA;EACA,iCAAA;AtC8rIF;;AsC1rIA;EACE,kBAAA;EACA,aAAA;EACA,mBAAA;EACA,WAAA;EACA,4EAAA;EnCiQI,eALI;EmC1PR,oCAAA;EACA,iBAAA;EACA,4CAAA;EACA,SAAA;EhCtBE,gBAAA;EgCwBF,qBAAA;EjB3BI,0CiB4BJ;AtC6rIF;AqBrtIM;EiBWN;IjBVQ,gBAAA;ErBwtIN;AACF;AsChsIE;EACE,uCAAA;EACA,+CAAA;EACA,kGAAA;AtCksIJ;AsChsII;EACE,qDAAA;EACA,iDAAA;AtCksIN;AsC7rIE;EACE,cAAA;EACA,yCAAA;EACA,0CAAA;EACA,kBAAA;EACA,WAAA;EACA,8CAAA;EACA,4BAAA;EACA,mDAAA;EjBlDE,mDiBmDF;AtC+rIJ;AqB9uIM;EiBsCJ;IjBrCM,gBAAA;ErBivIN;AACF;AsCjsIE;EACE,UAAA;AtCmsIJ;AsChsIE;EACE,UAAA;EACA,wDAAA;EACA,UAAA;EACA,oDAAA;AtCksIJ;;AsC9rIA;EACE,gBAAA;AtCisIF;;AsC9rIA;EACE,gCAAA;EACA,wCAAA;EACA,+EAAA;AtCisIF;AsC/rIE;EhC/DE,0DAAA;EACA,yDAAA;ANiwIJ;AsChsII;EhClEA,gEAAA;EACA,+DAAA;ANqwIJ;AsC/rIE;EACE,aAAA;AtCisIJ;AsC7rIE;EhC9DE,4DAAA;EACA,6DAAA;AN8vIJ;AsC7rIM;EhClEF,kEAAA;EACA,mEAAA;ANkwIJ;AsC5rII;EhCvEA,4DAAA;EACA,6DAAA;ANswIJ;;AsC1rIA;EACE,8EAAA;AtC6rIF;;AsCprIE;EACE,eAAA;AtCurIJ;AsCprIE;EACE,cAAA;EACA,eAAA;EhCpHA,gBAAA;AN2yIJ;AsCprII;EAAgB,aAAA;AtCurIpB;AsCtrII;EAAe,gBAAA;AtCyrInB;AsCtrIM;EhC3HF,gBAAA;ANozIJ;;AuCv0IA;EAEE,4BAAA;EACA,4BAAA;EACA,mCAAA;EAEA,oBAAA;EACA,+BAAA;EACA,sCAAA;EACA,sCAAA;EACA,0CAAA;EAGA,aAAA;EACA,eAAA;EACA,sEAAA;EACA,iDAAA;EpCqRI,yCALI;EoC9QR,gBAAA;EACA,yCAAA;EjCAE,iDAAA;ANu0IJ;;AuCj0IE;EACE,kDAAA;AvCo0IJ;AuCl0II;EACE,YAAA;EACA,iDAAA;EACA,yCAAA;EACA,4CAAA;AvCo0IN;AuCh0IE;EACE,6CAAA;AvCk0IJ;;AwCv2IA;EAEE,kCAAA;EACA,mCAAA;ErCkSI,+BALI;EqC3RR,2CAAA;EACA,wBAAA;EACA,iCAAA;EACA,qCAAA;EACA,uCAAA;EACA,uDAAA;EACA,iCAAA;EACA,2CAAA;EACA,uDAAA;EACA,iCAAA;EACA,wEAAA;EACA,kCAAA;EACA,kCAAA;EACA,4CAAA;EACA,uCAAA;EACA,iCAAA;EACA,8CAAA;EAGA,aAAA;EhCpBA,gBAAA;EACA,gBAAA;AR43IF;;AwCr2IA;EACE,kBAAA;EACA,cAAA;EACA,sEAAA;ErCsQI,yCALI;EqC/PR,iCAAA;EACA,qBAAA;EACA,yCAAA;EACA,iFAAA;EnBpBI,qImBqBJ;AxCw2IF;AqBz3IM;EmBQN;InBPQ,gBAAA;ErB43IN;AACF;AwC32IE;EACE,UAAA;EACA,uCAAA;EAEA,+CAAA;EACA,qDAAA;AxC42IJ;AwCz2IE;EACE,UAAA;EACA,uCAAA;EACA,+CAAA;EACA,UnCgoCgC;EmC/nChC,iDAAA;AxC22IJ;AwCx2IE;EAEE,UAAA;EACA,wCAAA;ElBtDF,gDkBuDuB;EACrB,sDAAA;AxCy2IJ;AwCt2IE;EAEE,0CAAA;EACA,oBAAA;EACA,kDAAA;EACA,wDAAA;AxCu2IJ;;AwCl2IE;EACE,kBnCmmCgC;ALkwGpC;AwCh2IM;ElC9BF,2DAAA;EACA,8DAAA;ANi4IJ;AwC91IM;ElClDF,0DAAA;EACA,6DAAA;ANm5IJ;;AwCj1IA;EClGE,iCAAA;EACA,kCAAA;EtCgSI,kCALI;EsCzRR,qCAAA;AzCu7IF;;AwCp1IA;ECtGE,iCAAA;EACA,kCAAA;EtCgSI,mCALI;EsCzRR,sCAAA;AzC87IF;;A0Ch8IA;EAEE,4BAAA;EACA,4BAAA;EvC6RI,4BALI;EuCtRR,2BAAA;EACA,sBAAA;EACA,kCAAA;EAGA,qBAAA;EACA,4DAAA;EvCqRI,oCALI;EuC9QR,wCAAA;EACA,cAAA;EACA,4BAAA;EACA,kBAAA;EACA,mBAAA;EACA,wBAAA;EpCJE,4CAAA;ANq8IJ;A0C57IE;EACE,aAAA;A1C87IJ;;A0Cz7IA;EACE,kBAAA;EACA,SAAA;A1C47IF;;A2C59IA;EAEE,0BAAA;EACA,0BAAA;EACA,0BAAA;EACA,8BAAA;EACA,yBAAA;EACA,oCAAA;EACA,yDAAA;EACA,kCAAA;EAGA,kBAAA;EACA,4DAAA;EACA,4CAAA;EACA,4BAAA;EACA,oCAAA;EACA,8BAAA;ErCFE,4CAAA;AN+9IJ;;A2Cx9IA;EAEE,cAAA;A3C09IF;;A2Ct9IA;EACE,gBtC8gB4B;AL28H9B;;A2Cj9IA;EACE,kBtC43C8B;ALwlGhC;A2Cj9IE;EACE,kBAAA;EACA,MAAA;EACA,OAAA;EACA,UAAA;EACA,qBAAA;A3Cm9IJ;;A2Cn8IE;EChEA,yBAAA;EACA,sBAAA;EACA,gCAAA;A5CugJF;A4CjgJE;EACE,cAAA;A5CmgJJ;;A2C58IE;EChEA,yBAAA;EACA,sBAAA;EACA,gCAAA;A5CghJF;A4C1gJE;EACE,cAAA;A5C4gJJ;;A2Cr9IE;EChEA,yBAAA;EACA,sBAAA;EACA,gCAAA;A5CyhJF;A4CnhJE;EACE,cAAA;A5CqhJJ;;A2C99IE;EChEA,yBAAA;EACA,sBAAA;EACA,gCAAA;A5CkiJF;A4C5hJE;EACE,cAAA;A5C8hJJ;;A2Cv+IE;EChEA,yBAAA;EACA,sBAAA;EACA,gCAAA;A5C2iJF;A4CriJE;EACE,cAAA;A5CuiJJ;;A2Ch/IE;EChEA,yBAAA;EACA,sBAAA;EACA,gCAAA;A5CojJF;A4C9iJE;EACE,cAAA;A5CgjJJ;;A2Cz/IE;EChEA,yBAAA;EACA,sBAAA;EACA,gCAAA;A5C6jJF;A4CvjJE;EACE,cAAA;A5CyjJJ;;A2ClgJE;EChEA,yBAAA;EACA,sBAAA;EACA,gCAAA;A5CskJF;A4ChkJE;EACE,cAAA;A5CkkJJ;;A6CzkJE;EACE;IAAK,2BxCw6C2B;ELqqGlC;AACF;A6CzkJA;EAEE,0BAAA;E1CyRI,gCALI;E0ClRR,yBAAA;EACA,qCAAA;EACA,8DAAA;EACA,6BAAA;EACA,6BAAA;EACA,6CAAA;EAGA,aAAA;EACA,iCAAA;EACA,gBAAA;E1C6QI,uCALI;E0CtQR,uCAAA;EvCPE,+CAAA;ANglJJ;;A6CpkJA;EACE,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,gBAAA;EACA,mCAAA;EACA,kBAAA;EACA,mBAAA;EACA,2CAAA;ExBvBI,6CwBwBJ;A7CukJF;AqB3lJM;EwBWN;IxBVQ,gBAAA;ErB8lJN;AACF;;A6CzkJA;EvBCE,sMAAA;EuBCA,oEAAA;A7C4kJF;;A6CxkJE;EACE,kDAAA;A7C2kJJ;A6CxkJM;EAJJ;IAKM,eAAA;E7C2kJN;AACF;;A8C9nJA;EAEE,8BAAA;EACA,wBAAA;EACA,kDAAA;EACA,iCAAA;EACA,uCAAA;EACA,oCAAA;EACA,sCAAA;EACA,qCAAA;EACA,2CAAA;EACA,wCAAA;EACA,4CAAA;EACA,yCAAA;EACA,uCAAA;EACA,iCAAA;EACA,kCAAA;EACA,kCAAA;EACA,4CAAA;EAGA,aAAA;EACA,sBAAA;EAGA,gBAAA;EACA,gBAAA;ExCXE,iDAAA;ANwoJJ;;A8CznJA;EACE,qBAAA;EACA,sBAAA;A9C4nJF;A8C1nJE;EAEE,oCAAA;EACA,0BAAA;A9C2nJJ;;A8ClnJA;EACE,WAAA;EACA,wCAAA;EACA,mBAAA;A9CqnJF;A8ClnJE;EAEE,UAAA;EACA,8CAAA;EACA,qBAAA;EACA,sDAAA;A9CmnJJ;A8ChnJE;EACE,+CAAA;EACA,uDAAA;A9CknJJ;;A8C1mJA;EACE,kBAAA;EACA,cAAA;EACA,gFAAA;EACA,iCAAA;EACA,qBAAA;EACA,yCAAA;EACA,iFAAA;A9C6mJF;A8C3mJE;ExCvDE,gCAAA;EACA,+BAAA;ANqqJJ;A8C3mJE;ExC7CE,kCAAA;EACA,mCAAA;AN2pJJ;A8C3mJE;EAEE,0CAAA;EACA,oBAAA;EACA,kDAAA;A9C4mJJ;A8CxmJE;EACE,UAAA;EACA,wCAAA;EACA,gDAAA;EACA,sDAAA;A9C0mJJ;A8CtmJE;EACE,mBAAA;A9CwmJJ;A8CtmJI;EACE,wDAAA;EACA,mDAAA;A9CwmJN;;A8C3lJI;EACE,mBAAA;A9C8lJN;A8C3lJQ;ExCvDJ,8DAAA;EAZA,yBAAA;ANkqJJ;A8C1lJQ;ExCxEJ,0DAAA;EAYA,6BAAA;AN0pJJ;A8CzlJQ;EACE,aAAA;A9C2lJV;A8CxlJQ;EACE,mDAAA;EACA,qBAAA;A9C0lJV;A8CxlJU;EACE,0DAAA;EACA,qDAAA;A9C0lJZ;;AahrJI;EiC8DA;IACE,mBAAA;E9CsnJJ;E8CnnJM;IxCvDJ,8DAAA;IAZA,yBAAA;EN0rJF;E8ClnJM;IxCxEJ,0DAAA;IAYA,6BAAA;ENkrJF;E8CjnJM;IACE,aAAA;E9CmnJR;E8ChnJM;IACE,mDAAA;IACA,qBAAA;E9CknJR;E8ChnJQ;IACE,0DAAA;IACA,qDAAA;E9CknJV;AACF;AazsJI;EiC8DA;IACE,mBAAA;E9C8oJJ;E8C3oJM;IxCvDJ,8DAAA;IAZA,yBAAA;ENktJF;E8C1oJM;IxCxEJ,0DAAA;IAYA,6BAAA;EN0sJF;E8CzoJM;IACE,aAAA;E9C2oJR;E8CxoJM;IACE,mDAAA;IACA,qBAAA;E9C0oJR;E8CxoJQ;IACE,0DAAA;IACA,qDAAA;E9C0oJV;AACF;AajuJI;EiC8DA;IACE,mBAAA;E9CsqJJ;E8CnqJM;IxCvDJ,8DAAA;IAZA,yBAAA;EN0uJF;E8ClqJM;IxCxEJ,0DAAA;IAYA,6BAAA;ENkuJF;E8CjqJM;IACE,aAAA;E9CmqJR;E8ChqJM;IACE,mDAAA;IACA,qBAAA;E9CkqJR;E8ChqJQ;IACE,0DAAA;IACA,qDAAA;E9CkqJV;AACF;AazvJI;EiC8DA;IACE,mBAAA;E9C8rJJ;E8C3rJM;IxCvDJ,8DAAA;IAZA,yBAAA;ENkwJF;E8C1rJM;IxCxEJ,0DAAA;IAYA,6BAAA;EN0vJF;E8CzrJM;IACE,aAAA;E9C2rJR;E8CxrJM;IACE,mDAAA;IACA,qBAAA;E9C0rJR;E8CxrJQ;IACE,0DAAA;IACA,qDAAA;E9C0rJV;AACF;AajxJI;EiC8DA;IACE,mBAAA;E9CstJJ;E8CntJM;IxCvDJ,8DAAA;IAZA,yBAAA;EN0xJF;E8CltJM;IxCxEJ,0DAAA;IAYA,6BAAA;ENkxJF;E8CjtJM;IACE,aAAA;E9CmtJR;E8ChtJM;IACE,mDAAA;IACA,qBAAA;E9CktJR;E8ChtJQ;IACE,0DAAA;IACA,qDAAA;E9CktJV;AACF;A8CrsJA;ExChJI,gBAAA;ANw1JJ;A8CrsJE;EACE,mDAAA;A9CusJJ;A8CrsJI;EACE,sBAAA;A9CusJN;;A+C72JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9C+rJ1B;A+C72JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/C82JR;A+C32JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CusJ7B;;A+C33JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9C6sJ1B;A+C33JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/C43JR;A+Cz3JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CqtJ7B;;A+Cz4JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9C2tJ1B;A+Cz4JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/C04JR;A+Cv4JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CmuJ7B;;A+Cv5JE;EACE,cDqL2B;ECpL3B,yBDiLsB;A9CyuJ1B;A+Cv5JM;EAEE,cD+KuB;EC9KvB,yBAAA;A/Cw5JR;A+Cr5JM;EACE,W1CRG;E0CSH,yBDyKuB;ECxKvB,qBDwKuB;A9C+uJ/B;;A+Cr6JE;EACE,cDqL2B;ECpL3B,yBDiLsB;A9CuvJ1B;A+Cr6JM;EAEE,cD+KuB;EC9KvB,yBAAA;A/Cs6JR;A+Cn6JM;EACE,W1CRG;E0CSH,yBDyKuB;ECxKvB,qBDwKuB;A9C6vJ/B;;A+Cn7JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9CqwJ1B;A+Cn7JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/Co7JR;A+Cj7JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9C6wJ7B;;A+Cj8JE;EACE,cDqL2B;ECpL3B,yBDiLsB;A9CmxJ1B;A+Cj8JM;EAEE,cD+KuB;EC9KvB,yBAAA;A/Ck8JR;A+C/7JM;EACE,W1CRG;E0CSH,yBDyKuB;ECxKvB,qBDwKuB;A9CyxJ/B;;A+C/8JE;EACE,cDmLyB;EClLzB,yBDiLsB;A9CiyJ1B;A+C/8JM;EAEE,cD6KqB;EC5KrB,yBAAA;A/Cg9JR;A+C78JM;EACE,W1CRG;E0CSH,yBDuKqB;ECtKrB,qBDsKqB;A9CyyJ7B;;AgD59JA;EACE,uBAAA;EACA,U3C6iD2B;E2C5iD3B,W3C4iD2B;E2C3iD3B,sBAAA;EACA,W3CQS;E2CPT,mXAAA;EACA,SAAA;E1COE,uBAAA;E0CLF,Y3C6iD2B;ALk7G7B;AgD59JE;EACE,WAAA;EACA,qBAAA;EACA,a3CwiDyB;ALs7G7B;AgD39JE;EACE,UAAA;EAC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;EvEw7QV;EuE/7QM;IAOI,8BAAA;EvE27QV;EuEl8QM;IAOI,gCAAA;EvE87QV;EuEr8QM;IAOI,8BAAA;EvEi8QV;EuEx8QM;IAOI,iBAAA;EvEo8QV;EuE38QM;IAOI,uBAAA;EvEu8QV;EuE98QM;IAOI,sBAAA;EvE08QV;EuEj9QM;IAOI,oBAAA;EvE68QV;EuEp9QM;IAOI,sBAAA;EvEg9QV;EuEv9QM;IAOI,oBAAA;EvEm9QV;EuE19QM;IAOI,4BAAA;EvEs9QV;EuE79QM;IAOI,2BAAA;EvEy9QV;EuEh+QM;IAOI,6BAAA;EvE49QV;AACF;Aav+QI;E0DGI;IAOI,uBAAA;EvEi+QV;EuEx+QM;IAOI,sBAAA;EvEo+QV;EuE3+QM;IAOI,sBAAA;EvEu+QV;EuE9+QM;IAOI,0BAAA;EvE0+QV;EuEj/QM;IAOI,gCAAA;EvE6+QV;EuEp/QM;IAOI,yBAAA;EvEg/QV;EuEv/QM;IAOI,wBAAA;EvEm/QV;EuE1/QM;IAOI,yBAAA;EvEs/QV;EuE7/QM;IAOI,6BAAA;EvEy/QV;EuEhgRM;IAOI,8BAAA;EvE4/QV;EuEngRM;IAOI,wBAAA;EvE+/QV;EuEtgRM;IAOI,+BAAA;EvEkgRV;EuEzgRM;IAOI,wBAAA;EvEqgRV;EuE5gRM;IAOI,yBAAA;EvEwgRV;EuE/gRM;IAOI,8BAAA;EvE2gRV;EuElhRM;IAOI,iCAAA;EvE8gRV;EuErhRM;IAOI,sCAAA;EvEihRV;EuExhRM;IAOI,yCAAA;EvEohRV;EuE3hRM;IAOI,uBAAA;EvEuhRV;EuE9hRM;IAOI,uBAAA;EvE0hRV;EuEjiRM;IAOI,yBAAA;EvE6hRV;EuEpiRM;IAOI,yBAAA;EvEgiRV;EuEviRM;IAOI,0BAAA;EvEmiRV;EuE1iRM;IAOI,4BAAA;EvEsiRV;EuE7iRM;IAOI,kCAAA;EvEyiRV;EuEhjRM;IAOI,sCAAA;EvE4iRV;EuEnjRM;IAOI,oCAAA;EvE+iRV;EuEtjRM;IAOI,kCAAA;EvEkjRV;EuEzjRM;IAOI,yCAAA;EvEqjRV;EuE5jRM;IAOI,wCAAA;EvEwjRV;EuE/jRM;IAOI,wCAAA;EvE2jRV;EuElkRM;IAOI,kCAAA;E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2BAAA;EvEy8RV;EuEh9RM;IAOI,6BAAA;EvE48RV;AACF;Aav9RI;E0DGI;IAOI,uBAAA;EvEi9RV;EuEx9RM;IAOI,sBAAA;EvEo9RV;EuE39RM;IAOI,sBAAA;EvEu9RV;EuE99RM;IAOI,0BAAA;EvE09RV;EuEj+RM;IAOI,gCAAA;EvE69RV;EuEp+RM;IAOI,yBAAA;EvEg+RV;EuEv+RM;IAOI,wBAAA;EvEm+RV;EuE1+RM;IAOI,yBAAA;EvEs+RV;EuE7+RM;IAOI,6BAAA;EvEy+RV;EuEh/RM;IAOI,8BAAA;EvE4+RV;EuEn/RM;IAOI,wBAAA;EvE++RV;EuEt/RM;IAOI,+BAAA;EvEk/RV;EuEz/RM;IAOI,wBAAA;EvEq/RV;EuE5/RM;IAOI,yBAAA;EvEw/RV;EuE//RM;IAOI,8BAAA;EvE2/RV;EuElgSM;IAOI,iCAAA;EvE8/RV;EuErgSM;IAOI,sCAAA;EvEigSV;EuExgSM;IAOI,yCAAA;EvEogSV;EuE3gSM;IAOI,uBAAA;EvEugSV;EuE9gSM;IAOI,uBAAA;EvE0gSV;EuEjhSM;IAOI,yBAAA;EvE6gSV;EuEphSM;IAOI,yBAAA;EvEghSV;EuEvhSM;IAOI,0BAAA;EvEmhSV;EuE1hSM;IAOI,4BAAA;EvEshSV;EuE7hSM;IAOI,kCAAA;EvEyhSV;EuEhiSM;IAOI,sCAAA;EvE4hSV;EuEniSM;IAOI,oCAAA;EvE+hSV;EuEtiSM;IAOI,kCAAA;EvEkiSV;EuEziSM;IAOI,yCAAA;EvEqiSV;EuE5iSM;IAOI,wCAAA;EvEwiSV;EuE/iSM;IAOI,wCAAA;EvE2iSV;EuEljSM;IAOI,kCAAA;EvE8iSV;EuErjSM;IAOI,gCAAA;EvEijSV;EuExjSM;IAOI,8BAAA;EvEojSV;EuE3jSM;IAOI,gCAAA;EvEujSV;EuE9jSM;IAOI,+BAAA;EvE0jSV;EuEjkSM;IAOI,oCAAA;EvE6jSV;EuEpkSM;IAOI,kCAAA;EvEgkSV;EuEvkSM;IAOI,gCAAA;EvEmkSV;EuE1kSM;IAOI,uCAAA;EvEskSV;EuE7kSM;IAOI,sCAAA;EvEykSV;EuEhlSM;IAOI,iCAAA;EvE4kSV;EuEnlSM;IAOI,2B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V;EuEh+SM;IAOI,8BAAA;EvE49SV;EuEn+SM;IAOI,wBAAA;EvE+9SV;EuEt+SM;IAOI,+BAAA;EvEk+SV;EuEz+SM;IAOI,wBAAA;EvEq+SV;EuE5+SM;IAOI,yBAAA;EvEw+SV;EuE/+SM;IAOI,8BAAA;EvE2+SV;EuEl/SM;IAOI,iCAAA;EvE8+SV;EuEr/SM;IAOI,sCAAA;EvEi/SV;EuEx/SM;IAOI,yCAAA;EvEo/SV;EuE3/SM;IAOI,uBAAA;EvEu/SV;EuE9/SM;IAOI,uBAAA;EvE0/SV;EuEjgTM;IAOI,yBAAA;EvE6/SV;EuEpgTM;IAOI,yBAAA;EvEggTV;EuEvgTM;IAOI,0BAAA;EvEmgTV;EuE1gTM;IAOI,4BAAA;EvEsgTV;EuE7gTM;IAOI,kCAAA;EvEygTV;EuEhhTM;IAOI,sCAAA;EvE4gTV;EuEnhTM;IAOI,oCAAA;EvE+gTV;EuEthTM;IAOI,kCAAA;EvEkhTV;EuEzhTM;IAOI,yCAAA;EvEqhTV;EuE5hTM;IAOI,wCAAA;EvEwhTV;EuE/hTM;IAOI,wCAAA;EvE2hTV;EuEliTM;IAOI,kCAAA;EvE8hTV;EuEriTM;IAOI,gCAAA;EvEiiTV;EuExiTM;IAOI,8BAAA;EvEoiTV;EuE3iTM;IAOI,gCAAA;EvEuiTV;EuE9iTM;IAOI,+BAAA;EvE0iTV;EuEjjTM;IAOI,oCAAA;EvE6iTV;EuEpjTM;IAOI,kCAAA;EvEgjTV;EuEvjTM;IAOI,gCAAA;EvEmjTV;EuE1jTM;IAOI,uCAAA;EvEsjTV;EuE7jTM;IAOI,sCAAA;EvEyjTV;EuEhkTM;IAOI,iCAAA;EvE4jTV;EuEnkTM;IAOI,2BAAA;EvE+jTV;EuEtkTM;IAOI,iCAAA;EvEkkTV;EuEzkTM;IAOI,+BAAA;EvEqkTV;EuE5kTM;IAOI,6BAAA;EvEwkTV;EuE/kTM;IAOI,+BAAA;EvE2kTV;EuEllTM;IAOI,8BAAA;EvE8kTV;EuErlTM;IAOI,oBAAA;EvEilTV;EuExlTM;IAOI,mBAAA;EvEolTV;EuE3lTM;IAOI,mBAAA;EvEulTV;EuE9lTM;IAOI,mBAAA;EvE0lTV;EuEjmTM;IAOI,mBAAA;EvE6lTV;EuEpmTM;IA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;EvEo2TV;EuE32TM;IAOI,6BAAA;EvEu2TV;EuE92TM;IAOI,+BAAA;EvE02TV;EuEj3TM;IAOI,6BAAA;EvE62TV;EuEp3TM;IAOI,4BAAA;EvEg3TV;EuEv3TM;IAOI,kCAAA;EvEm3TV;EuE13TM;IAOI,iCAAA;EvEs3TV;EuE73TM;IAOI,+BAAA;EvEy3TV;EuEh4TM;IAOI,iCAAA;EvE43TV;EuEn4TM;IAOI,+BAAA;EvE+3TV;EuEt4TM;IAOI,2BAAA;EvEk4TV;EuEz4TM;IAOI,iCAAA;EvEq4TV;EuE54TM;IAOI,gCAAA;EvEw4TV;EuE/4TM;IAOI,8BAAA;EvE24TV;EuEl5TM;IAOI,gCAAA;EvE84TV;EuEr5TM;IAOI,8BAAA;EvEi5TV;EuEx5TM;IAOI,iBAAA;EvEo5TV;EuE35TM;IAOI,uBAAA;EvEu5TV;EuE95TM;IAOI,sBAAA;EvE05TV;EuEj6TM;IAOI,oBAAA;EvE65TV;EuEp6TM;IAOI,sBAAA;EvEg6TV;EuEv6TM;IAOI,oBAAA;EvEm6TV;EuE16TM;IAOI,4BAAA;EvEs6TV;EuE76TM;IAOI,2BAAA;EvEy6TV;EuEh7TM;IAOI,6BAAA;EvE46TV;AACF;Aav7TI;E0DGI;IAOI,uBAAA;EvEi7TV;EuEx7TM;IAOI,sBAAA;EvEo7TV;EuE37TM;IAOI,sBAAA;EvEu7TV;EuE97TM;IAOI,0BAAA;EvE07TV;EuEj8TM;IAOI,gCAAA;EvE67TV;EuEp8TM;IAOI,yBAAA;EvEg8TV;EuEv8TM;IAOI,wBAAA;EvEm8TV;EuE18TM;IAOI,yBAAA;EvEs8TV;EuE78TM;IAOI,6BAAA;EvEy8TV;EuEh9TM;IAOI,8BAAA;EvE48TV;EuEn9TM;IAOI,wBAAA;EvE+8TV;EuEt9TM;IAOI,+BAAA;EvEk9TV;EuEz9TM;IAOI,wBAAA;EvEq9TV;EuE59TM;IAOI,yBAAA;EvEw9TV;EuE/9TM;IAOI,8BAAA;EvE29TV;EuEl+TM;IAOI,iCAAA;EvE89TV;EuEr+TM;IAOI,sCAAA;EvEi+TV;EuEx+TM;IAOI,yCAAA;EvEo+TV;EuE3+TM;IAOI,uBAAA;EvEu+TV;EuE9+TM;IAOI,uBAAA;E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","file":"bootstrap.rtl.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * Bootstrap v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: 2px solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control:disabled {\n background-color: #e9ecef;\n opacity: 1;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.form-select {\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: #fff;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: 1px solid rgba(0, 0, 0, 0.25);\n appearance: none;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n width: 2em;\n margin-left: -2.5em;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + 2px);\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: 1px solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: 1px 0;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #198754;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(25, 135, 84, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #198754;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: #198754;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: 1px;\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: #212529;\n --bs-dropdown-bg: #fff;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: 1px;\n --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-dropdown-link-color: #212529;\n --bs-dropdown-link-hover-color: #1e2125;\n --bs-dropdown-link-hover-bg: #e9ecef;\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: 1px;\n --bs-nav-tabs-border-color: #dee2e6;\n --bs-nav-tabs-border-radius: 0.375rem;\n --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;\n --bs-nav-tabs-link-active-color: #495057;\n --bs-nav-tabs-link-active-bg: #fff;\n --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(0, 0, 0, 0.55);\n --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);\n --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);\n --bs-navbar-active-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-border-width: 1px;\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: 0.375rem;\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(0.375rem - 1px);\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(0, 0, 0, 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: #fff;\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: #212529;\n --bs-accordion-bg: #fff;\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: 1px;\n --bs-accordion-border-radius: 0.375rem;\n --bs-accordion-inner-border-radius: calc(0.375rem - 1px);\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: #212529;\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: #0c63e4;\n --bs-accordion-active-bg: #e7f1ff;\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: #6c757d;\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: #fff;\n --bs-pagination-border-width: 1px;\n --bs-pagination-border-color: #dee2e6;\n --bs-pagination-border-radius: 0.375rem;\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: #e9ecef;\n --bs-pagination-hover-border-color: #dee2e6;\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: #e9ecef;\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: #6c757d;\n --bs-pagination-disabled-bg: #fff;\n --bs-pagination-disabled-border-color: #dee2e6;\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: -1px;\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: 1px solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: #084298;\n --bs-alert-bg: #cfe2ff;\n --bs-alert-border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n color: #06357a;\n}\n\n.alert-secondary {\n --bs-alert-color: #41464b;\n --bs-alert-bg: #e2e3e5;\n --bs-alert-border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n color: #34383c;\n}\n\n.alert-success {\n --bs-alert-color: #0f5132;\n --bs-alert-bg: #d1e7dd;\n --bs-alert-border-color: #badbcc;\n}\n.alert-success .alert-link {\n color: #0c4128;\n}\n\n.alert-info {\n --bs-alert-color: #055160;\n --bs-alert-bg: #cff4fc;\n --bs-alert-border-color: #b6effb;\n}\n.alert-info .alert-link {\n color: #04414d;\n}\n\n.alert-warning {\n --bs-alert-color: #664d03;\n --bs-alert-bg: #fff3cd;\n --bs-alert-border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n color: #523e02;\n}\n\n.alert-danger {\n --bs-alert-color: #842029;\n --bs-alert-bg: #f8d7da;\n --bs-alert-border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n color: #6a1a21;\n}\n\n.alert-light {\n --bs-alert-color: #636464;\n --bs-alert-bg: #fefefe;\n --bs-alert-border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n color: #4f5050;\n}\n\n.alert-dark {\n --bs-alert-color: #141619;\n --bs-alert-bg: #d3d3d4;\n --bs-alert-border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n color: #101214;\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: #e9ecef;\n --bs-progress-border-radius: 0.375rem;\n --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: #212529;\n --bs-list-group-bg: #fff;\n --bs-list-group-border-color: rgba(0, 0, 0, 0.125);\n --bs-list-group-border-width: 1px;\n --bs-list-group-border-radius: 0.375rem;\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: #495057;\n --bs-list-group-action-hover-color: #495057;\n --bs-list-group-action-hover-bg: #f8f9fa;\n --bs-list-group-action-active-color: #212529;\n --bs-list-group-action-active-bg: #e9ecef;\n --bs-list-group-disabled-color: #6c757d;\n --bs-list-group-disabled-bg: #fff;\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #084298;\n background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #084298;\n background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #084298;\n border-color: #084298;\n}\n\n.list-group-item-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #41464b;\n background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #41464b;\n border-color: #41464b;\n}\n\n.list-group-item-success {\n color: #0f5132;\n background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #0f5132;\n background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #0f5132;\n border-color: #0f5132;\n}\n\n.list-group-item-info {\n color: #055160;\n background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #055160;\n background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #055160;\n border-color: #055160;\n}\n\n.list-group-item-warning {\n color: #664d03;\n background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #664d03;\n background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #664d03;\n border-color: #664d03;\n}\n\n.list-group-item-danger {\n color: #842029;\n background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #842029;\n background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #842029;\n border-color: #842029;\n}\n\n.list-group-item-light {\n color: #636464;\n background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #636464;\n background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #636464;\n border-color: #636464;\n}\n\n.list-group-item-dark {\n color: #141619;\n background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #141619;\n background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #141619;\n border-color: #141619;\n}\n\n.btn-close {\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: #000;\n background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: 0.5;\n}\n.btn-close:hover {\n color: #000;\n text-decoration: none;\n opacity: 0.75;\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n user-select: none;\n opacity: 0.25;\n}\n\n.btn-close-white {\n filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-border-width: 1px;\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: 0.375rem;\n --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-toast-header-color: #6c757d;\n --bs-toast-header-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: #fff;\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: 1px;\n --bs-modal-border-radius: 0.5rem;\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-modal-inner-border-radius: calc(0.5rem - 1px);\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: 1px;\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: 1px;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n.modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n.modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n.modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n.modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n.modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n.modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: #fff;\n --bs-tooltip-bg: #000;\n --bs-tooltip-border-radius: 0.375rem;\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: #fff;\n --bs-popover-border-width: 1px;\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: 0.5rem;\n --bs-popover-inner-border-radius: calc(0.5rem - 1px);\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: #f0f0f0;\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: #212529;\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n.carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n.spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: ;\n --bs-offcanvas-bg: #fff;\n --bs-offcanvas-border-width: 1px;\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */\n","@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: var(--#{$prefix}table-color);\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: ($table-border-width * 2) solid $table-group-separator-color;\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-active-bg);\n color: var(--#{$prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-hover-bg);\n color: var(--#{$prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: escape-svg($form-select-indicator);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: $form-check-input-bg;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-checked-bg-image);\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-radio-checked-bg-image);\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-indeterminate-bg-image);\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: escape-svg($form-switch-bg-image);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n background-image: escape-svg($form-switch-focus-bg-image);\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n background-image: escape-svg($form-switch-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-switch-checked-bg-image);\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: -$input-border-width;\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n padding-right: $form-select-feedback-icon-padding-end;\n background-image: escape-svg($form-select-indicator), escape-svg($icon);\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$body-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: none;\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($primary), $primary, 15%))};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n clear: both;\n font-weight: $font-weight-normal;\n color: var(--#{$prefix}dropdown-link-color);\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}dropdown-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n }\n\n &.active,\n &:active {\n color: var(--#{$prefix}dropdown-link-active-color);\n text-decoration: none;\n @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: var(--#{$prefix}dropdown-header-color);\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n // scss-docs-start dropdown-dark-css-vars\n --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n // scss-docs-end dropdown-dark-css-vars\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-end {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-start {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == end {\n @include caret-end();\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-start();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n background: none;\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n background: none;\n border: 0;\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .show > .nav-link,\n .nav-link.active {\n color: var(--#{$prefix}navbar-active-color);\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n line-height: 1;\n color: var(--#{$prefix}navbar-color);\n background-color: transparent; // remove default button style\n border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas {\n // stylelint-disable declaration-no-important\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n @include box-shadow(none);\n @include transition(none);\n // stylelint-enable declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n @include deprecate(\"`.navbar-light`\", \"v5.2.0\", \"v6.0.0\", true);\n}\n\n.navbar-dark {\n // scss-docs-start navbar-dark-css-vars\n --#{$prefix}navbar-color: #{$navbar-dark-color};\n --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n // scss-docs-end navbar-dark-css-vars\n}\n","//\n// Base styles\n//\n\n.card {\n // scss-docs-start card-css-vars\n --#{$prefix}card-spacer-y: #{$card-spacer-y};\n --#{$prefix}card-spacer-x: #{$card-spacer-x};\n --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n --#{$prefix}card-border-width: #{$card-border-width};\n --#{$prefix}card-border-color: #{$card-border-color};\n --#{$prefix}card-border-radius: #{$card-border-radius};\n --#{$prefix}card-box-shadow: #{$card-box-shadow};\n --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n --#{$prefix}card-cap-bg: #{$card-cap-bg};\n --#{$prefix}card-cap-color: #{$card-cap-color};\n --#{$prefix}card-height: #{$card-height};\n --#{$prefix}card-color: #{$card-color};\n --#{$prefix}card-bg: #{$card-bg};\n --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n --#{$prefix}card-group-margin: #{$card-group-margin};\n // scss-docs-end card-css-vars\n\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: var(--#{$prefix}card-height);\n word-wrap: break-word;\n background-color: var(--#{$prefix}card-bg);\n background-clip: border-box;\n border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n @include border-radius(var(--#{$prefix}card-border-radius));\n @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n margin-bottom: var(--#{$prefix}card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: var(--#{$prefix}card-spacer-x);\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:first-child {\n @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0);\n }\n}\n\n.card-footer {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:last-child {\n @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius));\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n border-bottom: 0;\n\n .nav-link.active {\n background-color: var(--#{$prefix}card-bg);\n border-bottom-color: var(--#{$prefix}card-bg);\n }\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--#{$prefix}card-img-overlay-padding);\n @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: var(--#{$prefix}card-group-margin);\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion {\n // scss-docs-start accordion-css-vars\n --#{$prefix}accordion-color: #{$accordion-color};\n --#{$prefix}accordion-bg: #{$accordion-bg};\n --#{$prefix}accordion-transition: #{$accordion-transition};\n --#{$prefix}accordion-border-color: #{$accordion-border-color};\n --#{$prefix}accordion-border-width: #{$accordion-border-width};\n --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};\n --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n @include font-size($font-size-base);\n color: var(--#{$prefix}accordion-btn-color);\n text-align: left; // Reset button style\n background-color: var(--#{$prefix}accordion-btn-bg);\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition(var(--#{$prefix}accordion-transition));\n\n &:not(.collapsed) {\n color: var(--#{$prefix}accordion-active-color);\n background-color: var(--#{$prefix}accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n &::after {\n background-image: var(--#{$prefix}accordion-btn-active-icon);\n transform: var(--#{$prefix}accordion-btn-icon-transform);\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: var(--#{$prefix}accordion-btn-icon-width);\n height: var(--#{$prefix}accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--#{$prefix}accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--#{$prefix}accordion-btn-icon-width);\n @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--#{$prefix}accordion-color);\n background-color: var(--#{$prefix}accordion-bg);\n border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n &:first-of-type {\n @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n }\n }\n}\n\n.accordion-body {\n padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n &,\n &.collapsed {\n @include border-radius(0);\n }\n }\n }\n}\n",".breadcrumb {\n // scss-docs-start breadcrumb-css-vars\n --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n // scss-docs-end breadcrumb-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n @include font-size(var(--#{$prefix}breadcrumb-font-size));\n list-style: none;\n background-color: var(--#{$prefix}breadcrumb-bg);\n @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n color: var(--#{$prefix}breadcrumb-divider-color);\n content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: var(--#{$prefix}breadcrumb-item-active-color);\n }\n}\n",".pagination {\n // scss-docs-start pagination-css-vars\n --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-color: #{$pagination-color};\n --#{$prefix}pagination-bg: #{$pagination-bg};\n --#{$prefix}pagination-border-width: #{$pagination-border-width};\n --#{$prefix}pagination-border-color: #{$pagination-border-color};\n --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n --#{$prefix}pagination-active-color: #{$pagination-active-color};\n --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n // scss-docs-end pagination-css-vars\n\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n @include font-size(var(--#{$prefix}pagination-font-size));\n color: var(--#{$prefix}pagination-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}pagination-bg);\n border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: var(--#{$prefix}pagination-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}pagination-hover-bg);\n border-color: var(--#{$prefix}pagination-hover-border-color);\n }\n\n &:focus {\n z-index: 3;\n color: var(--#{$prefix}pagination-focus-color);\n background-color: var(--#{$prefix}pagination-focus-bg);\n outline: $pagination-focus-outline;\n box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n }\n\n &.active,\n .active > & {\n z-index: 3;\n color: var(--#{$prefix}pagination-active-color);\n @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n border-color: var(--#{$prefix}pagination-active-border-color);\n }\n\n &.disabled,\n .disabled > & {\n color: var(--#{$prefix}pagination-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}pagination-disabled-bg);\n border-color: var(--#{$prefix}pagination-disabled-border-color);\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n @if $pagination-margin-start == ($pagination-border-width * -1) {\n &:first-child {\n .page-link {\n @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n } @else {\n // Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}pagination-padding-x: #{$padding-x};\n --#{$prefix}pagination-padding-y: #{$padding-y};\n @include rfs($font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $state, $value in $theme-colors {\n $alert-background: shift-color($value, $alert-bg-scale);\n $alert-border: shift-color($value, $alert-border-scale);\n $alert-color: shift-color($value, $alert-color-scale);\n\n @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {\n $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));\n }\n .alert-#{$state} {\n @include alert-variant($alert-background, $alert-border, $alert-color);\n }\n}\n// scss-docs-end alert-modifiers\n","// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n --#{$prefix}alert-color: #{$color};\n --#{$prefix}alert-bg: #{$background};\n --#{$prefix}alert-border-color: #{$border};\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n\n .alert-link {\n color: shade-color($color, 20%);\n }\n}\n// scss-docs-end alert-variant-mixin\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress {\n // scss-docs-start progress-css-vars\n --#{$prefix}progress-height: #{$progress-height};\n @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n --#{$prefix}progress-bg: #{$progress-bg};\n --#{$prefix}progress-border-radius: #{$progress-border-radius};\n --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n --#{$prefix}progress-bar-color: #{$progress-bar-color};\n --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n // scss-docs-end progress-css-vars\n\n display: flex;\n height: var(--#{$prefix}progress-height);\n overflow: hidden; // force rounded corners by cropping it\n @include font-size(var(--#{$prefix}progress-font-size));\n background-color: var(--#{$prefix}progress-bg);\n @include border-radius(var(--#{$prefix}progress-border-radius));\n @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--#{$prefix}progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--#{$prefix}progress-bar-bg);\n @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // scss-docs-start list-group-css-vars\n --#{$prefix}list-group-color: #{$list-group-color};\n --#{$prefix}list-group-bg: #{$list-group-bg};\n --#{$prefix}list-group-border-color: #{$list-group-border-color};\n --#{$prefix}list-group-border-width: #{$list-group-border-width};\n --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n --#{$prefix}list-group-action-color: #{$list-group-action-color};\n --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n --#{$prefix}list-group-active-color: #{$list-group-active-color};\n --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n // scss-docs-end list-group-css-vars\n\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > .list-group-item::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: var(--#{$prefix}list-group-action-color);\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--#{$prefix}list-group-action-hover-bg);\n }\n\n &:active {\n color: var(--#{$prefix}list-group-action-active-color);\n background-color: var(--#{$prefix}list-group-action-active-bg);\n }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n color: var(--#{$prefix}list-group-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}list-group-bg);\n border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}list-group-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}list-group-disabled-bg);\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-active-color);\n background-color: var(--#{$prefix}list-group-active-bg);\n border-color: var(--#{$prefix}list-group-active-border-color);\n }\n\n // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n & + .list-group-item {\n border-top-width: 0;\n\n &.active {\n margin-top: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-top-width: var(--#{$prefix}list-group-border-width);\n }\n }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child:not(:last-child) {\n @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n @include border-top-end-radius(0);\n }\n\n &:last-child:not(:first-child) {\n @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: var(--#{$prefix}list-group-border-width);\n border-left-width: 0;\n\n &.active {\n margin-left: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-left-width: var(--#{$prefix}list-group-border-width);\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state, $value in $theme-colors {\n $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);\n $list-group-variant-color: shift-color($value, $list-group-item-color-scale);\n @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {\n $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));\n }\n\n @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);\n}\n// scss-docs-end list-group-modifiers\n","// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n color: $color;\n background-color: shade-color($background, 10%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n// scss-docs-end list-group-mixin\n","// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: $btn-close-color;\n background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: $btn-close-opacity;\n\n // Override <a>'s hover style\n &:hover {\n color: $btn-close-color;\n text-decoration: none;\n opacity: $btn-close-hover-opacity;\n }\n\n &:focus {\n outline: 0;\n box-shadow: $btn-close-focus-shadow;\n opacity: $btn-close-focus-opacity;\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: $btn-close-disabled-opacity;\n }\n}\n\n.btn-close-white {\n filter: $btn-close-white-filter;\n}\n",".toast {\n // scss-docs-start toast-css-vars\n --#{$prefix}toast-zindex: #{$zindex-toast};\n --#{$prefix}toast-padding-x: #{$toast-padding-x};\n --#{$prefix}toast-padding-y: #{$toast-padding-y};\n --#{$prefix}toast-spacing: #{$toast-spacing};\n --#{$prefix}toast-max-width: #{$toast-max-width};\n @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n --#{$prefix}toast-color: #{$toast-color};\n --#{$prefix}toast-bg: #{$toast-background-color};\n --#{$prefix}toast-border-width: #{$toast-border-width};\n --#{$prefix}toast-border-color: #{$toast-border-color};\n --#{$prefix}toast-border-radius: #{$toast-border-radius};\n --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n --#{$prefix}toast-header-color: #{$toast-header-color};\n --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n // scss-docs-end toast-css-vars\n\n width: var(--#{$prefix}toast-max-width);\n max-width: 100%;\n @include font-size(var(--#{$prefix}toast-font-size));\n color: var(--#{$prefix}toast-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}toast-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n box-shadow: var(--#{$prefix}toast-box-shadow);\n @include border-radius(var(--#{$prefix}toast-border-radius));\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n --#{$prefix}toast-zindex: #{$zindex-toast};\n\n position: absolute;\n z-index: var(--#{$prefix}toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: var(--#{$prefix}toast-spacing);\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n color: var(--#{$prefix}toast-header-color);\n background-color: var(--#{$prefix}toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);\n @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));\n\n .btn-close {\n margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: var(--#{$prefix}toast-padding-x);\n }\n}\n\n.toast-body {\n padding: var(--#{$prefix}toast-padding-x);\n word-wrap: break-word;\n}\n","// stylelint-disable function-disallowed-list\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n // scss-docs-start modal-css-vars\n --#{$prefix}modal-zindex: #{$zindex-modal};\n --#{$prefix}modal-width: #{$modal-md};\n --#{$prefix}modal-padding: #{$modal-inner-padding};\n --#{$prefix}modal-margin: #{$modal-dialog-margin};\n --#{$prefix}modal-color: #{$modal-content-color};\n --#{$prefix}modal-bg: #{$modal-content-bg};\n --#{$prefix}modal-border-color: #{$modal-content-border-color};\n --#{$prefix}modal-border-width: #{$modal-content-border-width};\n --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n // scss-docs-end modal-css-vars\n\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--#{$prefix}modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--#{$prefix}modal-margin);\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: var(--#{$prefix}modal-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}modal-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n @include border-radius(var(--#{$prefix}modal-border-radius));\n @include box-shadow(var(--#{$prefix}modal-box-shadow));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n // scss-docs-start modal-backdrop-css-vars\n --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n // scss-docs-end modal-backdrop-css-vars\n\n @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: var(--#{$prefix}modal-header-padding);\n border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);\n @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n .btn-close {\n padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);\n margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * .5);\n background-color: var(--#{$prefix}modal-footer-bg);\n border-top: var(--#{$prefix}modal-footer-border-width) solid var(--#{$prefix}modal-footer-border-color);\n @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: calc(var(--#{$prefix}modal-footer-gap) * .5); // Todo in v6: replace with gap on parent class\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n .modal {\n --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n }\n\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: var(--#{$prefix}modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n\n .modal-sm {\n --#{$prefix}modal-width: #{$modal-sm};\n }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-lg};\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-xl};\n }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header,\n .modal-footer {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n // scss-docs-start tooltip-css-vars\n --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n --#{$prefix}tooltip-margin: #{$tooltip-margin};\n @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n --#{$prefix}tooltip-color: #{$tooltip-color};\n --#{$prefix}tooltip-bg: #{$tooltip-bg};\n --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n // scss-docs-end tooltip-css-vars\n\n z-index: var(--#{$prefix}tooltip-zindex);\n display: block;\n padding: var(--#{$prefix}tooltip-arrow-height);\n margin: var(--#{$prefix}tooltip-margin);\n @include deprecate(\"`$tooltip-margin`\", \"v5\", \"v5.x\", true);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}tooltip-font-size));\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: var(--#{$prefix}tooltip-opacity); }\n\n .tooltip-arrow {\n display: block;\n width: var(--#{$prefix}tooltip-arrow-width);\n height: var(--#{$prefix}tooltip-arrow-height);\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-top-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n left: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n right: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-right-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-bottom-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n right: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n left: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-left-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: var(--#{$prefix}tooltip-max-width);\n padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n color: var(--#{$prefix}tooltip-color);\n text-align: center;\n background-color: var(--#{$prefix}tooltip-bg);\n @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n}\n",".popover {\n // scss-docs-start popover-css-vars\n --#{$prefix}popover-zindex: #{$zindex-popover};\n --#{$prefix}popover-max-width: #{$popover-max-width};\n @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n --#{$prefix}popover-bg: #{$popover-bg};\n --#{$prefix}popover-border-width: #{$popover-border-width};\n --#{$prefix}popover-border-color: #{$popover-border-color};\n --#{$prefix}popover-border-radius: #{$popover-border-radius};\n --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n --#{$prefix}popover-header-color: #{$popover-header-color};\n --#{$prefix}popover-header-bg: #{$popover-header-bg};\n --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n --#{$prefix}popover-body-color: #{$popover-body-color};\n --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n // scss-docs-end popover-css-vars\n\n z-index: var(--#{$prefix}popover-zindex);\n display: block;\n max-width: var(--#{$prefix}popover-max-width);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}popover-font-size));\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: var(--#{$prefix}popover-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-radius(var(--#{$prefix}popover-border-radius));\n @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n .popover-arrow {\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n height: var(--#{$prefix}popover-arrow-height);\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n bottom: 0;\n border-top-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n bottom: var(--#{$prefix}popover-border-width);\n border-top-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n > .popover-arrow {\n left: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n left: 0;\n border-right-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n left: var(--#{$prefix}popover-border-width);\n border-right-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n top: 0;\n border-bottom-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n top: var(--#{$prefix}popover-border-width);\n border-bottom-color: var(--#{$prefix}popover-bg);\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n margin-left: calc(-.5 * var(--#{$prefix}popover-arrow-width)); // stylelint-disable-line function-disallowed-list\n content: \"\";\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start {\n > .popover-arrow {\n right: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n right: 0;\n border-left-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n right: var(--#{$prefix}popover-border-width);\n border-left-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size(var(--#{$prefix}popover-header-font-size));\n color: var(--#{$prefix}popover-header-color);\n background-color: var(--#{$prefix}popover-header-bg);\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n color: var(--#{$prefix}popover-body-color);\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n.carousel-dark {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--#{$prefix}spinner-width);\n height: var(--#{$prefix}spinner-height);\n vertical-align: var(--#{$prefix}spinner-vertical-align);\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n // scss-docs-start spinner-border-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-border-width: #{$spinner-border-width};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-border;\n // scss-docs-end spinner-border-css-vars\n\n border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n // scss-docs-start spinner-border-sm-css-vars\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n // scss-docs-start spinner-grow-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-grow;\n // scss-docs-end spinner-grow-css-vars\n\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n }\n }\n}\n","// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n // scss-docs-start offcanvas-css-vars\n --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n --#{$prefix}offcanvas-color: #{$offcanvas-color};\n --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @extend %offcanvas-css-vars;\n }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @include media-breakpoint-down($next) {\n position: fixed;\n bottom: 0;\n z-index: var(--#{$prefix}offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--#{$prefix}offcanvas-color);\n visibility: hidden;\n background-color: var(--#{$prefix}offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n @include transition(transform $offcanvas-transition-duration ease-in-out);\n\n &.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(-100%);\n }\n\n &.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(100%);\n }\n\n &.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(-100%);\n }\n\n &.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(100%);\n }\n\n &.showing,\n &.show:not(.hiding) {\n transform: none;\n }\n\n &.showing,\n &.hiding,\n &.show {\n visibility: visible;\n }\n }\n\n @if not ($infix == \"\") {\n @include media-breakpoint-up($next) {\n --#{$prefix}offcanvas-height: auto;\n --#{$prefix}offcanvas-border-width: 0;\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n }\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n .btn-close {\n padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: $offcanvas-title-line-height;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n overflow-y: auto;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value !important; // stylelint-disable-line declaration-no-important\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["bootstrap.css","../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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AQ9jBE;ELsQM,iCAAA;EKlQJ,gBFimBkB;EEhmBlB,gBFglB0B;ANjB9B;AGheI;EKpGF;IL6QM,eAAA;EH2TN;AACF;;AQzkBE;ELsQM,iCAAA;EKlQJ,gBFimBkB;EEhmBlB,gBFglB0B;ANN9B;AG3eI;EKpGF;IL6QM,iBAAA;EHsUN;AACF;;AQplBE;ELsQM,iCAAA;EKlQJ,gBFimBkB;EEhmBlB,gBFglB0B;ANK9B;AGtfI;EKpGF;IL6QM,eAAA;EHiVN;AACF;;AQ/lBE;ELsQM,iCAAA;EKlQJ,gBFimBkB;EEhmBlB,gBFglB0B;ANgB9B;AGjgBI;EKpGF;IL6QM,iBAAA;EH4VN;AACF;;AQllBA;ECvDE,gBAAA;EACA,gBAAA;AT6oBF;;AQllBA;EC5DE,gBAAA;EACA,gBAAA;ATkpBF;;AQplBA;EACE,qBAAA;ARulBF;AQrlBE;EACE,mBFwmB0B;ANjB9B;;AQ7kBA;ELoNM,kBALI;EK7MR,yBAAA;ARglBF;;AQ5kBA;EACE,mBF2TO;EH9GH,kBALI;AHwYV;AQ7kBE;EACE,gBAAA;AR+kBJ;;AQ3kBA;EACE,iBAAA;EACA,mBFiTO;EH9GH,kBALI;EK5LR,cFtFS;ANoqBX;AQ5kBE;EACE,aAAA;AR8kBJ;;AU9qBA;ECIE,eAAA;EAGA,YAAA;AX4qBF;;AU7qBA;EACE,gBJihDkC;EIhhDlC,mCJihDkC;EIhhDlC,2DAAA;EHGE,sCAAA;EIRF,eAAA;EAGA,YAAA;AXqrBF;;AUvqBA;EAEE,qBAAA;AVyqBF;;AUtqBA;EACE,qBAAA;EACA,cAAA;AVyqBF;;AUtqBA;EP+PM,kBALI;EOxPR,gCJogDkC;AN31BpC;;AY3sBE;;;;;;;ECHA,qBAAA;EACA,gBAAA;EACA,WAAA;EACA,4CAAA;EACA,6CAAA;EACA,iBAAA;EACA,kBAAA;AbwtBF;;AclqBI;EF5CE;IACE,gBNqde;EN6PrB;AACF;AcxqBI;EF5CE;IACE,gBNqde;ENkQrB;AACF;Ac7qBI;EF5CE;IACE,gBNqde;ENuQrB;AACF;AclrBI;EF5CE;IACE,iBNqde;EN4QrB;AACF;AcvrBI;EF5CE;IACE,iBNqde;ENiRrB;A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AA;IACA,iCAAA;EjB41DJ;AACF;Acj7DI;EGkFA;IACE,gBAAA;IACA,iCAAA;EjBk2DJ;AACF;Acv7DI;EGkFA;IACE,gBAAA;IACA,iCAAA;EjBw2DJ;AACF;AmBrgEA;EACE,qBbs0BsC;ANisCxC;;AmB9/DA;EACE,oDAAA;EACA,uDAAA;EACA,gBAAA;EhBoRI,kBALI;EgB3QR,gBbukB4B;ANw7C9B;;AmB3/DA;EACE,kDAAA;EACA,qDAAA;EhB0QI,kBALI;AH0vDV;;AmB3/DA;EACE,mDAAA;EACA,sDAAA;EhBoQI,mBALI;AHgwDV;;AoB5hEA;EACE,mBd8zBsC;EH9hBlC,kBALI;EiBvRR,gCd2oB4B;ANk5C9B;;AqBliEA;EACE,cAAA;EACA,WAAA;EACA,yBAAA;ElB8RI,eALI;EkBtRR,gBf0kB4B;EezkB5B,gBfilB4B;EehlB5B,2Bf21BsC;Ee11BtC,2Cfq1BsC;Eep1BtC,4BAAA;EACA,2DAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EdGE,uBAAA;EeHE,wEDMJ;ArBgiEF;AsBliEM;EDhBN;ICiBQ,gBAAA;EtBqiEN;AACF;AqBniEE;EACE,gBAAA;ArBqiEJ;AqBniEI;EACE,eAAA;ArBqiEN;AqBhiEE;EACE,2Bfq0BoC;Eep0BpC,2Cf+zBoC;Ee9zBpC,qBf60BoC;Ee50BpC,UAAA;EAKE,kDfqtB0B;ANy0ChC;AqBvhEE;EAEE,aAAA;ArBwhEJ;AqBnhEE;EACE,cAAA;EACA,UAAA;ArBqhEJ;AqBjhEE;EACE,gCfuzBoC;EerzBpC,UAAA;ArBkhEJ;AqBrhEE;EACE,gCfuzBoC;EerzBpC,UAAA;ArBkhEJ;AqB1gEE;EAEE,oDfyxBoC;EetxBpC,UAAA;ArBygEJ;AqBrgEE;EACE,yBAAA;EACA,0BAAA;EACA,2BfiqB0B;EejqB1B,0BfiqB0B;EehqB1B,2BfixBoC;EiBn2BtC,uCjBogCgC;Eeh7B9B,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,+Cf6qB0B;Ee5qB1B,gBAAA;EC7EE,6ID8EF;EC9EE,qID8EF;ArBugEJ;AqBnhEE;EACE,yBAAA;EACA,0BAAA;EACA,2BfiqB0B;EejqB1B,0BfiqB0B;EehqB1B,2BfixBoC;EiBn2BtC,uCjBogCgC;Eeh7B9B,oBAAA;EACA,qBAAA;EACA,mBAAA;EACA,eAAA;EACA,+Cf6qB0B;Ee5qB1B,gBAAA;EC7EE,qID8EF;ArBugEJ;AsBjlEM;ED8DJ;IC7DM,wBAAA;IAAA,gBAAA;EtBolEN;EqBvhEA;IC7DM,gBAAA;EtBolEN;AACF;AqBzgEE;EACE,wCfu6B8B;ANomClC;AqB5gEE;EACE,wCfu6B8B;ANomClC;;AqBlgEA;EACE,cAAA;EACA,WAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBf4e4B;Ee3e5B,2BfswBsC;EerwBtC,6BAAA;EACA,yBAAA;EACA,sCAAA;ArBqgEF;AqBngEE;EACE,UAAA;ArBqgEJ;AqBlgEE;EAEE,eAAA;EACA,gBAAA;ArBmgEJ;;AqBx/DA;EACE,mEfuvBsC;EetvBtC,uBAAA;ElB2JI,mBALI;EI7QN,sBAAA;APonEJ;AqBz/DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfinB0B;EejnB1B,yBfinB0B;AN04C9B;AqB9/DE;EACE,uBAAA;EACA,wBAAA;EACA,0BfinB0B;EejnB1B,yBfinB0B;AN04C9B;;AqBv/DA;EACE,iEf2uBsC;Ee1uBtC,oBAAA;ElB8II,kBALI;EI7QN,qBAAA;APgoEJ;AqBx/DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfwmB0B;EexmB1B,uBfwmB0B;ANk5C9B;AqB7/DE;EACE,oBAAA;EACA,qBAAA;EACA,wBfwmB0B;EexmB1B,uBfwmB0B;ANk5C9B;;AqBl/DE;EACE,oEfwtBoC;AN6xCxC;AqBl/DE;EACE,mEfqtBoC;AN+xCxC;AqBj/DE;EACE,iEfktBoC;ANiyCxC;;AqB9+DA;EACE,WfgtBsC;Ee/sBtC,gEfysBsC;EexsBtC,iBf8jB4B;ANm7C9B;AqB/+DE;EACE,eAAA;ArBi/DJ;AqB9+DE;EACE,oBAAA;Ed3KA,uBAAA;AP4pEJ;AqB7+DE;Ed/KE,uBAAA;AP+pEJ;AqB5+DE;EAAoB,+Df0rBkB;ANqzCxC;AqB9+DE;EAAoB,6Df0rBkB;ANuzCxC;;AwBnrEA;EACE,wPAAA;EAEA,cAAA;EACA,WAAA;EACA,0CAAA;EACA,uCAAA;ErB0RI,eALI;EqBlRR,gBlBskB4B;EkBrkB5B,gBlB6kB4B;EkB5kB5B,2BlBu1BsC;EkBt1BtC,2ClBi1BsC;EkBh1BtC,mFAAA;EACA,4BAAA;EACA,wClB87BkC;EkB77BlC,0BlB87BkC;EkB77BlC,2DAAA;EjBHE,uBAAA;EeHE,wEESJ;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;AxBmrEF;AsBzrEM;EEfN;IFgBQ,gBAAA;EtB4rEN;AACF;AwBtrEE;EACE,qBlBo1BoC;EkBn1BpC,UAAA;EAKE,kDlB+7B4B;ANqvClC;AwBhrEE;EAEE,qBlB6sB0B;EkB5sB1B,sBAAA;AxBirEJ;AwB9qEE;EAEE,oDlBqzBoC;AN03CxC;AwB1qEE;EACE,kBAAA;EACA,uCAAA;AxB4qEJ;;AwBxqEA;EACE,oBlBssB4B;EkBrsB5B,uBlBqsB4B;EkBpsB5B,qBlBqsB4B;EH7dxB,mBALI;EI7QN,sBAAA;APutEJ;;AwBxqEA;EACE,mBlBksB4B;EkBjsB5B,sBlBisB4B;EkBhsB5B,mBlBisB4B;EHjexB,kBALI;EI7QN,qBAAA;AP+tEJ;;AwBtqEI;EACE,wPAAA;AxByqEN;;AyBlvEA;EACE,cAAA;EACA,kBnBo4BwC;EmBn4BxC,oBnBo4BwC;EmBn4BxC,uBnBo4BwC;ANi3C1C;AyBnvEE;EACE,YAAA;EACA,oBAAA;AzBqvEJ;;AyBjvEA;EACE,mBnB03BwC;EmBz3BxC,gBAAA;EACA,gBAAA;AzBovEF;AyBlvEE;EACE,WAAA;EACA,mBAAA;EACA,eAAA;AzBovEJ;;AyBhvEA;EACE,6CAAA;EAEA,UnB02BwC;EmBz2BxC,WnBy2BwC;EmBx2BxC,kBAAA;EACA,mBAAA;EACA,yCAAA;EACA,+CAAA;EACA,4BAAA;EACA,2BAAA;EACA,wBAAA;EACA,2DnB42BwC;EmB32BxC,wBAAA;EAAA,qBAAA;EAAA,gBAAA;EACA,iCAAA;EAAA,mBAAA;EAAA,yBAAA;AzBkvEF;AyB/uEE;ElB1BE,qBAAA;AP4wEJ;AyB9uEE;EAEE,kBnBm2BsC;AN44C1C;AyB5uEE;EACE,uBnB01BsC;ANo5C1C;AyB3uEE;EACE,qBnBszBoC;EmBrzBpC,UAAA;EACA,kDnBksB4B;AN2iDhC;AyB1uEE;EACE,yBnB3BM;EmB4BN,qBnB5BM;ANwwEV;AyB1uEI;EAII,uPAAA;AzByuER;AyBruEI;EAII,+JAAA;AzBouER;AyB/tEE;EACE,yBnBhDM;EmBiDN,qBnBjDM;EmBsDJ,iPAAA;AzB6tEN;AyBztEE;EACE,oBAAA;EACA,YAAA;EACA,YnBk0BuC;ANy5C3C;AyBptEI;EACE,eAAA;EACA,YnByzBqC;AN65C3C;;AyBxsEA;EACE,oBnBozBgC;ANu5ClC;AyBzsEE;EACE,2KAAA;EAEA,UnB8yB8B;EmB7yB9B,oBAAA;EACA,0CAAA;EACA,iCAAA;ElBhHA,kBAAA;EeHE,iDGqHF;AzB0sEJ;AsB3zEM;EGyGJ;IHxGM,gBAAA;EtB8zEN;AACF;AyB7sEI;EACE,6JAAA;AzB+sEN;AyB5sEI;EACE,gCnB6yB4B;EmBxyB1B,0JAAA;AzB0sER;AyBrsEE;EACE,mBnBwxB8B;EmBvxB9B,gBAAA;AzBusEJ;AyBrsEI;EACE,mBAAA;EACA,eAAA;AzBusEN;;AyBlsEA;EACE,qBAAA;EACA,iBnBswBgC;AN+7ClC;;AyBlsEA;EACE,kBAAA;EACA,sBAAA;EACA,oBAAA;AzBqsEF;AyBjsEI;EACE,oBAAA;EACA,YAAA;EACA,anBunBwB;AN4kD9B;;AyB5rEI;EACE,iLAAA;AzB+rEN;;A0Bj3EA;EACE,WAAA;EACA,cAAA;EACA,UAAA;EACA,6BAAA;EACA,wBAAA;EAAA,qBAAA;EAAA,gBAAA;A1Bo3EF;A0Bl3EE;EACE,UAAA;A1Bo3EJ;A0Bh3EI;EAA0B,kEpB6+Ba;ANs4C3C;A0Bl3EI;EAA0B,kEpB4+Ba;ANy4C3C;A0Bl3EE;EACE,SAAA;A1Bo3EJ;A0Bj3EE;EACE,WpB89BuC;EoB79BvC,YpB69BuC;EoB59BvC,oBAAA;EHzBF,yBjBkCQ;EoBPN,SpB69BuC;ECz+BvC,mBAAA;EeHE,oHIkBF;EJlBE,4GIkBF;EACA,wBAAA;EAAA,gBAAA;A1Bk3EJ;AsBj4EM;EIMJ;IJLM,wBAAA;IAAA,gBAAA;EtBo4EN;AACF;A0Br3EI;EHjCF,yBjB6/ByC;AN45C3C;A0Bn3EE;EACE,WpBu8B8B;EoBt8B9B,cpBu8B8B;EoBt8B9B,kBAAA;EACA,epBs8B8B;EoBr8B9B,uCpBs8B8B;EoBr8B9B,yBAAA;EnB7BA,mBAAA;APm5EJ;A0Bj3EE;EACE,WpBm8BuC;EoBl8BvC,YpBk8BuC;EiBr/BzC,yBjBkCQ;EoBmBN,SpBm8BuC;ECz+BvC,mBAAA;EeHE,iHI4CF;EJ5CE,4GI4CF;EACA,qBAAA;EAAA,gBAAA;A1Bk3EJ;AsB35EM;EIiCJ;IJhCM,qBAAA;IAAA,gBAAA;EtB85EN;AACF;A0Br3EI;EH3DF,yBjB6/ByC;ANs7C3C;A0Bn3EE;EACE,WpB66B8B;EoB56B9B,cpB66B8B;EoB56B9B,kBAAA;EACA,epB46B8B;EoB36B9B,uCpB46B8B;EoB36B9B,yBAAA;EnBvDA,mBAAA;AP66EJ;A0Bj3EE;EACE,oBAAA;A1Bm3EJ;A0Bj3EI;EACE,2CpB+6BqC;ANo8C3C;A0Bh3EI;EACE,2CpB26BqC;ANu8C3C;;A2Bz8EA;EACE,kBAAA;A3B48EF;A2B18EE;EACE,kBAAA;EACA,2BrBowB0B;EqBnwB1B,6BrBmwB0B;EqBlwB1B,+EAAA;EACA,erB2gCoC;EqB1gCpC,WAAA;EACA,2CrBw1BoC;EC/0BpC,uBAAA;APo8EJ;A2Bz8EE;;;EAGE,uDrB4/BoC;EqB3/BpC,iBrB4/BoC;AN+8CxC;A2Bx8EE;EACE,kBAAA;EACA,MAAA;EACA,QAAA;EACA,WAAA;EACA,YAAA;EACA,qBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;EACA,gDAAA;EACA,wBAAA;ELlBE,gEKmBF;A3B08EJ;AsBz9EM;EKCJ;ILAM,gBAAA;EtB49EN;AACF;A2B58EE;;EAEE,qBAAA;A3B88EJ;A2B58EI;EACE,kBAAA;A3B+8EN;A2Bh9EI;;EACE,kBAAA;A3B+8EN;A2B58EI;EAEE,qBrBi+BkC;EqBh+BlC,wBrBi+BkC;AN8+CxC;A2Bl9EI;;;EAEE,qBrBi+BkC;EqBh+BlC,wBrBi+BkC;AN8+CxC;A2B58EI;;EACE,qBrB49BkC;EqB39BlC,wBrB49BkC;ANm/CxC;A2B38EE;EACE,qBrBs9BoC;EqBr9BpC,wBrBs9BoC;ANu/CxC;A2Bt8EI;EACE,arBg9BkC;EqB/8BlC,+DrBg9BkC;AN2/CxC;A2B78EI;;;;EACE,arBg9BkC;EqB/8BlC,+DrBg9BkC;AN2/CxC;A2Bt8EI;EACE,arBy8BkC;EqBx8BlC,+DrBy8BkC;AN+/CxC;A2Bn8EI;EACE,sCAAA;A3Bq8EN;A2Bj8EE;EACE,crBzEO;AN4gFX;;A4BthFA;EACE,kBAAA;EACA,aAAA;EACA,eAAA;EACA,oBAAA;EACA,WAAA;A5ByhFF;A4BvhFE;;;EAGE,kBAAA;EACA,cAAA;EACA,SAAA;EACA,YAAA;A5ByhFJ;A4BrhFE;;;EAGE,UAAA;A5BuhFJ;A4BjhFE;EACE,kBAAA;EACA,UAAA;A5BmhFJ;A4BjhFI;EACE,UAAA;A5BmhFN;;A4BxgFA;EACE,aAAA;EACA,mBAAA;EACA,yBAAA;EzBoPI,eALI;EyB7OR,gBtBiiB4B;EsBhiB5B,gBtBwiB4B;EsBviB5B,2BtBkzBsC;EsBjzBtC,kBAAA;EACA,mBAAA;EACA,uCtBy4BsC;EsBx4BtC,2DAAA;ErBtCE,uBAAA;APkjFJ;;A4BlgFA;;;;EAIE,oBAAA;EzB8NI,kBALI;EI7QN,qBAAA;AP2jFJ;;A4BlgFA;;;;EAIE,uBAAA;EzBqNI,mBALI;EI7QN,sBAAA;APokFJ;;A4BlgFA;;EAEE,kBAAA;A5BqgFF;;A4Bx/EI;;;;ErBjEA,yBAAA;EACA,4BAAA;APgkFJ;A4Bv/EI;;;;ErB1EA,yBAAA;EACA,4BAAA;APukFJ;A4Bj/EE;EACE,+CAAA;ErB1EA,0BAAA;EACA,6BAAA;AP8jFJ;A4Bj/EE;;ErB9EE,0BAAA;EACA,6BAAA;APmkFJ;;A6B3lFE;EACE,aAAA;EACA,WAAA;EACA,mBvBsyBoC;EH9hBlC,kBALI;E0BhQN,6BvB0gCqB;ANmlDzB;;A6B1lFE;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,uBAAA;EACA,kBAAA;E1B2PE,mBALI;E0BnPN,WvB6/BqB;EuB5/BrB,mCvB4/BqB;ECvhCrB,sCAAA;APwnFJ;;A6BxlFI;;;;EAEE,cAAA;A7B6lFN;;A6B5oFI;EAqDE,+BvB++BmB;EuB5+BjB,mCvB6zBgC;EuB5zBhC,2PAAA;EACA,4BAAA;EACA,0DAAA;EACA,gEAAA;A7BylFR;A6BtlFM;EACE,+BvBo+BiB;EuBn+BjB,2DvBm+BiB;ANqnDzB;;A6BzpFI;EA0EI,mCvB2yBgC;EuB1yBhC,iFAAA;A7BmlFR;;A6B9pFI;EAkFE,+BvBk9BmB;AN8nDzB;A6B7kFQ;EAEE,mQAAA;EACA,sBvBy3B8B;EuBx3B9B,6DAAA;EACA,2EAAA;A7B8kFV;A6B1kFM;EACE,+BvBq8BiB;EuBp8BjB,2DvBo8BiB;ANwoDzB;;A6B5qFI;EAwGI,yCAAA;A7BwkFR;;A6BhrFI;EA+GE,+BvBq7BmB;ANgpDzB;A6BnkFM;EACE,wCvBk7BiB;ANmpDzB;A6BlkFM;EACE,2DvB86BiB;ANspDzB;A6BjkFM;EACE,6BvB06BiB;ANypDzB;;A6B9jFI;EACE,mBAAA;A7BikFN;;A6BjsFI;;;;;EA0IM,UAAA;A7B+jFV;;A6BrrFE;EACE,aAAA;EACA,WAAA;EACA,mBvBsyBoC;EH9hBlC,kBALI;E0BhQN,4BvB0gCqB;AN6qDzB;;A6BprFE;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;EACA,uBAAA;EACA,kBAAA;E1B2PE,mBALI;E0BnPN,WvB6/BqB;EuB5/BrB,kCvB4/BqB;ECvhCrB,sCAAA;APktFJ;;A6BlrFI;;;;EAEE,cAAA;A7BurFN;;A6BtuFI;EAqDE,8BvB++BmB;EuB5+BjB,mCvB6zBgC;EuB5zBhC,4UAAA;EACA,4BAAA;EACA,0DAAA;EACA,gEAAA;A7BmrFR;A6BhrFM;EACE,8BvBo+BiB;EuBn+BjB,0DvBm+BiB;AN+sDzB;;A6BnvFI;EA0EI,mCvB2yBgC;EuB1yBhC,iFAAA;A7B6qFR;;A6BxvFI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m7NZ;;AsE17NQ;EAOI,8BAAA;AtEu7NZ;;AsE97NQ;EAOI,6BAAA;AtE27NZ;;AsEl8NQ;EAOI,0BAAA;AtE+7NZ;;AsEt8NQ;EAOI,gCAAA;AtEm8NZ;;AsE18NQ;EAOI,yBAAA;AtEu8NZ;;AsE98NQ;EAOI,wBAAA;AtE28NZ;;AsEl9NQ;EAOI,yBAAA;AtE+8NZ;;AsEt9NQ;EAOI,6BAAA;AtEm9NZ;;AsE19NQ;EAOI,8BAAA;AtEu9NZ;;AsE99NQ;EAOI,wBAAA;AtE29NZ;;AsEl+NQ;EAOI,+BAAA;AtE+9NZ;;AsEt+NQ;EAOI,wBAAA;AtEm+NZ;;AsE1+NQ;EAOI,yEAAA;AtEu+NZ;;AsE9+NQ;EAOI,+EAAA;AtE2+NZ;;AsEl/NQ;EAOI,wEAAA;AtE++NZ;;AsEt/NQ;EAOI,2BAAA;AtEm/NZ;;AsE1/NQ;EAOI,2BAAA;AtEu/NZ;;AsE9/NQ;EAOI,6BAAA;AtE2/NZ;;AsElgOQ;EAOI,6BAAA;AtE+/NZ;;AsEtgOQ;EAOI,0BAAA;AtEmgOZ;;AsE1gOQ;EAOI,mCAAA;EAAA,2BAAA;AtEugOZ;;AsE9gOQ;EAOI,iBAAA;AtE2gOZ;;AsElhOQ;EAOI,mBAAA;AtE+gOZ;;AsEthOQ;EAOI,oBAAA;AtEmhOZ;;AsE1hOQ;EAOI,oBAAA;AtEuhOZ;;AsE9hOQ;EAOI,sBAAA;AtE2hOZ;;AsEliOQ;EAOI,uBAAA;AtE+hOZ;;AsEtiOQ;EAOI,mBAAA;AtEmiOZ;;AsE1iOQ;EAOI,qBAAA;AtEuiOZ;;AsE9iOQ;EAOI,sBAAA;AtE2iOZ;;AsEljOQ;EAOI,kBAAA;AtE+iOZ;;AsEtjOQ;EAOI,oBAAA;AtEmjOZ;;AsE1jOQ;EAOI,qBAAA;AtEujOZ;;AsE9jOQ;EAOI,0CAAA;AtE2jOZ;;AsElkOQ;EAOI,qCAAA;AtE+jOZ;;AsEtkOQ;EAOI,sCAAA;AtEmkOZ;;AsE1kOQ;EAOI,uFAAA;AtEukOZ;;AsE9kOQ;EAOI,oBAAA;AtE2kOZ;;AsEllOQ;EAOI,2FAAA;AtE+kOZ;;AsEtlOQ;EAOI,wBAAA;AtEmlOZ;;AsE1lOQ;EAOI,4FAAA;AtEulOZ;;AsE9lOQ;EAOI,yBAAA;AtE2lOZ;;AsElmOQ;EAOI,8FAAA;AtE+lOZ;;AsEtmOQ;EAOI,2BAAA;AtEmmOZ;;AsE1mOQ;EAOI,6FAAA;AtEumOZ;;AsE9mOQ;EAOI,0BAAA;AtE2mOZ;;AsElnOQ;EAIQ,sBAAA;EAGJ,8EAAA;AtEgnOZ;;AsEvnOQ;EAIQ,sBAAA;EAGJ,gFAAA;AtEqnOZ;;AsE5nOQ;EAIQ,sBAAA;EAGJ,8EAAA;AtE0nOZ;;AsEjoOQ;EAIQ,sBAAA;EAGJ,2EAAA;AtE+nOZ;;AsEtoOQ;EAIQ,sBAAA;EAGJ,8EAAA;AtEooOZ;;AsE3oOQ;EAIQ,sBAAA;EAGJ,6EAAA;AtEyoOZ;;AsEhpOQ;EAIQ,sBAAA;EAGJ,4EAAA;AtE8oOZ;;AsErpOQ;EAIQ,sBAAA;EAGJ,2EAAA;AtEmpOZ;;AsE1pOQ;EAIQ,sBAAA;EAGJ,4EAAA;AtEwpOZ;;AsE/pOQ;EAOI,wDAAA;AtE4pOZ;;AsEnqOQ;EAOI,0DAAA;AtEgqOZ;;AsEvqOQ;EAOI,wDAAA;AtEoqOZ;;AsE3qOQ;EAOI,qDAAA;AtEwqOZ;;AsE/qOQ;EAOI,wDAAA;AtE4qOZ;;AsEnrOQ;EAOI,uDAAA;AtEgrOZ;;AsEvrOQ;EAOI,sDAAA;AtEorOZ;;AsE3rOQ;EAOI,qDAAA;AtEwrOZ;;AsEzsOQ;EACE,sBAAA;AtE4sOV;;AsE7sOQ;EACE,sBAAA;AtEgtOV;;AsEjtOQ;EACE,sBAAA;AtEotOV;;AsErtOQ;EACE,sBAAA;AtEwtOV;;AsEztOQ;EACE,sBAAA;AtE4tOV;;AsE7tOQ;EACE,wBAAA;AtEguOV;;AsEjuOQ;EACE,yBAAA;AtEouOV;;AsEruOQ;EACE,wBAAA;AtEwuOV;;AsEzuOQ;EACE,yBAAA;AtE4uOV;;AsE7uOQ;EACE,sBAAA;AtEgvOV;;AsEvuOQ;EAOI,qBAAA;AtEouOZ;;AsE3uOQ;EAOI,qBAAA;AtEwuOZ;;AsE/uOQ;EAOI,qBAAA;AtE4uOZ;;AsEnvOQ;EAOI,sBAAA;AtEgvOZ;;AsEvvOQ;EAOI,sBAAA;AtEovOZ;;AsE3vOQ;EAOI,0BAAA;AtEwvOZ;;AsE/vOQ;EAOI,uBAAA;AtE4vOZ;;AsEnwOQ;EAOI,2BAAA;AtEgwOZ;;AsEvwOQ;EAOI,sBAAA;AtEowOZ;;AsE3wOQ;EAOI,sBAAA;AtEwwOZ;;AsE/wOQ;EAOI,sBAAA;AtE4wOZ;;AsEnxOQ;EAOI,uBAAA;AtEgxOZ;;AsEvxOQ;EAOI,uBAAA;AtEoxOZ;;AsE3xOQ;EAOI,2BAAA;AtEwxOZ;;AsE/xOQ;EAOI,wBAAA;AtE4xOZ;;AsEnyOQ;EAOI,4BAAA;AtEgyOZ;;AsEvyOQ;EAOI,yBAAA;AtEoyOZ;;AsE3yOQ;EAOI,8BAAA;AtEwyOZ;;AsE/yOQ;EAOI,iCAAA;AtE4yOZ;;AsEnzOQ;EAOI,sCAAA;AtEgzOZ;;AsEvzOQ;EAOI,yCAAA;AtEozOZ;;AsE3zOQ;EAOI,uBAAA;AtEwzOZ;;AsE/zOQ;EAOI,uBAAA;AtE4zOZ;;AsEn0OQ;EAOI,yBAAA;AtEg0OZ;;AsEv0OQ;EAOI,yBAAA;AtEo0OZ;;AsE30OQ;EAOI,0BAAA;AtEw0OZ;;AsE/0OQ;EAOI,4BAAA;AtE40OZ;;AsEn1OQ;EAOI,kCAAA;AtEg1OZ;;AsEv1OQ;EAOI,sCAAA;AtEo1OZ;;AsE31OQ;EAOI,oCAAA;AtEw1OZ;;AsE/1OQ;EAOI,kCAAA;AtE41OZ;;AsEn2OQ;EAOI,yCAAA;AtEg2OZ;;AsEv2OQ;EAOI,wCAAA;AtEo2OZ;;AsE32OQ;EAOI,wCAAA;AtEw2OZ;;AsE/2OQ;EAOI,kCAAA;AtE42OZ;;AsEn3OQ;EAOI,gCAAA;AtEg3OZ;;AsEv3OQ;EAOI,8BAAA;AtEo3OZ;;AsE33OQ;EAOI,gCAAA;AtEw3OZ;;AsE/3OQ;EAOI,+BAAA;AtE43OZ;;AsEn4OQ;EAOI,oCAAA;AtEg4OZ;;AsEv4OQ;EAOI,kCAAA;AtEo4OZ;;AsE34OQ;EAOI,gCAAA;AtEw4OZ;;AsE/4OQ;EAOI,uCAAA;AtE44OZ;;AsEn5OQ;EAOI,sCAAA;AtEg5OZ;;AsEv5OQ;EAOI,iCAAA;AtEo5OZ;;AsE35OQ;EAOI,2BAAA;AtEw5OZ;;AsE/5OQ;EAOI,iCAAA;AtE45OZ;;AsEn6OQ;EAOI,+BAAA;AtEg6OZ;;AsEv6OQ;EAOI,6BAAA;AtEo6OZ;;AsE36OQ;EAOI,+BAAA;AtEw6OZ;;AsE/6OQ;EAOI,8BAAA;AtE46OZ;;AsEn7OQ;EAOI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9qTM;IAOI,wBAAA;EtE0qTV;EsEjrTM;IAOI,+BAAA;EtE6qTV;EsEprTM;IAOI,wBAAA;EtEgrTV;EsEvrTM;IAOI,yBAAA;EtEmrTV;EsE1rTM;IAOI,8BAAA;EtEsrTV;EsE7rTM;IAOI,iCAAA;EtEyrTV;EsEhsTM;IAOI,sCAAA;EtE4rTV;EsEnsTM;IAOI,yCAAA;EtE+rTV;EsEtsTM;IAOI,uBAAA;EtEksTV;EsEzsTM;IAOI,uBAAA;EtEqsTV;EsE5sTM;IAOI,yBAAA;EtEwsTV;EsE/sTM;IAOI,yBAAA;EtE2sTV;EsEltTM;IAOI,0BAAA;EtE8sTV;EsErtTM;IAOI,4BAAA;EtEitTV;EsExtTM;IAOI,kCAAA;EtEotTV;EsE3tTM;IAOI,sCAAA;EtEutTV;EsE9tTM;IAOI,oCAAA;EtE0tTV;EsEjuTM;IAOI,kCAAA;EtE6tTV;EsEpuTM;IAOI,yCAAA;EtEguTV;EsEvuTM;IAOI,wCAAA;EtEmuTV;EsE1uTM;IAOI,wCAAA;EtEsuTV;EsE7uTM;IAOI,kCAAA;EtEyuTV;EsEhvTM;IAOI,gCAAA;EtE4uTV;EsEnvTM;IAOI,8BAAA;EtE+uTV;EsEtvTM;IAOI,gCAAA;EtEkvTV;EsEzvTM;IAOI,+BAAA;EtEqvTV;EsE5vTM;IAOI,oCAAA;EtEwvTV;EsE/vTM;IAOI,kCAAA;EtE2vTV;EsElwTM;IAOI,gCAAA;EtE8vTV;EsErwTM;IAOI,uCAAA;EtEiwTV;EsExwTM;IAOI,sCAAA;EtEowTV;EsE3wTM;IAOI,iCAAA;EtEuwTV;EsE9wTM;IAOI,2BAAA;EtE0wTV;EsEjxTM;IAOI,iCAAA;EtE6wTV;EsEpxTM;IAOI,+BAAA;EtEgxTV;EsEvxTM;IAOI,6BAAA;EtEmxTV;EsE1xTM;IAOI,+BAAA;EtEsxTV;EsE7xTM;IAOI,8BAAA;EtEyxTV;EsEhyTM;IAOI,oBAAA;EtE4xTV;EsEnyTM;IAOI,mBAAA;EtE+xTV;EsEtyTM;IAOI,mBAAA;EtEkyTV;EsEzyTM;IAOI,mBAAA;EtEqyTV;EsE5yTM;IAOI,mBAAA;EtEwyTV;EsE/yTM;IAOI,mBAAA;EtE2yTV;EsElzTM;IAOI,mB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","file":"bootstrap.rtl.css","sourcesContent":["@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color, inherit);\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: var(--bs-border-width);\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + var(--bs-border-width));\n padding-bottom: calc(0.375rem + var(--bs-border-width));\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + var(--bs-border-width));\n padding-bottom: calc(0.5rem + var(--bs-border-width));\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + var(--bs-border-width));\n padding-bottom: calc(0.25rem + var(--bs-border-width));\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n background-clip: padding-box;\n border: var(--bs-border-width) solid var(--bs-border-color);\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::-webkit-datetime-edit {\n display: block;\n padding: 0;\n}\n.form-control::placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control:disabled {\n background-color: var(--bs-form-control-disabled-bg);\n opacity: 1;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: transparent;\n border: solid transparent;\n border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: var(--bs-form-control-disabled-bg);\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n[data-bs-theme=dark] .form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n --bs-form-check-bg: var(--bs-form-control-bg);\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: var(--bs-form-check-bg);\n background-image: var(--bs-form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: var(--bs-border-width) solid var(--bs-border-color);\n appearance: none;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n width: 2em;\n margin-left: -2.5em;\n background-image: var(--bs-form-switch-bg);\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-tertiary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-tertiary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating::before:not(.form-control:disabled) {\n position: absolute;\n top: var(--bs-border-width);\n left: var(--bs-border-width);\n width: calc(100% - (calc(calc(0.375em + 0.1875rem) + calc(0.75em + 0.375rem))));\n height: 1.875em;\n content: \"\";\n background-color: var(--bs-form-control-bg);\n border-radius: 0.375rem;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: var(--bs-border-width) solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: var(--bs-border-width) 0;\n}\n.form-floating > .form-control:disabled ~ label {\n color: #6c757d;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-tertiary-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: calc(var(--bs-border-width) * -1);\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-success-text);\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-success);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: var(--bs-success);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: var(--bs-success);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: var(--bs-success);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: var(--bs-success);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: var(--bs-success);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: var(--bs-success-text);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: var(--bs-success-text);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-danger-text);\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-danger);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: var(--bs-danger);\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: var(--bs-danger);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: var(--bs-danger);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n padding-right: 4.125rem;\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: var(--bs-danger);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: var(--bs-danger);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: var(--bs-danger-text);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: var(--bs-danger-text);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: var(--bs-border-width);\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: var(--bs-body-color);\n --bs-dropdown-bg: var(--bs-body-bg);\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: var(--bs-border-width);\n --bs-dropdown-inner-border-radius: calc(0.375rem - var(--bs-border-width));\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-dropdown-link-color: var(--bs-body-color);\n --bs-dropdown-link-hover-color: var(--bs-body-color);\n --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar {\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-title-color: ;\n --bs-card-subtitle-color: ;\n --bs-card-border-width: var(--bs-border-width);\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: var(--bs-border-radius);\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: var(--bs-body-bg);\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: var(--bs-body-color);\n --bs-accordion-bg: var(--bs-body-bg);\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: var(--bs-border-width);\n --bs-accordion-border-radius: var(--bs-border-radius);\n --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: var(--bs-body-color);\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230a58ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: var(--bs-primary-text);\n --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: var(--bs-body-bg);\n --bs-pagination-border-width: var(--bs-border-width);\n --bs-pagination-border-color: var(--bs-border-color);\n --bs-pagination-border-radius: var(--bs-border-radius);\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n --bs-pagination-hover-border-color: var(--bs-border-color);\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: var(--bs-secondary-bg);\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: var(--bs-secondary-color);\n --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n --bs-pagination-disabled-border-color: var(--bs-border-color);\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n --bs-alert-link-color: inherit;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: var(--bs-primary-text);\n --bs-alert-bg: var(--bs-primary-bg-subtle);\n --bs-alert-border-color: var(--bs-primary-border-subtle);\n --bs-alert-link-color: var(--bs-primary-text);\n}\n\n.alert-secondary {\n --bs-alert-color: var(--bs-secondary-text);\n --bs-alert-bg: var(--bs-secondary-bg-subtle);\n --bs-alert-border-color: var(--bs-secondary-border-subtle);\n --bs-alert-link-color: var(--bs-secondary-text);\n}\n\n.alert-success {\n --bs-alert-color: var(--bs-success-text);\n --bs-alert-bg: var(--bs-success-bg-subtle);\n --bs-alert-border-color: var(--bs-success-border-subtle);\n --bs-alert-link-color: var(--bs-success-text);\n}\n\n.alert-info {\n --bs-alert-color: var(--bs-info-text);\n --bs-alert-bg: var(--bs-info-bg-subtle);\n --bs-alert-border-color: var(--bs-info-border-subtle);\n --bs-alert-link-color: var(--bs-info-text);\n}\n\n.alert-warning {\n --bs-alert-color: var(--bs-warning-text);\n --bs-alert-bg: var(--bs-warning-bg-subtle);\n --bs-alert-border-color: var(--bs-warning-border-subtle);\n --bs-alert-link-color: var(--bs-warning-text);\n}\n\n.alert-danger {\n --bs-alert-color: var(--bs-danger-text);\n --bs-alert-bg: var(--bs-danger-bg-subtle);\n --bs-alert-border-color: var(--bs-danger-border-subtle);\n --bs-alert-link-color: var(--bs-danger-text);\n}\n\n.alert-light {\n --bs-alert-color: var(--bs-light-text);\n --bs-alert-bg: var(--bs-light-bg-subtle);\n --bs-alert-border-color: var(--bs-light-border-subtle);\n --bs-alert-link-color: var(--bs-light-text);\n}\n\n.alert-dark {\n --bs-alert-color: var(--bs-dark-text);\n --bs-alert-bg: var(--bs-dark-bg-subtle);\n --bs-alert-border-color: var(--bs-dark-border-subtle);\n --bs-alert-link-color: var(--bs-dark-text);\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress,\n.progress-stacked {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: var(--bs-secondary-bg);\n --bs-progress-border-radius: var(--bs-border-radius);\n --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: var(--bs-body-color);\n --bs-list-group-bg: var(--bs-body-bg);\n --bs-list-group-border-color: var(--bs-border-color);\n --bs-list-group-border-width: var(--bs-border-width);\n --bs-list-group-border-radius: var(--bs-border-radius);\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: var(--bs-secondary-color);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n --bs-list-group-action-active-color: var(--bs-body-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n --bs-list-group-disabled-color: var(--bs-secondary-color);\n --bs-list-group-disabled-bg: var(--bs-body-bg);\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n --bs-list-group-color: var(--bs-primary-text);\n --bs-list-group-bg: var(--bs-primary-bg-subtle);\n --bs-list-group-border-color: var(--bs-primary-border-subtle);\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n}\n.list-group-item-primary.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-primary-text);\n --bs-list-group-active-border-color: var(--bs-primary-text);\n}\n\n.list-group-item-secondary {\n --bs-list-group-color: var(--bs-secondary-text);\n --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n}\n.list-group-item-secondary.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-secondary-text);\n --bs-list-group-active-border-color: var(--bs-secondary-text);\n}\n\n.list-group-item-success {\n --bs-list-group-color: var(--bs-success-text);\n --bs-list-group-bg: var(--bs-success-bg-subtle);\n --bs-list-group-border-color: var(--bs-success-border-subtle);\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n}\n.list-group-item-success.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-success-text);\n --bs-list-group-active-border-color: var(--bs-success-text);\n}\n\n.list-group-item-info {\n --bs-list-group-color: var(--bs-info-text);\n --bs-list-group-bg: var(--bs-info-bg-subtle);\n --bs-list-group-border-color: var(--bs-info-border-subtle);\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n}\n.list-group-item-info.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-info-text);\n --bs-list-group-active-border-color: var(--bs-info-text);\n}\n\n.list-group-item-warning {\n --bs-list-group-color: var(--bs-warning-text);\n --bs-list-group-bg: var(--bs-warning-bg-subtle);\n --bs-list-group-border-color: var(--bs-warning-border-subtle);\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n}\n.list-group-item-warning.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-warning-text);\n --bs-list-group-active-border-color: var(--bs-warning-text);\n}\n\n.list-group-item-danger {\n --bs-list-group-color: var(--bs-danger-text);\n --bs-list-group-bg: var(--bs-danger-bg-subtle);\n --bs-list-group-border-color: var(--bs-danger-border-subtle);\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n}\n.list-group-item-danger.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-danger-text);\n --bs-list-group-active-border-color: var(--bs-danger-text);\n}\n\n.list-group-item-light {\n --bs-list-group-color: var(--bs-light-text);\n --bs-list-group-bg: var(--bs-light-bg-subtle);\n --bs-list-group-border-color: var(--bs-light-border-subtle);\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n}\n.list-group-item-light.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-light-text);\n --bs-list-group-active-border-color: var(--bs-light-text);\n}\n\n.list-group-item-dark {\n --bs-list-group-color: var(--bs-dark-text);\n --bs-list-group-bg: var(--bs-dark-bg-subtle);\n --bs-list-group-border-color: var(--bs-dark-border-subtle);\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n}\n.list-group-item-dark.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-dark-text);\n --bs-list-group-active-border-color: var(--bs-dark-text);\n}\n\n.btn-close {\n --bs-btn-close-color: #000;\n --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n --bs-btn-close-opacity: 0.5;\n --bs-btn-close-hover-opacity: 0.75;\n --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-btn-close-focus-opacity: 1;\n --bs-btn-close-disabled-opacity: 0.25;\n --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: var(--bs-btn-close-color);\n background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n color: var(--bs-btn-close-color);\n text-decoration: none;\n opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: var(--bs-btn-close-focus-shadow);\n opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n user-select: none;\n opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-border-width: var(--bs-border-width);\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: var(--bs-border-radius);\n --bs-toast-box-shadow: var(--bs-box-shadow);\n --bs-toast-header-color: var(--bs-secondary-color);\n --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-header-border-color: var(--bs-border-color-translucent);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: var(--bs-body-bg);\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: var(--bs-border-width);\n --bs-modal-border-radius: var(--bs-border-radius-lg);\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: var(--bs-border-width);\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: var(--bs-border-width);\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: var(--bs-body-bg);\n --bs-tooltip-bg: var(--bs-emphasis-color);\n --bs-tooltip-border-radius: var(--bs-border-radius);\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: var(--bs-body-bg);\n --bs-popover-border-width: var(--bs-border-width);\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: var(--bs-border-radius-lg);\n --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: var(--bs-secondary-bg);\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: var(--bs-body-color);\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n .carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon,\n[data-bs-theme=dark] .carousel .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: var(--bs-body-color);\n --bs-offcanvas-bg: var(--bs-body-bg);\n --bs-offcanvas-border-width: var(--bs-border-width);\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-offcanvas-transition: transform 0.3s ease-in-out;\n --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text) !important;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-emphasis {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-top-circle {\n border-top-left-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-right-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-end-circle {\n border-top-right-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-right-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-right-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-left-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-left-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */\n","@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color, inherit);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n$primary-text: $blue-600 !default;\n$secondary-text: $gray-600 !default;\n$success-text: $green-600 !default;\n$info-text: $cyan-700 !default;\n$warning-text: $yellow-700 !default;\n$danger-text: $red-600 !default;\n$light-text: $gray-600 !default;\n$dark-text: $gray-700 !default;\n\n$primary-bg-subtle: $blue-100 !default;\n$secondary-bg-subtle: $gray-100 !default;\n$success-bg-subtle: $green-100 !default;\n$info-bg-subtle: $cyan-100 !default;\n$warning-bg-subtle: $yellow-100 !default;\n$danger-bg-subtle: $red-100 !default;\n$light-bg-subtle: mix($gray-100, $white) !default;\n$dark-bg-subtle: $gray-400 !default;\n\n$primary-border-subtle: $blue-200 !default;\n$secondary-border-subtle: $gray-200 !default;\n$success-border-subtle: $green-200 !default;\n$info-border-subtle: $cyan-200 !default;\n$warning-border-subtle: $yellow-200 !default;\n$danger-border-subtle: $red-200 !default;\n$light-border-subtle: $gray-200 !default;\n$dark-border-subtle: $gray-500 !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n$enable-dark-mode: true !default;\n$color-mode-type: data !default; // `data` or `media-query`\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-text-align: null !default;\n$body-color: $gray-900 !default;\n$body-bg: $white !default;\n\n$body-emphasis-color: $black !default;\n\n$body-secondary-color: rgba($body-color, .75) !default;\n$body-secondary-bg: $gray-200 !default;\n\n$body-tertiary-color: rgba($body-color, .5) !default;\n$body-tertiary-bg: $gray-100 !default;\n\n$emphasis-color: $black !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba(var(--#{$prefix}body-color-rgb), .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba(var(--#{$prefix}body-color-rgb), .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-medium: 500 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: var(--#{$prefix}secondary-color) !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: var(--#{$prefix}border-width) !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: var(--#{$prefix}border-width) !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: var(--#{$prefix}border-width) !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: var(--#{$prefix}form-control-bg) !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;\n$input-disabled-border-color: null !default;\n\n$input-color: var(--#{$prefix}body-color) !default;\n$input-border-color: var(--#{$prefix}border-color) !default; //$gray-400\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: var(--#{$prefix}secondary-color) !default;\n$input-plaintext-color: var(--#{$prefix}body-color) !default;\n\n$input-height-border: calc($input-border-width * 2) !default; // stylelint-disable-line function-disallowed-list\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-checked-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/></svg>\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='2' fill='#{$form-check-input-checked-color}'/></svg>\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'><path fill='none' stroke='#{$form-check-input-indeterminate-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/></svg>\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-focus-color}'/></svg>\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-checked-color}'/></svg>\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $input-disabled-bg !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;\n$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-height: 1.875em !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-label-disabled-color: $gray-600 !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": var(--#{$prefix}success-text),\n \"icon\": $form-feedback-icon-valid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}success),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}success),\n ),\n \"invalid\": (\n \"color\": var(--#{$prefix}danger-text),\n \"icon\": $form-feedback-icon-invalid,\n \"tooltip-color\": #fff,\n \"tooltip-bg-color\": var(--#{$prefix}danger),\n \"focus-box-shadow\": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),\n \"border-color\": var(--#{$prefix}danger),\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n// scss-docs-start zindex-levels-map\n$zindex-levels: (\n n1: -1,\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3\n) !default;\n// scss-docs-end zindex-levels-map\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;\n\n$nav-tabs-border-color: var(--#{$prefix}border-color) !default;\n$nav-tabs-border-width: var(--#{$prefix}border-width) !default;\n$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;\n$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;\n$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;\n$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;\n$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;\n$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;\n$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{rgba($body-color, .75)}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: var(--#{$prefix}body-color) !default;\n$dropdown-bg: var(--#{$prefix}body-bg) !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: var(--#{$prefix}border-width) !default;\n$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width) !default; // stylelint-disable-line function-disallowed-list\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: var(--#{$prefix}body-color) !default;\n$dropdown-link-hover-color: $dropdown-link-color !default;\n$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: var(--#{$prefix}body-bg) !default;\n$pagination-border-radius: var(--#{$prefix}border-radius) !default;\n$pagination-border-width: var(--#{$prefix}border-width) !default;\n$pagination-margin-start: calc($pagination-border-width * -1) !default; // stylelint-disable-line function-disallowed-list\n$pagination-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $component-active-bg !default;\n\n$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;\n$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;\n$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-title-color: null !default;\n$card-subtitle-color: null !default;\n$card-border-width: var(--#{$prefix}border-width) !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: var(--#{$prefix}border-radius) !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: var(--#{$prefix}body-bg) !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: var(--#{$prefix}body-color) !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: var(--#{$prefix}body-bg) !default;\n$accordion-border-width: var(--#{$prefix}border-width) !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: var(--#{$prefix}border-radius) !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: var(--#{$prefix}body-color) !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;\n$accordion-button-active-color: var(--#{$prefix}primary-text) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $body-color !default;\n$accordion-icon-active-color: $primary-text !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: var(--#{$prefix}body-bg) !default;\n$tooltip-bg: var(--#{$prefix}emphasis-color) !default;\n$tooltip-border-radius: var(--#{$prefix}border-radius) !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: var(--#{$prefix}body-bg) !default;\n$popover-max-width: 276px !default;\n$popover-border-width: var(--#{$prefix}border-width) !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$popover-inner-border-radius: calc($popover-border-radius - $popover-border-width) !default; // stylelint-disable-line function-disallowed-list\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: var(--#{$prefix}secondary-bg) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: var(--#{$prefix}body-color) !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-border-width: var(--#{$prefix}border-width) !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: var(--#{$prefix}border-radius) !default;\n$toast-box-shadow: var(--#{$prefix}box-shadow) !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: var(--#{$prefix}secondary-color) !default;\n$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;\n$toast-header-border-color: $toast-border-color !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: var(--#{$prefix}body-bg) !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: var(--#{$prefix}border-width) !default;\n$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: var(--#{$prefix}border-width) !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n// fusv-disable\n$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6\n$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6\n// fusv-enable\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: var(--#{$prefix}secondary-bg) !default;\n$progress-border-radius: var(--#{$prefix}border-radius) !default;\n$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: var(--#{$prefix}body-color) !default;\n$list-group-bg: var(--#{$prefix}body-bg) !default;\n$list-group-border-color: var(--#{$prefix}border-color) !default;\n$list-group-border-width: var(--#{$prefix}border-width) !default;\n$list-group-border-radius: var(--#{$prefix}border-radius) !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n// fusv-disable\n$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0\n$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0\n// fusv-enable\n\n$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: var(--#{$prefix}secondary-color) !default;\n$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;\n\n$list-group-action-active-color: var(--#{$prefix}body-color) !default;\n$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: var(--#{$prefix}body-bg) !default;\n$thumbnail-border-width: var(--#{$prefix}border-width) !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;\n$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: var(--#{$prefix}secondary-color) !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$carousel-control-color}'><path d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$btn-close-color}'><path d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/></svg>\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;\n$offcanvas-color: var(--#{$prefix}body-color) !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: var(--#{$prefix}table-color);\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: calc($table-border-width * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-active-bg);\n color: var(--#{$prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-hover-bg);\n color: var(--#{$prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Prevent excessive date input height in Webkit\n // https://github.com/twbs/bootstrap/issues/34433\n &::-webkit-datetime-edit {\n display: block;\n padding: 0;\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};\n\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};\n }\n }\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n --#{$prefix}form-check-bg: #{$form-check-input-bg};\n\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: var(--#{$prefix}form-check-bg);\n background-image: var(--#{$prefix}form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};\n\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: var(--#{$prefix}form-switch-bg);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-switch .form-check-input:not(:checked):not(:focus) {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n &::before:not(.form-control:disabled) {\n position: absolute;\n top: $input-border-width;\n left: $input-border-width;\n width: subtract(100%, add($input-height-inner-quarter, $input-height-inner-half));\n height: $form-floating-label-height;\n content: \"\";\n background-color: $input-bg;\n @include border-radius($input-border-radius);\n }\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n\n > .form-control:disabled ~ label {\n color: $form-floating-label-disabled-color;\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: calc($input-border-width * -1); // stylelint-disable-line function-disallowed-list\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity),\n $border-color: $color\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};\n padding-right: $form-select-feedback-icon-padding-end;\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$body-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: none;\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($primary), $primary, 15%))};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n clear: both;\n font-weight: $font-weight-normal;\n color: var(--#{$prefix}dropdown-link-color);\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}dropdown-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n }\n\n &.active,\n &:active {\n color: var(--#{$prefix}dropdown-link-active-color);\n text-decoration: none;\n @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: var(--#{$prefix}dropdown-header-color);\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n // scss-docs-start dropdown-dark-css-vars\n --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n // scss-docs-end dropdown-dark-css-vars\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down($width: $caret-width) {\n border-top: $width solid;\n border-right: $width solid transparent;\n border-bottom: 0;\n border-left: $width solid transparent;\n}\n\n@mixin caret-up($width: $caret-width) {\n border-top: 0;\n border-right: $width solid transparent;\n border-bottom: $width solid;\n border-left: $width solid transparent;\n}\n\n@mixin caret-end($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: 0;\n border-bottom: $width solid transparent;\n border-left: $width solid;\n}\n\n@mixin caret-start($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: $width solid;\n border-bottom: $width solid transparent;\n}\n\n@mixin caret(\n $direction: down,\n $width: $caret-width,\n $spacing: $caret-spacing,\n $vertical-align: $caret-vertical-align\n) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down($width);\n } @else if $direction == up {\n @include caret-up($width);\n } @else if $direction == end {\n @include caret-end($width);\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @include caret-start($width);\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n background: none;\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n background: none;\n border: 0;\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .show > .nav-link,\n .nav-link.active {\n color: var(--#{$prefix}navbar-active-color);\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n line-height: 1;\n color: var(--#{$prefix}navbar-color);\n background-color: transparent; // remove default button style\n border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas {\n // stylelint-disable declaration-no-important\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n @include box-shadow(none);\n @include transition(none);\n // stylelint-enable declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n @include deprecate(\"`.navbar-light`\", \"v5.2.0\", \"v6.0.0\", true);\n}\n\n.navbar-dark {\n // scss-docs-start navbar-dark-css-vars\n --#{$prefix}navbar-color: #{$navbar-dark-color};\n --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n // scss-docs-end navbar-dark-css-vars\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .navbar {\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n // scss-docs-start card-css-vars\n --#{$prefix}card-spacer-y: #{$card-spacer-y};\n --#{$prefix}card-spacer-x: #{$card-spacer-x};\n --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n --#{$prefix}card-title-color: #{$card-title-color};\n --#{$prefix}card-subtitle-color: #{$card-subtitle-color};\n --#{$prefix}card-border-width: #{$card-border-width};\n --#{$prefix}card-border-color: #{$card-border-color};\n --#{$prefix}card-border-radius: #{$card-border-radius};\n --#{$prefix}card-box-shadow: #{$card-box-shadow};\n --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n --#{$prefix}card-cap-bg: #{$card-cap-bg};\n --#{$prefix}card-cap-color: #{$card-cap-color};\n --#{$prefix}card-height: #{$card-height};\n --#{$prefix}card-color: #{$card-color};\n --#{$prefix}card-bg: #{$card-bg};\n --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n --#{$prefix}card-group-margin: #{$card-group-margin};\n // scss-docs-end card-css-vars\n\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: var(--#{$prefix}card-height);\n word-wrap: break-word;\n background-color: var(--#{$prefix}card-bg);\n background-clip: border-box;\n border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n @include border-radius(var(--#{$prefix}card-border-radius));\n @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n margin-bottom: var(--#{$prefix}card-title-spacer-y);\n color: var(--#{$prefix}card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list\n margin-bottom: 0;\n color: var(--#{$prefix}card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: var(--#{$prefix}card-spacer-x);\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:first-child {\n @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0);\n }\n}\n\n.card-footer {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:last-child {\n @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius));\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n border-bottom: 0;\n\n .nav-link.active {\n background-color: var(--#{$prefix}card-bg);\n border-bottom-color: var(--#{$prefix}card-bg);\n }\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--#{$prefix}card-img-overlay-padding);\n @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: var(--#{$prefix}card-group-margin);\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion {\n // scss-docs-start accordion-css-vars\n --#{$prefix}accordion-color: #{$accordion-color};\n --#{$prefix}accordion-bg: #{$accordion-bg};\n --#{$prefix}accordion-transition: #{$accordion-transition};\n --#{$prefix}accordion-border-color: #{$accordion-border-color};\n --#{$prefix}accordion-border-width: #{$accordion-border-width};\n --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};\n --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n @include font-size($font-size-base);\n color: var(--#{$prefix}accordion-btn-color);\n text-align: left; // Reset button style\n background-color: var(--#{$prefix}accordion-btn-bg);\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition(var(--#{$prefix}accordion-transition));\n\n &:not(.collapsed) {\n color: var(--#{$prefix}accordion-active-color);\n background-color: var(--#{$prefix}accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n &::after {\n background-image: var(--#{$prefix}accordion-btn-active-icon);\n transform: var(--#{$prefix}accordion-btn-icon-transform);\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: var(--#{$prefix}accordion-btn-icon-width);\n height: var(--#{$prefix}accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--#{$prefix}accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--#{$prefix}accordion-btn-icon-width);\n @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--#{$prefix}accordion-color);\n background-color: var(--#{$prefix}accordion-bg);\n border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n &:first-of-type {\n @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n }\n }\n}\n\n.accordion-body {\n padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n &,\n &.collapsed {\n @include border-radius(0);\n }\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .accordion-button::after {\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon-dark)};\n }\n }\n}\n",".breadcrumb {\n // scss-docs-start breadcrumb-css-vars\n --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n // scss-docs-end breadcrumb-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n @include font-size(var(--#{$prefix}breadcrumb-font-size));\n list-style: none;\n background-color: var(--#{$prefix}breadcrumb-bg);\n @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n color: var(--#{$prefix}breadcrumb-divider-color);\n content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: var(--#{$prefix}breadcrumb-item-active-color);\n }\n}\n",".pagination {\n // scss-docs-start pagination-css-vars\n --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-color: #{$pagination-color};\n --#{$prefix}pagination-bg: #{$pagination-bg};\n --#{$prefix}pagination-border-width: #{$pagination-border-width};\n --#{$prefix}pagination-border-color: #{$pagination-border-color};\n --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n --#{$prefix}pagination-active-color: #{$pagination-active-color};\n --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n // scss-docs-end pagination-css-vars\n\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n @include font-size(var(--#{$prefix}pagination-font-size));\n color: var(--#{$prefix}pagination-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}pagination-bg);\n border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: var(--#{$prefix}pagination-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}pagination-hover-bg);\n border-color: var(--#{$prefix}pagination-hover-border-color);\n }\n\n &:focus {\n z-index: 3;\n color: var(--#{$prefix}pagination-focus-color);\n background-color: var(--#{$prefix}pagination-focus-bg);\n outline: $pagination-focus-outline;\n box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n }\n\n &.active,\n .active > & {\n z-index: 3;\n color: var(--#{$prefix}pagination-active-color);\n @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n border-color: var(--#{$prefix}pagination-active-border-color);\n }\n\n &.disabled,\n .disabled > & {\n color: var(--#{$prefix}pagination-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}pagination-disabled-bg);\n border-color: var(--#{$prefix}pagination-disabled-border-color);\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n @if $pagination-margin-start == calc($pagination-border-width * -1) {\n &:first-child {\n .page-link {\n @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n } @else {\n // Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}pagination-padding-x: #{$padding-x};\n --#{$prefix}pagination-padding-y: #{$padding-y};\n @include rfs($font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n --#{$prefix}alert-link-color: inherit;\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n color: var(--#{$prefix}alert-link-color);\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert\n@each $state in map-keys($theme-colors) {\n .alert-#{$state} {\n --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text);\n --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);\n --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle);\n --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text);\n }\n}\n// scss-docs-end alert-modifiers\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress,\n.progress-stacked {\n // scss-docs-start progress-css-vars\n --#{$prefix}progress-height: #{$progress-height};\n @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n --#{$prefix}progress-bg: #{$progress-bg};\n --#{$prefix}progress-border-radius: #{$progress-border-radius};\n --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n --#{$prefix}progress-bar-color: #{$progress-bar-color};\n --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n // scss-docs-end progress-css-vars\n\n display: flex;\n height: var(--#{$prefix}progress-height);\n overflow: hidden; // force rounded corners by cropping it\n @include font-size(var(--#{$prefix}progress-font-size));\n background-color: var(--#{$prefix}progress-bg);\n @include border-radius(var(--#{$prefix}progress-border-radius));\n @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--#{$prefix}progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--#{$prefix}progress-bar-bg);\n @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // scss-docs-start list-group-css-vars\n --#{$prefix}list-group-color: #{$list-group-color};\n --#{$prefix}list-group-bg: #{$list-group-bg};\n --#{$prefix}list-group-border-color: #{$list-group-border-color};\n --#{$prefix}list-group-border-width: #{$list-group-border-width};\n --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n --#{$prefix}list-group-action-color: #{$list-group-action-color};\n --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n --#{$prefix}list-group-active-color: #{$list-group-active-color};\n --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n // scss-docs-end list-group-css-vars\n\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > .list-group-item::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: var(--#{$prefix}list-group-action-color);\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--#{$prefix}list-group-action-hover-bg);\n }\n\n &:active {\n color: var(--#{$prefix}list-group-action-active-color);\n background-color: var(--#{$prefix}list-group-action-active-bg);\n }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n color: var(--#{$prefix}list-group-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}list-group-bg);\n border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}list-group-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}list-group-disabled-bg);\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-active-color);\n background-color: var(--#{$prefix}list-group-active-bg);\n border-color: var(--#{$prefix}list-group-active-border-color);\n }\n\n // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n & + .list-group-item {\n border-top-width: 0;\n\n &.active {\n margin-top: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-top-width: var(--#{$prefix}list-group-border-width);\n }\n }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child:not(:last-child) {\n @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n @include border-top-end-radius(0);\n }\n\n &:last-child:not(:first-child) {\n @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: var(--#{$prefix}list-group-border-width);\n border-left-width: 0;\n\n &.active {\n margin-left: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-left-width: var(--#{$prefix}list-group-border-width);\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state in map-keys($theme-colors) {\n .list-group-item-#{$state} {\n --#{$prefix}list-group-color: var(--#{$prefix}#{$state}-text);\n --#{$prefix}list-group-bg: var(--#{$prefix}#{$state}-bg-subtle);\n --#{$prefix}list-group-border-color: var(--#{$prefix}#{$state}-border-subtle);\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n --#{$prefix}list-group-action-hover-color: var(--#{$prefix}emphasis-color);\n --#{$prefix}list-group-action-hover-bg: var(--#{$prefix}#{$state}-border-subtle);\n }\n\n &:active {\n --#{$prefix}list-group-active-color: var(--#{$prefix}emphasis-color);\n --#{$prefix}list-group-active-bg: var(--#{$prefix}#{$state}-text);\n --#{$prefix}list-group-active-border-color: var(--#{$prefix}#{$state}-text);\n }\n }\n }\n}\n// scss-docs-end list-group-modifiers\n","// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n --#{$prefix}btn-close-color: #{$btn-close-color};\n --#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };\n --#{$prefix}btn-close-opacity: #{$btn-close-opacity};\n --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};\n --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};\n --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};\n --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};\n --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};\n\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: var(--#{$prefix}btn-close-color);\n background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: var(--#{$prefix}btn-close-opacity);\n\n // Override <a>'s hover style\n &:hover {\n color: var(--#{$prefix}btn-close-color);\n text-decoration: none;\n opacity: var(--#{$prefix}btn-close-hover-opacity);\n }\n\n &:focus {\n outline: 0;\n box-shadow: var(--#{$prefix}btn-close-focus-shadow);\n opacity: var(--#{$prefix}btn-close-focus-opacity);\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: var(--#{$prefix}btn-close-disabled-opacity);\n }\n}\n\n@mixin btn-close-white() {\n filter: var(--#{$prefix}btn-close-white-filter);\n}\n\n.btn-close-white {\n @include btn-close-white();\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .btn-close {\n @include btn-close-white();\n }\n }\n}\n",".toast {\n // scss-docs-start toast-css-vars\n --#{$prefix}toast-zindex: #{$zindex-toast};\n --#{$prefix}toast-padding-x: #{$toast-padding-x};\n --#{$prefix}toast-padding-y: #{$toast-padding-y};\n --#{$prefix}toast-spacing: #{$toast-spacing};\n --#{$prefix}toast-max-width: #{$toast-max-width};\n @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n --#{$prefix}toast-color: #{$toast-color};\n --#{$prefix}toast-bg: #{$toast-background-color};\n --#{$prefix}toast-border-width: #{$toast-border-width};\n --#{$prefix}toast-border-color: #{$toast-border-color};\n --#{$prefix}toast-border-radius: #{$toast-border-radius};\n --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n --#{$prefix}toast-header-color: #{$toast-header-color};\n --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n // scss-docs-end toast-css-vars\n\n width: var(--#{$prefix}toast-max-width);\n max-width: 100%;\n @include font-size(var(--#{$prefix}toast-font-size));\n color: var(--#{$prefix}toast-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}toast-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n box-shadow: var(--#{$prefix}toast-box-shadow);\n @include border-radius(var(--#{$prefix}toast-border-radius));\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n --#{$prefix}toast-zindex: #{$zindex-toast};\n\n position: absolute;\n z-index: var(--#{$prefix}toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: var(--#{$prefix}toast-spacing);\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n color: var(--#{$prefix}toast-header-color);\n background-color: var(--#{$prefix}toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);\n @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));\n\n .btn-close {\n margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: var(--#{$prefix}toast-padding-x);\n }\n}\n\n.toast-body {\n padding: var(--#{$prefix}toast-padding-x);\n word-wrap: break-word;\n}\n","// stylelint-disable function-disallowed-list\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n // scss-docs-start modal-css-vars\n --#{$prefix}modal-zindex: #{$zindex-modal};\n --#{$prefix}modal-width: #{$modal-md};\n --#{$prefix}modal-padding: #{$modal-inner-padding};\n --#{$prefix}modal-margin: #{$modal-dialog-margin};\n --#{$prefix}modal-color: #{$modal-content-color};\n --#{$prefix}modal-bg: #{$modal-content-bg};\n --#{$prefix}modal-border-color: #{$modal-content-border-color};\n --#{$prefix}modal-border-width: #{$modal-content-border-width};\n --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n // scss-docs-end modal-css-vars\n\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--#{$prefix}modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--#{$prefix}modal-margin);\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: var(--#{$prefix}modal-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}modal-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n @include border-radius(var(--#{$prefix}modal-border-radius));\n @include box-shadow(var(--#{$prefix}modal-box-shadow));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n // scss-docs-start modal-backdrop-css-vars\n --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n // scss-docs-end modal-backdrop-css-vars\n\n @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: var(--#{$prefix}modal-header-padding);\n border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);\n @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n .btn-close {\n padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);\n margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * .5);\n background-color: var(--#{$prefix}modal-footer-bg);\n border-top: var(--#{$prefix}modal-footer-border-width) solid var(--#{$prefix}modal-footer-border-color);\n @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: calc(var(--#{$prefix}modal-footer-gap) * .5); // Todo in v6: replace with gap on parent class\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n .modal {\n --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n }\n\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: var(--#{$prefix}modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n\n .modal-sm {\n --#{$prefix}modal-width: #{$modal-sm};\n }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-lg};\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-xl};\n }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header,\n .modal-footer {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n // scss-docs-start tooltip-css-vars\n --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n --#{$prefix}tooltip-margin: #{$tooltip-margin};\n @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n --#{$prefix}tooltip-color: #{$tooltip-color};\n --#{$prefix}tooltip-bg: #{$tooltip-bg};\n --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n // scss-docs-end tooltip-css-vars\n\n z-index: var(--#{$prefix}tooltip-zindex);\n display: block;\n padding: var(--#{$prefix}tooltip-arrow-height);\n margin: var(--#{$prefix}tooltip-margin);\n @include deprecate(\"`$tooltip-margin`\", \"v5\", \"v5.x\", true);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}tooltip-font-size));\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: var(--#{$prefix}tooltip-opacity); }\n\n .tooltip-arrow {\n display: block;\n width: var(--#{$prefix}tooltip-arrow-width);\n height: var(--#{$prefix}tooltip-arrow-height);\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-top-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n left: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n right: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-right-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-bottom-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n right: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n left: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-left-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: var(--#{$prefix}tooltip-max-width);\n padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n color: var(--#{$prefix}tooltip-color);\n text-align: center;\n background-color: var(--#{$prefix}tooltip-bg);\n @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n}\n",".popover {\n // scss-docs-start popover-css-vars\n --#{$prefix}popover-zindex: #{$zindex-popover};\n --#{$prefix}popover-max-width: #{$popover-max-width};\n @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n --#{$prefix}popover-bg: #{$popover-bg};\n --#{$prefix}popover-border-width: #{$popover-border-width};\n --#{$prefix}popover-border-color: #{$popover-border-color};\n --#{$prefix}popover-border-radius: #{$popover-border-radius};\n --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n --#{$prefix}popover-header-color: #{$popover-header-color};\n --#{$prefix}popover-header-bg: #{$popover-header-bg};\n --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n --#{$prefix}popover-body-color: #{$popover-body-color};\n --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n // scss-docs-end popover-css-vars\n\n z-index: var(--#{$prefix}popover-zindex);\n display: block;\n max-width: var(--#{$prefix}popover-max-width);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}popover-font-size));\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: var(--#{$prefix}popover-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-radius(var(--#{$prefix}popover-border-radius));\n @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n .popover-arrow {\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n height: var(--#{$prefix}popover-arrow-height);\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n bottom: 0;\n border-top-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n bottom: var(--#{$prefix}popover-border-width);\n border-top-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n > .popover-arrow {\n left: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n left: 0;\n border-right-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n left: var(--#{$prefix}popover-border-width);\n border-right-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n top: 0;\n border-bottom-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n top: var(--#{$prefix}popover-border-width);\n border-bottom-color: var(--#{$prefix}popover-bg);\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n margin-left: calc(-.5 * var(--#{$prefix}popover-arrow-width)); // stylelint-disable-line function-disallowed-list\n content: \"\";\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start {\n > .popover-arrow {\n right: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n right: 0;\n border-left-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n right: var(--#{$prefix}popover-border-width);\n border-left-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size(var(--#{$prefix}popover-header-font-size));\n color: var(--#{$prefix}popover-header-color);\n background-color: var(--#{$prefix}popover-header-bg);\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n color: var(--#{$prefix}popover-body-color);\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n@mixin carousel-dark() {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n\n.carousel-dark {\n @include carousel-dark();\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .carousel {\n @include carousel-dark();\n }\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--#{$prefix}spinner-width);\n height: var(--#{$prefix}spinner-height);\n vertical-align: var(--#{$prefix}spinner-vertical-align);\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n // scss-docs-start spinner-border-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-border-width: #{$spinner-border-width};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-border;\n // scss-docs-end spinner-border-css-vars\n\n border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n // scss-docs-start spinner-border-sm-css-vars\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n // scss-docs-start spinner-grow-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-grow;\n // scss-docs-end spinner-grow-css-vars\n\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n }\n }\n}\n","// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n // scss-docs-start offcanvas-css-vars\n --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n --#{$prefix}offcanvas-color: #{$offcanvas-color};\n --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n --#{$prefix}offcanvas-transition: #{transform $offcanvas-transition-duration ease-in-out};\n --#{$prefix}offcanvas-title-line-height: #{$offcanvas-title-line-height};\n // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @extend %offcanvas-css-vars;\n }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @include media-breakpoint-down($next) {\n position: fixed;\n bottom: 0;\n z-index: var(--#{$prefix}offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--#{$prefix}offcanvas-color);\n visibility: hidden;\n background-color: var(--#{$prefix}offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n @include transition(var(--#{$prefix}offcanvas-transition));\n\n &.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(-100%);\n }\n\n &.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(100%);\n }\n\n &.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(-100%);\n }\n\n &.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(100%);\n }\n\n &.showing,\n &.show:not(.hiding) {\n transform: none;\n }\n\n &.showing,\n &.hiding,\n &.show {\n visibility: visible;\n }\n }\n\n @if not ($infix == \"\") {\n @include media-breakpoint-up($next) {\n --#{$prefix}offcanvas-height: auto;\n --#{$prefix}offcanvas-border-width: 0;\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n }\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n .btn-close {\n padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n overflow-y: auto;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) if($enable-important-utilities, !important, null);\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css b/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css
index f3425530e..657e84da2 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css
@@ -1,7 +1,6 @@
@charset "UTF-8";/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:var(--bs-link-color);text-decoration:underline}a:hover{color:var(--bs-link-hover-color)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-right:0;list-style:none}.list-inline{padding-right:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid var(--bs-border-color);border-radius:.375rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-left:auto;margin-right:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-left:calc(-.5 * var(--bs-gutter-x));margin-right:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color:var(--bs-body-color);--bs-table-bg:transparent;--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-body-color);--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:var(--bs-body-color);--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:var(--bs-body-color);--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:var(--bs-table-color);vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:2px solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#bacbe6;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#cbccce;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#bcd0c7;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#badce3;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#e6dbb9;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#dfc2c4;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#dfe0e1;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#373b3e;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:calc(1.5em + .75rem + 2px);padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:.375rem}.form-control-color::-webkit-color-swatch{border-radius:.375rem}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + 2px)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + 2px)}.form-select{display:block;width:100%;padding:.375rem .75rem .375rem 2.25rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-left:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-right:.5rem;font-size:.875rem;border-radius:.25rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;font-size:1.25rem;border-radius:.5rem}.form-check{display:block;min-height:1.5rem;padding-right:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:right;margin-right:-1.5em}.form-check-reverse{padding-left:1.5em;padding-right:0;text-align:left}.form-check-reverse .form-check-input{float:left;margin-left:-1.5em;margin-right:0}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-right:2.5em}.form-switch .form-check-input{width:2em;margin-right:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:right center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:left center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-left:2.5em;padding-right:0}.form-switch.form-check-reverse .form-check-input{margin-left:-2.5em;margin-right:0}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;right:0;width:100%;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid transparent;transform-origin:100% 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.375rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.375rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#198754;padding-left:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-left:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) left calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:#198754}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:#198754}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:#198754}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.375rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-left:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-left:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) left calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:#dc3545}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:#dc3545}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:#dc3545}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:#212529;--bs-btn-bg:transparent;--bs-btn-border-width:1px;--bs-btn-border-color:transparent;--bs-btn-border-radius:0.375rem;--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:none;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:0.5rem}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:0.25rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-left:.3em solid transparent;border-bottom:0;border-right:.3em solid transparent}.dropdown-toggle:empty::after{margin-right:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:#212529;--bs-dropdown-bg:#fff;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:0.375rem;--bs-dropdown-border-width:1px;--bs-dropdown-inner-border-radius:calc(0.375rem - 1px);--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color:#212529;--bs-dropdown-link-hover-color:#1e2125;--bs-dropdown-link-hover-bg:#e9ecef;--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:right;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;right:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:0;border-left:.3em solid transparent;border-bottom:.3em solid;border-right:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-right:0}.dropend .dropdown-menu[data-bs-popper]{top:0;left:auto;right:100%;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-left:0;border-bottom:.3em solid transparent;border-right:.3em solid}.dropend .dropdown-toggle:empty::after{margin-right:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;left:100%;right:auto;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-left:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-right:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.375rem}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-right:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-right:0}.dropstart .dropdown-toggle-split::before{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-right-radius:0;border-top-left-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:#6c757d;display:flex;flex-wrap:wrap;padding-right:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link.disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:1px;--bs-nav-tabs-border-color:#dee2e6;--bs-nav-tabs-border-radius:0.375rem;--bs-nav-tabs-link-hover-border-color:#e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color:#495057;--bs-nav-tabs-link-active-bg:#fff;--bs-nav-tabs-link-active-border-color:#dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));background:0 0;border:var(--bs-nav-tabs-border-width) solid transparent;border-top-right-radius:var(--bs-nav-tabs-border-radius);border-top-left-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-right-radius:0;border-top-left-radius:0}.nav-pills{--bs-nav-pills-border-radius:0.375rem;--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{background:0 0;border:0;border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(0, 0, 0, 0.55);--bs-navbar-hover-color:rgba(0, 0, 0, 0.7);--bs-navbar-disabled-color:rgba(0, 0, 0, 0.3);--bs-navbar-active-color:rgba(0, 0, 0, 0.9);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(0, 0, 0, 0.9);--bs-navbar-brand-hover-color:rgba(0, 0, 0, 0.9);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(0, 0, 0, 0.1);--bs-navbar-toggler-border-radius:0.375rem;--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-left:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-right:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .show>.nav-link{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-border-width:1px;--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:0.375rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(0.375rem - 1px);--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(0, 0, 0, 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:#fff;--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-right-radius:var(--bs-card-inner-border-radius);border-top-left-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-right:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-left:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-right:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-left:calc(-.5 * var(--bs-card-cap-padding-x));margin-right:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;left:0;bottom:0;right:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-right-radius:var(--bs-card-inner-border-radius);border-top-left-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-right:0;border-right:0}.card-group>.card:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-right-radius:0}}.accordion{--bs-accordion-color:#212529;--bs-accordion-bg:#fff;--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:1px;--bs-accordion-border-radius:0.375rem;--bs-accordion-inner-border-radius:calc(0.375rem - 1px);--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:#212529;--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:#0c63e4;--bs-accordion-active-bg:#e7f1ff}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:right;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-right:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-right-radius:var(--bs-accordion-border-radius);border-top-left-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-right-radius:var(--bs-accordion-inner-border-radius);border-top-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:var(--bs-accordion-inner-border-radius);border-bottom-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-right:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:#6c757d;--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:#6c757d;display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-right:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:right;padding-left:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:#fff;--bs-pagination-border-width:1px;--bs-pagination-border-color:#dee2e6;--bs-pagination-border-radius:0.375rem;--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:#e9ecef;--bs-pagination-hover-border-color:#dee2e6;--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:#e9ecef;--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:#6c757d;--bs-pagination-disabled-bg:#fff;--bs-pagination-disabled-border-color:#dee2e6;display:flex;padding-right:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-right:-1px}.page-item:first-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:0.5rem}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:0.25rem}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:0.375rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:1px solid var(--bs-alert-border-color);--bs-alert-border-radius:0.375rem;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{position:absolute;top:0;left:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:#084298;--bs-alert-bg:#cfe2ff;--bs-alert-border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{--bs-alert-color:#41464b;--bs-alert-bg:#e2e3e5;--bs-alert-border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{--bs-alert-color:#0f5132;--bs-alert-bg:#d1e7dd;--bs-alert-border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{--bs-alert-color:#055160;--bs-alert-bg:#cff4fc;--bs-alert-border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{--bs-alert-color:#664d03;--bs-alert-bg:#fff3cd;--bs-alert-border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{--bs-alert-color:#842029;--bs-alert-bg:#f8d7da;--bs-alert-border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{--bs-alert-color:#636464;--bs-alert-bg:#fefefe;--bs-alert-border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{--bs-alert-color:#141619;--bs-alert-bg:#d3d3d4;--bs-alert-border-color:#bcbebf}.alert-dark .alert-link{color:#101214}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:#e9ecef;--bs-progress-border-radius:0.375rem;--bs-progress-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:#212529;--bs-list-group-bg:#fff;--bs-list-group-border-color:rgba(0, 0, 0, 0.125);--bs-list-group-border-width:1px;--bs-list-group-border-radius:0.375rem;--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:#495057;--bs-list-group-action-hover-color:#495057;--bs-list-group-action-hover-bg:#f8f9fa;--bs-list-group-action-active-color:#212529;--bs-list-group-action-active-bg:#e9ecef;--bs-list-group-disabled-color:#6c757d;--bs-list-group-disabled-bg:#fff;--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-right:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-right-radius:inherit;border-top-left-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(255, 255, 255, 0.85);--bs-toast-border-width:1px;--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:0.375rem;--bs-toast-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color:#6c757d;--bs-toast-header-bg:rgba(255, 255, 255, 0.85);--bs-toast-header-border-color:rgba(0, 0, 0, 0.05);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-left:calc(-.5 * var(--bs-toast-padding-x));margin-right:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:#fff;--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:1px;--bs-modal-border-radius:0.5rem;--bs-modal-box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius:calc(0.5rem - 1px);--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:1px;--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:1px;position:fixed;top:0;right:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;right:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-right-radius:var(--bs-modal-inner-border-radius);border-top-left-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) auto calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x))}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-left-radius:var(--bs-modal-inner-border-radius);border-bottom-right-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-left:auto;margin-right:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:#fff;--bs-tooltip-bg:#000;--bs-tooltip-border-radius:0.375rem;--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;padding:var(--bs-tooltip-arrow-height);margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:#fff;--bs-popover-border-width:1px;--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:0.5rem;--bs-popover-inner-border-radius:calc(0.5rem - 1px);--bs-popover-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: ;--bs-popover-header-bg:#f0f0f0;--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:#212529;--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;right:50%;display:block;width:var(--bs-popover-arrow-width);margin-right:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-right-radius:var(--bs-popover-inner-border-radius);border-top-left-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:right;width:100%;margin-left:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{right:0}.carousel-control-next{left:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;left:0;bottom:0;right:0;z-index:2;display:flex;justify-content:center;padding:0;margin-left:15%;margin-bottom:1rem;margin-right:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-left:3px;margin-right:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;left:15%;bottom:1.25rem;right:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-left-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color: ;--bs-offcanvas-bg:#fff;--bs-offcanvas-border-width:1px;--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075)}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:575.98px){.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}}@media (max-width:575.98px){.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:767.98px){.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}}@media (max-width:767.98px){.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:991.98px){.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}}@media (max-width:991.98px){.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:1199.98px){.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}}@media (max-width:1199.98px){.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:1399.98px){.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}}@media (max-width:1399.98px){.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;right:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-left:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(13,110,253,var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(108,117,125,var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(25,135,84,var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(13,202,240,var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(255,193,7,var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(33,37,41,var(--bs-bg-opacity,1))!important}.link-primary{color:#0d6efd!important}.link-primary:focus,.link-primary:hover{color:#0a58ca!important}.link-secondary{color:#6c757d!important}.link-secondary:focus,.link-secondary:hover{color:#565e64!important}.link-success{color:#198754!important}.link-success:focus,.link-success:hover{color:#146c43!important}.link-info{color:#0dcaf0!important}.link-info:focus,.link-info:hover{color:#3dd5f3!important}.link-warning{color:#ffc107!important}.link-warning:focus,.link-warning:hover{color:#ffcd39!important}.link-danger{color:#dc3545!important}.link-danger:focus,.link-danger:hover{color:#b02a37!important}.link-light{color:#f8f9fa!important}.link-light:focus,.link-light:hover{color:#f9fafb!important}.link-dark{color:#212529!important}.link-dark:focus,.link-dark:hover{color:#1a1e21!important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:right!important}.float-end{float:left!important}.float-none{float:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{right:0!important}.start-50{right:50%!important}.start-100{right:100%!important}.end-0{left:0!important}.end-50{left:50%!important}.end-100{left:100%!important}.translate-middle{transform:translate(50%,-50%)!important}.translate-middle-x{transform:translateX(50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-left:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-right:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-1{--bs-border-width:1px}.border-2{--bs-border-width:2px}.border-3{--bs-border-width:3px}.border-4{--bs-border-width:4px}.border-5{--bs-border-width:5px}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:3rem!important}.me-auto{margin-left:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:3rem!important}.ms-auto{margin-right:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-light{font-weight:300!important}.fw-lighter{font-weight:lighter!important}.fw-normal{font-weight:400!important}.fw-bold{font-weight:700!important}.fw-semibold{font-weight:600!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:right!important}.text-end{text-align:left!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:#6c757d!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-2xl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-right-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-end{border-top-left-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-bottom{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-start{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media (min-width:576px){.float-sm-start{float:right!important}.float-sm-end{float:left!important}.float-sm-none{float:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:3rem!important}.me-sm-auto{margin-left:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:3rem!important}.ms-sm-auto{margin-right:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.text-sm-start{text-align:right!important}.text-sm-end{text-align:left!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:right!important}.float-md-end{float:left!important}.float-md-none{float:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:3rem!important}.me-md-auto{margin-left:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:3rem!important}.ms-md-auto{margin-right:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.text-md-start{text-align:right!important}.text-md-end{text-align:left!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:right!important}.float-lg-end{float:left!important}.float-lg-none{float:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:3rem!important}.me-lg-auto{margin-left:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:3rem!important}.ms-lg-auto{margin-right:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.text-lg-start{text-align:right!important}.text-lg-end{text-align:left!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:right!important}.float-xl-end{float:left!important}.float-xl-none{float:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:3rem!important}.me-xl-auto{margin-left:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:3rem!important}.ms-xl-auto{margin-right:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.text-xl-start{text-align:right!important}.text-xl-end{text-align:left!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:right!important}.float-xxl-end{float:left!important}.float-xxl-none{float:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:3rem!important}.me-xxl-auto{margin-left:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:3rem!important}.ms-xxl-auto{margin-right:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.text-xxl-start{text-align:right!important}.text-xxl-end{text-align:left!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
+ */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text:#0a58ca;--bs-secondary-text:#6c757d;--bs-success-text:#146c43;--bs-info-text:#087990;--bs-warning-text:#997404;--bs-danger-text:#b02a37;--bs-light-text:#6c757d;--bs-dark-text:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#f8f9fa;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#e9ecef;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);--bs-emphasis-color:#000;--bs-form-control-bg:var(--bs-body-bg);--bs-form-control-disabled-bg:var(--bs-secondary-bg);--bs-highlight-bg:#fff3cd;--bs-breakpoint-xs:0;--bs-breakpoint-sm:576px;--bs-breakpoint-md:768px;--bs-breakpoint-lg:992px;--bs-breakpoint-xl:1200px;--bs-breakpoint-xxl:1400px}[data-bs-theme=dark]{--bs-body-color:#adb5bd;--bs-body-color-rgb:173,181,189;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#f8f9fa;--bs-emphasis-color-rgb:248,249,250;--bs-secondary-color:rgba(173, 181, 189, 0.75);--bs-secondary-color-rgb:173,181,189;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(173, 181, 189, 0.5);--bs-tertiary-color-rgb:173,181,189;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-emphasis-color:#fff;--bs-primary-text:#6ea8fe;--bs-secondary-text:#dee2e6;--bs-success-text:#75b798;--bs-info-text:#6edff6;--bs-warning-text:#ffda6a;--bs-danger-text:#ea868f;--bs-light-text:#f8f9fa;--bs-dark-text:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#212529;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#495057;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#055160;--bs-warning-border-subtle:#664d03;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:#fff;--bs-link-color:#6ea8fe;--bs-link-hover-color:#9ec5fe;--bs-link-color-rgb:110,168,254;--bs-link-hover-color-rgb:158,197,254;--bs-code-color:#e685b5;--bs-border-color:#495057;--bs-border-color-translucent:rgba(255, 255, 255, 0.15)}*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;border:0;border-top:var(--bs-border-width) solid;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2;color:var(--bs-heading-color,inherit)}.h1,h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){.h1,h1{font-size:2.5rem}}.h2,h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){.h2,h2{font-size:2rem}}.h3,h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){.h3,h3{font-size:1.75rem}}.h4,h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){.h4,h4{font-size:1.5rem}}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--bs-link-color-rgb),var(--bs-link-opacity,1));text-decoration:underline}a:hover{--bs-link-color-rgb:var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-secondary-color);text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width:1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-right:0;list-style:none}.list-inline{padding-right:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:var(--bs-body-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:var(--bs-border-radius);max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:var(--bs-secondary-color)}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-left:auto;margin-right:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-left:calc(-.5 * var(--bs-gutter-x));margin-right:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.table{--bs-table-color:var(--bs-body-color);--bs-table-bg:transparent;--bs-table-border-color:var(--bs-border-color);--bs-table-accent-bg:transparent;--bs-table-striped-color:var(--bs-body-color);--bs-table-striped-bg:rgba(0, 0, 0, 0.05);--bs-table-active-color:var(--bs-body-color);--bs-table-active-bg:rgba(0, 0, 0, 0.1);--bs-table-hover-color:var(--bs-body-color);--bs-table-hover-bg:rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:var(--bs-table-color);vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:var(--bs-border-width);box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width) * 2) solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-striped-columns>:not(caption)>tr>:nth-child(2n){--bs-table-accent-bg:var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg:var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg:var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#bacbe6;--bs-table-striped-bg:#c5d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe6;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#cbccce;--bs-table-striped-bg:#d7d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbccce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color:#000;--bs-table-bg:#d1e7dd;--bs-table-border-color:#bcd0c7;--bs-table-striped-bg:#c7dbd2;--bs-table-striped-color:#000;--bs-table-active-bg:#bcd0c7;--bs-table-active-color:#000;--bs-table-hover-bg:#c1d6cc;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#badce3;--bs-table-striped-bg:#c5e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#e6dbb9;--bs-table-striped-bg:#f2e7c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dbb9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece1be;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#dfc2c4;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc2c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7ca;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color:#000;--bs-table-bg:#f8f9fa;--bs-table-border-color:#dfe0e1;--bs-table-striped-bg:#ecedee;--bs-table-striped-color:#000;--bs-table-active-bg:#dfe0e1;--bs-table-active-color:#000;--bs-table-hover-bg:#e5e6e7;--bs-table-hover-color:#000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color:#fff;--bs-table-bg:#212529;--bs-table-border-color:#373b3e;--bs-table-striped-bg:#2c3034;--bs-table-striped-color:#fff;--bs-table-active-bg:#373b3e;--bs-table-active-color:#fff;--bs-table-hover-bg:#323539;--bs-table-hover-color:#fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width:575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width:1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + var(--bs-border-width));padding-bottom:calc(.375rem + var(--bs-border-width));margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + var(--bs-border-width));padding-bottom:calc(.5rem + var(--bs-border-width));font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + var(--bs-border-width));padding-bottom:calc(.25rem + var(--bs-border-width));font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:var(--bs-secondary-color)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-form-control-bg);background-clip:padding-box;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:var(--bs-body-color);background-color:var(--bs-form-control-bg);border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--bs-secondary-color);opacity:1}.form-control::placeholder{color:var(--bs-secondary-color);opacity:1}.form-control:disabled{background-color:var(--bs-form-control-disabled-bg);opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:var(--bs-body-color);background-color:var(--bs-tertiary-bg);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:var(--bs-border-width);border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--bs-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--bs-secondary-bg)}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:var(--bs-body-color);background-color:transparent;border:solid transparent;border-width:var(--bs-border-width) 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2));padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2))}textarea.form-control-sm{min-height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-control-color{width:3rem;height:calc(1.5em + .75rem + calc(var(--bs-border-width) * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:.375rem}.form-control-color::-webkit-color-swatch{border-radius:.375rem}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + calc(var(--bs-border-width) * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(var(--bs-border-width) * 2))}.form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem .75rem .375rem 2.25rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);background-color:var(--bs-form-control-bg);background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon,none);background-repeat:no-repeat;background-position:left .75rem center;background-size:16px 12px;border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-left:.75rem;background-image:none}.form-select:disabled{background-color:var(--bs-form-control-disabled-bg)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--bs-body-color)}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-right:.5rem;font-size:.875rem;border-radius:.25rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;font-size:1.25rem;border-radius:.5rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check{display:block;min-height:1.5rem;padding-right:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:right;margin-right:-1.5em}.form-check-reverse{padding-left:1.5em;padding-right:0;text-align:left}.form-check-reverse .form-check-input{float:left;margin-left:-1.5em;margin-right:0}.form-check-input{--bs-form-check-bg:var(--bs-form-control-bg);width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:var(--bs-border-width) solid var(--bs-border-color);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;--bs-form-check-bg-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.5}.form-switch{padding-right:2.5em}.form-switch .form-check-input{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-right:-2.5em;background-image:var(--bs-form-switch-bg);background-position:right center;border-radius:2em;transition:background-position .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:left center;--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-left:2.5em;padding-right:0}.form-switch.form-check-reverse .form-check-input{margin-left:-2.5em;margin-right:0}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:var(--bs-tertiary-bg);border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--bs-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--bs-secondary-color)}.form-floating{position:relative}.form-floating::before:not(.form-control:disabled){position:absolute;top:var(--bs-border-width);right:var(--bs-border-width);width:calc(100% - (calc(calc(.375em + .1875rem) + calc(.75em + .375rem))));height:1.875em;content:"";background-color:var(--bs-form-control-bg);border-radius:.375rem}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(var(--bs-border-width) * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;right:0;width:100%;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:var(--bs-border-width) solid transparent;transform-origin:100% 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control-plaintext::-moz-placeholder,.form-floating>.form-control::-moz-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-moz-placeholder-shown),.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown),.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control-plaintext~label,.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--bs-border-width) 0}.form-floating>.form-control:disabled~label{color:#6c757d}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-floating:focus-within,.input-group>.form-select:focus{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:var(--bs-body-color);text-align:center;white-space:nowrap;background-color:var(--bs-tertiary-bg);border:var(--bs-border-width) solid var(--bs-border-color);border-radius:.375rem}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select,.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4),.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n+3)>.form-select,.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-right:calc(var(--bs-border-width) * -1);border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-success-text)}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-success);border-radius:var(--bs-border-radius)}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:var(--bs-success);padding-left:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--bs-success);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-left:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) left calc(.375em + .1875rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--bs-success)}.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"],.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-left:4.125rem;background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--bs-success);box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--bs-success)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--bs-success-text)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--bs-success-text)}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:var(--bs-danger-text)}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:var(--bs-danger);border-radius:var(--bs-border-radius)}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:var(--bs-danger);padding-left:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--bs-danger);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-left:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) left calc(.375em + .1875rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--bs-danger)}.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"],.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");padding-left:4.125rem;background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--bs-danger);box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(3rem + calc(1.5em + .75rem))}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--bs-danger)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--bs-danger-text)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--bs-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--bs-danger-text)}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.5em}.input-group>.form-control:not(:focus).is-invalid,.input-group>.form-floating:not(:focus-within).is-invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-control:not(:focus):invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.was-validated .input-group>.form-select:not(:focus):invalid{z-index:4}.btn{--bs-btn-padding-x:0.75rem;--bs-btn-padding-y:0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight:400;--bs-btn-line-height:1.5;--bs-btn-color:#212529;--bs-btn-bg:transparent;--bs-btn-border-width:var(--bs-border-width);--bs-btn-border-color:transparent;--bs-btn-border-radius:0.375rem;--bs-btn-hover-border-color:transparent;--bs-btn-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.15),0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity:0.65;--bs-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible,.btn:first-child:active:focus-visible,:not(.btn-check)+.btn:active:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0b5ed7;--bs-btn-hover-border-color:#0a58ca;--bs-btn-focus-shadow-rgb:49,132,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0a58ca;--bs-btn-active-border-color:#0a53be;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#0d6efd;--bs-btn-disabled-border-color:#0d6efd}.btn-secondary{--bs-btn-color:#fff;--bs-btn-bg:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#5c636a;--bs-btn-hover-border-color:#565e64;--bs-btn-focus-shadow-rgb:130,138,145;--bs-btn-active-color:#fff;--bs-btn-active-bg:#565e64;--bs-btn-active-border-color:#51585e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#6c757d;--bs-btn-disabled-border-color:#6c757d}.btn-success{--bs-btn-color:#fff;--bs-btn-bg:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#157347;--bs-btn-hover-border-color:#146c43;--bs-btn-focus-shadow-rgb:60,153,110;--bs-btn-active-color:#fff;--bs-btn-active-bg:#146c43;--bs-btn-active-border-color:#13653f;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#198754;--bs-btn-disabled-border-color:#198754}.btn-info{--bs-btn-color:#000;--bs-btn-bg:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#31d2f2;--bs-btn-hover-border-color:#25cff2;--bs-btn-focus-shadow-rgb:11,172,204;--bs-btn-active-color:#000;--bs-btn-active-bg:#3dd5f3;--bs-btn-active-border-color:#25cff2;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#0dcaf0;--bs-btn-disabled-border-color:#0dcaf0}.btn-warning{--bs-btn-color:#000;--bs-btn-bg:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffca2c;--bs-btn-hover-border-color:#ffc720;--bs-btn-focus-shadow-rgb:217,164,6;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffcd39;--bs-btn-active-border-color:#ffc720;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#ffc107;--bs-btn-disabled-border-color:#ffc107}.btn-danger{--bs-btn-color:#fff;--bs-btn-bg:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#bb2d3b;--bs-btn-hover-border-color:#b02a37;--bs-btn-focus-shadow-rgb:225,83,97;--bs-btn-active-color:#fff;--bs-btn-active-bg:#b02a37;--bs-btn-active-border-color:#a52834;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#dc3545;--bs-btn-disabled-border-color:#dc3545}.btn-light{--bs-btn-color:#000;--bs-btn-bg:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#d3d4d5;--bs-btn-hover-border-color:#c6c7c8;--bs-btn-focus-shadow-rgb:211,212,213;--bs-btn-active-color:#000;--bs-btn-active-bg:#c6c7c8;--bs-btn-active-border-color:#babbbc;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#000;--bs-btn-disabled-bg:#f8f9fa;--bs-btn-disabled-border-color:#f8f9fa}.btn-dark{--bs-btn-color:#fff;--bs-btn-bg:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#424649;--bs-btn-hover-border-color:#373b3e;--bs-btn-focus-shadow-rgb:66,70,73;--bs-btn-active-color:#fff;--bs-btn-active-bg:#4d5154;--bs-btn-active-border-color:#373b3e;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#fff;--bs-btn-disabled-bg:#212529;--bs-btn-disabled-border-color:#212529}.btn-outline-primary{--bs-btn-color:#0d6efd;--bs-btn-border-color:#0d6efd;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#0d6efd;--bs-btn-hover-border-color:#0d6efd;--bs-btn-focus-shadow-rgb:13,110,253;--bs-btn-active-color:#fff;--bs-btn-active-bg:#0d6efd;--bs-btn-active-border-color:#0d6efd;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0d6efd;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0d6efd;--bs-gradient:none}.btn-outline-secondary{--bs-btn-color:#6c757d;--bs-btn-border-color:#6c757d;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#6c757d;--bs-btn-hover-border-color:#6c757d;--bs-btn-focus-shadow-rgb:108,117,125;--bs-btn-active-color:#fff;--bs-btn-active-bg:#6c757d;--bs-btn-active-border-color:#6c757d;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#6c757d;--bs-gradient:none}.btn-outline-success{--bs-btn-color:#198754;--bs-btn-border-color:#198754;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#198754;--bs-btn-hover-border-color:#198754;--bs-btn-focus-shadow-rgb:25,135,84;--bs-btn-active-color:#fff;--bs-btn-active-bg:#198754;--bs-btn-active-border-color:#198754;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#198754;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#198754;--bs-gradient:none}.btn-outline-info{--bs-btn-color:#0dcaf0;--bs-btn-border-color:#0dcaf0;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#0dcaf0;--bs-btn-hover-border-color:#0dcaf0;--bs-btn-focus-shadow-rgb:13,202,240;--bs-btn-active-color:#000;--bs-btn-active-bg:#0dcaf0;--bs-btn-active-border-color:#0dcaf0;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#0dcaf0;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#0dcaf0;--bs-gradient:none}.btn-outline-warning{--bs-btn-color:#ffc107;--bs-btn-border-color:#ffc107;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#ffc107;--bs-btn-hover-border-color:#ffc107;--bs-btn-focus-shadow-rgb:255,193,7;--bs-btn-active-color:#000;--bs-btn-active-bg:#ffc107;--bs-btn-active-border-color:#ffc107;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#ffc107;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#ffc107;--bs-gradient:none}.btn-outline-danger{--bs-btn-color:#dc3545;--bs-btn-border-color:#dc3545;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#dc3545;--bs-btn-hover-border-color:#dc3545;--bs-btn-focus-shadow-rgb:220,53,69;--bs-btn-active-color:#fff;--bs-btn-active-bg:#dc3545;--bs-btn-active-border-color:#dc3545;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#dc3545;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#dc3545;--bs-gradient:none}.btn-outline-light{--bs-btn-color:#f8f9fa;--bs-btn-border-color:#f8f9fa;--bs-btn-hover-color:#000;--bs-btn-hover-bg:#f8f9fa;--bs-btn-hover-border-color:#f8f9fa;--bs-btn-focus-shadow-rgb:248,249,250;--bs-btn-active-color:#000;--bs-btn-active-bg:#f8f9fa;--bs-btn-active-border-color:#f8f9fa;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#f8f9fa;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#f8f9fa;--bs-gradient:none}.btn-outline-dark{--bs-btn-color:#212529;--bs-btn-border-color:#212529;--bs-btn-hover-color:#fff;--bs-btn-hover-bg:#212529;--bs-btn-hover-border-color:#212529;--bs-btn-focus-shadow-rgb:33,37,41;--bs-btn-active-color:#fff;--bs-btn-active-bg:#212529;--bs-btn-active-border-color:#212529;--bs-btn-active-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color:#212529;--bs-btn-disabled-bg:transparent;--bs-btn-disabled-border-color:#212529;--bs-gradient:none}.btn-link{--bs-btn-font-weight:400;--bs-btn-color:var(--bs-link-color);--bs-btn-bg:transparent;--bs-btn-border-color:transparent;--bs-btn-hover-color:var(--bs-link-hover-color);--bs-btn-hover-border-color:transparent;--bs-btn-active-color:var(--bs-link-hover-color);--bs-btn-active-border-color:transparent;--bs-btn-disabled-color:#6c757d;--bs-btn-disabled-border-color:transparent;--bs-btn-box-shadow:none;--bs-btn-focus-shadow-rgb:49,132,253;text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--bs-btn-padding-y:0.5rem;--bs-btn-padding-x:1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius:0.5rem}.btn-group-sm>.btn,.btn-sm{--bs-btn-padding-y:0.25rem;--bs-btn-padding-x:0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius:0.25rem}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media (prefers-reduced-motion:reduce){.collapsing.collapse-horizontal{transition:none}}.dropdown,.dropdown-center,.dropend,.dropstart,.dropup,.dropup-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-left:.3em solid transparent;border-bottom:0;border-right:.3em solid transparent}.dropdown-toggle:empty::after{margin-right:0}.dropdown-menu{--bs-dropdown-zindex:1000;--bs-dropdown-min-width:10rem;--bs-dropdown-padding-x:0;--bs-dropdown-padding-y:0.5rem;--bs-dropdown-spacer:0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color:var(--bs-body-color);--bs-dropdown-bg:var(--bs-body-bg);--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-border-radius:0.375rem;--bs-dropdown-border-width:var(--bs-border-width);--bs-dropdown-inner-border-radius:calc(0.375rem - var(--bs-border-width));--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y:0.5rem;--bs-dropdown-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-dropdown-link-color:var(--bs-body-color);--bs-dropdown-link-hover-color:var(--bs-body-color);--bs-dropdown-link-hover-bg:var(--bs-tertiary-bg);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-item-padding-x:1rem;--bs-dropdown-item-padding-y:0.25rem;--bs-dropdown-header-color:#6c757d;--bs-dropdown-header-padding-x:1rem;--bs-dropdown-header-padding-y:0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:right;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;right:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:0;border-left:.3em solid transparent;border-bottom:.3em solid;border-right:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-right:0}.dropend .dropdown-menu[data-bs-popper]{top:0;left:auto;right:100%;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-left:0;border-bottom:.3em solid transparent;border-right:.3em solid}.dropend .dropdown-toggle:empty::after{margin-right:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;left:100%;right:auto;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-right:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-left:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-right:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;white-space:nowrap;background-color:transparent;border:0;border-radius:var(--bs-dropdown-item-border-radius,0)}.dropdown-item:focus,.dropdown-item:hover{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color:#dee2e6;--bs-dropdown-bg:#343a40;--bs-dropdown-border-color:var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color:#dee2e6;--bs-dropdown-link-hover-color:#fff;--bs-dropdown-divider-bg:var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg:rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color:#fff;--bs-dropdown-link-active-bg:#0d6efd;--bs-dropdown-link-disabled-color:#adb5bd;--bs-dropdown-header-color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.375rem}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-right:calc(var(--bs-border-width) * -1)}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-right:0}.dropstart .dropdown-toggle-split::before{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:calc(var(--bs-border-width) * -1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn~.btn{border-top-right-radius:0;border-top-left-radius:0}.nav{--bs-nav-link-padding-x:1rem;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-link-color);--bs-nav-link-hover-color:var(--bs-link-hover-color);--bs-nav-link-disabled-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding-right:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{color:var(--bs-nav-link-hover-color)}.nav-link.disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width:var(--bs-border-width);--bs-nav-tabs-border-color:var(--bs-border-color);--bs-nav-tabs-border-radius:var(--bs-border-radius);--bs-nav-tabs-link-hover-border-color:var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);--bs-nav-tabs-link-active-color:var(--bs-emphasis-color);--bs-nav-tabs-link-active-bg:var(--bs-body-bg);--bs-nav-tabs-link-active-border-color:var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));background:0 0;border:var(--bs-nav-tabs-border-width) solid transparent;border-top-right-radius:var(--bs-nav-tabs-border-radius);border-top-left-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-right-radius:0;border-top-left-radius:0}.nav-pills{--bs-nav-pills-border-radius:0.375rem;--bs-nav-pills-link-active-color:#fff;--bs-nav-pills-link-active-bg:#0d6efd}.nav-pills .nav-link{background:0 0;border:0;border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x:0;--bs-navbar-padding-y:0.5rem;--bs-navbar-color:rgba(var(--bs-emphasis-color-rgb), 0.65);--bs-navbar-hover-color:rgba(var(--bs-emphasis-color-rgb), 0.8);--bs-navbar-disabled-color:rgba(var(--bs-emphasis-color-rgb), 0.3);--bs-navbar-active-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-padding-y:0.3125rem;--bs-navbar-brand-margin-end:1rem;--bs-navbar-brand-font-size:1.25rem;--bs-navbar-brand-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-brand-hover-color:rgba(var(--bs-emphasis-color-rgb), 1);--bs-navbar-nav-link-padding-x:0.5rem;--bs-navbar-toggler-padding-y:0.25rem;--bs-navbar-toggler-padding-x:0.75rem;--bs-navbar-toggler-font-size:1.25rem;--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color:rgba(var(--bs-emphasis-color-rgb), 0.15);--bs-navbar-toggler-border-radius:0.375rem;--bs-navbar-toggler-focus-width:0.25rem;--bs-navbar-toggler-transition:box-shadow 0.15s ease-in-out;position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-left:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x:0;--bs-nav-link-padding-y:0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color:var(--bs-navbar-color);--bs-nav-link-hover-color:var(--bs-navbar-hover-color);--bs-nav-link-disabled-color:var(--bs-navbar-disabled-color);display:flex;flex-direction:column;padding-right:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .show>.nav-link{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height,75vh);overflow-y:auto}@media (min-width:576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media (min-width:1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:var(--bs-navbar-nav-link-padding-x);padding-right:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;width:auto!important;height:auto!important;visibility:visible!important;background-color:transparent!important;border:0!important;transform:none!important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-dark{--bs-navbar-color:rgba(255, 255, 255, 0.55);--bs-navbar-hover-color:rgba(255, 255, 255, 0.75);--bs-navbar-disabled-color:rgba(255, 255, 255, 0.25);--bs-navbar-active-color:#fff;--bs-navbar-brand-color:#fff;--bs-navbar-brand-hover-color:#fff;--bs-navbar-toggler-border-color:rgba(255, 255, 255, 0.1);--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar{--bs-navbar-toggler-icon-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y:1rem;--bs-card-spacer-x:1rem;--bs-card-title-spacer-y:0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width:var(--bs-border-width);--bs-card-border-color:var(--bs-border-color-translucent);--bs-card-border-radius:var(--bs-border-radius);--bs-card-box-shadow: ;--bs-card-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-card-cap-padding-y:0.5rem;--bs-card-cap-padding-x:1rem;--bs-card-cap-bg:rgba(var(--bs-body-color-rgb), 0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg:var(--bs-body-bg);--bs-card-img-overlay-padding:1rem;--bs-card-group-margin:0.75rem;position:relative;display:flex;flex-direction:column;min-width:0;height:var(--bs-card-height);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-right-radius:var(--bs-card-inner-border-radius);border-top-left-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-right:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-left:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-right:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-left:calc(-.5 * var(--bs-card-cap-padding-x));margin-right:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;left:0;bottom:0;right:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-right-radius:var(--bs-card-inner-border-radius);border-top-left-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-right:0;border-right:0}.card-group>.card:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-right-radius:0}}.accordion{--bs-accordion-color:var(--bs-body-color);--bs-accordion-bg:var(--bs-body-bg);--bs-accordion-transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color:var(--bs-border-color);--bs-accordion-border-width:var(--bs-border-width);--bs-accordion-border-radius:var(--bs-border-radius);--bs-accordion-inner-border-radius:calc(var(--bs-border-radius) - (var(--bs-border-width)));--bs-accordion-btn-padding-x:1.25rem;--bs-accordion-btn-padding-y:1rem;--bs-accordion-btn-color:var(--bs-body-color);--bs-accordion-btn-bg:var(--bs-accordion-bg);--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width:1.25rem;--bs-accordion-btn-icon-transform:rotate(-180deg);--bs-accordion-btn-icon-transition:transform 0.2s ease-in-out;--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230a58ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color:#86b7fe;--bs-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-accordion-body-padding-x:1.25rem;--bs-accordion-body-padding-y:1rem;--bs-accordion-active-color:var(--bs-primary-text);--bs-accordion-active-bg:var(--bs-primary-bg-subtle)}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:right;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-right:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion:reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-right-radius:var(--bs-accordion-border-radius);border-top-left-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-right-radius:var(--bs-accordion-inner-border-radius);border-top-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:var(--bs-accordion-inner-border-radius);border-bottom-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:var(--bs-accordion-border-radius);border-bottom-right-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-right:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x:0;--bs-breadcrumb-padding-y:0;--bs-breadcrumb-margin-bottom:1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color:var(--bs-secondary-color);--bs-breadcrumb-item-padding-x:0.5rem;--bs-breadcrumb-item-active-color:var(--bs-secondary-color);display:flex;flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-right:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:right;padding-left:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/")}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x:0.75rem;--bs-pagination-padding-y:0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color:var(--bs-link-color);--bs-pagination-bg:var(--bs-body-bg);--bs-pagination-border-width:var(--bs-border-width);--bs-pagination-border-color:var(--bs-border-color);--bs-pagination-border-radius:var(--bs-border-radius);--bs-pagination-hover-color:var(--bs-link-hover-color);--bs-pagination-hover-bg:var(--bs-tertiary-bg);--bs-pagination-hover-border-color:var(--bs-border-color);--bs-pagination-focus-color:var(--bs-link-hover-color);--bs-pagination-focus-bg:var(--bs-secondary-bg);--bs-pagination-focus-box-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-pagination-active-color:#fff;--bs-pagination-active-bg:#0d6efd;--bs-pagination-active-border-color:#0d6efd;--bs-pagination-disabled-color:var(--bs-secondary-color);--bs-pagination-disabled-bg:var(--bs-secondary-bg);--bs-pagination-disabled-border-color:var(--bs-border-color);display:flex;padding-right:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.active>.page-link,.page-link.active{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.disabled>.page-link,.page-link.disabled{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-right:calc(var(--bs-border-width) * -1)}.page-item:first-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x:1.5rem;--bs-pagination-padding-y:0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius:0.5rem}.pagination-sm{--bs-pagination-padding-x:0.5rem;--bs-pagination-padding-y:0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius:0.25rem}.badge{--bs-badge-padding-x:0.65em;--bs-badge-padding-y:0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight:700;--bs-badge-color:#fff;--bs-badge-border-radius:0.375rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg:transparent;--bs-alert-padding-x:1rem;--bs-alert-padding-y:1rem;--bs-alert-margin-bottom:1rem;--bs-alert-color:inherit;--bs-alert-border-color:transparent;--bs-alert-border:var(--bs-border-width) solid var(--bs-alert-border-color);--bs-alert-border-radius:0.375rem;--bs-alert-link-color:inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{position:absolute;top:0;left:0;z-index:2;padding:1.25rem 1rem}.alert-primary{--bs-alert-color:var(--bs-primary-text);--bs-alert-bg:var(--bs-primary-bg-subtle);--bs-alert-border-color:var(--bs-primary-border-subtle);--bs-alert-link-color:var(--bs-primary-text)}.alert-secondary{--bs-alert-color:var(--bs-secondary-text);--bs-alert-bg:var(--bs-secondary-bg-subtle);--bs-alert-border-color:var(--bs-secondary-border-subtle);--bs-alert-link-color:var(--bs-secondary-text)}.alert-success{--bs-alert-color:var(--bs-success-text);--bs-alert-bg:var(--bs-success-bg-subtle);--bs-alert-border-color:var(--bs-success-border-subtle);--bs-alert-link-color:var(--bs-success-text)}.alert-info{--bs-alert-color:var(--bs-info-text);--bs-alert-bg:var(--bs-info-bg-subtle);--bs-alert-border-color:var(--bs-info-border-subtle);--bs-alert-link-color:var(--bs-info-text)}.alert-warning{--bs-alert-color:var(--bs-warning-text);--bs-alert-bg:var(--bs-warning-bg-subtle);--bs-alert-border-color:var(--bs-warning-border-subtle);--bs-alert-link-color:var(--bs-warning-text)}.alert-danger{--bs-alert-color:var(--bs-danger-text);--bs-alert-bg:var(--bs-danger-bg-subtle);--bs-alert-border-color:var(--bs-danger-border-subtle);--bs-alert-link-color:var(--bs-danger-text)}.alert-light{--bs-alert-color:var(--bs-light-text);--bs-alert-bg:var(--bs-light-bg-subtle);--bs-alert-border-color:var(--bs-light-border-subtle);--bs-alert-link-color:var(--bs-light-text)}.alert-dark{--bs-alert-color:var(--bs-dark-text);--bs-alert-bg:var(--bs-dark-bg-subtle);--bs-alert-border-color:var(--bs-dark-border-subtle);--bs-alert-link-color:var(--bs-dark-text)}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress,.progress-stacked{--bs-progress-height:1rem;--bs-progress-font-size:0.75rem;--bs-progress-bg:var(--bs-secondary-bg);--bs-progress-border-radius:var(--bs-border-radius);--bs-progress-box-shadow:var(--bs-box-shadow-inset);--bs-progress-bar-color:#fff;--bs-progress-bar-bg:#0d6efd;--bs-progress-bar-transition:width 0.6s ease;display:flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(-45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color:var(--bs-body-color);--bs-list-group-bg:var(--bs-body-bg);--bs-list-group-border-color:var(--bs-border-color);--bs-list-group-border-width:var(--bs-border-width);--bs-list-group-border-radius:var(--bs-border-radius);--bs-list-group-item-padding-x:1rem;--bs-list-group-item-padding-y:0.5rem;--bs-list-group-action-color:var(--bs-secondary-color);--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-tertiary-bg);--bs-list-group-action-active-color:var(--bs-body-color);--bs-list-group-action-active-bg:var(--bs-secondary-bg);--bs-list-group-disabled-color:var(--bs-secondary-color);--bs-list-group-disabled-bg:var(--bs-body-bg);--bs-list-group-active-color:#fff;--bs-list-group-active-bg:#0d6efd;--bs-list-group-active-border-color:#0d6efd;display:flex;flex-direction:column;padding-right:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-right-radius:inherit;border-top-left-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}@media (min-width:1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--bs-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-left-radius:var(--bs-list-group-border-radius);border-bottom-right-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-right-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-right:calc(-1 * var(--bs-list-group-border-width));border-right-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--bs-list-group-color:var(--bs-primary-text);--bs-list-group-bg:var(--bs-primary-bg-subtle);--bs-list-group-border-color:var(--bs-primary-border-subtle)}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-primary-border-subtle)}.list-group-item-primary.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-primary-text);--bs-list-group-active-border-color:var(--bs-primary-text)}.list-group-item-secondary{--bs-list-group-color:var(--bs-secondary-text);--bs-list-group-bg:var(--bs-secondary-bg-subtle);--bs-list-group-border-color:var(--bs-secondary-border-subtle)}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-secondary-border-subtle)}.list-group-item-secondary.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-secondary-text);--bs-list-group-active-border-color:var(--bs-secondary-text)}.list-group-item-success{--bs-list-group-color:var(--bs-success-text);--bs-list-group-bg:var(--bs-success-bg-subtle);--bs-list-group-border-color:var(--bs-success-border-subtle)}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-success-border-subtle)}.list-group-item-success.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-success-text);--bs-list-group-active-border-color:var(--bs-success-text)}.list-group-item-info{--bs-list-group-color:var(--bs-info-text);--bs-list-group-bg:var(--bs-info-bg-subtle);--bs-list-group-border-color:var(--bs-info-border-subtle)}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-info-border-subtle)}.list-group-item-info.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-info-text);--bs-list-group-active-border-color:var(--bs-info-text)}.list-group-item-warning{--bs-list-group-color:var(--bs-warning-text);--bs-list-group-bg:var(--bs-warning-bg-subtle);--bs-list-group-border-color:var(--bs-warning-border-subtle)}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-warning-border-subtle)}.list-group-item-warning.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-warning-text);--bs-list-group-active-border-color:var(--bs-warning-text)}.list-group-item-danger{--bs-list-group-color:var(--bs-danger-text);--bs-list-group-bg:var(--bs-danger-bg-subtle);--bs-list-group-border-color:var(--bs-danger-border-subtle)}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-danger-border-subtle)}.list-group-item-danger.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-danger-text);--bs-list-group-active-border-color:var(--bs-danger-text)}.list-group-item-light{--bs-list-group-color:var(--bs-light-text);--bs-list-group-bg:var(--bs-light-bg-subtle);--bs-list-group-border-color:var(--bs-light-border-subtle)}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-light-border-subtle)}.list-group-item-light.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-light-text);--bs-list-group-active-border-color:var(--bs-light-text)}.list-group-item-dark{--bs-list-group-color:var(--bs-dark-text);--bs-list-group-bg:var(--bs-dark-bg-subtle);--bs-list-group-border-color:var(--bs-dark-border-subtle)}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{--bs-list-group-action-hover-color:var(--bs-emphasis-color);--bs-list-group-action-hover-bg:var(--bs-dark-border-subtle)}.list-group-item-dark.list-group-item-action:active{--bs-list-group-active-color:var(--bs-emphasis-color);--bs-list-group-active-bg:var(--bs-dark-text);--bs-list-group-active-border-color:var(--bs-dark-text)}.btn-close{--bs-btn-close-color:#000;--bs-btn-close-bg:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity:0.5;--bs-btn-close-hover-opacity:0.75;--bs-btn-close-focus-shadow:0 0 0 0.25rem rgba(13, 110, 253, 0.25);--bs-btn-close-focus-opacity:1;--bs-btn-close-disabled-opacity:0.25;--bs-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:transparent var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close.disabled,.btn-close:disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex:1090;--bs-toast-padding-x:0.75rem;--bs-toast-padding-y:0.5rem;--bs-toast-spacing:1.5rem;--bs-toast-max-width:350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-border-width:var(--bs-border-width);--bs-toast-border-color:var(--bs-border-color-translucent);--bs-toast-border-radius:var(--bs-border-radius);--bs-toast-box-shadow:var(--bs-box-shadow);--bs-toast-header-color:var(--bs-secondary-color);--bs-toast-header-bg:rgba(var(--bs-body-bg-rgb), 0.85);--bs-toast-header-border-color:var(--bs-border-color-translucent);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex:1090;position:absolute;z-index:var(--bs-toast-zindex);width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-left:calc(-.5 * var(--bs-toast-padding-x));margin-right:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex:1055;--bs-modal-width:500px;--bs-modal-padding:1rem;--bs-modal-margin:0.5rem;--bs-modal-color: ;--bs-modal-bg:var(--bs-body-bg);--bs-modal-border-color:var(--bs-border-color-translucent);--bs-modal-border-width:var(--bs-border-width);--bs-modal-border-radius:var(--bs-border-radius-lg);--bs-modal-box-shadow:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-modal-inner-border-radius:calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));--bs-modal-header-padding-x:1rem;--bs-modal-header-padding-y:1rem;--bs-modal-header-padding:1rem 1rem;--bs-modal-header-border-color:var(--bs-border-color);--bs-modal-header-border-width:var(--bs-border-width);--bs-modal-title-line-height:1.5;--bs-modal-footer-gap:0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color:var(--bs-border-color);--bs-modal-footer-border-width:var(--bs-border-width);position:fixed;top:0;right:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex:1050;--bs-backdrop-bg:#000;--bs-backdrop-opacity:0.5;position:fixed;top:0;right:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-right-radius:var(--bs-modal-inner-border-radius);border-top-left-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) auto calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x))}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-left-radius:var(--bs-modal-inner-border-radius);border-bottom-right-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width:576px){.modal{--bs-modal-margin:1.75rem;--bs-modal-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-left:auto;margin-right:auto}.modal-sm{--bs-modal-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{--bs-modal-width:800px}}@media (min-width:1200px){.modal-xl{--bs-modal-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex:1080;--bs-tooltip-max-width:200px;--bs-tooltip-padding-x:0.5rem;--bs-tooltip-padding-y:0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color:var(--bs-body-bg);--bs-tooltip-bg:var(--bs-emphasis-color);--bs-tooltip-border-radius:var(--bs-border-radius);--bs-tooltip-opacity:0.9;--bs-tooltip-arrow-width:0.8rem;--bs-tooltip-arrow-height:0.4rem;z-index:var(--bs-tooltip-zindex);display:block;padding:var(--bs-tooltip-arrow-height);margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:0}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before,.bs-tooltip-top .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{left:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before,.bs-tooltip-end .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:0}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before,.bs-tooltip-bottom .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{right:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before,.bs-tooltip-start .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex:1070;--bs-popover-max-width:276px;--bs-popover-font-size:0.875rem;--bs-popover-bg:var(--bs-body-bg);--bs-popover-border-width:var(--bs-border-width);--bs-popover-border-color:var(--bs-border-color-translucent);--bs-popover-border-radius:var(--bs-border-radius-lg);--bs-popover-inner-border-radius:calc(var(--bs-border-radius-lg) - var(--bs-border-width));--bs-popover-box-shadow:0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);--bs-popover-header-padding-x:1rem;--bs-popover-header-padding-y:0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: ;--bs-popover-header-bg:var(--bs-secondary-bg);--bs-popover-body-padding-x:1rem;--bs-popover-body-padding-y:1rem;--bs-popover-body-color:var(--bs-body-color);--bs-popover-arrow-width:1rem;--bs-popover-arrow-height:0.5rem;--bs-popover-arrow-border:var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::after,.popover .popover-arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-top>.popover-arrow::before{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after,.bs-popover-top>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-end>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after,.bs-popover-end>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::before{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after,.bs-popover-bottom>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;right:50%;display:block;width:var(--bs-popover-arrow-width);margin-right:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-start>.popover-arrow::before{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after,.bs-popover-start>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-right-radius:var(--bs-popover-inner-border-radius);border-top-left-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:right;width:100%;margin-left:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-end,.carousel-item-next:not(.carousel-item-start){transform:translateX(-100%)}.active.carousel-item-start,.carousel-item-prev:not(.carousel-item-end){transform:translateX(100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:0 0;border:0;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{right:0}.carousel-control-next{left:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;left:0;bottom:0;right:0;z-index:2;display:flex;justify-content:center;padding:0;margin-left:15%;margin-bottom:1rem;margin-right:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;padding:0;margin-left:3px;margin-right:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;left:15%;bottom:1.25rem;right:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-next-icon,.carousel-dark .carousel-control-prev-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark] .carousel .carousel-control-prev-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption{color:#000}.spinner-border,.spinner-grow{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-border-width:0.25em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-left-color:transparent}.spinner-border-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem;--bs-spinner-border-width:0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width:2rem;--bs-spinner-height:2rem;--bs-spinner-vertical-align:-0.125em;--bs-spinner-animation-speed:0.75s;--bs-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width:1rem;--bs-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--bs-offcanvas-zindex:1045;--bs-offcanvas-width:400px;--bs-offcanvas-height:30vh;--bs-offcanvas-padding-x:1rem;--bs-offcanvas-padding-y:1rem;--bs-offcanvas-color:var(--bs-body-color);--bs-offcanvas-bg:var(--bs-body-bg);--bs-offcanvas-border-width:var(--bs-border-width);--bs-offcanvas-border-color:var(--bs-border-color-translucent);--bs-offcanvas-box-shadow:0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);--bs-offcanvas-transition:transform 0.3s ease-in-out;--bs-offcanvas-title-line-height:1.5}@media (max-width:575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:575.98px){.offcanvas-sm.show:not(.hiding),.offcanvas-sm.showing{transform:none}}@media (max-width:575.98px){.offcanvas-sm.hiding,.offcanvas-sm.show,.offcanvas-sm.showing{visibility:visible}}@media (min-width:576px){.offcanvas-sm{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:767.98px){.offcanvas-md.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:767.98px){.offcanvas-md.show:not(.hiding),.offcanvas-md.showing{transform:none}}@media (max-width:767.98px){.offcanvas-md.hiding,.offcanvas-md.show,.offcanvas-md.showing{visibility:visible}}@media (min-width:768px){.offcanvas-md{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:991.98px){.offcanvas-lg.show:not(.hiding),.offcanvas-lg.showing{transform:none}}@media (max-width:991.98px){.offcanvas-lg.hiding,.offcanvas-lg.show,.offcanvas-lg.showing{visibility:visible}}@media (min-width:992px){.offcanvas-lg{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:1199.98px){.offcanvas-xl.show:not(.hiding),.offcanvas-xl.showing{transform:none}}@media (max-width:1199.98px){.offcanvas-xl.hiding,.offcanvas-xl.show,.offcanvas-xl.showing{visibility:visible}}@media (min-width:1200px){.offcanvas-xl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}@media (max-width:1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}}@media (max-width:1399.98px){.offcanvas-xxl.show:not(.hiding),.offcanvas-xxl.showing{transform:none}}@media (max-width:1399.98px){.offcanvas-xxl.hiding,.offcanvas-xxl.show,.offcanvas-xxl.showing{visibility:visible}}@media (min-width:1400px){.offcanvas-xxl{--bs-offcanvas-height:auto;--bs-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible;background-color:transparent!important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-end{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-top{top:0;left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{left:0;right:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;right:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;align-items:center;justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-left:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,0.8) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{-webkit-mask-position:-200% 0%;mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-primary{color:#fff!important;background-color:RGBA(13,110,253,var(--bs-bg-opacity,1))!important}.text-bg-secondary{color:#fff!important;background-color:RGBA(108,117,125,var(--bs-bg-opacity,1))!important}.text-bg-success{color:#fff!important;background-color:RGBA(25,135,84,var(--bs-bg-opacity,1))!important}.text-bg-info{color:#000!important;background-color:RGBA(13,202,240,var(--bs-bg-opacity,1))!important}.text-bg-warning{color:#000!important;background-color:RGBA(255,193,7,var(--bs-bg-opacity,1))!important}.text-bg-danger{color:#fff!important;background-color:RGBA(220,53,69,var(--bs-bg-opacity,1))!important}.text-bg-light{color:#000!important;background-color:RGBA(248,249,250,var(--bs-bg-opacity,1))!important}.text-bg-dark{color:#fff!important;background-color:RGBA(33,37,41,var(--bs-bg-opacity,1))!important}.link-primary{color:#0d6efd!important}.link-primary:focus,.link-primary:hover{color:#0a58ca!important}.link-secondary{color:#6c757d!important}.link-secondary:focus,.link-secondary:hover{color:#565e64!important}.link-success{color:#198754!important}.link-success:focus,.link-success:hover{color:#146c43!important}.link-info{color:#0dcaf0!important}.link-info:focus,.link-info:hover{color:#3dd5f3!important}.link-warning{color:#ffc107!important}.link-warning:focus,.link-warning:hover{color:#ffcd39!important}.link-danger{color:#dc3545!important}.link-danger:focus,.link-danger:hover{color:#b02a37!important}.link-light{color:#f8f9fa!important}.link-light:focus,.link-light:hover{color:#f9fafb!important}.link-dark{color:#212529!important}.link-dark:focus,.link-dark:hover{color:#1a1e21!important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio:100%}.ratio-4x3{--bs-aspect-ratio:75%}.ratio-16x9{--bs-aspect-ratio:56.25%}.ratio-21x9{--bs-aspect-ratio:42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}@media (min-width:576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:-webkit-sticky;position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:right!important}.float-end{float:left!important}.float-none{float:none!important}.object-fit-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-none{-o-object-fit:none!important;object-fit:none!important}.opacity-0{opacity:0!important}.opacity-25{opacity:.25!important}.opacity-50{opacity:.5!important}.opacity-75{opacity:.75!important}.opacity-100{opacity:1!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.overflow-visible{overflow:visible!important}.overflow-scroll{overflow:scroll!important}.overflow-x-auto{overflow-x:auto!important}.overflow-x-hidden{overflow-x:hidden!important}.overflow-x-visible{overflow-x:visible!important}.overflow-x-scroll{overflow-x:scroll!important}.overflow-y-auto{overflow-y:auto!important}.overflow-y-hidden{overflow-y:hidden!important}.overflow-y-visible{overflow-y:visible!important}.overflow-y-scroll{overflow-y:scroll!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.shadow{box-shadow:0 .5rem 1rem rgba(var(--bs-body-color-rgb),.15)!important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(var(--bs-body-color-rgb),.075)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(var(--bs-body-color-rgb),.175)!important}.shadow-none{box-shadow:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{right:0!important}.start-50{right:50%!important}.start-100{right:100%!important}.end-0{left:0!important}.end-50{left:50%!important}.end-100{left:100%!important}.translate-middle{transform:translate(50%,-50%)!important}.translate-middle-x{transform:translateX(50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-0{border:0!important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-top-0{border-top:0!important}.border-end{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-end-0{border-left:0!important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important}.border-start-0{border-right:0!important}.border-primary{--bs-border-opacity:1;border-color:rgba(var(--bs-primary-rgb),var(--bs-border-opacity))!important}.border-secondary{--bs-border-opacity:1;border-color:rgba(var(--bs-secondary-rgb),var(--bs-border-opacity))!important}.border-success{--bs-border-opacity:1;border-color:rgba(var(--bs-success-rgb),var(--bs-border-opacity))!important}.border-info{--bs-border-opacity:1;border-color:rgba(var(--bs-info-rgb),var(--bs-border-opacity))!important}.border-warning{--bs-border-opacity:1;border-color:rgba(var(--bs-warning-rgb),var(--bs-border-opacity))!important}.border-danger{--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important}.border-light{--bs-border-opacity:1;border-color:rgba(var(--bs-light-rgb),var(--bs-border-opacity))!important}.border-dark{--bs-border-opacity:1;border-color:rgba(var(--bs-dark-rgb),var(--bs-border-opacity))!important}.border-white{--bs-border-opacity:1;border-color:rgba(var(--bs-white-rgb),var(--bs-border-opacity))!important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--bs-success-border-subtle)!important}.border-info-subtle{border-color:var(--bs-info-border-subtle)!important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle)!important}.border-light-subtle{border-color:var(--bs-light-border-subtle)!important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle)!important}.border-1{--bs-border-width:1px}.border-2{--bs-border-width:2px}.border-3{--bs-border-width:3px}.border-4{--bs-border-width:4px}.border-5{--bs-border-width:5px}.border-opacity-10{--bs-border-opacity:0.1}.border-opacity-25{--bs-border-opacity:0.25}.border-opacity-50{--bs-border-opacity:0.5}.border-opacity-75{--bs-border-opacity:0.75}.border-opacity-100{--bs-border-opacity:1}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.mw-100{max-width:100%!important}.vw-100{width:100vw!important}.min-vw-100{min-width:100vw!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mh-100{max-height:100%!important}.vh-100{height:100vh!important}.min-vh-100{min-height:100vh!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:3rem!important}.me-auto{margin-left:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:3rem!important}.ms-auto{margin-right:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:3rem!important}.gap-0{gap:0!important}.gap-1{gap:.25rem!important}.gap-2{gap:.5rem!important}.gap-3{gap:1rem!important}.gap-4{gap:1.5rem!important}.gap-5{gap:3rem!important}.row-gap-0{row-gap:0!important}.row-gap-1{row-gap:.25rem!important}.row-gap-2{row-gap:.5rem!important}.row-gap-3{row-gap:1rem!important}.row-gap-4{row-gap:1.5rem!important}.row-gap-5{row-gap:3rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.font-monospace{font-family:var(--bs-font-monospace)!important}.fs-1{font-size:calc(1.375rem + 1.5vw)!important}.fs-2{font-size:calc(1.325rem + .9vw)!important}.fs-3{font-size:calc(1.3rem + .6vw)!important}.fs-4{font-size:calc(1.275rem + .3vw)!important}.fs-5{font-size:1.25rem!important}.fs-6{font-size:1rem!important}.fst-italic{font-style:italic!important}.fst-normal{font-style:normal!important}.fw-lighter{font-weight:lighter!important}.fw-light{font-weight:300!important}.fw-normal{font-weight:400!important}.fw-medium{font-weight:500!important}.fw-semibold{font-weight:600!important}.fw-bold{font-weight:700!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.25!important}.lh-base{line-height:1.5!important}.lh-lg{line-height:2!important}.text-start{text-align:right!important}.text-end{text-align:left!important}.text-center{text-align:center!important}.text-decoration-none{text-decoration:none!important}.text-decoration-underline{text-decoration:underline!important}.text-decoration-line-through{text-decoration:line-through!important}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-primary{--bs-text-opacity:1;color:rgba(var(--bs-primary-rgb),var(--bs-text-opacity))!important}.text-secondary{--bs-text-opacity:1;color:rgba(var(--bs-secondary-rgb),var(--bs-text-opacity))!important}.text-success{--bs-text-opacity:1;color:rgba(var(--bs-success-rgb),var(--bs-text-opacity))!important}.text-info{--bs-text-opacity:1;color:rgba(var(--bs-info-rgb),var(--bs-text-opacity))!important}.text-warning{--bs-text-opacity:1;color:rgba(var(--bs-warning-rgb),var(--bs-text-opacity))!important}.text-danger{--bs-text-opacity:1;color:rgba(var(--bs-danger-rgb),var(--bs-text-opacity))!important}.text-light{--bs-text-opacity:1;color:rgba(var(--bs-light-rgb),var(--bs-text-opacity))!important}.text-dark{--bs-text-opacity:1;color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.text-black{--bs-text-opacity:1;color:rgba(var(--bs-black-rgb),var(--bs-text-opacity))!important}.text-white{--bs-text-opacity:1;color:rgba(var(--bs-white-rgb),var(--bs-text-opacity))!important}.text-body{--bs-text-opacity:1;color:rgba(var(--bs-body-color-rgb),var(--bs-text-opacity))!important}.text-muted{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-black-50{--bs-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--bs-text-opacity:1;color:rgba(255,255,255,.5)!important}.text-body-secondary{--bs-text-opacity:1;color:var(--bs-secondary-color)!important}.text-body-tertiary{--bs-text-opacity:1;color:var(--bs-tertiary-color)!important}.text-body-emphasis{--bs-text-opacity:1;color:var(--bs-emphasis-color)!important}.text-reset{--bs-text-opacity:1;color:inherit!important}.text-opacity-25{--bs-text-opacity:0.25}.text-opacity-50{--bs-text-opacity:0.5}.text-opacity-75{--bs-text-opacity:0.75}.text-opacity-100{--bs-text-opacity:1}.text-primary-emphasis{color:var(--bs-primary-text)!important}.text-secondary-emphasis{color:var(--bs-secondary-text)!important}.text-success-emphasis{color:var(--bs-success-text)!important}.text-info-emphasis{color:var(--bs-info-text)!important}.text-warning-emphasis{color:var(--bs-warning-text)!important}.text-danger-emphasis{color:var(--bs-danger-text)!important}.text-light-emphasis{color:var(--bs-light-text)!important}.text-dark-emphasis{color:var(--bs-dark-text)!important}.bg-primary{--bs-bg-opacity:1;background-color:rgba(var(--bs-primary-rgb),var(--bs-bg-opacity))!important}.bg-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-rgb),var(--bs-bg-opacity))!important}.bg-success{--bs-bg-opacity:1;background-color:rgba(var(--bs-success-rgb),var(--bs-bg-opacity))!important}.bg-info{--bs-bg-opacity:1;background-color:rgba(var(--bs-info-rgb),var(--bs-bg-opacity))!important}.bg-warning{--bs-bg-opacity:1;background-color:rgba(var(--bs-warning-rgb),var(--bs-bg-opacity))!important}.bg-danger{--bs-bg-opacity:1;background-color:rgba(var(--bs-danger-rgb),var(--bs-bg-opacity))!important}.bg-light{--bs-bg-opacity:1;background-color:rgba(var(--bs-light-rgb),var(--bs-bg-opacity))!important}.bg-dark{--bs-bg-opacity:1;background-color:rgba(var(--bs-dark-rgb),var(--bs-bg-opacity))!important}.bg-black{--bs-bg-opacity:1;background-color:rgba(var(--bs-black-rgb),var(--bs-bg-opacity))!important}.bg-white{--bs-bg-opacity:1;background-color:rgba(var(--bs-white-rgb),var(--bs-bg-opacity))!important}.bg-body{--bs-bg-opacity:1;background-color:rgba(var(--bs-body-bg-rgb),var(--bs-bg-opacity))!important}.bg-transparent{--bs-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--bs-bg-opacity:1;background-color:rgba(var(--bs-secondary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-tertiary{--bs-bg-opacity:1;background-color:rgba(var(--bs-tertiary-bg-rgb),var(--bs-bg-opacity))!important}.bg-body-emphasis{--bs-bg-opacity:1;background-color:rgba(var(--bs-emphasis-bg-rgb),var(--bs-bg-opacity))!important}.bg-opacity-10{--bs-bg-opacity:0.1}.bg-opacity-25{--bs-bg-opacity:0.25}.bg-opacity-50{--bs-bg-opacity:0.5}.bg-opacity-75{--bs-bg-opacity:0.75}.bg-opacity-100{--bs-bg-opacity:1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle)!important}.bg-gradient{background-image:var(--bs-gradient)!important}.user-select-all{-webkit-user-select:all!important;-moz-user-select:all!important;user-select:all!important}.user-select-auto{-webkit-user-select:auto!important;-moz-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--bs-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--bs-border-radius-sm)!important}.rounded-2{border-radius:var(--bs-border-radius)!important}.rounded-3{border-radius:var(--bs-border-radius-lg)!important}.rounded-4{border-radius:var(--bs-border-radius-xl)!important}.rounded-5{border-radius:var(--bs-border-radius-2xl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--bs-border-radius-pill)!important}.rounded-top{border-top-right-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-top-0{border-top-right-radius:0!important;border-top-left-radius:0!important}.rounded-top-1{border-top-right-radius:var(--bs-border-radius-sm)!important;border-top-left-radius:var(--bs-border-radius-sm)!important}.rounded-top-2{border-top-right-radius:var(--bs-border-radius)!important;border-top-left-radius:var(--bs-border-radius)!important}.rounded-top-3{border-top-right-radius:var(--bs-border-radius-lg)!important;border-top-left-radius:var(--bs-border-radius-lg)!important}.rounded-top-4{border-top-right-radius:var(--bs-border-radius-xl)!important;border-top-left-radius:var(--bs-border-radius-xl)!important}.rounded-top-5{border-top-right-radius:var(--bs-border-radius-2xl)!important;border-top-left-radius:var(--bs-border-radius-2xl)!important}.rounded-top-circle{border-top-right-radius:50%!important;border-top-left-radius:50%!important}.rounded-top-pill{border-top-right-radius:var(--bs-border-radius-pill)!important;border-top-left-radius:var(--bs-border-radius-pill)!important}.rounded-end{border-top-left-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-end-0{border-top-left-radius:0!important;border-bottom-left-radius:0!important}.rounded-end-1{border-top-left-radius:var(--bs-border-radius-sm)!important;border-bottom-left-radius:var(--bs-border-radius-sm)!important}.rounded-end-2{border-top-left-radius:var(--bs-border-radius)!important;border-bottom-left-radius:var(--bs-border-radius)!important}.rounded-end-3{border-top-left-radius:var(--bs-border-radius-lg)!important;border-bottom-left-radius:var(--bs-border-radius-lg)!important}.rounded-end-4{border-top-left-radius:var(--bs-border-radius-xl)!important;border-bottom-left-radius:var(--bs-border-radius-xl)!important}.rounded-end-5{border-top-left-radius:var(--bs-border-radius-2xl)!important;border-bottom-left-radius:var(--bs-border-radius-2xl)!important}.rounded-end-circle{border-top-left-radius:50%!important;border-bottom-left-radius:50%!important}.rounded-end-pill{border-top-left-radius:var(--bs-border-radius-pill)!important;border-bottom-left-radius:var(--bs-border-radius-pill)!important}.rounded-bottom{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-bottom-1{border-bottom-left-radius:var(--bs-border-radius-sm)!important;border-bottom-right-radius:var(--bs-border-radius-sm)!important}.rounded-bottom-2{border-bottom-left-radius:var(--bs-border-radius)!important;border-bottom-right-radius:var(--bs-border-radius)!important}.rounded-bottom-3{border-bottom-left-radius:var(--bs-border-radius-lg)!important;border-bottom-right-radius:var(--bs-border-radius-lg)!important}.rounded-bottom-4{border-bottom-left-radius:var(--bs-border-radius-xl)!important;border-bottom-right-radius:var(--bs-border-radius-xl)!important}.rounded-bottom-5{border-bottom-left-radius:var(--bs-border-radius-2xl)!important;border-bottom-right-radius:var(--bs-border-radius-2xl)!important}.rounded-bottom-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-bottom-pill{border-bottom-left-radius:var(--bs-border-radius-pill)!important;border-bottom-right-radius:var(--bs-border-radius-pill)!important}.rounded-start{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-start-0{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-start-1{border-bottom-right-radius:var(--bs-border-radius-sm)!important;border-top-right-radius:var(--bs-border-radius-sm)!important}.rounded-start-2{border-bottom-right-radius:var(--bs-border-radius)!important;border-top-right-radius:var(--bs-border-radius)!important}.rounded-start-3{border-bottom-right-radius:var(--bs-border-radius-lg)!important;border-top-right-radius:var(--bs-border-radius-lg)!important}.rounded-start-4{border-bottom-right-radius:var(--bs-border-radius-xl)!important;border-top-right-radius:var(--bs-border-radius-xl)!important}.rounded-start-5{border-bottom-right-radius:var(--bs-border-radius-2xl)!important;border-top-right-radius:var(--bs-border-radius-2xl)!important}.rounded-start-circle{border-bottom-right-radius:50%!important;border-top-right-radius:50%!important}.rounded-start-pill{border-bottom-right-radius:var(--bs-border-radius-pill)!important;border-top-right-radius:var(--bs-border-radius-pill)!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}.z-n1{z-index:-1!important}.z-0{z-index:0!important}.z-1{z-index:1!important}.z-2{z-index:2!important}.z-3{z-index:3!important}@media (min-width:576px){.float-sm-start{float:right!important}.float-sm-end{float:left!important}.float-sm-none{float:none!important}.object-fit-sm-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-sm-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-sm-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-sm-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-sm-none{-o-object-fit:none!important;object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:3rem!important}.me-sm-auto{margin-left:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:3rem!important}.ms-sm-auto{margin-right:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:3rem!important}.gap-sm-0{gap:0!important}.gap-sm-1{gap:.25rem!important}.gap-sm-2{gap:.5rem!important}.gap-sm-3{gap:1rem!important}.gap-sm-4{gap:1.5rem!important}.gap-sm-5{gap:3rem!important}.row-gap-sm-0{row-gap:0!important}.row-gap-sm-1{row-gap:.25rem!important}.row-gap-sm-2{row-gap:.5rem!important}.row-gap-sm-3{row-gap:1rem!important}.row-gap-sm-4{row-gap:1.5rem!important}.row-gap-sm-5{row-gap:3rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-sm-start{text-align:right!important}.text-sm-end{text-align:left!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.float-md-start{float:right!important}.float-md-end{float:left!important}.float-md-none{float:none!important}.object-fit-md-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-md-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-md-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-md-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-md-none{-o-object-fit:none!important;object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:3rem!important}.me-md-auto{margin-left:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:3rem!important}.ms-md-auto{margin-right:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:3rem!important}.gap-md-0{gap:0!important}.gap-md-1{gap:.25rem!important}.gap-md-2{gap:.5rem!important}.gap-md-3{gap:1rem!important}.gap-md-4{gap:1.5rem!important}.gap-md-5{gap:3rem!important}.row-gap-md-0{row-gap:0!important}.row-gap-md-1{row-gap:.25rem!important}.row-gap-md-2{row-gap:.5rem!important}.row-gap-md-3{row-gap:1rem!important}.row-gap-md-4{row-gap:1.5rem!important}.row-gap-md-5{row-gap:3rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-md-start{text-align:right!important}.text-md-end{text-align:left!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.float-lg-start{float:right!important}.float-lg-end{float:left!important}.float-lg-none{float:none!important}.object-fit-lg-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-lg-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-lg-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-lg-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-lg-none{-o-object-fit:none!important;object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:3rem!important}.me-lg-auto{margin-left:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:3rem!important}.ms-lg-auto{margin-right:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:3rem!important}.gap-lg-0{gap:0!important}.gap-lg-1{gap:.25rem!important}.gap-lg-2{gap:.5rem!important}.gap-lg-3{gap:1rem!important}.gap-lg-4{gap:1.5rem!important}.gap-lg-5{gap:3rem!important}.row-gap-lg-0{row-gap:0!important}.row-gap-lg-1{row-gap:.25rem!important}.row-gap-lg-2{row-gap:.5rem!important}.row-gap-lg-3{row-gap:1rem!important}.row-gap-lg-4{row-gap:1.5rem!important}.row-gap-lg-5{row-gap:3rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-lg-start{text-align:right!important}.text-lg-end{text-align:left!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.float-xl-start{float:right!important}.float-xl-end{float:left!important}.float-xl-none{float:none!important}.object-fit-xl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xl-none{-o-object-fit:none!important;object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:3rem!important}.me-xl-auto{margin-left:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:3rem!important}.ms-xl-auto{margin-right:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:3rem!important}.gap-xl-0{gap:0!important}.gap-xl-1{gap:.25rem!important}.gap-xl-2{gap:.5rem!important}.gap-xl-3{gap:1rem!important}.gap-xl-4{gap:1.5rem!important}.gap-xl-5{gap:3rem!important}.row-gap-xl-0{row-gap:0!important}.row-gap-xl-1{row-gap:.25rem!important}.row-gap-xl-2{row-gap:.5rem!important}.row-gap-xl-3{row-gap:1rem!important}.row-gap-xl-4{row-gap:1.5rem!important}.row-gap-xl-5{row-gap:3rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xl-start{text-align:right!important}.text-xl-end{text-align:left!important}.text-xl-center{text-align:center!important}}@media (min-width:1400px){.float-xxl-start{float:right!important}.float-xxl-end{float:left!important}.float-xxl-none{float:none!important}.object-fit-xxl-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-fit-xxl-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fit-xxl-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-fit-xxl-scale{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-fit-xxl-none{-o-object-fit:none!important;object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:3rem!important}.me-xxl-auto{margin-left:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:3rem!important}.ms-xxl-auto{margin-right:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:3rem!important}.gap-xxl-0{gap:0!important}.gap-xxl-1{gap:.25rem!important}.gap-xxl-2{gap:.5rem!important}.gap-xxl-3{gap:1rem!important}.gap-xxl-4{gap:1.5rem!important}.gap-xxl-5{gap:3rem!important}.row-gap-xxl-0{row-gap:0!important}.row-gap-xxl-1{row-gap:.25rem!important}.row-gap-xxl-2{row-gap:.5rem!important}.row-gap-xxl-3{row-gap:1rem!important}.row-gap-xxl-4{row-gap:1.5rem!important}.row-gap-xxl-5{row-gap:3rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:0.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:0.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:3rem!important;column-gap:3rem!important}.text-xxl-start{text-align:right!important}.text-xxl-end{text-align:left!important}.text-xxl-center{text-align:center!important}}@media (min-width:1200px){.fs-1{font-size:2.5rem!important}.fs-2{font-size:2rem!important}.fs-3{font-size:1.75rem!important}.fs-4{font-size:1.5rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}}
/*# sourceMappingURL=bootstrap.rtl.min.css.map */ \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css.map b/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css.map
index f7ae653a2..baadce0ef 100644
--- a/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css.map
+++ b/vendor/twbs/bootstrap/dist/css/bootstrap.rtl.min.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_reboot.scss","dist/css/bootstrap.rtl.css","../../scss/mixins/_border-radius.scss","bootstrap.css","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-right: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-right: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: right;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: right;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: right;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-right: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-right: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-left: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-right: 8.33333333%;\n}\n\n.offset-2 {\n margin-right: 16.66666667%;\n}\n\n.offset-3 {\n margin-right: 25%;\n}\n\n.offset-4 {\n margin-right: 33.33333333%;\n}\n\n.offset-5 {\n margin-right: 41.66666667%;\n}\n\n.offset-6 {\n margin-right: 50%;\n}\n\n.offset-7 {\n margin-right: 58.33333333%;\n}\n\n.offset-8 {\n margin-right: 66.66666667%;\n}\n\n.offset-9 {\n margin-right: 75%;\n}\n\n.offset-10 {\n margin-right: 83.33333333%;\n}\n\n.offset-11 {\n margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-right: 0;\n }\n .offset-sm-1 {\n margin-right: 8.33333333%;\n }\n .offset-sm-2 {\n margin-right: 16.66666667%;\n }\n .offset-sm-3 {\n margin-right: 25%;\n }\n .offset-sm-4 {\n margin-right: 33.33333333%;\n }\n .offset-sm-5 {\n margin-right: 41.66666667%;\n }\n .offset-sm-6 {\n margin-right: 50%;\n }\n .offset-sm-7 {\n margin-right: 58.33333333%;\n }\n .offset-sm-8 {\n margin-right: 66.66666667%;\n }\n .offset-sm-9 {\n margin-right: 75%;\n }\n .offset-sm-10 {\n margin-right: 83.33333333%;\n }\n .offset-sm-11 {\n margin-right: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-right: 0;\n }\n .offset-md-1 {\n margin-right: 8.33333333%;\n }\n .offset-md-2 {\n margin-right: 16.66666667%;\n }\n .offset-md-3 {\n margin-right: 25%;\n }\n .offset-md-4 {\n margin-right: 33.33333333%;\n }\n .offset-md-5 {\n margin-right: 41.66666667%;\n }\n .offset-md-6 {\n margin-right: 50%;\n }\n .offset-md-7 {\n margin-right: 58.33333333%;\n }\n .offset-md-8 {\n margin-right: 66.66666667%;\n }\n .offset-md-9 {\n margin-right: 75%;\n }\n .offset-md-10 {\n margin-right: 83.33333333%;\n }\n .offset-md-11 {\n margin-right: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-right: 0;\n }\n .offset-lg-1 {\n margin-right: 8.33333333%;\n }\n .offset-lg-2 {\n margin-right: 16.66666667%;\n }\n .offset-lg-3 {\n margin-right: 25%;\n }\n .offset-lg-4 {\n margin-right: 33.33333333%;\n }\n .offset-lg-5 {\n margin-right: 41.66666667%;\n }\n .offset-lg-6 {\n margin-right: 50%;\n }\n .offset-lg-7 {\n margin-right: 58.33333333%;\n }\n .offset-lg-8 {\n margin-right: 66.66666667%;\n }\n .offset-lg-9 {\n margin-right: 75%;\n }\n .offset-lg-10 {\n margin-right: 83.33333333%;\n }\n .offset-lg-11 {\n margin-right: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-right: 0;\n }\n .offset-xl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xl-3 {\n margin-right: 25%;\n }\n .offset-xl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xl-6 {\n margin-right: 50%;\n }\n .offset-xl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xl-9 {\n margin-right: 75%;\n }\n .offset-xl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xl-11 {\n margin-right: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-right: 0;\n }\n .offset-xxl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-right: 25%;\n }\n .offset-xxl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-right: 50%;\n }\n .offset-xxl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-right: 75%;\n }\n .offset-xxl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-right: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: 2px solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::-moz-placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control:disabled {\n background-color: #e9ecef;\n opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: #dde0e3;\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-left: 0;\n padding-right: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.form-select {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem 0.375rem 2.25rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: left 0.75rem center;\n background-size: 16px 12px;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-left: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-right: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-right: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-right: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: right;\n margin-right: -1.5em;\n}\n\n.form-check-reverse {\n padding-left: 1.5em;\n padding-right: 0;\n text-align: left;\n}\n.form-check-reverse .form-check-input {\n float: left;\n margin-left: -1.5em;\n margin-right: 0;\n}\n\n.form-check-input {\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: #fff;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: 1px solid rgba(0, 0, 0, 0.25);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-right: 2.5em;\n}\n.form-switch .form-check-input {\n width: 2em;\n margin-right: -2.5em;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n background-position: right center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: left center;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-left: 2.5em;\n padding-right: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-left: -2.5em;\n margin-right: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-left: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + 2px);\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: 1px solid transparent;\n transform-origin: 100% 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n color: transparent;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: 1px 0;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-left: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-right: -1px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #198754;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(25, 135, 84, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #198754;\n padding-left: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: left calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-left: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: #198754;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n padding-left: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: left 0.75rem center, center left 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-right: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-left: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: left calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-left: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n padding-left: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-position: left 0.75rem center, center left 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-right: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: 1px;\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-left: 0.3em solid transparent;\n border-bottom: 0;\n border-right: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-right: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: #212529;\n --bs-dropdown-bg: #fff;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: 1px;\n --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-dropdown-link-color: #212529;\n --bs-dropdown-link-hover-color: #1e2125;\n --bs-dropdown-link-hover-bg: #e9ecef;\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: right;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n right: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n left: auto;\n right: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n left: 0;\n right: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-left: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-right: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-right: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n left: auto;\n right: 100%;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-left: 0;\n border-bottom: 0.3em solid transparent;\n border-right: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-right: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n left: 100%;\n right: auto;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-left: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-right: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-right: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-left: 0.5625rem;\n padding-right: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-right: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-left: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding-right: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: 1px;\n --bs-nav-tabs-border-color: #dee2e6;\n --bs-nav-tabs-border-radius: 0.375rem;\n --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;\n --bs-nav-tabs-link-active-color: #495057;\n --bs-nav-tabs-link-active-bg: #fff;\n --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(0, 0, 0, 0.55);\n --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);\n --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);\n --bs-navbar-active-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-left: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-right: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-border-width: 1px;\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: 0.375rem;\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(0.375rem - 1px);\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(0, 0, 0, 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: #fff;\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-left: 0;\n margin-right: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-right-radius: var(--bs-card-inner-border-radius);\n border-top-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-right: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-right-radius: var(--bs-card-inner-border-radius);\n border-top-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-right: 0;\n border-right: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: #212529;\n --bs-accordion-bg: #fff;\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: 1px;\n --bs-accordion-border-radius: 0.375rem;\n --bs-accordion-inner-border-radius: calc(0.375rem - 1px);\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: #212529;\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: #0c63e4;\n --bs-accordion-active-bg: #e7f1ff;\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: right;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-right: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-right-radius: var(--bs-accordion-border-radius);\n border-top-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-left: 0;\n border-right: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: #6c757d;\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-right: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: right;\n padding-left: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") ;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: #fff;\n --bs-pagination-border-width: 1px;\n --bs-pagination-border-color: #dee2e6;\n --bs-pagination-border-radius: 0.375rem;\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: #e9ecef;\n --bs-pagination-hover-border-color: #dee2e6;\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: #e9ecef;\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: #6c757d;\n --bs-pagination-disabled-bg: #fff;\n --bs-pagination-disabled-border-color: #dee2e6;\n display: flex;\n padding-right: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-right: -1px;\n}\n.page-item:first-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: 1px solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-left: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: #084298;\n --bs-alert-bg: #cfe2ff;\n --bs-alert-border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n color: #06357a;\n}\n\n.alert-secondary {\n --bs-alert-color: #41464b;\n --bs-alert-bg: #e2e3e5;\n --bs-alert-border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n color: #34383c;\n}\n\n.alert-success {\n --bs-alert-color: #0f5132;\n --bs-alert-bg: #d1e7dd;\n --bs-alert-border-color: #badbcc;\n}\n.alert-success .alert-link {\n color: #0c4128;\n}\n\n.alert-info {\n --bs-alert-color: #055160;\n --bs-alert-bg: #cff4fc;\n --bs-alert-border-color: #b6effb;\n}\n.alert-info .alert-link {\n color: #04414d;\n}\n\n.alert-warning {\n --bs-alert-color: #664d03;\n --bs-alert-bg: #fff3cd;\n --bs-alert-border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n color: #523e02;\n}\n\n.alert-danger {\n --bs-alert-color: #842029;\n --bs-alert-bg: #f8d7da;\n --bs-alert-border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n color: #6a1a21;\n}\n\n.alert-light {\n --bs-alert-color: #636464;\n --bs-alert-bg: #fefefe;\n --bs-alert-border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n color: #4f5050;\n}\n\n.alert-dark {\n --bs-alert-color: #141619;\n --bs-alert-bg: #d3d3d4;\n --bs-alert-border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n color: #101214;\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: #e9ecef;\n --bs-progress-border-radius: 0.375rem;\n --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: #212529;\n --bs-list-group-bg: #fff;\n --bs-list-group-border-color: rgba(0, 0, 0, 0.125);\n --bs-list-group-border-width: 1px;\n --bs-list-group-border-radius: 0.375rem;\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: #495057;\n --bs-list-group-action-hover-color: #495057;\n --bs-list-group-action-hover-bg: #f8f9fa;\n --bs-list-group-action-active-color: #212529;\n --bs-list-group-action-active-bg: #e9ecef;\n --bs-list-group-disabled-color: #6c757d;\n --bs-list-group-disabled-bg: #fff;\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-right: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-right-radius: inherit;\n border-top-left-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-left-radius: inherit;\n border-bottom-right-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #084298;\n background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #084298;\n background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #084298;\n border-color: #084298;\n}\n\n.list-group-item-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #41464b;\n background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #41464b;\n border-color: #41464b;\n}\n\n.list-group-item-success {\n color: #0f5132;\n background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #0f5132;\n background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #0f5132;\n border-color: #0f5132;\n}\n\n.list-group-item-info {\n color: #055160;\n background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #055160;\n background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #055160;\n border-color: #055160;\n}\n\n.list-group-item-warning {\n color: #664d03;\n background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #664d03;\n background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #664d03;\n border-color: #664d03;\n}\n\n.list-group-item-danger {\n color: #842029;\n background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #842029;\n background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #842029;\n border-color: #842029;\n}\n\n.list-group-item-light {\n color: #636464;\n background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #636464;\n background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #636464;\n border-color: #636464;\n}\n\n.list-group-item-dark {\n color: #141619;\n background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #141619;\n background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #141619;\n border-color: #141619;\n}\n\n.btn-close {\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: #000;\n background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: 0.5;\n}\n.btn-close:hover {\n color: #000;\n text-decoration: none;\n opacity: 0.75;\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n opacity: 0.25;\n}\n\n.btn-close-white {\n filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-border-width: 1px;\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: 0.375rem;\n --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-toast-header-color: #6c757d;\n --bs-toast-header-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-left: calc(-0.5 * var(--bs-toast-padding-x));\n margin-right: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: #fff;\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: 1px;\n --bs-modal-border-radius: 0.5rem;\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-modal-inner-border-radius: calc(0.5rem - 1px);\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: 1px;\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: 1px;\n position: fixed;\n top: 0;\n right: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n right: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) auto calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x));\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-left: auto;\n margin-right: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n.modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n.modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n.modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n.modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n.modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n.modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: #fff;\n --bs-tooltip-bg: #000;\n --bs-tooltip-border-radius: 0.375rem;\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: right;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: #fff;\n --bs-popover-border-width: 1px;\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: 0.5rem;\n --bs-popover-inner-border-radius: calc(0.5rem - 1px);\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: #f0f0f0;\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: #212529;\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: right;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n right: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-right: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: right;\n width: 100%;\n margin-left: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n.carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n right: 0;\n}\n\n.carousel-control-next {\n left: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-left: 15%;\n margin-bottom: 1rem;\n margin-right: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-left: 3px;\n margin-right: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n left: 15%;\n bottom: 1.25rem;\n right: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-next-icon,\n.carousel-dark .carousel-control-prev-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) ;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-left-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n.spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: ;\n --bs-offcanvas-bg: #fff;\n --bs-offcanvas-border-width: 1px;\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-left: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n -webkit-mask-size: 200% 100%;\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: right !important;\n}\n\n.float-end {\n float: left !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n right: 0 !important;\n}\n\n.start-50 {\n right: 50% !important;\n}\n\n.start-100 {\n right: 100% !important;\n}\n\n.end-0 {\n left: 0 !important;\n}\n\n.end-50 {\n left: 50% !important;\n}\n\n.end-100 {\n left: 100% !important;\n}\n\n.translate-middle {\n transform: translate(50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-left: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-right: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.mx-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.mx-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-left: 0 !important;\n}\n\n.me-1 {\n margin-left: 0.25rem !important;\n}\n\n.me-2 {\n margin-left: 0.5rem !important;\n}\n\n.me-3 {\n margin-left: 1rem !important;\n}\n\n.me-4 {\n margin-left: 1.5rem !important;\n}\n\n.me-5 {\n margin-left: 3rem !important;\n}\n\n.me-auto {\n margin-left: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-right: 0 !important;\n}\n\n.ms-1 {\n margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n margin-right: 1rem !important;\n}\n\n.ms-4 {\n margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n margin-right: 3rem !important;\n}\n\n.ms-auto {\n margin-right: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.px-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n\n.px-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n}\n\n.px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-left: 0 !important;\n}\n\n.pe-1 {\n padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n padding-left: 1rem !important;\n}\n\n.pe-4 {\n padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n padding-left: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-right: 0 !important;\n}\n\n.ps-1 {\n padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n padding-right: 1rem !important;\n}\n\n.ps-4 {\n padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n padding-right: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: right !important;\n}\n\n.text-end {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: right !important;\n }\n .float-sm-end {\n float: left !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-left: 0 !important;\n }\n .me-sm-1 {\n margin-left: 0.25rem !important;\n }\n .me-sm-2 {\n margin-left: 0.5rem !important;\n }\n .me-sm-3 {\n margin-left: 1rem !important;\n }\n .me-sm-4 {\n margin-left: 1.5rem !important;\n }\n .me-sm-5 {\n margin-left: 3rem !important;\n }\n .me-sm-auto {\n margin-left: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-right: 0 !important;\n }\n .ms-sm-1 {\n margin-right: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-right: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-right: 1rem !important;\n }\n .ms-sm-4 {\n margin-right: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-right: 3rem !important;\n }\n .ms-sm-auto {\n margin-right: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-left: 0 !important;\n }\n .pe-sm-1 {\n padding-left: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-left: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-left: 1rem !important;\n }\n .pe-sm-4 {\n padding-left: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-left: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-right: 0 !important;\n }\n .ps-sm-1 {\n padding-right: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-right: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-right: 1rem !important;\n }\n .ps-sm-4 {\n padding-right: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-right: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: right !important;\n }\n .text-sm-end {\n text-align: left !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: right !important;\n }\n .float-md-end {\n float: left !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-left: 0 !important;\n }\n .me-md-1 {\n margin-left: 0.25rem !important;\n }\n .me-md-2 {\n margin-left: 0.5rem !important;\n }\n .me-md-3 {\n margin-left: 1rem !important;\n }\n .me-md-4 {\n margin-left: 1.5rem !important;\n }\n .me-md-5 {\n margin-left: 3rem !important;\n }\n .me-md-auto {\n margin-left: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-right: 0 !important;\n }\n .ms-md-1 {\n margin-right: 0.25rem !important;\n }\n .ms-md-2 {\n margin-right: 0.5rem !important;\n }\n .ms-md-3 {\n margin-right: 1rem !important;\n }\n .ms-md-4 {\n margin-right: 1.5rem !important;\n }\n .ms-md-5 {\n margin-right: 3rem !important;\n }\n .ms-md-auto {\n margin-right: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-left: 0 !important;\n }\n .pe-md-1 {\n padding-left: 0.25rem !important;\n }\n .pe-md-2 {\n padding-left: 0.5rem !important;\n }\n .pe-md-3 {\n padding-left: 1rem !important;\n }\n .pe-md-4 {\n padding-left: 1.5rem !important;\n }\n .pe-md-5 {\n padding-left: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-right: 0 !important;\n }\n .ps-md-1 {\n padding-right: 0.25rem !important;\n }\n .ps-md-2 {\n padding-right: 0.5rem !important;\n }\n .ps-md-3 {\n padding-right: 1rem !important;\n }\n .ps-md-4 {\n padding-right: 1.5rem !important;\n }\n .ps-md-5 {\n padding-right: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: right !important;\n }\n .text-md-end {\n text-align: left !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: right !important;\n }\n .float-lg-end {\n float: left !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-left: 0 !important;\n }\n .me-lg-1 {\n margin-left: 0.25rem !important;\n }\n .me-lg-2 {\n margin-left: 0.5rem !important;\n }\n .me-lg-3 {\n margin-left: 1rem !important;\n }\n .me-lg-4 {\n margin-left: 1.5rem !important;\n }\n .me-lg-5 {\n margin-left: 3rem !important;\n }\n .me-lg-auto {\n margin-left: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-right: 0 !important;\n }\n .ms-lg-1 {\n margin-right: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-right: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-right: 1rem !important;\n }\n .ms-lg-4 {\n margin-right: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-right: 3rem !important;\n }\n .ms-lg-auto {\n margin-right: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-left: 0 !important;\n }\n .pe-lg-1 {\n padding-left: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-left: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-left: 1rem !important;\n }\n .pe-lg-4 {\n padding-left: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-left: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-right: 0 !important;\n }\n .ps-lg-1 {\n padding-right: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-right: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-right: 1rem !important;\n }\n .ps-lg-4 {\n padding-right: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-right: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: right !important;\n }\n .text-lg-end {\n text-align: left !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: right !important;\n }\n .float-xl-end {\n float: left !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-left: 0 !important;\n }\n .me-xl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xl-3 {\n margin-left: 1rem !important;\n }\n .me-xl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xl-5 {\n margin-left: 3rem !important;\n }\n .me-xl-auto {\n margin-left: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-right: 0 !important;\n }\n .ms-xl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-right: 1rem !important;\n }\n .ms-xl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-right: 3rem !important;\n }\n .ms-xl-auto {\n margin-right: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-left: 0 !important;\n }\n .pe-xl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-left: 1rem !important;\n }\n .pe-xl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-left: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-right: 0 !important;\n }\n .ps-xl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-right: 1rem !important;\n }\n .ps-xl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-right: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: right !important;\n }\n .text-xl-end {\n text-align: left !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: right !important;\n }\n .float-xxl-end {\n float: left !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xxl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-left: 0 !important;\n }\n .me-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-left: 1rem !important;\n }\n .me-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-left: 3rem !important;\n }\n .me-xxl-auto {\n margin-left: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-right: 0 !important;\n }\n .ms-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-right: 1rem !important;\n }\n .ms-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-right: 3rem !important;\n }\n .ms-xxl-auto {\n margin-right: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xxl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-left: 0 !important;\n }\n .pe-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-left: 1rem !important;\n }\n .pe-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-left: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-right: 0 !important;\n }\n .ps-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-right: 1rem !important;\n }\n .ps-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-right: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: right !important;\n }\n .text-xxl-end {\n text-align: left !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.rtl.css.map */","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.2.2 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid var(--bs-border-color);\n border-radius: 0.375rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: 1px;\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: 2px solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: #212529;\n background-color: #fff;\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n.form-control:disabled {\n background-color: #e9ecef;\n opacity: 1;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n margin-inline-end: 0.75rem;\n color: #212529;\n background-color: #e9ecef;\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: 1px;\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: #dde0e3;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.form-select {\n display: block;\n width: 100%;\n padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n background-color: #fff;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right 0.75rem center;\n background-size: 16px 12px;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-right: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: #e9ecef;\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 #212529;\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: left;\n margin-left: -1.5em;\n}\n\n.form-check-reverse {\n padding-right: 1.5em;\n padding-left: 0;\n text-align: right;\n}\n.form-check-reverse .form-check-input {\n float: right;\n margin-right: -1.5em;\n margin-left: 0;\n}\n\n.form-check-input {\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: #fff;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: 1px solid rgba(0, 0, 0, 0.25);\n appearance: none;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n width: 2em;\n margin-left: -2.5em;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n background-position: left center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: right center;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-right: 2.5em;\n padding-left: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-right: -2.5em;\n margin-left: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + 2px);\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: 1px solid transparent;\n transform-origin: 0 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: 1px 0;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-left: -1px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #198754;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(25, 135, 84, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #198754;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: #198754;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: #198754;\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: #198754;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: #198754;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #198754;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.375rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: right calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n padding-right: 4.125rem;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-position: right 0.75rem center, center right 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: #dc3545;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-left: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: 1px;\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: #212529;\n --bs-dropdown-bg: #fff;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: 1px;\n --bs-dropdown-inner-border-radius: calc(0.375rem - 1px);\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-dropdown-link-color: #212529;\n --bs-dropdown-link-hover-color: #1e2125;\n --bs-dropdown-link-hover-bg: #e9ecef;\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: left;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n right: 0;\n left: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: 1px;\n --bs-nav-tabs-border-color: #dee2e6;\n --bs-nav-tabs-border-radius: 0.375rem;\n --bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;\n --bs-nav-tabs-link-active-color: #495057;\n --bs-nav-tabs-link-active-bg: #fff;\n --bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(0, 0, 0, 0.55);\n --bs-navbar-hover-color: rgba(0, 0, 0, 0.7);\n --bs-navbar-disabled-color: rgba(0, 0, 0, 0.3);\n --bs-navbar-active-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-brand-hover-color: rgba(0, 0, 0, 0.9);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(0, 0, 0, 0.1);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-right: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-right: var(--bs-navbar-nav-link-padding-x);\n padding-left: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-border-width: 1px;\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: 0.375rem;\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(0.375rem - 1px);\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(0, 0, 0, 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: #fff;\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-left: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-left-radius: var(--bs-card-inner-border-radius);\n border-top-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: #212529;\n --bs-accordion-bg: #fff;\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: 1px;\n --bs-accordion-border-radius: 0.375rem;\n --bs-accordion-inner-border-radius: calc(0.375rem - 1px);\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: #212529;\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: #0c63e4;\n --bs-accordion-active-bg: #e7f1ff;\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: left;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-left-radius: var(--bs-accordion-border-radius);\n border-top-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: #6c757d;\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: #6c757d;\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: left;\n padding-right: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: #fff;\n --bs-pagination-border-width: 1px;\n --bs-pagination-border-color: #dee2e6;\n --bs-pagination-border-radius: 0.375rem;\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: #e9ecef;\n --bs-pagination-hover-border-color: #dee2e6;\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: #e9ecef;\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: #6c757d;\n --bs-pagination-disabled-bg: #fff;\n --bs-pagination-disabled-border-color: #dee2e6;\n display: flex;\n padding-left: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-left: -1px;\n}\n.page-item:first-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: 1px solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: #084298;\n --bs-alert-bg: #cfe2ff;\n --bs-alert-border-color: #b6d4fe;\n}\n.alert-primary .alert-link {\n color: #06357a;\n}\n\n.alert-secondary {\n --bs-alert-color: #41464b;\n --bs-alert-bg: #e2e3e5;\n --bs-alert-border-color: #d3d6d8;\n}\n.alert-secondary .alert-link {\n color: #34383c;\n}\n\n.alert-success {\n --bs-alert-color: #0f5132;\n --bs-alert-bg: #d1e7dd;\n --bs-alert-border-color: #badbcc;\n}\n.alert-success .alert-link {\n color: #0c4128;\n}\n\n.alert-info {\n --bs-alert-color: #055160;\n --bs-alert-bg: #cff4fc;\n --bs-alert-border-color: #b6effb;\n}\n.alert-info .alert-link {\n color: #04414d;\n}\n\n.alert-warning {\n --bs-alert-color: #664d03;\n --bs-alert-bg: #fff3cd;\n --bs-alert-border-color: #ffecb5;\n}\n.alert-warning .alert-link {\n color: #523e02;\n}\n\n.alert-danger {\n --bs-alert-color: #842029;\n --bs-alert-bg: #f8d7da;\n --bs-alert-border-color: #f5c2c7;\n}\n.alert-danger .alert-link {\n color: #6a1a21;\n}\n\n.alert-light {\n --bs-alert-color: #636464;\n --bs-alert-bg: #fefefe;\n --bs-alert-border-color: #fdfdfe;\n}\n.alert-light .alert-link {\n color: #4f5050;\n}\n\n.alert-dark {\n --bs-alert-color: #141619;\n --bs-alert-bg: #d3d3d4;\n --bs-alert-border-color: #bcbebf;\n}\n.alert-dark .alert-link {\n color: #101214;\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: #e9ecef;\n --bs-progress-border-radius: 0.375rem;\n --bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: #212529;\n --bs-list-group-bg: #fff;\n --bs-list-group-border-color: rgba(0, 0, 0, 0.125);\n --bs-list-group-border-width: 1px;\n --bs-list-group-border-radius: 0.375rem;\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: #495057;\n --bs-list-group-action-hover-color: #495057;\n --bs-list-group-action-hover-bg: #f8f9fa;\n --bs-list-group-action-active-color: #212529;\n --bs-list-group-action-active-bg: #e9ecef;\n --bs-list-group-disabled-color: #6c757d;\n --bs-list-group-disabled-bg: #fff;\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-left-radius: var(--bs-list-group-border-radius);\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-right-radius: var(--bs-list-group-border-radius);\n border-bottom-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-left-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-left: calc(-1 * var(--bs-list-group-border-width));\n border-left-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n color: #084298;\n background-color: #cfe2ff;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #084298;\n background-color: #bacbe6;\n}\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #084298;\n border-color: #084298;\n}\n\n.list-group-item-secondary {\n color: #41464b;\n background-color: #e2e3e5;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #41464b;\n background-color: #cbccce;\n}\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #41464b;\n border-color: #41464b;\n}\n\n.list-group-item-success {\n color: #0f5132;\n background-color: #d1e7dd;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #0f5132;\n background-color: #bcd0c7;\n}\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #0f5132;\n border-color: #0f5132;\n}\n\n.list-group-item-info {\n color: #055160;\n background-color: #cff4fc;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #055160;\n background-color: #badce3;\n}\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #055160;\n border-color: #055160;\n}\n\n.list-group-item-warning {\n color: #664d03;\n background-color: #fff3cd;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #664d03;\n background-color: #e6dbb9;\n}\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #664d03;\n border-color: #664d03;\n}\n\n.list-group-item-danger {\n color: #842029;\n background-color: #f8d7da;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #842029;\n background-color: #dfc2c4;\n}\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #842029;\n border-color: #842029;\n}\n\n.list-group-item-light {\n color: #636464;\n background-color: #fefefe;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #636464;\n background-color: #e5e5e5;\n}\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #636464;\n border-color: #636464;\n}\n\n.list-group-item-dark {\n color: #141619;\n background-color: #d3d3d4;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #141619;\n background-color: #bebebf;\n}\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #141619;\n border-color: #141619;\n}\n\n.btn-close {\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: #000;\n background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: 0.5;\n}\n.btn-close:hover {\n color: #000;\n text-decoration: none;\n opacity: 0.75;\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n user-select: none;\n opacity: 0.25;\n}\n\n.btn-close-white {\n filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-border-width: 1px;\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: 0.375rem;\n --bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-toast-header-color: #6c757d;\n --bs-toast-header-bg: rgba(255, 255, 255, 0.85);\n --bs-toast-header-border-color: rgba(0, 0, 0, 0.05);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-right: calc(-0.5 * var(--bs-toast-padding-x));\n margin-left: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: #fff;\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: 1px;\n --bs-modal-border-radius: 0.5rem;\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n --bs-modal-inner-border-radius: calc(0.5rem - 1px);\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: 1px;\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: 1px;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n.modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n.modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n.modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n.modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n.modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n.modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: #fff;\n --bs-tooltip-bg: #000;\n --bs-tooltip-border-radius: 0.375rem;\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n\n/* rtl:end:ignore */\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: #fff;\n --bs-popover-border-width: 1px;\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: 0.5rem;\n --bs-popover-inner-border-radius: calc(0.5rem - 1px);\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: #f0f0f0;\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: #212529;\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-left: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n\n/* rtl:end:ignore */\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n.carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-right: 15%;\n margin-bottom: 1rem;\n margin-left: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 1.25rem;\n left: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) /* rtl:ignore */;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n.spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: ;\n --bs-offcanvas-bg: #fff;\n --bs-offcanvas-border-width: 1px;\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: left !important;\n}\n\n.float-end {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n left: 0 !important;\n}\n\n.start-50 {\n left: 50% !important;\n}\n\n.start-100 {\n left: 100% !important;\n}\n\n.end-0 {\n right: 0 !important;\n}\n\n.end-50 {\n right: 50% !important;\n}\n\n.end-100 {\n right: 100% !important;\n}\n\n.translate-middle {\n transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-right: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: left !important;\n}\n\n.text-end {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n word-wrap: break-word !important;\n word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: #6c757d !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n user-select: all !important;\n}\n\n.user-select-auto {\n user-select: auto !important;\n}\n\n.user-select-none {\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: left !important;\n }\n .float-sm-end {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .text-sm-start {\n text-align: left !important;\n }\n .text-sm-end {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: left !important;\n }\n .float-md-end {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .text-md-start {\n text-align: left !important;\n }\n .text-md-end {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: left !important;\n }\n .float-lg-end {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .text-lg-start {\n text-align: left !important;\n }\n .text-lg-end {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: left !important;\n }\n .float-xl-end {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .text-xl-start {\n text-align: left !important;\n }\n .text-xl-end {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: left !important;\n }\n .float-xxl-end {\n float: right !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: left !important;\n }\n .text-xxl-end {\n text-align: right !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: var(--#{$prefix}table-color);\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: ($table-border-width * 2) solid $table-group-separator-color;\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-active-bg);\n color: var(--#{$prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-hover-bg);\n color: var(--#{$prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: escape-svg($form-select-indicator);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: $form-check-input-bg;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-checked-bg-image);\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-radio-checked-bg-image);\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-check-input-indeterminate-bg-image);\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: escape-svg($form-switch-bg-image);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n background-image: escape-svg($form-switch-focus-bg-image);\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n background-image: escape-svg($form-switch-checked-bg-image), var(--#{$prefix}gradient);\n } @else {\n background-image: escape-svg($form-switch-checked-bg-image);\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: -$input-border-width;\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n padding-right: $form-select-feedback-icon-padding-end;\n background-image: escape-svg($form-select-indicator), escape-svg($icon);\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$body-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: none;\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($primary), $primary, 15%))};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n clear: both;\n font-weight: $font-weight-normal;\n color: var(--#{$prefix}dropdown-link-color);\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}dropdown-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n }\n\n &.active,\n &:active {\n color: var(--#{$prefix}dropdown-link-active-color);\n text-decoration: none;\n @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: var(--#{$prefix}dropdown-header-color);\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n // scss-docs-start dropdown-dark-css-vars\n --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n // scss-docs-end dropdown-dark-css-vars\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down {\n border-top: $caret-width solid;\n border-right: $caret-width solid transparent;\n border-bottom: 0;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-up {\n border-top: 0;\n border-right: $caret-width solid transparent;\n border-bottom: $caret-width solid;\n border-left: $caret-width solid transparent;\n}\n\n@mixin caret-end {\n border-top: $caret-width solid transparent;\n border-right: 0;\n border-bottom: $caret-width solid transparent;\n border-left: $caret-width solid;\n}\n\n@mixin caret-start {\n border-top: $caret-width solid transparent;\n border-right: $caret-width solid;\n border-bottom: $caret-width solid transparent;\n}\n\n@mixin caret($direction: down) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down();\n } @else if $direction == up {\n @include caret-up();\n } @else if $direction == end {\n @include caret-end();\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $caret-spacing;\n vertical-align: $caret-vertical-align;\n content: \"\";\n @include caret-start();\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: -$btn-border-width;\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n background: none;\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n background: none;\n border: 0;\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .show > .nav-link,\n .nav-link.active {\n color: var(--#{$prefix}navbar-active-color);\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n line-height: 1;\n color: var(--#{$prefix}navbar-color);\n background-color: transparent; // remove default button style\n border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas {\n // stylelint-disable declaration-no-important\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n @include box-shadow(none);\n @include transition(none);\n // stylelint-enable declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n @include deprecate(\"`.navbar-light`\", \"v5.2.0\", \"v6.0.0\", true);\n}\n\n.navbar-dark {\n // scss-docs-start navbar-dark-css-vars\n --#{$prefix}navbar-color: #{$navbar-dark-color};\n --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n // scss-docs-end navbar-dark-css-vars\n}\n","//\n// Base styles\n//\n\n.card {\n // scss-docs-start card-css-vars\n --#{$prefix}card-spacer-y: #{$card-spacer-y};\n --#{$prefix}card-spacer-x: #{$card-spacer-x};\n --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n --#{$prefix}card-border-width: #{$card-border-width};\n --#{$prefix}card-border-color: #{$card-border-color};\n --#{$prefix}card-border-radius: #{$card-border-radius};\n --#{$prefix}card-box-shadow: #{$card-box-shadow};\n --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n --#{$prefix}card-cap-bg: #{$card-cap-bg};\n --#{$prefix}card-cap-color: #{$card-cap-color};\n --#{$prefix}card-height: #{$card-height};\n --#{$prefix}card-color: #{$card-color};\n --#{$prefix}card-bg: #{$card-bg};\n --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n --#{$prefix}card-group-margin: #{$card-group-margin};\n // scss-docs-end card-css-vars\n\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: var(--#{$prefix}card-height);\n word-wrap: break-word;\n background-color: var(--#{$prefix}card-bg);\n background-clip: border-box;\n border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n @include border-radius(var(--#{$prefix}card-border-radius));\n @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n margin-bottom: var(--#{$prefix}card-title-spacer-y);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: var(--#{$prefix}card-spacer-x);\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:first-child {\n @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0);\n }\n}\n\n.card-footer {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:last-child {\n @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius));\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n border-bottom: 0;\n\n .nav-link.active {\n background-color: var(--#{$prefix}card-bg);\n border-bottom-color: var(--#{$prefix}card-bg);\n }\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--#{$prefix}card-img-overlay-padding);\n @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: var(--#{$prefix}card-group-margin);\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion {\n // scss-docs-start accordion-css-vars\n --#{$prefix}accordion-color: #{$accordion-color};\n --#{$prefix}accordion-bg: #{$accordion-bg};\n --#{$prefix}accordion-transition: #{$accordion-transition};\n --#{$prefix}accordion-border-color: #{$accordion-border-color};\n --#{$prefix}accordion-border-width: #{$accordion-border-width};\n --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};\n --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n @include font-size($font-size-base);\n color: var(--#{$prefix}accordion-btn-color);\n text-align: left; // Reset button style\n background-color: var(--#{$prefix}accordion-btn-bg);\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition(var(--#{$prefix}accordion-transition));\n\n &:not(.collapsed) {\n color: var(--#{$prefix}accordion-active-color);\n background-color: var(--#{$prefix}accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n &::after {\n background-image: var(--#{$prefix}accordion-btn-active-icon);\n transform: var(--#{$prefix}accordion-btn-icon-transform);\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: var(--#{$prefix}accordion-btn-icon-width);\n height: var(--#{$prefix}accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--#{$prefix}accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--#{$prefix}accordion-btn-icon-width);\n @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--#{$prefix}accordion-color);\n background-color: var(--#{$prefix}accordion-bg);\n border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n &:first-of-type {\n @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n }\n }\n}\n\n.accordion-body {\n padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n &,\n &.collapsed {\n @include border-radius(0);\n }\n }\n }\n}\n",".breadcrumb {\n // scss-docs-start breadcrumb-css-vars\n --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n // scss-docs-end breadcrumb-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n @include font-size(var(--#{$prefix}breadcrumb-font-size));\n list-style: none;\n background-color: var(--#{$prefix}breadcrumb-bg);\n @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n color: var(--#{$prefix}breadcrumb-divider-color);\n content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: var(--#{$prefix}breadcrumb-item-active-color);\n }\n}\n",".pagination {\n // scss-docs-start pagination-css-vars\n --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-color: #{$pagination-color};\n --#{$prefix}pagination-bg: #{$pagination-bg};\n --#{$prefix}pagination-border-width: #{$pagination-border-width};\n --#{$prefix}pagination-border-color: #{$pagination-border-color};\n --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n --#{$prefix}pagination-active-color: #{$pagination-active-color};\n --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n // scss-docs-end pagination-css-vars\n\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n @include font-size(var(--#{$prefix}pagination-font-size));\n color: var(--#{$prefix}pagination-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}pagination-bg);\n border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: var(--#{$prefix}pagination-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}pagination-hover-bg);\n border-color: var(--#{$prefix}pagination-hover-border-color);\n }\n\n &:focus {\n z-index: 3;\n color: var(--#{$prefix}pagination-focus-color);\n background-color: var(--#{$prefix}pagination-focus-bg);\n outline: $pagination-focus-outline;\n box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n }\n\n &.active,\n .active > & {\n z-index: 3;\n color: var(--#{$prefix}pagination-active-color);\n @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n border-color: var(--#{$prefix}pagination-active-border-color);\n }\n\n &.disabled,\n .disabled > & {\n color: var(--#{$prefix}pagination-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}pagination-disabled-bg);\n border-color: var(--#{$prefix}pagination-disabled-border-color);\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n @if $pagination-margin-start == ($pagination-border-width * -1) {\n &:first-child {\n .page-link {\n @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n } @else {\n // Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}pagination-padding-x: #{$padding-x};\n --#{$prefix}pagination-padding-y: #{$padding-y};\n @include rfs($font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert.\n\n@each $state, $value in $theme-colors {\n $alert-background: shift-color($value, $alert-bg-scale);\n $alert-border: shift-color($value, $alert-border-scale);\n $alert-color: shift-color($value, $alert-color-scale);\n\n @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {\n $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));\n }\n .alert-#{$state} {\n @include alert-variant($alert-background, $alert-border, $alert-color);\n }\n}\n// scss-docs-end alert-modifiers\n","// scss-docs-start alert-variant-mixin\n@mixin alert-variant($background, $border, $color) {\n --#{$prefix}alert-color: #{$color};\n --#{$prefix}alert-bg: #{$background};\n --#{$prefix}alert-border-color: #{$border};\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n\n .alert-link {\n color: shade-color($color, 20%);\n }\n}\n// scss-docs-end alert-variant-mixin\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress {\n // scss-docs-start progress-css-vars\n --#{$prefix}progress-height: #{$progress-height};\n @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n --#{$prefix}progress-bg: #{$progress-bg};\n --#{$prefix}progress-border-radius: #{$progress-border-radius};\n --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n --#{$prefix}progress-bar-color: #{$progress-bar-color};\n --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n // scss-docs-end progress-css-vars\n\n display: flex;\n height: var(--#{$prefix}progress-height);\n overflow: hidden; // force rounded corners by cropping it\n @include font-size(var(--#{$prefix}progress-font-size));\n background-color: var(--#{$prefix}progress-bg);\n @include border-radius(var(--#{$prefix}progress-border-radius));\n @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--#{$prefix}progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--#{$prefix}progress-bar-bg);\n @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // scss-docs-start list-group-css-vars\n --#{$prefix}list-group-color: #{$list-group-color};\n --#{$prefix}list-group-bg: #{$list-group-bg};\n --#{$prefix}list-group-border-color: #{$list-group-border-color};\n --#{$prefix}list-group-border-width: #{$list-group-border-width};\n --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n --#{$prefix}list-group-action-color: #{$list-group-action-color};\n --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n --#{$prefix}list-group-active-color: #{$list-group-active-color};\n --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n // scss-docs-end list-group-css-vars\n\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > .list-group-item::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: var(--#{$prefix}list-group-action-color);\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--#{$prefix}list-group-action-hover-bg);\n }\n\n &:active {\n color: var(--#{$prefix}list-group-action-active-color);\n background-color: var(--#{$prefix}list-group-action-active-bg);\n }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n color: var(--#{$prefix}list-group-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}list-group-bg);\n border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}list-group-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}list-group-disabled-bg);\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-active-color);\n background-color: var(--#{$prefix}list-group-active-bg);\n border-color: var(--#{$prefix}list-group-active-border-color);\n }\n\n // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n & + .list-group-item {\n border-top-width: 0;\n\n &.active {\n margin-top: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-top-width: var(--#{$prefix}list-group-border-width);\n }\n }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child:not(:last-child) {\n @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n @include border-top-end-radius(0);\n }\n\n &:last-child:not(:first-child) {\n @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: var(--#{$prefix}list-group-border-width);\n border-left-width: 0;\n\n &.active {\n margin-left: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-left-width: var(--#{$prefix}list-group-border-width);\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state, $value in $theme-colors {\n $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);\n $list-group-variant-color: shift-color($value, $list-group-item-color-scale);\n @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {\n $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));\n }\n\n @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);\n}\n// scss-docs-end list-group-modifiers\n","// List Groups\n\n// scss-docs-start list-group-mixin\n@mixin list-group-item-variant($state, $background, $color) {\n .list-group-item-#{$state} {\n color: $color;\n background-color: $background;\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n color: $color;\n background-color: shade-color($background, 10%);\n }\n\n &.active {\n color: $white;\n background-color: $color;\n border-color: $color;\n }\n }\n }\n}\n// scss-docs-end list-group-mixin\n","// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: $btn-close-color;\n background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: $btn-close-opacity;\n\n // Override <a>'s hover style\n &:hover {\n color: $btn-close-color;\n text-decoration: none;\n opacity: $btn-close-hover-opacity;\n }\n\n &:focus {\n outline: 0;\n box-shadow: $btn-close-focus-shadow;\n opacity: $btn-close-focus-opacity;\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: $btn-close-disabled-opacity;\n }\n}\n\n.btn-close-white {\n filter: $btn-close-white-filter;\n}\n",".toast {\n // scss-docs-start toast-css-vars\n --#{$prefix}toast-zindex: #{$zindex-toast};\n --#{$prefix}toast-padding-x: #{$toast-padding-x};\n --#{$prefix}toast-padding-y: #{$toast-padding-y};\n --#{$prefix}toast-spacing: #{$toast-spacing};\n --#{$prefix}toast-max-width: #{$toast-max-width};\n @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n --#{$prefix}toast-color: #{$toast-color};\n --#{$prefix}toast-bg: #{$toast-background-color};\n --#{$prefix}toast-border-width: #{$toast-border-width};\n --#{$prefix}toast-border-color: #{$toast-border-color};\n --#{$prefix}toast-border-radius: #{$toast-border-radius};\n --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n --#{$prefix}toast-header-color: #{$toast-header-color};\n --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n // scss-docs-end toast-css-vars\n\n width: var(--#{$prefix}toast-max-width);\n max-width: 100%;\n @include font-size(var(--#{$prefix}toast-font-size));\n color: var(--#{$prefix}toast-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}toast-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n box-shadow: var(--#{$prefix}toast-box-shadow);\n @include border-radius(var(--#{$prefix}toast-border-radius));\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n --#{$prefix}toast-zindex: #{$zindex-toast};\n\n position: absolute;\n z-index: var(--#{$prefix}toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: var(--#{$prefix}toast-spacing);\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n color: var(--#{$prefix}toast-header-color);\n background-color: var(--#{$prefix}toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);\n @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));\n\n .btn-close {\n margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: var(--#{$prefix}toast-padding-x);\n }\n}\n\n.toast-body {\n padding: var(--#{$prefix}toast-padding-x);\n word-wrap: break-word;\n}\n","// stylelint-disable function-disallowed-list\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n // scss-docs-start modal-css-vars\n --#{$prefix}modal-zindex: #{$zindex-modal};\n --#{$prefix}modal-width: #{$modal-md};\n --#{$prefix}modal-padding: #{$modal-inner-padding};\n --#{$prefix}modal-margin: #{$modal-dialog-margin};\n --#{$prefix}modal-color: #{$modal-content-color};\n --#{$prefix}modal-bg: #{$modal-content-bg};\n --#{$prefix}modal-border-color: #{$modal-content-border-color};\n --#{$prefix}modal-border-width: #{$modal-content-border-width};\n --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n // scss-docs-end modal-css-vars\n\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--#{$prefix}modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--#{$prefix}modal-margin);\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: var(--#{$prefix}modal-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}modal-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n @include border-radius(var(--#{$prefix}modal-border-radius));\n @include box-shadow(var(--#{$prefix}modal-box-shadow));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n // scss-docs-start modal-backdrop-css-vars\n --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n // scss-docs-end modal-backdrop-css-vars\n\n @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: var(--#{$prefix}modal-header-padding);\n border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);\n @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n .btn-close {\n padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);\n margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * .5);\n background-color: var(--#{$prefix}modal-footer-bg);\n border-top: var(--#{$prefix}modal-footer-border-width) solid var(--#{$prefix}modal-footer-border-color);\n @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: calc(var(--#{$prefix}modal-footer-gap) * .5); // Todo in v6: replace with gap on parent class\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n .modal {\n --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n }\n\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: var(--#{$prefix}modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n\n .modal-sm {\n --#{$prefix}modal-width: #{$modal-sm};\n }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-lg};\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-xl};\n }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header,\n .modal-footer {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n // scss-docs-start tooltip-css-vars\n --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n --#{$prefix}tooltip-margin: #{$tooltip-margin};\n @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n --#{$prefix}tooltip-color: #{$tooltip-color};\n --#{$prefix}tooltip-bg: #{$tooltip-bg};\n --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n // scss-docs-end tooltip-css-vars\n\n z-index: var(--#{$prefix}tooltip-zindex);\n display: block;\n padding: var(--#{$prefix}tooltip-arrow-height);\n margin: var(--#{$prefix}tooltip-margin);\n @include deprecate(\"`$tooltip-margin`\", \"v5\", \"v5.x\", true);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}tooltip-font-size));\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: var(--#{$prefix}tooltip-opacity); }\n\n .tooltip-arrow {\n display: block;\n width: var(--#{$prefix}tooltip-arrow-width);\n height: var(--#{$prefix}tooltip-arrow-height);\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-top-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n left: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n right: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-right-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-bottom-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n right: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n left: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-left-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: var(--#{$prefix}tooltip-max-width);\n padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n color: var(--#{$prefix}tooltip-color);\n text-align: center;\n background-color: var(--#{$prefix}tooltip-bg);\n @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n}\n",".popover {\n // scss-docs-start popover-css-vars\n --#{$prefix}popover-zindex: #{$zindex-popover};\n --#{$prefix}popover-max-width: #{$popover-max-width};\n @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n --#{$prefix}popover-bg: #{$popover-bg};\n --#{$prefix}popover-border-width: #{$popover-border-width};\n --#{$prefix}popover-border-color: #{$popover-border-color};\n --#{$prefix}popover-border-radius: #{$popover-border-radius};\n --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n --#{$prefix}popover-header-color: #{$popover-header-color};\n --#{$prefix}popover-header-bg: #{$popover-header-bg};\n --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n --#{$prefix}popover-body-color: #{$popover-body-color};\n --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n // scss-docs-end popover-css-vars\n\n z-index: var(--#{$prefix}popover-zindex);\n display: block;\n max-width: var(--#{$prefix}popover-max-width);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}popover-font-size));\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: var(--#{$prefix}popover-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-radius(var(--#{$prefix}popover-border-radius));\n @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n .popover-arrow {\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n height: var(--#{$prefix}popover-arrow-height);\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n bottom: 0;\n border-top-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n bottom: var(--#{$prefix}popover-border-width);\n border-top-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n > .popover-arrow {\n left: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n left: 0;\n border-right-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n left: var(--#{$prefix}popover-border-width);\n border-right-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n top: 0;\n border-bottom-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n top: var(--#{$prefix}popover-border-width);\n border-bottom-color: var(--#{$prefix}popover-bg);\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n margin-left: calc(-.5 * var(--#{$prefix}popover-arrow-width)); // stylelint-disable-line function-disallowed-list\n content: \"\";\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start {\n > .popover-arrow {\n right: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n right: 0;\n border-left-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n right: var(--#{$prefix}popover-border-width);\n border-left-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size(var(--#{$prefix}popover-header-font-size));\n color: var(--#{$prefix}popover-header-color);\n background-color: var(--#{$prefix}popover-header-bg);\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n color: var(--#{$prefix}popover-body-color);\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n.carousel-dark {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--#{$prefix}spinner-width);\n height: var(--#{$prefix}spinner-height);\n vertical-align: var(--#{$prefix}spinner-vertical-align);\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n // scss-docs-start spinner-border-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-border-width: #{$spinner-border-width};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-border;\n // scss-docs-end spinner-border-css-vars\n\n border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n // scss-docs-start spinner-border-sm-css-vars\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n // scss-docs-start spinner-grow-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-grow;\n // scss-docs-end spinner-grow-css-vars\n\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n }\n }\n}\n","// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n // scss-docs-start offcanvas-css-vars\n --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n --#{$prefix}offcanvas-color: #{$offcanvas-color};\n --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @extend %offcanvas-css-vars;\n }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @include media-breakpoint-down($next) {\n position: fixed;\n bottom: 0;\n z-index: var(--#{$prefix}offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--#{$prefix}offcanvas-color);\n visibility: hidden;\n background-color: var(--#{$prefix}offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n @include transition(transform $offcanvas-transition-duration ease-in-out);\n\n &.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(-100%);\n }\n\n &.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(100%);\n }\n\n &.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(-100%);\n }\n\n &.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(100%);\n }\n\n &.showing,\n &.show:not(.hiding) {\n transform: none;\n }\n\n &.showing,\n &.hiding,\n &.show {\n visibility: visible;\n }\n }\n\n @if not ($infix == \"\") {\n @include media-breakpoint-up($next) {\n --#{$prefix}offcanvas-height: auto;\n --#{$prefix}offcanvas-border-width: 0;\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n }\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n .btn-close {\n padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: $offcanvas-title-line-height;\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n overflow-y: auto;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value !important; // stylelint-disable-line declaration-no-important\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
+{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","dist/css/bootstrap.rtl.css","../../scss/vendor/_rfs.scss","../../scss/mixins/_color-mode.scss","../../scss/_reboot.scss","../../scss/mixins/_border-radius.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/_tables.scss","../../scss/mixins/_table-variants.scss","../../scss/forms/_labels.scss","../../scss/forms/_form-text.scss","../../scss/forms/_form-control.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_gradients.scss","../../scss/forms/_form-select.scss","../../scss/forms/_form-check.scss","../../scss/forms/_form-range.scss","../../scss/forms/_floating-labels.scss","../../scss/forms/_input-group.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/_button-group.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_accordion.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/_alert.scss","../../scss/_progress.scss","../../scss/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/mixins/_backdrop.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/_offcanvas.scss","../../scss/_placeholders.scss","../../scss/helpers/_color-bg.scss","../../scss/helpers/_colored-links.scss","../../scss/helpers/_ratio.scss","../../scss/helpers/_position.scss","../../scss/helpers/_stacks.scss","../../scss/helpers/_visually-hidden.scss","../../scss/mixins/_visually-hidden.scss","../../scss/helpers/_stretched-link.scss","../../scss/helpers/_text-truncation.scss","../../scss/mixins/_text-truncate.scss","../../scss/helpers/_vr.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n",":root,\n[data-bs-theme=\"light\"] {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n @each $color, $value in $theme-colors-text {\n --#{$prefix}#{$color}-text: #{$value};\n }\n\n @each $color, $value in $theme-colors-bg-subtle {\n --#{$prefix}#{$color}-bg-subtle: #{$value};\n }\n\n @each $color, $value in $theme-colors-border-subtle {\n --#{$prefix}#{$color}-border-subtle: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{inspect($font-family-base)};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};\n\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n // scss-docs-end root-body-variables\n\n @if $headings-color != null {\n --#{$prefix}heading-color: #{$headings-color};\n }\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color)};\n --#{$prefix}link-decoration: #{$link-decoration};\n\n --#{$prefix}link-hover-color: #{$link-hover-color};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};\n\n @if $link-hover-decoration != null {\n --#{$prefix}link-hover-decoration: #{$link-hover-decoration};\n }\n\n --#{$prefix}code-color: #{$code-color};\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}box-shadow: #{$box-shadow};\n --#{$prefix}box-shadow-sm: #{$box-shadow-sm};\n --#{$prefix}box-shadow-lg: #{$box-shadow-lg};\n --#{$prefix}box-shadow-inset: #{$box-shadow-inset};\n\n --#{$prefix}emphasis-color: #{$emphasis-color};\n\n // scss-docs-start form-control-vars\n --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);\n --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);\n // scss-docs-end form-control-vars\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n\n @each $name, $value in $grid-breakpoints {\n --#{$prefix}breakpoint-#{$name}: #{$value};\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark, true) {\n // scss-docs-start root-dark-mode-vars\n --#{$prefix}body-color: #{$body-color-dark};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};\n --#{$prefix}body-bg: #{$body-bg-dark};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};\n --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};\n\n --#{$prefix}secondary-color: #{$body-secondary-color-dark};\n --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};\n --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};\n --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};\n\n --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};\n --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};\n --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};\n --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};\n\n --#{$prefix}emphasis-color: #{$emphasis-color-dark};\n\n --#{$prefix}primary-text: #{$primary-text-dark};\n --#{$prefix}secondary-text: #{$secondary-text-dark};\n --#{$prefix}success-text: #{$success-text-dark};\n --#{$prefix}info-text: #{$info-text-dark};\n --#{$prefix}warning-text: #{$warning-text-dark};\n --#{$prefix}danger-text: #{$danger-text-dark};\n --#{$prefix}light-text: #{$light-text-dark};\n --#{$prefix}dark-text: #{$dark-text-dark};\n\n --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};\n --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};\n --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};\n --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};\n --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};\n --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};\n --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};\n --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};\n\n --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};\n --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};\n --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};\n --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};\n --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};\n --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};\n --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};\n --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};\n\n --#{$prefix}heading-color: #{$headings-color-dark};\n\n --#{$prefix}link-color: #{$link-color-dark};\n --#{$prefix}link-hover-color: #{$link-hover-color-dark};\n --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};\n --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};\n\n --#{$prefix}code-color: #{$code-color-dark};\n\n --#{$prefix}border-color: #{$border-color-dark};\n --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};\n // scss-docs-end root-dark-mode-vars\n }\n}\n","@charset \"UTF-8\";\n/*!\n * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root,\n[data-bs-theme=light] {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-primary-text: #0a58ca;\n --bs-secondary-text: #6c757d;\n --bs-success-text: #146c43;\n --bs-info-text: #087990;\n --bs-warning-text: #997404;\n --bs-danger-text: #b02a37;\n --bs-light-text: #6c757d;\n --bs-dark-text: #495057;\n --bs-primary-bg-subtle: #cfe2ff;\n --bs-secondary-bg-subtle: #f8f9fa;\n --bs-success-bg-subtle: #d1e7dd;\n --bs-info-bg-subtle: #cff4fc;\n --bs-warning-bg-subtle: #fff3cd;\n --bs-danger-bg-subtle: #f8d7da;\n --bs-light-bg-subtle: #fcfcfd;\n --bs-dark-bg-subtle: #ced4da;\n --bs-primary-border-subtle: #9ec5fe;\n --bs-secondary-border-subtle: #e9ecef;\n --bs-success-border-subtle: #a3cfbb;\n --bs-info-border-subtle: #9eeaf9;\n --bs-warning-border-subtle: #ffe69c;\n --bs-danger-border-subtle: #f1aeb5;\n --bs-light-border-subtle: #e9ecef;\n --bs-dark-border-subtle: #adb5bd;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-emphasis-color: #000;\n --bs-emphasis-color-rgb: 0, 0, 0;\n --bs-secondary-color: rgba(33, 37, 41, 0.75);\n --bs-secondary-color-rgb: 33, 37, 41;\n --bs-secondary-bg: #e9ecef;\n --bs-secondary-bg-rgb: 233, 236, 239;\n --bs-tertiary-color: rgba(33, 37, 41, 0.5);\n --bs-tertiary-color-rgb: 33, 37, 41;\n --bs-tertiary-bg: #f8f9fa;\n --bs-tertiary-bg-rgb: 248, 249, 250;\n --bs-body-bg: #fff;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-link-color: #0d6efd;\n --bs-link-color-rgb: 13, 110, 253;\n --bs-link-decoration: underline;\n --bs-link-hover-color: #0a58ca;\n --bs-link-hover-color-rgb: 10, 88, 202;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-box-shadow-lg: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175);\n --bs-box-shadow-inset: inset 0 1px 2px rgba(var(--bs-body-color-rgb), 0.075);\n --bs-emphasis-color: #000;\n --bs-form-control-bg: var(--bs-body-bg);\n --bs-form-control-disabled-bg: var(--bs-secondary-bg);\n --bs-highlight-bg: #fff3cd;\n --bs-breakpoint-xs: 0;\n --bs-breakpoint-sm: 576px;\n --bs-breakpoint-md: 768px;\n --bs-breakpoint-lg: 992px;\n --bs-breakpoint-xl: 1200px;\n --bs-breakpoint-xxl: 1400px;\n}\n\n[data-bs-theme=dark] {\n --bs-body-color: #adb5bd;\n --bs-body-color-rgb: 173, 181, 189;\n --bs-body-bg: #212529;\n --bs-body-bg-rgb: 33, 37, 41;\n --bs-emphasis-color: #f8f9fa;\n --bs-emphasis-color-rgb: 248, 249, 250;\n --bs-secondary-color: rgba(173, 181, 189, 0.75);\n --bs-secondary-color-rgb: 173, 181, 189;\n --bs-secondary-bg: #343a40;\n --bs-secondary-bg-rgb: 52, 58, 64;\n --bs-tertiary-color: rgba(173, 181, 189, 0.5);\n --bs-tertiary-color-rgb: 173, 181, 189;\n --bs-tertiary-bg: #2b3035;\n --bs-tertiary-bg-rgb: 43, 48, 53;\n --bs-emphasis-color: #fff;\n --bs-primary-text: #6ea8fe;\n --bs-secondary-text: #dee2e6;\n --bs-success-text: #75b798;\n --bs-info-text: #6edff6;\n --bs-warning-text: #ffda6a;\n --bs-danger-text: #ea868f;\n --bs-light-text: #f8f9fa;\n --bs-dark-text: #dee2e6;\n --bs-primary-bg-subtle: #031633;\n --bs-secondary-bg-subtle: #212529;\n --bs-success-bg-subtle: #051b11;\n --bs-info-bg-subtle: #032830;\n --bs-warning-bg-subtle: #332701;\n --bs-danger-bg-subtle: #2c0b0e;\n --bs-light-bg-subtle: #343a40;\n --bs-dark-bg-subtle: #1a1d20;\n --bs-primary-border-subtle: #084298;\n --bs-secondary-border-subtle: #495057;\n --bs-success-border-subtle: #0f5132;\n --bs-info-border-subtle: #055160;\n --bs-warning-border-subtle: #664d03;\n --bs-danger-border-subtle: #842029;\n --bs-light-border-subtle: #495057;\n --bs-dark-border-subtle: #343a40;\n --bs-heading-color: #fff;\n --bs-link-color: #6ea8fe;\n --bs-link-hover-color: #9ec5fe;\n --bs-link-color-rgb: 110, 168, 254;\n --bs-link-hover-color-rgb: 158, 197, 254;\n --bs-code-color: #e685b5;\n --bs-border-color: #495057;\n --bs-border-color-translucent: rgba(255, 255, 255, 0.15);\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: var(--bs-border-width) solid;\n opacity: 0.25;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n color: var(--bs-heading-color, inherit);\n}\n\nh1, .h1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1, .h1 {\n font-size: 2.5rem;\n }\n}\n\nh2, .h2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2, .h2 {\n font-size: 2rem;\n }\n}\n\nh3, .h3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3, .h3 {\n font-size: 1.75rem;\n }\n}\n\nh4, .h4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4, .h4 {\n font-size: 1.5rem;\n }\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n cursor: help;\n -webkit-text-decoration-skip-ink: none;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-right: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-right: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall, .small {\n font-size: 0.875em;\n}\n\nmark, .mark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));\n text-decoration: underline;\n}\na:hover {\n --bs-link-color-rgb: var(--bs-link-hover-color-rgb);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-secondary-color);\n text-align: right;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: right;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: right;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: calc(1.625rem + 4.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-1 {\n font-size: 5rem;\n }\n}\n\n.display-2 {\n font-size: calc(1.575rem + 3.9vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-2 {\n font-size: 4.5rem;\n }\n}\n\n.display-3 {\n font-size: calc(1.525rem + 3.3vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-3 {\n font-size: 4rem;\n }\n}\n\n.display-4 {\n font-size: calc(1.475rem + 2.7vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-4 {\n font-size: 3.5rem;\n }\n}\n\n.display-5 {\n font-size: calc(1.425rem + 2.1vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-5 {\n font-size: 3rem;\n }\n}\n\n.display-6 {\n font-size: calc(1.375rem + 1.5vw);\n font-weight: 300;\n line-height: 1.2;\n}\n@media (min-width: 1200px) {\n .display-6 {\n font-size: 2.5rem;\n }\n}\n\n.list-unstyled {\n padding-right: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-right: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n margin-left: 0.5rem;\n}\n\n.initialism {\n font-size: 0.875em;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n.blockquote > :last-child {\n margin-bottom: 0;\n}\n\n.blockquote-footer {\n margin-top: -1rem;\n margin-bottom: 1rem;\n font-size: 0.875em;\n color: #6c757d;\n}\n.blockquote-footer::before {\n content: \"— \";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: var(--bs-body-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: var(--bs-border-radius);\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-right: 8.33333333%;\n}\n\n.offset-2 {\n margin-right: 16.66666667%;\n}\n\n.offset-3 {\n margin-right: 25%;\n}\n\n.offset-4 {\n margin-right: 33.33333333%;\n}\n\n.offset-5 {\n margin-right: 41.66666667%;\n}\n\n.offset-6 {\n margin-right: 50%;\n}\n\n.offset-7 {\n margin-right: 58.33333333%;\n}\n\n.offset-8 {\n margin-right: 66.66666667%;\n}\n\n.offset-9 {\n margin-right: 75%;\n}\n\n.offset-10 {\n margin-right: 83.33333333%;\n}\n\n.offset-11 {\n margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-right: 0;\n }\n .offset-sm-1 {\n margin-right: 8.33333333%;\n }\n .offset-sm-2 {\n margin-right: 16.66666667%;\n }\n .offset-sm-3 {\n margin-right: 25%;\n }\n .offset-sm-4 {\n margin-right: 33.33333333%;\n }\n .offset-sm-5 {\n margin-right: 41.66666667%;\n }\n .offset-sm-6 {\n margin-right: 50%;\n }\n .offset-sm-7 {\n margin-right: 58.33333333%;\n }\n .offset-sm-8 {\n margin-right: 66.66666667%;\n }\n .offset-sm-9 {\n margin-right: 75%;\n }\n .offset-sm-10 {\n margin-right: 83.33333333%;\n }\n .offset-sm-11 {\n margin-right: 91.66666667%;\n }\n .g-sm-0,\n .gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n .gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n .gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n .gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n .gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n .gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n .gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n .gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n .gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n .gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n .gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n .gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-right: 0;\n }\n .offset-md-1 {\n margin-right: 8.33333333%;\n }\n .offset-md-2 {\n margin-right: 16.66666667%;\n }\n .offset-md-3 {\n margin-right: 25%;\n }\n .offset-md-4 {\n margin-right: 33.33333333%;\n }\n .offset-md-5 {\n margin-right: 41.66666667%;\n }\n .offset-md-6 {\n margin-right: 50%;\n }\n .offset-md-7 {\n margin-right: 58.33333333%;\n }\n .offset-md-8 {\n margin-right: 66.66666667%;\n }\n .offset-md-9 {\n margin-right: 75%;\n }\n .offset-md-10 {\n margin-right: 83.33333333%;\n }\n .offset-md-11 {\n margin-right: 91.66666667%;\n }\n .g-md-0,\n .gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n .gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n .gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n .gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n .gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n .gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n .gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n .gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n .gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n .gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n .gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n .gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-right: 0;\n }\n .offset-lg-1 {\n margin-right: 8.33333333%;\n }\n .offset-lg-2 {\n margin-right: 16.66666667%;\n }\n .offset-lg-3 {\n margin-right: 25%;\n }\n .offset-lg-4 {\n margin-right: 33.33333333%;\n }\n .offset-lg-5 {\n margin-right: 41.66666667%;\n }\n .offset-lg-6 {\n margin-right: 50%;\n }\n .offset-lg-7 {\n margin-right: 58.33333333%;\n }\n .offset-lg-8 {\n margin-right: 66.66666667%;\n }\n .offset-lg-9 {\n margin-right: 75%;\n }\n .offset-lg-10 {\n margin-right: 83.33333333%;\n }\n .offset-lg-11 {\n margin-right: 91.66666667%;\n }\n .g-lg-0,\n .gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n .gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n .gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n .gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n .gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n .gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n .gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n .gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n .gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n .gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n .gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n .gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-right: 0;\n }\n .offset-xl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xl-3 {\n margin-right: 25%;\n }\n .offset-xl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xl-6 {\n margin-right: 50%;\n }\n .offset-xl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xl-9 {\n margin-right: 75%;\n }\n .offset-xl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xl-11 {\n margin-right: 91.66666667%;\n }\n .g-xl-0,\n .gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n .gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n .gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n .gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n .gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n .gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n .gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n .gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n .gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n .gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n .gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n .gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-right: 0;\n }\n .offset-xxl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-right: 25%;\n }\n .offset-xxl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-right: 50%;\n }\n .offset-xxl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-right: 75%;\n }\n .offset-xxl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-right: 91.66666667%;\n }\n .g-xxl-0,\n .gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n .gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n .gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n .gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n .gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n .gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n .gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n .gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n .gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n .gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n .gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n .gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.table {\n --bs-table-color: var(--bs-body-color);\n --bs-table-bg: transparent;\n --bs-table-border-color: var(--bs-border-color);\n --bs-table-accent-bg: transparent;\n --bs-table-striped-color: var(--bs-body-color);\n --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n --bs-table-active-color: var(--bs-body-color);\n --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n --bs-table-hover-color: var(--bs-body-color);\n --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n width: 100%;\n margin-bottom: 1rem;\n color: var(--bs-table-color);\n vertical-align: top;\n border-color: var(--bs-table-border-color);\n}\n.table > :not(caption) > * > * {\n padding: 0.5rem 0.5rem;\n background-color: var(--bs-table-bg);\n border-bottom-width: var(--bs-border-width);\n box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n vertical-align: inherit;\n}\n.table > thead {\n vertical-align: bottom;\n}\n\n.table-group-divider {\n border-top: calc(var(--bs-border-width) * 2) solid currentcolor;\n}\n\n.caption-top {\n caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n border-width: var(--bs-border-width) 0;\n}\n.table-bordered > :not(caption) > * > * {\n border-width: 0 var(--bs-border-width);\n}\n\n.table-borderless > :not(caption) > * > * {\n border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-striped-columns > :not(caption) > tr > :nth-child(even) {\n --bs-table-accent-bg: var(--bs-table-striped-bg);\n color: var(--bs-table-striped-color);\n}\n\n.table-active {\n --bs-table-accent-bg: var(--bs-table-active-bg);\n color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n --bs-table-accent-bg: var(--bs-table-hover-bg);\n color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n --bs-table-color: #000;\n --bs-table-bg: #cfe2ff;\n --bs-table-border-color: #bacbe6;\n --bs-table-striped-bg: #c5d7f2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bacbe6;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfd1ec;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-secondary {\n --bs-table-color: #000;\n --bs-table-bg: #e2e3e5;\n --bs-table-border-color: #cbccce;\n --bs-table-striped-bg: #d7d8da;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #cbccce;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #d1d2d4;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-success {\n --bs-table-color: #000;\n --bs-table-bg: #d1e7dd;\n --bs-table-border-color: #bcd0c7;\n --bs-table-striped-bg: #c7dbd2;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #bcd0c7;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #c1d6cc;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-info {\n --bs-table-color: #000;\n --bs-table-bg: #cff4fc;\n --bs-table-border-color: #badce3;\n --bs-table-striped-bg: #c5e8ef;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #badce3;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #bfe2e9;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-warning {\n --bs-table-color: #000;\n --bs-table-bg: #fff3cd;\n --bs-table-border-color: #e6dbb9;\n --bs-table-striped-bg: #f2e7c3;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #e6dbb9;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #ece1be;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-danger {\n --bs-table-color: #000;\n --bs-table-bg: #f8d7da;\n --bs-table-border-color: #dfc2c4;\n --bs-table-striped-bg: #eccccf;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfc2c4;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5c7ca;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-light {\n --bs-table-color: #000;\n --bs-table-bg: #f8f9fa;\n --bs-table-border-color: #dfe0e1;\n --bs-table-striped-bg: #ecedee;\n --bs-table-striped-color: #000;\n --bs-table-active-bg: #dfe0e1;\n --bs-table-active-color: #000;\n --bs-table-hover-bg: #e5e6e7;\n --bs-table-hover-color: #000;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-dark {\n --bs-table-color: #fff;\n --bs-table-bg: #212529;\n --bs-table-border-color: #373b3e;\n --bs-table-striped-bg: #2c3034;\n --bs-table-striped-color: #fff;\n --bs-table-active-bg: #373b3e;\n --bs-table-active-color: #fff;\n --bs-table-hover-bg: #323539;\n --bs-table-hover-color: #fff;\n color: var(--bs-table-color);\n border-color: var(--bs-table-border-color);\n}\n\n.table-responsive {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 767.98px) {\n .table-responsive-md {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n@media (max-width: 1399.98px) {\n .table-responsive-xxl {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n}\n.form-label {\n margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + var(--bs-border-width));\n padding-bottom: calc(0.375rem + var(--bs-border-width));\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + var(--bs-border-width));\n padding-bottom: calc(0.5rem + var(--bs-border-width));\n font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + var(--bs-border-width));\n padding-bottom: calc(0.25rem + var(--bs-border-width));\n font-size: 0.875rem;\n}\n\n.form-text {\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-secondary-color);\n}\n\n.form-control {\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n background-clip: padding-box;\n border: var(--bs-border-width) solid var(--bs-border-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n.form-control[type=file] {\n overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control:focus {\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n height: 1.5em;\n}\n.form-control::-webkit-datetime-edit {\n display: block;\n padding: 0;\n}\n.form-control::-moz-placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control::placeholder {\n color: var(--bs-secondary-color);\n opacity: 1;\n}\n.form-control:disabled {\n background-color: var(--bs-form-control-disabled-bg);\n opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n padding: 0.375rem 0.75rem;\n margin: -0.375rem -0.75rem;\n -webkit-margin-end: 0.75rem;\n margin-inline-end: 0.75rem;\n color: var(--bs-body-color);\n background-color: var(--bs-tertiary-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: var(--bs-border-width);\n border-radius: 0;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-control::-webkit-file-upload-button {\n -webkit-transition: none;\n transition: none;\n }\n .form-control::file-selector-button {\n transition: none;\n }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n background-color: var(--bs-secondary-bg);\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: var(--bs-secondary-bg);\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: 0.375rem 0;\n margin-bottom: 0;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: transparent;\n border: solid transparent;\n border-width: var(--bs-border-width) 0;\n}\n.form-control-plaintext:focus {\n outline: 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-left: 0;\n padding-right: 0;\n}\n\n.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n padding: 0.25rem 0.5rem;\n margin: -0.25rem -0.5rem;\n -webkit-margin-end: 0.5rem;\n margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n padding: 0.5rem 1rem;\n margin: -0.5rem -1rem;\n -webkit-margin-end: 1rem;\n margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-sm {\n min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\ntextarea.form-control-lg {\n min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-control-color {\n width: 3rem;\n height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2));\n padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n border: 0 !important;\n border-radius: 0.375rem;\n}\n.form-control-color::-webkit-color-swatch {\n border-radius: 0.375rem;\n}\n.form-control-color.form-control-sm {\n height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2));\n}\n.form-control-color.form-control-lg {\n height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2));\n}\n\n.form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n display: block;\n width: 100%;\n padding: 0.375rem 0.75rem 0.375rem 2.25rem;\n -moz-padding-start: calc(0.75rem - 3px);\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n background-color: var(--bs-form-control-bg);\n background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: left 0.75rem center;\n background-size: 16px 12px;\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: 0.375rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-select {\n transition: none;\n }\n}\n.form-select:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n padding-left: 0.75rem;\n background-image: none;\n}\n.form-select:disabled {\n background-color: var(--bs-form-control-disabled-bg);\n}\n.form-select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 var(--bs-body-color);\n}\n\n.form-select-sm {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-right: 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.form-select-lg {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-right: 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n[data-bs-theme=dark] .form-select {\n --bs-form-select-bg-img: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23adb5bd' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n\n.form-check {\n display: block;\n min-height: 1.5rem;\n padding-right: 1.5em;\n margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n float: right;\n margin-right: -1.5em;\n}\n\n.form-check-reverse {\n padding-left: 1.5em;\n padding-right: 0;\n text-align: left;\n}\n.form-check-reverse .form-check-input {\n float: left;\n margin-left: -1.5em;\n margin-right: 0;\n}\n\n.form-check-input {\n --bs-form-check-bg: var(--bs-form-control-bg);\n width: 1em;\n height: 1em;\n margin-top: 0.25em;\n vertical-align: top;\n background-color: var(--bs-form-check-bg);\n background-image: var(--bs-form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: var(--bs-border-width) solid var(--bs-border-color);\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-print-color-adjust: exact;\n color-adjust: exact;\n print-color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n border-radius: 50%;\n}\n.form-check-input:active {\n filter: brightness(90%);\n}\n.form-check-input:focus {\n border-color: #86b7fe;\n outline: 0;\n box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-check-input:checked {\n background-color: #0d6efd;\n border-color: #0d6efd;\n}\n.form-check-input:checked[type=checkbox] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n background-color: #0d6efd;\n border-color: #0d6efd;\n --bs-form-check-bg-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n pointer-events: none;\n filter: none;\n opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n cursor: default;\n opacity: 0.5;\n}\n\n.form-switch {\n padding-right: 2.5em;\n}\n.form-switch .form-check-input {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n width: 2em;\n margin-right: -2.5em;\n background-image: var(--bs-form-switch-bg);\n background-position: right center;\n border-radius: 2em;\n transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-switch .form-check-input {\n transition: none;\n }\n}\n.form-switch .form-check-input:focus {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n background-position: left center;\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-switch.form-check-reverse {\n padding-left: 2.5em;\n padding-right: 0;\n}\n.form-switch.form-check-reverse .form-check-input {\n margin-left: -2.5em;\n margin-right: 0;\n}\n\n.form-check-inline {\n display: inline-block;\n margin-left: 1rem;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n pointer-events: none;\n filter: none;\n opacity: 0.65;\n}\n\n[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) {\n --bs-form-switch-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e\");\n}\n\n.form-range {\n width: 100%;\n height: 1.5rem;\n padding: 0;\n background-color: transparent;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.form-range:focus {\n outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n}\n.form-range::-moz-focus-outer {\n border: 0;\n}\n.form-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -webkit-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-webkit-slider-thumb {\n -webkit-transition: none;\n transition: none;\n }\n}\n.form-range::-webkit-slider-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-tertiary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #0d6efd;\n border: 0;\n border-radius: 1rem;\n -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n -moz-appearance: none;\n appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-range::-moz-range-thumb {\n -moz-transition: none;\n transition: none;\n }\n}\n.form-range::-moz-range-thumb:active {\n background-color: #b6d4fe;\n}\n.form-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: var(--bs-tertiary-bg);\n border-color: transparent;\n border-radius: 1rem;\n}\n.form-range:disabled {\n pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n background-color: var(--bs-secondary-color);\n}\n.form-range:disabled::-moz-range-thumb {\n background-color: var(--bs-secondary-color);\n}\n\n.form-floating {\n position: relative;\n}\n.form-floating::before:not(.form-control:disabled) {\n position: absolute;\n top: var(--bs-border-width);\n right: var(--bs-border-width);\n width: calc(100% - (calc(calc(0.375em + 0.1875rem) + calc(0.75em + 0.375rem))));\n height: 1.875em;\n content: \"\";\n background-color: var(--bs-form-control-bg);\n border-radius: 0.375rem;\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext,\n.form-floating > .form-select {\n height: calc(3.5rem + calc(var(--bs-border-width) * 2));\n line-height: 1.25;\n}\n.form-floating > label {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n padding: 1rem 0.75rem;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: var(--bs-border-width) solid transparent;\n transform-origin: 100% 0;\n transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .form-floating > label {\n transition: none;\n }\n}\n.form-floating > .form-control,\n.form-floating > .form-control-plaintext {\n padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder {\n color: transparent;\n}\n.form-floating > .form-control::placeholder,\n.form-floating > .form-control-plaintext::placeholder {\n color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown),\n.form-floating > .form-control-plaintext:focus,\n.form-floating > .form-control-plaintext:not(:placeholder-shown) {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill,\n.form-floating > .form-control-plaintext:-webkit-autofill {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n padding-top: 1.625rem;\n padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-control-plaintext ~ label,\n.form-floating > .form-select ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n opacity: 0.65;\n transform: scale(0.85) translateY(-0.5rem) translateX(-0.15rem);\n}\n.form-floating > .form-control-plaintext ~ label {\n border-width: var(--bs-border-width) 0;\n}\n.form-floating > .form-control:disabled ~ label {\n color: #6c757d;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select,\n.input-group > .form-floating {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus,\n.input-group > .form-floating:focus-within {\n z-index: 5;\n}\n.input-group .btn {\n position: relative;\n z-index: 2;\n}\n.input-group .btn:focus {\n z-index: 5;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: var(--bs-body-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-tertiary-bg);\n border: var(--bs-border-width) solid var(--bs-border-color);\n border-radius: 0.375rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n border-radius: 0.5rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-left: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3),\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control,\n.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4),\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control,\n.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n margin-right: calc(var(--bs-border-width) * -1);\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group > .form-floating:not(:first-child) > .form-control,\n.input-group > .form-floating:not(:first-child) > .form-select {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-success-text);\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-success);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: var(--bs-success);\n padding-left: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: left calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: var(--bs-success);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-left: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n border-color: var(--bs-success);\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n padding-left: 4.125rem;\n background-position: left 0.75rem center, center left 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n border-color: var(--bs-success);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n\n.was-validated .form-control-color:valid, .form-control-color.is-valid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n border-color: var(--bs-success);\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n background-color: var(--bs-success-text);\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: var(--bs-success-text);\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n margin-right: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid,\n.was-validated .input-group > .form-select:not(:focus):valid,\n.input-group > .form-select:not(:focus).is-valid,\n.was-validated .input-group > .form-floating:not(:focus-within):valid,\n.input-group > .form-floating:not(:focus-within).is-valid {\n z-index: 3;\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 0.875em;\n color: var(--bs-danger-text);\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: 0.1rem;\n font-size: 0.875rem;\n color: #fff;\n background-color: var(--bs-danger);\n border-radius: var(--bs-border-radius);\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: var(--bs-danger);\n padding-left: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: left calc(0.375em + 0.1875rem) center;\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: var(--bs-danger);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-left: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n border-color: var(--bs-danger);\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n --bs-form-select-bg-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n padding-left: 4.125rem;\n background-position: left 0.75rem center, center left 2.25rem;\n background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n border-color: var(--bs-danger);\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n\n.was-validated .form-control-color:invalid, .form-control-color.is-invalid {\n width: calc(3rem + calc(1.5em + 0.75rem));\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n border-color: var(--bs-danger);\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n background-color: var(--bs-danger-text);\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: var(--bs-danger-text);\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n margin-right: 0.5em;\n}\n\n.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid,\n.was-validated .input-group > .form-select:not(:focus):invalid,\n.input-group > .form-select:not(:focus).is-invalid,\n.was-validated .input-group > .form-floating:not(:focus-within):invalid,\n.input-group > .form-floating:not(:focus-within).is-invalid {\n z-index: 4;\n}\n\n.btn {\n --bs-btn-padding-x: 0.75rem;\n --bs-btn-padding-y: 0.375rem;\n --bs-btn-font-family: ;\n --bs-btn-font-size: 1rem;\n --bs-btn-font-weight: 400;\n --bs-btn-line-height: 1.5;\n --bs-btn-color: #212529;\n --bs-btn-bg: transparent;\n --bs-btn-border-width: var(--bs-border-width);\n --bs-btn-border-color: transparent;\n --bs-btn-border-radius: 0.375rem;\n --bs-btn-hover-border-color: transparent;\n --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n --bs-btn-disabled-opacity: 0.65;\n --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);\n display: inline-block;\n padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x);\n font-family: var(--bs-btn-font-family);\n font-size: var(--bs-btn-font-size);\n font-weight: var(--bs-btn-font-weight);\n line-height: var(--bs-btn-line-height);\n color: var(--bs-btn-color);\n text-align: center;\n text-decoration: none;\n vertical-align: middle;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n border: var(--bs-btn-border-width) solid var(--bs-btn-border-color);\n border-radius: var(--bs-btn-border-radius);\n background-color: var(--bs-btn-bg);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n.btn:hover {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n}\n.btn-check + .btn:hover {\n color: var(--bs-btn-color);\n background-color: var(--bs-btn-bg);\n border-color: var(--bs-btn-border-color);\n}\n.btn:focus-visible {\n color: var(--bs-btn-hover-color);\n background-color: var(--bs-btn-hover-bg);\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:focus-visible + .btn {\n border-color: var(--bs-btn-hover-border-color);\n outline: 0;\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show {\n color: var(--bs-btn-active-color);\n background-color: var(--bs-btn-active-bg);\n border-color: var(--bs-btn-active-border-color);\n}\n.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {\n box-shadow: var(--bs-btn-focus-box-shadow);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n color: var(--bs-btn-disabled-color);\n pointer-events: none;\n background-color: var(--bs-btn-disabled-bg);\n border-color: var(--bs-btn-disabled-border-color);\n opacity: var(--bs-btn-disabled-opacity);\n}\n\n.btn-primary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0b5ed7;\n --bs-btn-hover-border-color: #0a58ca;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0a58ca;\n --bs-btn-active-border-color: #0a53be;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #0d6efd;\n --bs-btn-disabled-border-color: #0d6efd;\n}\n\n.btn-secondary {\n --bs-btn-color: #fff;\n --bs-btn-bg: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #5c636a;\n --bs-btn-hover-border-color: #565e64;\n --bs-btn-focus-shadow-rgb: 130, 138, 145;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #565e64;\n --bs-btn-active-border-color: #51585e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #6c757d;\n --bs-btn-disabled-border-color: #6c757d;\n}\n\n.btn-success {\n --bs-btn-color: #fff;\n --bs-btn-bg: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #157347;\n --bs-btn-hover-border-color: #146c43;\n --bs-btn-focus-shadow-rgb: 60, 153, 110;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #146c43;\n --bs-btn-active-border-color: #13653f;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #198754;\n --bs-btn-disabled-border-color: #198754;\n}\n\n.btn-info {\n --bs-btn-color: #000;\n --bs-btn-bg: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #31d2f2;\n --bs-btn-hover-border-color: #25cff2;\n --bs-btn-focus-shadow-rgb: 11, 172, 204;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #3dd5f3;\n --bs-btn-active-border-color: #25cff2;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #0dcaf0;\n --bs-btn-disabled-border-color: #0dcaf0;\n}\n\n.btn-warning {\n --bs-btn-color: #000;\n --bs-btn-bg: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffca2c;\n --bs-btn-hover-border-color: #ffc720;\n --bs-btn-focus-shadow-rgb: 217, 164, 6;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffcd39;\n --bs-btn-active-border-color: #ffc720;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #ffc107;\n --bs-btn-disabled-border-color: #ffc107;\n}\n\n.btn-danger {\n --bs-btn-color: #fff;\n --bs-btn-bg: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #bb2d3b;\n --bs-btn-hover-border-color: #b02a37;\n --bs-btn-focus-shadow-rgb: 225, 83, 97;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #b02a37;\n --bs-btn-active-border-color: #a52834;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #dc3545;\n --bs-btn-disabled-border-color: #dc3545;\n}\n\n.btn-light {\n --bs-btn-color: #000;\n --bs-btn-bg: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #d3d4d5;\n --bs-btn-hover-border-color: #c6c7c8;\n --bs-btn-focus-shadow-rgb: 211, 212, 213;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #c6c7c8;\n --bs-btn-active-border-color: #babbbc;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #000;\n --bs-btn-disabled-bg: #f8f9fa;\n --bs-btn-disabled-border-color: #f8f9fa;\n}\n\n.btn-dark {\n --bs-btn-color: #fff;\n --bs-btn-bg: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #424649;\n --bs-btn-hover-border-color: #373b3e;\n --bs-btn-focus-shadow-rgb: 66, 70, 73;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #4d5154;\n --bs-btn-active-border-color: #373b3e;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #fff;\n --bs-btn-disabled-bg: #212529;\n --bs-btn-disabled-border-color: #212529;\n}\n\n.btn-outline-primary {\n --bs-btn-color: #0d6efd;\n --bs-btn-border-color: #0d6efd;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #0d6efd;\n --bs-btn-hover-border-color: #0d6efd;\n --bs-btn-focus-shadow-rgb: 13, 110, 253;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #0d6efd;\n --bs-btn-active-border-color: #0d6efd;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0d6efd;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0d6efd;\n --bs-gradient: none;\n}\n\n.btn-outline-secondary {\n --bs-btn-color: #6c757d;\n --bs-btn-border-color: #6c757d;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #6c757d;\n --bs-btn-hover-border-color: #6c757d;\n --bs-btn-focus-shadow-rgb: 108, 117, 125;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #6c757d;\n --bs-btn-active-border-color: #6c757d;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #6c757d;\n --bs-gradient: none;\n}\n\n.btn-outline-success {\n --bs-btn-color: #198754;\n --bs-btn-border-color: #198754;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #198754;\n --bs-btn-hover-border-color: #198754;\n --bs-btn-focus-shadow-rgb: 25, 135, 84;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #198754;\n --bs-btn-active-border-color: #198754;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #198754;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #198754;\n --bs-gradient: none;\n}\n\n.btn-outline-info {\n --bs-btn-color: #0dcaf0;\n --bs-btn-border-color: #0dcaf0;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #0dcaf0;\n --bs-btn-hover-border-color: #0dcaf0;\n --bs-btn-focus-shadow-rgb: 13, 202, 240;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #0dcaf0;\n --bs-btn-active-border-color: #0dcaf0;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #0dcaf0;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #0dcaf0;\n --bs-gradient: none;\n}\n\n.btn-outline-warning {\n --bs-btn-color: #ffc107;\n --bs-btn-border-color: #ffc107;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #ffc107;\n --bs-btn-hover-border-color: #ffc107;\n --bs-btn-focus-shadow-rgb: 255, 193, 7;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #ffc107;\n --bs-btn-active-border-color: #ffc107;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #ffc107;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #ffc107;\n --bs-gradient: none;\n}\n\n.btn-outline-danger {\n --bs-btn-color: #dc3545;\n --bs-btn-border-color: #dc3545;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #dc3545;\n --bs-btn-hover-border-color: #dc3545;\n --bs-btn-focus-shadow-rgb: 220, 53, 69;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #dc3545;\n --bs-btn-active-border-color: #dc3545;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #dc3545;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #dc3545;\n --bs-gradient: none;\n}\n\n.btn-outline-light {\n --bs-btn-color: #f8f9fa;\n --bs-btn-border-color: #f8f9fa;\n --bs-btn-hover-color: #000;\n --bs-btn-hover-bg: #f8f9fa;\n --bs-btn-hover-border-color: #f8f9fa;\n --bs-btn-focus-shadow-rgb: 248, 249, 250;\n --bs-btn-active-color: #000;\n --bs-btn-active-bg: #f8f9fa;\n --bs-btn-active-border-color: #f8f9fa;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #f8f9fa;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #f8f9fa;\n --bs-gradient: none;\n}\n\n.btn-outline-dark {\n --bs-btn-color: #212529;\n --bs-btn-border-color: #212529;\n --bs-btn-hover-color: #fff;\n --bs-btn-hover-bg: #212529;\n --bs-btn-hover-border-color: #212529;\n --bs-btn-focus-shadow-rgb: 33, 37, 41;\n --bs-btn-active-color: #fff;\n --bs-btn-active-bg: #212529;\n --bs-btn-active-border-color: #212529;\n --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n --bs-btn-disabled-color: #212529;\n --bs-btn-disabled-bg: transparent;\n --bs-btn-disabled-border-color: #212529;\n --bs-gradient: none;\n}\n\n.btn-link {\n --bs-btn-font-weight: 400;\n --bs-btn-color: var(--bs-link-color);\n --bs-btn-bg: transparent;\n --bs-btn-border-color: transparent;\n --bs-btn-hover-color: var(--bs-link-hover-color);\n --bs-btn-hover-border-color: transparent;\n --bs-btn-active-color: var(--bs-link-hover-color);\n --bs-btn-active-border-color: transparent;\n --bs-btn-disabled-color: #6c757d;\n --bs-btn-disabled-border-color: transparent;\n --bs-btn-box-shadow: none;\n --bs-btn-focus-shadow-rgb: 49, 132, 253;\n text-decoration: underline;\n}\n.btn-link:focus-visible {\n color: var(--bs-btn-color);\n}\n.btn-link:hover {\n color: var(--bs-btn-hover-color);\n}\n\n.btn-lg, .btn-group-lg > .btn {\n --bs-btn-padding-y: 0.5rem;\n --bs-btn-padding-x: 1rem;\n --bs-btn-font-size: 1.25rem;\n --bs-btn-border-radius: 0.5rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n --bs-btn-padding-y: 0.25rem;\n --bs-btn-padding-x: 0.5rem;\n --bs-btn-font-size: 0.875rem;\n --bs-btn-border-radius: 0.25rem;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n.collapsing.collapse-horizontal {\n width: 0;\n height: auto;\n transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .collapsing.collapse-horizontal {\n transition: none;\n }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n.dropdown-toggle::after {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-left: 0.3em solid transparent;\n border-bottom: 0;\n border-right: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n margin-right: 0;\n}\n\n.dropdown-menu {\n --bs-dropdown-zindex: 1000;\n --bs-dropdown-min-width: 10rem;\n --bs-dropdown-padding-x: 0;\n --bs-dropdown-padding-y: 0.5rem;\n --bs-dropdown-spacer: 0.125rem;\n --bs-dropdown-font-size: 1rem;\n --bs-dropdown-color: var(--bs-body-color);\n --bs-dropdown-bg: var(--bs-body-bg);\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-border-radius: 0.375rem;\n --bs-dropdown-border-width: var(--bs-border-width);\n --bs-dropdown-inner-border-radius: calc(0.375rem - var(--bs-border-width));\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-divider-margin-y: 0.5rem;\n --bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-dropdown-link-color: var(--bs-body-color);\n --bs-dropdown-link-hover-color: var(--bs-body-color);\n --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-item-padding-x: 1rem;\n --bs-dropdown-item-padding-y: 0.25rem;\n --bs-dropdown-header-color: #6c757d;\n --bs-dropdown-header-padding-x: 1rem;\n --bs-dropdown-header-padding-y: 0.5rem;\n position: absolute;\n z-index: var(--bs-dropdown-zindex);\n display: none;\n min-width: var(--bs-dropdown-min-width);\n padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);\n margin: 0;\n font-size: var(--bs-dropdown-font-size);\n color: var(--bs-dropdown-color);\n text-align: right;\n list-style: none;\n background-color: var(--bs-dropdown-bg);\n background-clip: padding-box;\n border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);\n border-radius: var(--bs-dropdown-border-radius);\n}\n.dropdown-menu[data-bs-popper] {\n top: 100%;\n right: 0;\n margin-top: var(--bs-dropdown-spacer);\n}\n\n.dropdown-menu-start {\n --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n left: auto;\n right: 0;\n}\n\n.dropdown-menu-end {\n --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n left: 0;\n right: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-start {\n --bs-position: start;\n }\n .dropdown-menu-sm-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-sm-end {\n --bs-position: end;\n }\n .dropdown-menu-sm-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n@media (min-width: 768px) {\n .dropdown-menu-md-start {\n --bs-position: start;\n }\n .dropdown-menu-md-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-md-end {\n --bs-position: end;\n }\n .dropdown-menu-md-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n@media (min-width: 992px) {\n .dropdown-menu-lg-start {\n --bs-position: start;\n }\n .dropdown-menu-lg-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-lg-end {\n --bs-position: end;\n }\n .dropdown-menu-lg-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n@media (min-width: 1200px) {\n .dropdown-menu-xl-start {\n --bs-position: start;\n }\n .dropdown-menu-xl-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-xl-end {\n --bs-position: end;\n }\n .dropdown-menu-xl-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n@media (min-width: 1400px) {\n .dropdown-menu-xxl-start {\n --bs-position: start;\n }\n .dropdown-menu-xxl-start[data-bs-popper] {\n left: auto;\n right: 0;\n }\n .dropdown-menu-xxl-end {\n --bs-position: end;\n }\n .dropdown-menu-xxl-end[data-bs-popper] {\n left: 0;\n right: auto;\n }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--bs-dropdown-spacer);\n}\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-left: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-right: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n margin-right: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n top: 0;\n left: auto;\n right: 100%;\n margin-top: 0;\n margin-right: var(--bs-dropdown-spacer);\n}\n.dropend .dropdown-toggle::after {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-left: 0;\n border-bottom: 0.3em solid transparent;\n border-right: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n margin-right: 0;\n}\n.dropend .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n top: 0;\n left: 100%;\n right: auto;\n margin-top: 0;\n margin-left: var(--bs-dropdown-spacer);\n}\n.dropstart .dropdown-toggle::after {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n display: none;\n}\n.dropstart .dropdown-toggle::before {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-left: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n margin-right: 0;\n}\n.dropstart .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-divider {\n height: 0;\n margin: var(--bs-dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--bs-dropdown-divider-bg);\n opacity: 1;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n clear: both;\n font-weight: 400;\n color: var(--bs-dropdown-link-color);\n text-align: inherit;\n text-decoration: none;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n border-radius: var(--bs-dropdown-item-border-radius, 0);\n}\n.dropdown-item:hover, .dropdown-item:focus {\n color: var(--bs-dropdown-link-hover-color);\n background-color: var(--bs-dropdown-link-hover-bg);\n}\n.dropdown-item.active, .dropdown-item:active {\n color: var(--bs-dropdown-link-active-color);\n text-decoration: none;\n background-color: var(--bs-dropdown-link-active-bg);\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: var(--bs-dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);\n margin-bottom: 0;\n font-size: 0.875rem;\n color: var(--bs-dropdown-header-color);\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);\n color: var(--bs-dropdown-link-color);\n}\n\n.dropdown-menu-dark {\n --bs-dropdown-color: #dee2e6;\n --bs-dropdown-bg: #343a40;\n --bs-dropdown-border-color: var(--bs-border-color-translucent);\n --bs-dropdown-box-shadow: ;\n --bs-dropdown-link-color: #dee2e6;\n --bs-dropdown-link-hover-color: #fff;\n --bs-dropdown-divider-bg: var(--bs-border-color-translucent);\n --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);\n --bs-dropdown-link-active-color: #fff;\n --bs-dropdown-link-active-bg: #0d6efd;\n --bs-dropdown-link-disabled-color: #adb5bd;\n --bs-dropdown-header-color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group {\n border-radius: 0.375rem;\n}\n.btn-group > :not(.btn-check:first-child) + .btn,\n.btn-group > .btn-group:not(:first-child) {\n margin-right: calc(var(--bs-border-width) * -1);\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn.dropdown-toggle-split:first-child,\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-left: 0.5625rem;\n padding-right: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n margin-right: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n margin-left: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: calc(var(--bs-border-width) * -1);\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n\n.nav {\n --bs-nav-link-padding-x: 1rem;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-link-color);\n --bs-nav-link-hover-color: var(--bs-link-hover-color);\n --bs-nav-link-disabled-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding-right: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);\n font-size: var(--bs-nav-link-font-size);\n font-weight: var(--bs-nav-link-font-weight);\n color: var(--bs-nav-link-color);\n text-decoration: none;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .nav-link {\n transition: none;\n }\n}\n.nav-link:hover, .nav-link:focus {\n color: var(--bs-nav-link-hover-color);\n}\n.nav-link.disabled {\n color: var(--bs-nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n --bs-nav-tabs-border-width: var(--bs-border-width);\n --bs-nav-tabs-border-color: var(--bs-border-color);\n --bs-nav-tabs-border-radius: var(--bs-border-radius);\n --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color);\n --bs-nav-tabs-link-active-color: var(--bs-emphasis-color);\n --bs-nav-tabs-link-active-bg: var(--bs-body-bg);\n --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg);\n border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color);\n}\n.nav-tabs .nav-link {\n margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width));\n background: none;\n border: var(--bs-nav-tabs-border-width) solid transparent;\n border-top-right-radius: var(--bs-nav-tabs-border-radius);\n border-top-left-radius: var(--bs-nav-tabs-border-radius);\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n isolation: isolate;\n border-color: var(--bs-nav-tabs-link-hover-border-color);\n}\n.nav-tabs .nav-link.disabled, .nav-tabs .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: var(--bs-nav-tabs-link-active-color);\n background-color: var(--bs-nav-tabs-link-active-bg);\n border-color: var(--bs-nav-tabs-link-active-border-color);\n}\n.nav-tabs .dropdown-menu {\n margin-top: calc(-1 * var(--bs-nav-tabs-border-width));\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n\n.nav-pills {\n --bs-nav-pills-border-radius: 0.375rem;\n --bs-nav-pills-link-active-color: #fff;\n --bs-nav-pills-link-active-bg: #0d6efd;\n}\n.nav-pills .nav-link {\n background: none;\n border: 0;\n border-radius: var(--bs-nav-pills-border-radius);\n}\n.nav-pills .nav-link:disabled {\n color: var(--bs-nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: var(--bs-nav-pills-link-active-color);\n background-color: var(--bs-nav-pills-link-active-bg);\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n width: 100%;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n --bs-navbar-padding-x: 0;\n --bs-navbar-padding-y: 0.5rem;\n --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65);\n --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8);\n --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3);\n --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-padding-y: 0.3125rem;\n --bs-navbar-brand-margin-end: 1rem;\n --bs-navbar-brand-font-size: 1.25rem;\n --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1);\n --bs-navbar-nav-link-padding-x: 0.5rem;\n --bs-navbar-toggler-padding-y: 0.25rem;\n --bs-navbar-toggler-padding-x: 0.75rem;\n --bs-navbar-toggler-font-size: 1.25rem;\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15);\n --bs-navbar-toggler-border-radius: 0.375rem;\n --bs-navbar-toggler-focus-width: 0.25rem;\n --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x);\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n}\n.navbar-brand {\n padding-top: var(--bs-navbar-brand-padding-y);\n padding-bottom: var(--bs-navbar-brand-padding-y);\n margin-left: var(--bs-navbar-brand-margin-end);\n font-size: var(--bs-navbar-brand-font-size);\n color: var(--bs-navbar-brand-color);\n text-decoration: none;\n white-space: nowrap;\n}\n.navbar-brand:hover, .navbar-brand:focus {\n color: var(--bs-navbar-brand-hover-color);\n}\n\n.navbar-nav {\n --bs-nav-link-padding-x: 0;\n --bs-nav-link-padding-y: 0.5rem;\n --bs-nav-link-font-weight: ;\n --bs-nav-link-color: var(--bs-navbar-color);\n --bs-nav-link-hover-color: var(--bs-navbar-hover-color);\n --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);\n display: flex;\n flex-direction: column;\n padding-right: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.navbar-nav .show > .nav-link,\n.navbar-nav .nav-link.active {\n color: var(--bs-navbar-active-color);\n}\n.navbar-nav .dropdown-menu {\n position: static;\n}\n\n.navbar-text {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: var(--bs-navbar-color);\n}\n.navbar-text a,\n.navbar-text a:hover,\n.navbar-text a:focus {\n color: var(--bs-navbar-active-color);\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);\n font-size: var(--bs-navbar-toggler-font-size);\n line-height: 1;\n color: var(--bs-navbar-color);\n background-color: transparent;\n border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);\n border-radius: var(--bs-navbar-toggler-border-radius);\n transition: var(--bs-navbar-toggler-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .navbar-toggler {\n transition: none;\n }\n}\n.navbar-toggler:hover {\n text-decoration: none;\n}\n.navbar-toggler:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width);\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--bs-navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--bs-scroll-height, 75vh);\n overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-sm .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n .navbar-expand-sm .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-sm .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-md .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n .navbar-expand-md .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-md .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-lg .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n .navbar-expand-lg .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-lg .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n@media (min-width: 1400px) {\n .navbar-expand-xxl {\n flex-wrap: nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xxl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xxl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xxl .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n }\n .navbar-expand-xxl .navbar-nav-scroll {\n overflow: visible;\n }\n .navbar-expand-xxl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xxl .navbar-toggler {\n display: none;\n }\n .navbar-expand-xxl .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-header {\n display: none;\n }\n .navbar-expand-xxl .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n}\n.navbar-expand {\n flex-wrap: nowrap;\n justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n padding-left: var(--bs-navbar-nav-link-padding-x);\n padding-right: var(--bs-navbar-nav-link-padding-x);\n}\n.navbar-expand .navbar-nav-scroll {\n overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n display: none;\n}\n.navbar-expand .offcanvas {\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n transition: none;\n}\n.navbar-expand .offcanvas .offcanvas-header {\n display: none;\n}\n.navbar-expand .offcanvas .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n}\n\n.navbar-dark {\n --bs-navbar-color: rgba(255, 255, 255, 0.55);\n --bs-navbar-hover-color: rgba(255, 255, 255, 0.75);\n --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25);\n --bs-navbar-active-color: #fff;\n --bs-navbar-brand-color: #fff;\n --bs-navbar-brand-hover-color: #fff;\n --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1);\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n[data-bs-theme=dark] .navbar {\n --bs-navbar-toggler-icon-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.card {\n --bs-card-spacer-y: 1rem;\n --bs-card-spacer-x: 1rem;\n --bs-card-title-spacer-y: 0.5rem;\n --bs-card-title-color: ;\n --bs-card-subtitle-color: ;\n --bs-card-border-width: var(--bs-border-width);\n --bs-card-border-color: var(--bs-border-color-translucent);\n --bs-card-border-radius: var(--bs-border-radius);\n --bs-card-box-shadow: ;\n --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-card-cap-padding-y: 0.5rem;\n --bs-card-cap-padding-x: 1rem;\n --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03);\n --bs-card-cap-color: ;\n --bs-card-height: ;\n --bs-card-color: ;\n --bs-card-bg: var(--bs-body-bg);\n --bs-card-img-overlay-padding: 1rem;\n --bs-card-group-margin: 0.75rem;\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n height: var(--bs-card-height);\n word-wrap: break-word;\n background-color: var(--bs-card-bg);\n background-clip: border-box;\n border: var(--bs-card-border-width) solid var(--bs-card-border-color);\n border-radius: var(--bs-card-border-radius);\n}\n.card > hr {\n margin-left: 0;\n margin-right: 0;\n}\n.card > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n}\n.card > .list-group:first-child {\n border-top-width: 0;\n border-top-right-radius: var(--bs-card-inner-border-radius);\n border-top-left-radius: var(--bs-card-inner-border-radius);\n}\n.card > .list-group:last-child {\n border-bottom-width: 0;\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n border-top: 0;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x);\n color: var(--bs-card-color);\n}\n\n.card-title {\n margin-bottom: var(--bs-card-title-spacer-y);\n color: var(--bs-card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-0.5 * var(--bs-card-title-spacer-y));\n margin-bottom: 0;\n color: var(--bs-card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link + .card-link {\n margin-right: var(--bs-card-spacer-x);\n}\n\n.card-header {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n margin-bottom: 0;\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-header:first-child {\n border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0;\n}\n\n.card-footer {\n padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);\n color: var(--bs-card-cap-color);\n background-color: var(--bs-card-cap-bg);\n border-top: var(--bs-card-border-width) solid var(--bs-card-border-color);\n}\n.card-footer:last-child {\n border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius);\n}\n\n.card-header-tabs {\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-bottom: calc(-1 * var(--bs-card-cap-padding-y));\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n border-bottom: 0;\n}\n.card-header-tabs .nav-link.active {\n background-color: var(--bs-card-bg);\n border-bottom-color: var(--bs-card-bg);\n}\n\n.card-header-pills {\n margin-left: calc(-0.5 * var(--bs-card-cap-padding-x));\n margin-right: calc(-0.5 * var(--bs-card-cap-padding-x));\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n padding: var(--bs-card-img-overlay-padding);\n border-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%;\n}\n\n.card-img,\n.card-img-top {\n border-top-right-radius: var(--bs-card-inner-border-radius);\n border-top-left-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-img,\n.card-img-bottom {\n border-bottom-left-radius: var(--bs-card-inner-border-radius);\n border-bottom-right-radius: var(--bs-card-inner-border-radius);\n}\n\n.card-group > .card {\n margin-bottom: var(--bs-card-group-margin);\n}\n@media (min-width: 576px) {\n .card-group {\n display: flex;\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-right: 0;\n border-right: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n}\n\n.accordion {\n --bs-accordion-color: var(--bs-body-color);\n --bs-accordion-bg: var(--bs-body-bg);\n --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n --bs-accordion-border-color: var(--bs-border-color);\n --bs-accordion-border-width: var(--bs-border-width);\n --bs-accordion-border-radius: var(--bs-border-radius);\n --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width)));\n --bs-accordion-btn-padding-x: 1.25rem;\n --bs-accordion-btn-padding-y: 1rem;\n --bs-accordion-btn-color: var(--bs-body-color);\n --bs-accordion-btn-bg: var(--bs-accordion-bg);\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-icon-width: 1.25rem;\n --bs-accordion-btn-icon-transform: rotate(-180deg);\n --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230a58ca'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-focus-border-color: #86b7fe;\n --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-accordion-body-padding-x: 1.25rem;\n --bs-accordion-body-padding-y: 1rem;\n --bs-accordion-active-color: var(--bs-primary-text);\n --bs-accordion-active-bg: var(--bs-primary-bg-subtle);\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);\n font-size: 1rem;\n color: var(--bs-accordion-btn-color);\n text-align: right;\n background-color: var(--bs-accordion-btn-bg);\n border: 0;\n border-radius: 0;\n overflow-anchor: none;\n transition: var(--bs-accordion-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button {\n transition: none;\n }\n}\n.accordion-button:not(.collapsed) {\n color: var(--bs-accordion-active-color);\n background-color: var(--bs-accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color);\n}\n.accordion-button:not(.collapsed)::after {\n background-image: var(--bs-accordion-btn-active-icon);\n transform: var(--bs-accordion-btn-icon-transform);\n}\n.accordion-button::after {\n flex-shrink: 0;\n width: var(--bs-accordion-btn-icon-width);\n height: var(--bs-accordion-btn-icon-width);\n margin-right: auto;\n content: \"\";\n background-image: var(--bs-accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--bs-accordion-btn-icon-width);\n transition: var(--bs-accordion-btn-icon-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .accordion-button::after {\n transition: none;\n }\n}\n.accordion-button:hover {\n z-index: 2;\n}\n.accordion-button:focus {\n z-index: 3;\n border-color: var(--bs-accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--bs-accordion-btn-focus-box-shadow);\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--bs-accordion-color);\n background-color: var(--bs-accordion-bg);\n border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color);\n}\n.accordion-item:first-of-type {\n border-top-right-radius: var(--bs-accordion-border-radius);\n border-top-left-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:first-of-type .accordion-button {\n border-top-right-radius: var(--bs-accordion-inner-border-radius);\n border-top-left-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:not(:first-of-type) {\n border-top: 0;\n}\n.accordion-item:last-of-type {\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n border-bottom-left-radius: var(--bs-accordion-inner-border-radius);\n border-bottom-right-radius: var(--bs-accordion-inner-border-radius);\n}\n.accordion-item:last-of-type .accordion-collapse {\n border-bottom-left-radius: var(--bs-accordion-border-radius);\n border-bottom-right-radius: var(--bs-accordion-border-radius);\n}\n\n.accordion-body {\n padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);\n}\n\n.accordion-flush .accordion-collapse {\n border-width: 0;\n}\n.accordion-flush .accordion-item {\n border-left: 0;\n border-right: 0;\n border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {\n border-radius: 0;\n}\n\n[data-bs-theme=dark] .accordion-button::after {\n --bs-accordion-btn-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n --bs-accordion-btn-active-icon: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.breadcrumb {\n --bs-breadcrumb-padding-x: 0;\n --bs-breadcrumb-padding-y: 0;\n --bs-breadcrumb-margin-bottom: 1rem;\n --bs-breadcrumb-bg: ;\n --bs-breadcrumb-border-radius: ;\n --bs-breadcrumb-divider-color: var(--bs-secondary-color);\n --bs-breadcrumb-item-padding-x: 0.5rem;\n --bs-breadcrumb-item-active-color: var(--bs-secondary-color);\n display: flex;\n flex-wrap: wrap;\n padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);\n margin-bottom: var(--bs-breadcrumb-margin-bottom);\n font-size: var(--bs-breadcrumb-font-size);\n list-style: none;\n background-color: var(--bs-breadcrumb-bg);\n border-radius: var(--bs-breadcrumb-border-radius);\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-right: var(--bs-breadcrumb-item-padding-x);\n}\n.breadcrumb-item + .breadcrumb-item::before {\n float: right;\n padding-left: var(--bs-breadcrumb-item-padding-x);\n color: var(--bs-breadcrumb-divider-color);\n content: var(--bs-breadcrumb-divider, \"/\") ;\n}\n.breadcrumb-item.active {\n color: var(--bs-breadcrumb-item-active-color);\n}\n\n.pagination {\n --bs-pagination-padding-x: 0.75rem;\n --bs-pagination-padding-y: 0.375rem;\n --bs-pagination-font-size: 1rem;\n --bs-pagination-color: var(--bs-link-color);\n --bs-pagination-bg: var(--bs-body-bg);\n --bs-pagination-border-width: var(--bs-border-width);\n --bs-pagination-border-color: var(--bs-border-color);\n --bs-pagination-border-radius: var(--bs-border-radius);\n --bs-pagination-hover-color: var(--bs-link-hover-color);\n --bs-pagination-hover-bg: var(--bs-tertiary-bg);\n --bs-pagination-hover-border-color: var(--bs-border-color);\n --bs-pagination-focus-color: var(--bs-link-hover-color);\n --bs-pagination-focus-bg: var(--bs-secondary-bg);\n --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-pagination-active-color: #fff;\n --bs-pagination-active-bg: #0d6efd;\n --bs-pagination-active-border-color: #0d6efd;\n --bs-pagination-disabled-color: var(--bs-secondary-color);\n --bs-pagination-disabled-bg: var(--bs-secondary-bg);\n --bs-pagination-disabled-border-color: var(--bs-border-color);\n display: flex;\n padding-right: 0;\n list-style: none;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);\n font-size: var(--bs-pagination-font-size);\n color: var(--bs-pagination-color);\n text-decoration: none;\n background-color: var(--bs-pagination-bg);\n border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .page-link {\n transition: none;\n }\n}\n.page-link:hover {\n z-index: 2;\n color: var(--bs-pagination-hover-color);\n background-color: var(--bs-pagination-hover-bg);\n border-color: var(--bs-pagination-hover-border-color);\n}\n.page-link:focus {\n z-index: 3;\n color: var(--bs-pagination-focus-color);\n background-color: var(--bs-pagination-focus-bg);\n outline: 0;\n box-shadow: var(--bs-pagination-focus-box-shadow);\n}\n.page-link.active, .active > .page-link {\n z-index: 3;\n color: var(--bs-pagination-active-color);\n background-color: var(--bs-pagination-active-bg);\n border-color: var(--bs-pagination-active-border-color);\n}\n.page-link.disabled, .disabled > .page-link {\n color: var(--bs-pagination-disabled-color);\n pointer-events: none;\n background-color: var(--bs-pagination-disabled-bg);\n border-color: var(--bs-pagination-disabled-border-color);\n}\n\n.page-item:not(:first-child) .page-link {\n margin-right: calc(var(--bs-border-width) * -1);\n}\n.page-item:first-child .page-link {\n border-top-right-radius: var(--bs-pagination-border-radius);\n border-bottom-right-radius: var(--bs-pagination-border-radius);\n}\n.page-item:last-child .page-link {\n border-top-left-radius: var(--bs-pagination-border-radius);\n border-bottom-left-radius: var(--bs-pagination-border-radius);\n}\n\n.pagination-lg {\n --bs-pagination-padding-x: 1.5rem;\n --bs-pagination-padding-y: 0.75rem;\n --bs-pagination-font-size: 1.25rem;\n --bs-pagination-border-radius: 0.5rem;\n}\n\n.pagination-sm {\n --bs-pagination-padding-x: 0.5rem;\n --bs-pagination-padding-y: 0.25rem;\n --bs-pagination-font-size: 0.875rem;\n --bs-pagination-border-radius: 0.25rem;\n}\n\n.badge {\n --bs-badge-padding-x: 0.65em;\n --bs-badge-padding-y: 0.35em;\n --bs-badge-font-size: 0.75em;\n --bs-badge-font-weight: 700;\n --bs-badge-color: #fff;\n --bs-badge-border-radius: 0.375rem;\n display: inline-block;\n padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x);\n font-size: var(--bs-badge-font-size);\n font-weight: var(--bs-badge-font-weight);\n line-height: 1;\n color: var(--bs-badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: var(--bs-badge-border-radius);\n}\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.alert {\n --bs-alert-bg: transparent;\n --bs-alert-padding-x: 1rem;\n --bs-alert-padding-y: 1rem;\n --bs-alert-margin-bottom: 1rem;\n --bs-alert-color: inherit;\n --bs-alert-border-color: transparent;\n --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color);\n --bs-alert-border-radius: 0.375rem;\n --bs-alert-link-color: inherit;\n position: relative;\n padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x);\n margin-bottom: var(--bs-alert-margin-bottom);\n color: var(--bs-alert-color);\n background-color: var(--bs-alert-bg);\n border: var(--bs-alert-border);\n border-radius: var(--bs-alert-border-radius);\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n color: var(--bs-alert-link-color);\n}\n\n.alert-dismissible {\n padding-left: 3rem;\n}\n.alert-dismissible .btn-close {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2;\n padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n --bs-alert-color: var(--bs-primary-text);\n --bs-alert-bg: var(--bs-primary-bg-subtle);\n --bs-alert-border-color: var(--bs-primary-border-subtle);\n --bs-alert-link-color: var(--bs-primary-text);\n}\n\n.alert-secondary {\n --bs-alert-color: var(--bs-secondary-text);\n --bs-alert-bg: var(--bs-secondary-bg-subtle);\n --bs-alert-border-color: var(--bs-secondary-border-subtle);\n --bs-alert-link-color: var(--bs-secondary-text);\n}\n\n.alert-success {\n --bs-alert-color: var(--bs-success-text);\n --bs-alert-bg: var(--bs-success-bg-subtle);\n --bs-alert-border-color: var(--bs-success-border-subtle);\n --bs-alert-link-color: var(--bs-success-text);\n}\n\n.alert-info {\n --bs-alert-color: var(--bs-info-text);\n --bs-alert-bg: var(--bs-info-bg-subtle);\n --bs-alert-border-color: var(--bs-info-border-subtle);\n --bs-alert-link-color: var(--bs-info-text);\n}\n\n.alert-warning {\n --bs-alert-color: var(--bs-warning-text);\n --bs-alert-bg: var(--bs-warning-bg-subtle);\n --bs-alert-border-color: var(--bs-warning-border-subtle);\n --bs-alert-link-color: var(--bs-warning-text);\n}\n\n.alert-danger {\n --bs-alert-color: var(--bs-danger-text);\n --bs-alert-bg: var(--bs-danger-bg-subtle);\n --bs-alert-border-color: var(--bs-danger-border-subtle);\n --bs-alert-link-color: var(--bs-danger-text);\n}\n\n.alert-light {\n --bs-alert-color: var(--bs-light-text);\n --bs-alert-bg: var(--bs-light-bg-subtle);\n --bs-alert-border-color: var(--bs-light-border-subtle);\n --bs-alert-link-color: var(--bs-light-text);\n}\n\n.alert-dark {\n --bs-alert-color: var(--bs-dark-text);\n --bs-alert-bg: var(--bs-dark-bg-subtle);\n --bs-alert-border-color: var(--bs-dark-border-subtle);\n --bs-alert-link-color: var(--bs-dark-text);\n}\n\n@keyframes progress-bar-stripes {\n 0% {\n background-position-x: 1rem;\n }\n}\n.progress,\n.progress-stacked {\n --bs-progress-height: 1rem;\n --bs-progress-font-size: 0.75rem;\n --bs-progress-bg: var(--bs-secondary-bg);\n --bs-progress-border-radius: var(--bs-border-radius);\n --bs-progress-box-shadow: var(--bs-box-shadow-inset);\n --bs-progress-bar-color: #fff;\n --bs-progress-bar-bg: #0d6efd;\n --bs-progress-bar-transition: width 0.6s ease;\n display: flex;\n height: var(--bs-progress-height);\n overflow: hidden;\n font-size: var(--bs-progress-font-size);\n background-color: var(--bs-progress-bg);\n border-radius: var(--bs-progress-border-radius);\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--bs-progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--bs-progress-bar-bg);\n transition: var(--bs-progress-bar-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: var(--bs-progress-height) var(--bs-progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n.progress-bar-animated {\n animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.list-group {\n --bs-list-group-color: var(--bs-body-color);\n --bs-list-group-bg: var(--bs-body-bg);\n --bs-list-group-border-color: var(--bs-border-color);\n --bs-list-group-border-width: var(--bs-border-width);\n --bs-list-group-border-radius: var(--bs-border-radius);\n --bs-list-group-item-padding-x: 1rem;\n --bs-list-group-item-padding-y: 0.5rem;\n --bs-list-group-action-color: var(--bs-secondary-color);\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-tertiary-bg);\n --bs-list-group-action-active-color: var(--bs-body-color);\n --bs-list-group-action-active-bg: var(--bs-secondary-bg);\n --bs-list-group-disabled-color: var(--bs-secondary-color);\n --bs-list-group-disabled-bg: var(--bs-body-bg);\n --bs-list-group-active-color: #fff;\n --bs-list-group-active-bg: #0d6efd;\n --bs-list-group-active-border-color: #0d6efd;\n display: flex;\n flex-direction: column;\n padding-right: 0;\n margin-bottom: 0;\n border-radius: var(--bs-list-group-border-radius);\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n}\n.list-group-numbered > .list-group-item::before {\n content: counters(section, \".\") \". \";\n counter-increment: section;\n}\n\n.list-group-item-action {\n width: 100%;\n color: var(--bs-list-group-action-color);\n text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: var(--bs-list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--bs-list-group-action-hover-bg);\n}\n.list-group-item-action:active {\n color: var(--bs-list-group-action-active-color);\n background-color: var(--bs-list-group-action-active-bg);\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);\n color: var(--bs-list-group-color);\n text-decoration: none;\n background-color: var(--bs-list-group-bg);\n border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);\n}\n.list-group-item:first-child {\n border-top-right-radius: inherit;\n border-top-left-radius: inherit;\n}\n.list-group-item:last-child {\n border-bottom-left-radius: inherit;\n border-bottom-right-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n color: var(--bs-list-group-disabled-color);\n pointer-events: none;\n background-color: var(--bs-list-group-disabled-bg);\n}\n.list-group-item.active {\n z-index: 2;\n color: var(--bs-list-group-active-color);\n background-color: var(--bs-list-group-active-bg);\n border-color: var(--bs-list-group-active-border-color);\n}\n.list-group-item + .list-group-item {\n border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n margin-top: calc(-1 * var(--bs-list-group-border-width));\n border-top-width: var(--bs-list-group-border-width);\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-sm > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-md > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-lg > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-xl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n@media (min-width: 1400px) {\n .list-group-horizontal-xxl {\n flex-direction: row;\n }\n .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) {\n border-bottom-right-radius: var(--bs-list-group-border-radius);\n border-top-left-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) {\n border-top-left-radius: var(--bs-list-group-border-radius);\n border-bottom-right-radius: 0;\n }\n .list-group-horizontal-xxl > .list-group-item.active {\n margin-top: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n border-top-width: var(--bs-list-group-border-width);\n border-right-width: 0;\n }\n .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n margin-right: calc(-1 * var(--bs-list-group-border-width));\n border-right-width: var(--bs-list-group-border-width);\n }\n}\n.list-group-flush {\n border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n border-width: 0 0 var(--bs-list-group-border-width);\n}\n.list-group-flush > .list-group-item:last-child {\n border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n --bs-list-group-color: var(--bs-primary-text);\n --bs-list-group-bg: var(--bs-primary-bg-subtle);\n --bs-list-group-border-color: var(--bs-primary-border-subtle);\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);\n}\n.list-group-item-primary.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-primary-text);\n --bs-list-group-active-border-color: var(--bs-primary-text);\n}\n\n.list-group-item-secondary {\n --bs-list-group-color: var(--bs-secondary-text);\n --bs-list-group-bg: var(--bs-secondary-bg-subtle);\n --bs-list-group-border-color: var(--bs-secondary-border-subtle);\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);\n}\n.list-group-item-secondary.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-secondary-text);\n --bs-list-group-active-border-color: var(--bs-secondary-text);\n}\n\n.list-group-item-success {\n --bs-list-group-color: var(--bs-success-text);\n --bs-list-group-bg: var(--bs-success-bg-subtle);\n --bs-list-group-border-color: var(--bs-success-border-subtle);\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-success-border-subtle);\n}\n.list-group-item-success.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-success-text);\n --bs-list-group-active-border-color: var(--bs-success-text);\n}\n\n.list-group-item-info {\n --bs-list-group-color: var(--bs-info-text);\n --bs-list-group-bg: var(--bs-info-bg-subtle);\n --bs-list-group-border-color: var(--bs-info-border-subtle);\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-info-border-subtle);\n}\n.list-group-item-info.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-info-text);\n --bs-list-group-active-border-color: var(--bs-info-text);\n}\n\n.list-group-item-warning {\n --bs-list-group-color: var(--bs-warning-text);\n --bs-list-group-bg: var(--bs-warning-bg-subtle);\n --bs-list-group-border-color: var(--bs-warning-border-subtle);\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);\n}\n.list-group-item-warning.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-warning-text);\n --bs-list-group-active-border-color: var(--bs-warning-text);\n}\n\n.list-group-item-danger {\n --bs-list-group-color: var(--bs-danger-text);\n --bs-list-group-bg: var(--bs-danger-bg-subtle);\n --bs-list-group-border-color: var(--bs-danger-border-subtle);\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);\n}\n.list-group-item-danger.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-danger-text);\n --bs-list-group-active-border-color: var(--bs-danger-text);\n}\n\n.list-group-item-light {\n --bs-list-group-color: var(--bs-light-text);\n --bs-list-group-bg: var(--bs-light-bg-subtle);\n --bs-list-group-border-color: var(--bs-light-border-subtle);\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-light-border-subtle);\n}\n.list-group-item-light.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-light-text);\n --bs-list-group-active-border-color: var(--bs-light-text);\n}\n\n.list-group-item-dark {\n --bs-list-group-color: var(--bs-dark-text);\n --bs-list-group-bg: var(--bs-dark-bg-subtle);\n --bs-list-group-border-color: var(--bs-dark-border-subtle);\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n --bs-list-group-action-hover-color: var(--bs-emphasis-color);\n --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);\n}\n.list-group-item-dark.list-group-item-action:active {\n --bs-list-group-active-color: var(--bs-emphasis-color);\n --bs-list-group-active-bg: var(--bs-dark-text);\n --bs-list-group-active-border-color: var(--bs-dark-text);\n}\n\n.btn-close {\n --bs-btn-close-color: #000;\n --bs-btn-close-bg: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n --bs-btn-close-opacity: 0.5;\n --bs-btn-close-hover-opacity: 0.75;\n --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n --bs-btn-close-focus-opacity: 1;\n --bs-btn-close-disabled-opacity: 0.25;\n --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);\n box-sizing: content-box;\n width: 1em;\n height: 1em;\n padding: 0.25em 0.25em;\n color: var(--bs-btn-close-color);\n background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat;\n border: 0;\n border-radius: 0.375rem;\n opacity: var(--bs-btn-close-opacity);\n}\n.btn-close:hover {\n color: var(--bs-btn-close-color);\n text-decoration: none;\n opacity: var(--bs-btn-close-hover-opacity);\n}\n.btn-close:focus {\n outline: 0;\n box-shadow: var(--bs-btn-close-focus-shadow);\n opacity: var(--bs-btn-close-focus-opacity);\n}\n.btn-close:disabled, .btn-close.disabled {\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n opacity: var(--bs-btn-close-disabled-opacity);\n}\n\n.btn-close-white {\n filter: var(--bs-btn-close-white-filter);\n}\n\n[data-bs-theme=dark] .btn-close {\n filter: var(--bs-btn-close-white-filter);\n}\n\n.toast {\n --bs-toast-zindex: 1090;\n --bs-toast-padding-x: 0.75rem;\n --bs-toast-padding-y: 0.5rem;\n --bs-toast-spacing: 1.5rem;\n --bs-toast-max-width: 350px;\n --bs-toast-font-size: 0.875rem;\n --bs-toast-color: ;\n --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-border-width: var(--bs-border-width);\n --bs-toast-border-color: var(--bs-border-color-translucent);\n --bs-toast-border-radius: var(--bs-border-radius);\n --bs-toast-box-shadow: var(--bs-box-shadow);\n --bs-toast-header-color: var(--bs-secondary-color);\n --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85);\n --bs-toast-header-border-color: var(--bs-border-color-translucent);\n width: var(--bs-toast-max-width);\n max-width: 100%;\n font-size: var(--bs-toast-font-size);\n color: var(--bs-toast-color);\n pointer-events: auto;\n background-color: var(--bs-toast-bg);\n background-clip: padding-box;\n border: var(--bs-toast-border-width) solid var(--bs-toast-border-color);\n box-shadow: var(--bs-toast-box-shadow);\n border-radius: var(--bs-toast-border-radius);\n}\n.toast.showing {\n opacity: 0;\n}\n.toast:not(.show) {\n display: none;\n}\n\n.toast-container {\n --bs-toast-zindex: 1090;\n position: absolute;\n z-index: var(--bs-toast-zindex);\n width: -webkit-max-content;\n width: -moz-max-content;\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n margin-bottom: var(--bs-toast-spacing);\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x);\n color: var(--bs-toast-header-color);\n background-color: var(--bs-toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);\n border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));\n}\n.toast-header .btn-close {\n margin-left: calc(-0.5 * var(--bs-toast-padding-x));\n margin-right: var(--bs-toast-padding-x);\n}\n\n.toast-body {\n padding: var(--bs-toast-padding-x);\n word-wrap: break-word;\n}\n\n.modal {\n --bs-modal-zindex: 1055;\n --bs-modal-width: 500px;\n --bs-modal-padding: 1rem;\n --bs-modal-margin: 0.5rem;\n --bs-modal-color: ;\n --bs-modal-bg: var(--bs-body-bg);\n --bs-modal-border-color: var(--bs-border-color-translucent);\n --bs-modal-border-width: var(--bs-border-width);\n --bs-modal-border-radius: var(--bs-border-radius-lg);\n --bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width)));\n --bs-modal-header-padding-x: 1rem;\n --bs-modal-header-padding-y: 1rem;\n --bs-modal-header-padding: 1rem 1rem;\n --bs-modal-header-border-color: var(--bs-border-color);\n --bs-modal-header-border-width: var(--bs-border-width);\n --bs-modal-title-line-height: 1.5;\n --bs-modal-footer-gap: 0.5rem;\n --bs-modal-footer-bg: ;\n --bs-modal-footer-border-color: var(--bs-border-color);\n --bs-modal-footer-border-width: var(--bs-border-width);\n position: fixed;\n top: 0;\n right: 0;\n z-index: var(--bs-modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--bs-modal-margin);\n pointer-events: none;\n}\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n.modal.show .modal-dialog {\n transform: none;\n}\n.modal.modal-static .modal-dialog {\n transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--bs-modal-margin) * 2);\n}\n.modal-dialog-scrollable .modal-content {\n max-height: 100%;\n overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--bs-modal-margin) * 2);\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n color: var(--bs-modal-color);\n pointer-events: auto;\n background-color: var(--bs-modal-bg);\n background-clip: padding-box;\n border: var(--bs-modal-border-width) solid var(--bs-modal-border-color);\n border-radius: var(--bs-modal-border-radius);\n outline: 0;\n}\n\n.modal-backdrop {\n --bs-backdrop-zindex: 1050;\n --bs-backdrop-bg: #000;\n --bs-backdrop-opacity: 0.5;\n position: fixed;\n top: 0;\n right: 0;\n z-index: var(--bs-backdrop-zindex);\n width: 100vw;\n height: 100vh;\n background-color: var(--bs-backdrop-bg);\n}\n.modal-backdrop.fade {\n opacity: 0;\n}\n.modal-backdrop.show {\n opacity: var(--bs-backdrop-opacity);\n}\n\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-modal-header-padding);\n border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);\n border-top-right-radius: var(--bs-modal-inner-border-radius);\n border-top-left-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-header .btn-close {\n padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5);\n margin: calc(-0.5 * var(--bs-modal-header-padding-y)) auto calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x));\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: var(--bs-modal-title-line-height);\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: var(--bs-modal-padding);\n}\n\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center;\n justify-content: flex-end;\n padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5);\n background-color: var(--bs-modal-footer-bg);\n border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);\n border-bottom-left-radius: var(--bs-modal-inner-border-radius);\n border-bottom-right-radius: var(--bs-modal-inner-border-radius);\n}\n.modal-footer > * {\n margin: calc(var(--bs-modal-footer-gap) * 0.5);\n}\n\n@media (min-width: 576px) {\n .modal {\n --bs-modal-margin: 1.75rem;\n --bs-modal-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n }\n .modal-dialog {\n max-width: var(--bs-modal-width);\n margin-left: auto;\n margin-right: auto;\n }\n .modal-sm {\n --bs-modal-width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n --bs-modal-width: 800px;\n }\n}\n@media (min-width: 1200px) {\n .modal-xl {\n --bs-modal-width: 1140px;\n }\n}\n.modal-fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n}\n.modal-fullscreen .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n}\n.modal-fullscreen .modal-header,\n.modal-fullscreen .modal-footer {\n border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n overflow-y: auto;\n}\n\n@media (max-width: 575.98px) {\n .modal-fullscreen-sm-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-sm-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-header,\n .modal-fullscreen-sm-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-sm-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 767.98px) {\n .modal-fullscreen-md-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-md-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-header,\n .modal-fullscreen-md-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-md-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 991.98px) {\n .modal-fullscreen-lg-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-lg-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-header,\n .modal-fullscreen-lg-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-lg-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1199.98px) {\n .modal-fullscreen-xl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-header,\n .modal-fullscreen-xl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xl-down .modal-body {\n overflow-y: auto;\n }\n}\n@media (max-width: 1399.98px) {\n .modal-fullscreen-xxl-down {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n }\n .modal-fullscreen-xxl-down .modal-content {\n height: 100%;\n border: 0;\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-header,\n .modal-fullscreen-xxl-down .modal-footer {\n border-radius: 0;\n }\n .modal-fullscreen-xxl-down .modal-body {\n overflow-y: auto;\n }\n}\n.tooltip {\n --bs-tooltip-zindex: 1080;\n --bs-tooltip-max-width: 200px;\n --bs-tooltip-padding-x: 0.5rem;\n --bs-tooltip-padding-y: 0.25rem;\n --bs-tooltip-margin: ;\n --bs-tooltip-font-size: 0.875rem;\n --bs-tooltip-color: var(--bs-body-bg);\n --bs-tooltip-bg: var(--bs-emphasis-color);\n --bs-tooltip-border-radius: var(--bs-border-radius);\n --bs-tooltip-opacity: 0.9;\n --bs-tooltip-arrow-width: 0.8rem;\n --bs-tooltip-arrow-height: 0.4rem;\n z-index: var(--bs-tooltip-zindex);\n display: block;\n padding: var(--bs-tooltip-arrow-height);\n margin: var(--bs-tooltip-margin);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: right;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-tooltip-font-size);\n word-wrap: break-word;\n opacity: 0;\n}\n.tooltip.show {\n opacity: var(--bs-tooltip-opacity);\n}\n.tooltip .tooltip-arrow {\n display: block;\n width: var(--bs-tooltip-arrow-width);\n height: var(--bs-tooltip-arrow-height);\n}\n.tooltip .tooltip-arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n top: -1px;\n border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-top-color: var(--bs-tooltip-bg);\n}\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n left: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n right: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0;\n border-right-color: var(--bs-tooltip-bg);\n}\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n bottom: -1px;\n border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-bottom-color: var(--bs-tooltip-bg);\n}\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n right: 0;\n width: var(--bs-tooltip-arrow-height);\n height: var(--bs-tooltip-arrow-width);\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n left: -1px;\n border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height);\n border-left-color: var(--bs-tooltip-bg);\n}\n.tooltip-inner {\n max-width: var(--bs-tooltip-max-width);\n padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);\n color: var(--bs-tooltip-color);\n text-align: center;\n background-color: var(--bs-tooltip-bg);\n border-radius: var(--bs-tooltip-border-radius);\n}\n\n.popover {\n --bs-popover-zindex: 1070;\n --bs-popover-max-width: 276px;\n --bs-popover-font-size: 0.875rem;\n --bs-popover-bg: var(--bs-body-bg);\n --bs-popover-border-width: var(--bs-border-width);\n --bs-popover-border-color: var(--bs-border-color-translucent);\n --bs-popover-border-radius: var(--bs-border-radius-lg);\n --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width));\n --bs-popover-box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15);\n --bs-popover-header-padding-x: 1rem;\n --bs-popover-header-padding-y: 0.5rem;\n --bs-popover-header-font-size: 1rem;\n --bs-popover-header-color: ;\n --bs-popover-header-bg: var(--bs-secondary-bg);\n --bs-popover-body-padding-x: 1rem;\n --bs-popover-body-padding-y: 1rem;\n --bs-popover-body-color: var(--bs-body-color);\n --bs-popover-arrow-width: 1rem;\n --bs-popover-arrow-height: 0.5rem;\n --bs-popover-arrow-border: var(--bs-popover-border-color);\n z-index: var(--bs-popover-zindex);\n display: block;\n max-width: var(--bs-popover-max-width);\n font-family: var(--bs-font-sans-serif);\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: right;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n font-size: var(--bs-popover-font-size);\n word-wrap: break-word;\n background-color: var(--bs-popover-bg);\n background-clip: padding-box;\n border: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-radius: var(--bs-popover-border-radius);\n}\n.popover .popover-arrow {\n display: block;\n width: var(--bs-popover-arrow-width);\n height: var(--bs-popover-arrow-height);\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n bottom: 0;\n border-top-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n bottom: var(--bs-popover-border-width);\n border-top-color: var(--bs-popover-bg);\n}\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n left: 0;\n border-right-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n left: var(--bs-popover-border-width);\n border-right-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n top: 0;\n border-bottom-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n top: var(--bs-popover-border-width);\n border-bottom-color: var(--bs-popover-bg);\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n position: absolute;\n top: 0;\n right: 50%;\n display: block;\n width: var(--bs-popover-arrow-width);\n margin-right: calc(-0.5 * var(--bs-popover-arrow-width));\n content: \"\";\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);\n}\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));\n width: var(--bs-popover-arrow-height);\n height: var(--bs-popover-arrow-width);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height);\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n right: 0;\n border-left-color: var(--bs-popover-arrow-border);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n right: var(--bs-popover-border-width);\n border-left-color: var(--bs-popover-bg);\n}\n.popover-header {\n padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);\n margin-bottom: 0;\n font-size: var(--bs-popover-header-font-size);\n color: var(--bs-popover-header-color);\n background-color: var(--bs-popover-header-bg);\n border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color);\n border-top-right-radius: var(--bs-popover-inner-border-radius);\n border-top-left-radius: var(--bs-popover-inner-border-radius);\n}\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);\n color: var(--bs-popover-body-color);\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: right;\n width: 100%;\n margin-left: -100%;\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(-100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-start,\n .carousel-fade .active.carousel-item-end {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n padding: 0;\n color: #fff;\n text-align: center;\n background: none;\n border: 0;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n right: 0;\n}\n\n.carousel-control-next {\n left: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n margin-left: 15%;\n margin-bottom: 1rem;\n margin-right: 15%;\n list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n padding: 0;\n margin-left: 3px;\n margin-right: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: 0.5;\n transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators [data-bs-target] {\n transition: none;\n }\n}\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n left: 15%;\n bottom: 1.25rem;\n right: 15%;\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n color: #fff;\n text-align: center;\n}\n\n.carousel-dark .carousel-control-next-icon,\n.carousel-dark .carousel-control-prev-icon {\n filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n.carousel-dark .carousel-caption {\n color: #000;\n}\n\n[data-bs-theme=dark] .carousel .carousel-control-next-icon,\n[data-bs-theme=dark] .carousel .carousel-control-prev-icon {\n filter: invert(1) grayscale(100);\n}\n[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target] {\n background-color: #000;\n}\n[data-bs-theme=dark] .carousel .carousel-caption {\n color: #000;\n}\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--bs-spinner-width);\n height: var(--bs-spinner-height);\n vertical-align: var(--bs-spinner-vertical-align);\n border-radius: 50%;\n animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name);\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg) ;\n }\n}\n.spinner-border {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-border-width: 0.25em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-border;\n border: var(--bs-spinner-border-width) solid currentcolor;\n border-left-color: transparent;\n}\n\n.spinner-border-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n --bs-spinner-border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n.spinner-grow {\n --bs-spinner-width: 2rem;\n --bs-spinner-height: 2rem;\n --bs-spinner-vertical-align: -0.125em;\n --bs-spinner-animation-speed: 0.75s;\n --bs-spinner-animation-name: spinner-grow;\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --bs-spinner-width: 1rem;\n --bs-spinner-height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --bs-spinner-animation-speed: 1.5s;\n }\n}\n.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm {\n --bs-offcanvas-zindex: 1045;\n --bs-offcanvas-width: 400px;\n --bs-offcanvas-height: 30vh;\n --bs-offcanvas-padding-x: 1rem;\n --bs-offcanvas-padding-y: 1rem;\n --bs-offcanvas-color: var(--bs-body-color);\n --bs-offcanvas-bg: var(--bs-body-bg);\n --bs-offcanvas-border-width: var(--bs-border-width);\n --bs-offcanvas-border-color: var(--bs-border-color-translucent);\n --bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075);\n --bs-offcanvas-transition: transform 0.3s ease-in-out;\n --bs-offcanvas-title-line-height: 1.5;\n}\n\n@media (max-width: 575.98px) {\n .offcanvas-sm {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-sm {\n transition: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 575.98px) {\n .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {\n visibility: visible;\n }\n}\n@media (min-width: 576px) {\n .offcanvas-sm {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-sm .offcanvas-header {\n display: none;\n }\n .offcanvas-sm .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 767.98px) {\n .offcanvas-md {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-md {\n transition: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 767.98px) {\n .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {\n visibility: visible;\n }\n}\n@media (min-width: 768px) {\n .offcanvas-md {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-md .offcanvas-header {\n display: none;\n }\n .offcanvas-md .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 991.98px) {\n .offcanvas-lg {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-lg {\n transition: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 991.98px) {\n .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {\n visibility: visible;\n }\n}\n@media (min-width: 992px) {\n .offcanvas-lg {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-lg .offcanvas-header {\n display: none;\n }\n .offcanvas-lg .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1199.98px) {\n .offcanvas-xl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xl {\n transition: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1199.98px) {\n .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1200px) {\n .offcanvas-xl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xl .offcanvas-header {\n display: none;\n }\n .offcanvas-xl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n@media (max-width: 1399.98px) {\n .offcanvas-xxl {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n }\n}\n@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) {\n .offcanvas-xxl {\n transition: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {\n transform: none;\n }\n}\n@media (max-width: 1399.98px) {\n .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {\n visibility: visible;\n }\n}\n@media (min-width: 1400px) {\n .offcanvas-xxl {\n --bs-offcanvas-height: auto;\n --bs-offcanvas-border-width: 0;\n background-color: transparent !important;\n }\n .offcanvas-xxl .offcanvas-header {\n display: none;\n }\n .offcanvas-xxl .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n background-color: transparent !important;\n }\n}\n\n.offcanvas {\n position: fixed;\n bottom: 0;\n z-index: var(--bs-offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--bs-offcanvas-color);\n visibility: hidden;\n background-color: var(--bs-offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n transition: var(--bs-offcanvas-transition);\n}\n@media (prefers-reduced-motion: reduce) {\n .offcanvas {\n transition: none;\n }\n}\n.offcanvas.offcanvas-start {\n top: 0;\n right: 0;\n width: var(--bs-offcanvas-width);\n border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(100%);\n}\n.offcanvas.offcanvas-end {\n top: 0;\n left: 0;\n width: var(--bs-offcanvas-width);\n border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateX(-100%);\n}\n.offcanvas.offcanvas-top {\n top: 0;\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(-100%);\n}\n.offcanvas.offcanvas-bottom {\n left: 0;\n right: 0;\n height: var(--bs-offcanvas-height);\n max-height: 100%;\n border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);\n transform: translateY(100%);\n}\n.offcanvas.showing, .offcanvas.show:not(.hiding) {\n transform: none;\n}\n.offcanvas.showing, .offcanvas.hiding, .offcanvas.show {\n visibility: visible;\n}\n\n.offcanvas-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n.offcanvas-backdrop.fade {\n opacity: 0;\n}\n.offcanvas-backdrop.show {\n opacity: 0.5;\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n}\n.offcanvas-header .btn-close {\n padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);\n margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));\n margin-left: calc(-0.5 * var(--bs-offcanvas-padding-x));\n margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--bs-offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);\n overflow-y: auto;\n}\n\n.placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: 0.5;\n}\n.placeholder.btn::before {\n display: inline-block;\n content: \"\";\n}\n\n.placeholder-xs {\n min-height: 0.6em;\n}\n\n.placeholder-sm {\n min-height: 0.8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: 0.2;\n }\n}\n.placeholder-wave {\n -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n -webkit-mask-size: 200% 100%;\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n -webkit-mask-position: -200% 0%;\n mask-position: -200% 0%;\n }\n}\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.text-bg-primary {\n color: #fff !important;\n background-color: RGBA(13, 110, 253, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-secondary {\n color: #fff !important;\n background-color: RGBA(108, 117, 125, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-success {\n color: #fff !important;\n background-color: RGBA(25, 135, 84, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-info {\n color: #000 !important;\n background-color: RGBA(13, 202, 240, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-warning {\n color: #000 !important;\n background-color: RGBA(255, 193, 7, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-danger {\n color: #fff !important;\n background-color: RGBA(220, 53, 69, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-light {\n color: #000 !important;\n background-color: RGBA(248, 249, 250, var(--bs-bg-opacity, 1)) !important;\n}\n\n.text-bg-dark {\n color: #fff !important;\n background-color: RGBA(33, 37, 41, var(--bs-bg-opacity, 1)) !important;\n}\n\n.link-primary {\n color: #0d6efd !important;\n}\n.link-primary:hover, .link-primary:focus {\n color: #0a58ca !important;\n}\n\n.link-secondary {\n color: #6c757d !important;\n}\n.link-secondary:hover, .link-secondary:focus {\n color: #565e64 !important;\n}\n\n.link-success {\n color: #198754 !important;\n}\n.link-success:hover, .link-success:focus {\n color: #146c43 !important;\n}\n\n.link-info {\n color: #0dcaf0 !important;\n}\n.link-info:hover, .link-info:focus {\n color: #3dd5f3 !important;\n}\n\n.link-warning {\n color: #ffc107 !important;\n}\n.link-warning:hover, .link-warning:focus {\n color: #ffcd39 !important;\n}\n\n.link-danger {\n color: #dc3545 !important;\n}\n.link-danger:hover, .link-danger:focus {\n color: #b02a37 !important;\n}\n\n.link-light {\n color: #f8f9fa !important;\n}\n.link-light:hover, .link-light:focus {\n color: #f9fafb !important;\n}\n\n.link-dark {\n color: #212529 !important;\n}\n.link-dark:hover, .link-dark:focus {\n color: #1a1e21 !important;\n}\n\n.ratio {\n position: relative;\n width: 100%;\n}\n.ratio::before {\n display: block;\n padding-top: var(--bs-aspect-ratio);\n content: \"\";\n}\n.ratio > * {\n position: absolute;\n top: 0;\n right: 0;\n width: 100%;\n height: 100%;\n}\n\n.ratio-1x1 {\n --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 1030;\n}\n\n.sticky-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n}\n\n.sticky-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n}\n\n@media (min-width: 576px) {\n .sticky-sm-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-sm-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 768px) {\n .sticky-md-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-md-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 992px) {\n .sticky-lg-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-lg-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1200px) {\n .sticky-xl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n@media (min-width: 1400px) {\n .sticky-xxl-top {\n position: -webkit-sticky;\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n .sticky-xxl-bottom {\n position: -webkit-sticky;\n position: sticky;\n bottom: 0;\n z-index: 1020;\n }\n}\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n z-index: 1;\n content: \"\";\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: 0.25;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.float-start {\n float: right !important;\n}\n\n.float-end {\n float: left !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n.object-fit-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n}\n\n.object-fit-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n}\n\n.object-fit-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n}\n\n.object-fit-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n}\n\n.object-fit-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n}\n\n.opacity-0 {\n opacity: 0 !important;\n}\n\n.opacity-25 {\n opacity: 0.25 !important;\n}\n\n.opacity-50 {\n opacity: 0.5 !important;\n}\n\n.opacity-75 {\n opacity: 0.75 !important;\n}\n\n.opacity-100 {\n opacity: 1 !important;\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.overflow-visible {\n overflow: visible !important;\n}\n\n.overflow-scroll {\n overflow: scroll !important;\n}\n\n.overflow-x-auto {\n overflow-x: auto !important;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden !important;\n}\n\n.overflow-x-visible {\n overflow-x: visible !important;\n}\n\n.overflow-x-scroll {\n overflow-x: scroll !important;\n}\n\n.overflow-y-auto {\n overflow-y: auto !important;\n}\n\n.overflow-y-hidden {\n overflow-y: hidden !important;\n}\n\n.overflow-y-visible {\n overflow-y: visible !important;\n}\n\n.overflow-y-scroll {\n overflow-y: scroll !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(var(--bs-body-color-rgb), 0.15) !important;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(var(--bs-body-color-rgb), 0.075) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(var(--bs-body-color-rgb), 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: -webkit-sticky !important;\n position: sticky !important;\n}\n\n.top-0 {\n top: 0 !important;\n}\n\n.top-50 {\n top: 50% !important;\n}\n\n.top-100 {\n top: 100% !important;\n}\n\n.bottom-0 {\n bottom: 0 !important;\n}\n\n.bottom-50 {\n bottom: 50% !important;\n}\n\n.bottom-100 {\n bottom: 100% !important;\n}\n\n.start-0 {\n right: 0 !important;\n}\n\n.start-50 {\n right: 50% !important;\n}\n\n.start-100 {\n right: 100% !important;\n}\n\n.end-0 {\n left: 0 !important;\n}\n\n.end-50 {\n left: 50% !important;\n}\n\n.end-100 {\n left: 100% !important;\n}\n\n.translate-middle {\n transform: translate(50%, -50%) !important;\n}\n\n.translate-middle-x {\n transform: translateX(50%) !important;\n}\n\n.translate-middle-y {\n transform: translateY(-50%) !important;\n}\n\n.border {\n border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top {\n border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-end {\n border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-end-0 {\n border-left: 0 !important;\n}\n\n.border-bottom {\n border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-start {\n border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important;\n}\n\n.border-start-0 {\n border-right: 0 !important;\n}\n\n.border-primary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-secondary {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-success {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-info {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-warning {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-danger {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-light {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-dark {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-white {\n --bs-border-opacity: 1;\n border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important;\n}\n\n.border-primary-subtle {\n border-color: var(--bs-primary-border-subtle) !important;\n}\n\n.border-secondary-subtle {\n border-color: var(--bs-secondary-border-subtle) !important;\n}\n\n.border-success-subtle {\n border-color: var(--bs-success-border-subtle) !important;\n}\n\n.border-info-subtle {\n border-color: var(--bs-info-border-subtle) !important;\n}\n\n.border-warning-subtle {\n border-color: var(--bs-warning-border-subtle) !important;\n}\n\n.border-danger-subtle {\n border-color: var(--bs-danger-border-subtle) !important;\n}\n\n.border-light-subtle {\n border-color: var(--bs-light-border-subtle) !important;\n}\n\n.border-dark-subtle {\n border-color: var(--bs-dark-border-subtle) !important;\n}\n\n.border-1 {\n --bs-border-width: 1px;\n}\n\n.border-2 {\n --bs-border-width: 2px;\n}\n\n.border-3 {\n --bs-border-width: 3px;\n}\n\n.border-4 {\n --bs-border-width: 4px;\n}\n\n.border-5 {\n --bs-border-width: 5px;\n}\n\n.border-opacity-10 {\n --bs-border-opacity: 0.1;\n}\n\n.border-opacity-25 {\n --bs-border-opacity: 0.25;\n}\n\n.border-opacity-50 {\n --bs-border-opacity: 0.5;\n}\n\n.border-opacity-75 {\n --bs-border-opacity: 0.75;\n}\n\n.border-opacity-100 {\n --bs-border-opacity: 1;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.mx-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.mx-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-left: 0 !important;\n}\n\n.me-1 {\n margin-left: 0.25rem !important;\n}\n\n.me-2 {\n margin-left: 0.5rem !important;\n}\n\n.me-3 {\n margin-left: 1rem !important;\n}\n\n.me-4 {\n margin-left: 1.5rem !important;\n}\n\n.me-5 {\n margin-left: 3rem !important;\n}\n\n.me-auto {\n margin-left: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-right: 0 !important;\n}\n\n.ms-1 {\n margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n margin-right: 1rem !important;\n}\n\n.ms-4 {\n margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n margin-right: 3rem !important;\n}\n\n.ms-auto {\n margin-right: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.px-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n\n.px-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n}\n\n.px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-left: 0 !important;\n}\n\n.pe-1 {\n padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n padding-left: 1rem !important;\n}\n\n.pe-4 {\n padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n padding-left: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-right: 0 !important;\n}\n\n.ps-1 {\n padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n padding-right: 1rem !important;\n}\n\n.ps-4 {\n padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n padding-right: 3rem !important;\n}\n\n.gap-0 {\n gap: 0 !important;\n}\n\n.gap-1 {\n gap: 0.25rem !important;\n}\n\n.gap-2 {\n gap: 0.5rem !important;\n}\n\n.gap-3 {\n gap: 1rem !important;\n}\n\n.gap-4 {\n gap: 1.5rem !important;\n}\n\n.gap-5 {\n gap: 3rem !important;\n}\n\n.row-gap-0 {\n row-gap: 0 !important;\n}\n\n.row-gap-1 {\n row-gap: 0.25rem !important;\n}\n\n.row-gap-2 {\n row-gap: 0.5rem !important;\n}\n\n.row-gap-3 {\n row-gap: 1rem !important;\n}\n\n.row-gap-4 {\n row-gap: 1.5rem !important;\n}\n\n.row-gap-5 {\n row-gap: 3rem !important;\n}\n\n.column-gap-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n}\n\n.column-gap-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n}\n\n.column-gap-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n}\n\n.column-gap-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n}\n\n.column-gap-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n}\n\n.column-gap-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n}\n\n.font-monospace {\n font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n font-size: 1.25rem !important;\n}\n\n.fs-6 {\n font-size: 1rem !important;\n}\n\n.fst-italic {\n font-style: italic !important;\n}\n\n.fst-normal {\n font-style: normal !important;\n}\n\n.fw-lighter {\n font-weight: lighter !important;\n}\n\n.fw-light {\n font-weight: 300 !important;\n}\n\n.fw-normal {\n font-weight: 400 !important;\n}\n\n.fw-medium {\n font-weight: 500 !important;\n}\n\n.fw-semibold {\n font-weight: 600 !important;\n}\n\n.fw-bold {\n font-weight: 700 !important;\n}\n\n.fw-bolder {\n font-weight: bolder !important;\n}\n\n.lh-1 {\n line-height: 1 !important;\n}\n\n.lh-sm {\n line-height: 1.25 !important;\n}\n\n.lh-base {\n line-height: 1.5 !important;\n}\n\n.lh-lg {\n line-height: 2 !important;\n}\n\n.text-start {\n text-align: right !important;\n}\n\n.text-end {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-decoration-underline {\n text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n text-decoration: line-through !important;\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n.text-primary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n --bs-text-opacity: 1;\n color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-black-50 {\n --bs-text-opacity: 1;\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n --bs-text-opacity: 1;\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-body-secondary {\n --bs-text-opacity: 1;\n color: var(--bs-secondary-color) !important;\n}\n\n.text-body-tertiary {\n --bs-text-opacity: 1;\n color: var(--bs-tertiary-color) !important;\n}\n\n.text-body-emphasis {\n --bs-text-opacity: 1;\n color: var(--bs-emphasis-color) !important;\n}\n\n.text-reset {\n --bs-text-opacity: 1;\n color: inherit !important;\n}\n\n.text-opacity-25 {\n --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n --bs-text-opacity: 1;\n}\n\n.text-primary-emphasis {\n color: var(--bs-primary-text) !important;\n}\n\n.text-secondary-emphasis {\n color: var(--bs-secondary-text) !important;\n}\n\n.text-success-emphasis {\n color: var(--bs-success-text) !important;\n}\n\n.text-info-emphasis {\n color: var(--bs-info-text) !important;\n}\n\n.text-warning-emphasis {\n color: var(--bs-warning-text) !important;\n}\n\n.text-danger-emphasis {\n color: var(--bs-danger-text) !important;\n}\n\n.text-light-emphasis {\n color: var(--bs-light-text) !important;\n}\n\n.text-dark-emphasis {\n color: var(--bs-dark-text) !important;\n}\n\n.bg-primary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n --bs-bg-opacity: 1;\n background-color: transparent !important;\n}\n\n.bg-body-secondary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-tertiary {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body-emphasis {\n --bs-bg-opacity: 1;\n background-color: rgba(var(--bs-emphasis-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-opacity-10 {\n --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n --bs-bg-opacity: 1;\n}\n\n.bg-primary-subtle {\n background-color: var(--bs-primary-bg-subtle) !important;\n}\n\n.bg-secondary-subtle {\n background-color: var(--bs-secondary-bg-subtle) !important;\n}\n\n.bg-success-subtle {\n background-color: var(--bs-success-bg-subtle) !important;\n}\n\n.bg-info-subtle {\n background-color: var(--bs-info-bg-subtle) !important;\n}\n\n.bg-warning-subtle {\n background-color: var(--bs-warning-bg-subtle) !important;\n}\n\n.bg-danger-subtle {\n background-color: var(--bs-danger-bg-subtle) !important;\n}\n\n.bg-light-subtle {\n background-color: var(--bs-light-bg-subtle) !important;\n}\n\n.bg-dark-subtle {\n background-color: var(--bs-dark-bg-subtle) !important;\n}\n\n.bg-gradient {\n background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n -webkit-user-select: all !important;\n -moz-user-select: all !important;\n user-select: all !important;\n}\n\n.user-select-auto {\n -webkit-user-select: auto !important;\n -moz-user-select: auto !important;\n user-select: auto !important;\n}\n\n.user-select-none {\n -webkit-user-select: none !important;\n -moz-user-select: none !important;\n user-select: none !important;\n}\n\n.pe-none {\n pointer-events: none !important;\n}\n\n.pe-auto {\n pointer-events: auto !important;\n}\n\n.rounded {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.rounded-1 {\n border-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-2 {\n border-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-3 {\n border-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-4 {\n border-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-5 {\n border-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-top {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-0 {\n border-top-right-radius: 0 !important;\n border-top-left-radius: 0 !important;\n}\n\n.rounded-top-1 {\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-top-2 {\n border-top-right-radius: var(--bs-border-radius) !important;\n border-top-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-top-3 {\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-top-4 {\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-top-5 {\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-top-circle {\n border-top-right-radius: 50% !important;\n border-top-left-radius: 50% !important;\n}\n\n.rounded-top-pill {\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-end {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-0 {\n border-top-left-radius: 0 !important;\n border-bottom-left-radius: 0 !important;\n}\n\n.rounded-end-1 {\n border-top-left-radius: var(--bs-border-radius-sm) !important;\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-end-2 {\n border-top-left-radius: var(--bs-border-radius) !important;\n border-bottom-left-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-end-3 {\n border-top-left-radius: var(--bs-border-radius-lg) !important;\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-end-4 {\n border-top-left-radius: var(--bs-border-radius-xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-end-5 {\n border-top-left-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-end-circle {\n border-top-left-radius: 50% !important;\n border-bottom-left-radius: 50% !important;\n}\n\n.rounded-end-pill {\n border-top-left-radius: var(--bs-border-radius-pill) !important;\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-bottom {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-0 {\n border-bottom-left-radius: 0 !important;\n border-bottom-right-radius: 0 !important;\n}\n\n.rounded-bottom-1 {\n border-bottom-left-radius: var(--bs-border-radius-sm) !important;\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-bottom-2 {\n border-bottom-left-radius: var(--bs-border-radius) !important;\n border-bottom-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-bottom-3 {\n border-bottom-left-radius: var(--bs-border-radius-lg) !important;\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-bottom-4 {\n border-bottom-left-radius: var(--bs-border-radius-xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-bottom-5 {\n border-bottom-left-radius: var(--bs-border-radius-2xl) !important;\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-bottom-circle {\n border-bottom-left-radius: 50% !important;\n border-bottom-right-radius: 50% !important;\n}\n\n.rounded-bottom-pill {\n border-bottom-left-radius: var(--bs-border-radius-pill) !important;\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.rounded-start {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-0 {\n border-bottom-right-radius: 0 !important;\n border-top-right-radius: 0 !important;\n}\n\n.rounded-start-1 {\n border-bottom-right-radius: var(--bs-border-radius-sm) !important;\n border-top-right-radius: var(--bs-border-radius-sm) !important;\n}\n\n.rounded-start-2 {\n border-bottom-right-radius: var(--bs-border-radius) !important;\n border-top-right-radius: var(--bs-border-radius) !important;\n}\n\n.rounded-start-3 {\n border-bottom-right-radius: var(--bs-border-radius-lg) !important;\n border-top-right-radius: var(--bs-border-radius-lg) !important;\n}\n\n.rounded-start-4 {\n border-bottom-right-radius: var(--bs-border-radius-xl) !important;\n border-top-right-radius: var(--bs-border-radius-xl) !important;\n}\n\n.rounded-start-5 {\n border-bottom-right-radius: var(--bs-border-radius-2xl) !important;\n border-top-right-radius: var(--bs-border-radius-2xl) !important;\n}\n\n.rounded-start-circle {\n border-bottom-right-radius: 50% !important;\n border-top-right-radius: 50% !important;\n}\n\n.rounded-start-pill {\n border-bottom-right-radius: var(--bs-border-radius-pill) !important;\n border-top-right-radius: var(--bs-border-radius-pill) !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n.z-n1 {\n z-index: -1 !important;\n}\n\n.z-0 {\n z-index: 0 !important;\n}\n\n.z-1 {\n z-index: 1 !important;\n}\n\n.z-2 {\n z-index: 2 !important;\n}\n\n.z-3 {\n z-index: 3 !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-start {\n float: right !important;\n }\n .float-sm-end {\n float: left !important;\n }\n .float-sm-none {\n float: none !important;\n }\n .object-fit-sm-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-sm-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-sm-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-sm-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-sm-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-left: 0 !important;\n }\n .me-sm-1 {\n margin-left: 0.25rem !important;\n }\n .me-sm-2 {\n margin-left: 0.5rem !important;\n }\n .me-sm-3 {\n margin-left: 1rem !important;\n }\n .me-sm-4 {\n margin-left: 1.5rem !important;\n }\n .me-sm-5 {\n margin-left: 3rem !important;\n }\n .me-sm-auto {\n margin-left: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-right: 0 !important;\n }\n .ms-sm-1 {\n margin-right: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-right: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-right: 1rem !important;\n }\n .ms-sm-4 {\n margin-right: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-right: 3rem !important;\n }\n .ms-sm-auto {\n margin-right: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-left: 0 !important;\n }\n .pe-sm-1 {\n padding-left: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-left: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-left: 1rem !important;\n }\n .pe-sm-4 {\n padding-left: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-left: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-right: 0 !important;\n }\n .ps-sm-1 {\n padding-right: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-right: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-right: 1rem !important;\n }\n .ps-sm-4 {\n padding-right: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-right: 3rem !important;\n }\n .gap-sm-0 {\n gap: 0 !important;\n }\n .gap-sm-1 {\n gap: 0.25rem !important;\n }\n .gap-sm-2 {\n gap: 0.5rem !important;\n }\n .gap-sm-3 {\n gap: 1rem !important;\n }\n .gap-sm-4 {\n gap: 1.5rem !important;\n }\n .gap-sm-5 {\n gap: 3rem !important;\n }\n .row-gap-sm-0 {\n row-gap: 0 !important;\n }\n .row-gap-sm-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-sm-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-sm-3 {\n row-gap: 1rem !important;\n }\n .row-gap-sm-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-sm-5 {\n row-gap: 3rem !important;\n }\n .column-gap-sm-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-sm-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-sm-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-sm-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-sm-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-sm-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-sm-start {\n text-align: right !important;\n }\n .text-sm-end {\n text-align: left !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n@media (min-width: 768px) {\n .float-md-start {\n float: right !important;\n }\n .float-md-end {\n float: left !important;\n }\n .float-md-none {\n float: none !important;\n }\n .object-fit-md-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-md-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-md-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-md-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-md-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-left: 0 !important;\n }\n .me-md-1 {\n margin-left: 0.25rem !important;\n }\n .me-md-2 {\n margin-left: 0.5rem !important;\n }\n .me-md-3 {\n margin-left: 1rem !important;\n }\n .me-md-4 {\n margin-left: 1.5rem !important;\n }\n .me-md-5 {\n margin-left: 3rem !important;\n }\n .me-md-auto {\n margin-left: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-right: 0 !important;\n }\n .ms-md-1 {\n margin-right: 0.25rem !important;\n }\n .ms-md-2 {\n margin-right: 0.5rem !important;\n }\n .ms-md-3 {\n margin-right: 1rem !important;\n }\n .ms-md-4 {\n margin-right: 1.5rem !important;\n }\n .ms-md-5 {\n margin-right: 3rem !important;\n }\n .ms-md-auto {\n margin-right: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-left: 0 !important;\n }\n .pe-md-1 {\n padding-left: 0.25rem !important;\n }\n .pe-md-2 {\n padding-left: 0.5rem !important;\n }\n .pe-md-3 {\n padding-left: 1rem !important;\n }\n .pe-md-4 {\n padding-left: 1.5rem !important;\n }\n .pe-md-5 {\n padding-left: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-right: 0 !important;\n }\n .ps-md-1 {\n padding-right: 0.25rem !important;\n }\n .ps-md-2 {\n padding-right: 0.5rem !important;\n }\n .ps-md-3 {\n padding-right: 1rem !important;\n }\n .ps-md-4 {\n padding-right: 1.5rem !important;\n }\n .ps-md-5 {\n padding-right: 3rem !important;\n }\n .gap-md-0 {\n gap: 0 !important;\n }\n .gap-md-1 {\n gap: 0.25rem !important;\n }\n .gap-md-2 {\n gap: 0.5rem !important;\n }\n .gap-md-3 {\n gap: 1rem !important;\n }\n .gap-md-4 {\n gap: 1.5rem !important;\n }\n .gap-md-5 {\n gap: 3rem !important;\n }\n .row-gap-md-0 {\n row-gap: 0 !important;\n }\n .row-gap-md-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-md-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-md-3 {\n row-gap: 1rem !important;\n }\n .row-gap-md-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-md-5 {\n row-gap: 3rem !important;\n }\n .column-gap-md-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-md-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-md-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-md-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-md-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-md-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-md-start {\n text-align: right !important;\n }\n .text-md-end {\n text-align: left !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n@media (min-width: 992px) {\n .float-lg-start {\n float: right !important;\n }\n .float-lg-end {\n float: left !important;\n }\n .float-lg-none {\n float: none !important;\n }\n .object-fit-lg-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-lg-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-lg-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-lg-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-lg-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-left: 0 !important;\n }\n .me-lg-1 {\n margin-left: 0.25rem !important;\n }\n .me-lg-2 {\n margin-left: 0.5rem !important;\n }\n .me-lg-3 {\n margin-left: 1rem !important;\n }\n .me-lg-4 {\n margin-left: 1.5rem !important;\n }\n .me-lg-5 {\n margin-left: 3rem !important;\n }\n .me-lg-auto {\n margin-left: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-right: 0 !important;\n }\n .ms-lg-1 {\n margin-right: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-right: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-right: 1rem !important;\n }\n .ms-lg-4 {\n margin-right: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-right: 3rem !important;\n }\n .ms-lg-auto {\n margin-right: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-left: 0 !important;\n }\n .pe-lg-1 {\n padding-left: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-left: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-left: 1rem !important;\n }\n .pe-lg-4 {\n padding-left: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-left: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-right: 0 !important;\n }\n .ps-lg-1 {\n padding-right: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-right: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-right: 1rem !important;\n }\n .ps-lg-4 {\n padding-right: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-right: 3rem !important;\n }\n .gap-lg-0 {\n gap: 0 !important;\n }\n .gap-lg-1 {\n gap: 0.25rem !important;\n }\n .gap-lg-2 {\n gap: 0.5rem !important;\n }\n .gap-lg-3 {\n gap: 1rem !important;\n }\n .gap-lg-4 {\n gap: 1.5rem !important;\n }\n .gap-lg-5 {\n gap: 3rem !important;\n }\n .row-gap-lg-0 {\n row-gap: 0 !important;\n }\n .row-gap-lg-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-lg-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-lg-3 {\n row-gap: 1rem !important;\n }\n .row-gap-lg-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-lg-5 {\n row-gap: 3rem !important;\n }\n .column-gap-lg-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-lg-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-lg-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-lg-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-lg-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-lg-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-lg-start {\n text-align: right !important;\n }\n .text-lg-end {\n text-align: left !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .float-xl-start {\n float: right !important;\n }\n .float-xl-end {\n float: left !important;\n }\n .float-xl-none {\n float: none !important;\n }\n .object-fit-xl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-left: 0 !important;\n }\n .me-xl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xl-3 {\n margin-left: 1rem !important;\n }\n .me-xl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xl-5 {\n margin-left: 3rem !important;\n }\n .me-xl-auto {\n margin-left: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-right: 0 !important;\n }\n .ms-xl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-right: 1rem !important;\n }\n .ms-xl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-right: 3rem !important;\n }\n .ms-xl-auto {\n margin-right: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-left: 0 !important;\n }\n .pe-xl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-left: 1rem !important;\n }\n .pe-xl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-left: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-right: 0 !important;\n }\n .ps-xl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-right: 1rem !important;\n }\n .ps-xl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-right: 3rem !important;\n }\n .gap-xl-0 {\n gap: 0 !important;\n }\n .gap-xl-1 {\n gap: 0.25rem !important;\n }\n .gap-xl-2 {\n gap: 0.5rem !important;\n }\n .gap-xl-3 {\n gap: 1rem !important;\n }\n .gap-xl-4 {\n gap: 1.5rem !important;\n }\n .gap-xl-5 {\n gap: 3rem !important;\n }\n .row-gap-xl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xl-start {\n text-align: right !important;\n }\n .text-xl-end {\n text-align: left !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1400px) {\n .float-xxl-start {\n float: right !important;\n }\n .float-xxl-end {\n float: left !important;\n }\n .float-xxl-none {\n float: none !important;\n }\n .object-fit-xxl-contain {\n -o-object-fit: contain !important;\n object-fit: contain !important;\n }\n .object-fit-xxl-cover {\n -o-object-fit: cover !important;\n object-fit: cover !important;\n }\n .object-fit-xxl-fill {\n -o-object-fit: fill !important;\n object-fit: fill !important;\n }\n .object-fit-xxl-scale {\n -o-object-fit: scale-down !important;\n object-fit: scale-down !important;\n }\n .object-fit-xxl-none {\n -o-object-fit: none !important;\n object-fit: none !important;\n }\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xxl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-left: 0 !important;\n }\n .me-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-left: 1rem !important;\n }\n .me-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-left: 3rem !important;\n }\n .me-xxl-auto {\n margin-left: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-right: 0 !important;\n }\n .ms-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-right: 1rem !important;\n }\n .ms-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-right: 3rem !important;\n }\n .ms-xxl-auto {\n margin-right: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xxl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-left: 0 !important;\n }\n .pe-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-left: 1rem !important;\n }\n .pe-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-left: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-right: 0 !important;\n }\n .ps-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-right: 1rem !important;\n }\n .ps-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-right: 3rem !important;\n }\n .gap-xxl-0 {\n gap: 0 !important;\n }\n .gap-xxl-1 {\n gap: 0.25rem !important;\n }\n .gap-xxl-2 {\n gap: 0.5rem !important;\n }\n .gap-xxl-3 {\n gap: 1rem !important;\n }\n .gap-xxl-4 {\n gap: 1.5rem !important;\n }\n .gap-xxl-5 {\n gap: 3rem !important;\n }\n .row-gap-xxl-0 {\n row-gap: 0 !important;\n }\n .row-gap-xxl-1 {\n row-gap: 0.25rem !important;\n }\n .row-gap-xxl-2 {\n row-gap: 0.5rem !important;\n }\n .row-gap-xxl-3 {\n row-gap: 1rem !important;\n }\n .row-gap-xxl-4 {\n row-gap: 1.5rem !important;\n }\n .row-gap-xxl-5 {\n row-gap: 3rem !important;\n }\n .column-gap-xxl-0 {\n -moz-column-gap: 0 !important;\n column-gap: 0 !important;\n }\n .column-gap-xxl-1 {\n -moz-column-gap: 0.25rem !important;\n column-gap: 0.25rem !important;\n }\n .column-gap-xxl-2 {\n -moz-column-gap: 0.5rem !important;\n column-gap: 0.5rem !important;\n }\n .column-gap-xxl-3 {\n -moz-column-gap: 1rem !important;\n column-gap: 1rem !important;\n }\n .column-gap-xxl-4 {\n -moz-column-gap: 1.5rem !important;\n column-gap: 1.5rem !important;\n }\n .column-gap-xxl-5 {\n -moz-column-gap: 3rem !important;\n column-gap: 3rem !important;\n }\n .text-xxl-start {\n text-align: right !important;\n }\n .text-xxl-end {\n text-align: left !important;\n }\n .text-xxl-center {\n text-align: center !important;\n }\n}\n@media (min-width: 1200px) {\n .fs-1 {\n font-size: 2.5rem !important;\n }\n .fs-2 {\n font-size: 2rem !important;\n }\n .fs-3 {\n font-size: 1.75rem !important;\n }\n .fs-4 {\n font-size: 1.5rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.rtl.css.map */","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// scss-docs-start color-mode-mixin\n@mixin color-mode($mode: light, $root: false) {\n @if $color-mode-type == \"media-query\" {\n @if $root == true {\n @media (prefers-color-scheme: $mode) {\n :root {\n @content;\n }\n }\n } @else {\n @media (prefers-color-scheme: $mode) {\n @content;\n }\n }\n } @else {\n [data-bs-theme=\"#{$mode}\"] {\n @content;\n }\n }\n}\n// scss-docs-end color-mode-mixin\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: var(--#{$prefix}heading-color, inherit);\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `<td>` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`<button>` buttons\n//\n// Details at https://github.com/twbs/bootstrap/pull/30562\n[role=\"button\"] {\n cursor: pointer;\n}\n\nselect {\n // Remove the inheritance of word-wrap in Safari.\n // See https://github.com/twbs/bootstrap/issues/24990\n word-wrap: normal;\n\n // Undo the opacity change from Chrome\n &:disabled {\n opacity: 1;\n }\n}\n\n// Remove the dropdown arrow only from text type inputs built with datalists in Chrome.\n// See https://stackoverflow.com/a/54997118\n\n[list]:not([type=\"date\"]):not([type=\"datetime-local\"]):not([type=\"month\"]):not([type=\"week\"]):not([type=\"time\"])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\n// 3. Opinionated: add \"hand\" cursor to non-disabled button elements.\n\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n\n @if $enable-button-pointers {\n &:not(:disabled) {\n cursor: pointer; // 3\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\n// 1. Textareas should really only resize vertically so they don't break their (horizontal) containers.\n\ntextarea {\n resize: vertical; // 1\n}\n\n// 1. Browsers set a default `min-width: min-content;` on fieldsets,\n// unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n// So we reset that to ensure fieldsets behave more like a standard block element.\n// See https://github.com/twbs/bootstrap/issues/12359\n// and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n// 2. Reset the default outline behavior of fieldsets so they don't affect page layout.\n\nfieldset {\n min-width: 0; // 1\n padding: 0; // 2\n margin: 0; // 2\n border: 0; // 2\n}\n\n// 1. By using `float: left`, the legend will behave like a block element.\n// This way the border of a fieldset wraps around the legend if present.\n// 2. Fix wrapping bug.\n// See https://github.com/twbs/bootstrap/issues/29712\n\nlegend {\n float: left; // 1\n width: 100%;\n padding: 0;\n margin-bottom: $legend-margin-bottom;\n @include font-size($legend-font-size);\n font-weight: $legend-font-weight;\n line-height: inherit;\n\n + * {\n clear: left; // 2\n }\n}\n\n// Fix height of inputs with a type of datetime-local, date, month, week, or time\n// See https://github.com/twbs/bootstrap/issues/18842\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n// 1. Correct the outline style in Safari.\n// 2. This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\n[type=\"search\"] {\n outline-offset: -2px; // 1\n -webkit-appearance: textfield; // 2\n}\n\n// 1. A few input types should stay LTR\n// See https://rtlstyling.com/posts/rtl-styling#form-inputs\n// 2. RTL only output\n// See https://rtlcss.com/learn/usage-guide/control-directives/#raw\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n\n// Remove the inner padding in Chrome and Safari on macOS.\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n// Remove padding around color pickers in webkit browsers\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n\n// 1. Inherit font family and line height for file input buttons\n// 2. Correct the inability to style clickable types in iOS and Safari.\n\n::file-selector-button {\n font: inherit; // 1\n -webkit-appearance: button; // 2\n}\n\n// Correct element displays\n\noutput {\n display: inline-block;\n}\n\n// Remove border from iframe\n\niframe {\n border: 0;\n}\n\n// Summary\n//\n// 1. Add the correct display in all browsers\n\nsummary {\n display: list-item; // 1\n cursor: pointer;\n}\n\n\n// Progress\n//\n// Add the correct vertical alignment in Chrome, Firefox, and Opera.\n\nprogress {\n vertical-align: baseline;\n}\n\n\n// Hidden attribute\n//\n// Always hide an element with the `hidden` HTML attribute.\n\n[hidden] {\n display: none !important;\n}\n","// stylelint-disable property-disallowed-list\n// Single side border-radius\n\n// Helper function to replace negative values with 0\n@function valid-radius($radius) {\n $return: ();\n @each $value in $radius {\n @if type-of($value) == number {\n $return: append($return, max($value, 0));\n } @else {\n $return: append($return, $value);\n }\n }\n @return $return;\n}\n\n// scss-docs-start border-radius-mixins\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: valid-radius($radius);\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-left-radius: valid-radius($radius);\n }\n}\n\n@mixin border-top-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-top-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-end-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-right-radius: valid-radius($radius);\n }\n}\n\n@mixin border-bottom-start-radius($radius: $border-radius) {\n @if $enable-rounded {\n border-bottom-left-radius: valid-radius($radius);\n }\n}\n// scss-docs-end border-radius-mixins\n","//\n// Headings\n//\n.h1 {\n @extend h1;\n}\n\n.h2 {\n @extend h2;\n}\n\n.h3 {\n @extend h3;\n}\n\n.h4 {\n @extend h4;\n}\n\n.h5 {\n @extend h5;\n}\n\n.h6 {\n @extend h6;\n}\n\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n@each $display, $font-size in $display-font-sizes {\n .display-#{$display} {\n @include font-size($font-size);\n font-family: $display-font-family;\n font-style: $display-font-style;\n font-weight: $display-font-weight;\n line-height: $display-line-height;\n }\n}\n\n//\n// Emphasis\n//\n.small {\n @extend small;\n}\n\n.mark {\n @extend mark;\n}\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled();\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled();\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size($initialism-font-size);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-font-size);\n\n > :last-child {\n margin-bottom: 0;\n }\n}\n\n.blockquote-footer {\n margin-top: -$blockquote-margin-y;\n margin-bottom: $blockquote-margin-y;\n @include font-size($blockquote-footer-font-size);\n color: $blockquote-footer-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid();\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid();\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer * .5;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n --#{$prefix}table-color: #{$table-color};\n --#{$prefix}table-bg: #{$table-bg};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-accent-bg: #{$table-accent-bg};\n --#{$prefix}table-striped-color: #{$table-striped-color};\n --#{$prefix}table-striped-bg: #{$table-striped-bg};\n --#{$prefix}table-active-color: #{$table-active-color};\n --#{$prefix}table-active-bg: #{$table-active-bg};\n --#{$prefix}table-hover-color: #{$table-hover-color};\n --#{$prefix}table-hover-bg: #{$table-hover-bg};\n\n width: 100%;\n margin-bottom: $spacer;\n color: var(--#{$prefix}table-color);\n vertical-align: $table-cell-vertical-align;\n border-color: var(--#{$prefix}table-border-color);\n\n // Target th & td\n // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.\n // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).\n // Another advantage is that this generates less code and makes the selector less specific making it easier to override.\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y $table-cell-padding-x;\n background-color: var(--#{$prefix}table-bg);\n border-bottom-width: $table-border-width;\n box-shadow: inset 0 0 0 9999px var(--#{$prefix}table-accent-bg);\n }\n\n > tbody {\n vertical-align: inherit;\n }\n\n > thead {\n vertical-align: bottom;\n }\n}\n\n.table-group-divider {\n border-top: calc($table-border-width * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list\n}\n\n//\n// Change placement of captions with a class\n//\n\n.caption-top {\n caption-side: top;\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n//\n// When borders are added on all sides of the cells, the corners can render odd when\n// these borders do not have the same color or if they are semi-transparent.\n// Therefor we add top and border bottoms to the `tr`s and left and right borders\n// to the `td`s or `th`s\n\n.table-bordered {\n > :not(caption) > * {\n border-width: $table-border-width 0;\n\n // stylelint-disable-next-line selector-max-universal\n > * {\n border-width: 0 $table-border-width;\n }\n }\n}\n\n.table-borderless {\n // stylelint-disable-next-line selector-max-universal\n > :not(caption) > * > * {\n border-bottom-width: 0;\n }\n\n > :not(:first-child) {\n border-top-width: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n// For rows\n.table-striped {\n > tbody > tr:nth-of-type(#{$table-striped-order}) > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// For columns\n.table-striped-columns {\n > :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-striped-bg);\n color: var(--#{$prefix}table-striped-color);\n }\n}\n\n// Active table\n//\n// The `.table-active` class can be added to highlight rows or cells\n\n.table-active {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-active-bg);\n color: var(--#{$prefix}table-active-color);\n}\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover > * {\n --#{$prefix}table-accent-bg: var(--#{$prefix}table-hover-bg);\n color: var(--#{$prefix}table-hover-color);\n }\n}\n\n\n// Table variants\n//\n// Table variants set the table cell backgrounds, border colors\n// and the colors of the striped, hovered & active tables\n\n@each $color, $value in $table-variants {\n @include table-variant($color, $value);\n}\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @include media-breakpoint-down($breakpoint) {\n .table-responsive#{$infix} {\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n }\n}\n","// scss-docs-start table-variant\n@mixin table-variant($state, $background) {\n .table-#{$state} {\n $color: color-contrast(opaque($body-bg, $background));\n $hover-bg: mix($color, $background, percentage($table-hover-bg-factor));\n $striped-bg: mix($color, $background, percentage($table-striped-bg-factor));\n $active-bg: mix($color, $background, percentage($table-active-bg-factor));\n $table-border-color: mix($color, $background, percentage($table-border-factor));\n\n --#{$prefix}table-color: #{$color};\n --#{$prefix}table-bg: #{$background};\n --#{$prefix}table-border-color: #{$table-border-color};\n --#{$prefix}table-striped-bg: #{$striped-bg};\n --#{$prefix}table-striped-color: #{color-contrast($striped-bg)};\n --#{$prefix}table-active-bg: #{$active-bg};\n --#{$prefix}table-active-color: #{color-contrast($active-bg)};\n --#{$prefix}table-hover-bg: #{$hover-bg};\n --#{$prefix}table-hover-color: #{color-contrast($hover-bg)};\n\n color: var(--#{$prefix}table-color);\n border-color: var(--#{$prefix}table-border-color);\n }\n}\n// scss-docs-end table-variant\n","//\n// Labels\n//\n\n.form-label {\n margin-bottom: $form-label-margin-bottom;\n @include font-size($form-label-font-size);\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n color: $form-label-color;\n}\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: add($input-padding-y, $input-border-width);\n padding-bottom: add($input-padding-y, $input-border-width);\n margin-bottom: 0; // Override the `<legend>` default\n @include font-size(inherit); // Override the `<legend>` default\n font-style: $form-label-font-style;\n font-weight: $form-label-font-weight;\n line-height: $input-line-height;\n color: $form-label-color;\n}\n\n.col-form-label-lg {\n padding-top: add($input-padding-y-lg, $input-border-width);\n padding-bottom: add($input-padding-y-lg, $input-border-width);\n @include font-size($input-font-size-lg);\n}\n\n.col-form-label-sm {\n padding-top: add($input-padding-y-sm, $input-border-width);\n padding-bottom: add($input-padding-y-sm, $input-border-width);\n @include font-size($input-font-size-sm);\n}\n","//\n// Form text\n//\n\n.form-text {\n margin-top: $form-text-margin-top;\n @include font-size($form-text-font-size);\n font-style: $form-text-font-style;\n font-weight: $form-text-font-weight;\n color: $form-text-color;\n}\n","//\n// General form controls (plus a few specific high-level interventions)\n//\n\n.form-control {\n display: block;\n width: 100%;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n appearance: none; // Fix appearance for date inputs in Safari\n\n // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n &[type=\"file\"] {\n overflow: hidden; // prevent pseudo element button overlap\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n }\n\n // Customize the `:focus` state to imitate native WebKit styles.\n &:focus {\n color: $input-focus-color;\n background-color: $input-focus-bg;\n border-color: $input-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($input-box-shadow, $input-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $input-focus-box-shadow;\n }\n }\n\n // Add some height to date inputs on iOS\n // https://github.com/twbs/bootstrap/issues/23307\n // TODO: we can remove this workaround once https://bugs.webkit.org/show_bug.cgi?id=198959 is resolved\n &::-webkit-date-and-time-value {\n // Multiply line-height by 1em if it has no unit\n height: if(unit($input-line-height) == \"\", $input-line-height * 1em, $input-line-height);\n }\n\n // Prevent excessive date input height in Webkit\n // https://github.com/twbs/bootstrap/issues/34433\n &::-webkit-datetime-edit {\n display: block;\n padding: 0;\n }\n\n // Placeholder\n &::placeholder {\n color: $input-placeholder-color;\n // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526.\n opacity: 1;\n }\n\n // Disabled inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &:disabled {\n color: $input-disabled-color;\n background-color: $input-disabled-bg;\n border-color: $input-disabled-border-color;\n // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655.\n opacity: 1;\n }\n\n // File input buttons theming\n &::file-selector-button {\n padding: $input-padding-y $input-padding-x;\n margin: (-$input-padding-y) (-$input-padding-x);\n margin-inline-end: $input-padding-x;\n color: $form-file-button-color;\n @include gradient-bg($form-file-button-bg);\n pointer-events: none;\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n border-inline-end-width: $input-border-width;\n border-radius: 0; // stylelint-disable-line property-disallowed-list\n @include transition($btn-transition);\n }\n\n &:hover:not(:disabled):not([readonly])::file-selector-button {\n background-color: $form-file-button-hover-bg;\n }\n}\n\n// Readonly controls as plain text\n//\n// Apply class to a readonly input to make it appear like regular plain\n// text (without any border, background color, focus indicator)\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding: $input-padding-y 0;\n margin-bottom: 0; // match inputs if this class comes on inputs with default margins\n line-height: $input-line-height;\n color: $input-plaintext-color;\n background-color: transparent;\n border: solid transparent;\n border-width: $input-border-width 0;\n\n &:focus {\n outline: 0;\n }\n\n &.form-control-sm,\n &.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// Repeated in `_input_group.scss` to avoid Sass extend issues.\n\n.form-control-sm {\n min-height: $input-height-sm;\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n\n &::file-selector-button {\n padding: $input-padding-y-sm $input-padding-x-sm;\n margin: (-$input-padding-y-sm) (-$input-padding-x-sm);\n margin-inline-end: $input-padding-x-sm;\n }\n}\n\n.form-control-lg {\n min-height: $input-height-lg;\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n\n &::file-selector-button {\n padding: $input-padding-y-lg $input-padding-x-lg;\n margin: (-$input-padding-y-lg) (-$input-padding-x-lg);\n margin-inline-end: $input-padding-x-lg;\n }\n}\n\n// Make sure textareas don't shrink too much when resized\n// https://github.com/twbs/bootstrap/pull/29124\n// stylelint-disable selector-no-qualifying-type\ntextarea {\n &.form-control {\n min-height: $input-height;\n }\n\n &.form-control-sm {\n min-height: $input-height-sm;\n }\n\n &.form-control-lg {\n min-height: $input-height-lg;\n }\n}\n// stylelint-enable selector-no-qualifying-type\n\n.form-control-color {\n width: $form-color-width;\n height: $input-height;\n padding: $input-padding-y;\n\n &:not(:disabled):not([readonly]) {\n cursor: pointer;\n }\n\n &::-moz-color-swatch {\n border: 0 !important; // stylelint-disable-line declaration-no-important\n @include border-radius($input-border-radius);\n }\n\n &::-webkit-color-swatch {\n @include border-radius($input-border-radius);\n }\n\n &.form-control-sm { height: $input-height-sm; }\n &.form-control-lg { height: $input-height-lg; }\n}\n","// stylelint-disable property-disallowed-list\n@mixin transition($transition...) {\n @if length($transition) == 0 {\n $transition: $transition-base;\n }\n\n @if length($transition) > 1 {\n @each $value in $transition {\n @if $value == null or $value == none {\n @warn \"The keyword 'none' or 'null' must be used as a single argument.\";\n }\n }\n }\n\n @if $enable-transitions {\n @if nth($transition, 1) != null {\n transition: $transition;\n }\n\n @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none {\n @media (prefers-reduced-motion: reduce) {\n transition: none;\n }\n }\n }\n}\n","// Gradients\n\n// scss-docs-start gradient-bg-mixin\n@mixin gradient-bg($color: null) {\n background-color: $color;\n\n @if $enable-gradients {\n background-image: var(--#{$prefix}gradient);\n }\n}\n// scss-docs-end gradient-bg-mixin\n\n// scss-docs-start gradient-mixins\n// Horizontal gradient, from left to right\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) {\n background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent);\n}\n\n// Vertical gradient, from top to bottom\n//\n// Creates two color stops, start and end, by specifying a color and position for each color stop.\n@mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) {\n background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent);\n}\n\n@mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) {\n background-image: linear-gradient($deg, $start-color, $end-color);\n}\n\n@mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) {\n background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color);\n}\n\n@mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) {\n background-image: radial-gradient(circle, $inner-color, $outer-color);\n}\n\n@mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) {\n background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent);\n}\n// scss-docs-end gradient-mixins\n","// Select\n//\n// Replaces the browser default select with a custom one, mostly pulled from\n// https://primer.github.io/.\n\n.form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};\n\n display: block;\n width: 100%;\n padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;\n -moz-padding-start: subtract($form-select-padding-x, 3px); // See https://github.com/twbs/bootstrap/issues/32636\n font-family: $form-select-font-family;\n @include font-size($form-select-font-size);\n font-weight: $form-select-font-weight;\n line-height: $form-select-line-height;\n color: $form-select-color;\n background-color: $form-select-bg;\n background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);\n background-repeat: no-repeat;\n background-position: $form-select-bg-position;\n background-size: $form-select-bg-size;\n border: $form-select-border-width solid $form-select-border-color;\n @include border-radius($form-select-border-radius, 0);\n @include box-shadow($form-select-box-shadow);\n @include transition($form-select-transition);\n appearance: none;\n\n &:focus {\n border-color: $form-select-focus-border-color;\n outline: 0;\n @if $enable-shadows {\n @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow);\n } @else {\n // Avoid using mixin so we can pass custom focus shadow properly\n box-shadow: $form-select-focus-box-shadow;\n }\n }\n\n &[multiple],\n &[size]:not([size=\"1\"]) {\n padding-right: $form-select-padding-x;\n background-image: none;\n }\n\n &:disabled {\n color: $form-select-disabled-color;\n background-color: $form-select-disabled-bg;\n border-color: $form-select-disabled-border-color;\n }\n\n // Remove outline from select box in FF\n &:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 $form-select-color;\n }\n}\n\n.form-select-sm {\n padding-top: $form-select-padding-y-sm;\n padding-bottom: $form-select-padding-y-sm;\n padding-left: $form-select-padding-x-sm;\n @include font-size($form-select-font-size-sm);\n @include border-radius($form-select-border-radius-sm);\n}\n\n.form-select-lg {\n padding-top: $form-select-padding-y-lg;\n padding-bottom: $form-select-padding-y-lg;\n padding-left: $form-select-padding-x-lg;\n @include font-size($form-select-font-size-lg);\n @include border-radius($form-select-border-radius-lg);\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-select {\n --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};\n }\n }\n}\n","//\n// Check/radio\n//\n\n.form-check {\n display: block;\n min-height: $form-check-min-height;\n padding-left: $form-check-padding-start;\n margin-bottom: $form-check-margin-bottom;\n\n .form-check-input {\n float: left;\n margin-left: $form-check-padding-start * -1;\n }\n}\n\n.form-check-reverse {\n padding-right: $form-check-padding-start;\n padding-left: 0;\n text-align: right;\n\n .form-check-input {\n float: right;\n margin-right: $form-check-padding-start * -1;\n margin-left: 0;\n }\n}\n\n.form-check-input {\n --#{$prefix}form-check-bg: #{$form-check-input-bg};\n\n width: $form-check-input-width;\n height: $form-check-input-width;\n margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height\n vertical-align: top;\n background-color: var(--#{$prefix}form-check-bg);\n background-image: var(--#{$prefix}form-check-bg-image);\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n border: $form-check-input-border;\n appearance: none;\n print-color-adjust: exact; // Keep themed appearance for print\n @include transition($form-check-transition);\n\n &[type=\"checkbox\"] {\n @include border-radius($form-check-input-border-radius);\n }\n\n &[type=\"radio\"] {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: $form-check-radio-border-radius;\n }\n\n &:active {\n filter: $form-check-input-active-filter;\n }\n\n &:focus {\n border-color: $form-check-input-focus-border;\n outline: 0;\n box-shadow: $form-check-input-focus-box-shadow;\n }\n\n &:checked {\n background-color: $form-check-input-checked-bg-color;\n border-color: $form-check-input-checked-border-color;\n\n &[type=\"checkbox\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};\n }\n }\n\n &[type=\"radio\"] {\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};\n }\n }\n }\n\n &[type=\"checkbox\"]:indeterminate {\n background-color: $form-check-input-indeterminate-bg-color;\n border-color: $form-check-input-indeterminate-border-color;\n\n @if $enable-gradients {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};\n }\n }\n\n &:disabled {\n pointer-events: none;\n filter: none;\n opacity: $form-check-input-disabled-opacity;\n }\n\n // Use disabled attribute in addition of :disabled pseudo-class\n // See: https://github.com/twbs/bootstrap/issues/28247\n &[disabled],\n &:disabled {\n ~ .form-check-label {\n cursor: default;\n opacity: $form-check-label-disabled-opacity;\n }\n }\n}\n\n.form-check-label {\n color: $form-check-label-color;\n cursor: $form-check-label-cursor;\n}\n\n//\n// Switch\n//\n\n.form-switch {\n padding-left: $form-switch-padding-start;\n\n .form-check-input {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};\n\n width: $form-switch-width;\n margin-left: $form-switch-padding-start * -1;\n background-image: var(--#{$prefix}form-switch-bg);\n background-position: left center;\n @include border-radius($form-switch-border-radius);\n @include transition($form-switch-transition);\n\n &:focus {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};\n }\n\n &:checked {\n background-position: $form-switch-checked-bg-position;\n\n @if $enable-gradients {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)}, var(--#{$prefix}gradient);\n } @else {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};\n }\n }\n }\n\n &.form-check-reverse {\n padding-right: $form-switch-padding-start;\n padding-left: 0;\n\n .form-check-input {\n margin-right: $form-switch-padding-start * -1;\n margin-left: 0;\n }\n }\n}\n\n.form-check-inline {\n display: inline-block;\n margin-right: $form-check-inline-margin-end;\n}\n\n.btn-check {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n\n &[disabled],\n &:disabled {\n + .btn {\n pointer-events: none;\n filter: none;\n opacity: $form-check-btn-check-disabled-opacity;\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .form-switch .form-check-input:not(:checked):not(:focus) {\n --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};\n }\n }\n}\n","// Range\n//\n// Style range inputs the same across browsers. Vendor-specific rules for pseudo\n// elements cannot be mixed. As such, there are no shared styles for focus or\n// active states on prefixed selectors.\n\n.form-range {\n width: 100%;\n height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);\n padding: 0; // Need to reset padding\n background-color: transparent;\n appearance: none;\n\n &:focus {\n outline: 0;\n\n // Pseudo-elements must be split across multiple rulesets to have an effect.\n // No box-shadow() mixin for focus accessibility.\n &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }\n }\n\n &::-moz-focus-outer {\n border: 0;\n }\n\n &::-webkit-slider-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-webkit-slider-runnable-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent; // Why?\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent;\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &::-moz-range-thumb {\n width: $form-range-thumb-width;\n height: $form-range-thumb-height;\n @include gradient-bg($form-range-thumb-bg);\n border: $form-range-thumb-border;\n @include border-radius($form-range-thumb-border-radius);\n @include box-shadow($form-range-thumb-box-shadow);\n @include transition($form-range-thumb-transition);\n appearance: none;\n\n &:active {\n @include gradient-bg($form-range-thumb-active-bg);\n }\n }\n\n &::-moz-range-track {\n width: $form-range-track-width;\n height: $form-range-track-height;\n color: transparent;\n cursor: $form-range-track-cursor;\n background-color: $form-range-track-bg;\n border-color: transparent; // Firefox specific?\n @include border-radius($form-range-track-border-radius);\n @include box-shadow($form-range-track-box-shadow);\n }\n\n &:disabled {\n pointer-events: none;\n\n &::-webkit-slider-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n\n &::-moz-range-thumb {\n background-color: $form-range-thumb-disabled-bg;\n }\n }\n}\n",".form-floating {\n position: relative;\n\n &::before:not(.form-control:disabled) {\n position: absolute;\n top: $input-border-width;\n left: $input-border-width;\n width: subtract(100%, add($input-height-inner-quarter, $input-height-inner-half));\n height: $form-floating-label-height;\n content: \"\";\n background-color: $input-bg;\n @include border-radius($input-border-radius);\n }\n\n > .form-control,\n > .form-control-plaintext,\n > .form-select {\n height: $form-floating-height;\n line-height: $form-floating-line-height;\n }\n\n > label {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%; // allow textareas\n padding: $form-floating-padding-y $form-floating-padding-x;\n overflow: hidden;\n text-align: start;\n text-overflow: ellipsis;\n white-space: nowrap;\n pointer-events: none;\n border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model\n transform-origin: 0 0;\n @include transition($form-floating-transition);\n }\n\n > .form-control,\n > .form-control-plaintext {\n padding: $form-floating-padding-y $form-floating-padding-x;\n\n &::placeholder {\n color: transparent;\n }\n\n &:focus,\n &:not(:placeholder-shown) {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n &:-webkit-autofill {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n }\n\n > .form-select {\n padding-top: $form-floating-input-padding-t;\n padding-bottom: $form-floating-input-padding-b;\n }\n\n > .form-control:focus,\n > .form-control:not(:placeholder-shown),\n > .form-control-plaintext,\n > .form-select {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped\n > .form-control:-webkit-autofill {\n ~ label {\n opacity: $form-floating-label-opacity;\n transform: $form-floating-label-transform;\n }\n }\n\n > .form-control-plaintext {\n ~ label {\n border-width: $input-border-width 0; // Required to properly position label text - as explained above\n }\n }\n\n > .form-control:disabled ~ label {\n color: $form-floating-label-disabled-color;\n }\n}\n","//\n// Base styles\n//\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap; // For form validation feedback\n align-items: stretch;\n width: 100%;\n\n > .form-control,\n > .form-select,\n > .form-floating {\n position: relative; // For focus state's z-index\n flex: 1 1 auto;\n width: 1%;\n min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size\n }\n\n // Bring the \"active\" form control to the top of surrounding elements\n > .form-control:focus,\n > .form-select:focus,\n > .form-floating:focus-within {\n z-index: 5;\n }\n\n // Ensure buttons are always above inputs for more visually pleasing borders.\n // This isn't needed for `.input-group-text` since it shares the same border-color\n // as our inputs.\n .btn {\n position: relative;\n z-index: 2;\n\n &:focus {\n z-index: 5;\n }\n }\n}\n\n\n// Textual addons\n//\n// Serves as a catch-all element for any text or radio/checkbox input you wish\n// to prepend or append to an input.\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: $input-group-addon-padding-y $input-group-addon-padding-x;\n @include font-size($input-font-size); // Match inputs\n font-weight: $input-group-addon-font-weight;\n line-height: $input-line-height;\n color: $input-group-addon-color;\n text-align: center;\n white-space: nowrap;\n background-color: $input-group-addon-bg;\n border: $input-border-width solid $input-group-addon-border-color;\n @include border-radius($input-border-radius);\n}\n\n\n// Sizing\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n padding: $input-padding-y-lg $input-padding-x-lg;\n @include font-size($input-font-size-lg);\n @include border-radius($input-border-radius-lg);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n padding: $input-padding-y-sm $input-padding-x-sm;\n @include font-size($input-font-size-sm);\n @include border-radius($input-border-radius-sm);\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n padding-right: $form-select-padding-x + $form-select-indicator-padding;\n}\n\n\n// Rounded corners\n//\n// These rulesets must come after the sizing ones to properly override sm and lg\n// border-radius values when extending. They're more specific than we'd like\n// with the `.input-group >` part, but without it, we cannot override the sizing.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.input-group {\n &:not(.has-validation) {\n > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 3),\n > .form-floating:not(:last-child) > .form-control,\n > .form-floating:not(:last-child) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n &.has-validation {\n > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),\n > .dropdown-toggle:nth-last-child(n + 4),\n > .form-floating:nth-last-child(n + 3) > .form-control,\n > .form-floating:nth-last-child(n + 3) > .form-select {\n @include border-end-radius(0);\n }\n }\n\n $validation-messages: \"\";\n @each $state in map-keys($form-validation-states) {\n $validation-messages: $validation-messages + \":not(.\" + unquote($state) + \"-tooltip)\" + \":not(.\" + unquote($state) + \"-feedback)\";\n }\n\n > :not(:first-child):not(.dropdown-menu)#{$validation-messages} {\n margin-left: calc($input-border-width * -1); // stylelint-disable-line function-disallowed-list\n @include border-start-radius(0);\n }\n\n > .form-floating:not(:first-child) > .form-control,\n > .form-floating:not(:first-child) > .form-select {\n @include border-start-radius(0);\n }\n}\n","// This mixin uses an `if()` technique to be compatible with Dart Sass\n// See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details\n\n// scss-docs-start form-validation-mixins\n@mixin form-validation-state-selector($state) {\n @if ($state == \"valid\" or $state == \"invalid\") {\n .was-validated #{if(&, \"&\", \"\")}:#{$state},\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n } @else {\n #{if(&, \"&\", \"\")}.is-#{$state} {\n @content;\n }\n }\n}\n\n@mixin form-validation-state(\n $state,\n $color,\n $icon,\n $tooltip-color: color-contrast($color),\n $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),\n $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity),\n $border-color: $color\n) {\n .#{$state}-feedback {\n display: none;\n width: 100%;\n margin-top: $form-feedback-margin-top;\n @include font-size($form-feedback-font-size);\n font-style: $form-feedback-font-style;\n color: $color;\n }\n\n .#{$state}-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%; // Contain to parent when possible\n padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x;\n margin-top: .1rem;\n @include font-size($form-feedback-tooltip-font-size);\n line-height: $form-feedback-tooltip-line-height;\n color: $tooltip-color;\n background-color: $tooltip-bg-color;\n @include border-radius($form-feedback-tooltip-border-radius);\n }\n\n @include form-validation-state-selector($state) {\n ~ .#{$state}-feedback,\n ~ .#{$state}-tooltip {\n display: block;\n }\n }\n\n .form-control {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-image: escape-svg($icon);\n background-repeat: no-repeat;\n background-position: right $input-height-inner-quarter center;\n background-size: $input-height-inner-half $input-height-inner-half;\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n // stylelint-disable-next-line selector-no-qualifying-type\n textarea.form-control {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n padding-right: $input-height-inner;\n background-position: top $input-height-inner-quarter right $input-height-inner-quarter;\n }\n }\n }\n\n .form-select {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n @if $enable-validation-icons {\n &:not([multiple]):not([size]),\n &:not([multiple])[size=\"1\"] {\n --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};\n padding-right: $form-select-feedback-icon-padding-end;\n background-position: $form-select-bg-position, $form-select-feedback-icon-position;\n background-size: $form-select-bg-size, $form-select-feedback-icon-size;\n }\n }\n\n &:focus {\n border-color: $border-color;\n box-shadow: $focus-box-shadow;\n }\n }\n }\n\n .form-control-color {\n @include form-validation-state-selector($state) {\n @if $enable-validation-icons {\n width: add($form-color-width, $input-height-inner);\n }\n }\n }\n\n .form-check-input {\n @include form-validation-state-selector($state) {\n border-color: $border-color;\n\n &:checked {\n background-color: $color;\n }\n\n &:focus {\n box-shadow: $focus-box-shadow;\n }\n\n ~ .form-check-label {\n color: $color;\n }\n }\n }\n .form-check-inline .form-check-input {\n ~ .#{$state}-feedback {\n margin-left: .5em;\n }\n }\n\n .input-group {\n > .form-control:not(:focus),\n > .form-select:not(:focus),\n > .form-floating:not(:focus-within) {\n @include form-validation-state-selector($state) {\n @if $state == \"valid\" {\n z-index: 3;\n } @else if $state == \"invalid\" {\n z-index: 4;\n }\n }\n }\n }\n}\n// scss-docs-end form-validation-mixins\n","//\n// Base styles\n//\n\n.btn {\n // scss-docs-start btn-css-vars\n --#{$prefix}btn-padding-x: #{$btn-padding-x};\n --#{$prefix}btn-padding-y: #{$btn-padding-y};\n --#{$prefix}btn-font-family: #{$btn-font-family};\n @include rfs($btn-font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-font-weight: #{$btn-font-weight};\n --#{$prefix}btn-line-height: #{$btn-line-height};\n --#{$prefix}btn-color: #{$body-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-width: #{$btn-border-width};\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-border-radius: #{$btn-border-radius};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-box-shadow: #{$btn-box-shadow};\n --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};\n --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);\n // scss-docs-end btn-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x);\n font-family: var(--#{$prefix}btn-font-family);\n @include font-size(var(--#{$prefix}btn-font-size));\n font-weight: var(--#{$prefix}btn-font-weight);\n line-height: var(--#{$prefix}btn-line-height);\n color: var(--#{$prefix}btn-color);\n text-align: center;\n text-decoration: if($link-decoration == none, null, none);\n white-space: $btn-white-space;\n vertical-align: middle;\n cursor: if($enable-button-pointers, pointer, null);\n user-select: none;\n border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color);\n @include border-radius(var(--#{$prefix}btn-border-radius));\n @include gradient-bg(var(--#{$prefix}btn-bg));\n @include box-shadow(var(--#{$prefix}btn-box-shadow));\n @include transition($btn-transition);\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}btn-hover-bg);\n border-color: var(--#{$prefix}btn-hover-border-color);\n }\n\n .btn-check + &:hover {\n // override for the checkbox/radio buttons\n color: var(--#{$prefix}btn-color);\n background-color: var(--#{$prefix}btn-bg);\n border-color: var(--#{$prefix}btn-border-color);\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-hover-color);\n @include gradient-bg(var(--#{$prefix}btn-hover-bg));\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:focus-visible + & {\n border-color: var(--#{$prefix}btn-hover-border-color);\n outline: 0;\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n\n .btn-check:checked + &,\n :not(.btn-check) + &:active,\n &:first-child:active,\n &.active,\n &.show {\n color: var(--#{$prefix}btn-active-color);\n background-color: var(--#{$prefix}btn-active-bg);\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-active-border-color);\n @include box-shadow(var(--#{$prefix}btn-active-shadow));\n\n &:focus-visible {\n // Avoid using mixin so we can pass custom focus shadow properly\n @if $enable-shadows {\n box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow);\n } @else {\n box-shadow: var(--#{$prefix}btn-focus-box-shadow);\n }\n }\n }\n\n &:disabled,\n &.disabled,\n fieldset:disabled & {\n color: var(--#{$prefix}btn-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}btn-disabled-bg);\n background-image: if($enable-gradients, none, null);\n border-color: var(--#{$prefix}btn-disabled-border-color);\n opacity: var(--#{$prefix}btn-disabled-opacity);\n @include box-shadow(none);\n }\n}\n\n\n//\n// Alternate buttons\n//\n\n// scss-docs-start btn-variant-loops\n@each $color, $value in $theme-colors {\n .btn-#{$color} {\n @if $color == \"light\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: shade-color($value, $btn-hover-bg-shade-amount),\n $hover-border: shade-color($value, $btn-hover-border-shade-amount),\n $active-background: shade-color($value, $btn-active-bg-shade-amount),\n $active-border: shade-color($value, $btn-active-border-shade-amount)\n );\n } @else if $color == \"dark\" {\n @include button-variant(\n $value,\n $value,\n $hover-background: tint-color($value, $btn-hover-bg-tint-amount),\n $hover-border: tint-color($value, $btn-hover-border-tint-amount),\n $active-background: tint-color($value, $btn-active-bg-tint-amount),\n $active-border: tint-color($value, $btn-active-border-tint-amount)\n );\n } @else {\n @include button-variant($value, $value);\n }\n }\n}\n\n@each $color, $value in $theme-colors {\n .btn-outline-#{$color} {\n @include button-outline-variant($value);\n }\n}\n// scss-docs-end btn-variant-loops\n\n\n//\n// Link buttons\n//\n\n// Make a button look and behave like a link\n.btn-link {\n --#{$prefix}btn-font-weight: #{$font-weight-normal};\n --#{$prefix}btn-color: #{$btn-link-color};\n --#{$prefix}btn-bg: transparent;\n --#{$prefix}btn-border-color: transparent;\n --#{$prefix}btn-hover-color: #{$btn-link-hover-color};\n --#{$prefix}btn-hover-border-color: transparent;\n --#{$prefix}btn-active-color: #{$btn-link-hover-color};\n --#{$prefix}btn-active-border-color: transparent;\n --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};\n --#{$prefix}btn-disabled-border-color: transparent;\n --#{$prefix}btn-box-shadow: none;\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($primary), $primary, 15%))};\n\n text-decoration: $link-decoration;\n @if $enable-gradients {\n background-image: none;\n }\n\n &:hover,\n &:focus-visible {\n text-decoration: $link-hover-decoration;\n }\n\n &:focus-visible {\n color: var(--#{$prefix}btn-color);\n }\n\n &:hover {\n color: var(--#{$prefix}btn-hover-color);\n }\n\n // No need for an active state here\n}\n\n\n//\n// Button Sizes\n//\n\n.btn-lg {\n @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg);\n}\n\n.btn-sm {\n @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm);\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n// scss-docs-start btn-variant-mixin\n@mixin button-variant(\n $background,\n $border,\n $color: color-contrast($background),\n $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),\n $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),\n $hover-color: color-contrast($hover-background),\n $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),\n $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),\n $active-color: color-contrast($active-background),\n $disabled-background: $background,\n $disabled-border: $border,\n $disabled-color: color-contrast($disabled-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-bg: #{$background};\n --#{$prefix}btn-border-color: #{$border};\n --#{$prefix}btn-hover-color: #{$hover-color};\n --#{$prefix}btn-hover-bg: #{$hover-background};\n --#{$prefix}btn-hover-border-color: #{$hover-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$disabled-color};\n --#{$prefix}btn-disabled-bg: #{$disabled-background};\n --#{$prefix}btn-disabled-border-color: #{$disabled-border};\n}\n// scss-docs-end btn-variant-mixin\n\n// scss-docs-start btn-outline-variant-mixin\n@mixin button-outline-variant(\n $color,\n $color-hover: color-contrast($color),\n $active-background: $color,\n $active-border: $color,\n $active-color: color-contrast($active-background)\n) {\n --#{$prefix}btn-color: #{$color};\n --#{$prefix}btn-border-color: #{$color};\n --#{$prefix}btn-hover-color: #{$color-hover};\n --#{$prefix}btn-hover-bg: #{$active-background};\n --#{$prefix}btn-hover-border-color: #{$active-border};\n --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};\n --#{$prefix}btn-active-color: #{$active-color};\n --#{$prefix}btn-active-bg: #{$active-background};\n --#{$prefix}btn-active-border-color: #{$active-border};\n --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};\n --#{$prefix}btn-disabled-color: #{$color};\n --#{$prefix}btn-disabled-bg: transparent;\n --#{$prefix}btn-disabled-border-color: #{$color};\n --#{$prefix}gradient: none;\n}\n// scss-docs-end btn-outline-variant-mixin\n\n// scss-docs-start btn-size-mixin\n@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}btn-padding-y: #{$padding-y};\n --#{$prefix}btn-padding-x: #{$padding-x};\n @include rfs($font-size, --#{$prefix}btn-font-size);\n --#{$prefix}btn-border-radius: #{$border-radius};\n}\n// scss-docs-end btn-size-mixin\n",".fade {\n @include transition($transition-fade);\n\n &:not(.show) {\n opacity: 0;\n }\n}\n\n// scss-docs-start collapse-classes\n.collapse {\n &:not(.show) {\n display: none;\n }\n}\n\n.collapsing {\n height: 0;\n overflow: hidden;\n @include transition($transition-collapse);\n\n &.collapse-horizontal {\n width: 0;\n height: auto;\n @include transition($transition-collapse-width);\n }\n}\n// scss-docs-end collapse-classes\n","// The dropdown wrapper (`<div>`)\n.dropup,\n.dropend,\n.dropdown,\n.dropstart,\n.dropup-center,\n.dropdown-center {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n\n // Generate the caret automatically\n @include caret();\n}\n\n// The dropdown menu\n.dropdown-menu {\n // scss-docs-start dropdown-css-vars\n --#{$prefix}dropdown-zindex: #{$zindex-dropdown};\n --#{$prefix}dropdown-min-width: #{$dropdown-min-width};\n --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};\n --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};\n --#{$prefix}dropdown-spacer: #{$dropdown-spacer};\n @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);\n --#{$prefix}dropdown-color: #{$dropdown-color};\n --#{$prefix}dropdown-bg: #{$dropdown-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-border-color};\n --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};\n --#{$prefix}dropdown-border-width: #{$dropdown-border-width};\n --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};\n --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};\n --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};\n --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};\n --#{$prefix}dropdown-header-color: #{$dropdown-header-color};\n --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};\n --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};\n // scss-docs-end dropdown-css-vars\n\n position: absolute;\n z-index: var(--#{$prefix}dropdown-zindex);\n display: none; // none by default, but block on \"open\" of the menu\n min-width: var(--#{$prefix}dropdown-min-width);\n padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x);\n margin: 0; // Override default margin of ul\n @include font-size(var(--#{$prefix}dropdown-font-size));\n color: var(--#{$prefix}dropdown-color);\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n list-style: none;\n background-color: var(--#{$prefix}dropdown-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color);\n @include border-radius(var(--#{$prefix}dropdown-border-radius));\n @include box-shadow(var(--#{$prefix}dropdown-box-shadow));\n\n &[data-bs-popper] {\n top: 100%;\n left: 0;\n margin-top: var(--#{$prefix}dropdown-spacer);\n }\n\n @if $dropdown-padding-y == 0 {\n > .dropdown-item:first-child,\n > li:first-child .dropdown-item {\n @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n > .dropdown-item:last-child,\n > li:last-child .dropdown-item {\n @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius));\n }\n\n }\n}\n\n// scss-docs-start responsive-breakpoints\n// We deliberately hardcode the `bs-` prefix because we check\n// this custom property in JS to determine Popper's positioning\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .dropdown-menu#{$infix}-start {\n --bs-position: start;\n\n &[data-bs-popper] {\n right: auto;\n left: 0;\n }\n }\n\n .dropdown-menu#{$infix}-end {\n --bs-position: end;\n\n &[data-bs-popper] {\n right: 0;\n left: auto;\n }\n }\n }\n}\n// scss-docs-end responsive-breakpoints\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n// Just add .dropup after the standard .dropdown class and you're set.\n.dropup {\n .dropdown-menu[data-bs-popper] {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(up);\n }\n}\n\n.dropend {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(end);\n &::after {\n vertical-align: 0;\n }\n }\n}\n\n.dropstart {\n .dropdown-menu[data-bs-popper] {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: var(--#{$prefix}dropdown-spacer);\n }\n\n .dropdown-toggle {\n @include caret(start);\n &::before {\n vertical-align: 0;\n }\n }\n}\n\n\n// Dividers (basically an `<hr>`) within the dropdown\n.dropdown-divider {\n height: 0;\n margin: var(--#{$prefix}dropdown-divider-margin-y) 0;\n overflow: hidden;\n border-top: 1px solid var(--#{$prefix}dropdown-divider-bg);\n opacity: 1; // Revisit in v6 to de-dupe styles that conflict with <hr> element\n}\n\n// Links, buttons, and more within the dropdown menu\n//\n// `<button>`-specific styles are denoted with `// For <button>s`\n.dropdown-item {\n display: block;\n width: 100%; // For `<button>`s\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n clear: both;\n font-weight: $font-weight-normal;\n color: var(--#{$prefix}dropdown-link-color);\n text-align: inherit; // For `<button>`s\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n background-color: transparent; // For `<button>`s\n border: 0; // For `<button>`s\n @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}dropdown-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n @include gradient-bg(var(--#{$prefix}dropdown-link-hover-bg));\n }\n\n &.active,\n &:active {\n color: var(--#{$prefix}dropdown-link-active-color);\n text-decoration: none;\n @include gradient-bg(var(--#{$prefix}dropdown-link-active-bg));\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}dropdown-link-disabled-color);\n pointer-events: none;\n background-color: transparent;\n // Remove CSS gradients if they're enabled\n background-image: if($enable-gradients, none, null);\n }\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: var(--#{$prefix}dropdown-header-padding-y) var(--#{$prefix}dropdown-header-padding-x);\n margin-bottom: 0; // for use with heading elements\n @include font-size($font-size-sm);\n color: var(--#{$prefix}dropdown-header-color);\n white-space: nowrap; // as with > li > a\n}\n\n// Dropdown text\n.dropdown-item-text {\n display: block;\n padding: var(--#{$prefix}dropdown-item-padding-y) var(--#{$prefix}dropdown-item-padding-x);\n color: var(--#{$prefix}dropdown-link-color);\n}\n\n// Dark dropdowns\n.dropdown-menu-dark {\n // scss-docs-start dropdown-dark-css-vars\n --#{$prefix}dropdown-color: #{$dropdown-dark-color};\n --#{$prefix}dropdown-bg: #{$dropdown-dark-bg};\n --#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};\n --#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};\n --#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};\n --#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};\n --#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};\n --#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};\n --#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};\n --#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};\n --#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};\n --#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};\n // scss-docs-end dropdown-dark-css-vars\n}\n","// scss-docs-start caret-mixins\n@mixin caret-down($width: $caret-width) {\n border-top: $width solid;\n border-right: $width solid transparent;\n border-bottom: 0;\n border-left: $width solid transparent;\n}\n\n@mixin caret-up($width: $caret-width) {\n border-top: 0;\n border-right: $width solid transparent;\n border-bottom: $width solid;\n border-left: $width solid transparent;\n}\n\n@mixin caret-end($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: 0;\n border-bottom: $width solid transparent;\n border-left: $width solid;\n}\n\n@mixin caret-start($width: $caret-width) {\n border-top: $width solid transparent;\n border-right: $width solid;\n border-bottom: $width solid transparent;\n}\n\n@mixin caret(\n $direction: down,\n $width: $caret-width,\n $spacing: $caret-spacing,\n $vertical-align: $caret-vertical-align\n) {\n @if $enable-caret {\n &::after {\n display: inline-block;\n margin-left: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @if $direction == down {\n @include caret-down($width);\n } @else if $direction == up {\n @include caret-up($width);\n } @else if $direction == end {\n @include caret-end($width);\n }\n }\n\n @if $direction == start {\n &::after {\n display: none;\n }\n\n &::before {\n display: inline-block;\n margin-right: $spacing;\n vertical-align: $vertical-align;\n content: \"\";\n @include caret-start($width);\n }\n }\n\n &:empty::after {\n margin-left: 0;\n }\n }\n}\n// scss-docs-end caret-mixins\n","// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle; // match .btn alignment given font-size hack above\n\n > .btn {\n position: relative;\n flex: 1 1 auto;\n }\n\n // Bring the hover, focused, and \"active\" buttons to the front to overlay\n // the borders properly\n > .btn-check:checked + .btn,\n > .btn-check:focus + .btn,\n > .btn:hover,\n > .btn:focus,\n > .btn:active,\n > .btn.active {\n z-index: 1;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n\n .input-group {\n width: auto;\n }\n}\n\n.btn-group {\n @include border-radius($btn-border-radius);\n\n // Prevent double borders when buttons are next to each other\n > :not(.btn-check:first-child) + .btn,\n > .btn-group:not(:first-child) {\n margin-left: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn.dropdown-toggle-split:first-child,\n > .btn-group:not(:last-child) > .btn {\n @include border-end-radius(0);\n }\n\n // The left radius should be 0 if the button is:\n // - the \"third or more\" child\n // - the second child and the previous element isn't `.btn-check` (making it the first child visually)\n // - part of a btn-group which isn't the first child\n > .btn:nth-child(n + 3),\n > :not(.btn-check) + .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-start-radius(0);\n }\n}\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-sm > .btn { @extend .btn-sm; }\n.btn-group-lg > .btn { @extend .btn-lg; }\n\n\n//\n// Split button dropdowns\n//\n\n.dropdown-toggle-split {\n padding-right: $btn-padding-x * .75;\n padding-left: $btn-padding-x * .75;\n\n &::after,\n .dropup &::after,\n .dropend &::after {\n margin-left: 0;\n }\n\n .dropstart &::before {\n margin-right: 0;\n }\n}\n\n.btn-sm + .dropdown-toggle-split {\n padding-right: $btn-padding-x-sm * .75;\n padding-left: $btn-padding-x-sm * .75;\n}\n\n.btn-lg + .dropdown-toggle-split {\n padding-right: $btn-padding-x-lg * .75;\n padding-left: $btn-padding-x-lg * .75;\n}\n\n\n// The clickable button for toggling the menu\n// Set the same inset shadow as the :active state\n.btn-group.show .dropdown-toggle {\n @include box-shadow($btn-active-box-shadow);\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n @include box-shadow(none);\n }\n}\n\n\n//\n// Vertical button groups\n//\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n\n > .btn,\n > .btn-group {\n width: 100%;\n }\n\n > .btn:not(:first-child),\n > .btn-group:not(:first-child) {\n margin-top: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list\n }\n\n // Reset rounded corners\n > .btn:not(:last-child):not(.dropdown-toggle),\n > .btn-group:not(:last-child) > .btn {\n @include border-bottom-radius(0);\n }\n\n > .btn ~ .btn,\n > .btn-group:not(:first-child) > .btn {\n @include border-top-radius(0);\n }\n}\n","// Base class\n//\n// Kickstart any navigation component with a set of style resets. Works with\n// `<nav>`s, `<ul>`s or `<ol>`s.\n\n.nav {\n // scss-docs-start nav-css-vars\n --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: #{$nav-link-color};\n --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};\n --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};\n // scss-docs-end nav-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: var(--#{$prefix}nav-link-padding-y) var(--#{$prefix}nav-link-padding-x);\n @include font-size(var(--#{$prefix}nav-link-font-size));\n font-weight: var(--#{$prefix}nav-link-font-weight);\n color: var(--#{$prefix}nav-link-color);\n text-decoration: if($link-decoration == none, null, none);\n @include transition($nav-link-transition);\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}nav-link-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n // Disabled state lightens text\n &.disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n pointer-events: none;\n cursor: default;\n }\n}\n\n//\n// Tabs\n//\n\n.nav-tabs {\n // scss-docs-start nav-tabs-css-vars\n --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};\n --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};\n --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};\n --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};\n --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};\n --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};\n --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};\n // scss-docs-end nav-tabs-css-vars\n\n border-bottom: var(--#{$prefix}nav-tabs-border-width) solid var(--#{$prefix}nav-tabs-border-color);\n\n .nav-link {\n margin-bottom: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n background: none;\n border: var(--#{$prefix}nav-tabs-border-width) solid transparent;\n @include border-top-radius(var(--#{$prefix}nav-tabs-border-radius));\n\n &:hover,\n &:focus {\n // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link\n isolation: isolate;\n border-color: var(--#{$prefix}nav-tabs-link-hover-border-color);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .nav-item.show .nav-link {\n color: var(--#{$prefix}nav-tabs-link-active-color);\n background-color: var(--#{$prefix}nav-tabs-link-active-bg);\n border-color: var(--#{$prefix}nav-tabs-link-active-border-color);\n }\n\n .dropdown-menu {\n // Make dropdown border overlap tab border\n margin-top: calc(-1 * var(--#{$prefix}nav-tabs-border-width)); // stylelint-disable-line function-disallowed-list\n // Remove the top rounded corners here since there is a hard edge above the menu\n @include border-top-radius(0);\n }\n}\n\n\n//\n// Pills\n//\n\n.nav-pills {\n // scss-docs-start nav-pills-css-vars\n --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};\n --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};\n --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};\n // scss-docs-end nav-pills-css-vars\n\n .nav-link {\n background: none;\n border: 0;\n @include border-radius(var(--#{$prefix}nav-pills-border-radius));\n\n &:disabled {\n color: var(--#{$prefix}nav-link-disabled-color);\n background-color: transparent;\n border-color: transparent;\n }\n }\n\n .nav-link.active,\n .show > .nav-link {\n color: var(--#{$prefix}nav-pills-link-active-color);\n @include gradient-bg(var(--#{$prefix}nav-pills-link-active-bg));\n }\n}\n\n\n//\n// Justified variants\n//\n\n.nav-fill {\n > .nav-link,\n .nav-item {\n flex: 1 1 auto;\n text-align: center;\n }\n}\n\n.nav-justified {\n > .nav-link,\n .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n }\n}\n\n.nav-fill,\n.nav-justified {\n .nav-item .nav-link {\n width: 100%; // Make sure button will grow\n }\n}\n\n\n// Tabbable tabs\n//\n// Hide tabbable panes to start, show them when `.active`\n\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n","// Navbar\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n // scss-docs-start navbar-css-vars\n --#{$prefix}navbar-padding-x: #{if($navbar-padding-x == null, 0, $navbar-padding-x)};\n --#{$prefix}navbar-padding-y: #{$navbar-padding-y};\n --#{$prefix}navbar-color: #{$navbar-light-color};\n --#{$prefix}navbar-hover-color: #{$navbar-light-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-light-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-light-active-color};\n --#{$prefix}navbar-brand-padding-y: #{$navbar-brand-padding-y};\n --#{$prefix}navbar-brand-margin-end: #{$navbar-brand-margin-end};\n --#{$prefix}navbar-brand-font-size: #{$navbar-brand-font-size};\n --#{$prefix}navbar-brand-color: #{$navbar-light-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-light-brand-hover-color};\n --#{$prefix}navbar-nav-link-padding-x: #{$navbar-nav-link-padding-x};\n --#{$prefix}navbar-toggler-padding-y: #{$navbar-toggler-padding-y};\n --#{$prefix}navbar-toggler-padding-x: #{$navbar-toggler-padding-x};\n --#{$prefix}navbar-toggler-font-size: #{$navbar-toggler-font-size};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};\n --#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};\n --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};\n --#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};\n // scss-docs-end navbar-css-vars\n\n position: relative;\n display: flex;\n flex-wrap: wrap; // allow us to do the line break for collapsing content\n align-items: center;\n justify-content: space-between; // space out brand from logo\n padding: var(--#{$prefix}navbar-padding-y) var(--#{$prefix}navbar-padding-x);\n @include gradient-bg();\n\n // Because flex properties aren't inherited, we need to redeclare these first\n // few properties so that content nested within behave properly.\n // The `flex-wrap` property is inherited to simplify the expanded navbars\n %container-flex-properties {\n display: flex;\n flex-wrap: inherit;\n align-items: center;\n justify-content: space-between;\n }\n\n > .container,\n > .container-fluid {\n @extend %container-flex-properties;\n }\n\n @each $breakpoint, $container-max-width in $container-max-widths {\n > .container#{breakpoint-infix($breakpoint, $container-max-widths)} {\n @extend %container-flex-properties;\n }\n }\n}\n\n\n// Navbar brand\n//\n// Used for brand, project, or site names.\n\n.navbar-brand {\n padding-top: var(--#{$prefix}navbar-brand-padding-y);\n padding-bottom: var(--#{$prefix}navbar-brand-padding-y);\n margin-right: var(--#{$prefix}navbar-brand-margin-end);\n @include font-size(var(--#{$prefix}navbar-brand-font-size));\n color: var(--#{$prefix}navbar-brand-color);\n text-decoration: if($link-decoration == none, null, none);\n white-space: nowrap;\n\n &:hover,\n &:focus {\n color: var(--#{$prefix}navbar-brand-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n}\n\n\n// Navbar nav\n//\n// Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`).\n\n.navbar-nav {\n // scss-docs-start navbar-nav-css-vars\n --#{$prefix}nav-link-padding-x: 0;\n --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};\n @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);\n --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};\n --#{$prefix}nav-link-color: var(--#{$prefix}navbar-color);\n --#{$prefix}nav-link-hover-color: var(--#{$prefix}navbar-hover-color);\n --#{$prefix}nav-link-disabled-color: var(--#{$prefix}navbar-disabled-color);\n // scss-docs-end navbar-nav-css-vars\n\n display: flex;\n flex-direction: column; // cannot use `inherit` to get the `.navbar`s value\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n\n .show > .nav-link,\n .nav-link.active {\n color: var(--#{$prefix}navbar-active-color);\n }\n\n .dropdown-menu {\n position: static;\n }\n}\n\n\n// Navbar text\n//\n//\n\n.navbar-text {\n padding-top: $nav-link-padding-y;\n padding-bottom: $nav-link-padding-y;\n color: var(--#{$prefix}navbar-color);\n\n a,\n a:hover,\n a:focus {\n color: var(--#{$prefix}navbar-active-color);\n }\n}\n\n\n// Responsive navbar\n//\n// Custom styles for responsive collapsing and toggling of navbar contents.\n// Powered by the collapse Bootstrap JavaScript plugin.\n\n// When collapsed, prevent the toggleable navbar contents from appearing in\n// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`\n// on the `.navbar` parent.\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n // For always expanded or extra full navbars, ensure content aligns itself\n // properly vertically. Can be easily overridden with flex utilities.\n align-items: center;\n}\n\n// Button for toggling the navbar when in its collapsed state\n.navbar-toggler {\n padding: var(--#{$prefix}navbar-toggler-padding-y) var(--#{$prefix}navbar-toggler-padding-x);\n @include font-size(var(--#{$prefix}navbar-toggler-font-size));\n line-height: 1;\n color: var(--#{$prefix}navbar-color);\n background-color: transparent; // remove default button style\n border: var(--#{$prefix}border-width) solid var(--#{$prefix}navbar-toggler-border-color); // remove default button style\n @include border-radius(var(--#{$prefix}navbar-toggler-border-radius));\n @include transition(var(--#{$prefix}navbar-toggler-transition));\n\n &:hover {\n text-decoration: none;\n }\n\n &:focus {\n text-decoration: none;\n outline: 0;\n box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);\n }\n}\n\n// Keep as a separate element so folks can easily override it with another icon\n// or image file as needed.\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n background-image: var(--#{$prefix}navbar-toggler-icon-bg);\n background-repeat: no-repeat;\n background-position: center;\n background-size: 100%;\n}\n\n.navbar-nav-scroll {\n max-height: var(--#{$prefix}scroll-height, 75vh);\n overflow-y: auto;\n}\n\n// scss-docs-start navbar-expand-loop\n// Generate series of `.navbar-expand-*` responsive classes for configuring\n// where your navbar collapses.\n.navbar-expand {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n // stylelint-disable-next-line scss/selector-no-union-class-name\n &#{$infix} {\n @include media-breakpoint-up($next) {\n flex-wrap: nowrap;\n justify-content: flex-start;\n\n .navbar-nav {\n flex-direction: row;\n\n .dropdown-menu {\n position: absolute;\n }\n\n .nav-link {\n padding-right: var(--#{$prefix}navbar-nav-link-padding-x);\n padding-left: var(--#{$prefix}navbar-nav-link-padding-x);\n }\n }\n\n .navbar-nav-scroll {\n overflow: visible;\n }\n\n .navbar-collapse {\n display: flex !important; // stylelint-disable-line declaration-no-important\n flex-basis: auto;\n }\n\n .navbar-toggler {\n display: none;\n }\n\n .offcanvas {\n // stylelint-disable declaration-no-important\n position: static;\n z-index: auto;\n flex-grow: 1;\n width: auto !important;\n height: auto !important;\n visibility: visible !important;\n background-color: transparent !important;\n border: 0 !important;\n transform: none !important;\n @include box-shadow(none);\n @include transition(none);\n // stylelint-enable declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n }\n }\n }\n }\n }\n}\n// scss-docs-end navbar-expand-loop\n\n// Navbar themes\n//\n// Styles for switching between navbars with light or dark background.\n\n.navbar-light {\n @include deprecate(\"`.navbar-light`\", \"v5.2.0\", \"v6.0.0\", true);\n}\n\n.navbar-dark {\n // scss-docs-start navbar-dark-css-vars\n --#{$prefix}navbar-color: #{$navbar-dark-color};\n --#{$prefix}navbar-hover-color: #{$navbar-dark-hover-color};\n --#{$prefix}navbar-disabled-color: #{$navbar-dark-disabled-color};\n --#{$prefix}navbar-active-color: #{$navbar-dark-active-color};\n --#{$prefix}navbar-brand-color: #{$navbar-dark-brand-color};\n --#{$prefix}navbar-brand-hover-color: #{$navbar-dark-brand-hover-color};\n --#{$prefix}navbar-toggler-border-color: #{$navbar-dark-toggler-border-color};\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n // scss-docs-end navbar-dark-css-vars\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .navbar {\n --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};\n }\n }\n}\n","//\n// Base styles\n//\n\n.card {\n // scss-docs-start card-css-vars\n --#{$prefix}card-spacer-y: #{$card-spacer-y};\n --#{$prefix}card-spacer-x: #{$card-spacer-x};\n --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};\n --#{$prefix}card-title-color: #{$card-title-color};\n --#{$prefix}card-subtitle-color: #{$card-subtitle-color};\n --#{$prefix}card-border-width: #{$card-border-width};\n --#{$prefix}card-border-color: #{$card-border-color};\n --#{$prefix}card-border-radius: #{$card-border-radius};\n --#{$prefix}card-box-shadow: #{$card-box-shadow};\n --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius};\n --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y};\n --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x};\n --#{$prefix}card-cap-bg: #{$card-cap-bg};\n --#{$prefix}card-cap-color: #{$card-cap-color};\n --#{$prefix}card-height: #{$card-height};\n --#{$prefix}card-color: #{$card-color};\n --#{$prefix}card-bg: #{$card-bg};\n --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding};\n --#{$prefix}card-group-margin: #{$card-group-margin};\n // scss-docs-end card-css-vars\n\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106\n height: var(--#{$prefix}card-height);\n word-wrap: break-word;\n background-color: var(--#{$prefix}card-bg);\n background-clip: border-box;\n border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n @include border-radius(var(--#{$prefix}card-border-radius));\n @include box-shadow(var(--#{$prefix}card-box-shadow));\n\n > hr {\n margin-right: 0;\n margin-left: 0;\n }\n\n > .list-group {\n border-top: inherit;\n border-bottom: inherit;\n\n &:first-child {\n border-top-width: 0;\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n }\n\n &:last-child {\n border-bottom-width: 0;\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n }\n }\n\n // Due to specificity of the above selector (`.card > .list-group`), we must\n // use a child selector here to prevent double borders.\n > .card-header + .list-group,\n > .list-group + .card-footer {\n border-top: 0;\n }\n}\n\n.card-body {\n // Enable `flex-grow: 1` for decks and groups so that card blocks take up\n // as much space as possible, ensuring footers are aligned to the bottom.\n flex: 1 1 auto;\n padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x);\n color: var(--#{$prefix}card-color);\n}\n\n.card-title {\n margin-bottom: var(--#{$prefix}card-title-spacer-y);\n color: var(--#{$prefix}card-title-color);\n}\n\n.card-subtitle {\n margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list\n margin-bottom: 0;\n color: var(--#{$prefix}card-subtitle-color);\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link {\n &:hover {\n text-decoration: if($link-hover-decoration == underline, none, null);\n }\n\n + .card-link {\n margin-left: var(--#{$prefix}card-spacer-x);\n }\n}\n\n//\n// Optional textual caps\n//\n\n.card-header {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n margin-bottom: 0; // Removes the default margin-bottom of <hN>\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:first-child {\n @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0);\n }\n}\n\n.card-footer {\n padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x);\n color: var(--#{$prefix}card-cap-color);\n background-color: var(--#{$prefix}card-cap-bg);\n border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color);\n\n &:last-child {\n @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius));\n }\n}\n\n\n//\n// Header navs\n//\n\n.card-header-tabs {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n border-bottom: 0;\n\n .nav-link.active {\n background-color: var(--#{$prefix}card-bg);\n border-bottom-color: var(--#{$prefix}card-bg);\n }\n}\n\n.card-header-pills {\n margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list\n}\n\n// Card image\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: var(--#{$prefix}card-img-overlay-padding);\n @include border-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch\n}\n\n.card-img,\n.card-img-top {\n @include border-top-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n.card-img,\n.card-img-bottom {\n @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius));\n}\n\n\n//\n// Card groups\n//\n\n.card-group {\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n margin-bottom: var(--#{$prefix}card-group-margin);\n }\n\n @include media-breakpoint-up(sm) {\n display: flex;\n flex-flow: row wrap;\n // The child selector allows nested `.card` within `.card-group`\n // to display properly.\n > .card {\n // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n flex: 1 0 0%;\n margin-bottom: 0;\n\n + .card {\n margin-left: 0;\n border-left: 0;\n }\n\n // Handle rounded corners\n @if $enable-rounded {\n &:not(:last-child) {\n @include border-end-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-right-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-right-radius: 0;\n }\n }\n\n &:not(:first-child) {\n @include border-start-radius(0);\n\n .card-img-top,\n .card-header {\n // stylelint-disable-next-line property-disallowed-list\n border-top-left-radius: 0;\n }\n .card-img-bottom,\n .card-footer {\n // stylelint-disable-next-line property-disallowed-list\n border-bottom-left-radius: 0;\n }\n }\n }\n }\n }\n}\n","//\n// Base styles\n//\n\n.accordion {\n // scss-docs-start accordion-css-vars\n --#{$prefix}accordion-color: #{$accordion-color};\n --#{$prefix}accordion-bg: #{$accordion-bg};\n --#{$prefix}accordion-transition: #{$accordion-transition};\n --#{$prefix}accordion-border-color: #{$accordion-border-color};\n --#{$prefix}accordion-border-width: #{$accordion-border-width};\n --#{$prefix}accordion-border-radius: #{$accordion-border-radius};\n --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius};\n --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x};\n --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y};\n --#{$prefix}accordion-btn-color: #{$accordion-button-color};\n --#{$prefix}accordion-btn-bg: #{$accordion-button-bg};\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)};\n --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};\n --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};\n --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)};\n --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color};\n --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};\n --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};\n --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};\n --#{$prefix}accordion-active-color: #{$accordion-button-active-color};\n --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg};\n // scss-docs-end accordion-css-vars\n}\n\n.accordion-button {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x);\n @include font-size($font-size-base);\n color: var(--#{$prefix}accordion-btn-color);\n text-align: left; // Reset button style\n background-color: var(--#{$prefix}accordion-btn-bg);\n border: 0;\n @include border-radius(0);\n overflow-anchor: none;\n @include transition(var(--#{$prefix}accordion-transition));\n\n &:not(.collapsed) {\n color: var(--#{$prefix}accordion-active-color);\n background-color: var(--#{$prefix}accordion-active-bg);\n box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list\n\n &::after {\n background-image: var(--#{$prefix}accordion-btn-active-icon);\n transform: var(--#{$prefix}accordion-btn-icon-transform);\n }\n }\n\n // Accordion icon\n &::after {\n flex-shrink: 0;\n width: var(--#{$prefix}accordion-btn-icon-width);\n height: var(--#{$prefix}accordion-btn-icon-width);\n margin-left: auto;\n content: \"\";\n background-image: var(--#{$prefix}accordion-btn-icon);\n background-repeat: no-repeat;\n background-size: var(--#{$prefix}accordion-btn-icon-width);\n @include transition(var(--#{$prefix}accordion-btn-icon-transition));\n }\n\n &:hover {\n z-index: 2;\n }\n\n &:focus {\n z-index: 3;\n border-color: var(--#{$prefix}accordion-btn-focus-border-color);\n outline: 0;\n box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);\n }\n}\n\n.accordion-header {\n margin-bottom: 0;\n}\n\n.accordion-item {\n color: var(--#{$prefix}accordion-color);\n background-color: var(--#{$prefix}accordion-bg);\n border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color);\n\n &:first-of-type {\n @include border-top-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n &:not(:first-of-type) {\n border-top: 0;\n }\n\n // Only set a border-radius on the last item if the accordion is collapsed\n &:last-of-type {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n\n .accordion-button {\n &.collapsed {\n @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius));\n }\n }\n\n .accordion-collapse {\n @include border-bottom-radius(var(--#{$prefix}accordion-border-radius));\n }\n }\n}\n\n.accordion-body {\n padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x);\n}\n\n\n// Flush accordion items\n//\n// Remove borders and border-radius to keep accordion items edge-to-edge.\n\n.accordion-flush {\n .accordion-collapse {\n border-width: 0;\n }\n\n .accordion-item {\n border-right: 0;\n border-left: 0;\n @include border-radius(0);\n\n &:first-child { border-top: 0; }\n &:last-child { border-bottom: 0; }\n\n .accordion-button {\n &,\n &.collapsed {\n @include border-radius(0);\n }\n }\n }\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .accordion-button::after {\n --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)};\n --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon-dark)};\n }\n }\n}\n",".breadcrumb {\n // scss-docs-start breadcrumb-css-vars\n --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x};\n --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y};\n --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom};\n @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size);\n --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg};\n --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius};\n --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color};\n --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x};\n --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color};\n // scss-docs-end breadcrumb-css-vars\n\n display: flex;\n flex-wrap: wrap;\n padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x);\n margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom);\n @include font-size(var(--#{$prefix}breadcrumb-font-size));\n list-style: none;\n background-color: var(--#{$prefix}breadcrumb-bg);\n @include border-radius(var(--#{$prefix}breadcrumb-border-radius));\n}\n\n.breadcrumb-item {\n // The separator between breadcrumbs (by default, a forward-slash: \"/\")\n + .breadcrumb-item {\n padding-left: var(--#{$prefix}breadcrumb-item-padding-x);\n\n &::before {\n float: left; // Suppress inline spacings and underlining of the separator\n padding-right: var(--#{$prefix}breadcrumb-item-padding-x);\n color: var(--#{$prefix}breadcrumb-divider-color);\n content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{\"/* rtl:\"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{\"*/\"};\n }\n }\n\n &.active {\n color: var(--#{$prefix}breadcrumb-item-active-color);\n }\n}\n",".pagination {\n // scss-docs-start pagination-css-vars\n --#{$prefix}pagination-padding-x: #{$pagination-padding-x};\n --#{$prefix}pagination-padding-y: #{$pagination-padding-y};\n @include rfs($pagination-font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-color: #{$pagination-color};\n --#{$prefix}pagination-bg: #{$pagination-bg};\n --#{$prefix}pagination-border-width: #{$pagination-border-width};\n --#{$prefix}pagination-border-color: #{$pagination-border-color};\n --#{$prefix}pagination-border-radius: #{$pagination-border-radius};\n --#{$prefix}pagination-hover-color: #{$pagination-hover-color};\n --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg};\n --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};\n --#{$prefix}pagination-focus-color: #{$pagination-focus-color};\n --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};\n --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};\n --#{$prefix}pagination-active-color: #{$pagination-active-color};\n --#{$prefix}pagination-active-bg: #{$pagination-active-bg};\n --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};\n --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color};\n --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg};\n --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color};\n // scss-docs-end pagination-css-vars\n\n display: flex;\n @include list-unstyled();\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x);\n @include font-size(var(--#{$prefix}pagination-font-size));\n color: var(--#{$prefix}pagination-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}pagination-bg);\n border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color);\n @include transition($pagination-transition);\n\n &:hover {\n z-index: 2;\n color: var(--#{$prefix}pagination-hover-color);\n text-decoration: if($link-hover-decoration == underline, none, null);\n background-color: var(--#{$prefix}pagination-hover-bg);\n border-color: var(--#{$prefix}pagination-hover-border-color);\n }\n\n &:focus {\n z-index: 3;\n color: var(--#{$prefix}pagination-focus-color);\n background-color: var(--#{$prefix}pagination-focus-bg);\n outline: $pagination-focus-outline;\n box-shadow: var(--#{$prefix}pagination-focus-box-shadow);\n }\n\n &.active,\n .active > & {\n z-index: 3;\n color: var(--#{$prefix}pagination-active-color);\n @include gradient-bg(var(--#{$prefix}pagination-active-bg));\n border-color: var(--#{$prefix}pagination-active-border-color);\n }\n\n &.disabled,\n .disabled > & {\n color: var(--#{$prefix}pagination-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}pagination-disabled-bg);\n border-color: var(--#{$prefix}pagination-disabled-border-color);\n }\n}\n\n.page-item {\n &:not(:first-child) .page-link {\n margin-left: $pagination-margin-start;\n }\n\n @if $pagination-margin-start == calc($pagination-border-width * -1) {\n &:first-child {\n .page-link {\n @include border-start-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n\n &:last-child {\n .page-link {\n @include border-end-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n } @else {\n // Add border-radius to all pageLinks in case they have left margin\n .page-link {\n @include border-radius(var(--#{$prefix}pagination-border-radius));\n }\n }\n}\n\n\n//\n// Sizing\n//\n\n.pagination-lg {\n @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg);\n}\n\n.pagination-sm {\n @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm);\n}\n","// Pagination\n\n// scss-docs-start pagination-mixin\n@mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) {\n --#{$prefix}pagination-padding-x: #{$padding-x};\n --#{$prefix}pagination-padding-y: #{$padding-y};\n @include rfs($font-size, --#{$prefix}pagination-font-size);\n --#{$prefix}pagination-border-radius: #{$border-radius};\n}\n// scss-docs-end pagination-mixin\n","// Base class\n//\n// Requires one of the contextual, color modifier classes for `color` and\n// `background-color`.\n\n.badge {\n // scss-docs-start badge-css-vars\n --#{$prefix}badge-padding-x: #{$badge-padding-x};\n --#{$prefix}badge-padding-y: #{$badge-padding-y};\n @include rfs($badge-font-size, --#{$prefix}badge-font-size);\n --#{$prefix}badge-font-weight: #{$badge-font-weight};\n --#{$prefix}badge-color: #{$badge-color};\n --#{$prefix}badge-border-radius: #{$badge-border-radius};\n // scss-docs-end badge-css-vars\n\n display: inline-block;\n padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x);\n @include font-size(var(--#{$prefix}badge-font-size));\n font-weight: var(--#{$prefix}badge-font-weight);\n line-height: 1;\n color: var(--#{$prefix}badge-color);\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n @include border-radius(var(--#{$prefix}badge-border-radius));\n @include gradient-bg();\n\n // Empty badges collapse automatically\n &:empty {\n display: none;\n }\n}\n\n// Quick fix for badges in buttons\n.btn .badge {\n position: relative;\n top: -1px;\n}\n","//\n// Base styles\n//\n\n.alert {\n // scss-docs-start alert-css-vars\n --#{$prefix}alert-bg: transparent;\n --#{$prefix}alert-padding-x: #{$alert-padding-x};\n --#{$prefix}alert-padding-y: #{$alert-padding-y};\n --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom};\n --#{$prefix}alert-color: inherit;\n --#{$prefix}alert-border-color: transparent;\n --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);\n --#{$prefix}alert-border-radius: #{$alert-border-radius};\n --#{$prefix}alert-link-color: inherit;\n // scss-docs-end alert-css-vars\n\n position: relative;\n padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x);\n margin-bottom: var(--#{$prefix}alert-margin-bottom);\n color: var(--#{$prefix}alert-color);\n background-color: var(--#{$prefix}alert-bg);\n border: var(--#{$prefix}alert-border);\n @include border-radius(var(--#{$prefix}alert-border-radius));\n}\n\n// Headings for larger alerts\n.alert-heading {\n // Specified to prevent conflicts of changing $headings-color\n color: inherit;\n}\n\n// Provide class for links that match alerts\n.alert-link {\n font-weight: $alert-link-font-weight;\n color: var(--#{$prefix}alert-link-color);\n}\n\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissible {\n padding-right: $alert-dismissible-padding-r;\n\n // Adjust close link position\n .btn-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: $stretched-link-z-index + 1;\n padding: $alert-padding-y * 1.25 $alert-padding-x;\n }\n}\n\n\n// scss-docs-start alert-modifiers\n// Generate contextual modifier classes for colorizing the alert\n@each $state in map-keys($theme-colors) {\n .alert-#{$state} {\n --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text);\n --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);\n --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle);\n --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text);\n }\n}\n// scss-docs-end alert-modifiers\n","// Disable animation if transitions are disabled\n\n// scss-docs-start progress-keyframes\n@if $enable-transitions {\n @keyframes progress-bar-stripes {\n 0% { background-position-x: $progress-height; }\n }\n}\n// scss-docs-end progress-keyframes\n\n.progress,\n.progress-stacked {\n // scss-docs-start progress-css-vars\n --#{$prefix}progress-height: #{$progress-height};\n @include rfs($progress-font-size, --#{$prefix}progress-font-size);\n --#{$prefix}progress-bg: #{$progress-bg};\n --#{$prefix}progress-border-radius: #{$progress-border-radius};\n --#{$prefix}progress-box-shadow: #{$progress-box-shadow};\n --#{$prefix}progress-bar-color: #{$progress-bar-color};\n --#{$prefix}progress-bar-bg: #{$progress-bar-bg};\n --#{$prefix}progress-bar-transition: #{$progress-bar-transition};\n // scss-docs-end progress-css-vars\n\n display: flex;\n height: var(--#{$prefix}progress-height);\n overflow: hidden; // force rounded corners by cropping it\n @include font-size(var(--#{$prefix}progress-font-size));\n background-color: var(--#{$prefix}progress-bg);\n @include border-radius(var(--#{$prefix}progress-border-radius));\n @include box-shadow(var(--#{$prefix}progress-box-shadow));\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n overflow: hidden;\n color: var(--#{$prefix}progress-bar-color);\n text-align: center;\n white-space: nowrap;\n background-color: var(--#{$prefix}progress-bar-bg);\n @include transition(var(--#{$prefix}progress-bar-transition));\n}\n\n.progress-bar-striped {\n @include gradient-striped();\n background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);\n}\n\n.progress-stacked > .progress {\n overflow: visible;\n}\n\n.progress-stacked > .progress > .progress-bar {\n width: 100%;\n}\n\n@if $enable-transitions {\n .progress-bar-animated {\n animation: $progress-bar-animation-timing progress-bar-stripes;\n\n @if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n animation: none;\n }\n }\n }\n}\n","// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // scss-docs-start list-group-css-vars\n --#{$prefix}list-group-color: #{$list-group-color};\n --#{$prefix}list-group-bg: #{$list-group-bg};\n --#{$prefix}list-group-border-color: #{$list-group-border-color};\n --#{$prefix}list-group-border-width: #{$list-group-border-width};\n --#{$prefix}list-group-border-radius: #{$list-group-border-radius};\n --#{$prefix}list-group-item-padding-x: #{$list-group-item-padding-x};\n --#{$prefix}list-group-item-padding-y: #{$list-group-item-padding-y};\n --#{$prefix}list-group-action-color: #{$list-group-action-color};\n --#{$prefix}list-group-action-hover-color: #{$list-group-action-hover-color};\n --#{$prefix}list-group-action-hover-bg: #{$list-group-hover-bg};\n --#{$prefix}list-group-action-active-color: #{$list-group-action-active-color};\n --#{$prefix}list-group-action-active-bg: #{$list-group-action-active-bg};\n --#{$prefix}list-group-disabled-color: #{$list-group-disabled-color};\n --#{$prefix}list-group-disabled-bg: #{$list-group-disabled-bg};\n --#{$prefix}list-group-active-color: #{$list-group-active-color};\n --#{$prefix}list-group-active-bg: #{$list-group-active-bg};\n --#{$prefix}list-group-active-border-color: #{$list-group-active-border-color};\n // scss-docs-end list-group-css-vars\n\n display: flex;\n flex-direction: column;\n\n // No need to set list-style: none; since .list-group-item is block level\n padding-left: 0; // reset padding because ul and ol\n margin-bottom: 0;\n @include border-radius(var(--#{$prefix}list-group-border-radius));\n}\n\n.list-group-numbered {\n list-style-type: none;\n counter-reset: section;\n\n > .list-group-item::before {\n // Increments only this instance of the section counter\n content: counters(section, \".\") \". \";\n counter-increment: section;\n }\n}\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive\n// list items. Includes an extra `.active` modifier class for selected items.\n\n.list-group-item-action {\n width: 100%; // For `<button>`s (anchors become 100% by default though)\n color: var(--#{$prefix}list-group-action-color);\n text-align: inherit; // For `<button>`s (anchors inherit)\n\n // Hover state\n &:hover,\n &:focus {\n z-index: 1; // Place hover/focus items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-action-hover-color);\n text-decoration: none;\n background-color: var(--#{$prefix}list-group-action-hover-bg);\n }\n\n &:active {\n color: var(--#{$prefix}list-group-action-active-color);\n background-color: var(--#{$prefix}list-group-action-active-bg);\n }\n}\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: var(--#{$prefix}list-group-item-padding-y) var(--#{$prefix}list-group-item-padding-x);\n color: var(--#{$prefix}list-group-color);\n text-decoration: if($link-decoration == none, null, none);\n background-color: var(--#{$prefix}list-group-bg);\n border: var(--#{$prefix}list-group-border-width) solid var(--#{$prefix}list-group-border-color);\n\n &:first-child {\n @include border-top-radius(inherit);\n }\n\n &:last-child {\n @include border-bottom-radius(inherit);\n }\n\n &.disabled,\n &:disabled {\n color: var(--#{$prefix}list-group-disabled-color);\n pointer-events: none;\n background-color: var(--#{$prefix}list-group-disabled-bg);\n }\n\n // Include both here for `<a>`s and `<button>`s\n &.active {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: var(--#{$prefix}list-group-active-color);\n background-color: var(--#{$prefix}list-group-active-bg);\n border-color: var(--#{$prefix}list-group-active-border-color);\n }\n\n // stylelint-disable-next-line scss/selector-no-redundant-nesting-selector\n & + .list-group-item {\n border-top-width: 0;\n\n &.active {\n margin-top: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-top-width: var(--#{$prefix}list-group-border-width);\n }\n }\n}\n\n// Horizontal\n//\n// Change the layout of list group items from vertical (default) to horizontal.\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .list-group-horizontal#{$infix} {\n flex-direction: row;\n\n > .list-group-item {\n &:first-child:not(:last-child) {\n @include border-bottom-start-radius(var(--#{$prefix}list-group-border-radius));\n @include border-top-end-radius(0);\n }\n\n &:last-child:not(:first-child) {\n @include border-top-end-radius(var(--#{$prefix}list-group-border-radius));\n @include border-bottom-start-radius(0);\n }\n\n &.active {\n margin-top: 0;\n }\n\n + .list-group-item {\n border-top-width: var(--#{$prefix}list-group-border-width);\n border-left-width: 0;\n\n &.active {\n margin-left: calc(-1 * var(--#{$prefix}list-group-border-width)); // stylelint-disable-line function-disallowed-list\n border-left-width: var(--#{$prefix}list-group-border-width);\n }\n }\n }\n }\n }\n}\n\n\n// Flush list items\n//\n// Remove borders and border-radius to keep list group items edge-to-edge. Most\n// useful within other components (e.g., cards).\n\n.list-group-flush {\n @include border-radius(0);\n\n > .list-group-item {\n border-width: 0 0 var(--#{$prefix}list-group-border-width);\n\n &:last-child {\n border-bottom-width: 0;\n }\n }\n}\n\n\n// scss-docs-start list-group-modifiers\n// List group contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n@each $state in map-keys($theme-colors) {\n .list-group-item-#{$state} {\n --#{$prefix}list-group-color: var(--#{$prefix}#{$state}-text);\n --#{$prefix}list-group-bg: var(--#{$prefix}#{$state}-bg-subtle);\n --#{$prefix}list-group-border-color: var(--#{$prefix}#{$state}-border-subtle);\n\n &.list-group-item-action {\n &:hover,\n &:focus {\n --#{$prefix}list-group-action-hover-color: var(--#{$prefix}emphasis-color);\n --#{$prefix}list-group-action-hover-bg: var(--#{$prefix}#{$state}-border-subtle);\n }\n\n &:active {\n --#{$prefix}list-group-active-color: var(--#{$prefix}emphasis-color);\n --#{$prefix}list-group-active-bg: var(--#{$prefix}#{$state}-text);\n --#{$prefix}list-group-active-border-color: var(--#{$prefix}#{$state}-text);\n }\n }\n }\n}\n// scss-docs-end list-group-modifiers\n","// Transparent background and border properties included for button version.\n// iOS requires the button element instead of an anchor tag.\n// If you want the anchor version, it requires `href=\"#\"`.\n// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n.btn-close {\n --#{$prefix}btn-close-color: #{$btn-close-color};\n --#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };\n --#{$prefix}btn-close-opacity: #{$btn-close-opacity};\n --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};\n --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};\n --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};\n --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};\n --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};\n\n box-sizing: content-box;\n width: $btn-close-width;\n height: $btn-close-height;\n padding: $btn-close-padding-y $btn-close-padding-x;\n color: var(--#{$prefix}btn-close-color);\n background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements\n border: 0; // for button elements\n @include border-radius();\n opacity: var(--#{$prefix}btn-close-opacity);\n\n // Override <a>'s hover style\n &:hover {\n color: var(--#{$prefix}btn-close-color);\n text-decoration: none;\n opacity: var(--#{$prefix}btn-close-hover-opacity);\n }\n\n &:focus {\n outline: 0;\n box-shadow: var(--#{$prefix}btn-close-focus-shadow);\n opacity: var(--#{$prefix}btn-close-focus-opacity);\n }\n\n &:disabled,\n &.disabled {\n pointer-events: none;\n user-select: none;\n opacity: var(--#{$prefix}btn-close-disabled-opacity);\n }\n}\n\n@mixin btn-close-white() {\n filter: var(--#{$prefix}btn-close-white-filter);\n}\n\n.btn-close-white {\n @include btn-close-white();\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .btn-close {\n @include btn-close-white();\n }\n }\n}\n",".toast {\n // scss-docs-start toast-css-vars\n --#{$prefix}toast-zindex: #{$zindex-toast};\n --#{$prefix}toast-padding-x: #{$toast-padding-x};\n --#{$prefix}toast-padding-y: #{$toast-padding-y};\n --#{$prefix}toast-spacing: #{$toast-spacing};\n --#{$prefix}toast-max-width: #{$toast-max-width};\n @include rfs($toast-font-size, --#{$prefix}toast-font-size);\n --#{$prefix}toast-color: #{$toast-color};\n --#{$prefix}toast-bg: #{$toast-background-color};\n --#{$prefix}toast-border-width: #{$toast-border-width};\n --#{$prefix}toast-border-color: #{$toast-border-color};\n --#{$prefix}toast-border-radius: #{$toast-border-radius};\n --#{$prefix}toast-box-shadow: #{$toast-box-shadow};\n --#{$prefix}toast-header-color: #{$toast-header-color};\n --#{$prefix}toast-header-bg: #{$toast-header-background-color};\n --#{$prefix}toast-header-border-color: #{$toast-header-border-color};\n // scss-docs-end toast-css-vars\n\n width: var(--#{$prefix}toast-max-width);\n max-width: 100%;\n @include font-size(var(--#{$prefix}toast-font-size));\n color: var(--#{$prefix}toast-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}toast-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color);\n box-shadow: var(--#{$prefix}toast-box-shadow);\n @include border-radius(var(--#{$prefix}toast-border-radius));\n\n &.showing {\n opacity: 0;\n }\n\n &:not(.show) {\n display: none;\n }\n}\n\n.toast-container {\n --#{$prefix}toast-zindex: #{$zindex-toast};\n\n position: absolute;\n z-index: var(--#{$prefix}toast-zindex);\n width: max-content;\n max-width: 100%;\n pointer-events: none;\n\n > :not(:last-child) {\n margin-bottom: var(--#{$prefix}toast-spacing);\n }\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x);\n color: var(--#{$prefix}toast-header-color);\n background-color: var(--#{$prefix}toast-header-bg);\n background-clip: padding-box;\n border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color);\n @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width)));\n\n .btn-close {\n margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list\n margin-left: var(--#{$prefix}toast-padding-x);\n }\n}\n\n.toast-body {\n padding: var(--#{$prefix}toast-padding-x);\n word-wrap: break-word;\n}\n","// stylelint-disable function-disallowed-list\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and stuff\n\n\n// Container that the modal scrolls within\n.modal {\n // scss-docs-start modal-css-vars\n --#{$prefix}modal-zindex: #{$zindex-modal};\n --#{$prefix}modal-width: #{$modal-md};\n --#{$prefix}modal-padding: #{$modal-inner-padding};\n --#{$prefix}modal-margin: #{$modal-dialog-margin};\n --#{$prefix}modal-color: #{$modal-content-color};\n --#{$prefix}modal-bg: #{$modal-content-bg};\n --#{$prefix}modal-border-color: #{$modal-content-border-color};\n --#{$prefix}modal-border-width: #{$modal-content-border-width};\n --#{$prefix}modal-border-radius: #{$modal-content-border-radius};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-xs};\n --#{$prefix}modal-inner-border-radius: #{$modal-content-inner-border-radius};\n --#{$prefix}modal-header-padding-x: #{$modal-header-padding-x};\n --#{$prefix}modal-header-padding-y: #{$modal-header-padding-y};\n --#{$prefix}modal-header-padding: #{$modal-header-padding}; // Todo in v6: Split this padding into x and y\n --#{$prefix}modal-header-border-color: #{$modal-header-border-color};\n --#{$prefix}modal-header-border-width: #{$modal-header-border-width};\n --#{$prefix}modal-title-line-height: #{$modal-title-line-height};\n --#{$prefix}modal-footer-gap: #{$modal-footer-margin-between};\n --#{$prefix}modal-footer-bg: #{$modal-footer-bg};\n --#{$prefix}modal-footer-border-color: #{$modal-footer-border-color};\n --#{$prefix}modal-footer-border-width: #{$modal-footer-border-width};\n // scss-docs-end modal-css-vars\n\n position: fixed;\n top: 0;\n left: 0;\n z-index: var(--#{$prefix}modal-zindex);\n display: none;\n width: 100%;\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a\n // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342\n // See also https://github.com/twbs/bootstrap/issues/17695\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: var(--#{$prefix}modal-margin);\n // allow clicks to pass through for custom click handling to close modal\n pointer-events: none;\n\n // When fading in the modal, animate it to slide down\n .modal.fade & {\n @include transition($modal-transition);\n transform: $modal-fade-transform;\n }\n .modal.show & {\n transform: $modal-show-transform;\n }\n\n // When trying to close, animate focus to scale\n .modal.modal-static & {\n transform: $modal-scale-transform;\n }\n}\n\n.modal-dialog-scrollable {\n height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n\n .modal-content {\n max-height: 100%;\n overflow: hidden;\n }\n\n .modal-body {\n overflow-y: auto;\n }\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - var(--#{$prefix}modal-margin) * 2);\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog`\n // counteract the pointer-events: none; in the .modal-dialog\n color: var(--#{$prefix}modal-color);\n pointer-events: auto;\n background-color: var(--#{$prefix}modal-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}modal-border-width) solid var(--#{$prefix}modal-border-color);\n @include border-radius(var(--#{$prefix}modal-border-radius));\n @include box-shadow(var(--#{$prefix}modal-box-shadow));\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n // scss-docs-start modal-backdrop-css-vars\n --#{$prefix}backdrop-zindex: #{$zindex-modal-backdrop};\n --#{$prefix}backdrop-bg: #{$modal-backdrop-bg};\n --#{$prefix}backdrop-opacity: #{$modal-backdrop-opacity};\n // scss-docs-end modal-backdrop-css-vars\n\n @include overlay-backdrop(var(--#{$prefix}backdrop-zindex), var(--#{$prefix}backdrop-bg), var(--#{$prefix}backdrop-opacity));\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends\n padding: var(--#{$prefix}modal-header-padding);\n border-bottom: var(--#{$prefix}modal-header-border-width) solid var(--#{$prefix}modal-header-border-color);\n @include border-top-radius(var(--#{$prefix}modal-inner-border-radius));\n\n .btn-close {\n padding: calc(var(--#{$prefix}modal-header-padding-y) * .5) calc(var(--#{$prefix}modal-header-padding-x) * .5);\n margin: calc(-.5 * var(--#{$prefix}modal-header-padding-y)) calc(-.5 * var(--#{$prefix}modal-header-padding-x)) calc(-.5 * var(--#{$prefix}modal-header-padding-y)) auto;\n }\n}\n\n// Title text within header\n.modal-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}modal-title-line-height);\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n // Enable `flex-grow: 1` so that the body take up as much space as possible\n // when there should be a fixed height on `.modal-dialog`.\n flex: 1 1 auto;\n padding: var(--#{$prefix}modal-padding);\n}\n\n// Footer (for actions)\n.modal-footer {\n display: flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n align-items: center; // vertically center\n justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items\n padding: calc(var(--#{$prefix}modal-padding) - var(--#{$prefix}modal-footer-gap) * .5);\n background-color: var(--#{$prefix}modal-footer-bg);\n border-top: var(--#{$prefix}modal-footer-border-width) solid var(--#{$prefix}modal-footer-border-color);\n @include border-bottom-radius(var(--#{$prefix}modal-inner-border-radius));\n\n // Place margin between footer elements\n // This solution is far from ideal because of the universal selector usage,\n // but is needed to fix https://github.com/twbs/bootstrap/issues/24800\n > * {\n margin: calc(var(--#{$prefix}modal-footer-gap) * .5); // Todo in v6: replace with gap on parent class\n }\n}\n\n// Scale up the modal\n@include media-breakpoint-up(sm) {\n .modal {\n --#{$prefix}modal-margin: #{$modal-dialog-margin-y-sm-up};\n --#{$prefix}modal-box-shadow: #{$modal-content-box-shadow-sm-up};\n }\n\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n max-width: var(--#{$prefix}modal-width);\n margin-right: auto;\n margin-left: auto;\n }\n\n .modal-sm {\n --#{$prefix}modal-width: #{$modal-sm};\n }\n}\n\n@include media-breakpoint-up(lg) {\n .modal-lg,\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-lg};\n }\n}\n\n@include media-breakpoint-up(xl) {\n .modal-xl {\n --#{$prefix}modal-width: #{$modal-xl};\n }\n}\n\n// scss-docs-start modal-fullscreen-loop\n@each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n $postfix: if($infix != \"\", $infix + \"-down\", \"\");\n\n @include media-breakpoint-down($breakpoint) {\n .modal-fullscreen#{$postfix} {\n width: 100vw;\n max-width: none;\n height: 100%;\n margin: 0;\n\n .modal-content {\n height: 100%;\n border: 0;\n @include border-radius(0);\n }\n\n .modal-header,\n .modal-footer {\n @include border-radius(0);\n }\n\n .modal-body {\n overflow-y: auto;\n }\n }\n }\n}\n// scss-docs-end modal-fullscreen-loop\n","// Shared between modals and offcanvases\n@mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) {\n position: fixed;\n top: 0;\n left: 0;\n z-index: $zindex;\n width: 100vw;\n height: 100vh;\n background-color: $backdrop-bg;\n\n // Fade for backdrop\n &.fade { opacity: 0; }\n &.show { opacity: $backdrop-opacity; }\n}\n","// Base class\n.tooltip {\n // scss-docs-start tooltip-css-vars\n --#{$prefix}tooltip-zindex: #{$zindex-tooltip};\n --#{$prefix}tooltip-max-width: #{$tooltip-max-width};\n --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};\n --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};\n --#{$prefix}tooltip-margin: #{$tooltip-margin};\n @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);\n --#{$prefix}tooltip-color: #{$tooltip-color};\n --#{$prefix}tooltip-bg: #{$tooltip-bg};\n --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};\n --#{$prefix}tooltip-opacity: #{$tooltip-opacity};\n --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};\n --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};\n // scss-docs-end tooltip-css-vars\n\n z-index: var(--#{$prefix}tooltip-zindex);\n display: block;\n padding: var(--#{$prefix}tooltip-arrow-height);\n margin: var(--#{$prefix}tooltip-margin);\n @include deprecate(\"`$tooltip-margin`\", \"v5\", \"v5.x\", true);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}tooltip-font-size));\n // Allow breaking very long words so they don't overflow the tooltip's bounds\n word-wrap: break-word;\n opacity: 0;\n\n &.show { opacity: var(--#{$prefix}tooltip-opacity); }\n\n .tooltip-arrow {\n display: block;\n width: var(--#{$prefix}tooltip-arrow-width);\n height: var(--#{$prefix}tooltip-arrow-height);\n\n &::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n }\n }\n}\n\n.bs-tooltip-top .tooltip-arrow {\n bottom: 0;\n\n &::before {\n top: -1px;\n border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-top-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-end .tooltip-arrow {\n left: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n right: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n border-right-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-bottom .tooltip-arrow {\n top: 0;\n\n &::before {\n bottom: -1px;\n border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-bottom-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-tooltip-start .tooltip-arrow {\n right: 0;\n width: var(--#{$prefix}tooltip-arrow-height);\n height: var(--#{$prefix}tooltip-arrow-width);\n\n &::before {\n left: -1px;\n border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list\n border-left-color: var(--#{$prefix}tooltip-bg);\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-tooltip-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-tooltip-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-tooltip-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-tooltip-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-tooltip-start;\n }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: var(--#{$prefix}tooltip-max-width);\n padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x);\n color: var(--#{$prefix}tooltip-color);\n text-align: center;\n background-color: var(--#{$prefix}tooltip-bg);\n @include border-radius(var(--#{$prefix}tooltip-border-radius));\n}\n","@mixin reset-text {\n font-family: $font-family-base;\n // We deliberately do NOT reset font-size or overflow-wrap / word-wrap.\n font-style: normal;\n font-weight: $font-weight-normal;\n line-height: $line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n white-space: normal;\n word-spacing: normal;\n line-break: auto;\n}\n",".popover {\n // scss-docs-start popover-css-vars\n --#{$prefix}popover-zindex: #{$zindex-popover};\n --#{$prefix}popover-max-width: #{$popover-max-width};\n @include rfs($popover-font-size, --#{$prefix}popover-font-size);\n --#{$prefix}popover-bg: #{$popover-bg};\n --#{$prefix}popover-border-width: #{$popover-border-width};\n --#{$prefix}popover-border-color: #{$popover-border-color};\n --#{$prefix}popover-border-radius: #{$popover-border-radius};\n --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};\n --#{$prefix}popover-box-shadow: #{$popover-box-shadow};\n --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};\n --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};\n @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);\n --#{$prefix}popover-header-color: #{$popover-header-color};\n --#{$prefix}popover-header-bg: #{$popover-header-bg};\n --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};\n --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};\n --#{$prefix}popover-body-color: #{$popover-body-color};\n --#{$prefix}popover-arrow-width: #{$popover-arrow-width};\n --#{$prefix}popover-arrow-height: #{$popover-arrow-height};\n --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);\n // scss-docs-end popover-css-vars\n\n z-index: var(--#{$prefix}popover-zindex);\n display: block;\n max-width: var(--#{$prefix}popover-max-width);\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n @include reset-text();\n @include font-size(var(--#{$prefix}popover-font-size));\n // Allow breaking very long words so they don't overflow the popover's bounds\n word-wrap: break-word;\n background-color: var(--#{$prefix}popover-bg);\n background-clip: padding-box;\n border: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-radius(var(--#{$prefix}popover-border-radius));\n @include box-shadow(var(--#{$prefix}popover-box-shadow));\n\n .popover-arrow {\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n height: var(--#{$prefix}popover-arrow-height);\n\n &::before,\n &::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n border-width: 0;\n }\n }\n}\n\n.bs-popover-top {\n > .popover-arrow {\n bottom: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n bottom: 0;\n border-top-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n bottom: var(--#{$prefix}popover-border-width);\n border-top-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-end {\n > .popover-arrow {\n left: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height) calc(var(--#{$prefix}popover-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n left: 0;\n border-right-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n left: var(--#{$prefix}popover-border-width);\n border-right-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-bottom {\n > .popover-arrow {\n top: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n\n &::before,\n &::after {\n border-width: 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n top: 0;\n border-bottom-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n top: var(--#{$prefix}popover-border-width);\n border-bottom-color: var(--#{$prefix}popover-bg);\n }\n }\n\n // This will remove the popover-header's border just below the arrow\n .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: var(--#{$prefix}popover-arrow-width);\n margin-left: calc(-.5 * var(--#{$prefix}popover-arrow-width)); // stylelint-disable-line function-disallowed-list\n content: \"\";\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-header-bg);\n }\n}\n\n/* rtl:begin:ignore */\n.bs-popover-start {\n > .popover-arrow {\n right: calc(-1 * (var(--#{$prefix}popover-arrow-height)) - var(--#{$prefix}popover-border-width)); // stylelint-disable-line function-disallowed-list\n width: var(--#{$prefix}popover-arrow-height);\n height: var(--#{$prefix}popover-arrow-width);\n\n &::before,\n &::after {\n border-width: calc(var(--#{$prefix}popover-arrow-width) * .5) 0 calc(var(--#{$prefix}popover-arrow-width) * .5) var(--#{$prefix}popover-arrow-height); // stylelint-disable-line function-disallowed-list\n }\n\n &::before {\n right: 0;\n border-left-color: var(--#{$prefix}popover-arrow-border);\n }\n\n &::after {\n right: var(--#{$prefix}popover-border-width);\n border-left-color: var(--#{$prefix}popover-bg);\n }\n }\n}\n\n/* rtl:end:ignore */\n\n.bs-popover-auto {\n &[data-popper-placement^=\"top\"] {\n @extend .bs-popover-top;\n }\n &[data-popper-placement^=\"right\"] {\n @extend .bs-popover-end;\n }\n &[data-popper-placement^=\"bottom\"] {\n @extend .bs-popover-bottom;\n }\n &[data-popper-placement^=\"left\"] {\n @extend .bs-popover-start;\n }\n}\n\n// Offset the popover to account for the popover arrow\n.popover-header {\n padding: var(--#{$prefix}popover-header-padding-y) var(--#{$prefix}popover-header-padding-x);\n margin-bottom: 0; // Reset the default from Reboot\n @include font-size(var(--#{$prefix}popover-header-font-size));\n color: var(--#{$prefix}popover-header-color);\n background-color: var(--#{$prefix}popover-header-bg);\n border-bottom: var(--#{$prefix}popover-border-width) solid var(--#{$prefix}popover-border-color);\n @include border-top-radius(var(--#{$prefix}popover-inner-border-radius));\n\n &:empty {\n display: none;\n }\n}\n\n.popover-body {\n padding: var(--#{$prefix}popover-body-padding-y) var(--#{$prefix}popover-body-padding-x);\n color: var(--#{$prefix}popover-body-color);\n}\n","// Notes on the classes:\n//\n// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically)\n// even when their scroll action started on a carousel, but for compatibility (with Firefox)\n// we're preventing all actions instead\n// 2. The .carousel-item-start and .carousel-item-end is used to indicate where\n// the active slide is heading.\n// 3. .active.carousel-item is the current slide.\n// 4. .active.carousel-item-start and .active.carousel-item-end is the current\n// slide in its in-transition state. Only one of these occurs at a time.\n// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end\n// is the upcoming slide in transition.\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n @include clearfix();\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n @include transition($carousel-transition);\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n transform: translateX(-100%);\n}\n\n\n//\n// Alternate transitions\n//\n\n.carousel-fade {\n .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n }\n\n .carousel-item.active,\n .carousel-item-next.carousel-item-start,\n .carousel-item-prev.carousel-item-end {\n z-index: 1;\n opacity: 1;\n }\n\n .active.carousel-item-start,\n .active.carousel-item-end {\n z-index: 0;\n opacity: 0;\n @include transition(opacity 0s $carousel-transition-duration);\n }\n}\n\n\n//\n// Left/right controls for nav\n//\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n // Use flex for alignment (1-3)\n display: flex; // 1. allow flex styles\n align-items: center; // 2. vertically center contents\n justify-content: center; // 3. horizontally center contents\n width: $carousel-control-width;\n padding: 0;\n color: $carousel-control-color;\n text-align: center;\n background: none;\n border: 0;\n opacity: $carousel-control-opacity;\n @include transition($carousel-control-transition);\n\n // Hover/focus state\n &:hover,\n &:focus {\n color: $carousel-control-color;\n text-decoration: none;\n outline: 0;\n opacity: $carousel-control-hover-opacity;\n }\n}\n.carousel-control-prev {\n left: 0;\n background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null);\n}\n.carousel-control-next {\n right: 0;\n background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null);\n}\n\n// Icons for within\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: $carousel-control-icon-width;\n height: $carousel-control-icon-width;\n background-repeat: no-repeat;\n background-position: 50%;\n background-size: 100% 100%;\n}\n\n/* rtl:options: {\n \"autoRename\": true,\n \"stringMap\":[ {\n \"name\" : \"prev-next\",\n \"search\" : \"prev\",\n \"replace\" : \"next\"\n } ]\n} */\n.carousel-control-prev-icon {\n background-image: escape-svg($carousel-control-prev-icon-bg);\n}\n.carousel-control-next-icon {\n background-image: escape-svg($carousel-control-next-icon-bg);\n}\n\n// Optional indicator pips/controls\n//\n// Add a container (such as a list) with the following class and add an item (ideally a focusable control,\n// like a button) with data-bs-target for each slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 2;\n display: flex;\n justify-content: center;\n padding: 0;\n // Use the .carousel-control's width as margin so we don't overlay those\n margin-right: $carousel-control-width;\n margin-bottom: 1rem;\n margin-left: $carousel-control-width;\n list-style: none;\n\n [data-bs-target] {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: $carousel-indicator-width;\n height: $carousel-indicator-height;\n padding: 0;\n margin-right: $carousel-indicator-spacer;\n margin-left: $carousel-indicator-spacer;\n text-indent: -999px;\n cursor: pointer;\n background-color: $carousel-indicator-active-bg;\n background-clip: padding-box;\n border: 0;\n // Use transparent borders to increase the hit area by 10px on top and bottom.\n border-top: $carousel-indicator-hit-area-height solid transparent;\n border-bottom: $carousel-indicator-hit-area-height solid transparent;\n opacity: $carousel-indicator-opacity;\n @include transition($carousel-indicator-transition);\n }\n\n .active {\n opacity: $carousel-indicator-active-opacity;\n }\n}\n\n\n// Optional captions\n//\n//\n\n.carousel-caption {\n position: absolute;\n right: (100% - $carousel-caption-width) * .5;\n bottom: $carousel-caption-spacer;\n left: (100% - $carousel-caption-width) * .5;\n padding-top: $carousel-caption-padding-y;\n padding-bottom: $carousel-caption-padding-y;\n color: $carousel-caption-color;\n text-align: center;\n}\n\n// Dark mode carousel\n\n@mixin carousel-dark() {\n .carousel-control-prev-icon,\n .carousel-control-next-icon {\n filter: $carousel-dark-control-icon-filter;\n }\n\n .carousel-indicators [data-bs-target] {\n background-color: $carousel-dark-indicator-active-bg;\n }\n\n .carousel-caption {\n color: $carousel-dark-caption-color;\n }\n}\n\n.carousel-dark {\n @include carousel-dark();\n}\n\n@if $enable-dark-mode {\n @include color-mode(dark) {\n .carousel {\n @include carousel-dark();\n }\n }\n}\n","// scss-docs-start clearfix\n@mixin clearfix() {\n &::after {\n display: block;\n clear: both;\n content: \"\";\n }\n}\n// scss-docs-end clearfix\n","//\n// Rotating border\n//\n\n.spinner-grow,\n.spinner-border {\n display: inline-block;\n width: var(--#{$prefix}spinner-width);\n height: var(--#{$prefix}spinner-height);\n vertical-align: var(--#{$prefix}spinner-vertical-align);\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 50%;\n animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);\n}\n\n// scss-docs-start spinner-border-keyframes\n@keyframes spinner-border {\n to { transform: rotate(360deg) #{\"/* rtl:ignore */\"}; }\n}\n// scss-docs-end spinner-border-keyframes\n\n.spinner-border {\n // scss-docs-start spinner-border-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-border-width: #{$spinner-border-width};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-border;\n // scss-docs-end spinner-border-css-vars\n\n border: var(--#{$prefix}spinner-border-width) solid currentcolor;\n border-right-color: transparent;\n}\n\n.spinner-border-sm {\n // scss-docs-start spinner-border-sm-css-vars\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n --#{$prefix}spinner-border-width: #{$spinner-border-width-sm};\n // scss-docs-end spinner-border-sm-css-vars\n}\n\n//\n// Growing circle\n//\n\n// scss-docs-start spinner-grow-keyframes\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n transform: none;\n }\n}\n// scss-docs-end spinner-grow-keyframes\n\n.spinner-grow {\n // scss-docs-start spinner-grow-css-vars\n --#{$prefix}spinner-width: #{$spinner-width};\n --#{$prefix}spinner-height: #{$spinner-height};\n --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};\n --#{$prefix}spinner-animation-name: spinner-grow;\n // scss-docs-end spinner-grow-css-vars\n\n background-color: currentcolor;\n opacity: 0;\n}\n\n.spinner-grow-sm {\n --#{$prefix}spinner-width: #{$spinner-width-sm};\n --#{$prefix}spinner-height: #{$spinner-height-sm};\n}\n\n@if $enable-reduced-motion {\n @media (prefers-reduced-motion: reduce) {\n .spinner-border,\n .spinner-grow {\n --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};\n }\n }\n}\n","// stylelint-disable function-disallowed-list\n\n%offcanvas-css-vars {\n // scss-docs-start offcanvas-css-vars\n --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};\n --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};\n --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};\n --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};\n --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};\n --#{$prefix}offcanvas-color: #{$offcanvas-color};\n --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};\n --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};\n --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};\n --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};\n --#{$prefix}offcanvas-transition: #{transform $offcanvas-transition-duration ease-in-out};\n --#{$prefix}offcanvas-title-line-height: #{$offcanvas-title-line-height};\n // scss-docs-end offcanvas-css-vars\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @extend %offcanvas-css-vars;\n }\n}\n\n@each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n .offcanvas#{$infix} {\n @include media-breakpoint-down($next) {\n position: fixed;\n bottom: 0;\n z-index: var(--#{$prefix}offcanvas-zindex);\n display: flex;\n flex-direction: column;\n max-width: 100%;\n color: var(--#{$prefix}offcanvas-color);\n visibility: hidden;\n background-color: var(--#{$prefix}offcanvas-bg);\n background-clip: padding-box;\n outline: 0;\n @include box-shadow(var(--#{$prefix}offcanvas-box-shadow));\n @include transition(var(--#{$prefix}offcanvas-transition));\n\n &.offcanvas-start {\n top: 0;\n left: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(-100%);\n }\n\n &.offcanvas-end {\n top: 0;\n right: 0;\n width: var(--#{$prefix}offcanvas-width);\n border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateX(100%);\n }\n\n &.offcanvas-top {\n top: 0;\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(-100%);\n }\n\n &.offcanvas-bottom {\n right: 0;\n left: 0;\n height: var(--#{$prefix}offcanvas-height);\n max-height: 100%;\n border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color);\n transform: translateY(100%);\n }\n\n &.showing,\n &.show:not(.hiding) {\n transform: none;\n }\n\n &.showing,\n &.hiding,\n &.show {\n visibility: visible;\n }\n }\n\n @if not ($infix == \"\") {\n @include media-breakpoint-up($next) {\n --#{$prefix}offcanvas-height: auto;\n --#{$prefix}offcanvas-border-width: 0;\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n\n .offcanvas-header {\n display: none;\n }\n\n .offcanvas-body {\n display: flex;\n flex-grow: 0;\n padding: 0;\n overflow-y: visible;\n // Reset `background-color` in case `.bg-*` classes are used in offcanvas\n background-color: transparent !important; // stylelint-disable-line declaration-no-important\n }\n }\n }\n }\n}\n\n.offcanvas-backdrop {\n @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity);\n}\n\n.offcanvas-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n\n .btn-close {\n padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5);\n margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x));\n margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y));\n }\n}\n\n.offcanvas-title {\n margin-bottom: 0;\n line-height: var(--#{$prefix}offcanvas-title-line-height);\n}\n\n.offcanvas-body {\n flex-grow: 1;\n padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x);\n overflow-y: auto;\n}\n",".placeholder {\n display: inline-block;\n min-height: 1em;\n vertical-align: middle;\n cursor: wait;\n background-color: currentcolor;\n opacity: $placeholder-opacity-max;\n\n &.btn::before {\n display: inline-block;\n content: \"\";\n }\n}\n\n// Sizing\n.placeholder-xs {\n min-height: .6em;\n}\n\n.placeholder-sm {\n min-height: .8em;\n}\n\n.placeholder-lg {\n min-height: 1.2em;\n}\n\n// Animation\n.placeholder-glow {\n .placeholder {\n animation: placeholder-glow 2s ease-in-out infinite;\n }\n}\n\n@keyframes placeholder-glow {\n 50% {\n opacity: $placeholder-opacity-min;\n }\n}\n\n.placeholder-wave {\n mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%);\n mask-size: 200% 100%;\n animation: placeholder-wave 2s linear infinite;\n}\n\n@keyframes placeholder-wave {\n 100% {\n mask-position: -200% 0%;\n }\n}\n","// stylelint-disable function-name-case\n\n// All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251\n@each $color, $value in $theme-colors {\n $color-rgb: to-rgb($value);\n .text-bg-#{$color} {\n color: color-contrast($value) if($enable-important-utilities, !important, null);\n background-color: RGBA($color-rgb, var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null);\n }\n}\n","@each $color, $value in $theme-colors {\n .link-#{$color} {\n color: $value if($enable-important-utilities, !important, null);\n\n @if $link-shade-percentage != 0 {\n &:hover,\n &:focus {\n color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) if($enable-important-utilities, !important, null);\n }\n }\n }\n}\n","// Credit: Nicolas Gallagher and SUIT CSS.\n\n.ratio {\n position: relative;\n width: 100%;\n\n &::before {\n display: block;\n padding-top: var(--#{$prefix}aspect-ratio);\n content: \"\";\n }\n\n > * {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n}\n\n@each $key, $ratio in $aspect-ratios {\n .ratio-#{$key} {\n --#{$prefix}aspect-ratio: #{$ratio};\n }\n}\n","// Shorthand\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $zindex-fixed;\n}\n\n// Responsive sticky top and bottom\n@each $breakpoint in map-keys($grid-breakpoints) {\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n .sticky#{$infix}-top {\n position: sticky;\n top: 0;\n z-index: $zindex-sticky;\n }\n\n .sticky#{$infix}-bottom {\n position: sticky;\n bottom: 0;\n z-index: $zindex-sticky;\n }\n }\n}\n","// scss-docs-start stacks\n.hstack {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n}\n\n.vstack {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n align-self: stretch;\n}\n// scss-docs-end stacks\n","//\n// Visually hidden\n//\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n @include visually-hidden();\n}\n","// stylelint-disable declaration-no-important\n\n// Hide content visually while keeping it accessible to assistive technologies\n//\n// See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/\n// See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/\n\n@mixin visually-hidden() {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n\n// Use to only display content when it's focused, or one of its child elements is focused\n// (i.e. when focus is within the element/container that the class was applied to)\n//\n// Useful for \"Skip to main content\" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n\n@mixin visually-hidden-focusable() {\n &:not(:focus):not(:focus-within) {\n @include visually-hidden();\n }\n}\n","//\n// Stretched link\n//\n\n.stretched-link {\n &::#{$stretched-link-pseudo-element} {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: $stretched-link-z-index;\n content: \"\";\n }\n}\n","//\n// Text truncation\n//\n\n.text-truncate {\n @include text-truncate();\n}\n","// Text truncate\n// Requires inline-block or block for proper styling\n\n@mixin text-truncate() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n",".vr {\n display: inline-block;\n align-self: stretch;\n width: 1px;\n min-height: 1em;\n background-color: currentcolor;\n opacity: $hr-opacity;\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js
index 47e85e41b..4274d968c 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js
@@ -1,5 +1,5 @@
/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -11,193 +11,146 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/index.js
+ * Bootstrap (v5.3.0-alpha1): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
const MAX_UID = 1000000;
const MILLISECONDS_MULTIPLIER = 1000;
- const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)
+ const TRANSITION_END = 'transitionend';
+ /**
+ * Properly escape IDs selectors to handle weird IDs
+ * @param {string} selector
+ * @returns {string}
+ */
+ const parseSelector = selector => {
+ if (selector && window.CSS && window.CSS.escape) {
+ // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
+ selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
+ }
+ return selector;
+ };
+
+ // Shout-out Angus Croll (https://goo.gl/pxwQGp)
const toType = object => {
if (object === null || object === undefined) {
return `${object}`;
}
-
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
};
+
/**
* Public Util API
*/
-
const getUID = prefix => {
do {
prefix += Math.floor(Math.random() * MAX_UID);
} while (document.getElementById(prefix));
-
return prefix;
};
-
- const getSelector = element => {
- let selector = element.getAttribute('data-bs-target');
-
- if (!selector || selector === '#') {
- let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
- // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
- // `document.querySelector` will rightfully complain it is invalid.
- // See https://github.com/twbs/bootstrap/issues/32273
-
- if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
- return null;
- } // Just in case some CMS puts out a full URL with the anchor appended
-
-
- if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
- hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
- }
-
- selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
- }
-
- return selector;
- };
-
- const getSelectorFromElement = element => {
- const selector = getSelector(element);
-
- if (selector) {
- return document.querySelector(selector) ? selector : null;
- }
-
- return null;
- };
-
- const getElementFromSelector = element => {
- const selector = getSelector(element);
- return selector ? document.querySelector(selector) : null;
- };
-
const getTransitionDurationFromElement = element => {
if (!element) {
return 0;
- } // Get transition-duration of the element
-
+ }
+ // Get transition-duration of the element
let {
transitionDuration,
transitionDelay
} = window.getComputedStyle(element);
const floatTransitionDuration = Number.parseFloat(transitionDuration);
- const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
+ const floatTransitionDelay = Number.parseFloat(transitionDelay);
+ // Return 0 if element or transition duration is not found
if (!floatTransitionDuration && !floatTransitionDelay) {
return 0;
- } // If multiple durations are defined, take the first
-
+ }
+ // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
transitionDelay = transitionDelay.split(',')[0];
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
};
-
const triggerTransitionEnd = element => {
element.dispatchEvent(new Event(TRANSITION_END));
};
-
const isElement$1 = object => {
if (!object || typeof object !== 'object') {
return false;
}
-
if (typeof object.jquery !== 'undefined') {
object = object[0];
}
-
return typeof object.nodeType !== 'undefined';
};
-
const getElement = object => {
// it's a jQuery object or a node element
if (isElement$1(object)) {
return object.jquery ? object[0] : object;
}
-
if (typeof object === 'string' && object.length > 0) {
- return document.querySelector(object);
+ return document.querySelector(parseSelector(object));
}
-
return null;
};
-
const isVisible = element => {
if (!isElement$1(element) || element.getClientRects().length === 0) {
return false;
}
-
- const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed
-
+ const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
+ // Handle `details` element as its content may falsie appear visible when it is closed
const closedDetails = element.closest('details:not([open])');
-
if (!closedDetails) {
return elementIsVisible;
}
-
if (closedDetails !== element) {
const summary = element.closest('summary');
-
if (summary && summary.parentNode !== closedDetails) {
return false;
}
-
if (summary === null) {
return false;
}
}
-
return elementIsVisible;
};
-
const isDisabled = element => {
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
return true;
}
-
if (element.classList.contains('disabled')) {
return true;
}
-
if (typeof element.disabled !== 'undefined') {
return element.disabled;
}
-
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
};
-
const findShadowRoot = element => {
if (!document.documentElement.attachShadow) {
return null;
- } // Can find the shadow root otherwise it'll return the document
-
+ }
+ // Can find the shadow root otherwise it'll return the document
if (typeof element.getRootNode === 'function') {
const root = element.getRootNode();
return root instanceof ShadowRoot ? root : null;
}
-
if (element instanceof ShadowRoot) {
return element;
- } // when we don't find a shadow root
-
+ }
+ // when we don't find a shadow root
if (!element.parentNode) {
return null;
}
-
return findShadowRoot(element.parentNode);
};
-
const noop = () => {};
+
/**
* Trick to restart an element's animation
*
@@ -206,8 +159,6 @@
*
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
*/
-
-
const reflow = element => {
element.offsetHeight; // eslint-disable-line no-unused-expressions
};
@@ -216,12 +167,9 @@
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return window.jQuery;
}
-
return null;
};
-
const DOMContentLoadedCallbacks = [];
-
const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') {
// add listener on the first call when the document is in loading state
@@ -232,26 +180,21 @@
}
});
}
-
DOMContentLoadedCallbacks.push(callback);
} else {
callback();
}
};
-
const isRTL = () => document.documentElement.dir === 'rtl';
-
const defineJQueryPlugin = plugin => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
-
if ($) {
const name = plugin.NAME;
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
-
$.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
@@ -259,35 +202,27 @@
}
});
};
-
- const execute = callback => {
- if (typeof callback === 'function') {
- callback();
- }
+ const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+ return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
};
-
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
if (!waitForTransition) {
execute(callback);
return;
}
-
const durationPadding = 5;
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
let called = false;
-
const handler = ({
target
}) => {
if (target !== transitionElement) {
return;
}
-
called = true;
transitionElement.removeEventListener(TRANSITION_END, handler);
execute(callback);
};
-
transitionElement.addEventListener(TRANSITION_END, handler);
setTimeout(() => {
if (!called) {
@@ -295,6 +230,7 @@
}
}, emulatedDuration);
};
+
/**
* Return the previous/next element of a list.
*
@@ -304,32 +240,29 @@
* @param isCycleAllowed
* @return {Element|elem} The proper element
*/
-
-
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
const listLength = list.length;
- let index = list.indexOf(activeElement); // if the element does not exist in the list return an element
- // depending on the direction and if cycle is allowed
+ let index = list.indexOf(activeElement);
+ // if the element does not exist in the list return an element
+ // depending on the direction and if cycle is allowed
if (index === -1) {
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
}
-
index += shouldGetNext ? 1 : -1;
-
if (isCycleAllowed) {
index = (index + listLength) % listLength;
}
-
return list[Math.max(0, Math.min(index, listLength - 1))];
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/event-handler.js
+ * Bootstrap (v5.3.0-alpha1): dom/event-handler.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -338,13 +271,13 @@
const stripNameRegex = /\..*/;
const stripUidRegex = /::\d+$/;
const eventRegistry = {}; // Events storage
-
let uidEvent = 1;
const customEvents = {
mouseenter: 'mouseover',
mouseleave: 'mouseout'
};
const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
+
/**
* Private methods
*/
@@ -352,32 +285,26 @@
function makeEventUid(element, uid) {
return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
}
-
function getElementEvents(element) {
const uid = makeEventUid(element);
element.uidEvent = uid;
eventRegistry[uid] = eventRegistry[uid] || {};
return eventRegistry[uid];
}
-
function bootstrapHandler(element, fn) {
return function handler(event) {
hydrateObj(event, {
delegateTarget: element
});
-
if (handler.oneOff) {
EventHandler.off(element, event.type, fn);
}
-
return fn.apply(element, [event]);
};
}
-
function bootstrapDelegationHandler(element, selector, fn) {
return function handler(event) {
const domElements = element.querySelectorAll(selector);
-
for (let {
target
} = event; target && target !== this; target = target.parentNode) {
@@ -385,46 +312,38 @@
if (domElement !== target) {
continue;
}
-
hydrateObj(event, {
delegateTarget: target
});
-
if (handler.oneOff) {
EventHandler.off(element, event.type, selector, fn);
}
-
return fn.apply(target, [event]);
}
}
};
}
-
function findHandler(events, callable, delegationSelector = null) {
return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
}
-
function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
- const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check
-
+ const isDelegated = typeof handler === 'string';
+ // todo: tooltip passes `false` instead of selector, so we need to check
const callable = isDelegated ? delegationFunction : handler || delegationFunction;
let typeEvent = getTypeEvent(originalTypeEvent);
-
if (!nativeEvents.has(typeEvent)) {
typeEvent = originalTypeEvent;
}
-
return [isDelegated, callable, typeEvent];
}
-
function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
+ let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
- let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
+ // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
// this prevents the handler from being dispatched the same way as mouseover or mouseout does
-
if (originalTypeEvent in customEvents) {
const wrapFunction = fn => {
return function (event) {
@@ -433,19 +352,15 @@
}
};
};
-
callable = wrapFunction(callable);
}
-
const events = getElementEvents(element);
const handlers = events[typeEvent] || (events[typeEvent] = {});
const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
-
if (previousFunction) {
previousFunction.oneOff = previousFunction.oneOff && oneOff;
return;
}
-
const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
fn.delegationSelector = isDelegated ? handler : null;
@@ -455,86 +370,67 @@
handlers[uid] = fn;
element.addEventListener(typeEvent, fn, isDelegated);
}
-
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
const fn = findHandler(events[typeEvent], handler, delegationSelector);
-
if (!fn) {
return;
}
-
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
delete events[typeEvent][fn.uidEvent];
}
-
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
const storeElementEvent = events[typeEvent] || {};
-
- for (const handlerKey of Object.keys(storeElementEvent)) {
+ for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
if (handlerKey.includes(namespace)) {
- const event = storeElementEvent[handlerKey];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
}
}
}
-
function getTypeEvent(event) {
// allow to get the native events from namespaced events ('click.bs.button' --> 'click')
event = event.replace(stripNameRegex, '');
return customEvents[event] || event;
}
-
const EventHandler = {
on(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, false);
},
-
one(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, true);
},
-
off(element, originalTypeEvent, handler, delegationFunction) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
-
const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
const inNamespace = typeEvent !== originalTypeEvent;
const events = getElementEvents(element);
const storeElementEvent = events[typeEvent] || {};
const isNamespace = originalTypeEvent.startsWith('.');
-
if (typeof callable !== 'undefined') {
// Simplest case: handler is passed, remove that listener ONLY.
if (!Object.keys(storeElementEvent).length) {
return;
}
-
removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
return;
}
-
if (isNamespace) {
for (const elementEvent of Object.keys(events)) {
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
}
}
-
- for (const keyHandlers of Object.keys(storeElementEvent)) {
+ for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
const handlerKey = keyHandlers.replace(stripUidRegex, '');
-
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
- const event = storeElementEvent[keyHandlers];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
}
}
},
-
trigger(element, event, args) {
if (typeof event !== 'string' || !element) {
return null;
}
-
const $ = getjQuery();
const typeEvent = getTypeEvent(event);
const inNamespace = event !== typeEvent;
@@ -542,7 +438,6 @@
let bubbles = true;
let nativeDispatch = true;
let defaultPrevented = false;
-
if (inNamespace && $) {
jQueryEvent = $.Event(event, args);
$(element).trigger(jQueryEvent);
@@ -550,52 +445,42 @@
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
defaultPrevented = jQueryEvent.isDefaultPrevented();
}
-
let evt = new Event(event, {
bubbles,
cancelable: true
});
evt = hydrateObj(evt, args);
-
if (defaultPrevented) {
evt.preventDefault();
}
-
if (nativeDispatch) {
element.dispatchEvent(evt);
}
-
if (evt.defaultPrevented && jQueryEvent) {
jQueryEvent.preventDefault();
}
-
return evt;
}
-
};
-
- function hydrateObj(obj, meta) {
- for (const [key, value] of Object.entries(meta || {})) {
+ function hydrateObj(obj, meta = {}) {
+ for (const [key, value] of Object.entries(meta)) {
try {
obj[key] = value;
} catch (_unused) {
Object.defineProperty(obj, key, {
configurable: true,
-
get() {
return value;
}
-
});
}
}
-
return obj;
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/data.js
+ * Bootstrap (v5.3.0-alpha1): dom/data.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -603,124 +488,108 @@
/**
* Constants
*/
+
const elementMap = new Map();
const Data = {
set(element, key, instance) {
if (!elementMap.has(element)) {
elementMap.set(element, new Map());
}
+ const instanceMap = elementMap.get(element);
- const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
+ // make it clear we only want one instance per element
// can be removed later when multiple key/instances are fine to be used
-
if (!instanceMap.has(key) && instanceMap.size !== 0) {
// eslint-disable-next-line no-console
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
return;
}
-
instanceMap.set(key, instance);
},
-
get(element, key) {
if (elementMap.has(element)) {
return elementMap.get(element).get(key) || null;
}
-
return null;
},
-
remove(element, key) {
if (!elementMap.has(element)) {
return;
}
-
const instanceMap = elementMap.get(element);
- instanceMap.delete(key); // free up element references if there are no instances left for an element
+ instanceMap.delete(key);
+ // free up element references if there are no instances left for an element
if (instanceMap.size === 0) {
elementMap.delete(element);
}
}
-
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/manipulator.js
+ * Bootstrap (v5.3.0-alpha1): dom/manipulator.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
function normalizeData(value) {
if (value === 'true') {
return true;
}
-
if (value === 'false') {
return false;
}
-
if (value === Number(value).toString()) {
return Number(value);
}
-
if (value === '' || value === 'null') {
return null;
}
-
if (typeof value !== 'string') {
return value;
}
-
try {
return JSON.parse(decodeURIComponent(value));
} catch (_unused) {
return value;
}
}
-
function normalizeDataKey(key) {
return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
}
-
const Manipulator = {
setDataAttribute(element, key, value) {
element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
},
-
removeDataAttribute(element, key) {
element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
},
-
getDataAttributes(element) {
if (!element) {
return {};
}
-
const attributes = {};
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
-
for (const key of bsKeys) {
let pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]);
}
-
return attributes;
},
-
getDataAttribute(element, key) {
return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
}
-
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/config.js
+ * Bootstrap (v5.3.0-alpha1): util/config.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Class definition
*/
@@ -730,63 +599,55 @@
static get Default() {
return {};
}
-
static get DefaultType() {
return {};
}
-
static get NAME() {
throw new Error('You have to implement the static method "NAME", for each component!');
}
-
_getConfig(config) {
config = this._mergeConfigObj(config);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
}
-
_configAfterMerge(config) {
return config;
}
-
_mergeConfigObj(config, element) {
const jsonConfig = isElement$1(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
- return { ...this.constructor.Default,
+ return {
+ ...this.constructor.Default,
...(typeof jsonConfig === 'object' ? jsonConfig : {}),
...(isElement$1(element) ? Manipulator.getDataAttributes(element) : {}),
...(typeof config === 'object' ? config : {})
};
}
-
_typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
- for (const property of Object.keys(configTypes)) {
- const expectedTypes = configTypes[property];
+ for (const [property, expectedTypes] of Object.entries(configTypes)) {
const value = config[property];
const valueType = isElement$1(value) ? 'element' : toType(value);
-
if (!new RegExp(expectedTypes).test(valueType)) {
throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
}
}
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): base-component.js
+ * Bootstrap (v5.3.0-alpha1): base-component.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
- const VERSION = '5.2.2';
+ const VERSION = '5.3.0-alpha1';
+
/**
* Class definition
*/
@@ -795,73 +656,147 @@
constructor(element, config) {
super();
element = getElement(element);
-
if (!element) {
return;
}
-
this._element = element;
this._config = this._getConfig(config);
Data.set(this._element, this.constructor.DATA_KEY, this);
- } // Public
-
+ }
+ // Public
dispose() {
Data.remove(this._element, this.constructor.DATA_KEY);
EventHandler.off(this._element, this.constructor.EVENT_KEY);
-
for (const propertyName of Object.getOwnPropertyNames(this)) {
this[propertyName] = null;
}
}
-
_queueCallback(callback, element, isAnimated = true) {
executeAfterTransition(callback, element, isAnimated);
}
-
_getConfig(config) {
config = this._mergeConfigObj(config, this._element);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
- } // Static
-
+ }
+ // Static
static getInstance(element) {
return Data.get(getElement(element), this.DATA_KEY);
}
-
static getOrCreateInstance(element, config = {}) {
return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
}
-
static get VERSION() {
return VERSION;
}
-
static get DATA_KEY() {
return `bs.${this.NAME}`;
}
-
static get EVENT_KEY() {
return `.${this.DATA_KEY}`;
}
-
static eventName(name) {
return `${name}${this.EVENT_KEY}`;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/component-functions.js
+ * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+ const getSelector = element => {
+ let selector = element.getAttribute('data-bs-target');
+ if (!selector || selector === '#') {
+ let hrefAttribute = element.getAttribute('href');
+
+ // The only valid content that could double as a selector are IDs or classes,
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
+ // `document.querySelector` will rightfully complain it is invalid.
+ // See https://github.com/twbs/bootstrap/issues/32273
+ if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
+ return null;
+ }
+
+ // Just in case some CMS puts out a full URL with the anchor appended
+ if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
+ hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
+ }
+ selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
+ }
+ return parseSelector(selector);
+ };
+ const SelectorEngine = {
+ find(selector, element = document.documentElement) {
+ return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
+ },
+ findOne(selector, element = document.documentElement) {
+ return Element.prototype.querySelector.call(element, selector);
+ },
+ children(element, selector) {
+ return [].concat(...element.children).filter(child => child.matches(selector));
+ },
+ parents(element, selector) {
+ const parents = [];
+ let ancestor = element.parentNode.closest(selector);
+ while (ancestor) {
+ parents.push(ancestor);
+ ancestor = ancestor.parentNode.closest(selector);
+ }
+ return parents;
+ },
+ prev(element, selector) {
+ let previous = element.previousElementSibling;
+ while (previous) {
+ if (previous.matches(selector)) {
+ return [previous];
+ }
+ previous = previous.previousElementSibling;
+ }
+ return [];
+ },
+ // TODO: this is now unused; remove later along with prev()
+ next(element, selector) {
+ let next = element.nextElementSibling;
+ while (next) {
+ if (next.matches(selector)) {
+ return [next];
+ }
+ next = next.nextElementSibling;
+ }
+ return [];
+ },
+ focusableChildren(element) {
+ const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
+ return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
+ },
+ getSelectorFromElement(element) {
+ const selector = getSelector(element);
+ if (selector) {
+ return SelectorEngine.findOne(selector) ? selector : null;
+ }
+ return null;
+ },
+ getElementFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.findOne(selector) : null;
+ },
+ getMultipleElementsFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.find(selector) : [];
+ }
+ };
+ /**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v5.3.0-alpha1): util/component-functions.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
const enableDismissTrigger = (component, method = 'hide') => {
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
const name = component.NAME;
@@ -869,24 +804,24 @@
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
if (isDisabled(this)) {
return;
}
+ const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
+ const instance = component.getOrCreateInstance(target);
- const target = getElementFromSelector(this) || this.closest(`.${name}`);
- const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
-
+ // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
instance[method]();
});
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): alert.js
+ * Bootstrap (v5.3.0-alpha1): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -898,6 +833,7 @@
const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
const CLASS_NAME_FADE$5 = 'fade';
const CLASS_NAME_SHOW$8 = 'show';
+
/**
* Class definition
*/
@@ -906,55 +842,47 @@
// Getters
static get NAME() {
return NAME$f;
- } // Public
-
+ }
+ // Public
close() {
const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
-
if (closeEvent.defaultPrevented) {
return;
}
-
this._element.classList.remove(CLASS_NAME_SHOW$8);
-
const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
-
this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
- } // Private
-
+ }
+ // Private
_destroyElement() {
this._element.remove();
-
EventHandler.trigger(this._element, EVENT_CLOSED);
this.dispose();
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Alert.getOrCreateInstance(this);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
});
}
-
}
+
/**
* Data API implementation
*/
-
enableDismissTrigger(Alert, 'close');
+
/**
* jQuery
*/
@@ -963,10 +891,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): button.js
+ * Bootstrap (v5.3.0-alpha1): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -978,6 +907,7 @@
const CLASS_NAME_ACTIVE$3 = 'active';
const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
+
/**
* Class definition
*/
@@ -986,37 +916,36 @@
// Getters
static get NAME() {
return NAME$e;
- } // Public
-
+ }
+ // Public
toggle() {
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Button.getOrCreateInstance(this);
-
if (config === 'toggle') {
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
event.preventDefault();
const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
const data = Button.getOrCreateInstance(button);
data.toggle();
});
+
/**
* jQuery
*/
@@ -1025,81 +954,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/selector-engine.js
+ * Bootstrap (v5.3.0-alpha1): util/swipe.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
- /**
- * Constants
- */
-
- const SelectorEngine = {
- find(selector, element = document.documentElement) {
- return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
- },
-
- findOne(selector, element = document.documentElement) {
- return Element.prototype.querySelector.call(element, selector);
- },
-
- children(element, selector) {
- return [].concat(...element.children).filter(child => child.matches(selector));
- },
-
- parents(element, selector) {
- const parents = [];
- let ancestor = element.parentNode.closest(selector);
-
- while (ancestor) {
- parents.push(ancestor);
- ancestor = ancestor.parentNode.closest(selector);
- }
-
- return parents;
- },
-
- prev(element, selector) {
- let previous = element.previousElementSibling;
-
- while (previous) {
- if (previous.matches(selector)) {
- return [previous];
- }
-
- previous = previous.previousElementSibling;
- }
-
- return [];
- },
- // TODO: this is now unused; remove later along with prev()
- next(element, selector) {
- let next = element.nextElementSibling;
-
- while (next) {
- if (next.matches(selector)) {
- return [next];
- }
-
- next = next.nextElementSibling;
- }
-
- return [];
- },
-
- focusableChildren(element) {
- const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
- return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
- }
-
- };
-
- /**
- * --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/swipe.js
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- * --------------------------------------------------------------------------
- */
/**
* Constants
*/
@@ -1125,6 +984,7 @@
leftCallback: '(function|null)',
rightCallback: '(function|null)'
};
+
/**
* Class definition
*/
@@ -1133,84 +993,67 @@
constructor(element, config) {
super();
this._element = element;
-
if (!element || !Swipe.isSupported()) {
return;
}
-
this._config = this._getConfig(config);
this._deltaX = 0;
this._supportPointerEvents = Boolean(window.PointerEvent);
-
this._initEvents();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$c;
}
-
static get DefaultType() {
return DefaultType$c;
}
-
static get NAME() {
return NAME$d;
- } // Public
-
+ }
+ // Public
dispose() {
EventHandler.off(this._element, EVENT_KEY$9);
- } // Private
-
+ }
+ // Private
_start(event) {
if (!this._supportPointerEvents) {
this._deltaX = event.touches[0].clientX;
return;
}
-
if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX;
}
}
-
_end(event) {
if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX - this._deltaX;
}
-
this._handleSwipe();
-
execute(this._config.endCallback);
}
-
_move(event) {
this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
}
-
_handleSwipe() {
const absDeltaX = Math.abs(this._deltaX);
-
if (absDeltaX <= SWIPE_THRESHOLD) {
return;
}
-
const direction = absDeltaX / this._deltaX;
this._deltaX = 0;
-
if (!direction) {
return;
}
-
execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
}
-
_initEvents() {
if (this._supportPointerEvents) {
EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
-
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
} else {
EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
@@ -1218,24 +1061,23 @@
EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
}
}
-
_eventIsPointerPenTouch(event) {
return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
- } // Static
-
+ }
+ // Static
static isSupported() {
return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): carousel.js
+ * Bootstrap (v5.3.0-alpha1): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -1295,6 +1137,7 @@
touch: 'boolean',
wrap: 'boolean'
};
+
/**
* Class definition
*/
@@ -1308,32 +1151,27 @@
this.touchTimeout = null;
this._swipeHelper = null;
this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
-
this._addEventListeners();
-
if (this._config.ride === CLASS_NAME_CAROUSEL) {
this.cycle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$b;
}
-
static get DefaultType() {
return DefaultType$b;
}
-
static get NAME() {
return NAME$c;
- } // Public
-
+ }
+ // Public
next() {
this._slide(ORDER_NEXT);
}
-
nextWhenVisible() {
// FIXME TODO use `document.visibilityState`
// Don't call next when the page isn't visible
@@ -1342,101 +1180,80 @@
this.next();
}
}
-
prev() {
this._slide(ORDER_PREV);
}
-
pause() {
if (this._isSliding) {
triggerTransitionEnd(this._element);
}
-
this._clearInterval();
}
-
cycle() {
this._clearInterval();
-
this._updateInterval();
-
this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
}
-
_maybeEnableCycle() {
if (!this._config.ride) {
return;
}
-
if (this._isSliding) {
EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
return;
}
-
this.cycle();
}
-
to(index) {
const items = this._getItems();
-
if (index > items.length - 1 || index < 0) {
return;
}
-
if (this._isSliding) {
EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
return;
}
-
const activeIndex = this._getItemIndex(this._getActive());
-
if (activeIndex === index) {
return;
}
-
const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
-
this._slide(order, items[index]);
}
-
dispose() {
if (this._swipeHelper) {
this._swipeHelper.dispose();
}
-
super.dispose();
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
config.defaultInterval = config.interval;
return config;
}
-
_addEventListeners() {
if (this._config.keyboard) {
EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));
}
-
if (this._config.pause === 'hover') {
EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
}
-
if (this._config.touch && Swipe.isSupported()) {
this._addTouchEventListeners();
}
}
-
_addTouchEventListeners() {
for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
}
-
const endCallBack = () => {
if (this._config.pause !== 'hover') {
return;
- } // If it's a touch-enabled device, mouseenter/leave are fired as
+ }
+
+ // If it's a touch-enabled device, mouseenter/leave are fired as
// part of the mouse compatibility events on first tap - the carousel
// would stop cycling until user tapped out of it;
// here, we listen for touchend, explicitly pause the carousel
@@ -1444,16 +1261,12 @@
// is NOT fired) and after a timeout (to allow for mouse compatibility
// events to fire) we explicitly restart cycling
-
this.pause();
-
if (this.touchTimeout) {
clearTimeout(this.touchTimeout);
}
-
this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
};
-
const swipeConfig = {
leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
@@ -1461,68 +1274,51 @@
};
this._swipeHelper = new Swipe(this._element, swipeConfig);
}
-
_keydown(event) {
if (/input|textarea/i.test(event.target.tagName)) {
return;
}
-
const direction = KEY_TO_DIRECTION[event.key];
-
if (direction) {
event.preventDefault();
-
this._slide(this._directionToOrder(direction));
}
}
-
_getItemIndex(element) {
return this._getItems().indexOf(element);
}
-
_setActiveIndicatorElement(index) {
if (!this._indicatorsElement) {
return;
}
-
const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
activeIndicator.removeAttribute('aria-current');
const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
-
if (newActiveIndicator) {
newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
newActiveIndicator.setAttribute('aria-current', 'true');
}
}
-
_updateInterval() {
const element = this._activeElement || this._getActive();
-
if (!element) {
return;
}
-
const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
this._config.interval = elementInterval || this._config.defaultInterval;
}
-
_slide(order, element = null) {
if (this._isSliding) {
return;
}
-
const activeElement = this._getActive();
-
const isNext = order === ORDER_NEXT;
const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
-
if (nextElement === activeElement) {
return;
}
-
const nextElementIndex = this._getItemIndex(nextElement);
-
const triggerEvent = eventName => {
return EventHandler.trigger(this._element, eventName, {
relatedTarget: nextElement,
@@ -1531,25 +1327,19 @@
to: nextElementIndex
});
};
-
const slideEvent = triggerEvent(EVENT_SLIDE);
-
if (slideEvent.defaultPrevented) {
return;
}
-
if (!activeElement || !nextElement) {
// Some weirdness is happening, so we bail
// todo: change tests that use empty divs to avoid this check
return;
}
-
const isCycling = Boolean(this._interval);
this.pause();
this._isSliding = true;
-
this._setActiveIndicatorElement(nextElementIndex);
-
this._activeElement = nextElement;
const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
@@ -1557,7 +1347,6 @@
reflow(nextElement);
activeElement.classList.add(directionalClassName);
nextElement.classList.add(directionalClassName);
-
const completeCallBack = () => {
nextElement.classList.remove(directionalClassName, orderClassName);
nextElement.classList.add(CLASS_NAME_ACTIVE$2);
@@ -1565,113 +1354,89 @@
this._isSliding = false;
triggerEvent(EVENT_SLID);
};
-
this._queueCallback(completeCallBack, activeElement, this._isAnimated());
-
if (isCycling) {
this.cycle();
}
}
-
_isAnimated() {
return this._element.classList.contains(CLASS_NAME_SLIDE);
}
-
_getActive() {
return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
}
-
_getItems() {
return SelectorEngine.find(SELECTOR_ITEM, this._element);
}
-
_clearInterval() {
if (this._interval) {
clearInterval(this._interval);
this._interval = null;
}
}
-
_directionToOrder(direction) {
if (isRTL()) {
return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
}
-
return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
}
-
_orderToDirection(order) {
if (isRTL()) {
return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
}
-
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Carousel.getOrCreateInstance(this, config);
-
if (typeof config === 'number') {
data.to(config);
return;
}
-
if (typeof config === 'string') {
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {
- const target = getElementFromSelector(this);
-
+ const target = SelectorEngine.getElementFromSelector(this);
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
return;
}
-
event.preventDefault();
const carousel = Carousel.getOrCreateInstance(target);
const slideIndex = this.getAttribute('data-bs-slide-to');
-
if (slideIndex) {
carousel.to(slideIndex);
-
carousel._maybeEnableCycle();
-
return;
}
-
if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
carousel.next();
-
carousel._maybeEnableCycle();
-
return;
}
-
carousel.prev();
-
carousel._maybeEnableCycle();
});
EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
-
for (const carousel of carousels) {
Carousel.getOrCreateInstance(carousel);
}
});
+
/**
* jQuery
*/
@@ -1680,10 +1445,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): collapse.js
+ * Bootstrap (v5.3.0-alpha1): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -1715,6 +1481,7 @@
parent: '(null|element)',
toggle: 'boolean'
};
+
/**
* Class definition
*/
@@ -1725,41 +1492,34 @@
this._isTransitioning = false;
this._triggerArray = [];
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
-
for (const elem of toggleList) {
- const selector = getSelectorFromElement(elem);
+ const selector = SelectorEngine.getSelectorFromElement(elem);
const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
-
if (selector !== null && filterElement.length) {
this._triggerArray.push(elem);
}
}
-
this._initializeChildren();
-
if (!this._config.parent) {
this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
}
-
if (this._config.toggle) {
this.toggle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$a;
}
-
static get DefaultType() {
return DefaultType$a;
}
-
static get NAME() {
return NAME$b;
- } // Public
-
+ }
+ // Public
toggle() {
if (this._isShown()) {
this.hide();
@@ -1767,201 +1527,149 @@
this.show();
}
}
-
show() {
if (this._isTransitioning || this._isShown()) {
return;
}
+ let activeChildren = [];
- let activeChildren = []; // find active children
-
+ // find active children
if (this._config.parent) {
activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
toggle: false
}));
}
-
if (activeChildren.length && activeChildren[0]._isTransitioning) {
return;
}
-
const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
-
if (startEvent.defaultPrevented) {
return;
}
-
for (const activeInstance of activeChildren) {
activeInstance.hide();
}
-
const dimension = this._getDimension();
-
this._element.classList.remove(CLASS_NAME_COLLAPSE);
-
this._element.classList.add(CLASS_NAME_COLLAPSING);
-
this._element.style[dimension] = 0;
-
this._addAriaAndCollapsedClass(this._triggerArray, true);
-
this._isTransitioning = true;
-
const complete = () => {
this._isTransitioning = false;
-
this._element.classList.remove(CLASS_NAME_COLLAPSING);
-
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
-
this._element.style[dimension] = '';
EventHandler.trigger(this._element, EVENT_SHOWN$6);
};
-
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
const scrollSize = `scroll${capitalizedDimension}`;
-
this._queueCallback(complete, this._element, true);
-
this._element.style[dimension] = `${this._element[scrollSize]}px`;
}
-
hide() {
if (this._isTransitioning || !this._isShown()) {
return;
}
-
const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
-
if (startEvent.defaultPrevented) {
return;
}
-
const dimension = this._getDimension();
-
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
reflow(this._element);
-
this._element.classList.add(CLASS_NAME_COLLAPSING);
-
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
-
for (const trigger of this._triggerArray) {
- const element = getElementFromSelector(trigger);
-
+ const element = SelectorEngine.getElementFromSelector(trigger);
if (element && !this._isShown(element)) {
this._addAriaAndCollapsedClass([trigger], false);
}
}
-
this._isTransitioning = true;
-
const complete = () => {
this._isTransitioning = false;
-
this._element.classList.remove(CLASS_NAME_COLLAPSING);
-
this._element.classList.add(CLASS_NAME_COLLAPSE);
-
EventHandler.trigger(this._element, EVENT_HIDDEN$6);
};
-
this._element.style[dimension] = '';
-
this._queueCallback(complete, this._element, true);
}
-
_isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW$7);
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values
-
config.parent = getElement(config.parent);
return config;
}
-
_getDimension() {
return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
}
-
_initializeChildren() {
if (!this._config.parent) {
return;
}
-
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
-
for (const element of children) {
- const selected = getElementFromSelector(element);
-
+ const selected = SelectorEngine.getElementFromSelector(element);
if (selected) {
this._addAriaAndCollapsedClass([element], this._isShown(selected));
}
}
}
-
_getFirstLevelChildren(selector) {
- const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth
-
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
+ // remove children if greater depth
return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
}
-
_addAriaAndCollapsedClass(triggerArray, isOpen) {
if (!triggerArray.length) {
return;
}
-
for (const element of triggerArray) {
element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
element.setAttribute('aria-expanded', isOpen);
}
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
const _config = {};
-
if (typeof config === 'string' && /show|hide/.test(config)) {
_config.toggle = false;
}
-
return this.each(function () {
const data = Collapse.getOrCreateInstance(this, _config);
-
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
event.preventDefault();
}
-
- const selector = getSelectorFromElement(this);
- const selectorElements = SelectorEngine.find(selector);
-
- for (const element of selectorElements) {
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
Collapse.getOrCreateInstance(element, {
toggle: false
}).toggle();
}
});
+
/**
* jQuery
*/
@@ -3816,10 +3524,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dropdown.js
+ * Bootstrap (v5.3.0-alpha1): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -3877,6 +3586,7 @@
popperConfig: '(null|object|function)',
reference: '(string|element|object)'
};
+
/**
* Class definition
*/
@@ -3886,143 +3596,112 @@
super(element, config);
this._popper = null;
this._parent = this._element.parentNode; // dropdown wrapper
- // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
-
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
this._inNavbar = this._detectNavbar();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$9;
}
-
static get DefaultType() {
return DefaultType$9;
}
-
static get NAME() {
return NAME$a;
- } // Public
-
+ }
+ // Public
toggle() {
return this._isShown() ? this.hide() : this.show();
}
-
show() {
if (isDisabled(this._element) || this._isShown()) {
return;
}
-
const relatedTarget = {
relatedTarget: this._element
};
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
-
if (showEvent.defaultPrevented) {
return;
}
+ this._createPopper();
- this._createPopper(); // If this is a touch-enabled device we add extra
+ // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
-
if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
for (const element of [].concat(...document.body.children)) {
EventHandler.on(element, 'mouseover', noop);
}
}
-
this._element.focus();
-
this._element.setAttribute('aria-expanded', true);
-
this._menu.classList.add(CLASS_NAME_SHOW$6);
-
this._element.classList.add(CLASS_NAME_SHOW$6);
-
EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
}
-
hide() {
if (isDisabled(this._element) || !this._isShown()) {
return;
}
-
const relatedTarget = {
relatedTarget: this._element
};
-
this._completeHide(relatedTarget);
}
-
dispose() {
if (this._popper) {
this._popper.destroy();
}
-
super.dispose();
}
-
update() {
this._inNavbar = this._detectNavbar();
-
if (this._popper) {
this._popper.update();
}
- } // Private
-
+ }
+ // Private
_completeHide(relatedTarget) {
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
-
if (hideEvent.defaultPrevented) {
return;
- } // If this is a touch-enabled device we remove the extra
- // empty mouseover listeners we added for iOS support
-
+ }
+ // If this is a touch-enabled device we remove the extra
+ // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.off(element, 'mouseover', noop);
}
}
-
if (this._popper) {
this._popper.destroy();
}
-
this._menu.classList.remove(CLASS_NAME_SHOW$6);
-
this._element.classList.remove(CLASS_NAME_SHOW$6);
-
this._element.setAttribute('aria-expanded', 'false');
-
Manipulator.removeDataAttribute(this._menu, 'popper');
EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
}
-
_getConfig(config) {
config = super._getConfig(config);
-
if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
// Popper virtual elements require a getBoundingClientRect method
throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
}
-
return config;
}
-
_createPopper() {
if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
}
-
let referenceElement = this._element;
-
if (this._config.reference === 'parent') {
referenceElement = this._parent;
} else if (isElement$1(this._config.reference)) {
@@ -4030,65 +3709,49 @@
} else if (typeof this._config.reference === 'object') {
referenceElement = this._config.reference;
}
-
const popperConfig = this._getPopperConfig();
-
this._popper = createPopper(referenceElement, this._menu, popperConfig);
}
-
_isShown() {
return this._menu.classList.contains(CLASS_NAME_SHOW$6);
}
-
_getPlacement() {
const parentDropdown = this._parent;
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
return PLACEMENT_RIGHT;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
return PLACEMENT_LEFT;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
return PLACEMENT_TOPCENTER;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
return PLACEMENT_BOTTOMCENTER;
- } // We need to trim the value because custom properties can also include spaces
-
+ }
+ // We need to trim the value because custom properties can also include spaces
const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
}
-
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
}
-
_detectNavbar() {
return this._element.closest(SELECTOR_NAVBAR) !== null;
}
-
_getOffset() {
const {
offset
} = this._config;
-
if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10));
}
-
if (typeof offset === 'function') {
return popperData => offset(popperData, this._element);
}
-
return offset;
}
-
_getPopperConfig() {
const defaultBsPopperConfig = {
placement: this._getPlacement(),
@@ -4103,121 +3766,101 @@
offset: this._getOffset()
}
}]
- }; // Disable Popper if we have a static display or Dropdown is in Navbar
+ };
+ // Disable Popper if we have a static display or Dropdown is in Navbar
if (this._inNavbar || this._config.display === 'static') {
Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove
-
defaultBsPopperConfig.modifiers = [{
name: 'applyStyles',
enabled: false
}];
}
-
- return { ...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ return {
+ ...defaultBsPopperConfig,
+ ...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
-
_selectMenuItem({
key,
target
}) {
const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));
-
if (!items.length) {
return;
- } // if target isn't included in items (e.g. when expanding the dropdown)
- // allow cycling to get the last item in case key equals ARROW_UP_KEY
-
+ }
+ // if target isn't included in items (e.g. when expanding the dropdown)
+ // allow cycling to get the last item in case key equals ARROW_UP_KEY
getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Dropdown.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
static clearMenus(event) {
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
return;
}
-
const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
-
for (const toggle of openToggles) {
const context = Dropdown.getInstance(toggle);
-
if (!context || context._config.autoClose === false) {
continue;
}
-
const composedPath = event.composedPath();
const isMenuTarget = composedPath.includes(context._menu);
-
if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
continue;
- } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
-
+ }
+ // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
continue;
}
-
const relatedTarget = {
relatedTarget: context._element
};
-
if (event.type === 'click') {
relatedTarget.clickEvent = event;
}
-
context._completeHide(relatedTarget);
}
}
-
static dataApiKeydownHandler(event) {
// If not an UP | DOWN | ESCAPE key => not a dropdown command
// If input/textarea && if key is other than ESCAPE => not a dropdown command
+
const isInput = /input|textarea/i.test(event.target.tagName);
const isEscapeEvent = event.key === ESCAPE_KEY$2;
const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
-
if (!isUpOrDownEvent && !isEscapeEvent) {
return;
}
-
if (isInput && !isEscapeEvent) {
return;
}
+ event.preventDefault();
- event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
-
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
const instance = Dropdown.getOrCreateInstance(getToggleButton);
-
if (isUpOrDownEvent) {
event.stopPropagation();
instance.show();
-
instance._selectMenuItem(event);
-
return;
}
-
if (instance._isShown()) {
// else is escape and we check if it is shown
event.stopPropagation();
@@ -4225,13 +3868,12 @@
getToggleButton.focus();
}
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
@@ -4240,6 +3882,7 @@
event.preventDefault();
Dropdown.getOrCreateInstance(this).toggle();
});
+
/**
* jQuery
*/
@@ -4248,10 +3891,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/scrollBar.js
+ * Bootstrap (v5.3.0-alpha1): util/scrollBar.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4260,6 +3904,7 @@
const SELECTOR_STICKY_CONTENT = '.sticky-top';
const PROPERTY_PADDING = 'padding-right';
const PROPERTY_MARGIN = 'margin-right';
+
/**
* Class definition
*/
@@ -4267,110 +3912,87 @@
class ScrollBarHelper {
constructor() {
this._element = document.body;
- } // Public
-
+ }
+ // Public
getWidth() {
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
const documentWidth = document.documentElement.clientWidth;
return Math.abs(window.innerWidth - documentWidth);
}
-
hide() {
const width = this.getWidth();
-
- this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
-
-
- this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
-
-
+ this._disableOverFlow();
+ // give padding to element to balance the hidden scrollbar width
+ this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+ // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
-
this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
}
-
reset() {
this._resetElementAttributes(this._element, 'overflow');
-
this._resetElementAttributes(this._element, PROPERTY_PADDING);
-
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
-
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
}
-
isOverflowing() {
return this.getWidth() > 0;
- } // Private
-
+ }
+ // Private
_disableOverFlow() {
this._saveInitialAttribute(this._element, 'overflow');
-
this._element.style.overflow = 'hidden';
}
-
_setElementAttributes(selector, styleProperty, callback) {
const scrollbarWidth = this.getWidth();
-
const manipulationCallBack = element => {
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
return;
}
-
this._saveInitialAttribute(element, styleProperty);
-
const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
};
-
this._applyManipulationCallback(selector, manipulationCallBack);
}
-
_saveInitialAttribute(element, styleProperty) {
const actualValue = element.style.getPropertyValue(styleProperty);
-
if (actualValue) {
Manipulator.setDataAttribute(element, styleProperty, actualValue);
}
}
-
_resetElementAttributes(selector, styleProperty) {
const manipulationCallBack = element => {
- const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero
-
+ const value = Manipulator.getDataAttribute(element, styleProperty);
+ // We only want to remove the property if the value is `null`; the value can also be zero
if (value === null) {
element.style.removeProperty(styleProperty);
return;
}
-
Manipulator.removeDataAttribute(element, styleProperty);
element.style.setProperty(styleProperty, value);
};
-
this._applyManipulationCallback(selector, manipulationCallBack);
}
-
_applyManipulationCallback(selector, callBack) {
if (isElement$1(selector)) {
callBack(selector);
return;
}
-
for (const sel of SelectorEngine.find(selector, this._element)) {
callBack(sel);
}
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/backdrop.js
+ * Bootstrap (v5.3.0-alpha1): util/backdrop.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4386,8 +4008,8 @@
isVisible: true,
// if false, we use the backdrop helper without adding any element to the dom
rootElement: 'body' // give the choice to place backdrop under different elements
-
};
+
const DefaultType$8 = {
className: 'string',
clickCallback: '(function|null)',
@@ -4395,6 +4017,7 @@
isVisible: 'boolean',
rootElement: '(element|string)'
};
+
/**
* Class definition
*/
@@ -4405,118 +4028,95 @@
this._config = this._getConfig(config);
this._isAppended = false;
this._element = null;
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$8;
}
-
static get DefaultType() {
return DefaultType$8;
}
-
static get NAME() {
return NAME$9;
- } // Public
-
+ }
+ // Public
show(callback) {
if (!this._config.isVisible) {
execute(callback);
return;
}
-
this._append();
-
const element = this._getElement();
-
if (this._config.isAnimated) {
reflow(element);
}
-
element.classList.add(CLASS_NAME_SHOW$5);
-
this._emulateAnimation(() => {
execute(callback);
});
}
-
hide(callback) {
if (!this._config.isVisible) {
execute(callback);
return;
}
-
this._getElement().classList.remove(CLASS_NAME_SHOW$5);
-
this._emulateAnimation(() => {
this.dispose();
execute(callback);
});
}
-
dispose() {
if (!this._isAppended) {
return;
}
-
EventHandler.off(this._element, EVENT_MOUSEDOWN);
-
this._element.remove();
-
this._isAppended = false;
- } // Private
-
+ }
+ // Private
_getElement() {
if (!this._element) {
const backdrop = document.createElement('div');
backdrop.className = this._config.className;
-
if (this._config.isAnimated) {
backdrop.classList.add(CLASS_NAME_FADE$4);
}
-
this._element = backdrop;
}
-
return this._element;
}
-
_configAfterMerge(config) {
// use getElement() with the default "body" to get a fresh Element on each instantiation
config.rootElement = getElement(config.rootElement);
return config;
}
-
_append() {
if (this._isAppended) {
return;
}
-
const element = this._getElement();
-
this._config.rootElement.append(element);
-
EventHandler.on(element, EVENT_MOUSEDOWN, () => {
execute(this._config.clickCallback);
});
this._isAppended = true;
}
-
_emulateAnimation(callback) {
executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/focustrap.js
+ * Bootstrap (v5.3.0-alpha1): util/focustrap.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4532,12 +4132,13 @@
const Default$7 = {
autofocus: true,
trapElement: null // The element to trap focus inside of
-
};
+
const DefaultType$7 = {
autofocus: 'boolean',
trapElement: 'element'
};
+
/**
* Class definition
*/
@@ -4548,59 +4149,49 @@
this._config = this._getConfig(config);
this._isActive = false;
this._lastTabNavDirection = null;
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$7;
}
-
static get DefaultType() {
return DefaultType$7;
}
-
static get NAME() {
return NAME$8;
- } // Public
-
+ }
+ // Public
activate() {
if (this._isActive) {
return;
}
-
if (this._config.autofocus) {
this._config.trapElement.focus();
}
-
EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop
-
EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
this._isActive = true;
}
-
deactivate() {
if (!this._isActive) {
return;
}
-
this._isActive = false;
EventHandler.off(document, EVENT_KEY$5);
- } // Private
-
+ }
+ // Private
_handleFocusin(event) {
const {
trapElement
} = this._config;
-
if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
return;
}
-
const elements = SelectorEngine.focusableChildren(trapElement);
-
if (elements.length === 0) {
trapElement.focus();
} else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
@@ -4609,23 +4200,21 @@
elements[0].focus();
}
}
-
_handleKeydown(event) {
if (event.key !== TAB_KEY) {
return;
}
-
this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): modal.js
+ * Bootstrap (v5.3.0-alpha1): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4663,6 +4252,7 @@
focus: 'boolean',
keyboard: 'boolean'
};
+
/**
* Class definition
*/
@@ -4676,91 +4266,68 @@
this._isShown = false;
this._isTransitioning = false;
this._scrollBar = new ScrollBarHelper();
-
this._addEventListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$6;
}
-
static get DefaultType() {
return DefaultType$6;
}
-
static get NAME() {
return NAME$7;
- } // Public
-
+ }
+ // Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
}
-
show(relatedTarget) {
if (this._isShown || this._isTransitioning) {
return;
}
-
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
relatedTarget
});
-
if (showEvent.defaultPrevented) {
return;
}
-
this._isShown = true;
this._isTransitioning = true;
-
this._scrollBar.hide();
-
document.body.classList.add(CLASS_NAME_OPEN);
-
this._adjustDialog();
-
this._backdrop.show(() => this._showElement(relatedTarget));
}
-
hide() {
if (!this._isShown || this._isTransitioning) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
-
if (hideEvent.defaultPrevented) {
return;
}
-
this._isShown = false;
this._isTransitioning = true;
-
this._focustrap.deactivate();
-
this._element.classList.remove(CLASS_NAME_SHOW$4);
-
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
}
-
dispose() {
for (const htmlElement of [window, this._dialog]) {
EventHandler.off(htmlElement, EVENT_KEY$4);
}
-
this._backdrop.dispose();
-
this._focustrap.deactivate();
-
super.dispose();
}
-
handleUpdate() {
this._adjustDialog();
- } // Private
-
+ }
+ // Private
_initializeBackDrop() {
return new Backdrop({
isVisible: Boolean(this._config.backdrop),
@@ -4768,64 +4335,48 @@
isAnimated: this._isAnimated()
});
}
-
_initializeFocusTrap() {
return new FocusTrap({
trapElement: this._element
});
}
-
_showElement(relatedTarget) {
// try to append dynamic modal
if (!document.body.contains(this._element)) {
document.body.append(this._element);
}
-
this._element.style.display = 'block';
-
this._element.removeAttribute('aria-hidden');
-
this._element.setAttribute('aria-modal', true);
-
this._element.setAttribute('role', 'dialog');
-
this._element.scrollTop = 0;
const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
-
if (modalBody) {
modalBody.scrollTop = 0;
}
-
reflow(this._element);
-
this._element.classList.add(CLASS_NAME_SHOW$4);
-
const transitionComplete = () => {
if (this._config.focus) {
this._focustrap.activate();
}
-
this._isTransitioning = false;
EventHandler.trigger(this._element, EVENT_SHOWN$4, {
relatedTarget
});
};
-
this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
}
-
_addEventListeners() {
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
if (event.key !== ESCAPE_KEY$1) {
return;
}
-
if (this._config.keyboard) {
event.preventDefault();
this.hide();
return;
}
-
this._triggerBackdropTransition();
});
EventHandler.on(window, EVENT_RESIZE$1, () => {
@@ -4839,157 +4390,124 @@
if (this._element !== event.target || this._element !== event2.target) {
return;
}
-
if (this._config.backdrop === 'static') {
this._triggerBackdropTransition();
-
return;
}
-
if (this._config.backdrop) {
this.hide();
}
});
});
}
-
_hideModal() {
this._element.style.display = 'none';
-
this._element.setAttribute('aria-hidden', true);
-
this._element.removeAttribute('aria-modal');
-
this._element.removeAttribute('role');
-
this._isTransitioning = false;
-
this._backdrop.hide(() => {
document.body.classList.remove(CLASS_NAME_OPEN);
-
this._resetAdjustments();
-
this._scrollBar.reset();
-
EventHandler.trigger(this._element, EVENT_HIDDEN$4);
});
}
-
_isAnimated() {
return this._element.classList.contains(CLASS_NAME_FADE$3);
}
-
_triggerBackdropTransition() {
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
-
if (hideEvent.defaultPrevented) {
return;
}
-
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
- const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed
-
+ const initialOverflowY = this._element.style.overflowY;
+ // return if the following background transition hasn't yet completed
if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
return;
}
-
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden';
}
-
this._element.classList.add(CLASS_NAME_STATIC);
-
this._queueCallback(() => {
this._element.classList.remove(CLASS_NAME_STATIC);
-
this._queueCallback(() => {
this._element.style.overflowY = initialOverflowY;
}, this._dialog);
}, this._dialog);
-
this._element.focus();
}
+
/**
* The following methods are used to handle overflowing modals
*/
-
_adjustDialog() {
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
-
const scrollbarWidth = this._scrollBar.getWidth();
-
const isBodyOverflowing = scrollbarWidth > 0;
-
if (isBodyOverflowing && !isModalOverflowing) {
const property = isRTL() ? 'paddingLeft' : 'paddingRight';
this._element.style[property] = `${scrollbarWidth}px`;
}
-
if (!isBodyOverflowing && isModalOverflowing) {
const property = isRTL() ? 'paddingRight' : 'paddingLeft';
this._element.style[property] = `${scrollbarWidth}px`;
}
}
-
_resetAdjustments() {
this._element.style.paddingLeft = '';
this._element.style.paddingRight = '';
- } // Static
-
+ }
+ // Static
static jQueryInterface(config, relatedTarget) {
return this.each(function () {
const data = Modal.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](relatedTarget);
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
- const target = getElementFromSelector(this);
-
+ const target = SelectorEngine.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
EventHandler.one(target, EVENT_SHOW$4, showEvent => {
if (showEvent.defaultPrevented) {
// only register focus restorer if modal will actually get shown
return;
}
-
EventHandler.one(target, EVENT_HIDDEN$4, () => {
if (isVisible(this)) {
this.focus();
}
});
- }); // avoid conflict when clicking modal toggler while another one is open
+ });
+ // avoid conflict when clicking modal toggler while another one is open
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
-
if (alreadyOpen) {
Modal.getInstance(alreadyOpen).hide();
}
-
const data = Modal.getOrCreateInstance(target);
data.toggle(this);
});
enableDismissTrigger(Modal);
+
/**
* jQuery
*/
@@ -4998,10 +4516,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): offcanvas.js
+ * Bootstrap (v5.3.0-alpha1): offcanvas.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -5036,6 +4555,7 @@
keyboard: 'boolean',
scroll: 'boolean'
};
+
/**
* Class definition
*/
@@ -5046,130 +4566,95 @@
this._isShown = false;
this._backdrop = this._initializeBackDrop();
this._focustrap = this._initializeFocusTrap();
-
this._addEventListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$5;
}
-
static get DefaultType() {
return DefaultType$5;
}
-
static get NAME() {
return NAME$6;
- } // Public
-
+ }
+ // Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
}
-
show(relatedTarget) {
if (this._isShown) {
return;
}
-
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
relatedTarget
});
-
if (showEvent.defaultPrevented) {
return;
}
-
this._isShown = true;
-
this._backdrop.show();
-
if (!this._config.scroll) {
new ScrollBarHelper().hide();
}
-
this._element.setAttribute('aria-modal', true);
-
this._element.setAttribute('role', 'dialog');
-
this._element.classList.add(CLASS_NAME_SHOWING$1);
-
const completeCallBack = () => {
if (!this._config.scroll || this._config.backdrop) {
this._focustrap.activate();
}
-
this._element.classList.add(CLASS_NAME_SHOW$3);
-
this._element.classList.remove(CLASS_NAME_SHOWING$1);
-
EventHandler.trigger(this._element, EVENT_SHOWN$3, {
relatedTarget
});
};
-
this._queueCallback(completeCallBack, this._element, true);
}
-
hide() {
if (!this._isShown) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
-
if (hideEvent.defaultPrevented) {
return;
}
-
this._focustrap.deactivate();
-
this._element.blur();
-
this._isShown = false;
-
this._element.classList.add(CLASS_NAME_HIDING);
-
this._backdrop.hide();
-
const completeCallback = () => {
this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
-
this._element.removeAttribute('aria-modal');
-
this._element.removeAttribute('role');
-
if (!this._config.scroll) {
new ScrollBarHelper().reset();
}
-
EventHandler.trigger(this._element, EVENT_HIDDEN$3);
};
-
this._queueCallback(completeCallback, this._element, true);
}
-
dispose() {
this._backdrop.dispose();
-
this._focustrap.deactivate();
-
super.dispose();
- } // Private
-
+ }
+ // Private
_initializeBackDrop() {
const clickCallback = () => {
if (this._config.backdrop === 'static') {
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return;
}
-
this.hide();
- }; // 'static' option will be translated to true, and booleans will keep their value
-
+ };
+ // 'static' option will be translated to true, and booleans will keep their value
const isVisible = Boolean(this._config.backdrop);
return new Backdrop({
className: CLASS_NAME_BACKDROP,
@@ -5179,75 +4664,63 @@
clickCallback: isVisible ? clickCallback : null
});
}
-
_initializeFocusTrap() {
return new FocusTrap({
trapElement: this._element
});
}
-
_addEventListeners() {
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
if (event.key !== ESCAPE_KEY) {
return;
}
-
if (!this._config.keyboard) {
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return;
}
-
this.hide();
});
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Offcanvas.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
- const target = getElementFromSelector(this);
-
+ const target = SelectorEngine.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
if (isDisabled(this)) {
return;
}
-
EventHandler.one(target, EVENT_HIDDEN$3, () => {
// focus on trigger when it is closed
if (isVisible(this)) {
this.focus();
}
- }); // avoid conflict when clicking a toggler of an offcanvas, while another is open
+ });
+ // avoid conflict when clicking a toggler of an offcanvas, while another is open
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
-
if (alreadyOpen && alreadyOpen !== target) {
Offcanvas.getInstance(alreadyOpen).hide();
}
-
const data = Offcanvas.getOrCreateInstance(target);
data.toggle(this);
});
@@ -5264,6 +4737,7 @@
}
});
enableDismissTrigger(Offcanvas);
+
/**
* jQuery
*/
@@ -5272,42 +4746,39 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/sanitizer.js
+ * Bootstrap (v5.3.0-alpha1): util/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
-
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
+
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
-
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
-
const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase();
-
if (allowedAttributeList.includes(attributeName)) {
if (uriAttributes.has(attributeName)) {
return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
}
-
return true;
- } // Check if a regular expression validates the attribute.
-
+ }
+ // Check if a regular expression validates the attribute.
return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
};
-
const DefaultAllowlist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
@@ -5345,42 +4816,36 @@
if (!unsafeHtml.length) {
return unsafeHtml;
}
-
if (sanitizeFunction && typeof sanitizeFunction === 'function') {
return sanitizeFunction(unsafeHtml);
}
-
const domParser = new window.DOMParser();
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
-
for (const element of elements) {
const elementName = element.nodeName.toLowerCase();
-
if (!Object.keys(allowList).includes(elementName)) {
element.remove();
continue;
}
-
const attributeList = [].concat(...element.attributes);
const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
-
for (const attribute of attributeList) {
if (!allowedAttribute(attribute, allowedAttributes)) {
element.removeAttribute(attribute.nodeName);
}
}
}
-
return createdDocument.body.innerHTML;
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/template-factory.js
+ * Bootstrap (v5.3.0-alpha1): util/template-factory.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -5409,6 +4874,7 @@
entry: '(string|element|function|null)',
selector: '(string|element)'
};
+
/**
* Class definition
*/
@@ -5417,65 +4883,53 @@
constructor(config) {
super();
this._config = this._getConfig(config);
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$4;
}
-
static get DefaultType() {
return DefaultType$4;
}
-
static get NAME() {
return NAME$5;
- } // Public
-
+ }
+ // Public
getContent() {
return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
}
-
hasContent() {
return this.getContent().length > 0;
}
-
changeContent(content) {
this._checkContent(content);
-
- this._config.content = { ...this._config.content,
+ this._config.content = {
+ ...this._config.content,
...content
};
return this;
}
-
toHtml() {
const templateWrapper = document.createElement('div');
templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
-
for (const [selector, text] of Object.entries(this._config.content)) {
this._setContent(templateWrapper, text, selector);
}
-
const template = templateWrapper.children[0];
-
const extraClass = this._resolvePossibleFunction(this._config.extraClass);
-
if (extraClass) {
template.classList.add(...extraClass.split(' '));
}
-
return template;
- } // Private
-
+ }
+ // Private
_typeCheckConfig(config) {
super._typeCheckConfig(config);
-
this._checkContent(config.content);
}
-
_checkContent(arg) {
for (const [selector, content] of Object.entries(arg)) {
super._typeCheckConfig({
@@ -5484,61 +4938,49 @@
}, DefaultContentType);
}
}
-
_setContent(template, content, selector) {
const templateElement = SelectorEngine.findOne(selector, template);
-
if (!templateElement) {
return;
}
-
content = this._resolvePossibleFunction(content);
-
if (!content) {
templateElement.remove();
return;
}
-
if (isElement$1(content)) {
this._putElementInTemplate(getElement(content), templateElement);
-
return;
}
-
if (this._config.html) {
templateElement.innerHTML = this._maybeSanitize(content);
return;
}
-
templateElement.textContent = content;
}
-
_maybeSanitize(arg) {
return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
}
-
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg(this) : arg;
+ return execute(arg, [this]);
}
-
_putElementInTemplate(element, templateElement) {
if (this._config.html) {
templateElement.innerHTML = '';
templateElement.append(element);
return;
}
-
templateElement.textContent = element.textContent;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tooltip.js
+ * Bootstrap (v5.3.0-alpha1): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -5610,6 +5052,7 @@
title: '(string|element|function)',
trigger: 'string'
};
+
/**
* Class definition
*/
@@ -5619,174 +5062,130 @@
if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
}
+ super(element, config);
- super(element, config); // Private
-
+ // Private
this._isEnabled = true;
this._timeout = 0;
this._isHovered = null;
this._activeTrigger = {};
this._popper = null;
this._templateFactory = null;
- this._newContent = null; // Protected
+ this._newContent = null;
+ // Protected
this.tip = null;
-
this._setListeners();
-
if (!this._config.selector) {
this._fixTitle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$3;
}
-
static get DefaultType() {
return DefaultType$3;
}
-
static get NAME() {
return NAME$4;
- } // Public
-
+ }
+ // Public
enable() {
this._isEnabled = true;
}
-
disable() {
this._isEnabled = false;
}
-
toggleEnabled() {
this._isEnabled = !this._isEnabled;
}
-
toggle() {
if (!this._isEnabled) {
return;
}
-
this._activeTrigger.click = !this._activeTrigger.click;
-
if (this._isShown()) {
this._leave();
-
return;
}
-
this._enter();
}
-
dispose() {
clearTimeout(this._timeout);
EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
-
- if (this.tip) {
- this.tip.remove();
- }
-
if (this._element.getAttribute('data-bs-original-title')) {
this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
}
-
this._disposePopper();
-
super.dispose();
}
-
show() {
if (this._element.style.display === 'none') {
throw new Error('Please use show on visible elements');
}
-
if (!(this._isWithContent() && this._isEnabled)) {
return;
}
-
const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
const shadowRoot = findShadowRoot(this._element);
-
const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
-
if (showEvent.defaultPrevented || !isInTheDom) {
return;
- } // todo v6 remove this OR make it optional
-
-
- if (this.tip) {
- this.tip.remove();
- this.tip = null;
}
+ // todo v6 remove this OR make it optional
+ this._disposePopper();
const tip = this._getTipElement();
-
this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
-
const {
container
} = this._config;
-
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
container.append(tip);
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
}
+ this._popper = this._createPopper(tip);
+ tip.classList.add(CLASS_NAME_SHOW$2);
- if (this._popper) {
- this._popper.update();
- } else {
- this._popper = this._createPopper(tip);
- }
-
- tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra
+ // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.on(element, 'mouseover', noop);
}
}
-
const complete = () => {
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
-
if (this._isHovered === false) {
this._leave();
}
-
this._isHovered = false;
};
-
this._queueCallback(complete, this.tip, this._isAnimated());
}
-
hide() {
if (!this._isShown()) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
-
if (hideEvent.defaultPrevented) {
return;
}
-
const tip = this._getTipElement();
+ tip.classList.remove(CLASS_NAME_SHOW$2);
- tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra
+ // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
-
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.off(element, 'mouseover', noop);
}
}
-
this._activeTrigger[TRIGGER_CLICK] = false;
this._activeTrigger[TRIGGER_FOCUS] = false;
this._activeTrigger[TRIGGER_HOVER] = false;
@@ -5796,135 +5195,107 @@
if (this._isWithActiveTrigger()) {
return;
}
-
if (!this._isHovered) {
- tip.remove();
+ this._disposePopper();
}
-
this._element.removeAttribute('aria-describedby');
-
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
-
- this._disposePopper();
};
-
this._queueCallback(complete, this.tip, this._isAnimated());
}
-
update() {
if (this._popper) {
this._popper.update();
}
- } // Protected
-
+ }
+ // Protected
_isWithContent() {
return Boolean(this._getTitle());
}
-
_getTipElement() {
if (!this.tip) {
this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
}
-
return this.tip;
}
-
_createTipElement(content) {
- const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6
-
+ const tip = this._getTemplateFactory(content).toHtml();
+ // todo: remove this check on v6
if (!tip) {
return null;
}
-
- tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only
-
+ tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
+ // todo: on v6 the following can be achieved with CSS only
tip.classList.add(`bs-${this.constructor.NAME}-auto`);
const tipId = getUID(this.constructor.NAME).toString();
tip.setAttribute('id', tipId);
-
if (this._isAnimated()) {
tip.classList.add(CLASS_NAME_FADE$2);
}
-
return tip;
}
-
setContent(content) {
this._newContent = content;
-
if (this._isShown()) {
this._disposePopper();
-
this.show();
}
}
-
_getTemplateFactory(content) {
if (this._templateFactory) {
this._templateFactory.changeContent(content);
} else {
- this._templateFactory = new TemplateFactory({ ...this._config,
+ this._templateFactory = new TemplateFactory({
+ ...this._config,
// the `content` var has to be after `this._config`
// to override config.content in case of popover
content,
extraClass: this._resolvePossibleFunction(this._config.customClass)
});
}
-
return this._templateFactory;
}
-
_getContentForTemplate() {
return {
[SELECTOR_TOOLTIP_INNER]: this._getTitle()
};
}
-
_getTitle() {
return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
- } // Private
-
+ }
+ // Private
_initializeOnDelegatedTarget(event) {
return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
}
-
_isAnimated() {
return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
}
-
_isShown() {
return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
}
-
_createPopper(tip) {
- const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
+ const placement = execute(this._config.placement, [this, tip, this._element]);
const attachment = AttachmentMap[placement.toUpperCase()];
return createPopper(this._element, tip, this._getPopperConfig(attachment));
}
-
_getOffset() {
const {
offset
} = this._config;
-
if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10));
}
-
if (typeof offset === 'function') {
return popperData => offset(popperData, this._element);
}
-
return offset;
}
-
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg.call(this._element) : arg;
+ return execute(arg, [this._element]);
}
-
_getPopperConfig(attachment) {
const defaultBsPopperConfig = {
placement: attachment,
@@ -5959,19 +5330,17 @@
}
}]
};
- return { ...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ return {
+ ...defaultBsPopperConfig,
+ ...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
-
_setListeners() {
const triggers = this._config.trigger.split(' ');
-
for (const trigger of triggers) {
if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context.toggle();
});
} else if (trigger !== TRIGGER_MANUAL) {
@@ -5979,182 +5348,150 @@
const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
EventHandler.on(this._element, eventIn, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
-
context._enter();
});
EventHandler.on(this._element, eventOut, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
-
context._leave();
});
}
}
-
this._hideModalHandler = () => {
if (this._element) {
this.hide();
}
};
-
EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
}
-
_fixTitle() {
const title = this._element.getAttribute('title');
-
if (!title) {
return;
}
-
if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
this._element.setAttribute('aria-label', title);
}
-
this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
-
-
this._element.removeAttribute('title');
}
-
_enter() {
if (this._isShown() || this._isHovered) {
this._isHovered = true;
return;
}
-
this._isHovered = true;
-
this._setTimeout(() => {
if (this._isHovered) {
this.show();
}
}, this._config.delay.show);
}
-
_leave() {
if (this._isWithActiveTrigger()) {
return;
}
-
this._isHovered = false;
-
this._setTimeout(() => {
if (!this._isHovered) {
this.hide();
}
}, this._config.delay.hide);
}
-
_setTimeout(handler, timeout) {
clearTimeout(this._timeout);
this._timeout = setTimeout(handler, timeout);
}
-
_isWithActiveTrigger() {
return Object.values(this._activeTrigger).includes(true);
}
-
_getConfig(config) {
const dataAttributes = Manipulator.getDataAttributes(this._element);
-
for (const dataAttribute of Object.keys(dataAttributes)) {
if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
delete dataAttributes[dataAttribute];
}
}
-
- config = { ...dataAttributes,
+ config = {
+ ...dataAttributes,
...(typeof config === 'object' && config ? config : {})
};
config = this._mergeConfigObj(config);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
}
-
_configAfterMerge(config) {
config.container = config.container === false ? document.body : getElement(config.container);
-
if (typeof config.delay === 'number') {
config.delay = {
show: config.delay,
hide: config.delay
};
}
-
if (typeof config.title === 'number') {
config.title = config.title.toString();
}
-
if (typeof config.content === 'number') {
config.content = config.content.toString();
}
-
return config;
}
-
_getDelegateConfig() {
const config = {};
-
- for (const key in this._config) {
- if (this.constructor.Default[key] !== this._config[key]) {
- config[key] = this._config[key];
+ for (const [key, value] of Object.entries(this._config)) {
+ if (this.constructor.Default[key] !== value) {
+ config[key] = value;
}
}
-
config.selector = false;
- config.trigger = 'manual'; // In the future can be replaced with:
+ config.trigger = 'manual';
+
+ // In the future can be replaced with:
// const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
// `Object.fromEntries(keysWithDifferentValues)`
-
return config;
}
-
_disposePopper() {
if (this._popper) {
this._popper.destroy();
-
this._popper = null;
}
- } // Static
-
+ if (this.tip) {
+ this.tip.remove();
+ this.tip = null;
+ }
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Tooltip.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* jQuery
*/
-
defineJQueryPlugin(Tooltip);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): popover.js
+ * Bootstrap (v5.3.0-alpha1): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -6162,16 +5499,19 @@
const NAME$3 = 'popover';
const SELECTOR_TITLE = '.popover-header';
const SELECTOR_CONTENT = '.popover-body';
- const Default$2 = { ...Tooltip.Default,
+ const Default$2 = {
+ ...Tooltip.Default,
content: '',
offset: [0, 8],
placement: 'right',
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
trigger: 'click'
};
- const DefaultType$2 = { ...Tooltip.DefaultType,
+ const DefaultType$2 = {
+ ...Tooltip.DefaultType,
content: '(null|string|element|function)'
};
+
/**
* Class definition
*/
@@ -6181,63 +5521,57 @@
static get Default() {
return Default$2;
}
-
static get DefaultType() {
return DefaultType$2;
}
-
static get NAME() {
return NAME$3;
- } // Overrides
-
+ }
+ // Overrides
_isWithContent() {
return this._getTitle() || this._getContent();
- } // Private
-
+ }
+ // Private
_getContentForTemplate() {
return {
[SELECTOR_TITLE]: this._getTitle(),
[SELECTOR_CONTENT]: this._getContent()
};
}
-
_getContent() {
return this._resolvePossibleFunction(this._config.content);
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Popover.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* jQuery
*/
-
defineJQueryPlugin(Popover);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): scrollspy.js
+ * Bootstrap (v5.3.0-alpha1): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -6276,14 +5610,16 @@
target: 'element',
threshold: 'array'
};
+
/**
* Class definition
*/
class ScrollSpy extends BaseComponent {
constructor(element, config) {
- super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper
+ super(element, config);
+ // this._element is the observablesContainer and config.target the menu links wrapper
this._targetLinks = new Map();
this._observableSections = new Map();
this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
@@ -6294,87 +5630,75 @@
parentScrollTop: 0
};
this.refresh(); // initialize
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$1;
}
-
static get DefaultType() {
return DefaultType$1;
}
-
static get NAME() {
return NAME$2;
- } // Public
-
+ }
+ // Public
refresh() {
this._initializeTargetsAndObservables();
-
this._maybeEnableSmoothScroll();
-
if (this._observer) {
this._observer.disconnect();
} else {
this._observer = this._getNewObserver();
}
-
for (const section of this._observableSections.values()) {
this._observer.observe(section);
}
}
-
dispose() {
this._observer.disconnect();
-
super.dispose();
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
// TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
- config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
+ config.target = getElement(config.target) || document.body;
+ // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
-
if (typeof config.threshold === 'string') {
config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
}
-
return config;
}
-
_maybeEnableSmoothScroll() {
if (!this._config.smoothScroll) {
return;
- } // unregister any previous listeners
-
+ }
+ // unregister any previous listeners
EventHandler.off(this._config.target, EVENT_CLICK);
EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
const observableSection = this._observableSections.get(event.target.hash);
-
if (observableSection) {
event.preventDefault();
const root = this._rootElement || window;
const height = observableSection.offsetTop - this._element.offsetTop;
-
if (root.scrollTo) {
root.scrollTo({
top: height,
behavior: 'smooth'
});
return;
- } // Chrome 60 doesn't support `scrollTo`
-
+ }
+ // Chrome 60 doesn't support `scrollTo`
root.scrollTop = height;
}
});
}
-
_getNewObserver() {
const options = {
root: this._rootElement,
@@ -6382,95 +5706,77 @@
rootMargin: this._config.rootMargin
};
return new IntersectionObserver(entries => this._observerCallback(entries), options);
- } // The logic of selection
-
+ }
+ // The logic of selection
_observerCallback(entries) {
const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
-
const activate = entry => {
this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
-
this._process(targetElement(entry));
};
-
const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
this._previousScrollData.parentScrollTop = parentScrollTop;
-
for (const entry of entries) {
if (!entry.isIntersecting) {
this._activeTarget = null;
-
this._clearActiveClass(targetElement(entry));
-
continue;
}
-
- const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop
-
+ const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
+ // if we are scrolling down, pick the bigger offsetTop
if (userScrollsDown && entryIsLowerThanPrevious) {
- activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
-
+ activate(entry);
+ // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
if (!parentScrollTop) {
return;
}
-
continue;
- } // if we are scrolling up, pick the smallest offsetTop
-
+ }
+ // if we are scrolling up, pick the smallest offsetTop
if (!userScrollsDown && !entryIsLowerThanPrevious) {
activate(entry);
}
}
}
-
_initializeTargetsAndObservables() {
this._targetLinks = new Map();
this._observableSections = new Map();
const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
-
for (const anchor of targetLinks) {
// ensure that the anchor has an id and is not disabled
if (!anchor.hash || isDisabled(anchor)) {
continue;
}
+ const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
- const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible
-
+ // ensure that the observableSection exists & is visible
if (isVisible(observableSection)) {
this._targetLinks.set(anchor.hash, anchor);
-
this._observableSections.set(anchor.hash, observableSection);
}
}
}
-
_process(target) {
if (this._activeTarget === target) {
return;
}
-
this._clearActiveClass(this._config.target);
-
this._activeTarget = target;
target.classList.add(CLASS_NAME_ACTIVE$1);
-
this._activateParents(target);
-
EventHandler.trigger(this._element, EVENT_ACTIVATE, {
relatedTarget: target
});
}
-
_activateParents(target) {
// Activate dropdown parents
if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
return;
}
-
for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
// Set triggered links parents as active
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
@@ -6479,44 +5785,39 @@
}
}
}
-
_clearActiveClass(parent) {
parent.classList.remove(CLASS_NAME_ACTIVE$1);
const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
-
for (const node of activeNodes) {
node.classList.remove(CLASS_NAME_ACTIVE$1);
}
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = ScrollSpy.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
ScrollSpy.getOrCreateInstance(spy);
}
});
+
/**
* jQuery
*/
@@ -6525,10 +5826,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tab.js
+ * Bootstrap (v5.3.0-alpha1): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -6558,9 +5860,9 @@
const SELECTOR_OUTER = '.nav-item, .list-group-item';
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // todo:v6: could be only `tab`
-
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
+
/**
* Class definition
*/
@@ -6569,122 +5871,97 @@
constructor(element) {
super(element);
this._parent = this._element.closest(SELECTOR_TAB_PANEL);
-
if (!this._parent) {
- return; // todo: should Throw exception on v6
+ return;
+ // todo: should Throw exception on v6
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
- } // Set up initial aria attributes
-
+ }
+ // Set up initial aria attributes
this._setInitialAttributes(this._parent, this._getChildren());
-
EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
- } // Getters
-
+ }
+ // Getters
static get NAME() {
return NAME$1;
- } // Public
-
+ }
+ // Public
show() {
// Shows this elem and deactivate the active sibling if exists
const innerElem = this._element;
-
if (this._elemIsActive(innerElem)) {
return;
- } // Search for active tab on same parent to deactivate it
-
+ }
+ // Search for active tab on same parent to deactivate it
const active = this._getActiveElem();
-
const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
relatedTarget: innerElem
}) : null;
const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
relatedTarget: active
});
-
if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
return;
}
-
this._deactivate(active, innerElem);
-
this._activate(innerElem, active);
- } // Private
-
+ }
+ // Private
_activate(element, relatedElem) {
if (!element) {
return;
}
-
element.classList.add(CLASS_NAME_ACTIVE);
-
- this._activate(getElementFromSelector(element)); // Search and activate/show the proper section
-
+ this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
element.classList.add(CLASS_NAME_SHOW$1);
return;
}
-
element.removeAttribute('tabindex');
element.setAttribute('aria-selected', true);
-
this._toggleDropDown(element, true);
-
EventHandler.trigger(element, EVENT_SHOWN$1, {
relatedTarget: relatedElem
});
};
-
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
}
-
_deactivate(element, relatedElem) {
if (!element) {
return;
}
-
element.classList.remove(CLASS_NAME_ACTIVE);
element.blur();
-
- this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too
-
+ this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
element.classList.remove(CLASS_NAME_SHOW$1);
return;
}
-
element.setAttribute('aria-selected', false);
element.setAttribute('tabindex', '-1');
-
this._toggleDropDown(element, false);
-
EventHandler.trigger(element, EVENT_HIDDEN$1, {
relatedTarget: relatedElem
});
};
-
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
}
-
_keydown(event) {
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
return;
}
-
event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
-
event.preventDefault();
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true);
-
if (nextActiveElement) {
nextActiveElement.focus({
preventScroll: true
@@ -6692,139 +5969,111 @@
Tab.getOrCreateInstance(nextActiveElement).show();
}
}
-
_getChildren() {
// collection of inner elements
return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
}
-
_getActiveElem() {
return this._getChildren().find(child => this._elemIsActive(child)) || null;
}
-
_setInitialAttributes(parent, children) {
this._setAttributeIfNotExists(parent, 'role', 'tablist');
-
for (const child of children) {
this._setInitialAttributesOnChild(child);
}
}
-
_setInitialAttributesOnChild(child) {
child = this._getInnerElement(child);
-
const isActive = this._elemIsActive(child);
-
const outerElem = this._getOuterElement(child);
-
child.setAttribute('aria-selected', isActive);
-
if (outerElem !== child) {
this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
}
-
if (!isActive) {
child.setAttribute('tabindex', '-1');
}
+ this._setAttributeIfNotExists(child, 'role', 'tab');
- this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too
-
-
+ // set attributes to the related panel too
this._setInitialAttributesOnTargetPanel(child);
}
-
_setInitialAttributesOnTargetPanel(child) {
- const target = getElementFromSelector(child);
-
+ const target = SelectorEngine.getElementFromSelector(child);
if (!target) {
return;
}
-
this._setAttributeIfNotExists(target, 'role', 'tabpanel');
-
if (child.id) {
this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`);
}
}
-
_toggleDropDown(element, open) {
const outerElem = this._getOuterElement(element);
-
if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
return;
}
-
const toggle = (selector, className) => {
const element = SelectorEngine.findOne(selector, outerElem);
-
if (element) {
element.classList.toggle(className, open);
}
};
-
toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
outerElem.setAttribute('aria-expanded', open);
}
-
_setAttributeIfNotExists(element, attribute, value) {
if (!element.hasAttribute(attribute)) {
element.setAttribute(attribute, value);
}
}
-
_elemIsActive(elem) {
return elem.classList.contains(CLASS_NAME_ACTIVE);
- } // Try to get the inner element (usually the .nav-link)
-
+ }
+ // Try to get the inner element (usually the .nav-link)
_getInnerElement(elem) {
return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
- } // Try to get the outer element (usually the .nav-item)
-
+ }
+ // Try to get the outer element (usually the .nav-item)
_getOuterElement(elem) {
return elem.closest(SELECTOR_OUTER) || elem;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Tab.getOrCreateInstance(this);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
if (isDisabled(this)) {
return;
}
-
Tab.getOrCreateInstance(this).show();
});
+
/**
* Initialize on focus
*/
-
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
Tab.getOrCreateInstance(element);
@@ -6838,10 +6087,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): toast.js
+ * Bootstrap (v5.3.0-alpha1): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -6859,7 +6109,6 @@
const EVENT_SHOWN = `shown${EVENT_KEY}`;
const CLASS_NAME_FADE = 'fade';
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
-
const CLASS_NAME_SHOW = 'show';
const CLASS_NAME_SHOWING = 'showing';
const DefaultType = {
@@ -6872,6 +6121,7 @@
autohide: true,
delay: 5000
};
+
/**
* Class definition
*/
@@ -6882,109 +6132,80 @@
this._timeout = null;
this._hasMouseInteraction = false;
this._hasKeyboardInteraction = false;
-
this._setListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
show() {
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
-
if (showEvent.defaultPrevented) {
return;
}
-
this._clearTimeout();
-
if (this._config.animation) {
this._element.classList.add(CLASS_NAME_FADE);
}
-
const complete = () => {
this._element.classList.remove(CLASS_NAME_SHOWING);
-
EventHandler.trigger(this._element, EVENT_SHOWN);
-
this._maybeScheduleHide();
};
-
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
-
-
reflow(this._element);
-
this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
-
this._queueCallback(complete, this._element, this._config.animation);
}
-
hide() {
if (!this.isShown()) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
-
if (hideEvent.defaultPrevented) {
return;
}
-
const complete = () => {
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
-
-
this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
-
EventHandler.trigger(this._element, EVENT_HIDDEN);
};
-
this._element.classList.add(CLASS_NAME_SHOWING);
-
this._queueCallback(complete, this._element, this._config.animation);
}
-
dispose() {
this._clearTimeout();
-
if (this.isShown()) {
this._element.classList.remove(CLASS_NAME_SHOW);
}
-
super.dispose();
}
-
isShown() {
return this._element.classList.contains(CLASS_NAME_SHOW);
- } // Private
+ }
+ // Private
_maybeScheduleHide() {
if (!this._config.autohide) {
return;
}
-
if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
return;
}
-
this._timeout = setTimeout(() => {
this.hide();
}, this._config.delay);
}
-
_onInteraction(event, isInteracting) {
switch (event.type) {
case 'mouseover':
@@ -6993,7 +6214,6 @@
this._hasMouseInteraction = isInteracting;
break;
}
-
case 'focusin':
case 'focusout':
{
@@ -7001,56 +6221,47 @@
break;
}
}
-
if (isInteracting) {
this._clearTimeout();
-
return;
}
-
const nextElement = event.relatedTarget;
-
if (this._element === nextElement || this._element.contains(nextElement)) {
return;
}
-
this._maybeScheduleHide();
}
-
_setListeners() {
EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
}
-
_clearTimeout() {
clearTimeout(this._timeout);
this._timeout = null;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Toast.getOrCreateInstance(this, config);
-
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
}
});
}
-
}
+
/**
* Data API implementation
*/
-
enableDismissTrigger(Toast);
+
/**
* jQuery
*/
@@ -7059,7 +6270,7 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): index.umd.js
+ * Bootstrap (v5.3.0-alpha1): index.umd.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map
index 58f9e7bb8..1dbf10d7f 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.js.map
@@ -1 +1 @@
-{"version":3,"file":"bootstrap.bundle.js","sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/selector-engine.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(object)\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getElementFromSelector,\n getjQuery,\n getNextActiveElement,\n getSelectorFromElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const handlerKey of Object.keys(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const keyHandlers of Object.keys(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta) {\n for (const [key, value] of Object.entries(meta || {})) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index'\nimport Manipulator from '../dom/manipulator'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const property of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport { executeAfterTransition, getElement } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Config from './util/config'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.2.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config'\nimport EventHandler from '../dom/event-handler'\nimport { execute } from './index'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport Swipe from './util/swipe'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getSelectorFromElement,\n reflow\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n for (const element of selectorElements) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow } from './index'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isVisible\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer'\nimport { getElement, isElement } from '../util/index'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg(this) : arg\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'\nimport { DefaultAllowlist } from './util/sanitizer'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport TemplateFactory from './util/template-factory'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this.tip) {\n this.tip.remove()\n }\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = this._createPopper(tip)\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n tip.remove()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n\n this._disposePopper()\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, getNextActiveElement, isDisabled } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert'\nimport Button from './src/button'\nimport Carousel from './src/carousel'\nimport Collapse from './src/collapse'\nimport Dropdown from './src/dropdown'\nimport Modal from './src/modal'\nimport Offcanvas from './src/offcanvas'\nimport Popover from './src/popover'\nimport ScrollSpy from './src/scrollspy'\nimport Tab from './src/tab'\nimport Toast from './src/toast'\nimport Tooltip from './src/tooltip'\n\nexport default {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip\n}\n"],"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","toType","object","undefined","Object","prototype","toString","call","match","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getSelector","element","selector","getAttribute","hrefAttribute","includes","startsWith","split","trim","getSelectorFromElement","querySelector","getElementFromSelector","getTransitionDurationFromElement","transitionDuration","transitionDelay","window","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","bootstrapHandler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","domElements","querySelectorAll","domElement","findHandler","events","callable","delegationSelector","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","replace","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","keys","on","one","inNamespace","isNamespace","elementEvent","slice","keyHandlers","trigger","args","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","entries","defineProperty","configurable","get","elementMap","Map","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","VERSION","BaseComponent","_element","_config","Data","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","eventName","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","close","closeEvent","_destroyElement","each","data","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","toggle","button","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","touches","clientX","_eventIsPointerPenTouch","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","endCallBack","clearTimeout","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","slideEvent","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","startEvent","activeInstance","dimension","_getDimension","style","complete","capitalizedDimension","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","selectorElements","effect","mathMax","mathMin","hash","allPlacements","placements","createPopper","defaultModifiers","popperOffsets","computeStyles","applyStyles","offset","flip","preventOverflow","arrow","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","autoClose","boundary","display","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","showEvent","_createPopper","focus","_completeHide","destroy","update","hideEvent","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","manipulationCallBack","setProperty","_applyManipulationCallback","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","scroll","Offcanvas","blur","completeCallback","position","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","domParser","DOMParser","createdDocument","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSOUT","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","shadowRoot","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","id","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"bootstrap.bundle.js","sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index.js'\nimport Manipulator from '../dom/manipulator.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.0-alpha1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { isDisabled } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config.js'\nimport EventHandler from '../dom/event-handler.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Swipe from './util/swipe.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport BaseComponent from './base-component.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport BaseComponent from './base-component.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport Tooltip from './tooltip.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert.js'\nimport Button from './src/button.js'\nimport Carousel from './src/carousel.js'\nimport Collapse from './src/collapse.js'\nimport Dropdown from './src/dropdown.js'\nimport Modal from './src/modal.js'\nimport Offcanvas from './src/offcanvas.js'\nimport Popover from './src/popover.js'\nimport ScrollSpy from './src/scrollspy.js'\nimport Tab from './src/tab.js'\nimport Toast from './src/toast.js'\nimport Tooltip from './src/tooltip.js'\n\nexport default {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip\n}\n"],"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","toType","object","undefined","Object","prototype","toString","call","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getTransitionDurationFromElement","element","transitionDuration","transitionDelay","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","querySelector","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","bootstrapHandler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","domElements","querySelectorAll","domElement","findHandler","events","callable","delegationSelector","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","keys","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","defineProperty","configurable","get","elementMap","Map","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","VERSION","BaseComponent","_element","_config","Data","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","eventName","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","close","closeEvent","_destroyElement","each","data","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","touches","clientX","_eventIsPointerPenTouch","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","endCallBack","clearTimeout","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","slideEvent","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","startEvent","activeInstance","dimension","_getDimension","style","complete","capitalizedDimension","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","effect","mathMax","mathMin","hash","allPlacements","placements","createPopper","defaultModifiers","popperOffsets","computeStyles","applyStyles","offset","flip","preventOverflow","arrow","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","autoClose","boundary","display","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","showEvent","_createPopper","focus","_completeHide","destroy","update","hideEvent","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","manipulationCallBack","setProperty","_applyManipulationCallback","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","scroll","Offcanvas","blur","completeCallback","position","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","domParser","DOMParser","createdDocument","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSOUT","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","shadowRoot","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js
index 1d138863b..da8d852f4 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js
@@ -1,7 +1,7 @@
/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},m=t=>{"function"==typeof t&&t()},_=(e,i,n=!0)=>{if(!n)return void m(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),m(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=N(t);return C.has(o)||(o=t),[n,s,o]}function D(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return j(s,{delegateTarget:r}),n.oneOff&&P.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return j(n,{delegateTarget:t}),i.oneOff&&P.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function S(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function I(t,e,i,n){const s=e[i]||{};for(const o of Object.keys(s))if(o.includes(n)){const n=s[o];S(t,e,i,n.callable,n.delegationSelector)}}function N(t){return t=t.replace(y,""),T[t]||t}const P={on(t,e,i,n){D(t,e,i,n,!1)},one(t,e,i,n){D(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))I(t,l,i,e.slice(1));for(const i of Object.keys(c)){const n=i.replace(w,"");if(!a||e.includes(n)){const e=c[i];S(t,l,r,e.callable,e.delegationSelector)}}}else{if(!Object.keys(c).length)return;S(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==N(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());let l=new Event(e,{bubbles:o,cancelable:!0});return l=j(l,i),a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function j(t,e){for(const[i,n]of Object.entries(e||{}))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}const M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};function $(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function W(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const B={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${W(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${W(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=$(t.dataset[n])}return e},getDataAttribute:(t,e)=>$(t.getAttribute(`data-bs-${W(e)}`))};class F{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?B.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?B.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const n of Object.keys(e)){const s=e[n],r=t[n],a=o(r)?"element":null==(i=r)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(a))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}var i}}class z extends F{constructor(t,e){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(e),H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),P.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.2.2"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const q=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;P.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class R extends z{static get NAME(){return"alert"}close(){if(P.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),P.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=R.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}q(R,"close"),g(R);const V='[data-bs-toggle="button"]';class K extends z{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=K.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}P.on(document,"click.bs.button.data-api",V,(t=>{t.preventDefault();const e=t.target.closest(V);K.getOrCreateInstance(e).toggle()})),g(K);const Q={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))}},X={endCallback:null,leftCallback:null,rightCallback:null},Y={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class U extends F{constructor(t,e){super(),this._element=t,t&&U.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return X}static get DefaultType(){return Y}static get NAME(){return"swipe"}dispose(){P.off(this._element,".bs.swipe")}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),m(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&m(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(P.on(this._element,"pointerdown.bs.swipe",(t=>this._start(t))),P.on(this._element,"pointerup.bs.swipe",(t=>this._end(t))),this._element.classList.add("pointer-event")):(P.on(this._element,"touchstart.bs.swipe",(t=>this._start(t))),P.on(this._element,"touchmove.bs.swipe",(t=>this._move(t))),P.on(this._element,"touchend.bs.swipe",(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const G="next",J="prev",Z="left",tt="right",et="slid.bs.carousel",it="carousel",nt="active",st={ArrowLeft:tt,ArrowRight:Z},ot={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},rt={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class at extends z{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Q.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===it&&this.cycle()}static get Default(){return ot}static get DefaultType(){return rt}static get NAME(){return"carousel"}next(){this._slide(G)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(J)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?P.one(this._element,et,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void P.one(this._element,et,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?G:J;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&P.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(P.on(this._element,"mouseenter.bs.carousel",(()=>this.pause())),P.on(this._element,"mouseleave.bs.carousel",(()=>this._maybeEnableCycle()))),this._config.touch&&U.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of Q.find(".carousel-item img",this._element))P.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(Z)),rightCallback:()=>this._slide(this._directionToOrder(tt)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new U(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=st[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=Q.findOne(".active",this._indicatorsElement);e.classList.remove(nt),e.removeAttribute("aria-current");const i=Q.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(nt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===G,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>P.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r("slide.bs.carousel").defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(nt),i.classList.remove(nt,c,l),this._isSliding=!1,r(et)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return Q.findOne(".active.carousel-item",this._element)}_getItems(){return Q.find(".carousel-item",this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===Z?J:G:t===Z?G:J}_orderToDirection(t){return p()?t===J?Z:tt:t===J?tt:Z}static jQueryInterface(t){return this.each((function(){const e=at.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}P.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",(function(t){const e=n(this);if(!e||!e.classList.contains(it))return;t.preventDefault();const i=at.getOrCreateInstance(e),s=this.getAttribute("data-bs-slide-to");return s?(i.to(s),void i._maybeEnableCycle()):"next"===B.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),P.on(window,"load.bs.carousel.data-api",(()=>{const t=Q.find('[data-bs-ride="carousel"]');for(const e of t)at.getOrCreateInstance(e)})),g(at);const lt="show",ct="collapse",ht="collapsing",dt='[data-bs-toggle="collapse"]',ut={parent:null,toggle:!0},ft={parent:"(null|element)",toggle:"boolean"};class pt extends z{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const n=Q.find(dt);for(const t of n){const e=i(t),n=Q.find(e).filter((t=>t===this._element));null!==e&&n.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return ut}static get DefaultType(){return ft}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>pt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(P.trigger(this._element,"show.bs.collapse").defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[e]="",P.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(P.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);for(const t of this._triggerArray){const e=n(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),P.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(dt);for(const e of t){const t=n(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=Q.find(":scope .collapse .collapse",this._config.parent);return Q.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}P.on(document,"click.bs.collapse.data-api",dt,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this),n=Q.find(e);for(const t of n)pt.getOrCreateInstance(t,{toggle:!1}).toggle()})),g(pt);var gt="top",mt="bottom",_t="right",bt="left",vt="auto",yt=[gt,mt,_t,bt],wt="start",At="end",Et="clippingParents",Tt="viewport",Ct="popper",Ot="reference",xt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+At])}),[]),kt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+At])}),[]),Lt="beforeRead",Dt="read",St="afterRead",It="beforeMain",Nt="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",$t=[Lt,Dt,St,It,Nt,Pt,jt,Mt,Ht];function Wt(t){return t?(t.nodeName||"").toLowerCase():null}function Bt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Ft(t){return t instanceof Bt(t).Element||t instanceof Element}function zt(t){return t instanceof Bt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Bt(t).ShadowRoot||t instanceof ShadowRoot)}const Rt={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Wt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Wt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Vt(t){return t.split("-")[0]}var Kt=Math.max,Qt=Math.min,Xt=Math.round;function Yt(){var t=navigator.userAgentData;return null!=t&&t.brands?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ut(){return!/^((?!chrome|android).)*safari/i.test(Yt())}function Gt(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&zt(t)&&(s=t.offsetWidth>0&&Xt(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&Xt(n.height)/t.offsetHeight||1);var r=(Ft(t)?Bt(t):window).visualViewport,a=!Ut()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Jt(t){var e=Gt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Zt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function te(t){return Bt(t).getComputedStyle(t)}function ee(t){return["table","td","th"].indexOf(Wt(t))>=0}function ie(t){return((Ft(t)?t.ownerDocument:t.document)||window.document).documentElement}function ne(t){return"html"===Wt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||ie(t)}function se(t){return zt(t)&&"fixed"!==te(t).position?t.offsetParent:null}function oe(t){for(var e=Bt(t),i=se(t);i&&ee(i)&&"static"===te(i).position;)i=se(i);return i&&("html"===Wt(i)||"body"===Wt(i)&&"static"===te(i).position)?e:i||function(t){var e=/firefox/i.test(Yt());if(/Trident/i.test(Yt())&&zt(t)&&"fixed"===te(t).position)return null;var i=ne(t);for(qt(i)&&(i=i.host);zt(i)&&["html","body"].indexOf(Wt(i))<0;){var n=te(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function re(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function ae(t,e,i){return Kt(t,Qt(e,i))}function le(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ce(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const he={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Vt(i.placement),l=re(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return le("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ce(t,yt))}(s.padding,i),d=Jt(o),u="y"===l?gt:bt,f="y"===l?mt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],g=r[l]-i.rects.reference[l],m=oe(o),_=m?"y"===l?m.clientHeight||0:m.clientWidth||0:0,b=p/2-g/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=ae(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Zt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function de(t){return t.split("-")[1]}var ue={top:"auto",right:"auto",bottom:"auto",left:"auto"};function fe(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,g=void 0===p?0:p,m="function"==typeof h?h({x:f,y:g}):{x:f,y:g};f=m.x,g=m.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=bt,y=gt,w=window;if(c){var A=oe(i),E="clientHeight",T="clientWidth";A===Bt(i)&&"static"!==te(A=ie(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===gt||(s===bt||s===_t)&&o===At)&&(y=mt,g-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,g*=l?1:-1),s!==bt&&(s!==gt&&s!==mt||o!==At)||(v=_t,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&ue),x=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:Xt(e*n)/n||0,y:Xt(i*n)/n||0}}({x:f,y:g}):{x:f,y:g};return f=x.x,g=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+g+"px)":"translate3d("+f+"px, "+g+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?g+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const pe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Vt(e.placement),variation:de(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,fe(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,fe(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ge={passive:!0};const me={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Bt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ge)})),a&&l.addEventListener("resize",i.update,ge),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ge)})),a&&l.removeEventListener("resize",i.update,ge)}},data:{}};var _e={left:"right",right:"left",bottom:"top",top:"bottom"};function be(t){return t.replace(/left|right|bottom|top/g,(function(t){return _e[t]}))}var ve={start:"end",end:"start"};function ye(t){return t.replace(/start|end/g,(function(t){return ve[t]}))}function we(t){var e=Bt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ae(t){return Gt(ie(t)).left+we(t).scrollLeft}function Ee(t){var e=te(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Te(t){return["html","body","#document"].indexOf(Wt(t))>=0?t.ownerDocument.body:zt(t)&&Ee(t)?t:Te(ne(t))}function Ce(t,e){var i;void 0===e&&(e=[]);var n=Te(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Bt(n),r=s?[o].concat(o.visualViewport||[],Ee(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ce(ne(r)))}function Oe(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function xe(t,e,i){return e===Tt?Oe(function(t,e){var i=Bt(t),n=ie(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ut();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ae(t),y:l}}(t,i)):Ft(e)?function(t,e){var i=Gt(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Oe(function(t){var e,i=ie(t),n=we(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=Kt(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=Kt(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ae(t),l=-n.scrollTop;return"rtl"===te(s||i).direction&&(a+=Kt(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(ie(t)))}function ke(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Vt(s):null,r=s?de(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case gt:e={x:a,y:i.y-n.height};break;case mt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?re(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case At:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Et:a,c=i.rootBoundary,h=void 0===c?Tt:c,d=i.elementContext,u=void 0===d?Ct:d,f=i.altBoundary,p=void 0!==f&&f,g=i.padding,m=void 0===g?0:g,_=le("number"!=typeof m?m:ce(m,yt)),b=u===Ct?Ot:Ct,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Ce(ne(t)),i=["absolute","fixed"].indexOf(te(t).position)>=0&&zt(t)?oe(t):t;return Ft(i)?e.filter((function(t){return Ft(t)&&Zt(t,i)&&"body"!==Wt(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=xe(t,i,n);return e.top=Kt(s.top,e.top),e.right=Qt(s.right,e.right),e.bottom=Qt(s.bottom,e.bottom),e.left=Kt(s.left,e.left),e}),xe(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(Ft(y)?y:y.contextElement||ie(t.elements.popper),l,h,r),A=Gt(t.elements.reference),E=ke({reference:A,element:v,strategy:"absolute",placement:s}),T=Oe(Object.assign({},v,E)),C=u===Ct?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Ct&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[_t,mt].indexOf(t)>=0?1:-1,i=[gt,mt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function De(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?kt:l,h=de(n),d=h?a?xt:xt.filter((function(t){return de(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=Le(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Vt(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const Se={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,g=i.allowedAutoPlacements,m=e.options.placement,_=Vt(m),b=l||(_!==m&&p?function(t){if(Vt(t)===vt)return[];var e=be(t);return[ye(t),e,ye(e)]}(m):[be(m)]),v=[m].concat(b).reduce((function(t,i){return t.concat(Vt(i)===vt?De(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:g}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C<v.length;C++){var O=v[C],x=Vt(O),k=de(O)===wt,L=[gt,mt].indexOf(x)>=0,D=L?"width":"height",S=Le(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),I=L?k?_t:bt:k?mt:gt;y[D]>w[D]&&(I=be(I));var N=be(I),P=[];if(o&&P.push(S[x]<=0),a&&P.push(S[I]<=0,S[N]<=0),P.every((function(t){return t}))){T=O,E=!1;break}A.set(O,P)}if(E)for(var j=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function Ie(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Ne(t){return[gt,_t,mt,bt].some((function(e){return t[e]>=0}))}const Pe={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=Le(e,{elementContext:"reference"}),a=Le(e,{altBoundary:!0}),l=Ie(r,n),c=Ie(a,s,o),h=Ne(l),d=Ne(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},je={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=kt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Vt(t),s=[bt,gt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Me={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ke({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},He={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,g=void 0===p?0:p,m=Le(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Vt(e.placement),b=de(e.placement),v=!b,y=re(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof g?g(Object.assign({},e.rects,{placement:e.placement})):g,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,D="y"===y?gt:bt,S="y"===y?mt:_t,I="y"===y?"height":"width",N=A[y],P=N+m[D],j=N-m[S],M=f?-T[I]/2:0,H=b===wt?E[I]:T[I],$=b===wt?-T[I]:-E[I],W=e.elements.arrow,B=f&&W?Jt(W):{width:0,height:0},F=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=F[D],q=F[S],R=ae(0,E[I],B[I]),V=v?E[I]/2-M-R-z-O.mainAxis:H-R-z-O.mainAxis,K=v?-E[I]/2+M+R+q+O.mainAxis:$+R+q+O.mainAxis,Q=e.elements.arrow&&oe(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=N+K-Y,G=ae(f?Qt(P,N+V-Y-X):P,N,f?Kt(j,U):j);A[y]=G,k[y]=G-N}if(a){var J,Z="x"===y?gt:bt,tt="x"===y?mt:_t,et=A[w],it="y"===w?"height":"width",nt=et+m[Z],st=et-m[tt],ot=-1!==[gt,bt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=ae(t,e,i);return n>i?i:n}(at,et,lt):ae(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function $e(t,e,i){void 0===i&&(i=!1);var n,s,o=zt(e),r=zt(e)&&function(t){var e=t.getBoundingClientRect(),i=Xt(e.width)/t.offsetWidth||1,n=Xt(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=ie(e),l=Gt(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==Wt(e)||Ee(a))&&(c=(n=e)!==Bt(n)&&zt(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:we(n)),zt(e)?((h=Gt(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ae(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function We(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Fe(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return!e.some((function(t){return!(t&&"function"==typeof t.getBoundingClientRect)}))}function ze(t){void 0===t&&(t={});var e=t,i=e.defaultModifiers,n=void 0===i?[]:i,s=e.defaultOptions,o=void 0===s?Be:s;return function(t,e,i){void 0===i&&(i=o);var s,r,a={placement:"bottom",orderedModifiers:[],options:Object.assign({},Be,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l=[],c=!1,h={state:a,setOptions:function(i){var s="function"==typeof i?i(a.options):i;d(),a.options=Object.assign({},o,a.options,s),a.scrollParents={reference:Ft(t)?Ce(t):t.contextElement?Ce(t.contextElement):[],popper:Ce(e)};var r,c,u=function(t){var e=We(t);return $t.reduce((function(t,i){return t.concat(e.filter((function(t){return t.phase===i})))}),[])}((r=[].concat(n,a.options.modifiers),c=r.reduce((function(t,e){var i=t[e.name];return t[e.name]=i?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t}),{}),Object.keys(c).map((function(t){return c[t]}))));return a.orderedModifiers=u.filter((function(t){return t.enabled})),a.orderedModifiers.forEach((function(t){var e=t.name,i=t.options,n=void 0===i?{}:i,s=t.effect;if("function"==typeof s){var o=s({state:a,name:e,instance:h,options:n});l.push(o||function(){})}})),h.update()},forceUpdate:function(){if(!c){var t=a.elements,e=t.reference,i=t.popper;if(Fe(e,i)){a.rects={reference:$e(e,oe(i),"fixed"===a.options.strategy),popper:Jt(i)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach((function(t){return a.modifiersData[t.name]=Object.assign({},t.data)}));for(var n=0;n<a.orderedModifiers.length;n++)if(!0!==a.reset){var s=a.orderedModifiers[n],o=s.fn,r=s.options,l=void 0===r?{}:r,d=s.name;"function"==typeof o&&(a=o({state:a,options:l,name:d,instance:h})||a)}else a.reset=!1,n=-1}}},update:(s=function(){return new Promise((function(t){h.forceUpdate(),t(a)}))},function(){return r||(r=new Promise((function(t){Promise.resolve().then((function(){r=void 0,t(s())}))}))),r}),destroy:function(){d(),c=!0}};if(!Fe(t,e))return h;function d(){l.forEach((function(t){return t()})),l=[]}return h.setOptions(i).then((function(t){!c&&i.onFirstUpdate&&i.onFirstUpdate(t)})),h}}var qe=ze(),Re=ze({defaultModifiers:[me,Me,pe,Rt]}),Ve=ze({defaultModifiers:[me,Me,pe,Rt,je,Se,He,he,Pe]});const Ke=Object.freeze(Object.defineProperty({__proto__:null,popperGenerator:ze,detectOverflow:Le,createPopperBase:qe,createPopper:Ve,createPopperLite:Re,top:gt,bottom:mt,right:_t,left:bt,auto:vt,basePlacements:yt,start:wt,end:At,clippingParents:Et,viewport:Tt,popper:Ct,reference:Ot,variationPlacements:xt,placements:kt,beforeRead:Lt,read:Dt,afterRead:St,beforeMain:It,main:Nt,afterMain:Pt,beforeWrite:jt,write:Mt,afterWrite:Ht,modifierPhases:$t,applyStyles:Rt,arrow:he,computeStyles:pe,eventListeners:me,flip:Se,hide:Pe,offset:je,popperOffsets:Me,preventOverflow:He},Symbol.toStringTag,{value:"Module"})),Qe="dropdown",Xe="ArrowUp",Ye="ArrowDown",Ue="click.bs.dropdown.data-api",Ge="keydown.bs.dropdown.data-api",Je="show",Ze='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',ti=`${Ze}.show`,ei=".dropdown-menu",ii=p()?"top-end":"top-start",ni=p()?"top-start":"top-end",si=p()?"bottom-end":"bottom-start",oi=p()?"bottom-start":"bottom-end",ri=p()?"left-start":"right-start",ai=p()?"right-start":"left-start",li={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},ci={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class hi extends z{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=Q.next(this._element,ei)[0]||Q.prev(this._element,ei)[0]||Q.findOne(ei,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return li}static get DefaultType(){return ci}static get NAME(){return Qe}toggle(){return this._isShown()?this.hide():this.show()}show(){if(l(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!P.trigger(this._element,"show.bs.dropdown",t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))P.on(t,"mouseover",h);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),P.trigger(this._element,"shown.bs.dropdown",t)}}hide(){if(l(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!P.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.off(t,"mouseover",h);this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),P.trigger(this._element,"hidden.bs.dropdown",t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Qe.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===Ke)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:o(this._config.reference)?t=r(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=Ve(t,this._menu,e)}_isShown(){return this._menu.classList.contains(Je)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=Q.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=Q.find(ti);for(const i of e){const e=hi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Xe,Ye].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ze)?this:Q.prev(this,Ze)[0]||Q.next(this,Ze)[0]||Q.findOne(Ze,t.delegateTarget.parentNode),o=hi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}P.on(document,Ge,Ze,hi.dataApiKeydownHandler),P.on(document,Ge,ei,hi.dataApiKeydownHandler),P.on(document,Ue,hi.clearMenus),P.on(document,"keyup.bs.dropdown.data-api",hi.clearMenus),P.on(document,Ue,Ze,(function(t){t.preventDefault(),hi.getOrCreateInstance(this).toggle()})),g(hi);const di=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",ui=".sticky-top",fi="padding-right",pi="margin-right";class gi{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,fi,(e=>e+t)),this._setElementAttributes(di,fi,(e=>e+t)),this._setElementAttributes(ui,pi,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,fi),this._resetElementAttributes(di,fi),this._resetElementAttributes(ui,pi)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&B.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=B.getDataAttribute(t,e);null!==i?(B.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of Q.find(t,this._element))e(i)}}const mi="show",_i="mousedown.bs.backdrop",bi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},vi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class yi extends F{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return bi}static get DefaultType(){return vi}static get NAME(){return"backdrop"}show(t){if(!this._config.isVisible)return void m(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(mi),this._emulateAnimation((()=>{m(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(mi),this._emulateAnimation((()=>{this.dispose(),m(t)}))):m(t)}dispose(){this._isAppended&&(P.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),P.on(t,_i,(()=>{m(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const wi=".bs.focustrap",Ai="backward",Ei={autofocus:!0,trapElement:null},Ti={autofocus:"boolean",trapElement:"element"};class Ci extends F{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Ei}static get DefaultType(){return Ti}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),P.off(document,wi),P.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),P.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,P.off(document,wi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=Q.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===Ai?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ai:"forward")}}const Oi="hidden.bs.modal",xi="show.bs.modal",ki="modal-open",Li="show",Di="modal-static",Si={backdrop:!0,focus:!0,keyboard:!0},Ii={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ni extends z{constructor(t,e){super(t,e),this._dialog=Q.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new gi,this._addEventListeners()}static get Default(){return Si}static get DefaultType(){return Ii}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||P.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(ki),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(P.trigger(this._element,"hide.bs.modal").defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Li),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const t of[window,this._dialog])P.off(t,".bs.modal");this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new yi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ci({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=Q.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(Li),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,P.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.modal",(t=>{if("Escape"===t.key)return this._config.keyboard?(t.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),P.on(window,"resize.bs.modal",(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),P.on(this._element,"mousedown.dismiss.bs.modal",(t=>{P.one(this._element,"click.dismiss.bs.modal",(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(ki),this._resetAdjustments(),this._scrollBar.reset(),P.trigger(this._element,Oi)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(P.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Di)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Di),this._queueCallback((()=>{this._element.classList.remove(Di),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Ni.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}P.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),P.one(e,xi,(t=>{t.defaultPrevented||P.one(e,Oi,(()=>{a(this)&&this.focus()}))}));const i=Q.findOne(".modal.show");i&&Ni.getInstance(i).hide(),Ni.getOrCreateInstance(e).toggle(this)})),q(Ni),g(Ni);const Pi="show",ji="showing",Mi="hiding",Hi=".offcanvas.show",$i="hidePrevented.bs.offcanvas",Wi="hidden.bs.offcanvas",Bi={backdrop:!0,keyboard:!0,scroll:!1},Fi={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class zi extends z{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Bi}static get DefaultType(){return Fi}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||P.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new gi).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(ji),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Pi),this._element.classList.remove(ji),P.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(P.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Mi),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Pi,Mi),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new gi).reset(),P.trigger(this._element,Wi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new yi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():P.trigger(this._element,$i)}:null})}_initializeFocusTrap(){return new Ci({trapElement:this._element})}_addEventListeners(){P.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():P.trigger(this._element,$i))}))}static jQueryInterface(t){return this.each((function(){const e=zi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}P.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;P.one(e,Wi,(()=>{a(this)&&this.focus()}));const i=Q.findOne(Hi);i&&i!==e&&zi.getInstance(i).hide(),zi.getOrCreateInstance(e).toggle(this)})),P.on(window,"load.bs.offcanvas.data-api",(()=>{for(const t of Q.find(Hi))zi.getOrCreateInstance(t).show()})),P.on(window,"resize.bs.offcanvas",(()=>{for(const t of Q.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&zi.getOrCreateInstance(t).hide()})),q(zi),g(zi);const qi=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Ri=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Vi=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Ki=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!qi.has(i)||Boolean(Ri.test(t.nodeValue)||Vi.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Qi={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Xi={allowList:Qi,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},Yi={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Ui={entry:"(string|element|function|null)",selector:"(string|element)"};class Gi extends F{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Ui)}_setContent(t,e,i){const n=Q.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Ki(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return"function"==typeof t?t(this):t}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Ji=new Set(["sanitize","allowList","sanitizeFn"]),Zi="fade",tn="show",en=".modal",nn="hide.bs.modal",sn="hover",on="focus",rn={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},an={allowList:Qi,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},ln={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cn extends z{constructor(t,e){if(void 0===Ke)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return an}static get DefaultType(){return ln}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),P.off(this._element.closest(en),nn,this._hideModalHandler),this.tip&&this.tip.remove(),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=P.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this.tip&&(this.tip.remove(),this.tip=null);const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),P.trigger(this._element,this.constructor.eventName("inserted"))),this._popper?this._popper.update():this._popper=this._createPopper(i),i.classList.add(tn),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.on(t,"mouseover",h);this._queueCallback((()=>{P.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(P.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;const t=this._getTipElement();if(t.classList.remove(tn),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))P.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||t.remove(),this._element.removeAttribute("aria-describedby"),P.trigger(this._element,this.constructor.eventName("hidden")),this._disposePopper())}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Zi,tn),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(Zi),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Gi({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Zi)}_isShown(){return this.tip&&this.tip.classList.contains(tn)}_createPopper(t){const e="function"==typeof this._config.placement?this._config.placement.call(this,t,this._element):this._config.placement,i=rn[e.toUpperCase()];return Ve(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)P.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===sn?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===sn?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");P.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?on:sn]=!0,e._enter()})),P.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?on:sn]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},P.on(this._element.closest(en),nn,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=B.getDataAttributes(this._element);for(const t of Object.keys(e))Ji.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=cn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(cn);const hn={...cn.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},dn={...cn.DefaultType,content:"(null|string|element|function)"};class un extends cn{static get Default(){return hn}static get DefaultType(){return dn}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn="click.bs.scrollspy",pn="active",gn="[href]",mn={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},_n={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class bn extends z{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return mn}static get DefaultType(){return _n}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(P.off(this._config.target,fn),P.on(this._config.target,fn,gn,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=Q.find(gn,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=Q.findOne(e.hash,this._element);a(t)&&(this._targetLinks.set(e.hash,e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(pn),this._activateParents(t),P.trigger(this._element,"activate.bs.scrollspy",{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))Q.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(pn);else for(const e of Q.parents(t,".nav, .list-group"))for(const t of Q.prev(e,".nav-link, .nav-item > .nav-link, .list-group-item"))t.classList.add(pn)}_clearActiveClass(t){t.classList.remove(pn);const e=Q.find("[href].active",t);for(const t of e)t.classList.remove(pn)}static jQueryInterface(t){return this.each((function(){const e=bn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(window,"load.bs.scrollspy.data-api",(()=>{for(const t of Q.find('[data-bs-spy="scroll"]'))bn.getOrCreateInstance(t)})),g(bn);const vn="ArrowLeft",yn="ArrowRight",wn="ArrowUp",An="ArrowDown",En="active",Tn="fade",Cn="show",On='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',xn=`.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle), ${On}`;class kn extends z{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),P.on(this._element,"keydown.bs.tab",(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?P.trigger(e,"hide.bs.tab",{relatedTarget:t}):null;P.trigger(t,"show.bs.tab",{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(En),this._activate(n(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),P.trigger(t,"shown.bs.tab",{relatedTarget:e})):t.classList.add(Cn)}),t,t.classList.contains(Tn)))}_deactivate(t,e){t&&(t.classList.remove(En),t.blur(),this._deactivate(n(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),P.trigger(t,"hidden.bs.tab",{relatedTarget:e})):t.classList.remove(Cn)}),t,t.classList.contains(Tn)))}_keydown(t){if(![vn,yn,wn,An].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=[yn,An].includes(t.key),i=b(this._getChildren().filter((t=>!l(t))),t.target,e,!0);i&&(i.focus({preventScroll:!0}),kn.getOrCreateInstance(i).show())}_getChildren(){return Q.find(xn,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=n(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=Q.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",En),n(".dropdown-menu",Cn),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(En)}_getInnerElement(t){return t.matches(xn)?t:Q.findOne(xn,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=kn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}P.on(document,"click.bs.tab",On,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||kn.getOrCreateInstance(this).show()})),P.on(window,"load.bs.tab",(()=>{for(const t of Q.find('.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]'))kn.getOrCreateInstance(t)})),g(kn);const Ln="hide",Dn="show",Sn="showing",In={animation:"boolean",autohide:"boolean",delay:"number"},Nn={animation:!0,autohide:!0,delay:5e3};class Pn extends z{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Nn}static get DefaultType(){return In}static get NAME(){return"toast"}show(){P.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Ln),d(this._element),this._element.classList.add(Dn,Sn),this._queueCallback((()=>{this._element.classList.remove(Sn),P.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(P.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(Sn),this._queueCallback((()=>{this._element.classList.add(Ln),this._element.classList.remove(Sn,Dn),P.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Dn),super.dispose()}isShown(){return this._element.classList.contains(Dn)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){P.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),P.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),P.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),P.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Pn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return q(Pn),g(Pn),{Alert:R,Button:K,Carousel:at,Collapse:pt,Dropdown:hi,Modal:Ni,Offcanvas:zi,Popover:un,ScrollSpy:bn,Tab:kn,Toast:Pn,Tooltip:cn}}));
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),i=e=>{e.dispatchEvent(new Event(t))},n=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),s=t=>n(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(e(t)):null,o=t=>{if(!n(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},r=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),a=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?a(t.parentNode):null},l=()=>{},c=t=>{t.offsetHeight},h=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,d=[],u=()=>"rtl"===document.documentElement.dir,f=t=>{var e;e=()=>{const e=h();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(d.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of d)t()})),d.push(e)):e()},p=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,m=(e,n,s=!0)=>{if(!s)return void p(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(n)+5;let r=!1;const a=({target:i})=>{i===n&&(r=!0,n.removeEventListener(t,a),p(e))};n.addEventListener(t,a),setTimeout((()=>{r||i(n)}),o)},g=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},_=/[^.]*(?=\..*)\.|.*/,b=/\..*/,v=/::\d+$/,y={};let w=1;const A={mouseenter:"mouseover",mouseleave:"mouseout"},E=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function T(t,e){return e&&`${e}::${w++}`||t.uidEvent||w++}function C(t){const e=T(t);return t.uidEvent=e,y[e]=y[e]||{},y[e]}function O(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function x(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=D(t);return E.has(o)||(o=t),[n,s,o]}function k(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=x(e,i,n);if(e in A){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=C(t),c=l[a]||(l[a]={}),h=O(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=T(r,e.replace(_,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return N(s,{delegateTarget:r}),n.oneOff&&I.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return N(n,{delegateTarget:t}),i.oneOff&&I.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function L(t,e,i,n,s){const o=O(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function S(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&L(t,e,i,r.callable,r.delegationSelector)}function D(t){return t=t.replace(b,""),A[t]||t}const I={on(t,e,i,n){k(t,e,i,n,!1)},one(t,e,i,n){k(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=x(e,i,n),a=r!==e,l=C(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))S(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(v,"");a&&!e.includes(s)||L(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;L(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=h();let s=null,o=!0,r=!0,a=!1;e!==D(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());let l=new Event(e,{bubbles:o,cancelable:!0});return l=N(l,i),a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function N(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}const P=new Map,j={set(t,e,i){P.has(t)||P.set(t,new Map);const n=P.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>P.has(t)&&P.get(t).get(e)||null,remove(t,e){if(!P.has(t))return;const i=P.get(t);i.delete(e),0===i.size&&P.delete(t)}};function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const H={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${F(e)}`))};class ${static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=n(e)?H.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...n(e)?H.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[s,o]of Object.entries(e)){const e=t[s],r=n(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${s}" provided type "${r}" but expected type "${o}".`)}var i}}class W extends ${constructor(t,e){super(),(t=s(t))&&(this._element=t,this._config=this._getConfig(e),j.set(this._element,this.constructor.DATA_KEY,this))}dispose(){j.remove(this._element,this.constructor.DATA_KEY),I.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){m(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return j.get(s(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.0-alpha1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let i=t.getAttribute("data-bs-target");if(!i||"#"===i){let e=t.getAttribute("href");if(!e||!e.includes("#")&&!e.startsWith("."))return null;e.includes("#")&&!e.startsWith("#")&&(e=`#${e.split("#")[1]}`),i=e&&"#"!==e?e.trim():null}return e(i)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!r(t)&&o(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;I.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),r(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))};class q extends W{static get NAME(){return"alert"}close(){if(I.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),I.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(q,"close"),f(q);const V='[data-bs-toggle="button"]';class K extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=K.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}I.on(document,"click.bs.button.data-api",V,(t=>{t.preventDefault();const e=t.target.closest(V);K.getOrCreateInstance(e).toggle()})),f(K);const Q={endCallback:null,leftCallback:null,rightCallback:null},X={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Y extends ${constructor(t,e){super(),this._element=t,t&&Y.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Q}static get DefaultType(){return X}static get NAME(){return"swipe"}dispose(){I.off(this._element,".bs.swipe")}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),p(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&p(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(I.on(this._element,"pointerdown.bs.swipe",(t=>this._start(t))),I.on(this._element,"pointerup.bs.swipe",(t=>this._end(t))),this._element.classList.add("pointer-event")):(I.on(this._element,"touchstart.bs.swipe",(t=>this._start(t))),I.on(this._element,"touchmove.bs.swipe",(t=>this._move(t))),I.on(this._element,"touchend.bs.swipe",(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const U="next",G="prev",J="left",Z="right",tt="slid.bs.carousel",et="carousel",it="active",nt={ArrowLeft:Z,ArrowRight:J},st={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class rt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===et&&this.cycle()}static get Default(){return st}static get DefaultType(){return ot}static get NAME(){return"carousel"}next(){this._slide(U)}nextWhenVisible(){!document.hidden&&o(this._element)&&this.next()}prev(){this._slide(G)}pause(){this._isSliding&&i(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?I.one(this._element,tt,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void I.one(this._element,tt,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?U:G;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&I.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(I.on(this._element,"mouseenter.bs.carousel",(()=>this.pause())),I.on(this._element,"mouseleave.bs.carousel",(()=>this._maybeEnableCycle()))),this._config.touch&&Y.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))I.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(J)),rightCallback:()=>this._slide(this._directionToOrder(Z)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new Y(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=nt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(it),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===U,s=e||g(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>I.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r("slide.bs.carousel").defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",h=n?"carousel-item-next":"carousel-item-prev";s.classList.add(h),c(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,h),s.classList.add(it),i.classList.remove(it,h,l),this._isSliding=!1,r(tt)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(".active.carousel-item",this._element)}_getItems(){return z.find(".carousel-item",this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return u()?t===J?G:U:t===J?U:G}_orderToDirection(t){return u()?t===G?J:Z:t===G?Z:J}static jQueryInterface(t){return this.each((function(){const e=rt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}I.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(et))return;t.preventDefault();const i=rt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===H.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),I.on(window,"load.bs.carousel.data-api",(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)rt.getOrCreateInstance(e)})),f(rt);const at="show",lt="collapse",ct="collapsing",ht='[data-bs-toggle="collapse"]',dt={parent:null,toggle:!0},ut={parent:"(null|element)",toggle:"boolean"};class ft extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(ht);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return dt}static get DefaultType(){return ut}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>ft.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(I.trigger(this._element,"show.bs.collapse").defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(lt),this._element.classList.add(ct),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ct),this._element.classList.add(lt,at),this._element.style[e]="",I.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(I.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,c(this._element),this._element.classList.add(ct),this._element.classList.remove(lt,at);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ct),this._element.classList.add(lt),I.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(at)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=s(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(ht);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(":scope .collapse .collapse",this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=ft.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}I.on(document,"click.bs.collapse.data-api",ht,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))ft.getOrCreateInstance(t,{toggle:!1}).toggle()})),f(ft);var pt="top",mt="bottom",gt="right",_t="left",bt="auto",vt=[pt,mt,gt,_t],yt="start",wt="end",At="clippingParents",Et="viewport",Tt="popper",Ct="reference",Ot=vt.reduce((function(t,e){return t.concat([e+"-"+yt,e+"-"+wt])}),[]),xt=[].concat(vt,[bt]).reduce((function(t,e){return t.concat([e,e+"-"+yt,e+"-"+wt])}),[]),kt="beforeRead",Lt="read",St="afterRead",Dt="beforeMain",It="main",Nt="afterMain",Pt="beforeWrite",jt="write",Mt="afterWrite",Ft=[kt,Lt,St,Dt,It,Nt,Pt,jt,Mt];function Ht(t){return t?(t.nodeName||"").toLowerCase():null}function $t(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Wt(t){return t instanceof $t(t).Element||t instanceof Element}function Bt(t){return t instanceof $t(t).HTMLElement||t instanceof HTMLElement}function zt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof $t(t).ShadowRoot||t instanceof ShadowRoot)}const Rt={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];Bt(s)&&Ht(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});Bt(n)&&Ht(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function qt(t){return t.split("-")[0]}var Vt=Math.max,Kt=Math.min,Qt=Math.round;function Xt(){var t=navigator.userAgentData;return null!=t&&t.brands?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Yt(){return!/^((?!chrome|android).)*safari/i.test(Xt())}function Ut(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&Bt(t)&&(s=t.offsetWidth>0&&Qt(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&Qt(n.height)/t.offsetHeight||1);var r=(Wt(t)?$t(t):window).visualViewport,a=!Yt()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Gt(t){var e=Ut(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Jt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&zt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Zt(t){return $t(t).getComputedStyle(t)}function te(t){return["table","td","th"].indexOf(Ht(t))>=0}function ee(t){return((Wt(t)?t.ownerDocument:t.document)||window.document).documentElement}function ie(t){return"html"===Ht(t)?t:t.assignedSlot||t.parentNode||(zt(t)?t.host:null)||ee(t)}function ne(t){return Bt(t)&&"fixed"!==Zt(t).position?t.offsetParent:null}function se(t){for(var e=$t(t),i=ne(t);i&&te(i)&&"static"===Zt(i).position;)i=ne(i);return i&&("html"===Ht(i)||"body"===Ht(i)&&"static"===Zt(i).position)?e:i||function(t){var e=/firefox/i.test(Xt());if(/Trident/i.test(Xt())&&Bt(t)&&"fixed"===Zt(t).position)return null;var i=ie(t);for(zt(i)&&(i=i.host);Bt(i)&&["html","body"].indexOf(Ht(i))<0;){var n=Zt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function oe(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function re(t,e,i){return Vt(t,Kt(e,i))}function ae(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function le(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const ce={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=qt(i.placement),l=oe(a),c=[_t,gt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return ae("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:le(t,vt))}(s.padding,i),d=Gt(o),u="y"===l?pt:_t,f="y"===l?mt:gt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=se(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=re(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Jt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function he(t){return t.split("-")[1]}var de={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ue(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=_t,y=pt,w=window;if(c){var A=se(i),E="clientHeight",T="clientWidth";A===$t(i)&&"static"!==Zt(A=ee(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===pt||(s===_t||s===gt)&&o===wt)&&(y=mt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==_t&&(s!==pt&&s!==mt||o!==wt)||(v=gt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&de),x=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:Qt(e*n)/n||0,y:Qt(i*n)/n||0}}({x:f,y:m}):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const fe={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:qt(e.placement),variation:he(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,ue(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,ue(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var pe={passive:!0};const me={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=$t(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,pe)})),a&&l.addEventListener("resize",i.update,pe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,pe)})),a&&l.removeEventListener("resize",i.update,pe)}},data:{}};var ge={left:"right",right:"left",bottom:"top",top:"bottom"};function _e(t){return t.replace(/left|right|bottom|top/g,(function(t){return ge[t]}))}var be={start:"end",end:"start"};function ve(t){return t.replace(/start|end/g,(function(t){return be[t]}))}function ye(t){var e=$t(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function we(t){return Ut(ee(t)).left+ye(t).scrollLeft}function Ae(t){var e=Zt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Ht(t))>=0?t.ownerDocument.body:Bt(t)&&Ae(t)?t:Ee(ie(t))}function Te(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=$t(n),r=s?[o].concat(o.visualViewport||[],Ae(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Te(ie(r)))}function Ce(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e,i){return e===Et?Ce(function(t,e){var i=$t(t),n=ee(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Yt();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+we(t),y:l}}(t,i)):Wt(e)?function(t,e){var i=Ut(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ce(function(t){var e,i=ee(t),n=ye(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=Vt(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=Vt(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+we(t),l=-n.scrollTop;return"rtl"===Zt(s||i).direction&&(a+=Vt(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(ee(t)))}function xe(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?qt(s):null,r=s?he(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case pt:e={x:a,y:i.y-n.height};break;case mt:e={x:a,y:i.y+i.height};break;case gt:e={x:i.x+i.width,y:l};break;case _t:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?oe(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case yt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case wt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?At:a,c=i.rootBoundary,h=void 0===c?Et:c,d=i.elementContext,u=void 0===d?Tt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=ae("number"!=typeof g?g:le(g,vt)),b=u===Tt?Ct:Tt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Te(ie(t)),i=["absolute","fixed"].indexOf(Zt(t).position)>=0&&Bt(t)?se(t):t;return Wt(i)?e.filter((function(t){return Wt(t)&&Jt(t,i)&&"body"!==Ht(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=Oe(t,i,n);return e.top=Vt(s.top,e.top),e.right=Kt(s.right,e.right),e.bottom=Kt(s.bottom,e.bottom),e.left=Vt(s.left,e.left),e}),Oe(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(Wt(y)?y:y.contextElement||ee(t.elements.popper),l,h,r),A=Ut(t.elements.reference),E=xe({reference:A,element:v,strategy:"absolute",placement:s}),T=Ce(Object.assign({},v,E)),C=u===Tt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Tt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[gt,mt].indexOf(t)>=0?1:-1,i=[pt,mt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?xt:l,h=he(n),d=h?a?Ot:Ot.filter((function(t){return he(t)===h})):vt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[qt(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const Se={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=qt(g),b=l||(_!==g&&p?function(t){if(qt(t)===bt)return[];var e=_e(t);return[ve(t),e,ve(e)]}(g):[_e(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(qt(i)===bt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C<v.length;C++){var O=v[C],x=qt(O),k=he(O)===yt,L=[pt,mt].indexOf(x)>=0,S=L?"width":"height",D=ke(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),I=L?k?gt:_t:k?mt:pt;y[S]>w[S]&&(I=_e(I));var N=_e(I),P=[];if(o&&P.push(D[x]<=0),a&&P.push(D[I]<=0,D[N]<=0),P.every((function(t){return t}))){T=O,E=!1;break}A.set(O,P)}if(E)for(var j=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Ie(t){return[pt,gt,mt,_t].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Ie(l),d=Ie(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Pe={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=xt.reduce((function(t,i){return t[i]=function(t,e,i){var n=qt(t),s=[_t,pt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[_t,gt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},je={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=xe({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Me={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=qt(e.placement),b=he(e.placement),v=!b,y=oe(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?pt:_t,D="y"===y?mt:gt,I="y"===y?"height":"width",N=A[y],P=N+g[S],j=N-g[D],M=f?-T[I]/2:0,F=b===yt?E[I]:T[I],H=b===yt?-T[I]:-E[I],$=e.elements.arrow,W=f&&$?Gt($):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=re(0,E[I],W[I]),V=v?E[I]/2-M-q-z-O.mainAxis:F-q-z-O.mainAxis,K=v?-E[I]/2+M+q+R+O.mainAxis:H+q+R+O.mainAxis,Q=e.elements.arrow&&se(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=N+K-Y,G=re(f?Kt(P,N+V-Y-X):P,N,f?Vt(j,U):j);A[y]=G,k[y]=G-N}if(a){var J,Z="x"===y?pt:_t,tt="x"===y?mt:gt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[pt,_t].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=re(t,e,i);return n>i?i:n}(at,et,lt):re(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function Fe(t,e,i){void 0===i&&(i=!1);var n,s,o=Bt(e),r=Bt(e)&&function(t){var e=t.getBoundingClientRect(),i=Qt(e.width)/t.offsetWidth||1,n=Qt(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=ee(e),l=Ut(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==Ht(e)||Ae(a))&&(c=(n=e)!==$t(n)&&Bt(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ye(n)),Bt(e)?((h=Ut(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=we(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var $e={placement:"bottom",modifiers:[],strategy:"absolute"};function We(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return!e.some((function(t){return!(t&&"function"==typeof t.getBoundingClientRect)}))}function Be(t){void 0===t&&(t={});var e=t,i=e.defaultModifiers,n=void 0===i?[]:i,s=e.defaultOptions,o=void 0===s?$e:s;return function(t,e,i){void 0===i&&(i=o);var s,r,a={placement:"bottom",orderedModifiers:[],options:Object.assign({},$e,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l=[],c=!1,h={state:a,setOptions:function(i){var s="function"==typeof i?i(a.options):i;d(),a.options=Object.assign({},o,a.options,s),a.scrollParents={reference:Wt(t)?Te(t):t.contextElement?Te(t.contextElement):[],popper:Te(e)};var r,c,u=function(t){var e=He(t);return Ft.reduce((function(t,i){return t.concat(e.filter((function(t){return t.phase===i})))}),[])}((r=[].concat(n,a.options.modifiers),c=r.reduce((function(t,e){var i=t[e.name];return t[e.name]=i?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t}),{}),Object.keys(c).map((function(t){return c[t]}))));return a.orderedModifiers=u.filter((function(t){return t.enabled})),a.orderedModifiers.forEach((function(t){var e=t.name,i=t.options,n=void 0===i?{}:i,s=t.effect;if("function"==typeof s){var o=s({state:a,name:e,instance:h,options:n});l.push(o||function(){})}})),h.update()},forceUpdate:function(){if(!c){var t=a.elements,e=t.reference,i=t.popper;if(We(e,i)){a.rects={reference:Fe(e,se(i),"fixed"===a.options.strategy),popper:Gt(i)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach((function(t){return a.modifiersData[t.name]=Object.assign({},t.data)}));for(var n=0;n<a.orderedModifiers.length;n++)if(!0!==a.reset){var s=a.orderedModifiers[n],o=s.fn,r=s.options,l=void 0===r?{}:r,d=s.name;"function"==typeof o&&(a=o({state:a,options:l,name:d,instance:h})||a)}else a.reset=!1,n=-1}}},update:(s=function(){return new Promise((function(t){h.forceUpdate(),t(a)}))},function(){return r||(r=new Promise((function(t){Promise.resolve().then((function(){r=void 0,t(s())}))}))),r}),destroy:function(){d(),c=!0}};if(!We(t,e))return h;function d(){l.forEach((function(t){return t()})),l=[]}return h.setOptions(i).then((function(t){!c&&i.onFirstUpdate&&i.onFirstUpdate(t)})),h}}var ze=Be(),Re=Be({defaultModifiers:[me,je,fe,Rt]}),qe=Be({defaultModifiers:[me,je,fe,Rt,Pe,Se,Me,ce,Ne]});const Ve=Object.freeze(Object.defineProperty({__proto__:null,popperGenerator:Be,detectOverflow:ke,createPopperBase:ze,createPopper:qe,createPopperLite:Re,top:pt,bottom:mt,right:gt,left:_t,auto:bt,basePlacements:vt,start:yt,end:wt,clippingParents:At,viewport:Et,popper:Tt,reference:Ct,variationPlacements:Ot,placements:xt,beforeRead:kt,read:Lt,afterRead:St,beforeMain:Dt,main:It,afterMain:Nt,beforeWrite:Pt,write:jt,afterWrite:Mt,modifierPhases:Ft,applyStyles:Rt,arrow:ce,computeStyles:fe,eventListeners:me,flip:Se,hide:Ne,offset:Pe,popperOffsets:je,preventOverflow:Me},Symbol.toStringTag,{value:"Module"})),Ke="dropdown",Qe="ArrowUp",Xe="ArrowDown",Ye="click.bs.dropdown.data-api",Ue="keydown.bs.dropdown.data-api",Ge="show",Je='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Ze=`${Je}.show`,ti=".dropdown-menu",ei=u()?"top-end":"top-start",ii=u()?"top-start":"top-end",ni=u()?"bottom-end":"bottom-start",si=u()?"bottom-start":"bottom-end",oi=u()?"left-start":"right-start",ri=u()?"right-start":"left-start",ai={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},li={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class ci extends W{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=z.next(this._element,ti)[0]||z.prev(this._element,ti)[0]||z.findOne(ti,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return ai}static get DefaultType(){return li}static get NAME(){return Ke}toggle(){return this._isShown()?this.hide():this.show()}show(){if(r(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!I.trigger(this._element,"show.bs.dropdown",t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))I.on(t,"mouseover",l);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Ge),this._element.classList.add(Ge),I.trigger(this._element,"shown.bs.dropdown",t)}}hide(){if(r(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!I.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))I.off(t,"mouseover",l);this._popper&&this._popper.destroy(),this._menu.classList.remove(Ge),this._element.classList.remove(Ge),this._element.setAttribute("aria-expanded","false"),H.removeDataAttribute(this._menu,"popper"),I.trigger(this._element,"hidden.bs.dropdown",t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!n(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ke.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===Ve)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:n(this._config.reference)?t=s(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=qe(t,this._menu,e)}_isShown(){return this._menu.classList.contains(Ge)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return oi;if(t.classList.contains("dropstart"))return ri;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ii:ei:e?si:ni}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(H.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...p(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>o(t)));i.length&&g(i,e,t===Xe,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=ci.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ze);for(const i of e){const e=ci.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Qe,Xe].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Je)?this:z.prev(this,Je)[0]||z.next(this,Je)[0]||z.findOne(Je,t.delegateTarget.parentNode),o=ci.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}I.on(document,Ue,Je,ci.dataApiKeydownHandler),I.on(document,Ue,ti,ci.dataApiKeydownHandler),I.on(document,Ye,ci.clearMenus),I.on(document,"keyup.bs.dropdown.data-api",ci.clearMenus),I.on(document,Ye,Je,(function(t){t.preventDefault(),ci.getOrCreateInstance(this).toggle()})),f(ci);const hi=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",di=".sticky-top",ui="padding-right",fi="margin-right";class pi{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,ui,(e=>e+t)),this._setElementAttributes(hi,ui,(e=>e+t)),this._setElementAttributes(di,fi,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,ui),this._resetElementAttributes(hi,ui),this._resetElementAttributes(di,fi)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&H.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=H.getDataAttribute(t,e);null!==i?(H.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(n(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const mi="show",gi="mousedown.bs.backdrop",_i={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},bi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class vi extends ${constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return _i}static get DefaultType(){return bi}static get NAME(){return"backdrop"}show(t){if(!this._config.isVisible)return void p(t);this._append();const e=this._getElement();this._config.isAnimated&&c(e),e.classList.add(mi),this._emulateAnimation((()=>{p(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(mi),this._emulateAnimation((()=>{this.dispose(),p(t)}))):p(t)}dispose(){this._isAppended&&(I.off(this._element,gi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=s(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),I.on(t,gi,(()=>{p(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){m(t,this._getElement(),this._config.isAnimated)}}const yi=".bs.focustrap",wi="backward",Ai={autofocus:!0,trapElement:null},Ei={autofocus:"boolean",trapElement:"element"};class Ti extends ${constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Ai}static get DefaultType(){return Ei}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),I.off(document,yi),I.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),I.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,I.off(document,yi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===wi?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?wi:"forward")}}const Ci="hidden.bs.modal",Oi="show.bs.modal",xi="modal-open",ki="show",Li="modal-static",Si={backdrop:!0,focus:!0,keyboard:!0},Di={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Ii extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new pi,this._addEventListeners()}static get Default(){return Si}static get DefaultType(){return Di}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||I.trigger(this._element,Oi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(xi),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(I.trigger(this._element,"hide.bs.modal").defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(ki),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const t of[window,this._dialog])I.off(t,".bs.modal");this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new vi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ti({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),c(this._element),this._element.classList.add(ki),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,I.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){I.on(this._element,"keydown.dismiss.bs.modal",(t=>{if("Escape"===t.key)return this._config.keyboard?(t.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),I.on(window,"resize.bs.modal",(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),I.on(this._element,"mousedown.dismiss.bs.modal",(t=>{I.one(this._element,"click.dismiss.bs.modal",(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(xi),this._resetAdjustments(),this._scrollBar.reset(),I.trigger(this._element,Ci)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(I.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Li)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Li),this._queueCallback((()=>{this._element.classList.remove(Li),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=u()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=u()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Ii.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}I.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),I.one(e,Oi,(t=>{t.defaultPrevented||I.one(e,Ci,(()=>{o(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&Ii.getInstance(i).hide(),Ii.getOrCreateInstance(e).toggle(this)})),R(Ii),f(Ii);const Ni="show",Pi="showing",ji="hiding",Mi=".offcanvas.show",Fi="hidePrevented.bs.offcanvas",Hi="hidden.bs.offcanvas",$i={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Bi extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return $i}static get DefaultType(){return Wi}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||I.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new pi).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Pi),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Ni),this._element.classList.remove(Pi),I.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(I.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(ji),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Ni,ji),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new pi).reset(),I.trigger(this._element,Hi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new vi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():I.trigger(this._element,Fi)}:null})}_initializeFocusTrap(){return new Ti({trapElement:this._element})}_addEventListeners(){I.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():I.trigger(this._element,Fi))}))}static jQueryInterface(t){return this.each((function(){const e=Bi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}I.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),r(this))return;I.one(e,Hi,(()=>{o(this)&&this.focus()}));const i=z.findOne(Mi);i&&i!==e&&Bi.getInstance(i).hide(),Bi.getOrCreateInstance(e).toggle(this)})),I.on(window,"load.bs.offcanvas.data-api",(()=>{for(const t of z.find(Mi))Bi.getOrCreateInstance(t).show()})),I.on(window,"resize.bs.offcanvas",(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Bi.getOrCreateInstance(t).hide()})),R(Bi),f(Bi);const zi=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Ri=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,qi=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Vi=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!zi.has(i)||Boolean(Ri.test(t.nodeValue)||qi.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Ki={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Qi={allowList:Ki,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},Xi={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Yi={entry:"(string|element|function|null)",selector:"(string|element)"};class Ui extends ${constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Qi}static get DefaultType(){return Xi}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Yi)}_setContent(t,e,i){const o=z.findOne(i,t);o&&((e=this._resolvePossibleFunction(e))?n(e)?this._putElementInTemplate(s(e),o):this._config.html?o.innerHTML=this._maybeSanitize(e):o.textContent=e:o.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Vi(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return p(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Gi=new Set(["sanitize","allowList","sanitizeFn"]),Ji="fade",Zi="show",tn=".modal",en="hide.bs.modal",nn="hover",sn="focus",on={AUTO:"auto",TOP:"top",RIGHT:u()?"left":"right",BOTTOM:"bottom",LEFT:u()?"right":"left"},rn={allowList:Ki,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},an={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class ln extends W{constructor(t,e){if(void 0===Ve)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return rn}static get DefaultType(){return an}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),I.off(this._element.closest(tn),en,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=I.trigger(this._element,this.constructor.eventName("show")),e=(a(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),I.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(Zi),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))I.on(t,"mouseover",l);this._queueCallback((()=>{I.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!I.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(Zi),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))I.off(t,"mouseover",l);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),I.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Ji,Zi),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(Ji),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Ui({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ji)}_isShown(){return this.tip&&this.tip.classList.contains(Zi)}_createPopper(t){const e=p(this._config.placement,[this,t,this._element]),i=on[e.toUpperCase()];return qe(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return p(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...p(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)I.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===nn?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===nn?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");I.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?sn:nn]=!0,e._enter()})),I.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?sn:nn]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},I.on(this._element.closest(tn),en,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=H.getDataAttributes(this._element);for(const t of Object.keys(e))Gi.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:s(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=ln.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}f(ln);const cn={...ln.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},hn={...ln.DefaultType,content:"(null|string|element|function)"};class dn extends ln{static get Default(){return cn}static get DefaultType(){return hn}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=dn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}f(dn);const un="click.bs.scrollspy",fn="active",pn="[href]",mn={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},gn={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class _n extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return mn}static get DefaultType(){return gn}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=s(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(I.off(this._config.target,un),I.on(this._config.target,un,pn,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(pn,this._config.target);for(const e of t){if(!e.hash||r(e))continue;const t=z.findOne(e.hash,this._element);o(t)&&(this._targetLinks.set(e.hash,e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(fn),this._activateParents(t),I.trigger(this._element,"activate.bs.scrollspy",{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(fn);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,".nav-link, .nav-item > .nav-link, .list-group-item"))t.classList.add(fn)}_clearActiveClass(t){t.classList.remove(fn);const e=z.find("[href].active",t);for(const t of e)t.classList.remove(fn)}static jQueryInterface(t){return this.each((function(){const e=_n.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}I.on(window,"load.bs.scrollspy.data-api",(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))_n.getOrCreateInstance(t)})),f(_n);const bn="ArrowLeft",vn="ArrowRight",yn="ArrowUp",wn="ArrowDown",An="active",En="fade",Tn="show",Cn='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',On=`.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle), ${Cn}`;class xn extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),I.on(this._element,"keydown.bs.tab",(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?I.trigger(e,"hide.bs.tab",{relatedTarget:t}):null;I.trigger(t,"show.bs.tab",{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(An),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),I.trigger(t,"shown.bs.tab",{relatedTarget:e})):t.classList.add(Tn)}),t,t.classList.contains(En)))}_deactivate(t,e){t&&(t.classList.remove(An),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),I.trigger(t,"hidden.bs.tab",{relatedTarget:e})):t.classList.remove(Tn)}),t,t.classList.contains(En)))}_keydown(t){if(![bn,vn,yn,wn].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=[vn,wn].includes(t.key),i=g(this._getChildren().filter((t=>!r(t))),t.target,e,!0);i&&(i.focus({preventScroll:!0}),xn.getOrCreateInstance(i).show())}_getChildren(){return z.find(On,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",An),n(".dropdown-menu",Tn),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(An)}_getInnerElement(t){return t.matches(On)?t:z.findOne(On,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}I.on(document,"click.bs.tab",Cn,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),r(this)||xn.getOrCreateInstance(this).show()})),I.on(window,"load.bs.tab",(()=>{for(const t of z.find('.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]'))xn.getOrCreateInstance(t)})),f(xn);const kn="hide",Ln="show",Sn="showing",Dn={animation:"boolean",autohide:"boolean",delay:"number"},In={animation:!0,autohide:!0,delay:5e3};class Nn extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return In}static get DefaultType(){return Dn}static get NAME(){return"toast"}show(){I.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(kn),c(this._element),this._element.classList.add(Ln,Sn),this._queueCallback((()=>{this._element.classList.remove(Sn),I.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(I.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(Sn),this._queueCallback((()=>{this._element.classList.add(kn),this._element.classList.remove(Sn,Ln),I.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Ln),super.dispose()}isShown(){return this._element.classList.contains(Ln)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){I.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),I.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),I.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),I.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Nn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Nn),f(Nn),{Alert:q,Button:K,Carousel:rt,Collapse:ft,Dropdown:ci,Modal:Ii,Offcanvas:Bi,Popover:dn,ScrollSpy:_n,Tab:xn,Toast:Nn,Tooltip:ln}}));
//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map
index 69926c2e5..768455fe3 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.bundle.min.js.map
@@ -1 +1 @@
-{"version":3,"names":["TRANSITION_END","getSelector","element","selector","getAttribute","hrefAttribute","includes","startsWith","split","trim","getSelectorFromElement","document","querySelector","getElementFromSelector","triggerTransitionEnd","dispatchEvent","Event","isElement","object","jquery","nodeType","getElement","length","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","window","jQuery","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","Object","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","call","this","handlers","previousFunction","replace","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","keys","on","one","inNamespace","isNamespace","elementEvent","slice","keyHandlers","trigger","args","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","entries","_unused","defineProperty","configurable","get","elementMap","Map","Data","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","toString","JSON","parse","decodeURIComponent","normalizeDataKey","chr","toLowerCase","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","prototype","match","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","static","getInstance","VERSION","enableDismissTrigger","component","method","clickEvent","tagName","getOrCreateInstance","Alert","close","_destroyElement","each","data","undefined","SELECTOR_DATA_TOGGLE","Button","toggle","button","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLID","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","eventName","_orderToDirection","isCycling","directionalClassName","orderClassName","_isAnimated","SELECTOR_ACTIVE","clearInterval","carousel","slideIndex","carousels","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","selectorElements","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","elements","forEach","styles","assign","effect","_ref2","initialStyles","position","options","strategy","margin","arrow","hasOwnProperty","attribute","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","item","brand","version","userAgent","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","height","visualViewport","addVisualOffsets","x","offsetLeft","y","offsetTop","getLayoutRect","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","len","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","offset","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","computeStyles$1","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","eventListeners","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","rect","getClientRectFromMixedType","clippingParent","html","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","sort","a","b","flip$1","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","reset","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","hide$1","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","visited","result","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","merged","orderModifiers","current","existing","m","_ref3$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","ARROW_UP_KEY","ARROW_DOWN_KEY","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","display","popperConfig","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","openToggles","context","composedPath","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","dataApiKeydownHandler","clearMenus","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","EVENT_HIDDEN","EVENT_SHOW","CLASS_NAME_OPEN","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","modalBody","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","OPEN_SELECTOR","EVENT_HIDE_PREVENTED","Offcanvas","blur","uriAttributes","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","attributeRegex","regex","DefaultAllowlist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","allowList","content","extraClass","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","floor","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","Popover","_getContent","EVENT_CLICK","SELECTOR_TARGET_LINKS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","id","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","activeNodes","spy","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","SELECTOR_INNER_ELEM","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/selector-engine.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(object)\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getElementFromSelector,\n getjQuery,\n getNextActiveElement,\n getSelectorFromElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const handlerKey of Object.keys(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const keyHandlers of Object.keys(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta) {\n for (const [key, value] of Object.entries(meta || {})) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index'\nimport Manipulator from '../dom/manipulator'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const property of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport { executeAfterTransition, getElement } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Config from './util/config'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.2.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config'\nimport EventHandler from '../dom/event-handler'\nimport { execute } from './index'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport Swipe from './util/swipe'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getSelectorFromElement,\n reflow\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n for (const element of selectorElements) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow } from './index'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isVisible\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer'\nimport { getElement, isElement } from '../util/index'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg(this) : arg\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'\nimport { DefaultAllowlist } from './util/sanitizer'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport TemplateFactory from './util/template-factory'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this.tip) {\n this.tip.remove()\n }\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = this._createPopper(tip)\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n tip.remove()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n\n this._disposePopper()\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, getNextActiveElement, isDisabled } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert'\nimport Button from './src/button'\nimport Carousel from './src/carousel'\nimport Collapse from './src/collapse'\nimport Dropdown from './src/dropdown'\nimport Modal from './src/modal'\nimport Offcanvas from './src/offcanvas'\nimport Popover from './src/popover'\nimport ScrollSpy from './src/scrollspy'\nimport Tab from './src/tab'\nimport Toast from './src/toast'\nimport Tooltip from './src/tooltip'\n\nexport default {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip\n}\n"],"mappings":"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"} \ No newline at end of file
+{"version":3,"names":["TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","triggerTransitionEnd","element","dispatchEvent","Event","isElement","object","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","Object","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","call","this","handlers","previousFunction","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","keys","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","_unused","defineProperty","configurable","get","elementMap","Map","Data","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","toString","JSON","parse","decodeURIComponent","normalizeDataKey","chr","toLowerCase","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","prototype","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","static","getInstance","VERSION","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","getOrCreateInstance","Alert","close","_destroyElement","each","data","undefined","SELECTOR_DATA_TOGGLE","Button","toggle","button","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLID","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","eventName","_orderToDirection","isCycling","directionalClassName","orderClassName","_isAnimated","SELECTOR_ACTIVE","clearInterval","carousel","slideIndex","carousels","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","top","bottom","right","left","auto","basePlacements","start","end","clippingParents","viewport","popper","reference","variationPlacements","reduce","acc","placement","placements","beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite","modifierPhases","getNodeName","nodeName","getWindow","node","ownerDocument","defaultView","isHTMLElement","HTMLElement","isShadowRoot","applyStyles$1","enabled","phase","_ref","state","elements","forEach","styles","assign","effect","_ref2","initialStyles","position","options","strategy","margin","arrow","hasOwnProperty","attribute","requires","getBasePlacement","round","getUAString","uaData","userAgentData","brands","item","brand","version","userAgent","isLayoutViewport","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","width","height","visualViewport","addVisualOffsets","x","offsetLeft","y","offsetTop","getLayoutRect","rootNode","isSameNode","host","isTableElement","getDocumentElement","getParentNode","assignedSlot","getTrueOffsetParent","offsetParent","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","getContainingBlock","getMainAxisFromPlacement","within","mathMax","mathMin","mergePaddingObject","paddingObject","expandToHashMap","hashMap","arrow$1","_state$modifiersData$","arrowElement","popperOffsets","modifiersData","basePlacement","axis","len","padding","rects","toPaddingObject","arrowRect","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","clientHeight","clientWidth","centerToReference","center","offset","axisProp","centerOffset","_options$element","requiresIfExists","getVariation","unsetSides","mapToStyles","_Object$assign2","popperRect","variation","offsets","gpuAcceleration","adaptive","roundOffsets","isFixed","_offsets$x","_offsets$y","_ref3","hasX","hasY","sideX","sideY","win","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","computeStyles$1","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","passive","eventListeners","_options$scroll","scroll","_options$resize","resize","scrollParents","scrollParent","update","hash","getOppositePlacement","matched","getOppositeVariationPlacement","getWindowScroll","scrollLeft","pageXOffset","scrollTop","pageYOffset","getWindowScrollBarX","isScrollParent","_getComputedStyle","overflow","overflowX","overflowY","getScrollParent","listScrollParents","_element$ownerDocumen","isBody","updatedList","rectToClientRect","rect","getClientRectFromMixedType","clippingParent","html","layoutViewport","getViewportRect","clientTop","clientLeft","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","getDocumentRect","computeOffsets","commonX","commonY","mainAxis","detectOverflow","_options","_options$placement","_options$strategy","_options$boundary","boundary","_options$rootBoundary","rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","mainClippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","getClippingRect","contextElement","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","computeAutoPlacement","flipVariations","_options$allowedAutoP","allowedAutoPlacements","allPlacements","allowedPlacements","overflows","sort","a","b","flip$1","_skip","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","referenceRect","checksMap","makeFallbackChecks","firstFittingPlacement","i","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","reset","getSideOffsets","preventedOffsets","isAnySideFullyClipped","some","side","hide$1","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","offset$1","_options$offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets$1","preventOverflow$1","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_len","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","getCompositeRect","elementOrVirtualElement","isOffsetParentAnElement","offsetParentIsScaled","isElementScaled","modifiers","visited","result","modifier","dep","depModifier","DEFAULT_OPTIONS","areValidElements","arguments","_key","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","pending","orderedModifiers","effectCleanupFns","isDestroyed","setOptions","setOptionsAction","cleanupModifierEffects","merged","orderModifiers","current","existing","m","_ref3$options","cleanupFn","forceUpdate","_state$elements","_state$orderedModifie","_state$orderedModifie2","Promise","resolve","then","destroy","onFirstUpdate","createPopper","computeStyles","applyStyles","flip","ARROW_UP_KEY","ARROW_DOWN_KEY","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","display","popperConfig","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","Popper","referenceElement","_getPopperConfig","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","_selectMenuItem","openToggles","context","composedPath","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","dataApiKeydownHandler","clearMenus","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","innerWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","isOverflowing","_saveInitialAttribute","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","shiftKey","EVENT_HIDDEN","EVENT_SHOW","CLASS_NAME_OPEN","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","modalBody","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","initialOverflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","OPEN_SELECTOR","EVENT_HIDE_PREVENTED","Offcanvas","blur","uriAttributes","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attributeName","nodeValue","attributeRegex","regex","DefaultAllowlist","area","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","allowList","content","extraClass","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","floor","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","Popover","_getContent","EVENT_CLICK","SELECTOR_TARGET_LINKS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","scrollTo","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","activeNodes","spy","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","SELECTOR_INNER_ELEM","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../node_modules/@popperjs/core/lib/enums.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../../node_modules/@popperjs/core/lib/utils/math.js","../../node_modules/@popperjs/core/lib/utils/userAgent.js","../../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../../node_modules/@popperjs/core/lib/dom-utils/contains.js","../../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../../node_modules/@popperjs/core/lib/utils/within.js","../../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../../node_modules/@popperjs/core/lib/modifiers/arrow.js","../../node_modules/@popperjs/core/lib/utils/getVariation.js","../../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../../node_modules/@popperjs/core/lib/modifiers/flip.js","../../node_modules/@popperjs/core/lib/modifiers/hide.js","../../node_modules/@popperjs/core/lib/modifiers/offset.js","../../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../../node_modules/@popperjs/core/lib/createPopper.js","../../node_modules/@popperjs/core/lib/utils/debounce.js","../../node_modules/@popperjs/core/lib/utils/mergeByName.js","../../node_modules/@popperjs/core/lib/popper-lite.js","../../node_modules/@popperjs/core/lib/popper.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index.js'\nimport Manipulator from '../dom/manipulator.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.0-alpha1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { isDisabled } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config.js'\nimport EventHandler from '../dom/event-handler.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Swipe from './util/swipe.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (process.env.NODE_ENV !== \"production\") {\n if (!isHTMLElement(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (process.env.NODE_ENV !== \"production\") {\n var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If <html> has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on <html>\n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (process.env.NODE_ENV !== \"production\") {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (process.env.NODE_ENV !== \"production\") {\n var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n validateModifiers(modifiers);\n\n if (getBasePlacement(state.options.placement) === auto) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = getComputedStyle(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (process.env.NODE_ENV !== \"production\") {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport BaseComponent from './base-component.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport BaseComponent from './base-component.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport Tooltip from './tooltip.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert.js'\nimport Button from './src/button.js'\nimport Carousel from './src/carousel.js'\nimport Collapse from './src/collapse.js'\nimport Dropdown from './src/dropdown.js'\nimport Modal from './src/modal.js'\nimport Offcanvas from './src/offcanvas.js'\nimport Popover from './src/popover.js'\nimport ScrollSpy from './src/scrollspy.js'\nimport Tab from './src/tab.js'\nimport Toast from './src/toast.js'\nimport Tooltip from './src/tooltip.js'\n\nexport default {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip\n}\n"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.esm.js b/vendor/twbs/bootstrap/dist/js/bootstrap.esm.js
index 66a976be2..3654018e0 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.esm.js
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.esm.js
@@ -1,5 +1,5 @@
/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -7,193 +7,146 @@ import * as Popper from '@popperjs/core';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/index.js
+ * Bootstrap (v5.3.0-alpha1): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
const MAX_UID = 1000000;
const MILLISECONDS_MULTIPLIER = 1000;
-const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)
+const TRANSITION_END = 'transitionend';
+/**
+ * Properly escape IDs selectors to handle weird IDs
+ * @param {string} selector
+ * @returns {string}
+ */
+const parseSelector = selector => {
+ if (selector && window.CSS && window.CSS.escape) {
+ // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
+ selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
+ }
+ return selector;
+};
+
+// Shout-out Angus Croll (https://goo.gl/pxwQGp)
const toType = object => {
if (object === null || object === undefined) {
return `${object}`;
}
-
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
};
+
/**
* Public Util API
*/
-
const getUID = prefix => {
do {
prefix += Math.floor(Math.random() * MAX_UID);
} while (document.getElementById(prefix));
-
return prefix;
};
-
-const getSelector = element => {
- let selector = element.getAttribute('data-bs-target');
-
- if (!selector || selector === '#') {
- let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
- // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
- // `document.querySelector` will rightfully complain it is invalid.
- // See https://github.com/twbs/bootstrap/issues/32273
-
- if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
- return null;
- } // Just in case some CMS puts out a full URL with the anchor appended
-
-
- if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
- hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
- }
-
- selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
- }
-
- return selector;
-};
-
-const getSelectorFromElement = element => {
- const selector = getSelector(element);
-
- if (selector) {
- return document.querySelector(selector) ? selector : null;
- }
-
- return null;
-};
-
-const getElementFromSelector = element => {
- const selector = getSelector(element);
- return selector ? document.querySelector(selector) : null;
-};
-
const getTransitionDurationFromElement = element => {
if (!element) {
return 0;
- } // Get transition-duration of the element
-
+ }
+ // Get transition-duration of the element
let {
transitionDuration,
transitionDelay
} = window.getComputedStyle(element);
const floatTransitionDuration = Number.parseFloat(transitionDuration);
- const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
+ const floatTransitionDelay = Number.parseFloat(transitionDelay);
+ // Return 0 if element or transition duration is not found
if (!floatTransitionDuration && !floatTransitionDelay) {
return 0;
- } // If multiple durations are defined, take the first
-
+ }
+ // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
transitionDelay = transitionDelay.split(',')[0];
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
};
-
const triggerTransitionEnd = element => {
element.dispatchEvent(new Event(TRANSITION_END));
};
-
const isElement = object => {
if (!object || typeof object !== 'object') {
return false;
}
-
if (typeof object.jquery !== 'undefined') {
object = object[0];
}
-
return typeof object.nodeType !== 'undefined';
};
-
const getElement = object => {
// it's a jQuery object or a node element
if (isElement(object)) {
return object.jquery ? object[0] : object;
}
-
if (typeof object === 'string' && object.length > 0) {
- return document.querySelector(object);
+ return document.querySelector(parseSelector(object));
}
-
return null;
};
-
const isVisible = element => {
if (!isElement(element) || element.getClientRects().length === 0) {
return false;
}
-
- const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed
-
+ const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
+ // Handle `details` element as its content may falsie appear visible when it is closed
const closedDetails = element.closest('details:not([open])');
-
if (!closedDetails) {
return elementIsVisible;
}
-
if (closedDetails !== element) {
const summary = element.closest('summary');
-
if (summary && summary.parentNode !== closedDetails) {
return false;
}
-
if (summary === null) {
return false;
}
}
-
return elementIsVisible;
};
-
const isDisabled = element => {
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
return true;
}
-
if (element.classList.contains('disabled')) {
return true;
}
-
if (typeof element.disabled !== 'undefined') {
return element.disabled;
}
-
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
};
-
const findShadowRoot = element => {
if (!document.documentElement.attachShadow) {
return null;
- } // Can find the shadow root otherwise it'll return the document
-
+ }
+ // Can find the shadow root otherwise it'll return the document
if (typeof element.getRootNode === 'function') {
const root = element.getRootNode();
return root instanceof ShadowRoot ? root : null;
}
-
if (element instanceof ShadowRoot) {
return element;
- } // when we don't find a shadow root
-
+ }
+ // when we don't find a shadow root
if (!element.parentNode) {
return null;
}
-
return findShadowRoot(element.parentNode);
};
-
const noop = () => {};
+
/**
* Trick to restart an element's animation
*
@@ -202,8 +155,6 @@ const noop = () => {};
*
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
*/
-
-
const reflow = element => {
element.offsetHeight; // eslint-disable-line no-unused-expressions
};
@@ -212,12 +163,9 @@ const getjQuery = () => {
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return window.jQuery;
}
-
return null;
};
-
const DOMContentLoadedCallbacks = [];
-
const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') {
// add listener on the first call when the document is in loading state
@@ -228,26 +176,21 @@ const onDOMContentLoaded = callback => {
}
});
}
-
DOMContentLoadedCallbacks.push(callback);
} else {
callback();
}
};
-
const isRTL = () => document.documentElement.dir === 'rtl';
-
const defineJQueryPlugin = plugin => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
-
if ($) {
const name = plugin.NAME;
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
-
$.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
@@ -255,35 +198,27 @@ const defineJQueryPlugin = plugin => {
}
});
};
-
-const execute = callback => {
- if (typeof callback === 'function') {
- callback();
- }
+const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+ return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
};
-
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
if (!waitForTransition) {
execute(callback);
return;
}
-
const durationPadding = 5;
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
let called = false;
-
const handler = ({
target
}) => {
if (target !== transitionElement) {
return;
}
-
called = true;
transitionElement.removeEventListener(TRANSITION_END, handler);
execute(callback);
};
-
transitionElement.addEventListener(TRANSITION_END, handler);
setTimeout(() => {
if (!called) {
@@ -291,6 +226,7 @@ const executeAfterTransition = (callback, transitionElement, waitForTransition =
}
}, emulatedDuration);
};
+
/**
* Return the previous/next element of a list.
*
@@ -300,32 +236,29 @@ const executeAfterTransition = (callback, transitionElement, waitForTransition =
* @param isCycleAllowed
* @return {Element|elem} The proper element
*/
-
-
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
const listLength = list.length;
- let index = list.indexOf(activeElement); // if the element does not exist in the list return an element
- // depending on the direction and if cycle is allowed
+ let index = list.indexOf(activeElement);
+ // if the element does not exist in the list return an element
+ // depending on the direction and if cycle is allowed
if (index === -1) {
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
}
-
index += shouldGetNext ? 1 : -1;
-
if (isCycleAllowed) {
index = (index + listLength) % listLength;
}
-
return list[Math.max(0, Math.min(index, listLength - 1))];
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/event-handler.js
+ * Bootstrap (v5.3.0-alpha1): dom/event-handler.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -334,13 +267,13 @@ const namespaceRegex = /[^.]*(?=\..*)\.|.*/;
const stripNameRegex = /\..*/;
const stripUidRegex = /::\d+$/;
const eventRegistry = {}; // Events storage
-
let uidEvent = 1;
const customEvents = {
mouseenter: 'mouseover',
mouseleave: 'mouseout'
};
const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
+
/**
* Private methods
*/
@@ -348,32 +281,26 @@ const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'cont
function makeEventUid(element, uid) {
return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
}
-
function getElementEvents(element) {
const uid = makeEventUid(element);
element.uidEvent = uid;
eventRegistry[uid] = eventRegistry[uid] || {};
return eventRegistry[uid];
}
-
function bootstrapHandler(element, fn) {
return function handler(event) {
hydrateObj(event, {
delegateTarget: element
});
-
if (handler.oneOff) {
EventHandler.off(element, event.type, fn);
}
-
return fn.apply(element, [event]);
};
}
-
function bootstrapDelegationHandler(element, selector, fn) {
return function handler(event) {
const domElements = element.querySelectorAll(selector);
-
for (let {
target
} = event; target && target !== this; target = target.parentNode) {
@@ -381,46 +308,38 @@ function bootstrapDelegationHandler(element, selector, fn) {
if (domElement !== target) {
continue;
}
-
hydrateObj(event, {
delegateTarget: target
});
-
if (handler.oneOff) {
EventHandler.off(element, event.type, selector, fn);
}
-
return fn.apply(target, [event]);
}
}
};
}
-
function findHandler(events, callable, delegationSelector = null) {
return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
}
-
function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
- const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check
-
+ const isDelegated = typeof handler === 'string';
+ // todo: tooltip passes `false` instead of selector, so we need to check
const callable = isDelegated ? delegationFunction : handler || delegationFunction;
let typeEvent = getTypeEvent(originalTypeEvent);
-
if (!nativeEvents.has(typeEvent)) {
typeEvent = originalTypeEvent;
}
-
return [isDelegated, callable, typeEvent];
}
-
function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
+ let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
- let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
+ // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
// this prevents the handler from being dispatched the same way as mouseover or mouseout does
-
if (originalTypeEvent in customEvents) {
const wrapFunction = fn => {
return function (event) {
@@ -429,19 +348,15 @@ function addHandler(element, originalTypeEvent, handler, delegationFunction, one
}
};
};
-
callable = wrapFunction(callable);
}
-
const events = getElementEvents(element);
const handlers = events[typeEvent] || (events[typeEvent] = {});
const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
-
if (previousFunction) {
previousFunction.oneOff = previousFunction.oneOff && oneOff;
return;
}
-
const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
fn.delegationSelector = isDelegated ? handler : null;
@@ -451,86 +366,67 @@ function addHandler(element, originalTypeEvent, handler, delegationFunction, one
handlers[uid] = fn;
element.addEventListener(typeEvent, fn, isDelegated);
}
-
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
const fn = findHandler(events[typeEvent], handler, delegationSelector);
-
if (!fn) {
return;
}
-
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
delete events[typeEvent][fn.uidEvent];
}
-
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
const storeElementEvent = events[typeEvent] || {};
-
- for (const handlerKey of Object.keys(storeElementEvent)) {
+ for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
if (handlerKey.includes(namespace)) {
- const event = storeElementEvent[handlerKey];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
}
}
}
-
function getTypeEvent(event) {
// allow to get the native events from namespaced events ('click.bs.button' --> 'click')
event = event.replace(stripNameRegex, '');
return customEvents[event] || event;
}
-
const EventHandler = {
on(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, false);
},
-
one(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, true);
},
-
off(element, originalTypeEvent, handler, delegationFunction) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
-
const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
const inNamespace = typeEvent !== originalTypeEvent;
const events = getElementEvents(element);
const storeElementEvent = events[typeEvent] || {};
const isNamespace = originalTypeEvent.startsWith('.');
-
if (typeof callable !== 'undefined') {
// Simplest case: handler is passed, remove that listener ONLY.
if (!Object.keys(storeElementEvent).length) {
return;
}
-
removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
return;
}
-
if (isNamespace) {
for (const elementEvent of Object.keys(events)) {
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
}
}
-
- for (const keyHandlers of Object.keys(storeElementEvent)) {
+ for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
const handlerKey = keyHandlers.replace(stripUidRegex, '');
-
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
- const event = storeElementEvent[keyHandlers];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
}
}
},
-
trigger(element, event, args) {
if (typeof event !== 'string' || !element) {
return null;
}
-
const $ = getjQuery();
const typeEvent = getTypeEvent(event);
const inNamespace = event !== typeEvent;
@@ -538,7 +434,6 @@ const EventHandler = {
let bubbles = true;
let nativeDispatch = true;
let defaultPrevented = false;
-
if (inNamespace && $) {
jQueryEvent = $.Event(event, args);
$(element).trigger(jQueryEvent);
@@ -546,52 +441,42 @@ const EventHandler = {
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
defaultPrevented = jQueryEvent.isDefaultPrevented();
}
-
let evt = new Event(event, {
bubbles,
cancelable: true
});
evt = hydrateObj(evt, args);
-
if (defaultPrevented) {
evt.preventDefault();
}
-
if (nativeDispatch) {
element.dispatchEvent(evt);
}
-
if (evt.defaultPrevented && jQueryEvent) {
jQueryEvent.preventDefault();
}
-
return evt;
}
-
};
-
-function hydrateObj(obj, meta) {
- for (const [key, value] of Object.entries(meta || {})) {
+function hydrateObj(obj, meta = {}) {
+ for (const [key, value] of Object.entries(meta)) {
try {
obj[key] = value;
} catch (_unused) {
Object.defineProperty(obj, key, {
configurable: true,
-
get() {
return value;
}
-
});
}
}
-
return obj;
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/data.js
+ * Bootstrap (v5.3.0-alpha1): dom/data.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -599,124 +484,108 @@ function hydrateObj(obj, meta) {
/**
* Constants
*/
+
const elementMap = new Map();
const Data = {
set(element, key, instance) {
if (!elementMap.has(element)) {
elementMap.set(element, new Map());
}
+ const instanceMap = elementMap.get(element);
- const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
+ // make it clear we only want one instance per element
// can be removed later when multiple key/instances are fine to be used
-
if (!instanceMap.has(key) && instanceMap.size !== 0) {
// eslint-disable-next-line no-console
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
return;
}
-
instanceMap.set(key, instance);
},
-
get(element, key) {
if (elementMap.has(element)) {
return elementMap.get(element).get(key) || null;
}
-
return null;
},
-
remove(element, key) {
if (!elementMap.has(element)) {
return;
}
-
const instanceMap = elementMap.get(element);
- instanceMap.delete(key); // free up element references if there are no instances left for an element
+ instanceMap.delete(key);
+ // free up element references if there are no instances left for an element
if (instanceMap.size === 0) {
elementMap.delete(element);
}
}
-
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/manipulator.js
+ * Bootstrap (v5.3.0-alpha1): dom/manipulator.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
function normalizeData(value) {
if (value === 'true') {
return true;
}
-
if (value === 'false') {
return false;
}
-
if (value === Number(value).toString()) {
return Number(value);
}
-
if (value === '' || value === 'null') {
return null;
}
-
if (typeof value !== 'string') {
return value;
}
-
try {
return JSON.parse(decodeURIComponent(value));
} catch (_unused) {
return value;
}
}
-
function normalizeDataKey(key) {
return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
}
-
const Manipulator = {
setDataAttribute(element, key, value) {
element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
},
-
removeDataAttribute(element, key) {
element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
},
-
getDataAttributes(element) {
if (!element) {
return {};
}
-
const attributes = {};
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
-
for (const key of bsKeys) {
let pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]);
}
-
return attributes;
},
-
getDataAttribute(element, key) {
return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
}
-
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/config.js
+ * Bootstrap (v5.3.0-alpha1): util/config.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Class definition
*/
@@ -726,63 +595,55 @@ class Config {
static get Default() {
return {};
}
-
static get DefaultType() {
return {};
}
-
static get NAME() {
throw new Error('You have to implement the static method "NAME", for each component!');
}
-
_getConfig(config) {
config = this._mergeConfigObj(config);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
}
-
_configAfterMerge(config) {
return config;
}
-
_mergeConfigObj(config, element) {
const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
- return { ...this.constructor.Default,
+ return {
+ ...this.constructor.Default,
...(typeof jsonConfig === 'object' ? jsonConfig : {}),
...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),
...(typeof config === 'object' ? config : {})
};
}
-
_typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
- for (const property of Object.keys(configTypes)) {
- const expectedTypes = configTypes[property];
+ for (const [property, expectedTypes] of Object.entries(configTypes)) {
const value = config[property];
const valueType = isElement(value) ? 'element' : toType(value);
-
if (!new RegExp(expectedTypes).test(valueType)) {
throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
}
}
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): base-component.js
+ * Bootstrap (v5.3.0-alpha1): base-component.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
-const VERSION = '5.2.2';
+const VERSION = '5.3.0-alpha1';
+
/**
* Class definition
*/
@@ -791,73 +652,147 @@ class BaseComponent extends Config {
constructor(element, config) {
super();
element = getElement(element);
-
if (!element) {
return;
}
-
this._element = element;
this._config = this._getConfig(config);
Data.set(this._element, this.constructor.DATA_KEY, this);
- } // Public
-
+ }
+ // Public
dispose() {
Data.remove(this._element, this.constructor.DATA_KEY);
EventHandler.off(this._element, this.constructor.EVENT_KEY);
-
for (const propertyName of Object.getOwnPropertyNames(this)) {
this[propertyName] = null;
}
}
-
_queueCallback(callback, element, isAnimated = true) {
executeAfterTransition(callback, element, isAnimated);
}
-
_getConfig(config) {
config = this._mergeConfigObj(config, this._element);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
- } // Static
-
+ }
+ // Static
static getInstance(element) {
return Data.get(getElement(element), this.DATA_KEY);
}
-
static getOrCreateInstance(element, config = {}) {
return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
}
-
static get VERSION() {
return VERSION;
}
-
static get DATA_KEY() {
return `bs.${this.NAME}`;
}
-
static get EVENT_KEY() {
return `.${this.DATA_KEY}`;
}
-
static eventName(name) {
return `${name}${this.EVENT_KEY}`;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/component-functions.js
+ * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+const getSelector = element => {
+ let selector = element.getAttribute('data-bs-target');
+ if (!selector || selector === '#') {
+ let hrefAttribute = element.getAttribute('href');
+
+ // The only valid content that could double as a selector are IDs or classes,
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
+ // `document.querySelector` will rightfully complain it is invalid.
+ // See https://github.com/twbs/bootstrap/issues/32273
+ if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
+ return null;
+ }
+
+ // Just in case some CMS puts out a full URL with the anchor appended
+ if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
+ hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
+ }
+ selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
+ }
+ return parseSelector(selector);
+};
+const SelectorEngine = {
+ find(selector, element = document.documentElement) {
+ return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
+ },
+ findOne(selector, element = document.documentElement) {
+ return Element.prototype.querySelector.call(element, selector);
+ },
+ children(element, selector) {
+ return [].concat(...element.children).filter(child => child.matches(selector));
+ },
+ parents(element, selector) {
+ const parents = [];
+ let ancestor = element.parentNode.closest(selector);
+ while (ancestor) {
+ parents.push(ancestor);
+ ancestor = ancestor.parentNode.closest(selector);
+ }
+ return parents;
+ },
+ prev(element, selector) {
+ let previous = element.previousElementSibling;
+ while (previous) {
+ if (previous.matches(selector)) {
+ return [previous];
+ }
+ previous = previous.previousElementSibling;
+ }
+ return [];
+ },
+ // TODO: this is now unused; remove later along with prev()
+ next(element, selector) {
+ let next = element.nextElementSibling;
+ while (next) {
+ if (next.matches(selector)) {
+ return [next];
+ }
+ next = next.nextElementSibling;
+ }
+ return [];
+ },
+ focusableChildren(element) {
+ const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
+ return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
+ },
+ getSelectorFromElement(element) {
+ const selector = getSelector(element);
+ if (selector) {
+ return SelectorEngine.findOne(selector) ? selector : null;
+ }
+ return null;
+ },
+ getElementFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.findOne(selector) : null;
+ },
+ getMultipleElementsFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.find(selector) : [];
+ }
+};
+/**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v5.3.0-alpha1): util/component-functions.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
const enableDismissTrigger = (component, method = 'hide') => {
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
const name = component.NAME;
@@ -865,24 +800,24 @@ const enableDismissTrigger = (component, method = 'hide') => {
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
if (isDisabled(this)) {
return;
}
+ const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
+ const instance = component.getOrCreateInstance(target);
- const target = getElementFromSelector(this) || this.closest(`.${name}`);
- const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
-
+ // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
instance[method]();
});
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): alert.js
+ * Bootstrap (v5.3.0-alpha1): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -894,6 +829,7 @@ const EVENT_CLOSE = `close${EVENT_KEY$b}`;
const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
const CLASS_NAME_FADE$5 = 'fade';
const CLASS_NAME_SHOW$8 = 'show';
+
/**
* Class definition
*/
@@ -902,55 +838,47 @@ class Alert extends BaseComponent {
// Getters
static get NAME() {
return NAME$f;
- } // Public
-
+ }
+ // Public
close() {
const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
-
if (closeEvent.defaultPrevented) {
return;
}
-
this._element.classList.remove(CLASS_NAME_SHOW$8);
-
const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
-
this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
- } // Private
-
+ }
+ // Private
_destroyElement() {
this._element.remove();
-
EventHandler.trigger(this._element, EVENT_CLOSED);
this.dispose();
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Alert.getOrCreateInstance(this);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
});
}
-
}
+
/**
* Data API implementation
*/
-
enableDismissTrigger(Alert, 'close');
+
/**
* jQuery
*/
@@ -959,10 +887,11 @@ defineJQueryPlugin(Alert);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): button.js
+ * Bootstrap (v5.3.0-alpha1): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -974,6 +903,7 @@ const DATA_API_KEY$6 = '.data-api';
const CLASS_NAME_ACTIVE$3 = 'active';
const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
+
/**
* Class definition
*/
@@ -982,37 +912,36 @@ class Button extends BaseComponent {
// Getters
static get NAME() {
return NAME$e;
- } // Public
-
+ }
+ // Public
toggle() {
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Button.getOrCreateInstance(this);
-
if (config === 'toggle') {
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
event.preventDefault();
const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
const data = Button.getOrCreateInstance(button);
data.toggle();
});
+
/**
* jQuery
*/
@@ -1021,81 +950,11 @@ defineJQueryPlugin(Button);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/selector-engine.js
+ * Bootstrap (v5.3.0-alpha1): util/swipe.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-/**
- * Constants
- */
-
-const SelectorEngine = {
- find(selector, element = document.documentElement) {
- return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
- },
-
- findOne(selector, element = document.documentElement) {
- return Element.prototype.querySelector.call(element, selector);
- },
-
- children(element, selector) {
- return [].concat(...element.children).filter(child => child.matches(selector));
- },
-
- parents(element, selector) {
- const parents = [];
- let ancestor = element.parentNode.closest(selector);
-
- while (ancestor) {
- parents.push(ancestor);
- ancestor = ancestor.parentNode.closest(selector);
- }
-
- return parents;
- },
-
- prev(element, selector) {
- let previous = element.previousElementSibling;
-
- while (previous) {
- if (previous.matches(selector)) {
- return [previous];
- }
-
- previous = previous.previousElementSibling;
- }
-
- return [];
- },
- // TODO: this is now unused; remove later along with prev()
- next(element, selector) {
- let next = element.nextElementSibling;
-
- while (next) {
- if (next.matches(selector)) {
- return [next];
- }
-
- next = next.nextElementSibling;
- }
-
- return [];
- },
-
- focusableChildren(element) {
- const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
- return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
- }
-
-};
-
-/**
- * --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/swipe.js
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- * --------------------------------------------------------------------------
- */
/**
* Constants
*/
@@ -1121,6 +980,7 @@ const DefaultType$c = {
leftCallback: '(function|null)',
rightCallback: '(function|null)'
};
+
/**
* Class definition
*/
@@ -1129,84 +989,67 @@ class Swipe extends Config {
constructor(element, config) {
super();
this._element = element;
-
if (!element || !Swipe.isSupported()) {
return;
}
-
this._config = this._getConfig(config);
this._deltaX = 0;
this._supportPointerEvents = Boolean(window.PointerEvent);
-
this._initEvents();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$c;
}
-
static get DefaultType() {
return DefaultType$c;
}
-
static get NAME() {
return NAME$d;
- } // Public
-
+ }
+ // Public
dispose() {
EventHandler.off(this._element, EVENT_KEY$9);
- } // Private
-
+ }
+ // Private
_start(event) {
if (!this._supportPointerEvents) {
this._deltaX = event.touches[0].clientX;
return;
}
-
if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX;
}
}
-
_end(event) {
if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX - this._deltaX;
}
-
this._handleSwipe();
-
execute(this._config.endCallback);
}
-
_move(event) {
this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
}
-
_handleSwipe() {
const absDeltaX = Math.abs(this._deltaX);
-
if (absDeltaX <= SWIPE_THRESHOLD) {
return;
}
-
const direction = absDeltaX / this._deltaX;
this._deltaX = 0;
-
if (!direction) {
return;
}
-
execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
}
-
_initEvents() {
if (this._supportPointerEvents) {
EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
-
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
} else {
EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
@@ -1214,24 +1057,23 @@ class Swipe extends Config {
EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
}
}
-
_eventIsPointerPenTouch(event) {
return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
- } // Static
-
+ }
+ // Static
static isSupported() {
return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): carousel.js
+ * Bootstrap (v5.3.0-alpha1): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -1291,6 +1133,7 @@ const DefaultType$b = {
touch: 'boolean',
wrap: 'boolean'
};
+
/**
* Class definition
*/
@@ -1304,32 +1147,27 @@ class Carousel extends BaseComponent {
this.touchTimeout = null;
this._swipeHelper = null;
this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
-
this._addEventListeners();
-
if (this._config.ride === CLASS_NAME_CAROUSEL) {
this.cycle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$b;
}
-
static get DefaultType() {
return DefaultType$b;
}
-
static get NAME() {
return NAME$c;
- } // Public
-
+ }
+ // Public
next() {
this._slide(ORDER_NEXT);
}
-
nextWhenVisible() {
// FIXME TODO use `document.visibilityState`
// Don't call next when the page isn't visible
@@ -1338,101 +1176,80 @@ class Carousel extends BaseComponent {
this.next();
}
}
-
prev() {
this._slide(ORDER_PREV);
}
-
pause() {
if (this._isSliding) {
triggerTransitionEnd(this._element);
}
-
this._clearInterval();
}
-
cycle() {
this._clearInterval();
-
this._updateInterval();
-
this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
}
-
_maybeEnableCycle() {
if (!this._config.ride) {
return;
}
-
if (this._isSliding) {
EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
return;
}
-
this.cycle();
}
-
to(index) {
const items = this._getItems();
-
if (index > items.length - 1 || index < 0) {
return;
}
-
if (this._isSliding) {
EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
return;
}
-
const activeIndex = this._getItemIndex(this._getActive());
-
if (activeIndex === index) {
return;
}
-
const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
-
this._slide(order, items[index]);
}
-
dispose() {
if (this._swipeHelper) {
this._swipeHelper.dispose();
}
-
super.dispose();
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
config.defaultInterval = config.interval;
return config;
}
-
_addEventListeners() {
if (this._config.keyboard) {
EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));
}
-
if (this._config.pause === 'hover') {
EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
}
-
if (this._config.touch && Swipe.isSupported()) {
this._addTouchEventListeners();
}
}
-
_addTouchEventListeners() {
for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
}
-
const endCallBack = () => {
if (this._config.pause !== 'hover') {
return;
- } // If it's a touch-enabled device, mouseenter/leave are fired as
+ }
+
+ // If it's a touch-enabled device, mouseenter/leave are fired as
// part of the mouse compatibility events on first tap - the carousel
// would stop cycling until user tapped out of it;
// here, we listen for touchend, explicitly pause the carousel
@@ -1440,16 +1257,12 @@ class Carousel extends BaseComponent {
// is NOT fired) and after a timeout (to allow for mouse compatibility
// events to fire) we explicitly restart cycling
-
this.pause();
-
if (this.touchTimeout) {
clearTimeout(this.touchTimeout);
}
-
this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
};
-
const swipeConfig = {
leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
@@ -1457,68 +1270,51 @@ class Carousel extends BaseComponent {
};
this._swipeHelper = new Swipe(this._element, swipeConfig);
}
-
_keydown(event) {
if (/input|textarea/i.test(event.target.tagName)) {
return;
}
-
const direction = KEY_TO_DIRECTION[event.key];
-
if (direction) {
event.preventDefault();
-
this._slide(this._directionToOrder(direction));
}
}
-
_getItemIndex(element) {
return this._getItems().indexOf(element);
}
-
_setActiveIndicatorElement(index) {
if (!this._indicatorsElement) {
return;
}
-
const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
activeIndicator.removeAttribute('aria-current');
const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
-
if (newActiveIndicator) {
newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
newActiveIndicator.setAttribute('aria-current', 'true');
}
}
-
_updateInterval() {
const element = this._activeElement || this._getActive();
-
if (!element) {
return;
}
-
const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
this._config.interval = elementInterval || this._config.defaultInterval;
}
-
_slide(order, element = null) {
if (this._isSliding) {
return;
}
-
const activeElement = this._getActive();
-
const isNext = order === ORDER_NEXT;
const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
-
if (nextElement === activeElement) {
return;
}
-
const nextElementIndex = this._getItemIndex(nextElement);
-
const triggerEvent = eventName => {
return EventHandler.trigger(this._element, eventName, {
relatedTarget: nextElement,
@@ -1527,25 +1323,19 @@ class Carousel extends BaseComponent {
to: nextElementIndex
});
};
-
const slideEvent = triggerEvent(EVENT_SLIDE);
-
if (slideEvent.defaultPrevented) {
return;
}
-
if (!activeElement || !nextElement) {
// Some weirdness is happening, so we bail
// todo: change tests that use empty divs to avoid this check
return;
}
-
const isCycling = Boolean(this._interval);
this.pause();
this._isSliding = true;
-
this._setActiveIndicatorElement(nextElementIndex);
-
this._activeElement = nextElement;
const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
@@ -1553,7 +1343,6 @@ class Carousel extends BaseComponent {
reflow(nextElement);
activeElement.classList.add(directionalClassName);
nextElement.classList.add(directionalClassName);
-
const completeCallBack = () => {
nextElement.classList.remove(directionalClassName, orderClassName);
nextElement.classList.add(CLASS_NAME_ACTIVE$2);
@@ -1561,113 +1350,89 @@ class Carousel extends BaseComponent {
this._isSliding = false;
triggerEvent(EVENT_SLID);
};
-
this._queueCallback(completeCallBack, activeElement, this._isAnimated());
-
if (isCycling) {
this.cycle();
}
}
-
_isAnimated() {
return this._element.classList.contains(CLASS_NAME_SLIDE);
}
-
_getActive() {
return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
}
-
_getItems() {
return SelectorEngine.find(SELECTOR_ITEM, this._element);
}
-
_clearInterval() {
if (this._interval) {
clearInterval(this._interval);
this._interval = null;
}
}
-
_directionToOrder(direction) {
if (isRTL()) {
return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
}
-
return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
}
-
_orderToDirection(order) {
if (isRTL()) {
return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
}
-
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Carousel.getOrCreateInstance(this, config);
-
if (typeof config === 'number') {
data.to(config);
return;
}
-
if (typeof config === 'string') {
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {
- const target = getElementFromSelector(this);
-
+ const target = SelectorEngine.getElementFromSelector(this);
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
return;
}
-
event.preventDefault();
const carousel = Carousel.getOrCreateInstance(target);
const slideIndex = this.getAttribute('data-bs-slide-to');
-
if (slideIndex) {
carousel.to(slideIndex);
-
carousel._maybeEnableCycle();
-
return;
}
-
if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
carousel.next();
-
carousel._maybeEnableCycle();
-
return;
}
-
carousel.prev();
-
carousel._maybeEnableCycle();
});
EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
-
for (const carousel of carousels) {
Carousel.getOrCreateInstance(carousel);
}
});
+
/**
* jQuery
*/
@@ -1676,10 +1441,11 @@ defineJQueryPlugin(Carousel);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): collapse.js
+ * Bootstrap (v5.3.0-alpha1): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -1711,6 +1477,7 @@ const DefaultType$a = {
parent: '(null|element)',
toggle: 'boolean'
};
+
/**
* Class definition
*/
@@ -1721,41 +1488,34 @@ class Collapse extends BaseComponent {
this._isTransitioning = false;
this._triggerArray = [];
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
-
for (const elem of toggleList) {
- const selector = getSelectorFromElement(elem);
+ const selector = SelectorEngine.getSelectorFromElement(elem);
const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
-
if (selector !== null && filterElement.length) {
this._triggerArray.push(elem);
}
}
-
this._initializeChildren();
-
if (!this._config.parent) {
this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
}
-
if (this._config.toggle) {
this.toggle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$a;
}
-
static get DefaultType() {
return DefaultType$a;
}
-
static get NAME() {
return NAME$b;
- } // Public
-
+ }
+ // Public
toggle() {
if (this._isShown()) {
this.hide();
@@ -1763,201 +1523,149 @@ class Collapse extends BaseComponent {
this.show();
}
}
-
show() {
if (this._isTransitioning || this._isShown()) {
return;
}
+ let activeChildren = [];
- let activeChildren = []; // find active children
-
+ // find active children
if (this._config.parent) {
activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
toggle: false
}));
}
-
if (activeChildren.length && activeChildren[0]._isTransitioning) {
return;
}
-
const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
-
if (startEvent.defaultPrevented) {
return;
}
-
for (const activeInstance of activeChildren) {
activeInstance.hide();
}
-
const dimension = this._getDimension();
-
this._element.classList.remove(CLASS_NAME_COLLAPSE);
-
this._element.classList.add(CLASS_NAME_COLLAPSING);
-
this._element.style[dimension] = 0;
-
this._addAriaAndCollapsedClass(this._triggerArray, true);
-
this._isTransitioning = true;
-
const complete = () => {
this._isTransitioning = false;
-
this._element.classList.remove(CLASS_NAME_COLLAPSING);
-
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
-
this._element.style[dimension] = '';
EventHandler.trigger(this._element, EVENT_SHOWN$6);
};
-
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
const scrollSize = `scroll${capitalizedDimension}`;
-
this._queueCallback(complete, this._element, true);
-
this._element.style[dimension] = `${this._element[scrollSize]}px`;
}
-
hide() {
if (this._isTransitioning || !this._isShown()) {
return;
}
-
const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
-
if (startEvent.defaultPrevented) {
return;
}
-
const dimension = this._getDimension();
-
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
reflow(this._element);
-
this._element.classList.add(CLASS_NAME_COLLAPSING);
-
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
-
for (const trigger of this._triggerArray) {
- const element = getElementFromSelector(trigger);
-
+ const element = SelectorEngine.getElementFromSelector(trigger);
if (element && !this._isShown(element)) {
this._addAriaAndCollapsedClass([trigger], false);
}
}
-
this._isTransitioning = true;
-
const complete = () => {
this._isTransitioning = false;
-
this._element.classList.remove(CLASS_NAME_COLLAPSING);
-
this._element.classList.add(CLASS_NAME_COLLAPSE);
-
EventHandler.trigger(this._element, EVENT_HIDDEN$6);
};
-
this._element.style[dimension] = '';
-
this._queueCallback(complete, this._element, true);
}
-
_isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW$7);
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values
-
config.parent = getElement(config.parent);
return config;
}
-
_getDimension() {
return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
}
-
_initializeChildren() {
if (!this._config.parent) {
return;
}
-
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
-
for (const element of children) {
- const selected = getElementFromSelector(element);
-
+ const selected = SelectorEngine.getElementFromSelector(element);
if (selected) {
this._addAriaAndCollapsedClass([element], this._isShown(selected));
}
}
}
-
_getFirstLevelChildren(selector) {
- const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth
-
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
+ // remove children if greater depth
return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
}
-
_addAriaAndCollapsedClass(triggerArray, isOpen) {
if (!triggerArray.length) {
return;
}
-
for (const element of triggerArray) {
element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
element.setAttribute('aria-expanded', isOpen);
}
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
const _config = {};
-
if (typeof config === 'string' && /show|hide/.test(config)) {
_config.toggle = false;
}
-
return this.each(function () {
const data = Collapse.getOrCreateInstance(this, _config);
-
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
event.preventDefault();
}
-
- const selector = getSelectorFromElement(this);
- const selectorElements = SelectorEngine.find(selector);
-
- for (const element of selectorElements) {
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
Collapse.getOrCreateInstance(element, {
toggle: false
}).toggle();
}
});
+
/**
* jQuery
*/
@@ -1966,10 +1674,11 @@ defineJQueryPlugin(Collapse);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dropdown.js
+ * Bootstrap (v5.3.0-alpha1): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2027,6 +1736,7 @@ const DefaultType$9 = {
popperConfig: '(null|object|function)',
reference: '(string|element|object)'
};
+
/**
* Class definition
*/
@@ -2036,143 +1746,112 @@ class Dropdown extends BaseComponent {
super(element, config);
this._popper = null;
this._parent = this._element.parentNode; // dropdown wrapper
- // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
-
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
this._inNavbar = this._detectNavbar();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$9;
}
-
static get DefaultType() {
return DefaultType$9;
}
-
static get NAME() {
return NAME$a;
- } // Public
-
+ }
+ // Public
toggle() {
return this._isShown() ? this.hide() : this.show();
}
-
show() {
if (isDisabled(this._element) || this._isShown()) {
return;
}
-
const relatedTarget = {
relatedTarget: this._element
};
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
-
if (showEvent.defaultPrevented) {
return;
}
+ this._createPopper();
- this._createPopper(); // If this is a touch-enabled device we add extra
+ // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
-
if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
for (const element of [].concat(...document.body.children)) {
EventHandler.on(element, 'mouseover', noop);
}
}
-
this._element.focus();
-
this._element.setAttribute('aria-expanded', true);
-
this._menu.classList.add(CLASS_NAME_SHOW$6);
-
this._element.classList.add(CLASS_NAME_SHOW$6);
-
EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
}
-
hide() {
if (isDisabled(this._element) || !this._isShown()) {
return;
}
-
const relatedTarget = {
relatedTarget: this._element
};
-
this._completeHide(relatedTarget);
}
-
dispose() {
if (this._popper) {
this._popper.destroy();
}
-
super.dispose();
}
-
update() {
this._inNavbar = this._detectNavbar();
-
if (this._popper) {
this._popper.update();
}
- } // Private
-
+ }
+ // Private
_completeHide(relatedTarget) {
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
-
if (hideEvent.defaultPrevented) {
return;
- } // If this is a touch-enabled device we remove the extra
- // empty mouseover listeners we added for iOS support
-
+ }
+ // If this is a touch-enabled device we remove the extra
+ // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.off(element, 'mouseover', noop);
}
}
-
if (this._popper) {
this._popper.destroy();
}
-
this._menu.classList.remove(CLASS_NAME_SHOW$6);
-
this._element.classList.remove(CLASS_NAME_SHOW$6);
-
this._element.setAttribute('aria-expanded', 'false');
-
Manipulator.removeDataAttribute(this._menu, 'popper');
EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
}
-
_getConfig(config) {
config = super._getConfig(config);
-
if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
// Popper virtual elements require a getBoundingClientRect method
throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
}
-
return config;
}
-
_createPopper() {
if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
}
-
let referenceElement = this._element;
-
if (this._config.reference === 'parent') {
referenceElement = this._parent;
} else if (isElement(this._config.reference)) {
@@ -2180,65 +1859,49 @@ class Dropdown extends BaseComponent {
} else if (typeof this._config.reference === 'object') {
referenceElement = this._config.reference;
}
-
const popperConfig = this._getPopperConfig();
-
this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);
}
-
_isShown() {
return this._menu.classList.contains(CLASS_NAME_SHOW$6);
}
-
_getPlacement() {
const parentDropdown = this._parent;
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
return PLACEMENT_RIGHT;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
return PLACEMENT_LEFT;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
return PLACEMENT_TOPCENTER;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
return PLACEMENT_BOTTOMCENTER;
- } // We need to trim the value because custom properties can also include spaces
-
+ }
+ // We need to trim the value because custom properties can also include spaces
const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
}
-
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
}
-
_detectNavbar() {
return this._element.closest(SELECTOR_NAVBAR) !== null;
}
-
_getOffset() {
const {
offset
} = this._config;
-
if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10));
}
-
if (typeof offset === 'function') {
return popperData => offset(popperData, this._element);
}
-
return offset;
}
-
_getPopperConfig() {
const defaultBsPopperConfig = {
placement: this._getPlacement(),
@@ -2253,121 +1916,101 @@ class Dropdown extends BaseComponent {
offset: this._getOffset()
}
}]
- }; // Disable Popper if we have a static display or Dropdown is in Navbar
+ };
+ // Disable Popper if we have a static display or Dropdown is in Navbar
if (this._inNavbar || this._config.display === 'static') {
Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove
-
defaultBsPopperConfig.modifiers = [{
name: 'applyStyles',
enabled: false
}];
}
-
- return { ...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ return {
+ ...defaultBsPopperConfig,
+ ...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
-
_selectMenuItem({
key,
target
}) {
const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));
-
if (!items.length) {
return;
- } // if target isn't included in items (e.g. when expanding the dropdown)
- // allow cycling to get the last item in case key equals ARROW_UP_KEY
-
+ }
+ // if target isn't included in items (e.g. when expanding the dropdown)
+ // allow cycling to get the last item in case key equals ARROW_UP_KEY
getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Dropdown.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
static clearMenus(event) {
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
return;
}
-
const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
-
for (const toggle of openToggles) {
const context = Dropdown.getInstance(toggle);
-
if (!context || context._config.autoClose === false) {
continue;
}
-
const composedPath = event.composedPath();
const isMenuTarget = composedPath.includes(context._menu);
-
if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
continue;
- } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
-
+ }
+ // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
continue;
}
-
const relatedTarget = {
relatedTarget: context._element
};
-
if (event.type === 'click') {
relatedTarget.clickEvent = event;
}
-
context._completeHide(relatedTarget);
}
}
-
static dataApiKeydownHandler(event) {
// If not an UP | DOWN | ESCAPE key => not a dropdown command
// If input/textarea && if key is other than ESCAPE => not a dropdown command
+
const isInput = /input|textarea/i.test(event.target.tagName);
const isEscapeEvent = event.key === ESCAPE_KEY$2;
const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
-
if (!isUpOrDownEvent && !isEscapeEvent) {
return;
}
-
if (isInput && !isEscapeEvent) {
return;
}
+ event.preventDefault();
- event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
-
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
const instance = Dropdown.getOrCreateInstance(getToggleButton);
-
if (isUpOrDownEvent) {
event.stopPropagation();
instance.show();
-
instance._selectMenuItem(event);
-
return;
}
-
if (instance._isShown()) {
// else is escape and we check if it is shown
event.stopPropagation();
@@ -2375,13 +2018,12 @@ class Dropdown extends BaseComponent {
getToggleButton.focus();
}
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
@@ -2390,6 +2032,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, functi
event.preventDefault();
Dropdown.getOrCreateInstance(this).toggle();
});
+
/**
* jQuery
*/
@@ -2398,10 +2041,11 @@ defineJQueryPlugin(Dropdown);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/scrollBar.js
+ * Bootstrap (v5.3.0-alpha1): util/scrollBar.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2410,6 +2054,7 @@ const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-to
const SELECTOR_STICKY_CONTENT = '.sticky-top';
const PROPERTY_PADDING = 'padding-right';
const PROPERTY_MARGIN = 'margin-right';
+
/**
* Class definition
*/
@@ -2417,110 +2062,87 @@ const PROPERTY_MARGIN = 'margin-right';
class ScrollBarHelper {
constructor() {
this._element = document.body;
- } // Public
-
+ }
+ // Public
getWidth() {
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
const documentWidth = document.documentElement.clientWidth;
return Math.abs(window.innerWidth - documentWidth);
}
-
hide() {
const width = this.getWidth();
-
- this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
-
-
- this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
-
-
+ this._disableOverFlow();
+ // give padding to element to balance the hidden scrollbar width
+ this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+ // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
-
this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
}
-
reset() {
this._resetElementAttributes(this._element, 'overflow');
-
this._resetElementAttributes(this._element, PROPERTY_PADDING);
-
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
-
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
}
-
isOverflowing() {
return this.getWidth() > 0;
- } // Private
-
+ }
+ // Private
_disableOverFlow() {
this._saveInitialAttribute(this._element, 'overflow');
-
this._element.style.overflow = 'hidden';
}
-
_setElementAttributes(selector, styleProperty, callback) {
const scrollbarWidth = this.getWidth();
-
const manipulationCallBack = element => {
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
return;
}
-
this._saveInitialAttribute(element, styleProperty);
-
const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
};
-
this._applyManipulationCallback(selector, manipulationCallBack);
}
-
_saveInitialAttribute(element, styleProperty) {
const actualValue = element.style.getPropertyValue(styleProperty);
-
if (actualValue) {
Manipulator.setDataAttribute(element, styleProperty, actualValue);
}
}
-
_resetElementAttributes(selector, styleProperty) {
const manipulationCallBack = element => {
- const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero
-
+ const value = Manipulator.getDataAttribute(element, styleProperty);
+ // We only want to remove the property if the value is `null`; the value can also be zero
if (value === null) {
element.style.removeProperty(styleProperty);
return;
}
-
Manipulator.removeDataAttribute(element, styleProperty);
element.style.setProperty(styleProperty, value);
};
-
this._applyManipulationCallback(selector, manipulationCallBack);
}
-
_applyManipulationCallback(selector, callBack) {
if (isElement(selector)) {
callBack(selector);
return;
}
-
for (const sel of SelectorEngine.find(selector, this._element)) {
callBack(sel);
}
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/backdrop.js
+ * Bootstrap (v5.3.0-alpha1): util/backdrop.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2536,8 +2158,8 @@ const Default$8 = {
isVisible: true,
// if false, we use the backdrop helper without adding any element to the dom
rootElement: 'body' // give the choice to place backdrop under different elements
-
};
+
const DefaultType$8 = {
className: 'string',
clickCallback: '(function|null)',
@@ -2545,6 +2167,7 @@ const DefaultType$8 = {
isVisible: 'boolean',
rootElement: '(element|string)'
};
+
/**
* Class definition
*/
@@ -2555,118 +2178,95 @@ class Backdrop extends Config {
this._config = this._getConfig(config);
this._isAppended = false;
this._element = null;
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$8;
}
-
static get DefaultType() {
return DefaultType$8;
}
-
static get NAME() {
return NAME$9;
- } // Public
-
+ }
+ // Public
show(callback) {
if (!this._config.isVisible) {
execute(callback);
return;
}
-
this._append();
-
const element = this._getElement();
-
if (this._config.isAnimated) {
reflow(element);
}
-
element.classList.add(CLASS_NAME_SHOW$5);
-
this._emulateAnimation(() => {
execute(callback);
});
}
-
hide(callback) {
if (!this._config.isVisible) {
execute(callback);
return;
}
-
this._getElement().classList.remove(CLASS_NAME_SHOW$5);
-
this._emulateAnimation(() => {
this.dispose();
execute(callback);
});
}
-
dispose() {
if (!this._isAppended) {
return;
}
-
EventHandler.off(this._element, EVENT_MOUSEDOWN);
-
this._element.remove();
-
this._isAppended = false;
- } // Private
-
+ }
+ // Private
_getElement() {
if (!this._element) {
const backdrop = document.createElement('div');
backdrop.className = this._config.className;
-
if (this._config.isAnimated) {
backdrop.classList.add(CLASS_NAME_FADE$4);
}
-
this._element = backdrop;
}
-
return this._element;
}
-
_configAfterMerge(config) {
// use getElement() with the default "body" to get a fresh Element on each instantiation
config.rootElement = getElement(config.rootElement);
return config;
}
-
_append() {
if (this._isAppended) {
return;
}
-
const element = this._getElement();
-
this._config.rootElement.append(element);
-
EventHandler.on(element, EVENT_MOUSEDOWN, () => {
execute(this._config.clickCallback);
});
this._isAppended = true;
}
-
_emulateAnimation(callback) {
executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/focustrap.js
+ * Bootstrap (v5.3.0-alpha1): util/focustrap.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2682,12 +2282,13 @@ const TAB_NAV_BACKWARD = 'backward';
const Default$7 = {
autofocus: true,
trapElement: null // The element to trap focus inside of
-
};
+
const DefaultType$7 = {
autofocus: 'boolean',
trapElement: 'element'
};
+
/**
* Class definition
*/
@@ -2698,59 +2299,49 @@ class FocusTrap extends Config {
this._config = this._getConfig(config);
this._isActive = false;
this._lastTabNavDirection = null;
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$7;
}
-
static get DefaultType() {
return DefaultType$7;
}
-
static get NAME() {
return NAME$8;
- } // Public
-
+ }
+ // Public
activate() {
if (this._isActive) {
return;
}
-
if (this._config.autofocus) {
this._config.trapElement.focus();
}
-
EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop
-
EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
this._isActive = true;
}
-
deactivate() {
if (!this._isActive) {
return;
}
-
this._isActive = false;
EventHandler.off(document, EVENT_KEY$5);
- } // Private
-
+ }
+ // Private
_handleFocusin(event) {
const {
trapElement
} = this._config;
-
if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
return;
}
-
const elements = SelectorEngine.focusableChildren(trapElement);
-
if (elements.length === 0) {
trapElement.focus();
} else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
@@ -2759,23 +2350,21 @@ class FocusTrap extends Config {
elements[0].focus();
}
}
-
_handleKeydown(event) {
if (event.key !== TAB_KEY) {
return;
}
-
this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): modal.js
+ * Bootstrap (v5.3.0-alpha1): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2813,6 +2402,7 @@ const DefaultType$6 = {
focus: 'boolean',
keyboard: 'boolean'
};
+
/**
* Class definition
*/
@@ -2826,91 +2416,68 @@ class Modal extends BaseComponent {
this._isShown = false;
this._isTransitioning = false;
this._scrollBar = new ScrollBarHelper();
-
this._addEventListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$6;
}
-
static get DefaultType() {
return DefaultType$6;
}
-
static get NAME() {
return NAME$7;
- } // Public
-
+ }
+ // Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
}
-
show(relatedTarget) {
if (this._isShown || this._isTransitioning) {
return;
}
-
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
relatedTarget
});
-
if (showEvent.defaultPrevented) {
return;
}
-
this._isShown = true;
this._isTransitioning = true;
-
this._scrollBar.hide();
-
document.body.classList.add(CLASS_NAME_OPEN);
-
this._adjustDialog();
-
this._backdrop.show(() => this._showElement(relatedTarget));
}
-
hide() {
if (!this._isShown || this._isTransitioning) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
-
if (hideEvent.defaultPrevented) {
return;
}
-
this._isShown = false;
this._isTransitioning = true;
-
this._focustrap.deactivate();
-
this._element.classList.remove(CLASS_NAME_SHOW$4);
-
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
}
-
dispose() {
for (const htmlElement of [window, this._dialog]) {
EventHandler.off(htmlElement, EVENT_KEY$4);
}
-
this._backdrop.dispose();
-
this._focustrap.deactivate();
-
super.dispose();
}
-
handleUpdate() {
this._adjustDialog();
- } // Private
-
+ }
+ // Private
_initializeBackDrop() {
return new Backdrop({
isVisible: Boolean(this._config.backdrop),
@@ -2918,64 +2485,48 @@ class Modal extends BaseComponent {
isAnimated: this._isAnimated()
});
}
-
_initializeFocusTrap() {
return new FocusTrap({
trapElement: this._element
});
}
-
_showElement(relatedTarget) {
// try to append dynamic modal
if (!document.body.contains(this._element)) {
document.body.append(this._element);
}
-
this._element.style.display = 'block';
-
this._element.removeAttribute('aria-hidden');
-
this._element.setAttribute('aria-modal', true);
-
this._element.setAttribute('role', 'dialog');
-
this._element.scrollTop = 0;
const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
-
if (modalBody) {
modalBody.scrollTop = 0;
}
-
reflow(this._element);
-
this._element.classList.add(CLASS_NAME_SHOW$4);
-
const transitionComplete = () => {
if (this._config.focus) {
this._focustrap.activate();
}
-
this._isTransitioning = false;
EventHandler.trigger(this._element, EVENT_SHOWN$4, {
relatedTarget
});
};
-
this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
}
-
_addEventListeners() {
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
if (event.key !== ESCAPE_KEY$1) {
return;
}
-
if (this._config.keyboard) {
event.preventDefault();
this.hide();
return;
}
-
this._triggerBackdropTransition();
});
EventHandler.on(window, EVENT_RESIZE$1, () => {
@@ -2989,157 +2540,124 @@ class Modal extends BaseComponent {
if (this._element !== event.target || this._element !== event2.target) {
return;
}
-
if (this._config.backdrop === 'static') {
this._triggerBackdropTransition();
-
return;
}
-
if (this._config.backdrop) {
this.hide();
}
});
});
}
-
_hideModal() {
this._element.style.display = 'none';
-
this._element.setAttribute('aria-hidden', true);
-
this._element.removeAttribute('aria-modal');
-
this._element.removeAttribute('role');
-
this._isTransitioning = false;
-
this._backdrop.hide(() => {
document.body.classList.remove(CLASS_NAME_OPEN);
-
this._resetAdjustments();
-
this._scrollBar.reset();
-
EventHandler.trigger(this._element, EVENT_HIDDEN$4);
});
}
-
_isAnimated() {
return this._element.classList.contains(CLASS_NAME_FADE$3);
}
-
_triggerBackdropTransition() {
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
-
if (hideEvent.defaultPrevented) {
return;
}
-
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
- const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed
-
+ const initialOverflowY = this._element.style.overflowY;
+ // return if the following background transition hasn't yet completed
if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
return;
}
-
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden';
}
-
this._element.classList.add(CLASS_NAME_STATIC);
-
this._queueCallback(() => {
this._element.classList.remove(CLASS_NAME_STATIC);
-
this._queueCallback(() => {
this._element.style.overflowY = initialOverflowY;
}, this._dialog);
}, this._dialog);
-
this._element.focus();
}
+
/**
* The following methods are used to handle overflowing modals
*/
-
_adjustDialog() {
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
-
const scrollbarWidth = this._scrollBar.getWidth();
-
const isBodyOverflowing = scrollbarWidth > 0;
-
if (isBodyOverflowing && !isModalOverflowing) {
const property = isRTL() ? 'paddingLeft' : 'paddingRight';
this._element.style[property] = `${scrollbarWidth}px`;
}
-
if (!isBodyOverflowing && isModalOverflowing) {
const property = isRTL() ? 'paddingRight' : 'paddingLeft';
this._element.style[property] = `${scrollbarWidth}px`;
}
}
-
_resetAdjustments() {
this._element.style.paddingLeft = '';
this._element.style.paddingRight = '';
- } // Static
-
+ }
+ // Static
static jQueryInterface(config, relatedTarget) {
return this.each(function () {
const data = Modal.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](relatedTarget);
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
- const target = getElementFromSelector(this);
-
+ const target = SelectorEngine.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
EventHandler.one(target, EVENT_SHOW$4, showEvent => {
if (showEvent.defaultPrevented) {
// only register focus restorer if modal will actually get shown
return;
}
-
EventHandler.one(target, EVENT_HIDDEN$4, () => {
if (isVisible(this)) {
this.focus();
}
});
- }); // avoid conflict when clicking modal toggler while another one is open
+ });
+ // avoid conflict when clicking modal toggler while another one is open
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
-
if (alreadyOpen) {
Modal.getInstance(alreadyOpen).hide();
}
-
const data = Modal.getOrCreateInstance(target);
data.toggle(this);
});
enableDismissTrigger(Modal);
+
/**
* jQuery
*/
@@ -3148,10 +2666,11 @@ defineJQueryPlugin(Modal);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): offcanvas.js
+ * Bootstrap (v5.3.0-alpha1): offcanvas.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -3186,6 +2705,7 @@ const DefaultType$5 = {
keyboard: 'boolean',
scroll: 'boolean'
};
+
/**
* Class definition
*/
@@ -3196,130 +2716,95 @@ class Offcanvas extends BaseComponent {
this._isShown = false;
this._backdrop = this._initializeBackDrop();
this._focustrap = this._initializeFocusTrap();
-
this._addEventListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$5;
}
-
static get DefaultType() {
return DefaultType$5;
}
-
static get NAME() {
return NAME$6;
- } // Public
-
+ }
+ // Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
}
-
show(relatedTarget) {
if (this._isShown) {
return;
}
-
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
relatedTarget
});
-
if (showEvent.defaultPrevented) {
return;
}
-
this._isShown = true;
-
this._backdrop.show();
-
if (!this._config.scroll) {
new ScrollBarHelper().hide();
}
-
this._element.setAttribute('aria-modal', true);
-
this._element.setAttribute('role', 'dialog');
-
this._element.classList.add(CLASS_NAME_SHOWING$1);
-
const completeCallBack = () => {
if (!this._config.scroll || this._config.backdrop) {
this._focustrap.activate();
}
-
this._element.classList.add(CLASS_NAME_SHOW$3);
-
this._element.classList.remove(CLASS_NAME_SHOWING$1);
-
EventHandler.trigger(this._element, EVENT_SHOWN$3, {
relatedTarget
});
};
-
this._queueCallback(completeCallBack, this._element, true);
}
-
hide() {
if (!this._isShown) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
-
if (hideEvent.defaultPrevented) {
return;
}
-
this._focustrap.deactivate();
-
this._element.blur();
-
this._isShown = false;
-
this._element.classList.add(CLASS_NAME_HIDING);
-
this._backdrop.hide();
-
const completeCallback = () => {
this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
-
this._element.removeAttribute('aria-modal');
-
this._element.removeAttribute('role');
-
if (!this._config.scroll) {
new ScrollBarHelper().reset();
}
-
EventHandler.trigger(this._element, EVENT_HIDDEN$3);
};
-
this._queueCallback(completeCallback, this._element, true);
}
-
dispose() {
this._backdrop.dispose();
-
this._focustrap.deactivate();
-
super.dispose();
- } // Private
-
+ }
+ // Private
_initializeBackDrop() {
const clickCallback = () => {
if (this._config.backdrop === 'static') {
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return;
}
-
this.hide();
- }; // 'static' option will be translated to true, and booleans will keep their value
-
+ };
+ // 'static' option will be translated to true, and booleans will keep their value
const isVisible = Boolean(this._config.backdrop);
return new Backdrop({
className: CLASS_NAME_BACKDROP,
@@ -3329,75 +2814,63 @@ class Offcanvas extends BaseComponent {
clickCallback: isVisible ? clickCallback : null
});
}
-
_initializeFocusTrap() {
return new FocusTrap({
trapElement: this._element
});
}
-
_addEventListeners() {
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
if (event.key !== ESCAPE_KEY) {
return;
}
-
if (!this._config.keyboard) {
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return;
}
-
this.hide();
});
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Offcanvas.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
- const target = getElementFromSelector(this);
-
+ const target = SelectorEngine.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
if (isDisabled(this)) {
return;
}
-
EventHandler.one(target, EVENT_HIDDEN$3, () => {
// focus on trigger when it is closed
if (isVisible(this)) {
this.focus();
}
- }); // avoid conflict when clicking a toggler of an offcanvas, while another is open
+ });
+ // avoid conflict when clicking a toggler of an offcanvas, while another is open
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
-
if (alreadyOpen && alreadyOpen !== target) {
Offcanvas.getInstance(alreadyOpen).hide();
}
-
const data = Offcanvas.getOrCreateInstance(target);
data.toggle(this);
});
@@ -3414,6 +2887,7 @@ EventHandler.on(window, EVENT_RESIZE, () => {
}
});
enableDismissTrigger(Offcanvas);
+
/**
* jQuery
*/
@@ -3422,42 +2896,39 @@ defineJQueryPlugin(Offcanvas);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/sanitizer.js
+ * Bootstrap (v5.3.0-alpha1): util/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
-
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
+
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
-
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
-
const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase();
-
if (allowedAttributeList.includes(attributeName)) {
if (uriAttributes.has(attributeName)) {
return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
}
-
return true;
- } // Check if a regular expression validates the attribute.
-
+ }
+ // Check if a regular expression validates the attribute.
return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
};
-
const DefaultAllowlist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
@@ -3495,42 +2966,36 @@ function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
if (!unsafeHtml.length) {
return unsafeHtml;
}
-
if (sanitizeFunction && typeof sanitizeFunction === 'function') {
return sanitizeFunction(unsafeHtml);
}
-
const domParser = new window.DOMParser();
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
-
for (const element of elements) {
const elementName = element.nodeName.toLowerCase();
-
if (!Object.keys(allowList).includes(elementName)) {
element.remove();
continue;
}
-
const attributeList = [].concat(...element.attributes);
const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
-
for (const attribute of attributeList) {
if (!allowedAttribute(attribute, allowedAttributes)) {
element.removeAttribute(attribute.nodeName);
}
}
}
-
return createdDocument.body.innerHTML;
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/template-factory.js
+ * Bootstrap (v5.3.0-alpha1): util/template-factory.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -3559,6 +3024,7 @@ const DefaultContentType = {
entry: '(string|element|function|null)',
selector: '(string|element)'
};
+
/**
* Class definition
*/
@@ -3567,65 +3033,53 @@ class TemplateFactory extends Config {
constructor(config) {
super();
this._config = this._getConfig(config);
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$4;
}
-
static get DefaultType() {
return DefaultType$4;
}
-
static get NAME() {
return NAME$5;
- } // Public
-
+ }
+ // Public
getContent() {
return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
}
-
hasContent() {
return this.getContent().length > 0;
}
-
changeContent(content) {
this._checkContent(content);
-
- this._config.content = { ...this._config.content,
+ this._config.content = {
+ ...this._config.content,
...content
};
return this;
}
-
toHtml() {
const templateWrapper = document.createElement('div');
templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
-
for (const [selector, text] of Object.entries(this._config.content)) {
this._setContent(templateWrapper, text, selector);
}
-
const template = templateWrapper.children[0];
-
const extraClass = this._resolvePossibleFunction(this._config.extraClass);
-
if (extraClass) {
template.classList.add(...extraClass.split(' '));
}
-
return template;
- } // Private
-
+ }
+ // Private
_typeCheckConfig(config) {
super._typeCheckConfig(config);
-
this._checkContent(config.content);
}
-
_checkContent(arg) {
for (const [selector, content] of Object.entries(arg)) {
super._typeCheckConfig({
@@ -3634,61 +3088,49 @@ class TemplateFactory extends Config {
}, DefaultContentType);
}
}
-
_setContent(template, content, selector) {
const templateElement = SelectorEngine.findOne(selector, template);
-
if (!templateElement) {
return;
}
-
content = this._resolvePossibleFunction(content);
-
if (!content) {
templateElement.remove();
return;
}
-
if (isElement(content)) {
this._putElementInTemplate(getElement(content), templateElement);
-
return;
}
-
if (this._config.html) {
templateElement.innerHTML = this._maybeSanitize(content);
return;
}
-
templateElement.textContent = content;
}
-
_maybeSanitize(arg) {
return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
}
-
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg(this) : arg;
+ return execute(arg, [this]);
}
-
_putElementInTemplate(element, templateElement) {
if (this._config.html) {
templateElement.innerHTML = '';
templateElement.append(element);
return;
}
-
templateElement.textContent = element.textContent;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tooltip.js
+ * Bootstrap (v5.3.0-alpha1): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -3760,6 +3202,7 @@ const DefaultType$3 = {
title: '(string|element|function)',
trigger: 'string'
};
+
/**
* Class definition
*/
@@ -3769,174 +3212,130 @@ class Tooltip extends BaseComponent {
if (typeof Popper === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
}
+ super(element, config);
- super(element, config); // Private
-
+ // Private
this._isEnabled = true;
this._timeout = 0;
this._isHovered = null;
this._activeTrigger = {};
this._popper = null;
this._templateFactory = null;
- this._newContent = null; // Protected
+ this._newContent = null;
+ // Protected
this.tip = null;
-
this._setListeners();
-
if (!this._config.selector) {
this._fixTitle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$3;
}
-
static get DefaultType() {
return DefaultType$3;
}
-
static get NAME() {
return NAME$4;
- } // Public
-
+ }
+ // Public
enable() {
this._isEnabled = true;
}
-
disable() {
this._isEnabled = false;
}
-
toggleEnabled() {
this._isEnabled = !this._isEnabled;
}
-
toggle() {
if (!this._isEnabled) {
return;
}
-
this._activeTrigger.click = !this._activeTrigger.click;
-
if (this._isShown()) {
this._leave();
-
return;
}
-
this._enter();
}
-
dispose() {
clearTimeout(this._timeout);
EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
-
- if (this.tip) {
- this.tip.remove();
- }
-
if (this._element.getAttribute('data-bs-original-title')) {
this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
}
-
this._disposePopper();
-
super.dispose();
}
-
show() {
if (this._element.style.display === 'none') {
throw new Error('Please use show on visible elements');
}
-
if (!(this._isWithContent() && this._isEnabled)) {
return;
}
-
const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
const shadowRoot = findShadowRoot(this._element);
-
const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
-
if (showEvent.defaultPrevented || !isInTheDom) {
return;
- } // todo v6 remove this OR make it optional
-
-
- if (this.tip) {
- this.tip.remove();
- this.tip = null;
}
+ // todo v6 remove this OR make it optional
+ this._disposePopper();
const tip = this._getTipElement();
-
this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
-
const {
container
} = this._config;
-
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
container.append(tip);
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
}
+ this._popper = this._createPopper(tip);
+ tip.classList.add(CLASS_NAME_SHOW$2);
- if (this._popper) {
- this._popper.update();
- } else {
- this._popper = this._createPopper(tip);
- }
-
- tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra
+ // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.on(element, 'mouseover', noop);
}
}
-
const complete = () => {
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
-
if (this._isHovered === false) {
this._leave();
}
-
this._isHovered = false;
};
-
this._queueCallback(complete, this.tip, this._isAnimated());
}
-
hide() {
if (!this._isShown()) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
-
if (hideEvent.defaultPrevented) {
return;
}
-
const tip = this._getTipElement();
+ tip.classList.remove(CLASS_NAME_SHOW$2);
- tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra
+ // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
-
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.off(element, 'mouseover', noop);
}
}
-
this._activeTrigger[TRIGGER_CLICK] = false;
this._activeTrigger[TRIGGER_FOCUS] = false;
this._activeTrigger[TRIGGER_HOVER] = false;
@@ -3946,135 +3345,107 @@ class Tooltip extends BaseComponent {
if (this._isWithActiveTrigger()) {
return;
}
-
if (!this._isHovered) {
- tip.remove();
+ this._disposePopper();
}
-
this._element.removeAttribute('aria-describedby');
-
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
-
- this._disposePopper();
};
-
this._queueCallback(complete, this.tip, this._isAnimated());
}
-
update() {
if (this._popper) {
this._popper.update();
}
- } // Protected
-
+ }
+ // Protected
_isWithContent() {
return Boolean(this._getTitle());
}
-
_getTipElement() {
if (!this.tip) {
this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
}
-
return this.tip;
}
-
_createTipElement(content) {
- const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6
-
+ const tip = this._getTemplateFactory(content).toHtml();
+ // todo: remove this check on v6
if (!tip) {
return null;
}
-
- tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only
-
+ tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
+ // todo: on v6 the following can be achieved with CSS only
tip.classList.add(`bs-${this.constructor.NAME}-auto`);
const tipId = getUID(this.constructor.NAME).toString();
tip.setAttribute('id', tipId);
-
if (this._isAnimated()) {
tip.classList.add(CLASS_NAME_FADE$2);
}
-
return tip;
}
-
setContent(content) {
this._newContent = content;
-
if (this._isShown()) {
this._disposePopper();
-
this.show();
}
}
-
_getTemplateFactory(content) {
if (this._templateFactory) {
this._templateFactory.changeContent(content);
} else {
- this._templateFactory = new TemplateFactory({ ...this._config,
+ this._templateFactory = new TemplateFactory({
+ ...this._config,
// the `content` var has to be after `this._config`
// to override config.content in case of popover
content,
extraClass: this._resolvePossibleFunction(this._config.customClass)
});
}
-
return this._templateFactory;
}
-
_getContentForTemplate() {
return {
[SELECTOR_TOOLTIP_INNER]: this._getTitle()
};
}
-
_getTitle() {
return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
- } // Private
-
+ }
+ // Private
_initializeOnDelegatedTarget(event) {
return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
}
-
_isAnimated() {
return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
}
-
_isShown() {
return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
}
-
_createPopper(tip) {
- const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
+ const placement = execute(this._config.placement, [this, tip, this._element]);
const attachment = AttachmentMap[placement.toUpperCase()];
return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));
}
-
_getOffset() {
const {
offset
} = this._config;
-
if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10));
}
-
if (typeof offset === 'function') {
return popperData => offset(popperData, this._element);
}
-
return offset;
}
-
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg.call(this._element) : arg;
+ return execute(arg, [this._element]);
}
-
_getPopperConfig(attachment) {
const defaultBsPopperConfig = {
placement: attachment,
@@ -4109,19 +3480,17 @@ class Tooltip extends BaseComponent {
}
}]
};
- return { ...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ return {
+ ...defaultBsPopperConfig,
+ ...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
-
_setListeners() {
const triggers = this._config.trigger.split(' ');
-
for (const trigger of triggers) {
if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context.toggle();
});
} else if (trigger !== TRIGGER_MANUAL) {
@@ -4129,182 +3498,150 @@ class Tooltip extends BaseComponent {
const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
EventHandler.on(this._element, eventIn, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
-
context._enter();
});
EventHandler.on(this._element, eventOut, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
-
context._leave();
});
}
}
-
this._hideModalHandler = () => {
if (this._element) {
this.hide();
}
};
-
EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
}
-
_fixTitle() {
const title = this._element.getAttribute('title');
-
if (!title) {
return;
}
-
if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
this._element.setAttribute('aria-label', title);
}
-
this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
-
-
this._element.removeAttribute('title');
}
-
_enter() {
if (this._isShown() || this._isHovered) {
this._isHovered = true;
return;
}
-
this._isHovered = true;
-
this._setTimeout(() => {
if (this._isHovered) {
this.show();
}
}, this._config.delay.show);
}
-
_leave() {
if (this._isWithActiveTrigger()) {
return;
}
-
this._isHovered = false;
-
this._setTimeout(() => {
if (!this._isHovered) {
this.hide();
}
}, this._config.delay.hide);
}
-
_setTimeout(handler, timeout) {
clearTimeout(this._timeout);
this._timeout = setTimeout(handler, timeout);
}
-
_isWithActiveTrigger() {
return Object.values(this._activeTrigger).includes(true);
}
-
_getConfig(config) {
const dataAttributes = Manipulator.getDataAttributes(this._element);
-
for (const dataAttribute of Object.keys(dataAttributes)) {
if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
delete dataAttributes[dataAttribute];
}
}
-
- config = { ...dataAttributes,
+ config = {
+ ...dataAttributes,
...(typeof config === 'object' && config ? config : {})
};
config = this._mergeConfigObj(config);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
}
-
_configAfterMerge(config) {
config.container = config.container === false ? document.body : getElement(config.container);
-
if (typeof config.delay === 'number') {
config.delay = {
show: config.delay,
hide: config.delay
};
}
-
if (typeof config.title === 'number') {
config.title = config.title.toString();
}
-
if (typeof config.content === 'number') {
config.content = config.content.toString();
}
-
return config;
}
-
_getDelegateConfig() {
const config = {};
-
- for (const key in this._config) {
- if (this.constructor.Default[key] !== this._config[key]) {
- config[key] = this._config[key];
+ for (const [key, value] of Object.entries(this._config)) {
+ if (this.constructor.Default[key] !== value) {
+ config[key] = value;
}
}
-
config.selector = false;
- config.trigger = 'manual'; // In the future can be replaced with:
+ config.trigger = 'manual';
+
+ // In the future can be replaced with:
// const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
// `Object.fromEntries(keysWithDifferentValues)`
-
return config;
}
-
_disposePopper() {
if (this._popper) {
this._popper.destroy();
-
this._popper = null;
}
- } // Static
-
+ if (this.tip) {
+ this.tip.remove();
+ this.tip = null;
+ }
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Tooltip.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* jQuery
*/
-
defineJQueryPlugin(Tooltip);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): popover.js
+ * Bootstrap (v5.3.0-alpha1): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4312,16 +3649,19 @@ defineJQueryPlugin(Tooltip);
const NAME$3 = 'popover';
const SELECTOR_TITLE = '.popover-header';
const SELECTOR_CONTENT = '.popover-body';
-const Default$2 = { ...Tooltip.Default,
+const Default$2 = {
+ ...Tooltip.Default,
content: '',
offset: [0, 8],
placement: 'right',
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
trigger: 'click'
};
-const DefaultType$2 = { ...Tooltip.DefaultType,
+const DefaultType$2 = {
+ ...Tooltip.DefaultType,
content: '(null|string|element|function)'
};
+
/**
* Class definition
*/
@@ -4331,63 +3671,57 @@ class Popover extends Tooltip {
static get Default() {
return Default$2;
}
-
static get DefaultType() {
return DefaultType$2;
}
-
static get NAME() {
return NAME$3;
- } // Overrides
-
+ }
+ // Overrides
_isWithContent() {
return this._getTitle() || this._getContent();
- } // Private
-
+ }
+ // Private
_getContentForTemplate() {
return {
[SELECTOR_TITLE]: this._getTitle(),
[SELECTOR_CONTENT]: this._getContent()
};
}
-
_getContent() {
return this._resolvePossibleFunction(this._config.content);
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Popover.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* jQuery
*/
-
defineJQueryPlugin(Popover);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): scrollspy.js
+ * Bootstrap (v5.3.0-alpha1): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4426,14 +3760,16 @@ const DefaultType$1 = {
target: 'element',
threshold: 'array'
};
+
/**
* Class definition
*/
class ScrollSpy extends BaseComponent {
constructor(element, config) {
- super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper
+ super(element, config);
+ // this._element is the observablesContainer and config.target the menu links wrapper
this._targetLinks = new Map();
this._observableSections = new Map();
this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
@@ -4444,87 +3780,75 @@ class ScrollSpy extends BaseComponent {
parentScrollTop: 0
};
this.refresh(); // initialize
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$1;
}
-
static get DefaultType() {
return DefaultType$1;
}
-
static get NAME() {
return NAME$2;
- } // Public
-
+ }
+ // Public
refresh() {
this._initializeTargetsAndObservables();
-
this._maybeEnableSmoothScroll();
-
if (this._observer) {
this._observer.disconnect();
} else {
this._observer = this._getNewObserver();
}
-
for (const section of this._observableSections.values()) {
this._observer.observe(section);
}
}
-
dispose() {
this._observer.disconnect();
-
super.dispose();
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
// TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
- config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
+ config.target = getElement(config.target) || document.body;
+ // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
-
if (typeof config.threshold === 'string') {
config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
}
-
return config;
}
-
_maybeEnableSmoothScroll() {
if (!this._config.smoothScroll) {
return;
- } // unregister any previous listeners
-
+ }
+ // unregister any previous listeners
EventHandler.off(this._config.target, EVENT_CLICK);
EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
const observableSection = this._observableSections.get(event.target.hash);
-
if (observableSection) {
event.preventDefault();
const root = this._rootElement || window;
const height = observableSection.offsetTop - this._element.offsetTop;
-
if (root.scrollTo) {
root.scrollTo({
top: height,
behavior: 'smooth'
});
return;
- } // Chrome 60 doesn't support `scrollTo`
-
+ }
+ // Chrome 60 doesn't support `scrollTo`
root.scrollTop = height;
}
});
}
-
_getNewObserver() {
const options = {
root: this._rootElement,
@@ -4532,95 +3856,77 @@ class ScrollSpy extends BaseComponent {
rootMargin: this._config.rootMargin
};
return new IntersectionObserver(entries => this._observerCallback(entries), options);
- } // The logic of selection
-
+ }
+ // The logic of selection
_observerCallback(entries) {
const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
-
const activate = entry => {
this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
-
this._process(targetElement(entry));
};
-
const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
this._previousScrollData.parentScrollTop = parentScrollTop;
-
for (const entry of entries) {
if (!entry.isIntersecting) {
this._activeTarget = null;
-
this._clearActiveClass(targetElement(entry));
-
continue;
}
-
- const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop
-
+ const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
+ // if we are scrolling down, pick the bigger offsetTop
if (userScrollsDown && entryIsLowerThanPrevious) {
- activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
-
+ activate(entry);
+ // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
if (!parentScrollTop) {
return;
}
-
continue;
- } // if we are scrolling up, pick the smallest offsetTop
-
+ }
+ // if we are scrolling up, pick the smallest offsetTop
if (!userScrollsDown && !entryIsLowerThanPrevious) {
activate(entry);
}
}
}
-
_initializeTargetsAndObservables() {
this._targetLinks = new Map();
this._observableSections = new Map();
const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
-
for (const anchor of targetLinks) {
// ensure that the anchor has an id and is not disabled
if (!anchor.hash || isDisabled(anchor)) {
continue;
}
+ const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
- const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible
-
+ // ensure that the observableSection exists & is visible
if (isVisible(observableSection)) {
this._targetLinks.set(anchor.hash, anchor);
-
this._observableSections.set(anchor.hash, observableSection);
}
}
}
-
_process(target) {
if (this._activeTarget === target) {
return;
}
-
this._clearActiveClass(this._config.target);
-
this._activeTarget = target;
target.classList.add(CLASS_NAME_ACTIVE$1);
-
this._activateParents(target);
-
EventHandler.trigger(this._element, EVENT_ACTIVATE, {
relatedTarget: target
});
}
-
_activateParents(target) {
// Activate dropdown parents
if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
return;
}
-
for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
// Set triggered links parents as active
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
@@ -4629,44 +3935,39 @@ class ScrollSpy extends BaseComponent {
}
}
}
-
_clearActiveClass(parent) {
parent.classList.remove(CLASS_NAME_ACTIVE$1);
const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
-
for (const node of activeNodes) {
node.classList.remove(CLASS_NAME_ACTIVE$1);
}
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = ScrollSpy.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
ScrollSpy.getOrCreateInstance(spy);
}
});
+
/**
* jQuery
*/
@@ -4675,10 +3976,11 @@ defineJQueryPlugin(ScrollSpy);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tab.js
+ * Bootstrap (v5.3.0-alpha1): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4708,9 +4010,9 @@ const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
const SELECTOR_OUTER = '.nav-item, .list-group-item';
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // todo:v6: could be only `tab`
-
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
+
/**
* Class definition
*/
@@ -4719,122 +4021,97 @@ class Tab extends BaseComponent {
constructor(element) {
super(element);
this._parent = this._element.closest(SELECTOR_TAB_PANEL);
-
if (!this._parent) {
- return; // todo: should Throw exception on v6
+ return;
+ // todo: should Throw exception on v6
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
- } // Set up initial aria attributes
-
+ }
+ // Set up initial aria attributes
this._setInitialAttributes(this._parent, this._getChildren());
-
EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
- } // Getters
-
+ }
+ // Getters
static get NAME() {
return NAME$1;
- } // Public
-
+ }
+ // Public
show() {
// Shows this elem and deactivate the active sibling if exists
const innerElem = this._element;
-
if (this._elemIsActive(innerElem)) {
return;
- } // Search for active tab on same parent to deactivate it
-
+ }
+ // Search for active tab on same parent to deactivate it
const active = this._getActiveElem();
-
const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
relatedTarget: innerElem
}) : null;
const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
relatedTarget: active
});
-
if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
return;
}
-
this._deactivate(active, innerElem);
-
this._activate(innerElem, active);
- } // Private
-
+ }
+ // Private
_activate(element, relatedElem) {
if (!element) {
return;
}
-
element.classList.add(CLASS_NAME_ACTIVE);
-
- this._activate(getElementFromSelector(element)); // Search and activate/show the proper section
-
+ this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
element.classList.add(CLASS_NAME_SHOW$1);
return;
}
-
element.removeAttribute('tabindex');
element.setAttribute('aria-selected', true);
-
this._toggleDropDown(element, true);
-
EventHandler.trigger(element, EVENT_SHOWN$1, {
relatedTarget: relatedElem
});
};
-
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
}
-
_deactivate(element, relatedElem) {
if (!element) {
return;
}
-
element.classList.remove(CLASS_NAME_ACTIVE);
element.blur();
-
- this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too
-
+ this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
element.classList.remove(CLASS_NAME_SHOW$1);
return;
}
-
element.setAttribute('aria-selected', false);
element.setAttribute('tabindex', '-1');
-
this._toggleDropDown(element, false);
-
EventHandler.trigger(element, EVENT_HIDDEN$1, {
relatedTarget: relatedElem
});
};
-
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
}
-
_keydown(event) {
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
return;
}
-
event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
-
event.preventDefault();
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true);
-
if (nextActiveElement) {
nextActiveElement.focus({
preventScroll: true
@@ -4842,139 +4119,111 @@ class Tab extends BaseComponent {
Tab.getOrCreateInstance(nextActiveElement).show();
}
}
-
_getChildren() {
// collection of inner elements
return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
}
-
_getActiveElem() {
return this._getChildren().find(child => this._elemIsActive(child)) || null;
}
-
_setInitialAttributes(parent, children) {
this._setAttributeIfNotExists(parent, 'role', 'tablist');
-
for (const child of children) {
this._setInitialAttributesOnChild(child);
}
}
-
_setInitialAttributesOnChild(child) {
child = this._getInnerElement(child);
-
const isActive = this._elemIsActive(child);
-
const outerElem = this._getOuterElement(child);
-
child.setAttribute('aria-selected', isActive);
-
if (outerElem !== child) {
this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
}
-
if (!isActive) {
child.setAttribute('tabindex', '-1');
}
+ this._setAttributeIfNotExists(child, 'role', 'tab');
- this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too
-
-
+ // set attributes to the related panel too
this._setInitialAttributesOnTargetPanel(child);
}
-
_setInitialAttributesOnTargetPanel(child) {
- const target = getElementFromSelector(child);
-
+ const target = SelectorEngine.getElementFromSelector(child);
if (!target) {
return;
}
-
this._setAttributeIfNotExists(target, 'role', 'tabpanel');
-
if (child.id) {
this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`);
}
}
-
_toggleDropDown(element, open) {
const outerElem = this._getOuterElement(element);
-
if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
return;
}
-
const toggle = (selector, className) => {
const element = SelectorEngine.findOne(selector, outerElem);
-
if (element) {
element.classList.toggle(className, open);
}
};
-
toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
outerElem.setAttribute('aria-expanded', open);
}
-
_setAttributeIfNotExists(element, attribute, value) {
if (!element.hasAttribute(attribute)) {
element.setAttribute(attribute, value);
}
}
-
_elemIsActive(elem) {
return elem.classList.contains(CLASS_NAME_ACTIVE);
- } // Try to get the inner element (usually the .nav-link)
-
+ }
+ // Try to get the inner element (usually the .nav-link)
_getInnerElement(elem) {
return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
- } // Try to get the outer element (usually the .nav-item)
-
+ }
+ // Try to get the outer element (usually the .nav-item)
_getOuterElement(elem) {
return elem.closest(SELECTOR_OUTER) || elem;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Tab.getOrCreateInstance(this);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
if (isDisabled(this)) {
return;
}
-
Tab.getOrCreateInstance(this).show();
});
+
/**
* Initialize on focus
*/
-
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
Tab.getOrCreateInstance(element);
@@ -4988,10 +4237,11 @@ defineJQueryPlugin(Tab);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): toast.js
+ * Bootstrap (v5.3.0-alpha1): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -5009,7 +4259,6 @@ const EVENT_SHOW = `show${EVENT_KEY}`;
const EVENT_SHOWN = `shown${EVENT_KEY}`;
const CLASS_NAME_FADE = 'fade';
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
-
const CLASS_NAME_SHOW = 'show';
const CLASS_NAME_SHOWING = 'showing';
const DefaultType = {
@@ -5022,6 +4271,7 @@ const Default = {
autohide: true,
delay: 5000
};
+
/**
* Class definition
*/
@@ -5032,109 +4282,80 @@ class Toast extends BaseComponent {
this._timeout = null;
this._hasMouseInteraction = false;
this._hasKeyboardInteraction = false;
-
this._setListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
show() {
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
-
if (showEvent.defaultPrevented) {
return;
}
-
this._clearTimeout();
-
if (this._config.animation) {
this._element.classList.add(CLASS_NAME_FADE);
}
-
const complete = () => {
this._element.classList.remove(CLASS_NAME_SHOWING);
-
EventHandler.trigger(this._element, EVENT_SHOWN);
-
this._maybeScheduleHide();
};
-
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
-
-
reflow(this._element);
-
this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
-
this._queueCallback(complete, this._element, this._config.animation);
}
-
hide() {
if (!this.isShown()) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
-
if (hideEvent.defaultPrevented) {
return;
}
-
const complete = () => {
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
-
-
this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
-
EventHandler.trigger(this._element, EVENT_HIDDEN);
};
-
this._element.classList.add(CLASS_NAME_SHOWING);
-
this._queueCallback(complete, this._element, this._config.animation);
}
-
dispose() {
this._clearTimeout();
-
if (this.isShown()) {
this._element.classList.remove(CLASS_NAME_SHOW);
}
-
super.dispose();
}
-
isShown() {
return this._element.classList.contains(CLASS_NAME_SHOW);
- } // Private
+ }
+ // Private
_maybeScheduleHide() {
if (!this._config.autohide) {
return;
}
-
if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
return;
}
-
this._timeout = setTimeout(() => {
this.hide();
}, this._config.delay);
}
-
_onInteraction(event, isInteracting) {
switch (event.type) {
case 'mouseover':
@@ -5143,7 +4364,6 @@ class Toast extends BaseComponent {
this._hasMouseInteraction = isInteracting;
break;
}
-
case 'focusin':
case 'focusout':
{
@@ -5151,56 +4371,47 @@ class Toast extends BaseComponent {
break;
}
}
-
if (isInteracting) {
this._clearTimeout();
-
return;
}
-
const nextElement = event.relatedTarget;
-
if (this._element === nextElement || this._element.contains(nextElement)) {
return;
}
-
this._maybeScheduleHide();
}
-
_setListeners() {
EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
}
-
_clearTimeout() {
clearTimeout(this._timeout);
this._timeout = null;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Toast.getOrCreateInstance(this, config);
-
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
}
});
}
-
}
+
/**
* Data API implementation
*/
-
enableDismissTrigger(Toast);
+
/**
* jQuery
*/
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.esm.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.esm.js.map
index 10740b9d8..bd3d9fb65 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.esm.js.map
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.esm.js.map
@@ -1 +1 @@
-{"version":3,"file":"bootstrap.esm.js","sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/selector-engine.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(object)\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getElementFromSelector,\n getjQuery,\n getNextActiveElement,\n getSelectorFromElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const handlerKey of Object.keys(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const keyHandlers of Object.keys(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta) {\n for (const [key, value] of Object.entries(meta || {})) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index'\nimport Manipulator from '../dom/manipulator'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const property of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport { executeAfterTransition, getElement } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Config from './util/config'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.2.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config'\nimport EventHandler from '../dom/event-handler'\nimport { execute } from './index'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport Swipe from './util/swipe'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getSelectorFromElement,\n reflow\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n for (const element of selectorElements) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow } from './index'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isVisible\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer'\nimport { getElement, isElement } from '../util/index'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg(this) : arg\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'\nimport { DefaultAllowlist } from './util/sanitizer'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport TemplateFactory from './util/template-factory'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this.tip) {\n this.tip.remove()\n }\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = this._createPopper(tip)\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n tip.remove()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n\n this._disposePopper()\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, getNextActiveElement, isDisabled } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n"],"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","toType","object","undefined","Object","prototype","toString","call","match","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getSelector","element","selector","getAttribute","hrefAttribute","includes","startsWith","split","trim","getSelectorFromElement","querySelector","getElementFromSelector","getTransitionDurationFromElement","transitionDuration","transitionDelay","window","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","bootstrapHandler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","domElements","querySelectorAll","domElement","findHandler","events","callable","delegationSelector","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","replace","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","keys","on","one","inNamespace","isNamespace","elementEvent","slice","keyHandlers","trigger","args","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","entries","defineProperty","configurable","get","elementMap","Map","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","VERSION","BaseComponent","_element","_config","Data","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","eventName","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","close","closeEvent","_destroyElement","each","data","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","toggle","button","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","touches","clientX","_eventIsPointerPenTouch","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","endCallBack","clearTimeout","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","slideEvent","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","startEvent","activeInstance","dimension","_getDimension","style","complete","capitalizedDimension","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","selectorElements","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","autoClose","boundary","display","offset","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","showEvent","_createPopper","focus","_completeHide","destroy","update","hideEvent","Popper","referenceElement","_getPopperConfig","createPopper","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","manipulationCallBack","setProperty","_applyManipulationCallback","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","scroll","Offcanvas","blur","completeCallback","position","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","domParser","DOMParser","createdDocument","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSOUT","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","shadowRoot","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","hash","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","id","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"bootstrap.esm.js","sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index.js'\nimport Manipulator from '../dom/manipulator.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.0-alpha1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { isDisabled } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config.js'\nimport EventHandler from '../dom/event-handler.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Swipe from './util/swipe.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport BaseComponent from './base-component.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport BaseComponent from './base-component.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport Tooltip from './tooltip.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n"],"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","toType","object","undefined","Object","prototype","toString","call","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getTransitionDurationFromElement","element","transitionDuration","transitionDelay","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","querySelector","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","bootstrapHandler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","domElements","querySelectorAll","domElement","findHandler","events","callable","delegationSelector","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","keys","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","defineProperty","configurable","get","elementMap","Map","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","VERSION","BaseComponent","_element","_config","Data","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","eventName","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","close","closeEvent","_destroyElement","each","data","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","touches","clientX","_eventIsPointerPenTouch","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","endCallBack","clearTimeout","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","slideEvent","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","startEvent","activeInstance","dimension","_getDimension","style","complete","capitalizedDimension","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","autoClose","boundary","display","offset","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","showEvent","_createPopper","focus","_completeHide","destroy","update","hideEvent","Popper","referenceElement","_getPopperConfig","createPopper","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","manipulationCallBack","setProperty","_applyManipulationCallback","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","scroll","Offcanvas","blur","completeCallback","position","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","domParser","DOMParser","createdDocument","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSOUT","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","shadowRoot","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","hash","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js b/vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js
index da70ac1f7..d7ea89f5a 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js
@@ -1,7 +1,7 @@
/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
-import*as Popper from"@popperjs/core";const MAX_UID=1e6,MILLISECONDS_MULTIPLIER=1e3,TRANSITION_END="transitionend",toType=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),getUID=e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e},getSelector=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t},getSelectorFromElement=e=>{const t=getSelector(e);return t&&document.querySelector(t)?t:null},getElementFromSelector=e=>{const t=getSelector(e);return t?document.querySelector(t):null},getTransitionDurationFromElement=e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),s=Number.parseFloat(n);return i||s?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0},triggerTransitionEnd=e=>{e.dispatchEvent(new Event(TRANSITION_END))},isElement=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),getElement=e=>isElement(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(e):null,isVisible=e=>{if(!isElement(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},isDisabled=e=>!e||e.nodeType!==Node.ELEMENT_NODE||!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled")),findShadowRoot=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?findShadowRoot(e.parentNode):null},noop=()=>{},reflow=e=>{e.offsetHeight},getjQuery=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,DOMContentLoadedCallbacks=[],onDOMContentLoaded=e=>{"loading"===document.readyState?(DOMContentLoadedCallbacks.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of DOMContentLoadedCallbacks)e()})),DOMContentLoadedCallbacks.push(e)):e()},isRTL=()=>"rtl"===document.documentElement.dir,defineJQueryPlugin=e=>{var t;t=()=>{const t=getjQuery();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(DOMContentLoadedCallbacks.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of DOMContentLoadedCallbacks)e()})),DOMContentLoadedCallbacks.push(t)):t()},execute=e=>{"function"==typeof e&&e()},executeAfterTransition=(e,t,n=!0)=>{if(!n)return void execute(e);const i=getTransitionDurationFromElement(t)+5;let s=!1;const o=({target:n})=>{n===t&&(s=!0,t.removeEventListener(TRANSITION_END,o),execute(e))};t.addEventListener(TRANSITION_END,o),setTimeout((()=>{s||triggerTransitionEnd(t)}),i)},getNextActiveElement=(e,t,n,i)=>{const s=e.length;let o=e.indexOf(t);return-1===o?!n&&i?e[s-1]:e[0]:(o+=n?1:-1,i&&(o=(o+s)%s),e[Math.max(0,Math.min(o,s-1))])},namespaceRegex=/[^.]*(?=\..*)\.|.*/,stripNameRegex=/\..*/,stripUidRegex=/::\d+$/,eventRegistry={};let uidEvent=1;const customEvents={mouseenter:"mouseover",mouseleave:"mouseout"},nativeEvents=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function makeEventUid(e,t){return t&&`${t}::${uidEvent++}`||e.uidEvent||uidEvent++}function getElementEvents(e){const t=makeEventUid(e);return e.uidEvent=t,eventRegistry[t]=eventRegistry[t]||{},eventRegistry[t]}function bootstrapHandler(e,t){return function n(i){return hydrateObj(i,{delegateTarget:e}),n.oneOff&&EventHandler.off(e,i.type,t),t.apply(e,[i])}}function bootstrapDelegationHandler(e,t,n){return function i(s){const o=e.querySelectorAll(t);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return hydrateObj(s,{delegateTarget:r}),i.oneOff&&EventHandler.off(e,s.type,t,n),n.apply(r,[s])}}function findHandler(e,t,n=null){return Object.values(e).find((e=>e.callable===t&&e.delegationSelector===n))}function normalizeParameters(e,t,n){const i="string"==typeof t,s=i?n:t||n;let o=getTypeEvent(e);return nativeEvents.has(o)||(o=e),[i,s,o]}function addHandler(e,t,n,i,s){if("string"!=typeof t||!e)return;let[o,r,a]=normalizeParameters(t,n,i);if(t in customEvents){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};r=e(r)}const l=getElementEvents(e),c=l[a]||(l[a]={}),_=findHandler(c,r,o?n:null);if(_)return void(_.oneOff=_.oneOff&&s);const d=makeEventUid(r,t.replace(namespaceRegex,"")),h=o?bootstrapDelegationHandler(e,n,r):bootstrapHandler(e,r);h.delegationSelector=o?n:null,h.callable=r,h.oneOff=s,h.uidEvent=d,c[d]=h,e.addEventListener(a,h,o)}function removeHandler(e,t,n,i,s){const o=findHandler(t[n],i,s);o&&(e.removeEventListener(n,o,Boolean(s)),delete t[n][o.uidEvent])}function removeNamespacedHandlers(e,t,n,i){const s=t[n]||{};for(const o of Object.keys(s))if(o.includes(i)){const i=s[o];removeHandler(e,t,n,i.callable,i.delegationSelector)}}function getTypeEvent(e){return e=e.replace(stripNameRegex,""),customEvents[e]||e}const EventHandler={on(e,t,n,i){addHandler(e,t,n,i,!1)},one(e,t,n,i){addHandler(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[s,o,r]=normalizeParameters(t,n,i),a=r!==t,l=getElementEvents(e),c=l[r]||{},_=t.startsWith(".");if(void 0===o){if(_)for(const n of Object.keys(l))removeNamespacedHandlers(e,l,n,t.slice(1));for(const n of Object.keys(c)){const i=n.replace(stripUidRegex,"");if(!a||t.includes(i)){const t=c[n];removeHandler(e,l,r,t.callable,t.delegationSelector)}}}else{if(!Object.keys(c).length)return;removeHandler(e,l,r,o,s?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=getjQuery();let s=null,o=!0,r=!0,a=!1;t!==getTypeEvent(t)&&i&&(s=i.Event(t,n),i(e).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());let l=new Event(t,{bubbles:o,cancelable:!0});return l=hydrateObj(l,n),a&&l.preventDefault(),r&&e.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function hydrateObj(e,t){for(const[n,i]of Object.entries(t||{}))try{e[n]=i}catch(t){Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}const elementMap=new Map,Data={set(e,t,n){elementMap.has(e)||elementMap.set(e,new Map);const i=elementMap.get(e);i.has(t)||0===i.size?i.set(t,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(i.keys())[0]}.`)},get:(e,t)=>elementMap.has(e)&&elementMap.get(e).get(t)||null,remove(e,t){if(!elementMap.has(e))return;const n=elementMap.get(e);n.delete(t),0===n.size&&elementMap.delete(e)}};function normalizeData(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch(t){return e}}function normalizeDataKey(e){return e.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}const Manipulator={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${normalizeDataKey(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${normalizeDataKey(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter((e=>e.startsWith("bs")&&!e.startsWith("bsConfig")));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),t[n]=normalizeData(e.dataset[i])}return t},getDataAttribute:(e,t)=>normalizeData(e.getAttribute(`data-bs-${normalizeDataKey(t)}`))};class Config{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=isElement(t)?Manipulator.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...isElement(t)?Manipulator.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(const i of Object.keys(t)){const s=t[i],o=e[i],r=isElement(o)?"element":null==(n=o)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${r}" but expected type "${s}".`)}var n}}const VERSION="5.2.2";class BaseComponent extends Config{constructor(e,t){super(),(e=getElement(e))&&(this._element=e,this._config=this._getConfig(t),Data.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Data.remove(this._element,this.constructor.DATA_KEY),EventHandler.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,n=!0){executeAfterTransition(e,t,n)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Data.get(getElement(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.2.2"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const enableDismissTrigger=(e,t="hide")=>{const n=`click.dismiss${e.EVENT_KEY}`,i=e.NAME;EventHandler.on(document,n,`[data-bs-dismiss="${i}"]`,(function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),isDisabled(this))return;const s=getElementFromSelector(this)||this.closest(`.${i}`);e.getOrCreateInstance(s)[t]()}))},NAME$f="alert",DATA_KEY$a="bs.alert",EVENT_KEY$b=".bs.alert",EVENT_CLOSE="close.bs.alert",EVENT_CLOSED="closed.bs.alert",CLASS_NAME_FADE$5="fade",CLASS_NAME_SHOW$8="show";class Alert extends BaseComponent{static get NAME(){return NAME$f}close(){if(EventHandler.trigger(this._element,EVENT_CLOSE).defaultPrevented)return;this._element.classList.remove("show");const e=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,e)}_destroyElement(){this._element.remove(),EventHandler.trigger(this._element,EVENT_CLOSED),this.dispose()}static jQueryInterface(e){return this.each((function(){const t=Alert.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}enableDismissTrigger(Alert,"close"),defineJQueryPlugin(Alert);const NAME$e="button",DATA_KEY$9="bs.button",EVENT_KEY$a=".bs.button",DATA_API_KEY$6=".data-api",CLASS_NAME_ACTIVE$3="active",SELECTOR_DATA_TOGGLE$5='[data-bs-toggle="button"]',EVENT_CLICK_DATA_API$6="click.bs.button.data-api";class Button extends BaseComponent{static get NAME(){return NAME$e}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(e){return this.each((function(){const t=Button.getOrCreateInstance(this);"toggle"===e&&t[e]()}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$6,SELECTOR_DATA_TOGGLE$5,(e=>{e.preventDefault();const t=e.target.closest(SELECTOR_DATA_TOGGLE$5);Button.getOrCreateInstance(t).toggle()})),defineJQueryPlugin(Button);const SelectorEngine={find:(e,t=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(t,e)),findOne:(e,t=document.documentElement)=>Element.prototype.querySelector.call(t,e),children:(e,t)=>[].concat(...e.children).filter((e=>e.matches(t))),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((e=>`${e}:not([tabindex^="-"])`)).join(",");return this.find(t,e).filter((e=>!isDisabled(e)&&isVisible(e)))}},NAME$d="swipe",EVENT_KEY$9=".bs.swipe",EVENT_TOUCHSTART="touchstart.bs.swipe",EVENT_TOUCHMOVE="touchmove.bs.swipe",EVENT_TOUCHEND="touchend.bs.swipe",EVENT_POINTERDOWN="pointerdown.bs.swipe",EVENT_POINTERUP="pointerup.bs.swipe",POINTER_TYPE_TOUCH="touch",POINTER_TYPE_PEN="pen",CLASS_NAME_POINTER_EVENT="pointer-event",SWIPE_THRESHOLD=40,Default$c={endCallback:null,leftCallback:null,rightCallback:null},DefaultType$c={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Swipe extends Config{constructor(e,t){super(),this._element=e,e&&Swipe.isSupported()&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Default$c}static get DefaultType(){return DefaultType$c}static get NAME(){return NAME$d}dispose(){EventHandler.off(this._element,".bs.swipe")}_start(e){this._supportPointerEvents?this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX):this._deltaX=e.touches[0].clientX}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),execute(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){const e=Math.abs(this._deltaX);if(e<=40)return;const t=e/this._deltaX;this._deltaX=0,t&&execute(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(EventHandler.on(this._element,EVENT_POINTERDOWN,(e=>this._start(e))),EventHandler.on(this._element,EVENT_POINTERUP,(e=>this._end(e))),this._element.classList.add("pointer-event")):(EventHandler.on(this._element,EVENT_TOUCHSTART,(e=>this._start(e))),EventHandler.on(this._element,EVENT_TOUCHMOVE,(e=>this._move(e))),EventHandler.on(this._element,EVENT_TOUCHEND,(e=>this._end(e))))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&("pen"===e.pointerType||"touch"===e.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const NAME$c="carousel",DATA_KEY$8="bs.carousel",EVENT_KEY$8=".bs.carousel",DATA_API_KEY$5=".data-api",ARROW_LEFT_KEY$1="ArrowLeft",ARROW_RIGHT_KEY$1="ArrowRight",TOUCHEVENT_COMPAT_WAIT=500,ORDER_NEXT="next",ORDER_PREV="prev",DIRECTION_LEFT="left",DIRECTION_RIGHT="right",EVENT_SLIDE="slide.bs.carousel",EVENT_SLID="slid.bs.carousel",EVENT_KEYDOWN$1="keydown.bs.carousel",EVENT_MOUSEENTER$1="mouseenter.bs.carousel",EVENT_MOUSELEAVE$1="mouseleave.bs.carousel",EVENT_DRAG_START="dragstart.bs.carousel",EVENT_LOAD_DATA_API$3="load.bs.carousel.data-api",EVENT_CLICK_DATA_API$5="click.bs.carousel.data-api",CLASS_NAME_CAROUSEL="carousel",CLASS_NAME_ACTIVE$2="active",CLASS_NAME_SLIDE="slide",CLASS_NAME_END="carousel-item-end",CLASS_NAME_START="carousel-item-start",CLASS_NAME_NEXT="carousel-item-next",CLASS_NAME_PREV="carousel-item-prev",SELECTOR_ACTIVE=".active",SELECTOR_ITEM=".carousel-item",SELECTOR_ACTIVE_ITEM=".active.carousel-item",SELECTOR_ITEM_IMG=".carousel-item img",SELECTOR_INDICATORS=".carousel-indicators",SELECTOR_DATA_SLIDE="[data-bs-slide], [data-bs-slide-to]",SELECTOR_DATA_RIDE='[data-bs-ride="carousel"]',KEY_TO_DIRECTION={ArrowLeft:"right",ArrowRight:"left"},Default$b={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},DefaultType$b={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class Carousel extends BaseComponent{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=SelectorEngine.findOne(SELECTOR_INDICATORS,this._element),this._addEventListeners(),"carousel"===this._config.ride&&this.cycle()}static get Default(){return Default$b}static get DefaultType(){return DefaultType$b}static get NAME(){return NAME$c}next(){this._slide("next")}nextWhenVisible(){!document.hidden&&isVisible(this._element)&&this.next()}prev(){this._slide("prev")}pause(){this._isSliding&&triggerTransitionEnd(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?EventHandler.one(this._element,EVENT_SLID,(()=>this.cycle())):this.cycle())}to(e){const t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding)return void EventHandler.one(this._element,EVENT_SLID,(()=>this.to(e)));const n=this._getItemIndex(this._getActive());if(n===e)return;const i=e>n?"next":"prev";this._slide(i,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&EventHandler.on(this._element,EVENT_KEYDOWN$1,(e=>this._keydown(e))),"hover"===this._config.pause&&(EventHandler.on(this._element,EVENT_MOUSEENTER$1,(()=>this.pause())),EventHandler.on(this._element,EVENT_MOUSELEAVE$1,(()=>this._maybeEnableCycle()))),this._config.touch&&Swipe.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const e of SelectorEngine.find(SELECTOR_ITEM_IMG,this._element))EventHandler.on(e,EVENT_DRAG_START,(e=>e.preventDefault()));const e={leftCallback:()=>this._slide(this._directionToOrder("left")),rightCallback:()=>this._slide(this._directionToOrder("right")),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new Swipe(this._element,e)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;const t=KEY_TO_DIRECTION[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;const t=SelectorEngine.findOne(".active",this._indicatorsElement);t.classList.remove("active"),t.removeAttribute("aria-current");const n=SelectorEngine.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);n&&(n.classList.add("active"),n.setAttribute("aria-current","true"))}_updateInterval(){const e=this._activeElement||this._getActive();if(!e)return;const t=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;const n=this._getActive(),i="next"===e,s=t||getNextActiveElement(this._getItems(),n,i,this._config.wrap);if(s===n)return;const o=this._getItemIndex(s),r=t=>EventHandler.trigger(this._element,t,{relatedTarget:s,direction:this._orderToDirection(e),from:this._getItemIndex(n),to:o});if(r(EVENT_SLIDE).defaultPrevented)return;if(!n||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=i?CLASS_NAME_START:CLASS_NAME_END,c=i?CLASS_NAME_NEXT:CLASS_NAME_PREV;s.classList.add(c),reflow(s),n.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add("active"),n.classList.remove("active",c,l),this._isSliding=!1,r(EVENT_SLID)}),n,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM,this._element)}_getItems(){return SelectorEngine.find(SELECTOR_ITEM,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return isRTL()?"left"===e?"prev":"next":"left"===e?"next":"prev"}_orderToDirection(e){return isRTL()?"prev"===e?"left":"right":"prev"===e?"right":"left"}static jQueryInterface(e){return this.each((function(){const t=Carousel.getOrCreateInstance(this,e);if("number"!=typeof e){if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}else t.to(e)}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$5,SELECTOR_DATA_SLIDE,(function(e){const t=getElementFromSelector(this);if(!t||!t.classList.contains("carousel"))return;e.preventDefault();const n=Carousel.getOrCreateInstance(t),i=this.getAttribute("data-bs-slide-to");return i?(n.to(i),void n._maybeEnableCycle()):"next"===Manipulator.getDataAttribute(this,"slide")?(n.next(),void n._maybeEnableCycle()):(n.prev(),void n._maybeEnableCycle())})),EventHandler.on(window,EVENT_LOAD_DATA_API$3,(()=>{const e=SelectorEngine.find(SELECTOR_DATA_RIDE);for(const t of e)Carousel.getOrCreateInstance(t)})),defineJQueryPlugin(Carousel);const NAME$b="collapse",DATA_KEY$7="bs.collapse",EVENT_KEY$7=".bs.collapse",DATA_API_KEY$4=".data-api",EVENT_SHOW$6="show.bs.collapse",EVENT_SHOWN$6="shown.bs.collapse",EVENT_HIDE$6="hide.bs.collapse",EVENT_HIDDEN$6="hidden.bs.collapse",EVENT_CLICK_DATA_API$4="click.bs.collapse.data-api",CLASS_NAME_SHOW$7="show",CLASS_NAME_COLLAPSE="collapse",CLASS_NAME_COLLAPSING="collapsing",CLASS_NAME_COLLAPSED="collapsed",CLASS_NAME_DEEPER_CHILDREN=":scope .collapse .collapse",CLASS_NAME_HORIZONTAL="collapse-horizontal",WIDTH="width",HEIGHT="height",SELECTOR_ACTIVES=".collapse.show, .collapse.collapsing",SELECTOR_DATA_TOGGLE$4='[data-bs-toggle="collapse"]',Default$a={parent:null,toggle:!0},DefaultType$a={parent:"(null|element)",toggle:"boolean"};class Collapse extends BaseComponent{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);for(const e of n){const t=getSelectorFromElement(e),n=SelectorEngine.find(t).filter((e=>e===this._element));null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Default$a}static get DefaultType(){return DefaultType$a}static get NAME(){return NAME$b}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(SELECTOR_ACTIVES).filter((e=>e!==this._element)).map((e=>Collapse.getOrCreateInstance(e,{toggle:!1})))),e.length&&e[0]._isTransitioning)return;if(EventHandler.trigger(this._element,EVENT_SHOW$6).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove("collapse"),this._element.classList.add("collapsing"),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove("collapsing"),this._element.classList.add("collapse","show"),this._element.style[t]="",EventHandler.trigger(this._element,EVENT_SHOWN$6)}),this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(EventHandler.trigger(this._element,EVENT_HIDE$6).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,reflow(this._element),this._element.classList.add("collapsing"),this._element.classList.remove("collapse","show");for(const e of this._triggerArray){const t=getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0,this._element.style[e]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove("collapsing"),this._element.classList.add("collapse"),EventHandler.trigger(this._element,EVENT_HIDDEN$6)}),this._element,!0)}_isShown(e=this._element){return e.classList.contains("show")}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=getElement(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?WIDTH:HEIGHT}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);for(const t of e){const e=getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN,this._config.parent);return SelectorEngine.find(e,this._config.parent).filter((e=>!t.includes(e)))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each((function(){const n=Collapse.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$4,SELECTOR_DATA_TOGGLE$4,(function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();const t=getSelectorFromElement(this),n=SelectorEngine.find(t);for(const e of n)Collapse.getOrCreateInstance(e,{toggle:!1}).toggle()})),defineJQueryPlugin(Collapse);const NAME$a="dropdown",DATA_KEY$6="bs.dropdown",EVENT_KEY$6=".bs.dropdown",DATA_API_KEY$3=".data-api",ESCAPE_KEY$2="Escape",TAB_KEY$1="Tab",ARROW_UP_KEY$1="ArrowUp",ARROW_DOWN_KEY$1="ArrowDown",RIGHT_MOUSE_BUTTON=2,EVENT_HIDE$5="hide.bs.dropdown",EVENT_HIDDEN$5="hidden.bs.dropdown",EVENT_SHOW$5="show.bs.dropdown",EVENT_SHOWN$5="shown.bs.dropdown",EVENT_CLICK_DATA_API$3="click.bs.dropdown.data-api",EVENT_KEYDOWN_DATA_API="keydown.bs.dropdown.data-api",EVENT_KEYUP_DATA_API="keyup.bs.dropdown.data-api",CLASS_NAME_SHOW$6="show",CLASS_NAME_DROPUP="dropup",CLASS_NAME_DROPEND="dropend",CLASS_NAME_DROPSTART="dropstart",CLASS_NAME_DROPUP_CENTER="dropup-center",CLASS_NAME_DROPDOWN_CENTER="dropdown-center",SELECTOR_DATA_TOGGLE$3='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',SELECTOR_DATA_TOGGLE_SHOWN=`${SELECTOR_DATA_TOGGLE$3}.show`,SELECTOR_MENU=".dropdown-menu",SELECTOR_NAVBAR=".navbar",SELECTOR_NAVBAR_NAV=".navbar-nav",SELECTOR_VISIBLE_ITEMS=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",PLACEMENT_TOP=isRTL()?"top-end":"top-start",PLACEMENT_TOPEND=isRTL()?"top-start":"top-end",PLACEMENT_BOTTOM=isRTL()?"bottom-end":"bottom-start",PLACEMENT_BOTTOMEND=isRTL()?"bottom-start":"bottom-end",PLACEMENT_RIGHT=isRTL()?"left-start":"right-start",PLACEMENT_LEFT=isRTL()?"right-start":"left-start",PLACEMENT_TOPCENTER="top",PLACEMENT_BOTTOMCENTER="bottom",Default$9={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},DefaultType$9={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Dropdown extends BaseComponent{constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=SelectorEngine.next(this._element,SELECTOR_MENU)[0]||SelectorEngine.prev(this._element,SELECTOR_MENU)[0]||SelectorEngine.findOne(SELECTOR_MENU,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Default$9}static get DefaultType(){return DefaultType$9}static get NAME(){return NAME$a}toggle(){return this._isShown()?this.hide():this.show()}show(){if(isDisabled(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!EventHandler.trigger(this._element,EVENT_SHOW$5,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))EventHandler.on(e,"mouseover",noop);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add("show"),this._element.classList.add("show"),EventHandler.trigger(this._element,EVENT_SHOWN$5,e)}}hide(){if(isDisabled(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!EventHandler.trigger(this._element,EVENT_HIDE$5,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))EventHandler.off(e,"mouseover",noop);this._popper&&this._popper.destroy(),this._menu.classList.remove("show"),this._element.classList.remove("show"),this._element.setAttribute("aria-expanded","false"),Manipulator.removeDataAttribute(this._menu,"popper"),EventHandler.trigger(this._element,EVENT_HIDDEN$5,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!isElement(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===Popper)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=this._parent:isElement(this._config.reference)?e=getElement(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=Popper.createPopper(e,this._menu,t)}_isShown(){return this._menu.classList.contains("show")}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return PLACEMENT_RIGHT;if(e.classList.contains("dropstart"))return PLACEMENT_LEFT;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?PLACEMENT_TOPEND:PLACEMENT_TOP:t?PLACEMENT_BOTTOMEND:PLACEMENT_BOTTOM}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(Manipulator.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_selectMenuItem({key:e,target:t}){const n=SelectorEngine.find(SELECTOR_VISIBLE_ITEMS,this._menu).filter((e=>isVisible(e)));n.length&&getNextActiveElement(n,t,e===ARROW_DOWN_KEY$1,!n.includes(t)).focus()}static jQueryInterface(e){return this.each((function(){const t=Dropdown.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);for(const n of t){const t=Dropdown.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),s=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!s||"outside"===t._config.autoClose&&s)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const o={relatedTarget:t._element};"click"===e.type&&(o.clickEvent=e),t._completeHide(o)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[ARROW_UP_KEY$1,ARROW_DOWN_KEY$1].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const s=this.matches(SELECTOR_DATA_TOGGLE$3)?this:SelectorEngine.prev(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.next(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3,e.delegateTarget.parentNode),o=Dropdown.getOrCreateInstance(s);if(i)return e.stopPropagation(),o.show(),void o._selectMenuItem(e);o._isShown()&&(e.stopPropagation(),o.hide(),s.focus())}}EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_DATA_TOGGLE$3,Dropdown.dataApiKeydownHandler),EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_MENU,Dropdown.dataApiKeydownHandler),EventHandler.on(document,EVENT_CLICK_DATA_API$3,Dropdown.clearMenus),EventHandler.on(document,EVENT_KEYUP_DATA_API,Dropdown.clearMenus),EventHandler.on(document,EVENT_CLICK_DATA_API$3,SELECTOR_DATA_TOGGLE$3,(function(e){e.preventDefault(),Dropdown.getOrCreateInstance(this).toggle()})),defineJQueryPlugin(Dropdown);const SELECTOR_FIXED_CONTENT=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",SELECTOR_STICKY_CONTENT=".sticky-top",PROPERTY_PADDING="padding-right",PROPERTY_MARGIN="margin-right";class ScrollBarHelper{constructor(){this._element=document.body}getWidth(){const e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){const e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,"padding-right",(t=>t+e)),this._setElementAttributes(SELECTOR_FIXED_CONTENT,"padding-right",(t=>t+e)),this._setElementAttributes(".sticky-top","margin-right",(t=>t-e))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"padding-right"),this._resetElementAttributes(SELECTOR_FIXED_CONTENT,"padding-right"),this._resetElementAttributes(".sticky-top","margin-right")}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,t,n){const i=this.getWidth();this._applyManipulationCallback(e,(e=>{if(e!==this._element&&window.innerWidth>e.clientWidth+i)return;this._saveInitialAttribute(e,t);const s=window.getComputedStyle(e).getPropertyValue(t);e.style.setProperty(t,`${n(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(e,t){const n=e.style.getPropertyValue(t);n&&Manipulator.setDataAttribute(e,t,n)}_resetElementAttributes(e,t){this._applyManipulationCallback(e,(e=>{const n=Manipulator.getDataAttribute(e,t);null!==n?(Manipulator.removeDataAttribute(e,t),e.style.setProperty(t,n)):e.style.removeProperty(t)}))}_applyManipulationCallback(e,t){if(isElement(e))t(e);else for(const n of SelectorEngine.find(e,this._element))t(n)}}const NAME$9="backdrop",CLASS_NAME_FADE$4="fade",CLASS_NAME_SHOW$5="show",EVENT_MOUSEDOWN="mousedown.bs.backdrop",Default$8={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},DefaultType$8={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Backdrop extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return Default$8}static get DefaultType(){return DefaultType$8}static get NAME(){return NAME$9}show(e){if(!this._config.isVisible)return void execute(e);this._append();const t=this._getElement();this._config.isAnimated&&reflow(t),t.classList.add("show"),this._emulateAnimation((()=>{execute(e)}))}hide(e){this._config.isVisible?(this._getElement().classList.remove("show"),this._emulateAnimation((()=>{this.dispose(),execute(e)}))):execute(e)}dispose(){this._isAppended&&(EventHandler.off(this._element,EVENT_MOUSEDOWN),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add("fade"),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=getElement(e.rootElement),e}_append(){if(this._isAppended)return;const e=this._getElement();this._config.rootElement.append(e),EventHandler.on(e,EVENT_MOUSEDOWN,(()=>{execute(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(e){executeAfterTransition(e,this._getElement(),this._config.isAnimated)}}const NAME$8="focustrap",DATA_KEY$5="bs.focustrap",EVENT_KEY$5=".bs.focustrap",EVENT_FOCUSIN$2="focusin.bs.focustrap",EVENT_KEYDOWN_TAB="keydown.tab.bs.focustrap",TAB_KEY="Tab",TAB_NAV_FORWARD="forward",TAB_NAV_BACKWARD="backward",Default$7={autofocus:!0,trapElement:null},DefaultType$7={autofocus:"boolean",trapElement:"element"};class FocusTrap extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Default$7}static get DefaultType(){return DefaultType$7}static get NAME(){return NAME$8}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),EventHandler.off(document,EVENT_KEY$5),EventHandler.on(document,EVENT_FOCUSIN$2,(e=>this._handleFocusin(e))),EventHandler.on(document,EVENT_KEYDOWN_TAB,(e=>this._handleKeydown(e))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,EventHandler.off(document,EVENT_KEY$5))}_handleFocusin(e){const{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;const n=SelectorEngine.focusableChildren(t);0===n.length?t.focus():"backward"===this._lastTabNavDirection?n[n.length-1].focus():n[0].focus()}_handleKeydown(e){"Tab"===e.key&&(this._lastTabNavDirection=e.shiftKey?"backward":"forward")}}const NAME$7="modal",DATA_KEY$4="bs.modal",EVENT_KEY$4=".bs.modal",DATA_API_KEY$2=".data-api",ESCAPE_KEY$1="Escape",EVENT_HIDE$4="hide.bs.modal",EVENT_HIDE_PREVENTED$1="hidePrevented.bs.modal",EVENT_HIDDEN$4="hidden.bs.modal",EVENT_SHOW$4="show.bs.modal",EVENT_SHOWN$4="shown.bs.modal",EVENT_RESIZE$1="resize.bs.modal",EVENT_CLICK_DISMISS="click.dismiss.bs.modal",EVENT_MOUSEDOWN_DISMISS="mousedown.dismiss.bs.modal",EVENT_KEYDOWN_DISMISS$1="keydown.dismiss.bs.modal",EVENT_CLICK_DATA_API$2="click.bs.modal.data-api",CLASS_NAME_OPEN="modal-open",CLASS_NAME_FADE$3="fade",CLASS_NAME_SHOW$4="show",CLASS_NAME_STATIC="modal-static",OPEN_SELECTOR$1=".modal.show",SELECTOR_DIALOG=".modal-dialog",SELECTOR_MODAL_BODY=".modal-body",SELECTOR_DATA_TOGGLE$2='[data-bs-toggle="modal"]',Default$6={backdrop:!0,focus:!0,keyboard:!0},DefaultType$6={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Modal extends BaseComponent{constructor(e,t){super(e,t),this._dialog=SelectorEngine.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new ScrollBarHelper,this._addEventListeners()}static get Default(){return Default$6}static get DefaultType(){return DefaultType$6}static get NAME(){return NAME$7}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||EventHandler.trigger(this._element,EVENT_SHOW$4,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add("modal-open"),this._adjustDialog(),this._backdrop.show((()=>this._showElement(e))))}hide(){this._isShown&&!this._isTransitioning&&(EventHandler.trigger(this._element,EVENT_HIDE$4).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove("show"),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const e of[window,this._dialog])EventHandler.off(e,".bs.modal");this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Backdrop({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const t=SelectorEngine.findOne(".modal-body",this._dialog);t&&(t.scrollTop=0),reflow(this._element),this._element.classList.add("show"),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,EventHandler.trigger(this._element,EVENT_SHOWN$4,{relatedTarget:e})}),this._dialog,this._isAnimated())}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS$1,(e=>{if("Escape"===e.key)return this._config.keyboard?(e.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),EventHandler.on(window,EVENT_RESIZE$1,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),EventHandler.on(this._element,EVENT_MOUSEDOWN_DISMISS,(e=>{EventHandler.one(this._element,EVENT_CLICK_DISMISS,(t=>{this._element===e.target&&this._element===t.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove("modal-open"),this._resetAdjustments(),this._scrollBar.reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$4)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED$1).defaultPrevented)return;const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._element.style.overflowY;"hidden"===t||this._element.classList.contains("modal-static")||(e||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static"),this._queueCallback((()=>{this._element.classList.remove("modal-static"),this._queueCallback((()=>{this._element.style.overflowY=t}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),n=t>0;if(n&&!e){const e=isRTL()?"paddingLeft":"paddingRight";this._element.style[e]=`${t}px`}if(!n&&e){const e=isRTL()?"paddingRight":"paddingLeft";this._element.style[e]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,t){return this.each((function(){const n=Modal.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e](t)}}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$2,SELECTOR_DATA_TOGGLE$2,(function(e){const t=getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),EventHandler.one(t,EVENT_SHOW$4,(e=>{e.defaultPrevented||EventHandler.one(t,EVENT_HIDDEN$4,(()=>{isVisible(this)&&this.focus()}))}));const n=SelectorEngine.findOne(".modal.show");n&&Modal.getInstance(n).hide(),Modal.getOrCreateInstance(t).toggle(this)})),enableDismissTrigger(Modal),defineJQueryPlugin(Modal);const NAME$6="offcanvas",DATA_KEY$3="bs.offcanvas",EVENT_KEY$3=".bs.offcanvas",DATA_API_KEY$1=".data-api",EVENT_LOAD_DATA_API$2="load.bs.offcanvas.data-api",ESCAPE_KEY="Escape",CLASS_NAME_SHOW$3="show",CLASS_NAME_SHOWING$1="showing",CLASS_NAME_HIDING="hiding",CLASS_NAME_BACKDROP="offcanvas-backdrop",OPEN_SELECTOR=".offcanvas.show",EVENT_SHOW$3="show.bs.offcanvas",EVENT_SHOWN$3="shown.bs.offcanvas",EVENT_HIDE$3="hide.bs.offcanvas",EVENT_HIDE_PREVENTED="hidePrevented.bs.offcanvas",EVENT_HIDDEN$3="hidden.bs.offcanvas",EVENT_RESIZE="resize.bs.offcanvas",EVENT_CLICK_DATA_API$1="click.bs.offcanvas.data-api",EVENT_KEYDOWN_DISMISS="keydown.dismiss.bs.offcanvas",SELECTOR_DATA_TOGGLE$1='[data-bs-toggle="offcanvas"]',Default$5={backdrop:!0,keyboard:!0,scroll:!1},DefaultType$5={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Offcanvas extends BaseComponent{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Default$5}static get DefaultType(){return DefaultType$5}static get NAME(){return NAME$6}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||EventHandler.trigger(this._element,EVENT_SHOW$3,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new ScrollBarHelper).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add("showing"),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add("show"),this._element.classList.remove("showing"),EventHandler.trigger(this._element,EVENT_SHOWN$3,{relatedTarget:e})}),this._element,!0))}hide(){this._isShown&&(EventHandler.trigger(this._element,EVENT_HIDE$3).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add("hiding"),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove("show","hiding"),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new ScrollBarHelper).reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$3)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const e=Boolean(this._config.backdrop);return new Backdrop({className:CLASS_NAME_BACKDROP,isVisible:e,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:e?()=>{"static"!==this._config.backdrop?this.hide():EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED)}:null})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS,(e=>{"Escape"===e.key&&(this._config.keyboard?this.hide():EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED))}))}static jQueryInterface(e){return this.each((function(){const t=Offcanvas.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$1,SELECTOR_DATA_TOGGLE$1,(function(e){const t=getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),isDisabled(this))return;EventHandler.one(t,EVENT_HIDDEN$3,(()=>{isVisible(this)&&this.focus()}));const n=SelectorEngine.findOne(OPEN_SELECTOR);n&&n!==t&&Offcanvas.getInstance(n).hide(),Offcanvas.getOrCreateInstance(t).toggle(this)})),EventHandler.on(window,EVENT_LOAD_DATA_API$2,(()=>{for(const e of SelectorEngine.find(OPEN_SELECTOR))Offcanvas.getOrCreateInstance(e).show()})),EventHandler.on(window,EVENT_RESIZE,(()=>{for(const e of SelectorEngine.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(e).position&&Offcanvas.getOrCreateInstance(e).hide()})),enableDismissTrigger(Offcanvas),defineJQueryPlugin(Offcanvas);const uriAttributes=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),ARIA_ATTRIBUTE_PATTERN=/^aria-[\w-]*$/i,SAFE_URL_PATTERN=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,DATA_URL_PATTERN=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,allowedAttribute=(e,t)=>{const n=e.nodeName.toLowerCase();return t.includes(n)?!uriAttributes.has(n)||Boolean(SAFE_URL_PATTERN.test(e.nodeValue)||DATA_URL_PATTERN.test(e.nodeValue)):t.filter((e=>e instanceof RegExp)).some((e=>e.test(n)))},DefaultAllowlist={"*":["class","dir","id","lang","role",ARIA_ATTRIBUTE_PATTERN],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]};function sanitizeHtml(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),s=[].concat(...i.body.querySelectorAll("*"));for(const e of s){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),s=[].concat(t["*"]||[],t[n]||[]);for(const t of i)allowedAttribute(t,s)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}const NAME$5="TemplateFactory",Default$4={allowList:DefaultAllowlist,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},DefaultType$4={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},DefaultContentType={entry:"(string|element|function|null)",selector:"(string|element)"};class TemplateFactory extends Config{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Default$4}static get DefaultType(){return DefaultType$4}static get NAME(){return NAME$5}getContent(){return Object.values(this._config.content).map((e=>this._resolvePossibleFunction(e))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},DefaultContentType)}_setContent(e,t,n){const i=SelectorEngine.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?isElement(t)?this._putElementInTemplate(getElement(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?sanitizeHtml(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return"function"==typeof e?e(this):e}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const NAME$4="tooltip",DISALLOWED_ATTRIBUTES=new Set(["sanitize","allowList","sanitizeFn"]),CLASS_NAME_FADE$2="fade",CLASS_NAME_MODAL="modal",CLASS_NAME_SHOW$2="show",SELECTOR_TOOLTIP_INNER=".tooltip-inner",SELECTOR_MODAL=".modal",EVENT_MODAL_HIDE="hide.bs.modal",TRIGGER_HOVER="hover",TRIGGER_FOCUS="focus",TRIGGER_CLICK="click",TRIGGER_MANUAL="manual",EVENT_HIDE$2="hide",EVENT_HIDDEN$2="hidden",EVENT_SHOW$2="show",EVENT_SHOWN$2="shown",EVENT_INSERTED="inserted",EVENT_CLICK$1="click",EVENT_FOCUSIN$1="focusin",EVENT_FOCUSOUT$1="focusout",EVENT_MOUSEENTER="mouseenter",EVENT_MOUSELEAVE="mouseleave",AttachmentMap={AUTO:"auto",TOP:"top",RIGHT:isRTL()?"left":"right",BOTTOM:"bottom",LEFT:isRTL()?"right":"left"},Default$3={allowList:DefaultAllowlist,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},DefaultType$3={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Tooltip extends BaseComponent{constructor(e,t){if(void 0===Popper)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Default$3}static get DefaultType(){return DefaultType$3}static get NAME(){return NAME$4}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),EventHandler.off(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this.tip&&this.tip.remove(),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=EventHandler.trigger(this._element,this.constructor.eventName("show")),t=(findShadowRoot(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this.tip&&(this.tip.remove(),this.tip=null);const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),EventHandler.trigger(this._element,this.constructor.eventName("inserted"))),this._popper?this._popper.update():this._popper=this._createPopper(n),n.classList.add("show"),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))EventHandler.on(e,"mouseover",noop);this._queueCallback((()=>{EventHandler.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(EventHandler.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;const e=this._getTipElement();if(e.classList.remove("show"),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))EventHandler.off(e,"mouseover",noop);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||e.remove(),this._element.removeAttribute("aria-describedby"),EventHandler.trigger(this._element,this.constructor.eventName("hidden")),this._disposePopper())}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove("fade","show"),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=getUID(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add("fade"),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new TemplateFactory({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains("fade")}_isShown(){return this.tip&&this.tip.classList.contains("show")}_createPopper(e){const t="function"==typeof this._config.placement?this._config.placement.call(this,e,this._element):this._config.placement,n=AttachmentMap[t.toUpperCase()];return Popper.createPopper(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return"function"==typeof e?e.call(this._element):e}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)EventHandler.on(this._element,this.constructor.eventName("click"),this._config.selector,(e=>{this._initializeOnDelegatedTarget(e).toggle()}));else if("manual"!==t){const e="hover"===t?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n="hover"===t?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");EventHandler.on(this._element,e,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?"focus":"hover"]=!0,t._enter()})),EventHandler.on(this._element,n,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?"focus":"hover"]=t._element.contains(e.relatedTarget),t._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},EventHandler.on(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=Manipulator.getDataAttributes(this._element);for(const e of Object.keys(t))DISALLOWED_ATTRIBUTES.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:getElement(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const t in this._config)this.constructor.Default[t]!==this._config[t]&&(e[t]=this._config[t]);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(e){return this.each((function(){const t=Tooltip.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}defineJQueryPlugin(Tooltip);const NAME$3="popover",SELECTOR_TITLE=".popover-header",SELECTOR_CONTENT=".popover-body",Default$2={...Tooltip.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},DefaultType$2={...Tooltip.DefaultType,content:"(null|string|element|function)"};class Popover extends Tooltip{static get Default(){return Default$2}static get DefaultType(){return DefaultType$2}static get NAME(){return NAME$3}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[SELECTOR_TITLE]:this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each((function(){const t=Popover.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}defineJQueryPlugin(Popover);const NAME$2="scrollspy",DATA_KEY$2="bs.scrollspy",EVENT_KEY$2=".bs.scrollspy",DATA_API_KEY=".data-api",EVENT_ACTIVATE="activate.bs.scrollspy",EVENT_CLICK="click.bs.scrollspy",EVENT_LOAD_DATA_API$1="load.bs.scrollspy.data-api",CLASS_NAME_DROPDOWN_ITEM="dropdown-item",CLASS_NAME_ACTIVE$1="active",SELECTOR_DATA_SPY='[data-bs-spy="scroll"]',SELECTOR_TARGET_LINKS="[href]",SELECTOR_NAV_LIST_GROUP=".nav, .list-group",SELECTOR_NAV_LINKS=".nav-link",SELECTOR_NAV_ITEMS=".nav-item",SELECTOR_LIST_ITEMS=".list-group-item",SELECTOR_LINK_ITEMS=".nav-link, .nav-item > .nav-link, .list-group-item",SELECTOR_DROPDOWN=".dropdown",SELECTOR_DROPDOWN_TOGGLE$1=".dropdown-toggle",Default$1={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},DefaultType$1={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class ScrollSpy extends BaseComponent{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Default$1}static get DefaultType(){return DefaultType$1}static get NAME(){return NAME$2}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=getElement(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,"string"==typeof e.threshold&&(e.threshold=e.threshold.split(",").map((e=>Number.parseFloat(e)))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(EventHandler.off(this._config.target,EVENT_CLICK),EventHandler.on(this._config.target,EVENT_CLICK,"[href]",(e=>{const t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();const n=this._rootElement||window,i=t.offsetTop-this._element.offsetTop;if(n.scrollTo)return void n.scrollTo({top:i,behavior:"smooth"});n.scrollTop=i}})))}_getNewObserver(){const e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((e=>this._observerCallback(e)),e)}_observerCallback(e){const t=e=>this._targetLinks.get(`#${e.target.id}`),n=e=>{this._previousScrollData.visibleEntryTop=e.target.offsetTop,this._process(t(e))},i=(this._rootElement||document.documentElement).scrollTop,s=i>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=i;for(const o of e){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(o));continue}const e=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&e){if(n(o),!i)return}else s||e||n(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const e=SelectorEngine.find("[href]",this._config.target);for(const t of e){if(!t.hash||isDisabled(t))continue;const e=SelectorEngine.findOne(t.hash,this._element);isVisible(e)&&(this._targetLinks.set(t.hash,t),this._observableSections.set(t.hash,e))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add("active"),this._activateParents(e),EventHandler.trigger(this._element,EVENT_ACTIVATE,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains("dropdown-item"))SelectorEngine.findOne(".dropdown-toggle",e.closest(".dropdown")).classList.add("active");else for(const t of SelectorEngine.parents(e,".nav, .list-group"))for(const e of SelectorEngine.prev(t,SELECTOR_LINK_ITEMS))e.classList.add("active")}_clearActiveClass(e){e.classList.remove("active");const t=SelectorEngine.find("[href].active",e);for(const e of t)e.classList.remove("active")}static jQueryInterface(e){return this.each((function(){const t=ScrollSpy.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}EventHandler.on(window,EVENT_LOAD_DATA_API$1,(()=>{for(const e of SelectorEngine.find(SELECTOR_DATA_SPY))ScrollSpy.getOrCreateInstance(e)})),defineJQueryPlugin(ScrollSpy);const NAME$1="tab",DATA_KEY$1="bs.tab",EVENT_KEY$1=".bs.tab",EVENT_HIDE$1="hide.bs.tab",EVENT_HIDDEN$1="hidden.bs.tab",EVENT_SHOW$1="show.bs.tab",EVENT_SHOWN$1="shown.bs.tab",EVENT_CLICK_DATA_API="click.bs.tab",EVENT_KEYDOWN="keydown.bs.tab",EVENT_LOAD_DATA_API="load.bs.tab",ARROW_LEFT_KEY="ArrowLeft",ARROW_RIGHT_KEY="ArrowRight",ARROW_UP_KEY="ArrowUp",ARROW_DOWN_KEY="ArrowDown",CLASS_NAME_ACTIVE="active",CLASS_NAME_FADE$1="fade",CLASS_NAME_SHOW$1="show",CLASS_DROPDOWN="dropdown",SELECTOR_DROPDOWN_TOGGLE=".dropdown-toggle",SELECTOR_DROPDOWN_MENU=".dropdown-menu",NOT_SELECTOR_DROPDOWN_TOGGLE=":not(.dropdown-toggle)",SELECTOR_TAB_PANEL='.list-group, .nav, [role="tablist"]',SELECTOR_OUTER=".nav-item, .list-group-item",SELECTOR_INNER='.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle)',SELECTOR_DATA_TOGGLE='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',SELECTOR_INNER_ELEM=`${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`,SELECTOR_DATA_TOGGLE_ACTIVE='.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]';class Tab extends BaseComponent{constructor(e){super(e),this._parent=this._element.closest(SELECTOR_TAB_PANEL),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),EventHandler.on(this._element,EVENT_KEYDOWN,(e=>this._keydown(e))))}static get NAME(){return"tab"}show(){const e=this._element;if(this._elemIsActive(e))return;const t=this._getActiveElem(),n=t?EventHandler.trigger(t,EVENT_HIDE$1,{relatedTarget:e}):null;EventHandler.trigger(e,EVENT_SHOW$1,{relatedTarget:t}).defaultPrevented||n&&n.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){e&&(e.classList.add("active"),this._activate(getElementFromSelector(e)),this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),EventHandler.trigger(e,EVENT_SHOWN$1,{relatedTarget:t})):e.classList.add("show")}),e,e.classList.contains("fade")))}_deactivate(e,t){e&&(e.classList.remove("active"),e.blur(),this._deactivate(getElementFromSelector(e)),this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),EventHandler.trigger(e,EVENT_HIDDEN$1,{relatedTarget:t})):e.classList.remove("show")}),e,e.classList.contains("fade")))}_keydown(e){if(![ARROW_LEFT_KEY,ARROW_RIGHT_KEY,ARROW_UP_KEY,ARROW_DOWN_KEY].includes(e.key))return;e.stopPropagation(),e.preventDefault();const t=[ARROW_RIGHT_KEY,ARROW_DOWN_KEY].includes(e.key),n=getNextActiveElement(this._getChildren().filter((e=>!isDisabled(e))),e.target,t,!0);n&&(n.focus({preventScroll:!0}),Tab.getOrCreateInstance(n).show())}_getChildren(){return SelectorEngine.find(SELECTOR_INNER_ELEM,this._parent)}_getActiveElem(){return this._getChildren().find((e=>this._elemIsActive(e)))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,"role","tablist");for(const e of t)this._setInitialAttributesOnChild(e)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);const t=this._elemIsActive(e),n=this._getOuterElement(e);e.setAttribute("aria-selected",t),n!==e&&this._setAttributeIfNotExists(n,"role","presentation"),t||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){const t=getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(t,"aria-labelledby",`#${e.id}`))}_toggleDropDown(e,t){const n=this._getOuterElement(e);if(!n.classList.contains("dropdown"))return;const i=(e,i)=>{const s=SelectorEngine.findOne(e,n);s&&s.classList.toggle(i,t)};i(".dropdown-toggle","active"),i(".dropdown-menu","show"),n.setAttribute("aria-expanded",t)}_setAttributeIfNotExists(e,t,n){e.hasAttribute(t)||e.setAttribute(t,n)}_elemIsActive(e){return e.classList.contains("active")}_getInnerElement(e){return e.matches(SELECTOR_INNER_ELEM)?e:SelectorEngine.findOne(SELECTOR_INNER_ELEM,e)}_getOuterElement(e){return e.closest(SELECTOR_OUTER)||e}static jQueryInterface(e){return this.each((function(){const t=Tab.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}EventHandler.on(document,"click.bs.tab",SELECTOR_DATA_TOGGLE,(function(e){["A","AREA"].includes(this.tagName)&&e.preventDefault(),isDisabled(this)||Tab.getOrCreateInstance(this).show()})),EventHandler.on(window,"load.bs.tab",(()=>{for(const e of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE))Tab.getOrCreateInstance(e)})),defineJQueryPlugin(Tab);const NAME="toast",DATA_KEY="bs.toast",EVENT_KEY=".bs.toast",EVENT_MOUSEOVER="mouseover.bs.toast",EVENT_MOUSEOUT="mouseout.bs.toast",EVENT_FOCUSIN="focusin.bs.toast",EVENT_FOCUSOUT="focusout.bs.toast",EVENT_HIDE="hide.bs.toast",EVENT_HIDDEN="hidden.bs.toast",EVENT_SHOW="show.bs.toast",EVENT_SHOWN="shown.bs.toast",CLASS_NAME_FADE="fade",CLASS_NAME_HIDE="hide",CLASS_NAME_SHOW="show",CLASS_NAME_SHOWING="showing",DefaultType={animation:"boolean",autohide:"boolean",delay:"number"},Default={animation:!0,autohide:!0,delay:5e3};class Toast extends BaseComponent{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Default}static get DefaultType(){return DefaultType}static get NAME(){return NAME}show(){EventHandler.trigger(this._element,EVENT_SHOW).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove("hide"),reflow(this._element),this._element.classList.add("show","showing"),this._queueCallback((()=>{this._element.classList.remove("showing"),EventHandler.trigger(this._element,EVENT_SHOWN),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(EventHandler.trigger(this._element,EVENT_HIDE).defaultPrevented||(this._element.classList.add("showing"),this._queueCallback((()=>{this._element.classList.add("hide"),this._element.classList.remove("showing","show"),EventHandler.trigger(this._element,EVENT_HIDDEN)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove("show"),super.dispose()}isShown(){return this._element.classList.contains("show")}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":this._hasMouseInteraction=t;break;case"focusin":case"focusout":this._hasKeyboardInteraction=t}if(t)return void this._clearTimeout();const n=e.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){EventHandler.on(this._element,EVENT_MOUSEOVER,(e=>this._onInteraction(e,!0))),EventHandler.on(this._element,EVENT_MOUSEOUT,(e=>this._onInteraction(e,!1))),EventHandler.on(this._element,EVENT_FOCUSIN,(e=>this._onInteraction(e,!0))),EventHandler.on(this._element,EVENT_FOCUSOUT,(e=>this._onInteraction(e,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each((function(){const t=Toast.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}enableDismissTrigger(Toast),defineJQueryPlugin(Toast);export{Alert,Button,Carousel,Collapse,Dropdown,Modal,Offcanvas,Popover,ScrollSpy,Tab,Toast,Tooltip};
+import*as Popper from"@popperjs/core";const MAX_UID=1e6,MILLISECONDS_MULTIPLIER=1e3,TRANSITION_END="transitionend",parseSelector=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),toType=e=>null==e?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),getUID=e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e},getTransitionDurationFromElement=e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const i=Number.parseFloat(t),s=Number.parseFloat(n);return i||s?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0},triggerTransitionEnd=e=>{e.dispatchEvent(new Event(TRANSITION_END))},isElement=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),getElement=e=>isElement(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(parseSelector(e)):null,isVisible=e=>{if(!isElement(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},isDisabled=e=>!e||e.nodeType!==Node.ELEMENT_NODE||!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled")),findShadowRoot=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?findShadowRoot(e.parentNode):null},noop=()=>{},reflow=e=>{e.offsetHeight},getjQuery=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,DOMContentLoadedCallbacks=[],onDOMContentLoaded=e=>{"loading"===document.readyState?(DOMContentLoadedCallbacks.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of DOMContentLoadedCallbacks)e()})),DOMContentLoadedCallbacks.push(e)):e()},isRTL=()=>"rtl"===document.documentElement.dir,defineJQueryPlugin=e=>{var t;t=()=>{const t=getjQuery();if(t){const n=e.NAME,i=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=i,e.jQueryInterface)}},"loading"===document.readyState?(DOMContentLoadedCallbacks.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of DOMContentLoadedCallbacks)e()})),DOMContentLoadedCallbacks.push(t)):t()},execute=(e,t=[],n=e)=>"function"==typeof e?e(...t):n,executeAfterTransition=(e,t,n=!0)=>{if(!n)return void execute(e);const i=getTransitionDurationFromElement(t)+5;let s=!1;const o=({target:n})=>{n===t&&(s=!0,t.removeEventListener(TRANSITION_END,o),execute(e))};t.addEventListener(TRANSITION_END,o),setTimeout((()=>{s||triggerTransitionEnd(t)}),i)},getNextActiveElement=(e,t,n,i)=>{const s=e.length;let o=e.indexOf(t);return-1===o?!n&&i?e[s-1]:e[0]:(o+=n?1:-1,i&&(o=(o+s)%s),e[Math.max(0,Math.min(o,s-1))])},namespaceRegex=/[^.]*(?=\..*)\.|.*/,stripNameRegex=/\..*/,stripUidRegex=/::\d+$/,eventRegistry={};let uidEvent=1;const customEvents={mouseenter:"mouseover",mouseleave:"mouseout"},nativeEvents=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function makeEventUid(e,t){return t&&`${t}::${uidEvent++}`||e.uidEvent||uidEvent++}function getElementEvents(e){const t=makeEventUid(e);return e.uidEvent=t,eventRegistry[t]=eventRegistry[t]||{},eventRegistry[t]}function bootstrapHandler(e,t){return function n(i){return hydrateObj(i,{delegateTarget:e}),n.oneOff&&EventHandler.off(e,i.type,t),t.apply(e,[i])}}function bootstrapDelegationHandler(e,t,n){return function i(s){const o=e.querySelectorAll(t);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return hydrateObj(s,{delegateTarget:r}),i.oneOff&&EventHandler.off(e,s.type,t,n),n.apply(r,[s])}}function findHandler(e,t,n=null){return Object.values(e).find((e=>e.callable===t&&e.delegationSelector===n))}function normalizeParameters(e,t,n){const i="string"==typeof t,s=i?n:t||n;let o=getTypeEvent(e);return nativeEvents.has(o)||(o=e),[i,s,o]}function addHandler(e,t,n,i,s){if("string"!=typeof t||!e)return;let[o,r,a]=normalizeParameters(t,n,i);if(t in customEvents){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};r=e(r)}const l=getElementEvents(e),c=l[a]||(l[a]={}),_=findHandler(c,r,o?n:null);if(_)return void(_.oneOff=_.oneOff&&s);const d=makeEventUid(r,t.replace(namespaceRegex,"")),h=o?bootstrapDelegationHandler(e,n,r):bootstrapHandler(e,r);h.delegationSelector=o?n:null,h.callable=r,h.oneOff=s,h.uidEvent=d,c[d]=h,e.addEventListener(a,h,o)}function removeHandler(e,t,n,i,s){const o=findHandler(t[n],i,s);o&&(e.removeEventListener(n,o,Boolean(s)),delete t[n][o.uidEvent])}function removeNamespacedHandlers(e,t,n,i){const s=t[n]||{};for(const[o,r]of Object.entries(s))o.includes(i)&&removeHandler(e,t,n,r.callable,r.delegationSelector)}function getTypeEvent(e){return e=e.replace(stripNameRegex,""),customEvents[e]||e}const EventHandler={on(e,t,n,i){addHandler(e,t,n,i,!1)},one(e,t,n,i){addHandler(e,t,n,i,!0)},off(e,t,n,i){if("string"!=typeof t||!e)return;const[s,o,r]=normalizeParameters(t,n,i),a=r!==t,l=getElementEvents(e),c=l[r]||{},_=t.startsWith(".");if(void 0===o){if(_)for(const n of Object.keys(l))removeNamespacedHandlers(e,l,n,t.slice(1));for(const[n,i]of Object.entries(c)){const s=n.replace(stripUidRegex,"");a&&!t.includes(s)||removeHandler(e,l,r,i.callable,i.delegationSelector)}}else{if(!Object.keys(c).length)return;removeHandler(e,l,r,o,s?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const i=getjQuery();let s=null,o=!0,r=!0,a=!1;t!==getTypeEvent(t)&&i&&(s=i.Event(t,n),i(e).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());let l=new Event(t,{bubbles:o,cancelable:!0});return l=hydrateObj(l,n),a&&l.preventDefault(),r&&e.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function hydrateObj(e,t={}){for(const[n,i]of Object.entries(t))try{e[n]=i}catch(t){Object.defineProperty(e,n,{configurable:!0,get:()=>i})}return e}const elementMap=new Map,Data={set(e,t,n){elementMap.has(e)||elementMap.set(e,new Map);const i=elementMap.get(e);i.has(t)||0===i.size?i.set(t,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(i.keys())[0]}.`)},get:(e,t)=>elementMap.has(e)&&elementMap.get(e).get(t)||null,remove(e,t){if(!elementMap.has(e))return;const n=elementMap.get(e);n.delete(t),0===n.size&&elementMap.delete(e)}};function normalizeData(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch(t){return e}}function normalizeDataKey(e){return e.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}const Manipulator={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${normalizeDataKey(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${normalizeDataKey(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter((e=>e.startsWith("bs")&&!e.startsWith("bsConfig")));for(const i of n){let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),t[n]=normalizeData(e.dataset[i])}return t},getDataAttribute:(e,t)=>normalizeData(e.getAttribute(`data-bs-${normalizeDataKey(t)}`))};class Config{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=isElement(t)?Manipulator.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...isElement(t)?Manipulator.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(const[i,s]of Object.entries(t)){const t=e[i],o=isElement(t)?"element":null==(n=t)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${o}" but expected type "${s}".`)}var n}}const VERSION="5.3.0-alpha1";class BaseComponent extends Config{constructor(e,t){super(),(e=getElement(e))&&(this._element=e,this._config=this._getConfig(t),Data.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Data.remove(this._element,this.constructor.DATA_KEY),EventHandler.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,n=!0){executeAfterTransition(e,t,n)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Data.get(getElement(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return VERSION}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const getSelector=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return parseSelector(t)},SelectorEngine={find:(e,t=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(t,e)),findOne:(e,t=document.documentElement)=>Element.prototype.querySelector.call(t,e),children:(e,t)=>[].concat(...e.children).filter((e=>e.matches(t))),parents(e,t){const n=[];let i=e.parentNode.closest(t);for(;i;)n.push(i),i=i.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((e=>`${e}:not([tabindex^="-"])`)).join(",");return this.find(t,e).filter((e=>!isDisabled(e)&&isVisible(e)))},getSelectorFromElement(e){const t=getSelector(e);return t&&SelectorEngine.findOne(t)?t:null},getElementFromSelector(e){const t=getSelector(e);return t?SelectorEngine.findOne(t):null},getMultipleElementsFromSelector(e){const t=getSelector(e);return t?SelectorEngine.find(t):[]}},enableDismissTrigger=(e,t="hide")=>{const n=`click.dismiss${e.EVENT_KEY}`,i=e.NAME;EventHandler.on(document,n,`[data-bs-dismiss="${i}"]`,(function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),isDisabled(this))return;const s=SelectorEngine.getElementFromSelector(this)||this.closest(`.${i}`);e.getOrCreateInstance(s)[t]()}))},NAME$f="alert",DATA_KEY$a="bs.alert",EVENT_KEY$b=".bs.alert",EVENT_CLOSE="close.bs.alert",EVENT_CLOSED="closed.bs.alert",CLASS_NAME_FADE$5="fade",CLASS_NAME_SHOW$8="show";class Alert extends BaseComponent{static get NAME(){return NAME$f}close(){if(EventHandler.trigger(this._element,EVENT_CLOSE).defaultPrevented)return;this._element.classList.remove("show");const e=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,e)}_destroyElement(){this._element.remove(),EventHandler.trigger(this._element,EVENT_CLOSED),this.dispose()}static jQueryInterface(e){return this.each((function(){const t=Alert.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}enableDismissTrigger(Alert,"close"),defineJQueryPlugin(Alert);const NAME$e="button",DATA_KEY$9="bs.button",EVENT_KEY$a=".bs.button",DATA_API_KEY$6=".data-api",CLASS_NAME_ACTIVE$3="active",SELECTOR_DATA_TOGGLE$5='[data-bs-toggle="button"]',EVENT_CLICK_DATA_API$6="click.bs.button.data-api";class Button extends BaseComponent{static get NAME(){return NAME$e}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(e){return this.each((function(){const t=Button.getOrCreateInstance(this);"toggle"===e&&t[e]()}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$6,SELECTOR_DATA_TOGGLE$5,(e=>{e.preventDefault();const t=e.target.closest(SELECTOR_DATA_TOGGLE$5);Button.getOrCreateInstance(t).toggle()})),defineJQueryPlugin(Button);const NAME$d="swipe",EVENT_KEY$9=".bs.swipe",EVENT_TOUCHSTART="touchstart.bs.swipe",EVENT_TOUCHMOVE="touchmove.bs.swipe",EVENT_TOUCHEND="touchend.bs.swipe",EVENT_POINTERDOWN="pointerdown.bs.swipe",EVENT_POINTERUP="pointerup.bs.swipe",POINTER_TYPE_TOUCH="touch",POINTER_TYPE_PEN="pen",CLASS_NAME_POINTER_EVENT="pointer-event",SWIPE_THRESHOLD=40,Default$c={endCallback:null,leftCallback:null,rightCallback:null},DefaultType$c={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Swipe extends Config{constructor(e,t){super(),this._element=e,e&&Swipe.isSupported()&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Default$c}static get DefaultType(){return DefaultType$c}static get NAME(){return NAME$d}dispose(){EventHandler.off(this._element,".bs.swipe")}_start(e){this._supportPointerEvents?this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX):this._deltaX=e.touches[0].clientX}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),execute(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){const e=Math.abs(this._deltaX);if(e<=40)return;const t=e/this._deltaX;this._deltaX=0,t&&execute(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(EventHandler.on(this._element,EVENT_POINTERDOWN,(e=>this._start(e))),EventHandler.on(this._element,EVENT_POINTERUP,(e=>this._end(e))),this._element.classList.add("pointer-event")):(EventHandler.on(this._element,EVENT_TOUCHSTART,(e=>this._start(e))),EventHandler.on(this._element,EVENT_TOUCHMOVE,(e=>this._move(e))),EventHandler.on(this._element,EVENT_TOUCHEND,(e=>this._end(e))))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&("pen"===e.pointerType||"touch"===e.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const NAME$c="carousel",DATA_KEY$8="bs.carousel",EVENT_KEY$8=".bs.carousel",DATA_API_KEY$5=".data-api",ARROW_LEFT_KEY$1="ArrowLeft",ARROW_RIGHT_KEY$1="ArrowRight",TOUCHEVENT_COMPAT_WAIT=500,ORDER_NEXT="next",ORDER_PREV="prev",DIRECTION_LEFT="left",DIRECTION_RIGHT="right",EVENT_SLIDE="slide.bs.carousel",EVENT_SLID="slid.bs.carousel",EVENT_KEYDOWN$1="keydown.bs.carousel",EVENT_MOUSEENTER$1="mouseenter.bs.carousel",EVENT_MOUSELEAVE$1="mouseleave.bs.carousel",EVENT_DRAG_START="dragstart.bs.carousel",EVENT_LOAD_DATA_API$3="load.bs.carousel.data-api",EVENT_CLICK_DATA_API$5="click.bs.carousel.data-api",CLASS_NAME_CAROUSEL="carousel",CLASS_NAME_ACTIVE$2="active",CLASS_NAME_SLIDE="slide",CLASS_NAME_END="carousel-item-end",CLASS_NAME_START="carousel-item-start",CLASS_NAME_NEXT="carousel-item-next",CLASS_NAME_PREV="carousel-item-prev",SELECTOR_ACTIVE=".active",SELECTOR_ITEM=".carousel-item",SELECTOR_ACTIVE_ITEM=".active.carousel-item",SELECTOR_ITEM_IMG=".carousel-item img",SELECTOR_INDICATORS=".carousel-indicators",SELECTOR_DATA_SLIDE="[data-bs-slide], [data-bs-slide-to]",SELECTOR_DATA_RIDE='[data-bs-ride="carousel"]',KEY_TO_DIRECTION={ArrowLeft:"right",ArrowRight:"left"},Default$b={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},DefaultType$b={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class Carousel extends BaseComponent{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=SelectorEngine.findOne(SELECTOR_INDICATORS,this._element),this._addEventListeners(),"carousel"===this._config.ride&&this.cycle()}static get Default(){return Default$b}static get DefaultType(){return DefaultType$b}static get NAME(){return NAME$c}next(){this._slide("next")}nextWhenVisible(){!document.hidden&&isVisible(this._element)&&this.next()}prev(){this._slide("prev")}pause(){this._isSliding&&triggerTransitionEnd(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?EventHandler.one(this._element,EVENT_SLID,(()=>this.cycle())):this.cycle())}to(e){const t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding)return void EventHandler.one(this._element,EVENT_SLID,(()=>this.to(e)));const n=this._getItemIndex(this._getActive());if(n===e)return;const i=e>n?"next":"prev";this._slide(i,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&EventHandler.on(this._element,EVENT_KEYDOWN$1,(e=>this._keydown(e))),"hover"===this._config.pause&&(EventHandler.on(this._element,EVENT_MOUSEENTER$1,(()=>this.pause())),EventHandler.on(this._element,EVENT_MOUSELEAVE$1,(()=>this._maybeEnableCycle()))),this._config.touch&&Swipe.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const e of SelectorEngine.find(SELECTOR_ITEM_IMG,this._element))EventHandler.on(e,EVENT_DRAG_START,(e=>e.preventDefault()));const e={leftCallback:()=>this._slide(this._directionToOrder("left")),rightCallback:()=>this._slide(this._directionToOrder("right")),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new Swipe(this._element,e)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;const t=KEY_TO_DIRECTION[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;const t=SelectorEngine.findOne(".active",this._indicatorsElement);t.classList.remove("active"),t.removeAttribute("aria-current");const n=SelectorEngine.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);n&&(n.classList.add("active"),n.setAttribute("aria-current","true"))}_updateInterval(){const e=this._activeElement||this._getActive();if(!e)return;const t=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;const n=this._getActive(),i="next"===e,s=t||getNextActiveElement(this._getItems(),n,i,this._config.wrap);if(s===n)return;const o=this._getItemIndex(s),r=t=>EventHandler.trigger(this._element,t,{relatedTarget:s,direction:this._orderToDirection(e),from:this._getItemIndex(n),to:o});if(r(EVENT_SLIDE).defaultPrevented)return;if(!n||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=i?CLASS_NAME_START:CLASS_NAME_END,c=i?CLASS_NAME_NEXT:CLASS_NAME_PREV;s.classList.add(c),reflow(s),n.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add("active"),n.classList.remove("active",c,l),this._isSliding=!1,r(EVENT_SLID)}),n,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM,this._element)}_getItems(){return SelectorEngine.find(SELECTOR_ITEM,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return isRTL()?"left"===e?"prev":"next":"left"===e?"next":"prev"}_orderToDirection(e){return isRTL()?"prev"===e?"left":"right":"prev"===e?"right":"left"}static jQueryInterface(e){return this.each((function(){const t=Carousel.getOrCreateInstance(this,e);if("number"!=typeof e){if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}else t.to(e)}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$5,SELECTOR_DATA_SLIDE,(function(e){const t=SelectorEngine.getElementFromSelector(this);if(!t||!t.classList.contains("carousel"))return;e.preventDefault();const n=Carousel.getOrCreateInstance(t),i=this.getAttribute("data-bs-slide-to");return i?(n.to(i),void n._maybeEnableCycle()):"next"===Manipulator.getDataAttribute(this,"slide")?(n.next(),void n._maybeEnableCycle()):(n.prev(),void n._maybeEnableCycle())})),EventHandler.on(window,EVENT_LOAD_DATA_API$3,(()=>{const e=SelectorEngine.find(SELECTOR_DATA_RIDE);for(const t of e)Carousel.getOrCreateInstance(t)})),defineJQueryPlugin(Carousel);const NAME$b="collapse",DATA_KEY$7="bs.collapse",EVENT_KEY$7=".bs.collapse",DATA_API_KEY$4=".data-api",EVENT_SHOW$6="show.bs.collapse",EVENT_SHOWN$6="shown.bs.collapse",EVENT_HIDE$6="hide.bs.collapse",EVENT_HIDDEN$6="hidden.bs.collapse",EVENT_CLICK_DATA_API$4="click.bs.collapse.data-api",CLASS_NAME_SHOW$7="show",CLASS_NAME_COLLAPSE="collapse",CLASS_NAME_COLLAPSING="collapsing",CLASS_NAME_COLLAPSED="collapsed",CLASS_NAME_DEEPER_CHILDREN=":scope .collapse .collapse",CLASS_NAME_HORIZONTAL="collapse-horizontal",WIDTH="width",HEIGHT="height",SELECTOR_ACTIVES=".collapse.show, .collapse.collapsing",SELECTOR_DATA_TOGGLE$4='[data-bs-toggle="collapse"]',Default$a={parent:null,toggle:!0},DefaultType$a={parent:"(null|element)",toggle:"boolean"};class Collapse extends BaseComponent{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);for(const e of n){const t=SelectorEngine.getSelectorFromElement(e),n=SelectorEngine.find(t).filter((e=>e===this._element));null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Default$a}static get DefaultType(){return DefaultType$a}static get NAME(){return NAME$b}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(SELECTOR_ACTIVES).filter((e=>e!==this._element)).map((e=>Collapse.getOrCreateInstance(e,{toggle:!1})))),e.length&&e[0]._isTransitioning)return;if(EventHandler.trigger(this._element,EVENT_SHOW$6).defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove("collapse"),this._element.classList.add("collapsing"),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove("collapsing"),this._element.classList.add("collapse","show"),this._element.style[t]="",EventHandler.trigger(this._element,EVENT_SHOWN$6)}),this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(EventHandler.trigger(this._element,EVENT_HIDE$6).defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,reflow(this._element),this._element.classList.add("collapsing"),this._element.classList.remove("collapse","show");for(const e of this._triggerArray){const t=SelectorEngine.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0,this._element.style[e]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove("collapsing"),this._element.classList.add("collapse"),EventHandler.trigger(this._element,EVENT_HIDDEN$6)}),this._element,!0)}_isShown(e=this._element){return e.classList.contains("show")}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=getElement(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?WIDTH:HEIGHT}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);for(const t of e){const e=SelectorEngine.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN,this._config.parent);return SelectorEngine.find(e,this._config.parent).filter((e=>!t.includes(e)))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each((function(){const n=Collapse.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$4,SELECTOR_DATA_TOGGLE$4,(function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of SelectorEngine.getMultipleElementsFromSelector(this))Collapse.getOrCreateInstance(e,{toggle:!1}).toggle()})),defineJQueryPlugin(Collapse);const NAME$a="dropdown",DATA_KEY$6="bs.dropdown",EVENT_KEY$6=".bs.dropdown",DATA_API_KEY$3=".data-api",ESCAPE_KEY$2="Escape",TAB_KEY$1="Tab",ARROW_UP_KEY$1="ArrowUp",ARROW_DOWN_KEY$1="ArrowDown",RIGHT_MOUSE_BUTTON=2,EVENT_HIDE$5="hide.bs.dropdown",EVENT_HIDDEN$5="hidden.bs.dropdown",EVENT_SHOW$5="show.bs.dropdown",EVENT_SHOWN$5="shown.bs.dropdown",EVENT_CLICK_DATA_API$3="click.bs.dropdown.data-api",EVENT_KEYDOWN_DATA_API="keydown.bs.dropdown.data-api",EVENT_KEYUP_DATA_API="keyup.bs.dropdown.data-api",CLASS_NAME_SHOW$6="show",CLASS_NAME_DROPUP="dropup",CLASS_NAME_DROPEND="dropend",CLASS_NAME_DROPSTART="dropstart",CLASS_NAME_DROPUP_CENTER="dropup-center",CLASS_NAME_DROPDOWN_CENTER="dropdown-center",SELECTOR_DATA_TOGGLE$3='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',SELECTOR_DATA_TOGGLE_SHOWN=`${SELECTOR_DATA_TOGGLE$3}.show`,SELECTOR_MENU=".dropdown-menu",SELECTOR_NAVBAR=".navbar",SELECTOR_NAVBAR_NAV=".navbar-nav",SELECTOR_VISIBLE_ITEMS=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",PLACEMENT_TOP=isRTL()?"top-end":"top-start",PLACEMENT_TOPEND=isRTL()?"top-start":"top-end",PLACEMENT_BOTTOM=isRTL()?"bottom-end":"bottom-start",PLACEMENT_BOTTOMEND=isRTL()?"bottom-start":"bottom-end",PLACEMENT_RIGHT=isRTL()?"left-start":"right-start",PLACEMENT_LEFT=isRTL()?"right-start":"left-start",PLACEMENT_TOPCENTER="top",PLACEMENT_BOTTOMCENTER="bottom",Default$9={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},DefaultType$9={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Dropdown extends BaseComponent{constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=SelectorEngine.next(this._element,SELECTOR_MENU)[0]||SelectorEngine.prev(this._element,SELECTOR_MENU)[0]||SelectorEngine.findOne(SELECTOR_MENU,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Default$9}static get DefaultType(){return DefaultType$9}static get NAME(){return NAME$a}toggle(){return this._isShown()?this.hide():this.show()}show(){if(isDisabled(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!EventHandler.trigger(this._element,EVENT_SHOW$5,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))EventHandler.on(e,"mouseover",noop);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add("show"),this._element.classList.add("show"),EventHandler.trigger(this._element,EVENT_SHOWN$5,e)}}hide(){if(isDisabled(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!EventHandler.trigger(this._element,EVENT_HIDE$5,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))EventHandler.off(e,"mouseover",noop);this._popper&&this._popper.destroy(),this._menu.classList.remove("show"),this._element.classList.remove("show"),this._element.setAttribute("aria-expanded","false"),Manipulator.removeDataAttribute(this._menu,"popper"),EventHandler.trigger(this._element,EVENT_HIDDEN$5,e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!isElement(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===Popper)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=this._parent:isElement(this._config.reference)?e=getElement(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=Popper.createPopper(e,this._menu,t)}_isShown(){return this._menu.classList.contains("show")}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return PLACEMENT_RIGHT;if(e.classList.contains("dropstart"))return PLACEMENT_LEFT;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?PLACEMENT_TOPEND:PLACEMENT_TOP:t?PLACEMENT_BOTTOMEND:PLACEMENT_BOTTOM}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(Manipulator.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...execute(this._config.popperConfig,[e])}}_selectMenuItem({key:e,target:t}){const n=SelectorEngine.find(SELECTOR_VISIBLE_ITEMS,this._menu).filter((e=>isVisible(e)));n.length&&getNextActiveElement(n,t,e===ARROW_DOWN_KEY$1,!n.includes(t)).focus()}static jQueryInterface(e){return this.each((function(){const t=Dropdown.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);for(const n of t){const t=Dropdown.getInstance(n);if(!t||!1===t._config.autoClose)continue;const i=e.composedPath(),s=i.includes(t._menu);if(i.includes(t._element)||"inside"===t._config.autoClose&&!s||"outside"===t._config.autoClose&&s)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const o={relatedTarget:t._element};"click"===e.type&&(o.clickEvent=e),t._completeHide(o)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,i=[ARROW_UP_KEY$1,ARROW_DOWN_KEY$1].includes(e.key);if(!i&&!n)return;if(t&&!n)return;e.preventDefault();const s=this.matches(SELECTOR_DATA_TOGGLE$3)?this:SelectorEngine.prev(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.next(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3,e.delegateTarget.parentNode),o=Dropdown.getOrCreateInstance(s);if(i)return e.stopPropagation(),o.show(),void o._selectMenuItem(e);o._isShown()&&(e.stopPropagation(),o.hide(),s.focus())}}EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_DATA_TOGGLE$3,Dropdown.dataApiKeydownHandler),EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_MENU,Dropdown.dataApiKeydownHandler),EventHandler.on(document,EVENT_CLICK_DATA_API$3,Dropdown.clearMenus),EventHandler.on(document,EVENT_KEYUP_DATA_API,Dropdown.clearMenus),EventHandler.on(document,EVENT_CLICK_DATA_API$3,SELECTOR_DATA_TOGGLE$3,(function(e){e.preventDefault(),Dropdown.getOrCreateInstance(this).toggle()})),defineJQueryPlugin(Dropdown);const SELECTOR_FIXED_CONTENT=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",SELECTOR_STICKY_CONTENT=".sticky-top",PROPERTY_PADDING="padding-right",PROPERTY_MARGIN="margin-right";class ScrollBarHelper{constructor(){this._element=document.body}getWidth(){const e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){const e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,"padding-right",(t=>t+e)),this._setElementAttributes(SELECTOR_FIXED_CONTENT,"padding-right",(t=>t+e)),this._setElementAttributes(".sticky-top","margin-right",(t=>t-e))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"padding-right"),this._resetElementAttributes(SELECTOR_FIXED_CONTENT,"padding-right"),this._resetElementAttributes(".sticky-top","margin-right")}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,t,n){const i=this.getWidth();this._applyManipulationCallback(e,(e=>{if(e!==this._element&&window.innerWidth>e.clientWidth+i)return;this._saveInitialAttribute(e,t);const s=window.getComputedStyle(e).getPropertyValue(t);e.style.setProperty(t,`${n(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(e,t){const n=e.style.getPropertyValue(t);n&&Manipulator.setDataAttribute(e,t,n)}_resetElementAttributes(e,t){this._applyManipulationCallback(e,(e=>{const n=Manipulator.getDataAttribute(e,t);null!==n?(Manipulator.removeDataAttribute(e,t),e.style.setProperty(t,n)):e.style.removeProperty(t)}))}_applyManipulationCallback(e,t){if(isElement(e))t(e);else for(const n of SelectorEngine.find(e,this._element))t(n)}}const NAME$9="backdrop",CLASS_NAME_FADE$4="fade",CLASS_NAME_SHOW$5="show",EVENT_MOUSEDOWN="mousedown.bs.backdrop",Default$8={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},DefaultType$8={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Backdrop extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return Default$8}static get DefaultType(){return DefaultType$8}static get NAME(){return NAME$9}show(e){if(!this._config.isVisible)return void execute(e);this._append();const t=this._getElement();this._config.isAnimated&&reflow(t),t.classList.add("show"),this._emulateAnimation((()=>{execute(e)}))}hide(e){this._config.isVisible?(this._getElement().classList.remove("show"),this._emulateAnimation((()=>{this.dispose(),execute(e)}))):execute(e)}dispose(){this._isAppended&&(EventHandler.off(this._element,EVENT_MOUSEDOWN),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add("fade"),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=getElement(e.rootElement),e}_append(){if(this._isAppended)return;const e=this._getElement();this._config.rootElement.append(e),EventHandler.on(e,EVENT_MOUSEDOWN,(()=>{execute(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(e){executeAfterTransition(e,this._getElement(),this._config.isAnimated)}}const NAME$8="focustrap",DATA_KEY$5="bs.focustrap",EVENT_KEY$5=".bs.focustrap",EVENT_FOCUSIN$2="focusin.bs.focustrap",EVENT_KEYDOWN_TAB="keydown.tab.bs.focustrap",TAB_KEY="Tab",TAB_NAV_FORWARD="forward",TAB_NAV_BACKWARD="backward",Default$7={autofocus:!0,trapElement:null},DefaultType$7={autofocus:"boolean",trapElement:"element"};class FocusTrap extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Default$7}static get DefaultType(){return DefaultType$7}static get NAME(){return NAME$8}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),EventHandler.off(document,EVENT_KEY$5),EventHandler.on(document,EVENT_FOCUSIN$2,(e=>this._handleFocusin(e))),EventHandler.on(document,EVENT_KEYDOWN_TAB,(e=>this._handleKeydown(e))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,EventHandler.off(document,EVENT_KEY$5))}_handleFocusin(e){const{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;const n=SelectorEngine.focusableChildren(t);0===n.length?t.focus():"backward"===this._lastTabNavDirection?n[n.length-1].focus():n[0].focus()}_handleKeydown(e){"Tab"===e.key&&(this._lastTabNavDirection=e.shiftKey?"backward":"forward")}}const NAME$7="modal",DATA_KEY$4="bs.modal",EVENT_KEY$4=".bs.modal",DATA_API_KEY$2=".data-api",ESCAPE_KEY$1="Escape",EVENT_HIDE$4="hide.bs.modal",EVENT_HIDE_PREVENTED$1="hidePrevented.bs.modal",EVENT_HIDDEN$4="hidden.bs.modal",EVENT_SHOW$4="show.bs.modal",EVENT_SHOWN$4="shown.bs.modal",EVENT_RESIZE$1="resize.bs.modal",EVENT_CLICK_DISMISS="click.dismiss.bs.modal",EVENT_MOUSEDOWN_DISMISS="mousedown.dismiss.bs.modal",EVENT_KEYDOWN_DISMISS$1="keydown.dismiss.bs.modal",EVENT_CLICK_DATA_API$2="click.bs.modal.data-api",CLASS_NAME_OPEN="modal-open",CLASS_NAME_FADE$3="fade",CLASS_NAME_SHOW$4="show",CLASS_NAME_STATIC="modal-static",OPEN_SELECTOR$1=".modal.show",SELECTOR_DIALOG=".modal-dialog",SELECTOR_MODAL_BODY=".modal-body",SELECTOR_DATA_TOGGLE$2='[data-bs-toggle="modal"]',Default$6={backdrop:!0,focus:!0,keyboard:!0},DefaultType$6={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Modal extends BaseComponent{constructor(e,t){super(e,t),this._dialog=SelectorEngine.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new ScrollBarHelper,this._addEventListeners()}static get Default(){return Default$6}static get DefaultType(){return DefaultType$6}static get NAME(){return NAME$7}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||EventHandler.trigger(this._element,EVENT_SHOW$4,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add("modal-open"),this._adjustDialog(),this._backdrop.show((()=>this._showElement(e))))}hide(){this._isShown&&!this._isTransitioning&&(EventHandler.trigger(this._element,EVENT_HIDE$4).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove("show"),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const e of[window,this._dialog])EventHandler.off(e,".bs.modal");this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Backdrop({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const t=SelectorEngine.findOne(".modal-body",this._dialog);t&&(t.scrollTop=0),reflow(this._element),this._element.classList.add("show"),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,EventHandler.trigger(this._element,EVENT_SHOWN$4,{relatedTarget:e})}),this._dialog,this._isAnimated())}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS$1,(e=>{if("Escape"===e.key)return this._config.keyboard?(e.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),EventHandler.on(window,EVENT_RESIZE$1,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),EventHandler.on(this._element,EVENT_MOUSEDOWN_DISMISS,(e=>{EventHandler.one(this._element,EVENT_CLICK_DISMISS,(t=>{this._element===e.target&&this._element===t.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove("modal-open"),this._resetAdjustments(),this._scrollBar.reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$4)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED$1).defaultPrevented)return;const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._element.style.overflowY;"hidden"===t||this._element.classList.contains("modal-static")||(e||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static"),this._queueCallback((()=>{this._element.classList.remove("modal-static"),this._queueCallback((()=>{this._element.style.overflowY=t}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),n=t>0;if(n&&!e){const e=isRTL()?"paddingLeft":"paddingRight";this._element.style[e]=`${t}px`}if(!n&&e){const e=isRTL()?"paddingRight":"paddingLeft";this._element.style[e]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,t){return this.each((function(){const n=Modal.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e](t)}}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$2,SELECTOR_DATA_TOGGLE$2,(function(e){const t=SelectorEngine.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),EventHandler.one(t,EVENT_SHOW$4,(e=>{e.defaultPrevented||EventHandler.one(t,EVENT_HIDDEN$4,(()=>{isVisible(this)&&this.focus()}))}));const n=SelectorEngine.findOne(".modal.show");n&&Modal.getInstance(n).hide(),Modal.getOrCreateInstance(t).toggle(this)})),enableDismissTrigger(Modal),defineJQueryPlugin(Modal);const NAME$6="offcanvas",DATA_KEY$3="bs.offcanvas",EVENT_KEY$3=".bs.offcanvas",DATA_API_KEY$1=".data-api",EVENT_LOAD_DATA_API$2="load.bs.offcanvas.data-api",ESCAPE_KEY="Escape",CLASS_NAME_SHOW$3="show",CLASS_NAME_SHOWING$1="showing",CLASS_NAME_HIDING="hiding",CLASS_NAME_BACKDROP="offcanvas-backdrop",OPEN_SELECTOR=".offcanvas.show",EVENT_SHOW$3="show.bs.offcanvas",EVENT_SHOWN$3="shown.bs.offcanvas",EVENT_HIDE$3="hide.bs.offcanvas",EVENT_HIDE_PREVENTED="hidePrevented.bs.offcanvas",EVENT_HIDDEN$3="hidden.bs.offcanvas",EVENT_RESIZE="resize.bs.offcanvas",EVENT_CLICK_DATA_API$1="click.bs.offcanvas.data-api",EVENT_KEYDOWN_DISMISS="keydown.dismiss.bs.offcanvas",SELECTOR_DATA_TOGGLE$1='[data-bs-toggle="offcanvas"]',Default$5={backdrop:!0,keyboard:!0,scroll:!1},DefaultType$5={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Offcanvas extends BaseComponent{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Default$5}static get DefaultType(){return DefaultType$5}static get NAME(){return NAME$6}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||EventHandler.trigger(this._element,EVENT_SHOW$3,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new ScrollBarHelper).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add("showing"),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add("show"),this._element.classList.remove("showing"),EventHandler.trigger(this._element,EVENT_SHOWN$3,{relatedTarget:e})}),this._element,!0))}hide(){this._isShown&&(EventHandler.trigger(this._element,EVENT_HIDE$3).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add("hiding"),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove("show","hiding"),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new ScrollBarHelper).reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$3)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const e=Boolean(this._config.backdrop);return new Backdrop({className:CLASS_NAME_BACKDROP,isVisible:e,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:e?()=>{"static"!==this._config.backdrop?this.hide():EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED)}:null})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS,(e=>{"Escape"===e.key&&(this._config.keyboard?this.hide():EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED))}))}static jQueryInterface(e){return this.each((function(){const t=Offcanvas.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}EventHandler.on(document,EVENT_CLICK_DATA_API$1,SELECTOR_DATA_TOGGLE$1,(function(e){const t=SelectorEngine.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),isDisabled(this))return;EventHandler.one(t,EVENT_HIDDEN$3,(()=>{isVisible(this)&&this.focus()}));const n=SelectorEngine.findOne(OPEN_SELECTOR);n&&n!==t&&Offcanvas.getInstance(n).hide(),Offcanvas.getOrCreateInstance(t).toggle(this)})),EventHandler.on(window,EVENT_LOAD_DATA_API$2,(()=>{for(const e of SelectorEngine.find(OPEN_SELECTOR))Offcanvas.getOrCreateInstance(e).show()})),EventHandler.on(window,EVENT_RESIZE,(()=>{for(const e of SelectorEngine.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(e).position&&Offcanvas.getOrCreateInstance(e).hide()})),enableDismissTrigger(Offcanvas),defineJQueryPlugin(Offcanvas);const uriAttributes=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),ARIA_ATTRIBUTE_PATTERN=/^aria-[\w-]*$/i,SAFE_URL_PATTERN=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,DATA_URL_PATTERN=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,allowedAttribute=(e,t)=>{const n=e.nodeName.toLowerCase();return t.includes(n)?!uriAttributes.has(n)||Boolean(SAFE_URL_PATTERN.test(e.nodeValue)||DATA_URL_PATTERN.test(e.nodeValue)):t.filter((e=>e instanceof RegExp)).some((e=>e.test(n)))},DefaultAllowlist={"*":["class","dir","id","lang","role",ARIA_ATTRIBUTE_PATTERN],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]};function sanitizeHtml(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const i=(new window.DOMParser).parseFromString(e,"text/html"),s=[].concat(...i.body.querySelectorAll("*"));for(const e of s){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const i=[].concat(...e.attributes),s=[].concat(t["*"]||[],t[n]||[]);for(const t of i)allowedAttribute(t,s)||e.removeAttribute(t.nodeName)}return i.body.innerHTML}const NAME$5="TemplateFactory",Default$4={allowList:DefaultAllowlist,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},DefaultType$4={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},DefaultContentType={entry:"(string|element|function|null)",selector:"(string|element)"};class TemplateFactory extends Config{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Default$4}static get DefaultType(){return DefaultType$4}static get NAME(){return NAME$5}getContent(){return Object.values(this._config.content).map((e=>this._resolvePossibleFunction(e))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},DefaultContentType)}_setContent(e,t,n){const i=SelectorEngine.findOne(n,e);i&&((t=this._resolvePossibleFunction(t))?isElement(t)?this._putElementInTemplate(getElement(t),i):this._config.html?i.innerHTML=this._maybeSanitize(t):i.textContent=t:i.remove())}_maybeSanitize(e){return this._config.sanitize?sanitizeHtml(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return execute(e,[this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const NAME$4="tooltip",DISALLOWED_ATTRIBUTES=new Set(["sanitize","allowList","sanitizeFn"]),CLASS_NAME_FADE$2="fade",CLASS_NAME_MODAL="modal",CLASS_NAME_SHOW$2="show",SELECTOR_TOOLTIP_INNER=".tooltip-inner",SELECTOR_MODAL=".modal",EVENT_MODAL_HIDE="hide.bs.modal",TRIGGER_HOVER="hover",TRIGGER_FOCUS="focus",TRIGGER_CLICK="click",TRIGGER_MANUAL="manual",EVENT_HIDE$2="hide",EVENT_HIDDEN$2="hidden",EVENT_SHOW$2="show",EVENT_SHOWN$2="shown",EVENT_INSERTED="inserted",EVENT_CLICK$1="click",EVENT_FOCUSIN$1="focusin",EVENT_FOCUSOUT$1="focusout",EVENT_MOUSEENTER="mouseenter",EVENT_MOUSELEAVE="mouseleave",AttachmentMap={AUTO:"auto",TOP:"top",RIGHT:isRTL()?"left":"right",BOTTOM:"bottom",LEFT:isRTL()?"right":"left"},Default$3={allowList:DefaultAllowlist,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},DefaultType$3={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Tooltip extends BaseComponent{constructor(e,t){if(void 0===Popper)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Default$3}static get DefaultType(){return DefaultType$3}static get NAME(){return NAME$4}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),EventHandler.off(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=EventHandler.trigger(this._element,this.constructor.eventName("show")),t=(findShadowRoot(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(n),EventHandler.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add("show"),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))EventHandler.on(e,"mouseover",noop);this._queueCallback((()=>{EventHandler.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!EventHandler.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove("show"),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))EventHandler.off(e,"mouseover",noop);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),EventHandler.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove("fade","show"),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=getUID(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add("fade"),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new TemplateFactory({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains("fade")}_isShown(){return this.tip&&this.tip.classList.contains("show")}_createPopper(e){const t=execute(this._config.placement,[this,e,this._element]),n=AttachmentMap[t.toUpperCase()];return Popper.createPopper(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return execute(e,[this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...execute(this._config.popperConfig,[t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)EventHandler.on(this._element,this.constructor.eventName("click"),this._config.selector,(e=>{this._initializeOnDelegatedTarget(e).toggle()}));else if("manual"!==t){const e="hover"===t?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n="hover"===t?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");EventHandler.on(this._element,e,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?"focus":"hover"]=!0,t._enter()})),EventHandler.on(this._element,n,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?"focus":"hover"]=t._element.contains(e.relatedTarget),t._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},EventHandler.on(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=Manipulator.getDataAttributes(this._element);for(const e of Object.keys(t))DISALLOWED_ATTRIBUTES.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:getElement(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each((function(){const t=Tooltip.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}defineJQueryPlugin(Tooltip);const NAME$3="popover",SELECTOR_TITLE=".popover-header",SELECTOR_CONTENT=".popover-body",Default$2={...Tooltip.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},DefaultType$2={...Tooltip.DefaultType,content:"(null|string|element|function)"};class Popover extends Tooltip{static get Default(){return Default$2}static get DefaultType(){return DefaultType$2}static get NAME(){return NAME$3}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[SELECTOR_TITLE]:this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each((function(){const t=Popover.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}defineJQueryPlugin(Popover);const NAME$2="scrollspy",DATA_KEY$2="bs.scrollspy",EVENT_KEY$2=".bs.scrollspy",DATA_API_KEY=".data-api",EVENT_ACTIVATE="activate.bs.scrollspy",EVENT_CLICK="click.bs.scrollspy",EVENT_LOAD_DATA_API$1="load.bs.scrollspy.data-api",CLASS_NAME_DROPDOWN_ITEM="dropdown-item",CLASS_NAME_ACTIVE$1="active",SELECTOR_DATA_SPY='[data-bs-spy="scroll"]',SELECTOR_TARGET_LINKS="[href]",SELECTOR_NAV_LIST_GROUP=".nav, .list-group",SELECTOR_NAV_LINKS=".nav-link",SELECTOR_NAV_ITEMS=".nav-item",SELECTOR_LIST_ITEMS=".list-group-item",SELECTOR_LINK_ITEMS=".nav-link, .nav-item > .nav-link, .list-group-item",SELECTOR_DROPDOWN=".dropdown",SELECTOR_DROPDOWN_TOGGLE$1=".dropdown-toggle",Default$1={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},DefaultType$1={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class ScrollSpy extends BaseComponent{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Default$1}static get DefaultType(){return DefaultType$1}static get NAME(){return NAME$2}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=getElement(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,"string"==typeof e.threshold&&(e.threshold=e.threshold.split(",").map((e=>Number.parseFloat(e)))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(EventHandler.off(this._config.target,EVENT_CLICK),EventHandler.on(this._config.target,EVENT_CLICK,"[href]",(e=>{const t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();const n=this._rootElement||window,i=t.offsetTop-this._element.offsetTop;if(n.scrollTo)return void n.scrollTo({top:i,behavior:"smooth"});n.scrollTop=i}})))}_getNewObserver(){const e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((e=>this._observerCallback(e)),e)}_observerCallback(e){const t=e=>this._targetLinks.get(`#${e.target.id}`),n=e=>{this._previousScrollData.visibleEntryTop=e.target.offsetTop,this._process(t(e))},i=(this._rootElement||document.documentElement).scrollTop,s=i>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=i;for(const o of e){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(o));continue}const e=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&e){if(n(o),!i)return}else s||e||n(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const e=SelectorEngine.find("[href]",this._config.target);for(const t of e){if(!t.hash||isDisabled(t))continue;const e=SelectorEngine.findOne(t.hash,this._element);isVisible(e)&&(this._targetLinks.set(t.hash,t),this._observableSections.set(t.hash,e))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add("active"),this._activateParents(e),EventHandler.trigger(this._element,EVENT_ACTIVATE,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains("dropdown-item"))SelectorEngine.findOne(".dropdown-toggle",e.closest(".dropdown")).classList.add("active");else for(const t of SelectorEngine.parents(e,".nav, .list-group"))for(const e of SelectorEngine.prev(t,SELECTOR_LINK_ITEMS))e.classList.add("active")}_clearActiveClass(e){e.classList.remove("active");const t=SelectorEngine.find("[href].active",e);for(const e of t)e.classList.remove("active")}static jQueryInterface(e){return this.each((function(){const t=ScrollSpy.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}EventHandler.on(window,EVENT_LOAD_DATA_API$1,(()=>{for(const e of SelectorEngine.find(SELECTOR_DATA_SPY))ScrollSpy.getOrCreateInstance(e)})),defineJQueryPlugin(ScrollSpy);const NAME$1="tab",DATA_KEY$1="bs.tab",EVENT_KEY$1=".bs.tab",EVENT_HIDE$1="hide.bs.tab",EVENT_HIDDEN$1="hidden.bs.tab",EVENT_SHOW$1="show.bs.tab",EVENT_SHOWN$1="shown.bs.tab",EVENT_CLICK_DATA_API="click.bs.tab",EVENT_KEYDOWN="keydown.bs.tab",EVENT_LOAD_DATA_API="load.bs.tab",ARROW_LEFT_KEY="ArrowLeft",ARROW_RIGHT_KEY="ArrowRight",ARROW_UP_KEY="ArrowUp",ARROW_DOWN_KEY="ArrowDown",CLASS_NAME_ACTIVE="active",CLASS_NAME_FADE$1="fade",CLASS_NAME_SHOW$1="show",CLASS_DROPDOWN="dropdown",SELECTOR_DROPDOWN_TOGGLE=".dropdown-toggle",SELECTOR_DROPDOWN_MENU=".dropdown-menu",NOT_SELECTOR_DROPDOWN_TOGGLE=":not(.dropdown-toggle)",SELECTOR_TAB_PANEL='.list-group, .nav, [role="tablist"]',SELECTOR_OUTER=".nav-item, .list-group-item",SELECTOR_INNER='.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle)',SELECTOR_DATA_TOGGLE='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',SELECTOR_INNER_ELEM=`${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`,SELECTOR_DATA_TOGGLE_ACTIVE='.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]';class Tab extends BaseComponent{constructor(e){super(e),this._parent=this._element.closest(SELECTOR_TAB_PANEL),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),EventHandler.on(this._element,EVENT_KEYDOWN,(e=>this._keydown(e))))}static get NAME(){return"tab"}show(){const e=this._element;if(this._elemIsActive(e))return;const t=this._getActiveElem(),n=t?EventHandler.trigger(t,EVENT_HIDE$1,{relatedTarget:e}):null;EventHandler.trigger(e,EVENT_SHOW$1,{relatedTarget:t}).defaultPrevented||n&&n.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){e&&(e.classList.add("active"),this._activate(SelectorEngine.getElementFromSelector(e)),this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),EventHandler.trigger(e,EVENT_SHOWN$1,{relatedTarget:t})):e.classList.add("show")}),e,e.classList.contains("fade")))}_deactivate(e,t){e&&(e.classList.remove("active"),e.blur(),this._deactivate(SelectorEngine.getElementFromSelector(e)),this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),EventHandler.trigger(e,EVENT_HIDDEN$1,{relatedTarget:t})):e.classList.remove("show")}),e,e.classList.contains("fade")))}_keydown(e){if(![ARROW_LEFT_KEY,ARROW_RIGHT_KEY,ARROW_UP_KEY,ARROW_DOWN_KEY].includes(e.key))return;e.stopPropagation(),e.preventDefault();const t=[ARROW_RIGHT_KEY,ARROW_DOWN_KEY].includes(e.key),n=getNextActiveElement(this._getChildren().filter((e=>!isDisabled(e))),e.target,t,!0);n&&(n.focus({preventScroll:!0}),Tab.getOrCreateInstance(n).show())}_getChildren(){return SelectorEngine.find(SELECTOR_INNER_ELEM,this._parent)}_getActiveElem(){return this._getChildren().find((e=>this._elemIsActive(e)))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,"role","tablist");for(const e of t)this._setInitialAttributesOnChild(e)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);const t=this._elemIsActive(e),n=this._getOuterElement(e);e.setAttribute("aria-selected",t),n!==e&&this._setAttributeIfNotExists(n,"role","presentation"),t||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){const t=SelectorEngine.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(t,"aria-labelledby",`#${e.id}`))}_toggleDropDown(e,t){const n=this._getOuterElement(e);if(!n.classList.contains("dropdown"))return;const i=(e,i)=>{const s=SelectorEngine.findOne(e,n);s&&s.classList.toggle(i,t)};i(".dropdown-toggle","active"),i(".dropdown-menu","show"),n.setAttribute("aria-expanded",t)}_setAttributeIfNotExists(e,t,n){e.hasAttribute(t)||e.setAttribute(t,n)}_elemIsActive(e){return e.classList.contains("active")}_getInnerElement(e){return e.matches(SELECTOR_INNER_ELEM)?e:SelectorEngine.findOne(SELECTOR_INNER_ELEM,e)}_getOuterElement(e){return e.closest(SELECTOR_OUTER)||e}static jQueryInterface(e){return this.each((function(){const t=Tab.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}EventHandler.on(document,"click.bs.tab",SELECTOR_DATA_TOGGLE,(function(e){["A","AREA"].includes(this.tagName)&&e.preventDefault(),isDisabled(this)||Tab.getOrCreateInstance(this).show()})),EventHandler.on(window,"load.bs.tab",(()=>{for(const e of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE))Tab.getOrCreateInstance(e)})),defineJQueryPlugin(Tab);const NAME="toast",DATA_KEY="bs.toast",EVENT_KEY=".bs.toast",EVENT_MOUSEOVER="mouseover.bs.toast",EVENT_MOUSEOUT="mouseout.bs.toast",EVENT_FOCUSIN="focusin.bs.toast",EVENT_FOCUSOUT="focusout.bs.toast",EVENT_HIDE="hide.bs.toast",EVENT_HIDDEN="hidden.bs.toast",EVENT_SHOW="show.bs.toast",EVENT_SHOWN="shown.bs.toast",CLASS_NAME_FADE="fade",CLASS_NAME_HIDE="hide",CLASS_NAME_SHOW="show",CLASS_NAME_SHOWING="showing",DefaultType={animation:"boolean",autohide:"boolean",delay:"number"},Default={animation:!0,autohide:!0,delay:5e3};class Toast extends BaseComponent{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Default}static get DefaultType(){return DefaultType}static get NAME(){return NAME}show(){EventHandler.trigger(this._element,EVENT_SHOW).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove("hide"),reflow(this._element),this._element.classList.add("show","showing"),this._queueCallback((()=>{this._element.classList.remove("showing"),EventHandler.trigger(this._element,EVENT_SHOWN),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(EventHandler.trigger(this._element,EVENT_HIDE).defaultPrevented||(this._element.classList.add("showing"),this._queueCallback((()=>{this._element.classList.add("hide"),this._element.classList.remove("showing","show"),EventHandler.trigger(this._element,EVENT_HIDDEN)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove("show"),super.dispose()}isShown(){return this._element.classList.contains("show")}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":this._hasMouseInteraction=t;break;case"focusin":case"focusout":this._hasKeyboardInteraction=t}if(t)return void this._clearTimeout();const n=e.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){EventHandler.on(this._element,EVENT_MOUSEOVER,(e=>this._onInteraction(e,!0))),EventHandler.on(this._element,EVENT_MOUSEOUT,(e=>this._onInteraction(e,!1))),EventHandler.on(this._element,EVENT_FOCUSIN,(e=>this._onInteraction(e,!0))),EventHandler.on(this._element,EVENT_FOCUSOUT,(e=>this._onInteraction(e,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each((function(){const t=Toast.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}enableDismissTrigger(Toast),defineJQueryPlugin(Toast);export{Alert,Button,Carousel,Collapse,Dropdown,Modal,Offcanvas,Popover,ScrollSpy,Tab,Toast,Tooltip};
//# sourceMappingURL=bootstrap.esm.min.js.map \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js.map
index 56562c909..7af173862 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js.map
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.esm.min.js.map
@@ -1 +1 @@
-{"version":3,"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","toType","object","Object","prototype","toString","call","match","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getSelector","element","selector","getAttribute","hrefAttribute","includes","startsWith","split","trim","getSelectorFromElement","querySelector","getElementFromSelector","getTransitionDurationFromElement","transitionDuration","transitionDelay","window","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","bootstrapHandler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","domElements","querySelectorAll","this","domElement","findHandler","events","callable","delegationSelector","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","replace","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","keys","on","one","inNamespace","isNamespace","elementEvent","slice","keyHandlers","trigger","args","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","entries","_unused","defineProperty","configurable","get","elementMap","Map","Data","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","VERSION","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","static","getInstance","enableDismissTrigger","component","method","clickEvent","tagName","getOrCreateInstance","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","close","_destroyElement","each","data","undefined","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","toggle","button","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","eventName","_orderToDirection","isCycling","directionalClassName","orderClassName","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","selectorElements","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","autoClose","boundary","display","offset","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","destroy","update","Popper","referenceElement","_getPopperConfig","createPopper","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","openToggles","context","composedPath","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","dataApiKeydownHandler","clearMenus","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","scroll","Offcanvas","blur","position","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSOUT","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","hash","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","id","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/selector-engine.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(object)\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getElementFromSelector,\n getjQuery,\n getNextActiveElement,\n getSelectorFromElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const handlerKey of Object.keys(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const keyHandlers of Object.keys(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta) {\n for (const [key, value] of Object.entries(meta || {})) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index'\nimport Manipulator from '../dom/manipulator'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const property of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport { executeAfterTransition, getElement } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Config from './util/config'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.2.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config'\nimport EventHandler from '../dom/event-handler'\nimport { execute } from './index'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport Swipe from './util/swipe'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getSelectorFromElement,\n reflow\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n for (const element of selectorElements) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow } from './index'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isVisible\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer'\nimport { getElement, isElement } from '../util/index'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg(this) : arg\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'\nimport { DefaultAllowlist } from './util/sanitizer'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport TemplateFactory from './util/template-factory'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this.tip) {\n this.tip.remove()\n }\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = this._createPopper(tip)\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n tip.remove()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n\n this._disposePopper()\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, getNextActiveElement, isDisabled } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n"],"mappings":"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"} \ No newline at end of file
+{"version":3,"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","toType","object","Object","prototype","toString","call","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getTransitionDurationFromElement","element","transitionDuration","transitionDelay","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","querySelector","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","bootstrapHandler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","domElements","querySelectorAll","this","domElement","findHandler","events","callable","delegationSelector","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","keys","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","_unused","defineProperty","configurable","get","elementMap","Map","Data","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","VERSION","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","static","getInstance","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","getOrCreateInstance","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","close","_destroyElement","each","data","undefined","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","eventName","_orderToDirection","isCycling","directionalClassName","orderClassName","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","autoClose","boundary","display","offset","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","destroy","update","Popper","referenceElement","_getPopperConfig","createPopper","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","openToggles","context","composedPath","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","dataApiKeydownHandler","clearMenus","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","scroll","Offcanvas","blur","position","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSOUT","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","hash","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index.js'\nimport Manipulator from '../dom/manipulator.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.0-alpha1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { isDisabled } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config.js'\nimport EventHandler from '../dom/event-handler.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Swipe from './util/swipe.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport BaseComponent from './base-component.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport BaseComponent from './base-component.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport Tooltip from './tooltip.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n"],"mappings":";;;;;sCAOA,MAAMA,QAAU,IACVC,wBAA0B,IAC1BC,eAAiB,gBAOjBC,cAAgBC,IAChBA,GAAYC,OAAOC,KAAOD,OAAOC,IAAIC,SAEvCH,EAAWA,EAASI,QAAQ,iBAAiB,CAACC,EAAOC,IAAQ,IAAGJ,IAAIC,OAAOG,QAGtEN,GAIHO,OAASC,GACTA,QACM,GAAEA,IAGLC,OAAOC,UAAUC,SAASC,KAAKJ,GAAQH,MAAM,eAAe,GAAGQ,cAOlEC,OAASC,IACb,GACEA,GAAUC,KAAKC,MAjCH,IAiCSD,KAAKE,gBACnBC,SAASC,eAAeL,IAEjC,OAAOA,CAAM,EAGTM,iCAAmCC,IACvC,IAAKA,EACH,OAAO,EAIT,IAAIC,mBAAEA,EAAkBC,gBAAEA,GAAoBvB,OAAOwB,iBAAiBH,GAEtE,MAAMI,EAA0BC,OAAOC,WAAWL,GAC5CM,EAAuBF,OAAOC,WAAWJ,GAG/C,OAAKE,GAA4BG,GAKjCN,EAAqBA,EAAmBO,MAAM,KAAK,GACnDN,EAAkBA,EAAgBM,MAAM,KAAK,GAxDf,KA0DtBH,OAAOC,WAAWL,GAAsBI,OAAOC,WAAWJ,KAPzD,CAOoG,EAGzGO,qBAAuBT,IAC3BA,EAAQU,cAAc,IAAIC,MAAMnC,gBAAgB,EAG5CoC,UAAY1B,MACXA,GAA4B,iBAAXA,UAIO,IAAlBA,EAAO2B,SAChB3B,EAASA,EAAO,SAGgB,IAApBA,EAAO4B,UAGjBC,WAAa7B,GAEb0B,UAAU1B,GACLA,EAAO2B,OAAS3B,EAAO,GAAKA,EAGf,iBAAXA,GAAuBA,EAAO8B,OAAS,EACzCnB,SAASoB,cAAcxC,cAAcS,IAGvC,KAGHgC,UAAYlB,IAChB,IAAKY,UAAUZ,IAAgD,IAApCA,EAAQmB,iBAAiBH,OAClD,OAAO,EAGT,MAAMI,EAAgF,YAA7DjB,iBAAiBH,GAASqB,iBAAiB,cAE9DC,EAAgBtB,EAAQuB,QAAQ,uBAEtC,IAAKD,EACH,OAAOF,EAGT,GAAIE,IAAkBtB,EAAS,CAC7B,MAAMwB,EAAUxB,EAAQuB,QAAQ,WAChC,GAAIC,GAAWA,EAAQC,aAAeH,EACpC,OAAO,EAGT,GAAgB,OAAZE,EACF,OAAO,CAEX,CAEA,OAAOJ,CAAgB,EAGnBM,WAAa1B,IACZA,GAAWA,EAAQc,WAAaa,KAAKC,gBAItC5B,EAAQ6B,UAAUC,SAAS,mBAIC,IAArB9B,EAAQ+B,SACV/B,EAAQ+B,SAGV/B,EAAQgC,aAAa,aAAoD,UAArChC,EAAQiC,aAAa,aAG5DC,eAAiBlC,IACrB,IAAKH,SAASsC,gBAAgBC,aAC5B,OAAO,KAIT,GAAmC,mBAAxBpC,EAAQqC,YAA4B,CAC7C,MAAMC,EAAOtC,EAAQqC,cACrB,OAAOC,aAAgBC,WAAaD,EAAO,IAC7C,CAEA,OAAItC,aAAmBuC,WACdvC,EAIJA,EAAQyB,WAINS,eAAelC,EAAQyB,YAHrB,IAGgC,EAGrCe,KAAO,OAUPC,OAASzC,IACbA,EAAQ0C,YAAY,EAGhBC,UAAY,IACZhE,OAAOiE,SAAW/C,SAASgD,KAAKb,aAAa,qBACxCrD,OAAOiE,OAGT,KAGHE,0BAA4B,GAE5BC,mBAAqBC,IACG,YAAxBnD,SAASoD,YAENH,0BAA0B9B,QAC7BnB,SAASqD,iBAAiB,oBAAoB,KAC5C,IAAK,MAAMF,KAAYF,0BACrBE,GACF,IAIJF,0BAA0BK,KAAKH,IAE/BA,GACF,EAGII,MAAQ,IAAuC,QAAjCvD,SAASsC,gBAAgBkB,IAEvCC,mBAAqBC,IAnBAP,QAoBN,KACjB,MAAMQ,EAAIb,YAEV,GAAIa,EAAG,CACL,MAAMC,EAAOF,EAAOG,KACdC,EAAqBH,EAAEI,GAAGH,GAChCD,EAAEI,GAAGH,GAAQF,EAAOM,gBACpBL,EAAEI,GAAGH,GAAMK,YAAcP,EACzBC,EAAEI,GAAGH,GAAMM,WAAa,KACtBP,EAAEI,GAAGH,GAAQE,EACNJ,EAAOM,gBAElB,GA/B0B,YAAxBhE,SAASoD,YAENH,0BAA0B9B,QAC7BnB,SAASqD,iBAAiB,oBAAoB,KAC5C,IAAK,MAAMF,KAAYF,0BACrBE,GACF,IAIJF,0BAA0BK,KAAKH,IAE/BA,GAoBA,EAGEgB,QAAU,CAACC,EAAkBC,EAAO,GAAIC,EAAeF,IACxB,mBAArBA,EAAkCA,KAAoBC,GAAQC,EAGxEC,uBAAyB,CAACpB,EAAUqB,EAAmBC,GAAoB,KAC/E,IAAKA,EAEH,YADAN,QAAQhB,GAIV,MACMuB,EAAmBxE,iCAAiCsE,GADlC,EAGxB,IAAIG,GAAS,EAEb,MAAMC,EAAU,EAAGC,aACbA,IAAWL,IAIfG,GAAS,EACTH,EAAkBM,oBAAoBnG,eAAgBiG,GACtDT,QAAQhB,GAAS,EAGnBqB,EAAkBnB,iBAAiB1E,eAAgBiG,GACnDG,YAAW,KACJJ,GACH/D,qBAAqB4D,EACvB,GACCE,EAAiB,EAYhBM,qBAAuB,CAACC,EAAMC,EAAeC,EAAeC,KAChE,MAAMC,EAAaJ,EAAK9D,OACxB,IAAImE,EAAQL,EAAKM,QAAQL,GAIzB,OAAe,IAAXI,GACMH,GAAiBC,EAAiBH,EAAKI,EAAa,GAAKJ,EAAK,IAGxEK,GAASH,EAAgB,GAAK,EAE1BC,IACFE,GAASA,EAAQD,GAAcA,GAG1BJ,EAAKpF,KAAK2F,IAAI,EAAG3F,KAAK4F,IAAIH,EAAOD,EAAa,KAAI,EC7QrDK,eAAiB,qBACjBC,eAAiB,OACjBC,cAAgB,SAChBC,cAAgB,GACtB,IAAIC,SAAW,EACf,MAAMC,aAAe,CACnBC,WAAY,YACZC,WAAY,YAGRC,aAAe,IAAIC,IAAI,CAC3B,QACA,WACA,UACA,YACA,cACA,aACA,iBACA,YACA,WACA,YACA,cACA,YACA,UACA,WACA,QACA,oBACA,aACA,YACA,WACA,cACA,cACA,cACA,YACA,eACA,gBACA,eACA,gBACA,aACA,QACA,OACA,SACA,QACA,SACA,SACA,UACA,WACA,OACA,SACA,eACA,SACA,OACA,mBACA,mBACA,QACA,QACA,WAOF,SAASC,aAAajG,EAASkG,GAC7B,OAAQA,GAAQ,GAAEA,MAAQP,cAAiB3F,EAAQ2F,UAAYA,UACjE,CAEA,SAASQ,iBAAiBnG,GACxB,MAAMkG,EAAMD,aAAajG,GAKzB,OAHAA,EAAQ2F,SAAWO,EACnBR,cAAcQ,GAAOR,cAAcQ,IAAQ,GAEpCR,cAAcQ,EACvB,CAEA,SAASE,iBAAiBpG,EAAS4D,GACjC,OAAO,SAASa,EAAQ4B,GAOtB,OANAC,WAAWD,EAAO,CAAEE,eAAgBvG,IAEhCyE,EAAQ+B,QACVC,aAAaC,IAAI1G,EAASqG,EAAMM,KAAM/C,GAGjCA,EAAGgD,MAAM5G,EAAS,CAACqG,G,CAE9B,CAEA,SAASQ,2BAA2B7G,EAAStB,EAAUkF,GACrD,OAAO,SAASa,EAAQ4B,GACtB,MAAMS,EAAc9G,EAAQ+G,iBAAiBrI,GAE7C,IAAK,IAAIgG,OAAEA,GAAW2B,EAAO3B,GAAUA,IAAWsC,KAAMtC,EAASA,EAAOjD,WACtE,IAAK,MAAMwF,KAAcH,EACvB,GAAIG,IAAevC,EAUnB,OANA4B,WAAWD,EAAO,CAAEE,eAAgB7B,IAEhCD,EAAQ+B,QACVC,aAAaC,IAAI1G,EAASqG,EAAMM,KAAMjI,EAAUkF,GAG3CA,EAAGgD,MAAMlC,EAAQ,CAAC2B,G,CAIjC,CAEA,SAASa,YAAYC,EAAQC,EAAUC,EAAqB,MAC1D,OAAOlI,OAAOmI,OAAOH,GAClBI,MAAKlB,GAASA,EAAMe,WAAaA,GAAYf,EAAMgB,qBAAuBA,GAC/E,CAEA,SAASG,oBAAoBC,EAAmBhD,EAASiD,GACvD,MAAMC,EAAiC,iBAAZlD,EAErB2C,EAAWO,EAAcD,EAAsBjD,GAAWiD,EAChE,IAAIE,EAAYC,aAAaJ,GAM7B,OAJK1B,aAAa+B,IAAIF,KACpBA,EAAYH,GAGP,CAACE,EAAaP,EAAUQ,EACjC,CAEA,SAASG,WAAW/H,EAASyH,EAAmBhD,EAASiD,EAAoBlB,GAC3E,GAAiC,iBAAtBiB,IAAmCzH,EAC5C,OAGF,IAAK2H,EAAaP,EAAUQ,GAAaJ,oBAAoBC,EAAmBhD,EAASiD,GAIzF,GAAID,KAAqB7B,aAAc,CACrC,MAAMoC,EAAepE,GACZ,SAAUyC,GACf,IAAKA,EAAM4B,eAAkB5B,EAAM4B,gBAAkB5B,EAAME,iBAAmBF,EAAME,eAAezE,SAASuE,EAAM4B,eAChH,OAAOrE,EAAGtE,KAAK0H,KAAMX,E,EAK3Be,EAAWY,EAAaZ,EAC1B,CAEA,MAAMD,EAAShB,iBAAiBnG,GAC1BkI,EAAWf,EAAOS,KAAeT,EAAOS,GAAa,IACrDO,EAAmBjB,YAAYgB,EAAUd,EAAUO,EAAclD,EAAU,MAEjF,GAAI0D,EAGF,YAFAA,EAAiB3B,OAAS2B,EAAiB3B,QAAUA,GAKvD,MAAMN,EAAMD,aAAamB,EAAUK,EAAkB3I,QAAQyG,eAAgB,KACvE3B,EAAK+D,EACTd,2BAA2B7G,EAASyE,EAAS2C,GAC7ChB,iBAAiBpG,EAASoH,GAE5BxD,EAAGyD,mBAAqBM,EAAclD,EAAU,KAChDb,EAAGwD,SAAWA,EACdxD,EAAG4C,OAASA,EACZ5C,EAAG+B,SAAWO,EACdgC,EAAShC,GAAOtC,EAEhB5D,EAAQkD,iBAAiB0E,EAAWhE,EAAI+D,EAC1C,CAEA,SAASS,cAAcpI,EAASmH,EAAQS,EAAWnD,EAAS4C,GAC1D,MAAMzD,EAAKsD,YAAYC,EAAOS,GAAYnD,EAAS4C,GAE9CzD,IAIL5D,EAAQ2E,oBAAoBiD,EAAWhE,EAAIyE,QAAQhB,WAC5CF,EAAOS,GAAWhE,EAAG+B,UAC9B,CAEA,SAAS2C,yBAAyBtI,EAASmH,EAAQS,EAAWW,GAC5D,MAAMC,EAAoBrB,EAAOS,IAAc,GAE/C,IAAK,MAAOa,EAAYpC,KAAUlH,OAAOuJ,QAAQF,GAC3CC,EAAWE,SAASJ,IACtBH,cAAcpI,EAASmH,EAAQS,EAAWvB,EAAMe,SAAUf,EAAMgB,mBAGtE,CAEA,SAASQ,aAAaxB,GAGpB,OADAA,EAAQA,EAAMvH,QAAQ0G,eAAgB,IAC/BI,aAAaS,IAAUA,CAChC,CAEA,MAAMI,aAAe,CACnBmC,GAAG5I,EAASqG,EAAO5B,EAASiD,GAC1BK,WAAW/H,EAASqG,EAAO5B,EAASiD,GAAoB,E,EAG1DmB,IAAI7I,EAASqG,EAAO5B,EAASiD,GAC3BK,WAAW/H,EAASqG,EAAO5B,EAASiD,GAAoB,E,EAG1DhB,IAAI1G,EAASyH,EAAmBhD,EAASiD,GACvC,GAAiC,iBAAtBD,IAAmCzH,EAC5C,OAGF,MAAO2H,EAAaP,EAAUQ,GAAaJ,oBAAoBC,EAAmBhD,EAASiD,GACrFoB,EAAclB,IAAcH,EAC5BN,EAAShB,iBAAiBnG,GAC1BwI,EAAoBrB,EAAOS,IAAc,GACzCmB,EAActB,EAAkBuB,WAAW,KAEjD,QAAwB,IAAb5B,EAAX,CAUA,GAAI2B,EACF,IAAK,MAAME,KAAgB9J,OAAO+J,KAAK/B,GACrCmB,yBAAyBtI,EAASmH,EAAQ8B,EAAcxB,EAAkB0B,MAAM,IAIpF,IAAK,MAAOC,EAAa/C,KAAUlH,OAAOuJ,QAAQF,GAAoB,CACpE,MAAMC,EAAaW,EAAYtK,QAAQ2G,cAAe,IAEjDqD,IAAerB,EAAkBkB,SAASF,IAC7CL,cAAcpI,EAASmH,EAAQS,EAAWvB,EAAMe,SAAUf,EAAMgB,mBAEpE,CAdA,KARA,CAEE,IAAKlI,OAAO+J,KAAKV,GAAmBxH,OAClC,OAGFoH,cAAcpI,EAASmH,EAAQS,EAAWR,EAAUO,EAAclD,EAAU,KAE9E,C,EAiBF4E,QAAQrJ,EAASqG,EAAOnC,GACtB,GAAqB,iBAAVmC,IAAuBrG,EAChC,OAAO,KAGT,MAAMwD,EAAIb,YAIV,IAAI2G,EAAc,KACdC,GAAU,EACVC,GAAiB,EACjBC,GAAmB,EALHpD,IADFwB,aAAaxB,IAQZ7C,IACjB8F,EAAc9F,EAAE7C,MAAM0F,EAAOnC,GAE7BV,EAAExD,GAASqJ,QAAQC,GACnBC,GAAWD,EAAYI,uBACvBF,GAAkBF,EAAYK,gCAC9BF,EAAmBH,EAAYM,sBAGjC,IAAIC,EAAM,IAAIlJ,MAAM0F,EAAO,CAAEkD,UAASO,YAAY,IAelD,OAdAD,EAAMvD,WAAWuD,EAAK3F,GAElBuF,GACFI,EAAIE,iBAGFP,GACFxJ,EAAQU,cAAcmJ,GAGpBA,EAAIJ,kBAAoBH,GAC1BA,EAAYS,iBAGPF,CACT,GAGF,SAASvD,WAAW0D,EAAKC,EAAO,IAC9B,IAAK,MAAOC,EAAKC,KAAUhL,OAAOuJ,QAAQuB,GACxC,IACED,EAAIE,GAAOC,CAQb,CAPE,MAAMC,GACNjL,OAAOkL,eAAeL,EAAKE,EAAK,CAC9BI,cAAc,EACdC,IAAG,IACMJ,GAGb,CAGF,OAAOH,CACT,CChTA,MAAMQ,WAAa,IAAIC,IAEvBC,KAAe,CACbC,IAAI3K,EAASkK,EAAKU,GACXJ,WAAW1C,IAAI9H,IAClBwK,WAAWG,IAAI3K,EAAS,IAAIyK,KAG9B,MAAMI,EAAcL,WAAWD,IAAIvK,GAI9B6K,EAAY/C,IAAIoC,IAA6B,IAArBW,EAAYC,KAMzCD,EAAYF,IAAIT,EAAKU,GAJnBG,QAAQC,MAAO,+EAA8EC,MAAMC,KAAKL,EAAY3B,QAAQ,M,EAOhIqB,IAAG,CAACvK,EAASkK,IACPM,WAAW1C,IAAI9H,IACVwK,WAAWD,IAAIvK,GAASuK,IAAIL,IAG9B,KAGTiB,OAAOnL,EAASkK,GACd,IAAKM,WAAW1C,IAAI9H,GAClB,OAGF,MAAM6K,EAAcL,WAAWD,IAAIvK,GAEnC6K,EAAYO,OAAOlB,GAGM,IAArBW,EAAYC,MACdN,WAAWY,OAAOpL,EAEtB,GC9CF,SAASqL,cAAclB,GACrB,GAAc,SAAVA,EACF,OAAO,EAGT,GAAc,UAAVA,EACF,OAAO,EAGT,GAAIA,IAAU9J,OAAO8J,GAAO9K,WAC1B,OAAOgB,OAAO8J,GAGhB,GAAc,KAAVA,GAA0B,SAAVA,EAClB,OAAO,KAGT,GAAqB,iBAAVA,EACT,OAAOA,EAGT,IACE,OAAOmB,KAAKC,MAAMC,mBAAmBrB,GAGvC,CAFE,MAAMC,GACN,OAAOD,CACT,CACF,CAEA,SAASsB,iBAAiBvB,GACxB,OAAOA,EAAIpL,QAAQ,UAAU4M,GAAQ,IAAGA,EAAInM,iBAC9C,CAEA,MAAMoM,YAAc,CAClBC,iBAAiB5L,EAASkK,EAAKC,GAC7BnK,EAAQ6L,aAAc,WAAUJ,iBAAiBvB,KAAQC,E,EAG3D2B,oBAAoB9L,EAASkK,GAC3BlK,EAAQ+L,gBAAiB,WAAUN,iBAAiBvB,K,EAGtD8B,kBAAkBhM,GAChB,IAAKA,EACH,MAAO,GAGT,MAAMiM,EAAa,GACbC,EAAS/M,OAAO+J,KAAKlJ,EAAQmM,SAASC,QAAOlC,GAAOA,EAAIlB,WAAW,QAAUkB,EAAIlB,WAAW,cAElG,IAAK,MAAMkB,KAAOgC,EAAQ,CACxB,IAAIG,EAAUnC,EAAIpL,QAAQ,MAAO,IACjCuN,EAAUA,EAAQC,OAAO,GAAG/M,cAAgB8M,EAAQlD,MAAM,EAAGkD,EAAQrL,QACrEiL,EAAWI,GAAWhB,cAAcrL,EAAQmM,QAAQjC,GACtD,CAEA,OAAO+B,C,EAGTM,iBAAgB,CAACvM,EAASkK,IACjBmB,cAAcrL,EAAQiC,aAAc,WAAUwJ,iBAAiBvB,QCpD1E,MAAMsC,OAEOC,qBACT,MAAO,EACT,CAEWC,yBACT,MAAO,EACT,CAEWhJ,kBACT,MAAM,IAAIiJ,MAAM,sEAClB,CAEAC,WAAWC,GAIT,OAHAA,EAAS7F,KAAK8F,gBAAgBD,GAC9BA,EAAS7F,KAAK+F,kBAAkBF,GAChC7F,KAAKgG,iBAAiBH,GACfA,CACT,CAEAE,kBAAkBF,GAChB,OAAOA,CACT,CAEAC,gBAAgBD,EAAQ7M,GACtB,MAAMiN,EAAarM,UAAUZ,GAAW2L,YAAYY,iBAAiBvM,EAAS,UAAY,GAE1F,MAAO,IACFgH,KAAKkG,YAAYT,WACM,iBAAfQ,EAA0BA,EAAa,MAC9CrM,UAAUZ,GAAW2L,YAAYK,kBAAkBhM,GAAW,MAC5C,iBAAX6M,EAAsBA,EAAS,GAE9C,CAEAG,iBAAiBH,EAAQM,EAAcnG,KAAKkG,YAAYR,aACtD,IAAK,MAAOU,EAAUC,KAAkBlO,OAAOuJ,QAAQyE,GAAc,CACnE,MAAMhD,EAAQ0C,EAAOO,GACfE,EAAY1M,UAAUuJ,GAAS,UJ1BrCjL,OADSA,EI2B+CiL,GJzBlD,GAAEjL,IAGLC,OAAOC,UAAUC,SAASC,KAAKJ,GAAQH,MAAM,eAAe,GAAGQ,cIwBlE,IAAK,IAAIgO,OAAOF,GAAeG,KAAKF,GAClC,MAAM,IAAIG,UACP,GAAEzG,KAAKkG,YAAYxJ,KAAKgK,0BAA0BN,qBAA4BE,yBAAiCD,MAGtH,CJlCWnO,KImCb,EC7CF,MAAMyO,QAAU,eAMhB,MAAMC,sBAAsBpB,OAC1BU,YAAYlN,EAAS6M,GACnBgB,SAEA7N,EAAUe,WAAWf,MAKrBgH,KAAK8G,SAAW9N,EAChBgH,KAAK+G,QAAU/G,KAAK4F,WAAWC,GAE/BnC,KAAKC,IAAI3D,KAAK8G,SAAU9G,KAAKkG,YAAYc,SAAUhH,MACrD,CAGAiH,UACEvD,KAAKS,OAAOnE,KAAK8G,SAAU9G,KAAKkG,YAAYc,UAC5CvH,aAAaC,IAAIM,KAAK8G,SAAU9G,KAAKkG,YAAYgB,WAEjD,IAAK,MAAMC,KAAgBhP,OAAOiP,oBAAoBpH,MACpDA,KAAKmH,GAAgB,IAEzB,CAEAE,eAAerL,EAAUhD,EAASsO,GAAa,GAC7ClK,uBAAuBpB,EAAUhD,EAASsO,EAC5C,CAEA1B,WAAWC,GAIT,OAHAA,EAAS7F,KAAK8F,gBAAgBD,EAAQ7F,KAAK8G,UAC3CjB,EAAS7F,KAAK+F,kBAAkBF,GAChC7F,KAAKgG,iBAAiBH,GACfA,CACT,CAGA0B,mBAAmBvO,GACjB,OAAO0K,KAAKH,IAAIxJ,WAAWf,GAAUgH,KAAKgH,SAC5C,CAEAO,2BAA2BvO,EAAS6M,EAAS,IAC3C,OAAO7F,KAAKwH,YAAYxO,IAAY,IAAIgH,KAAKhH,EAA2B,iBAAX6M,EAAsBA,EAAS,KAC9F,CAEWc,qBACT,OAAOA,OACT,CAEWK,sBACT,MAAQ,MAAKhH,KAAKtD,MACpB,CAEWwK,uBACT,MAAQ,IAAGlH,KAAKgH,UAClB,CAEAO,iBAAiB9K,GACf,MAAQ,GAAEA,IAAOuD,KAAKkH,WACxB,ECxEF,MAAMO,YAAczO,IAClB,IAAItB,EAAWsB,EAAQiC,aAAa,kBAEpC,IAAKvD,GAAyB,MAAbA,EAAkB,CACjC,IAAIgQ,EAAgB1O,EAAQiC,aAAa,QAMzC,IAAKyM,IAAmBA,EAAc/F,SAAS,OAAS+F,EAAc1F,WAAW,KAC/E,OAAO,KAIL0F,EAAc/F,SAAS,OAAS+F,EAAc1F,WAAW,OAC3D0F,EAAiB,IAAGA,EAAclO,MAAM,KAAK,MAG/C9B,EAAWgQ,GAAmC,MAAlBA,EAAwBA,EAAcC,OAAS,IAC7E,CAEA,OAAOlQ,cAAcC,EAAS,EAG1BkQ,eAAiB,CACrBrH,KAAI,CAAC7I,EAAUsB,EAAUH,SAASsC,kBACzB,GAAG0M,UAAUC,QAAQ1P,UAAU2H,iBAAiBzH,KAAKU,EAAStB,IAGvEqQ,QAAO,CAACrQ,EAAUsB,EAAUH,SAASsC,kBAC5B2M,QAAQ1P,UAAU6B,cAAc3B,KAAKU,EAAStB,GAGvDsQ,SAAQ,CAAChP,EAAStB,IACT,GAAGmQ,UAAU7O,EAAQgP,UAAU5C,QAAO6C,GAASA,EAAMC,QAAQxQ,KAGtEyQ,QAAQnP,EAAStB,GACf,MAAMyQ,EAAU,GAChB,IAAIC,EAAWpP,EAAQyB,WAAWF,QAAQ7C,GAE1C,KAAO0Q,GACLD,EAAQhM,KAAKiM,GACbA,EAAWA,EAAS3N,WAAWF,QAAQ7C,GAGzC,OAAOyQ,C,EAGTE,KAAKrP,EAAStB,GACZ,IAAI4Q,EAAWtP,EAAQuP,uBAEvB,KAAOD,GAAU,CACf,GAAIA,EAASJ,QAAQxQ,GACnB,MAAO,CAAC4Q,GAGVA,EAAWA,EAASC,sBACtB,CAEA,MAAO,E,EAGTC,KAAKxP,EAAStB,GACZ,IAAI8Q,EAAOxP,EAAQyP,mBAEnB,KAAOD,GAAM,CACX,GAAIA,EAAKN,QAAQxQ,GACf,MAAO,CAAC8Q,GAGVA,EAAOA,EAAKC,kBACd,CAEA,MAAO,E,EAGTC,kBAAkB1P,GAChB,MAAM2P,EAAa,CACjB,IACA,SACA,QACA,WACA,SACA,UACA,aACA,4BACAC,KAAIlR,GAAa,GAAEA,2BAAiCmR,KAAK,KAE3D,OAAO7I,KAAKO,KAAKoI,EAAY3P,GAASoM,QAAO0D,IAAOpO,WAAWoO,IAAO5O,UAAU4O,I,EAGlFC,uBAAuB/P,GACrB,MAAMtB,EAAW+P,YAAYzO,GAE7B,OAAItB,GACKkQ,eAAeG,QAAQrQ,GAAYA,EAGrC,I,EAGTsR,uBAAuBhQ,GACrB,MAAMtB,EAAW+P,YAAYzO,GAE7B,OAAOtB,EAAWkQ,eAAeG,QAAQrQ,GAAY,I,EAGvDuR,gCAAgCjQ,GAC9B,MAAMtB,EAAW+P,YAAYzO,GAE7B,OAAOtB,EAAWkQ,eAAerH,KAAK7I,GAAY,EACpD,GC/GIwR,qBAAuB,CAACC,EAAWC,EAAS,UAChD,MAAMC,EAAc,gBAAeF,EAAUjC,YACvCzK,EAAO0M,EAAUzM,KAEvB+C,aAAamC,GAAG/I,SAAUwQ,EAAa,qBAAoB5M,OAAU,SAAU4C,GAK7E,GAJI,CAAC,IAAK,QAAQsC,SAAS3B,KAAKsJ,UAC9BjK,EAAM0D,iBAGJrI,WAAWsF,MACb,OAGF,MAAMtC,EAASkK,eAAeoB,uBAAuBhJ,OAASA,KAAKzF,QAAS,IAAGkC,KAC9D0M,EAAUI,oBAAoB7L,GAGtC0L,IACX,GAAE,ECbE1M,OAAO,QACPsK,WAAW,WACXE,YAAa,YAEbsC,YAAe,iBACfC,aAAgB,kBAChBC,kBAAkB,OAClBC,kBAAkB,OAMxB,MAAMC,cAAchD,cAEPlK,kBACT,OAAOA,MACT,CAGAmN,QAGE,GAFmBpK,aAAa4C,QAAQrC,KAAK8G,SAAU0C,aAExC/G,iBACb,OAGFzC,KAAK8G,SAASjM,UAAUsJ,OApBJ,QAsBpB,MAAMmD,EAAatH,KAAK8G,SAASjM,UAAUC,SAvBvB,QAwBpBkF,KAAKqH,gBAAe,IAAMrH,KAAK8J,mBAAmB9J,KAAK8G,SAAUQ,EACnE,CAGAwC,kBACE9J,KAAK8G,SAAS3C,SACd1E,aAAa4C,QAAQrC,KAAK8G,SAAU2C,cACpCzJ,KAAKiH,SACP,CAGAM,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAOJ,MAAML,oBAAoBvJ,MAEvC,GAAsB,iBAAX6F,EAAX,CAIA,QAAqBoE,IAAjBD,EAAKnE,IAAyBA,EAAO7D,WAAW,MAAmB,gBAAX6D,EAC1D,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,GAAQ7F,KANb,CAOF,GACF,EAOFkJ,qBAAqBU,MAAO,SAM5BtN,mBAAmBsN,OCrEnB,MAAMlN,OAAO,SACPsK,WAAW,YACXE,YAAa,aACbgD,eAAe,YAEfC,oBAAoB,SACpBC,uBAAuB,4BACvBC,uBAAwB,2BAM9B,MAAMC,eAAe1D,cAERlK,kBACT,OAAOA,MACT,CAGA6N,SAEEvK,KAAK8G,SAASjC,aAAa,eAAgB7E,KAAK8G,SAASjM,UAAU0P,OAjB7C,UAkBxB,CAGAhD,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAOM,OAAOf,oBAAoBvJ,MAEzB,WAAX6F,GACFmE,EAAKnE,IAET,GACF,EAOFpG,aAAamC,GAAG/I,SAAUwR,uBAAsBD,wBAAsB/K,IACpEA,EAAM0D,iBAEN,MAAMyH,EAASnL,EAAM3B,OAAOnD,QAAQ6P,wBACvBE,OAAOf,oBAAoBiB,GAEnCD,QAAQ,IAOfjO,mBAAmBgO,QCtDnB,MAAM5N,OAAO,QACPwK,YAAY,YACZuD,iBAAoB,sBACpBC,gBAAmB,qBACnBC,eAAkB,oBAClBC,kBAAqB,uBACrBC,gBAAmB,qBACnBC,mBAAqB,QACrBC,iBAAmB,MACnBC,yBAA2B,gBAC3BC,gBAAkB,GAElBxF,UAAU,CACdyF,YAAa,KACbC,aAAc,KACdC,cAAe,MAGX1F,cAAc,CAClBwF,YAAa,kBACbC,aAAc,kBACdC,cAAe,mBAOjB,MAAMC,cAAc7F,OAClBU,YAAYlN,EAAS6M,GACnBgB,QACA7G,KAAK8G,SAAW9N,EAEXA,GAAYqS,MAAMC,gBAIvBtL,KAAK+G,QAAU/G,KAAK4F,WAAWC,GAC/B7F,KAAKuL,QAAU,EACfvL,KAAKwL,sBAAwBnK,QAAQ1J,OAAO8T,cAC5CzL,KAAK0L,cACP,CAGWjG,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGAuK,UACExH,aAAaC,IAAIM,KAAK8G,SAzDR,YA0DhB,CAGA6E,OAAOtM,GACAW,KAAKwL,sBAMNxL,KAAK4L,wBAAwBvM,KAC/BW,KAAKuL,QAAUlM,EAAMwM,SANrB7L,KAAKuL,QAAUlM,EAAMyM,QAAQ,GAAGD,OAQpC,CAEAE,KAAK1M,GACCW,KAAK4L,wBAAwBvM,KAC/BW,KAAKuL,QAAUlM,EAAMwM,QAAU7L,KAAKuL,SAGtCvL,KAAKgM,eACLhP,QAAQgD,KAAK+G,QAAQmE,YACvB,CAEAe,MAAM5M,GACJW,KAAKuL,QAAUlM,EAAMyM,SAAWzM,EAAMyM,QAAQ9R,OAAS,EACrD,EACAqF,EAAMyM,QAAQ,GAAGD,QAAU7L,KAAKuL,OACpC,CAEAS,eACE,MAAME,EAAYxT,KAAKyT,IAAInM,KAAKuL,SAEhC,GAAIW,GAlFgB,GAmFlB,OAGF,MAAME,EAAYF,EAAYlM,KAAKuL,QAEnCvL,KAAKuL,QAAU,EAEVa,GAILpP,QAAQoP,EAAY,EAAIpM,KAAK+G,QAAQqE,cAAgBpL,KAAK+G,QAAQoE,aACpE,CAEAO,cACM1L,KAAKwL,uBACP/L,aAAamC,GAAG5B,KAAK8G,SAAU8D,mBAAmBvL,GAASW,KAAK2L,OAAOtM,KACvEI,aAAamC,GAAG5B,KAAK8G,SAAU+D,iBAAiBxL,GAASW,KAAK+L,KAAK1M,KAEnEW,KAAK8G,SAASjM,UAAUwR,IAvGG,mBAyG3B5M,aAAamC,GAAG5B,KAAK8G,SAAU2D,kBAAkBpL,GAASW,KAAK2L,OAAOtM,KACtEI,aAAamC,GAAG5B,KAAK8G,SAAU4D,iBAAiBrL,GAASW,KAAKiM,MAAM5M,KACpEI,aAAamC,GAAG5B,KAAK8G,SAAU6D,gBAAgBtL,GAASW,KAAK+L,KAAK1M,KAEtE,CAEAuM,wBAAwBvM,GACtB,OAAOW,KAAKwL,wBAjHS,QAiHiBnM,EAAMiN,aAlHrB,UAkHyDjN,EAAMiN,YACxF,CAGA/E,qBACE,MAAO,iBAAkB1O,SAASsC,iBAAmBoR,UAAUC,eAAiB,CAClF,ECrHF,MAAM9P,OAAO,WACPsK,WAAW,cACXE,YAAa,eACbgD,eAAe,YAEfuC,iBAAiB,YACjBC,kBAAkB,aAClBC,uBAAyB,IAEzBC,WAAa,OACbC,WAAa,OACbC,eAAiB,OACjBC,gBAAkB,QAElBC,YAAe,oBACfC,WAAc,mBACdC,gBAAiB,sBACjBC,mBAAoB,yBACpBC,mBAAoB,yBACpBC,iBAAoB,wBACpBC,sBAAuB,4BACvBjD,uBAAwB,6BAExBkD,oBAAsB,WACtBpD,oBAAoB,SACpBqD,iBAAmB,QACnBC,eAAiB,oBACjBC,iBAAmB,sBACnBC,gBAAkB,qBAClBC,gBAAkB,qBAElBC,gBAAkB,UAClBC,cAAgB,iBAChBC,qBAAuBF,wBACvBG,kBAAoB,qBACpBC,oBAAsB,uBACtBC,oBAAsB,sCACtBC,mBAAqB,4BAErBC,iBAAmB,CACvBC,UA5BsB,QA6BtBC,WA9BqB,QAiCjB7I,UAAU,CACd8I,SAAU,IACVC,UAAU,EACVC,MAAO,QACPC,MAAM,EACNC,OAAO,EACPC,MAAM,GAGFlJ,cAAc,CAClB6I,SAAU,mBACVC,SAAU,UACVC,MAAO,mBACPC,KAAM,mBACNC,MAAO,UACPC,KAAM,WAOR,MAAMC,iBAAiBjI,cACrBV,YAAYlN,EAAS6M,GACnBgB,MAAM7N,EAAS6M,GAEf7F,KAAK8O,UAAY,KACjB9O,KAAK+O,eAAiB,KACtB/O,KAAKgP,YAAa,EAClBhP,KAAKiP,aAAe,KACpBjP,KAAKkP,aAAe,KAEpBlP,KAAKmP,mBAAqBvH,eAAeG,QAAQkG,oBAAqBjO,KAAK8G,UAC3E9G,KAAKoP,qBAtDmB,aAwDpBpP,KAAK+G,QAAQ2H,MACf1O,KAAKqP,OAET,CAGW5J,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGA8L,OACExI,KAAKsP,OA1FU,OA2FjB,CAEAC,mBAIO1W,SAAS2W,QAAUtV,UAAU8F,KAAK8G,WACrC9G,KAAKwI,MAET,CAEAH,OACErI,KAAKsP,OAtGU,OAuGjB,CAEAb,QACMzO,KAAKgP,YACPvV,qBAAqBuG,KAAK8G,UAG5B9G,KAAKyP,gBACP,CAEAJ,QACErP,KAAKyP,iBACLzP,KAAK0P,kBAEL1P,KAAK8O,UAAYa,aAAY,IAAM3P,KAAKuP,mBAAmBvP,KAAK+G,QAAQwH,SAC1E,CAEAqB,oBACO5P,KAAK+G,QAAQ2H,OAId1O,KAAKgP,WACPvP,aAAaoC,IAAI7B,KAAK8G,SAAUmG,YAAY,IAAMjN,KAAKqP,UAIzDrP,KAAKqP,QACP,CAEAQ,GAAG1R,GACD,MAAM2R,EAAQ9P,KAAK+P,YACnB,GAAI5R,EAAQ2R,EAAM9V,OAAS,GAAKmE,EAAQ,EACtC,OAGF,GAAI6B,KAAKgP,WAEP,YADAvP,aAAaoC,IAAI7B,KAAK8G,SAAUmG,YAAY,IAAMjN,KAAK6P,GAAG1R,KAI5D,MAAM6R,EAAchQ,KAAKiQ,cAAcjQ,KAAKkQ,cAC5C,GAAIF,IAAgB7R,EAClB,OAGF,MAAMgS,EAAQhS,EAAQ6R,EAtJP,OACA,OAuJfhQ,KAAKsP,OAAOa,EAAOL,EAAM3R,GAC3B,CAEA8I,UACMjH,KAAKkP,cACPlP,KAAKkP,aAAajI,UAGpBJ,MAAMI,SACR,CAGAlB,kBAAkBF,GAEhB,OADAA,EAAOuK,gBAAkBvK,EAAO0I,SACzB1I,CACT,CAEAuJ,qBACMpP,KAAK+G,QAAQyH,UACf/O,aAAamC,GAAG5B,KAAK8G,SAAUoG,iBAAe7N,GAASW,KAAKqQ,SAAShR,KAG5C,UAAvBW,KAAK+G,QAAQ0H,QACfhP,aAAamC,GAAG5B,KAAK8G,SAAUqG,oBAAkB,IAAMnN,KAAKyO,UAC5DhP,aAAamC,GAAG5B,KAAK8G,SAAUsG,oBAAkB,IAAMpN,KAAK4P,uBAG1D5P,KAAK+G,QAAQ4H,OAAStD,MAAMC,eAC9BtL,KAAKsQ,yBAET,CAEAA,0BACE,IAAK,MAAMC,KAAO3I,eAAerH,KAAKyN,kBAAmBhO,KAAK8G,UAC5DrH,aAAamC,GAAG2O,EAAKlD,kBAAkBhO,GAASA,EAAM0D,mBAGxD,MAqBMyN,EAAc,CAClBrF,aAAc,IAAMnL,KAAKsP,OAAOtP,KAAKyQ,kBAjNpB,SAkNjBrF,cAAe,IAAMpL,KAAKsP,OAAOtP,KAAKyQ,kBAjNpB,UAkNlBvF,YAxBkB,KACS,UAAvBlL,KAAK+G,QAAQ0H,QAYjBzO,KAAKyO,QACDzO,KAAKiP,cACPyB,aAAa1Q,KAAKiP,cAGpBjP,KAAKiP,aAAerR,YAAW,IAAMoC,KAAK4P,qBAjNjB,IAiN+D5P,KAAK+G,QAAQwH,UAAS,GAShHvO,KAAKkP,aAAe,IAAI7D,MAAMrL,KAAK8G,SAAU0J,EAC/C,CAEAH,SAAShR,GACP,GAAI,kBAAkBmH,KAAKnH,EAAM3B,OAAO4L,SACtC,OAGF,MAAM8C,EAAYgC,iBAAiB/O,EAAM6D,KACrCkJ,IACF/M,EAAM0D,iBACN/C,KAAKsP,OAAOtP,KAAKyQ,kBAAkBrE,IAEvC,CAEA6D,cAAcjX,GACZ,OAAOgH,KAAK+P,YAAY3R,QAAQpF,EAClC,CAEA2X,2BAA2BxS,GACzB,IAAK6B,KAAKmP,mBACR,OAGF,MAAMyB,EAAkBhJ,eAAeG,QA1NnB,UA0N4C/H,KAAKmP,oBAErEyB,EAAgB/V,UAAUsJ,OAnOJ,UAoOtByM,EAAgB7L,gBAAgB,gBAEhC,MAAM8L,EAAqBjJ,eAAeG,QAAS,sBAAqB5J,MAAW6B,KAAKmP,oBAEpF0B,IACFA,EAAmBhW,UAAUwR,IAzOT,UA0OpBwE,EAAmBhM,aAAa,eAAgB,QAEpD,CAEA6K,kBACE,MAAM1W,EAAUgH,KAAK+O,gBAAkB/O,KAAKkQ,aAE5C,IAAKlX,EACH,OAGF,MAAM8X,EAAkBzX,OAAO0X,SAAS/X,EAAQiC,aAAa,oBAAqB,IAElF+E,KAAK+G,QAAQwH,SAAWuC,GAAmB9Q,KAAK+G,QAAQqJ,eAC1D,CAEAd,OAAOa,EAAOnX,EAAU,MACtB,GAAIgH,KAAKgP,WACP,OAGF,MAAMjR,EAAgBiC,KAAKkQ,aACrBc,EA/QS,SA+QAb,EACTc,EAAcjY,GAAW6E,qBAAqBmC,KAAK+P,YAAahS,EAAeiT,EAAQhR,KAAK+G,QAAQ6H,MAE1G,GAAIqC,IAAgBlT,EAClB,OAGF,MAAMmT,EAAmBlR,KAAKiQ,cAAcgB,GAEtCE,EAAeC,GACZ3R,aAAa4C,QAAQrC,KAAK8G,SAAUsK,EAAW,CACpDnQ,cAAegQ,EACf7E,UAAWpM,KAAKqR,kBAAkBlB,GAClCjM,KAAMlE,KAAKiQ,cAAclS,GACzB8R,GAAIqB,IAMR,GAFmBC,EAAanE,aAEjBvK,iBACb,OAGF,IAAK1E,IAAkBkT,EAGrB,OAGF,MAAMK,EAAYjQ,QAAQrB,KAAK8O,WAC/B9O,KAAKyO,QAELzO,KAAKgP,YAAa,EAElBhP,KAAK2Q,2BAA2BO,GAChClR,KAAK+O,eAAiBkC,EAEtB,MAAMM,EAAuBP,EAAStD,iBAAmBD,eACnD+D,EAAiBR,EAASrD,gBAAkBC,gBAElDqD,EAAYpW,UAAUwR,IAAImF,GAE1B/V,OAAOwV,GAEPlT,EAAclD,UAAUwR,IAAIkF,GAC5BN,EAAYpW,UAAUwR,IAAIkF,GAa1BvR,KAAKqH,gBAXoB,KACvB4J,EAAYpW,UAAUsJ,OAAOoN,EAAsBC,GACnDP,EAAYpW,UAAUwR,IAlTF,UAoTpBtO,EAAclD,UAAUsJ,OApTJ,SAoT8BqN,EAAgBD,GAElEvR,KAAKgP,YAAa,EAElBmC,EAAalE,WAAW,GAGYlP,EAAeiC,KAAKyR,eAEtDH,GACFtR,KAAKqP,OAET,CAEAoC,cACE,OAAOzR,KAAK8G,SAASjM,UAAUC,SAlUV,QAmUvB,CAEAoV,aACE,OAAOtI,eAAeG,QAAQgG,qBAAsB/N,KAAK8G,SAC3D,CAEAiJ,YACE,OAAOnI,eAAerH,KAAKuN,cAAe9N,KAAK8G,SACjD,CAEA2I,iBACMzP,KAAK8O,YACP4C,cAAc1R,KAAK8O,WACnB9O,KAAK8O,UAAY,KAErB,CAEA2B,kBAAkBrE,GAChB,OAAIhQ,QAnWe,SAoWVgQ,EArWM,OADA,OAEI,SAuWZA,EAzWQ,OACA,MAyWjB,CAEAiF,kBAAkBlB,GAChB,OAAI/T,QA5WW,SA6WN+T,EA5WU,OACC,QAFL,SAgXRA,EA9Wa,QADD,MAgXrB,CAGA5I,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAO6E,SAAStF,oBAAoBvJ,KAAM6F,GAEhD,GAAsB,iBAAXA,GAKX,GAAsB,iBAAXA,EAAqB,CAC9B,QAAqBoE,IAAjBD,EAAKnE,IAAyBA,EAAO7D,WAAW,MAAmB,gBAAX6D,EAC1D,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,IACP,OAVEmE,EAAK6F,GAAGhK,EAWZ,GACF,EAOFpG,aAAamC,GAAG/I,SAAUwR,uBAAsB6D,qBAAqB,SAAU7O,GAC7E,MAAM3B,EAASkK,eAAeoB,uBAAuBhJ,MAErD,IAAKtC,IAAWA,EAAO7C,UAAUC,SAlYP,YAmYxB,OAGFuE,EAAM0D,iBAEN,MAAM4O,EAAW9C,SAAStF,oBAAoB7L,GACxCkU,EAAa5R,KAAK/E,aAAa,oBAErC,OAAI2W,GACFD,EAAS9B,GAAG+B,QACZD,EAAS/B,qBAIyC,SAAhDjL,YAAYY,iBAAiBvF,KAAM,UACrC2R,EAASnJ,YACTmJ,EAAS/B,sBAIX+B,EAAStJ,YACTsJ,EAAS/B,oBACX,IAEAnQ,aAAamC,GAAGjK,OAAQ2V,uBAAqB,KAC3C,MAAMuE,EAAYjK,eAAerH,KAAK4N,oBAEtC,IAAK,MAAMwD,KAAYE,EACrBhD,SAAStF,oBAAoBoI,EAC/B,IAOFrV,mBAAmBuS,UCncnB,MAAMnS,OAAO,WACPsK,WAAW,cACXE,YAAa,eACbgD,eAAe,YAEf4H,aAAc,mBACdC,cAAe,oBACfC,aAAc,mBACdC,eAAgB,qBAChB5H,uBAAwB,6BAExBV,kBAAkB,OAClBuI,oBAAsB,WACtBC,sBAAwB,aACxBC,qBAAuB,YACvBC,2BAA8B,6BAC9BC,sBAAwB,sBAExBC,MAAQ,QACRC,OAAS,SAETC,iBAAmB,uCACnBrI,uBAAuB,8BAEvB3E,UAAU,CACdiN,OAAQ,KACRnI,QAAQ,GAGJ7E,cAAc,CAClBgN,OAAQ,iBACRnI,OAAQ,WAOV,MAAMoI,iBAAiB/L,cACrBV,YAAYlN,EAAS6M,GACnBgB,MAAM7N,EAAS6M,GAEf7F,KAAK4S,kBAAmB,EACxB5S,KAAK6S,cAAgB,GAErB,MAAMC,EAAalL,eAAerH,KAAK6J,wBAEvC,IAAK,MAAM2I,KAAQD,EAAY,CAC7B,MAAMpb,EAAWkQ,eAAemB,uBAAuBgK,GACjDC,EAAgBpL,eAAerH,KAAK7I,GACvC0N,QAAO6N,GAAgBA,IAAiBjT,KAAK8G,WAE/B,OAAbpP,GAAqBsb,EAAchZ,QACrCgG,KAAK6S,cAAc1W,KAAK4W,EAE5B,CAEA/S,KAAKkT,sBAEAlT,KAAK+G,QAAQ2L,QAChB1S,KAAKmT,0BAA0BnT,KAAK6S,cAAe7S,KAAKoT,YAGtDpT,KAAK+G,QAAQwD,QACfvK,KAAKuK,QAET,CAGW9E,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGA6N,SACMvK,KAAKoT,WACPpT,KAAKqT,OAELrT,KAAKsT,MAET,CAEAA,OACE,GAAItT,KAAK4S,kBAAoB5S,KAAKoT,WAChC,OAGF,IAAIG,EAAiB,GASrB,GANIvT,KAAK+G,QAAQ2L,SACfa,EAAiBvT,KAAKwT,uBAAuBf,kBAC1CrN,QAAOpM,GAAWA,IAAYgH,KAAK8G,WACnC8B,KAAI5P,GAAW2Z,SAASpJ,oBAAoBvQ,EAAS,CAAEuR,QAAQ,OAGhEgJ,EAAevZ,QAAUuZ,EAAe,GAAGX,iBAC7C,OAIF,GADmBnT,aAAa4C,QAAQrC,KAAK8G,SAAUgL,cACxCrP,iBACb,OAGF,IAAK,MAAMgR,KAAkBF,EAC3BE,EAAeJ,OAGjB,MAAMK,EAAY1T,KAAK2T,gBAEvB3T,KAAK8G,SAASjM,UAAUsJ,OA3GA,YA4GxBnE,KAAK8G,SAASjM,UAAUwR,IA3GE,cA6G1BrM,KAAK8G,SAAS8M,MAAMF,GAAa,EAEjC1T,KAAKmT,0BAA0BnT,KAAK6S,eAAe,GACnD7S,KAAK4S,kBAAmB,EAExB,MAYMiB,EAAc,SADSH,EAAU,GAAGhN,cAAgBgN,EAAUvR,MAAM,KAG1EnC,KAAKqH,gBAdY,KACfrH,KAAK4S,kBAAmB,EAExB5S,KAAK8G,SAASjM,UAAUsJ,OArHA,cAsHxBnE,KAAK8G,SAASjM,UAAUwR,IAvHF,WADJ,QA0HlBrM,KAAK8G,SAAS8M,MAAMF,GAAa,GAEjCjU,aAAa4C,QAAQrC,KAAK8G,SAAUiL,cAAY,GAMpB/R,KAAK8G,UAAU,GAC7C9G,KAAK8G,SAAS8M,MAAMF,GAAc,GAAE1T,KAAK8G,SAAS+M,MACpD,CAEAR,OACE,GAAIrT,KAAK4S,mBAAqB5S,KAAKoT,WACjC,OAIF,GADmB3T,aAAa4C,QAAQrC,KAAK8G,SAAUkL,cACxCvP,iBACb,OAGF,MAAMiR,EAAY1T,KAAK2T,gBAEvB3T,KAAK8G,SAAS8M,MAAMF,GAAc,GAAE1T,KAAK8G,SAASgN,wBAAwBJ,OAE1EjY,OAAOuE,KAAK8G,UAEZ9G,KAAK8G,SAASjM,UAAUwR,IApJE,cAqJ1BrM,KAAK8G,SAASjM,UAAUsJ,OAtJA,WADJ,QAyJpB,IAAK,MAAM9B,KAAWrC,KAAK6S,cAAe,CACxC,MAAM7Z,EAAU4O,eAAeoB,uBAAuB3G,GAElDrJ,IAAYgH,KAAKoT,SAASpa,IAC5BgH,KAAKmT,0BAA0B,CAAC9Q,IAAU,EAE9C,CAEArC,KAAK4S,kBAAmB,EASxB5S,KAAK8G,SAAS8M,MAAMF,GAAa,GAEjC1T,KAAKqH,gBATY,KACfrH,KAAK4S,kBAAmB,EACxB5S,KAAK8G,SAASjM,UAAUsJ,OAnKA,cAoKxBnE,KAAK8G,SAASjM,UAAUwR,IArKF,YAsKtB5M,aAAa4C,QAAQrC,KAAK8G,SAAUmL,eAAa,GAKrBjS,KAAK8G,UAAU,EAC/C,CAEAsM,SAASpa,EAAUgH,KAAK8G,UACtB,OAAO9N,EAAQ6B,UAAUC,SAhLL,OAiLtB,CAGAiL,kBAAkBF,GAGhB,OAFAA,EAAO0E,OAASlJ,QAAQwE,EAAO0E,QAC/B1E,EAAO6M,OAAS3Y,WAAW8L,EAAO6M,QAC3B7M,CACT,CAEA8N,gBACE,OAAO3T,KAAK8G,SAASjM,UAAUC,SAtLL,uBAsLuCyX,MAAQC,MAC3E,CAEAU,sBACE,IAAKlT,KAAK+G,QAAQ2L,OAChB,OAGF,MAAM1K,EAAWhI,KAAKwT,uBAAuBpJ,wBAE7C,IAAK,MAAMpR,KAAWgP,EAAU,CAC9B,MAAM+L,EAAWnM,eAAeoB,uBAAuBhQ,GAEnD+a,GACF/T,KAAKmT,0BAA0B,CAACna,GAAUgH,KAAKoT,SAASW,GAE5D,CACF,CAEAP,uBAAuB9b,GACrB,MAAMsQ,EAAWJ,eAAerH,KAAK8R,2BAA4BrS,KAAK+G,QAAQ2L,QAE9E,OAAO9K,eAAerH,KAAK7I,EAAUsI,KAAK+G,QAAQ2L,QAAQtN,QAAOpM,IAAYgP,EAASrG,SAAS3I,IACjG,CAEAma,0BAA0Ba,EAAcC,GACtC,GAAKD,EAAaha,OAIlB,IAAK,MAAMhB,KAAWgb,EACpBhb,EAAQ6B,UAAU0P,OAvNK,aAuNyB0J,GAChDjb,EAAQ6L,aAAa,gBAAiBoP,EAE1C,CAGA1M,uBAAuB1B,GACrB,MAAMkB,EAAU,GAKhB,MAJsB,iBAAXlB,GAAuB,YAAYW,KAAKX,KACjDkB,EAAQwD,QAAS,GAGZvK,KAAK+J,MAAK,WACf,MAAMC,EAAO2I,SAASpJ,oBAAoBvJ,KAAM+G,GAEhD,GAAsB,iBAAXlB,EAAqB,CAC9B,QAA4B,IAAjBmE,EAAKnE,GACd,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,IACP,CACF,GACF,EAOFpG,aAAamC,GAAG/I,SAAUwR,uBAAsBD,wBAAsB,SAAU/K,IAEjD,MAAzBA,EAAM3B,OAAO4L,SAAoBjK,EAAME,gBAAmD,MAAjCF,EAAME,eAAe+J,UAChFjK,EAAM0D,iBAGR,IAAK,MAAM/J,KAAW4O,eAAeqB,gCAAgCjJ,MACnE2S,SAASpJ,oBAAoBvQ,EAAS,CAAEuR,QAAQ,IAASA,QAE7D,IAMAjO,mBAAmBqW,UC1QnB,MAAMjW,OAAO,WACPsK,WAAW,cACXE,YAAa,eACbgD,eAAe,YAEfgK,aAAa,SACbC,UAAU,MACVC,eAAe,UACfC,iBAAiB,YACjBC,mBAAqB,EAErBtC,aAAc,mBACdC,eAAgB,qBAChBH,aAAc,mBACdC,cAAe,oBACf1H,uBAAwB,6BACxBkK,uBAA0B,+BAC1BC,qBAAwB,6BAExB7K,kBAAkB,OAClB8K,kBAAoB,SACpBC,mBAAqB,UACrBC,qBAAuB,YACvBC,yBAA2B,gBAC3BC,2BAA6B,kBAE7BzK,uBAAuB,4DACvB0K,2BAA8B,GAAE1K,8BAChC2K,cAAgB,iBAChBC,gBAAkB,UAClBC,oBAAsB,cACtBC,uBAAyB,8DAEzBC,cAAgB/Y,QAAU,UAAY,YACtCgZ,iBAAmBhZ,QAAU,YAAc,UAC3CiZ,iBAAmBjZ,QAAU,aAAe,eAC5CkZ,oBAAsBlZ,QAAU,eAAiB,aACjDmZ,gBAAkBnZ,QAAU,aAAe,cAC3CoZ,eAAiBpZ,QAAU,cAAgB,aAC3CqZ,oBAAsB,MACtBC,uBAAyB,SAEzBjQ,UAAU,CACdkQ,WAAW,EACXC,SAAU,kBACVC,QAAS,UACTC,OAAQ,CAAC,EAAG,GACZC,aAAc,KACdC,UAAW,UAGPtQ,cAAc,CAClBiQ,UAAW,mBACXC,SAAU,mBACVC,QAAS,SACTC,OAAQ,0BACRC,aAAc,yBACdC,UAAW,2BAOb,MAAMC,iBAAiBrP,cACrBV,YAAYlN,EAAS6M,GACnBgB,MAAM7N,EAAS6M,GAEf7F,KAAKkW,QAAU,KACflW,KAAKmW,QAAUnW,KAAK8G,SAASrM,WAE7BuF,KAAKoW,MAAQxO,eAAeY,KAAKxI,KAAK8G,SAAUiO,eAAe,IAC7DnN,eAAeS,KAAKrI,KAAK8G,SAAUiO,eAAe,IAClDnN,eAAeG,QAAQgN,cAAe/U,KAAKmW,SAC7CnW,KAAKqW,UAAYrW,KAAKsW,eACxB,CAGW7Q,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGA6N,SACE,OAAOvK,KAAKoT,WAAapT,KAAKqT,OAASrT,KAAKsT,MAC9C,CAEAA,OACE,GAAI5Y,WAAWsF,KAAK8G,WAAa9G,KAAKoT,WACpC,OAGF,MAAMnS,EAAgB,CACpBA,cAAejB,KAAK8G,UAKtB,IAFkBrH,aAAa4C,QAAQrC,KAAK8G,SAAUgL,aAAY7Q,GAEpDwB,iBAAd,CAUA,GANAzC,KAAKuW,gBAMD,iBAAkB1d,SAASsC,kBAAoB6E,KAAKmW,QAAQ5b,QAtFxC,eAuFtB,IAAK,MAAMvB,IAAW,GAAG6O,UAAUhP,SAASgD,KAAKmM,UAC/CvI,aAAamC,GAAG5I,EAAS,YAAawC,MAI1CwE,KAAK8G,SAAS0P,QACdxW,KAAK8G,SAASjC,aAAa,iBAAiB,GAE5C7E,KAAKoW,MAAMvb,UAAUwR,IA1GD,QA2GpBrM,KAAK8G,SAASjM,UAAUwR,IA3GJ,QA4GpB5M,aAAa4C,QAAQrC,KAAK8G,SAAUiL,cAAa9Q,EAnBjD,CAoBF,CAEAoS,OACE,GAAI3Y,WAAWsF,KAAK8G,YAAc9G,KAAKoT,WACrC,OAGF,MAAMnS,EAAgB,CACpBA,cAAejB,KAAK8G,UAGtB9G,KAAKyW,cAAcxV,EACrB,CAEAgG,UACMjH,KAAKkW,SACPlW,KAAKkW,QAAQQ,UAGf7P,MAAMI,SACR,CAEA0P,SACE3W,KAAKqW,UAAYrW,KAAKsW,gBAClBtW,KAAKkW,SACPlW,KAAKkW,QAAQS,QAEjB,CAGAF,cAAcxV,GAEZ,IADkBxB,aAAa4C,QAAQrC,KAAK8G,SAAUkL,aAAY/Q,GACpDwB,iBAAd,CAMA,GAAI,iBAAkB5J,SAASsC,gBAC7B,IAAK,MAAMnC,IAAW,GAAG6O,UAAUhP,SAASgD,KAAKmM,UAC/CvI,aAAaC,IAAI1G,EAAS,YAAawC,MAIvCwE,KAAKkW,SACPlW,KAAKkW,QAAQQ,UAGf1W,KAAKoW,MAAMvb,UAAUsJ,OA7JD,QA8JpBnE,KAAK8G,SAASjM,UAAUsJ,OA9JJ,QA+JpBnE,KAAK8G,SAASjC,aAAa,gBAAiB,SAC5CF,YAAYG,oBAAoB9E,KAAKoW,MAAO,UAC5C3W,aAAa4C,QAAQrC,KAAK8G,SAAUmL,eAAchR,EAlBlD,CAmBF,CAEA2E,WAAWC,GAGT,GAAgC,iBAFhCA,EAASgB,MAAMjB,WAAWC,IAERmQ,YAA2Bpc,UAAUiM,EAAOmQ,YACV,mBAA3CnQ,EAAOmQ,UAAUlC,sBAGxB,MAAM,IAAIrN,UAAW,GAAE/J,OAAKgK,+GAG9B,OAAOb,CACT,CAEA0Q,gBACE,QAAsB,IAAXK,OACT,MAAM,IAAInQ,UAAU,gEAGtB,IAAIoQ,EAAmB7W,KAAK8G,SAEG,WAA3B9G,KAAK+G,QAAQiP,UACfa,EAAmB7W,KAAKmW,QACfvc,UAAUoG,KAAK+G,QAAQiP,WAChCa,EAAmB9c,WAAWiG,KAAK+G,QAAQiP,WACA,iBAA3BhW,KAAK+G,QAAQiP,YAC7Ba,EAAmB7W,KAAK+G,QAAQiP,WAGlC,MAAMD,EAAe/V,KAAK8W,mBAC1B9W,KAAKkW,QAAUU,OAAOG,aAAaF,EAAkB7W,KAAKoW,MAAOL,EACnE,CAEA3C,WACE,OAAOpT,KAAKoW,MAAMvb,UAAUC,SArMR,OAsMtB,CAEAkc,gBACE,MAAMC,EAAiBjX,KAAKmW,QAE5B,GAAIc,EAAepc,UAAUC,SAzMN,WA0MrB,OAAOya,gBAGT,GAAI0B,EAAepc,UAAUC,SA5MJ,aA6MvB,OAAO0a,eAGT,GAAIyB,EAAepc,UAAUC,SA/MA,iBAgN3B,MAhMsB,MAmMxB,GAAImc,EAAepc,UAAUC,SAlNE,mBAmN7B,MAnMyB,SAuM3B,MAAMoc,EAAkF,QAA1E/d,iBAAiB6G,KAAKoW,OAAO/b,iBAAiB,iBAAiBsN,OAE7E,OAAIsP,EAAepc,UAAUC,SA7NP,UA8Nboc,EAAQ9B,iBAAmBD,cAG7B+B,EAAQ5B,oBAAsBD,gBACvC,CAEAiB,gBACE,OAAkD,OAA3CtW,KAAK8G,SAASvM,QA5ND,UA6NtB,CAEA4c,aACE,MAAMrB,OAAEA,GAAW9V,KAAK+G,QAExB,MAAsB,iBAAX+O,EACFA,EAAOtc,MAAM,KAAKoP,KAAIzF,GAAS9J,OAAO0X,SAAS5N,EAAO,MAGzC,mBAAX2S,EACFsB,GAActB,EAAOsB,EAAYpX,KAAK8G,UAGxCgP,CACT,CAEAgB,mBACE,MAAMO,EAAwB,CAC5BC,UAAWtX,KAAKgX,gBAChBO,UAAW,CAAC,CACV9a,KAAM,kBACN+a,QAAS,CACP5B,SAAU5V,KAAK+G,QAAQ6O,WAG3B,CACEnZ,KAAM,SACN+a,QAAS,CACP1B,OAAQ9V,KAAKmX,iBAcnB,OARInX,KAAKqW,WAAsC,WAAzBrW,KAAK+G,QAAQ8O,WACjClR,YAAYC,iBAAiB5E,KAAKoW,MAAO,SAAU,UACnDiB,EAAsBE,UAAY,CAAC,CACjC9a,KAAM,cACNgb,SAAS,KAIN,IACFJ,KACAra,QAAQgD,KAAK+G,QAAQgP,aAAc,CAACsB,IAE3C,CAEAK,iBAAgBxU,IAAEA,EAAGxF,OAAEA,IACrB,MAAMoS,EAAQlI,eAAerH,KAAK2U,uBAAwBlV,KAAKoW,OAAOhR,QAAOpM,GAAWkB,UAAUlB,KAE7F8W,EAAM9V,QAMX6D,qBAAqBiS,EAAOpS,EAAQwF,IAAQmR,kBAAiBvE,EAAMnO,SAASjE,IAAS8Y,OACvF,CAGAjP,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAOiM,SAAS1M,oBAAoBvJ,KAAM6F,GAEhD,GAAsB,iBAAXA,EAAX,CAIA,QAA4B,IAAjBmE,EAAKnE,GACd,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,IANL,CAOF,GACF,CAEA0B,kBAAkBlI,GAChB,GA/TuB,IA+TnBA,EAAMmL,QAAiD,UAAfnL,EAAMM,MAlUtC,QAkU0DN,EAAM6D,IAC1E,OAGF,MAAMyU,EAAc/P,eAAerH,KAAKuU,4BAExC,IAAK,MAAMvK,KAAUoN,EAAa,CAChC,MAAMC,EAAU3B,SAASzO,YAAY+C,GACrC,IAAKqN,IAAyC,IAA9BA,EAAQ7Q,QAAQ4O,UAC9B,SAGF,MAAMkC,EAAexY,EAAMwY,eACrBC,EAAeD,EAAalW,SAASiW,EAAQxB,OACnD,GACEyB,EAAalW,SAASiW,EAAQ9Q,WACC,WAA9B8Q,EAAQ7Q,QAAQ4O,YAA2BmC,GACb,YAA9BF,EAAQ7Q,QAAQ4O,WAA2BmC,EAE5C,SAIF,GAAIF,EAAQxB,MAAMtb,SAASuE,EAAM3B,UAA4B,UAAf2B,EAAMM,MAzV1C,QAyV8DN,EAAM6D,KAAoB,qCAAqCsD,KAAKnH,EAAM3B,OAAO4L,UACvJ,SAGF,MAAMrI,EAAgB,CAAEA,cAAe2W,EAAQ9Q,UAE5B,UAAfzH,EAAMM,OACRsB,EAAcoI,WAAahK,GAG7BuY,EAAQnB,cAAcxV,EACxB,CACF,CAEAsG,6BAA6BlI,GAI3B,MAAM0Y,EAAU,kBAAkBvR,KAAKnH,EAAM3B,OAAO4L,SAC9C0O,EA7WS,WA6WO3Y,EAAM6D,IACtB+U,EAAkB,CAAC7D,eAAcC,kBAAgB1S,SAAStC,EAAM6D,KAEtE,IAAK+U,IAAoBD,EACvB,OAGF,GAAID,IAAYC,EACd,OAGF3Y,EAAM0D,iBAGN,MAAMmV,EAAkBlY,KAAKkI,QAAQkC,wBACnCpK,KACC4H,eAAeS,KAAKrI,KAAMoK,wBAAsB,IAC/CxC,eAAeY,KAAKxI,KAAMoK,wBAAsB,IAChDxC,eAAeG,QAAQqC,uBAAsB/K,EAAME,eAAe9E,YAEhEmJ,EAAWqS,SAAS1M,oBAAoB2O,GAE9C,GAAID,EAIF,OAHA5Y,EAAM8Y,kBACNvU,EAAS0P,YACT1P,EAAS8T,gBAAgBrY,GAIvBuE,EAASwP,aACX/T,EAAM8Y,kBACNvU,EAASyP,OACT6E,EAAgB1B,QAEpB,EAOF/W,aAAamC,GAAG/I,SAAU0b,uBAAwBnK,uBAAsB6L,SAASmC,uBACjF3Y,aAAamC,GAAG/I,SAAU0b,uBAAwBQ,cAAekB,SAASmC,uBAC1E3Y,aAAamC,GAAG/I,SAAUwR,uBAAsB4L,SAASoC,YACzD5Y,aAAamC,GAAG/I,SAAU2b,qBAAsByB,SAASoC,YACzD5Y,aAAamC,GAAG/I,SAAUwR,uBAAsBD,wBAAsB,SAAU/K,GAC9EA,EAAM0D,iBACNkT,SAAS1M,oBAAoBvJ,MAAMuK,QACrC,IAMAjO,mBAAmB2Z,UCrbnB,MAAMqC,uBAAyB,oDACzBC,wBAA0B,cAC1BC,iBAAmB,gBACnBC,gBAAkB,eAMxB,MAAMC,gBACJxS,cACElG,KAAK8G,SAAWjO,SAASgD,IAC3B,CAGA8c,WAEE,MAAMC,EAAgB/f,SAASsC,gBAAgB0d,YAC/C,OAAOngB,KAAKyT,IAAIxU,OAAOmhB,WAAaF,EACtC,CAEAvF,OACE,MAAM0F,EAAQ/Y,KAAK2Y,WACnB3Y,KAAKgZ,mBAELhZ,KAAKiZ,sBAAsBjZ,KAAK8G,SAvBX,iBAuBuCoS,GAAmBA,EAAkBH,IAEjG/Y,KAAKiZ,sBAAsBX,uBAzBN,iBAyBgDY,GAAmBA,EAAkBH,IAC1G/Y,KAAKiZ,sBA3BuB,cAER,gBAyBiDC,GAAmBA,EAAkBH,GAC5G,CAEAI,QACEnZ,KAAKoZ,wBAAwBpZ,KAAK8G,SAAU,YAC5C9G,KAAKoZ,wBAAwBpZ,KAAK8G,SA/Bb,iBAgCrB9G,KAAKoZ,wBAAwBd,uBAhCR,iBAiCrBtY,KAAKoZ,wBAlCuB,cAER,eAiCtB,CAEAC,gBACE,OAAOrZ,KAAK2Y,WAAa,CAC3B,CAGAK,mBACEhZ,KAAKsZ,sBAAsBtZ,KAAK8G,SAAU,YAC1C9G,KAAK8G,SAAS8M,MAAM2F,SAAW,QACjC,CAEAN,sBAAsBvhB,EAAU8hB,EAAexd,GAC7C,MAAMyd,EAAiBzZ,KAAK2Y,WAW5B3Y,KAAK0Z,2BAA2BhiB,GAVHsB,IAC3B,GAAIA,IAAYgH,KAAK8G,UAAYnP,OAAOmhB,WAAa9f,EAAQ6f,YAAcY,EACzE,OAGFzZ,KAAKsZ,sBAAsBtgB,EAASwgB,GACpC,MAAMN,EAAkBvhB,OAAOwB,iBAAiBH,GAASqB,iBAAiBmf,GAC1ExgB,EAAQ4a,MAAM+F,YAAYH,EAAgB,GAAExd,EAAS3C,OAAOC,WAAW4f,QAAsB,GAIjG,CAEAI,sBAAsBtgB,EAASwgB,GAC7B,MAAMI,EAAc5gB,EAAQ4a,MAAMvZ,iBAAiBmf,GAC/CI,GACFjV,YAAYC,iBAAiB5L,EAASwgB,EAAeI,EAEzD,CAEAR,wBAAwB1hB,EAAU8hB,GAahCxZ,KAAK0Z,2BAA2BhiB,GAZHsB,IAC3B,MAAMmK,EAAQwB,YAAYY,iBAAiBvM,EAASwgB,GAEtC,OAAVrW,GAKJwB,YAAYG,oBAAoB9L,EAASwgB,GACzCxgB,EAAQ4a,MAAM+F,YAAYH,EAAerW,IALvCnK,EAAQ4a,MAAMiG,eAAeL,EAKgB,GAInD,CAEAE,2BAA2BhiB,EAAUoiB,GACnC,GAAIlgB,UAAUlC,GACZoiB,EAASpiB,QAIX,IAAK,MAAMqiB,KAAOnS,eAAerH,KAAK7I,EAAUsI,KAAK8G,UACnDgT,EAASC,EAEb,EC/FF,MAAMrd,OAAO,WACPgN,kBAAkB,OAClBC,kBAAkB,OAClBqQ,gBAAmB,wBAEnBvU,UAAU,CACdwU,UAAW,iBACXC,cAAe,KACf5S,YAAY,EACZpN,WAAW,EACXigB,YAAa,QAGTzU,cAAc,CAClBuU,UAAW,SACXC,cAAe,kBACf5S,WAAY,UACZpN,UAAW,UACXigB,YAAa,oBAOf,MAAMC,iBAAiB5U,OACrBU,YAAYL,GACVgB,QACA7G,KAAK+G,QAAU/G,KAAK4F,WAAWC,GAC/B7F,KAAKqa,aAAc,EACnBra,KAAK8G,SAAW,IAClB,CAGWrB,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGA4W,KAAKtX,GACH,IAAKgE,KAAK+G,QAAQ7M,UAEhB,YADA8C,QAAQhB,GAIVgE,KAAKsa,UAEL,MAAMthB,EAAUgH,KAAKua,cACjBva,KAAK+G,QAAQO,YACf7L,OAAOzC,GAGTA,EAAQ6B,UAAUwR,IA1DE,QA4DpBrM,KAAKwa,mBAAkB,KACrBxd,QAAQhB,EAAS,GAErB,CAEAqX,KAAKrX,GACEgE,KAAK+G,QAAQ7M,WAKlB8F,KAAKua,cAAc1f,UAAUsJ,OAvET,QAyEpBnE,KAAKwa,mBAAkB,KACrBxa,KAAKiH,UACLjK,QAAQhB,EAAS,KARjBgB,QAAQhB,EAUZ,CAEAiL,UACOjH,KAAKqa,cAIV5a,aAAaC,IAAIM,KAAK8G,SAAUkT,iBAEhCha,KAAK8G,SAAS3C,SACdnE,KAAKqa,aAAc,EACrB,CAGAE,cACE,IAAKva,KAAK8G,SAAU,CAClB,MAAM2T,EAAW5hB,SAAS6hB,cAAc,OACxCD,EAASR,UAAYja,KAAK+G,QAAQkT,UAC9Bja,KAAK+G,QAAQO,YACfmT,EAAS5f,UAAUwR,IAjGH,QAoGlBrM,KAAK8G,SAAW2T,CAClB,CAEA,OAAOza,KAAK8G,QACd,CAEAf,kBAAkBF,GAGhB,OADAA,EAAOsU,YAAcpgB,WAAW8L,EAAOsU,aAChCtU,CACT,CAEAyU,UACE,GAAIta,KAAKqa,YACP,OAGF,MAAMrhB,EAAUgH,KAAKua,cACrBva,KAAK+G,QAAQoT,YAAYQ,OAAO3hB,GAEhCyG,aAAamC,GAAG5I,EAASghB,iBAAiB,KACxChd,QAAQgD,KAAK+G,QAAQmT,cAAc,IAGrCla,KAAKqa,aAAc,CACrB,CAEAG,kBAAkBxe,GAChBoB,uBAAuBpB,EAAUgE,KAAKua,cAAeva,KAAK+G,QAAQO,WACpE,EClIF,MAAM5K,OAAO,YACPsK,WAAW,eACXE,YAAa,gBACb0T,gBAAiB,uBACjBC,kBAAqB,2BAErB1G,QAAU,MACV2G,gBAAkB,UAClBC,iBAAmB,WAEnBtV,UAAU,CACduV,WAAW,EACXC,YAAa,MAGTvV,cAAc,CAClBsV,UAAW,UACXC,YAAa,WAOf,MAAMC,kBAAkB1V,OACtBU,YAAYL,GACVgB,QACA7G,KAAK+G,QAAU/G,KAAK4F,WAAWC,GAC/B7F,KAAKmb,WAAY,EACjBnb,KAAKob,qBAAuB,IAC9B,CAGW3V,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGA2e,WACMrb,KAAKmb,YAILnb,KAAK+G,QAAQiU,WACfhb,KAAK+G,QAAQkU,YAAYzE,QAG3B/W,aAAaC,IAAI7G,SAAUqO,aAC3BzH,aAAamC,GAAG/I,SAAU+hB,iBAAevb,GAASW,KAAKsb,eAAejc,KACtEI,aAAamC,GAAG/I,SAAUgiB,mBAAmBxb,GAASW,KAAKub,eAAelc,KAE1EW,KAAKmb,WAAY,EACnB,CAEAK,aACOxb,KAAKmb,YAIVnb,KAAKmb,WAAY,EACjB1b,aAAaC,IAAI7G,SAAUqO,aAC7B,CAGAoU,eAAejc,GACb,MAAM4b,YAAEA,GAAgBjb,KAAK+G,QAE7B,GAAI1H,EAAM3B,SAAW7E,UAAYwG,EAAM3B,SAAWud,GAAeA,EAAYngB,SAASuE,EAAM3B,QAC1F,OAGF,MAAM+d,EAAW7T,eAAec,kBAAkBuS,GAE1B,IAApBQ,EAASzhB,OACXihB,EAAYzE,QA1EO,aA2EVxW,KAAKob,qBACdK,EAASA,EAASzhB,OAAS,GAAGwc,QAE9BiF,EAAS,GAAGjF,OAEhB,CAEA+E,eAAelc,GApFD,QAqFRA,EAAM6D,MAIVlD,KAAKob,qBAAuB/b,EAAMqc,SAvFb,WADD,UAyFtB,EC3FF,MAAMhf,OAAO,QACPsK,WAAW,WACXE,YAAa,YACbgD,eAAe,YACfgK,aAAa,SAEblC,aAAc,gBACd2J,uBAAwB,yBACxB1J,eAAgB,kBAChBH,aAAc,gBACdC,cAAe,iBACf6J,eAAgB,kBAChBC,oBAAuB,yBACvBC,wBAA2B,6BAC3BC,wBAAyB,2BACzB1R,uBAAwB,0BAExB2R,gBAAkB,aAClBtS,kBAAkB,OAClBC,kBAAkB,OAClBsS,kBAAoB,eAEpBC,gBAAgB,cAChBC,gBAAkB,gBAClBC,oBAAsB,cACtBhS,uBAAuB,2BAEvB3E,UAAU,CACdgV,UAAU,EACVjE,OAAO,EACPhI,UAAU,GAGN9I,cAAc,CAClB+U,SAAU,mBACVjE,MAAO,UACPhI,SAAU,WAOZ,MAAM6N,cAAczV,cAClBV,YAAYlN,EAAS6M,GACnBgB,MAAM7N,EAAS6M,GAEf7F,KAAKsc,QAAU1U,eAAeG,QAxBV,gBAwBmC/H,KAAK8G,UAC5D9G,KAAKuc,UAAYvc,KAAKwc,sBACtBxc,KAAKyc,WAAazc,KAAK0c,uBACvB1c,KAAKoT,UAAW,EAChBpT,KAAK4S,kBAAmB,EACxB5S,KAAK2c,WAAa,IAAIjE,gBAEtB1Y,KAAKoP,oBACP,CAGW3J,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGA6N,OAAOtJ,GACL,OAAOjB,KAAKoT,SAAWpT,KAAKqT,OAASrT,KAAKsT,KAAKrS,EACjD,CAEAqS,KAAKrS,GACCjB,KAAKoT,UAAYpT,KAAK4S,kBAIRnT,aAAa4C,QAAQrC,KAAK8G,SAAUgL,aAAY,CAChE7Q,kBAGYwB,mBAIdzC,KAAKoT,UAAW,EAChBpT,KAAK4S,kBAAmB,EAExB5S,KAAK2c,WAAWtJ,OAEhBxa,SAASgD,KAAKhB,UAAUwR,IA5EJ,cA8EpBrM,KAAK4c,gBAEL5c,KAAKuc,UAAUjJ,MAAK,IAAMtT,KAAK6c,aAAa5b,KAC9C,CAEAoS,OACOrT,KAAKoT,WAAYpT,KAAK4S,mBAITnT,aAAa4C,QAAQrC,KAAK8G,SAAUkL,cAExCvP,mBAIdzC,KAAKoT,UAAW,EAChBpT,KAAK4S,kBAAmB,EACxB5S,KAAKyc,WAAWjB,aAEhBxb,KAAK8G,SAASjM,UAAUsJ,OAhGJ,QAkGpBnE,KAAKqH,gBAAe,IAAMrH,KAAK8c,cAAc9c,KAAK8G,SAAU9G,KAAKyR,gBACnE,CAEAxK,UACE,IAAK,MAAM8V,IAAe,CAACplB,OAAQqI,KAAKsc,SACtC7c,aAAaC,IAAIqd,EAxHJ,aA2Hf/c,KAAKuc,UAAUtV,UACfjH,KAAKyc,WAAWjB,aAChB3U,MAAMI,SACR,CAEA+V,eACEhd,KAAK4c,eACP,CAGAJ,sBACE,OAAO,IAAIpC,SAAS,CAClBlgB,UAAWmH,QAAQrB,KAAK+G,QAAQ0T,UAChCnT,WAAYtH,KAAKyR,eAErB,CAEAiL,uBACE,OAAO,IAAIxB,UAAU,CACnBD,YAAajb,KAAK8G,UAEtB,CAEA+V,aAAa5b,GAENpI,SAASgD,KAAKf,SAASkF,KAAK8G,WAC/BjO,SAASgD,KAAK8e,OAAO3a,KAAK8G,UAG5B9G,KAAK8G,SAAS8M,MAAMiC,QAAU,QAC9B7V,KAAK8G,SAAS/B,gBAAgB,eAC9B/E,KAAK8G,SAASjC,aAAa,cAAc,GACzC7E,KAAK8G,SAASjC,aAAa,OAAQ,UACnC7E,KAAK8G,SAASmW,UAAY,EAE1B,MAAMC,EAAYtV,eAAeG,QAxIT,cAwIsC/H,KAAKsc,SAC/DY,IACFA,EAAUD,UAAY,GAGxBxhB,OAAOuE,KAAK8G,UAEZ9G,KAAK8G,SAASjM,UAAUwR,IApJJ,QAiKpBrM,KAAKqH,gBAXsB,KACrBrH,KAAK+G,QAAQyP,OACfxW,KAAKyc,WAAWpB,WAGlBrb,KAAK4S,kBAAmB,EACxBnT,aAAa4C,QAAQrC,KAAK8G,SAAUiL,cAAa,CAC/C9Q,iBACA,GAGoCjB,KAAKsc,QAAStc,KAAKyR,cAC7D,CAEArC,qBACE3P,aAAamC,GAAG5B,KAAK8G,SAAUiV,yBAAuB1c,IACpD,GArLa,WAqLTA,EAAM6D,IAIV,OAAIlD,KAAK+G,QAAQyH,UACfnP,EAAM0D,sBACN/C,KAAKqT,aAIPrT,KAAKmd,4BAA4B,IAGnC1d,aAAamC,GAAGjK,OAAQikB,gBAAc,KAChC5b,KAAKoT,WAAapT,KAAK4S,kBACzB5S,KAAK4c,eACP,IAGFnd,aAAamC,GAAG5B,KAAK8G,SAAUgV,yBAAyBzc,IAEtDI,aAAaoC,IAAI7B,KAAK8G,SAAU+U,qBAAqBuB,IAC/Cpd,KAAK8G,WAAazH,EAAM3B,QAAUsC,KAAK8G,WAAasW,EAAO1f,SAIjC,WAA1BsC,KAAK+G,QAAQ0T,SAKbza,KAAK+G,QAAQ0T,UACfza,KAAKqT,OALLrT,KAAKmd,6BAMP,GACA,GAEN,CAEAL,aACE9c,KAAK8G,SAAS8M,MAAMiC,QAAU,OAC9B7V,KAAK8G,SAASjC,aAAa,eAAe,GAC1C7E,KAAK8G,SAAS/B,gBAAgB,cAC9B/E,KAAK8G,SAAS/B,gBAAgB,QAC9B/E,KAAK4S,kBAAmB,EAExB5S,KAAKuc,UAAUlJ,MAAK,KAClBxa,SAASgD,KAAKhB,UAAUsJ,OAtNN,cAuNlBnE,KAAKqd,oBACLrd,KAAK2c,WAAWxD,QAChB1Z,aAAa4C,QAAQrC,KAAK8G,SAAUmL,eAAa,GAErD,CAEAR,cACE,OAAOzR,KAAK8G,SAASjM,UAAUC,SA7NX,OA8NtB,CAEAqiB,6BAEE,GADkB1d,aAAa4C,QAAQrC,KAAK8G,SAAU6U,wBACxClZ,iBACZ,OAGF,MAAM6a,EAAqBtd,KAAK8G,SAASyW,aAAe1kB,SAASsC,gBAAgBqiB,aAC3EC,EAAmBzd,KAAK8G,SAAS8M,MAAM8J,UAEpB,WAArBD,GAAiCzd,KAAK8G,SAASjM,UAAUC,SAvOvC,kBA2OjBwiB,IACHtd,KAAK8G,SAAS8M,MAAM8J,UAAY,UAGlC1d,KAAK8G,SAASjM,UAAUwR,IA/OF,gBAgPtBrM,KAAKqH,gBAAe,KAClBrH,KAAK8G,SAASjM,UAAUsJ,OAjPJ,gBAkPpBnE,KAAKqH,gBAAe,KAClBrH,KAAK8G,SAAS8M,MAAM8J,UAAYD,CAAgB,GAC/Czd,KAAKsc,QAAQ,GACftc,KAAKsc,SAERtc,KAAK8G,SAAS0P,QAChB,CAMAoG,gBACE,MAAMU,EAAqBtd,KAAK8G,SAASyW,aAAe1kB,SAASsC,gBAAgBqiB,aAC3E/D,EAAiBzZ,KAAK2c,WAAWhE,WACjCgF,EAAoBlE,EAAiB,EAE3C,GAAIkE,IAAsBL,EAAoB,CAC5C,MAAMlX,EAAWhK,QAAU,cAAgB,eAC3C4D,KAAK8G,SAAS8M,MAAMxN,GAAa,GAAEqT,KACrC,CAEA,IAAKkE,GAAqBL,EAAoB,CAC5C,MAAMlX,EAAWhK,QAAU,eAAiB,cAC5C4D,KAAK8G,SAAS8M,MAAMxN,GAAa,GAAEqT,KACrC,CACF,CAEA4D,oBACErd,KAAK8G,SAAS8M,MAAMgK,YAAc,GAClC5d,KAAK8G,SAAS8M,MAAMiK,aAAe,EACrC,CAGAtW,uBAAuB1B,EAAQ5E,GAC7B,OAAOjB,KAAK+J,MAAK,WACf,MAAMC,EAAOqS,MAAM9S,oBAAoBvJ,KAAM6F,GAE7C,GAAsB,iBAAXA,EAAX,CAIA,QAA4B,IAAjBmE,EAAKnE,GACd,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,GAAQ5E,EANb,CAOF,GACF,EAOFxB,aAAamC,GAAG/I,SAAUwR,uBAAsBD,wBAAsB,SAAU/K,GAC9E,MAAM3B,EAASkK,eAAeoB,uBAAuBhJ,MAEjD,CAAC,IAAK,QAAQ2B,SAAS3B,KAAKsJ,UAC9BjK,EAAM0D,iBAGRtD,aAAaoC,IAAInE,EAAQoU,cAAYgM,IAC/BA,EAAUrb,kBAKdhD,aAAaoC,IAAInE,EAAQuU,gBAAc,KACjC/X,UAAU8F,OACZA,KAAKwW,OACP,GACA,IAIJ,MAAMuH,EAAcnW,eAAeG,QA5Tf,eA6ThBgW,GACF1B,MAAM7U,YAAYuW,GAAa1K,OAGpBgJ,MAAM9S,oBAAoB7L,GAElC6M,OAAOvK,KACd,IAEAkJ,qBAAqBmT,OAMrB/f,mBAAmB+f,OC9VnB,MAAM3f,OAAO,YACPsK,WAAW,eACXE,YAAa,gBACbgD,eAAe,YACfoD,sBAAuB,6BACvB4G,WAAa,SAEbvK,kBAAkB,OAClBqU,qBAAqB,UACrBC,kBAAoB,SACpBC,oBAAsB,qBACtBhC,cAAgB,kBAEhBpK,aAAc,oBACdC,cAAe,qBACfC,aAAc,oBACd2J,qBAAwB,6BACxB1J,eAAgB,sBAChB2J,aAAgB,sBAChBvR,uBAAwB,8BACxB0R,sBAAyB,+BAEzB3R,uBAAuB,+BAEvB3E,UAAU,CACdgV,UAAU,EACVjM,UAAU,EACV2P,QAAQ,GAGJzY,cAAc,CAClB+U,SAAU,mBACVjM,SAAU,UACV2P,OAAQ,WAOV,MAAMC,kBAAkBxX,cACtBV,YAAYlN,EAAS6M,GACnBgB,MAAM7N,EAAS6M,GAEf7F,KAAKoT,UAAW,EAChBpT,KAAKuc,UAAYvc,KAAKwc,sBACtBxc,KAAKyc,WAAazc,KAAK0c,uBACvB1c,KAAKoP,oBACP,CAGW3J,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGA6N,OAAOtJ,GACL,OAAOjB,KAAKoT,SAAWpT,KAAKqT,OAASrT,KAAKsT,KAAKrS,EACjD,CAEAqS,KAAKrS,GACCjB,KAAKoT,UAIS3T,aAAa4C,QAAQrC,KAAK8G,SAAUgL,aAAY,CAAE7Q,kBAEtDwB,mBAIdzC,KAAKoT,UAAW,EAChBpT,KAAKuc,UAAUjJ,OAEVtT,KAAK+G,QAAQoX,SAChB,IAAIzF,iBAAkBrF,OAGxBrT,KAAK8G,SAASjC,aAAa,cAAc,GACzC7E,KAAK8G,SAASjC,aAAa,OAAQ,UACnC7E,KAAK8G,SAASjM,UAAUwR,IAhFD,WA4FvBrM,KAAKqH,gBAVoB,KAClBrH,KAAK+G,QAAQoX,SAAUne,KAAK+G,QAAQ0T,UACvCza,KAAKyc,WAAWpB,WAGlBrb,KAAK8G,SAASjM,UAAUwR,IAxFN,QAyFlBrM,KAAK8G,SAASjM,UAAUsJ,OAxFH,WAyFrB1E,aAAa4C,QAAQrC,KAAK8G,SAAUiL,cAAa,CAAE9Q,iBAAgB,GAG/BjB,KAAK8G,UAAU,GACvD,CAEAuM,OACOrT,KAAKoT,WAIQ3T,aAAa4C,QAAQrC,KAAK8G,SAAUkL,cAExCvP,mBAIdzC,KAAKyc,WAAWjB,aAChBxb,KAAK8G,SAASuX,OACdre,KAAKoT,UAAW,EAChBpT,KAAK8G,SAASjM,UAAUwR,IA5GF,UA6GtBrM,KAAKuc,UAAUlJ,OAcfrT,KAAKqH,gBAZoB,KACvBrH,KAAK8G,SAASjM,UAAUsJ,OAlHN,OAEE,UAiHpBnE,KAAK8G,SAAS/B,gBAAgB,cAC9B/E,KAAK8G,SAAS/B,gBAAgB,QAEzB/E,KAAK+G,QAAQoX,SAChB,IAAIzF,iBAAkBS,QAGxB1Z,aAAa4C,QAAQrC,KAAK8G,SAAUmL,eAAa,GAGbjS,KAAK8G,UAAU,IACvD,CAEAG,UACEjH,KAAKuc,UAAUtV,UACfjH,KAAKyc,WAAWjB,aAChB3U,MAAMI,SACR,CAGAuV,sBACE,MAUMtiB,EAAYmH,QAAQrB,KAAK+G,QAAQ0T,UAEvC,OAAO,IAAIL,SAAS,CAClBH,UAAWiE,oBACXhkB,YACAoN,YAAY,EACZ6S,YAAana,KAAK8G,SAASrM,WAC3Byf,cAAehgB,EAjBK,KACU,WAA1B8F,KAAK+G,QAAQ0T,SAKjBza,KAAKqT,OAJH5T,aAAa4C,QAAQrC,KAAK8G,SAAU6U,qBAI3B,EAWgC,MAE/C,CAEAe,uBACE,OAAO,IAAIxB,UAAU,CACnBD,YAAajb,KAAK8G,UAEtB,CAEAsI,qBACE3P,aAAamC,GAAG5B,KAAK8G,SAAUiV,uBAAuB1c,IAtKvC,WAuKTA,EAAM6D,MAILlD,KAAK+G,QAAQyH,SAKlBxO,KAAKqT,OAJH5T,aAAa4C,QAAQrC,KAAK8G,SAAU6U,sBAI3B,GAEf,CAGApU,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAOoU,UAAU7U,oBAAoBvJ,KAAM6F,GAEjD,GAAsB,iBAAXA,EAAX,CAIA,QAAqBoE,IAAjBD,EAAKnE,IAAyBA,EAAO7D,WAAW,MAAmB,gBAAX6D,EAC1D,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,GAAQ7F,KANb,CAOF,GACF,EAOFP,aAAamC,GAAG/I,SAAUwR,uBAAsBD,wBAAsB,SAAU/K,GAC9E,MAAM3B,EAASkK,eAAeoB,uBAAuBhJ,MAMrD,GAJI,CAAC,IAAK,QAAQ2B,SAAS3B,KAAKsJ,UAC9BjK,EAAM0D,iBAGJrI,WAAWsF,MACb,OAGFP,aAAaoC,IAAInE,EAAQuU,gBAAc,KAEjC/X,UAAU8F,OACZA,KAAKwW,OACP,IAIF,MAAMuH,EAAcnW,eAAeG,QAAQmU,eACvC6B,GAAeA,IAAgBrgB,GACjC0gB,UAAU5W,YAAYuW,GAAa1K,OAGxB+K,UAAU7U,oBAAoB7L,GACtC6M,OAAOvK,KACd,IAEAP,aAAamC,GAAGjK,OAAQ2V,uBAAqB,KAC3C,IAAK,MAAM5V,KAAYkQ,eAAerH,KAAK2b,eACzCkC,UAAU7U,oBAAoB7R,GAAU4b,MAC1C,IAGF7T,aAAamC,GAAGjK,OAAQikB,cAAc,KACpC,IAAK,MAAM5iB,KAAW4O,eAAerH,KAAK,gDACG,UAAvCpH,iBAAiBH,GAASslB,UAC5BF,UAAU7U,oBAAoBvQ,GAASqa,MAE3C,IAGFnK,qBAAqBkV,WAMrB9hB,mBAAmB8hB,WChRnB,MAAMG,cAAgB,IAAIvf,IAAI,CAC5B,aACA,OACA,OACA,WACA,WACA,SACA,MACA,eAGIwf,uBAAyB,iBAOzBC,iBAAmB,iEAOnBC,iBAAmB,qIAEnBC,iBAAmB,CAACC,EAAWC,KACnC,MAAMC,EAAgBF,EAAUG,SAASxmB,cAEzC,OAAIsmB,EAAqBld,SAASmd,IAC5BP,cAAczd,IAAIge,IACbzd,QAAQod,iBAAiBjY,KAAKoY,EAAUI,YAAcN,iBAAiBlY,KAAKoY,EAAUI,YAO1FH,EAAqBzZ,QAAO6Z,GAAkBA,aAA0B1Y,SAC5E2Y,MAAKC,GAASA,EAAM3Y,KAAKsY,IAAe,EAGhCM,iBAAmB,CAE9B,IAAK,CAAC,QAAS,MAAO,KAAM,OAAQ,OAAQZ,wBAC5Ca,EAAG,CAAC,SAAU,OAAQ,QAAS,OAC/BC,KAAM,GACNC,EAAG,GACHC,GAAI,GACJC,IAAK,GACLC,KAAM,GACNC,IAAK,GACLC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,EAAG,GACH7P,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,UAChD8P,GAAI,GACJC,GAAI,GACJC,EAAG,GACHC,IAAK,GACLC,EAAG,GACHC,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,IAAK,GACLC,OAAQ,GACRC,EAAG,GACHC,GAAI,IAGC,SAASC,aAAaC,EAAYC,EAAWC,GAClD,IAAKF,EAAWlnB,OACd,OAAOknB,EAGT,GAAIE,GAAgD,mBAArBA,EAC7B,OAAOA,EAAiBF,GAG1B,MACMG,GADY,IAAI1pB,OAAO2pB,WACKC,gBAAgBL,EAAY,aACxDzF,EAAW,GAAG5T,UAAUwZ,EAAgBxlB,KAAKkE,iBAAiB,MAEpE,IAAK,MAAM/G,KAAWyiB,EAAU,CAC9B,MAAM+F,EAAcxoB,EAAQ+lB,SAASxmB,cAErC,IAAKJ,OAAO+J,KAAKif,GAAWxf,SAAS6f,GAAc,CACjDxoB,EAAQmL,SAER,QACF,CAEA,MAAMsd,EAAgB,GAAG5Z,UAAU7O,EAAQiM,YACrCyc,EAAoB,GAAG7Z,OAAOsZ,EAAU,MAAQ,GAAIA,EAAUK,IAAgB,IAEpF,IAAK,MAAM5C,KAAa6C,EACjB9C,iBAAiBC,EAAW8C,IAC/B1oB,EAAQ+L,gBAAgB6Z,EAAUG,SAGxC,CAEA,OAAOsC,EAAgBxlB,KAAK8lB,SAC9B,CCrGA,MAAMjlB,OAAO,kBAEP+I,UAAU,CACd0b,UAAW/B,iBACXwC,QAAS,GACTC,WAAY,GACZC,MAAM,EACNC,UAAU,EACVC,WAAY,KACZC,SAAU,eAGNvc,cAAc,CAClByb,UAAW,SACXS,QAAS,SACTC,WAAY,oBACZC,KAAM,UACNC,SAAU,UACVC,WAAY,kBACZC,SAAU,UAGNC,mBAAqB,CACzBC,MAAO,iCACPzqB,SAAU,oBAOZ,MAAM0qB,wBAAwB5c,OAC5BU,YAAYL,GACVgB,QACA7G,KAAK+G,QAAU/G,KAAK4F,WAAWC,EACjC,CAGWJ,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGA2lB,aACE,OAAOlqB,OAAOmI,OAAON,KAAK+G,QAAQ6a,SAC/BhZ,KAAI/C,GAAU7F,KAAKsiB,yBAAyBzc,KAC5CT,OAAO/D,QACZ,CAEAkhB,aACE,OAAOviB,KAAKqiB,aAAaroB,OAAS,CACpC,CAEAwoB,cAAcZ,GAGZ,OAFA5hB,KAAKyiB,cAAcb,GACnB5hB,KAAK+G,QAAQ6a,QAAU,IAAK5hB,KAAK+G,QAAQ6a,WAAYA,GAC9C5hB,IACT,CAEA0iB,SACE,MAAMC,EAAkB9pB,SAAS6hB,cAAc,OAC/CiI,EAAgBhB,UAAY3hB,KAAK4iB,eAAe5iB,KAAK+G,QAAQkb,UAE7D,IAAK,MAAOvqB,EAAUmrB,KAAS1qB,OAAOuJ,QAAQ1B,KAAK+G,QAAQ6a,SACzD5hB,KAAK8iB,YAAYH,EAAiBE,EAAMnrB,GAG1C,MAAMuqB,EAAWU,EAAgB3a,SAAS,GACpC6Z,EAAa7hB,KAAKsiB,yBAAyBtiB,KAAK+G,QAAQ8a,YAM9D,OAJIA,GACFI,EAASpnB,UAAUwR,OAAOwV,EAAWroB,MAAM,MAGtCyoB,CACT,CAGAjc,iBAAiBH,GACfgB,MAAMb,iBAAiBH,GACvB7F,KAAKyiB,cAAc5c,EAAO+b,QAC5B,CAEAa,cAAcM,GACZ,IAAK,MAAOrrB,EAAUkqB,KAAYzpB,OAAOuJ,QAAQqhB,GAC/Clc,MAAMb,iBAAiB,CAAEtO,WAAUyqB,MAAOP,GAAWM,mBAEzD,CAEAY,YAAYb,EAAUL,EAASlqB,GAC7B,MAAMsrB,EAAkBpb,eAAeG,QAAQrQ,EAAUuqB,GAEpDe,KAILpB,EAAU5hB,KAAKsiB,yBAAyBV,IAOpChoB,UAAUgoB,GACZ5hB,KAAKijB,sBAAsBlpB,WAAW6nB,GAAUoB,GAI9ChjB,KAAK+G,QAAQ+a,KACfkB,EAAgBrB,UAAY3hB,KAAK4iB,eAAehB,GAIlDoB,EAAgBE,YAActB,EAd5BoB,EAAgB7e,SAepB,CAEAye,eAAeG,GACb,OAAO/iB,KAAK+G,QAAQgb,SAAWd,aAAa8B,EAAK/iB,KAAK+G,QAAQoa,UAAWnhB,KAAK+G,QAAQib,YAAce,CACtG,CAEAT,yBAAyBS,GACvB,OAAO/lB,QAAQ+lB,EAAK,CAAC/iB,MACvB,CAEAijB,sBAAsBjqB,EAASgqB,GAC7B,GAAIhjB,KAAK+G,QAAQ+a,KAGf,OAFAkB,EAAgBrB,UAAY,QAC5BqB,EAAgBrI,OAAO3hB,GAIzBgqB,EAAgBE,YAAclqB,EAAQkqB,WACxC,ECzIF,MAAMxmB,OAAO,UACPymB,sBAAwB,IAAInkB,IAAI,CAAC,WAAY,YAAa,eAE1D0K,kBAAkB,OAClB0Z,iBAAmB,QACnBzZ,kBAAkB,OAElB0Z,uBAAyB,iBACzBC,eAAkB,SAElBC,iBAAmB,gBAEnBC,cAAgB,QAChBC,cAAgB,QAChBC,cAAgB,QAChBC,eAAiB,SAEjB3R,aAAa,OACbC,eAAe,SACfH,aAAa,OACbC,cAAc,QACd6R,eAAiB,WACjBC,cAAc,QACdjJ,gBAAgB,UAChBkJ,iBAAiB,WACjB3W,iBAAmB,aACnBC,iBAAmB,aAEnB2W,cAAgB,CACpBC,KAAM,OACNC,IAAK,MACLC,MAAO9nB,QAAU,OAAS,QAC1B+nB,OAAQ,SACRC,KAAMhoB,QAAU,QAAU,QAGtBqJ,UAAU,CACd0b,UAAW/B,iBACXiF,WAAW,EACXzO,SAAU,kBACV0O,WAAW,EACXC,YAAa,GACbC,MAAO,EACPC,mBAAoB,CAAC,MAAO,QAAS,SAAU,QAC/C3C,MAAM,EACNhM,OAAQ,CAAC,EAAG,GACZwB,UAAW,MACXvB,aAAc,KACdgM,UAAU,EACVC,WAAY,KACZtqB,UAAU,EACVuqB,SAAU,+GAIVyC,MAAO,GACPriB,QAAS,eAGLqD,cAAc,CAClByb,UAAW,SACXkD,UAAW,UACXzO,SAAU,mBACV0O,UAAW,2BACXC,YAAa,oBACbC,MAAO,kBACPC,mBAAoB,QACpB3C,KAAM,UACNhM,OAAQ,0BACRwB,UAAW,oBACXvB,aAAc,yBACdgM,SAAU,UACVC,WAAY,kBACZtqB,SAAU,mBACVuqB,SAAU,SACVyC,MAAO,4BACPriB,QAAS,UAOX,MAAMsiB,gBAAgB/d,cACpBV,YAAYlN,EAAS6M,GACnB,QAAsB,IAAX+Q,OACT,MAAM,IAAInQ,UAAU,+DAGtBI,MAAM7N,EAAS6M,GAGf7F,KAAK4kB,YAAa,EAClB5kB,KAAK6kB,SAAW,EAChB7kB,KAAK8kB,WAAa,KAClB9kB,KAAK+kB,eAAiB,GACtB/kB,KAAKkW,QAAU,KACflW,KAAKglB,iBAAmB,KACxBhlB,KAAKilB,YAAc,KAGnBjlB,KAAKklB,IAAM,KAEXllB,KAAKmlB,gBAEAnlB,KAAK+G,QAAQrP,UAChBsI,KAAKolB,WAET,CAGW3f,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGA2oB,SACErlB,KAAK4kB,YAAa,CACpB,CAEAU,UACEtlB,KAAK4kB,YAAa,CACpB,CAEAW,gBACEvlB,KAAK4kB,YAAc5kB,KAAK4kB,UAC1B,CAEAra,SACOvK,KAAK4kB,aAIV5kB,KAAK+kB,eAAeS,OAASxlB,KAAK+kB,eAAeS,MAC7CxlB,KAAKoT,WACPpT,KAAKylB,SAIPzlB,KAAK0lB,SACP,CAEAze,UACEyJ,aAAa1Q,KAAK6kB,UAElBplB,aAAaC,IAAIM,KAAK8G,SAASvM,QAjJX,UAEC,gBA+IqDyF,KAAK2lB,mBAE3E3lB,KAAK8G,SAAS7L,aAAa,2BAC7B+E,KAAK8G,SAASjC,aAAa,QAAS7E,KAAK8G,SAAS7L,aAAa,2BAGjE+E,KAAK4lB,iBACL/e,MAAMI,SACR,CAEAqM,OACE,GAAoC,SAAhCtT,KAAK8G,SAAS8M,MAAMiC,QACtB,MAAM,IAAIlQ,MAAM,uCAGlB,IAAM3F,KAAK6lB,mBAAoB7lB,KAAK4kB,WAClC,OAGF,MAAM9G,EAAYre,aAAa4C,QAAQrC,KAAK8G,SAAU9G,KAAKkG,YAAYkL,UAzJxD,SA2JT0U,GADa5qB,eAAe8E,KAAK8G,WACL9G,KAAK8G,SAASif,cAAc5qB,iBAAiBL,SAASkF,KAAK8G,UAE7F,GAAIgX,EAAUrb,mBAAqBqjB,EACjC,OAIF9lB,KAAK4lB,iBAEL,MAAMV,EAAMllB,KAAKgmB,iBAEjBhmB,KAAK8G,SAASjC,aAAa,mBAAoBqgB,EAAIjqB,aAAa,OAEhE,MAAMqpB,UAAEA,GAActkB,KAAK+G,QAe3B,GAbK/G,KAAK8G,SAASif,cAAc5qB,gBAAgBL,SAASkF,KAAKklB,OAC7DZ,EAAU3J,OAAOuK,GACjBzlB,aAAa4C,QAAQrC,KAAK8G,SAAU9G,KAAKkG,YAAYkL,UA1KpC,cA6KnBpR,KAAKkW,QAAUlW,KAAKuW,cAAc2O,GAElCA,EAAIrqB,UAAUwR,IA/LM,QAqMhB,iBAAkBxT,SAASsC,gBAC7B,IAAK,MAAMnC,IAAW,GAAG6O,UAAUhP,SAASgD,KAAKmM,UAC/CvI,aAAamC,GAAG5I,EAAS,YAAawC,MAc1CwE,KAAKqH,gBAVY,KACf5H,aAAa4C,QAAQrC,KAAK8G,SAAU9G,KAAKkG,YAAYkL,UA7LvC,WA+LU,IAApBpR,KAAK8kB,YACP9kB,KAAKylB,SAGPzlB,KAAK8kB,YAAa,CAAK,GAGK9kB,KAAKklB,IAAKllB,KAAKyR,cAC/C,CAEA4B,OACE,GAAKrT,KAAKoT,aAIQ3T,aAAa4C,QAAQrC,KAAK8G,SAAU9G,KAAKkG,YAAYkL,UAjNxD,SAkND3O,iBAAd,CASA,GALYzC,KAAKgmB,iBACbnrB,UAAUsJ,OAnOM,QAuOhB,iBAAkBtL,SAASsC,gBAC7B,IAAK,MAAMnC,IAAW,GAAG6O,UAAUhP,SAASgD,KAAKmM,UAC/CvI,aAAaC,IAAI1G,EAAS,YAAawC,MAI3CwE,KAAK+kB,eAA4B,OAAI,EACrC/kB,KAAK+kB,eAA4B,OAAI,EACrC/kB,KAAK+kB,eAA4B,OAAI,EACrC/kB,KAAK8kB,WAAa,KAelB9kB,KAAKqH,gBAbY,KACXrH,KAAKimB,yBAIJjmB,KAAK8kB,YACR9kB,KAAK4lB,iBAGP5lB,KAAK8G,SAAS/B,gBAAgB,oBAC9BtF,aAAa4C,QAAQrC,KAAK8G,SAAU9G,KAAKkG,YAAYkL,UA/OtC,WA+O8D,GAGjDpR,KAAKklB,IAAKllB,KAAKyR,cA/B7C,CAgCF,CAEAkF,SACM3W,KAAKkW,SACPlW,KAAKkW,QAAQS,QAEjB,CAGAkP,iBACE,OAAOxkB,QAAQrB,KAAKkmB,YACtB,CAEAF,iBAKE,OAJKhmB,KAAKklB,MACRllB,KAAKklB,IAAMllB,KAAKmmB,kBAAkBnmB,KAAKilB,aAAejlB,KAAKomB,2BAGtDpmB,KAAKklB,GACd,CAEAiB,kBAAkBvE,GAChB,MAAMsD,EAAMllB,KAAKqmB,oBAAoBzE,GAASc,SAG9C,IAAKwC,EACH,OAAO,KAGTA,EAAIrqB,UAAUsJ,OA/RM,OAEA,QA+RpB+gB,EAAIrqB,UAAUwR,IAAK,MAAKrM,KAAKkG,YAAYxJ,aAEzC,MAAM4pB,EAAQ9tB,OAAOwH,KAAKkG,YAAYxJ,MAAMrE,WAQ5C,OANA6sB,EAAIrgB,aAAa,KAAMyhB,GAEnBtmB,KAAKyR,eACPyT,EAAIrqB,UAAUwR,IAxSI,QA2Sb6Y,CACT,CAEAqB,WAAW3E,GACT5hB,KAAKilB,YAAcrD,EACf5hB,KAAKoT,aACPpT,KAAK4lB,iBACL5lB,KAAKsT,OAET,CAEA+S,oBAAoBzE,GAalB,OAZI5hB,KAAKglB,iBACPhlB,KAAKglB,iBAAiBxC,cAAcZ,GAEpC5hB,KAAKglB,iBAAmB,IAAI5C,gBAAgB,IACvCpiB,KAAK+G,QAGR6a,UACAC,WAAY7hB,KAAKsiB,yBAAyBtiB,KAAK+G,QAAQwd,eAIpDvkB,KAAKglB,gBACd,CAEAoB,yBACE,MAAO,CACL,iBAA0BpmB,KAAKkmB,YAEnC,CAEAA,YACE,OAAOlmB,KAAKsiB,yBAAyBtiB,KAAK+G,QAAQ2d,QAAU1kB,KAAK8G,SAAS7L,aAAa,yBACzF,CAGAurB,6BAA6BnnB,GAC3B,OAAOW,KAAKkG,YAAYqD,oBAAoBlK,EAAME,eAAgBS,KAAKymB,qBACzE,CAEAhV,cACE,OAAOzR,KAAK+G,QAAQsd,WAAcrkB,KAAKklB,KAAOllB,KAAKklB,IAAIrqB,UAAUC,SAtV7C,OAuVtB,CAEAsY,WACE,OAAOpT,KAAKklB,KAAOllB,KAAKklB,IAAIrqB,UAAUC,SAxVlB,OAyVtB,CAEAyb,cAAc2O,GACZ,MAAM5N,EAAYta,QAAQgD,KAAK+G,QAAQuQ,UAAW,CAACtX,KAAMklB,EAAKllB,KAAK8G,WAC7D4f,EAAa3C,cAAczM,EAAU5Q,eAC3C,OAAOkQ,OAAOG,aAAa/W,KAAK8G,SAAUoe,EAAKllB,KAAK8W,iBAAiB4P,GACvE,CAEAvP,aACE,MAAMrB,OAAEA,GAAW9V,KAAK+G,QAExB,MAAsB,iBAAX+O,EACFA,EAAOtc,MAAM,KAAKoP,KAAIzF,GAAS9J,OAAO0X,SAAS5N,EAAO,MAGzC,mBAAX2S,EACFsB,GAActB,EAAOsB,EAAYpX,KAAK8G,UAGxCgP,CACT,CAEAwM,yBAAyBS,GACvB,OAAO/lB,QAAQ+lB,EAAK,CAAC/iB,KAAK8G,UAC5B,CAEAgQ,iBAAiB4P,GACf,MAAMrP,EAAwB,CAC5BC,UAAWoP,EACXnP,UAAW,CACT,CACE9a,KAAM,OACN+a,QAAS,CACPiN,mBAAoBzkB,KAAK+G,QAAQ0d,qBAGrC,CACEhoB,KAAM,SACN+a,QAAS,CACP1B,OAAQ9V,KAAKmX,eAGjB,CACE1a,KAAM,kBACN+a,QAAS,CACP5B,SAAU5V,KAAK+G,QAAQ6O,WAG3B,CACEnZ,KAAM,QACN+a,QAAS,CACPxe,QAAU,IAAGgH,KAAKkG,YAAYxJ,eAGlC,CACED,KAAM,kBACNgb,SAAS,EACTkP,MAAO,aACP/pB,GAAIoN,IAGFhK,KAAKgmB,iBAAiBnhB,aAAa,wBAAyBmF,EAAK4c,MAAMtP,UAAU,KAMzF,MAAO,IACFD,KACAra,QAAQgD,KAAK+G,QAAQgP,aAAc,CAACsB,IAE3C,CAEA8N,gBACE,MAAM0B,EAAW7mB,KAAK+G,QAAQ1E,QAAQ7I,MAAM,KAE5C,IAAK,MAAM6I,KAAWwkB,EACpB,GAAgB,UAAZxkB,EACF5C,aAAamC,GAAG5B,KAAK8G,SAAU9G,KAAKkG,YAAYkL,UAtZpC,SAsZ4DpR,KAAK+G,QAAQrP,UAAU2H,IAC7EW,KAAKwmB,6BAA6BnnB,GAC1CkL,QAAQ,SAEb,GAjaU,WAiaNlI,EAA4B,CACrC,MAAMykB,EAraQ,UAqaEzkB,EACdrC,KAAKkG,YAAYkL,UAzZF,cA0ZfpR,KAAKkG,YAAYkL,UA5ZL,WA6ZR2V,EAxaQ,UAwaG1kB,EACfrC,KAAKkG,YAAYkL,UA3ZF,cA4ZfpR,KAAKkG,YAAYkL,UA9ZJ,YAgaf3R,aAAamC,GAAG5B,KAAK8G,SAAUggB,EAAS9mB,KAAK+G,QAAQrP,UAAU2H,IAC7D,MAAMuY,EAAU5X,KAAKwmB,6BAA6BnnB,GAClDuY,EAAQmN,eAA8B,YAAf1lB,EAAMM,KA7ajB,QADA,UA8auE,EACnFiY,EAAQ8N,QAAQ,IAElBjmB,aAAamC,GAAG5B,KAAK8G,SAAUigB,EAAU/mB,KAAK+G,QAAQrP,UAAU2H,IAC9D,MAAMuY,EAAU5X,KAAKwmB,6BAA6BnnB,GAClDuY,EAAQmN,eAA8B,aAAf1lB,EAAMM,KAlbjB,QADA,SAobViY,EAAQ9Q,SAAShM,SAASuE,EAAM4B,eAElC2W,EAAQ6N,QAAQ,GAEpB,CAGFzlB,KAAK2lB,kBAAoB,KACnB3lB,KAAK8G,UACP9G,KAAKqT,MACP,EAGF5T,aAAamC,GAAG5B,KAAK8G,SAASvM,QArcV,UAEC,gBAmcoDyF,KAAK2lB,kBAChF,CAEAP,YACE,MAAMV,EAAQ1kB,KAAK8G,SAAS7L,aAAa,SAEpCypB,IAIA1kB,KAAK8G,SAAS7L,aAAa,eAAkB+E,KAAK8G,SAASoc,YAAYvb,QAC1E3H,KAAK8G,SAASjC,aAAa,aAAc6f,GAG3C1kB,KAAK8G,SAASjC,aAAa,yBAA0B6f,GACrD1kB,KAAK8G,SAAS/B,gBAAgB,SAChC,CAEA2gB,SACM1lB,KAAKoT,YAAcpT,KAAK8kB,WAC1B9kB,KAAK8kB,YAAa,GAIpB9kB,KAAK8kB,YAAa,EAElB9kB,KAAKgnB,aAAY,KACXhnB,KAAK8kB,YACP9kB,KAAKsT,MACP,GACCtT,KAAK+G,QAAQyd,MAAMlR,MACxB,CAEAmS,SACMzlB,KAAKimB,yBAITjmB,KAAK8kB,YAAa,EAElB9kB,KAAKgnB,aAAY,KACVhnB,KAAK8kB,YACR9kB,KAAKqT,MACP,GACCrT,KAAK+G,QAAQyd,MAAMnR,MACxB,CAEA2T,YAAYvpB,EAASwpB,GACnBvW,aAAa1Q,KAAK6kB,UAClB7kB,KAAK6kB,SAAWjnB,WAAWH,EAASwpB,EACtC,CAEAhB,uBACE,OAAO9tB,OAAOmI,OAAON,KAAK+kB,gBAAgBpjB,UAAS,EACrD,CAEAiE,WAAWC,GACT,MAAMqhB,EAAiBviB,YAAYK,kBAAkBhF,KAAK8G,UAE1D,IAAK,MAAMqgB,KAAiBhvB,OAAO+J,KAAKglB,GAClC/D,sBAAsBriB,IAAIqmB,WACrBD,EAAeC,GAW1B,OAPAthB,EAAS,IACJqhB,KACmB,iBAAXrhB,GAAuBA,EAASA,EAAS,IAEtDA,EAAS7F,KAAK8F,gBAAgBD,GAC9BA,EAAS7F,KAAK+F,kBAAkBF,GAChC7F,KAAKgG,iBAAiBH,GACfA,CACT,CAEAE,kBAAkBF,GAkBhB,OAjBAA,EAAOye,WAAiC,IAArBze,EAAOye,UAAsBzrB,SAASgD,KAAO9B,WAAW8L,EAAOye,WAEtD,iBAAjBze,EAAO2e,QAChB3e,EAAO2e,MAAQ,CACblR,KAAMzN,EAAO2e,MACbnR,KAAMxN,EAAO2e,QAIW,iBAAjB3e,EAAO6e,QAChB7e,EAAO6e,MAAQ7e,EAAO6e,MAAMrsB,YAGA,iBAAnBwN,EAAO+b,UAChB/b,EAAO+b,QAAU/b,EAAO+b,QAAQvpB,YAG3BwN,CACT,CAEA4gB,qBACE,MAAM5gB,EAAS,GAEf,IAAK,MAAO3C,EAAKC,KAAUhL,OAAOuJ,QAAQ1B,KAAK+G,SACzC/G,KAAKkG,YAAYT,QAAQvC,KAASC,IACpC0C,EAAO3C,GAAOC,GAUlB,OANA0C,EAAOnO,UAAW,EAClBmO,EAAOxD,QAAU,SAKVwD,CACT,CAEA+f,iBACM5lB,KAAKkW,UACPlW,KAAKkW,QAAQQ,UACb1W,KAAKkW,QAAU,MAGblW,KAAKklB,MACPllB,KAAKklB,IAAI/gB,SACTnE,KAAKklB,IAAM,KAEf,CAGA3d,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAO2a,QAAQpb,oBAAoBvJ,KAAM6F,GAE/C,GAAsB,iBAAXA,EAAX,CAIA,QAA4B,IAAjBmE,EAAKnE,GACd,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,IANL,CAOF,GACF,EAOFvJ,mBAAmBqoB,SCtmBnB,MAAMjoB,OAAO,UAEP0qB,eAAiB,kBACjBC,iBAAmB,gBAEnB5hB,UAAU,IACXkf,QAAQlf,QACXmc,QAAS,GACT9L,OAAQ,CAAC,EAAG,GACZwB,UAAW,QACX2K,SAAU,8IAKV5f,QAAS,SAGLqD,cAAc,IACfif,QAAQjf,YACXkc,QAAS,kCAOX,MAAM0F,gBAAgB3C,QAETlf,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGAmpB,iBACE,OAAO7lB,KAAKkmB,aAAelmB,KAAKunB,aAClC,CAGAnB,yBACE,MAAO,CACLgB,CAACA,gBAAiBpnB,KAAKkmB,YACvB,gBAAoBlmB,KAAKunB,cAE7B,CAEAA,cACE,OAAOvnB,KAAKsiB,yBAAyBtiB,KAAK+G,QAAQ6a,QACpD,CAGAra,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAOsd,QAAQ/d,oBAAoBvJ,KAAM6F,GAE/C,GAAsB,iBAAXA,EAAX,CAIA,QAA4B,IAAjBmE,EAAKnE,GACd,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,IANL,CAOF,GACF,EAOFvJ,mBAAmBgrB,SC9EnB,MAAM5qB,OAAO,YACPsK,WAAW,eACXE,YAAa,gBACbgD,aAAe,YAEfsd,eAAkB,wBAClB3D,YAAe,qBACfvW,sBAAuB,6BAEvBma,yBAA2B,gBAC3Btd,oBAAoB,SAEpBud,kBAAoB,yBACpBC,sBAAwB,SACxBC,wBAA0B,oBAC1BC,mBAAqB,YACrBC,mBAAqB,YACrBC,oBAAsB,mBACtBC,oBAAuB,qDACvBC,kBAAoB,YACpBC,2BAA2B,mBAE3BziB,UAAU,CACdqQ,OAAQ,KACRqS,WAAY,eACZC,cAAc,EACd1qB,OAAQ,KACR2qB,UAAW,CAAC,GAAK,GAAK,IAGlB3iB,cAAc,CAClBoQ,OAAQ,gBACRqS,WAAY,SACZC,aAAc,UACd1qB,OAAQ,UACR2qB,UAAW,SAOb,MAAMC,kBAAkB1hB,cACtBV,YAAYlN,EAAS6M,GACnBgB,MAAM7N,EAAS6M,GAGf7F,KAAKuoB,aAAe,IAAI9kB,IACxBzD,KAAKwoB,oBAAsB,IAAI/kB,IAC/BzD,KAAKyoB,aAA6D,YAA9CtvB,iBAAiB6G,KAAK8G,UAAU4W,UAA0B,KAAO1d,KAAK8G,SAC1F9G,KAAK0oB,cAAgB,KACrB1oB,KAAK2oB,UAAY,KACjB3oB,KAAK4oB,oBAAsB,CACzBC,gBAAiB,EACjBC,gBAAiB,GAEnB9oB,KAAK+oB,SACP,CAGWtjB,qBACT,OAAOA,SACT,CAEWC,yBACT,OAAOA,aACT,CAEWhJ,kBACT,OAAOA,MACT,CAGAqsB,UACE/oB,KAAKgpB,mCACLhpB,KAAKipB,2BAEDjpB,KAAK2oB,UACP3oB,KAAK2oB,UAAUO,aAEflpB,KAAK2oB,UAAY3oB,KAAKmpB,kBAGxB,IAAK,MAAMC,KAAWppB,KAAKwoB,oBAAoBloB,SAC7CN,KAAK2oB,UAAUU,QAAQD,EAE3B,CAEAniB,UACEjH,KAAK2oB,UAAUO,aACfriB,MAAMI,SACR,CAGAlB,kBAAkBF,GAWhB,OATAA,EAAOnI,OAAS3D,WAAW8L,EAAOnI,SAAW7E,SAASgD,KAGtDgK,EAAOsiB,WAAatiB,EAAOiQ,OAAU,GAAEjQ,EAAOiQ,oBAAsBjQ,EAAOsiB,WAE3C,iBAArBtiB,EAAOwiB,YAChBxiB,EAAOwiB,UAAYxiB,EAAOwiB,UAAU7uB,MAAM,KAAKoP,KAAIzF,GAAS9J,OAAOC,WAAW6J,MAGzE0C,CACT,CAEAojB,2BACOjpB,KAAK+G,QAAQqhB,eAKlB3oB,aAAaC,IAAIM,KAAK+G,QAAQrJ,OAAQmmB,aAEtCpkB,aAAamC,GAAG5B,KAAK+G,QAAQrJ,OAAQmmB,YAvGX,UAuG+CxkB,IACvE,MAAMiqB,EAAoBtpB,KAAKwoB,oBAAoBjlB,IAAIlE,EAAM3B,OAAO6rB,MACpE,GAAID,EAAmB,CACrBjqB,EAAM0D,iBACN,MAAMzH,EAAO0E,KAAKyoB,cAAgB9wB,OAC5B6xB,EAASF,EAAkBG,UAAYzpB,KAAK8G,SAAS2iB,UAC3D,GAAInuB,EAAKouB,SAEP,YADApuB,EAAKouB,SAAS,CAAEC,IAAKH,EAAQI,SAAU,WAKzCtuB,EAAK2hB,UAAYuM,CACnB,KAEJ,CAEAL,kBACE,MAAM3R,EAAU,CACdlc,KAAM0E,KAAKyoB,aACXJ,UAAWroB,KAAK+G,QAAQshB,UACxBF,WAAYnoB,KAAK+G,QAAQohB,YAG3B,OAAO,IAAI0B,sBAAqBnoB,GAAW1B,KAAK8pB,kBAAkBpoB,IAAU8V,EAC9E,CAGAsS,kBAAkBpoB,GAChB,MAAMqoB,EAAgB5H,GAASniB,KAAKuoB,aAAahlB,IAAK,IAAG4e,EAAMzkB,OAAO1F,MAChEqjB,EAAW8G,IACfniB,KAAK4oB,oBAAoBC,gBAAkB1G,EAAMzkB,OAAO+rB,UACxDzpB,KAAKgqB,SAASD,EAAc5H,GAAO,EAG/B2G,GAAmB9oB,KAAKyoB,cAAgB5vB,SAASsC,iBAAiB8hB,UAClEgN,EAAkBnB,GAAmB9oB,KAAK4oB,oBAAoBE,gBACpE9oB,KAAK4oB,oBAAoBE,gBAAkBA,EAE3C,IAAK,MAAM3G,KAASzgB,EAAS,CAC3B,IAAKygB,EAAM+H,eAAgB,CACzBlqB,KAAK0oB,cAAgB,KACrB1oB,KAAKmqB,kBAAkBJ,EAAc5H,IAErC,QACF,CAEA,MAAMiI,EAA2BjI,EAAMzkB,OAAO+rB,WAAazpB,KAAK4oB,oBAAoBC,gBAEpF,GAAIoB,GAAmBG,GAGrB,GAFA/O,EAAS8G,IAEJ2G,EACH,YAOCmB,GAAoBG,GACvB/O,EAAS8G,EAEb,CACF,CAEA6G,mCACEhpB,KAAKuoB,aAAe,IAAI9kB,IACxBzD,KAAKwoB,oBAAsB,IAAI/kB,IAE/B,MAAM4mB,EAAcziB,eAAerH,KA7KT,SA6KqCP,KAAK+G,QAAQrJ,QAE5E,IAAK,MAAM4sB,KAAUD,EAAa,CAEhC,IAAKC,EAAOf,MAAQ7uB,WAAW4vB,GAC7B,SAGF,MAAMhB,EAAoB1hB,eAAeG,QAAQuiB,EAAOf,KAAMvpB,KAAK8G,UAG/D5M,UAAUovB,KACZtpB,KAAKuoB,aAAa5kB,IAAI2mB,EAAOf,KAAMe,GACnCtqB,KAAKwoB,oBAAoB7kB,IAAI2mB,EAAOf,KAAMD,GAE9C,CACF,CAEAU,SAAStsB,GACHsC,KAAK0oB,gBAAkBhrB,IAI3BsC,KAAKmqB,kBAAkBnqB,KAAK+G,QAAQrJ,QACpCsC,KAAK0oB,cAAgBhrB,EACrBA,EAAO7C,UAAUwR,IAzMK,UA0MtBrM,KAAKuqB,iBAAiB7sB,GAEtB+B,aAAa4C,QAAQrC,KAAK8G,SAAU0gB,eAAgB,CAAEvmB,cAAevD,IACvE,CAEA6sB,iBAAiB7sB,GAEf,GAAIA,EAAO7C,UAAUC,SAlNQ,iBAmN3B8M,eAAeG,QAxMY,mBAwMsBrK,EAAOnD,QAzMpC,cA0MjBM,UAAUwR,IAnNO,eAuNtB,IAAK,MAAMme,KAAa5iB,eAAeO,QAAQzK,EAnNnB,qBAsN1B,IAAK,MAAM+sB,KAAQ7iB,eAAeS,KAAKmiB,EAAWxC,qBAChDyC,EAAK5vB,UAAUwR,IA3NG,SA8NxB,CAEA8d,kBAAkBzX,GAChBA,EAAO7X,UAAUsJ,OAjOK,UAmOtB,MAAMumB,EAAc9iB,eAAerH,KAAM,gBAAgDmS,GACzF,IAAK,MAAMiY,KAAQD,EACjBC,EAAK9vB,UAAUsJ,OArOK,SAuOxB,CAGAoD,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAOse,UAAU/e,oBAAoBvJ,KAAM6F,GAEjD,GAAsB,iBAAXA,EAAX,CAIA,QAAqBoE,IAAjBD,EAAKnE,IAAyBA,EAAO7D,WAAW,MAAmB,gBAAX6D,EAC1D,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,IANL,CAOF,GACF,EAOFpG,aAAamC,GAAGjK,OAAQ2V,uBAAqB,KAC3C,IAAK,MAAMsd,KAAOhjB,eAAerH,KAAKmnB,mBACpCY,UAAU/e,oBAAoBqhB,EAChC,IAOFtuB,mBAAmBgsB,WCnRnB,MAAM5rB,OAAO,MACPsK,WAAW,SACXE,YAAa,UAEb8K,aAAc,cACdC,eAAgB,gBAChBH,aAAc,cACdC,cAAe,eACf1H,qBAAwB,eACxB6C,cAAiB,iBACjBI,oBAAuB,cAEvBb,eAAiB,YACjBC,gBAAkB,aAClB0H,aAAe,UACfC,eAAiB,YAEjBlK,kBAAoB,SACpBT,kBAAkB,OAClBC,kBAAkB,OAClBkhB,eAAiB,WAEjB3C,yBAA2B,mBAC3B4C,uBAAyB,iBACzBC,6BAA+B,yBAE/BC,mBAAqB,sCACrBC,eAAiB,8BACjBC,eAAkB,8GAClB9gB,qBAAuB,2EACvB+gB,oBAAuB,GAAED,mBAAmB9gB,uBAE5CghB,4BAA+B,gGAMrC,MAAMC,YAAYzkB,cAChBV,YAAYlN,GACV6N,MAAM7N,GACNgH,KAAKmW,QAAUnW,KAAK8G,SAASvM,QAAQywB,oBAEhChrB,KAAKmW,UAOVnW,KAAKsrB,sBAAsBtrB,KAAKmW,QAASnW,KAAKurB,gBAE9C9rB,aAAamC,GAAG5B,KAAK8G,SAAUoG,eAAe7N,GAASW,KAAKqQ,SAAShR,KACvE,CAGW3C,kBACT,MAzDS,KA0DX,CAGA4W,OACE,MAAMkY,EAAYxrB,KAAK8G,SACvB,GAAI9G,KAAKyrB,cAAcD,GACrB,OAIF,MAAME,EAAS1rB,KAAK2rB,iBAEdC,EAAYF,EAChBjsB,aAAa4C,QAAQqpB,EAAQ1Z,aAAY,CAAE/Q,cAAeuqB,IAC1D,KAEgB/rB,aAAa4C,QAAQmpB,EAAW1Z,aAAY,CAAE7Q,cAAeyqB,IAEjEjpB,kBAAqBmpB,GAAaA,EAAUnpB,mBAI1DzC,KAAK6rB,YAAYH,EAAQF,GACzBxrB,KAAK8rB,UAAUN,EAAWE,GAC5B,CAGAI,UAAU9yB,EAAS+yB,GACZ/yB,IAILA,EAAQ6B,UAAUwR,IAzEI,UA2EtBrM,KAAK8rB,UAAUlkB,eAAeoB,uBAAuBhQ,IAgBrDgH,KAAKqH,gBAdY,KACsB,QAAjCrO,EAAQiC,aAAa,SAKzBjC,EAAQ+L,gBAAgB,YACxB/L,EAAQ6L,aAAa,iBAAiB,GACtC7E,KAAKgsB,gBAAgBhzB,GAAS,GAC9ByG,aAAa4C,QAAQrJ,EAAS+Y,cAAa,CACzC9Q,cAAe8qB,KARf/yB,EAAQ6B,UAAUwR,IA7EF,OAsFhB,GAG0BrT,EAASA,EAAQ6B,UAAUC,SA1FrC,SA2FtB,CAEA+wB,YAAY7yB,EAAS+yB,GACd/yB,IAILA,EAAQ6B,UAAUsJ,OAnGI,UAoGtBnL,EAAQqlB,OAERre,KAAK6rB,YAAYjkB,eAAeoB,uBAAuBhQ,IAcvDgH,KAAKqH,gBAZY,KACsB,QAAjCrO,EAAQiC,aAAa,SAKzBjC,EAAQ6L,aAAa,iBAAiB,GACtC7L,EAAQ6L,aAAa,WAAY,MACjC7E,KAAKgsB,gBAAgBhzB,GAAS,GAC9ByG,aAAa4C,QAAQrJ,EAASiZ,eAAc,CAAEhR,cAAe8qB,KAP3D/yB,EAAQ6B,UAAUsJ,OAxGF,OA+GyD,GAG/CnL,EAASA,EAAQ6B,UAAUC,SAnHrC,SAoHtB,CAEAuV,SAAShR,GACP,IAAM,CAACoN,eAAgBC,gBAAiB0H,aAAcC,gBAAgB1S,SAAStC,EAAM6D,KACnF,OAGF7D,EAAM8Y,kBACN9Y,EAAM0D,iBACN,MAAMiO,EAAS,CAACtE,gBAAiB2H,gBAAgB1S,SAAStC,EAAM6D,KAC1D+oB,EAAoBpuB,qBAAqBmC,KAAKurB,eAAenmB,QAAOpM,IAAY0B,WAAW1B,KAAWqG,EAAM3B,OAAQsT,GAAQ,GAE9Hib,IACFA,EAAkBzV,MAAM,CAAE0V,eAAe,IACzCb,IAAI9hB,oBAAoB0iB,GAAmB3Y,OAE/C,CAEAiY,eACE,OAAO3jB,eAAerH,KAAK4qB,oBAAqBnrB,KAAKmW,QACvD,CAEAwV,iBACE,OAAO3rB,KAAKurB,eAAehrB,MAAK0H,GAASjI,KAAKyrB,cAAcxjB,MAAW,IACzE,CAEAqjB,sBAAsB5Y,EAAQ1K,GAC5BhI,KAAKmsB,yBAAyBzZ,EAAQ,OAAQ,WAE9C,IAAK,MAAMzK,KAASD,EAClBhI,KAAKosB,6BAA6BnkB,EAEtC,CAEAmkB,6BAA6BnkB,GAC3BA,EAAQjI,KAAKqsB,iBAAiBpkB,GAC9B,MAAMqkB,EAAWtsB,KAAKyrB,cAAcxjB,GAC9BskB,EAAYvsB,KAAKwsB,iBAAiBvkB,GACxCA,EAAMpD,aAAa,gBAAiBynB,GAEhCC,IAActkB,GAChBjI,KAAKmsB,yBAAyBI,EAAW,OAAQ,gBAG9CD,GACHrkB,EAAMpD,aAAa,WAAY,MAGjC7E,KAAKmsB,yBAAyBlkB,EAAO,OAAQ,OAG7CjI,KAAKysB,mCAAmCxkB,EAC1C,CAEAwkB,mCAAmCxkB,GACjC,MAAMvK,EAASkK,eAAeoB,uBAAuBf,GAEhDvK,IAILsC,KAAKmsB,yBAAyBzuB,EAAQ,OAAQ,YAE1CuK,EAAMjQ,IACRgI,KAAKmsB,yBAAyBzuB,EAAQ,kBAAoB,IAAGuK,EAAMjQ,MAEvE,CAEAg0B,gBAAgBhzB,EAAS0zB,GACvB,MAAMH,EAAYvsB,KAAKwsB,iBAAiBxzB,GACxC,IAAKuzB,EAAU1xB,UAAUC,SAxLN,YAyLjB,OAGF,MAAMyP,EAAS,CAAC7S,EAAUuiB,KACxB,MAAMjhB,EAAU4O,eAAeG,QAAQrQ,EAAU60B,GAC7CvzB,GACFA,EAAQ6B,UAAU0P,OAAO0P,EAAWyS,EACtC,EAGFniB,EAjM6B,mBALP,UAuMtBA,EAjM2B,iBAJP,QAsMpBgiB,EAAU1nB,aAAa,gBAAiB6nB,EAC1C,CAEAP,yBAAyBnzB,EAAS4lB,EAAWzb,GACtCnK,EAAQgC,aAAa4jB,IACxB5lB,EAAQ6L,aAAa+Z,EAAWzb,EAEpC,CAEAsoB,cAAc1Y,GACZ,OAAOA,EAAKlY,UAAUC,SAlNA,SAmNxB,CAGAuxB,iBAAiBtZ,GACf,OAAOA,EAAK7K,QAAQijB,qBAAuBpY,EAAOnL,eAAeG,QAAQojB,oBAAqBpY,EAChG,CAGAyZ,iBAAiBzZ,GACf,OAAOA,EAAKxY,QAAQ0wB,iBAAmBlY,CACzC,CAGAxL,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAOqhB,IAAI9hB,oBAAoBvJ,MAErC,GAAsB,iBAAX6F,EAAX,CAIA,QAAqBoE,IAAjBD,EAAKnE,IAAyBA,EAAO7D,WAAW,MAAmB,gBAAX6D,EAC1D,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,IANL,CAOF,GACF,EAOFpG,aAAamC,GAAG/I,SA9Pc,eA8PkBuR,sBAAsB,SAAU/K,GAC1E,CAAC,IAAK,QAAQsC,SAAS3B,KAAKsJ,UAC9BjK,EAAM0D,iBAGJrI,WAAWsF,OAIfqrB,IAAI9hB,oBAAoBvJ,MAAMsT,MAChC,IAKA7T,aAAamC,GAAGjK,OA3Qa,eA2QgB,KAC3C,IAAK,MAAMqB,KAAW4O,eAAerH,KAAK6qB,6BACxCC,IAAI9hB,oBAAoBvQ,EAC1B,IAMFsD,mBAAmB+uB,KC9RnB,MAAM3uB,KAAO,QACPsK,SAAW,WACXE,UAAa,YAEbylB,gBAAmB,qBACnBC,eAAkB,oBAClBhS,cAAiB,mBACjBkJ,eAAkB,oBAClB9R,WAAc,gBACdC,aAAgB,kBAChBH,WAAc,gBACdC,YAAe,iBAEfrI,gBAAkB,OAClBmjB,gBAAkB,OAClBljB,gBAAkB,OAClBqU,mBAAqB,UAErBtY,YAAc,CAClB2e,UAAW,UACXyI,SAAU,UACVtI,MAAO,UAGH/e,QAAU,CACd4e,WAAW,EACXyI,UAAU,EACVtI,MAAO,KAOT,MAAMuI,cAAcnmB,cAClBV,YAAYlN,EAAS6M,GACnBgB,MAAM7N,EAAS6M,GAEf7F,KAAK6kB,SAAW,KAChB7kB,KAAKgtB,sBAAuB,EAC5BhtB,KAAKitB,yBAA0B,EAC/BjtB,KAAKmlB,eACP,CAGW1f,qBACT,OAAOA,OACT,CAEWC,yBACT,OAAOA,WACT,CAEWhJ,kBACT,OAAOA,IACT,CAGA4W,OACoB7T,aAAa4C,QAAQrC,KAAK8G,SAAUgL,YAExCrP,mBAIdzC,KAAKktB,gBAEDltB,KAAK+G,QAAQsd,WACfrkB,KAAK8G,SAASjM,UAAUwR,IAvDN,QAiEpBrM,KAAK8G,SAASjM,UAAUsJ,OAhEJ,QAiEpB1I,OAAOuE,KAAK8G,UACZ9G,KAAK8G,SAASjM,UAAUwR,IAjEJ,OACG,WAkEvBrM,KAAKqH,gBAXY,KACfrH,KAAK8G,SAASjM,UAAUsJ,OAxDH,WAyDrB1E,aAAa4C,QAAQrC,KAAK8G,SAAUiL,aAEpC/R,KAAKmtB,oBAAoB,GAOGntB,KAAK8G,SAAU9G,KAAK+G,QAAQsd,WAC5D,CAEAhR,OACOrT,KAAKotB,YAIQ3tB,aAAa4C,QAAQrC,KAAK8G,SAAUkL,YAExCvP,mBAUdzC,KAAK8G,SAASjM,UAAUwR,IAtFD,WAuFvBrM,KAAKqH,gBAPY,KACfrH,KAAK8G,SAASjM,UAAUwR,IAnFN,QAoFlBrM,KAAK8G,SAASjM,UAAUsJ,OAlFH,UADH,QAoFlB1E,aAAa4C,QAAQrC,KAAK8G,SAAUmL,aAAa,GAIrBjS,KAAK8G,SAAU9G,KAAK+G,QAAQsd,YAC5D,CAEApd,UACEjH,KAAKktB,gBAEDltB,KAAKotB,WACPptB,KAAK8G,SAASjM,UAAUsJ,OA/FN,QAkGpB0C,MAAMI,SACR,CAEAmmB,UACE,OAAOptB,KAAK8G,SAASjM,UAAUC,SAtGX,OAuGtB,CAIAqyB,qBACOntB,KAAK+G,QAAQ+lB,WAId9sB,KAAKgtB,sBAAwBhtB,KAAKitB,0BAItCjtB,KAAK6kB,SAAWjnB,YAAW,KACzBoC,KAAKqT,MAAM,GACVrT,KAAK+G,QAAQyd,QAClB,CAEA6I,eAAehuB,EAAOiuB,GACpB,OAAQjuB,EAAMM,MACZ,IAAK,YACL,IAAK,WACHK,KAAKgtB,qBAAuBM,EAC5B,MAGF,IAAK,UACL,IAAK,WACHttB,KAAKitB,wBAA0BK,EASnC,GAAIA,EAEF,YADAttB,KAAKktB,gBAIP,MAAMjc,EAAc5R,EAAM4B,cACtBjB,KAAK8G,WAAamK,GAAejR,KAAK8G,SAAShM,SAASmW,IAI5DjR,KAAKmtB,oBACP,CAEAhI,gBACE1lB,aAAamC,GAAG5B,KAAK8G,SAAU6lB,iBAAiBttB,GAASW,KAAKqtB,eAAehuB,GAAO,KACpFI,aAAamC,GAAG5B,KAAK8G,SAAU8lB,gBAAgBvtB,GAASW,KAAKqtB,eAAehuB,GAAO,KACnFI,aAAamC,GAAG5B,KAAK8G,SAAU8T,eAAevb,GAASW,KAAKqtB,eAAehuB,GAAO,KAClFI,aAAamC,GAAG5B,KAAK8G,SAAUgd,gBAAgBzkB,GAASW,KAAKqtB,eAAehuB,GAAO,IACrF,CAEA6tB,gBACExc,aAAa1Q,KAAK6kB,UAClB7kB,KAAK6kB,SAAW,IAClB,CAGAtd,uBAAuB1B,GACrB,OAAO7F,KAAK+J,MAAK,WACf,MAAMC,EAAO+iB,MAAMxjB,oBAAoBvJ,KAAM6F,GAE7C,GAAsB,iBAAXA,EAAqB,CAC9B,QAA4B,IAAjBmE,EAAKnE,GACd,MAAM,IAAIY,UAAW,oBAAmBZ,MAG1CmE,EAAKnE,GAAQ7F,KACf,CACF,GACF,EAOFkJ,qBAAqB6jB,OAMrBzwB,mBAAmBywB,c"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.js b/vendor/twbs/bootstrap/dist/js/bootstrap.js
index de4d5a2ec..9bf4ad1a0 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.js
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.js
@@ -1,5 +1,5 @@
/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -9,8 +9,7 @@
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory(global.Popper));
})(this, (function (Popper) { 'use strict';
- function _interopNamespace(e) {
- if (e && e.__esModule) return e;
+ function _interopNamespaceDefault(e) {
const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
if (e) {
for (const k in e) {
@@ -27,197 +26,150 @@
return Object.freeze(n);
}
- const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
+ const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/index.js
+ * Bootstrap (v5.3.0-alpha1): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
const MAX_UID = 1000000;
const MILLISECONDS_MULTIPLIER = 1000;
- const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)
+ const TRANSITION_END = 'transitionend';
+ /**
+ * Properly escape IDs selectors to handle weird IDs
+ * @param {string} selector
+ * @returns {string}
+ */
+ const parseSelector = selector => {
+ if (selector && window.CSS && window.CSS.escape) {
+ // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
+ selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
+ }
+ return selector;
+ };
+
+ // Shout-out Angus Croll (https://goo.gl/pxwQGp)
const toType = object => {
if (object === null || object === undefined) {
return `${object}`;
}
-
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
};
+
/**
* Public Util API
*/
-
const getUID = prefix => {
do {
prefix += Math.floor(Math.random() * MAX_UID);
} while (document.getElementById(prefix));
-
return prefix;
};
-
- const getSelector = element => {
- let selector = element.getAttribute('data-bs-target');
-
- if (!selector || selector === '#') {
- let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
- // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
- // `document.querySelector` will rightfully complain it is invalid.
- // See https://github.com/twbs/bootstrap/issues/32273
-
- if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
- return null;
- } // Just in case some CMS puts out a full URL with the anchor appended
-
-
- if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
- hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
- }
-
- selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
- }
-
- return selector;
- };
-
- const getSelectorFromElement = element => {
- const selector = getSelector(element);
-
- if (selector) {
- return document.querySelector(selector) ? selector : null;
- }
-
- return null;
- };
-
- const getElementFromSelector = element => {
- const selector = getSelector(element);
- return selector ? document.querySelector(selector) : null;
- };
-
const getTransitionDurationFromElement = element => {
if (!element) {
return 0;
- } // Get transition-duration of the element
-
+ }
+ // Get transition-duration of the element
let {
transitionDuration,
transitionDelay
} = window.getComputedStyle(element);
const floatTransitionDuration = Number.parseFloat(transitionDuration);
- const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
+ const floatTransitionDelay = Number.parseFloat(transitionDelay);
+ // Return 0 if element or transition duration is not found
if (!floatTransitionDuration && !floatTransitionDelay) {
return 0;
- } // If multiple durations are defined, take the first
-
+ }
+ // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
transitionDelay = transitionDelay.split(',')[0];
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
};
-
const triggerTransitionEnd = element => {
element.dispatchEvent(new Event(TRANSITION_END));
};
-
const isElement = object => {
if (!object || typeof object !== 'object') {
return false;
}
-
if (typeof object.jquery !== 'undefined') {
object = object[0];
}
-
return typeof object.nodeType !== 'undefined';
};
-
const getElement = object => {
// it's a jQuery object or a node element
if (isElement(object)) {
return object.jquery ? object[0] : object;
}
-
if (typeof object === 'string' && object.length > 0) {
- return document.querySelector(object);
+ return document.querySelector(parseSelector(object));
}
-
return null;
};
-
const isVisible = element => {
if (!isElement(element) || element.getClientRects().length === 0) {
return false;
}
-
- const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed
-
+ const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
+ // Handle `details` element as its content may falsie appear visible when it is closed
const closedDetails = element.closest('details:not([open])');
-
if (!closedDetails) {
return elementIsVisible;
}
-
if (closedDetails !== element) {
const summary = element.closest('summary');
-
if (summary && summary.parentNode !== closedDetails) {
return false;
}
-
if (summary === null) {
return false;
}
}
-
return elementIsVisible;
};
-
const isDisabled = element => {
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
return true;
}
-
if (element.classList.contains('disabled')) {
return true;
}
-
if (typeof element.disabled !== 'undefined') {
return element.disabled;
}
-
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
};
-
const findShadowRoot = element => {
if (!document.documentElement.attachShadow) {
return null;
- } // Can find the shadow root otherwise it'll return the document
-
+ }
+ // Can find the shadow root otherwise it'll return the document
if (typeof element.getRootNode === 'function') {
const root = element.getRootNode();
return root instanceof ShadowRoot ? root : null;
}
-
if (element instanceof ShadowRoot) {
return element;
- } // when we don't find a shadow root
-
+ }
+ // when we don't find a shadow root
if (!element.parentNode) {
return null;
}
-
return findShadowRoot(element.parentNode);
};
-
const noop = () => {};
+
/**
* Trick to restart an element's animation
*
@@ -226,8 +178,6 @@
*
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
*/
-
-
const reflow = element => {
element.offsetHeight; // eslint-disable-line no-unused-expressions
};
@@ -236,12 +186,9 @@
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return window.jQuery;
}
-
return null;
};
-
const DOMContentLoadedCallbacks = [];
-
const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') {
// add listener on the first call when the document is in loading state
@@ -252,26 +199,21 @@
}
});
}
-
DOMContentLoadedCallbacks.push(callback);
} else {
callback();
}
};
-
const isRTL = () => document.documentElement.dir === 'rtl';
-
const defineJQueryPlugin = plugin => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
-
if ($) {
const name = plugin.NAME;
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
-
$.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
@@ -279,35 +221,27 @@
}
});
};
-
- const execute = callback => {
- if (typeof callback === 'function') {
- callback();
- }
+ const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+ return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
};
-
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
if (!waitForTransition) {
execute(callback);
return;
}
-
const durationPadding = 5;
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
let called = false;
-
const handler = ({
target
}) => {
if (target !== transitionElement) {
return;
}
-
called = true;
transitionElement.removeEventListener(TRANSITION_END, handler);
execute(callback);
};
-
transitionElement.addEventListener(TRANSITION_END, handler);
setTimeout(() => {
if (!called) {
@@ -315,6 +249,7 @@
}
}, emulatedDuration);
};
+
/**
* Return the previous/next element of a list.
*
@@ -324,32 +259,29 @@
* @param isCycleAllowed
* @return {Element|elem} The proper element
*/
-
-
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
const listLength = list.length;
- let index = list.indexOf(activeElement); // if the element does not exist in the list return an element
- // depending on the direction and if cycle is allowed
+ let index = list.indexOf(activeElement);
+ // if the element does not exist in the list return an element
+ // depending on the direction and if cycle is allowed
if (index === -1) {
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
}
-
index += shouldGetNext ? 1 : -1;
-
if (isCycleAllowed) {
index = (index + listLength) % listLength;
}
-
return list[Math.max(0, Math.min(index, listLength - 1))];
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/event-handler.js
+ * Bootstrap (v5.3.0-alpha1): dom/event-handler.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -358,13 +290,13 @@
const stripNameRegex = /\..*/;
const stripUidRegex = /::\d+$/;
const eventRegistry = {}; // Events storage
-
let uidEvent = 1;
const customEvents = {
mouseenter: 'mouseover',
mouseleave: 'mouseout'
};
const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
+
/**
* Private methods
*/
@@ -372,32 +304,26 @@
function makeEventUid(element, uid) {
return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
}
-
function getElementEvents(element) {
const uid = makeEventUid(element);
element.uidEvent = uid;
eventRegistry[uid] = eventRegistry[uid] || {};
return eventRegistry[uid];
}
-
function bootstrapHandler(element, fn) {
return function handler(event) {
hydrateObj(event, {
delegateTarget: element
});
-
if (handler.oneOff) {
EventHandler.off(element, event.type, fn);
}
-
return fn.apply(element, [event]);
};
}
-
function bootstrapDelegationHandler(element, selector, fn) {
return function handler(event) {
const domElements = element.querySelectorAll(selector);
-
for (let {
target
} = event; target && target !== this; target = target.parentNode) {
@@ -405,46 +331,38 @@
if (domElement !== target) {
continue;
}
-
hydrateObj(event, {
delegateTarget: target
});
-
if (handler.oneOff) {
EventHandler.off(element, event.type, selector, fn);
}
-
return fn.apply(target, [event]);
}
}
};
}
-
function findHandler(events, callable, delegationSelector = null) {
return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
}
-
function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
- const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check
-
+ const isDelegated = typeof handler === 'string';
+ // todo: tooltip passes `false` instead of selector, so we need to check
const callable = isDelegated ? delegationFunction : handler || delegationFunction;
let typeEvent = getTypeEvent(originalTypeEvent);
-
if (!nativeEvents.has(typeEvent)) {
typeEvent = originalTypeEvent;
}
-
return [isDelegated, callable, typeEvent];
}
-
function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
+ let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
- let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
+ // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
// this prevents the handler from being dispatched the same way as mouseover or mouseout does
-
if (originalTypeEvent in customEvents) {
const wrapFunction = fn => {
return function (event) {
@@ -453,19 +371,15 @@
}
};
};
-
callable = wrapFunction(callable);
}
-
const events = getElementEvents(element);
const handlers = events[typeEvent] || (events[typeEvent] = {});
const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
-
if (previousFunction) {
previousFunction.oneOff = previousFunction.oneOff && oneOff;
return;
}
-
const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
fn.delegationSelector = isDelegated ? handler : null;
@@ -475,86 +389,67 @@
handlers[uid] = fn;
element.addEventListener(typeEvent, fn, isDelegated);
}
-
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
const fn = findHandler(events[typeEvent], handler, delegationSelector);
-
if (!fn) {
return;
}
-
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
delete events[typeEvent][fn.uidEvent];
}
-
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
const storeElementEvent = events[typeEvent] || {};
-
- for (const handlerKey of Object.keys(storeElementEvent)) {
+ for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
if (handlerKey.includes(namespace)) {
- const event = storeElementEvent[handlerKey];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
}
}
}
-
function getTypeEvent(event) {
// allow to get the native events from namespaced events ('click.bs.button' --> 'click')
event = event.replace(stripNameRegex, '');
return customEvents[event] || event;
}
-
const EventHandler = {
on(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, false);
},
-
one(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, true);
},
-
off(element, originalTypeEvent, handler, delegationFunction) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
-
const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
const inNamespace = typeEvent !== originalTypeEvent;
const events = getElementEvents(element);
const storeElementEvent = events[typeEvent] || {};
const isNamespace = originalTypeEvent.startsWith('.');
-
if (typeof callable !== 'undefined') {
// Simplest case: handler is passed, remove that listener ONLY.
if (!Object.keys(storeElementEvent).length) {
return;
}
-
removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
return;
}
-
if (isNamespace) {
for (const elementEvent of Object.keys(events)) {
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
}
}
-
- for (const keyHandlers of Object.keys(storeElementEvent)) {
+ for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
const handlerKey = keyHandlers.replace(stripUidRegex, '');
-
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
- const event = storeElementEvent[keyHandlers];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
}
}
},
-
trigger(element, event, args) {
if (typeof event !== 'string' || !element) {
return null;
}
-
const $ = getjQuery();
const typeEvent = getTypeEvent(event);
const inNamespace = event !== typeEvent;
@@ -562,7 +457,6 @@
let bubbles = true;
let nativeDispatch = true;
let defaultPrevented = false;
-
if (inNamespace && $) {
jQueryEvent = $.Event(event, args);
$(element).trigger(jQueryEvent);
@@ -570,52 +464,42 @@
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
defaultPrevented = jQueryEvent.isDefaultPrevented();
}
-
let evt = new Event(event, {
bubbles,
cancelable: true
});
evt = hydrateObj(evt, args);
-
if (defaultPrevented) {
evt.preventDefault();
}
-
if (nativeDispatch) {
element.dispatchEvent(evt);
}
-
if (evt.defaultPrevented && jQueryEvent) {
jQueryEvent.preventDefault();
}
-
return evt;
}
-
};
-
- function hydrateObj(obj, meta) {
- for (const [key, value] of Object.entries(meta || {})) {
+ function hydrateObj(obj, meta = {}) {
+ for (const [key, value] of Object.entries(meta)) {
try {
obj[key] = value;
} catch (_unused) {
Object.defineProperty(obj, key, {
configurable: true,
-
get() {
return value;
}
-
});
}
}
-
return obj;
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/data.js
+ * Bootstrap (v5.3.0-alpha1): dom/data.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -623,124 +507,108 @@
/**
* Constants
*/
+
const elementMap = new Map();
const Data = {
set(element, key, instance) {
if (!elementMap.has(element)) {
elementMap.set(element, new Map());
}
+ const instanceMap = elementMap.get(element);
- const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
+ // make it clear we only want one instance per element
// can be removed later when multiple key/instances are fine to be used
-
if (!instanceMap.has(key) && instanceMap.size !== 0) {
// eslint-disable-next-line no-console
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
return;
}
-
instanceMap.set(key, instance);
},
-
get(element, key) {
if (elementMap.has(element)) {
return elementMap.get(element).get(key) || null;
}
-
return null;
},
-
remove(element, key) {
if (!elementMap.has(element)) {
return;
}
-
const instanceMap = elementMap.get(element);
- instanceMap.delete(key); // free up element references if there are no instances left for an element
+ instanceMap.delete(key);
+ // free up element references if there are no instances left for an element
if (instanceMap.size === 0) {
elementMap.delete(element);
}
}
-
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/manipulator.js
+ * Bootstrap (v5.3.0-alpha1): dom/manipulator.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
function normalizeData(value) {
if (value === 'true') {
return true;
}
-
if (value === 'false') {
return false;
}
-
if (value === Number(value).toString()) {
return Number(value);
}
-
if (value === '' || value === 'null') {
return null;
}
-
if (typeof value !== 'string') {
return value;
}
-
try {
return JSON.parse(decodeURIComponent(value));
} catch (_unused) {
return value;
}
}
-
function normalizeDataKey(key) {
return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
}
-
const Manipulator = {
setDataAttribute(element, key, value) {
element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
},
-
removeDataAttribute(element, key) {
element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
},
-
getDataAttributes(element) {
if (!element) {
return {};
}
-
const attributes = {};
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
-
for (const key of bsKeys) {
let pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]);
}
-
return attributes;
},
-
getDataAttribute(element, key) {
return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
}
-
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/config.js
+ * Bootstrap (v5.3.0-alpha1): util/config.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Class definition
*/
@@ -750,63 +618,55 @@
static get Default() {
return {};
}
-
static get DefaultType() {
return {};
}
-
static get NAME() {
throw new Error('You have to implement the static method "NAME", for each component!');
}
-
_getConfig(config) {
config = this._mergeConfigObj(config);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
}
-
_configAfterMerge(config) {
return config;
}
-
_mergeConfigObj(config, element) {
const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
- return { ...this.constructor.Default,
+ return {
+ ...this.constructor.Default,
...(typeof jsonConfig === 'object' ? jsonConfig : {}),
...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),
...(typeof config === 'object' ? config : {})
};
}
-
_typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
- for (const property of Object.keys(configTypes)) {
- const expectedTypes = configTypes[property];
+ for (const [property, expectedTypes] of Object.entries(configTypes)) {
const value = config[property];
const valueType = isElement(value) ? 'element' : toType(value);
-
if (!new RegExp(expectedTypes).test(valueType)) {
throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
}
}
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): base-component.js
+ * Bootstrap (v5.3.0-alpha1): base-component.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
- const VERSION = '5.2.2';
+ const VERSION = '5.3.0-alpha1';
+
/**
* Class definition
*/
@@ -815,73 +675,147 @@
constructor(element, config) {
super();
element = getElement(element);
-
if (!element) {
return;
}
-
this._element = element;
this._config = this._getConfig(config);
Data.set(this._element, this.constructor.DATA_KEY, this);
- } // Public
-
+ }
+ // Public
dispose() {
Data.remove(this._element, this.constructor.DATA_KEY);
EventHandler.off(this._element, this.constructor.EVENT_KEY);
-
for (const propertyName of Object.getOwnPropertyNames(this)) {
this[propertyName] = null;
}
}
-
_queueCallback(callback, element, isAnimated = true) {
executeAfterTransition(callback, element, isAnimated);
}
-
_getConfig(config) {
config = this._mergeConfigObj(config, this._element);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
- } // Static
-
+ }
+ // Static
static getInstance(element) {
return Data.get(getElement(element), this.DATA_KEY);
}
-
static getOrCreateInstance(element, config = {}) {
return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
}
-
static get VERSION() {
return VERSION;
}
-
static get DATA_KEY() {
return `bs.${this.NAME}`;
}
-
static get EVENT_KEY() {
return `.${this.DATA_KEY}`;
}
-
static eventName(name) {
return `${name}${this.EVENT_KEY}`;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/component-functions.js
+ * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+ const getSelector = element => {
+ let selector = element.getAttribute('data-bs-target');
+ if (!selector || selector === '#') {
+ let hrefAttribute = element.getAttribute('href');
+
+ // The only valid content that could double as a selector are IDs or classes,
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
+ // `document.querySelector` will rightfully complain it is invalid.
+ // See https://github.com/twbs/bootstrap/issues/32273
+ if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
+ return null;
+ }
+
+ // Just in case some CMS puts out a full URL with the anchor appended
+ if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
+ hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
+ }
+ selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
+ }
+ return parseSelector(selector);
+ };
+ const SelectorEngine = {
+ find(selector, element = document.documentElement) {
+ return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
+ },
+ findOne(selector, element = document.documentElement) {
+ return Element.prototype.querySelector.call(element, selector);
+ },
+ children(element, selector) {
+ return [].concat(...element.children).filter(child => child.matches(selector));
+ },
+ parents(element, selector) {
+ const parents = [];
+ let ancestor = element.parentNode.closest(selector);
+ while (ancestor) {
+ parents.push(ancestor);
+ ancestor = ancestor.parentNode.closest(selector);
+ }
+ return parents;
+ },
+ prev(element, selector) {
+ let previous = element.previousElementSibling;
+ while (previous) {
+ if (previous.matches(selector)) {
+ return [previous];
+ }
+ previous = previous.previousElementSibling;
+ }
+ return [];
+ },
+ // TODO: this is now unused; remove later along with prev()
+ next(element, selector) {
+ let next = element.nextElementSibling;
+ while (next) {
+ if (next.matches(selector)) {
+ return [next];
+ }
+ next = next.nextElementSibling;
+ }
+ return [];
+ },
+ focusableChildren(element) {
+ const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
+ return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
+ },
+ getSelectorFromElement(element) {
+ const selector = getSelector(element);
+ if (selector) {
+ return SelectorEngine.findOne(selector) ? selector : null;
+ }
+ return null;
+ },
+ getElementFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.findOne(selector) : null;
+ },
+ getMultipleElementsFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.find(selector) : [];
+ }
+ };
+ /**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v5.3.0-alpha1): util/component-functions.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
+ * --------------------------------------------------------------------------
+ */
const enableDismissTrigger = (component, method = 'hide') => {
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
const name = component.NAME;
@@ -889,24 +823,24 @@
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
if (isDisabled(this)) {
return;
}
+ const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
+ const instance = component.getOrCreateInstance(target);
- const target = getElementFromSelector(this) || this.closest(`.${name}`);
- const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
-
+ // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
instance[method]();
});
};
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): alert.js
+ * Bootstrap (v5.3.0-alpha1): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -918,6 +852,7 @@
const EVENT_CLOSED = `closed${EVENT_KEY$b}`;
const CLASS_NAME_FADE$5 = 'fade';
const CLASS_NAME_SHOW$8 = 'show';
+
/**
* Class definition
*/
@@ -926,55 +861,47 @@
// Getters
static get NAME() {
return NAME$f;
- } // Public
-
+ }
+ // Public
close() {
const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
-
if (closeEvent.defaultPrevented) {
return;
}
-
this._element.classList.remove(CLASS_NAME_SHOW$8);
-
const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
-
this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
- } // Private
-
+ }
+ // Private
_destroyElement() {
this._element.remove();
-
EventHandler.trigger(this._element, EVENT_CLOSED);
this.dispose();
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Alert.getOrCreateInstance(this);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
});
}
-
}
+
/**
* Data API implementation
*/
-
enableDismissTrigger(Alert, 'close');
+
/**
* jQuery
*/
@@ -983,10 +910,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): button.js
+ * Bootstrap (v5.3.0-alpha1): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -998,6 +926,7 @@
const CLASS_NAME_ACTIVE$3 = 'active';
const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
+
/**
* Class definition
*/
@@ -1006,37 +935,36 @@
// Getters
static get NAME() {
return NAME$e;
- } // Public
-
+ }
+ // Public
toggle() {
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Button.getOrCreateInstance(this);
-
if (config === 'toggle') {
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {
event.preventDefault();
const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
const data = Button.getOrCreateInstance(button);
data.toggle();
});
+
/**
* jQuery
*/
@@ -1045,81 +973,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/selector-engine.js
+ * Bootstrap (v5.3.0-alpha1): util/swipe.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
- /**
- * Constants
- */
-
- const SelectorEngine = {
- find(selector, element = document.documentElement) {
- return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
- },
-
- findOne(selector, element = document.documentElement) {
- return Element.prototype.querySelector.call(element, selector);
- },
-
- children(element, selector) {
- return [].concat(...element.children).filter(child => child.matches(selector));
- },
-
- parents(element, selector) {
- const parents = [];
- let ancestor = element.parentNode.closest(selector);
-
- while (ancestor) {
- parents.push(ancestor);
- ancestor = ancestor.parentNode.closest(selector);
- }
-
- return parents;
- },
-
- prev(element, selector) {
- let previous = element.previousElementSibling;
-
- while (previous) {
- if (previous.matches(selector)) {
- return [previous];
- }
-
- previous = previous.previousElementSibling;
- }
-
- return [];
- },
- // TODO: this is now unused; remove later along with prev()
- next(element, selector) {
- let next = element.nextElementSibling;
-
- while (next) {
- if (next.matches(selector)) {
- return [next];
- }
-
- next = next.nextElementSibling;
- }
-
- return [];
- },
-
- focusableChildren(element) {
- const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
- return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));
- }
-
- };
-
- /**
- * --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/swipe.js
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- * --------------------------------------------------------------------------
- */
/**
* Constants
*/
@@ -1145,6 +1003,7 @@
leftCallback: '(function|null)',
rightCallback: '(function|null)'
};
+
/**
* Class definition
*/
@@ -1153,84 +1012,67 @@
constructor(element, config) {
super();
this._element = element;
-
if (!element || !Swipe.isSupported()) {
return;
}
-
this._config = this._getConfig(config);
this._deltaX = 0;
this._supportPointerEvents = Boolean(window.PointerEvent);
-
this._initEvents();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$c;
}
-
static get DefaultType() {
return DefaultType$c;
}
-
static get NAME() {
return NAME$d;
- } // Public
-
+ }
+ // Public
dispose() {
EventHandler.off(this._element, EVENT_KEY$9);
- } // Private
-
+ }
+ // Private
_start(event) {
if (!this._supportPointerEvents) {
this._deltaX = event.touches[0].clientX;
return;
}
-
if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX;
}
}
-
_end(event) {
if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX - this._deltaX;
}
-
this._handleSwipe();
-
execute(this._config.endCallback);
}
-
_move(event) {
this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
}
-
_handleSwipe() {
const absDeltaX = Math.abs(this._deltaX);
-
if (absDeltaX <= SWIPE_THRESHOLD) {
return;
}
-
const direction = absDeltaX / this._deltaX;
this._deltaX = 0;
-
if (!direction) {
return;
}
-
execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
}
-
_initEvents() {
if (this._supportPointerEvents) {
EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
-
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
} else {
EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
@@ -1238,24 +1080,23 @@
EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
}
}
-
_eventIsPointerPenTouch(event) {
return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
- } // Static
-
+ }
+ // Static
static isSupported() {
return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): carousel.js
+ * Bootstrap (v5.3.0-alpha1): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -1315,6 +1156,7 @@
touch: 'boolean',
wrap: 'boolean'
};
+
/**
* Class definition
*/
@@ -1328,32 +1170,27 @@
this.touchTimeout = null;
this._swipeHelper = null;
this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
-
this._addEventListeners();
-
if (this._config.ride === CLASS_NAME_CAROUSEL) {
this.cycle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$b;
}
-
static get DefaultType() {
return DefaultType$b;
}
-
static get NAME() {
return NAME$c;
- } // Public
-
+ }
+ // Public
next() {
this._slide(ORDER_NEXT);
}
-
nextWhenVisible() {
// FIXME TODO use `document.visibilityState`
// Don't call next when the page isn't visible
@@ -1362,101 +1199,80 @@
this.next();
}
}
-
prev() {
this._slide(ORDER_PREV);
}
-
pause() {
if (this._isSliding) {
triggerTransitionEnd(this._element);
}
-
this._clearInterval();
}
-
cycle() {
this._clearInterval();
-
this._updateInterval();
-
this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
}
-
_maybeEnableCycle() {
if (!this._config.ride) {
return;
}
-
if (this._isSliding) {
EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
return;
}
-
this.cycle();
}
-
to(index) {
const items = this._getItems();
-
if (index > items.length - 1 || index < 0) {
return;
}
-
if (this._isSliding) {
EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
return;
}
-
const activeIndex = this._getItemIndex(this._getActive());
-
if (activeIndex === index) {
return;
}
-
const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
-
this._slide(order, items[index]);
}
-
dispose() {
if (this._swipeHelper) {
this._swipeHelper.dispose();
}
-
super.dispose();
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
config.defaultInterval = config.interval;
return config;
}
-
_addEventListeners() {
if (this._config.keyboard) {
EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));
}
-
if (this._config.pause === 'hover') {
EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());
EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());
}
-
if (this._config.touch && Swipe.isSupported()) {
this._addTouchEventListeners();
}
}
-
_addTouchEventListeners() {
for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
}
-
const endCallBack = () => {
if (this._config.pause !== 'hover') {
return;
- } // If it's a touch-enabled device, mouseenter/leave are fired as
+ }
+
+ // If it's a touch-enabled device, mouseenter/leave are fired as
// part of the mouse compatibility events on first tap - the carousel
// would stop cycling until user tapped out of it;
// here, we listen for touchend, explicitly pause the carousel
@@ -1464,16 +1280,12 @@
// is NOT fired) and after a timeout (to allow for mouse compatibility
// events to fire) we explicitly restart cycling
-
this.pause();
-
if (this.touchTimeout) {
clearTimeout(this.touchTimeout);
}
-
this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
};
-
const swipeConfig = {
leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
@@ -1481,68 +1293,51 @@
};
this._swipeHelper = new Swipe(this._element, swipeConfig);
}
-
_keydown(event) {
if (/input|textarea/i.test(event.target.tagName)) {
return;
}
-
const direction = KEY_TO_DIRECTION[event.key];
-
if (direction) {
event.preventDefault();
-
this._slide(this._directionToOrder(direction));
}
}
-
_getItemIndex(element) {
return this._getItems().indexOf(element);
}
-
_setActiveIndicatorElement(index) {
if (!this._indicatorsElement) {
return;
}
-
const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);
activeIndicator.removeAttribute('aria-current');
const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
-
if (newActiveIndicator) {
newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);
newActiveIndicator.setAttribute('aria-current', 'true');
}
}
-
_updateInterval() {
const element = this._activeElement || this._getActive();
-
if (!element) {
return;
}
-
const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
this._config.interval = elementInterval || this._config.defaultInterval;
}
-
_slide(order, element = null) {
if (this._isSliding) {
return;
}
-
const activeElement = this._getActive();
-
const isNext = order === ORDER_NEXT;
const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
-
if (nextElement === activeElement) {
return;
}
-
const nextElementIndex = this._getItemIndex(nextElement);
-
const triggerEvent = eventName => {
return EventHandler.trigger(this._element, eventName, {
relatedTarget: nextElement,
@@ -1551,25 +1346,19 @@
to: nextElementIndex
});
};
-
const slideEvent = triggerEvent(EVENT_SLIDE);
-
if (slideEvent.defaultPrevented) {
return;
}
-
if (!activeElement || !nextElement) {
// Some weirdness is happening, so we bail
// todo: change tests that use empty divs to avoid this check
return;
}
-
const isCycling = Boolean(this._interval);
this.pause();
this._isSliding = true;
-
this._setActiveIndicatorElement(nextElementIndex);
-
this._activeElement = nextElement;
const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
@@ -1577,7 +1366,6 @@
reflow(nextElement);
activeElement.classList.add(directionalClassName);
nextElement.classList.add(directionalClassName);
-
const completeCallBack = () => {
nextElement.classList.remove(directionalClassName, orderClassName);
nextElement.classList.add(CLASS_NAME_ACTIVE$2);
@@ -1585,113 +1373,89 @@
this._isSliding = false;
triggerEvent(EVENT_SLID);
};
-
this._queueCallback(completeCallBack, activeElement, this._isAnimated());
-
if (isCycling) {
this.cycle();
}
}
-
_isAnimated() {
return this._element.classList.contains(CLASS_NAME_SLIDE);
}
-
_getActive() {
return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
}
-
_getItems() {
return SelectorEngine.find(SELECTOR_ITEM, this._element);
}
-
_clearInterval() {
if (this._interval) {
clearInterval(this._interval);
this._interval = null;
}
}
-
_directionToOrder(direction) {
if (isRTL()) {
return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
}
-
return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
}
-
_orderToDirection(order) {
if (isRTL()) {
return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
}
-
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Carousel.getOrCreateInstance(this, config);
-
if (typeof config === 'number') {
data.to(config);
return;
}
-
if (typeof config === 'string') {
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {
- const target = getElementFromSelector(this);
-
+ const target = SelectorEngine.getElementFromSelector(this);
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
return;
}
-
event.preventDefault();
const carousel = Carousel.getOrCreateInstance(target);
const slideIndex = this.getAttribute('data-bs-slide-to');
-
if (slideIndex) {
carousel.to(slideIndex);
-
carousel._maybeEnableCycle();
-
return;
}
-
if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
carousel.next();
-
carousel._maybeEnableCycle();
-
return;
}
-
carousel.prev();
-
carousel._maybeEnableCycle();
});
EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {
const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
-
for (const carousel of carousels) {
Carousel.getOrCreateInstance(carousel);
}
});
+
/**
* jQuery
*/
@@ -1700,10 +1464,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): collapse.js
+ * Bootstrap (v5.3.0-alpha1): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -1735,6 +1500,7 @@
parent: '(null|element)',
toggle: 'boolean'
};
+
/**
* Class definition
*/
@@ -1745,41 +1511,34 @@
this._isTransitioning = false;
this._triggerArray = [];
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
-
for (const elem of toggleList) {
- const selector = getSelectorFromElement(elem);
+ const selector = SelectorEngine.getSelectorFromElement(elem);
const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
-
if (selector !== null && filterElement.length) {
this._triggerArray.push(elem);
}
}
-
this._initializeChildren();
-
if (!this._config.parent) {
this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
}
-
if (this._config.toggle) {
this.toggle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$a;
}
-
static get DefaultType() {
return DefaultType$a;
}
-
static get NAME() {
return NAME$b;
- } // Public
-
+ }
+ // Public
toggle() {
if (this._isShown()) {
this.hide();
@@ -1787,201 +1546,149 @@
this.show();
}
}
-
show() {
if (this._isTransitioning || this._isShown()) {
return;
}
+ let activeChildren = [];
- let activeChildren = []; // find active children
-
+ // find active children
if (this._config.parent) {
activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
toggle: false
}));
}
-
if (activeChildren.length && activeChildren[0]._isTransitioning) {
return;
}
-
const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);
-
if (startEvent.defaultPrevented) {
return;
}
-
for (const activeInstance of activeChildren) {
activeInstance.hide();
}
-
const dimension = this._getDimension();
-
this._element.classList.remove(CLASS_NAME_COLLAPSE);
-
this._element.classList.add(CLASS_NAME_COLLAPSING);
-
this._element.style[dimension] = 0;
-
this._addAriaAndCollapsedClass(this._triggerArray, true);
-
this._isTransitioning = true;
-
const complete = () => {
this._isTransitioning = false;
-
this._element.classList.remove(CLASS_NAME_COLLAPSING);
-
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
-
this._element.style[dimension] = '';
EventHandler.trigger(this._element, EVENT_SHOWN$6);
};
-
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
const scrollSize = `scroll${capitalizedDimension}`;
-
this._queueCallback(complete, this._element, true);
-
this._element.style[dimension] = `${this._element[scrollSize]}px`;
}
-
hide() {
if (this._isTransitioning || !this._isShown()) {
return;
}
-
const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);
-
if (startEvent.defaultPrevented) {
return;
}
-
const dimension = this._getDimension();
-
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
reflow(this._element);
-
this._element.classList.add(CLASS_NAME_COLLAPSING);
-
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
-
for (const trigger of this._triggerArray) {
- const element = getElementFromSelector(trigger);
-
+ const element = SelectorEngine.getElementFromSelector(trigger);
if (element && !this._isShown(element)) {
this._addAriaAndCollapsedClass([trigger], false);
}
}
-
this._isTransitioning = true;
-
const complete = () => {
this._isTransitioning = false;
-
this._element.classList.remove(CLASS_NAME_COLLAPSING);
-
this._element.classList.add(CLASS_NAME_COLLAPSE);
-
EventHandler.trigger(this._element, EVENT_HIDDEN$6);
};
-
this._element.style[dimension] = '';
-
this._queueCallback(complete, this._element, true);
}
-
_isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW$7);
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values
-
config.parent = getElement(config.parent);
return config;
}
-
_getDimension() {
return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
}
-
_initializeChildren() {
if (!this._config.parent) {
return;
}
-
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
-
for (const element of children) {
- const selected = getElementFromSelector(element);
-
+ const selected = SelectorEngine.getElementFromSelector(element);
if (selected) {
this._addAriaAndCollapsedClass([element], this._isShown(selected));
}
}
}
-
_getFirstLevelChildren(selector) {
- const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth
-
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
+ // remove children if greater depth
return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
}
-
_addAriaAndCollapsedClass(triggerArray, isOpen) {
if (!triggerArray.length) {
return;
}
-
for (const element of triggerArray) {
element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
element.setAttribute('aria-expanded', isOpen);
}
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
const _config = {};
-
if (typeof config === 'string' && /show|hide/.test(config)) {
_config.toggle = false;
}
-
return this.each(function () {
const data = Collapse.getOrCreateInstance(this, _config);
-
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
event.preventDefault();
}
-
- const selector = getSelectorFromElement(this);
- const selectorElements = SelectorEngine.find(selector);
-
- for (const element of selectorElements) {
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
Collapse.getOrCreateInstance(element, {
toggle: false
}).toggle();
}
});
+
/**
* jQuery
*/
@@ -1990,10 +1697,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dropdown.js
+ * Bootstrap (v5.3.0-alpha1): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2051,6 +1759,7 @@
popperConfig: '(null|object|function)',
reference: '(string|element|object)'
};
+
/**
* Class definition
*/
@@ -2060,143 +1769,112 @@
super(element, config);
this._popper = null;
this._parent = this._element.parentNode; // dropdown wrapper
- // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
-
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
this._inNavbar = this._detectNavbar();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$9;
}
-
static get DefaultType() {
return DefaultType$9;
}
-
static get NAME() {
return NAME$a;
- } // Public
-
+ }
+ // Public
toggle() {
return this._isShown() ? this.hide() : this.show();
}
-
show() {
if (isDisabled(this._element) || this._isShown()) {
return;
}
-
const relatedTarget = {
relatedTarget: this._element
};
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);
-
if (showEvent.defaultPrevented) {
return;
}
+ this._createPopper();
- this._createPopper(); // If this is a touch-enabled device we add extra
+ // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
-
if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
for (const element of [].concat(...document.body.children)) {
EventHandler.on(element, 'mouseover', noop);
}
}
-
this._element.focus();
-
this._element.setAttribute('aria-expanded', true);
-
this._menu.classList.add(CLASS_NAME_SHOW$6);
-
this._element.classList.add(CLASS_NAME_SHOW$6);
-
EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);
}
-
hide() {
if (isDisabled(this._element) || !this._isShown()) {
return;
}
-
const relatedTarget = {
relatedTarget: this._element
};
-
this._completeHide(relatedTarget);
}
-
dispose() {
if (this._popper) {
this._popper.destroy();
}
-
super.dispose();
}
-
update() {
this._inNavbar = this._detectNavbar();
-
if (this._popper) {
this._popper.update();
}
- } // Private
-
+ }
+ // Private
_completeHide(relatedTarget) {
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);
-
if (hideEvent.defaultPrevented) {
return;
- } // If this is a touch-enabled device we remove the extra
- // empty mouseover listeners we added for iOS support
-
+ }
+ // If this is a touch-enabled device we remove the extra
+ // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.off(element, 'mouseover', noop);
}
}
-
if (this._popper) {
this._popper.destroy();
}
-
this._menu.classList.remove(CLASS_NAME_SHOW$6);
-
this._element.classList.remove(CLASS_NAME_SHOW$6);
-
this._element.setAttribute('aria-expanded', 'false');
-
Manipulator.removeDataAttribute(this._menu, 'popper');
EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);
}
-
_getConfig(config) {
config = super._getConfig(config);
-
if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
// Popper virtual elements require a getBoundingClientRect method
throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
}
-
return config;
}
-
_createPopper() {
if (typeof Popper__namespace === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
}
-
let referenceElement = this._element;
-
if (this._config.reference === 'parent') {
referenceElement = this._parent;
} else if (isElement(this._config.reference)) {
@@ -2204,65 +1882,49 @@
} else if (typeof this._config.reference === 'object') {
referenceElement = this._config.reference;
}
-
const popperConfig = this._getPopperConfig();
-
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
}
-
_isShown() {
return this._menu.classList.contains(CLASS_NAME_SHOW$6);
}
-
_getPlacement() {
const parentDropdown = this._parent;
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
return PLACEMENT_RIGHT;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
return PLACEMENT_LEFT;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
return PLACEMENT_TOPCENTER;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
return PLACEMENT_BOTTOMCENTER;
- } // We need to trim the value because custom properties can also include spaces
-
+ }
+ // We need to trim the value because custom properties can also include spaces
const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
}
-
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
}
-
_detectNavbar() {
return this._element.closest(SELECTOR_NAVBAR) !== null;
}
-
_getOffset() {
const {
offset
} = this._config;
-
if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10));
}
-
if (typeof offset === 'function') {
return popperData => offset(popperData, this._element);
}
-
return offset;
}
-
_getPopperConfig() {
const defaultBsPopperConfig = {
placement: this._getPlacement(),
@@ -2277,121 +1939,101 @@
offset: this._getOffset()
}
}]
- }; // Disable Popper if we have a static display or Dropdown is in Navbar
+ };
+ // Disable Popper if we have a static display or Dropdown is in Navbar
if (this._inNavbar || this._config.display === 'static') {
Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove
-
defaultBsPopperConfig.modifiers = [{
name: 'applyStyles',
enabled: false
}];
}
-
- return { ...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ return {
+ ...defaultBsPopperConfig,
+ ...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
-
_selectMenuItem({
key,
target
}) {
const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));
-
if (!items.length) {
return;
- } // if target isn't included in items (e.g. when expanding the dropdown)
- // allow cycling to get the last item in case key equals ARROW_UP_KEY
-
+ }
+ // if target isn't included in items (e.g. when expanding the dropdown)
+ // allow cycling to get the last item in case key equals ARROW_UP_KEY
getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Dropdown.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
static clearMenus(event) {
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {
return;
}
-
const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
-
for (const toggle of openToggles) {
const context = Dropdown.getInstance(toggle);
-
if (!context || context._config.autoClose === false) {
continue;
}
-
const composedPath = event.composedPath();
const isMenuTarget = composedPath.includes(context._menu);
-
if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
continue;
- } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
-
+ }
+ // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {
continue;
}
-
const relatedTarget = {
relatedTarget: context._element
};
-
if (event.type === 'click') {
relatedTarget.clickEvent = event;
}
-
context._completeHide(relatedTarget);
}
}
-
static dataApiKeydownHandler(event) {
// If not an UP | DOWN | ESCAPE key => not a dropdown command
// If input/textarea && if key is other than ESCAPE => not a dropdown command
+
const isInput = /input|textarea/i.test(event.target.tagName);
const isEscapeEvent = event.key === ESCAPE_KEY$2;
const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);
-
if (!isUpOrDownEvent && !isEscapeEvent) {
return;
}
-
if (isInput && !isEscapeEvent) {
return;
}
+ event.preventDefault();
- event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
-
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);
const instance = Dropdown.getOrCreateInstance(getToggleButton);
-
if (isUpOrDownEvent) {
event.stopPropagation();
instance.show();
-
instance._selectMenuItem(event);
-
return;
}
-
if (instance._isShown()) {
// else is escape and we check if it is shown
event.stopPropagation();
@@ -2399,13 +2041,12 @@
getToggleButton.focus();
}
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);
@@ -2414,6 +2055,7 @@
event.preventDefault();
Dropdown.getOrCreateInstance(this).toggle();
});
+
/**
* jQuery
*/
@@ -2422,10 +2064,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/scrollBar.js
+ * Bootstrap (v5.3.0-alpha1): util/scrollBar.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2434,6 +2077,7 @@
const SELECTOR_STICKY_CONTENT = '.sticky-top';
const PROPERTY_PADDING = 'padding-right';
const PROPERTY_MARGIN = 'margin-right';
+
/**
* Class definition
*/
@@ -2441,110 +2085,87 @@
class ScrollBarHelper {
constructor() {
this._element = document.body;
- } // Public
-
+ }
+ // Public
getWidth() {
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
const documentWidth = document.documentElement.clientWidth;
return Math.abs(window.innerWidth - documentWidth);
}
-
hide() {
const width = this.getWidth();
-
- this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
-
-
- this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
-
-
+ this._disableOverFlow();
+ // give padding to element to balance the hidden scrollbar width
+ this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+ // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
-
this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
}
-
reset() {
this._resetElementAttributes(this._element, 'overflow');
-
this._resetElementAttributes(this._element, PROPERTY_PADDING);
-
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
-
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
}
-
isOverflowing() {
return this.getWidth() > 0;
- } // Private
-
+ }
+ // Private
_disableOverFlow() {
this._saveInitialAttribute(this._element, 'overflow');
-
this._element.style.overflow = 'hidden';
}
-
_setElementAttributes(selector, styleProperty, callback) {
const scrollbarWidth = this.getWidth();
-
const manipulationCallBack = element => {
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
return;
}
-
this._saveInitialAttribute(element, styleProperty);
-
const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
};
-
this._applyManipulationCallback(selector, manipulationCallBack);
}
-
_saveInitialAttribute(element, styleProperty) {
const actualValue = element.style.getPropertyValue(styleProperty);
-
if (actualValue) {
Manipulator.setDataAttribute(element, styleProperty, actualValue);
}
}
-
_resetElementAttributes(selector, styleProperty) {
const manipulationCallBack = element => {
- const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero
-
+ const value = Manipulator.getDataAttribute(element, styleProperty);
+ // We only want to remove the property if the value is `null`; the value can also be zero
if (value === null) {
element.style.removeProperty(styleProperty);
return;
}
-
Manipulator.removeDataAttribute(element, styleProperty);
element.style.setProperty(styleProperty, value);
};
-
this._applyManipulationCallback(selector, manipulationCallBack);
}
-
_applyManipulationCallback(selector, callBack) {
if (isElement(selector)) {
callBack(selector);
return;
}
-
for (const sel of SelectorEngine.find(selector, this._element)) {
callBack(sel);
}
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/backdrop.js
+ * Bootstrap (v5.3.0-alpha1): util/backdrop.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2560,8 +2181,8 @@
isVisible: true,
// if false, we use the backdrop helper without adding any element to the dom
rootElement: 'body' // give the choice to place backdrop under different elements
-
};
+
const DefaultType$8 = {
className: 'string',
clickCallback: '(function|null)',
@@ -2569,6 +2190,7 @@
isVisible: 'boolean',
rootElement: '(element|string)'
};
+
/**
* Class definition
*/
@@ -2579,118 +2201,95 @@
this._config = this._getConfig(config);
this._isAppended = false;
this._element = null;
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$8;
}
-
static get DefaultType() {
return DefaultType$8;
}
-
static get NAME() {
return NAME$9;
- } // Public
-
+ }
+ // Public
show(callback) {
if (!this._config.isVisible) {
execute(callback);
return;
}
-
this._append();
-
const element = this._getElement();
-
if (this._config.isAnimated) {
reflow(element);
}
-
element.classList.add(CLASS_NAME_SHOW$5);
-
this._emulateAnimation(() => {
execute(callback);
});
}
-
hide(callback) {
if (!this._config.isVisible) {
execute(callback);
return;
}
-
this._getElement().classList.remove(CLASS_NAME_SHOW$5);
-
this._emulateAnimation(() => {
this.dispose();
execute(callback);
});
}
-
dispose() {
if (!this._isAppended) {
return;
}
-
EventHandler.off(this._element, EVENT_MOUSEDOWN);
-
this._element.remove();
-
this._isAppended = false;
- } // Private
-
+ }
+ // Private
_getElement() {
if (!this._element) {
const backdrop = document.createElement('div');
backdrop.className = this._config.className;
-
if (this._config.isAnimated) {
backdrop.classList.add(CLASS_NAME_FADE$4);
}
-
this._element = backdrop;
}
-
return this._element;
}
-
_configAfterMerge(config) {
// use getElement() with the default "body" to get a fresh Element on each instantiation
config.rootElement = getElement(config.rootElement);
return config;
}
-
_append() {
if (this._isAppended) {
return;
}
-
const element = this._getElement();
-
this._config.rootElement.append(element);
-
EventHandler.on(element, EVENT_MOUSEDOWN, () => {
execute(this._config.clickCallback);
});
this._isAppended = true;
}
-
_emulateAnimation(callback) {
executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/focustrap.js
+ * Bootstrap (v5.3.0-alpha1): util/focustrap.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2706,12 +2305,13 @@
const Default$7 = {
autofocus: true,
trapElement: null // The element to trap focus inside of
-
};
+
const DefaultType$7 = {
autofocus: 'boolean',
trapElement: 'element'
};
+
/**
* Class definition
*/
@@ -2722,59 +2322,49 @@
this._config = this._getConfig(config);
this._isActive = false;
this._lastTabNavDirection = null;
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$7;
}
-
static get DefaultType() {
return DefaultType$7;
}
-
static get NAME() {
return NAME$8;
- } // Public
-
+ }
+ // Public
activate() {
if (this._isActive) {
return;
}
-
if (this._config.autofocus) {
this._config.trapElement.focus();
}
-
EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop
-
EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));
EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
this._isActive = true;
}
-
deactivate() {
if (!this._isActive) {
return;
}
-
this._isActive = false;
EventHandler.off(document, EVENT_KEY$5);
- } // Private
-
+ }
+ // Private
_handleFocusin(event) {
const {
trapElement
} = this._config;
-
if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
return;
}
-
const elements = SelectorEngine.focusableChildren(trapElement);
-
if (elements.length === 0) {
trapElement.focus();
} else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
@@ -2783,23 +2373,21 @@
elements[0].focus();
}
}
-
_handleKeydown(event) {
if (event.key !== TAB_KEY) {
return;
}
-
this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): modal.js
+ * Bootstrap (v5.3.0-alpha1): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -2837,6 +2425,7 @@
focus: 'boolean',
keyboard: 'boolean'
};
+
/**
* Class definition
*/
@@ -2850,91 +2439,68 @@
this._isShown = false;
this._isTransitioning = false;
this._scrollBar = new ScrollBarHelper();
-
this._addEventListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$6;
}
-
static get DefaultType() {
return DefaultType$6;
}
-
static get NAME() {
return NAME$7;
- } // Public
-
+ }
+ // Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
}
-
show(relatedTarget) {
if (this._isShown || this._isTransitioning) {
return;
}
-
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {
relatedTarget
});
-
if (showEvent.defaultPrevented) {
return;
}
-
this._isShown = true;
this._isTransitioning = true;
-
this._scrollBar.hide();
-
document.body.classList.add(CLASS_NAME_OPEN);
-
this._adjustDialog();
-
this._backdrop.show(() => this._showElement(relatedTarget));
}
-
hide() {
if (!this._isShown || this._isTransitioning) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);
-
if (hideEvent.defaultPrevented) {
return;
}
-
this._isShown = false;
this._isTransitioning = true;
-
this._focustrap.deactivate();
-
this._element.classList.remove(CLASS_NAME_SHOW$4);
-
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
}
-
dispose() {
for (const htmlElement of [window, this._dialog]) {
EventHandler.off(htmlElement, EVENT_KEY$4);
}
-
this._backdrop.dispose();
-
this._focustrap.deactivate();
-
super.dispose();
}
-
handleUpdate() {
this._adjustDialog();
- } // Private
-
+ }
+ // Private
_initializeBackDrop() {
return new Backdrop({
isVisible: Boolean(this._config.backdrop),
@@ -2942,64 +2508,48 @@
isAnimated: this._isAnimated()
});
}
-
_initializeFocusTrap() {
return new FocusTrap({
trapElement: this._element
});
}
-
_showElement(relatedTarget) {
// try to append dynamic modal
if (!document.body.contains(this._element)) {
document.body.append(this._element);
}
-
this._element.style.display = 'block';
-
this._element.removeAttribute('aria-hidden');
-
this._element.setAttribute('aria-modal', true);
-
this._element.setAttribute('role', 'dialog');
-
this._element.scrollTop = 0;
const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
-
if (modalBody) {
modalBody.scrollTop = 0;
}
-
reflow(this._element);
-
this._element.classList.add(CLASS_NAME_SHOW$4);
-
const transitionComplete = () => {
if (this._config.focus) {
this._focustrap.activate();
}
-
this._isTransitioning = false;
EventHandler.trigger(this._element, EVENT_SHOWN$4, {
relatedTarget
});
};
-
this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
}
-
_addEventListeners() {
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {
if (event.key !== ESCAPE_KEY$1) {
return;
}
-
if (this._config.keyboard) {
event.preventDefault();
this.hide();
return;
}
-
this._triggerBackdropTransition();
});
EventHandler.on(window, EVENT_RESIZE$1, () => {
@@ -3013,157 +2563,124 @@
if (this._element !== event.target || this._element !== event2.target) {
return;
}
-
if (this._config.backdrop === 'static') {
this._triggerBackdropTransition();
-
return;
}
-
if (this._config.backdrop) {
this.hide();
}
});
});
}
-
_hideModal() {
this._element.style.display = 'none';
-
this._element.setAttribute('aria-hidden', true);
-
this._element.removeAttribute('aria-modal');
-
this._element.removeAttribute('role');
-
this._isTransitioning = false;
-
this._backdrop.hide(() => {
document.body.classList.remove(CLASS_NAME_OPEN);
-
this._resetAdjustments();
-
this._scrollBar.reset();
-
EventHandler.trigger(this._element, EVENT_HIDDEN$4);
});
}
-
_isAnimated() {
return this._element.classList.contains(CLASS_NAME_FADE$3);
}
-
_triggerBackdropTransition() {
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);
-
if (hideEvent.defaultPrevented) {
return;
}
-
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
- const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed
-
+ const initialOverflowY = this._element.style.overflowY;
+ // return if the following background transition hasn't yet completed
if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
return;
}
-
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden';
}
-
this._element.classList.add(CLASS_NAME_STATIC);
-
this._queueCallback(() => {
this._element.classList.remove(CLASS_NAME_STATIC);
-
this._queueCallback(() => {
this._element.style.overflowY = initialOverflowY;
}, this._dialog);
}, this._dialog);
-
this._element.focus();
}
+
/**
* The following methods are used to handle overflowing modals
*/
-
_adjustDialog() {
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
-
const scrollbarWidth = this._scrollBar.getWidth();
-
const isBodyOverflowing = scrollbarWidth > 0;
-
if (isBodyOverflowing && !isModalOverflowing) {
const property = isRTL() ? 'paddingLeft' : 'paddingRight';
this._element.style[property] = `${scrollbarWidth}px`;
}
-
if (!isBodyOverflowing && isModalOverflowing) {
const property = isRTL() ? 'paddingRight' : 'paddingLeft';
this._element.style[property] = `${scrollbarWidth}px`;
}
}
-
_resetAdjustments() {
this._element.style.paddingLeft = '';
this._element.style.paddingRight = '';
- } // Static
-
+ }
+ // Static
static jQueryInterface(config, relatedTarget) {
return this.each(function () {
const data = Modal.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](relatedTarget);
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
- const target = getElementFromSelector(this);
-
+ const target = SelectorEngine.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
EventHandler.one(target, EVENT_SHOW$4, showEvent => {
if (showEvent.defaultPrevented) {
// only register focus restorer if modal will actually get shown
return;
}
-
EventHandler.one(target, EVENT_HIDDEN$4, () => {
if (isVisible(this)) {
this.focus();
}
});
- }); // avoid conflict when clicking modal toggler while another one is open
+ });
+ // avoid conflict when clicking modal toggler while another one is open
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);
-
if (alreadyOpen) {
Modal.getInstance(alreadyOpen).hide();
}
-
const data = Modal.getOrCreateInstance(target);
data.toggle(this);
});
enableDismissTrigger(Modal);
+
/**
* jQuery
*/
@@ -3172,10 +2689,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): offcanvas.js
+ * Bootstrap (v5.3.0-alpha1): offcanvas.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -3210,6 +2728,7 @@
keyboard: 'boolean',
scroll: 'boolean'
};
+
/**
* Class definition
*/
@@ -3220,130 +2739,95 @@
this._isShown = false;
this._backdrop = this._initializeBackDrop();
this._focustrap = this._initializeFocusTrap();
-
this._addEventListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$5;
}
-
static get DefaultType() {
return DefaultType$5;
}
-
static get NAME() {
return NAME$6;
- } // Public
-
+ }
+ // Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
}
-
show(relatedTarget) {
if (this._isShown) {
return;
}
-
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {
relatedTarget
});
-
if (showEvent.defaultPrevented) {
return;
}
-
this._isShown = true;
-
this._backdrop.show();
-
if (!this._config.scroll) {
new ScrollBarHelper().hide();
}
-
this._element.setAttribute('aria-modal', true);
-
this._element.setAttribute('role', 'dialog');
-
this._element.classList.add(CLASS_NAME_SHOWING$1);
-
const completeCallBack = () => {
if (!this._config.scroll || this._config.backdrop) {
this._focustrap.activate();
}
-
this._element.classList.add(CLASS_NAME_SHOW$3);
-
this._element.classList.remove(CLASS_NAME_SHOWING$1);
-
EventHandler.trigger(this._element, EVENT_SHOWN$3, {
relatedTarget
});
};
-
this._queueCallback(completeCallBack, this._element, true);
}
-
hide() {
if (!this._isShown) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);
-
if (hideEvent.defaultPrevented) {
return;
}
-
this._focustrap.deactivate();
-
this._element.blur();
-
this._isShown = false;
-
this._element.classList.add(CLASS_NAME_HIDING);
-
this._backdrop.hide();
-
const completeCallback = () => {
this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);
-
this._element.removeAttribute('aria-modal');
-
this._element.removeAttribute('role');
-
if (!this._config.scroll) {
new ScrollBarHelper().reset();
}
-
EventHandler.trigger(this._element, EVENT_HIDDEN$3);
};
-
this._queueCallback(completeCallback, this._element, true);
}
-
dispose() {
this._backdrop.dispose();
-
this._focustrap.deactivate();
-
super.dispose();
- } // Private
-
+ }
+ // Private
_initializeBackDrop() {
const clickCallback = () => {
if (this._config.backdrop === 'static') {
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return;
}
-
this.hide();
- }; // 'static' option will be translated to true, and booleans will keep their value
-
+ };
+ // 'static' option will be translated to true, and booleans will keep their value
const isVisible = Boolean(this._config.backdrop);
return new Backdrop({
className: CLASS_NAME_BACKDROP,
@@ -3353,75 +2837,63 @@
clickCallback: isVisible ? clickCallback : null
});
}
-
_initializeFocusTrap() {
return new FocusTrap({
trapElement: this._element
});
}
-
_addEventListeners() {
EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
if (event.key !== ESCAPE_KEY) {
return;
}
-
if (!this._config.keyboard) {
EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return;
}
-
this.hide();
});
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Offcanvas.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
- const target = getElementFromSelector(this);
-
+ const target = SelectorEngine.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
if (isDisabled(this)) {
return;
}
-
EventHandler.one(target, EVENT_HIDDEN$3, () => {
// focus on trigger when it is closed
if (isVisible(this)) {
this.focus();
}
- }); // avoid conflict when clicking a toggler of an offcanvas, while another is open
+ });
+ // avoid conflict when clicking a toggler of an offcanvas, while another is open
const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
-
if (alreadyOpen && alreadyOpen !== target) {
Offcanvas.getInstance(alreadyOpen).hide();
}
-
const data = Offcanvas.getOrCreateInstance(target);
data.toggle(this);
});
@@ -3438,6 +2910,7 @@
}
});
enableDismissTrigger(Offcanvas);
+
/**
* jQuery
*/
@@ -3446,42 +2919,39 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/sanitizer.js
+ * Bootstrap (v5.3.0-alpha1): util/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
-
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
+
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
-
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
-
const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase();
-
if (allowedAttributeList.includes(attributeName)) {
if (uriAttributes.has(attributeName)) {
return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
}
-
return true;
- } // Check if a regular expression validates the attribute.
-
+ }
+ // Check if a regular expression validates the attribute.
return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
};
-
const DefaultAllowlist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
@@ -3519,42 +2989,36 @@
if (!unsafeHtml.length) {
return unsafeHtml;
}
-
if (sanitizeFunction && typeof sanitizeFunction === 'function') {
return sanitizeFunction(unsafeHtml);
}
-
const domParser = new window.DOMParser();
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
-
for (const element of elements) {
const elementName = element.nodeName.toLowerCase();
-
if (!Object.keys(allowList).includes(elementName)) {
element.remove();
continue;
}
-
const attributeList = [].concat(...element.attributes);
const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
-
for (const attribute of attributeList) {
if (!allowedAttribute(attribute, allowedAttributes)) {
element.removeAttribute(attribute.nodeName);
}
}
}
-
return createdDocument.body.innerHTML;
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/template-factory.js
+ * Bootstrap (v5.3.0-alpha1): util/template-factory.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -3583,6 +3047,7 @@
entry: '(string|element|function|null)',
selector: '(string|element)'
};
+
/**
* Class definition
*/
@@ -3591,65 +3056,53 @@
constructor(config) {
super();
this._config = this._getConfig(config);
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$4;
}
-
static get DefaultType() {
return DefaultType$4;
}
-
static get NAME() {
return NAME$5;
- } // Public
-
+ }
+ // Public
getContent() {
return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
}
-
hasContent() {
return this.getContent().length > 0;
}
-
changeContent(content) {
this._checkContent(content);
-
- this._config.content = { ...this._config.content,
+ this._config.content = {
+ ...this._config.content,
...content
};
return this;
}
-
toHtml() {
const templateWrapper = document.createElement('div');
templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
-
for (const [selector, text] of Object.entries(this._config.content)) {
this._setContent(templateWrapper, text, selector);
}
-
const template = templateWrapper.children[0];
-
const extraClass = this._resolvePossibleFunction(this._config.extraClass);
-
if (extraClass) {
template.classList.add(...extraClass.split(' '));
}
-
return template;
- } // Private
-
+ }
+ // Private
_typeCheckConfig(config) {
super._typeCheckConfig(config);
-
this._checkContent(config.content);
}
-
_checkContent(arg) {
for (const [selector, content] of Object.entries(arg)) {
super._typeCheckConfig({
@@ -3658,61 +3111,49 @@
}, DefaultContentType);
}
}
-
_setContent(template, content, selector) {
const templateElement = SelectorEngine.findOne(selector, template);
-
if (!templateElement) {
return;
}
-
content = this._resolvePossibleFunction(content);
-
if (!content) {
templateElement.remove();
return;
}
-
if (isElement(content)) {
this._putElementInTemplate(getElement(content), templateElement);
-
return;
}
-
if (this._config.html) {
templateElement.innerHTML = this._maybeSanitize(content);
return;
}
-
templateElement.textContent = content;
}
-
_maybeSanitize(arg) {
return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
}
-
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg(this) : arg;
+ return execute(arg, [this]);
}
-
_putElementInTemplate(element, templateElement) {
if (this._config.html) {
templateElement.innerHTML = '';
templateElement.append(element);
return;
}
-
templateElement.textContent = element.textContent;
}
-
}
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tooltip.js
+ * Bootstrap (v5.3.0-alpha1): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -3784,6 +3225,7 @@
title: '(string|element|function)',
trigger: 'string'
};
+
/**
* Class definition
*/
@@ -3793,174 +3235,130 @@
if (typeof Popper__namespace === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
}
+ super(element, config);
- super(element, config); // Private
-
+ // Private
this._isEnabled = true;
this._timeout = 0;
this._isHovered = null;
this._activeTrigger = {};
this._popper = null;
this._templateFactory = null;
- this._newContent = null; // Protected
+ this._newContent = null;
+ // Protected
this.tip = null;
-
this._setListeners();
-
if (!this._config.selector) {
this._fixTitle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$3;
}
-
static get DefaultType() {
return DefaultType$3;
}
-
static get NAME() {
return NAME$4;
- } // Public
-
+ }
+ // Public
enable() {
this._isEnabled = true;
}
-
disable() {
this._isEnabled = false;
}
-
toggleEnabled() {
this._isEnabled = !this._isEnabled;
}
-
toggle() {
if (!this._isEnabled) {
return;
}
-
this._activeTrigger.click = !this._activeTrigger.click;
-
if (this._isShown()) {
this._leave();
-
return;
}
-
this._enter();
}
-
dispose() {
clearTimeout(this._timeout);
EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
-
- if (this.tip) {
- this.tip.remove();
- }
-
if (this._element.getAttribute('data-bs-original-title')) {
this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
}
-
this._disposePopper();
-
super.dispose();
}
-
show() {
if (this._element.style.display === 'none') {
throw new Error('Please use show on visible elements');
}
-
if (!(this._isWithContent() && this._isEnabled)) {
return;
}
-
const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));
const shadowRoot = findShadowRoot(this._element);
-
const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
-
if (showEvent.defaultPrevented || !isInTheDom) {
return;
- } // todo v6 remove this OR make it optional
-
-
- if (this.tip) {
- this.tip.remove();
- this.tip = null;
}
+ // todo v6 remove this OR make it optional
+ this._disposePopper();
const tip = this._getTipElement();
-
this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
-
const {
container
} = this._config;
-
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
container.append(tip);
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
}
+ this._popper = this._createPopper(tip);
+ tip.classList.add(CLASS_NAME_SHOW$2);
- if (this._popper) {
- this._popper.update();
- } else {
- this._popper = this._createPopper(tip);
- }
-
- tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra
+ // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.on(element, 'mouseover', noop);
}
}
-
const complete = () => {
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));
-
if (this._isHovered === false) {
this._leave();
}
-
this._isHovered = false;
};
-
this._queueCallback(complete, this.tip, this._isAnimated());
}
-
hide() {
if (!this._isShown()) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));
-
if (hideEvent.defaultPrevented) {
return;
}
-
const tip = this._getTipElement();
+ tip.classList.remove(CLASS_NAME_SHOW$2);
- tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra
+ // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
-
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
EventHandler.off(element, 'mouseover', noop);
}
}
-
this._activeTrigger[TRIGGER_CLICK] = false;
this._activeTrigger[TRIGGER_FOCUS] = false;
this._activeTrigger[TRIGGER_HOVER] = false;
@@ -3970,135 +3368,107 @@
if (this._isWithActiveTrigger()) {
return;
}
-
if (!this._isHovered) {
- tip.remove();
+ this._disposePopper();
}
-
this._element.removeAttribute('aria-describedby');
-
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));
-
- this._disposePopper();
};
-
this._queueCallback(complete, this.tip, this._isAnimated());
}
-
update() {
if (this._popper) {
this._popper.update();
}
- } // Protected
-
+ }
+ // Protected
_isWithContent() {
return Boolean(this._getTitle());
}
-
_getTipElement() {
if (!this.tip) {
this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
}
-
return this.tip;
}
-
_createTipElement(content) {
- const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6
-
+ const tip = this._getTemplateFactory(content).toHtml();
+ // todo: remove this check on v6
if (!tip) {
return null;
}
-
- tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only
-
+ tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);
+ // todo: on v6 the following can be achieved with CSS only
tip.classList.add(`bs-${this.constructor.NAME}-auto`);
const tipId = getUID(this.constructor.NAME).toString();
tip.setAttribute('id', tipId);
-
if (this._isAnimated()) {
tip.classList.add(CLASS_NAME_FADE$2);
}
-
return tip;
}
-
setContent(content) {
this._newContent = content;
-
if (this._isShown()) {
this._disposePopper();
-
this.show();
}
}
-
_getTemplateFactory(content) {
if (this._templateFactory) {
this._templateFactory.changeContent(content);
} else {
- this._templateFactory = new TemplateFactory({ ...this._config,
+ this._templateFactory = new TemplateFactory({
+ ...this._config,
// the `content` var has to be after `this._config`
// to override config.content in case of popover
content,
extraClass: this._resolvePossibleFunction(this._config.customClass)
});
}
-
return this._templateFactory;
}
-
_getContentForTemplate() {
return {
[SELECTOR_TOOLTIP_INNER]: this._getTitle()
};
}
-
_getTitle() {
return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
- } // Private
-
+ }
+ // Private
_initializeOnDelegatedTarget(event) {
return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
}
-
_isAnimated() {
return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);
}
-
_isShown() {
return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
}
-
_createPopper(tip) {
- const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
+ const placement = execute(this._config.placement, [this, tip, this._element]);
const attachment = AttachmentMap[placement.toUpperCase()];
return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
}
-
_getOffset() {
const {
offset
} = this._config;
-
if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10));
}
-
if (typeof offset === 'function') {
return popperData => offset(popperData, this._element);
}
-
return offset;
}
-
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg.call(this._element) : arg;
+ return execute(arg, [this._element]);
}
-
_getPopperConfig(attachment) {
const defaultBsPopperConfig = {
placement: attachment,
@@ -4133,19 +3503,17 @@
}
}]
};
- return { ...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ return {
+ ...defaultBsPopperConfig,
+ ...execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
-
_setListeners() {
const triggers = this._config.trigger.split(' ');
-
for (const trigger of triggers) {
if (trigger === 'click') {
EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context.toggle();
});
} else if (trigger !== TRIGGER_MANUAL) {
@@ -4153,182 +3521,150 @@
const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);
EventHandler.on(this._element, eventIn, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
-
context._enter();
});
EventHandler.on(this._element, eventOut, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
-
context._leave();
});
}
}
-
this._hideModalHandler = () => {
if (this._element) {
this.hide();
}
};
-
EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
}
-
_fixTitle() {
const title = this._element.getAttribute('title');
-
if (!title) {
return;
}
-
if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
this._element.setAttribute('aria-label', title);
}
-
this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
-
-
this._element.removeAttribute('title');
}
-
_enter() {
if (this._isShown() || this._isHovered) {
this._isHovered = true;
return;
}
-
this._isHovered = true;
-
this._setTimeout(() => {
if (this._isHovered) {
this.show();
}
}, this._config.delay.show);
}
-
_leave() {
if (this._isWithActiveTrigger()) {
return;
}
-
this._isHovered = false;
-
this._setTimeout(() => {
if (!this._isHovered) {
this.hide();
}
}, this._config.delay.hide);
}
-
_setTimeout(handler, timeout) {
clearTimeout(this._timeout);
this._timeout = setTimeout(handler, timeout);
}
-
_isWithActiveTrigger() {
return Object.values(this._activeTrigger).includes(true);
}
-
_getConfig(config) {
const dataAttributes = Manipulator.getDataAttributes(this._element);
-
for (const dataAttribute of Object.keys(dataAttributes)) {
if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
delete dataAttributes[dataAttribute];
}
}
-
- config = { ...dataAttributes,
+ config = {
+ ...dataAttributes,
...(typeof config === 'object' && config ? config : {})
};
config = this._mergeConfigObj(config);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
}
-
_configAfterMerge(config) {
config.container = config.container === false ? document.body : getElement(config.container);
-
if (typeof config.delay === 'number') {
config.delay = {
show: config.delay,
hide: config.delay
};
}
-
if (typeof config.title === 'number') {
config.title = config.title.toString();
}
-
if (typeof config.content === 'number') {
config.content = config.content.toString();
}
-
return config;
}
-
_getDelegateConfig() {
const config = {};
-
- for (const key in this._config) {
- if (this.constructor.Default[key] !== this._config[key]) {
- config[key] = this._config[key];
+ for (const [key, value] of Object.entries(this._config)) {
+ if (this.constructor.Default[key] !== value) {
+ config[key] = value;
}
}
-
config.selector = false;
- config.trigger = 'manual'; // In the future can be replaced with:
+ config.trigger = 'manual';
+
+ // In the future can be replaced with:
// const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
// `Object.fromEntries(keysWithDifferentValues)`
-
return config;
}
-
_disposePopper() {
if (this._popper) {
this._popper.destroy();
-
this._popper = null;
}
- } // Static
-
+ if (this.tip) {
+ this.tip.remove();
+ this.tip = null;
+ }
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Tooltip.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* jQuery
*/
-
defineJQueryPlugin(Tooltip);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): popover.js
+ * Bootstrap (v5.3.0-alpha1): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4336,16 +3672,19 @@
const NAME$3 = 'popover';
const SELECTOR_TITLE = '.popover-header';
const SELECTOR_CONTENT = '.popover-body';
- const Default$2 = { ...Tooltip.Default,
+ const Default$2 = {
+ ...Tooltip.Default,
content: '',
offset: [0, 8],
placement: 'right',
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
trigger: 'click'
};
- const DefaultType$2 = { ...Tooltip.DefaultType,
+ const DefaultType$2 = {
+ ...Tooltip.DefaultType,
content: '(null|string|element|function)'
};
+
/**
* Class definition
*/
@@ -4355,63 +3694,57 @@
static get Default() {
return Default$2;
}
-
static get DefaultType() {
return DefaultType$2;
}
-
static get NAME() {
return NAME$3;
- } // Overrides
-
+ }
+ // Overrides
_isWithContent() {
return this._getTitle() || this._getContent();
- } // Private
-
+ }
+ // Private
_getContentForTemplate() {
return {
[SELECTOR_TITLE]: this._getTitle(),
[SELECTOR_CONTENT]: this._getContent()
};
}
-
_getContent() {
return this._resolvePossibleFunction(this._config.content);
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Popover.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* jQuery
*/
-
defineJQueryPlugin(Popover);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): scrollspy.js
+ * Bootstrap (v5.3.0-alpha1): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4450,14 +3783,16 @@
target: 'element',
threshold: 'array'
};
+
/**
* Class definition
*/
class ScrollSpy extends BaseComponent {
constructor(element, config) {
- super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper
+ super(element, config);
+ // this._element is the observablesContainer and config.target the menu links wrapper
this._targetLinks = new Map();
this._observableSections = new Map();
this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
@@ -4468,87 +3803,75 @@
parentScrollTop: 0
};
this.refresh(); // initialize
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default$1;
}
-
static get DefaultType() {
return DefaultType$1;
}
-
static get NAME() {
return NAME$2;
- } // Public
-
+ }
+ // Public
refresh() {
this._initializeTargetsAndObservables();
-
this._maybeEnableSmoothScroll();
-
if (this._observer) {
this._observer.disconnect();
} else {
this._observer = this._getNewObserver();
}
-
for (const section of this._observableSections.values()) {
this._observer.observe(section);
}
}
-
dispose() {
this._observer.disconnect();
-
super.dispose();
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
// TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
- config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
+ config.target = getElement(config.target) || document.body;
+ // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
-
if (typeof config.threshold === 'string') {
config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
}
-
return config;
}
-
_maybeEnableSmoothScroll() {
if (!this._config.smoothScroll) {
return;
- } // unregister any previous listeners
-
+ }
+ // unregister any previous listeners
EventHandler.off(this._config.target, EVENT_CLICK);
EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
const observableSection = this._observableSections.get(event.target.hash);
-
if (observableSection) {
event.preventDefault();
const root = this._rootElement || window;
const height = observableSection.offsetTop - this._element.offsetTop;
-
if (root.scrollTo) {
root.scrollTo({
top: height,
behavior: 'smooth'
});
return;
- } // Chrome 60 doesn't support `scrollTo`
-
+ }
+ // Chrome 60 doesn't support `scrollTo`
root.scrollTop = height;
}
});
}
-
_getNewObserver() {
const options = {
root: this._rootElement,
@@ -4556,95 +3879,77 @@
rootMargin: this._config.rootMargin
};
return new IntersectionObserver(entries => this._observerCallback(entries), options);
- } // The logic of selection
-
+ }
+ // The logic of selection
_observerCallback(entries) {
const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
-
const activate = entry => {
this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
-
this._process(targetElement(entry));
};
-
const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
this._previousScrollData.parentScrollTop = parentScrollTop;
-
for (const entry of entries) {
if (!entry.isIntersecting) {
this._activeTarget = null;
-
this._clearActiveClass(targetElement(entry));
-
continue;
}
-
- const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop
-
+ const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
+ // if we are scrolling down, pick the bigger offsetTop
if (userScrollsDown && entryIsLowerThanPrevious) {
- activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
-
+ activate(entry);
+ // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
if (!parentScrollTop) {
return;
}
-
continue;
- } // if we are scrolling up, pick the smallest offsetTop
-
+ }
+ // if we are scrolling up, pick the smallest offsetTop
if (!userScrollsDown && !entryIsLowerThanPrevious) {
activate(entry);
}
}
}
-
_initializeTargetsAndObservables() {
this._targetLinks = new Map();
this._observableSections = new Map();
const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
-
for (const anchor of targetLinks) {
// ensure that the anchor has an id and is not disabled
if (!anchor.hash || isDisabled(anchor)) {
continue;
}
+ const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
- const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible
-
+ // ensure that the observableSection exists & is visible
if (isVisible(observableSection)) {
this._targetLinks.set(anchor.hash, anchor);
-
this._observableSections.set(anchor.hash, observableSection);
}
}
}
-
_process(target) {
if (this._activeTarget === target) {
return;
}
-
this._clearActiveClass(this._config.target);
-
this._activeTarget = target;
target.classList.add(CLASS_NAME_ACTIVE$1);
-
this._activateParents(target);
-
EventHandler.trigger(this._element, EVENT_ACTIVATE, {
relatedTarget: target
});
}
-
_activateParents(target) {
// Activate dropdown parents
if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);
return;
}
-
for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
// Set triggered links parents as active
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
@@ -4653,44 +3958,39 @@
}
}
}
-
_clearActiveClass(parent) {
parent.classList.remove(CLASS_NAME_ACTIVE$1);
const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent);
-
for (const node of activeNodes) {
node.classList.remove(CLASS_NAME_ACTIVE$1);
}
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = ScrollSpy.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => {
for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
ScrollSpy.getOrCreateInstance(spy);
}
});
+
/**
* jQuery
*/
@@ -4699,10 +3999,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tab.js
+ * Bootstrap (v5.3.0-alpha1): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -4732,9 +4033,9 @@
const SELECTOR_OUTER = '.nav-item, .list-group-item';
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // todo:v6: could be only `tab`
-
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
+
/**
* Class definition
*/
@@ -4743,122 +4044,97 @@
constructor(element) {
super(element);
this._parent = this._element.closest(SELECTOR_TAB_PANEL);
-
if (!this._parent) {
- return; // todo: should Throw exception on v6
+ return;
+ // todo: should Throw exception on v6
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
- } // Set up initial aria attributes
-
+ }
+ // Set up initial aria attributes
this._setInitialAttributes(this._parent, this._getChildren());
-
EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
- } // Getters
-
+ }
+ // Getters
static get NAME() {
return NAME$1;
- } // Public
-
+ }
+ // Public
show() {
// Shows this elem and deactivate the active sibling if exists
const innerElem = this._element;
-
if (this._elemIsActive(innerElem)) {
return;
- } // Search for active tab on same parent to deactivate it
-
+ }
+ // Search for active tab on same parent to deactivate it
const active = this._getActiveElem();
-
const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, {
relatedTarget: innerElem
}) : null;
const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, {
relatedTarget: active
});
-
if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
return;
}
-
this._deactivate(active, innerElem);
-
this._activate(innerElem, active);
- } // Private
-
+ }
+ // Private
_activate(element, relatedElem) {
if (!element) {
return;
}
-
element.classList.add(CLASS_NAME_ACTIVE);
-
- this._activate(getElementFromSelector(element)); // Search and activate/show the proper section
-
+ this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
element.classList.add(CLASS_NAME_SHOW$1);
return;
}
-
element.removeAttribute('tabindex');
element.setAttribute('aria-selected', true);
-
this._toggleDropDown(element, true);
-
EventHandler.trigger(element, EVENT_SHOWN$1, {
relatedTarget: relatedElem
});
};
-
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
}
-
_deactivate(element, relatedElem) {
if (!element) {
return;
}
-
element.classList.remove(CLASS_NAME_ACTIVE);
element.blur();
-
- this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too
-
+ this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
element.classList.remove(CLASS_NAME_SHOW$1);
return;
}
-
element.setAttribute('aria-selected', false);
element.setAttribute('tabindex', '-1');
-
this._toggleDropDown(element, false);
-
EventHandler.trigger(element, EVENT_HIDDEN$1, {
relatedTarget: relatedElem
});
};
-
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
}
-
_keydown(event) {
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
return;
}
-
event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
-
event.preventDefault();
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true);
-
if (nextActiveElement) {
nextActiveElement.focus({
preventScroll: true
@@ -4866,139 +4142,111 @@
Tab.getOrCreateInstance(nextActiveElement).show();
}
}
-
_getChildren() {
// collection of inner elements
return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
}
-
_getActiveElem() {
return this._getChildren().find(child => this._elemIsActive(child)) || null;
}
-
_setInitialAttributes(parent, children) {
this._setAttributeIfNotExists(parent, 'role', 'tablist');
-
for (const child of children) {
this._setInitialAttributesOnChild(child);
}
}
-
_setInitialAttributesOnChild(child) {
child = this._getInnerElement(child);
-
const isActive = this._elemIsActive(child);
-
const outerElem = this._getOuterElement(child);
-
child.setAttribute('aria-selected', isActive);
-
if (outerElem !== child) {
this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
}
-
if (!isActive) {
child.setAttribute('tabindex', '-1');
}
+ this._setAttributeIfNotExists(child, 'role', 'tab');
- this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too
-
-
+ // set attributes to the related panel too
this._setInitialAttributesOnTargetPanel(child);
}
-
_setInitialAttributesOnTargetPanel(child) {
- const target = getElementFromSelector(child);
-
+ const target = SelectorEngine.getElementFromSelector(child);
if (!target) {
return;
}
-
this._setAttributeIfNotExists(target, 'role', 'tabpanel');
-
if (child.id) {
this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`);
}
}
-
_toggleDropDown(element, open) {
const outerElem = this._getOuterElement(element);
-
if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
return;
}
-
const toggle = (selector, className) => {
const element = SelectorEngine.findOne(selector, outerElem);
-
if (element) {
element.classList.toggle(className, open);
}
};
-
toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1);
outerElem.setAttribute('aria-expanded', open);
}
-
_setAttributeIfNotExists(element, attribute, value) {
if (!element.hasAttribute(attribute)) {
element.setAttribute(attribute, value);
}
}
-
_elemIsActive(elem) {
return elem.classList.contains(CLASS_NAME_ACTIVE);
- } // Try to get the inner element (usually the .nav-link)
-
+ }
+ // Try to get the inner element (usually the .nav-link)
_getInnerElement(elem) {
return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
- } // Try to get the outer element (usually the .nav-item)
-
+ }
+ // Try to get the outer element (usually the .nav-item)
_getOuterElement(elem) {
return elem.closest(SELECTOR_OUTER) || elem;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Tab.getOrCreateInstance(this);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* Data API implementation
*/
-
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
if (isDisabled(this)) {
return;
}
-
Tab.getOrCreateInstance(this).show();
});
+
/**
* Initialize on focus
*/
-
EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
Tab.getOrCreateInstance(element);
@@ -5012,10 +4260,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): toast.js
+ * Bootstrap (v5.3.0-alpha1): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -5033,7 +4282,6 @@
const EVENT_SHOWN = `shown${EVENT_KEY}`;
const CLASS_NAME_FADE = 'fade';
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
-
const CLASS_NAME_SHOW = 'show';
const CLASS_NAME_SHOWING = 'showing';
const DefaultType = {
@@ -5046,6 +4294,7 @@
autohide: true,
delay: 5000
};
+
/**
* Class definition
*/
@@ -5056,109 +4305,80 @@
this._timeout = null;
this._hasMouseInteraction = false;
this._hasKeyboardInteraction = false;
-
this._setListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
show() {
const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
-
if (showEvent.defaultPrevented) {
return;
}
-
this._clearTimeout();
-
if (this._config.animation) {
this._element.classList.add(CLASS_NAME_FADE);
}
-
const complete = () => {
this._element.classList.remove(CLASS_NAME_SHOWING);
-
EventHandler.trigger(this._element, EVENT_SHOWN);
-
this._maybeScheduleHide();
};
-
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
-
-
reflow(this._element);
-
this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
-
this._queueCallback(complete, this._element, this._config.animation);
}
-
hide() {
if (!this.isShown()) {
return;
}
-
const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
-
if (hideEvent.defaultPrevented) {
return;
}
-
const complete = () => {
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
-
-
this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
-
EventHandler.trigger(this._element, EVENT_HIDDEN);
};
-
this._element.classList.add(CLASS_NAME_SHOWING);
-
this._queueCallback(complete, this._element, this._config.animation);
}
-
dispose() {
this._clearTimeout();
-
if (this.isShown()) {
this._element.classList.remove(CLASS_NAME_SHOW);
}
-
super.dispose();
}
-
isShown() {
return this._element.classList.contains(CLASS_NAME_SHOW);
- } // Private
+ }
+ // Private
_maybeScheduleHide() {
if (!this._config.autohide) {
return;
}
-
if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
return;
}
-
this._timeout = setTimeout(() => {
this.hide();
}, this._config.delay);
}
-
_onInteraction(event, isInteracting) {
switch (event.type) {
case 'mouseover':
@@ -5167,7 +4387,6 @@
this._hasMouseInteraction = isInteracting;
break;
}
-
case 'focusin':
case 'focusout':
{
@@ -5175,56 +4394,47 @@
break;
}
}
-
if (isInteracting) {
this._clearTimeout();
-
return;
}
-
const nextElement = event.relatedTarget;
-
if (this._element === nextElement || this._element.contains(nextElement)) {
return;
}
-
this._maybeScheduleHide();
}
-
_setListeners() {
EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
}
-
_clearTimeout() {
clearTimeout(this._timeout);
this._timeout = null;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Toast.getOrCreateInstance(this, config);
-
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
}
});
}
-
}
+
/**
* Data API implementation
*/
-
enableDismissTrigger(Toast);
+
/**
* jQuery
*/
@@ -5233,7 +4443,7 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): index.umd.js
+ * Bootstrap (v5.3.0-alpha1): index.umd.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.js.map
index 984200d68..d91d980b8 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.js.map
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.js.map
@@ -1 +1 @@
-{"version":3,"file":"bootstrap.js","sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/selector-engine.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(object)\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getElementFromSelector,\n getjQuery,\n getNextActiveElement,\n getSelectorFromElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const handlerKey of Object.keys(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const keyHandlers of Object.keys(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta) {\n for (const [key, value] of Object.entries(meta || {})) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index'\nimport Manipulator from '../dom/manipulator'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const property of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport { executeAfterTransition, getElement } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Config from './util/config'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.2.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config'\nimport EventHandler from '../dom/event-handler'\nimport { execute } from './index'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport Swipe from './util/swipe'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getSelectorFromElement,\n reflow\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n for (const element of selectorElements) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow } from './index'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isVisible\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer'\nimport { getElement, isElement } from '../util/index'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg(this) : arg\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'\nimport { DefaultAllowlist } from './util/sanitizer'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport TemplateFactory from './util/template-factory'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this.tip) {\n this.tip.remove()\n }\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = this._createPopper(tip)\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n tip.remove()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n\n this._disposePopper()\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, getNextActiveElement, isDisabled } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert'\nimport Button from './src/button'\nimport Carousel from './src/carousel'\nimport Collapse from './src/collapse'\nimport Dropdown from './src/dropdown'\nimport Modal from './src/modal'\nimport Offcanvas from './src/offcanvas'\nimport Popover from './src/popover'\nimport ScrollSpy from './src/scrollspy'\nimport Tab from './src/tab'\nimport Toast from './src/toast'\nimport Tooltip from './src/tooltip'\n\nexport default {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip\n}\n"],"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","toType","object","undefined","Object","prototype","toString","call","match","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getSelector","element","selector","getAttribute","hrefAttribute","includes","startsWith","split","trim","getSelectorFromElement","querySelector","getElementFromSelector","getTransitionDurationFromElement","transitionDuration","transitionDelay","window","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","bootstrapHandler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","domElements","querySelectorAll","domElement","findHandler","events","callable","delegationSelector","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","replace","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","keys","on","one","inNamespace","isNamespace","elementEvent","slice","keyHandlers","trigger","args","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","entries","defineProperty","configurable","get","elementMap","Map","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","VERSION","BaseComponent","_element","_config","Data","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","eventName","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","close","closeEvent","_destroyElement","each","data","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","toggle","button","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","touches","clientX","_eventIsPointerPenTouch","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","endCallBack","clearTimeout","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","slideEvent","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","startEvent","activeInstance","dimension","_getDimension","style","complete","capitalizedDimension","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","selectorElements","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","autoClose","boundary","display","offset","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","showEvent","_createPopper","focus","_completeHide","destroy","update","hideEvent","Popper","referenceElement","_getPopperConfig","createPopper","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","manipulationCallBack","setProperty","_applyManipulationCallback","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","scroll","Offcanvas","blur","completeCallback","position","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","domParser","DOMParser","createdDocument","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSOUT","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","shadowRoot","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","hash","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","id","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"bootstrap.js","sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index.js'\nimport Manipulator from '../dom/manipulator.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.0-alpha1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { isDisabled } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config.js'\nimport EventHandler from '../dom/event-handler.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Swipe from './util/swipe.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport BaseComponent from './base-component.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport BaseComponent from './base-component.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport Tooltip from './tooltip.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert.js'\nimport Button from './src/button.js'\nimport Carousel from './src/carousel.js'\nimport Collapse from './src/collapse.js'\nimport Dropdown from './src/dropdown.js'\nimport Modal from './src/modal.js'\nimport Offcanvas from './src/offcanvas.js'\nimport Popover from './src/popover.js'\nimport ScrollSpy from './src/scrollspy.js'\nimport Tab from './src/tab.js'\nimport Toast from './src/toast.js'\nimport Tooltip from './src/tooltip.js'\n\nexport default {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip\n}\n"],"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","toType","object","undefined","Object","prototype","toString","call","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getTransitionDurationFromElement","element","transitionDuration","transitionDelay","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","querySelector","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","bootstrapHandler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","domElements","querySelectorAll","domElement","findHandler","events","callable","delegationSelector","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","handlers","previousFunction","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","keys","elementEvent","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","defineProperty","configurable","get","elementMap","Map","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","JSON","parse","decodeURIComponent","normalizeDataKey","chr","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","RegExp","test","TypeError","toUpperCase","VERSION","BaseComponent","_element","_config","Data","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","getInstance","getOrCreateInstance","eventName","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","close","closeEvent","_destroyElement","each","data","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","toggle","button","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","touches","clientX","_eventIsPointerPenTouch","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","endCallBack","clearTimeout","swipeConfig","_directionToOrder","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","_orderToDirection","slideEvent","isCycling","directionalClassName","orderClassName","completeCallBack","_isAnimated","clearInterval","carousel","slideIndex","carousels","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","startEvent","activeInstance","dimension","_getDimension","style","complete","capitalizedDimension","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","autoClose","boundary","display","offset","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","showEvent","_createPopper","focus","_completeHide","destroy","update","hideEvent","Popper","referenceElement","_getPopperConfig","createPopper","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","clearMenus","openToggles","context","composedPath","isMenuTarget","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","manipulationCallBack","setProperty","_applyManipulationCallback","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDE_PREVENTED","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","CLASS_NAME_OPEN","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","transitionComplete","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","scroll","Offcanvas","blur","completeCallback","position","uriAttributes","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","domParser","DOMParser","createdDocument","parseFromString","elementName","attributeList","allowedAttributes","innerHTML","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","DISALLOWED_ATTRIBUTES","CLASS_NAME_MODAL","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSOUT","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","shadowRoot","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","SELECTOR_TITLE","SELECTOR_CONTENT","Popover","_getContent","EVENT_ACTIVATE","CLASS_NAME_DROPDOWN_ITEM","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","hash","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","CLASS_DROPDOWN","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","EVENT_MOUSEOVER","EVENT_MOUSEOUT","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.min.js b/vendor/twbs/bootstrap/dist/js/bootstrap.min.js
index 836e1768a..ce8fc283f 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.min.js
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.min.js
@@ -1,7 +1,7 @@
/*!
- * Bootstrap v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
-!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e(t.Popper)}(this,(function(t){"use strict";function e(t){if(t&&t.__esModule)return t;const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t)for(const i in t)if("default"!==i){const s=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,s.get?s:{enumerable:!0,get:()=>t[i]})}return e.default=t,Object.freeze(e)}const i=e(t),s="transitionend",n=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},o=t=>{const e=n(t);return e&&document.querySelector(e)?e:null},r=t=>{const e=n(t);return e?document.querySelector(e):null},a=t=>{t.dispatchEvent(new Event(s))},l=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),c=t=>l(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,h=t=>{if(!l(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},d=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),u=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?u(t.parentNode):null},_=()=>{},g=t=>{t.offsetHeight},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,p=[],m=()=>"rtl"===document.documentElement.dir,b=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,s=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=s,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of p)t()})),p.push(e)):e()},v=t=>{"function"==typeof t&&t()},y=(t,e,i=!0)=>{if(!i)return void v(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const s=Number.parseFloat(e),n=Number.parseFloat(i);return s||n?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let o=!1;const r=({target:i})=>{i===e&&(o=!0,e.removeEventListener(s,r),v(t))};e.addEventListener(s,r),setTimeout((()=>{o||a(e)}),n)},w=(t,e,i,s)=>{const n=t.length;let o=t.indexOf(e);return-1===o?!i&&s?t[n-1]:t[0]:(o+=i?1:-1,s&&(o=(o+n)%n),t[Math.max(0,Math.min(o,n-1))])},A=/[^.]*(?=\..*)\.|.*/,E=/\..*/,C=/::\d+$/,T={};let k=1;const L={mouseenter:"mouseover",mouseleave:"mouseout"},O=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function I(t,e){return e&&`${e}::${k++}`||t.uidEvent||k++}function S(t){const e=I(t);return t.uidEvent=e,T[e]=T[e]||{},T[e]}function D(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function N(t,e,i){const s="string"==typeof e,n=s?i:e||i;let o=j(t);return O.has(o)||(o=t),[s,n,o]}function P(t,e,i,s,n){if("string"!=typeof e||!t)return;let[o,r,a]=N(e,i,s);if(e in L){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=S(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&n);const d=I(r,e.replace(A,"")),u=o?function(t,e,i){return function s(n){const o=t.querySelectorAll(e);for(let{target:r}=n;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return F(n,{delegateTarget:r}),s.oneOff&&$.off(t,n.type,e,i),i.apply(r,[n])}}(t,i,r):function(t,e){return function i(s){return F(s,{delegateTarget:t}),i.oneOff&&$.off(t,s.type,e),e.apply(t,[s])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=n,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function x(t,e,i,s,n){const o=D(e[i],s,n);o&&(t.removeEventListener(i,o,Boolean(n)),delete e[i][o.uidEvent])}function M(t,e,i,s){const n=e[i]||{};for(const o of Object.keys(n))if(o.includes(s)){const s=n[o];x(t,e,i,s.callable,s.delegationSelector)}}function j(t){return t=t.replace(E,""),L[t]||t}const $={on(t,e,i,s){P(t,e,i,s,!1)},one(t,e,i,s){P(t,e,i,s,!0)},off(t,e,i,s){if("string"!=typeof e||!t)return;const[n,o,r]=N(e,i,s),a=r!==e,l=S(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))M(t,l,i,e.slice(1));for(const i of Object.keys(c)){const s=i.replace(C,"");if(!a||e.includes(s)){const e=c[i];x(t,l,r,e.callable,e.delegationSelector)}}}else{if(!Object.keys(c).length)return;x(t,l,r,o,n?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const s=f();let n=null,o=!0,r=!0,a=!1;e!==j(e)&&s&&(n=s.Event(e,i),s(t).trigger(n),o=!n.isPropagationStopped(),r=!n.isImmediatePropagationStopped(),a=n.isDefaultPrevented());let l=new Event(e,{bubbles:o,cancelable:!0});return l=F(l,i),a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&n&&n.preventDefault(),l}};function F(t,e){for(const[i,s]of Object.entries(e||{}))try{t[i]=s}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>s})}return t}const z=new Map,H={set(t,e,i){z.has(t)||z.set(t,new Map);const s=z.get(t);s.has(e)||0===s.size?s.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(t,e)=>z.has(t)&&z.get(t).get(e)||null,remove(t,e){if(!z.has(t))return;const i=z.get(t);i.delete(e),0===i.size&&z.delete(t)}};function q(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function B(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const W={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${B(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${B(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const s of i){let i=s.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=q(t.dataset[s])}return e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${B(e)}`))};class R{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=l(e)?W.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...l(e)?W.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const s of Object.keys(e)){const n=e[s],o=t[s],r=l(o)?"element":null==(i=o)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(n).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${s}" provided type "${r}" but expected type "${n}".`)}var i}}class V extends R{constructor(t,e){super(),(t=c(t))&&(this._element=t,this._config=this._getConfig(e),H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),$.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){y(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return H.get(c(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.2.2"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const K=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;$.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),d(this))return;const n=r(this)||this.closest(`.${s}`);t.getOrCreateInstance(n)[e]()}))};class Q extends V{static get NAME(){return"alert"}close(){if($.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),$.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}K(Q,"close"),b(Q);const X='[data-bs-toggle="button"]';class Y extends V{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}$.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),b(Y);const U={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let s=t.parentNode.closest(e);for(;s;)i.push(s),s=s.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!d(t)&&h(t)))}},G={endCallback:null,leftCallback:null,rightCallback:null},J={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Z extends R{constructor(t,e){super(),this._element=t,t&&Z.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return G}static get DefaultType(){return J}static get NAME(){return"swipe"}dispose(){$.off(this._element,".bs.swipe")}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),v(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&v(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?($.on(this._element,"pointerdown.bs.swipe",(t=>this._start(t))),$.on(this._element,"pointerup.bs.swipe",(t=>this._end(t))),this._element.classList.add("pointer-event")):($.on(this._element,"touchstart.bs.swipe",(t=>this._start(t))),$.on(this._element,"touchmove.bs.swipe",(t=>this._move(t))),$.on(this._element,"touchend.bs.swipe",(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const tt="next",et="prev",it="left",st="right",nt="slid.bs.carousel",ot="carousel",rt="active",at={ArrowLeft:st,ArrowRight:it},lt={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},ct={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class ht extends V{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=U.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===ot&&this.cycle()}static get Default(){return lt}static get DefaultType(){return ct}static get NAME(){return"carousel"}next(){this._slide(tt)}nextWhenVisible(){!document.hidden&&h(this._element)&&this.next()}prev(){this._slide(et)}pause(){this._isSliding&&a(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?$.one(this._element,nt,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void $.one(this._element,nt,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const s=t>i?tt:et;this._slide(s,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&$.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&($.on(this._element,"mouseenter.bs.carousel",(()=>this.pause())),$.on(this._element,"mouseleave.bs.carousel",(()=>this._maybeEnableCycle()))),this._config.touch&&Z.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of U.find(".carousel-item img",this._element))$.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(it)),rightCallback:()=>this._slide(this._directionToOrder(st)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new Z(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=at[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=U.findOne(".active",this._indicatorsElement);e.classList.remove(rt),e.removeAttribute("aria-current");const i=U.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(rt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),s=t===tt,n=e||w(this._getItems(),i,s,this._config.wrap);if(n===i)return;const o=this._getItemIndex(n),r=e=>$.trigger(this._element,e,{relatedTarget:n,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r("slide.bs.carousel").defaultPrevented)return;if(!i||!n)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=n;const l=s?"carousel-item-start":"carousel-item-end",c=s?"carousel-item-next":"carousel-item-prev";n.classList.add(c),g(n),i.classList.add(l),n.classList.add(l),this._queueCallback((()=>{n.classList.remove(l,c),n.classList.add(rt),i.classList.remove(rt,c,l),this._isSliding=!1,r(nt)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return U.findOne(".active.carousel-item",this._element)}_getItems(){return U.find(".carousel-item",this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return m()?t===it?et:tt:t===it?tt:et}_orderToDirection(t){return m()?t===et?it:st:t===et?st:it}static jQueryInterface(t){return this.each((function(){const e=ht.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}$.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",(function(t){const e=r(this);if(!e||!e.classList.contains(ot))return;t.preventDefault();const i=ht.getOrCreateInstance(e),s=this.getAttribute("data-bs-slide-to");return s?(i.to(s),void i._maybeEnableCycle()):"next"===W.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),$.on(window,"load.bs.carousel.data-api",(()=>{const t=U.find('[data-bs-ride="carousel"]');for(const e of t)ht.getOrCreateInstance(e)})),b(ht);const dt="show",ut="collapse",_t="collapsing",gt='[data-bs-toggle="collapse"]',ft={parent:null,toggle:!0},pt={parent:"(null|element)",toggle:"boolean"};class mt extends V{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=U.find(gt);for(const t of i){const e=o(t),i=U.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return ft}static get DefaultType(){return pt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>mt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if($.trigger(this._element,"show.bs.collapse").defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(ut),this._element.classList.add(_t),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(_t),this._element.classList.add(ut,dt),this._element.style[e]="",$.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if($.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,g(this._element),this._element.classList.add(_t),this._element.classList.remove(ut,dt);for(const t of this._triggerArray){const e=r(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(_t),this._element.classList.add(ut),$.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(dt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=c(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(gt);for(const e of t){const t=r(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=U.find(":scope .collapse .collapse",this._config.parent);return U.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=mt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}$.on(document,"click.bs.collapse.data-api",gt,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=o(this),i=U.find(e);for(const t of i)mt.getOrCreateInstance(t,{toggle:!1}).toggle()})),b(mt);const bt="dropdown",vt="ArrowUp",yt="ArrowDown",wt="click.bs.dropdown.data-api",At="keydown.bs.dropdown.data-api",Et="show",Ct='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Tt=`${Ct}.show`,kt=".dropdown-menu",Lt=m()?"top-end":"top-start",Ot=m()?"top-start":"top-end",It=m()?"bottom-end":"bottom-start",St=m()?"bottom-start":"bottom-end",Dt=m()?"left-start":"right-start",Nt=m()?"right-start":"left-start",Pt={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},xt={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Mt extends V{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=U.next(this._element,kt)[0]||U.prev(this._element,kt)[0]||U.findOne(kt,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Pt}static get DefaultType(){return xt}static get NAME(){return bt}toggle(){return this._isShown()?this.hide():this.show()}show(){if(d(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!$.trigger(this._element,"show.bs.dropdown",t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))$.on(t,"mouseover",_);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Et),this._element.classList.add(Et),$.trigger(this._element,"shown.bs.dropdown",t)}}hide(){if(d(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!$.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))$.off(t,"mouseover",_);this._popper&&this._popper.destroy(),this._menu.classList.remove(Et),this._element.classList.remove(Et),this._element.setAttribute("aria-expanded","false"),W.removeDataAttribute(this._menu,"popper"),$.trigger(this._element,"hidden.bs.dropdown",t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!l(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${bt.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===i)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:l(this._config.reference)?t=c(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=i.createPopper(t,this._menu,e)}_isShown(){return this._menu.classList.contains(Et)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Dt;if(t.classList.contains("dropstart"))return Nt;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Ot:Lt:e?St:It}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(W.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=U.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>h(t)));i.length&&w(i,e,t===yt,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Mt.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=U.find(Tt);for(const i of e){const e=Mt.getInstance(i);if(!e||!1===e._config.autoClose)continue;const s=t.composedPath(),n=s.includes(e._menu);if(s.includes(e._element)||"inside"===e._config.autoClose&&!n||"outside"===e._config.autoClose&&n)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,s=[vt,yt].includes(t.key);if(!s&&!i)return;if(e&&!i)return;t.preventDefault();const n=this.matches(Ct)?this:U.prev(this,Ct)[0]||U.next(this,Ct)[0]||U.findOne(Ct,t.delegateTarget.parentNode),o=Mt.getOrCreateInstance(n);if(s)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),n.focus())}}$.on(document,At,Ct,Mt.dataApiKeydownHandler),$.on(document,At,kt,Mt.dataApiKeydownHandler),$.on(document,wt,Mt.clearMenus),$.on(document,"keyup.bs.dropdown.data-api",Mt.clearMenus),$.on(document,wt,Ct,(function(t){t.preventDefault(),Mt.getOrCreateInstance(this).toggle()})),b(Mt);const jt=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",$t=".sticky-top",Ft="padding-right",zt="margin-right";class Ht{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Ft,(e=>e+t)),this._setElementAttributes(jt,Ft,(e=>e+t)),this._setElementAttributes($t,zt,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Ft),this._resetElementAttributes(jt,Ft),this._resetElementAttributes($t,zt)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const s=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+s)return;this._saveInitialAttribute(t,e);const n=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(n))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&W.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=W.getDataAttribute(t,e);null!==i?(W.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(l(t))e(t);else for(const i of U.find(t,this._element))e(i)}}const qt="show",Bt="mousedown.bs.backdrop",Wt={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Rt={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Vt extends R{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Wt}static get DefaultType(){return Rt}static get NAME(){return"backdrop"}show(t){if(!this._config.isVisible)return void v(t);this._append();const e=this._getElement();this._config.isAnimated&&g(e),e.classList.add(qt),this._emulateAnimation((()=>{v(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(qt),this._emulateAnimation((()=>{this.dispose(),v(t)}))):v(t)}dispose(){this._isAppended&&($.off(this._element,Bt),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=c(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),$.on(t,Bt,(()=>{v(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){y(t,this._getElement(),this._config.isAnimated)}}const Kt=".bs.focustrap",Qt="backward",Xt={autofocus:!0,trapElement:null},Yt={autofocus:"boolean",trapElement:"element"};class Ut extends R{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Xt}static get DefaultType(){return Yt}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),$.off(document,Kt),$.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),$.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,$.off(document,Kt))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=U.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===Qt?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Qt:"forward")}}const Gt="hidden.bs.modal",Jt="show.bs.modal",Zt="modal-open",te="show",ee="modal-static",ie={backdrop:!0,focus:!0,keyboard:!0},se={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class ne extends V{constructor(t,e){super(t,e),this._dialog=U.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new Ht,this._addEventListeners()}static get Default(){return ie}static get DefaultType(){return se}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||$.trigger(this._element,Jt,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Zt),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&($.trigger(this._element,"hide.bs.modal").defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(te),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const t of[window,this._dialog])$.off(t,".bs.modal");this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Vt({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ut({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=U.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),g(this._element),this._element.classList.add(te),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,$.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){$.on(this._element,"keydown.dismiss.bs.modal",(t=>{if("Escape"===t.key)return this._config.keyboard?(t.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),$.on(window,"resize.bs.modal",(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),$.on(this._element,"mousedown.dismiss.bs.modal",(t=>{$.one(this._element,"click.dismiss.bs.modal",(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Zt),this._resetAdjustments(),this._scrollBar.reset(),$.trigger(this._element,Gt)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if($.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(ee)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(ee),this._queueCallback((()=>{this._element.classList.remove(ee),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=m()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=m()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=ne.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}$.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=r(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),$.one(e,Jt,(t=>{t.defaultPrevented||$.one(e,Gt,(()=>{h(this)&&this.focus()}))}));const i=U.findOne(".modal.show");i&&ne.getInstance(i).hide(),ne.getOrCreateInstance(e).toggle(this)})),K(ne),b(ne);const oe="show",re="showing",ae="hiding",le=".offcanvas.show",ce="hidePrevented.bs.offcanvas",he="hidden.bs.offcanvas",de={backdrop:!0,keyboard:!0,scroll:!1},ue={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class _e extends V{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return de}static get DefaultType(){return ue}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||$.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new Ht).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(re),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(oe),this._element.classList.remove(re),$.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&($.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(ae),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(oe,ae),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new Ht).reset(),$.trigger(this._element,he)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Vt({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():$.trigger(this._element,ce)}:null})}_initializeFocusTrap(){return new Ut({trapElement:this._element})}_addEventListeners(){$.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():$.trigger(this._element,ce))}))}static jQueryInterface(t){return this.each((function(){const e=_e.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}$.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=r(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),d(this))return;$.one(e,he,(()=>{h(this)&&this.focus()}));const i=U.findOne(le);i&&i!==e&&_e.getInstance(i).hide(),_e.getOrCreateInstance(e).toggle(this)})),$.on(window,"load.bs.offcanvas.data-api",(()=>{for(const t of U.find(le))_e.getOrCreateInstance(t).show()})),$.on(window,"resize.bs.offcanvas",(()=>{for(const t of U.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&_e.getOrCreateInstance(t).hide()})),K(_e),b(_e);const ge=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),fe=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,pe=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,me=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!ge.has(i)||Boolean(fe.test(t.nodeValue)||pe.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},be={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},ve={allowList:be,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},ye={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},we={entry:"(string|element|function|null)",selector:"(string|element)"};class Ae extends R{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return ve}static get DefaultType(){return ye}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},we)}_setContent(t,e,i){const s=U.findOne(i,t);s&&((e=this._resolvePossibleFunction(e))?l(e)?this._putElementInTemplate(c(e),s):this._config.html?s.innerHTML=this._maybeSanitize(e):s.textContent=e:s.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const s=(new window.DOMParser).parseFromString(t,"text/html"),n=[].concat(...s.body.querySelectorAll("*"));for(const t of n){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const s=[].concat(...t.attributes),n=[].concat(e["*"]||[],e[i]||[]);for(const e of s)me(e,n)||t.removeAttribute(e.nodeName)}return s.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return"function"==typeof t?t(this):t}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Ee=new Set(["sanitize","allowList","sanitizeFn"]),Ce="fade",Te="show",ke=".modal",Le="hide.bs.modal",Oe="hover",Ie="focus",Se={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},De={allowList:be,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},Ne={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Pe extends V{constructor(t,e){if(void 0===i)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return De}static get DefaultType(){return Ne}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),$.off(this._element.closest(ke),Le,this._hideModalHandler),this.tip&&this.tip.remove(),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=$.trigger(this._element,this.constructor.eventName("show")),e=(u(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this.tip&&(this.tip.remove(),this.tip=null);const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:s}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(s.append(i),$.trigger(this._element,this.constructor.eventName("inserted"))),this._popper?this._popper.update():this._popper=this._createPopper(i),i.classList.add(Te),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))$.on(t,"mouseover",_);this._queueCallback((()=>{$.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if($.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;const t=this._getTipElement();if(t.classList.remove(Te),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))$.off(t,"mouseover",_);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||t.remove(),this._element.removeAttribute("aria-describedby"),$.trigger(this._element,this.constructor.eventName("hidden")),this._disposePopper())}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Ce,Te),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(Ce),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Ae({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ce)}_isShown(){return this.tip&&this.tip.classList.contains(Te)}_createPopper(t){const e="function"==typeof this._config.placement?this._config.placement.call(this,t,this._element):this._config.placement,s=Se[e.toUpperCase()];return i.createPopper(this._element,t,this._getPopperConfig(s))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)$.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===Oe?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===Oe?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");$.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?Ie:Oe]=!0,e._enter()})),$.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?Ie:Oe]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},$.on(this._element.closest(ke),Le,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=W.getDataAttributes(this._element);for(const t of Object.keys(e))Ee.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:c(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=Pe.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}b(Pe);const xe={...Pe.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},Me={...Pe.DefaultType,content:"(null|string|element|function)"};class je extends Pe{static get Default(){return xe}static get DefaultType(){return Me}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=je.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}b(je);const $e="click.bs.scrollspy",Fe="active",ze="[href]",He={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},qe={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Be extends V{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return He}static get DefaultType(){return qe}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=c(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&($.off(this._config.target,$e),$.on(this._config.target,$e,ze,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,s=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:s,behavior:"smooth"});i.scrollTop=s}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},s=(this._rootElement||document.documentElement).scrollTop,n=s>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=s;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(n&&t){if(i(o),!s)return}else n||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=U.find(ze,this._config.target);for(const e of t){if(!e.hash||d(e))continue;const t=U.findOne(e.hash,this._element);h(t)&&(this._targetLinks.set(e.hash,e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(Fe),this._activateParents(t),$.trigger(this._element,"activate.bs.scrollspy",{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))U.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(Fe);else for(const e of U.parents(t,".nav, .list-group"))for(const t of U.prev(e,".nav-link, .nav-item > .nav-link, .list-group-item"))t.classList.add(Fe)}_clearActiveClass(t){t.classList.remove(Fe);const e=U.find("[href].active",t);for(const t of e)t.classList.remove(Fe)}static jQueryInterface(t){return this.each((function(){const e=Be.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}$.on(window,"load.bs.scrollspy.data-api",(()=>{for(const t of U.find('[data-bs-spy="scroll"]'))Be.getOrCreateInstance(t)})),b(Be);const We="ArrowLeft",Re="ArrowRight",Ve="ArrowUp",Ke="ArrowDown",Qe="active",Xe="fade",Ye="show",Ue='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Ge=`.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle), ${Ue}`;class Je extends V{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),$.on(this._element,"keydown.bs.tab",(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?$.trigger(e,"hide.bs.tab",{relatedTarget:t}):null;$.trigger(t,"show.bs.tab",{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Qe),this._activate(r(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),$.trigger(t,"shown.bs.tab",{relatedTarget:e})):t.classList.add(Ye)}),t,t.classList.contains(Xe)))}_deactivate(t,e){t&&(t.classList.remove(Qe),t.blur(),this._deactivate(r(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),$.trigger(t,"hidden.bs.tab",{relatedTarget:e})):t.classList.remove(Ye)}),t,t.classList.contains(Xe)))}_keydown(t){if(![We,Re,Ve,Ke].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=[Re,Ke].includes(t.key),i=w(this._getChildren().filter((t=>!d(t))),t.target,e,!0);i&&(i.focus({preventScroll:!0}),Je.getOrCreateInstance(i).show())}_getChildren(){return U.find(Ge,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=r(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const s=(t,s)=>{const n=U.findOne(t,i);n&&n.classList.toggle(s,e)};s(".dropdown-toggle",Qe),s(".dropdown-menu",Ye),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Qe)}_getInnerElement(t){return t.matches(Ge)?t:U.findOne(Ge,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Je.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}$.on(document,"click.bs.tab",Ue,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),d(this)||Je.getOrCreateInstance(this).show()})),$.on(window,"load.bs.tab",(()=>{for(const t of U.find('.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]'))Je.getOrCreateInstance(t)})),b(Je);const Ze="hide",ti="show",ei="showing",ii={animation:"boolean",autohide:"boolean",delay:"number"},si={animation:!0,autohide:!0,delay:5e3};class ni extends V{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return si}static get DefaultType(){return ii}static get NAME(){return"toast"}show(){$.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Ze),g(this._element),this._element.classList.add(ti,ei),this._queueCallback((()=>{this._element.classList.remove(ei),$.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&($.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(ei),this._queueCallback((()=>{this._element.classList.add(Ze),this._element.classList.remove(ei,ti),$.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(ti),super.dispose()}isShown(){return this._element.classList.contains(ti)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){$.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),$.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),$.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),$.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ni.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return K(ni),b(ni),{Alert:Q,Button:Y,Carousel:ht,Collapse:mt,Dropdown:Mt,Modal:ne,Offcanvas:_e,Popover:je,ScrollSpy:Be,Tab:Je,Toast:ni,Tooltip:Pe}}));
+!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e(t.Popper)}(this,(function(t){"use strict";function e(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t)for(const s in t)if("default"!==s){const i=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,i.get?i:{enumerable:!0,get:()=>t[s]})}return e.default=t,Object.freeze(e)}const s=e(t),i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),o=t=>{t.dispatchEvent(new Event(i))},r=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),a=t=>r(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,l=t=>{if(!r(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),s=t.closest("details:not([open])");if(!s)return e;if(s!==t){const e=t.closest("summary");if(e&&e.parentNode!==s)return!1;if(null===e)return!1}return e},c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},_=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,g=[],f=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=_();if(e){const s=t.NAME,i=e.fn[s];e.fn[s]=t.jQueryInterface,e.fn[s].Constructor=t,e.fn[s].noConflict=()=>(e.fn[s]=i,t.jQueryInterface)}},"loading"===document.readyState?(g.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of g)t()})),g.push(e)):e()},p=(t,e=[],s=t)=>"function"==typeof t?t(...e):s,b=(t,e,s=!0)=>{if(!s)return void p(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:s}=window.getComputedStyle(t);const i=Number.parseFloat(e),n=Number.parseFloat(s);return i||n?(e=e.split(",")[0],s=s.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(s))):0})(e)+5;let r=!1;const a=({target:s})=>{s===e&&(r=!0,e.removeEventListener(i,a),p(t))};e.addEventListener(i,a),setTimeout((()=>{r||o(e)}),n)},v=(t,e,s,i)=>{const n=t.length;let o=t.indexOf(e);return-1===o?!s&&i?t[n-1]:t[0]:(o+=s?1:-1,i&&(o=(o+n)%n),t[Math.max(0,Math.min(o,n-1))])},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,A=/::\d+$/,E={};let C=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function S(t,e){return e&&`${e}::${C++}`||t.uidEvent||C++}function L(t){const e=S(t);return t.uidEvent=e,E[e]=E[e]||{},E[e]}function O(t,e,s=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===s))}function I(t,e,s){const i="string"==typeof e,n=i?s:e||s;let o=x(t);return k.has(o)||(o=t),[i,n,o]}function D(t,e,s,i,n){if("string"!=typeof e||!t)return;let[o,r,a]=I(e,s,i);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=L(t),c=l[a]||(l[a]={}),h=O(c,r,o?s:null);if(h)return void(h.oneOff=h.oneOff&&n);const d=S(r,e.replace(y,"")),u=o?function(t,e,s){return function i(n){const o=t.querySelectorAll(e);for(let{target:r}=n;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return j(n,{delegateTarget:r}),i.oneOff&&M.off(t,n.type,e,s),s.apply(r,[n])}}(t,s,r):function(t,e){return function s(i){return j(i,{delegateTarget:t}),s.oneOff&&M.off(t,i.type,e),e.apply(t,[i])}}(t,r);u.delegationSelector=o?s:null,u.callable=r,u.oneOff=n,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function N(t,e,s,i,n){const o=O(e[s],i,n);o&&(t.removeEventListener(s,o,Boolean(n)),delete e[s][o.uidEvent])}function P(t,e,s,i){const n=e[s]||{};for(const[o,r]of Object.entries(n))o.includes(i)&&N(t,e,s,r.callable,r.delegationSelector)}function x(t){return t=t.replace(w,""),T[t]||t}const M={on(t,e,s,i){D(t,e,s,i,!1)},one(t,e,s,i){D(t,e,s,i,!0)},off(t,e,s,i){if("string"!=typeof e||!t)return;const[n,o,r]=I(e,s,i),a=r!==e,l=L(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const s of Object.keys(l))P(t,l,s,e.slice(1));for(const[s,i]of Object.entries(c)){const n=s.replace(A,"");a&&!e.includes(n)||N(t,l,r,i.callable,i.delegationSelector)}}else{if(!Object.keys(c).length)return;N(t,l,r,o,n?s:null)}},trigger(t,e,s){if("string"!=typeof e||!t)return null;const i=_();let n=null,o=!0,r=!0,a=!1;e!==x(e)&&i&&(n=i.Event(e,s),i(t).trigger(n),o=!n.isPropagationStopped(),r=!n.isImmediatePropagationStopped(),a=n.isDefaultPrevented());let l=new Event(e,{bubbles:o,cancelable:!0});return l=j(l,s),a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&n&&n.preventDefault(),l}};function j(t,e={}){for(const[s,i]of Object.entries(e))try{t[s]=i}catch(e){Object.defineProperty(t,s,{configurable:!0,get:()=>i})}return t}const F=new Map,$={set(t,e,s){F.has(t)||F.set(t,new Map);const i=F.get(t);i.has(e)||0===i.size?i.set(e,s):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(i.keys())[0]}.`)},get:(t,e)=>F.has(t)&&F.get(t).get(e)||null,remove(t,e){if(!F.has(t))return;const s=F.get(t);s.delete(e),0===s.size&&F.delete(t)}};function z(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function H(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const B={setDataAttribute(t,e,s){t.setAttribute(`data-bs-${H(e)}`,s)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${H(e)}`)},getDataAttributes(t){if(!t)return{};const e={},s=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const i of s){let s=i.replace(/^bs/,"");s=s.charAt(0).toLowerCase()+s.slice(1,s.length),e[s]=z(t.dataset[i])}return e},getDataAttribute:(t,e)=>z(t.getAttribute(`data-bs-${H(e)}`))};class q{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const s=r(e)?B.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof s?s:{},...r(e)?B.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[i,n]of Object.entries(e)){const e=t[i],o=r(e)?"element":null==(s=e)?`${s}`:Object.prototype.toString.call(s).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(n).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${i}" provided type "${o}" but expected type "${n}".`)}var s}}class W extends q{constructor(t,e){super(),(t=a(t))&&(this._element=t,this._config=this._getConfig(e),$.set(this._element,this.constructor.DATA_KEY,this))}dispose(){$.remove(this._element,this.constructor.DATA_KEY),M.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,s=!0){b(t,e,s)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return $.get(a(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.0-alpha1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const R=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let s=t.getAttribute("href");if(!s||!s.includes("#")&&!s.startsWith("."))return null;s.includes("#")&&!s.startsWith("#")&&(s=`#${s.split("#")[1]}`),e=s&&"#"!==s?s.trim():null}return n(e)},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const s=[];let i=t.parentNode.closest(e);for(;i;)s.push(i),i=i.parentNode.closest(e);return s},prev(t,e){let s=t.previousElementSibling;for(;s;){if(s.matches(e))return[s];s=s.previousElementSibling}return[]},next(t,e){let s=t.nextElementSibling;for(;s;){if(s.matches(e))return[s];s=s.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!c(t)&&l(t)))},getSelectorFromElement(t){const e=R(t);return e&&V.findOne(e)?e:null},getElementFromSelector(t){const e=R(t);return e?V.findOne(e):null},getMultipleElementsFromSelector(t){const e=R(t);return e?V.find(e):[]}},K=(t,e="hide")=>{const s=`click.dismiss${t.EVENT_KEY}`,i=t.NAME;M.on(document,s,`[data-bs-dismiss="${i}"]`,(function(s){if(["A","AREA"].includes(this.tagName)&&s.preventDefault(),c(this))return;const n=V.getElementFromSelector(this)||this.closest(`.${i}`);t.getOrCreateInstance(n)[e]()}))};class Q extends W{static get NAME(){return"alert"}close(){if(M.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),M.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}K(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}M.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U={endCallback:null,leftCallback:null,rightCallback:null},G={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class J extends q{constructor(t,e){super(),this._element=t,t&&J.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return U}static get DefaultType(){return G}static get NAME(){return"swipe"}dispose(){M.off(this._element,".bs.swipe")}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),p(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&p(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(M.on(this._element,"pointerdown.bs.swipe",(t=>this._start(t))),M.on(this._element,"pointerup.bs.swipe",(t=>this._end(t))),this._element.classList.add("pointer-event")):(M.on(this._element,"touchstart.bs.swipe",(t=>this._start(t))),M.on(this._element,"touchmove.bs.swipe",(t=>this._move(t))),M.on(this._element,"touchend.bs.swipe",(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Z="next",tt="prev",et="left",st="right",it="slid.bs.carousel",nt="carousel",ot="active",rt={ArrowLeft:st,ArrowRight:et},at={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},lt={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class ct extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===nt&&this.cycle()}static get Default(){return at}static get DefaultType(){return lt}static get NAME(){return"carousel"}next(){this._slide(Z)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(tt)}pause(){this._isSliding&&o(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?M.one(this._element,it,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void M.one(this._element,it,(()=>this.to(t)));const s=this._getItemIndex(this._getActive());if(s===t)return;const i=t>s?Z:tt;this._slide(i,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&M.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(M.on(this._element,"mouseenter.bs.carousel",(()=>this.pause())),M.on(this._element,"mouseleave.bs.carousel",(()=>this._maybeEnableCycle()))),this._config.touch&&J.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of V.find(".carousel-item img",this._element))M.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(et)),rightCallback:()=>this._slide(this._directionToOrder(st)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new J(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=rt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(ot),e.removeAttribute("aria-current");const s=V.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);s&&(s.classList.add(ot),s.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const s=this._getActive(),i=t===Z,n=e||v(this._getItems(),s,i,this._config.wrap);if(n===s)return;const o=this._getItemIndex(n),r=e=>M.trigger(this._element,e,{relatedTarget:n,direction:this._orderToDirection(t),from:this._getItemIndex(s),to:o});if(r("slide.bs.carousel").defaultPrevented)return;if(!s||!n)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=n;const l=i?"carousel-item-start":"carousel-item-end",c=i?"carousel-item-next":"carousel-item-prev";n.classList.add(c),u(n),s.classList.add(l),n.classList.add(l),this._queueCallback((()=>{n.classList.remove(l,c),n.classList.add(ot),s.classList.remove(ot,c,l),this._isSliding=!1,r(it)}),s,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return V.findOne(".active.carousel-item",this._element)}_getItems(){return V.find(".carousel-item",this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return f()?t===et?tt:Z:t===et?Z:tt}_orderToDirection(t){return f()?t===tt?et:st:t===tt?st:et}static jQueryInterface(t){return this.each((function(){const e=ct.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}M.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",(function(t){const e=V.getElementFromSelector(this);if(!e||!e.classList.contains(nt))return;t.preventDefault();const s=ct.getOrCreateInstance(e),i=this.getAttribute("data-bs-slide-to");return i?(s.to(i),void s._maybeEnableCycle()):"next"===B.getDataAttribute(this,"slide")?(s.next(),void s._maybeEnableCycle()):(s.prev(),void s._maybeEnableCycle())})),M.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(const e of t)ct.getOrCreateInstance(e)})),m(ct);const ht="show",dt="collapse",ut="collapsing",_t='[data-bs-toggle="collapse"]',gt={parent:null,toggle:!0},ft={parent:"(null|element)",toggle:"boolean"};class mt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const s=V.find(_t);for(const t of s){const e=V.getSelectorFromElement(t),s=V.find(e).filter((t=>t===this._element));null!==e&&s.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return gt}static get DefaultType(){return ft}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>mt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(M.trigger(this._element,"show.bs.collapse").defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(dt),this._element.classList.add(ut),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ut),this._element.classList.add(dt,ht),this._element.style[e]="",M.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[e]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(M.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ut),this._element.classList.remove(dt,ht);for(const t of this._triggerArray){const e=V.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ut),this._element.classList.add(dt),M.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(ht)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=a(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(_t);for(const e of t){const t=V.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=V.find(":scope .collapse .collapse",this._config.parent);return V.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const s of t)s.classList.toggle("collapsed",!e),s.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const s=mt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===s[t])throw new TypeError(`No method named "${t}"`);s[t]()}}))}}M.on(document,"click.bs.collapse.data-api",_t,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of V.getMultipleElementsFromSelector(this))mt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(mt);const pt="dropdown",bt="ArrowUp",vt="ArrowDown",yt="click.bs.dropdown.data-api",wt="keydown.bs.dropdown.data-api",At="show",Et='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Ct=`${Et}.show`,Tt=".dropdown-menu",kt=f()?"top-end":"top-start",St=f()?"top-start":"top-end",Lt=f()?"bottom-end":"bottom-start",Ot=f()?"bottom-start":"bottom-end",It=f()?"left-start":"right-start",Dt=f()?"right-start":"left-start",Nt={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},Pt={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class xt extends W{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=V.next(this._element,Tt)[0]||V.prev(this._element,Tt)[0]||V.findOne(Tt,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Nt}static get DefaultType(){return Pt}static get NAME(){return pt}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!M.trigger(this._element,"show.bs.dropdown",t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))M.on(t,"mouseover",d);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(At),this._element.classList.add(At),M.trigger(this._element,"shown.bs.dropdown",t)}}hide(){if(c(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!M.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))M.off(t,"mouseover",d);this._popper&&this._popper.destroy(),this._menu.classList.remove(At),this._element.classList.remove(At),this._element.setAttribute("aria-expanded","false"),B.removeDataAttribute(this._menu,"popper"),M.trigger(this._element,"hidden.bs.dropdown",t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!r(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${pt.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===s)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:r(this._config.reference)?t=a(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const e=this._getPopperConfig();this._popper=s.createPopper(t,this._menu,e)}_isShown(){return this._menu.classList.contains(At)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return It;if(t.classList.contains("dropstart"))return Dt;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?St:kt:e?Ot:Lt}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(B.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...p(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const s=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>l(t)));s.length&&v(s,e,t===vt,!s.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=V.find(Ct);for(const s of e){const e=xt.getInstance(s);if(!e||!1===e._config.autoClose)continue;const i=t.composedPath(),n=i.includes(e._menu);if(i.includes(e._element)||"inside"===e._config.autoClose&&!n||"outside"===e._config.autoClose&&n)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),s="Escape"===t.key,i=[bt,vt].includes(t.key);if(!i&&!s)return;if(e&&!s)return;t.preventDefault();const n=this.matches(Et)?this:V.prev(this,Et)[0]||V.next(this,Et)[0]||V.findOne(Et,t.delegateTarget.parentNode),o=xt.getOrCreateInstance(n);if(i)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),n.focus())}}M.on(document,wt,Et,xt.dataApiKeydownHandler),M.on(document,wt,Tt,xt.dataApiKeydownHandler),M.on(document,yt,xt.clearMenus),M.on(document,"keyup.bs.dropdown.data-api",xt.clearMenus),M.on(document,yt,Et,(function(t){t.preventDefault(),xt.getOrCreateInstance(this).toggle()})),m(xt);const Mt=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",jt=".sticky-top",Ft="padding-right",$t="margin-right";class zt{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Ft,(e=>e+t)),this._setElementAttributes(Mt,Ft,(e=>e+t)),this._setElementAttributes(jt,$t,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Ft),this._resetElementAttributes(Mt,Ft),this._resetElementAttributes(jt,$t)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,s){const i=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+i)return;this._saveInitialAttribute(t,e);const n=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${s(Number.parseFloat(n))}px`)}))}_saveInitialAttribute(t,e){const s=t.style.getPropertyValue(e);s&&B.setDataAttribute(t,e,s)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const s=B.getDataAttribute(t,e);null!==s?(B.removeDataAttribute(t,e),t.style.setProperty(e,s)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(r(t))e(t);else for(const s of V.find(t,this._element))e(s)}}const Ht="show",Bt="mousedown.bs.backdrop",qt={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Wt={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Rt extends q{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return qt}static get DefaultType(){return Wt}static get NAME(){return"backdrop"}show(t){if(!this._config.isVisible)return void p(t);this._append();const e=this._getElement();this._config.isAnimated&&u(e),e.classList.add(Ht),this._emulateAnimation((()=>{p(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ht),this._emulateAnimation((()=>{this.dispose(),p(t)}))):p(t)}dispose(){this._isAppended&&(M.off(this._element,Bt),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=a(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),M.on(t,Bt,(()=>{p(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const Vt=".bs.focustrap",Kt="backward",Qt={autofocus:!0,trapElement:null},Xt={autofocus:"boolean",trapElement:"element"};class Yt extends q{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Qt}static get DefaultType(){return Xt}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),M.off(document,Vt),M.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),M.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,M.off(document,Vt))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const s=V.focusableChildren(e);0===s.length?e.focus():this._lastTabNavDirection===Kt?s[s.length-1].focus():s[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Kt:"forward")}}const Ut="hidden.bs.modal",Gt="show.bs.modal",Jt="modal-open",Zt="show",te="modal-static",ee={backdrop:!0,focus:!0,keyboard:!0},se={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class ie extends W{constructor(t,e){super(t,e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new zt,this._addEventListeners()}static get Default(){return ee}static get DefaultType(){return se}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||M.trigger(this._element,Gt,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Jt),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(M.trigger(this._element,"hide.bs.modal").defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Zt),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){for(const t of[window,this._dialog])M.off(t,".bs.modal");this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Rt({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Yt({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=V.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),u(this._element),this._element.classList.add(Zt),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,M.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){M.on(this._element,"keydown.dismiss.bs.modal",(t=>{if("Escape"===t.key)return this._config.keyboard?(t.preventDefault(),void this.hide()):void this._triggerBackdropTransition()})),M.on(window,"resize.bs.modal",(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),M.on(this._element,"mousedown.dismiss.bs.modal",(t=>{M.one(this._element,"click.dismiss.bs.modal",(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Jt),this._resetAdjustments(),this._scrollBar.reset(),M.trigger(this._element,Ut)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(M.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(te)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(te),this._queueCallback((()=>{this._element.classList.remove(te),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),s=e>0;if(s&&!t){const t=f()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!s&&t){const t=f()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const s=ie.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===s[t])throw new TypeError(`No method named "${t}"`);s[t](e)}}))}}M.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=V.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),M.one(e,Gt,(t=>{t.defaultPrevented||M.one(e,Ut,(()=>{l(this)&&this.focus()}))}));const s=V.findOne(".modal.show");s&&ie.getInstance(s).hide(),ie.getOrCreateInstance(e).toggle(this)})),K(ie),m(ie);const ne="show",oe="showing",re="hiding",ae=".offcanvas.show",le="hidePrevented.bs.offcanvas",ce="hidden.bs.offcanvas",he={backdrop:!0,keyboard:!0,scroll:!1},de={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class ue extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return he}static get DefaultType(){return de}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||M.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new zt).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(oe),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(ne),this._element.classList.remove(oe),M.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(M.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(re),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(ne,re),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new zt).reset(),M.trigger(this._element,ce)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Rt({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():M.trigger(this._element,le)}:null})}_initializeFocusTrap(){return new Yt({trapElement:this._element})}_addEventListeners(){M.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():M.trigger(this._element,le))}))}static jQueryInterface(t){return this.each((function(){const e=ue.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}M.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=V.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;M.one(e,ce,(()=>{l(this)&&this.focus()}));const s=V.findOne(ae);s&&s!==e&&ue.getInstance(s).hide(),ue.getOrCreateInstance(e).toggle(this)})),M.on(window,"load.bs.offcanvas.data-api",(()=>{for(const t of V.find(ae))ue.getOrCreateInstance(t).show()})),M.on(window,"resize.bs.offcanvas",(()=>{for(const t of V.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&ue.getOrCreateInstance(t).hide()})),K(ue),m(ue);const _e=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),ge=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,fe=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,me=(t,e)=>{const s=t.nodeName.toLowerCase();return e.includes(s)?!_e.has(s)||Boolean(ge.test(t.nodeValue)||fe.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(s)))},pe={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},be={allowList:pe,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},ve={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},ye={entry:"(string|element|function|null)",selector:"(string|element)"};class we extends q{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return be}static get DefaultType(){return ve}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,s]of Object.entries(this._config.content))this._setContent(t,s,e);const e=t.children[0],s=this._resolvePossibleFunction(this._config.extraClass);return s&&e.classList.add(...s.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,s]of Object.entries(t))super._typeCheckConfig({selector:e,entry:s},ye)}_setContent(t,e,s){const i=V.findOne(s,t);i&&((e=this._resolvePossibleFunction(e))?r(e)?this._putElementInTemplate(a(e),i):this._config.html?i.innerHTML=this._maybeSanitize(e):i.textContent=e:i.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,s){if(!t.length)return t;if(s&&"function"==typeof s)return s(t);const i=(new window.DOMParser).parseFromString(t,"text/html"),n=[].concat(...i.body.querySelectorAll("*"));for(const t of n){const s=t.nodeName.toLowerCase();if(!Object.keys(e).includes(s)){t.remove();continue}const i=[].concat(...t.attributes),n=[].concat(e["*"]||[],e[s]||[]);for(const e of i)me(e,n)||t.removeAttribute(e.nodeName)}return i.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return p(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Ae=new Set(["sanitize","allowList","sanitizeFn"]),Ee="fade",Ce="show",Te=".modal",ke="hide.bs.modal",Se="hover",Le="focus",Oe={AUTO:"auto",TOP:"top",RIGHT:f()?"left":"right",BOTTOM:"bottom",LEFT:f()?"right":"left"},Ie={allowList:pe,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},De={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Ne extends W{constructor(t,e){if(void 0===s)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Ie}static get DefaultType(){return De}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),M.off(this._element.closest(Te),ke,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=M.trigger(this._element,this.constructor.eventName("show")),e=(h(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const s=this._getTipElement();this._element.setAttribute("aria-describedby",s.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(s),M.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(s),s.classList.add(Ce),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))M.on(t,"mouseover",d);this._queueCallback((()=>{M.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!M.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(Ce),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))M.off(t,"mouseover",d);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),M.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(Ee,Ce),e.classList.add(`bs-${this.constructor.NAME}-auto`);const s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",s),this._isAnimated()&&e.classList.add(Ee),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new we({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(Ee)}_isShown(){return this.tip&&this.tip.classList.contains(Ce)}_createPopper(t){const e=p(this._config.placement,[this,t,this._element]),i=Oe[e.toUpperCase()];return s.createPopper(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return p(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...p(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)M.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===Se?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),s=e===Se?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");M.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?Le:Se]=!0,e._enter()})),M.on(this._element,s,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?Le:Se]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},M.on(this._element.closest(Te),ke,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=B.getDataAttributes(this._element);for(const t of Object.keys(e))Ae.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:a(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,s]of Object.entries(this._config))this.constructor.Default[e]!==s&&(t[e]=s);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=Ne.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(Ne);const Pe={...Ne.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},xe={...Ne.DefaultType,content:"(null|string|element|function)"};class Me extends Ne{static get Default(){return Pe}static get DefaultType(){return xe}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=Me.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(Me);const je="click.bs.scrollspy",Fe="active",$e="[href]",ze={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},He={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Be extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ze}static get DefaultType(){return He}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=a(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(M.off(this._config.target,je),M.on(this._config.target,je,$e,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const s=this._rootElement||window,i=e.offsetTop-this._element.offsetTop;if(s.scrollTo)return void s.scrollTo({top:i,behavior:"smooth"});s.scrollTop=i}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),s=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},i=(this._rootElement||document.documentElement).scrollTop,n=i>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=i;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(n&&t){if(s(o),!i)return}else n||t||s(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=V.find($e,this._config.target);for(const e of t){if(!e.hash||c(e))continue;const t=V.findOne(e.hash,this._element);l(t)&&(this._targetLinks.set(e.hash,e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(Fe),this._activateParents(t),M.trigger(this._element,"activate.bs.scrollspy",{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))V.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(Fe);else for(const e of V.parents(t,".nav, .list-group"))for(const t of V.prev(e,".nav-link, .nav-item > .nav-link, .list-group-item"))t.classList.add(Fe)}_clearActiveClass(t){t.classList.remove(Fe);const e=V.find("[href].active",t);for(const t of e)t.classList.remove(Fe)}static jQueryInterface(t){return this.each((function(){const e=Be.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}M.on(window,"load.bs.scrollspy.data-api",(()=>{for(const t of V.find('[data-bs-spy="scroll"]'))Be.getOrCreateInstance(t)})),m(Be);const qe="ArrowLeft",We="ArrowRight",Re="ArrowUp",Ve="ArrowDown",Ke="active",Qe="fade",Xe="show",Ye='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Ue=`.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle), ${Ye}`;class Ge extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),M.on(this._element,"keydown.bs.tab",(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),s=e?M.trigger(e,"hide.bs.tab",{relatedTarget:t}):null;M.trigger(t,"show.bs.tab",{relatedTarget:e}).defaultPrevented||s&&s.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Ke),this._activate(V.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),M.trigger(t,"shown.bs.tab",{relatedTarget:e})):t.classList.add(Xe)}),t,t.classList.contains(Qe)))}_deactivate(t,e){t&&(t.classList.remove(Ke),t.blur(),this._deactivate(V.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),M.trigger(t,"hidden.bs.tab",{relatedTarget:e})):t.classList.remove(Xe)}),t,t.classList.contains(Qe)))}_keydown(t){if(![qe,We,Re,Ve].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=[We,Ve].includes(t.key),s=v(this._getChildren().filter((t=>!c(t))),t.target,e,!0);s&&(s.focus({preventScroll:!0}),Ge.getOrCreateInstance(s).show())}_getChildren(){return V.find(Ue,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),s=this._getOuterElement(t);t.setAttribute("aria-selected",e),s!==t&&this._setAttributeIfNotExists(s,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=V.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,e){const s=this._getOuterElement(t);if(!s.classList.contains("dropdown"))return;const i=(t,i)=>{const n=V.findOne(t,s);n&&n.classList.toggle(i,e)};i(".dropdown-toggle",Ke),i(".dropdown-menu",Xe),s.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,s){t.hasAttribute(e)||t.setAttribute(e,s)}_elemIsActive(t){return t.classList.contains(Ke)}_getInnerElement(t){return t.matches(Ue)?t:V.findOne(Ue,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ge.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}M.on(document,"click.bs.tab",Ye,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||Ge.getOrCreateInstance(this).show()})),M.on(window,"load.bs.tab",(()=>{for(const t of V.find('.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]'))Ge.getOrCreateInstance(t)})),m(Ge);const Je="hide",Ze="show",ts="showing",es={animation:"boolean",autohide:"boolean",delay:"number"},ss={animation:!0,autohide:!0,delay:5e3};class is extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ss}static get DefaultType(){return es}static get NAME(){return"toast"}show(){M.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Je),u(this._element),this._element.classList.add(Ze,ts),this._queueCallback((()=>{this._element.classList.remove(ts),M.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(M.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(ts),this._queueCallback((()=>{this._element.classList.add(Je),this._element.classList.remove(ts,Ze),M.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(Ze),super.dispose()}isShown(){return this._element.classList.contains(Ze)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const s=t.relatedTarget;this._element===s||this._element.contains(s)||this._maybeScheduleHide()}_setListeners(){M.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),M.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),M.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),M.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=is.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return K(is),m(is),{Alert:Q,Button:Y,Carousel:ct,Collapse:mt,Dropdown:xt,Modal:ie,Offcanvas:ue,Popover:Me,ScrollSpy:Be,Tab:Ge,Toast:is,Tooltip:Ne}}));
//# sourceMappingURL=bootstrap.min.js.map \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map b/vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map
index bf5c0f3f6..78229cd00 100644
--- a/vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map
+++ b/vendor/twbs/bootstrap/dist/js/bootstrap.min.js.map
@@ -1 +1 @@
-{"version":3,"names":["TRANSITION_END","getSelector","element","selector","getAttribute","hrefAttribute","includes","startsWith","split","trim","getSelectorFromElement","document","querySelector","getElementFromSelector","triggerTransitionEnd","dispatchEvent","Event","isElement","object","jquery","nodeType","getElement","length","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","window","jQuery","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","Object","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","call","this","handlers","previousFunction","replace","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","keys","on","one","inNamespace","isNamespace","elementEvent","slice","keyHandlers","trigger","args","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","entries","_unused","defineProperty","configurable","get","elementMap","Map","Data","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","toString","JSON","parse","decodeURIComponent","normalizeDataKey","chr","toLowerCase","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","prototype","match","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","static","getInstance","VERSION","enableDismissTrigger","component","method","clickEvent","tagName","getOrCreateInstance","Alert","close","_destroyElement","each","data","undefined","SELECTOR_DATA_TOGGLE","Button","toggle","button","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLID","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","eventName","_orderToDirection","isCycling","directionalClassName","orderClassName","_isAnimated","SELECTOR_ACTIVE","clearInterval","carousel","slideIndex","carousels","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","selectorElements","ARROW_UP_KEY","ARROW_DOWN_KEY","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","boundary","display","offset","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","destroy","update","Popper","referenceElement","_getPopperConfig","createPopper","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","openToggles","context","composedPath","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","dataApiKeydownHandler","clearMenus","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDDEN","EVENT_SHOW","CLASS_NAME_OPEN","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","OPEN_SELECTOR","EVENT_HIDE_PREVENTED","scroll","Offcanvas","blur","position","uriAttributes","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","allowList","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","floor","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","Popover","_getContent","EVENT_CLICK","SELECTOR_TARGET_LINKS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","hash","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","id","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","SELECTOR_INNER_ELEM","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/dom/selector-engine.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(object)\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getElementFromSelector,\n getjQuery,\n getNextActiveElement,\n getSelectorFromElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const handlerKey of Object.keys(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const keyHandlers of Object.keys(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta) {\n for (const [key, value] of Object.entries(meta || {})) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index'\nimport Manipulator from '../dom/manipulator'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const property of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport { executeAfterTransition, getElement } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Config from './util/config'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.2.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config'\nimport EventHandler from '../dom/event-handler'\nimport { execute } from './index'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport Swipe from './util/swipe'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getSelectorFromElement,\n reflow\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n for (const element of selectorElements) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow } from './index'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isVisible\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer'\nimport { getElement, isElement } from '../util/index'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg(this) : arg\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'\nimport { DefaultAllowlist } from './util/sanitizer'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport TemplateFactory from './util/template-factory'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this.tip) {\n this.tip.remove()\n }\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = this._createPopper(tip)\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n tip.remove()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n\n this._disposePopper()\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, getNextActiveElement, isDisabled } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert'\nimport Button from './src/button'\nimport Carousel from './src/carousel'\nimport Collapse from './src/collapse'\nimport Dropdown from './src/dropdown'\nimport Modal from './src/modal'\nimport Offcanvas from './src/offcanvas'\nimport Popover from './src/popover'\nimport ScrollSpy from './src/scrollspy'\nimport Tab from './src/tab'\nimport Toast from './src/toast'\nimport Tooltip from './src/tooltip'\n\nexport default {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip\n}\n"],"mappings":"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"} \ No newline at end of file
+{"version":3,"names":["TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","triggerTransitionEnd","element","dispatchEvent","Event","isElement","object","jquery","nodeType","getElement","length","document","querySelector","isVisible","getClientRects","elementIsVisible","getComputedStyle","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","isRTL","dir","defineJQueryPlugin","plugin","callback","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","readyState","addEventListener","push","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","emulatedDuration","transitionDuration","transitionDelay","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","getTransitionDurationFromElement","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","Math","max","min","namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","uid","getElementEvents","findHandler","events","callable","delegationSelector","Object","values","find","event","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","oneOff","wrapFunction","relatedTarget","delegateTarget","call","this","handlers","previousFunction","domElements","querySelectorAll","domElement","hydrateObj","EventHandler","off","type","apply","bootstrapDelegationHandler","bootstrapHandler","removeHandler","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","elementEvent","keys","slice","keyHandlers","trigger","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","obj","meta","key","value","_unused","defineProperty","configurable","get","elementMap","Map","Data","set","instance","instanceMap","size","console","error","Array","from","remove","delete","normalizeData","toString","JSON","parse","decodeURIComponent","normalizeDataKey","chr","toLowerCase","Manipulator","setDataAttribute","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","dataset","filter","pureKey","charAt","getDataAttribute","Config","Default","DefaultType","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","jsonConfig","constructor","configTypes","property","expectedTypes","valueType","prototype","RegExp","test","TypeError","toUpperCase","BaseComponent","super","_element","_config","DATA_KEY","dispose","EVENT_KEY","propertyName","getOwnPropertyNames","_queueCallback","isAnimated","static","getInstance","VERSION","getSelector","hrefAttribute","trim","SelectorEngine","concat","Element","findOne","children","child","matches","parents","ancestor","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector","enableDismissTrigger","component","method","clickEvent","tagName","getOrCreateInstance","Alert","close","_destroyElement","each","data","undefined","SELECTOR_DATA_TOGGLE","Button","toggle","button","endCallback","leftCallback","rightCallback","Swipe","isSupported","_deltaX","_supportPointerEvents","PointerEvent","_initEvents","_start","_eventIsPointerPenTouch","clientX","touches","_end","_handleSwipe","_move","absDeltaX","abs","direction","add","pointerType","navigator","maxTouchPoints","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLID","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","KEY_TO_DIRECTION","ArrowLeft","ArrowRight","interval","keyboard","pause","ride","touch","wrap","Carousel","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","_addEventListeners","cycle","_slide","nextWhenVisible","hidden","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","to","items","_getItems","activeIndex","_getItemIndex","_getActive","order","defaultInterval","_keydown","_addTouchEventListeners","img","swipeConfig","_directionToOrder","clearTimeout","_setActiveIndicatorElement","activeIndicator","newActiveIndicator","elementInterval","parseInt","isNext","nextElement","nextElementIndex","triggerEvent","eventName","_orderToDirection","isCycling","directionalClassName","orderClassName","_isAnimated","SELECTOR_ACTIVE","clearInterval","carousel","slideIndex","carousels","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","parent","Collapse","_isTransitioning","_triggerArray","toggleList","elem","filterElement","foundElement","_initializeChildren","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","activeInstance","dimension","_getDimension","style","scrollSize","getBoundingClientRect","selected","triggerArray","isOpen","ARROW_UP_KEY","ARROW_DOWN_KEY","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","PLACEMENT_TOP","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","autoClose","boundary","display","offset","popperConfig","reference","Dropdown","_popper","_parent","_menu","_inNavbar","_detectNavbar","_createPopper","focus","_completeHide","destroy","update","Popper","referenceElement","_getPopperConfig","createPopper","_getPlacement","parentDropdown","isEnd","_getOffset","popperData","defaultBsPopperConfig","placement","modifiers","options","enabled","_selectMenuItem","openToggles","context","composedPath","isMenuTarget","isInput","isEscapeEvent","isUpOrDownEvent","getToggleButton","stopPropagation","dataApiKeydownHandler","clearMenus","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","getWidth","documentWidth","clientWidth","innerWidth","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","overflow","styleProperty","scrollbarWidth","_applyManipulationCallback","setProperty","actualValue","removeProperty","callBack","sel","EVENT_MOUSEDOWN","className","clickCallback","rootElement","Backdrop","_isAppended","_append","_getElement","_emulateAnimation","backdrop","createElement","append","TAB_NAV_BACKWARD","autofocus","trapElement","FocusTrap","_isActive","_lastTabNavDirection","activate","_handleFocusin","_handleKeydown","deactivate","elements","shiftKey","EVENT_HIDDEN","EVENT_SHOW","CLASS_NAME_OPEN","CLASS_NAME_STATIC","Modal","_dialog","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_scrollBar","_adjustDialog","_showElement","_hideModal","htmlElement","handleUpdate","scrollTop","modalBody","_triggerBackdropTransition","event2","_resetAdjustments","isModalOverflowing","scrollHeight","clientHeight","initialOverflowY","overflowY","isBodyOverflowing","paddingLeft","paddingRight","showEvent","alreadyOpen","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","OPEN_SELECTOR","EVENT_HIDE_PREVENTED","scroll","Offcanvas","blur","position","uriAttributes","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","nodeValue","attributeRegex","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","allowList","content","extraClass","html","sanitize","sanitizeFn","template","DefaultContentType","entry","TemplateFactory","getContent","_resolvePossibleFunction","hasContent","changeContent","_checkContent","toHtml","templateWrapper","innerHTML","_maybeSanitize","text","_setContent","arg","templateElement","_putElementInTemplate","textContent","unsafeHtml","sanitizeFunction","createdDocument","DOMParser","parseFromString","elementName","attributeList","allowedAttributes","sanitizeHtml","DISALLOWED_ATTRIBUTES","CLASS_NAME_FADE","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","animation","container","customClass","delay","fallbackPlacements","title","Tooltip","_isEnabled","_timeout","_isHovered","_activeTrigger","_templateFactory","_newContent","tip","_setListeners","_fixTitle","enable","disable","toggleEnabled","click","_leave","_enter","_hideModalHandler","_disposePopper","_isWithContent","isInTheDom","ownerDocument","_getTipElement","_isWithActiveTrigger","_getTitle","_createTipElement","_getContentForTemplate","_getTemplateFactory","tipId","prefix","floor","random","getElementById","getUID","setContent","_initializeOnDelegatedTarget","_getDelegateConfig","attachment","phase","state","triggers","eventIn","eventOut","_setTimeout","timeout","dataAttributes","dataAttribute","Popover","_getContent","EVENT_CLICK","SELECTOR_TARGET_LINKS","rootMargin","smoothScroll","threshold","ScrollSpy","_targetLinks","_observableSections","_rootElement","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","observe","observableSection","hash","height","offsetTop","scrollTo","top","behavior","IntersectionObserver","_observerCallback","targetElement","_process","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","anchor","_activateParents","listGroup","item","activeNodes","node","spy","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","SELECTOR_INNER_ELEM","Tab","_setInitialAttributes","_getChildren","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","_deactivate","_activate","relatedElem","_toggleDropDown","nextActiveElement","preventScroll","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","open","CLASS_NAME_HIDE","autohide","Toast","_hasMouseInteraction","_hasKeyboardInteraction","_clearTimeout","_maybeScheduleHide","isShown","_onInteraction","isInteracting"],"sources":["../../js/src/util/index.js","../../js/src/dom/event-handler.js","../../js/src/dom/data.js","../../js/src/dom/manipulator.js","../../js/src/util/config.js","../../js/src/base-component.js","../../js/src/dom/selector-engine.js","../../js/src/util/component-functions.js","../../js/src/alert.js","../../js/src/button.js","../../js/src/util/swipe.js","../../js/src/carousel.js","../../js/src/collapse.js","../../js/src/dropdown.js","../../js/src/util/scrollbar.js","../../js/src/util/backdrop.js","../../js/src/util/focustrap.js","../../js/src/modal.js","../../js/src/offcanvas.js","../../js/src/util/sanitizer.js","../../js/src/util/template-factory.js","../../js/src/tooltip.js","../../js/src/popover.js","../../js/src/scrollspy.js","../../js/src/tab.js","../../js/src/toast.js","../../js/index.umd.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index.js'\nimport Manipulator from '../dom/manipulator.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.0-alpha1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { isDisabled } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config.js'\nimport EventHandler from '../dom/event-handler.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Swipe from './util/swipe.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport BaseComponent from './base-component.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport BaseComponent from './base-component.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport Tooltip from './tooltip.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): index.umd.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Alert from './src/alert.js'\nimport Button from './src/button.js'\nimport Carousel from './src/carousel.js'\nimport Collapse from './src/collapse.js'\nimport Dropdown from './src/dropdown.js'\nimport Modal from './src/modal.js'\nimport Offcanvas from './src/offcanvas.js'\nimport Popover from './src/popover.js'\nimport ScrollSpy from './src/scrollspy.js'\nimport Tab from './src/tab.js'\nimport Toast from './src/toast.js'\nimport Tooltip from './src/tooltip.js'\n\nexport default {\n Alert,\n Button,\n Carousel,\n Collapse,\n Dropdown,\n Modal,\n Offcanvas,\n Popover,\n ScrollSpy,\n Tab,\n Toast,\n Tooltip\n}\n"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/.eslintrc.json b/vendor/twbs/bootstrap/js/.eslintrc.json
new file mode 100644
index 000000000..97ea9e043
--- /dev/null
+++ b/vendor/twbs/bootstrap/js/.eslintrc.json
@@ -0,0 +1,26 @@
+{
+ "extends": "../.eslintrc.json",
+ "env": {
+ "es2022": true
+ },
+ "parserOptions": {
+ "ecmaVersion": "latest",
+ "sourceType": "module"
+ },
+ "overrides": [
+ {
+ "files": [
+ "./*.js",
+ "./src/**/*.js"
+ ],
+ "rules": {
+ "import/extensions": [
+ 2,
+ {
+ "js": "always"
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/vendor/twbs/bootstrap/js/dist/alert.js b/vendor/twbs/bootstrap/js/dist/alert.js
index 2b2816eb7..b103d0337 100644
--- a/vendor/twbs/bootstrap/js/dist/alert.js
+++ b/vendor/twbs/bootstrap/js/dist/alert.js
@@ -1,25 +1,21 @@
/*!
- * Bootstrap alert.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap alert.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./base-component'), require('./util/component-functions')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./base-component.js'), require('./util/component-functions.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component', './util/component-functions'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Alert = factory(global.Index, global.EventHandler, global.BaseComponent, global.ComponentFunctions));
-})(this, (function (index, EventHandler, BaseComponent, componentFunctions) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
+})(this, (function (index_js, EventHandler, BaseComponent, componentFunctions_js) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): alert.js
+ * Bootstrap (v5.3.0-alpha1): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -31,68 +27,61 @@
const EVENT_CLOSED = `closed${EVENT_KEY}`;
const CLASS_NAME_FADE = 'fade';
const CLASS_NAME_SHOW = 'show';
+
/**
* Class definition
*/
- class Alert extends BaseComponent__default.default {
+ class Alert extends BaseComponent {
// Getters
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
close() {
- const closeEvent = EventHandler__default.default.trigger(this._element, EVENT_CLOSE);
-
+ const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
if (closeEvent.defaultPrevented) {
return;
}
-
this._element.classList.remove(CLASS_NAME_SHOW);
-
const isAnimated = this._element.classList.contains(CLASS_NAME_FADE);
-
this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
- } // Private
-
+ }
+ // Private
_destroyElement() {
this._element.remove();
-
- EventHandler__default.default.trigger(this._element, EVENT_CLOSED);
+ EventHandler.trigger(this._element, EVENT_CLOSED);
this.dispose();
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Alert.getOrCreateInstance(this);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
});
}
-
}
+
/**
* Data API implementation
*/
+ componentFunctions_js.enableDismissTrigger(Alert, 'close');
- componentFunctions.enableDismissTrigger(Alert, 'close');
/**
* jQuery
*/
- index.defineJQueryPlugin(Alert);
+ index_js.defineJQueryPlugin(Alert);
return Alert;
diff --git a/vendor/twbs/bootstrap/js/dist/alert.js.map b/vendor/twbs/bootstrap/js/dist/alert.js.map
index 49d577ff7..dd26ff06e 100644
--- a/vendor/twbs/bootstrap/js/dist/alert.js.map
+++ b/vendor/twbs/bootstrap/js/dist/alert.js.map
@@ -1 +1 @@
-{"version":3,"file":"alert.js","sources":["../src/alert.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","BaseComponent","close","closeEvent","EventHandler","trigger","_element","defaultPrevented","classList","remove","isAnimated","contains","_queueCallback","_destroyElement","dispose","jQueryInterface","config","each","data","getOrCreateInstance","undefined","startsWith","TypeError","enableDismissTrigger","defineJQueryPlugin"],"mappings":";;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAOA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,OAAb,CAAA;EACA,MAAMC,QAAQ,GAAG,UAAjB,CAAA;EACA,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAA/B,CAAA,CAAA;EAEA,MAAME,WAAW,GAAI,CAAOD,KAAAA,EAAAA,SAAU,CAAtC,CAAA,CAAA;EACA,MAAME,YAAY,GAAI,CAAQF,MAAAA,EAAAA,SAAU,CAAxC,CAAA,CAAA;EACA,MAAMG,eAAe,GAAG,MAAxB,CAAA;EACA,MAAMC,eAAe,GAAG,MAAxB,CAAA;EAEA;EACA;EACA;;EAEA,MAAMC,KAAN,SAAoBC,8BAApB,CAAkC;EAChC;EACe,EAAA,WAAJR,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAP,CAAA;EACD,GAJ+B;;;EAOhCS,EAAAA,KAAK,GAAG;MACN,MAAMC,UAAU,GAAGC,6BAAY,CAACC,OAAb,CAAqB,IAAKC,CAAAA,QAA1B,EAAoCV,WAApC,CAAnB,CAAA;;MAEA,IAAIO,UAAU,CAACI,gBAAf,EAAiC;EAC/B,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,IAAA,CAAKD,QAAL,CAAcE,SAAd,CAAwBC,MAAxB,CAA+BV,eAA/B,CAAA,CAAA;;MAEA,MAAMW,UAAU,GAAG,IAAA,CAAKJ,QAAL,CAAcE,SAAd,CAAwBG,QAAxB,CAAiCb,eAAjC,CAAnB,CAAA;;MACA,IAAKc,CAAAA,cAAL,CAAoB,MAAM,IAAKC,CAAAA,eAAL,EAA1B,EAAkD,IAAA,CAAKP,QAAvD,EAAiEI,UAAjE,CAAA,CAAA;EACD,GAlB+B;;;EAqBhCG,EAAAA,eAAe,GAAG;MAChB,IAAKP,CAAAA,QAAL,CAAcG,MAAd,EAAA,CAAA;;EACAL,IAAAA,6BAAY,CAACC,OAAb,CAAqB,IAAKC,CAAAA,QAA1B,EAAoCT,YAApC,CAAA,CAAA;EACA,IAAA,IAAA,CAAKiB,OAAL,EAAA,CAAA;EACD,GAzB+B;;;IA4BV,OAAfC,eAAe,CAACC,MAAD,EAAS;MAC7B,OAAO,IAAA,CAAKC,IAAL,CAAU,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGlB,KAAK,CAACmB,mBAAN,CAA0B,IAA1B,CAAb,CAAA;;EAEA,MAAA,IAAI,OAAOH,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,QAAA,OAAA;EACD,OAAA;;EAED,MAAA,IAAIE,IAAI,CAACF,MAAD,CAAJ,KAAiBI,SAAjB,IAA8BJ,MAAM,CAACK,UAAP,CAAkB,GAAlB,CAA9B,IAAwDL,MAAM,KAAK,aAAvE,EAAsF;EACpF,QAAA,MAAM,IAAIM,SAAJ,CAAe,CAAmBN,iBAAAA,EAAAA,MAAO,GAAzC,CAAN,CAAA;EACD,OAAA;;EAEDE,MAAAA,IAAI,CAACF,MAAD,CAAJ,CAAa,IAAb,CAAA,CAAA;EACD,KAZM,CAAP,CAAA;EAaD,GAAA;;EA1C+B,CAAA;EA6ClC;EACA;EACA;;;AAEAO,yCAAoB,CAACvB,KAAD,EAAQ,OAAR,CAApB,CAAA;EAEA;EACA;EACA;;AAEAwB,0BAAkB,CAACxB,KAAD,CAAlB;;;;;;;;"} \ No newline at end of file
+{"version":3,"file":"alert.js","sources":["../src/alert.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE)\n\n if (closeEvent.defaultPrevented) {\n return\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE)\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated)\n }\n\n // Private\n _destroyElement() {\n this._element.remove()\n EventHandler.trigger(this._element, EVENT_CLOSED)\n this.dispose()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close')\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert)\n\nexport default Alert\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_CLOSE","EVENT_CLOSED","CLASS_NAME_FADE","CLASS_NAME_SHOW","Alert","BaseComponent","close","closeEvent","EventHandler","trigger","_element","defaultPrevented","classList","remove","isAnimated","contains","_queueCallback","_destroyElement","dispose","jQueryInterface","config","each","data","getOrCreateInstance","undefined","startsWith","TypeError","enableDismissTrigger","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAOA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,OAAO,CAAA;EACpB,MAAMC,QAAQ,GAAG,UAAU,CAAA;EAC3B,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAAC,CAAA,CAAA;EAEhC,MAAME,WAAW,GAAI,CAAOD,KAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACvC,MAAME,YAAY,GAAI,CAAQF,MAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACzC,MAAMG,eAAe,GAAG,MAAM,CAAA;EAC9B,MAAMC,eAAe,GAAG,MAAM,CAAA;;EAE9B;EACA;EACA;;EAEA,MAAMC,KAAK,SAASC,aAAa,CAAC;EAChC;EACA,EAAA,WAAWR,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAI,CAAA;EACb,GAAA;;EAEA;EACAS,EAAAA,KAAK,GAAG;MACN,MAAMC,UAAU,GAAGC,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAEV,WAAW,CAAC,CAAA;MAEnE,IAAIO,UAAU,CAACI,gBAAgB,EAAE;EAC/B,MAAA,OAAA;EACF,KAAA;MAEA,IAAI,CAACD,QAAQ,CAACE,SAAS,CAACC,MAAM,CAACV,eAAe,CAAC,CAAA;MAE/C,MAAMW,UAAU,GAAG,IAAI,CAACJ,QAAQ,CAACE,SAAS,CAACG,QAAQ,CAACb,eAAe,CAAC,CAAA;EACpE,IAAA,IAAI,CAACc,cAAc,CAAC,MAAM,IAAI,CAACC,eAAe,EAAE,EAAE,IAAI,CAACP,QAAQ,EAAEI,UAAU,CAAC,CAAA;EAC9E,GAAA;;EAEA;EACAG,EAAAA,eAAe,GAAG;EAChB,IAAA,IAAI,CAACP,QAAQ,CAACG,MAAM,EAAE,CAAA;MACtBL,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAET,YAAY,CAAC,CAAA;MACjD,IAAI,CAACiB,OAAO,EAAE,CAAA;EAChB,GAAA;;EAEA;IACA,OAAOC,eAAe,CAACC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGlB,KAAK,CAACmB,mBAAmB,CAAC,IAAI,CAAC,CAAA;EAE5C,MAAA,IAAI,OAAOH,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA,OAAA;EACF,OAAA;EAEA,MAAA,IAAIE,IAAI,CAACF,MAAM,CAAC,KAAKI,SAAS,IAAIJ,MAAM,CAACK,UAAU,CAAC,GAAG,CAAC,IAAIL,MAAM,KAAK,aAAa,EAAE;EACpF,QAAA,MAAM,IAAIM,SAAS,CAAE,CAAmBN,iBAAAA,EAAAA,MAAO,GAAE,CAAC,CAAA;EACpD,OAAA;EAEAE,MAAAA,IAAI,CAACF,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;EACpB,KAAC,CAAC,CAAA;EACJ,GAAA;EACF,CAAA;;EAEA;EACA;EACA;;AAEAO,4CAAoB,CAACvB,KAAK,EAAE,OAAO,CAAC,CAAA;;EAEpC;EACA;EACA;;AAEAwB,6BAAkB,CAACxB,KAAK,CAAC;;;;;;;;"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/base-component.js b/vendor/twbs/bootstrap/js/dist/base-component.js
index 9eac028e5..8a8213879 100644
--- a/vendor/twbs/bootstrap/js/dist/base-component.js
+++ b/vendor/twbs/bootstrap/js/dist/base-component.js
@@ -1,97 +1,80 @@
/*!
- * Bootstrap base-component.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap base-component.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data'), require('./util/index'), require('./dom/event-handler'), require('./util/config')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./util/index.js'), require('./dom/event-handler.js'), require('./util/config.js')) :
typeof define === 'function' && define.amd ? define(['./dom/data', './util/index', './dom/event-handler', './util/config'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.BaseComponent = factory(global.Data, global.Index, global.EventHandler, global.Config));
-})(this, (function (Data, index, EventHandler, Config) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
+})(this, (function (Data, index_js, EventHandler, Config) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): base-component.js
+ * Bootstrap (v5.3.0-alpha1): base-component.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
- const VERSION = '5.2.2';
+ const VERSION = '5.3.0-alpha1';
+
/**
* Class definition
*/
- class BaseComponent extends Config__default.default {
+ class BaseComponent extends Config {
constructor(element, config) {
super();
- element = index.getElement(element);
-
+ element = index_js.getElement(element);
if (!element) {
return;
}
-
this._element = element;
this._config = this._getConfig(config);
- Data__default.default.set(this._element, this.constructor.DATA_KEY, this);
- } // Public
-
+ Data.set(this._element, this.constructor.DATA_KEY, this);
+ }
+ // Public
dispose() {
- Data__default.default.remove(this._element, this.constructor.DATA_KEY);
- EventHandler__default.default.off(this._element, this.constructor.EVENT_KEY);
-
+ Data.remove(this._element, this.constructor.DATA_KEY);
+ EventHandler.off(this._element, this.constructor.EVENT_KEY);
for (const propertyName of Object.getOwnPropertyNames(this)) {
this[propertyName] = null;
}
}
-
_queueCallback(callback, element, isAnimated = true) {
- index.executeAfterTransition(callback, element, isAnimated);
+ index_js.executeAfterTransition(callback, element, isAnimated);
}
-
_getConfig(config) {
config = this._mergeConfigObj(config, this._element);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
- } // Static
-
+ }
+ // Static
static getInstance(element) {
- return Data__default.default.get(index.getElement(element), this.DATA_KEY);
+ return Data.get(index_js.getElement(element), this.DATA_KEY);
}
-
static getOrCreateInstance(element, config = {}) {
return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);
}
-
static get VERSION() {
return VERSION;
}
-
static get DATA_KEY() {
return `bs.${this.NAME}`;
}
-
static get EVENT_KEY() {
return `.${this.DATA_KEY}`;
}
-
static eventName(name) {
return `${name}${this.EVENT_KEY}`;
}
-
}
return BaseComponent;
diff --git a/vendor/twbs/bootstrap/js/dist/base-component.js.map b/vendor/twbs/bootstrap/js/dist/base-component.js.map
index d5bf12b63..de26481b7 100644
--- a/vendor/twbs/bootstrap/js/dist/base-component.js.map
+++ b/vendor/twbs/bootstrap/js/dist/base-component.js.map
@@ -1 +1 @@
-{"version":3,"file":"base-component.js","sources":["../src/base-component.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data'\nimport { executeAfterTransition, getElement } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Config from './util/config'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.2.2'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n"],"names":["VERSION","BaseComponent","Config","constructor","element","config","getElement","_element","_config","_getConfig","Data","set","DATA_KEY","dispose","remove","EventHandler","off","EVENT_KEY","propertyName","Object","getOwnPropertyNames","_queueCallback","callback","isAnimated","executeAfterTransition","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","getInstance","get","getOrCreateInstance","NAME","eventName","name"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"base-component.js","sources":["../src/base-component.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Data from './dom/data.js'\nimport { executeAfterTransition, getElement } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Config from './util/config.js'\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.0-alpha1'\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super()\n\n element = getElement(element)\n if (!element) {\n return\n }\n\n this._element = element\n this._config = this._getConfig(config)\n\n Data.set(this._element, this.constructor.DATA_KEY, this)\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY)\n EventHandler.off(this._element, this.constructor.EVENT_KEY)\n\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null\n }\n }\n\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated)\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY)\n }\n\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null)\n }\n\n static get VERSION() {\n return VERSION\n }\n\n static get DATA_KEY() {\n return `bs.${this.NAME}`\n }\n\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`\n }\n\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`\n }\n}\n\nexport default BaseComponent\n"],"names":["VERSION","BaseComponent","Config","constructor","element","config","getElement","_element","_config","_getConfig","Data","set","DATA_KEY","dispose","remove","EventHandler","off","EVENT_KEY","propertyName","Object","getOwnPropertyNames","_queueCallback","callback","isAnimated","executeAfterTransition","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","getInstance","get","getOrCreateInstance","NAME","eventName","name"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAOA;EACA;EACA;;EAEA,MAAMA,OAAO,GAAG,cAAc,CAAA;;EAE9B;EACA;EACA;;EAEA,MAAMC,aAAa,SAASC,MAAM,CAAC;EACjCC,EAAAA,WAAW,CAACC,OAAO,EAAEC,MAAM,EAAE;EAC3B,IAAA,KAAK,EAAE,CAAA;EAEPD,IAAAA,OAAO,GAAGE,mBAAU,CAACF,OAAO,CAAC,CAAA;MAC7B,IAAI,CAACA,OAAO,EAAE;EACZ,MAAA,OAAA;EACF,KAAA;MAEA,IAAI,CAACG,QAAQ,GAAGH,OAAO,CAAA;MACvB,IAAI,CAACI,OAAO,GAAG,IAAI,CAACC,UAAU,CAACJ,MAAM,CAAC,CAAA;EAEtCK,IAAAA,IAAI,CAACC,GAAG,CAAC,IAAI,CAACJ,QAAQ,EAAE,IAAI,CAACJ,WAAW,CAACS,QAAQ,EAAE,IAAI,CAAC,CAAA;EAC1D,GAAA;;EAEA;EACAC,EAAAA,OAAO,GAAG;EACRH,IAAAA,IAAI,CAACI,MAAM,CAAC,IAAI,CAACP,QAAQ,EAAE,IAAI,CAACJ,WAAW,CAACS,QAAQ,CAAC,CAAA;EACrDG,IAAAA,YAAY,CAACC,GAAG,CAAC,IAAI,CAACT,QAAQ,EAAE,IAAI,CAACJ,WAAW,CAACc,SAAS,CAAC,CAAA;MAE3D,KAAK,MAAMC,YAAY,IAAIC,MAAM,CAACC,mBAAmB,CAAC,IAAI,CAAC,EAAE;EAC3D,MAAA,IAAI,CAACF,YAAY,CAAC,GAAG,IAAI,CAAA;EAC3B,KAAA;EACF,GAAA;IAEAG,cAAc,CAACC,QAAQ,EAAElB,OAAO,EAAEmB,UAAU,GAAG,IAAI,EAAE;EACnDC,IAAAA,+BAAsB,CAACF,QAAQ,EAAElB,OAAO,EAAEmB,UAAU,CAAC,CAAA;EACvD,GAAA;IAEAd,UAAU,CAACJ,MAAM,EAAE;MACjBA,MAAM,GAAG,IAAI,CAACoB,eAAe,CAACpB,MAAM,EAAE,IAAI,CAACE,QAAQ,CAAC,CAAA;EACpDF,IAAAA,MAAM,GAAG,IAAI,CAACqB,iBAAiB,CAACrB,MAAM,CAAC,CAAA;EACvC,IAAA,IAAI,CAACsB,gBAAgB,CAACtB,MAAM,CAAC,CAAA;EAC7B,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;;EAEA;IACA,OAAOuB,WAAW,CAACxB,OAAO,EAAE;EAC1B,IAAA,OAAOM,IAAI,CAACmB,GAAG,CAACvB,mBAAU,CAACF,OAAO,CAAC,EAAE,IAAI,CAACQ,QAAQ,CAAC,CAAA;EACrD,GAAA;IAEA,OAAOkB,mBAAmB,CAAC1B,OAAO,EAAEC,MAAM,GAAG,EAAE,EAAE;MAC/C,OAAO,IAAI,CAACuB,WAAW,CAACxB,OAAO,CAAC,IAAI,IAAI,IAAI,CAACA,OAAO,EAAE,OAAOC,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG,IAAI,CAAC,CAAA;EACnG,GAAA;EAEA,EAAA,WAAWL,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAO,CAAA;EAChB,GAAA;EAEA,EAAA,WAAWY,QAAQ,GAAG;EACpB,IAAA,OAAQ,CAAK,GAAA,EAAA,IAAI,CAACmB,IAAK,CAAC,CAAA,CAAA;EAC1B,GAAA;EAEA,EAAA,WAAWd,SAAS,GAAG;EACrB,IAAA,OAAQ,CAAG,CAAA,EAAA,IAAI,CAACL,QAAS,CAAC,CAAA,CAAA;EAC5B,GAAA;IAEA,OAAOoB,SAAS,CAACC,IAAI,EAAE;EACrB,IAAA,OAAQ,GAAEA,IAAK,CAAA,EAAE,IAAI,CAAChB,SAAU,CAAC,CAAA,CAAA;EACnC,GAAA;EACF;;;;;;;;"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/button.js b/vendor/twbs/bootstrap/js/dist/button.js
index fbe3f61dd..8bea72a75 100644
--- a/vendor/twbs/bootstrap/js/dist/button.js
+++ b/vendor/twbs/bootstrap/js/dist/button.js
@@ -1,25 +1,21 @@
/*!
- * Bootstrap button.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap button.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./base-component')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Button = factory(global.Index, global.EventHandler, global.BaseComponent));
-})(this, (function (index, EventHandler, BaseComponent) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
+})(this, (function (index_js, EventHandler, BaseComponent) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): button.js
+ * Bootstrap (v5.3.0-alpha1): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -31,50 +27,50 @@
const CLASS_NAME_ACTIVE = 'active';
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="button"]';
const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
+
/**
* Class definition
*/
- class Button extends BaseComponent__default.default {
+ class Button extends BaseComponent {
// Getters
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
toggle() {
// Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method
this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE));
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Button.getOrCreateInstance(this);
-
if (config === 'toggle') {
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {
event.preventDefault();
const button = event.target.closest(SELECTOR_DATA_TOGGLE);
const data = Button.getOrCreateInstance(button);
data.toggle();
});
+
/**
* jQuery
*/
- index.defineJQueryPlugin(Button);
+ index_js.defineJQueryPlugin(Button);
return Button;
diff --git a/vendor/twbs/bootstrap/js/dist/button.js.map b/vendor/twbs/bootstrap/js/dist/button.js.map
index 2cb33ecf0..87e5b5c56 100644
--- a/vendor/twbs/bootstrap/js/dist/button.js.map
+++ b/vendor/twbs/bootstrap/js/dist/button.js.map
@@ -1 +1 @@
-{"version":3,"file":"button.js","sources":["../src/button.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","BaseComponent","toggle","_element","setAttribute","classList","jQueryInterface","config","each","data","getOrCreateInstance","EventHandler","on","document","event","preventDefault","button","target","closest","defineJQueryPlugin"],"mappings":";;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAMA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,QAAb,CAAA;EACA,MAAMC,QAAQ,GAAG,WAAjB,CAAA;EACA,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAA/B,CAAA,CAAA;EACA,MAAME,YAAY,GAAG,WAArB,CAAA;EAEA,MAAMC,iBAAiB,GAAG,QAA1B,CAAA;EACA,MAAMC,oBAAoB,GAAG,2BAA7B,CAAA;EACA,MAAMC,oBAAoB,GAAI,CAAA,KAAA,EAAOJ,SAAU,CAAA,EAAEC,YAAa,CAA9D,CAAA,CAAA;EAEA;EACA;EACA;;EAEA,MAAMI,MAAN,SAAqBC,8BAArB,CAAmC;EACjC;EACe,EAAA,WAAJR,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAP,CAAA;EACD,GAJgC;;;EAOjCS,EAAAA,MAAM,GAAG;EACP;EACA,IAAA,IAAA,CAAKC,QAAL,CAAcC,YAAd,CAA2B,cAA3B,EAA2C,IAAA,CAAKD,QAAL,CAAcE,SAAd,CAAwBH,MAAxB,CAA+BL,iBAA/B,CAA3C,CAAA,CAAA;EACD,GAVgC;;;IAaX,OAAfS,eAAe,CAACC,MAAD,EAAS;MAC7B,OAAO,IAAA,CAAKC,IAAL,CAAU,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGT,MAAM,CAACU,mBAAP,CAA2B,IAA3B,CAAb,CAAA;;QAEA,IAAIH,MAAM,KAAK,QAAf,EAAyB;UACvBE,IAAI,CAACF,MAAD,CAAJ,EAAA,CAAA;EACD,OAAA;EACF,KANM,CAAP,CAAA;EAOD,GAAA;;EArBgC,CAAA;EAwBnC;EACA;EACA;;;AAEAI,+BAAY,CAACC,EAAb,CAAgBC,QAAhB,EAA0Bd,oBAA1B,EAAgDD,oBAAhD,EAAsEgB,KAAK,IAAI;EAC7EA,EAAAA,KAAK,CAACC,cAAN,EAAA,CAAA;IAEA,MAAMC,MAAM,GAAGF,KAAK,CAACG,MAAN,CAAaC,OAAb,CAAqBpB,oBAArB,CAAf,CAAA;EACA,EAAA,MAAMW,IAAI,GAAGT,MAAM,CAACU,mBAAP,CAA2BM,MAA3B,CAAb,CAAA;EAEAP,EAAAA,IAAI,CAACP,MAAL,EAAA,CAAA;EACD,CAPD,CAAA,CAAA;EASA;EACA;EACA;;AAEAiB,0BAAkB,CAACnB,MAAD,CAAlB;;;;;;;;"} \ No newline at end of file
+{"version":3,"file":"button.js","sources":["../src/button.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"button\"]'\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this)\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, event => {\n event.preventDefault()\n\n const button = event.target.closest(SELECTOR_DATA_TOGGLE)\n const data = Button.getOrCreateInstance(button)\n\n data.toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button)\n\nexport default Button\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","CLASS_NAME_ACTIVE","SELECTOR_DATA_TOGGLE","EVENT_CLICK_DATA_API","Button","BaseComponent","toggle","_element","setAttribute","classList","jQueryInterface","config","each","data","getOrCreateInstance","EventHandler","on","document","event","preventDefault","button","target","closest","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAMA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,QAAQ,CAAA;EACrB,MAAMC,QAAQ,GAAG,WAAW,CAAA;EAC5B,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAAC,CAAA,CAAA;EAChC,MAAME,YAAY,GAAG,WAAW,CAAA;EAEhC,MAAMC,iBAAiB,GAAG,QAAQ,CAAA;EAClC,MAAMC,oBAAoB,GAAG,2BAA2B,CAAA;EACxD,MAAMC,oBAAoB,GAAI,CAAA,KAAA,EAAOJ,SAAU,CAAA,EAAEC,YAAa,CAAC,CAAA,CAAA;;EAE/D;EACA;EACA;;EAEA,MAAMI,MAAM,SAASC,aAAa,CAAC;EACjC;EACA,EAAA,WAAWR,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAI,CAAA;EACb,GAAA;;EAEA;EACAS,EAAAA,MAAM,GAAG;EACP;EACA,IAAA,IAAI,CAACC,QAAQ,CAACC,YAAY,CAAC,cAAc,EAAE,IAAI,CAACD,QAAQ,CAACE,SAAS,CAACH,MAAM,CAACL,iBAAiB,CAAC,CAAC,CAAA;EAC/F,GAAA;;EAEA;IACA,OAAOS,eAAe,CAACC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,YAAY;EAC3B,MAAA,MAAMC,IAAI,GAAGT,MAAM,CAACU,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAE7C,IAAIH,MAAM,KAAK,QAAQ,EAAE;UACvBE,IAAI,CAACF,MAAM,CAAC,EAAE,CAAA;EAChB,OAAA;EACF,KAAC,CAAC,CAAA;EACJ,GAAA;EACF,CAAA;;EAEA;EACA;EACA;;EAEAI,YAAY,CAACC,EAAE,CAACC,QAAQ,EAAEd,oBAAoB,EAAED,oBAAoB,EAAEgB,KAAK,IAAI;IAC7EA,KAAK,CAACC,cAAc,EAAE,CAAA;IAEtB,MAAMC,MAAM,GAAGF,KAAK,CAACG,MAAM,CAACC,OAAO,CAACpB,oBAAoB,CAAC,CAAA;EACzD,EAAA,MAAMW,IAAI,GAAGT,MAAM,CAACU,mBAAmB,CAACM,MAAM,CAAC,CAAA;IAE/CP,IAAI,CAACP,MAAM,EAAE,CAAA;EACf,CAAC,CAAC,CAAA;;EAEF;EACA;EACA;;AAEAiB,6BAAkB,CAACnB,MAAM,CAAC;;;;;;;;"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/carousel.js b/vendor/twbs/bootstrap/js/dist/carousel.js
index e68122e0d..36e209a29 100644
--- a/vendor/twbs/bootstrap/js/dist/carousel.js
+++ b/vendor/twbs/bootstrap/js/dist/carousel.js
@@ -1,28 +1,21 @@
/*!
- * Bootstrap carousel.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap carousel.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/manipulator'), require('./dom/selector-engine'), require('./util/swipe'), require('./base-component')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./util/swipe.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './util/swipe', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Carousel = factory(global.Index, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Swipe, global.BaseComponent));
-})(this, (function (index, EventHandler, Manipulator, SelectorEngine, Swipe, BaseComponent) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const Swipe__default = /*#__PURE__*/_interopDefaultLegacy(Swipe);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
+})(this, (function (index_js, EventHandler, Manipulator, SelectorEngine, Swipe, BaseComponent) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): carousel.js
+ * Bootstrap (v5.3.0-alpha1): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -82,11 +75,12 @@
touch: 'boolean',
wrap: 'boolean'
};
+
/**
* Class definition
*/
- class Carousel extends BaseComponent__default.default {
+ class Carousel extends BaseComponent {
constructor(element, config) {
super(element, config);
this._interval = null;
@@ -94,136 +88,110 @@
this._isSliding = false;
this.touchTimeout = null;
this._swipeHelper = null;
- this._indicatorsElement = SelectorEngine__default.default.findOne(SELECTOR_INDICATORS, this._element);
-
+ this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);
this._addEventListeners();
-
if (this._config.ride === CLASS_NAME_CAROUSEL) {
this.cycle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
next() {
this._slide(ORDER_NEXT);
}
-
nextWhenVisible() {
// FIXME TODO use `document.visibilityState`
// Don't call next when the page isn't visible
// or the carousel or its parent isn't visible
- if (!document.hidden && index.isVisible(this._element)) {
+ if (!document.hidden && index_js.isVisible(this._element)) {
this.next();
}
}
-
prev() {
this._slide(ORDER_PREV);
}
-
pause() {
if (this._isSliding) {
- index.triggerTransitionEnd(this._element);
+ index_js.triggerTransitionEnd(this._element);
}
-
this._clearInterval();
}
-
cycle() {
this._clearInterval();
-
this._updateInterval();
-
this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);
}
-
_maybeEnableCycle() {
if (!this._config.ride) {
return;
}
-
if (this._isSliding) {
- EventHandler__default.default.one(this._element, EVENT_SLID, () => this.cycle());
+ EventHandler.one(this._element, EVENT_SLID, () => this.cycle());
return;
}
-
this.cycle();
}
-
to(index) {
const items = this._getItems();
-
if (index > items.length - 1 || index < 0) {
return;
}
-
if (this._isSliding) {
- EventHandler__default.default.one(this._element, EVENT_SLID, () => this.to(index));
+ EventHandler.one(this._element, EVENT_SLID, () => this.to(index));
return;
}
-
const activeIndex = this._getItemIndex(this._getActive());
-
if (activeIndex === index) {
return;
}
-
const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;
-
this._slide(order, items[index]);
}
-
dispose() {
if (this._swipeHelper) {
this._swipeHelper.dispose();
}
-
super.dispose();
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
config.defaultInterval = config.interval;
return config;
}
-
_addEventListeners() {
if (this._config.keyboard) {
- EventHandler__default.default.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
+ EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
}
-
if (this._config.pause === 'hover') {
- EventHandler__default.default.on(this._element, EVENT_MOUSEENTER, () => this.pause());
- EventHandler__default.default.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle());
+ EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause());
+ EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle());
}
-
- if (this._config.touch && Swipe__default.default.isSupported()) {
+ if (this._config.touch && Swipe.isSupported()) {
this._addTouchEventListeners();
}
}
-
_addTouchEventListeners() {
- for (const img of SelectorEngine__default.default.find(SELECTOR_ITEM_IMG, this._element)) {
- EventHandler__default.default.on(img, EVENT_DRAG_START, event => event.preventDefault());
+ for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {
+ EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());
}
-
const endCallBack = () => {
if (this._config.pause !== 'hover') {
return;
- } // If it's a touch-enabled device, mouseenter/leave are fired as
+ }
+
+ // If it's a touch-enabled device, mouseenter/leave are fired as
// part of the mouse compatibility events on first tap - the carousel
// would stop cycling until user tapped out of it;
// here, we listen for touchend, explicitly pause the carousel
@@ -231,120 +199,92 @@
// is NOT fired) and after a timeout (to allow for mouse compatibility
// events to fire) we explicitly restart cycling
-
this.pause();
-
if (this.touchTimeout) {
clearTimeout(this.touchTimeout);
}
-
this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);
};
-
const swipeConfig = {
leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),
rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),
endCallback: endCallBack
};
- this._swipeHelper = new Swipe__default.default(this._element, swipeConfig);
+ this._swipeHelper = new Swipe(this._element, swipeConfig);
}
-
_keydown(event) {
if (/input|textarea/i.test(event.target.tagName)) {
return;
}
-
const direction = KEY_TO_DIRECTION[event.key];
-
if (direction) {
event.preventDefault();
-
this._slide(this._directionToOrder(direction));
}
}
-
_getItemIndex(element) {
return this._getItems().indexOf(element);
}
-
_setActiveIndicatorElement(index) {
if (!this._indicatorsElement) {
return;
}
-
- const activeIndicator = SelectorEngine__default.default.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
+ const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);
activeIndicator.classList.remove(CLASS_NAME_ACTIVE);
activeIndicator.removeAttribute('aria-current');
- const newActiveIndicator = SelectorEngine__default.default.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
-
+ const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement);
if (newActiveIndicator) {
newActiveIndicator.classList.add(CLASS_NAME_ACTIVE);
newActiveIndicator.setAttribute('aria-current', 'true');
}
}
-
_updateInterval() {
const element = this._activeElement || this._getActive();
-
if (!element) {
return;
}
-
const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);
this._config.interval = elementInterval || this._config.defaultInterval;
}
-
_slide(order, element = null) {
if (this._isSliding) {
return;
}
-
const activeElement = this._getActive();
-
const isNext = order === ORDER_NEXT;
- const nextElement = element || index.getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
-
+ const nextElement = element || index_js.getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);
if (nextElement === activeElement) {
return;
}
-
const nextElementIndex = this._getItemIndex(nextElement);
-
const triggerEvent = eventName => {
- return EventHandler__default.default.trigger(this._element, eventName, {
+ return EventHandler.trigger(this._element, eventName, {
relatedTarget: nextElement,
direction: this._orderToDirection(order),
from: this._getItemIndex(activeElement),
to: nextElementIndex
});
};
-
const slideEvent = triggerEvent(EVENT_SLIDE);
-
if (slideEvent.defaultPrevented) {
return;
}
-
if (!activeElement || !nextElement) {
// Some weirdness is happening, so we bail
// todo: change tests that use empty divs to avoid this check
return;
}
-
const isCycling = Boolean(this._interval);
this.pause();
this._isSliding = true;
-
this._setActiveIndicatorElement(nextElementIndex);
-
this._activeElement = nextElement;
const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;
const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;
nextElement.classList.add(orderClassName);
- index.reflow(nextElement);
+ index_js.reflow(nextElement);
activeElement.classList.add(directionalClassName);
nextElement.classList.add(directionalClassName);
-
const completeCallBack = () => {
nextElement.classList.remove(directionalClassName, orderClassName);
nextElement.classList.add(CLASS_NAME_ACTIVE);
@@ -352,118 +292,94 @@
this._isSliding = false;
triggerEvent(EVENT_SLID);
};
-
this._queueCallback(completeCallBack, activeElement, this._isAnimated());
-
if (isCycling) {
this.cycle();
}
}
-
_isAnimated() {
return this._element.classList.contains(CLASS_NAME_SLIDE);
}
-
_getActive() {
- return SelectorEngine__default.default.findOne(SELECTOR_ACTIVE_ITEM, this._element);
+ return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);
}
-
_getItems() {
- return SelectorEngine__default.default.find(SELECTOR_ITEM, this._element);
+ return SelectorEngine.find(SELECTOR_ITEM, this._element);
}
-
_clearInterval() {
if (this._interval) {
clearInterval(this._interval);
this._interval = null;
}
}
-
_directionToOrder(direction) {
- if (index.isRTL()) {
+ if (index_js.isRTL()) {
return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;
}
-
return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;
}
-
_orderToDirection(order) {
- if (index.isRTL()) {
+ if (index_js.isRTL()) {
return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;
}
-
return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Carousel.getOrCreateInstance(this, config);
-
if (typeof config === 'number') {
data.to(config);
return;
}
-
if (typeof config === 'string') {
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {
- const target = index.getElementFromSelector(this);
-
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {
+ const target = SelectorEngine.getElementFromSelector(this);
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
return;
}
-
event.preventDefault();
const carousel = Carousel.getOrCreateInstance(target);
const slideIndex = this.getAttribute('data-bs-slide-to');
-
if (slideIndex) {
carousel.to(slideIndex);
-
carousel._maybeEnableCycle();
-
return;
}
-
- if (Manipulator__default.default.getDataAttribute(this, 'slide') === 'next') {
+ if (Manipulator.getDataAttribute(this, 'slide') === 'next') {
carousel.next();
-
carousel._maybeEnableCycle();
-
return;
}
-
carousel.prev();
-
carousel._maybeEnableCycle();
});
- EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
- const carousels = SelectorEngine__default.default.find(SELECTOR_DATA_RIDE);
-
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
+ const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);
for (const carousel of carousels) {
Carousel.getOrCreateInstance(carousel);
}
});
+
/**
* jQuery
*/
- index.defineJQueryPlugin(Carousel);
+ index_js.defineJQueryPlugin(Carousel);
return Carousel;
diff --git a/vendor/twbs/bootstrap/js/dist/carousel.js.map b/vendor/twbs/bootstrap/js/dist/carousel.js.map
index 3952685f1..0c4a35d17 100644
--- a/vendor/twbs/bootstrap/js/dist/carousel.js.map
+++ b/vendor/twbs/bootstrap/js/dist/carousel.js.map
@@ -1 +1 @@
-{"version":3,"file":"carousel.js","sources":["../src/carousel.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport Swipe from './util/swipe'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","Default","interval","keyboard","pause","ride","touch","wrap","DefaultType","Carousel","BaseComponent","constructor","element","config","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","SelectorEngine","findOne","_element","_addEventListeners","_config","cycle","next","_slide","nextWhenVisible","document","hidden","isVisible","prev","triggerTransitionEnd","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","EventHandler","one","to","index","items","_getItems","length","activeIndex","_getItemIndex","_getActive","order","dispose","_configAfterMerge","defaultInterval","on","event","_keydown","Swipe","isSupported","_addTouchEventListeners","img","find","preventDefault","endCallBack","clearTimeout","setTimeout","swipeConfig","leftCallback","_directionToOrder","rightCallback","endCallback","test","target","tagName","direction","key","indexOf","_setActiveIndicatorElement","activeIndicator","classList","remove","removeAttribute","newActiveIndicator","add","setAttribute","elementInterval","Number","parseInt","getAttribute","activeElement","isNext","nextElement","getNextActiveElement","nextElementIndex","triggerEvent","eventName","trigger","relatedTarget","_orderToDirection","from","slideEvent","defaultPrevented","isCycling","Boolean","directionalClassName","orderClassName","reflow","completeCallBack","_queueCallback","_isAnimated","contains","clearInterval","isRTL","jQueryInterface","each","data","getOrCreateInstance","undefined","startsWith","TypeError","getElementFromSelector","carousel","slideIndex","Manipulator","getDataAttribute","window","carousels","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"carousel.js","sources":["../src/carousel.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Swipe from './util/swipe.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)', // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._interval = null\n this._activeElement = null\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element)\n }\n\n this._clearInterval()\n }\n\n cycle() {\n this._clearInterval()\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle())\n return\n }\n\n this.cycle()\n }\n\n to(index) {\n const items = this._getItems()\n if (index > items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n const activeIndex = this._getItemIndex(this._getActive())\n if (activeIndex === index) {\n return\n }\n\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV\n\n this._slide(order, items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, () => this.pause())\n EventHandler.on(this._element, EVENT_MOUSELEAVE, () => this._maybeEnableCycle())\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(this._directionToOrder(direction))\n }\n }\n\n _getItemIndex(element) {\n return this._getItems().indexOf(element)\n }\n\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(order, element = null) {\n if (this._isSliding) {\n return\n }\n\n const activeElement = this._getActive()\n const isNext = order === ORDER_NEXT\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap)\n\n if (nextElement === activeElement) {\n return\n }\n\n const nextElementIndex = this._getItemIndex(nextElement)\n\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n })\n }\n\n const slideEvent = triggerEvent(EVENT_SLIDE)\n\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // todo: change tests that use empty divs to avoid this check\n return\n }\n\n const isCycling = Boolean(this._interval)\n this.pause()\n\n this._isSliding = true\n\n this._setActiveIndicatorElement(nextElementIndex)\n this._activeElement = nextElement\n\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n triggerEvent(EVENT_SLID)\n }\n\n this._queueCallback(completeCallBack, activeElement, this._isAnimated())\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE)\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config)\n\n if (typeof config === 'number') {\n data.to(config)\n return\n }\n\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n event.preventDefault()\n\n const carousel = Carousel.getOrCreateInstance(target)\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n carousel.to(slideIndex)\n carousel._maybeEnableCycle()\n return\n }\n\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next()\n carousel._maybeEnableCycle()\n return\n }\n\n carousel.prev()\n carousel._maybeEnableCycle()\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","TOUCHEVENT_COMPAT_WAIT","ORDER_NEXT","ORDER_PREV","DIRECTION_LEFT","DIRECTION_RIGHT","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","CLASS_NAME_CAROUSEL","CLASS_NAME_ACTIVE","CLASS_NAME_SLIDE","CLASS_NAME_END","CLASS_NAME_START","CLASS_NAME_NEXT","CLASS_NAME_PREV","SELECTOR_ACTIVE","SELECTOR_ITEM","SELECTOR_ACTIVE_ITEM","SELECTOR_ITEM_IMG","SELECTOR_INDICATORS","SELECTOR_DATA_SLIDE","SELECTOR_DATA_RIDE","KEY_TO_DIRECTION","Default","interval","keyboard","pause","ride","touch","wrap","DefaultType","Carousel","BaseComponent","constructor","element","config","_interval","_activeElement","_isSliding","touchTimeout","_swipeHelper","_indicatorsElement","SelectorEngine","findOne","_element","_addEventListeners","_config","cycle","next","_slide","nextWhenVisible","document","hidden","isVisible","prev","triggerTransitionEnd","_clearInterval","_updateInterval","setInterval","_maybeEnableCycle","EventHandler","one","to","index","items","_getItems","length","activeIndex","_getItemIndex","_getActive","order","dispose","_configAfterMerge","defaultInterval","on","event","_keydown","Swipe","isSupported","_addTouchEventListeners","img","find","preventDefault","endCallBack","clearTimeout","setTimeout","swipeConfig","leftCallback","_directionToOrder","rightCallback","endCallback","test","target","tagName","direction","key","indexOf","_setActiveIndicatorElement","activeIndicator","classList","remove","removeAttribute","newActiveIndicator","add","setAttribute","elementInterval","Number","parseInt","getAttribute","activeElement","isNext","nextElement","getNextActiveElement","nextElementIndex","triggerEvent","eventName","trigger","relatedTarget","_orderToDirection","from","slideEvent","defaultPrevented","isCycling","Boolean","directionalClassName","orderClassName","reflow","completeCallBack","_queueCallback","_isAnimated","contains","clearInterval","isRTL","jQueryInterface","each","data","getOrCreateInstance","undefined","startsWith","TypeError","getElementFromSelector","carousel","slideIndex","Manipulator","getDataAttribute","window","carousels","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/collapse.js b/vendor/twbs/bootstrap/js/dist/collapse.js
index 58ff2aef5..13ccd7a94 100644
--- a/vendor/twbs/bootstrap/js/dist/collapse.js
+++ b/vendor/twbs/bootstrap/js/dist/collapse.js
@@ -1,26 +1,21 @@
/*!
- * Bootstrap collapse.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap collapse.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
-})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
+})(this, (function (index_js, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): collapse.js
+ * Bootstrap (v5.3.0-alpha1): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -52,51 +47,45 @@
parent: '(null|element)',
toggle: 'boolean'
};
+
/**
* Class definition
*/
- class Collapse extends BaseComponent__default.default {
+ class Collapse extends BaseComponent {
constructor(element, config) {
super(element, config);
this._isTransitioning = false;
this._triggerArray = [];
- const toggleList = SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE);
-
+ const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE);
for (const elem of toggleList) {
- const selector = index.getSelectorFromElement(elem);
- const filterElement = SelectorEngine__default.default.find(selector).filter(foundElement => foundElement === this._element);
-
+ const selector = SelectorEngine.getSelectorFromElement(elem);
+ const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);
if (selector !== null && filterElement.length) {
this._triggerArray.push(elem);
}
}
-
this._initializeChildren();
-
if (!this._config.parent) {
this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());
}
-
if (this._config.toggle) {
this.toggle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
toggle() {
if (this._isShown()) {
this.hide();
@@ -104,206 +93,154 @@
this.show();
}
}
-
show() {
if (this._isTransitioning || this._isShown()) {
return;
}
+ let activeChildren = [];
- let activeChildren = []; // find active children
-
+ // find active children
if (this._config.parent) {
activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {
toggle: false
}));
}
-
if (activeChildren.length && activeChildren[0]._isTransitioning) {
return;
}
-
- const startEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW);
-
+ const startEvent = EventHandler.trigger(this._element, EVENT_SHOW);
if (startEvent.defaultPrevented) {
return;
}
-
for (const activeInstance of activeChildren) {
activeInstance.hide();
}
-
const dimension = this._getDimension();
-
this._element.classList.remove(CLASS_NAME_COLLAPSE);
-
this._element.classList.add(CLASS_NAME_COLLAPSING);
-
this._element.style[dimension] = 0;
-
this._addAriaAndCollapsedClass(this._triggerArray, true);
-
this._isTransitioning = true;
-
const complete = () => {
this._isTransitioning = false;
-
this._element.classList.remove(CLASS_NAME_COLLAPSING);
-
this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
-
this._element.style[dimension] = '';
- EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
+ EventHandler.trigger(this._element, EVENT_SHOWN);
};
-
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
const scrollSize = `scroll${capitalizedDimension}`;
-
this._queueCallback(complete, this._element, true);
-
this._element.style[dimension] = `${this._element[scrollSize]}px`;
}
-
hide() {
if (this._isTransitioning || !this._isShown()) {
return;
}
-
- const startEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
-
+ const startEvent = EventHandler.trigger(this._element, EVENT_HIDE);
if (startEvent.defaultPrevented) {
return;
}
-
const dimension = this._getDimension();
-
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;
- index.reflow(this._element);
-
+ index_js.reflow(this._element);
this._element.classList.add(CLASS_NAME_COLLAPSING);
-
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW);
-
for (const trigger of this._triggerArray) {
- const element = index.getElementFromSelector(trigger);
-
+ const element = SelectorEngine.getElementFromSelector(trigger);
if (element && !this._isShown(element)) {
this._addAriaAndCollapsedClass([trigger], false);
}
}
-
this._isTransitioning = true;
-
const complete = () => {
this._isTransitioning = false;
-
this._element.classList.remove(CLASS_NAME_COLLAPSING);
-
this._element.classList.add(CLASS_NAME_COLLAPSE);
-
- EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
+ EventHandler.trigger(this._element, EVENT_HIDDEN);
};
-
this._element.style[dimension] = '';
-
this._queueCallback(complete, this._element, true);
}
-
_isShown(element = this._element) {
return element.classList.contains(CLASS_NAME_SHOW);
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
config.toggle = Boolean(config.toggle); // Coerce string values
-
- config.parent = index.getElement(config.parent);
+ config.parent = index_js.getElement(config.parent);
return config;
}
-
_getDimension() {
return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;
}
-
_initializeChildren() {
if (!this._config.parent) {
return;
}
-
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE);
-
for (const element of children) {
- const selected = index.getElementFromSelector(element);
-
+ const selected = SelectorEngine.getElementFromSelector(element);
if (selected) {
this._addAriaAndCollapsedClass([element], this._isShown(selected));
}
}
}
-
_getFirstLevelChildren(selector) {
- const children = SelectorEngine__default.default.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth
-
- return SelectorEngine__default.default.find(selector, this._config.parent).filter(element => !children.includes(element));
+ const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);
+ // remove children if greater depth
+ return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));
}
-
_addAriaAndCollapsedClass(triggerArray, isOpen) {
if (!triggerArray.length) {
return;
}
-
for (const element of triggerArray) {
element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);
element.setAttribute('aria-expanded', isOpen);
}
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
const _config = {};
-
if (typeof config === 'string' && /show|hide/.test(config)) {
_config.toggle = false;
}
-
return this.each(function () {
const data = Collapse.getOrCreateInstance(this, _config);
-
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
}
});
}
-
}
+
/**
* Data API implementation
*/
-
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element
if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {
event.preventDefault();
}
-
- const selector = index.getSelectorFromElement(this);
- const selectorElements = SelectorEngine__default.default.find(selector);
-
- for (const element of selectorElements) {
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
Collapse.getOrCreateInstance(element, {
toggle: false
}).toggle();
}
});
+
/**
* jQuery
*/
- index.defineJQueryPlugin(Collapse);
+ index_js.defineJQueryPlugin(Collapse);
return Collapse;
diff --git a/vendor/twbs/bootstrap/js/dist/collapse.js.map b/vendor/twbs/bootstrap/js/dist/collapse.js.map
index 0d2debc47..d324abefc 100644
--- a/vendor/twbs/bootstrap/js/dist/collapse.js.map
+++ b/vendor/twbs/bootstrap/js/dist/collapse.js.map
@@ -1 +1 @@
-{"version":3,"file":"collapse.js","sources":["../src/collapse.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n getElementFromSelector,\n getSelectorFromElement,\n reflow\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n const selector = getSelectorFromElement(this)\n const selectorElements = SelectorEngine.find(selector)\n\n for (const element of selectorElements) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_CLICK_DATA_API","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE","Default","parent","toggle","DefaultType","Collapse","BaseComponent","constructor","element","config","_isTransitioning","_triggerArray","toggleList","SelectorEngine","find","elem","selector","getSelectorFromElement","filterElement","filter","foundElement","_element","length","push","_initializeChildren","_config","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","map","getOrCreateInstance","startEvent","EventHandler","trigger","defaultPrevented","activeInstance","dimension","_getDimension","classList","remove","add","style","complete","capitalizedDimension","toUpperCase","slice","scrollSize","_queueCallback","getBoundingClientRect","reflow","getElementFromSelector","contains","_configAfterMerge","Boolean","getElement","children","selected","includes","triggerArray","isOpen","setAttribute","jQueryInterface","test","each","data","TypeError","on","document","event","target","tagName","delegateTarget","preventDefault","selectorElements","defineJQueryPlugin"],"mappings":";;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAaA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,UAAb,CAAA;EACA,MAAMC,QAAQ,GAAG,aAAjB,CAAA;EACA,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAA/B,CAAA,CAAA;EACA,MAAME,YAAY,GAAG,WAArB,CAAA;EAEA,MAAMC,UAAU,GAAI,CAAMF,IAAAA,EAAAA,SAAU,CAApC,CAAA,CAAA;EACA,MAAMG,WAAW,GAAI,CAAOH,KAAAA,EAAAA,SAAU,CAAtC,CAAA,CAAA;EACA,MAAMI,UAAU,GAAI,CAAMJ,IAAAA,EAAAA,SAAU,CAApC,CAAA,CAAA;EACA,MAAMK,YAAY,GAAI,CAAQL,MAAAA,EAAAA,SAAU,CAAxC,CAAA,CAAA;EACA,MAAMM,oBAAoB,GAAI,CAAA,KAAA,EAAON,SAAU,CAAA,EAAEC,YAAa,CAA9D,CAAA,CAAA;EAEA,MAAMM,eAAe,GAAG,MAAxB,CAAA;EACA,MAAMC,mBAAmB,GAAG,UAA5B,CAAA;EACA,MAAMC,qBAAqB,GAAG,YAA9B,CAAA;EACA,MAAMC,oBAAoB,GAAG,WAA7B,CAAA;EACA,MAAMC,0BAA0B,GAAI,CAAA,QAAA,EAAUH,mBAAoB,CAAA,EAAA,EAAIA,mBAAoB,CAA1F,CAAA,CAAA;EACA,MAAMI,qBAAqB,GAAG,qBAA9B,CAAA;EAEA,MAAMC,KAAK,GAAG,OAAd,CAAA;EACA,MAAMC,MAAM,GAAG,QAAf,CAAA;EAEA,MAAMC,gBAAgB,GAAG,sCAAzB,CAAA;EACA,MAAMC,oBAAoB,GAAG,6BAA7B,CAAA;EAEA,MAAMC,OAAO,GAAG;EACdC,EAAAA,MAAM,EAAE,IADM;EAEdC,EAAAA,MAAM,EAAE,IAAA;EAFM,CAAhB,CAAA;EAKA,MAAMC,WAAW,GAAG;EAClBF,EAAAA,MAAM,EAAE,gBADU;EAElBC,EAAAA,MAAM,EAAE,SAAA;EAFU,CAApB,CAAA;EAKA;EACA;EACA;;EAEA,MAAME,QAAN,SAAuBC,8BAAvB,CAAqC;EACnCC,EAAAA,WAAW,CAACC,OAAD,EAAUC,MAAV,EAAkB;MAC3B,KAAMD,CAAAA,OAAN,EAAeC,MAAf,CAAA,CAAA;MAEA,IAAKC,CAAAA,gBAAL,GAAwB,KAAxB,CAAA;MACA,IAAKC,CAAAA,aAAL,GAAqB,EAArB,CAAA;EAEA,IAAA,MAAMC,UAAU,GAAGC,+BAAc,CAACC,IAAf,CAAoBd,oBAApB,CAAnB,CAAA;;EAEA,IAAA,KAAK,MAAMe,IAAX,IAAmBH,UAAnB,EAA+B;EAC7B,MAAA,MAAMI,QAAQ,GAAGC,4BAAsB,CAACF,IAAD,CAAvC,CAAA;EACA,MAAA,MAAMG,aAAa,GAAGL,+BAAc,CAACC,IAAf,CAAoBE,QAApB,CAAA,CACnBG,MADmB,CACZC,YAAY,IAAIA,YAAY,KAAK,IAAA,CAAKC,QAD1B,CAAtB,CAAA;;EAGA,MAAA,IAAIL,QAAQ,KAAK,IAAb,IAAqBE,aAAa,CAACI,MAAvC,EAA+C;EAC7C,QAAA,IAAA,CAAKX,aAAL,CAAmBY,IAAnB,CAAwBR,IAAxB,CAAA,CAAA;EACD,OAAA;EACF,KAAA;;EAED,IAAA,IAAA,CAAKS,mBAAL,EAAA,CAAA;;EAEA,IAAA,IAAI,CAAC,IAAA,CAAKC,OAAL,CAAavB,MAAlB,EAA0B;EACxB,MAAA,IAAA,CAAKwB,yBAAL,CAA+B,IAAA,CAAKf,aAApC,EAAmD,IAAA,CAAKgB,QAAL,EAAnD,CAAA,CAAA;EACD,KAAA;;EAED,IAAA,IAAI,IAAKF,CAAAA,OAAL,CAAatB,MAAjB,EAAyB;EACvB,MAAA,IAAA,CAAKA,MAAL,EAAA,CAAA;EACD,KAAA;EACF,GA5BkC;;;EA+BjB,EAAA,WAAPF,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAP,CAAA;EACD,GAAA;;EAEqB,EAAA,WAAXG,WAAW,GAAG;EACvB,IAAA,OAAOA,WAAP,CAAA;EACD,GAAA;;EAEc,EAAA,WAAJtB,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAP,CAAA;EACD,GAzCkC;;;EA4CnCqB,EAAAA,MAAM,GAAG;MACP,IAAI,IAAA,CAAKwB,QAAL,EAAJ,EAAqB;EACnB,MAAA,IAAA,CAAKC,IAAL,EAAA,CAAA;EACD,KAFD,MAEO;EACL,MAAA,IAAA,CAAKC,IAAL,EAAA,CAAA;EACD,KAAA;EACF,GAAA;;EAEDA,EAAAA,IAAI,GAAG;EACL,IAAA,IAAI,KAAKnB,gBAAL,IAAyB,IAAKiB,CAAAA,QAAL,EAA7B,EAA8C;EAC5C,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,IAAIG,cAAc,GAAG,EAArB,CALK;;EAQL,IAAA,IAAI,IAAKL,CAAAA,OAAL,CAAavB,MAAjB,EAAyB;QACvB4B,cAAc,GAAG,IAAKC,CAAAA,sBAAL,CAA4BhC,gBAA5B,EACdoB,MADc,CACPX,OAAO,IAAIA,OAAO,KAAK,KAAKa,QADrB,CAAA,CAEdW,GAFc,CAEVxB,OAAO,IAAIH,QAAQ,CAAC4B,mBAAT,CAA6BzB,OAA7B,EAAsC;EAAEL,QAAAA,MAAM,EAAE,KAAA;EAAV,OAAtC,CAFD,CAAjB,CAAA;EAGD,KAAA;;MAED,IAAI2B,cAAc,CAACR,MAAf,IAAyBQ,cAAc,CAAC,CAAD,CAAd,CAAkBpB,gBAA/C,EAAiE;EAC/D,MAAA,OAAA;EACD,KAAA;;MAED,MAAMwB,UAAU,GAAGC,6BAAY,CAACC,OAAb,CAAqB,IAAKf,CAAAA,QAA1B,EAAoCnC,UAApC,CAAnB,CAAA;;MACA,IAAIgD,UAAU,CAACG,gBAAf,EAAiC;EAC/B,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,KAAK,MAAMC,cAAX,IAA6BR,cAA7B,EAA6C;EAC3CQ,MAAAA,cAAc,CAACV,IAAf,EAAA,CAAA;EACD,KAAA;;EAED,IAAA,MAAMW,SAAS,GAAG,IAAKC,CAAAA,aAAL,EAAlB,CAAA;;EAEA,IAAA,IAAA,CAAKnB,QAAL,CAAcoB,SAAd,CAAwBC,MAAxB,CAA+BlD,mBAA/B,CAAA,CAAA;;EACA,IAAA,IAAA,CAAK6B,QAAL,CAAcoB,SAAd,CAAwBE,GAAxB,CAA4BlD,qBAA5B,CAAA,CAAA;;EAEA,IAAA,IAAA,CAAK4B,QAAL,CAAcuB,KAAd,CAAoBL,SAApB,IAAiC,CAAjC,CAAA;;EAEA,IAAA,IAAA,CAAKb,yBAAL,CAA+B,IAAKf,CAAAA,aAApC,EAAmD,IAAnD,CAAA,CAAA;;MACA,IAAKD,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;;MAEA,MAAMmC,QAAQ,GAAG,MAAM;QACrB,IAAKnC,CAAAA,gBAAL,GAAwB,KAAxB,CAAA;;EAEA,MAAA,IAAA,CAAKW,QAAL,CAAcoB,SAAd,CAAwBC,MAAxB,CAA+BjD,qBAA/B,CAAA,CAAA;;QACA,IAAK4B,CAAAA,QAAL,CAAcoB,SAAd,CAAwBE,GAAxB,CAA4BnD,mBAA5B,EAAiDD,eAAjD,CAAA,CAAA;;EAEA,MAAA,IAAA,CAAK8B,QAAL,CAAcuB,KAAd,CAAoBL,SAApB,IAAiC,EAAjC,CAAA;EAEAJ,MAAAA,6BAAY,CAACC,OAAb,CAAqB,IAAKf,CAAAA,QAA1B,EAAoClC,WAApC,CAAA,CAAA;OARF,CAAA;;EAWA,IAAA,MAAM2D,oBAAoB,GAAGP,SAAS,CAAC,CAAD,CAAT,CAAaQ,WAAb,EAAA,GAA6BR,SAAS,CAACS,KAAV,CAAgB,CAAhB,CAA1D,CAAA;EACA,IAAA,MAAMC,UAAU,GAAI,CAAQH,MAAAA,EAAAA,oBAAqB,CAAjD,CAAA,CAAA;;EAEA,IAAA,IAAA,CAAKI,cAAL,CAAoBL,QAApB,EAA8B,IAAKxB,CAAAA,QAAnC,EAA6C,IAA7C,CAAA,CAAA;;EACA,IAAA,IAAA,CAAKA,QAAL,CAAcuB,KAAd,CAAoBL,SAApB,CAAA,GAAkC,CAAE,EAAA,IAAA,CAAKlB,QAAL,CAAc4B,UAAd,CAA0B,CAA9D,EAAA,CAAA,CAAA;EACD,GAAA;;EAEDrB,EAAAA,IAAI,GAAG;EACL,IAAA,IAAI,KAAKlB,gBAAL,IAAyB,CAAC,IAAKiB,CAAAA,QAAL,EAA9B,EAA+C;EAC7C,MAAA,OAAA;EACD,KAAA;;MAED,MAAMO,UAAU,GAAGC,6BAAY,CAACC,OAAb,CAAqB,IAAKf,CAAAA,QAA1B,EAAoCjC,UAApC,CAAnB,CAAA;;MACA,IAAI8C,UAAU,CAACG,gBAAf,EAAiC;EAC/B,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,MAAME,SAAS,GAAG,IAAKC,CAAAA,aAAL,EAAlB,CAAA;;EAEA,IAAA,IAAA,CAAKnB,QAAL,CAAcuB,KAAd,CAAoBL,SAApB,CAAkC,GAAA,CAAA,EAAE,IAAKlB,CAAAA,QAAL,CAAc8B,qBAAd,EAAsCZ,CAAAA,SAAtC,CAAiD,CAArF,EAAA,CAAA,CAAA;MAEAa,YAAM,CAAC,IAAK/B,CAAAA,QAAN,CAAN,CAAA;;EAEA,IAAA,IAAA,CAAKA,QAAL,CAAcoB,SAAd,CAAwBE,GAAxB,CAA4BlD,qBAA5B,CAAA,CAAA;;MACA,IAAK4B,CAAAA,QAAL,CAAcoB,SAAd,CAAwBC,MAAxB,CAA+BlD,mBAA/B,EAAoDD,eAApD,CAAA,CAAA;;EAEA,IAAA,KAAK,MAAM6C,OAAX,IAAsB,IAAA,CAAKzB,aAA3B,EAA0C;EACxC,MAAA,MAAMH,OAAO,GAAG6C,4BAAsB,CAACjB,OAAD,CAAtC,CAAA;;QAEA,IAAI5B,OAAO,IAAI,CAAC,IAAA,CAAKmB,QAAL,CAAcnB,OAAd,CAAhB,EAAwC;EACtC,QAAA,IAAA,CAAKkB,yBAAL,CAA+B,CAACU,OAAD,CAA/B,EAA0C,KAA1C,CAAA,CAAA;EACD,OAAA;EACF,KAAA;;MAED,IAAK1B,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;;MAEA,MAAMmC,QAAQ,GAAG,MAAM;QACrB,IAAKnC,CAAAA,gBAAL,GAAwB,KAAxB,CAAA;;EACA,MAAA,IAAA,CAAKW,QAAL,CAAcoB,SAAd,CAAwBC,MAAxB,CAA+BjD,qBAA/B,CAAA,CAAA;;EACA,MAAA,IAAA,CAAK4B,QAAL,CAAcoB,SAAd,CAAwBE,GAAxB,CAA4BnD,mBAA5B,CAAA,CAAA;;EACA2C,MAAAA,6BAAY,CAACC,OAAb,CAAqB,IAAKf,CAAAA,QAA1B,EAAoChC,YAApC,CAAA,CAAA;OAJF,CAAA;;EAOA,IAAA,IAAA,CAAKgC,QAAL,CAAcuB,KAAd,CAAoBL,SAApB,IAAiC,EAAjC,CAAA;;EAEA,IAAA,IAAA,CAAKW,cAAL,CAAoBL,QAApB,EAA8B,IAAKxB,CAAAA,QAAnC,EAA6C,IAA7C,CAAA,CAAA;EACD,GAAA;;EAEDM,EAAAA,QAAQ,CAACnB,OAAO,GAAG,IAAA,CAAKa,QAAhB,EAA0B;EAChC,IAAA,OAAOb,OAAO,CAACiC,SAAR,CAAkBa,QAAlB,CAA2B/D,eAA3B,CAAP,CAAA;EACD,GAtJkC;;;IAyJnCgE,iBAAiB,CAAC9C,MAAD,EAAS;MACxBA,MAAM,CAACN,MAAP,GAAgBqD,OAAO,CAAC/C,MAAM,CAACN,MAAR,CAAvB,CADwB;;MAExBM,MAAM,CAACP,MAAP,GAAgBuD,gBAAU,CAAChD,MAAM,CAACP,MAAR,CAA1B,CAAA;EACA,IAAA,OAAOO,MAAP,CAAA;EACD,GAAA;;EAED+B,EAAAA,aAAa,GAAG;MACd,OAAO,IAAA,CAAKnB,QAAL,CAAcoB,SAAd,CAAwBa,QAAxB,CAAiC1D,qBAAjC,CAAA,GAA0DC,KAA1D,GAAkEC,MAAzE,CAAA;EACD,GAAA;;EAED0B,EAAAA,mBAAmB,GAAG;EACpB,IAAA,IAAI,CAAC,IAAA,CAAKC,OAAL,CAAavB,MAAlB,EAA0B;EACxB,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,MAAMwD,QAAQ,GAAG,IAAA,CAAK3B,sBAAL,CAA4B/B,oBAA5B,CAAjB,CAAA;;EAEA,IAAA,KAAK,MAAMQ,OAAX,IAAsBkD,QAAtB,EAAgC;EAC9B,MAAA,MAAMC,QAAQ,GAAGN,4BAAsB,CAAC7C,OAAD,CAAvC,CAAA;;EAEA,MAAA,IAAImD,QAAJ,EAAc;UACZ,IAAKjC,CAAAA,yBAAL,CAA+B,CAAClB,OAAD,CAA/B,EAA0C,IAAKmB,CAAAA,QAAL,CAAcgC,QAAd,CAA1C,CAAA,CAAA;EACD,OAAA;EACF,KAAA;EACF,GAAA;;IAED5B,sBAAsB,CAACf,QAAD,EAAW;EAC/B,IAAA,MAAM0C,QAAQ,GAAG7C,+BAAc,CAACC,IAAf,CAAoBnB,0BAApB,EAAgD,IAAA,CAAK8B,OAAL,CAAavB,MAA7D,CAAjB,CAD+B;;MAG/B,OAAOW,+BAAc,CAACC,IAAf,CAAoBE,QAApB,EAA8B,IAAA,CAAKS,OAAL,CAAavB,MAA3C,CAAA,CAAmDiB,MAAnD,CAA0DX,OAAO,IAAI,CAACkD,QAAQ,CAACE,QAAT,CAAkBpD,OAAlB,CAAtE,CAAP,CAAA;EACD,GAAA;;EAEDkB,EAAAA,yBAAyB,CAACmC,YAAD,EAAeC,MAAf,EAAuB;EAC9C,IAAA,IAAI,CAACD,YAAY,CAACvC,MAAlB,EAA0B;EACxB,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,KAAK,MAAMd,OAAX,IAAsBqD,YAAtB,EAAoC;QAClCrD,OAAO,CAACiC,SAAR,CAAkBtC,MAAlB,CAAyBT,oBAAzB,EAA+C,CAACoE,MAAhD,CAAA,CAAA;EACAtD,MAAAA,OAAO,CAACuD,YAAR,CAAqB,eAArB,EAAsCD,MAAtC,CAAA,CAAA;EACD,KAAA;EACF,GAlMkC;;;IAqMb,OAAfE,eAAe,CAACvD,MAAD,EAAS;MAC7B,MAAMgB,OAAO,GAAG,EAAhB,CAAA;;MACA,IAAI,OAAOhB,MAAP,KAAkB,QAAlB,IAA8B,YAAYwD,IAAZ,CAAiBxD,MAAjB,CAAlC,EAA4D;QAC1DgB,OAAO,CAACtB,MAAR,GAAiB,KAAjB,CAAA;EACD,KAAA;;MAED,OAAO,IAAA,CAAK+D,IAAL,CAAU,YAAY;QAC3B,MAAMC,IAAI,GAAG9D,QAAQ,CAAC4B,mBAAT,CAA6B,IAA7B,EAAmCR,OAAnC,CAAb,CAAA;;EAEA,MAAA,IAAI,OAAOhB,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,QAAA,IAAI,OAAO0D,IAAI,CAAC1D,MAAD,CAAX,KAAwB,WAA5B,EAAyC;EACvC,UAAA,MAAM,IAAI2D,SAAJ,CAAe,CAAmB3D,iBAAAA,EAAAA,MAAO,GAAzC,CAAN,CAAA;EACD,SAAA;;UAED0D,IAAI,CAAC1D,MAAD,CAAJ,EAAA,CAAA;EACD,OAAA;EACF,KAVM,CAAP,CAAA;EAWD,GAAA;;EAtNkC,CAAA;EAyNrC;EACA;EACA;;;AAEA0B,+BAAY,CAACkC,EAAb,CAAgBC,QAAhB,EAA0BhF,oBAA1B,EAAgDU,oBAAhD,EAAsE,UAAUuE,KAAV,EAAiB;EACrF;EACA,EAAA,IAAIA,KAAK,CAACC,MAAN,CAAaC,OAAb,KAAyB,GAAzB,IAAiCF,KAAK,CAACG,cAAN,IAAwBH,KAAK,CAACG,cAAN,CAAqBD,OAArB,KAAiC,GAA9F,EAAoG;EAClGF,IAAAA,KAAK,CAACI,cAAN,EAAA,CAAA;EACD,GAAA;;EAED,EAAA,MAAM3D,QAAQ,GAAGC,4BAAsB,CAAC,IAAD,CAAvC,CAAA;EACA,EAAA,MAAM2D,gBAAgB,GAAG/D,+BAAc,CAACC,IAAf,CAAoBE,QAApB,CAAzB,CAAA;;EAEA,EAAA,KAAK,MAAMR,OAAX,IAAsBoE,gBAAtB,EAAwC;EACtCvE,IAAAA,QAAQ,CAAC4B,mBAAT,CAA6BzB,OAA7B,EAAsC;EAAEL,MAAAA,MAAM,EAAE,KAAA;EAAV,KAAtC,EAAyDA,MAAzD,EAAA,CAAA;EACD,GAAA;EACF,CAZD,CAAA,CAAA;EAcA;EACA;EACA;;AAEA0E,0BAAkB,CAACxE,QAAD,CAAlB;;;;;;;;"} \ No newline at end of file
+{"version":3,"file":"collapse.js","sources":["../src/collapse.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElement,\n reflow\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal'\n\nconst WIDTH = 'width'\nconst HEIGHT = 'height'\n\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"collapse\"]'\n\nconst Default = {\n parent: null,\n toggle: true\n}\n\nconst DefaultType = {\n parent: '(null|element)',\n toggle: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isTransitioning = false\n this._triggerArray = []\n\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem)\n const filterElement = SelectorEngine.find(selector)\n .filter(foundElement => foundElement === this._element)\n\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem)\n }\n }\n\n this._initializeChildren()\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown())\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning || this._isShown()) {\n return\n }\n\n let activeChildren = []\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES)\n .filter(element => element !== this._element)\n .map(element => Collapse.getOrCreateInstance(element, { toggle: false }))\n }\n\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n if (startEvent.defaultPrevented) {\n return\n }\n\n for (const activeInstance of activeChildren) {\n activeInstance.hide()\n }\n\n const dimension = this._getDimension()\n\n this._element.classList.remove(CLASS_NAME_COLLAPSE)\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n this._addAriaAndCollapsedClass(this._triggerArray, true)\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n this._element.style[dimension] = ''\n\n EventHandler.trigger(this._element, EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n\n this._queueCallback(complete, this._element, true)\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return\n }\n\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n if (startEvent.defaultPrevented) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_COLLAPSING)\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)\n\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger)\n\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false)\n }\n }\n\n this._isTransitioning = true\n\n const complete = () => {\n this._isTransitioning = false\n this._element.classList.remove(CLASS_NAME_COLLAPSING)\n this._element.classList.add(CLASS_NAME_COLLAPSE)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n\n this._queueCallback(complete, this._element, true)\n }\n\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle) // Coerce string values\n config.parent = getElement(config.parent)\n return config\n }\n\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT\n }\n\n _initializeChildren() {\n if (!this._config.parent) {\n return\n }\n\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)\n\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element)\n\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected))\n }\n }\n }\n\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent)\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element))\n }\n\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return\n }\n\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen)\n element.setAttribute('aria-expanded', isOpen)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {}\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || (event.delegateTarget && event.delegateTarget.tagName === 'A')) {\n event.preventDefault()\n }\n\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, { toggle: false }).toggle()\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse)\n\nexport default Collapse\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_CLICK_DATA_API","CLASS_NAME_SHOW","CLASS_NAME_COLLAPSE","CLASS_NAME_COLLAPSING","CLASS_NAME_COLLAPSED","CLASS_NAME_DEEPER_CHILDREN","CLASS_NAME_HORIZONTAL","WIDTH","HEIGHT","SELECTOR_ACTIVES","SELECTOR_DATA_TOGGLE","Default","parent","toggle","DefaultType","Collapse","BaseComponent","constructor","element","config","_isTransitioning","_triggerArray","toggleList","SelectorEngine","find","elem","selector","getSelectorFromElement","filterElement","filter","foundElement","_element","length","push","_initializeChildren","_config","_addAriaAndCollapsedClass","_isShown","hide","show","activeChildren","_getFirstLevelChildren","map","getOrCreateInstance","startEvent","EventHandler","trigger","defaultPrevented","activeInstance","dimension","_getDimension","classList","remove","add","style","complete","capitalizedDimension","toUpperCase","slice","scrollSize","_queueCallback","getBoundingClientRect","reflow","getElementFromSelector","contains","_configAfterMerge","Boolean","getElement","children","selected","includes","triggerArray","isOpen","setAttribute","jQueryInterface","test","each","data","TypeError","on","document","event","target","tagName","delegateTarget","preventDefault","getMultipleElementsFromSelector","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/dom/data.js b/vendor/twbs/bootstrap/js/dist/dom/data.js
index a134743d8..8ea436b1e 100644
--- a/vendor/twbs/bootstrap/js/dist/dom/data.js
+++ b/vendor/twbs/bootstrap/js/dist/dom/data.js
@@ -1,5 +1,5 @@
/*!
- * Bootstrap data.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap data.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -11,7 +11,7 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/data.js
+ * Bootstrap (v5.3.0-alpha1): dom/data.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -19,46 +19,42 @@
/**
* Constants
*/
+
const elementMap = new Map();
const data = {
set(element, key, instance) {
if (!elementMap.has(element)) {
elementMap.set(element, new Map());
}
+ const instanceMap = elementMap.get(element);
- const instanceMap = elementMap.get(element); // make it clear we only want one instance per element
+ // make it clear we only want one instance per element
// can be removed later when multiple key/instances are fine to be used
-
if (!instanceMap.has(key) && instanceMap.size !== 0) {
// eslint-disable-next-line no-console
console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
return;
}
-
instanceMap.set(key, instance);
},
-
get(element, key) {
if (elementMap.has(element)) {
return elementMap.get(element).get(key) || null;
}
-
return null;
},
-
remove(element, key) {
if (!elementMap.has(element)) {
return;
}
-
const instanceMap = elementMap.get(element);
- instanceMap.delete(key); // free up element references if there are no instances left for an element
+ instanceMap.delete(key);
+ // free up element references if there are no instances left for an element
if (instanceMap.size === 0) {
elementMap.delete(element);
}
}
-
};
return data;
diff --git a/vendor/twbs/bootstrap/js/dist/dom/data.js.map b/vendor/twbs/bootstrap/js/dist/dom/data.js.map
index 1d41fc402..9431280e9 100644
--- a/vendor/twbs/bootstrap/js/dist/dom/data.js.map
+++ b/vendor/twbs/bootstrap/js/dist/dom/data.js.map
@@ -1 +1 @@
-{"version":3,"file":"data.js","sources":["../../src/dom/data.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n"],"names":["elementMap","Map","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EAEA,MAAMA,UAAU,GAAG,IAAIC,GAAJ,EAAnB,CAAA;AAEA,eAAe;EACbC,EAAAA,GAAG,CAACC,OAAD,EAAUC,GAAV,EAAeC,QAAf,EAAyB;EAC1B,IAAA,IAAI,CAACL,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAL,EAA8B;EAC5BH,MAAAA,UAAU,CAACE,GAAX,CAAeC,OAAf,EAAwB,IAAIF,GAAJ,EAAxB,CAAA,CAAA;EACD,KAAA;;MAED,MAAMM,WAAW,GAAGP,UAAU,CAACQ,GAAX,CAAeL,OAAf,CAApB,CAL0B;EAQ1B;;EACA,IAAA,IAAI,CAACI,WAAW,CAACD,GAAZ,CAAgBF,GAAhB,CAAD,IAAyBG,WAAW,CAACE,IAAZ,KAAqB,CAAlD,EAAqD;EACnD;EACAC,MAAAA,OAAO,CAACC,KAAR,CAAe,CAAA,4EAAA,EAA8EC,KAAK,CAACC,IAAN,CAAWN,WAAW,CAACO,IAAZ,EAAX,CAA+B,CAAA,CAA/B,CAAkC,CAA/H,CAAA,CAAA,CAAA,CAAA;EACA,MAAA,OAAA;EACD,KAAA;;EAEDP,IAAAA,WAAW,CAACL,GAAZ,CAAgBE,GAAhB,EAAqBC,QAArB,CAAA,CAAA;KAhBW;;EAmBbG,EAAAA,GAAG,CAACL,OAAD,EAAUC,GAAV,EAAe;EAChB,IAAA,IAAIJ,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAJ,EAA6B;QAC3B,OAAOH,UAAU,CAACQ,GAAX,CAAeL,OAAf,EAAwBK,GAAxB,CAA4BJ,GAA5B,CAAA,IAAoC,IAA3C,CAAA;EACD,KAAA;;EAED,IAAA,OAAO,IAAP,CAAA;KAxBW;;EA2BbW,EAAAA,MAAM,CAACZ,OAAD,EAAUC,GAAV,EAAe;EACnB,IAAA,IAAI,CAACJ,UAAU,CAACM,GAAX,CAAeH,OAAf,CAAL,EAA8B;EAC5B,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,MAAMI,WAAW,GAAGP,UAAU,CAACQ,GAAX,CAAeL,OAAf,CAApB,CAAA;EAEAI,IAAAA,WAAW,CAACS,MAAZ,CAAmBZ,GAAnB,EAPmB;;EAUnB,IAAA,IAAIG,WAAW,CAACE,IAAZ,KAAqB,CAAzB,EAA4B;QAC1BT,UAAU,CAACgB,MAAX,CAAkBb,OAAlB,CAAA,CAAA;EACD,KAAA;EACF,GAAA;;EAxCY,CAAf;;;;;;;;"} \ No newline at end of file
+{"version":3,"file":"data.js","sources":["../../src/dom/data.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map()\n\nexport default {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map())\n }\n\n const instanceMap = elementMap.get(element)\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)\n return\n }\n\n instanceMap.set(key, instance)\n },\n\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null\n }\n\n return null\n },\n\n remove(element, key) {\n if (!elementMap.has(element)) {\n return\n }\n\n const instanceMap = elementMap.get(element)\n\n instanceMap.delete(key)\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element)\n }\n }\n}\n"],"names":["elementMap","Map","set","element","key","instance","has","instanceMap","get","size","console","error","Array","from","keys","remove","delete"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;;EAEA,MAAMA,UAAU,GAAG,IAAIC,GAAG,EAAE,CAAA;AAE5B,eAAe;EACbC,EAAAA,GAAG,CAACC,OAAO,EAAEC,GAAG,EAAEC,QAAQ,EAAE;EAC1B,IAAA,IAAI,CAACL,UAAU,CAACM,GAAG,CAACH,OAAO,CAAC,EAAE;QAC5BH,UAAU,CAACE,GAAG,CAACC,OAAO,EAAE,IAAIF,GAAG,EAAE,CAAC,CAAA;EACpC,KAAA;EAEA,IAAA,MAAMM,WAAW,GAAGP,UAAU,CAACQ,GAAG,CAACL,OAAO,CAAC,CAAA;;EAE3C;EACA;EACA,IAAA,IAAI,CAACI,WAAW,CAACD,GAAG,CAACF,GAAG,CAAC,IAAIG,WAAW,CAACE,IAAI,KAAK,CAAC,EAAE;EACnD;EACAC,MAAAA,OAAO,CAACC,KAAK,CAAE,CAA8EC,4EAAAA,EAAAA,KAAK,CAACC,IAAI,CAACN,WAAW,CAACO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,GAAE,CAAC,CAAA;EAClI,MAAA,OAAA;EACF,KAAA;EAEAP,IAAAA,WAAW,CAACL,GAAG,CAACE,GAAG,EAAEC,QAAQ,CAAC,CAAA;KAC/B;EAEDG,EAAAA,GAAG,CAACL,OAAO,EAAEC,GAAG,EAAE;EAChB,IAAA,IAAIJ,UAAU,CAACM,GAAG,CAACH,OAAO,CAAC,EAAE;EAC3B,MAAA,OAAOH,UAAU,CAACQ,GAAG,CAACL,OAAO,CAAC,CAACK,GAAG,CAACJ,GAAG,CAAC,IAAI,IAAI,CAAA;EACjD,KAAA;EAEA,IAAA,OAAO,IAAI,CAAA;KACZ;EAEDW,EAAAA,MAAM,CAACZ,OAAO,EAAEC,GAAG,EAAE;EACnB,IAAA,IAAI,CAACJ,UAAU,CAACM,GAAG,CAACH,OAAO,CAAC,EAAE;EAC5B,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMI,WAAW,GAAGP,UAAU,CAACQ,GAAG,CAACL,OAAO,CAAC,CAAA;EAE3CI,IAAAA,WAAW,CAACS,MAAM,CAACZ,GAAG,CAAC,CAAA;;EAEvB;EACA,IAAA,IAAIG,WAAW,CAACE,IAAI,KAAK,CAAC,EAAE;EAC1BT,MAAAA,UAAU,CAACgB,MAAM,CAACb,OAAO,CAAC,CAAA;EAC5B,KAAA;EACF,GAAA;EACF,CAAC;;;;;;;;"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/dom/event-handler.js b/vendor/twbs/bootstrap/js/dist/dom/event-handler.js
index 37c332d16..affa8361b 100644
--- a/vendor/twbs/bootstrap/js/dist/dom/event-handler.js
+++ b/vendor/twbs/bootstrap/js/dist/dom/event-handler.js
@@ -1,20 +1,21 @@
/*!
- * Bootstrap event-handler.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap event-handler.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index.js')) :
typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.EventHandler = factory(global.Index));
-})(this, (function (index) { 'use strict';
+})(this, (function (index_js) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/event-handler.js
+ * Bootstrap (v5.3.0-alpha1): dom/event-handler.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -23,13 +24,13 @@
const stripNameRegex = /\..*/;
const stripUidRegex = /::\d+$/;
const eventRegistry = {}; // Events storage
-
let uidEvent = 1;
const customEvents = {
mouseenter: 'mouseover',
mouseleave: 'mouseout'
};
const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);
+
/**
* Private methods
*/
@@ -37,32 +38,26 @@
function makeEventUid(element, uid) {
return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;
}
-
function getElementEvents(element) {
const uid = makeEventUid(element);
element.uidEvent = uid;
eventRegistry[uid] = eventRegistry[uid] || {};
return eventRegistry[uid];
}
-
function bootstrapHandler(element, fn) {
return function handler(event) {
hydrateObj(event, {
delegateTarget: element
});
-
if (handler.oneOff) {
EventHandler.off(element, event.type, fn);
}
-
return fn.apply(element, [event]);
};
}
-
function bootstrapDelegationHandler(element, selector, fn) {
return function handler(event) {
const domElements = element.querySelectorAll(selector);
-
for (let {
target
} = event; target && target !== this; target = target.parentNode) {
@@ -70,46 +65,38 @@
if (domElement !== target) {
continue;
}
-
hydrateObj(event, {
delegateTarget: target
});
-
if (handler.oneOff) {
EventHandler.off(element, event.type, selector, fn);
}
-
return fn.apply(target, [event]);
}
}
};
}
-
function findHandler(events, callable, delegationSelector = null) {
return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);
}
-
function normalizeParameters(originalTypeEvent, handler, delegationFunction) {
- const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check
-
+ const isDelegated = typeof handler === 'string';
+ // todo: tooltip passes `false` instead of selector, so we need to check
const callable = isDelegated ? delegationFunction : handler || delegationFunction;
let typeEvent = getTypeEvent(originalTypeEvent);
-
if (!nativeEvents.has(typeEvent)) {
typeEvent = originalTypeEvent;
}
-
return [isDelegated, callable, typeEvent];
}
-
function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
+ let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
- let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
+ // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position
// this prevents the handler from being dispatched the same way as mouseover or mouseout does
-
if (originalTypeEvent in customEvents) {
const wrapFunction = fn => {
return function (event) {
@@ -118,19 +105,15 @@
}
};
};
-
callable = wrapFunction(callable);
}
-
const events = getElementEvents(element);
const handlers = events[typeEvent] || (events[typeEvent] = {});
const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);
-
if (previousFunction) {
previousFunction.oneOff = previousFunction.oneOff && oneOff;
return;
}
-
const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));
const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);
fn.delegationSelector = isDelegated ? handler : null;
@@ -140,94 +123,74 @@
handlers[uid] = fn;
element.addEventListener(typeEvent, fn, isDelegated);
}
-
function removeHandler(element, events, typeEvent, handler, delegationSelector) {
const fn = findHandler(events[typeEvent], handler, delegationSelector);
-
if (!fn) {
return;
}
-
element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));
delete events[typeEvent][fn.uidEvent];
}
-
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
const storeElementEvent = events[typeEvent] || {};
-
- for (const handlerKey of Object.keys(storeElementEvent)) {
+ for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
if (handlerKey.includes(namespace)) {
- const event = storeElementEvent[handlerKey];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
}
}
}
-
function getTypeEvent(event) {
// allow to get the native events from namespaced events ('click.bs.button' --> 'click')
event = event.replace(stripNameRegex, '');
return customEvents[event] || event;
}
-
const EventHandler = {
on(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, false);
},
-
one(element, event, handler, delegationFunction) {
addHandler(element, event, handler, delegationFunction, true);
},
-
off(element, originalTypeEvent, handler, delegationFunction) {
if (typeof originalTypeEvent !== 'string' || !element) {
return;
}
-
const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);
const inNamespace = typeEvent !== originalTypeEvent;
const events = getElementEvents(element);
const storeElementEvent = events[typeEvent] || {};
const isNamespace = originalTypeEvent.startsWith('.');
-
if (typeof callable !== 'undefined') {
// Simplest case: handler is passed, remove that listener ONLY.
if (!Object.keys(storeElementEvent).length) {
return;
}
-
removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);
return;
}
-
if (isNamespace) {
for (const elementEvent of Object.keys(events)) {
removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
}
}
-
- for (const keyHandlers of Object.keys(storeElementEvent)) {
+ for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
const handlerKey = keyHandlers.replace(stripUidRegex, '');
-
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
- const event = storeElementEvent[keyHandlers];
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
}
}
},
-
trigger(element, event, args) {
if (typeof event !== 'string' || !element) {
return null;
}
-
- const $ = index.getjQuery();
+ const $ = index_js.getjQuery();
const typeEvent = getTypeEvent(event);
const inNamespace = event !== typeEvent;
let jQueryEvent = null;
let bubbles = true;
let nativeDispatch = true;
let defaultPrevented = false;
-
if (inNamespace && $) {
jQueryEvent = $.Event(event, args);
$(element).trigger(jQueryEvent);
@@ -235,46 +198,36 @@
nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
defaultPrevented = jQueryEvent.isDefaultPrevented();
}
-
let evt = new Event(event, {
bubbles,
cancelable: true
});
evt = hydrateObj(evt, args);
-
if (defaultPrevented) {
evt.preventDefault();
}
-
if (nativeDispatch) {
element.dispatchEvent(evt);
}
-
if (evt.defaultPrevented && jQueryEvent) {
jQueryEvent.preventDefault();
}
-
return evt;
}
-
};
-
- function hydrateObj(obj, meta) {
- for (const [key, value] of Object.entries(meta || {})) {
+ function hydrateObj(obj, meta = {}) {
+ for (const [key, value] of Object.entries(meta)) {
try {
obj[key] = value;
} catch (_unused) {
Object.defineProperty(obj, key, {
configurable: true,
-
get() {
return value;
}
-
});
}
}
-
return obj;
}
diff --git a/vendor/twbs/bootstrap/js/dist/dom/event-handler.js.map b/vendor/twbs/bootstrap/js/dist/dom/event-handler.js.map
index e87d1c5fa..5f7e75d2c 100644
--- a/vendor/twbs/bootstrap/js/dist/dom/event-handler.js.map
+++ b/vendor/twbs/bootstrap/js/dist/dom/event-handler.js.map
@@ -1 +1 @@
-{"version":3,"file":"event-handler.js","sources":["../../src/dom/event-handler.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const handlerKey of Object.keys(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n const event = storeElementEvent[handlerKey]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const keyHandlers of Object.keys(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n const event = storeElementEvent[keyHandlers]\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta) {\n for (const [key, value] of Object.entries(meta || {})) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n"],"names":["namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","element","uid","getElementEvents","bootstrapHandler","fn","handler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","selector","domElements","querySelectorAll","target","parentNode","domElement","findHandler","events","callable","delegationSelector","Object","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","contains","call","handlers","previousFunction","replace","addEventListener","removeHandler","removeEventListener","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","keys","includes","on","one","inNamespace","isNamespace","startsWith","length","elementEvent","slice","keyHandlers","trigger","args","$","getjQuery","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","Event","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","dispatchEvent","obj","meta","key","value","entries","defineProperty","configurable","get"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;;EAEA,MAAMA,cAAc,GAAG,oBAAvB,CAAA;EACA,MAAMC,cAAc,GAAG,MAAvB,CAAA;EACA,MAAMC,aAAa,GAAG,QAAtB,CAAA;EACA,MAAMC,aAAa,GAAG,EAAtB;;EACA,IAAIC,QAAQ,GAAG,CAAf,CAAA;EACA,MAAMC,YAAY,GAAG;EACnBC,EAAAA,UAAU,EAAE,WADO;EAEnBC,EAAAA,UAAU,EAAE,UAAA;EAFO,CAArB,CAAA;EAKA,MAAMC,YAAY,GAAG,IAAIC,GAAJ,CAAQ,CAC3B,OAD2B,EAE3B,UAF2B,EAG3B,SAH2B,EAI3B,WAJ2B,EAK3B,aAL2B,EAM3B,YAN2B,EAO3B,gBAP2B,EAQ3B,WAR2B,EAS3B,UAT2B,EAU3B,WAV2B,EAW3B,aAX2B,EAY3B,WAZ2B,EAa3B,SAb2B,EAc3B,UAd2B,EAe3B,OAf2B,EAgB3B,mBAhB2B,EAiB3B,YAjB2B,EAkB3B,WAlB2B,EAmB3B,UAnB2B,EAoB3B,aApB2B,EAqB3B,aArB2B,EAsB3B,aAtB2B,EAuB3B,WAvB2B,EAwB3B,cAxB2B,EAyB3B,eAzB2B,EA0B3B,cA1B2B,EA2B3B,eA3B2B,EA4B3B,YA5B2B,EA6B3B,OA7B2B,EA8B3B,MA9B2B,EA+B3B,QA/B2B,EAgC3B,OAhC2B,EAiC3B,QAjC2B,EAkC3B,QAlC2B,EAmC3B,SAnC2B,EAoC3B,UApC2B,EAqC3B,MArC2B,EAsC3B,QAtC2B,EAuC3B,cAvC2B,EAwC3B,QAxC2B,EAyC3B,MAzC2B,EA0C3B,kBA1C2B,EA2C3B,kBA3C2B,EA4C3B,OA5C2B,EA6C3B,OA7C2B,EA8C3B,QA9C2B,CAAR,CAArB,CAAA;EAiDA;EACA;EACA;;EAEA,SAASC,YAAT,CAAsBC,OAAtB,EAA+BC,GAA/B,EAAoC;EAClC,EAAA,OAAQA,GAAG,IAAK,CAAEA,EAAAA,GAAI,KAAIR,QAAQ,EAAG,CAA9B,CAAA,IAAoCO,OAAO,CAACP,QAA5C,IAAwDA,QAAQ,EAAvE,CAAA;EACD,CAAA;;EAED,SAASS,gBAAT,CAA0BF,OAA1B,EAAmC;EACjC,EAAA,MAAMC,GAAG,GAAGF,YAAY,CAACC,OAAD,CAAxB,CAAA;IAEAA,OAAO,CAACP,QAAR,GAAmBQ,GAAnB,CAAA;IACAT,aAAa,CAACS,GAAD,CAAb,GAAqBT,aAAa,CAACS,GAAD,CAAb,IAAsB,EAA3C,CAAA;IAEA,OAAOT,aAAa,CAACS,GAAD,CAApB,CAAA;EACD,CAAA;;EAED,SAASE,gBAAT,CAA0BH,OAA1B,EAAmCI,EAAnC,EAAuC;EACrC,EAAA,OAAO,SAASC,OAAT,CAAiBC,KAAjB,EAAwB;MAC7BC,UAAU,CAACD,KAAD,EAAQ;EAAEE,MAAAA,cAAc,EAAER,OAAAA;EAAlB,KAAR,CAAV,CAAA;;MAEA,IAAIK,OAAO,CAACI,MAAZ,EAAoB;QAClBC,YAAY,CAACC,GAAb,CAAiBX,OAAjB,EAA0BM,KAAK,CAACM,IAAhC,EAAsCR,EAAtC,CAAA,CAAA;EACD,KAAA;;MAED,OAAOA,EAAE,CAACS,KAAH,CAASb,OAAT,EAAkB,CAACM,KAAD,CAAlB,CAAP,CAAA;KAPF,CAAA;EASD,CAAA;;EAED,SAASQ,0BAAT,CAAoCd,OAApC,EAA6Ce,QAA7C,EAAuDX,EAAvD,EAA2D;EACzD,EAAA,OAAO,SAASC,OAAT,CAAiBC,KAAjB,EAAwB;EAC7B,IAAA,MAAMU,WAAW,GAAGhB,OAAO,CAACiB,gBAAR,CAAyBF,QAAzB,CAApB,CAAA;;EAEA,IAAA,KAAK,IAAI;EAAEG,MAAAA,MAAAA;EAAF,KAAA,GAAaZ,KAAtB,EAA6BY,MAAM,IAAIA,MAAM,KAAK,IAAlD,EAAwDA,MAAM,GAAGA,MAAM,CAACC,UAAxE,EAAoF;EAClF,MAAA,KAAK,MAAMC,UAAX,IAAyBJ,WAAzB,EAAsC;UACpC,IAAII,UAAU,KAAKF,MAAnB,EAA2B;EACzB,UAAA,SAAA;EACD,SAAA;;UAEDX,UAAU,CAACD,KAAD,EAAQ;EAAEE,UAAAA,cAAc,EAAEU,MAAAA;EAAlB,SAAR,CAAV,CAAA;;UAEA,IAAIb,OAAO,CAACI,MAAZ,EAAoB;YAClBC,YAAY,CAACC,GAAb,CAAiBX,OAAjB,EAA0BM,KAAK,CAACM,IAAhC,EAAsCG,QAAtC,EAAgDX,EAAhD,CAAA,CAAA;EACD,SAAA;;UAED,OAAOA,EAAE,CAACS,KAAH,CAASK,MAAT,EAAiB,CAACZ,KAAD,CAAjB,CAAP,CAAA;EACD,OAAA;EACF,KAAA;KAjBH,CAAA;EAmBD,CAAA;;EAED,SAASe,WAAT,CAAqBC,MAArB,EAA6BC,QAA7B,EAAuCC,kBAAkB,GAAG,IAA5D,EAAkE;IAChE,OAAOC,MAAM,CAACC,MAAP,CAAcJ,MAAd,CACJK,CAAAA,IADI,CACCrB,KAAK,IAAIA,KAAK,CAACiB,QAAN,KAAmBA,QAAnB,IAA+BjB,KAAK,CAACkB,kBAAN,KAA6BA,kBADtE,CAAP,CAAA;EAED,CAAA;;EAED,SAASI,mBAAT,CAA6BC,iBAA7B,EAAgDxB,OAAhD,EAAyDyB,kBAAzD,EAA6E;EAC3E,EAAA,MAAMC,WAAW,GAAG,OAAO1B,OAAP,KAAmB,QAAvC,CAD2E;;IAG3E,MAAMkB,QAAQ,GAAGQ,WAAW,GAAGD,kBAAH,GAAyBzB,OAAO,IAAIyB,kBAAhE,CAAA;EACA,EAAA,IAAIE,SAAS,GAAGC,YAAY,CAACJ,iBAAD,CAA5B,CAAA;;EAEA,EAAA,IAAI,CAAChC,YAAY,CAACqC,GAAb,CAAiBF,SAAjB,CAAL,EAAkC;EAChCA,IAAAA,SAAS,GAAGH,iBAAZ,CAAA;EACD,GAAA;;EAED,EAAA,OAAO,CAACE,WAAD,EAAcR,QAAd,EAAwBS,SAAxB,CAAP,CAAA;EACD,CAAA;;EAED,SAASG,UAAT,CAAoBnC,OAApB,EAA6B6B,iBAA7B,EAAgDxB,OAAhD,EAAyDyB,kBAAzD,EAA6ErB,MAA7E,EAAqF;EACnF,EAAA,IAAI,OAAOoB,iBAAP,KAA6B,QAA7B,IAAyC,CAAC7B,OAA9C,EAAuD;EACrD,IAAA,OAAA;EACD,GAAA;;EAED,EAAA,IAAI,CAAC+B,WAAD,EAAcR,QAAd,EAAwBS,SAAxB,CAAqCJ,GAAAA,mBAAmB,CAACC,iBAAD,EAAoBxB,OAApB,EAA6ByB,kBAA7B,CAA5D,CALmF;EAQnF;;IACA,IAAID,iBAAiB,IAAInC,YAAzB,EAAuC;MACrC,MAAM0C,YAAY,GAAGhC,EAAE,IAAI;QACzB,OAAO,UAAUE,KAAV,EAAiB;UACtB,IAAI,CAACA,KAAK,CAAC+B,aAAP,IAAyB/B,KAAK,CAAC+B,aAAN,KAAwB/B,KAAK,CAACE,cAA9B,IAAgD,CAACF,KAAK,CAACE,cAAN,CAAqB8B,QAArB,CAA8BhC,KAAK,CAAC+B,aAApC,CAA9E,EAAmI;EACjI,UAAA,OAAOjC,EAAE,CAACmC,IAAH,CAAQ,IAAR,EAAcjC,KAAd,CAAP,CAAA;EACD,SAAA;SAHH,CAAA;OADF,CAAA;;EAQAiB,IAAAA,QAAQ,GAAGa,YAAY,CAACb,QAAD,CAAvB,CAAA;EACD,GAAA;;EAED,EAAA,MAAMD,MAAM,GAAGpB,gBAAgB,CAACF,OAAD,CAA/B,CAAA;EACA,EAAA,MAAMwC,QAAQ,GAAGlB,MAAM,CAACU,SAAD,CAAN,KAAsBV,MAAM,CAACU,SAAD,CAAN,GAAoB,EAA1C,CAAjB,CAAA;EACA,EAAA,MAAMS,gBAAgB,GAAGpB,WAAW,CAACmB,QAAD,EAAWjB,QAAX,EAAqBQ,WAAW,GAAG1B,OAAH,GAAa,IAA7C,CAApC,CAAA;;EAEA,EAAA,IAAIoC,gBAAJ,EAAsB;EACpBA,IAAAA,gBAAgB,CAAChC,MAAjB,GAA0BgC,gBAAgB,CAAChC,MAAjB,IAA2BA,MAArD,CAAA;EAEA,IAAA,OAAA;EACD,GAAA;;EAED,EAAA,MAAMR,GAAG,GAAGF,YAAY,CAACwB,QAAD,EAAWM,iBAAiB,CAACa,OAAlB,CAA0BrD,cAA1B,EAA0C,EAA1C,CAAX,CAAxB,CAAA;EACA,EAAA,MAAMe,EAAE,GAAG2B,WAAW,GACpBjB,0BAA0B,CAACd,OAAD,EAAUK,OAAV,EAAmBkB,QAAnB,CADN,GAEpBpB,gBAAgB,CAACH,OAAD,EAAUuB,QAAV,CAFlB,CAAA;EAIAnB,EAAAA,EAAE,CAACoB,kBAAH,GAAwBO,WAAW,GAAG1B,OAAH,GAAa,IAAhD,CAAA;IACAD,EAAE,CAACmB,QAAH,GAAcA,QAAd,CAAA;IACAnB,EAAE,CAACK,MAAH,GAAYA,MAAZ,CAAA;IACAL,EAAE,CAACX,QAAH,GAAcQ,GAAd,CAAA;EACAuC,EAAAA,QAAQ,CAACvC,GAAD,CAAR,GAAgBG,EAAhB,CAAA;EAEAJ,EAAAA,OAAO,CAAC2C,gBAAR,CAAyBX,SAAzB,EAAoC5B,EAApC,EAAwC2B,WAAxC,CAAA,CAAA;EACD,CAAA;;EAED,SAASa,aAAT,CAAuB5C,OAAvB,EAAgCsB,MAAhC,EAAwCU,SAAxC,EAAmD3B,OAAnD,EAA4DmB,kBAA5D,EAAgF;EAC9E,EAAA,MAAMpB,EAAE,GAAGiB,WAAW,CAACC,MAAM,CAACU,SAAD,CAAP,EAAoB3B,OAApB,EAA6BmB,kBAA7B,CAAtB,CAAA;;IAEA,IAAI,CAACpB,EAAL,EAAS;EACP,IAAA,OAAA;EACD,GAAA;;IAEDJ,OAAO,CAAC6C,mBAAR,CAA4Bb,SAA5B,EAAuC5B,EAAvC,EAA2C0C,OAAO,CAACtB,kBAAD,CAAlD,CAAA,CAAA;IACA,OAAOF,MAAM,CAACU,SAAD,CAAN,CAAkB5B,EAAE,CAACX,QAArB,CAAP,CAAA;EACD,CAAA;;EAED,SAASsD,wBAAT,CAAkC/C,OAAlC,EAA2CsB,MAA3C,EAAmDU,SAAnD,EAA8DgB,SAA9D,EAAyE;EACvE,EAAA,MAAMC,iBAAiB,GAAG3B,MAAM,CAACU,SAAD,CAAN,IAAqB,EAA/C,CAAA;;IAEA,KAAK,MAAMkB,UAAX,IAAyBzB,MAAM,CAAC0B,IAAP,CAAYF,iBAAZ,CAAzB,EAAyD;EACvD,IAAA,IAAIC,UAAU,CAACE,QAAX,CAAoBJ,SAApB,CAAJ,EAAoC;EAClC,MAAA,MAAM1C,KAAK,GAAG2C,iBAAiB,CAACC,UAAD,CAA/B,CAAA;EACAN,MAAAA,aAAa,CAAC5C,OAAD,EAAUsB,MAAV,EAAkBU,SAAlB,EAA6B1B,KAAK,CAACiB,QAAnC,EAA6CjB,KAAK,CAACkB,kBAAnD,CAAb,CAAA;EACD,KAAA;EACF,GAAA;EACF,CAAA;;EAED,SAASS,YAAT,CAAsB3B,KAAtB,EAA6B;EAC3B;IACAA,KAAK,GAAGA,KAAK,CAACoC,OAAN,CAAcpD,cAAd,EAA8B,EAA9B,CAAR,CAAA;EACA,EAAA,OAAOI,YAAY,CAACY,KAAD,CAAZ,IAAuBA,KAA9B,CAAA;EACD,CAAA;;AAED,QAAMI,YAAY,GAAG;IACnB2C,EAAE,CAACrD,OAAD,EAAUM,KAAV,EAAiBD,OAAjB,EAA0ByB,kBAA1B,EAA8C;MAC9CK,UAAU,CAACnC,OAAD,EAAUM,KAAV,EAAiBD,OAAjB,EAA0ByB,kBAA1B,EAA8C,KAA9C,CAAV,CAAA;KAFiB;;IAKnBwB,GAAG,CAACtD,OAAD,EAAUM,KAAV,EAAiBD,OAAjB,EAA0ByB,kBAA1B,EAA8C;MAC/CK,UAAU,CAACnC,OAAD,EAAUM,KAAV,EAAiBD,OAAjB,EAA0ByB,kBAA1B,EAA8C,IAA9C,CAAV,CAAA;KANiB;;IASnBnB,GAAG,CAACX,OAAD,EAAU6B,iBAAV,EAA6BxB,OAA7B,EAAsCyB,kBAAtC,EAA0D;EAC3D,IAAA,IAAI,OAAOD,iBAAP,KAA6B,QAA7B,IAAyC,CAAC7B,OAA9C,EAAuD;EACrD,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,MAAM,CAAC+B,WAAD,EAAcR,QAAd,EAAwBS,SAAxB,CAAA,GAAqCJ,mBAAmB,CAACC,iBAAD,EAAoBxB,OAApB,EAA6ByB,kBAA7B,CAA9D,CAAA;EACA,IAAA,MAAMyB,WAAW,GAAGvB,SAAS,KAAKH,iBAAlC,CAAA;EACA,IAAA,MAAMP,MAAM,GAAGpB,gBAAgB,CAACF,OAAD,CAA/B,CAAA;EACA,IAAA,MAAMiD,iBAAiB,GAAG3B,MAAM,CAACU,SAAD,CAAN,IAAqB,EAA/C,CAAA;EACA,IAAA,MAAMwB,WAAW,GAAG3B,iBAAiB,CAAC4B,UAAlB,CAA6B,GAA7B,CAApB,CAAA;;EAEA,IAAA,IAAI,OAAOlC,QAAP,KAAoB,WAAxB,EAAqC;EACnC;QACA,IAAI,CAACE,MAAM,CAAC0B,IAAP,CAAYF,iBAAZ,CAAA,CAA+BS,MAApC,EAA4C;EAC1C,QAAA,OAAA;EACD,OAAA;;EAEDd,MAAAA,aAAa,CAAC5C,OAAD,EAAUsB,MAAV,EAAkBU,SAAlB,EAA6BT,QAA7B,EAAuCQ,WAAW,GAAG1B,OAAH,GAAa,IAA/D,CAAb,CAAA;EACA,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,IAAImD,WAAJ,EAAiB;QACf,KAAK,MAAMG,YAAX,IAA2BlC,MAAM,CAAC0B,IAAP,CAAY7B,MAAZ,CAA3B,EAAgD;EAC9CyB,QAAAA,wBAAwB,CAAC/C,OAAD,EAAUsB,MAAV,EAAkBqC,YAAlB,EAAgC9B,iBAAiB,CAAC+B,KAAlB,CAAwB,CAAxB,CAAhC,CAAxB,CAAA;EACD,OAAA;EACF,KAAA;;MAED,KAAK,MAAMC,WAAX,IAA0BpC,MAAM,CAAC0B,IAAP,CAAYF,iBAAZ,CAA1B,EAA0D;QACxD,MAAMC,UAAU,GAAGW,WAAW,CAACnB,OAAZ,CAAoBnD,aAApB,EAAmC,EAAnC,CAAnB,CAAA;;QAEA,IAAI,CAACgE,WAAD,IAAgB1B,iBAAiB,CAACuB,QAAlB,CAA2BF,UAA3B,CAApB,EAA4D;EAC1D,QAAA,MAAM5C,KAAK,GAAG2C,iBAAiB,CAACY,WAAD,CAA/B,CAAA;EACAjB,QAAAA,aAAa,CAAC5C,OAAD,EAAUsB,MAAV,EAAkBU,SAAlB,EAA6B1B,KAAK,CAACiB,QAAnC,EAA6CjB,KAAK,CAACkB,kBAAnD,CAAb,CAAA;EACD,OAAA;EACF,KAAA;KA3CgB;;EA8CnBsC,EAAAA,OAAO,CAAC9D,OAAD,EAAUM,KAAV,EAAiByD,IAAjB,EAAuB;EAC5B,IAAA,IAAI,OAAOzD,KAAP,KAAiB,QAAjB,IAA6B,CAACN,OAAlC,EAA2C;EACzC,MAAA,OAAO,IAAP,CAAA;EACD,KAAA;;MAED,MAAMgE,CAAC,GAAGC,eAAS,EAAnB,CAAA;EACA,IAAA,MAAMjC,SAAS,GAAGC,YAAY,CAAC3B,KAAD,CAA9B,CAAA;EACA,IAAA,MAAMiD,WAAW,GAAGjD,KAAK,KAAK0B,SAA9B,CAAA;MAEA,IAAIkC,WAAW,GAAG,IAAlB,CAAA;MACA,IAAIC,OAAO,GAAG,IAAd,CAAA;MACA,IAAIC,cAAc,GAAG,IAArB,CAAA;MACA,IAAIC,gBAAgB,GAAG,KAAvB,CAAA;;MAEA,IAAId,WAAW,IAAIS,CAAnB,EAAsB;QACpBE,WAAW,GAAGF,CAAC,CAACM,KAAF,CAAQhE,KAAR,EAAeyD,IAAf,CAAd,CAAA;EAEAC,MAAAA,CAAC,CAAChE,OAAD,CAAD,CAAW8D,OAAX,CAAmBI,WAAnB,CAAA,CAAA;EACAC,MAAAA,OAAO,GAAG,CAACD,WAAW,CAACK,oBAAZ,EAAX,CAAA;EACAH,MAAAA,cAAc,GAAG,CAACF,WAAW,CAACM,6BAAZ,EAAlB,CAAA;EACAH,MAAAA,gBAAgB,GAAGH,WAAW,CAACO,kBAAZ,EAAnB,CAAA;EACD,KAAA;;EAED,IAAA,IAAIC,GAAG,GAAG,IAAIJ,KAAJ,CAAUhE,KAAV,EAAiB;QAAE6D,OAAF;EAAWQ,MAAAA,UAAU,EAAE,IAAA;EAAvB,KAAjB,CAAV,CAAA;EACAD,IAAAA,GAAG,GAAGnE,UAAU,CAACmE,GAAD,EAAMX,IAAN,CAAhB,CAAA;;EAEA,IAAA,IAAIM,gBAAJ,EAAsB;EACpBK,MAAAA,GAAG,CAACE,cAAJ,EAAA,CAAA;EACD,KAAA;;EAED,IAAA,IAAIR,cAAJ,EAAoB;QAClBpE,OAAO,CAAC6E,aAAR,CAAsBH,GAAtB,CAAA,CAAA;EACD,KAAA;;EAED,IAAA,IAAIA,GAAG,CAACL,gBAAJ,IAAwBH,WAA5B,EAAyC;EACvCA,MAAAA,WAAW,CAACU,cAAZ,EAAA,CAAA;EACD,KAAA;;EAED,IAAA,OAAOF,GAAP,CAAA;EACD,GAAA;;EArFkB,EAArB;;EAwFA,SAASnE,UAAT,CAAoBuE,GAApB,EAAyBC,IAAzB,EAA+B;EAC7B,EAAA,KAAK,MAAM,CAACC,GAAD,EAAMC,KAAN,CAAX,IAA2BxD,MAAM,CAACyD,OAAP,CAAeH,IAAI,IAAI,EAAvB,CAA3B,EAAuD;MACrD,IAAI;EACFD,MAAAA,GAAG,CAACE,GAAD,CAAH,GAAWC,KAAX,CAAA;EACD,KAFD,CAEE,OAAM,OAAA,EAAA;EACNxD,MAAAA,MAAM,CAAC0D,cAAP,CAAsBL,GAAtB,EAA2BE,GAA3B,EAAgC;EAC9BI,QAAAA,YAAY,EAAE,IADgB;;EAE9BC,QAAAA,GAAG,GAAG;EACJ,UAAA,OAAOJ,KAAP,CAAA;EACD,SAAA;;SAJH,CAAA,CAAA;EAMD,KAAA;EACF,GAAA;;EAED,EAAA,OAAOH,GAAP,CAAA;EACD;;;;;;;;"} \ No newline at end of file
+{"version":3,"file":"event-handler.js","sources":["../../src/dom/event-handler.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { getjQuery } from '../util/index.js'\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/\nconst stripNameRegex = /\\..*/\nconst stripUidRegex = /::\\d+$/\nconst eventRegistry = {} // Events storage\nlet uidEvent = 1\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n}\n\nconst nativeEvents = new Set([\n 'click',\n 'dblclick',\n 'mouseup',\n 'mousedown',\n 'contextmenu',\n 'mousewheel',\n 'DOMMouseScroll',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'selectstart',\n 'selectend',\n 'keydown',\n 'keypress',\n 'keyup',\n 'orientationchange',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel',\n 'gesturestart',\n 'gesturechange',\n 'gestureend',\n 'focus',\n 'blur',\n 'change',\n 'reset',\n 'select',\n 'submit',\n 'focusin',\n 'focusout',\n 'load',\n 'unload',\n 'beforeunload',\n 'resize',\n 'move',\n 'DOMContentLoaded',\n 'readystatechange',\n 'error',\n 'abort',\n 'scroll'\n])\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return (uid && `${uid}::${uidEvent++}`) || element.uidEvent || uidEvent++\n}\n\nfunction getElementEvents(element) {\n const uid = makeEventUid(element)\n\n element.uidEvent = uid\n eventRegistry[uid] = eventRegistry[uid] || {}\n\n return eventRegistry[uid]\n}\n\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, { delegateTarget: element })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn)\n }\n\n return fn.apply(element, [event])\n }\n}\n\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector)\n\n for (let { target } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue\n }\n\n hydrateObj(event, { delegateTarget: target })\n\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn)\n }\n\n return fn.apply(target, [event])\n }\n }\n }\n}\n\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events)\n .find(event => event.callable === callable && event.delegationSelector === delegationSelector)\n}\n\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string'\n // todo: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : (handler || delegationFunction)\n let typeEvent = getTypeEvent(originalTypeEvent)\n\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent\n }\n\n return [isDelegated, callable, typeEvent]\n}\n\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || (event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget))) {\n return fn.call(this, event)\n }\n }\n }\n\n callable = wrapFunction(callable)\n }\n\n const events = getElementEvents(element)\n const handlers = events[typeEvent] || (events[typeEvent] = {})\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null)\n\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff\n\n return\n }\n\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''))\n const fn = isDelegated ?\n bootstrapDelegationHandler(element, handler, callable) :\n bootstrapHandler(element, callable)\n\n fn.delegationSelector = isDelegated ? handler : null\n fn.callable = callable\n fn.oneOff = oneOff\n fn.uidEvent = uid\n handlers[uid] = fn\n\n element.addEventListener(typeEvent, fn, isDelegated)\n}\n\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector)\n\n if (!fn) {\n return\n }\n\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector))\n delete events[typeEvent][fn.uidEvent]\n}\n\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {}\n\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n}\n\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '')\n return customEvents[event] || event\n}\n\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false)\n },\n\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true)\n },\n\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return\n }\n\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction)\n const inNamespace = typeEvent !== originalTypeEvent\n const events = getElementEvents(element)\n const storeElementEvent = events[typeEvent] || {}\n const isNamespace = originalTypeEvent.startsWith('.')\n\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return\n }\n\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null)\n return\n }\n\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1))\n }\n }\n\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '')\n\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)\n }\n }\n },\n\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null\n }\n\n const $ = getjQuery()\n const typeEvent = getTypeEvent(event)\n const inNamespace = event !== typeEvent\n\n let jQueryEvent = null\n let bubbles = true\n let nativeDispatch = true\n let defaultPrevented = false\n\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args)\n\n $(element).trigger(jQueryEvent)\n bubbles = !jQueryEvent.isPropagationStopped()\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped()\n defaultPrevented = jQueryEvent.isDefaultPrevented()\n }\n\n let evt = new Event(event, { bubbles, cancelable: true })\n evt = hydrateObj(evt, args)\n\n if (defaultPrevented) {\n evt.preventDefault()\n }\n\n if (nativeDispatch) {\n element.dispatchEvent(evt)\n }\n\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault()\n }\n\n return evt\n }\n}\n\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value\n } catch {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value\n }\n })\n }\n }\n\n return obj\n}\n\nexport default EventHandler\n"],"names":["namespaceRegex","stripNameRegex","stripUidRegex","eventRegistry","uidEvent","customEvents","mouseenter","mouseleave","nativeEvents","Set","makeEventUid","element","uid","getElementEvents","bootstrapHandler","fn","handler","event","hydrateObj","delegateTarget","oneOff","EventHandler","off","type","apply","bootstrapDelegationHandler","selector","domElements","querySelectorAll","target","parentNode","domElement","findHandler","events","callable","delegationSelector","Object","values","find","normalizeParameters","originalTypeEvent","delegationFunction","isDelegated","typeEvent","getTypeEvent","has","addHandler","wrapFunction","relatedTarget","contains","call","handlers","previousFunction","replace","addEventListener","removeHandler","removeEventListener","Boolean","removeNamespacedHandlers","namespace","storeElementEvent","handlerKey","entries","includes","on","one","inNamespace","isNamespace","startsWith","keys","length","elementEvent","slice","keyHandlers","trigger","args","$","getjQuery","jQueryEvent","bubbles","nativeDispatch","defaultPrevented","Event","isPropagationStopped","isImmediatePropagationStopped","isDefaultPrevented","evt","cancelable","preventDefault","dispatchEvent","obj","meta","key","value","defineProperty","configurable","get"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/dom/manipulator.js b/vendor/twbs/bootstrap/js/dist/dom/manipulator.js
index 478ca3565..449f8b079 100644
--- a/vendor/twbs/bootstrap/js/dist/dom/manipulator.js
+++ b/vendor/twbs/bootstrap/js/dist/dom/manipulator.js
@@ -1,5 +1,5 @@
/*!
- * Bootstrap manipulator.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap manipulator.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -11,72 +11,59 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/manipulator.js
+ * Bootstrap (v5.3.0-alpha1): dom/manipulator.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
function normalizeData(value) {
if (value === 'true') {
return true;
}
-
if (value === 'false') {
return false;
}
-
if (value === Number(value).toString()) {
return Number(value);
}
-
if (value === '' || value === 'null') {
return null;
}
-
if (typeof value !== 'string') {
return value;
}
-
try {
return JSON.parse(decodeURIComponent(value));
} catch (_unused) {
return value;
}
}
-
function normalizeDataKey(key) {
return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);
}
-
const Manipulator = {
setDataAttribute(element, key, value) {
element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);
},
-
removeDataAttribute(element, key) {
element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);
},
-
getDataAttributes(element) {
if (!element) {
return {};
}
-
const attributes = {};
const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));
-
for (const key of bsKeys) {
let pureKey = key.replace(/^bs/, '');
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);
attributes[pureKey] = normalizeData(element.dataset[key]);
}
-
return attributes;
},
-
getDataAttribute(element, key) {
return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));
}
-
};
return Manipulator;
diff --git a/vendor/twbs/bootstrap/js/dist/dom/manipulator.js.map b/vendor/twbs/bootstrap/js/dist/dom/manipulator.js.map
index ba46f84ab..a8e9a6874 100644
--- a/vendor/twbs/bootstrap/js/dist/dom/manipulator.js.map
+++ b/vendor/twbs/bootstrap/js/dist/dom/manipulator.js.map
@@ -1 +1 @@
-{"version":3,"file":"manipulator.js","sources":["../../src/dom/manipulator.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n"],"names":["normalizeData","value","Number","toString","JSON","parse","decodeURIComponent","normalizeDataKey","key","replace","chr","toLowerCase","Manipulator","setDataAttribute","element","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","Object","keys","dataset","filter","startsWith","pureKey","charAt","slice","length","getDataAttribute","getAttribute"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"manipulator.js","sources":["../../src/dom/manipulator.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true\n }\n\n if (value === 'false') {\n return false\n }\n\n if (value === Number(value).toString()) {\n return Number(value)\n }\n\n if (value === '' || value === 'null') {\n return null\n }\n\n if (typeof value !== 'string') {\n return value\n }\n\n try {\n return JSON.parse(decodeURIComponent(value))\n } catch {\n return value\n }\n}\n\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`)\n}\n\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value)\n },\n\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`)\n },\n\n getDataAttributes(element) {\n if (!element) {\n return {}\n }\n\n const attributes = {}\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'))\n\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '')\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)\n attributes[pureKey] = normalizeData(element.dataset[key])\n }\n\n return attributes\n },\n\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`))\n }\n}\n\nexport default Manipulator\n"],"names":["normalizeData","value","Number","toString","JSON","parse","decodeURIComponent","normalizeDataKey","key","replace","chr","toLowerCase","Manipulator","setDataAttribute","element","setAttribute","removeDataAttribute","removeAttribute","getDataAttributes","attributes","bsKeys","Object","keys","dataset","filter","startsWith","pureKey","charAt","slice","length","getDataAttribute","getAttribute"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/dom/selector-engine.js b/vendor/twbs/bootstrap/js/dist/dom/selector-engine.js
index 51d36c2a6..880f3b268 100644
--- a/vendor/twbs/bootstrap/js/dist/dom/selector-engine.js
+++ b/vendor/twbs/bootstrap/js/dist/dom/selector-engine.js
@@ -1,83 +1,100 @@
/*!
- * Bootstrap selector-engine.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap selector-engine.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../util/index.js')) :
typeof define === 'function' && define.amd ? define(['../util/index'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.SelectorEngine = factory(global.Index));
-})(this, (function (index) { 'use strict';
+})(this, (function (index_js) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/selector-engine.js
+ * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
- /**
- * Constants
- */
+ const getSelector = element => {
+ let selector = element.getAttribute('data-bs-target');
+ if (!selector || selector === '#') {
+ let hrefAttribute = element.getAttribute('href');
+
+ // The only valid content that could double as a selector are IDs or classes,
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
+ // `document.querySelector` will rightfully complain it is invalid.
+ // See https://github.com/twbs/bootstrap/issues/32273
+ if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
+ return null;
+ }
+ // Just in case some CMS puts out a full URL with the anchor appended
+ if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
+ hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
+ }
+ selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
+ }
+ return index_js.parseSelector(selector);
+ };
const SelectorEngine = {
find(selector, element = document.documentElement) {
return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
},
-
findOne(selector, element = document.documentElement) {
return Element.prototype.querySelector.call(element, selector);
},
-
children(element, selector) {
return [].concat(...element.children).filter(child => child.matches(selector));
},
-
parents(element, selector) {
const parents = [];
let ancestor = element.parentNode.closest(selector);
-
while (ancestor) {
parents.push(ancestor);
ancestor = ancestor.parentNode.closest(selector);
}
-
return parents;
},
-
prev(element, selector) {
let previous = element.previousElementSibling;
-
while (previous) {
if (previous.matches(selector)) {
return [previous];
}
-
previous = previous.previousElementSibling;
}
-
return [];
},
-
// TODO: this is now unused; remove later along with prev()
next(element, selector) {
let next = element.nextElementSibling;
-
while (next) {
if (next.matches(selector)) {
return [next];
}
-
next = next.nextElementSibling;
}
-
return [];
},
-
focusableChildren(element) {
const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(',');
- return this.find(focusables, element).filter(el => !index.isDisabled(el) && index.isVisible(el));
+ return this.find(focusables, element).filter(el => !index_js.isDisabled(el) && index_js.isVisible(el));
+ },
+ getSelectorFromElement(element) {
+ const selector = getSelector(element);
+ if (selector) {
+ return SelectorEngine.findOne(selector) ? selector : null;
+ }
+ return null;
+ },
+ getElementFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.findOne(selector) : null;
+ },
+ getMultipleElementsFromSelector(element) {
+ const selector = getSelector(element);
+ return selector ? SelectorEngine.find(selector) : [];
}
-
};
return SelectorEngine;
diff --git a/vendor/twbs/bootstrap/js/dist/dom/selector-engine.js.map b/vendor/twbs/bootstrap/js/dist/dom/selector-engine.js.map
index bb33f9c20..43e82e33a 100644
--- a/vendor/twbs/bootstrap/js/dist/dom/selector-engine.js.map
+++ b/vendor/twbs/bootstrap/js/dist/dom/selector-engine.js.map
@@ -1 +1 @@
-{"version":3,"file":"selector-engine.js","sources":["../../src/dom/selector-engine.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n"],"names":["SelectorEngine","find","selector","element","document","documentElement","concat","Element","prototype","querySelectorAll","call","findOne","querySelector","children","filter","child","matches","parents","ancestor","parentNode","closest","push","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","isDisabled","isVisible"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"selector-engine.js","sources":["../../src/dom/selector-engine.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible, parseSelector } from '../util/index.js'\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return parseSelector(selector)\n}\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n },\n\n getSelectorFromElement(element) {\n const selector = getSelector(element)\n\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null\n }\n\n return null\n },\n\n getElementFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.findOne(selector) : null\n },\n\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element)\n\n return selector ? SelectorEngine.find(selector) : []\n }\n}\n\nexport default SelectorEngine\n"],"names":["getSelector","element","selector","getAttribute","hrefAttribute","includes","startsWith","split","trim","parseSelector","SelectorEngine","find","document","documentElement","concat","Element","prototype","querySelectorAll","call","findOne","querySelector","children","filter","child","matches","parents","ancestor","parentNode","closest","push","prev","previous","previousElementSibling","next","nextElementSibling","focusableChildren","focusables","map","join","el","isDisabled","isVisible","getSelectorFromElement","getElementFromSelector","getMultipleElementsFromSelector"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/dropdown.js b/vendor/twbs/bootstrap/js/dist/dropdown.js
index 10fe975c1..b9b183937 100644
--- a/vendor/twbs/bootstrap/js/dist/dropdown.js
+++ b/vendor/twbs/bootstrap/js/dist/dropdown.js
@@ -1,18 +1,15 @@
/*!
- * Bootstrap dropdown.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap dropdown.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./util/index'), require('./dom/event-handler'), require('./dom/manipulator'), require('./dom/selector-engine'), require('./base-component')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['@popperjs/core', './util/index', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dropdown = factory(global["@popperjs/core"], global.Index, global.EventHandler, global.Manipulator, global.SelectorEngine, global.BaseComponent));
-})(this, (function (Popper, index, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
+})(this, (function (Popper, index_js, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- function _interopNamespace(e) {
- if (e && e.__esModule) return e;
+ function _interopNamespaceDefault(e) {
const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
if (e) {
for (const k in e) {
@@ -29,18 +26,15 @@
return Object.freeze(n);
}
- const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
+ const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dropdown.js
+ * Bootstrap (v5.3.0-alpha1): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -74,12 +68,12 @@
const SELECTOR_NAVBAR = '.navbar';
const SELECTOR_NAVBAR_NAV = '.navbar-nav';
const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
- const PLACEMENT_TOP = index.isRTL() ? 'top-end' : 'top-start';
- const PLACEMENT_TOPEND = index.isRTL() ? 'top-start' : 'top-end';
- const PLACEMENT_BOTTOM = index.isRTL() ? 'bottom-end' : 'bottom-start';
- const PLACEMENT_BOTTOMEND = index.isRTL() ? 'bottom-start' : 'bottom-end';
- const PLACEMENT_RIGHT = index.isRTL() ? 'left-start' : 'right-start';
- const PLACEMENT_LEFT = index.isRTL() ? 'right-start' : 'left-start';
+ const PLACEMENT_TOP = index_js.isRTL() ? 'top-end' : 'top-start';
+ const PLACEMENT_TOPEND = index_js.isRTL() ? 'top-start' : 'top-end';
+ const PLACEMENT_BOTTOM = index_js.isRTL() ? 'bottom-end' : 'bottom-start';
+ const PLACEMENT_BOTTOMEND = index_js.isRTL() ? 'bottom-start' : 'bottom-end';
+ const PLACEMENT_RIGHT = index_js.isRTL() ? 'left-start' : 'right-start';
+ const PLACEMENT_LEFT = index_js.isRTL() ? 'right-start' : 'left-start';
const PLACEMENT_TOPCENTER = 'top';
const PLACEMENT_BOTTOMCENTER = 'bottom';
const Default = {
@@ -98,218 +92,172 @@
popperConfig: '(null|object|function)',
reference: '(string|element|object)'
};
+
/**
* Class definition
*/
- class Dropdown extends BaseComponent__default.default {
+ class Dropdown extends BaseComponent {
constructor(element, config) {
super(element, config);
this._popper = null;
this._parent = this._element.parentNode; // dropdown wrapper
- // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
-
- this._menu = SelectorEngine__default.default.next(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine__default.default.findOne(SELECTOR_MENU, this._parent);
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
+ this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);
this._inNavbar = this._detectNavbar();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
toggle() {
return this._isShown() ? this.hide() : this.show();
}
-
show() {
- if (index.isDisabled(this._element) || this._isShown()) {
+ if (index_js.isDisabled(this._element) || this._isShown()) {
return;
}
-
const relatedTarget = {
relatedTarget: this._element
};
- const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, relatedTarget);
-
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget);
if (showEvent.defaultPrevented) {
return;
}
+ this._createPopper();
- this._createPopper(); // If this is a touch-enabled device we add extra
+ // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
-
if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
for (const element of [].concat(...document.body.children)) {
- EventHandler__default.default.on(element, 'mouseover', index.noop);
+ EventHandler.on(element, 'mouseover', index_js.noop);
}
}
-
this._element.focus();
-
this._element.setAttribute('aria-expanded', true);
-
this._menu.classList.add(CLASS_NAME_SHOW);
-
this._element.classList.add(CLASS_NAME_SHOW);
-
- EventHandler__default.default.trigger(this._element, EVENT_SHOWN, relatedTarget);
+ EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget);
}
-
hide() {
- if (index.isDisabled(this._element) || !this._isShown()) {
+ if (index_js.isDisabled(this._element) || !this._isShown()) {
return;
}
-
const relatedTarget = {
relatedTarget: this._element
};
-
this._completeHide(relatedTarget);
}
-
dispose() {
if (this._popper) {
this._popper.destroy();
}
-
super.dispose();
}
-
update() {
this._inNavbar = this._detectNavbar();
-
if (this._popper) {
this._popper.update();
}
- } // Private
-
+ }
+ // Private
_completeHide(relatedTarget) {
- const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE, relatedTarget);
-
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget);
if (hideEvent.defaultPrevented) {
return;
- } // If this is a touch-enabled device we remove the extra
- // empty mouseover listeners we added for iOS support
-
+ }
+ // If this is a touch-enabled device we remove the extra
+ // empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
- EventHandler__default.default.off(element, 'mouseover', index.noop);
+ EventHandler.off(element, 'mouseover', index_js.noop);
}
}
-
if (this._popper) {
this._popper.destroy();
}
-
this._menu.classList.remove(CLASS_NAME_SHOW);
-
this._element.classList.remove(CLASS_NAME_SHOW);
-
this._element.setAttribute('aria-expanded', 'false');
-
- Manipulator__default.default.removeDataAttribute(this._menu, 'popper');
- EventHandler__default.default.trigger(this._element, EVENT_HIDDEN, relatedTarget);
+ Manipulator.removeDataAttribute(this._menu, 'popper');
+ EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget);
}
-
_getConfig(config) {
config = super._getConfig(config);
-
- if (typeof config.reference === 'object' && !index.isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
+ if (typeof config.reference === 'object' && !index_js.isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {
// Popper virtual elements require a getBoundingClientRect method
throw new TypeError(`${NAME.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);
}
-
return config;
}
-
_createPopper() {
if (typeof Popper__namespace === 'undefined') {
throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
}
-
let referenceElement = this._element;
-
if (this._config.reference === 'parent') {
referenceElement = this._parent;
- } else if (index.isElement(this._config.reference)) {
- referenceElement = index.getElement(this._config.reference);
+ } else if (index_js.isElement(this._config.reference)) {
+ referenceElement = index_js.getElement(this._config.reference);
} else if (typeof this._config.reference === 'object') {
referenceElement = this._config.reference;
}
-
const popperConfig = this._getPopperConfig();
-
this._popper = Popper__namespace.createPopper(referenceElement, this._menu, popperConfig);
}
-
_isShown() {
return this._menu.classList.contains(CLASS_NAME_SHOW);
}
-
_getPlacement() {
const parentDropdown = this._parent;
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
return PLACEMENT_RIGHT;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {
return PLACEMENT_LEFT;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
return PLACEMENT_TOPCENTER;
}
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
return PLACEMENT_BOTTOMCENTER;
- } // We need to trim the value because custom properties can also include spaces
-
+ }
+ // We need to trim the value because custom properties can also include spaces
const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';
-
if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {
return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;
}
-
return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;
}
-
_detectNavbar() {
return this._element.closest(SELECTOR_NAVBAR) !== null;
}
-
_getOffset() {
const {
offset
} = this._config;
-
if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10));
}
-
if (typeof offset === 'function') {
return popperData => offset(popperData, this._element);
}
-
return offset;
}
-
_getPopperConfig() {
const defaultBsPopperConfig = {
placement: this._getPlacement(),
@@ -324,121 +272,101 @@
offset: this._getOffset()
}
}]
- }; // Disable Popper if we have a static display or Dropdown is in Navbar
+ };
+ // Disable Popper if we have a static display or Dropdown is in Navbar
if (this._inNavbar || this._config.display === 'static') {
- Manipulator__default.default.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove
-
+ Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove
defaultBsPopperConfig.modifiers = [{
name: 'applyStyles',
enabled: false
}];
}
-
- return { ...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ return {
+ ...defaultBsPopperConfig,
+ ...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
-
_selectMenuItem({
key,
target
}) {
- const items = SelectorEngine__default.default.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => index.isVisible(element));
-
+ const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => index_js.isVisible(element));
if (!items.length) {
return;
- } // if target isn't included in items (e.g. when expanding the dropdown)
- // allow cycling to get the last item in case key equals ARROW_UP_KEY
-
-
- index.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
- } // Static
+ }
+ // if target isn't included in items (e.g. when expanding the dropdown)
+ // allow cycling to get the last item in case key equals ARROW_UP_KEY
+ index_js.getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus();
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Dropdown.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
static clearMenus(event) {
if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY) {
return;
}
-
- const openToggles = SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE_SHOWN);
-
+ const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);
for (const toggle of openToggles) {
const context = Dropdown.getInstance(toggle);
-
if (!context || context._config.autoClose === false) {
continue;
}
-
const composedPath = event.composedPath();
const isMenuTarget = composedPath.includes(context._menu);
-
if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {
continue;
- } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
-
+ }
+ // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu
if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY || /input|select|option|textarea|form/i.test(event.target.tagName))) {
continue;
}
-
const relatedTarget = {
relatedTarget: context._element
};
-
if (event.type === 'click') {
relatedTarget.clickEvent = event;
}
-
context._completeHide(relatedTarget);
}
}
-
static dataApiKeydownHandler(event) {
// If not an UP | DOWN | ESCAPE key => not a dropdown command
// If input/textarea && if key is other than ESCAPE => not a dropdown command
+
const isInput = /input|textarea/i.test(event.target.tagName);
const isEscapeEvent = event.key === ESCAPE_KEY;
const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key);
-
if (!isUpOrDownEvent && !isEscapeEvent) {
return;
}
-
if (isInput && !isEscapeEvent) {
return;
}
+ event.preventDefault();
- event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
-
- const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine__default.default.prev(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.next(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine__default.default.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
+ const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode);
const instance = Dropdown.getOrCreateInstance(getToggleButton);
-
if (isUpOrDownEvent) {
event.stopPropagation();
instance.show();
-
instance._selectMenuItem(event);
-
return;
}
-
if (instance._isShown()) {
// else is escape and we check if it is shown
event.stopPropagation();
@@ -446,26 +374,26 @@
getToggleButton.focus();
}
}
-
}
+
/**
* Data API implementation
*/
-
- EventHandler__default.default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
- EventHandler__default.default.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
- EventHandler__default.default.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
+ EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler);
+ EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);
+ EventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus);
+ EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
event.preventDefault();
Dropdown.getOrCreateInstance(this).toggle();
});
+
/**
* jQuery
*/
- index.defineJQueryPlugin(Dropdown);
+ index_js.defineJQueryPlugin(Dropdown);
return Dropdown;
diff --git a/vendor/twbs/bootstrap/js/dist/dropdown.js.map b/vendor/twbs/bootstrap/js/dist/dropdown.js.map
index e4981f866..e094bc6b3 100644
--- a/vendor/twbs/bootstrap/js/dist/dropdown.js.map
+++ b/vendor/twbs/bootstrap/js/dist/dropdown.js.map
@@ -1 +1 @@
-{"version":3,"file":"dropdown.js","sources":["../src/dropdown.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_SHOW","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","isRTL","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","Default","autoClose","boundary","display","offset","popperConfig","reference","DefaultType","Dropdown","BaseComponent","constructor","element","config","_popper","_parent","_element","parentNode","_menu","SelectorEngine","next","prev","findOne","_inNavbar","_detectNavbar","toggle","_isShown","hide","show","isDisabled","relatedTarget","showEvent","EventHandler","trigger","defaultPrevented","_createPopper","document","documentElement","closest","concat","body","children","on","noop","focus","setAttribute","classList","add","_completeHide","dispose","destroy","update","hideEvent","off","remove","Manipulator","removeDataAttribute","_getConfig","isElement","getBoundingClientRect","TypeError","toUpperCase","Popper","referenceElement","_config","getElement","_getPopperConfig","createPopper","contains","_getPlacement","parentDropdown","isEnd","getComputedStyle","getPropertyValue","trim","_getOffset","split","map","value","Number","parseInt","popperData","defaultBsPopperConfig","placement","modifiers","name","options","setDataAttribute","enabled","_selectMenuItem","key","target","items","find","filter","isVisible","length","getNextActiveElement","includes","jQueryInterface","each","data","getOrCreateInstance","clearMenus","event","button","type","openToggles","context","getInstance","composedPath","isMenuTarget","test","tagName","clickEvent","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","preventDefault","getToggleButton","matches","delegateTarget","instance","stopPropagation","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"dropdown.js","sources":["../src/dropdown.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n execute,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center'\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)'\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\nconst PLACEMENT_TOPCENTER = 'top'\nconst PLACEMENT_BOTTOMCENTER = 'bottom'\n\nconst Default = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n}\n\nconst DefaultType = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||\n SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN)\n\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName)\n const isEscapeEvent = event.key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)\n\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n\n // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?\n this :\n (SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.next(this, SELECTOR_DATA_TOGGLE)[0] ||\n SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, event.delegateTarget.parentNode))\n\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isUpOrDownEvent) {\n event.stopPropagation()\n instance.show()\n instance._selectMenuItem(event)\n return\n }\n\n if (instance._isShown()) { // else is escape and we check if it is shown\n event.stopPropagation()\n instance.hide()\n getToggleButton.focus()\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","ESCAPE_KEY","TAB_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","RIGHT_MOUSE_BUTTON","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","CLASS_NAME_SHOW","CLASS_NAME_DROPUP","CLASS_NAME_DROPEND","CLASS_NAME_DROPSTART","CLASS_NAME_DROPUP_CENTER","CLASS_NAME_DROPDOWN_CENTER","SELECTOR_DATA_TOGGLE","SELECTOR_DATA_TOGGLE_SHOWN","SELECTOR_MENU","SELECTOR_NAVBAR","SELECTOR_NAVBAR_NAV","SELECTOR_VISIBLE_ITEMS","PLACEMENT_TOP","isRTL","PLACEMENT_TOPEND","PLACEMENT_BOTTOM","PLACEMENT_BOTTOMEND","PLACEMENT_RIGHT","PLACEMENT_LEFT","PLACEMENT_TOPCENTER","PLACEMENT_BOTTOMCENTER","Default","autoClose","boundary","display","offset","popperConfig","reference","DefaultType","Dropdown","BaseComponent","constructor","element","config","_popper","_parent","_element","parentNode","_menu","SelectorEngine","next","prev","findOne","_inNavbar","_detectNavbar","toggle","_isShown","hide","show","isDisabled","relatedTarget","showEvent","EventHandler","trigger","defaultPrevented","_createPopper","document","documentElement","closest","concat","body","children","on","noop","focus","setAttribute","classList","add","_completeHide","dispose","destroy","update","hideEvent","off","remove","Manipulator","removeDataAttribute","_getConfig","isElement","getBoundingClientRect","TypeError","toUpperCase","Popper","referenceElement","_config","getElement","_getPopperConfig","createPopper","contains","_getPlacement","parentDropdown","isEnd","getComputedStyle","getPropertyValue","trim","_getOffset","split","map","value","Number","parseInt","popperData","defaultBsPopperConfig","placement","modifiers","name","options","setDataAttribute","enabled","execute","_selectMenuItem","key","target","items","find","filter","isVisible","length","getNextActiveElement","includes","jQueryInterface","each","data","getOrCreateInstance","clearMenus","event","button","type","openToggles","context","getInstance","composedPath","isMenuTarget","test","tagName","clickEvent","dataApiKeydownHandler","isInput","isEscapeEvent","isUpOrDownEvent","preventDefault","getToggleButton","matches","delegateTarget","instance","stopPropagation","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/modal.js b/vendor/twbs/bootstrap/js/dist/modal.js
index dfce5121f..16f894017 100644
--- a/vendor/twbs/bootstrap/js/dist/modal.js
+++ b/vendor/twbs/bootstrap/js/dist/modal.js
@@ -1,29 +1,21 @@
/*!
- * Bootstrap modal.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap modal.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./util/scrollbar'), require('./base-component'), require('./util/backdrop'), require('./util/focustrap'), require('./util/component-functions')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./util/scrollbar.js'), require('./base-component.js'), require('./util/backdrop.js'), require('./util/focustrap.js'), require('./util/component-functions.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './util/scrollbar', './base-component', './util/backdrop', './util/focustrap', './util/component-functions'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.Index, global.EventHandler, global.SelectorEngine, global.Scrollbar, global.BaseComponent, global.Backdrop, global.Focustrap, global.ComponentFunctions));
-})(this, (function (index, EventHandler, SelectorEngine, ScrollBarHelper, BaseComponent, Backdrop, FocusTrap, componentFunctions) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const ScrollBarHelper__default = /*#__PURE__*/_interopDefaultLegacy(ScrollBarHelper);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
- const Backdrop__default = /*#__PURE__*/_interopDefaultLegacy(Backdrop);
- const FocusTrap__default = /*#__PURE__*/_interopDefaultLegacy(FocusTrap);
+})(this, (function (index_js, EventHandler, SelectorEngine, ScrollBarHelper, BaseComponent, Backdrop, FocusTrap, componentFunctions_js) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): modal.js
+ * Bootstrap (v5.3.0-alpha1): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -61,338 +53,267 @@
focus: 'boolean',
keyboard: 'boolean'
};
+
/**
* Class definition
*/
- class Modal extends BaseComponent__default.default {
+ class Modal extends BaseComponent {
constructor(element, config) {
super(element, config);
- this._dialog = SelectorEngine__default.default.findOne(SELECTOR_DIALOG, this._element);
+ this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);
this._backdrop = this._initializeBackDrop();
this._focustrap = this._initializeFocusTrap();
this._isShown = false;
this._isTransitioning = false;
- this._scrollBar = new ScrollBarHelper__default.default();
-
+ this._scrollBar = new ScrollBarHelper();
this._addEventListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
}
-
show(relatedTarget) {
if (this._isShown || this._isTransitioning) {
return;
}
-
- const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
relatedTarget
});
-
if (showEvent.defaultPrevented) {
return;
}
-
this._isShown = true;
this._isTransitioning = true;
-
this._scrollBar.hide();
-
document.body.classList.add(CLASS_NAME_OPEN);
-
this._adjustDialog();
-
this._backdrop.show(() => this._showElement(relatedTarget));
}
-
hide() {
if (!this._isShown || this._isTransitioning) {
return;
}
-
- const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
-
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
if (hideEvent.defaultPrevented) {
return;
}
-
this._isShown = false;
this._isTransitioning = true;
-
this._focustrap.deactivate();
-
this._element.classList.remove(CLASS_NAME_SHOW);
-
this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
}
-
dispose() {
for (const htmlElement of [window, this._dialog]) {
- EventHandler__default.default.off(htmlElement, EVENT_KEY);
+ EventHandler.off(htmlElement, EVENT_KEY);
}
-
this._backdrop.dispose();
-
this._focustrap.deactivate();
-
super.dispose();
}
-
handleUpdate() {
this._adjustDialog();
- } // Private
-
+ }
+ // Private
_initializeBackDrop() {
- return new Backdrop__default.default({
+ return new Backdrop({
isVisible: Boolean(this._config.backdrop),
// 'static' option will be translated to true, and booleans will keep their value,
isAnimated: this._isAnimated()
});
}
-
_initializeFocusTrap() {
- return new FocusTrap__default.default({
+ return new FocusTrap({
trapElement: this._element
});
}
-
_showElement(relatedTarget) {
// try to append dynamic modal
if (!document.body.contains(this._element)) {
document.body.append(this._element);
}
-
this._element.style.display = 'block';
-
this._element.removeAttribute('aria-hidden');
-
this._element.setAttribute('aria-modal', true);
-
this._element.setAttribute('role', 'dialog');
-
this._element.scrollTop = 0;
- const modalBody = SelectorEngine__default.default.findOne(SELECTOR_MODAL_BODY, this._dialog);
-
+ const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
if (modalBody) {
modalBody.scrollTop = 0;
}
-
- index.reflow(this._element);
-
+ index_js.reflow(this._element);
this._element.classList.add(CLASS_NAME_SHOW);
-
const transitionComplete = () => {
if (this._config.focus) {
this._focustrap.activate();
}
-
this._isTransitioning = false;
- EventHandler__default.default.trigger(this._element, EVENT_SHOWN, {
+ EventHandler.trigger(this._element, EVENT_SHOWN, {
relatedTarget
});
};
-
this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
}
-
_addEventListeners() {
- EventHandler__default.default.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
+ EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
if (event.key !== ESCAPE_KEY) {
return;
}
-
if (this._config.keyboard) {
event.preventDefault();
this.hide();
return;
}
-
this._triggerBackdropTransition();
});
- EventHandler__default.default.on(window, EVENT_RESIZE, () => {
+ EventHandler.on(window, EVENT_RESIZE, () => {
if (this._isShown && !this._isTransitioning) {
this._adjustDialog();
}
});
- EventHandler__default.default.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
+ EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
// a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
- EventHandler__default.default.one(this._element, EVENT_CLICK_DISMISS, event2 => {
+ EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {
if (this._element !== event.target || this._element !== event2.target) {
return;
}
-
if (this._config.backdrop === 'static') {
this._triggerBackdropTransition();
-
return;
}
-
if (this._config.backdrop) {
this.hide();
}
});
});
}
-
_hideModal() {
this._element.style.display = 'none';
-
this._element.setAttribute('aria-hidden', true);
-
this._element.removeAttribute('aria-modal');
-
this._element.removeAttribute('role');
-
this._isTransitioning = false;
-
this._backdrop.hide(() => {
document.body.classList.remove(CLASS_NAME_OPEN);
-
this._resetAdjustments();
-
this._scrollBar.reset();
-
- EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
+ EventHandler.trigger(this._element, EVENT_HIDDEN);
});
}
-
_isAnimated() {
return this._element.classList.contains(CLASS_NAME_FADE);
}
-
_triggerBackdropTransition() {
- const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE_PREVENTED);
-
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
if (hideEvent.defaultPrevented) {
return;
}
-
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
- const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed
-
+ const initialOverflowY = this._element.style.overflowY;
+ // return if the following background transition hasn't yet completed
if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
return;
}
-
if (!isModalOverflowing) {
this._element.style.overflowY = 'hidden';
}
-
this._element.classList.add(CLASS_NAME_STATIC);
-
this._queueCallback(() => {
this._element.classList.remove(CLASS_NAME_STATIC);
-
this._queueCallback(() => {
this._element.style.overflowY = initialOverflowY;
}, this._dialog);
}, this._dialog);
-
this._element.focus();
}
+
/**
* The following methods are used to handle overflowing modals
*/
-
_adjustDialog() {
const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
-
const scrollbarWidth = this._scrollBar.getWidth();
-
const isBodyOverflowing = scrollbarWidth > 0;
-
if (isBodyOverflowing && !isModalOverflowing) {
- const property = index.isRTL() ? 'paddingLeft' : 'paddingRight';
+ const property = index_js.isRTL() ? 'paddingLeft' : 'paddingRight';
this._element.style[property] = `${scrollbarWidth}px`;
}
-
if (!isBodyOverflowing && isModalOverflowing) {
- const property = index.isRTL() ? 'paddingRight' : 'paddingLeft';
+ const property = index_js.isRTL() ? 'paddingRight' : 'paddingLeft';
this._element.style[property] = `${scrollbarWidth}px`;
}
}
-
_resetAdjustments() {
this._element.style.paddingLeft = '';
this._element.style.paddingRight = '';
- } // Static
-
+ }
+ // Static
static jQueryInterface(config, relatedTarget) {
return this.each(function () {
const data = Modal.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](relatedTarget);
});
}
-
}
+
/**
* Data API implementation
*/
-
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
- const target = index.getElementFromSelector(this);
-
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
+ const target = SelectorEngine.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
- EventHandler__default.default.one(target, EVENT_SHOW, showEvent => {
+ EventHandler.one(target, EVENT_SHOW, showEvent => {
if (showEvent.defaultPrevented) {
// only register focus restorer if modal will actually get shown
return;
}
-
- EventHandler__default.default.one(target, EVENT_HIDDEN, () => {
- if (index.isVisible(this)) {
+ EventHandler.one(target, EVENT_HIDDEN, () => {
+ if (index_js.isVisible(this)) {
this.focus();
}
});
- }); // avoid conflict when clicking modal toggler while another one is open
-
- const alreadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
+ });
+ // avoid conflict when clicking modal toggler while another one is open
+ const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
if (alreadyOpen) {
Modal.getInstance(alreadyOpen).hide();
}
-
const data = Modal.getOrCreateInstance(target);
data.toggle(this);
});
- componentFunctions.enableDismissTrigger(Modal);
+ componentFunctions_js.enableDismissTrigger(Modal);
+
/**
* jQuery
*/
- index.defineJQueryPlugin(Modal);
+ index_js.defineJQueryPlugin(Modal);
return Modal;
diff --git a/vendor/twbs/bootstrap/js/dist/modal.js.map b/vendor/twbs/bootstrap/js/dist/modal.js.map
index cc3ad86c4..b6f131345 100644
--- a/vendor/twbs/bootstrap/js/dist/modal.js.map
+++ b/vendor/twbs/bootstrap/js/dist/modal.js.map
@@ -1 +1 @@
-{"version":3,"file":"modal.js","sources":["../src/modal.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","ESCAPE_KEY","EVENT_HIDE","EVENT_HIDE_PREVENTED","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_CLICK_DATA_API","CLASS_NAME_OPEN","CLASS_NAME_FADE","CLASS_NAME_SHOW","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_TOGGLE","Default","backdrop","focus","keyboard","DefaultType","Modal","BaseComponent","constructor","element","config","_dialog","SelectorEngine","findOne","_element","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_isShown","_isTransitioning","_scrollBar","ScrollBarHelper","_addEventListeners","toggle","relatedTarget","hide","show","showEvent","EventHandler","trigger","defaultPrevented","document","body","classList","add","_adjustDialog","_showElement","hideEvent","deactivate","remove","_queueCallback","_hideModal","_isAnimated","dispose","htmlElement","window","off","handleUpdate","Backdrop","isVisible","Boolean","_config","isAnimated","FocusTrap","trapElement","contains","append","style","display","removeAttribute","setAttribute","scrollTop","modalBody","reflow","transitionComplete","activate","on","event","key","preventDefault","_triggerBackdropTransition","one","event2","target","_resetAdjustments","reset","isModalOverflowing","scrollHeight","documentElement","clientHeight","initialOverflowY","overflowY","scrollbarWidth","getWidth","isBodyOverflowing","property","isRTL","paddingLeft","paddingRight","jQueryInterface","each","data","getOrCreateInstance","TypeError","getElementFromSelector","includes","tagName","alreadyOpen","getInstance","enableDismissTrigger","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"modal.js","sources":["../src/modal.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport BaseComponent from './base-component.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n focus: true,\n keyboard: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop), // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n\n EventHandler.on(window, EVENT_RESIZE, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog()\n }\n })\n\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n if (this._config.backdrop) {\n this.hide()\n }\n })\n })\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","ESCAPE_KEY","EVENT_HIDE","EVENT_HIDE_PREVENTED","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_CLICK_DATA_API","CLASS_NAME_OPEN","CLASS_NAME_FADE","CLASS_NAME_SHOW","CLASS_NAME_STATIC","OPEN_SELECTOR","SELECTOR_DIALOG","SELECTOR_MODAL_BODY","SELECTOR_DATA_TOGGLE","Default","backdrop","focus","keyboard","DefaultType","Modal","BaseComponent","constructor","element","config","_dialog","SelectorEngine","findOne","_element","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_isShown","_isTransitioning","_scrollBar","ScrollBarHelper","_addEventListeners","toggle","relatedTarget","hide","show","showEvent","EventHandler","trigger","defaultPrevented","document","body","classList","add","_adjustDialog","_showElement","hideEvent","deactivate","remove","_queueCallback","_hideModal","_isAnimated","dispose","htmlElement","window","off","handleUpdate","Backdrop","isVisible","Boolean","_config","isAnimated","FocusTrap","trapElement","contains","append","style","display","removeAttribute","setAttribute","scrollTop","modalBody","reflow","transitionComplete","activate","on","event","key","preventDefault","_triggerBackdropTransition","one","event2","target","_resetAdjustments","reset","isModalOverflowing","scrollHeight","documentElement","clientHeight","initialOverflowY","overflowY","scrollbarWidth","getWidth","isBodyOverflowing","property","isRTL","paddingLeft","paddingRight","jQueryInterface","each","data","getOrCreateInstance","TypeError","getElementFromSelector","includes","tagName","alreadyOpen","getInstance","enableDismissTrigger","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/offcanvas.js b/vendor/twbs/bootstrap/js/dist/offcanvas.js
index 6c3f0c28b..b1e12205b 100644
--- a/vendor/twbs/bootstrap/js/dist/offcanvas.js
+++ b/vendor/twbs/bootstrap/js/dist/offcanvas.js
@@ -1,29 +1,21 @@
/*!
- * Bootstrap offcanvas.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap offcanvas.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./util/scrollbar'), require('./dom/event-handler'), require('./base-component'), require('./dom/selector-engine'), require('./util/backdrop'), require('./util/focustrap'), require('./util/component-functions')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./util/scrollbar.js'), require('./dom/event-handler.js'), require('./base-component.js'), require('./dom/selector-engine.js'), require('./util/backdrop.js'), require('./util/focustrap.js'), require('./util/component-functions.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './util/scrollbar', './dom/event-handler', './base-component', './dom/selector-engine', './util/backdrop', './util/focustrap', './util/component-functions'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Offcanvas = factory(global.Index, global.Scrollbar, global.EventHandler, global.BaseComponent, global.SelectorEngine, global.Backdrop, global.Focustrap, global.ComponentFunctions));
-})(this, (function (index, ScrollBarHelper, EventHandler, BaseComponent, SelectorEngine, Backdrop, FocusTrap, componentFunctions) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const ScrollBarHelper__default = /*#__PURE__*/_interopDefaultLegacy(ScrollBarHelper);
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const Backdrop__default = /*#__PURE__*/_interopDefaultLegacy(Backdrop);
- const FocusTrap__default = /*#__PURE__*/_interopDefaultLegacy(FocusTrap);
+})(this, (function (index_js, ScrollBarHelper, EventHandler, BaseComponent, SelectorEngine, Backdrop, FocusTrap, componentFunctions_js) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): offcanvas.js
+ * Bootstrap (v5.3.0-alpha1): offcanvas.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -58,142 +50,108 @@
keyboard: 'boolean',
scroll: 'boolean'
};
+
/**
* Class definition
*/
- class Offcanvas extends BaseComponent__default.default {
+ class Offcanvas extends BaseComponent {
constructor(element, config) {
super(element, config);
this._isShown = false;
this._backdrop = this._initializeBackDrop();
this._focustrap = this._initializeFocusTrap();
-
this._addEventListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
toggle(relatedTarget) {
return this._isShown ? this.hide() : this.show(relatedTarget);
}
-
show(relatedTarget) {
if (this._isShown) {
return;
}
-
- const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
relatedTarget
});
-
if (showEvent.defaultPrevented) {
return;
}
-
this._isShown = true;
-
this._backdrop.show();
-
if (!this._config.scroll) {
- new ScrollBarHelper__default.default().hide();
+ new ScrollBarHelper().hide();
}
-
this._element.setAttribute('aria-modal', true);
-
this._element.setAttribute('role', 'dialog');
-
this._element.classList.add(CLASS_NAME_SHOWING);
-
const completeCallBack = () => {
if (!this._config.scroll || this._config.backdrop) {
this._focustrap.activate();
}
-
this._element.classList.add(CLASS_NAME_SHOW);
-
this._element.classList.remove(CLASS_NAME_SHOWING);
-
- EventHandler__default.default.trigger(this._element, EVENT_SHOWN, {
+ EventHandler.trigger(this._element, EVENT_SHOWN, {
relatedTarget
});
};
-
this._queueCallback(completeCallBack, this._element, true);
}
-
hide() {
if (!this._isShown) {
return;
}
-
- const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
-
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
if (hideEvent.defaultPrevented) {
return;
}
-
this._focustrap.deactivate();
-
this._element.blur();
-
this._isShown = false;
-
this._element.classList.add(CLASS_NAME_HIDING);
-
this._backdrop.hide();
-
const completeCallback = () => {
this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING);
-
this._element.removeAttribute('aria-modal');
-
this._element.removeAttribute('role');
-
if (!this._config.scroll) {
- new ScrollBarHelper__default.default().reset();
+ new ScrollBarHelper().reset();
}
-
- EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
+ EventHandler.trigger(this._element, EVENT_HIDDEN);
};
-
this._queueCallback(completeCallback, this._element, true);
}
-
dispose() {
this._backdrop.dispose();
-
this._focustrap.deactivate();
-
super.dispose();
- } // Private
-
+ }
+ // Private
_initializeBackDrop() {
const clickCallback = () => {
if (this._config.backdrop === 'static') {
- EventHandler__default.default.trigger(this._element, EVENT_HIDE_PREVENTED);
+ EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return;
}
-
this.hide();
- }; // 'static' option will be translated to true, and booleans will keep their value
-
+ };
+ // 'static' option will be translated to true, and booleans will keep their value
const isVisible = Boolean(this._config.backdrop);
- return new Backdrop__default.default({
+ return new Backdrop({
className: CLASS_NAME_BACKDROP,
isVisible,
isAnimated: true,
@@ -201,96 +159,85 @@
clickCallback: isVisible ? clickCallback : null
});
}
-
_initializeFocusTrap() {
- return new FocusTrap__default.default({
+ return new FocusTrap({
trapElement: this._element
});
}
-
_addEventListeners() {
- EventHandler__default.default.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
+ EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
if (event.key !== ESCAPE_KEY) {
return;
}
-
if (!this._config.keyboard) {
- EventHandler__default.default.trigger(this._element, EVENT_HIDE_PREVENTED);
+ EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
return;
}
-
this.hide();
});
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Offcanvas.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
});
}
-
}
+
/**
* Data API implementation
*/
-
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
- const target = index.getElementFromSelector(this);
-
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
+ const target = SelectorEngine.getElementFromSelector(this);
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
- if (index.isDisabled(this)) {
+ if (index_js.isDisabled(this)) {
return;
}
-
- EventHandler__default.default.one(target, EVENT_HIDDEN, () => {
+ EventHandler.one(target, EVENT_HIDDEN, () => {
// focus on trigger when it is closed
- if (index.isVisible(this)) {
+ if (index_js.isVisible(this)) {
this.focus();
}
- }); // avoid conflict when clicking a toggler of an offcanvas, while another is open
-
- const alreadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
+ });
+ // avoid conflict when clicking a toggler of an offcanvas, while another is open
+ const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);
if (alreadyOpen && alreadyOpen !== target) {
Offcanvas.getInstance(alreadyOpen).hide();
}
-
const data = Offcanvas.getOrCreateInstance(target);
data.toggle(this);
});
- EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
- for (const selector of SelectorEngine__default.default.find(OPEN_SELECTOR)) {
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
+ for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {
Offcanvas.getOrCreateInstance(selector).show();
}
});
- EventHandler__default.default.on(window, EVENT_RESIZE, () => {
- for (const element of SelectorEngine__default.default.find('[aria-modal][class*=show][class*=offcanvas-]')) {
+ EventHandler.on(window, EVENT_RESIZE, () => {
+ for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {
if (getComputedStyle(element).position !== 'fixed') {
Offcanvas.getOrCreateInstance(element).hide();
}
}
});
- componentFunctions.enableDismissTrigger(Offcanvas);
+ componentFunctions_js.enableDismissTrigger(Offcanvas);
+
/**
* jQuery
*/
- index.defineJQueryPlugin(Offcanvas);
+ index_js.defineJQueryPlugin(Offcanvas);
return Offcanvas;
diff --git a/vendor/twbs/bootstrap/js/dist/offcanvas.js.map b/vendor/twbs/bootstrap/js/dist/offcanvas.js.map
index e42ba458a..bfa8ae2d8 100644
--- a/vendor/twbs/bootstrap/js/dist/offcanvas.js.map
+++ b/vendor/twbs/bootstrap/js/dist/offcanvas.js.map
@@ -1 +1 @@
-{"version":3,"file":"offcanvas.js","sources":["../src/offcanvas.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n isDisabled,\n isVisible\n} from './util/index'\nimport ScrollBarHelper from './util/scrollbar'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport SelectorEngine from './dom/selector-engine'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","EVENT_LOAD_DATA_API","ESCAPE_KEY","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","OPEN_SELECTOR","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDE_PREVENTED","EVENT_HIDDEN","EVENT_RESIZE","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DISMISS","SELECTOR_DATA_TOGGLE","Default","backdrop","keyboard","scroll","DefaultType","Offcanvas","BaseComponent","constructor","element","config","_isShown","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_addEventListeners","toggle","relatedTarget","hide","show","showEvent","EventHandler","trigger","_element","defaultPrevented","_config","ScrollBarHelper","setAttribute","classList","add","completeCallBack","activate","remove","_queueCallback","hideEvent","deactivate","blur","completeCallback","removeAttribute","reset","dispose","clickCallback","isVisible","Boolean","Backdrop","className","isAnimated","rootElement","parentNode","FocusTrap","trapElement","on","event","key","jQueryInterface","each","data","getOrCreateInstance","undefined","startsWith","TypeError","document","target","getElementFromSelector","includes","tagName","preventDefault","isDisabled","one","focus","alreadyOpen","SelectorEngine","findOne","getInstance","window","selector","find","getComputedStyle","position","enableDismissTrigger","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"offcanvas.js","sources":["../src/offcanvas.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n isDisabled,\n isVisible\n} from './util/index.js'\nimport ScrollBarHelper from './util/scrollbar.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport Backdrop from './util/backdrop.js'\nimport FocusTrap from './util/focustrap.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'offcanvas'\nconst DATA_KEY = 'bs.offcanvas'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst ESCAPE_KEY = 'Escape'\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\nconst CLASS_NAME_HIDING = 'hiding'\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop'\nconst OPEN_SELECTOR = '.offcanvas.show'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"offcanvas\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n scroll: false\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._isShown = false\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, { relatedTarget })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._backdrop.show()\n\n if (!this._config.scroll) {\n new ScrollBarHelper().hide()\n }\n\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.classList.add(CLASS_NAME_SHOWING)\n\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate()\n }\n\n this._element.classList.add(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })\n }\n\n this._queueCallback(completeCallBack, this._element, true)\n }\n\n hide() {\n if (!this._isShown) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._focustrap.deactivate()\n this._element.blur()\n this._isShown = false\n this._element.classList.add(CLASS_NAME_HIDING)\n this._backdrop.hide()\n\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW, CLASS_NAME_HIDING)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n\n if (!this._config.scroll) {\n new ScrollBarHelper().reset()\n }\n\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._queueCallback(completeCallback, this._element, true)\n }\n\n dispose() {\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (!this._config.keyboard) {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n return\n }\n\n this.hide()\n })\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus()\n }\n })\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide()\n }\n\n const data = Offcanvas.getOrCreateInstance(target)\n data.toggle(this)\n})\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show()\n }\n})\n\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide()\n }\n }\n})\n\nenableDismissTrigger(Offcanvas)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas)\n\nexport default Offcanvas\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","EVENT_LOAD_DATA_API","ESCAPE_KEY","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","CLASS_NAME_HIDING","CLASS_NAME_BACKDROP","OPEN_SELECTOR","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDE_PREVENTED","EVENT_HIDDEN","EVENT_RESIZE","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DISMISS","SELECTOR_DATA_TOGGLE","Default","backdrop","keyboard","scroll","DefaultType","Offcanvas","BaseComponent","constructor","element","config","_isShown","_backdrop","_initializeBackDrop","_focustrap","_initializeFocusTrap","_addEventListeners","toggle","relatedTarget","hide","show","showEvent","EventHandler","trigger","_element","defaultPrevented","_config","ScrollBarHelper","setAttribute","classList","add","completeCallBack","activate","remove","_queueCallback","hideEvent","deactivate","blur","completeCallback","removeAttribute","reset","dispose","clickCallback","isVisible","Boolean","Backdrop","className","isAnimated","rootElement","parentNode","FocusTrap","trapElement","on","event","key","jQueryInterface","each","data","getOrCreateInstance","undefined","startsWith","TypeError","document","target","SelectorEngine","getElementFromSelector","includes","tagName","preventDefault","isDisabled","one","focus","alreadyOpen","findOne","getInstance","window","selector","find","getComputedStyle","position","enableDismissTrigger","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAeA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,WAAW,CAAA;EACxB,MAAMC,QAAQ,GAAG,cAAc,CAAA;EAC/B,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAAC,CAAA,CAAA;EAChC,MAAME,YAAY,GAAG,WAAW,CAAA;EAChC,MAAMC,mBAAmB,GAAI,CAAA,IAAA,EAAMF,SAAU,CAAA,EAAEC,YAAa,CAAC,CAAA,CAAA;EAC7D,MAAME,UAAU,GAAG,QAAQ,CAAA;EAE3B,MAAMC,eAAe,GAAG,MAAM,CAAA;EAC9B,MAAMC,kBAAkB,GAAG,SAAS,CAAA;EACpC,MAAMC,iBAAiB,GAAG,QAAQ,CAAA;EAClC,MAAMC,mBAAmB,GAAG,oBAAoB,CAAA;EAChD,MAAMC,aAAa,GAAG,iBAAiB,CAAA;EAEvC,MAAMC,UAAU,GAAI,CAAMT,IAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACrC,MAAMU,WAAW,GAAI,CAAOV,KAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACvC,MAAMW,UAAU,GAAI,CAAMX,IAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACrC,MAAMY,oBAAoB,GAAI,CAAeZ,aAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACxD,MAAMa,YAAY,GAAI,CAAQb,MAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACzC,MAAMc,YAAY,GAAI,CAAQd,MAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACzC,MAAMe,oBAAoB,GAAI,CAAA,KAAA,EAAOf,SAAU,CAAA,EAAEC,YAAa,CAAC,CAAA,CAAA;EAC/D,MAAMe,qBAAqB,GAAI,CAAiBhB,eAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EAE3D,MAAMiB,oBAAoB,GAAG,8BAA8B,CAAA;EAE3D,MAAMC,OAAO,GAAG;EACdC,EAAAA,QAAQ,EAAE,IAAI;EACdC,EAAAA,QAAQ,EAAE,IAAI;EACdC,EAAAA,MAAM,EAAE,KAAA;EACV,CAAC,CAAA;EAED,MAAMC,WAAW,GAAG;EAClBH,EAAAA,QAAQ,EAAE,kBAAkB;EAC5BC,EAAAA,QAAQ,EAAE,SAAS;EACnBC,EAAAA,MAAM,EAAE,SAAA;EACV,CAAC,CAAA;;EAED;EACA;EACA;;EAEA,MAAME,SAAS,SAASC,aAAa,CAAC;EACpCC,EAAAA,WAAW,CAACC,OAAO,EAAEC,MAAM,EAAE;EAC3B,IAAA,KAAK,CAACD,OAAO,EAAEC,MAAM,CAAC,CAAA;MAEtB,IAAI,CAACC,QAAQ,GAAG,KAAK,CAAA;EACrB,IAAA,IAAI,CAACC,SAAS,GAAG,IAAI,CAACC,mBAAmB,EAAE,CAAA;EAC3C,IAAA,IAAI,CAACC,UAAU,GAAG,IAAI,CAACC,oBAAoB,EAAE,CAAA;MAC7C,IAAI,CAACC,kBAAkB,EAAE,CAAA;EAC3B,GAAA;;EAEA;EACA,EAAA,WAAWf,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAO,CAAA;EAChB,GAAA;EAEA,EAAA,WAAWI,WAAW,GAAG;EACvB,IAAA,OAAOA,WAAW,CAAA;EACpB,GAAA;EAEA,EAAA,WAAWxB,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAI,CAAA;EACb,GAAA;;EAEA;IACAoC,MAAM,CAACC,aAAa,EAAE;EACpB,IAAA,OAAO,IAAI,CAACP,QAAQ,GAAG,IAAI,CAACQ,IAAI,EAAE,GAAG,IAAI,CAACC,IAAI,CAACF,aAAa,CAAC,CAAA;EAC/D,GAAA;IAEAE,IAAI,CAACF,aAAa,EAAE;MAClB,IAAI,IAAI,CAACP,QAAQ,EAAE;EACjB,MAAA,OAAA;EACF,KAAA;MAEA,MAAMU,SAAS,GAAGC,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAEhC,UAAU,EAAE;EAAE0B,MAAAA,aAAAA;EAAc,KAAC,CAAC,CAAA;MAEpF,IAAIG,SAAS,CAACI,gBAAgB,EAAE;EAC9B,MAAA,OAAA;EACF,KAAA;MAEA,IAAI,CAACd,QAAQ,GAAG,IAAI,CAAA;EACpB,IAAA,IAAI,CAACC,SAAS,CAACQ,IAAI,EAAE,CAAA;EAErB,IAAA,IAAI,CAAC,IAAI,CAACM,OAAO,CAACtB,MAAM,EAAE;EACxB,MAAA,IAAIuB,eAAe,EAAE,CAACR,IAAI,EAAE,CAAA;EAC9B,KAAA;MAEA,IAAI,CAACK,QAAQ,CAACI,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;MAC9C,IAAI,CAACJ,QAAQ,CAACI,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;MAC5C,IAAI,CAACJ,QAAQ,CAACK,SAAS,CAACC,GAAG,CAAC1C,kBAAkB,CAAC,CAAA;MAE/C,MAAM2C,gBAAgB,GAAG,MAAM;EAC7B,MAAA,IAAI,CAAC,IAAI,CAACL,OAAO,CAACtB,MAAM,IAAI,IAAI,CAACsB,OAAO,CAACxB,QAAQ,EAAE;EACjD,QAAA,IAAI,CAACY,UAAU,CAACkB,QAAQ,EAAE,CAAA;EAC5B,OAAA;QAEA,IAAI,CAACR,QAAQ,CAACK,SAAS,CAACC,GAAG,CAAC3C,eAAe,CAAC,CAAA;QAC5C,IAAI,CAACqC,QAAQ,CAACK,SAAS,CAACI,MAAM,CAAC7C,kBAAkB,CAAC,CAAA;QAClDkC,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAE/B,WAAW,EAAE;EAAEyB,QAAAA,aAAAA;EAAc,OAAC,CAAC,CAAA;OACpE,CAAA;MAED,IAAI,CAACgB,cAAc,CAACH,gBAAgB,EAAE,IAAI,CAACP,QAAQ,EAAE,IAAI,CAAC,CAAA;EAC5D,GAAA;EAEAL,EAAAA,IAAI,GAAG;EACL,IAAA,IAAI,CAAC,IAAI,CAACR,QAAQ,EAAE;EAClB,MAAA,OAAA;EACF,KAAA;MAEA,MAAMwB,SAAS,GAAGb,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAE9B,UAAU,CAAC,CAAA;MAEjE,IAAIyC,SAAS,CAACV,gBAAgB,EAAE;EAC9B,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,CAACX,UAAU,CAACsB,UAAU,EAAE,CAAA;EAC5B,IAAA,IAAI,CAACZ,QAAQ,CAACa,IAAI,EAAE,CAAA;MACpB,IAAI,CAAC1B,QAAQ,GAAG,KAAK,CAAA;MACrB,IAAI,CAACa,QAAQ,CAACK,SAAS,CAACC,GAAG,CAACzC,iBAAiB,CAAC,CAAA;EAC9C,IAAA,IAAI,CAACuB,SAAS,CAACO,IAAI,EAAE,CAAA;MAErB,MAAMmB,gBAAgB,GAAG,MAAM;QAC7B,IAAI,CAACd,QAAQ,CAACK,SAAS,CAACI,MAAM,CAAC9C,eAAe,EAAEE,iBAAiB,CAAC,CAAA;EAClE,MAAA,IAAI,CAACmC,QAAQ,CAACe,eAAe,CAAC,YAAY,CAAC,CAAA;EAC3C,MAAA,IAAI,CAACf,QAAQ,CAACe,eAAe,CAAC,MAAM,CAAC,CAAA;EAErC,MAAA,IAAI,CAAC,IAAI,CAACb,OAAO,CAACtB,MAAM,EAAE;EACxB,QAAA,IAAIuB,eAAe,EAAE,CAACa,KAAK,EAAE,CAAA;EAC/B,OAAA;QAEAlB,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAE5B,YAAY,CAAC,CAAA;OAClD,CAAA;MAED,IAAI,CAACsC,cAAc,CAACI,gBAAgB,EAAE,IAAI,CAACd,QAAQ,EAAE,IAAI,CAAC,CAAA;EAC5D,GAAA;EAEAiB,EAAAA,OAAO,GAAG;EACR,IAAA,IAAI,CAAC7B,SAAS,CAAC6B,OAAO,EAAE,CAAA;EACxB,IAAA,IAAI,CAAC3B,UAAU,CAACsB,UAAU,EAAE,CAAA;MAC5B,KAAK,CAACK,OAAO,EAAE,CAAA;EACjB,GAAA;;EAEA;EACA5B,EAAAA,mBAAmB,GAAG;MACpB,MAAM6B,aAAa,GAAG,MAAM;EAC1B,MAAA,IAAI,IAAI,CAAChB,OAAO,CAACxB,QAAQ,KAAK,QAAQ,EAAE;UACtCoB,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAE7B,oBAAoB,CAAC,CAAA;EACzD,QAAA,OAAA;EACF,OAAA;QAEA,IAAI,CAACwB,IAAI,EAAE,CAAA;OACZ,CAAA;;EAED;MACA,MAAMwB,SAAS,GAAGC,OAAO,CAAC,IAAI,CAAClB,OAAO,CAACxB,QAAQ,CAAC,CAAA;MAEhD,OAAO,IAAI2C,QAAQ,CAAC;EAClBC,MAAAA,SAAS,EAAExD,mBAAmB;QAC9BqD,SAAS;EACTI,MAAAA,UAAU,EAAE,IAAI;EAChBC,MAAAA,WAAW,EAAE,IAAI,CAACxB,QAAQ,CAACyB,UAAU;EACrCP,MAAAA,aAAa,EAAEC,SAAS,GAAGD,aAAa,GAAG,IAAA;EAC7C,KAAC,CAAC,CAAA;EACJ,GAAA;EAEA3B,EAAAA,oBAAoB,GAAG;MACrB,OAAO,IAAImC,SAAS,CAAC;QACnBC,WAAW,EAAE,IAAI,CAAC3B,QAAAA;EACpB,KAAC,CAAC,CAAA;EACJ,GAAA;EAEAR,EAAAA,kBAAkB,GAAG;MACnBM,YAAY,CAAC8B,EAAE,CAAC,IAAI,CAAC5B,QAAQ,EAAEzB,qBAAqB,EAAEsD,KAAK,IAAI;EAC7D,MAAA,IAAIA,KAAK,CAACC,GAAG,KAAKpE,UAAU,EAAE;EAC5B,QAAA,OAAA;EACF,OAAA;EAEA,MAAA,IAAI,CAAC,IAAI,CAACwC,OAAO,CAACvB,QAAQ,EAAE;UAC1BmB,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAE7B,oBAAoB,CAAC,CAAA;EACzD,QAAA,OAAA;EACF,OAAA;QAEA,IAAI,CAACwB,IAAI,EAAE,CAAA;EACb,KAAC,CAAC,CAAA;EACJ,GAAA;;EAEA;IACA,OAAOoC,eAAe,CAAC7C,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAAC8C,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAGnD,SAAS,CAACoD,mBAAmB,CAAC,IAAI,EAAEhD,MAAM,CAAC,CAAA;EAExD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA,OAAA;EACF,OAAA;EAEA,MAAA,IAAI+C,IAAI,CAAC/C,MAAM,CAAC,KAAKiD,SAAS,IAAIjD,MAAM,CAACkD,UAAU,CAAC,GAAG,CAAC,IAAIlD,MAAM,KAAK,aAAa,EAAE;EACpF,QAAA,MAAM,IAAImD,SAAS,CAAE,CAAmBnD,iBAAAA,EAAAA,MAAO,GAAE,CAAC,CAAA;EACpD,OAAA;EAEA+C,MAAAA,IAAI,CAAC/C,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;EACpB,KAAC,CAAC,CAAA;EACJ,GAAA;EACF,CAAA;;EAEA;EACA;EACA;;EAEAY,YAAY,CAAC8B,EAAE,CAACU,QAAQ,EAAEhE,oBAAoB,EAAEE,oBAAoB,EAAE,UAAUqD,KAAK,EAAE;EACrF,EAAA,MAAMU,MAAM,GAAGC,cAAc,CAACC,sBAAsB,CAAC,IAAI,CAAC,CAAA;EAE1D,EAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAACC,QAAQ,CAAC,IAAI,CAACC,OAAO,CAAC,EAAE;MACxCd,KAAK,CAACe,cAAc,EAAE,CAAA;EACxB,GAAA;EAEA,EAAA,IAAIC,mBAAU,CAAC,IAAI,CAAC,EAAE;EACpB,IAAA,OAAA;EACF,GAAA;EAEA/C,EAAAA,YAAY,CAACgD,GAAG,CAACP,MAAM,EAAEnE,YAAY,EAAE,MAAM;EAC3C;EACA,IAAA,IAAI+C,kBAAS,CAAC,IAAI,CAAC,EAAE;QACnB,IAAI,CAAC4B,KAAK,EAAE,CAAA;EACd,KAAA;EACF,GAAC,CAAC,CAAA;;EAEF;EACA,EAAA,MAAMC,WAAW,GAAGR,cAAc,CAACS,OAAO,CAAClF,aAAa,CAAC,CAAA;EACzD,EAAA,IAAIiF,WAAW,IAAIA,WAAW,KAAKT,MAAM,EAAE;EACzCzD,IAAAA,SAAS,CAACoE,WAAW,CAACF,WAAW,CAAC,CAACrD,IAAI,EAAE,CAAA;EAC3C,GAAA;EAEA,EAAA,MAAMsC,IAAI,GAAGnD,SAAS,CAACoD,mBAAmB,CAACK,MAAM,CAAC,CAAA;EAClDN,EAAAA,IAAI,CAACxC,MAAM,CAAC,IAAI,CAAC,CAAA;EACnB,CAAC,CAAC,CAAA;EAEFK,YAAY,CAAC8B,EAAE,CAACuB,MAAM,EAAE1F,mBAAmB,EAAE,MAAM;IACjD,KAAK,MAAM2F,QAAQ,IAAIZ,cAAc,CAACa,IAAI,CAACtF,aAAa,CAAC,EAAE;EACzDe,IAAAA,SAAS,CAACoD,mBAAmB,CAACkB,QAAQ,CAAC,CAACxD,IAAI,EAAE,CAAA;EAChD,GAAA;EACF,CAAC,CAAC,CAAA;EAEFE,YAAY,CAAC8B,EAAE,CAACuB,MAAM,EAAE9E,YAAY,EAAE,MAAM;IAC1C,KAAK,MAAMY,OAAO,IAAIuD,cAAc,CAACa,IAAI,CAAC,8CAA8C,CAAC,EAAE;MACzF,IAAIC,gBAAgB,CAACrE,OAAO,CAAC,CAACsE,QAAQ,KAAK,OAAO,EAAE;EAClDzE,MAAAA,SAAS,CAACoD,mBAAmB,CAACjD,OAAO,CAAC,CAACU,IAAI,EAAE,CAAA;EAC/C,KAAA;EACF,GAAA;EACF,CAAC,CAAC,CAAA;AAEF6D,4CAAoB,CAAC1E,SAAS,CAAC,CAAA;;EAE/B;EACA;EACA;;AAEA2E,6BAAkB,CAAC3E,SAAS,CAAC;;;;;;;;"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/popover.js b/vendor/twbs/bootstrap/js/dist/popover.js
index b7c1af9ad..a0ea088fb 100644
--- a/vendor/twbs/bootstrap/js/dist/popover.js
+++ b/vendor/twbs/bootstrap/js/dist/popover.js
@@ -1,24 +1,21 @@
/*!
- * Bootstrap popover.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap popover.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./tooltip')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./tooltip.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './tooltip'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Popover = factory(global.Index, global.Tooltip));
-})(this, (function (index, Tooltip) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const Tooltip__default = /*#__PURE__*/_interopDefaultLegacy(Tooltip);
+})(this, (function (index_js, Tooltip) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): popover.js
+ * Bootstrap (v5.3.0-alpha1): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -26,75 +23,71 @@
const NAME = 'popover';
const SELECTOR_TITLE = '.popover-header';
const SELECTOR_CONTENT = '.popover-body';
- const Default = { ...Tooltip__default.default.Default,
+ const Default = {
+ ...Tooltip.Default,
content: '',
offset: [0, 8],
placement: 'right',
template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>',
trigger: 'click'
};
- const DefaultType = { ...Tooltip__default.default.DefaultType,
+ const DefaultType = {
+ ...Tooltip.DefaultType,
content: '(null|string|element|function)'
};
+
/**
* Class definition
*/
- class Popover extends Tooltip__default.default {
+ class Popover extends Tooltip {
// Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Overrides
-
+ }
+ // Overrides
_isWithContent() {
return this._getTitle() || this._getContent();
- } // Private
-
+ }
+ // Private
_getContentForTemplate() {
return {
[SELECTOR_TITLE]: this._getTitle(),
[SELECTOR_CONTENT]: this._getContent()
};
}
-
_getContent() {
return this._resolvePossibleFunction(this._config.content);
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Popover.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* jQuery
*/
-
- index.defineJQueryPlugin(Popover);
+ index_js.defineJQueryPlugin(Popover);
return Popover;
diff --git a/vendor/twbs/bootstrap/js/dist/popover.js.map b/vendor/twbs/bootstrap/js/dist/popover.js.map
index 06aa6c14a..a26b03748 100644
--- a/vendor/twbs/bootstrap/js/dist/popover.js.map
+++ b/vendor/twbs/bootstrap/js/dist/popover.js.map
@@ -1 +1 @@
-{"version":3,"file":"popover.js","sources":["../src/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n"],"names":["NAME","SELECTOR_TITLE","SELECTOR_CONTENT","Default","Tooltip","content","offset","placement","template","trigger","DefaultType","Popover","_isWithContent","_getTitle","_getContent","_getContentForTemplate","_resolvePossibleFunction","_config","jQueryInterface","config","each","data","getOrCreateInstance","TypeError","defineJQueryPlugin"],"mappings":";;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,SAAb,CAAA;EAEA,MAAMC,cAAc,GAAG,iBAAvB,CAAA;EACA,MAAMC,gBAAgB,GAAG,eAAzB,CAAA;EAEA,MAAMC,OAAO,GAAG,EACd,GAAGC,wBAAO,CAACD,OADG;EAEdE,EAAAA,OAAO,EAAE,EAFK;EAGdC,EAAAA,MAAM,EAAE,CAAC,CAAD,EAAI,CAAJ,CAHM;EAIdC,EAAAA,SAAS,EAAE,OAJG;IAKdC,QAAQ,EAAE,yCACR,mCADQ,GAER,kCAFQ,GAGR,kCAHQ,GAIR,QATY;EAUdC,EAAAA,OAAO,EAAE,OAAA;EAVK,CAAhB,CAAA;EAaA,MAAMC,WAAW,GAAG,EAClB,GAAGN,wBAAO,CAACM,WADO;EAElBL,EAAAA,OAAO,EAAE,gCAAA;EAFS,CAApB,CAAA;EAKA;EACA;EACA;;EAEA,MAAMM,OAAN,SAAsBP,wBAAtB,CAA8B;EAC5B;EACkB,EAAA,WAAPD,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAP,CAAA;EACD,GAAA;;EAEqB,EAAA,WAAXO,WAAW,GAAG;EACvB,IAAA,OAAOA,WAAP,CAAA;EACD,GAAA;;EAEc,EAAA,WAAJV,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAP,CAAA;EACD,GAZ2B;;;EAe5BY,EAAAA,cAAc,GAAG;EACf,IAAA,OAAO,IAAKC,CAAAA,SAAL,EAAoB,IAAA,IAAA,CAAKC,WAAL,EAA3B,CAAA;EACD,GAjB2B;;;EAoB5BC,EAAAA,sBAAsB,GAAG;MACvB,OAAO;EACL,MAAA,CAACd,cAAD,GAAkB,IAAKY,CAAAA,SAAL,EADb;QAEL,CAACX,gBAAD,GAAoB,IAAA,CAAKY,WAAL,EAAA;OAFtB,CAAA;EAID,GAAA;;EAEDA,EAAAA,WAAW,GAAG;EACZ,IAAA,OAAO,KAAKE,wBAAL,CAA8B,KAAKC,OAAL,CAAaZ,OAA3C,CAAP,CAAA;EACD,GA7B2B;;;IAgCN,OAAfa,eAAe,CAACC,MAAD,EAAS;MAC7B,OAAO,IAAA,CAAKC,IAAL,CAAU,YAAY;QAC3B,MAAMC,IAAI,GAAGV,OAAO,CAACW,mBAAR,CAA4B,IAA5B,EAAkCH,MAAlC,CAAb,CAAA;;EAEA,MAAA,IAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;EAC9B,QAAA,OAAA;EACD,OAAA;;EAED,MAAA,IAAI,OAAOE,IAAI,CAACF,MAAD,CAAX,KAAwB,WAA5B,EAAyC;EACvC,QAAA,MAAM,IAAII,SAAJ,CAAe,CAAmBJ,iBAAAA,EAAAA,MAAO,GAAzC,CAAN,CAAA;EACD,OAAA;;QAEDE,IAAI,CAACF,MAAD,CAAJ,EAAA,CAAA;EACD,KAZM,CAAP,CAAA;EAaD,GAAA;;EA9C2B,CAAA;EAiD9B;EACA;EACA;;;AAEAK,0BAAkB,CAACb,OAAD,CAAlB;;;;;;;;"} \ No newline at end of file
+{"version":3,"file":"popover.js","sources":["../src/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin } from './util/index.js'\nimport Tooltip from './tooltip.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"popover-arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div>' +\n '</div>',\n trigger: 'click'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent()\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n }\n }\n\n _getContent() {\n return this._resolvePossibleFunction(this._config.content)\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover)\n\nexport default Popover\n"],"names":["NAME","SELECTOR_TITLE","SELECTOR_CONTENT","Default","Tooltip","content","offset","placement","template","trigger","DefaultType","Popover","_isWithContent","_getTitle","_getContent","_getContentForTemplate","_resolvePossibleFunction","_config","jQueryInterface","config","each","data","getOrCreateInstance","TypeError","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAKA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,SAAS,CAAA;EAEtB,MAAMC,cAAc,GAAG,iBAAiB,CAAA;EACxC,MAAMC,gBAAgB,GAAG,eAAe,CAAA;EAExC,MAAMC,OAAO,GAAG;IACd,GAAGC,OAAO,CAACD,OAAO;EAClBE,EAAAA,OAAO,EAAE,EAAE;EACXC,EAAAA,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;EACdC,EAAAA,SAAS,EAAE,OAAO;IAClBC,QAAQ,EAAE,sCAAsC,GAC9C,mCAAmC,GACnC,kCAAkC,GAClC,kCAAkC,GAClC,QAAQ;EACVC,EAAAA,OAAO,EAAE,OAAA;EACX,CAAC,CAAA;EAED,MAAMC,WAAW,GAAG;IAClB,GAAGN,OAAO,CAACM,WAAW;EACtBL,EAAAA,OAAO,EAAE,gCAAA;EACX,CAAC,CAAA;;EAED;EACA;EACA;;EAEA,MAAMM,OAAO,SAASP,OAAO,CAAC;EAC5B;EACA,EAAA,WAAWD,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAO,CAAA;EAChB,GAAA;EAEA,EAAA,WAAWO,WAAW,GAAG;EACvB,IAAA,OAAOA,WAAW,CAAA;EACpB,GAAA;EAEA,EAAA,WAAWV,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAI,CAAA;EACb,GAAA;;EAEA;EACAY,EAAAA,cAAc,GAAG;MACf,OAAO,IAAI,CAACC,SAAS,EAAE,IAAI,IAAI,CAACC,WAAW,EAAE,CAAA;EAC/C,GAAA;;EAEA;EACAC,EAAAA,sBAAsB,GAAG;MACvB,OAAO;EACL,MAAA,CAACd,cAAc,GAAG,IAAI,CAACY,SAAS,EAAE;EAClC,MAAA,CAACX,gBAAgB,GAAG,IAAI,CAACY,WAAW,EAAA;OACrC,CAAA;EACH,GAAA;EAEAA,EAAAA,WAAW,GAAG;MACZ,OAAO,IAAI,CAACE,wBAAwB,CAAC,IAAI,CAACC,OAAO,CAACZ,OAAO,CAAC,CAAA;EAC5D,GAAA;;EAEA;IACA,OAAOa,eAAe,CAACC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAGV,OAAO,CAACW,mBAAmB,CAAC,IAAI,EAAEH,MAAM,CAAC,CAAA;EAEtD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA,OAAA;EACF,OAAA;EAEA,MAAA,IAAI,OAAOE,IAAI,CAACF,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,QAAA,MAAM,IAAII,SAAS,CAAE,CAAmBJ,iBAAAA,EAAAA,MAAO,GAAE,CAAC,CAAA;EACpD,OAAA;QAEAE,IAAI,CAACF,MAAM,CAAC,EAAE,CAAA;EAChB,KAAC,CAAC,CAAA;EACJ,GAAA;EACF,CAAA;;EAEA;EACA;EACA;;AAEAK,6BAAkB,CAACb,OAAO,CAAC;;;;;;;;"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/scrollspy.js b/vendor/twbs/bootstrap/js/dist/scrollspy.js
index 5dc511075..310b7c61f 100644
--- a/vendor/twbs/bootstrap/js/dist/scrollspy.js
+++ b/vendor/twbs/bootstrap/js/dist/scrollspy.js
@@ -1,26 +1,21 @@
/*!
- * Bootstrap scrollspy.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap scrollspy.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollspy = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
-})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
+})(this, (function (index_js, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): scrollspy.js
+ * Bootstrap (v5.3.0-alpha1): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -59,14 +54,16 @@
target: 'element',
threshold: 'array'
};
+
/**
* Class definition
*/
- class ScrollSpy extends BaseComponent__default.default {
+ class ScrollSpy extends BaseComponent {
constructor(element, config) {
- super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper
+ super(element, config);
+ // this._element is the observablesContainer and config.target the menu links wrapper
this._targetLinks = new Map();
this._observableSections = new Map();
this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;
@@ -77,87 +74,75 @@
parentScrollTop: 0
};
this.refresh(); // initialize
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
refresh() {
this._initializeTargetsAndObservables();
-
this._maybeEnableSmoothScroll();
-
if (this._observer) {
this._observer.disconnect();
} else {
this._observer = this._getNewObserver();
}
-
for (const section of this._observableSections.values()) {
this._observer.observe(section);
}
}
-
dispose() {
this._observer.disconnect();
-
super.dispose();
- } // Private
-
+ }
+ // Private
_configAfterMerge(config) {
// TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case
- config.target = index.getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
+ config.target = index_js.getElement(config.target) || document.body;
+ // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only
config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;
-
if (typeof config.threshold === 'string') {
config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));
}
-
return config;
}
-
_maybeEnableSmoothScroll() {
if (!this._config.smoothScroll) {
return;
- } // unregister any previous listeners
-
+ }
- EventHandler__default.default.off(this._config.target, EVENT_CLICK);
- EventHandler__default.default.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
+ // unregister any previous listeners
+ EventHandler.off(this._config.target, EVENT_CLICK);
+ EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {
const observableSection = this._observableSections.get(event.target.hash);
-
if (observableSection) {
event.preventDefault();
const root = this._rootElement || window;
const height = observableSection.offsetTop - this._element.offsetTop;
-
if (root.scrollTo) {
root.scrollTo({
top: height,
behavior: 'smooth'
});
return;
- } // Chrome 60 doesn't support `scrollTo`
-
+ }
+ // Chrome 60 doesn't support `scrollTo`
root.scrollTop = height;
}
});
}
-
_getNewObserver() {
const options = {
root: this._rootElement,
@@ -165,146 +150,123 @@
rootMargin: this._config.rootMargin
};
return new IntersectionObserver(entries => this._observerCallback(entries), options);
- } // The logic of selection
-
+ }
+ // The logic of selection
_observerCallback(entries) {
const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);
-
const activate = entry => {
this._previousScrollData.visibleEntryTop = entry.target.offsetTop;
-
this._process(targetElement(entry));
};
-
const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;
const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;
this._previousScrollData.parentScrollTop = parentScrollTop;
-
for (const entry of entries) {
if (!entry.isIntersecting) {
this._activeTarget = null;
-
this._clearActiveClass(targetElement(entry));
-
continue;
}
-
- const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop
-
+ const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;
+ // if we are scrolling down, pick the bigger offsetTop
if (userScrollsDown && entryIsLowerThanPrevious) {
- activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
-
+ activate(entry);
+ // if parent isn't scrolled, let's keep the first visible item, breaking the iteration
if (!parentScrollTop) {
return;
}
-
continue;
- } // if we are scrolling up, pick the smallest offsetTop
-
+ }
+ // if we are scrolling up, pick the smallest offsetTop
if (!userScrollsDown && !entryIsLowerThanPrevious) {
activate(entry);
}
}
}
-
_initializeTargetsAndObservables() {
this._targetLinks = new Map();
this._observableSections = new Map();
- const targetLinks = SelectorEngine__default.default.find(SELECTOR_TARGET_LINKS, this._config.target);
-
+ const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);
for (const anchor of targetLinks) {
// ensure that the anchor has an id and is not disabled
- if (!anchor.hash || index.isDisabled(anchor)) {
+ if (!anchor.hash || index_js.isDisabled(anchor)) {
continue;
}
+ const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
- const observableSection = SelectorEngine__default.default.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible
-
- if (index.isVisible(observableSection)) {
+ // ensure that the observableSection exists & is visible
+ if (index_js.isVisible(observableSection)) {
this._targetLinks.set(anchor.hash, anchor);
-
this._observableSections.set(anchor.hash, observableSection);
}
}
}
-
_process(target) {
if (this._activeTarget === target) {
return;
}
-
this._clearActiveClass(this._config.target);
-
this._activeTarget = target;
target.classList.add(CLASS_NAME_ACTIVE);
-
this._activateParents(target);
-
- EventHandler__default.default.trigger(this._element, EVENT_ACTIVATE, {
+ EventHandler.trigger(this._element, EVENT_ACTIVATE, {
relatedTarget: target
});
}
-
_activateParents(target) {
// Activate dropdown parents
if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {
- SelectorEngine__default.default.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
+ SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE);
return;
}
-
- for (const listGroup of SelectorEngine__default.default.parents(target, SELECTOR_NAV_LIST_GROUP)) {
+ for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {
// Set triggered links parents as active
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor
- for (const item of SelectorEngine__default.default.prev(listGroup, SELECTOR_LINK_ITEMS)) {
+ for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {
item.classList.add(CLASS_NAME_ACTIVE);
}
}
}
-
_clearActiveClass(parent) {
parent.classList.remove(CLASS_NAME_ACTIVE);
- const activeNodes = SelectorEngine__default.default.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent);
-
+ const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent);
for (const node of activeNodes) {
node.classList.remove(CLASS_NAME_ACTIVE);
}
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = ScrollSpy.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* Data API implementation
*/
-
- EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
- for (const spy of SelectorEngine__default.default.find(SELECTOR_DATA_SPY)) {
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
+ for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {
ScrollSpy.getOrCreateInstance(spy);
}
});
+
/**
* jQuery
*/
- index.defineJQueryPlugin(ScrollSpy);
+ index_js.defineJQueryPlugin(ScrollSpy);
return ScrollSpy;
diff --git a/vendor/twbs/bootstrap/js/dist/scrollspy.js.map b/vendor/twbs/bootstrap/js/dist/scrollspy.js.map
index 3d999f0b0..87846725a 100644
--- a/vendor/twbs/bootstrap/js/dist/scrollspy.js.map
+++ b/vendor/twbs/bootstrap/js/dist/scrollspy.js.map
@@ -1 +1 @@
-{"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","EVENT_ACTIVATE","EVENT_CLICK","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","Default","offset","rootMargin","smoothScroll","target","threshold","DefaultType","ScrollSpy","BaseComponent","constructor","element","config","_targetLinks","Map","_observableSections","_rootElement","getComputedStyle","_element","overflowY","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","values","observe","dispose","_configAfterMerge","getElement","document","body","split","map","value","Number","parseFloat","_config","EventHandler","off","on","event","observableSection","get","hash","preventDefault","root","window","height","offsetTop","scrollTo","top","behavior","scrollTop","options","IntersectionObserver","entries","_observerCallback","targetElement","entry","id","activate","_process","documentElement","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","SelectorEngine","find","anchor","isDisabled","findOne","isVisible","set","classList","add","_activateParents","trigger","relatedTarget","contains","closest","listGroup","parents","item","prev","parent","remove","activeNodes","node","jQueryInterface","each","data","getOrCreateInstance","undefined","startsWith","TypeError","spy","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"scrollspy.js","sources":["../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_TARGET_LINKS = '[href]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: null, // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n}\n\nconst DefaultType = {\n offset: '(number|null)', // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map()\n this._observableSections = new Map()\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element\n this._activeTarget = null\n this._observer = null\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n }\n this.refresh() // initialize\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables()\n this._maybeEnableSmoothScroll()\n\n if (this._observer) {\n this._observer.disconnect()\n } else {\n this._observer = this._getNewObserver()\n }\n\n for (const section of this._observableSections.values()) {\n this._observer.observe(section)\n }\n }\n\n dispose() {\n this._observer.disconnect()\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin\n\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value))\n }\n\n return config\n }\n\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK)\n\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash)\n if (observableSection) {\n event.preventDefault()\n const root = this._rootElement || window\n const height = observableSection.offsetTop - this._element.offsetTop\n if (root.scrollTo) {\n root.scrollTo({ top: height, behavior: 'smooth' })\n return\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height\n }\n })\n }\n\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n }\n\n return new IntersectionObserver(entries => this._observerCallback(entries), options)\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`)\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop\n this._process(targetElement(entry))\n }\n\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop\n this._previousScrollData.parentScrollTop = parentScrollTop\n\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null\n this._clearActiveClass(targetElement(entry))\n\n continue\n }\n\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry)\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return\n }\n\n continue\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry)\n }\n }\n }\n\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map()\n this._observableSections = new Map()\n\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target)\n\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue\n }\n\n const observableSection = SelectorEngine.findOne(anchor.hash, this._element)\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(anchor.hash, anchor)\n this._observableSections.set(anchor.hash, observableSection)\n }\n }\n }\n\n _process(target) {\n if (this._activeTarget === target) {\n return\n }\n\n this._clearActiveClass(this._config.target)\n this._activeTarget = target\n target.classList.add(CLASS_NAME_ACTIVE)\n this._activateParents(target)\n\n EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target })\n }\n\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, target.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n return\n }\n\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) {\n item.classList.add(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _clearActiveClass(parent) {\n parent.classList.remove(CLASS_NAME_ACTIVE)\n\n const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE}`, parent)\n for (const node of activeNodes) {\n node.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = ScrollSpy.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) {\n ScrollSpy.getOrCreateInstance(spy)\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(ScrollSpy)\n\nexport default ScrollSpy\n"],"names":["NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","EVENT_ACTIVATE","EVENT_CLICK","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_TARGET_LINKS","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_LINK_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","Default","offset","rootMargin","smoothScroll","target","threshold","DefaultType","ScrollSpy","BaseComponent","constructor","element","config","_targetLinks","Map","_observableSections","_rootElement","getComputedStyle","_element","overflowY","_activeTarget","_observer","_previousScrollData","visibleEntryTop","parentScrollTop","refresh","_initializeTargetsAndObservables","_maybeEnableSmoothScroll","disconnect","_getNewObserver","section","values","observe","dispose","_configAfterMerge","getElement","document","body","split","map","value","Number","parseFloat","_config","EventHandler","off","on","event","observableSection","get","hash","preventDefault","root","window","height","offsetTop","scrollTo","top","behavior","scrollTop","options","IntersectionObserver","entries","_observerCallback","targetElement","entry","id","activate","_process","documentElement","userScrollsDown","isIntersecting","_clearActiveClass","entryIsLowerThanPrevious","targetLinks","SelectorEngine","find","anchor","isDisabled","findOne","isVisible","set","classList","add","_activateParents","trigger","relatedTarget","contains","closest","listGroup","parents","item","prev","parent","remove","activeNodes","node","jQueryInterface","each","data","getOrCreateInstance","undefined","startsWith","TypeError","spy","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/tab.js b/vendor/twbs/bootstrap/js/dist/tab.js
index c11e68d37..6fd8deab6 100644
--- a/vendor/twbs/bootstrap/js/dist/tab.js
+++ b/vendor/twbs/bootstrap/js/dist/tab.js
@@ -1,26 +1,21 @@
/*!
- * Bootstrap tab.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap tab.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./base-component')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './base-component'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tab = factory(global.Index, global.EventHandler, global.SelectorEngine, global.BaseComponent));
-})(this, (function (index, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
+})(this, (function (index_js, EventHandler, SelectorEngine, BaseComponent) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tab.js
+ * Bootstrap (v5.3.0-alpha1): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -50,133 +45,108 @@
const SELECTOR_OUTER = '.nav-item, .list-group-item';
const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // todo:v6: could be only `tab`
-
const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`;
const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;
+
/**
* Class definition
*/
- class Tab extends BaseComponent__default.default {
+ class Tab extends BaseComponent {
constructor(element) {
super(element);
this._parent = this._element.closest(SELECTOR_TAB_PANEL);
-
if (!this._parent) {
- return; // todo: should Throw exception on v6
+ return;
+ // todo: should Throw exception on v6
// throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)
- } // Set up initial aria attributes
-
+ }
+ // Set up initial aria attributes
this._setInitialAttributes(this._parent, this._getChildren());
+ EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
+ }
- EventHandler__default.default.on(this._element, EVENT_KEYDOWN, event => this._keydown(event));
- } // Getters
-
-
+ // Getters
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
show() {
// Shows this elem and deactivate the active sibling if exists
const innerElem = this._element;
-
if (this._elemIsActive(innerElem)) {
return;
- } // Search for active tab on same parent to deactivate it
-
+ }
+ // Search for active tab on same parent to deactivate it
const active = this._getActiveElem();
-
- const hideEvent = active ? EventHandler__default.default.trigger(active, EVENT_HIDE, {
+ const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE, {
relatedTarget: innerElem
}) : null;
- const showEvent = EventHandler__default.default.trigger(innerElem, EVENT_SHOW, {
+ const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, {
relatedTarget: active
});
-
if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) {
return;
}
-
this._deactivate(active, innerElem);
-
this._activate(innerElem, active);
- } // Private
-
+ }
+ // Private
_activate(element, relatedElem) {
if (!element) {
return;
}
-
element.classList.add(CLASS_NAME_ACTIVE);
-
- this._activate(index.getElementFromSelector(element)); // Search and activate/show the proper section
-
+ this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
element.classList.add(CLASS_NAME_SHOW);
return;
}
-
element.removeAttribute('tabindex');
element.setAttribute('aria-selected', true);
-
this._toggleDropDown(element, true);
-
- EventHandler__default.default.trigger(element, EVENT_SHOWN, {
+ EventHandler.trigger(element, EVENT_SHOWN, {
relatedTarget: relatedElem
});
};
-
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
}
-
_deactivate(element, relatedElem) {
if (!element) {
return;
}
-
element.classList.remove(CLASS_NAME_ACTIVE);
element.blur();
-
- this._deactivate(index.getElementFromSelector(element)); // Search and deactivate the shown section too
-
+ this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
element.classList.remove(CLASS_NAME_SHOW);
return;
}
-
element.setAttribute('aria-selected', false);
element.setAttribute('tabindex', '-1');
-
this._toggleDropDown(element, false);
-
- EventHandler__default.default.trigger(element, EVENT_HIDDEN, {
+ EventHandler.trigger(element, EVENT_HIDDEN, {
relatedTarget: relatedElem
});
};
-
this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE));
}
-
_keydown(event) {
if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
return;
}
-
event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page
-
event.preventDefault();
const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
- const nextActiveElement = index.getNextActiveElement(this._getChildren().filter(element => !index.isDisabled(element)), event.target, isNext, true);
-
+ const nextActiveElement = index_js.getNextActiveElement(this._getChildren().filter(element => !index_js.isDisabled(element)), event.target, isNext, true);
if (nextActiveElement) {
nextActiveElement.focus({
preventScroll: true
@@ -184,141 +154,113 @@
Tab.getOrCreateInstance(nextActiveElement).show();
}
}
-
_getChildren() {
// collection of inner elements
- return SelectorEngine__default.default.find(SELECTOR_INNER_ELEM, this._parent);
+ return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent);
}
-
_getActiveElem() {
return this._getChildren().find(child => this._elemIsActive(child)) || null;
}
-
_setInitialAttributes(parent, children) {
this._setAttributeIfNotExists(parent, 'role', 'tablist');
-
for (const child of children) {
this._setInitialAttributesOnChild(child);
}
}
-
_setInitialAttributesOnChild(child) {
child = this._getInnerElement(child);
-
const isActive = this._elemIsActive(child);
-
const outerElem = this._getOuterElement(child);
-
child.setAttribute('aria-selected', isActive);
-
if (outerElem !== child) {
this._setAttributeIfNotExists(outerElem, 'role', 'presentation');
}
-
if (!isActive) {
child.setAttribute('tabindex', '-1');
}
+ this._setAttributeIfNotExists(child, 'role', 'tab');
- this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too
-
-
+ // set attributes to the related panel too
this._setInitialAttributesOnTargetPanel(child);
}
-
_setInitialAttributesOnTargetPanel(child) {
- const target = index.getElementFromSelector(child);
-
+ const target = SelectorEngine.getElementFromSelector(child);
if (!target) {
return;
}
-
this._setAttributeIfNotExists(target, 'role', 'tabpanel');
-
if (child.id) {
this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`);
}
}
-
_toggleDropDown(element, open) {
const outerElem = this._getOuterElement(element);
-
if (!outerElem.classList.contains(CLASS_DROPDOWN)) {
return;
}
-
const toggle = (selector, className) => {
- const element = SelectorEngine__default.default.findOne(selector, outerElem);
-
+ const element = SelectorEngine.findOne(selector, outerElem);
if (element) {
element.classList.toggle(className, open);
}
};
-
toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE);
toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW);
outerElem.setAttribute('aria-expanded', open);
}
-
_setAttributeIfNotExists(element, attribute, value) {
if (!element.hasAttribute(attribute)) {
element.setAttribute(attribute, value);
}
}
-
_elemIsActive(elem) {
return elem.classList.contains(CLASS_NAME_ACTIVE);
- } // Try to get the inner element (usually the .nav-link)
-
+ }
+ // Try to get the inner element (usually the .nav-link)
_getInnerElement(elem) {
- return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine__default.default.findOne(SELECTOR_INNER_ELEM, elem);
- } // Try to get the outer element (usually the .nav-item)
-
+ return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem);
+ }
+ // Try to get the outer element (usually the .nav-item)
_getOuterElement(elem) {
return elem.closest(SELECTOR_OUTER) || elem;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Tab.getOrCreateInstance(this);
-
if (typeof config !== 'string') {
return;
}
-
if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* Data API implementation
*/
-
- EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
- if (index.isDisabled(this)) {
+ if (index_js.isDisabled(this)) {
return;
}
-
Tab.getOrCreateInstance(this).show();
});
+
/**
* Initialize on focus
*/
-
- EventHandler__default.default.on(window, EVENT_LOAD_DATA_API, () => {
- for (const element of SelectorEngine__default.default.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
+ EventHandler.on(window, EVENT_LOAD_DATA_API, () => {
+ for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {
Tab.getOrCreateInstance(element);
}
});
@@ -326,7 +268,7 @@
* jQuery
*/
- index.defineJQueryPlugin(Tab);
+ index_js.defineJQueryPlugin(Tab);
return Tab;
diff --git a/vendor/twbs/bootstrap/js/dist/tab.js.map b/vendor/twbs/bootstrap/js/dist/tab.js.map
index 1c012abf8..1f925a340 100644
--- a/vendor/twbs/bootstrap/js/dist/tab.js.map
+++ b/vendor/twbs/bootstrap/js/dist/tab.js.map
@@ -1 +1 @@
-{"version":3,"file":"tab.js","sources":["../src/tab.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, getNextActiveElement, isDisabled } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK_DATA_API","EVENT_KEYDOWN","EVENT_LOAD_DATA_API","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","CLASS_NAME_ACTIVE","CLASS_NAME_FADE","CLASS_NAME_SHOW","CLASS_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_DATA_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","BaseComponent","constructor","element","_parent","_element","closest","_setInitialAttributes","_getChildren","EventHandler","on","event","_keydown","show","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","trigger","relatedTarget","showEvent","defaultPrevented","_deactivate","_activate","relatedElem","classList","add","getElementFromSelector","complete","getAttribute","removeAttribute","setAttribute","_toggleDropDown","_queueCallback","contains","remove","blur","includes","key","stopPropagation","preventDefault","isNext","nextActiveElement","getNextActiveElement","filter","isDisabled","target","focus","preventScroll","getOrCreateInstance","SelectorEngine","find","child","parent","children","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","id","open","toggle","selector","className","findOne","attribute","value","hasAttribute","elem","matches","jQueryInterface","config","each","data","undefined","startsWith","TypeError","document","tagName","window","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"tab.js","sources":["../src/tab.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport SelectorEngine from './dom/selector-engine.js'\nimport BaseComponent from './base-component.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}`\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_DROPDOWN = 'dropdown'\n\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_MENU = '.dropdown-menu'\nconst NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'\n\nconst SELECTOR_TAB_PANEL = '.list-group, .nav, [role=\"tablist\"]'\nconst SELECTOR_OUTER = '.nav-item, .list-group-item'\nconst SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role=\"tab\"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]' // todo:v6: could be only `tab`\nconst SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`\n\nconst SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle=\"tab\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"pill\"], .${CLASS_NAME_ACTIVE}[data-bs-toggle=\"list\"]`\n\n/**\n * Class definition\n */\n\nclass Tab extends BaseComponent {\n constructor(element) {\n super(element)\n this._parent = this._element.closest(SELECTOR_TAB_PANEL)\n\n if (!this._parent) {\n return\n // todo: should Throw exception on v6\n // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`)\n }\n\n // Set up initial aria attributes\n this._setInitialAttributes(this._parent, this._getChildren())\n\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n // Getters\n static get NAME() {\n return NAME\n }\n\n // Public\n show() { // Shows this elem and deactivate the active sibling if exists\n const innerElem = this._element\n if (this._elemIsActive(innerElem)) {\n return\n }\n\n // Search for active tab on same parent to deactivate it\n const active = this._getActiveElem()\n\n const hideEvent = active ?\n EventHandler.trigger(active, EVENT_HIDE, { relatedTarget: innerElem }) :\n null\n\n const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW, { relatedTarget: active })\n\n if (showEvent.defaultPrevented || (hideEvent && hideEvent.defaultPrevented)) {\n return\n }\n\n this._deactivate(active, innerElem)\n this._activate(innerElem, active)\n }\n\n // Private\n _activate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.add(CLASS_NAME_ACTIVE)\n\n this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.add(CLASS_NAME_SHOW)\n return\n }\n\n element.removeAttribute('tabindex')\n element.setAttribute('aria-selected', true)\n this._toggleDropDown(element, true)\n EventHandler.trigger(element, EVENT_SHOWN, {\n relatedTarget: relatedElem\n })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _deactivate(element, relatedElem) {\n if (!element) {\n return\n }\n\n element.classList.remove(CLASS_NAME_ACTIVE)\n element.blur()\n\n this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too\n\n const complete = () => {\n if (element.getAttribute('role') !== 'tab') {\n element.classList.remove(CLASS_NAME_SHOW)\n return\n }\n\n element.setAttribute('aria-selected', false)\n element.setAttribute('tabindex', '-1')\n this._toggleDropDown(element, false)\n EventHandler.trigger(element, EVENT_HIDDEN, { relatedTarget: relatedElem })\n }\n\n this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE))\n }\n\n _keydown(event) {\n if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) {\n return\n }\n\n event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page\n event.preventDefault()\n const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key)\n const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true)\n\n if (nextActiveElement) {\n nextActiveElement.focus({ preventScroll: true })\n Tab.getOrCreateInstance(nextActiveElement).show()\n }\n }\n\n _getChildren() { // collection of inner elements\n return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent)\n }\n\n _getActiveElem() {\n return this._getChildren().find(child => this._elemIsActive(child)) || null\n }\n\n _setInitialAttributes(parent, children) {\n this._setAttributeIfNotExists(parent, 'role', 'tablist')\n\n for (const child of children) {\n this._setInitialAttributesOnChild(child)\n }\n }\n\n _setInitialAttributesOnChild(child) {\n child = this._getInnerElement(child)\n const isActive = this._elemIsActive(child)\n const outerElem = this._getOuterElement(child)\n child.setAttribute('aria-selected', isActive)\n\n if (outerElem !== child) {\n this._setAttributeIfNotExists(outerElem, 'role', 'presentation')\n }\n\n if (!isActive) {\n child.setAttribute('tabindex', '-1')\n }\n\n this._setAttributeIfNotExists(child, 'role', 'tab')\n\n // set attributes to the related panel too\n this._setInitialAttributesOnTargetPanel(child)\n }\n\n _setInitialAttributesOnTargetPanel(child) {\n const target = SelectorEngine.getElementFromSelector(child)\n\n if (!target) {\n return\n }\n\n this._setAttributeIfNotExists(target, 'role', 'tabpanel')\n\n if (child.id) {\n this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`)\n }\n }\n\n _toggleDropDown(element, open) {\n const outerElem = this._getOuterElement(element)\n if (!outerElem.classList.contains(CLASS_DROPDOWN)) {\n return\n }\n\n const toggle = (selector, className) => {\n const element = SelectorEngine.findOne(selector, outerElem)\n if (element) {\n element.classList.toggle(className, open)\n }\n }\n\n toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE)\n toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW)\n outerElem.setAttribute('aria-expanded', open)\n }\n\n _setAttributeIfNotExists(element, attribute, value) {\n if (!element.hasAttribute(attribute)) {\n element.setAttribute(attribute, value)\n }\n }\n\n _elemIsActive(elem) {\n return elem.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n // Try to get the inner element (usually the .nav-link)\n _getInnerElement(elem) {\n return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem)\n }\n\n // Try to get the outer element (usually the .nav-item)\n _getOuterElement(elem) {\n return elem.closest(SELECTOR_OUTER) || elem\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tab.getOrCreateInstance(this)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n Tab.getOrCreateInstance(this).show()\n})\n\n/**\n * Initialize on focus\n */\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) {\n Tab.getOrCreateInstance(element)\n }\n})\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tab)\n\nexport default Tab\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK_DATA_API","EVENT_KEYDOWN","EVENT_LOAD_DATA_API","ARROW_LEFT_KEY","ARROW_RIGHT_KEY","ARROW_UP_KEY","ARROW_DOWN_KEY","CLASS_NAME_ACTIVE","CLASS_NAME_FADE","CLASS_NAME_SHOW","CLASS_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","SELECTOR_DROPDOWN_MENU","NOT_SELECTOR_DROPDOWN_TOGGLE","SELECTOR_TAB_PANEL","SELECTOR_OUTER","SELECTOR_INNER","SELECTOR_DATA_TOGGLE","SELECTOR_INNER_ELEM","SELECTOR_DATA_TOGGLE_ACTIVE","Tab","BaseComponent","constructor","element","_parent","_element","closest","_setInitialAttributes","_getChildren","EventHandler","on","event","_keydown","show","innerElem","_elemIsActive","active","_getActiveElem","hideEvent","trigger","relatedTarget","showEvent","defaultPrevented","_deactivate","_activate","relatedElem","classList","add","SelectorEngine","getElementFromSelector","complete","getAttribute","removeAttribute","setAttribute","_toggleDropDown","_queueCallback","contains","remove","blur","includes","key","stopPropagation","preventDefault","isNext","nextActiveElement","getNextActiveElement","filter","isDisabled","target","focus","preventScroll","getOrCreateInstance","find","child","parent","children","_setAttributeIfNotExists","_setInitialAttributesOnChild","_getInnerElement","isActive","outerElem","_getOuterElement","_setInitialAttributesOnTargetPanel","id","open","toggle","selector","className","findOne","attribute","value","hasAttribute","elem","matches","jQueryInterface","config","each","data","undefined","startsWith","TypeError","document","tagName","window","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/toast.js b/vendor/twbs/bootstrap/js/dist/toast.js
index bf0705e7e..af6e8e914 100644
--- a/vendor/twbs/bootstrap/js/dist/toast.js
+++ b/vendor/twbs/bootstrap/js/dist/toast.js
@@ -1,25 +1,21 @@
/*!
- * Bootstrap toast.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap toast.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./base-component'), require('./util/component-functions')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index.js'), require('./dom/event-handler.js'), require('./base-component.js'), require('./util/component-functions.js')) :
typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './base-component', './util/component-functions'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Toast = factory(global.Index, global.EventHandler, global.BaseComponent, global.ComponentFunctions));
-})(this, (function (index, EventHandler, BaseComponent, componentFunctions) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
+})(this, (function (index_js, EventHandler, BaseComponent, componentFunctions_js) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): toast.js
+ * Bootstrap (v5.3.0-alpha1): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -37,7 +33,6 @@
const EVENT_SHOWN = `shown${EVENT_KEY}`;
const CLASS_NAME_FADE = 'fade';
const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility
-
const CLASS_NAME_SHOW = 'show';
const CLASS_NAME_SHOWING = 'showing';
const DefaultType = {
@@ -50,119 +45,91 @@
autohide: true,
delay: 5000
};
+
/**
* Class definition
*/
- class Toast extends BaseComponent__default.default {
+ class Toast extends BaseComponent {
constructor(element, config) {
super(element, config);
this._timeout = null;
this._hasMouseInteraction = false;
this._hasKeyboardInteraction = false;
-
this._setListeners();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
show() {
- const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW);
-
+ const showEvent = EventHandler.trigger(this._element, EVENT_SHOW);
if (showEvent.defaultPrevented) {
return;
}
-
this._clearTimeout();
-
if (this._config.animation) {
this._element.classList.add(CLASS_NAME_FADE);
}
-
const complete = () => {
this._element.classList.remove(CLASS_NAME_SHOWING);
-
- EventHandler__default.default.trigger(this._element, EVENT_SHOWN);
-
+ EventHandler.trigger(this._element, EVENT_SHOWN);
this._maybeScheduleHide();
};
-
this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated
-
-
- index.reflow(this._element);
-
+ index_js.reflow(this._element);
this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING);
-
this._queueCallback(complete, this._element, this._config.animation);
}
-
hide() {
if (!this.isShown()) {
return;
}
-
- const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
-
+ const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
if (hideEvent.defaultPrevented) {
return;
}
-
const complete = () => {
this._element.classList.add(CLASS_NAME_HIDE); // @deprecated
-
-
this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW);
-
- EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
+ EventHandler.trigger(this._element, EVENT_HIDDEN);
};
-
this._element.classList.add(CLASS_NAME_SHOWING);
-
this._queueCallback(complete, this._element, this._config.animation);
}
-
dispose() {
this._clearTimeout();
-
if (this.isShown()) {
this._element.classList.remove(CLASS_NAME_SHOW);
}
-
super.dispose();
}
-
isShown() {
return this._element.classList.contains(CLASS_NAME_SHOW);
- } // Private
+ }
+ // Private
_maybeScheduleHide() {
if (!this._config.autohide) {
return;
}
-
if (this._hasMouseInteraction || this._hasKeyboardInteraction) {
return;
}
-
this._timeout = setTimeout(() => {
this.hide();
}, this._config.delay);
}
-
_onInteraction(event, isInteracting) {
switch (event.type) {
case 'mouseover':
@@ -171,7 +138,6 @@
this._hasMouseInteraction = isInteracting;
break;
}
-
case 'focusin':
case 'focusout':
{
@@ -179,61 +145,52 @@
break;
}
}
-
if (isInteracting) {
this._clearTimeout();
-
return;
}
-
const nextElement = event.relatedTarget;
-
if (this._element === nextElement || this._element.contains(nextElement)) {
return;
}
-
this._maybeScheduleHide();
}
-
_setListeners() {
- EventHandler__default.default.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
- EventHandler__default.default.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
- EventHandler__default.default.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
- EventHandler__default.default.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
+ EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true));
+ EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false));
+ EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true));
+ EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false));
}
-
_clearTimeout() {
clearTimeout(this._timeout);
this._timeout = null;
- } // Static
-
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Toast.getOrCreateInstance(this, config);
-
if (typeof config === 'string') {
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config](this);
}
});
}
-
}
+
/**
* Data API implementation
*/
+ componentFunctions_js.enableDismissTrigger(Toast);
- componentFunctions.enableDismissTrigger(Toast);
/**
* jQuery
*/
- index.defineJQueryPlugin(Toast);
+ index_js.defineJQueryPlugin(Toast);
return Toast;
diff --git a/vendor/twbs/bootstrap/js/dist/toast.js.map b/vendor/twbs/bootstrap/js/dist/toast.js.map
index da8cc8ba5..4b601a30f 100644
--- a/vendor/twbs/bootstrap/js/dist/toast.js.map
+++ b/vendor/twbs/bootstrap/js/dist/toast.js.map
@@ -1 +1 @@
-{"version":3,"file":"toast.js","sources":["../src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport BaseComponent from './base-component'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_FADE","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","DefaultType","animation","autohide","delay","Default","Toast","BaseComponent","constructor","element","config","_timeout","_hasMouseInteraction","_hasKeyboardInteraction","_setListeners","show","showEvent","EventHandler","trigger","_element","defaultPrevented","_clearTimeout","_config","classList","add","complete","remove","_maybeScheduleHide","reflow","_queueCallback","hide","isShown","hideEvent","dispose","contains","setTimeout","_onInteraction","event","isInteracting","type","nextElement","relatedTarget","on","clearTimeout","jQueryInterface","each","data","getOrCreateInstance","TypeError","enableDismissTrigger","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"toast.js","sources":["../src/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, reflow } from './util/index.js'\nimport EventHandler from './dom/event-handler.js'\nimport BaseComponent from './base-component.js'\nimport { enableDismissTrigger } from './util/component-functions.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\n\nconst EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`\nconst EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_FOCUSOUT = `focusout${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide' // @deprecated - kept here only for backwards compatibility\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 5000\n}\n\n/**\n * Class definition\n */\n\nclass Toast extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._timeout = null\n this._hasMouseInteraction = false\n this._hasKeyboardInteraction = false\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show() {\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n EventHandler.trigger(this._element, EVENT_SHOWN)\n\n this._maybeScheduleHide()\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE) // @deprecated\n reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING)\n\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n hide() {\n if (!this.isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE) // @deprecated\n this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n }\n\n this._element.classList.add(CLASS_NAME_SHOWING)\n this._queueCallback(complete, this._element, this._config.animation)\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this.isShown()) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n super.dispose()\n }\n\n isShown() {\n return this._element.classList.contains(CLASS_NAME_SHOW)\n }\n\n // Private\n\n _maybeScheduleHide() {\n if (!this._config.autohide) {\n return\n }\n\n if (this._hasMouseInteraction || this._hasKeyboardInteraction) {\n return\n }\n\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n\n _onInteraction(event, isInteracting) {\n switch (event.type) {\n case 'mouseover':\n case 'mouseout': {\n this._hasMouseInteraction = isInteracting\n break\n }\n\n case 'focusin':\n case 'focusout': {\n this._hasKeyboardInteraction = isInteracting\n break\n }\n\n default: {\n break\n }\n }\n\n if (isInteracting) {\n this._clearTimeout()\n return\n }\n\n const nextElement = event.relatedTarget\n if (this._element === nextElement || this._element.contains(nextElement)) {\n return\n }\n\n this._maybeScheduleHide()\n }\n\n _setListeners() {\n EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false))\n EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true))\n EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false))\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Toast.getOrCreateInstance(this, config)\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Toast)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Toast)\n\nexport default Toast\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_MOUSEOVER","EVENT_MOUSEOUT","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","CLASS_NAME_FADE","CLASS_NAME_HIDE","CLASS_NAME_SHOW","CLASS_NAME_SHOWING","DefaultType","animation","autohide","delay","Default","Toast","BaseComponent","constructor","element","config","_timeout","_hasMouseInteraction","_hasKeyboardInteraction","_setListeners","show","showEvent","EventHandler","trigger","_element","defaultPrevented","_clearTimeout","_config","classList","add","complete","remove","_maybeScheduleHide","reflow","_queueCallback","hide","isShown","hideEvent","dispose","contains","setTimeout","_onInteraction","event","isInteracting","type","nextElement","relatedTarget","on","clearTimeout","jQueryInterface","each","data","getOrCreateInstance","TypeError","enableDismissTrigger","defineJQueryPlugin"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAOA;EACA;EACA;;EAEA,MAAMA,IAAI,GAAG,OAAO,CAAA;EACpB,MAAMC,QAAQ,GAAG,UAAU,CAAA;EAC3B,MAAMC,SAAS,GAAI,CAAGD,CAAAA,EAAAA,QAAS,CAAC,CAAA,CAAA;EAEhC,MAAME,eAAe,GAAI,CAAWD,SAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EAC/C,MAAME,cAAc,GAAI,CAAUF,QAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EAC7C,MAAMG,aAAa,GAAI,CAASH,OAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EAC3C,MAAMI,cAAc,GAAI,CAAUJ,QAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EAC7C,MAAMK,UAAU,GAAI,CAAML,IAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACrC,MAAMM,YAAY,GAAI,CAAQN,MAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACzC,MAAMO,UAAU,GAAI,CAAMP,IAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EACrC,MAAMQ,WAAW,GAAI,CAAOR,KAAAA,EAAAA,SAAU,CAAC,CAAA,CAAA;EAEvC,MAAMS,eAAe,GAAG,MAAM,CAAA;EAC9B,MAAMC,eAAe,GAAG,MAAM,CAAC;EAC/B,MAAMC,eAAe,GAAG,MAAM,CAAA;EAC9B,MAAMC,kBAAkB,GAAG,SAAS,CAAA;EAEpC,MAAMC,WAAW,GAAG;EAClBC,EAAAA,SAAS,EAAE,SAAS;EACpBC,EAAAA,QAAQ,EAAE,SAAS;EACnBC,EAAAA,KAAK,EAAE,QAAA;EACT,CAAC,CAAA;EAED,MAAMC,OAAO,GAAG;EACdH,EAAAA,SAAS,EAAE,IAAI;EACfC,EAAAA,QAAQ,EAAE,IAAI;EACdC,EAAAA,KAAK,EAAE,IAAA;EACT,CAAC,CAAA;;EAED;EACA;EACA;;EAEA,MAAME,KAAK,SAASC,aAAa,CAAC;EAChCC,EAAAA,WAAW,CAACC,OAAO,EAAEC,MAAM,EAAE;EAC3B,IAAA,KAAK,CAACD,OAAO,EAAEC,MAAM,CAAC,CAAA;MAEtB,IAAI,CAACC,QAAQ,GAAG,IAAI,CAAA;MACpB,IAAI,CAACC,oBAAoB,GAAG,KAAK,CAAA;MACjC,IAAI,CAACC,uBAAuB,GAAG,KAAK,CAAA;MACpC,IAAI,CAACC,aAAa,EAAE,CAAA;EACtB,GAAA;;EAEA;EACA,EAAA,WAAWT,OAAO,GAAG;EACnB,IAAA,OAAOA,OAAO,CAAA;EAChB,GAAA;EAEA,EAAA,WAAWJ,WAAW,GAAG;EACvB,IAAA,OAAOA,WAAW,CAAA;EACpB,GAAA;EAEA,EAAA,WAAWf,IAAI,GAAG;EAChB,IAAA,OAAOA,IAAI,CAAA;EACb,GAAA;;EAEA;EACA6B,EAAAA,IAAI,GAAG;MACL,MAAMC,SAAS,GAAGC,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAExB,UAAU,CAAC,CAAA;MAEjE,IAAIqB,SAAS,CAACI,gBAAgB,EAAE;EAC9B,MAAA,OAAA;EACF,KAAA;MAEA,IAAI,CAACC,aAAa,EAAE,CAAA;EAEpB,IAAA,IAAI,IAAI,CAACC,OAAO,CAACpB,SAAS,EAAE;QAC1B,IAAI,CAACiB,QAAQ,CAACI,SAAS,CAACC,GAAG,CAAC3B,eAAe,CAAC,CAAA;EAC9C,KAAA;MAEA,MAAM4B,QAAQ,GAAG,MAAM;QACrB,IAAI,CAACN,QAAQ,CAACI,SAAS,CAACG,MAAM,CAAC1B,kBAAkB,CAAC,CAAA;QAClDiB,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAEvB,WAAW,CAAC,CAAA;QAEhD,IAAI,CAAC+B,kBAAkB,EAAE,CAAA;OAC1B,CAAA;MAED,IAAI,CAACR,QAAQ,CAACI,SAAS,CAACG,MAAM,CAAC5B,eAAe,CAAC,CAAC;EAChD8B,IAAAA,eAAM,CAAC,IAAI,CAACT,QAAQ,CAAC,CAAA;MACrB,IAAI,CAACA,QAAQ,CAACI,SAAS,CAACC,GAAG,CAACzB,eAAe,EAAEC,kBAAkB,CAAC,CAAA;EAEhE,IAAA,IAAI,CAAC6B,cAAc,CAACJ,QAAQ,EAAE,IAAI,CAACN,QAAQ,EAAE,IAAI,CAACG,OAAO,CAACpB,SAAS,CAAC,CAAA;EACtE,GAAA;EAEA4B,EAAAA,IAAI,GAAG;EACL,IAAA,IAAI,CAAC,IAAI,CAACC,OAAO,EAAE,EAAE;EACnB,MAAA,OAAA;EACF,KAAA;MAEA,MAAMC,SAAS,GAAGf,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAE1B,UAAU,CAAC,CAAA;MAEjE,IAAIuC,SAAS,CAACZ,gBAAgB,EAAE;EAC9B,MAAA,OAAA;EACF,KAAA;MAEA,MAAMK,QAAQ,GAAG,MAAM;QACrB,IAAI,CAACN,QAAQ,CAACI,SAAS,CAACC,GAAG,CAAC1B,eAAe,CAAC,CAAC;QAC7C,IAAI,CAACqB,QAAQ,CAACI,SAAS,CAACG,MAAM,CAAC1B,kBAAkB,EAAED,eAAe,CAAC,CAAA;QACnEkB,YAAY,CAACC,OAAO,CAAC,IAAI,CAACC,QAAQ,EAAEzB,YAAY,CAAC,CAAA;OAClD,CAAA;MAED,IAAI,CAACyB,QAAQ,CAACI,SAAS,CAACC,GAAG,CAACxB,kBAAkB,CAAC,CAAA;EAC/C,IAAA,IAAI,CAAC6B,cAAc,CAACJ,QAAQ,EAAE,IAAI,CAACN,QAAQ,EAAE,IAAI,CAACG,OAAO,CAACpB,SAAS,CAAC,CAAA;EACtE,GAAA;EAEA+B,EAAAA,OAAO,GAAG;MACR,IAAI,CAACZ,aAAa,EAAE,CAAA;EAEpB,IAAA,IAAI,IAAI,CAACU,OAAO,EAAE,EAAE;QAClB,IAAI,CAACZ,QAAQ,CAACI,SAAS,CAACG,MAAM,CAAC3B,eAAe,CAAC,CAAA;EACjD,KAAA;MAEA,KAAK,CAACkC,OAAO,EAAE,CAAA;EACjB,GAAA;EAEAF,EAAAA,OAAO,GAAG;MACR,OAAO,IAAI,CAACZ,QAAQ,CAACI,SAAS,CAACW,QAAQ,CAACnC,eAAe,CAAC,CAAA;EAC1D,GAAA;;EAEA;;EAEA4B,EAAAA,kBAAkB,GAAG;EACnB,IAAA,IAAI,CAAC,IAAI,CAACL,OAAO,CAACnB,QAAQ,EAAE;EAC1B,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,IAAI,CAACS,oBAAoB,IAAI,IAAI,CAACC,uBAAuB,EAAE;EAC7D,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,CAACF,QAAQ,GAAGwB,UAAU,CAAC,MAAM;QAC/B,IAAI,CAACL,IAAI,EAAE,CAAA;EACb,KAAC,EAAE,IAAI,CAACR,OAAO,CAAClB,KAAK,CAAC,CAAA;EACxB,GAAA;EAEAgC,EAAAA,cAAc,CAACC,KAAK,EAAEC,aAAa,EAAE;MACnC,QAAQD,KAAK,CAACE,IAAI;EAChB,MAAA,KAAK,WAAW,CAAA;EAChB,MAAA,KAAK,UAAU;EAAE,QAAA;YACf,IAAI,CAAC3B,oBAAoB,GAAG0B,aAAa,CAAA;EACzC,UAAA,MAAA;EACF,SAAA;EAEA,MAAA,KAAK,SAAS,CAAA;EACd,MAAA,KAAK,UAAU;EAAE,QAAA;YACf,IAAI,CAACzB,uBAAuB,GAAGyB,aAAa,CAAA;EAC5C,UAAA,MAAA;EACF,SAAA;EAIC,KAAA;EAGH,IAAA,IAAIA,aAAa,EAAE;QACjB,IAAI,CAACjB,aAAa,EAAE,CAAA;EACpB,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMmB,WAAW,GAAGH,KAAK,CAACI,aAAa,CAAA;EACvC,IAAA,IAAI,IAAI,CAACtB,QAAQ,KAAKqB,WAAW,IAAI,IAAI,CAACrB,QAAQ,CAACe,QAAQ,CAACM,WAAW,CAAC,EAAE;EACxE,MAAA,OAAA;EACF,KAAA;MAEA,IAAI,CAACb,kBAAkB,EAAE,CAAA;EAC3B,GAAA;EAEAb,EAAAA,aAAa,GAAG;EACdG,IAAAA,YAAY,CAACyB,EAAE,CAAC,IAAI,CAACvB,QAAQ,EAAE9B,eAAe,EAAEgD,KAAK,IAAI,IAAI,CAACD,cAAc,CAACC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;EAC1FpB,IAAAA,YAAY,CAACyB,EAAE,CAAC,IAAI,CAACvB,QAAQ,EAAE7B,cAAc,EAAE+C,KAAK,IAAI,IAAI,CAACD,cAAc,CAACC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;EAC1FpB,IAAAA,YAAY,CAACyB,EAAE,CAAC,IAAI,CAACvB,QAAQ,EAAE5B,aAAa,EAAE8C,KAAK,IAAI,IAAI,CAACD,cAAc,CAACC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;EACxFpB,IAAAA,YAAY,CAACyB,EAAE,CAAC,IAAI,CAACvB,QAAQ,EAAE3B,cAAc,EAAE6C,KAAK,IAAI,IAAI,CAACD,cAAc,CAACC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;EAC5F,GAAA;EAEAhB,EAAAA,aAAa,GAAG;EACdsB,IAAAA,YAAY,CAAC,IAAI,CAAChC,QAAQ,CAAC,CAAA;MAC3B,IAAI,CAACA,QAAQ,GAAG,IAAI,CAAA;EACtB,GAAA;;EAEA;IACA,OAAOiC,eAAe,CAAClC,MAAM,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACmC,IAAI,CAAC,YAAY;QAC3B,MAAMC,IAAI,GAAGxC,KAAK,CAACyC,mBAAmB,CAAC,IAAI,EAAErC,MAAM,CAAC,CAAA;EAEpD,MAAA,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;EAC9B,QAAA,IAAI,OAAOoC,IAAI,CAACpC,MAAM,CAAC,KAAK,WAAW,EAAE;EACvC,UAAA,MAAM,IAAIsC,SAAS,CAAE,CAAmBtC,iBAAAA,EAAAA,MAAO,GAAE,CAAC,CAAA;EACpD,SAAA;EAEAoC,QAAAA,IAAI,CAACpC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAA;EACpB,OAAA;EACF,KAAC,CAAC,CAAA;EACJ,GAAA;EACF,CAAA;;EAEA;EACA;EACA;;AAEAuC,4CAAoB,CAAC3C,KAAK,CAAC,CAAA;;EAE3B;EACA;EACA;;AAEA4C,6BAAkB,CAAC5C,KAAK,CAAC;;;;;;;;"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/tooltip.js b/vendor/twbs/bootstrap/js/dist/tooltip.js
index cc46139e4..7d4d852f4 100644
--- a/vendor/twbs/bootstrap/js/dist/tooltip.js
+++ b/vendor/twbs/bootstrap/js/dist/tooltip.js
@@ -1,18 +1,15 @@
/*!
- * Bootstrap tooltip.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap tooltip.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./util/index'), require('./util/sanitizer'), require('./dom/event-handler'), require('./dom/manipulator'), require('./base-component'), require('./util/template-factory')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@popperjs/core'), require('./util/index.js'), require('./util/sanitizer.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./base-component.js'), require('./util/template-factory.js')) :
typeof define === 'function' && define.amd ? define(['@popperjs/core', './util/index', './util/sanitizer', './dom/event-handler', './dom/manipulator', './base-component', './util/template-factory'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Tooltip = factory(global["@popperjs/core"], global.Index, global.Sanitizer, global.EventHandler, global.Manipulator, global.BaseComponent, global.TemplateFactory));
-})(this, (function (Popper, index, sanitizer, EventHandler, Manipulator, BaseComponent, TemplateFactory) { 'use strict';
+})(this, (function (Popper, index_js, sanitizer_js, EventHandler, Manipulator, BaseComponent, TemplateFactory) { 'use strict';
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- function _interopNamespace(e) {
- if (e && e.__esModule) return e;
+ function _interopNamespaceDefault(e) {
const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
if (e) {
for (const k in e) {
@@ -29,18 +26,15 @@
return Object.freeze(n);
}
- const Popper__namespace = /*#__PURE__*/_interopNamespace(Popper);
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
- const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
- const TemplateFactory__default = /*#__PURE__*/_interopDefaultLegacy(TemplateFactory);
+ const Popper__namespace = /*#__PURE__*/_interopNamespaceDefault(Popper);
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tooltip.js
+ * Bootstrap (v5.3.0-alpha1): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -70,12 +64,12 @@
const AttachmentMap = {
AUTO: 'auto',
TOP: 'top',
- RIGHT: index.isRTL() ? 'left' : 'right',
+ RIGHT: index_js.isRTL() ? 'left' : 'right',
BOTTOM: 'bottom',
- LEFT: index.isRTL() ? 'right' : 'left'
+ LEFT: index_js.isRTL() ? 'right' : 'left'
};
const Default = {
- allowList: sanitizer.DefaultAllowlist,
+ allowList: sanitizer_js.DefaultAllowlist,
animation: true,
boundary: 'clippingParents',
container: false,
@@ -112,183 +106,140 @@
title: '(string|element|function)',
trigger: 'string'
};
+
/**
* Class definition
*/
- class Tooltip extends BaseComponent__default.default {
+ class Tooltip extends BaseComponent {
constructor(element, config) {
if (typeof Popper__namespace === 'undefined') {
throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
}
+ super(element, config);
- super(element, config); // Private
-
+ // Private
this._isEnabled = true;
this._timeout = 0;
this._isHovered = null;
this._activeTrigger = {};
this._popper = null;
this._templateFactory = null;
- this._newContent = null; // Protected
+ this._newContent = null;
+ // Protected
this.tip = null;
-
this._setListeners();
-
if (!this._config.selector) {
this._fixTitle();
}
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
enable() {
this._isEnabled = true;
}
-
disable() {
this._isEnabled = false;
}
-
toggleEnabled() {
this._isEnabled = !this._isEnabled;
}
-
toggle() {
if (!this._isEnabled) {
return;
}
-
this._activeTrigger.click = !this._activeTrigger.click;
-
if (this._isShown()) {
this._leave();
-
return;
}
-
this._enter();
}
-
dispose() {
clearTimeout(this._timeout);
- EventHandler__default.default.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
-
- if (this.tip) {
- this.tip.remove();
- }
-
+ EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
if (this._element.getAttribute('data-bs-original-title')) {
this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));
}
-
this._disposePopper();
-
super.dispose();
}
-
show() {
if (this._element.style.display === 'none') {
throw new Error('Please use show on visible elements');
}
-
if (!(this._isWithContent() && this._isEnabled)) {
return;
}
-
- const showEvent = EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_SHOW));
- const shadowRoot = index.findShadowRoot(this._element);
-
+ const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW));
+ const shadowRoot = index_js.findShadowRoot(this._element);
const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);
-
if (showEvent.defaultPrevented || !isInTheDom) {
return;
- } // todo v6 remove this OR make it optional
-
-
- if (this.tip) {
- this.tip.remove();
- this.tip = null;
}
+ // todo v6 remove this OR make it optional
+ this._disposePopper();
const tip = this._getTipElement();
-
this._element.setAttribute('aria-describedby', tip.getAttribute('id'));
-
const {
container
} = this._config;
-
if (!this._element.ownerDocument.documentElement.contains(this.tip)) {
container.append(tip);
- EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
- }
-
- if (this._popper) {
- this._popper.update();
- } else {
- this._popper = this._createPopper(tip);
+ EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));
}
+ this._popper = this._createPopper(tip);
+ tip.classList.add(CLASS_NAME_SHOW);
- tip.classList.add(CLASS_NAME_SHOW); // If this is a touch-enabled device we add extra
+ // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
- EventHandler__default.default.on(element, 'mouseover', index.noop);
+ EventHandler.on(element, 'mouseover', index_js.noop);
}
}
-
const complete = () => {
- EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));
-
+ EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN));
if (this._isHovered === false) {
this._leave();
}
-
this._isHovered = false;
};
-
this._queueCallback(complete, this.tip, this._isAnimated());
}
-
hide() {
if (!this._isShown()) {
return;
}
-
- const hideEvent = EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_HIDE));
-
+ const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE));
if (hideEvent.defaultPrevented) {
return;
}
-
const tip = this._getTipElement();
+ tip.classList.remove(CLASS_NAME_SHOW);
- tip.classList.remove(CLASS_NAME_SHOW); // If this is a touch-enabled device we remove the extra
+ // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
-
if ('ontouchstart' in document.documentElement) {
for (const element of [].concat(...document.body.children)) {
- EventHandler__default.default.off(element, 'mouseover', index.noop);
+ EventHandler.off(element, 'mouseover', index_js.noop);
}
}
-
this._activeTrigger[TRIGGER_CLICK] = false;
this._activeTrigger[TRIGGER_FOCUS] = false;
this._activeTrigger[TRIGGER_HOVER] = false;
@@ -298,135 +249,107 @@
if (this._isWithActiveTrigger()) {
return;
}
-
if (!this._isHovered) {
- tip.remove();
+ this._disposePopper();
}
-
this._element.removeAttribute('aria-describedby');
-
- EventHandler__default.default.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));
-
- this._disposePopper();
+ EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN));
};
-
this._queueCallback(complete, this.tip, this._isAnimated());
}
-
update() {
if (this._popper) {
this._popper.update();
}
- } // Protected
-
+ }
+ // Protected
_isWithContent() {
return Boolean(this._getTitle());
}
-
_getTipElement() {
if (!this.tip) {
this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());
}
-
return this.tip;
}
-
_createTipElement(content) {
- const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6
-
+ const tip = this._getTemplateFactory(content).toHtml();
+ // todo: remove this check on v6
if (!tip) {
return null;
}
-
- tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW); // todo: on v6 the following can be achieved with CSS only
-
+ tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW);
+ // todo: on v6 the following can be achieved with CSS only
tip.classList.add(`bs-${this.constructor.NAME}-auto`);
- const tipId = index.getUID(this.constructor.NAME).toString();
+ const tipId = index_js.getUID(this.constructor.NAME).toString();
tip.setAttribute('id', tipId);
-
if (this._isAnimated()) {
tip.classList.add(CLASS_NAME_FADE);
}
-
return tip;
}
-
setContent(content) {
this._newContent = content;
-
if (this._isShown()) {
this._disposePopper();
-
this.show();
}
}
-
_getTemplateFactory(content) {
if (this._templateFactory) {
this._templateFactory.changeContent(content);
} else {
- this._templateFactory = new TemplateFactory__default.default({ ...this._config,
+ this._templateFactory = new TemplateFactory({
+ ...this._config,
// the `content` var has to be after `this._config`
// to override config.content in case of popover
content,
extraClass: this._resolvePossibleFunction(this._config.customClass)
});
}
-
return this._templateFactory;
}
-
_getContentForTemplate() {
return {
[SELECTOR_TOOLTIP_INNER]: this._getTitle()
};
}
-
_getTitle() {
return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');
- } // Private
-
+ }
+ // Private
_initializeOnDelegatedTarget(event) {
return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());
}
-
_isAnimated() {
return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE);
}
-
_isShown() {
return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW);
}
-
_createPopper(tip) {
- const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement;
+ const placement = index_js.execute(this._config.placement, [this, tip, this._element]);
const attachment = AttachmentMap[placement.toUpperCase()];
return Popper__namespace.createPopper(this._element, tip, this._getPopperConfig(attachment));
}
-
_getOffset() {
const {
offset
} = this._config;
-
if (typeof offset === 'string') {
return offset.split(',').map(value => Number.parseInt(value, 10));
}
-
if (typeof offset === 'function') {
return popperData => offset(popperData, this._element);
}
-
return offset;
}
-
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg.call(this._element) : arg;
+ return index_js.execute(arg, [this._element]);
}
-
_getPopperConfig(attachment) {
const defaultBsPopperConfig = {
placement: attachment,
@@ -461,195 +384,160 @@
}
}]
};
- return { ...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ return {
+ ...defaultBsPopperConfig,
+ ...index_js.execute(this._config.popperConfig, [defaultBsPopperConfig])
};
}
-
_setListeners() {
const triggers = this._config.trigger.split(' ');
-
for (const trigger of triggers) {
if (trigger === 'click') {
- EventHandler__default.default.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {
+ EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context.toggle();
});
} else if (trigger !== TRIGGER_MANUAL) {
const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN);
const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT);
- EventHandler__default.default.on(this._element, eventIn, this._config.selector, event => {
+ EventHandler.on(this._element, eventIn, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
-
context._enter();
});
- EventHandler__default.default.on(this._element, eventOut, this._config.selector, event => {
+ EventHandler.on(this._element, eventOut, this._config.selector, event => {
const context = this._initializeOnDelegatedTarget(event);
-
context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);
-
context._leave();
});
}
}
-
this._hideModalHandler = () => {
if (this._element) {
this.hide();
}
};
-
- EventHandler__default.default.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
+ EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);
}
-
_fixTitle() {
const title = this._element.getAttribute('title');
-
if (!title) {
return;
}
-
if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {
this._element.setAttribute('aria-label', title);
}
-
this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility
-
-
this._element.removeAttribute('title');
}
-
_enter() {
if (this._isShown() || this._isHovered) {
this._isHovered = true;
return;
}
-
this._isHovered = true;
-
this._setTimeout(() => {
if (this._isHovered) {
this.show();
}
}, this._config.delay.show);
}
-
_leave() {
if (this._isWithActiveTrigger()) {
return;
}
-
this._isHovered = false;
-
this._setTimeout(() => {
if (!this._isHovered) {
this.hide();
}
}, this._config.delay.hide);
}
-
_setTimeout(handler, timeout) {
clearTimeout(this._timeout);
this._timeout = setTimeout(handler, timeout);
}
-
_isWithActiveTrigger() {
return Object.values(this._activeTrigger).includes(true);
}
-
_getConfig(config) {
- const dataAttributes = Manipulator__default.default.getDataAttributes(this._element);
-
+ const dataAttributes = Manipulator.getDataAttributes(this._element);
for (const dataAttribute of Object.keys(dataAttributes)) {
if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {
delete dataAttributes[dataAttribute];
}
}
-
- config = { ...dataAttributes,
+ config = {
+ ...dataAttributes,
...(typeof config === 'object' && config ? config : {})
};
config = this._mergeConfigObj(config);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
}
-
_configAfterMerge(config) {
- config.container = config.container === false ? document.body : index.getElement(config.container);
-
+ config.container = config.container === false ? document.body : index_js.getElement(config.container);
if (typeof config.delay === 'number') {
config.delay = {
show: config.delay,
hide: config.delay
};
}
-
if (typeof config.title === 'number') {
config.title = config.title.toString();
}
-
if (typeof config.content === 'number') {
config.content = config.content.toString();
}
-
return config;
}
-
_getDelegateConfig() {
const config = {};
-
- for (const key in this._config) {
- if (this.constructor.Default[key] !== this._config[key]) {
- config[key] = this._config[key];
+ for (const [key, value] of Object.entries(this._config)) {
+ if (this.constructor.Default[key] !== value) {
+ config[key] = value;
}
}
-
config.selector = false;
- config.trigger = 'manual'; // In the future can be replaced with:
+ config.trigger = 'manual';
+
+ // In the future can be replaced with:
// const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])
// `Object.fromEntries(keysWithDifferentValues)`
-
return config;
}
-
_disposePopper() {
if (this._popper) {
this._popper.destroy();
-
this._popper = null;
}
- } // Static
-
+ if (this.tip) {
+ this.tip.remove();
+ this.tip = null;
+ }
+ }
+ // Static
static jQueryInterface(config) {
return this.each(function () {
const data = Tooltip.getOrCreateInstance(this, config);
-
if (typeof config !== 'string') {
return;
}
-
if (typeof data[config] === 'undefined') {
throw new TypeError(`No method named "${config}"`);
}
-
data[config]();
});
}
-
}
+
/**
* jQuery
*/
-
- index.defineJQueryPlugin(Tooltip);
+ index_js.defineJQueryPlugin(Tooltip);
return Tooltip;
diff --git a/vendor/twbs/bootstrap/js/dist/tooltip.js.map b/vendor/twbs/bootstrap/js/dist/tooltip.js.map
index 5b47d6250..70feefb8d 100644
--- a/vendor/twbs/bootstrap/js/dist/tooltip.js.map
+++ b/vendor/twbs/bootstrap/js/dist/tooltip.js.map
@@ -1 +1 @@
-{"version":3,"file":"tooltip.js","sources":["../src/tooltip.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'\nimport { DefaultAllowlist } from './util/sanitizer'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport TemplateFactory from './util/template-factory'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this.tip) {\n this.tip.remove()\n }\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._popper = this._createPopper(tip)\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n tip.remove()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n\n this._disposePopper()\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n"],"names":["NAME","DISALLOWED_ATTRIBUTES","Set","CLASS_NAME_FADE","CLASS_NAME_MODAL","CLASS_NAME_SHOW","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","AttachmentMap","AUTO","TOP","RIGHT","isRTL","BOTTOM","LEFT","Default","allowList","DefaultAllowlist","animation","boundary","container","customClass","delay","fallbackPlacements","html","offset","placement","popperConfig","sanitize","sanitizeFn","selector","template","title","trigger","DefaultType","Tooltip","BaseComponent","constructor","element","config","Popper","TypeError","_isEnabled","_timeout","_isHovered","_activeTrigger","_popper","_templateFactory","_newContent","tip","_setListeners","_config","_fixTitle","enable","disable","toggleEnabled","toggle","click","_isShown","_leave","_enter","dispose","clearTimeout","EventHandler","off","_element","closest","_hideModalHandler","remove","getAttribute","setAttribute","_disposePopper","show","style","display","Error","_isWithContent","showEvent","eventName","shadowRoot","findShadowRoot","isInTheDom","ownerDocument","documentElement","contains","defaultPrevented","_getTipElement","append","update","_createPopper","classList","add","document","concat","body","children","on","noop","complete","_queueCallback","_isAnimated","hide","hideEvent","_isWithActiveTrigger","removeAttribute","Boolean","_getTitle","_createTipElement","_getContentForTemplate","content","_getTemplateFactory","toHtml","tipId","getUID","toString","setContent","changeContent","TemplateFactory","extraClass","_resolvePossibleFunction","_initializeOnDelegatedTarget","event","getOrCreateInstance","delegateTarget","_getDelegateConfig","call","attachment","toUpperCase","createPopper","_getPopperConfig","_getOffset","split","map","value","Number","parseInt","popperData","arg","defaultBsPopperConfig","modifiers","name","options","enabled","phase","fn","data","state","triggers","context","eventIn","eventOut","type","relatedTarget","textContent","trim","_setTimeout","handler","timeout","setTimeout","Object","values","includes","_getConfig","dataAttributes","Manipulator","getDataAttributes","dataAttribute","keys","has","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","getElement","key","destroy","jQueryInterface","each","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"tooltip.js","sources":["../src/tooltip.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'\nimport { DefaultAllowlist } from './util/sanitizer.js'\nimport EventHandler from './dom/event-handler.js'\nimport Manipulator from './dom/manipulator.js'\nimport BaseComponent from './base-component.js'\nimport TemplateFactory from './util/template-factory.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst EVENT_HIDE = 'hide'\nconst EVENT_HIDDEN = 'hidden'\nconst EVENT_SHOW = 'show'\nconst EVENT_SHOWN = 'shown'\nconst EVENT_INSERTED = 'inserted'\nconst EVENT_CLICK = 'click'\nconst EVENT_FOCUSIN = 'focusin'\nconst EVENT_FOCUSOUT = 'focusout'\nconst EVENT_MOUSEENTER = 'mouseenter'\nconst EVENT_MOUSELEAVE = 'mouseleave'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 0],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n title: '',\n trigger: 'hover focus'\n}\n\nconst DefaultType = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = null\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n this._newContent = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n\n if (!this._config.selector) {\n this._fixTitle()\n }\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle() {\n if (!this._isEnabled) {\n return\n }\n\n this._activeTrigger.click = !this._activeTrigger.click\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW))\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n // todo v6 remove this OR make it optional\n this._disposePopper()\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))\n }\n\n this._popper = this._createPopper(tip)\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN))\n\n if (this._isHovered === false) {\n this._leave()\n }\n\n this._isHovered = false\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE))\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = null // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n this._disposePopper()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n this._newContent = content\n if (this._isShown()) {\n this._disposePopper()\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title')\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element])\n const attachment = AttachmentMap[placement.toUpperCase()]\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element])\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context.toggle()\n })\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSEENTER) :\n this.constructor.eventName(EVENT_FOCUSIN)\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.eventName(EVENT_MOUSELEAVE) :\n this.constructor.eventName(EVENT_FOCUSOUT)\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n }\n\n _fixTitle() {\n const title = this._element.getAttribute('title')\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.setAttribute('data-bs-original-title', title) // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n\n config.selector = false\n config.trigger = 'manual'\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n\n if (this.tip) {\n this.tip.remove()\n this.tip = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n"],"names":["NAME","DISALLOWED_ATTRIBUTES","Set","CLASS_NAME_FADE","CLASS_NAME_MODAL","CLASS_NAME_SHOW","SELECTOR_TOOLTIP_INNER","SELECTOR_MODAL","EVENT_MODAL_HIDE","TRIGGER_HOVER","TRIGGER_FOCUS","TRIGGER_CLICK","TRIGGER_MANUAL","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_INSERTED","EVENT_CLICK","EVENT_FOCUSIN","EVENT_FOCUSOUT","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","AttachmentMap","AUTO","TOP","RIGHT","isRTL","BOTTOM","LEFT","Default","allowList","DefaultAllowlist","animation","boundary","container","customClass","delay","fallbackPlacements","html","offset","placement","popperConfig","sanitize","sanitizeFn","selector","template","title","trigger","DefaultType","Tooltip","BaseComponent","constructor","element","config","Popper","TypeError","_isEnabled","_timeout","_isHovered","_activeTrigger","_popper","_templateFactory","_newContent","tip","_setListeners","_config","_fixTitle","enable","disable","toggleEnabled","toggle","click","_isShown","_leave","_enter","dispose","clearTimeout","EventHandler","off","_element","closest","_hideModalHandler","getAttribute","setAttribute","_disposePopper","show","style","display","Error","_isWithContent","showEvent","eventName","shadowRoot","findShadowRoot","isInTheDom","ownerDocument","documentElement","contains","defaultPrevented","_getTipElement","append","_createPopper","classList","add","document","concat","body","children","on","noop","complete","_queueCallback","_isAnimated","hide","hideEvent","remove","_isWithActiveTrigger","removeAttribute","update","Boolean","_getTitle","_createTipElement","_getContentForTemplate","content","_getTemplateFactory","toHtml","tipId","getUID","toString","setContent","changeContent","TemplateFactory","extraClass","_resolvePossibleFunction","_initializeOnDelegatedTarget","event","getOrCreateInstance","delegateTarget","_getDelegateConfig","execute","attachment","toUpperCase","createPopper","_getPopperConfig","_getOffset","split","map","value","Number","parseInt","popperData","arg","defaultBsPopperConfig","modifiers","name","options","enabled","phase","fn","data","state","triggers","context","eventIn","eventOut","type","relatedTarget","textContent","trim","_setTimeout","handler","timeout","setTimeout","Object","values","includes","_getConfig","dataAttributes","Manipulator","getDataAttributes","dataAttribute","keys","has","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","getElement","key","entries","destroy","jQueryInterface","each","defineJQueryPlugin"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/util/backdrop.js b/vendor/twbs/bootstrap/js/dist/util/backdrop.js
index 00d50e3a0..bfdf250ab 100644
--- a/vendor/twbs/bootstrap/js/dist/util/backdrop.js
+++ b/vendor/twbs/bootstrap/js/dist/util/backdrop.js
@@ -1,25 +1,21 @@
/*!
- * Bootstrap backdrop.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap backdrop.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/event-handler'), require('./index'), require('./config')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/event-handler.js'), require('./index.js'), require('./config.js')) :
typeof define === 'function' && define.amd ? define(['../dom/event-handler', './index', './config'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Backdrop = factory(global.EventHandler, global.Index, global.Config));
-})(this, (function (EventHandler, index, Config) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
+})(this, (function (EventHandler, index_js, Config) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/backdrop.js
+ * Bootstrap (v5.3.0-alpha1): util/backdrop.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -35,8 +31,8 @@
isVisible: true,
// if false, we use the backdrop helper without adding any element to the dom
rootElement: 'body' // give the choice to place backdrop under different elements
-
};
+
const DefaultType = {
className: 'string',
clickCallback: '(function|null)',
@@ -44,120 +40,97 @@
isVisible: 'boolean',
rootElement: '(element|string)'
};
+
/**
* Class definition
*/
- class Backdrop extends Config__default.default {
+ class Backdrop extends Config {
constructor(config) {
super();
this._config = this._getConfig(config);
this._isAppended = false;
this._element = null;
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
show(callback) {
if (!this._config.isVisible) {
- index.execute(callback);
+ index_js.execute(callback);
return;
}
-
this._append();
-
const element = this._getElement();
-
if (this._config.isAnimated) {
- index.reflow(element);
+ index_js.reflow(element);
}
-
element.classList.add(CLASS_NAME_SHOW);
-
this._emulateAnimation(() => {
- index.execute(callback);
+ index_js.execute(callback);
});
}
-
hide(callback) {
if (!this._config.isVisible) {
- index.execute(callback);
+ index_js.execute(callback);
return;
}
-
this._getElement().classList.remove(CLASS_NAME_SHOW);
-
this._emulateAnimation(() => {
this.dispose();
- index.execute(callback);
+ index_js.execute(callback);
});
}
-
dispose() {
if (!this._isAppended) {
return;
}
-
- EventHandler__default.default.off(this._element, EVENT_MOUSEDOWN);
-
+ EventHandler.off(this._element, EVENT_MOUSEDOWN);
this._element.remove();
-
this._isAppended = false;
- } // Private
-
+ }
+ // Private
_getElement() {
if (!this._element) {
const backdrop = document.createElement('div');
backdrop.className = this._config.className;
-
if (this._config.isAnimated) {
backdrop.classList.add(CLASS_NAME_FADE);
}
-
this._element = backdrop;
}
-
return this._element;
}
-
_configAfterMerge(config) {
// use getElement() with the default "body" to get a fresh Element on each instantiation
- config.rootElement = index.getElement(config.rootElement);
+ config.rootElement = index_js.getElement(config.rootElement);
return config;
}
-
_append() {
if (this._isAppended) {
return;
}
-
const element = this._getElement();
-
this._config.rootElement.append(element);
-
- EventHandler__default.default.on(element, EVENT_MOUSEDOWN, () => {
- index.execute(this._config.clickCallback);
+ EventHandler.on(element, EVENT_MOUSEDOWN, () => {
+ index_js.execute(this._config.clickCallback);
});
this._isAppended = true;
}
-
_emulateAnimation(callback) {
- index.executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
+ index_js.executeAfterTransition(callback, this._getElement(), this._config.isAnimated);
}
-
}
return Backdrop;
diff --git a/vendor/twbs/bootstrap/js/dist/util/backdrop.js.map b/vendor/twbs/bootstrap/js/dist/util/backdrop.js.map
index 66eca3595..3d31b193a 100644
--- a/vendor/twbs/bootstrap/js/dist/util/backdrop.js.map
+++ b/vendor/twbs/bootstrap/js/dist/util/backdrop.js.map
@@ -1 +1 @@
-{"version":3,"file":"backdrop.js","sources":["../../src/util/backdrop.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { execute, executeAfterTransition, getElement, reflow } from './index'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n"],"names":["NAME","CLASS_NAME_FADE","CLASS_NAME_SHOW","EVENT_MOUSEDOWN","Default","className","clickCallback","isAnimated","isVisible","rootElement","DefaultType","Backdrop","Config","constructor","config","_config","_getConfig","_isAppended","_element","show","callback","execute","_append","element","_getElement","reflow","classList","add","_emulateAnimation","hide","remove","dispose","EventHandler","off","backdrop","document","createElement","_configAfterMerge","getElement","append","on","executeAfterTransition"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"backdrop.js","sources":["../../src/util/backdrop.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { execute, executeAfterTransition, getElement, reflow } from './index.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'backdrop'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME}`\n\nconst Default = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true, // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n}\n\nconst DefaultType = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isAppended = false\n this._element = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._append()\n\n const element = this._getElement()\n if (this._config.isAnimated) {\n reflow(element)\n }\n\n element.classList.add(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n execute(callback)\n })\n }\n\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback)\n return\n }\n\n this._getElement().classList.remove(CLASS_NAME_SHOW)\n\n this._emulateAnimation(() => {\n this.dispose()\n execute(callback)\n })\n }\n\n dispose() {\n if (!this._isAppended) {\n return\n }\n\n EventHandler.off(this._element, EVENT_MOUSEDOWN)\n\n this._element.remove()\n this._isAppended = false\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div')\n backdrop.className = this._config.className\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE)\n }\n\n this._element = backdrop\n }\n\n return this._element\n }\n\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement)\n return config\n }\n\n _append() {\n if (this._isAppended) {\n return\n }\n\n const element = this._getElement()\n this._config.rootElement.append(element)\n\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback)\n })\n\n this._isAppended = true\n }\n\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated)\n }\n}\n\nexport default Backdrop\n"],"names":["NAME","CLASS_NAME_FADE","CLASS_NAME_SHOW","EVENT_MOUSEDOWN","Default","className","clickCallback","isAnimated","isVisible","rootElement","DefaultType","Backdrop","Config","constructor","config","_config","_getConfig","_isAppended","_element","show","callback","execute","_append","element","_getElement","reflow","classList","add","_emulateAnimation","hide","remove","dispose","EventHandler","off","backdrop","document","createElement","_configAfterMerge","getElement","append","on","executeAfterTransition"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/util/component-functions.js b/vendor/twbs/bootstrap/js/dist/util/component-functions.js
index 24100305d..27e555d78 100644
--- a/vendor/twbs/bootstrap/js/dist/util/component-functions.js
+++ b/vendor/twbs/bootstrap/js/dist/util/component-functions.js
@@ -1,47 +1,41 @@
/*!
- * Bootstrap component-functions.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap component-functions.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('../dom/event-handler'), require('./index')) :
- typeof define === 'function' && define.amd ? define(['exports', '../dom/event-handler', './index'], factory) :
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ComponentFunctions = {}, global.EventHandler, global.Index));
-})(this, (function (exports, EventHandler, index) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('../dom/event-handler.js'), require('./index.js'), require('../dom/selector-engine.js')) :
+ typeof define === 'function' && define.amd ? define(['exports', '../dom/event-handler', './index', '../dom/selector-engine'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ComponentFunctions = {}, global.EventHandler, global.Index, global.SelectorEngine));
+})(this, (function (exports, EventHandler, index_js, SelectorEngine) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/component-functions.js
+ * Bootstrap (v5.3.0-alpha1): util/component-functions.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-
const enableDismissTrigger = (component, method = 'hide') => {
const clickEvent = `click.dismiss${component.EVENT_KEY}`;
const name = component.NAME;
- EventHandler__default.default.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
+ EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) {
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault();
}
-
- if (index.isDisabled(this)) {
+ if (index_js.isDisabled(this)) {
return;
}
+ const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
+ const instance = component.getOrCreateInstance(target);
- const target = index.getElementFromSelector(this) || this.closest(`.${name}`);
- const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
-
+ // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
instance[method]();
});
};
exports.enableDismissTrigger = enableDismissTrigger;
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
}));
//# sourceMappingURL=component-functions.js.map
diff --git a/vendor/twbs/bootstrap/js/dist/util/component-functions.js.map b/vendor/twbs/bootstrap/js/dist/util/component-functions.js.map
index 502a242e9..d21a1a882 100644
--- a/vendor/twbs/bootstrap/js/dist/util/component-functions.js.map
+++ b/vendor/twbs/bootstrap/js/dist/util/component-functions.js.map
@@ -1 +1 @@
-{"version":3,"file":"component-functions.js","sources":["../../src/util/component-functions.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport { getElementFromSelector, isDisabled } from './index'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n"],"names":["enableDismissTrigger","component","method","clickEvent","EVENT_KEY","name","NAME","EventHandler","on","document","event","includes","tagName","preventDefault","isDisabled","target","getElementFromSelector","closest","instance","getOrCreateInstance"],"mappings":";;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;AAKMA,QAAAA,oBAAoB,GAAG,CAACC,SAAD,EAAYC,MAAM,GAAG,MAArB,KAAgC;EAC3D,EAAA,MAAMC,UAAU,GAAI,CAAA,aAAA,EAAeF,SAAS,CAACG,SAAU,CAAvD,CAAA,CAAA;EACA,EAAA,MAAMC,IAAI,GAAGJ,SAAS,CAACK,IAAvB,CAAA;EAEAC,EAAAA,6BAAY,CAACC,EAAb,CAAgBC,QAAhB,EAA0BN,UAA1B,EAAuC,CAAA,kBAAA,EAAoBE,IAAK,CAAA,EAAA,CAAhE,EAAqE,UAAUK,KAAV,EAAiB;MACpF,IAAI,CAAC,GAAD,EAAM,MAAN,CAAA,CAAcC,QAAd,CAAuB,IAAA,CAAKC,OAA5B,CAAJ,EAA0C;EACxCF,MAAAA,KAAK,CAACG,cAAN,EAAA,CAAA;EACD,KAAA;;EAED,IAAA,IAAIC,gBAAU,CAAC,IAAD,CAAd,EAAsB;EACpB,MAAA,OAAA;EACD,KAAA;;EAED,IAAA,MAAMC,MAAM,GAAGC,4BAAsB,CAAC,IAAD,CAAtB,IAAgC,IAAA,CAAKC,OAAL,CAAc,CAAGZ,CAAAA,EAAAA,IAAK,EAAtB,CAA/C,CAAA;MACA,MAAMa,QAAQ,GAAGjB,SAAS,CAACkB,mBAAV,CAA8BJ,MAA9B,CAAjB,CAVoF;;MAapFG,QAAQ,CAAChB,MAAD,CAAR,EAAA,CAAA;KAbF,CAAA,CAAA;EAeD;;;;;;;;;;"} \ No newline at end of file
+{"version":3,"file":"component-functions.js","sources":["../../src/util/component-functions.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport { isDisabled } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`\n const name = component.NAME\n\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n if (isDisabled(this)) {\n return\n }\n\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)\n const instance = component.getOrCreateInstance(target)\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]()\n })\n}\n\nexport {\n enableDismissTrigger\n}\n"],"names":["enableDismissTrigger","component","method","clickEvent","EVENT_KEY","name","NAME","EventHandler","on","document","event","includes","tagName","preventDefault","isDisabled","target","SelectorEngine","getElementFromSelector","closest","instance","getOrCreateInstance"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;AAMMA,QAAAA,oBAAoB,GAAG,CAACC,SAAS,EAAEC,MAAM,GAAG,MAAM,KAAK;EAC3D,EAAA,MAAMC,UAAU,GAAI,CAAA,aAAA,EAAeF,SAAS,CAACG,SAAU,CAAC,CAAA,CAAA;EACxD,EAAA,MAAMC,IAAI,GAAGJ,SAAS,CAACK,IAAI,CAAA;EAE3BC,EAAAA,YAAY,CAACC,EAAE,CAACC,QAAQ,EAAEN,UAAU,EAAG,CAAA,kBAAA,EAAoBE,IAAK,CAAA,EAAA,CAAG,EAAE,UAAUK,KAAK,EAAE;EACpF,IAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAACC,QAAQ,CAAC,IAAI,CAACC,OAAO,CAAC,EAAE;QACxCF,KAAK,CAACG,cAAc,EAAE,CAAA;EACxB,KAAA;EAEA,IAAA,IAAIC,mBAAU,CAAC,IAAI,CAAC,EAAE;EACpB,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMC,MAAM,GAAGC,cAAc,CAACC,sBAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAACC,OAAO,CAAE,CAAGb,CAAAA,EAAAA,IAAK,EAAC,CAAC,CAAA;EACtF,IAAA,MAAMc,QAAQ,GAAGlB,SAAS,CAACmB,mBAAmB,CAACL,MAAM,CAAC,CAAA;;EAEtD;MACAI,QAAQ,CAACjB,MAAM,CAAC,EAAE,CAAA;EACpB,GAAC,CAAC,CAAA;EACJ;;;;;;;;;;"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/util/config.js b/vendor/twbs/bootstrap/js/dist/util/config.js
index f6c1087fc..be68ee44d 100644
--- a/vendor/twbs/bootstrap/js/dist/util/config.js
+++ b/vendor/twbs/bootstrap/js/dist/util/config.js
@@ -1,24 +1,21 @@
/*!
- * Bootstrap config.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap config.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./index'), require('../dom/manipulator')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./index.js'), require('../dom/manipulator.js')) :
typeof define === 'function' && define.amd ? define(['./index', '../dom/manipulator'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Config = factory(global.Index, global.Manipulator));
-})(this, (function (index, Manipulator) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
+})(this, (function (index_js, Manipulator) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/config.js
+ * Bootstrap (v5.3.0-alpha1): util/config.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Class definition
*/
@@ -28,50 +25,40 @@
static get Default() {
return {};
}
-
static get DefaultType() {
return {};
}
-
static get NAME() {
throw new Error('You have to implement the static method "NAME", for each component!');
}
-
_getConfig(config) {
config = this._mergeConfigObj(config);
config = this._configAfterMerge(config);
-
this._typeCheckConfig(config);
-
return config;
}
-
_configAfterMerge(config) {
return config;
}
-
_mergeConfigObj(config, element) {
- const jsonConfig = index.isElement(element) ? Manipulator__default.default.getDataAttribute(element, 'config') : {}; // try to parse
+ const jsonConfig = index_js.isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse
- return { ...this.constructor.Default,
+ return {
+ ...this.constructor.Default,
...(typeof jsonConfig === 'object' ? jsonConfig : {}),
- ...(index.isElement(element) ? Manipulator__default.default.getDataAttributes(element) : {}),
+ ...(index_js.isElement(element) ? Manipulator.getDataAttributes(element) : {}),
...(typeof config === 'object' ? config : {})
};
}
-
_typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
- for (const property of Object.keys(configTypes)) {
- const expectedTypes = configTypes[property];
+ for (const [property, expectedTypes] of Object.entries(configTypes)) {
const value = config[property];
- const valueType = index.isElement(value) ? 'element' : index.toType(value);
-
+ const valueType = index_js.isElement(value) ? 'element' : index_js.toType(value);
if (!new RegExp(expectedTypes).test(valueType)) {
throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`);
}
}
}
-
}
return Config;
diff --git a/vendor/twbs/bootstrap/js/dist/util/config.js.map b/vendor/twbs/bootstrap/js/dist/util/config.js.map
index 17e297ce6..30ad96f98 100644
--- a/vendor/twbs/bootstrap/js/dist/util/config.js.map
+++ b/vendor/twbs/bootstrap/js/dist/util/config.js.map
@@ -1 +1 @@
-{"version":3,"file":"config.js","sources":["../../src/util/config.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index'\nimport Manipulator from '../dom/manipulator'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const property of Object.keys(configTypes)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n"],"names":["Config","Default","DefaultType","NAME","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","element","jsonConfig","isElement","Manipulator","getDataAttribute","constructor","getDataAttributes","configTypes","property","Object","keys","expectedTypes","value","valueType","toType","RegExp","test","TypeError","toUpperCase"],"mappings":";;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EAKA;EACA;EACA;;EAEA,MAAMA,MAAN,CAAa;EACX;EACkB,EAAA,WAAPC,OAAO,GAAG;EACnB,IAAA,OAAO,EAAP,CAAA;EACD,GAAA;;EAEqB,EAAA,WAAXC,WAAW,GAAG;EACvB,IAAA,OAAO,EAAP,CAAA;EACD,GAAA;;EAEc,EAAA,WAAJC,IAAI,GAAG;EAChB,IAAA,MAAM,IAAIC,KAAJ,CAAU,qEAAV,CAAN,CAAA;EACD,GAAA;;IAEDC,UAAU,CAACC,MAAD,EAAS;EACjBA,IAAAA,MAAM,GAAG,IAAA,CAAKC,eAAL,CAAqBD,MAArB,CAAT,CAAA;EACAA,IAAAA,MAAM,GAAG,IAAA,CAAKE,iBAAL,CAAuBF,MAAvB,CAAT,CAAA;;MACA,IAAKG,CAAAA,gBAAL,CAAsBH,MAAtB,CAAA,CAAA;;EACA,IAAA,OAAOA,MAAP,CAAA;EACD,GAAA;;IAEDE,iBAAiB,CAACF,MAAD,EAAS;EACxB,IAAA,OAAOA,MAAP,CAAA;EACD,GAAA;;EAEDC,EAAAA,eAAe,CAACD,MAAD,EAASI,OAAT,EAAkB;EAC/B,IAAA,MAAMC,UAAU,GAAGC,eAAS,CAACF,OAAD,CAAT,GAAqBG,4BAAW,CAACC,gBAAZ,CAA6BJ,OAA7B,EAAsC,QAAtC,CAArB,GAAuE,EAA1F,CAD+B;;EAG/B,IAAA,OAAO,EACL,GAAG,IAAKK,CAAAA,WAAL,CAAiBd,OADf;QAEL,IAAI,OAAOU,UAAP,KAAsB,QAAtB,GAAiCA,UAAjC,GAA8C,EAAlD,CAFK;EAGL,MAAA,IAAIC,eAAS,CAACF,OAAD,CAAT,GAAqBG,4BAAW,CAACG,iBAAZ,CAA8BN,OAA9B,CAArB,GAA8D,EAAlE,CAHK;EAIL,MAAA,IAAI,OAAOJ,MAAP,KAAkB,QAAlB,GAA6BA,MAA7B,GAAsC,EAA1C,CAAA;OAJF,CAAA;EAMD,GAAA;;IAEDG,gBAAgB,CAACH,MAAD,EAASW,WAAW,GAAG,IAAKF,CAAAA,WAAL,CAAiBb,WAAxC,EAAqD;MACnE,KAAK,MAAMgB,QAAX,IAAuBC,MAAM,CAACC,IAAP,CAAYH,WAAZ,CAAvB,EAAiD;EAC/C,MAAA,MAAMI,aAAa,GAAGJ,WAAW,CAACC,QAAD,CAAjC,CAAA;EACA,MAAA,MAAMI,KAAK,GAAGhB,MAAM,CAACY,QAAD,CAApB,CAAA;EACA,MAAA,MAAMK,SAAS,GAAGX,eAAS,CAACU,KAAD,CAAT,GAAmB,SAAnB,GAA+BE,YAAM,CAACF,KAAD,CAAvD,CAAA;;QAEA,IAAI,CAAC,IAAIG,MAAJ,CAAWJ,aAAX,EAA0BK,IAA1B,CAA+BH,SAA/B,CAAL,EAAgD;EAC9C,QAAA,MAAM,IAAII,SAAJ,CACH,GAAE,IAAKZ,CAAAA,WAAL,CAAiBZ,IAAjB,CAAsByB,WAAtB,EAAoC,aAAYV,QAAS,CAAA,iBAAA,EAAmBK,SAAU,CAAuBF,qBAAAA,EAAAA,aAAc,IAD1H,CAAN,CAAA;EAGD,OAAA;EACF,KAAA;EACF,GAAA;;EAhDU;;;;;;;;"} \ No newline at end of file
+{"version":3,"file":"config.js","sources":["../../src/util/config.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isElement, toType } from './index.js'\nimport Manipulator from '../dom/manipulator.js'\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {}\n }\n\n static get DefaultType() {\n return {}\n }\n\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!')\n }\n\n _getConfig(config) {\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n return config\n }\n\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {} // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n }\n }\n\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property]\n const valueType = isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`\n )\n }\n }\n }\n}\n\nexport default Config\n"],"names":["Config","Default","DefaultType","NAME","Error","_getConfig","config","_mergeConfigObj","_configAfterMerge","_typeCheckConfig","element","jsonConfig","isElement","Manipulator","getDataAttribute","constructor","getDataAttributes","configTypes","property","expectedTypes","Object","entries","value","valueType","toType","RegExp","test","TypeError","toUpperCase"],"mappings":";;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;;EAKA;EACA;EACA;;EAEA,MAAMA,MAAM,CAAC;EACX;EACA,EAAA,WAAWC,OAAO,GAAG;EACnB,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;EAEA,EAAA,WAAWC,WAAW,GAAG;EACvB,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;EAEA,EAAA,WAAWC,IAAI,GAAG;EAChB,IAAA,MAAM,IAAIC,KAAK,CAAC,qEAAqE,CAAC,CAAA;EACxF,GAAA;IAEAC,UAAU,CAACC,MAAM,EAAE;EACjBA,IAAAA,MAAM,GAAG,IAAI,CAACC,eAAe,CAACD,MAAM,CAAC,CAAA;EACrCA,IAAAA,MAAM,GAAG,IAAI,CAACE,iBAAiB,CAACF,MAAM,CAAC,CAAA;EACvC,IAAA,IAAI,CAACG,gBAAgB,CAACH,MAAM,CAAC,CAAA;EAC7B,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;IAEAE,iBAAiB,CAACF,MAAM,EAAE;EACxB,IAAA,OAAOA,MAAM,CAAA;EACf,GAAA;EAEAC,EAAAA,eAAe,CAACD,MAAM,EAAEI,OAAO,EAAE;EAC/B,IAAA,MAAMC,UAAU,GAAGC,kBAAS,CAACF,OAAO,CAAC,GAAGG,WAAW,CAACC,gBAAgB,CAACJ,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;;MAE7F,OAAO;EACL,MAAA,GAAG,IAAI,CAACK,WAAW,CAACd,OAAO;QAC3B,IAAI,OAAOU,UAAU,KAAK,QAAQ,GAAGA,UAAU,GAAG,EAAE,CAAC;EACrD,MAAA,IAAIC,kBAAS,CAACF,OAAO,CAAC,GAAGG,WAAW,CAACG,iBAAiB,CAACN,OAAO,CAAC,GAAG,EAAE,CAAC;QACrE,IAAI,OAAOJ,MAAM,KAAK,QAAQ,GAAGA,MAAM,GAAG,EAAE,CAAA;OAC7C,CAAA;EACH,GAAA;IAEAG,gBAAgB,CAACH,MAAM,EAAEW,WAAW,GAAG,IAAI,CAACF,WAAW,CAACb,WAAW,EAAE;EACnE,IAAA,KAAK,MAAM,CAACgB,QAAQ,EAAEC,aAAa,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,WAAW,CAAC,EAAE;EACnE,MAAA,MAAMK,KAAK,GAAGhB,MAAM,CAACY,QAAQ,CAAC,CAAA;EAC9B,MAAA,MAAMK,SAAS,GAAGX,kBAAS,CAACU,KAAK,CAAC,GAAG,SAAS,GAAGE,eAAM,CAACF,KAAK,CAAC,CAAA;QAE9D,IAAI,CAAC,IAAIG,MAAM,CAACN,aAAa,CAAC,CAACO,IAAI,CAACH,SAAS,CAAC,EAAE;EAC9C,QAAA,MAAM,IAAII,SAAS,CAChB,GAAE,IAAI,CAACZ,WAAW,CAACZ,IAAI,CAACyB,WAAW,EAAG,aAAYV,QAAS,CAAA,iBAAA,EAAmBK,SAAU,CAAuBJ,qBAAAA,EAAAA,aAAc,IAAG,CAClI,CAAA;EACH,OAAA;EACF,KAAA;EACF,GAAA;EACF;;;;;;;;"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/util/focustrap.js b/vendor/twbs/bootstrap/js/dist/util/focustrap.js
index a12847d01..3742909e7 100644
--- a/vendor/twbs/bootstrap/js/dist/util/focustrap.js
+++ b/vendor/twbs/bootstrap/js/dist/util/focustrap.js
@@ -1,26 +1,21 @@
/*!
- * Bootstrap focustrap.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap focustrap.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/event-handler'), require('../dom/selector-engine'), require('./config')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/event-handler.js'), require('../dom/selector-engine.js'), require('./config.js')) :
typeof define === 'function' && define.amd ? define(['../dom/event-handler', '../dom/selector-engine', './config'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Focustrap = factory(global.EventHandler, global.SelectorEngine, global.Config));
})(this, (function (EventHandler, SelectorEngine, Config) { 'use strict';
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
-
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/focustrap.js
+ * Bootstrap (v5.3.0-alpha1): util/focustrap.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -36,75 +31,66 @@
const Default = {
autofocus: true,
trapElement: null // The element to trap focus inside of
-
};
+
const DefaultType = {
autofocus: 'boolean',
trapElement: 'element'
};
+
/**
* Class definition
*/
- class FocusTrap extends Config__default.default {
+ class FocusTrap extends Config {
constructor(config) {
super();
this._config = this._getConfig(config);
this._isActive = false;
this._lastTabNavDirection = null;
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
activate() {
if (this._isActive) {
return;
}
-
if (this._config.autofocus) {
this._config.trapElement.focus();
}
-
- EventHandler__default.default.off(document, EVENT_KEY); // guard against infinite focus loop
-
- EventHandler__default.default.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event));
- EventHandler__default.default.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
+ EventHandler.off(document, EVENT_KEY); // guard against infinite focus loop
+ EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event));
+ EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));
this._isActive = true;
}
-
deactivate() {
if (!this._isActive) {
return;
}
-
this._isActive = false;
- EventHandler__default.default.off(document, EVENT_KEY);
- } // Private
-
+ EventHandler.off(document, EVENT_KEY);
+ }
+ // Private
_handleFocusin(event) {
const {
trapElement
} = this._config;
-
if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {
return;
}
-
- const elements = SelectorEngine__default.default.focusableChildren(trapElement);
-
+ const elements = SelectorEngine.focusableChildren(trapElement);
if (elements.length === 0) {
trapElement.focus();
} else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {
@@ -113,15 +99,12 @@
elements[0].focus();
}
}
-
_handleKeydown(event) {
if (event.key !== TAB_KEY) {
return;
}
-
this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
}
-
}
return FocusTrap;
diff --git a/vendor/twbs/bootstrap/js/dist/util/focustrap.js.map b/vendor/twbs/bootstrap/js/dist/util/focustrap.js.map
index f571e2bd1..0898f0831 100644
--- a/vendor/twbs/bootstrap/js/dist/util/focustrap.js.map
+++ b/vendor/twbs/bootstrap/js/dist/util/focustrap.js.map
@@ -1 +1 @@
-{"version":3,"file":"focustrap.js","sources":["../../src/util/focustrap.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_KEY","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","Default","autofocus","trapElement","DefaultType","FocusTrap","Config","constructor","config","_config","_getConfig","_isActive","_lastTabNavDirection","activate","focus","EventHandler","off","document","on","event","_handleFocusin","_handleKeydown","deactivate","target","contains","elements","SelectorEngine","focusableChildren","length","key","shiftKey"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"focustrap.js","sources":["../../src/util/focustrap.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport EventHandler from '../dom/event-handler.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'focustrap'\nconst DATA_KEY = 'bs.focustrap'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY}`\n\nconst TAB_KEY = 'Tab'\nconst TAB_NAV_FORWARD = 'forward'\nconst TAB_NAV_BACKWARD = 'backward'\n\nconst Default = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n}\n\nconst DefaultType = {\n autofocus: 'boolean',\n trapElement: 'element'\n}\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n this._isActive = false\n this._lastTabNavDirection = null\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return\n }\n\n if (this._config.autofocus) {\n this._config.trapElement.focus()\n }\n\n EventHandler.off(document, EVENT_KEY) // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN, event => this._handleFocusin(event))\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event))\n\n this._isActive = true\n }\n\n deactivate() {\n if (!this._isActive) {\n return\n }\n\n this._isActive = false\n EventHandler.off(document, EVENT_KEY)\n }\n\n // Private\n _handleFocusin(event) {\n const { trapElement } = this._config\n\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return\n }\n\n const elements = SelectorEngine.focusableChildren(trapElement)\n\n if (elements.length === 0) {\n trapElement.focus()\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus()\n } else {\n elements[0].focus()\n }\n }\n\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return\n }\n\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD\n }\n}\n\nexport default FocusTrap\n"],"names":["NAME","DATA_KEY","EVENT_KEY","EVENT_FOCUSIN","EVENT_KEYDOWN_TAB","TAB_KEY","TAB_NAV_FORWARD","TAB_NAV_BACKWARD","Default","autofocus","trapElement","DefaultType","FocusTrap","Config","constructor","config","_config","_getConfig","_isActive","_lastTabNavDirection","activate","focus","EventHandler","off","document","on","event","_handleFocusin","_handleKeydown","deactivate","target","contains","elements","SelectorEngine","focusableChildren","length","key","shiftKey"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/util/index.js b/vendor/twbs/bootstrap/js/dist/util/index.js
index ab313079a..33c126df1 100644
--- a/vendor/twbs/bootstrap/js/dist/util/index.js
+++ b/vendor/twbs/bootstrap/js/dist/util/index.js
@@ -1,5 +1,5 @@
/*!
- * Bootstrap index.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap index.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -11,193 +11,146 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/index.js
+ * Bootstrap (v5.3.0-alpha1): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
const MAX_UID = 1000000;
const MILLISECONDS_MULTIPLIER = 1000;
- const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp)
+ const TRANSITION_END = 'transitionend';
+
+ /**
+ * Properly escape IDs selectors to handle weird IDs
+ * @param {string} selector
+ * @returns {string}
+ */
+ const parseSelector = selector => {
+ if (selector && window.CSS && window.CSS.escape) {
+ // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
+ selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
+ }
+ return selector;
+ };
+ // Shout-out Angus Croll (https://goo.gl/pxwQGp)
const toType = object => {
if (object === null || object === undefined) {
return `${object}`;
}
-
return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase();
};
+
/**
* Public Util API
*/
-
const getUID = prefix => {
do {
prefix += Math.floor(Math.random() * MAX_UID);
} while (document.getElementById(prefix));
-
return prefix;
};
-
- const getSelector = element => {
- let selector = element.getAttribute('data-bs-target');
-
- if (!selector || selector === '#') {
- let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
- // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
- // `document.querySelector` will rightfully complain it is invalid.
- // See https://github.com/twbs/bootstrap/issues/32273
-
- if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {
- return null;
- } // Just in case some CMS puts out a full URL with the anchor appended
-
-
- if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
- hrefAttribute = `#${hrefAttribute.split('#')[1]}`;
- }
-
- selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null;
- }
-
- return selector;
- };
-
- const getSelectorFromElement = element => {
- const selector = getSelector(element);
-
- if (selector) {
- return document.querySelector(selector) ? selector : null;
- }
-
- return null;
- };
-
- const getElementFromSelector = element => {
- const selector = getSelector(element);
- return selector ? document.querySelector(selector) : null;
- };
-
const getTransitionDurationFromElement = element => {
if (!element) {
return 0;
- } // Get transition-duration of the element
-
+ }
+ // Get transition-duration of the element
let {
transitionDuration,
transitionDelay
} = window.getComputedStyle(element);
const floatTransitionDuration = Number.parseFloat(transitionDuration);
- const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
+ const floatTransitionDelay = Number.parseFloat(transitionDelay);
+ // Return 0 if element or transition duration is not found
if (!floatTransitionDuration && !floatTransitionDelay) {
return 0;
- } // If multiple durations are defined, take the first
-
+ }
+ // If multiple durations are defined, take the first
transitionDuration = transitionDuration.split(',')[0];
transitionDelay = transitionDelay.split(',')[0];
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
};
-
const triggerTransitionEnd = element => {
element.dispatchEvent(new Event(TRANSITION_END));
};
-
const isElement = object => {
if (!object || typeof object !== 'object') {
return false;
}
-
if (typeof object.jquery !== 'undefined') {
object = object[0];
}
-
return typeof object.nodeType !== 'undefined';
};
-
const getElement = object => {
// it's a jQuery object or a node element
if (isElement(object)) {
return object.jquery ? object[0] : object;
}
-
if (typeof object === 'string' && object.length > 0) {
- return document.querySelector(object);
+ return document.querySelector(parseSelector(object));
}
-
return null;
};
-
const isVisible = element => {
if (!isElement(element) || element.getClientRects().length === 0) {
return false;
}
-
- const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed
-
+ const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
+ // Handle `details` element as its content may falsie appear visible when it is closed
const closedDetails = element.closest('details:not([open])');
-
if (!closedDetails) {
return elementIsVisible;
}
-
if (closedDetails !== element) {
const summary = element.closest('summary');
-
if (summary && summary.parentNode !== closedDetails) {
return false;
}
-
if (summary === null) {
return false;
}
}
-
return elementIsVisible;
};
-
const isDisabled = element => {
if (!element || element.nodeType !== Node.ELEMENT_NODE) {
return true;
}
-
if (element.classList.contains('disabled')) {
return true;
}
-
if (typeof element.disabled !== 'undefined') {
return element.disabled;
}
-
return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
};
-
const findShadowRoot = element => {
if (!document.documentElement.attachShadow) {
return null;
- } // Can find the shadow root otherwise it'll return the document
-
+ }
+ // Can find the shadow root otherwise it'll return the document
if (typeof element.getRootNode === 'function') {
const root = element.getRootNode();
return root instanceof ShadowRoot ? root : null;
}
-
if (element instanceof ShadowRoot) {
return element;
- } // when we don't find a shadow root
-
+ }
+ // when we don't find a shadow root
if (!element.parentNode) {
return null;
}
-
return findShadowRoot(element.parentNode);
};
-
const noop = () => {};
+
/**
* Trick to restart an element's animation
*
@@ -206,8 +159,6 @@
*
* @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation
*/
-
-
const reflow = element => {
element.offsetHeight; // eslint-disable-line no-unused-expressions
};
@@ -216,12 +167,9 @@
if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
return window.jQuery;
}
-
return null;
};
-
const DOMContentLoadedCallbacks = [];
-
const onDOMContentLoaded = callback => {
if (document.readyState === 'loading') {
// add listener on the first call when the document is in loading state
@@ -232,26 +180,21 @@
}
});
}
-
DOMContentLoadedCallbacks.push(callback);
} else {
callback();
}
};
-
const isRTL = () => document.documentElement.dir === 'rtl';
-
const defineJQueryPlugin = plugin => {
onDOMContentLoaded(() => {
const $ = getjQuery();
/* istanbul ignore if */
-
if ($) {
const name = plugin.NAME;
const JQUERY_NO_CONFLICT = $.fn[name];
$.fn[name] = plugin.jQueryInterface;
$.fn[name].Constructor = plugin;
-
$.fn[name].noConflict = () => {
$.fn[name] = JQUERY_NO_CONFLICT;
return plugin.jQueryInterface;
@@ -259,35 +202,27 @@
}
});
};
-
- const execute = callback => {
- if (typeof callback === 'function') {
- callback();
- }
+ const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+ return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;
};
-
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
if (!waitForTransition) {
execute(callback);
return;
}
-
const durationPadding = 5;
const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
let called = false;
-
const handler = ({
target
}) => {
if (target !== transitionElement) {
return;
}
-
called = true;
transitionElement.removeEventListener(TRANSITION_END, handler);
execute(callback);
};
-
transitionElement.addEventListener(TRANSITION_END, handler);
setTimeout(() => {
if (!called) {
@@ -295,6 +230,7 @@
}
}, emulatedDuration);
};
+
/**
* Return the previous/next element of a list.
*
@@ -304,23 +240,19 @@
* @param isCycleAllowed
* @return {Element|elem} The proper element
*/
-
-
const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {
const listLength = list.length;
- let index = list.indexOf(activeElement); // if the element does not exist in the list return an element
- // depending on the direction and if cycle is allowed
+ let index = list.indexOf(activeElement);
+ // if the element does not exist in the list return an element
+ // depending on the direction and if cycle is allowed
if (index === -1) {
return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];
}
-
index += shouldGetNext ? 1 : -1;
-
if (isCycleAllowed) {
index = (index + listLength) % listLength;
}
-
return list[Math.max(0, Math.min(index, listLength - 1))];
};
@@ -329,9 +261,7 @@
exports.executeAfterTransition = executeAfterTransition;
exports.findShadowRoot = findShadowRoot;
exports.getElement = getElement;
- exports.getElementFromSelector = getElementFromSelector;
exports.getNextActiveElement = getNextActiveElement;
- exports.getSelectorFromElement = getSelectorFromElement;
exports.getTransitionDurationFromElement = getTransitionDurationFromElement;
exports.getUID = getUID;
exports.getjQuery = getjQuery;
@@ -341,11 +271,12 @@
exports.isVisible = isVisible;
exports.noop = noop;
exports.onDOMContentLoaded = onDOMContentLoaded;
+ exports.parseSelector = parseSelector;
exports.reflow = reflow;
exports.toType = toType;
exports.triggerTransitionEnd = triggerTransitionEnd;
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
}));
//# sourceMappingURL=index.js.map
diff --git a/vendor/twbs/bootstrap/js/dist/util/index.js.map b/vendor/twbs/bootstrap/js/dist/util/index.js.map
index b195ebfd0..4f1044ece 100644
--- a/vendor/twbs/bootstrap/js/dist/util/index.js.map
+++ b/vendor/twbs/bootstrap/js/dist/util/index.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.js","sources":["../../src/util/index.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`\n }\n\n selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(object)\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = callback => {\n if (typeof callback === 'function') {\n callback()\n }\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getElementFromSelector,\n getjQuery,\n getNextActiveElement,\n getSelectorFromElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n reflow,\n triggerTransitionEnd,\n toType\n}\n"],"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","toType","object","undefined","Object","prototype","toString","call","match","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getSelector","element","selector","getAttribute","hrefAttribute","includes","startsWith","split","trim","getSelectorFromElement","querySelector","getElementFromSelector","getTransitionDurationFromElement","transitionDuration","transitionDelay","window","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"index.js","sources":["../../src/util/index.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1_000_000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`)\n }\n\n return selector\n}\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`\n }\n\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false\n }\n\n if (typeof object.jquery !== 'undefined') {\n object = object[0]\n }\n\n return typeof object.nodeType !== 'undefined'\n}\n\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object\n }\n\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object))\n }\n\n return null\n}\n\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false\n }\n\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])')\n\n if (!closedDetails) {\n return elementIsVisible\n }\n\n if (closedDetails !== element) {\n const summary = element.closest('summary')\n if (summary && summary.parentNode !== closedDetails) {\n return false\n }\n\n if (summary === null) {\n return false\n }\n }\n\n return elementIsVisible\n}\n\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true\n }\n\n if (element.classList.contains('disabled')) {\n return true\n }\n\n if (typeof element.disabled !== 'undefined') {\n return element.disabled\n }\n\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => {}\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight // eslint-disable-line no-unused-expressions\n}\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery\n }\n\n return null\n}\n\nconst DOMContentLoadedCallbacks = []\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback()\n }\n })\n }\n\n DOMContentLoadedCallbacks.push(callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = () => document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue\n}\n\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback)\n return\n }\n\n const durationPadding = 5\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding\n\n let called = false\n\n const handler = ({ target }) => {\n if (target !== transitionElement) {\n return\n }\n\n called = true\n transitionElement.removeEventListener(TRANSITION_END, handler)\n execute(callback)\n }\n\n transitionElement.addEventListener(TRANSITION_END, handler)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement)\n }\n }, emulatedDuration)\n}\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length\n let index = list.indexOf(activeElement)\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]\n }\n\n index += shouldGetNext ? 1 : -1\n\n if (isCycleAllowed) {\n index = (index + listLength) % listLength\n }\n\n return list[Math.max(0, Math.min(index, listLength - 1))]\n}\n\nexport {\n defineJQueryPlugin,\n execute,\n executeAfterTransition,\n findShadowRoot,\n getElement,\n getjQuery,\n getNextActiveElement,\n getTransitionDurationFromElement,\n getUID,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop,\n onDOMContentLoaded,\n parseSelector,\n reflow,\n triggerTransitionEnd,\n toType\n}\n"],"names":["MAX_UID","MILLISECONDS_MULTIPLIER","TRANSITION_END","parseSelector","selector","window","CSS","escape","replace","match","id","toType","object","undefined","Object","prototype","toString","call","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getTransitionDurationFromElement","element","transitionDuration","transitionDelay","getComputedStyle","floatTransitionDuration","Number","parseFloat","floatTransitionDelay","split","triggerTransitionEnd","dispatchEvent","Event","isElement","jquery","nodeType","getElement","length","querySelector","isVisible","getClientRects","elementIsVisible","getPropertyValue","closedDetails","closest","summary","parentNode","isDisabled","Node","ELEMENT_NODE","classList","contains","disabled","hasAttribute","getAttribute","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","noop","reflow","offsetHeight","getjQuery","jQuery","body","DOMContentLoadedCallbacks","onDOMContentLoaded","callback","readyState","addEventListener","push","isRTL","dir","defineJQueryPlugin","plugin","$","name","NAME","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","execute","possibleCallback","args","defaultValue","executeAfterTransition","transitionElement","waitForTransition","durationPadding","emulatedDuration","called","handler","target","removeEventListener","setTimeout","getNextActiveElement","list","activeElement","shouldGetNext","isCycleAllowed","listLength","index","indexOf","max","min"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/util/sanitizer.js b/vendor/twbs/bootstrap/js/dist/util/sanitizer.js
index 1a3d38dc3..3e1a3014b 100644
--- a/vendor/twbs/bootstrap/js/dist/util/sanitizer.js
+++ b/vendor/twbs/bootstrap/js/dist/util/sanitizer.js
@@ -1,5 +1,5 @@
/*!
- * Bootstrap sanitizer.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap sanitizer.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
@@ -11,42 +11,39 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/sanitizer.js
+ * Bootstrap (v5.3.0-alpha1): util/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);
const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+
/**
* A pattern that recognizes a commonly useful subset of URLs that are safe.
*
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
-
const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
+
/**
* A pattern that matches safe data URLs. Only matches image, video and audio types.
*
* Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
*/
-
const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
-
const allowedAttribute = (attribute, allowedAttributeList) => {
const attributeName = attribute.nodeName.toLowerCase();
-
if (allowedAttributeList.includes(attributeName)) {
if (uriAttributes.has(attributeName)) {
return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
}
-
return true;
- } // Check if a regular expression validates the attribute.
-
+ }
+ // Check if a regular expression validates the attribute.
return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));
};
-
const DefaultAllowlist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
@@ -84,40 +81,33 @@
if (!unsafeHtml.length) {
return unsafeHtml;
}
-
if (sanitizeFunction && typeof sanitizeFunction === 'function') {
return sanitizeFunction(unsafeHtml);
}
-
const domParser = new window.DOMParser();
const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
const elements = [].concat(...createdDocument.body.querySelectorAll('*'));
-
for (const element of elements) {
const elementName = element.nodeName.toLowerCase();
-
if (!Object.keys(allowList).includes(elementName)) {
element.remove();
continue;
}
-
const attributeList = [].concat(...element.attributes);
const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);
-
for (const attribute of attributeList) {
if (!allowedAttribute(attribute, allowedAttributes)) {
element.removeAttribute(attribute.nodeName);
}
}
}
-
return createdDocument.body.innerHTML;
}
exports.DefaultAllowlist = DefaultAllowlist;
exports.sanitizeHtml = sanitizeHtml;
- Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
}));
//# sourceMappingURL=sanitizer.js.map
diff --git a/vendor/twbs/bootstrap/js/dist/util/sanitizer.js.map b/vendor/twbs/bootstrap/js/dist/util/sanitizer.js.map
index 5f93b966f..fea24c4af 100644
--- a/vendor/twbs/bootstrap/js/dist/util/sanitizer.js.map
+++ b/vendor/twbs/bootstrap/js/dist/util/sanitizer.js.map
@@ -1 +1 @@
-{"version":3,"file":"sanitizer.js","sources":["../../src/util/sanitizer.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n"],"names":["uriAttributes","Set","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","toLowerCase","includes","has","Boolean","test","nodeValue","filter","attributeRegex","RegExp","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","length","domParser","window","DOMParser","createdDocument","parseFromString","elements","concat","body","querySelectorAll","element","elementName","Object","keys","remove","attributeList","attributes","allowedAttributes","removeAttribute","innerHTML"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"sanitizer.js","sources":["../../src/util/sanitizer.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttributes = new Set([\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n])\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase()\n\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue))\n }\n\n return true\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp)\n .some(regex => regex.test(attributeName))\n}\n\nexport const DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\nexport function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml\n }\n\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'))\n\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase()\n\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove()\n\n continue\n }\n\n const attributeList = [].concat(...element.attributes)\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || [])\n\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n}\n"],"names":["uriAttributes","Set","ARIA_ATTRIBUTE_PATTERN","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attribute","allowedAttributeList","attributeName","nodeName","toLowerCase","includes","has","Boolean","test","nodeValue","filter","attributeRegex","RegExp","some","regex","DefaultAllowlist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","i","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","sanitizeHtml","unsafeHtml","allowList","sanitizeFunction","length","domParser","window","DOMParser","createdDocument","parseFromString","elements","concat","body","querySelectorAll","element","elementName","Object","keys","remove","attributeList","attributes","allowedAttributes","removeAttribute","innerHTML"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/util/scrollbar.js b/vendor/twbs/bootstrap/js/dist/util/scrollbar.js
index 35f9d0b28..72db28a08 100644
--- a/vendor/twbs/bootstrap/js/dist/util/scrollbar.js
+++ b/vendor/twbs/bootstrap/js/dist/util/scrollbar.js
@@ -1,25 +1,21 @@
/*!
- * Bootstrap scrollbar.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap scrollbar.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/selector-engine'), require('../dom/manipulator'), require('./index')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('../dom/selector-engine.js'), require('../dom/manipulator.js'), require('./index.js')) :
typeof define === 'function' && define.amd ? define(['../dom/selector-engine', '../dom/manipulator', './index'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Scrollbar = factory(global.SelectorEngine, global.Manipulator, global.Index));
-})(this, (function (SelectorEngine, Manipulator, index) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
+})(this, (function (SelectorEngine, Manipulator, index_js) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/scrollBar.js
+ * Bootstrap (v5.3.0-alpha1): util/scrollBar.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -28,6 +24,7 @@
const SELECTOR_STICKY_CONTENT = '.sticky-top';
const PROPERTY_PADDING = 'padding-right';
const PROPERTY_MARGIN = 'margin-right';
+
/**
* Class definition
*/
@@ -35,102 +32,78 @@
class ScrollBarHelper {
constructor() {
this._element = document.body;
- } // Public
-
+ }
+ // Public
getWidth() {
// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes
const documentWidth = document.documentElement.clientWidth;
return Math.abs(window.innerWidth - documentWidth);
}
-
hide() {
const width = this.getWidth();
-
- this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width
-
-
- this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
-
-
+ this._disableOverFlow();
+ // give padding to element to balance the hidden scrollbar width
+ this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
+ // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth
this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);
-
this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);
}
-
reset() {
this._resetElementAttributes(this._element, 'overflow');
-
this._resetElementAttributes(this._element, PROPERTY_PADDING);
-
this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
-
this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
}
-
isOverflowing() {
return this.getWidth() > 0;
- } // Private
-
+ }
+ // Private
_disableOverFlow() {
this._saveInitialAttribute(this._element, 'overflow');
-
this._element.style.overflow = 'hidden';
}
-
_setElementAttributes(selector, styleProperty, callback) {
const scrollbarWidth = this.getWidth();
-
const manipulationCallBack = element => {
if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
return;
}
-
this._saveInitialAttribute(element, styleProperty);
-
const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
};
-
this._applyManipulationCallback(selector, manipulationCallBack);
}
-
_saveInitialAttribute(element, styleProperty) {
const actualValue = element.style.getPropertyValue(styleProperty);
-
if (actualValue) {
- Manipulator__default.default.setDataAttribute(element, styleProperty, actualValue);
+ Manipulator.setDataAttribute(element, styleProperty, actualValue);
}
}
-
_resetElementAttributes(selector, styleProperty) {
const manipulationCallBack = element => {
- const value = Manipulator__default.default.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero
-
+ const value = Manipulator.getDataAttribute(element, styleProperty);
+ // We only want to remove the property if the value is `null`; the value can also be zero
if (value === null) {
element.style.removeProperty(styleProperty);
return;
}
-
- Manipulator__default.default.removeDataAttribute(element, styleProperty);
+ Manipulator.removeDataAttribute(element, styleProperty);
element.style.setProperty(styleProperty, value);
};
-
this._applyManipulationCallback(selector, manipulationCallBack);
}
-
_applyManipulationCallback(selector, callBack) {
- if (index.isElement(selector)) {
+ if (index_js.isElement(selector)) {
callBack(selector);
return;
}
-
- for (const sel of SelectorEngine__default.default.find(selector, this._element)) {
+ for (const sel of SelectorEngine.find(selector, this._element)) {
callBack(sel);
}
}
-
}
return ScrollBarHelper;
diff --git a/vendor/twbs/bootstrap/js/dist/util/scrollbar.js.map b/vendor/twbs/bootstrap/js/dist/util/scrollbar.js.map
index fd2e02978..b663d54a5 100644
--- a/vendor/twbs/bootstrap/js/dist/util/scrollbar.js.map
+++ b/vendor/twbs/bootstrap/js/dist/util/scrollbar.js.map
@@ -1 +1 @@
-{"version":3,"file":"scrollbar.js","sources":["../../src/util/scrollbar.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine'\nimport Manipulator from '../dom/manipulator'\nimport { isElement } from './index'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n"],"names":["SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","constructor","_element","document","body","getWidth","documentWidth","documentElement","clientWidth","Math","abs","window","innerWidth","hide","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","style","overflow","selector","styleProperty","callback","scrollbarWidth","manipulationCallBack","element","getComputedStyle","getPropertyValue","setProperty","Number","parseFloat","_applyManipulationCallback","actualValue","Manipulator","setDataAttribute","value","getDataAttribute","removeProperty","removeDataAttribute","callBack","isElement","sel","SelectorEngine","find"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"scrollbar.js","sources":["../../src/util/scrollbar.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Manipulator from '../dom/manipulator.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n"],"names":["SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","constructor","_element","document","body","getWidth","documentWidth","documentElement","clientWidth","Math","abs","window","innerWidth","hide","width","_disableOverFlow","_setElementAttributes","calculatedValue","reset","_resetElementAttributes","isOverflowing","_saveInitialAttribute","style","overflow","selector","styleProperty","callback","scrollbarWidth","manipulationCallBack","element","getComputedStyle","getPropertyValue","setProperty","Number","parseFloat","_applyManipulationCallback","actualValue","Manipulator","setDataAttribute","value","getDataAttribute","removeProperty","removeDataAttribute","callBack","isElement","sel","SelectorEngine","find"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/util/swipe.js b/vendor/twbs/bootstrap/js/dist/util/swipe.js
index 9808601a2..7d4da7e5b 100644
--- a/vendor/twbs/bootstrap/js/dist/util/swipe.js
+++ b/vendor/twbs/bootstrap/js/dist/util/swipe.js
@@ -1,25 +1,21 @@
/*!
- * Bootstrap swipe.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap swipe.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./config'), require('../dom/event-handler'), require('./index')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./config.js'), require('../dom/event-handler.js'), require('./index.js')) :
typeof define === 'function' && define.amd ? define(['./config', '../dom/event-handler', './index'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Swipe = factory(global.Config, global.EventHandler, global.Index));
-})(this, (function (Config, EventHandler, index) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
- const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
+})(this, (function (Config, EventHandler, index_js) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/swipe.js
+ * Bootstrap (v5.3.0-alpha1): util/swipe.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
@@ -45,109 +41,91 @@
leftCallback: '(function|null)',
rightCallback: '(function|null)'
};
+
/**
* Class definition
*/
- class Swipe extends Config__default.default {
+ class Swipe extends Config {
constructor(element, config) {
super();
this._element = element;
-
if (!element || !Swipe.isSupported()) {
return;
}
-
this._config = this._getConfig(config);
this._deltaX = 0;
this._supportPointerEvents = Boolean(window.PointerEvent);
-
this._initEvents();
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
dispose() {
- EventHandler__default.default.off(this._element, EVENT_KEY);
- } // Private
-
+ EventHandler.off(this._element, EVENT_KEY);
+ }
+ // Private
_start(event) {
if (!this._supportPointerEvents) {
this._deltaX = event.touches[0].clientX;
return;
}
-
if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX;
}
}
-
_end(event) {
if (this._eventIsPointerPenTouch(event)) {
this._deltaX = event.clientX - this._deltaX;
}
-
this._handleSwipe();
-
- index.execute(this._config.endCallback);
+ index_js.execute(this._config.endCallback);
}
-
_move(event) {
this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;
}
-
_handleSwipe() {
const absDeltaX = Math.abs(this._deltaX);
-
if (absDeltaX <= SWIPE_THRESHOLD) {
return;
}
-
const direction = absDeltaX / this._deltaX;
this._deltaX = 0;
-
if (!direction) {
return;
}
-
- index.execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
+ index_js.execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);
}
-
_initEvents() {
if (this._supportPointerEvents) {
- EventHandler__default.default.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
- EventHandler__default.default.on(this._element, EVENT_POINTERUP, event => this._end(event));
-
+ EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));
+ EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));
this._element.classList.add(CLASS_NAME_POINTER_EVENT);
} else {
- EventHandler__default.default.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
- EventHandler__default.default.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));
- EventHandler__default.default.on(this._element, EVENT_TOUCHEND, event => this._end(event));
+ EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));
+ EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));
+ EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));
}
}
-
_eventIsPointerPenTouch(event) {
return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);
- } // Static
-
+ }
+ // Static
static isSupported() {
return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
}
-
}
return Swipe;
diff --git a/vendor/twbs/bootstrap/js/dist/util/swipe.js.map b/vendor/twbs/bootstrap/js/dist/util/swipe.js.map
index 34e14a230..387f9361a 100644
--- a/vendor/twbs/bootstrap/js/dist/util/swipe.js.map
+++ b/vendor/twbs/bootstrap/js/dist/util/swipe.js.map
@@ -1 +1 @@
-{"version":3,"file":"swipe.js","sources":["../../src/util/swipe.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config'\nimport EventHandler from '../dom/event-handler'\nimport { execute } from './index'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n"],"names":["NAME","EVENT_KEY","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","Default","endCallback","leftCallback","rightCallback","DefaultType","Swipe","Config","constructor","element","config","_element","isSupported","_config","_getConfig","_deltaX","_supportPointerEvents","Boolean","window","PointerEvent","_initEvents","dispose","EventHandler","off","_start","event","touches","clientX","_eventIsPointerPenTouch","_end","_handleSwipe","execute","_move","length","absDeltaX","Math","abs","direction","on","classList","add","pointerType","document","documentElement","navigator","maxTouchPoints"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"swipe.js","sources":["../../src/util/swipe.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Config from './config.js'\nimport EventHandler from '../dom/event-handler.js'\nimport { execute } from './index.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'swipe'\nconst EVENT_KEY = '.bs.swipe'\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst POINTER_TYPE_TOUCH = 'touch'\nconst POINTER_TYPE_PEN = 'pen'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\nconst SWIPE_THRESHOLD = 40\n\nconst Default = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n}\n\nconst DefaultType = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n}\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super()\n this._element = element\n\n if (!element || !Swipe.isSupported()) {\n return\n }\n\n this._config = this._getConfig(config)\n this._deltaX = 0\n this._supportPointerEvents = Boolean(window.PointerEvent)\n this._initEvents()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY)\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX\n\n return\n }\n\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX\n }\n }\n\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX\n }\n\n this._handleSwipe()\n execute(this._config.endCallback)\n }\n\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ?\n 0 :\n event.touches[0].clientX - this._deltaX\n }\n\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX)\n\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltaX / this._deltaX\n\n this._deltaX = 0\n\n if (!direction) {\n return\n }\n\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback)\n }\n\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event))\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event))\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event))\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event))\n }\n }\n\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n }\n}\n\nexport default Swipe\n"],"names":["NAME","EVENT_KEY","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","POINTER_TYPE_TOUCH","POINTER_TYPE_PEN","CLASS_NAME_POINTER_EVENT","SWIPE_THRESHOLD","Default","endCallback","leftCallback","rightCallback","DefaultType","Swipe","Config","constructor","element","config","_element","isSupported","_config","_getConfig","_deltaX","_supportPointerEvents","Boolean","window","PointerEvent","_initEvents","dispose","EventHandler","off","_start","event","touches","clientX","_eventIsPointerPenTouch","_end","_handleSwipe","execute","_move","length","absDeltaX","Math","abs","direction","on","classList","add","pointerType","document","documentElement","navigator","maxTouchPoints"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/dist/util/template-factory.js b/vendor/twbs/bootstrap/js/dist/util/template-factory.js
index faac3352b..3cc8ca2cf 100644
--- a/vendor/twbs/bootstrap/js/dist/util/template-factory.js
+++ b/vendor/twbs/bootstrap/js/dist/util/template-factory.js
@@ -1,32 +1,28 @@
/*!
- * Bootstrap template-factory.js v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap template-factory.js v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./sanitizer'), require('./index'), require('../dom/selector-engine'), require('./config')) :
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./sanitizer.js'), require('./index.js'), require('../dom/selector-engine.js'), require('./config.js')) :
typeof define === 'function' && define.amd ? define(['./sanitizer', './index', '../dom/selector-engine', './config'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.TemplateFactory = factory(global.Sanitizer, global.Index, global.SelectorEngine, global.Config));
-})(this, (function (sanitizer, index, SelectorEngine, Config) { 'use strict';
-
- const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
-
- const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
- const Config__default = /*#__PURE__*/_interopDefaultLegacy(Config);
+})(this, (function (sanitizer_js, index_js, SelectorEngine, Config) { 'use strict';
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/template-factory.js
+ * Bootstrap (v5.3.0-alpha1): util/template-factory.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
+
/**
* Constants
*/
const NAME = 'TemplateFactory';
const Default = {
- allowList: sanitizer.DefaultAllowlist,
+ allowList: sanitizer_js.DefaultAllowlist,
content: {},
// { selector : text , selector2 : text2 , }
extraClass: '',
@@ -48,73 +44,62 @@
entry: '(string|element|function|null)',
selector: '(string|element)'
};
+
/**
* Class definition
*/
- class TemplateFactory extends Config__default.default {
+ class TemplateFactory extends Config {
constructor(config) {
super();
this._config = this._getConfig(config);
- } // Getters
-
+ }
+ // Getters
static get Default() {
return Default;
}
-
static get DefaultType() {
return DefaultType;
}
-
static get NAME() {
return NAME;
- } // Public
-
+ }
+ // Public
getContent() {
return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);
}
-
hasContent() {
return this.getContent().length > 0;
}
-
changeContent(content) {
this._checkContent(content);
-
- this._config.content = { ...this._config.content,
+ this._config.content = {
+ ...this._config.content,
...content
};
return this;
}
-
toHtml() {
const templateWrapper = document.createElement('div');
templateWrapper.innerHTML = this._maybeSanitize(this._config.template);
-
for (const [selector, text] of Object.entries(this._config.content)) {
this._setContent(templateWrapper, text, selector);
}
-
const template = templateWrapper.children[0];
-
const extraClass = this._resolvePossibleFunction(this._config.extraClass);
-
if (extraClass) {
template.classList.add(...extraClass.split(' '));
}
-
return template;
- } // Private
-
+ }
+ // Private
_typeCheckConfig(config) {
super._typeCheckConfig(config);
-
this._checkContent(config.content);
}
-
_checkContent(arg) {
for (const [selector, content] of Object.entries(arg)) {
super._typeCheckConfig({
@@ -123,53 +108,40 @@
}, DefaultContentType);
}
}
-
_setContent(template, content, selector) {
- const templateElement = SelectorEngine__default.default.findOne(selector, template);
-
+ const templateElement = SelectorEngine.findOne(selector, template);
if (!templateElement) {
return;
}
-
content = this._resolvePossibleFunction(content);
-
if (!content) {
templateElement.remove();
return;
}
-
- if (index.isElement(content)) {
- this._putElementInTemplate(index.getElement(content), templateElement);
-
+ if (index_js.isElement(content)) {
+ this._putElementInTemplate(index_js.getElement(content), templateElement);
return;
}
-
if (this._config.html) {
templateElement.innerHTML = this._maybeSanitize(content);
return;
}
-
templateElement.textContent = content;
}
-
_maybeSanitize(arg) {
- return this._config.sanitize ? sanitizer.sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
+ return this._config.sanitize ? sanitizer_js.sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
}
-
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg(this) : arg;
+ return index_js.execute(arg, [this]);
}
-
_putElementInTemplate(element, templateElement) {
if (this._config.html) {
templateElement.innerHTML = '';
templateElement.append(element);
return;
}
-
templateElement.textContent = element.textContent;
}
-
}
return TemplateFactory;
diff --git a/vendor/twbs/bootstrap/js/dist/util/template-factory.js.map b/vendor/twbs/bootstrap/js/dist/util/template-factory.js.map
index 288e14a00..503b96e2f 100644
--- a/vendor/twbs/bootstrap/js/dist/util/template-factory.js.map
+++ b/vendor/twbs/bootstrap/js/dist/util/template-factory.js.map
@@ -1 +1 @@
-{"version":3,"file":"template-factory.js","sources":["../../src/util/template-factory.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.2.2): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer'\nimport { getElement, isElement } from '../util/index'\nimport SelectorEngine from '../dom/selector-engine'\nimport Config from './config'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg(this) : arg\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n"],"names":["NAME","Default","allowList","DefaultAllowlist","content","extraClass","html","sanitize","sanitizeFn","template","DefaultType","DefaultContentType","entry","selector","TemplateFactory","Config","constructor","config","_config","_getConfig","getContent","Object","values","map","_resolvePossibleFunction","filter","Boolean","hasContent","length","changeContent","_checkContent","toHtml","templateWrapper","document","createElement","innerHTML","_maybeSanitize","text","entries","_setContent","children","classList","add","split","_typeCheckConfig","arg","templateElement","SelectorEngine","findOne","remove","isElement","_putElementInTemplate","getElement","textContent","sanitizeHtml","element","append"],"mappings":"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"} \ No newline at end of file
+{"version":3,"file":"template-factory.js","sources":["../../src/util/template-factory.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.3.0-alpha1): util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'\nimport { execute, getElement, isElement } from './index.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport Config from './config.js'\n\n/**\n * Constants\n */\n\nconst NAME = 'TemplateFactory'\n\nconst Default = {\n allowList: DefaultAllowlist,\n content: {}, // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '<div></div>'\n}\n\nconst DefaultType = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n}\n\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super()\n this._config = this._getConfig(config)\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content)\n .map(config => this._resolvePossibleFunction(config))\n .filter(Boolean)\n }\n\n hasContent() {\n return this.getContent().length > 0\n }\n\n changeContent(content) {\n this._checkContent(content)\n this._config.content = { ...this._config.content, ...content }\n return this\n }\n\n toHtml() {\n const templateWrapper = document.createElement('div')\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template)\n\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector)\n }\n\n const template = templateWrapper.children[0]\n const extraClass = this._resolvePossibleFunction(this._config.extraClass)\n\n if (extraClass) {\n template.classList.add(...extraClass.split(' '))\n }\n\n return template\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config)\n this._checkContent(config.content)\n }\n\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({ selector, entry: content }, DefaultContentType)\n }\n }\n\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template)\n\n if (!templateElement) {\n return\n }\n\n content = this._resolvePossibleFunction(content)\n\n if (!content) {\n templateElement.remove()\n return\n }\n\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement)\n return\n }\n\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content)\n return\n }\n\n templateElement.textContent = content\n }\n\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg\n }\n\n _resolvePossibleFunction(arg) {\n return execute(arg, [this])\n }\n\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = ''\n templateElement.append(element)\n return\n }\n\n templateElement.textContent = element.textContent\n }\n}\n\nexport default TemplateFactory\n"],"names":["NAME","Default","allowList","DefaultAllowlist","content","extraClass","html","sanitize","sanitizeFn","template","DefaultType","DefaultContentType","entry","selector","TemplateFactory","Config","constructor","config","_config","_getConfig","getContent","Object","values","map","_resolvePossibleFunction","filter","Boolean","hasContent","length","changeContent","_checkContent","toHtml","templateWrapper","document","createElement","innerHTML","_maybeSanitize","text","entries","_setContent","children","classList","add","split","_typeCheckConfig","arg","templateElement","SelectorEngine","findOne","remove","isElement","_putElementInTemplate","getElement","textContent","sanitizeHtml","execute","element","append"],"mappings":"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"} \ No newline at end of file
diff --git a/vendor/twbs/bootstrap/js/index.esm.js b/vendor/twbs/bootstrap/js/index.esm.js
index 062b25408..11f54d5e9 100644
--- a/vendor/twbs/bootstrap/js/index.esm.js
+++ b/vendor/twbs/bootstrap/js/index.esm.js
@@ -1,19 +1,19 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): index.esm.js
+ * Bootstrap (v5.3.0-alpha1): index.esm.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-export { default as Alert } from './src/alert'
-export { default as Button } from './src/button'
-export { default as Carousel } from './src/carousel'
-export { default as Collapse } from './src/collapse'
-export { default as Dropdown } from './src/dropdown'
-export { default as Modal } from './src/modal'
-export { default as Offcanvas } from './src/offcanvas'
-export { default as Popover } from './src/popover'
-export { default as ScrollSpy } from './src/scrollspy'
-export { default as Tab } from './src/tab'
-export { default as Toast } from './src/toast'
-export { default as Tooltip } from './src/tooltip'
+export { default as Alert } from './src/alert.js'
+export { default as Button } from './src/button.js'
+export { default as Carousel } from './src/carousel.js'
+export { default as Collapse } from './src/collapse.js'
+export { default as Dropdown } from './src/dropdown.js'
+export { default as Modal } from './src/modal.js'
+export { default as Offcanvas } from './src/offcanvas.js'
+export { default as Popover } from './src/popover.js'
+export { default as ScrollSpy } from './src/scrollspy.js'
+export { default as Tab } from './src/tab.js'
+export { default as Toast } from './src/toast.js'
+export { default as Tooltip } from './src/tooltip.js'
diff --git a/vendor/twbs/bootstrap/js/index.umd.js b/vendor/twbs/bootstrap/js/index.umd.js
index c63d7c207..7652bd06d 100644
--- a/vendor/twbs/bootstrap/js/index.umd.js
+++ b/vendor/twbs/bootstrap/js/index.umd.js
@@ -1,22 +1,22 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): index.umd.js
+ * Bootstrap (v5.3.0-alpha1): index.umd.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import Alert from './src/alert'
-import Button from './src/button'
-import Carousel from './src/carousel'
-import Collapse from './src/collapse'
-import Dropdown from './src/dropdown'
-import Modal from './src/modal'
-import Offcanvas from './src/offcanvas'
-import Popover from './src/popover'
-import ScrollSpy from './src/scrollspy'
-import Tab from './src/tab'
-import Toast from './src/toast'
-import Tooltip from './src/tooltip'
+import Alert from './src/alert.js'
+import Button from './src/button.js'
+import Carousel from './src/carousel.js'
+import Collapse from './src/collapse.js'
+import Dropdown from './src/dropdown.js'
+import Modal from './src/modal.js'
+import Offcanvas from './src/offcanvas.js'
+import Popover from './src/popover.js'
+import ScrollSpy from './src/scrollspy.js'
+import Tab from './src/tab.js'
+import Toast from './src/toast.js'
+import Tooltip from './src/tooltip.js'
export default {
Alert,
diff --git a/vendor/twbs/bootstrap/js/src/alert.js b/vendor/twbs/bootstrap/js/src/alert.js
index 6ab6650c1..a267d8a26 100644
--- a/vendor/twbs/bootstrap/js/src/alert.js
+++ b/vendor/twbs/bootstrap/js/src/alert.js
@@ -1,14 +1,14 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): alert.js
+ * Bootstrap (v5.3.0-alpha1): alert.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { defineJQueryPlugin } from './util/index'
-import EventHandler from './dom/event-handler'
-import BaseComponent from './base-component'
-import { enableDismissTrigger } from './util/component-functions'
+import { defineJQueryPlugin } from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import BaseComponent from './base-component.js'
+import { enableDismissTrigger } from './util/component-functions.js'
/**
* Constants
diff --git a/vendor/twbs/bootstrap/js/src/base-component.js b/vendor/twbs/bootstrap/js/src/base-component.js
index dba5e0742..6b64aefd6 100644
--- a/vendor/twbs/bootstrap/js/src/base-component.js
+++ b/vendor/twbs/bootstrap/js/src/base-component.js
@@ -1,20 +1,20 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): base-component.js
+ * Bootstrap (v5.3.0-alpha1): base-component.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import Data from './dom/data'
-import { executeAfterTransition, getElement } from './util/index'
-import EventHandler from './dom/event-handler'
-import Config from './util/config'
+import Data from './dom/data.js'
+import { executeAfterTransition, getElement } from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import Config from './util/config.js'
/**
* Constants
*/
-const VERSION = '5.2.2'
+const VERSION = '5.3.0-alpha1'
/**
* Class definition
diff --git a/vendor/twbs/bootstrap/js/src/button.js b/vendor/twbs/bootstrap/js/src/button.js
index e70525c8b..b0f043f45 100644
--- a/vendor/twbs/bootstrap/js/src/button.js
+++ b/vendor/twbs/bootstrap/js/src/button.js
@@ -1,13 +1,13 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): button.js
+ * Bootstrap (v5.3.0-alpha1): button.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { defineJQueryPlugin } from './util/index'
-import EventHandler from './dom/event-handler'
-import BaseComponent from './base-component'
+import { defineJQueryPlugin } from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import BaseComponent from './base-component.js'
/**
* Constants
diff --git a/vendor/twbs/bootstrap/js/src/carousel.js b/vendor/twbs/bootstrap/js/src/carousel.js
index 7e89e1614..72c77dc4a 100644
--- a/vendor/twbs/bootstrap/js/src/carousel.js
+++ b/vendor/twbs/bootstrap/js/src/carousel.js
@@ -1,24 +1,23 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): carousel.js
+ * Bootstrap (v5.3.0-alpha1): carousel.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
import {
defineJQueryPlugin,
- getElementFromSelector,
getNextActiveElement,
isRTL,
isVisible,
reflow,
triggerTransitionEnd
-} from './util/index'
-import EventHandler from './dom/event-handler'
-import Manipulator from './dom/manipulator'
-import SelectorEngine from './dom/selector-engine'
-import Swipe from './util/swipe'
-import BaseComponent from './base-component'
+} from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import Manipulator from './dom/manipulator.js'
+import SelectorEngine from './dom/selector-engine.js'
+import Swipe from './util/swipe.js'
+import BaseComponent from './base-component.js'
/**
* Constants
@@ -431,7 +430,7 @@ class Carousel extends BaseComponent {
*/
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, function (event) {
- const target = getElementFromSelector(this)
+ const target = SelectorEngine.getElementFromSelector(this)
if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
return
diff --git a/vendor/twbs/bootstrap/js/src/collapse.js b/vendor/twbs/bootstrap/js/src/collapse.js
index df2bbc647..b1dd7cf8a 100644
--- a/vendor/twbs/bootstrap/js/src/collapse.js
+++ b/vendor/twbs/bootstrap/js/src/collapse.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): collapse.js
+ * Bootstrap (v5.3.0-alpha1): collapse.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -8,13 +8,11 @@
import {
defineJQueryPlugin,
getElement,
- getElementFromSelector,
- getSelectorFromElement,
reflow
-} from './util/index'
-import EventHandler from './dom/event-handler'
-import SelectorEngine from './dom/selector-engine'
-import BaseComponent from './base-component'
+} from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import SelectorEngine from './dom/selector-engine.js'
+import BaseComponent from './base-component.js'
/**
* Constants
@@ -68,7 +66,7 @@ class Collapse extends BaseComponent {
const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE)
for (const elem of toggleList) {
- const selector = getSelectorFromElement(elem)
+ const selector = SelectorEngine.getSelectorFromElement(elem)
const filterElement = SelectorEngine.find(selector)
.filter(foundElement => foundElement === this._element)
@@ -185,7 +183,7 @@ class Collapse extends BaseComponent {
this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW)
for (const trigger of this._triggerArray) {
- const element = getElementFromSelector(trigger)
+ const element = SelectorEngine.getElementFromSelector(trigger)
if (element && !this._isShown(element)) {
this._addAriaAndCollapsedClass([trigger], false)
@@ -229,7 +227,7 @@ class Collapse extends BaseComponent {
const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE)
for (const element of children) {
- const selected = getElementFromSelector(element)
+ const selected = SelectorEngine.getElementFromSelector(element)
if (selected) {
this._addAriaAndCollapsedClass([element], this._isShown(selected))
@@ -285,10 +283,7 @@ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (
event.preventDefault()
}
- const selector = getSelectorFromElement(this)
- const selectorElements = SelectorEngine.find(selector)
-
- for (const element of selectorElements) {
+ for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
Collapse.getOrCreateInstance(element, { toggle: false }).toggle()
}
})
diff --git a/vendor/twbs/bootstrap/js/src/dom/data.js b/vendor/twbs/bootstrap/js/src/dom/data.js
index 76c5e0a29..d60d0feda 100644
--- a/vendor/twbs/bootstrap/js/src/dom/data.js
+++ b/vendor/twbs/bootstrap/js/src/dom/data.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/data.js
+ * Bootstrap (v5.3.0-alpha1): dom/data.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/vendor/twbs/bootstrap/js/src/dom/event-handler.js b/vendor/twbs/bootstrap/js/src/dom/event-handler.js
index c7019a8d0..23c44447a 100644
--- a/vendor/twbs/bootstrap/js/src/dom/event-handler.js
+++ b/vendor/twbs/bootstrap/js/src/dom/event-handler.js
@@ -1,11 +1,11 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/event-handler.js
+ * Bootstrap (v5.3.0-alpha1): dom/event-handler.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { getjQuery } from '../util/index'
+import { getjQuery } from '../util/index.js'
/**
* Constants
@@ -198,9 +198,8 @@ function removeHandler(element, events, typeEvent, handler, delegationSelector)
function removeNamespacedHandlers(element, events, typeEvent, namespace) {
const storeElementEvent = events[typeEvent] || {}
- for (const handlerKey of Object.keys(storeElementEvent)) {
+ for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
if (handlerKey.includes(namespace)) {
- const event = storeElementEvent[handlerKey]
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)
}
}
@@ -248,11 +247,10 @@ const EventHandler = {
}
}
- for (const keyHandlers of Object.keys(storeElementEvent)) {
+ for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
const handlerKey = keyHandlers.replace(stripUidRegex, '')
if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
- const event = storeElementEvent[keyHandlers]
removeHandler(element, events, typeEvent, event.callable, event.delegationSelector)
}
}
@@ -300,8 +298,8 @@ const EventHandler = {
}
}
-function hydrateObj(obj, meta) {
- for (const [key, value] of Object.entries(meta || {})) {
+function hydrateObj(obj, meta = {}) {
+ for (const [key, value] of Object.entries(meta)) {
try {
obj[key] = value
} catch {
diff --git a/vendor/twbs/bootstrap/js/src/dom/manipulator.js b/vendor/twbs/bootstrap/js/src/dom/manipulator.js
index 04c1dc956..6bc5d197c 100644
--- a/vendor/twbs/bootstrap/js/src/dom/manipulator.js
+++ b/vendor/twbs/bootstrap/js/src/dom/manipulator.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/manipulator.js
+ * Bootstrap (v5.3.0-alpha1): dom/manipulator.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/vendor/twbs/bootstrap/js/src/dom/selector-engine.js b/vendor/twbs/bootstrap/js/src/dom/selector-engine.js
index 28f23ff8f..49b8f38d6 100644
--- a/vendor/twbs/bootstrap/js/src/dom/selector-engine.js
+++ b/vendor/twbs/bootstrap/js/src/dom/selector-engine.js
@@ -1,15 +1,36 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dom/selector-engine.js
+ * Bootstrap (v5.3.0-alpha1): dom/selector-engine.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { isDisabled, isVisible } from '../util/index'
+import { isDisabled, isVisible, parseSelector } from '../util/index.js'
-/**
- * Constants
- */
+const getSelector = element => {
+ let selector = element.getAttribute('data-bs-target')
+
+ if (!selector || selector === '#') {
+ let hrefAttribute = element.getAttribute('href')
+
+ // The only valid content that could double as a selector are IDs or classes,
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
+ // `document.querySelector` will rightfully complain it is invalid.
+ // See https://github.com/twbs/bootstrap/issues/32273
+ if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {
+ return null
+ }
+
+ // Just in case some CMS puts out a full URL with the anchor appended
+ if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
+ hrefAttribute = `#${hrefAttribute.split('#')[1]}`
+ }
+
+ selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null
+ }
+
+ return parseSelector(selector)
+}
const SelectorEngine = {
find(selector, element = document.documentElement) {
@@ -77,6 +98,28 @@ const SelectorEngine = {
].map(selector => `${selector}:not([tabindex^="-"])`).join(',')
return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))
+ },
+
+ getSelectorFromElement(element) {
+ const selector = getSelector(element)
+
+ if (selector) {
+ return SelectorEngine.findOne(selector) ? selector : null
+ }
+
+ return null
+ },
+
+ getElementFromSelector(element) {
+ const selector = getSelector(element)
+
+ return selector ? SelectorEngine.findOne(selector) : null
+ },
+
+ getMultipleElementsFromSelector(element) {
+ const selector = getSelector(element)
+
+ return selector ? SelectorEngine.find(selector) : []
}
}
diff --git a/vendor/twbs/bootstrap/js/src/dropdown.js b/vendor/twbs/bootstrap/js/src/dropdown.js
index b05d92cf7..6b7c0cef3 100644
--- a/vendor/twbs/bootstrap/js/src/dropdown.js
+++ b/vendor/twbs/bootstrap/js/src/dropdown.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): dropdown.js
+ * Bootstrap (v5.3.0-alpha1): dropdown.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -8,6 +8,7 @@
import * as Popper from '@popperjs/core'
import {
defineJQueryPlugin,
+ execute,
getElement,
getNextActiveElement,
isDisabled,
@@ -15,11 +16,11 @@ import {
isRTL,
isVisible,
noop
-} from './util/index'
-import EventHandler from './dom/event-handler'
-import Manipulator from './dom/manipulator'
-import SelectorEngine from './dom/selector-engine'
-import BaseComponent from './base-component'
+} from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import Manipulator from './dom/manipulator.js'
+import SelectorEngine from './dom/selector-engine.js'
+import BaseComponent from './base-component.js'
/**
* Constants
@@ -95,7 +96,7 @@ class Dropdown extends BaseComponent {
this._popper = null
this._parent = this._element.parentNode // dropdown wrapper
- // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] ||
SelectorEngine.prev(this._element, SELECTOR_MENU)[0] ||
SelectorEngine.findOne(SELECTOR_MENU, this._parent)
@@ -319,7 +320,7 @@ class Dropdown extends BaseComponent {
return {
...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ ...execute(this._config.popperConfig, [defaultBsPopperConfig])
}
}
@@ -408,7 +409,7 @@ class Dropdown extends BaseComponent {
event.preventDefault()
- // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/
+ // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/
const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE) ?
this :
(SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE)[0] ||
diff --git a/vendor/twbs/bootstrap/js/src/modal.js b/vendor/twbs/bootstrap/js/src/modal.js
index c2c5c19e9..0a38586ce 100644
--- a/vendor/twbs/bootstrap/js/src/modal.js
+++ b/vendor/twbs/bootstrap/js/src/modal.js
@@ -1,18 +1,18 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): modal.js
+ * Bootstrap (v5.3.0-alpha1): modal.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'
-import EventHandler from './dom/event-handler'
-import SelectorEngine from './dom/selector-engine'
-import ScrollBarHelper from './util/scrollbar'
-import BaseComponent from './base-component'
-import Backdrop from './util/backdrop'
-import FocusTrap from './util/focustrap'
-import { enableDismissTrigger } from './util/component-functions'
+import { defineJQueryPlugin, isRTL, isVisible, reflow } from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import SelectorEngine from './dom/selector-engine.js'
+import ScrollBarHelper from './util/scrollbar.js'
+import BaseComponent from './base-component.js'
+import Backdrop from './util/backdrop.js'
+import FocusTrap from './util/focustrap.js'
+import { enableDismissTrigger } from './util/component-functions.js'
/**
* Constants
@@ -336,7 +336,7 @@ class Modal extends BaseComponent {
*/
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
- const target = getElementFromSelector(this)
+ const target = SelectorEngine.getElementFromSelector(this)
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault()
diff --git a/vendor/twbs/bootstrap/js/src/offcanvas.js b/vendor/twbs/bootstrap/js/src/offcanvas.js
index dc3e91075..54adf86cc 100644
--- a/vendor/twbs/bootstrap/js/src/offcanvas.js
+++ b/vendor/twbs/bootstrap/js/src/offcanvas.js
@@ -1,23 +1,22 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): offcanvas.js
+ * Bootstrap (v5.3.0-alpha1): offcanvas.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
import {
defineJQueryPlugin,
- getElementFromSelector,
isDisabled,
isVisible
-} from './util/index'
-import ScrollBarHelper from './util/scrollbar'
-import EventHandler from './dom/event-handler'
-import BaseComponent from './base-component'
-import SelectorEngine from './dom/selector-engine'
-import Backdrop from './util/backdrop'
-import FocusTrap from './util/focustrap'
-import { enableDismissTrigger } from './util/component-functions'
+} from './util/index.js'
+import ScrollBarHelper from './util/scrollbar.js'
+import EventHandler from './dom/event-handler.js'
+import BaseComponent from './base-component.js'
+import SelectorEngine from './dom/selector-engine.js'
+import Backdrop from './util/backdrop.js'
+import FocusTrap from './util/focustrap.js'
+import { enableDismissTrigger } from './util/component-functions.js'
/**
* Constants
@@ -231,7 +230,7 @@ class Offcanvas extends BaseComponent {
*/
EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
- const target = getElementFromSelector(this)
+ const target = SelectorEngine.getElementFromSelector(this)
if (['A', 'AREA'].includes(this.tagName)) {
event.preventDefault()
diff --git a/vendor/twbs/bootstrap/js/src/popover.js b/vendor/twbs/bootstrap/js/src/popover.js
index 93fdc35ff..b7a9f0cb9 100644
--- a/vendor/twbs/bootstrap/js/src/popover.js
+++ b/vendor/twbs/bootstrap/js/src/popover.js
@@ -1,12 +1,12 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): popover.js
+ * Bootstrap (v5.3.0-alpha1): popover.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { defineJQueryPlugin } from './util/index'
-import Tooltip from './tooltip'
+import { defineJQueryPlugin } from './util/index.js'
+import Tooltip from './tooltip.js'
/**
* Constants
diff --git a/vendor/twbs/bootstrap/js/src/scrollspy.js b/vendor/twbs/bootstrap/js/src/scrollspy.js
index a73bba840..f6af6ee05 100644
--- a/vendor/twbs/bootstrap/js/src/scrollspy.js
+++ b/vendor/twbs/bootstrap/js/src/scrollspy.js
@@ -1,14 +1,14 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): scrollspy.js
+ * Bootstrap (v5.3.0-alpha1): scrollspy.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index'
-import EventHandler from './dom/event-handler'
-import SelectorEngine from './dom/selector-engine'
-import BaseComponent from './base-component'
+import { defineJQueryPlugin, getElement, isDisabled, isVisible } from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import SelectorEngine from './dom/selector-engine.js'
+import BaseComponent from './base-component.js'
/**
* Constants
diff --git a/vendor/twbs/bootstrap/js/src/tab.js b/vendor/twbs/bootstrap/js/src/tab.js
index a78c27538..cdba0e2e6 100644
--- a/vendor/twbs/bootstrap/js/src/tab.js
+++ b/vendor/twbs/bootstrap/js/src/tab.js
@@ -1,14 +1,14 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tab.js
+ * Bootstrap (v5.3.0-alpha1): tab.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { defineJQueryPlugin, getElementFromSelector, getNextActiveElement, isDisabled } from './util/index'
-import EventHandler from './dom/event-handler'
-import SelectorEngine from './dom/selector-engine'
-import BaseComponent from './base-component'
+import { defineJQueryPlugin, getNextActiveElement, isDisabled } from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import SelectorEngine from './dom/selector-engine.js'
+import BaseComponent from './base-component.js'
/**
* Constants
@@ -106,7 +106,7 @@ class Tab extends BaseComponent {
element.classList.add(CLASS_NAME_ACTIVE)
- this._activate(getElementFromSelector(element)) // Search and activate/show the proper section
+ this._activate(SelectorEngine.getElementFromSelector(element)) // Search and activate/show the proper section
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
@@ -133,7 +133,7 @@ class Tab extends BaseComponent {
element.classList.remove(CLASS_NAME_ACTIVE)
element.blur()
- this._deactivate(getElementFromSelector(element)) // Search and deactivate the shown section too
+ this._deactivate(SelectorEngine.getElementFromSelector(element)) // Search and deactivate the shown section too
const complete = () => {
if (element.getAttribute('role') !== 'tab') {
@@ -203,7 +203,7 @@ class Tab extends BaseComponent {
}
_setInitialAttributesOnTargetPanel(child) {
- const target = getElementFromSelector(child)
+ const target = SelectorEngine.getElementFromSelector(child)
if (!target) {
return
diff --git a/vendor/twbs/bootstrap/js/src/toast.js b/vendor/twbs/bootstrap/js/src/toast.js
index aef5da3a9..ff801668f 100644
--- a/vendor/twbs/bootstrap/js/src/toast.js
+++ b/vendor/twbs/bootstrap/js/src/toast.js
@@ -1,14 +1,14 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): toast.js
+ * Bootstrap (v5.3.0-alpha1): toast.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { defineJQueryPlugin, reflow } from './util/index'
-import EventHandler from './dom/event-handler'
-import BaseComponent from './base-component'
-import { enableDismissTrigger } from './util/component-functions'
+import { defineJQueryPlugin, reflow } from './util/index.js'
+import EventHandler from './dom/event-handler.js'
+import BaseComponent from './base-component.js'
+import { enableDismissTrigger } from './util/component-functions.js'
/**
* Constants
diff --git a/vendor/twbs/bootstrap/js/src/tooltip.js b/vendor/twbs/bootstrap/js/src/tooltip.js
index e01f0a4ae..e152ec214 100644
--- a/vendor/twbs/bootstrap/js/src/tooltip.js
+++ b/vendor/twbs/bootstrap/js/src/tooltip.js
@@ -1,17 +1,17 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): tooltip.js
+ * Bootstrap (v5.3.0-alpha1): tooltip.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
import * as Popper from '@popperjs/core'
-import { defineJQueryPlugin, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index'
-import { DefaultAllowlist } from './util/sanitizer'
-import EventHandler from './dom/event-handler'
-import Manipulator from './dom/manipulator'
-import BaseComponent from './base-component'
-import TemplateFactory from './util/template-factory'
+import { defineJQueryPlugin, execute, findShadowRoot, getElement, getUID, isRTL, noop } from './util/index.js'
+import { DefaultAllowlist } from './util/sanitizer.js'
+import EventHandler from './dom/event-handler.js'
+import Manipulator from './dom/manipulator.js'
+import BaseComponent from './base-component.js'
+import TemplateFactory from './util/template-factory.js'
/**
* Constants
@@ -172,10 +172,6 @@ class Tooltip extends BaseComponent {
EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)
- if (this.tip) {
- this.tip.remove()
- }
-
if (this._element.getAttribute('data-bs-original-title')) {
this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'))
}
@@ -202,10 +198,7 @@ class Tooltip extends BaseComponent {
}
// todo v6 remove this OR make it optional
- if (this.tip) {
- this.tip.remove()
- this.tip = null
- }
+ this._disposePopper()
const tip = this._getTipElement()
@@ -218,11 +211,7 @@ class Tooltip extends BaseComponent {
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED))
}
- if (this._popper) {
- this._popper.update()
- } else {
- this._popper = this._createPopper(tip)
- }
+ this._popper = this._createPopper(tip)
tip.classList.add(CLASS_NAME_SHOW)
@@ -281,13 +270,11 @@ class Tooltip extends BaseComponent {
}
if (!this._isHovered) {
- tip.remove()
+ this._disposePopper()
}
this._element.removeAttribute('aria-describedby')
EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN))
-
- this._disposePopper()
}
this._queueCallback(complete, this.tip, this._isAnimated())
@@ -383,9 +370,7 @@ class Tooltip extends BaseComponent {
}
_createPopper(tip) {
- const placement = typeof this._config.placement === 'function' ?
- this._config.placement.call(this, tip, this._element) :
- this._config.placement
+ const placement = execute(this._config.placement, [this, tip, this._element])
const attachment = AttachmentMap[placement.toUpperCase()]
return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))
}
@@ -405,7 +390,7 @@ class Tooltip extends BaseComponent {
}
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg.call(this._element) : arg
+ return execute(arg, [this._element])
}
_getPopperConfig(attachment) {
@@ -451,7 +436,7 @@ class Tooltip extends BaseComponent {
return {
...defaultBsPopperConfig,
- ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)
+ ...execute(this._config.popperConfig, [defaultBsPopperConfig])
}
}
@@ -592,9 +577,9 @@ class Tooltip extends BaseComponent {
_getDelegateConfig() {
const config = {}
- for (const key in this._config) {
- if (this.constructor.Default[key] !== this._config[key]) {
- config[key] = this._config[key]
+ for (const [key, value] of Object.entries(this._config)) {
+ if (this.constructor.Default[key] !== value) {
+ config[key] = value
}
}
@@ -612,6 +597,11 @@ class Tooltip extends BaseComponent {
this._popper.destroy()
this._popper = null
}
+
+ if (this.tip) {
+ this.tip.remove()
+ this.tip = null
+ }
}
// Static
diff --git a/vendor/twbs/bootstrap/js/src/util/backdrop.js b/vendor/twbs/bootstrap/js/src/util/backdrop.js
index 342f8afc1..eab7d40eb 100644
--- a/vendor/twbs/bootstrap/js/src/util/backdrop.js
+++ b/vendor/twbs/bootstrap/js/src/util/backdrop.js
@@ -1,13 +1,13 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/backdrop.js
+ * Bootstrap (v5.3.0-alpha1): util/backdrop.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import EventHandler from '../dom/event-handler'
-import { execute, executeAfterTransition, getElement, reflow } from './index'
-import Config from './config'
+import EventHandler from '../dom/event-handler.js'
+import { execute, executeAfterTransition, getElement, reflow } from './index.js'
+import Config from './config.js'
/**
* Constants
diff --git a/vendor/twbs/bootstrap/js/src/util/component-functions.js b/vendor/twbs/bootstrap/js/src/util/component-functions.js
index 798366b07..f059cc825 100644
--- a/vendor/twbs/bootstrap/js/src/util/component-functions.js
+++ b/vendor/twbs/bootstrap/js/src/util/component-functions.js
@@ -1,12 +1,13 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/component-functions.js
+ * Bootstrap (v5.3.0-alpha1): util/component-functions.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import EventHandler from '../dom/event-handler'
-import { getElementFromSelector, isDisabled } from './index'
+import EventHandler from '../dom/event-handler.js'
+import { isDisabled } from './index.js'
+import SelectorEngine from '../dom/selector-engine.js'
const enableDismissTrigger = (component, method = 'hide') => {
const clickEvent = `click.dismiss${component.EVENT_KEY}`
@@ -21,7 +22,7 @@ const enableDismissTrigger = (component, method = 'hide') => {
return
}
- const target = getElementFromSelector(this) || this.closest(`.${name}`)
+ const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`)
const instance = component.getOrCreateInstance(target)
// Method argument is left, for Alert and only, as it doesn't implement the 'hide' method
diff --git a/vendor/twbs/bootstrap/js/src/util/config.js b/vendor/twbs/bootstrap/js/src/util/config.js
index 119a3ea3d..241ea966b 100644
--- a/vendor/twbs/bootstrap/js/src/util/config.js
+++ b/vendor/twbs/bootstrap/js/src/util/config.js
@@ -1,12 +1,12 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/config.js
+ * Bootstrap (v5.3.0-alpha1): util/config.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { isElement, toType } from './index'
-import Manipulator from '../dom/manipulator'
+import { isElement, toType } from './index.js'
+import Manipulator from '../dom/manipulator.js'
/**
* Class definition
@@ -49,8 +49,7 @@ class Config {
}
_typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
- for (const property of Object.keys(configTypes)) {
- const expectedTypes = configTypes[property]
+ for (const [property, expectedTypes] of Object.entries(configTypes)) {
const value = config[property]
const valueType = isElement(value) ? 'element' : toType(value)
diff --git a/vendor/twbs/bootstrap/js/src/util/focustrap.js b/vendor/twbs/bootstrap/js/src/util/focustrap.js
index 01ac76683..2f189585a 100644
--- a/vendor/twbs/bootstrap/js/src/util/focustrap.js
+++ b/vendor/twbs/bootstrap/js/src/util/focustrap.js
@@ -1,13 +1,13 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/focustrap.js
+ * Bootstrap (v5.3.0-alpha1): util/focustrap.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import EventHandler from '../dom/event-handler'
-import SelectorEngine from '../dom/selector-engine'
-import Config from './config'
+import EventHandler from '../dom/event-handler.js'
+import SelectorEngine from '../dom/selector-engine.js'
+import Config from './config.js'
/**
* Constants
diff --git a/vendor/twbs/bootstrap/js/src/util/index.js b/vendor/twbs/bootstrap/js/src/util/index.js
index 7c2411665..cd23835c0 100644
--- a/vendor/twbs/bootstrap/js/src/util/index.js
+++ b/vendor/twbs/bootstrap/js/src/util/index.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/index.js
+ * Bootstrap (v5.3.0-alpha1): util/index.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
@@ -9,6 +9,20 @@ const MAX_UID = 1_000_000
const MILLISECONDS_MULTIPLIER = 1000
const TRANSITION_END = 'transitionend'
+/**
+ * Properly escape IDs selectors to handle weird IDs
+ * @param {string} selector
+ * @returns {string}
+ */
+const parseSelector = selector => {
+ if (selector && window.CSS && window.CSS.escape) {
+ // document.querySelector needs escaping to handle IDs (html5+) containing for instance /
+ selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`)
+ }
+
+ return selector
+}
+
// Shout-out Angus Croll (https://goo.gl/pxwQGp)
const toType = object => {
if (object === null || object === undefined) {
@@ -30,47 +44,6 @@ const getUID = prefix => {
return prefix
}
-const getSelector = element => {
- let selector = element.getAttribute('data-bs-target')
-
- if (!selector || selector === '#') {
- let hrefAttribute = element.getAttribute('href')
-
- // The only valid content that could double as a selector are IDs or classes,
- // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
- // `document.querySelector` will rightfully complain it is invalid.
- // See https://github.com/twbs/bootstrap/issues/32273
- if (!hrefAttribute || (!hrefAttribute.includes('#') && !hrefAttribute.startsWith('.'))) {
- return null
- }
-
- // Just in case some CMS puts out a full URL with the anchor appended
- if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {
- hrefAttribute = `#${hrefAttribute.split('#')[1]}`
- }
-
- selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null
- }
-
- return selector
-}
-
-const getSelectorFromElement = element => {
- const selector = getSelector(element)
-
- if (selector) {
- return document.querySelector(selector) ? selector : null
- }
-
- return null
-}
-
-const getElementFromSelector = element => {
- const selector = getSelector(element)
-
- return selector ? document.querySelector(selector) : null
-}
-
const getTransitionDurationFromElement = element => {
if (!element) {
return 0
@@ -117,7 +90,7 @@ const getElement = object => {
}
if (typeof object === 'string' && object.length > 0) {
- return document.querySelector(object)
+ return document.querySelector(parseSelector(object))
}
return null
@@ -249,10 +222,8 @@ const defineJQueryPlugin = plugin => {
})
}
-const execute = callback => {
- if (typeof callback === 'function') {
- callback()
- }
+const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+ return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue
}
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
@@ -318,10 +289,8 @@ export {
executeAfterTransition,
findShadowRoot,
getElement,
- getElementFromSelector,
getjQuery,
getNextActiveElement,
- getSelectorFromElement,
getTransitionDurationFromElement,
getUID,
isDisabled,
@@ -330,6 +299,7 @@ export {
isVisible,
noop,
onDOMContentLoaded,
+ parseSelector,
reflow,
triggerTransitionEnd,
toType
diff --git a/vendor/twbs/bootstrap/js/src/util/sanitizer.js b/vendor/twbs/bootstrap/js/src/util/sanitizer.js
index 6a9daa6ce..30fb3b1a1 100644
--- a/vendor/twbs/bootstrap/js/src/util/sanitizer.js
+++ b/vendor/twbs/bootstrap/js/src/util/sanitizer.js
@@ -1,6 +1,6 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/sanitizer.js
+ * Bootstrap (v5.3.0-alpha1): util/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
diff --git a/vendor/twbs/bootstrap/js/src/util/scrollbar.js b/vendor/twbs/bootstrap/js/src/util/scrollbar.js
index 421426d41..7b01b3596 100644
--- a/vendor/twbs/bootstrap/js/src/util/scrollbar.js
+++ b/vendor/twbs/bootstrap/js/src/util/scrollbar.js
@@ -1,13 +1,13 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/scrollBar.js
+ * Bootstrap (v5.3.0-alpha1): util/scrollBar.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import SelectorEngine from '../dom/selector-engine'
-import Manipulator from '../dom/manipulator'
-import { isElement } from './index'
+import SelectorEngine from '../dom/selector-engine.js'
+import Manipulator from '../dom/manipulator.js'
+import { isElement } from './index.js'
/**
* Constants
diff --git a/vendor/twbs/bootstrap/js/src/util/swipe.js b/vendor/twbs/bootstrap/js/src/util/swipe.js
index 7fcd65588..834b02e67 100644
--- a/vendor/twbs/bootstrap/js/src/util/swipe.js
+++ b/vendor/twbs/bootstrap/js/src/util/swipe.js
@@ -1,13 +1,13 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/swipe.js
+ * Bootstrap (v5.3.0-alpha1): util/swipe.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import Config from './config'
-import EventHandler from '../dom/event-handler'
-import { execute } from './index'
+import Config from './config.js'
+import EventHandler from '../dom/event-handler.js'
+import { execute } from './index.js'
/**
* Constants
diff --git a/vendor/twbs/bootstrap/js/src/util/template-factory.js b/vendor/twbs/bootstrap/js/src/util/template-factory.js
index c6d52a50d..82cd8b31c 100644
--- a/vendor/twbs/bootstrap/js/src/util/template-factory.js
+++ b/vendor/twbs/bootstrap/js/src/util/template-factory.js
@@ -1,14 +1,14 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v5.2.2): util/template-factory.js
+ * Bootstrap (v5.3.0-alpha1): util/template-factory.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
-import { DefaultAllowlist, sanitizeHtml } from './sanitizer'
-import { getElement, isElement } from '../util/index'
-import SelectorEngine from '../dom/selector-engine'
-import Config from './config'
+import { DefaultAllowlist, sanitizeHtml } from './sanitizer.js'
+import { execute, getElement, isElement } from './index.js'
+import SelectorEngine from '../dom/selector-engine.js'
+import Config from './config.js'
/**
* Constants
@@ -143,7 +143,7 @@ class TemplateFactory extends Config {
}
_resolvePossibleFunction(arg) {
- return typeof arg === 'function' ? arg(this) : arg
+ return execute(arg, [this])
}
_putElementInTemplate(element, templateElement) {
diff --git a/vendor/twbs/bootstrap/nuget/bootstrap.nuspec b/vendor/twbs/bootstrap/nuget/bootstrap.nuspec
index d2127d4a0..1020a85ac 100644
--- a/vendor/twbs/bootstrap/nuget/bootstrap.nuspec
+++ b/vendor/twbs/bootstrap/nuget/bootstrap.nuspec
@@ -5,16 +5,17 @@
<!-- pulled from package.json -->
<version>5</version>
<title>Bootstrap CSS</title>
- <authors>The Bootstrap Authors, Twitter Inc.</authors>
+ <authors>The Bootstrap Authors</authors>
<owners>bootstrap</owners>
<description>The most popular front-end framework for developing responsive, mobile first projects on the web.</description>
<releaseNotes>https://blog.getbootstrap.com/</releaseNotes>
<summary>Bootstrap framework in CSS. Includes JavaScript.</summary>
<language>en-us</language>
<projectUrl>https://getbootstrap.com/</projectUrl>
+ <repository type="git" url="https://github.com/twbs/bootstrap.git" branch="main" />
<icon>bootstrap.png</icon>
<license type="expression">MIT</license>
- <copyright>Copyright 2017-2022</copyright>
+ <copyright>Copyright 2011-2022</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<tags>css mobile-first responsive front-end framework web</tags>
<contentFiles>
diff --git a/vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec b/vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec
index ef2284f15..1e217cddb 100644
--- a/vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec
+++ b/vendor/twbs/bootstrap/nuget/bootstrap.sass.nuspec
@@ -5,16 +5,17 @@
<!-- pulled from package.json -->
<version>5</version>
<title>Bootstrap Sass</title>
- <authors>The Bootstrap Authors, Twitter Inc.</authors>
+ <authors>The Bootstrap Authors</authors>
<owners>bootstrap</owners>
<description>The most popular front-end framework for developing responsive, mobile first projects on the web.</description>
<releaseNotes>https://blog.getbootstrap.com/</releaseNotes>
<summary>Bootstrap framework in Sass. Includes JavaScript</summary>
<language>en-us</language>
<projectUrl>https://getbootstrap.com/</projectUrl>
+ <repository type="git" url="https://github.com/twbs/bootstrap.git" branch="main" />
<icon>bootstrap.png</icon>
<license type="expression">MIT</license>
- <copyright>Copyright 2017-2022</copyright>
+ <copyright>Copyright 2011-2022</copyright>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<tags>css sass mobile-first responsive front-end framework web</tags>
<contentFiles>
diff --git a/vendor/twbs/bootstrap/package-lock.json b/vendor/twbs/bootstrap/package-lock.json
index a4287b27b..75ce9bf1e 100644
--- a/vendor/twbs/bootstrap/package-lock.json
+++ b/vendor/twbs/bootstrap/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "bootstrap",
- "version": "5.2.2",
+ "version": "5.3.0-alpha1",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "bootstrap",
- "version": "5.2.2",
+ "version": "5.3.0-alpha1",
"funding": [
{
"type": "github",
@@ -20,29 +20,29 @@
"license": "MIT",
"devDependencies": {
"@babel/cli": "^7.19.3",
- "@babel/core": "^7.19.3",
- "@babel/preset-env": "^7.19.3",
+ "@babel/core": "^7.20.5",
+ "@babel/preset-env": "^7.20.2",
"@popperjs/core": "^2.11.6",
- "@rollup/plugin-babel": "^5.3.1",
- "@rollup/plugin-commonjs": "^22.0.2",
- "@rollup/plugin-node-resolve": "^14.1.0",
- "@rollup/plugin-replace": "^4.0.0",
- "autoprefixer": "^10.4.12",
+ "@rollup/plugin-babel": "^6.0.3",
+ "@rollup/plugin-commonjs": "^24.0.0",
+ "@rollup/plugin-node-resolve": "^15.0.1",
+ "@rollup/plugin-replace": "^5.0.2",
+ "autoprefixer": "^10.4.13",
"bundlewatch": "^0.3.3",
"clean-css-cli": "^5.6.1",
"cross-env": "^7.0.3",
- "eslint": "^8.24.0",
- "eslint-config-xo": "^0.42.0",
+ "eslint": "^8.30.0",
+ "eslint-config-xo": "^0.43.1",
"eslint-plugin-html": "^7.1.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-markdown": "^3.0.0",
- "eslint-plugin-unicorn": "^44.0.0",
- "find-unused-sass-variables": "^4.0.4",
+ "eslint-plugin-unicorn": "^45.0.2",
+ "find-unused-sass-variables": "^4.0.5",
"globby": "^11.1.0",
"hammer-simulator": "0.0.1",
- "hugo-bin": "^0.92.2",
+ "hugo-bin": "^0.96.0",
"ip": "^2.0.0",
- "jquery": "^3.6.1",
+ "jquery": "^3.6.2",
"karma": "^6.4.1",
"karma-browserstack-launcher": "1.4.0",
"karma-chrome-launcher": "^3.1.1",
@@ -52,19 +52,19 @@
"karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^2.0.0",
"karma-rollup-preprocessor": "7.0.7",
- "lockfile-lint": "^4.9.5",
+ "lockfile-lint": "^4.9.6",
"nodemon": "^2.0.20",
"npm-run-all": "^4.1.5",
- "postcss": "^8.4.17",
- "postcss-cli": "^10.0.0",
- "rollup": "^2.79.1",
- "rollup-plugin-istanbul": "^3.0.0",
+ "postcss": "^8.4.20",
+ "postcss-cli": "^10.1.0",
+ "rollup": "^3.7.5",
+ "rollup-plugin-istanbul": "^4.0.0",
"rtlcss": "^4.0.0",
- "sass": "^1.55.0",
+ "sass": "^1.57.1",
"shelljs": "^0.8.5",
- "stylelint": "^14.13.0",
- "stylelint-config-twbs-bootstrap": "^6.0.0",
- "terser": "^5.15.0",
+ "stylelint": "^14.16.0",
+ "stylelint-config-twbs-bootstrap": "^7.0.0",
+ "terser": "5.16.0",
"vnu-jar": "22.9.29"
},
"peerDependencies": {
@@ -126,30 +126,30 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz",
- "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz",
+ "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz",
- "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz",
+ "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.19.3",
- "@babel/helper-compilation-targets": "^7.19.3",
- "@babel/helper-module-transforms": "^7.19.0",
- "@babel/helpers": "^7.19.0",
- "@babel/parser": "^7.19.3",
+ "@babel/generator": "^7.20.5",
+ "@babel/helper-compilation-targets": "^7.20.0",
+ "@babel/helper-module-transforms": "^7.20.2",
+ "@babel/helpers": "^7.20.5",
+ "@babel/parser": "^7.20.5",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.3",
- "@babel/types": "^7.19.3",
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -165,12 +165,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz",
- "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
+ "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.19.3",
+ "@babel/types": "^7.20.5",
"@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
},
@@ -218,12 +218,12 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz",
- "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz",
+ "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.19.3",
+ "@babel/compat-data": "^7.20.0",
"@babel/helper-validator-option": "^7.18.6",
"browserslist": "^4.21.3",
"semver": "^6.3.0"
@@ -236,9 +236,9 @@
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz",
- "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz",
+ "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
@@ -246,7 +246,7 @@
"@babel/helper-function-name": "^7.19.0",
"@babel/helper-member-expression-to-functions": "^7.18.9",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-replace-supers": "^7.19.1",
"@babel/helper-split-export-declaration": "^7.18.6"
},
"engines": {
@@ -257,13 +257,13 @@
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz",
- "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
+ "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "regexpu-core": "^5.1.0"
+ "regexpu-core": "^5.2.1"
},
"engines": {
"node": ">=6.9.0"
@@ -360,19 +360,19 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
- "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz",
+ "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
+ "@babel/helper-simple-access": "^7.20.2",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.19.1",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
+ "@babel/traverse": "^7.20.1",
+ "@babel/types": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
@@ -391,9 +391,9 @@
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
- "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
+ "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -434,24 +434,24 @@
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
+ "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
- "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
+ "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.9"
+ "@babel/types": "^7.20.0"
},
"engines": {
"node": ">=6.9.0"
@@ -470,9 +470,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
- "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+ "version": "7.19.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+ "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -497,29 +497,29 @@
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz",
- "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
+ "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
"dev": true,
"dependencies": {
"@babel/helper-function-name": "^7.19.0",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
- "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz",
+ "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==",
"dev": true,
"dependencies": {
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5"
},
"engines": {
"node": ">=6.9.0"
@@ -540,9 +540,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz",
- "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
+ "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -584,9 +584,9 @@
}
},
"node_modules/@babel/plugin-proposal-async-generator-functions": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz",
- "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==",
+ "version": "7.20.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz",
+ "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==",
"dev": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
@@ -731,16 +731,16 @@
}
},
"node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
- "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz",
+ "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.18.8",
- "@babel/helper-compilation-targets": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/compat-data": "^7.20.1",
+ "@babel/helper-compilation-targets": "^7.20.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.18.8"
+ "@babel/plugin-transform-parameters": "^7.20.1"
},
"engines": {
"node": ">=6.9.0"
@@ -799,14 +799,14 @@
}
},
"node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
- "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
+ "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-create-class-features-plugin": "^7.20.5",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
@@ -896,12 +896,12 @@
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
- "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
+ "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1072,12 +1072,12 @@
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
- "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz",
+ "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
@@ -1087,18 +1087,18 @@
}
},
"node_modules/@babel/plugin-transform-classes": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz",
- "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz",
+ "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==",
"dev": true,
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-compilation-targets": "^7.19.0",
+ "@babel/helper-compilation-targets": "^7.20.0",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-function-name": "^7.19.0",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.19.0",
- "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-replace-supers": "^7.19.1",
"@babel/helper-split-export-declaration": "^7.18.6",
"globals": "^11.1.0"
},
@@ -1125,12 +1125,12 @@
}
},
"node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz",
- "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz",
+ "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
@@ -1249,14 +1249,13 @@
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
- "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz",
+ "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
@@ -1266,15 +1265,14 @@
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
- "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz",
+ "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/helper-simple-access": "^7.19.4"
},
"engines": {
"node": ">=6.9.0"
@@ -1284,16 +1282,15 @@
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz",
- "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz",
+ "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==",
"dev": true,
"dependencies": {
"@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-module-transforms": "^7.19.0",
+ "@babel/helper-module-transforms": "^7.19.6",
"@babel/helper-plugin-utils": "^7.19.0",
- "@babel/helper-validator-identifier": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-validator-identifier": "^7.19.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1319,13 +1316,13 @@
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
- "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
+ "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.19.0",
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.20.5",
+ "@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
@@ -1366,12 +1363,12 @@
}
},
"node_modules/@babel/plugin-transform-parameters": {
- "version": "7.18.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
- "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz",
+ "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
@@ -1396,13 +1393,13 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
- "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
+ "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "regenerator-transform": "^0.15.0"
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "regenerator-transform": "^0.15.1"
},
"engines": {
"node": ">=6.9.0"
@@ -1534,18 +1531,18 @@
}
},
"node_modules/@babel/preset-env": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.3.tgz",
- "integrity": "sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz",
+ "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.19.3",
- "@babel/helper-compilation-targets": "^7.19.3",
- "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/compat-data": "^7.20.1",
+ "@babel/helper-compilation-targets": "^7.20.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-validator-option": "^7.18.6",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
- "@babel/plugin-proposal-async-generator-functions": "^7.19.1",
+ "@babel/plugin-proposal-async-generator-functions": "^7.20.1",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-proposal-class-static-block": "^7.18.6",
"@babel/plugin-proposal-dynamic-import": "^7.18.6",
@@ -1554,7 +1551,7 @@
"@babel/plugin-proposal-logical-assignment-operators": "^7.18.9",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
"@babel/plugin-proposal-numeric-separator": "^7.18.6",
- "@babel/plugin-proposal-object-rest-spread": "^7.18.9",
+ "@babel/plugin-proposal-object-rest-spread": "^7.20.2",
"@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
"@babel/plugin-proposal-optional-chaining": "^7.18.9",
"@babel/plugin-proposal-private-methods": "^7.18.6",
@@ -1565,7 +1562,7 @@
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.18.6",
+ "@babel/plugin-syntax-import-assertions": "^7.20.0",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
@@ -1578,10 +1575,10 @@
"@babel/plugin-transform-arrow-functions": "^7.18.6",
"@babel/plugin-transform-async-to-generator": "^7.18.6",
"@babel/plugin-transform-block-scoped-functions": "^7.18.6",
- "@babel/plugin-transform-block-scoping": "^7.18.9",
- "@babel/plugin-transform-classes": "^7.19.0",
+ "@babel/plugin-transform-block-scoping": "^7.20.2",
+ "@babel/plugin-transform-classes": "^7.20.2",
"@babel/plugin-transform-computed-properties": "^7.18.9",
- "@babel/plugin-transform-destructuring": "^7.18.13",
+ "@babel/plugin-transform-destructuring": "^7.20.2",
"@babel/plugin-transform-dotall-regex": "^7.18.6",
"@babel/plugin-transform-duplicate-keys": "^7.18.9",
"@babel/plugin-transform-exponentiation-operator": "^7.18.6",
@@ -1589,14 +1586,14 @@
"@babel/plugin-transform-function-name": "^7.18.9",
"@babel/plugin-transform-literals": "^7.18.9",
"@babel/plugin-transform-member-expression-literals": "^7.18.6",
- "@babel/plugin-transform-modules-amd": "^7.18.6",
- "@babel/plugin-transform-modules-commonjs": "^7.18.6",
- "@babel/plugin-transform-modules-systemjs": "^7.19.0",
+ "@babel/plugin-transform-modules-amd": "^7.19.6",
+ "@babel/plugin-transform-modules-commonjs": "^7.19.6",
+ "@babel/plugin-transform-modules-systemjs": "^7.19.6",
"@babel/plugin-transform-modules-umd": "^7.18.6",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
"@babel/plugin-transform-new-target": "^7.18.6",
"@babel/plugin-transform-object-super": "^7.18.6",
- "@babel/plugin-transform-parameters": "^7.18.8",
+ "@babel/plugin-transform-parameters": "^7.20.1",
"@babel/plugin-transform-property-literals": "^7.18.6",
"@babel/plugin-transform-regenerator": "^7.18.6",
"@babel/plugin-transform-reserved-words": "^7.18.6",
@@ -1608,7 +1605,7 @@
"@babel/plugin-transform-unicode-escapes": "^7.18.10",
"@babel/plugin-transform-unicode-regex": "^7.18.6",
"@babel/preset-modules": "^0.1.5",
- "@babel/types": "^7.19.3",
+ "@babel/types": "^7.20.2",
"babel-plugin-polyfill-corejs2": "^0.3.3",
"babel-plugin-polyfill-corejs3": "^0.6.0",
"babel-plugin-polyfill-regenerator": "^0.4.1",
@@ -1639,12 +1636,12 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
- "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz",
+ "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==",
"dev": true,
"dependencies": {
- "regenerator-runtime": "^0.13.4"
+ "regenerator-runtime": "^0.13.11"
},
"engines": {
"node": ">=6.9.0"
@@ -1665,19 +1662,19 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz",
- "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
+ "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.19.3",
+ "@babel/generator": "^7.20.5",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-function-name": "^7.19.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.19.3",
- "@babel/types": "^7.19.3",
+ "@babel/parser": "^7.20.5",
+ "@babel/types": "^7.20.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -1686,12 +1683,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz",
- "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
+ "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.18.10",
+ "@babel/helper-string-parser": "^7.19.4",
"@babel/helper-validator-identifier": "^7.19.1",
"to-fast-properties": "^2.0.0"
},
@@ -1725,16 +1722,31 @@
"postcss-selector-parser": "^6.0.10"
}
},
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz",
+ "integrity": "sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/@eslint/eslintrc": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz",
- "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz",
+ "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
"espree": "^9.4.0",
- "globals": "^13.15.0",
+ "globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -1749,9 +1761,9 @@
}
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.17.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
- "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "version": "13.19.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -1776,29 +1788,19 @@
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.10.7",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz",
- "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==",
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
"dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
- "minimatch": "^3.0.4"
+ "minimatch": "^3.0.5"
},
"engines": {
"node": ">=10.10.0"
}
},
- "node_modules/@humanwhocodes/gitignore-to-minimatch": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
- "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -1889,13 +1891,13 @@
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
"dev": true,
"dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
}
},
"node_modules/@nicolo-ribaudo/chokidar-2": {
@@ -1951,105 +1953,164 @@
}
},
"node_modules/@rollup/plugin-babel": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
- "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz",
+ "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.10.4",
- "@rollup/pluginutils": "^3.1.0"
+ "@babel/helper-module-imports": "^7.18.6",
+ "@rollup/pluginutils": "^5.0.1"
},
"engines": {
- "node": ">= 10.0.0"
+ "node": ">=14.0.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0",
"@types/babel__core": "^7.1.9",
- "rollup": "^1.20.0||^2.0.0"
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
},
"peerDependenciesMeta": {
"@types/babel__core": {
"optional": true
+ },
+ "rollup": {
+ "optional": true
}
}
},
"node_modules/@rollup/plugin-commonjs": {
- "version": "22.0.2",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz",
- "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==",
+ "version": "24.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.0.tgz",
+ "integrity": "sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==",
"dev": true,
"dependencies": {
- "@rollup/pluginutils": "^3.1.0",
+ "@rollup/pluginutils": "^5.0.1",
"commondir": "^1.0.1",
- "estree-walker": "^2.0.1",
- "glob": "^7.1.6",
- "is-reference": "^1.2.1",
- "magic-string": "^0.25.7",
- "resolve": "^1.17.0"
+ "estree-walker": "^2.0.2",
+ "glob": "^8.0.3",
+ "is-reference": "1.2.1",
+ "magic-string": "^0.27.0"
},
"engines": {
- "node": ">= 12.0.0"
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "rollup": "^2.68.0"
+ "rollup": "^2.68.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/glob": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
+ "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@rollup/plugin-commonjs/node_modules/minimatch": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz",
+ "integrity": "sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
}
},
"node_modules/@rollup/plugin-node-resolve": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz",
- "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==",
+ "version": "15.0.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz",
+ "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==",
"dev": true,
"dependencies": {
- "@rollup/pluginutils": "^3.1.0",
- "@types/resolve": "1.17.1",
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
"deepmerge": "^4.2.2",
- "is-builtin-module": "^3.1.0",
+ "is-builtin-module": "^3.2.0",
"is-module": "^1.0.0",
- "resolve": "^1.19.0"
+ "resolve": "^1.22.1"
},
"engines": {
- "node": ">= 10.0.0"
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "rollup": "^2.78.0"
+ "rollup": "^2.78.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
}
},
"node_modules/@rollup/plugin-replace": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-4.0.0.tgz",
- "integrity": "sha512-+rumQFiaNac9y64OHtkHGmdjm7us9bo1PlbgQfdihQtuNxzjpaB064HbRnewUOggLQxVCCyINfStkgmBeQpv1g==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz",
+ "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==",
"dev": true,
"dependencies": {
- "@rollup/pluginutils": "^3.1.0",
- "magic-string": "^0.25.7"
+ "@rollup/pluginutils": "^5.0.1",
+ "magic-string": "^0.27.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "rollup": "^1.20.0 || ^2.0.0"
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
}
},
"node_modules/@rollup/pluginutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
- "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
+ "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==",
"dev": true,
"dependencies": {
- "@types/estree": "0.0.39",
- "estree-walker": "^1.0.1",
- "picomatch": "^2.2.2"
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
},
"engines": {
- "node": ">= 8.0.0"
+ "node": ">=14.0.0"
},
"peerDependencies": {
- "rollup": "^1.20.0||^2.0.0"
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
}
},
- "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
- "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
- "dev": true
- },
"node_modules/@sindresorhus/is": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
@@ -2072,15 +2133,18 @@
"dev": true
},
"node_modules/@types/cors": {
- "version": "2.8.12",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
- "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==",
- "dev": true
+ "version": "2.8.13",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
+ "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
},
"node_modules/@types/estree": {
- "version": "0.0.39",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
- "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
+ "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
"dev": true
},
"node_modules/@types/json5": {
@@ -2105,9 +2169,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "18.7.23",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz",
- "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==",
+ "version": "18.11.14",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.14.tgz",
+ "integrity": "sha512-0KXV57tENYmmJMl+FekeW9V3O/rlcqGQQJ/hNh9r8pKIj304pskWuEd8fCyNT86g/TpO0gcOTiLzsHLEURFMIQ==",
"dev": true
},
"node_modules/@types/normalize-package-data": {
@@ -2123,13 +2187,10 @@
"dev": true
},
"node_modules/@types/resolve": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
- "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+ "dev": true
},
"node_modules/@types/unist": {
"version": "2.0.6",
@@ -2138,9 +2199,9 @@
"dev": true
},
"node_modules/@yarnpkg/parsers": {
- "version": "3.0.0-rc.22",
- "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz",
- "integrity": "sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg==",
+ "version": "3.0.0-rc.33",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.33.tgz",
+ "integrity": "sha512-az35wEPH00kW6eZDqHC0BumzAB4XD+YJb1b5tHEfsy73viCN7uGy8kvutwig5bgVwt1Hx7GuU09G50Sc5osBlA==",
"dev": true,
"dependencies": {
"js-yaml": "^3.10.0",
@@ -2192,9 +2253,9 @@
}
},
"node_modules/acorn": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
- "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "version": "8.8.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -2262,9 +2323,9 @@
}
},
"node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
@@ -2322,15 +2383,15 @@
"dev": true
},
"node_modules/array-includes": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
- "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5",
- "get-intrinsic": "^1.1.1",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
"is-string": "^1.0.7"
},
"engines": {
@@ -2350,14 +2411,14 @@
}
},
"node_modules/array.prototype.flat": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
- "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
"es-shim-unscopables": "^1.0.0"
},
"engines": {
@@ -2386,9 +2447,9 @@
}
},
"node_modules/autoprefixer": {
- "version": "10.4.12",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
- "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
+ "version": "10.4.13",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+ "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
"dev": true,
"funding": [
{
@@ -2402,7 +2463,7 @@
],
"dependencies": {
"browserslist": "^4.21.4",
- "caniuse-lite": "^1.0.30001407",
+ "caniuse-lite": "^1.0.30001426",
"fraction.js": "^4.2.0",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
@@ -2427,15 +2488,6 @@
"follow-redirects": "^1.14.4"
}
},
- "node_modules/babel-plugin-dynamic-import-node": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
- "dev": true,
- "dependencies": {
- "object.assign": "^4.1.0"
- }
- },
"node_modules/babel-plugin-polyfill-corejs2": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
@@ -2721,9 +2773,9 @@
"dev": true
},
"node_modules/body-parser": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
- "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"dev": true,
"dependencies": {
"bytes": "3.1.2",
@@ -2734,7 +2786,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.10.3",
+ "qs": "6.11.0",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -3107,9 +3159,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001414",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz",
- "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==",
+ "version": "1.0.30001439",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz",
+ "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==",
"dev": true,
"funding": [
{
@@ -3227,10 +3279,13 @@
"dev": true
},
"node_modules/ci-info": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz",
- "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==",
- "dev": true
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz",
+ "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
},
"node_modules/clean-css": {
"version": "5.3.1",
@@ -3403,26 +3458,6 @@
"node": ">= 0.6"
}
},
- "node_modules/content-disposition/node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
"node_modules/content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
@@ -3433,13 +3468,10 @@
}
},
"node_modules/convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.1"
- }
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
},
"node_modules/cookie": {
"version": "0.4.2",
@@ -3451,9 +3483,9 @@
}
},
"node_modules/core-js-compat": {
- "version": "3.25.3",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.3.tgz",
- "integrity": "sha512-xVtYpJQ5grszDHEUU9O7XbjjcZ0ccX3LgQsyqSvTnjX97ZqEgn9F5srmrwwwMtbKzDllyFPL+O+2OFMl1lU4TQ==",
+ "version": "3.26.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz",
+ "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==",
"dev": true,
"dependencies": {
"browserslist": "^4.21.4"
@@ -3483,9 +3515,9 @@
}
},
"node_modules/cosmiconfig": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
- "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
"dev": true,
"dependencies": {
"@types/parse-json": "^4.0.0",
@@ -3599,9 +3631,9 @@
}
},
"node_modules/decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
"dev": true,
"dependencies": {
"decamelize": "^1.1.0",
@@ -3609,6 +3641,9 @@
},
"engines": {
"node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/decamelize-keys/node_modules/map-obj": {
@@ -3621,9 +3656,9 @@
}
},
"node_modules/decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==",
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
"dev": true,
"engines": {
"node": ">=0.10"
@@ -4035,9 +4070,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
- "version": "1.4.270",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz",
- "integrity": "sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg==",
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
"dev": true
},
"node_modules/emoji-regex": {
@@ -4065,9 +4100,9 @@
}
},
"node_modules/engine.io": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
- "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz",
+ "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==",
"dev": true,
"dependencies": {
"@types/cookie": "^0.4.1",
@@ -4122,9 +4157,9 @@
}
},
"node_modules/es-abstract": {
- "version": "1.20.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz",
- "integrity": "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==",
+ "version": "1.20.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz",
+ "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
@@ -4133,11 +4168,12 @@
"function.prototype.name": "^1.1.5",
"get-intrinsic": "^1.1.3",
"get-symbol-description": "^1.0.0",
+ "gopd": "^1.0.1",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
- "is-callable": "^1.2.6",
+ "is-callable": "^1.2.7",
"is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
@@ -4148,8 +4184,8 @@
"object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.4.3",
"safe-regex-test": "^1.0.0",
- "string.prototype.trimend": "^1.0.5",
- "string.prototype.trimstart": "^1.0.5",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
"unbox-primitive": "^1.0.2"
},
"engines": {
@@ -4225,15 +4261,15 @@
}
},
"node_modules/eslint": {
- "version": "8.24.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz",
- "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==",
+ "version": "8.30.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz",
+ "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==",
"dev": true,
"dependencies": {
- "@eslint/eslintrc": "^1.3.2",
- "@humanwhocodes/config-array": "^0.10.5",
- "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
+ "@eslint/eslintrc": "^1.4.0",
+ "@humanwhocodes/config-array": "^0.11.8",
"@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -4249,14 +4285,14 @@
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"find-up": "^5.0.0",
- "glob-parent": "^6.0.1",
- "globals": "^13.15.0",
- "globby": "^11.1.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
"js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
@@ -4281,9 +4317,9 @@
}
},
"node_modules/eslint-config-xo": {
- "version": "0.42.0",
- "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.42.0.tgz",
- "integrity": "sha512-HIfd+AM6tHFoaZ/NXYDV3Mr/CJrAj/DoP6IOYt1/v+90XtCwVYOfW7LXbRDYDmhQMzT16h7eqPRcex72waRqdA==",
+ "version": "0.43.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.43.1.tgz",
+ "integrity": "sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==",
"dev": true,
"dependencies": {
"confusing-browser-globals": "1.0.11"
@@ -4295,7 +4331,7 @@
"url": "https://github.com/sponsors/sindresorhus"
},
"peerDependencies": {
- "eslint": ">=8.14.0"
+ "eslint": ">=8.27.0"
}
},
"node_modules/eslint-import-resolver-node": {
@@ -4422,24 +4458,26 @@
}
},
"node_modules/eslint-plugin-unicorn": {
- "version": "44.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-44.0.0.tgz",
- "integrity": "sha512-GbkxkdNzY7wNEfZnraAP+oA+aqqzSrNZmO37kjW1DyqnSK/ah08ySDdIecObpx46twv+zcQvH8i0CHP98Wo64w==",
+ "version": "45.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz",
+ "integrity": "sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.19.1",
- "ci-info": "^3.4.0",
+ "@eslint-community/eslint-utils": "^4.1.2",
+ "ci-info": "^3.6.1",
"clean-regexp": "^1.0.0",
- "eslint-utils": "^3.0.0",
"esquery": "^1.4.0",
"indent-string": "^4.0.0",
"is-builtin-module": "^3.2.0",
+ "jsesc": "^3.0.2",
"lodash": "^4.17.21",
"pluralize": "^8.0.0",
"read-pkg-up": "^7.0.1",
"regexp-tree": "^0.1.24",
+ "regjsparser": "^0.9.1",
"safe-regex": "^2.1.1",
- "semver": "^7.3.7",
+ "semver": "^7.3.8",
"strip-indent": "^3.0.0"
},
"engines": {
@@ -4449,13 +4487,25 @@
"url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1"
},
"peerDependencies": {
- "eslint": ">=8.23.1"
+ "eslint": ">=8.28.0"
+ }
+ },
+ "node_modules/eslint-plugin-unicorn/node_modules/jsesc": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+ "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/eslint-plugin-unicorn/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -4590,9 +4640,9 @@
}
},
"node_modules/eslint/node_modules/globals": {
- "version": "13.17.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
- "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "version": "13.19.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -4638,9 +4688,9 @@
}
},
"node_modules/espree": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
- "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
"dev": true,
"dependencies": {
"acorn": "^8.8.0",
@@ -4895,9 +4945,9 @@
}
},
"node_modules/fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz",
+ "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==",
"dev": true,
"dependencies": {
"reusify": "^1.0.4"
@@ -5014,17 +5064,17 @@
}
},
"node_modules/find-unused-sass-variables": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/find-unused-sass-variables/-/find-unused-sass-variables-4.0.4.tgz",
- "integrity": "sha512-qs/dd5W66o17OW5bmndaOeEdHj9pNSrFcy9YMRgRE1JTYVAB0UvQszSF7F44xlAzcEV17wDp5liY6C79UxBsQQ==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/find-unused-sass-variables/-/find-unused-sass-variables-4.0.5.tgz",
+ "integrity": "sha512-g/VikpyoOi3bpGnNQDhaqeOJtp+qvK6xNJXEOe/M+FFRpR6X74f2/R+x95WaLE+BemFlJBS5IXqs6hw6a8HCzQ==",
"dev": true,
"dependencies": {
- "commander": "^9.1.0",
+ "commander": "^9.4.1",
"escape-string-regexp": "^5.0.0",
- "glob": "^7.2.0",
+ "glob": "^7.2.3",
"picocolors": "^1.0.0",
- "postcss": "^8.4.12",
- "postcss-scss": "^4.0.3"
+ "postcss": "^8.4.19",
+ "postcss-scss": "^4.0.5"
},
"bin": {
"find-unused-sass-variables": "cli.js",
@@ -5155,9 +5205,9 @@
"dev": true
},
"node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
+ "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
@@ -5165,7 +5215,7 @@
"universalify": "^2.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=14.14"
}
},
"node_modules/fs-readdir-recursive": {
@@ -5449,6 +5499,18 @@
"integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
"dev": true
},
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/got": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
@@ -5729,9 +5791,9 @@
}
},
"node_modules/hugo-bin": {
- "version": "0.92.2",
- "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.92.2.tgz",
- "integrity": "sha512-1C5NfDinq5C/NFNkj9ZMFb5z0h3R7gN9C8Lx0Vv+1Xtfi72RyteeiGZA82eLr6pbHfL3coBO7Rq9MW3pHtC5mg==",
+ "version": "0.96.0",
+ "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.96.0.tgz",
+ "integrity": "sha512-a85/ZvD7NJ/Puz8/fRKVhHxxB/+qaN96fdOxHrtTeqsnZXXcpMGuD3LhN4h8xeqfAfJHWroeI2R7bPfnr+qmWg==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
@@ -5780,9 +5842,9 @@
]
},
"node_modules/ignore": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
+ "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -6005,9 +6067,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
- "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -6153,6 +6215,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-plain-obj": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
@@ -6314,14 +6385,15 @@
}
},
"node_modules/istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.7.5",
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
"@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-coverage": "^3.2.0",
"semver": "^6.3.0"
},
"engines": {
@@ -6442,22 +6514,26 @@
}
},
"node_modules/jasmine-core": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.4.0.tgz",
- "integrity": "sha512-+l482uImx5BVd6brJYlaHe2UwfKoZBqQfNp20ZmdNfsjGFTemGfqHLsXjKEW23w9R/m8WYeFc9JmIgjj6dUtAA==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz",
+ "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==",
"dev": true
},
"node_modules/jquery": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz",
- "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.2.tgz",
+ "integrity": "sha512-/e7ulNIEEYk1Z/l4X0vpxGt+B/dNsV8ghOPAWZaJs8pkGvsSC0tm33aMGylXcj/U7y4IcvwtMXPMyBFZn/gK9A==",
"dev": true
},
"node_modules/js-sdsl": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz",
- "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==",
- "dev": true
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
+ "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/js-sdsl"
+ }
},
"node_modules/js-tokens": {
"version": "4.0.0",
@@ -6730,9 +6806,9 @@
}
},
"node_modules/known-css-properties": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz",
- "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==",
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
+ "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
"dev": true
},
"node_modules/levn": {
@@ -6797,14 +6873,14 @@
}
},
"node_modules/lockfile-lint": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/lockfile-lint/-/lockfile-lint-4.9.5.tgz",
- "integrity": "sha512-e68R3cATGvoi+aY4t7lTLvLSif34qBO/r6jwDdUxz4+hNiQIuZkrg6mMfasc/0AfIwaIhZBLW+pxjp1Vhm8uAA==",
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/lockfile-lint/-/lockfile-lint-4.9.6.tgz",
+ "integrity": "sha512-qPI3QcEflvGylCtXyxTh0anhi1oYxD12L3ZwQYaxLjxpWUI73+EbFMsl9esqcbgSKAh4wes5y6fbG8hbQTgjyg==",
"dev": true,
"dependencies": {
"cosmiconfig": "^7.0.1",
"debug": "^4.1.1",
- "lockfile-lint-api": "^5.4.5",
+ "lockfile-lint-api": "^5.4.6",
"yargs": "^16.0.0"
},
"bin": {
@@ -6815,9 +6891,9 @@
}
},
"node_modules/lockfile-lint-api": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/lockfile-lint-api/-/lockfile-lint-api-5.4.5.tgz",
- "integrity": "sha512-Pooj7ubhfpyEYBIoR6/7+cqFElsRlC6NMHvnjIV1Y1lfWDWj+9xWikvL7XS7AlNIhg6UThnxfiF1venGyWz9NQ==",
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/lockfile-lint-api/-/lockfile-lint-api-5.4.6.tgz",
+ "integrity": "sha512-3Sp01oBI0LWZNvKfGQ04G03+dXkjAvEvRiAQNZsvdVmCGP6vOXPCuPEimStf+RSo8PnjApdb65RAUh6aSZXsVQ==",
"dev": true,
"dependencies": {
"@yarnpkg/parsers": "^3.0.0-rc.6",
@@ -6852,9 +6928,9 @@
"dev": true
},
"node_modules/log4js": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz",
- "integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==",
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz",
+ "integrity": "sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ==",
"dev": true,
"dependencies": {
"date-format": "^4.0.14",
@@ -6889,12 +6965,15 @@
}
},
"node_modules/magic-string": {
- "version": "0.25.9",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
- "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
+ "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
"dev": true,
"dependencies": {
- "sourcemap-codec": "^1.4.8"
+ "@jridgewell/sourcemap-codec": "^1.4.13"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/make-dir": {
@@ -7040,9 +7119,9 @@
}
},
"node_modules/meow/node_modules/semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -7172,10 +7251,13 @@
}
},
"node_modules/minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
- "dev": true
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/minimist-options": {
"version": "4.1.0",
@@ -7243,9 +7325,9 @@
"dev": true
},
"node_modules/node-releases": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
- "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.7.tgz",
+ "integrity": "sha512-EJ3rzxL9pTWPjk5arA0s0dgXpnyiAbJDE6wHT62g7VsgrgQgmmZ+Ru++M1BFofncWja+Pnn3rEr3fieRySAdKQ==",
"dev": true
},
"node_modules/nodemon": {
@@ -7552,14 +7634,14 @@
}
},
"node_modules/object.values": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
- "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
},
"engines": {
"node": ">= 0.4"
@@ -7981,9 +8063,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.17",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz",
- "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==",
+ "version": "8.4.20",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz",
+ "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==",
"dev": true,
"funding": [
{
@@ -8005,14 +8087,14 @@
}
},
"node_modules/postcss-cli": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.0.0.tgz",
- "integrity": "sha512-Wjy/00wBBEgQqnSToznxLWDnATznokFGXsHtF/3G8glRZpz5KYlfHcBW/VMJmWAeF2x49zjgy4izjM3/Wx1dKA==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz",
+ "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==",
"dev": true,
"dependencies": {
"chokidar": "^3.3.0",
"dependency-graph": "^0.11.0",
- "fs-extra": "^10.0.0",
+ "fs-extra": "^11.0.0",
"get-stdin": "^9.0.0",
"globby": "^13.0.0",
"picocolors": "^1.0.0",
@@ -8020,7 +8102,7 @@
"postcss-reporter": "^7.0.0",
"pretty-hrtime": "^1.0.3",
"read-cache": "^1.0.0",
- "slash": "^4.0.0",
+ "slash": "^5.0.0",
"yargs": "^17.0.0"
},
"bin": {
@@ -8048,9 +8130,9 @@
}
},
"node_modules/postcss-cli/node_modules/globby": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz",
- "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==",
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
+ "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
"dev": true,
"dependencies": {
"dir-glob": "^3.0.1",
@@ -8066,7 +8148,7 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/postcss-cli/node_modules/slash": {
+ "node_modules/postcss-cli/node_modules/globby/node_modules/slash": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
"integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
@@ -8078,10 +8160,22 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/postcss-cli/node_modules/slash": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz",
+ "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/postcss-cli/node_modules/yargs": {
- "version": "17.6.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz",
- "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==",
+ "version": "17.6.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz",
+ "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==",
"dev": true,
"dependencies": {
"cliui": "^8.0.1",
@@ -8090,7 +8184,7 @@
"require-directory": "^2.1.1",
"string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
+ "yargs-parser": "^21.1.1"
},
"engines": {
"node": ">=12"
@@ -8135,9 +8229,9 @@
}
},
"node_modules/postcss-load-config/node_modules/yaml": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz",
- "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz",
+ "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==",
"dev": true,
"engines": {
"node": ">= 14"
@@ -8192,9 +8286,9 @@
}
},
"node_modules/postcss-scss": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.5.tgz",
- "integrity": "sha512-F7xpB6TrXyqUh3GKdyB4Gkp3QL3DDW1+uI+gxx/oJnUt/qXI4trj5OGlp9rOKdoABGULuqtqeG+3HEVQk4DjmA==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz",
+ "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==",
"dev": true,
"funding": [
{
@@ -8210,13 +8304,13 @@
"node": ">=12.0"
},
"peerDependencies": {
- "postcss": "^8.3.3"
+ "postcss": "^8.4.19"
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
- "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+ "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -8331,9 +8425,9 @@
}
},
"node_modules/qs": {
- "version": "6.10.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dev": true,
"dependencies": {
"side-channel": "^1.0.4"
@@ -8601,6 +8695,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -8657,15 +8757,15 @@
}
},
"node_modules/regenerator-runtime": {
- "version": "0.13.9",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
- "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
"dev": true
},
"node_modules/regenerator-transform": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
- "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+ "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.8.4"
@@ -8710,9 +8810,9 @@
}
},
"node_modules/regexpu-core": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
- "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
+ "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
"dev": true,
"dependencies": {
"regenerate": "^1.4.2",
@@ -8720,7 +8820,7 @@
"regjsgen": "^0.7.1",
"regjsparser": "^0.9.1",
"unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.0.0"
+ "unicode-match-property-value-ecmascript": "^2.1.0"
},
"engines": {
"node": ">=4"
@@ -8844,44 +8944,37 @@
}
},
"node_modules/rollup": {
- "version": "2.79.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
- "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+ "version": "3.7.5",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.7.5.tgz",
+ "integrity": "sha512-z0ZbqHBtS/et2EEUKMrAl2CoSdwN7ZPzL17UMiKN9RjjqHShTlv7F9J6ZJZJNREYjBh3TvBrdfjkFDIXFNeuiQ==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=10.0.0"
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/rollup-plugin-istanbul": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-istanbul/-/rollup-plugin-istanbul-3.0.0.tgz",
- "integrity": "sha512-z8kD2A57qTcxgqjbJ8cZBBE/IGYk+iJtE42sCaZjrSe/uBEUq5jJYvQwquJ+Acfko1LMYww4EJfeMJmc0GttpQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-istanbul/-/rollup-plugin-istanbul-4.0.0.tgz",
+ "integrity": "sha512-AOauxxl4eAHWdvTnY/uwSrwMkbDymTWUhaD6aym8a4YJaO9hxK2U8bcuhZA0iravuOTUulqPWUbYP7mTV7i4oQ==",
"dev": true,
"dependencies": {
- "@rollup/pluginutils": "^4.1.0",
- "istanbul-lib-instrument": "^4.0.3"
+ "@rollup/pluginutils": "^5.0.2",
+ "istanbul-lib-instrument": "^5.2.1"
},
"peerDependencies": {
- "rollup": "^1.20.0||^2.0.0"
- }
- },
- "node_modules/rollup-plugin-istanbul/node_modules/@rollup/pluginutils": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
- "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
- "dev": true,
- "dependencies": {
- "estree-walker": "^2.0.1",
- "picomatch": "^2.2.2"
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
},
- "engines": {
- "node": ">= 8.0.0"
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
}
},
"node_modules/rtlcss": {
@@ -8926,10 +9019,24 @@
}
},
"node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
},
"node_modules/safe-regex": {
"version": "2.1.1",
@@ -8961,9 +9068,9 @@
"dev": true
},
"node_modules/sass": {
- "version": "1.55.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz",
- "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
+ "version": "1.57.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz",
+ "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==",
"dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -9069,10 +9176,13 @@
}
},
"node_modules/shell-quote": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
- "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
- "dev": true
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz",
+ "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/shelljs": {
"version": "0.8.5",
@@ -9112,9 +9222,9 @@
"dev": true
},
"node_modules/simple-update-notifier": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz",
- "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
+ "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
"dev": true,
"dependencies": {
"semver": "~7.0.0"
@@ -9192,17 +9302,17 @@
"dev": true
},
"node_modules/socket.io": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.2.tgz",
- "integrity": "sha512-6fCnk4ARMPZN448+SQcnn1u8OHUC72puJcNtSgg2xS34Cu7br1gQ09YKkO1PFfDn/wyUE9ZgMAwosJed003+NQ==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz",
+ "integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==",
"dev": true,
"dependencies": {
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
- "engine.io": "~6.2.0",
+ "engine.io": "~6.2.1",
"socket.io-adapter": "~2.4.0",
- "socket.io-parser": "~4.2.0"
+ "socket.io-parser": "~4.2.1"
},
"engines": {
"node": ">=10.0.0"
@@ -9291,12 +9401,6 @@
"source-map": "^0.6.0"
}
},
- "node_modules/sourcemap-codec": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
- "dev": true
- },
"node_modules/spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@@ -9408,6 +9512,12 @@
"safe-buffer": "~5.1.0"
}
},
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -9423,14 +9533,14 @@
}
},
"node_modules/string.prototype.padend": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz",
- "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz",
+ "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
},
"engines": {
"node": ">= 0.4"
@@ -9440,28 +9550,28 @@
}
},
"node_modules/string.prototype.trimend": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
- "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
- "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -9549,15 +9659,15 @@
"dev": true
},
"node_modules/stylelint": {
- "version": "14.13.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.13.0.tgz",
- "integrity": "sha512-NJSAdloiAB/jgVJKxMR90mWlctvmeBFGFVUvyKngi9+j/qPSJ5ZB+u8jOmGbLTnS7OHrII9NFGehPRyar8U5vg==",
+ "version": "14.16.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.0.tgz",
+ "integrity": "sha512-X6uTi9DcxjzLV8ZUAjit1vsRtSwcls0nl07c9rqOPzvpA8IvTX/xWEkBRowS0ffevRrqkHa/ThDEu86u73FQDg==",
"dev": true,
"dependencies": {
"@csstools/selector-specificity": "^2.0.2",
"balanced-match": "^2.0.0",
"colord": "^2.9.3",
- "cosmiconfig": "^7.0.1",
+ "cosmiconfig": "^7.1.0",
"css-functions-list": "^3.1.0",
"debug": "^4.3.4",
"fast-glob": "^3.2.12",
@@ -9567,21 +9677,21 @@
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.2.0",
- "ignore": "^5.2.0",
+ "ignore": "^5.2.1",
"import-lazy": "^4.0.0",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.25.0",
+ "known-css-properties": "^0.26.0",
"mathml-tag-names": "^2.1.3",
"meow": "^9.0.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"picocolors": "^1.0.0",
- "postcss": "^8.4.16",
+ "postcss": "^8.4.19",
"postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^6.0.0",
- "postcss-selector-parser": "^6.0.10",
+ "postcss-selector-parser": "^6.0.11",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
"string-width": "^4.2.3",
@@ -9589,7 +9699,7 @@
"style-search": "^0.1.0",
"supports-hyperlinks": "^2.3.0",
"svg-tags": "^1.0.0",
- "table": "^6.8.0",
+ "table": "^6.8.1",
"v8-compile-cache": "^2.3.0",
"write-file-atomic": "^4.0.2"
},
@@ -9626,90 +9736,72 @@
}
},
"node_modules/stylelint-config-recommended-scss": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-7.0.0.tgz",
- "integrity": "sha512-rGz1J4rMAyJkvoJW4hZasuQBB7y9KIrShb20l9DVEKKZSEi1HAy0vuNlR8HyCKy/jveb/BdaQFcoiYnmx4HoiA==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-8.0.0.tgz",
+ "integrity": "sha512-BxjxEzRaZoQb7Iinc3p92GS6zRdRAkIuEu2ZFLTxJK2e1AIcCb5B5MXY9KOXdGTnYFZ+KKx6R4Fv9zU6CtMYPQ==",
"dev": true,
"dependencies": {
"postcss-scss": "^4.0.2",
- "stylelint-config-recommended": "^8.0.0",
+ "stylelint-config-recommended": "^9.0.0",
"stylelint-scss": "^4.0.0"
},
"peerDependencies": {
- "stylelint": "^14.4.0"
- }
- },
- "node_modules/stylelint-config-recommended-scss/node_modules/stylelint-config-recommended": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-8.0.0.tgz",
- "integrity": "sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ==",
- "dev": true,
- "peerDependencies": {
- "stylelint": "^14.8.0"
+ "postcss": "^8.3.3",
+ "stylelint": "^14.10.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ }
}
},
"node_modules/stylelint-config-standard": {
- "version": "28.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-28.0.0.tgz",
- "integrity": "sha512-q/StuowDdDmFCravzGHAwgS9pjX0bdOQUEBBDIkIWsQuYGgYz/xsO8CM6eepmIQ1fc5bKdDVimlJZ6MoOUcJ5Q==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-29.0.0.tgz",
+ "integrity": "sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==",
"dev": true,
"dependencies": {
"stylelint-config-recommended": "^9.0.0"
},
"peerDependencies": {
- "stylelint": "^14.11.0"
+ "stylelint": "^14.14.0"
}
},
"node_modules/stylelint-config-standard-scss": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-5.0.0.tgz",
- "integrity": "sha512-zoXLibojHZYPFjtkc4STZtAJ2yGTq3Bb4MYO0oiyO6f/vNxDKRcSDZYoqN260Gv2eD5niQIr1/kr5SXlFj9kcQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-6.1.0.tgz",
+ "integrity": "sha512-iZ2B5kQT2G3rUzx+437cEpdcnFOQkwnwqXuY8Z0QUwIHQVE8mnYChGAquyKFUKZRZ0pRnrciARlPaR1RBtPb0Q==",
"dev": true,
"dependencies": {
- "stylelint-config-recommended-scss": "^7.0.0",
- "stylelint-config-standard": "^26.0.0"
+ "stylelint-config-recommended-scss": "^8.0.0",
+ "stylelint-config-standard": "^29.0.0"
},
"peerDependencies": {
- "stylelint": "^14.9.0"
- }
- },
- "node_modules/stylelint-config-standard-scss/node_modules/stylelint-config-recommended": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-8.0.0.tgz",
- "integrity": "sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ==",
- "dev": true,
- "peerDependencies": {
- "stylelint": "^14.8.0"
- }
- },
- "node_modules/stylelint-config-standard-scss/node_modules/stylelint-config-standard": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-26.0.0.tgz",
- "integrity": "sha512-hUuB7LaaqM8abvkOO84wh5oYSkpXgTzHu2Zza6e7mY+aOmpNTjoFBRxSLlzY0uAOMWEFx0OMKzr+reG1BUtcqQ==",
- "dev": true,
- "dependencies": {
- "stylelint-config-recommended": "^8.0.0"
+ "postcss": "^8.3.3",
+ "stylelint": "^14.14.0"
},
- "peerDependencies": {
- "stylelint": "^14.9.0"
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ }
}
},
"node_modules/stylelint-config-twbs-bootstrap": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-twbs-bootstrap/-/stylelint-config-twbs-bootstrap-6.0.0.tgz",
- "integrity": "sha512-lrrhLkw5GqvSYykw6miMvxK7Ff+JSe80eiAlhpJv6z9X0AZdbBUL7bmqTcwgVg3G2OahAv6jejmJh+N9mR5c7w==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-twbs-bootstrap/-/stylelint-config-twbs-bootstrap-7.0.0.tgz",
+ "integrity": "sha512-CZUc+BhBTJFi0Hw/6vq3KqvCaLMCQlFGz1tIAHACEt10QuFBh6IBSTWCr/oU8xS6m4YbYcng7ayPYwn+43l68w==",
"dev": true,
"dependencies": {
"stylelint-config-recess-order": "^3.0.0",
- "stylelint-config-standard": "^28.0.0",
- "stylelint-config-standard-scss": "^5.0.0",
+ "stylelint-config-standard": "^29.0.0",
+ "stylelint-config-standard-scss": "^6.1.0",
"stylelint-scss": "^4.3.0"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
- "stylelint": "^14.11.0"
+ "stylelint": "^14.14.0"
}
},
"node_modules/stylelint-order": {
@@ -9830,9 +9922,9 @@
"dev": true
},
"node_modules/table": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
- "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
+ "version": "6.8.1",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
+ "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
"dev": true,
"dependencies": {
"ajv": "^8.0.1",
@@ -9846,9 +9938,9 @@
}
},
"node_modules/table/node_modules/ajv": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
- "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz",
+ "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -9886,9 +9978,9 @@
}
},
"node_modules/terser": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz",
- "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==",
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz",
+ "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.2",
@@ -10051,9 +10143,9 @@
}
},
"node_modules/tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
"dev": true
},
"node_modules/tunnel-agent": {
@@ -10103,9 +10195,9 @@
}
},
"node_modules/ua-parser-js": {
- "version": "0.7.31",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
- "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==",
+ "version": "0.7.32",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz",
+ "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==",
"dev": true,
"funding": [
{
@@ -10175,9 +10267,9 @@
}
},
"node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
"dev": true,
"engines": {
"node": ">=4"
@@ -10241,9 +10333,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
- "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
"dev": true,
"funding": [
{
@@ -10605,27 +10697,27 @@
}
},
"@babel/compat-data": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz",
- "integrity": "sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz",
+ "integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==",
"dev": true
},
"@babel/core": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz",
- "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz",
+ "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==",
"dev": true,
"requires": {
"@ampproject/remapping": "^2.1.0",
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.19.3",
- "@babel/helper-compilation-targets": "^7.19.3",
- "@babel/helper-module-transforms": "^7.19.0",
- "@babel/helpers": "^7.19.0",
- "@babel/parser": "^7.19.3",
+ "@babel/generator": "^7.20.5",
+ "@babel/helper-compilation-targets": "^7.20.0",
+ "@babel/helper-module-transforms": "^7.20.2",
+ "@babel/helpers": "^7.20.5",
+ "@babel/parser": "^7.20.5",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.3",
- "@babel/types": "^7.19.3",
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -10634,12 +10726,12 @@
}
},
"@babel/generator": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz",
- "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
+ "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
"dev": true,
"requires": {
- "@babel/types": "^7.19.3",
+ "@babel/types": "^7.20.5",
"@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
},
@@ -10677,21 +10769,21 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz",
- "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz",
+ "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.19.3",
+ "@babel/compat-data": "^7.20.0",
"@babel/helper-validator-option": "^7.18.6",
"browserslist": "^4.21.3",
"semver": "^6.3.0"
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz",
- "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz",
+ "integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.18.6",
@@ -10699,18 +10791,18 @@
"@babel/helper-function-name": "^7.19.0",
"@babel/helper-member-expression-to-functions": "^7.18.9",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-replace-supers": "^7.19.1",
"@babel/helper-split-export-declaration": "^7.18.6"
}
},
"@babel/helper-create-regexp-features-plugin": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz",
- "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
+ "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "regexpu-core": "^5.1.0"
+ "regexpu-core": "^5.2.1"
}
},
"@babel/helper-define-polyfill-provider": {
@@ -10780,19 +10872,19 @@
}
},
"@babel/helper-module-transforms": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz",
- "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz",
+ "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==",
"dev": true,
"requires": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
+ "@babel/helper-simple-access": "^7.20.2",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.19.1",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
+ "@babel/traverse": "^7.20.1",
+ "@babel/types": "^7.20.2"
}
},
"@babel/helper-optimise-call-expression": {
@@ -10805,9 +10897,9 @@
}
},
"@babel/helper-plugin-utils": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
- "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
+ "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
"dev": true
},
"@babel/helper-remap-async-to-generator": {
@@ -10836,21 +10928,21 @@
}
},
"@babel/helper-simple-access": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
- "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
+ "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.20.2"
}
},
"@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
- "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
+ "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.9"
+ "@babel/types": "^7.20.0"
}
},
"@babel/helper-split-export-declaration": {
@@ -10863,9 +10955,9 @@
}
},
"@babel/helper-string-parser": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
- "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+ "version": "7.19.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+ "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
"dev": true
},
"@babel/helper-validator-identifier": {
@@ -10881,26 +10973,26 @@
"dev": true
},
"@babel/helper-wrap-function": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz",
- "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
+ "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
"dev": true,
"requires": {
"@babel/helper-function-name": "^7.19.0",
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5"
}
},
"@babel/helpers": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz",
- "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==",
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz",
+ "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==",
"dev": true,
"requires": {
"@babel/template": "^7.18.10",
- "@babel/traverse": "^7.19.0",
- "@babel/types": "^7.19.0"
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5"
}
},
"@babel/highlight": {
@@ -10915,9 +11007,9 @@
}
},
"@babel/parser": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz",
- "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
+ "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==",
"dev": true
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
@@ -10941,9 +11033,9 @@
}
},
"@babel/plugin-proposal-async-generator-functions": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz",
- "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==",
+ "version": "7.20.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz",
+ "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==",
"dev": true,
"requires": {
"@babel/helper-environment-visitor": "^7.18.9",
@@ -11034,16 +11126,16 @@
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
- "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz",
+ "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.18.8",
- "@babel/helper-compilation-targets": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/compat-data": "^7.20.1",
+ "@babel/helper-compilation-targets": "^7.20.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.18.8"
+ "@babel/plugin-transform-parameters": "^7.20.1"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
@@ -11078,14 +11170,14 @@
}
},
"@babel/plugin-proposal-private-property-in-object": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
- "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
+ "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-create-class-features-plugin": "^7.20.5",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
}
},
@@ -11145,12 +11237,12 @@
}
},
"@babel/plugin-syntax-import-assertions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
- "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
+ "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.19.0"
}
},
"@babel/plugin-syntax-json-strings": {
@@ -11264,27 +11356,27 @@
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
- "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz",
+ "integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.20.2"
}
},
"@babel/plugin-transform-classes": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz",
- "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz",
+ "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==",
"dev": true,
"requires": {
"@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-compilation-targets": "^7.19.0",
+ "@babel/helper-compilation-targets": "^7.20.0",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-function-name": "^7.19.0",
"@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.19.0",
- "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-replace-supers": "^7.19.1",
"@babel/helper-split-export-declaration": "^7.18.6",
"globals": "^11.1.0"
}
@@ -11299,12 +11391,12 @@
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.18.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.13.tgz",
- "integrity": "sha512-TodpQ29XekIsex2A+YJPj5ax2plkGa8YYY6mFjCohk/IG9IY42Rtuj1FuDeemfg2ipxIFLzPeA83SIBnlhSIow==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz",
+ "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.20.2"
}
},
"@babel/plugin-transform-dotall-regex": {
@@ -11375,39 +11467,36 @@
}
},
"@babel/plugin-transform-modules-amd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
- "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz",
+ "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0"
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
- "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz",
+ "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-simple-access": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-module-transforms": "^7.19.6",
+ "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/helper-simple-access": "^7.19.4"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.0.tgz",
- "integrity": "sha512-x9aiR0WXAWmOWsqcsnrzGR+ieaTMVyGyffPVA7F8cXAGt/UxefYv6uSHZLkAFChN5M5Iy1+wjE+xJuPt22H39A==",
+ "version": "7.19.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz",
+ "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==",
"dev": true,
"requires": {
"@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-module-transforms": "^7.19.0",
+ "@babel/helper-module-transforms": "^7.19.6",
"@babel/helper-plugin-utils": "^7.19.0",
- "@babel/helper-validator-identifier": "^7.18.6",
- "babel-plugin-dynamic-import-node": "^2.3.3"
+ "@babel/helper-validator-identifier": "^7.19.1"
}
},
"@babel/plugin-transform-modules-umd": {
@@ -11421,13 +11510,13 @@
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
- "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
+ "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.19.0",
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.20.5",
+ "@babel/helper-plugin-utils": "^7.20.2"
}
},
"@babel/plugin-transform-new-target": {
@@ -11450,12 +11539,12 @@
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.18.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
- "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz",
+ "integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.20.2"
}
},
"@babel/plugin-transform-property-literals": {
@@ -11468,13 +11557,13 @@
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
- "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
+ "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "regenerator-transform": "^0.15.0"
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "regenerator-transform": "^0.15.1"
}
},
"@babel/plugin-transform-reserved-words": {
@@ -11552,18 +11641,18 @@
}
},
"@babel/preset-env": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.19.3.tgz",
- "integrity": "sha512-ziye1OTc9dGFOAXSWKUqQblYHNlBOaDl8wzqf2iKXJAltYiR3hKHUKmkt+S9PppW7RQpq4fFCrwwpIDj/f5P4w==",
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz",
+ "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.19.3",
- "@babel/helper-compilation-targets": "^7.19.3",
- "@babel/helper-plugin-utils": "^7.19.0",
+ "@babel/compat-data": "^7.20.1",
+ "@babel/helper-compilation-targets": "^7.20.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-validator-option": "^7.18.6",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
- "@babel/plugin-proposal-async-generator-functions": "^7.19.1",
+ "@babel/plugin-proposal-async-generator-functions": "^7.20.1",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-proposal-class-static-block": "^7.18.6",
"@babel/plugin-proposal-dynamic-import": "^7.18.6",
@@ -11572,7 +11661,7 @@
"@babel/plugin-proposal-logical-assignment-operators": "^7.18.9",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
"@babel/plugin-proposal-numeric-separator": "^7.18.6",
- "@babel/plugin-proposal-object-rest-spread": "^7.18.9",
+ "@babel/plugin-proposal-object-rest-spread": "^7.20.2",
"@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
"@babel/plugin-proposal-optional-chaining": "^7.18.9",
"@babel/plugin-proposal-private-methods": "^7.18.6",
@@ -11583,7 +11672,7 @@
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.18.6",
+ "@babel/plugin-syntax-import-assertions": "^7.20.0",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
@@ -11596,10 +11685,10 @@
"@babel/plugin-transform-arrow-functions": "^7.18.6",
"@babel/plugin-transform-async-to-generator": "^7.18.6",
"@babel/plugin-transform-block-scoped-functions": "^7.18.6",
- "@babel/plugin-transform-block-scoping": "^7.18.9",
- "@babel/plugin-transform-classes": "^7.19.0",
+ "@babel/plugin-transform-block-scoping": "^7.20.2",
+ "@babel/plugin-transform-classes": "^7.20.2",
"@babel/plugin-transform-computed-properties": "^7.18.9",
- "@babel/plugin-transform-destructuring": "^7.18.13",
+ "@babel/plugin-transform-destructuring": "^7.20.2",
"@babel/plugin-transform-dotall-regex": "^7.18.6",
"@babel/plugin-transform-duplicate-keys": "^7.18.9",
"@babel/plugin-transform-exponentiation-operator": "^7.18.6",
@@ -11607,14 +11696,14 @@
"@babel/plugin-transform-function-name": "^7.18.9",
"@babel/plugin-transform-literals": "^7.18.9",
"@babel/plugin-transform-member-expression-literals": "^7.18.6",
- "@babel/plugin-transform-modules-amd": "^7.18.6",
- "@babel/plugin-transform-modules-commonjs": "^7.18.6",
- "@babel/plugin-transform-modules-systemjs": "^7.19.0",
+ "@babel/plugin-transform-modules-amd": "^7.19.6",
+ "@babel/plugin-transform-modules-commonjs": "^7.19.6",
+ "@babel/plugin-transform-modules-systemjs": "^7.19.6",
"@babel/plugin-transform-modules-umd": "^7.18.6",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
"@babel/plugin-transform-new-target": "^7.18.6",
"@babel/plugin-transform-object-super": "^7.18.6",
- "@babel/plugin-transform-parameters": "^7.18.8",
+ "@babel/plugin-transform-parameters": "^7.20.1",
"@babel/plugin-transform-property-literals": "^7.18.6",
"@babel/plugin-transform-regenerator": "^7.18.6",
"@babel/plugin-transform-reserved-words": "^7.18.6",
@@ -11626,7 +11715,7 @@
"@babel/plugin-transform-unicode-escapes": "^7.18.10",
"@babel/plugin-transform-unicode-regex": "^7.18.6",
"@babel/preset-modules": "^0.1.5",
- "@babel/types": "^7.19.3",
+ "@babel/types": "^7.20.2",
"babel-plugin-polyfill-corejs2": "^0.3.3",
"babel-plugin-polyfill-corejs3": "^0.6.0",
"babel-plugin-polyfill-regenerator": "^0.4.1",
@@ -11648,12 +11737,12 @@
}
},
"@babel/runtime": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz",
- "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==",
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.6.tgz",
+ "integrity": "sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==",
"dev": true,
"requires": {
- "regenerator-runtime": "^0.13.4"
+ "regenerator-runtime": "^0.13.11"
}
},
"@babel/template": {
@@ -11668,30 +11757,30 @@
}
},
"@babel/traverse": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz",
- "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
+ "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.19.3",
+ "@babel/generator": "^7.20.5",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-function-name": "^7.19.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.19.3",
- "@babel/types": "^7.19.3",
+ "@babel/parser": "^7.20.5",
+ "@babel/types": "^7.20.5",
"debug": "^4.1.0",
"globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.19.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz",
- "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==",
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
+ "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
"dev": true,
"requires": {
- "@babel/helper-string-parser": "^7.18.10",
+ "@babel/helper-string-parser": "^7.19.4",
"@babel/helper-validator-identifier": "^7.19.1",
"to-fast-properties": "^2.0.0"
}
@@ -11709,16 +11798,25 @@
"dev": true,
"requires": {}
},
+ "@eslint-community/eslint-utils": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.1.2.tgz",
+ "integrity": "sha512-7qELuQWWjVDdVsFQ5+beUl+KPczrEDA7S3zM4QUd/bJl7oXgsmpXaEVqrRTnOBqenOV4rWf2kVZk2Ot085zPWA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
"@eslint/eslintrc": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.2.tgz",
- "integrity": "sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz",
+ "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==",
"dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
"espree": "^9.4.0",
- "globals": "^13.15.0",
+ "globals": "^13.19.0",
"ignore": "^5.2.0",
"import-fresh": "^3.2.1",
"js-yaml": "^4.1.0",
@@ -11727,9 +11825,9 @@
},
"dependencies": {
"globals": {
- "version": "13.17.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
- "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "version": "13.19.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -11744,22 +11842,16 @@
}
},
"@humanwhocodes/config-array": {
- "version": "0.10.7",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz",
- "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==",
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
+ "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
"dev": true,
"requires": {
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
- "minimatch": "^3.0.4"
+ "minimatch": "^3.0.5"
}
},
- "@humanwhocodes/gitignore-to-minimatch": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
- "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
- "dev": true
- },
"@humanwhocodes/module-importer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -11830,13 +11922,13 @@
"dev": true
},
"@jridgewell/trace-mapping": {
- "version": "0.3.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
- "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
+ "version": "0.3.17",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+ "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
"dev": true,
"requires": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
}
},
"@nicolo-ribaudo/chokidar-2": {
@@ -11879,71 +11971,95 @@
"dev": true
},
"@rollup/plugin-babel": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
- "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==",
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz",
+ "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.10.4",
- "@rollup/pluginutils": "^3.1.0"
+ "@babel/helper-module-imports": "^7.18.6",
+ "@rollup/pluginutils": "^5.0.1"
}
},
"@rollup/plugin-commonjs": {
- "version": "22.0.2",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz",
- "integrity": "sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==",
+ "version": "24.0.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-24.0.0.tgz",
+ "integrity": "sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==",
"dev": true,
"requires": {
- "@rollup/pluginutils": "^3.1.0",
+ "@rollup/pluginutils": "^5.0.1",
"commondir": "^1.0.1",
- "estree-walker": "^2.0.1",
- "glob": "^7.1.6",
- "is-reference": "^1.2.1",
- "magic-string": "^0.25.7",
- "resolve": "^1.17.0"
+ "estree-walker": "^2.0.2",
+ "glob": "^8.0.3",
+ "is-reference": "1.2.1",
+ "magic-string": "^0.27.0"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz",
+ "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz",
+ "integrity": "sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
}
},
"@rollup/plugin-node-resolve": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz",
- "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==",
+ "version": "15.0.1",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.0.1.tgz",
+ "integrity": "sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==",
"dev": true,
"requires": {
- "@rollup/pluginutils": "^3.1.0",
- "@types/resolve": "1.17.1",
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
"deepmerge": "^4.2.2",
- "is-builtin-module": "^3.1.0",
+ "is-builtin-module": "^3.2.0",
"is-module": "^1.0.0",
- "resolve": "^1.19.0"
+ "resolve": "^1.22.1"
}
},
"@rollup/plugin-replace": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-4.0.0.tgz",
- "integrity": "sha512-+rumQFiaNac9y64OHtkHGmdjm7us9bo1PlbgQfdihQtuNxzjpaB064HbRnewUOggLQxVCCyINfStkgmBeQpv1g==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-5.0.2.tgz",
+ "integrity": "sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==",
"dev": true,
"requires": {
- "@rollup/pluginutils": "^3.1.0",
- "magic-string": "^0.25.7"
+ "@rollup/pluginutils": "^5.0.1",
+ "magic-string": "^0.27.0"
}
},
"@rollup/pluginutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
- "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
+ "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==",
"dev": true,
"requires": {
- "@types/estree": "0.0.39",
- "estree-walker": "^1.0.1",
- "picomatch": "^2.2.2"
- },
- "dependencies": {
- "estree-walker": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
- "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
- "dev": true
- }
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
}
},
"@sindresorhus/is": {
@@ -11965,15 +12081,18 @@
"dev": true
},
"@types/cors": {
- "version": "2.8.12",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
- "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==",
- "dev": true
+ "version": "2.8.13",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz",
+ "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
},
"@types/estree": {
- "version": "0.0.39",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
- "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
+ "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
"dev": true
},
"@types/json5": {
@@ -11998,9 +12117,9 @@
"dev": true
},
"@types/node": {
- "version": "18.7.23",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz",
- "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==",
+ "version": "18.11.14",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.14.tgz",
+ "integrity": "sha512-0KXV57tENYmmJMl+FekeW9V3O/rlcqGQQJ/hNh9r8pKIj304pskWuEd8fCyNT86g/TpO0gcOTiLzsHLEURFMIQ==",
"dev": true
},
"@types/normalize-package-data": {
@@ -12016,13 +12135,10 @@
"dev": true
},
"@types/resolve": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
- "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+ "dev": true
},
"@types/unist": {
"version": "2.0.6",
@@ -12031,9 +12147,9 @@
"dev": true
},
"@yarnpkg/parsers": {
- "version": "3.0.0-rc.22",
- "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.22.tgz",
- "integrity": "sha512-GAWDjXduYBUVmOzlj3X0OwTQ1BV4ZeDdgw8yXST3K0lB95drWEGxa1at0v7BmHDyK2y1F1IJufc8N4yrcuXjWg==",
+ "version": "3.0.0-rc.33",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.33.tgz",
+ "integrity": "sha512-az35wEPH00kW6eZDqHC0BumzAB4XD+YJb1b5tHEfsy73viCN7uGy8kvutwig5bgVwt1Hx7GuU09G50Sc5osBlA==",
"dev": true,
"requires": {
"js-yaml": "^3.10.0",
@@ -12078,9 +12194,9 @@
}
},
"acorn": {
- "version": "8.8.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
- "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "version": "8.8.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
+ "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
"dev": true
},
"acorn-jsx": {
@@ -12127,9 +12243,9 @@
}
},
"anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"requires": {
"normalize-path": "^3.0.0",
@@ -12166,15 +12282,15 @@
"dev": true
},
"array-includes": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
- "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
+ "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5",
- "get-intrinsic": "^1.1.1",
+ "es-abstract": "^1.20.4",
+ "get-intrinsic": "^1.1.3",
"is-string": "^1.0.7"
}
},
@@ -12185,14 +12301,14 @@
"dev": true
},
"array.prototype.flat": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
- "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
+ "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4",
"es-shim-unscopables": "^1.0.0"
}
},
@@ -12209,13 +12325,13 @@
"dev": true
},
"autoprefixer": {
- "version": "10.4.12",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.12.tgz",
- "integrity": "sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==",
+ "version": "10.4.13",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz",
+ "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==",
"dev": true,
"requires": {
"browserslist": "^4.21.4",
- "caniuse-lite": "^1.0.30001407",
+ "caniuse-lite": "^1.0.30001426",
"fraction.js": "^4.2.0",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.0",
@@ -12231,15 +12347,6 @@
"follow-redirects": "^1.14.4"
}
},
- "babel-plugin-dynamic-import-node": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
- "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
- "dev": true,
- "requires": {
- "object.assign": "^4.1.0"
- }
- },
"babel-plugin-polyfill-corejs2": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
@@ -12455,9 +12562,9 @@
"dev": true
},
"body-parser": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
- "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+ "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
"dev": true,
"requires": {
"bytes": "3.1.2",
@@ -12468,7 +12575,7 @@
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
- "qs": "6.10.3",
+ "qs": "6.11.0",
"raw-body": "2.5.1",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
@@ -12741,9 +12848,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001414",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001414.tgz",
- "integrity": "sha512-t55jfSaWjCdocnFdKQoO+d2ct9C59UZg4dY3OnUlSZ447r8pUtIKdp0hpAzrGFultmTC+Us+KpKi4GZl/LXlFg==",
+ "version": "1.0.30001439",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz",
+ "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==",
"dev": true
},
"caw": {
@@ -12819,9 +12926,9 @@
"dev": true
},
"ci-info": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz",
- "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==",
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz",
+ "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==",
"dev": true
},
"clean-css": {
@@ -12973,14 +13080,6 @@
"dev": true,
"requires": {
"safe-buffer": "5.2.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- }
}
},
"content-type": {
@@ -12990,13 +13089,10 @@
"dev": true
},
"convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- }
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
},
"cookie": {
"version": "0.4.2",
@@ -13005,9 +13101,9 @@
"dev": true
},
"core-js-compat": {
- "version": "3.25.3",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.25.3.tgz",
- "integrity": "sha512-xVtYpJQ5grszDHEUU9O7XbjjcZ0ccX3LgQsyqSvTnjX97ZqEgn9F5srmrwwwMtbKzDllyFPL+O+2OFMl1lU4TQ==",
+ "version": "3.26.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz",
+ "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==",
"dev": true,
"requires": {
"browserslist": "^4.21.4"
@@ -13030,9 +13126,9 @@
}
},
"cosmiconfig": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
- "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
+ "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
"dev": true,
"requires": {
"@types/parse-json": "^4.0.0",
@@ -13108,9 +13204,9 @@
"dev": true
},
"decamelize-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz",
- "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==",
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz",
+ "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==",
"dev": true,
"requires": {
"decamelize": "^1.1.0",
@@ -13126,9 +13222,9 @@
}
},
"decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==",
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
+ "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
"dev": true
},
"decompress": {
@@ -13454,9 +13550,9 @@
"dev": true
},
"electron-to-chromium": {
- "version": "1.4.270",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.270.tgz",
- "integrity": "sha512-KNhIzgLiJmDDC444dj9vEOpZEgsV96ult9Iff98Vanumn+ShJHd5se8aX6KeVxdc0YQeqdrezBZv89rleDbvSg==",
+ "version": "1.4.284",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+ "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
"dev": true
},
"emoji-regex": {
@@ -13481,9 +13577,9 @@
}
},
"engine.io": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
- "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz",
+ "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==",
"dev": true,
"requires": {
"@types/cookie": "^0.4.1",
@@ -13526,9 +13622,9 @@
}
},
"es-abstract": {
- "version": "1.20.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.3.tgz",
- "integrity": "sha512-AyrnaKVpMzljIdwjzrj+LxGmj8ik2LckwXacHqrJJ/jxz6dDDBcZ7I7nlHM0FvEW8MfbWJwOd+yT2XzYW49Frw==",
+ "version": "1.20.5",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.5.tgz",
+ "integrity": "sha512-7h8MM2EQhsCA7pU/Nv78qOXFpD8Rhqd12gYiSJVkrH9+e8VuA8JlPJK/hQjjlLv6pJvx/z1iRFKzYb0XT/RuAQ==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
@@ -13537,11 +13633,12 @@
"function.prototype.name": "^1.1.5",
"get-intrinsic": "^1.1.3",
"get-symbol-description": "^1.0.0",
+ "gopd": "^1.0.1",
"has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
"has-symbols": "^1.0.3",
"internal-slot": "^1.0.3",
- "is-callable": "^1.2.6",
+ "is-callable": "^1.2.7",
"is-negative-zero": "^2.0.2",
"is-regex": "^1.1.4",
"is-shared-array-buffer": "^1.0.2",
@@ -13552,8 +13649,8 @@
"object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.4.3",
"safe-regex-test": "^1.0.0",
- "string.prototype.trimend": "^1.0.5",
- "string.prototype.trimstart": "^1.0.5",
+ "string.prototype.trimend": "^1.0.6",
+ "string.prototype.trimstart": "^1.0.6",
"unbox-primitive": "^1.0.2"
}
},
@@ -13611,15 +13708,15 @@
"dev": true
},
"eslint": {
- "version": "8.24.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.24.0.tgz",
- "integrity": "sha512-dWFaPhGhTAiPcCgm3f6LI2MBWbogMnTJzFBbhXVRQDJPkr9pGZvVjlVfXd+vyDcWPA2Ic9L2AXPIQM0+vk/cSQ==",
+ "version": "8.30.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz",
+ "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==",
"dev": true,
"requires": {
- "@eslint/eslintrc": "^1.3.2",
- "@humanwhocodes/config-array": "^0.10.5",
- "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
+ "@eslint/eslintrc": "^1.4.0",
+ "@humanwhocodes/config-array": "^0.11.8",
"@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -13635,14 +13732,14 @@
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"find-up": "^5.0.0",
- "glob-parent": "^6.0.1",
- "globals": "^13.15.0",
- "globby": "^11.1.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
"js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
@@ -13707,9 +13804,9 @@
}
},
"globals": {
- "version": "13.17.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
- "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "version": "13.19.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz",
+ "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -13739,9 +13836,9 @@
}
},
"eslint-config-xo": {
- "version": "0.42.0",
- "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.42.0.tgz",
- "integrity": "sha512-HIfd+AM6tHFoaZ/NXYDV3Mr/CJrAj/DoP6IOYt1/v+90XtCwVYOfW7LXbRDYDmhQMzT16h7eqPRcex72waRqdA==",
+ "version": "0.43.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.43.1.tgz",
+ "integrity": "sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==",
"dev": true,
"requires": {
"confusing-browser-globals": "1.0.11"
@@ -13854,31 +13951,39 @@
}
},
"eslint-plugin-unicorn": {
- "version": "44.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-44.0.0.tgz",
- "integrity": "sha512-GbkxkdNzY7wNEfZnraAP+oA+aqqzSrNZmO37kjW1DyqnSK/ah08ySDdIecObpx46twv+zcQvH8i0CHP98Wo64w==",
+ "version": "45.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-45.0.2.tgz",
+ "integrity": "sha512-Y0WUDXRyGDMcKLiwgL3zSMpHrXI00xmdyixEGIg90gHnj0PcHY4moNv3Ppje/kDivdAy5vUeUr7z211ImPv2gw==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.19.1",
- "ci-info": "^3.4.0",
+ "@eslint-community/eslint-utils": "^4.1.2",
+ "ci-info": "^3.6.1",
"clean-regexp": "^1.0.0",
- "eslint-utils": "^3.0.0",
"esquery": "^1.4.0",
"indent-string": "^4.0.0",
"is-builtin-module": "^3.2.0",
+ "jsesc": "^3.0.2",
"lodash": "^4.17.21",
"pluralize": "^8.0.0",
"read-pkg-up": "^7.0.1",
"regexp-tree": "^0.1.24",
+ "regjsparser": "^0.9.1",
"safe-regex": "^2.1.1",
- "semver": "^7.3.7",
+ "semver": "^7.3.8",
"strip-indent": "^3.0.0"
},
"dependencies": {
+ "jsesc": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+ "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+ "dev": true
+ },
"semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -13920,9 +14025,9 @@
"dev": true
},
"espree": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
- "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
+ "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
"dev": true,
"requires": {
"acorn": "^8.8.0",
@@ -14126,9 +14231,9 @@
"dev": true
},
"fastq": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
- "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz",
+ "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==",
"dev": true,
"requires": {
"reusify": "^1.0.4"
@@ -14226,17 +14331,17 @@
}
},
"find-unused-sass-variables": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/find-unused-sass-variables/-/find-unused-sass-variables-4.0.4.tgz",
- "integrity": "sha512-qs/dd5W66o17OW5bmndaOeEdHj9pNSrFcy9YMRgRE1JTYVAB0UvQszSF7F44xlAzcEV17wDp5liY6C79UxBsQQ==",
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/find-unused-sass-variables/-/find-unused-sass-variables-4.0.5.tgz",
+ "integrity": "sha512-g/VikpyoOi3bpGnNQDhaqeOJtp+qvK6xNJXEOe/M+FFRpR6X74f2/R+x95WaLE+BemFlJBS5IXqs6hw6a8HCzQ==",
"dev": true,
"requires": {
- "commander": "^9.1.0",
+ "commander": "^9.4.1",
"escape-string-regexp": "^5.0.0",
- "glob": "^7.2.0",
+ "glob": "^7.2.3",
"picocolors": "^1.0.0",
- "postcss": "^8.4.12",
- "postcss-scss": "^4.0.3"
+ "postcss": "^8.4.19",
+ "postcss-scss": "^4.0.5"
},
"dependencies": {
"commander": {
@@ -14317,9 +14422,9 @@
"dev": true
},
"fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
+ "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==",
"dev": true,
"requires": {
"graceful-fs": "^4.2.0",
@@ -14535,6 +14640,15 @@
"integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==",
"dev": true
},
+ "gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
"got": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz",
@@ -14751,9 +14865,9 @@
}
},
"hugo-bin": {
- "version": "0.92.2",
- "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.92.2.tgz",
- "integrity": "sha512-1C5NfDinq5C/NFNkj9ZMFb5z0h3R7gN9C8Lx0Vv+1Xtfi72RyteeiGZA82eLr6pbHfL3coBO7Rq9MW3pHtC5mg==",
+ "version": "0.96.0",
+ "resolved": "https://registry.npmjs.org/hugo-bin/-/hugo-bin-0.96.0.tgz",
+ "integrity": "sha512-a85/ZvD7NJ/Puz8/fRKVhHxxB/+qaN96fdOxHrtTeqsnZXXcpMGuD3LhN4h8xeqfAfJHWroeI2R7bPfnr+qmWg==",
"dev": true,
"requires": {
"bin-wrapper": "^4.1.0",
@@ -14778,9 +14892,9 @@
"dev": true
},
"ignore": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
- "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
+ "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
"dev": true
},
"ignore-by-default": {
@@ -14944,9 +15058,9 @@
"dev": true
},
"is-core-module": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
- "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -15039,6 +15153,12 @@
"integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==",
"dev": true
},
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
"is-plain-obj": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
@@ -15152,14 +15272,15 @@
"dev": true
},
"istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
"requires": {
- "@babel/core": "^7.7.5",
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
"@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-coverage": "^3.2.0",
"semver": "^6.3.0"
}
},
@@ -15251,21 +15372,21 @@
}
},
"jasmine-core": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.4.0.tgz",
- "integrity": "sha512-+l482uImx5BVd6brJYlaHe2UwfKoZBqQfNp20ZmdNfsjGFTemGfqHLsXjKEW23w9R/m8WYeFc9JmIgjj6dUtAA==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.5.0.tgz",
+ "integrity": "sha512-9PMzyvhtocxb3aXJVOPqBDswdgyAeSB81QnLop4npOpbqnheaTEwPc9ZloQeVswugPManznQBjD8kWDTjlnHuw==",
"dev": true
},
"jquery": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz",
- "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==",
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.2.tgz",
+ "integrity": "sha512-/e7ulNIEEYk1Z/l4X0vpxGt+B/dNsV8ghOPAWZaJs8pkGvsSC0tm33aMGylXcj/U7y4IcvwtMXPMyBFZn/gK9A==",
"dev": true
},
"js-sdsl": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.1.5.tgz",
- "integrity": "sha512-08bOAKweV2NUC1wqTtf3qZlnpOX/R2DU9ikpjOHs0H+ibQv3zpncVQg6um4uYtRtrwIX8M4Nh3ytK4HGlYAq7Q==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz",
+ "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==",
"dev": true
},
"js-tokens": {
@@ -15489,9 +15610,9 @@
"dev": true
},
"known-css-properties": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz",
- "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==",
+ "version": "0.26.0",
+ "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz",
+ "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==",
"dev": true
},
"levn": {
@@ -15538,21 +15659,21 @@
}
},
"lockfile-lint": {
- "version": "4.9.5",
- "resolved": "https://registry.npmjs.org/lockfile-lint/-/lockfile-lint-4.9.5.tgz",
- "integrity": "sha512-e68R3cATGvoi+aY4t7lTLvLSif34qBO/r6jwDdUxz4+hNiQIuZkrg6mMfasc/0AfIwaIhZBLW+pxjp1Vhm8uAA==",
+ "version": "4.9.6",
+ "resolved": "https://registry.npmjs.org/lockfile-lint/-/lockfile-lint-4.9.6.tgz",
+ "integrity": "sha512-qPI3QcEflvGylCtXyxTh0anhi1oYxD12L3ZwQYaxLjxpWUI73+EbFMsl9esqcbgSKAh4wes5y6fbG8hbQTgjyg==",
"dev": true,
"requires": {
"cosmiconfig": "^7.0.1",
"debug": "^4.1.1",
- "lockfile-lint-api": "^5.4.5",
+ "lockfile-lint-api": "^5.4.6",
"yargs": "^16.0.0"
}
},
"lockfile-lint-api": {
- "version": "5.4.5",
- "resolved": "https://registry.npmjs.org/lockfile-lint-api/-/lockfile-lint-api-5.4.5.tgz",
- "integrity": "sha512-Pooj7ubhfpyEYBIoR6/7+cqFElsRlC6NMHvnjIV1Y1lfWDWj+9xWikvL7XS7AlNIhg6UThnxfiF1venGyWz9NQ==",
+ "version": "5.4.6",
+ "resolved": "https://registry.npmjs.org/lockfile-lint-api/-/lockfile-lint-api-5.4.6.tgz",
+ "integrity": "sha512-3Sp01oBI0LWZNvKfGQ04G03+dXkjAvEvRiAQNZsvdVmCGP6vOXPCuPEimStf+RSo8PnjApdb65RAUh6aSZXsVQ==",
"dev": true,
"requires": {
"@yarnpkg/parsers": "^3.0.0-rc.6",
@@ -15584,9 +15705,9 @@
"dev": true
},
"log4js": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz",
- "integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==",
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz",
+ "integrity": "sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ==",
"dev": true,
"requires": {
"date-format": "^4.0.14",
@@ -15612,12 +15733,12 @@
}
},
"magic-string": {
- "version": "0.25.9",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
- "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==",
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
+ "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
"dev": true,
"requires": {
- "sourcemap-codec": "^1.4.8"
+ "@jridgewell/sourcemap-codec": "^1.4.13"
}
},
"make-dir": {
@@ -15723,9 +15844,9 @@
}
},
"semver": {
- "version": "7.3.7",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
- "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -15808,9 +15929,9 @@
}
},
"minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+ "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
"dev": true
},
"minimist-options": {
@@ -15864,9 +15985,9 @@
"dev": true
},
"node-releases": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
- "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.7.tgz",
+ "integrity": "sha512-EJ3rzxL9pTWPjk5arA0s0dgXpnyiAbJDE6wHT62g7VsgrgQgmmZ+Ru++M1BFofncWja+Pnn3rEr3fieRySAdKQ==",
"dev": true
},
"nodemon": {
@@ -16096,14 +16217,14 @@
}
},
"object.values": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
- "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
+ "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
}
},
"on-finished": {
@@ -16391,9 +16512,9 @@
"dev": true
},
"postcss": {
- "version": "8.4.17",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz",
- "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==",
+ "version": "8.4.20",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz",
+ "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==",
"dev": true,
"requires": {
"nanoid": "^3.3.4",
@@ -16402,14 +16523,14 @@
}
},
"postcss-cli": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.0.0.tgz",
- "integrity": "sha512-Wjy/00wBBEgQqnSToznxLWDnATznokFGXsHtF/3G8glRZpz5KYlfHcBW/VMJmWAeF2x49zjgy4izjM3/Wx1dKA==",
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz",
+ "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==",
"dev": true,
"requires": {
"chokidar": "^3.3.0",
"dependency-graph": "^0.11.0",
- "fs-extra": "^10.0.0",
+ "fs-extra": "^11.0.0",
"get-stdin": "^9.0.0",
"globby": "^13.0.0",
"picocolors": "^1.0.0",
@@ -16417,7 +16538,7 @@
"postcss-reporter": "^7.0.0",
"pretty-hrtime": "^1.0.3",
"read-cache": "^1.0.0",
- "slash": "^4.0.0",
+ "slash": "^5.0.0",
"yargs": "^17.0.0"
},
"dependencies": {
@@ -16433,9 +16554,9 @@
}
},
"globby": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz",
- "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==",
+ "version": "13.1.3",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz",
+ "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==",
"dev": true,
"requires": {
"dir-glob": "^3.0.1",
@@ -16443,18 +16564,26 @@
"ignore": "^5.2.0",
"merge2": "^1.4.1",
"slash": "^4.0.0"
+ },
+ "dependencies": {
+ "slash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "dev": true
+ }
}
},
"slash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz",
+ "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==",
"dev": true
},
"yargs": {
- "version": "17.6.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.0.tgz",
- "integrity": "sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==",
+ "version": "17.6.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz",
+ "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==",
"dev": true,
"requires": {
"cliui": "^8.0.1",
@@ -16463,7 +16592,7 @@
"require-directory": "^2.1.1",
"string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
+ "yargs-parser": "^21.1.1"
}
},
"yargs-parser": {
@@ -16485,9 +16614,9 @@
},
"dependencies": {
"yaml": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz",
- "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.3.tgz",
+ "integrity": "sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==",
"dev": true
}
}
@@ -16522,16 +16651,16 @@
"requires": {}
},
"postcss-scss": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.5.tgz",
- "integrity": "sha512-F7xpB6TrXyqUh3GKdyB4Gkp3QL3DDW1+uI+gxx/oJnUt/qXI4trj5OGlp9rOKdoABGULuqtqeG+3HEVQk4DjmA==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.6.tgz",
+ "integrity": "sha512-rLDPhJY4z/i4nVFZ27j9GqLxj1pwxE80eAzUNRMXtcpipFYIeowerzBgG3yJhMtObGEXidtIgbUpQ3eLDsf5OQ==",
"dev": true,
"requires": {}
},
"postcss-selector-parser": {
- "version": "6.0.10",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
- "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+ "version": "6.0.11",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz",
+ "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==",
"dev": true,
"requires": {
"cssesc": "^3.0.0",
@@ -16622,9 +16751,9 @@
"dev": true
},
"qs": {
- "version": "6.10.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dev": true,
"requires": {
"side-channel": "^1.0.4"
@@ -16821,6 +16950,14 @@
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
"readdirp": {
@@ -16867,15 +17004,15 @@
}
},
"regenerator-runtime": {
- "version": "0.13.9",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
- "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
+ "version": "0.13.11",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
+ "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
"dev": true
},
"regenerator-transform": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
- "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+ "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
"dev": true,
"requires": {
"@babel/runtime": "^7.8.4"
@@ -16905,9 +17042,9 @@
"dev": true
},
"regexpu-core": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
- "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
+ "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
"dev": true,
"requires": {
"regenerate": "^1.4.2",
@@ -16915,7 +17052,7 @@
"regjsgen": "^0.7.1",
"regjsparser": "^0.9.1",
"unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.0.0"
+ "unicode-match-property-value-ecmascript": "^2.1.0"
}
},
"regjsgen": {
@@ -17007,34 +17144,22 @@
}
},
"rollup": {
- "version": "2.79.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
- "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+ "version": "3.7.5",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.7.5.tgz",
+ "integrity": "sha512-z0ZbqHBtS/et2EEUKMrAl2CoSdwN7ZPzL17UMiKN9RjjqHShTlv7F9J6ZJZJNREYjBh3TvBrdfjkFDIXFNeuiQ==",
"dev": true,
"requires": {
"fsevents": "~2.3.2"
}
},
"rollup-plugin-istanbul": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/rollup-plugin-istanbul/-/rollup-plugin-istanbul-3.0.0.tgz",
- "integrity": "sha512-z8kD2A57qTcxgqjbJ8cZBBE/IGYk+iJtE42sCaZjrSe/uBEUq5jJYvQwquJ+Acfko1LMYww4EJfeMJmc0GttpQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-istanbul/-/rollup-plugin-istanbul-4.0.0.tgz",
+ "integrity": "sha512-AOauxxl4eAHWdvTnY/uwSrwMkbDymTWUhaD6aym8a4YJaO9hxK2U8bcuhZA0iravuOTUulqPWUbYP7mTV7i4oQ==",
"dev": true,
"requires": {
- "@rollup/pluginutils": "^4.1.0",
- "istanbul-lib-instrument": "^4.0.3"
- },
- "dependencies": {
- "@rollup/pluginutils": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
- "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
- "dev": true,
- "requires": {
- "estree-walker": "^2.0.1",
- "picomatch": "^2.2.2"
- }
- }
+ "@rollup/pluginutils": "^5.0.2",
+ "istanbul-lib-instrument": "^5.2.1"
}
},
"rtlcss": {
@@ -17059,9 +17184,9 @@
}
},
"safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
},
"safe-regex": {
@@ -17091,9 +17216,9 @@
"dev": true
},
"sass": {
- "version": "1.55.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz",
- "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
+ "version": "1.57.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz",
+ "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==",
"dev": true,
"requires": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -17175,9 +17300,9 @@
"dev": true
},
"shell-quote": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
- "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz",
+ "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==",
"dev": true
},
"shelljs": {
@@ -17209,9 +17334,9 @@
"dev": true
},
"simple-update-notifier": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz",
- "integrity": "sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
+ "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
"dev": true,
"requires": {
"semver": "~7.0.0"
@@ -17269,17 +17394,17 @@
}
},
"socket.io": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.2.tgz",
- "integrity": "sha512-6fCnk4ARMPZN448+SQcnn1u8OHUC72puJcNtSgg2xS34Cu7br1gQ09YKkO1PFfDn/wyUE9ZgMAwosJed003+NQ==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz",
+ "integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==",
"dev": true,
"requires": {
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
- "engine.io": "~6.2.0",
+ "engine.io": "~6.2.1",
"socket.io-adapter": "~2.4.0",
- "socket.io-parser": "~4.2.0"
+ "socket.io-parser": "~4.2.1"
}
},
"socket.io-adapter": {
@@ -17349,12 +17474,6 @@
"source-map": "^0.6.0"
}
},
- "sourcemap-codec": {
- "version": "1.4.8",
- "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
- "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
- "dev": true
- },
"spdx-correct": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
@@ -17451,6 +17570,14 @@
"dev": true,
"requires": {
"safe-buffer": "~5.1.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ }
}
},
"string-width": {
@@ -17465,36 +17592,36 @@
}
},
"string.prototype.padend": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz",
- "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz",
+ "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.1"
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.20.4"
}
},
"string.prototype.trimend": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
- "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+ "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
}
},
"string.prototype.trimstart": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
- "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+ "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
- "es-abstract": "^1.19.5"
+ "es-abstract": "^1.20.4"
}
},
"strip-ansi": {
@@ -17558,15 +17685,15 @@
"dev": true
},
"stylelint": {
- "version": "14.13.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.13.0.tgz",
- "integrity": "sha512-NJSAdloiAB/jgVJKxMR90mWlctvmeBFGFVUvyKngi9+j/qPSJ5ZB+u8jOmGbLTnS7OHrII9NFGehPRyar8U5vg==",
+ "version": "14.16.0",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.16.0.tgz",
+ "integrity": "sha512-X6uTi9DcxjzLV8ZUAjit1vsRtSwcls0nl07c9rqOPzvpA8IvTX/xWEkBRowS0ffevRrqkHa/ThDEu86u73FQDg==",
"dev": true,
"requires": {
"@csstools/selector-specificity": "^2.0.2",
"balanced-match": "^2.0.0",
"colord": "^2.9.3",
- "cosmiconfig": "^7.0.1",
+ "cosmiconfig": "^7.1.0",
"css-functions-list": "^3.1.0",
"debug": "^4.3.4",
"fast-glob": "^3.2.12",
@@ -17576,21 +17703,21 @@
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.2.0",
- "ignore": "^5.2.0",
+ "ignore": "^5.2.1",
"import-lazy": "^4.0.0",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
- "known-css-properties": "^0.25.0",
+ "known-css-properties": "^0.26.0",
"mathml-tag-names": "^2.1.3",
"meow": "^9.0.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"picocolors": "^1.0.0",
- "postcss": "^8.4.16",
+ "postcss": "^8.4.19",
"postcss-media-query-parser": "^0.2.3",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^6.0.0",
- "postcss-selector-parser": "^6.0.10",
+ "postcss-selector-parser": "^6.0.11",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
"string-width": "^4.2.3",
@@ -17598,7 +17725,7 @@
"style-search": "^0.1.0",
"supports-hyperlinks": "^2.3.0",
"svg-tags": "^1.0.0",
- "table": "^6.8.0",
+ "table": "^6.8.1",
"v8-compile-cache": "^2.3.0",
"write-file-atomic": "^4.0.2"
},
@@ -17640,71 +17767,44 @@
"requires": {}
},
"stylelint-config-recommended-scss": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-7.0.0.tgz",
- "integrity": "sha512-rGz1J4rMAyJkvoJW4hZasuQBB7y9KIrShb20l9DVEKKZSEi1HAy0vuNlR8HyCKy/jveb/BdaQFcoiYnmx4HoiA==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-8.0.0.tgz",
+ "integrity": "sha512-BxjxEzRaZoQb7Iinc3p92GS6zRdRAkIuEu2ZFLTxJK2e1AIcCb5B5MXY9KOXdGTnYFZ+KKx6R4Fv9zU6CtMYPQ==",
"dev": true,
"requires": {
"postcss-scss": "^4.0.2",
- "stylelint-config-recommended": "^8.0.0",
+ "stylelint-config-recommended": "^9.0.0",
"stylelint-scss": "^4.0.0"
- },
- "dependencies": {
- "stylelint-config-recommended": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-8.0.0.tgz",
- "integrity": "sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ==",
- "dev": true,
- "requires": {}
- }
}
},
"stylelint-config-standard": {
- "version": "28.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-28.0.0.tgz",
- "integrity": "sha512-q/StuowDdDmFCravzGHAwgS9pjX0bdOQUEBBDIkIWsQuYGgYz/xsO8CM6eepmIQ1fc5bKdDVimlJZ6MoOUcJ5Q==",
+ "version": "29.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-29.0.0.tgz",
+ "integrity": "sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==",
"dev": true,
"requires": {
"stylelint-config-recommended": "^9.0.0"
}
},
"stylelint-config-standard-scss": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-5.0.0.tgz",
- "integrity": "sha512-zoXLibojHZYPFjtkc4STZtAJ2yGTq3Bb4MYO0oiyO6f/vNxDKRcSDZYoqN260Gv2eD5niQIr1/kr5SXlFj9kcQ==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-6.1.0.tgz",
+ "integrity": "sha512-iZ2B5kQT2G3rUzx+437cEpdcnFOQkwnwqXuY8Z0QUwIHQVE8mnYChGAquyKFUKZRZ0pRnrciARlPaR1RBtPb0Q==",
"dev": true,
"requires": {
- "stylelint-config-recommended-scss": "^7.0.0",
- "stylelint-config-standard": "^26.0.0"
- },
- "dependencies": {
- "stylelint-config-recommended": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-8.0.0.tgz",
- "integrity": "sha512-IK6dWvE000+xBv9jbnHOnBq01gt6HGVB2ZTsot+QsMpe82doDQ9hvplxfv4YnpEuUwVGGd9y6nbaAnhrjcxhZQ==",
- "dev": true,
- "requires": {}
- },
- "stylelint-config-standard": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-26.0.0.tgz",
- "integrity": "sha512-hUuB7LaaqM8abvkOO84wh5oYSkpXgTzHu2Zza6e7mY+aOmpNTjoFBRxSLlzY0uAOMWEFx0OMKzr+reG1BUtcqQ==",
- "dev": true,
- "requires": {
- "stylelint-config-recommended": "^8.0.0"
- }
- }
+ "stylelint-config-recommended-scss": "^8.0.0",
+ "stylelint-config-standard": "^29.0.0"
}
},
"stylelint-config-twbs-bootstrap": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylelint-config-twbs-bootstrap/-/stylelint-config-twbs-bootstrap-6.0.0.tgz",
- "integrity": "sha512-lrrhLkw5GqvSYykw6miMvxK7Ff+JSe80eiAlhpJv6z9X0AZdbBUL7bmqTcwgVg3G2OahAv6jejmJh+N9mR5c7w==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/stylelint-config-twbs-bootstrap/-/stylelint-config-twbs-bootstrap-7.0.0.tgz",
+ "integrity": "sha512-CZUc+BhBTJFi0Hw/6vq3KqvCaLMCQlFGz1tIAHACEt10QuFBh6IBSTWCr/oU8xS6m4YbYcng7ayPYwn+43l68w==",
"dev": true,
"requires": {
"stylelint-config-recess-order": "^3.0.0",
- "stylelint-config-standard": "^28.0.0",
- "stylelint-config-standard-scss": "^5.0.0",
+ "stylelint-config-standard": "^29.0.0",
+ "stylelint-config-standard-scss": "^6.1.0",
"stylelint-scss": "^4.3.0"
}
},
@@ -17780,9 +17880,9 @@
"dev": true
},
"table": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
- "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
+ "version": "6.8.1",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
+ "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
"dev": true,
"requires": {
"ajv": "^8.0.1",
@@ -17793,9 +17893,9 @@
},
"dependencies": {
"ajv": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
- "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz",
+ "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
@@ -17828,9 +17928,9 @@
}
},
"terser": {
- "version": "5.15.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz",
- "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==",
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.0.tgz",
+ "integrity": "sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg==",
"dev": true,
"requires": {
"@jridgewell/source-map": "^0.3.2",
@@ -17961,9 +18061,9 @@
}
},
"tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
+ "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
"dev": true
},
"tunnel-agent": {
@@ -18001,9 +18101,9 @@
}
},
"ua-parser-js": {
- "version": "0.7.31",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
- "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==",
+ "version": "0.7.32",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz",
+ "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==",
"dev": true
},
"unbox-primitive": {
@@ -18051,9 +18151,9 @@
}
},
"unicode-match-property-value-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
- "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
"dev": true
},
"unicode-property-aliases-ecmascript": {
@@ -18101,9 +18201,9 @@
}
},
"update-browserslist-db": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz",
- "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==",
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+ "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
"dev": true,
"requires": {
"escalade": "^3.1.1",
diff --git a/vendor/twbs/bootstrap/package.js b/vendor/twbs/bootstrap/package.js
index 53aaa9217..062193859 100644
--- a/vendor/twbs/bootstrap/package.js
+++ b/vendor/twbs/bootstrap/package.js
@@ -5,7 +5,7 @@
Package.describe({
name: 'twbs:bootstrap', // https://atmospherejs.com/twbs/bootstrap
summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
- version: '5.2.2',
+ version: '5.3.0-alpha1',
git: 'https://github.com/twbs/bootstrap.git'
})
diff --git a/vendor/twbs/bootstrap/package.json b/vendor/twbs/bootstrap/package.json
index 6b8ff432a..b9aaebb57 100644
--- a/vendor/twbs/bootstrap/package.json
+++ b/vendor/twbs/bootstrap/package.json
@@ -1,9 +1,9 @@
{
"name": "bootstrap",
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
- "version": "5.2.2",
+ "version": "5.3.0-alpha1",
"config": {
- "version_short": "5.2"
+ "version_short": "5.3"
},
"keywords": [
"css",
@@ -16,9 +16,6 @@
],
"homepage": "https://getbootstrap.com/",
"author": "The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)",
- "contributors": [
- "Twitter, Inc."
- ],
"license": "MIT",
"repository": {
"type": "git",
@@ -84,7 +81,7 @@
"docs-serve": "hugo server --port 9001 --disableFastRender",
"docs-serve-only": "npx sirv-cli _site --port 9001",
"lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
- "update-deps": "ncu -u -x globby,karma-browserstack-launcher,karma-rollup-preprocessor && echo Manually update site/assets/js/vendor",
+ "update-deps": "ncu -u -x globby,karma-browserstack-launcher,karma-rollup-preprocessor,terser && echo Manually update site/assets/js/vendor",
"release": "npm-run-all dist release-sri docs-build release-zip*",
"release-sri": "node build/generate-sri.js",
"release-version": "node build/change-version.js",
@@ -105,29 +102,29 @@
},
"devDependencies": {
"@babel/cli": "^7.19.3",
- "@babel/core": "^7.19.3",
- "@babel/preset-env": "^7.19.3",
+ "@babel/core": "^7.20.5",
+ "@babel/preset-env": "^7.20.2",
"@popperjs/core": "^2.11.6",
- "@rollup/plugin-babel": "^5.3.1",
- "@rollup/plugin-commonjs": "^22.0.2",
- "@rollup/plugin-node-resolve": "^14.1.0",
- "@rollup/plugin-replace": "^4.0.0",
- "autoprefixer": "^10.4.12",
+ "@rollup/plugin-babel": "^6.0.3",
+ "@rollup/plugin-commonjs": "^24.0.0",
+ "@rollup/plugin-node-resolve": "^15.0.1",
+ "@rollup/plugin-replace": "^5.0.2",
+ "autoprefixer": "^10.4.13",
"bundlewatch": "^0.3.3",
"clean-css-cli": "^5.6.1",
"cross-env": "^7.0.3",
- "eslint": "^8.24.0",
- "eslint-config-xo": "^0.42.0",
+ "eslint": "^8.30.0",
+ "eslint-config-xo": "^0.43.1",
"eslint-plugin-html": "^7.1.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-markdown": "^3.0.0",
- "eslint-plugin-unicorn": "^44.0.0",
- "find-unused-sass-variables": "^4.0.4",
+ "eslint-plugin-unicorn": "^45.0.2",
+ "find-unused-sass-variables": "^4.0.5",
"globby": "^11.1.0",
"hammer-simulator": "0.0.1",
- "hugo-bin": "^0.92.2",
+ "hugo-bin": "^0.96.0",
"ip": "^2.0.0",
- "jquery": "^3.6.1",
+ "jquery": "^3.6.2",
"karma": "^6.4.1",
"karma-browserstack-launcher": "1.4.0",
"karma-chrome-launcher": "^3.1.1",
@@ -137,24 +134,25 @@
"karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^2.0.0",
"karma-rollup-preprocessor": "7.0.7",
- "lockfile-lint": "^4.9.5",
+ "lockfile-lint": "^4.9.6",
"nodemon": "^2.0.20",
"npm-run-all": "^4.1.5",
- "postcss": "^8.4.17",
- "postcss-cli": "^10.0.0",
- "rollup": "^2.79.1",
- "rollup-plugin-istanbul": "^3.0.0",
+ "postcss": "^8.4.20",
+ "postcss-cli": "^10.1.0",
+ "rollup": "^3.7.5",
+ "rollup-plugin-istanbul": "^4.0.0",
"rtlcss": "^4.0.0",
- "sass": "^1.55.0",
+ "sass": "^1.57.1",
"shelljs": "^0.8.5",
- "stylelint": "^14.13.0",
- "stylelint-config-twbs-bootstrap": "^6.0.0",
- "terser": "^5.15.0",
+ "stylelint": "^14.16.0",
+ "stylelint-config-twbs-bootstrap": "^7.0.0",
+ "terser": "5.16.0",
"vnu-jar": "22.9.29"
},
"files": [
"dist/{css,js}/*.{css,js,map}",
"js/{src,dist}/**/*.{js,map}",
+ "js/index.{esm,umd}.js",
"scss/**/*.scss"
],
"hugo-bin": {
diff --git a/vendor/twbs/bootstrap/scss/_accordion.scss b/vendor/twbs/bootstrap/scss/_accordion.scss
index f09601bab..75588a5ad 100644
--- a/vendor/twbs/bootstrap/scss/_accordion.scss
+++ b/vendor/twbs/bootstrap/scss/_accordion.scss
@@ -147,3 +147,12 @@
}
}
}
+
+@if $enable-dark-mode {
+ @include color-mode(dark) {
+ .accordion-button::after {
+ --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon-dark)};
+ --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon-dark)};
+ }
+ }
+}
diff --git a/vendor/twbs/bootstrap/scss/_alert.scss b/vendor/twbs/bootstrap/scss/_alert.scss
index c8bc91b42..8647851b1 100644
--- a/vendor/twbs/bootstrap/scss/_alert.scss
+++ b/vendor/twbs/bootstrap/scss/_alert.scss
@@ -12,6 +12,7 @@
--#{$prefix}alert-border-color: transparent;
--#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color);
--#{$prefix}alert-border-radius: #{$alert-border-radius};
+ --#{$prefix}alert-link-color: inherit;
// scss-docs-end alert-css-vars
position: relative;
@@ -32,6 +33,7 @@
// Provide class for links that match alerts
.alert-link {
font-weight: $alert-link-font-weight;
+ color: var(--#{$prefix}alert-link-color);
}
@@ -54,18 +56,13 @@
// scss-docs-start alert-modifiers
-// Generate contextual modifier classes for colorizing the alert.
-
-@each $state, $value in $theme-colors {
- $alert-background: shift-color($value, $alert-bg-scale);
- $alert-border: shift-color($value, $alert-border-scale);
- $alert-color: shift-color($value, $alert-color-scale);
-
- @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) {
- $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale));
- }
+// Generate contextual modifier classes for colorizing the alert
+@each $state in map-keys($theme-colors) {
.alert-#{$state} {
- @include alert-variant($alert-background, $alert-border, $alert-color);
+ --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text);
+ --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle);
+ --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle);
+ --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text);
}
}
// scss-docs-end alert-modifiers
diff --git a/vendor/twbs/bootstrap/scss/_button-group.scss b/vendor/twbs/bootstrap/scss/_button-group.scss
index 79b100cbf..eb7969a2d 100644
--- a/vendor/twbs/bootstrap/scss/_button-group.scss
+++ b/vendor/twbs/bootstrap/scss/_button-group.scss
@@ -39,7 +39,7 @@
// Prevent double borders when buttons are next to each other
> :not(.btn-check:first-child) + .btn,
> .btn-group:not(:first-child) {
- margin-left: -$btn-border-width;
+ margin-left: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list
}
// Reset rounded corners
@@ -126,7 +126,7 @@
> .btn:not(:first-child),
> .btn-group:not(:first-child) {
- margin-top: -$btn-border-width;
+ margin-top: calc($btn-border-width * -1); // stylelint-disable-line function-disallowed-list
}
// Reset rounded corners
diff --git a/vendor/twbs/bootstrap/scss/_card.scss b/vendor/twbs/bootstrap/scss/_card.scss
index ce8c02f1f..70279df9e 100644
--- a/vendor/twbs/bootstrap/scss/_card.scss
+++ b/vendor/twbs/bootstrap/scss/_card.scss
@@ -7,6 +7,8 @@
--#{$prefix}card-spacer-y: #{$card-spacer-y};
--#{$prefix}card-spacer-x: #{$card-spacer-x};
--#{$prefix}card-title-spacer-y: #{$card-title-spacer-y};
+ --#{$prefix}card-title-color: #{$card-title-color};
+ --#{$prefix}card-subtitle-color: #{$card-subtitle-color};
--#{$prefix}card-border-width: #{$card-border-width};
--#{$prefix}card-border-color: #{$card-border-color};
--#{$prefix}card-border-radius: #{$card-border-radius};
@@ -73,11 +75,13 @@
.card-title {
margin-bottom: var(--#{$prefix}card-title-spacer-y);
+ color: var(--#{$prefix}card-title-color);
}
.card-subtitle {
margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list
margin-bottom: 0;
+ color: var(--#{$prefix}card-subtitle-color);
}
.card-text:last-child {
diff --git a/vendor/twbs/bootstrap/scss/_carousel.scss b/vendor/twbs/bootstrap/scss/_carousel.scss
index 3d8fb15a0..7f28061eb 100644
--- a/vendor/twbs/bootstrap/scss/_carousel.scss
+++ b/vendor/twbs/bootstrap/scss/_carousel.scss
@@ -42,7 +42,6 @@
display: block;
}
-/* rtl:begin:ignore */
.carousel-item-next:not(.carousel-item-start),
.active.carousel-item-end {
transform: translateX(100%);
@@ -53,8 +52,6 @@
transform: translateX(-100%);
}
-/* rtl:end:ignore */
-
//
// Alternate transitions
@@ -213,7 +210,7 @@
// Dark mode carousel
-.carousel-dark {
+@mixin carousel-dark() {
.carousel-control-prev-icon,
.carousel-control-next-icon {
filter: $carousel-dark-control-icon-filter;
@@ -227,3 +224,15 @@
color: $carousel-dark-caption-color;
}
}
+
+.carousel-dark {
+ @include carousel-dark();
+}
+
+@if $enable-dark-mode {
+ @include color-mode(dark) {
+ .carousel {
+ @include carousel-dark();
+ }
+ }
+}
diff --git a/vendor/twbs/bootstrap/scss/_close.scss b/vendor/twbs/bootstrap/scss/_close.scss
index a0813de8d..503a105cc 100644
--- a/vendor/twbs/bootstrap/scss/_close.scss
+++ b/vendor/twbs/bootstrap/scss/_close.scss
@@ -4,37 +4,58 @@
// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
.btn-close {
+ --#{$prefix}btn-close-color: #{$btn-close-color};
+ --#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) };
+ --#{$prefix}btn-close-opacity: #{$btn-close-opacity};
+ --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity};
+ --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow};
+ --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity};
+ --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity};
+ --#{$prefix}btn-close-white-filter: #{$btn-close-white-filter};
+
box-sizing: content-box;
width: $btn-close-width;
height: $btn-close-height;
padding: $btn-close-padding-y $btn-close-padding-x;
- color: $btn-close-color;
- background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements
+ color: var(--#{$prefix}btn-close-color);
+ background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements
border: 0; // for button elements
@include border-radius();
- opacity: $btn-close-opacity;
+ opacity: var(--#{$prefix}btn-close-opacity);
// Override <a>'s hover style
&:hover {
- color: $btn-close-color;
+ color: var(--#{$prefix}btn-close-color);
text-decoration: none;
- opacity: $btn-close-hover-opacity;
+ opacity: var(--#{$prefix}btn-close-hover-opacity);
}
&:focus {
outline: 0;
- box-shadow: $btn-close-focus-shadow;
- opacity: $btn-close-focus-opacity;
+ box-shadow: var(--#{$prefix}btn-close-focus-shadow);
+ opacity: var(--#{$prefix}btn-close-focus-opacity);
}
&:disabled,
&.disabled {
pointer-events: none;
user-select: none;
- opacity: $btn-close-disabled-opacity;
+ opacity: var(--#{$prefix}btn-close-disabled-opacity);
}
}
+@mixin btn-close-white() {
+ filter: var(--#{$prefix}btn-close-white-filter);
+}
+
.btn-close-white {
- filter: $btn-close-white-filter;
+ @include btn-close-white();
+}
+
+@if $enable-dark-mode {
+ @include color-mode(dark) {
+ .btn-close {
+ @include btn-close-white();
+ }
+ }
}
diff --git a/vendor/twbs/bootstrap/scss/_dropdown.scss b/vendor/twbs/bootstrap/scss/_dropdown.scss
index 8899d25a0..587ebb487 100644
--- a/vendor/twbs/bootstrap/scss/_dropdown.scss
+++ b/vendor/twbs/bootstrap/scss/_dropdown.scss
@@ -184,6 +184,7 @@
white-space: nowrap; // prevent links from randomly breaking onto new lines
background-color: transparent; // For `<button>`s
border: 0; // For `<button>`s
+ @include border-radius(var(--#{$prefix}dropdown-item-border-radius, 0));
&:hover,
&:focus {
diff --git a/vendor/twbs/bootstrap/scss/_functions.scss b/vendor/twbs/bootstrap/scss/_functions.scss
index 969a4b08b..26c953bae 100644
--- a/vendor/twbs/bootstrap/scss/_functions.scss
+++ b/vendor/twbs/bootstrap/scss/_functions.scss
@@ -198,7 +198,7 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
// Return opaque color
// opaque(#fff, rgba(0, 0, 0, .5)) => #808080
@function opaque($background, $foreground) {
- @return mix(rgba($foreground, 1), $background, opacity($foreground) * 100);
+ @return mix(rgba($foreground, 1), $background, opacity($foreground) * 100%);
}
// scss-docs-start color-functions
diff --git a/vendor/twbs/bootstrap/scss/_list-group.scss b/vendor/twbs/bootstrap/scss/_list-group.scss
index c0ec16468..3a976d680 100644
--- a/vendor/twbs/bootstrap/scss/_list-group.scss
+++ b/vendor/twbs/bootstrap/scss/_list-group.scss
@@ -180,13 +180,25 @@
// Add modifier classes to change text and background color on individual items.
// Organizationally, this must come after the `:hover` states.
-@each $state, $value in $theme-colors {
- $list-group-variant-bg: shift-color($value, $list-group-item-bg-scale);
- $list-group-variant-color: shift-color($value, $list-group-item-color-scale);
- @if (contrast-ratio($list-group-variant-bg, $list-group-variant-color) < $min-contrast-ratio) {
- $list-group-variant-color: mix($value, color-contrast($list-group-variant-bg), abs($list-group-item-color-scale));
- }
+@each $state in map-keys($theme-colors) {
+ .list-group-item-#{$state} {
+ --#{$prefix}list-group-color: var(--#{$prefix}#{$state}-text);
+ --#{$prefix}list-group-bg: var(--#{$prefix}#{$state}-bg-subtle);
+ --#{$prefix}list-group-border-color: var(--#{$prefix}#{$state}-border-subtle);
+
+ &.list-group-item-action {
+ &:hover,
+ &:focus {
+ --#{$prefix}list-group-action-hover-color: var(--#{$prefix}emphasis-color);
+ --#{$prefix}list-group-action-hover-bg: var(--#{$prefix}#{$state}-border-subtle);
+ }
- @include list-group-item-variant($state, $list-group-variant-bg, $list-group-variant-color);
+ &:active {
+ --#{$prefix}list-group-active-color: var(--#{$prefix}emphasis-color);
+ --#{$prefix}list-group-active-bg: var(--#{$prefix}#{$state}-text);
+ --#{$prefix}list-group-active-border-color: var(--#{$prefix}#{$state}-text);
+ }
+ }
+ }
}
// scss-docs-end list-group-modifiers
diff --git a/vendor/twbs/bootstrap/scss/_maps.scss b/vendor/twbs/bootstrap/scss/_maps.scss
index 2770a6761..6418a3f6c 100644
--- a/vendor/twbs/bootstrap/scss/_maps.scss
+++ b/vendor/twbs/bootstrap/scss/_maps.scss
@@ -6,6 +6,39 @@
$theme-colors-rgb: map-loop($theme-colors, to-rgb, "$value") !default;
// scss-docs-end theme-colors-rgb
+$theme-colors-text: (
+ "primary": $primary-text,
+ "secondary": $secondary-text,
+ "success": $success-text,
+ "info": $info-text,
+ "warning": $warning-text,
+ "danger": $danger-text,
+ "light": $light-text,
+ "dark": $dark-text,
+) !default;
+
+$theme-colors-bg-subtle: (
+ "primary": $primary-bg-subtle,
+ "secondary": $secondary-bg-subtle,
+ "success": $success-bg-subtle,
+ "info": $info-bg-subtle,
+ "warning": $warning-bg-subtle,
+ "danger": $danger-bg-subtle,
+ "light": $light-bg-subtle,
+ "dark": $dark-bg-subtle,
+) !default;
+
+$theme-colors-border-subtle: (
+ "primary": $primary-border-subtle,
+ "secondary": $secondary-border-subtle,
+ "success": $success-border-subtle,
+ "info": $info-border-subtle,
+ "warning": $warning-border-subtle,
+ "danger": $danger-border-subtle,
+ "light": $light-border-subtle,
+ "dark": $dark-border-subtle,
+) !default;
+
// Utilities maps
//
// Extends the default `$theme-colors` maps to help create our utilities.
@@ -25,6 +58,17 @@ $utilities-text: map-merge(
)
) !default;
$utilities-text-colors: map-loop($utilities-text, rgba-css-var, "$key", "text") !default;
+
+$utilities-text-emphasis-colors: (
+ "primary-emphasis": var(--#{$prefix}primary-text),
+ "secondary-emphasis": var(--#{$prefix}secondary-text),
+ "success-emphasis": var(--#{$prefix}success-text),
+ "info-emphasis": var(--#{$prefix}info-text),
+ "warning-emphasis": var(--#{$prefix}warning-text),
+ "danger-emphasis": var(--#{$prefix}danger-text),
+ "light-emphasis": var(--#{$prefix}light-text),
+ "dark-emphasis": var(--#{$prefix}dark-text)
+) !default;
// scss-docs-end utilities-text-colors
// scss-docs-start utilities-bg-colors
@@ -37,6 +81,18 @@ $utilities-bg: map-merge(
)
) !default;
$utilities-bg-colors: map-loop($utilities-bg, rgba-css-var, "$key", "bg") !default;
+
+$utilities-bg-subtle: (
+ "primary-subtle": var(--#{$prefix}primary-bg-subtle),
+ "secondary-subtle": var(--#{$prefix}secondary-bg-subtle),
+ "success-subtle": var(--#{$prefix}success-bg-subtle),
+ "info-subtle": var(--#{$prefix}info-bg-subtle),
+ "warning-subtle": var(--#{$prefix}warning-bg-subtle),
+ "danger-subtle": var(--#{$prefix}danger-bg-subtle),
+ "light-subtle": var(--#{$prefix}light-bg-subtle),
+ "dark-subtle": var(--#{$prefix}dark-bg-subtle)
+) !default;
+// $utilities-bg-subtle-colors: map-loop($utilities-bg-subtle, rgba-css-var, "$key", "bg") !default;
// scss-docs-end utilities-bg-colors
// scss-docs-start utilities-border-colors
@@ -47,6 +103,17 @@ $utilities-border: map-merge(
)
) !default;
$utilities-border-colors: map-loop($utilities-border, rgba-css-var, "$key", "border") !default;
+
+$utilities-border-subtle: (
+ "primary-subtle": var(--#{$prefix}primary-border-subtle),
+ "secondary-subtle": var(--#{$prefix}secondary-border-subtle),
+ "success-subtle": var(--#{$prefix}success-border-subtle),
+ "info-subtle": var(--#{$prefix}info-border-subtle),
+ "warning-subtle": var(--#{$prefix}warning-border-subtle),
+ "danger-subtle": var(--#{$prefix}danger-border-subtle),
+ "light-subtle": var(--#{$prefix}light-border-subtle),
+ "dark-subtle": var(--#{$prefix}dark-border-subtle)
+) !default;
// scss-docs-end utilities-border-colors
$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default;
diff --git a/vendor/twbs/bootstrap/scss/_mixins.scss b/vendor/twbs/bootstrap/scss/_mixins.scss
index af1f74f72..e1e130b16 100644
--- a/vendor/twbs/bootstrap/scss/_mixins.scss
+++ b/vendor/twbs/bootstrap/scss/_mixins.scss
@@ -10,6 +10,7 @@
// Helpers
@import "mixins/breakpoints";
+@import "mixins/color-mode";
@import "mixins/color-scheme";
@import "mixins/image";
@import "mixins/resize";
@@ -21,13 +22,11 @@
@import "mixins/utilities";
// Components
-@import "mixins/alert";
@import "mixins/backdrop";
@import "mixins/buttons";
@import "mixins/caret";
@import "mixins/pagination";
@import "mixins/lists";
-@import "mixins/list-group";
@import "mixins/forms";
@import "mixins/table-variants";
diff --git a/vendor/twbs/bootstrap/scss/_navbar.scss b/vendor/twbs/bootstrap/scss/_navbar.scss
index 599b055eb..b65355f44 100644
--- a/vendor/twbs/bootstrap/scss/_navbar.scss
+++ b/vendor/twbs/bootstrap/scss/_navbar.scss
@@ -276,3 +276,11 @@
--#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};
// scss-docs-end navbar-dark-css-vars
}
+
+@if $enable-dark-mode {
+ @include color-mode(dark) {
+ .navbar {
+ --#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-dark-toggler-icon-bg)};
+ }
+ }
+}
diff --git a/vendor/twbs/bootstrap/scss/_offcanvas.scss b/vendor/twbs/bootstrap/scss/_offcanvas.scss
index 23fc357f2..04e3ce644 100644
--- a/vendor/twbs/bootstrap/scss/_offcanvas.scss
+++ b/vendor/twbs/bootstrap/scss/_offcanvas.scss
@@ -12,6 +12,8 @@
--#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};
--#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};
--#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};
+ --#{$prefix}offcanvas-transition: #{transform $offcanvas-transition-duration ease-in-out};
+ --#{$prefix}offcanvas-title-line-height: #{$offcanvas-title-line-height};
// scss-docs-end offcanvas-css-vars
}
@@ -42,7 +44,7 @@
background-clip: padding-box;
outline: 0;
@include box-shadow(var(--#{$prefix}offcanvas-box-shadow));
- @include transition(transform $offcanvas-transition-duration ease-in-out);
+ @include transition(var(--#{$prefix}offcanvas-transition));
&.offcanvas-start {
top: 0;
@@ -134,7 +136,7 @@
.offcanvas-title {
margin-bottom: 0;
- line-height: $offcanvas-title-line-height;
+ line-height: var(--#{$prefix}offcanvas-title-line-height);
}
.offcanvas-body {
diff --git a/vendor/twbs/bootstrap/scss/_pagination.scss b/vendor/twbs/bootstrap/scss/_pagination.scss
index cf4db3c36..ba83d3578 100644
--- a/vendor/twbs/bootstrap/scss/_pagination.scss
+++ b/vendor/twbs/bootstrap/scss/_pagination.scss
@@ -75,7 +75,7 @@
margin-left: $pagination-margin-start;
}
- @if $pagination-margin-start == ($pagination-border-width * -1) {
+ @if $pagination-margin-start == calc($pagination-border-width * -1) {
&:first-child {
.page-link {
@include border-start-radius(var(--#{$prefix}pagination-border-radius));
diff --git a/vendor/twbs/bootstrap/scss/_progress.scss b/vendor/twbs/bootstrap/scss/_progress.scss
index 1bfafb58f..148c3815e 100644
--- a/vendor/twbs/bootstrap/scss/_progress.scss
+++ b/vendor/twbs/bootstrap/scss/_progress.scss
@@ -8,7 +8,8 @@
}
// scss-docs-end progress-keyframes
-.progress {
+.progress,
+.progress-stacked {
// scss-docs-start progress-css-vars
--#{$prefix}progress-height: #{$progress-height};
@include rfs($progress-font-size, --#{$prefix}progress-font-size);
@@ -46,6 +47,14 @@
background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height);
}
+.progress-stacked > .progress {
+ overflow: visible;
+}
+
+.progress-stacked > .progress > .progress-bar {
+ width: 100%;
+}
+
@if $enable-transitions {
.progress-bar-animated {
animation: $progress-bar-animation-timing progress-bar-stripes;
diff --git a/vendor/twbs/bootstrap/scss/_reboot.scss b/vendor/twbs/bootstrap/scss/_reboot.scss
index 8ac790399..305740587 100644
--- a/vendor/twbs/bootstrap/scss/_reboot.scss
+++ b/vendor/twbs/bootstrap/scss/_reboot.scss
@@ -87,7 +87,7 @@ hr {
font-style: $headings-font-style;
font-weight: $headings-font-weight;
line-height: $headings-line-height;
- color: $headings-color;
+ color: var(--#{$prefix}heading-color, inherit);
}
h1 {
@@ -241,11 +241,11 @@ sup { top: -.5em; }
// Links
a {
- color: var(--#{$prefix}link-color);
+ color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));
text-decoration: $link-decoration;
&:hover {
- color: var(--#{$prefix}link-hover-color);
+ --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);
text-decoration: $link-hover-decoration;
}
}
diff --git a/vendor/twbs/bootstrap/scss/_root.scss b/vendor/twbs/bootstrap/scss/_root.scss
index e64ae04e5..2d042d30e 100644
--- a/vendor/twbs/bootstrap/scss/_root.scss
+++ b/vendor/twbs/bootstrap/scss/_root.scss
@@ -1,4 +1,5 @@
-:root {
+:root,
+[data-bs-theme="light"] {
// Note: Custom variable values only support SassScript inside `#{}`.
// Colors
@@ -21,6 +22,18 @@
--#{$prefix}#{$color}-rgb: #{$value};
}
+ @each $color, $value in $theme-colors-text {
+ --#{$prefix}#{$color}-text: #{$value};
+ }
+
+ @each $color, $value in $theme-colors-bg-subtle {
+ --#{$prefix}#{$color}-bg-subtle: #{$value};
+ }
+
+ @each $color, $value in $theme-colors-border-subtle {
+ --#{$prefix}#{$color}-border-subtle: #{$value};
+ }
+
--#{$prefix}white-rgb: #{to-rgb($white)};
--#{$prefix}black-rgb: #{to-rgb($black)};
--#{$prefix}body-color-rgb: #{to-rgb($body-color)};
@@ -39,17 +52,50 @@
@if $font-size-root != null {
--#{$prefix}root-font-size: #{$font-size-root};
}
- --#{$prefix}body-font-family: #{$font-family-base};
+ --#{$prefix}body-font-family: #{inspect($font-family-base)};
@include rfs($font-size-base, --#{$prefix}body-font-size);
--#{$prefix}body-font-weight: #{$font-weight-base};
--#{$prefix}body-line-height: #{$line-height-base};
--#{$prefix}body-color: #{$body-color};
+
+ --#{$prefix}emphasis-color: #{$body-emphasis-color};
+ --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color)};
+
+ --#{$prefix}secondary-color: #{$body-secondary-color};
+ --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color)};
+ --#{$prefix}secondary-bg: #{$body-secondary-bg};
+ --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg)};
+
+ --#{$prefix}tertiary-color: #{$body-tertiary-color};
+ --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color)};
+ --#{$prefix}tertiary-bg: #{$body-tertiary-bg};
+ --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg)};
+
@if $body-text-align != null {
--#{$prefix}body-text-align: #{$body-text-align};
}
--#{$prefix}body-bg: #{$body-bg};
+ --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};
// scss-docs-end root-body-variables
+ @if $headings-color != null {
+ --#{$prefix}heading-color: #{$headings-color};
+ }
+
+ --#{$prefix}link-color: #{$link-color};
+ --#{$prefix}link-color-rgb: #{to-rgb($link-color)};
+ --#{$prefix}link-decoration: #{$link-decoration};
+
+ --#{$prefix}link-hover-color: #{$link-hover-color};
+ --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color)};
+
+ @if $link-hover-decoration != null {
+ --#{$prefix}link-hover-decoration: #{$link-hover-decoration};
+ }
+
+ --#{$prefix}code-color: #{$code-color};
+ --#{$prefix}highlight-bg: #{$mark-bg};
+
// scss-docs-start root-border-var
--#{$prefix}border-width: #{$border-width};
--#{$prefix}border-style: #{$border-style};
@@ -64,10 +110,86 @@
--#{$prefix}border-radius-pill: #{$border-radius-pill};
// scss-docs-end root-border-var
- --#{$prefix}link-color: #{$link-color};
- --#{$prefix}link-hover-color: #{$link-hover-color};
+ --#{$prefix}box-shadow: #{$box-shadow};
+ --#{$prefix}box-shadow-sm: #{$box-shadow-sm};
+ --#{$prefix}box-shadow-lg: #{$box-shadow-lg};
+ --#{$prefix}box-shadow-inset: #{$box-shadow-inset};
- --#{$prefix}code-color: #{$code-color};
+ --#{$prefix}emphasis-color: #{$emphasis-color};
+
+ // scss-docs-start form-control-vars
+ --#{$prefix}form-control-bg: var(--#{$prefix}body-bg);
+ --#{$prefix}form-control-disabled-bg: var(--#{$prefix}secondary-bg);
+ // scss-docs-end form-control-vars
--#{$prefix}highlight-bg: #{$mark-bg};
+
+ @each $name, $value in $grid-breakpoints {
+ --#{$prefix}breakpoint-#{$name}: #{$value};
+ }
+}
+
+@if $enable-dark-mode {
+ @include color-mode(dark, true) {
+ // scss-docs-start root-dark-mode-vars
+ --#{$prefix}body-color: #{$body-color-dark};
+ --#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};
+ --#{$prefix}body-bg: #{$body-bg-dark};
+ --#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};
+
+ --#{$prefix}emphasis-color: #{$body-emphasis-color-dark};
+ --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};
+
+ --#{$prefix}secondary-color: #{$body-secondary-color-dark};
+ --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)};
+ --#{$prefix}secondary-bg: #{$body-secondary-bg-dark};
+ --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};
+
+ --#{$prefix}tertiary-color: #{$body-tertiary-color-dark};
+ --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)};
+ --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark};
+ --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};
+
+ --#{$prefix}emphasis-color: #{$emphasis-color-dark};
+
+ --#{$prefix}primary-text: #{$primary-text-dark};
+ --#{$prefix}secondary-text: #{$secondary-text-dark};
+ --#{$prefix}success-text: #{$success-text-dark};
+ --#{$prefix}info-text: #{$info-text-dark};
+ --#{$prefix}warning-text: #{$warning-text-dark};
+ --#{$prefix}danger-text: #{$danger-text-dark};
+ --#{$prefix}light-text: #{$light-text-dark};
+ --#{$prefix}dark-text: #{$dark-text-dark};
+
+ --#{$prefix}primary-bg-subtle: #{$primary-bg-subtle-dark};
+ --#{$prefix}secondary-bg-subtle: #{$secondary-bg-subtle-dark};
+ --#{$prefix}success-bg-subtle: #{$success-bg-subtle-dark};
+ --#{$prefix}info-bg-subtle: #{$info-bg-subtle-dark};
+ --#{$prefix}warning-bg-subtle: #{$warning-bg-subtle-dark};
+ --#{$prefix}danger-bg-subtle: #{$danger-bg-subtle-dark};
+ --#{$prefix}light-bg-subtle: #{$light-bg-subtle-dark};
+ --#{$prefix}dark-bg-subtle: #{$dark-bg-subtle-dark};
+
+ --#{$prefix}primary-border-subtle: #{$primary-border-subtle-dark};
+ --#{$prefix}secondary-border-subtle: #{$secondary-border-subtle-dark};
+ --#{$prefix}success-border-subtle: #{$success-border-subtle-dark};
+ --#{$prefix}info-border-subtle: #{$info-border-subtle-dark};
+ --#{$prefix}warning-border-subtle: #{$warning-border-subtle-dark};
+ --#{$prefix}danger-border-subtle: #{$danger-border-subtle-dark};
+ --#{$prefix}light-border-subtle: #{$light-border-subtle-dark};
+ --#{$prefix}dark-border-subtle: #{$dark-border-subtle-dark};
+
+ --#{$prefix}heading-color: #{$headings-color-dark};
+
+ --#{$prefix}link-color: #{$link-color-dark};
+ --#{$prefix}link-hover-color: #{$link-hover-color-dark};
+ --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)};
+ --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};
+
+ --#{$prefix}code-color: #{$code-color-dark};
+
+ --#{$prefix}border-color: #{$border-color-dark};
+ --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};
+ // scss-docs-end root-dark-mode-vars
+ }
}
diff --git a/vendor/twbs/bootstrap/scss/_tables.scss b/vendor/twbs/bootstrap/scss/_tables.scss
index 1fdd43c6b..6c981f6c2 100644
--- a/vendor/twbs/bootstrap/scss/_tables.scss
+++ b/vendor/twbs/bootstrap/scss/_tables.scss
@@ -42,7 +42,7 @@
}
.table-group-divider {
- border-top: ($table-border-width * 2) solid $table-group-separator-color;
+ border-top: calc($table-border-width * 2) solid $table-group-separator-color; // stylelint-disable-line function-disallowed-list
}
//
diff --git a/vendor/twbs/bootstrap/scss/_utilities.scss b/vendor/twbs/bootstrap/scss/_utilities.scss
index 1e0d141ac..4c2c39dd7 100644
--- a/vendor/twbs/bootstrap/scss/_utilities.scss
+++ b/vendor/twbs/bootstrap/scss/_utilities.scss
@@ -22,6 +22,20 @@ $utilities: map-merge(
)
),
// scss-docs-end utils-float
+ // Object Fit utilities
+ // scss-docs-start utils-object-fit
+ "object-fit": (
+ responsive: true,
+ property: object-fit,
+ values: (
+ contain: contain,
+ cover: cover,
+ fill: fill,
+ scale: scale-down,
+ none: none,
+ )
+ ),
+ // scss-docs-end utils-object-fit
// Opacity utilities
// scss-docs-start utils-opacity
"opacity": (
@@ -40,6 +54,14 @@ $utilities: map-merge(
property: overflow,
values: auto hidden visible scroll,
),
+ "overflow-x": (
+ property: overflow-x,
+ values: auto hidden visible scroll,
+ ),
+ "overflow-y": (
+ property: overflow-y,
+ values: auto hidden visible scroll,
+ ),
// scss-docs-end utils-overflow
// scss-docs-start utils-display
"display": (
@@ -141,6 +163,11 @@ $utilities: map-merge(
),
values: $utilities-border-colors
),
+ "subtle-border-color": (
+ property: border-color,
+ class: border,
+ values: $utilities-border-subtle
+ ),
"border-width": (
css-var: true,
css-variable-name: border-width,
@@ -450,6 +477,18 @@ $utilities: map-merge(
class: gap,
values: $spacers
),
+ "row-gap": (
+ responsive: true,
+ property: row-gap,
+ class: row-gap,
+ values: $spacers
+ ),
+ "column-gap": (
+ responsive: true,
+ property: column-gap,
+ class: column-gap,
+ values: $spacers
+ ),
// scss-docs-end utils-spacing
// Text
// scss-docs-start utils-text
@@ -473,11 +512,12 @@ $utilities: map-merge(
property: font-weight,
class: fw,
values: (
- light: $font-weight-light,
lighter: $font-weight-lighter,
+ light: $font-weight-light,
normal: $font-weight-normal,
- bold: $font-weight-bold,
+ medium: $font-weight-medium,
semibold: $font-weight-semibold,
+ bold: $font-weight-bold,
bolder: $font-weight-bolder
)
),
@@ -535,9 +575,12 @@ $utilities: map-merge(
values: map-merge(
$utilities-text-colors,
(
- "muted": $text-muted,
+ "muted": $text-muted, // deprecated
"black-50": rgba($black, .5), // deprecated
"white-50": rgba($white, .5), // deprecated
+ "body-secondary": var(--#{$prefix}secondary-color),
+ "body-tertiary": var(--#{$prefix}tertiary-color),
+ "body-emphasis": var(--#{$prefix}emphasis-color),
"reset": inherit,
)
)
@@ -552,6 +595,11 @@ $utilities: map-merge(
100: 1
)
),
+ "text-color": (
+ property: color,
+ class: text,
+ values: $utilities-text-emphasis-colors
+ ),
// scss-docs-end utils-color
// scss-docs-start utils-bg-color
"background-color": (
@@ -563,7 +611,10 @@ $utilities: map-merge(
values: map-merge(
$utilities-bg-colors,
(
- "transparent": transparent
+ "transparent": transparent,
+ "body-secondary": rgba(var(--#{$prefix}secondary-bg-rgb), var(--#{$prefix}bg-opacity)),
+ "body-tertiary": rgba(var(--#{$prefix}tertiary-bg-rgb), var(--#{$prefix}bg-opacity)),
+ "body-emphasis": rgba(var(--#{$prefix}emphasis-bg-rgb), var(--#{$prefix}bg-opacity)),
)
)
),
@@ -578,6 +629,11 @@ $utilities: map-merge(
100: 1
)
),
+ "subtle-background-color": (
+ property: background-color,
+ class: bg,
+ values: $utilities-bg-subtle
+ ),
// scss-docs-end utils-bg-color
"gradient": (
property: background-image,
@@ -614,22 +670,62 @@ $utilities: map-merge(
"rounded-top": (
property: border-top-left-radius border-top-right-radius,
class: rounded-top,
- values: (null: var(--#{$prefix}border-radius))
+ values: (
+ null: var(--#{$prefix}border-radius),
+ 0: 0,
+ 1: var(--#{$prefix}border-radius-sm),
+ 2: var(--#{$prefix}border-radius),
+ 3: var(--#{$prefix}border-radius-lg),
+ 4: var(--#{$prefix}border-radius-xl),
+ 5: var(--#{$prefix}border-radius-2xl),
+ circle: 50%,
+ pill: var(--#{$prefix}border-radius-pill)
+ )
),
"rounded-end": (
property: border-top-right-radius border-bottom-right-radius,
class: rounded-end,
- values: (null: var(--#{$prefix}border-radius))
+ values: (
+ null: var(--#{$prefix}border-radius),
+ 0: 0,
+ 1: var(--#{$prefix}border-radius-sm),
+ 2: var(--#{$prefix}border-radius),
+ 3: var(--#{$prefix}border-radius-lg),
+ 4: var(--#{$prefix}border-radius-xl),
+ 5: var(--#{$prefix}border-radius-2xl),
+ circle: 50%,
+ pill: var(--#{$prefix}border-radius-pill)
+ )
),
"rounded-bottom": (
property: border-bottom-right-radius border-bottom-left-radius,
class: rounded-bottom,
- values: (null: var(--#{$prefix}border-radius))
+ values: (
+ null: var(--#{$prefix}border-radius),
+ 0: 0,
+ 1: var(--#{$prefix}border-radius-sm),
+ 2: var(--#{$prefix}border-radius),
+ 3: var(--#{$prefix}border-radius-lg),
+ 4: var(--#{$prefix}border-radius-xl),
+ 5: var(--#{$prefix}border-radius-2xl),
+ circle: 50%,
+ pill: var(--#{$prefix}border-radius-pill)
+ )
),
"rounded-start": (
property: border-bottom-left-radius border-top-left-radius,
class: rounded-start,
- values: (null: var(--#{$prefix}border-radius))
+ values: (
+ null: var(--#{$prefix}border-radius),
+ 0: 0,
+ 1: var(--#{$prefix}border-radius-sm),
+ 2: var(--#{$prefix}border-radius),
+ 3: var(--#{$prefix}border-radius-lg),
+ 4: var(--#{$prefix}border-radius-xl),
+ 5: var(--#{$prefix}border-radius-2xl),
+ circle: 50%,
+ pill: var(--#{$prefix}border-radius-pill)
+ )
),
// scss-docs-end utils-border-radius
// scss-docs-start utils-visibility
@@ -640,8 +736,13 @@ $utilities: map-merge(
visible: visible,
invisible: hidden,
)
- )
+ ),
// scss-docs-end utils-visibility
+ "z-index": (
+ property: z-index,
+ class: z,
+ values: $zindex-levels,
+ )
),
$utilities
);
diff --git a/vendor/twbs/bootstrap/scss/_variables-dark.scss b/vendor/twbs/bootstrap/scss/_variables-dark.scss
new file mode 100644
index 000000000..9a3874fdc
--- /dev/null
+++ b/vendor/twbs/bootstrap/scss/_variables-dark.scss
@@ -0,0 +1,70 @@
+// Dark color mode variables
+//
+// Custom variables for the `[data-bs-theme="dark"]` theme. Use this as a starting point for your own custom color modes by creating a new theme-specific file like `_variables-dark.scss` and adding the variables you need.
+
+//
+// Global colors
+//
+
+// scss-docs-start sass-dark-mode-vars
+$primary-text-dark: $blue-300 !default;
+$secondary-text-dark: $gray-300 !default;
+$success-text-dark: $green-300 !default;
+$info-text-dark: $cyan-300 !default;
+$warning-text-dark: $yellow-300 !default;
+$danger-text-dark: $red-300 !default;
+$light-text-dark: $gray-100 !default;
+$dark-text-dark: $gray-300 !default;
+
+$primary-bg-subtle-dark: $blue-900 !default;
+$secondary-bg-subtle-dark: $gray-900 !default;
+$success-bg-subtle-dark: $green-900 !default;
+$info-bg-subtle-dark: $cyan-900 !default;
+$warning-bg-subtle-dark: $yellow-900 !default;
+$danger-bg-subtle-dark: $red-900 !default;
+$light-bg-subtle-dark: $gray-800 !default;
+$dark-bg-subtle-dark: mix($gray-800, $black) !default;
+
+$primary-border-subtle-dark: $blue-700 !default;
+$secondary-border-subtle-dark: $gray-700 !default;
+$success-border-subtle-dark: $green-700 !default;
+$info-border-subtle-dark: $cyan-800 !default;
+$warning-border-subtle-dark: $yellow-800 !default;
+$danger-border-subtle-dark: $red-700 !default;
+$light-border-subtle-dark: $gray-700 !default;
+$dark-border-subtle-dark: $gray-800 !default;
+
+$body-color-dark: $gray-500 !default;
+$body-bg-dark: $gray-900 !default;
+$body-emphasis-color-dark: $gray-100 !default;
+$body-secondary-color-dark: rgba($body-color-dark, .75) !default;
+$body-secondary-bg-dark: $gray-800 !default;
+$body-tertiary-color-dark: rgba($body-color-dark, .5) !default;
+$body-tertiary-bg-dark: mix($gray-800, $gray-900, 50%) !default;
+$emphasis-color-dark: $white !default;
+$border-color-dark: $gray-700 !default;
+$border-color-translucent-dark: rgba($white, .15) !default;
+$headings-color-dark: #fff !default;
+$link-color-dark: $blue-300 !default;
+$link-hover-color-dark: $blue-200 !default;
+$code-color-dark: $pink-300 !default;
+
+
+//
+// Forms
+//
+
+$form-select-indicator-color-dark: $body-color-dark !default;
+$form-select-indicator-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color-dark}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>") !default;
+
+$form-switch-color-dark: rgba($white, .25) !default;
+$form-switch-bg-image-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color-dark}'/></svg>") !default;
+
+
+//
+// Accordion
+//
+
+$accordion-button-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$primary-text-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
+$accordion-button-active-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$primary-text-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>") !default;
+// scss-docs-end sass-dark-mode-vars
diff --git a/vendor/twbs/bootstrap/scss/_variables.scss b/vendor/twbs/bootstrap/scss/_variables.scss
index e0218365b..09438a6cb 100644
--- a/vendor/twbs/bootstrap/scss/_variables.scss
+++ b/vendor/twbs/bootstrap/scss/_variables.scss
@@ -321,6 +321,33 @@ $theme-colors: (
) !default;
// scss-docs-end theme-colors-map
+$primary-text: $blue-600 !default;
+$secondary-text: $gray-600 !default;
+$success-text: $green-600 !default;
+$info-text: $cyan-700 !default;
+$warning-text: $yellow-700 !default;
+$danger-text: $red-600 !default;
+$light-text: $gray-600 !default;
+$dark-text: $gray-700 !default;
+
+$primary-bg-subtle: $blue-100 !default;
+$secondary-bg-subtle: $gray-100 !default;
+$success-bg-subtle: $green-100 !default;
+$info-bg-subtle: $cyan-100 !default;
+$warning-bg-subtle: $yellow-100 !default;
+$danger-bg-subtle: $red-100 !default;
+$light-bg-subtle: mix($gray-100, $white) !default;
+$dark-bg-subtle: $gray-400 !default;
+
+$primary-border-subtle: $blue-200 !default;
+$secondary-border-subtle: $gray-200 !default;
+$success-border-subtle: $green-200 !default;
+$info-border-subtle: $cyan-200 !default;
+$warning-border-subtle: $yellow-200 !default;
+$danger-border-subtle: $red-200 !default;
+$light-border-subtle: $gray-200 !default;
+$dark-border-subtle: $gray-500 !default;
+
// Characters which are escaped by the escape-svg function
$escaped-characters: (
("<", "%3c"),
@@ -351,6 +378,9 @@ $enable-negative-margins: false !default;
$enable-deprecation-messages: true !default;
$enable-important-utilities: true !default;
+$enable-dark-mode: true !default;
+$color-mode-type: data !default; // `data` or `media-query`
+
// Prefix for :root CSS variables
$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`
@@ -398,9 +428,19 @@ $position-values: (
//
// Settings for the `<body>` element.
-$body-bg: $white !default;
-$body-color: $gray-900 !default;
$body-text-align: null !default;
+$body-color: $gray-900 !default;
+$body-bg: $white !default;
+
+$body-emphasis-color: $black !default;
+
+$body-secondary-color: rgba($body-color, .75) !default;
+$body-secondary-bg: $gray-200 !default;
+
+$body-tertiary-color: rgba($body-color, .5) !default;
+$body-tertiary-bg: $gray-100 !default;
+
+$emphasis-color: $black !default;
// Links
//
@@ -485,7 +525,6 @@ $border-widths: (
4: 4px,
5: 5px
) !default;
-
$border-style: solid !default;
$border-color: $gray-300 !default;
$border-color-translucent: rgba($black, .175) !default;
@@ -501,10 +540,10 @@ $border-radius-pill: 50rem !default;
// scss-docs-end border-radius-variables
// scss-docs-start box-shadow-variables
-$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;
-$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;
-$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;
-$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;
+$box-shadow: 0 .5rem 1rem rgba(var(--#{$prefix}body-color-rgb), .15) !default;
+$box-shadow-sm: 0 .125rem .25rem rgba(var(--#{$prefix}body-color-rgb), .075) !default;
+$box-shadow-lg: 0 1rem 3rem rgba(var(--#{$prefix}body-color-rgb), .175) !default;
+$box-shadow-inset: inset 0 1px 2px rgba(var(--#{$prefix}body-color-rgb), .075) !default;
// scss-docs-end box-shadow-variables
$component-active-color: $white !default;
@@ -556,6 +595,7 @@ $font-size-lg: $font-size-base * 1.25 !default;
$font-weight-lighter: lighter !default;
$font-weight-light: 300 !default;
$font-weight-normal: 400 !default;
+$font-weight-medium: 500 !default;
$font-weight-semibold: 600 !default;
$font-weight-bold: 700 !default;
$font-weight-bolder: bolder !default;
@@ -618,7 +658,7 @@ $small-font-size: .875em !default;
$sub-sup-font-size: .75em !default;
-$text-muted: $gray-600 !default;
+$text-muted: var(--#{$prefix}secondary-color) !default;
$initialism-font-size: $small-font-size !default;
@@ -636,7 +676,7 @@ $hr-height: null !default; // Deprecated in v5.2.0
// fusv-enable
$hr-border-color: null !default; // Allows for inherited colors
-$hr-border-width: $border-width !default;
+$hr-border-width: var(--#{$prefix}border-width) !default;
$hr-opacity: .25 !default;
$legend-margin-bottom: .5rem !default;
@@ -683,7 +723,7 @@ $table-hover-bg-factor: .075 !default;
$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;
$table-border-factor: .1 !default;
-$table-border-width: $border-width !default;
+$table-border-width: var(--#{$prefix}border-width) !default;
$table-border-color: var(--#{$prefix}border-color) !default;
$table-striped-order: odd !default;
@@ -735,7 +775,7 @@ $input-btn-padding-y-lg: .5rem !default;
$input-btn-padding-x-lg: 1rem !default;
$input-btn-font-size-lg: $font-size-lg !default;
-$input-btn-border-width: $border-width !default;
+$input-btn-border-width: var(--#{$prefix}border-width) !default;
// scss-docs-end input-btn-variables
@@ -824,13 +864,13 @@ $input-padding-y-lg: $input-btn-padding-y-lg !default;
$input-padding-x-lg: $input-btn-padding-x-lg !default;
$input-font-size-lg: $input-btn-font-size-lg !default;
-$input-bg: $body-bg !default;
+$input-bg: var(--#{$prefix}form-control-bg) !default;
$input-disabled-color: null !default;
-$input-disabled-bg: $gray-200 !default;
+$input-disabled-bg: var(--#{$prefix}form-control-disabled-bg) !default;
$input-disabled-border-color: null !default;
-$input-color: $body-color !default;
-$input-border-color: $gray-400 !default;
+$input-color: var(--#{$prefix}body-color) !default;
+$input-border-color: var(--#{$prefix}border-color) !default; //$gray-400
$input-border-width: $input-btn-border-width !default;
$input-box-shadow: $box-shadow-inset !default;
@@ -844,10 +884,10 @@ $input-focus-color: $input-color !default;
$input-focus-width: $input-btn-focus-width !default;
$input-focus-box-shadow: $input-btn-focus-box-shadow !default;
-$input-placeholder-color: $gray-600 !default;
-$input-plaintext-color: $body-color !default;
+$input-placeholder-color: var(--#{$prefix}secondary-color) !default;
+$input-plaintext-color: var(--#{$prefix}body-color) !default;
-$input-height-border: $input-border-width * 2 !default;
+$input-height-border: calc($input-border-width * 2) !default; // stylelint-disable-line function-disallowed-list
$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;
$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;
@@ -874,7 +914,7 @@ $form-check-transition: null !default;
$form-check-input-active-filter: brightness(90%) !default;
$form-check-input-bg: $input-bg !default;
-$form-check-input-border: 1px solid rgba($black, .25) !default;
+$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default;
$form-check-input-border-radius: .25em !default;
$form-check-radio-border-radius: 50% !default;
$form-check-input-focus-border: $input-focus-border-color !default;
@@ -919,7 +959,7 @@ $input-group-addon-padding-y: $input-padding-y !default;
$input-group-addon-padding-x: $input-padding-x !default;
$input-group-addon-font-weight: $input-font-weight !default;
$input-group-addon-color: $input-color !default;
-$input-group-addon-bg: $gray-200 !default;
+$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default;
$input-group-addon-border-color: $input-border-color !default;
// scss-docs-end input-group-variables
@@ -934,7 +974,7 @@ $form-select-line-height: $input-line-height !default;
$form-select-color: $input-color !default;
$form-select-bg: $input-bg !default;
$form-select-disabled-color: null !default;
-$form-select-disabled-bg: $gray-200 !default;
+$form-select-disabled-bg: $input-disabled-bg !default;
$form-select-disabled-border-color: $input-disabled-border-color !default;
$form-select-bg-position: right $form-select-padding-x center !default;
$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions
@@ -971,7 +1011,7 @@ $form-select-transition: $input-transition !default;
$form-range-track-width: 100% !default;
$form-range-track-height: .5rem !default;
$form-range-track-cursor: pointer !default;
-$form-range-track-bg: $gray-300 !default;
+$form-range-track-bg: var(--#{$prefix}tertiary-bg) !default;
$form-range-track-border-radius: 1rem !default;
$form-range-track-box-shadow: $box-shadow-inset !default;
@@ -984,26 +1024,28 @@ $form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !defa
$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;
$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge
$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;
-$form-range-thumb-disabled-bg: $gray-500 !default;
+$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;
$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
// scss-docs-end form-range-variables
// scss-docs-start form-file-variables
$form-file-button-color: $input-color !default;
-$form-file-button-bg: $input-group-addon-bg !default;
-$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;
+$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default;
+$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default;
// scss-docs-end form-file-variables
// scss-docs-start form-floating-variables
-$form-floating-height: add(3.5rem, $input-height-border) !default;
-$form-floating-line-height: 1.25 !default;
-$form-floating-padding-x: $input-padding-x !default;
-$form-floating-padding-y: 1rem !default;
-$form-floating-input-padding-t: 1.625rem !default;
-$form-floating-input-padding-b: .625rem !default;
-$form-floating-label-opacity: .65 !default;
-$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;
-$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;
+$form-floating-height: add(3.5rem, $input-height-border) !default;
+$form-floating-line-height: 1.25 !default;
+$form-floating-padding-x: $input-padding-x !default;
+$form-floating-padding-y: 1rem !default;
+$form-floating-input-padding-t: 1.625rem !default;
+$form-floating-input-padding-b: .625rem !default;
+$form-floating-label-height: 1.875em !default;
+$form-floating-label-opacity: .65 !default;
+$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;
+$form-floating-label-disabled-color: $gray-600 !default;
+$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;
// scss-docs-end form-floating-variables
// Form validation
@@ -1024,12 +1066,20 @@ $form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://w
// scss-docs-start form-validation-states
$form-validation-states: (
"valid": (
- "color": $form-feedback-valid-color,
- "icon": $form-feedback-icon-valid
+ "color": var(--#{$prefix}success-text),
+ "icon": $form-feedback-icon-valid,
+ "tooltip-color": #fff,
+ "tooltip-bg-color": var(--#{$prefix}success),
+ "focus-box-shadow": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity),
+ "border-color": var(--#{$prefix}success),
),
"invalid": (
- "color": $form-feedback-invalid-color,
- "icon": $form-feedback-icon-invalid
+ "color": var(--#{$prefix}danger-text),
+ "icon": $form-feedback-icon-invalid,
+ "tooltip-color": #fff,
+ "tooltip-bg-color": var(--#{$prefix}danger),
+ "focus-box-shadow": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity),
+ "border-color": var(--#{$prefix}danger),
)
) !default;
// scss-docs-end form-validation-states
@@ -1052,6 +1102,16 @@ $zindex-tooltip: 1080 !default;
$zindex-toast: 1090 !default;
// scss-docs-end zindex-stack
+// scss-docs-start zindex-levels-map
+$zindex-levels: (
+ n1: -1,
+ 0: 0,
+ 1: 1,
+ 2: 2,
+ 3: 3
+) !default;
+// scss-docs-end zindex-levels-map
+
// Navs
@@ -1063,15 +1123,15 @@ $nav-link-font-weight: null !default;
$nav-link-color: var(--#{$prefix}link-color) !default;
$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;
$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;
-$nav-link-disabled-color: $gray-600 !default;
+$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default;
-$nav-tabs-border-color: $gray-300 !default;
-$nav-tabs-border-width: $border-width !default;
-$nav-tabs-border-radius: $border-radius !default;
-$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;
-$nav-tabs-link-active-color: $gray-700 !default;
-$nav-tabs-link-active-bg: $body-bg !default;
-$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;
+$nav-tabs-border-color: var(--#{$prefix}border-color) !default;
+$nav-tabs-border-width: var(--#{$prefix}border-width) !default;
+$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default;
+$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default;
+$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default;
+$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default;
+$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default;
$nav-pills-border-radius: $border-radius !default;
$nav-pills-link-active-color: $component-active-color !default;
@@ -1101,12 +1161,12 @@ $navbar-toggler-border-radius: $btn-border-radius !default;
$navbar-toggler-focus-width: $btn-focus-width !default;
$navbar-toggler-transition: box-shadow .15s ease-in-out !default;
-$navbar-light-color: rgba($black, .55) !default;
-$navbar-light-hover-color: rgba($black, .7) !default;
-$navbar-light-active-color: rgba($black, .9) !default;
-$navbar-light-disabled-color: rgba($black, .3) !default;
-$navbar-light-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>") !default;
-$navbar-light-toggler-border-color: rgba($black, .1) !default;
+$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default;
+$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default;
+$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default;
+$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default;
+$navbar-light-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'><path stroke='#{rgba($body-color, .75)}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>") !default;
+$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default;
$navbar-light-brand-color: $navbar-light-active-color !default;
$navbar-light-brand-hover-color: $navbar-light-active-color !default;
// scss-docs-end navbar-variables
@@ -1133,19 +1193,19 @@ $dropdown-padding-x: 0 !default;
$dropdown-padding-y: .5rem !default;
$dropdown-spacer: .125rem !default;
$dropdown-font-size: $font-size-base !default;
-$dropdown-color: $body-color !default;
-$dropdown-bg: $white !default;
+$dropdown-color: var(--#{$prefix}body-color) !default;
+$dropdown-bg: var(--#{$prefix}body-bg) !default;
$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;
$dropdown-border-radius: $border-radius !default;
-$dropdown-border-width: $border-width !default;
-$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;
+$dropdown-border-width: var(--#{$prefix}border-width) !default;
+$dropdown-inner-border-radius: calc($dropdown-border-radius - $dropdown-border-width) !default; // stylelint-disable-line function-disallowed-list
$dropdown-divider-bg: $dropdown-border-color !default;
$dropdown-divider-margin-y: $spacer * .5 !default;
$dropdown-box-shadow: $box-shadow !default;
-$dropdown-link-color: $gray-900 !default;
-$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;
-$dropdown-link-hover-bg: $gray-200 !default;
+$dropdown-link-color: var(--#{$prefix}body-color) !default;
+$dropdown-link-hover-color: $dropdown-link-color !default;
+$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default;
$dropdown-link-active-color: $component-active-color !default;
$dropdown-link-active-bg: $component-active-bg !default;
@@ -1192,28 +1252,28 @@ $pagination-padding-x-lg: 1.5rem !default;
$pagination-font-size: $font-size-base !default;
$pagination-color: var(--#{$prefix}link-color) !default;
-$pagination-bg: $white !default;
-$pagination-border-radius: $border-radius !default;
-$pagination-border-width: $border-width !default;
-$pagination-margin-start: ($pagination-border-width * -1) !default;
-$pagination-border-color: $gray-300 !default;
+$pagination-bg: var(--#{$prefix}body-bg) !default;
+$pagination-border-radius: var(--#{$prefix}border-radius) !default;
+$pagination-border-width: var(--#{$prefix}border-width) !default;
+$pagination-margin-start: calc($pagination-border-width * -1) !default; // stylelint-disable-line function-disallowed-list
+$pagination-border-color: var(--#{$prefix}border-color) !default;
$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;
-$pagination-focus-bg: $gray-200 !default;
+$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;
$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;
$pagination-focus-outline: 0 !default;
$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;
-$pagination-hover-bg: $gray-200 !default;
-$pagination-hover-border-color: $gray-300 !default;
+$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;
+$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this?
$pagination-active-color: $component-active-color !default;
$pagination-active-bg: $component-active-bg !default;
-$pagination-active-border-color: $pagination-active-bg !default;
+$pagination-active-border-color: $component-active-bg !default;
-$pagination-disabled-color: $gray-600 !default;
-$pagination-disabled-bg: $white !default;
-$pagination-disabled-border-color: $gray-300 !default;
+$pagination-disabled-color: var(--#{$prefix}secondary-color) !default;
+$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default;
+$pagination-disabled-border-color: var(--#{$prefix}border-color) !default;
$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
@@ -1235,18 +1295,20 @@ $placeholder-opacity-min: .2 !default;
$card-spacer-y: $spacer !default;
$card-spacer-x: $spacer !default;
$card-title-spacer-y: $spacer * .5 !default;
-$card-border-width: $border-width !default;
+$card-title-color: null !default;
+$card-subtitle-color: null !default;
+$card-border-width: var(--#{$prefix}border-width) !default;
$card-border-color: var(--#{$prefix}border-color-translucent) !default;
-$card-border-radius: $border-radius !default;
+$card-border-radius: var(--#{$prefix}border-radius) !default;
$card-box-shadow: null !default;
$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;
$card-cap-padding-y: $card-spacer-y * .5 !default;
$card-cap-padding-x: $card-spacer-x !default;
-$card-cap-bg: rgba($black, .03) !default;
+$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default;
$card-cap-color: null !default;
$card-height: null !default;
$card-color: null !default;
-$card-bg: $white !default;
+$card-bg: var(--#{$prefix}body-bg) !default;
$card-img-overlay-padding: $spacer !default;
$card-group-margin: $grid-gutter-width * .5 !default;
// scss-docs-end card-variables
@@ -1256,11 +1318,11 @@ $card-group-margin: $grid-gutter-width * .5 !default;
// scss-docs-start accordion-variables
$accordion-padding-y: 1rem !default;
$accordion-padding-x: 1.25rem !default;
-$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon
-$accordion-bg: $body-bg !default;
-$accordion-border-width: $border-width !default;
+$accordion-color: var(--#{$prefix}body-color) !default; // Sass variable because of $accordion-button-icon
+$accordion-bg: var(--#{$prefix}body-bg) !default;
+$accordion-border-width: var(--#{$prefix}border-width) !default;
$accordion-border-color: var(--#{$prefix}border-color) !default;
-$accordion-border-radius: $border-radius !default;
+$accordion-border-radius: var(--#{$prefix}border-radius) !default;
$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;
$accordion-body-padding-y: $accordion-padding-y !default;
@@ -1268,18 +1330,18 @@ $accordion-body-padding-x: $accordion-padding-x !default;
$accordion-button-padding-y: $accordion-padding-y !default;
$accordion-button-padding-x: $accordion-padding-x !default;
-$accordion-button-color: $accordion-color !default;
+$accordion-button-color: var(--#{$prefix}body-color) !default;
$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;
$accordion-transition: $btn-transition, border-radius .15s ease !default;
-$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;
-$accordion-button-active-color: shade-color($primary, 10%) !default;
+$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default;
+$accordion-button-active-color: var(--#{$prefix}primary-text) !default;
$accordion-button-focus-border-color: $input-focus-border-color !default;
$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;
$accordion-icon-width: 1.25rem !default;
-$accordion-icon-color: $accordion-button-color !default;
-$accordion-icon-active-color: $accordion-button-active-color !default;
+$accordion-icon-color: $body-color !default;
+$accordion-icon-active-color: $primary-text !default;
$accordion-icon-transition: transform .2s ease-in-out !default;
$accordion-icon-transform: rotate(-180deg) !default;
@@ -1292,9 +1354,9 @@ $accordion-button-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w
// scss-docs-start tooltip-variables
$tooltip-font-size: $font-size-sm !default;
$tooltip-max-width: 200px !default;
-$tooltip-color: $white !default;
-$tooltip-bg: $black !default;
-$tooltip-border-radius: $border-radius !default;
+$tooltip-color: var(--#{$prefix}body-bg) !default;
+$tooltip-bg: var(--#{$prefix}emphasis-color) !default;
+$tooltip-border-radius: var(--#{$prefix}border-radius) !default;
$tooltip-opacity: .9 !default;
$tooltip-padding-y: $spacer * .25 !default;
$tooltip-padding-x: $spacer * .5 !default;
@@ -1322,21 +1384,21 @@ $form-feedback-tooltip-border-radius: $tooltip-border-radius !default;
// scss-docs-start popover-variables
$popover-font-size: $font-size-sm !default;
-$popover-bg: $white !default;
+$popover-bg: var(--#{$prefix}body-bg) !default;
$popover-max-width: 276px !default;
-$popover-border-width: $border-width !default;
+$popover-border-width: var(--#{$prefix}border-width) !default;
$popover-border-color: var(--#{$prefix}border-color-translucent) !default;
-$popover-border-radius: $border-radius-lg !default;
-$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;
+$popover-border-radius: var(--#{$prefix}border-radius-lg) !default;
+$popover-inner-border-radius: calc($popover-border-radius - $popover-border-width) !default; // stylelint-disable-line function-disallowed-list
$popover-box-shadow: $box-shadow !default;
$popover-header-font-size: $font-size-base !default;
-$popover-header-bg: shade-color($popover-bg, 6%) !default;
+$popover-header-bg: var(--#{$prefix}secondary-bg) !default;
$popover-header-color: $headings-color !default;
$popover-header-padding-y: .5rem !default;
$popover-header-padding-x: $spacer !default;
-$popover-body-color: $body-color !default;
+$popover-body-color: var(--#{$prefix}body-color) !default;
$popover-body-padding-y: $spacer !default;
$popover-body-padding-x: $spacer !default;
@@ -1359,16 +1421,16 @@ $toast-padding-x: .75rem !default;
$toast-padding-y: .5rem !default;
$toast-font-size: .875rem !default;
$toast-color: null !default;
-$toast-background-color: rgba($white, .85) !default;
-$toast-border-width: $border-width !default;
+$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;
+$toast-border-width: var(--#{$prefix}border-width) !default;
$toast-border-color: var(--#{$prefix}border-color-translucent) !default;
-$toast-border-radius: $border-radius !default;
-$toast-box-shadow: $box-shadow !default;
+$toast-border-radius: var(--#{$prefix}border-radius) !default;
+$toast-box-shadow: var(--#{$prefix}box-shadow) !default;
$toast-spacing: $container-padding-x !default;
-$toast-header-color: $gray-600 !default;
-$toast-header-background-color: rgba($white, .85) !default;
-$toast-header-border-color: rgba($black, .05) !default;
+$toast-header-color: var(--#{$prefix}secondary-color) !default;
+$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default;
+$toast-header-border-color: $toast-border-color !default;
// scss-docs-end toast-variables
@@ -1397,10 +1459,10 @@ $modal-dialog-margin-y-sm-up: 1.75rem !default;
$modal-title-line-height: $line-height-base !default;
$modal-content-color: null !default;
-$modal-content-bg: $white !default;
+$modal-content-bg: var(--#{$prefix}body-bg) !default;
$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;
-$modal-content-border-width: $border-width !default;
-$modal-content-border-radius: $border-radius-lg !default;
+$modal-content-border-width: var(--#{$prefix}border-width) !default;
+$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default;
$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;
$modal-content-box-shadow-xs: $box-shadow-sm !default;
$modal-content-box-shadow-sm-up: $box-shadow !default;
@@ -1440,22 +1502,27 @@ $alert-padding-x: $spacer !default;
$alert-margin-bottom: 1rem !default;
$alert-border-radius: $border-radius !default;
$alert-link-font-weight: $font-weight-bold !default;
-$alert-border-width: $border-width !default;
+$alert-border-width: var(--#{$prefix}border-width) !default;
$alert-bg-scale: -80% !default;
$alert-border-scale: -70% !default;
$alert-color-scale: 40% !default;
$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side
// scss-docs-end alert-variables
+// fusv-disable
+$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6
+$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6
+$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6
+// fusv-enable
// Progress bars
// scss-docs-start progress-variables
$progress-height: 1rem !default;
$progress-font-size: $font-size-base * .75 !default;
-$progress-bg: $gray-200 !default;
-$progress-border-radius: $border-radius !default;
-$progress-box-shadow: $box-shadow-inset !default;
+$progress-bg: var(--#{$prefix}secondary-bg) !default;
+$progress-border-radius: var(--#{$prefix}border-radius) !default;
+$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default;
$progress-bar-color: $white !default;
$progress-bar-bg: $primary !default;
$progress-bar-animation-timing: 1s linear infinite !default;
@@ -1466,30 +1533,32 @@ $progress-bar-transition: width .6s ease !default;
// List group
// scss-docs-start list-group-variables
-$list-group-color: $gray-900 !default;
-$list-group-bg: $white !default;
-$list-group-border-color: rgba($black, .125) !default;
-$list-group-border-width: $border-width !default;
-$list-group-border-radius: $border-radius !default;
+$list-group-color: var(--#{$prefix}body-color) !default;
+$list-group-bg: var(--#{$prefix}body-bg) !default;
+$list-group-border-color: var(--#{$prefix}border-color) !default;
+$list-group-border-width: var(--#{$prefix}border-width) !default;
+$list-group-border-radius: var(--#{$prefix}border-radius) !default;
$list-group-item-padding-y: $spacer * .5 !default;
$list-group-item-padding-x: $spacer !default;
-$list-group-item-bg-scale: -80% !default;
-$list-group-item-color-scale: 40% !default;
+// fusv-disable
+$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0
+$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0
+// fusv-enable
-$list-group-hover-bg: $gray-100 !default;
+$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default;
$list-group-active-color: $component-active-color !default;
$list-group-active-bg: $component-active-bg !default;
$list-group-active-border-color: $list-group-active-bg !default;
-$list-group-disabled-color: $gray-600 !default;
+$list-group-disabled-color: var(--#{$prefix}secondary-color) !default;
$list-group-disabled-bg: $list-group-bg !default;
-$list-group-action-color: $gray-700 !default;
-$list-group-action-hover-color: $list-group-action-color !default;
+$list-group-action-color: var(--#{$prefix}secondary-color) !default;
+$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default;
-$list-group-action-active-color: $body-color !default;
-$list-group-action-active-bg: $gray-200 !default;
+$list-group-action-active-color: var(--#{$prefix}body-color) !default;
+$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default;
// scss-docs-end list-group-variables
@@ -1497,11 +1566,11 @@ $list-group-action-active-bg: $gray-200 !default;
// scss-docs-start thumbnail-variables
$thumbnail-padding: .25rem !default;
-$thumbnail-bg: $body-bg !default;
-$thumbnail-border-width: $border-width !default;
+$thumbnail-bg: var(--#{$prefix}body-bg) !default;
+$thumbnail-border-width: var(--#{$prefix}border-width) !default;
$thumbnail-border-color: var(--#{$prefix}border-color) !default;
-$thumbnail-border-radius: $border-radius !default;
-$thumbnail-box-shadow: $box-shadow-sm !default;
+$thumbnail-border-radius: var(--#{$prefix}border-radius) !default;
+$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default;
// scss-docs-end thumbnail-variables
@@ -1509,7 +1578,7 @@ $thumbnail-box-shadow: $box-shadow-sm !default;
// scss-docs-start figure-variables
$figure-caption-font-size: $small-font-size !default;
-$figure-caption-color: $gray-600 !default;
+$figure-caption-color: var(--#{$prefix}secondary-color) !default;
// scss-docs-end figure-variables
@@ -1522,8 +1591,8 @@ $breadcrumb-padding-x: 0 !default;
$breadcrumb-item-padding-x: .5rem !default;
$breadcrumb-margin-bottom: 1rem !default;
$breadcrumb-bg: null !default;
-$breadcrumb-divider-color: $gray-600 !default;
-$breadcrumb-active-color: $gray-600 !default;
+$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default;
+$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default;
$breadcrumb-divider: quote("/") !default;
$breadcrumb-divider-flipped: $breadcrumb-divider !default;
$breadcrumb-border-radius: null !default;
@@ -1612,8 +1681,8 @@ $offcanvas-transition-duration: .3s !default;
$offcanvas-border-color: $modal-content-border-color !default;
$offcanvas-border-width: $modal-content-border-width !default;
$offcanvas-title-line-height: $modal-title-line-height !default;
-$offcanvas-bg-color: $modal-content-bg !default;
-$offcanvas-color: $modal-content-color !default;
+$offcanvas-bg-color: var(--#{$prefix}body-bg) !default;
+$offcanvas-color: var(--#{$prefix}body-color) !default;
$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;
$offcanvas-backdrop-bg: $modal-backdrop-bg !default;
$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;
diff --git a/vendor/twbs/bootstrap/scss/bootstrap-grid.scss b/vendor/twbs/bootstrap/scss/bootstrap-grid.scss
index 1c4cdd1a0..4bfd4723b 100644
--- a/vendor/twbs/bootstrap/scss/bootstrap-grid.scss
+++ b/vendor/twbs/bootstrap/scss/bootstrap-grid.scss
@@ -5,10 +5,12 @@ $include-column-box-sizing: true !default;
@import "functions";
@import "variables";
+@import "variables-dark";
@import "maps";
@import "mixins/lists";
@import "mixins/breakpoints";
+@import "mixins/color-mode";
@import "mixins/container";
@import "mixins/grid";
@import "mixins/utilities";
diff --git a/vendor/twbs/bootstrap/scss/bootstrap-reboot.scss b/vendor/twbs/bootstrap/scss/bootstrap-reboot.scss
index af5274594..5b69b9552 100644
--- a/vendor/twbs/bootstrap/scss/bootstrap-reboot.scss
+++ b/vendor/twbs/bootstrap/scss/bootstrap-reboot.scss
@@ -3,6 +3,7 @@
@import "functions";
@import "variables";
+@import "variables-dark";
@import "maps";
@import "mixins";
@import "root";
diff --git a/vendor/twbs/bootstrap/scss/bootstrap-utilities.scss b/vendor/twbs/bootstrap/scss/bootstrap-utilities.scss
index c940676ac..99c4a3595 100644
--- a/vendor/twbs/bootstrap/scss/bootstrap-utilities.scss
+++ b/vendor/twbs/bootstrap/scss/bootstrap-utilities.scss
@@ -4,10 +4,14 @@
// Configuration
@import "functions";
@import "variables";
+@import "variables-dark";
@import "maps";
@import "mixins";
@import "utilities";
+// Layout & components
+@import "root";
+
// Helpers
@import "helpers";
diff --git a/vendor/twbs/bootstrap/scss/bootstrap.scss b/vendor/twbs/bootstrap/scss/bootstrap.scss
index 8f8296def..449d70487 100644
--- a/vendor/twbs/bootstrap/scss/bootstrap.scss
+++ b/vendor/twbs/bootstrap/scss/bootstrap.scss
@@ -6,6 +6,7 @@
// Configuration
@import "functions";
@import "variables";
+@import "variables-dark";
@import "maps";
@import "mixins";
@import "utilities";
diff --git a/vendor/twbs/bootstrap/scss/forms/_floating-labels.scss b/vendor/twbs/bootstrap/scss/forms/_floating-labels.scss
index 6e5c9a75f..aaed53845 100644
--- a/vendor/twbs/bootstrap/scss/forms/_floating-labels.scss
+++ b/vendor/twbs/bootstrap/scss/forms/_floating-labels.scss
@@ -1,6 +1,17 @@
.form-floating {
position: relative;
+ &::before:not(.form-control:disabled) {
+ position: absolute;
+ top: $input-border-width;
+ left: $input-border-width;
+ width: subtract(100%, add($input-height-inner-quarter, $input-height-inner-half));
+ height: $form-floating-label-height;
+ content: "";
+ background-color: $input-bg;
+ @include border-radius($input-border-radius);
+ }
+
> .form-control,
> .form-control-plaintext,
> .form-select {
@@ -72,4 +83,8 @@
border-width: $input-border-width 0; // Required to properly position label text - as explained above
}
}
+
+ > .form-control:disabled ~ label {
+ color: $form-floating-label-disabled-color;
+ }
}
diff --git a/vendor/twbs/bootstrap/scss/forms/_form-check.scss b/vendor/twbs/bootstrap/scss/forms/_form-check.scss
index 42a2a9607..83aacba2e 100644
--- a/vendor/twbs/bootstrap/scss/forms/_form-check.scss
+++ b/vendor/twbs/bootstrap/scss/forms/_form-check.scss
@@ -27,11 +27,14 @@
}
.form-check-input {
+ --#{$prefix}form-check-bg: #{$form-check-input-bg};
+
width: $form-check-input-width;
height: $form-check-input-width;
margin-top: ($line-height-base - $form-check-input-width) * .5; // line-height minus check height
vertical-align: top;
- background-color: $form-check-input-bg;
+ background-color: var(--#{$prefix}form-check-bg);
+ background-image: var(--#{$prefix}form-check-bg-image);
background-repeat: no-repeat;
background-position: center;
background-size: contain;
@@ -65,17 +68,17 @@
&[type="checkbox"] {
@if $enable-gradients {
- background-image: escape-svg($form-check-input-checked-bg-image), var(--#{$prefix}gradient);
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)}, var(--#{$prefix}gradient);
} @else {
- background-image: escape-svg($form-check-input-checked-bg-image);
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-checked-bg-image)};
}
}
&[type="radio"] {
@if $enable-gradients {
- background-image: escape-svg($form-check-radio-checked-bg-image), var(--#{$prefix}gradient);
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)}, var(--#{$prefix}gradient);
} @else {
- background-image: escape-svg($form-check-radio-checked-bg-image);
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-radio-checked-bg-image)};
}
}
}
@@ -85,9 +88,9 @@
border-color: $form-check-input-indeterminate-border-color;
@if $enable-gradients {
- background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--#{$prefix}gradient);
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)}, var(--#{$prefix}gradient);
} @else {
- background-image: escape-svg($form-check-input-indeterminate-bg-image);
+ --#{$prefix}form-check-bg-image: #{escape-svg($form-check-input-indeterminate-bg-image)};
}
}
@@ -121,24 +124,26 @@
padding-left: $form-switch-padding-start;
.form-check-input {
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};
+
width: $form-switch-width;
margin-left: $form-switch-padding-start * -1;
- background-image: escape-svg($form-switch-bg-image);
+ background-image: var(--#{$prefix}form-switch-bg);
background-position: left center;
@include border-radius($form-switch-border-radius);
@include transition($form-switch-transition);
&:focus {
- background-image: escape-svg($form-switch-focus-bg-image);
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-focus-bg-image)};
}
&:checked {
background-position: $form-switch-checked-bg-position;
@if $enable-gradients {
- background-image: escape-svg($form-switch-checked-bg-image), var(--#{$prefix}gradient);
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)}, var(--#{$prefix}gradient);
} @else {
- background-image: escape-svg($form-switch-checked-bg-image);
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};
}
}
}
@@ -173,3 +178,11 @@
}
}
}
+
+@if $enable-dark-mode {
+ @include color-mode(dark) {
+ .form-switch .form-check-input:not(:checked):not(:focus) {
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};
+ }
+ }
+}
diff --git a/vendor/twbs/bootstrap/scss/forms/_form-control.scss b/vendor/twbs/bootstrap/scss/forms/_form-control.scss
index e707c57ea..c81e3b4ea 100644
--- a/vendor/twbs/bootstrap/scss/forms/_form-control.scss
+++ b/vendor/twbs/bootstrap/scss/forms/_form-control.scss
@@ -52,6 +52,13 @@
height: if(unit($input-line-height) == "", $input-line-height * 1em, $input-line-height);
}
+ // Prevent excessive date input height in Webkit
+ // https://github.com/twbs/bootstrap/issues/34433
+ &::-webkit-datetime-edit {
+ display: block;
+ padding: 0;
+ }
+
// Placeholder
&::placeholder {
color: $input-placeholder-color;
diff --git a/vendor/twbs/bootstrap/scss/forms/_form-select.scss b/vendor/twbs/bootstrap/scss/forms/_form-select.scss
index 78c34b8fd..45b0b2686 100644
--- a/vendor/twbs/bootstrap/scss/forms/_form-select.scss
+++ b/vendor/twbs/bootstrap/scss/forms/_form-select.scss
@@ -4,6 +4,8 @@
// https://primer.github.io/.
.form-select {
+ --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)};
+
display: block;
width: 100%;
padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x;
@@ -14,7 +16,7 @@
line-height: $form-select-line-height;
color: $form-select-color;
background-color: $form-select-bg;
- background-image: escape-svg($form-select-indicator);
+ background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none);
background-repeat: no-repeat;
background-position: $form-select-bg-position;
background-size: $form-select-bg-size;
@@ -69,3 +71,11 @@
@include font-size($form-select-font-size-lg);
@include border-radius($form-select-border-radius-lg);
}
+
+@if $enable-dark-mode {
+ @include color-mode(dark) {
+ .form-select {
+ --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)};
+ }
+ }
+}
diff --git a/vendor/twbs/bootstrap/scss/forms/_input-group.scss b/vendor/twbs/bootstrap/scss/forms/_input-group.scss
index 247f74a7a..d6370ed7f 100644
--- a/vendor/twbs/bootstrap/scss/forms/_input-group.scss
+++ b/vendor/twbs/bootstrap/scss/forms/_input-group.scss
@@ -121,7 +121,7 @@
}
> :not(:first-child):not(.dropdown-menu)#{$validation-messages} {
- margin-left: -$input-border-width;
+ margin-left: calc($input-border-width * -1); // stylelint-disable-line function-disallowed-list
@include border-start-radius(0);
}
diff --git a/vendor/twbs/bootstrap/scss/helpers/_colored-links.scss b/vendor/twbs/bootstrap/scss/helpers/_colored-links.scss
index 1cb418280..0e03039bb 100644
--- a/vendor/twbs/bootstrap/scss/helpers/_colored-links.scss
+++ b/vendor/twbs/bootstrap/scss/helpers/_colored-links.scss
@@ -1,11 +1,11 @@
@each $color, $value in $theme-colors {
.link-#{$color} {
- color: $value !important; // stylelint-disable-line declaration-no-important
+ color: $value if($enable-important-utilities, !important, null);
@if $link-shade-percentage != 0 {
&:hover,
&:focus {
- color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) !important; // stylelint-disable-line declaration-no-important
+ color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)) if($enable-important-utilities, !important, null);
}
}
}
diff --git a/vendor/twbs/bootstrap/scss/mixins/_alert.scss b/vendor/twbs/bootstrap/scss/mixins/_alert.scss
index 231f068ec..fb524af1c 100644
--- a/vendor/twbs/bootstrap/scss/mixins/_alert.scss
+++ b/vendor/twbs/bootstrap/scss/mixins/_alert.scss
@@ -1,15 +1,18 @@
+@include deprecate("`alert-variant()`", "v5.3.0", "v6.0.0");
+
// scss-docs-start alert-variant-mixin
@mixin alert-variant($background, $border, $color) {
--#{$prefix}alert-color: #{$color};
--#{$prefix}alert-bg: #{$background};
--#{$prefix}alert-border-color: #{$border};
+ --#{$prefix}alert-link-color: #{shade-color($color, 20%)};
@if $enable-gradients {
background-image: var(--#{$prefix}gradient);
}
.alert-link {
- color: shade-color($color, 20%);
+ color: var(--#{$prefix}alert-link-color);
}
}
// scss-docs-end alert-variant-mixin
diff --git a/vendor/twbs/bootstrap/scss/mixins/_banner.scss b/vendor/twbs/bootstrap/scss/mixins/_banner.scss
index 8dacb037c..64d09a2a9 100644
--- a/vendor/twbs/bootstrap/scss/mixins/_banner.scss
+++ b/vendor/twbs/bootstrap/scss/mixins/_banner.scss
@@ -1,9 +1,7 @@
@mixin bsBanner($file) {
/*!
- * Bootstrap #{$file} v5.2.2 (https://getbootstrap.com/)
+ * Bootstrap #{$file} v5.3.0-alpha1 (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
}
-
diff --git a/vendor/twbs/bootstrap/scss/mixins/_caret.scss b/vendor/twbs/bootstrap/scss/mixins/_caret.scss
index 4b0f0360b..be731165b 100644
--- a/vendor/twbs/bootstrap/scss/mixins/_caret.scss
+++ b/vendor/twbs/bootstrap/scss/mixins/_caret.scss
@@ -1,44 +1,49 @@
// scss-docs-start caret-mixins
-@mixin caret-down {
- border-top: $caret-width solid;
- border-right: $caret-width solid transparent;
+@mixin caret-down($width: $caret-width) {
+ border-top: $width solid;
+ border-right: $width solid transparent;
border-bottom: 0;
- border-left: $caret-width solid transparent;
+ border-left: $width solid transparent;
}
-@mixin caret-up {
+@mixin caret-up($width: $caret-width) {
border-top: 0;
- border-right: $caret-width solid transparent;
- border-bottom: $caret-width solid;
- border-left: $caret-width solid transparent;
+ border-right: $width solid transparent;
+ border-bottom: $width solid;
+ border-left: $width solid transparent;
}
-@mixin caret-end {
- border-top: $caret-width solid transparent;
+@mixin caret-end($width: $caret-width) {
+ border-top: $width solid transparent;
border-right: 0;
- border-bottom: $caret-width solid transparent;
- border-left: $caret-width solid;
+ border-bottom: $width solid transparent;
+ border-left: $width solid;
}
-@mixin caret-start {
- border-top: $caret-width solid transparent;
- border-right: $caret-width solid;
- border-bottom: $caret-width solid transparent;
+@mixin caret-start($width: $caret-width) {
+ border-top: $width solid transparent;
+ border-right: $width solid;
+ border-bottom: $width solid transparent;
}
-@mixin caret($direction: down) {
+@mixin caret(
+ $direction: down,
+ $width: $caret-width,
+ $spacing: $caret-spacing,
+ $vertical-align: $caret-vertical-align
+) {
@if $enable-caret {
&::after {
display: inline-block;
- margin-left: $caret-spacing;
- vertical-align: $caret-vertical-align;
+ margin-left: $spacing;
+ vertical-align: $vertical-align;
content: "";
@if $direction == down {
- @include caret-down();
+ @include caret-down($width);
} @else if $direction == up {
- @include caret-up();
+ @include caret-up($width);
} @else if $direction == end {
- @include caret-end();
+ @include caret-end($width);
}
}
@@ -49,10 +54,10 @@
&::before {
display: inline-block;
- margin-right: $caret-spacing;
- vertical-align: $caret-vertical-align;
+ margin-right: $spacing;
+ vertical-align: $vertical-align;
content: "";
- @include caret-start();
+ @include caret-start($width);
}
}
diff --git a/vendor/twbs/bootstrap/scss/mixins/_color-mode.scss b/vendor/twbs/bootstrap/scss/mixins/_color-mode.scss
new file mode 100644
index 000000000..03338b025
--- /dev/null
+++ b/vendor/twbs/bootstrap/scss/mixins/_color-mode.scss
@@ -0,0 +1,21 @@
+// scss-docs-start color-mode-mixin
+@mixin color-mode($mode: light, $root: false) {
+ @if $color-mode-type == "media-query" {
+ @if $root == true {
+ @media (prefers-color-scheme: $mode) {
+ :root {
+ @content;
+ }
+ }
+ } @else {
+ @media (prefers-color-scheme: $mode) {
+ @content;
+ }
+ }
+ } @else {
+ [data-bs-theme="#{$mode}"] {
+ @content;
+ }
+ }
+}
+// scss-docs-end color-mode-mixin
diff --git a/vendor/twbs/bootstrap/scss/mixins/_forms.scss b/vendor/twbs/bootstrap/scss/mixins/_forms.scss
index 2a853a789..d47b1e41d 100644
--- a/vendor/twbs/bootstrap/scss/mixins/_forms.scss
+++ b/vendor/twbs/bootstrap/scss/mixins/_forms.scss
@@ -21,7 +21,8 @@
$icon,
$tooltip-color: color-contrast($color),
$tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),
- $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity)
+ $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity),
+ $border-color: $color
) {
.#{$state}-feedback {
display: none;
@@ -56,7 +57,7 @@
.form-control {
@include form-validation-state-selector($state) {
- border-color: $color;
+ border-color: $border-color;
@if $enable-validation-icons {
padding-right: $input-height-inner;
@@ -67,7 +68,7 @@
}
&:focus {
- border-color: $color;
+ border-color: $border-color;
box-shadow: $focus-box-shadow;
}
}
@@ -85,20 +86,20 @@
.form-select {
@include form-validation-state-selector($state) {
- border-color: $color;
+ border-color: $border-color;
@if $enable-validation-icons {
&:not([multiple]):not([size]),
&:not([multiple])[size="1"] {
+ --#{$prefix}form-select-bg-icon: #{escape-svg($icon)};
padding-right: $form-select-feedback-icon-padding-end;
- background-image: escape-svg($form-select-indicator), escape-svg($icon);
background-position: $form-select-bg-position, $form-select-feedback-icon-position;
background-size: $form-select-bg-size, $form-select-feedback-icon-size;
}
}
&:focus {
- border-color: $color;
+ border-color: $border-color;
box-shadow: $focus-box-shadow;
}
}
@@ -114,7 +115,7 @@
.form-check-input {
@include form-validation-state-selector($state) {
- border-color: $color;
+ border-color: $border-color;
&:checked {
background-color: $color;
diff --git a/vendor/twbs/bootstrap/scss/mixins/_list-group.scss b/vendor/twbs/bootstrap/scss/mixins/_list-group.scss
index e55415f2b..5a61f3c24 100644
--- a/vendor/twbs/bootstrap/scss/mixins/_list-group.scss
+++ b/vendor/twbs/bootstrap/scss/mixins/_list-group.scss
@@ -1,3 +1,6 @@
+@include deprecate("`list-group-item-variant()`", "v5.3.0", "v6.0.0");
+
+
// List Groups
// scss-docs-start list-group-mixin
diff --git a/vendor/twbs/bootstrap/site/.eslintrc.json b/vendor/twbs/bootstrap/site/.eslintrc.json
index 1158ba36a..0a16f82f9 100644
--- a/vendor/twbs/bootstrap/site/.eslintrc.json
+++ b/vendor/twbs/bootstrap/site/.eslintrc.json
@@ -1,15 +1,28 @@
{
+ "extends": "../.eslintrc.json",
"env": {
"browser": true,
"node": false
},
+ "parserOptions": {
+ "sourceType": "script"
+ },
"plugins": [
"markdown"
],
+ "rules": {
+ "no-new": "off",
+ "strict": "error",
+ "unicorn/no-array-for-each": "off",
+ "unicorn/numeric-separators-style": "off",
+ "unicorn/prefer-node-protocol": "off"
+ },
"overrides": [
{
// 2. Enable the Markdown processor for all .md files.
- "files": ["./**/*.md"],
+ "files": [
+ "./**/*.md"
+ ],
"processor": "markdown/markdown"
},
{
@@ -28,27 +41,15 @@
},
"rules": {
"no-array-for-each": "off",
+ "no-labels": "off",
+ "no-redeclare": "off",
"no-undef": "off",
- "no-unused-vars": "off",
- "unicorn/no-array-for-each": "off",
- "unicorn/numeric-separators-style": "off",
"no-unused-expressions": "off",
"no-unused-labels": "off",
- "no-labels": "off",
- "no-redeclare": "off"
+ "no-unused-vars": "off",
+ "unicorn/no-array-for-each": "off",
+ "unicorn/numeric-separators-style": "off"
}
}
- ],
- "parserOptions": {
- "sourceType": "script"
- },
- "extends": "../.eslintrc.json",
- "rules": {
- "no-new": "off",
- "prefer-template": "error",
- "strict": "error",
- "unicorn/no-array-for-each": "off",
- "unicorn/numeric-separators-style": "off",
- "unicorn/prefer-node-protocol": "off"
- }
+ ]
}
diff --git a/vendor/twbs/bootstrap/site/assets/js/code-examples.js b/vendor/twbs/bootstrap/site/assets/js/code-examples.js
index 25486c2fe..edb13598f 100644
--- a/vendor/twbs/bootstrap/site/assets/js/code-examples.js
+++ b/vendor/twbs/bootstrap/site/assets/js/code-examples.js
@@ -56,7 +56,7 @@
})
clipboard.on('success', event => {
- const iconFirstChild = event.trigger.querySelector('.bi').firstChild
+ const iconFirstChild = event.trigger.querySelector('.bi').firstElementChild
const tooltipBtn = bootstrap.Tooltip.getInstance(event.trigger)
const namespace = 'http://www.w3.org/1999/xlink'
const originalXhref = iconFirstChild.getAttributeNS(namespace, 'href')
diff --git a/vendor/twbs/bootstrap/site/assets/js/snippets.js b/vendor/twbs/bootstrap/site/assets/js/snippets.js
index 53f8a786e..43b8a095c 100644
--- a/vendor/twbs/bootstrap/site/assets/js/snippets.js
+++ b/vendor/twbs/bootstrap/site/assets/js/snippets.js
@@ -96,6 +96,15 @@
})
}
+ // --------
+ // Carousels
+ // --------
+ // Instantiate all non-autoplaying carousels in a docs or StackBlitz page
+ document.querySelectorAll('.carousel:not([data-bs-ride="carousel"])')
+ .forEach(carousel => {
+ bootstrap.Carousel.getOrCreateInstance(carousel)
+ })
+
// -------------------------------
// Checks & Radios
// -------------------------------
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_ads.scss b/vendor/twbs/bootstrap/site/assets/scss/_ads.scss
index b9369eb19..cc5634096 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_ads.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_ads.scss
@@ -14,10 +14,10 @@
@include font-size(.8125rem);
line-height: 1.4;
text-align: left;
- background-color: $gray-100;
+ background-color: var(--bs-tertiary-bg);
a {
- color: $gray-800;
+ color: var(--bs-body-color);
text-decoration: none;
}
@@ -34,5 +34,5 @@
.carbon-poweredby {
display: block;
margin-top: .75rem;
- color: $gray-700 !important;
+ color: var(--bs-body-color) !important;
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_brand.scss b/vendor/twbs/bootstrap/site/assets/scss/_brand.scss
index 9637cfb18..03fe2fe1f 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_brand.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_brand.scss
@@ -15,13 +15,13 @@
// Individual items
.bd-brand-item {
+ .bd-brand-item {
- border-top: 1px solid $white;
+ border-top: 1px solid var(--bs-border-color);
}
@include media-breakpoint-up(md) {
+ .bd-brand-item {
border-top: 0;
- border-left: 1px solid $white;
+ border-left: 1px solid var(--bs-border-color);
}
}
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_buttons.scss b/vendor/twbs/bootstrap/site/assets/scss/_buttons.scss
index 13bd6e48a..300bdca9c 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_buttons.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_buttons.scss
@@ -33,13 +33,15 @@
}
.btn-bd-light {
+ --btn-custom-color: #{mix($bd-violet, $white, 75%)};
+
--bs-btn-color: var(--bs-gray-600);
- --bs-btn-border-color: var(--bs-gray-400);
- --bs-btn-hover-color: var(--bd-violet);
- --bs-btn-hover-border-color: var(--bd-violet);
- --bs-btn-active-color: var(--bd-violet);
+ --bs-btn-border-color: var(--bs-border-color);
+ --bs-btn-hover-color: var(--btn-custom-color);
+ --bs-btn-hover-border-color: var(--btn-custom-color);
+ --bs-btn-active-color: var(--btn-custom-color);
--bs-btn-active-bg: var(--bs-white);
- --bs-btn-active-border-color: var(--bd-violet);
- --bs-btn-focus-border-color: var(--bd-violet);
+ --bs-btn-active-border-color: var(--btn-custom-color);
+ --bs-btn-focus-border-color: var(--btn-custom-color);
--bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_callouts.scss b/vendor/twbs/bootstrap/site/assets/scss/_callouts.scss
index 4513a7d1d..016a2ed24 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_callouts.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_callouts.scss
@@ -6,6 +6,7 @@
padding: 1.25rem;
margin-top: 1.25rem;
margin-bottom: 1.25rem;
+ color: var(--bd-callout-color, inherit);
background-color: var(--bd-callout-bg, var(--bs-gray-100));
border-left: .25rem solid var(--bd-callout-border, var(--bs-gray-300));
@@ -29,7 +30,8 @@
// Variations
@each $variant in $bd-callout-variants {
.bd-callout-#{$variant} {
- --bd-callout-bg: rgba(var(--bs-#{$variant}-rgb), .075);
- --bd-callout-border: rgba(var(--bs-#{$variant}-rgb), .5);
+ --bd-callout-color: var(--bs-#{$variant}-text);
+ --bd-callout-bg: var(--bs-#{$variant}-bg-subtle);
+ --bd-callout-border: var(--bs-#{$variant}-border-subtle);
}
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_clipboard-js.scss b/vendor/twbs/bootstrap/site/assets/scss/_clipboard-js.scss
index 3a876a5e6..1e0003bcb 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_clipboard-js.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_clipboard-js.scss
@@ -22,13 +22,13 @@
display: block;
padding: .5em;
line-height: 1;
- color: $gray-900;
- background-color: $gray-100;
+ color: var(--bs-body-color);
+ background-color: var(--bs-tertiary-bg);
border: 0;
@include border-radius(.25rem);
&:hover {
- color: $primary;
+ color: var(--bs-link-color);
}
&:focus {
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_component-examples.scss b/vendor/twbs/bootstrap/site/assets/scss/_component-examples.scss
index f4865daf8..11800a638 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_component-examples.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_component-examples.scss
@@ -3,7 +3,7 @@
//
.bd-example-snippet {
- border: solid $border-color;
+ border: solid var(--bs-border-color);
border-width: 1px 0;
@include media-breakpoint-up(md) {
@@ -17,7 +17,7 @@
position: relative;
padding: var(--bd-example-padding);
margin: 0 ($bd-gutter-x * -.5);
- border: solid $border-color;
+ border: solid var(--bs-border-color);
border-width: 1px 0;
@include clearfix();
@@ -32,7 +32,7 @@
+ .bd-code-snippet {
@include border-top-radius(0);
- border: solid $border-color;
+ border: solid var(--bs-border-color);
border-width: 0 1px 1px;
}
@@ -58,7 +58,8 @@
display: block;
}
- > :last-child {
+ > :last-child,
+ > nav:last-child .breadcrumb {
margin-bottom: 0;
}
@@ -115,11 +116,12 @@
//
.bd-example-row [class^="col"],
-.bd-example-cssgrid .grid > * {
+.bd-example-cols [class^="col"] > *,
+.bd-example-cssgrid [class*="grid"] > * {
padding-top: .75rem;
padding-bottom: .75rem;
- background-color: rgba(var(--bd-violet-rgb), .1);
- border: 1px solid rgba(var(--bd-violet-rgb), .25);
+ background-color: rgba(var(--bd-violet-rgb), .15);
+ border: 1px solid rgba(var(--bd-violet-rgb), .3);
}
.bd-example-row .row + .row,
@@ -129,12 +131,12 @@
.bd-example-row-flex-cols .row {
min-height: 10rem;
- background-color: rgba(255, 0, 0, .1);
+ background-color: rgba(var(--bd-violet-rgb), .15);
}
.bd-example-flex div {
- background-color: rgba($bd-purple, .15);
- border: 1px solid rgba($bd-purple, .15);
+ background-color: rgba(var(--bd-violet-rgb), .15);
+ border: 1px solid rgba(var(--bd-violet-rgb), .3);
}
// Grid mixins
@@ -176,9 +178,9 @@
.ratio {
display: inline-block;
width: 10rem;
- color: $gray-600;
- background-color: $gray-100;
- border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color);
+ color: var(--bs-secondary-color);
+ background-color: var(--bs-tertiary-bg);
+ border: var(--bs-border-width) solid var(--bs-border-color);
> div {
display: flex;
@@ -208,8 +210,14 @@
}
// Tooltips
-.tooltip-demo a {
- white-space: nowrap;
+.tooltip-demo {
+ a {
+ white-space: nowrap;
+ }
+
+ .btn {
+ margin: .25rem .125rem;
+ }
}
// scss-docs-start custom-tooltip
@@ -253,7 +261,7 @@
width: 5rem;
height: 5rem;
margin: .25rem;
- background-color: #f5f5f5;
+ background-color: var(--bs-tertiary-bg);
}
}
@@ -269,13 +277,13 @@
.position-relative {
height: 200px;
- background-color: #f5f5f5;
+ background-color: var(--bs-tertiary-bg);
}
.position-absolute {
width: 2rem;
height: 2rem;
- background-color: $dark;
+ background-color: var(--bs-body-color);
@include border-radius();
}
}
@@ -302,6 +310,32 @@
min-height: 240px;
}
+.bd-example-zindex-levels {
+ min-height: 15rem;
+
+ > div {
+ background-color: tint-color($bd-violet, 75%);
+ border: 1px solid tint-color($bd-violet, 50%);
+ }
+
+ > :nth-child(2) {
+ top: 3rem;
+ left: 3rem;
+ }
+ > :nth-child(3) {
+ top: 4.5rem;
+ left: 4.5rem;
+ }
+ > :nth-child(4) {
+ top: 6rem;
+ left: 6rem;
+ }
+ > :nth-child(5) {
+ top: 7.5rem;
+ left: 7.5rem;
+ }
+}
+
//
// Code snippets
//
@@ -310,7 +344,7 @@
position: relative;
padding: .75rem ($bd-gutter-x * .5);
margin-bottom: 1rem;
- background-color: var(--bs-gray-100);
+ background-color: var(--bs-tertiary-bg);
@include media-breakpoint-up(md) {
padding: .75rem 1.25rem;
@@ -329,7 +363,7 @@
pre code {
@include font-size(inherit);
- color: $gray-900; // Effectively the base text color
+ color: var(--bs-body-color); // Effectively the base text color
word-wrap: normal;
}
}
@@ -354,6 +388,12 @@
}
.highlight-toolbar {
- border: solid $border-color;
+ background-color: var(--bs-tertiary-bg);
+ border: solid var(--bs-border-color);
border-width: 1px 0;
+
+ .btn-clipboard {
+ margin-top: 0;
+ margin-right: 0;
+ }
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_content.scss b/vendor/twbs/bootstrap/site/assets/scss/_content.scss
index cd594335a..14d27b2fd 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_content.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_content.scss
@@ -32,6 +32,9 @@
// Override Bootstrap defaults
> .table,
> .table-responsive .table {
+ --bs-table-border-color: var(--bs-border-color);
+
+ max-width: 100%;
margin-bottom: 1.5rem;
@include font-size(.875rem);
@@ -60,6 +63,14 @@
}
}
+ th {
+ color: var(--bs-emphasis-color);
+ }
+
+ strong {
+ color: var(--bs-emphasis-color);
+ }
+
// Prevent breaking of code
// stylelint-disable-next-line selector-max-compound-selectors
th,
@@ -80,6 +91,16 @@
min-width: 280px;
}
+.table-swatches {
+ th {
+ color: var(--bs-emphasis-color);
+ }
+
+ td code {
+ white-space: nowrap;
+ }
+}
+
.bd-title {
@include font-size(3rem);
}
@@ -89,13 +110,10 @@
font-weight: 300;
}
-.bd-bg-violet {
- background-color: $bd-violet;
-}
-
.bi {
width: 1em;
height: 1em;
+ vertical-align: -.125em;
fill: currentcolor;
}
@@ -121,6 +139,43 @@
.border-lg-start {
@include media-breakpoint-up(lg) {
- border-left: $border-width solid $border-color;
+ border-left: var(--bs-border-width) solid var(--bs-border-color);
+ }
+}
+
+// stylelint-disable selector-no-qualifying-type
+.bd-summary-link {
+ color: var(--bs-link-color);
+
+ &:hover,
+ details[open] > & {
+ color: var(--bs-link-hover-color);
+ }
+}
+// stylelint-enable selector-no-qualifying-type
+
+// scss-docs-start custom-color-mode
+[data-bs-theme="blue"] {
+ --bs-body-color: var(--bs-white);
+ --bs-body-color-rgb: #{to-rgb($white)};
+ --bs-body-bg: var(--bs-blue);
+ --bs-body-bg-rgb: #{to-rgb($blue)};
+ --bs-tertiary-bg: #{$blue-600};
+
+ .dropdown-menu {
+ --bs-dropdown-bg: #{mix($blue-500, $blue-600)};
+ --bs-dropdown-link-active-bg: #{$blue-700};
+ }
+
+ .btn-secondary {
+ --bs-btn-bg: #{mix($gray-600, $blue-400, .5)};
+ --bs-btn-border-color: #{rgba($white, .25)};
+ --bs-btn-hover-bg: #{darken(mix($gray-600, $blue-400, .5), 5%)};
+ --bs-btn-hover-border-color: #{rgba($white, .25)};
+ --bs-btn-active-bg: #{darken(mix($gray-600, $blue-400, .5), 10%)};
+ --bs-btn-active-border-color: #{rgba($white, .5)};
+ --bs-btn-focus-border-color: #{rgba($white, .5)};
+ --bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(255, 255, 255, .2);
}
}
+// scss-docs-end custom-color-mode
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_footer.scss b/vendor/twbs/bootstrap/site/assets/scss/_footer.scss
index 87cee6d2b..42e1ca051 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_footer.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_footer.scss
@@ -4,12 +4,12 @@
.bd-footer {
a {
- color: $gray-700;
+ color: var(--bs-body-color);
text-decoration: none;
&:hover,
&:focus {
- color: $link-color;
+ color: var(--bs-link-hover-color);
text-decoration: underline;
}
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_masthead.scss b/vendor/twbs/bootstrap/site/assets/scss/_masthead.scss
index 81d4d998c..52b282fcf 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_masthead.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_masthead.scss
@@ -11,13 +11,12 @@
h1 {
@include font-size(4rem);
- line-height: 1;
}
.lead {
@include font-size(1rem);
font-weight: 400;
- color: $gray-700;
+ color: var(--bs-secondary-color);
}
.bd-code-snippet {
@@ -46,8 +45,7 @@
}
#carbonads { // stylelint-disable-line selector-max-id
- margin-right: auto;
- margin-left: auto;
+ margin-inline: auto;
}
@include media-breakpoint-up(md) {
@@ -86,7 +84,7 @@
mix-blend-mode: darken;
svg {
- filter: drop-shadow(0 1px 1px #fff);
+ filter: drop-shadow(0 1px 1px var(--bs-body-bg));
}
}
@@ -94,3 +92,21 @@
background-color: var(--bd-accent);
box-shadow: inset 0 -1px 1px rgba(var(--bs-body-color-rgb), .15), 0 .25rem 1.5rem rgba(var(--bs-body-bg-rgb), .75);
}
+
+.animate-img {
+ > img {
+ transition: .2s ease-in-out transform; // stylelint-disable-line property-disallowed-list
+ }
+
+ &:hover > img {
+ transform: scale(1.1);
+ }
+}
+
+@if $enable-dark-mode {
+ [data-bs-theme="dark"] {
+ .masthead-followup-icon {
+ mix-blend-mode: lighten;
+ }
+ }
+}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_navbar.scss b/vendor/twbs/bootstrap/site/assets/scss/_navbar.scss
index 0cff3e2a8..9f1f4e71a 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_navbar.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_navbar.scss
@@ -1,8 +1,16 @@
.bd-navbar {
padding: .75rem 0;
background-color: transparent;
- background-image: linear-gradient(to bottom, rgba(var(--bd-violet-rgb), 1), rgba(var(--bd-violet-rgb), .95));
- box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15), inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: 0 .5rem 1rem rgba($black, .15), inset 0 -1px 0 rgba($white, .15);
+
+ &::after {
+ position: absolute;
+ inset: 0;
+ z-index: -1;
+ display: block;
+ content: "";
+ background-image: linear-gradient(to bottom, rgba(var(--bd-violet-rgb), 1), rgba(var(--bd-violet-rgb), .95));
+ }
.bd-navbar-toggle {
@include media-breakpoint-down(lg) {
@@ -30,6 +38,7 @@
}
.navbar-brand {
+ color: $white;
transition: .2s ease-in-out transform; // stylelint-disable-line property-disallowed-list
&:hover {
@@ -60,7 +69,7 @@
}
.offcanvas-lg {
- background-color: var(--bd-violet);
+ background-color: var(--bd-violet-bg);
border-left: 0;
@include media-breakpoint-down(lg) {
@@ -75,17 +84,42 @@
}
.dropdown-menu {
- --#{$prefix}dropdown-min-width: 12rem;
- --#{$prefix}dropdown-link-hover-bg: rgba(var(--bd-violet-rgb), .1);
- @include rfs(.875rem, --#{$prefix}dropdown-font-size);
+ --bs-dropdown-min-width: 12rem;
+ --bs-dropdown-padding-x: .25rem;
+ --bs-dropdown-padding-y: .25rem;
+ --bs-dropdown-link-hover-bg: rgba(var(--bd-violet-rgb), .1);
+ --bs-dropdown-link-active-bg: rgba(var(--bd-violet-rgb), 1);
+ @include rfs(.875rem, --bs-dropdown-font-size);
+ @include font-size(.875rem);
+ @include border-radius(.5rem);
box-shadow: $dropdown-box-shadow;
+
+ li + li {
+ margin-top: .125rem;
+ }
+
+ .dropdown-item {
+ @include border-radius(.25rem);
+
+ &:active {
+ .bi {
+ color: inherit !important; // stylelint-disable-line declaration-no-important
+ }
+ }
+ }
+
+ .active {
+ font-weight: 600;
+
+ .bi {
+ display: block !important; // stylelint-disable-line declaration-no-important
+ }
+ }
}
+}
- .dropdown-item.current {
- font-weight: 600;
- background-image: escape-svg($dropdown-active-icon);
- background-repeat: no-repeat;
- background-position: right $dropdown-item-padding-x top .6rem;
- background-size: .75rem .75rem;
+@include color-mode(dark) {
+ .bd-navbar {
+ box-shadow: 0 .5rem 1rem rgba($black, .15), inset 0 -1px 0 rgba($white, .15);
}
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_sidebar.scss b/vendor/twbs/bootstrap/site/assets/scss/_sidebar.scss
index ed76b3ca8..6f1ef292f 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_sidebar.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_sidebar.scss
@@ -11,6 +11,17 @@
margin-left: -.25rem;
overflow-y: auto;
}
+
+ @include media-breakpoint-down(lg) {
+ .offcanvas-lg {
+ border-right-color: var(--bs-border-color);
+ box-shadow: $box-shadow-lg;
+ }
+ }
+}
+
+.bd-links-heading {
+ color: var(--bs-emphasis-color);
}
.bd-links-nav {
@@ -35,16 +46,16 @@
.bd-links-link {
padding: .1875rem .5rem;
margin-top: .125rem;
- margin-left: 1rem;
- color: rgba($black, .65);
+ margin-left: 1.125rem;
+ color: var(--bs-body-color);
text-decoration: if($link-decoration == none, null, none);
&:hover,
&:focus,
&.active {
- color: rgba($black, .85);
+ color: var(--bs-emphasis-color);
text-decoration: if($link-hover-decoration == underline, none, null);
- background-color: rgba(var(--bd-violet-rgb), .1);
+ background-color: var(--bd-sidebar-link-bg);
}
&.active {
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_syntax.scss b/vendor/twbs/bootstrap/site/assets/scss/_syntax.scss
index 106032c07..092307e05 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_syntax.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_syntax.scss
@@ -1,4 +1,5 @@
-:root {
+:root,
+[data-bs-theme="light"] {
--base00: #fff;
--base01: #f5f5f5;
--base02: #c8c8fa;
@@ -17,6 +18,25 @@
--base0F: #333;
}
+@include color-mode(dark, true) {
+ --base00: #282c34;
+ --base01: #353b45;
+ --base02: #3e4451;
+ --base03: #868e96;
+ --base04: #565c64;
+ --base05: #abb2bf;
+ --base06: #b6bdca;
+ --base07: #d19a66;
+ --base08: #e06c75;
+ --base09: #d19a66;
+ --base0A: #e5c07b;
+ --base0B: #98c379;
+ --base0C: #56b6c2;
+ --base0D: #61afef;
+ --base0E: #c678dd;
+ --base0F: #be5046;
+}
+
.hl { background-color: var(--base02); }
.c { color: var(--base03); }
.err { color: var(--base08); }
@@ -101,14 +121,14 @@
.language-bash,
.language-sh {
.line::before {
- color: #777;
+ color: var(--base03);
content: "$ ";
user-select: none;
}
}
.language-powershell::before {
- color: #009;
+ color: var(--base0C);
content: "PM> ";
user-select: none;
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_toc.scss b/vendor/twbs/bootstrap/site/assets/scss/_toc.scss
index 512a11b42..ffa6a0c44 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_toc.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_toc.scss
@@ -52,15 +52,16 @@
}
@include media-breakpoint-down(md) {
- border: 1px solid $border-color;
- @include border-radius(.4rem);
+ color: var(--bs-body-color);
+ border: 1px solid var(--bs-border-color);
+ @include border-radius(var(--bs-border-radius));
&:hover,
&:focus,
&:active,
&[aria-expanded="true"] {
color: var(--bd-violet);
- background-color: $white;
+ background-color: var(--bs-body-bg);
border-color: var(--bd-violet);
}
@@ -75,9 +76,9 @@
@include media-breakpoint-down(md) {
nav {
padding: 1.25rem;
- background-color: var(--bs-gray-100);
- border: 1px solid $border-color;
- @include border-radius(.25rem);
+ background-color: var(--bs-tertiary-bg);
+ border: 1px solid var(--bs-border-color);
+ @include border-radius(var(--bs-border-radius));
}
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/_variables.scss b/vendor/twbs/bootstrap/site/assets/scss/_variables.scss
index b460392d0..b3730ebef 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/_variables.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/_variables.scss
@@ -5,12 +5,12 @@ $bd-purple: #4c0bce;
$bd-violet: lighten(saturate($bd-purple, 5%), 15%); // stylelint-disable-line function-disallowed-list
$bd-purple-light: lighten(saturate($bd-purple, 5%), 45%); // stylelint-disable-line function-disallowed-list
$bd-accent: #ffe484;
-$dropdown-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>");
$bd-gutter-x: 3rem;
$bd-callout-variants: info, warning, danger !default;
-:root {
+:root,
+[data-bs-theme="light"] {
--bd-purple: #{$bd-purple};
--bd-violet: #{$bd-violet};
--bd-accent: #{$bd-accent};
@@ -20,4 +20,13 @@ $bd-callout-variants: info, warning, danger !default;
--bd-teal-rgb: #{to-rgb($teal-500)};
--docsearch-primary-color: var(--bd-violet);
--docsearch-logo-color: var(--bd-violet);
+
+ --bd-violet-bg: var(--bd-violet);
+ --bd-sidebar-link-bg: rgba(var(--bd-violet-rgb), .1);
+}
+
+@include color-mode(dark, true) {
+ --bd-violet: #{mix($bd-violet, $white, 75%)};
+ --bd-violet-bg: #{$bd-violet};
+ --bd-sidebar-link-bg: rgba(#{to-rgb(mix($bd-violet, $black, 75%))}, .5);
}
diff --git a/vendor/twbs/bootstrap/site/assets/scss/docs.scss b/vendor/twbs/bootstrap/site/assets/scss/docs.scss
index 521493461..509cc33fd 100644
--- a/vendor/twbs/bootstrap/site/assets/scss/docs.scss
+++ b/vendor/twbs/bootstrap/site/assets/scss/docs.scss
@@ -1,7 +1,6 @@
/*!
* Bootstrap Docs (https://getbootstrap.com/)
* Copyright 2011-2022 The Bootstrap Authors
- * Copyright 2011-2022 Twitter, Inc.
* Licensed under the Creative Commons Attribution 3.0 Unported License.
* For details, see https://creativecommons.org/licenses/by/3.0/.
*/
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/_index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/_index.html
deleted file mode 100644
index fe65dc364..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/_index.html
+++ /dev/null
@@ -1,5 +0,0 @@
----
-layout: redirect
-sitemap_exclude: true
-redirect: "/docs/5.2/getting-started/introduction/"
----
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/about/brand.md b/vendor/twbs/bootstrap/site/content/docs/5.2/about/brand.md
deleted file mode 100644
index 80c613526..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/about/brand.md
+++ /dev/null
@@ -1,47 +0,0 @@
----
-layout: docs
-title: Brand guidelines
-description: Documentation and examples for Bootstrap's logo and brand usage guidelines.
-group: about
-toc: true
----
-
-Have a need for Bootstrap's brand resources? Great! We have only a few guidelines we follow, and in turn ask you to follow as well.
-
-## Logo
-
-When referencing Bootstrap, use our logo mark. Do not modify our logos in any way. Do not use Bootstrap's branding for your own open or closed source projects. **Do not use the Twitter name or logo** in association with Bootstrap.
-
-<div class="bd-brand-item px-2 py-5 mb-3 bg-light rounded-lg">
- <img class="d-block img-fluid mx-auto" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="Bootstrap" width="256" height="204">
-</div>
-
-Our logo mark is also available in black and white. All rules for our primary logo apply to these as well.
-
-<div class="bd-brand-logos d-sm-flex text-center bg-light rounded-lg overflow-hidden w-100 mb-3">
- <div class="bd-brand-item w-100 px-2 py-5">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-black.svg" alt="Bootstrap" width="128" height="102" loading="lazy">
- </div>
- <div class="bd-brand-item w-100 px-2 py-5 inverse">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" alt="Bootstrap" width="128" height="102" loading="lazy">
- </div>
-</div>
-
-## Name
-
-Bootstrap should always be referred to as just **Bootstrap**. No Twitter before it and no capital _s_.
-
-<div class="bd-brand-logos d-sm-flex text-center bg-light rounded-lg overflow-hidden w-100 mb-3">
- <div class="bd-brand-item w-100 p-3">
- <div class="h3">Bootstrap</div>
- <strong class="text-success">Correct</strong>
- </div>
- <div class="bd-brand-item w-100 p-3">
- <div class="h3 text-muted">BootStrap</div>
- <strong class="text-danger">Incorrect</strong>
- </div>
- <div class="bd-brand-item w-100 p-3">
- <div class="h3 text-muted">Twitter Bootstrap</div>
- <strong class="text-danger">Incorrect</strong>
- </div>
-</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/about/license.md b/vendor/twbs/bootstrap/site/content/docs/5.2/about/license.md
deleted file mode 100644
index 07e60e00a..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/about/license.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: docs
-title: License FAQs
-description: Commonly asked questions about Bootstrap's open source license.
-group: about
----
-
-Bootstrap is released under the MIT license and is copyright {{< year >}} Twitter. Boiled down to smaller chunks, it can be described with the following conditions.
-
-## It requires you to:
-
-- Keep the license and copyright notice included in Bootstrap's CSS and JavaScript files when you use them in your works
-
-## It permits you to:
-
-- Freely download and use Bootstrap, in whole or in part, for personal, private, company internal, or commercial purposes
-- Use Bootstrap in packages or distributions that you create
-- Modify the source code
-- Grant a sublicense to modify and distribute Bootstrap to third parties not included in the license
-
-## It forbids you to:
-
-- Hold the authors and license owners liable for damages as Bootstrap is provided without warranty
-- Hold the creators or copyright holders of Bootstrap liable
-- Redistribute any piece of Bootstrap without proper attribution
-- Use any marks owned by Twitter in any way that might state or imply that Twitter endorses your distribution
-- Use any marks owned by Twitter in any way that might state or imply that you created the Twitter software in question
-
-## It does not require you to:
-
-- Include the source of Bootstrap itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it
-- Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is encouraged)
-
-The full Bootstrap license is located [in the project repository]({{< param repo >}}/blob/v{{< param current_version >}}/LICENSE) for more information.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/about/overview.md b/vendor/twbs/bootstrap/site/content/docs/5.2/about/overview.md
deleted file mode 100644
index 1f39b85aa..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/about/overview.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-layout: docs
-title: About
-description: Learn more about the team maintaining Bootstrap, how and why the project started, and how to get involved.
-group: about
-aliases:
- - "/about/"
- - "/docs/5.2/about/"
----
-
-## Team
-
-Bootstrap is maintained by a [small team of developers](https://github.com/orgs/twbs/people) on GitHub. We're actively looking to grow this team and would love to hear from you if you're excited about CSS at scale, writing and maintaining vanilla JavaScript plugins, and improving build tooling processes for frontend code.
-
-## History
-
-Originally created by a designer and a developer at Twitter, Bootstrap has become one of the most popular front-end frameworks and open source projects in the world.
-
-Bootstrap was created at Twitter in mid-2010 by [@mdo](https://twitter.com/mdo) and [@fat](https://twitter.com/fat). Prior to being an open-sourced framework, Bootstrap was known as _Twitter Blueprint_. A few months into development, Twitter held its [first Hack Week](https://blog.twitter.com/engineering/en_us/a/2010/hack-week.html) and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today.
-
-Originally [released](https://blog.twitter.com/developer/en_us/a/2011/bootstrap-twitter.html) on <time datetime="2011-08-19 11:25">Friday, August 19, 2011</time>, we've since had over [twenty releases]({{< param repo >}}/releases), including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.
-
-With Bootstrap 4, we once again rewrote the project to account for two key architectural changes: a migration to Sass and the move to CSS's flexbox. Our intention is to help in a small way to move the web development community forward by pushing for newer CSS properties, fewer dependencies, and new technologies across more modern browsers.
-
-Our latest release, Bootstrap 5, focuses on improving v4's codebase with as few major breaking changes as possible. We improved existing features and components, removed support for older browsers, dropped jQuery for regular JavaScript, and embraced more future-friendly technologies like CSS custom properties as part of our tooling.
-
-## Get involved
-
-Get involved with Bootstrap development by [opening an issue]({{< param repo >}}/issues/new/choose) or submitting a pull request. Read our [contributing guidelines]({{< param repo >}}/blob/v{{< param current_version >}}/.github/CONTRIBUTING.md) for information on how we develop.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/accordion.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/accordion.md
deleted file mode 100644
index 2e247239c..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/accordion.md
+++ /dev/null
@@ -1,165 +0,0 @@
----
-layout: docs
-title: Accordion
-description: Build vertically collapsing accordions in combination with our Collapse JavaScript plugin.
-group: components
-aliases:
- - "/components/"
- - "/docs/5.2/components/"
-toc: true
----
-
-## How it works
-
-The accordion uses [collapse]({{< docsref "/components/collapse" >}}) internally to make it collapsible. To render an accordion that's expanded, add the `.open` class on the `.accordion`.
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-## Example
-
-Click the accordions below to expand/collapse the accordion content.
-
-{{< example >}}
-<div class="accordion" id="accordionExample">
- <div class="accordion-item">
- <h2 class="accordion-header" id="headingOne">
- <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
- Accordion Item #1
- </button>
- </h2>
- <div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
- <div class="accordion-body">
- <strong>This is the first item's accordion body.</strong> It is shown by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
- </div>
- </div>
- </div>
- <div class="accordion-item">
- <h2 class="accordion-header" id="headingTwo">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
- Accordion Item #2
- </button>
- </h2>
- <div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#accordionExample">
- <div class="accordion-body">
- <strong>This is the second item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
- </div>
- </div>
- </div>
- <div class="accordion-item">
- <h2 class="accordion-header" id="headingThree">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
- Accordion Item #3
- </button>
- </h2>
- <div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
- <div class="accordion-body">
- <strong>This is the third item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Flush
-
-Add `.accordion-flush` to remove the default `background-color`, some borders, and some rounded corners to render accordions edge-to-edge with their parent container.
-
-{{< example class="bg-light" >}}
-<div class="accordion accordion-flush" id="accordionFlushExample">
- <div class="accordion-item">
- <h2 class="accordion-header" id="flush-headingOne">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseOne" aria-expanded="false" aria-controls="flush-collapseOne">
- Accordion Item #1
- </button>
- </h2>
- <div id="flush-collapseOne" class="accordion-collapse collapse" aria-labelledby="flush-headingOne" data-bs-parent="#accordionFlushExample">
- <div class="accordion-body">Placeholder content for this accordion, which is intended to demonstrate the <code>.accordion-flush</code> class. This is the first item's accordion body.</div>
- </div>
- </div>
- <div class="accordion-item">
- <h2 class="accordion-header" id="flush-headingTwo">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseTwo" aria-expanded="false" aria-controls="flush-collapseTwo">
- Accordion Item #2
- </button>
- </h2>
- <div id="flush-collapseTwo" class="accordion-collapse collapse" aria-labelledby="flush-headingTwo" data-bs-parent="#accordionFlushExample">
- <div class="accordion-body">Placeholder content for this accordion, which is intended to demonstrate the <code>.accordion-flush</code> class. This is the second item's accordion body. Let's imagine this being filled with some actual content.</div>
- </div>
- </div>
- <div class="accordion-item">
- <h2 class="accordion-header" id="flush-headingThree">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseThree" aria-expanded="false" aria-controls="flush-collapseThree">
- Accordion Item #3
- </button>
- </h2>
- <div id="flush-collapseThree" class="accordion-collapse collapse" aria-labelledby="flush-headingThree" data-bs-parent="#accordionFlushExample">
- <div class="accordion-body">Placeholder content for this accordion, which is intended to demonstrate the <code>.accordion-flush</code> class. This is the third item's accordion body. Nothing more exciting happening here in terms of content, but just filling up the space to make it look, at least at first glance, a bit more representative of how this would look in a real-world application.</div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Always open
-
-Omit the `data-bs-parent` attribute on each `.accordion-collapse` to make accordion items stay open when another item is opened.
-
-{{< example >}}
-<div class="accordion" id="accordionPanelsStayOpenExample">
- <div class="accordion-item">
- <h2 class="accordion-header" id="panelsStayOpen-headingOne">
- <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseOne" aria-expanded="true" aria-controls="panelsStayOpen-collapseOne">
- Accordion Item #1
- </button>
- </h2>
- <div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show" aria-labelledby="panelsStayOpen-headingOne">
- <div class="accordion-body">
- <strong>This is the first item's accordion body.</strong> It is shown by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
- </div>
- </div>
- </div>
- <div class="accordion-item">
- <h2 class="accordion-header" id="panelsStayOpen-headingTwo">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false" aria-controls="panelsStayOpen-collapseTwo">
- Accordion Item #2
- </button>
- </h2>
- <div id="panelsStayOpen-collapseTwo" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingTwo">
- <div class="accordion-body">
- <strong>This is the second item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
- </div>
- </div>
- </div>
- <div class="accordion-item">
- <h2 class="accordion-header" id="panelsStayOpen-headingThree">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseThree" aria-expanded="false" aria-controls="panelsStayOpen-collapseThree">
- Accordion Item #3
- </button>
- </h2>
- <div id="panelsStayOpen-collapseThree" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingThree">
- <div class="accordion-body">
- <strong>This is the third item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Accessibility
-
-Please read the [collapse accessibility section]({{< docsref "/components/collapse#accessibility" >}}) for more information.
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, accordions now use local CSS variables on `.accordion` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="accordion-css-vars" file="scss/_accordion.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="accordion-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/alerts.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/alerts.md
deleted file mode 100644
index 8837ed46c..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/alerts.md
+++ /dev/null
@@ -1,257 +0,0 @@
----
-layout: docs
-title: Alerts
-description: Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.
-group: components
-toc: true
----
-
-## Examples
-
-Alerts are available for any length of text, as well as an optional close button. For proper styling, use one of the eight **required** contextual classes (e.g., `.alert-success`). For inline dismissal, use the [alerts JavaScript plugin](#dismissing).
-
-{{< example >}}
-{{< alerts.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<div class="alert alert-{{ .name }}" role="alert">
- A simple {{ .name }} alert—check it out!
-</div>{{- end -}}
-{{< /alerts.inline >}}
-{{< /example >}}
-
-{{< callout info >}}
-{{< partial "callout-warning-color-assistive-technologies.md" >}}
-{{< /callout >}}
-
-### Live example
-
-Click the button below to show an alert (hidden with inline styles to start), then dismiss (and destroy) it with the built-in close button.
-
-{{< example stackblitz_add_js="true" >}}
-<div id="liveAlertPlaceholder"></div>
-<button type="button" class="btn btn-primary" id="liveAlertBtn">Show live alert</button>
-{{< /example >}}
-
-We use the following JavaScript to trigger our live alert demo:
-
-```js
-const alertPlaceholder = document.getElementById('liveAlertPlaceholder')
-
-const alert = (message, type) => {
- const wrapper = document.createElement('div')
- wrapper.innerHTML = [
- `<div class="alert alert-${type} alert-dismissible" role="alert">`,
- ` <div>${message}</div>`,
- ' <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>',
- '</div>'
- ].join('')
-
- alertPlaceholder.append(wrapper)
-}
-
-const alertTrigger = document.getElementById('liveAlertBtn')
-if (alertTrigger) {
- alertTrigger.addEventListener('click', () => {
- alert('Nice, you triggered this alert message!', 'success')
- })
-}
-```
-
-### Link color
-
-Use the `.alert-link` utility class to quickly provide matching colored links within any alert.
-
-{{< example >}}
-{{< alerts.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<div class="alert alert-{{ .name }}" role="alert">
- A simple {{ .name }} alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.
-</div>{{ end -}}
-{{< /alerts.inline >}}
-{{< /example >}}
-
-### Additional content
-
-Alerts can also contain additional HTML elements like headings, paragraphs and dividers.
-
-{{< example >}}
-<div class="alert alert-success" role="alert">
- <h4 class="alert-heading">Well done!</h4>
- <p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.</p>
- <hr>
- <p class="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p>
-</div>
-{{< /example >}}
-
-### Icons
-
-Similarly, you can use [flexbox utilities]({{< docsref "/utilities/flex" >}}) and [Bootstrap Icons]({{< param icons >}}) to create alerts with icons. Depending on your icons and content, you may want to add more utilities or custom styles.
-
-{{< example >}}
-<div class="alert alert-primary d-flex align-items-center" role="alert">
- <svg xmlns="http://www.w3.org/2000/svg" class="bi bi-exclamation-triangle-fill flex-shrink-0 me-2" viewBox="0 0 16 16" role="img" aria-label="Warning:">
- <path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/>
- </svg>
- <div>
- An example alert with an icon
- </div>
-</div>
-{{< /example >}}
-
-Need more than one icon for your alerts? Consider using more Bootstrap Icons and making a local SVG sprite like so to easily reference the same icons repeatedly.
-
-{{< example >}}
-<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
- <symbol id="check-circle-fill" viewBox="0 0 16 16">
- <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/>
- </symbol>
- <symbol id="info-fill" viewBox="0 0 16 16">
- <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
- </symbol>
- <symbol id="exclamation-triangle-fill" viewBox="0 0 16 16">
- <path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/>
- </symbol>
-</svg>
-
-<div class="alert alert-primary d-flex align-items-center" role="alert">
- <svg class="bi flex-shrink-0 me-2" role="img" aria-label="Info:"><use xlink:href="#info-fill"/></svg>
- <div>
- An example alert with an icon
- </div>
-</div>
-<div class="alert alert-success d-flex align-items-center" role="alert">
- <svg class="bi flex-shrink-0 me-2" role="img" aria-label="Success:"><use xlink:href="#check-circle-fill"/></svg>
- <div>
- An example success alert with an icon
- </div>
-</div>
-<div class="alert alert-warning d-flex align-items-center" role="alert">
- <svg class="bi flex-shrink-0 me-2" role="img" aria-label="Warning:"><use xlink:href="#exclamation-triangle-fill"/></svg>
- <div>
- An example warning alert with an icon
- </div>
-</div>
-<div class="alert alert-danger d-flex align-items-center" role="alert">
- <svg class="bi flex-shrink-0 me-2" role="img" aria-label="Danger:"><use xlink:href="#exclamation-triangle-fill"/></svg>
- <div>
- An example danger alert with an icon
- </div>
-</div>
-{{< /example >}}
-
-### Dismissing
-
-Using the alert JavaScript plugin, it's possible to dismiss any alert inline. Here's how:
-
-- Be sure you've loaded the alert plugin, or the compiled Bootstrap JavaScript.
-- Add a [close button]({{< docsref "/components/close-button" >}}) and the `.alert-dismissible` class, which adds extra padding to the right of the alert and positions the close button.
-- On the close button, add the `data-bs-dismiss="alert"` attribute, which triggers the JavaScript functionality. Be sure to use the `<button>` element with it for proper behavior across all devices.
-- To animate alerts when dismissing them, be sure to add the `.fade` and `.show` classes.
-
-You can see this in action with a live demo:
-
-{{< example >}}
-<div class="alert alert-warning alert-dismissible fade show" role="alert">
- <strong>Holy guacamole!</strong> You should check in on some of those fields below.
- <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
-</div>
-{{< /example >}}
-
-{{< callout warning >}}
-When an alert is dismissed, the element is completely removed from the page structure. If a keyboard user dismisses the alert using the close button, their focus will suddenly be lost and, depending on the browser, reset to the start of the page/document. For this reason, we recommend including additional JavaScript that listens for the `closed.bs.alert` event and programmatically sets `focus()` to the most appropriate location in the page. If you're planning to move focus to a non-interactive element that normally does not receive focus, make sure to add `tabindex="-1"` to the element.
-{{< /callout >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, alerts now use local CSS variables on `.alert` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="alert-css-vars" file="scss/_alert.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="alert-variables" file="scss/_variables.scss" >}}
-
-### Sass mixin
-
-Used in combination with `$theme-colors` to create contextual modifier classes for our alerts.
-
-{{< scss-docs name="alert-variant-mixin" file="scss/mixins/_alert.scss" >}}
-
-### Sass loop
-
-Loop that generates the modifier classes with the `alert-variant()` mixin.
-
-{{< scss-docs name="alert-modifiers" file="scss/_alert.scss" >}}
-
-## JavaScript behavior
-
-### Initialize
-
-Initialize elements as alerts
-
-```js
-const alertList = document.querySelectorAll('.alert')
-const alerts = [...alertList].map(element => new bootstrap.Alert(element))
-```
-
-{{< callout info >}}
-For the sole purpose of dismissing an alert, it isn't necessary to initialize the component manually via the JS API. By making use of `data-bs-dismiss="alert"`, the component will be initialized automatically and properly dismissed.
-
-See the [triggers](#triggers) section for more details.
-{{< /callout >}}
-
-### Triggers
-
-{{% js-dismiss "alert" %}}
-
-**Note that closing an alert will remove it from the DOM.**
-
-### Methods
-
-You can create an alert instance with the alert constructor, for example:
-
-```js
-const bsAlert = new bootstrap.Alert('#myAlert')
-```
-
-This makes an alert listen for click events on descendant elements which have the `data-bs-dismiss="alert"` attribute. (Not necessary when using the data-api’s auto-initialization.)
-
-{{< bs-table >}}
-| Method | Description |
-| --- | --- |
-| `close` | Closes an alert by removing it from the DOM. If the `.fade` and `.show` classes are present on the element, the alert will fade out before it is removed. |
-| `dispose` | Destroys an element's alert. (Removes stored data on the DOM element) |
-| `getInstance` | Static method which allows you to get the alert instance associated to a DOM element. For example: `bootstrap.Alert.getInstance(alert)`. |
-| `getOrCreateInstance` | Static method which returns an alert instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Alert.getOrCreateInstance(element)`. |
-{{< /bs-table >}}
-
-Basic usage:
-
-```js
-const alert = bootstrap.Alert.getOrCreateInstance('#myAlert')
-alert.close()
-```
-
-### Events
-
-Bootstrap's alert plugin exposes a few events for hooking into alert functionality.
-
-{{< bs-table >}}
-| Event | Description |
-| --- | --- |
-| `close.bs.alert` | Fires immediately when the `close` instance method is called. |
-| `closed.bs.alert` | Fired when the alert has been closed and CSS transitions have completed. |
-{{< /bs-table >}}
-
-```js
-const myAlert = document.getElementById('myAlert')
-myAlert.addEventListener('closed.bs.alert', event => {
- // do something, for instance, explicitly move focus to the most appropriate element,
- // so it doesn't get lost/reset to the start of the page
- // document.getElementById('...').focus()
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/badge.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/badge.md
deleted file mode 100644
index 55b1ffb85..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/badge.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-layout: docs
-title: Badges
-description: Documentation and examples for badges, our small count and labeling component.
-group: components
-toc: true
----
-
-## Examples
-
-Badges scale to match the size of the immediate parent element by using relative font sizing and `em` units. As of v5, badges no longer have focus or hover styles for links.
-
-### Headings
-
-{{< example >}}
-<h1>Example heading <span class="badge bg-secondary">New</span></h1>
-<h2>Example heading <span class="badge bg-secondary">New</span></h2>
-<h3>Example heading <span class="badge bg-secondary">New</span></h3>
-<h4>Example heading <span class="badge bg-secondary">New</span></h4>
-<h5>Example heading <span class="badge bg-secondary">New</span></h5>
-<h6>Example heading <span class="badge bg-secondary">New</span></h6>
-{{< /example >}}
-
-### Buttons
-
-Badges can be used as part of links or buttons to provide a counter.
-
-{{< example >}}
-<button type="button" class="btn btn-primary">
- Notifications <span class="badge text-bg-secondary">4</span>
-</button>
-{{< /example >}}
-
-Note that depending on how they are used, badges may be confusing for users of screen readers and similar assistive technologies. While the styling of badges provides a visual cue as to their purpose, these users will simply be presented with the content of the badge. Depending on the specific situation, these badges may seem like random additional words or numbers at the end of a sentence, link, or button.
-
-Unless the context is clear (as with the "Notifications" example, where it is understood that the "4" is the number of notifications), consider including additional context with a visually hidden piece of additional text.
-
-### Positioned
-
-Use utilities to modify a `.badge` and position it in the corner of a link or button.
-
-{{< example >}}
-<button type="button" class="btn btn-primary position-relative">
- Inbox
- <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">
- 99+
- <span class="visually-hidden">unread messages</span>
- </span>
-</button>
-{{< /example >}}
-
-You can also replace the `.badge` class with a few more utilities without a count for a more generic indicator.
-
-{{< example >}}
-<button type="button" class="btn btn-primary position-relative">
- Profile
- <span class="position-absolute top-0 start-100 translate-middle p-2 bg-danger border border-light rounded-circle">
- <span class="visually-hidden">New alerts</span>
- </span>
-</button>
-{{< /example >}}
-
-## Background colors
-
-{{< added-in "5.2.0" >}}
-
-Set a `background-color` with contrasting foreground `color` with [our `.text-bg-{color}` helpers]({{< docsref "helpers/color-background" >}}). Previously it was required to manually pair your choice of [`.text-{color}`]({{< docsref "/utilities/colors" >}}) and [`.bg-{color}`]({{< docsref "/utilities/background" >}}) utilities for styling, which you still may use if you prefer.
-
-{{< example >}}
-{{< badge.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<span class="badge text-bg-{{ .name }}">{{ .name | title }}</span>{{- end -}}
-{{< /badge.inline >}}
-{{< /example >}}
-
-{{< callout info >}}
-{{< partial "callout-warning-color-assistive-technologies.md" >}}
-{{< /callout >}}
-
-## Pill badges
-
-Use the `.rounded-pill` utility class to make badges more rounded with a larger `border-radius`.
-
-{{< example >}}
-{{< badge.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<span class="badge rounded-pill text-bg-{{ .name }}">{{ .name | title }}</span>{{- end -}}
-{{< /badge.inline >}}
-{{< /example >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, badges now use local CSS variables on `.badge` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="badge-css-vars" file="scss/_badge.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="badge-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/buttons.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/buttons.md
deleted file mode 100644
index c2fdd75b1..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/buttons.md
+++ /dev/null
@@ -1,242 +0,0 @@
----
-layout: docs
-title: Buttons
-description: Use Bootstrap's custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.
-group: components
-toc: true
----
-
-## Examples
-
-Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.
-
-{{< example >}}
-{{< buttons.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<button type="button" class="btn btn-{{ .name }}">{{ .name | title }}</button>
-{{- end -}}
-{{< /buttons.inline >}}
-
-<button type="button" class="btn btn-link">Link</button>
-{{< /example >}}
-
-{{< callout info >}}
-{{< partial "callout-warning-color-assistive-technologies.md" >}}
-{{< /callout >}}
-
-## Disable text wrapping
-
-If you don't want the button text to wrap, you can add the `.text-nowrap` class to the button. In Sass, you can set `$btn-white-space: nowrap` to disable text wrapping for each button.
-
-## Button tags
-
-The `.btn` classes are designed to be used with the `<button>` element. However, you can also use these classes on `<a>` or `<input>` elements (though some browsers may apply a slightly different rendering).
-
-When using button classes on `<a>` elements that are used to trigger in-page functionality (like collapsing content), rather than linking to new pages or sections within the current page, these links should be given a `role="button"` to appropriately convey their purpose to assistive technologies such as screen readers.
-
-{{< example >}}
-<a class="btn btn-primary" href="#" role="button">Link</a>
-<button class="btn btn-primary" type="submit">Button</button>
-<input class="btn btn-primary" type="button" value="Input">
-<input class="btn btn-primary" type="submit" value="Submit">
-<input class="btn btn-primary" type="reset" value="Reset">
-{{< /example >}}
-
-## Outline buttons
-
-In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the `.btn-outline-*` ones to remove all background images and colors on any button.
-
-{{< example >}}
-{{< buttons.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<button type="button" class="btn btn-outline-{{ .name }}">{{ .name | title }}</button>
-{{- end -}}
-{{< /buttons.inline >}}
-{{< /example >}}
-
-{{< callout info >}}
-Some of the button styles use a relatively light foreground color, and should only be used on a dark background in order to have sufficient contrast.
-{{< /callout >}}
-
-## Sizes
-
-Fancy larger or smaller buttons? Add `.btn-lg` or `.btn-sm` for additional sizes.
-
-{{< example >}}
-<button type="button" class="btn btn-primary btn-lg">Large button</button>
-<button type="button" class="btn btn-secondary btn-lg">Large button</button>
-{{< /example >}}
-
-{{< example >}}
-<button type="button" class="btn btn-primary btn-sm">Small button</button>
-<button type="button" class="btn btn-secondary btn-sm">Small button</button>
-{{< /example >}}
-
-You can even roll your own custom sizing with CSS variables:
-
-{{< example >}}
-<button type="button" class="btn btn-primary"
- style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;">
- Custom button
-</button>
-{{< /example >}}
-
-## Disabled state
-
-Make buttons look inactive by adding the `disabled` boolean attribute to any `<button>` element. Disabled buttons have `pointer-events: none` applied to, preventing hover and active states from triggering.
-
-{{< example >}}
-<button type="button" class="btn btn-primary" disabled>Primary button</button>
-<button type="button" class="btn btn-secondary" disabled>Button</button>
-<button type="button" class="btn btn-outline-primary" disabled>Primary button</button>
-<button type="button" class="btn btn-outline-secondary" disabled>Button</button>
-{{< /example >}}
-
-Disabled buttons using the `<a>` element behave a bit different:
-
-- `<a>`s don't support the `disabled` attribute, so you must add the `.disabled` class to make it visually appear disabled.
-- Some future-friendly styles are included to disable all `pointer-events` on anchor buttons.
-- Disabled buttons using `<a>` should include the `aria-disabled="true"` attribute to indicate the state of the element to assistive technologies.
-- Disabled buttons using `<a>` *should not* include the `href` attribute.
-
-{{< example >}}
-<a class="btn btn-primary disabled" role="button" aria-disabled="true">Primary link</a>
-<a class="btn btn-secondary disabled" role="button" aria-disabled="true">Link</a>
-{{< /example >}}
-
-### Link functionality caveat
-
-To cover cases where you have to keep the `href` attribute on a disabled link, the `.disabled` class uses `pointer-events: none` to try to disable the link functionality of `<a>`s. Note that this CSS property is not yet standardized for HTML, but all modern browsers support it. In addition, even in browsers that do support `pointer-events: none`, keyboard navigation remains unaffected, meaning that sighted keyboard users and users of assistive technologies will still be able to activate these links. So to be safe, in addition to `aria-disabled="true"`, also include a `tabindex="-1"` attribute on these links to prevent them from receiving keyboard focus, and use custom JavaScript to disable their functionality altogether.
-
-{{< example >}}
-<a href="#" class="btn btn-primary disabled" tabindex="-1" role="button" aria-disabled="true">Primary link</a>
-<a href="#" class="btn btn-secondary disabled" tabindex="-1" role="button" aria-disabled="true">Link</a>
-{{< /example >}}
-
-## Block buttons
-
-Create responsive stacks of full-width, "block buttons" like those in Bootstrap 4 with a mix of our display and gap utilities. By using utilities instead of button specific classes, we have much greater control over spacing, alignment, and responsive behaviors.
-
-{{< example >}}
-<div class="d-grid gap-2">
- <button class="btn btn-primary" type="button">Button</button>
- <button class="btn btn-primary" type="button">Button</button>
-</div>
-{{< /example >}}
-
-Here we create a responsive variation, starting with vertically stacked buttons until the `md` breakpoint, where `.d-md-block` replaces the `.d-grid` class, thus nullifying the `gap-2` utility. Resize your browser to see them change.
-
-{{< example >}}
-<div class="d-grid gap-2 d-md-block">
- <button class="btn btn-primary" type="button">Button</button>
- <button class="btn btn-primary" type="button">Button</button>
-</div>
-{{< /example >}}
-
-You can adjust the width of your block buttons with grid column width classes. For example, for a half-width "block button", use `.col-6`. Center it horizontally with `.mx-auto`, too.
-
-{{< example >}}
-<div class="d-grid gap-2 col-6 mx-auto">
- <button class="btn btn-primary" type="button">Button</button>
- <button class="btn btn-primary" type="button">Button</button>
-</div>
-{{< /example >}}
-
-Additional utilities can be used to adjust the alignment of buttons when horizontal. Here we've taken our previous responsive example and added some flex utilities and a margin utility on the button to right align the buttons when they're no longer stacked.
-
-{{< example >}}
-<div class="d-grid gap-2 d-md-flex justify-content-md-end">
- <button class="btn btn-primary me-md-2" type="button">Button</button>
- <button class="btn btn-primary" type="button">Button</button>
-</div>
-{{< /example >}}
-
-## Button plugin
-
-The button plugin allows you to create simple on/off toggle buttons.
-
-{{< callout info >}}
-Visually, these toggle buttons are identical to the [checkbox toggle buttons]({{< docsref "/forms/checks-radios#checkbox-toggle-buttons" >}}). However, they are conveyed differently by assistive technologies: the checkbox toggles will be announced by screen readers as "checked"/"not checked" (since, despite their appearance, they are fundamentally still checkboxes), whereas these toggle buttons will be announced as "button"/"button pressed". The choice between these two approaches will depend on the type of toggle you are creating, and whether or not the toggle will make sense to users when announced as a checkbox or as an actual button.
-{{< /callout >}}
-
-### Toggle states
-
-Add `data-bs-toggle="button"` to toggle a button's `active` state. If you're pre-toggling a button, you must manually add the `.active` class **and** `aria-pressed="true"` to ensure that it is conveyed appropriately to assistive technologies.
-
-{{< example >}}
-<button type="button" class="btn btn-primary" data-bs-toggle="button">Toggle button</button>
-<button type="button" class="btn btn-primary active" data-bs-toggle="button" aria-pressed="true">Active toggle button</button>
-<button type="button" class="btn btn-primary" disabled data-bs-toggle="button">Disabled toggle button</button>
-{{< /example >}}
-
-{{< example >}}
-<a href="#" class="btn btn-primary" role="button" data-bs-toggle="button">Toggle link</a>
-<a href="#" class="btn btn-primary active" role="button" data-bs-toggle="button" aria-pressed="true">Active toggle link</a>
-<a class="btn btn-primary disabled" aria-disabled="true" role="button" data-bs-toggle="button">Disabled toggle link</a>
-{{< /example >}}
-
-### Methods
-
-You can create a button instance with the button constructor, for example:
-
-```js
-const bsButton = new bootstrap.Button('#myButton')
-```
-
-{{< bs-table "table" >}}
-| Method | Description |
-| --- | --- |
-| `dispose` | Destroys an element's button. (Removes stored data on the DOM element) |
-| `getInstance` | Static method which allows you to get the button instance associated to a DOM element, you can use it like this: `bootstrap.Button.getInstance(element)`. |
-| `getOrCreateInstance` | Static method which returns a button instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Button.getOrCreateInstance(element)`. |
-| `toggle` | Toggles push state. Gives the button the appearance that it has been activated. |
-{{< /bs-table >}}
-
-For example, to toggle all buttons
-
-```js
-document.querySelectorAll('.btn').forEach(buttonElement => {
- const button = bootstrap.Button.getOrCreateInstance(buttonElement)
- button.toggle()
-})
-```
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, buttons now use local CSS variables on `.btn` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="btn-css-vars" file="scss/_buttons.scss" >}}
-
-Each `.btn-*` modifier class updates the appropriate CSS variables to minimize additional CSS rules with our `button-variant()`, `button-outline-variant()`, and `button-size()` mixins.
-
-Here's an example of building a custom `.btn-*` modifier class like we do for the buttons unique to our docs by reassigning Bootstrap's CSS variables with a mixture of our own CSS and Sass variables.
-
-<div class="bd-example">
- <button type="button" class="btn btn-bd-primary">Custom button</button>
-</div>
-
-{{< scss-docs name="btn-css-vars-example" file="site/assets/scss/_buttons.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="btn-variables" file="scss/_variables.scss" >}}
-
-### Sass mixins
-
-There are three mixins for buttons: button and button outline variant mixins (both based on `$theme-colors`), plus a button size mixin.
-
-{{< scss-docs name="btn-variant-mixin" file="scss/mixins/_buttons.scss" >}}
-
-{{< scss-docs name="btn-outline-variant-mixin" file="scss/mixins/_buttons.scss" >}}
-
-{{< scss-docs name="btn-size-mixin" file="scss/mixins/_buttons.scss" >}}
-
-### Sass loops
-
-Button variants (for regular and outline buttons) use their respective mixins with our `$theme-colors` map to generate the modifier classes in `scss/_buttons.scss`.
-
-{{< scss-docs name="btn-variant-loops" file="scss/_buttons.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/card.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/card.md
deleted file mode 100644
index 6bc90e7b8..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/card.md
+++ /dev/null
@@ -1,739 +0,0 @@
----
-layout: docs
-title: Cards
-description: Bootstrap's cards provide a flexible and extensible content container with multiple variants and options.
-group: components
-toc: true
----
-
-## About
-
-A **card** is a flexible and extensible content container. It includes options for headers and footers, a wide variety of content, contextual background colors, and powerful display options. If you're familiar with Bootstrap 3, cards replace our old panels, wells, and thumbnails. Similar functionality to those components is available as modifier classes for cards.
-
-## Example
-
-Cards are built with as little markup and styles as possible, but still manage to deliver a ton of control and customization. Built with flexbox, they offer easy alignment and mix well with other Bootstrap components. They have no `margin` by default, so use [spacing utilities]({{< docsref "/utilities/spacing" >}}) as needed.
-
-Below is an example of a basic card with mixed content and a fixed width. Cards have no fixed width to start, so they'll naturally fill the full width of its parent element. This is easily customized with our various [sizing options](#sizing).
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-## Content types
-
-Cards support a wide variety of content, including images, text, list groups, links, and more. Below are examples of what's supported.
-
-### Body
-
-The building block of a card is the `.card-body`. Use it whenever you need a padded section within a card.
-
-{{< example >}}
-<div class="card">
- <div class="card-body">
- This is some text within a card body.
- </div>
-</div>
-{{< /example >}}
-
-### Titles, text, and links
-
-Card titles are used by adding `.card-title` to a `<h*>` tag. In the same way, links are added and placed next to each other by adding `.card-link` to an `<a>` tag.
-
-Subtitles are used by adding a `.card-subtitle` to a `<h*>` tag. If the `.card-title` and the `.card-subtitle` items are placed in a `.card-body` item, the card title and subtitle are aligned nicely.
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <h6 class="card-subtitle mb-2 text-muted">Card subtitle</h6>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- <a href="#" class="card-link">Card link</a>
- <a href="#" class="card-link">Another link</a>
- </div>
-</div>
-{{< /example >}}
-
-### Images
-
-`.card-img-top` places an image to the top of the card. With `.card-text`, text can be added to the card. Text within `.card-text` can also be styled with the standard HTML tags.
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- </div>
-</div>
-{{< /example >}}
-
-### List groups
-
-Create lists of content in a card with a flush list group.
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- <ul class="list-group list-group-flush">
- <li class="list-group-item">An item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- </ul>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- <div class="card-header">
- Featured
- </div>
- <ul class="list-group list-group-flush">
- <li class="list-group-item">An item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- </ul>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- <ul class="list-group list-group-flush">
- <li class="list-group-item">An item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- </ul>
- <div class="card-footer">
- Card footer
- </div>
-</div>
-{{< /example >}}
-
-### Kitchen sink
-
-Mix and match multiple content types to create the card you need, or throw everything in there. Shown below are image styles, blocks, text styles, and a list group—all wrapped in a fixed-width card.
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- </div>
- <ul class="list-group list-group-flush">
- <li class="list-group-item">An item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- </ul>
- <div class="card-body">
- <a href="#" class="card-link">Card link</a>
- <a href="#" class="card-link">Another link</a>
- </div>
-</div>
-{{< /example >}}
-
-### Header and footer
-
-Add an optional header and/or footer within a card.
-
-{{< example >}}
-<div class="card">
- <div class="card-header">
- Featured
- </div>
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-Card headers can be styled by adding `.card-header` to `<h*>` elements.
-
-{{< example >}}
-<div class="card">
- <h5 class="card-header">Featured</h5>
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="card">
- <div class="card-header">
- Quote
- </div>
- <div class="card-body">
- <blockquote class="blockquote mb-0">
- <p>A well-known quote, contained in a blockquote element.</p>
- <footer class="blockquote-footer">Someone famous in <cite title="Source Title">Source Title</cite></footer>
- </blockquote>
- </div>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="card text-center">
- <div class="card-header">
- Featured
- </div>
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
- <div class="card-footer text-muted">
- 2 days ago
- </div>
-</div>
-{{< /example >}}
-
-## Sizing
-
-Cards assume no specific `width` to start, so they'll be 100% wide unless otherwise stated. You can change this as needed with custom CSS, grid classes, grid Sass mixins, or utilities.
-
-### Using grid markup
-
-Using the grid, wrap cards in columns and rows as needed.
-
-{{< example >}}
-<div class="row">
- <div class="col-sm-6">
- <div class="card">
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
- </div>
- </div>
- <div class="col-sm-6">
- <div class="card">
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Using utilities
-
-Use our handful of [available sizing utilities]({{< docsref "/utilities/sizing" >}}) to quickly set a card's width.
-
-{{< example >}}
-<div class="card w-75">
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Button</a>
- </div>
-</div>
-
-<div class="card w-50">
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Button</a>
- </div>
-</div>
-{{< /example >}}
-
-### Using custom CSS
-
-Use custom CSS in your stylesheets or as inline styles to set a width.
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-## Text alignment
-
-You can quickly change the text alignment of any card—in its entirety or specific parts—with our [text align classes]({{< docsref "/utilities/text#text-alignment" >}}).
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-
-<div class="card text-center" style="width: 18rem;">
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-
-<div class="card text-end" style="width: 18rem;">
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-## Navigation
-
-Add some navigation to a card's header (or block) with Bootstrap's [nav components]({{< docsref "/components/navs-tabs" >}}).
-
-{{< example >}}
-<div class="card text-center">
- <div class="card-header">
- <ul class="nav nav-tabs card-header-tabs">
- <li class="nav-item">
- <a class="nav-link active" aria-current="true" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- </div>
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="card text-center">
- <div class="card-header">
- <ul class="nav nav-pills card-header-pills">
- <li class="nav-item">
- <a class="nav-link active" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- </div>
- <div class="card-body">
- <h5 class="card-title">Special title treatment</h5>
- <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-## Images
-
-Cards include a few options for working with images. Choose from appending "image caps" at either end of a card, overlaying images with card content, or simply embedding the image in a card.
-
-### Image caps
-
-Similar to headers and footers, cards can include top and bottom "image caps"—images at the top or bottom of a card.
-
-{{< example >}}
-<div class="card mb-3">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
- </div>
-</div>
-<div class="card">
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
- </div>
- {{< placeholder width="100%" height="180" class="card-img-bottom" text="Image cap" >}}
-</div>
-{{< /example >}}
-
-### Image overlays
-
-Turn an image into a card background and overlay your card's text. Depending on the image, you may or may not need additional styles or utilities.
-
-{{< example >}}
-<div class="card text-bg-dark">
- {{< placeholder width="100%" height="270" class="bd-placeholder-img-lg card-img" text="Card image" >}}
- <div class="card-img-overlay">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- <p class="card-text"><small>Last updated 3 mins ago</small></p>
- </div>
-</div>
-{{< /example >}}
-
-{{< callout info >}}
-Note that content should not be larger than the height of the image. If content is larger than the image the content will be displayed outside the image.
-{{< /callout >}}
-
-## Horizontal
-
-Using a combination of grid and utility classes, cards can be made horizontal in a mobile-friendly and responsive way. In the example below, we remove the grid gutters with `.g-0` and use `.col-md-*` classes to make the card horizontal at the `md` breakpoint. Further adjustments may be needed depending on your card content.
-
-{{< example >}}
-<div class="card mb-3" style="max-width: 540px;">
- <div class="row g-0">
- <div class="col-md-4">
- {{< placeholder width="100%" height="250" text="Image" class="img-fluid rounded-start" >}}
- </div>
- <div class="col-md-8">
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Card styles
-
-Cards include various options for customizing their backgrounds, borders, and color.
-
-### Background and color
-
-{{< added-in "5.2.0" >}}
-
-Set a `background-color` with contrasting foreground `color` with [our `.text-bg-{color}` helpers]({{< docsref "helpers/color-background" >}}). Previously it was required to manually pair your choice of [`.text-{color}`]({{< docsref "/utilities/colors" >}}) and [`.bg-{color}`]({{< docsref "/utilities/background" >}}) utilities for styling, which you still may use if you prefer.
-
-{{< example >}}
-{{< card.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<div class="card text-bg-{{ .name }} mb-3" style="max-width: 18rem;">
- <div class="card-header">Header</div>
- <div class="card-body">
- <h5 class="card-title">{{ .name | title }} card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- </div>
-</div>
-{{- end -}}
-{{< /card.inline >}}
-{{< /example >}}
-
-{{< callout info >}}
-{{< partial "callout-warning-color-assistive-technologies.md" >}}
-{{< /callout >}}
-
-### Border
-
-Use [border utilities]({{< docsref "/utilities/borders" >}}) to change just the `border-color` of a card. Note that you can put `.text-{color}` classes on the parent `.card` or a subset of the card's contents as shown below.
-
-{{< example >}}
-{{< card.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<div class="card border-{{ .name }} mb-3" style="max-width: 18rem;">
- <div class="card-header">Header</div>
- <div class="card-body{{ if not .contrast_color }} text-{{ .name }}{{ end }}">
- <h5 class="card-title">{{ .name | title }} card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- </div>
-</div>
-{{- end -}}
-{{< /card.inline >}}
-{{< /example >}}
-
-### Mixins utilities
-
-You can also change the borders on the card header and footer as needed, and even remove their `background-color` with `.bg-transparent`.
-
-{{< example >}}
-<div class="card border-success mb-3" style="max-width: 18rem;">
- <div class="card-header bg-transparent border-success">Header</div>
- <div class="card-body text-success">
- <h5 class="card-title">Success card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- </div>
- <div class="card-footer bg-transparent border-success">Footer</div>
-</div>
-{{< /example >}}
-
-## Card layout
-
-In addition to styling the content within cards, Bootstrap includes a few options for laying out series of cards. For the time being, **these layout options are not yet responsive**.
-
-### Card groups
-
-Use card groups to render cards as a single, attached element with equal width and height columns. Card groups start off stacked and use `display: flex;` to become attached with uniform dimensions starting at the `sm` breakpoint.
-
-{{< example >}}
-<div class="card-group">
- <div class="card">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
- </div>
- </div>
- <div class="card">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
- <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
- </div>
- </div>
- <div class="card">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
- <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-When using card groups with footers, their content will automatically line up.
-
-{{< example >}}
-<div class="card-group">
- <div class="card">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- <div class="card-footer">
- <small class="text-muted">Last updated 3 mins ago</small>
- </div>
- </div>
- <div class="card">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
- </div>
- <div class="card-footer">
- <small class="text-muted">Last updated 3 mins ago</small>
- </div>
- </div>
- <div class="card">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
- </div>
- <div class="card-footer">
- <small class="text-muted">Last updated 3 mins ago</small>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Grid cards
-
-Use the Bootstrap grid system and its [`.row-cols` classes]({{< docsref "/layout/grid#row-columns" >}}) to control how many grid columns (wrapped around your cards) you show per row. For example, here's `.row-cols-1` laying out the cards on one column, and `.row-cols-md-2` splitting four cards to equal width across multiple rows, from the medium breakpoint up.
-
-{{< example >}}
-<div class="row row-cols-1 row-cols-md-2 g-4">
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content.</p>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-Change it to `.row-cols-3` and you'll see the fourth card wrap.
-
-{{< example >}}
-<div class="row row-cols-1 row-cols-md-3 g-4">
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content.</p>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-When you need equal height, add `.h-100` to the cards. If you want equal heights by default, you can set `$card-height: 100%` in Sass.
-
-{{< example >}}
-<div class="row row-cols-1 row-cols-md-3 g-4">
- <div class="col">
- <div class="card h-100">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card h-100">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a short card.</p>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card h-100">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content.</p>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card h-100">
- {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-Just like with card groups, card footers will automatically line up.
-
-{{< example >}}
-<div class="row row-cols-1 row-cols-md-3 g-4">
- <div class="col">
- <div class="card h-100">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- </div>
- <div class="card-footer">
- <small class="text-muted">Last updated 3 mins ago</small>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card h-100">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
- </div>
- <div class="card-footer">
- <small class="text-muted">Last updated 3 mins ago</small>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card h-100">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
- </div>
- <div class="card-footer">
- <small class="text-muted">Last updated 3 mins ago</small>
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Masonry
-
-In `v4` we used a CSS-only technique to mimic the behavior of [Masonry](https://masonry.desandro.com/)-like columns, but this technique came with lots of unpleasant [side effects](https://github.com/twbs/bootstrap/pull/28922). If you want to have this type of layout in `v5`, you can just make use of Masonry plugin. **Masonry is not included in Bootstrap**, but we've made a [demo example]({{< docsref "/examples/masonry" >}}) to help you get started.
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, cards now use local CSS variables on `.card` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="card-css-vars" file="scss/_card.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="card-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/carousel.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/carousel.md
deleted file mode 100644
index e32ce64eb..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/carousel.md
+++ /dev/null
@@ -1,385 +0,0 @@
----
-layout: docs
-title: Carousel
-description: A slideshow component for cycling through elements—images or slides of text—like a carousel.
-group: components
-toc: true
----
-
-## How it works
-
-The carousel is a slideshow for cycling through a series of content, built with CSS 3D transforms and a bit of JavaScript. It works with a series of images, text, or custom markup. It also includes support for previous/next controls and indicators.
-
-In browsers where the [Page Visibility API](https://www.w3.org/TR/page-visibility/) is supported, the carousel will avoid sliding when the webpage is not visible to the user (such as when the browser tab is inactive, the browser window is minimized, etc.).
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-Please be aware that nested carousels are not supported, and carousels are generally not compliant with accessibility standards.
-
-## Example
-
-Carousels don't automatically normalize slide dimensions. As such, you may need to use additional utilities or custom styles to appropriately size content. While carousels support previous/next controls and indicators, they're not explicitly required. Add and customize as you see fit.
-
-**The `.active` class needs to be added to one of the slides** otherwise the carousel will not be visible. Also be sure to set a unique `id` on the `.carousel` for optional controls, especially if you're using multiple carousels on a single page. Control and indicator elements must have a `data-bs-target` attribute (or `href` for links) that matches the `id` of the `.carousel` element.
-
-### Slides only
-
-Here's a carousel with slides only. Note the presence of the `.d-block` and `.w-100` on carousel images to prevent browser default image alignment.
-
-{{< example >}}
-<div id="carouselExampleSlidesOnly" class="carousel slide" data-bs-ride="carousel">
- <div class="carousel-inner">
- <div class="carousel-item active">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### With controls
-
-Adding in the previous and next controls. We recommend using `<button>` elements, but you can also use `<a>` elements with `role="button"`.
-
-{{< example >}}
-<div id="carouselExampleControls" class="carousel slide" data-bs-ride="carousel">
- <div class="carousel-inner">
- <div class="carousel-item active">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
- </div>
- </div>
- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleControls" data-bs-slide="prev">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Previous</span>
- </button>
- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleControls" data-bs-slide="next">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Next</span>
- </button>
-</div>
-{{< /example >}}
-
-### With indicators
-
-You can also add the indicators to the carousel, alongside the controls, too.
-
-{{< example >}}
-<div id="carouselExampleIndicators" class="carousel slide" data-bs-ride="true">
- <div class="carousel-indicators">
- <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
- <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2"></button>
- <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2" aria-label="Slide 3"></button>
- </div>
- <div class="carousel-inner">
- <div class="carousel-item active">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
- </div>
- </div>
- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="prev">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Previous</span>
- </button>
- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="next">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Next</span>
- </button>
-</div>
-{{< /example >}}
-
-### With captions
-
-Add captions to your slides easily with the `.carousel-caption` element within any `.carousel-item`. They can be easily hidden on smaller viewports, as shown below, with optional [display utilities]({{< docsref "/utilities/display" >}}). We hide them initially with `.d-none` and bring them back on medium-sized devices with `.d-md-block`.
-
-{{< example >}}
-<div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="false">
- <div class="carousel-indicators">
- <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
- <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="Slide 2"></button>
- <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="Slide 3"></button>
- </div>
- <div class="carousel-inner">
- <div class="carousel-item active">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>First slide label</h5>
- <p>Some representative placeholder content for the first slide.</p>
- </div>
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>Second slide label</h5>
- <p>Some representative placeholder content for the second slide.</p>
- </div>
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>Third slide label</h5>
- <p>Some representative placeholder content for the third slide.</p>
- </div>
- </div>
- </div>
- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Previous</span>
- </button>
- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Next</span>
- </button>
-</div>
-{{< /example >}}
-
-### Crossfade
-
-Add `.carousel-fade` to your carousel to animate slides with a fade transition instead of a slide. Depending on your carousel content (e.g., text only slides), you may want to add `.bg-body` or some custom CSS to the `.carousel-item`s for proper crossfading.
-
-{{< example >}}
-<div id="carouselExampleFade" class="carousel slide carousel-fade" data-bs-ride="carousel">
- <div class="carousel-inner">
- <div class="carousel-item active">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
- </div>
- </div>
- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleFade" data-bs-slide="prev">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Previous</span>
- </button>
- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleFade" data-bs-slide="next">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Next</span>
- </button>
-</div>
-{{< /example >}}
-
-### Individual `.carousel-item` interval
-
-Add `data-bs-interval=""` to a `.carousel-item` to change the amount of time to delay between automatically cycling to the next item.
-
-{{< example >}}
-<div id="carouselExampleInterval" class="carousel slide" data-bs-ride="carousel">
- <div class="carousel-inner">
- <div class="carousel-item active" data-bs-interval="10000">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
- </div>
- <div class="carousel-item" data-bs-interval="2000">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
- </div>
- </div>
- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleInterval" data-bs-slide="prev">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Previous</span>
- </button>
- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleInterval" data-bs-slide="next">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Next</span>
- </button>
-</div>
-{{< /example >}}
-
-### Disable touch swiping
-
-Carousels support swiping left/right on touchscreen devices to move between slides. This can be disabled using the `data-bs-touch` attribute. The example below also does not include the `data-bs-ride` attribute so it doesn't autoplay.
-
-{{< example >}}
-<div id="carouselExampleControlsNoTouching" class="carousel slide" data-bs-touch="false">
- <div class="carousel-inner">
- <div class="carousel-item active">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
- </div>
- </div>
- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleControlsNoTouching" data-bs-slide="prev">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Previous</span>
- </button>
- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleControlsNoTouching" data-bs-slide="next">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Next</span>
- </button>
-</div>
-{{< /example >}}
-
-## Dark variant
-
-Add `.carousel-dark` to the `.carousel` for darker controls, indicators, and captions. Controls have been inverted from their default white fill with the `filter` CSS property. Captions and controls have additional Sass variables that customize the `color` and `background-color`.
-
-{{< example >}}
-<div id="carouselExampleDark" class="carousel carousel-dark slide" data-bs-ride="carousel">
- <div class="carousel-indicators">
- <button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
- <button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="1" aria-label="Slide 2"></button>
- <button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="2" aria-label="Slide 3"></button>
- </div>
- <div class="carousel-inner">
- <div class="carousel-item active" data-bs-interval="10000">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#aaa" background="#f5f5f5" text="First slide" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>First slide label</h5>
- <p>Some representative placeholder content for the first slide.</p>
- </div>
- </div>
- <div class="carousel-item" data-bs-interval="2000">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#bbb" background="#eee" text="Second slide" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>Second slide label</h5>
- <p>Some representative placeholder content for the second slide.</p>
- </div>
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#999" background="#e5e5e5" text="Third slide" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>Third slide label</h5>
- <p>Some representative placeholder content for the third slide.</p>
- </div>
- </div>
- </div>
- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="prev">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Previous</span>
- </button>
- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="next">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Next</span>
- </button>
-</div>
-{{< /example >}}
-
-## Custom transition
-
-The transition duration of `.carousel-item` can be changed with the `$carousel-transition-duration` Sass variable before compiling or custom styles if you're using the compiled CSS. If multiple transitions are applied, make sure the transform transition is defined first (e.g. `transition: transform 2s ease, opacity .5s ease-out`).
-
-## Sass
-
-### Variables
-
-Variables for all carousels:
-
-{{< scss-docs name="carousel-variables" file="scss/_variables.scss" >}}
-
-Variables for the [dark carousel](#dark-variant):
-
-{{< scss-docs name="carousel-dark-variables" file="scss/_variables.scss" >}}
-
-## Usage
-
-### Via data attributes
-
-Use data attributes to easily control the position of the carousel. `data-bs-slide` accepts the keywords `prev` or `next`, which alters the slide position relative to its current position. Alternatively, use `data-bs-slide-to` to pass a raw slide index to the carousel `data-bs-slide-to="2"`, which shifts the slide position to a particular index beginning with `0`.
-
-The `data-bs-ride="carousel"` attribute is used to mark a carousel as animating starting at page load. If you don't use `data-bs-ride="carousel"` to initialize your carousel, you have to initialize it yourself. **It cannot be used in combination with (redundant and unnecessary) explicit JavaScript initialization of the same carousel.**
-
-### Via JavaScript
-
-Call carousel manually with:
-
-```js
-const carousel = new bootstrap.Carousel('#myCarousel')
-```
-
-### Options
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-{{< bs-table >}}
-| Name | Type | Default | Description |
-| --- | --- | --- | --- |
-| `interval` | number | `5000` | The amount of time to delay between automatically cycling an item. |
-| `keyboard` | boolean | `true` | Whether the carousel should react to keyboard events. |
-| `pause` | string, boolean | `"hover"` | If set to `"hover"`, pauses the cycling of the carousel on `mouseenter` and resumes the cycling of the carousel on `mouseleave`. If set to `false`, hovering over the carousel won't pause it. On touch-enabled devices, when set to `"hover"`, cycling will pause on `touchend` (once the user finished interacting with the carousel) for two intervals, before automatically resuming. This is in addition to the mouse behavior. |
-| `ride` | string, boolean | `false` | If set to `true`, autoplays the carousel after the user manually cycles the first item. If set to `"carousel"`, autoplays the carousel on load. |
-| `touch` | boolean | `true` | Whether the carousel should support left/right swipe interactions on touchscreen devices. |
-| `wrap` | boolean | `true` | Whether the carousel should cycle continuously or have hard stops. |
-{{< /bs-table >}}
-
-### Methods
-
-{{< callout danger >}}
-{{< partial "callout-danger-async-methods.md" >}}
-{{< /callout >}}
-
-You can create a carousel instance with the carousel constructor, for example, to initialize with additional options and start cycling through items:
-
-```js
-const myCarouselElement = document.querySelector('#myCarousel')
-const carousel = new bootstrap.Carousel(myCarouselElement, {
- interval: 2000,
- wrap: false
-})
-```
-
-{{< bs-table >}}
-| Method | Description |
-| --- | --- |
-| `cycle` | Cycles through the carousel items from left to right. |
-| `dispose` | Destroys an element's carousel. (Removes stored data on the DOM element) |
-| `getInstance` | Static method which allows you to get the carousel instance associated to a DOM element, you can use it like this: `bootstrap.Carousel.getInstance(element)`. |
-| `getOrCreateInstance` | Static method which returns a carousel instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Carousel.getOrCreateInstance(element)`. |
-| `next` | Cycles to the next item. **Returns to the caller before the next item has been shown** (e.g., before the `slid.bs.carousel` event occurs). |
-| `nextWhenVisible` | Don't cycle carousel to next when the page isn't visible or the carousel or its parent isn't visible. **Returns to the caller before the target item has been shown**. |
-| `pause` | Stops the carousel from cycling through items. |
-| `prev` | Cycles to the previous item. **Returns to the caller before the previous item has been shown** (e.g., before the `slid.bs.carousel` event occurs). |
-| `to` | Cycles the carousel to a particular frame (0 based, similar to an array). **Returns to the caller before the target item has been shown** (e.g., before the `slid.bs.carousel` event occurs). |
-{{< /bs-table >}}
-
-### Events
-
-Bootstrap's carousel class exposes two events for hooking into carousel functionality. Both events have the following additional properties:
-
-- `direction`: The direction in which the carousel is sliding (either `"left"` or `"right"`).
-- `relatedTarget`: The DOM element that is being slid into place as the active item.
-- `from`: The index of the current item
-- `to`: The index of the next item
-
-All carousel events are fired at the carousel itself (i.e. at the `<div class="carousel">`).
-
-{{< bs-table >}}
-| Event type | Description |
-| --- | --- |
-| `slid.bs.carousel` | Fired when the carousel has completed its slide transition. |
-| `slide.bs.carousel` | Fires immediately when the `slide` instance method is invoked. |
-{{< /bs-table >}}
-
-```js
-const myCarousel = document.getElementById('myCarousel')
-
-myCarousel.addEventListener('slide.bs.carousel', event => {
- // do something...
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/close-button.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/close-button.md
deleted file mode 100644
index f4a3ed071..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/close-button.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-layout: docs
-title: Close button
-description: A generic close button for dismissing content like modals and alerts.
-group: components
-toc: true
----
-
-## Example
-
-Provide an option to dismiss or close a component with `.btn-close`. Default styling is limited, but highly customizable. Modify the Sass variables to replace the default `background-image`. **Be sure to include text for screen readers**, as we've done with `aria-label`.
-
-{{< example >}}
-<button type="button" class="btn-close" aria-label="Close"></button>
-{{< /example >}}
-
-## Disabled state
-
-Disabled close buttons change their `opacity`. We've also applied `pointer-events: none` and `user-select: none` to preventing hover and active states from triggering.
-
-{{< example >}}
-<button type="button" class="btn-close" disabled aria-label="Close"></button>
-{{< /example >}}
-
-## White variant
-
-Change the default `.btn-close` to be white with the `.btn-close-white` class. This class uses the `filter` property to invert the `background-image`.
-
-{{< example class="bg-dark" >}}
-<button type="button" class="btn-close btn-close-white" aria-label="Close"></button>
-<button type="button" class="btn-close btn-close-white" disabled aria-label="Close"></button>
-{{< /example >}}
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="close-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/collapse.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/collapse.md
deleted file mode 100644
index 21be901c0..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/collapse.md
+++ /dev/null
@@ -1,198 +0,0 @@
----
-layout: docs
-title: Collapse
-description: Toggle the visibility of content across your project with a few classes and our JavaScript plugins.
-group: components
-toc: true
----
-
-## How it works
-
-The collapse JavaScript plugin is used to show and hide content. Buttons or anchors are used as triggers that are mapped to specific elements you toggle. Collapsing an element will animate the `height` from its current value to `0`. Given how CSS handles animations, you cannot use `padding` on a `.collapse` element. Instead, use the class as an independent wrapping element.
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-## Example
-
-Click the buttons below to show and hide another element via class changes:
-
-- `.collapse` hides content
-- `.collapsing` is applied during transitions
-- `.collapse.show` shows content
-
-Generally, we recommend using a button with the `data-bs-target` attribute. While not recommended from a semantic point of view, you can also use a link with the `href` attribute (and a `role="button"`). In both cases, the `data-bs-toggle="collapse"` is required.
-
-{{< example >}}
-<p>
- <a class="btn btn-primary" data-bs-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
- Link with href
- </a>
- <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
- Button with data-bs-target
- </button>
-</p>
-<div class="collapse" id="collapseExample">
- <div class="card card-body">
- Some placeholder content for the collapse component. This panel is hidden by default but revealed when the user activates the relevant trigger.
- </div>
-</div>
-{{< /example >}}
-
-## Horizontal
-
-The collapse plugin also supports horizontal collapsing. Add the `.collapse-horizontal` modifier class to transition the `width` instead of `height` and set a `width` on the immediate child element. Feel free to write your own custom Sass, use inline styles, or use our [width utilities]({{< docsref "/utilities/sizing" >}}).
-
-{{< callout info >}}
-Please note that while the example below has a `min-height` set to avoid excessive repaints in our docs, this is not explicitly required. **Only the `width` on the child element is required.**
-{{< /callout >}}
-
-{{< example >}}
-<p>
- <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWidthExample" aria-expanded="false" aria-controls="collapseWidthExample">
- Toggle width collapse
- </button>
-</p>
-<div style="min-height: 120px;">
- <div class="collapse collapse-horizontal" id="collapseWidthExample">
- <div class="card card-body" style="width: 300px;">
- This is some placeholder content for a horizontal collapse. It's hidden by default and shown when triggered.
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Multiple targets
-
-A `<button>` or `<a>` can show and hide multiple elements by referencing them with a selector in its `href` or `data-bs-target` attribute.
-Multiple `<button>` or `<a>` can show and hide an element if they each reference it with their `href` or `data-bs-target` attribute
-
-{{< example >}}
-<p>
- <a class="btn btn-primary" data-bs-toggle="collapse" href="#multiCollapseExample1" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Toggle first element</a>
- <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#multiCollapseExample2" aria-expanded="false" aria-controls="multiCollapseExample2">Toggle second element</button>
- <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target=".multi-collapse" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Toggle both elements</button>
-</p>
-<div class="row">
- <div class="col">
- <div class="collapse multi-collapse" id="multiCollapseExample1">
- <div class="card card-body">
- Some placeholder content for the first collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
- </div>
- </div>
- </div>
- <div class="col">
- <div class="collapse multi-collapse" id="multiCollapseExample2">
- <div class="card card-body">
- Some placeholder content for the second collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Accessibility
-
-Be sure to add `aria-expanded` to the control element. This attribute explicitly conveys the current state of the collapsible element tied to the control to screen readers and similar assistive technologies. If the collapsible element is closed by default, the attribute on the control element should have a value of `aria-expanded="false"`. If you've set the collapsible element to be open by default using the `show` class, set `aria-expanded="true"` on the control instead. The plugin will automatically toggle this attribute on the control based on whether or not the collapsible element has been opened or closed (via JavaScript, or because the user triggered another control element also tied to the same collapsible element). If the control element's HTML element is not a button (e.g., an `<a>` or `<div>`), the attribute `role="button"` should be added to the element.
-
-If your control element is targeting a single collapsible element – i.e. the `data-bs-target` attribute is pointing to an `id` selector – you should add the `aria-controls` attribute to the control element, containing the `id` of the collapsible element. Modern screen readers and similar assistive technologies make use of this attribute to provide users with additional shortcuts to navigate directly to the collapsible element itself.
-
-Note that Bootstrap's current implementation does not cover the various *optional* keyboard interactions described in the [ARIA Authoring Practices Guide accordion pattern](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/) - you will need to include these yourself with custom JavaScript.
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="collapse-transition" file="scss/_variables.scss" >}}
-
-### Classes
-
-Collapse transition classes can be found in `scss/_transitions.scss` as these are shared across multiple components (collapse and accordion).
-
-{{< scss-docs name="collapse-classes" file="scss/_transitions.scss" >}}
-
-## Usage
-
-The collapse plugin utilizes a few classes to handle the heavy lifting:
-
-- `.collapse` hides the content
-- `.collapse.show` shows the content
-- `.collapsing` is added when the transition starts, and removed when it finishes
-
-These classes can be found in `_transitions.scss`.
-
-### Via data attributes
-
-Just add `data-bs-toggle="collapse"` and a `data-bs-target` to the element to automatically assign control of one or more collapsible elements. The `data-bs-target` attribute accepts a CSS selector to apply the collapse to. Be sure to add the class `collapse` to the collapsible element. If you'd like it to default open, add the additional class `show`.
-
-To add accordion-like group management to a collapsible area, add the data attribute `data-bs-parent="#selector"`. Refer to the [accordion page]({{< docsref "/components/accordion" >}}) for more information.
-
-### Via JavaScript
-
-Enable manually with:
-
-```js
-const collapseElementList = document.querySelectorAll('.collapse')
-const collapseList = [...collapseElementList].map(collapseEl => new bootstrap.Collapse(collapseEl))
-```
-
-### Options
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-{{< bs-table "table" >}}
-| Name | Type | Default | Description |
-| --- | --- | --- | --- |
-`parent` | selector, DOM element | `null` | If parent is provided, then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior - this is dependent on the `card` class). The attribute has to be set on the target collapsible area. |
-`toggle` | boolean | `true` | Toggles the collapsible element on invocation. |
-{{< /bs-table >}}
-
-### Methods
-
-{{< callout danger >}}
-{{< partial "callout-danger-async-methods.md" >}}
-{{< /callout >}}
-
-Activates your content as a collapsible element. Accepts an optional options `object`.
-
-You can create a collapse instance with the constructor, for example:
-
-```js
-const bsCollapse = new bootstrap.Collapse('#myCollapse', {
- toggle: false
-})
-```
-
-{{< bs-table >}}
-| Method | Description |
-| --- | --- |
-| `dispose` | Destroys an element's collapse. (Removes stored data on the DOM element) |
-| `getInstance` | Static method which allows you to get the collapse instance associated to a DOM element, you can use it like this: `bootstrap.Collapse.getInstance(element)`. |
-| `getOrCreateInstance` | Static method which returns a collapse instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Collapse.getOrCreateInstance(element)`. |
-| `hide` | Hides a collapsible element. **Returns to the caller before the collapsible element has actually been hidden** (e.g., before the `hidden.bs.collapse` event occurs). |
-| `show` | Shows a collapsible element. **Returns to the caller before the collapsible element has actually been shown** (e.g., before the `shown.bs.collapse` event occurs). |
-| `toggle` | Toggles a collapsible element to shown or hidden. **Returns to the caller before the collapsible element has actually been shown or hidden** (i.e. before the `shown.bs.collapse` or `hidden.bs.collapse` event occurs). |
-{{< /bs-table >}}
-
-### Events
-
-Bootstrap's collapse class exposes a few events for hooking into collapse functionality.
-
-{{< bs-table >}}
-| Event type | Description |
-| --- | --- |
-| `hide.bs.collapse` | This event is fired immediately when the `hide` method has been called. |
-| `hidden.bs.collapse` | This event is fired when a collapse element has been hidden from the user (will wait for CSS transitions to complete). |
-| `show.bs.collapse` | This event fires immediately when the `show` instance method is called. |
-| `shown.bs.collapse` | This event is fired when a collapse element has been made visible to the user (will wait for CSS transitions to complete). |
-{{< /bs-table >}}
-
-```js
-const myCollapsible = document.getElementById('myCollapsible')
-myCollapsible.addEventListener('hidden.bs.collapse', event => {
- // do something...
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/dropdowns.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/dropdowns.md
deleted file mode 100644
index b58922775..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/dropdowns.md
+++ /dev/null
@@ -1,1124 +0,0 @@
----
-layout: docs
-title: Dropdowns
-description: Toggle contextual overlays for displaying lists of links and more with the Bootstrap dropdown plugin.
-group: components
-toc: true
----
-
-## Overview
-
-Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They're made interactive with the included Bootstrap dropdown JavaScript plugin. They're toggled by clicking, not by hovering; this is [an intentional design decision](https://markdotto.com/2012/02/27/bootstrap-explained-dropdowns/).
-
-Dropdowns are built on a third party library, [Popper](https://popper.js.org/), which provides dynamic positioning and viewport detection. Be sure to include [popper.min.js]({{< param "cdn.popper" >}}) before Bootstrap's JavaScript or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper. Popper isn't used to position dropdowns in navbars though as dynamic positioning isn't required.
-
-## Accessibility
-
-The [<abbr title="Web Accessibility Initiative">WAI</abbr> <abbr title="Accessible Rich Internet Applications">ARIA</abbr>](https://www.w3.org/TR/wai-aria/) standard defines an actual [`role="menu"` widget](https://www.w3.org/TR/wai-aria/#menu), but this is specific to application-like menus which trigger actions or functions. <abbr title="Accessible Rich Internet Applications">ARIA</abbr> menus can only contain menu items, checkbox menu items, radio button menu items, radio button groups, and sub-menus.
-
-Bootstrap's dropdowns, on the other hand, are designed to be generic and applicable to a variety of situations and markup structures. For instance, it is possible to create dropdowns that contain additional inputs and form controls, such as search fields or login forms. For this reason, Bootstrap does not expect (nor automatically add) any of the `role` and `aria-` attributes required for true <abbr title="Accessible Rich Internet Applications">ARIA</abbr> menus. Authors will have to include these more specific attributes themselves.
-
-However, Bootstrap does add built-in support for most standard keyboard menu interactions, such as the ability to move through individual `.dropdown-item` elements using the cursor keys and close the menu with the <kbd>ESC</kbd> key.
-
-## Examples
-
-Wrap the dropdown's toggle (your button or link) and the dropdown menu within `.dropdown`, or another element that declares `position: relative;`. Dropdowns can be triggered from `<a>` or `<button>` elements to better fit your potential needs. The examples shown here use semantic `<ul>` elements where appropriate, but custom markup is supported.
-
-### Single button
-
-Any single `.btn` can be turned into a dropdown toggle with some markup changes. Here's how you can put them to work with either `<button>` elements:
-
-{{< example >}}
-<div class="dropdown">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown button
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
-</div>
-{{< /example >}}
-
-And with `<a>` elements:
-
-{{< example >}}
-<div class="dropdown">
- <a class="btn btn-secondary dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown link
- </a>
-
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
-</div>
-{{< /example >}}
-
-The best part is you can do this with any button variant, too:
-
-<div class="bd-example">
- <div class="btn-group">
- <button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Primary</button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Secondary</button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-success dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Success</button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-info dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Info</button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-warning dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Warning</button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-danger dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Danger</button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
-</div>
-
-```html
-<!-- Example single danger button -->
-<div class="btn-group">
- <button type="button" class="btn btn-danger dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Action
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
-</div>
-```
-
-### Split button
-
-Similarly, create split button dropdowns with virtually the same markup as single button dropdowns, but with the addition of `.dropdown-toggle-split` for proper spacing around the dropdown caret.
-
-We use this extra class to reduce the horizontal `padding` on either side of the caret by 25% and remove the `margin-left` that's added for regular button dropdowns. Those extra changes keep the caret centered in the split button and provide a more appropriately sized hit area next to the main button.
-
-<div class="bd-example">
- <div class="btn-group">
- <button type="button" class="btn btn-primary">Primary</button>
- <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-secondary">Secondary</button>
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-success">Success</button>
- <button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-info">Info</button>
- <button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-warning">Warning</button>
- <button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-danger">Danger</button>
- <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div><!-- /btn-group -->
-</div>
-
-```html
-<!-- Example split danger button -->
-<div class="btn-group">
- <button type="button" class="btn btn-danger">Action</button>
- <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
-</div>
-```
-
-## Sizing
-
-Button dropdowns work with buttons of all sizes, including default and split dropdown buttons.
-
-<div class="bd-example">
- <div class="btn-group">
- <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Large button
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- <div class="btn-group">
- <button type="button" class="btn btn-lg btn-secondary">Large split button</button>
- <button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
-</div>
-
-```html
-<!-- Large button groups (default and split) -->
-<div class="btn-group">
- <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Large button
- </button>
- <ul class="dropdown-menu">
- ...
- </ul>
-</div>
-<div class="btn-group">
- <button class="btn btn-secondary btn-lg" type="button">
- Large split button
- </button>
- <button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- ...
- </ul>
-</div>
-```
-
-<div class="bd-example">
- <div class="btn-group">
- <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Small button
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- <div class="btn-group">
- <button type="button" class="btn btn-sm btn-secondary">Small split button</button>
- <button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
-</div>
-
-```html
-<div class="btn-group">
- <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Small button
- </button>
- <ul class="dropdown-menu">
- ...
- </ul>
-</div>
-<div class="btn-group">
- <button class="btn btn-secondary btn-sm" type="button">
- Small split button
- </button>
- <button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- ...
- </ul>
-</div>
-```
-
-## Dark dropdowns
-
-Opt into darker dropdowns to match a dark navbar or custom style by adding `.dropdown-menu-dark` onto an existing `.dropdown-menu`. No changes are required to the dropdown items.
-
-{{< example >}}
-<div class="dropdown">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown button
- </button>
- <ul class="dropdown-menu dropdown-menu-dark">
- <li><a class="dropdown-item active" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
-</div>
-{{< /example >}}
-
-And putting it to use in a navbar:
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDarkDropdown" aria-controls="navbarNavDarkDropdown" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarNavDarkDropdown">
- <ul class="navbar-nav">
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </a>
- <ul class="dropdown-menu dropdown-menu-dark">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-## Directions
-
-{{< callout info >}}
-#### RTL
-Directions are mirrored when using Bootstrap in RTL, meaning `.dropstart` will appear on the right side.
-{{< /callout >}}
-
-### Centered
-
-Make the dropdown menu centered below the toggle with `.dropdown-center` on the parent element.
-
-{{< example >}}
-<div class="dropdown-center">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Centered dropdown
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Action two</a></li>
- <li><a class="dropdown-item" href="#">Action three</a></li>
- </ul>
-</div>
-{{< /example >}}
-
-### Dropup
-
-Trigger dropdown menus above elements by adding `.dropup` to the parent element.
-
-<div class="bd-example">
- <div class="btn-group dropup">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Dropup
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- <div class="btn-group dropup">
- <button type="button" class="btn btn-secondary">
- Split dropup
- </button>
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
-</div>
-
-```html
-<!-- Default dropup button -->
-<div class="btn-group dropup">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Dropup
- </button>
- <ul class="dropdown-menu">
- <!-- Dropdown menu links -->
- </ul>
-</div>
-
-<!-- Split dropup button -->
-<div class="btn-group dropup">
- <button type="button" class="btn btn-secondary">
- Split dropup
- </button>
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <!-- Dropdown menu links -->
- </ul>
-</div>
-```
-
-### Dropup centered
-
-Make the dropup menu centered above the toggle with `.dropup-center` on the parent element.
-
-{{< example >}}
-<div class="dropup-center dropup">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Centered dropup
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Action two</a></li>
- <li><a class="dropdown-item" href="#">Action three</a></li>
- </ul>
-</div>
-{{< /example >}}
-
-### Dropend
-
-Trigger dropdown menus at the right of the elements by adding `.dropend` to the parent element.
-
-<div class="bd-example">
- <div class="btn-group dropend">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Dropend
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- <div class="btn-group dropend">
- <button type="button" class="btn btn-secondary">
- Split dropend
- </button>
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropend</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
-</div>
-
-```html
-<!-- Default dropend button -->
-<div class="btn-group dropend">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Dropend
- </button>
- <ul class="dropdown-menu">
- <!-- Dropdown menu links -->
- </ul>
-</div>
-
-<!-- Split dropend button -->
-<div class="btn-group dropend">
- <button type="button" class="btn btn-secondary">
- Split dropend
- </button>
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropend</span>
- </button>
- <ul class="dropdown-menu">
- <!-- Dropdown menu links -->
- </ul>
-</div>
-```
-
-### Dropstart
-
-Trigger dropdown menus at the left of the elements by adding `.dropstart` to the parent element.
-
-<div class="bd-example">
- <div class="btn-group dropstart">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Dropstart
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- <div class="btn-group dropstart">
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropstart</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- <button type="button" class="btn btn-secondary">
- Split dropstart
- </button>
- </div>
-</div>
-
-```html
-<!-- Default dropstart button -->
-<div class="btn-group dropstart">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Dropstart
- </button>
- <ul class="dropdown-menu">
- <!-- Dropdown menu links -->
- </ul>
-</div>
-
-<!-- Split dropstart button -->
-<div class="btn-group dropstart">
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropstart</span>
- </button>
- <ul class="dropdown-menu">
- <!-- Dropdown menu links -->
- </ul>
- <button type="button" class="btn btn-secondary">
- Split dropstart
- </button>
-</div>
-```
-
-## Menu items
-
-You can use `<a>` or `<button>` elements as dropdown items.
-
-{{< example >}}
-<div class="dropdown">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </button>
- <ul class="dropdown-menu">
- <li><button class="dropdown-item" type="button">Action</button></li>
- <li><button class="dropdown-item" type="button">Another action</button></li>
- <li><button class="dropdown-item" type="button">Something else here</button></li>
- </ul>
-</div>
-{{< /example >}}
-
-You can also create non-interactive dropdown items with `.dropdown-item-text`. Feel free to style further with custom CSS or text utilities.
-
-{{< example >}}
-<ul class="dropdown-menu">
- <li><span class="dropdown-item-text">Dropdown item text</span></li>
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
-</ul>
-{{< /example >}}
-
-### Active
-
-Add `.active` to items in the dropdown to **style them as active**. To convey the active state to assistive technologies, use the `aria-current` attribute — using the `page` value for the current page, or `true` for the current item in a set.
-
-{{< example >}}
-<ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Regular link</a></li>
- <li><a class="dropdown-item active" href="#" aria-current="true">Active link</a></li>
- <li><a class="dropdown-item" href="#">Another link</a></li>
-</ul>
-{{< /example >}}
-
-### Disabled
-
-Add `.disabled` to items in the dropdown to **style them as disabled**.
-
-{{< example >}}
-<ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Regular link</a></li>
- <li><a class="dropdown-item disabled">Disabled link</a></li>
- <li><a class="dropdown-item" href="#">Another link</a></li>
-</ul>
-{{< /example >}}
-
-## Menu alignment
-
-By default, a dropdown menu is automatically positioned 100% from the top and along the left side of its parent. You can change this with the directional `.drop*` classes, but you can also control them with additional modifier classes.
-
-Add `.dropdown-menu-end` to a `.dropdown-menu` to right align the dropdown menu. Directions are mirrored when using Bootstrap in RTL, meaning `.dropdown-menu-end` will appear on the left side.
-
-{{< callout info >}}
-**Heads up!** Dropdowns are positioned thanks to Popper except when they are contained in a navbar.
-{{< /callout >}}
-
-{{< example >}}
-<div class="btn-group">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Right-aligned menu example
- </button>
- <ul class="dropdown-menu dropdown-menu-end">
- <li><button class="dropdown-item" type="button">Action</button></li>
- <li><button class="dropdown-item" type="button">Another action</button></li>
- <li><button class="dropdown-item" type="button">Something else here</button></li>
- </ul>
-</div>
-{{< /example >}}
-
-### Responsive alignment
-
-If you want to use responsive alignment, disable dynamic positioning by adding the `data-bs-display="static"` attribute and use the responsive variation classes.
-
-To align **right** the dropdown menu with the given breakpoint or larger, add `.dropdown-menu{-sm|-md|-lg|-xl|-xxl}-end`.
-
-{{< example >}}
-<div class="btn-group">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
- Left-aligned but right aligned when large screen
- </button>
- <ul class="dropdown-menu dropdown-menu-lg-end">
- <li><button class="dropdown-item" type="button">Action</button></li>
- <li><button class="dropdown-item" type="button">Another action</button></li>
- <li><button class="dropdown-item" type="button">Something else here</button></li>
- </ul>
-</div>
-{{< /example >}}
-
-To align **left** the dropdown menu with the given breakpoint or larger, add `.dropdown-menu-end` and `.dropdown-menu{-sm|-md|-lg|-xl|-xxl}-start`.
-
-{{< example >}}
-<div class="btn-group">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
- Right-aligned but left aligned when large screen
- </button>
- <ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start">
- <li><button class="dropdown-item" type="button">Action</button></li>
- <li><button class="dropdown-item" type="button">Another action</button></li>
- <li><button class="dropdown-item" type="button">Something else here</button></li>
- </ul>
-</div>
-{{< /example >}}
-
-Note that you don't need to add a `data-bs-display="static"` attribute to dropdown buttons in navbars, since Popper isn't used in navbars.
-
-### Alignment options
-
-Taking most of the options shown above, here's a small kitchen sink demo of various dropdown alignment options in one place.
-
-{{< example >}}
-<div class="btn-group">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-
-<div class="btn-group">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Right-aligned menu
- </button>
- <ul class="dropdown-menu dropdown-menu-end">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-
-<div class="btn-group">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
- Left-aligned, right-aligned lg
- </button>
- <ul class="dropdown-menu dropdown-menu-lg-end">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-
-<div class="btn-group">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
- Right-aligned, left-aligned lg
- </button>
- <ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-
-<div class="btn-group dropstart">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Dropstart
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-
-<div class="btn-group dropend">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Dropend
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-
-<div class="btn-group dropup">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
- Dropup
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-{{< /example >}}
-
-## Menu content
-
-### Headers
-
-Add a header to label sections of actions in any dropdown menu.
-
-{{< example >}}
-<ul class="dropdown-menu">
- <li><h6 class="dropdown-header">Dropdown header</h6></li>
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
-</ul>
-{{< /example >}}
-
-### Dividers
-
-Separate groups of related menu items with a divider.
-
-{{< example >}}
-<ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
-</ul>
-{{< /example >}}
-
-### Text
-
-Place any freeform text within a dropdown menu with text and use [spacing utilities]({{< docsref "/utilities/spacing" >}}). Note that you'll likely need additional sizing styles to constrain the menu width.
-
-{{< example >}}
-<div class="dropdown-menu p-4 text-muted" style="max-width: 200px;">
- <p>
- Some example text that's free-flowing within the dropdown menu.
- </p>
- <p class="mb-0">
- And this is more example text.
- </p>
-</div>
-{{< /example >}}
-
-### Forms
-
-Put a form within a dropdown menu, or make it into a dropdown menu, and use [margin or padding utilities]({{< docsref "/utilities/spacing" >}}) to give it the negative space you require.
-
-{{< example >}}
-<div class="dropdown-menu">
- <form class="px-4 py-3">
- <div class="mb-3">
- <label for="exampleDropdownFormEmail1" class="form-label">Email address</label>
- <input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="email@example.com">
- </div>
- <div class="mb-3">
- <label for="exampleDropdownFormPassword1" class="form-label">Password</label>
- <input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
- </div>
- <div class="mb-3">
- <div class="form-check">
- <input type="checkbox" class="form-check-input" id="dropdownCheck">
- <label class="form-check-label" for="dropdownCheck">
- Remember me
- </label>
- </div>
- </div>
- <button type="submit" class="btn btn-primary">Sign in</button>
- </form>
- <div class="dropdown-divider"></div>
- <a class="dropdown-item" href="#">New around here? Sign up</a>
- <a class="dropdown-item" href="#">Forgot password?</a>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="dropdown">
- <button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" data-bs-auto-close="outside">
- Dropdown form
- </button>
- <form class="dropdown-menu p-4">
- <div class="mb-3">
- <label for="exampleDropdownFormEmail2" class="form-label">Email address</label>
- <input type="email" class="form-control" id="exampleDropdownFormEmail2" placeholder="email@example.com">
- </div>
- <div class="mb-3">
- <label for="exampleDropdownFormPassword2" class="form-label">Password</label>
- <input type="password" class="form-control" id="exampleDropdownFormPassword2" placeholder="Password">
- </div>
- <div class="mb-3">
- <div class="form-check">
- <input type="checkbox" class="form-check-input" id="dropdownCheck2">
- <label class="form-check-label" for="dropdownCheck2">
- Remember me
- </label>
- </div>
- </div>
- <button type="submit" class="btn btn-primary">Sign in</button>
- </form>
-</div>
-{{< /example >}}
-
-## Dropdown options
-
-Use `data-bs-offset` or `data-bs-reference` to change the location of the dropdown.
-
-{{< example >}}
-<div class="d-flex">
- <div class="dropdown me-1">
- <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" data-bs-offset="10,20">
- Offset
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </div>
- <div class="btn-group">
- <button type="button" class="btn btn-secondary">Reference</button>
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false" data-bs-reference="parent">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
-</div>
-{{< /example >}}
-
-### Auto close behavior
-
-By default, the dropdown menu is closed when clicking inside or outside the dropdown menu. You can use the `autoClose` option to change this behavior of the dropdown.
-
-{{< example >}}
-<div class="btn-group">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="true" aria-expanded="false">
- Default dropdown
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-
-<div class="btn-group">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="inside" aria-expanded="false">
- Clickable outside
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-
-<div class="btn-group">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
- Clickable inside
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-
-<div class="btn-group">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="false" aria-expanded="false">
- Manual close
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- <li><a class="dropdown-item" href="#">Menu item</a></li>
- </ul>
-</div>
-{{< /example >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, dropdowns now use local CSS variables on `.dropdown-menu` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="dropdown-css-vars" file="scss/_dropdown.scss" >}}
-
-Customization through CSS variables can be seen on the `.dropdown-menu-dark` class where we override specific values without adding duplicate CSS selectors.
-
-{{< scss-docs name="dropdown-dark-css-vars" file="scss/_dropdown.scss" >}}
-
-### Sass variables
-
-Variables for all dropdowns:
-
-{{< scss-docs name="dropdown-variables" file="scss/_variables.scss" >}}
-
-Variables for the [dark dropdown](#dark-dropdowns):
-
-{{< scss-docs name="dropdown-dark-variables" file="scss/_variables.scss" >}}
-
-Variables for the CSS-based carets that indicate a dropdown's interactivity:
-
-{{< scss-docs name="caret-variables" file="scss/_variables.scss" >}}
-
-### Mixins
-
-Mixins are used to generate the CSS-based carets and can be found in `scss/mixins/_caret.scss`.
-
-{{< scss-docs name="caret-mixins" file="scss/mixins/_caret.scss" >}}
-
-## Usage
-
-Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the `.show` class on the parent `.dropdown-menu`. The `data-bs-toggle="dropdown"` attribute is relied on for closing dropdown menus at an application level, so it's a good idea to always use it.
-
-{{< callout info >}}
-On touch-enabled devices, opening a dropdown adds empty `mouseover` handlers to the immediate children of the `<body>` element. This admittedly ugly hack is necessary to work around a [quirk in iOS' event delegation](https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html), which would otherwise prevent a tap anywhere outside of the dropdown from triggering the code that closes the dropdown. Once the dropdown is closed, these additional empty `mouseover` handlers are removed.
-{{< /callout >}}
-
-### Via data attributes
-
-Add `data-bs-toggle="dropdown"` to a link or button to toggle a dropdown.
-
-```html
-<div class="dropdown">
- <button type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown trigger
- </button>
- <ul class="dropdown-menu">
- ...
- </ul>
-</div>
-```
-
-### Via JavaScript
-
-Call the dropdowns via JavaScript:
-
-```js
-const dropdownElementList = document.querySelectorAll('.dropdown-toggle')
-const dropdownList = [...dropdownElementList].map(dropdownToggleEl => new bootstrap.Dropdown(dropdownToggleEl))
-```
-
-{{< callout info >}}
-##### `data-bs-toggle="dropdown"` still required
-
-Regardless of whether you call your dropdown via JavaScript or instead use the data-api, `data-bs-toggle="dropdown"` is always required to be present on the dropdown's trigger element.
-{{< /callout >}}
-
-### Options
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-{{< bs-table "table" >}}
-| Name | Type | Default | Description |
-| --- | --- | --- | --- |
-| `autoClose` | boolean, string | `true` | Configure the auto close behavior of the dropdown: <ul class="my-2"><li>`true` - the dropdown will be closed by clicking outside or inside the dropdown menu.</li><li>`false` - the dropdown will be closed by clicking the toggle button and manually calling `hide` or `toggle` method. (Also will not be closed by pressing <kbd>esc</kbd> key)</li><li>`'inside'` - the dropdown will be closed (only) by clicking inside the dropdown menu.</li> <li>`'outside'` - the dropdown will be closed (only) by clicking outside the dropdown menu.</li></ul> Note: the dropdown can always be closed with the <kbd>ESC</kbd> key. |
-| `boundary` | string, element | `'clippingParents'` | Overflow constraint boundary of the dropdown menu (applies only to Popper's preventOverflow modifier). By default it's `clippingParents` and can accept an HTMLElement reference (via JavaScript only). For more information refer to Popper's [detectOverflow docs](https://popper.js.org/docs/v2/utils/detect-overflow/#boundary). |
-| `display` | string | `'dynamic'` | By default, we use Popper for dynamic positioning. Disable this with `static`. |
-| `offset` | array, string, function | `[0, 2]` | Offset of the dropdown relative to its target. You can pass a string in data attributes with comma separated values like: `data-bs-offset="10,20"`. When a function is used to determine the offset, it is called with an object containing the popper placement, the reference, and popper rects as its first argument. The triggering element DOM node is passed as the second argument. The function must return an array with two numbers: [skidding](https://popper.js.org/docs/v2/modifiers/offset/#skidding-1), [distance](https://popper.js.org/docs/v2/modifiers/offset/#distance-1). For more information refer to Popper's [offset docs](https://popper.js.org/docs/v2/modifiers/offset/#options). |
-| `popperConfig` | null, object, function | `null` | To change Bootstrap's default Popper config, see [Popper's configuration](https://popper.js.org/docs/v2/constructors/#options). When a function is used to create the Popper configuration, it's called with an object that contains the Bootstrap's default Popper configuration. It helps you use and merge the default with your own configuration. The function must return a configuration object for Popper. |
-| `reference` | string, element, object | `'toggle'` | Reference element of the dropdown menu. Accepts the values of `'toggle'`, `'parent'`, an HTMLElement reference or an object providing `getBoundingClientRect`. For more information refer to Popper's [constructor docs](https://popper.js.org/docs/v2/constructors/#createpopper) and [virtual element docs](https://popper.js.org/docs/v2/virtual-elements/). |
-{{< /bs-table >}}
-
-#### Using function with `popperConfig`
-
-```js
-const dropdown = new bootstrap.Dropdown(element, {
- popperConfig(defaultBsPopperConfig) {
- // const newPopperConfig = {...}
- // use defaultBsPopperConfig if needed...
- // return newPopperConfig
- }
-})
-```
-
-### Methods
-
-{{< bs-table >}}
-| Method | Description |
-| --- | --- |
-| `dispose` | Destroys an element's dropdown. (Removes stored data on the DOM element) |
-| `getInstance` | Static method which allows you to get the dropdown instance associated to a DOM element, you can use it like this: `bootstrap.Dropdown.getInstance(element)`. |
-| `getOrCreateInstance` | Static method which returns a dropdown instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Dropdown.getOrCreateInstance(element)`. |
-| `hide` | Hides the dropdown menu of a given navbar or tabbed navigation. |
-| `show` | Shows the dropdown menu of a given navbar or tabbed navigation. |
-| `toggle` | Toggles the dropdown menu of a given navbar or tabbed navigation. |
-| `update` | Updates the position of an element's dropdown. |
-{{< /bs-table >}}
-
-### Events
-
-All dropdown events are fired at the toggling element and then bubbled up. So you can also add event listeners on the `.dropdown-menu`'s parent element. `hide.bs.dropdown` and `hidden.bs.dropdown` events have a `clickEvent` property (only when the original Event type is `click`) that contains an Event Object for the click event.
-
-{{< bs-table >}}
-| Event type | Description |
-| --- | --- |
-| `hide.bs.dropdown` | Fires immediately when the `hide` instance method has been called. |
-| `hidden.bs.dropdown` | Fired when the dropdown has finished being hidden from the user and CSS transitions have completed. |
-| `show.bs.dropdown` | Fires immediately when the `show` instance method is called. |
-| `shown.bs.dropdown` | Fired when the dropdown has been made visible to the user and CSS transitions have completed. |
-{{< /bs-table >}}
-
-```js
-const myDropdown = document.getElementById('myDropdown')
-myDropdown.addEventListener('show.bs.dropdown', event => {
- // do something...
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/list-group.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/list-group.md
deleted file mode 100644
index 7804c7406..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/list-group.md
+++ /dev/null
@@ -1,494 +0,0 @@
----
-layout: docs
-title: List group
-description: List groups are a flexible and powerful component for displaying a series of content. Modify and extend them to support just about any content within.
-group: components
-toc: true
----
-
-## Basic example
-
-The most basic list group is an unordered list with list items and the proper classes. Build upon it with the options that follow, or with your own CSS as needed.
-
-{{< example >}}
-<ul class="list-group">
- <li class="list-group-item">An item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- <li class="list-group-item">A fourth item</li>
- <li class="list-group-item">And a fifth one</li>
-</ul>
-{{< /example >}}
-
-## Active items
-
-Add `.active` to a `.list-group-item` to indicate the current active selection.
-
-{{< example >}}
-<ul class="list-group">
- <li class="list-group-item active" aria-current="true">An active item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- <li class="list-group-item">A fourth item</li>
- <li class="list-group-item">And a fifth one</li>
-</ul>
-{{< /example >}}
-
-## Disabled items
-
-Add `.disabled` to a `.list-group-item` to make it _appear_ disabled. Note that some elements with `.disabled` will also require custom JavaScript to fully disable their click events (e.g., links).
-
-{{< example >}}
-<ul class="list-group">
- <li class="list-group-item disabled" aria-disabled="true">A disabled item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- <li class="list-group-item">A fourth item</li>
- <li class="list-group-item">And a fifth one</li>
-</ul>
-{{< /example >}}
-
-## Links and buttons
-
-Use `<a>`s or `<button>`s to create _actionable_ list group items with hover, disabled, and active states by adding `.list-group-item-action`. We separate these pseudo-classes to ensure list groups made of non-interactive elements (like `<li>`s or `<div>`s) don't provide a click or tap affordance.
-
-Be sure to **not use the standard `.btn` classes here**.
-
-{{< example >}}
-<div class="list-group">
- <a href="#" class="list-group-item list-group-item-action active" aria-current="true">
- The current link item
- </a>
- <a href="#" class="list-group-item list-group-item-action">A second link item</a>
- <a href="#" class="list-group-item list-group-item-action">A third link item</a>
- <a href="#" class="list-group-item list-group-item-action">A fourth link item</a>
- <a class="list-group-item list-group-item-action disabled">A disabled link item</a>
-</div>
-{{< /example >}}
-
-With `<button>`s, you can also make use of the `disabled` attribute instead of the `.disabled` class. Sadly, `<a>`s don't support the disabled attribute.
-
-{{< example >}}
-<div class="list-group">
- <button type="button" class="list-group-item list-group-item-action active" aria-current="true">
- The current button
- </button>
- <button type="button" class="list-group-item list-group-item-action">A second button item</button>
- <button type="button" class="list-group-item list-group-item-action">A third button item</button>
- <button type="button" class="list-group-item list-group-item-action">A fourth button item</button>
- <button type="button" class="list-group-item list-group-item-action" disabled>A disabled button item</button>
-</div>
-{{< /example >}}
-
-## Flush
-
-Add `.list-group-flush` to remove some borders and rounded corners to render list group items edge-to-edge in a parent container (e.g., cards).
-
-{{< example >}}
-<ul class="list-group list-group-flush">
- <li class="list-group-item">An item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- <li class="list-group-item">A fourth item</li>
- <li class="list-group-item">And a fifth one</li>
-</ul>
-{{< /example >}}
-
-## Numbered
-
-Add the `.list-group-numbered` modifier class (and optionally use an `<ol>` element) to opt into numbered list group items. Numbers are generated via CSS (as opposed to a `<ol>`s default browser styling) for better placement inside list group items and to allow for better customization.
-
-Numbers are generated by `counter-reset` on the `<ol>`, and then styled and placed with a `::before` pseudo-element on the `<li>` with `counter-increment` and `content`.
-
-{{< example >}}
-<ol class="list-group list-group-numbered">
- <li class="list-group-item">A list item</li>
- <li class="list-group-item">A list item</li>
- <li class="list-group-item">A list item</li>
-</ol>
-{{< /example >}}
-
-These work great with custom content as well.
-
-{{< example >}}
-<ol class="list-group list-group-numbered">
- <li class="list-group-item d-flex justify-content-between align-items-start">
- <div class="ms-2 me-auto">
- <div class="fw-bold">Subheading</div>
- Content for list item
- </div>
- <span class="badge bg-primary rounded-pill">14</span>
- </li>
- <li class="list-group-item d-flex justify-content-between align-items-start">
- <div class="ms-2 me-auto">
- <div class="fw-bold">Subheading</div>
- Content for list item
- </div>
- <span class="badge bg-primary rounded-pill">14</span>
- </li>
- <li class="list-group-item d-flex justify-content-between align-items-start">
- <div class="ms-2 me-auto">
- <div class="fw-bold">Subheading</div>
- Content for list item
- </div>
- <span class="badge bg-primary rounded-pill">14</span>
- </li>
-</ol>
-{{< /example >}}
-
-## Horizontal
-
-Add `.list-group-horizontal` to change the layout of list group items from vertical to horizontal across all breakpoints. Alternatively, choose a responsive variant `.list-group-horizontal-{sm|md|lg|xl|xxl}` to make a list group horizontal starting at that breakpoint's `min-width`. Currently **horizontal list groups cannot be combined with flush list groups.**
-
-**ProTip:** Want equal-width list group items when horizontal? Add `.flex-fill` to each list group item.
-
-{{< example >}}
-{{< list-group.inline >}}
-{{- range $.Site.Data.breakpoints }}
-<ul class="list-group list-group-horizontal{{ .abbr }}">
- <li class="list-group-item">An item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
-</ul>
-{{- end -}}
-{{< /list-group.inline >}}
-{{< /example >}}
-
-## Contextual classes
-
-Use contextual classes to style list items with a stateful background and color.
-
-{{< example >}}
-<ul class="list-group">
- <li class="list-group-item">A simple default list group item</li>
-{{< list.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
- <li class="list-group-item list-group-item-{{ .name }}">A simple {{ .name }} list group item</li>
-{{- end -}}
-{{< /list.inline >}}
-</ul>
-{{< /example >}}
-
-Contextual classes also work with `.list-group-item-action`. Note the addition of the hover styles here not present in the previous example. Also supported is the `.active` state; apply it to indicate an active selection on a contextual list group item.
-
-{{< example >}}
-<div class="list-group">
- <a href="#" class="list-group-item list-group-item-action">A simple default list group item</a>
-{{< list.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
- <a href="#" class="list-group-item list-group-item-action list-group-item-{{ .name }}">A simple {{ .name }} list group item</a>
-{{- end -}}
-{{< /list.inline >}}
-</div>
-{{< /example >}}
-
-{{< callout info >}}
-{{< partial "callout-warning-color-assistive-technologies.md" >}}
-{{< /callout >}}
-
-## With badges
-
-Add badges to any list group item to show unread counts, activity, and more with the help of some [utilities]({{< docsref "/utilities/flex" >}}).
-
-{{< example >}}
-<ul class="list-group">
- <li class="list-group-item d-flex justify-content-between align-items-center">
- A list item
- <span class="badge bg-primary rounded-pill">14</span>
- </li>
- <li class="list-group-item d-flex justify-content-between align-items-center">
- A second list item
- <span class="badge bg-primary rounded-pill">2</span>
- </li>
- <li class="list-group-item d-flex justify-content-between align-items-center">
- A third list item
- <span class="badge bg-primary rounded-pill">1</span>
- </li>
-</ul>
-{{< /example >}}
-
-## Custom content
-
-Add nearly any HTML within, even for linked list groups like the one below, with the help of [flexbox utilities]({{< docsref "/utilities/flex" >}}).
-
-{{< example >}}
-<div class="list-group">
- <a href="#" class="list-group-item list-group-item-action active" aria-current="true">
- <div class="d-flex w-100 justify-content-between">
- <h5 class="mb-1">List group item heading</h5>
- <small>3 days ago</small>
- </div>
- <p class="mb-1">Some placeholder content in a paragraph.</p>
- <small>And some small print.</small>
- </a>
- <a href="#" class="list-group-item list-group-item-action">
- <div class="d-flex w-100 justify-content-between">
- <h5 class="mb-1">List group item heading</h5>
- <small class="text-muted">3 days ago</small>
- </div>
- <p class="mb-1">Some placeholder content in a paragraph.</p>
- <small class="text-muted">And some muted small print.</small>
- </a>
- <a href="#" class="list-group-item list-group-item-action">
- <div class="d-flex w-100 justify-content-between">
- <h5 class="mb-1">List group item heading</h5>
- <small class="text-muted">3 days ago</small>
- </div>
- <p class="mb-1">Some placeholder content in a paragraph.</p>
- <small class="text-muted">And some muted small print.</small>
- </a>
-</div>
-{{< /example >}}
-
-## Checkboxes and radios
-
-Place Bootstrap's checkboxes and radios within list group items and customize as needed. You can use them without `<label>`s, but please remember to include an `aria-label` attribute and value for accessibility.
-
-{{< example >}}
-<ul class="list-group">
- <li class="list-group-item">
- <input class="form-check-input me-1" type="checkbox" value="" id="firstCheckbox">
- <label class="form-check-label" for="firstCheckbox">First checkbox</label>
- </li>
- <li class="list-group-item">
- <input class="form-check-input me-1" type="checkbox" value="" id="secondCheckbox">
- <label class="form-check-label" for="secondCheckbox">Second checkbox</label>
- </li>
- <li class="list-group-item">
- <input class="form-check-input me-1" type="checkbox" value="" id="thirdCheckbox">
- <label class="form-check-label" for="thirdCheckbox">Third checkbox</label>
- </li>
-</ul>
-{{< /example >}}
-
-{{< example >}}
-<ul class="list-group">
- <li class="list-group-item">
- <input class="form-check-input me-1" type="radio" name="listGroupRadio" value="" id="firstRadio" checked>
- <label class="form-check-label" for="firstRadio">First radio</label>
- </li>
- <li class="list-group-item">
- <input class="form-check-input me-1" type="radio" name="listGroupRadio" value="" id="secondRadio">
- <label class="form-check-label" for="secondRadio">Second radio</label>
- </li>
- <li class="list-group-item">
- <input class="form-check-input me-1" type="radio" name="listGroupRadio" value="" id="thirdRadio">
- <label class="form-check-label" for="thirdRadio">Third radio</label>
- </li>
-</ul>
-{{< /example >}}
-
-You can use `.stretched-link` on `<label>`s to make the whole list group item clickable.
-
-{{< example >}}
-<ul class="list-group">
- <li class="list-group-item">
- <input class="form-check-input me-1" type="checkbox" value="" id="firstCheckboxStretched">
- <label class="form-check-label stretched-link" for="firstCheckboxStretched">First checkbox</label>
- </li>
- <li class="list-group-item">
- <input class="form-check-input me-1" type="checkbox" value="" id="secondCheckboxStretched">
- <label class="form-check-label stretched-link" for="secondCheckboxStretched">Second checkbox</label>
- </li>
- <li class="list-group-item">
- <input class="form-check-input me-1" type="checkbox" value="" id="thirdCheckboxStretched">
- <label class="form-check-label stretched-link" for="thirdCheckboxStretched">Third checkbox</label>
- </li>
-</ul>
-{{< /example >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, list groups now use local CSS variables on `.list-group` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="list-group-css-vars" file="scss/_list-group.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="list-group-variables" file="scss/_variables.scss" >}}
-
-### Mixins
-
-Used in combination with `$theme-colors` to generate the [contextual variant classes](#contextual-classes) for `.list-group-item`s.
-
-{{< scss-docs name="list-group-mixin" file="scss/mixins/_list-group.scss" >}}
-
-### Loop
-
-Loop that generates the modifier classes with the `list-group-item-variant()` mixin.
-
-{{< scss-docs name="list-group-modifiers" file="scss/_list-group.scss" >}}
-
-## JavaScript behavior
-
-Use the tab JavaScript plugin—include it individually or through the compiled `bootstrap.js` file—to extend our list group to create tabbable panes of local content.
-
-<div class="bd-example" role="tabpanel">
- <div class="row">
- <div class="col-4">
- <div class="list-group" id="list-tab" role="tablist">
- <a class="list-group-item list-group-item-action active" id="list-home-list" data-bs-toggle="tab" href="#list-home" role="tab" aria-controls="list-home">Home</a>
- <a class="list-group-item list-group-item-action" id="list-profile-list" data-bs-toggle="tab" href="#list-profile" role="tab" aria-controls="list-profile">Profile</a>
- <a class="list-group-item list-group-item-action" id="list-messages-list" data-bs-toggle="tab" href="#list-messages" role="tab" aria-controls="list-messages">Messages</a>
- <a class="list-group-item list-group-item-action" id="list-settings-list" data-bs-toggle="tab" href="#list-settings" role="tab" aria-controls="list-settings">Settings</a>
- </div>
- </div>
- <div class="col-8">
- <div class="tab-content" id="nav-tabContent">
- <div class="tab-pane fade show active" id="list-home" role="tabpanel" aria-labelledby="list-home-list">
- <p>Some placeholder content in a paragraph relating to "Home". And some more content, used here just to pad out and fill this tab panel. In production, you would obviously have more real content here. And not just text. It could be anything, really. Text, images, forms.</p>
- </div>
- <div class="tab-pane fade" id="list-profile" role="tabpanel" aria-labelledby="list-profile-list">
- <p>Some placeholder content in a paragraph relating to "Profile". And some more content, used here just to pad out and fill this tab panel. In production, you would obviously have more real content here. And not just text. It could be anything, really. Text, images, forms.</p>
- </div>
- <div class="tab-pane fade" id="list-messages" role="tabpanel" aria-labelledby="list-messages-list">
- <p>Some placeholder content in a paragraph relating to "Messages". And some more content, used here just to pad out and fill this tab panel. In production, you would obviously have more real content here. And not just text. It could be anything, really. Text, images, forms.</p>
- </div>
- <div class="tab-pane fade" id="list-settings" role="tabpanel" aria-labelledby="list-settings-list">
- <p>Some placeholder content in a paragraph relating to "Settings". And some more content, used here just to pad out and fill this tab panel. In production, you would obviously have more real content here. And not just text. It could be anything, really. Text, images, forms.</p>
- </div>
- </div>
- </div>
- </div>
-</div>
-
-```html
-<div class="row">
- <div class="col-4">
- <div class="list-group" id="list-tab" role="tablist">
- <a class="list-group-item list-group-item-action active" id="list-home-list" data-bs-toggle="list" href="#list-home" role="tab" aria-controls="list-home">Home</a>
- <a class="list-group-item list-group-item-action" id="list-profile-list" data-bs-toggle="list" href="#list-profile" role="tab" aria-controls="list-profile">Profile</a>
- <a class="list-group-item list-group-item-action" id="list-messages-list" data-bs-toggle="list" href="#list-messages" role="tab" aria-controls="list-messages">Messages</a>
- <a class="list-group-item list-group-item-action" id="list-settings-list" data-bs-toggle="list" href="#list-settings" role="tab" aria-controls="list-settings">Settings</a>
- </div>
- </div>
- <div class="col-8">
- <div class="tab-content" id="nav-tabContent">
- <div class="tab-pane fade show active" id="list-home" role="tabpanel" aria-labelledby="list-home-list">...</div>
- <div class="tab-pane fade" id="list-profile" role="tabpanel" aria-labelledby="list-profile-list">...</div>
- <div class="tab-pane fade" id="list-messages" role="tabpanel" aria-labelledby="list-messages-list">...</div>
- <div class="tab-pane fade" id="list-settings" role="tabpanel" aria-labelledby="list-settings-list">...</div>
- </div>
- </div>
-</div>
-```
-
-### Using data attributes
-
-You can activate a list group navigation without writing any JavaScript by simply specifying `data-bs-toggle="list"` or on an element. Use these data attributes on `.list-group-item`.
-
-```html
-<div role="tabpanel">
- <!-- List group -->
- <div class="list-group" id="myList" role="tablist">
- <a class="list-group-item list-group-item-action active" data-bs-toggle="list" href="#home" role="tab">Home</a>
- <a class="list-group-item list-group-item-action" data-bs-toggle="list" href="#profile" role="tab">Profile</a>
- <a class="list-group-item list-group-item-action" data-bs-toggle="list" href="#messages" role="tab">Messages</a>
- <a class="list-group-item list-group-item-action" data-bs-toggle="list" href="#settings" role="tab">Settings</a>
- </div>
-
- <!-- Tab panes -->
- <div class="tab-content">
- <div class="tab-pane active" id="home" role="tabpanel">...</div>
- <div class="tab-pane" id="profile" role="tabpanel">...</div>
- <div class="tab-pane" id="messages" role="tabpanel">...</div>
- <div class="tab-pane" id="settings" role="tabpanel">...</div>
- </div>
-</div>
-```
-
-### Via JavaScript
-
-Enable tabbable list item via JavaScript (each list item needs to be activated individually):
-
-```js
-const triggerTabList = document.querySelectorAll('#myTab a')
-triggerTabList.forEach(triggerEl => {
- const tabTrigger = new bootstrap.Tab(triggerEl)
-
- triggerEl.addEventListener('click', event => {
- event.preventDefault()
- tabTrigger.show()
- })
-})
-```
-
-You can activate individual list item in several ways:
-
-```js
-const triggerEl = document.querySelector('#myTab a[href="#profile"]')
-bootstrap.Tab.getInstance(triggerEl).show() // Select tab by name
-
-const triggerFirstTabEl = document.querySelector('#myTab li:first-child a')
-bootstrap.Tab.getInstance(triggerFirstTabEl).show() // Select first tab
-```
-
-### Fade effect
-
-To make tabs panel fade in, add `.fade` to each `.tab-pane`. The first tab pane must also have `.show` to make the initial content visible.
-
-```html
-<div class="tab-content">
- <div class="tab-pane fade show active" id="home" role="tabpanel">...</div>
- <div class="tab-pane fade" id="profile" role="tabpanel">...</div>
- <div class="tab-pane fade" id="messages" role="tabpanel">...</div>
- <div class="tab-pane fade" id="settings" role="tabpanel">...</div>
-</div>
-```
-
-### Methods
-
-{{< callout danger >}}
-{{< partial "callout-danger-async-methods.md" >}}
-{{< /callout >}}
-
-Activates your content as a tab element.
-
-You can create a tab instance with the constructor, for example:
-
-```js
-const bsTab = new bootstrap.Tab('#myTab')
-```
-
-{{< bs-table >}}
-| Method | Description |
-| --- | --- |
-| `dispose` | Destroys an element's tab. |
-| `getInstance` | Static method which allows you to get the tab instance associated with a DOM element, you can use it like this: `bootstrap.Tab.getInstance(element)`. |
-| `getOrCreateInstance` | Static method which returns a tab instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Tab.getOrCreateInstance(element)`. |
-| `show` | Selects the given tab and shows its associated pane. Any other tab that was previously selected becomes unselected and its associated pane is hidden. **Returns to the caller before the tab pane has actually been shown** (i.e. before the `shown.bs.tab` event occurs). |
-{{< /bs-table >}}
-
-### Events
-
-When showing a new tab, the events fire in the following order:
-
-1. `hide.bs.tab` (on the current active tab)
-2. `show.bs.tab` (on the to-be-shown tab)
-3. `hidden.bs.tab` (on the previous active tab, the same one as for the `hide.bs.tab` event)
-4. `shown.bs.tab` (on the newly-active just-shown tab, the same one as for the `show.bs.tab` event)
-
-If no tab was already active, then the `hide.bs.tab` and `hidden.bs.tab` events will not be fired.
-
-{{< bs-table >}}
-| Event type | Description |
-| --- | --- |
-| `hide.bs.tab` | This event fires when a new tab is to be shown (and thus the previous active tab is to be hidden). Use `event.target` and `event.relatedTarget` to target the current active tab and the new soon-to-be-active tab, respectively. |
-| `hidden.bs.tab` | This event fires after a new tab is shown (and thus the previous active tab is hidden). Use `event.target` and `event.relatedTarget` to target the previous active tab and the new active tab, respectively. |
-| `show.bs.tab` | This event fires on tab show, but before the new tab has been shown. Use `event.target` and `event.relatedTarget` to target the active tab and the previous active tab (if available) respectively. |
-| `shown.bs.tab` | This event fires on tab show after a tab has been shown. Use `event.target` and `event.relatedTarget` to target the active tab and the previous active tab (if available) respectively. |
-{{< /bs-table >}}
-
-```js
-const tabElms = document.querySelectorAll('a[data-bs-toggle="list"]')
-tabElms.forEach(tabElm => {
- tabElm.addEventListener('shown.bs.tab', event => {
- event.target // newly activated tab
- event.relatedTarget // previous active tab
- })
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/modal.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/modal.md
deleted file mode 100644
index ed31b7374..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/modal.md
+++ /dev/null
@@ -1,888 +0,0 @@
----
-layout: docs
-title: Modal
-description: Use Bootstrap's JavaScript modal plugin to add dialogs to your site for lightboxes, user notifications, or completely custom content.
-group: components
-toc: true
----
-
-## How it works
-
-Before getting started with Bootstrap's modal component, be sure to read the following as our menu options have recently changed.
-
-- Modals are built with HTML, CSS, and JavaScript. They're positioned over everything else in the document and remove scroll from the `<body>` so that modal content scrolls instead.
-- Clicking on the modal "backdrop" will automatically close the modal.
-- Bootstrap only supports one modal window at a time. Nested modals aren't supported as we believe them to be poor user experiences.
-- Modals use `position: fixed`, which can sometimes be a bit particular about its rendering. Whenever possible, place your modal HTML in a top-level position to avoid potential interference from other elements. You'll likely run into issues when nesting a `.modal` within another fixed element.
-- Once again, due to `position: fixed`, there are some caveats with using modals on mobile devices. [See our browser support docs]({{< docsref "/getting-started/browsers-devices#modals-and-dropdowns-on-mobile" >}}) for details.
-- Due to how HTML5 defines its semantics, [the `autofocus` HTML attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-autofocus) has no effect in Bootstrap modals. To achieve the same effect, use some custom JavaScript:
-
-```js
-const myModal = document.getElementById('myModal')
-const myInput = document.getElementById('myInput')
-
-myModal.addEventListener('shown.bs.modal', () => {
- myInput.focus()
-})
-```
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-Keep reading for demos and usage guidelines.
-
-## Examples
-
-### Modal components
-
-Below is a _static_ modal example (meaning its `position` and `display` have been overridden). Included are the modal header, modal body (required for `padding`), and modal footer (optional). We ask that you include modal headers with dismiss actions whenever possible, or provide another explicit dismiss action.
-
-<div class="bd-example bg-light">
- <div class="modal position-static d-block" tabindex="-1">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">Modal title</h5>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <p>Modal body text goes here.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
- </div>
-</div>
-
-```html
-<div class="modal" tabindex="-1">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h5 class="modal-title">Modal title</h5>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <p>Modal body text goes here.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-```
-
-{{< callout info >}}
-In the above static example, we use `<h5>`, to avoid issues with the heading hierarchy in the documentation page. Structurally, however, a modal dialog represents its own separate document/context, so the `.modal-title` should ideally be an `<h1>`. If necessary, you can use the [font size utilities]({{< docsref "/utilities/text#font-size" >}}) to control the heading's appearance. All the following live examples use this approach.
-{{< /callout >}}
-
-### Live demo
-
-Toggle a working modal demo by clicking the button below. It will slide down and fade in from the top of the page.
-
-<div class="modal fade" id="exampleModalLive" tabindex="-1" aria-labelledby="exampleModalLiveLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalLiveLabel">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <p>Woo-hoo, you're reading this text in a modal!</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="bd-example">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalLive">
- Launch demo modal
- </button>
-</div>
-
-```html
-<!-- Button trigger modal -->
-<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
- Launch demo modal
-</button>
-
-<!-- Modal -->
-<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalLabel">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-```
-
-### Static backdrop
-
-When backdrop is set to static, the modal will not close when clicking outside of it. Click the button below to try it.
-
-<div class="modal fade" id="staticBackdropLive" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLiveLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="staticBackdropLiveLabel">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <p>I will not close if you click outside of me. Don't even try to press escape key.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Understood</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="bd-example">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdropLive">
- Launch static backdrop modal
- </button>
-</div>
-
-```html
-<!-- Button trigger modal -->
-<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
- Launch static backdrop modal
-</button>
-
-<!-- Modal -->
-<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="staticBackdropLabel">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Understood</button>
- </div>
- </div>
- </div>
-</div>
-```
-
-### Scrolling long content
-
-When modals become too long for the user's viewport or device, they scroll independent of the page itself. Try the demo below to see what we mean.
-
-<div class="modal fade" id="exampleModalLong" tabindex="-1" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalLongTitle">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body" style="min-height: 1500px">
- <p>This is some placeholder content to show the scrolling behavior for modals. Instead of repeating the text the modal, we use an inline style set a minimum height, thereby extending the length of the overall modal and demonstrating the overflow scrolling. When content becomes longer than the height of the viewport, scrolling will move the modal as needed.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="bd-example">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalLong">
- Launch demo modal
- </button>
-</div>
-
-You can also create a scrollable modal that allows scroll the modal body by adding `.modal-dialog-scrollable` to `.modal-dialog`.
-
-<div class="modal fade" id="exampleModalScrollable" tabindex="-1" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
- <div class="modal-dialog modal-dialog-scrollable">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalScrollableTitle">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <p>This is some placeholder content to show the scrolling behavior for modals. We use repeated line breaks to demonstrate how content can exceed minimum inner height, thereby showing inner scrolling. When content becomes longer than the predefined max-height of modal, content will be cropped and scrollable within the modal.</p>
- <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
- <p>This content should appear at the bottom after you scroll.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="bd-example">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable">
- Launch demo modal
- </button>
-</div>
-
-```html
-<!-- Scrollable modal -->
-<div class="modal-dialog modal-dialog-scrollable">
- ...
-</div>
-```
-
-### Vertically centered
-
-Add `.modal-dialog-centered` to `.modal-dialog` to vertically center the modal.
-
-<div class="modal fade" id="exampleModalCenter" tabindex="-1" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
- <div class="modal-dialog modal-dialog-centered">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalCenterTitle">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <p>This is a vertically centered modal.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="modal fade" id="exampleModalCenteredScrollable" tabindex="-1" aria-labelledby="exampleModalCenteredScrollableTitle" aria-hidden="true">
- <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalCenteredScrollableTitle">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <p>This is some placeholder content to show a vertically centered modal. We've added some extra copy here to show how vertically centering the modal works when combined with scrollable modals. We also use some repeated line breaks to quickly extend the height of the content, thereby triggering the scrolling. When content becomes longer than the predefined max-height of modal, content will be cropped and scrollable within the modal.</p>
- <br><br><br><br><br><br><br><br><br><br>
- <p>Just like that.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="bd-example">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalCenter">
- Vertically centered modal
- </button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalCenteredScrollable">
- Vertically centered scrollable modal
- </button>
-</div>
-
-```html
-<!-- Vertically centered modal -->
-<div class="modal-dialog modal-dialog-centered">
- ...
-</div>
-
-<!-- Vertically centered scrollable modal -->
-<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
- ...
-</div>
-```
-
-### Tooltips and popovers
-
-[Tooltips]({{< docsref "/components/tooltips" >}}) and [popovers]({{< docsref "/components/popovers" >}}) can be placed within modals as needed. When modals are closed, any tooltips and popovers within are also automatically dismissed.
-
-<div class="modal fade" id="exampleModalPopovers" tabindex="-1" aria-labelledby="exampleModalPopoversLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalPopoversLabel">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <h2 class="fs-5">Popover in a modal</h2>
- <p>This <a href="#" role="button" class="btn btn-secondary" data-bs-toggle="popover" title="Popover title" data-bs-content="Popover body content is set in this attribute." data-bs-container="#exampleModalPopovers">button</a> triggers a popover on click.</p>
- <hr>
- <h2 class="fs-5">Tooltips in a modal</h2>
- <p><a href="#" data-bs-toggle="tooltip" title="Tooltip" data-bs-container="#exampleModalPopovers">This link</a> and <a href="#" data-bs-toggle="tooltip" title="Tooltip" data-bs-container="#exampleModalPopovers">that link</a> have tooltips on hover.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="bd-example">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalPopovers">
- Launch demo modal
- </button>
-</div>
-
-```html
-<div class="modal-body">
- <h2 class="fs-5">Popover in a modal</h2>
- <p>This <a href="#" role="button" class="btn btn-secondary" data-bs-toggle="popover" title="Popover title" data-bs-content="Popover body content is set in this attribute.">button</a> triggers a popover on click.</p>
- <hr>
- <h2 class="fs-5">Tooltips in a modal</h2>
- <p><a href="#" data-bs-toggle="tooltip" title="Tooltip">This link</a> and <a href="#" data-bs-toggle="tooltip" title="Tooltip">that link</a> have tooltips on hover.</p>
-</div>
-```
-
-### Using the grid
-
-Utilize the Bootstrap grid system within a modal by nesting `.container-fluid` within the `.modal-body`. Then, use the normal grid system classes as you would anywhere else.
-
-<div class="modal fade" id="gridSystemModal" tabindex="-1" aria-labelledby="gridModalLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="gridModalLabel">Grids in modals</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <div class="container-fluid bd-example-row">
- <div class="row">
- <div class="col-md-4">.col-md-4</div>
- <div class="col-md-4 ms-auto">.col-md-4 .ms-auto</div>
- </div>
- <div class="row">
- <div class="col-md-3 ms-auto">.col-md-3 .ms-auto</div>
- <div class="col-md-2 ms-auto">.col-md-2 .ms-auto</div>
- </div>
- <div class="row">
- <div class="col-md-6 ms-auto">.col-md-6 .ms-auto</div>
- </div>
- <div class="row">
- <div class="col-sm-9">
- Level 1: .col-sm-9
- <div class="row">
- <div class="col-8 col-sm-6">
- Level 2: .col-8 .col-sm-6
- </div>
- <div class="col-4 col-sm-6">
- Level 2: .col-4 .col-sm-6
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="bd-example">
-<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#gridSystemModal">
- Launch demo modal
-</button>
-</div>
-
-```html
-<div class="modal-body">
- <div class="container-fluid">
- <div class="row">
- <div class="col-md-4">.col-md-4</div>
- <div class="col-md-4 ms-auto">.col-md-4 .ms-auto</div>
- </div>
- <div class="row">
- <div class="col-md-3 ms-auto">.col-md-3 .ms-auto</div>
- <div class="col-md-2 ms-auto">.col-md-2 .ms-auto</div>
- </div>
- <div class="row">
- <div class="col-md-6 ms-auto">.col-md-6 .ms-auto</div>
- </div>
- <div class="row">
- <div class="col-sm-9">
- Level 1: .col-sm-9
- <div class="row">
- <div class="col-8 col-sm-6">
- Level 2: .col-8 .col-sm-6
- </div>
- <div class="col-4 col-sm-6">
- Level 2: .col-4 .col-sm-6
- </div>
- </div>
- </div>
- </div>
- </div>
-</div>
-```
-
-### Varying modal content
-
-Have a bunch of buttons that all trigger the same modal with slightly different contents? Use `event.relatedTarget` and [HTML `data-bs-*` attributes](https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes) to vary the contents of the modal depending on which button was clicked.
-
-Below is a live demo followed by example HTML and JavaScript. For more information, [read the modal events docs](#events) for details on `relatedTarget`.
-
-{{< example stackblitz_add_js="true" >}}
-<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@mdo">Open modal for @mdo</button>
-<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@fat">Open modal for @fat</button>
-<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@getbootstrap">Open modal for @getbootstrap</button>
-
-<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalLabel">New message</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <form>
- <div class="mb-3">
- <label for="recipient-name" class="col-form-label">Recipient:</label>
- <input type="text" class="form-control" id="recipient-name">
- </div>
- <div class="mb-3">
- <label for="message-text" class="col-form-label">Message:</label>
- <textarea class="form-control" id="message-text"></textarea>
- </div>
- </form>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Send message</button>
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-```js
-const exampleModal = document.getElementById('exampleModal')
-exampleModal.addEventListener('show.bs.modal', event => {
- // Button that triggered the modal
- const button = event.relatedTarget
- // Extract info from data-bs-* attributes
- const recipient = button.getAttribute('data-bs-whatever')
- // If necessary, you could initiate an AJAX request here
- // and then do the updating in a callback.
- //
- // Update the modal's content.
- const modalTitle = exampleModal.querySelector('.modal-title')
- const modalBodyInput = exampleModal.querySelector('.modal-body input')
-
- modalTitle.textContent = `New message to ${recipient}`
- modalBodyInput.value = recipient
-})
-```
-
-### Toggle between modals
-
-Toggle between multiple modals with some clever placement of the `data-bs-target` and `data-bs-toggle` attributes. For example, you could toggle a password reset modal from within an already open sign in modal. **Please note multiple modals cannot be open at the same time**—this method simply toggles between two separate modals.
-
-{{< example >}}
-<div class="modal fade" id="exampleModalToggle" aria-hidden="true" aria-labelledby="exampleModalToggleLabel" tabindex="-1">
- <div class="modal-dialog modal-dialog-centered">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalToggleLabel">Modal 1</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- Show a second modal and hide this one with the button below.
- </div>
- <div class="modal-footer">
- <button class="btn btn-primary" data-bs-target="#exampleModalToggle2" data-bs-toggle="modal">Open second modal</button>
- </div>
- </div>
- </div>
-</div>
-<div class="modal fade" id="exampleModalToggle2" aria-hidden="true" aria-labelledby="exampleModalToggleLabel2" tabindex="-1">
- <div class="modal-dialog modal-dialog-centered">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalToggleLabel2">Modal 2</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- Hide this modal and show the first with the button below.
- </div>
- <div class="modal-footer">
- <button class="btn btn-primary" data-bs-target="#exampleModalToggle" data-bs-toggle="modal">Back to first</button>
- </div>
- </div>
- </div>
-</div>
-<a class="btn btn-primary" data-bs-toggle="modal" href="#exampleModalToggle" role="button">Open first modal</a>
-{{< /example >}}
-
-### Change animation
-
-The `$modal-fade-transform` variable determines the transform state of `.modal-dialog` before the modal fade-in animation, the `$modal-show-transform` variable determines the transform of `.modal-dialog` at the end of the modal fade-in animation.
-
-If you want for example a zoom-in animation, you can set `$modal-fade-transform: scale(.8)`.
-
-### Remove animation
-
-For modals that simply appear rather than fade in to view, remove the `.fade` class from your modal markup.
-
-```html
-<div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
- ...
-</div>
-```
-
-### Dynamic heights
-
-If the height of a modal changes while it is open, you should call `myModal.handleUpdate()` to readjust the modal's position in case a scrollbar appears.
-
-### Accessibility
-
-Be sure to add `aria-labelledby="..."`, referencing the modal title, to `.modal`. Additionally, you may give a description of your modal dialog with `aria-describedby` on `.modal`. Note that you don't need to add `role="dialog"` since we already add it via JavaScript.
-
-### Embedding YouTube videos
-
-Embedding YouTube videos in modals requires additional JavaScript not in Bootstrap to automatically stop playback and more. [See this helpful Stack Overflow post](https://stackoverflow.com/questions/18622508/bootstrap-3-and-youtube-in-modal) for more information.
-
-## Optional sizes
-
-Modals have three optional sizes, available via modifier classes to be placed on a `.modal-dialog`. These sizes kick in at certain breakpoints to avoid horizontal scrollbars on narrower viewports.
-
-{{< bs-table "table" >}}
-| Size | Class | Modal max-width
-| --- | --- | --- |
-| Small | `.modal-sm` | `300px` |
-| Default | <span class="text-muted">None</span> | `500px` |
-| Large | `.modal-lg` | `800px` |
-| Extra large | `.modal-xl` | `1140px` |
-{{< /bs-table >}}
-
-Our default modal without modifier class constitutes the "medium" size modal.
-
-<div class="bd-example">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalXl">Extra large modal</button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalLg">Large modal</button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalSm">Small modal</button>
-</div>
-
-```html
-<div class="modal-dialog modal-xl">...</div>
-<div class="modal-dialog modal-lg">...</div>
-<div class="modal-dialog modal-sm">...</div>
-```
-
-<div class="modal fade" id="exampleModalXl" tabindex="-1" aria-labelledby="exampleModalXlLabel" aria-hidden="true">
- <div class="modal-dialog modal-xl">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalXlLabel">Extra large modal</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- </div>
- </div>
-</div>
-
-<div class="modal fade" id="exampleModalLg" tabindex="-1" aria-labelledby="exampleModalLgLabel" aria-hidden="true">
- <div class="modal-dialog modal-lg">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalLgLabel">Large modal</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- </div>
- </div>
-</div>
-
-<div class="modal fade" id="exampleModalSm" tabindex="-1" aria-labelledby="exampleModalSmLabel" aria-hidden="true">
- <div class="modal-dialog modal-sm">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalSmLabel">Small modal</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- </div>
- </div>
-</div>
-
-## Fullscreen Modal
-
-Another override is the option to pop up a modal that covers the user viewport, available via modifier classes that are placed on a `.modal-dialog`.
-
-{{< bs-table >}}
-| Class | Availability |
-| --- | --- | --- |
-| `.modal-fullscreen` | Always |
-| `.modal-fullscreen-sm-down` | `576px` |
-| `.modal-fullscreen-md-down` | `768px` |
-| `.modal-fullscreen-lg-down` | `992px` |
-| `.modal-fullscreen-xl-down` | `1200px` |
-| `.modal-fullscreen-xxl-down` | `1400px` |
-{{< /bs-table >}}
-
-<div class="bd-example">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreen">Full screen</button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenSm">Full screen below sm</button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenMd">Full screen below md</button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenLg">Full screen below lg</button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenXl">Full screen below xl</button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenXxl">Full screen below xxl</button>
-</div>
-
-```html
-<!-- Full screen modal -->
-<div class="modal-dialog modal-fullscreen-sm-down">
- ...
-</div>
-```
-
-<div class="modal fade" id="exampleModalFullscreen" tabindex="-1" aria-labelledby="exampleModalFullscreenLabel" aria-hidden="true">
- <div class="modal-dialog modal-fullscreen">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalFullscreenLabel">Full screen modal</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="modal fade" id="exampleModalFullscreenSm" tabindex="-1" aria-labelledby="exampleModalFullscreenSmLabel" aria-hidden="true">
- <div class="modal-dialog modal-fullscreen-sm-down">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalFullscreenSmLabel">Full screen below sm</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="modal fade" id="exampleModalFullscreenMd" tabindex="-1" aria-labelledby="exampleModalFullscreenMdLabel" aria-hidden="true">
- <div class="modal-dialog modal-fullscreen-md-down">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalFullscreenMdLabel">Full screen below md</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="modal fade" id="exampleModalFullscreenLg" tabindex="-1" aria-labelledby="exampleModalFullscreenLgLabel" aria-hidden="true">
- <div class="modal-dialog modal-fullscreen-lg-down">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalFullscreenLgLabel">Full screen below lg</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="modal fade" id="exampleModalFullscreenXl" tabindex="-1" aria-labelledby="exampleModalFullscreenXlLabel" aria-hidden="true">
- <div class="modal-dialog modal-fullscreen-xl-down">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalFullscreenXlLabel">Full screen below xl</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- </div>
- </div>
- </div>
-</div>
-
-<div class="modal fade" id="exampleModalFullscreenXxl" tabindex="-1" aria-labelledby="exampleModalFullscreenXxlLabel" aria-hidden="true">
- <div class="modal-dialog modal-fullscreen-xxl-down">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalFullscreenXxlLabel">Full screen below xxl</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- </div>
- </div>
- </div>
-</div>
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, modals now use local CSS variables on `.modal` and `.modal-backdrop` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="modal-css-vars" file="scss/_modal.scss" >}}
-
-{{< scss-docs name="modal-backdrop-css-vars" file="scss/_modal.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="modal-variables" file="scss/_variables.scss" >}}
-
-### Loop
-
-[Responsive fullscreen modals](#fullscreen-modal) are generated via the `$breakpoints` map and a loop in `scss/_modal.scss`.
-
-{{< scss-docs name="modal-fullscreen-loop" file="scss/_modal.scss" >}}
-
-## Usage
-
-The modal plugin toggles your hidden content on demand, via data attributes or JavaScript. It also overrides default scrolling behavior and generates a `.modal-backdrop` to provide a click area for dismissing shown modals when clicking outside the modal.
-
-### Via data attributes
-
-#### Toggle
-
-Activate a modal without writing JavaScript. Set `data-bs-toggle="modal"` on a controller element, like a button, along with a `data-bs-target="#foo"` or `href="#foo"` to target a specific modal to toggle.
-
-```html
-<button type="button" data-bs-toggle="modal" data-bs-target="#myModal">Launch modal</button>
-```
-
-#### Dismiss
-
-{{% js-dismiss "modal" %}}
-
-{{< callout warning >}}
-While both ways to dismiss a modal are supported, keep in mind that dismissing from outside a modal does not match the [ARIA Authoring Practices Guide dialog (modal) pattern](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/). Do this at your own risk.
-{{< /callout >}}
-
-### Via JavaScript
-
-Create a modal with a single line of JavaScript:
-
-```js
-const myModal = new bootstrap.Modal(document.getElementById('myModal'), options)
-// or
-const myModalAlternative = new bootstrap.Modal('#myModal', options)
-```
-
-### Options
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-{{< bs-table "table" >}}
-| Name | Type | Default | Description |
-| --- | --- | --- | --- |
-| `backdrop` | boolean, `'static'` | `true` | Includes a modal-backdrop element. Alternatively, specify `static` for a backdrop which doesn't close the modal when clicked. |
-| `focus` | boolean | `true` | Puts the focus on the modal when initialized. |
-| `keyboard` | boolean | `true` | Closes the modal when escape key is pressed. |
-{{< /bs-table >}}
-
-### Methods
-
-{{< callout danger >}}
-{{< partial "callout-danger-async-methods.md" >}}
-{{< /callout >}}
-
-#### Passing options
-
-Activates your content as a modal. Accepts an optional options `object`.
-
-```js
-const myModal = new bootstrap.Modal('#myModal', {
- keyboard: false
-})
-```
-
-{{< bs-table "table" >}}
-| Method | Description |
-| --- | --- |
-| `dispose` | Destroys an element's modal. (Removes stored data on the DOM element) |
-| `getInstance` | *Static* method which allows you to get the modal instance associated with a DOM element. |
-| `getOrCreateInstance` | *Static* method which allows you to get the modal instance associated with a DOM element, or create a new one in case it wasn't initialized. |
-| `handleUpdate` | Manually readjust the modal's position if the height of a modal changes while it is open (i.e. in case a scrollbar appears). |
-| `hide` | Manually hides a modal. **Returns to the caller before the modal has actually been hidden** (i.e. before the `hidden.bs.modal` event occurs). |
-| `show` | Manually opens a modal. **Returns to the caller before the modal has actually been shown** (i.e. before the `shown.bs.modal` event occurs). Also, you can pass a DOM element as an argument that can be received in the modal events (as the `relatedTarget` property). (i.e. `const modalToggle = document.getElementById('toggleMyModal'); myModal.show(modalToggle)`. |
-| `toggle` | Manually toggles a modal. **Returns to the caller before the modal has actually been shown or hidden** (i.e. before the `shown.bs.modal` or `hidden.bs.modal` event occurs). |
-{{< /bs-table >}}
-
-### Events
-
-Bootstrap's modal class exposes a few events for hooking into modal functionality. All modal events are fired at the modal itself (i.e. at the `<div class="modal">`).
-
-{{< bs-table >}}
-| Event | Description |
-| --- | --- |
-| `hide.bs.modal` | This event is fired immediately when the `hide` instance method has been called. |
-| `hidden.bs.modal` | This event is fired when the modal has finished being hidden from the user (will wait for CSS transitions to complete). |
-| `hidePrevented.bs.modal` | This event is fired when the modal is shown, its backdrop is `static` and a click outside of the modal is performed. The event is also fired when the escape key is pressed and the `keyboard` option is set to `false`. |
-| `show.bs.modal` | This event fires immediately when the `show` instance method is called. If caused by a click, the clicked element is available as the `relatedTarget` property of the event. |
-| `shown.bs.modal` | This event is fired when the modal has been made visible to the user (will wait for CSS transitions to complete). If caused by a click, the clicked element is available as the `relatedTarget` property of the event. |
-{{< /bs-table >}}
-
-```js
-const myModalEl = document.getElementById('myModal')
-myModalEl.addEventListener('hidden.bs.modal', event => {
- // do something...
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/navbar.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/navbar.md
deleted file mode 100644
index 7cbc4e2c1..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/navbar.md
+++ /dev/null
@@ -1,813 +0,0 @@
----
-layout: docs
-title: Navbar
-description: Documentation and examples for Bootstrap's powerful, responsive navigation header, the navbar. Includes support for branding, navigation, and more, including support for our collapse plugin.
-group: components
-toc: true
----
-
-## How it works
-
-Here's what you need to know before getting started with the navbar:
-
-- Navbars require a wrapping `.navbar` with `.navbar-expand{-sm|-md|-lg|-xl|-xxl}` for responsive collapsing and [color scheme](#color-schemes) classes.
-- Navbars and their contents are fluid by default. Change the [container](#containers) to limit their horizontal width in different ways.
-- Use our [spacing]({{< docsref "/utilities/spacing" >}}) and [flex]({{< docsref "/utilities/flex" >}}) utility classes for controlling spacing and alignment within navbars.
-- Navbars are responsive by default, but you can easily modify them to change that. Responsive behavior depends on our Collapse JavaScript plugin.
-- Ensure accessibility by using a `<nav>` element or, if using a more generic element such as a `<div>`, add a `role="navigation"` to every navbar to explicitly identify it as a landmark region for users of assistive technologies.
-- Indicate the current item by using `aria-current="page"` for the current page or `aria-current="true"` for the current item in a set.
-- **New in v5.2.0:** Navbars can be themed with CSS variables that are scoped to the `.navbar` base class. `.navbar-light` has been deprecated and `.navbar-dark` has been rewritten to override CSS variables instead of adding additional styles.
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-## Supported content
-
-Navbars come with built-in support for a handful of sub-components. Choose from the following as needed:
-
-- `.navbar-brand` for your company, product, or project name.
-- `.navbar-nav` for a full-height and lightweight navigation (including support for dropdowns).
-- `.navbar-toggler` for use with our collapse plugin and other [navigation toggling](#responsive-behaviors) behaviors.
-- Flex and spacing utilities for any form controls and actions.
-- `.navbar-text` for adding vertically centered strings of text.
-- `.collapse.navbar-collapse` for grouping and hiding navbar contents by a parent breakpoint.
-- Add an optional `.navbar-scroll` to set a `max-height` and [scroll expanded navbar content](#scrolling).
-
-Here's an example of all the sub-components included in a responsive light-themed navbar that automatically collapses at the `lg` (large) breakpoint.
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarSupportedContent">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-This example uses [background]({{< docsref "/utilities/background" >}}) (`bg-light`) and [spacing]({{< docsref "/utilities/spacing" >}}) (`me-auto`, `mb-2`, `mb-lg-0`, `me-2`) utility classes.
-
-### Brand
-
-The `.navbar-brand` can be applied to most elements, but an anchor works best, as some elements might require utility classes or custom styles.
-
-#### Text
-
-Add your text within an element with the `.navbar-brand` class.
-
-{{< example >}}
-<!-- As a link -->
-<nav class="navbar bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- </div>
-</nav>
-
-<!-- As a heading -->
-<nav class="navbar bg-light">
- <div class="container-fluid">
- <span class="navbar-brand mb-0 h1">Navbar</span>
- </div>
-</nav>
-{{< /example >}}
-
-#### Image
-
-You can replace the text within the `.navbar-brand` with an `<img>`.
-
-{{< example >}}
-<nav class="navbar bg-light">
- <div class="container">
- <a class="navbar-brand" href="#">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="Bootstrap" width="30" height="24">
- </a>
- </div>
-</nav>
-{{< /example >}}
-
-#### Image and text
-
-You can also make use of some additional utilities to add an image and text at the same time. Note the addition of `.d-inline-block` and `.align-text-top` on the `<img>`.
-
-{{< example >}}
-<nav class="navbar bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="Logo" width="30" height="24" class="d-inline-block align-text-top">
- Bootstrap
- </a>
- </div>
-</nav>
-{{< /example >}}
-
-### Nav
-
-Navbar navigation links build on our `.nav` options with their own modifier class and require the use of [toggler classes](#toggler) for proper responsive styling. **Navigation in navbars will also grow to occupy as much horizontal space as possible** to keep your navbar contents securely aligned.
-
-Add the `.active` class on `.nav-link` to indicate the current page.
-
-Please note that you should also add the `aria-current` attribute on the active `.nav-link`.
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarNav">
- <ul class="navbar-nav">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Features</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Pricing</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-And because we use classes for our navs, you can avoid the list-based approach entirely if you like.
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
- <div class="navbar-nav">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- <a class="nav-link" href="#">Features</a>
- <a class="nav-link" href="#">Pricing</a>
- <a class="nav-link disabled">Disabled</a>
- </div>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-You can also use dropdowns in your navbar. Dropdown menus require a wrapping element for positioning, so be sure to use separate and nested elements for `.nav-item` and `.nav-link` as shown below.
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarNavDropdown">
- <ul class="navbar-nav">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Features</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Pricing</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown link
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-### Forms
-
-Place various form controls and components within a navbar:
-
-{{< example >}}
-<nav class="navbar bg-light">
- <div class="container-fluid">
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
-</nav>
-{{< /example >}}
-
-Immediate child elements of `.navbar` use flex layout and will default to `justify-content: space-between`. Use additional [flex utilities]({{< docsref "/utilities/flex" >}}) as needed to adjust this behavior.
-
-{{< example >}}
-<nav class="navbar bg-light">
- <div class="container-fluid">
- <a class="navbar-brand">Navbar</a>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
-</nav>
-{{< /example >}}
-
-Input groups work, too. If your navbar is an entire form, or mostly a form, you can use the `<form>` element as the container and save some HTML.
-
-{{< example >}}
-<nav class="navbar bg-light">
- <form class="container-fluid">
- <div class="input-group">
- <span class="input-group-text" id="basic-addon1">@</span>
- <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
- </div>
- </form>
-</nav>
-{{< /example >}}
-
-Various buttons are supported as part of these navbar forms, too. This is also a great reminder that vertical alignment utilities can be used to align different sized elements.
-
-{{< example >}}
-<nav class="navbar bg-light">
- <form class="container-fluid justify-content-start">
- <button class="btn btn-outline-success me-2" type="button">Main button</button>
- <button class="btn btn-sm btn-outline-secondary" type="button">Smaller button</button>
- </form>
-</nav>
-{{< /example >}}
-
-### Text
-
-Navbars may contain bits of text with the help of `.navbar-text`. This class adjusts vertical alignment and horizontal spacing for strings of text.
-
-{{< example >}}
-<nav class="navbar bg-light">
- <div class="container-fluid">
- <span class="navbar-text">
- Navbar text with an inline element
- </span>
- </div>
-</nav>
-{{< /example >}}
-
-Mix and match with other components and utilities as needed.
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar w/ text</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarText">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Features</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Pricing</a>
- </li>
- </ul>
- <span class="navbar-text">
- Navbar text with an inline element
- </span>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-## Color schemes
-
-{{< callout warning >}}
-**New in v5.2.0:** Navbar theming is now powered by CSS variables and `.navbar-light` has been deprecated. CSS variables are applied to `.navbar`, defaulting to the "light" appearance, and can be overridden with `.navbar-dark`.
-{{< /callout >}}
-
-Navbar themes are easier than ever thanks to Bootstrap's combination of Sass and CSS variables. The default is our "light navbar" for use with light background colors, but you can also apply `.navbar-dark` for dark background colors. Then, customize with `.bg-*` utilities.
-
-<div class="bd-example">
- <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor01" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarColor01">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Features</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Pricing</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">About</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-light" type="submit">Search</button>
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-lg navbar-dark bg-primary">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor02" aria-controls="navbarColor02" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarColor02">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Features</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Pricing</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">About</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-light" type="submit">Search</button>
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-lg" style="background-color: #e3f2fd;">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor03" aria-controls="navbarColor03" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarColor03">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Features</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Pricing</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">About</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-primary" type="submit">Search</button>
- </form>
- </div>
- </div>
- </nav>
-</div>
-
-```html
-<nav class="navbar navbar-dark bg-dark">
- <!-- Navbar content -->
-</nav>
-
-<nav class="navbar navbar-dark bg-primary">
- <!-- Navbar content -->
-</nav>
-
-<nav class="navbar" style="background-color: #e3f2fd;">
- <!-- Navbar content -->
-</nav>
-```
-
-## Containers
-
-Although it's not required, you can wrap a navbar in a `.container` to center it on a page–though note that an inner container is still required. Or you can add a container inside the `.navbar` to only center the contents of a [fixed or static top navbar](#placement).
-
-{{< example >}}
-<div class="container">
- <nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- </div>
- </nav>
-</div>
-{{< /example >}}
-
-Use any of the responsive containers to change how wide the content in your navbar is presented.
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-md">
- <a class="navbar-brand" href="#">Navbar</a>
- </div>
-</nav>
-{{< /example >}}
-
-## Placement
-
-Use our [position utilities]({{< docsref "/utilities/position" >}}) to place navbars in non-static positions. Choose from fixed to the top, fixed to the bottom, stickied to the top (scrolls with the page until it reaches the top, then stays there), or stickied to the bottom (scrolls with the page until it reaches the bottom, then stays there).
-
-Fixed navbars use `position: fixed`, meaning they're pulled from the normal flow of the DOM and may require custom CSS (e.g., `padding-top` on the `<body>`) to prevent overlap with other elements.
-
-{{< example >}}
-<nav class="navbar bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Default</a>
- </div>
-</nav>
-{{< /example >}}
-
-{{< example >}}
-<nav class="navbar fixed-top bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Fixed top</a>
- </div>
-</nav>
-{{< /example >}}
-
-{{< example >}}
-<nav class="navbar fixed-bottom bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Fixed bottom</a>
- </div>
-</nav>
-{{< /example >}}
-
-{{< example >}}
-<nav class="navbar sticky-top bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Sticky top</a>
- </div>
-</nav>
-{{< /example >}}
-
-{{< example >}}
-<nav class="navbar sticky-bottom bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Sticky bottom</a>
- </div>
-</nav>
-{{< /example >}}
-
-## Scrolling
-
-Add `.navbar-nav-scroll` to a `.navbar-nav` (or other navbar sub-component) to enable vertical scrolling within the toggleable contents of a collapsed navbar. By default, scrolling kicks in at `75vh` (or 75% of the viewport height), but you can override that with the local CSS custom property `--bs-navbar-height` or custom styles. At larger viewports when the navbar is expanded, content will appear as it does in a default navbar.
-
-Please note that this behavior comes with a potential drawback of `overflow`—when setting `overflow-y: auto` (required to scroll the content here), `overflow-x` is the equivalent of `auto`, which will crop some horizontal content.
-
-Here's an example navbar using `.navbar-nav-scroll` with `style="--bs-scroll-height: 100px;"`, with some extra margin utilities for optimum spacing.
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar scroll</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarScroll" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarScroll">
- <ul class="navbar-nav me-auto my-2 my-lg-0 navbar-nav-scroll" style="--bs-scroll-height: 100px;">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Link
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Link</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-## Responsive behaviors
-
-Navbars can use `.navbar-toggler`, `.navbar-collapse`, and `.navbar-expand{-sm|-md|-lg|-xl|-xxl}` classes to determine when their content collapses behind a button. In combination with other utilities, you can easily choose when to show or hide particular elements.
-
-For navbars that never collapse, add the `.navbar-expand` class on the navbar. For navbars that always collapse, don't add any `.navbar-expand` class.
-
-### Toggler
-
-Navbar togglers are left-aligned by default, but should they follow a sibling element like a `.navbar-brand`, they'll automatically be aligned to the far right. Reversing your markup will reverse the placement of the toggler. Below are examples of different toggle styles.
-
-With no `.navbar-brand` shown at the smallest breakpoint:
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo01" aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarTogglerDemo01">
- <a class="navbar-brand" href="#">Hidden brand</a>
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-With a brand name shown on the left and toggler on the right:
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarTogglerDemo02">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-With a toggler on the left and brand name on the right:
-
-{{< example >}}
-<nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo03" aria-controls="navbarTogglerDemo03" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <a class="navbar-brand" href="#">Navbar</a>
- <div class="collapse navbar-collapse" id="navbarTogglerDemo03">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-### External content
-
-Sometimes you want to use the collapse plugin to trigger a container element for content that structurally sits outside of the `.navbar` . Because our plugin works on the `id` and `data-bs-target` matching, that's easily done!
-
-{{< example >}}
-<div class="collapse" id="navbarToggleExternalContent">
- <div class="bg-dark p-4">
- <h5 class="text-white h4">Collapsed content</h5>
- <span class="text-muted">Toggleable via the navbar brand.</span>
- </div>
-</div>
-<nav class="navbar navbar-dark bg-dark">
- <div class="container-fluid">
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- </div>
-</nav>
-{{< /example >}}
-
-When you do this, we recommend including additional JavaScript to move the focus programmatically to the container when it is opened. Otherwise, keyboard users and users of assistive technologies will likely have a hard time finding the newly revealed content - particularly if the container that was opened comes *before* the toggler in the document's structure. We also recommend making sure that the toggler has the `aria-controls` attribute, pointing to the `id` of the content container. In theory, this allows assistive technology users to jump directly from the toggler to the container it controls–but support for this is currently quite patchy.
-
-### Offcanvas
-
-Transform your expanding and collapsing navbar into an offcanvas drawer with the [offcanvas component]({{< docsref "/components/offcanvas" >}}). We extend both the offcanvas default styles and use our `.navbar-expand-*` classes to create a dynamic and flexible navigation sidebar.
-
-In the example below, to create an offcanvas navbar that is always collapsed across all breakpoints, omit the `.navbar-expand-*` class entirely.
-
-{{< example >}}
-<nav class="navbar bg-light fixed-top">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Offcanvas navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbar" aria-controls="offcanvasNavbar">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasNavbar" aria-labelledby="offcanvasNavbarLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasNavbarLabel">Offcanvas</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li>
- <hr class="dropdown-divider">
- </li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form class="d-flex mt-3" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-To create an offcanvas navbar that expands into a normal navbar at a specific breakpoint like `lg`, use `.navbar-expand-lg`.
-
-```html
-<nav class="navbar navbar-expand-lg bg-light fixed-top">
- <a class="navbar-brand" href="#">Offcanvas navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#navbarOffcanvasLg" aria-controls="navbarOffcanvasLg">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="offcanvas offcanvas-end" tabindex="-1" id="navbarOffcanvasLg" aria-labelledby="navbarOffcanvasLgLabel">
- ...
- </div>
-</nav>
-```
-
-When using offcanvas in a dark navbar, be aware that you may need to have a dark background on the offcanvas content to avoid the text becoming illegible. In the example below, we add `.navbar-dark` and `.bg-dark` to the `.navbar`, `.text-bg-dark` to the `.offcanvas`, `.dropdown-menu-dark` to `.dropdown-menu`, and `.btn-close-white` to `.btn-close` for proper styling with a dark offcanvas.
-
-{{< example >}}
-<nav class="navbar navbar-dark bg-dark fixed-top">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Offcanvas dark navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasDarkNavbar" aria-controls="offcanvasDarkNavbar">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="offcanvas offcanvas-end text-bg-dark" tabindex="-1" id="offcanvasDarkNavbar" aria-labelledby="offcanvasDarkNavbarLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasDarkNavbarLabel">Dark offcanvas</h5>
- <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </a>
- <ul class="dropdown-menu dropdown-menu-dark">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li>
- <hr class="dropdown-divider">
- </li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form class="d-flex mt-3" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-success" type="submit">Search</button>
- </form>
- </div>
- </div>
- </div>
-</nav>
-{{< /example >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, navbars now use local CSS variables on `.navbar` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="navbar-css-vars" file="scss/_navbar.scss" >}}
-
-Some additional CSS variables are also present on `.navbar-nav`:
-
-{{< scss-docs name="navbar-nav-css-vars" file="scss/_navbar.scss" >}}
-
-Customization through CSS variables can be seen on the `.navbar-dark` class where we override specific values without adding duplicate CSS selectors.
-
-{{< scss-docs name="navbar-dark-css-vars" file="scss/_navbar.scss" >}}
-
-### Sass variables
-
-Variables for all navbars:
-
-{{< scss-docs name="navbar-variables" file="scss/_variables.scss" >}}
-
-Variables for the [dark navbar](#color-schemes):
-
-{{< scss-docs name="navbar-dark-variables" file="scss/_variables.scss" >}}
-
-### Sass loop
-
-[Responsive navbar expand/collapse classes](#responsive-behaviors) (e.g., `.navbar-expand-lg`) are combined with the `$breakpoints` map and generated through a loop in `scss/_navbar.scss`.
-
-{{< scss-docs name="navbar-expand-loop" file="scss/_navbar.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/navs-tabs.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/navs-tabs.md
deleted file mode 100644
index 1748dd1bb..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/navs-tabs.md
+++ /dev/null
@@ -1,671 +0,0 @@
----
-layout: docs
-title: Navs and tabs
-description: Documentation and examples for how to use Bootstrap's included navigation components.
-group: components
-aliases: "/docs/5.2/components/navs/"
-toc: true
----
-
-## Base nav
-
-Navigation available in Bootstrap share general markup and styles, from the base `.nav` class to the active and disabled states. Swap modifier classes to switch between each style.
-
-The base `.nav` component is built with flexbox and provide a strong foundation for building all types of navigation components. It includes some style overrides (for working with lists), some link padding for larger hit areas, and basic disabled styling.
-
-{{< callout info >}}
-The base `.nav` component does not include any `.active` state. The following examples include the class, mainly to demonstrate that this particular class does not trigger any special styling.
-
-To convey the active state to assistive technologies, use the `aria-current` attribute — using the `page` value for current page, or `true` for the current item in a set.
-{{< /callout >}}
-
-{{< example >}}
-<ul class="nav">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-Classes are used throughout, so your markup can be super flexible. Use `<ul>`s like above, `<ol>` if the order of your items is important, or roll your own with a `<nav>` element. Because the `.nav` uses `display: flex`, the nav links behave the same as nav items would, but without the extra markup.
-
-{{< example >}}
-<nav class="nav">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link disabled">Disabled</a>
-</nav>
-{{< /example >}}
-
-## Available styles
-
-Change the style of `.nav`s component with modifiers and utilities. Mix and match as needed, or build your own.
-
-### Horizontal alignment
-
-Change the horizontal alignment of your nav with [flexbox utilities]({{< docsref "/layout/grid#horizontal-alignment" >}}). By default, navs are left-aligned, but you can easily change them to center or right aligned.
-
-Centered with `.justify-content-center`:
-
-{{< example >}}
-<ul class="nav justify-content-center">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-Right-aligned with `.justify-content-end`:
-
-{{< example >}}
-<ul class="nav justify-content-end">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-### Vertical
-
-Stack your navigation by changing the flex item direction with the `.flex-column` utility. Need to stack them on some viewports but not others? Use the responsive versions (e.g., `.flex-sm-column`).
-
-{{< example >}}
-<ul class="nav flex-column">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-As always, vertical navigation is possible without `<ul>`s, too.
-
-{{< example >}}
-<nav class="nav flex-column">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link disabled">Disabled</a>
-</nav>
-{{< /example >}}
-
-### Tabs
-
-Takes the basic nav from above and adds the `.nav-tabs` class to generate a tabbed interface. Use them to create tabbable regions with our [tab JavaScript plugin](#javascript-behavior).
-
-{{< example >}}
-<ul class="nav nav-tabs">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-### Pills
-
-Take that same HTML, but use `.nav-pills` instead:
-
-{{< example >}}
-<ul class="nav nav-pills">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-### Fill and justify
-
-Force your `.nav`'s contents to extend the full available width one of two modifier classes. To proportionately fill all available space with your `.nav-item`s, use `.nav-fill`. Notice that all horizontal space is occupied, but not every nav item has the same width.
-
-{{< example >}}
-<ul class="nav nav-pills nav-fill">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Much longer nav link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-When using a `<nav>`-based navigation, you can safely omit `.nav-item` as only `.nav-link` is required for styling `<a>` elements.
-
-{{< example >}}
-<nav class="nav nav-pills nav-fill">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- <a class="nav-link" href="#">Much longer nav link</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link disabled">Disabled</a>
-</nav>
-{{< /example >}}
-
-For equal-width elements, use `.nav-justified`. All horizontal space will be occupied by nav links, but unlike the `.nav-fill` above, every nav item will be the same width.
-
-{{< example >}}
-<ul class="nav nav-pills nav-justified">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Much longer nav link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-Similar to the `.nav-fill` example using a `<nav>`-based navigation.
-
-{{< example >}}
-<nav class="nav nav-pills nav-justified">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- <a class="nav-link" href="#">Much longer nav link</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link disabled">Disabled</a>
-</nav>
-
-{{< /example >}}
-## Working with flex utilities
-
-If you need responsive nav variations, consider using a series of [flexbox utilities]({{< docsref "/utilities/flex" >}}). While more verbose, these utilities offer greater customization across responsive breakpoints. In the example below, our nav will be stacked on the lowest breakpoint, then adapt to a horizontal layout that fills the available width starting from the small breakpoint.
-
-{{< example >}}
-<nav class="nav nav-pills flex-column flex-sm-row">
- <a class="flex-sm-fill text-sm-center nav-link active" aria-current="page" href="#">Active</a>
- <a class="flex-sm-fill text-sm-center nav-link" href="#">Longer nav link</a>
- <a class="flex-sm-fill text-sm-center nav-link" href="#">Link</a>
- <a class="flex-sm-fill text-sm-center nav-link disabled">Disabled</a>
-</nav>
-{{< /example >}}
-
-## Regarding accessibility
-
-If you're using navs to provide a navigation bar, be sure to add a `role="navigation"` to the most logical parent container of the `<ul>`, or wrap a `<nav>` element around the whole navigation. Do not add the role to the `<ul>` itself, as this would prevent it from being announced as an actual list by assistive technologies.
-
-Note that navigation bars, even if visually styled as tabs with the `.nav-tabs` class, should **not** be given `role="tablist"`, `role="tab"` or `role="tabpanel"` attributes. These are only appropriate for dynamic tabbed interfaces, as described in the [ARIA Authoring Practices Guide tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/). See [JavaScript behavior](#javascript-behavior) for dynamic tabbed interfaces in this section for an example. The `aria-current` attribute is not necessary on dynamic tabbed interfaces since our JavaScript handles the selected state by adding `aria-selected="true"` on the active tab.
-
-## Using dropdowns
-
-Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin]({{< docsref "/components/dropdowns#usage" >}}).
-
-### Tabs with dropdowns
-
-{{< example >}}
-<ul class="nav nav-tabs">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-### Pills with dropdowns
-
-{{< example >}}
-<ul class="nav nav-pills">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
-</ul>
-{{< /example >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, navs now use local CSS variables on `.nav`, `.nav-tabs`, and `.nav-pills` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-On the `.nav` base class:
-
-{{< scss-docs name="nav-css-vars" file="scss/_nav.scss" >}}
-
-On the `.nav-tabs` modifier class:
-
-{{< scss-docs name="nav-tabs-css-vars" file="scss/_nav.scss" >}}
-
-On the `.nav-pills` modifier class:
-
-{{< scss-docs name="nav-pills-css-vars" file="scss/_nav.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="nav-variables" file="scss/_variables.scss" >}}
-
-## JavaScript behavior
-
-Use the tab JavaScript plugin—include it individually or through the compiled `bootstrap.js` file—to extend our navigational tabs and pills to create tabbable panes of local content.
-
-<div class="bd-example">
- <ul class="nav nav-tabs mb-3" id="myTab" role="tablist">
- <li class="nav-item" role="presentation">
- <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Home</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile-tab-pane" type="button" role="tab" aria-controls="profile-tab-pane" aria-selected="false">Profile</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact-tab-pane" type="button" role="tab" aria-controls="contact-tab-pane" aria-selected="false">Contact</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="disabled-tab" data-bs-toggle="tab" data-bs-target="#disabled-tab-pane" type="button" role="tab" aria-controls="disabled-tab-pane" aria-selected="false" disabled>Disabled</button>
- </li>
- </ul>
- <div class="tab-content" id="myTabContent">
- <div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="profile-tab-pane" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="contact-tab-pane" role="tabpanel" aria-labelledby="contact-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Contact tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="disabled-tab-pane" role="tabpanel" aria-labelledby="disabled-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Disabled tab's</strong> associated content.</p>
- </div>
- </div>
-</div>
-
-```html
-<ul class="nav nav-tabs" id="myTab" role="tablist">
- <li class="nav-item" role="presentation">
- <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Home</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile-tab-pane" type="button" role="tab" aria-controls="profile-tab-pane" aria-selected="false">Profile</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact-tab-pane" type="button" role="tab" aria-controls="contact-tab-pane" aria-selected="false">Contact</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="disabled-tab" data-bs-toggle="tab" data-bs-target="#disabled-tab-pane" type="button" role="tab" aria-controls="disabled-tab-pane" aria-selected="false" disabled>Disabled</button>
- </li>
-</ul>
-<div class="tab-content" id="myTabContent">
- <div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="profile-tab-pane" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="contact-tab-pane" role="tabpanel" aria-labelledby="contact-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="disabled-tab-pane" role="tabpanel" aria-labelledby="disabled-tab" tabindex="0">...</div>
-</div>
-```
-
-To help fit your needs, this works with `<ul>`-based markup, as shown above, or with any arbitrary "roll your own" markup. Note that if you're using `<nav>`, you shouldn't add `role="tablist"` directly to it, as this would override the element's native role as a navigation landmark. Instead, switch to an alternative element (in the example below, a simple `<div>`) and wrap the `<nav>` around it.
-
-<div class="bd-example">
- <nav>
- <div class="nav nav-tabs mb-3" id="nav-tab" role="tablist">
- <button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Home</button>
- <button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</button>
- <button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</button>
- <button class="nav-link" id="nav-disabled-tab" data-bs-toggle="tab" data-bs-target="#nav-disabled" type="button" role="tab" aria-controls="nav-disabled" aria-selected="false" disabled>Disabled</button>
- </div>
- </nav>
- <div class="tab-content" id="nav-tabContent">
- <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Contact tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="nav-disabled" role="tabpanel" aria-labelledby="nav-disabled-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Disabled tab's</strong> associated content.</p>
- </div>
- </div>
-</div>
-
-```html
-<nav>
- <div class="nav nav-tabs" id="nav-tab" role="tablist">
- <button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Home</button>
- <button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</button>
- <button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</button>
- <button class="nav-link" id="nav-disabled-tab" data-bs-toggle="tab" data-bs-target="#nav-disabled" type="button" role="tab" aria-controls="nav-disabled" aria-selected="false" disabled>Disabled</button>
- </div>
-</nav>
-<div class="tab-content" id="nav-tabContent">
- <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="nav-disabled" role="tabpanel" aria-labelledby="nav-disabled-tab" tabindex="0">...</div>
-</div>
-```
-
-The tabs plugin also works with pills.
-
-<div class="bd-example">
- <ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
- <li class="nav-item" role="presentation">
- <button class="nav-link active" id="pills-home-tab" data-bs-toggle="pill" data-bs-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Home</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="pills-profile-tab" data-bs-toggle="pill" data-bs-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="pills-contact-tab" data-bs-toggle="pill" data-bs-target="#pills-contact" type="button" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#pills-disabled" type="button" role="tab" aria-controls="pills-disabled" aria-selected="false" disabled>Disabled</button>
- </li>
- </ul>
- <div class="tab-content" id="pills-tabContent">
- <div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Contact tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="pills-disabled" role="tabpanel" aria-labelledby="pills-disabled-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Disabled tab's</strong> associated content.</p>
- </div>
- </div>
-</div>
-
-```html
-<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
- <li class="nav-item" role="presentation">
- <button class="nav-link active" id="pills-home-tab" data-bs-toggle="pill" data-bs-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Home</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="pills-profile-tab" data-bs-toggle="pill" data-bs-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="pills-contact-tab" data-bs-toggle="pill" data-bs-target="#pills-contact" type="button" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#pills-disabled" type="button" role="tab" aria-controls="pills-disabled" aria-selected="false" disabled>Disabled</button>
- </li>
-</ul>
-<div class="tab-content" id="pills-tabContent">
- <div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="pills-disabled" role="tabpanel" aria-labelledby="pills-disabled-tab" tabindex="0">...</div>
-</div>
-```
-
-And with vertical pills. Ideally, for vertical tabs, you should also add `aria-orientation="vertical"` to the tab list container.
-
-<div class="bd-example">
- <div class="d-flex align-items-start">
- <div class="nav flex-column nav-pills me-3" id="v-pills-tab" role="tablist" aria-orientation="vertical">
- <button class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" data-bs-target="#v-pills-home" type="button" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</button>
- <button class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" data-bs-target="#v-pills-profile" type="button" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</button>
- <button class="nav-link" id="v-pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#v-pills-disabled" type="button" role="tab" aria-controls="v-pills-disabled" aria-selected="false" disabled>Disabled</button>
- <button class="nav-link" id="v-pills-messages-tab" data-bs-toggle="pill" data-bs-target="#v-pills-messages" type="button" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</button>
- <button class="nav-link" id="v-pills-settings-tab" data-bs-toggle="pill" data-bs-target="#v-pills-settings" type="button" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</button>
- </div>
- <div class="tab-content" id="v-pills-tabContent">
- <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="v-pills-disabled" role="tabpanel" aria-labelledby="v-pills-disabled-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Disabled tab's</strong> associated content.</p>
- </div>
- <div class="tab-pane fade" id="v-pills-messages" role="tabpanel" aria-labelledby="v-pills-messages-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Messages tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="v-pills-settings" role="tabpanel" aria-labelledby="v-pills-settings-tab" tabindex="0">
- <p>This is some placeholder content the <strong>Settings tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- </div>
- </div>
-</div>
-
-```html
-<div class="d-flex align-items-start">
- <div class="nav flex-column nav-pills me-3" id="v-pills-tab" role="tablist" aria-orientation="vertical">
- <button class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" data-bs-target="#v-pills-home" type="button" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</button>
- <button class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" data-bs-target="#v-pills-profile" type="button" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</button>
- <button class="nav-link" id="v-pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#v-pills-disabled" type="button" role="tab" aria-controls="v-pills-disabled" aria-selected="false" disabled>Disabled</button>
- <button class="nav-link" id="v-pills-messages-tab" data-bs-toggle="pill" data-bs-target="#v-pills-messages" type="button" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</button>
- <button class="nav-link" id="v-pills-settings-tab" data-bs-toggle="pill" data-bs-target="#v-pills-settings" type="button" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</button>
- </div>
- <div class="tab-content" id="v-pills-tabContent">
- <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="v-pills-disabled" role="tabpanel" aria-labelledby="v-pills-disabled-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="v-pills-messages" role="tabpanel" aria-labelledby="v-pills-messages-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="v-pills-settings" role="tabpanel" aria-labelledby="v-pills-settings-tab" tabindex="0">...</div>
- </div>
-</div>
-```
-
-### Accessibility
-
-Dynamic tabbed interfaces, as described in the [ARIA Authoring Practices Guide tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/), require `role="tablist"`, `role="tab"`, `role="tabpanel"`, and additional `aria-` attributes in order to convey their structure, functionality, and current state to users of assistive technologies (such as screen readers). As a best practice, we recommend using `<button>` elements for the tabs, as these are controls that trigger a dynamic change, rather than links that navigate to a new page or location.
-
-In line with the ARIA Authoring Practices pattern, only the currently active tab receives keyboard focus. When the JavaScript plugin is initialized, it will set `tabindex="-1"` on all inactive tab controls. Once the currently active tab has focus, the cursor keys activate the previous/next tab, with the plugin changing the [roving `tabindex`](https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/) accordingly. However, note that the JavaScript plugin does not distinguish between horizontal and vertical tab lists when it comes to cursor key interactions: regardless of the tab list's orientation, both the up *and* left cursor go to the previous tab, and down *and* right cursor go to the next tab.
-
-{{< callout warning >}}
-In general, to facilitate keyboard navigation, it's recommended to make the tab panels themselves focusable as well, unless the first element containing meaningful content inside the tab panel is already focusable. The JavaScript plugin does not try to handle this aspect—where appropriate, you'll need to explicitly make your tab panels focusable by adding `tabindex="0"` in your markup.
-{{< /callout >}}
-
-{{< callout danger >}}
-The tab JavaScript plugin **does not** support tabbed interfaces that contain dropdown menus, as these cause both usability and accessibility issues. From a usability perspective, the fact that the currently displayed tab's trigger element is not immediately visible (as it's inside the closed dropdown menu) can cause confusion. From an accessibility point of view, there is currently no sensible way to map this sort of construct to a standard WAI ARIA pattern, meaning that it cannot be easily made understandable to users of assistive technologies.
-{{< /callout >}}
-
-### Using data attributes
-
-You can activate a tab or pill navigation without writing any JavaScript by simply specifying `data-bs-toggle="tab"` or `data-bs-toggle="pill"` on an element. Use these data attributes on `.nav-tabs` or `.nav-pills`.
-
-```html
-<!-- Nav tabs -->
-<ul class="nav nav-tabs" id="myTab" role="tablist">
- <li class="nav-item" role="presentation">
- <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profile</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="messages-tab" data-bs-toggle="tab" data-bs-target="#messages" type="button" role="tab" aria-controls="messages" aria-selected="false">Messages</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="settings-tab" data-bs-toggle="tab" data-bs-target="#settings" type="button" role="tab" aria-controls="settings" aria-selected="false">Settings</button>
- </li>
-</ul>
-
-<!-- Tab panes -->
-<div class="tab-content">
- <div class="tab-pane active" id="home" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
- <div class="tab-pane" id="profile" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
- <div class="tab-pane" id="messages" role="tabpanel" aria-labelledby="messages-tab" tabindex="0">...</div>
- <div class="tab-pane" id="settings" role="tabpanel" aria-labelledby="settings-tab" tabindex="0">...</div>
-</div>
-```
-
-### Via JavaScript
-
-Enable tabbable tabs via JavaScript (each tab needs to be activated individually):
-
-```js
-const triggerTabList = document.querySelectorAll('#myTab button')
-triggerTabList.forEach(triggerEl => {
- const tabTrigger = new bootstrap.Tab(triggerEl)
-
- triggerEl.addEventListener('click', event => {
- event.preventDefault()
- tabTrigger.show()
- })
-})
-```
-
-You can activate individual tabs in several ways:
-
-```js
-const triggerEl = document.querySelector('#myTab button[data-bs-target="#profile"]')
-bootstrap.Tab.getInstance(triggerEl).show() // Select tab by name
-
-const triggerFirstTabEl = document.querySelector('#myTab li:first-child button')
-bootstrap.Tab.getInstance(triggerFirstTabEl).show() // Select first tab
-```
-
-### Fade effect
-
-To make tabs fade in, add `.fade` to each `.tab-pane`. The first tab pane must also have `.show` to make the initial content visible.
-
-```html
-<div class="tab-content">
- <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="messages" role="tabpanel" aria-labelledby="messages-tab" tabindex="0">...</div>
- <div class="tab-pane fade" id="settings" role="tabpanel" aria-labelledby="settings-tab" tabindex="0">...</div>
-</div>
-```
-
-### Methods
-
-{{< callout danger >}}
-{{< partial "callout-danger-async-methods.md" >}}
-{{< /callout >}}
-
-Activates your content as a tab element.
-
-You can create a tab instance with the constructor, for example:
-
-```js
-const bsTab = new bootstrap.Tab('#myTab')
-```
-
-{{< bs-table >}}
-| Method | Description |
-| --- | --- |
-| `dispose` | Destroys an element's tab. |
-| `getInstance` | Static method which allows you to get the tab instance associated with a DOM element, you can use it like this: `bootstrap.Tab.getInstance(element)`. |
-| `getOrCreateInstance` | Static method which returns a tab instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Tab.getOrCreateInstance(element)`. |
-| `show` | Selects the given tab and shows its associated pane. Any other tab that was previously selected becomes unselected and its associated pane is hidden. **Returns to the caller before the tab pane has actually been shown** (i.e. before the `shown.bs.tab` event occurs). |
-{{< /bs-table >}}
-
-### Events
-
-When showing a new tab, the events fire in the following order:
-
-1. `hide.bs.tab` (on the current active tab)
-2. `show.bs.tab` (on the to-be-shown tab)
-3. `hidden.bs.tab` (on the previous active tab, the same one as for the `hide.bs.tab` event)
-4. `shown.bs.tab` (on the newly-active just-shown tab, the same one as for the `show.bs.tab` event)
-
-If no tab was already active, then the `hide.bs.tab` and `hidden.bs.tab` events will not be fired.
-
-{{< bs-table >}}
-| Event type | Description |
-| --- | --- |
-| `hide.bs.tab` | This event fires when a new tab is to be shown (and thus the previous active tab is to be hidden). Use `event.target` and `event.relatedTarget` to target the current active tab and the new soon-to-be-active tab, respectively. |
-| `hidden.bs.tab` | This event fires after a new tab is shown (and thus the previous active tab is hidden). Use `event.target` and `event.relatedTarget` to target the previous active tab and the new active tab, respectively. |
-| `show.bs.tab` | This event fires on tab show, but before the new tab has been shown. Use `event.target` and `event.relatedTarget` to target the active tab and the previous active tab (if available) respectively. |
-| `shown.bs.tab` | This event fires on tab show after a tab has been shown. Use `event.target` and `event.relatedTarget` to target the active tab and the previous active tab (if available) respectively. |
-{{< /bs-table >}}
-
-```js
-const tabEl = document.querySelector('button[data-bs-toggle="tab"]')
-tabEl.addEventListener('shown.bs.tab', event => {
- event.target // newly activated tab
- event.relatedTarget // previous active tab
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/offcanvas.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/offcanvas.md
deleted file mode 100644
index c4290adf2..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/offcanvas.md
+++ /dev/null
@@ -1,353 +0,0 @@
----
-layout: docs
-title: Offcanvas
-description: Build hidden sidebars into your project for navigation, shopping carts, and more with a few classes and our JavaScript plugin.
-group: components
-toc: true
----
-
-## How it works
-
-Offcanvas is a sidebar component that can be toggled via JavaScript to appear from the left, right, top, or bottom edge of the viewport. Buttons or anchors are used as triggers that are attached to specific elements you toggle, and `data` attributes are used to invoke our JavaScript.
-
-- Offcanvas shares some of the same JavaScript code as modals. Conceptually, they are quite similar, but they are separate plugins.
-- Similarly, some [source Sass](#sass) variables for offcanvas's styles and dimensions are inherited from the modal's variables.
-- When shown, offcanvas includes a default backdrop that can be clicked to hide the offcanvas.
-- Similar to modals, only one offcanvas can be shown at a time.
-
-**Heads up!** Given how CSS handles animations, you cannot use `margin` or `translate` on an `.offcanvas` element. Instead, use the class as an independent wrapping element.
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-## Examples
-
-### Offcanvas components
-
-Below is an offcanvas example that is shown by default (via `.show` on `.offcanvas`). Offcanvas includes support for a header with a close button and an optional body class for some initial `padding`. We suggest that you include offcanvas headers with dismiss actions whenever possible, or provide an explicit dismiss action.
-
-{{< example class="bd-example-offcanvas p-0 bg-light overflow-hidden" >}}
-<div class="offcanvas offcanvas-start show" tabindex="-1" id="offcanvas" aria-labelledby="offcanvasLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasLabel">Offcanvas</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- Content for the offcanvas goes here. You can place just about any Bootstrap component or custom elements here.
- </div>
-</div>
-{{< /example >}}
-
-### Live demo
-
-Use the buttons below to show and hide an offcanvas element via JavaScript that toggles the `.show` class on an element with the `.offcanvas` class.
-
-- `.offcanvas` hides content (default)
-- `.offcanvas.show` shows content
-
-You can use a link with the `href` attribute, or a button with the `data-bs-target` attribute. In both cases, the `data-bs-toggle="offcanvas"` is required.
-
-{{< example >}}
-<a class="btn btn-primary" data-bs-toggle="offcanvas" href="#offcanvasExample" role="button" aria-controls="offcanvasExample">
- Link with href
-</a>
-<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample">
- Button with data-bs-target
-</button>
-
-<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasExampleLabel">Offcanvas</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <div class="">
- Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
- </div>
- <div class="dropdown mt-3">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown">
- Dropdown button
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Body scrolling
-
-Scrolling the `<body>` element is disabled when an offcanvas and its backdrop are visible. Use the `data-bs-scroll` attribute to enable `<body>` scrolling.
-
-{{< example >}}
-<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasScrolling" aria-controls="offcanvasScrolling">Enable body scrolling</button>
-
-<div class="offcanvas offcanvas-start" data-bs-scroll="true" data-bs-backdrop="false" tabindex="-1" id="offcanvasScrolling" aria-labelledby="offcanvasScrollingLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasScrollingLabel">Offcanvas with body scrolling</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <p>Try scrolling the rest of the page to see this option in action.</p>
- </div>
-</div>
-{{< /example >}}
-
-### Body scrolling and backdrop
-
-You can also enable `<body>` scrolling with a visible backdrop.
-
-{{< example >}}
-<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasWithBothOptions" aria-controls="offcanvasWithBothOptions">Enable both scrolling & backdrop</button>
-
-<div class="offcanvas offcanvas-start" data-bs-scroll="true" tabindex="-1" id="offcanvasWithBothOptions" aria-labelledby="offcanvasWithBothOptionsLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasWithBothOptionsLabel">Backdrop with scrolling</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <p>Try scrolling the rest of the page to see this option in action.</p>
- </div>
-</div>
-{{< /example >}}
-
-### Static backdrop
-
-When backdrop is set to static, the offcanvas will not close when clicking outside of it.
-
-{{< example >}}
-<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#staticBackdrop" aria-controls="staticBackdrop">
- Toggle static offcanvas
-</button>
-
-<div class="offcanvas offcanvas-start" data-bs-backdrop="static" tabindex="-1" id="staticBackdrop" aria-labelledby="staticBackdropLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="staticBackdropLabel">Offcanvas</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <div>
- I will not close if you click outside of me.
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Dark offcanvas
-
-{{< added-in "5.2.0" >}}
-
-Change the appearance of offcanvases with utilities to better match them to different contexts like dark navbars. Here we add `.text-bg-dark` to the `.offcanvas` and `.btn-close-white` to `.btn-close` for proper styling with a dark offcanvas. If you have dropdowns within, consider also adding `.dropdown-menu-dark` to `.dropdown-menu`.
-
-{{< example class="bd-example-offcanvas p-0 bg-light overflow-hidden" >}}
-<div class="offcanvas offcanvas-start show text-bg-dark" tabindex="-1" id="offcanvasDark" aria-labelledby="offcanvasDarkLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasDarkLabel">Offcanvas</h5>
- <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvasDark" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <p>Place offcanvas content here.</p>
- </div>
-</div>
-{{< /example >}}
-
-## Responsive
-
-{{< added-in "5.2.0" >}}
-
-Responsive offcanvas classes hide content outside the viewport from a specified breakpoint and down. Above that breakpoint, the contents within will behave as usual. For example, `.offcanvas-lg` hides content in an offcanvas below the `lg` breakpoint, but shows the content above the `lg` breakpoint.
-
-{{< example >}}
-<button class="btn btn-primary d-lg-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasResponsive" aria-controls="offcanvasResponsive">Toggle offcanvas</button>
-
-<div class="alert alert-info d-none d-lg-block">Resize your browser to show the responsive offcanvas toggle.</div>
-
-<div class="offcanvas-lg offcanvas-end" tabindex="-1" id="offcanvasResponsive" aria-labelledby="offcanvasResponsiveLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasResponsiveLabel">Responsive offcanvas</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#offcanvasResponsive" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <p class="mb-0">This is content within an <code>.offcanvas-lg</code>.</p>
- </div>
-</div>
-{{< /example >}}
-
-Responsive offcanvas classes are available across for each breakpoint.
-
-- `.offcanvas`
-- `.offcanvas-sm`
-- `.offcanvas-md`
-- `.offcanvas-lg`
-- `.offcanvas-xl`
-- `.offcanvas-xxl`
-
-## Placement
-
-There's no default placement for offcanvas components, so you must add one of the modifier classes below.
-
-- `.offcanvas-start` places offcanvas on the left of the viewport (shown above)
-- `.offcanvas-end` places offcanvas on the right of the viewport
-- `.offcanvas-top` places offcanvas on the top of the viewport
-- `.offcanvas-bottom` places offcanvas on the bottom of the viewport
-
-Try the top, right, and bottom examples out below.
-
-{{< example >}}
-<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasTop" aria-controls="offcanvasTop">Toggle top offcanvas</button>
-
-<div class="offcanvas offcanvas-top" tabindex="-1" id="offcanvasTop" aria-labelledby="offcanvasTopLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasTopLabel">Offcanvas top</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- ...
- </div>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight">Toggle right offcanvas</button>
-
-<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasRight" aria-labelledby="offcanvasRightLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasRightLabel">Offcanvas right</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- ...
- </div>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasBottom" aria-controls="offcanvasBottom">Toggle bottom offcanvas</button>
-
-<div class="offcanvas offcanvas-bottom" tabindex="-1" id="offcanvasBottom" aria-labelledby="offcanvasBottomLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasBottomLabel">Offcanvas bottom</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body small">
- ...
- </div>
-</div>
-{{< /example >}}
-
-## Accessibility
-
-Since the offcanvas panel is conceptually a modal dialog, be sure to add `aria-labelledby="..."`—referencing the offcanvas title—to `.offcanvas`. Note that you don’t need to add `role="dialog"` since we already add it via JavaScript.
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, offcanvas now uses local CSS variables on `.offcanvas` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="offcanvas-css-vars" file="scss/_offcanvas.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="offcanvas-variables" file="scss/_variables.scss" >}}
-
-## Usage
-
-The offcanvas plugin utilizes a few classes and attributes to handle the heavy lifting:
-
-- `.offcanvas` hides the content
-- `.offcanvas.show` shows the content
-- `.offcanvas-start` hides the offcanvas on the left
-- `.offcanvas-end` hides the offcanvas on the right
-- `.offcanvas-top` hides the offcanvas on the top
-- `.offcanvas-bottom` hides the offcanvas on the bottom
-
-Add a dismiss button with the `data-bs-dismiss="offcanvas"` attribute, which triggers the JavaScript functionality. Be sure to use the `<button>` element with it for proper behavior across all devices.
-
-### Via data attributes
-
-#### Toggle
-
-Add `data-bs-toggle="offcanvas"` and a `data-bs-target` or `href` to the element to automatically assign control of one offcanvas element. The `data-bs-target` attribute accepts a CSS selector to apply the offcanvas to. Be sure to add the class `offcanvas` to the offcanvas element. If you'd like it to default open, add the additional class `show`.
-
-#### Dismiss
-
-{{% js-dismiss "offcanvas" %}}
-
-{{< callout warning >}}
-While both ways to dismiss an offcanvas are supported, keep in mind that dismissing from outside an offcanvas does not match the [ARIA Authoring Practices Guide dialog (modal) pattern](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/). Do this at your own risk.
-{{< /callout >}}
-
-### Via JavaScript
-
-Enable manually with:
-
-```js
-const offcanvasElementList = document.querySelectorAll('.offcanvas')
-const offcanvasList = [...offcanvasElementList].map(offcanvasEl => new bootstrap.Offcanvas(offcanvasEl))
-```
-
-### Options
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-{{< bs-table "table" >}}
-| Name | Type | Default | Description |
-| --- | --- | --- | --- |
-| `backdrop` | boolean or the string `static` | `true` | Apply a backdrop on body while offcanvas is open. Alternatively, specify `static` for a backdrop which doesn't close the offcanvas when clicked. |
-| `keyboard` | boolean | `true` | Closes the offcanvas when escape key is pressed. |
-| `scroll` | boolean | `false` | Allow body scrolling while offcanvas is open. |
-{{< /bs-table >}}
-
-### Methods
-
-{{< callout danger >}}
-{{< partial "callout-danger-async-methods.md" >}}
-{{< /callout >}}
-
-Activates your content as an offcanvas element. Accepts an optional options `object`.
-
-You can create an offcanvas instance with the constructor, for example:
-
-```js
-const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
-```
-
-{{< bs-table "table" >}}
-| Method | Description |
-| --- | --- |
-| `getInstance` | *Static* method which allows you to get the offcanvas instance associated with a DOM element. |
-| `getOrCreateInstance` | *Static* method which allows you to get the offcanvas instance associated with a DOM element, or create a new one in case it wasn't initialized. |
-| `hide` | Hides an offcanvas element. **Returns to the caller before the offcanvas element has actually been hidden** (i.e. before the `hidden.bs.offcanvas` event occurs). |
-| `show` | Shows an offcanvas element. **Returns to the caller before the offcanvas element has actually been shown** (i.e. before the `shown.bs.offcanvas` event occurs). |
-| `toggle` | Toggles an offcanvas element to shown or hidden. **Returns to the caller before the offcanvas element has actually been shown or hidden** (i.e. before the `shown.bs.offcanvas` or `hidden.bs.offcanvas` event occurs). |
-{{< /bs-table >}}
-
-### Events
-
-Bootstrap's offcanvas class exposes a few events for hooking into offcanvas functionality.
-
-{{< bs-table "table" >}}
-| Event type | Description |
-| --- | --- |
-| `hide.bs.offcanvas` | This event is fired immediately when the `hide` method has been called. |
-| `hidden.bs.offcanvas` | This event is fired when an offcanvas element has been hidden from the user (will wait for CSS transitions to complete). |
-| `hidePrevented.bs.offcanvas` | This event is fired when the offcanvas is shown, its backdrop is `static` and a click outside of the offcanvas is performed. The event is also fired when the escape key is pressed and the `keyboard` option is set to `false`. |
-| `show.bs.offcanvas` | This event fires immediately when the `show` instance method is called. |
-| `shown.bs.offcanvas` | This event is fired when an offcanvas element has been made visible to the user (will wait for CSS transitions to complete). |
-{{< /bs-table >}}
-
-```js
-const myOffcanvas = document.getElementById('myOffcanvas')
-myOffcanvas.addEventListener('hidden.bs.offcanvas', event => {
- // do something...
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/placeholders.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/placeholders.md
deleted file mode 100644
index 4de405756..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/placeholders.md
+++ /dev/null
@@ -1,145 +0,0 @@
----
-layout: docs
-title: Placeholders
-description: Use loading placeholders for your components or pages to indicate something may still be loading.
-group: components
-toc: true
-added: "5.1"
----
-
-## About
-
-Placeholders can be used to enhance the experience of your application. They're built only with HTML and CSS, meaning you don't need any JavaScript to create them. You will, however, need some custom JavaScript to toggle their visibility. Their appearance, color, and sizing can be easily customized with our utility classes.
-
-## Example
-
-In the example below, we take a typical card component and recreate it with placeholders applied to create a "loading card". Size and proportions are the same between the two.
-
-<div class="bd-example bd-example-placeholder-cards d-flex justify-content-around">
-<div class="card">
- {{< placeholder width="100%" height="180" class="card-img-top" text="false" background="#20c997" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-
-<div class="card" aria-hidden="true">
- {{< placeholder width="100%" height="180" class="card-img-top" text="false" >}}
- <div class="card-body">
- <div class="h5 card-title placeholder-glow">
- <span class="placeholder col-6"></span>
- </div>
- <p class="card-text placeholder-glow">
- <span class="placeholder col-7"></span>
- <span class="placeholder col-4"></span>
- <span class="placeholder col-4"></span>
- <span class="placeholder col-6"></span>
- <span class="placeholder col-8"></span>
- </p>
- <a href="#" tabindex="-1" class="btn btn-primary disabled placeholder col-6"></a>
- </div>
-</div>
-</div>
-
-```html
-<div class="card">
- <img src="..." class="card-img-top" alt="...">
-
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
-</div>
-
-<div class="card" aria-hidden="true">
- <img src="..." class="card-img-top" alt="...">
- <div class="card-body">
- <h5 class="card-title placeholder-glow">
- <span class="placeholder col-6"></span>
- </h5>
- <p class="card-text placeholder-glow">
- <span class="placeholder col-7"></span>
- <span class="placeholder col-4"></span>
- <span class="placeholder col-4"></span>
- <span class="placeholder col-6"></span>
- <span class="placeholder col-8"></span>
- </p>
- <a href="#" tabindex="-1" class="btn btn-primary disabled placeholder col-6"></a>
- </div>
-</div>
-```
-
-## How it works
-
-Create placeholders with the `.placeholder` class and a grid column class (e.g., `.col-6`) to set the `width`. They can replace the text inside an element or be added as a modifier class to an existing component.
-
-We apply additional styling to `.btn`s via `::before` to ensure the `height` is respected. You may extend this pattern for other situations as needed, or add a `&nbsp;` within the element to reflect the height when actual text is rendered in its place.
-
-{{< example >}}
-<p aria-hidden="true">
- <span class="placeholder col-6"></span>
-</p>
-
-<a href="#" tabindex="-1" class="btn btn-primary disabled placeholder col-4" aria-hidden="true"></a>
-{{< /example >}}
-
-{{< callout info >}}
-The use of `aria-hidden="true"` only indicates that the element should be hidden to screen readers. The *loading* behavior of the placeholder depends on how authors will actually use the placeholder styles, how they plan to update things, etc. Some JavaScript code may be needed to *swap* the state of the placeholder and inform AT users of the update.
-{{< /callout >}}
-
-### Width
-
-You can change the `width` through grid column classes, width utilities, or inline styles.
-
-{{< example >}}
-<span class="placeholder col-6"></span>
-<span class="placeholder w-75"></span>
-<span class="placeholder" style="width: 25%;"></span>
-{{< /example >}}
-
-### Color
-
-By default, the `placeholder` uses `currentColor`. This can be overridden with a custom color or utility class.
-
-{{< example >}}
-<span class="placeholder col-12"></span>
-{{< placeholders.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<span class="placeholder col-12 bg-{{ .name }}"></span>
-{{- end -}}
-{{< /placeholders.inline >}}
-{{< /example >}}
-
-### Sizing
-
-The size of `.placeholder`s are based on the typographic style of the parent element. Customize them with sizing modifiers: `.placeholder-lg`, `.placeholder-sm`, or `.placeholder-xs`.
-
-{{< example >}}
-<span class="placeholder col-12 placeholder-lg"></span>
-<span class="placeholder col-12"></span>
-<span class="placeholder col-12 placeholder-sm"></span>
-<span class="placeholder col-12 placeholder-xs"></span>
-{{< /example >}}
-
-### Animation
-
-Animate placeholders with `.placeholder-glow` or `.placeholder-wave` to better convey the perception of something being _actively_ loaded.
-
-{{< example >}}
-<p class="placeholder-glow">
- <span class="placeholder col-12"></span>
-</p>
-
-<p class="placeholder-wave">
- <span class="placeholder col-12"></span>
-</p>
-{{< /example >}}
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="placeholders" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/popovers.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/popovers.md
deleted file mode 100644
index 9726c3034..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/popovers.md
+++ /dev/null
@@ -1,284 +0,0 @@
----
-layout: docs
-title: Popovers
-description: Documentation and examples for adding Bootstrap popovers, like those found in iOS, to any element on your site.
-group: components
-toc: true
----
-
-## Overview
-
-Things to know when using the popover plugin:
-
-- Popovers rely on the third party library [Popper](https://popper.js.org/) for positioning. You must include [popper.min.js]({{< param "cdn.popper" >}}) before `bootstrap.js`, or use one `bootstrap.bundle.min.js` which contains Popper.
-- Popovers require the [popover plugin]({{< docsref "/components/popovers" >}}) as a dependency.
-- Popovers are opt-in for performance reasons, so **you must initialize them yourself**.
-- Zero-length `title` and `content` values will never show a popover.
-- Specify `container: 'body'` to avoid rendering problems in more complex components (like our input groups, button groups, etc).
-- Triggering popovers on hidden elements will not work.
-- Popovers for `.disabled` or `disabled` elements must be triggered on a wrapper element.
-- When triggered from anchors that wrap across multiple lines, popovers will be centered between the anchors' overall width. Use `.text-nowrap` on your `<a>`s to avoid this behavior.
-- Popovers must be hidden before their corresponding elements have been removed from the DOM.
-- Popovers can be triggered thanks to an element inside a shadow DOM.
-
-{{< callout info >}}
-{{< partial "callout-info-sanitizer.md" >}}
-{{< /callout >}}
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-Keep reading to see how popovers work with some examples.
-
-## Examples
-
-### Enable popovers
-
-As mentioned above, you must initialize popovers before they can be used. One way to initialize all popovers on a page would be to select them by their `data-bs-toggle` attribute, like so:
-
-```js
-const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
-const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
-```
-
-### Live demo
-
-We use JavaScript similar to the snippet above to render the following live popover. Titles are set via `data-bs-title` and body content is set via `data-bs-content`.
-
-{{< callout warning >}}
-{{< partial "callout-warning-data-bs-title-vs-title.md" >}}
-{{< /callout >}}
-
-{{< example stackblitz_add_js="true" >}}
-<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" data-bs-title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
-{{< /example >}}
-
-### Four directions
-
-Four options are available: top, right, bottom, and left. Directions are mirrored when using Bootstrap in RTL. Set `data-bs-placement` to change the direction.
-
-{{< example stackblitz_add_js="true" >}}
-<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
- Popover on top
-</button>
-<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
- Popover on right
-</button>
-<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
- Popover on bottom
-</button>
-<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
- Popover on left
-</button>
-{{< /example >}}
-
-### Custom `container`
-
-When you have some styles on a parent element that interfere with a popover, you'll want to specify a custom `container` so that the popover's HTML appears within that element instead. This is common in responsive tables, input groups, and the like.
-
-```js
-const popover = new bootstrap.Popover('.example-popover', {
- container: 'body'
-})
-```
-
-Another situation where you'll want to set an explicit custom `container` are popovers inside a [modal dialog]({{< docsref "/components/modal" >}}), to make sure that the popover itself is appended to the modal. This is particularly important for popovers that contain interactive elements – modal dialogs will trap focus, so unless the popover is a child element of the modal, users won't be able to focus or activate these interactive elements.
-
-```js
-const popover = new bootstrap.Popover('.example-popover', {
- container: '.modal-body'
-})
-```
-
-### Custom popovers
-
-{{< added-in "5.2.0" >}}
-
-You can customize the appearance of popovers using [CSS variables](#variables). We set a custom class with `data-bs-custom-class="custom-popover"` to scope our custom appearance and use it to override some of the local CSS variables.
-
-{{< scss-docs name="custom-popovers" file="site/assets/scss/_component-examples.scss" >}}
-
-{{< example class="custom-popover-demo" stackblitz_add_js="true" >}}
-<button type="button" class="btn btn-secondary"
- data-bs-toggle="popover" data-bs-placement="right"
- data-bs-custom-class="custom-popover"
- data-bs-title="Custom popover"
- data-bs-content="This popover is themed via CSS variables.">
- Custom popover
-</button>
-{{< /example >}}
-
-### Dismiss on next click
-
-Use the `focus` trigger to dismiss popovers on the user's next click of a different element than the toggle element.
-
-{{< callout danger >}}
-#### Specific markup required for dismiss-on-next-click
-
-For proper cross-browser and cross-platform behavior, you must use the `<a>` tag, _not_ the `<button>` tag, and you also must include a [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) attribute.
-{{< /callout >}}
-
-{{< example stackblitz_add_js="true" >}}
-<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
-{{< /example >}}
-
-```js
-const popover = new bootstrap.Popover('.popover-dismiss', {
- trigger: 'focus'
-})
-```
-
-### Disabled elements
-
-Elements with the `disabled` attribute aren't interactive, meaning users cannot hover or click them to trigger a popover (or tooltip). As a workaround, you'll want to trigger the popover from a wrapper `<div>` or `<span>`, ideally made keyboard-focusable using `tabindex="0"`.
-
-For disabled popover triggers, you may also prefer `data-bs-trigger="hover focus"` so that the popover appears as immediate visual feedback to your users as they may not expect to _click_ on a disabled element.
-
-{{< example stackblitz_add_js="true" >}}
-<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
- <button class="btn btn-primary" type="button" disabled>Disabled button</button>
-</span>
-{{< /example >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap’s evolving CSS variables approach, popovers now use local CSS variables on `.popover` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="popover-css-vars" file="scss/_popover.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="popover-variables" file="scss/_variables.scss" >}}
-
-## Usage
-
-Enable popovers via JavaScript:
-
-```js
-const exampleEl = document.getElementById('example')
-const popover = new bootstrap.Popover(exampleEl, options)
-```
-
-{{< callout warning >}}
-### Making popovers work for keyboard and assistive technology users
-
-To allow keyboard users to activate your popovers, you should only add them to HTML elements that are traditionally keyboard-focusable and interactive (such as links or form controls). Although arbitrary HTML elements (such as `<span>`s) can be made focusable by adding the `tabindex="0"` attribute, this will add potentially annoying and confusing tab stops on non-interactive elements for keyboard users, and most assistive technologies currently do not announce the popover's content in this situation. Additionally, do not rely solely on `hover` as the trigger for your popovers, as this will make them impossible to trigger for keyboard users.
-
-While you can insert rich, structured HTML in popovers with the `html` option, we strongly recommend that you avoid adding an excessive amount of content. The way popovers currently work is that, once displayed, their content is tied to the trigger element with the `aria-describedby` attribute. As a result, the entirety of the popover's content will be announced to assistive technology users as one long, uninterrupted stream.
-
-Additionally, while it is possible to also include interactive controls (such as form elements or links) in your popover (by adding these elements to the `allowList` of allowed attributes and tags), be aware that currently the popover does not manage keyboard focus order. When a keyboard user opens a popover, focus remains on the triggering element, and as the popover usually does not immediately follow the trigger in the document's structure, there is no guarantee that moving forward/pressing <kbd>TAB</kbd> will move a keyboard user into the popover itself. In short, simply adding interactive controls to a popover is likely to make these controls unreachable/unusable for keyboard users and users of assistive technologies, or at the very least make for an illogical overall focus order. In these cases, consider using a modal dialog instead.
-{{< /callout >}}
-
-### Options
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-{{< callout warning >}}
-Note that for security reasons the `sanitize`, `sanitizeFn`, and `allowList` options cannot be supplied using data attributes.
-{{< /callout >}}
-
-{{< bs-table "table" >}}
-| Name | Type | Default | Description |
-| --- | --- | --- | --- |
-| `allowList` | object | [Default value]({{< docsref "/getting-started/javascript#sanitizer" >}}) | Object which contains allowed attributes and tags. |
-| `animation` | boolean | `true` | Apply a CSS fade transition to the popover. |
-| `boundary` | string, element | `'clippingParents'` | Overflow constraint boundary of the popover (applies only to Popper's preventOverflow modifier). By default, it's `'clippingParents'` and can accept an HTMLElement reference (via JavaScript only). For more information refer to Popper's [detectOverflow docs](https://popper.js.org/docs/v2/utils/detect-overflow/#boundary). |
-| `container` | string, element, false | `false` | Appends the popover to a specific element. Example: `container: 'body'`. This option is particularly useful in that it allows you to position the popover in the flow of the document near the triggering element - which will prevent the popover from floating away from the triggering element during a window resize. |
-| `content` | string, element, function | `''` | Default content value if `data-bs-content` attribute isn't present. If a function is given, it will be called with its `this` reference set to the element that the popover is attached to. |
-| `customClass` | string, function | `''` | Add classes to the popover when it is shown. Note that these classes will be added in addition to any classes specified in the template. To add multiple classes, separate them with spaces: `'class-1 class-2'`. You can also pass a function that should return a single string containing additional class names. |
-| `delay` | number, object | `0` | Delay showing and hiding the popover (ms)—doesn't apply to manual trigger type. If a number is supplied, delay is applied to both hide/show. Object structure is: `delay: { "show": 500, "hide": 100 }`. |
-| `fallbackPlacements` | string, array | `['top', 'right', 'bottom', 'left']` | Define fallback placements by providing a list of placements in array (in order of preference). For more information refer to Popper's [behavior docs](https://popper.js.org/docs/v2/modifiers/flip/#fallbackplacements). |
-| `html` | boolean | `false` | Allow HTML in the popover. If true, HTML tags in the popover's `title` will be rendered in the popover. If false, `innerText` property will be used to insert content into the DOM. Use text if you're worried about XSS attacks. |
-| `offset` | number, string, function | `[0, 0]` | Offset of the popover relative to its target. You can pass a string in data attributes with comma separated values like: `data-bs-offset="10,20"`. When a function is used to determine the offset, it is called with an object containing the popper placement, the reference, and popper rects as its first argument. The triggering element DOM node is passed as the second argument. The function must return an array with two numbers: [skidding](https://popper.js.org/docs/v2/modifiers/offset/#skidding-1), [distance](https://popper.js.org/docs/v2/modifiers/offset/#distance-1). For more information refer to Popper's [offset docs](https://popper.js.org/docs/v2/modifiers/offset/#options). |
-| `placement` | string, function | `'top'` | How to position the popover: auto, top, bottom, left, right. When `auto` is specified, it will dynamically reorient the popover. When a function is used to determine the placement, it is called with the popover DOM node as its first argument and the triggering element DOM node as its second. The `this` context is set to the popover instance. |
-| `popperConfig` | null, object, function | `null` | To change Bootstrap's default Popper config, see [Popper's configuration](https://popper.js.org/docs/v2/constructors/#options). When a function is used to create the Popper configuration, it's called with an object that contains the Bootstrap's default Popper configuration. It helps you use and merge the default with your own configuration. The function must return a configuration object for Popper. |
-| `sanitize` | boolean | `true` | Enable or disable the sanitization. If activated `'template'`, `'content'` and `'title'` options will be sanitized. |
-| `sanitizeFn` | null, function | `null` | Here you can supply your own sanitize function. This can be useful if you prefer to use a dedicated library to perform sanitization. |
-| `selector` | string, false | `false` | If a selector is provided, popover objects will be delegated to the specified targets. In practice, this is used to also apply popovers to dynamically added DOM elements (`jQuery.on` support). See [this issue]({{< param repo >}}/issues/4215) and [an informative example](https://codepen.io/Johann-S/pen/djJYPb). **Note**: `title` attribute must not be used as a selector. |
-| `template` | string | `'<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>'` | Base HTML to use when creating the popover. The popover's `title` will be injected into the `.popover-inner`. `.popover-arrow` will become the popover's arrow. The outermost wrapper element should have the `.popover` class and `role="popover"`. |
-| `title` | string, element, function | `''` | Default title value if `title` attribute isn't present. If a function is given, it will be called with its `this` reference set to the element that the popover is attached to. |
-| `trigger` | string | `'hover focus'` | How popover is triggered: click, hover, focus, manual. You may pass multiple triggers; separate them with a space. `'manual'` indicates that the popover will be triggered programmatically via the `.popover('show')`, `.popover('hide')` and `.popover('toggle')` methods; this value cannot be combined with any other trigger. `'hover'` on its own will result in popovers that cannot be triggered via the keyboard, and should only be used if alternative methods for conveying the same information for keyboard users is present. |
-{{< /bs-table >}}
-
-{{< callout info >}}
-#### Data attributes for individual popovers
-
-Options for individual popovers can alternatively be specified through the use of data attributes, as explained above.
-{{< /callout >}}
-
-#### Using function with `popperConfig`
-
-```js
-const popover = new bootstrap.Popover(element, {
- popperConfig(defaultBsPopperConfig) {
- // const newPopperConfig = {...}
- // use defaultBsPopperConfig if needed...
- // return newPopperConfig
- }
-})
-```
-
-### Methods
-
-{{< callout danger >}}
-{{< partial "callout-danger-async-methods.md" >}}
-{{< /callout >}}
-
-{{< bs-table "table" >}}
-| Method | Description |
-| --- | --- |
-| `disable` | Removes the ability for an element's popover to be shown. The popover will only be able to be shown if it is re-enabled. |
-| `dispose` | Hides and destroys an element's popover (Removes stored data on the DOM element). Popovers that use delegation (which are created using [the `selector` option](#options)) cannot be individually destroyed on descendant trigger elements. |
-| `enable` | Gives an element's popover the ability to be shown. **Popovers are enabled by default.** |
-| `getInstance` | _Static_ method which allows you to get the popover instance associated with a DOM element. |
-| `getOrCreateInstance` | *Static* method which allows you to get the popover instance associated with a DOM element, or create a new one in case it wasn't initialized. |
-| `hide` | Hides an element's popover. **Returns to the caller before the popover has actually been hidden** (i.e. before the `hidden.bs.popover` event occurs). This is considered a "manual" triggering of the popover. |
-| `setContent` | Gives a way to change the popover's content after its initialization. |
-| `show` | Reveals an element's popover. **Returns to the caller before the popover has actually been shown** (i.e. before the `shown.bs.popover` event occurs). This is considered a "manual" triggering of the popover. Popovers whose title and content are both zero-length are never displayed. |
-| `toggle` | Toggles an element's popover. **Returns to the caller before the popover has actually been shown or hidden** (i.e. before the `shown.bs.popover` or `hidden.bs.popover` event occurs). This is considered a "manual" triggering of the popover. |
-| `toggleEnabled` | Toggles the ability for an element's popover to be shown or hidden. |
-| `update` | Updates the position of an element's popover. |
-{{< /bs-table >}}
-
-
-```js
-// getOrCreateInstance example
-const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance
-
-// setContent example
-myPopover.setContent({
- '.popover-header': 'another title',
- '.popover-body': 'another content'
-})
-
-```
-
-{{< callout info >}}
-The `setContent` method accepts an `object` argument, where each property-key is a valid `string` selector within the popover template, and each related property-value can be `string` | `element` | `function` | `null`
-{{< /callout >}}
-
-### Events
-
-{{< bs-table >}}
-| Event | Description |
-| --- | --- |
-| `hide.bs.popover` | This event is fired immediately when the `hide` instance method has been called. |
-| `hidden.bs.popover` | This event is fired when the popover has finished being hidden from the user (will wait for CSS transitions to complete). |
-| `inserted.bs.popover` | This event is fired after the `show.bs.popover` event when the popover template has been added to the DOM. |
-| `show.bs.popover` | This event fires immediately when the `show` instance method is called. |
-| `shown.bs.popover` | This event is fired when the popover has been made visible to the user (will wait for CSS transitions to complete). |
-{{< /bs-table >}}
-
-```js
-const myPopoverTrigger = document.getElementById('myPopover')
-myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
- // do something...
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/progress.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/progress.md
deleted file mode 100644
index aa793683b..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/progress.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-layout: docs
-title: Progress
-description: Documentation and examples for using Bootstrap custom progress bars featuring support for stacked bars, animated backgrounds, and text labels.
-group: components
-toc: true
----
-
-## How it works
-
-Progress components are built with two HTML elements, some CSS to set the width, and a few attributes. We don't use [the HTML5 `<progress>` element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress), ensuring you can stack progress bars, animate them, and place text labels over them.
-
-- We use the `.progress` as a wrapper to indicate the max value of the progress bar.
-- We use the inner `.progress-bar` to indicate the progress so far.
-- The `.progress-bar` requires an inline style, utility class, or custom CSS to set their width.
-- The `.progress-bar` also requires some `role` and `aria` attributes to make it accessible, including an accessible name (using `aria-label`, `aria-labelledby`, or similar).
-
-Put that all together, and you have the following examples.
-
-{{< example >}}
-<div class="progress">
- <div class="progress-bar" role="progressbar" aria-label="Basic example" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar" role="progressbar" aria-label="Basic example" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar" role="progressbar" aria-label="Basic example" style="width: 50%" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar" role="progressbar" aria-label="Basic example" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar" role="progressbar" aria-label="Basic example" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-{{< /example >}}
-
-Bootstrap provides a handful of [utilities for setting width]({{< docsref "/utilities/sizing" >}}). Depending on your needs, these may help with quickly configuring progress.
-
-{{< example >}}
-<div class="progress">
- <div class="progress-bar w-75" role="progressbar" aria-label="Basic example" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-{{< /example >}}
-
-## Labels
-
-Add labels to your progress bars by placing text within the `.progress-bar`.
-
-{{< example >}}
-<div class="progress">
- <div class="progress-bar" role="progressbar" aria-label="Example with label" style="width: 25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">25%</div>
-</div>
-{{< /example >}}
-
-## Height
-
-We only set a `height` value on the `.progress`, so if you change that value the inner `.progress-bar` will automatically resize accordingly.
-
-{{< example >}}
-<div class="progress" style="height: 1px;">
- <div class="progress-bar" role="progressbar" aria-label="Example 1px high" style="width: 25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress" style="height: 20px;">
- <div class="progress-bar" role="progressbar" aria-label="Example 20px high" style="width: 25%;" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-{{< /example >}}
-
-## Backgrounds
-
-Use background utility classes to change the appearance of individual progress bars.
-
-{{< example >}}
-<div class="progress">
- <div class="progress-bar bg-success" role="progressbar" aria-label="Success example" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar bg-info" role="progressbar" aria-label="Info example" style="width: 50%" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar bg-warning" role="progressbar" aria-label="Warning example" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar bg-danger" role="progressbar" aria-label="Danger example" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-{{< /example >}}
-
-{{< callout info >}}
-{{< partial "callout-warning-color-assistive-technologies.md" >}}
-{{< /callout >}}
-
-## Multiple bars
-
-Include multiple progress bars in a progress component if you need.
-
-{{< example >}}
-<div class="progress">
- <div class="progress-bar" role="progressbar" aria-label="Segment one" style="width: 15%" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100"></div>
- <div class="progress-bar bg-success" role="progressbar" aria-label="Segment two" style="width: 30%" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100"></div>
- <div class="progress-bar bg-info" role="progressbar" aria-label="Segment three" style="width: 20%" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-{{< /example >}}
-
-## Striped
-
-Add `.progress-bar-striped` to any `.progress-bar` to apply a stripe via CSS gradient over the progress bar's background color.
-
-{{< example >}}
-<div class="progress">
- <div class="progress-bar progress-bar-striped" role="progressbar" aria-label="Default striped example" style="width: 10%" aria-valuenow="10" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar progress-bar-striped bg-success" role="progressbar" aria-label="Success striped example" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar progress-bar-striped bg-info" role="progressbar" aria-label="Info striped example" style="width: 50%" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar progress-bar-striped bg-warning" role="progressbar" aria-label="Warning striped example" style="width: 75%" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-<div class="progress">
- <div class="progress-bar progress-bar-striped bg-danger" role="progressbar" aria-label="Danger striped example" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
-</div>
-{{< /example >}}
-
-## Animated stripes
-
-The striped gradient can also be animated. Add `.progress-bar-animated` to `.progress-bar` to animate the stripes right to left via CSS3 animations.
-
-{{< example >}}
-<div class="progress">
- <div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-label="Animated striped example" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100" style="width: 75%"></div>
-</div>
-{{< /example >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, progress bars now use local CSS variables on `.progress` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="progress-css-vars" file="scss/_progress.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="progress-variables" file="scss/_variables.scss" >}}
-
-### Keyframes
-
-Used for creating the CSS animations for `.progress-bar-animated`. Included in `scss/_progress-bar.scss`.
-
-{{< scss-docs name="progress-keyframes" file="scss/_progress.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/scrollspy.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/scrollspy.md
deleted file mode 100644
index 53e3fa0d3..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/scrollspy.md
+++ /dev/null
@@ -1,427 +0,0 @@
----
-layout: docs
-title: Scrollspy
-description: Automatically update Bootstrap navigation or list group components based on scroll position to indicate which link is currently active in the viewport.
-group: components
-toc: true
----
-
-## How it works
-
-Scrollspy toggles the `.active` class on anchor (`<a>`) elements when the element with the `id` referenced by the anchor's `href` is scrolled into view. Scrollspy is best used in conjunction with a Bootstrap [nav component]({{< docsref "/components/navs-tabs" >}}) or [list group]({{< docsref "/components/list-group" >}}), but it will also work with any anchor elements in the current page. Here's how it works.
-
-- To start, scrollspy requires two things: a navigation, list group, or a simple set of links, plus a scrollable container. The scrollable container can be the `<body>` or a custom element with a set `height` and `overflow-y: scroll`.
-
-- On the scrollable container, add `data-bs-spy="scroll"` and `data-bs-target="#navId"` where `navId` is the unique `id` of the associated navigation. Be sure to also include a `tabindex="0"` to ensure keyboard access.
-
-- As you scroll the "spied" container, an `.active` class is added and removed from anchor links within the associated navigation. Links must have resolvable `id` targets, otherwise they're ignored. For example, a `<a href="#home">home</a>` must correspond to something in the DOM like `<div id="home"></div>`
-
-- Target elements that are not visible will be ignored. See the [Non-visible elements](#non-visible-elements) section below.
-
-## Examples
-
-### Navbar
-
-Scroll the area below the navbar and watch the active class change. Open the dropdown menu and watch the dropdown items be highlighted as well.
-
-<div class="bd-example">
- <nav id="navbar-example2" class="navbar bg-light px-3 mb-3">
- <a class="navbar-brand" href="#">Navbar</a>
- <ul class="nav nav-pills">
- <li class="nav-item">
- <a class="nav-link" href="#scrollspyHeading1">First</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#scrollspyHeading2">Second</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#scrollspyHeading3">Third</a></li>
- <li><a class="dropdown-item" href="#scrollspyHeading4">Fourth</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#scrollspyHeading5">Fifth</a></li>
- </ul>
- </li>
- </ul>
- </nav>
- <div class="scrollspy-example bg-light p-3 rounded-2" data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-root-margin="0px 0px -40%" data-bs-smooth-scroll="true" tabindex="0">
- <h4 id="scrollspyHeading1">First heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="scrollspyHeading2">Second heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="scrollspyHeading3">Third heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="scrollspyHeading4">Fourth heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="scrollspyHeading5">Fifth heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- </div>
-</div>
-
-```html
-<nav id="navbar-example2" class="navbar bg-light px-3 mb-3">
- <a class="navbar-brand" href="#">Navbar</a>
- <ul class="nav nav-pills">
- <li class="nav-item">
- <a class="nav-link" href="#scrollspyHeading1">First</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#scrollspyHeading2">Second</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#scrollspyHeading3">Third</a></li>
- <li><a class="dropdown-item" href="#scrollspyHeading4">Fourth</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#scrollspyHeading5">Fifth</a></li>
- </ul>
- </li>
- </ul>
-</nav>
-<div data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-root-margin="0px 0px -40%" data-bs-smooth-scroll="true" class="scrollspy-example bg-light p-3 rounded-2" tabindex="0">
- <h4 id="scrollspyHeading1">First heading</h4>
- <p>...</p>
- <h4 id="scrollspyHeading2">Second heading</h4>
- <p>...</p>
- <h4 id="scrollspyHeading3">Third heading</h4>
- <p>...</p>
- <h4 id="scrollspyHeading4">Fourth heading</h4>
- <p>...</p>
- <h4 id="scrollspyHeading5">Fifth heading</h4>
- <p>...</p>
-</div>
-```
-
-### Nested nav
-
-Scrollspy also works with nested `.nav`s. If a nested `.nav` is `.active`, its parents will also be `.active`. Scroll the area next to the navbar and watch the active class change.
-
-<div class="bd-example">
- <div class="row">
- <div class="col-4">
- <nav id="navbar-example3" class="h-100 flex-column align-items-stretch pe-4 border-end">
- <nav class="nav nav-pills flex-column">
- <a class="nav-link" href="#item-1">Item 1</a>
- <nav class="nav nav-pills flex-column">
- <a class="nav-link ms-3 my-1" href="#item-1-1">Item 1-1</a>
- <a class="nav-link ms-3 my-1" href="#item-1-2">Item 1-2</a>
- </nav>
- <a class="nav-link" href="#item-2">Item 2</a>
- <a class="nav-link" href="#item-3">Item 3</a>
- <nav class="nav nav-pills flex-column">
- <a class="nav-link ms-3 my-1" href="#item-3-1">Item 3-1</a>
- <a class="nav-link ms-3 my-1" href="#item-3-2">Item 3-2</a>
- </nav>
- </nav>
- </nav>
- </div>
- <div class="col-8">
- <div data-bs-spy="scroll" data-bs-target="#navbar-example3" data-bs-smooth-scroll="true" class="scrollspy-example-2" tabindex="0">
- <div id="item-1">
- <h4>Item 1</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
- </div>
- <div id="item-1-1">
- <h5>Item 1-1</h5>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
- </div>
- <div id="item-1-2">
- <h5>Item 1-2</h5>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
- </div>
- <div id="item-2">
- <h4>Item 2</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
- </div>
- <div id="item-3">
- <h4>Item 3</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
- </div>
- <div id="item-3-1">
- <h5>Item 3-1</h5>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
- </div>
- <div id="item-3-2">
- <h5>Item 3-2</h5>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
- </div>
- </div>
- </div>
- </div>
-</div>
-
-```html
-<div class="row">
- <div class="col-4">
- <nav id="navbar-example3" class="h-100 flex-column align-items-stretch pe-4 border-end">
- <nav class="nav nav-pills flex-column">
- <a class="nav-link" href="#item-1">Item 1</a>
- <nav class="nav nav-pills flex-column">
- <a class="nav-link ms-3 my-1" href="#item-1-1">Item 1-1</a>
- <a class="nav-link ms-3 my-1" href="#item-1-2">Item 1-2</a>
- </nav>
- <a class="nav-link" href="#item-2">Item 2</a>
- <a class="nav-link" href="#item-3">Item 3</a>
- <nav class="nav nav-pills flex-column">
- <a class="nav-link ms-3 my-1" href="#item-3-1">Item 3-1</a>
- <a class="nav-link ms-3 my-1" href="#item-3-2">Item 3-2</a>
- </nav>
- </nav>
- </nav>
- </div>
-
- <div class="col-8">
- <div data-bs-spy="scroll" data-bs-target="#navbar-example3" data-bs-smooth-scroll="true" class="scrollspy-example-2" tabindex="0">
- <div id="item-1">
- <h4>Item 1</h4>
- <p>...</p>
- </div>
- <div id="item-1-1">
- <h5>Item 1-1</h5>
- <p>...</p>
- </div>
- <div id="item-1-2">
- <h5>Item 1-2</h5>
- <p>...</p>
- </div>
- <div id="item-2">
- <h4>Item 2</h4>
- <p>...</p>
- </div>
- <div id="item-3">
- <h4>Item 3</h4>
- <p>...</p>
- </div>
- <div id="item-3-1">
- <h5>Item 3-1</h5>
- <p>...</p>
- </div>
- <div id="item-3-2">
- <h5>Item 3-2</h5>
- <p>...</p>
- </div>
- </div>
- </div>
-</div>
-```
-
-### List group
-
-Scrollspy also works with `.list-group`s. Scroll the area next to the list group and watch the active class change.
-
-<div class="bd-example">
- <div class="row">
- <div class="col-4">
- <div id="list-example" class="list-group">
- <a class="list-group-item list-group-item-action" href="#list-item-1">Item 1</a>
- <a class="list-group-item list-group-item-action" href="#list-item-2">Item 2</a>
- <a class="list-group-item list-group-item-action" href="#list-item-3">Item 3</a>
- <a class="list-group-item list-group-item-action" href="#list-item-4">Item 4</a>
- </div>
- </div>
- <div class="col-8">
- <div data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
- <h4 id="list-item-1">Item 1</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="list-item-2">Item 2</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="list-item-3">Item 3</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="list-item-4">Item 4</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- </div>
- </div>
- </div>
-</div>
-
-```html
-<div class="row">
- <div class="col-4">
- <div id="list-example" class="list-group">
- <a class="list-group-item list-group-item-action" href="#list-item-1">Item 1</a>
- <a class="list-group-item list-group-item-action" href="#list-item-2">Item 2</a>
- <a class="list-group-item list-group-item-action" href="#list-item-3">Item 3</a>
- <a class="list-group-item list-group-item-action" href="#list-item-4">Item 4</a>
- </div>
- </div>
- <div class="col-8">
- <div data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
- <h4 id="list-item-1">Item 1</h4>
- <p>...</p>
- <h4 id="list-item-2">Item 2</h4>
- <p>...</p>
- <h4 id="list-item-3">Item 3</h4>
- <p>...</p>
- <h4 id="list-item-4">Item 4</h4>
- <p>...</p>
- </div>
- </div>
-</div>
-```
-
-### Simple anchors
-
-Scrollspy is not limited to nav components and list groups, so it will work on any `<a>` anchor elements in the current document. Scroll the area and watch the `.active` class change.
-
-<div class="bd-example">
- <div class="row">
- <div class="col-4">
- <div id="simple-list-example" class="d-flex flex-column gap-2 simple-list-example-scrollspy text-center">
- <a class="p-1 rounded" href="#simple-list-item-1">Item 1</a>
- <a class="p-1 rounded" href="#simple-list-item-2">Item 2</a>
- <a class="p-1 rounded" href="#simple-list-item-3">Item 3</a>
- <a class="p-1 rounded" href="#simple-list-item-4">Item 4</a>
- <a class="p-1 rounded" href="#simple-list-item-5">Item 5</a>
- </div>
- </div>
- <div class="col-8">
- <div data-bs-spy="scroll" data-bs-target="#simple-list-example" data-bs-offset="0" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
- <h4 id="simple-list-item-1">Item 1</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="simple-list-item-2">Item 2</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="simple-list-item-3">Item 3</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="simple-list-item-4">Item 4</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="simple-list-item-5">Item 5</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- </div>
- </div>
- </div>
-</div>
-
-```html
-<div class="row">
- <div class="col-4">
- <div id="simple-list-example" class="d-flex flex-column gap-2 simple-list-example-scrollspy text-center">
- <a class="p-1 rounded" href="#simple-list-item-1">Item 1</a>
- <a class="p-1 rounded" href="#simple-list-item-2">Item 2</a>
- <a class="p-1 rounded" href="#simple-list-item-3">Item 3</a>
- <a class="p-1 rounded" href="#simple-list-item-4">Item 4</a>
- <a class="p-1 rounded" href="#simple-list-item-5">Item 5</a>
- </div>
- </div>
- <div class="col-8">
- <div data-bs-spy="scroll" data-bs-target="#simple-list-example" data-bs-offset="0" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
- <h4 id="simple-list-item-1">Item 1</h4>
- <p>...</p>
- <h4 id="simple-list-item-2">Item 2</h4>
- <p>...</p>
- <h4 id="simple-list-item-3">Item 3</h4>
- <p>...</p>
- <h4 id="simple-list-item-4">Item 4</h4>
- <p>...</p>
- <h4 id="simple-list-item-5">Item 5</h4>
- <p>...</p>
- </div>
- </div>
-</div>
-```
-
-## Non-visible elements
-
-Target elements that aren’t visible will be ignored and their corresponding nav items won't receive an `.active` class. Scrollspy instances initialized in a non-visible wrapper will ignore all target elements. Use the `refresh` method to check for observable elements once the wrapper becomes visible.
-
-```js
-document.querySelectorAll('#nav-tab>[data-bs-toggle="tab"]').forEach(el => {
- el.addEventListener('shown.bs.tab', () => {
- const target = el.getAttribute('data-bs-target')
- const scrollElem = document.querySelector(`${target} [data-bs-spy="scroll"]`)
- bootstrap.ScrollSpy.getOrCreateInstance(scrollElem).refresh()
- })
-})
-```
-
-## Usage
-
-### Via data attributes
-
-To easily add scrollspy behavior to your topbar navigation, add `data-bs-spy="scroll"` to the element you want to spy on (most typically this would be the `<body>`). Then add the `data-bs-target` attribute with the `id` or class name of the parent element of any Bootstrap `.nav` component.
-
-```html
-<body data-bs-spy="scroll" data-bs-target="#navbar-example">
- ...
- <div id="navbar-example">
- <ul class="nav nav-tabs" role="tablist">
- ...
- </ul>
- </div>
- ...
-</body>
-```
-
-### Via JavaScript
-
-```js
-const scrollSpy = new bootstrap.ScrollSpy(document.body, {
- target: '#navbar-example'
-})
-```
-
-### Options
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-{{< bs-table "table" >}}
-| Name | Type | Default | Description |
-| --- | --- | --- | --- |
-| `rootMargin` | string | `0px 0px -25%` | Intersection Observer [rootMargin](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/rootMargin) valid units, when calculating scroll position. |
-| `smoothScroll` | boolean | `false` | Enables smooth scrolling when a user clicks on a link that refers to ScrollSpy observables. |
-| `target` | string, DOM element | `null` | Specifies element to apply Scrollspy plugin. |
-| `threshold` | array | `[0.1, 0.5, 1]` | `IntersectionObserver` [threshold](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/IntersectionObserver#threshold) valid input, when calculating scroll position. |
-
-{{< /bs-table >}}
-
-{{< callout warning >}}
-**Deprecated Options**
-
-Up until v5.1.3 we were using `offset` & `method` options, which are now deprecated and replaced by `rootMargin`.
-To keep backwards compatibility, we will continue to parse a given `offset` to `rootMargin`, but this feature will be removed in **v6**.
-{{< /callout >}}
-
-### Methods
-
-{{< bs-table "table" >}}
-| Method | Description |
-| --- | --- |
-| `dispose` | Destroys an element's scrollspy. (Removes stored data on the DOM element) |
-| `getInstance` | *Static* method to get the scrollspy instance associated with a DOM element. |
-| `getOrCreateInstance` | *Static* method to get the scrollspy instance associated with a DOM element, or to create a new one in case it wasn't initialized. |
-| `refresh` | When adding or removing elements in the DOM, you'll need to call the refresh method. |
-{{< /bs-table >}}
-
-Here's an example using the refresh method:
-
-```js
-const dataSpyList = document.querySelectorAll('[data-bs-spy="scroll"]')
-dataSpyList.forEach(dataSpyEl => {
- bootstrap.ScrollSpy.getInstance(dataSpyEl).refresh()
-})
-```
-
-### Events
-
-{{< bs-table "table" >}}
-| Event | Description |
-| --- | --- |
-| `activate.bs.scrollspy` | This event fires on the scroll element whenever an anchor is activated by the scrollspy. |
-{{< /bs-table >}}
-
-```js
-const firstScrollSpyEl = document.querySelector('[data-bs-spy="scroll"]')
-firstScrollSpyEl.addEventListener('activate.bs.scrollspy', () => {
- // do something...
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/spinners.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/spinners.md
deleted file mode 100644
index bc1b1e64f..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/spinners.md
+++ /dev/null
@@ -1,213 +0,0 @@
----
-layout: docs
-title: Spinners
-description: Indicate the loading state of a component or page with Bootstrap spinners, built entirely with HTML, CSS, and no JavaScript.
-group: components
-toc: true
----
-
-## About
-
-Bootstrap "spinners" can be used to show the loading state in your projects. They're built only with HTML and CSS, meaning you don't need any JavaScript to create them. You will, however, need some custom JavaScript to toggle their visibility. Their appearance, alignment, and sizing can be easily customized with our amazing utility classes.
-
-For accessibility purposes, each loader here includes `role="status"` and a nested `<span class="visually-hidden">Loading...</span>`.
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-## Border spinner
-
-Use the border spinners for a lightweight loading indicator.
-
-{{< example >}}
-<div class="spinner-border" role="status">
- <span class="visually-hidden">Loading...</span>
-</div>
-{{< /example >}}
-
-### Colors
-
-The border spinner uses `currentColor` for its `border-color`, meaning you can customize the color with [text color utilities][color]. You can use any of our text color utilities on the standard spinner.
-
-{{< example >}}
-{{< spinner.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<div class="spinner-border text-{{ .name }}" role="status">
- <span class="visually-hidden">Loading...</span>
-</div>
-{{- end -}}
-{{< /spinner.inline >}}
-{{< /example >}}
-
-{{< callout info >}}
-**Why not use `border-color` utilities?** Each border spinner specifies a `transparent` border for at least one side, so `.border-{color}` utilities would override that.
-{{< /callout >}}
-
-## Growing spinner
-
-If you don't fancy a border spinner, switch to the grow spinner. While it doesn't technically spin, it does repeatedly grow!
-
-{{< example >}}
-<div class="spinner-grow" role="status">
- <span class="visually-hidden">Loading...</span>
-</div>
-{{< /example >}}
-
-Once again, this spinner is built with `currentColor`, so you can easily change its appearance with [text color utilities][color]. Here it is in blue, along with the supported variants.
-
-{{< example >}}
-{{< spinner.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<div class="spinner-grow text-{{ .name }}" role="status">
- <span class="visually-hidden">Loading...</span>
-</div>
-{{- end -}}
-{{< /spinner.inline >}}
-{{< /example >}}
-
-## Alignment
-
-Spinners in Bootstrap are built with `rem`s, `currentColor`, and `display: inline-flex`. This means they can easily be resized, recolored, and quickly aligned.
-
-### Margin
-
-Use [margin utilities][margin] like `.m-5` for easy spacing.
-
-{{< example >}}
-<div class="spinner-border m-5" role="status">
- <span class="visually-hidden">Loading...</span>
-</div>
-{{< /example >}}
-
-### Placement
-
-Use [flexbox utilities][flex], [float utilities][float], or [text alignment][text] utilities to place spinners exactly where you need them in any situation.
-
-#### Flex
-
-{{< example >}}
-<div class="d-flex justify-content-center">
- <div class="spinner-border" role="status">
- <span class="visually-hidden">Loading...</span>
- </div>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="d-flex align-items-center">
- <strong>Loading...</strong>
- <div class="spinner-border ms-auto" role="status" aria-hidden="true"></div>
-</div>
-{{< /example >}}
-
-#### Floats
-
-{{< example >}}
-<div class="clearfix">
- <div class="spinner-border float-end" role="status">
- <span class="visually-hidden">Loading...</span>
- </div>
-</div>
-{{< /example >}}
-
-#### Text align
-
-{{< example >}}
-<div class="text-center">
- <div class="spinner-border" role="status">
- <span class="visually-hidden">Loading...</span>
- </div>
-</div>
-{{< /example >}}
-
-## Size
-
-Add `.spinner-border-sm` and `.spinner-grow-sm` to make a smaller spinner that can quickly be used within other components.
-
-{{< example >}}
-<div class="spinner-border spinner-border-sm" role="status">
- <span class="visually-hidden">Loading...</span>
-</div>
-<div class="spinner-grow spinner-grow-sm" role="status">
- <span class="visually-hidden">Loading...</span>
-</div>
-{{< /example >}}
-
-Or, use custom CSS or inline styles to change the dimensions as needed.
-
-{{< example >}}
-<div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">
- <span class="visually-hidden">Loading...</span>
-</div>
-<div class="spinner-grow" style="width: 3rem; height: 3rem;" role="status">
- <span class="visually-hidden">Loading...</span>
-</div>
-{{< /example >}}
-
-## Buttons
-
-Use spinners within buttons to indicate an action is currently processing or taking place. You may also swap the text out of the spinner element and utilize button text as needed.
-
-{{< example >}}
-<button class="btn btn-primary" type="button" disabled>
- <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
- <span class="visually-hidden">Loading...</span>
-</button>
-<button class="btn btn-primary" type="button" disabled>
- <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
- Loading...
-</button>
-{{< /example >}}
-
-{{< example >}}
-<button class="btn btn-primary" type="button" disabled>
- <span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
- <span class="visually-hidden">Loading...</span>
-</button>
-<button class="btn btn-primary" type="button" disabled>
- <span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
- Loading...
-</button>
-{{< /example >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, spinners now use local CSS variables on `.spinner-border` and `.spinner-grow` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-Border spinner variables:
-
-{{< scss-docs name="spinner-border-css-vars" file="scss/_spinners.scss" >}}
-
-Growing spinner variables:
-
-{{< scss-docs name="spinner-grow-css-vars" file="scss/_spinners.scss" >}}
-
-For both spinners, small spinner modifier classes are used to update the values of these CSS variables as needed. For example, the `.spinner-border-sm` class does the following:
-
-{{< scss-docs name="spinner-border-sm-css-vars" file="scss/_spinners.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="spinner-variables" file="scss/_variables.scss" >}}
-
-### Keyframes
-
-Used for creating the CSS animations for our spinners. Included in `scss/_spinners.scss`.
-
-{{< scss-docs name="spinner-border-keyframes" file="scss/_spinners.scss" >}}
-
-{{< scss-docs name="spinner-grow-keyframes" file="scss/_spinners.scss" >}}
-
-
-[color]: {{< docsref "/utilities/colors" >}}
-[display]: {{< docsref "/utilities/display" >}}
-[flex]: {{< docsref "/utilities/flex" >}}
-[float]: {{< docsref "/utilities/float" >}}
-[margin]: {{< docsref "/utilities/spacing" >}}
-[sizing]: {{< docsref "/utilities/sizing" >}}
-[text]: {{< docsref "/utilities/text" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/toasts.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/toasts.md
deleted file mode 100644
index abcb3928a..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/toasts.md
+++ /dev/null
@@ -1,401 +0,0 @@
----
-layout: docs
-title: Toasts
-description: Push notifications to your visitors with a toast, a lightweight and easily customizable alert message.
-group: components
-toc: true
----
-
-Toasts are lightweight notifications designed to mimic the push notifications that have been popularized by mobile and desktop operating systems. They're built with flexbox, so they're easy to align and position.
-
-## Overview
-
-Things to know when using the toast plugin:
-
-- Toasts are opt-in for performance reasons, so **you must initialize them yourself**.
-- Toasts will automatically hide if you do not specify `autohide: false`.
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-## Examples
-
-### Basic
-
-To encourage extensible and predictable toasts, we recommend a header and body. Toast headers use `display: flex`, allowing easy alignment of content thanks to our margin and flexbox utilities.
-
-Toasts are as flexible as you need and have very little required markup. At a minimum, we require a single element to contain your "toasted" content and strongly encourage a dismiss button.
-
-{{< example class="bg-light" >}}
-<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small>11 mins ago</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
-</div>
-{{< /example >}}
-
-{{< callout warning >}}
-Previously, our scripts dynamically added the `.hide` class to completely hide a toast (with `display:none`, rather than just with `opacity:0`). This is now not necessary anymore. However, for backwards compatibility, our script will continue to toggle the class (even though there is no practical need for it) until the next major version.
-{{< /callout >}}
-
-### Live example
-
-Click the button below to show a toast (positioned with our utilities in the lower right corner) that has been hidden by default.
-
-<div class="toast-container position-fixed bottom-0 end-0 p-3">
- <div id="liveToast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small>11 mins ago</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
- </div>
-</div>
-
-<div class="bd-example">
- <button type="button" class="btn btn-primary" id="liveToastBtn">Show live toast</button>
-</div>
-
-```html
-<button type="button" class="btn btn-primary" id="liveToastBtn">Show live toast</button>
-
-<div class="toast-container position-fixed bottom-0 end-0 p-3">
- <div id="liveToast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- <img src="..." class="rounded me-2" alt="...">
- <strong class="me-auto">Bootstrap</strong>
- <small>11 mins ago</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
- </div>
-</div>
-```
-
-We use the following JavaScript to trigger our live toast demo:
-
-```js
-const toastTrigger = document.getElementById('liveToastBtn')
-const toastLiveExample = document.getElementById('liveToast')
-if (toastTrigger) {
- toastTrigger.addEventListener('click', () => {
- const toast = new bootstrap.Toast(toastLiveExample)
-
- toast.show()
- })
-}
-```
-
-### Translucent
-
-Toasts are slightly translucent to blend in with what's below them.
-
-{{< example class="bg-dark" >}}
-<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small class="text-muted">11 mins ago</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
-</div>
-{{< /example >}}
-
-### Stacking
-
-You can stack toasts by wrapping them in a toast container, which will vertically add some spacing.
-
-{{< example class="bg-light" >}}
-<div class="toast-container position-static">
- <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small class="text-muted">just now</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- See? Just like this.
- </div>
- </div>
-
- <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small class="text-muted">2 seconds ago</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- Heads up, toasts will stack automatically
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Custom content
-
-Customize your toasts by removing sub-components, tweaking them with [utilities]({{< docsref "/utilities/api" >}}), or by adding your own markup. Here we've created a simpler toast by removing the default `.toast-header`, adding a custom hide icon from [Bootstrap Icons]({{< param icons >}}), and using some [flexbox utilities]({{< docsref "/utilities/flex" >}}) to adjust the layout.
-
-{{< example class="bg-light" >}}
-<div class="toast align-items-center" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="d-flex">
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
- <button type="button" class="btn-close me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
-</div>
-{{< /example >}}
-
-Alternatively, you can also add additional controls and components to toasts.
-
-{{< example class="bg-light" >}}
-<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-body">
- Hello, world! This is a toast message.
- <div class="mt-2 pt-2 border-top">
- <button type="button" class="btn btn-primary btn-sm">Take action</button>
- <button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="toast">Close</button>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Color schemes
-
-Building on the above example, you can create different toast color schemes with our [color]({{< docsref "/utilities/colors" >}}) and [background]({{< docsref "/utilities/background" >}}) utilities. Here we've added `.text-bg-primary` to the `.toast`, and then added `.btn-close-white` to our close button. For a crisp edge, we remove the default border with `.border-0`.
-
-{{< example class="bg-light" >}}
-<div class="toast align-items-center text-bg-primary border-0" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="d-flex">
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
- <button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
-</div>
-{{< /example >}}
-
-## Placement
-
-Place toasts with custom CSS as you need them. The top right is often used for notifications, as is the top middle. If you're only ever going to show one toast at a time, put the positioning styles right on the `.toast`.
-
-{{< example stackblitz_add_js="true" >}}
-<form>
- <div class="mb-3">
- <label for="selectToastPlacement">Toast placement</label>
- <select class="form-select mt-2" id="selectToastPlacement">
- <option value="" selected>Select a position...</option>
- <option value="top-0 start-0">Top left</option>
- <option value="top-0 start-50 translate-middle-x">Top center</option>
- <option value="top-0 end-0">Top right</option>
- <option value="top-50 start-0 translate-middle-y">Middle left</option>
- <option value="top-50 start-50 translate-middle">Middle center</option>
- <option value="top-50 end-0 translate-middle-y">Middle right</option>
- <option value="bottom-0 start-0">Bottom left</option>
- <option value="bottom-0 start-50 translate-middle-x">Bottom center</option>
- <option value="bottom-0 end-0">Bottom right</option>
- </select>
- </div>
-</form>
-<div aria-live="polite" aria-atomic="true" class="bg-dark position-relative bd-example-toasts">
- <div class="toast-container p-3" id="toastPlacement">
- <div class="toast">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small>11 mins ago</small>
- </div>
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-For systems that generate more notifications, consider using a wrapping element so they can easily stack.
-
-{{< example class="bg-dark bd-example-toasts p-0" >}}
-<div aria-live="polite" aria-atomic="true" class="position-relative">
- <!-- Position it: -->
- <!-- - `.toast-container` for spacing between toasts -->
- <!-- - `top-0` & `end-0` to position the toasts in the upper right corner -->
- <!-- - `.p-3` to prevent the toasts from sticking to the edge of the container -->
- <div class="toast-container top-0 end-0 p-3">
-
- <!-- Then put toasts within -->
- <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small class="text-muted">just now</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- See? Just like this.
- </div>
- </div>
-
- <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small class="text-muted">2 seconds ago</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- Heads up, toasts will stack automatically
- </div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-You can also get fancy with flexbox utilities to align toasts horizontally and/or vertically.
-
-{{< example class="bg-dark bd-example-toasts d-flex" >}}
-<!-- Flexbox container for aligning the toasts -->
-<div aria-live="polite" aria-atomic="true" class="d-flex justify-content-center align-items-center w-100">
-
- <!-- Then put toasts within -->
- <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small>11 mins ago</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Accessibility
-
-Toasts are intended to be small interruptions to your visitors or users, so to help those with screen readers and similar assistive technologies, you should wrap your toasts in an [`aria-live` region](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions). Changes to live regions (such as injecting/updating a toast component) are automatically announced by screen readers without needing to move the user's focus or otherwise interrupt the user. Additionally, include `aria-atomic="true"` to ensure that the entire toast is always announced as a single (atomic) unit, rather than just announcing what was changed (which could lead to problems if you only update part of the toast's content, or if displaying the same toast content at a later point in time). If the information needed is important for the process, e.g. for a list of errors in a form, then use the [alert component]({{< docsref "/components/alerts" >}}) instead of toast.
-
-Note that the live region needs to be present in the markup *before* the toast is generated or updated. If you dynamically generate both at the same time and inject them into the page, they will generally not be announced by assistive technologies.
-
-You also need to adapt the `role` and `aria-live` level depending on the content. If it's an important message like an error, use `role="alert" aria-live="assertive"`, otherwise use `role="status" aria-live="polite"` attributes.
-
-As the content you're displaying changes, be sure to update the [`delay` timeout](#options) so that users have enough time to read the toast.
-
-```html
-<div class="toast" role="alert" aria-live="polite" aria-atomic="true" data-bs-delay="10000">
- <div role="alert" aria-live="assertive" aria-atomic="true">...</div>
-</div>
-```
-
-When using `autohide: false`, you must add a close button to allow users to dismiss the toast.
-
-{{< example class="bg-light" >}}
-<div role="alert" aria-live="assertive" aria-atomic="true" class="toast" data-bs-autohide="false">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small>11 mins ago</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
-</div>
-{{< /example >}}
-
-While technically it's possible to add focusable/actionable controls (such as additional buttons or links) in your toast, you should avoid doing this for autohiding toasts. Even if you give the toast a long [`delay` timeout](#options), keyboard and assistive technology users may find it difficult to reach the toast in time to take action (since toasts don't receive focus when they are displayed). If you absolutely must have further controls, we recommend using a toast with `autohide: false`.
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap's evolving CSS variables approach, toasts now use local CSS variables on `.toast` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="toast-css-vars" file="scss/_toasts.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="toast-variables" file="scss/_variables.scss" >}}
-
-## Usage
-
-Initialize toasts via JavaScript:
-
-```js
-const toastElList = document.querySelectorAll('.toast')
-const toastList = [...toastElList].map(toastEl => new bootstrap.Toast(toastEl, option))
-```
-
-### Triggers
-
-{{% js-dismiss "toast" %}}
-
-### Options
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-{{< bs-table "table" >}}
-| Name | Type | Default | Description |
-| --- | --- | --- | --- |
-| `animation` | boolean | `true` | Apply a CSS fade transition to the toast. |
-| `autohide` | boolean | `true` | Automatically hide the toast after the delay. |
-| `delay` | number | `5000` | Delay in milliseconds before hiding the toast. |
-{{< /bs-table >}}
-
-### Methods
-
-{{< callout danger >}}
-{{< partial "callout-danger-async-methods.md" >}}
-{{< /callout >}}
-
-{{< bs-table "table" >}}
-| Method | Description |
-| --- | --- |
-| `dispose` | Hides an element's toast. Your toast will remain on the DOM but won't show anymore. |
-| `getInstance` | *Static* method which allows you to get the toast instance associated with a DOM element. <br> For example: `const myToastEl = document.getElementById('myToastEl')` `const myToast = bootstrap.Toast.getInstance(myToastEl)` Returns a Bootstrap toast instance. |
-| `getOrCreateInstance` | *Static* method which allows you to get the toast instance associated with a DOM element, or create a new one, in case it wasn't initialized. <br>`const myToastEl = document.getElementById('myToastEl')` `const myToast = bootstrap.Toast.getOrCreateInstance(myToastEl)` Returns a Bootstrap toast instance. |
-| `hide` | Hides an element's toast. **Returns to the caller before the toast has actually been hidden** (i.e. before the `hidden.bs.toast` event occurs). You have to manually call this method if you made `autohide` to `false`. |
-| `isShown` | Returns a boolean according to toast's visibility state. |
-| `show` | Reveals an element's toast. **Returns to the caller before the toast has actually been shown** (i.e. before the `shown.bs.toast` event occurs). You have to manually call this method, instead your toast won't show. |
-{{< /bs-table >}}
-
-### Events
-
-{{< bs-table "table" >}}
-| Event | Description |
-| --- | --- |
-| `hide.bs.toast` | This event is fired immediately when the `hide` instance method has been called. |
-| `hidden.bs.toast` | This event is fired when the toast has finished being hidden from the user. |
-| `show.bs.toast` | This event fires immediately when the `show` instance method is called. |
-| `shown.bs.toast` | This event is fired when the toast has been made visible to the user. |
-{{< /bs-table >}}
-
-```js
-const myToastEl = document.getElementById('myToast')
-myToastEl.addEventListener('hidden.bs.toast', () => {
- // do something...
-})
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/tooltips.md b/vendor/twbs/bootstrap/site/content/docs/5.2/components/tooltips.md
deleted file mode 100644
index a106d9de8..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/tooltips.md
+++ /dev/null
@@ -1,301 +0,0 @@
----
-layout: docs
-title: Tooltips
-description: Documentation and examples for adding custom Bootstrap tooltips with CSS and JavaScript using CSS3 for animations and data-bs-attributes for local title storage.
-group: components
-toc: true
----
-
-## Overview
-
-Things to know when using the tooltip plugin:
-
-- Tooltips rely on the third party library [Popper](https://popper.js.org/) for positioning. You must include [popper.min.js]({{< param "cdn.popper" >}}) before `bootstrap.js`, or use one `bootstrap.bundle.min.js` which contains Popper.
-- Tooltips are opt-in for performance reasons, so **you must initialize them yourself**.
-- Tooltips with zero-length titles are never displayed.
-- Specify `container: 'body'` to avoid rendering problems in more complex components (like our input groups, button groups, etc).
-- Triggering tooltips on hidden elements will not work.
-- Tooltips for `.disabled` or `disabled` elements must be triggered on a wrapper element.
-- When triggered from hyperlinks that span multiple lines, tooltips will be centered. Use `white-space: nowrap;` on your `<a>`s to avoid this behavior.
-- Tooltips must be hidden before their corresponding elements have been removed from the DOM.
-- Tooltips can be triggered thanks to an element inside a shadow DOM.
-
-Got all that? Great, let's see how they work with some examples.
-
-{{< callout info >}}
-{{< partial "callout-info-sanitizer.md" >}}
-{{< /callout >}}
-
-{{< callout info >}}
-{{< partial "callout-info-prefersreducedmotion.md" >}}
-{{< /callout >}}
-
-## Examples
-
-### Enable tooltips
-
-As mentioned above, you must initialize tooltips before they can be used. One way to initialize all tooltips on a page would be to select them by their `data-bs-toggle` attribute, like so:
-
-```js
-const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
-const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
-```
-
-### Tooltips on links
-
-Hover over the links below to see tooltips:
-
-{{< example class="tooltip-demo" stackblitz_add_js="true" >}}
-<p class="muted">Placeholder text to demonstrate some <a href="#" data-bs-toggle="tooltip" data-bs-title="Default tooltip">inline links</a> with tooltips. This is now just filler, no killer. Content placed here just to mimic the presence of <a href="#" data-bs-toggle="tooltip" data-bs-title="Another tooltip">real text</a>. And all that just to give you an idea of how tooltips would look when used in real-world situations. So hopefully you've now seen how <a href="#" data-bs-toggle="tooltip" data-bs-title="Another one here too">these tooltips on links</a> can work in practice, once you use them on <a href="#" data-bs-toggle="tooltip" data-bs-title="The last tip!">your own</a> site or project.
-</p>
-{{< /example >}}
-
-{{< callout warning >}}
-{{< partial "callout-warning-data-bs-title-vs-title.md" >}}
-{{< /callout >}}
-
-### Custom tooltips
-
-{{< added-in "5.2.0" >}}
-
-You can customize the appearance of tooltips using [CSS variables](#variables). We set a custom class with `data-bs-custom-class="custom-tooltip"` to scope our custom appearance and use it to override a local CSS variable.
-
-{{< scss-docs name="custom-tooltip" file="site/assets/scss/_component-examples.scss" >}}
-
-
-{{< example class="tooltip-demo" stackblitz_add_js="true" >}}
-<button type="button" class="btn btn-secondary"
- data-bs-toggle="tooltip" data-bs-placement="top"
- data-bs-custom-class="custom-tooltip"
- data-bs-title="This top tooltip is themed via CSS variables.">
- Custom tooltip
-</button>
-{{< /example >}}
-
-### Directions
-
-Hover over the buttons below to see the four tooltips directions: top, right, bottom, and left. Directions are mirrored when using Bootstrap in RTL.
-
-<div class="bd-example tooltip-demo">
- <div class="bd-example-tooltips">
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="Tooltip on top">Tooltip on top</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip on right">Tooltip on right</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip on bottom">Tooltip on bottom</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip on left">Tooltip on left</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">Tooltip with HTML</button>
- </div>
-</div>
-
-```html
-<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="Tooltip on top">
- Tooltip on top
-</button>
-<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip on right">
- Tooltip on right
-</button>
-<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip on bottom">
- Tooltip on bottom
-</button>
-<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip on left">
- Tooltip on left
-</button>
-```
-
-And with custom HTML added:
-
-```html
-<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
- Tooltip with HTML
-</button>
-```
-
-With an SVG:
-
-<div class="bd-example tooltip-demo">
- <a href="#" class="d-inline-block" data-bs-toggle="tooltip" data-bs-title="Default tooltip">
- <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 100 100">
- <rect width="100%" height="100%" fill="#563d7c"/>
- <circle cx="50" cy="50" r="30" fill="#007bff"/>
- </svg>
- </a>
-</div>
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-As part of Bootstrap’s evolving CSS variables approach, tooltips now use local CSS variables on `.tooltip` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
-
-{{< scss-docs name="tooltip-css-vars" file="scss/_tooltip.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="tooltip-variables" file="scss/_variables.scss" >}}
-
-## Usage
-
-The tooltip plugin generates content and markup on demand, and by default places tooltips after their trigger element.
-
-Trigger the tooltip via JavaScript:
-
-```js
-const exampleEl = document.getElementById('example')
-const tooltip = new bootstrap.Tooltip(exampleEl, options)
-```
-
-{{< callout warning >}}
-##### Overflow `auto` and `scroll`
-
-Tooltip position attempts to automatically change when a **parent container** has `overflow: auto` or `overflow: scroll` like our `.table-responsive`, but still keeps the original placement's positioning. To resolve this, set the [`boundary` option](https://popper.js.org/docs/v2/modifiers/flip/#boundary) (for the flip modifier using the `popperConfig` option) to any HTMLElement to override the default value, `'clippingParents'`, such as `document.body`:
-
-```js
-const tooltip = new bootstrap.Tooltip('#example', {
- boundary: document.body // or document.querySelector('#boundary')
-})
-```
-{{< /callout >}}
-
-### Markup
-
-The required markup for a tooltip is only a `data` attribute and `title` on the HTML element you wish to have a tooltip. The generated markup of a tooltip is rather simple, though it does require a position (by default, set to `top` by the plugin).
-
-{{< callout warning >}}
-##### Making tooltips work for keyboard and assistive technology users
-
-You should only add tooltips to HTML elements that are traditionally keyboard-focusable and interactive (such as links or form controls). Although arbitrary HTML elements (such as `<span>`s) can be made focusable by adding the `tabindex="0"` attribute, this will add potentially annoying and confusing tab stops on non-interactive elements for keyboard users, and most assistive technologies currently do not announce the tooltip in this situation. Additionally, do not rely solely on `hover` as the trigger for your tooltip, as this will make your tooltips impossible to trigger for keyboard users.
-{{< /callout >}}
-
-```html
-<!-- HTML to write -->
-<a href="#" data-bs-toggle="tooltip" data-bs-title="Some tooltip text!">Hover over me</a>
-
-<!-- Generated markup by the plugin -->
-<div class="tooltip bs-tooltip-top" role="tooltip">
- <div class="tooltip-arrow"></div>
- <div class="tooltip-inner">
- Some tooltip text!
- </div>
-</div>
-```
-
-### Disabled elements
-
-Elements with the `disabled` attribute aren't interactive, meaning users cannot focus, hover, or click them to trigger a tooltip (or popover). As a workaround, you'll want to trigger the tooltip from a wrapper `<div>` or `<span>`, ideally made keyboard-focusable using `tabindex="0"`.
-
-<div class="tooltip-demo">
-{{< example >}}
-<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-title="Disabled tooltip">
- <button class="btn btn-primary" type="button" disabled>Disabled button</button>
-</span>
-{{< /example >}}
-</div>
-
-### Options
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-{{< callout warning >}}
-Note that for security reasons the `sanitize`, `sanitizeFn`, and `allowList` options cannot be supplied using data attributes.
-{{< /callout >}}
-
-
-{{< bs-table "table" >}}
-| Name | Type | Default | Description |
-| --- | --- | --- | --- |
-| `allowList` | object | [Default value]({{< docsref "/getting-started/javascript#sanitizer" >}}) | Object which contains allowed attributes and tags. |
-| `animation` | boolean | `true` | Apply a CSS fade transition to the tooltip. |
-| `boundary` | string, element | `'clippingParents'` | Overflow constraint boundary of the tooltip (applies only to Popper's preventOverflow modifier). By default, it's `'clippingParents'` and can accept an HTMLElement reference (via JavaScript only). For more information refer to Popper's [detectOverflow docs](https://popper.js.org/docs/v2/utils/detect-overflow/#boundary). |
-| `container` | string, element, false | `false` | Appends the tooltip to a specific element. Example: `container: 'body'`. This option is particularly useful in that it allows you to position the tooltip in the flow of the document near the triggering element - which will prevent the tooltip from floating away from the triggering element during a window resize. |
-| `customClass` | string, function | `''` | Add classes to the tooltip when it is shown. Note that these classes will be added in addition to any classes specified in the template. To add multiple classes, separate them with spaces: `'class-1 class-2'`. You can also pass a function that should return a single string containing additional class names. |
-| `delay` | number, object | `0` | Delay showing and hiding the tooltip (ms)—doesn't apply to manual trigger type. If a number is supplied, delay is applied to both hide/show. Object structure is: `delay: { "show": 500, "hide": 100 }`. |
-| `fallbackPlacements` | array | `['top', 'right', 'bottom', 'left']` | Define fallback placements by providing a list of placements in array (in order of preference). For more information refer to Popper's [behavior docs](https://popper.js.org/docs/v2/modifiers/flip/#fallbackplacements). |
-| `html` | boolean | `false` | Allow HTML in the tooltip. If true, HTML tags in the tooltip's `title` will be rendered in the tooltip. If false, `innerText` property will be used to insert content into the DOM. Use text if you're worried about XSS attacks. |
-| `offset` | array, string, function | `[0, 0]` | Offset of the tooltip relative to its target. You can pass a string in data attributes with comma separated values like: `data-bs-offset="10,20"`. When a function is used to determine the offset, it is called with an object containing the popper placement, the reference, and popper rects as its first argument. The triggering element DOM node is passed as the second argument. The function must return an array with two numbers: [skidding](https://popper.js.org/docs/v2/modifiers/offset/#skidding-1), [distance](https://popper.js.org/docs/v2/modifiers/offset/#distance-1). For more information refer to Popper's [offset docs](https://popper.js.org/docs/v2/modifiers/offset/#options). |
-| `placement` | string, function | `'top'` | How to position the tooltip: auto, top, bottom, left, right. When `auto` is specified, it will dynamically reorient the tooltip. When a function is used to determine the placement, it is called with the tooltip DOM node as its first argument and the triggering element DOM node as its second. The `this` context is set to the tooltip instance. |
-| `popperConfig` | null, object, function | `null` | To change Bootstrap's default Popper config, see [Popper's configuration](https://popper.js.org/docs/v2/constructors/#options). When a function is used to create the Popper configuration, it's called with an object that contains the Bootstrap's default Popper configuration. It helps you use and merge the default with your own configuration. The function must return a configuration object for Popper. |
-| `sanitize` | boolean | `true` | Enable or disable the sanitization. If activated `'template'`, `'content'` and `'title'` options will be sanitized. |
-| `sanitizeFn` | null, function | `null` | Here you can supply your own sanitize function. This can be useful if you prefer to use a dedicated library to perform sanitization. |
-| `selector` | string, false | `false` | If a selector is provided, tooltip objects will be delegated to the specified targets. In practice, this is used to also apply tooltips to dynamically added DOM elements (`jQuery.on` support). See [this issue]({{< param repo >}}/issues/4215) and [an informative example](https://codepen.io/Johann-S/pen/djJYPb). **Note**: `title` attribute must not be used as a selector. |
-| `template` | string | `'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'` | Base HTML to use when creating the tooltip. The tooltip's `title` will be injected into the `.tooltip-inner`. `.tooltip-arrow` will become the tooltip's arrow. The outermost wrapper element should have the `.tooltip` class and `role="tooltip"`. |
-| `title` | string, element, function | `''` | Default title value if `title` attribute isn't present. If a function is given, it will be called with its `this` reference set to the element that the popover is attached to. |
-| `trigger` | string | `'hover focus'` | How tooltip is triggered: click, hover, focus, manual. You may pass multiple triggers; separate them with a space. `'manual'` indicates that the tooltip will be triggered programmatically via the `.tooltip('show')`, `.tooltip('hide')` and `.tooltip('toggle')` methods; this value cannot be combined with any other trigger. `'hover'` on its own will result in tooltips that cannot be triggered via the keyboard, and should only be used if alternative methods for conveying the same information for keyboard users is present. |
-{{< /bs-table >}}
-
-{{< callout info >}}
-#### Data attributes for individual tooltips
-
-Options for individual tooltips can alternatively be specified through the use of data attributes, as explained above.
-{{< /callout >}}
-
-#### Using function with `popperConfig`
-
-```js
-const tooltip = new bootstrap.Tooltip(element, {
- popperConfig(defaultBsPopperConfig) {
- // const newPopperConfig = {...}
- // use defaultBsPopperConfig if needed...
- // return newPopperConfig
- }
-})
-```
-
-### Methods
-
-{{< callout danger >}}
-{{< partial "callout-danger-async-methods.md" >}}
-{{< /callout >}}
-
-{{< bs-table "table" >}}
-| Method | Description |
-| --- | --- |
-| `disable` | Removes the ability for an element's tooltip to be shown. The tooltip will only be able to be shown if it is re-enabled. |
-| `dispose` | Hides and destroys an element's tooltip (Removes stored data on the DOM element). Tooltips that use delegation (which are created using [the `selector` option](#options)) cannot be individually destroyed on descendant trigger elements. |
-| `enable` | Gives an element's tooltip the ability to be shown. **Tooltips are enabled by default.** |
-| `getInstance` | *Static* method which allows you to get the tooltip instance associated with a DOM element, or create a new one in case it wasn't initialized. |
-| `getOrCreateInstance` | *Static* method which allows you to get the tooltip instance associated with a DOM element, or create a new one in case it wasn't initialized. |
-| `hide` | Hides an element's tooltip. **Returns to the caller before the tooltip has actually been hidden** (i.e. before the `hidden.bs.tooltip` event occurs). This is considered a "manual" triggering of the tooltip. |
-| `setContent` | Gives a way to change the tooltip's content after its initialization. |
-| `show` | Reveals an element's tooltip. **Returns to the caller before the tooltip has actually been shown** (i.e. before the `shown.bs.tooltip` event occurs). This is considered a "manual" triggering of the tooltip. Tooltips with zero-length titles are never displayed. |
-| `toggle` | Toggles an element's tooltip. **Returns to the caller before the tooltip has actually been shown or hidden** (i.e. before the `shown.bs.tooltip` or `hidden.bs.tooltip` event occurs). This is considered a "manual" triggering of the tooltip. |
-| `toggleEnabled` | Toggles the ability for an element's tooltip to be shown or hidden. |
-| `update` | Updates the position of an element's tooltip. |
-{{< /bs-table >}}
-
-```js
-const tooltip = bootstrap.Tooltip.getInstance('#example') // Returns a Bootstrap tooltip instance
-
-// setContent example
-tooltip.setContent({ '.tooltip-inner': 'another title' })
-
-```
-
-{{< callout info >}}
-The `setContent` method accepts an `object` argument, where each property-key is a valid `string` selector within the popover template, and each related property-value can be `string` | `element` | `function` | `null`
-{{< /callout >}}
-
-### Events
-
-{{< bs-table >}}
-| Event | Description |
-| --- | --- |
-| `hide.bs.tooltip` | This event is fired immediately when the `hide` instance method has been called. |
-| `hidden.bs.tooltip` | This event is fired when the popover has finished being hidden from the user (will wait for CSS transitions to complete). |
-| `inserted.bs.tooltip` | This event is fired after the `show.bs.tooltip` event when the tooltip template has been added to the DOM. |
-| `show.bs.tooltip` | This event fires immediately when the `show` instance method is called. |
-| `shown.bs.tooltip` | This event is fired when the popover has been made visible to the user (will wait for CSS transitions to complete). |
-{{< /bs-table >}}
-
-```js
-const myTooltipEl = document.getElementById('myTooltip')
-const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)
-
-myTooltipEl.addEventListener('hidden.bs.tooltip', () => {
- // do something...
-})
-
-tooltip.hide()
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/content/reboot.md b/vendor/twbs/bootstrap/site/content/docs/5.2/content/reboot.md
deleted file mode 100644
index ca667b2ce..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/content/reboot.md
+++ /dev/null
@@ -1,446 +0,0 @@
----
-layout: docs
-title: Reboot
-description: Reboot, a collection of element-specific CSS changes in a single file, kickstart Bootstrap to provide an elegant, consistent, and simple baseline to build upon.
-group: content
-aliases: "/docs/5.2/content/"
-toc: true
----
-
-## Approach
-
-Reboot builds upon Normalize, providing many HTML elements with somewhat opinionated styles using only element selectors. Additional styling is done only with classes. For example, we reboot some `<table>` styles for a simpler baseline and later provide `.table`, `.table-bordered`, and more.
-
-Here are our guidelines and reasons for choosing what to override in Reboot:
-
-- Update some browser default values to use `rem`s instead of `em`s for scalable component spacing.
-- Avoid `margin-top`. Vertical margins can collapse, yielding unexpected results. More importantly though, a single direction of `margin` is a simpler mental model.
-- For easier scaling across device sizes, block elements should use `rem`s for `margin`s.
-- Keep declarations of `font`-related properties to a minimum, using `inherit` whenever possible.
-
-## CSS variables
-
-{{< added-in "5.2.0" >}}
-
-With v5.1.1, we standardized our required `@import`s across all our CSS bundles (including `bootstrap.css`, `bootstrap-reboot.css`, and `bootstrap-grid.css`) to include `_root.scss`. This adds `:root` level CSS variables to all bundles, regardless of how many of them are used in that bundle. Ultimately Bootstrap 5 will continue to see more [CSS variables]({{< docsref "/customize/css-variables" >}}) added over time, in order to provide more real-time customization without the need to always recompile Sass. Our approach is to take our source Sass variables and transform them into CSS variables. That way, even if you don't use CSS variables, you still have all the power of Sass. **This is still in-progress and will take time to fully implement.**
-
-For example, consider these `:root` CSS variables for common `<body>` styles:
-
-{{< scss-docs name="root-body-variables" file="scss/_root.scss" >}}
-
-In practice, those variables are then applied in Reboot like so:
-
-{{< scss-docs name="reboot-body-rules" file="scss/_reboot.scss" >}}
-
-Which allows you to make real-time customizations however you like:
-
-```html
-<body style="--bs-body-color: #333;">
- <!-- ... -->
-</body>
-```
-
-## Page defaults
-
-The `<html>` and `<body>` elements are updated to provide better page-wide defaults. More specifically:
-
-- The `box-sizing` is globally set on every element—including `*::before` and `*::after`, to `border-box`. This ensures that the declared width of element is never exceeded due to padding or border.
- - No base `font-size` is declared on the `<html>`, but `16px` is assumed (the browser default). `font-size: 1rem` is applied on the `<body>` for easy responsive type-scaling via media queries while respecting user preferences and ensuring a more accessible approach. This browser default can be overridden by modifying the `$font-size-root` variable.
-- The `<body>` also sets a global `font-family`, `font-weight`, `line-height`, and `color`. This is inherited later by some form elements to prevent font inconsistencies.
-- For safety, the `<body>` has a declared `background-color`, defaulting to `#fff`.
-
-## Native font stack
-
-Bootstrap utilizes a "native font stack" or "system font stack" for optimum text rendering on every device and OS. These system fonts have been designed specifically with today's devices in mind, with improved rendering on screens, variable font support, and more. Read more about [native font stacks in this *Smashing Magazine* article](https://www.smashingmagazine.com/2015/11/using-system-ui-fonts-practical-guide/).
-
-```scss
-$font-family-sans-serif:
- // Cross-platform generic font family (default user interface font)
- system-ui,
- // Safari for macOS and iOS (San Francisco)
- -apple-system,
- // Windows
- "Segoe UI",
- // Android
- Roboto,
- // older macOS and iOS
- "Helvetica Neue"
- // Linux
- "Noto Sans",
- "Liberation Sans",
- // Basic web fallback
- Arial,
- // Sans serif fallback
- sans-serif,
- // Emoji fonts
- "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
-```
-
-Note that because the font stack includes emoji fonts, many common symbol/dingbat Unicode characters will be rendered as multicolored pictographs. Their appearance will vary, depending on the style used in the browser/platform's native emoji font, and they won't be affected by any CSS `color` styles.
-
-This `font-family` is applied to the `<body>` and automatically inherited globally throughout Bootstrap. To switch the global `font-family`, update `$font-family-base` and recompile Bootstrap.
-
-## Headings and paragraphs
-
-All heading elements—e.g., `<h1>`—and `<p>` are reset to have their `margin-top` removed. Headings have `margin-bottom: .5rem` added and paragraphs `margin-bottom: 1rem` for easy spacing.
-
-{{< bs-table "table" >}}
-| Heading | Example |
-| --- | --- |
-| `<h1></h1>` | <span class="h1">h1. Bootstrap heading</span> |
-| `<h2></h2>` | <span class="h2">h2. Bootstrap heading</span> |
-| `<h3></h3>` | <span class="h3">h3. Bootstrap heading</span> |
-| `<h4></h4>` | <span class="h4">h4. Bootstrap heading</span> |
-| `<h5></h5>` | <span class="h5">h5. Bootstrap heading</span> |
-| `<h6></h6>` | <span class="h6">h6. Bootstrap heading</span> |
-{{< /bs-table >}}
-
-## Horizontal rules
-
-The `<hr>` element has been simplified. Similar to browser defaults, `<hr>`s are styled via `border-top`, have a default `opacity: .25`, and automatically inherit their `border-color` via `color`, including when `color` is set via the parent. They can be modified with text, border, and opacity utilities.
-
-{{< example >}}
-<hr>
-
-<div class="text-success">
- <hr>
-</div>
-
-<hr class="border border-danger border-2 opacity-50">
-<hr class="border border-primary border-3 opacity-75">
-{{< /example >}}
-
-## Lists
-
-All lists—`<ul>`, `<ol>`, and `<dl>`—have their `margin-top` removed and a `margin-bottom: 1rem`. Nested lists have no `margin-bottom`. We've also reset the `padding-left` on `<ul>` and `<ol>` elements.
-
-<div class="bd-example">
-{{< markdown >}}
-* All lists have their top margin removed
-* And their bottom margin normalized
-* Nested lists have no bottom margin
- * This way they have a more even appearance
- * Particularly when followed by more list items
-* The left padding has also been reset
-
-1. Here's an ordered list
-2. With a few list items
-3. It has the same overall look
-4. As the previous unordered list
-{{< /markdown >}}
-</div>
-
-For simpler styling, clear hierarchy, and better spacing, description lists have updated `margin`s. `<dd>`s reset `margin-left` to `0` and add `margin-bottom: .5rem`. `<dt>`s are **bolded**.
-
-<div class="bd-example">
- <dl>
- <dt>Description lists</dt>
- <dd>A description list is perfect for defining terms.</dd>
- <dt>Term</dt>
- <dd>Definition for the term.</dd>
- <dd>A second definition for the same term.</dd>
- <dt>Another term</dt>
- <dd>Definition for this other term.</dd>
- </dl>
-</div>
-
-## Inline code
-
-Wrap inline snippets of code with `<code>`. Be sure to escape HTML angle brackets.
-
-{{< example >}}
-For example, <code>&lt;section&gt;</code> should be wrapped as inline.
-{{< /example >}}
-
-## Code blocks
-
-Use `<pre>`s for multiple lines of code. Once again, be sure to escape any angle brackets in the code for proper rendering. The `<pre>` element is reset to remove its `margin-top` and use `rem` units for its `margin-bottom`.
-
-{{< example >}}
-<pre><code>&lt;p&gt;Sample text here...&lt;/p&gt;
-&lt;p&gt;And another line of sample text here...&lt;/p&gt;
-</code></pre>
-{{< /example >}}
-
-## Variables
-
-For indicating variables use the `<var>` tag.
-
-{{< example >}}
-<var>y</var> = <var>m</var><var>x</var> + <var>b</var>
-{{< /example >}}
-
-## User input
-
-Use the `<kbd>` to indicate input that is typically entered via keyboard.
-
-{{< example >}}
-To switch directories, type <kbd>cd</kbd> followed by the name of the directory.<br>
-To edit settings, press <kbd><kbd>ctrl</kbd> + <kbd>,</kbd></kbd>
-{{< /example >}}
-
-## Sample output
-
-For indicating sample output from a program use the `<samp>` tag.
-
-{{< example >}}
-<samp>This text is meant to be treated as sample output from a computer program.</samp>
-{{< /example >}}
-
-## Tables
-
-Tables are slightly adjusted to style `<caption>`s, collapse borders, and ensure consistent `text-align` throughout. Additional changes for borders, padding, and more come with [the `.table` class]({{< docsref "/content/tables" >}}).
-
-{{< example >}}
-<table>
- <caption>
- This is an example table, and this is its caption to describe the contents.
- </caption>
- <thead>
- <tr>
- <th>Table heading</th>
- <th>Table heading</th>
- <th>Table heading</th>
- <th>Table heading</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>Table cell</td>
- <td>Table cell</td>
- <td>Table cell</td>
- <td>Table cell</td>
- </tr>
- <tr>
- <td>Table cell</td>
- <td>Table cell</td>
- <td>Table cell</td>
- <td>Table cell</td>
- </tr>
- <tr>
- <td>Table cell</td>
- <td>Table cell</td>
- <td>Table cell</td>
- <td>Table cell</td>
- </tr>
- </tbody>
-</table>
-{{< /example >}}
-
-## Forms
-
-Various form elements have been rebooted for simpler base styles. Here are some of the most notable changes:
-
-- `<fieldset>`s have no borders, padding, or margin so they can be easily used as wrappers for individual inputs or groups of inputs.
-- `<legend>`s, like fieldsets, have also been restyled to be displayed as a heading of sorts.
-- `<label>`s are set to `display: inline-block` to allow `margin` to be applied.
-- `<input>`s, `<select>`s, `<textarea>`s, and `<button>`s are mostly addressed by Normalize, but Reboot removes their `margin` and sets `line-height: inherit`, too.
-- `<textarea>`s are modified to only be resizable vertically as horizontal resizing often "breaks" page layout.
-- `<button>`s and `<input>` button elements have `cursor: pointer` when `:not(:disabled)`.
-
-These changes, and more, are demonstrated below.
-
-<form class="bd-example">
- <fieldset>
- <legend>Example legend</legend>
- <p>
- <label for="input">Example input</label>
- <input type="text" id="input" placeholder="Example input">
- </p>
- <p>
- <label for="email">Example email</label>
- <input type="email" id="email" placeholder="test@example.com">
- </p>
- <p>
- <label for="tel">Example telephone</label>
- <input type="tel" id="tel">
- </p>
- <p>
- <label for="url">Example url</label>
- <input type="url" id="url">
- </p>
- <p>
- <label for="number">Example number</label>
- <input type="number" id="number">
- </p>
- <p>
- <label for="search">Example search</label>
- <input type="search" id="search">
- </p>
- <p>
- <label for="range">Example range</label>
- <input type="range" id="range" min="0" max="10">
- </p>
- <p>
- <label for="file">Example file input</label>
- <input type="file" id="file">
- </p>
- <p>
- <label for="select">Example select</label>
- <select id="select">
- <option value="">Choose...</option>
- <optgroup label="Option group 1">
- <option value="">Option 1</option>
- <option value="">Option 2</option>
- <option value="">Option 3</option>
- </optgroup>
- <optgroup label="Option group 2">
- <option value="">Option 4</option>
- <option value="">Option 5</option>
- <option value="">Option 6</option>
- </optgroup>
- </select>
- </p>
- <p>
- <label>
- <input type="checkbox" value="">
- Check this checkbox
- </label>
- </p>
- <p>
- <label>
- <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
- Option one is this and that
- </label>
- <label>
- <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2">
- Option two is something else that's also super long to demonstrate the wrapping of these fancy form controls.
- </label>
- <label>
- <input type="radio" name="optionsRadios" id="optionsRadios3" value="option3" disabled>
- Option three is disabled
- </label>
- </p>
- <p>
- <label for="textarea">Example textarea</label>
- <textarea id="textarea" rows="3"></textarea>
- </p>
- <p>
- <label for="date">Example date</label>
- <input type="date" id="date">
- </p>
- <p>
- <label for="time">Example time</label>
- <input type="time" id="time">
- </p>
- <p>
- <label for="password">Example password</label>
- <input type="password" id="password">
- </p>
- <p>
- <label for="datetime-local">Example datetime-local</label>
- <input type="datetime-local" id="datetime-local">
- </p>
- <p>
- <label for="week">Example week</label>
- <input type="week" id="week">
- </p>
- <p>
- <label for="month">Example month</label>
- <input type="month" id="month">
- </p>
- <p>
- <label for="color">Example color</label>
- <input type="color" id="color">
- </p>
- <p>
- <label for="output">Example output</label>
- <output name="result" id="output">100</output>
- </p>
- <p>
- <button type="submit">Button submit</button>
- <input type="submit" value="Input submit button">
- <input type="reset" value="Input reset button">
- <input type="button" value="Input button">
- </p>
- <p>
- <button type="submit" disabled>Button submit</button>
- <input type="submit" value="Input submit button" disabled>
- <input type="reset" value="Input reset button" disabled>
- <input type="button" value="Input button" disabled>
- </p>
- </fieldset>
-</form>
-
-{{< callout warning >}}
-{{< partial "callout-warning-input-support.md" >}}
-{{< /callout >}}
-
-### Pointers on buttons
-
-Reboot includes an enhancement for `role="button"` to change the default cursor to `pointer`. Add this attribute to elements to help indicate elements are interactive. This role isn't necessary for `<button>` elements, which get their own `cursor` change.
-
-{{< example >}}
-<span role="button" tabindex="0">Non-button element button</span>
-{{< /example >}}
-
-## Misc elements
-
-### Address
-
-The `<address>` element is updated to reset the browser default `font-style` from `italic` to `normal`. `line-height` is also now inherited, and `margin-bottom: 1rem` has been added. `<address>`s are for presenting contact information for the nearest ancestor (or an entire body of work). Preserve formatting by ending lines with `<br>`.
-
-<div class="bd-example">
- <address>
- <strong>Twitter, Inc.</strong><br>
- 1355 Market St, Suite 900<br>
- San Francisco, CA 94103<br>
- <abbr title="Phone">P:</abbr> (123) 456-7890
- </address>
-
- <address>
- <strong>Full Name</strong><br>
- <a href="mailto:first.last@example.com">first.last@example.com</a>
- </address>
-</div>
-
-### Blockquote
-
-The default `margin` on blockquotes is `1em 40px`, so we reset that to `0 0 1rem` for something more consistent with other elements.
-
-<div class="bd-example">
- <blockquote class="blockquote">
- <p>A well-known quote, contained in a blockquote element.</p>
- </blockquote>
- <p>Someone famous in <cite title="Source Title">Source Title</cite></p>
-</div>
-
-### Inline elements
-
-The `<abbr>` element receives basic styling to make it stand out amongst paragraph text.
-
-<div class="bd-example">
- The <abbr title="HyperText Markup Language">HTML</abbr> abbreviation element.
-</div>
-
-### Summary
-
-The default `cursor` on summary is `text`, so we reset that to `pointer` to convey that the element can be interacted with by clicking on it.
-
-<div class="bd-example">
- <details>
- <summary>Some details</summary>
- <p>More info about the details.</p>
- </details>
-
- <details open>
- <summary>Even more details</summary>
- <p>Here are even more details about the details.</p>
- </details>
-</div>
-
-## HTML5 `[hidden]` attribute
-
-HTML5 adds [a new global attribute named `[hidden]`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden), which is styled as `display: none` by default. Borrowing an idea from [PureCSS](https://purecss.io/), we improve upon this default by making `[hidden] { display: none !important; }` to help prevent its `display` from getting accidentally overridden.
-
-```html
-<input type="text" hidden>
-```
-
-{{< callout warning >}}
-##### jQuery incompatibility
-
-`[hidden]` is not compatible with jQuery's `$(...).hide()` and `$(...).show()` methods. Therefore, we don't currently especially endorse `[hidden]` over other techniques for managing the `display` of elements.
-{{< /callout >}}
-
-To merely toggle the visibility of an element, meaning its `display` is not modified and the element can still affect the flow of the document, use [the `.invisible` class]({{< docsref "/utilities/visibility" >}}) instead.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/content/tables.md b/vendor/twbs/bootstrap/site/content/docs/5.2/content/tables.md
deleted file mode 100644
index 577e3ef84..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/content/tables.md
+++ /dev/null
@@ -1,835 +0,0 @@
----
-layout: docs
-title: Tables
-description: Documentation and examples for opt-in styling of tables (given their prevalent use in JavaScript plugins) with Bootstrap.
-group: content
-toc: true
----
-
-## Overview
-
-Due to the widespread use of `<table>` elements across third-party widgets like calendars and date pickers, Bootstrap's tables are **opt-in**. Add the base class `.table` to any `<table>`, then extend with our optional modifier classes or custom styles. All table styles are not inherited in Bootstrap, meaning any nested tables can be styled independent from the parent.
-
-Using the most basic table markup, here's how `.table`-based tables look in Bootstrap.
-
-{{< table class="table" simplified="false" >}}
-
-## Variants
-
-Use contextual classes to color tables, table rows or individual cells.
-
-<div class="bd-example">
- <table class="table">
- <thead>
- <tr>
- <th scope="col">Class</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">Default</th>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- {{< table.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <tr class="table-{{ .name }}">
- <th scope="row">{{ .name | title }}</th>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- {{- end -}}
- {{< /table.inline >}}
- </tbody>
- </table>
-</div>
-
-{{< highlight html >}}
-<!-- On tables -->{{< table.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<table class="table-{{ .name }}">...</table>
-{{- end -}}
-{{< /table.inline >}}
-
-<!-- On rows -->{{< table.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<tr class="table-{{ .name }}">...</tr>
-{{- end -}}
-{{< /table.inline >}}
-
-<!-- On cells (`td` or `th`) -->
-<tr>{{< table.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
- <td class="table-{{ .name }}">...</td>
-{{- end -}}
-{{< /table.inline >}}
-</tr>
-{{< /highlight >}}
-
-{{< callout info >}}
-{{< partial "callout-warning-color-assistive-technologies.md" >}}
-{{< /callout >}}
-
-## Accented tables
-
-### Striped rows
-
-Use `.table-striped` to add zebra-striping to any table row within the `<tbody>`.
-
-{{< table class="table table-striped" >}}
-
-### Striped columns
-
-Use `.table-striped-columns` to add zebra-striping to any table column.
-
-{{< table class="table table-striped-columns" >}}
-
-These classes can also be added to table variants:
-
-{{< table class="table table-dark table-striped" >}}
-
-{{< table class="table table-dark table-striped-columns" >}}
-
-{{< table class="table table-success table-striped" >}}
-
-{{< table class="table table-success table-striped-columns" >}}
-
-### Hoverable rows
-
-Add `.table-hover` to enable a hover state on table rows within a `<tbody>`.
-
-{{< table class="table table-hover" >}}
-
-{{< table class="table table-dark table-hover" >}}
-
-These hoverable rows can also be combined with the striped rows variant:
-
-{{< table class="table table-striped table-hover" >}}
-
-### Active tables
-
-Highlight a table row or cell by adding a `.table-active` class.
-
-<div class="bd-example">
- <table class="table">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr class="table-active">
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2" class="table-active">Larry the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
- </table>
-</div>
-
-```html
-<table class="table">
- <thead>
- ...
- </thead>
- <tbody>
- <tr class="table-active">
- ...
- </tr>
- <tr>
- ...
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2" class="table-active">Larry the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
-</table>
-```
-
-<div class="bd-example">
- <table class="table table-dark">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr class="table-active">
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2" class="table-active">Larry the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
- </table>
-</div>
-
-```html
-<table class="table table-dark">
- <thead>
- ...
- </thead>
- <tbody>
- <tr class="table-active">
- ...
- </tr>
- <tr>
- ...
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2" class="table-active">Larry the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
-</table>
-```
-
-## How do the variants and accented tables work?
-
-For the accented tables ([striped rows](#striped-rows), [striped columns](#striped-columns), [hoverable rows](#hoverable-rows), and [active tables](#active-tables)), we used some techniques to make these effects work for all our [table variants](#variants):
-
-- We start by setting the background of a table cell with the `--bs-table-bg` custom property. All table variants then set that custom property to colorize the table cells. This way, we don't get into trouble if semi-transparent colors are used as table backgrounds.
-- Then we add an inset box shadow on the table cells with `box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);` to layer on top of any specified `background-color`. Because we use a huge spread and no blur, the color will be monotone. Since `--bs-table-accent-bg` is unset by default, we don't have a default box shadow.
-- When either `.table-striped`, `.table-striped-columns`, `.table-hover` or `.table-active` classes are added, the `--bs-table-accent-bg` is set to a semitransparent color to colorize the background.
-- For each table variant, we generate a `--bs-table-accent-bg` color with the highest contrast depending on that color. For example, the accent color for `.table-primary` is darker while `.table-dark` has a lighter accent color.
-- Text and border colors are generated the same way, and their colors are inherited by default.
-
-Behind the scenes it looks like this:
-
-{{< scss-docs name="table-variant" file="scss/mixins/_table-variants.scss" >}}
-
-## Table borders
-
-### Bordered tables
-
-Add `.table-bordered` for borders on all sides of the table and cells.
-
-{{< table class="table table-bordered" >}}
-
-[Border color utilities]({{< docsref "/utilities/borders#border-color" >}}) can be added to change colors:
-
-{{< table class="table table-bordered border-primary" >}}
-
-### Tables without borders
-
-Add `.table-borderless` for a table without borders.
-
-{{< table class="table table-borderless" >}}
-
-{{< table class="table table-dark table-borderless" >}}
-
-## Small tables
-
-Add `.table-sm` to make any `.table` more compact by cutting all cell `padding` in half.
-
-{{< table class="table table-sm" >}}
-
-{{< table class="table table-dark table-sm" >}}
-
-## Table group dividers
-
-Add a thicker border, darker between table groups—`<thead>`, `<tbody>`, and `<tfoot>`—with `.table-group-divider`. Customize the color by changing the `border-top-color` (which we don't currently provide a utility class for at this time).
-
-{{< example >}}
-<table class="table">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody class="table-group-divider">
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2">Larry the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
-</table>
-{{< /example >}}
-
-## Vertical alignment
-
-Table cells of `<thead>` are always vertical aligned to the bottom. Table cells in `<tbody>` inherit their alignment from `<table>` and are aligned to the top by default. Use the [vertical align]({{< docsref "/utilities/vertical-align" >}}) classes to re-align where needed.
-
-<div class="bd-example">
- <div class="table-responsive">
- <table class="table align-middle">
- <thead>
- <tr>
- <th scope="col" class="w-25">Heading 1</th>
- <th scope="col" class="w-25">Heading 2</th>
- <th scope="col" class="w-25">Heading 3</th>
- <th scope="col" class="w-25">Heading 4</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
- <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
- <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
- <td>This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.</td>
- </tr>
- <tr class="align-bottom">
- <td>This cell inherits <code>vertical-align: bottom;</code> from the table row</td>
- <td>This cell inherits <code>vertical-align: bottom;</code> from the table row</td>
- <td>This cell inherits <code>vertical-align: bottom;</code> from the table row</td>
- <td>This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.</td>
- </tr>
- <tr>
- <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
- <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
- <td class="align-top">This cell is aligned to the top.</td>
- <td>This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.</td>
- </tr>
- </tbody>
- </table>
- </div>
-</div>
-
-```html
-<div class="table-responsive">
- <table class="table align-middle">
- <thead>
- <tr>
- ...
- </tr>
- </thead>
- <tbody>
- <tr>
- ...
- </tr>
- <tr class="align-bottom">
- ...
- </tr>
- <tr>
- <td>...</td>
- <td>...</td>
- <td class="align-top">This cell is aligned to the top.</td>
- <td>...</td>
- </tr>
- </tbody>
- </table>
-</div>
-```
-
-## Nesting
-
-Border styles, active styles, and table variants are not inherited by nested tables.
-
-<div class="bd-example">
-<table class="table table-striped table-bordered">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <td colspan="4">
- <table class="table mb-0">
- <thead>
- <tr>
- <th scope="col">Header</th>
- <th scope="col">Header</th>
- <th scope="col">Header</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">A</th>
- <td>First</td>
- <td>Last</td>
- </tr>
- <tr>
- <th scope="row">B</th>
- <td>First</td>
- <td>Last</td>
- </tr>
- <tr>
- <th scope="row">C</th>
- <td>First</td>
- <td>Last</td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Larry</td>
- <td>the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
-</table>
-</div>
-
-```html
-<table class="table table-striped">
- <thead>
- ...
- </thead>
- <tbody>
- ...
- <tr>
- <td colspan="4">
- <table class="table mb-0">
- ...
- </table>
- </td>
- </tr>
- ...
- </tbody>
-</table>
-```
-
-## How nesting works
-
-To prevent _any_ styles from leaking to nested tables, we use the child combinator (`>`) selector in our CSS. Since we need to target all the `td`s and `th`s in the `thead`, `tbody`, and `tfoot`, our selector would look pretty long without it. As such, we use the rather odd looking `.table > :not(caption) > * > *` selector to target all `td`s and `th`s of the `.table`, but none of any potential nested tables.
-
-Note that if you add `<tr>`s as direct children of a table, those `<tr>` will be wrapped in a `<tbody>` by default, thus making our selectors work as intended.
-
-## Anatomy
-
-### Table head
-
-Similar to tables and dark tables, use the modifier classes `.table-light` or `.table-dark` to make `<thead>`s appear light or dark gray.
-
-<div class="bd-example">
-<table class="table">
- <thead class="table-light">
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Larry</td>
- <td>the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
-</table>
-</div>
-
-```html
-<table class="table">
- <thead class="table-light">
- ...
- </thead>
- <tbody>
- ...
- </tbody>
-</table>
-```
-
-<div class="bd-example">
-<table class="table">
- <thead class="table-dark">
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Larry</td>
- <td>the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
-</table>
-</div>
-
-```html
-<table class="table">
- <thead class="table-dark">
- ...
- </thead>
- <tbody>
- ...
- </tbody>
-</table>
-```
-
-### Table foot
-
-<div class="bd-example">
-<table class="table">
- <thead class="table-light">
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Larry</td>
- <td>the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
- <tfoot>
- <tr>
- <td>Footer</td>
- <td>Footer</td>
- <td>Footer</td>
- <td>Footer</td>
- </tr>
- </tfoot>
-</table>
-</div>
-
-```html
-<table class="table">
- <thead>
- ...
- </thead>
- <tbody>
- ...
- </tbody>
- <tfoot>
- ...
- </tfoot>
-</table>
-```
-
-### Captions
-
-A `<caption>` functions like a heading for a table. It helps users with screen readers to find a table and understand what it's about and decide if they want to read it.
-
-<div class="bd-example">
- <table class="table">
- <caption>List of users</caption>
- {{< partial "table-content" >}}
- </table>
-</div>
-
-```html
-<table class="table table-sm">
- <caption>List of users</caption>
- <thead>
- ...
- </thead>
- <tbody>
- ...
- </tbody>
-</table>
-```
-
-You can also put the `<caption>` on the top of the table with `.caption-top`.
-
-{{< example >}}
-<table class="table caption-top">
- <caption>List of users</caption>
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Larry</td>
- <td>the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
-</table>
-{{< /example >}}
-
-## Responsive tables
-
-Responsive tables allow tables to be scrolled horizontally with ease. Make any table responsive across all viewports by wrapping a `.table` with `.table-responsive`. Or, pick a maximum breakpoint with which to have a responsive table up to by using `.table-responsive{-sm|-md|-lg|-xl|-xxl}`.
-
-{{< callout warning >}}
-##### Vertical clipping/truncation
-
-Responsive tables make use of `overflow-y: hidden`, which clips off any content that goes beyond the bottom or top edges of the table. In particular, this can clip off dropdown menus and other third-party widgets.
-{{< /callout >}}
-
-### Always responsive
-
-Across every breakpoint, use `.table-responsive` for horizontally scrolling tables.
-
-<div class="bd-example">
- <div class="table-responsive">
- <table class="table">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- </tbody>
- </table>
- </div>
-</div>
-
-```html
-<div class="table-responsive">
- <table class="table">
- ...
- </table>
-</div>
-```
-
-### Breakpoint specific
-
-Use `.table-responsive{-sm|-md|-lg|-xl|-xxl}` as needed to create responsive tables up to a particular breakpoint. From that breakpoint and up, the table will behave normally and not scroll horizontally.
-
-**These tables may appear broken until their responsive styles apply at specific viewport widths.**
-
-{{< tables.inline >}}
-{{ range $.Site.Data.breakpoints }}
-{{ if not (eq . "xs") }}
-<div class="bd-example">
- <div class="table-responsive{{ .abbr }}">
- <table class="table">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- </tbody>
- </table>
- </div>
-</div>
-{{ end -}}
-{{- end -}}
-{{< /tables.inline >}}
-
-{{< highlight html >}}
-{{< tables.inline >}}
-{{- range $.Site.Data.breakpoints -}}
-{{- if not (eq . "xs") }}
-<div class="table-responsive{{ .abbr }}">
- <table class="table">
- ...
- </table>
-</div>
-{{ end -}}
-{{- end -}}
-{{< /tables.inline >}}
-{{< /highlight >}}
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="table-variables" file="scss/_variables.scss" >}}
-
-### Loop
-
-{{< scss-docs name="table-loop" file="scss/_variables.scss" >}}
-
-### Customizing
-
-- The factor variables (`$table-striped-bg-factor`, `$table-active-bg-factor` & `$table-hover-bg-factor`) are used to determine the contrast in table variants.
-- Apart from the light & dark table variants, theme colors are lightened by the `$table-bg-scale` variable.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/color.md b/vendor/twbs/bootstrap/site/content/docs/5.2/customize/color.md
deleted file mode 100644
index 23a7f7104..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/color.md
+++ /dev/null
@@ -1,151 +0,0 @@
----
-layout: docs
-title: Color
-description: Bootstrap is supported by an extensive color system that themes our styles and components. This enables more comprehensive customization and extension for any project.
-group: customize
-toc: true
----
-
-## Theme colors
-
-We use a subset of all colors to create a smaller color palette for generating color schemes, also available as Sass variables and a Sass map in Bootstrap's `scss/_variables.scss` file.
-
-<div class="row">
- {{< theme-colors.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <div class="col-md-4">
- <div class="p-3 mb-3 bg-{{ .name }} {{ if .contrast_color }}text-{{ .contrast_color }}{{ else }}text-white{{ end }}">{{ .name | title }}</div>
- </div>
- {{ end -}}
- {{< /theme-colors.inline >}}
-</div>
-
-All these colors are available as a Sass map, `$theme-colors`.
-
-{{< scss-docs name="theme-colors-map" file="scss/_variables.scss" >}}
-
-Check out [our Sass maps and loops docs]({{< docsref "/customize/sass#maps-and-loops" >}}) for how to modify these colors.
-
-## All colors
-
-All Bootstrap colors are available as Sass variables and a Sass map in `scss/_variables.scss` file. To avoid increased file sizes, we don't create text or background color classes for each of these variables. Instead, we choose a subset of these colors for a [theme palette](#theme-colors).
-
-Be sure to monitor contrast ratios as you customize colors. As shown below, we've added three contrast ratios to each of the main colors—one for the swatch's current colors, one for against white, and one for against black.
-
-<div class="row font-monospace">
- {{< theme-colors.inline >}}
- {{- range $color := $.Site.Data.colors }}
- {{- if (and (not (eq $color.name "white")) (not (eq $color.name "gray")) (not (eq $color.name "gray-dark"))) }}
- <div class="col-md-4 mb-3">
- <div class="p-3 mb-2 position-relative swatch-{{ $color.name }}">
- <strong class="d-block">${{ $color.name }}</strong>
- {{ $color.hex }}
- </div>
- {{ range (seq 100 100 900) }}
- <div class="p-3 bd-{{ $color.name }}-{{ . }}">${{ $color.name }}-{{ . }}</div>
- {{ end }}
- </div>
- {{ end -}}
- {{ end -}}
-
- <div class="col-md-4 mb-3">
- <div class="p-3 mb-2 position-relative swatch-gray-500">
- <strong class="d-block">$gray-500</strong>
- #adb5bd
- </div>
- {{- range $.Site.Data.grays }}
- <div class="p-3 bd-gray-{{ .name }}">$gray-{{ .name }}</div>
- {{ end -}}
- </div>
- {{< /theme-colors.inline >}}
-
- <div class="col-md-4 mb-3">
- <div class="p-3 mb-2 bd-black text-white">
- <strong class="d-block">$black</strong>
- #000
- </div>
- <div class="p-3 mb-2 bd-white border">
- <strong class="d-block">$white</strong>
- #fff
- </div>
- </div>
-</div>
-
-### Notes on Sass
-
-Sass cannot programmatically generate variables, so we manually created variables for every tint and shade ourselves. We specify the midpoint value (e.g., `$blue-500`) and use custom color functions to tint (lighten) or shade (darken) our colors via Sass's `mix()` color function.
-
-Using `mix()` is not the same as `lighten()` and `darken()`—the former blends the specified color with white or black, while the latter only adjusts the lightness value of each color. The result is a much more complete suite of colors, as [shown in this CodePen demo](https://codepen.io/emdeoh/pen/zYOQOPB).
-
-Our `tint-color()` and `shade-color()` functions use `mix()` alongside our `$theme-color-interval` variable, which specifies a stepped percentage value for each mixed color we produce. See the `scss/_functions.scss` and `scss/_variables.scss` files for the full source code.
-
-## Color Sass maps
-
-Bootstrap's source Sass files include three maps to help you quickly and easily loop over a list of colors and their hex values.
-
-- `$colors` lists all our available base (`500`) colors
-- `$theme-colors` lists all semantically named theme colors (shown below)
-- `$grays` lists all tints and shades of gray
-
-Within `scss/_variables.scss`, you'll find Bootstrap's color variables and Sass map. Here's an example of the `$colors` Sass map:
-
-{{< scss-docs name="colors-map" file="scss/_variables.scss" >}}
-
-Add, remove, or modify values within the map to update how they're used in many other components. Unfortunately at this time, not _every_ component utilizes this Sass map. Future updates will strive to improve upon this. Until then, plan on making use of the `${color}` variables and this Sass map.
-
-### Example
-
-Here's how you can use these in your Sass:
-
-```scss
-.alpha { color: $purple; }
-.beta {
- color: $yellow-300;
- background-color: $indigo-900;
-}
-```
-
-[Color]({{< docsref "/utilities/colors" >}}) and [background]({{< docsref "/utilities/background" >}}) utility classes are also available for setting `color` and `background-color` using the `500` color values.
-
-## Generating utilities
-
-{{< added-in "5.1.0" >}}
-
-Bootstrap doesn't include `color` and `background-color` utilities for every color variable, but you can generate these yourself with our [utility API]({{< docsref "/utilities/api" >}}) and our extended Sass maps added in v5.1.0.
-
-1. To start, make sure you've imported our functions, variables, mixins, and utilities.
-2. Use our `map-merge-multiple()` function to quickly merge multiple Sass maps together in a new map.
-3. Merge this new combined map to extend any utility with a `{color}-{level}` class name.
-
-Here's an example that generates text color utilities (e.g., `.text-purple-500`) using the above steps.
-
-```scss
-@import "bootstrap/scss/functions";
-@import "bootstrap/scss/variables";
-@import "bootstrap/scss/maps";
-@import "bootstrap/scss/mixins";
-@import "bootstrap/scss/utilities";
-
-$all-colors: map-merge-multiple($blues, $indigos, $purples, $pinks, $reds, $oranges, $yellows, $greens, $teals, $cyans);
-
-$utilities: map-merge(
- $utilities,
- (
- "color": map-merge(
- map-get($utilities, "color"),
- (
- values: map-merge(
- map-get(map-get($utilities, "color"), "values"),
- (
- $all-colors
- ),
- ),
- ),
- ),
- )
-);
-
-@import "bootstrap/scss/utilities/api";
-```
-
-This will generate new `.text-{color}-{level}` utilities for every color and level. You can do the same for any other utility and property as well.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/css-variables.md b/vendor/twbs/bootstrap/site/content/docs/5.2/customize/css-variables.md
deleted file mode 100644
index 26d167525..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/css-variables.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-layout: docs
-title: CSS variables
-description: Use Bootstrap's CSS custom properties for fast and forward-looking design and development.
-group: customize
-toc: true
----
-
-Bootstrap includes many [CSS custom properties (variables)](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) in its compiled CSS for real-time customization without the need to recompile Sass. These provide easy access to commonly used values like our theme colors, breakpoints, and primary font stacks when working in your browser's inspector, a code sandbox, or general prototyping.
-
-**All our custom properties are prefixed with `bs-`** to avoid conflicts with third party CSS.
-
-## Root variables
-
-Here are the variables we include (note that the `:root` is required) that can be accessed anywhere Bootstrap's CSS is loaded. They're located in our `_root.scss` file and included in our compiled dist files.
-
-```css
-{{< root.inline >}}
-{{- $css := readFile "dist/css/bootstrap.css" -}}
-{{- $match := findRE ":root {([^}]*)}" $css 1 -}}
-
-{{- if (eq (len $match) 0) -}}
-{{- errorf "Got no matches for :root in %q!" $.Page.Path -}}
-{{- end -}}
-
-{{- index $match 0 -}}
-
-{{< /root.inline >}}
-```
-
-## Component variables
-
-Bootstrap 5 is increasingly making use of custom properties as local variables for various components. This way we reduce our compiled CSS, ensure styles aren't inherited in places like nested tables, and allow some basic restyling and extending of Bootstrap components after Sass compilation.
-
-Have a look at our table documentation for some [insight into how we're using CSS variables]({{< docsref "/content/tables#how-do-the-variants-and-accented-tables-work" >}}). Our [navbars also use CSS variables]({{< docsref "/components/navbar#css" >}}) as of v5.2.0. We're also using CSS variables across our grids—primarily for gutters the [new opt-in CSS grid]({{< docsref "/layout/css-grid" >}})—with more component usage coming in the future.
-
-Whenever possible, we'll assign CSS variables at the base component level (e.g., `.navbar` for navbar and its sub-components). This reduces guessing on where and how to customize, and allows for easy modifications by our team in future updates.
-
-## Prefix
-
-Most CSS variables use a prefix to avoid collisions with your own codebase. This prefix is in addition to the `--` that's required on every CSS variable.
-
-Customize the prefix via the `$prefix` Sass variable. By default, it's set to `bs-` (note the trailing dash).
-
-## Examples
-
-CSS variables offer similar flexibility to Sass's variables, but without the need for compilation before being served to the browser. For example, here we're resetting our page's font and link styles with CSS variables.
-
-```css
-body {
- font: 1rem/1.5 var(--bs-font-sans-serif);
-}
-a {
- color: var(--bs-blue);
-}
-```
-
-## Grid breakpoints
-
-While we include our grid breakpoints as CSS variables (except for `xs`), be aware that **CSS variables do not work in media queries**. This is by design in the CSS spec for variables, but may change in coming years with support for `env()` variables. Check out [this Stack Overflow answer](https://stackoverflow.com/a/47212942) for some helpful links. In the meantime, you can use these variables in other CSS situations, as well as in your JavaScript.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/options.md b/vendor/twbs/bootstrap/site/content/docs/5.2/customize/options.md
deleted file mode 100644
index 5013fb9b3..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/options.md
+++ /dev/null
@@ -1,31 +0,0 @@
----
-layout: docs
-title: Options
-description: Quickly customize Bootstrap with built-in variables to easily toggle global CSS preferences for controlling style and behavior.
-group: customize
----
-
-Customize Bootstrap with our built-in custom variables file and easily toggle global CSS preferences with new `$enable-*` Sass variables. Override a variable's value and recompile with `npm run test` as needed.
-
-You can find and customize these variables for key global options in Bootstrap's `scss/_variables.scss` file.
-
-{{< bs-table "table table-options" >}}
-| Variable | Values | Description |
-| ------------------------------ | ---------------------------------- | -------------------------------------------------------------------------------------- |
-| `$spacer` | `1rem` (default), or any value > 0 | Specifies the default spacer value to programmatically generate our [spacer utilities]({{< docsref "/utilities/spacing" >}}). |
-| `$enable-rounded` | `true` (default) or `false` | Enables predefined `border-radius` styles on various components. |
-| `$enable-shadows` | `true` or `false` (default) | Enables predefined decorative `box-shadow` styles on various components. Does not affect `box-shadow`s used for focus states. |
-| `$enable-gradients` | `true` or `false` (default) | Enables predefined gradients via `background-image` styles on various components. |
-| `$enable-transitions` | `true` (default) or `false` | Enables predefined `transition`s on various components. |
-| `$enable-reduced-motion` | `true` (default) or `false` | Enables the [`prefers-reduced-motion` media query]({{< docsref "/getting-started/accessibility#reduced-motion" >}}), which suppresses certain animations/transitions based on the users' browser/operating system preferences. |
-| `$enable-grid-classes` | `true` (default) or `false` | Enables the generation of CSS classes for the grid system (e.g. `.row`, `.col-md-1`, etc.). |
-| `$enable-container-classes` | `true` (default) or `false` | Enables the generation of CSS classes for layout containers. (New in v5.2.0) |
-| `$enable-caret` | `true` (default) or `false` | Enables pseudo element caret on `.dropdown-toggle`. |
-| `$enable-button-pointers` | `true` (default) or `false` | Add "hand" cursor to non-disabled button elements. |
-| `$enable-rfs` | `true` (default) or `false` | Globally enables [RFS]({{< docsref "/getting-started/rfs" >}}). |
-| `$enable-validation-icons` | `true` (default) or `false` | Enables `background-image` icons within textual inputs and some custom forms for validation states. |
-| `$enable-negative-margins` | `true` or `false` (default) | Enables the generation of [negative margin utilities]({{< docsref "/utilities/spacing#negative-margin" >}}). |
-| `$enable-deprecation-messages` | `true` (default) or `false` | Set to `false` to hide warnings when using any of the deprecated mixins and functions that are planned to be removed in `v6`. |
-| `$enable-important-utilities` | `true` (default) or `false` | Enables the `!important` suffix in utility classes. |
-| `$enable-smooth-scroll` | `true` (default) or `false` | Applies `scroll-behavior: smooth` globally, except for users asking for reduced motion through [`prefers-reduced-motion` media query]({{< docsref "/getting-started/accessibility#reduced-motion" >}}) |
-{{< /bs-table >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/overview.md b/vendor/twbs/bootstrap/site/content/docs/5.2/customize/overview.md
deleted file mode 100644
index d0a853cd6..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/overview.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-layout: docs
-title: Customize
-description: Learn how to theme, customize, and extend Bootstrap with Sass, a boatload of global options, an expansive color system, and more.
-group: customize
-toc: false
-aliases: "/docs/5.2/customize/"
-sections:
- - title: Sass
- description: Utilize our source Sass files to take advantage of variables, maps, mixins, and functions.
- - title: Options
- description: Customize Bootstrap with built-in variables to easily toggle global CSS preferences.
- - title: Color
- description: Learn about and customize the color systems that support the entire toolkit.
- - title: Components
- description: Learn how we build nearly all our components responsively and with base and modifier classes.
- - title: CSS variables
- description: Use Bootstrap's CSS custom properties for fast and forward-looking design and development.
- - title: Optimize
- description: Keep your projects lean, responsive, and maintainable so you can deliver the best experience.
----
-
-## Overview
-
-There are multiple ways to customize Bootstrap. Your best path can depend on your project, the complexity of your build tools, the version of Bootstrap you're using, browser support, and more.
-
-Our two preferred methods are:
-
-1. Using Bootstrap [via package manager]({{< docsref "/getting-started/download#package-managers" >}}) so you can use and extend our source files.
-2. Using Bootstrap's compiled distribution files or [jsDelivr]({{< docsref "/getting-started/download#cdn-via-jsdelivr" >}}) so you can add onto or override Bootstrap's styles.
-
-While we cannot go into details here on how to use every package manager, we can give some guidance on [using Bootstrap with your own Sass compiler]({{< docsref "/customize/sass" >}}).
-
-For those who want to use the distribution files, review the [getting started page]({{< docsref "/getting-started/introduction" >}}) for how to include those files and an example HTML page. From there, consult the docs for the layout, components, and behaviors you'd like to use.
-
-As you familiarize yourself with Bootstrap, continue exploring this section for more details on how to utilize our global options, making use of and changing our color system, how we build our components, how to use our growing list of CSS custom properties, and how to optimize your code when building with Bootstrap.
-
-## CSPs and embedded SVGs
-
-Several Bootstrap components include embedded SVGs in our CSS to style components consistently and easily across browsers and devices. **For organizations with more strict <abbr title="Content Security Policy">CSP</abbr> configurations**, we've documented all instances of our embedded SVGs (all of which are applied via `background-image`) so you can more thoroughly review your options.
-
-- [Accordion]({{< docsref "/components/accordion" >}})
-- [Carousel controls]({{< docsref "/components/carousel#with-controls" >}})
-- [Close button]({{< docsref "/components/close-button" >}}) (used in alerts and modals)
-- [Form checkboxes and radio buttons]({{< docsref "/forms/checks-radios" >}})
-- [Form switches]({{< docsref "/forms/checks-radios#switches" >}})
-- [Form validation icons]({{< docsref "/forms/validation#server-side" >}})
-- [Navbar toggle buttons]({{< docsref "/components/navbar#responsive-behaviors" >}})
-- [Select menus]({{< docsref "/forms/select" >}})
-
-Based on [community conversation](https://github.com/twbs/bootstrap/issues/25394), some options for addressing this in your own codebase include [replacing the URLs with locally hosted assets]({{< docsref "/getting-started/webpack#extracting-svg-files" >}}), removing the images and using inline images (not possible in all components), and modifying your CSP. Our recommendation is to carefully review your own security policies and decide on the best path forward, if necessary.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/sass.md b/vendor/twbs/bootstrap/site/content/docs/5.2/customize/sass.md
deleted file mode 100644
index 0fd90bc37..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/sass.md
+++ /dev/null
@@ -1,311 +0,0 @@
----
-layout: docs
-title: Sass
-description: Utilize our source Sass files to take advantage of variables, maps, mixins, and functions to help you build faster and customize your project.
-group: customize
-toc: true
----
-
-Utilize our source Sass files to take advantage of variables, maps, mixins, and more.
-
-## File structure
-
-Whenever possible, avoid modifying Bootstrap's core files. For Sass, that means creating your own stylesheet that imports Bootstrap so you can modify and extend it. Assuming you're using a package manager like npm, you'll have a file structure that looks like this:
-
-```text
-your-project/
-├── scss
-│ └── custom.scss
-└── node_modules/
- └── bootstrap
- ├── js
- └── scss
-```
-
-If you've downloaded our source files and aren't using a package manager, you'll want to manually create something similar to that structure, keeping Bootstrap's source files separate from your own.
-
-```text
-your-project/
-├── scss
-│ └── custom.scss
-└── bootstrap/
- ├── js
- └── scss
-```
-
-## Importing
-
-In your `custom.scss`, you'll import Bootstrap's source Sass files. You have two options: include all of Bootstrap, or pick the parts you need. We encourage the latter, though be aware there are some requirements and dependencies across our components. You also will need to include some JavaScript for our plugins.
-
-```scss
-// Custom.scss
-// Option A: Include all of Bootstrap
-
-// Include any default variable overrides here (though functions won't be available)
-
-@import "../node_modules/bootstrap/scss/bootstrap";
-
-// Then add additional custom code here
-```
-
-```scss
-// Custom.scss
-// Option B: Include parts of Bootstrap
-
-// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc)
-@import "../node_modules/bootstrap/scss/functions";
-
-// 2. Include any default variable overrides here
-
-// 3. Include remainder of required Bootstrap stylesheets
-@import "../node_modules/bootstrap/scss/variables";
-
-// 4. Include any default map overrides here
-
-// 5. Include remainder of required parts
-@import "../node_modules/bootstrap/scss/maps";
-@import "../node_modules/bootstrap/scss/mixins";
-@import "../node_modules/bootstrap/scss/root";
-
-// 6. Optionally include any other parts as needed
-@import "../node_modules/bootstrap/scss/utilities";
-@import "../node_modules/bootstrap/scss/reboot";
-@import "../node_modules/bootstrap/scss/type";
-@import "../node_modules/bootstrap/scss/images";
-@import "../node_modules/bootstrap/scss/containers";
-@import "../node_modules/bootstrap/scss/grid";
-@import "../node_modules/bootstrap/scss/helpers";
-
-// 7. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss`
-@import "../node_modules/bootstrap/scss/utilities/api";
-
-// 8. Add additional custom code here
-```
-
-With that setup in place, you can begin to modify any of the Sass variables and maps in your `custom.scss`. You can also start to add parts of Bootstrap under the `// Optional` section as needed. We suggest using the full import stack from our `bootstrap.scss` file as your starting point.
-
-## Variable defaults
-
-Every Sass variable in Bootstrap includes the `!default` flag allowing you to override the variable's default value in your own Sass without modifying Bootstrap's source code. Copy and paste variables as needed, modify their values, and remove the `!default` flag. If a variable has already been assigned, then it won't be re-assigned by the default values in Bootstrap.
-
-You will find the complete list of Bootstrap's variables in `scss/_variables.scss`. Some variables are set to `null`, these variables don't output the property unless they are overridden in your configuration.
-
-Variable overrides must come after our functions are imported, but before the rest of the imports.
-
-Here's an example that changes the `background-color` and `color` for the `<body>` when importing and compiling Bootstrap via npm:
-
-```scss
-// Required
-@import "../node_modules/bootstrap/scss/functions";
-
-// Default variable overrides
-$body-bg: #000;
-$body-color: #111;
-
-// Required
-@import "../node_modules/bootstrap/scss/variables";
-@import "../node_modules/bootstrap/scss/maps";
-@import "../node_modules/bootstrap/scss/mixins";
-@import "../node_modules/bootstrap/scss/root";
-
-// Optional Bootstrap components here
-@import "../node_modules/bootstrap/scss/reboot";
-@import "../node_modules/bootstrap/scss/type";
-// etc
-```
-
-Repeat as necessary for any variable in Bootstrap, including the global options below.
-
-{{< callout info >}}
-{{< partial "callout-info-npm-starter.md" >}}
-{{< /callout >}}
-
-## Maps and loops
-
-Bootstrap includes a handful of Sass maps, key value pairs that make it easier to generate families of related CSS. We use Sass maps for our colors, grid breakpoints, and more. Just like Sass variables, all Sass maps include the `!default` flag and can be overridden and extended.
-
-Some of our Sass maps are merged into empty ones by default. This is done to allow easy expansion of a given Sass map, but comes at the cost of making _removing_ items from a map slightly more difficult.
-
-### Modify map
-
-All variables in the `$theme-colors` map are defined as standalone variables. To modify an existing color in our `$theme-colors` map, add the following to your custom Sass file:
-
-```scss
-$primary: #0074d9;
-$danger: #ff4136;
-```
-
-Later on, these variables are set in Bootstrap's `$theme-colors` map:
-
-```scss
-$theme-colors: (
- "primary": $primary,
- "danger": $danger
-);
-```
-
-### Add to map
-
-Add new colors to `$theme-colors`, or any other map, by creating a new Sass map with your custom values and merging it with the original map. In this case, we'll create a new `$custom-colors` map and merge it with `$theme-colors`.
-
-```scss
-// Create your own map
-$custom-colors: (
- "custom-color": #900
-);
-
-// Merge the maps
-$theme-colors: map-merge($theme-colors, $custom-colors);
-```
-
-### Remove from map
-
-To remove colors from `$theme-colors`, or any other map, use `map-remove`. Be aware you must insert `$theme-colors` between our requirements just after its definition in `variables` and before its usage in `maps`:
-
-```scss
-// Required
-@import "../node_modules/bootstrap/scss/functions";
-@import "../node_modules/bootstrap/scss/variables";
-
-$theme-colors: map-remove($theme-colors, "info", "light", "dark");
-
-@import "../node_modules/bootstrap/scss/maps";
-@import "../node_modules/bootstrap/scss/mixins";
-@import "../node_modules/bootstrap/scss/root";
-
-// Optional
-@import "../node_modules/bootstrap/scss/reboot";
-@import "../node_modules/bootstrap/scss/type";
-// etc
-```
-
-## Required keys
-
-Bootstrap assumes the presence of some specific keys within Sass maps as we used and extend these ourselves. As you customize the included maps, you may encounter errors where a specific Sass map's key is being used.
-
-For example, we use the `primary`, `success`, and `danger` keys from `$theme-colors` for links, buttons, and form states. Replacing the values of these keys should present no issues, but removing them may cause Sass compilation issues. In these instances, you'll need to modify the Sass code that makes use of those values.
-
-## Functions
-
-### Colors
-
-Next to the [Sass maps]({{< docsref "/customize/color#color-sass-maps" >}}) we have, theme colors can also be used as standalone variables, like `$primary`.
-
-```scss
-.custom-element {
- color: $gray-100;
- background-color: $dark;
-}
-```
-
-You can lighten or darken colors with Bootstrap's `tint-color()` and `shade-color()` functions. These functions will mix colors with black or white, unlike Sass' native `lighten()` and `darken()` functions which will change the lightness by a fixed amount, which often doesn't lead to the desired effect.
-
-{{< scss-docs name="color-functions" file="scss/_functions.scss" >}}
-
-In practice, you'd call the function and pass in the color and weight parameters.
-
-```scss
-.custom-element {
- color: tint-color($primary, 10%);
-}
-
-.custom-element-2 {
- color: shade-color($danger, 30%);
-}
-```
-
-### Color contrast
-
-In order to meet the [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/TR/WCAG/) contrast requirements, authors **must** provide a minimum [text color contrast of 4.5:1](https://www.w3.org/TR/WCAG/#contrast-minimum) and a minimum [non-text color contrast of 3:1](https://www.w3.org/TR/WCAG/#non-text-contrast), with very few exceptions.
-
-To help with this, we included the `color-contrast` function in Bootstrap. It uses the [WCAG contrast ratio algorithm](https://www.w3.org/TR/WCAG/#dfn-contrast-ratio) for calculating contrast thresholds based on [relative luminance](https://www.w3.org/TR/WCAG/#dfn-relative-luminance) in an `sRGB` color space to automatically return a light (`#fff`), dark (`#212529`) or black (`#000`) contrast color based on the specified base color. This function is especially useful for mixins or loops where you're generating multiple classes.
-
-For example, to generate color swatches from our `$theme-colors` map:
-
-```scss
-@each $color, $value in $theme-colors {
- .swatch-#{$color} {
- color: color-contrast($value);
- }
-}
-```
-
-It can also be used for one-off contrast needs:
-
-```scss
-.custom-element {
- color: color-contrast(#000); // returns `color: #fff`
-}
-```
-
-You can also specify a base color with our color map functions:
-
-```scss
-.custom-element {
- color: color-contrast($dark); // returns `color: #fff`
-}
-```
-
-### Escape SVG
-
-We use the `escape-svg` function to escape the `<`, `>` and `#` characters for SVG background images. When using the `escape-svg` function, data URIs must be quoted.
-
-### Add and Subtract functions
-
-We use the `add` and `subtract` functions to wrap the CSS `calc` function. The primary purpose of these functions is to avoid errors when a "unitless" `0` value is passed into a `calc` expression. Expressions like `calc(10px - 0)` will return an error in all browsers, despite being mathematically correct.
-
-Example where the calc is valid:
-
-```scss
-$border-radius: .25rem;
-$border-width: 1px;
-
-.element {
- // Output calc(.25rem - 1px) is valid
- border-radius: calc($border-radius - $border-width);
-}
-
-.element {
- // Output the same calc(.25rem - 1px) as above
- border-radius: subtract($border-radius, $border-width);
-}
-```
-
-Example where the calc is invalid:
-
-```scss
-$border-radius: .25rem;
-$border-width: 0;
-
-.element {
- // Output calc(.25rem - 0) is invalid
- border-radius: calc($border-radius - $border-width);
-}
-
-.element {
- // Output .25rem
- border-radius: subtract($border-radius, $border-width);
-}
-```
-
-## Mixins
-
-Our `scss/mixins/` directory has a ton of mixins that power parts of Bootstrap and can also be used across your own project.
-
-### Color schemes
-
-A shorthand mixin for the `prefers-color-scheme` media query is available with support for `light`, `dark`, and custom color schemes.
-
-{{< scss-docs name="mixin-color-scheme" file="scss/mixins/_color-scheme.scss" >}}
-
-```scss
-.custom-element {
- @include color-scheme(dark) {
- // Insert dark mode styles here
- }
-
- @include color-scheme(custom-named-scheme) {
- // Insert custom color scheme styles here
- }
-}
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet-rtl/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet-rtl/index.html
deleted file mode 100644
index a05799873..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet-rtl/index.html
+++ /dev/null
@@ -1,1618 +0,0 @@
----
-layout: examples
-title: ورقة الغش
-extra_css:
- - "../cheatsheet/cheatsheet.rtl.css"
-extra_js:
- - src: "../cheatsheet/cheatsheet.js"
-body_class: "bg-light"
-direction: rtl
----
-
-<header class="bd-header bg-dark py-3 d-flex align-items-stretch border-bottom border-dark">
- <div class="container-fluid d-flex align-items-center">
- <h1 class="d-flex align-items-center fs-4 text-white mb-0">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="me-3" alt="Bootstrap">
- ورقة الغش
- </h1>
- <a href="{{< docsref "/examples/cheatsheet" >}}" class="ms-auto link-light" hreflang="en">جدول بيانات LTR</a>
- </div>
-</header>
-<aside class="bd-aside sticky-xl-top text-muted align-self-start mb-3 mb-xl-5 px-2">
- <h2 class="h6 pt-4 pb-3 mb-4 border-bottom">على هذه الصفحة</h2>
- <nav class="small" id="toc">
- <ul class="list-unstyled">
- <li class="my-2">
- <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#contents-collapse" aria-controls="contents-collapse">المحتوى</button>
- <ul class="list-unstyled ps-3 collapse" id="contents-collapse">
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#typography">النصوص</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#images">الصور</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#tables">الجداول</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#figures">النماذج البيانية</a></li>
- </ul>
- </li>
- <li class="my-2">
- <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#forms-collapse" aria-controls="forms-collapse">النماذج</button>
- <ul class="list-unstyled ps-3 collapse" id="forms-collapse">
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#overview">نظرة عامة</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#disabled-forms">الحقول المعطلة</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#sizing">الأحجام</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#input-group">مجموعة الإدخال</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#floating-labels">الحقول ذوي العناوين العائمة</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#validation">التحقق</a></li>
- </ul>
- </li>
- <li class="my-2">
- <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#components-collapse" aria-controls="components-collapse">مكونات</button>
- <ul class="list-unstyled ps-3 collapse" id="components-collapse">
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#accordion">المطوية</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#alerts">الإنذارات</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#badge">الشارة</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#breadcrumb">مسار التنقل التفصيلي</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#buttons">الأزرار</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#button-group">مجموعة الأزرار</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#card">البطاقة</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#carousel">شرائح العرض</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#dropdowns">القوائم المنسدلة</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#list-group">مجموعة العناصر</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#modal">الصندوق العائم</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#navs">التنقل</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#navbar">شريط التنقل</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#pagination">ترقيم الصفحات</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#popovers">الصناديق المنبثقة</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#progress">شريط التقدم</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#scrollspy">المخطوطة</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#spinners">الدوائر المتحركة</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#toasts">الإشعارات</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#tooltips">التلميحات</a></li>
- </ul>
- </li>
- </ul>
- </nav>
-</aside>
-<div class="bd-cheatsheet container-fluid bg-body">
- <section id="content">
- <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">المحتوى</h2>
-
- <article class="my-3" id="typography">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>النصوص</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/content/typography" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <p class="display-1">العرض 1</p>
- <p class="display-2">العرض 2</p>
- <p class="display-3">العرض 3</p>
- <p class="display-4">العرض 4</p>
- <p class="display-5">العرض 5</p>
- <p class="display-6">العرض 6</p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <p class="h1">عنوان 1</p>
- <p class="h2">عنوان 2</p>
- <p class="h3">عنوان 3</p>
- <p class="h4">عنوان 4</p>
- <p class="h5">عنوان 5</p>
- <p class="h6">عنوان 6</p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <p class="lead">
- هذه قطعة إملائية متميزة، فهي مصممة لتكون بارزة من بين القطع الإملائية الأخرى.
- </p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <p>يمكنك استخدام تصنيف mark <mark>لتحديد</mark> نص.</p>
- <p><del>من المفترض أن يتم التعامل مع هذا السطر كنص محذوف.</del></p>
- <p><s>من المفترض أن يتم التعامل مع هذا السطر على أنه لم يعد دقيقًا.</s></p>
- <p><ins>من المفترض أن يتم التعامل مع هذا السطر كإضافة إلى المستند.</ins></p>
- <p><u>سيتم عرض النص في هذا السطر كما وتحته خط.</u></p>
- <p><small>من المفترض أن يتم التعامل مع هذا السطر على أنه يحوي تفاصيل صغيرة.</small></p>
- <p><strong>هذا السطر يحوي نص عريض.</strong></p>
- <p><em>هذا السطر يحوي نص مائل.</em></p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <hr>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <blockquote class="blockquote">
- <p>إقتباس مبهر، موضوع في عنصر blockquote</p>
- <footer class="blockquote-footer">شخص مشهور في <cite title= "عنوان المصدر"> عنوان المصدر </cite></footer>
- </blockquote>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <ul class="list-unstyled">
- <li>هذه قائمة عناصر.</li>
- <li>بالرغم من أنها مصممة كي لا تظهر كذلك.</li>
- <li>إلا أنها مجهزة كـ قائمة خلف الكواليس</li>
- <li>هذا التصميم ينطبق فقد على القائمة الرئيسية</li>
- <li>القوائم الفرعية
- <ul>
- <li>لا تتأثر بهذا التصميم</li>
- <li>فهي تظهر عليها علامات الترقيم</li>
- <li>وتحتوي على مساحة فارغة بجوارها</li>
- </ul>
- </li>
- <li>قد يكون هذا التصميم مفيدًا في بعض الأحيان.</li>
- </ul>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <ul class="list-inline">
- <li class="list-inline-item">هذا عنصر في قائمة.</li>
- <li class="list-inline-item">وهذا أيضًا.</li>
- <li class="list-inline-item">لكنهم يظهرون متجاورين.</li>
- </ul>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="images">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الصور</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/content/images" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- {{< placeholder width="100%" height="250" class="bd-placeholder-img-lg img-fluid" text="صورة مستجيبة" >}}
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- {{< placeholder width="200" height="200" class="img-thumbnail" title="صورة عنصر نائب مربع عام مع حدود بيضاء حولها ، مما يجعلها تشبه صورة تم التقاطها بكاميرا فورية قديمة" >}}
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="tables">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الجداول</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/content/tables" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <table class="table table-striped">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">الاسم الاول</th>
- <th scope="col">الكنية</th>
- <th scope="col">الاسم المستعار</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td><bdo lang="en" dir="ltr">@mdo</bdo></td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td><bdo lang="en" dir="ltr">@fat</bdo></td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2">Larry the Bird</td>
- <td><bdo lang="en" dir="ltr">@twitter</bdo></td>
- </tr>
- </tbody>
- </table>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <table class="table table-dark table-borderless">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">الاسم الاول</th>
- <th scope="col">الكنية</th>
- <th scope="col">الاسم المستعار</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td><bdo lang="en" dir="ltr">@mdo</bdo></td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td><bdo lang="en" dir="ltr">@fat</bdo></td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2">Larry the Bird</td>
- <td><bdo lang="en" dir="ltr">@twitter</bdo></td>
- </tr>
- </tbody>
- </table>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <table class="table table-hover">
- <thead>
- <tr>
- <th scope="col">Class</th>
- <th scope="col">عنوان</th>
- <th scope="col">عنوان</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">Default</th>
- <td>خلية</td>
- <td>خلية</td>
- </tr>
- {{< table.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <tr class="table-{{ .name }}">
- <th scope="row">{{ .name | title }}</th>
- <td>خلية</td>
- <td>خلية</td>
- </tr>
- {{- end -}}
- {{< /table.inline >}}
- </tbody>
- </table>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <table class="table table-sm table-bordered">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">الاسم الاول</th>
- <th scope="col">الكنية</th>
- <th scope="col">الاسم المستعار</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td><bdo lang="en" dir="ltr">@mdo</bdo></td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td><bdo lang="en" dir="ltr">@fat</bdo></td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2">Larry the Bird</td>
- <td><bdo lang="en" dir="ltr">@twitter</bdo></td>
- </tr>
- </tbody>
- </table>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="figures">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>النماذج البيانية</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/content/figures" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <figure class="figure">
- {{< placeholder width="400" height="300" class="figure-img img-fluid rounded" >}}
- <figcaption class="figure-caption">شرح للصورة أعلاه.</figcaption>
- </figure>
- {{< /example >}}
- </div>
- </article>
- </section>
-
- <section id="forms">
- <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">النماذج</h2>
-
- <article class="my-3" id="overview">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>نظرة عامة</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/overview" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <form>
- <div class="mb-3">
- <label for="exampleInputEmail1" class="form-label">البريد الإلكتروني</label>
- <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
- <div id="emailHelp" class="form-text">لن نقوم بمشاركة بريدك الإلكتروني مع أي شخص آخر.</div>
- </div>
- <div class="mb-3">
- <label for="exampleInputPassword1" class="form-label">كلمة السر</label>
- <input type="password" class="form-control" id="exampleInputPassword1">
- </div>
- <div class="mb-3">
- <label for="exampleSelect" class="form-label">قائمة اختيار</label>
- <select class="form-select" id="exampleSelect">
- <option selected>افتح قائمة الاختيار هذه</option>
- <option value="1">واحد</option>
- <option value="2">اثنان</option>
- <option value="3">ثلاثة</option>
- </select>
- </div>
- <div class="mb-3 form-check">
- <input type="checkbox" class="form-check-input" id="exampleCheck1">
- <label class="form-check-label" for="exampleCheck1">اخترني</label>
- </div>
- <fieldset class="mb-3">
- <legend>أزرار الاختيار الأحادي</legend>
- <div class="form-check">
- <input type="radio" name="radios" class="form-check-input" id="exampleRadio1" checked>
- <label class="form-check-label" for="exampleRadio1">الخيار الافتراضي</label>
- </div>
- <div class="mb-3 form-check">
- <input type="radio" name="radios" class="form-check-input" id="exampleRadio2">
- <label class="form-check-label" for="exampleRadio2">خيار آخر</label>
- </div>
- </fieldset>
- <div class="mb-3">
- <label class="form-label" for="customFile">رفع</label>
- <input type="file" class="form-control" id="customFile">
- </div>
- <div class="mb-3 form-check form-switch">
- <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckChecked" checked>
- <label class="form-check-label" for="flexSwitchCheckChecked">زر على شكل مفتاح اختيار.</label>
- </div>
- <div class="mb-3">
- <label for="customRange3" class="form-label">مثال على حقل اختيار نطاقي</label>
- <input type="range" class="form-range" min="0" max="5" step="0.5" id="customRange3">
- </div>
- <button type="submit" class="btn btn-primary">إرسال</button>
- </form>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="disabled-forms">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الحقول المعطلة</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/overview" >}}#disabled-forms">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <form>
- <fieldset disabled aria-label="مثال على مجموعة الحقول المعطلة">
- <div class="mb-3">
- <label for="disabledTextInput" class="form-label">حقل إدخال معطل</label>
- <input type="text" id="disabledTextInput" class="form-control" placeholder="حقل إدخال معطل">
- </div>
- <div class="mb-3">
- <label for="disabledSelect" class="form-label">قائمة اختيار معطلة</label>
- <select id="disabledSelect" class="form-select">
- <option>خيار معطل</option>
- </select>
- </div>
- <div class="mb-3">
- <div class="form-check">
- <input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
- <label class="form-check-label" for="disabledFieldsetCheck">
- زر اختيار معطل
- </label>
- </div>
- </div>
- <fieldset class="mb-3">
- <legend>أزرار اختيار أحادي معطلين</legend>
- <div class="form-check">
- <input type="radio" name="radios" class="form-check-input" id="disabledRadio1" disabled>
- <label class="form-check-label" for="disabledRadio1">خيار معطل</label>
- </div>
- <div class="mb-3 form-check">
- <input type="radio" name="radios" class="form-check-input" id="disabledRadio2" disabled>
- <label class="form-check-label" for="disabledRadio2">خيار آخر معطل</label>
- </div>
- </fieldset>
- <div class="mb-3">
- <label class="form-label" for="disabledCustomFile">رفع معطل</label>
- <input type="file" class="form-control" id="disabledCustomFile" disabled>
- </div>
- <div class="mb-3 form-check form-switch">
- <input class="form-check-input" type="checkbox" role="switch" id="disabledSwitchCheckChecked" checked disabled>
- <label class="form-check-label" for="disabledSwitchCheckChecked">زر معطل على شكل مفتاح اختيار.</label>
- </div>
- <div class="mb-3">
- <label for="disabledRange" class="form-label">حقل اختيار نطاقي معطل</label>
- <input type="range" class="form-range" min="0" max="5" step="0.5" id="disabledRange">
- </div>
- <button type="submit" class="btn btn-primary">إرسال</button>
- </fieldset>
- </form>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="sizing">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الأحجام</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/form-control" >}}#sizing">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="mb-3">
- <input class="form-control form-control-lg" type="text" placeholder="حقل إدخال كبير" aria-label=".form-control-lg مثال">
- </div>
- <div class="mb-3">
- <select class="form-select form-select-lg" aria-label=".form-select-lg مثال">
- <option selected>افتح قائمة الاختيار هذه</option>
- <option value="1">واحد</option>
- <option value="2">اثنان</option>
- <option value="3">ثلاثة</option>
- </select>
- </div>
- <div class="mb-3">
- <input type="file" class="form-control form-control-lg" aria-label="مثال على إدخال ملف كبير">
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="mb-3">
- <input class="form-control form-control-sm" type="text" placeholder="حقل إدخال صغير" aria-label=".form-control-sm مثال">
- </div>
- <div class="mb-3">
- <select class="form-select form-select-sm" aria-label=".form-select-sm مثال">
- <option selected>افتح قائمة الاختيار هذه</option>
- <option value="1">واحد</option>
- <option value="2">اثنان</option>
- <option value="3">ثلاثة</option>
- </select>
- </div>
- <div class="mb-3">
- <input type="file" class="form-control form-control-sm" aria-label="مثال على إدخال ملف صغير">
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="input-group">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>مجموعة الإدخال</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/input-group" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="input-group mb-3">
- <span class="input-group-text" id="basic-addon1">أنا اسمي</span>
- <input type="text" class="form-control" placeholder="فلان الفلاني" aria-label="الاسم" aria-describedby="basic-addon1">
- </div>
- <div class="input-group mb-3">
- <input type="text" class="form-control" placeholder="أنا أحب الكعك والقهوة" aria-label="الطعام المفضل" aria-describedby="basic-addon2">
- <span class="input-group-text" id="basic-addon2">وغيرها</span>
- </div>
- <label for="basic-url" class="form-label">عنوان حسابك الشخصي</label>
- <div class="input-group mb-3">
- <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
- <span class="input-group-text" id="basic-addon3"><bdo lang="en" dir="ltr">https://example.com/users/</bdo></span>
- </div>
- <div class="input-group mb-3">
- <span class="input-group-text"><bdo lang="en" dir="ltr">.00</bdo></span>
- <input type="text" class="form-control" aria-label="المبلغ (لأقرب دولار)">
- <span class="input-group-text">$</span>
- </div>
- <div class="input-group">
- <span class="input-group-text">مع textarea</span>
- <textarea class="form-control" aria-label="مع textarea"></textarea>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="floating-labels">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الحقول ذوي العناوين العائمة</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/forms/floating-labels" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <form>
- <div class="form-floating mb-3">
- <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
- <label for="floatingInput">البريد الالكتروني</label>
- </div>
- <div class="form-floating">
- <input type="password" class="form-control" id="floatingPassword" placeholder="كلمة السر">
- <label for="floatingPassword">كلمة السر</label>
- </div>
- </form>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="validation">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>التحقق</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/validation" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <form class="row g-3">
- <div class="col-md-4">
- <label for="validationServer01" class="form-label">الاسم الاول</label>
- <input type="text" class="form-control is-valid" id="validationServer01" value="Mark" required>
- <div class="valid-feedback">
- يبدو صحيحًا!
- </div>
- </div>
- <div class="col-md-4">
- <label for="validationServer02" class="form-label">الكنية</label>
- <input type="text" class="form-control is-valid" id="validationServer02" value="Otto" required>
- <div class="valid-feedback">
- يبدو صحيحًا!
- </div>
- </div>
- <div class="col-md-4">
- <label for="validationServerUsername" class="form-label">اسم المستخدم</label>
- <div class="input-group has-validation">
- <input type="text" class="form-control is-invalid" id="validationServerUsername" aria-describedby="inputGroupPrepend3" required>
- <span class="input-group-text" id="inputGroupPrepend3">@</span>
- <div class="invalid-feedback">
- يرجى اختيار اسم مستخدم.
- </div>
- </div>
- </div>
- <div class="col-md-6">
- <label for="validationServer03" class="form-label">مدينة</label>
- <input type="text" class="form-control is-invalid" id="validationServer03" required>
- <div class="invalid-feedback">
- يرجى إدخال مدينة صحيحة.
- </div>
- </div>
- <div class="col-md-3">
- <label for="validationServer04" class="form-label">حالة</label>
- <select class="form-select is-invalid" id="validationServer04" required>
- <option selected disabled value="">اختر...</option>
- <option>...</option>
- </select>
- <div class="invalid-feedback">
- يرجى اختيار ولاية صحيحة.
- </div>
- </div>
- <div class="col-md-3">
- <label for="validationServer05" class="form-label">الرمز البريدي</label>
- <input type="text" class="form-control is-invalid" id="validationServer05" required>
- <div class="invalid-feedback">
- يرجى إدخال رمز بريدي صحيح.
- </div>
- </div>
- <div class="col-12">
- <div class="form-check">
- <input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" required>
- <label class="form-check-label" for="invalidCheck3">
- أوافق على الشروط والأحكام
- </label>
- <div class="invalid-feedback">
- تجب الموافقة قبل إرسال النموذج.
- </div>
- </div>
- </div>
- <div class="col-12">
- <button class="btn btn-primary" type="submit">إرسال النموذج</button>
- </div>
- </form>
- {{< /example >}}
- </div>
- </article>
- </section>
-
- <section id="components">
- <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">العناصر</h2>
-
- <article class="my-3" id="accordion">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>المطوية</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/accordion" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="accordion" id="accordionExample">
- <div class="accordion-item">
- <h4 class="accordion-header" id="headingOne">
- <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
- عنصر المطوية الأول
- </button>
- </h4>
- <div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
- <div class="accordion-body">
- <strong>هذا هو محتوى عنصر المطوية الأول.</strong> سيكون المحتوى مخفيًا بشكل إفتراضي حتى يقوم Bootstrap بإضافة الكلاسات اللازمة لكل عنصر في المطوية. هذه الكلاسات تتحكم بالمظهر العام ووتتحكم أيضا بإظهار وإخفاء أقسام المطوية عبر حركات CSS الإنتقالية. يمكنك تعديل أي من هذه عبر كلاسات CSS خاصة بك، او عبر تغيير القيم الإفتراضية المقدمة من Bootstrap. من الجدير بالذكر أنه يمكن وضع أي كود HTML هنا، ولكن الحركة الإنتقالية قد تحد من الoverflow.
- </div>
- </div>
- </div>
- <div class="accordion-item">
- <h4 class="accordion-header" id="headingTwo">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
- عنصر المطوية الثاني
- </button>
- </h4>
- <div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#accordionExample">
- <div class="accordion-body">
- <strong>هذا هو محتوى عنصر المطوية الثاني.</strong> سيكون المحتوى مخفيًا بشكل إفتراضي حتى يقوم Bootstrap بإضافة الكلاسات اللازمة لكل عنصر في المطوية. هذه الكلاسات تتحكم بالمظهر العام ووتتحكم أيضا بإظهار وإخفاء أقسام المطوية عبر حركات CSS الإنتقالية. يمكنك تعديل أي من هذه عبر كلاسات CSS خاصة بك، او عبر تغيير القيم الإفتراضية المقدمة من Bootstrap. من الجدير بالذكر أنه يمكن وضع أي كود HTML هنا، ولكن الحركة الإنتقالية قد تحد من الoverflow.
- </div>
- </div>
- </div>
- <div class="accordion-item">
- <h4 class="accordion-header" id="headingThree">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
- عنصر المطوية الثالث
- </button>
- </h4>
- <div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
- <div class="accordion-body">
- <strong>هذا هو محتوى عنصر المطوية الثالث.</strong> سيكون المحتوى مخفيًا بشكل إفتراضي حتى يقوم Bootstrap بإضافة الكلاسات اللازمة لكل عنصر في المطوية. هذه الكلاسات تتحكم بالمظهر العام ووتتحكم أيضا بإظهار وإخفاء أقسام المطوية عبر حركات CSS الإنتقالية. يمكنك تعديل أي من هذه عبر كلاسات CSS خاصة بك، او عبر تغيير القيم الإفتراضية المقدمة من Bootstrap. من الجدير بالذكر أنه يمكن وضع أي كود HTML هنا، ولكن الحركة الإنتقالية قد تحد من الoverflow.
- </div>
- </div>
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="alerts">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الإنذارات</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/alerts" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- {{< alerts.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <div class="alert alert-{{ .name }} alert-dismissible fade show" role="alert">
- تنبيه {{ .name }} بسيط مع <a href="#" class="alert-link">رابط مثال</a>. أعطها نقرة إذا أردت.
- <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="قريب"></button>
- </div>{{ end -}}
- {{< /alerts.inline >}}
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="alert alert-success" role="alert">
- <h4 class="alert-heading">أحسنت!</h4>
- <p>لقد نجحت في قراءة رسالة التنبيه المهمة هذه. سيتم تشغيل نص المثال هذا لفترة أطول قليلاً حتى تتمكن من رؤية كيفية عمل التباعد داخل التنبيه مع هذا النوع من المحتوى.</p>
- <hr>
- <p class="mb-0">كلما احتجت إلى ذلك ، تأكد من استخدام أدوات الهامش للحفاظ على الأشياء لطيفة ومرتبة.</p>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="badge">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الشارة</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/badge" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <p class="h1">مثال على عنوان <span class="badge bg-primary">جديد</span></p>
- <p class="h2">مثال على عنوان <span class="badge bg-secondary">جديد</span></p>
- <p class="h3">مثال على عنوان <span class="badge bg-success">جديد</span></p>
- <p class="h4">مثال على عنوان <span class="badge bg-danger">جديد</span></p>
- <p class="h5">مثال على عنوان <span class="badge text-bg-warning">جديد</span></p>
- <p class="h6">مثال على عنوان <span class="badge text-bg-info">جديد</span></p>
- <p class="h6">مثال على عنوان <span class="badge text-bg-light">جديد</span></p>
- <p class="h6">مثال على عنوان <span class="badge bg-dark">جديد</span></p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- {{< badge.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <span class="badge rounded-pill {{ if or (eq .name "light") (eq .name "warning") (eq .name "info") }}text-{{ end }}bg-{{ .name }}">{{ .name | title }}</span>{{- end -}}
- {{< /badge.inline >}}
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="breadcrumb">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>مسار التنقل التفصيلي (فتات الخبز)</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/breadcrumb" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <nav aria-label="فتات الخبز">
- <ol class="breadcrumb">
- <li class="breadcrumb-item"><a href="#">الصفحة الرئيسية</a></li>
- <li class="breadcrumb-item"><a href="#">المكتبة</a></li>
- <li class="breadcrumb-item active" aria-current="page">البيانات</li>
- </ol>
- </nav>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="buttons">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الأزرار</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/buttons" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- {{< buttons.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <button type="button" class="btn btn-{{ .name }}">{{ .name | title }}</button>
- {{- end -}}
- {{< /buttons.inline >}}
-
- <button type="button" class="btn btn-link">رابط</button>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- {{< buttons.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <button type="button" class="btn btn-outline-{{ .name }}">{{ .name | title }}</button>
- {{- end -}}
- {{< /buttons.inline >}}
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <button type="button" class="btn btn-primary btn-sm">زر صغير</button>
- <button type="button" class="btn btn-primary">زر قياسي</button>
- <button type="button" class="btn btn-primary btn-lg">زر كبير</button>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="button-group">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>مجموعة الأزرار</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/button-group" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="btn-toolbar" role="toolbar" aria-label="شريط أدوات مع مجموعات أزرار">
- <div class="btn-group me-2" role="group" aria-label="المجموعة الأولى">
- <button type="button" class="btn btn-secondary">1</button>
- <button type="button" class="btn btn-secondary">2</button>
- <button type="button" class="btn btn-secondary">3</button>
- <button type="button" class="btn btn-secondary">4</button>
- </div>
- <div class="btn-group me-2" role="group" aria-label="المجموعة الثانية">
- <button type="button" class="btn btn-secondary">5</button>
- <button type="button" class="btn btn-secondary">6</button>
- <button type="button" class="btn btn-secondary">7</button>
- </div>
- <div class="btn-group" role="group" aria-label="المجموعة الثالثة">
- <button type="button" class="btn btn-secondary">8</button>
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="card">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>البطاقة</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/card" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="row row-cols-1 row-cols-md-2 g-4">
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="180" class="card-img-top" text="غطاء الصورة" >}}
- <div class="card-body">
- <h5 class="card-title">عنوان البطاقة</h5>
- <p class="card-text">بعض الأمثلة السريعة للنصوص للبناء على عنوان البطاقة وتشكيل الجزء الأكبر من محتوى البطاقة.</p>
- <a href="#" class="btn btn-primary">اذهب لمكان ما</a>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- <div class="card-header">
- متميز
- </div>
- <div class="card-body">
- <h5 class="card-title">عنوان البطاقة</h5>
- <p class="card-text">بعض الأمثلة السريعة للنصوص للبناء على عنوان البطاقة وتشكيل الجزء الأكبر من محتوى البطاقة.</p>
- <a href="#" class="btn btn-primary">اذهب لمكان ما</a>
- </div>
- <div class="card-footer text-muted">
- منذ يومان
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- <div class="card-body">
- <h5 class="card-title">عنوان البطاقة</h5>
- <p class="card-text">بعض الأمثلة السريعة للنصوص للبناء على عنوان البطاقة وتشكيل الجزء الأكبر من محتوى البطاقة.</p>
- </div>
- <ul class="list-group list-group-flush">
- <li class="list-group-item">عنصر</li>
- <li class="list-group-item">عنصر آخر</li>
- <li class="list-group-item">عنصر ثالث</li>
- </ul>
- <div class="card-body">
- <a href="#" class="card-link">رابط البطاقة</a>
- <a href="#" class="card-link">رابط آخر</a>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- <div class="row g-0">
- <div class="col-md-4">
- {{< placeholder width="100%" height="250" text="صورة" >}}
- </div>
- <div class="col-md-8">
- <div class="card-body">
- <h5 class="card-title">عنوان البطاقة</h5>
- <p class="card-text">هذه بطاقة أعرض مع نص داعم تحتها كمقدمة طبيعية لمحتوى إضافي. هذا المحتوى أطول قليلاً.</p>
- <p class="card-text"><small class="text-muted">آخر تحديث منذ 3 دقائق</small></p>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="carousel">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>شرائح العرض</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/carousel" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel">
- <div class="carousel-indicators">
- <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="الشريحة الأولى"></button>
- <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="الشريحة الثانية"></button>
- <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="الشريحة الثالثة"></button>
- </div>
- <div class="carousel-inner">
- <div class="carousel-item active">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="الشريحة الأولى" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>عنوان الشريحة الأولى</h5>
- <p>محتوى وصفي يعبئ فراغ الشريحة الأولى.</p>
- </div>
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="الشريحة الثانية" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>عنوان الشريحة الثانية</h5>
- <p>محتوى وصفي يعبئ فراغ الشريحة الأولى.</p>
- </div>
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="الشريحة الثالثة" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>عنوان الشريحة الثالثة</h5>
- <p>محتوى وصفي يعبئ فراغ الشريحة الأولى.</p>
- </div>
- </div>
- </div>
- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="visually-hidden">السابق</span>
- </button>
- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="visually-hidden">التالي</span>
- </button>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="dropdowns">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>القوائم المنسدلة</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/dropdowns" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
- <div class="dropdown">
- <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- زر القائمة المنسدلة
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
- </ul>
- </div>
- <div class="dropdown">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- زر القائمة المنسدلة
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
- </ul>
- </div>
- <div class="dropdown">
- <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- زر القائمة المنسدلة
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
- </ul>
- </div>
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="btn-group">
- <button type="button" class="btn btn-primary">Primary</button>
- <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">تبديل القائمة المنسدلة</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-secondary">Secondary</button>
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">تبديل القائمة المنسدلة</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-success">Success</button>
- <button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">تبديل القائمة المنسدلة</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-info">Info</button>
- <button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">تبديل القائمة المنسدلة</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-warning">Warning</button>
- <button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">تبديل القائمة المنسدلة</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-danger">Danger</button>
- <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">تبديل القائمة المنسدلة</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- </ul>
- </div><!-- /btn-group -->
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
- <div class="dropend">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- زر القائمة المنسدلة لليسار
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
- </ul>
- </div>
- <div class="dropup">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- زر القائمة المنسدلة للأعلى
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
- </ul>
- </div>
- <div class="dropstart">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- زر القائمة المنسدلة لليمين
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
- </ul>
- </div>
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="btn-group">
- <div class="dropdown">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- قائمة منسدلة بمحاذاة نهاية الزر
- </button>
- <ul class="dropdown-menu dropdown-menu-end">
- <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
- </ul>
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="list-group">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>مجموعة العناصر</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/list-group" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <ul class="list-group">
- <li class="list-group-item disabled" aria-disabled="true">عنصر معطل</li>
- <li class="list-group-item">عنصر ثاني</li>
- <li class="list-group-item">عنصر ثالث</li>
- <li class="list-group-item">عنصر رابع</li>
- <li class="list-group-item">وعنصر خامس أيضًا</li>
- </ul>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <ul class="list-group list-group-flush">
- <li class="list-group-item">عنصر</li>
- <li class="list-group-item">عنصر ثاني</li>
- <li class="list-group-item">عنصر ثالث</li>
- <li class="list-group-item">عنصر رابع</li>
- <li class="list-group-item">وعنصر خامس أيضًا</li>
- </ul>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="list-group">
- <a href="#" class="list-group-item list-group-item-action">عنصر مجموعة قائمة default بسيط</a>
- {{< list.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <a href="#" class="list-group-item list-group-item-action list-group-item-{{ .name }}">عنصر مجموعة قائمة {{ .name }} بسيط</a>
- {{- end -}}
- {{< /list.inline >}}
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="modal">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الصندوق العائم</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/modal" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="d-flex justify-content-between flex-wrap">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalDefault">
- إطلاق صندوق عائم تجريبي
- </button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdropLive">
- إطلاق صندوق عائم عالق
- </button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalCenteredScrollable">
- صندوق عائم متنصف عاموديًا وقابل للتمرير
- </button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreen">
- صندوق عائم يملأ الشاشة
- </button>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="navs">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>التنقل</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/navs-tabs" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <nav class="nav">
- <a class="nav-link active" aria-current="page" href="#">نشط</a>
- <a class="nav-link" href="#">رابط</a>
- <a class="nav-link" href="#">رابط</a>
- <a class="nav-link disabled">معطل</a>
- </nav>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <nav>
- <div class="nav nav-tabs mb-3" id="nav-tab" role="tablist">
- <button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">الصفحة الرئيسية</button>
- <button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">الملف الشخصي</button>
- <button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">اتصل بنا</button>
- </div>
- </nav>
- <div class="tab-content" id="nav-tabContent">
- <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">
- <p class="px-3">محتوى لتوضيح كيف يعمل التبويب. هذا المحتوى مرتبط بتبويب الصفحة الرئيسية. إذن، أمامنا بعض التحدّيات الصعبة. لكن لا يمكننا أن نعتمد على التطورات التكنولوجية وحدها في ميدان قوى السوق الحرة، لإخراجنا من هذه الورطة، لا سيّما أنها نفسها، مقرونة بالافتقار إلى البصيرة، هي التي أودت بنا إلى هذا التبدُّل المناخي في الدرجة الأولى.</p>
- </div>
- <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">
- <p class="px-3">محتوى لتوضيح كيف يعمل التبويب. هذا المحتوى مرتبط بتبويب الملف الشخصي. معظم البشر في بلدان العالَم النامي، لم يقتنوا بعد مكيّفهم الأول، والمشكلة إلى ازدياد. فمعظم البلدان النامية هي من البلدان الأشد حرارة والأكثر اكتظاظًا بالسكان في العالم.</p>
- </div>
- <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">
- <p class="px-3">محتوى لتوضيح كيف يعمل التبويب. هذا المحتوى مرتبط بتبويب الاتصال بنا. أمامنا بعض التحدّيات الصعبة. لكن لا يمكننا أن نعتمد على التطورات التكنولوجية وحدها في ميدان قوى السوق الحرة، بل يجب وضع معايير جدوى جديدة لشركات البناء ومعايير أعلى لجدوى التكييف من أجل تحفيز الحلول المستدامة قانونيًا.</p>
- </div>
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <ul class="nav nav-pills">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">نشط</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">رابط</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">رابط</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">معطل</a>
- </li>
- </ul>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="navbar">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>شريط التنقل</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/navbar" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="d-inline-block align-top" alt="Bootstrap" loading="lazy"
- style="filter: invert(1) grayscale(100%) brightness(200%);">
- </a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="تبديل التنقل">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarSupportedContent">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">الصفحة الرئيسية</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">رابط</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- قائمة منسدلة
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- </ul>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">معطل</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="بحث" aria-label="بحث">
- <button class="btn btn-outline-dark" type="submit">بحث</button>
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-lg navbar-dark bg-primary mt-5">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="d-inline-block align-top" alt="Bootstrap" loading="lazy">
- </a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent2" aria-controls="navbarSupportedContent2" aria-expanded="false" aria-label="تبديل التنقل">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarSupportedContent2">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">الصفحة الرئيسية</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">رابط</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- قائمة منسدلة
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">عمل</a></li>
- <li><a class="dropdown-item" href="#">عمل آخر</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
- </ul>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">معطل</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="بحث" aria-label="بحث">
- <button class="btn btn-outline-light" type="submit">بحث</button>
- </form>
- </div>
- </div>
- </nav>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="pagination">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>ترقيم الصفحات</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/pagination" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <nav aria-label="مثال ترقيم الصفحات">
- <ul class="pagination pagination-sm">
- <li class="page-item"><a class="page-link" href="#">1</a></li>
- <li class="page-item active" aria-current="page">
- <a class="page-link" href="#">2</a>
- </li>
- <li class="page-item"><a class="page-link" href="#">3</a></li>
- </ul>
- </nav>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <nav aria-label="مثال قياسي لترقيم الصفحات">
- <ul class="pagination">
- <li class="page-item">
- <a class="page-link" href="#" aria-label="السابق">
- <span aria-hidden="true">&laquo;</span>
- </a>
- </li>
- <li class="page-item"><a class="page-link" href="#">1</a></li>
- <li class="page-item"><a class="page-link" href="#">2</a></li>
- <li class="page-item"><a class="page-link" href="#">3</a></li>
- <li class="page-item">
- <a class="page-link" href="#" aria-label="التالي">
- <span aria-hidden="true">&raquo;</span>
- </a>
- </li>
- </ul>
- </nav>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <nav aria-label="مثال آخر لترقيم الصفحات">
- <ul class="pagination pagination-lg flex-wrap">
- <li class="page-item disabled">
- <a class="page-link">السابق</a>
- </li>
- <li class="page-item"><a class="page-link" href="#">1</a></li>
- <li class="page-item active" aria-current="page">
- <a class="page-link" href="#">2</a>
- </li>
- <li class="page-item"><a class="page-link" href="#">3</a></li>
- <li class="page-item">
- <a class="page-link" href="#">التالى</a>
- </li>
- </ul>
- </nav>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="popovers">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الصناديق المنبثقة</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/popovers" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="عنوان الصندوق المنبثق" data-bs-content="وإليك بعض المحتويات الرائعة. إنه آسر للغاية. أليس كذلك؟">
- انقر لعرض/إخفاء الصندوق المنبثق
- </button>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="نجمٌ و لكنه ليس في السماء، بل في أعماق البحار و المحيطات!">
- انبثاق إلى الأعلى
- </button>
- <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="نجمٌ و لكنه ليس في السماء، بل في أعماق البحار و المحيطات!">
- انبثاق إلى اليسار
- </button>
- <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="نجمٌ و لكنه ليس في السماء، بل في أعماق البحار و المحيطات!">
- انبثاق إلى الأسفل
- </button>
- <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="نجمٌ و لكنه ليس في السماء، بل في أعماق البحار و المحيطات!">
- انبثاق إلى اليمين
- </button>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="progress">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>شريط التقدم</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/progress" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="progress mb-3">
- <div class="progress-bar" role="progressbar" aria-label="مثال مع عنوان" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">0%</div>
- </div>
- <div class="progress mb-3">
- <div class="progress-bar bg-success w-25" role="progressbar" aria-label="مثال ناجح مع عنوان" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">25%</div>
- </div>
- <div class="progress mb-3">
- <div class="progress-bar text-bg-info w-50" role="progressbar" aria-label="مثال توضيح مع عنوان" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">50%</div>
- </div>
- <div class="progress mb-3">
- <div class="progress-bar text-bg-warning w-75" role="progressbar" aria-label="مثال تنبيه مع عنوان" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">75%</div>
- </div>
- <div class="progress">
- <div class="progress-bar bg-danger w-100" role="progressbar" aria-label="مثال خطر مع عنوان" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100">100%</div>
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="progress">
- <div class="progress-bar" role="progressbar" aria-label="القسم الأول - مثال افتراضي" style="width: 15%" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100"></div>
- <div class="progress-bar progress-bar-striped progress-bar-animated bg-success" role="progressbar" aria-label="القسم الثاني - مثال ناجح مقلّم متحرك" style="width: 40%" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100"></div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="scrollspy">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>المخطوطة</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/scrollspy" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- <div class="bd-example">
- <nav id="navbar-example2" class="navbar bg-light px-3">
- <a class="navbar-brand" href="#">شريط التنقل</a>
- <ul class="nav nav-pills">
- <li class="nav-item">
- <a class="nav-link" href="#fat"><bdi lang="en" dir="ltr">@fat</bdi></a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#mdo"><bdi lang="en" dir="ltr">@mdo</bdi></a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">قائمة منسدلة</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#one">واحد</a></li>
- <li><a class="dropdown-item" href="#two">اثنان</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#three">ثلاثة</a></li>
- </ul>
- </li>
- </ul>
- </nav>
- <div data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-offset="0" class="scrollspy-example position-relative mt-2 overflow-auto">
- <h4 id="fat"><bdi lang="en" dir="ltr">@fat</bdi></h4>
- <p>محتوى لتوضيح كيف تعمل المخطوطة. ببساطة، المخطوطة عبارة عن منشور طويل يحتوي على عدة أقسام، ولديه شريط تنقل يسهل الوصول إلى هذه الأقسام الفرعية.</p>
- <h4 id="mdo"><bdi lang="en" dir="ltr">@mdo</bdi></h4>
- <p>بصرف النظر عن تحسيننا جدوى المكيّفات أو عدم تحسينها، فإن الطلب على الطاقة سيزداد. وطبقاً لما جاء في مقالة معهد ماساشوستس للتكنولوجيا، السالف ذكره، ثمَّة أمر يجب عدم إغفاله، وهو كيف أن هذا الطلب سيضغط على نظم توفير الطاقة الحالية. إذ لا بد من إعادة تأهيل كل شبكات الكهرباء، وتوسيعها لتلبية طلب الطاقة في زمن الذروة، خلال موجات الحرارة المتزايدة. فحين يكون الحر شديداً يجنح الناس إلى البقاء في الداخل، وإلى زيادة تشغيل المكيّفات، سعياً إلى جو لطيف وهم يستخدمون أدوات وأجهزة مختلفة أخرى.</p>
- <h4 id="one">واحد</h4>
- <p>وكل هذه الأمور المتزامنة من تشغيل الأجهزة، يزيد الضغط على شبكات الطاقة، كما أسلفنا. لكن مجرد زيادة سعة الشبكة ليس كافياً. إذ لا بد من تطوير الشبكات الذكية التي تستخدم الجسّاسات، ونظم المراقبة، والبرامج الإلكترونية، لتحديد متى يكون الشاغلون في المبنى، ومتى يكون ثمَّة حاجة إلى الطاقة، ومتى تكون الحرارة منخفضة، وبذلك يخرج الناس، فلا يستخدمون كثيراً من الكهرباء.</p>
- <h4 id="two">اثنان</h4>
- <p>مع الأسف، كل هذه الحلول المبتكرة مكلِّفة، وهذا ما يجعلها عديمة الجدوى في نظر بعض الشركات الخاصة والمواطن المتقشّف. إن بعض الأفراد الواعين بيئياً يبذلون قصارى جهدهم في تقليص استهلاكهم من الطاقة، ويعون جيداً أهمية أجهزة التكييف المجدية والأرفق بالبيئة. ولكن جهات كثيرة لن تتحرّك لمجرد حافز سلامة المناخ ووقف هدر الطاقة، ما دامت لا تحركها حوافز قانونية. وعلى الحكومات أن تُقدِم عند الاهتمام بالتغيّر المناخي، على وضع التشريعات المناسبة. فبالنظم والحوافز والدعم، يمكن دفع الشركات إلى اعتماد الحلول الأجدى في مكاتبها.</p>
- <h4 id="three">ثلاثة</h4>
- <p>وكما يتبيّن لنا، من عدد الحلول الملطِّفة للمشكلة، ومن تنوّعها، وهي الحلول التي أسلفنا الحديث عنها، فإن التكنولوجيا التي نحتاج إليها من أجل معالجة هذه التحديات، هي في مدى قدرتنا، لكنها ربما تتطلّب بعض التحسين، ودعماً استثمارياً أكبر!</p>
- <p>ولا مانع من إضافة محتوى آخر ليس تحت أي قسم معين.</p>
- </div>
- </div>
- </div>
- </article>
- <article class="my-3" id="spinners">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الدوائر المتحركة</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/spinners" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- {{< spinner.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <div class="spinner-border text-{{ .name }}" role="status">
- <span class="visually-hidden">جار التحميل...</span>
- </div>
- {{- end -}}
- {{< /spinner.inline >}}
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- {{< spinner.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <div class="spinner-grow text-{{ .name }}" role="status">
- <span class="visually-hidden">جار التحميل...</span>
- </div>
- {{- end -}}
- {{< /spinner.inline >}}
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="toasts">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>الإشعارات</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/toasts" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" class="bg-dark p-5 align-items-center" >}}
- <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small class="text-muted">قبل 11 دقيقة</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="قريب"></button>
- </div>
- <div class="toast-body">
- مرحبًا بالعالم! هذه رسالة إشعار.
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="mt-3 mb-5 pb-5" id="tooltips">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>التلميحات</h3>
- <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/tooltips" >}}">دليل الإستخدام</a>
- </div>
-
- <div>
- {{< example show_markup="false" class="tooltip-demo" >}}
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="تلميح يظهر في الأعلى">تلميح يظهر في الأعلى</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" title="تلميح يظهر على اليسار">تلميح يظهر على اليسار</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" title="تلميح يظهر في الأسفل">تلميح يظهر في الأسفل</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" title="تلميح يظهر على اليمين">تلميح يظهر على اليمين</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" title="<em>تلميح</em> <u>مع</u> <b>HTML</b>">تلميح مع HTML</button>
- {{< /example >}}
- </div>
- </article>
- </section>
-</div>
-
-<div class="modal fade" id="exampleModalDefault" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalLabel">عنوان الصندوق العائم</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="إغلاق"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button>
- <button type="button" class="btn btn-primary">حفظ التغيرات</button>
- </div>
- </div>
- </div>
-</div>
-<div class="modal fade" id="staticBackdropLive" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLiveLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="staticBackdropLiveLabel">عنوان الصندوق العائم</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="إغلاق"></button>
- </div>
- <div class="modal-body">
- <p>لن أغلق إذا نقرت خارجي. لا تحاول حتى الضغط على مفتاح الهروب.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button>
- <button type="button" class="btn btn-primary">حسنًا</button>
- </div>
- </div>
- </div>
-</div>
-<div class="modal fade" id="exampleModalCenteredScrollable" tabindex="-1" aria-labelledby="exampleModalCenteredScrollableTitle" aria-hidden="true">
- <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalCenteredScrollableTitle">عنوان الصندوق العائم</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="إغلاق"></button>
- </div>
- <div class="modal-body">
- <p>نص لتوضيح عمل الصندوق العائم المتنصّف عاموديًا القابل للتمرير</p>
- <p>في هذه الحالة، هذا الصندوق يحتوي على محتوى أكثر قليلًا، ولذلك لتوضيح كيف يمكن إضافة خاصية الإنتصاف العامودي لصندوق عائم قابل للتمرير.</p>
- <p>يعتبر كوب أو فنجان القهوة عادة يومية عند غالبية سكان الكرة الأرضية في الصباح والمساء، وفي حين تكثر الدراسات حول إيجابياتها هناك أيضا سلبيات كثيرة للمشروب المفضل للكثيرين.</p>
- <p>وفي هذا الشأن، أظهرت دراسة جديدة أن تناول الكافيين بانتظام يقلل من حجم المادة الرمادية في الدماغ، مما يشير إلى أن تناول القهوة يمكن أن يضعف القدرة على معالجة المعلومات، وفقاً لما نشرته "ديلي ميل" البريطانية.</p>
- <p>وأعطى باحثون سويسريون متطوعين ثلاث حصص من الكافيين 150 ملغم يوميًا لمدة 10 أيام - وهو مقدار كافيين يعادل حوالي أربعة أو خمسة أكواب صغيرة من القهوة المخمرة يوميًا، أو سبعة إسبريسو فردي.</p>
- <p>وتبين حدوث انخفاض في المادة الرمادية، والتي توجد غالبًا في الطبقة الخارجية للدماغ، أو القشرة، وتعمل على معالجة المعلومات.</p>
- <p>كما كان الانخفاض مذهلاً بشكل خاص في الفص الصدغي الإنسي الأيمن، بما في ذلك الحُصين، وهي منطقة من الدماغ ضرورية لتقوية الذاكرة.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button>
- <button type="button" class="btn btn-primary">حفظ التغيرات</button>
- </div>
- </div>
- </div>
-</div>
-<div class="modal fade" id="exampleModalFullscreen" tabindex="-1" aria-labelledby="exampleModalFullscreenLabel" aria-hidden="true">
- <div class="modal-dialog modal-fullscreen">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalFullscreenLabel">صندوق عائم يملأ الشاشة</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="إغلاق"></button>
- </div>
- <div class="modal-body">
- <p>في ما يلي، نص طويل لتعبئة كامل الشاشة. قد يبدو أنني أثرثر كثيرًا، لذا سأقوم بنسخ مقالة من إحدى الصحف العربية.</p>
- <p>تكييف الهواء هو من التكنولوجيا التي ما إن نمتلكها حتى نصبح عاجزين عن تخيّل العيش من دونها. وتكييف الهواء في مناطق عديدة من العالم ليس ترفاً يمكن الاستغناء عنه. ولكن هذه الحاجة الحيوية تثير تحديات كبيرة على مستوى استهلاك الطاقة في معظم بلدان العالم. ويُتوقع أن تتفاقم هذه التحديات خلال العقود الثلاثة المقبلة، مع توقُّع ارتفاع عدد المكيفات في العالم نحو ثلاثة أضعاف. وفي حين أن الابتكارات التكنولوجية تحقِّق كل يوم إنجازاً جديداً، وعلى الرغم من بعض التحسينات والتدابير المحدودة التي طرأت على صناعة المكيفات، “فإن تكنولوجيتها الأساسية لا تزال تعمل كما كانت، منذ اعتمادها قبل نحو قرن من السنين"، حسبما جاء في تقرير لمعهد ماساشوستس للتكنولوجيا (MIT)، في الأول من سبتمبر 2020م. ولمعالجة هذه المشكلات الخطيرة، لا مفر من إعادة التفكير بجد.</p>
- <p>التكييف حاجة حيويّة. فالتعرّض للحرارة لمدة طويلة ضارٌ بالصحة. ووفقاً لمنظمة الصحة العالميّة يمكن للتعرُّض الطويل للحرارة أيضاً أن يؤدي إلى "إعياء حراري، وضربة شمس، وتورّم في الرجلين، وطفح جلدي على العنق، وتشنج، وصداع، وحساسيّة، والخمول والوهَن. ويمكن للحرارة أن تسبِّب جفافاً خطراً، وأعراضاً حادة في أوعية الدماغ الدمويّة، وتسهم في تكوّن الجلطات".</p>
- <p>وموجات الحر أيضاً من أشد المخاطر الطبيعيّة المميتة. إذ يقدَّر أن بين عامي 1998 و2017م، توفي نحو 166 ألف شخص من موجات الحر. ومات 70 ألفاً من هؤلاء في أوروبا سنة 2003م وحدها. ومن دون أن يصل الخطر إلى الموت، تتسبَّب الحرارة العالية بانخفاض الأداء المعرفي لدى الشبان البالغين في المباني غير المكيّفة. فقد بيّنت دراسة أجرتها "كليّة ت. هـ. تشان" للصحة العامة في جامعة هارفرد، نشرتها "بلوس ميديسين" في 10 يوليو 2018م، أن التلاميذ الذين ينامون في مهاجع غير مكيّفة، يقل أداؤهم عن أولئك الذين ينامون في مهاجع مكيّفة. ولتجنّب مخاطر التعرّض للحرارة، يلتفت الناس إلى استخدام التكييف.</p>
- <p>يتطلّب التكييف كثيراً من الطاقة. فنحو %10 من استهلاك الكهرباء في العالم يُنفَق في تشغيل المكيّفات. وتصل هذه النسبة إلى %50 في المملكة حسب "المركز السعودي لكفاءة الطاقة". أضف إلى ذلك أن معظم البشر في بلدان العالم النامي، لم يقتنوا بعد مكيّفهم الأول، والمشكلة إلى ازدياد. فمعظم البلدان النامية هي من البلدان الأشد حرارة والأكثر اكتظاظاً بالسكان في العالم. وجاء في تقرير لوكالة الطاقة الدوليّة بعنوان "مستقبل التبريد"، ونُشر في مايو 2018م، أن في أجزاء من أمريكا الجنوبيّة وإفريقيا وآسيا والشرق الأوسط، يعيش 2.8 مليار نسمة، ولا يملك وحدات تكييف سوى %8 من المنازل. في حين الدول المتقدِّمة مثل كوريا الجنوبيّة، واليابان، والولايات المتحدة، فإن %89 من المنازل تملك مكيفات، وفي الصين %60 من البيوت تملكها أيضاً.</p>
- <p>ولكن مع تنامي الدخل في بلدان الاقتصاد الصاعد، يتوقّع أن تزداد المنازل التي تقتني مكيّفاً. وبحسب مقالة نُشرت في صحيفة "نيويورك تايمز"، في 15 مايو 2018م، سيرتفع عدد المكيّفات في العالم من نحو 1.6 مليار حالياً، إلى 5.6 مليارات عام 2050م، طبقاً لمعدَّلات النمو الاقتصادي.</p>
- <p>ومع الافتقار إلى الابتكار وتطوير النظم لفرض معايير الجدوى الأعلى، فسيتضاعف استهلاك الطاقة لتشغيل المكيّفات ثلاثة أضعاف. وسينتج من ذلك طلب إضافي للطاقة يساوي مجموع إنتاج الطاقة في الصين حالياً. فمبيعات المكيّفات ترتفع اليوم في البلدان النامية، لكن فعاليّة هذه الوحدات مشكوك فيها. فمثلاً، أوسع وحدات التكييف انتشاراً في بعض الأسواق الآسيوية تتطلّب ضعفي ما تتطلّبه وحدات تكييف أجدى. والمكيّفات التي تباع في اليابان والاتحاد الأوروبي أجدى بنسبة %25 عادة، من تلك التي تباع في الصين والولايات المتحدة.</p>
- <p>وبصرف النظر عن كثير من الطاقة التي يحتاج إليها المكيّف، فإنه يبث مقادير وفيرة من غازات الدفيئة نفسها. وطبقاً لموقع تكييف الهواء (airconditioning.com)، فإن المبرِّدات في معظم المكيّفات مثل مواد مركبات الكربون الكلورية فلورية أو مواد هيدروفلوروولفينات، ومركبات ثاني أكسيد الكربون الهيدروكلورية فلورية، أسوأ بكثير للبيئة من ثاني أكسيد الكربون، لأنها تحتبس من الحرارة مقادير أكبر حين تتسرّب إلى الجو.</p>
- <p>وبالإضافة إلى ظاهرة الدفيئة، فهذه الغازات تسهم أيضاً بالإضرار بطبقة الأوزون. ويمكن لهذه المواد الكيميائية أن تتسرّب خلال عملية التصنيع أو التصليح. ويعرف كل من يملك في منزله مكيّفاً كم تتكرر أعطال هذه الأجهزة. ثم إن المكيف يُرمَى حين يتعطّل نهائياً ولا يعود قابلاً للإصلاح، والمواد المبرِّدة فيه ستتسرّب على الأرجح لتلوث الهواء.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button>
- </div>
- </div>
- </div>
-</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/index.html
deleted file mode 100644
index a2285d0ed..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/index.html
+++ /dev/null
@@ -1,1602 +0,0 @@
----
-layout: examples
-title: Cheatsheet
-extra_css:
- - "cheatsheet.css"
-extra_js:
- - src: "cheatsheet.js"
-body_class: "bg-light"
----
-
-<header class="bd-header bg-dark py-3 d-flex align-items-stretch border-bottom border-dark">
- <div class="container-fluid d-flex align-items-center">
- <h1 class="d-flex align-items-center fs-4 text-white mb-0">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="me-3" alt="Bootstrap">
- Cheatsheet
- </h1>
- <a href="{{< docsref "/examples/cheatsheet-rtl" >}}" class="ms-auto link-light" hreflang="ar">RTL cheatsheet</a>
- </div>
-</header>
-<aside class="bd-aside sticky-xl-top text-muted align-self-start mb-3 mb-xl-5 px-2">
- <h2 class="h6 pt-4 pb-3 mb-4 border-bottom">On this page</h2>
- <nav class="small" id="toc">
- <ul class="list-unstyled">
- <li class="my-2">
- <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#contents-collapse" aria-controls="contents-collapse">Contents</button>
- <ul class="list-unstyled ps-3 collapse" id="contents-collapse">
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#typography">Typography</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#images">Images</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#tables">Tables</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#figures">Figures</a></li>
- </ul>
- </li>
- <li class="my-2">
- <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#forms-collapse" aria-controls="forms-collapse">Forms</button>
- <ul class="list-unstyled ps-3 collapse" id="forms-collapse">
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#overview">Overview</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#disabled-forms">Disabled forms</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#sizing">Sizing</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#input-group">Input group</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#floating-labels">Floating labels</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#validation">Validation</a></li>
- </ul>
- </li>
- <li class="my-2">
- <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#components-collapse" aria-controls="components-collapse">Components</button>
- <ul class="list-unstyled ps-3 collapse" id="components-collapse">
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#accordion">Accordion</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#alerts">Alerts</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#badge">Badge</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#breadcrumb">Breadcrumb</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#buttons">Buttons</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#button-group">Button group</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#card">Card</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#carousel">Carousel</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#dropdowns">Dropdowns</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#list-group">List group</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#modal">Modal</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#navs">Navs</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#navbar">Navbar</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#pagination">Pagination</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#popovers">Popovers</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#progress">Progress</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#scrollspy">Scrollspy</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#spinners">Spinners</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#toasts">Toasts</a></li>
- <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#tooltips">Tooltips</a></li>
- </ul>
- </li>
- </ul>
- </nav>
-</aside>
-<div class="bd-cheatsheet container-fluid bg-body">
- <section id="content">
- <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">Contents</h2>
-
- <article class="my-3" id="typography">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Typography</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/content/typography" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <p class="display-1">Display 1</p>
- <p class="display-2">Display 2</p>
- <p class="display-3">Display 3</p>
- <p class="display-4">Display 4</p>
- <p class="display-5">Display 5</p>
- <p class="display-6">Display 6</p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <p class="h1">Heading 1</p>
- <p class="h2">Heading 2</p>
- <p class="h3">Heading 3</p>
- <p class="h4">Heading 4</p>
- <p class="h5">Heading 5</p>
- <p class="h6">Heading 6</p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <p class="lead">
- This is a lead paragraph. It stands out from regular paragraphs.
- </p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <p>You can use the mark tag to <mark>highlight</mark> text.</p>
- <p><del>This line of text is meant to be treated as deleted text.</del></p>
- <p><s>This line of text is meant to be treated as no longer accurate.</s></p>
- <p><ins>This line of text is meant to be treated as an addition to the document.</ins></p>
- <p><u>This line of text will render as underlined.</u></p>
- <p><small>This line of text is meant to be treated as fine print.</small></p>
- <p><strong>This line rendered as bold text.</strong></p>
- <p><em>This line rendered as italicized text.</em></p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <hr>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <blockquote class="blockquote">
- <p>A well-known quote, contained in a blockquote element.</p>
- <footer class="blockquote-footer">Someone famous in <cite title="Source Title">Source Title</cite></footer>
- </blockquote>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <ul class="list-unstyled">
- <li>This is a list.</li>
- <li>It appears completely unstyled.</li>
- <li>Structurally, it's still a list.</li>
- <li>However, this style only applies to immediate child elements.</li>
- <li>Nested lists:
- <ul>
- <li>are unaffected by this style</li>
- <li>will still show a bullet</li>
- <li>and have appropriate left margin</li>
- </ul>
- </li>
- <li>This may still come in handy in some situations.</li>
- </ul>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <ul class="list-inline">
- <li class="list-inline-item">This is a list item.</li>
- <li class="list-inline-item">And another one.</li>
- <li class="list-inline-item">But they're displayed inline.</li>
- </ul>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="images">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Images</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/content/images" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- {{< placeholder width="100%" height="250" class="bd-placeholder-img-lg img-fluid" text="Responsive image" >}}
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- {{< placeholder width="200" height="200" class="img-thumbnail" title="A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera" >}}
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="tables">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Tables</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/content/tables" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <table class="table table-striped">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2">Larry the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
- </table>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <table class="table table-dark table-borderless">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2">Larry the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
- </table>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <table class="table table-hover">
- <thead>
- <tr>
- <th scope="col">Class</th>
- <th scope="col">Heading</th>
- <th scope="col">Heading</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">Default</th>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- {{< table.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <tr class="table-{{ .name }}">
- <th scope="row">{{ .name | title }}</th>
- <td>Cell</td>
- <td>Cell</td>
- </tr>
- {{- end -}}
- {{< /table.inline >}}
- </tbody>
- </table>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <table class="table table-sm table-bordered">
- <thead>
- <tr>
- <th scope="col">#</th>
- <th scope="col">First</th>
- <th scope="col">Last</th>
- <th scope="col">Handle</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <th scope="row">1</th>
- <td>Mark</td>
- <td>Otto</td>
- <td>@mdo</td>
- </tr>
- <tr>
- <th scope="row">2</th>
- <td>Jacob</td>
- <td>Thornton</td>
- <td>@fat</td>
- </tr>
- <tr>
- <th scope="row">3</th>
- <td colspan="2">Larry the Bird</td>
- <td>@twitter</td>
- </tr>
- </tbody>
- </table>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="figures">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Figures</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/content/figures" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <figure class="figure">
- {{< placeholder width="400" height="300" class="figure-img img-fluid rounded" >}}
- <figcaption class="figure-caption">A caption for the above image.</figcaption>
- </figure>
- {{< /example >}}
- </div>
- </article>
- </section>
-
- <section id="forms">
- <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">Forms</h2>
-
- <article class="my-3" id="overview">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Overview</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/forms/overview" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <form>
- <div class="mb-3">
- <label for="exampleInputEmail1" class="form-label">Email address</label>
- <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
- <div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
- </div>
- <div class="mb-3">
- <label for="exampleInputPassword1" class="form-label">Password</label>
- <input type="password" class="form-control" id="exampleInputPassword1">
- </div>
- <div class="mb-3">
- <label for="exampleSelect" class="form-label">Select menu</label>
- <select class="form-select" id="exampleSelect">
- <option selected>Open this select menu</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
- </div>
- <div class="mb-3 form-check">
- <input type="checkbox" class="form-check-input" id="exampleCheck1">
- <label class="form-check-label" for="exampleCheck1">Check me out</label>
- </div>
- <fieldset class="mb-3">
- <legend>Radios buttons</legend>
- <div class="form-check">
- <input type="radio" name="radios" class="form-check-input" id="exampleRadio1">
- <label class="form-check-label" for="exampleRadio1">Default radio</label>
- </div>
- <div class="mb-3 form-check">
- <input type="radio" name="radios" class="form-check-input" id="exampleRadio2">
- <label class="form-check-label" for="exampleRadio2">Another radio</label>
- </div>
- </fieldset>
- <div class="mb-3">
- <label class="form-label" for="customFile">Upload</label>
- <input type="file" class="form-control" id="customFile">
- </div>
- <div class="mb-3 form-check form-switch">
- <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckChecked" checked>
- <label class="form-check-label" for="flexSwitchCheckChecked">Checked switch checkbox input</label>
- </div>
- <div class="mb-3">
- <label for="customRange3" class="form-label">Example range</label>
- <input type="range" class="form-range" min="0" max="5" step="0.5" id="customRange3">
- </div>
- <button type="submit" class="btn btn-primary">Submit</button>
- </form>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="disabled-forms">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Disabled forms</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/forms/overview" >}}#disabled-forms">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <form>
- <fieldset disabled aria-label="Disabled fieldset example">
- <div class="mb-3">
- <label for="disabledTextInput" class="form-label">Disabled input</label>
- <input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
- </div>
- <div class="mb-3">
- <label for="disabledSelect" class="form-label">Disabled select menu</label>
- <select id="disabledSelect" class="form-select">
- <option>Disabled select</option>
- </select>
- </div>
- <div class="mb-3">
- <div class="form-check">
- <input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
- <label class="form-check-label" for="disabledFieldsetCheck">
- Can't check this
- </label>
- </div>
- </div>
- <fieldset class="mb-3">
- <legend>Disabled radios buttons</legend>
- <div class="form-check">
- <input type="radio" name="radios" class="form-check-input" id="disabledRadio1" disabled>
- <label class="form-check-label" for="disabledRadio1">Disabled radio</label>
- </div>
- <div class="mb-3 form-check">
- <input type="radio" name="radios" class="form-check-input" id="disabledRadio2" disabled>
- <label class="form-check-label" for="disabledRadio2">Another radio</label>
- </div>
- </fieldset>
- <div class="mb-3">
- <label class="form-label" for="disabledCustomFile">Upload</label>
- <input type="file" class="form-control" id="disabledCustomFile" disabled>
- </div>
- <div class="mb-3 form-check form-switch">
- <input class="form-check-input" type="checkbox" role="switch" id="disabledSwitchCheckChecked" checked disabled>
- <label class="form-check-label" for="disabledSwitchCheckChecked">Disabled checked switch checkbox input</label>
- </div>
- <div class="mb-3">
- <label for="disabledRange" class="form-label">Disabled range</label>
- <input type="range" class="form-range" min="0" max="5" step="0.5" id="disabledRange">
- </div>
- <button type="submit" class="btn btn-primary">Submit</button>
- </fieldset>
- </form>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="sizing">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Sizing</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/forms/form-control" >}}#sizing">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="mb-3">
- <input class="form-control form-control-lg" type="text" placeholder=".form-control-lg" aria-label=".form-control-lg example">
- </div>
- <div class="mb-3">
- <select class="form-select form-select-lg" aria-label=".form-select-lg example">
- <option selected>Open this select menu</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
- </div>
- <div class="mb-3">
- <input type="file" class="form-control form-control-lg" aria-label="Large file input example">
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="mb-3">
- <input class="form-control form-control-sm" type="text" placeholder=".form-control-sm" aria-label=".form-control-sm example">
- </div>
- <div class="mb-3">
- <select class="form-select form-select-sm" aria-label=".form-select-sm example">
- <option selected>Open this select menu</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
- </div>
- <div class="mb-3">
- <input type="file" class="form-control form-control-sm" aria-label="Small file input example">
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="input-group">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Input group</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/forms/input-group" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="input-group mb-3">
- <span class="input-group-text" id="basic-addon1">@</span>
- <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
- </div>
- <div class="input-group mb-3">
- <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="basic-addon2">
- <span class="input-group-text" id="basic-addon2">@example.com</span>
- </div>
- <label for="basic-url" class="form-label">Your vanity URL</label>
- <div class="input-group mb-3">
- <span class="input-group-text" id="basic-addon3">https://example.com/users/</span>
- <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
- </div>
- <div class="input-group mb-3">
- <span class="input-group-text">$</span>
- <input type="text" class="form-control" aria-label="Amount (to the nearest dollar)">
- <span class="input-group-text">.00</span>
- </div>
- <div class="input-group">
- <span class="input-group-text">With textarea</span>
- <textarea class="form-control" aria-label="With textarea"></textarea>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="floating-labels">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Floating labels</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/forms/floating-labels" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <form>
- <div class="form-floating mb-3">
- <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
- <label for="floatingInput">Email address</label>
- </div>
- <div class="form-floating">
- <input type="password" class="form-control" id="floatingPassword" placeholder="Password">
- <label for="floatingPassword">Password</label>
- </div>
- </form>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="validation">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Validation</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/forms/validation" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <form class="row g-3">
- <div class="col-md-4">
- <label for="validationServer01" class="form-label">First name</label>
- <input type="text" class="form-control is-valid" id="validationServer01" value="Mark" required>
- <div class="valid-feedback">
- Looks good!
- </div>
- </div>
- <div class="col-md-4">
- <label for="validationServer02" class="form-label">Last name</label>
- <input type="text" class="form-control is-valid" id="validationServer02" value="Otto" required>
- <div class="valid-feedback">
- Looks good!
- </div>
- </div>
- <div class="col-md-4">
- <label for="validationServerUsername" class="form-label">Username</label>
- <div class="input-group has-validation">
- <span class="input-group-text" id="inputGroupPrepend3">@</span>
- <input type="text" class="form-control is-invalid" id="validationServerUsername" aria-describedby="inputGroupPrepend3" required>
- <div class="invalid-feedback">
- Please choose a username.
- </div>
- </div>
- </div>
- <div class="col-md-6">
- <label for="validationServer03" class="form-label">City</label>
- <input type="text" class="form-control is-invalid" id="validationServer03" required>
- <div class="invalid-feedback">
- Please provide a valid city.
- </div>
- </div>
- <div class="col-md-3">
- <label for="validationServer04" class="form-label">State</label>
- <select class="form-select is-invalid" id="validationServer04" required>
- <option selected disabled value="">Choose...</option>
- <option>...</option>
- </select>
- <div class="invalid-feedback">
- Please select a valid state.
- </div>
- </div>
- <div class="col-md-3">
- <label for="validationServer05" class="form-label">Zip</label>
- <input type="text" class="form-control is-invalid" id="validationServer05" required>
- <div class="invalid-feedback">
- Please provide a valid zip.
- </div>
- </div>
- <div class="col-12">
- <div class="form-check">
- <input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" required>
- <label class="form-check-label" for="invalidCheck3">
- Agree to terms and conditions
- </label>
- <div class="invalid-feedback">
- You must agree before submitting.
- </div>
- </div>
- </div>
- <div class="col-12">
- <button class="btn btn-primary" type="submit">Submit form</button>
- </div>
- </form>
- {{< /example >}}
- </div>
- </article>
- </section>
-
- <section id="components">
- <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">Components</h2>
-
- <article class="my-3" id="accordion">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Accordion</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/accordion" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="accordion" id="accordionExample">
- <div class="accordion-item">
- <h4 class="accordion-header" id="headingOne">
- <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
- Accordion Item #1
- </button>
- </h4>
- <div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
- <div class="accordion-body">
- <strong>This is the first item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
- </div>
- </div>
- </div>
- <div class="accordion-item">
- <h4 class="accordion-header" id="headingTwo">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
- Accordion Item #2
- </button>
- </h4>
- <div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#accordionExample">
- <div class="accordion-body">
- <strong>This is the second item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
- </div>
- </div>
- </div>
- <div class="accordion-item">
- <h4 class="accordion-header" id="headingThree">
- <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
- Accordion Item #3
- </button>
- </h4>
- <div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
- <div class="accordion-body">
- <strong>This is the third item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
- </div>
- </div>
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="alerts">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Alerts</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/alerts" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- {{< alerts.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <div class="alert alert-{{ .name }} alert-dismissible fade show" role="alert">
- A simple {{ .name }} alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.
- <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
- </div>{{ end -}}
- {{< /alerts.inline >}}
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="alert alert-success" role="alert">
- <h4 class="alert-heading">Well done!</h4>
- <p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.</p>
- <hr>
- <p class="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="badge">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Badge</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/badge" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <p class="h1">Example heading <span class="badge bg-primary">New</span></p>
- <p class="h2">Example heading <span class="badge bg-secondary">New</span></p>
- <p class="h3">Example heading <span class="badge bg-success">New</span></p>
- <p class="h4">Example heading <span class="badge bg-danger">New</span></p>
- <p class="h5">Example heading <span class="badge text-bg-warning">New</span></p>
- <p class="h6">Example heading <span class="badge text-bg-info">New</span></p>
- <p class="h6">Example heading <span class="badge text-bg-light">New</span></p>
- <p class="h6">Example heading <span class="badge bg-dark">New</span></p>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- {{< badge.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <span class="badge rounded-pill {{ if or (eq .name "light") (eq .name "warning") (eq .name "info") }}text-{{ end }}bg-{{ .name }}">{{ .name | title }}</span>{{- end -}}
- {{< /badge.inline >}}
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="breadcrumb">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Breadcrumb</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/breadcrumb" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <nav aria-label="breadcrumb">
- <ol class="breadcrumb">
- <li class="breadcrumb-item"><a href="#">Home</a></li>
- <li class="breadcrumb-item"><a href="#">Library</a></li>
- <li class="breadcrumb-item active" aria-current="page">Data</li>
- </ol>
- </nav>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="buttons">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Buttons</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/buttons" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- {{< buttons.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <button type="button" class="btn btn-{{ .name }}">{{ .name | title }}</button>
- {{- end -}}
- {{< /buttons.inline >}}
-
- <button type="button" class="btn btn-link">Link</button>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- {{< buttons.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <button type="button" class="btn btn-outline-{{ .name }}">{{ .name | title }}</button>
- {{- end -}}
- {{< /buttons.inline >}}
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <button type="button" class="btn btn-primary btn-sm">Small button</button>
- <button type="button" class="btn btn-primary">Standard button</button>
- <button type="button" class="btn btn-primary btn-lg">Large button</button>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="button-group">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Button group</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/button-group" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups">
- <div class="btn-group me-2" role="group" aria-label="First group">
- <button type="button" class="btn btn-secondary">1</button>
- <button type="button" class="btn btn-secondary">2</button>
- <button type="button" class="btn btn-secondary">3</button>
- <button type="button" class="btn btn-secondary">4</button>
- </div>
- <div class="btn-group me-2" role="group" aria-label="Second group">
- <button type="button" class="btn btn-secondary">5</button>
- <button type="button" class="btn btn-secondary">6</button>
- <button type="button" class="btn btn-secondary">7</button>
- </div>
- <div class="btn-group" role="group" aria-label="Third group">
- <button type="button" class="btn btn-secondary">8</button>
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="card">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Card</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/card" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="row row-cols-1 row-cols-md-2 g-4">
- <div class="col">
- <div class="card">
- {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- <div class="card-header">
- Featured
- </div>
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- <a href="#" class="btn btn-primary">Go somewhere</a>
- </div>
- <div class="card-footer text-muted">
- 2 days ago
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- </div>
- <ul class="list-group list-group-flush">
- <li class="list-group-item">An item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- </ul>
- <div class="card-body">
- <a href="#" class="card-link">Card link</a>
- <a href="#" class="card-link">Another link</a>
- </div>
- </div>
- </div>
- <div class="col">
- <div class="card">
- <div class="row g-0">
- <div class="col-md-4">
- {{< placeholder width="100%" height="250" text="Image" >}}
- </div>
- <div class="col-md-8">
- <div class="card-body">
- <h5 class="card-title">Card title</h5>
- <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
- <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="carousel">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Carousel</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/carousel" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel">
- <div class="carousel-indicators">
- <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
- <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="Slide 2"></button>
- <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="Slide 3"></button>
- </div>
- <div class="carousel-inner">
- <div class="carousel-item active">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>First slide label</h5>
- <p>Some representative placeholder content for the first slide.</p>
- </div>
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>Second slide label</h5>
- <p>Some representative placeholder content for the second slide.</p>
- </div>
- </div>
- <div class="carousel-item">
- {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
- <div class="carousel-caption d-none d-md-block">
- <h5>Third slide label</h5>
- <p>Some representative placeholder content for the third slide.</p>
- </div>
- </div>
- </div>
- <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
- <span class="carousel-control-prev-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Previous</span>
- </button>
- <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
- <span class="carousel-control-next-icon" aria-hidden="true"></span>
- <span class="visually-hidden">Next</span>
- </button>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="dropdowns">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Dropdowns</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/dropdowns" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
- <div class="dropdown">
- <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown button
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">Dropdown header</h6></li>
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- <div class="dropdown">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown button
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">Dropdown header</h6></li>
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- <div class="dropdown">
- <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown button
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">Dropdown header</h6></li>
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="btn-group">
- <button type="button" class="btn btn-primary">Primary</button>
- <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-secondary">Secondary</button>
- <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-success">Success</button>
- <button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-info">Info</button>
- <button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-warning">Warning</button>
- <button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </div><!-- /btn-group -->
- <div class="btn-group">
- <button type="button" class="btn btn-danger">Danger</button>
- <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </div><!-- /btn-group -->
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
- <div class="dropend">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropend button
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">Dropdown header</h6></li>
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- <div class="dropup">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropup button
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">Dropdown header</h6></li>
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- <div class="dropstart">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropstart button
- </button>
- <ul class="dropdown-menu">
- <li><h6 class="dropdown-header">Dropdown header</h6></li>
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="btn-group">
- <div class="dropdown">
- <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- End-aligned menu
- </button>
- <ul class="dropdown-menu dropdown-menu-end">
- <li><h6 class="dropdown-header">Dropdown header</h6></li>
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="list-group">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>List group</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/list-group" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <ul class="list-group">
- <li class="list-group-item disabled" aria-disabled="true">A disabled item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- <li class="list-group-item">A fourth item</li>
- <li class="list-group-item">And a fifth one</li>
- </ul>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <ul class="list-group list-group-flush">
- <li class="list-group-item">An item</li>
- <li class="list-group-item">A second item</li>
- <li class="list-group-item">A third item</li>
- <li class="list-group-item">A fourth item</li>
- <li class="list-group-item">And a fifth one</li>
- </ul>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="list-group">
- <a href="#" class="list-group-item list-group-item-action">A simple default list group item</a>
- {{< list.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <a href="#" class="list-group-item list-group-item-action list-group-item-{{ .name }}">A simple {{ .name }} list group item</a>
- {{- end -}}
- {{< /list.inline >}}
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="modal">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Modal</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/modal" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="d-flex justify-content-between flex-wrap">
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalDefault">
- Launch demo modal
- </button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdropLive">
- Launch static backdrop modal
- </button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalCenteredScrollable">
- Vertically centered scrollable modal
- </button>
- <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreen">
- Full screen
- </button>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="navs">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Navs</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/navs-tabs" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <nav class="nav">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link disabled">Disabled</a>
- </nav>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <nav>
- <div class="nav nav-tabs mb-3" id="nav-tab" role="tablist">
- <button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Home</button>
- <button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</button>
- <button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</button>
- </div>
- </nav>
- <div class="tab-content" id="nav-tabContent">
- <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">
- <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">
- <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">
- <p>This is some placeholder content the <strong>Contact tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
- </div>
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <ul class="nav nav-pills">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Active</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="navbar">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Navbar</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/navbar" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <nav class="navbar navbar-expand-lg bg-light">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="d-inline-block align-top" alt="Bootstrap" loading="lazy"
- style="filter: invert(1) grayscale(100%) brightness(200%);">
- </a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarSupportedContent">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-dark" type="submit">Search</button>
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-lg navbar-dark bg-primary mt-5">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">
- <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="d-inline-block align-top" alt="Bootstrap" loading="lazy">
- </a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent2" aria-controls="navbarSupportedContent2" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarSupportedContent2">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-light" type="submit">Search</button>
- </form>
- </div>
- </div>
- </nav>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="pagination">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Pagination</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/pagination" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <nav aria-label="Pagination example">
- <ul class="pagination pagination-sm">
- <li class="page-item"><a class="page-link" href="#">1</a></li>
- <li class="page-item active" aria-current="page">
- <a class="page-link" href="#">2</a>
- </li>
- <li class="page-item"><a class="page-link" href="#">3</a></li>
- </ul>
- </nav>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <nav aria-label="Standard pagination example">
- <ul class="pagination">
- <li class="page-item">
- <a class="page-link" href="#" aria-label="Previous">
- <span aria-hidden="true">&laquo;</span>
- </a>
- </li>
- <li class="page-item"><a class="page-link" href="#">1</a></li>
- <li class="page-item"><a class="page-link" href="#">2</a></li>
- <li class="page-item"><a class="page-link" href="#">3</a></li>
- <li class="page-item">
- <a class="page-link" href="#" aria-label="Next">
- <span aria-hidden="true">&raquo;</span>
- </a>
- </li>
- </ul>
- </nav>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <nav aria-label="Another pagination example">
- <ul class="pagination pagination-lg flex-wrap">
- <li class="page-item disabled">
- <a class="page-link">Previous</a>
- </li>
- <li class="page-item"><a class="page-link" href="#">1</a></li>
- <li class="page-item active" aria-current="page">
- <a class="page-link" href="#">2</a>
- </li>
- <li class="page-item"><a class="page-link" href="#">3</a></li>
- <li class="page-item">
- <a class="page-link" href="#">Next</a>
- </li>
- </ul>
- </nav>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="popovers">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Popovers</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/popovers" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
- Popover on top
- </button>
- <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
- Popover on end
- </button>
- <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
- Popover on bottom
- </button>
- <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
- Popover on start
- </button>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="progress">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Progress</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/progress" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- <div class="progress mb-3">
- <div class="progress-bar" role="progressbar" aria-label="Example with label" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">0%</div>
- </div>
- <div class="progress mb-3">
- <div class="progress-bar bg-success w-25" role="progressbar" aria-label="Success example with label" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">25%</div>
- </div>
- <div class="progress mb-3">
- <div class="progress-bar text-bg-info w-50" role="progressbar" aria-label="Info example with label" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">50%</div>
- </div>
- <div class="progress mb-3">
- <div class="progress-bar text-bg-warning w-75" role="progressbar" aria-label="Warning example with label" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">75%</div>
- </div>
- <div class="progress">
- <div class="progress-bar bg-danger w-100" role="progressbar" aria-label="Danger example with label" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100">100%</div>
- </div>
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- <div class="progress">
- <div class="progress-bar" role="progressbar" aria-label="Segment one - default example" style="width: 15%" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100"></div>
- <div class="progress-bar progress-bar-striped progress-bar-animated bg-success" role="progressbar" aria-label="Segment two - animated striped success example" style="width: 40%" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100"></div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="scrollspy">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Scrollspy</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/scrollspy" >}}">Documentation</a>
- </div>
-
- <div>
- <div class="bd-example">
- <nav id="navbar-example2" class="navbar bg-light px-3">
- <a class="navbar-brand" href="#">Navbar</a>
- <ul class="nav nav-pills">
- <li class="nav-item">
- <a class="nav-link active" href="#scrollspyHeading1">First</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#scrollspyHeading2">Second</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#scrollspyHeading3">Third</a></li>
- <li><a class="dropdown-item" href="#scrollspyHeading4">Fourth</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#scrollspyHeading5">Fifth</a></li>
- </ul>
- </li>
- </ul>
- </nav>
- <div data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-offset="0" class="scrollspy-example position-relative mt-2 overflow-auto" tabindex="0">
- <h4 id="scrollspyHeading1">First heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="scrollspyHeading2">Second heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="scrollspyHeading3">Third heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="scrollspyHeading4">Fourth heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- <h4 id="scrollspyHeading5">Fifth heading</h4>
- <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
- </div>
- </div>
- </div>
- </article>
- <article class="my-3" id="spinners">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Spinners</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/spinners" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" >}}
- {{< spinner.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <div class="spinner-border text-{{ .name }}" role="status">
- <span class="visually-hidden">Loading...</span>
- </div>
- {{- end -}}
- {{< /spinner.inline >}}
- {{< /example >}}
-
- {{< example show_markup="false" >}}
- {{< spinner.inline >}}
- {{- range (index $.Site.Data "theme-colors") }}
- <div class="spinner-grow text-{{ .name }}" role="status">
- <span class="visually-hidden">Loading...</span>
- </div>
- {{- end -}}
- {{< /spinner.inline >}}
- {{< /example >}}
- </div>
- </article>
- <article class="my-3" id="toasts">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Toasts</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/toasts" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" class="bg-dark p-5 align-items-center" >}}
- <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
- <div class="toast-header">
- {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
- <strong class="me-auto">Bootstrap</strong>
- <small class="text-muted">11 mins ago</small>
- <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
- </div>
- <div class="toast-body">
- Hello, world! This is a toast message.
- </div>
- </div>
- {{< /example >}}
- </div>
- </article>
- <article class="mt-3 mb-5 pb-5" id="tooltips">
- <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
- <h3>Tooltips</h3>
- <a class="d-flex align-items-center" href="{{< docsref "/components/tooltips" >}}">Documentation</a>
- </div>
-
- <div>
- {{< example show_markup="false" class="tooltip-demo" >}}
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top">Tooltip on top</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" title="Tooltip on end">Tooltip on end</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tooltip on bottom">Tooltip on bottom</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" title="Tooltip on start">Tooltip on start</button>
- <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">Tooltip with HTML</button>
- {{< /example >}}
- </div>
- </article>
- </section>
-</div>
-
-<div class="modal fade" id="exampleModalDefault" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalLabel">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-<div class="modal fade" id="staticBackdropLive" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLiveLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="staticBackdropLiveLabel">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <p>I will not close if you click outside me. Don't even try to press escape key.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Understood</button>
- </div>
- </div>
- </div>
-</div>
-<div class="modal fade" id="exampleModalCenteredScrollable" tabindex="-1" aria-labelledby="exampleModalCenteredScrollableTitle" aria-hidden="true">
- <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-5" id="exampleModalCenteredScrollableTitle">Modal title</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- <p>This is some placeholder content to show the scrolling behavior for modals. We use repeated line breaks to demonstrate how content can exceed minimum inner height, thereby showing inner scrolling. When content becomes longer than the predefined max-height of modal, content will be cropped and scrollable within the modal.</p>
- <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
- <p>This content should appear at the bottom after you scroll.</p>
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- <button type="button" class="btn btn-primary">Save changes</button>
- </div>
- </div>
- </div>
-</div>
-<div class="modal fade" id="exampleModalFullscreen" tabindex="-1" aria-labelledby="exampleModalFullscreenLabel" aria-hidden="true">
- <div class="modal-dialog modal-fullscreen">
- <div class="modal-content">
- <div class="modal-header">
- <h1 class="modal-title fs-4" id="exampleModalFullscreenLabel">Full screen modal</h1>
- <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
- </div>
- <div class="modal-body">
- ...
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
- </div>
- </div>
- </div>
-</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout-rtl/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout-rtl/index.html
deleted file mode 100644
index e0ca621b1..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout-rtl/index.html
+++ /dev/null
@@ -1,232 +0,0 @@
----
-layout: examples
-title: مثال إتمام الشراء
-direction: rtl
-extra_css:
- - "../checkout/form-validation.css"
-extra_js:
- - src: "../checkout/form-validation.js"
-body_class: "bg-light"
----
-
-<div class="container">
- <main>
- <div class="py-5 text-center">
- <img class="d-block mx-auto mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="" width="72" height="57">
- <h2>نموذج إتمام الشراء</h2>
- <p class="lead">فيما يلي مثال على نموذج تم إنشاؤه بالكامل باستخدام عناصر تحكم النموذج في Bootstrap. لكل مجموعة نماذج مطلوبة حالة تحقق يمكن تشغيلها بمحاولة إرسال النموذج دون استكماله.</p>
- </div>
-
- <div class="row g-3">
- <div class="col-md-5 col-lg-4 order-md-last">
- <h4 class="d-flex justify-content-between align-items-center mb-3">
- <span class="text-muted">عربة التسوق</span>
- <span class="badge bg-secondary rounded-pill">3</span>
- </h4>
- <ul class="list-group mb-3">
- <li class="list-group-item d-flex justify-content-between lh-sm">
- <div>
- <h6 class="my-0">اسم المنتج</h6>
- <small class="text-muted">وصف مختصر</small>
- </div>
- <span class="text-muted">$12</span>
- </li>
- <li class="list-group-item d-flex justify-content-between lh-sm">
- <div>
- <h6 class="my-0">المنتج الثاني</h6>
- <small class="text-muted">وصف مختصر</small>
- </div>
- <span class="text-muted">$8</span>
- </li>
- <li class="list-group-item d-flex justify-content-between lh-sm">
- <div>
- <h6 class="my-0">البند الثالث</h6>
- <small class="text-muted">وصف مختصر</small>
- </div>
- <span class="text-muted">$5</span>
- </li>
- <li class="list-group-item d-flex justify-content-between bg-light">
- <div class="text-success">
- <h6 class="my-0">رمز ترويجي</h6>
- <small>EXAMPLECODE</small>
- </div>
- <span class="text-success">-$5</span>
- </li>
- <li class="list-group-item d-flex justify-content-between">
- <span>مجموع (USD)</span>
- <strong>$20</strong>
- </li>
- </ul>
-
- <form class="card p-2">
- <div class="input-group">
- <input type="text" class="form-control" placeholder="رمز ترويجي">
- <button type="submit" class="btn btn-secondary">تحقق</button>
- </div>
- </form>
- </div>
- <div class="col-md-7 col-lg-8">
- <h4 class="mb-3">عنوان الفوترة</h4>
- <form class="needs-validation" novalidate>
- <div class="row g-3">
- <div class="col-sm-6">
- <label for="firstName" class="form-label">الاسم الأول</label>
- <input type="text" class="form-control" id="firstName" placeholder="" value="" required>
- <div class="invalid-feedback">
- يرجى إدخال اسم أول صحيح.
- </div>
- </div>
-
- <div class="col-sm-6">
- <label for="lastName" class="form-label">اسم العائلة</label>
- <input type="text" class="form-control" id="lastName" placeholder="" value="" required>
- <div class="invalid-feedback">
- يرجى إدخال اسم عائلة صحيح.
- </div>
- </div>
-
- <div class="col-12">
- <label for="username" class="form-label">اسم المستخدم</label>
- <div class="input-group has-validation">
- <span class="input-group-text">@</span>
- <input type="text" class="form-control" id="username" placeholder="اسم المستخدم" required>
- <div class="invalid-feedback">
- اسم المستخدم الخاص بك مطلوب.
- </div>
- </div>
- </div>
-
- <div class="col-12">
- <label for="email" class="form-label">البريد الإلكتروني <span class="text-muted">(اختياري)</span></label>
- <input type="email" class="form-control" id="email" placeholder="you@example.com">
- <div class="invalid-feedback">
- يرجى إدخال عنوان بريد إلكتروني صحيح لتصلكم تحديثات الشحن.
- </div>
- </div>
-
- <div class="col-12">
- <label for="address" class="form-label">العنوان</label>
- <input type="text" class="form-control" id="address" placeholder="1234 الشارع الأول" required>
- <div class="invalid-feedback">
- يرجى إدخال عنوان الشحن الخاص بك.
- </div>
- </div>
-
- <div class="col-12">
- <label for="address2" class="form-label">عنوان 2 <span class="text-muted">(اختياري)</span></label>
- <input type="text" class="form-control" id="address2" placeholder="شقة 24">
- </div>
-
- <div class="col-md-5">
- <label for="country" class="form-label">البلد</label>
- <select class="form-select" id="country" required>
- <option value="">اختر...</option>
- <option>الولايات المتحدة الأمريكية</option>
- </select>
- <div class="invalid-feedback">
- يرجى اختيار بلد صحيح.
- </div>
- </div>
-
- <div class="col-md-4">
- <label for="state" class="form-label">المنطقة</label>
- <select class="form-select" id="state" required>
- <option value="">اختر...</option>
- <option>كاليفورنيا</option>
- </select>
- <div class="invalid-feedback">
- يرجى اختيار اسم منطقة صحيح.
- </div>
- </div>
-
- <div class="col-md-3">
- <label for="zip" class="form-label">الرمز البريدي</label>
- <input type="text" class="form-control" id="zip" placeholder="" required>
- <div class="invalid-feedback">
- الرمز البريدي مطلوب.
- </div>
- </div>
- </div>
-
- <hr class="my-4">
-
- <div class="form-check">
- <input type="checkbox" class="form-check-input" id="same-address">
- <label class="form-check-label" for="same-address">عنوان الشحن هو نفس عنوان الفوترة الخاص بي</label>
- </div>
-
- <div class="form-check">
- <input type="checkbox" class="form-check-input" id="save-info">
- <label class="form-check-label" for="save-info">احفظ هذه المعلومات في المرة القادمة</label>
- </div>
-
- <hr class="my-4">
-
- <h4 class="mb-3">طريقة الدفع</h4>
-
- <div class="my-3">
- <div class="form-check">
- <input id="credit" name="paymentMethod" type="radio" class="form-check-input" checked required>
- <label class="form-check-label" for="credit">بطاقة ائتمان</label>
- </div>
- <div class="form-check">
- <input id="cash" name="paymentMethod" type="radio" class="form-check-input" required>
- <label class="form-check-label" for="cash">نقد</label>
- </div>
- <div class="form-check">
- <input id="paypal" name="paymentMethod" type="radio" class="form-check-input" required>
- <label class="form-check-label" for="paypal">PayPal</label>
- </div>
- </div>
-
- <div class="row gy-3">
- <div class="col-md-6">
- <label for="cc-name" class="form-label">الاسم على البطاقة</label>
- <input type="text" class="form-control" id="cc-name" placeholder="" required>
- <small class="text-muted">الاسم الكامل كما هو معروض على البطاقة</small>
- <div class="invalid-feedback">
- الاسم على البطاقة مطلوب
- </div>
- </div>
-
- <div class="col-md-6">
- <label for="cc-number" class="form-label">رقم البطاقة</label>
- <input type="text" class="form-control" id="cc-number" placeholder="" required>
- <div class="invalid-feedback">
- رقم بطاقة الائتمان مطلوب
- </div>
- </div>
-
- <div class="col-md-3">
- <label for="cc-expiration" class="form-label">تاريخ انتهاء الصلاحية</label>
- <input type="text" class="form-control" id="cc-expiration" placeholder="" required>
- <div class="invalid-feedback">
- تاريخ انتهاء الصلاحية مطلوب
- </div>
- </div>
-
- <div class="col-md-3">
- <label for="cc-cvv" class="form-label">الرمز الثلاثي (CVV)</label>
- <input type="text" class="form-control" id="cc-cvv" placeholder="" required>
- <div class="invalid-feedback">
- رمز الحماية مطلوب
- </div>
- </div>
- </div>
-
- <hr class="my-4">
-
- <button class="w-100 btn btn-primary btn-lg" type="submit">الاستمرار بالدفع</button>
- </form>
- </div>
- </div>
- </main>
- <footer class="my-5 pt-5 text-muted text-center text-small">
- <p class="mb-1">&copy; {{< year >}}-2017 اسم الشركة</p>
- <ul class="list-inline">
- <li class="list-inline-item"><a href="#">سياسة الخصوصية</a></li>
- <li class="list-inline-item"><a href="#">اتفاقية الاستخدام</a></li>
- <li class="list-inline-item"><a href="#">الدعم الفني</a></li>
- </ul>
- </footer>
-</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/index.html
deleted file mode 100644
index 4809dc4bb..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/index.html
+++ /dev/null
@@ -1,232 +0,0 @@
----
-layout: examples
-title: Checkout example
-extra_css:
- - "form-validation.css"
-extra_js:
- - src: "form-validation.js"
-body_class: "bg-light"
----
-
-<div class="container">
- <main>
- <div class="py-5 text-center">
- <img class="d-block mx-auto mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="" width="72" height="57">
- <h2>Checkout form</h2>
- <p class="lead">Below is an example form built entirely with Bootstrap’s form controls. Each required form group has a validation state that can be triggered by attempting to submit the form without completing it.</p>
- </div>
-
- <div class="row g-5">
- <div class="col-md-5 col-lg-4 order-md-last">
- <h4 class="d-flex justify-content-between align-items-center mb-3">
- <span class="text-primary">Your cart</span>
- <span class="badge bg-primary rounded-pill">3</span>
- </h4>
- <ul class="list-group mb-3">
- <li class="list-group-item d-flex justify-content-between lh-sm">
- <div>
- <h6 class="my-0">Product name</h6>
- <small class="text-muted">Brief description</small>
- </div>
- <span class="text-muted">$12</span>
- </li>
- <li class="list-group-item d-flex justify-content-between lh-sm">
- <div>
- <h6 class="my-0">Second product</h6>
- <small class="text-muted">Brief description</small>
- </div>
- <span class="text-muted">$8</span>
- </li>
- <li class="list-group-item d-flex justify-content-between lh-sm">
- <div>
- <h6 class="my-0">Third item</h6>
- <small class="text-muted">Brief description</small>
- </div>
- <span class="text-muted">$5</span>
- </li>
- <li class="list-group-item d-flex justify-content-between bg-light">
- <div class="text-success">
- <h6 class="my-0">Promo code</h6>
- <small>EXAMPLECODE</small>
- </div>
- <span class="text-success">−$5</span>
- </li>
- <li class="list-group-item d-flex justify-content-between">
- <span>Total (USD)</span>
- <strong>$20</strong>
- </li>
- </ul>
-
- <form class="card p-2">
- <div class="input-group">
- <input type="text" class="form-control" placeholder="Promo code">
- <button type="submit" class="btn btn-secondary">Redeem</button>
- </div>
- </form>
- </div>
- <div class="col-md-7 col-lg-8">
- <h4 class="mb-3">Billing address</h4>
- <form class="needs-validation" novalidate>
- <div class="row g-3">
- <div class="col-sm-6">
- <label for="firstName" class="form-label">First name</label>
- <input type="text" class="form-control" id="firstName" placeholder="" value="" required>
- <div class="invalid-feedback">
- Valid first name is required.
- </div>
- </div>
-
- <div class="col-sm-6">
- <label for="lastName" class="form-label">Last name</label>
- <input type="text" class="form-control" id="lastName" placeholder="" value="" required>
- <div class="invalid-feedback">
- Valid last name is required.
- </div>
- </div>
-
- <div class="col-12">
- <label for="username" class="form-label">Username</label>
- <div class="input-group has-validation">
- <span class="input-group-text">@</span>
- <input type="text" class="form-control" id="username" placeholder="Username" required>
- <div class="invalid-feedback">
- Your username is required.
- </div>
- </div>
- </div>
-
- <div class="col-12">
- <label for="email" class="form-label">Email <span class="text-muted">(Optional)</span></label>
- <input type="email" class="form-control" id="email" placeholder="you@example.com">
- <div class="invalid-feedback">
- Please enter a valid email address for shipping updates.
- </div>
- </div>
-
- <div class="col-12">
- <label for="address" class="form-label">Address</label>
- <input type="text" class="form-control" id="address" placeholder="1234 Main St" required>
- <div class="invalid-feedback">
- Please enter your shipping address.
- </div>
- </div>
-
- <div class="col-12">
- <label for="address2" class="form-label">Address 2 <span class="text-muted">(Optional)</span></label>
- <input type="text" class="form-control" id="address2" placeholder="Apartment or suite">
- </div>
-
- <div class="col-md-5">
- <label for="country" class="form-label">Country</label>
- <select class="form-select" id="country" required>
- <option value="">Choose...</option>
- <option>United States</option>
- </select>
- <div class="invalid-feedback">
- Please select a valid country.
- </div>
- </div>
-
- <div class="col-md-4">
- <label for="state" class="form-label">State</label>
- <select class="form-select" id="state" required>
- <option value="">Choose...</option>
- <option>California</option>
- </select>
- <div class="invalid-feedback">
- Please provide a valid state.
- </div>
- </div>
-
- <div class="col-md-3">
- <label for="zip" class="form-label">Zip</label>
- <input type="text" class="form-control" id="zip" placeholder="" required>
- <div class="invalid-feedback">
- Zip code required.
- </div>
- </div>
- </div>
-
- <hr class="my-4">
-
- <div class="form-check">
- <input type="checkbox" class="form-check-input" id="same-address">
- <label class="form-check-label" for="same-address">Shipping address is the same as my billing address</label>
- </div>
-
- <div class="form-check">
- <input type="checkbox" class="form-check-input" id="save-info">
- <label class="form-check-label" for="save-info">Save this information for next time</label>
- </div>
-
- <hr class="my-4">
-
- <h4 class="mb-3">Payment</h4>
-
- <div class="my-3">
- <div class="form-check">
- <input id="credit" name="paymentMethod" type="radio" class="form-check-input" checked required>
- <label class="form-check-label" for="credit">Credit card</label>
- </div>
- <div class="form-check">
- <input id="debit" name="paymentMethod" type="radio" class="form-check-input" required>
- <label class="form-check-label" for="debit">Debit card</label>
- </div>
- <div class="form-check">
- <input id="paypal" name="paymentMethod" type="radio" class="form-check-input" required>
- <label class="form-check-label" for="paypal">PayPal</label>
- </div>
- </div>
-
- <div class="row gy-3">
- <div class="col-md-6">
- <label for="cc-name" class="form-label">Name on card</label>
- <input type="text" class="form-control" id="cc-name" placeholder="" required>
- <small class="text-muted">Full name as displayed on card</small>
- <div class="invalid-feedback">
- Name on card is required
- </div>
- </div>
-
- <div class="col-md-6">
- <label for="cc-number" class="form-label">Credit card number</label>
- <input type="text" class="form-control" id="cc-number" placeholder="" required>
- <div class="invalid-feedback">
- Credit card number is required
- </div>
- </div>
-
- <div class="col-md-3">
- <label for="cc-expiration" class="form-label">Expiration</label>
- <input type="text" class="form-control" id="cc-expiration" placeholder="" required>
- <div class="invalid-feedback">
- Expiration date required
- </div>
- </div>
-
- <div class="col-md-3">
- <label for="cc-cvv" class="form-label">CVV</label>
- <input type="text" class="form-control" id="cc-cvv" placeholder="" required>
- <div class="invalid-feedback">
- Security code required
- </div>
- </div>
- </div>
-
- <hr class="my-4">
-
- <button class="w-100 btn btn-primary btn-lg" type="submit">Continue to checkout</button>
- </form>
- </div>
- </div>
- </main>
-
- <footer class="my-5 pt-5 text-muted text-center text-small">
- <p class="mb-1">&copy; 2017–{{< year >}} Company Name</p>
- <ul class="list-inline">
- <li class="list-inline-item"><a href="#">Privacy</a></li>
- <li class="list-inline-item"><a href="#">Terms</a></li>
- <li class="list-inline-item"><a href="#">Support</a></li>
- </ul>
- </footer>
-</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cover/cover.css b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cover/cover.css
deleted file mode 100644
index 1b1c5407b..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cover/cover.css
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Globals
- */
-
-
-/* Custom default button */
-.btn-secondary,
-.btn-secondary:hover,
-.btn-secondary:focus {
- color: #333;
- text-shadow: none; /* Prevent inheritance from `body` */
-}
-
-
-/*
- * Base structure
- */
-
-body {
- text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5);
- box-shadow: inset 0 0 5rem rgba(0, 0, 0, .5);
-}
-
-.cover-container {
- max-width: 42em;
-}
-
-
-/*
- * Header
- */
-
-.nav-masthead .nav-link {
- color: rgba(255, 255, 255, .5);
- border-bottom: .25rem solid transparent;
-}
-
-.nav-masthead .nav-link:hover,
-.nav-masthead .nav-link:focus {
- border-bottom-color: rgba(255, 255, 255, .25);
-}
-
-.nav-masthead .nav-link + .nav-link {
- margin-left: 1rem;
-}
-
-.nav-masthead .active {
- color: #fff;
- border-bottom-color: #fff;
-}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cover/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cover/index.html
deleted file mode 100644
index 34dc1c2b6..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cover/index.html
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: examples
-title: Cover Template
-extra_css:
- - "cover.css"
-html_class: "h-100"
-body_class: "d-flex h-100 text-center text-bg-dark"
-include_js: false
----
-
-<div class="cover-container d-flex w-100 h-100 p-3 mx-auto flex-column">
- <header class="mb-auto">
- <div>
- <h3 class="float-md-start mb-0">Cover</h3>
- <nav class="nav nav-masthead justify-content-center float-md-end">
- <a class="nav-link fw-bold py-1 px-0 active" aria-current="page" href="#">Home</a>
- <a class="nav-link fw-bold py-1 px-0" href="#">Features</a>
- <a class="nav-link fw-bold py-1 px-0" href="#">Contact</a>
- </nav>
- </div>
- </header>
-
- <main class="px-3">
- <h1>Cover your page.</h1>
- <p class="lead">Cover is a one-page template for building simple and beautiful home pages. Download, edit the text, and add your own fullscreen background photo to make it your own.</p>
- <p class="lead">
- <a href="#" class="btn btn-lg btn-secondary fw-bold border-white bg-white">Learn more</a>
- </p>
- </main>
-
- <footer class="mt-auto text-white-50">
- <p>Cover template for <a href="https://getbootstrap.com/" class="text-white">Bootstrap</a>, by <a href="https://twitter.com/mdo" class="text-white">@mdo</a>.</p>
- </footer>
-</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/index.html
deleted file mode 100644
index c134a0a91..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/index.html
+++ /dev/null
@@ -1,347 +0,0 @@
----
-layout: examples
-title: Features
-extra_css:
- - "features.css"
-body_class: ""
----
-
-<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
- <symbol id="bootstrap" viewBox="0 0 118 94">
- <title>Bootstrap</title>
- <path fill-rule="evenodd" clip-rule="evenodd" d="M24.509 0c-6.733 0-11.715 5.893-11.492 12.284.214 6.14-.064 14.092-2.066 20.577C8.943 39.365 5.547 43.485 0 44.014v5.972c5.547.529 8.943 4.649 10.951 11.153 2.002 6.485 2.28 14.437 2.066 20.577C12.794 88.106 17.776 94 24.51 94H93.5c6.733 0 11.714-5.893 11.491-12.284-.214-6.14.064-14.092 2.066-20.577 2.009-6.504 5.396-10.624 10.943-11.153v-5.972c-5.547-.529-8.934-4.649-10.943-11.153-2.002-6.484-2.28-14.437-2.066-20.577C105.214 5.894 100.233 0 93.5 0H24.508zM80 57.863C80 66.663 73.436 72 62.543 72H44a2 2 0 01-2-2V24a2 2 0 012-2h18.437c9.083 0 15.044 4.92 15.044 12.474 0 5.302-4.01 10.049-9.119 10.88v.277C75.317 46.394 80 51.21 80 57.863zM60.521 28.34H49.948v14.934h8.905c6.884 0 10.68-2.772 10.68-7.727 0-4.643-3.264-7.207-9.012-7.207zM49.948 49.2v16.458H60.91c7.167 0 10.964-2.876 10.964-8.281 0-5.406-3.903-8.178-11.425-8.178H49.948z"></path>
- </symbol>
- <symbol id="home" viewBox="0 0 16 16">
- <path d="M8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5v-4h2v4a.5.5 0 0 0 .5.5H14a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146zM2.5 14V7.707l5.5-5.5 5.5 5.5V14H10v-4a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5v4H2.5z"/>
- </symbol>
- <symbol id="speedometer2" viewBox="0 0 16 16">
- <path d="M8 4a.5.5 0 0 1 .5.5V6a.5.5 0 0 1-1 0V4.5A.5.5 0 0 1 8 4zM3.732 5.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 10a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 10zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 9.31a.91.91 0 1 0 1.302 1.258l3.434-4.297a.389.389 0 0 0-.029-.518z"/>
- <path fill-rule="evenodd" d="M0 10a8 8 0 1 1 15.547 2.661c-.442 1.253-1.845 1.602-2.932 1.25C11.309 13.488 9.475 13 8 13c-1.474 0-3.31.488-4.615.911-1.087.352-2.49.003-2.932-1.25A7.988 7.988 0 0 1 0 10zm8-7a7 7 0 0 0-6.603 9.329c.203.575.923.876 1.68.63C4.397 12.533 6.358 12 8 12s3.604.532 4.923.96c.757.245 1.477-.056 1.68-.631A7 7 0 0 0 8 3z"/>
- </symbol>
- <symbol id="table" viewBox="0 0 16 16">
- <path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm15 2h-4v3h4V4zm0 4h-4v3h4V8zm0 4h-4v3h3a1 1 0 0 0 1-1v-2zm-5 3v-3H6v3h4zm-5 0v-3H1v2a1 1 0 0 0 1 1h3zm-4-4h4V8H1v3zm0-4h4V4H1v3zm5-3v3h4V4H6zm4 4H6v3h4V8z"/>
- </symbol>
- <symbol id="people-circle" viewBox="0 0 16 16">
- <path d="M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"/>
- <path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z"/>
- </symbol>
- <symbol id="grid" viewBox="0 0 16 16">
- <path d="M1 2.5A1.5 1.5 0 0 1 2.5 1h3A1.5 1.5 0 0 1 7 2.5v3A1.5 1.5 0 0 1 5.5 7h-3A1.5 1.5 0 0 1 1 5.5v-3zM2.5 2a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3zm6.5.5A1.5 1.5 0 0 1 10.5 1h3A1.5 1.5 0 0 1 15 2.5v3A1.5 1.5 0 0 1 13.5 7h-3A1.5 1.5 0 0 1 9 5.5v-3zm1.5-.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3zM1 10.5A1.5 1.5 0 0 1 2.5 9h3A1.5 1.5 0 0 1 7 10.5v3A1.5 1.5 0 0 1 5.5 15h-3A1.5 1.5 0 0 1 1 13.5v-3zm1.5-.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3zm6.5.5A1.5 1.5 0 0 1 10.5 9h3a1.5 1.5 0 0 1 1.5 1.5v3a1.5 1.5 0 0 1-1.5 1.5h-3A1.5 1.5 0 0 1 9 13.5v-3zm1.5-.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3z"/>
- </symbol>
- <symbol id="collection" viewBox="0 0 16 16">
- <path d="M2.5 3.5a.5.5 0 0 1 0-1h11a.5.5 0 0 1 0 1h-11zm2-2a.5.5 0 0 1 0-1h7a.5.5 0 0 1 0 1h-7zM0 13a1.5 1.5 0 0 0 1.5 1.5h13A1.5 1.5 0 0 0 16 13V6a1.5 1.5 0 0 0-1.5-1.5h-13A1.5 1.5 0 0 0 0 6v7zm1.5.5A.5.5 0 0 1 1 13V6a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-13z"/>
- </symbol>
- <symbol id="calendar3" viewBox="0 0 16 16">
- <path d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z"/>
- <path d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
- </symbol>
- <symbol id="chat-quote-fill" viewBox="0 0 16 16">
- <path d="M16 8c0 3.866-3.582 7-8 7a9.06 9.06 0 0 1-2.347-.306c-.584.296-1.925.864-4.181 1.234-.2.032-.352-.176-.273-.362.354-.836.674-1.95.77-2.966C.744 11.37 0 9.76 0 8c0-3.866 3.582-7 8-7s8 3.134 8 7zM7.194 6.766a1.688 1.688 0 0 0-.227-.272 1.467 1.467 0 0 0-.469-.324l-.008-.004A1.785 1.785 0 0 0 5.734 6C4.776 6 4 6.746 4 7.667c0 .92.776 1.666 1.734 1.666.343 0 .662-.095.931-.26-.137.389-.39.804-.81 1.22a.405.405 0 0 0 .011.59c.173.16.447.155.614-.01 1.334-1.329 1.37-2.758.941-3.706a2.461 2.461 0 0 0-.227-.4zM11 9.073c-.136.389-.39.804-.81 1.22a.405.405 0 0 0 .012.59c.172.16.446.155.613-.01 1.334-1.329 1.37-2.758.942-3.706a2.466 2.466 0 0 0-.228-.4 1.686 1.686 0 0 0-.227-.273 1.466 1.466 0 0 0-.469-.324l-.008-.004A1.785 1.785 0 0 0 10.07 6c-.957 0-1.734.746-1.734 1.667 0 .92.777 1.666 1.734 1.666.343 0 .662-.095.931-.26z"/>
- </symbol>
- <symbol id="cpu-fill" viewBox="0 0 16 16">
- <path d="M6.5 6a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3z"/>
- <path d="M5.5.5a.5.5 0 0 0-1 0V2A2.5 2.5 0 0 0 2 4.5H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2A2.5 2.5 0 0 0 4.5 14v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14a2.5 2.5 0 0 0 2.5-2.5h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14A2.5 2.5 0 0 0 11.5 2V.5a.5.5 0 0 0-1 0V2h-1V.5a.5.5 0 0 0-1 0V2h-1V.5a.5.5 0 0 0-1 0V2h-1V.5zm1 4.5h3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-3A1.5 1.5 0 0 1 5 9.5v-3A1.5 1.5 0 0 1 6.5 5z"/>
- </symbol>
- <symbol id="gear-fill" viewBox="0 0 16 16">
- <path d="M9.405 1.05c-.413-1.4-2.397-1.4-2.81 0l-.1.34a1.464 1.464 0 0 1-2.105.872l-.31-.17c-1.283-.698-2.686.705-1.987 1.987l.169.311c.446.82.023 1.841-.872 2.105l-.34.1c-1.4.413-1.4 2.397 0 2.81l.34.1a1.464 1.464 0 0 1 .872 2.105l-.17.31c-.698 1.283.705 2.686 1.987 1.987l.311-.169a1.464 1.464 0 0 1 2.105.872l.1.34c.413 1.4 2.397 1.4 2.81 0l.1-.34a1.464 1.464 0 0 1 2.105-.872l.31.17c1.283.698 2.686-.705 1.987-1.987l-.169-.311a1.464 1.464 0 0 1 .872-2.105l.34-.1c1.4-.413 1.4-2.397 0-2.81l-.34-.1a1.464 1.464 0 0 1-.872-2.105l.17-.31c.698-1.283-.705-2.686-1.987-1.987l-.311.169a1.464 1.464 0 0 1-2.105-.872l-.1-.34zM8 10.93a2.929 2.929 0 1 1 0-5.86 2.929 2.929 0 0 1 0 5.858z"/>
- </symbol>
- <symbol id="speedometer" viewBox="0 0 16 16">
- <path d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z"/>
- <path fill-rule="evenodd" d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z"/>
- </symbol>
- <symbol id="toggles2" viewBox="0 0 16 16">
- <path d="M9.465 10H12a2 2 0 1 1 0 4H9.465c.34-.588.535-1.271.535-2 0-.729-.195-1.412-.535-2z"/>
- <path d="M6 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 1a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm.535-10a3.975 3.975 0 0 1-.409-1H4a1 1 0 0 1 0-2h2.126c.091-.355.23-.69.41-1H4a2 2 0 1 0 0 4h2.535z"/>
- <path d="M14 4a4 4 0 1 1-8 0 4 4 0 0 1 8 0z"/>
- </symbol>
- <symbol id="tools" viewBox="0 0 16 16">
- <path d="M1 0L0 1l2.2 3.081a1 1 0 0 0 .815.419h.07a1 1 0 0 1 .708.293l2.675 2.675-2.617 2.654A3.003 3.003 0 0 0 0 13a3 3 0 1 0 5.878-.851l2.654-2.617.968.968-.305.914a1 1 0 0 0 .242 1.023l3.356 3.356a1 1 0 0 0 1.414 0l1.586-1.586a1 1 0 0 0 0-1.414l-3.356-3.356a1 1 0 0 0-1.023-.242L10.5 9.5l-.96-.96 2.68-2.643A3.005 3.005 0 0 0 16 3c0-.269-.035-.53-.102-.777l-2.14 2.141L12 4l-.364-1.757L13.777.102a3 3 0 0 0-3.675 3.68L7.462 6.46 4.793 3.793a1 1 0 0 1-.293-.707v-.071a1 1 0 0 0-.419-.814L1 0zm9.646 10.646a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708zM3 11l.471.242.529.026.287.445.445.287.026.529L5 13l-.242.471-.026.529-.445.287-.287.445-.529.026L3 15l-.471-.242L2 14.732l-.287-.445L1.268 14l-.026-.529L1 13l.242-.471.026-.529.445-.287.287-.445.529-.026L3 11z"/>
- </symbol>
- <symbol id="chevron-right" viewBox="0 0 16 16">
- <path fill-rule="evenodd" d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z"/>
- </symbol>
- <symbol id="geo-fill" viewBox="0 0 16 16">
- <path fill-rule="evenodd" d="M4 4a4 4 0 1 1 4.5 3.969V13.5a.5.5 0 0 1-1 0V7.97A4 4 0 0 1 4 3.999zm2.493 8.574a.5.5 0 0 1-.411.575c-.712.118-1.28.295-1.655.493a1.319 1.319 0 0 0-.37.265.301.301 0 0 0-.057.09V14l.002.008a.147.147 0 0 0 .016.033.617.617 0 0 0 .145.15c.165.13.435.27.813.395.751.25 1.82.414 3.024.414s2.273-.163 3.024-.414c.378-.126.648-.265.813-.395a.619.619 0 0 0 .146-.15.148.148 0 0 0 .015-.033L12 14v-.004a.301.301 0 0 0-.057-.09 1.318 1.318 0 0 0-.37-.264c-.376-.198-.943-.375-1.655-.493a.5.5 0 1 1 .164-.986c.77.127 1.452.328 1.957.594C12.5 13 13 13.4 13 14c0 .426-.26.752-.544.977-.29.228-.68.413-1.116.558-.878.293-2.059.465-3.34.465-1.281 0-2.462-.172-3.34-.465-.436-.145-.826-.33-1.116-.558C3.26 14.752 3 14.426 3 14c0-.599.5-1 .961-1.243.505-.266 1.187-.467 1.957-.594a.5.5 0 0 1 .575.411z"/>
- </symbol>
-</svg>
-<main>
- <h1 class="visually-hidden">Features examples</h1>
-
- <div class="container px-4 py-5" id="featured-3">
- <h2 class="pb-2 border-bottom">Columns with icons</h2>
- <div class="row g-4 py-5 row-cols-1 row-cols-lg-3">
- <div class="feature col">
- <div class="feature-icon d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-2 mb-3">
- <svg class="bi" width="1em" height="1em"><use xlink:href="#collection"/></svg>
- </div>
- <h3 class="fs-2">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
- <a href="#" class="icon-link d-inline-flex align-items-center">
- Call to action
- <svg class="bi" width="1em" height="1em"><use xlink:href="#chevron-right"/></svg>
- </a>
- </div>
- <div class="feature col">
- <div class="feature-icon d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-2 mb-3">
- <svg class="bi" width="1em" height="1em"><use xlink:href="#people-circle"/></svg>
- </div>
- <h3 class="fs-2">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
- <a href="#" class="icon-link d-inline-flex align-items-center">
- Call to action
- <svg class="bi" width="1em" height="1em"><use xlink:href="#chevron-right"/></svg>
- </a>
- </div>
- <div class="feature col">
- <div class="feature-icon d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-2 mb-3">
- <svg class="bi" width="1em" height="1em"><use xlink:href="#toggles2"/></svg>
- </div>
- <h3 class="fs-2">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
- <a href="#" class="icon-link d-inline-flex align-items-center">
- Call to action
- <svg class="bi" width="1em" height="1em"><use xlink:href="#chevron-right"/></svg>
- </a>
- </div>
- </div>
- </div>
-
- <div class="b-example-divider"></div>
-
- <div class="container px-4 py-5" id="hanging-icons">
- <h2 class="pb-2 border-bottom">Hanging icons</h2>
- <div class="row g-4 py-5 row-cols-1 row-cols-lg-3">
- <div class="col d-flex align-items-start">
- <div class="icon-square text-bg-light d-inline-flex align-items-center justify-content-center fs-4 flex-shrink-0 me-3">
- <svg class="bi" width="1em" height="1em"><use xlink:href="#toggles2"/></svg>
- </div>
- <div>
- <h3 class="fs-2">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
- <a href="#" class="btn btn-primary">
- Primary button
- </a>
- </div>
- </div>
- <div class="col d-flex align-items-start">
- <div class="icon-square text-bg-light d-inline-flex align-items-center justify-content-center fs-4 flex-shrink-0 me-3">
- <svg class="bi" width="1em" height="1em"><use xlink:href="#cpu-fill"/></svg>
- </div>
- <div>
- <h3 class="fs-2">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
- <a href="#" class="btn btn-primary">
- Primary button
- </a>
- </div>
- </div>
- <div class="col d-flex align-items-start">
- <div class="icon-square text-bg-light d-inline-flex align-items-center justify-content-center fs-4 flex-shrink-0 me-3">
- <svg class="bi" width="1em" height="1em"><use xlink:href="#tools"/></svg>
- </div>
- <div>
- <h3 class="fs-2">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
- <a href="#" class="btn btn-primary">
- Primary button
- </a>
- </div>
- </div>
- </div>
- </div>
-
- <div class="b-example-divider"></div>
-
- <div class="container px-4 py-5" id="custom-cards">
- <h2 class="pb-2 border-bottom">Custom cards</h2>
-
- <div class="row row-cols-1 row-cols-lg-3 align-items-stretch g-4 py-5">
- <div class="col">
- <div class="card card-cover h-100 overflow-hidden text-bg-dark rounded-4 shadow-lg" style="background-image: url('unsplash-photo-1.jpg');">
- <div class="d-flex flex-column h-100 p-5 pb-3 text-white text-shadow-1">
- <h3 class="pt-5 mt-5 mb-4 display-6 lh-1 fw-bold">Short title, long jacket</h3>
- <ul class="d-flex list-unstyled mt-auto">
- <li class="me-auto">
- <img src="https://github.com/twbs.png" alt="Bootstrap" width="32" height="32" class="rounded-circle border border-white">
- </li>
- <li class="d-flex align-items-center me-3">
- <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#geo-fill"/></svg>
- <small>Earth</small>
- </li>
- <li class="d-flex align-items-center">
- <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#calendar3"/></svg>
- <small>3d</small>
- </li>
- </ul>
- </div>
- </div>
- </div>
-
- <div class="col">
- <div class="card card-cover h-100 overflow-hidden text-bg-dark rounded-4 shadow-lg" style="background-image: url('unsplash-photo-2.jpg');">
- <div class="d-flex flex-column h-100 p-5 pb-3 text-white text-shadow-1">
- <h3 class="pt-5 mt-5 mb-4 display-6 lh-1 fw-bold">Much longer title that wraps to multiple lines</h3>
- <ul class="d-flex list-unstyled mt-auto">
- <li class="me-auto">
- <img src="https://github.com/twbs.png" alt="Bootstrap" width="32" height="32" class="rounded-circle border border-white">
- </li>
- <li class="d-flex align-items-center me-3">
- <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#geo-fill"/></svg>
- <small>Pakistan</small>
- </li>
- <li class="d-flex align-items-center">
- <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#calendar3"/></svg>
- <small>4d</small>
- </li>
- </ul>
- </div>
- </div>
- </div>
-
- <div class="col">
- <div class="card card-cover h-100 overflow-hidden text-bg-dark rounded-4 shadow-lg" style="background-image: url('unsplash-photo-3.jpg');">
- <div class="d-flex flex-column h-100 p-5 pb-3 text-shadow-1">
- <h3 class="pt-5 mt-5 mb-4 display-6 lh-1 fw-bold">Another longer title belongs here</h3>
- <ul class="d-flex list-unstyled mt-auto">
- <li class="me-auto">
- <img src="https://github.com/twbs.png" alt="Bootstrap" width="32" height="32" class="rounded-circle border border-white">
- </li>
- <li class="d-flex align-items-center me-3">
- <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#geo-fill"/></svg>
- <small>California</small>
- </li>
- <li class="d-flex align-items-center">
- <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#calendar3"/></svg>
- <small>5d</small>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="b-example-divider"></div>
-
- <div class="container px-4 py-5" id="icon-grid">
- <h2 class="pb-2 border-bottom">Icon grid</h2>
-
- <div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-4 py-5">
- <div class="col d-flex align-items-start">
- <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#bootstrap"/></svg>
- <div>
- <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading.</p>
- </div>
- </div>
- <div class="col d-flex align-items-start">
- <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#cpu-fill"/></svg>
- <div>
- <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading.</p>
- </div>
- </div>
- <div class="col d-flex align-items-start">
- <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#calendar3"/></svg>
- <div>
- <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading.</p>
- </div>
- </div>
- <div class="col d-flex align-items-start">
- <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#home"/></svg>
- <div>
- <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading.</p>
- </div>
- </div>
- <div class="col d-flex align-items-start">
- <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#speedometer2"/></svg>
- <div>
- <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading.</p>
- </div>
- </div>
- <div class="col d-flex align-items-start">
- <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#toggles2"/></svg>
- <div>
- <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading.</p>
- </div>
- </div>
- <div class="col d-flex align-items-start">
- <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#geo-fill"/></svg>
- <div>
- <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading.</p>
- </div>
- </div>
- <div class="col d-flex align-items-start">
- <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#tools"/></svg>
- <div>
- <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
- <p>Paragraph of text beneath the heading to explain the heading.</p>
- </div>
- </div>
- </div>
- </div>
-
- <div class="b-example-divider"></div>
-
- <div class="container px-4 py-5">
- <h2 class="pb-2 border-bottom">Features with title</h2>
-
- <div class="row row-cols-1 row-cols-md-2 align-items-md-center g-5 py-5">
- <div class="d-flex flex-column align-items-start gap-2">
- <h3 class="fw-bold">Left-aligned title explaining these awesome features</h3>
- <p class="text-muted">Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
- <a href="#" class="btn btn-primary btn-lg">Primary button</a>
- </div>
- <div class="row row-cols-1 row-cols-sm-2 g-4">
- <div class="d-flex flex-column gap-2">
- <div
- class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
- <svg class="bi" width="1em" height="1em">
- <use xlink:href="#collection" />
- </svg>
- </div>
- <h4 class="fw-semibold mb-0">Featured title</h4>
- <p class="text-muted">Paragraph of text beneath the heading to explain the heading.</p>
- </div>
-
- <div class="d-flex flex-column gap-2">
- <div
- class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
- <svg class="bi" width="1em" height="1em">
- <use xlink:href="#gear-fill" />
- </svg>
- </div>
- <h4 class="fw-semibold mb-0">Featured title</h4>
- <p class="text-muted">Paragraph of text beneath the heading to explain the heading.</p>
- </div>
-
- <div class="d-flex flex-column gap-2">
- <div
- class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
- <svg class="bi" width="1em" height="1em">
- <use xlink:href="#speedometer" />
- </svg>
- </div>
- <h4 class="fw-semibold mb-0">Featured title</h4>
- <p class="text-muted">Paragraph of text beneath the heading to explain the heading.</p>
- </div>
-
- <div class="d-flex flex-column gap-2">
- <div
- class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
- <svg class="bi" width="1em" height="1em">
- <use xlink:href="#table" />
- </svg>
- </div>
- <h4 class="fw-semibold mb-0">Featured title</h4>
- <p class="text-muted">Paragraph of text beneath the heading to explain the heading.</p>
- </div>
- </div>
- </div>
- </div>
-</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-fixed/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-fixed/index.html
deleted file mode 100644
index b0d998652..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-fixed/index.html
+++ /dev/null
@@ -1,40 +0,0 @@
----
-layout: examples
-title: Fixed top navbar example
-extra_css:
- - "navbar-top-fixed.css"
----
-
-<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Fixed navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarCollapse">
- <ul class="navbar-nav me-auto mb-2 mb-md-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
-</nav>
-
-<main class="container">
- <div class="bg-light p-5 rounded">
- <h1>Navbar example</h1>
- <p class="lead">This example is a quick exercise to illustrate how fixed to top navbar works. As you scroll, it will remain fixed to the top of your browser’s viewport.</p>
- <a class="btn btn-lg btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
- </div>
-</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-static/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-static/index.html
deleted file mode 100644
index b6c26c94a..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-static/index.html
+++ /dev/null
@@ -1,40 +0,0 @@
----
-layout: examples
-title: Top navbar example
-extra_css:
- - "navbar-top.css"
----
-
-<nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Top navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="collapse navbar-collapse" id="navbarCollapse">
- <ul class="navbar-nav me-auto mb-2 mb-md-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
-</nav>
-
-<main class="container">
- <div class="bg-light p-5 rounded">
- <h1>Navbar example</h1>
- <p class="lead">This example is a quick exercise to illustrate how the top-aligned navbar works. As you scroll, this navbar remains in its original position and moves with the rest of the page.</p>
- <a class="btn btn-lg btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
- </div>
-</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars-offcanvas/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars-offcanvas/index.html
deleted file mode 100644
index 9099dc93a..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars-offcanvas/index.html
+++ /dev/null
@@ -1,147 +0,0 @@
----
-layout: examples
-title: Navbar Template
-extra_css:
- - "navbar.css"
----
-
-<main>
- <nav class="navbar navbar-dark bg-dark" aria-label="Dark offcanvas navbar">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Dark offcanvas navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbarDark" aria-controls="offcanvasNavbarDark">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="offcanvas offcanvas-end text-bg-dark" tabindex="-1" id="offcanvasNavbarDark" aria-labelledby="offcanvasNavbarDarkLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasNavbarDarkLabel">Offcanvas</h5>
- <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li>
- <hr class="dropdown-divider">
- </li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form class="d-flex mt-3" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
- </div>
- </nav>
-
- <nav class="navbar bg-light" aria-label="Light offcanvas navbar">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Light offcanvas navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbarLight" aria-controls="offcanvasNavbarLight">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasNavbarLight" aria-labelledby="offcanvasNavbarLightLabel">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasNavbarLightLabel">Offcanvas</h5>
- <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li>
- <hr class="dropdown-divider">
- </li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form class="d-flex mt-3" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Offcanvas navbar large">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Responsive offcanvas navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbar2" aria-controls="offcanvasNavbar2">
- <span class="navbar-toggler-icon"></span>
- </button>
- <div class="offcanvas offcanvas-end text-bg-dark" tabindex="-1" id="offcanvasNavbar2" aria-labelledby="offcanvasNavbar2Label">
- <div class="offcanvas-header">
- <h5 class="offcanvas-title" id="offcanvasNavbar2Label">Offcanvas</h5>
- <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- </div>
- <div class="offcanvas-body">
- <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li>
- <hr class="dropdown-divider">
- </li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form class="d-flex mt-3 mt-lg-0" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
- </div>
- </nav>
-
- <div class="container my-5">
- <div class="bg-light p-5 rounded">
- <div class="col-sm-8 py-5 mx-auto">
- <h1 class="display-5 fw-normal">Navbar with offcanvas examples</h1>
- <p class="fs-5">This example shows how responsive offcanvas menus work within the navbar. For positioning of navbars, checkout the <a href="{{< docsref "/examples/navbar-static" >}}">top</a> and <a href="{{< docsref "/examples/navbar-fixed" >}}">fixed top</a> examples.</p>
- <p>From the top down, you'll see a dark navbar, light navbar and a responsive navbar—each with offcanvases built in. Resize your browser window to the large breakpoint to see the toggle for the offcanvas.</p>
- <p>
- <a class="btn btn-primary" href="{{< docsref "/components/navbar#offcanvas" >}}" role="button">Learn more about offcanvas navbars &raquo;</a>
- </p>
- </div>
- </div>
- </div>
-</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars/index.html
deleted file mode 100644
index cc90b8ce0..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars/index.html
+++ /dev/null
@@ -1,416 +0,0 @@
----
-layout: examples
-title: Navbar Template
-extra_css:
- - "navbar.css"
----
-
-<main>
- <nav class="navbar navbar-dark bg-dark" aria-label="First navbar example">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Never expand</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample01" aria-controls="navbarsExample01" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExample01">
- <ul class="navbar-nav me-auto mb-2">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand navbar-dark bg-dark" aria-label="Second navbar example">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Always expand</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample02" aria-controls="navbarsExample02" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExample02">
- <ul class="navbar-nav me-auto">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-sm navbar-dark bg-dark" aria-label="Third navbar example">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Expand at sm</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample03" aria-controls="navbarsExample03" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExample03">
- <ul class="navbar-nav me-auto mb-2 mb-sm-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-md navbar-dark bg-dark" aria-label="Fourth navbar example">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Expand at md</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample04" aria-controls="navbarsExample04" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExample04">
- <ul class="navbar-nav me-auto mb-2 mb-md-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Fifth navbar example">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Expand at lg</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample05" aria-controls="navbarsExample05" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExample05">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-xl navbar-dark bg-dark" aria-label="Sixth navbar example">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Expand at xl</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample06" aria-controls="navbarsExample06" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExample06">
- <ul class="navbar-nav me-auto mb-2 mb-xl-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-xxl navbar-dark bg-dark" aria-label="Seventh navbar example">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Expand at xxl</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExampleXxl" aria-controls="navbarsExampleXxl" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExampleXxl">
- <ul class="navbar-nav me-auto mb-2 mb-xl-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Eighth navbar example">
- <div class="container">
- <a class="navbar-brand" href="#">Container</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample07" aria-controls="navbarsExample07" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExample07">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Ninth navbar example">
- <div class="container-xl">
- <a class="navbar-brand" href="#">Container XL</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample07XL" aria-controls="navbarsExample07XL" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExample07XL">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <div class="container-xl mb-4">
- <p>Matching .container-xl...</p>
- </div>
-
- <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Tenth navbar example">
- <div class="container-fluid">
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample08" aria-controls="navbarsExample08" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse justify-content-md-center" id="navbarsExample08">
- <ul class="navbar-nav">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Centered nav only</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </nav>
-
- <div class="container">
- <nav class="navbar navbar-expand-lg bg-light rounded" aria-label="Eleventh navbar example">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Navbar</a>
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample09" aria-controls="navbarsExample09" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse" id="navbarsExample09">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form role="search">
- <input class="form-control" type="search" placeholder="Search" aria-label="Search">
- </form>
- </div>
- </div>
- </nav>
-
- <nav class="navbar navbar-expand-lg bg-light rounded" aria-label="Twelfth navbar example">
- <div class="container-fluid">
- <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample10" aria-controls="navbarsExample10" aria-expanded="false" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="collapse navbar-collapse justify-content-md-center" id="navbarsExample10">
- <ul class="navbar-nav">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Centered nav only</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Link</a>
- </li>
- <li class="nav-item">
- <a class="nav-link disabled">Disabled</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </nav>
-
- <div>
- <div class="bg-light p-5 rounded">
- <div class="col-sm-8 mx-auto">
- <h1>Navbar examples</h1>
- <p>This example is a quick exercise to illustrate how the navbar and its contents work. Some navbars extend the width of the viewport, others are confined within a <code>.container</code>. For positioning of navbars, checkout the <a href="{{< docsref "/examples/navbar-static" >}}">top</a> and <a href="{{< docsref "/examples/navbar-fixed" >}}">fixed top</a> examples.</p>
- <p>At the smallest breakpoint, the collapse plugin is used to hide the links and show a menu button to toggle the collapsed content.</p>
- <p>
- <a class="btn btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
- </p>
- </div>
- </div>
- </div>
- </div>
-</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/index.html
deleted file mode 100644
index 81c9bb4bb..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/index.html
+++ /dev/null
@@ -1,140 +0,0 @@
----
-layout: examples
-title: Offcanvas navbar template
-extra_css:
- - "offcanvas.css"
-extra_js:
- - src: "offcanvas.js"
-body_class: "bg-light"
-aliases: "/docs/5.2/examples/offcanvas/"
----
-
-<nav class="navbar navbar-expand-lg fixed-top navbar-dark bg-dark" aria-label="Main navigation">
- <div class="container-fluid">
- <a class="navbar-brand" href="#">Offcanvas navbar</a>
- <button class="navbar-toggler p-0 border-0" type="button" id="navbarSideCollapse" aria-label="Toggle navigation">
- <span class="navbar-toggler-icon"></span>
- </button>
-
- <div class="navbar-collapse offcanvas-collapse" id="navbarsExampleDefault">
- <ul class="navbar-nav me-auto mb-2 mb-lg-0">
- <li class="nav-item">
- <a class="nav-link active" aria-current="page" href="#">Dashboard</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Notifications</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Profile</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="#">Switch account</a>
- </li>
- <li class="nav-item dropdown">
- <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Settings</a>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- </ul>
- </li>
- </ul>
- <form class="d-flex" role="search">
- <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
- <button class="btn btn-outline-success" type="submit">Search</button>
- </form>
- </div>
- </div>
-</nav>
-
-<div class="nav-scroller bg-body shadow-sm">
- <nav class="nav" aria-label="Secondary navigation">
- <a class="nav-link active" aria-current="page" href="#">Dashboard</a>
- <a class="nav-link" href="#">
- Friends
- <span class="badge text-bg-light rounded-pill align-text-bottom">27</span>
- </a>
- <a class="nav-link" href="#">Explore</a>
- <a class="nav-link" href="#">Suggestions</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link" href="#">Link</a>
- <a class="nav-link" href="#">Link</a>
- </nav>
-</div>
-
-<main class="container">
- <div class="d-flex align-items-center p-3 my-3 text-white bg-purple rounded shadow-sm">
- <img class="me-3" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" alt="" width="48" height="38">
- <div class="lh-1">
- <h1 class="h6 mb-0 text-white lh-1">Bootstrap</h1>
- <small>Since 2011</small>
- </div>
- </div>
-
- <div class="my-3 p-3 bg-body rounded shadow-sm">
- <h6 class="border-bottom pb-2 mb-0">Recent updates</h6>
- <div class="d-flex text-muted pt-3">
- {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="flex-shrink-0 me-2 rounded" >}}
- <p class="pb-3 mb-0 small lh-sm border-bottom">
- <strong class="d-block text-gray-dark">@username</strong>
- Some representative placeholder content, with some information about this user. Imagine this being some sort of status update, perhaps?
- </p>
- </div>
- <div class="d-flex text-muted pt-3">
- {{< placeholder width="32" height="32" background="#e83e8c" color="#e83e8c" class="flex-shrink-0 me-2 rounded" >}}
- <p class="pb-3 mb-0 small lh-sm border-bottom">
- <strong class="d-block text-gray-dark">@username</strong>
- Some more representative placeholder content, related to this other user. Another status update, perhaps.
- </p>
- </div>
- <div class="d-flex text-muted pt-3">
- {{< placeholder width="32" height="32" background="#6f42c1" color="#6f42c1" class="flex-shrink-0 me-2 rounded" >}}
- <p class="pb-3 mb-0 small lh-sm border-bottom">
- <strong class="d-block text-gray-dark">@username</strong>
- This user also gets some representative placeholder content. Maybe they did something interesting, and you really want to highlight this in the recent updates.
- </p>
- </div>
- <small class="d-block text-end mt-3">
- <a href="#">All updates</a>
- </small>
- </div>
-
- <div class="my-3 p-3 bg-body rounded shadow-sm">
- <h6 class="border-bottom pb-2 mb-0">Suggestions</h6>
- <div class="d-flex text-muted pt-3">
- {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="flex-shrink-0 me-2 rounded" >}}
- <div class="pb-3 mb-0 small lh-sm border-bottom w-100">
- <div class="d-flex justify-content-between">
- <strong class="text-gray-dark">Full Name</strong>
- <a href="#">Follow</a>
- </div>
- <span class="d-block">@username</span>
- </div>
- </div>
- <div class="d-flex text-muted pt-3">
- {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="flex-shrink-0 me-2 rounded" >}}
- <div class="pb-3 mb-0 small lh-sm border-bottom w-100">
- <div class="d-flex justify-content-between">
- <strong class="text-gray-dark">Full Name</strong>
- <a href="#">Follow</a>
- </div>
- <span class="d-block">@username</span>
- </div>
- </div>
- <div class="d-flex text-muted pt-3">
- {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="flex-shrink-0 me-2 rounded" >}}
- <div class="pb-3 mb-0 small lh-sm border-bottom w-100">
- <div class="d-flex justify-content-between">
- <strong class="text-gray-dark">Full Name</strong>
- <a href="#">Follow</a>
- </div>
- <span class="d-block">@username</span>
- </div>
- </div>
- <small class="d-block text-end mt-3">
- <a href="#">All suggestions</a>
- </small>
- </div>
-</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sign-in/index.html b/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sign-in/index.html
deleted file mode 100644
index 8772ba3c6..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sign-in/index.html
+++ /dev/null
@@ -1,32 +0,0 @@
----
-layout: examples
-title: Signin Template
-extra_css:
- - "signin.css"
-body_class: "text-center"
-include_js: false
----
-
-<main class="form-signin w-100 m-auto">
- <form>
- <img class="mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="" width="72" height="57">
- <h1 class="h3 mb-3 fw-normal">Please sign in</h1>
-
- <div class="form-floating">
- <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
- <label for="floatingInput">Email address</label>
- </div>
- <div class="form-floating">
- <input type="password" class="form-control" id="floatingPassword" placeholder="Password">
- <label for="floatingPassword">Password</label>
- </div>
-
- <div class="checkbox mb-3">
- <label>
- <input type="checkbox" value="remember-me"> Remember me
- </label>
- </div>
- <button class="w-100 btn btn-lg btn-primary" type="submit">Sign in</button>
- <p class="mt-5 mb-3 text-muted">&copy; 2017–{{< year >}}</p>
- </form>
-</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/checks-radios.md b/vendor/twbs/bootstrap/site/content/docs/5.2/forms/checks-radios.md
deleted file mode 100644
index 12f8b00d1..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/checks-radios.md
+++ /dev/null
@@ -1,307 +0,0 @@
----
-layout: docs
-title: Checks and radios
-description: Create consistent cross-browser and cross-device checkboxes and radios with our completely rewritten checks component.
-group: forms
-aliases: "/docs/5.2/forms/checks/"
-toc: true
----
-
-## Approach
-
-Browser default checkboxes and radios are replaced with the help of `.form-check`, a series of classes for both input types that improves the layout and behavior of their HTML elements, that provide greater customization and cross browser consistency. Checkboxes are for selecting one or several options in a list, while radios are for selecting one option from many.
-
-Structurally, our `<input>`s and `<label>`s are sibling elements as opposed to an `<input>` within a `<label>`. This is slightly more verbose as you must specify `id` and `for` attributes to relate the `<input>` and `<label>`. We use the sibling selector (`~`) for all our `<input>` states, like `:checked` or `:disabled`. When combined with the `.form-check-label` class, we can easily style the text for each item based on the `<input>`'s state.
-
-Our checks use custom Bootstrap icons to indicate checked or indeterminate states.
-
-## Checks
-
-{{< example >}}
-<div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="flexCheckDefault">
- <label class="form-check-label" for="flexCheckDefault">
- Default checkbox
- </label>
-</div>
-<div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="flexCheckChecked" checked>
- <label class="form-check-label" for="flexCheckChecked">
- Checked checkbox
- </label>
-</div>
-{{< /example >}}
-
-### Indeterminate
-
-Checkboxes can utilize the `:indeterminate` pseudo class when manually set via JavaScript (there is no available HTML attribute for specifying it).
-
-{{< example class="bd-example-indeterminate" stackblitz_add_js="true" >}}
-<div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="flexCheckIndeterminate">
- <label class="form-check-label" for="flexCheckIndeterminate">
- Indeterminate checkbox
- </label>
-</div>
-{{< /example >}}
-
-### Disabled
-
-Add the `disabled` attribute and the associated `<label>`s are automatically styled to match with a lighter color to help indicate the input's state.
-
-{{< example class="bd-example-indeterminate" stackblitz_add_js="true" >}}
-<div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="flexCheckIndeterminateDisabled" disabled>
- <label class="form-check-label" for="flexCheckIndeterminateDisabled">
- Disabled indeterminate checkbox
- </label>
-</div>
-<div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="flexCheckDisabled" disabled>
- <label class="form-check-label" for="flexCheckDisabled">
- Disabled checkbox
- </label>
-</div>
-<div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="flexCheckCheckedDisabled" checked disabled>
- <label class="form-check-label" for="flexCheckCheckedDisabled">
- Disabled checked checkbox
- </label>
-</div>
-{{< /example >}}
-
-## Radios
-
-{{< example >}}
-<div class="form-check">
- <input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault1">
- <label class="form-check-label" for="flexRadioDefault1">
- Default radio
- </label>
-</div>
-<div class="form-check">
- <input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault2" checked>
- <label class="form-check-label" for="flexRadioDefault2">
- Default checked radio
- </label>
-</div>
-{{< /example >}}
-
-### Disabled
-
-Add the `disabled` attribute and the associated `<label>`s are automatically styled to match with a lighter color to help indicate the input's state.
-
-{{< example >}}
-<div class="form-check">
- <input class="form-check-input" type="radio" name="flexRadioDisabled" id="flexRadioDisabled" disabled>
- <label class="form-check-label" for="flexRadioDisabled">
- Disabled radio
- </label>
-</div>
-<div class="form-check">
- <input class="form-check-input" type="radio" name="flexRadioDisabled" id="flexRadioCheckedDisabled" checked disabled>
- <label class="form-check-label" for="flexRadioCheckedDisabled">
- Disabled checked radio
- </label>
-</div>
-{{< /example >}}
-
-## Switches
-
-A switch has the markup of a custom checkbox but uses the `.form-switch` class to render a toggle switch. Consider using `role="switch"` to more accurately convey the nature of the control to assistive technologies that support this role. In older assistive technologies, it will simply be announced as a regular checkbox as a fallback. Switches also support the `disabled` attribute.
-
-{{< example >}}
-<div class="form-check form-switch">
- <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault">
- <label class="form-check-label" for="flexSwitchCheckDefault">Default switch checkbox input</label>
-</div>
-<div class="form-check form-switch">
- <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckChecked" checked>
- <label class="form-check-label" for="flexSwitchCheckChecked">Checked switch checkbox input</label>
-</div>
-<div class="form-check form-switch">
- <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDisabled" disabled>
- <label class="form-check-label" for="flexSwitchCheckDisabled">Disabled switch checkbox input</label>
-</div>
-<div class="form-check form-switch">
- <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckCheckedDisabled" checked disabled>
- <label class="form-check-label" for="flexSwitchCheckCheckedDisabled">Disabled checked switch checkbox input</label>
-</div>
-{{< /example >}}
-
-## Default (stacked)
-
-By default, any number of checkboxes and radios that are immediate sibling will be vertically stacked and appropriately spaced with `.form-check`.
-
-{{< example >}}
-<div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
- <label class="form-check-label" for="defaultCheck1">
- Default checkbox
- </label>
-</div>
-<div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="defaultCheck2" disabled>
- <label class="form-check-label" for="defaultCheck2">
- Disabled checkbox
- </label>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="form-check">
- <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked>
- <label class="form-check-label" for="exampleRadios1">
- Default radio
- </label>
-</div>
-<div class="form-check">
- <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios2" value="option2">
- <label class="form-check-label" for="exampleRadios2">
- Second default radio
- </label>
-</div>
-<div class="form-check">
- <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios3" value="option3" disabled>
- <label class="form-check-label" for="exampleRadios3">
- Disabled radio
- </label>
-</div>
-{{< /example >}}
-
-## Inline
-
-Group checkboxes or radios on the same horizontal row by adding `.form-check-inline` to any `.form-check`.
-
-{{< example >}}
-<div class="form-check form-check-inline">
- <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
- <label class="form-check-label" for="inlineCheckbox1">1</label>
-</div>
-<div class="form-check form-check-inline">
- <input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
- <label class="form-check-label" for="inlineCheckbox2">2</label>
-</div>
-<div class="form-check form-check-inline">
- <input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="option3" disabled>
- <label class="form-check-label" for="inlineCheckbox3">3 (disabled)</label>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1">
- <label class="form-check-label" for="inlineRadio1">1</label>
-</div>
-<div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2">
- <label class="form-check-label" for="inlineRadio2">2</label>
-</div>
-<div class="form-check form-check-inline">
- <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3" disabled>
- <label class="form-check-label" for="inlineRadio3">3 (disabled)</label>
-</div>
-{{< /example >}}
-
-## Reverse
-
-Put your checkboxes, radios, and switches on the opposite side with the `.form-check-reverse` modifier class.
-
-{{< example >}}
-<div class="form-check form-check-reverse">
- <input class="form-check-input" type="checkbox" value="" id="reverseCheck1">
- <label class="form-check-label" for="reverseCheck1">
- Reverse checkbox
- </label>
-</div>
-<div class="form-check form-check-reverse">
- <input class="form-check-input" type="checkbox" value="" id="reverseCheck2" disabled>
- <label class="form-check-label" for="reverseCheck2">
- Disabled reverse checkbox
- </label>
-</div>
-
-<div class="form-check form-switch form-check-reverse">
- <input class="form-check-input" type="checkbox" id="flexSwitchCheckReverse">
- <label class="form-check-label" for="flexSwitchCheckReverse">Reverse switch checkbox input</label>
-</div>
-{{< /example >}}
-
-## Without labels
-
-Omit the wrapping `.form-check` for checkboxes and radios that have no label text. Remember to still provide some form of accessible name for assistive technologies (for instance, using `aria-label`). See the [forms overview accessibility]({{< docsref "/forms/overview#accessibility" >}}) section for details.
-
-{{< example >}}
-<div>
- <input class="form-check-input" type="checkbox" id="checkboxNoLabel" value="" aria-label="...">
-</div>
-
-<div>
- <input class="form-check-input" type="radio" name="radioNoLabel" id="radioNoLabel1" value="" aria-label="...">
-</div>
-{{< /example >}}
-
-## Toggle buttons
-
-Create button-like checkboxes and radio buttons by using `.btn` styles rather than `.form-check-label` on the `<label>` elements. These toggle buttons can further be grouped in a [button group]({{< docsref "/components/button-group" >}}) if needed.
-
-### Checkbox toggle buttons
-
-{{< example >}}
-<input type="checkbox" class="btn-check" id="btn-check" autocomplete="off">
-<label class="btn btn-primary" for="btn-check">Single toggle</label>
-{{< /example >}}
-
-{{< example >}}
-<input type="checkbox" class="btn-check" id="btn-check-2" checked autocomplete="off">
-<label class="btn btn-primary" for="btn-check-2">Checked</label>
-{{< /example >}}
-
-{{< example >}}
-<input type="checkbox" class="btn-check" id="btn-check-3" autocomplete="off" disabled>
-<label class="btn btn-primary" for="btn-check-3">Disabled</label>
-{{< /example >}}
-
-{{< callout info >}}
-Visually, these checkbox toggle buttons are identical to the [button plugin toggle buttons]({{< docsref "/components/buttons#button-plugin" >}}). However, they are conveyed differently by assistive technologies: the checkbox toggles will be announced by screen readers as "checked"/"not checked" (since, despite their appearance, they are fundamentally still checkboxes), whereas the button plugin toggle buttons will be announced as "button"/"button pressed". The choice between these two approaches will depend on the type of toggle you are creating, and whether or not the toggle will make sense to users when announced as a checkbox or as an actual button.
-{{< /callout >}}
-
-### Radio toggle buttons
-
-{{< example >}}
-<input type="radio" class="btn-check" name="options" id="option1" autocomplete="off" checked>
-<label class="btn btn-secondary" for="option1">Checked</label>
-
-<input type="radio" class="btn-check" name="options" id="option2" autocomplete="off">
-<label class="btn btn-secondary" for="option2">Radio</label>
-
-<input type="radio" class="btn-check" name="options" id="option3" autocomplete="off" disabled>
-<label class="btn btn-secondary" for="option3">Disabled</label>
-
-<input type="radio" class="btn-check" name="options" id="option4" autocomplete="off">
-<label class="btn btn-secondary" for="option4">Radio</label>
-{{< /example >}}
-
-### Outlined styles
-
-Different variants of `.btn`, such at the various outlined styles, are supported.
-
-{{< example >}}
-<input type="checkbox" class="btn-check" id="btn-check-outlined" autocomplete="off">
-<label class="btn btn-outline-primary" for="btn-check-outlined">Single toggle</label><br>
-
-<input type="checkbox" class="btn-check" id="btn-check-2-outlined" checked autocomplete="off">
-<label class="btn btn-outline-secondary" for="btn-check-2-outlined">Checked</label><br>
-
-<input type="radio" class="btn-check" name="options-outlined" id="success-outlined" autocomplete="off" checked>
-<label class="btn btn-outline-success" for="success-outlined">Checked success radio</label>
-
-<input type="radio" class="btn-check" name="options-outlined" id="danger-outlined" autocomplete="off">
-<label class="btn btn-outline-danger" for="danger-outlined">Danger radio</label>
-{{< /example >}}
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="form-check-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/floating-labels.md b/vendor/twbs/bootstrap/site/content/docs/5.2/forms/floating-labels.md
deleted file mode 100644
index 9ec4fcd2f..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/floating-labels.md
+++ /dev/null
@@ -1,152 +0,0 @@
----
-layout: docs
-title: Floating labels
-description: Create beautifully simple form labels that float over your input fields.
-group: forms
-toc: true
----
-
-## Example
-
-Wrap a pair of `<input class="form-control">` and `<label>` elements in `.form-floating` to enable floating labels with Bootstrap's textual form fields. A `placeholder` is required on each `<input>` as our method of CSS-only floating labels uses the `:placeholder-shown` pseudo-element. Also note that the `<input>` must come first so we can utilize a sibling selector (e.g., `~`).
-
-{{< example >}}
-<div class="form-floating mb-3">
- <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
- <label for="floatingInput">Email address</label>
-</div>
-<div class="form-floating">
- <input type="password" class="form-control" id="floatingPassword" placeholder="Password">
- <label for="floatingPassword">Password</label>
-</div>
-{{< /example >}}
-
-When there's a `value` already defined, `<label>`s will automatically adjust to their floated position.
-
-{{< example >}}
-<form class="form-floating">
- <input type="email" class="form-control" id="floatingInputValue" placeholder="name@example.com" value="test@example.com">
- <label for="floatingInputValue">Input with value</label>
-</form>
-{{< /example >}}
-
-Form validation styles also work as expected.
-
-{{< example >}}
-<form class="form-floating">
- <input type="email" class="form-control is-invalid" id="floatingInputInvalid" placeholder="name@example.com" value="test@example.com">
- <label for="floatingInputInvalid">Invalid input</label>
-</form>
-{{< /example >}}
-
-## Textareas
-
-By default, `<textarea>`s with `.form-control` will be the same height as `<input>`s.
-
-{{< example >}}
-<div class="form-floating">
- <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea"></textarea>
- <label for="floatingTextarea">Comments</label>
-</div>
-{{< /example >}}
-
-To set a custom height on your `<textarea>`, do not use the `rows` attribute. Instead, set an explicit `height` (either inline or via custom CSS).
-
-{{< example >}}
-<div class="form-floating">
- <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea2" style="height: 100px"></textarea>
- <label for="floatingTextarea2">Comments</label>
-</div>
-{{< /example >}}
-
-## Selects
-
-Other than `.form-control`, floating labels are only available on `.form-select`s. They work in the same way, but unlike `<input>`s, they'll always show the `<label>` in its floated state. **Selects with `size` and `multiple` are not supported.**
-
-{{< example >}}
-<div class="form-floating">
- <select class="form-select" id="floatingSelect" aria-label="Floating label select example">
- <option selected>Open this select menu</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
- <label for="floatingSelect">Works with selects</label>
-</div>
-{{< /example >}}
-
-## Readonly plaintext
-
-Floating labels also support `.form-control-plaintext`, which can be helpful for toggling from an editable `<input>` to a plaintext value without affecting the page layout.
-
-{{< example >}}
-<div class="form-floating mb-3">
- <input type="email" readonly class="form-control-plaintext" id="floatingEmptyPlaintextInput" placeholder="name@example.com">
- <label for="floatingEmptyPlaintextInput">Empty input</label>
-</div>
-<div class="form-floating mb-3">
- <input type="email" readonly class="form-control-plaintext" id="floatingPlaintextInput" placeholder="name@example.com" value="name@example.com">
- <label for="floatingPlaintextInput">Input with value</label>
-</div>
-{{< /example >}}
-
-## Input groups
-
-Floating labels also support `.input-group`.
-
-{{< example >}}
-<div class="input-group mb-3">
- <span class="input-group-text">@</span>
- <div class="form-floating">
- <input type="text" class="form-control" id="floatingInputGroup1" placeholder="Username">
- <label for="floatingInputGroup1">Username</label>
- </div>
-</div>
-{{< /example >}}
-
-When using `.input-group` and `.form-floating` along with form validation, the `-feedback` should be placed outside of the `.form-floating`, but inside of the `.input-group`. This means that the feedback will need to be shown using javascript.
-
-{{< example >}}
-<div class="input-group has-validation">
- <span class="input-group-text">@</span>
- <div class="form-floating is-invalid">
- <input type="text" class="form-control is-invalid" id="floatingInputGroup2" placeholder="Username" required>
- <label for="floatingInputGroup2">Username</label>
- </div>
- <div class="invalid-feedback">
- Please choose a username.
- </div>
-</div>
-{{< /example >}}
-
-## Layout
-
-When working with the Bootstrap grid system, be sure to place form elements within column classes.
-
-{{< example >}}
-<div class="row g-2">
- <div class="col-md">
- <div class="form-floating">
- <input type="email" class="form-control" id="floatingInputGrid" placeholder="name@example.com" value="mdo@example.com">
- <label for="floatingInputGrid">Email address</label>
- </div>
- </div>
- <div class="col-md">
- <div class="form-floating">
- <select class="form-select" id="floatingSelectGrid">
- <option selected>Open this select menu</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
- <label for="floatingSelectGrid">Works with selects</label>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="form-floating-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/form-control.md b/vendor/twbs/bootstrap/site/content/docs/5.2/forms/form-control.md
deleted file mode 100644
index 4d6972d1d..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/form-control.md
+++ /dev/null
@@ -1,152 +0,0 @@
----
-layout: docs
-title: Form controls
-description: Give textual form controls like `<input>`s and `<textarea>`s an upgrade with custom styles, sizing, focus states, and more.
-group: forms
-toc: true
----
-
-## Example
-
-{{< example >}}
-<div class="mb-3">
- <label for="exampleFormControlInput1" class="form-label">Email address</label>
- <input type="email" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com">
-</div>
-<div class="mb-3">
- <label for="exampleFormControlTextarea1" class="form-label">Example textarea</label>
- <textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
-</div>
-{{< /example >}}
-
-## Sizing
-
-Set heights using classes like `.form-control-lg` and `.form-control-sm`.
-
-{{< example >}}
-<input class="form-control form-control-lg" type="text" placeholder=".form-control-lg" aria-label=".form-control-lg example">
-<input class="form-control" type="text" placeholder="Default input" aria-label="default input example">
-<input class="form-control form-control-sm" type="text" placeholder=".form-control-sm" aria-label=".form-control-sm example">
-{{< /example >}}
-
-## Disabled
-
-Add the `disabled` boolean attribute on an input to give it a grayed out appearance, remove pointer events, and prevent focusing.
-
-{{< example >}}
-<input class="form-control" type="text" placeholder="Disabled input" aria-label="Disabled input example" disabled>
-<input class="form-control" type="text" value="Disabled readonly input" aria-label="Disabled input example" disabled readonly>
-{{< /example >}}
-
-## Readonly
-
-Add the `readonly` boolean attribute on an input to prevent modification of the input's value. `readonly` inputs can still be focused and selected, while `disabled` inputs cannot.
-
-{{< example >}}
-<input class="form-control" type="text" value="Readonly input here..." aria-label="readonly input example" readonly>
-{{< /example >}}
-
-## Readonly plain text
-
-If you want to have `<input readonly>` elements in your form styled as plain text, replace `.form-control` with `.form-control-plaintext` to remove the default form field styling and preserve the correct `margin` and `padding`.
-
-{{< example >}}
- <div class="mb-3 row">
- <label for="staticEmail" class="col-sm-2 col-form-label">Email</label>
- <div class="col-sm-10">
- <input type="text" readonly class="form-control-plaintext" id="staticEmail" value="email@example.com">
- </div>
- </div>
- <div class="mb-3 row">
- <label for="inputPassword" class="col-sm-2 col-form-label">Password</label>
- <div class="col-sm-10">
- <input type="password" class="form-control" id="inputPassword">
- </div>
- </div>
-{{< /example >}}
-
-{{< example >}}
-<form class="row g-3">
- <div class="col-auto">
- <label for="staticEmail2" class="visually-hidden">Email</label>
- <input type="text" readonly class="form-control-plaintext" id="staticEmail2" value="email@example.com">
- </div>
- <div class="col-auto">
- <label for="inputPassword2" class="visually-hidden">Password</label>
- <input type="password" class="form-control" id="inputPassword2" placeholder="Password">
- </div>
- <div class="col-auto">
- <button type="submit" class="btn btn-primary mb-3">Confirm identity</button>
- </div>
-</form>
-{{< /example >}}
-
-## File input
-
-{{< example >}}
-<div class="mb-3">
- <label for="formFile" class="form-label">Default file input example</label>
- <input class="form-control" type="file" id="formFile">
-</div>
-<div class="mb-3">
- <label for="formFileMultiple" class="form-label">Multiple files input example</label>
- <input class="form-control" type="file" id="formFileMultiple" multiple>
-</div>
-<div class="mb-3">
- <label for="formFileDisabled" class="form-label">Disabled file input example</label>
- <input class="form-control" type="file" id="formFileDisabled" disabled>
-</div>
-<div class="mb-3">
- <label for="formFileSm" class="form-label">Small file input example</label>
- <input class="form-control form-control-sm" id="formFileSm" type="file">
-</div>
-<div>
- <label for="formFileLg" class="form-label">Large file input example</label>
- <input class="form-control form-control-lg" id="formFileLg" type="file">
-</div>
-{{< /example >}}
-
-## Color
-
-Set the `type="color"` and add `.form-control-color` to the `<input>`. We use the modifier class to set fixed `height`s and override some inconsistencies between browsers.
-
-{{< example >}}
-<label for="exampleColorInput" class="form-label">Color picker</label>
-<input type="color" class="form-control form-control-color" id="exampleColorInput" value="#563d7c" title="Choose your color">
-{{< /example >}}
-
-## Datalists
-
-Datalists allow you to create a group of `<option>`s that can be accessed (and autocompleted) from within an `<input>`. These are similar to `<select>` elements, but come with more menu styling limitations and differences. While most browsers and operating systems include some support for `<datalist>` elements, their styling is inconsistent at best.
-
-Learn more about [support for datalist elements](https://caniuse.com/datalist).
-
-{{< example >}}
-<label for="exampleDataList" class="form-label">Datalist example</label>
-<input class="form-control" list="datalistOptions" id="exampleDataList" placeholder="Type to search...">
-<datalist id="datalistOptions">
- <option value="San Francisco">
- <option value="New York">
- <option value="Seattle">
- <option value="Los Angeles">
- <option value="Chicago">
-</datalist>
-{{< /example >}}
-
-## Sass
-
-### Variables
-
-`$input-*` are shared across most of our form controls (and not buttons).
-
-{{< scss-docs name="form-input-variables" file="scss/_variables.scss" >}}
-
-`$form-label-*` and `$form-text-*` are for our `<label>`s and `.form-text` component.
-
-{{< scss-docs name="form-label-variables" file="scss/_variables.scss" >}}
-
-{{< scss-docs name="form-text-variables" file="scss/_variables.scss" >}}
-
-`$form-file-*` are for file input.
-
-{{< scss-docs name="form-file-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/input-group.md b/vendor/twbs/bootstrap/site/content/docs/5.2/forms/input-group.md
deleted file mode 100644
index 00e9eeec9..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/input-group.md
+++ /dev/null
@@ -1,316 +0,0 @@
----
-layout: docs
-title: Input group
-description: Easily extend form controls by adding text, buttons, or button groups on either side of textual inputs, custom selects, and custom file inputs.
-group: forms
-toc: true
----
-
-## Basic example
-
-Place one add-on or button on either side of an input. You may also place one on both sides of an input. Remember to place `<label>`s outside the input group.
-
-{{< example >}}
-<div class="input-group mb-3">
- <span class="input-group-text" id="basic-addon1">@</span>
- <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
-</div>
-
-<div class="input-group mb-3">
- <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="basic-addon2">
- <span class="input-group-text" id="basic-addon2">@example.com</span>
-</div>
-
-<label for="basic-url" class="form-label">Your vanity URL</label>
-<div class="input-group mb-3">
- <span class="input-group-text" id="basic-addon3">https://example.com/users/</span>
- <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
-</div>
-
-<div class="input-group mb-3">
- <span class="input-group-text">$</span>
- <input type="text" class="form-control" aria-label="Amount (to the nearest dollar)">
- <span class="input-group-text">.00</span>
-</div>
-
-<div class="input-group mb-3">
- <input type="text" class="form-control" placeholder="Username" aria-label="Username">
- <span class="input-group-text">@</span>
- <input type="text" class="form-control" placeholder="Server" aria-label="Server">
-</div>
-
-<div class="input-group">
- <span class="input-group-text">With textarea</span>
- <textarea class="form-control" aria-label="With textarea"></textarea>
-</div>
-{{< /example >}}
-
-## Wrapping
-
-Input groups wrap by default via `flex-wrap: wrap` in order to accommodate custom form field validation within an input group. You may disable this with `.flex-nowrap`.
-
-{{< example >}}
-<div class="input-group flex-nowrap">
- <span class="input-group-text" id="addon-wrapping">@</span>
- <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="addon-wrapping">
-</div>
-{{< /example >}}
-
-## Sizing
-
-Add the relative form sizing classes to the `.input-group` itself and contents within will automatically resize—no need for repeating the form control size classes on each element.
-
-**Sizing on the individual input group elements isn't supported.**
-
-{{< example >}}
-<div class="input-group input-group-sm mb-3">
- <span class="input-group-text" id="inputGroup-sizing-sm">Small</span>
- <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm">
-</div>
-
-<div class="input-group mb-3">
- <span class="input-group-text" id="inputGroup-sizing-default">Default</span>
- <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
-</div>
-
-<div class="input-group input-group-lg">
- <span class="input-group-text" id="inputGroup-sizing-lg">Large</span>
- <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-lg">
-</div>
-{{< /example >}}
-
-## Checkboxes and radios
-
-Place any checkbox or radio option within an input group's addon instead of text. We recommend adding `.mt-0` to the `.form-check-input` when there's no visible text next to the input.
-
-{{< example >}}
-<div class="input-group mb-3">
- <div class="input-group-text">
- <input class="form-check-input mt-0" type="checkbox" value="" aria-label="Checkbox for following text input">
- </div>
- <input type="text" class="form-control" aria-label="Text input with checkbox">
-</div>
-
-<div class="input-group">
- <div class="input-group-text">
- <input class="form-check-input mt-0" type="radio" value="" aria-label="Radio button for following text input">
- </div>
- <input type="text" class="form-control" aria-label="Text input with radio button">
-</div>
-{{< /example >}}
-
-## Multiple inputs
-
-While multiple `<input>`s are supported visually, validation styles are only available for input groups with a single `<input>`.
-
-{{< example >}}
-<div class="input-group">
- <span class="input-group-text">First and last name</span>
- <input type="text" aria-label="First name" class="form-control">
- <input type="text" aria-label="Last name" class="form-control">
-</div>
-{{< /example >}}
-
-## Multiple addons
-
-Multiple add-ons are supported and can be mixed with checkbox and radio input versions.
-
-{{< example >}}
-<div class="input-group mb-3">
- <span class="input-group-text">$</span>
- <span class="input-group-text">0.00</span>
- <input type="text" class="form-control" aria-label="Dollar amount (with dot and two decimal places)">
-</div>
-
-<div class="input-group">
- <input type="text" class="form-control" aria-label="Dollar amount (with dot and two decimal places)">
- <span class="input-group-text">$</span>
- <span class="input-group-text">0.00</span>
-</div>
-{{< /example >}}
-
-## Button addons
-
-{{< example >}}
-<div class="input-group mb-3">
- <button class="btn btn-outline-secondary" type="button" id="button-addon1">Button</button>
- <input type="text" class="form-control" placeholder="" aria-label="Example text with button addon" aria-describedby="button-addon1">
-</div>
-
-<div class="input-group mb-3">
- <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="button-addon2">
- <button class="btn btn-outline-secondary" type="button" id="button-addon2">Button</button>
-</div>
-
-<div class="input-group mb-3">
- <button class="btn btn-outline-secondary" type="button">Button</button>
- <button class="btn btn-outline-secondary" type="button">Button</button>
- <input type="text" class="form-control" placeholder="" aria-label="Example text with two button addons">
-</div>
-
-<div class="input-group">
- <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username with two button addons">
- <button class="btn btn-outline-secondary" type="button">Button</button>
- <button class="btn btn-outline-secondary" type="button">Button</button>
-</div>
-{{< /example >}}
-
-## Buttons with dropdowns
-
-{{< example >}}
-<div class="input-group mb-3">
- <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- <input type="text" class="form-control" aria-label="Text input with dropdown button">
-</div>
-
-<div class="input-group mb-3">
- <input type="text" class="form-control" aria-label="Text input with dropdown button">
- <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>
- <ul class="dropdown-menu dropdown-menu-end">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
-</div>
-
-<div class="input-group">
- <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action before</a></li>
- <li><a class="dropdown-item" href="#">Another action before</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- <input type="text" class="form-control" aria-label="Text input with 2 dropdown buttons">
- <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>
- <ul class="dropdown-menu dropdown-menu-end">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
-</div>
-{{< /example >}}
-
-## Segmented buttons
-
-{{< example >}}
-<div class="input-group mb-3">
- <button type="button" class="btn btn-outline-secondary">Action</button>
- <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
- <input type="text" class="form-control" aria-label="Text input with segmented dropdown button">
-</div>
-
-<div class="input-group">
- <input type="text" class="form-control" aria-label="Text input with segmented dropdown button">
- <button type="button" class="btn btn-outline-secondary">Action</button>
- <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
- <span class="visually-hidden">Toggle Dropdown</span>
- </button>
- <ul class="dropdown-menu dropdown-menu-end">
- <li><a class="dropdown-item" href="#">Action</a></li>
- <li><a class="dropdown-item" href="#">Another action</a></li>
- <li><a class="dropdown-item" href="#">Something else here</a></li>
- <li><hr class="dropdown-divider"></li>
- <li><a class="dropdown-item" href="#">Separated link</a></li>
- </ul>
-</div>
-{{< /example >}}
-
-## Custom forms
-
-Input groups include support for custom selects and custom file inputs. Browser default versions of these are not supported.
-
-### Custom select
-
-{{< example >}}
-<div class="input-group mb-3">
- <label class="input-group-text" for="inputGroupSelect01">Options</label>
- <select class="form-select" id="inputGroupSelect01">
- <option selected>Choose...</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
-</div>
-
-<div class="input-group mb-3">
- <select class="form-select" id="inputGroupSelect02">
- <option selected>Choose...</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
- <label class="input-group-text" for="inputGroupSelect02">Options</label>
-</div>
-
-<div class="input-group mb-3">
- <button class="btn btn-outline-secondary" type="button">Button</button>
- <select class="form-select" id="inputGroupSelect03" aria-label="Example select with button addon">
- <option selected>Choose...</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
-</div>
-
-<div class="input-group">
- <select class="form-select" id="inputGroupSelect04" aria-label="Example select with button addon">
- <option selected>Choose...</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
- <button class="btn btn-outline-secondary" type="button">Button</button>
-</div>
-{{< /example >}}
-
-### Custom file input
-
-{{< example >}}
-<div class="input-group mb-3">
- <label class="input-group-text" for="inputGroupFile01">Upload</label>
- <input type="file" class="form-control" id="inputGroupFile01">
-</div>
-
-<div class="input-group mb-3">
- <input type="file" class="form-control" id="inputGroupFile02">
- <label class="input-group-text" for="inputGroupFile02">Upload</label>
-</div>
-
-<div class="input-group mb-3">
- <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon03">Button</button>
- <input type="file" class="form-control" id="inputGroupFile03" aria-describedby="inputGroupFileAddon03" aria-label="Upload">
-</div>
-
-<div class="input-group">
- <input type="file" class="form-control" id="inputGroupFile04" aria-describedby="inputGroupFileAddon04" aria-label="Upload">
- <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon04">Button</button>
-</div>
-{{< /example >}}
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="input-group-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/overview.md b/vendor/twbs/bootstrap/site/content/docs/5.2/forms/overview.md
deleted file mode 100644
index f38ad9035..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/overview.md
+++ /dev/null
@@ -1,154 +0,0 @@
----
-layout: docs
-title: Forms
-description: Examples and usage guidelines for form control styles, layout options, and custom components for creating a wide variety of forms.
-group: forms
-toc: true
-aliases: "/docs/5.2/forms/"
-sections:
- - title: Form control
- description: Style textual inputs and textareas with support for multiple states.
- - title: Select
- description: Improve browser default select elements with a custom initial appearance.
- - title: Checks & radios
- description: Use our custom radio buttons and checkboxes in forms for selecting input options.
- - title: Range
- description: Replace browser default range inputs with our custom version.
- - title: Input group
- description: Attach labels and buttons to your inputs for increased semantic value.
- - title: Floating labels
- description: Create beautifully simple form labels that float over your input fields.
- - title: Layout
- description: Create inline, horizontal, or complex grid-based layouts with your forms.
- - title: Validation
- description: Validate your forms with custom or native validation behaviors and styles.
----
-
-## Overview
-
-Bootstrap's form controls expand on [our Rebooted form styles]({{< docsref "/content/reboot#forms" >}}) with classes. Use these classes to opt into their customized displays for a more consistent rendering across browsers and devices.
-
-Be sure to use an appropriate `type` attribute on all inputs (e.g., `email` for email address or `number` for numerical information) to take advantage of newer input controls like email verification, number selection, and more.
-
-Here's a quick example to demonstrate Bootstrap's form styles. Keep reading for documentation on required classes, form layout, and more.
-
-{{< example >}}
-<form>
- <div class="mb-3">
- <label for="exampleInputEmail1" class="form-label">Email address</label>
- <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
- <div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
- </div>
- <div class="mb-3">
- <label for="exampleInputPassword1" class="form-label">Password</label>
- <input type="password" class="form-control" id="exampleInputPassword1">
- </div>
- <div class="mb-3 form-check">
- <input type="checkbox" class="form-check-input" id="exampleCheck1">
- <label class="form-check-label" for="exampleCheck1">Check me out</label>
- </div>
- <button type="submit" class="btn btn-primary">Submit</button>
-</form>
-{{< /example >}}
-
-## Form text
-
-Block-level or inline-level form text can be created using `.form-text`.
-
-{{< callout warning >}}
-##### Associating form text with form controls
-
-Form text should be explicitly associated with the form control it relates to using the `aria-describedby` attribute. This will ensure that assistive technologies—such as screen readers—will announce this form text when the user focuses or enters the control.
-{{< /callout >}}
-
-Form text below inputs can be styled with `.form-text`. If a block-level element will be used, a top margin is added for easy spacing from the inputs above.
-
-{{< example >}}
-<label for="inputPassword5" class="form-label">Password</label>
-<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
-<div id="passwordHelpBlock" class="form-text">
- Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
-</div>
-{{< /example >}}
-
-Inline text can use any typical inline HTML element (be it a `<span>`, `<small>`, or something else) with nothing more than the `.form-text` class.
-
-{{< example >}}
-<div class="row g-3 align-items-center">
- <div class="col-auto">
- <label for="inputPassword6" class="col-form-label">Password</label>
- </div>
- <div class="col-auto">
- <input type="password" id="inputPassword6" class="form-control" aria-describedby="passwordHelpInline">
- </div>
- <div class="col-auto">
- <span id="passwordHelpInline" class="form-text">
- Must be 8-20 characters long.
- </span>
- </div>
-</div>
-{{< /example >}}
-
-## Disabled forms
-
-Add the `disabled` boolean attribute on an input to prevent user interactions and make it appear lighter.
-
-```html
-<input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here..." disabled>
-```
-
-Add the `disabled` attribute to a `<fieldset>` to disable all the controls within. Browsers treat all native form controls (`<input>`, `<select>`, and `<button>` elements) inside a `<fieldset disabled>` as disabled, preventing both keyboard and mouse interactions on them.
-
-However, if your form also includes custom button-like elements such as `<a class="btn btn-*">...</a>`, these will only be given a style of `pointer-events: none`, meaning they are still focusable and operable using the keyboard. In this case, you must manually modify these controls by adding `tabindex="-1"` to prevent them from receiving focus and `aria-disabled="disabled"` to signal their state to assistive technologies.
-
-{{< example >}}
-<form>
- <fieldset disabled>
- <legend>Disabled fieldset example</legend>
- <div class="mb-3">
- <label for="disabledTextInput" class="form-label">Disabled input</label>
- <input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
- </div>
- <div class="mb-3">
- <label for="disabledSelect" class="form-label">Disabled select menu</label>
- <select id="disabledSelect" class="form-select">
- <option>Disabled select</option>
- </select>
- </div>
- <div class="mb-3">
- <div class="form-check">
- <input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
- <label class="form-check-label" for="disabledFieldsetCheck">
- Can't check this
- </label>
- </div>
- </div>
- <button type="submit" class="btn btn-primary">Submit</button>
- </fieldset>
-</form>
-{{< /example >}}
-
-## Accessibility
-
-Ensure that all form controls have an appropriate accessible name so that their purpose can be conveyed to users of assistive technologies. The simplest way to achieve this is to use a `<label>` element, or—in the case of buttons—to include sufficiently descriptive text as part of the `<button>...</button>` content.
-
-For situations where it's not possible to include a visible `<label>` or appropriate text content, there are alternative ways of still providing an accessible name, such as:
-
-- `<label>` elements hidden using the `.visually-hidden` class
-- Pointing to an existing element that can act as a label using `aria-labelledby`
-- Providing a `title` attribute
-- Explicitly setting the accessible name on an element using `aria-label`
-
-If none of these are present, assistive technologies may resort to using the `placeholder` attribute as a fallback for the accessible name on `<input>` and `<textarea>` elements. The examples in this section provide a few suggested, case-specific approaches.
-
-While using visually hidden content (`.visually-hidden`, `aria-label`, and even `placeholder` content, which disappears once a form field has content) will benefit assistive technology users, a lack of visible label text may still be problematic for certain users. Some form of visible label is generally the best approach, both for accessibility and usability.
-
-## Sass
-
-Many form variables are set at a general level to be re-used and extended by individual form components. You'll see these most often as `$input-btn-*` and `$input-*` variables.
-
-### Variables
-
-`$input-btn-*` variables are shared global variables between our [buttons]({{< docsref "/components/buttons" >}}) and our form components. You'll find these frequently reassigned as values to other component-specific variables.
-
-{{< scss-docs name="input-btn-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/validation.md b/vendor/twbs/bootstrap/site/content/docs/5.2/forms/validation.md
deleted file mode 100644
index d6d626634..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/validation.md
+++ /dev/null
@@ -1,380 +0,0 @@
----
-layout: docs
-title: Validation
-description: Provide valuable, actionable feedback to your users with HTML5 form validation, via browser default behaviors or custom styles and JavaScript.
-group: forms
-toc: true
-extra_js:
- - src: "/docs/5.2/assets/js/validate-forms.js"
- async: true
----
-
-{{< callout warning >}}
-We are aware that currently the client-side custom validation styles and tooltips are not accessible, since they are not exposed to assistive technologies. While we work on a solution, we'd recommend either using the server-side option or the default browser validation method.
-{{< /callout >}}
-
-## How it works
-
-Here's how form validation works with Bootstrap:
-
-- HTML form validation is applied via CSS's two pseudo-classes, `:invalid` and `:valid`. It applies to `<input>`, `<select>`, and `<textarea>` elements.
-- Bootstrap scopes the `:invalid` and `:valid` styles to parent `.was-validated` class, usually applied to the `<form>`. Otherwise, any required field without a value shows up as invalid on page load. This way, you may choose when to activate them (typically after form submission is attempted).
-- To reset the appearance of the form (for instance, in the case of dynamic form submissions using AJAX), remove the `.was-validated` class from the `<form>` again after submission.
-- As a fallback, `.is-invalid` and `.is-valid` classes may be used instead of the pseudo-classes for [server-side validation](#server-side). They do not require a `.was-validated` parent class.
-- Due to constraints in how CSS works, we cannot (at present) apply styles to a `<label>` that comes before a form control in the DOM without the help of custom JavaScript.
-- All modern browsers support the [constraint validation API](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-constraint-validation-api), a series of JavaScript methods for validating form controls.
-- Feedback messages may utilize the [browser defaults](#browser-defaults) (different for each browser, and unstylable via CSS) or our custom feedback styles with additional HTML and CSS.
-- You may provide custom validity messages with `setCustomValidity` in JavaScript.
-
-With that in mind, consider the following demos for our custom form validation styles, optional server-side classes, and browser defaults.
-
-## Custom styles
-
-For custom Bootstrap form validation messages, you'll need to add the `novalidate` boolean attribute to your `<form>`. This disables the browser default feedback tooltips, but still provides access to the form validation APIs in JavaScript. Try to submit the form below; our JavaScript will intercept the submit button and relay feedback to you. When attempting to submit, you'll see the `:invalid` and `:valid` styles applied to your form controls.
-
-Custom feedback styles apply custom colors, borders, focus styles, and background icons to better communicate feedback. Background icons for `<select>`s are only available with `.form-select`, and not `.form-control`.
-
-{{< example >}}
-<form class="row g-3 needs-validation" novalidate>
- <div class="col-md-4">
- <label for="validationCustom01" class="form-label">First name</label>
- <input type="text" class="form-control" id="validationCustom01" value="Mark" required>
- <div class="valid-feedback">
- Looks good!
- </div>
- </div>
- <div class="col-md-4">
- <label for="validationCustom02" class="form-label">Last name</label>
- <input type="text" class="form-control" id="validationCustom02" value="Otto" required>
- <div class="valid-feedback">
- Looks good!
- </div>
- </div>
- <div class="col-md-4">
- <label for="validationCustomUsername" class="form-label">Username</label>
- <div class="input-group has-validation">
- <span class="input-group-text" id="inputGroupPrepend">@</span>
- <input type="text" class="form-control" id="validationCustomUsername" aria-describedby="inputGroupPrepend" required>
- <div class="invalid-feedback">
- Please choose a username.
- </div>
- </div>
- </div>
- <div class="col-md-6">
- <label for="validationCustom03" class="form-label">City</label>
- <input type="text" class="form-control" id="validationCustom03" required>
- <div class="invalid-feedback">
- Please provide a valid city.
- </div>
- </div>
- <div class="col-md-3">
- <label for="validationCustom04" class="form-label">State</label>
- <select class="form-select" id="validationCustom04" required>
- <option selected disabled value="">Choose...</option>
- <option>...</option>
- </select>
- <div class="invalid-feedback">
- Please select a valid state.
- </div>
- </div>
- <div class="col-md-3">
- <label for="validationCustom05" class="form-label">Zip</label>
- <input type="text" class="form-control" id="validationCustom05" required>
- <div class="invalid-feedback">
- Please provide a valid zip.
- </div>
- </div>
- <div class="col-12">
- <div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
- <label class="form-check-label" for="invalidCheck">
- Agree to terms and conditions
- </label>
- <div class="invalid-feedback">
- You must agree before submitting.
- </div>
- </div>
- </div>
- <div class="col-12">
- <button class="btn btn-primary" type="submit">Submit form</button>
- </div>
-</form>
-{{< /example >}}
-
-{{< example lang="js" show_preview="false" >}}
-{{< js.inline >}}
-{{- readFile (path.Join "site/static/docs" .Site.Params.docs_version "assets/js/validate-forms.js") -}}
-{{< /js.inline >}}
-{{< /example >}}
-
-## Browser defaults
-
-Not interested in custom validation feedback messages or writing JavaScript to change form behaviors? All good, you can use the browser defaults. Try submitting the form below. Depending on your browser and OS, you'll see a slightly different style of feedback.
-
-While these feedback styles cannot be styled with CSS, you can still customize the feedback text through JavaScript.
-
-{{< example >}}
-<form class="row g-3">
- <div class="col-md-4">
- <label for="validationDefault01" class="form-label">First name</label>
- <input type="text" class="form-control" id="validationDefault01" value="Mark" required>
- </div>
- <div class="col-md-4">
- <label for="validationDefault02" class="form-label">Last name</label>
- <input type="text" class="form-control" id="validationDefault02" value="Otto" required>
- </div>
- <div class="col-md-4">
- <label for="validationDefaultUsername" class="form-label">Username</label>
- <div class="input-group">
- <span class="input-group-text" id="inputGroupPrepend2">@</span>
- <input type="text" class="form-control" id="validationDefaultUsername" aria-describedby="inputGroupPrepend2" required>
- </div>
- </div>
- <div class="col-md-6">
- <label for="validationDefault03" class="form-label">City</label>
- <input type="text" class="form-control" id="validationDefault03" required>
- </div>
- <div class="col-md-3">
- <label for="validationDefault04" class="form-label">State</label>
- <select class="form-select" id="validationDefault04" required>
- <option selected disabled value="">Choose...</option>
- <option>...</option>
- </select>
- </div>
- <div class="col-md-3">
- <label for="validationDefault05" class="form-label">Zip</label>
- <input type="text" class="form-control" id="validationDefault05" required>
- </div>
- <div class="col-12">
- <div class="form-check">
- <input class="form-check-input" type="checkbox" value="" id="invalidCheck2" required>
- <label class="form-check-label" for="invalidCheck2">
- Agree to terms and conditions
- </label>
- </div>
- </div>
- <div class="col-12">
- <button class="btn btn-primary" type="submit">Submit form</button>
- </div>
-</form>
-{{< /example >}}
-
-## Server side
-
-We recommend using client-side validation, but in case you require server-side validation, you can indicate invalid and valid form fields with `.is-invalid` and `.is-valid`. Note that `.invalid-feedback` is also supported with these classes.
-
-For invalid fields, ensure that the invalid feedback/error message is associated with the relevant form field using `aria-describedby` (noting that this attribute allows more than one `id` to be referenced, in case the field already points to additional form text).
-
-To fix [issues with border radius](https://github.com/twbs/bootstrap/issues/25110), input groups require an additional `.has-validation` class.
-
-{{< example >}}
-<form class="row g-3">
- <div class="col-md-4">
- <label for="validationServer01" class="form-label">First name</label>
- <input type="text" class="form-control is-valid" id="validationServer01" value="Mark" required>
- <div class="valid-feedback">
- Looks good!
- </div>
- </div>
- <div class="col-md-4">
- <label for="validationServer02" class="form-label">Last name</label>
- <input type="text" class="form-control is-valid" id="validationServer02" value="Otto" required>
- <div class="valid-feedback">
- Looks good!
- </div>
- </div>
- <div class="col-md-4">
- <label for="validationServerUsername" class="form-label">Username</label>
- <div class="input-group has-validation">
- <span class="input-group-text" id="inputGroupPrepend3">@</span>
- <input type="text" class="form-control is-invalid" id="validationServerUsername" aria-describedby="inputGroupPrepend3 validationServerUsernameFeedback" required>
- <div id="validationServerUsernameFeedback" class="invalid-feedback">
- Please choose a username.
- </div>
- </div>
- </div>
- <div class="col-md-6">
- <label for="validationServer03" class="form-label">City</label>
- <input type="text" class="form-control is-invalid" id="validationServer03" aria-describedby="validationServer03Feedback" required>
- <div id="validationServer03Feedback" class="invalid-feedback">
- Please provide a valid city.
- </div>
- </div>
- <div class="col-md-3">
- <label for="validationServer04" class="form-label">State</label>
- <select class="form-select is-invalid" id="validationServer04" aria-describedby="validationServer04Feedback" required>
- <option selected disabled value="">Choose...</option>
- <option>...</option>
- </select>
- <div id="validationServer04Feedback" class="invalid-feedback">
- Please select a valid state.
- </div>
- </div>
- <div class="col-md-3">
- <label for="validationServer05" class="form-label">Zip</label>
- <input type="text" class="form-control is-invalid" id="validationServer05" aria-describedby="validationServer05Feedback" required>
- <div id="validationServer05Feedback" class="invalid-feedback">
- Please provide a valid zip.
- </div>
- </div>
- <div class="col-12">
- <div class="form-check">
- <input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" aria-describedby="invalidCheck3Feedback" required>
- <label class="form-check-label" for="invalidCheck3">
- Agree to terms and conditions
- </label>
- <div id="invalidCheck3Feedback" class="invalid-feedback">
- You must agree before submitting.
- </div>
- </div>
- </div>
- <div class="col-12">
- <button class="btn btn-primary" type="submit">Submit form</button>
- </div>
-</form>
-{{< /example >}}
-
-## Supported elements
-
-Validation styles are available for the following form controls and components:
-
-- `<input>`s and `<textarea>`s with `.form-control` (including up to one `.form-control` in input groups)
-- `<select>`s with `.form-select`
-- `.form-check`s
-
-{{< example >}}
-<form class="was-validated">
- <div class="mb-3">
- <label for="validationTextarea" class="form-label">Textarea</label>
- <textarea class="form-control" id="validationTextarea" placeholder="Required example textarea" required></textarea>
- <div class="invalid-feedback">
- Please enter a message in the textarea.
- </div>
- </div>
-
- <div class="form-check mb-3">
- <input type="checkbox" class="form-check-input" id="validationFormCheck1" required>
- <label class="form-check-label" for="validationFormCheck1">Check this checkbox</label>
- <div class="invalid-feedback">Example invalid feedback text</div>
- </div>
-
- <div class="form-check">
- <input type="radio" class="form-check-input" id="validationFormCheck2" name="radio-stacked" required>
- <label class="form-check-label" for="validationFormCheck2">Toggle this radio</label>
- </div>
- <div class="form-check mb-3">
- <input type="radio" class="form-check-input" id="validationFormCheck3" name="radio-stacked" required>
- <label class="form-check-label" for="validationFormCheck3">Or toggle this other radio</label>
- <div class="invalid-feedback">More example invalid feedback text</div>
- </div>
-
- <div class="mb-3">
- <select class="form-select" required aria-label="select example">
- <option value="">Open this select menu</option>
- <option value="1">One</option>
- <option value="2">Two</option>
- <option value="3">Three</option>
- </select>
- <div class="invalid-feedback">Example invalid select feedback</div>
- </div>
-
- <div class="mb-3">
- <input type="file" class="form-control" aria-label="file example" required>
- <div class="invalid-feedback">Example invalid form file feedback</div>
- </div>
-
- <div class="mb-3">
- <button class="btn btn-primary" type="submit" disabled>Submit form</button>
- </div>
-</form>
-{{< /example >}}
-
-## Tooltips
-
-If your form layout allows it, you can swap the `.{valid|invalid}-feedback` classes for `.{valid|invalid}-tooltip` classes to display validation feedback in a styled tooltip. Be sure to have a parent with `position: relative` on it for tooltip positioning. In the example below, our column classes have this already, but your project may require an alternative setup.
-
-{{< example >}}
-<form class="row g-3 needs-validation" novalidate>
- <div class="col-md-4 position-relative">
- <label for="validationTooltip01" class="form-label">First name</label>
- <input type="text" class="form-control" id="validationTooltip01" value="Mark" required>
- <div class="valid-tooltip">
- Looks good!
- </div>
- </div>
- <div class="col-md-4 position-relative">
- <label for="validationTooltip02" class="form-label">Last name</label>
- <input type="text" class="form-control" id="validationTooltip02" value="Otto" required>
- <div class="valid-tooltip">
- Looks good!
- </div>
- </div>
- <div class="col-md-4 position-relative">
- <label for="validationTooltipUsername" class="form-label">Username</label>
- <div class="input-group has-validation">
- <span class="input-group-text" id="validationTooltipUsernamePrepend">@</span>
- <input type="text" class="form-control" id="validationTooltipUsername" aria-describedby="validationTooltipUsernamePrepend" required>
- <div class="invalid-tooltip">
- Please choose a unique and valid username.
- </div>
- </div>
- </div>
- <div class="col-md-6 position-relative">
- <label for="validationTooltip03" class="form-label">City</label>
- <input type="text" class="form-control" id="validationTooltip03" required>
- <div class="invalid-tooltip">
- Please provide a valid city.
- </div>
- </div>
- <div class="col-md-3 position-relative">
- <label for="validationTooltip04" class="form-label">State</label>
- <select class="form-select" id="validationTooltip04" required>
- <option selected disabled value="">Choose...</option>
- <option>...</option>
- </select>
- <div class="invalid-tooltip">
- Please select a valid state.
- </div>
- </div>
- <div class="col-md-3 position-relative">
- <label for="validationTooltip05" class="form-label">Zip</label>
- <input type="text" class="form-control" id="validationTooltip05" required>
- <div class="invalid-tooltip">
- Please provide a valid zip.
- </div>
- </div>
- <div class="col-12">
- <button class="btn btn-primary" type="submit">Submit form</button>
- </div>
-</form>
-{{< /example >}}
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="form-feedback-variables" file="scss/_variables.scss" >}}
-
-### Mixins
-
-Two mixins are combined together, through our [loop](#loop), to generate our form validation feedback styles.
-
-{{< scss-docs name="form-validation-mixins" file="scss/mixins/_forms.scss" >}}
-
-### Map
-
-This is the validation Sass map from `_variables.scss`. Override or extend this to generate different or additional states.
-
-{{< scss-docs name="form-validation-states" file="scss/_variables.scss" >}}
-
-Maps of `$form-validation-states` can contain three optional parameters to override tooltips and focus styles.
-
-### Loop
-
-Used to iterate over `$form-validation-states` map values to generate our validation styles. Any modifications to the above Sass map will be reflected in your compiled CSS via this loop.
-
-{{< scss-docs name="form-validation-states-loop" file="scss/forms/_validation.scss" >}}
-
-### Customizing
-
-Validation states can be customized via Sass with the `$form-validation-states` map. Located in our `_variables.scss` file, this Sass map is how we generate the default `valid`/`invalid` validation states. Included is a nested map for customizing each state's color, icon, tooltip color, and focus shadow. While no other states are supported by browsers, those using custom styles can easily add more complex form feedback.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/contribute.md b/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/contribute.md
deleted file mode 100644
index 6b3de43b6..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/contribute.md
+++ /dev/null
@@ -1,67 +0,0 @@
----
-layout: docs
-title: Contribute
-description: Help develop Bootstrap with our documentation build scripts and tests.
-group: getting-started
-toc: true
-aliases: "/docs/5.2/getting-started/build-tools/"
----
-
-## Tooling setup
-
-Bootstrap uses [npm scripts](https://docs.npmjs.com/misc/scripts/) to build the documentation and compile source files. Our [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/package.json) houses these scripts for compiling code, running tests, and more. These aren't intended for use outside our repository and documentation.
-
-To use our build system and run our documentation locally, you'll need a copy of Bootstrap's source files and Node. Follow these steps and you should be ready to rock:
-
-1. [Download and install Node.js](https://nodejs.org/en/download/), which we use to manage our dependencies.
-2. Either [download Bootstrap's sources]({{< param "download.source" >}}) or fork [Bootstrap's repository]({{< param repo >}}).
-3. Navigate to the root `/bootstrap` directory and run `npm install` to install our local dependencies listed in [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/package.json).
-
-When completed, you'll be able to run the various commands provided from the command line.
-
-## Using npm scripts
-
-Our [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/package.json) includes numerous tasks for developing the project. Run `npm run` to see all the npm scripts in your terminal. **Primary tasks include:**
-
-{{< bs-table >}}
-| Task | Description |
-| --- | --- |
-| `npm start` | Compiles CSS and JavaScript, builds the documentation, and starts a local server. |
-| `npm run dist` | Creates the `dist/` directory with compiled files. Uses [Sass](https://sass-lang.com/), [Autoprefixer](https://github.com/postcss/autoprefixer), and [terser](https://github.com/terser/terser). |
-| `npm test` | Runs tests locally after running `npm run dist` |
-| `npm run docs-serve` | Builds and runs the documentation locally. |
-{{< /bs-table >}}
-
-{{< callout info >}}
-{{< partial "callout-info-npm-starter.md" >}}
-{{< /callout >}}
-
-## Sass
-
-Bootstrap uses [Dart Sass](https://sass-lang.com/dart-sass) for compiling our Sass source files into CSS files (included in our build process), and we recommend you do the same if you're compiling Sass using your own asset pipeline. We previously used Node Sass for Bootstrap v4, but LibSass and packages built on top of it, including Node Sass, are now [deprecated](https://sass-lang.com/blog/libsass-is-deprecated).
-
-Dart Sass uses a rounding precision of 10 and for efficiency reasons does not allow adjustment of this value. We don't lower this precision during further processing of our generated CSS, such as during minification, but if you chose to do so we recommend maintaining a precision of at least 6 to prevent issues with browser rounding.
-
-## Autoprefixer
-
-Bootstrap uses [Autoprefixer](https://github.com/postcss/autoprefixer) (included in our build process) to automatically add vendor prefixes to some CSS properties at build time. Doing so saves us time and code by allowing us to write key parts of our CSS a single time while eliminating the need for vendor mixins like those found in v3.
-
-We maintain the list of browsers supported through Autoprefixer in a separate file within our GitHub repository. See [.browserslistrc]({{< param repo >}}/blob/v{{< param current_version >}}/.browserslistrc) for details.
-
-## RTLCSS
-
-Bootstrap uses [RTLCSS](https://rtlcss.com/) to process compiled CSS and convert them to RTL – basically replacing horizontal direction aware properties (e.g. `padding-left`) with their opposite. It allows us only write our CSS a single time and make minor tweaks using RTLCSS [control](https://rtlcss.com/learn/usage-guide/control-directives/) and [value](https://rtlcss.com/learn/usage-guide/value-directives/) directives.
-
-## Local documentation
-
-Running our documentation locally requires the use of Hugo, which gets installed via the [hugo-bin](https://www.npmjs.com/package/hugo-bin) npm package. Hugo is a blazingly fast and quite extensible static site generator that provides us: basic includes, Markdown-based files, templates, and more. Here's how to get it started:
-
-1. Run through the [tooling setup](#tooling-setup) above to install all dependencies.
-2. From the root `/bootstrap` directory, run `npm run docs-serve` in the command line.
-3. Open `http://localhost:9001/` in your browser, and voilà.
-
-Learn more about using Hugo by reading its [documentation](https://gohugo.io/documentation/).
-
-## Troubleshooting
-
-Should you encounter problems with installing dependencies, uninstall all previous dependency versions (global and local). Then, rerun `npm install`.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/download.md b/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/download.md
deleted file mode 100644
index b06c0559a..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/download.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-layout: docs
-title: Download
-description: Download Bootstrap to get the compiled CSS and JavaScript, source code, or include it with your favorite package managers like npm, RubyGems, and more.
-group: getting-started
-toc: true
----
-
-## Compiled CSS and JS
-
-Download ready-to-use compiled code for **Bootstrap v{{< param current_version >}}** to easily drop into your project, which includes:
-
-- Compiled and minified CSS bundles (see [CSS files comparison]({{< docsref "/getting-started/contents#css-files" >}}))
-- Compiled and minified JavaScript plugins (see [JS files comparison]({{< docsref "/getting-started/contents#js-files" >}}))
-
-This doesn't include documentation, source files, or any optional JavaScript dependencies like Popper.
-
-<a href="{{< param "download.dist" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download Bootstrap');">Download</a>
-
-## Source files
-
-Compile Bootstrap with your own asset pipeline by downloading our source Sass, JavaScript, and documentation files. This option requires some additional tooling:
-
-- [Sass compiler]({{< docsref "/getting-started/contribute#sass" >}}) for compiling Sass source files into CSS files
-- [Autoprefixer](https://github.com/postcss/autoprefixer) for CSS vendor prefixing
-
-Should you require our full set of [build tools]({{< docsref "/getting-started/contribute#tooling-setup" >}}), they are included for developing Bootstrap and its docs, but they're likely unsuitable for your own purposes.
-
-<a href="{{< param "download.source" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download source');">Download source</a>
-
-## Examples
-
-If you want to download and examine our [examples]({{< docsref "/examples" >}}), you can grab the already built examples:
-
-<a href="{{< param "download.dist_examples" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download Examples');">Download Examples</a>
-
-## CDN via jsDelivr
-
-Skip the download with [jsDelivr](https://www.jsdelivr.com/) to deliver cached version of Bootstrap's compiled CSS and JS to your project.
-
-```html
-<link href="{{< param "cdn.css" >}}" rel="stylesheet" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
-<script src="{{< param "cdn.js_bundle" >}}" integrity="{{< param "cdn.js_bundle_hash" >}}" crossorigin="anonymous"></script>
-```
-
-If you're using our compiled JavaScript and prefer to include Popper separately, add Popper before our JS, via a CDN preferably.
-
-```html
-<script src="{{< param "cdn.popper" >}}" integrity="{{< param "cdn.popper_hash" >}}" crossorigin="anonymous"></script>
-<script src="{{< param "cdn.js" >}}" integrity="{{< param "cdn.js_hash" >}}" crossorigin="anonymous"></script>
-```
-
-## Package managers
-
-Pull in Bootstrap's **source files** into nearly any project with some of the most popular package managers. No matter the package manager, Bootstrap will **require a [Sass compiler]({{< docsref "/getting-started/contribute#sass" >}}) and [Autoprefixer](https://github.com/postcss/autoprefixer)** for a setup that matches our official compiled versions.
-
-### npm
-
-Install Bootstrap in your Node.js powered apps with [the npm package](https://www.npmjs.com/package/bootstrap):
-
-```sh
-npm install bootstrap@{{< param "current_version" >}}
-```
-
-`const bootstrap = require('bootstrap')` or `import bootstrap from 'bootstrap'` will load all of Bootstrap's plugins onto a `bootstrap` object.
-The `bootstrap` module itself exports all of our plugins. You can manually load Bootstrap's plugins individually by loading the `/js/dist/*.js` files under the package's top-level directory.
-
-Bootstrap's `package.json` contains some additional metadata under the following keys:
-
-- `sass` - path to Bootstrap's main [Sass](https://sass-lang.com/) source file
-- `style` - path to Bootstrap's non-minified CSS that's been compiled using the default settings (no customization)
-
-{{< callout info >}}
-{{< partial "callout-info-npm-starter.md" >}}
-{{< /callout >}}
-
-### yarn
-
-Install Bootstrap in your Node.js powered apps with [the yarn package](https://yarnpkg.com/en/package/bootstrap):
-
-```sh
-yarn add bootstrap@{{< param "current_version" >}}
-```
-
-### RubyGems
-
-Install Bootstrap in your Ruby apps using [Bundler](https://bundler.io/) (**recommended**) and [RubyGems](https://rubygems.org/) by adding the following line to your [`Gemfile`](https://bundler.io/gemfile.html):
-
-```ruby
-gem 'bootstrap', '~> {{< param current_ruby_version >}}'
-```
-
-Alternatively, if you're not using Bundler, you can install the gem by running this command:
-
-```sh
-gem install bootstrap -v {{< param current_ruby_version >}}
-```
-
-[See the gem's README](https://github.com/twbs/bootstrap-rubygem/blob/master/README.md) for further details.
-
-### Composer
-
-You can also install and manage Bootstrap's Sass and JavaScript using [Composer](https://getcomposer.org/):
-
-```sh
-composer require twbs/bootstrap:{{< param current_version >}}
-```
-
-### NuGet
-
-If you develop in .NET Framework, you can also install and manage Bootstrap's [CSS](https://www.nuget.org/packages/bootstrap/) or [Sass](https://www.nuget.org/packages/bootstrap.sass/) and JavaScript using [NuGet](https://www.nuget.org/). Newer projects should use [libman](https://docs.microsoft.com/en-us/aspnet/core/client-side/libman/) or another method as NuGet is designed for compiled code, not frontend assets.
-
-```powershell
-Install-Package bootstrap
-```
-
-```powershell
-Install-Package bootstrap.sass
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/introduction.md b/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/introduction.md
deleted file mode 100644
index f0072bf85..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/introduction.md
+++ /dev/null
@@ -1,162 +0,0 @@
----
-layout: docs
-title: Get started with Bootstrap
-description: Bootstrap is a powerful, feature-packed frontend toolkit. Build anything—from prototype to production—in minutes.
-group: getting-started
-aliases:
- - "/docs/5.2/getting-started/"
- - "/docs/getting-started/"
- - "/getting-started/"
-toc: true
----
-
-## Quick start
-
-Get started by including Bootstrap's production-ready CSS and JavaScript via CDN without the need for any build steps. See it in practice with this [Bootstrap CodePen demo](https://codepen.io/team/bootstrap/pen/qBamdLj).
-
-<br>
-
-1. **Create a new `index.html` file in your project root.** Include the `<meta name="viewport">` tag as well for [proper responsive behavior](https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag) in mobile devices.
-
- ```html
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Bootstrap demo</title>
- </head>
- <body>
- <h1>Hello, world!</h1>
- </body>
- </html>
- ```
-
-2. **Include Bootstrap's CSS and JS.** Place the `<link>` tag in the `<head>` for our CSS, and the `<script>` tag for our JavaScript bundle (including Popper for positioning dropdowns, poppers, and tooltips) before the closing `</body>`. Learn more about our [CDN links](#cdn-links).
-
- ```html
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Bootstrap demo</title>
- <link href="{{< param "cdn.css" >}}" rel="stylesheet" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
- </head>
- <body>
- <h1>Hello, world!</h1>
- <script src="{{< param "cdn.js_bundle" >}}" integrity="{{< param "cdn.js_bundle_hash" >}}" crossorigin="anonymous"></script>
- </body>
- </html>
- ```
-
- You can also include [Popper](https://popper.js.org/) and our JS separately. If you don't plan to use dropdowns, popovers, or tooltips, save some kilobytes by not including Popper.
-
- ```html
- <script src="{{< param "cdn.popper" >}}" integrity="{{< param "cdn.popper_hash" >}}" crossorigin="anonymous"></script>
- <script src="{{< param "cdn.js" >}}" integrity="{{< param "cdn.js_hash" >}}" crossorigin="anonymous"></script>
- ```
-
-3. **Hello, world!** Open the page in your browser of choice to see your Bootstrapped page. Now you can start building with Bootstrap by creating your own [layout]({{< docsref "/layout/grid" >}}), adding dozens of [components]({{< docsref "/components/buttons" >}}), and utilizing [our official examples]({{< docsref "/examples" >}}).
-
-## CDN links
-
-As reference, here are our primary CDN links.
-
-{{< bs-table >}}
-| Description | URL |
-| --- | --- |
-| CSS | `{{< param "cdn.css" >}}` |
-| JS | `{{< param "cdn.js_bundle" >}}` |
-{{< /bs-table >}}
-
-You can also use the CDN to fetch any of our [additional builds listed in the Contents page]({{< docsref "/getting-started/contents" >}}).
-
-## Next steps
-
-- Read a bit more about some [important global environment settings](#important-globals) that Bootstrap utilizes.
-
-- Read about what's included in Bootstrap in our [contents section]({{< docsref "/getting-started/contents/" >}}) and the list of [components that require JavaScript](#js-components) below.
-
-- Need a little more power? Consider building with Bootstrap by [including the source files via package manager]({{< docsref "/getting-started/download#package-managers" >}}).
-
-- Looking to use Bootstrap as a module with `<script type="module">`? Please refer to our [using Bootstrap as a module]({{< docsref "/getting-started/javascript#using-bootstrap-as-a-module" >}}) section.
-
-## JS components
-
-Curious which components explicitly require our JavaScript and Popper? Click the show components link below. If you're at all unsure about the general page structure, keep reading for an example page template.
-
-<details>
-<summary class="text-primary mb-3">Show components requiring JavaScript</summary>
-{{< markdown >}}
-- Alerts for dismissing
-- Buttons for toggling states and checkbox/radio functionality
-- Carousel for all slide behaviors, controls, and indicators
-- Collapse for toggling visibility of content
-- Dropdowns for displaying and positioning (also requires [Popper](https://popper.js.org/))
-- Modals for displaying, positioning, and scroll behavior
-- Navbar for extending our Collapse and Offcanvas plugins to implement responsive behaviors
-- Navs with the Tab plugin for toggling content panes
-- Offcanvases for displaying, positioning, and scroll behavior
-- Scrollspy for scroll behavior and navigation updates
-- Toasts for displaying and dismissing
-- Tooltips and popovers for displaying and positioning (also requires [Popper](https://popper.js.org/))
-{{< /markdown >}}
-</details>
-
-## Important globals
-
-Bootstrap employs a handful of important global styles and settings, all of which are almost exclusively geared towards the *normalization* of cross browser styles. Let's dive in.
-
-### HTML5 doctype
-
-Bootstrap requires the use of the HTML5 doctype. Without it, you'll see some funky and incomplete styling.
-
-```html
-<!doctype html>
-<html lang="en">
- ...
-</html>
-```
-
-### Responsive meta tag
-
-Bootstrap is developed *mobile first*, a strategy in which we optimize code for mobile devices first and then scale up components as necessary using CSS media queries. To ensure proper rendering and touch zooming for all devices, add the responsive viewport meta tag to your `<head>`.
-
-```html
-<meta name="viewport" content="width=device-width, initial-scale=1">
-```
-
-You can see an example of this in action in the [quick start](#quick-start).
-
-### Box-sizing
-
-For more straightforward sizing in CSS, we switch the global `box-sizing` value from `content-box` to `border-box`. This ensures `padding` does not affect the final computed width of an element, but it can cause problems with some third-party software like Google Maps and Google Custom Search Engine.
-
-On the rare occasion you need to override it, use something like the following:
-
-```css
-.selector-for-some-widget {
- box-sizing: content-box;
-}
-```
-
-With the above snippet, nested elements—including generated content via `::before` and `::after`—will all inherit the specified `box-sizing` for that `.selector-for-some-widget`.
-
-Learn more about [box model and sizing at CSS Tricks](https://css-tricks.com/box-sizing/).
-
-### Reboot
-
-For improved cross-browser rendering, we use [Reboot]({{< docsref "/content/reboot" >}}) to correct inconsistencies across browsers and devices while providing slightly more opinionated resets to common HTML elements.
-
-## Community
-
-Stay up-to-date on the development of Bootstrap and reach out to the community with these helpful resources.
-
-- Read and subscribe to [The Official Bootstrap Blog]({{< param blog >}}).
-- Ask and explore [our GitHub Discussions](https://github.com/twbs/bootstrap/discussions).
-- Chat with fellow Bootstrappers in IRC. On the `irc.libera.chat` server, in the `#bootstrap` channel.
-- Implementation help may be found at Stack Overflow (tagged [`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5)).
-- Developers should use the keyword `bootstrap` on packages that modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/search?q=keywords:bootstrap) or similar delivery mechanisms for maximum discoverability.
-
-You can also follow [@getbootstrap on Twitter](https://twitter.com/{{< param twitter >}}) for the latest gossip and awesome music videos.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/javascript.md b/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/javascript.md
deleted file mode 100644
index c4ba6b0f7..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/javascript.md
+++ /dev/null
@@ -1,337 +0,0 @@
----
-layout: docs
-title: JavaScript
-description: Bring Bootstrap to life with our optional JavaScript plugins. Learn about each plugin, our data and programmatic API options, and more.
-group: getting-started
-toc: true
----
-
-## Individual or compiled
-
-Plugins can be included individually (using Bootstrap's individual `js/dist/*.js`), or all at once using `bootstrap.js` or the minified `bootstrap.min.js` (don't include both).
-
-If you use a bundler (Webpack, Parcel, Vite...), you can use `/js/dist/*.js` files which are UMD ready.
-
-## Usage with JavaScript frameworks
-
-While the Bootstrap CSS can be used with any framework, **the Bootstrap JavaScript is not fully compatible with JavaScript frameworks like React, Vue, and Angular** which assume full knowledge of the DOM. Both Bootstrap and the framework may attempt to mutate the same DOM element, resulting in bugs like dropdowns that are stuck in the "open" position.
-
-A better alternative for those using this type of frameworks is to use a framework-specific package **instead of** the Bootstrap JavaScript. Here are some of the most popular options:
-
-- React: [React Bootstrap](https://react-bootstrap.github.io/)
-- Vue: [BootstrapVue](https://bootstrap-vue.org/) (currently only supports Vue 2 and Bootstrap 4)
-- Angular: [ng-bootstrap](https://ng-bootstrap.github.io/)
-
-## Using Bootstrap as a module
-
-{{< callout >}}
-**Try it yourself!** Download the source code and working demo for using Bootstrap as an ES module from the [twbs/examples repository](https://github.com/twbs/examples/tree/main/sass-js-esm). You can also [open the example in StackBlitz](https://stackblitz.com/github/twbs/examples/tree/main/sass-js-esm?file=index.html).
-{{< /callout >}}
-
-We provide a version of Bootstrap built as `ESM` (`bootstrap.esm.js` and `bootstrap.esm.min.js`) which allows you to use Bootstrap as a module in the browser, if your [targeted browsers support it](https://caniuse.com/es6-module).
-
-```html
-<script type="module">
- import { Toast } from 'bootstrap.esm.min.js'
-
- Array.from(document.querySelectorAll('.toast'))
- .forEach(toastNode => new Toast(toastNode))
-</script>
-```
-
-Compared to JS bundlers, using ESM in the browser requires you to use the full path and filename instead of the module name. [Read more about JS modules in the browser.](https://v8.dev/features/modules#specifiers) That's why we use `'bootstrap.esm.min.js'` instead of `'bootstrap'` above. However, this is further complicated by our Popper dependency, which imports Popper into our JavaScript like so:
-
-<!-- eslint-skip -->
-```js
-import * as Popper from "@popperjs/core"
-```
-
-If you try this as-is, you'll see an error in the console like the following:
-
-```text
-Uncaught TypeError: Failed to resolve module specifier "@popperjs/core". Relative references must start with either "/", "./", or "../".
-```
-
-To fix this, you can use an `importmap` to resolve the arbitrary module names to complete paths. If your [targeted browsers](https://caniuse.com/?search=importmap) do not support `importmap`, you'll need to use the [es-module-shims](https://github.com/guybedford/es-module-shims) project. Here's how it works for Bootstrap and Popper:
-
-```html
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <link href="{{< param "cdn.css" >}}" rel="stylesheet" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
- <title>Hello, modularity!</title>
- </head>
- <body>
- <h1>Hello, modularity!</h1>
- <button id="popoverButton" type="button" class="btn btn-primary btn-lg" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="ESM in Browser" data-bs-content="Bang!">Custom popover</button>
-
- <script async src="https://cdn.jsdelivr.net/npm/es-module-shims@1/dist/es-module-shims.min.js" crossorigin="anonymous"></script>
- <script type="importmap">
- {
- "imports": {
- "@popperjs/core": "{{< param "cdn.popper" >}}",
- "bootstrap": "https://cdn.jsdelivr.net/npm/bootstrap@{{< param "current_version" >}}/dist/js/bootstrap.esm.min.js"
- }
- }
- </script>
- <script type="module">
- import * as bootstrap from 'bootstrap'
-
- new bootstrap.Popover(document.getElementById('popoverButton'))
- </script>
- </body>
-</html>
-```
-
-## Dependencies
-
-Some plugins and CSS components depend on other plugins. If you include plugins individually, make sure to check for these dependencies in the docs.
-
-Our dropdowns, popovers, and tooltips also depend on [Popper](https://popper.js.org/).
-
-## Data attributes
-
-Nearly all Bootstrap plugins can be enabled and configured through HTML alone with data attributes (our preferred way of using JavaScript functionality). Be sure to **only use one set of data attributes on a single element** (e.g., you cannot trigger a tooltip and modal from the same button.)
-
-{{< markdown >}}
-{{< partial "js-data-attributes.md" >}}
-{{< /markdown >}}
-
-## Selectors
-
-We use the native `querySelector` and `querySelectorAll` methods to query DOM elements for performance reasons, so you must use [valid selectors](https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier). If you use special selectors like `collapse:Example`, be sure to escape them.
-
-## Events
-
-Bootstrap provides custom events for most plugins' unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. `show`) is triggered at the start of an event, and its past participle form (ex. `shown`) is triggered on the completion of an action.
-
-All infinitive events provide [`preventDefault()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault) functionality. This provides the ability to stop the execution of an action before it starts. Returning false from an event handler will also automatically call `preventDefault()`.
-
-```js
-const myModal = document.querySelector('#myModal')
-
-myModal.addEventListener('show.bs.modal', event => {
- if (!data) {
- return event.preventDefault() // stops modal from being shown
- }
-})
-```
-
-## Programmatic API
-
-All constructors accept an optional options object or nothing (which initiates a plugin with its default behavior):
-
-```js
-const myModalEl = document.querySelector('#myModal')
-
-const modal = new bootstrap.Modal(myModalEl) // initialized with defaults
-
-const configObject = { keyboard: false }
-const modal1 = new bootstrap.Modal(myModalEl, configObject) // initialized with no keyboard
-```
-
-If you'd like to get a particular plugin instance, each plugin exposes a `getInstance` method. For example, to retrieve an instance directly from an element:
-
-```js
-bootstrap.Popover.getInstance(myPopoverEl)
-```
-
-This method will return `null` if an instance is not initiated over the requested element.
-
-Alternatively, `getOrCreateInstance` can be used to get the instance associated with a DOM element, or create a new one in case it wasn't initialized.
-
-```js
-bootstrap.Popover.getOrCreateInstance(myPopoverEl, configObject)
-```
-
-In case an instance wasn't initialized, it may accept and use an optional configuration object as second argument.
-
-### CSS selectors in constructors
-
-In addition to the `getInstance` and `getOrCreateInstance` methods, all plugin constructors can accept a DOM element or a valid [CSS selector](#selectors) as the first argument. Plugin elements are found with the `querySelector` method since our plugins only support a single element.
-
-```js
-const modal = new bootstrap.Modal('#myModal')
-const dropdown = new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
-const offcanvas = bootstrap.Offcanvas.getInstance('#myOffcanvas')
-const alert = bootstrap.Alert.getOrCreateInstance('#myAlert')
-```
-
-### Asynchronous functions and transitions
-
-All programmatic API methods are **asynchronous** and return to the caller once the transition is started, but **before it ends**. In order to execute an action once the transition is complete, you can listen to the corresponding event.
-
-```js
-const myCollapseEl = document.querySelector('#myCollapse')
-
-myCollapseEl.addEventListener('shown.bs.collapse', event => {
- // Action to execute once the collapsible area is expanded
-})
-```
-
-In addition, a method call on a **transitioning component will be ignored**.
-
-```js
-const myCarouselEl = document.querySelector('#myCarousel')
-const carousel = bootstrap.Carousel.getInstance(myCarouselEl) // Retrieve a Carousel instance
-
-myCarouselEl.addEventListener('slid.bs.carousel', event => {
- carousel.to('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
-})
-
-carousel.to('1') // Will start sliding to the slide 1 and returns to the caller
-carousel.to('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!
-```
-
-#### `dispose` method
-
-While it may seem correct to use the `dispose` method immediately after `hide()`, it will lead to incorrect results. Here's an example of the problem use:
-
-```js
-const myModal = document.querySelector('#myModal')
-myModal.hide() // it is asynchronous
-
-myModal.addEventListener('shown.bs.hidden', event => {
- myModal.dispose()
-})
-```
-
-### Default settings
-
-You can change the default settings for a plugin by modifying the plugin's `Constructor.Default` object:
-
-```js
-// changes default for the modal plugin's `keyboard` option to false
-bootstrap.Modal.Default.keyboard = false
-```
-
-## Methods and properties
-
-Every Bootstrap plugin exposes the following methods and static properties.
-
-{{< bs-table "table" >}}
-| Method | Description |
-| --- | --- |
-| `dispose` | Destroys an element's modal. (Removes stored data on the DOM element) |
-| `getInstance` | *Static* method which allows you to get the modal instance associated with a DOM element. |
-| `getOrCreateInstance` | *Static* method which allows you to get the modal instance associated with a DOM element, or create a new one in case it wasn't initialized. |
-{{< /bs-table >}}
-
-{{< bs-table "table" >}}
-| Static property | Description |
-| --- | --- |
-| `NAME` | Returns the plugin name. (Example: `bootstrap.Tooltip.NAME`) |
-| `VERSION` | The version of each of Bootstrap's plugins can be accessed via the `VERSION` property of the plugin's constructor (Example: `bootstrap.Tooltip.VERSION`) |
-{{< /bs-table >}}
-
-## Sanitizer
-
-Tooltips and Popovers use our built-in sanitizer to sanitize options which accept HTML.
-
-The default `allowList` value is the following:
-
-```js
-const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
-const DefaultAllowlist = {
- // Global attributes allowed on any supplied element below.
- '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
- a: ['target', 'href', 'title', 'rel'],
- area: [],
- b: [],
- br: [],
- col: [],
- code: [],
- div: [],
- em: [],
- hr: [],
- h1: [],
- h2: [],
- h3: [],
- h4: [],
- h5: [],
- h6: [],
- i: [],
- img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
- li: [],
- ol: [],
- p: [],
- pre: [],
- s: [],
- small: [],
- span: [],
- sub: [],
- sup: [],
- strong: [],
- u: [],
- ul: []
-}
-```
-
-If you want to add new values to this default `allowList` you can do the following:
-
-```js
-const myDefaultAllowList = bootstrap.Tooltip.Default.allowList
-
-// To allow table elements
-myDefaultAllowList.table = []
-
-// To allow td elements and data-bs-option attributes on td elements
-myDefaultAllowList.td = ['data-bs-option']
-
-// You can push your custom regex to validate your attributes.
-// Be careful about your regular expressions being too lax
-const myCustomRegex = /^data-my-app-[\w-]+/
-myDefaultAllowList['*'].push(myCustomRegex)
-```
-
-If you want to bypass our sanitizer because you prefer to use a dedicated library, for example [DOMPurify](https://www.npmjs.com/package/dompurify), you should do the following:
-
-```js
-const yourTooltipEl = document.querySelector('#yourTooltip')
-const tooltip = new bootstrap.Tooltip(yourTooltipEl, {
- sanitizeFn(content) {
- return DOMPurify.sanitize(content)
- }
-})
-```
-
-## Optionally using jQuery
-
-**You don't need jQuery in Bootstrap 5**, but it's still possible to use our components with jQuery. If Bootstrap detects `jQuery` in the `window` object, it'll add all of our components in jQuery's plugin system. This allows you to do the following:
-
-```js
-$('[data-bs-toggle="tooltip"]').tooltip() // to enable tooltips, with default configuration
-
-$('[data-bs-toggle="tooltip"]').tooltip({ boundary: 'clippingParents', customClass: 'myClass' }) // to initialize tooltips with given configuration
-
-$('#myTooltip').tooltip('show') // to trigger `show` method
-```
-
-The same goes for our other components.
-
-### No conflict
-
-Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call `.noConflict` on the plugin you wish to revert the value of.
-
-```js
-const bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
-$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality
-```
-
-Bootstrap does not officially support third-party JavaScript libraries like Prototype or jQuery UI. Despite `.noConflict` and namespaced events, there may be compatibility problems that you need to fix on your own.
-
-### jQuery events
-
-Bootstrap will detect jQuery if `jQuery` is present in the `window` object and there is no `data-bs-no-jquery` attribute set on `<body>`. If jQuery is found, Bootstrap will emit events thanks to jQuery's event system. So if you want to listen to Bootstrap's events, you'll have to use the jQuery methods (`.on`, `.one`) instead of `addEventListener`.
-
-```js
-$('#myTab a').on('shown.bs.tab', () => {
- // do something...
-})
-```
-
-## Disabled JavaScript
-
-Bootstrap's plugins have no special fallback when JavaScript is disabled. If you care about the user experience in this case, use [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript) to explain the situation (and how to re-enable JavaScript) to your users, and/or add your own custom fallbacks.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/parcel.md b/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/parcel.md
deleted file mode 100644
index d28f92384..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/parcel.md
+++ /dev/null
@@ -1,159 +0,0 @@
----
-layout: docs
-title: "Bootstrap & Parcel"
-description: The official guide for how to include and bundle Bootstrap's CSS and JavaScript in your project using Parcel.
-group: getting-started
-toc: true
-thumbnail: guides/bootstrap-parcel@2x.png
----
-
-<img class="mb-4 img-fluid rounded-3" srcset="/docs/{{< param docs_version >}}/assets/img/guides/bootstrap-parcel.png, /docs/{{< param docs_version >}}/assets/img/guides/bootstrap-parcel@2x.png 2x" src="/docs/{{< param docs_version >}}/assets/img/guides/bootstrap-parcel.png" width="2000" height="1000" alt="">
-
-{{< callout >}}
-**Want to skip to the end?** Download the source code and working demo for this guide from the [twbs/examples repository](https://github.com/twbs/examples/tree/main/parcel). You can also [open the example in StackBlitz](https://stackblitz.com/github/twbs/examples/tree/main/parcel?file=index.html) but not run it because Parcel isn't currently supported there.
-{{< /callout >}}
-
-## Setup
-
-We're building a Parcel project with Bootstrap from scratch, so there are some prerequisites and up front steps before we can really get started. This guide requires you to have Node.js installed and some familiarity with the terminal.
-
-1. **Create a project folder and setup npm.** We'll create the `my-project` folder and initialize npm with the `-y` argument to avoid it asking us all the interactive questions.
-
- ```sh
- mkdir my-project && cd my-project
- npm init -y
- ```
-
-2. **Install Parcel.** Unlike our Webpack guide, there's only a single build tool dependency here. Parcel will automatically install language transformers (like Sass) as it detects them. We use `--save-dev` to signal that this dependency is only for development use and not for production.
-
- ```sh
- npm i --save-dev parcel
- ```
-
-3. **Install Bootstrap.** Now we can install Bootstrap. We'll also install Popper since our dropdowns, popovers, and tooltips depend on it for their positioning. If you don't plan on using those components, you can omit Popper here.
-
- ```sh
- npm i --save bootstrap @popperjs/core
- ```
-
-Now that we have all the necessary dependencies installed, we can get to work creating the project files and importing Bootstrap.
-
-## Project structure
-
-We've already created the `my-project` folder and initialized npm. Now we'll also create our `src` folder, stylesheet, and JavaScript file to round out the project structure. Run the following from `my-project`, or manually create the folder and file structure shown below.
-
-```sh
-mkdir {src,src/js,src/scss}
-touch src/index.html src/js/main.js src/scss/styles.scss
-```
-
-When you're done, your complete project should look like this:
-
-```text
-my-project/
-├── src/
-│ ├── js/
-│ │ └── main.js
-│ ├── scss/
-│ │ └── styles.scss
-│ └── index.html
-├── package-lock.json
-└── package.json
-```
-
-At this point, everything is in the right place, but Parcel needs an HTML page and npm script to start our server.
-
-## Configure Parcel
-
-With dependencies installed and our project folder ready for us to start coding, we can now configure Parcel and run our project locally. Parcel itself requires no configuration file by design, but we do need an npm script and an HTML file to start our server.
-
-1. **Fill in the `src/index.html` file.** Parcel needs a page to render, so we use our `index.html` page to set up some basic HTML, including our CSS and JavaScript files.
-
- ```html
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Bootstrap w/ Parcel</title>
- <link rel="stylesheet" href="scss/styles.scss">
- <script type="module" src="js/main.js"></script>
- </head>
- <body>
- <div class="container py-4 px-3 mx-auto">
- <h1>Hello, Bootstrap and Parcel!</h1>
- <button class="btn btn-primary">Primary button</button>
- </div>
- </body>
- </html>
- ```
-
- We're including a little bit of Bootstrap styling here with the `div class="container"` and `<button>` so that we see when Bootstrap's CSS is loaded by Webpack.
-
- Parcel will automatically detect we're using Sass and install the [Sass Parcel plugin](https://parceljs.org/languages/sass/) to support it. However, if you wish, you can also manually run `npm i --save-dev @parcel/transformer-sass`.
-
-2. **Add the Parcel npm scripts.** Open the `package.json` and add the following `start` script to the `scripts` object. We'll use this script to start our Parcel development server and render the HTML file we created after it's compiled into the `dist` directory.
-
- ```json
- {
- // ...
- "scripts": {
- "start": "parcel serve src/index.html --public-url / --dist-dir dist",
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- // ...
- }
- ```
-
-3. **And finally, we can start Parcel.** From the `my-project` folder in your terminal, run that newly added npm script:
-
- ```sh
- npm start
- ```
-
- <img class="img-fluid" src="/docs/{{< param docs_version >}}/assets/img/guides/parcel-dev-server.png" alt="Parcel dev server running">
-
-In the next and final section to this guide, we'll import all of Bootstrap's CSS and JavaScript.
-
-## Import Bootstrap
-
-Importing Bootstrap into Parcel requires two imports, one into our `styles.scss` and one into our `main.js`.
-
-1. **Import Bootstrap's CSS.** Add the following to `src/scss/styles.scss` to import all of Bootstrap's source Sass.
-
- ```scss
- // Import all of Bootstrap's CSS
- @import "~bootstrap/scss/bootstrap";
- ```
-
- *You can also import our stylesheets individually if you want. [Read our Sass import docs]({{< docsref "/customize/sass#importing" >}}) for details.*
-
-2. **Import Bootstrap's JS.** Add the following to `src/js/main.js` to import all of Bootstrap's JS. Popper will be imported automatically through Bootstrap.
-
- <!-- eslint-skip -->
- ```js
- // Import all of Bootstrap's JS
- import * as bootstrap from 'bootstrap'
- ```
-
- You can also import JavaScript plugins individually as needed to keep bundle sizes down:
-
- <!-- eslint-skip -->
- ```js
- import Alert from 'bootstrap/js/dist/alert'
-
- // or, specify which plugins you need:
- import { Tooltip, Toast, Popover } from 'bootstrap'
- ```
-
- *[Read our JavaScript docs]({{< docsref "/getting-started/javascript/" >}}) for more information on how to use Bootstrap's plugins.*
-
-3. **And you're done! 🎉** With Bootstrap's source Sass and JS fully loaded, your local development server should now look like this.
-
- <img class="img-fluid" src="/docs/{{< param docs_version >}}/assets/img/guides/parcel-dev-server-bootstrap.png" alt="Parcel dev server running with Bootstrap">
-
- Now you can start adding any Bootstrap components you want to use. Be sure to [check out the complete Parcel example project](https://github.com/twbs/examples/tree/main/parcel) for how to include additional custom Sass and optimize your build by importing only the parts of Bootstrap's CSS and JS that you need.
-
-{{< markdown >}}
-{{< partial "guide-footer.md" >}}
-{{< /markdown >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/vite.md b/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/vite.md
deleted file mode 100644
index b203eef8a..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/vite.md
+++ /dev/null
@@ -1,198 +0,0 @@
----
-layout: docs
-title: "Bootstrap & Vite"
-description: The official guide for how to include and bundle Bootstrap's CSS and JavaScript in your project using Vite.
-group: getting-started
-toc: true
-thumbnail: guides/bootstrap-vite@2x.png
----
-
-<img class="mb-4 img-fluid rounded-3" srcset="/docs/{{< param docs_version >}}/assets/img/guides/bootstrap-vite.png, /docs/{{< param docs_version >}}/assets/img/guides/bootstrap-vite@2x.png 2x" src="/docs/{{< param docs_version >}}/assets/img/guides/bootstrap-vite.png" width="2000" height="1000" alt="">
-
-{{< callout >}}
-**Want to skip to the end?** Download the source code and working demo for this guide from the [twbs/examples repository](https://github.com/twbs/examples/tree/main/vite). You can also [open the example in StackBlitz](https://stackblitz.com/github/twbs/examples/tree/main/vite?file=index.html) for live editing.
-{{< /callout >}}
-
-## Setup
-
-We're building a Vite project with Bootstrap from scratch, so there are some prerequisites and up front steps before we can really get started. This guide requires you to have Node.js installed and some familiarity with the terminal.
-
-1. **Create a project folder and setup npm.** We'll create the `my-project` folder and initialize npm with the `-y` argument to avoid it asking us all the interactive questions.
-
- ```sh
- mkdir my-project && cd my-project
- npm init -y
- ```
-
-2. **Install Vite.** Unlike our Webpack guide, there’s only a single build tool dependency here. We use `--save-dev` to signal that this dependency is only for development use and not for production.
-
- ```sh
- npm i --save-dev vite
- ```
-
-3. **Install Bootstrap.** Now we can install Bootstrap. We'll also install Popper since our dropdowns, popovers, and tooltips depend on it for their positioning. If you don't plan on using those components, you can omit Popper here.
-
- ```sh
- npm i --save bootstrap @popperjs/core
- ```
-4. **Install additional dependency.** In addition to Vite and Bootstrap, we need another dependency (Sass) to properly import and bundle Bootstrap's CSS.
-
- ```sh
- npm i --save-dev sass
- ```
-
-Now that we have all the necessary dependencies installed and setup, we can get to work creating the project files and importing Bootstrap.
-
-## Project structure
-
-We've already created the `my-project` folder and initialized npm. Now we'll also create our `src` folder, stylesheet, and JavaScript file to round out the project structure. Run the following from `my-project`, or manually create the folder and file structure shown below.
-
-```sh
-mkdir {src,src/js,src/scss}
-touch src/index.html src/js/main.js src/scss/styles.scss vite.config.js
-```
-
-When you're done, your complete project should look like this:
-
-```text
-my-project/
-├── src/
-│ ├── js/
-│ │ └── main.js
-│ └── scss/
-│ | └── styles.scss
-| └── index.html
-├── package-lock.json
-├── package.json
-└── vite.config.js
-```
-
-At this point, everything is in the right place, but Vite won't work because we haven't filled in our `vite.config.js` yet.
-
-## Configure Vite
-
-With dependencies installed and our project folder ready for us to start coding, we can now configure Vite and run our project locally.
-
-1. **Open `vite.config.js` in your editor.** Since it's blank, we'll need to add some boilerplate config to it so we can start our server. This part of the config tells Vite where to look for our project's JavaScript and how the development server should behave (pulling from the `src` folder with hot reload).
-
- <!-- eslint-skip -->
- ```js
- const path = require('path')
-
- export default {
- root: path.resolve(__dirname, 'src'),
- server: {
- port: 8080,
- hot: true
- }
- }
- ```
-
-2. **Next we fill in `src/index.html`.** This is the HTML page Vite will load in the browser to utilize the bundled CSS and JS we'll add to it in later steps.
-
- ```html
- <!doctype html>
- <html lang="en">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Bootstrap w/ Vite</title>
- </head>
- <body>
- <div class="container py-4 px-3 mx-auto">
- <h1>Hello, Bootstrap and Vite!</h1>
- <button class="btn btn-primary">Primary button</button>
- </div>
- <script type="module" src="./js/main.js"></script>
- </body>
- </html>
- ```
-
- We're including a little bit of Bootstrap styling here with the `div class="container"` and `<button>` so that we see when Bootstrap's CSS is loaded by Vite.
-
-3. **Now we need an npm script to run Vite.** Open `package.json` and add the `start` script shown below (you should already have the test script). We'll use this script to start our local Vite dev server.
-
- ```json
- {
- // ...
- "scripts": {
- "start": "vite",
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- // ...
- }
- ```
-
-4. **And finally, we can start Vite.** From the `my-project` folder in your terminal, run that newly added npm script:
-
- ```sh
- npm start
- ```
-
- <img class="img-fluid" src="/docs/{{< param docs_version >}}/assets/img/guides/vite-dev-server.png" alt="Vite dev server running">
-
-In the next and final section to this guide, we’ll import all of Bootstrap’s CSS and JavaScript.
-
-## Import Bootstrap
-
-1. **Set up Bootstrap's Sass import in `vite.config.js`.** Your configuration file is now complete and should match the snippet below. The only new part here is the `resolve` section—we use this to add an alias to our source files inside `node_modules` to keep imports as simple as possible.
-
- <!-- eslint-skip -->
- ```js
- const path = require('path')
-
- export default {
- root: path.resolve(__dirname, 'src'),
- resolve: {
- alias: {
- '~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap'),
- }
- },
- server: {
- port: 8080,
- hot: true
- }
- }
- ```
-
-2. **Now, let's import Bootstrap's CSS.** Add the following to `src/scss/styles.scss` to import all of Bootstrap's source Sass.
-
- ```scss
- // Import all of Bootstrap's CSS
- @import "~bootstrap/scss/bootstrap";
- ```
-
- *You can also import our stylesheets individually if you want. [Read our Sass import docs]({{< docsref "/customize/sass#importing" >}}) for details.*
-
-3. **Next we load the CSS and import Bootstrap's JavaScript.** Add the following to `src/js/main.js` to load the CSS and import all of Bootstrap's JS. Popper will be imported automatically through Bootstrap.
-
- <!-- eslint-skip -->
- ```js
- // Import our custom CSS
- import '../scss/styles.scss'
-
- // Import all of Bootstrap's JS
- import * as bootstrap from 'bootstrap'
- ```
-
- You can also import JavaScript plugins individually as needed to keep bundle sizes down:
-
- <!-- eslint-skip -->
- ```js
- import Alert from 'bootstrap/js/dist/alert';
-
- // or, specify which plugins you need:
- import { Tooltip, Toast, Popover } from 'bootstrap';
- ```
-
- *[Read our JavaScript docs]({{< docsref "/getting-started/javascript/" >}}) for more information on how to use Bootstrap's plugins.*
-
-4. **And you're done! 🎉** With Bootstrap's source Sass and JS fully loaded, your local development server should now look like this.
-
- <img class="img-fluid" src="/docs/{{< param docs_version >}}/assets/img/guides/vite-dev-server-bootstrap.png" alt="Vite dev server running with Bootstrap">
-
- Now you can start adding any Bootstrap components you want to use. Be sure to [check out the complete Vite example project](https://github.com/twbs/examples/tree/main/vite) for how to include additional custom Sass and optimize your build by importing only the parts of Bootstrap's CSS and JS that you need.
-
-{{< markdown >}}
-{{< partial "guide-footer.md" >}}
-{{< /markdown >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/clearfix.md b/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/clearfix.md
deleted file mode 100644
index c888610b7..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/clearfix.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-layout: docs
-title: Clearfix
-description: Quickly and easily clear floated content within a container by adding a clearfix utility.
-group: helpers
-aliases: "/docs/5.2/helpers/"
----
-
-Easily clear `float`s by adding `.clearfix` **to the parent element**. Can also be used as a mixin.
-
-Use in HTML:
-
-```html
-<div class="clearfix">...</div>
-```
-
-The mixin source code:
-
-{{< scss-docs name="clearfix" file="scss/mixins/_clearfix.scss" >}}
-
-Use the mixin in SCSS:
-
-```scss
-.element {
- @include clearfix;
-}
-```
-
-The following example shows how the clearfix can be used. Without the clearfix the wrapping div would not span around the buttons which would cause a broken layout.
-
-{{< example >}}
-<div class="bg-info clearfix">
- <button type="button" class="btn btn-secondary float-start">Example Button floated left</button>
- <button type="button" class="btn btn-secondary float-end">Example Button floated right</button>
-</div>
-{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/color-background.md b/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/color-background.md
deleted file mode 100644
index c4174845c..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/color-background.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-layout: docs
-title: Color & background
-description: Set a background color with contrasting foreground color.
-group: helpers
-toc: true
-added: "5.2"
----
-
-## Overview
-
-{{< added-in "5.2.0" >}}
-
-Color and background helpers combine the power of our [`.text-*` utilities]({{< docsref "/utilities/colors" >}}) and [`.bg-*` utilities]({{< docsref "/utilities/background" >}}) in one class. Using our Sass `color-contrast()` function, we automatically determine a contrasting `color` for a particular `background-color`.
-
-{{< callout warning >}}
-**Heads up!** There's currently no support for a CSS-native `color-contrast` function, so we use our own via Sass. This means that customizing our theme colors via CSS variables may cause color contrast issues with these utilities.
-{{< /callout >}}
-
-{{< example >}}
-{{< text-bg.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<div class="text-bg-{{ .name }} p-3">{{ .name | title }} with contrasting color</div>
-{{- end -}}
-{{< /text-bg.inline >}}
-{{< /example >}}
-
-## With components
-
-Use them in place of combined `.text-*` and `.bg-*` classes, like on [badges]({{< docsref "/components/badge#background-colors" >}}):
-
-{{< example >}}
-<span class="badge text-bg-primary">Primary</span>
-<span class="badge text-bg-info">Info</span>
-{{< /example >}}
-
-Or on [cards]({{< docsref "/components/card#background-and-color" >}}):
-
-{{< example >}}
-<div class="card text-bg-primary mb-3" style="max-width: 18rem;">
- <div class="card-header">Header</div>
- <div class="card-body">
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- </div>
-</div>
-<div class="card text-bg-info mb-3" style="max-width: 18rem;">
- <div class="card-header">Header</div>
- <div class="card-body">
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- </div>
-</div>
-{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/stacks.md b/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/stacks.md
deleted file mode 100644
index e1960c573..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/stacks.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-layout: docs
-title: Stacks
-description: Shorthand helpers that build on top of our flexbox utilities to make component layout faster and easier than ever.
-group: helpers
-toc: true
-added: "5.1"
----
-
-Stacks offer a shortcut for applying a number of flexbox properties to quickly and easily create layouts in Bootstrap. All credit for the concept and implementation goes to the open source [Pylon project](https://almonk.github.io/pylon/).
-
-{{< callout warning >}}
-Heads up! Support for gap utilities with flexbox was recently added to Safari, so consider verifying your intended browser support. Grid layout should have no issues. [Read more](https://caniuse.com/flexbox-gap).
-{{< /callout >}}
-
-## Vertical
-
-Use `.vstack` to create vertical layouts. Stacked items are full-width by default. Use `.gap-*` utilities to add space between items.
-
-{{< example >}}
-<div class="vstack gap-3">
- <div class="bg-light border">First item</div>
- <div class="bg-light border">Second item</div>
- <div class="bg-light border">Third item</div>
-</div>
-{{< /example >}}
-
-## Horizontal
-
-Use `.hstack` for horizontal layouts. Stacked items are vertically centered by default and only take up their necessary width. Use `.gap-*` utilities to add space between items.
-
-{{< example >}}
-<div class="hstack gap-3">
- <div class="bg-light border">First item</div>
- <div class="bg-light border">Second item</div>
- <div class="bg-light border">Third item</div>
-</div>
-{{< /example >}}
-
-Using horizontal margin utilities like `.ms-auto` as spacers:
-
-{{< example >}}
-<div class="hstack gap-3">
- <div class="bg-light border">First item</div>
- <div class="bg-light border ms-auto">Second item</div>
- <div class="bg-light border">Third item</div>
-</div>
-{{< /example >}}
-
-And with [vertical rules]({{< docsref "/helpers/vertical-rule" >}}):
-
-{{< example >}}
-<div class="hstack gap-3">
- <div class="bg-light border">First item</div>
- <div class="bg-light border ms-auto">Second item</div>
- <div class="vr"></div>
- <div class="bg-light border">Third item</div>
-</div>
-{{< /example >}}
-
-## Examples
-
-Use `.vstack` to stack buttons and other elements:
-
-{{< example >}}
-<div class="vstack gap-2 col-md-5 mx-auto">
- <button type="button" class="btn btn-secondary">Save changes</button>
- <button type="button" class="btn btn-outline-secondary">Cancel</button>
-</div>
-{{< /example >}}
-
-Create an inline form with `.hstack`:
-
-{{< example >}}
-<div class="hstack gap-3">
- <input class="form-control me-auto" type="text" placeholder="Add your item here..." aria-label="Add your item here...">
- <button type="button" class="btn btn-secondary">Submit</button>
- <div class="vr"></div>
- <button type="button" class="btn btn-outline-danger">Reset</button>
-</div>
-{{< /example >}}
-
-## Sass
-
-{{< scss-docs name="stacks" file="scss/helpers/_stacks.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/stretched-link.md b/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/stretched-link.md
deleted file mode 100644
index 93bffeb31..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/stretched-link.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-layout: docs
-title: Stretched link
-description: Make any HTML element or Bootstrap component clickable by "stretching" a nested link via CSS.
-group: helpers
----
-
-Add `.stretched-link` to a link to make its [containing block](https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block) clickable via a `::after` pseudo element. In most cases, this means that an element with `position: relative;` that contains a link with the `.stretched-link` class is clickable. Please note given [how CSS `position` works](https://www.w3.org/TR/CSS21/visuren.html#propdef-position), `.stretched-link` cannot be mixed with most table elements.
-
-Cards have `position: relative` by default in Bootstrap, so in this case you can safely add the `.stretched-link` class to a link in the card without any other HTML changes.
-
-Multiple links and tap targets are not recommended with stretched links. However, some `position` and `z-index` styles can help should this be required.
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- {{< placeholder width="100%" height="180" class="card-img-top" text="false" title="Card image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card with stretched link</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- <a href="#" class="btn btn-primary stretched-link">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-Most custom components do not have `position: relative` by default, so we need to add the `.position-relative` here to prevent the link from stretching outside the parent element.
-
-{{< example >}}
-<div class="d-flex position-relative">
- {{< placeholder width="144" height="144" class="flex-shrink-0 me-3" text="false" title="Generic placeholder image" >}}
- <div>
- <h5 class="mt-0">Custom component with stretched link</h5>
- <p>This is some placeholder content for the custom component. It is intended to mimic what some real-world content would look like, and we're using it here to give the component a bit of body and size.</p>
- <a href="#" class="stretched-link">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-{{< example >}}
-<div class="row g-0 bg-light position-relative">
- <div class="col-md-6 mb-md-0 p-md-4">
- {{< placeholder width="100%" height="200" class="w-100" text="false" title="Generic placeholder image" >}}
- </div>
- <div class="col-md-6 p-4 ps-md-0">
- <h5 class="mt-0">Columns with stretched link</h5>
- <p>Another instance of placeholder content for this other custom component. It is intended to mimic what some real-world content would look like, and we're using it here to give the component a bit of body and size.</p>
- <a href="#" class="stretched-link">Go somewhere</a>
- </div>
-</div>
-{{< /example >}}
-
-## Identifying the containing block
-
-If the stretched link doesn't seem to work, the [containing block](https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#Identifying_the_containing_block) will probably be the cause. The following CSS properties will make an element the containing block:
-
-- A `position` value other than `static`
-- A `transform` or `perspective` value other than `none`
-- A `will-change` value of `transform` or `perspective`
-- A `filter` value other than `none` or a `will-change` value of `filter` (only works on Firefox)
-
-{{< example >}}
-<div class="card" style="width: 18rem;">
- {{< placeholder width="100%" height="180" class="card-img-top" text="false" title="Card image cap" >}}
- <div class="card-body">
- <h5 class="card-title">Card with stretched links</h5>
- <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
- <p class="card-text">
- <a href="#" class="stretched-link text-danger" style="position: relative;">Stretched link will not work here, because <code>position: relative</code> is added to the link</a>
- </p>
- <p class="card-text bg-light" style="transform: rotate(0);">
- This <a href="#" class="text-warning stretched-link">stretched link</a> will only be spread over the <code>p</code>-tag, because a transform is applied to it.
- </p>
- </div>
-</div>
-{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/vertical-rule.md b/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/vertical-rule.md
deleted file mode 100644
index b734f61d4..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/vertical-rule.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-layout: docs
-title: Vertical rule
-description: Use the custom vertical rule helper to create vertical dividers like the `<hr>` element.
-group: helpers
-toc: true
-added: "5.1"
----
-
-## How it works
-
-Vertical rules are inspired by the `<hr>` element, allowing you to create vertical dividers in common layouts. They're styled just like `<hr>` elements:
-
-- They're `1px` wide
-- They have `min-height` of `1em`
-- Their color is set via `currentColor` and `opacity`
-
-Customize them with additional styles as needed.
-
-## Example
-
-{{< example >}}
-<div class="vr"></div>
-{{< /example >}}
-
-Vertical rules scale their height in flex layouts:
-
-{{< example >}}
-<div class="d-flex" style="height: 200px;">
- <div class="vr"></div>
-</div>
-{{< /example >}}
-
-## With stacks
-
-They can also be used in [stacks]({{< docsref "/helpers/stacks" >}}):
-
-{{< example >}}
-<div class="hstack gap-3">
- <div class="bg-light border">First item</div>
- <div class="bg-light border ms-auto">Second item</div>
- <div class="vr"></div>
- <div class="bg-light border">Third item</div>
-</div>
-{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/visually-hidden.md b/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/visually-hidden.md
deleted file mode 100644
index 112406543..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/visually-hidden.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-layout: docs
-title: Visually hidden
-description: Use these helpers to visually hide elements but keep them accessible to assistive technologies.
-group: helpers
-aliases: "/docs/5.2/helpers/screen-readers/"
----
-
-Visually hide an element while still allowing it to be exposed to assistive technologies (such as screen readers) with `.visually-hidden`. Use `.visually-hidden-focusable` to visually hide an element by default, but to display it when it's focused (e.g. by a keyboard-only user). `.visually-hidden-focusable` can also be applied to a container–thanks to `:focus-within`, the container will be displayed when any child element of the container receives focus.
-
-{{< example >}}
-<h2 class="visually-hidden">Title for screen readers</h2>
-<a class="visually-hidden-focusable" href="#content">Skip to main content</a>
-<div class="visually-hidden-focusable">A container with a <a href="#">focusable element</a>.</div>
-{{< /example >}}
-
-Both `visually-hidden` and `visually-hidden-focusable` can also be used as mixins.
-
-```scss
-// Usage as a mixin
-
-.visually-hidden-title {
- @include visually-hidden;
-}
-
-.skip-navigation {
- @include visually-hidden-focusable;
-}
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/breakpoints.md b/vendor/twbs/bootstrap/site/content/docs/5.2/layout/breakpoints.md
deleted file mode 100644
index e773b8f9a..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/breakpoints.md
+++ /dev/null
@@ -1,174 +0,0 @@
----
-layout: docs
-title: Breakpoints
-description: Breakpoints are customizable widths that determine how your responsive layout behaves across device or viewport sizes in Bootstrap.
-group: layout
-aliases: "/docs/5.2/layout/"
-toc: true
----
-
-## Core concepts
-
-- **Breakpoints are the building blocks of responsive design.** Use them to control when your layout can be adapted at a particular viewport or device size.
-
-- **Use media queries to architect your CSS by breakpoint.** Media queries are a feature of CSS that allow you to conditionally apply styles based on a set of browser and operating system parameters. We most commonly use `min-width` in our media queries.
-
-- **Mobile first, responsive design is the goal.** Bootstrap's CSS aims to apply the bare minimum of styles to make a layout work at the smallest breakpoint, and then layers on styles to adjust that design for larger devices. This optimizes your CSS, improves rendering time, and provides a great experience for your visitors.
-
-## Available breakpoints
-
-Bootstrap includes six default breakpoints, sometimes referred to as _grid tiers_, for building responsively. These breakpoints can be customized if you're using our source Sass files.
-
-{{< bs-table "table" >}}
-| Breakpoint | Class infix | Dimensions |
-| --- | --- | --- |
-| Extra small | <em>None</em> |&lt;576px |
-| Small | `sm` | &ge;576px |
-| Medium | `md` | &ge;768px |
-| Large | `lg` | &ge;992px |
-| Extra large | `xl` | &ge;1200px |
-| Extra extra large | `xxl` | &ge;1400px |
-{{< /bs-table >}}
-
-
-Each breakpoint was chosen to comfortably hold containers whose widths are multiples of 12. Breakpoints are also representative of a subset of common device sizes and viewport dimensions—they don't specifically target every use case or device. Instead, the ranges provide a strong and consistent foundation to build on for nearly any device.
-
-These breakpoints are customizable via Sass—you'll find them in a Sass map in our `_variables.scss` stylesheet.
-
-{{< scss-docs name="grid-breakpoints" file="scss/_variables.scss" >}}
-
-For more information and examples on how to modify our Sass maps and variables, please refer to [the Sass section of the Grid documentation]({{< docsref "/layout/grid#sass" >}}).
-
-## Media queries
-
-Since Bootstrap is developed to be mobile first, we use a handful of [media queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries) to create sensible breakpoints for our layouts and interfaces. These breakpoints are mostly based on minimum viewport widths and allow us to scale up elements as the viewport changes.
-
-### Min-width
-
-Bootstrap primarily uses the following media query ranges—or breakpoints—in our source Sass files for our layout, grid system, and components.
-
-```scss
-// Source mixins
-
-// No media query necessary for xs breakpoint as it's effectively `@media (min-width: 0) { ... }`
-@include media-breakpoint-up(sm) { ... }
-@include media-breakpoint-up(md) { ... }
-@include media-breakpoint-up(lg) { ... }
-@include media-breakpoint-up(xl) { ... }
-@include media-breakpoint-up(xxl) { ... }
-
-// Usage
-
-// Example: Hide starting at `min-width: 0`, and then show at the `sm` breakpoint
-.custom-class {
- display: none;
-}
-@include media-breakpoint-up(sm) {
- .custom-class {
- display: block;
- }
-}
-```
-
-These Sass mixins translate in our compiled CSS using the values declared in our Sass variables. For example:
-
-```scss
-// X-Small devices (portrait phones, less than 576px)
-// No media query for `xs` since this is the default in Bootstrap
-
-// Small devices (landscape phones, 576px and up)
-@media (min-width: 576px) { ... }
-
-// Medium devices (tablets, 768px and up)
-@media (min-width: 768px) { ... }
-
-// Large devices (desktops, 992px and up)
-@media (min-width: 992px) { ... }
-
-// X-Large devices (large desktops, 1200px and up)
-@media (min-width: 1200px) { ... }
-
-// XX-Large devices (larger desktops, 1400px and up)
-@media (min-width: 1400px) { ... }
-```
-
-### Max-width
-
-We occasionally use media queries that go in the other direction (the given screen size *or smaller*):
-
-```scss
-// No media query necessary for xs breakpoint as it's effectively `@media (max-width: 0) { ... }`
-@include media-breakpoint-down(sm) { ... }
-@include media-breakpoint-down(md) { ... }
-@include media-breakpoint-down(lg) { ... }
-@include media-breakpoint-down(xl) { ... }
-@include media-breakpoint-down(xxl) { ... }
-
-// Example: Style from medium breakpoint and down
-@include media-breakpoint-down(md) {
- .custom-class {
- display: block;
- }
-}
-```
-
-These mixins take those declared breakpoints, subtract `.02px` from them, and use them as our `max-width` values. For example:
-
-```scss
-// `xs` returns only a ruleset and no media query
-// ... { ... }
-
-// `sm` applies to x-small devices (portrait phones, less than 576px)
-@media (max-width: 575.98px) { ... }
-
-// `md` applies to small devices (landscape phones, less than 768px)
-@media (max-width: 767.98px) { ... }
-
-// `lg` applies to medium devices (tablets, less than 992px)
-@media (max-width: 991.98px) { ... }
-
-// `xl` applies to large devices (desktops, less than 1200px)
-@media (max-width: 1199.98px) { ... }
-
-// `xxl` applies to x-large devices (large desktops, less than 1400px)
-@media (max-width: 1399.98px) { ... }
-```
-
-{{< callout warning >}}
-{{< partial "callout-info-mediaqueries-breakpoints.md" >}}
-{{< /callout >}}
-
-### Single breakpoint
-
-There are also media queries and mixins for targeting a single segment of screen sizes using the minimum and maximum breakpoint widths.
-
-```scss
-@include media-breakpoint-only(xs) { ... }
-@include media-breakpoint-only(sm) { ... }
-@include media-breakpoint-only(md) { ... }
-@include media-breakpoint-only(lg) { ... }
-@include media-breakpoint-only(xl) { ... }
-@include media-breakpoint-only(xxl) { ... }
-```
-
-For example the `@include media-breakpoint-only(md) { ... }` will result in :
-
-```scss
-@media (min-width: 768px) and (max-width: 991.98px) { ... }
-```
-
-### Between breakpoints
-
-Similarly, media queries may span multiple breakpoint widths:
-
-```scss
-@include media-breakpoint-between(md, xl) { ... }
-```
-
-Which results in:
-
-```scss
-// Example
-// Apply styles starting from medium devices and up to extra large devices
-@media (min-width: 768px) and (max-width: 1199.98px) { ... }
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/columns.md b/vendor/twbs/bootstrap/site/content/docs/5.2/layout/columns.md
deleted file mode 100644
index e2dbd3f17..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/columns.md
+++ /dev/null
@@ -1,317 +0,0 @@
----
-layout: docs
-title: Columns
-description: Learn how to modify columns with a handful of options for alignment, ordering, and offsetting thanks to our flexbox grid system. Plus, see how to use column classes to manage widths of non-grid elements.
-group: layout
-toc: true
----
-
-{{< callout info >}}
-**Heads up!** Be sure to [read the Grid page]({{< docsref "/layout/grid" >}}) first before diving into how to modify and customize your grid columns.
-{{< /callout >}}
-
-## How they work
-
-- **Columns build on the grid's flexbox architecture.** Flexbox means we have options for changing individual columns and [modifying groups of columns at the row level]({{< docsref "/layout/grid#row-columns" >}}). You choose how columns grow, shrink, or otherwise change.
-
-- **When building grid layouts, all content goes in columns.** The hierarchy of Bootstrap's grid goes from [container]({{< docsref "/layout/containers" >}}) to row to column to your content. On rare occasions, you may combine content and column, but be aware there can be unintended consequences.
-
-- **Bootstrap includes predefined classes for creating fast, responsive layouts.** With [six breakpoints]({{< docsref "/layout/breakpoints" >}}) and a dozen columns at each grid tier, we have dozens of classes already built for you to create your desired layouts. This can be disabled via Sass if you wish.
-
-## Alignment
-
-Use flexbox alignment utilities to vertically and horizontally align columns.
-
-### Vertical alignment
-
-{{< example class="bd-example-row bd-example-row-flex-cols" >}}
-<div class="container text-center">
- <div class="row align-items-start">
- <div class="col">
- One of three columns
- </div>
- <div class="col">
- One of three columns
- </div>
- <div class="col">
- One of three columns
- </div>
- </div>
- <div class="row align-items-center">
- <div class="col">
- One of three columns
- </div>
- <div class="col">
- One of three columns
- </div>
- <div class="col">
- One of three columns
- </div>
- </div>
- <div class="row align-items-end">
- <div class="col">
- One of three columns
- </div>
- <div class="col">
- One of three columns
- </div>
- <div class="col">
- One of three columns
- </div>
- </div>
-</div>
-{{< /example >}}
-
-{{< example class="bd-example-row bd-example-row-flex-cols" >}}
-<div class="container text-center">
- <div class="row">
- <div class="col align-self-start">
- One of three columns
- </div>
- <div class="col align-self-center">
- One of three columns
- </div>
- <div class="col align-self-end">
- One of three columns
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Horizontal alignment
-
-{{< example class="bd-example-row" >}}
-<div class="container text-center">
- <div class="row justify-content-start">
- <div class="col-4">
- One of two columns
- </div>
- <div class="col-4">
- One of two columns
- </div>
- </div>
- <div class="row justify-content-center">
- <div class="col-4">
- One of two columns
- </div>
- <div class="col-4">
- One of two columns
- </div>
- </div>
- <div class="row justify-content-end">
- <div class="col-4">
- One of two columns
- </div>
- <div class="col-4">
- One of two columns
- </div>
- </div>
- <div class="row justify-content-around">
- <div class="col-4">
- One of two columns
- </div>
- <div class="col-4">
- One of two columns
- </div>
- </div>
- <div class="row justify-content-between">
- <div class="col-4">
- One of two columns
- </div>
- <div class="col-4">
- One of two columns
- </div>
- </div>
- <div class="row justify-content-evenly">
- <div class="col-4">
- One of two columns
- </div>
- <div class="col-4">
- One of two columns
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Column wrapping
-
-If more than 12 columns are placed within a single row, each group of extra columns will, as one unit, wrap onto a new line.
-
-{{< example class="bd-example-row" >}}
-<div class="container">
- <div class="row">
- <div class="col-9">.col-9</div>
- <div class="col-4">.col-4<br>Since 9 + 4 = 13 &gt; 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.</div>
- <div class="col-6">.col-6<br>Subsequent columns continue along the new line.</div>
- </div>
-</div>
-{{< /example >}}
-
-### Column breaks
-
-Breaking columns to a new line in flexbox requires a small hack: add an element with `width: 100%` wherever you want to wrap your columns to a new line. Normally this is accomplished with multiple `.row`s, but not every implementation method can account for this.
-
-{{< example class="bd-example-row" >}}
-<div class="container text-center">
- <div class="row">
- <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
- <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
-
- <!-- Force next columns to break to new line -->
- <div class="w-100"></div>
-
- <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
- <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
- </div>
-</div>
-{{< /example >}}
-
-You may also apply this break at specific breakpoints with our [responsive display utilities]({{< docsref "/utilities/display" >}}).
-
-{{< example class="bd-example-row" >}}
-<div class="container text-center">
- <div class="row">
- <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
- <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
-
- <!-- Force next columns to break to new line at md breakpoint and up -->
- <div class="w-100 d-none d-md-block"></div>
-
- <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
- <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
- </div>
-</div>
-{{< /example >}}
-
-## Reordering
-
-### Order classes
-
-Use `.order-` classes for controlling the **visual order** of your content. These classes are responsive, so you can set the `order` by breakpoint (e.g., `.order-1.order-md-2`). Includes support for `1` through `5` across all six grid tiers.
-
-{{< example class="bd-example-row" >}}
-<div class="container text-center">
- <div class="row">
- <div class="col">
- First in DOM, no order applied
- </div>
- <div class="col order-5">
- Second in DOM, with a larger order
- </div>
- <div class="col order-1">
- Third in DOM, with an order of 1
- </div>
- </div>
-</div>
-{{< /example >}}
-
-There are also responsive `.order-first` and `.order-last` classes that change the `order` of an element by applying `order: -1` and `order: 6`, respectively. These classes can also be intermixed with the numbered `.order-*` classes as needed.
-
-{{< example class="bd-example-row" >}}
-<div class="container text-center">
- <div class="row">
- <div class="col order-last">
- First in DOM, ordered last
- </div>
- <div class="col">
- Second in DOM, unordered
- </div>
- <div class="col order-first">
- Third in DOM, ordered first
- </div>
- </div>
-</div>
-{{< /example >}}
-
-### Offsetting columns
-
-You can offset grid columns in two ways: our responsive `.offset-` grid classes and our [margin utilities]({{< docsref "/utilities/spacing" >}}). Grid classes are sized to match columns while margins are more useful for quick layouts where the width of the offset is variable.
-
-#### Offset classes
-
-Move columns to the right using `.offset-md-*` classes. These classes increase the left margin of a column by `*` columns. For example, `.offset-md-4` moves `.col-md-4` over four columns.
-
-{{< example class="bd-example-row" >}}
-<div class="container text-center">
- <div class="row">
- <div class="col-md-4">.col-md-4</div>
- <div class="col-md-4 offset-md-4">.col-md-4 .offset-md-4</div>
- </div>
- <div class="row">
- <div class="col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
- <div class="col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
- </div>
- <div class="row">
- <div class="col-md-6 offset-md-3">.col-md-6 .offset-md-3</div>
- </div>
-</div>
-{{< /example >}}
-
-In addition to column clearing at responsive breakpoints, you may need to reset offsets. See this in action in [the grid example]({{< docsref "/examples/grid" >}}).
-
-{{< example class="bd-example-row" >}}
-<div class="container text-center">
- <div class="row">
- <div class="col-sm-5 col-md-6">.col-sm-5 .col-md-6</div>
- <div class="col-sm-5 offset-sm-2 col-md-6 offset-md-0">.col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0</div>
- </div>
- <div class="row">
- <div class="col-sm-6 col-md-5 col-lg-6">.col-sm-6 .col-md-5 .col-lg-6</div>
- <div class="col-sm-6 col-md-5 offset-md-2 col-lg-6 offset-lg-0">.col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0</div>
- </div>
-</div>
-{{< /example >}}
-
-#### Margin utilities
-
-With the move to flexbox in v4, you can use margin utilities like `.me-auto` to force sibling columns away from one another.
-
-{{< example class="bd-example-row" >}}
-<div class="container text-center">
- <div class="row">
- <div class="col-md-4">.col-md-4</div>
- <div class="col-md-4 ms-auto">.col-md-4 .ms-auto</div>
- </div>
- <div class="row">
- <div class="col-md-3 ms-md-auto">.col-md-3 .ms-md-auto</div>
- <div class="col-md-3 ms-md-auto">.col-md-3 .ms-md-auto</div>
- </div>
- <div class="row">
- <div class="col-auto me-auto">.col-auto .me-auto</div>
- <div class="col-auto">.col-auto</div>
- </div>
-</div>
-{{< /example >}}
-
-## Standalone column classes
-
-The `.col-*` classes can also be used outside a `.row` to give an element a specific width. Whenever column classes are used as non-direct children of a row, the paddings are omitted.
-
-{{< example >}}
-<div class="col-3 bg-light p-3 border">
- .col-3: width of 25%
-</div>
-<div class="col-sm-9 bg-light p-3 border">
- .col-sm-9: width of 75% above sm breakpoint
-</div>
-{{< /example >}}
-
-The classes can be used together with utilities to create responsive floated images. Make sure to wrap the content in a [`.clearfix`]({{< docsref "/helpers/clearfix" >}}) wrapper to clear the float if the text is shorter.
-
-{{< example >}}
-<div class="clearfix">
- {{< placeholder width="100%" height="210" class="col-md-6 float-md-end mb-3 ms-md-3" text="Responsive floated image" >}}
-
- <p>
- A paragraph of placeholder text. We're using it here to show the use of the clearfix class. We're adding quite a few meaningless phrases here to demonstrate how the columns interact here with the floated image.
- </p>
-
- <p>
- As you can see the paragraphs gracefully wrap around the floated image. Now imagine how this would look with some actual content in here, rather than just this boring placeholder text that goes on and on, but actually conveys no tangible information at. It simply takes up space and should not really be read.
- </p>
-
- <p>
- And yet, here you are, still persevering in reading this placeholder text, hoping for some more insights, or some hidden easter egg of content. A joke, perhaps. Unfortunately, there's none of that here.
- </p>
-</div>
-{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/gutters.md b/vendor/twbs/bootstrap/site/content/docs/5.2/layout/gutters.md
deleted file mode 100644
index 586209451..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/gutters.md
+++ /dev/null
@@ -1,165 +0,0 @@
----
-layout: docs
-title: Gutters
-description: Gutters are the padding between your columns, used to responsively space and align content in the Bootstrap grid system.
-group: layout
-toc: true
----
-
-## How they work
-
-- **Gutters are the gaps between column content, created by horizontal `padding`.** We set `padding-right` and `padding-left` on each column, and use negative `margin` to offset that at the start and end of each row to align content.
-
-- **Gutters start at `1.5rem` (`24px`) wide.** This allows us to match our grid to the [padding and margin spacers]({{< docsref "/utilities/spacing" >}}) scale.
-
-- **Gutters can be responsively adjusted.** Use breakpoint-specific gutter classes to modify horizontal gutters, vertical gutters, and all gutters.
-
-## Horizontal gutters
-
-`.gx-*` classes can be used to control the horizontal gutter widths. The `.container` or `.container-fluid` parent may need to be adjusted if larger gutters are used too to avoid unwanted overflow, using a matching padding utility. For example, in the following example we've increased the padding with `.px-4`:
-
-{{< example >}}
-<div class="container px-4 text-center">
- <div class="row gx-5">
- <div class="col">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-An alternative solution is to add a wrapper around the `.row` with the `.overflow-hidden` class:
-
-{{< example >}}
-<div class="container overflow-hidden text-center">
- <div class="row gx-5">
- <div class="col">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Vertical gutters
-
-`.gy-*` classes can be used to control the vertical gutter widths within a row when columns wrap to new lines. Like the horizontal gutters, the vertical gutters can cause some overflow below the `.row` at the end of a page. If this occurs, you add a wrapper around `.row` with the `.overflow-hidden` class:
-
-{{< example >}}
-<div class="container overflow-hidden text-center">
- <div class="row gy-5">
- <div class="col-6">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- <div class="col-6">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- <div class="col-6">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- <div class="col-6">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Horizontal & vertical gutters
-
-`.g-*` classes can be used to control the horizontal gutter widths, for the following example we use a smaller gutter width, so there won't be a need to add the `.overflow-hidden` wrapper class.
-
-{{< example >}}
-<div class="container text-center">
- <div class="row g-2">
- <div class="col-6">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- <div class="col-6">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- <div class="col-6">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- <div class="col-6">
- <div class="p-3 border bg-light">Custom column padding</div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## Row columns gutters
-
-Gutter classes can also be added to [row columns]({{< docsref "/layout/grid#row-columns" >}}). In the following example, we use responsive row columns and responsive gutter classes.
-
-{{< example >}}
-<div class="container text-center">
- <div class="row row-cols-2 row-cols-lg-5 g-2 g-lg-3">
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- <div class="col">
- <div class="p-3 border bg-light">Row column</div>
- </div>
- </div>
-</div>
-{{< /example >}}
-
-## No gutters
-
-The gutters between columns in our predefined grid classes can be removed with `.g-0`. This removes the negative `margin`s from `.row` and the horizontal `padding` from all immediate children columns.
-
-**Need an edge-to-edge design?** Drop the parent `.container` or `.container-fluid` and add `.mx-0` to the `.row` to prevent overflow.
-
-In practice, here's how it looks. Note you can continue to use this with all other predefined grid classes (including column widths, responsive tiers, reorders, and more).
-
-{{< example class="bd-example-row" >}}
-<div class="row g-0 text-center">
- <div class="col-sm-6 col-md-8">.col-sm-6 .col-md-8</div>
- <div class="col-6 col-md-4">.col-6 .col-md-4</div>
-</div>
-{{< /example >}}
-
-## Change the gutters
-
-Classes are built from the `$gutters` Sass map which is inherited from the `$spacers` Sass map.
-
-```scss
-$grid-gutter-width: 1.5rem;
-$gutters: (
- 0: 0,
- 1: $spacer * .25,
- 2: $spacer * .5,
- 3: $spacer,
- 4: $spacer * 1.5,
- 5: $spacer * 3,
-);
-```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/migration.md b/vendor/twbs/bootstrap/site/content/docs/5.2/migration.md
deleted file mode 100644
index dbeb8f60c..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/migration.md
+++ /dev/null
@@ -1,504 +0,0 @@
----
-layout: docs
-title: Migrating to v5
-description: Track and review changes to the Bootstrap source files, documentation, and components to help you migrate from v4 to v5.
-group: migration
-aliases: "/migration/"
-toc: true
----
-
-## v5.2.0
-
-<hr class="mb-4">
-
-### Refreshed design
-
-Bootstrap v5.2.0 features a subtle design update for a handful of components and properties across the project, **most notably through refined `border-radius` values on buttons and form controls**. Our documentation also has been updated with a new homepage, simpler docs layout that no longer collapses sections of the sidebar, and more prominent examples of [Bootstrap Icons](https://icons.getbootstrap.com).
-
-### More CSS variables
-
-**We've updated all our components to use CSS variables.** While Sass still underpins everything, each component has been updated to include CSS variables on the component base classes (e.g., `.btn`), allowing for more real-time customization of Bootstrap. In subsequent releases, we'll continue to expand our use of CSS variables into our layout, forms, helpers, and utilities. Read more about CSS variables in each component on their respective documentation pages.
-
-Our CSS variable usage will be somewhat incomplete until Bootstrap 6. While we'd love to fully implement these across the board, they do run the risk of causing breaking changes. For example, setting `$alert-border-width: var(--bs-border-width)` in our source code breaks potential Sass in your own code if you were doing `$alert-border-width * 2` for some reason.
-
-As such, wherever possible, we will continue to push towards more CSS variables, but please recognize our implementation may be slightly limited in v5.
-
-### New `_maps.scss`
-
-**Bootstrap v5.2.0 introduced a new Sass file with `_maps.scss`.** It pulls out several Sass maps from `_variables.scss` to fix an issue where updates to an original map were not applied to secondary maps that extend them. For example, updates to `$theme-colors` were not being applied to other theme maps that relied on `$theme-colors`, breaking key customization workflows. In short, Sass has a limitation where once a default variable or map has been _used_, it cannot be updated. _There's a similar shortcoming with CSS variables when they're used to compose other CSS variables._
-
-This is why variable customizations in Bootstrap have to come after `@import "functions"`, but before `@import "variables"` and the rest of our import stack. The same applies to Sass maps—you must override the defaults before they get used. The following maps have been moved to the new `_maps.scss`:
-
-- `$theme-colors-rgb`
-- `$utilities-colors`
-- `$utilities-text`
-- `$utilities-text-colors`
-- `$utilities-bg`
-- `$utilities-bg-colors`
-- `$negative-spacers`
-- `$gutters`
-
-Your custom Bootstrap CSS builds should now look something like this with a separate maps import.
-
-```diff
- // Functions come first
- @import "functions";
-
- // Optional variable overrides here
-+ $custom-color: #df711b;
-+ $custom-theme-colors: (
-+ "custom": $custom-color
-+ );
-
- // Variables come next
- @import "variables";
-
-+ // Optional Sass map overrides here
-+ $theme-colors: map-merge($theme-colors, $custom-theme-colors);
-+
-+ // Followed by our default maps
-+ @import "maps";
-+
- // Rest of our imports
- @import "mixins";
- @import "utilities";
- @import "root";
- @import "reboot";
- // etc
-```
-
-### New utilities
-
-- Expanded [`font-weight` utilities]({{< docsref "/utilities/text#font-weight-and-italics" >}}) to include `.fw-semibold` for semibold fonts.
-- Expanded [`border-radius` utilities]({{< docsref "/utilities/borders#sizes" >}}) to include two new sizes, `.rounded-4` and `.rounded-5`, for more options.
-
-### Additional changes
-
-- **Introduced new `$enable-container-classes` option. —** Now when opting into the experimental CSS Grid layout, `.container-*` classes will still be compiled, unless this option is set to `false`. Containers also now keep their gutter values.
-
-- **Offcanvas component now has [responsive variations]({{< docsref "/components/offcanvas#responsive" >}}).** The original `.offcanvas` class remains unchanged—it hides content across all viewports. To make it responsive, change that `.offcanvas` class to any `.offcanvas-{sm|md|lg|xl|xxl}` class.
-
-- **Thicker table dividers are now opt-in. —** We've removed the thicker and more difficult to override border between table groups and moved it to an optional class you can apply, `.table-group-divider`. [See the table docs for an example.]({{< docsref "/content/tables#table-group-dividers" >}})
-
-- **[Scrollspy has been rewritten](https://github.com/twbs/bootstrap/pull/33421) to use the Intersection Observer API**, which means you no longer need relative parent wrappers, deprecates `offset` config, and more. Look for your Scrollspy implementations to be more accurate and consistent in their nav highlighting.
-
-- **Popovers and tooltips now use CSS variables.** Some CSS variables have been updated from their Sass counterparts to reduce the number of variables. As a result, three variables have been deprecated in this release: `$popover-arrow-color`, `$popover-arrow-outer-color`, and `$tooltip-arrow-color`.
-
-- **Added new `.text-bg-{color}` helpers.** Instead of setting individual `.text-*` and `.bg-*` utilities, you can now use [the `.text-bg-*` helpers]({{< docsref "helpers/color-background" >}}) to set a `background-color` with contrasting foreground `color`.
-
-- Added `.form-check-reverse` modifier to flip the order of labels and associated checkboxes/radios.
-
-- Added [striped columns]({{< docsref "/content/tables#striped-columns" >}}) support to tables via the new `.table-striped-columns` class.
-
-For a complete list of changes, [see the v5.2.0 project on GitHub](https://github.com/twbs/bootstrap/projects/32).
-
-## v5.1.0
-
-<hr class="mb-4">
-
-- **Added experimental support for [CSS Grid layout]({{< docsref "/layout/css-grid" >}}). —** This is a work in progress, and is not yet ready for production use, but you can opt into the new feature via Sass. To enable it, disable the default grid, by setting `$enable-grid-classes: false` and enable the CSS Grid by setting `$enable-cssgrid: true`.
-
-- **Updated navbars to support offcanvas. —** Add [offcanvas drawers in any navbar]({{< docsref "/components/navbar#offcanvas" >}}) with the responsive `.navbar-expand-*` classes and some offcanvas markup.
-
-- **Added new [placeholder component]({{< docsref "/components/placeholders/" >}}). —** Our newest component, a way to provide temporary blocks in lieu of real content to help indicate that something is still loading in your site or app.
-
-- **Collapse plugin now supports [horizontal collapsing]({{< docsref "/components/collapse#horizontal" >}}). —** Add `.collapse-horizontal` to your `.collapse` to collapse the `width` instead of the `height`. Avoid browser repainting by setting a `min-height` or `height`.
-
-- **Added new stack and vertical rule helpers. —** Quickly apply multiple flexbox properties to quickly create custom layouts with [stacks]({{< docsref "/helpers/stacks/" >}}). Choose from horizontal (`.hstack`) and vertical (`.vstack`) stacks. Add vertical dividers similar to `<hr>` elements with the [new `.vr` helpers]({{< docsref "/helpers/vertical-rule/" >}}).
-
-- **Added new global `:root` CSS variables. —** Added several new CSS variables to the `:root` level for controlling `<body>` styles. More are in the works, including across our utilities and components, but for now read up [CSS variables in the Customize section]({{< docsref "/customize/css-variables/" >}}).
-
-- **Overhauled color and background utilities to use CSS variables, and added new [text opacity]({{< docsref "/utilities/text#opacity" >}}) and [background opacity]({{< docsref "/utilities/background#opacity" >}}) utilities. —** `.text-*` and `.bg-*` utilities are now built with CSS variables and `rgba()` color values, allowing you to easily customize any utility with new opacity utilities.
-
-- **Added new snippet examples based to show how to customize our components. —** Pull ready to use customized components and other common design patterns with our new [Snippets examples]({{< docsref "/examples#snippets" >}}). Includes [footers]({{< docsref "/examples/footers/" >}}), [dropdowns]({{< docsref "/examples/dropdowns/" >}}), [list groups]({{< docsref "/examples/list-groups/" >}}), and [modals]({{< docsref "/examples/modals/" >}}).
-
-- **Removed unused positioning styles from popovers and tooltips** as these are handled solely by Popper. `$tooltip-margin` has been deprecated and set to `null` in the process.
-
-Want more information? [Read the v5.1.0 blog post.](https://blog.getbootstrap.com/2021/08/04/bootstrap-5-1-0/)
-
-<hr class="my-5">
-
-{{< callout info >}}
-**Hey there!** Changes to our first major release of Bootstrap 5, v5.0.0, are documented below. They don't reflect the additional changes shown above.
-{{< /callout >}}
-
-## Dependencies
-
-- Dropped jQuery.
-- Upgraded from Popper v1.x to Popper v2.x.
-- Replaced Libsass with Dart Sass as our Sass compiler given Libsass was deprecated.
-- Migrated from Jekyll to Hugo for building our documentation
-
-## Browser support
-
-- Dropped Internet Explorer 10 and 11
-- Dropped Microsoft Edge < 16 (Legacy Edge)
-- Dropped Firefox < 60
-- Dropped Safari < 12
-- Dropped iOS Safari < 12
-- Dropped Chrome < 60
-
-<hr class="my-5">
-
-## Documentation changes
-
-- Redesigned homepage, docs layout, and footer.
-- Added [new Parcel guide]({{< docsref "/getting-started/parcel" >}}).
-- Added [new Customize section]({{< docsref "/customize/overview" >}}), replacing [v4's Theming page](https://getbootstrap.com/docs/4.6/getting-started/theming/), with new details on Sass, global configuration options, color schemes, CSS variables, and more.
-- Reorganized all form documentation into [new Forms section]({{< docsref "/forms/overview" >}}), breaking apart the content into more focused pages.
-- Similarly, updated [the Layout section]({{< docsref "/layout/breakpoints" >}}), to flesh out grid content more clearly.
-- Renamed "Navs" component page to "Navs & Tabs".
-- Renamed "Checks" page to "Checks & radios".
-- Redesigned the navbar and added a new subnav to make it easier to get around our sites and docs versions.
-- Added new keyboard shortcut for the search field: <kbd>Ctrl + /</kbd>.
-
-## Sass
-
-- We've ditched the default Sass map merges to make it easier to remove redundant values. Keep in mind you now have to define all values in the Sass maps like `$theme-colors`. Check out how to deal with [Sass maps]({{< docsref "/customize/sass#maps-and-loops" >}}).
-
-- <span class="badge bg-danger">Breaking</span> Renamed `color-yiq()` function and related variables to `color-contrast()` as it's no longer related to YIQ color space. [See #30168.](https://github.com/twbs/bootstrap/pull/30168/)
- - `$yiq-contrasted-threshold` is renamed to `$min-contrast-ratio`.
- - `$yiq-text-dark` and `$yiq-text-light` are respectively renamed to `$color-contrast-dark` and `$color-contrast-light`.
-
-- <span class="badge bg-danger">Breaking</span> Media query mixins parameters have changed for a more logical approach.
- - `media-breakpoint-down()` uses the breakpoint itself instead of the next breakpoint (e.g., `media-breakpoint-down(lg)` instead of `media-breakpoint-down(md)` targets viewports smaller than `lg`).
- - Similarly, the second parameter in `media-breakpoint-between()` also uses the breakpoint itself instead of the next breakpoint (e.g., `media-between(sm, lg)` instead of `media-breakpoint-between(sm, md)` targets viewports between `sm` and `lg`).
-
-- <span class="badge bg-danger">Breaking</span> Removed print styles and `$enable-print-styles` variable. Print display classes are still around. [See #28339](https://github.com/twbs/bootstrap/pull/28339).
-
-- <span class="badge bg-danger">Breaking</span> Dropped `color()`, `theme-color()`, and `gray()` functions in favor of variables. [See #29083](https://github.com/twbs/bootstrap/pull/29083).
-
-- <span class="badge bg-danger">Breaking</span> Renamed `theme-color-level()` function to `color-level()` and now accepts any color you want instead of only `$theme-color` colors. [See #29083](https://github.com/twbs/bootstrap/pull/29083) **Watch out:** `color-level()` was later on dropped in `v5.0.0-alpha3`.
-
-- <span class="badge bg-danger">Breaking</span> Renamed `$enable-prefers-reduced-motion-media-query` and `$enable-pointer-cursor-for-buttons` to `$enable-reduced-motion` and `$enable-button-pointers` for brevity.
-
-- <span class="badge bg-danger">Breaking</span> Removed the `bg-gradient-variant()` mixin. Use the `.bg-gradient` class to add gradients to elements instead of the generated `.bg-gradient-*` classes.
-
-- <span class="badge bg-danger">Breaking</span> **Removed previously deprecated mixins:**
- - `hover`, `hover-focus`, `plain-hover-focus`, and `hover-focus-active`
- - `float()`
- - `form-control-mixin()`
- - `nav-divider()`
- - `retina-img()`
- - `text-hide()` (also dropped the associated utility class, `.text-hide`)
- - `visibility()`
- - `form-control-focus()`
-
-- <span class="badge bg-danger">Breaking</span> Renamed `scale-color()` function to `shift-color()` to avoid collision with Sass's own color scaling function.
-
-- `box-shadow` mixins now allow `null` values and drop `none` from multiple arguments. [See #30394](https://github.com/twbs/bootstrap/pull/30394).
-
-- The `border-radius()` mixin now has a default value.
-
-## Color system
-
-- The color system which worked with `color-level()` and `$theme-color-interval` was removed in favor of a new color system. All `lighten()` and `darken()` functions in our codebase are replaced by `tint-color()` and `shade-color()`. These functions will mix the color with either white or black instead of changing its lightness by a fixed amount. The `shift-color()` will either tint or shade a color depending on whether its weight parameter is positive or negative. [See #30622](https://github.com/twbs/bootstrap/pull/30622) for more details.
-
-- Added new tints and shades for every color, providing nine separate colors for each base color, as new Sass variables.
-
-- Improved color contrast. Bumped color contrast ratio from 3:1 to 4.5:1 and updated blue, green, cyan, and pink colors to ensure WCAG 2.1 AA contrast. Also changed our color contrast color from `$gray-900` to `$black`.
-
-- To support our color system, we've added new custom `tint-color()` and `shade-color()` functions to mix our colors appropriately.
-
-## Grid updates
-
-- **New breakpoint!** Added new `xxl` breakpoint for `1400px` and up. No changes to all other breakpoints.
-
-- **Improved gutters.** Gutters are now set in rems, and are narrower than v4 (`1.5rem`, or about `24px`, down from `30px`). This aligns our grid system's gutters with our spacing utilities.
- - Added new [gutter class]({{< docsref "/layout/gutters" >}}) (`.g-*`, `.gx-*`, and `.gy-*`) to control horizontal/vertical gutters, horizontal gutters, and vertical gutters.
- - <span class="badge bg-danger">Breaking</span> Renamed `.no-gutters` to `.g-0` to match new gutter utilities.
-
-- Columns no longer have `position: relative` applied, so you may have to add `.position-relative` to some elements to restore that behavior.
-
-- <span class="badge bg-danger">Breaking</span> Dropped several `.order-*` classes that often went unused. We now only provide `.order-1` to `.order-5` out of the box.
-
-- <span class="badge bg-danger">Breaking</span> Dropped the `.media` component as it can be easily replicated with utilities. [See #28265](https://github.com/twbs/bootstrap/pull/28265) and the [flex utilities page for an example]({{< docsref "/utilities/flex#media-object" >}}).
-
-- <span class="badge bg-danger">Breaking</span> `bootstrap-grid.css` now only applies `box-sizing: border-box` to the column instead of resetting the global box-sizing. This way, our grid styles can be used in more places without interference.
-
-- `$enable-grid-classes` no longer disables the generation of container classes anymore. [See #29146.](https://github.com/twbs/bootstrap/pull/29146)
-
-- Updated the `make-col` mixin to default to equal columns without a specified size.
-
-## Content, Reboot, etc
-
-- **[RFS]({{< docsref "/getting-started/rfs" >}}) is now enabled by default.** Headings using the `font-size()` mixin will automatically adjust their `font-size` to scale with the viewport. _This feature was previously opt-in with v4._
-
-- <span class="badge bg-danger">Breaking</span> Overhauled our display typography to replace our `$display-*` variables and with a `$display-font-sizes` Sass map. Also removed the individual `$display-*-weight` variables for a single `$display-font-weight` and adjusted `font-size`s.
-
-- Added two new `.display-*` heading sizes, `.display-5` and `.display-6`.
-
-- **Links are underlined by default** (not just on hover), unless they're part of specific components.
-
-- **Redesigned tables** to refresh their styles and rebuild them with CSS variables for more control over styling.
-
-- <span class="badge bg-danger">Breaking</span> Nested tables do not inherit styles anymore.
-
-- <span class="badge bg-danger">Breaking</span> `.thead-light` and `.thead-dark` are dropped in favor of the `.table-*` variant classes which can be used for all table elements (`thead`, `tbody`, `tfoot`, `tr`, `th` and `td`).
-
-- <span class="badge bg-danger">Breaking</span> The `table-row-variant()` mixin is renamed to `table-variant()` and accepts only 2 parameters: `$color` (color name) and `$value` (color code). The border color and accent colors are automatically calculated based on the table factor variables.
-
-- Split table cell padding variables into `-y` and `-x`.
-
-- <span class="badge bg-danger">Breaking</span> Dropped `.pre-scrollable` class. [See #29135](https://github.com/twbs/bootstrap/pull/29135)
-
-- <span class="badge bg-danger">Breaking</span> `.text-*` utilities do not add hover and focus states to links anymore. `.link-*` helper classes can be used instead. [See #29267](https://github.com/twbs/bootstrap/pull/29267)
-
-- <span class="badge bg-danger">Breaking</span> Dropped `.text-justify` class. [See #29793](https://github.com/twbs/bootstrap/pull/29793)
-
-- <span class="badge bg-danger">Breaking</span> ~~`<hr>` elements now use `height` instead of `border` to better support the `size` attribute. This also enables use of padding utilities to create thicker dividers (e.g., `<hr class="py-1">`).~~
-
-- Reset default horizontal `padding-left` on `<ul>` and `<ol>` elements from browser default `40px` to `2rem`.
-
-- Added `$enable-smooth-scroll`, which applies `scroll-behavior: smooth` globally—except for users asking for reduced motion through `prefers-reduced-motion` media query. [See #31877](https://github.com/twbs/bootstrap/pull/31877)
-
-## RTL
-
-- Horizontal direction specific variables, utilities, and mixins have all been renamed to use logical properties like those found in flexbox layouts—e.g., `start` and `end` in lieu of `left` and `right`.
-
-## Forms
-
-- **Added new floating forms!** We've promoted the Floating labels example to fully supported form components. [See the new Floating labels page.]({{< docsref "/forms/floating-labels" >}})
-
-- <span class="badge bg-danger">Breaking</span> **Consolidated native and custom form elements.** Checkboxes, radios, selects, and other inputs that had native and custom classes in v4 have been consolidated. Now nearly all our form elements are entirely custom, most without the need for custom HTML.
- - `.custom-control.custom-checkbox` is now `.form-check`.
- - `.custom-control.custom-custom-radio` is now `.form-check`.
- - `.custom-control.custom-switch` is now `.form-check.form-switch`.
- - `.custom-select` is now `.form-select`.
- - `.custom-file` and `.form-file` have been replaced by custom styles on top of `.form-control`.
- - `.custom-range` is now `.form-range`.
- - Dropped native `.form-control-file` and `.form-control-range`.
-
-- <span class="badge bg-danger">Breaking</span> Dropped `.input-group-append` and `.input-group-prepend`. You can now just add buttons and `.input-group-text` as direct children of the input groups.
-
-- The longstanding [Missing border radius on input group with validation feedback bug](https://github.com/twbs/bootstrap/issues/25110) is finally fixed by adding an additional `.has-validation` class to input groups with validation.
-
-- <span class="badge bg-danger">Breaking</span> **Dropped form-specific layout classes for our grid system.** Use our grid and utilities instead of `.form-group`, `.form-row`, or `.form-inline`.
-
-- <span class="badge bg-danger">Breaking</span> Form labels now require `.form-label`.
-
-- <span class="badge bg-danger">Breaking</span> `.form-text` no longer sets `display`, allowing you to create inline or block help text as you wish just by changing the HTML element.
-
-- Form controls no longer used fixed `height` when possible, instead deferring to `min-height` to improve customization and compatibility with other components.
-
-- Validation icons are no longer applied to `<select>`s with `multiple`.
-
-- Rearranged source Sass files under `scss/forms/`, including input group styles.
-
-<hr class="my-5">
-
-## Components
-
-- Unified `padding` values for alerts, breadcrumbs, cards, dropdowns, list groups, modals, popovers, and tooltips to be based on our `$spacer` variable. [See #30564](https://github.com/twbs/bootstrap/pull/30564).
-
-### Accordion
-
-- Added [new accordion component]({{< docsref "/components/accordion" >}}).
-
-### Alerts
-
-- Alerts now have [examples with icons]({{< docsref "/components/alerts#icons" >}}).
-
-- Removed custom styles for `<hr>`s in each alert since they already use `currentColor`.
-
-### Badges
-
-- <span class="badge bg-danger">Breaking</span> Dropped all `.badge-*` color classes for background utilities (e.g., use `.bg-primary` instead of `.badge-primary`).
-
-- <span class="badge bg-danger">Breaking</span> Dropped `.badge-pill`—use the `.rounded-pill` utility instead.
-
-- <span class="badge bg-danger">Breaking</span> Removed hover and focus styles for `<a>` and `<button>` elements.
-
-- Increased default padding for badges from `.25em`/`.5em` to `.35em`/`.65em`.
-
-### Breadcrumbs
-
-- Simplified the default appearance of breadcrumbs by removing `padding`, `background-color`, and `border-radius`.
-
-- Added new CSS custom property `--bs-breadcrumb-divider` for easy customization without needing to recompile CSS.
-
-### Buttons
-
-- <span class="badge bg-danger">Breaking</span> **[Toggle buttons]({{< docsref "/forms/checks-radios#toggle-buttons" >}}), with checkboxes or radios, no longer require JavaScript and have new markup.** We no longer require a wrapping element, add `.btn-check` to the `<input>`, and pair it with any `.btn` classes on the `<label>`. [See #30650](https://github.com/twbs/bootstrap/pull/30650). _The docs for this has moved from our Buttons page to the new Forms section._
-
-- <span class="badge bg-danger">Breaking</span> **Dropped `.btn-block` for utilities.** Instead of using `.btn-block` on the `.btn`, wrap your buttons with `.d-grid` and a `.gap-*` utility to space them as needed. Switch to responsive classes for even more control over them. [Read the docs for some examples.]({{< docsref "/components/buttons#block-buttons" >}})
-
-- Updated our `button-variant()` and `button-outline-variant()` mixins to support additional parameters.
-
-- Updated buttons to ensure increased contrast on hover and active states.
-
-- Disabled buttons now have `pointer-events: none;`.
-
-### Card
-
-- <span class="badge bg-danger">Breaking</span> Dropped `.card-deck` in favor of our grid. Wrap your cards in column classes and add a parent `.row-cols-*` container to recreate card decks (but with more control over responsive alignment).
-
-- <span class="badge bg-danger">Breaking</span> Dropped `.card-columns` in favor of Masonry. [See #28922](https://github.com/twbs/bootstrap/pull/28922).
-
-- <span class="badge bg-danger">Breaking</span> Replaced the `.card` based accordion with a [new Accordion component]({{< docsref "/components/accordion" >}}).
-
-### Carousel
-
-- Added new [`.carousel-dark` variant]({{< docsref "/components/carousel#dark-variant" >}}) for dark text, controls, and indicators (great for lighter backgrounds).
-
-- Replaced chevron icons for carousel controls with new SVGs from [Bootstrap Icons]({{< param "icons" >}}).
-
-### Close button
-
-- <span class="badge bg-danger">Breaking</span> Renamed `.close` to `.btn-close` for a less generic name.
-
-- Close buttons now use a `background-image` (embedded SVG) instead of a `&times;` in the HTML, allowing for easier customization without the need to touch your markup.
-
-- Added new `.btn-close-white` variant that uses `filter: invert(1)` to enable higher contrast dismiss icons against darker backgrounds.
-
-### Collapse
-
-- Removed scroll anchoring for accordions.
-
-### Dropdowns
-
-- Added new `.dropdown-menu-dark` variant and associated variables for on-demand dark dropdowns.
-
-- Added new variable for `$dropdown-padding-x`.
-
-- Darkened the dropdown divider for improved contrast.
-
-- <span class="badge bg-danger">Breaking</span> All the events for the dropdown are now triggered on the dropdown toggle button and then bubbled up to the parent element.
-
-- Dropdown menus now have a `data-bs-popper="static"` attribute set when the positioning of the dropdown is static, or dropdown is in the navbar. This is added by our JavaScript and helps us use custom position styles without interfering with Popper's positioning.
-
-- <span class="badge bg-danger">Breaking</span> Dropped `flip` option for dropdown plugin in favor of native Popper configuration. You can now disable the flipping behavior by passing an empty array for [`fallbackPlacements`](https://popper.js.org/docs/v2/modifiers/flip/#fallbackplacements) option in [flip](https://popper.js.org/docs/v2/modifiers/flip/) modifier.
-
-- Dropdown menus can now be clickable with a new `autoClose` option to handle the [auto close behavior]({{< docsref "/components/dropdowns#auto-close-behavior" >}}). You can use this option to accept the click inside or outside the dropdown menu to make it interactive.
-
-- Dropdowns now support `.dropdown-item`s wrapped in `<li>`s.
-
-### Jumbotron
-
-- <span class="badge bg-danger">Breaking</span> Dropped the jumbotron component as it can be replicated with utilities. [See our new Jumbotron example for a demo.]({{< docsref "/examples/jumbotron" >}})
-
-### List group
-
-- Added new [`.list-group-numbered` modifier]({{< docsref "/components/list-group#numbered" >}}) to list groups.
-
-### Navs and tabs
-
-- Added new `null` variables for `font-size`, `font-weight`, `color`, and `:hover` `color` to the `.nav-link` class.
-
-### Navbars
-
-- <span class="badge bg-danger">Breaking</span> Navbars now require a container within (to drastically simplify spacing requirements and CSS required).
-- <span class="badge bg-danger">Breaking</span> The `.active` class can no longer be applied to `.nav-item`s, it must be applied directly on `.nav-link`s.
-
-### Offcanvas
-
-- Added the new [offcanvas component]({{< docsref "/components/offcanvas" >}}).
-
-### Pagination
-
-- Pagination links now have customizable `margin-left` that are dynamically rounded on all corners when separated from one another.
-
-- Added `transition`s to pagination links.
-
-### Popovers
-
-- <span class="badge bg-danger">Breaking</span> Renamed `.arrow` to `.popover-arrow` in our default popover template.
-
-- Renamed `whiteList` option to `allowList`.
-
-### Spinners
-
-- Spinners now honor `prefers-reduced-motion: reduce` by slowing down animations. [See #31882](https://github.com/twbs/bootstrap/pull/31882).
-
-- Improved spinner vertical alignment.
-
-### Toasts
-
-- Toasts can now be [positioned]({{< docsref "/components/toasts#placement" >}}) in a `.toast-container` with the help of [positioning utilities]({{< docsref "/utilities/position" >}}).
-
-- Changed default toast duration to 5 seconds.
-
-- Removed `overflow: hidden` from toasts and replaced with proper `border-radius`s with `calc()` functions.
-
-### Tooltips
-
-- <span class="badge bg-danger">Breaking</span> Renamed `.arrow` to `.tooltip-arrow` in our default tooltip template.
-
-- <span class="badge bg-danger">Breaking</span> The default value for the `fallbackPlacements` is changed to `['top', 'right', 'bottom', 'left']` for better placement of popper elements.
-
-- <span class="badge bg-danger">Breaking</span> Renamed `whiteList` option to `allowList`.
-
-## Utilities
-
-- <span class="badge bg-danger">Breaking</span> Renamed several utilities to use logical property names instead of directional names with the addition of RTL support:
- - Renamed `.left-*` and `.right-*` to `.start-*` and `.end-*`.
- - Renamed `.float-left` and `.float-right` to `.float-start` and `.float-end`.
- - Renamed `.border-left` and `.border-right` to `.border-start` and `.border-end`.
- - Renamed `.rounded-left` and `.rounded-right` to `.rounded-start` and `.rounded-end`.
- - Renamed `.ml-*` and `.mr-*` to `.ms-*` and `.me-*`.
- - Renamed `.pl-*` and `.pr-*` to `.ps-*` and `.pe-*`.
- - Renamed `.text-left` and `.text-right` to `.text-start` and `.text-end`.
-
-- <span class="badge bg-danger">Breaking</span> Disabled negative margins by default.
-
-- Added new `.bg-body` class for quickly setting the `<body>`'s background to additional elements.
-
-- Added new [position utilities]({{< docsref "/utilities/position#arrange-elements" >}}) for `top`, `right`, `bottom`, and `left`. Values include `0`, `50%`, and `100%` for each property.
-
-- Added new `.translate-middle-x` & `.translate-middle-y` utilities to horizontally or vertically center absolute/fixed positioned elements.
-
-- Added new [`border-width` utilities]({{< docsref "/utilities/borders#border-width" >}}).
-
-- <span class="badge bg-danger">Breaking</span> Renamed `.text-monospace` to `.font-monospace`.
-
-- <span class="badge bg-danger">Breaking</span> Removed `.text-hide` as it's an antiquated method for hiding text that shouldn't be used anymore.
-
-- Added `.fs-*` utilities for `font-size` utilities (with RFS enabled). These use the same scale as HTML's default headings (1-6, large to small), and can be modified via Sass map.
-
-- <span class="badge bg-danger">Breaking</span> Renamed `.font-weight-*` utilities as `.fw-*` for brevity and consistency.
-
-- <span class="badge bg-danger">Breaking</span> Renamed `.font-style-*` utilities as `.fst-*` for brevity and consistency.
-
-- Added `.d-grid` to display utilities and new `gap` utilities (`.gap`) for CSS Grid and flexbox layouts.
-
-- <span class="badge bg-danger">Breaking</span> Removed `.rounded-sm` and `rounded-lg`, and introduced a new scale of classes, `.rounded-0` to `.rounded-3`. [See #31687](https://github.com/twbs/bootstrap/pull/31687).
-
-- Added new `line-height` utilities: `.lh-1`, `.lh-sm`, `.lh-base` and `.lh-lg`. See [here]({{< docsref "/utilities/text#line-height" >}}).
-
-- Moved the `.d-none` utility in our CSS to give it more weight over other display utilities.
-
-- Extended the `.visually-hidden-focusable` helper to also work on containers, using `:focus-within`.
-
-## Helpers
-
-- <span class="badge bg-danger">Breaking</span> **Responsive embed helpers have been renamed to [ratio helpers]({{< docsref "/helpers/ratio" >}})** with new class names and improved behaviors, as well as a helpful CSS variable.
- - Classes have been renamed to change `by` to `x` in the aspect ratio. For example, `.ratio-16by9` is now `.ratio-16x9`.
- - We've dropped the `.embed-responsive-item` and element group selector in favor of a simpler `.ratio > *` selector. No more class is needed, and the ratio helper now works with any HTML element.
- - The `$embed-responsive-aspect-ratios` Sass map has been renamed to `$aspect-ratios` and its values have been simplified to include the class name and the percentage as the `key: value` pair.
- - CSS variables are now generated and included for each value in the Sass map. Modify the `--bs-aspect-ratio` variable on the `.ratio` to create any [custom aspect ratio]({{< docsref "/helpers/ratio#custom-ratios" >}}).
-
-- <span class="badge bg-danger">Breaking</span> **"Screen reader" classes are now ["visually hidden" classes]({{< docsref "/helpers/visually-hidden" >}}).**
- - Changed the Sass file from `scss/helpers/_screenreaders.scss` to `scss/helpers/_visually-hidden.scss`
- - Renamed `.sr-only` and `.sr-only-focusable` to `.visually-hidden` and `.visually-hidden-focusable`
- - Renamed `sr-only()` and `sr-only-focusable()` mixins to `visually-hidden()` and `visually-hidden-focusable()`.
-
-- `bootstrap-utilities.css` now also includes our helpers. Helpers don't need to be imported in custom builds anymore.
-
-## JavaScript
-
-- **Dropped jQuery dependency** and rewrote plugins to be in regular JavaScript.
-
-- <span class="badge bg-danger">Breaking</span> Data attributes for all JavaScript plugins are now namespaced to help distinguish Bootstrap functionality from third parties and your own code. For example, we use `data-bs-toggle` instead of `data-toggle`.
-
-- **All plugins can now accept a CSS selector as the first argument.** You can either pass a DOM element or any valid CSS selector to create a new instance of the plugin:
-
- ```js
- const modal = new bootstrap.Modal('#myModal')
- const dropdown = new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
- ```
-
-- `popperConfig` can be passed as a function that accepts the Bootstrap's default Popper config as an argument, so that you can merge this default configuration in your way. **Applies to dropdowns, popovers, and tooltips.**
-
-- The default value for the `fallbackPlacements` is changed to `['top', 'right', 'bottom', 'left']` for better placement of Popper elements. **Applies to dropdowns, popovers, and tooltips.**
-
-- Removed underscore from public static methods like `_getInstance()` → `getInstance()`.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/api.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/api.md
deleted file mode 100644
index 81017ee8e..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/api.md
+++ /dev/null
@@ -1,616 +0,0 @@
----
-layout: docs
-title: Utility API
-description: The utility API is a Sass-based tool to generate utility classes.
-group: utilities
-aliases: "/docs/5.2/utilities/"
-toc: true
----
-
-Bootstrap utilities are generated with our utility API and can be used to modify or extend our default set of utility classes via Sass. Our utility API is based on a series of Sass maps and functions for generating families of classes with various options. If you're unfamiliar with Sass maps, read up on the [official Sass docs](https://sass-lang.com/documentation/values/maps) to get started.
-
-The `$utilities` map contains all our utilities and is later merged with your custom `$utilities` map, if present. The utility map contains a keyed list of utility groups which accept the following options:
-
-{{< bs-table "table table-utilities" >}}
-| Option | Type | Default&nbsp;value | Description |
-| --- | --- | --- | --- |
-| [`property`](#property) | **Required** | – | Name of the property, this can be a string or an array of strings (e.g., horizontal paddings or margins). |
-| [`values`](#values) | **Required** | – | List of values, or a map if you don't want the class name to be the same as the value. If `null` is used as map key, `class` is not prepended to the class name. |
-| [`class`](#class) | Optional | null | Name of the generated class. If not provided and `property` is an array of strings, `class` will default to the first element of the `property` array. If not provided and `property` is a string, the `values` keys are used for the `class` names. |
-| [`css-var`](#css-variable-utilities) | Optional | `false` | Boolean to generate CSS variables instead of CSS rules. |
-| [`css-variable-name`](#css-variable-utilities) | Optional | null | Custom un-prefixed name for the CSS variable inside the ruleset. |
-| [`local-vars`](#local-css-variables) | Optional | null | Map of local CSS variables to generate in addition to the CSS rules. |
-| [`state`](#states) | Optional | null | List of pseudo-class variants (e.g., `:hover` or `:focus`) to generate. |
-| [`responsive`](#responsive) | Optional | `false` | Boolean indicating if responsive classes should be generated. |
-| `rfs` | Optional | `false` | Boolean to enable [fluid rescaling with RFS]({{< docsref "/getting-started/rfs" >}}). |
-| [`print`](#print) | Optional | `false` | Boolean indicating if print classes need to be generated. |
-| `rtl` | Optional | `true` | Boolean indicating if utility should be kept in RTL. |
-{{< /bs-table >}}
-
-## API explained
-
-All utility variables are added to the `$utilities` variable within our `_utilities.scss` stylesheet. Each group of utilities looks something like this:
-
-```scss
-$utilities: (
- "opacity": (
- property: opacity,
- values: (
- 0: 0,
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1,
- )
- )
-);
-```
-
-Which outputs the following:
-
-```css
-.opacity-0 { opacity: 0; }
-.opacity-25 { opacity: .25; }
-.opacity-50 { opacity: .5; }
-.opacity-75 { opacity: .75; }
-.opacity-100 { opacity: 1; }
-```
-
-### Property
-
-The required `property` key must be set for any utility, and it must contain a valid CSS property. This property is used in the generated utility's ruleset. When the `class` key is omitted, it also serves as the default class name. Consider the `text-decoration` utility:
-
-```scss
-$utilities: (
- "text-decoration": (
- property: text-decoration,
- values: none underline line-through
- )
-);
-```
-
-Output:
-
-```css
-.text-decoration-none { text-decoration: none !important; }
-.text-decoration-underline { text-decoration: underline !important; }
-.text-decoration-line-through { text-decoration: line-through !important; }
-```
-
-### Values
-
-Use the `values` key to specify which values for the specified `property` should be used in the generated class names and rules. Can be a list or map (set in the utilities or in a Sass variable).
-
-As a list, like with [`text-decoration` utilities]({{< docsref "/utilities/text#text-decoration" >}}):
-
-```scss
-values: none underline line-through
-```
-
-As a map, like with [`opacity` utilities]({{< docsref "/utilities/opacity" >}}):
-
-```scss
-values: (
- 0: 0,
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1,
-)
-```
-
-As a Sass variable that sets the list or map, as in our [`position` utilities]({{< docsref "/utilities/position" >}}):
-
-```scss
-values: $position-values
-```
-
-### Class
-
-Use the `class` option to change the class prefix used in the compiled CSS. For example, to change from `.opacity-*` to `.o-*`:
-
-```scss
-$utilities: (
- "opacity": (
- property: opacity,
- class: o,
- values: (
- 0: 0,
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1,
- )
- )
-);
-```
-
-Output:
-
-```css
-.o-0 { opacity: 0 !important; }
-.o-25 { opacity: .25 !important; }
-.o-50 { opacity: .5 !important; }
-.o-75 { opacity: .75 !important; }
-.o-100 { opacity: 1 !important; }
-```
-
-If `class: null`, generates classes for each of the `values` keys:
-
-```scss
-$utilities: (
- "visibility": (
- property: visibility,
- class: null,
- values: (
- visible: visible,
- invisible: hidden,
- )
- )
-);
-```
-
-Output:
-
-```css
-.visible { visibility: visible !important; }
-.invisible { visibility: hidden !important; }
-```
-
-### CSS variable utilities
-
-Set the `css-var` boolean option to `true` and the API will generate local CSS variables for the given selector instead of the usual `property: value` rules. Add an optional `css-variable-name` to set a different CSS variable name than the class name.
-
-Consider our `.text-opacity-*` utilities. If we add the `css-variable-name` option, we'll get a custom output.
-
-```scss
-$utilities: (
- "text-opacity": (
- css-var: true,
- css-variable-name: text-alpha,
- class: text-opacity,
- values: (
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1
- )
- ),
-);
-```
-
-Output:
-
-```css
-.text-opacity-25 { --bs-text-alpha: .25; }
-.text-opacity-50 { --bs-text-alpha: .5; }
-.text-opacity-75 { --bs-text-alpha: .75; }
-.text-opacity-100 { --bs-text-alpha: 1; }
-```
-
-### Local CSS variables
-
-Use the `local-vars` option to specify a Sass map that will generate local CSS variables within the utility class's ruleset. Please note that it may require additional work to consume those local CSS variables in the generated CSS rules. For example, consider our `.bg-*` utilities:
-
-```scss
-$utilities: (
- "background-color": (
- property: background-color,
- class: bg,
- local-vars: (
- "bg-opacity": 1
- ),
- values: map-merge(
- $utilities-bg-colors,
- (
- "transparent": transparent
- )
- )
- )
-);
-```
-
-Output:
-
-```css
-.bg-primary {
- --bs-bg-opacity: 1;
- background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
-}
-```
-
-### States
-
-Use the `state` option to generate pseudo-class variations. Example pseudo-classes are `:hover` and `:focus`. When a list of states are provided, classnames are created for that pseudo-class. For example, to change opacity on hover, add `state: hover` and you'll get `.opacity-hover:hover` in your compiled CSS.
-
-Need multiple pseudo-classes? Use a space-separated list of states: `state: hover focus`.
-
-```scss
-$utilities: (
- "opacity": (
- property: opacity,
- class: opacity,
- state: hover,
- values: (
- 0: 0,
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1,
- )
- )
-);
-```
-
-Output:
-
-```css
-.opacity-0-hover:hover { opacity: 0 !important; }
-.opacity-25-hover:hover { opacity: .25 !important; }
-.opacity-50-hover:hover { opacity: .5 !important; }
-.opacity-75-hover:hover { opacity: .75 !important; }
-.opacity-100-hover:hover { opacity: 1 !important; }
-```
-
-### Responsive
-
-Add the `responsive` boolean to generate responsive utilities (e.g., `.opacity-md-25`) across [all breakpoints]({{< docsref "/layout/breakpoints" >}}).
-
-```scss
-$utilities: (
- "opacity": (
- property: opacity,
- responsive: true,
- values: (
- 0: 0,
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1,
- )
- )
-);
-```
-
-Output:
-
-```css
-.opacity-0 { opacity: 0 !important; }
-.opacity-25 { opacity: .25 !important; }
-.opacity-50 { opacity: .5 !important; }
-.opacity-75 { opacity: .75 !important; }
-.opacity-100 { opacity: 1 !important; }
-
-@media (min-width: 576px) {
- .opacity-sm-0 { opacity: 0 !important; }
- .opacity-sm-25 { opacity: .25 !important; }
- .opacity-sm-50 { opacity: .5 !important; }
- .opacity-sm-75 { opacity: .75 !important; }
- .opacity-sm-100 { opacity: 1 !important; }
-}
-
-@media (min-width: 768px) {
- .opacity-md-0 { opacity: 0 !important; }
- .opacity-md-25 { opacity: .25 !important; }
- .opacity-md-50 { opacity: .5 !important; }
- .opacity-md-75 { opacity: .75 !important; }
- .opacity-md-100 { opacity: 1 !important; }
-}
-
-@media (min-width: 992px) {
- .opacity-lg-0 { opacity: 0 !important; }
- .opacity-lg-25 { opacity: .25 !important; }
- .opacity-lg-50 { opacity: .5 !important; }
- .opacity-lg-75 { opacity: .75 !important; }
- .opacity-lg-100 { opacity: 1 !important; }
-}
-
-@media (min-width: 1200px) {
- .opacity-xl-0 { opacity: 0 !important; }
- .opacity-xl-25 { opacity: .25 !important; }
- .opacity-xl-50 { opacity: .5 !important; }
- .opacity-xl-75 { opacity: .75 !important; }
- .opacity-xl-100 { opacity: 1 !important; }
-}
-
-@media (min-width: 1400px) {
- .opacity-xxl-0 { opacity: 0 !important; }
- .opacity-xxl-25 { opacity: .25 !important; }
- .opacity-xxl-50 { opacity: .5 !important; }
- .opacity-xxl-75 { opacity: .75 !important; }
- .opacity-xxl-100 { opacity: 1 !important; }
-}
-```
-
-### Print
-
-Enabling the `print` option will **also** generate utility classes for print, which are only applied within the `@media print { ... }` media query.
-
-```scss
-$utilities: (
- "opacity": (
- property: opacity,
- print: true,
- values: (
- 0: 0,
- 25: .25,
- 50: .5,
- 75: .75,
- 100: 1,
- )
- )
-);
-```
-
-Output:
-
-```css
-.opacity-0 { opacity: 0 !important; }
-.opacity-25 { opacity: .25 !important; }
-.opacity-50 { opacity: .5 !important; }
-.opacity-75 { opacity: .75 !important; }
-.opacity-100 { opacity: 1 !important; }
-
-@media print {
- .opacity-print-0 { opacity: 0 !important; }
- .opacity-print-25 { opacity: .25 !important; }
- .opacity-print-50 { opacity: .5 !important; }
- .opacity-print-75 { opacity: .75 !important; }
- .opacity-print-100 { opacity: 1 !important; }
-}
-```
-
-## Importance
-
-All utilities generated by the API include `!important` to ensure they override components and modifier classes as intended. You can toggle this setting globally with the `$enable-important-utilities` variable (defaults to `true`).
-
-## Using the API
-
-Now that you're familiar with how the utilities API works, learn how to add your own custom classes and modify our default utilities.
-
-### Override utilities
-
-Override existing utilities by using the same key. For example, if you want additional responsive overflow utility classes, you can do this:
-
-```scss
-$utilities: (
- "overflow": (
- responsive: true,
- property: overflow,
- values: visible hidden scroll auto,
- ),
-);
-```
-
-### Add utilities
-
-New utilities can be added to the default `$utilities` map with a `map-merge`. Make sure our required Sass files and `_utilities.scss` are imported first, then use the `map-merge` to add your additional utilities. For example, here's how to add a responsive `cursor` utility with three values.
-
-```scss
-@import "bootstrap/scss/functions";
-@import "bootstrap/scss/variables";
-@import "bootstrap/scss/maps";
-@import "bootstrap/scss/mixins";
-@import "bootstrap/scss/utilities";
-
-$utilities: map-merge(
- $utilities,
- (
- "cursor": (
- property: cursor,
- class: cursor,
- responsive: true,
- values: auto pointer grab,
- )
- )
-);
-
-@import "bootstrap/scss/utilities/api";
-```
-
-### Modify utilities
-
-Modify existing utilities in the default `$utilities` map with `map-get` and `map-merge` functions. In the example below, we're adding an additional value to the `width` utilities. Start with an initial `map-merge` and then specify which utility you want to modify. From there, fetch the nested `"width"` map with `map-get` to access and modify the utility's options and values.
-
-```scss
-@import "bootstrap/scss/functions";
-@import "bootstrap/scss/variables";
-@import "bootstrap/scss/maps";
-@import "bootstrap/scss/mixins";
-@import "bootstrap/scss/utilities";
-
-$utilities: map-merge(
- $utilities,
- (
- "width": map-merge(
- map-get($utilities, "width"),
- (
- values: map-merge(
- map-get(map-get($utilities, "width"), "values"),
- (10: 10%),
- ),
- ),
- ),
- )
-);
-
-@import "bootstrap/scss/utilities/api";
-```
-
-#### Enable responsive
-
-You can enable responsive classes for an existing set of utilities that are not currently responsive by default. For example, to make the `border` classes responsive:
-
-```scss
-@import "bootstrap/scss/functions";
-@import "bootstrap/scss/variables";
-@import "bootstrap/scss/maps";
-@import "bootstrap/scss/mixins";
-@import "bootstrap/scss/utilities";
-
-$utilities: map-merge(
- $utilities, (
- "border": map-merge(
- map-get($utilities, "border"),
- ( responsive: true ),
- ),
- )
-);
-
-@import "bootstrap/scss/utilities/api";
-```
-
-This will now generate responsive variations of `.border` and `.border-0` for each breakpoint. Your generated CSS will look like this:
-
-```css
-.border { ... }
-.border-0 { ... }
-
-@media (min-width: 576px) {
- .border-sm { ... }
- .border-sm-0 { ... }
-}
-
-@media (min-width: 768px) {
- .border-md { ... }
- .border-md-0 { ... }
-}
-
-@media (min-width: 992px) {
- .border-lg { ... }
- .border-lg-0 { ... }
-}
-
-@media (min-width: 1200px) {
- .border-xl { ... }
- .border-xl-0 { ... }
-}
-
-@media (min-width: 1400px) {
- .border-xxl { ... }
- .border-xxl-0 { ... }
-}
-```
-
-#### Rename utilities
-
-Missing v4 utilities, or used to another naming convention? The utilities API can be used to override the resulting `class` of a given utility—for example, to rename `.ms-*` utilities to oldish `.ml-*`:
-
-```scss
-@import "bootstrap/scss/functions";
-@import "bootstrap/scss/variables";
-@import "bootstrap/scss/maps";
-@import "bootstrap/scss/mixins";
-@import "bootstrap/scss/utilities";
-
-$utilities: map-merge(
- $utilities, (
- "margin-start": map-merge(
- map-get($utilities, "margin-start"),
- ( class: ml ),
- ),
- )
-);
-
-@import "bootstrap/scss/utilities/api";
-```
-
-### Remove utilities
-
-Remove any of the default utilities with the [`map-remove()` Sass function](https://sass-lang.com/documentation/modules/map#remove).
-
-```scss
-@import "bootstrap/scss/functions";
-@import "bootstrap/scss/variables";
-@import "bootstrap/scss/maps";
-@import "bootstrap/scss/mixins";
-@import "bootstrap/scss/utilities";
-
-// Remove multiple utilities with a comma-separated list
-$utilities: map-remove($utilities, "width", "float");
-
-@import "bootstrap/scss/utilities/api";
-```
-
-You can also use the [`map-merge()` Sass function](https://sass-lang.com/documentation/modules/map#merge) and set the group key to `null` to remove the utility.
-
-```scss
-@import "bootstrap/scss/functions";
-@import "bootstrap/scss/variables";
-@import "bootstrap/scss/maps";
-@import "bootstrap/scss/mixins";
-@import "bootstrap/scss/utilities";
-
-$utilities: map-merge(
- $utilities,
- (
- "width": null
- )
-);
-
-@import "bootstrap/scss/utilities/api";
-```
-
-### Add, remove, modify
-
-You can add, remove, and modify many utilities all at once with the [`map-merge()` Sass function](https://sass-lang.com/documentation/modules/map#merge). Here's how you can combine the previous examples into one larger map.
-
-```scss
-@import "bootstrap/scss/functions";
-@import "bootstrap/scss/variables";
-@import "bootstrap/scss/maps";
-@import "bootstrap/scss/mixins";
-@import "bootstrap/scss/utilities";
-
-$utilities: map-merge(
- $utilities,
- (
- // Remove the `width` utility
- "width": null,
-
- // Make an existing utility responsive
- "border": map-merge(
- map-get($utilities, "border"),
- ( responsive: true ),
- ),
-
- // Add new utilities
- "cursor": (
- property: cursor,
- class: cursor,
- responsive: true,
- values: auto pointer grab,
- )
- )
-);
-
-@import "bootstrap/scss/utilities/api";
-```
-
-#### Remove utility in RTL
-
-Some edge cases make [RTL styling difficult](https://rtlstyling.com/posts/rtl-styling#common-things-that-might-not-work-for-rtl), such as line breaks in Arabic. Thus utilities can be dropped from RTL output by setting the `rtl` option to `false`:
-
-```scss
-$utilities: (
- "word-wrap": (
- property: word-wrap word-break,
- class: text,
- values: (break: break-word),
- rtl: false
- ),
-);
-```
-
-Output:
-
-```css
-/* rtl:begin:remove */
-.text-break {
- word-wrap: break-word !important;
- word-break: break-word !important;
-}
-/* rtl:end:remove */
-```
-
-This doesn't output anything in RTL, thanks to [the RTLCSS `remove` control directive](https://rtlcss.com/learn/usage-guide/control-directives/#remove).
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/background.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/background.md
deleted file mode 100644
index fe0bf573b..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/background.md
+++ /dev/null
@@ -1,124 +0,0 @@
----
-layout: docs
-title: Background
-description: Convey meaning through `background-color` and add decoration with gradients.
-group: utilities
-toc: true
----
-
-## Background color
-
-Similar to the contextual text color classes, set the background of an element to any contextual class. Background utilities **do not set `color`**, so in some cases you'll want to use `.text-*` [color utilities]({{< docsref "/utilities/colors" >}}).
-
-{{< example >}}
-{{< colors.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<div class="p-3 mb-2 bg-{{ .name }}{{ if .contrast_color }} text-{{ .contrast_color }}{{ else }} text-white{{ end }}">.bg-{{ .name }}</div>
-{{- end -}}
-{{< /colors.inline >}}
-<div class="p-3 mb-2 bg-body text-dark">.bg-body</div>
-<div class="p-3 mb-2 bg-white text-dark">.bg-white</div>
-<div class="p-3 mb-2 bg-transparent text-dark">.bg-transparent</div>
-{{< /example >}}
-
-## Background gradient
-
-By adding a `.bg-gradient` class, a linear gradient is added as background image to the backgrounds. This gradient starts with a semi-transparent white which fades out to the bottom.
-
-Do you need a gradient in your custom CSS? Just add `background-image: var(--bs-gradient);`.
-
-{{< markdown >}}
-{{< colors.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<div class="p-3 mb-2 bg-{{ .name }} bg-gradient{{ with .contrast_color }} text-{{ . }}{{ else }} text-white{{ end }}">.bg-{{ .name }}.bg-gradient</div>
-{{- end -}}
-{{< /colors.inline >}}
-{{< /markdown >}}
-
-## Opacity
-
-{{< added-in "5.1.0" >}}
-
-As of v5.1.0, `background-color` utilities are generated with Sass using CSS variables. This allows for real-time color changes without compilation and dynamic alpha transparency changes.
-
-### How it works
-
-Consider our default `.bg-success` utility.
-
-```css
-.bg-success {
- --bs-bg-opacity: 1;
- background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;
-}
-```
-
-We use an RGB version of our `--bs-success` (with the value of `25, 135, 84`) CSS variable and attached a second CSS variable, `--bs-bg-opacity`, for the alpha transparency (with a default value `1` thanks to a local CSS variable). That means anytime you use `.bg-success` now, your computed `color` value is `rgba(25, 135, 84, 1)`. The local CSS variable inside each `.bg-*` class avoids inheritance issues so nested instances of the utilities don't automatically have a modified alpha transparency.
-
-### Example
-
-To change that opacity, override `--bs-bg-opacity` via custom styles or inline styles.
-
-{{< example >}}
-<div class="bg-success p-2 text-white">This is default success background</div>
-<div class="bg-success p-2" style="--bs-bg-opacity: .5;">This is 50% opacity success background</div>
-{{< /example >}}
-
-Or, choose from any of the `.bg-opacity` utilities:
-
-{{< example >}}
-<div class="bg-success p-2 text-white">This is default success background</div>
-<div class="bg-success p-2 text-white bg-opacity-75">This is 75% opacity success background</div>
-<div class="bg-success p-2 text-dark bg-opacity-50">This is 50% opacity success background</div>
-<div class="bg-success p-2 text-dark bg-opacity-25">This is 25% opacity success background</div>
-<div class="bg-success p-2 text-dark bg-opacity-10">This is 10% opacity success background</div>
-{{< /example >}}
-
-## Sass
-
-In addition to the following Sass functionality, consider reading about our included [CSS custom properties]({{< docsref "/customize/css-variables" >}}) (aka CSS variables) for colors and more.
-
-### Variables
-
-Most `background-color` utilities are generated by our theme colors, reassigned from our generic color palette variables.
-
-{{< scss-docs name="color-variables" file="scss/_variables.scss" >}}
-
-{{< scss-docs name="theme-color-variables" file="scss/_variables.scss" >}}
-
-{{< scss-docs name="variable-gradient" file="scss/_variables.scss" >}}
-
-Grayscale colors are also available, but only a subset are used to generate any utilities.
-
-{{< scss-docs name="gray-color-variables" file="scss/_variables.scss" >}}
-
-### Map
-
-Theme colors are then put into a Sass map so we can loop over them to generate our utilities, component modifiers, and more.
-
-{{< scss-docs name="theme-colors-map" file="scss/_variables.scss" >}}
-
-Grayscale colors are also available as a Sass map. **This map is not used to generate any utilities.**
-
-{{< scss-docs name="gray-colors-map" file="scss/_variables.scss" >}}
-
-RGB colors are generated from a separate Sass map:
-
-{{< scss-docs name="theme-colors-rgb" file="scss/_maps.scss" >}}
-
-And background color opacities build on that with their own map that's consumed by the utilities API:
-
-{{< scss-docs name="utilities-bg-colors" file="scss/_maps.scss" >}}
-
-### Mixins
-
-**No mixins are used to generate our background utilities**, but we do have some additional mixins for other situations where you'd like to create your own gradients.
-
-{{< scss-docs name="gradient-bg-mixin" file="scss/mixins/_gradients.scss" >}}
-
-{{< scss-docs name="gradient-mixins" file="scss/mixins/_gradients.scss" >}}
-
-### Utilities API
-
-Background utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-bg-color" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/borders.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/borders.md
deleted file mode 100644
index 8d850a214..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/borders.md
+++ /dev/null
@@ -1,166 +0,0 @@
----
-layout: docs
-title: Borders
-description: Use border utilities to quickly style the border and border-radius of an element. Great for images, buttons, or any other element.
-group: utilities
-toc: true
----
-
-## Border
-
-Use border utilities to add or remove an element's borders. Choose from all borders or one at a time.
-
-### Additive
-
-Add borders to custom elements:
-
-{{< example class="bd-example-border-utils" >}}
-<span class="border"></span>
-<span class="border-top"></span>
-<span class="border-end"></span>
-<span class="border-bottom"></span>
-<span class="border-start"></span>
-{{< /example >}}
-
-### Subtractive
-
-Or remove borders:
-
-{{< example class="bd-example-border-utils" >}}
-<span class="border border-0"></span>
-<span class="border border-top-0"></span>
-<span class="border border-end-0"></span>
-<span class="border border-bottom-0"></span>
-<span class="border border-start-0"></span>
-{{< /example >}}
-
-## Color
-
-Change the border color using utilities built on our theme colors.
-
-{{< example class="bd-example-border-utils" >}}
-{{< border.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<span class="border border-{{ .name }}"></span>
-{{- end -}}
-{{< /border.inline >}}
-<span class="border border-white"></span>
-{{< /example >}}
-
-Or modify the default `border-color` of a component:
-
-{{< example >}}
-<div class="mb-4">
- <label for="exampleFormControlInput1" class="form-label">Email address</label>
- <input type="email" class="form-control border-success" id="exampleFormControlInput1" placeholder="name@example.com">
-</div>
-
-<div class="h4 pb-2 mb-4 text-danger border-bottom border-danger">
- Dangerous heading
-</div>
-
-<div class="p-3 bg-info bg-opacity-10 border border-info border-start-0 rounded-end">
- Changing border color and width
-</div>
-{{< /example >}}
-
-## Opacity
-
-{{< added-in "5.2.0" >}}
-
-Bootstrap `border-{color}` utilities are generated with Sass using CSS variables. This allows for real-time color changes without compilation and dynamic alpha transparency changes.
-
-### How it works
-
-Consider our default `.border-success` utility.
-
-```css
-.border-success {
- --bs-border-opacity: 1;
- border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;
-}
-```
-
-We use an RGB version of our `--bs-success` (with the value of `25, 135, 84`) CSS variable and attached a second CSS variable, `--bs-border-opacity`, for the alpha transparency (with a default value `1` thanks to a local CSS variable). That means anytime you use `.border-success` now, your computed `color` value is `rgba(25, 135, 84, 1)`. The local CSS variable inside each `.border-*` class avoids inheritance issues so nested instances of the utilities don't automatically have a modified alpha transparency.
-
-### Example
-
-To change that opacity, override `--bs-border-opacity` via custom styles or inline styles.
-
-{{< example >}}
-<div class="border border-success p-2 mb-2">This is default success border</div>
-<div class="border border-success p-2" style="--bs-border-opacity: .5;">This is 50% opacity success border</div>
-{{< /example >}}
-
-Or, choose from any of the `.border-opacity` utilities:
-
-{{< example >}}
-<div class="border border-success p-2 mb-2">This is default success border</div>
-<div class="border border-success p-2 mb-2 border-opacity-75">This is 75% opacity success border</div>
-<div class="border border-success p-2 mb-2 border-opacity-50">This is 50% opacity success border</div>
-<div class="border border-success p-2 mb-2 border-opacity-25">This is 25% opacity success border</div>
-<div class="border border-success p-2 border-opacity-10">This is 10% opacity success border</div>
-{{< /example >}}
-
-## Width
-
-{{< example class="bd-example-border-utils" >}}
-<span class="border border-1"></span>
-<span class="border border-2"></span>
-<span class="border border-3"></span>
-<span class="border border-4"></span>
-<span class="border border-5"></span>
-{{< /example >}}
-
-## Radius
-
-Add classes to an element to easily round its corners.
-
-{{< example class="bd-example-rounded-utils" >}}
-{{< placeholder width="75" height="75" class="rounded" title="Example rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-top" title="Example top rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-end" title="Example right rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-bottom" title="Example bottom rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-start" title="Example left rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-circle" title="Completely round image" >}}
-{{< placeholder width="150" height="75" class="rounded-pill" title="Rounded pill image" >}}
-{{< /example >}}
-
-### Sizes
-
-Use the scaling classes for larger or smaller rounded corners. Sizes range from `0` to `5`, and can be configured by modifying the utilities API.
-
-{{< example class="bd-example-rounded-utils" >}}
-{{< placeholder width="75" height="75" class="rounded-0" title="Example non-rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-1" title="Example small rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-2" title="Example default rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-3" title="Example large rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-4" title="Example larger rounded image" >}}
-{{< placeholder width="75" height="75" class="rounded-5" title="Example extra large rounded image" >}}
-{{< /example >}}
-
-## CSS
-
-### Variables
-
-{{< added-in "5.2.0" >}}
-
-{{< scss-docs name="root-border-var" file="scss/_root.scss" >}}
-
-### Sass variables
-
-{{< scss-docs name="border-variables" file="scss/_variables.scss" >}}
-
-{{< scss-docs name="border-radius-variables" file="scss/_variables.scss" >}}
-
-### Sass mixins
-
-{{< scss-docs name="border-radius-mixins" file="scss/mixins/_border-radius.scss" >}}
-
-### Utilities API
-
-Border utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-borders" file="scss/_utilities.scss" >}}
-
-{{< scss-docs name="utils-border-radius" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/colors.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/colors.md
deleted file mode 100644
index eb917f91c..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/colors.md
+++ /dev/null
@@ -1,113 +0,0 @@
----
-layout: docs
-title: Colors
-description: Convey meaning through `color` with a handful of color utility classes. Includes support for styling links with hover states, too.
-group: utilities
-toc: true
----
-
-## Colors
-
-Colorize text with color utilities. If you want to colorize links, you can use the [`.link-*` helper classes]({{< docsref "/helpers/colored-links" >}}) which have `:hover` and `:focus` states.
-
-{{< example >}}
-{{< colors.inline >}}
-{{- range (index $.Site.Data "theme-colors") }}
-<p class="text-{{ .name }}{{ with .contrast_color }} bg-{{ . }}{{ end }}">.text-{{ .name }}</p>
-{{- end -}}
-{{< /colors.inline >}}
-<p class="text-body">.text-body</p>
-<p class="text-muted">.text-muted</p>
-<p class="text-white bg-dark">.text-white</p>
-<p class="text-black-50">.text-black-50</p>
-<p class="text-white-50 bg-dark">.text-white-50</p>
-{{< /example >}}
-
-{{< callout warning >}}
-**Deprecation:** With the addition of `.text-opacity-*` utilities and CSS variables for text utilities, `.text-black-50` and `.text-white-50` are deprecated as of v5.1.0. They'll be removed in v6.0.0.
-{{< /callout >}}
-
-{{< callout info >}}
-{{< partial "callout-warning-color-assistive-technologies.md" >}}
-{{< /callout >}}
-
-## Opacity
-
-{{< added-in "5.1.0" >}}
-
-As of v5.1.0, text color utilities are generated with Sass using CSS variables. This allows for real-time color changes without compilation and dynamic alpha transparency changes.
-
-### How it works
-
-Consider our default `.text-primary` utility.
-
-```css
-.text-primary {
- --bs-text-opacity: 1;
- color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;
-}
-```
-
-We use an RGB version of our `--bs-primary` (with the value of `13, 110, 253`) CSS variable and attached a second CSS variable, `--bs-text-opacity`, for the alpha transparency (with a default value `1` thanks to a local CSS variable). That means anytime you use `.text-primary` now, your computed `color` value is `rgba(13, 110, 253, 1)`. The local CSS variable inside each `.text-*` class avoids inheritance issues so nested instances of the utilities don't automatically have a modified alpha transparency.
-
-### Example
-
-To change that opacity, override `--bs-text-opacity` via custom styles or inline styles.
-
-{{< example >}}
-<div class="text-primary">This is default primary text</div>
-<div class="text-primary" style="--bs-text-opacity: .5;">This is 50% opacity primary text</div>
-{{< /example >}}
-
-Or, choose from any of the `.text-opacity` utilities:
-
-{{< example >}}
-<div class="text-primary">This is default primary text</div>
-<div class="text-primary text-opacity-75">This is 75% opacity primary text</div>
-<div class="text-primary text-opacity-50">This is 50% opacity primary text</div>
-<div class="text-primary text-opacity-25">This is 25% opacity primary text</div>
-{{< /example >}}
-
-## Specificity
-
-Sometimes contextual classes cannot be applied due to the specificity of another selector. In some cases, a sufficient workaround is to wrap your element's content in a `<div>` or more semantic element with the desired class.
-
-## Sass
-
-In addition to the following Sass functionality, consider reading about our included [CSS custom properties]({{< docsref "/customize/css-variables" >}}) (aka CSS variables) for colors and more.
-
-### Variables
-
-Most `color` utilities are generated by our theme colors, reassigned from our generic color palette variables.
-
-{{< scss-docs name="color-variables" file="scss/_variables.scss" >}}
-
-{{< scss-docs name="theme-color-variables" file="scss/_variables.scss" >}}
-
-Grayscale colors are also available, but only a subset are used to generate any utilities.
-
-{{< scss-docs name="gray-color-variables" file="scss/_variables.scss" >}}
-
-### Map
-
-Theme colors are then put into a Sass map so we can loop over them to generate our utilities, component modifiers, and more.
-
-{{< scss-docs name="theme-colors-map" file="scss/_variables.scss" >}}
-
-Grayscale colors are also available as a Sass map. **This map is not used to generate any utilities.**
-
-{{< scss-docs name="gray-colors-map" file="scss/_variables.scss" >}}
-
-RGB colors are generated from a separate Sass map:
-
-{{< scss-docs name="theme-colors-rgb" file="scss/_maps.scss" >}}
-
-And color opacities build on that with their own map that's consumed by the utilities API:
-
-{{< scss-docs name="utilities-text-colors" file="scss/_maps.scss" >}}
-
-### Utilities API
-
-Color utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-color" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/display.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/display.md
deleted file mode 100644
index 5ed825acb..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/display.md
+++ /dev/null
@@ -1,112 +0,0 @@
----
-layout: docs
-title: Display property
-description: Quickly and responsively toggle the display value of components and more with our display utilities. Includes support for some of the more common values, as well as some extras for controlling display when printing.
-group: utilities
-toc: true
----
-
-## How it works
-
-Change the value of the [`display` property](https://developer.mozilla.org/en-US/docs/Web/CSS/display) with our responsive display utility classes. We purposely support only a subset of all possible values for `display`. Classes can be combined for various effects as you need.
-
-## Notation
-
-Display utility classes that apply to all [breakpoints]({{< docsref "/layout/breakpoints" >}}), from `xs` to `xxl`, have no breakpoint abbreviation in them. This is because those classes are applied from `min-width: 0;` and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.
-
-As such, the classes are named using the format:
-
-- `.d-{value}` for `xs`
-- `.d-{breakpoint}-{value}` for `sm`, `md`, `lg`, `xl`, and `xxl`.
-
-Where *value* is one of:
-
-- `none`
-- `inline`
-- `inline-block`
-- `block`
-- `grid`
-- `table`
-- `table-cell`
-- `table-row`
-- `flex`
-- `inline-flex`
-
-The display values can be altered by changing the `display` values defined in `$utilities` and recompiling the SCSS.
-
-The media queries affect screen widths with the given breakpoint *or larger*. For example, `.d-lg-none` sets `display: none;` on `lg`, `xl`, and `xxl` screens.
-
-## Examples
-
-{{< example >}}
-<div class="d-inline p-2 text-bg-primary">d-inline</div>
-<div class="d-inline p-2 text-bg-dark">d-inline</div>
-{{< /example >}}
-
-{{< example >}}
-<span class="d-block p-2 text-bg-primary">d-block</span>
-<span class="d-block p-2 text-bg-dark">d-block</span>
-{{< /example >}}
-
-## Hiding elements
-
-For faster mobile-friendly development, use responsive display classes for showing and hiding elements by device. Avoid creating entirely different versions of the same site, instead hide elements responsively for each screen size.
-
-To hide elements simply use the `.d-none` class or one of the `.d-{sm,md,lg,xl,xxl}-none` classes for any responsive screen variation.
-
-To show an element only on a given interval of screen sizes you can combine one `.d-*-none` class with a `.d-*-*` class, for example `.d-none .d-md-block .d-xl-none .d-xxl-none` will hide the element for all screen sizes except on medium and large devices.
-
-{{< bs-table >}}
-| Screen size | Class |
-| --- | --- |
-| Hidden on all | `.d-none` |
-| Hidden only on xs | `.d-none .d-sm-block` |
-| Hidden only on sm | `.d-sm-none .d-md-block` |
-| Hidden only on md | `.d-md-none .d-lg-block` |
-| Hidden only on lg | `.d-lg-none .d-xl-block` |
-| Hidden only on xl | `.d-xl-none` |
-| Hidden only on xxl | `.d-xxl-none .d-xxl-block` |
-| Visible on all | `.d-block` |
-| Visible only on xs | `.d-block .d-sm-none` |
-| Visible only on sm | `.d-none .d-sm-block .d-md-none` |
-| Visible only on md | `.d-none .d-md-block .d-lg-none` |
-| Visible only on lg | `.d-none .d-lg-block .d-xl-none` |
-| Visible only on xl | `.d-none .d-xl-block .d-xxl-none` |
-| Visible only on xxl | `.d-none .d-xxl-block` |
-{{< /bs-table >}}
-
-{{< example >}}
-<div class="d-lg-none">hide on lg and wider screens</div>
-<div class="d-none d-lg-block">hide on screens smaller than lg</div>
-{{< /example >}}
-
-## Display in print
-
-Change the `display` value of elements when printing with our print display utility classes. Includes support for the same `display` values as our responsive `.d-*` utilities.
-
-- `.d-print-none`
-- `.d-print-inline`
-- `.d-print-inline-block`
-- `.d-print-block`
-- `.d-print-grid`
-- `.d-print-table`
-- `.d-print-table-row`
-- `.d-print-table-cell`
-- `.d-print-flex`
-- `.d-print-inline-flex`
-
-The print and display classes can be combined.
-
-{{< example >}}
-<div class="d-print-none">Screen Only (Hide on print only)</div>
-<div class="d-none d-print-block">Print Only (Hide on screen only)</div>
-<div class="d-none d-lg-block d-print-block">Hide up to large on screen, but always show on print</div>
-{{< /example >}}
-
-## Sass
-
-### Utilities API
-
-Display utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-display" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/flex.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/flex.md
deleted file mode 100644
index 567befe0e..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/flex.md
+++ /dev/null
@@ -1,666 +0,0 @@
----
-layout: docs
-title: Flex
-description: Quickly manage the layout, alignment, and sizing of grid columns, navigation, components, and more with a full suite of responsive flexbox utilities. For more complex implementations, custom CSS may be necessary.
-group: utilities
-toc: true
----
-
-## Enable flex behaviors
-
-Apply `display` utilities to create a flexbox container and transform **direct children elements** into flex items. Flex containers and items are able to be modified further with additional flex properties.
-
-{{< example class="bd-example-flex" >}}
-<div class="d-flex p-2">I'm a flexbox container!</div>
-{{< /example >}}
-
-{{< example class="bd-example-flex" >}}
-<div class="d-inline-flex p-2">I'm an inline flexbox container!</div>
-{{< /example >}}
-
-Responsive variations also exist for `.d-flex` and `.d-inline-flex`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $.Site.Data.breakpoints }}
-- `.d{{ .abbr }}-flex`
-- `.d{{ .abbr }}-inline-flex`
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Direction
-
-Set the direction of flex items in a flex container with direction utilities. In most cases you can omit the horizontal class here as the browser default is `row`. However, you may encounter situations where you needed to explicitly set this value (like responsive layouts).
-
-Use `.flex-row` to set a horizontal direction (the browser default), or `.flex-row-reverse` to start the horizontal direction from the opposite side.
-
-{{< example class="bd-example-flex" >}}
-<div class="d-flex flex-row mb-3">
- <div class="p-2">Flex item 1</div>
- <div class="p-2">Flex item 2</div>
- <div class="p-2">Flex item 3</div>
-</div>
-<div class="d-flex flex-row-reverse">
- <div class="p-2">Flex item 1</div>
- <div class="p-2">Flex item 2</div>
- <div class="p-2">Flex item 3</div>
-</div>
-{{< /example >}}
-
-Use `.flex-column` to set a vertical direction, or `.flex-column-reverse` to start the vertical direction from the opposite side.
-
-{{< example class="bd-example-flex" >}}
-<div class="d-flex flex-column mb-3">
- <div class="p-2">Flex item 1</div>
- <div class="p-2">Flex item 2</div>
- <div class="p-2">Flex item 3</div>
-</div>
-<div class="d-flex flex-column-reverse">
- <div class="p-2">Flex item 1</div>
- <div class="p-2">Flex item 2</div>
- <div class="p-2">Flex item 3</div>
-</div>
-{{< /example >}}
-
-Responsive variations also exist for `flex-direction`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $.Site.Data.breakpoints }}
-- `.flex{{ .abbr }}-row`
-- `.flex{{ .abbr }}-row-reverse`
-- `.flex{{ .abbr }}-column`
-- `.flex{{ .abbr }}-column-reverse`
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Justify content
-
-Use `justify-content` utilities on flexbox containers to change the alignment of flex items on the main axis (the x-axis to start, y-axis if `flex-direction: column`). Choose from `start` (browser default), `end`, `center`, `between`, `around`, or `evenly`.
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex justify-content-start mb-3">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex justify-content-end mb-3">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex justify-content-center mb-3">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex justify-content-between mb-3">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex justify-content-around mb-3">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex justify-content-evenly">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex justify-content-start">...</div>
-<div class="d-flex justify-content-end">...</div>
-<div class="d-flex justify-content-center">...</div>
-<div class="d-flex justify-content-between">...</div>
-<div class="d-flex justify-content-around">...</div>
-<div class="d-flex justify-content-evenly">...</div>
-```
-
-Responsive variations also exist for `justify-content`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $.Site.Data.breakpoints }}
-- `.justify-content{{ .abbr }}-start`
-- `.justify-content{{ .abbr }}-end`
-- `.justify-content{{ .abbr }}-center`
-- `.justify-content{{ .abbr }}-between`
-- `.justify-content{{ .abbr }}-around`
-- `.justify-content{{ .abbr }}-evenly`
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Align items
-
-Use `align-items` utilities on flexbox containers to change the alignment of flex items on the cross axis (the y-axis to start, x-axis if `flex-direction: column`). Choose from `start`, `end`, `center`, `baseline`, or `stretch` (browser default).
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex align-items-start mb-3" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex align-items-end mb-3" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex align-items-center mb-3" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex align-items-baseline mb-3" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex align-items-stretch" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex align-items-start">...</div>
-<div class="d-flex align-items-end">...</div>
-<div class="d-flex align-items-center">...</div>
-<div class="d-flex align-items-baseline">...</div>
-<div class="d-flex align-items-stretch">...</div>
-```
-
-Responsive variations also exist for `align-items`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $.Site.Data.breakpoints }}
-- `.align-items{{ .abbr }}-start`
-- `.align-items{{ .abbr }}-end`
-- `.align-items{{ .abbr }}-center`
-- `.align-items{{ .abbr }}-baseline`
-- `.align-items{{ .abbr }}-stretch`
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Align self
-
-Use `align-self` utilities on flexbox items to individually change their alignment on the cross axis (the y-axis to start, x-axis if `flex-direction: column`). Choose from the same options as `align-items`: `start`, `end`, `center`, `baseline`, or `stretch` (browser default).
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex mb-3" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="align-self-start p-2">Aligned flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex mb-3" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="align-self-end p-2">Aligned flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex mb-3" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="align-self-center p-2">Aligned flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex mb-3" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="align-self-baseline p-2">Aligned flex item</div>
- <div class="p-2">Flex item</div>
- </div>
- <div class="d-flex" style="height: 100px">
- <div class="p-2">Flex item</div>
- <div class="align-self-stretch p-2">Aligned flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="align-self-start">Aligned flex item</div>
-<div class="align-self-end">Aligned flex item</div>
-<div class="align-self-center">Aligned flex item</div>
-<div class="align-self-baseline">Aligned flex item</div>
-<div class="align-self-stretch">Aligned flex item</div>
-```
-
-Responsive variations also exist for `align-self`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $.Site.Data.breakpoints }}
-- `.align-self{{ .abbr }}-start`
-- `.align-self{{ .abbr }}-end`
-- `.align-self{{ .abbr }}-center`
-- `.align-self{{ .abbr }}-baseline`
-- `.align-self{{ .abbr }}-stretch`
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Fill
-
-Use the `.flex-fill` class on a series of sibling elements to force them into widths equal to their content (or equal widths if their content does not surpass their border-boxes) while taking up all available horizontal space.
-
-{{< example class="bd-example-flex" >}}
-<div class="d-flex">
- <div class="p-2 flex-fill">Flex item with a lot of content</div>
- <div class="p-2 flex-fill">Flex item</div>
- <div class="p-2 flex-fill">Flex item</div>
-</div>
-{{< /example >}}
-
-Responsive variations also exist for `flex-fill`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $.Site.Data.breakpoints }}
-- `.flex{{ .abbr }}-fill`
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Grow and shrink
-
-Use `.flex-grow-*` utilities to toggle a flex item's ability to grow to fill available space. In the example below, the `.flex-grow-1` elements uses all available space it can, while allowing the remaining two flex items their necessary space.
-
-{{< example class="bd-example-flex" >}}
-<div class="d-flex">
- <div class="p-2 flex-grow-1">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Third flex item</div>
-</div>
-{{< /example >}}
-
-Use `.flex-shrink-*` utilities to toggle a flex item's ability to shrink if necessary. In the example below, the second flex item with `.flex-shrink-1` is forced to wrap its contents to a new line, "shrinking" to allow more space for the previous flex item with `.w-100`.
-
-{{< example class="bd-example-flex" >}}
-<div class="d-flex">
- <div class="p-2 w-100">Flex item</div>
- <div class="p-2 flex-shrink-1">Flex item</div>
-</div>
-{{< /example >}}
-
-Responsive variations also exist for `flex-grow` and `flex-shrink`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $.Site.Data.breakpoints }}
-- `.flex{{ .abbr }}-{grow|shrink}-0`
-- `.flex{{ .abbr }}-{grow|shrink}-1`
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Auto margins
-
-Flexbox can do some pretty awesome things when you mix flex alignments with auto margins. Shown below are three examples of controlling flex items via auto margins: default (no auto margin), pushing two items to the right (`.me-auto`), and pushing two items to the left (`.ms-auto`).
-
-{{< example class="bd-example-flex" >}}
-<div class="d-flex mb-3">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
-</div>
-
-<div class="d-flex mb-3">
- <div class="me-auto p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
-</div>
-
-<div class="d-flex mb-3">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="ms-auto p-2">Flex item</div>
-</div>
-{{< /example >}}
-
-### With align-items
-
-Vertically move one flex item to the top or bottom of a container by mixing `align-items`, `flex-direction: column`, and `margin-top: auto` or `margin-bottom: auto`.
-
-{{< example class="bd-example-flex" >}}
-<div class="d-flex align-items-start flex-column mb-3" style="height: 200px;">
- <div class="mb-auto p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
-</div>
-
-<div class="d-flex align-items-end flex-column mb-3" style="height: 200px;">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="mt-auto p-2">Flex item</div>
-</div>
-{{< /example >}}
-
-## Wrap
-
-Change how flex items wrap in a flex container. Choose from no wrapping at all (the browser default) with `.flex-nowrap`, wrapping with `.flex-wrap`, or reverse wrapping with `.flex-wrap-reverse`.
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex flex-nowrap" style="width: 8rem;">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex flex-nowrap">
- ...
-</div>
-```
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex flex-wrap">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex flex-wrap">
- ...
-</div>
-```
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex flex-wrap-reverse">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex flex-wrap-reverse">
- ...
-</div>
-```
-
-
-Responsive variations also exist for `flex-wrap`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $.Site.Data.breakpoints }}
-- `.flex{{ .abbr }}-nowrap`
-- `.flex{{ .abbr }}-wrap`
-- `.flex{{ .abbr }}-wrap-reverse`
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Order
-
-Change the _visual_ order of specific flex items with a handful of `order` utilities. We only provide options for making an item first or last, as well as a reset to use the DOM order. As `order` takes any integer value from 0 to 5, add custom CSS for any additional values needed.
-
-{{< example class="bd-example-flex" >}}
-<div class="d-flex flex-nowrap">
- <div class="order-3 p-2">First flex item</div>
- <div class="order-2 p-2">Second flex item</div>
- <div class="order-1 p-2">Third flex item</div>
-</div>
-{{< /example >}}
-
-Responsive variations also exist for `order`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $bp := $.Site.Data.breakpoints -}}
-{{- range (seq 0 5) }}
-- `.order{{ $bp.abbr }}-{{ . }}`
-{{- end -}}
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-Additionally there are also responsive `.order-first` and `.order-last` classes that change the `order` of an element by applying `order: -1` and `order: 6`, respectively.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $bp := $.Site.Data.breakpoints -}}
-{{- range (slice "first" "last") }}
-- `.order{{ $bp.abbr }}-{{ . }}`
-{{- end -}}
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Align content
-
-Use `align-content` utilities on flexbox containers to align flex items *together* on the cross axis. Choose from `start` (browser default), `end`, `center`, `between`, `around`, or `stretch`. To demonstrate these utilities, we've enforced `flex-wrap: wrap` and increased the number of flex items.
-
-**Heads up!** This property has no effect on single rows of flex items.
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex align-content-start flex-wrap mb-3" style="height: 200px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex align-content-start flex-wrap">
- ...
-</div>
-```
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex align-content-end flex-wrap mb-3" style="height: 200px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex align-content-end flex-wrap">...</div>
-```
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex align-content-center flex-wrap mb-3" style="height: 200px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex align-content-center flex-wrap">...</div>
-```
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex align-content-between flex-wrap mb-3" style="height: 200px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex align-content-between flex-wrap">...</div>
-```
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex align-content-around flex-wrap mb-3" style="height: 200px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex align-content-around flex-wrap">...</div>
-```
-
-<div class="bd-example bd-example-flex">
- <div class="d-flex align-content-stretch flex-wrap mb-3" style="height: 200px">
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- <div class="p-2">Flex item</div>
- </div>
-</div>
-
-```html
-<div class="d-flex align-content-stretch flex-wrap">...</div>
-```
-
-Responsive variations also exist for `align-content`.
-
-{{< markdown >}}
-{{< flex.inline >}}
-{{- range $.Site.Data.breakpoints }}
-- `.align-content{{ .abbr }}-start`
-- `.align-content{{ .abbr }}-end`
-- `.align-content{{ .abbr }}-center`
-- `.align-content{{ .abbr }}-between`
-- `.align-content{{ .abbr }}-around`
-- `.align-content{{ .abbr }}-stretch`
-{{- end -}}
-{{< /flex.inline >}}
-{{< /markdown >}}
-
-## Media object
-
-Looking to replicate the [media object component](https://getbootstrap.com/docs/4.6/components/media-object/) from Bootstrap 4? Recreate it in no time with a few flex utilities that allow even more flexibility and customization than before.
-
-{{< example >}}
-<div class="d-flex">
- <div class="flex-shrink-0">
- {{< placeholder width="100" height="100" color="#999" background="#e5e5e5" text="Image" >}}
- </div>
- <div class="flex-grow-1 ms-3">
- This is some content from a media component. You can replace this with any content and adjust it as needed.
- </div>
-</div>
-{{< /example >}}
-
-And say you want to vertically center the content next to the image:
-
-{{< example >}}
-<div class="d-flex align-items-center">
- <div class="flex-shrink-0">
- {{< placeholder width="100" height="100" color="#999" background="#e5e5e5" text="Image" >}}
- </div>
- <div class="flex-grow-1 ms-3">
- This is some content from a media component. You can replace this with any content and adjust it as needed.
- </div>
-</div>
-{{< /example >}}
-
-## Sass
-
-### Utilities API
-
-Flexbox utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-flex" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/interactions.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/interactions.md
deleted file mode 100644
index 35ea2b995..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/interactions.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-layout: docs
-title: Interactions
-description: Utility classes that change how users interact with contents of a website.
-group: utilities
-toc: false
----
-
-## Text selection
-
-Change the way in which the content is selected when the user interacts with it.
-
-{{< example >}}
-<p class="user-select-all">This paragraph will be entirely selected when clicked by the user.</p>
-<p class="user-select-auto">This paragraph has default select behavior.</p>
-<p class="user-select-none">This paragraph will not be selectable when clicked by the user.</p>
-{{< /example >}}
-
-## Pointer events
-
-Bootstrap provides `.pe-none` and `.pe-auto` classes to prevent or add element interactions.
-
-{{< example >}}
-<p><a href="#" class="pe-none" tabindex="-1" aria-disabled="true">This link</a> can not be clicked.</p>
-<p><a href="#" class="pe-auto">This link</a> can be clicked (this is default behavior).</p>
-<p class="pe-none"><a href="#" tabindex="-1" aria-disabled="true">This link</a> can not be clicked because the <code>pointer-events</code> property is inherited from its parent. However, <a href="#" class="pe-auto">this link</a> has a <code>pe-auto</code> class and can be clicked.</p>
-{{< /example >}}
-
-The `.pe-none` class (and the `pointer-events` CSS property it sets) only prevents interactions with a pointer (mouse, stylus, touch). Links and controls with `.pe-none` are, by default, still focusable and actionable for keyboard users. To ensure that they are completely neutralized even for keyboard users, you may need to add further attributes such as `tabindex="-1"` (to prevent them from receiving keyboard focus) and `aria-disabled="true"` (to convey the fact they are effectively disabled to assistive technologies), and possibly use JavaScript to completely prevent them from being actionable.
-
-If possible, the simpler solution is:
-
-- For form controls, add the `disabled` HTML attribute.
-* For links, remove the `href` attribute, making it a non-interactive anchor or placeholder link.
-
-## Sass
-
-### Utilities API
-
-Interaction utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-interaction" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/overflow.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/overflow.md
deleted file mode 100644
index a36374cd5..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/overflow.md
+++ /dev/null
@@ -1,40 +0,0 @@
----
-layout: docs
-title: Overflow
-description: Use these shorthand utilities for quickly configuring how content overflows an element.
-group: utilities
----
-
-Adjust the `overflow` property on the fly with four default values and classes. These classes are not responsive by default.
-
-<div class="bd-example d-md-flex">
- <div class="overflow-auto p-3 mb-3 mb-md-0 me-md-3 bg-light" style="max-width: 260px; max-height: 100px;">
- This is an example of using <code>.overflow-auto</code> on an element with set width and height dimensions. By design, this content will vertically scroll.
- </div>
- <div class="overflow-hidden p-3 mb-3 mb-md-0 me-md-3 bg-light" style="max-width: 260px; max-height: 100px;">
- This is an example of using <code>.overflow-hidden</code> on an element with set width and height dimensions.
- </div>
- <div class="overflow-visible p-3 mb-3 mb-md-0 me-md-3 bg-light" style="max-width: 260px; max-height: 100px;">
- This is an example of using <code>.overflow-visible</code> on an element with set width and height dimensions.
- </div>
- <div class="overflow-scroll p-3 bg-light" style="max-width: 260px; max-height: 100px;">
- This is an example of using <code>.overflow-scroll</code> on an element with set width and height dimensions.
- </div>
-</div>
-
-```html
-<div class="overflow-auto">...</div>
-<div class="overflow-hidden">...</div>
-<div class="overflow-visible">...</div>
-<div class="overflow-scroll">...</div>
-```
-
-Using Sass variables, you may customize the overflow utilities by changing the `$overflows` variable in `_variables.scss`.
-
-## Sass
-
-### Utilities API
-
-Overflow utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-overflow" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/position.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/position.md
deleted file mode 100644
index 5a6e849cc..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/position.md
+++ /dev/null
@@ -1,130 +0,0 @@
----
-layout: docs
-title: Position
-description: Use these shorthand utilities for quickly configuring the position of an element.
-group: utilities
-toc: true
----
-
-## Position values
-
-Quick positioning classes are available, though they are not responsive.
-
-```html
-<div class="position-static">...</div>
-<div class="position-relative">...</div>
-<div class="position-absolute">...</div>
-<div class="position-fixed">...</div>
-<div class="position-sticky">...</div>
-```
-
-## Arrange elements
-
-Arrange elements easily with the edge positioning utilities. The format is `{property}-{position}`.
-
-Where *property* is one of:
-
-- `top` - for the vertical `top` position
-- `start` - for the horizontal `left` position (in LTR)
-- `bottom` - for the vertical `bottom` position
-- `end` - for the horizontal `right` position (in LTR)
-
-Where *position* is one of:
-
-- `0` - for `0` edge position
-- `50` - for `50%` edge position
-- `100` - for `100%` edge position
-
-(You can add more position values by adding entries to the `$position-values` Sass map variable.)
-
-{{< example class="bd-example-position-utils" >}}
-<div class="position-relative">
- <div class="position-absolute top-0 start-0"></div>
- <div class="position-absolute top-0 end-0"></div>
- <div class="position-absolute top-50 start-50"></div>
- <div class="position-absolute bottom-50 end-50"></div>
- <div class="position-absolute bottom-0 start-0"></div>
- <div class="position-absolute bottom-0 end-0"></div>
-</div>
-{{< /example >}}
-
-## Center elements
-
-In addition, you can also center the elements with the transform utility class `.translate-middle`.
-
-This class applies the transformations `translateX(-50%)` and `translateY(-50%)` to the element which, in combination with the edge positioning utilities, allows you to absolute center an element.
-
-{{< example class="bd-example-position-utils" >}}
-<div class="position-relative">
- <div class="position-absolute top-0 start-0 translate-middle"></div>
- <div class="position-absolute top-0 start-50 translate-middle"></div>
- <div class="position-absolute top-0 start-100 translate-middle"></div>
- <div class="position-absolute top-50 start-0 translate-middle"></div>
- <div class="position-absolute top-50 start-50 translate-middle"></div>
- <div class="position-absolute top-50 start-100 translate-middle"></div>
- <div class="position-absolute top-100 start-0 translate-middle"></div>
- <div class="position-absolute top-100 start-50 translate-middle"></div>
- <div class="position-absolute top-100 start-100 translate-middle"></div>
-</div>
-{{< /example >}}
-
-By adding `.translate-middle-x` or `.translate-middle-y` classes, elements can be positioned only in horizontal or vertical direction.
-
-{{< example class="bd-example-position-utils" >}}
-<div class="position-relative">
- <div class="position-absolute top-0 start-0"></div>
- <div class="position-absolute top-0 start-50 translate-middle-x"></div>
- <div class="position-absolute top-0 end-0"></div>
- <div class="position-absolute top-50 start-0 translate-middle-y"></div>
- <div class="position-absolute top-50 start-50 translate-middle"></div>
- <div class="position-absolute top-50 end-0 translate-middle-y"></div>
- <div class="position-absolute bottom-0 start-0"></div>
- <div class="position-absolute bottom-0 start-50 translate-middle-x"></div>
- <div class="position-absolute bottom-0 end-0"></div>
-</div>
-{{< /example >}}
-
-## Examples
-
-Here are some real life examples of these classes:
-
-{{< example class="bd-example-position-examples d-flex justify-content-around" >}}
-<button type="button" class="btn btn-primary position-relative">
- Mails <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-secondary">+99 <span class="visually-hidden">unread messages</span></span>
-</button>
-
-<button type="button" class="btn btn-dark position-relative">
- Marker <svg width="1em" height="1em" viewBox="0 0 16 16" class="position-absolute top-100 start-50 translate-middle mt-1" fill="#212529" xmlns="http://www.w3.org/2000/svg"><path d="M7.247 11.14L2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z"/></svg>
-</button>
-
-<button type="button" class="btn btn-primary position-relative">
- Alerts <span class="position-absolute top-0 start-100 translate-middle badge border border-light rounded-circle bg-danger p-2"><span class="visually-hidden">unread messages</span></span>
-</button>
-{{< /example >}}
-
-You can use these classes with existing components to create new ones. Remember that you can extend its functionality by adding entries to the `$position-values` variable.
-
-{{< example class="bd-example-position-examples" >}}
-<div class="position-relative m-4">
- <div class="progress" style="height: 1px;">
- <div class="progress-bar" role="progressbar" aria-label="Progress" style="width: 50%;" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
- </div>
- <button type="button" class="position-absolute top-0 start-0 translate-middle btn btn-sm btn-primary rounded-pill" style="width: 2rem; height:2rem;">1</button>
- <button type="button" class="position-absolute top-0 start-50 translate-middle btn btn-sm btn-primary rounded-pill" style="width: 2rem; height:2rem;">2</button>
- <button type="button" class="position-absolute top-0 start-100 translate-middle btn btn-sm btn-secondary rounded-pill" style="width: 2rem; height:2rem;">3</button>
-</div>
-{{< /example >}}
-
-## Sass
-
-### Maps
-
-Default position utility values are declared in a Sass map, then used to generate our utilities.
-
-{{< scss-docs name="position-map" file="scss/_variables.scss" >}}
-
-### Utilities API
-
-Position utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-position" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/shadows.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/shadows.md
deleted file mode 100644
index bb5ef44ab..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/shadows.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-layout: docs
-title: Shadows
-description: Add or remove shadows to elements with box-shadow utilities.
-group: utilities
-toc: true
----
-
-## Examples
-
-While shadows on components are disabled by default in Bootstrap and can be enabled via `$enable-shadows`, you can also quickly add or remove a shadow with our `box-shadow` utility classes. Includes support for `.shadow-none` and three default sizes (which have associated variables to match).
-
-{{< example >}}
-<div class="shadow-none p-3 mb-5 bg-light rounded">No shadow</div>
-<div class="shadow-sm p-3 mb-5 bg-body rounded">Small shadow</div>
-<div class="shadow p-3 mb-5 bg-body rounded">Regular shadow</div>
-<div class="shadow-lg p-3 mb-5 bg-body rounded">Larger shadow</div>
-{{< /example >}}
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="box-shadow-variables" file="scss/_variables.scss" >}}
-
-### Utilities API
-
-Shadow utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-shadow" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/sizing.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/sizing.md
deleted file mode 100644
index 962575ffe..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/sizing.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-layout: docs
-title: Sizing
-description: Easily make an element as wide or as tall with our width and height utilities.
-group: utilities
-toc: true
----
-
-## Relative to the parent
-
-Width and height utilities are generated from the utility API in `_utilities.scss`. Includes support for `25%`, `50%`, `75%`, `100%`, and `auto` by default. Modify those values as you need to generate different utilities here.
-
-{{< example >}}
-<div class="w-25 p-3" style="background-color: #eee;">Width 25%</div>
-<div class="w-50 p-3" style="background-color: #eee;">Width 50%</div>
-<div class="w-75 p-3" style="background-color: #eee;">Width 75%</div>
-<div class="w-100 p-3" style="background-color: #eee;">Width 100%</div>
-<div class="w-auto p-3" style="background-color: #eee;">Width auto</div>
-{{< /example >}}
-
-{{< example >}}
-<div style="height: 100px; background-color: rgba(255,0,0,0.1);">
- <div class="h-25 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 25%</div>
- <div class="h-50 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 50%</div>
- <div class="h-75 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 75%</div>
- <div class="h-100 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 100%</div>
- <div class="h-auto d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height auto</div>
-</div>
-{{< /example >}}
-
-You can also use `max-width: 100%;` and `max-height: 100%;` utilities as needed.
-
-{{< example >}}
-{{< placeholder width="100%" height="100" class="mw-100" text="Max-width 100%" >}}
-{{< /example >}}
-
-{{< example >}}
-<div style="height: 100px; background-color: rgba(255,0,0,.1);">
- <div class="mh-100" style="width: 100px; height: 200px; background-color: rgba(0,0,255,.1);">Max-height 100%</div>
-</div>
-{{< /example >}}
-
-## Relative to the viewport
-
-You can also use utilities to set the width and height relative to the viewport.
-
-```html
-<div class="min-vw-100">Min-width 100vw</div>
-<div class="min-vh-100">Min-height 100vh</div>
-<div class="vw-100">Width 100vw</div>
-<div class="vh-100">Height 100vh</div>
-```
-
-## Sass
-
-### Utilities API
-
-Sizing utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-sizing" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/spacing.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/spacing.md
deleted file mode 100644
index 1e5f6d32f..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/spacing.md
+++ /dev/null
@@ -1,127 +0,0 @@
----
-layout: docs
-title: Spacing
-description: Bootstrap includes a wide range of shorthand responsive margin, padding, and gap utility classes to modify an element's appearance.
-group: utilities
-toc: true
----
-
-## Margin and padding
-
-Assign responsive-friendly `margin` or `padding` values to an element or a subset of its sides with shorthand classes. Includes support for individual properties, all properties, and vertical and horizontal properties. Classes are built from a default Sass map ranging from `.25rem` to `3rem`.
-
-{{< callout >}}
-**Using the CSS Grid layout module?** Consider using [the gap utility](#gap) instead.
-{{< /callout >}}
-
-### Notation
-
-Spacing utilities that apply to all breakpoints, from `xs` to `xxl`, have no breakpoint abbreviation in them. This is because those classes are applied from `min-width: 0` and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.
-
-The classes are named using the format `{property}{sides}-{size}` for `xs` and `{property}{sides}-{breakpoint}-{size}` for `sm`, `md`, `lg`, `xl`, and `xxl`.
-
-Where *property* is one of:
-
-- `m` - for classes that set `margin`
-- `p` - for classes that set `padding`
-
-Where *sides* is one of:
-
-- `t` - for classes that set `margin-top` or `padding-top`
-- `b` - for classes that set `margin-bottom` or `padding-bottom`
-- `s` - (start) for classes that set `margin-left` or `padding-left` in LTR, `margin-right` or `padding-right` in RTL
-- `e` - (end) for classes that set `margin-right` or `padding-right` in LTR, `margin-left` or `padding-left` in RTL
-- `x` - for classes that set both `*-left` and `*-right`
-- `y` - for classes that set both `*-top` and `*-bottom`
-- blank - for classes that set a `margin` or `padding` on all 4 sides of the element
-
-Where *size* is one of:
-
-- `0` - for classes that eliminate the `margin` or `padding` by setting it to `0`
-- `1` - (by default) for classes that set the `margin` or `padding` to `$spacer * .25`
-- `2` - (by default) for classes that set the `margin` or `padding` to `$spacer * .5`
-- `3` - (by default) for classes that set the `margin` or `padding` to `$spacer`
-- `4` - (by default) for classes that set the `margin` or `padding` to `$spacer * 1.5`
-- `5` - (by default) for classes that set the `margin` or `padding` to `$spacer * 3`
-- `auto` - for classes that set the `margin` to auto
-
-(You can add more sizes by adding entries to the `$spacers` Sass map variable.)
-
-### Examples
-
-Here are some representative examples of these classes:
-
-```scss
-.mt-0 {
- margin-top: 0 !important;
-}
-
-.ms-1 {
- margin-left: ($spacer * .25) !important;
-}
-
-.px-2 {
- padding-left: ($spacer * .5) !important;
- padding-right: ($spacer * .5) !important;
-}
-
-.p-3 {
- padding: $spacer !important;
-}
-```
-
-### Horizontal centering
-
-Additionally, Bootstrap also includes an `.mx-auto` class for horizontally centering fixed-width block level content—that is, content that has `display: block` and a `width` set—by setting the horizontal margins to `auto`.
-
-<div class="bd-example">
- <div class="mx-auto" style="width: 200px; background-color: rgba(86,61,124,.15);">
- Centered element
- </div>
-</div>
-
-```html
-<div class="mx-auto" style="width: 200px;">
- Centered element
-</div>
-```
-
-## Negative margin
-
-In CSS, `margin` properties can utilize negative values (`padding` cannot). These negative margins are **disabled by default**, but can be enabled in Sass by setting `$enable-negative-margins: true`.
-
-The syntax is nearly the same as the default, positive margin utilities, but with the addition of `n` before the requested size. Here's an example class that's the opposite of `.mt-1`:
-
-```scss
-.mt-n1 {
- margin-top: -0.25rem !important;
-}
-```
-
-## Gap
-
-When using `display: grid`, you can make use of `gap` utilities on the parent grid container. This can save on having to add margin utilities to individual grid items (children of a `display: grid` container). Gap utilities are responsive by default, and are generated via our utilities API, based on the `$spacers` Sass map.
-
-{{< example html >}}
-<div class="d-grid gap-3">
- <div class="p-2 bg-light border">Grid item 1</div>
- <div class="p-2 bg-light border">Grid item 2</div>
- <div class="p-2 bg-light border">Grid item 3</div>
-</div>
-{{< /example >}}
-
-Support includes responsive options for all of Bootstrap's grid breakpoints, as well as six sizes from the `$spacers` map (`0`–`5`). There is no `.gap-auto` utility class as it's effectively the same as `.gap-0`.
-
-## Sass
-
-### Maps
-
-Spacing utilities are declared via Sass map and then generated with our utilities API.
-
-{{< scss-docs name="spacer-variables-maps" file="scss/_variables.scss" >}}
-
-### Utilities API
-
-Spacing utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-spacing" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/text.md b/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/text.md
deleted file mode 100644
index 060194f1b..000000000
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/text.md
+++ /dev/null
@@ -1,155 +0,0 @@
----
-layout: docs
-title: Text
-description: Documentation and examples for common text utilities to control alignment, wrapping, weight, and more.
-group: utilities
-toc: true
----
-
-## Text alignment
-
-Easily realign text to components with text alignment classes. For start, end, and center alignment, responsive classes are available that use the same viewport width breakpoints as the grid system.
-
-{{< example >}}
-<p class="text-start">Start aligned text on all viewport sizes.</p>
-<p class="text-center">Center aligned text on all viewport sizes.</p>
-<p class="text-end">End aligned text on all viewport sizes.</p>
-
-<p class="text-sm-start">Start aligned text on viewports sized SM (small) or wider.</p>
-<p class="text-md-start">Start aligned text on viewports sized MD (medium) or wider.</p>
-<p class="text-lg-start">Start aligned text on viewports sized LG (large) or wider.</p>
-<p class="text-xl-start">Start aligned text on viewports sized XL (extra-large) or wider.</p>
-{{< /example >}}
-
-{{< callout info >}}
-Note that we don't provide utility classes for justified text. While, aesthetically, justified text might look more appealing, it does make word-spacing more random and therefore harder to read.
-{{< /callout >}}
-
-## Text wrapping and overflow
-
-Wrap text with a `.text-wrap` class.
-
-{{< example >}}
-<div class="badge bg-primary text-wrap" style="width: 6rem;">
- This text should wrap.
-</div>
-{{< /example >}}
-
-Prevent text from wrapping with a `.text-nowrap` class.
-
-{{< example >}}
-<div class="text-nowrap bg-light border" style="width: 8rem;">
- This text should overflow the parent.
-</div>
-{{< /example >}}
-
-## Word break
-
-Prevent long strings of text from breaking your components' layout by using `.text-break` to set `word-wrap: break-word` and `word-break: break-word`. We use `word-wrap` instead of the more common `overflow-wrap` for wider browser support, and add the deprecated `word-break: break-word` to avoid issues with flex containers.
-
-{{< example >}}
-<p class="text-break">mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm</p>
-{{< /example >}}
-
-{{< callout warning >}}
-Note that [breaking words isn't possible in Arabic](https://rtlstyling.com/posts/rtl-styling#3.-line-break), which is the most used RTL language. Therefore `.text-break` is removed from our RTL compiled CSS.
-{{< /callout >}}
-
-## Text transform
-
-Transform text in components with text capitalization classes.
-
-{{< example >}}
-<p class="text-lowercase">Lowercased text.</p>
-<p class="text-uppercase">Uppercased text.</p>
-<p class="text-capitalize">CapiTaliZed text.</p>
-{{< /example >}}
-
-Note how `.text-capitalize` only changes the first letter of each word, leaving the case of any other letters unaffected.
-
-## Font size
-
-Quickly change the `font-size` of text. While our heading classes (e.g., `.h1`–`.h6`) apply `font-size`, `font-weight`, and `line-height`, these utilities _only_ apply `font-size`. Sizing for these utilities matches HTML's heading elements, so as the number increases, their size decreases.
-
-{{< example >}}
-<p class="fs-1">.fs-1 text</p>
-<p class="fs-2">.fs-2 text</p>
-<p class="fs-3">.fs-3 text</p>
-<p class="fs-4">.fs-4 text</p>
-<p class="fs-5">.fs-5 text</p>
-<p class="fs-6">.fs-6 text</p>
-{{< /example >}}
-
-Customize your available `font-size`s by modifying the `$font-sizes` Sass map.
-
-## Font weight and italics
-
-Quickly change the `font-weight` or `font-style` of text with these utilities. `font-style` utilities are abbreviated as `.fst-*` and `font-weight` utilities are abbreviated as `.fw-*`.
-
-{{< example >}}
-<p class="fw-bold">Bold text.</p>
-<p class="fw-bolder">Bolder weight text (relative to the parent element).</p>
-<p class="fw-semibold">Semibold weight text.</p>
-<p class="fw-normal">Normal weight text.</p>
-<p class="fw-light">Light weight text.</p>
-<p class="fw-lighter">Lighter weight text (relative to the parent element).</p>
-<p class="fst-italic">Italic text.</p>
-<p class="fst-normal">Text with normal font style</p>
-{{< /example >}}
-
-## Line height
-
-Change the line height with `.lh-*` utilities.
-
-{{< example >}}
-<p class="lh-1">This is a long paragraph written to show how the line-height of an element is affected by our utilities. Classes are applied to the element itself or sometimes the parent element. These classes can be customized as needed with our utility API.</p>
-<p class="lh-sm">This is a long paragraph written to show how the line-height of an element is affected by our utilities. Classes are applied to the element itself or sometimes the parent element. These classes can be customized as needed with our utility API.</p>
-<p class="lh-base">This is a long paragraph written to show how the line-height of an element is affected by our utilities. Classes are applied to the element itself or sometimes the parent element. These classes can be customized as needed with our utility API.</p>
-<p class="lh-lg">This is a long paragraph written to show how the line-height of an element is affected by our utilities. Classes are applied to the element itself or sometimes the parent element. These classes can be customized as needed with our utility API.</p>
-{{< /example >}}
-
-## Monospace
-
-Change a selection to our monospace font stack with `.font-monospace`.
-
-{{< example >}}
-<p class="font-monospace">This is in monospace</p>
-{{< /example >}}
-
-## Reset color
-
-Reset a text or link's color with `.text-reset`, so that it inherits the color from its parent.
-
-{{< example >}}
-<p class="text-muted">
- Muted text with a <a href="#" class="text-reset">reset link</a>.
-</p>
-{{< /example >}}
-
-## Text decoration
-
-Decorate text in components with text decoration classes.
-
-{{< example >}}
-<p class="text-decoration-underline">This text has a line underneath it.</p>
-<p class="text-decoration-line-through">This text has a line going through it.</p>
-<a href="#" class="text-decoration-none">This link has its text decoration removed</a>
-{{< /example >}}
-
-## Sass
-
-### Variables
-
-{{< scss-docs name="font-variables" file="scss/_variables.scss" >}}
-
-### Maps
-
-Font-size utilities are generated from this map, in combination with our utilities API.
-
-{{< scss-docs name="font-sizes" file="scss/_variables.scss" >}}
-
-### Utilities API
-
-Font and text utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
-
-{{< scss-docs name="utils-text" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/_index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/_index.html
new file mode 100644
index 000000000..b04e391bc
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/_index.html
@@ -0,0 +1,5 @@
+---
+layout: redirect
+sitemap_exclude: true
+redirect: "/docs/5.3/getting-started/introduction/"
+---
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/about/brand.md b/vendor/twbs/bootstrap/site/content/docs/5.3/about/brand.md
new file mode 100644
index 000000000..9c31da07f
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/about/brand.md
@@ -0,0 +1,47 @@
+---
+layout: docs
+title: Brand guidelines
+description: Documentation and examples for Bootstrap's logo and brand usage guidelines.
+group: about
+toc: true
+---
+
+Have a need for Bootstrap's brand resources? Great! We have only a few guidelines we follow, and in turn ask you to follow as well.
+
+## Logo
+
+When referencing Bootstrap, use our logo mark. Do not modify our logos in any way. Do not use Bootstrap's branding for your own open or closed source projects. **Do not use the Twitter name or logo** in association with Bootstrap.
+
+<div class="bd-brand-item px-2 py-5 mb-3 border rounded-3">
+ <img class="d-block img-fluid mx-auto" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="Bootstrap" width="256" height="204">
+</div>
+
+Our logo mark is also available in black and white. All rules for our primary logo apply to these as well.
+
+<div class="bd-brand-logos d-sm-flex text-center bg-light rounded-3 overflow-hidden w-100 mb-3">
+ <div class="bd-brand-item w-100 px-2 py-5">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-black.svg" alt="Bootstrap" width="128" height="102" loading="lazy">
+ </div>
+ <div class="bd-brand-item w-100 px-2 py-5 inverse">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" alt="Bootstrap" width="128" height="102" loading="lazy">
+ </div>
+</div>
+
+## Name
+
+Bootstrap should always be referred to as just **Bootstrap**. No Twitter before it and no capital _s_.
+
+<div class="bd-brand-logos d-sm-flex text-center border rounded-3 overflow-hidden w-100 mb-3">
+ <div class="bd-brand-item w-100 p-3">
+ <div class="h3">Bootstrap</div>
+ <strong class="text-success">Correct</strong>
+ </div>
+ <div class="bd-brand-item w-100 p-3">
+ <div class="h3 text-muted">BootStrap</div>
+ <strong class="text-danger">Incorrect</strong>
+ </div>
+ <div class="bd-brand-item w-100 p-3">
+ <div class="h3 text-muted">Twitter Bootstrap</div>
+ <strong class="text-danger">Incorrect</strong>
+ </div>
+</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/about/license.md b/vendor/twbs/bootstrap/site/content/docs/5.3/about/license.md
new file mode 100644
index 000000000..8698b1a3b
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/about/license.md
@@ -0,0 +1,34 @@
+---
+layout: docs
+title: License FAQs
+description: Commonly asked questions about Bootstrap's open source license.
+group: about
+---
+
+Bootstrap is released under the MIT license and is copyright {{< year >}}. Boiled down to smaller chunks, it can be described with the following conditions.
+
+## It requires you to:
+
+- Keep the license and copyright notice included in Bootstrap's CSS and JavaScript files when you use them in your works
+
+## It permits you to:
+
+- Freely download and use Bootstrap, in whole or in part, for personal, private, company internal, or commercial purposes
+- Use Bootstrap in packages or distributions that you create
+- Modify the source code
+- Grant a sublicense to modify and distribute Bootstrap to third parties not included in the license
+
+## It forbids you to:
+
+- Hold the authors and license owners liable for damages as Bootstrap is provided without warranty
+- Hold the creators or copyright holders of Bootstrap liable
+- Redistribute any piece of Bootstrap without proper attribution
+- Use any marks owned by Bootstrap in any way that might state or imply that Bootstrap endorses your distribution
+- Use any marks owned by Bootstrap in any way that might state or imply that you created the Bootstrap software in question
+
+## It does not require you to:
+
+- Include the source of Bootstrap itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it
+- Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is encouraged)
+
+The full Bootstrap license is located [in the project repository]({{< param repo >}}/blob/v{{< param current_version >}}/LICENSE) for more information.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/about/overview.md b/vendor/twbs/bootstrap/site/content/docs/5.3/about/overview.md
new file mode 100644
index 000000000..0ccaf340b
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/about/overview.md
@@ -0,0 +1,29 @@
+---
+layout: docs
+title: About
+description: Learn more about the team maintaining Bootstrap, how and why the project started, and how to get involved.
+group: about
+aliases:
+ - "/about/"
+ - "/docs/5.3/about/"
+---
+
+## Team
+
+Bootstrap is maintained by a [small team of developers](https://github.com/orgs/twbs/people) on GitHub. We're actively looking to grow this team and would love to hear from you if you're excited about CSS at scale, writing and maintaining vanilla JavaScript plugins, and improving build tooling processes for frontend code.
+
+## History
+
+Originally created by a designer and a developer at Twitter, Bootstrap has become one of the most popular front-end frameworks and open source projects in the world.
+
+Bootstrap was created at Twitter in mid-2010 by [@mdo](https://twitter.com/mdo) and [@fat](https://twitter.com/fat). Prior to being an open-sourced framework, Bootstrap was known as _Twitter Blueprint_. A few months into development, Twitter held its [first Hack Week](https://blog.twitter.com/engineering/en_us/a/2010/hack-week.html) and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today.
+
+Originally [released](https://blog.twitter.com/developer/en_us/a/2011/bootstrap-twitter.html) on <time datetime="2011-08-19 11:25">Friday, August 19, 2011</time>, we've since had over [twenty releases]({{< param repo >}}/releases), including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.
+
+With Bootstrap 4, we once again rewrote the project to account for two key architectural changes: a migration to Sass and the move to CSS's flexbox. Our intention is to help in a small way to move the web development community forward by pushing for newer CSS properties, fewer dependencies, and new technologies across more modern browsers.
+
+Our latest release, Bootstrap 5, focuses on improving v4's codebase with as few major breaking changes as possible. We improved existing features and components, removed support for older browsers, dropped jQuery for regular JavaScript, and embraced more future-friendly technologies like CSS custom properties as part of our tooling.
+
+## Get involved
+
+Get involved with Bootstrap development by [opening an issue]({{< param repo >}}/issues/new/choose) or submitting a pull request. Read our [contributing guidelines]({{< param repo >}}/blob/v{{< param current_version >}}/.github/CONTRIBUTING.md) for information on how we develop.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/about/team.md b/vendor/twbs/bootstrap/site/content/docs/5.3/about/team.md
index c00ba4efc..c00ba4efc 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/about/team.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/about/team.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/about/translations.md b/vendor/twbs/bootstrap/site/content/docs/5.3/about/translations.md
index 5e2ae30c5..5e2ae30c5 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/about/translations.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/about/translations.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/accordion.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/accordion.md
new file mode 100644
index 000000000..33399772a
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/accordion.md
@@ -0,0 +1,165 @@
+---
+layout: docs
+title: Accordion
+description: Build vertically collapsing accordions in combination with our Collapse JavaScript plugin.
+group: components
+aliases:
+ - "/components/"
+ - "/docs/5.3/components/"
+toc: true
+---
+
+## How it works
+
+The accordion uses [collapse]({{< docsref "/components/collapse" >}}) internally to make it collapsible. To render an accordion that's expanded, add the `.open` class on the `.accordion`.
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+## Example
+
+Click the accordions below to expand/collapse the accordion content.
+
+{{< example >}}
+<div class="accordion" id="accordionExample">
+ <div class="accordion-item">
+ <h2 class="accordion-header" id="headingOne">
+ <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
+ Accordion Item #1
+ </button>
+ </h2>
+ <div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
+ <div class="accordion-body">
+ <strong>This is the first item's accordion body.</strong> It is shown by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
+ </div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h2 class="accordion-header" id="headingTwo">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
+ Accordion Item #2
+ </button>
+ </h2>
+ <div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#accordionExample">
+ <div class="accordion-body">
+ <strong>This is the second item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
+ </div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h2 class="accordion-header" id="headingThree">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
+ Accordion Item #3
+ </button>
+ </h2>
+ <div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
+ <div class="accordion-body">
+ <strong>This is the third item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Flush
+
+Add `.accordion-flush` to remove the default `background-color`, some borders, and some rounded corners to render accordions edge-to-edge with their parent container.
+
+{{< example class="bg-body-secondary" >}}
+<div class="accordion accordion-flush" id="accordionFlushExample">
+ <div class="accordion-item">
+ <h2 class="accordion-header" id="flush-headingOne">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseOne" aria-expanded="false" aria-controls="flush-collapseOne">
+ Accordion Item #1
+ </button>
+ </h2>
+ <div id="flush-collapseOne" class="accordion-collapse collapse" aria-labelledby="flush-headingOne" data-bs-parent="#accordionFlushExample">
+ <div class="accordion-body">Placeholder content for this accordion, which is intended to demonstrate the <code>.accordion-flush</code> class. This is the first item's accordion body.</div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h2 class="accordion-header" id="flush-headingTwo">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseTwo" aria-expanded="false" aria-controls="flush-collapseTwo">
+ Accordion Item #2
+ </button>
+ </h2>
+ <div id="flush-collapseTwo" class="accordion-collapse collapse" aria-labelledby="flush-headingTwo" data-bs-parent="#accordionFlushExample">
+ <div class="accordion-body">Placeholder content for this accordion, which is intended to demonstrate the <code>.accordion-flush</code> class. This is the second item's accordion body. Let's imagine this being filled with some actual content.</div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h2 class="accordion-header" id="flush-headingThree">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#flush-collapseThree" aria-expanded="false" aria-controls="flush-collapseThree">
+ Accordion Item #3
+ </button>
+ </h2>
+ <div id="flush-collapseThree" class="accordion-collapse collapse" aria-labelledby="flush-headingThree" data-bs-parent="#accordionFlushExample">
+ <div class="accordion-body">Placeholder content for this accordion, which is intended to demonstrate the <code>.accordion-flush</code> class. This is the third item's accordion body. Nothing more exciting happening here in terms of content, but just filling up the space to make it look, at least at first glance, a bit more representative of how this would look in a real-world application.</div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Always open
+
+Omit the `data-bs-parent` attribute on each `.accordion-collapse` to make accordion items stay open when another item is opened.
+
+{{< example >}}
+<div class="accordion" id="accordionPanelsStayOpenExample">
+ <div class="accordion-item">
+ <h2 class="accordion-header" id="panelsStayOpen-headingOne">
+ <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseOne" aria-expanded="true" aria-controls="panelsStayOpen-collapseOne">
+ Accordion Item #1
+ </button>
+ </h2>
+ <div id="panelsStayOpen-collapseOne" class="accordion-collapse collapse show" aria-labelledby="panelsStayOpen-headingOne">
+ <div class="accordion-body">
+ <strong>This is the first item's accordion body.</strong> It is shown by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
+ </div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h2 class="accordion-header" id="panelsStayOpen-headingTwo">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseTwo" aria-expanded="false" aria-controls="panelsStayOpen-collapseTwo">
+ Accordion Item #2
+ </button>
+ </h2>
+ <div id="panelsStayOpen-collapseTwo" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingTwo">
+ <div class="accordion-body">
+ <strong>This is the second item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
+ </div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h2 class="accordion-header" id="panelsStayOpen-headingThree">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-collapseThree" aria-expanded="false" aria-controls="panelsStayOpen-collapseThree">
+ Accordion Item #3
+ </button>
+ </h2>
+ <div id="panelsStayOpen-collapseThree" class="accordion-collapse collapse" aria-labelledby="panelsStayOpen-headingThree">
+ <div class="accordion-body">
+ <strong>This is the third item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Accessibility
+
+Please read the [collapse accessibility section]({{< docsref "/components/collapse#accessibility" >}}) for more information.
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, accordions now use local CSS variables on `.accordion` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="accordion-css-vars" file="scss/_accordion.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="accordion-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/alerts.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/alerts.md
new file mode 100644
index 000000000..7ea5b9b42
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/alerts.md
@@ -0,0 +1,263 @@
+---
+layout: docs
+title: Alerts
+description: Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages.
+group: components
+toc: true
+---
+
+## Examples
+
+Alerts are available for any length of text, as well as an optional close button. For proper styling, use one of the eight **required** contextual classes (e.g., `.alert-success`). For inline dismissal, use the [alerts JavaScript plugin](#dismissing).
+
+{{< callout info >}}
+**Heads up!** As of v5.3.0, the `alert-variant()` Sass mixin is deprecated. Alert variants now have their CSS variables overridden in [the Sass loop](#sass-loop).
+{{< /callout >}}
+
+{{< example >}}
+{{< alerts.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="alert alert-{{ .name }}" role="alert">
+ A simple {{ .name }} alert—check it out!
+</div>{{- end -}}
+{{< /alerts.inline >}}
+{{< /example >}}
+
+{{< callout info >}}
+{{< partial "callouts/warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
+
+### Live example
+
+Click the button below to show an alert (hidden with inline styles to start), then dismiss (and destroy) it with the built-in close button.
+
+{{< example stackblitz_add_js="true" >}}
+<div id="liveAlertPlaceholder"></div>
+<button type="button" class="btn btn-primary" id="liveAlertBtn">Show live alert</button>
+{{< /example >}}
+
+We use the following JavaScript to trigger our live alert demo:
+
+```js
+const alertPlaceholder = document.getElementById('liveAlertPlaceholder')
+
+const alert = (message, type) => {
+ const wrapper = document.createElement('div')
+ wrapper.innerHTML = [
+ `<div class="alert alert-${type} alert-dismissible" role="alert">`,
+ ` <div>${message}</div>`,
+ ' <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>',
+ '</div>'
+ ].join('')
+
+ alertPlaceholder.append(wrapper)
+}
+
+const alertTrigger = document.getElementById('liveAlertBtn')
+if (alertTrigger) {
+ alertTrigger.addEventListener('click', () => {
+ alert('Nice, you triggered this alert message!', 'success')
+ })
+}
+```
+
+### Link color
+
+Use the `.alert-link` utility class to quickly provide matching colored links within any alert.
+
+{{< example >}}
+{{< alerts.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="alert alert-{{ .name }}" role="alert">
+ A simple {{ .name }} alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.
+</div>{{ end -}}
+{{< /alerts.inline >}}
+{{< /example >}}
+
+### Additional content
+
+Alerts can also contain additional HTML elements like headings, paragraphs and dividers.
+
+{{< example >}}
+<div class="alert alert-success" role="alert">
+ <h4 class="alert-heading">Well done!</h4>
+ <p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.</p>
+ <hr>
+ <p class="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p>
+</div>
+{{< /example >}}
+
+### Icons
+
+Similarly, you can use [flexbox utilities]({{< docsref "/utilities/flex" >}}) and [Bootstrap Icons]({{< param icons >}}) to create alerts with icons. Depending on your icons and content, you may want to add more utilities or custom styles.
+
+{{< example >}}
+<div class="alert alert-primary d-flex align-items-center" role="alert">
+ <svg xmlns="http://www.w3.org/2000/svg" class="bi bi-exclamation-triangle-fill flex-shrink-0 me-2" viewBox="0 0 16 16" role="img" aria-label="Warning:">
+ <path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/>
+ </svg>
+ <div>
+ An example alert with an icon
+ </div>
+</div>
+{{< /example >}}
+
+Need more than one icon for your alerts? Consider using more Bootstrap Icons and making a local SVG sprite like so to easily reference the same icons repeatedly.
+
+{{< example >}}
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="check-circle-fill" viewBox="0 0 16 16">
+ <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/>
+ </symbol>
+ <symbol id="info-fill" viewBox="0 0 16 16">
+ <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
+ </symbol>
+ <symbol id="exclamation-triangle-fill" viewBox="0 0 16 16">
+ <path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/>
+ </symbol>
+</svg>
+
+<div class="alert alert-primary d-flex align-items-center" role="alert">
+ <svg class="bi flex-shrink-0 me-2" role="img" aria-label="Info:"><use xlink:href="#info-fill"/></svg>
+ <div>
+ An example alert with an icon
+ </div>
+</div>
+<div class="alert alert-success d-flex align-items-center" role="alert">
+ <svg class="bi flex-shrink-0 me-2" role="img" aria-label="Success:"><use xlink:href="#check-circle-fill"/></svg>
+ <div>
+ An example success alert with an icon
+ </div>
+</div>
+<div class="alert alert-warning d-flex align-items-center" role="alert">
+ <svg class="bi flex-shrink-0 me-2" role="img" aria-label="Warning:"><use xlink:href="#exclamation-triangle-fill"/></svg>
+ <div>
+ An example warning alert with an icon
+ </div>
+</div>
+<div class="alert alert-danger d-flex align-items-center" role="alert">
+ <svg class="bi flex-shrink-0 me-2" role="img" aria-label="Danger:"><use xlink:href="#exclamation-triangle-fill"/></svg>
+ <div>
+ An example danger alert with an icon
+ </div>
+</div>
+{{< /example >}}
+
+### Dismissing
+
+Using the alert JavaScript plugin, it's possible to dismiss any alert inline. Here's how:
+
+- Be sure you've loaded the alert plugin, or the compiled Bootstrap JavaScript.
+- Add a [close button]({{< docsref "/components/close-button" >}}) and the `.alert-dismissible` class, which adds extra padding to the right of the alert and positions the close button.
+- On the close button, add the `data-bs-dismiss="alert"` attribute, which triggers the JavaScript functionality. Be sure to use the `<button>` element with it for proper behavior across all devices.
+- To animate alerts when dismissing them, be sure to add the `.fade` and `.show` classes.
+
+You can see this in action with a live demo:
+
+{{< example >}}
+<div class="alert alert-warning alert-dismissible fade show" role="alert">
+ <strong>Holy guacamole!</strong> You should check in on some of those fields below.
+ <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
+</div>
+{{< /example >}}
+
+{{< callout warning >}}
+When an alert is dismissed, the element is completely removed from the page structure. If a keyboard user dismisses the alert using the close button, their focus will suddenly be lost and, depending on the browser, reset to the start of the page/document. For this reason, we recommend including additional JavaScript that listens for the `closed.bs.alert` event and programmatically sets `focus()` to the most appropriate location in the page. If you're planning to move focus to a non-interactive element that normally does not receive focus, make sure to add `tabindex="-1"` to the element.
+{{< /callout >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, alerts now use local CSS variables on `.alert` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="alert-css-vars" file="scss/_alert.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="alert-variables" file="scss/_variables.scss" >}}
+
+### Sass mixin
+
+{{< deprecated-in "5.3.0" >}}
+
+Used in combination with `$theme-colors` to create contextual modifier classes for our alerts.
+
+{{< scss-docs name="alert-variant-mixin" file="scss/mixins/_alert.scss" >}}
+
+### Sass loop
+
+Loop that generates the modifier classes with the `alert-variant()` mixin.
+
+{{< scss-docs name="alert-modifiers" file="scss/_alert.scss" >}}
+
+## JavaScript behavior
+
+### Initialize
+
+Initialize elements as alerts
+
+```js
+const alertList = document.querySelectorAll('.alert')
+const alerts = [...alertList].map(element => new bootstrap.Alert(element))
+```
+
+{{< callout info >}}
+For the sole purpose of dismissing an alert, it isn't necessary to initialize the component manually via the JS API. By making use of `data-bs-dismiss="alert"`, the component will be initialized automatically and properly dismissed.
+
+See the [triggers](#triggers) section for more details.
+{{< /callout >}}
+
+### Triggers
+
+{{% js-dismiss "alert" %}}
+
+**Note that closing an alert will remove it from the DOM.**
+
+### Methods
+
+You can create an alert instance with the alert constructor, for example:
+
+```js
+const bsAlert = new bootstrap.Alert('#myAlert')
+```
+
+This makes an alert listen for click events on descendant elements which have the `data-bs-dismiss="alert"` attribute. (Not necessary when using the data-api’s auto-initialization.)
+
+{{< bs-table >}}
+| Method | Description |
+| --- | --- |
+| `close` | Closes an alert by removing it from the DOM. If the `.fade` and `.show` classes are present on the element, the alert will fade out before it is removed. |
+| `dispose` | Destroys an element's alert. (Removes stored data on the DOM element) |
+| `getInstance` | Static method which allows you to get the alert instance associated to a DOM element. For example: `bootstrap.Alert.getInstance(alert)`. |
+| `getOrCreateInstance` | Static method which returns an alert instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Alert.getOrCreateInstance(element)`. |
+{{< /bs-table >}}
+
+Basic usage:
+
+```js
+const alert = bootstrap.Alert.getOrCreateInstance('#myAlert')
+alert.close()
+```
+
+### Events
+
+Bootstrap's alert plugin exposes a few events for hooking into alert functionality.
+
+{{< bs-table >}}
+| Event | Description |
+| --- | --- |
+| `close.bs.alert` | Fires immediately when the `close` instance method is called. |
+| `closed.bs.alert` | Fired when the alert has been closed and CSS transitions have completed. |
+{{< /bs-table >}}
+
+```js
+const myAlert = document.getElementById('myAlert')
+myAlert.addEventListener('closed.bs.alert', event => {
+ // do something, for instance, explicitly move focus to the most appropriate element,
+ // so it doesn't get lost/reset to the start of the page
+ // document.getElementById('...').focus()
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/badge.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/badge.md
new file mode 100644
index 000000000..c07387850
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/badge.md
@@ -0,0 +1,103 @@
+---
+layout: docs
+title: Badges
+description: Documentation and examples for badges, our small count and labeling component.
+group: components
+toc: true
+---
+
+## Examples
+
+Badges scale to match the size of the immediate parent element by using relative font sizing and `em` units. As of v5, badges no longer have focus or hover styles for links.
+
+### Headings
+
+{{< example >}}
+<h1>Example heading <span class="badge bg-secondary">New</span></h1>
+<h2>Example heading <span class="badge bg-secondary">New</span></h2>
+<h3>Example heading <span class="badge bg-secondary">New</span></h3>
+<h4>Example heading <span class="badge bg-secondary">New</span></h4>
+<h5>Example heading <span class="badge bg-secondary">New</span></h5>
+<h6>Example heading <span class="badge bg-secondary">New</span></h6>
+{{< /example >}}
+
+### Buttons
+
+Badges can be used as part of links or buttons to provide a counter.
+
+{{< example >}}
+<button type="button" class="btn btn-primary">
+ Notifications <span class="badge text-bg-secondary">4</span>
+</button>
+{{< /example >}}
+
+Note that depending on how they are used, badges may be confusing for users of screen readers and similar assistive technologies. While the styling of badges provides a visual cue as to their purpose, these users will simply be presented with the content of the badge. Depending on the specific situation, these badges may seem like random additional words or numbers at the end of a sentence, link, or button.
+
+Unless the context is clear (as with the "Notifications" example, where it is understood that the "4" is the number of notifications), consider including additional context with a visually hidden piece of additional text.
+
+### Positioned
+
+Use utilities to modify a `.badge` and position it in the corner of a link or button.
+
+{{< example >}}
+<button type="button" class="btn btn-primary position-relative">
+ Inbox
+ <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">
+ 99+
+ <span class="visually-hidden">unread messages</span>
+ </span>
+</button>
+{{< /example >}}
+
+You can also replace the `.badge` class with a few more utilities without a count for a more generic indicator.
+
+{{< example >}}
+<button type="button" class="btn btn-primary position-relative">
+ Profile
+ <span class="position-absolute top-0 start-100 translate-middle p-2 bg-danger border border-light rounded-circle">
+ <span class="visually-hidden">New alerts</span>
+ </span>
+</button>
+{{< /example >}}
+
+## Background colors
+
+{{< added-in "5.2.0" >}}
+
+Set a `background-color` with contrasting foreground `color` with [our `.text-bg-{color}` helpers]({{< docsref "helpers/color-background" >}}). Previously it was required to manually pair your choice of [`.text-{color}`]({{< docsref "/utilities/colors" >}}) and [`.bg-{color}`]({{< docsref "/utilities/background" >}}) utilities for styling, which you still may use if you prefer.
+
+{{< example >}}
+{{< badge.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<span class="badge text-bg-{{ .name }}">{{ .name | title }}</span>{{- end -}}
+{{< /badge.inline >}}
+{{< /example >}}
+
+{{< callout info >}}
+{{< partial "callouts/warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
+
+## Pill badges
+
+Use the `.rounded-pill` utility class to make badges more rounded with a larger `border-radius`.
+
+{{< example >}}
+{{< badge.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<span class="badge rounded-pill text-bg-{{ .name }}">{{ .name | title }}</span>{{- end -}}
+{{< /badge.inline >}}
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, badges now use local CSS variables on `.badge` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="badge-css-vars" file="scss/_badge.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="badge-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/breadcrumb.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/breadcrumb.md
index 0012f9748..0012f9748 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/breadcrumb.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/breadcrumb.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/button-group.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/button-group.md
index 8f7d2d6a9..8f7d2d6a9 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/button-group.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/button-group.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/buttons.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/buttons.md
new file mode 100644
index 000000000..396beec7f
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/buttons.md
@@ -0,0 +1,242 @@
+---
+layout: docs
+title: Buttons
+description: Use Bootstrap's custom button styles for actions in forms, dialogs, and more with support for multiple sizes, states, and more.
+group: components
+toc: true
+---
+
+## Examples
+
+Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.
+
+{{< example >}}
+{{< buttons.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<button type="button" class="btn btn-{{ .name }}">{{ .name | title }}</button>
+{{- end -}}
+{{< /buttons.inline >}}
+
+<button type="button" class="btn btn-link">Link</button>
+{{< /example >}}
+
+{{< callout info >}}
+{{< partial "callouts/warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
+
+## Disable text wrapping
+
+If you don't want the button text to wrap, you can add the `.text-nowrap` class to the button. In Sass, you can set `$btn-white-space: nowrap` to disable text wrapping for each button.
+
+## Button tags
+
+The `.btn` classes are designed to be used with the `<button>` element. However, you can also use these classes on `<a>` or `<input>` elements (though some browsers may apply a slightly different rendering).
+
+When using button classes on `<a>` elements that are used to trigger in-page functionality (like collapsing content), rather than linking to new pages or sections within the current page, these links should be given a `role="button"` to appropriately convey their purpose to assistive technologies such as screen readers.
+
+{{< example >}}
+<a class="btn btn-primary" href="#" role="button">Link</a>
+<button class="btn btn-primary" type="submit">Button</button>
+<input class="btn btn-primary" type="button" value="Input">
+<input class="btn btn-primary" type="submit" value="Submit">
+<input class="btn btn-primary" type="reset" value="Reset">
+{{< /example >}}
+
+## Outline buttons
+
+In need of a button, but not the hefty background colors they bring? Replace the default modifier classes with the `.btn-outline-*` ones to remove all background images and colors on any button.
+
+{{< example >}}
+{{< buttons.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<button type="button" class="btn btn-outline-{{ .name }}">{{ .name | title }}</button>
+{{- end -}}
+{{< /buttons.inline >}}
+{{< /example >}}
+
+{{< callout info >}}
+Some of the button styles use a relatively light foreground color, and should only be used on a dark background in order to have sufficient contrast.
+{{< /callout >}}
+
+## Sizes
+
+Fancy larger or smaller buttons? Add `.btn-lg` or `.btn-sm` for additional sizes.
+
+{{< example >}}
+<button type="button" class="btn btn-primary btn-lg">Large button</button>
+<button type="button" class="btn btn-secondary btn-lg">Large button</button>
+{{< /example >}}
+
+{{< example >}}
+<button type="button" class="btn btn-primary btn-sm">Small button</button>
+<button type="button" class="btn btn-secondary btn-sm">Small button</button>
+{{< /example >}}
+
+You can even roll your own custom sizing with CSS variables:
+
+{{< example >}}
+<button type="button" class="btn btn-primary"
+ style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;">
+ Custom button
+</button>
+{{< /example >}}
+
+## Disabled state
+
+Make buttons look inactive by adding the `disabled` boolean attribute to any `<button>` element. Disabled buttons have `pointer-events: none` applied to, preventing hover and active states from triggering.
+
+{{< example >}}
+<button type="button" class="btn btn-primary" disabled>Primary button</button>
+<button type="button" class="btn btn-secondary" disabled>Button</button>
+<button type="button" class="btn btn-outline-primary" disabled>Primary button</button>
+<button type="button" class="btn btn-outline-secondary" disabled>Button</button>
+{{< /example >}}
+
+Disabled buttons using the `<a>` element behave a bit different:
+
+- `<a>`s don't support the `disabled` attribute, so you must add the `.disabled` class to make it visually appear disabled.
+- Some future-friendly styles are included to disable all `pointer-events` on anchor buttons.
+- Disabled buttons using `<a>` should include the `aria-disabled="true"` attribute to indicate the state of the element to assistive technologies.
+- Disabled buttons using `<a>` *should not* include the `href` attribute.
+
+{{< example >}}
+<a class="btn btn-primary disabled" role="button" aria-disabled="true">Primary link</a>
+<a class="btn btn-secondary disabled" role="button" aria-disabled="true">Link</a>
+{{< /example >}}
+
+### Link functionality caveat
+
+To cover cases where you have to keep the `href` attribute on a disabled link, the `.disabled` class uses `pointer-events: none` to try to disable the link functionality of `<a>`s. Note that this CSS property is not yet standardized for HTML, but all modern browsers support it. In addition, even in browsers that do support `pointer-events: none`, keyboard navigation remains unaffected, meaning that sighted keyboard users and users of assistive technologies will still be able to activate these links. So to be safe, in addition to `aria-disabled="true"`, also include a `tabindex="-1"` attribute on these links to prevent them from receiving keyboard focus, and use custom JavaScript to disable their functionality altogether.
+
+{{< example >}}
+<a href="#" class="btn btn-primary disabled" tabindex="-1" role="button" aria-disabled="true">Primary link</a>
+<a href="#" class="btn btn-secondary disabled" tabindex="-1" role="button" aria-disabled="true">Link</a>
+{{< /example >}}
+
+## Block buttons
+
+Create responsive stacks of full-width, "block buttons" like those in Bootstrap 4 with a mix of our display and gap utilities. By using utilities instead of button specific classes, we have much greater control over spacing, alignment, and responsive behaviors.
+
+{{< example >}}
+<div class="d-grid gap-2">
+ <button class="btn btn-primary" type="button">Button</button>
+ <button class="btn btn-primary" type="button">Button</button>
+</div>
+{{< /example >}}
+
+Here we create a responsive variation, starting with vertically stacked buttons until the `md` breakpoint, where `.d-md-block` replaces the `.d-grid` class, thus nullifying the `gap-2` utility. Resize your browser to see them change.
+
+{{< example >}}
+<div class="d-grid gap-2 d-md-block">
+ <button class="btn btn-primary" type="button">Button</button>
+ <button class="btn btn-primary" type="button">Button</button>
+</div>
+{{< /example >}}
+
+You can adjust the width of your block buttons with grid column width classes. For example, for a half-width "block button", use `.col-6`. Center it horizontally with `.mx-auto`, too.
+
+{{< example >}}
+<div class="d-grid gap-2 col-6 mx-auto">
+ <button class="btn btn-primary" type="button">Button</button>
+ <button class="btn btn-primary" type="button">Button</button>
+</div>
+{{< /example >}}
+
+Additional utilities can be used to adjust the alignment of buttons when horizontal. Here we've taken our previous responsive example and added some flex utilities and a margin utility on the button to right align the buttons when they're no longer stacked.
+
+{{< example >}}
+<div class="d-grid gap-2 d-md-flex justify-content-md-end">
+ <button class="btn btn-primary me-md-2" type="button">Button</button>
+ <button class="btn btn-primary" type="button">Button</button>
+</div>
+{{< /example >}}
+
+## Button plugin
+
+The button plugin allows you to create simple on/off toggle buttons.
+
+{{< callout info >}}
+Visually, these toggle buttons are identical to the [checkbox toggle buttons]({{< docsref "/forms/checks-radios#checkbox-toggle-buttons" >}}). However, they are conveyed differently by assistive technologies: the checkbox toggles will be announced by screen readers as "checked"/"not checked" (since, despite their appearance, they are fundamentally still checkboxes), whereas these toggle buttons will be announced as "button"/"button pressed". The choice between these two approaches will depend on the type of toggle you are creating, and whether or not the toggle will make sense to users when announced as a checkbox or as an actual button.
+{{< /callout >}}
+
+### Toggle states
+
+Add `data-bs-toggle="button"` to toggle a button's `active` state. If you're pre-toggling a button, you must manually add the `.active` class **and** `aria-pressed="true"` to ensure that it is conveyed appropriately to assistive technologies.
+
+{{< example >}}
+<button type="button" class="btn btn-primary" data-bs-toggle="button">Toggle button</button>
+<button type="button" class="btn btn-primary active" data-bs-toggle="button" aria-pressed="true">Active toggle button</button>
+<button type="button" class="btn btn-primary" disabled data-bs-toggle="button">Disabled toggle button</button>
+{{< /example >}}
+
+{{< example >}}
+<a href="#" class="btn btn-primary" role="button" data-bs-toggle="button">Toggle link</a>
+<a href="#" class="btn btn-primary active" role="button" data-bs-toggle="button" aria-pressed="true">Active toggle link</a>
+<a class="btn btn-primary disabled" aria-disabled="true" role="button" data-bs-toggle="button">Disabled toggle link</a>
+{{< /example >}}
+
+### Methods
+
+You can create a button instance with the button constructor, for example:
+
+```js
+const bsButton = new bootstrap.Button('#myButton')
+```
+
+{{< bs-table "table" >}}
+| Method | Description |
+| --- | --- |
+| `dispose` | Destroys an element's button. (Removes stored data on the DOM element) |
+| `getInstance` | Static method which allows you to get the button instance associated to a DOM element, you can use it like this: `bootstrap.Button.getInstance(element)`. |
+| `getOrCreateInstance` | Static method which returns a button instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Button.getOrCreateInstance(element)`. |
+| `toggle` | Toggles push state. Gives the button the appearance that it has been activated. |
+{{< /bs-table >}}
+
+For example, to toggle all buttons
+
+```js
+document.querySelectorAll('.btn').forEach(buttonElement => {
+ const button = bootstrap.Button.getOrCreateInstance(buttonElement)
+ button.toggle()
+})
+```
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, buttons now use local CSS variables on `.btn` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="btn-css-vars" file="scss/_buttons.scss" >}}
+
+Each `.btn-*` modifier class updates the appropriate CSS variables to minimize additional CSS rules with our `button-variant()`, `button-outline-variant()`, and `button-size()` mixins.
+
+Here's an example of building a custom `.btn-*` modifier class like we do for the buttons unique to our docs by reassigning Bootstrap's CSS variables with a mixture of our own CSS and Sass variables.
+
+<div class="bd-example">
+ <button type="button" class="btn btn-bd-primary">Custom button</button>
+</div>
+
+{{< scss-docs name="btn-css-vars-example" file="site/assets/scss/_buttons.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="btn-variables" file="scss/_variables.scss" >}}
+
+### Sass mixins
+
+There are three mixins for buttons: button and button outline variant mixins (both based on `$theme-colors`), plus a button size mixin.
+
+{{< scss-docs name="btn-variant-mixin" file="scss/mixins/_buttons.scss" >}}
+
+{{< scss-docs name="btn-outline-variant-mixin" file="scss/mixins/_buttons.scss" >}}
+
+{{< scss-docs name="btn-size-mixin" file="scss/mixins/_buttons.scss" >}}
+
+### Sass loops
+
+Button variants (for regular and outline buttons) use their respective mixins with our `$theme-colors` map to generate the modifier classes in `scss/_buttons.scss`.
+
+{{< scss-docs name="btn-variant-loops" file="scss/_buttons.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/card.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/card.md
new file mode 100644
index 000000000..f715a5eac
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/card.md
@@ -0,0 +1,739 @@
+---
+layout: docs
+title: Cards
+description: Bootstrap's cards provide a flexible and extensible content container with multiple variants and options.
+group: components
+toc: true
+---
+
+## About
+
+A **card** is a flexible and extensible content container. It includes options for headers and footers, a wide variety of content, contextual background colors, and powerful display options. If you're familiar with Bootstrap 3, cards replace our old panels, wells, and thumbnails. Similar functionality to those components is available as modifier classes for cards.
+
+## Example
+
+Cards are built with as little markup and styles as possible, but still manage to deliver a ton of control and customization. Built with flexbox, they offer easy alignment and mix well with other Bootstrap components. They have no `margin` by default, so use [spacing utilities]({{< docsref "/utilities/spacing" >}}) as needed.
+
+Below is an example of a basic card with mixed content and a fixed width. Cards have no fixed width to start, so they'll naturally fill the full width of its parent element. This is easily customized with our various [sizing options](#sizing).
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+## Content types
+
+Cards support a wide variety of content, including images, text, list groups, links, and more. Below are examples of what's supported.
+
+### Body
+
+The building block of a card is the `.card-body`. Use it whenever you need a padded section within a card.
+
+{{< example >}}
+<div class="card">
+ <div class="card-body">
+ This is some text within a card body.
+ </div>
+</div>
+{{< /example >}}
+
+### Titles, text, and links
+
+Card titles are used by adding `.card-title` to a `<h*>` tag. In the same way, links are added and placed next to each other by adding `.card-link` to an `<a>` tag.
+
+Subtitles are used by adding a `.card-subtitle` to a `<h*>` tag. If the `.card-title` and the `.card-subtitle` items are placed in a `.card-body` item, the card title and subtitle are aligned nicely.
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <h6 class="card-subtitle mb-2 text-muted">Card subtitle</h6>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ <a href="#" class="card-link">Card link</a>
+ <a href="#" class="card-link">Another link</a>
+ </div>
+</div>
+{{< /example >}}
+
+### Images
+
+`.card-img-top` places an image to the top of the card. With `.card-text`, text can be added to the card. Text within `.card-text` can also be styled with the standard HTML tags.
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ </div>
+</div>
+{{< /example >}}
+
+### List groups
+
+Create lists of content in a card with a flush list group.
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ <ul class="list-group list-group-flush">
+ <li class="list-group-item">An item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ </ul>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ <div class="card-header">
+ Featured
+ </div>
+ <ul class="list-group list-group-flush">
+ <li class="list-group-item">An item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ </ul>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ <ul class="list-group list-group-flush">
+ <li class="list-group-item">An item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ </ul>
+ <div class="card-footer">
+ Card footer
+ </div>
+</div>
+{{< /example >}}
+
+### Kitchen sink
+
+Mix and match multiple content types to create the card you need, or throw everything in there. Shown below are image styles, blocks, text styles, and a list group—all wrapped in a fixed-width card.
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ </div>
+ <ul class="list-group list-group-flush">
+ <li class="list-group-item">An item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ </ul>
+ <div class="card-body">
+ <a href="#" class="card-link">Card link</a>
+ <a href="#" class="card-link">Another link</a>
+ </div>
+</div>
+{{< /example >}}
+
+### Header and footer
+
+Add an optional header and/or footer within a card.
+
+{{< example >}}
+<div class="card">
+ <div class="card-header">
+ Featured
+ </div>
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+Card headers can be styled by adding `.card-header` to `<h*>` elements.
+
+{{< example >}}
+<div class="card">
+ <h5 class="card-header">Featured</h5>
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="card">
+ <div class="card-header">
+ Quote
+ </div>
+ <div class="card-body">
+ <blockquote class="blockquote mb-0">
+ <p>A well-known quote, contained in a blockquote element.</p>
+ <footer class="blockquote-footer">Someone famous in <cite title="Source Title">Source Title</cite></footer>
+ </blockquote>
+ </div>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="card text-center">
+ <div class="card-header">
+ Featured
+ </div>
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+ <div class="card-footer text-muted">
+ 2 days ago
+ </div>
+</div>
+{{< /example >}}
+
+## Sizing
+
+Cards assume no specific `width` to start, so they'll be 100% wide unless otherwise stated. You can change this as needed with custom CSS, grid classes, grid Sass mixins, or utilities.
+
+### Using grid markup
+
+Using the grid, wrap cards in columns and rows as needed.
+
+{{< example >}}
+<div class="row">
+ <div class="col-sm-6 mb-3 mb-sm-0">
+ <div class="card">
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+ </div>
+ </div>
+ <div class="col-sm-6">
+ <div class="card">
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Using utilities
+
+Use our handful of [available sizing utilities]({{< docsref "/utilities/sizing" >}}) to quickly set a card's width.
+
+{{< example >}}
+<div class="card w-75 mb-3">
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Button</a>
+ </div>
+</div>
+
+<div class="card w-50">
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Button</a>
+ </div>
+</div>
+{{< /example >}}
+
+### Using custom CSS
+
+Use custom CSS in your stylesheets or as inline styles to set a width.
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+## Text alignment
+
+You can quickly change the text alignment of any card—in its entirety or specific parts—with our [text align classes]({{< docsref "/utilities/text#text-alignment" >}}).
+
+{{< example >}}
+<div class="card mb-3" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+
+<div class="card text-center mb-3" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+
+<div class="card text-end" style="width: 18rem;">
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+## Navigation
+
+Add some navigation to a card's header (or block) with Bootstrap's [nav components]({{< docsref "/components/navs-tabs" >}}).
+
+{{< example >}}
+<div class="card text-center">
+ <div class="card-header">
+ <ul class="nav nav-tabs card-header-tabs">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="true" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ </div>
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="card text-center">
+ <div class="card-header">
+ <ul class="nav nav-pills card-header-pills">
+ <li class="nav-item">
+ <a class="nav-link active" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ </div>
+ <div class="card-body">
+ <h5 class="card-title">Special title treatment</h5>
+ <p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+## Images
+
+Cards include a few options for working with images. Choose from appending "image caps" at either end of a card, overlaying images with card content, or simply embedding the image in a card.
+
+### Image caps
+
+Similar to headers and footers, cards can include top and bottom "image caps"—images at the top or bottom of a card.
+
+{{< example >}}
+<div class="card mb-3">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
+ </div>
+</div>
+<div class="card">
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
+ </div>
+ {{< placeholder width="100%" height="180" class="card-img-bottom" text="Image cap" >}}
+</div>
+{{< /example >}}
+
+### Image overlays
+
+Turn an image into a card background and overlay your card's text. Depending on the image, you may or may not need additional styles or utilities.
+
+{{< example >}}
+<div class="card text-bg-dark">
+ {{< placeholder width="100%" height="270" class="bd-placeholder-img-lg card-img" text="Card image" >}}
+ <div class="card-img-overlay">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ <p class="card-text"><small>Last updated 3 mins ago</small></p>
+ </div>
+</div>
+{{< /example >}}
+
+{{< callout info >}}
+Note that content should not be larger than the height of the image. If content is larger than the image the content will be displayed outside the image.
+{{< /callout >}}
+
+## Horizontal
+
+Using a combination of grid and utility classes, cards can be made horizontal in a mobile-friendly and responsive way. In the example below, we remove the grid gutters with `.g-0` and use `.col-md-*` classes to make the card horizontal at the `md` breakpoint. Further adjustments may be needed depending on your card content.
+
+{{< example >}}
+<div class="card mb-3" style="max-width: 540px;">
+ <div class="row g-0">
+ <div class="col-md-4">
+ {{< placeholder width="100%" height="250" text="Image" class="img-fluid rounded-start" >}}
+ </div>
+ <div class="col-md-8">
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Card styles
+
+Cards include various options for customizing their backgrounds, borders, and color.
+
+### Background and color
+
+{{< added-in "5.2.0" >}}
+
+Set a `background-color` with contrasting foreground `color` with [our `.text-bg-{color}` helpers]({{< docsref "helpers/color-background" >}}). Previously it was required to manually pair your choice of [`.text-{color}`]({{< docsref "/utilities/colors" >}}) and [`.bg-{color}`]({{< docsref "/utilities/background" >}}) utilities for styling, which you still may use if you prefer.
+
+{{< example >}}
+{{< card.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="card text-bg-{{ .name }} mb-3" style="max-width: 18rem;">
+ <div class="card-header">Header</div>
+ <div class="card-body">
+ <h5 class="card-title">{{ .name | title }} card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ </div>
+</div>
+{{- end -}}
+{{< /card.inline >}}
+{{< /example >}}
+
+{{< callout info >}}
+{{< partial "callouts/warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
+
+### Border
+
+Use [border utilities]({{< docsref "/utilities/borders" >}}) to change just the `border-color` of a card. Note that you can put `.text-{color}` classes on the parent `.card` or a subset of the card's contents as shown below.
+
+{{< example >}}
+{{< card.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="card border-{{ .name }} mb-3" style="max-width: 18rem;">
+ <div class="card-header">Header</div>
+ <div class="card-body{{ if not .contrast_color }} text-{{ .name }}{{ end }}">
+ <h5 class="card-title">{{ .name | title }} card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ </div>
+</div>
+{{- end -}}
+{{< /card.inline >}}
+{{< /example >}}
+
+### Mixins utilities
+
+You can also change the borders on the card header and footer as needed, and even remove their `background-color` with `.bg-transparent`.
+
+{{< example >}}
+<div class="card border-success mb-3" style="max-width: 18rem;">
+ <div class="card-header bg-transparent border-success">Header</div>
+ <div class="card-body text-success">
+ <h5 class="card-title">Success card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ </div>
+ <div class="card-footer bg-transparent border-success">Footer</div>
+</div>
+{{< /example >}}
+
+## Card layout
+
+In addition to styling the content within cards, Bootstrap includes a few options for laying out series of cards. For the time being, **these layout options are not yet responsive**.
+
+### Card groups
+
+Use card groups to render cards as a single, attached element with equal width and height columns. Card groups start off stacked and use `display: flex;` to become attached with uniform dimensions starting at the `sm` breakpoint.
+
+{{< example >}}
+<div class="card-group">
+ <div class="card">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
+ </div>
+ </div>
+ <div class="card">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
+ <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
+ </div>
+ </div>
+ <div class="card">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
+ <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+When using card groups with footers, their content will automatically line up.
+
+{{< example >}}
+<div class="card-group">
+ <div class="card">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ <div class="card-footer">
+ <small class="text-muted">Last updated 3 mins ago</small>
+ </div>
+ </div>
+ <div class="card">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
+ </div>
+ <div class="card-footer">
+ <small class="text-muted">Last updated 3 mins ago</small>
+ </div>
+ </div>
+ <div class="card">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
+ </div>
+ <div class="card-footer">
+ <small class="text-muted">Last updated 3 mins ago</small>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Grid cards
+
+Use the Bootstrap grid system and its [`.row-cols` classes]({{< docsref "/layout/grid#row-columns" >}}) to control how many grid columns (wrapped around your cards) you show per row. For example, here's `.row-cols-1` laying out the cards on one column, and `.row-cols-md-2` splitting four cards to equal width across multiple rows, from the medium breakpoint up.
+
+{{< example >}}
+<div class="row row-cols-1 row-cols-md-2 g-4">
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content.</p>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+Change it to `.row-cols-3` and you'll see the fourth card wrap.
+
+{{< example >}}
+<div class="row row-cols-1 row-cols-md-3 g-4">
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content.</p>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+When you need equal height, add `.h-100` to the cards. If you want equal heights by default, you can set `$card-height: 100%` in Sass.
+
+{{< example >}}
+<div class="row row-cols-1 row-cols-md-3 g-4">
+ <div class="col">
+ <div class="card h-100">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card h-100">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a short card.</p>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card h-100">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content.</p>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card h-100">
+ {{< placeholder width="100%" height="140" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+Just like with card groups, card footers will automatically line up.
+
+{{< example >}}
+<div class="row row-cols-1 row-cols-md-3 g-4">
+ <div class="col">
+ <div class="card h-100">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ </div>
+ <div class="card-footer">
+ <small class="text-muted">Last updated 3 mins ago</small>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card h-100">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This card has supporting text below as a natural lead-in to additional content.</p>
+ </div>
+ <div class="card-footer">
+ <small class="text-muted">Last updated 3 mins ago</small>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card h-100">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p>
+ </div>
+ <div class="card-footer">
+ <small class="text-muted">Last updated 3 mins ago</small>
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Masonry
+
+In `v4` we used a CSS-only technique to mimic the behavior of [Masonry](https://masonry.desandro.com/)-like columns, but this technique came with lots of unpleasant [side effects](https://github.com/twbs/bootstrap/pull/28922). If you want to have this type of layout in `v5`, you can just make use of Masonry plugin. **Masonry is not included in Bootstrap**, but we've made a [demo example]({{< docsref "/examples/masonry" >}}) to help you get started.
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, cards now use local CSS variables on `.card` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="card-css-vars" file="scss/_card.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="card-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/carousel.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/carousel.md
new file mode 100644
index 000000000..dca8e9a79
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/carousel.md
@@ -0,0 +1,448 @@
+---
+layout: docs
+title: Carousel
+description: A slideshow component for cycling through elements—images or slides of text—like a carousel.
+group: components
+toc: true
+---
+
+## How it works
+
+- The carousel is a slideshow for cycling through a series of content, built with CSS 3D transforms and a bit of JavaScript. It works with a series of images, text, or custom markup. It also includes support for previous/next controls and indicators.
+
+- For performance reasons, **carousels must be manually initialized** using the [carousel constructor method](#methods). Without initialization, some of the event listeners (specifically, the events needed touch/swipe support) will not be registered until a user has explicitly activated a control or indicator.
+
+ The only exception are [autoplaying carousels](#autoplaying-carousels) with the `data-bs-ride="carousel"` attribute as these are initialized automatically on page load. If you're using autoplaying carousels with the data attribute, **don't explicitly initialize the same carousels with the constructor method.**
+
+- Nested carousels are not supported. You should also be aware that carousels in general can often cause usability and accessibility challenges.
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+## Basic examples
+
+Here is a basic example of a carousel with three slides. Note the previous/next controls. We recommend using `<button>` elements, but you can also use `<a>` elements with `role="button"`.
+
+{{< example >}}
+<div id="carouselExample" class="carousel slide">
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExample" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExample" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+</div>
+{{< /example >}}
+
+Carousels don't automatically normalize slide dimensions. As such, you may need to use additional utilities or custom styles to appropriately size content. While carousels support previous/next controls and indicators, they're not explicitly required. Add and customize as you see fit.
+
+**You must add the `.active` class to one of the slides**, otherwise the carousel will not be visible. Also be sure to set a unique `id` on the `.carousel` for optional controls, especially if you're using multiple carousels on a single page. Control and indicator elements must have a `data-bs-target` attribute (or `href` for links) that matches the `id` of the `.carousel` element.
+
+### Indicators
+
+You can add indicators to the carousel, alongside the previous/next controls. The indicators let users jump directly to a particular slide.
+
+{{< example >}}
+<div id="carouselExampleIndicators" class="carousel slide">
+ <div class="carousel-indicators">
+ <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
+ <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="1" aria-label="Slide 2"></button>
+ <button type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide-to="2" aria-label="Slide 3"></button>
+ </div>
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+</div>
+{{< /example >}}
+
+### Captions
+
+You can add captions to your slides with the `.carousel-caption` element within any `.carousel-item`. They can be easily hidden on smaller viewports, as shown below, with optional [display utilities]({{< docsref "/utilities/display" >}}). We hide them initially with `.d-none` and bring them back on medium-sized devices with `.d-md-block`.
+
+{{< example >}}
+<div id="carouselExampleCaptions" class="carousel slide">
+ <div class="carousel-indicators">
+ <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
+ <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="Slide 2"></button>
+ <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="Slide 3"></button>
+ </div>
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>First slide label</h5>
+ <p>Some representative placeholder content for the first slide.</p>
+ </div>
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>Second slide label</h5>
+ <p>Some representative placeholder content for the second slide.</p>
+ </div>
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>Third slide label</h5>
+ <p>Some representative placeholder content for the third slide.</p>
+ </div>
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+</div>
+{{< /example >}}
+
+### Crossfade
+
+Add `.carousel-fade` to your carousel to animate slides with a fade transition instead of a slide. Depending on your carousel content (e.g., text only slides), you may want to add `.bg-body` or some custom CSS to the `.carousel-item`s for proper crossfading.
+
+{{< example >}}
+<div id="carouselExampleFade" class="carousel slide carousel-fade">
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleFade" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleFade" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+</div>
+{{< /example >}}
+
+## Autoplaying carousels
+
+You can make your carousels autoplay on page load by setting the `ride` option to `carousel`. Autoplaying carousels automatically pause while hovered with the mouse. This behavior can be controlled with the `pause` option. In browsers that support the [Page Visibility API](https://www.w3.org/TR/page-visibility/), the carousel will stop cycling when the webpage is not visible to the user (such as when the browser tab is inactive, or when the browser window is minimized).
+
+{{< callout info >}}
+For accessibility reasons, we recommend avoiding the use of autoplaying carousels. If your page does include an autoplaying carousel, we recommend providing an additional button or control to explicitly pause/stop the carousel.
+
+See [WCAG 2.1 Success Criterion 2.2.2 Pause, Stop, Hide](https://www.w3.org/TR/WCAG21/#pause-stop-hide).
+{{< /callout >}}
+
+{{< example >}}
+<div id="carouselExampleAutoplaying" class="carousel slide" data-bs-ride="carousel">
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleAutoplaying" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleAutoplaying" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+</div>
+{{< /example >}}
+
+When the `ride` option is set to `true`, rather than `carousel`, the carousel won't automatically start to cycle on page load. Instead, it will only start after the first user interaction.
+
+{{< example >}}
+<div id="carouselExampleRide" class="carousel slide" data-bs-ride="true">
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleRide" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleRide" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+</div>
+{{< /example >}}
+
+### Individual `.carousel-item` interval
+
+Add `data-bs-interval=""` to a `.carousel-item` to change the amount of time to delay between automatically cycling to the next item.
+
+{{< example >}}
+<div id="carouselExampleInterval" class="carousel slide" data-bs-ride="carousel">
+ <div class="carousel-inner">
+ <div class="carousel-item active" data-bs-interval="10000">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ </div>
+ <div class="carousel-item" data-bs-interval="2000">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleInterval" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleInterval" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+</div>
+{{< /example >}}
+
+### Autoplaying carousels without controls
+
+Here's a carousel with slides only. Note the presence of the `.d-block` and `.w-100` on carousel images to prevent browser default image alignment.
+
+{{< example >}}
+<div id="carouselExampleSlidesOnly" class="carousel slide" data-bs-ride="carousel">
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Disable touch swiping
+
+Carousels support swiping left/right on touchscreen devices to move between slides. This can be disabled by setting the `touch` option to `false`.
+
+{{< example >}}
+<div id="carouselExampleControlsNoTouching" class="carousel slide" data-bs-touch="false">
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleControlsNoTouching" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleControlsNoTouching" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+</div>
+{{< /example >}}
+
+## Dark variant
+
+{{< deprecated-in "5.3.0" >}}
+
+Add `.carousel-dark` to the `.carousel` for darker controls, indicators, and captions. Controls are inverted compared to their default white fill with the `filter` CSS property. Captions and controls have additional Sass variables that customize the `color` and `background-color`.
+
+{{< callout-deprecated-dark-variants "carousel" >}}
+
+{{< example >}}
+<div id="carouselExampleDark" class="carousel carousel-dark slide">
+ <div class="carousel-indicators">
+ <button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
+ <button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="1" aria-label="Slide 2"></button>
+ <button type="button" data-bs-target="#carouselExampleDark" data-bs-slide-to="2" aria-label="Slide 3"></button>
+ </div>
+ <div class="carousel-inner">
+ <div class="carousel-item active" data-bs-interval="10000">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#aaa" background="#f5f5f5" text="First slide" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>First slide label</h5>
+ <p>Some representative placeholder content for the first slide.</p>
+ </div>
+ </div>
+ <div class="carousel-item" data-bs-interval="2000">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#bbb" background="#eee" text="Second slide" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>Second slide label</h5>
+ <p>Some representative placeholder content for the second slide.</p>
+ </div>
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#999" background="#e5e5e5" text="Third slide" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>Third slide label</h5>
+ <p>Some representative placeholder content for the third slide.</p>
+ </div>
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleDark" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+</div>
+{{< /example >}}
+
+## Custom transition
+
+The transition duration of `.carousel-item` can be changed with the `$carousel-transition-duration` Sass variable before compiling or custom styles if you're using the compiled CSS. If multiple transitions are applied, make sure the transform transition is defined first (e.g. `transition: transform 2s ease, opacity .5s ease-out`).
+
+## Sass
+
+### Variables
+
+Variables for all carousels:
+
+{{< scss-docs name="carousel-variables" file="scss/_variables.scss" >}}
+
+Variables for the [dark carousel](#dark-variant):
+
+{{< scss-docs name="carousel-dark-variables" file="scss/_variables.scss" >}}
+
+## Usage
+
+### Via data attributes
+
+Use data attributes to easily control the position of the carousel. `data-bs-slide` accepts the keywords `prev` or `next`, which alters the slide position relative to its current position. Alternatively, use `data-bs-slide-to` to pass a raw slide index to the carousel `data-bs-slide-to="2"`, which shifts the slide position to a particular index beginning with `0`.
+
+### Via JavaScript
+
+Call carousel manually with:
+
+```js
+const carousel = new bootstrap.Carousel('#myCarousel')
+```
+
+### Options
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+{{< bs-table >}}
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| `interval` | number | `5000` | The amount of time to delay between automatically cycling an item. |
+| `keyboard` | boolean | `true` | Whether the carousel should react to keyboard events. |
+| `pause` | string, boolean | `"hover"` | If set to `"hover"`, pauses the cycling of the carousel on `mouseenter` and resumes the cycling of the carousel on `mouseleave`. If set to `false`, hovering over the carousel won't pause it. On touch-enabled devices, when set to `"hover"`, cycling will pause on `touchend` (once the user finished interacting with the carousel) for two intervals, before automatically resuming. This is in addition to the mouse behavior. |
+| `ride` | string, boolean | `false` | If set to `true`, autoplays the carousel after the user manually cycles the first item. If set to `"carousel"`, autoplays the carousel on load. |
+| `touch` | boolean | `true` | Whether the carousel should support left/right swipe interactions on touchscreen devices. |
+| `wrap` | boolean | `true` | Whether the carousel should cycle continuously or have hard stops. |
+{{< /bs-table >}}
+
+### Methods
+
+{{< callout danger >}}
+{{< partial "callouts/danger-async-methods.md" >}}
+{{< /callout >}}
+
+You can create a carousel instance with the carousel constructor, and pass on any additional options. For example, to manually initialize an autoplaying carousel (assuming you're not using the `data-bs-ride="carousel"` attribute in the markup itself) with a specific interval and with touch support disabled, you can use:
+
+```js
+const myCarouselElement = document.querySelector('#myCarousel')
+
+const carousel = new bootstrap.Carousel(myCarouselElement, {
+ interval: 2000,
+ touch: false
+})
+```
+
+{{< bs-table >}}
+| Method | Description |
+| --- | --- |
+| `cycle` | Starts cycling through the carousel items from left to right. |
+| `dispose` | Destroys an element's carousel. (Removes stored data on the DOM element) |
+| `getInstance` | Static method which allows you to get the carousel instance associated to a DOM element. You can use it like this: `bootstrap.Carousel.getInstance(element)`. |
+| `getOrCreateInstance` | Static method which returns a carousel instance associated to a DOM element, or creates a new one in case it wasn't initialized. You can use it like this: `bootstrap.Carousel.getOrCreateInstance(element)`. |
+| `next` | Cycles to the next item. **Returns to the caller before the next item has been shown** (e.g., before the `slid.bs.carousel` event occurs). |
+| `nextWhenVisible` | Don't cycle carousel to next when the page, the carousel, or the carousel's parent aren't visible. **Returns to the caller before the target item has been shown**. |
+| `pause` | Stops the carousel from cycling through items. |
+| `prev` | Cycles to the previous item. **Returns to the caller before the previous item has been shown** (e.g., before the `slid.bs.carousel` event occurs). |
+| `to` | Cycles the carousel to a particular frame (0 based, similar to an array). **Returns to the caller before the target item has been shown** (e.g., before the `slid.bs.carousel` event occurs). |
+{{< /bs-table >}}
+
+### Events
+
+Bootstrap's carousel class exposes two events for hooking into carousel functionality. Both events have the following additional properties:
+
+- `direction`: The direction in which the carousel is sliding (either `"left"` or `"right"`).
+- `relatedTarget`: The DOM element that is being slid into place as the active item.
+- `from`: The index of the current item
+- `to`: The index of the next item
+
+All carousel events are fired at the carousel itself (i.e. at the `<div class="carousel">`).
+
+{{< bs-table >}}
+| Event type | Description |
+| --- | --- |
+| `slid.bs.carousel` | Fired when the carousel has completed its slide transition. |
+| `slide.bs.carousel` | Fires immediately when the `slide` instance method is invoked. |
+{{< /bs-table >}}
+
+```js
+const myCarousel = document.getElementById('myCarousel')
+
+myCarousel.addEventListener('slide.bs.carousel', event => {
+ // do something...
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/close-button.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/close-button.md
new file mode 100644
index 000000000..39b80e1cd
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/close-button.md
@@ -0,0 +1,44 @@
+---
+layout: docs
+title: Close button
+description: A generic close button for dismissing content like modals and alerts.
+group: components
+toc: true
+---
+
+## Example
+
+Provide an option to dismiss or close a component with `.btn-close`. Default styling is limited, but highly customizable. Modify the Sass variables to replace the default `background-image`. **Be sure to include text for screen readers**, as we've done with `aria-label`.
+
+{{< example >}}
+<button type="button" class="btn-close" aria-label="Close"></button>
+{{< /example >}}
+
+## Disabled state
+
+Disabled close buttons change their `opacity`. We've also applied `pointer-events: none` and `user-select: none` to preventing hover and active states from triggering.
+
+{{< example >}}
+<button type="button" class="btn-close" disabled aria-label="Close"></button>
+{{< /example >}}
+
+## Dark variant
+
+{{< callout info >}}
+**Heads up!** As of v5.3.0, the `.btn-close-white` class is deprecated. Instead, use `data-bs-theme="dark"` to change the color mode of the close button.
+{{< /callout >}}
+
+Add `data-bs-theme="dark"` to the `.btn-close`, or to its parent element, to invert the close button. This uses the `filter` property to invert the `background-image` without overriding its value.
+
+{{< example class="bg-dark" >}}
+<div data-bs-theme="dark">
+ <button type="button" class="btn-close" aria-label="Close"></button>
+ <button type="button" class="btn-close" disabled aria-label="Close"></button>
+</div>
+{{< /example >}}
+
+## Sass
+
+### Variables
+
+{{< scss-docs name="close-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/collapse.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/collapse.md
new file mode 100644
index 000000000..95abc536c
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/collapse.md
@@ -0,0 +1,198 @@
+---
+layout: docs
+title: Collapse
+description: Toggle the visibility of content across your project with a few classes and our JavaScript plugins.
+group: components
+toc: true
+---
+
+## How it works
+
+The collapse JavaScript plugin is used to show and hide content. Buttons or anchors are used as triggers that are mapped to specific elements you toggle. Collapsing an element will animate the `height` from its current value to `0`. Given how CSS handles animations, you cannot use `padding` on a `.collapse` element. Instead, use the class as an independent wrapping element.
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+## Example
+
+Click the buttons below to show and hide another element via class changes:
+
+- `.collapse` hides content
+- `.collapsing` is applied during transitions
+- `.collapse.show` shows content
+
+Generally, we recommend using a `<button>` with the `data-bs-target` attribute. While not recommended from a semantic point of view, you can also use an `<a>` link with the `href` attribute (and a `role="button"`). In both cases, the `data-bs-toggle="collapse"` is required.
+
+{{< example >}}
+<p>
+ <a class="btn btn-primary" data-bs-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
+ Link with href
+ </a>
+ <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
+ Button with data-bs-target
+ </button>
+</p>
+<div class="collapse" id="collapseExample">
+ <div class="card card-body">
+ Some placeholder content for the collapse component. This panel is hidden by default but revealed when the user activates the relevant trigger.
+ </div>
+</div>
+{{< /example >}}
+
+## Horizontal
+
+The collapse plugin supports horizontal collapsing. Add the `.collapse-horizontal` modifier class to transition the `width` instead of `height` and set a `width` on the immediate child element. Feel free to write your own custom Sass, use inline styles, or use our [width utilities]({{< docsref "/utilities/sizing" >}}).
+
+{{< callout info >}}
+Please note that while the example below has a `min-height` set to avoid excessive repaints in our docs, this is not explicitly required. **Only the `width` on the child element is required.**
+{{< /callout >}}
+
+{{< example >}}
+<p>
+ <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWidthExample" aria-expanded="false" aria-controls="collapseWidthExample">
+ Toggle width collapse
+ </button>
+</p>
+<div style="min-height: 120px;">
+ <div class="collapse collapse-horizontal" id="collapseWidthExample">
+ <div class="card card-body" style="width: 300px;">
+ This is some placeholder content for a horizontal collapse. It's hidden by default and shown when triggered.
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Multiple toggles and targets
+
+A `<button>` or `<a>` element can show and hide multiple elements by referencing them with a selector in its `data-bs-target` or `href` attribute.
+Conversely, multiple `<button>` or `<a>` elements can show and hide the same element if they each reference it with their `data-bs-target` or `href` attribute.
+
+{{< example >}}
+<p>
+ <a class="btn btn-primary" data-bs-toggle="collapse" href="#multiCollapseExample1" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Toggle first element</a>
+ <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#multiCollapseExample2" aria-expanded="false" aria-controls="multiCollapseExample2">Toggle second element</button>
+ <button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target=".multi-collapse" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Toggle both elements</button>
+</p>
+<div class="row">
+ <div class="col">
+ <div class="collapse multi-collapse" id="multiCollapseExample1">
+ <div class="card card-body">
+ Some placeholder content for the first collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="collapse multi-collapse" id="multiCollapseExample2">
+ <div class="card card-body">
+ Some placeholder content for the second collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Accessibility
+
+Be sure to add `aria-expanded` to the control element. This attribute explicitly conveys the current state of the collapsible element tied to the control to screen readers and similar assistive technologies. If the collapsible element is closed by default, the attribute on the control element should have a value of `aria-expanded="false"`. If you've set the collapsible element to be open by default using the `show` class, set `aria-expanded="true"` on the control instead. The plugin will automatically toggle this attribute on the control based on whether or not the collapsible element has been opened or closed (via JavaScript, or because the user triggered another control element also tied to the same collapsible element). If the control element's HTML element is not a button (e.g., an `<a>` or `<div>`), the attribute `role="button"` should be added to the element.
+
+If your control element is targeting a single collapsible element – i.e. the `data-bs-target` attribute is pointing to an `id` selector – you should add the `aria-controls` attribute to the control element, containing the `id` of the collapsible element. Modern screen readers and similar assistive technologies make use of this attribute to provide users with additional shortcuts to navigate directly to the collapsible element itself.
+
+Note that Bootstrap's current implementation does not cover the various *optional* keyboard interactions described in the [ARIA Authoring Practices Guide accordion pattern](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/) - you will need to include these yourself with custom JavaScript.
+
+## Sass
+
+### Variables
+
+{{< scss-docs name="collapse-transition" file="scss/_variables.scss" >}}
+
+### Classes
+
+Collapse transition classes can be found in `scss/_transitions.scss` as these are shared across multiple components (collapse and accordion).
+
+{{< scss-docs name="collapse-classes" file="scss/_transitions.scss" >}}
+
+## Usage
+
+The collapse plugin utilizes a few classes to handle the heavy lifting:
+
+- `.collapse` hides the content
+- `.collapse.show` shows the content
+- `.collapsing` is added when the transition starts, and removed when it finishes
+
+These classes can be found in `_transitions.scss`.
+
+### Via data attributes
+
+Just add `data-bs-toggle="collapse"` and a `data-bs-target` to the element to automatically assign control of one or more collapsible elements. The `data-bs-target` attribute accepts a CSS selector to apply the collapse to. Be sure to add the class `collapse` to the collapsible element. If you'd like it to default open, add the additional class `show`.
+
+To add accordion-like group management to a collapsible area, add the data attribute `data-bs-parent="#selector"`. Refer to the [accordion page]({{< docsref "/components/accordion" >}}) for more information.
+
+### Via JavaScript
+
+Enable manually with:
+
+```js
+const collapseElementList = document.querySelectorAll('.collapse')
+const collapseList = [...collapseElementList].map(collapseEl => new bootstrap.Collapse(collapseEl))
+```
+
+### Options
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+{{< bs-table "table" >}}
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+`parent` | selector, DOM element | `null` | If parent is provided, then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior - this is dependent on the `card` class). The attribute has to be set on the target collapsible area. |
+`toggle` | boolean | `true` | Toggles the collapsible element on invocation. |
+{{< /bs-table >}}
+
+### Methods
+
+{{< callout danger >}}
+{{< partial "callouts/danger-async-methods.md" >}}
+{{< /callout >}}
+
+Activates your content as a collapsible element. Accepts an optional options `object`.
+
+You can create a collapse instance with the constructor, for example:
+
+```js
+const bsCollapse = new bootstrap.Collapse('#myCollapse', {
+ toggle: false
+})
+```
+
+{{< bs-table >}}
+| Method | Description |
+| --- | --- |
+| `dispose` | Destroys an element's collapse. (Removes stored data on the DOM element) |
+| `getInstance` | Static method which allows you to get the collapse instance associated to a DOM element, you can use it like this: `bootstrap.Collapse.getInstance(element)`. |
+| `getOrCreateInstance` | Static method which returns a collapse instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Collapse.getOrCreateInstance(element)`. |
+| `hide` | Hides a collapsible element. **Returns to the caller before the collapsible element has actually been hidden** (e.g., before the `hidden.bs.collapse` event occurs). |
+| `show` | Shows a collapsible element. **Returns to the caller before the collapsible element has actually been shown** (e.g., before the `shown.bs.collapse` event occurs). |
+| `toggle` | Toggles a collapsible element to shown or hidden. **Returns to the caller before the collapsible element has actually been shown or hidden** (i.e. before the `shown.bs.collapse` or `hidden.bs.collapse` event occurs). |
+{{< /bs-table >}}
+
+### Events
+
+Bootstrap's collapse class exposes a few events for hooking into collapse functionality.
+
+{{< bs-table >}}
+| Event type | Description |
+| --- | --- |
+| `hide.bs.collapse` | This event is fired immediately when the `hide` method has been called. |
+| `hidden.bs.collapse` | This event is fired when a collapse element has been hidden from the user (will wait for CSS transitions to complete). |
+| `show.bs.collapse` | This event fires immediately when the `show` instance method is called. |
+| `shown.bs.collapse` | This event is fired when a collapse element has been made visible to the user (will wait for CSS transitions to complete). |
+{{< /bs-table >}}
+
+```js
+const myCollapsible = document.getElementById('myCollapsible')
+myCollapsible.addEventListener('hidden.bs.collapse', event => {
+ // do something...
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/dropdowns.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/dropdowns.md
new file mode 100644
index 000000000..b7dae56ab
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/dropdowns.md
@@ -0,0 +1,1134 @@
+---
+layout: docs
+title: Dropdowns
+description: Toggle contextual overlays for displaying lists of links and more with the Bootstrap dropdown plugin.
+group: components
+toc: true
+---
+
+## Overview
+
+Dropdowns are toggleable, contextual overlays for displaying lists of links and more. They're made interactive with the included Bootstrap dropdown JavaScript plugin. They're toggled by clicking, not by hovering; this is [an intentional design decision](https://markdotto.com/2012/02/27/bootstrap-explained-dropdowns/).
+
+Dropdowns are built on a third party library, [Popper](https://popper.js.org/), which provides dynamic positioning and viewport detection. Be sure to include [popper.min.js]({{< param "cdn.popper" >}}) before Bootstrap's JavaScript or use `bootstrap.bundle.min.js` / `bootstrap.bundle.js` which contains Popper. Popper isn't used to position dropdowns in navbars though as dynamic positioning isn't required.
+
+## Accessibility
+
+The [<abbr title="Web Accessibility Initiative">WAI</abbr> <abbr title="Accessible Rich Internet Applications">ARIA</abbr>](https://www.w3.org/TR/wai-aria/) standard defines an actual [`role="menu"` widget](https://www.w3.org/TR/wai-aria/#menu), but this is specific to application-like menus which trigger actions or functions. <abbr title="Accessible Rich Internet Applications">ARIA</abbr> menus can only contain menu items, checkbox menu items, radio button menu items, radio button groups, and sub-menus.
+
+Bootstrap's dropdowns, on the other hand, are designed to be generic and applicable to a variety of situations and markup structures. For instance, it is possible to create dropdowns that contain additional inputs and form controls, such as search fields or login forms. For this reason, Bootstrap does not expect (nor automatically add) any of the `role` and `aria-` attributes required for true <abbr title="Accessible Rich Internet Applications">ARIA</abbr> menus. Authors will have to include these more specific attributes themselves.
+
+However, Bootstrap does add built-in support for most standard keyboard menu interactions, such as the ability to move through individual `.dropdown-item` elements using the cursor keys and close the menu with the <kbd>Esc</kbd> key.
+
+## Examples
+
+Wrap the dropdown's toggle (your button or link) and the dropdown menu within `.dropdown`, or another element that declares `position: relative;`. Ideally, you should use a `<button>` element as the dropdown trigger, but the plugin will work with `<a>` elements as well. The examples shown here use semantic `<ul>` elements where appropriate, but custom markup is supported.
+
+### Single button
+
+Any single `.btn` can be turned into a dropdown toggle with some markup changes. Here's how you can put them to work with `<button>` elements:
+
+{{< example >}}
+<div class="dropdown">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown button
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+While `<button>` is the recommended control for a dropdown toggle, there might be situations where you have to use an `<a>` element. If you do, we recommend adding a `role="button"` attribute to appropriately convey control's purpose to assistive technologies such as screen readers.
+
+{{< example >}}
+<div class="dropdown">
+ <a class="btn btn-secondary dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown link
+ </a>
+
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+The best part is you can do this with any button variant, too:
+
+<div class="bd-example">
+ <div class="btn-group">
+ <button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Primary</button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Secondary</button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-success dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Success</button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-info dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Info</button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-warning dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Warning</button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-danger dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">Danger</button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+</div>
+
+```html
+<!-- Example single danger button -->
+<div class="btn-group">
+ <button type="button" class="btn btn-danger dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Action
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+</div>
+```
+
+### Split button
+
+Similarly, create split button dropdowns with virtually the same markup as single button dropdowns, but with the addition of `.dropdown-toggle-split` for proper spacing around the dropdown caret.
+
+We use this extra class to reduce the horizontal `padding` on either side of the caret by 25% and remove the `margin-left` that's added for regular button dropdowns. Those extra changes keep the caret centered in the split button and provide a more appropriately sized hit area next to the main button.
+
+<div class="bd-example">
+ <div class="btn-group">
+ <button type="button" class="btn btn-primary">Primary</button>
+ <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-secondary">Secondary</button>
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-success">Success</button>
+ <button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-info">Info</button>
+ <button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-warning">Warning</button>
+ <button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-danger">Danger</button>
+ <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+</div>
+
+```html
+<!-- Example split danger button -->
+<div class="btn-group">
+ <button type="button" class="btn btn-danger">Action</button>
+ <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+</div>
+```
+
+## Sizing
+
+Button dropdowns work with buttons of all sizes, including default and split dropdown buttons.
+
+<div class="bd-example">
+ <div class="btn-group">
+ <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Large button
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ <div class="btn-group">
+ <button type="button" class="btn btn-lg btn-secondary">Large split button</button>
+ <button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+</div>
+
+```html
+<!-- Large button groups (default and split) -->
+<div class="btn-group">
+ <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Large button
+ </button>
+ <ul class="dropdown-menu">
+ ...
+ </ul>
+</div>
+<div class="btn-group">
+ <button class="btn btn-secondary btn-lg" type="button">
+ Large split button
+ </button>
+ <button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ ...
+ </ul>
+</div>
+```
+
+<div class="bd-example">
+ <div class="btn-group">
+ <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Small button
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ <div class="btn-group">
+ <button type="button" class="btn btn-sm btn-secondary">Small split button</button>
+ <button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+</div>
+
+```html
+<div class="btn-group">
+ <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Small button
+ </button>
+ <ul class="dropdown-menu">
+ ...
+ </ul>
+</div>
+<div class="btn-group">
+ <button class="btn btn-secondary btn-sm" type="button">
+ Small split button
+ </button>
+ <button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ ...
+ </ul>
+</div>
+```
+
+## Dark dropdowns
+
+{{< deprecated-in "5.3.0" >}}
+
+Opt into darker dropdowns to match a dark navbar or custom style by adding `.dropdown-menu-dark` onto an existing `.dropdown-menu`. No changes are required to the dropdown items.
+
+{{< callout-deprecated-dark-variants "dropdown-menu" >}}
+
+{{< example >}}
+<div class="dropdown">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown button
+ </button>
+ <ul class="dropdown-menu dropdown-menu-dark">
+ <li><a class="dropdown-item active" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+And putting it to use in a navbar:
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDarkDropdown" aria-controls="navbarNavDarkDropdown" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarNavDarkDropdown">
+ <ul class="navbar-nav">
+ <li class="nav-item dropdown">
+ <button class="btn btn-dark dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </button>
+ <ul class="dropdown-menu dropdown-menu-dark">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+## Directions
+
+{{< callout info >}}
+#### RTL
+Directions are mirrored when using Bootstrap in RTL, meaning `.dropstart` will appear on the right side.
+{{< /callout >}}
+
+### Centered
+
+Make the dropdown menu centered below the toggle with `.dropdown-center` on the parent element.
+
+{{< example >}}
+<div class="dropdown-center">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Centered dropdown
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Action two</a></li>
+ <li><a class="dropdown-item" href="#">Action three</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+### Dropup
+
+Trigger dropdown menus above elements by adding `.dropup` to the parent element.
+
+<div class="bd-example">
+ <div class="btn-group dropup">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropup
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ <div class="btn-group dropup">
+ <button type="button" class="btn btn-secondary">
+ Split dropup
+ </button>
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+</div>
+
+```html
+<!-- Default dropup button -->
+<div class="btn-group dropup">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropup
+ </button>
+ <ul class="dropdown-menu">
+ <!-- Dropdown menu links -->
+ </ul>
+</div>
+
+<!-- Split dropup button -->
+<div class="btn-group dropup">
+ <button type="button" class="btn btn-secondary">
+ Split dropup
+ </button>
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <!-- Dropdown menu links -->
+ </ul>
+</div>
+```
+
+### Dropup centered
+
+Make the dropup menu centered above the toggle with `.dropup-center` on the parent element.
+
+{{< example >}}
+<div class="dropup-center dropup">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Centered dropup
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Action two</a></li>
+ <li><a class="dropdown-item" href="#">Action three</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+### Dropend
+
+Trigger dropdown menus at the right of the elements by adding `.dropend` to the parent element.
+
+<div class="bd-example">
+ <div class="btn-group dropend">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropend
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ <div class="btn-group dropend">
+ <button type="button" class="btn btn-secondary">
+ Split dropend
+ </button>
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropend</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+</div>
+
+```html
+<!-- Default dropend button -->
+<div class="btn-group dropend">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropend
+ </button>
+ <ul class="dropdown-menu">
+ <!-- Dropdown menu links -->
+ </ul>
+</div>
+
+<!-- Split dropend button -->
+<div class="btn-group dropend">
+ <button type="button" class="btn btn-secondary">
+ Split dropend
+ </button>
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropend</span>
+ </button>
+ <ul class="dropdown-menu">
+ <!-- Dropdown menu links -->
+ </ul>
+</div>
+```
+
+### Dropstart
+
+Trigger dropdown menus at the left of the elements by adding `.dropstart` to the parent element.
+
+<div class="bd-example">
+ <div class="btn-group dropstart">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropstart
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ <div class="btn-group dropstart">
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropstart</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ <button type="button" class="btn btn-secondary">
+ Split dropstart
+ </button>
+ </div>
+</div>
+
+```html
+<!-- Default dropstart button -->
+<div class="btn-group dropstart">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropstart
+ </button>
+ <ul class="dropdown-menu">
+ <!-- Dropdown menu links -->
+ </ul>
+</div>
+
+<!-- Split dropstart button -->
+<div class="btn-group dropstart">
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropstart</span>
+ </button>
+ <ul class="dropdown-menu">
+ <!-- Dropdown menu links -->
+ </ul>
+ <button type="button" class="btn btn-secondary">
+ Split dropstart
+ </button>
+</div>
+```
+
+## Menu items
+
+You can use `<a>` or `<button>` elements as dropdown items.
+
+{{< example >}}
+<div class="dropdown">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </button>
+ <ul class="dropdown-menu">
+ <li><button class="dropdown-item" type="button">Action</button></li>
+ <li><button class="dropdown-item" type="button">Another action</button></li>
+ <li><button class="dropdown-item" type="button">Something else here</button></li>
+ </ul>
+</div>
+{{< /example >}}
+
+You can also create non-interactive dropdown items with `.dropdown-item-text`. Feel free to style further with custom CSS or text utilities.
+
+{{< example >}}
+<ul class="dropdown-menu">
+ <li><span class="dropdown-item-text">Dropdown item text</span></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+</ul>
+{{< /example >}}
+
+### Active
+
+Add `.active` to items in the dropdown to **style them as active**. To convey the active state to assistive technologies, use the `aria-current` attribute — using the `page` value for the current page, or `true` for the current item in a set.
+
+{{< example >}}
+<ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Regular link</a></li>
+ <li><a class="dropdown-item active" href="#" aria-current="true">Active link</a></li>
+ <li><a class="dropdown-item" href="#">Another link</a></li>
+</ul>
+{{< /example >}}
+
+### Disabled
+
+Add `.disabled` to items in the dropdown to **style them as disabled**.
+
+{{< example >}}
+<ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Regular link</a></li>
+ <li><a class="dropdown-item disabled">Disabled link</a></li>
+ <li><a class="dropdown-item" href="#">Another link</a></li>
+</ul>
+{{< /example >}}
+
+## Menu alignment
+
+By default, a dropdown menu is automatically positioned 100% from the top and along the left side of its parent. You can change this with the directional `.drop*` classes, but you can also control them with additional modifier classes.
+
+Add `.dropdown-menu-end` to a `.dropdown-menu` to right align the dropdown menu. Directions are mirrored when using Bootstrap in RTL, meaning `.dropdown-menu-end` will appear on the left side.
+
+{{< callout info >}}
+**Heads up!** Dropdowns are positioned thanks to Popper except when they are contained in a navbar.
+{{< /callout >}}
+
+{{< example >}}
+<div class="btn-group">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Right-aligned menu example
+ </button>
+ <ul class="dropdown-menu dropdown-menu-end">
+ <li><button class="dropdown-item" type="button">Action</button></li>
+ <li><button class="dropdown-item" type="button">Another action</button></li>
+ <li><button class="dropdown-item" type="button">Something else here</button></li>
+ </ul>
+</div>
+{{< /example >}}
+
+### Responsive alignment
+
+If you want to use responsive alignment, disable dynamic positioning by adding the `data-bs-display="static"` attribute and use the responsive variation classes.
+
+To align **right** the dropdown menu with the given breakpoint or larger, add `.dropdown-menu{-sm|-md|-lg|-xl|-xxl}-end`.
+
+{{< example >}}
+<div class="btn-group">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
+ Left-aligned but right aligned when large screen
+ </button>
+ <ul class="dropdown-menu dropdown-menu-lg-end">
+ <li><button class="dropdown-item" type="button">Action</button></li>
+ <li><button class="dropdown-item" type="button">Another action</button></li>
+ <li><button class="dropdown-item" type="button">Something else here</button></li>
+ </ul>
+</div>
+{{< /example >}}
+
+To align **left** the dropdown menu with the given breakpoint or larger, add `.dropdown-menu-end` and `.dropdown-menu{-sm|-md|-lg|-xl|-xxl}-start`.
+
+{{< example >}}
+<div class="btn-group">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
+ Right-aligned but left aligned when large screen
+ </button>
+ <ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start">
+ <li><button class="dropdown-item" type="button">Action</button></li>
+ <li><button class="dropdown-item" type="button">Another action</button></li>
+ <li><button class="dropdown-item" type="button">Something else here</button></li>
+ </ul>
+</div>
+{{< /example >}}
+
+Note that you don't need to add a `data-bs-display="static"` attribute to dropdown buttons in navbars, since Popper isn't used in navbars.
+
+### Alignment options
+
+Taking most of the options shown above, here's a small kitchen sink demo of various dropdown alignment options in one place.
+
+{{< example >}}
+<div class="btn-group">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+
+<div class="btn-group">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Right-aligned menu
+ </button>
+ <ul class="dropdown-menu dropdown-menu-end">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+
+<div class="btn-group">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
+ Left-aligned, right-aligned lg
+ </button>
+ <ul class="dropdown-menu dropdown-menu-lg-end">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+
+<div class="btn-group">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
+ Right-aligned, left-aligned lg
+ </button>
+ <ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+
+<div class="btn-group dropstart">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropstart
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+
+<div class="btn-group dropend">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropend
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+
+<div class="btn-group dropup">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropup
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+## Menu content
+
+### Headers
+
+Add a header to label sections of actions in any dropdown menu.
+
+{{< example >}}
+<ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">Dropdown header</h6></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+</ul>
+{{< /example >}}
+
+### Dividers
+
+Separate groups of related menu items with a divider.
+
+{{< example >}}
+<ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+</ul>
+{{< /example >}}
+
+### Text
+
+Place any freeform text within a dropdown menu with text and use [spacing utilities]({{< docsref "/utilities/spacing" >}}). Note that you'll likely need additional sizing styles to constrain the menu width.
+
+{{< example >}}
+<div class="dropdown-menu p-4 text-muted" style="max-width: 200px;">
+ <p>
+ Some example text that's free-flowing within the dropdown menu.
+ </p>
+ <p class="mb-0">
+ And this is more example text.
+ </p>
+</div>
+{{< /example >}}
+
+### Forms
+
+Put a form within a dropdown menu, or make it into a dropdown menu, and use [margin or padding utilities]({{< docsref "/utilities/spacing" >}}) to give it the negative space you require.
+
+{{< example >}}
+<div class="dropdown-menu">
+ <form class="px-4 py-3">
+ <div class="mb-3">
+ <label for="exampleDropdownFormEmail1" class="form-label">Email address</label>
+ <input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="email@example.com">
+ </div>
+ <div class="mb-3">
+ <label for="exampleDropdownFormPassword1" class="form-label">Password</label>
+ <input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
+ </div>
+ <div class="mb-3">
+ <div class="form-check">
+ <input type="checkbox" class="form-check-input" id="dropdownCheck">
+ <label class="form-check-label" for="dropdownCheck">
+ Remember me
+ </label>
+ </div>
+ </div>
+ <button type="submit" class="btn btn-primary">Sign in</button>
+ </form>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="#">New around here? Sign up</a>
+ <a class="dropdown-item" href="#">Forgot password?</a>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="dropdown">
+ <button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" data-bs-auto-close="outside">
+ Dropdown form
+ </button>
+ <form class="dropdown-menu p-4">
+ <div class="mb-3">
+ <label for="exampleDropdownFormEmail2" class="form-label">Email address</label>
+ <input type="email" class="form-control" id="exampleDropdownFormEmail2" placeholder="email@example.com">
+ </div>
+ <div class="mb-3">
+ <label for="exampleDropdownFormPassword2" class="form-label">Password</label>
+ <input type="password" class="form-control" id="exampleDropdownFormPassword2" placeholder="Password">
+ </div>
+ <div class="mb-3">
+ <div class="form-check">
+ <input type="checkbox" class="form-check-input" id="dropdownCheck2">
+ <label class="form-check-label" for="dropdownCheck2">
+ Remember me
+ </label>
+ </div>
+ </div>
+ <button type="submit" class="btn btn-primary">Sign in</button>
+ </form>
+</div>
+{{< /example >}}
+
+## Dropdown options
+
+Use `data-bs-offset` or `data-bs-reference` to change the location of the dropdown.
+
+{{< example >}}
+<div class="d-flex">
+ <div class="dropdown me-1">
+ <button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" data-bs-offset="10,20">
+ Offset
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </div>
+ <div class="btn-group">
+ <button type="button" class="btn btn-secondary">Reference</button>
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false" data-bs-reference="parent">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+</div>
+{{< /example >}}
+
+### Auto close behavior
+
+By default, the dropdown menu is closed when clicking inside or outside the dropdown menu. You can use the `autoClose` option to change this behavior of the dropdown.
+
+{{< example >}}
+<div class="btn-group">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="true" aria-expanded="false">
+ Default dropdown
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+
+<div class="btn-group">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="inside" aria-expanded="false">
+ Clickable inside
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+
+<div class="btn-group">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
+ Clickable outside
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+
+<div class="btn-group">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="false" aria-expanded="false">
+ Manual close
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ <li><a class="dropdown-item" href="#">Menu item</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, dropdowns now use local CSS variables on `.dropdown-menu` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="dropdown-css-vars" file="scss/_dropdown.scss" >}}
+
+{{< callout info >}}
+Dropdown items include at least one variable that is not set on `.dropdown`. This allows you to provide a new value while Bootstrap defaults to a fallback value.
+
+- `--bs-dropdown-item-border-radius`
+{{< /callout >}}
+
+Customization through CSS variables can be seen on the `.dropdown-menu-dark` class where we override specific values without adding duplicate CSS selectors.
+
+{{< scss-docs name="dropdown-dark-css-vars" file="scss/_dropdown.scss" >}}
+
+### Sass variables
+
+Variables for all dropdowns:
+
+{{< scss-docs name="dropdown-variables" file="scss/_variables.scss" >}}
+
+Variables for the [dark dropdown](#dark-dropdowns):
+
+{{< scss-docs name="dropdown-dark-variables" file="scss/_variables.scss" >}}
+
+Variables for the CSS-based carets that indicate a dropdown's interactivity:
+
+{{< scss-docs name="caret-variables" file="scss/_variables.scss" >}}
+
+### Mixins
+
+Mixins are used to generate the CSS-based carets and can be found in `scss/mixins/_caret.scss`.
+
+{{< scss-docs name="caret-mixins" file="scss/mixins/_caret.scss" >}}
+
+## Usage
+
+Via data attributes or JavaScript, the dropdown plugin toggles hidden content (dropdown menus) by toggling the `.show` class on the parent `.dropdown-menu`. The `data-bs-toggle="dropdown"` attribute is relied on for closing dropdown menus at an application level, so it's a good idea to always use it.
+
+{{< callout info >}}
+On touch-enabled devices, opening a dropdown adds empty `mouseover` handlers to the immediate children of the `<body>` element. This admittedly ugly hack is necessary to work around a [quirk in iOS' event delegation](https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html), which would otherwise prevent a tap anywhere outside of the dropdown from triggering the code that closes the dropdown. Once the dropdown is closed, these additional empty `mouseover` handlers are removed.
+{{< /callout >}}
+
+### Via data attributes
+
+Add `data-bs-toggle="dropdown"` to a link or button to toggle a dropdown.
+
+```html
+<div class="dropdown">
+ <button type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown trigger
+ </button>
+ <ul class="dropdown-menu">
+ ...
+ </ul>
+</div>
+```
+
+### Via JavaScript
+
+Call the dropdowns via JavaScript:
+
+```js
+const dropdownElementList = document.querySelectorAll('.dropdown-toggle')
+const dropdownList = [...dropdownElementList].map(dropdownToggleEl => new bootstrap.Dropdown(dropdownToggleEl))
+```
+
+{{< callout info >}}
+##### `data-bs-toggle="dropdown"` still required
+
+Regardless of whether you call your dropdown via JavaScript or instead use the data-api, `data-bs-toggle="dropdown"` is always required to be present on the dropdown's trigger element.
+{{< /callout >}}
+
+### Options
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+{{< bs-table "table" >}}
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| `autoClose` | boolean, string | `true` | Configure the auto close behavior of the dropdown: <ul class="my-2"><li>`true` - the dropdown will be closed by clicking outside or inside the dropdown menu.</li><li>`false` - the dropdown will be closed by clicking the toggle button and manually calling `hide` or `toggle` method. (Also will not be closed by pressing <kbd>Esc</kbd> key)</li><li>`'inside'` - the dropdown will be closed (only) by clicking inside the dropdown menu.</li> <li>`'outside'` - the dropdown will be closed (only) by clicking outside the dropdown menu.</li></ul> Note: the dropdown can always be closed with the <kbd>Esc</kbd> key. |
+| `boundary` | string, element | `'clippingParents'` | Overflow constraint boundary of the dropdown menu (applies only to Popper's preventOverflow modifier). By default it's `clippingParents` and can accept an HTMLElement reference (via JavaScript only). For more information refer to Popper's [detectOverflow docs](https://popper.js.org/docs/v2/utils/detect-overflow/#boundary). |
+| `display` | string | `'dynamic'` | By default, we use Popper for dynamic positioning. Disable this with `static`. |
+| `offset` | array, string, function | `[0, 2]` | Offset of the dropdown relative to its target. You can pass a string in data attributes with comma separated values like: `data-bs-offset="10,20"`. When a function is used to determine the offset, it is called with an object containing the popper placement, the reference, and popper rects as its first argument. The triggering element DOM node is passed as the second argument. The function must return an array with two numbers: [skidding](https://popper.js.org/docs/v2/modifiers/offset/#skidding-1), [distance](https://popper.js.org/docs/v2/modifiers/offset/#distance-1). For more information refer to Popper's [offset docs](https://popper.js.org/docs/v2/modifiers/offset/#options). |
+| `popperConfig` | null, object, function | `null` | To change Bootstrap's default Popper config, see [Popper's configuration](https://popper.js.org/docs/v2/constructors/#options). When a function is used to create the Popper configuration, it's called with an object that contains the Bootstrap's default Popper configuration. It helps you use and merge the default with your own configuration. The function must return a configuration object for Popper. |
+| `reference` | string, element, object | `'toggle'` | Reference element of the dropdown menu. Accepts the values of `'toggle'`, `'parent'`, an HTMLElement reference or an object providing `getBoundingClientRect`. For more information refer to Popper's [constructor docs](https://popper.js.org/docs/v2/constructors/#createpopper) and [virtual element docs](https://popper.js.org/docs/v2/virtual-elements/). |
+{{< /bs-table >}}
+
+#### Using function with `popperConfig`
+
+```js
+const dropdown = new bootstrap.Dropdown(element, {
+ popperConfig(defaultBsPopperConfig) {
+ // const newPopperConfig = {...}
+ // use defaultBsPopperConfig if needed...
+ // return newPopperConfig
+ }
+})
+```
+
+### Methods
+
+{{< bs-table >}}
+| Method | Description |
+| --- | --- |
+| `dispose` | Destroys an element's dropdown. (Removes stored data on the DOM element) |
+| `getInstance` | Static method which allows you to get the dropdown instance associated to a DOM element, you can use it like this: `bootstrap.Dropdown.getInstance(element)`. |
+| `getOrCreateInstance` | Static method which returns a dropdown instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Dropdown.getOrCreateInstance(element)`. |
+| `hide` | Hides the dropdown menu of a given navbar or tabbed navigation. |
+| `show` | Shows the dropdown menu of a given navbar or tabbed navigation. |
+| `toggle` | Toggles the dropdown menu of a given navbar or tabbed navigation. |
+| `update` | Updates the position of an element's dropdown. |
+{{< /bs-table >}}
+
+### Events
+
+All dropdown events are fired at the toggling element and then bubbled up. So you can also add event listeners on the `.dropdown-menu`'s parent element. `hide.bs.dropdown` and `hidden.bs.dropdown` events have a `clickEvent` property (only when the original Event type is `click`) that contains an Event Object for the click event.
+
+{{< bs-table >}}
+| Event type | Description |
+| --- | --- |
+| `hide.bs.dropdown` | Fires immediately when the `hide` instance method has been called. |
+| `hidden.bs.dropdown` | Fired when the dropdown has finished being hidden from the user and CSS transitions have completed. |
+| `show.bs.dropdown` | Fires immediately when the `show` instance method is called. |
+| `shown.bs.dropdown` | Fired when the dropdown has been made visible to the user and CSS transitions have completed. |
+{{< /bs-table >}}
+
+```js
+const myDropdown = document.getElementById('myDropdown')
+myDropdown.addEventListener('show.bs.dropdown', event => {
+ // do something...
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/list-group.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/list-group.md
new file mode 100644
index 000000000..daa7a8818
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/list-group.md
@@ -0,0 +1,500 @@
+---
+layout: docs
+title: List group
+description: List groups are a flexible and powerful component for displaying a series of content. Modify and extend them to support just about any content within.
+group: components
+toc: true
+---
+
+## Basic example
+
+The most basic list group is an unordered list with list items and the proper classes. Build upon it with the options that follow, or with your own CSS as needed.
+
+{{< example >}}
+<ul class="list-group">
+ <li class="list-group-item">An item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ <li class="list-group-item">A fourth item</li>
+ <li class="list-group-item">And a fifth one</li>
+</ul>
+{{< /example >}}
+
+## Active items
+
+Add `.active` to a `.list-group-item` to indicate the current active selection.
+
+{{< example >}}
+<ul class="list-group">
+ <li class="list-group-item active" aria-current="true">An active item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ <li class="list-group-item">A fourth item</li>
+ <li class="list-group-item">And a fifth one</li>
+</ul>
+{{< /example >}}
+
+## Disabled items
+
+Add `.disabled` to a `.list-group-item` to make it _appear_ disabled. Note that some elements with `.disabled` will also require custom JavaScript to fully disable their click events (e.g., links).
+
+{{< example >}}
+<ul class="list-group">
+ <li class="list-group-item disabled" aria-disabled="true">A disabled item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ <li class="list-group-item">A fourth item</li>
+ <li class="list-group-item">And a fifth one</li>
+</ul>
+{{< /example >}}
+
+## Links and buttons
+
+Use `<a>`s or `<button>`s to create _actionable_ list group items with hover, disabled, and active states by adding `.list-group-item-action`. We separate these pseudo-classes to ensure list groups made of non-interactive elements (like `<li>`s or `<div>`s) don't provide a click or tap affordance.
+
+Be sure to **not use the standard `.btn` classes here**.
+
+{{< example >}}
+<div class="list-group">
+ <a href="#" class="list-group-item list-group-item-action active" aria-current="true">
+ The current link item
+ </a>
+ <a href="#" class="list-group-item list-group-item-action">A second link item</a>
+ <a href="#" class="list-group-item list-group-item-action">A third link item</a>
+ <a href="#" class="list-group-item list-group-item-action">A fourth link item</a>
+ <a class="list-group-item list-group-item-action disabled">A disabled link item</a>
+</div>
+{{< /example >}}
+
+With `<button>`s, you can also make use of the `disabled` attribute instead of the `.disabled` class. Sadly, `<a>`s don't support the disabled attribute.
+
+{{< example >}}
+<div class="list-group">
+ <button type="button" class="list-group-item list-group-item-action active" aria-current="true">
+ The current button
+ </button>
+ <button type="button" class="list-group-item list-group-item-action">A second button item</button>
+ <button type="button" class="list-group-item list-group-item-action">A third button item</button>
+ <button type="button" class="list-group-item list-group-item-action">A fourth button item</button>
+ <button type="button" class="list-group-item list-group-item-action" disabled>A disabled button item</button>
+</div>
+{{< /example >}}
+
+## Flush
+
+Add `.list-group-flush` to remove some borders and rounded corners to render list group items edge-to-edge in a parent container (e.g., cards).
+
+{{< example >}}
+<ul class="list-group list-group-flush">
+ <li class="list-group-item">An item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ <li class="list-group-item">A fourth item</li>
+ <li class="list-group-item">And a fifth one</li>
+</ul>
+{{< /example >}}
+
+## Numbered
+
+Add the `.list-group-numbered` modifier class (and optionally use an `<ol>` element) to opt into numbered list group items. Numbers are generated via CSS (as opposed to a `<ol>`s default browser styling) for better placement inside list group items and to allow for better customization.
+
+Numbers are generated by `counter-reset` on the `<ol>`, and then styled and placed with a `::before` pseudo-element on the `<li>` with `counter-increment` and `content`.
+
+{{< example >}}
+<ol class="list-group list-group-numbered">
+ <li class="list-group-item">A list item</li>
+ <li class="list-group-item">A list item</li>
+ <li class="list-group-item">A list item</li>
+</ol>
+{{< /example >}}
+
+These work great with custom content as well.
+
+{{< example >}}
+<ol class="list-group list-group-numbered">
+ <li class="list-group-item d-flex justify-content-between align-items-start">
+ <div class="ms-2 me-auto">
+ <div class="fw-bold">Subheading</div>
+ Content for list item
+ </div>
+ <span class="badge bg-primary rounded-pill">14</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between align-items-start">
+ <div class="ms-2 me-auto">
+ <div class="fw-bold">Subheading</div>
+ Content for list item
+ </div>
+ <span class="badge bg-primary rounded-pill">14</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between align-items-start">
+ <div class="ms-2 me-auto">
+ <div class="fw-bold">Subheading</div>
+ Content for list item
+ </div>
+ <span class="badge bg-primary rounded-pill">14</span>
+ </li>
+</ol>
+{{< /example >}}
+
+## Horizontal
+
+Add `.list-group-horizontal` to change the layout of list group items from vertical to horizontal across all breakpoints. Alternatively, choose a responsive variant `.list-group-horizontal-{sm|md|lg|xl|xxl}` to make a list group horizontal starting at that breakpoint's `min-width`. Currently **horizontal list groups cannot be combined with flush list groups.**
+
+**ProTip:** Want equal-width list group items when horizontal? Add `.flex-fill` to each list group item.
+
+{{< example >}}
+{{< list-group.inline >}}
+{{- range $.Site.Data.breakpoints }}
+<ul class="list-group list-group-horizontal{{ .abbr }}">
+ <li class="list-group-item">An item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+</ul>
+{{- end -}}
+{{< /list-group.inline >}}
+{{< /example >}}
+
+## Variants
+
+{{< callout info >}}
+**Heads up!** As of v5.3.0, the `list-group-item-variant()` Sass mixin is deprecated. List group item variants now have their CSS variables overridden in [the Sass loop](#sass-loop).
+{{< /callout >}}
+
+Use contextual classes to style list items with a stateful background and color.
+
+{{< example >}}
+<ul class="list-group">
+ <li class="list-group-item">A simple default list group item</li>
+{{< list.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+ <li class="list-group-item list-group-item-{{ .name }}">A simple {{ .name }} list group item</li>
+{{- end -}}
+{{< /list.inline >}}
+</ul>
+{{< /example >}}
+
+### For links and buttons
+
+Contextual classes also work with `.list-group-item-action` for `<a>` and `<button>` elements. Note the addition of the hover styles here not present in the previous example. Also supported is the `.active` state; apply it to indicate an active selection on a contextual list group item.
+
+{{< example >}}
+<div class="list-group">
+ <a href="#" class="list-group-item list-group-item-action">A simple default list group item</a>
+{{< list.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+ <a href="#" class="list-group-item list-group-item-action list-group-item-{{ .name }}">A simple {{ .name }} list group item</a>
+{{- end -}}
+{{< /list.inline >}}
+</div>
+{{< /example >}}
+
+{{< callout info >}}
+{{< partial "callouts/warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
+
+## With badges
+
+Add badges to any list group item to show unread counts, activity, and more with the help of some [utilities]({{< docsref "/utilities/flex" >}}).
+
+{{< example >}}
+<ul class="list-group">
+ <li class="list-group-item d-flex justify-content-between align-items-center">
+ A list item
+ <span class="badge bg-primary rounded-pill">14</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between align-items-center">
+ A second list item
+ <span class="badge bg-primary rounded-pill">2</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between align-items-center">
+ A third list item
+ <span class="badge bg-primary rounded-pill">1</span>
+ </li>
+</ul>
+{{< /example >}}
+
+## Custom content
+
+Add nearly any HTML within, even for linked list groups like the one below, with the help of [flexbox utilities]({{< docsref "/utilities/flex" >}}).
+
+{{< example >}}
+<div class="list-group">
+ <a href="#" class="list-group-item list-group-item-action active" aria-current="true">
+ <div class="d-flex w-100 justify-content-between">
+ <h5 class="mb-1">List group item heading</h5>
+ <small>3 days ago</small>
+ </div>
+ <p class="mb-1">Some placeholder content in a paragraph.</p>
+ <small>And some small print.</small>
+ </a>
+ <a href="#" class="list-group-item list-group-item-action">
+ <div class="d-flex w-100 justify-content-between">
+ <h5 class="mb-1">List group item heading</h5>
+ <small class="text-muted">3 days ago</small>
+ </div>
+ <p class="mb-1">Some placeholder content in a paragraph.</p>
+ <small class="text-muted">And some muted small print.</small>
+ </a>
+ <a href="#" class="list-group-item list-group-item-action">
+ <div class="d-flex w-100 justify-content-between">
+ <h5 class="mb-1">List group item heading</h5>
+ <small class="text-muted">3 days ago</small>
+ </div>
+ <p class="mb-1">Some placeholder content in a paragraph.</p>
+ <small class="text-muted">And some muted small print.</small>
+ </a>
+</div>
+{{< /example >}}
+
+## Checkboxes and radios
+
+Place Bootstrap's checkboxes and radios within list group items and customize as needed. You can use them without `<label>`s, but please remember to include an `aria-label` attribute and value for accessibility.
+
+{{< example >}}
+<ul class="list-group">
+ <li class="list-group-item">
+ <input class="form-check-input me-1" type="checkbox" value="" id="firstCheckbox">
+ <label class="form-check-label" for="firstCheckbox">First checkbox</label>
+ </li>
+ <li class="list-group-item">
+ <input class="form-check-input me-1" type="checkbox" value="" id="secondCheckbox">
+ <label class="form-check-label" for="secondCheckbox">Second checkbox</label>
+ </li>
+ <li class="list-group-item">
+ <input class="form-check-input me-1" type="checkbox" value="" id="thirdCheckbox">
+ <label class="form-check-label" for="thirdCheckbox">Third checkbox</label>
+ </li>
+</ul>
+{{< /example >}}
+
+{{< example >}}
+<ul class="list-group">
+ <li class="list-group-item">
+ <input class="form-check-input me-1" type="radio" name="listGroupRadio" value="" id="firstRadio" checked>
+ <label class="form-check-label" for="firstRadio">First radio</label>
+ </li>
+ <li class="list-group-item">
+ <input class="form-check-input me-1" type="radio" name="listGroupRadio" value="" id="secondRadio">
+ <label class="form-check-label" for="secondRadio">Second radio</label>
+ </li>
+ <li class="list-group-item">
+ <input class="form-check-input me-1" type="radio" name="listGroupRadio" value="" id="thirdRadio">
+ <label class="form-check-label" for="thirdRadio">Third radio</label>
+ </li>
+</ul>
+{{< /example >}}
+
+You can use `.stretched-link` on `<label>`s to make the whole list group item clickable.
+
+{{< example >}}
+<ul class="list-group">
+ <li class="list-group-item">
+ <input class="form-check-input me-1" type="checkbox" value="" id="firstCheckboxStretched">
+ <label class="form-check-label stretched-link" for="firstCheckboxStretched">First checkbox</label>
+ </li>
+ <li class="list-group-item">
+ <input class="form-check-input me-1" type="checkbox" value="" id="secondCheckboxStretched">
+ <label class="form-check-label stretched-link" for="secondCheckboxStretched">Second checkbox</label>
+ </li>
+ <li class="list-group-item">
+ <input class="form-check-input me-1" type="checkbox" value="" id="thirdCheckboxStretched">
+ <label class="form-check-label stretched-link" for="thirdCheckboxStretched">Third checkbox</label>
+ </li>
+</ul>
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, list groups now use local CSS variables on `.list-group` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="list-group-css-vars" file="scss/_list-group.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="list-group-variables" file="scss/_variables.scss" >}}
+
+### Sass mixins
+
+Used in combination with `$theme-colors` to generate the [contextual variant classes](#variants) for `.list-group-item`s.
+
+{{< scss-docs name="list-group-mixin" file="scss/mixins/_list-group.scss" >}}
+
+### Sass loop
+
+Loop that generates the modifier classes with an overriding of CSS variables.
+
+{{< scss-docs name="list-group-modifiers" file="scss/_list-group.scss" >}}
+
+## JavaScript behavior
+
+Use the tab JavaScript plugin—include it individually or through the compiled `bootstrap.js` file—to extend our list group to create tabbable panes of local content.
+
+<div class="bd-example" role="tabpanel">
+ <div class="row">
+ <div class="col-4">
+ <div class="list-group" id="list-tab" role="tablist">
+ <a class="list-group-item list-group-item-action active" id="list-home-list" data-bs-toggle="tab" href="#list-home" role="tab" aria-controls="list-home">Home</a>
+ <a class="list-group-item list-group-item-action" id="list-profile-list" data-bs-toggle="tab" href="#list-profile" role="tab" aria-controls="list-profile">Profile</a>
+ <a class="list-group-item list-group-item-action" id="list-messages-list" data-bs-toggle="tab" href="#list-messages" role="tab" aria-controls="list-messages">Messages</a>
+ <a class="list-group-item list-group-item-action" id="list-settings-list" data-bs-toggle="tab" href="#list-settings" role="tab" aria-controls="list-settings">Settings</a>
+ </div>
+ </div>
+ <div class="col-8">
+ <div class="tab-content" id="nav-tabContent">
+ <div class="tab-pane fade show active" id="list-home" role="tabpanel" aria-labelledby="list-home-list">
+ <p>Some placeholder content in a paragraph relating to "Home". And some more content, used here just to pad out and fill this tab panel. In production, you would obviously have more real content here. And not just text. It could be anything, really. Text, images, forms.</p>
+ </div>
+ <div class="tab-pane fade" id="list-profile" role="tabpanel" aria-labelledby="list-profile-list">
+ <p>Some placeholder content in a paragraph relating to "Profile". And some more content, used here just to pad out and fill this tab panel. In production, you would obviously have more real content here. And not just text. It could be anything, really. Text, images, forms.</p>
+ </div>
+ <div class="tab-pane fade" id="list-messages" role="tabpanel" aria-labelledby="list-messages-list">
+ <p>Some placeholder content in a paragraph relating to "Messages". And some more content, used here just to pad out and fill this tab panel. In production, you would obviously have more real content here. And not just text. It could be anything, really. Text, images, forms.</p>
+ </div>
+ <div class="tab-pane fade" id="list-settings" role="tabpanel" aria-labelledby="list-settings-list">
+ <p>Some placeholder content in a paragraph relating to "Settings". And some more content, used here just to pad out and fill this tab panel. In production, you would obviously have more real content here. And not just text. It could be anything, really. Text, images, forms.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+```html
+<div class="row">
+ <div class="col-4">
+ <div class="list-group" id="list-tab" role="tablist">
+ <a class="list-group-item list-group-item-action active" id="list-home-list" data-bs-toggle="list" href="#list-home" role="tab" aria-controls="list-home">Home</a>
+ <a class="list-group-item list-group-item-action" id="list-profile-list" data-bs-toggle="list" href="#list-profile" role="tab" aria-controls="list-profile">Profile</a>
+ <a class="list-group-item list-group-item-action" id="list-messages-list" data-bs-toggle="list" href="#list-messages" role="tab" aria-controls="list-messages">Messages</a>
+ <a class="list-group-item list-group-item-action" id="list-settings-list" data-bs-toggle="list" href="#list-settings" role="tab" aria-controls="list-settings">Settings</a>
+ </div>
+ </div>
+ <div class="col-8">
+ <div class="tab-content" id="nav-tabContent">
+ <div class="tab-pane fade show active" id="list-home" role="tabpanel" aria-labelledby="list-home-list">...</div>
+ <div class="tab-pane fade" id="list-profile" role="tabpanel" aria-labelledby="list-profile-list">...</div>
+ <div class="tab-pane fade" id="list-messages" role="tabpanel" aria-labelledby="list-messages-list">...</div>
+ <div class="tab-pane fade" id="list-settings" role="tabpanel" aria-labelledby="list-settings-list">...</div>
+ </div>
+ </div>
+</div>
+```
+
+### Using data attributes
+
+You can activate a list group navigation without writing any JavaScript by simply specifying `data-bs-toggle="list"` or on an element. Use these data attributes on `.list-group-item`.
+
+```html
+<div role="tabpanel">
+ <!-- List group -->
+ <div class="list-group" id="myList" role="tablist">
+ <a class="list-group-item list-group-item-action active" data-bs-toggle="list" href="#home" role="tab">Home</a>
+ <a class="list-group-item list-group-item-action" data-bs-toggle="list" href="#profile" role="tab">Profile</a>
+ <a class="list-group-item list-group-item-action" data-bs-toggle="list" href="#messages" role="tab">Messages</a>
+ <a class="list-group-item list-group-item-action" data-bs-toggle="list" href="#settings" role="tab">Settings</a>
+ </div>
+
+ <!-- Tab panes -->
+ <div class="tab-content">
+ <div class="tab-pane active" id="home" role="tabpanel">...</div>
+ <div class="tab-pane" id="profile" role="tabpanel">...</div>
+ <div class="tab-pane" id="messages" role="tabpanel">...</div>
+ <div class="tab-pane" id="settings" role="tabpanel">...</div>
+ </div>
+</div>
+```
+
+### Via JavaScript
+
+Enable tabbable list item via JavaScript (each list item needs to be activated individually):
+
+```js
+const triggerTabList = document.querySelectorAll('#myTab a')
+triggerTabList.forEach(triggerEl => {
+ const tabTrigger = new bootstrap.Tab(triggerEl)
+
+ triggerEl.addEventListener('click', event => {
+ event.preventDefault()
+ tabTrigger.show()
+ })
+})
+```
+
+You can activate individual list item in several ways:
+
+```js
+const triggerEl = document.querySelector('#myTab a[href="#profile"]')
+bootstrap.Tab.getInstance(triggerEl).show() // Select tab by name
+
+const triggerFirstTabEl = document.querySelector('#myTab li:first-child a')
+bootstrap.Tab.getInstance(triggerFirstTabEl).show() // Select first tab
+```
+
+### Fade effect
+
+To make tabs panel fade in, add `.fade` to each `.tab-pane`. The first tab pane must also have `.show` to make the initial content visible.
+
+```html
+<div class="tab-content">
+ <div class="tab-pane fade show active" id="home" role="tabpanel">...</div>
+ <div class="tab-pane fade" id="profile" role="tabpanel">...</div>
+ <div class="tab-pane fade" id="messages" role="tabpanel">...</div>
+ <div class="tab-pane fade" id="settings" role="tabpanel">...</div>
+</div>
+```
+
+### Methods
+
+{{< callout danger >}}
+{{< partial "callouts/danger-async-methods.md" >}}
+{{< /callout >}}
+
+Activates your content as a tab element.
+
+You can create a tab instance with the constructor, for example:
+
+```js
+const bsTab = new bootstrap.Tab('#myTab')
+```
+
+{{< bs-table >}}
+| Method | Description |
+| --- | --- |
+| `dispose` | Destroys an element's tab. |
+| `getInstance` | Static method which allows you to get the tab instance associated with a DOM element, you can use it like this: `bootstrap.Tab.getInstance(element)`. |
+| `getOrCreateInstance` | Static method which returns a tab instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Tab.getOrCreateInstance(element)`. |
+| `show` | Selects the given tab and shows its associated pane. Any other tab that was previously selected becomes unselected and its associated pane is hidden. **Returns to the caller before the tab pane has actually been shown** (i.e. before the `shown.bs.tab` event occurs). |
+{{< /bs-table >}}
+
+### Events
+
+When showing a new tab, the events fire in the following order:
+
+1. `hide.bs.tab` (on the current active tab)
+2. `show.bs.tab` (on the to-be-shown tab)
+3. `hidden.bs.tab` (on the previous active tab, the same one as for the `hide.bs.tab` event)
+4. `shown.bs.tab` (on the newly-active just-shown tab, the same one as for the `show.bs.tab` event)
+
+If no tab was already active, then the `hide.bs.tab` and `hidden.bs.tab` events will not be fired.
+
+{{< bs-table >}}
+| Event type | Description |
+| --- | --- |
+| `hide.bs.tab` | This event fires when a new tab is to be shown (and thus the previous active tab is to be hidden). Use `event.target` and `event.relatedTarget` to target the current active tab and the new soon-to-be-active tab, respectively. |
+| `hidden.bs.tab` | This event fires after a new tab is shown (and thus the previous active tab is hidden). Use `event.target` and `event.relatedTarget` to target the previous active tab and the new active tab, respectively. |
+| `show.bs.tab` | This event fires on tab show, but before the new tab has been shown. Use `event.target` and `event.relatedTarget` to target the active tab and the previous active tab (if available) respectively. |
+| `shown.bs.tab` | This event fires on tab show after a tab has been shown. Use `event.target` and `event.relatedTarget` to target the active tab and the previous active tab (if available) respectively. |
+{{< /bs-table >}}
+
+```js
+const tabElms = document.querySelectorAll('a[data-bs-toggle="list"]')
+tabElms.forEach(tabElm => {
+ tabElm.addEventListener('shown.bs.tab', event => {
+ event.target // newly activated tab
+ event.relatedTarget // previous active tab
+ })
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/modal.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/modal.md
new file mode 100644
index 000000000..09ae0653d
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/modal.md
@@ -0,0 +1,888 @@
+---
+layout: docs
+title: Modal
+description: Use Bootstrap's JavaScript modal plugin to add dialogs to your site for lightboxes, user notifications, or completely custom content.
+group: components
+toc: true
+---
+
+## How it works
+
+Before getting started with Bootstrap's modal component, be sure to read the following as our menu options have recently changed.
+
+- Modals are built with HTML, CSS, and JavaScript. They're positioned over everything else in the document and remove scroll from the `<body>` so that modal content scrolls instead.
+- Clicking on the modal "backdrop" will automatically close the modal.
+- Bootstrap only supports one modal window at a time. Nested modals aren't supported as we believe them to be poor user experiences.
+- Modals use `position: fixed`, which can sometimes be a bit particular about its rendering. Whenever possible, place your modal HTML in a top-level position to avoid potential interference from other elements. You'll likely run into issues when nesting a `.modal` within another fixed element.
+- Once again, due to `position: fixed`, there are some caveats with using modals on mobile devices. [See our browser support docs]({{< docsref "/getting-started/browsers-devices#modals-and-dropdowns-on-mobile" >}}) for details.
+- Due to how HTML5 defines its semantics, [the `autofocus` HTML attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-autofocus) has no effect in Bootstrap modals. To achieve the same effect, use some custom JavaScript:
+
+```js
+const myModal = document.getElementById('myModal')
+const myInput = document.getElementById('myInput')
+
+myModal.addEventListener('shown.bs.modal', () => {
+ myInput.focus()
+})
+```
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+Keep reading for demos and usage guidelines.
+
+## Examples
+
+### Modal components
+
+Below is a _static_ modal example (meaning its `position` and `display` have been overridden). Included are the modal header, modal body (required for `padding`), and modal footer (optional). We ask that you include modal headers with dismiss actions whenever possible, or provide another explicit dismiss action.
+
+<div class="bd-example bg-body-tertiary">
+ <div class="modal position-static d-block" tabindex="-1">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h5 class="modal-title">Modal title</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <p>Modal body text goes here.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+```html
+<div class="modal" tabindex="-1">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h5 class="modal-title">Modal title</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <p>Modal body text goes here.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+```
+
+{{< callout info >}}
+In the above static example, we use `<h5>`, to avoid issues with the heading hierarchy in the documentation page. Structurally, however, a modal dialog represents its own separate document/context, so the `.modal-title` should ideally be an `<h1>`. If necessary, you can use the [font size utilities]({{< docsref "/utilities/text#font-size" >}}) to control the heading's appearance. All the following live examples use this approach.
+{{< /callout >}}
+
+### Live demo
+
+Toggle a working modal demo by clicking the button below. It will slide down and fade in from the top of the page.
+
+<div class="modal fade" id="exampleModalLive" tabindex="-1" aria-labelledby="exampleModalLiveLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalLiveLabel">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <p>Woo-hoo, you're reading this text in a modal!</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="bd-example">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalLive">
+ Launch demo modal
+ </button>
+</div>
+
+```html
+<!-- Button trigger modal -->
+<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
+ Launch demo modal
+</button>
+
+<!-- Modal -->
+<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalLabel">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+```
+
+### Static backdrop
+
+When backdrop is set to static, the modal will not close when clicking outside of it. Click the button below to try it.
+
+<div class="modal fade" id="staticBackdropLive" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLiveLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="staticBackdropLiveLabel">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <p>I will not close if you click outside of me. Don't even try to press escape key.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Understood</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="bd-example">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdropLive">
+ Launch static backdrop modal
+ </button>
+</div>
+
+```html
+<!-- Button trigger modal -->
+<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
+ Launch static backdrop modal
+</button>
+
+<!-- Modal -->
+<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="staticBackdropLabel">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Understood</button>
+ </div>
+ </div>
+ </div>
+</div>
+```
+
+### Scrolling long content
+
+When modals become too long for the user's viewport or device, they scroll independent of the page itself. Try the demo below to see what we mean.
+
+<div class="modal fade" id="exampleModalLong" tabindex="-1" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalLongTitle">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body" style="min-height: 1500px">
+ <p>This is some placeholder content to show the scrolling behavior for modals. Instead of repeating the text the modal, we use an inline style set a minimum height, thereby extending the length of the overall modal and demonstrating the overflow scrolling. When content becomes longer than the height of the viewport, scrolling will move the modal as needed.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="bd-example">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalLong">
+ Launch demo modal
+ </button>
+</div>
+
+You can also create a scrollable modal that allows scroll the modal body by adding `.modal-dialog-scrollable` to `.modal-dialog`.
+
+<div class="modal fade" id="exampleModalScrollable" tabindex="-1" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
+ <div class="modal-dialog modal-dialog-scrollable">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalScrollableTitle">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <p>This is some placeholder content to show the scrolling behavior for modals. We use repeated line breaks to demonstrate how content can exceed minimum inner height, thereby showing inner scrolling. When content becomes longer than the predefined max-height of modal, content will be cropped and scrollable within the modal.</p>
+ <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
+ <p>This content should appear at the bottom after you scroll.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="bd-example">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalScrollable">
+ Launch demo modal
+ </button>
+</div>
+
+```html
+<!-- Scrollable modal -->
+<div class="modal-dialog modal-dialog-scrollable">
+ ...
+</div>
+```
+
+### Vertically centered
+
+Add `.modal-dialog-centered` to `.modal-dialog` to vertically center the modal.
+
+<div class="modal fade" id="exampleModalCenter" tabindex="-1" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
+ <div class="modal-dialog modal-dialog-centered">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalCenterTitle">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <p>This is a vertically centered modal.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="modal fade" id="exampleModalCenteredScrollable" tabindex="-1" aria-labelledby="exampleModalCenteredScrollableTitle" aria-hidden="true">
+ <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalCenteredScrollableTitle">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <p>This is some placeholder content to show a vertically centered modal. We've added some extra copy here to show how vertically centering the modal works when combined with scrollable modals. We also use some repeated line breaks to quickly extend the height of the content, thereby triggering the scrolling. When content becomes longer than the predefined max-height of modal, content will be cropped and scrollable within the modal.</p>
+ <br><br><br><br><br><br><br><br><br><br>
+ <p>Just like that.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="bd-example">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalCenter">
+ Vertically centered modal
+ </button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalCenteredScrollable">
+ Vertically centered scrollable modal
+ </button>
+</div>
+
+```html
+<!-- Vertically centered modal -->
+<div class="modal-dialog modal-dialog-centered">
+ ...
+</div>
+
+<!-- Vertically centered scrollable modal -->
+<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
+ ...
+</div>
+```
+
+### Tooltips and popovers
+
+[Tooltips]({{< docsref "/components/tooltips" >}}) and [popovers]({{< docsref "/components/popovers" >}}) can be placed within modals as needed. When modals are closed, any tooltips and popovers within are also automatically dismissed.
+
+<div class="modal fade" id="exampleModalPopovers" tabindex="-1" aria-labelledby="exampleModalPopoversLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalPopoversLabel">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <h2 class="fs-5">Popover in a modal</h2>
+ <p>This <button class="btn btn-secondary" data-bs-toggle="popover" title="Popover title" data-bs-content="Popover body content is set in this attribute." data-bs-container="#exampleModalPopovers">button</button> triggers a popover on click.</p>
+ <hr>
+ <h2 class="fs-5">Tooltips in a modal</h2>
+ <p><a href="#" data-bs-toggle="tooltip" title="Tooltip" data-bs-container="#exampleModalPopovers">This link</a> and <a href="#" data-bs-toggle="tooltip" title="Tooltip" data-bs-container="#exampleModalPopovers">that link</a> have tooltips on hover.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="bd-example">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalPopovers">
+ Launch demo modal
+ </button>
+</div>
+
+```html
+<div class="modal-body">
+ <h2 class="fs-5">Popover in a modal</h2>
+ <p>This <button class="btn btn-secondary" data-bs-toggle="popover" title="Popover title" data-bs-content="Popover body content is set in this attribute.">button</button> triggers a popover on click.</p>
+ <hr>
+ <h2 class="fs-5">Tooltips in a modal</h2>
+ <p><a href="#" data-bs-toggle="tooltip" title="Tooltip">This link</a> and <a href="#" data-bs-toggle="tooltip" title="Tooltip">that link</a> have tooltips on hover.</p>
+</div>
+```
+
+### Using the grid
+
+Utilize the Bootstrap grid system within a modal by nesting `.container-fluid` within the `.modal-body`. Then, use the normal grid system classes as you would anywhere else.
+
+<div class="modal fade" id="gridSystemModal" tabindex="-1" aria-labelledby="gridModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="gridModalLabel">Grids in modals</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <div class="container-fluid bd-example-row">
+ <div class="row">
+ <div class="col-md-4">.col-md-4</div>
+ <div class="col-md-4 ms-auto">.col-md-4 .ms-auto</div>
+ </div>
+ <div class="row">
+ <div class="col-md-3 ms-auto">.col-md-3 .ms-auto</div>
+ <div class="col-md-2 ms-auto">.col-md-2 .ms-auto</div>
+ </div>
+ <div class="row">
+ <div class="col-md-6 ms-auto">.col-md-6 .ms-auto</div>
+ </div>
+ <div class="row">
+ <div class="col-sm-9">
+ Level 1: .col-sm-9
+ <div class="row">
+ <div class="col-8 col-sm-6">
+ Level 2: .col-8 .col-sm-6
+ </div>
+ <div class="col-4 col-sm-6">
+ Level 2: .col-4 .col-sm-6
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="bd-example">
+<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#gridSystemModal">
+ Launch demo modal
+</button>
+</div>
+
+```html
+<div class="modal-body">
+ <div class="container-fluid">
+ <div class="row">
+ <div class="col-md-4">.col-md-4</div>
+ <div class="col-md-4 ms-auto">.col-md-4 .ms-auto</div>
+ </div>
+ <div class="row">
+ <div class="col-md-3 ms-auto">.col-md-3 .ms-auto</div>
+ <div class="col-md-2 ms-auto">.col-md-2 .ms-auto</div>
+ </div>
+ <div class="row">
+ <div class="col-md-6 ms-auto">.col-md-6 .ms-auto</div>
+ </div>
+ <div class="row">
+ <div class="col-sm-9">
+ Level 1: .col-sm-9
+ <div class="row">
+ <div class="col-8 col-sm-6">
+ Level 2: .col-8 .col-sm-6
+ </div>
+ <div class="col-4 col-sm-6">
+ Level 2: .col-4 .col-sm-6
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+```
+
+### Varying modal content
+
+Have a bunch of buttons that all trigger the same modal with slightly different contents? Use `event.relatedTarget` and [HTML `data-bs-*` attributes](https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes) to vary the contents of the modal depending on which button was clicked.
+
+Below is a live demo followed by example HTML and JavaScript. For more information, [read the modal events docs](#events) for details on `relatedTarget`.
+
+{{< example stackblitz_add_js="true" >}}
+<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@mdo">Open modal for @mdo</button>
+<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@fat">Open modal for @fat</button>
+<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@getbootstrap">Open modal for @getbootstrap</button>
+
+<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalLabel">New message</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <form>
+ <div class="mb-3">
+ <label for="recipient-name" class="col-form-label">Recipient:</label>
+ <input type="text" class="form-control" id="recipient-name">
+ </div>
+ <div class="mb-3">
+ <label for="message-text" class="col-form-label">Message:</label>
+ <textarea class="form-control" id="message-text"></textarea>
+ </div>
+ </form>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Send message</button>
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+```js
+const exampleModal = document.getElementById('exampleModal')
+exampleModal.addEventListener('show.bs.modal', event => {
+ // Button that triggered the modal
+ const button = event.relatedTarget
+ // Extract info from data-bs-* attributes
+ const recipient = button.getAttribute('data-bs-whatever')
+ // If necessary, you could initiate an AJAX request here
+ // and then do the updating in a callback.
+ //
+ // Update the modal's content.
+ const modalTitle = exampleModal.querySelector('.modal-title')
+ const modalBodyInput = exampleModal.querySelector('.modal-body input')
+
+ modalTitle.textContent = `New message to ${recipient}`
+ modalBodyInput.value = recipient
+})
+```
+
+### Toggle between modals
+
+Toggle between multiple modals with some clever placement of the `data-bs-target` and `data-bs-toggle` attributes. For example, you could toggle a password reset modal from within an already open sign in modal. **Please note multiple modals cannot be open at the same time**—this method simply toggles between two separate modals.
+
+{{< example >}}
+<div class="modal fade" id="exampleModalToggle" aria-hidden="true" aria-labelledby="exampleModalToggleLabel" tabindex="-1">
+ <div class="modal-dialog modal-dialog-centered">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalToggleLabel">Modal 1</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ Show a second modal and hide this one with the button below.
+ </div>
+ <div class="modal-footer">
+ <button class="btn btn-primary" data-bs-target="#exampleModalToggle2" data-bs-toggle="modal">Open second modal</button>
+ </div>
+ </div>
+ </div>
+</div>
+<div class="modal fade" id="exampleModalToggle2" aria-hidden="true" aria-labelledby="exampleModalToggleLabel2" tabindex="-1">
+ <div class="modal-dialog modal-dialog-centered">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalToggleLabel2">Modal 2</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ Hide this modal and show the first with the button below.
+ </div>
+ <div class="modal-footer">
+ <button class="btn btn-primary" data-bs-target="#exampleModalToggle" data-bs-toggle="modal">Back to first</button>
+ </div>
+ </div>
+ </div>
+</div>
+<button class="btn btn-primary" data-bs-target="#exampleModalToggle" data-bs-toggle="modal">Open first modal</button>
+{{< /example >}}
+
+### Change animation
+
+The `$modal-fade-transform` variable determines the transform state of `.modal-dialog` before the modal fade-in animation, the `$modal-show-transform` variable determines the transform of `.modal-dialog` at the end of the modal fade-in animation.
+
+If you want for example a zoom-in animation, you can set `$modal-fade-transform: scale(.8)`.
+
+### Remove animation
+
+For modals that simply appear rather than fade in to view, remove the `.fade` class from your modal markup.
+
+```html
+<div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
+ ...
+</div>
+```
+
+### Dynamic heights
+
+If the height of a modal changes while it is open, you should call `myModal.handleUpdate()` to readjust the modal's position in case a scrollbar appears.
+
+### Accessibility
+
+Be sure to add `aria-labelledby="..."`, referencing the modal title, to `.modal`. Additionally, you may give a description of your modal dialog with `aria-describedby` on `.modal`. Note that you don't need to add `role="dialog"` since we already add it via JavaScript.
+
+### Embedding YouTube videos
+
+Embedding YouTube videos in modals requires additional JavaScript not in Bootstrap to automatically stop playback and more. [See this helpful Stack Overflow post](https://stackoverflow.com/questions/18622508/bootstrap-3-and-youtube-in-modal) for more information.
+
+## Optional sizes
+
+Modals have three optional sizes, available via modifier classes to be placed on a `.modal-dialog`. These sizes kick in at certain breakpoints to avoid horizontal scrollbars on narrower viewports.
+
+{{< bs-table "table" >}}
+| Size | Class | Modal max-width
+| --- | --- | --- |
+| Small | `.modal-sm` | `300px` |
+| Default | <span class="text-muted">None</span> | `500px` |
+| Large | `.modal-lg` | `800px` |
+| Extra large | `.modal-xl` | `1140px` |
+{{< /bs-table >}}
+
+Our default modal without modifier class constitutes the "medium" size modal.
+
+<div class="bd-example">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalXl">Extra large modal</button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalLg">Large modal</button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalSm">Small modal</button>
+</div>
+
+```html
+<div class="modal-dialog modal-xl">...</div>
+<div class="modal-dialog modal-lg">...</div>
+<div class="modal-dialog modal-sm">...</div>
+```
+
+<div class="modal fade" id="exampleModalXl" tabindex="-1" aria-labelledby="exampleModalXlLabel" aria-hidden="true">
+ <div class="modal-dialog modal-xl">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalXlLabel">Extra large modal</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="modal fade" id="exampleModalLg" tabindex="-1" aria-labelledby="exampleModalLgLabel" aria-hidden="true">
+ <div class="modal-dialog modal-lg">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalLgLabel">Large modal</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="modal fade" id="exampleModalSm" tabindex="-1" aria-labelledby="exampleModalSmLabel" aria-hidden="true">
+ <div class="modal-dialog modal-sm">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalSmLabel">Small modal</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ </div>
+ </div>
+</div>
+
+## Fullscreen Modal
+
+Another override is the option to pop up a modal that covers the user viewport, available via modifier classes that are placed on a `.modal-dialog`.
+
+{{< bs-table >}}
+| Class | Availability |
+| --- | --- | --- |
+| `.modal-fullscreen` | Always |
+| `.modal-fullscreen-sm-down` | `576px` |
+| `.modal-fullscreen-md-down` | `768px` |
+| `.modal-fullscreen-lg-down` | `992px` |
+| `.modal-fullscreen-xl-down` | `1200px` |
+| `.modal-fullscreen-xxl-down` | `1400px` |
+{{< /bs-table >}}
+
+<div class="bd-example">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreen">Full screen</button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenSm">Full screen below sm</button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenMd">Full screen below md</button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenLg">Full screen below lg</button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenXl">Full screen below xl</button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreenXxl">Full screen below xxl</button>
+</div>
+
+```html
+<!-- Full screen modal -->
+<div class="modal-dialog modal-fullscreen-sm-down">
+ ...
+</div>
+```
+
+<div class="modal fade" id="exampleModalFullscreen" tabindex="-1" aria-labelledby="exampleModalFullscreenLabel" aria-hidden="true">
+ <div class="modal-dialog modal-fullscreen">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalFullscreenLabel">Full screen modal</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="modal fade" id="exampleModalFullscreenSm" tabindex="-1" aria-labelledby="exampleModalFullscreenSmLabel" aria-hidden="true">
+ <div class="modal-dialog modal-fullscreen-sm-down">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalFullscreenSmLabel">Full screen below sm</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="modal fade" id="exampleModalFullscreenMd" tabindex="-1" aria-labelledby="exampleModalFullscreenMdLabel" aria-hidden="true">
+ <div class="modal-dialog modal-fullscreen-md-down">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalFullscreenMdLabel">Full screen below md</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="modal fade" id="exampleModalFullscreenLg" tabindex="-1" aria-labelledby="exampleModalFullscreenLgLabel" aria-hidden="true">
+ <div class="modal-dialog modal-fullscreen-lg-down">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalFullscreenLgLabel">Full screen below lg</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="modal fade" id="exampleModalFullscreenXl" tabindex="-1" aria-labelledby="exampleModalFullscreenXlLabel" aria-hidden="true">
+ <div class="modal-dialog modal-fullscreen-xl-down">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalFullscreenXlLabel">Full screen below xl</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+<div class="modal fade" id="exampleModalFullscreenXxl" tabindex="-1" aria-labelledby="exampleModalFullscreenXxlLabel" aria-hidden="true">
+ <div class="modal-dialog modal-fullscreen-xxl-down">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalFullscreenXxlLabel">Full screen below xxl</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+</div>
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, modals now use local CSS variables on `.modal` and `.modal-backdrop` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="modal-css-vars" file="scss/_modal.scss" >}}
+
+{{< scss-docs name="modal-backdrop-css-vars" file="scss/_modal.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="modal-variables" file="scss/_variables.scss" >}}
+
+### Loop
+
+[Responsive fullscreen modals](#fullscreen-modal) are generated via the `$breakpoints` map and a loop in `scss/_modal.scss`.
+
+{{< scss-docs name="modal-fullscreen-loop" file="scss/_modal.scss" >}}
+
+## Usage
+
+The modal plugin toggles your hidden content on demand, via data attributes or JavaScript. It also overrides default scrolling behavior and generates a `.modal-backdrop` to provide a click area for dismissing shown modals when clicking outside the modal.
+
+### Via data attributes
+
+#### Toggle
+
+Activate a modal without writing JavaScript. Set `data-bs-toggle="modal"` on a controller element, like a button, along with a `data-bs-target="#foo"` or `href="#foo"` to target a specific modal to toggle.
+
+```html
+<button type="button" data-bs-toggle="modal" data-bs-target="#myModal">Launch modal</button>
+```
+
+#### Dismiss
+
+{{% js-dismiss "modal" %}}
+
+{{< callout warning >}}
+While both ways to dismiss a modal are supported, keep in mind that dismissing from outside a modal does not match the [ARIA Authoring Practices Guide dialog (modal) pattern](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/). Do this at your own risk.
+{{< /callout >}}
+
+### Via JavaScript
+
+Create a modal with a single line of JavaScript:
+
+```js
+const myModal = new bootstrap.Modal(document.getElementById('myModal'), options)
+// or
+const myModalAlternative = new bootstrap.Modal('#myModal', options)
+```
+
+### Options
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+{{< bs-table "table" >}}
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| `backdrop` | boolean, `'static'` | `true` | Includes a modal-backdrop element. Alternatively, specify `static` for a backdrop which doesn't close the modal when clicked. |
+| `focus` | boolean | `true` | Puts the focus on the modal when initialized. |
+| `keyboard` | boolean | `true` | Closes the modal when escape key is pressed. |
+{{< /bs-table >}}
+
+### Methods
+
+{{< callout danger >}}
+{{< partial "callouts/danger-async-methods.md" >}}
+{{< /callout >}}
+
+#### Passing options
+
+Activates your content as a modal. Accepts an optional options `object`.
+
+```js
+const myModal = new bootstrap.Modal('#myModal', {
+ keyboard: false
+})
+```
+
+{{< bs-table "table" >}}
+| Method | Description |
+| --- | --- |
+| `dispose` | Destroys an element's modal. (Removes stored data on the DOM element) |
+| `getInstance` | _Static_ method which allows you to get the modal instance associated with a DOM element. |
+| `getOrCreateInstance` | _Static_ method which allows you to get the modal instance associated with a DOM element, or create a new one in case it wasn't initialized. |
+| `handleUpdate` | Manually readjust the modal's position if the height of a modal changes while it is open (i.e. in case a scrollbar appears). |
+| `hide` | Manually hides a modal. **Returns to the caller before the modal has actually been hidden** (i.e. before the `hidden.bs.modal` event occurs). |
+| `show` | Manually opens a modal. **Returns to the caller before the modal has actually been shown** (i.e. before the `shown.bs.modal` event occurs). Also, you can pass a DOM element as an argument that can be received in the modal events (as the `relatedTarget` property). (i.e. `const modalToggle = document.getElementById('toggleMyModal'); myModal.show(modalToggle)`. |
+| `toggle` | Manually toggles a modal. **Returns to the caller before the modal has actually been shown or hidden** (i.e. before the `shown.bs.modal` or `hidden.bs.modal` event occurs). |
+{{< /bs-table >}}
+
+### Events
+
+Bootstrap's modal class exposes a few events for hooking into modal functionality. All modal events are fired at the modal itself (i.e. at the `<div class="modal">`).
+
+{{< bs-table >}}
+| Event | Description |
+| --- | --- |
+| `hide.bs.modal` | This event is fired immediately when the `hide` instance method has been called. |
+| `hidden.bs.modal` | This event is fired when the modal has finished being hidden from the user (will wait for CSS transitions to complete). |
+| `hidePrevented.bs.modal` | This event is fired when the modal is shown, its backdrop is `static` and a click outside of the modal is performed. The event is also fired when the escape key is pressed and the `keyboard` option is set to `false`. |
+| `show.bs.modal` | This event fires immediately when the `show` instance method is called. If caused by a click, the clicked element is available as the `relatedTarget` property of the event. |
+| `shown.bs.modal` | This event is fired when the modal has been made visible to the user (will wait for CSS transitions to complete). If caused by a click, the clicked element is available as the `relatedTarget` property of the event. |
+{{< /bs-table >}}
+
+```js
+const myModalEl = document.getElementById('myModal')
+myModalEl.addEventListener('hidden.bs.modal', event => {
+ // do something...
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/navbar.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/navbar.md
new file mode 100644
index 000000000..3afd89cd5
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/navbar.md
@@ -0,0 +1,817 @@
+---
+layout: docs
+title: Navbar
+description: Documentation and examples for Bootstrap's powerful, responsive navigation header, the navbar. Includes support for branding, navigation, and more, including support for our collapse plugin.
+group: components
+toc: true
+---
+
+## How it works
+
+Here's what you need to know before getting started with the navbar:
+
+- Navbars require a wrapping `.navbar` with `.navbar-expand{-sm|-md|-lg|-xl|-xxl}` for responsive collapsing and [color scheme](#color-schemes) classes.
+- Navbars and their contents are fluid by default. Change the [container](#containers) to limit their horizontal width in different ways.
+- Use our [spacing]({{< docsref "/utilities/spacing" >}}) and [flex]({{< docsref "/utilities/flex" >}}) utility classes for controlling spacing and alignment within navbars.
+- Navbars are responsive by default, but you can easily modify them to change that. Responsive behavior depends on our Collapse JavaScript plugin.
+- Ensure accessibility by using a `<nav>` element or, if using a more generic element such as a `<div>`, add a `role="navigation"` to every navbar to explicitly identify it as a landmark region for users of assistive technologies.
+- Indicate the current item by using `aria-current="page"` for the current page or `aria-current="true"` for the current item in a set.
+- **New in v5.2.0:** Navbars can be themed with CSS variables that are scoped to the `.navbar` base class. `.navbar-light` has been deprecated and `.navbar-dark` has been rewritten to override CSS variables instead of adding additional styles.
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+## Supported content
+
+Navbars come with built-in support for a handful of sub-components. Choose from the following as needed:
+
+- `.navbar-brand` for your company, product, or project name.
+- `.navbar-nav` for a full-height and lightweight navigation (including support for dropdowns).
+- `.navbar-toggler` for use with our collapse plugin and other [navigation toggling](#responsive-behaviors) behaviors.
+- Flex and spacing utilities for any form controls and actions.
+- `.navbar-text` for adding vertically centered strings of text.
+- `.collapse.navbar-collapse` for grouping and hiding navbar contents by a parent breakpoint.
+- Add an optional `.navbar-scroll` to set a `max-height` and [scroll expanded navbar content](#scrolling).
+
+Here's an example of all the sub-components included in a responsive light-themed navbar that automatically collapses at the `lg` (large) breakpoint.
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+This example uses [background]({{< docsref "/utilities/background" >}}) (`bg-body-tertiary`) and [spacing]({{< docsref "/utilities/spacing" >}}) (`me-auto`, `mb-2`, `mb-lg-0`, `me-2`) utility classes.
+
+### Brand
+
+The `.navbar-brand` can be applied to most elements, but an anchor works best, as some elements might require utility classes or custom styles.
+
+#### Text
+
+Add your text within an element with the `.navbar-brand` class.
+
+{{< example >}}
+<!-- As a link -->
+<nav class="navbar bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ </div>
+</nav>
+
+<!-- As a heading -->
+<nav class="navbar bg-body-tertiary">
+ <div class="container-fluid">
+ <span class="navbar-brand mb-0 h1">Navbar</span>
+ </div>
+</nav>
+{{< /example >}}
+
+#### Image
+
+You can replace the text within the `.navbar-brand` with an `<img>`.
+
+{{< example >}}
+<nav class="navbar bg-body-tertiary">
+ <div class="container">
+ <a class="navbar-brand" href="#">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="Bootstrap" width="30" height="24">
+ </a>
+ </div>
+</nav>
+{{< /example >}}
+
+#### Image and text
+
+You can also make use of some additional utilities to add an image and text at the same time. Note the addition of `.d-inline-block` and `.align-text-top` on the `<img>`.
+
+{{< example >}}
+<nav class="navbar bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="Logo" width="30" height="24" class="d-inline-block align-text-top">
+ Bootstrap
+ </a>
+ </div>
+</nav>
+{{< /example >}}
+
+### Nav
+
+Navbar navigation links build on our `.nav` options with their own modifier class and require the use of [toggler classes](#toggler) for proper responsive styling. **Navigation in navbars will also grow to occupy as much horizontal space as possible** to keep your navbar contents securely aligned.
+
+Add the `.active` class on `.nav-link` to indicate the current page.
+
+Please note that you should also add the `aria-current` attribute on the active `.nav-link`.
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarNav">
+ <ul class="navbar-nav">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Features</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Pricing</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+And because we use classes for our navs, you can avoid the list-based approach entirely if you like.
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
+ <div class="navbar-nav">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ <a class="nav-link" href="#">Features</a>
+ <a class="nav-link" href="#">Pricing</a>
+ <a class="nav-link disabled">Disabled</a>
+ </div>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+You can also use dropdowns in your navbar. Dropdown menus require a wrapping element for positioning, so be sure to use separate and nested elements for `.nav-item` and `.nav-link` as shown below.
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarNavDropdown">
+ <ul class="navbar-nav">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Features</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Pricing</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown link
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+### Forms
+
+Place various form controls and components within a navbar:
+
+{{< example >}}
+<nav class="navbar bg-body-tertiary">
+ <div class="container-fluid">
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+</nav>
+{{< /example >}}
+
+Immediate child elements of `.navbar` use flex layout and will default to `justify-content: space-between`. Use additional [flex utilities]({{< docsref "/utilities/flex" >}}) as needed to adjust this behavior.
+
+{{< example >}}
+<nav class="navbar bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand">Navbar</a>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+</nav>
+{{< /example >}}
+
+Input groups work, too. If your navbar is an entire form, or mostly a form, you can use the `<form>` element as the container and save some HTML.
+
+{{< example >}}
+<nav class="navbar bg-body-tertiary">
+ <form class="container-fluid">
+ <div class="input-group">
+ <span class="input-group-text" id="basic-addon1">@</span>
+ <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
+ </div>
+ </form>
+</nav>
+{{< /example >}}
+
+Various buttons are supported as part of these navbar forms, too. This is also a great reminder that vertical alignment utilities can be used to align different sized elements.
+
+{{< example >}}
+<nav class="navbar bg-body-tertiary">
+ <form class="container-fluid justify-content-start">
+ <button class="btn btn-outline-success me-2" type="button">Main button</button>
+ <button class="btn btn-sm btn-outline-secondary" type="button">Smaller button</button>
+ </form>
+</nav>
+{{< /example >}}
+
+### Text
+
+Navbars may contain bits of text with the help of `.navbar-text`. This class adjusts vertical alignment and horizontal spacing for strings of text.
+
+{{< example >}}
+<nav class="navbar bg-body-tertiary">
+ <div class="container-fluid">
+ <span class="navbar-text">
+ Navbar text with an inline element
+ </span>
+ </div>
+</nav>
+{{< /example >}}
+
+Mix and match with other components and utilities as needed.
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar w/ text</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarText">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Features</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Pricing</a>
+ </li>
+ </ul>
+ <span class="navbar-text">
+ Navbar text with an inline element
+ </span>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+## Color schemes
+
+{{< callout warning >}}
+**New dark navbars in v5.3.0 —** We've deprecated `.navbar-dark` in favor of the new `data-bs-theme="dark"`. Add `data-bs-theme="dark"` to the `.navbar` to enable a component-specific color mode. [Learn more about our color modes.]({{< docsref "/customize/color-modes" >}})
+
+---
+
+**New in v5.2.0 —** Navbar theming is now powered by CSS variables and `.navbar-light` has been deprecated. CSS variables are applied to `.navbar`, defaulting to the "light" appearance, and can be overridden with `.navbar-dark`.
+{{< /callout >}}
+
+Navbar themes are easier than ever thanks to Bootstrap's combination of Sass and CSS variables. The default is our "light navbar" for use with light background colors, but you can also apply `.navbar-dark` for dark background colors. Then, customize with `.bg-*` utilities.
+
+<div class="bd-example">
+ <nav class="navbar navbar-expand-lg bg-body-secondary" data-bs-theme="dark">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor01" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarColor01">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Features</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Pricing</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">About</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-light" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg bg-primary" data-bs-theme="dark">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor02" aria-controls="navbarColor02" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarColor02">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Features</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Pricing</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">About</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-light" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg" style="background-color: #e3f2fd;" data-bs-theme="light">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarColor03" aria-controls="navbarColor03" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarColor03">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Features</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Pricing</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">About</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-primary" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </nav>
+</div>
+
+```html
+<nav class="navbar bg-dark" data-bs-theme="dark">
+ <!-- Navbar content -->
+</nav>
+
+<nav class="navbar bg-primary" data-bs-theme="dark">
+ <!-- Navbar content -->
+</nav>
+
+<nav class="navbar" style="background-color: #e3f2fd;">
+ <!-- Navbar content -->
+</nav>
+```
+
+## Containers
+
+Although it's not required, you can wrap a navbar in a `.container` to center it on a page–though note that an inner container is still required. Or you can add a container inside the `.navbar` to only center the contents of a [fixed or static top navbar](#placement).
+
+{{< example >}}
+<div class="container">
+ <nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ </div>
+ </nav>
+</div>
+{{< /example >}}
+
+Use any of the responsive containers to change how wide the content in your navbar is presented.
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-md">
+ <a class="navbar-brand" href="#">Navbar</a>
+ </div>
+</nav>
+{{< /example >}}
+
+## Placement
+
+Use our [position utilities]({{< docsref "/utilities/position" >}}) to place navbars in non-static positions. Choose from fixed to the top, fixed to the bottom, stickied to the top (scrolls with the page until it reaches the top, then stays there), or stickied to the bottom (scrolls with the page until it reaches the bottom, then stays there).
+
+Fixed navbars use `position: fixed`, meaning they're pulled from the normal flow of the DOM and may require custom CSS (e.g., `padding-top` on the `<body>`) to prevent overlap with other elements.
+
+{{< example >}}
+<nav class="navbar bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Default</a>
+ </div>
+</nav>
+{{< /example >}}
+
+{{< example >}}
+<nav class="navbar fixed-top bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Fixed top</a>
+ </div>
+</nav>
+{{< /example >}}
+
+{{< example >}}
+<nav class="navbar fixed-bottom bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Fixed bottom</a>
+ </div>
+</nav>
+{{< /example >}}
+
+{{< example >}}
+<nav class="navbar sticky-top bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Sticky top</a>
+ </div>
+</nav>
+{{< /example >}}
+
+{{< example >}}
+<nav class="navbar sticky-bottom bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Sticky bottom</a>
+ </div>
+</nav>
+{{< /example >}}
+
+## Scrolling
+
+Add `.navbar-nav-scroll` to a `.navbar-nav` (or other navbar sub-component) to enable vertical scrolling within the toggleable contents of a collapsed navbar. By default, scrolling kicks in at `75vh` (or 75% of the viewport height), but you can override that with the local CSS custom property `--bs-navbar-height` or custom styles. At larger viewports when the navbar is expanded, content will appear as it does in a default navbar.
+
+Please note that this behavior comes with a potential drawback of `overflow`—when setting `overflow-y: auto` (required to scroll the content here), `overflow-x` is the equivalent of `auto`, which will crop some horizontal content.
+
+Here's an example navbar using `.navbar-nav-scroll` with `style="--bs-scroll-height: 100px;"`, with some extra margin utilities for optimum spacing.
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar scroll</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarScroll" aria-controls="navbarScroll" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarScroll">
+ <ul class="navbar-nav me-auto my-2 my-lg-0 navbar-nav-scroll" style="--bs-scroll-height: 100px;">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Link
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Link</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+## Responsive behaviors
+
+Navbars can use `.navbar-toggler`, `.navbar-collapse`, and `.navbar-expand{-sm|-md|-lg|-xl|-xxl}` classes to determine when their content collapses behind a button. In combination with other utilities, you can easily choose when to show or hide particular elements.
+
+For navbars that never collapse, add the `.navbar-expand` class on the navbar. For navbars that always collapse, don't add any `.navbar-expand` class.
+
+### Toggler
+
+Navbar togglers are left-aligned by default, but should they follow a sibling element like a `.navbar-brand`, they'll automatically be aligned to the far right. Reversing your markup will reverse the placement of the toggler. Below are examples of different toggle styles.
+
+With no `.navbar-brand` shown at the smallest breakpoint:
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo01" aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarTogglerDemo01">
+ <a class="navbar-brand" href="#">Hidden brand</a>
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+With a brand name shown on the left and toggler on the right:
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarTogglerDemo02">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+With a toggler on the left and brand name on the right:
+
+{{< example >}}
+<nav class="navbar navbar-expand-lg bg-body-tertiary">
+ <div class="container-fluid">
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarTogglerDemo03" aria-controls="navbarTogglerDemo03" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <a class="navbar-brand" href="#">Navbar</a>
+ <div class="collapse navbar-collapse" id="navbarTogglerDemo03">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+### External content
+
+Sometimes you want to use the collapse plugin to trigger a container element for content that structurally sits outside of the `.navbar` . Because our plugin works on the `id` and `data-bs-target` matching, that's easily done!
+
+{{< example >}}
+<div class="collapse" id="navbarToggleExternalContent">
+ <div class="bg-dark p-4">
+ <h5 class="text-white h4">Collapsed content</h5>
+ <span class="text-muted">Toggleable via the navbar brand.</span>
+ </div>
+</div>
+<nav class="navbar navbar-dark bg-dark">
+ <div class="container-fluid">
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ </div>
+</nav>
+{{< /example >}}
+
+When you do this, we recommend including additional JavaScript to move the focus programmatically to the container when it is opened. Otherwise, keyboard users and users of assistive technologies will likely have a hard time finding the newly revealed content - particularly if the container that was opened comes *before* the toggler in the document's structure. We also recommend making sure that the toggler has the `aria-controls` attribute, pointing to the `id` of the content container. In theory, this allows assistive technology users to jump directly from the toggler to the container it controls–but support for this is currently quite patchy.
+
+### Offcanvas
+
+Transform your expanding and collapsing navbar into an offcanvas drawer with the [offcanvas component]({{< docsref "/components/offcanvas" >}}). We extend both the offcanvas default styles and use our `.navbar-expand-*` classes to create a dynamic and flexible navigation sidebar.
+
+In the example below, to create an offcanvas navbar that is always collapsed across all breakpoints, omit the `.navbar-expand-*` class entirely.
+
+{{< example >}}
+<nav class="navbar bg-body-tertiary fixed-top">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Offcanvas navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbar" aria-controls="offcanvasNavbar">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasNavbar" aria-labelledby="offcanvasNavbarLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasNavbarLabel">Offcanvas</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li>
+ <hr class="dropdown-divider">
+ </li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form class="d-flex mt-3" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+To create an offcanvas navbar that expands into a normal navbar at a specific breakpoint like `lg`, use `.navbar-expand-lg`.
+
+```html
+<nav class="navbar navbar-expand-lg bg-body-tertiary fixed-top">
+ <a class="navbar-brand" href="#">Offcanvas navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#navbarOffcanvasLg" aria-controls="navbarOffcanvasLg">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="offcanvas offcanvas-end" tabindex="-1" id="navbarOffcanvasLg" aria-labelledby="navbarOffcanvasLgLabel">
+ ...
+ </div>
+</nav>
+```
+
+When using offcanvas in a dark navbar, be aware that you may need to have a dark background on the offcanvas content to avoid the text becoming illegible. In the example below, we add `.navbar-dark` and `.bg-dark` to the `.navbar`, `.text-bg-dark` to the `.offcanvas`, `.dropdown-menu-dark` to `.dropdown-menu`, and `.btn-close-white` to `.btn-close` for proper styling with a dark offcanvas.
+
+{{< example >}}
+<nav class="navbar navbar-dark bg-dark fixed-top">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Offcanvas dark navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasDarkNavbar" aria-controls="offcanvasDarkNavbar">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="offcanvas offcanvas-end text-bg-dark" tabindex="-1" id="offcanvasDarkNavbar" aria-labelledby="offcanvasDarkNavbarLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasDarkNavbarLabel">Dark offcanvas</h5>
+ <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </a>
+ <ul class="dropdown-menu dropdown-menu-dark">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li>
+ <hr class="dropdown-divider">
+ </li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form class="d-flex mt-3" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </div>
+</nav>
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, navbars now use local CSS variables on `.navbar` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="navbar-css-vars" file="scss/_navbar.scss" >}}
+
+Some additional CSS variables are also present on `.navbar-nav`:
+
+{{< scss-docs name="navbar-nav-css-vars" file="scss/_navbar.scss" >}}
+
+Customization through CSS variables can be seen on the `.navbar-dark` class where we override specific values without adding duplicate CSS selectors.
+
+{{< scss-docs name="navbar-dark-css-vars" file="scss/_navbar.scss" >}}
+
+### Sass variables
+
+Variables for all navbars:
+
+{{< scss-docs name="navbar-variables" file="scss/_variables.scss" >}}
+
+Variables for the [dark navbar](#color-schemes):
+
+{{< scss-docs name="navbar-dark-variables" file="scss/_variables.scss" >}}
+
+### Sass loop
+
+[Responsive navbar expand/collapse classes](#responsive-behaviors) (e.g., `.navbar-expand-lg`) are combined with the `$breakpoints` map and generated through a loop in `scss/_navbar.scss`.
+
+{{< scss-docs name="navbar-expand-loop" file="scss/_navbar.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/navs-tabs.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/navs-tabs.md
new file mode 100644
index 000000000..57c47e0cb
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/navs-tabs.md
@@ -0,0 +1,671 @@
+---
+layout: docs
+title: Navs and tabs
+description: Documentation and examples for how to use Bootstrap's included navigation components.
+group: components
+aliases: "/docs/5.3/components/navs/"
+toc: true
+---
+
+## Base nav
+
+Navigation available in Bootstrap share general markup and styles, from the base `.nav` class to the active and disabled states. Swap modifier classes to switch between each style.
+
+The base `.nav` component is built with flexbox and provide a strong foundation for building all types of navigation components. It includes some style overrides (for working with lists), some link padding for larger hit areas, and basic disabled styling.
+
+{{< callout info >}}
+The base `.nav` component does not include any `.active` state. The following examples include the class, mainly to demonstrate that this particular class does not trigger any special styling.
+
+To convey the active state to assistive technologies, use the `aria-current` attribute — using the `page` value for current page, or `true` for the current item in a set.
+{{< /callout >}}
+
+{{< example >}}
+<ul class="nav">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+Classes are used throughout, so your markup can be super flexible. Use `<ul>`s like above, `<ol>` if the order of your items is important, or roll your own with a `<nav>` element. Because the `.nav` uses `display: flex`, the nav links behave the same as nav items would, but without the extra markup.
+
+{{< example >}}
+<nav class="nav">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link disabled">Disabled</a>
+</nav>
+{{< /example >}}
+
+## Available styles
+
+Change the style of `.nav`s component with modifiers and utilities. Mix and match as needed, or build your own.
+
+### Horizontal alignment
+
+Change the horizontal alignment of your nav with [flexbox utilities]({{< docsref "/layout/grid#horizontal-alignment" >}}). By default, navs are left-aligned, but you can easily change them to center or right aligned.
+
+Centered with `.justify-content-center`:
+
+{{< example >}}
+<ul class="nav justify-content-center">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+Right-aligned with `.justify-content-end`:
+
+{{< example >}}
+<ul class="nav justify-content-end">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+### Vertical
+
+Stack your navigation by changing the flex item direction with the `.flex-column` utility. Need to stack them on some viewports but not others? Use the responsive versions (e.g., `.flex-sm-column`).
+
+{{< example >}}
+<ul class="nav flex-column">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+As always, vertical navigation is possible without `<ul>`s, too.
+
+{{< example >}}
+<nav class="nav flex-column">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link disabled">Disabled</a>
+</nav>
+{{< /example >}}
+
+### Tabs
+
+Takes the basic nav from above and adds the `.nav-tabs` class to generate a tabbed interface. Use them to create tabbable regions with our [tab JavaScript plugin](#javascript-behavior).
+
+{{< example >}}
+<ul class="nav nav-tabs">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+### Pills
+
+Take that same HTML, but use `.nav-pills` instead:
+
+{{< example >}}
+<ul class="nav nav-pills">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+### Fill and justify
+
+Force your `.nav`'s contents to extend the full available width one of two modifier classes. To proportionately fill all available space with your `.nav-item`s, use `.nav-fill`. Notice that all horizontal space is occupied, but not every nav item has the same width.
+
+{{< example >}}
+<ul class="nav nav-pills nav-fill">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Much longer nav link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+When using a `<nav>`-based navigation, you can safely omit `.nav-item` as only `.nav-link` is required for styling `<a>` elements.
+
+{{< example >}}
+<nav class="nav nav-pills nav-fill">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ <a class="nav-link" href="#">Much longer nav link</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link disabled">Disabled</a>
+</nav>
+{{< /example >}}
+
+For equal-width elements, use `.nav-justified`. All horizontal space will be occupied by nav links, but unlike the `.nav-fill` above, every nav item will be the same width.
+
+{{< example >}}
+<ul class="nav nav-pills nav-justified">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Much longer nav link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+Similar to the `.nav-fill` example using a `<nav>`-based navigation.
+
+{{< example >}}
+<nav class="nav nav-pills nav-justified">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ <a class="nav-link" href="#">Much longer nav link</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link disabled">Disabled</a>
+</nav>
+
+{{< /example >}}
+## Working with flex utilities
+
+If you need responsive nav variations, consider using a series of [flexbox utilities]({{< docsref "/utilities/flex" >}}). While more verbose, these utilities offer greater customization across responsive breakpoints. In the example below, our nav will be stacked on the lowest breakpoint, then adapt to a horizontal layout that fills the available width starting from the small breakpoint.
+
+{{< example >}}
+<nav class="nav nav-pills flex-column flex-sm-row">
+ <a class="flex-sm-fill text-sm-center nav-link active" aria-current="page" href="#">Active</a>
+ <a class="flex-sm-fill text-sm-center nav-link" href="#">Longer nav link</a>
+ <a class="flex-sm-fill text-sm-center nav-link" href="#">Link</a>
+ <a class="flex-sm-fill text-sm-center nav-link disabled">Disabled</a>
+</nav>
+{{< /example >}}
+
+## Regarding accessibility
+
+If you're using navs to provide a navigation bar, be sure to add a `role="navigation"` to the most logical parent container of the `<ul>`, or wrap a `<nav>` element around the whole navigation. Do not add the role to the `<ul>` itself, as this would prevent it from being announced as an actual list by assistive technologies.
+
+Note that navigation bars, even if visually styled as tabs with the `.nav-tabs` class, should **not** be given `role="tablist"`, `role="tab"` or `role="tabpanel"` attributes. These are only appropriate for dynamic tabbed interfaces, as described in the [ARIA Authoring Practices Guide tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/). See [JavaScript behavior](#javascript-behavior) for dynamic tabbed interfaces in this section for an example. The `aria-current` attribute is not necessary on dynamic tabbed interfaces since our JavaScript handles the selected state by adding `aria-selected="true"` on the active tab.
+
+## Using dropdowns
+
+Add dropdown menus with a little extra HTML and the [dropdowns JavaScript plugin]({{< docsref "/components/dropdowns#usage" >}}).
+
+### Tabs with dropdowns
+
+{{< example >}}
+<ul class="nav nav-tabs">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+### Pills with dropdowns
+
+{{< example >}}
+<ul class="nav nav-pills">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+</ul>
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, navs now use local CSS variables on `.nav`, `.nav-tabs`, and `.nav-pills` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+On the `.nav` base class:
+
+{{< scss-docs name="nav-css-vars" file="scss/_nav.scss" >}}
+
+On the `.nav-tabs` modifier class:
+
+{{< scss-docs name="nav-tabs-css-vars" file="scss/_nav.scss" >}}
+
+On the `.nav-pills` modifier class:
+
+{{< scss-docs name="nav-pills-css-vars" file="scss/_nav.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="nav-variables" file="scss/_variables.scss" >}}
+
+## JavaScript behavior
+
+Use the tab JavaScript plugin—include it individually or through the compiled `bootstrap.js` file—to extend our navigational tabs and pills to create tabbable panes of local content.
+
+<div class="bd-example">
+ <ul class="nav nav-tabs mb-3" id="myTab" role="tablist">
+ <li class="nav-item" role="presentation">
+ <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Home</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile-tab-pane" type="button" role="tab" aria-controls="profile-tab-pane" aria-selected="false">Profile</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact-tab-pane" type="button" role="tab" aria-controls="contact-tab-pane" aria-selected="false">Contact</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="disabled-tab" data-bs-toggle="tab" data-bs-target="#disabled-tab-pane" type="button" role="tab" aria-controls="disabled-tab-pane" aria-selected="false" disabled>Disabled</button>
+ </li>
+ </ul>
+ <div class="tab-content" id="myTabContent">
+ <div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="profile-tab-pane" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="contact-tab-pane" role="tabpanel" aria-labelledby="contact-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Contact tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="disabled-tab-pane" role="tabpanel" aria-labelledby="disabled-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Disabled tab's</strong> associated content.</p>
+ </div>
+ </div>
+</div>
+
+```html
+<ul class="nav nav-tabs" id="myTab" role="tablist">
+ <li class="nav-item" role="presentation">
+ <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Home</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile-tab-pane" type="button" role="tab" aria-controls="profile-tab-pane" aria-selected="false">Profile</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact-tab-pane" type="button" role="tab" aria-controls="contact-tab-pane" aria-selected="false">Contact</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="disabled-tab" data-bs-toggle="tab" data-bs-target="#disabled-tab-pane" type="button" role="tab" aria-controls="disabled-tab-pane" aria-selected="false" disabled>Disabled</button>
+ </li>
+</ul>
+<div class="tab-content" id="myTabContent">
+ <div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="profile-tab-pane" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="contact-tab-pane" role="tabpanel" aria-labelledby="contact-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="disabled-tab-pane" role="tabpanel" aria-labelledby="disabled-tab" tabindex="0">...</div>
+</div>
+```
+
+To help fit your needs, this works with `<ul>`-based markup, as shown above, or with any arbitrary "roll your own" markup. Note that if you're using `<nav>`, you shouldn't add `role="tablist"` directly to it, as this would override the element's native role as a navigation landmark. Instead, switch to an alternative element (in the example below, a simple `<div>`) and wrap the `<nav>` around it.
+
+<div class="bd-example">
+ <nav>
+ <div class="nav nav-tabs mb-3" id="nav-tab" role="tablist">
+ <button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Home</button>
+ <button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</button>
+ <button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</button>
+ <button class="nav-link" id="nav-disabled-tab" data-bs-toggle="tab" data-bs-target="#nav-disabled" type="button" role="tab" aria-controls="nav-disabled" aria-selected="false" disabled>Disabled</button>
+ </div>
+ </nav>
+ <div class="tab-content" id="nav-tabContent">
+ <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Contact tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="nav-disabled" role="tabpanel" aria-labelledby="nav-disabled-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Disabled tab's</strong> associated content.</p>
+ </div>
+ </div>
+</div>
+
+```html
+<nav>
+ <div class="nav nav-tabs" id="nav-tab" role="tablist">
+ <button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Home</button>
+ <button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</button>
+ <button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</button>
+ <button class="nav-link" id="nav-disabled-tab" data-bs-toggle="tab" data-bs-target="#nav-disabled" type="button" role="tab" aria-controls="nav-disabled" aria-selected="false" disabled>Disabled</button>
+ </div>
+</nav>
+<div class="tab-content" id="nav-tabContent">
+ <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="nav-disabled" role="tabpanel" aria-labelledby="nav-disabled-tab" tabindex="0">...</div>
+</div>
+```
+
+The tabs plugin also works with pills.
+
+<div class="bd-example">
+ <ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
+ <li class="nav-item" role="presentation">
+ <button class="nav-link active" id="pills-home-tab" data-bs-toggle="pill" data-bs-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Home</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="pills-profile-tab" data-bs-toggle="pill" data-bs-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="pills-contact-tab" data-bs-toggle="pill" data-bs-target="#pills-contact" type="button" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#pills-disabled" type="button" role="tab" aria-controls="pills-disabled" aria-selected="false" disabled>Disabled</button>
+ </li>
+ </ul>
+ <div class="tab-content" id="pills-tabContent">
+ <div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Contact tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="pills-disabled" role="tabpanel" aria-labelledby="pills-disabled-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Disabled tab's</strong> associated content.</p>
+ </div>
+ </div>
+</div>
+
+```html
+<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
+ <li class="nav-item" role="presentation">
+ <button class="nav-link active" id="pills-home-tab" data-bs-toggle="pill" data-bs-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Home</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="pills-profile-tab" data-bs-toggle="pill" data-bs-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="pills-contact-tab" data-bs-toggle="pill" data-bs-target="#pills-contact" type="button" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#pills-disabled" type="button" role="tab" aria-controls="pills-disabled" aria-selected="false" disabled>Disabled</button>
+ </li>
+</ul>
+<div class="tab-content" id="pills-tabContent">
+ <div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="pills-disabled" role="tabpanel" aria-labelledby="pills-disabled-tab" tabindex="0">...</div>
+</div>
+```
+
+And with vertical pills. Ideally, for vertical tabs, you should also add `aria-orientation="vertical"` to the tab list container.
+
+<div class="bd-example">
+ <div class="d-flex align-items-start">
+ <div class="nav flex-column nav-pills me-3" id="v-pills-tab" role="tablist" aria-orientation="vertical">
+ <button class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" data-bs-target="#v-pills-home" type="button" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</button>
+ <button class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" data-bs-target="#v-pills-profile" type="button" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</button>
+ <button class="nav-link" id="v-pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#v-pills-disabled" type="button" role="tab" aria-controls="v-pills-disabled" aria-selected="false" disabled>Disabled</button>
+ <button class="nav-link" id="v-pills-messages-tab" data-bs-toggle="pill" data-bs-target="#v-pills-messages" type="button" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</button>
+ <button class="nav-link" id="v-pills-settings-tab" data-bs-toggle="pill" data-bs-target="#v-pills-settings" type="button" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</button>
+ </div>
+ <div class="tab-content" id="v-pills-tabContent">
+ <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="v-pills-disabled" role="tabpanel" aria-labelledby="v-pills-disabled-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Disabled tab's</strong> associated content.</p>
+ </div>
+ <div class="tab-pane fade" id="v-pills-messages" role="tabpanel" aria-labelledby="v-pills-messages-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Messages tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="v-pills-settings" role="tabpanel" aria-labelledby="v-pills-settings-tab" tabindex="0">
+ <p>This is some placeholder content the <strong>Settings tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ </div>
+ </div>
+</div>
+
+```html
+<div class="d-flex align-items-start">
+ <div class="nav flex-column nav-pills me-3" id="v-pills-tab" role="tablist" aria-orientation="vertical">
+ <button class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" data-bs-target="#v-pills-home" type="button" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</button>
+ <button class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" data-bs-target="#v-pills-profile" type="button" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</button>
+ <button class="nav-link" id="v-pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#v-pills-disabled" type="button" role="tab" aria-controls="v-pills-disabled" aria-selected="false" disabled>Disabled</button>
+ <button class="nav-link" id="v-pills-messages-tab" data-bs-toggle="pill" data-bs-target="#v-pills-messages" type="button" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</button>
+ <button class="nav-link" id="v-pills-settings-tab" data-bs-toggle="pill" data-bs-target="#v-pills-settings" type="button" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</button>
+ </div>
+ <div class="tab-content" id="v-pills-tabContent">
+ <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="v-pills-disabled" role="tabpanel" aria-labelledby="v-pills-disabled-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="v-pills-messages" role="tabpanel" aria-labelledby="v-pills-messages-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="v-pills-settings" role="tabpanel" aria-labelledby="v-pills-settings-tab" tabindex="0">...</div>
+ </div>
+</div>
+```
+
+### Accessibility
+
+Dynamic tabbed interfaces, as described in the [ARIA Authoring Practices Guide tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabpanel/), require `role="tablist"`, `role="tab"`, `role="tabpanel"`, and additional `aria-` attributes in order to convey their structure, functionality, and current state to users of assistive technologies (such as screen readers). As a best practice, we recommend using `<button>` elements for the tabs, as these are controls that trigger a dynamic change, rather than links that navigate to a new page or location.
+
+In line with the ARIA Authoring Practices pattern, only the currently active tab receives keyboard focus. When the JavaScript plugin is initialized, it will set `tabindex="-1"` on all inactive tab controls. Once the currently active tab has focus, the cursor keys activate the previous/next tab, with the plugin changing the [roving `tabindex`](https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/) accordingly. However, note that the JavaScript plugin does not distinguish between horizontal and vertical tab lists when it comes to cursor key interactions: regardless of the tab list's orientation, both the up *and* left cursor go to the previous tab, and down *and* right cursor go to the next tab.
+
+{{< callout warning >}}
+In general, to facilitate keyboard navigation, it's recommended to make the tab panels themselves focusable as well, unless the first element containing meaningful content inside the tab panel is already focusable. The JavaScript plugin does not try to handle this aspect—where appropriate, you'll need to explicitly make your tab panels focusable by adding `tabindex="0"` in your markup.
+{{< /callout >}}
+
+{{< callout danger >}}
+The tab JavaScript plugin **does not** support tabbed interfaces that contain dropdown menus, as these cause both usability and accessibility issues. From a usability perspective, the fact that the currently displayed tab's trigger element is not immediately visible (as it's inside the closed dropdown menu) can cause confusion. From an accessibility point of view, there is currently no sensible way to map this sort of construct to a standard WAI ARIA pattern, meaning that it cannot be easily made understandable to users of assistive technologies.
+{{< /callout >}}
+
+### Using data attributes
+
+You can activate a tab or pill navigation without writing any JavaScript by simply specifying `data-bs-toggle="tab"` or `data-bs-toggle="pill"` on an element. Use these data attributes on `.nav-tabs` or `.nav-pills`.
+
+```html
+<!-- Nav tabs -->
+<ul class="nav nav-tabs" id="myTab" role="tablist">
+ <li class="nav-item" role="presentation">
+ <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profile</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="messages-tab" data-bs-toggle="tab" data-bs-target="#messages" type="button" role="tab" aria-controls="messages" aria-selected="false">Messages</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="settings-tab" data-bs-toggle="tab" data-bs-target="#settings" type="button" role="tab" aria-controls="settings" aria-selected="false">Settings</button>
+ </li>
+</ul>
+
+<!-- Tab panes -->
+<div class="tab-content">
+ <div class="tab-pane active" id="home" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
+ <div class="tab-pane" id="profile" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
+ <div class="tab-pane" id="messages" role="tabpanel" aria-labelledby="messages-tab" tabindex="0">...</div>
+ <div class="tab-pane" id="settings" role="tabpanel" aria-labelledby="settings-tab" tabindex="0">...</div>
+</div>
+```
+
+### Via JavaScript
+
+Enable tabbable tabs via JavaScript (each tab needs to be activated individually):
+
+```js
+const triggerTabList = document.querySelectorAll('#myTab button')
+triggerTabList.forEach(triggerEl => {
+ const tabTrigger = new bootstrap.Tab(triggerEl)
+
+ triggerEl.addEventListener('click', event => {
+ event.preventDefault()
+ tabTrigger.show()
+ })
+})
+```
+
+You can activate individual tabs in several ways:
+
+```js
+const triggerEl = document.querySelector('#myTab button[data-bs-target="#profile"]')
+bootstrap.Tab.getInstance(triggerEl).show() // Select tab by name
+
+const triggerFirstTabEl = document.querySelector('#myTab li:first-child button')
+bootstrap.Tab.getInstance(triggerFirstTabEl).show() // Select first tab
+```
+
+### Fade effect
+
+To make tabs fade in, add `.fade` to each `.tab-pane`. The first tab pane must also have `.show` to make the initial content visible.
+
+```html
+<div class="tab-content">
+ <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="messages" role="tabpanel" aria-labelledby="messages-tab" tabindex="0">...</div>
+ <div class="tab-pane fade" id="settings" role="tabpanel" aria-labelledby="settings-tab" tabindex="0">...</div>
+</div>
+```
+
+### Methods
+
+{{< callout danger >}}
+{{< partial "callouts/danger-async-methods.md" >}}
+{{< /callout >}}
+
+Activates your content as a tab element.
+
+You can create a tab instance with the constructor, for example:
+
+```js
+const bsTab = new bootstrap.Tab('#myTab')
+```
+
+{{< bs-table >}}
+| Method | Description |
+| --- | --- |
+| `dispose` | Destroys an element's tab. |
+| `getInstance` | Static method which allows you to get the tab instance associated with a DOM element, you can use it like this: `bootstrap.Tab.getInstance(element)`. |
+| `getOrCreateInstance` | Static method which returns a tab instance associated to a DOM element or create a new one in case it wasn't initialized. You can use it like this: `bootstrap.Tab.getOrCreateInstance(element)`. |
+| `show` | Selects the given tab and shows its associated pane. Any other tab that was previously selected becomes unselected and its associated pane is hidden. **Returns to the caller before the tab pane has actually been shown** (i.e. before the `shown.bs.tab` event occurs). |
+{{< /bs-table >}}
+
+### Events
+
+When showing a new tab, the events fire in the following order:
+
+1. `hide.bs.tab` (on the current active tab)
+2. `show.bs.tab` (on the to-be-shown tab)
+3. `hidden.bs.tab` (on the previous active tab, the same one as for the `hide.bs.tab` event)
+4. `shown.bs.tab` (on the newly-active just-shown tab, the same one as for the `show.bs.tab` event)
+
+If no tab was already active, then the `hide.bs.tab` and `hidden.bs.tab` events will not be fired.
+
+{{< bs-table >}}
+| Event type | Description |
+| --- | --- |
+| `hide.bs.tab` | This event fires when a new tab is to be shown (and thus the previous active tab is to be hidden). Use `event.target` and `event.relatedTarget` to target the current active tab and the new soon-to-be-active tab, respectively. |
+| `hidden.bs.tab` | This event fires after a new tab is shown (and thus the previous active tab is hidden). Use `event.target` and `event.relatedTarget` to target the previous active tab and the new active tab, respectively. |
+| `show.bs.tab` | This event fires on tab show, but before the new tab has been shown. Use `event.target` and `event.relatedTarget` to target the active tab and the previous active tab (if available) respectively. |
+| `shown.bs.tab` | This event fires on tab show after a tab has been shown. Use `event.target` and `event.relatedTarget` to target the active tab and the previous active tab (if available) respectively. |
+{{< /bs-table >}}
+
+```js
+const tabEl = document.querySelector('button[data-bs-toggle="tab"]')
+tabEl.addEventListener('shown.bs.tab', event => {
+ event.target // newly activated tab
+ event.relatedTarget // previous active tab
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/offcanvas.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/offcanvas.md
new file mode 100644
index 000000000..ee1a4c4d8
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/offcanvas.md
@@ -0,0 +1,353 @@
+---
+layout: docs
+title: Offcanvas
+description: Build hidden sidebars into your project for navigation, shopping carts, and more with a few classes and our JavaScript plugin.
+group: components
+toc: true
+---
+
+## How it works
+
+Offcanvas is a sidebar component that can be toggled via JavaScript to appear from the left, right, top, or bottom edge of the viewport. Buttons or anchors are used as triggers that are attached to specific elements you toggle, and `data` attributes are used to invoke our JavaScript.
+
+- Offcanvas shares some of the same JavaScript code as modals. Conceptually, they are quite similar, but they are separate plugins.
+- Similarly, some [source Sass](#sass-variables) variables for offcanvas's styles and dimensions are inherited from the modal's variables.
+- When shown, offcanvas includes a default backdrop that can be clicked to hide the offcanvas.
+- Similar to modals, only one offcanvas can be shown at a time.
+
+**Heads up!** Given how CSS handles animations, you cannot use `margin` or `translate` on an `.offcanvas` element. Instead, use the class as an independent wrapping element.
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+## Examples
+
+### Offcanvas components
+
+Below is an offcanvas example that is shown by default (via `.show` on `.offcanvas`). Offcanvas includes support for a header with a close button and an optional body class for some initial `padding`. We suggest that you include offcanvas headers with dismiss actions whenever possible, or provide an explicit dismiss action.
+
+{{< example class="bd-example-offcanvas p-0 bg-body-tertiary overflow-hidden" >}}
+<div class="offcanvas offcanvas-start show" tabindex="-1" id="offcanvas" aria-labelledby="offcanvasLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasLabel">Offcanvas</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ Content for the offcanvas goes here. You can place just about any Bootstrap component or custom elements here.
+ </div>
+</div>
+{{< /example >}}
+
+### Live demo
+
+Use the buttons below to show and hide an offcanvas element via JavaScript that toggles the `.show` class on an element with the `.offcanvas` class.
+
+- `.offcanvas` hides content (default)
+- `.offcanvas.show` shows content
+
+You can use a link with the `href` attribute, or a button with the `data-bs-target` attribute. In both cases, the `data-bs-toggle="offcanvas"` is required.
+
+{{< example >}}
+<a class="btn btn-primary" data-bs-toggle="offcanvas" href="#offcanvasExample" role="button" aria-controls="offcanvasExample">
+ Link with href
+</a>
+<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample">
+ Button with data-bs-target
+</button>
+
+<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasExampleLabel">Offcanvas</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <div class="">
+ Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
+ </div>
+ <div class="dropdown mt-3">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown">
+ Dropdown button
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Body scrolling
+
+Scrolling the `<body>` element is disabled when an offcanvas and its backdrop are visible. Use the `data-bs-scroll` attribute to enable `<body>` scrolling.
+
+{{< example >}}
+<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasScrolling" aria-controls="offcanvasScrolling">Enable body scrolling</button>
+
+<div class="offcanvas offcanvas-start" data-bs-scroll="true" data-bs-backdrop="false" tabindex="-1" id="offcanvasScrolling" aria-labelledby="offcanvasScrollingLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasScrollingLabel">Offcanvas with body scrolling</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <p>Try scrolling the rest of the page to see this option in action.</p>
+ </div>
+</div>
+{{< /example >}}
+
+### Body scrolling and backdrop
+
+You can also enable `<body>` scrolling with a visible backdrop.
+
+{{< example >}}
+<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasWithBothOptions" aria-controls="offcanvasWithBothOptions">Enable both scrolling & backdrop</button>
+
+<div class="offcanvas offcanvas-start" data-bs-scroll="true" tabindex="-1" id="offcanvasWithBothOptions" aria-labelledby="offcanvasWithBothOptionsLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasWithBothOptionsLabel">Backdrop with scrolling</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <p>Try scrolling the rest of the page to see this option in action.</p>
+ </div>
+</div>
+{{< /example >}}
+
+### Static backdrop
+
+When backdrop is set to static, the offcanvas will not close when clicking outside of it.
+
+{{< example >}}
+<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#staticBackdrop" aria-controls="staticBackdrop">
+ Toggle static offcanvas
+</button>
+
+<div class="offcanvas offcanvas-start" data-bs-backdrop="static" tabindex="-1" id="staticBackdrop" aria-labelledby="staticBackdropLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="staticBackdropLabel">Offcanvas</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <div>
+ I will not close if you click outside of me.
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Dark offcanvas
+
+{{< added-in "5.2.0" >}}
+
+Change the appearance of offcanvases with utilities to better match them to different contexts like dark navbars. Here we add `.text-bg-dark` to the `.offcanvas` and `.btn-close-white` to `.btn-close` for proper styling with a dark offcanvas. If you have dropdowns within, consider also adding `.dropdown-menu-dark` to `.dropdown-menu`.
+
+{{< example class="bd-example-offcanvas p-0 bg-body-secondary overflow-hidden" >}}
+<div class="offcanvas offcanvas-start show text-bg-dark" tabindex="-1" id="offcanvasDark" aria-labelledby="offcanvasDarkLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasDarkLabel">Offcanvas</h5>
+ <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvasDark" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <p>Place offcanvas content here.</p>
+ </div>
+</div>
+{{< /example >}}
+
+## Responsive
+
+{{< added-in "5.2.0" >}}
+
+Responsive offcanvas classes hide content outside the viewport from a specified breakpoint and down. Above that breakpoint, the contents within will behave as usual. For example, `.offcanvas-lg` hides content in an offcanvas below the `lg` breakpoint, but shows the content above the `lg` breakpoint.
+
+{{< example >}}
+<button class="btn btn-primary d-lg-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasResponsive" aria-controls="offcanvasResponsive">Toggle offcanvas</button>
+
+<div class="alert alert-info d-none d-lg-block">Resize your browser to show the responsive offcanvas toggle.</div>
+
+<div class="offcanvas-lg offcanvas-end" tabindex="-1" id="offcanvasResponsive" aria-labelledby="offcanvasResponsiveLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasResponsiveLabel">Responsive offcanvas</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#offcanvasResponsive" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <p class="mb-0">This is content within an <code>.offcanvas-lg</code>.</p>
+ </div>
+</div>
+{{< /example >}}
+
+Responsive offcanvas classes are available across for each breakpoint.
+
+- `.offcanvas`
+- `.offcanvas-sm`
+- `.offcanvas-md`
+- `.offcanvas-lg`
+- `.offcanvas-xl`
+- `.offcanvas-xxl`
+
+## Placement
+
+There's no default placement for offcanvas components, so you must add one of the modifier classes below.
+
+- `.offcanvas-start` places offcanvas on the left of the viewport (shown above)
+- `.offcanvas-end` places offcanvas on the right of the viewport
+- `.offcanvas-top` places offcanvas on the top of the viewport
+- `.offcanvas-bottom` places offcanvas on the bottom of the viewport
+
+Try the top, right, and bottom examples out below.
+
+{{< example >}}
+<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasTop" aria-controls="offcanvasTop">Toggle top offcanvas</button>
+
+<div class="offcanvas offcanvas-top" tabindex="-1" id="offcanvasTop" aria-labelledby="offcanvasTopLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasTopLabel">Offcanvas top</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ ...
+ </div>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight">Toggle right offcanvas</button>
+
+<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasRight" aria-labelledby="offcanvasRightLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasRightLabel">Offcanvas right</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ ...
+ </div>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasBottom" aria-controls="offcanvasBottom">Toggle bottom offcanvas</button>
+
+<div class="offcanvas offcanvas-bottom" tabindex="-1" id="offcanvasBottom" aria-labelledby="offcanvasBottomLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasBottomLabel">Offcanvas bottom</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body small">
+ ...
+ </div>
+</div>
+{{< /example >}}
+
+## Accessibility
+
+Since the offcanvas panel is conceptually a modal dialog, be sure to add `aria-labelledby="..."`—referencing the offcanvas title—to `.offcanvas`. Note that you don’t need to add `role="dialog"` since we already add it via JavaScript.
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, offcanvas now uses local CSS variables on `.offcanvas` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="offcanvas-css-vars" file="scss/_offcanvas.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="offcanvas-variables" file="scss/_variables.scss" >}}
+
+## Usage
+
+The offcanvas plugin utilizes a few classes and attributes to handle the heavy lifting:
+
+- `.offcanvas` hides the content
+- `.offcanvas.show` shows the content
+- `.offcanvas-start` hides the offcanvas on the left
+- `.offcanvas-end` hides the offcanvas on the right
+- `.offcanvas-top` hides the offcanvas on the top
+- `.offcanvas-bottom` hides the offcanvas on the bottom
+
+Add a dismiss button with the `data-bs-dismiss="offcanvas"` attribute, which triggers the JavaScript functionality. Be sure to use the `<button>` element with it for proper behavior across all devices.
+
+### Via data attributes
+
+#### Toggle
+
+Add `data-bs-toggle="offcanvas"` and a `data-bs-target` or `href` to the element to automatically assign control of one offcanvas element. The `data-bs-target` attribute accepts a CSS selector to apply the offcanvas to. Be sure to add the class `offcanvas` to the offcanvas element. If you'd like it to default open, add the additional class `show`.
+
+#### Dismiss
+
+{{% js-dismiss "offcanvas" %}}
+
+{{< callout warning >}}
+While both ways to dismiss an offcanvas are supported, keep in mind that dismissing from outside an offcanvas does not match the [ARIA Authoring Practices Guide dialog (modal) pattern](https://www.w3.org/WAI/ARIA/apg/patterns/dialogmodal/). Do this at your own risk.
+{{< /callout >}}
+
+### Via JavaScript
+
+Enable manually with:
+
+```js
+const offcanvasElementList = document.querySelectorAll('.offcanvas')
+const offcanvasList = [...offcanvasElementList].map(offcanvasEl => new bootstrap.Offcanvas(offcanvasEl))
+```
+
+### Options
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+{{< bs-table "table" >}}
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| `backdrop` | boolean or the string `static` | `true` | Apply a backdrop on body while offcanvas is open. Alternatively, specify `static` for a backdrop which doesn't close the offcanvas when clicked. |
+| `keyboard` | boolean | `true` | Closes the offcanvas when escape key is pressed. |
+| `scroll` | boolean | `false` | Allow body scrolling while offcanvas is open. |
+{{< /bs-table >}}
+
+### Methods
+
+{{< callout danger >}}
+{{< partial "callouts/danger-async-methods.md" >}}
+{{< /callout >}}
+
+Activates your content as an offcanvas element. Accepts an optional options `object`.
+
+You can create an offcanvas instance with the constructor, for example:
+
+```js
+const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
+```
+
+{{< bs-table "table" >}}
+| Method | Description |
+| --- | --- |
+| `getInstance` | *Static* method which allows you to get the offcanvas instance associated with a DOM element. |
+| `getOrCreateInstance` | *Static* method which allows you to get the offcanvas instance associated with a DOM element, or create a new one in case it wasn't initialized. |
+| `hide` | Hides an offcanvas element. **Returns to the caller before the offcanvas element has actually been hidden** (i.e. before the `hidden.bs.offcanvas` event occurs). |
+| `show` | Shows an offcanvas element. **Returns to the caller before the offcanvas element has actually been shown** (i.e. before the `shown.bs.offcanvas` event occurs). |
+| `toggle` | Toggles an offcanvas element to shown or hidden. **Returns to the caller before the offcanvas element has actually been shown or hidden** (i.e. before the `shown.bs.offcanvas` or `hidden.bs.offcanvas` event occurs). |
+{{< /bs-table >}}
+
+### Events
+
+Bootstrap's offcanvas class exposes a few events for hooking into offcanvas functionality.
+
+{{< bs-table "table" >}}
+| Event type | Description |
+| --- | --- |
+| `hide.bs.offcanvas` | This event is fired immediately when the `hide` method has been called. |
+| `hidden.bs.offcanvas` | This event is fired when an offcanvas element has been hidden from the user (will wait for CSS transitions to complete). |
+| `hidePrevented.bs.offcanvas` | This event is fired when the offcanvas is shown, its backdrop is `static` and a click outside of the offcanvas is performed. The event is also fired when the escape key is pressed and the `keyboard` option is set to `false`. |
+| `show.bs.offcanvas` | This event fires immediately when the `show` instance method is called. |
+| `shown.bs.offcanvas` | This event is fired when an offcanvas element has been made visible to the user (will wait for CSS transitions to complete). |
+{{< /bs-table >}}
+
+```js
+const myOffcanvas = document.getElementById('myOffcanvas')
+myOffcanvas.addEventListener('hidden.bs.offcanvas', event => {
+ // do something...
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/components/pagination.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/pagination.md
index 725140576..725140576 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/components/pagination.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/pagination.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/placeholders.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/placeholders.md
new file mode 100644
index 000000000..5ebaab3aa
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/placeholders.md
@@ -0,0 +1,145 @@
+---
+layout: docs
+title: Placeholders
+description: Use loading placeholders for your components or pages to indicate something may still be loading.
+group: components
+toc: true
+added: "5.1"
+---
+
+## About
+
+Placeholders can be used to enhance the experience of your application. They're built only with HTML and CSS, meaning you don't need any JavaScript to create them. You will, however, need some custom JavaScript to toggle their visibility. Their appearance, color, and sizing can be easily customized with our utility classes.
+
+## Example
+
+In the example below, we take a typical card component and recreate it with placeholders applied to create a "loading card". Size and proportions are the same between the two.
+
+<div class="bd-example bd-example-placeholder-cards d-flex justify-content-around">
+<div class="card">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="false" background="#20c997" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+
+<div class="card" aria-hidden="true">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="false" >}}
+ <div class="card-body">
+ <div class="h5 card-title placeholder-glow">
+ <span class="placeholder col-6"></span>
+ </div>
+ <p class="card-text placeholder-glow">
+ <span class="placeholder col-7"></span>
+ <span class="placeholder col-4"></span>
+ <span class="placeholder col-4"></span>
+ <span class="placeholder col-6"></span>
+ <span class="placeholder col-8"></span>
+ </p>
+ <a href="#" tabindex="-1" class="btn btn-primary disabled placeholder col-6"></a>
+ </div>
+</div>
+</div>
+
+```html
+<div class="card">
+ <img src="..." class="card-img-top" alt="...">
+
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+</div>
+
+<div class="card" aria-hidden="true">
+ <img src="..." class="card-img-top" alt="...">
+ <div class="card-body">
+ <h5 class="card-title placeholder-glow">
+ <span class="placeholder col-6"></span>
+ </h5>
+ <p class="card-text placeholder-glow">
+ <span class="placeholder col-7"></span>
+ <span class="placeholder col-4"></span>
+ <span class="placeholder col-4"></span>
+ <span class="placeholder col-6"></span>
+ <span class="placeholder col-8"></span>
+ </p>
+ <a href="#" tabindex="-1" class="btn btn-primary disabled placeholder col-6"></a>
+ </div>
+</div>
+```
+
+## How it works
+
+Create placeholders with the `.placeholder` class and a grid column class (e.g., `.col-6`) to set the `width`. They can replace the text inside an element or be added as a modifier class to an existing component.
+
+We apply additional styling to `.btn`s via `::before` to ensure the `height` is respected. You may extend this pattern for other situations as needed, or add a `&nbsp;` within the element to reflect the height when actual text is rendered in its place.
+
+{{< example >}}
+<p aria-hidden="true">
+ <span class="placeholder col-6"></span>
+</p>
+
+<a href="#" tabindex="-1" class="btn btn-primary disabled placeholder col-4" aria-hidden="true"></a>
+{{< /example >}}
+
+{{< callout info >}}
+The use of `aria-hidden="true"` only indicates that the element should be hidden to screen readers. The *loading* behavior of the placeholder depends on how authors will actually use the placeholder styles, how they plan to update things, etc. Some JavaScript code may be needed to *swap* the state of the placeholder and inform AT users of the update.
+{{< /callout >}}
+
+### Width
+
+You can change the `width` through grid column classes, width utilities, or inline styles.
+
+{{< example >}}
+<span class="placeholder col-6"></span>
+<span class="placeholder w-75"></span>
+<span class="placeholder" style="width: 25%;"></span>
+{{< /example >}}
+
+### Color
+
+By default, the `placeholder` uses `currentColor`. This can be overridden with a custom color or utility class.
+
+{{< example >}}
+<span class="placeholder col-12"></span>
+{{< placeholders.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<span class="placeholder col-12 bg-{{ .name }}"></span>
+{{- end -}}
+{{< /placeholders.inline >}}
+{{< /example >}}
+
+### Sizing
+
+The size of `.placeholder`s are based on the typographic style of the parent element. Customize them with sizing modifiers: `.placeholder-lg`, `.placeholder-sm`, or `.placeholder-xs`.
+
+{{< example >}}
+<span class="placeholder col-12 placeholder-lg"></span>
+<span class="placeholder col-12"></span>
+<span class="placeholder col-12 placeholder-sm"></span>
+<span class="placeholder col-12 placeholder-xs"></span>
+{{< /example >}}
+
+### Animation
+
+Animate placeholders with `.placeholder-glow` or `.placeholder-wave` to better convey the perception of something being *actively* loaded.
+
+{{< example >}}
+<p class="placeholder-glow">
+ <span class="placeholder col-12"></span>
+</p>
+
+<p class="placeholder-wave">
+ <span class="placeholder col-12"></span>
+</p>
+{{< /example >}}
+
+## Sass
+
+### Variables
+
+{{< scss-docs name="placeholders" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/popovers.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/popovers.md
new file mode 100644
index 000000000..f86404382
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/popovers.md
@@ -0,0 +1,284 @@
+---
+layout: docs
+title: Popovers
+description: Documentation and examples for adding Bootstrap popovers, like those found in iOS, to any element on your site.
+group: components
+toc: true
+---
+
+## Overview
+
+Things to know when using the popover plugin:
+
+- Popovers rely on the third party library [Popper](https://popper.js.org/) for positioning. You must include [popper.min.js]({{< param "cdn.popper" >}}) before `bootstrap.js`, or use one `bootstrap.bundle.min.js` which contains Popper.
+- Popovers require the [popover plugin]({{< docsref "/components/popovers" >}}) as a dependency.
+- Popovers are opt-in for performance reasons, so **you must initialize them yourself**.
+- Zero-length `title` and `content` values will never show a popover.
+- Specify `container: 'body'` to avoid rendering problems in more complex components (like our input groups, button groups, etc).
+- Triggering popovers on hidden elements will not work.
+- Popovers for `.disabled` or `disabled` elements must be triggered on a wrapper element.
+- When triggered from anchors that wrap across multiple lines, popovers will be centered between the anchors' overall width. Use `.text-nowrap` on your `<a>`s to avoid this behavior.
+- Popovers must be hidden before their corresponding elements have been removed from the DOM.
+- Popovers can be triggered thanks to an element inside a shadow DOM.
+
+{{< callout info >}}
+{{< partial "callouts/info-sanitizer.md" >}}
+{{< /callout >}}
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+Keep reading to see how popovers work with some examples.
+
+## Examples
+
+### Enable popovers
+
+As mentioned above, you must initialize popovers before they can be used. One way to initialize all popovers on a page would be to select them by their `data-bs-toggle` attribute, like so:
+
+```js
+const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
+const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
+```
+
+### Live demo
+
+We use JavaScript similar to the snippet above to render the following live popover. Titles are set via `data-bs-title` and body content is set via `data-bs-content`.
+
+{{< callout warning >}}
+{{< partial "callouts/warning-data-bs-title-vs-title.md" >}}
+{{< /callout >}}
+
+{{< example stackblitz_add_js="true" >}}
+<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" data-bs-title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
+{{< /example >}}
+
+### Four directions
+
+Four options are available: top, right, bottom, and left. Directions are mirrored when using Bootstrap in RTL. Set `data-bs-placement` to change the direction.
+
+{{< example stackblitz_add_js="true" >}}
+<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
+ Popover on top
+</button>
+<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
+ Popover on right
+</button>
+<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
+ Popover on bottom
+</button>
+<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
+ Popover on left
+</button>
+{{< /example >}}
+
+### Custom `container`
+
+When you have some styles on a parent element that interfere with a popover, you'll want to specify a custom `container` so that the popover's HTML appears within that element instead. This is common in responsive tables, input groups, and the like.
+
+```js
+const popover = new bootstrap.Popover('.example-popover', {
+ container: 'body'
+})
+```
+
+Another situation where you'll want to set an explicit custom `container` are popovers inside a [modal dialog]({{< docsref "/components/modal" >}}), to make sure that the popover itself is appended to the modal. This is particularly important for popovers that contain interactive elements – modal dialogs will trap focus, so unless the popover is a child element of the modal, users won't be able to focus or activate these interactive elements.
+
+```js
+const popover = new bootstrap.Popover('.example-popover', {
+ container: '.modal-body'
+})
+```
+
+### Custom popovers
+
+{{< added-in "5.2.0" >}}
+
+You can customize the appearance of popovers using [CSS variables](#variables). We set a custom class with `data-bs-custom-class="custom-popover"` to scope our custom appearance and use it to override some of the local CSS variables.
+
+{{< scss-docs name="custom-popovers" file="site/assets/scss/_component-examples.scss" >}}
+
+{{< example class="custom-popover-demo" stackblitz_add_js="true" >}}
+<button type="button" class="btn btn-secondary"
+ data-bs-toggle="popover" data-bs-placement="right"
+ data-bs-custom-class="custom-popover"
+ data-bs-title="Custom popover"
+ data-bs-content="This popover is themed via CSS variables.">
+ Custom popover
+</button>
+{{< /example >}}
+
+### Dismiss on next click
+
+Use the `focus` trigger to dismiss popovers on the user's next click of a different element than the toggle element.
+
+{{< callout danger >}}
+#### Specific markup required for dismiss-on-next-click
+
+For proper cross-browser and cross-platform behavior, you must use the `<a>` tag, _not_ the `<button>` tag, and you also must include a [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) attribute.
+{{< /callout >}}
+
+{{< example stackblitz_add_js="true" >}}
+<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
+{{< /example >}}
+
+```js
+const popover = new bootstrap.Popover('.popover-dismiss', {
+ trigger: 'focus'
+})
+```
+
+### Disabled elements
+
+Elements with the `disabled` attribute aren't interactive, meaning users cannot hover or click them to trigger a popover (or tooltip). As a workaround, you'll want to trigger the popover from a wrapper `<div>` or `<span>`, ideally made keyboard-focusable using `tabindex="0"`.
+
+For disabled popover triggers, you may also prefer `data-bs-trigger="hover focus"` so that the popover appears as immediate visual feedback to your users as they may not expect to _click_ on a disabled element.
+
+{{< example stackblitz_add_js="true" >}}
+<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
+ <button class="btn btn-primary" type="button" disabled>Disabled button</button>
+</span>
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap’s evolving CSS variables approach, popovers now use local CSS variables on `.popover` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="popover-css-vars" file="scss/_popover.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="popover-variables" file="scss/_variables.scss" >}}
+
+## Usage
+
+Enable popovers via JavaScript:
+
+```js
+const exampleEl = document.getElementById('example')
+const popover = new bootstrap.Popover(exampleEl, options)
+```
+
+{{< callout warning >}}
+### Making popovers work for keyboard and assistive technology users
+
+To allow keyboard users to activate your popovers, you should only add them to HTML elements that are traditionally keyboard-focusable and interactive (such as links or form controls). Although arbitrary HTML elements (such as `<span>`s) can be made focusable by adding the `tabindex="0"` attribute, this will add potentially annoying and confusing tab stops on non-interactive elements for keyboard users, and most assistive technologies currently do not announce the popover's content in this situation. Additionally, do not rely solely on `hover` as the trigger for your popovers, as this will make them impossible to trigger for keyboard users.
+
+While you can insert rich, structured HTML in popovers with the `html` option, we strongly recommend that you avoid adding an excessive amount of content. The way popovers currently work is that, once displayed, their content is tied to the trigger element with the `aria-describedby` attribute. As a result, the entirety of the popover's content will be announced to assistive technology users as one long, uninterrupted stream.
+
+Additionally, while it is possible to also include interactive controls (such as form elements or links) in your popover (by adding these elements to the `allowList` of allowed attributes and tags), be aware that currently the popover does not manage keyboard focus order. When a keyboard user opens a popover, focus remains on the triggering element, and as the popover usually does not immediately follow the trigger in the document's structure, there is no guarantee that moving forward/pressing <kbd>Tab</kbd> will move a keyboard user into the popover itself. In short, simply adding interactive controls to a popover is likely to make these controls unreachable/unusable for keyboard users and users of assistive technologies, or at the very least make for an illogical overall focus order. In these cases, consider using a modal dialog instead.
+{{< /callout >}}
+
+### Options
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+{{< callout warning >}}
+Note that for security reasons the `sanitize`, `sanitizeFn`, and `allowList` options cannot be supplied using data attributes.
+{{< /callout >}}
+
+{{< bs-table "table" >}}
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| `allowList` | object | [Default value]({{< docsref "/getting-started/javascript#sanitizer" >}}) | Object which contains allowed attributes and tags. |
+| `animation` | boolean | `true` | Apply a CSS fade transition to the popover. |
+| `boundary` | string, element | `'clippingParents'` | Overflow constraint boundary of the popover (applies only to Popper's preventOverflow modifier). By default, it's `'clippingParents'` and can accept an HTMLElement reference (via JavaScript only). For more information refer to Popper's [detectOverflow docs](https://popper.js.org/docs/v2/utils/detect-overflow/#boundary). |
+| `container` | string, element, false | `false` | Appends the popover to a specific element. Example: `container: 'body'`. This option is particularly useful in that it allows you to position the popover in the flow of the document near the triggering element - which will prevent the popover from floating away from the triggering element during a window resize. |
+| `content` | string, element, function | `''` | Default content value if `data-bs-content` attribute isn't present. If a function is given, it will be called with its `this` reference set to the element that the popover is attached to. |
+| `customClass` | string, function | `''` | Add classes to the popover when it is shown. Note that these classes will be added in addition to any classes specified in the template. To add multiple classes, separate them with spaces: `'class-1 class-2'`. You can also pass a function that should return a single string containing additional class names. |
+| `delay` | number, object | `0` | Delay showing and hiding the popover (ms)—doesn't apply to manual trigger type. If a number is supplied, delay is applied to both hide/show. Object structure is: `delay: { "show": 500, "hide": 100 }`. |
+| `fallbackPlacements` | string, array | `['top', 'right', 'bottom', 'left']` | Define fallback placements by providing a list of placements in array (in order of preference). For more information refer to Popper's [behavior docs](https://popper.js.org/docs/v2/modifiers/flip/#fallbackplacements). |
+| `html` | boolean | `false` | Allow HTML in the popover. If true, HTML tags in the popover's `title` will be rendered in the popover. If false, `innerText` property will be used to insert content into the DOM. Use text if you're worried about XSS attacks. |
+| `offset` | number, string, function | `[0, 0]` | Offset of the popover relative to its target. You can pass a string in data attributes with comma separated values like: `data-bs-offset="10,20"`. When a function is used to determine the offset, it is called with an object containing the popper placement, the reference, and popper rects as its first argument. The triggering element DOM node is passed as the second argument. The function must return an array with two numbers: [skidding](https://popper.js.org/docs/v2/modifiers/offset/#skidding-1), [distance](https://popper.js.org/docs/v2/modifiers/offset/#distance-1). For more information refer to Popper's [offset docs](https://popper.js.org/docs/v2/modifiers/offset/#options). |
+| `placement` | string, function | `'top'` | How to position the popover: auto, top, bottom, left, right. When `auto` is specified, it will dynamically reorient the popover. When a function is used to determine the placement, it is called with the popover DOM node as its first argument and the triggering element DOM node as its second. The `this` context is set to the popover instance. |
+| `popperConfig` | null, object, function | `null` | To change Bootstrap's default Popper config, see [Popper's configuration](https://popper.js.org/docs/v2/constructors/#options). When a function is used to create the Popper configuration, it's called with an object that contains the Bootstrap's default Popper configuration. It helps you use and merge the default with your own configuration. The function must return a configuration object for Popper. |
+| `sanitize` | boolean | `true` | Enable or disable the sanitization. If activated `'template'`, `'content'` and `'title'` options will be sanitized. |
+| `sanitizeFn` | null, function | `null` | Here you can supply your own sanitize function. This can be useful if you prefer to use a dedicated library to perform sanitization. |
+| `selector` | string, false | `false` | If a selector is provided, popover objects will be delegated to the specified targets. In practice, this is used to also apply popovers to dynamically added DOM elements (`jQuery.on` support). See [this issue]({{< param repo >}}/issues/4215) and [an informative example](https://codepen.io/Johann-S/pen/djJYPb). **Note**: `title` attribute must not be used as a selector. |
+| `template` | string | `'<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>'` | Base HTML to use when creating the popover. The popover's `title` will be injected into the `.popover-inner`. `.popover-arrow` will become the popover's arrow. The outermost wrapper element should have the `.popover` class and `role="popover"`. |
+| `title` | string, element, function | `''` | Default title value if `title` attribute isn't present. If a function is given, it will be called with its `this` reference set to the element that the popover is attached to. |
+| `trigger` | string | `'hover focus'` | How popover is triggered: click, hover, focus, manual. You may pass multiple triggers; separate them with a space. `'manual'` indicates that the popover will be triggered programmatically via the `.popover('show')`, `.popover('hide')` and `.popover('toggle')` methods; this value cannot be combined with any other trigger. `'hover'` on its own will result in popovers that cannot be triggered via the keyboard, and should only be used if alternative methods for conveying the same information for keyboard users is present. |
+{{< /bs-table >}}
+
+{{< callout info >}}
+#### Data attributes for individual popovers
+
+Options for individual popovers can alternatively be specified through the use of data attributes, as explained above.
+{{< /callout >}}
+
+#### Using function with `popperConfig`
+
+```js
+const popover = new bootstrap.Popover(element, {
+ popperConfig(defaultBsPopperConfig) {
+ // const newPopperConfig = {...}
+ // use defaultBsPopperConfig if needed...
+ // return newPopperConfig
+ }
+})
+```
+
+### Methods
+
+{{< callout danger >}}
+{{< partial "callouts/danger-async-methods.md" >}}
+{{< /callout >}}
+
+{{< bs-table "table" >}}
+| Method | Description |
+| --- | --- |
+| `disable` | Removes the ability for an element's popover to be shown. The popover will only be able to be shown if it is re-enabled. |
+| `dispose` | Hides and destroys an element's popover (Removes stored data on the DOM element). Popovers that use delegation (which are created using [the `selector` option](#options)) cannot be individually destroyed on descendant trigger elements. |
+| `enable` | Gives an element's popover the ability to be shown. **Popovers are enabled by default.** |
+| `getInstance` | _Static_ method which allows you to get the popover instance associated with a DOM element. |
+| `getOrCreateInstance` | _Static_ method which allows you to get the popover instance associated with a DOM element, or create a new one in case it wasn't initialized. |
+| `hide` | Hides an element's popover. **Returns to the caller before the popover has actually been hidden** (i.e. before the `hidden.bs.popover` event occurs). This is considered a "manual" triggering of the popover. |
+| `setContent` | Gives a way to change the popover's content after its initialization. |
+| `show` | Reveals an element's popover. **Returns to the caller before the popover has actually been shown** (i.e. before the `shown.bs.popover` event occurs). This is considered a "manual" triggering of the popover. Popovers whose title and content are both zero-length are never displayed. |
+| `toggle` | Toggles an element's popover. **Returns to the caller before the popover has actually been shown or hidden** (i.e. before the `shown.bs.popover` or `hidden.bs.popover` event occurs). This is considered a "manual" triggering of the popover. |
+| `toggleEnabled` | Toggles the ability for an element's popover to be shown or hidden. |
+| `update` | Updates the position of an element's popover. |
+{{< /bs-table >}}
+
+
+```js
+// getOrCreateInstance example
+const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance
+
+// setContent example
+myPopover.setContent({
+ '.popover-header': 'another title',
+ '.popover-body': 'another content'
+})
+
+```
+
+{{< callout info >}}
+The `setContent` method accepts an `object` argument, where each property-key is a valid `string` selector within the popover template, and each related property-value can be `string` | `element` | `function` | `null`
+{{< /callout >}}
+
+### Events
+
+{{< bs-table >}}
+| Event | Description |
+| --- | --- |
+| `hide.bs.popover` | This event is fired immediately when the `hide` instance method has been called. |
+| `hidden.bs.popover` | This event is fired when the popover has finished being hidden from the user (will wait for CSS transitions to complete). |
+| `inserted.bs.popover` | This event is fired after the `show.bs.popover` event when the popover template has been added to the DOM. |
+| `show.bs.popover` | This event fires immediately when the `show` instance method is called. |
+| `shown.bs.popover` | This event is fired when the popover has been made visible to the user (will wait for CSS transitions to complete). |
+{{< /bs-table >}}
+
+```js
+const myPopoverTrigger = document.getElementById('myPopover')
+myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
+ // do something...
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/progress.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/progress.md
new file mode 100644
index 000000000..c441f13c8
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/progress.md
@@ -0,0 +1,169 @@
+---
+layout: docs
+title: Progress
+description: Documentation and examples for using Bootstrap custom progress bars featuring support for stacked bars, animated backgrounds, and text labels.
+group: components
+toc: true
+---
+
+{{< callout info >}}
+**New markup in v5.3.0 —** We've deprecated the previous HTML structure for progress bars and replaced it with a more accessible one. The previous structure will continue to work until v6. [See what's changed in our migration guide.]({{< docsref "/migration#improved-markup-for-progress-bars" >}})
+{{< /callout >}}
+
+## How it works
+
+Progress components are built with two HTML elements, some CSS to set the width, and a few attributes. We don't use [the HTML5 `<progress>` element](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress), ensuring you can stack progress bars, animate them, and place text labels over them.
+
+- We use the `.progress` as a wrapper to indicate the max value of the progress bar.
+- The `.progress` wrapper also requires a `role="progress"` and `aria` attributes to make it accessible, including an accessible name (using `aria-label`, `aria-labelledby`, or similar).
+- We use the inner `.progress-bar` purely for the visual bar and label.
+- The `.progress-bar` requires an inline style, utility class, or custom CSS to set its width.
+- We provide a special `.progress-stacked` class to create multiple/stacked progress bars.
+
+Put that all together, and you have the following examples.
+
+{{< example >}}
+<div class="progress" role="progressbar" aria-label="Basic example" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar" style="width: 0%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Basic example" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar" style="width: 25%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Basic example" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar" style="width: 50%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Basic example" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar" style="width: 75%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Basic example" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar" style="width: 100%"></div>
+</div>
+{{< /example >}}
+
+## Bar sizing
+
+### Width
+
+Bootstrap provides a handful of [utilities for setting width]({{< docsref "/utilities/sizing" >}}). Depending on your needs, these may help with quickly configuring the width of the `.progress-bar`.
+
+{{< example >}}
+<div class="progress" role="progressbar" aria-label="Basic example" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar w-75"></div>
+</div>
+{{< /example >}}
+
+### Height
+
+You only set a `height` value on the `.progress` container, so if you change that value, the inner `.progress-bar` will automatically resize accordingly.
+
+{{< example >}}
+<div class="progress" role="progressbar" aria-label="Example 1px high" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100" style="height: 1px">
+ <div class="progress-bar" style="width: 25%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Example 20px high" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100" style="height: 20px">
+ <div class="progress-bar" style="width: 25%"></div>
+</div>
+{{< /example >}}
+
+## Labels
+
+Add labels to your progress bars by placing text within the `.progress-bar`.
+
+{{< example >}}
+<div class="progress" role="progressbar" aria-label="Example with label" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar" style="width: 25%">25%</div>
+</div>
+{{< /example >}}
+
+## Backgrounds
+
+Use background utility classes to change the appearance of individual progress bars.
+
+{{< example >}}
+<div class="progress" role="progressbar" aria-label="Success example" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar bg-success" style="width: 25%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Info example" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar bg-info" style="width: 50%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Warning example" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar bg-warning" style="width: 75%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Danger example" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar bg-danger" style="width: 100%"></div>
+</div>
+{{< /example >}}
+
+{{< callout info >}}
+{{< partial "callouts/warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
+
+## Multiple bars
+
+You can include multiple progress components inside a container with `.progress-stacked` to create a single stacked progress bar. Note that in this case, the styling to set the visual width of the progress bar *must* be applied to the `.progress` elements, rather than the `.progress-bar`s.
+
+{{< example >}}
+<div class="progress-stacked">
+ <div class="progress" role="progressbar" aria-label="Segment one" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100" style="width: 15%">
+ <div class="progress-bar"></div>
+ </div>
+ <div class="progress" role="progressbar" aria-label="Segment two" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" style="width: 30%">
+ <div class="progress-bar bg-success"></div>
+ </div>
+ <div class="progress" role="progressbar" aria-label="Segment three" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 20%">
+ <div class="progress-bar bg-info"></div>
+ </div>
+</div>
+{{< /example >}}
+
+## Striped
+
+Add `.progress-bar-striped` to any `.progress-bar` to apply a stripe via CSS gradient over the progress bar's background color.
+
+{{< example >}}
+<div class="progress" role="progressbar" aria-label="Default striped example" aria-valuenow="10" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-striped" style="width: 10%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Success striped example" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-striped bg-success" style="width: 25%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Info striped example" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-striped bg-info" style="width: 50%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Warning striped example" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-striped bg-warning" style="width: 75%"></div>
+</div>
+<div class="progress" role="progressbar" aria-label="Danger striped example" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-striped bg-danger" style="width: 100%"></div>
+</div>
+{{< /example >}}
+
+## Animated stripes
+
+The striped gradient can also be animated. Add `.progress-bar-animated` to `.progress-bar` to animate the stripes right to left via CSS3 animations.
+
+{{< example >}}
+<div class="progress" role="progressbar" aria-label="Animated striped example" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-striped progress-bar-animated" style="width: 75%"></div>
+</div>
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, progress bars now use local CSS variables on `.progress` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="progress-css-vars" file="scss/_progress.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="progress-variables" file="scss/_variables.scss" >}}
+
+### Keyframes
+
+Used for creating the CSS animations for `.progress-bar-animated`. Included in `scss/_progress-bar.scss`.
+
+{{< scss-docs name="progress-keyframes" file="scss/_progress.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/scrollspy.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/scrollspy.md
new file mode 100644
index 000000000..4bb5978f3
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/scrollspy.md
@@ -0,0 +1,427 @@
+---
+layout: docs
+title: Scrollspy
+description: Automatically update Bootstrap navigation or list group components based on scroll position to indicate which link is currently active in the viewport.
+group: components
+toc: true
+---
+
+## How it works
+
+Scrollspy toggles the `.active` class on anchor (`<a>`) elements when the element with the `id` referenced by the anchor's `href` is scrolled into view. Scrollspy is best used in conjunction with a Bootstrap [nav component]({{< docsref "/components/navs-tabs" >}}) or [list group]({{< docsref "/components/list-group" >}}), but it will also work with any anchor elements in the current page. Here's how it works.
+
+- To start, scrollspy requires two things: a navigation, list group, or a simple set of links, plus a scrollable container. The scrollable container can be the `<body>` or a custom element with a set `height` and `overflow-y: scroll`.
+
+- On the scrollable container, add `data-bs-spy="scroll"` and `data-bs-target="#navId"` where `navId` is the unique `id` of the associated navigation. Be sure to also include a `tabindex="0"` to ensure keyboard access.
+
+- As you scroll the "spied" container, an `.active` class is added and removed from anchor links within the associated navigation. Links must have resolvable `id` targets, otherwise they're ignored. For example, a `<a href="#home">home</a>` must correspond to something in the DOM like `<div id="home"></div>`
+
+- Target elements that are not visible will be ignored. See the [Non-visible elements](#non-visible-elements) section below.
+
+## Examples
+
+### Navbar
+
+Scroll the area below the navbar and watch the active class change. Open the dropdown menu and watch the dropdown items be highlighted as well.
+
+<div class="bd-example">
+ <nav id="navbar-example2" class="navbar bg-body-tertiary px-3 mb-3 rounded-2">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <ul class="nav nav-pills">
+ <li class="nav-item">
+ <a class="nav-link" href="#scrollspyHeading1">First</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#scrollspyHeading2">Second</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#scrollspyHeading3">Third</a></li>
+ <li><a class="dropdown-item" href="#scrollspyHeading4">Fourth</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#scrollspyHeading5">Fifth</a></li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <div class="scrollspy-example bg-body-tertiary p-3 rounded-2" data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-root-margin="0px 0px -40%" data-bs-smooth-scroll="true" tabindex="0">
+ <h4 id="scrollspyHeading1">First heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="scrollspyHeading2">Second heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="scrollspyHeading3">Third heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="scrollspyHeading4">Fourth heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="scrollspyHeading5">Fifth heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ </div>
+</div>
+
+```html
+<nav id="navbar-example2" class="navbar bg-body-tertiary px-3 mb-3">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <ul class="nav nav-pills">
+ <li class="nav-item">
+ <a class="nav-link" href="#scrollspyHeading1">First</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#scrollspyHeading2">Second</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#scrollspyHeading3">Third</a></li>
+ <li><a class="dropdown-item" href="#scrollspyHeading4">Fourth</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#scrollspyHeading5">Fifth</a></li>
+ </ul>
+ </li>
+ </ul>
+</nav>
+<div data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-root-margin="0px 0px -40%" data-bs-smooth-scroll="true" class="scrollspy-example bg-body-tertiary p-3 rounded-2" tabindex="0">
+ <h4 id="scrollspyHeading1">First heading</h4>
+ <p>...</p>
+ <h4 id="scrollspyHeading2">Second heading</h4>
+ <p>...</p>
+ <h4 id="scrollspyHeading3">Third heading</h4>
+ <p>...</p>
+ <h4 id="scrollspyHeading4">Fourth heading</h4>
+ <p>...</p>
+ <h4 id="scrollspyHeading5">Fifth heading</h4>
+ <p>...</p>
+</div>
+```
+
+### Nested nav
+
+Scrollspy also works with nested `.nav`s. If a nested `.nav` is `.active`, its parents will also be `.active`. Scroll the area next to the navbar and watch the active class change.
+
+<div class="bd-example">
+ <div class="row">
+ <div class="col-4">
+ <nav id="navbar-example3" class="h-100 flex-column align-items-stretch pe-4 border-end">
+ <nav class="nav nav-pills flex-column">
+ <a class="nav-link" href="#item-1">Item 1</a>
+ <nav class="nav nav-pills flex-column">
+ <a class="nav-link ms-3 my-1" href="#item-1-1">Item 1-1</a>
+ <a class="nav-link ms-3 my-1" href="#item-1-2">Item 1-2</a>
+ </nav>
+ <a class="nav-link" href="#item-2">Item 2</a>
+ <a class="nav-link" href="#item-3">Item 3</a>
+ <nav class="nav nav-pills flex-column">
+ <a class="nav-link ms-3 my-1" href="#item-3-1">Item 3-1</a>
+ <a class="nav-link ms-3 my-1" href="#item-3-2">Item 3-2</a>
+ </nav>
+ </nav>
+ </nav>
+ </div>
+ <div class="col-8">
+ <div data-bs-spy="scroll" data-bs-target="#navbar-example3" data-bs-smooth-scroll="true" class="scrollspy-example-2" tabindex="0">
+ <div id="item-1">
+ <h4>Item 1</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
+ </div>
+ <div id="item-1-1">
+ <h5>Item 1-1</h5>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
+ </div>
+ <div id="item-1-2">
+ <h5>Item 1-2</h5>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
+ </div>
+ <div id="item-2">
+ <h4>Item 2</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
+ </div>
+ <div id="item-3">
+ <h4>Item 3</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
+ </div>
+ <div id="item-3-1">
+ <h5>Item 3-1</h5>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
+ </div>
+ <div id="item-3-2">
+ <h5>Item 3-2</h5>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <p>Keep in mind that the JavaScript plugin tries to pick the right element among all that may be visible. Multiple visible scrollspy targets at the same time may cause some issues.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+```html
+<div class="row">
+ <div class="col-4">
+ <nav id="navbar-example3" class="h-100 flex-column align-items-stretch pe-4 border-end">
+ <nav class="nav nav-pills flex-column">
+ <a class="nav-link" href="#item-1">Item 1</a>
+ <nav class="nav nav-pills flex-column">
+ <a class="nav-link ms-3 my-1" href="#item-1-1">Item 1-1</a>
+ <a class="nav-link ms-3 my-1" href="#item-1-2">Item 1-2</a>
+ </nav>
+ <a class="nav-link" href="#item-2">Item 2</a>
+ <a class="nav-link" href="#item-3">Item 3</a>
+ <nav class="nav nav-pills flex-column">
+ <a class="nav-link ms-3 my-1" href="#item-3-1">Item 3-1</a>
+ <a class="nav-link ms-3 my-1" href="#item-3-2">Item 3-2</a>
+ </nav>
+ </nav>
+ </nav>
+ </div>
+
+ <div class="col-8">
+ <div data-bs-spy="scroll" data-bs-target="#navbar-example3" data-bs-smooth-scroll="true" class="scrollspy-example-2" tabindex="0">
+ <div id="item-1">
+ <h4>Item 1</h4>
+ <p>...</p>
+ </div>
+ <div id="item-1-1">
+ <h5>Item 1-1</h5>
+ <p>...</p>
+ </div>
+ <div id="item-1-2">
+ <h5>Item 1-2</h5>
+ <p>...</p>
+ </div>
+ <div id="item-2">
+ <h4>Item 2</h4>
+ <p>...</p>
+ </div>
+ <div id="item-3">
+ <h4>Item 3</h4>
+ <p>...</p>
+ </div>
+ <div id="item-3-1">
+ <h5>Item 3-1</h5>
+ <p>...</p>
+ </div>
+ <div id="item-3-2">
+ <h5>Item 3-2</h5>
+ <p>...</p>
+ </div>
+ </div>
+ </div>
+</div>
+```
+
+### List group
+
+Scrollspy also works with `.list-group`s. Scroll the area next to the list group and watch the active class change.
+
+<div class="bd-example">
+ <div class="row">
+ <div class="col-4">
+ <div id="list-example" class="list-group">
+ <a class="list-group-item list-group-item-action" href="#list-item-1">Item 1</a>
+ <a class="list-group-item list-group-item-action" href="#list-item-2">Item 2</a>
+ <a class="list-group-item list-group-item-action" href="#list-item-3">Item 3</a>
+ <a class="list-group-item list-group-item-action" href="#list-item-4">Item 4</a>
+ </div>
+ </div>
+ <div class="col-8">
+ <div data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
+ <h4 id="list-item-1">Item 1</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="list-item-2">Item 2</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="list-item-3">Item 3</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="list-item-4">Item 4</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ </div>
+ </div>
+ </div>
+</div>
+
+```html
+<div class="row">
+ <div class="col-4">
+ <div id="list-example" class="list-group">
+ <a class="list-group-item list-group-item-action" href="#list-item-1">Item 1</a>
+ <a class="list-group-item list-group-item-action" href="#list-item-2">Item 2</a>
+ <a class="list-group-item list-group-item-action" href="#list-item-3">Item 3</a>
+ <a class="list-group-item list-group-item-action" href="#list-item-4">Item 4</a>
+ </div>
+ </div>
+ <div class="col-8">
+ <div data-bs-spy="scroll" data-bs-target="#list-example" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
+ <h4 id="list-item-1">Item 1</h4>
+ <p>...</p>
+ <h4 id="list-item-2">Item 2</h4>
+ <p>...</p>
+ <h4 id="list-item-3">Item 3</h4>
+ <p>...</p>
+ <h4 id="list-item-4">Item 4</h4>
+ <p>...</p>
+ </div>
+ </div>
+</div>
+```
+
+### Simple anchors
+
+Scrollspy is not limited to nav components and list groups, so it will work on any `<a>` anchor elements in the current document. Scroll the area and watch the `.active` class change.
+
+<div class="bd-example">
+ <div class="row">
+ <div class="col-4">
+ <div id="simple-list-example" class="d-flex flex-column gap-2 simple-list-example-scrollspy text-center">
+ <a class="p-1 rounded" href="#simple-list-item-1">Item 1</a>
+ <a class="p-1 rounded" href="#simple-list-item-2">Item 2</a>
+ <a class="p-1 rounded" href="#simple-list-item-3">Item 3</a>
+ <a class="p-1 rounded" href="#simple-list-item-4">Item 4</a>
+ <a class="p-1 rounded" href="#simple-list-item-5">Item 5</a>
+ </div>
+ </div>
+ <div class="col-8">
+ <div data-bs-spy="scroll" data-bs-target="#simple-list-example" data-bs-offset="0" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
+ <h4 id="simple-list-item-1">Item 1</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="simple-list-item-2">Item 2</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="simple-list-item-3">Item 3</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="simple-list-item-4">Item 4</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="simple-list-item-5">Item 5</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ </div>
+ </div>
+ </div>
+</div>
+
+```html
+<div class="row">
+ <div class="col-4">
+ <div id="simple-list-example" class="d-flex flex-column gap-2 simple-list-example-scrollspy text-center">
+ <a class="p-1 rounded" href="#simple-list-item-1">Item 1</a>
+ <a class="p-1 rounded" href="#simple-list-item-2">Item 2</a>
+ <a class="p-1 rounded" href="#simple-list-item-3">Item 3</a>
+ <a class="p-1 rounded" href="#simple-list-item-4">Item 4</a>
+ <a class="p-1 rounded" href="#simple-list-item-5">Item 5</a>
+ </div>
+ </div>
+ <div class="col-8">
+ <div data-bs-spy="scroll" data-bs-target="#simple-list-example" data-bs-offset="0" data-bs-smooth-scroll="true" class="scrollspy-example" tabindex="0">
+ <h4 id="simple-list-item-1">Item 1</h4>
+ <p>...</p>
+ <h4 id="simple-list-item-2">Item 2</h4>
+ <p>...</p>
+ <h4 id="simple-list-item-3">Item 3</h4>
+ <p>...</p>
+ <h4 id="simple-list-item-4">Item 4</h4>
+ <p>...</p>
+ <h4 id="simple-list-item-5">Item 5</h4>
+ <p>...</p>
+ </div>
+ </div>
+</div>
+```
+
+## Non-visible elements
+
+Target elements that aren’t visible will be ignored and their corresponding nav items won't receive an `.active` class. Scrollspy instances initialized in a non-visible wrapper will ignore all target elements. Use the `refresh` method to check for observable elements once the wrapper becomes visible.
+
+```js
+document.querySelectorAll('#nav-tab>[data-bs-toggle="tab"]').forEach(el => {
+ el.addEventListener('shown.bs.tab', () => {
+ const target = el.getAttribute('data-bs-target')
+ const scrollElem = document.querySelector(`${target} [data-bs-spy="scroll"]`)
+ bootstrap.ScrollSpy.getOrCreateInstance(scrollElem).refresh()
+ })
+})
+```
+
+## Usage
+
+### Via data attributes
+
+To easily add scrollspy behavior to your topbar navigation, add `data-bs-spy="scroll"` to the element you want to spy on (most typically this would be the `<body>`). Then add the `data-bs-target` attribute with the `id` or class name of the parent element of any Bootstrap `.nav` component.
+
+```html
+<body data-bs-spy="scroll" data-bs-target="#navbar-example">
+ ...
+ <div id="navbar-example">
+ <ul class="nav nav-tabs" role="tablist">
+ ...
+ </ul>
+ </div>
+ ...
+</body>
+```
+
+### Via JavaScript
+
+```js
+const scrollSpy = new bootstrap.ScrollSpy(document.body, {
+ target: '#navbar-example'
+})
+```
+
+### Options
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+{{< bs-table "table" >}}
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| `rootMargin` | string | `0px 0px -25%` | Intersection Observer [rootMargin](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/rootMargin) valid units, when calculating scroll position. |
+| `smoothScroll` | boolean | `false` | Enables smooth scrolling when a user clicks on a link that refers to ScrollSpy observables. |
+| `target` | string, DOM element | `null` | Specifies element to apply Scrollspy plugin. |
+| `threshold` | array | `[0.1, 0.5, 1]` | `IntersectionObserver` [threshold](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/IntersectionObserver#threshold) valid input, when calculating scroll position. |
+
+{{< /bs-table >}}
+
+{{< callout warning >}}
+**Deprecated Options**
+
+Up until v5.1.3 we were using `offset` & `method` options, which are now deprecated and replaced by `rootMargin`.
+To keep backwards compatibility, we will continue to parse a given `offset` to `rootMargin`, but this feature will be removed in **v6**.
+{{< /callout >}}
+
+### Methods
+
+{{< bs-table "table" >}}
+| Method | Description |
+| --- | --- |
+| `dispose` | Destroys an element's scrollspy. (Removes stored data on the DOM element) |
+| `getInstance` | *Static* method to get the scrollspy instance associated with a DOM element. |
+| `getOrCreateInstance` | *Static* method to get the scrollspy instance associated with a DOM element, or to create a new one in case it wasn't initialized. |
+| `refresh` | When adding or removing elements in the DOM, you'll need to call the refresh method. |
+{{< /bs-table >}}
+
+Here's an example using the refresh method:
+
+```js
+const dataSpyList = document.querySelectorAll('[data-bs-spy="scroll"]')
+dataSpyList.forEach(dataSpyEl => {
+ bootstrap.ScrollSpy.getInstance(dataSpyEl).refresh()
+})
+```
+
+### Events
+
+{{< bs-table "table" >}}
+| Event | Description |
+| --- | --- |
+| `activate.bs.scrollspy` | This event fires on the scroll element whenever an anchor is activated by the scrollspy. |
+{{< /bs-table >}}
+
+```js
+const firstScrollSpyEl = document.querySelector('[data-bs-spy="scroll"]')
+firstScrollSpyEl.addEventListener('activate.bs.scrollspy', () => {
+ // do something...
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/spinners.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/spinners.md
new file mode 100644
index 000000000..f2635c63e
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/spinners.md
@@ -0,0 +1,211 @@
+---
+layout: docs
+title: Spinners
+description: Indicate the loading state of a component or page with Bootstrap spinners, built entirely with HTML, CSS, and no JavaScript.
+group: components
+toc: true
+---
+
+## About
+
+Bootstrap "spinners" can be used to show the loading state in your projects. They're built only with HTML and CSS, meaning you don't need any JavaScript to create them. You will, however, need some custom JavaScript to toggle their visibility. Their appearance, alignment, and sizing can be easily customized with our amazing utility classes.
+
+For accessibility purposes, each loader here includes `role="status"` and a nested `<span class="visually-hidden">Loading...</span>`.
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+## Border spinner
+
+Use the border spinners for a lightweight loading indicator.
+
+{{< example >}}
+<div class="spinner-border" role="status">
+ <span class="visually-hidden">Loading...</span>
+</div>
+{{< /example >}}
+
+### Colors
+
+The border spinner uses `currentColor` for its `border-color`, meaning you can customize the color with [text color utilities][color]. You can use any of our text color utilities on the standard spinner.
+
+{{< example >}}
+{{< spinner.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="spinner-border text-{{ .name }}" role="status">
+ <span class="visually-hidden">Loading...</span>
+</div>
+{{- end -}}
+{{< /spinner.inline >}}
+{{< /example >}}
+
+{{< callout info >}}
+**Why not use `border-color` utilities?** Each border spinner specifies a `transparent` border for at least one side, so `.border-{color}` utilities would override that.
+{{< /callout >}}
+
+## Growing spinner
+
+If you don't fancy a border spinner, switch to the grow spinner. While it doesn't technically spin, it does repeatedly grow!
+
+{{< example >}}
+<div class="spinner-grow" role="status">
+ <span class="visually-hidden">Loading...</span>
+</div>
+{{< /example >}}
+
+Once again, this spinner is built with `currentColor`, so you can easily change its appearance with [text color utilities][color]. Here it is in blue, along with the supported variants.
+
+{{< example >}}
+{{< spinner.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="spinner-grow text-{{ .name }}" role="status">
+ <span class="visually-hidden">Loading...</span>
+</div>
+{{- end -}}
+{{< /spinner.inline >}}
+{{< /example >}}
+
+## Alignment
+
+Spinners in Bootstrap are built with `rem`s, `currentColor`, and `display: inline-flex`. This means they can easily be resized, recolored, and quickly aligned.
+
+### Margin
+
+Use [margin utilities][margin] like `.m-5` for easy spacing.
+
+{{< example >}}
+<div class="spinner-border m-5" role="status">
+ <span class="visually-hidden">Loading...</span>
+</div>
+{{< /example >}}
+
+### Placement
+
+Use [flexbox utilities][flex], [float utilities][float], or [text alignment][text] utilities to place spinners exactly where you need them in any situation.
+
+#### Flex
+
+{{< example >}}
+<div class="d-flex justify-content-center">
+ <div class="spinner-border" role="status">
+ <span class="visually-hidden">Loading...</span>
+ </div>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="d-flex align-items-center">
+ <strong>Loading...</strong>
+ <div class="spinner-border ms-auto" role="status" aria-hidden="true"></div>
+</div>
+{{< /example >}}
+
+#### Floats
+
+{{< example >}}
+<div class="clearfix">
+ <div class="spinner-border float-end" role="status">
+ <span class="visually-hidden">Loading...</span>
+ </div>
+</div>
+{{< /example >}}
+
+#### Text align
+
+{{< example >}}
+<div class="text-center">
+ <div class="spinner-border" role="status">
+ <span class="visually-hidden">Loading...</span>
+ </div>
+</div>
+{{< /example >}}
+
+## Size
+
+Add `.spinner-border-sm` and `.spinner-grow-sm` to make a smaller spinner that can quickly be used within other components.
+
+{{< example >}}
+<div class="spinner-border spinner-border-sm" role="status">
+ <span class="visually-hidden">Loading...</span>
+</div>
+<div class="spinner-grow spinner-grow-sm" role="status">
+ <span class="visually-hidden">Loading...</span>
+</div>
+{{< /example >}}
+
+Or, use custom CSS or inline styles to change the dimensions as needed.
+
+{{< example >}}
+<div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">
+ <span class="visually-hidden">Loading...</span>
+</div>
+<div class="spinner-grow" style="width: 3rem; height: 3rem;" role="status">
+ <span class="visually-hidden">Loading...</span>
+</div>
+{{< /example >}}
+
+## Buttons
+
+Use spinners within buttons to indicate an action is currently processing or taking place. You may also swap the text out of the spinner element and utilize button text as needed.
+
+{{< example >}}
+<button class="btn btn-primary" type="button" disabled>
+ <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
+ <span class="visually-hidden">Loading...</span>
+</button>
+<button class="btn btn-primary" type="button" disabled>
+ <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
+ Loading...
+</button>
+{{< /example >}}
+
+{{< example >}}
+<button class="btn btn-primary" type="button" disabled>
+ <span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
+ <span class="visually-hidden">Loading...</span>
+</button>
+<button class="btn btn-primary" type="button" disabled>
+ <span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
+ Loading...
+</button>
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, spinners now use local CSS variables on `.spinner-border` and `.spinner-grow` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+Border spinner variables:
+
+{{< scss-docs name="spinner-border-css-vars" file="scss/_spinners.scss" >}}
+
+Growing spinner variables:
+
+{{< scss-docs name="spinner-grow-css-vars" file="scss/_spinners.scss" >}}
+
+For both spinners, small spinner modifier classes are used to update the values of these CSS variables as needed. For example, the `.spinner-border-sm` class does the following:
+
+{{< scss-docs name="spinner-border-sm-css-vars" file="scss/_spinners.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="spinner-variables" file="scss/_variables.scss" >}}
+
+### Keyframes
+
+Used for creating the CSS animations for our spinners. Included in `scss/_spinners.scss`.
+
+{{< scss-docs name="spinner-border-keyframes" file="scss/_spinners.scss" >}}
+
+{{< scss-docs name="spinner-grow-keyframes" file="scss/_spinners.scss" >}}
+
+
+[color]: {{< docsref "/utilities/colors" >}}
+[flex]: {{< docsref "/utilities/flex" >}}
+[float]: {{< docsref "/utilities/float" >}}
+[margin]: {{< docsref "/utilities/spacing" >}}
+[text]: {{< docsref "/utilities/text" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/toasts.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/toasts.md
new file mode 100644
index 000000000..b7a84dc6e
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/toasts.md
@@ -0,0 +1,401 @@
+---
+layout: docs
+title: Toasts
+description: Push notifications to your visitors with a toast, a lightweight and easily customizable alert message.
+group: components
+toc: true
+---
+
+Toasts are lightweight notifications designed to mimic the push notifications that have been popularized by mobile and desktop operating systems. They're built with flexbox, so they're easy to align and position.
+
+## Overview
+
+Things to know when using the toast plugin:
+
+- Toasts are opt-in for performance reasons, so **you must initialize them yourself**.
+- Toasts will automatically hide if you do not specify `autohide: false`.
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+## Examples
+
+### Basic
+
+To encourage extensible and predictable toasts, we recommend a header and body. Toast headers use `display: flex`, allowing easy alignment of content thanks to our margin and flexbox utilities.
+
+Toasts are as flexible as you need and have very little required markup. At a minimum, we require a single element to contain your "toasted" content and strongly encourage a dismiss button.
+
+{{< example >}}
+<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small>11 mins ago</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+</div>
+{{< /example >}}
+
+{{< callout warning >}}
+Previously, our scripts dynamically added the `.hide` class to completely hide a toast (with `display:none`, rather than just with `opacity:0`). This is now not necessary anymore. However, for backwards compatibility, our script will continue to toggle the class (even though there is no practical need for it) until the next major version.
+{{< /callout >}}
+
+### Live example
+
+Click the button below to show a toast (positioned with our utilities in the lower right corner) that has been hidden by default.
+
+<div class="toast-container position-fixed bottom-0 end-0 p-3">
+ <div id="liveToast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small>11 mins ago</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+ </div>
+</div>
+
+<div class="bd-example">
+ <button type="button" class="btn btn-primary" id="liveToastBtn">Show live toast</button>
+</div>
+
+```html
+<button type="button" class="btn btn-primary" id="liveToastBtn">Show live toast</button>
+
+<div class="toast-container position-fixed bottom-0 end-0 p-3">
+ <div id="liveToast" class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ <img src="..." class="rounded me-2" alt="...">
+ <strong class="me-auto">Bootstrap</strong>
+ <small>11 mins ago</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+ </div>
+</div>
+```
+
+We use the following JavaScript to trigger our live toast demo:
+
+```js
+const toastTrigger = document.getElementById('liveToastBtn')
+const toastLiveExample = document.getElementById('liveToast')
+if (toastTrigger) {
+ toastTrigger.addEventListener('click', () => {
+ const toast = new bootstrap.Toast(toastLiveExample)
+
+ toast.show()
+ })
+}
+```
+
+### Translucent
+
+Toasts are slightly translucent to blend in with what's below them.
+
+{{< example class="bg-dark" >}}
+<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small class="text-muted">11 mins ago</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+</div>
+{{< /example >}}
+
+### Stacking
+
+You can stack toasts by wrapping them in a toast container, which will vertically add some spacing.
+
+{{< example >}}
+<div class="toast-container position-static">
+ <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small class="text-muted">just now</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ See? Just like this.
+ </div>
+ </div>
+
+ <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small class="text-muted">2 seconds ago</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ Heads up, toasts will stack automatically
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Custom content
+
+Customize your toasts by removing sub-components, tweaking them with [utilities]({{< docsref "/utilities/api" >}}), or by adding your own markup. Here we've created a simpler toast by removing the default `.toast-header`, adding a custom hide icon from [Bootstrap Icons]({{< param icons >}}), and using some [flexbox utilities]({{< docsref "/utilities/flex" >}}) to adjust the layout.
+
+{{< example >}}
+<div class="toast align-items-center" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="d-flex">
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+ <button type="button" class="btn-close me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+</div>
+{{< /example >}}
+
+Alternatively, you can also add additional controls and components to toasts.
+
+{{< example >}}
+<div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ <div class="mt-2 pt-2 border-top">
+ <button type="button" class="btn btn-primary btn-sm">Take action</button>
+ <button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="toast">Close</button>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Color schemes
+
+Building on the above example, you can create different toast color schemes with our [color]({{< docsref "/utilities/colors" >}}) and [background]({{< docsref "/utilities/background" >}}) utilities. Here we've added `.text-bg-primary` to the `.toast`, and then added `.btn-close-white` to our close button. For a crisp edge, we remove the default border with `.border-0`.
+
+{{< example >}}
+<div class="toast align-items-center text-bg-primary border-0" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="d-flex">
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+ <button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+</div>
+{{< /example >}}
+
+## Placement
+
+Place toasts with custom CSS as you need them. The top right is often used for notifications, as is the top middle. If you're only ever going to show one toast at a time, put the positioning styles right on the `.toast`.
+
+{{< example stackblitz_add_js="true" >}}
+<form>
+ <div class="mb-3">
+ <label for="selectToastPlacement">Toast placement</label>
+ <select class="form-select mt-2" id="selectToastPlacement">
+ <option value="" selected>Select a position...</option>
+ <option value="top-0 start-0">Top left</option>
+ <option value="top-0 start-50 translate-middle-x">Top center</option>
+ <option value="top-0 end-0">Top right</option>
+ <option value="top-50 start-0 translate-middle-y">Middle left</option>
+ <option value="top-50 start-50 translate-middle">Middle center</option>
+ <option value="top-50 end-0 translate-middle-y">Middle right</option>
+ <option value="bottom-0 start-0">Bottom left</option>
+ <option value="bottom-0 start-50 translate-middle-x">Bottom center</option>
+ <option value="bottom-0 end-0">Bottom right</option>
+ </select>
+ </div>
+</form>
+<div aria-live="polite" aria-atomic="true" class="bg-body-secondary position-relative bd-example-toasts rounded-3">
+ <div class="toast-container p-3" id="toastPlacement">
+ <div class="toast">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small>11 mins ago</small>
+ </div>
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+For systems that generate more notifications, consider using a wrapping element so they can easily stack.
+
+{{< example class="bd-example-toasts p-0" >}}
+<div aria-live="polite" aria-atomic="true" class="position-relative">
+ <!-- Position it: -->
+ <!-- - `.toast-container` for spacing between toasts -->
+ <!-- - `top-0` & `end-0` to position the toasts in the upper right corner -->
+ <!-- - `.p-3` to prevent the toasts from sticking to the edge of the container -->
+ <div class="toast-container top-0 end-0 p-3">
+
+ <!-- Then put toasts within -->
+ <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small class="text-muted">just now</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ See? Just like this.
+ </div>
+ </div>
+
+ <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small class="text-muted">2 seconds ago</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ Heads up, toasts will stack automatically
+ </div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+You can also get fancy with flexbox utilities to align toasts horizontally and/or vertically.
+
+{{< example class="bd-example-toasts d-flex" >}}
+<!-- Flexbox container for aligning the toasts -->
+<div aria-live="polite" aria-atomic="true" class="d-flex justify-content-center align-items-center w-100">
+
+ <!-- Then put toasts within -->
+ <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small>11 mins ago</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Accessibility
+
+Toasts are intended to be small interruptions to your visitors or users, so to help those with screen readers and similar assistive technologies, you should wrap your toasts in an [`aria-live` region](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions). Changes to live regions (such as injecting/updating a toast component) are automatically announced by screen readers without needing to move the user's focus or otherwise interrupt the user. Additionally, include `aria-atomic="true"` to ensure that the entire toast is always announced as a single (atomic) unit, rather than just announcing what was changed (which could lead to problems if you only update part of the toast's content, or if displaying the same toast content at a later point in time). If the information needed is important for the process, e.g. for a list of errors in a form, then use the [alert component]({{< docsref "/components/alerts" >}}) instead of toast.
+
+Note that the live region needs to be present in the markup *before* the toast is generated or updated. If you dynamically generate both at the same time and inject them into the page, they will generally not be announced by assistive technologies.
+
+You also need to adapt the `role` and `aria-live` level depending on the content. If it's an important message like an error, use `role="alert" aria-live="assertive"`, otherwise use `role="status" aria-live="polite"` attributes.
+
+As the content you're displaying changes, be sure to update the [`delay` timeout](#options) so that users have enough time to read the toast.
+
+```html
+<div class="toast" role="alert" aria-live="polite" aria-atomic="true" data-bs-delay="10000">
+ <div role="alert" aria-live="assertive" aria-atomic="true">...</div>
+</div>
+```
+
+When using `autohide: false`, you must add a close button to allow users to dismiss the toast.
+
+{{< example >}}
+<div role="alert" aria-live="assertive" aria-atomic="true" class="toast" data-bs-autohide="false">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small>11 mins ago</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+</div>
+{{< /example >}}
+
+While technically it's possible to add focusable/actionable controls (such as additional buttons or links) in your toast, you should avoid doing this for autohiding toasts. Even if you give the toast a long [`delay` timeout](#options), keyboard and assistive technology users may find it difficult to reach the toast in time to take action (since toasts don't receive focus when they are displayed). If you absolutely must have further controls, we recommend using a toast with `autohide: false`.
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap's evolving CSS variables approach, toasts now use local CSS variables on `.toast` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="toast-css-vars" file="scss/_toasts.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="toast-variables" file="scss/_variables.scss" >}}
+
+## Usage
+
+Initialize toasts via JavaScript:
+
+```js
+const toastElList = document.querySelectorAll('.toast')
+const toastList = [...toastElList].map(toastEl => new bootstrap.Toast(toastEl, option))
+```
+
+### Triggers
+
+{{% js-dismiss "toast" %}}
+
+### Options
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+{{< bs-table "table" >}}
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| `animation` | boolean | `true` | Apply a CSS fade transition to the toast. |
+| `autohide` | boolean | `true` | Automatically hide the toast after the delay. |
+| `delay` | number | `5000` | Delay in milliseconds before hiding the toast. |
+{{< /bs-table >}}
+
+### Methods
+
+{{< callout danger >}}
+{{< partial "callouts/danger-async-methods.md" >}}
+{{< /callout >}}
+
+{{< bs-table "table" >}}
+| Method | Description |
+| --- | --- |
+| `dispose` | Hides an element's toast. Your toast will remain on the DOM but won't show anymore. |
+| `getInstance` | *Static* method which allows you to get the toast instance associated with a DOM element. <br> For example: `const myToastEl = document.getElementById('myToastEl')` `const myToast = bootstrap.Toast.getInstance(myToastEl)` Returns a Bootstrap toast instance. |
+| `getOrCreateInstance` | *Static* method which allows you to get the toast instance associated with a DOM element, or create a new one, in case it wasn't initialized. <br>`const myToastEl = document.getElementById('myToastEl')` `const myToast = bootstrap.Toast.getOrCreateInstance(myToastEl)` Returns a Bootstrap toast instance. |
+| `hide` | Hides an element's toast. **Returns to the caller before the toast has actually been hidden** (i.e. before the `hidden.bs.toast` event occurs). You have to manually call this method if you made `autohide` to `false`. |
+| `isShown` | Returns a boolean according to toast's visibility state. |
+| `show` | Reveals an element's toast. **Returns to the caller before the toast has actually been shown** (i.e. before the `shown.bs.toast` event occurs). You have to manually call this method, instead your toast won't show. |
+{{< /bs-table >}}
+
+### Events
+
+{{< bs-table "table" >}}
+| Event | Description |
+| --- | --- |
+| `hide.bs.toast` | This event is fired immediately when the `hide` instance method has been called. |
+| `hidden.bs.toast` | This event is fired when the toast has finished being hidden from the user. |
+| `show.bs.toast` | This event fires immediately when the `show` instance method is called. |
+| `shown.bs.toast` | This event is fired when the toast has been made visible to the user. |
+{{< /bs-table >}}
+
+```js
+const myToastEl = document.getElementById('myToast')
+myToastEl.addEventListener('hidden.bs.toast', () => {
+ // do something...
+})
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/components/tooltips.md b/vendor/twbs/bootstrap/site/content/docs/5.3/components/tooltips.md
new file mode 100644
index 000000000..ef269eca4
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/components/tooltips.md
@@ -0,0 +1,301 @@
+---
+layout: docs
+title: Tooltips
+description: Documentation and examples for adding custom Bootstrap tooltips with CSS and JavaScript using CSS3 for animations and data-bs-attributes for local title storage.
+group: components
+toc: true
+---
+
+## Overview
+
+Things to know when using the tooltip plugin:
+
+- Tooltips rely on the third party library [Popper](https://popper.js.org/) for positioning. You must include [popper.min.js]({{< param "cdn.popper" >}}) before `bootstrap.js`, or use one `bootstrap.bundle.min.js` which contains Popper.
+- Tooltips are opt-in for performance reasons, so **you must initialize them yourself**.
+- Tooltips with zero-length titles are never displayed.
+- Specify `container: 'body'` to avoid rendering problems in more complex components (like our input groups, button groups, etc).
+- Triggering tooltips on hidden elements will not work.
+- Tooltips for `.disabled` or `disabled` elements must be triggered on a wrapper element.
+- When triggered from hyperlinks that span multiple lines, tooltips will be centered. Use `white-space: nowrap;` on your `<a>`s to avoid this behavior.
+- Tooltips must be hidden before their corresponding elements have been removed from the DOM.
+- Tooltips can be triggered thanks to an element inside a shadow DOM.
+
+Got all that? Great, let's see how they work with some examples.
+
+{{< callout info >}}
+{{< partial "callouts/info-sanitizer.md" >}}
+{{< /callout >}}
+
+{{< callout info >}}
+{{< partial "callouts/info-prefersreducedmotion.md" >}}
+{{< /callout >}}
+
+## Examples
+
+### Enable tooltips
+
+As mentioned above, you must initialize tooltips before they can be used. One way to initialize all tooltips on a page would be to select them by their `data-bs-toggle` attribute, like so:
+
+```js
+const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
+const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
+```
+
+### Tooltips on links
+
+Hover over the links below to see tooltips:
+
+{{< example class="tooltip-demo" stackblitz_add_js="true" >}}
+<p class="muted">Placeholder text to demonstrate some <a href="#" data-bs-toggle="tooltip" data-bs-title="Default tooltip">inline links</a> with tooltips. This is now just filler, no killer. Content placed here just to mimic the presence of <a href="#" data-bs-toggle="tooltip" data-bs-title="Another tooltip">real text</a>. And all that just to give you an idea of how tooltips would look when used in real-world situations. So hopefully you've now seen how <a href="#" data-bs-toggle="tooltip" data-bs-title="Another one here too">these tooltips on links</a> can work in practice, once you use them on <a href="#" data-bs-toggle="tooltip" data-bs-title="The last tip!">your own</a> site or project.
+</p>
+{{< /example >}}
+
+{{< callout warning >}}
+{{< partial "callouts/warning-data-bs-title-vs-title.md" >}}
+{{< /callout >}}
+
+### Custom tooltips
+
+{{< added-in "5.2.0" >}}
+
+You can customize the appearance of tooltips using [CSS variables](#variables). We set a custom class with `data-bs-custom-class="custom-tooltip"` to scope our custom appearance and use it to override a local CSS variable.
+
+{{< scss-docs name="custom-tooltip" file="site/assets/scss/_component-examples.scss" >}}
+
+
+{{< example class="tooltip-demo" stackblitz_add_js="true" >}}
+<button type="button" class="btn btn-secondary"
+ data-bs-toggle="tooltip" data-bs-placement="top"
+ data-bs-custom-class="custom-tooltip"
+ data-bs-title="This top tooltip is themed via CSS variables.">
+ Custom tooltip
+</button>
+{{< /example >}}
+
+### Directions
+
+Hover over the buttons below to see the four tooltips directions: top, right, bottom, and left. Directions are mirrored when using Bootstrap in RTL.
+
+<div class="bd-example tooltip-demo">
+ <div class="bd-example-tooltips">
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="Tooltip on top">Tooltip on top</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip on right">Tooltip on right</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip on bottom">Tooltip on bottom</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip on left">Tooltip on left</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">Tooltip with HTML</button>
+ </div>
+</div>
+
+```html
+<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="Tooltip on top">
+ Tooltip on top
+</button>
+<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip on right">
+ Tooltip on right
+</button>
+<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip on bottom">
+ Tooltip on bottom
+</button>
+<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip on left">
+ Tooltip on left
+</button>
+```
+
+And with custom HTML added:
+
+```html
+<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
+ Tooltip with HTML
+</button>
+```
+
+With an SVG:
+
+<div class="bd-example tooltip-demo">
+ <a href="#" class="d-inline-block" data-bs-toggle="tooltip" data-bs-title="Default tooltip">
+ <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 100 100">
+ <rect width="100%" height="100%" fill="#563d7c"/>
+ <circle cx="50" cy="50" r="30" fill="#007bff"/>
+ </svg>
+ </a>
+</div>
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+As part of Bootstrap’s evolving CSS variables approach, tooltips now use local CSS variables on `.tooltip` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
+
+{{< scss-docs name="tooltip-css-vars" file="scss/_tooltip.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="tooltip-variables" file="scss/_variables.scss" >}}
+
+## Usage
+
+The tooltip plugin generates content and markup on demand, and by default places tooltips after their trigger element.
+
+Trigger the tooltip via JavaScript:
+
+```js
+const exampleEl = document.getElementById('example')
+const tooltip = new bootstrap.Tooltip(exampleEl, options)
+```
+
+{{< callout warning >}}
+##### Overflow `auto` and `scroll`
+
+Tooltip position attempts to automatically change when a **parent container** has `overflow: auto` or `overflow: scroll` like our `.table-responsive`, but still keeps the original placement's positioning. To resolve this, set the [`boundary` option](https://popper.js.org/docs/v2/modifiers/flip/#boundary) (for the flip modifier using the `popperConfig` option) to any HTMLElement to override the default value, `'clippingParents'`, such as `document.body`:
+
+```js
+const tooltip = new bootstrap.Tooltip('#example', {
+ boundary: document.body // or document.querySelector('#boundary')
+})
+```
+{{< /callout >}}
+
+### Markup
+
+The required markup for a tooltip is only a `data` attribute and `title` on the HTML element you wish to have a tooltip. The generated markup of a tooltip is rather simple, though it does require a position (by default, set to `top` by the plugin).
+
+{{< callout warning >}}
+##### Making tooltips work for keyboard and assistive technology users
+
+You should only add tooltips to HTML elements that are traditionally keyboard-focusable and interactive (such as links or form controls). Although arbitrary HTML elements (such as `<span>`s) can be made focusable by adding the `tabindex="0"` attribute, this will add potentially annoying and confusing tab stops on non-interactive elements for keyboard users, and most assistive technologies currently do not announce the tooltip in this situation. Additionally, do not rely solely on `hover` as the trigger for your tooltip, as this will make your tooltips impossible to trigger for keyboard users.
+{{< /callout >}}
+
+```html
+<!-- HTML to write -->
+<a href="#" data-bs-toggle="tooltip" data-bs-title="Some tooltip text!">Hover over me</a>
+
+<!-- Generated markup by the plugin -->
+<div class="tooltip bs-tooltip-top" role="tooltip">
+ <div class="tooltip-arrow"></div>
+ <div class="tooltip-inner">
+ Some tooltip text!
+ </div>
+</div>
+```
+
+### Disabled elements
+
+Elements with the `disabled` attribute aren't interactive, meaning users cannot focus, hover, or click them to trigger a tooltip (or popover). As a workaround, you'll want to trigger the tooltip from a wrapper `<div>` or `<span>`, ideally made keyboard-focusable using `tabindex="0"`.
+
+<div class="tooltip-demo">
+{{< example >}}
+<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-title="Disabled tooltip">
+ <button class="btn btn-primary" type="button" disabled>Disabled button</button>
+</span>
+{{< /example >}}
+</div>
+
+### Options
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+{{< callout warning >}}
+Note that for security reasons the `sanitize`, `sanitizeFn`, and `allowList` options cannot be supplied using data attributes.
+{{< /callout >}}
+
+
+{{< bs-table "table" >}}
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| `allowList` | object | [Default value]({{< docsref "/getting-started/javascript#sanitizer" >}}) | Object which contains allowed attributes and tags. |
+| `animation` | boolean | `true` | Apply a CSS fade transition to the tooltip. |
+| `boundary` | string, element | `'clippingParents'` | Overflow constraint boundary of the tooltip (applies only to Popper's preventOverflow modifier). By default, it's `'clippingParents'` and can accept an HTMLElement reference (via JavaScript only). For more information refer to Popper's [detectOverflow docs](https://popper.js.org/docs/v2/utils/detect-overflow/#boundary). |
+| `container` | string, element, false | `false` | Appends the tooltip to a specific element. Example: `container: 'body'`. This option is particularly useful in that it allows you to position the tooltip in the flow of the document near the triggering element - which will prevent the tooltip from floating away from the triggering element during a window resize. |
+| `customClass` | string, function | `''` | Add classes to the tooltip when it is shown. Note that these classes will be added in addition to any classes specified in the template. To add multiple classes, separate them with spaces: `'class-1 class-2'`. You can also pass a function that should return a single string containing additional class names. |
+| `delay` | number, object | `0` | Delay showing and hiding the tooltip (ms)—doesn't apply to manual trigger type. If a number is supplied, delay is applied to both hide/show. Object structure is: `delay: { "show": 500, "hide": 100 }`. |
+| `fallbackPlacements` | array | `['top', 'right', 'bottom', 'left']` | Define fallback placements by providing a list of placements in array (in order of preference). For more information refer to Popper's [behavior docs](https://popper.js.org/docs/v2/modifiers/flip/#fallbackplacements). |
+| `html` | boolean | `false` | Allow HTML in the tooltip. If true, HTML tags in the tooltip's `title` will be rendered in the tooltip. If false, `innerText` property will be used to insert content into the DOM. Use text if you're worried about XSS attacks. |
+| `offset` | array, string, function | `[0, 0]` | Offset of the tooltip relative to its target. You can pass a string in data attributes with comma separated values like: `data-bs-offset="10,20"`. When a function is used to determine the offset, it is called with an object containing the popper placement, the reference, and popper rects as its first argument. The triggering element DOM node is passed as the second argument. The function must return an array with two numbers: [skidding](https://popper.js.org/docs/v2/modifiers/offset/#skidding-1), [distance](https://popper.js.org/docs/v2/modifiers/offset/#distance-1). For more information refer to Popper's [offset docs](https://popper.js.org/docs/v2/modifiers/offset/#options). |
+| `placement` | string, function | `'top'` | How to position the tooltip: auto, top, bottom, left, right. When `auto` is specified, it will dynamically reorient the tooltip. When a function is used to determine the placement, it is called with the tooltip DOM node as its first argument and the triggering element DOM node as its second. The `this` context is set to the tooltip instance. |
+| `popperConfig` | null, object, function | `null` | To change Bootstrap's default Popper config, see [Popper's configuration](https://popper.js.org/docs/v2/constructors/#options). When a function is used to create the Popper configuration, it's called with an object that contains the Bootstrap's default Popper configuration. It helps you use and merge the default with your own configuration. The function must return a configuration object for Popper. |
+| `sanitize` | boolean | `true` | Enable or disable the sanitization. If activated `'template'`, `'content'` and `'title'` options will be sanitized. |
+| `sanitizeFn` | null, function | `null` | Here you can supply your own sanitize function. This can be useful if you prefer to use a dedicated library to perform sanitization. |
+| `selector` | string, false | `false` | If a selector is provided, tooltip objects will be delegated to the specified targets. In practice, this is used to also apply tooltips to dynamically added DOM elements (`jQuery.on` support). See [this issue]({{< param repo >}}/issues/4215) and [an informative example](https://codepen.io/Johann-S/pen/djJYPb). **Note**: `title` attribute must not be used as a selector. |
+| `template` | string | `'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'` | Base HTML to use when creating the tooltip. The tooltip's `title` will be injected into the `.tooltip-inner`. `.tooltip-arrow` will become the tooltip's arrow. The outermost wrapper element should have the `.tooltip` class and `role="tooltip"`. |
+| `title` | string, element, function | `''` | Default title value if `title` attribute isn't present. If a function is given, it will be called with its `this` reference set to the element that the popover is attached to. |
+| `trigger` | string | `'hover focus'` | How tooltip is triggered: click, hover, focus, manual. You may pass multiple triggers; separate them with a space. `'manual'` indicates that the tooltip will be triggered programmatically via the `.tooltip('show')`, `.tooltip('hide')` and `.tooltip('toggle')` methods; this value cannot be combined with any other trigger. `'hover'` on its own will result in tooltips that cannot be triggered via the keyboard, and should only be used if alternative methods for conveying the same information for keyboard users is present. |
+{{< /bs-table >}}
+
+{{< callout info >}}
+#### Data attributes for individual tooltips
+
+Options for individual tooltips can alternatively be specified through the use of data attributes, as explained above.
+{{< /callout >}}
+
+#### Using function with `popperConfig`
+
+```js
+const tooltip = new bootstrap.Tooltip(element, {
+ popperConfig(defaultBsPopperConfig) {
+ // const newPopperConfig = {...}
+ // use defaultBsPopperConfig if needed...
+ // return newPopperConfig
+ }
+})
+```
+
+### Methods
+
+{{< callout danger >}}
+{{< partial "callouts/danger-async-methods.md" >}}
+{{< /callout >}}
+
+{{< bs-table "table" >}}
+| Method | Description |
+| --- | --- |
+| `disable` | Removes the ability for an element's tooltip to be shown. The tooltip will only be able to be shown if it is re-enabled. |
+| `dispose` | Hides and destroys an element's tooltip (Removes stored data on the DOM element). Tooltips that use delegation (which are created using [the `selector` option](#options)) cannot be individually destroyed on descendant trigger elements. |
+| `enable` | Gives an element's tooltip the ability to be shown. **Tooltips are enabled by default.** |
+| `getInstance` | *Static* method which allows you to get the tooltip instance associated with a DOM element, or create a new one in case it wasn't initialized. |
+| `getOrCreateInstance` | *Static* method which allows you to get the tooltip instance associated with a DOM element, or create a new one in case it wasn't initialized. |
+| `hide` | Hides an element's tooltip. **Returns to the caller before the tooltip has actually been hidden** (i.e. before the `hidden.bs.tooltip` event occurs). This is considered a "manual" triggering of the tooltip. |
+| `setContent` | Gives a way to change the tooltip's content after its initialization. |
+| `show` | Reveals an element's tooltip. **Returns to the caller before the tooltip has actually been shown** (i.e. before the `shown.bs.tooltip` event occurs). This is considered a "manual" triggering of the tooltip. Tooltips with zero-length titles are never displayed. |
+| `toggle` | Toggles an element's tooltip. **Returns to the caller before the tooltip has actually been shown or hidden** (i.e. before the `shown.bs.tooltip` or `hidden.bs.tooltip` event occurs). This is considered a "manual" triggering of the tooltip. |
+| `toggleEnabled` | Toggles the ability for an element's tooltip to be shown or hidden. |
+| `update` | Updates the position of an element's tooltip. |
+{{< /bs-table >}}
+
+```js
+const tooltip = bootstrap.Tooltip.getInstance('#example') // Returns a Bootstrap tooltip instance
+
+// setContent example
+tooltip.setContent({ '.tooltip-inner': 'another title' })
+
+```
+
+{{< callout info >}}
+The `setContent` method accepts an `object` argument, where each property-key is a valid `string` selector within the popover template, and each related property-value can be `string` | `element` | `function` | `null`
+{{< /callout >}}
+
+### Events
+
+{{< bs-table >}}
+| Event | Description |
+| --- | --- |
+| `hide.bs.tooltip` | This event is fired immediately when the `hide` instance method has been called. |
+| `hidden.bs.tooltip` | This event is fired when the popover has finished being hidden from the user (will wait for CSS transitions to complete). |
+| `inserted.bs.tooltip` | This event is fired after the `show.bs.tooltip` event when the tooltip template has been added to the DOM. |
+| `show.bs.tooltip` | This event fires immediately when the `show` instance method is called. |
+| `shown.bs.tooltip` | This event is fired when the popover has been made visible to the user (will wait for CSS transitions to complete). |
+{{< /bs-table >}}
+
+```js
+const myTooltipEl = document.getElementById('myTooltip')
+const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)
+
+myTooltipEl.addEventListener('hidden.bs.tooltip', () => {
+ // do something...
+})
+
+tooltip.hide()
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/content/figures.md b/vendor/twbs/bootstrap/site/content/docs/5.3/content/figures.md
index 29a38d723..29a38d723 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/content/figures.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/content/figures.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/content/images.md b/vendor/twbs/bootstrap/site/content/docs/5.3/content/images.md
index b55e7a2b8..b55e7a2b8 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/content/images.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/content/images.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/content/reboot.md b/vendor/twbs/bootstrap/site/content/docs/5.3/content/reboot.md
new file mode 100644
index 000000000..a695009dc
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/content/reboot.md
@@ -0,0 +1,475 @@
+---
+layout: docs
+title: Reboot
+description: Reboot, a collection of element-specific CSS changes in a single file, kickstart Bootstrap to provide an elegant, consistent, and simple baseline to build upon.
+group: content
+aliases: "/docs/5.3/content/"
+toc: true
+---
+
+## Approach
+
+Reboot builds upon Normalize, providing many HTML elements with somewhat opinionated styles using only element selectors. Additional styling is done only with classes. For example, we reboot some `<table>` styles for a simpler baseline and later provide `.table`, `.table-bordered`, and more.
+
+Here are our guidelines and reasons for choosing what to override in Reboot:
+
+- Update some browser default values to use `rem`s instead of `em`s for scalable component spacing.
+- Avoid `margin-top`. Vertical margins can collapse, yielding unexpected results. More importantly though, a single direction of `margin` is a simpler mental model.
+- For easier scaling across device sizes, block elements should use `rem`s for `margin`s.
+- Keep declarations of `font`-related properties to a minimum, using `inherit` whenever possible.
+
+## CSS variables
+
+{{< added-in "5.2.0" >}}
+
+With v5.1.1, we standardized our required `@import`s across all our CSS bundles (including `bootstrap.css`, `bootstrap-reboot.css`, and `bootstrap-grid.css`) to include `_root.scss`. This adds `:root` level CSS variables to all bundles, regardless of how many of them are used in that bundle. Ultimately Bootstrap 5 will continue to see more [CSS variables]({{< docsref "/customize/css-variables" >}}) added over time, in order to provide more real-time customization without the need to always recompile Sass. Our approach is to take our source Sass variables and transform them into CSS variables. That way, even if you don't use CSS variables, you still have all the power of Sass. **This is still in-progress and will take time to fully implement.**
+
+For example, consider these `:root` CSS variables for common `<body>` styles:
+
+{{< scss-docs name="root-body-variables" file="scss/_root.scss" >}}
+
+In practice, those variables are then applied in Reboot like so:
+
+{{< scss-docs name="reboot-body-rules" file="scss/_reboot.scss" >}}
+
+Which allows you to make real-time customizations however you like:
+
+```html
+<body style="--bs-body-color: #333;">
+ <!-- ... -->
+</body>
+```
+
+## Page defaults
+
+The `<html>` and `<body>` elements are updated to provide better page-wide defaults. More specifically:
+
+- The `box-sizing` is globally set on every element—including `*::before` and `*::after`, to `border-box`. This ensures that the declared width of element is never exceeded due to padding or border.
+ - No base `font-size` is declared on the `<html>`, but `16px` is assumed (the browser default). `font-size: 1rem` is applied on the `<body>` for easy responsive type-scaling via media queries while respecting user preferences and ensuring a more accessible approach. This browser default can be overridden by modifying the `$font-size-root` variable.
+- The `<body>` also sets a global `font-family`, `font-weight`, `line-height`, and `color`. This is inherited later by some form elements to prevent font inconsistencies.
+- For safety, the `<body>` has a declared `background-color`, defaulting to `#fff`.
+
+## Native font stack
+
+Bootstrap utilizes a "native font stack" or "system font stack" for optimum text rendering on every device and OS. These system fonts have been designed specifically with today's devices in mind, with improved rendering on screens, variable font support, and more. Read more about [native font stacks in this *Smashing Magazine* article](https://www.smashingmagazine.com/2015/11/using-system-ui-fonts-practical-guide/).
+
+```scss
+$font-family-sans-serif:
+ // Cross-platform generic font family (default user interface font)
+ system-ui,
+ // Safari for macOS and iOS (San Francisco)
+ -apple-system,
+ // Windows
+ "Segoe UI",
+ // Android
+ Roboto,
+ // older macOS and iOS
+ "Helvetica Neue"
+ // Linux
+ "Noto Sans",
+ "Liberation Sans",
+ // Basic web fallback
+ Arial,
+ // Sans serif fallback
+ sans-serif,
+ // Emoji fonts
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default;
+```
+
+Note that because the font stack includes emoji fonts, many common symbol/dingbat Unicode characters will be rendered as multicolored pictographs. Their appearance will vary, depending on the style used in the browser/platform's native emoji font, and they won't be affected by any CSS `color` styles.
+
+This `font-family` is applied to the `<body>` and automatically inherited globally throughout Bootstrap. To switch the global `font-family`, update `$font-family-base` and recompile Bootstrap.
+
+## Headings
+
+All heading elements—`<h1>`—`<h6>` have their `margin-top` removed, `margin-bottom: .5rem` set, and `line-height` tightened. While headings inherit their `color` by default, you can also override it via optional CSS variable, `--bs-heading-color`.
+
+{{< bs-table "table" >}}
+| Heading | Example |
+| --- | --- |
+| `<h1></h1>` | <span class="h1">h1. Bootstrap heading</span> |
+| `<h2></h2>` | <span class="h2">h2. Bootstrap heading</span> |
+| `<h3></h3>` | <span class="h3">h3. Bootstrap heading</span> |
+| `<h4></h4>` | <span class="h4">h4. Bootstrap heading</span> |
+| `<h5></h5>` | <span class="h5">h5. Bootstrap heading</span> |
+| `<h6></h6>` | <span class="h6">h6. Bootstrap heading</span> |
+{{< /bs-table >}}
+
+## Paragraphs
+
+All `<p>` elements have their `margin-top` removed and `margin-bottom: 1rem` set for easy spacing.
+
+{{< example >}}
+<p>This is an example paragraph.</p>
+{{< /example >}}
+
+## Links
+
+Links have a default `color` and underline applied. While links change on `:hover`, they don't change based on whether someone `:visited` the link. They also receive no special `:focus` styles.
+
+{{< example >}}
+<a href="#">This is an example link</a>
+{{< /example >}}
+
+As of v5.3.x, link `color` is set using `rgba()` and new `-rgb` CSS variables, allowing for easy customization of link color opacity. Change the link color opacity with the `--bs-link-opacity` CSS variable:
+
+{{< example >}}
+<a href="#" style="--bs-link-opacity: .5">This is an example link</a>
+{{< /example >}}
+
+
+Placeholder links—those without an `href`—are targeted with a more specific selector and have their `color` and `text-decoration` reset to their default values.
+
+{{< example >}}
+<a>This is a placeholder link</a>
+{{< /example >}}
+
+## Horizontal rules
+
+The `<hr>` element has been simplified. Similar to browser defaults, `<hr>`s are styled via `border-top`, have a default `opacity: .25`, and automatically inherit their `border-color` via `color`, including when `color` is set via the parent. They can be modified with text, border, and opacity utilities.
+
+{{< example >}}
+<hr>
+
+<div class="text-success">
+ <hr>
+</div>
+
+<hr class="border border-danger border-2 opacity-50">
+<hr class="border border-primary border-3 opacity-75">
+{{< /example >}}
+
+## Lists
+
+All lists—`<ul>`, `<ol>`, and `<dl>`—have their `margin-top` removed and a `margin-bottom: 1rem`. Nested lists have no `margin-bottom`. We've also reset the `padding-left` on `<ul>` and `<ol>` elements.
+
+<div class="bd-example">
+{{< markdown >}}
+* All lists have their top margin removed
+* And their bottom margin normalized
+* Nested lists have no bottom margin
+ * This way they have a more even appearance
+ * Particularly when followed by more list items
+* The left padding has also been reset
+
+1. Here's an ordered list
+2. With a few list items
+3. It has the same overall look
+4. As the previous unordered list
+{{< /markdown >}}
+</div>
+
+For simpler styling, clear hierarchy, and better spacing, description lists have updated `margin`s. `<dd>`s reset `margin-left` to `0` and add `margin-bottom: .5rem`. `<dt>`s are **bolded**.
+
+<div class="bd-example">
+ <dl>
+ <dt>Description lists</dt>
+ <dd>A description list is perfect for defining terms.</dd>
+ <dt>Term</dt>
+ <dd>Definition for the term.</dd>
+ <dd>A second definition for the same term.</dd>
+ <dt>Another term</dt>
+ <dd>Definition for this other term.</dd>
+ </dl>
+</div>
+
+## Inline code
+
+Wrap inline snippets of code with `<code>`. Be sure to escape HTML angle brackets.
+
+{{< example >}}
+For example, <code>&lt;section&gt;</code> should be wrapped as inline.
+{{< /example >}}
+
+## Code blocks
+
+Use `<pre>`s for multiple lines of code. Once again, be sure to escape any angle brackets in the code for proper rendering. The `<pre>` element is reset to remove its `margin-top` and use `rem` units for its `margin-bottom`.
+
+{{< example >}}
+<pre><code>&lt;p&gt;Sample text here...&lt;/p&gt;
+&lt;p&gt;And another line of sample text here...&lt;/p&gt;
+</code></pre>
+{{< /example >}}
+
+## Variables
+
+For indicating variables use the `<var>` tag.
+
+{{< example >}}
+<var>y</var> = <var>m</var><var>x</var> + <var>b</var>
+{{< /example >}}
+
+## User input
+
+Use the `<kbd>` to indicate input that is typically entered via keyboard.
+
+{{< example >}}
+To switch directories, type <kbd>cd</kbd> followed by the name of the directory.<br>
+To edit settings, press <kbd><kbd>Ctrl</kbd> + <kbd>,</kbd></kbd>
+{{< /example >}}
+
+## Sample output
+
+For indicating sample output from a program use the `<samp>` tag.
+
+{{< example >}}
+<samp>This text is meant to be treated as sample output from a computer program.</samp>
+{{< /example >}}
+
+## Tables
+
+Tables are slightly adjusted to style `<caption>`s, collapse borders, and ensure consistent `text-align` throughout. Additional changes for borders, padding, and more come with [the `.table` class]({{< docsref "/content/tables" >}}).
+
+{{< example >}}
+<table>
+ <caption>
+ This is an example table, and this is its caption to describe the contents.
+ </caption>
+ <thead>
+ <tr>
+ <th>Table heading</th>
+ <th>Table heading</th>
+ <th>Table heading</th>
+ <th>Table heading</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Table cell</td>
+ <td>Table cell</td>
+ <td>Table cell</td>
+ <td>Table cell</td>
+ </tr>
+ <tr>
+ <td>Table cell</td>
+ <td>Table cell</td>
+ <td>Table cell</td>
+ <td>Table cell</td>
+ </tr>
+ <tr>
+ <td>Table cell</td>
+ <td>Table cell</td>
+ <td>Table cell</td>
+ <td>Table cell</td>
+ </tr>
+ </tbody>
+</table>
+{{< /example >}}
+
+## Forms
+
+Various form elements have been rebooted for simpler base styles. Here are some of the most notable changes:
+
+- `<fieldset>`s have no borders, padding, or margin so they can be easily used as wrappers for individual inputs or groups of inputs.
+- `<legend>`s, like fieldsets, have also been restyled to be displayed as a heading of sorts.
+- `<label>`s are set to `display: inline-block` to allow `margin` to be applied.
+- `<input>`s, `<select>`s, `<textarea>`s, and `<button>`s are mostly addressed by Normalize, but Reboot removes their `margin` and sets `line-height: inherit`, too.
+- `<textarea>`s are modified to only be resizable vertically as horizontal resizing often "breaks" page layout.
+- `<button>`s and `<input>` button elements have `cursor: pointer` when `:not(:disabled)`.
+
+These changes, and more, are demonstrated below.
+
+<form class="bd-example">
+ <fieldset>
+ <legend>Example legend</legend>
+ <p>
+ <label for="input">Example input</label>
+ <input type="text" id="input" placeholder="Example input">
+ </p>
+ <p>
+ <label for="email">Example email</label>
+ <input type="email" id="email" placeholder="test@example.com">
+ </p>
+ <p>
+ <label for="tel">Example telephone</label>
+ <input type="tel" id="tel">
+ </p>
+ <p>
+ <label for="url">Example url</label>
+ <input type="url" id="url">
+ </p>
+ <p>
+ <label for="number">Example number</label>
+ <input type="number" id="number">
+ </p>
+ <p>
+ <label for="search">Example search</label>
+ <input type="search" id="search">
+ </p>
+ <p>
+ <label for="range">Example range</label>
+ <input type="range" id="range" min="0" max="10">
+ </p>
+ <p>
+ <label for="file">Example file input</label>
+ <input type="file" id="file">
+ </p>
+ <p>
+ <label for="select">Example select</label>
+ <select id="select">
+ <option value="">Choose...</option>
+ <optgroup label="Option group 1">
+ <option value="">Option 1</option>
+ <option value="">Option 2</option>
+ <option value="">Option 3</option>
+ </optgroup>
+ <optgroup label="Option group 2">
+ <option value="">Option 4</option>
+ <option value="">Option 5</option>
+ <option value="">Option 6</option>
+ </optgroup>
+ </select>
+ </p>
+ <p>
+ <label>
+ <input type="checkbox" value="">
+ Check this checkbox
+ </label>
+ </p>
+ <p>
+ <label>
+ <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
+ Option one is this and that
+ </label>
+ <label>
+ <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2">
+ Option two is something else that's also super long to demonstrate the wrapping of these fancy form controls.
+ </label>
+ <label>
+ <input type="radio" name="optionsRadios" id="optionsRadios3" value="option3" disabled>
+ Option three is disabled
+ </label>
+ </p>
+ <p>
+ <label for="textarea">Example textarea</label>
+ <textarea id="textarea" rows="3"></textarea>
+ </p>
+ <p>
+ <label for="date">Example date</label>
+ <input type="date" id="date">
+ </p>
+ <p>
+ <label for="time">Example time</label>
+ <input type="time" id="time">
+ </p>
+ <p>
+ <label for="password">Example password</label>
+ <input type="password" id="password">
+ </p>
+ <p>
+ <label for="datetime-local">Example datetime-local</label>
+ <input type="datetime-local" id="datetime-local">
+ </p>
+ <p>
+ <label for="week">Example week</label>
+ <input type="week" id="week">
+ </p>
+ <p>
+ <label for="month">Example month</label>
+ <input type="month" id="month">
+ </p>
+ <p>
+ <label for="color">Example color</label>
+ <input type="color" id="color">
+ </p>
+ <p>
+ <label for="output">Example output</label>
+ <output name="result" id="output">100</output>
+ </p>
+ <p>
+ <button type="submit">Button submit</button>
+ <input type="submit" value="Input submit button">
+ <input type="reset" value="Input reset button">
+ <input type="button" value="Input button">
+ </p>
+ <p>
+ <button type="submit" disabled>Button submit</button>
+ <input type="submit" value="Input submit button" disabled>
+ <input type="reset" value="Input reset button" disabled>
+ <input type="button" value="Input button" disabled>
+ </p>
+ </fieldset>
+</form>
+
+{{< callout warning >}}
+{{< partial "callouts/warning-input-support.md" >}}
+{{< /callout >}}
+
+### Pointers on buttons
+
+Reboot includes an enhancement for `role="button"` to change the default cursor to `pointer`. Add this attribute to elements to help indicate elements are interactive. This role isn't necessary for `<button>` elements, which get their own `cursor` change.
+
+{{< example >}}
+<span role="button" tabindex="0">Non-button element button</span>
+{{< /example >}}
+
+## Misc elements
+
+### Address
+
+The `<address>` element is updated to reset the browser default `font-style` from `italic` to `normal`. `line-height` is also now inherited, and `margin-bottom: 1rem` has been added. `<address>`s are for presenting contact information for the nearest ancestor (or an entire body of work). Preserve formatting by ending lines with `<br>`.
+
+<div class="bd-example">
+ <address>
+ <strong>Twitter, Inc.</strong><br>
+ 1355 Market St, Suite 900<br>
+ San Francisco, CA 94103<br>
+ <abbr title="Phone">P:</abbr> (123) 456-7890
+ </address>
+
+ <address>
+ <strong>Full Name</strong><br>
+ <a href="mailto:first.last@example.com">first.last@example.com</a>
+ </address>
+</div>
+
+### Blockquote
+
+The default `margin` on blockquotes is `1em 40px`, so we reset that to `0 0 1rem` for something more consistent with other elements.
+
+<div class="bd-example">
+ <blockquote class="blockquote">
+ <p>A well-known quote, contained in a blockquote element.</p>
+ </blockquote>
+ <p>Someone famous in <cite title="Source Title">Source Title</cite></p>
+</div>
+
+### Inline elements
+
+The `<abbr>` element receives basic styling to make it stand out amongst paragraph text.
+
+<div class="bd-example">
+ The <abbr title="HyperText Markup Language">HTML</abbr> abbreviation element.
+</div>
+
+### Summary
+
+The default `cursor` on summary is `text`, so we reset that to `pointer` to convey that the element can be interacted with by clicking on it.
+
+<div class="bd-example">
+ <details>
+ <summary>Some details</summary>
+ <p>More info about the details.</p>
+ </details>
+
+ <details open>
+ <summary>Even more details</summary>
+ <p>Here are even more details about the details.</p>
+ </details>
+</div>
+
+## HTML5 `[hidden]` attribute
+
+HTML5 adds [a new global attribute named `[hidden]`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/hidden), which is styled as `display: none` by default. Borrowing an idea from [PureCSS](https://purecss.io/), we improve upon this default by making `[hidden] { display: none !important; }` to help prevent its `display` from getting accidentally overridden.
+
+```html
+<input type="text" hidden>
+```
+
+{{< callout warning >}}
+##### jQuery incompatibility
+
+`[hidden]` is not compatible with jQuery's `$(...).hide()` and `$(...).show()` methods. Therefore, we don't currently especially endorse `[hidden]` over other techniques for managing the `display` of elements.
+{{< /callout >}}
+
+To merely toggle the visibility of an element, meaning its `display` is not modified and the element can still affect the flow of the document, use [the `.invisible` class]({{< docsref "/utilities/visibility" >}}) instead.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/content/tables.md b/vendor/twbs/bootstrap/site/content/docs/5.3/content/tables.md
new file mode 100644
index 000000000..044a7147f
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/content/tables.md
@@ -0,0 +1,839 @@
+---
+layout: docs
+title: Tables
+description: Documentation and examples for opt-in styling of tables (given their prevalent use in JavaScript plugins) with Bootstrap.
+group: content
+toc: true
+---
+
+## Overview
+
+Due to the widespread use of `<table>` elements across third-party widgets like calendars and date pickers, Bootstrap's tables are **opt-in**. Add the base class `.table` to any `<table>`, then extend with our optional modifier classes or custom styles. All table styles are not inherited in Bootstrap, meaning any nested tables can be styled independent from the parent.
+
+Using the most basic table markup, here's how `.table`-based tables look in Bootstrap.
+
+{{< table class="table" simplified="false" >}}
+
+## Variants
+
+Use contextual classes to color tables, table rows or individual cells.
+
+{{< callout info >}}
+**Heads up!** Because of the more complicated CSS used to generate our table variants, they most likely won't see color mode adaptive styling until v6.
+{{< /callout >}}
+
+<div class="bd-example">
+ <table class="table">
+ <thead>
+ <tr>
+ <th scope="col">Class</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">Default</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ {{< table.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <tr class="table-{{ .name }}">
+ <th scope="row">{{ .name | title }}</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ {{- end -}}
+ {{< /table.inline >}}
+ </tbody>
+ </table>
+</div>
+
+{{< highlight html >}}
+<!-- On tables -->{{< table.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<table class="table-{{ .name }}">...</table>
+{{- end -}}
+{{< /table.inline >}}
+
+<!-- On rows -->{{< table.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<tr class="table-{{ .name }}">...</tr>
+{{- end -}}
+{{< /table.inline >}}
+
+<!-- On cells (`td` or `th`) -->
+<tr>{{< table.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+ <td class="table-{{ .name }}">...</td>
+{{- end -}}
+{{< /table.inline >}}
+</tr>
+{{< /highlight >}}
+
+{{< callout info >}}
+{{< partial "callouts/warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
+
+## Accented tables
+
+### Striped rows
+
+Use `.table-striped` to add zebra-striping to any table row within the `<tbody>`.
+
+{{< table class="table table-striped" >}}
+
+### Striped columns
+
+Use `.table-striped-columns` to add zebra-striping to any table column.
+
+{{< table class="table table-striped-columns" >}}
+
+These classes can also be added to table variants:
+
+{{< table class="table table-dark table-striped" >}}
+
+{{< table class="table table-dark table-striped-columns" >}}
+
+{{< table class="table table-success table-striped" >}}
+
+{{< table class="table table-success table-striped-columns" >}}
+
+### Hoverable rows
+
+Add `.table-hover` to enable a hover state on table rows within a `<tbody>`.
+
+{{< table class="table table-hover" >}}
+
+{{< table class="table table-dark table-hover" >}}
+
+These hoverable rows can also be combined with the striped rows variant:
+
+{{< table class="table table-striped table-hover" >}}
+
+### Active tables
+
+Highlight a table row or cell by adding a `.table-active` class.
+
+<div class="bd-example">
+ <table class="table">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="table-active">
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2" class="table-active">Larry the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+```html
+<table class="table">
+ <thead>
+ ...
+ </thead>
+ <tbody>
+ <tr class="table-active">
+ ...
+ </tr>
+ <tr>
+ ...
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2" class="table-active">Larry the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+</table>
+```
+
+<div class="bd-example">
+ <table class="table table-dark">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="table-active">
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2" class="table-active">Larry the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+```html
+<table class="table table-dark">
+ <thead>
+ ...
+ </thead>
+ <tbody>
+ <tr class="table-active">
+ ...
+ </tr>
+ <tr>
+ ...
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2" class="table-active">Larry the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+</table>
+```
+
+## How do the variants and accented tables work?
+
+For the accented tables ([striped rows](#striped-rows), [striped columns](#striped-columns), [hoverable rows](#hoverable-rows), and [active tables](#active-tables)), we used some techniques to make these effects work for all our [table variants](#variants):
+
+- We start by setting the background of a table cell with the `--bs-table-bg` custom property. All table variants then set that custom property to colorize the table cells. This way, we don't get into trouble if semi-transparent colors are used as table backgrounds.
+- Then we add an inset box shadow on the table cells with `box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);` to layer on top of any specified `background-color`. Because we use a huge spread and no blur, the color will be monotone. Since `--bs-table-accent-bg` is unset by default, we don't have a default box shadow.
+- When either `.table-striped`, `.table-striped-columns`, `.table-hover` or `.table-active` classes are added, the `--bs-table-accent-bg` is set to a semitransparent color to colorize the background.
+- For each table variant, we generate a `--bs-table-accent-bg` color with the highest contrast depending on that color. For example, the accent color for `.table-primary` is darker while `.table-dark` has a lighter accent color.
+- Text and border colors are generated the same way, and their colors are inherited by default.
+
+Behind the scenes it looks like this:
+
+{{< scss-docs name="table-variant" file="scss/mixins/_table-variants.scss" >}}
+
+## Table borders
+
+### Bordered tables
+
+Add `.table-bordered` for borders on all sides of the table and cells.
+
+{{< table class="table table-bordered" >}}
+
+[Border color utilities]({{< docsref "/utilities/borders#border-color" >}}) can be added to change colors:
+
+{{< table class="table table-bordered border-primary" >}}
+
+### Tables without borders
+
+Add `.table-borderless` for a table without borders.
+
+{{< table class="table table-borderless" >}}
+
+{{< table class="table table-dark table-borderless" >}}
+
+## Small tables
+
+Add `.table-sm` to make any `.table` more compact by cutting all cell `padding` in half.
+
+{{< table class="table table-sm" >}}
+
+{{< table class="table table-dark table-sm" >}}
+
+## Table group dividers
+
+Add a thicker border, darker between table groups—`<thead>`, `<tbody>`, and `<tfoot>`—with `.table-group-divider`. Customize the color by changing the `border-top-color` (which we don't currently provide a utility class for at this time).
+
+{{< example >}}
+<table class="table">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody class="table-group-divider">
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2">Larry the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+</table>
+{{< /example >}}
+
+## Vertical alignment
+
+Table cells of `<thead>` are always vertical aligned to the bottom. Table cells in `<tbody>` inherit their alignment from `<table>` and are aligned to the top by default. Use the [vertical align]({{< docsref "/utilities/vertical-align" >}}) classes to re-align where needed.
+
+<div class="bd-example">
+ <div class="table-responsive">
+ <table class="table align-middle">
+ <thead>
+ <tr>
+ <th scope="col" class="w-25">Heading 1</th>
+ <th scope="col" class="w-25">Heading 2</th>
+ <th scope="col" class="w-25">Heading 3</th>
+ <th scope="col" class="w-25">Heading 4</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
+ <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
+ <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
+ <td>This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.</td>
+ </tr>
+ <tr class="align-bottom">
+ <td>This cell inherits <code>vertical-align: bottom;</code> from the table row</td>
+ <td>This cell inherits <code>vertical-align: bottom;</code> from the table row</td>
+ <td>This cell inherits <code>vertical-align: bottom;</code> from the table row</td>
+ <td>This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.</td>
+ </tr>
+ <tr>
+ <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
+ <td>This cell inherits <code>vertical-align: middle;</code> from the table</td>
+ <td class="align-top">This cell is aligned to the top.</td>
+ <td>This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells.</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+</div>
+
+```html
+<div class="table-responsive">
+ <table class="table align-middle">
+ <thead>
+ <tr>
+ ...
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ ...
+ </tr>
+ <tr class="align-bottom">
+ ...
+ </tr>
+ <tr>
+ <td>...</td>
+ <td>...</td>
+ <td class="align-top">This cell is aligned to the top.</td>
+ <td>...</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+```
+
+## Nesting
+
+Border styles, active styles, and table variants are not inherited by nested tables.
+
+<div class="bd-example">
+<table class="table table-striped table-bordered">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <td colspan="4">
+ <table class="table mb-0">
+ <thead>
+ <tr>
+ <th scope="col">Header</th>
+ <th scope="col">Header</th>
+ <th scope="col">Header</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">A</th>
+ <td>First</td>
+ <td>Last</td>
+ </tr>
+ <tr>
+ <th scope="row">B</th>
+ <td>First</td>
+ <td>Last</td>
+ </tr>
+ <tr>
+ <th scope="row">C</th>
+ <td>First</td>
+ <td>Last</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td>Larry</td>
+ <td>the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+```html
+<table class="table table-striped">
+ <thead>
+ ...
+ </thead>
+ <tbody>
+ ...
+ <tr>
+ <td colspan="4">
+ <table class="table mb-0">
+ ...
+ </table>
+ </td>
+ </tr>
+ ...
+ </tbody>
+</table>
+```
+
+## How nesting works
+
+To prevent _any_ styles from leaking to nested tables, we use the child combinator (`>`) selector in our CSS. Since we need to target all the `td`s and `th`s in the `thead`, `tbody`, and `tfoot`, our selector would look pretty long without it. As such, we use the rather odd looking `.table > :not(caption) > * > *` selector to target all `td`s and `th`s of the `.table`, but none of any potential nested tables.
+
+Note that if you add `<tr>`s as direct children of a table, those `<tr>` will be wrapped in a `<tbody>` by default, thus making our selectors work as intended.
+
+## Anatomy
+
+### Table head
+
+Similar to tables and dark tables, use the modifier classes `.table-light` or `.table-dark` to make `<thead>`s appear light or dark gray.
+
+<div class="bd-example">
+<table class="table">
+ <thead class="table-light">
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td>Larry</td>
+ <td>the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+```html
+<table class="table">
+ <thead class="table-light">
+ ...
+ </thead>
+ <tbody>
+ ...
+ </tbody>
+</table>
+```
+
+<div class="bd-example">
+<table class="table">
+ <thead class="table-dark">
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td>Larry</td>
+ <td>the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+```html
+<table class="table">
+ <thead class="table-dark">
+ ...
+ </thead>
+ <tbody>
+ ...
+ </tbody>
+</table>
+```
+
+### Table foot
+
+<div class="bd-example">
+<table class="table">
+ <thead class="table-light">
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td>Larry</td>
+ <td>the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+ <tfoot>
+ <tr>
+ <td>Footer</td>
+ <td>Footer</td>
+ <td>Footer</td>
+ <td>Footer</td>
+ </tr>
+ </tfoot>
+</table>
+</div>
+
+```html
+<table class="table">
+ <thead>
+ ...
+ </thead>
+ <tbody>
+ ...
+ </tbody>
+ <tfoot>
+ ...
+ </tfoot>
+</table>
+```
+
+### Captions
+
+A `<caption>` functions like a heading for a table. It helps users with screen readers to find a table and understand what it's about and decide if they want to read it.
+
+<div class="bd-example">
+ <table class="table">
+ <caption>List of users</caption>
+ {{< partial "table-content" >}}
+ </table>
+</div>
+
+```html
+<table class="table table-sm">
+ <caption>List of users</caption>
+ <thead>
+ ...
+ </thead>
+ <tbody>
+ ...
+ </tbody>
+</table>
+```
+
+You can also put the `<caption>` on the top of the table with `.caption-top`.
+
+{{< example >}}
+<table class="table caption-top">
+ <caption>List of users</caption>
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td>Larry</td>
+ <td>the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+</table>
+{{< /example >}}
+
+## Responsive tables
+
+Responsive tables allow tables to be scrolled horizontally with ease. Make any table responsive across all viewports by wrapping a `.table` with `.table-responsive`. Or, pick a maximum breakpoint with which to have a responsive table up to by using `.table-responsive{-sm|-md|-lg|-xl|-xxl}`.
+
+{{< callout warning >}}
+##### Vertical clipping/truncation
+
+Responsive tables make use of `overflow-y: hidden`, which clips off any content that goes beyond the bottom or top edges of the table. In particular, this can clip off dropdown menus and other third-party widgets.
+{{< /callout >}}
+
+### Always responsive
+
+Across every breakpoint, use `.table-responsive` for horizontally scrolling tables.
+
+<div class="bd-example">
+ <div class="table-responsive">
+ <table class="table">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+</div>
+
+```html
+<div class="table-responsive">
+ <table class="table">
+ ...
+ </table>
+</div>
+```
+
+### Breakpoint specific
+
+Use `.table-responsive{-sm|-md|-lg|-xl|-xxl}` as needed to create responsive tables up to a particular breakpoint. From that breakpoint and up, the table will behave normally and not scroll horizontally.
+
+**These tables may appear broken until their responsive styles apply at specific viewport widths.**
+
+{{< tables.inline >}}
+{{ range $.Site.Data.breakpoints }}
+{{ if not (eq . "xs") }}
+<div class="bd-example">
+ <div class="table-responsive{{ .abbr }}">
+ <table class="table">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+</div>
+{{ end -}}
+{{- end -}}
+{{< /tables.inline >}}
+
+{{< highlight html >}}
+{{< tables.inline >}}
+{{- range $.Site.Data.breakpoints -}}
+{{- if not (eq . "xs") }}
+<div class="table-responsive{{ .abbr }}">
+ <table class="table">
+ ...
+ </table>
+</div>
+{{ end -}}
+{{- end -}}
+{{< /tables.inline >}}
+{{< /highlight >}}
+
+## Sass
+
+### Variables
+
+{{< scss-docs name="table-variables" file="scss/_variables.scss" >}}
+
+### Loop
+
+{{< scss-docs name="table-loop" file="scss/_variables.scss" >}}
+
+### Customizing
+
+- The factor variables (`$table-striped-bg-factor`, `$table-active-bg-factor` & `$table-hover-bg-factor`) are used to determine the contrast in table variants.
+- Apart from the light & dark table variants, theme colors are lightened by the `$table-bg-scale` variable.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/content/typography.md b/vendor/twbs/bootstrap/site/content/docs/5.3/content/typography.md
index 733013281..733013281 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/content/typography.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/content/typography.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/customize/color-modes.md b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/color-modes.md
new file mode 100644
index 000000000..55d06ee97
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/color-modes.md
@@ -0,0 +1,273 @@
+---
+layout: docs
+title: Color modes
+description: Bootstrap now supports color modes, or themes, as of v5.3.0. Explore our default light color mode and the new dark mode, or create your own using our styles as your template.
+group: customize
+toc: true
+added: "5.3"
+---
+
+## Dark mode
+
+**Bootstrap now supports color modes, starting with dark mode!** With v5.3.0 you can implement your own color mode toggler (see below for an example from Bootstrap's docs) and apply the different color modes as you see fit. We support a light mode (default) and now dark mode. Color modes can be toggled globally on the `<html>` element, or on specific components and elements, thanks to the `data-bs-theme` attribute.
+
+Alternatively, you can also switch to a media query implementation thanks to our color mode mixin—see [the usage section for details](#sass-usage). Heads up though—this eliminates your ability to change themes on a per-component basis as shown below.
+
+## Example
+
+For example, to change the color mode of a dropdown menu, add `data-bs-theme="light"` or `data-bs-theme="dark"` to the parent `.dropdown`. Now, no matter the global color mode, these dropdowns will display with the specified theme value.
+
+{{< example class="d-flex justify-content-between" >}}
+<div class="dropdown" data-bs-theme="light">
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonLight" data-bs-toggle="dropdown" aria-expanded="false">
+ Default dropdown
+ </button>
+ <ul class="dropdown-menu" aria-labelledby="dropdownMenuButtonLight">
+ <li><a class="dropdown-item active" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+</div>
+
+<div class="dropdown" data-bs-theme="dark">
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonDark" data-bs-toggle="dropdown" aria-expanded="false">
+ Dark dropdown
+ </button>
+ <ul class="dropdown-menu" aria-labelledby="dropdownMenuButtonDark">
+ <li><a class="dropdown-item active" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+## How it works
+
+- As shown above, color mode styles are controlled by the `data-bs-theme` attribute. This attribute can be applied to the `<html>` element, or to any other element or Bootstrap component. If applied to the `<html>` element, it will apply to everything. If applied to a component or element, it will be scoped to that specific component or element.
+
+- For each color mode you wish to support, you'll need to add new overrides for the shared global CSS variables. We do this already in our `_root.scss` stylesheet for dark mode, with light mode being the default values. In writing color mode specific styles, use the mixin:
+
+ ```scss
+ // Color mode variables in _root.scss
+ @include color-mode(dark) {
+ // CSS variable overrides here...
+ }
+ ```
+
+- We use a custom `_variables-dark.scss` to power those shared global CSS variable overrides for dark mode. This file isn't required for your own custom color modes, but it's required for our dark mode for two reasons. First, it's better to have a single place to reset global colors. Second, some Sass variables had to be overridden for background images embedded in our CSS for accordions, form components, and more.
+
+## Nesting color modes
+
+Use `data-bs-theme` on a nested element to change the color mode for a group of elements or components. In the example below, we have an outer dark mode with a nested light mode. You'll notice components naturally adapt their appearance, but you may need to add some utilities along the way to utilize the styles specific to each color mode.
+
+For example, despite using `data-bs-theme="dark"` on a random `<div>`, the `<div>` has no `background-color` as it's set on the `<body>`. As such, if you want the `color` and `background-color` to adapt, you'll need to add `.text-body` and `.bg-body`.
+
+{{< example class="p-0" >}}
+<div data-bs-theme="dark" class="p-3 text-body bg-body">
+ <nav aria-label="breadcrumb">
+ <ol class="breadcrumb">
+ <li class="breadcrumb-item"><a href="#">Color modes</a></li>
+ <li class="breadcrumb-item active" aria-current="page">Dark</li>
+ </ol>
+ </nav>
+
+ <p>This should be shown in a <strong>dark</strong> theme at all times.</p>
+
+ <div class="progress mb-4">
+ <div class="progress-bar" role="progressbar" aria-label="Basic example" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
+ </div>
+
+ <div class="dropdown mb-4">
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonDark2" data-bs-toggle="dropdown" aria-expanded="false">
+ Dark dropdown
+ </button>
+ <ul class="dropdown-menu" aria-labelledby="dropdownMenuButtonDark2">
+ <li><a class="dropdown-item active" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+
+ <div data-bs-theme="light" class="p-3 text-body bg-body rounded">
+ <nav aria-label="breadcrumb">
+ <ol class="breadcrumb">
+ <li class="breadcrumb-item"><a href="#">Color modes</a></li>
+ <li class="breadcrumb-item"><a href="#">Dark</a></li>
+ <li class="breadcrumb-item active" aria-current="page">Light</li>
+ </ol>
+ </nav>
+
+ <p>This should be shown in a <strong>light</strong> theme at all times.</p>
+
+ <div class="progress mb-4">
+ <div class="progress-bar" role="progressbar" aria-label="Basic example" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
+ </div>
+
+ <div class="dropdown">
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonLight2" data-bs-toggle="dropdown" aria-expanded="false">
+ Light dropdown
+ </button>
+ <ul class="dropdown-menu" aria-labelledby="dropdownMenuButtonLight2">
+ <li><a class="dropdown-item active" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Usage
+
+### Enable dark mode
+
+Enable the built in dark color mode across your entire project by adding the `data-bs-theme="dark"` attribute to the `<html>` element. This will apply the dark color mode to all components and elements, other than those with a specific `data-bs-theme` attribute applied. Building on the [quick start template]({{< docsref "/getting-started/introduction#quick-start" >}}):
+
+```html
+<!doctype html>
+<html lang="en" data-bs-theme="dark">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap demo</title>
+ <link href="{{< param "cdn.css" >}}" rel="stylesheet" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
+ </head>
+ <body>
+ <h1>Hello, world!</h1>
+ <script src="{{< param "cdn.js_bundle" >}}" integrity="{{< param "cdn.js_bundle_hash" >}}" crossorigin="anonymous"></script>
+ </body>
+</html>
+```
+
+Bootstrap does not yet ship with a built-in color mode picker, but you can use the one from our own documentation if you like. [Learn more in the JavaScript section.](#javascript)
+
+### Building with Sass
+
+Our new dark mode option is available to use for all users of Bootstrap, but it's controlled via data attributes instead of media queries and does not automatically toggle your project's color mode. You can disable our dark mode entirely via Sass by changing `$enable-dark-mode` to `false`.
+
+We use a custom Sass mixin, `color-mode()`, to help you control _how_ color modes are applied. By default, we use a `data` attribute approach, allowing you to create more user-friendly experiences where your visitors can choose to have an automatic dark mode or control their preference (like in our own docs here). This is also an easy and scalable way to add different themes and more custom color modes beyond light and dark.
+
+In case you want to use media queries and only make color modes automatic, you can change the mixin's default type via Sass variable. Consider the following snippet and it's compiled CSS output.
+
+```scss
+$color-mode-type: data;
+
+@include color-mode(dark) {
+ .element {
+ color: var(--bs-primary-text);
+ background-color: var(--bs-primary-bg-subtle);
+ }
+}
+```
+
+Outputs to:
+
+```css
+[data-bs-theme=dark] .element {
+ color: var(--bs-primary-text);
+ background-color: var(--bs-primary-bg-subtle);
+}
+```
+
+And when setting to `media-query`:
+
+```scss
+$color-mode-type: media-query;
+
+@include color-mode(dark) {
+ .element {
+ color: var(--bs-primary-text);
+ background-color: var(--bs-primary-bg-subtle);
+ }
+}
+```
+
+Outputs to:
+
+```css
+@media (prefers-color-scheme: dark) {
+ .element {
+ color: var(--bs-primary-text);
+ background-color: var(--bs-primary-bg-subtle);
+ }
+}
+```
+
+## Custom color modes
+
+While the primary use case for color modes is light and dark mode, custom color modes are also possible. Create your own `data-bs-theme` selector with a custom value as the name of your color mode, then modify our Sass and CSS variables as needed. We opted to create a separate `_variables-dark.scss` stylesheet to house Bootstrap's dark mode specific Sass variables, but that's not required for you.
+
+For example, you can create a "blue theme" with the selector `data-bs-theme="blue"`. In your custom Sass or CSS file, add the new selector and override any global or component CSS variables as needed. If you're using Sass, you can also use Sass's functions within your CSS variable overrides.
+
+{{< scss-docs name="custom-color-mode" file="site/assets/scss/_content.scss" >}}
+
+<div class="bd-example text-body bg-body" data-bs-theme="blue">
+ <div class="h4">Example blue theme</div>
+ <p>Some paragraph text to show how the blue theme might look with written copy.</p>
+
+ <hr class="my-4">
+
+ <div class="dropdown">
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonCustom" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown button
+ </button>
+ <ul class="dropdown-menu" aria-labelledby="dropdownMenuButtonCustom">
+ <li><a class="dropdown-item active" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+</div>
+
+```html
+<div data-bs-theme="blue">
+ ...
+</div>
+```
+
+## JavaScript
+
+To allow visitors or users to toggle color modes, you'll need to create a toggle element to control the `data-bs-theme` attribute on the root element, `<html>`. We've built a toggler in our documentation that initially defers to a user's current system color mode, but provides an option to override that and pick a specific color mode.
+
+Here's a look at the JavaScript that powers it. Feel free to inspect our own documentation navbar to see how it's implemented using HTML and CSS from our own components. Note that if you decide to use media queries for your color modes, your JavaScript may need to be modified or removed if you prefer an implicit control.
+
+{{< example lang="js" show_preview="false" >}}
+{{< js.inline >}}
+{{- readFile (path.Join "site/static/docs" .Site.Params.docs_version "assets/js/color-modes.js") -}}
+{{< /js.inline >}}
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+Dozens of root level CSS variables are repeated as overrides for dark mode. These are scoped to the color mode selector, which defaults to `data-bs-theme` but [can be configured](#sass-usage) to use a `prefers-color-scheme` media query. Use these variables as a guideline for generating your own new color modes.
+
+{{< scss-docs name="root-dark-mode-vars" file="scss/_root.scss" >}}
+
+### Sass variables
+
+CSS variables for our dark color mode are partially generated from dark mode specific Sass variables in `_variables-dark.scss`. This also includes some custom overrides for changing the colors of embedded SVGs used throughout our components.
+
+{{< scss-docs name="sass-dark-mode-vars" file="scss/_variables-dark.scss" >}}
+
+### Sass mixin
+
+Styles for dark mode, and any custom color modes you create, can be scoped appropriately to the `data-bs-theme` attribute selector or media query with the customizable `color-mode()` mixin. See the [Sass usage section](#sass-usage) for more details.
+
+{{< scss-docs name="color-mode-mixin" file="scss/mixins/_color-mode.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/customize/color.md b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/color.md
new file mode 100644
index 000000000..fd4a7f37a
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/color.md
@@ -0,0 +1,509 @@
+---
+layout: docs
+title: Color
+description: Bootstrap is supported by an extensive color system that themes our styles and components. This enables more comprehensive customization and extension for any project.
+group: customize
+toc: true
+---
+
+## Colors
+
+{{< added-in "5.3.0" >}}
+
+Bootstrap's color palette has continued to expand and become more nuanced in v5.3.0. We've added new variables for `secondary` and `tertiary` text and background colors, plus `{color}-bg-subtle`, `{color}-border-subtle`, and `{color}-text` for our theme colors. These new colors are available through Sass and CSS variables (but not our color maps or utility classes) with the express goal of making it easier to customize across multiple colors modes like light and dark. These new variables are globally set on `:root` and are adapted for our new dark color mode while our original theme colors remain unchanged.
+
+Colors ending in `-rgb` provide the `red, green, blue` values for use in `rgb()` and `rgba()` color modes. For example, `rgba(var(--bs-secondary-bg-rgb), .5)`.
+
+{{< callout warning>}}
+**Heads up!** There's some potential confusion with our new secondary and tertiary colors, and our existing secondary theme color, as well as our light and dark theme colors. Expect this to be ironed out in v6.
+{{< /callout >}}
+
+<table class="table table-swatches">
+ <thead>
+ <tr>
+ <th style="width: 340px;">Description</th>
+ <th style="width: 200px;" class="ps-0">Swatch</th>
+ <th>Variables</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td rowspan="2">
+ {{< markdown >}}**Body —** Default foreground (color) and background, including components.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2" style="background-color: var(--bs-body-color);">&nbsp;</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-body-color`<br>`--bs-body-color-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="p-3 rounded-2 border" style="background-color: var(--bs-body-bg);">&nbsp;</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-body-bg`<br>`--bs-body-bg-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="2">
+ {{< markdown >}}**Secondary —** Use the `color` option for lighter text. Use the `bg` option for dividers and to indicate disabled component states.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2" style="background-color: var(--bs-secondary-color);">&nbsp;</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-secondary-color`<br>`--bs-secondary-color-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="p-3 rounded-2 border" style="background-color: var(--bs-secondary-bg);">&nbsp;</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-secondary-bg`<br>`--bs-secondary-bg-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="2">
+ {{< markdown >}}**Tertiary —** Use the `color` option for even lighter text. Use the `bg` option to style backgrounds for hover states, accents, and wells.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2" style="background-color: var(--bs-tertiary-color);">&nbsp;</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-tertiary-color`<br>`--bs-tertiary-color-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="p-3 rounded-2 border" style="background-color: var(--bs-tertiary-bg);">&nbsp;</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-tertiary-bg`<br>`--bs-tertiary-bg-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ {{< markdown >}}**Emphasis —** For higher contrast text. Not applicable for backgrounds.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2" style="background-color: var(--bs-emphasis-color);">&nbsp;</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-emphasis-color`<br>`--bs-emphasis-color-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ {{< markdown >}}**Border —** For component borders, dividers, and rules. Use `--bs-border-color-translucent` to blend with backgrounds with an `rgba()` value.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2" style="background-color: var(--bs-border-color);">&nbsp;</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-border-color`<br>`--bs-border-color-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="4">
+ {{< markdown >}}**Primary —** Main theme color, used for hyperlinks, focus styles, and component and form active states.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2 text-bg-primary">Primary</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-primary`<br>`--bs-primary-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2 border" style="background-color: var(--bs-primary-bg-subtle); --bs-border-color: var(--bs-primary-border-subtle); color: var(--bs-primary-text);">Background subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-primary-bg-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-primary-border-subtle); color: var(--bs-primary-text);">Border subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-primary-border-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-primary-text); color: var(--bs-body-bg);">Text</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-primary-text`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="4">
+ {{< markdown >}}**Success —** Theme color used for positive or successful actions and information.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2 text-bg-success">Success</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-success`<br>`--bs-success-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2 border" style="background-color: var(--bs-success-bg-subtle); --bs-border-color: var(--bs-success-border-subtle); color: var(--bs-success-text);">Background subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-success-bg-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-success-border-subtle); color: var(--bs-success-text);">Border subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-success-border-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-success-text); color: var(--bs-body-bg);">Text</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-success-text`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="4">
+ {{< markdown >}}**Danger —** Theme color used for errors and dangerous actions.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2 text-bg-danger">Danger</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-danger`<br>`--bs-danger-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2 border" style="background-color: var(--bs-danger-bg-subtle); --bs-border-color: var(--bs-danger-border-subtle); color: var(--bs-danger-text);">Background subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-danger-bg-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-danger-border-subtle); color: var(--bs-danger-text);">Border subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-danger-border-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-danger-text); color: var(--bs-body-bg);">Text</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-danger-text`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="4">
+ {{< markdown >}}**Warning —** Theme color used for non-destructive warning messages.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2 text-bg-warning">Warning</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-warning`<br>`--bs-warning-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2 border" style="background-color: var(--bs-warning-bg-subtle); --bs-border-color: var(--bs-warning-border-subtle); color: var(--bs-warning-text);">Background subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-warning-bg-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-warning-border-subtle); color: var(--bs-warning-text);">Border subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-warning-border-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-warning-text); color: var(--bs-body-bg);">Text</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-warning-text`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="4">
+ {{< markdown >}}**Info —** Theme color used for neutral and informative content.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2 text-bg-info">Info</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-info`<br>`--bs-info-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2 border" style="background-color: var(--bs-info-bg-subtle); --bs-border-color: var(--bs-info-border-subtle); color: var(--bs-info-text);">Background subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-info-bg-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-info-border-subtle); color: var(--bs-info-text);">Border subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-info-border-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 h-100 rounded-2" style="background-color: var(--bs-info-text); color: var(--bs-body-bg);">Text</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-info-text`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="4">
+ {{< markdown >}}**Light —** Additional theme option for less contrasting colors.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2 text-bg-light border">Light</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-light`<br>`--bs-light-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2 border" style="background-color: var(--bs-light-bg-subtle); --bs-border-color: var(--bs-light-border-subtle); color: var(--bs-light-text);">Background subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-light-bg-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-light-border-subtle); color: var(--bs-light-text);">Border subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-light-border-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 h-100 rounded-2" style="background-color: var(--bs-light-text); color: var(--bs-body-bg);">Text</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-light-text`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td rowspan="4">
+ {{< markdown >}}**Dark —** Additional theme option for higher contrasting colors.{{< /markdown >}}
+ </td>
+ <td class="ps-0">
+ <div class="p-3 rounded-2 text-bg-dark border">Dark</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-dark`<br>`--bs-dark-rgb`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2 border" style="background-color: var(--bs-dark-bg-subtle); --bs-border-color: var(--bs-dark-border-subtle); color: var(--bs-dark-text);">Background subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-dark-bg-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 rounded-2" style="background-color: var(--bs-dark-border-subtle); color: var(--bs-dark-text);">Border subtle</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-dark-border-subtle`{{< /markdown >}}
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div class="px-3 py-2 h-100 rounded-2" style="background-color: var(--bs-dark-text); color: var(--bs-body-bg);">Text</div>
+ </td>
+ <td>
+ {{< markdown >}}`--bs-dark-text`{{< /markdown >}}
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+### Using the new colors
+
+These new colors are accessible via CSS variables and utility classes—like `--bs-primary-bg-subtle` and `.bg-primary-subtle`—allowing you to compose your own CSS rules with the variables, or to quickly apply styles via classes. The utilities are built with the color's associated CSS variables, and since we customize those CSS variables for dark mode, they are also adaptive to color mode by default.
+
+{{< example >}}
+<div class="p-3 text-primary-emphasis bg-primary-subtle border border-primary-subtle rounded-3">
+ Example element with utilities
+</div>
+{{< /example >}}
+
+### Theme colors
+
+We use a subset of all colors to create a smaller color palette for generating color schemes, also available as Sass variables and a Sass map in Bootstrap's `scss/_variables.scss` file.
+
+<div class="row">
+ {{< theme-colors.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <div class="col-md-4">
+ <div class="p-3 mb-3 text-bg-{{ .name }} rounded-3">{{ .name | title }}</div>
+ </div>
+ {{ end -}}
+ {{< /theme-colors.inline >}}
+</div>
+
+All these colors are available as a Sass map, `$theme-colors`.
+
+{{< scss-docs name="theme-colors-map" file="scss/_variables.scss" >}}
+
+Check out [our Sass maps and loops docs]({{< docsref "/customize/sass#maps-and-loops" >}}) for how to modify these colors.
+
+### All colors
+
+All Bootstrap colors are available as Sass variables and a Sass map in `scss/_variables.scss` file. To avoid increased file sizes, we don't create text or background color classes for each of these variables. Instead, we choose a subset of these colors for a [theme palette](#theme-colors).
+
+Be sure to monitor contrast ratios as you customize colors. As shown below, we've added three contrast ratios to each of the main colors—one for the swatch's current colors, one for against white, and one for against black.
+
+<div class="row font-monospace">
+ {{< theme-colors.inline >}}
+ {{- range $color := $.Site.Data.colors }}
+ {{- if (and (not (eq $color.name "white")) (not (eq $color.name "gray")) (not (eq $color.name "gray-dark"))) }}
+ <div class="col-md-4 mb-3">
+ <div class="p-3 mb-2 position-relative swatch-{{ $color.name }}">
+ <strong class="d-block">${{ $color.name }}</strong>
+ {{ $color.hex }}
+ </div>
+ {{ range (seq 100 100 900) }}
+ <div class="p-3 bd-{{ $color.name }}-{{ . }}">${{ $color.name }}-{{ . }}</div>
+ {{ end }}
+ </div>
+ {{ end -}}
+ {{ end -}}
+
+ <div class="col-md-4 mb-3">
+ <div class="p-3 mb-2 position-relative swatch-gray-500">
+ <strong class="d-block">$gray-500</strong>
+ #adb5bd
+ </div>
+ {{- range $.Site.Data.grays }}
+ <div class="p-3 bd-gray-{{ .name }}">$gray-{{ .name }}</div>
+ {{ end -}}
+ </div>
+ {{< /theme-colors.inline >}}
+
+ <div class="col-md-4 mb-3">
+ <div class="p-3 mb-2 bd-black text-white">
+ <strong class="d-block">$black</strong>
+ #000
+ </div>
+ <div class="p-3 mb-2 bd-white border">
+ <strong class="d-block">$white</strong>
+ #fff
+ </div>
+ </div>
+</div>
+
+### Notes on Sass
+
+Sass cannot programmatically generate variables, so we manually created variables for every tint and shade ourselves. We specify the midpoint value (e.g., `$blue-500`) and use custom color functions to tint (lighten) or shade (darken) our colors via Sass's `mix()` color function.
+
+Using `mix()` is not the same as `lighten()` and `darken()`—the former blends the specified color with white or black, while the latter only adjusts the lightness value of each color. The result is a much more complete suite of colors, as [shown in this CodePen demo](https://codepen.io/emdeoh/pen/zYOQOPB).
+
+Our `tint-color()` and `shade-color()` functions use `mix()` alongside our `$theme-color-interval` variable, which specifies a stepped percentage value for each mixed color we produce. See the `scss/_functions.scss` and `scss/_variables.scss` files for the full source code.
+
+## Color Sass maps
+
+Bootstrap's source Sass files include three maps to help you quickly and easily loop over a list of colors and their hex values.
+
+- `$colors` lists all our available base (`500`) colors
+- `$theme-colors` lists all semantically named theme colors (shown below)
+- `$grays` lists all tints and shades of gray
+
+Within `scss/_variables.scss`, you'll find Bootstrap's color variables and Sass map. Here's an example of the `$colors` Sass map:
+
+{{< scss-docs name="colors-map" file="scss/_variables.scss" >}}
+
+Add, remove, or modify values within the map to update how they're used in many other components. Unfortunately at this time, not _every_ component utilizes this Sass map. Future updates will strive to improve upon this. Until then, plan on making use of the `${color}` variables and this Sass map.
+
+### Example
+
+Here's how you can use these in your Sass:
+
+```scss
+.alpha { color: $purple; }
+.beta {
+ color: $yellow-300;
+ background-color: $indigo-900;
+}
+```
+
+[Color]({{< docsref "/utilities/colors" >}}) and [background]({{< docsref "/utilities/background" >}}) utility classes are also available for setting `color` and `background-color` using the `500` color values.
+
+## Generating utilities
+
+{{< added-in "5.1.0" >}}
+
+Bootstrap doesn't include `color` and `background-color` utilities for every color variable, but you can generate these yourself with our [utility API]({{< docsref "/utilities/api" >}}) and our extended Sass maps added in v5.1.0.
+
+1. To start, make sure you've imported our functions, variables, mixins, and utilities.
+2. Use our `map-merge-multiple()` function to quickly merge multiple Sass maps together in a new map.
+3. Merge this new combined map to extend any utility with a `{color}-{level}` class name.
+
+Here's an example that generates text color utilities (e.g., `.text-purple-500`) using the above steps.
+
+```scss
+@import "bootstrap/scss/functions";
+@import "bootstrap/scss/variables";
+@import "bootstrap/scss/maps";
+@import "bootstrap/scss/mixins";
+@import "bootstrap/scss/utilities";
+
+$all-colors: map-merge-multiple($blues, $indigos, $purples, $pinks, $reds, $oranges, $yellows, $greens, $teals, $cyans);
+
+$utilities: map-merge(
+ $utilities,
+ (
+ "color": map-merge(
+ map-get($utilities, "color"),
+ (
+ values: map-merge(
+ map-get(map-get($utilities, "color"), "values"),
+ (
+ $all-colors
+ ),
+ ),
+ ),
+ ),
+ )
+);
+
+@import "bootstrap/scss/utilities/api";
+```
+
+This will generate new `.text-{color}-{level}` utilities for every color and level. You can do the same for any other utility and property as well.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/components.md b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/components.md
index b512a9036..b512a9036 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/components.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/components.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/customize/css-variables.md b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/css-variables.md
new file mode 100644
index 000000000..05c77df57
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/css-variables.md
@@ -0,0 +1,64 @@
+---
+layout: docs
+title: CSS variables
+description: Use Bootstrap's CSS custom properties for fast and forward-looking design and development.
+group: customize
+toc: true
+---
+
+Bootstrap includes many [CSS custom properties (variables)](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) in its compiled CSS for real-time customization without the need to recompile Sass. These provide easy access to commonly used values like our theme colors, breakpoints, and primary font stacks when working in your browser's inspector, a code sandbox, or general prototyping.
+
+**All our custom properties are prefixed with `bs-`** to avoid conflicts with third party CSS.
+
+## Root variables
+
+Here are the variables we include (note that the `:root` is required) that can be accessed anywhere Bootstrap's CSS is loaded. They're located in our `_root.scss` file and included in our compiled dist files.
+
+### Default
+
+These CSS variables are available everywhere, regardless of color mode.
+
+```css
+{{< root.inline >}}
+{{- $css := readFile "dist/css/bootstrap.css" -}}
+{{- $match := findRE ":root {([^}]*)}" $css 1 -}}
+
+{{- if (eq (len $match) 0) -}}
+{{- errorf "Got no matches for :root in %q!" $.Page.Path -}}
+{{- end -}}
+
+{{- index $match 0 -}}
+
+{{< /root.inline >}}
+```
+
+## Component variables
+
+Bootstrap 5 is increasingly making use of custom properties as local variables for various components. This way we reduce our compiled CSS, ensure styles aren't inherited in places like nested tables, and allow some basic restyling and extending of Bootstrap components after Sass compilation.
+
+Have a look at our table documentation for some [insight into how we're using CSS variables]({{< docsref "/content/tables#how-do-the-variants-and-accented-tables-work" >}}). Our [navbars also use CSS variables]({{< docsref "/components/navbar#css" >}}) as of v5.2.0. We're also using CSS variables across our grids—primarily for gutters the [new opt-in CSS grid]({{< docsref "/layout/css-grid" >}})—with more component usage coming in the future.
+
+Whenever possible, we'll assign CSS variables at the base component level (e.g., `.navbar` for navbar and its sub-components). This reduces guessing on where and how to customize, and allows for easy modifications by our team in future updates.
+
+## Prefix
+
+Most CSS variables use a prefix to avoid collisions with your own codebase. This prefix is in addition to the `--` that's required on every CSS variable.
+
+Customize the prefix via the `$prefix` Sass variable. By default, it's set to `bs-` (note the trailing dash).
+
+## Examples
+
+CSS variables offer similar flexibility to Sass's variables, but without the need for compilation before being served to the browser. For example, here we're resetting our page's font and link styles with CSS variables.
+
+```css
+body {
+ font: 1rem/1.5 var(--bs-font-sans-serif);
+}
+a {
+ color: var(--bs-blue);
+}
+```
+
+## Grid breakpoints
+
+While we include our grid breakpoints as CSS variables (except for `xs`), be aware that **CSS variables do not work in media queries**. This is by design in the CSS spec for variables, but may change in coming years with support for `env()` variables. Check out [this Stack Overflow answer](https://stackoverflow.com/a/47212942) for some helpful links. In the meantime, you can use these variables in other CSS situations, as well as in your JavaScript.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/optimize.md b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/optimize.md
index e618ce23a..e618ce23a 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/customize/optimize.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/optimize.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/customize/options.md b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/options.md
new file mode 100644
index 000000000..b5c4fc392
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/options.md
@@ -0,0 +1,32 @@
+---
+layout: docs
+title: Options
+description: Quickly customize Bootstrap with built-in variables to easily toggle global CSS preferences for controlling style and behavior.
+group: customize
+---
+
+Customize Bootstrap with our built-in custom variables file and easily toggle global CSS preferences with new `$enable-*` Sass variables. Override a variable's value and recompile with `npm run test` as needed.
+
+You can find and customize these variables for key global options in Bootstrap's `scss/_variables.scss` file.
+
+{{< bs-table "table table-options" >}}
+| Variable | Values | Description |
+| ------------------------------ | ---------------------------------- | -------------------------------------------------------------------------------------- |
+| `$spacer` | `1rem` (default), or any value > 0 | Specifies the default spacer value to programmatically generate our [spacer utilities]({{< docsref "/utilities/spacing" >}}). |
+| `$enable-dark-mode` | `true` (default) or `false` | Enables built-in [dark mode support]({{< docsref "/customize/color-modes#dark-mode" >}}) across the project and its components. |
+| `$enable-rounded` | `true` (default) or `false` | Enables predefined `border-radius` styles on various components. |
+| `$enable-shadows` | `true` or `false` (default) | Enables predefined decorative `box-shadow` styles on various components. Does not affect `box-shadow`s used for focus states. |
+| `$enable-gradients` | `true` or `false` (default) | Enables predefined gradients via `background-image` styles on various components. |
+| `$enable-transitions` | `true` (default) or `false` | Enables predefined `transition`s on various components. |
+| `$enable-reduced-motion` | `true` (default) or `false` | Enables the [`prefers-reduced-motion` media query]({{< docsref "/getting-started/accessibility#reduced-motion" >}}), which suppresses certain animations/transitions based on the users' browser/operating system preferences. |
+| `$enable-grid-classes` | `true` (default) or `false` | Enables the generation of CSS classes for the grid system (e.g. `.row`, `.col-md-1`, etc.). |
+| `$enable-container-classes` | `true` (default) or `false` | Enables the generation of CSS classes for layout containers. (New in v5.2.0) |
+| `$enable-caret` | `true` (default) or `false` | Enables pseudo element caret on `.dropdown-toggle`. |
+| `$enable-button-pointers` | `true` (default) or `false` | Add "hand" cursor to non-disabled button elements. |
+| `$enable-rfs` | `true` (default) or `false` | Globally enables [RFS]({{< docsref "/getting-started/rfs" >}}). |
+| `$enable-validation-icons` | `true` (default) or `false` | Enables `background-image` icons within textual inputs and some custom forms for validation states. |
+| `$enable-negative-margins` | `true` or `false` (default) | Enables the generation of [negative margin utilities]({{< docsref "/utilities/spacing#negative-margin" >}}). |
+| `$enable-deprecation-messages` | `true` (default) or `false` | Set to `false` to hide warnings when using any of the deprecated mixins and functions that are planned to be removed in `v6`. |
+| `$enable-important-utilities` | `true` (default) or `false` | Enables the `!important` suffix in utility classes. |
+| `$enable-smooth-scroll` | `true` (default) or `false` | Applies `scroll-behavior: smooth` globally, except for users asking for reduced motion through [`prefers-reduced-motion` media query]({{< docsref "/getting-started/accessibility#reduced-motion" >}}) |
+{{< /bs-table >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/customize/overview.md b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/overview.md
new file mode 100644
index 000000000..25c31bdb6
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/overview.md
@@ -0,0 +1,51 @@
+---
+layout: docs
+title: Customize
+description: Learn how to theme, customize, and extend Bootstrap with Sass, a boatload of global options, an expansive color system, and more.
+group: customize
+toc: false
+aliases: "/docs/5.3/customize/"
+sections:
+ - title: Sass
+ description: Utilize our source Sass files to take advantage of variables, maps, mixins, and functions.
+ - title: Options
+ description: Customize Bootstrap with built-in variables to easily toggle global CSS preferences.
+ - title: Color
+ description: Learn about and customize the color systems that support the entire toolkit.
+ - title: Components
+ description: Learn how we build nearly all our components responsively and with base and modifier classes.
+ - title: CSS variables
+ description: Use Bootstrap's CSS custom properties for fast and forward-looking design and development.
+ - title: Optimize
+ description: Keep your projects lean, responsive, and maintainable so you can deliver the best experience.
+---
+
+## Overview
+
+There are multiple ways to customize Bootstrap. Your best path can depend on your project, the complexity of your build tools, the version of Bootstrap you're using, browser support, and more.
+
+Our two preferred methods are:
+
+1. Using Bootstrap [via package manager]({{< docsref "/getting-started/download#package-managers" >}}) so you can use and extend our source files.
+2. Using Bootstrap's compiled distribution files or [jsDelivr]({{< docsref "/getting-started/download#cdn-via-jsdelivr" >}}) so you can add onto or override Bootstrap's styles.
+
+While we cannot go into details here on how to use every package manager, we can give some guidance on [using Bootstrap with your own Sass compiler]({{< docsref "/customize/sass" >}}).
+
+For those who want to use the distribution files, review the [getting started page]({{< docsref "/getting-started/introduction" >}}) for how to include those files and an example HTML page. From there, consult the docs for the layout, components, and behaviors you'd like to use.
+
+As you familiarize yourself with Bootstrap, continue exploring this section for more details on how to utilize our global options, making use of and changing our color system, how we build our components, how to use our growing list of CSS custom properties, and how to optimize your code when building with Bootstrap.
+
+## CSPs and embedded SVGs
+
+Several Bootstrap components include embedded SVGs in our CSS to style components consistently and easily across browsers and devices. **For organizations with more strict <abbr title="Content Security Policy">CSP</abbr> configurations**, we've documented all instances of our embedded SVGs (all of which are applied via `background-image`) so you can more thoroughly review your options.
+
+- [Accordion]({{< docsref "/components/accordion" >}})
+- [Carousel controls]({{< docsref "/components/carousel#with-controls" >}})
+- [Close button]({{< docsref "/components/close-button" >}}) (used in alerts and modals)
+- [Form checkboxes and radio buttons]({{< docsref "/forms/checks-radios" >}})
+- [Form switches]({{< docsref "/forms/checks-radios#switches" >}})
+- [Form validation icons]({{< docsref "/forms/validation#server-side" >}})
+- [Navbar toggle buttons]({{< docsref "/components/navbar#responsive-behaviors" >}})
+- [Select menus]({{< docsref "/forms/select" >}})
+
+Based on [community conversation](https://github.com/twbs/bootstrap/issues/25394), some options for addressing this in your own codebase include [replacing the URLs with locally hosted assets]({{< docsref "/getting-started/webpack#extracting-svg-files" >}}), removing the images and using inline images (not possible in all components), and modifying your CSP. Our recommendation is to carefully review your own security policies and decide on the best path forward, if necessary.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/customize/sass.md b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/sass.md
new file mode 100644
index 000000000..6da6bbe2b
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/customize/sass.md
@@ -0,0 +1,314 @@
+---
+layout: docs
+title: Sass
+description: Utilize our source Sass files to take advantage of variables, maps, mixins, and functions to help you build faster and customize your project.
+group: customize
+toc: true
+---
+
+Utilize our source Sass files to take advantage of variables, maps, mixins, and more.
+
+## File structure
+
+Whenever possible, avoid modifying Bootstrap's core files. For Sass, that means creating your own stylesheet that imports Bootstrap so you can modify and extend it. Assuming you're using a package manager like npm, you'll have a file structure that looks like this:
+
+```text
+your-project/
+├── scss
+│ └── custom.scss
+└── node_modules/
+ └── bootstrap
+ ├── js
+ └── scss
+```
+
+If you've downloaded our source files and aren't using a package manager, you'll want to manually create something similar to that structure, keeping Bootstrap's source files separate from your own.
+
+```text
+your-project/
+├── scss
+│ └── custom.scss
+└── bootstrap/
+ ├── js
+ └── scss
+```
+
+## Importing
+
+In your `custom.scss`, you'll import Bootstrap's source Sass files. You have two options: include all of Bootstrap, or pick the parts you need. We encourage the latter, though be aware there are some requirements and dependencies across our components. You also will need to include some JavaScript for our plugins.
+
+```scss
+// Custom.scss
+// Option A: Include all of Bootstrap
+
+// Include any default variable overrides here (though functions won't be available)
+
+@import "../node_modules/bootstrap/scss/bootstrap";
+
+// Then add additional custom code here
+```
+
+```scss
+// Custom.scss
+// Option B: Include parts of Bootstrap
+
+// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc)
+@import "../node_modules/bootstrap/scss/functions";
+
+// 2. Include any default variable overrides here
+
+// 3. Include remainder of required Bootstrap stylesheets (including any separate color mode stylesheets)
+@import "../node_modules/bootstrap/scss/variables";
+@import "../node_modules/bootstrap/scss/variables-dark";
+
+// 4. Include any default map overrides here
+
+// 5. Include remainder of required parts
+@import "../node_modules/bootstrap/scss/maps";
+@import "../node_modules/bootstrap/scss/mixins";
+@import "../node_modules/bootstrap/scss/root";
+
+// 6. Optionally include any other parts as needed
+@import "../node_modules/bootstrap/scss/utilities";
+@import "../node_modules/bootstrap/scss/reboot";
+@import "../node_modules/bootstrap/scss/type";
+@import "../node_modules/bootstrap/scss/images";
+@import "../node_modules/bootstrap/scss/containers";
+@import "../node_modules/bootstrap/scss/grid";
+@import "../node_modules/bootstrap/scss/helpers";
+
+// 7. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss`
+@import "../node_modules/bootstrap/scss/utilities/api";
+
+// 8. Add additional custom code here
+```
+
+With that setup in place, you can begin to modify any of the Sass variables and maps in your `custom.scss`. You can also start to add parts of Bootstrap under the `// Optional` section as needed. We suggest using the full import stack from our `bootstrap.scss` file as your starting point.
+
+## Variable defaults
+
+Every Sass variable in Bootstrap includes the `!default` flag allowing you to override the variable's default value in your own Sass without modifying Bootstrap's source code. Copy and paste variables as needed, modify their values, and remove the `!default` flag. If a variable has already been assigned, then it won't be re-assigned by the default values in Bootstrap.
+
+You will find the complete list of Bootstrap's variables in `scss/_variables.scss`. Some variables are set to `null`, these variables don't output the property unless they are overridden in your configuration.
+
+Variable overrides must come after our functions are imported, but before the rest of the imports.
+
+Here's an example that changes the `background-color` and `color` for the `<body>` when importing and compiling Bootstrap via npm:
+
+```scss
+// Required
+@import "../node_modules/bootstrap/scss/functions";
+
+// Default variable overrides
+$body-bg: #000;
+$body-color: #111;
+
+// Required
+@import "../node_modules/bootstrap/scss/variables";
+@import "../node_modules/bootstrap/scss/variables-dark";
+@import "../node_modules/bootstrap/scss/maps";
+@import "../node_modules/bootstrap/scss/mixins";
+@import "../node_modules/bootstrap/scss/root";
+
+// Optional Bootstrap components here
+@import "../node_modules/bootstrap/scss/reboot";
+@import "../node_modules/bootstrap/scss/type";
+// etc
+```
+
+Repeat as necessary for any variable in Bootstrap, including the global options below.
+
+{{< callout info >}}
+{{< partial "callouts/info-npm-starter.md" >}}
+{{< /callout >}}
+
+## Maps and loops
+
+Bootstrap includes a handful of Sass maps, key value pairs that make it easier to generate families of related CSS. We use Sass maps for our colors, grid breakpoints, and more. Just like Sass variables, all Sass maps include the `!default` flag and can be overridden and extended.
+
+Some of our Sass maps are merged into empty ones by default. This is done to allow easy expansion of a given Sass map, but comes at the cost of making _removing_ items from a map slightly more difficult.
+
+### Modify map
+
+All variables in the `$theme-colors` map are defined as standalone variables. To modify an existing color in our `$theme-colors` map, add the following to your custom Sass file:
+
+```scss
+$primary: #0074d9;
+$danger: #ff4136;
+```
+
+Later on, these variables are set in Bootstrap's `$theme-colors` map:
+
+```scss
+$theme-colors: (
+ "primary": $primary,
+ "danger": $danger
+);
+```
+
+### Add to map
+
+Add new colors to `$theme-colors`, or any other map, by creating a new Sass map with your custom values and merging it with the original map. In this case, we'll create a new `$custom-colors` map and merge it with `$theme-colors`.
+
+```scss
+// Create your own map
+$custom-colors: (
+ "custom-color": #900
+);
+
+// Merge the maps
+$theme-colors: map-merge($theme-colors, $custom-colors);
+```
+
+### Remove from map
+
+To remove colors from `$theme-colors`, or any other map, use `map-remove`. Be aware you must insert `$theme-colors` between our requirements just after its definition in `variables` and before its usage in `maps`:
+
+```scss
+// Required
+@import "../node_modules/bootstrap/scss/functions";
+@import "../node_modules/bootstrap/scss/variables";
+@import "../node_modules/bootstrap/scss/variables-dark";
+
+$theme-colors: map-remove($theme-colors, "info", "light", "dark");
+
+@import "../node_modules/bootstrap/scss/maps";
+@import "../node_modules/bootstrap/scss/mixins";
+@import "../node_modules/bootstrap/scss/root";
+
+// Optional
+@import "../node_modules/bootstrap/scss/reboot";
+@import "../node_modules/bootstrap/scss/type";
+// etc
+```
+
+## Required keys
+
+Bootstrap assumes the presence of some specific keys within Sass maps as we used and extend these ourselves. As you customize the included maps, you may encounter errors where a specific Sass map's key is being used.
+
+For example, we use the `primary`, `success`, and `danger` keys from `$theme-colors` for links, buttons, and form states. Replacing the values of these keys should present no issues, but removing them may cause Sass compilation issues. In these instances, you'll need to modify the Sass code that makes use of those values.
+
+## Functions
+
+### Colors
+
+Next to the [Sass maps]({{< docsref "/customize/color#color-sass-maps" >}}) we have, theme colors can also be used as standalone variables, like `$primary`.
+
+```scss
+.custom-element {
+ color: $gray-100;
+ background-color: $dark;
+}
+```
+
+You can lighten or darken colors with Bootstrap's `tint-color()` and `shade-color()` functions. These functions will mix colors with black or white, unlike Sass' native `lighten()` and `darken()` functions which will change the lightness by a fixed amount, which often doesn't lead to the desired effect.
+
+{{< scss-docs name="color-functions" file="scss/_functions.scss" >}}
+
+In practice, you'd call the function and pass in the color and weight parameters.
+
+```scss
+.custom-element {
+ color: tint-color($primary, 10%);
+}
+
+.custom-element-2 {
+ color: shade-color($danger, 30%);
+}
+```
+
+### Color contrast
+
+In order to meet the [Web Content Accessibility Guidelines (WCAG)](https://www.w3.org/TR/WCAG/) contrast requirements, authors **must** provide a minimum [text color contrast of 4.5:1](https://www.w3.org/TR/WCAG/#contrast-minimum) and a minimum [non-text color contrast of 3:1](https://www.w3.org/TR/WCAG/#non-text-contrast), with very few exceptions.
+
+To help with this, we included the `color-contrast` function in Bootstrap. It uses the [WCAG contrast ratio algorithm](https://www.w3.org/TR/WCAG/#dfn-contrast-ratio) for calculating contrast thresholds based on [relative luminance](https://www.w3.org/TR/WCAG/#dfn-relative-luminance) in an `sRGB` color space to automatically return a light (`#fff`), dark (`#212529`) or black (`#000`) contrast color based on the specified base color. This function is especially useful for mixins or loops where you're generating multiple classes.
+
+For example, to generate color swatches from our `$theme-colors` map:
+
+```scss
+@each $color, $value in $theme-colors {
+ .swatch-#{$color} {
+ color: color-contrast($value);
+ }
+}
+```
+
+It can also be used for one-off contrast needs:
+
+```scss
+.custom-element {
+ color: color-contrast(#000); // returns `color: #fff`
+}
+```
+
+You can also specify a base color with our color map functions:
+
+```scss
+.custom-element {
+ color: color-contrast($dark); // returns `color: #fff`
+}
+```
+
+### Escape SVG
+
+We use the `escape-svg` function to escape the `<`, `>` and `#` characters for SVG background images. When using the `escape-svg` function, data URIs must be quoted.
+
+### Add and Subtract functions
+
+We use the `add` and `subtract` functions to wrap the CSS `calc` function. The primary purpose of these functions is to avoid errors when a "unitless" `0` value is passed into a `calc` expression. Expressions like `calc(10px - 0)` will return an error in all browsers, despite being mathematically correct.
+
+Example where the calc is valid:
+
+```scss
+$border-radius: .25rem;
+$border-width: 1px;
+
+.element {
+ // Output calc(.25rem - 1px) is valid
+ border-radius: calc($border-radius - $border-width);
+}
+
+.element {
+ // Output the same calc(.25rem - 1px) as above
+ border-radius: subtract($border-radius, $border-width);
+}
+```
+
+Example where the calc is invalid:
+
+```scss
+$border-radius: .25rem;
+$border-width: 0;
+
+.element {
+ // Output calc(.25rem - 0) is invalid
+ border-radius: calc($border-radius - $border-width);
+}
+
+.element {
+ // Output .25rem
+ border-radius: subtract($border-radius, $border-width);
+}
+```
+
+## Mixins
+
+Our `scss/mixins/` directory has a ton of mixins that power parts of Bootstrap and can also be used across your own project.
+
+### Color schemes
+
+A shorthand mixin for the `prefers-color-scheme` media query is available with support for `light`, `dark`, and custom color schemes. See [the color modes documentation]({{< docsref "/customize/color-modes" >}}) for information on our color mode mixin.
+
+{{< scss-docs name="mixin-color-scheme" file="scss/mixins/_color-scheme.scss" >}}
+
+```scss
+.custom-element {
+ @include color-scheme(dark) {
+ // Insert dark mode styles here
+ }
+
+ @include color-scheme(custom-named-scheme) {
+ // Insert custom color scheme styles here
+ }
+}
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/.stylelintrc b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/.stylelintrc
index 79ea92df0..79ea92df0 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/.stylelintrc
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/.stylelintrc
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/_index.md b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/_index.md
index 46688839b..46688839b 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/_index.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/_index.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/album-rtl/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/album-rtl/index.html
index 3408056bc..3408056bc 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/album-rtl/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/album-rtl/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/album/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/album/index.html
index 2d25d726a..2d25d726a 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/album/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/album/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog-rtl/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog-rtl/index.html
index 05af925eb..05af925eb 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog-rtl/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog-rtl/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog/blog.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog/blog.css
index cc5fc7473..cc5fc7473 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog/blog.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog/blog.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog/blog.rtl.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog/blog.rtl.css
index fc03c35a3..fc03c35a3 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog/blog.rtl.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog/blog.rtl.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog/index.html
index 6b60ea069..6b60ea069 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/blog/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/blog/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel-rtl/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel-rtl/index.html
index b8c35d669..b8c35d669 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel-rtl/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel-rtl/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel/carousel.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel/carousel.css
index 0bdf9768d..0bdf9768d 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel/carousel.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel/carousel.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel/carousel.rtl.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel/carousel.rtl.css
index d20a8111a..d20a8111a 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel/carousel.rtl.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel/carousel.rtl.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel/index.html
index 67c0dd529..67c0dd529 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/carousel/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/carousel/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet-rtl/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet-rtl/index.html
new file mode 100644
index 000000000..d3d0c6f00
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet-rtl/index.html
@@ -0,0 +1,1622 @@
+---
+layout: examples
+title: ورقة الغش
+extra_css:
+ - "../cheatsheet/cheatsheet.rtl.css"
+extra_js:
+ - src: "../cheatsheet/cheatsheet.js"
+body_class: "bg-light"
+direction: rtl
+---
+
+<header class="bd-header bg-dark py-3 d-flex align-items-stretch border-bottom border-dark">
+ <div class="container-fluid d-flex align-items-center">
+ <h1 class="d-flex align-items-center fs-4 text-white mb-0">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="me-3" alt="Bootstrap">
+ ورقة الغش
+ </h1>
+ <a href="{{< docsref "/examples/cheatsheet" >}}" class="ms-auto link-light" hreflang="en">جدول بيانات LTR</a>
+ </div>
+</header>
+<aside class="bd-aside sticky-xl-top text-muted align-self-start mb-3 mb-xl-5 px-2">
+ <h2 class="h6 pt-4 pb-3 mb-4 border-bottom">على هذه الصفحة</h2>
+ <nav class="small" id="toc">
+ <ul class="list-unstyled">
+ <li class="my-2">
+ <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#contents-collapse" aria-controls="contents-collapse">المحتوى</button>
+ <ul class="list-unstyled ps-3 collapse" id="contents-collapse">
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#typography">النصوص</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#images">الصور</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#tables">الجداول</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#figures">النماذج البيانية</a></li>
+ </ul>
+ </li>
+ <li class="my-2">
+ <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#forms-collapse" aria-controls="forms-collapse">النماذج</button>
+ <ul class="list-unstyled ps-3 collapse" id="forms-collapse">
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#overview">نظرة عامة</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#disabled-forms">الحقول المعطلة</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#sizing">الأحجام</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#input-group">مجموعة الإدخال</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#floating-labels">الحقول ذوي العناوين العائمة</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#validation">التحقق</a></li>
+ </ul>
+ </li>
+ <li class="my-2">
+ <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#components-collapse" aria-controls="components-collapse">مكونات</button>
+ <ul class="list-unstyled ps-3 collapse" id="components-collapse">
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#accordion">المطوية</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#alerts">الإنذارات</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#badge">الشارة</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#breadcrumb">مسار التنقل التفصيلي</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#buttons">الأزرار</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#button-group">مجموعة الأزرار</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#card">البطاقة</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#carousel">شرائح العرض</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#dropdowns">القوائم المنسدلة</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#list-group">مجموعة العناصر</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#modal">الصندوق العائم</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#navs">التنقل</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#navbar">شريط التنقل</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#pagination">ترقيم الصفحات</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#popovers">الصناديق المنبثقة</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#progress">شريط التقدم</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#scrollspy">المخطوطة</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#spinners">الدوائر المتحركة</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#toasts">الإشعارات</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#tooltips">التلميحات</a></li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+</aside>
+<div class="bd-cheatsheet container-fluid bg-body">
+ <section id="content">
+ <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">المحتوى</h2>
+
+ <article class="my-3" id="typography">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>النصوص</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/content/typography" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <p class="display-1">العرض 1</p>
+ <p class="display-2">العرض 2</p>
+ <p class="display-3">العرض 3</p>
+ <p class="display-4">العرض 4</p>
+ <p class="display-5">العرض 5</p>
+ <p class="display-6">العرض 6</p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <p class="h1">عنوان 1</p>
+ <p class="h2">عنوان 2</p>
+ <p class="h3">عنوان 3</p>
+ <p class="h4">عنوان 4</p>
+ <p class="h5">عنوان 5</p>
+ <p class="h6">عنوان 6</p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <p class="lead">
+ هذه قطعة إملائية متميزة، فهي مصممة لتكون بارزة من بين القطع الإملائية الأخرى.
+ </p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <p>يمكنك استخدام تصنيف mark <mark>لتحديد</mark> نص.</p>
+ <p><del>من المفترض أن يتم التعامل مع هذا السطر كنص محذوف.</del></p>
+ <p><s>من المفترض أن يتم التعامل مع هذا السطر على أنه لم يعد دقيقًا.</s></p>
+ <p><ins>من المفترض أن يتم التعامل مع هذا السطر كإضافة إلى المستند.</ins></p>
+ <p><u>سيتم عرض النص في هذا السطر كما وتحته خط.</u></p>
+ <p><small>من المفترض أن يتم التعامل مع هذا السطر على أنه يحوي تفاصيل صغيرة.</small></p>
+ <p><strong>هذا السطر يحوي نص عريض.</strong></p>
+ <p><em>هذا السطر يحوي نص مائل.</em></p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <hr>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <blockquote class="blockquote">
+ <p>إقتباس مبهر، موضوع في عنصر blockquote</p>
+ <footer class="blockquote-footer">شخص مشهور في <cite title= "عنوان المصدر"> عنوان المصدر </cite></footer>
+ </blockquote>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <ul class="list-unstyled">
+ <li>هذه قائمة عناصر.</li>
+ <li>بالرغم من أنها مصممة كي لا تظهر كذلك.</li>
+ <li>إلا أنها مجهزة كـ قائمة خلف الكواليس</li>
+ <li>هذا التصميم ينطبق فقد على القائمة الرئيسية</li>
+ <li>القوائم الفرعية
+ <ul>
+ <li>لا تتأثر بهذا التصميم</li>
+ <li>فهي تظهر عليها علامات الترقيم</li>
+ <li>وتحتوي على مساحة فارغة بجوارها</li>
+ </ul>
+ </li>
+ <li>قد يكون هذا التصميم مفيدًا في بعض الأحيان.</li>
+ </ul>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <ul class="list-inline">
+ <li class="list-inline-item">هذا عنصر في قائمة.</li>
+ <li class="list-inline-item">وهذا أيضًا.</li>
+ <li class="list-inline-item">لكنهم يظهرون متجاورين.</li>
+ </ul>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="images">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الصور</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/content/images" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ {{< placeholder width="100%" height="250" class="bd-placeholder-img-lg img-fluid" text="صورة مستجيبة" >}}
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ {{< placeholder width="200" height="200" class="img-thumbnail" title="صورة عنصر نائب مربع عام مع حدود بيضاء حولها ، مما يجعلها تشبه صورة تم التقاطها بكاميرا فورية قديمة" >}}
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="tables">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الجداول</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/content/tables" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <table class="table table-striped">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">الاسم الاول</th>
+ <th scope="col">الكنية</th>
+ <th scope="col">الاسم المستعار</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td><bdo lang="en" dir="ltr">@mdo</bdo></td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td><bdo lang="en" dir="ltr">@fat</bdo></td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2">Larry the Bird</td>
+ <td><bdo lang="en" dir="ltr">@twitter</bdo></td>
+ </tr>
+ </tbody>
+ </table>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <table class="table table-dark table-borderless">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">الاسم الاول</th>
+ <th scope="col">الكنية</th>
+ <th scope="col">الاسم المستعار</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td><bdo lang="en" dir="ltr">@mdo</bdo></td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td><bdo lang="en" dir="ltr">@fat</bdo></td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2">Larry the Bird</td>
+ <td><bdo lang="en" dir="ltr">@twitter</bdo></td>
+ </tr>
+ </tbody>
+ </table>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <table class="table table-hover">
+ <thead>
+ <tr>
+ <th scope="col">Class</th>
+ <th scope="col">عنوان</th>
+ <th scope="col">عنوان</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">Default</th>
+ <td>خلية</td>
+ <td>خلية</td>
+ </tr>
+ {{< table.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <tr class="table-{{ .name }}">
+ <th scope="row">{{ .name | title }}</th>
+ <td>خلية</td>
+ <td>خلية</td>
+ </tr>
+ {{- end -}}
+ {{< /table.inline >}}
+ </tbody>
+ </table>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <table class="table table-sm table-bordered">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">الاسم الاول</th>
+ <th scope="col">الكنية</th>
+ <th scope="col">الاسم المستعار</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td><bdo lang="en" dir="ltr">@mdo</bdo></td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td><bdo lang="en" dir="ltr">@fat</bdo></td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2">Larry the Bird</td>
+ <td><bdo lang="en" dir="ltr">@twitter</bdo></td>
+ </tr>
+ </tbody>
+ </table>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="figures">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>النماذج البيانية</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/content/figures" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <figure class="figure">
+ {{< placeholder width="400" height="300" class="figure-img img-fluid rounded" >}}
+ <figcaption class="figure-caption">شرح للصورة أعلاه.</figcaption>
+ </figure>
+ {{< /example >}}
+ </div>
+ </article>
+ </section>
+
+ <section id="forms">
+ <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">النماذج</h2>
+
+ <article class="my-3" id="overview">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>نظرة عامة</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/overview" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <form>
+ <div class="mb-3">
+ <label for="exampleInputEmail1" class="form-label">البريد الإلكتروني</label>
+ <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
+ <div id="emailHelp" class="form-text">لن نقوم بمشاركة بريدك الإلكتروني مع أي شخص آخر.</div>
+ </div>
+ <div class="mb-3">
+ <label for="exampleInputPassword1" class="form-label">كلمة السر</label>
+ <input type="password" class="form-control" id="exampleInputPassword1">
+ </div>
+ <div class="mb-3">
+ <label for="exampleSelect" class="form-label">قائمة اختيار</label>
+ <select class="form-select" id="exampleSelect">
+ <option selected>افتح قائمة الاختيار هذه</option>
+ <option value="1">واحد</option>
+ <option value="2">اثنان</option>
+ <option value="3">ثلاثة</option>
+ </select>
+ </div>
+ <div class="mb-3 form-check">
+ <input type="checkbox" class="form-check-input" id="exampleCheck1">
+ <label class="form-check-label" for="exampleCheck1">اخترني</label>
+ </div>
+ <fieldset class="mb-3">
+ <legend>أزرار الاختيار الأحادي</legend>
+ <div class="form-check">
+ <input type="radio" name="radios" class="form-check-input" id="exampleRadio1" checked>
+ <label class="form-check-label" for="exampleRadio1">الخيار الافتراضي</label>
+ </div>
+ <div class="mb-3 form-check">
+ <input type="radio" name="radios" class="form-check-input" id="exampleRadio2">
+ <label class="form-check-label" for="exampleRadio2">خيار آخر</label>
+ </div>
+ </fieldset>
+ <div class="mb-3">
+ <label class="form-label" for="customFile">رفع</label>
+ <input type="file" class="form-control" id="customFile">
+ </div>
+ <div class="mb-3 form-check form-switch">
+ <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckChecked" checked>
+ <label class="form-check-label" for="flexSwitchCheckChecked">زر على شكل مفتاح اختيار.</label>
+ </div>
+ <div class="mb-3">
+ <label for="customRange3" class="form-label">مثال على حقل اختيار نطاقي</label>
+ <input type="range" class="form-range" min="0" max="5" step="0.5" id="customRange3">
+ </div>
+ <button type="submit" class="btn btn-primary">إرسال</button>
+ </form>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="disabled-forms">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الحقول المعطلة</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/overview" >}}#disabled-forms">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <form>
+ <fieldset disabled aria-label="مثال على مجموعة الحقول المعطلة">
+ <div class="mb-3">
+ <label for="disabledTextInput" class="form-label">حقل إدخال معطل</label>
+ <input type="text" id="disabledTextInput" class="form-control" placeholder="حقل إدخال معطل">
+ </div>
+ <div class="mb-3">
+ <label for="disabledSelect" class="form-label">قائمة اختيار معطلة</label>
+ <select id="disabledSelect" class="form-select">
+ <option>خيار معطل</option>
+ </select>
+ </div>
+ <div class="mb-3">
+ <div class="form-check">
+ <input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
+ <label class="form-check-label" for="disabledFieldsetCheck">
+ زر اختيار معطل
+ </label>
+ </div>
+ </div>
+ <fieldset class="mb-3">
+ <legend>أزرار اختيار أحادي معطلين</legend>
+ <div class="form-check">
+ <input type="radio" name="radios" class="form-check-input" id="disabledRadio1" disabled>
+ <label class="form-check-label" for="disabledRadio1">خيار معطل</label>
+ </div>
+ <div class="mb-3 form-check">
+ <input type="radio" name="radios" class="form-check-input" id="disabledRadio2" disabled>
+ <label class="form-check-label" for="disabledRadio2">خيار آخر معطل</label>
+ </div>
+ </fieldset>
+ <div class="mb-3">
+ <label class="form-label" for="disabledCustomFile">رفع معطل</label>
+ <input type="file" class="form-control" id="disabledCustomFile" disabled>
+ </div>
+ <div class="mb-3 form-check form-switch">
+ <input class="form-check-input" type="checkbox" role="switch" id="disabledSwitchCheckChecked" checked disabled>
+ <label class="form-check-label" for="disabledSwitchCheckChecked">زر معطل على شكل مفتاح اختيار.</label>
+ </div>
+ <div class="mb-3">
+ <label for="disabledRange" class="form-label">حقل اختيار نطاقي معطل</label>
+ <input type="range" class="form-range" min="0" max="5" step="0.5" id="disabledRange">
+ </div>
+ <button type="submit" class="btn btn-primary">إرسال</button>
+ </fieldset>
+ </form>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="sizing">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الأحجام</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/form-control" >}}#sizing">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="mb-3">
+ <input class="form-control form-control-lg" type="text" placeholder="حقل إدخال كبير" aria-label=".form-control-lg مثال">
+ </div>
+ <div class="mb-3">
+ <select class="form-select form-select-lg" aria-label=".form-select-lg مثال">
+ <option selected>افتح قائمة الاختيار هذه</option>
+ <option value="1">واحد</option>
+ <option value="2">اثنان</option>
+ <option value="3">ثلاثة</option>
+ </select>
+ </div>
+ <div class="mb-3">
+ <input type="file" class="form-control form-control-lg" aria-label="مثال على إدخال ملف كبير">
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="mb-3">
+ <input class="form-control form-control-sm" type="text" placeholder="حقل إدخال صغير" aria-label=".form-control-sm مثال">
+ </div>
+ <div class="mb-3">
+ <select class="form-select form-select-sm" aria-label=".form-select-sm مثال">
+ <option selected>افتح قائمة الاختيار هذه</option>
+ <option value="1">واحد</option>
+ <option value="2">اثنان</option>
+ <option value="3">ثلاثة</option>
+ </select>
+ </div>
+ <div class="mb-3">
+ <input type="file" class="form-control form-control-sm" aria-label="مثال على إدخال ملف صغير">
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="input-group">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>مجموعة الإدخال</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/input-group" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="input-group mb-3">
+ <span class="input-group-text" id="basic-addon1">أنا اسمي</span>
+ <input type="text" class="form-control" placeholder="فلان الفلاني" aria-label="الاسم" aria-describedby="basic-addon1">
+ </div>
+ <div class="input-group mb-3">
+ <input type="text" class="form-control" placeholder="أنا أحب الكعك والقهوة" aria-label="الطعام المفضل" aria-describedby="basic-addon2">
+ <span class="input-group-text" id="basic-addon2">وغيرها</span>
+ </div>
+ <label for="basic-url" class="form-label">عنوان حسابك الشخصي</label>
+ <div class="input-group mb-3">
+ <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
+ <span class="input-group-text" id="basic-addon3"><bdo lang="en" dir="ltr">https://example.com/users/</bdo></span>
+ </div>
+ <div class="input-group mb-3">
+ <span class="input-group-text"><bdo lang="en" dir="ltr">.00</bdo></span>
+ <input type="text" class="form-control" aria-label="المبلغ (لأقرب دولار)">
+ <span class="input-group-text">$</span>
+ </div>
+ <div class="input-group">
+ <span class="input-group-text">مع textarea</span>
+ <textarea class="form-control" aria-label="مع textarea"></textarea>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="floating-labels">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الحقول ذوي العناوين العائمة</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/forms/floating-labels" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <form>
+ <div class="form-floating mb-3">
+ <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
+ <label for="floatingInput">البريد الالكتروني</label>
+ </div>
+ <div class="form-floating">
+ <input type="password" class="form-control" id="floatingPassword" placeholder="كلمة السر">
+ <label for="floatingPassword">كلمة السر</label>
+ </div>
+ </form>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="validation">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>التحقق</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/forms/validation" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <form class="row g-3">
+ <div class="col-md-4">
+ <label for="validationServer01" class="form-label">الاسم الاول</label>
+ <input type="text" class="form-control is-valid" id="validationServer01" value="Mark" required>
+ <div class="valid-feedback">
+ يبدو صحيحًا!
+ </div>
+ </div>
+ <div class="col-md-4">
+ <label for="validationServer02" class="form-label">الكنية</label>
+ <input type="text" class="form-control is-valid" id="validationServer02" value="Otto" required>
+ <div class="valid-feedback">
+ يبدو صحيحًا!
+ </div>
+ </div>
+ <div class="col-md-4">
+ <label for="validationServerUsername" class="form-label">اسم المستخدم</label>
+ <div class="input-group has-validation">
+ <input type="text" class="form-control is-invalid" id="validationServerUsername" aria-describedby="inputGroupPrepend3" required>
+ <span class="input-group-text" id="inputGroupPrepend3">@</span>
+ <div class="invalid-feedback">
+ يرجى اختيار اسم مستخدم.
+ </div>
+ </div>
+ </div>
+ <div class="col-md-6">
+ <label for="validationServer03" class="form-label">مدينة</label>
+ <input type="text" class="form-control is-invalid" id="validationServer03" required>
+ <div class="invalid-feedback">
+ يرجى إدخال مدينة صحيحة.
+ </div>
+ </div>
+ <div class="col-md-3">
+ <label for="validationServer04" class="form-label">حالة</label>
+ <select class="form-select is-invalid" id="validationServer04" required>
+ <option selected disabled value="">اختر...</option>
+ <option>...</option>
+ </select>
+ <div class="invalid-feedback">
+ يرجى اختيار ولاية صحيحة.
+ </div>
+ </div>
+ <div class="col-md-3">
+ <label for="validationServer05" class="form-label">الرمز البريدي</label>
+ <input type="text" class="form-control is-invalid" id="validationServer05" required>
+ <div class="invalid-feedback">
+ يرجى إدخال رمز بريدي صحيح.
+ </div>
+ </div>
+ <div class="col-12">
+ <div class="form-check">
+ <input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" required>
+ <label class="form-check-label" for="invalidCheck3">
+ أوافق على الشروط والأحكام
+ </label>
+ <div class="invalid-feedback">
+ تجب الموافقة قبل إرسال النموذج.
+ </div>
+ </div>
+ </div>
+ <div class="col-12">
+ <button class="btn btn-primary" type="submit">إرسال النموذج</button>
+ </div>
+ </form>
+ {{< /example >}}
+ </div>
+ </article>
+ </section>
+
+ <section id="components">
+ <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">العناصر</h2>
+
+ <article class="my-3" id="accordion">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>المطوية</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/accordion" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="accordion" id="accordionExample">
+ <div class="accordion-item">
+ <h4 class="accordion-header" id="headingOne">
+ <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
+ عنصر المطوية الأول
+ </button>
+ </h4>
+ <div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
+ <div class="accordion-body">
+ <strong>هذا هو محتوى عنصر المطوية الأول.</strong> سيكون المحتوى مخفيًا بشكل إفتراضي حتى يقوم Bootstrap بإضافة الكلاسات اللازمة لكل عنصر في المطوية. هذه الكلاسات تتحكم بالمظهر العام ووتتحكم أيضا بإظهار وإخفاء أقسام المطوية عبر حركات CSS الإنتقالية. يمكنك تعديل أي من هذه عبر كلاسات CSS خاصة بك، او عبر تغيير القيم الإفتراضية المقدمة من Bootstrap. من الجدير بالذكر أنه يمكن وضع أي كود HTML هنا، ولكن الحركة الإنتقالية قد تحد من الoverflow.
+ </div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h4 class="accordion-header" id="headingTwo">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
+ عنصر المطوية الثاني
+ </button>
+ </h4>
+ <div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#accordionExample">
+ <div class="accordion-body">
+ <strong>هذا هو محتوى عنصر المطوية الثاني.</strong> سيكون المحتوى مخفيًا بشكل إفتراضي حتى يقوم Bootstrap بإضافة الكلاسات اللازمة لكل عنصر في المطوية. هذه الكلاسات تتحكم بالمظهر العام ووتتحكم أيضا بإظهار وإخفاء أقسام المطوية عبر حركات CSS الإنتقالية. يمكنك تعديل أي من هذه عبر كلاسات CSS خاصة بك، او عبر تغيير القيم الإفتراضية المقدمة من Bootstrap. من الجدير بالذكر أنه يمكن وضع أي كود HTML هنا، ولكن الحركة الإنتقالية قد تحد من الoverflow.
+ </div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h4 class="accordion-header" id="headingThree">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
+ عنصر المطوية الثالث
+ </button>
+ </h4>
+ <div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
+ <div class="accordion-body">
+ <strong>هذا هو محتوى عنصر المطوية الثالث.</strong> سيكون المحتوى مخفيًا بشكل إفتراضي حتى يقوم Bootstrap بإضافة الكلاسات اللازمة لكل عنصر في المطوية. هذه الكلاسات تتحكم بالمظهر العام ووتتحكم أيضا بإظهار وإخفاء أقسام المطوية عبر حركات CSS الإنتقالية. يمكنك تعديل أي من هذه عبر كلاسات CSS خاصة بك، او عبر تغيير القيم الإفتراضية المقدمة من Bootstrap. من الجدير بالذكر أنه يمكن وضع أي كود HTML هنا، ولكن الحركة الإنتقالية قد تحد من الoverflow.
+ </div>
+ </div>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="alerts">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الإنذارات</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/alerts" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ {{< alerts.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <div class="alert alert-{{ .name }} alert-dismissible fade show" role="alert">
+ تنبيه {{ .name }} بسيط مع <a href="#" class="alert-link">رابط مثال</a>. أعطها نقرة إذا أردت.
+ <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="قريب"></button>
+ </div>{{ end -}}
+ {{< /alerts.inline >}}
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="alert alert-success" role="alert">
+ <h4 class="alert-heading">أحسنت!</h4>
+ <p>لقد نجحت في قراءة رسالة التنبيه المهمة هذه. سيتم تشغيل نص المثال هذا لفترة أطول قليلاً حتى تتمكن من رؤية كيفية عمل التباعد داخل التنبيه مع هذا النوع من المحتوى.</p>
+ <hr>
+ <p class="mb-0">كلما احتجت إلى ذلك ، تأكد من استخدام أدوات الهامش للحفاظ على الأشياء لطيفة ومرتبة.</p>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="badge">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الشارة</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/badge" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <p class="h1">مثال على عنوان <span class="badge bg-primary">جديد</span></p>
+ <p class="h2">مثال على عنوان <span class="badge bg-secondary">جديد</span></p>
+ <p class="h3">مثال على عنوان <span class="badge bg-success">جديد</span></p>
+ <p class="h4">مثال على عنوان <span class="badge bg-danger">جديد</span></p>
+ <p class="h5">مثال على عنوان <span class="badge text-bg-warning">جديد</span></p>
+ <p class="h6">مثال على عنوان <span class="badge text-bg-info">جديد</span></p>
+ <p class="h6">مثال على عنوان <span class="badge text-bg-light">جديد</span></p>
+ <p class="h6">مثال على عنوان <span class="badge bg-dark">جديد</span></p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ {{< badge.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <span class="badge rounded-pill {{ if or (eq .name "light") (eq .name "warning") (eq .name "info") }}text-{{ end }}bg-{{ .name }}">{{ .name | title }}</span>{{- end -}}
+ {{< /badge.inline >}}
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="breadcrumb">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>مسار التنقل التفصيلي (فتات الخبز)</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/breadcrumb" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <nav aria-label="فتات الخبز">
+ <ol class="breadcrumb">
+ <li class="breadcrumb-item"><a href="#">الصفحة الرئيسية</a></li>
+ <li class="breadcrumb-item"><a href="#">المكتبة</a></li>
+ <li class="breadcrumb-item active" aria-current="page">البيانات</li>
+ </ol>
+ </nav>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="buttons">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الأزرار</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/buttons" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ {{< buttons.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <button type="button" class="btn btn-{{ .name }}">{{ .name | title }}</button>
+ {{- end -}}
+ {{< /buttons.inline >}}
+
+ <button type="button" class="btn btn-link">رابط</button>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ {{< buttons.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <button type="button" class="btn btn-outline-{{ .name }}">{{ .name | title }}</button>
+ {{- end -}}
+ {{< /buttons.inline >}}
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <button type="button" class="btn btn-primary btn-sm">زر صغير</button>
+ <button type="button" class="btn btn-primary">زر قياسي</button>
+ <button type="button" class="btn btn-primary btn-lg">زر كبير</button>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="button-group">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>مجموعة الأزرار</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/button-group" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="btn-toolbar" role="toolbar" aria-label="شريط أدوات مع مجموعات أزرار">
+ <div class="btn-group me-2" role="group" aria-label="المجموعة الأولى">
+ <button type="button" class="btn btn-secondary">1</button>
+ <button type="button" class="btn btn-secondary">2</button>
+ <button type="button" class="btn btn-secondary">3</button>
+ <button type="button" class="btn btn-secondary">4</button>
+ </div>
+ <div class="btn-group me-2" role="group" aria-label="المجموعة الثانية">
+ <button type="button" class="btn btn-secondary">5</button>
+ <button type="button" class="btn btn-secondary">6</button>
+ <button type="button" class="btn btn-secondary">7</button>
+ </div>
+ <div class="btn-group" role="group" aria-label="المجموعة الثالثة">
+ <button type="button" class="btn btn-secondary">8</button>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="card">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>البطاقة</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/card" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="row row-cols-1 row-cols-md-2 g-4">
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="غطاء الصورة" >}}
+ <div class="card-body">
+ <h5 class="card-title">عنوان البطاقة</h5>
+ <p class="card-text">بعض الأمثلة السريعة للنصوص للبناء على عنوان البطاقة وتشكيل الجزء الأكبر من محتوى البطاقة.</p>
+ <a href="#" class="btn btn-primary">اذهب لمكان ما</a>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ <div class="card-header">
+ متميز
+ </div>
+ <div class="card-body">
+ <h5 class="card-title">عنوان البطاقة</h5>
+ <p class="card-text">بعض الأمثلة السريعة للنصوص للبناء على عنوان البطاقة وتشكيل الجزء الأكبر من محتوى البطاقة.</p>
+ <a href="#" class="btn btn-primary">اذهب لمكان ما</a>
+ </div>
+ <div class="card-footer text-muted">
+ منذ يومان
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ <div class="card-body">
+ <h5 class="card-title">عنوان البطاقة</h5>
+ <p class="card-text">بعض الأمثلة السريعة للنصوص للبناء على عنوان البطاقة وتشكيل الجزء الأكبر من محتوى البطاقة.</p>
+ </div>
+ <ul class="list-group list-group-flush">
+ <li class="list-group-item">عنصر</li>
+ <li class="list-group-item">عنصر آخر</li>
+ <li class="list-group-item">عنصر ثالث</li>
+ </ul>
+ <div class="card-body">
+ <a href="#" class="card-link">رابط البطاقة</a>
+ <a href="#" class="card-link">رابط آخر</a>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ <div class="row g-0">
+ <div class="col-md-4">
+ {{< placeholder width="100%" height="250" text="صورة" >}}
+ </div>
+ <div class="col-md-8">
+ <div class="card-body">
+ <h5 class="card-title">عنوان البطاقة</h5>
+ <p class="card-text">هذه بطاقة أعرض مع نص داعم تحتها كمقدمة طبيعية لمحتوى إضافي. هذا المحتوى أطول قليلاً.</p>
+ <p class="card-text"><small class="text-muted">آخر تحديث منذ 3 دقائق</small></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="carousel">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>شرائح العرض</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/carousel" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel">
+ <div class="carousel-indicators">
+ <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="الشريحة الأولى"></button>
+ <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="الشريحة الثانية"></button>
+ <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="الشريحة الثالثة"></button>
+ </div>
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="الشريحة الأولى" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>عنوان الشريحة الأولى</h5>
+ <p>محتوى وصفي يعبئ فراغ الشريحة الأولى.</p>
+ </div>
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="الشريحة الثانية" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>عنوان الشريحة الثانية</h5>
+ <p>محتوى وصفي يعبئ فراغ الشريحة الأولى.</p>
+ </div>
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="الشريحة الثالثة" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>عنوان الشريحة الثالثة</h5>
+ <p>محتوى وصفي يعبئ فراغ الشريحة الأولى.</p>
+ </div>
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">السابق</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">التالي</span>
+ </button>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="dropdowns">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>القوائم المنسدلة</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/dropdowns" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
+ <div class="dropdown">
+ <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ زر القائمة المنسدلة
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
+ </ul>
+ </div>
+ <div class="dropdown">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ زر القائمة المنسدلة
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
+ </ul>
+ </div>
+ <div class="dropdown">
+ <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ زر القائمة المنسدلة
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
+ </ul>
+ </div>
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="btn-group">
+ <button type="button" class="btn btn-primary">Primary</button>
+ <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">تبديل القائمة المنسدلة</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-secondary">Secondary</button>
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">تبديل القائمة المنسدلة</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-success">Success</button>
+ <button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">تبديل القائمة المنسدلة</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-info">Info</button>
+ <button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">تبديل القائمة المنسدلة</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-warning">Warning</button>
+ <button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">تبديل القائمة المنسدلة</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-danger">Danger</button>
+ <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">تبديل القائمة المنسدلة</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
+ <div class="dropend">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ زر القائمة المنسدلة لليسار
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
+ </ul>
+ </div>
+ <div class="dropup">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ زر القائمة المنسدلة للأعلى
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
+ </ul>
+ </div>
+ <div class="dropstart">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ زر القائمة المنسدلة لليمين
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
+ </ul>
+ </div>
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="btn-group">
+ <div class="dropdown">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ قائمة منسدلة بمحاذاة نهاية الزر
+ </button>
+ <ul class="dropdown-menu dropdown-menu-end">
+ <li><h6 class="dropdown-header">عنوان القائمة المنسدلة</h6></li>
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">رابط منفصل</a></li>
+ </ul>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="list-group">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>مجموعة العناصر</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/list-group" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <ul class="list-group">
+ <li class="list-group-item disabled" aria-disabled="true">عنصر معطل</li>
+ <li class="list-group-item">عنصر ثاني</li>
+ <li class="list-group-item">عنصر ثالث</li>
+ <li class="list-group-item">عنصر رابع</li>
+ <li class="list-group-item">وعنصر خامس أيضًا</li>
+ </ul>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <ul class="list-group list-group-flush">
+ <li class="list-group-item">عنصر</li>
+ <li class="list-group-item">عنصر ثاني</li>
+ <li class="list-group-item">عنصر ثالث</li>
+ <li class="list-group-item">عنصر رابع</li>
+ <li class="list-group-item">وعنصر خامس أيضًا</li>
+ </ul>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="list-group">
+ <a href="#" class="list-group-item list-group-item-action">عنصر مجموعة قائمة default بسيط</a>
+ {{< list.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <a href="#" class="list-group-item list-group-item-action list-group-item-{{ .name }}">عنصر مجموعة قائمة {{ .name }} بسيط</a>
+ {{- end -}}
+ {{< /list.inline >}}
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="modal">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الصندوق العائم</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/modal" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="d-flex justify-content-between flex-wrap">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalDefault">
+ إطلاق صندوق عائم تجريبي
+ </button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdropLive">
+ إطلاق صندوق عائم عالق
+ </button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalCenteredScrollable">
+ صندوق عائم متنصف عاموديًا وقابل للتمرير
+ </button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreen">
+ صندوق عائم يملأ الشاشة
+ </button>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="navs">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>التنقل</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/navs-tabs" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <nav class="nav">
+ <a class="nav-link active" aria-current="page" href="#">نشط</a>
+ <a class="nav-link" href="#">رابط</a>
+ <a class="nav-link" href="#">رابط</a>
+ <a class="nav-link disabled">معطل</a>
+ </nav>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <nav>
+ <div class="nav nav-tabs mb-3" id="nav-tab" role="tablist">
+ <button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">الصفحة الرئيسية</button>
+ <button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">الملف الشخصي</button>
+ <button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">اتصل بنا</button>
+ </div>
+ </nav>
+ <div class="tab-content" id="nav-tabContent">
+ <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">
+ <p class="px-3">محتوى لتوضيح كيف يعمل التبويب. هذا المحتوى مرتبط بتبويب الصفحة الرئيسية. إذن، أمامنا بعض التحدّيات الصعبة. لكن لا يمكننا أن نعتمد على التطورات التكنولوجية وحدها في ميدان قوى السوق الحرة، لإخراجنا من هذه الورطة، لا سيّما أنها نفسها، مقرونة بالافتقار إلى البصيرة، هي التي أودت بنا إلى هذا التبدُّل المناخي في الدرجة الأولى.</p>
+ </div>
+ <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">
+ <p class="px-3">محتوى لتوضيح كيف يعمل التبويب. هذا المحتوى مرتبط بتبويب الملف الشخصي. معظم البشر في بلدان العالَم النامي، لم يقتنوا بعد مكيّفهم الأول، والمشكلة إلى ازدياد. فمعظم البلدان النامية هي من البلدان الأشد حرارة والأكثر اكتظاظًا بالسكان في العالم.</p>
+ </div>
+ <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">
+ <p class="px-3">محتوى لتوضيح كيف يعمل التبويب. هذا المحتوى مرتبط بتبويب الاتصال بنا. أمامنا بعض التحدّيات الصعبة. لكن لا يمكننا أن نعتمد على التطورات التكنولوجية وحدها في ميدان قوى السوق الحرة، بل يجب وضع معايير جدوى جديدة لشركات البناء ومعايير أعلى لجدوى التكييف من أجل تحفيز الحلول المستدامة قانونيًا.</p>
+ </div>
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <ul class="nav nav-pills">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">نشط</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">رابط</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">رابط</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">معطل</a>
+ </li>
+ </ul>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="navbar">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>شريط التنقل</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/navbar" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <nav class="navbar navbar-expand-lg bg-light">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="d-inline-block align-top" alt="Bootstrap" loading="lazy"
+ style="filter: invert(1) grayscale(100%) brightness(200%);">
+ </a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="تبديل التنقل">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">الصفحة الرئيسية</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">رابط</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ قائمة منسدلة
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ </ul>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">معطل</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="بحث" aria-label="بحث">
+ <button class="btn btn-outline-dark" type="submit">بحث</button>
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg navbar-dark bg-primary mt-5">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="d-inline-block align-top" alt="Bootstrap" loading="lazy">
+ </a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent2" aria-controls="navbarSupportedContent2" aria-expanded="false" aria-label="تبديل التنقل">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarSupportedContent2">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">الصفحة الرئيسية</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">رابط</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ قائمة منسدلة
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">عمل</a></li>
+ <li><a class="dropdown-item" href="#">عمل آخر</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">شيء آخر هنا</a></li>
+ </ul>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">معطل</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="بحث" aria-label="بحث">
+ <button class="btn btn-outline-light" type="submit">بحث</button>
+ </form>
+ </div>
+ </div>
+ </nav>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="pagination">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>ترقيم الصفحات</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/pagination" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <nav aria-label="مثال ترقيم الصفحات">
+ <ul class="pagination pagination-sm">
+ <li class="page-item"><a class="page-link" href="#">1</a></li>
+ <li class="page-item active" aria-current="page">
+ <a class="page-link" href="#">2</a>
+ </li>
+ <li class="page-item"><a class="page-link" href="#">3</a></li>
+ </ul>
+ </nav>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <nav aria-label="مثال قياسي لترقيم الصفحات">
+ <ul class="pagination">
+ <li class="page-item">
+ <a class="page-link" href="#" aria-label="السابق">
+ <span aria-hidden="true">&laquo;</span>
+ </a>
+ </li>
+ <li class="page-item"><a class="page-link" href="#">1</a></li>
+ <li class="page-item"><a class="page-link" href="#">2</a></li>
+ <li class="page-item"><a class="page-link" href="#">3</a></li>
+ <li class="page-item">
+ <a class="page-link" href="#" aria-label="التالي">
+ <span aria-hidden="true">&raquo;</span>
+ </a>
+ </li>
+ </ul>
+ </nav>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <nav aria-label="مثال آخر لترقيم الصفحات">
+ <ul class="pagination pagination-lg flex-wrap">
+ <li class="page-item disabled">
+ <a class="page-link">السابق</a>
+ </li>
+ <li class="page-item"><a class="page-link" href="#">1</a></li>
+ <li class="page-item active" aria-current="page">
+ <a class="page-link" href="#">2</a>
+ </li>
+ <li class="page-item"><a class="page-link" href="#">3</a></li>
+ <li class="page-item">
+ <a class="page-link" href="#">التالى</a>
+ </li>
+ </ul>
+ </nav>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="popovers">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الصناديق المنبثقة</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/popovers" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="عنوان الصندوق المنبثق" data-bs-content="وإليك بعض المحتويات الرائعة. إنه آسر للغاية. أليس كذلك؟">
+ انقر لعرض/إخفاء الصندوق المنبثق
+ </button>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="نجمٌ و لكنه ليس في السماء، بل في أعماق البحار و المحيطات!">
+ انبثاق إلى الأعلى
+ </button>
+ <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="نجمٌ و لكنه ليس في السماء، بل في أعماق البحار و المحيطات!">
+ انبثاق إلى اليسار
+ </button>
+ <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="نجمٌ و لكنه ليس في السماء، بل في أعماق البحار و المحيطات!">
+ انبثاق إلى الأسفل
+ </button>
+ <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="نجمٌ و لكنه ليس في السماء، بل في أعماق البحار و المحيطات!">
+ انبثاق إلى اليمين
+ </button>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="progress">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>شريط التقدم</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/progress" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="progress mb-3" role="progressbar" aria-label="مثال مع عنوان" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar">0%</div>
+ </div>
+ <div class="progress mb-3" role="progressbar" aria-label="مثال ناجح مع عنوان" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar bg-success w-25">25%</div>
+ </div>
+ <div class="progress mb-3" role="progressbar" aria-label="مثال توضيح مع عنوان" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar text-bg-info w-50">50%</div>
+ </div>
+ <div class="progress mb-3" role="progressbar" aria-label="مثال تنبيه مع عنوان" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar text-bg-warning w-75">75%</div>
+ </div>
+ <div class="progress" role="progressbar" aria-label="مثال خطر مع عنوان" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar bg-danger w-100">100%</div>
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="progress-stacked">
+ <div class="progress" role="progressbar" aria-label="القسم الأول - مثال افتراضي" style="width: 15%" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar"></div>
+ </div>
+ <div class="progress" role="progressbar" aria-label="القسم الثاني - مثال ناجح مقلّم متحرك" style="width: 40%" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-striped progress-bar-animated bg-success"></div>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="scrollspy">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>المخطوطة</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/scrollspy" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ <div class="bd-example">
+ <nav id="navbar-example2" class="navbar bg-light px-3">
+ <a class="navbar-brand" href="#">شريط التنقل</a>
+ <ul class="nav nav-pills">
+ <li class="nav-item">
+ <a class="nav-link" href="#fat"><bdi lang="en" dir="ltr">@fat</bdi></a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#mdo"><bdi lang="en" dir="ltr">@mdo</bdi></a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">قائمة منسدلة</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#one">واحد</a></li>
+ <li><a class="dropdown-item" href="#two">اثنان</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#three">ثلاثة</a></li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <div data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-offset="0" class="scrollspy-example position-relative mt-2 overflow-auto">
+ <h4 id="fat"><bdi lang="en" dir="ltr">@fat</bdi></h4>
+ <p>محتوى لتوضيح كيف تعمل المخطوطة. ببساطة، المخطوطة عبارة عن منشور طويل يحتوي على عدة أقسام، ولديه شريط تنقل يسهل الوصول إلى هذه الأقسام الفرعية.</p>
+ <h4 id="mdo"><bdi lang="en" dir="ltr">@mdo</bdi></h4>
+ <p>بصرف النظر عن تحسيننا جدوى المكيّفات أو عدم تحسينها، فإن الطلب على الطاقة سيزداد. وطبقاً لما جاء في مقالة معهد ماساشوستس للتكنولوجيا، السالف ذكره، ثمَّة أمر يجب عدم إغفاله، وهو كيف أن هذا الطلب سيضغط على نظم توفير الطاقة الحالية. إذ لا بد من إعادة تأهيل كل شبكات الكهرباء، وتوسيعها لتلبية طلب الطاقة في زمن الذروة، خلال موجات الحرارة المتزايدة. فحين يكون الحر شديداً يجنح الناس إلى البقاء في الداخل، وإلى زيادة تشغيل المكيّفات، سعياً إلى جو لطيف وهم يستخدمون أدوات وأجهزة مختلفة أخرى.</p>
+ <h4 id="one">واحد</h4>
+ <p>وكل هذه الأمور المتزامنة من تشغيل الأجهزة، يزيد الضغط على شبكات الطاقة، كما أسلفنا. لكن مجرد زيادة سعة الشبكة ليس كافياً. إذ لا بد من تطوير الشبكات الذكية التي تستخدم الجسّاسات، ونظم المراقبة، والبرامج الإلكترونية، لتحديد متى يكون الشاغلون في المبنى، ومتى يكون ثمَّة حاجة إلى الطاقة، ومتى تكون الحرارة منخفضة، وبذلك يخرج الناس، فلا يستخدمون كثيراً من الكهرباء.</p>
+ <h4 id="two">اثنان</h4>
+ <p>مع الأسف، كل هذه الحلول المبتكرة مكلِّفة، وهذا ما يجعلها عديمة الجدوى في نظر بعض الشركات الخاصة والمواطن المتقشّف. إن بعض الأفراد الواعين بيئياً يبذلون قصارى جهدهم في تقليص استهلاكهم من الطاقة، ويعون جيداً أهمية أجهزة التكييف المجدية والأرفق بالبيئة. ولكن جهات كثيرة لن تتحرّك لمجرد حافز سلامة المناخ ووقف هدر الطاقة، ما دامت لا تحركها حوافز قانونية. وعلى الحكومات أن تُقدِم عند الاهتمام بالتغيّر المناخي، على وضع التشريعات المناسبة. فبالنظم والحوافز والدعم، يمكن دفع الشركات إلى اعتماد الحلول الأجدى في مكاتبها.</p>
+ <h4 id="three">ثلاثة</h4>
+ <p>وكما يتبيّن لنا، من عدد الحلول الملطِّفة للمشكلة، ومن تنوّعها، وهي الحلول التي أسلفنا الحديث عنها، فإن التكنولوجيا التي نحتاج إليها من أجل معالجة هذه التحديات، هي في مدى قدرتنا، لكنها ربما تتطلّب بعض التحسين، ودعماً استثمارياً أكبر!</p>
+ <p>ولا مانع من إضافة محتوى آخر ليس تحت أي قسم معين.</p>
+ </div>
+ </div>
+ </div>
+ </article>
+ <article class="my-3" id="spinners">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الدوائر المتحركة</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/spinners" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ {{< spinner.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <div class="spinner-border text-{{ .name }}" role="status">
+ <span class="visually-hidden">جار التحميل...</span>
+ </div>
+ {{- end -}}
+ {{< /spinner.inline >}}
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ {{< spinner.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <div class="spinner-grow text-{{ .name }}" role="status">
+ <span class="visually-hidden">جار التحميل...</span>
+ </div>
+ {{- end -}}
+ {{< /spinner.inline >}}
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="toasts">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>الإشعارات</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/toasts" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" class="bg-dark p-5 align-items-center" >}}
+ <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small class="text-muted">قبل 11 دقيقة</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="قريب"></button>
+ </div>
+ <div class="toast-body">
+ مرحبًا بالعالم! هذه رسالة إشعار.
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="mt-3 mb-5 pb-5" id="tooltips">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>التلميحات</h3>
+ <a class="d-flex align-items-center" hreflang="en" href="{{< docsref "/components/tooltips" >}}">دليل الإستخدام</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" class="tooltip-demo" >}}
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="تلميح يظهر في الأعلى">تلميح يظهر في الأعلى</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" title="تلميح يظهر على اليسار">تلميح يظهر على اليسار</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" title="تلميح يظهر في الأسفل">تلميح يظهر في الأسفل</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" title="تلميح يظهر على اليمين">تلميح يظهر على اليمين</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" title="<em>تلميح</em> <u>مع</u> <b>HTML</b>">تلميح مع HTML</button>
+ {{< /example >}}
+ </div>
+ </article>
+ </section>
+</div>
+
+<div class="modal fade" id="exampleModalDefault" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalLabel">عنوان الصندوق العائم</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="إغلاق"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button>
+ <button type="button" class="btn btn-primary">حفظ التغيرات</button>
+ </div>
+ </div>
+ </div>
+</div>
+<div class="modal fade" id="staticBackdropLive" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLiveLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="staticBackdropLiveLabel">عنوان الصندوق العائم</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="إغلاق"></button>
+ </div>
+ <div class="modal-body">
+ <p>لن أغلق إذا نقرت خارجي. لا تحاول حتى الضغط على مفتاح الهروب.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button>
+ <button type="button" class="btn btn-primary">حسنًا</button>
+ </div>
+ </div>
+ </div>
+</div>
+<div class="modal fade" id="exampleModalCenteredScrollable" tabindex="-1" aria-labelledby="exampleModalCenteredScrollableTitle" aria-hidden="true">
+ <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalCenteredScrollableTitle">عنوان الصندوق العائم</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="إغلاق"></button>
+ </div>
+ <div class="modal-body">
+ <p>نص لتوضيح عمل الصندوق العائم المتنصّف عاموديًا القابل للتمرير</p>
+ <p>في هذه الحالة، هذا الصندوق يحتوي على محتوى أكثر قليلًا، ولذلك لتوضيح كيف يمكن إضافة خاصية الإنتصاف العامودي لصندوق عائم قابل للتمرير.</p>
+ <p>يعتبر كوب أو فنجان القهوة عادة يومية عند غالبية سكان الكرة الأرضية في الصباح والمساء، وفي حين تكثر الدراسات حول إيجابياتها هناك أيضا سلبيات كثيرة للمشروب المفضل للكثيرين.</p>
+ <p>وفي هذا الشأن، أظهرت دراسة جديدة أن تناول الكافيين بانتظام يقلل من حجم المادة الرمادية في الدماغ، مما يشير إلى أن تناول القهوة يمكن أن يضعف القدرة على معالجة المعلومات، وفقاً لما نشرته "ديلي ميل" البريطانية.</p>
+ <p>وأعطى باحثون سويسريون متطوعين ثلاث حصص من الكافيين 150 ملغم يوميًا لمدة 10 أيام - وهو مقدار كافيين يعادل حوالي أربعة أو خمسة أكواب صغيرة من القهوة المخمرة يوميًا، أو سبعة إسبريسو فردي.</p>
+ <p>وتبين حدوث انخفاض في المادة الرمادية، والتي توجد غالبًا في الطبقة الخارجية للدماغ، أو القشرة، وتعمل على معالجة المعلومات.</p>
+ <p>كما كان الانخفاض مذهلاً بشكل خاص في الفص الصدغي الإنسي الأيمن، بما في ذلك الحُصين، وهي منطقة من الدماغ ضرورية لتقوية الذاكرة.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button>
+ <button type="button" class="btn btn-primary">حفظ التغيرات</button>
+ </div>
+ </div>
+ </div>
+</div>
+<div class="modal fade" id="exampleModalFullscreen" tabindex="-1" aria-labelledby="exampleModalFullscreenLabel" aria-hidden="true">
+ <div class="modal-dialog modal-fullscreen">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalFullscreenLabel">صندوق عائم يملأ الشاشة</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="إغلاق"></button>
+ </div>
+ <div class="modal-body">
+ <p>في ما يلي، نص طويل لتعبئة كامل الشاشة. قد يبدو أنني أثرثر كثيرًا، لذا سأقوم بنسخ مقالة من إحدى الصحف العربية.</p>
+ <p>تكييف الهواء هو من التكنولوجيا التي ما إن نمتلكها حتى نصبح عاجزين عن تخيّل العيش من دونها. وتكييف الهواء في مناطق عديدة من العالم ليس ترفاً يمكن الاستغناء عنه. ولكن هذه الحاجة الحيوية تثير تحديات كبيرة على مستوى استهلاك الطاقة في معظم بلدان العالم. ويُتوقع أن تتفاقم هذه التحديات خلال العقود الثلاثة المقبلة، مع توقُّع ارتفاع عدد المكيفات في العالم نحو ثلاثة أضعاف. وفي حين أن الابتكارات التكنولوجية تحقِّق كل يوم إنجازاً جديداً، وعلى الرغم من بعض التحسينات والتدابير المحدودة التي طرأت على صناعة المكيفات، “فإن تكنولوجيتها الأساسية لا تزال تعمل كما كانت، منذ اعتمادها قبل نحو قرن من السنين"، حسبما جاء في تقرير لمعهد ماساشوستس للتكنولوجيا (MIT)، في الأول من سبتمبر 2020م. ولمعالجة هذه المشكلات الخطيرة، لا مفر من إعادة التفكير بجد.</p>
+ <p>التكييف حاجة حيويّة. فالتعرّض للحرارة لمدة طويلة ضارٌ بالصحة. ووفقاً لمنظمة الصحة العالميّة يمكن للتعرُّض الطويل للحرارة أيضاً أن يؤدي إلى "إعياء حراري، وضربة شمس، وتورّم في الرجلين، وطفح جلدي على العنق، وتشنج، وصداع، وحساسيّة، والخمول والوهَن. ويمكن للحرارة أن تسبِّب جفافاً خطراً، وأعراضاً حادة في أوعية الدماغ الدمويّة، وتسهم في تكوّن الجلطات".</p>
+ <p>وموجات الحر أيضاً من أشد المخاطر الطبيعيّة المميتة. إذ يقدَّر أن بين عامي 1998 و2017م، توفي نحو 166 ألف شخص من موجات الحر. ومات 70 ألفاً من هؤلاء في أوروبا سنة 2003م وحدها. ومن دون أن يصل الخطر إلى الموت، تتسبَّب الحرارة العالية بانخفاض الأداء المعرفي لدى الشبان البالغين في المباني غير المكيّفة. فقد بيّنت دراسة أجرتها "كليّة ت. هـ. تشان" للصحة العامة في جامعة هارفرد، نشرتها "بلوس ميديسين" في 10 يوليو 2018م، أن التلاميذ الذين ينامون في مهاجع غير مكيّفة، يقل أداؤهم عن أولئك الذين ينامون في مهاجع مكيّفة. ولتجنّب مخاطر التعرّض للحرارة، يلتفت الناس إلى استخدام التكييف.</p>
+ <p>يتطلّب التكييف كثيراً من الطاقة. فنحو %10 من استهلاك الكهرباء في العالم يُنفَق في تشغيل المكيّفات. وتصل هذه النسبة إلى %50 في المملكة حسب "المركز السعودي لكفاءة الطاقة". أضف إلى ذلك أن معظم البشر في بلدان العالم النامي، لم يقتنوا بعد مكيّفهم الأول، والمشكلة إلى ازدياد. فمعظم البلدان النامية هي من البلدان الأشد حرارة والأكثر اكتظاظاً بالسكان في العالم. وجاء في تقرير لوكالة الطاقة الدوليّة بعنوان "مستقبل التبريد"، ونُشر في مايو 2018م، أن في أجزاء من أمريكا الجنوبيّة وإفريقيا وآسيا والشرق الأوسط، يعيش 2.8 مليار نسمة، ولا يملك وحدات تكييف سوى %8 من المنازل. في حين الدول المتقدِّمة مثل كوريا الجنوبيّة، واليابان، والولايات المتحدة، فإن %89 من المنازل تملك مكيفات، وفي الصين %60 من البيوت تملكها أيضاً.</p>
+ <p>ولكن مع تنامي الدخل في بلدان الاقتصاد الصاعد، يتوقّع أن تزداد المنازل التي تقتني مكيّفاً. وبحسب مقالة نُشرت في صحيفة "نيويورك تايمز"، في 15 مايو 2018م، سيرتفع عدد المكيّفات في العالم من نحو 1.6 مليار حالياً، إلى 5.6 مليارات عام 2050م، طبقاً لمعدَّلات النمو الاقتصادي.</p>
+ <p>ومع الافتقار إلى الابتكار وتطوير النظم لفرض معايير الجدوى الأعلى، فسيتضاعف استهلاك الطاقة لتشغيل المكيّفات ثلاثة أضعاف. وسينتج من ذلك طلب إضافي للطاقة يساوي مجموع إنتاج الطاقة في الصين حالياً. فمبيعات المكيّفات ترتفع اليوم في البلدان النامية، لكن فعاليّة هذه الوحدات مشكوك فيها. فمثلاً، أوسع وحدات التكييف انتشاراً في بعض الأسواق الآسيوية تتطلّب ضعفي ما تتطلّبه وحدات تكييف أجدى. والمكيّفات التي تباع في اليابان والاتحاد الأوروبي أجدى بنسبة %25 عادة، من تلك التي تباع في الصين والولايات المتحدة.</p>
+ <p>وبصرف النظر عن كثير من الطاقة التي يحتاج إليها المكيّف، فإنه يبث مقادير وفيرة من غازات الدفيئة نفسها. وطبقاً لموقع تكييف الهواء (airconditioning.com)، فإن المبرِّدات في معظم المكيّفات مثل مواد مركبات الكربون الكلورية فلورية أو مواد هيدروفلوروولفينات، ومركبات ثاني أكسيد الكربون الهيدروكلورية فلورية، أسوأ بكثير للبيئة من ثاني أكسيد الكربون، لأنها تحتبس من الحرارة مقادير أكبر حين تتسرّب إلى الجو.</p>
+ <p>وبالإضافة إلى ظاهرة الدفيئة، فهذه الغازات تسهم أيضاً بالإضرار بطبقة الأوزون. ويمكن لهذه المواد الكيميائية أن تتسرّب خلال عملية التصنيع أو التصليح. ويعرف كل من يملك في منزله مكيّفاً كم تتكرر أعطال هذه الأجهزة. ثم إن المكيف يُرمَى حين يتعطّل نهائياً ولا يعود قابلاً للإصلاح، والمواد المبرِّدة فيه ستتسرّب على الأرجح لتلوث الهواء.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إغلاق</button>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/cheatsheet.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/cheatsheet.css
index e2f99b859..e2f99b859 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/cheatsheet.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/cheatsheet.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/cheatsheet.js b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/cheatsheet.js
index e25a89e75..e25a89e75 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/cheatsheet.js
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/cheatsheet.js
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/cheatsheet.rtl.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/cheatsheet.rtl.css
index e04d84871..e04d84871 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/cheatsheet/cheatsheet.rtl.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/cheatsheet.rtl.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/index.html
new file mode 100644
index 000000000..6ee32654d
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cheatsheet/index.html
@@ -0,0 +1,1606 @@
+---
+layout: examples
+title: Cheatsheet
+extra_css:
+ - "cheatsheet.css"
+extra_js:
+ - src: "cheatsheet.js"
+body_class: "bg-light"
+---
+
+<header class="bd-header bg-dark py-3 d-flex align-items-stretch border-bottom border-dark">
+ <div class="container-fluid d-flex align-items-center">
+ <h1 class="d-flex align-items-center fs-4 text-white mb-0">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="me-3" alt="Bootstrap">
+ Cheatsheet
+ </h1>
+ <a href="{{< docsref "/examples/cheatsheet-rtl" >}}" class="ms-auto link-light" hreflang="ar">RTL cheatsheet</a>
+ </div>
+</header>
+<aside class="bd-aside sticky-xl-top text-muted align-self-start mb-3 mb-xl-5 px-2">
+ <h2 class="h6 pt-4 pb-3 mb-4 border-bottom">On this page</h2>
+ <nav class="small" id="toc">
+ <ul class="list-unstyled">
+ <li class="my-2">
+ <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#contents-collapse" aria-controls="contents-collapse">Contents</button>
+ <ul class="list-unstyled ps-3 collapse" id="contents-collapse">
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#typography">Typography</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#images">Images</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#tables">Tables</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#figures">Figures</a></li>
+ </ul>
+ </li>
+ <li class="my-2">
+ <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#forms-collapse" aria-controls="forms-collapse">Forms</button>
+ <ul class="list-unstyled ps-3 collapse" id="forms-collapse">
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#overview">Overview</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#disabled-forms">Disabled forms</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#sizing">Sizing</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#input-group">Input group</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#floating-labels">Floating labels</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#validation">Validation</a></li>
+ </ul>
+ </li>
+ <li class="my-2">
+ <button class="btn d-inline-flex align-items-center collapsed border-0" data-bs-toggle="collapse" aria-expanded="false" data-bs-target="#components-collapse" aria-controls="components-collapse">Components</button>
+ <ul class="list-unstyled ps-3 collapse" id="components-collapse">
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#accordion">Accordion</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#alerts">Alerts</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#badge">Badge</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#breadcrumb">Breadcrumb</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#buttons">Buttons</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#button-group">Button group</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#card">Card</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#carousel">Carousel</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#dropdowns">Dropdowns</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#list-group">List group</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#modal">Modal</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#navs">Navs</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#navbar">Navbar</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#pagination">Pagination</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#popovers">Popovers</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#progress">Progress</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#scrollspy">Scrollspy</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#spinners">Spinners</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#toasts">Toasts</a></li>
+ <li><a class="d-inline-flex align-items-center rounded text-decoration-none" href="#tooltips">Tooltips</a></li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+</aside>
+<div class="bd-cheatsheet container-fluid bg-body">
+ <section id="content">
+ <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">Contents</h2>
+
+ <article class="my-3" id="typography">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Typography</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/content/typography" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <p class="display-1">Display 1</p>
+ <p class="display-2">Display 2</p>
+ <p class="display-3">Display 3</p>
+ <p class="display-4">Display 4</p>
+ <p class="display-5">Display 5</p>
+ <p class="display-6">Display 6</p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <p class="h1">Heading 1</p>
+ <p class="h2">Heading 2</p>
+ <p class="h3">Heading 3</p>
+ <p class="h4">Heading 4</p>
+ <p class="h5">Heading 5</p>
+ <p class="h6">Heading 6</p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <p class="lead">
+ This is a lead paragraph. It stands out from regular paragraphs.
+ </p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <p>You can use the mark tag to <mark>highlight</mark> text.</p>
+ <p><del>This line of text is meant to be treated as deleted text.</del></p>
+ <p><s>This line of text is meant to be treated as no longer accurate.</s></p>
+ <p><ins>This line of text is meant to be treated as an addition to the document.</ins></p>
+ <p><u>This line of text will render as underlined.</u></p>
+ <p><small>This line of text is meant to be treated as fine print.</small></p>
+ <p><strong>This line rendered as bold text.</strong></p>
+ <p><em>This line rendered as italicized text.</em></p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <hr>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <blockquote class="blockquote">
+ <p>A well-known quote, contained in a blockquote element.</p>
+ <footer class="blockquote-footer">Someone famous in <cite title="Source Title">Source Title</cite></footer>
+ </blockquote>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <ul class="list-unstyled">
+ <li>This is a list.</li>
+ <li>It appears completely unstyled.</li>
+ <li>Structurally, it's still a list.</li>
+ <li>However, this style only applies to immediate child elements.</li>
+ <li>Nested lists:
+ <ul>
+ <li>are unaffected by this style</li>
+ <li>will still show a bullet</li>
+ <li>and have appropriate left margin</li>
+ </ul>
+ </li>
+ <li>This may still come in handy in some situations.</li>
+ </ul>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <ul class="list-inline">
+ <li class="list-inline-item">This is a list item.</li>
+ <li class="list-inline-item">And another one.</li>
+ <li class="list-inline-item">But they're displayed inline.</li>
+ </ul>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="images">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Images</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/content/images" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ {{< placeholder width="100%" height="250" class="bd-placeholder-img-lg img-fluid" text="Responsive image" >}}
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ {{< placeholder width="200" height="200" class="img-thumbnail" title="A generic square placeholder image with a white border around it, making it resemble a photograph taken with an old instant camera" >}}
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="tables">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Tables</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/content/tables" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <table class="table table-striped">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2">Larry the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+ </table>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <table class="table table-dark table-borderless">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2">Larry the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+ </table>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <table class="table table-hover">
+ <thead>
+ <tr>
+ <th scope="col">Class</th>
+ <th scope="col">Heading</th>
+ <th scope="col">Heading</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">Default</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ {{< table.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <tr class="table-{{ .name }}">
+ <th scope="row">{{ .name | title }}</th>
+ <td>Cell</td>
+ <td>Cell</td>
+ </tr>
+ {{- end -}}
+ {{< /table.inline >}}
+ </tbody>
+ </table>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <table class="table table-sm table-bordered">
+ <thead>
+ <tr>
+ <th scope="col">#</th>
+ <th scope="col">First</th>
+ <th scope="col">Last</th>
+ <th scope="col">Handle</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">1</th>
+ <td>Mark</td>
+ <td>Otto</td>
+ <td>@mdo</td>
+ </tr>
+ <tr>
+ <th scope="row">2</th>
+ <td>Jacob</td>
+ <td>Thornton</td>
+ <td>@fat</td>
+ </tr>
+ <tr>
+ <th scope="row">3</th>
+ <td colspan="2">Larry the Bird</td>
+ <td>@twitter</td>
+ </tr>
+ </tbody>
+ </table>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="figures">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Figures</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/content/figures" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <figure class="figure">
+ {{< placeholder width="400" height="300" class="figure-img img-fluid rounded" >}}
+ <figcaption class="figure-caption">A caption for the above image.</figcaption>
+ </figure>
+ {{< /example >}}
+ </div>
+ </article>
+ </section>
+
+ <section id="forms">
+ <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">Forms</h2>
+
+ <article class="my-3" id="overview">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Overview</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/forms/overview" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <form>
+ <div class="mb-3">
+ <label for="exampleInputEmail1" class="form-label">Email address</label>
+ <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
+ <div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
+ </div>
+ <div class="mb-3">
+ <label for="exampleInputPassword1" class="form-label">Password</label>
+ <input type="password" class="form-control" id="exampleInputPassword1">
+ </div>
+ <div class="mb-3">
+ <label for="exampleSelect" class="form-label">Select menu</label>
+ <select class="form-select" id="exampleSelect">
+ <option selected>Open this select menu</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+ </div>
+ <div class="mb-3 form-check">
+ <input type="checkbox" class="form-check-input" id="exampleCheck1">
+ <label class="form-check-label" for="exampleCheck1">Check me out</label>
+ </div>
+ <fieldset class="mb-3">
+ <legend>Radios buttons</legend>
+ <div class="form-check">
+ <input type="radio" name="radios" class="form-check-input" id="exampleRadio1">
+ <label class="form-check-label" for="exampleRadio1">Default radio</label>
+ </div>
+ <div class="mb-3 form-check">
+ <input type="radio" name="radios" class="form-check-input" id="exampleRadio2">
+ <label class="form-check-label" for="exampleRadio2">Another radio</label>
+ </div>
+ </fieldset>
+ <div class="mb-3">
+ <label class="form-label" for="customFile">Upload</label>
+ <input type="file" class="form-control" id="customFile">
+ </div>
+ <div class="mb-3 form-check form-switch">
+ <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckChecked" checked>
+ <label class="form-check-label" for="flexSwitchCheckChecked">Checked switch checkbox input</label>
+ </div>
+ <div class="mb-3">
+ <label for="customRange3" class="form-label">Example range</label>
+ <input type="range" class="form-range" min="0" max="5" step="0.5" id="customRange3">
+ </div>
+ <button type="submit" class="btn btn-primary">Submit</button>
+ </form>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="disabled-forms">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Disabled forms</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/forms/overview" >}}#disabled-forms">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <form>
+ <fieldset disabled aria-label="Disabled fieldset example">
+ <div class="mb-3">
+ <label for="disabledTextInput" class="form-label">Disabled input</label>
+ <input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
+ </div>
+ <div class="mb-3">
+ <label for="disabledSelect" class="form-label">Disabled select menu</label>
+ <select id="disabledSelect" class="form-select">
+ <option>Disabled select</option>
+ </select>
+ </div>
+ <div class="mb-3">
+ <div class="form-check">
+ <input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
+ <label class="form-check-label" for="disabledFieldsetCheck">
+ Can't check this
+ </label>
+ </div>
+ </div>
+ <fieldset class="mb-3">
+ <legend>Disabled radios buttons</legend>
+ <div class="form-check">
+ <input type="radio" name="radios" class="form-check-input" id="disabledRadio1" disabled>
+ <label class="form-check-label" for="disabledRadio1">Disabled radio</label>
+ </div>
+ <div class="mb-3 form-check">
+ <input type="radio" name="radios" class="form-check-input" id="disabledRadio2" disabled>
+ <label class="form-check-label" for="disabledRadio2">Another radio</label>
+ </div>
+ </fieldset>
+ <div class="mb-3">
+ <label class="form-label" for="disabledCustomFile">Upload</label>
+ <input type="file" class="form-control" id="disabledCustomFile" disabled>
+ </div>
+ <div class="mb-3 form-check form-switch">
+ <input class="form-check-input" type="checkbox" role="switch" id="disabledSwitchCheckChecked" checked disabled>
+ <label class="form-check-label" for="disabledSwitchCheckChecked">Disabled checked switch checkbox input</label>
+ </div>
+ <div class="mb-3">
+ <label for="disabledRange" class="form-label">Disabled range</label>
+ <input type="range" class="form-range" min="0" max="5" step="0.5" id="disabledRange">
+ </div>
+ <button type="submit" class="btn btn-primary">Submit</button>
+ </fieldset>
+ </form>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="sizing">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Sizing</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/forms/form-control" >}}#sizing">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="mb-3">
+ <input class="form-control form-control-lg" type="text" placeholder=".form-control-lg" aria-label=".form-control-lg example">
+ </div>
+ <div class="mb-3">
+ <select class="form-select form-select-lg" aria-label=".form-select-lg example">
+ <option selected>Open this select menu</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+ </div>
+ <div class="mb-3">
+ <input type="file" class="form-control form-control-lg" aria-label="Large file input example">
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="mb-3">
+ <input class="form-control form-control-sm" type="text" placeholder=".form-control-sm" aria-label=".form-control-sm example">
+ </div>
+ <div class="mb-3">
+ <select class="form-select form-select-sm" aria-label=".form-select-sm example">
+ <option selected>Open this select menu</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+ </div>
+ <div class="mb-3">
+ <input type="file" class="form-control form-control-sm" aria-label="Small file input example">
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="input-group">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Input group</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/forms/input-group" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="input-group mb-3">
+ <span class="input-group-text" id="basic-addon1">@</span>
+ <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
+ </div>
+ <div class="input-group mb-3">
+ <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="basic-addon2">
+ <span class="input-group-text" id="basic-addon2">@example.com</span>
+ </div>
+ <label for="basic-url" class="form-label">Your vanity URL</label>
+ <div class="input-group mb-3">
+ <span class="input-group-text" id="basic-addon3">https://example.com/users/</span>
+ <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
+ </div>
+ <div class="input-group mb-3">
+ <span class="input-group-text">$</span>
+ <input type="text" class="form-control" aria-label="Amount (to the nearest dollar)">
+ <span class="input-group-text">.00</span>
+ </div>
+ <div class="input-group">
+ <span class="input-group-text">With textarea</span>
+ <textarea class="form-control" aria-label="With textarea"></textarea>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="floating-labels">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Floating labels</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/forms/floating-labels" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <form>
+ <div class="form-floating mb-3">
+ <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
+ <label for="floatingInput">Email address</label>
+ </div>
+ <div class="form-floating">
+ <input type="password" class="form-control" id="floatingPassword" placeholder="Password">
+ <label for="floatingPassword">Password</label>
+ </div>
+ </form>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="validation">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Validation</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/forms/validation" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <form class="row g-3">
+ <div class="col-md-4">
+ <label for="validationServer01" class="form-label">First name</label>
+ <input type="text" class="form-control is-valid" id="validationServer01" value="Mark" required>
+ <div class="valid-feedback">
+ Looks good!
+ </div>
+ </div>
+ <div class="col-md-4">
+ <label for="validationServer02" class="form-label">Last name</label>
+ <input type="text" class="form-control is-valid" id="validationServer02" value="Otto" required>
+ <div class="valid-feedback">
+ Looks good!
+ </div>
+ </div>
+ <div class="col-md-4">
+ <label for="validationServerUsername" class="form-label">Username</label>
+ <div class="input-group has-validation">
+ <span class="input-group-text" id="inputGroupPrepend3">@</span>
+ <input type="text" class="form-control is-invalid" id="validationServerUsername" aria-describedby="inputGroupPrepend3" required>
+ <div class="invalid-feedback">
+ Please choose a username.
+ </div>
+ </div>
+ </div>
+ <div class="col-md-6">
+ <label for="validationServer03" class="form-label">City</label>
+ <input type="text" class="form-control is-invalid" id="validationServer03" required>
+ <div class="invalid-feedback">
+ Please provide a valid city.
+ </div>
+ </div>
+ <div class="col-md-3">
+ <label for="validationServer04" class="form-label">State</label>
+ <select class="form-select is-invalid" id="validationServer04" required>
+ <option selected disabled value="">Choose...</option>
+ <option>...</option>
+ </select>
+ <div class="invalid-feedback">
+ Please select a valid state.
+ </div>
+ </div>
+ <div class="col-md-3">
+ <label for="validationServer05" class="form-label">Zip</label>
+ <input type="text" class="form-control is-invalid" id="validationServer05" required>
+ <div class="invalid-feedback">
+ Please provide a valid zip.
+ </div>
+ </div>
+ <div class="col-12">
+ <div class="form-check">
+ <input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" required>
+ <label class="form-check-label" for="invalidCheck3">
+ Agree to terms and conditions
+ </label>
+ <div class="invalid-feedback">
+ You must agree before submitting.
+ </div>
+ </div>
+ </div>
+ <div class="col-12">
+ <button class="btn btn-primary" type="submit">Submit form</button>
+ </div>
+ </form>
+ {{< /example >}}
+ </div>
+ </article>
+ </section>
+
+ <section id="components">
+ <h2 class="sticky-xl-top fw-bold pt-3 pt-xl-5 pb-2 pb-xl-3">Components</h2>
+
+ <article class="my-3" id="accordion">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Accordion</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/accordion" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="accordion" id="accordionExample">
+ <div class="accordion-item">
+ <h4 class="accordion-header" id="headingOne">
+ <button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
+ Accordion Item #1
+ </button>
+ </h4>
+ <div id="collapseOne" class="accordion-collapse collapse show" aria-labelledby="headingOne" data-bs-parent="#accordionExample">
+ <div class="accordion-body">
+ <strong>This is the first item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
+ </div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h4 class="accordion-header" id="headingTwo">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
+ Accordion Item #2
+ </button>
+ </h4>
+ <div id="collapseTwo" class="accordion-collapse collapse" aria-labelledby="headingTwo" data-bs-parent="#accordionExample">
+ <div class="accordion-body">
+ <strong>This is the second item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
+ </div>
+ </div>
+ </div>
+ <div class="accordion-item">
+ <h4 class="accordion-header" id="headingThree">
+ <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
+ Accordion Item #3
+ </button>
+ </h4>
+ <div id="collapseThree" class="accordion-collapse collapse" aria-labelledby="headingThree" data-bs-parent="#accordionExample">
+ <div class="accordion-body">
+ <strong>This is the third item's accordion body.</strong> It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the <code>.accordion-body</code>, though the transition does limit overflow.
+ </div>
+ </div>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="alerts">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Alerts</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/alerts" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ {{< alerts.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <div class="alert alert-{{ .name }} alert-dismissible fade show" role="alert">
+ A simple {{ .name }} alert with <a href="#" class="alert-link">an example link</a>. Give it a click if you like.
+ <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
+ </div>{{ end -}}
+ {{< /alerts.inline >}}
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="alert alert-success" role="alert">
+ <h4 class="alert-heading">Well done!</h4>
+ <p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.</p>
+ <hr>
+ <p class="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="badge">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Badge</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/badge" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <p class="h1">Example heading <span class="badge bg-primary">New</span></p>
+ <p class="h2">Example heading <span class="badge bg-secondary">New</span></p>
+ <p class="h3">Example heading <span class="badge bg-success">New</span></p>
+ <p class="h4">Example heading <span class="badge bg-danger">New</span></p>
+ <p class="h5">Example heading <span class="badge text-bg-warning">New</span></p>
+ <p class="h6">Example heading <span class="badge text-bg-info">New</span></p>
+ <p class="h6">Example heading <span class="badge text-bg-light">New</span></p>
+ <p class="h6">Example heading <span class="badge bg-dark">New</span></p>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ {{< badge.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <span class="badge rounded-pill {{ if or (eq .name "light") (eq .name "warning") (eq .name "info") }}text-{{ end }}bg-{{ .name }}">{{ .name | title }}</span>{{- end -}}
+ {{< /badge.inline >}}
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="breadcrumb">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Breadcrumb</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/breadcrumb" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <nav aria-label="breadcrumb">
+ <ol class="breadcrumb">
+ <li class="breadcrumb-item"><a href="#">Home</a></li>
+ <li class="breadcrumb-item"><a href="#">Library</a></li>
+ <li class="breadcrumb-item active" aria-current="page">Data</li>
+ </ol>
+ </nav>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="buttons">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Buttons</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/buttons" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ {{< buttons.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <button type="button" class="btn btn-{{ .name }}">{{ .name | title }}</button>
+ {{- end -}}
+ {{< /buttons.inline >}}
+
+ <button type="button" class="btn btn-link">Link</button>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ {{< buttons.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <button type="button" class="btn btn-outline-{{ .name }}">{{ .name | title }}</button>
+ {{- end -}}
+ {{< /buttons.inline >}}
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <button type="button" class="btn btn-primary btn-sm">Small button</button>
+ <button type="button" class="btn btn-primary">Standard button</button>
+ <button type="button" class="btn btn-primary btn-lg">Large button</button>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="button-group">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Button group</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/button-group" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="btn-toolbar" role="toolbar" aria-label="Toolbar with button groups">
+ <div class="btn-group me-2" role="group" aria-label="First group">
+ <button type="button" class="btn btn-secondary">1</button>
+ <button type="button" class="btn btn-secondary">2</button>
+ <button type="button" class="btn btn-secondary">3</button>
+ <button type="button" class="btn btn-secondary">4</button>
+ </div>
+ <div class="btn-group me-2" role="group" aria-label="Second group">
+ <button type="button" class="btn btn-secondary">5</button>
+ <button type="button" class="btn btn-secondary">6</button>
+ <button type="button" class="btn btn-secondary">7</button>
+ </div>
+ <div class="btn-group" role="group" aria-label="Third group">
+ <button type="button" class="btn btn-secondary">8</button>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="card">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Card</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/card" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="row row-cols-1 row-cols-md-2 g-4">
+ <div class="col">
+ <div class="card">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="Image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ <div class="card-header">
+ Featured
+ </div>
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ <a href="#" class="btn btn-primary">Go somewhere</a>
+ </div>
+ <div class="card-footer text-muted">
+ 2 days ago
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ </div>
+ <ul class="list-group list-group-flush">
+ <li class="list-group-item">An item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ </ul>
+ <div class="card-body">
+ <a href="#" class="card-link">Card link</a>
+ <a href="#" class="card-link">Another link</a>
+ </div>
+ </div>
+ </div>
+ <div class="col">
+ <div class="card">
+ <div class="row g-0">
+ <div class="col-md-4">
+ {{< placeholder width="100%" height="250" text="Image" >}}
+ </div>
+ <div class="col-md-8">
+ <div class="card-body">
+ <h5 class="card-title">Card title</h5>
+ <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p>
+ <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="carousel">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Carousel</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/carousel" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div id="carouselExampleCaptions" class="carousel slide" data-bs-ride="carousel">
+ <div class="carousel-indicators">
+ <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
+ <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="Slide 2"></button>
+ <button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="Slide 3"></button>
+ </div>
+ <div class="carousel-inner">
+ <div class="carousel-item active">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#555" background="#777" text="First slide" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>First slide label</h5>
+ <p>Some representative placeholder content for the first slide.</p>
+ </div>
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#444" background="#666" text="Second slide" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>Second slide label</h5>
+ <p>Some representative placeholder content for the second slide.</p>
+ </div>
+ </div>
+ <div class="carousel-item">
+ {{< placeholder width="800" height="400" class="bd-placeholder-img-lg d-block w-100" color="#333" background="#555" text="Third slide" >}}
+ <div class="carousel-caption d-none d-md-block">
+ <h5>Third slide label</h5>
+ <p>Some representative placeholder content for the third slide.</p>
+ </div>
+ </div>
+ </div>
+ <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
+ <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Previous</span>
+ </button>
+ <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
+ <span class="carousel-control-next-icon" aria-hidden="true"></span>
+ <span class="visually-hidden">Next</span>
+ </button>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="dropdowns">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Dropdowns</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/dropdowns" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
+ <div class="dropdown">
+ <button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown button
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">Dropdown header</h6></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ <div class="dropdown">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown button
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">Dropdown header</h6></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ <div class="dropdown">
+ <button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown button
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">Dropdown header</h6></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="btn-group">
+ <button type="button" class="btn btn-primary">Primary</button>
+ <button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-secondary">Secondary</button>
+ <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-success">Success</button>
+ <button type="button" class="btn btn-success dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-info">Info</button>
+ <button type="button" class="btn btn-info dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-warning">Warning</button>
+ <button type="button" class="btn btn-warning dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ <div class="btn-group">
+ <button type="button" class="btn btn-danger">Danger</button>
+ <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </div><!-- /btn-group -->
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
+ <div class="dropend">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropend button
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">Dropdown header</h6></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ <div class="dropup">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropup button
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">Dropdown header</h6></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ <div class="dropstart">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropstart button
+ </button>
+ <ul class="dropdown-menu">
+ <li><h6 class="dropdown-header">Dropdown header</h6></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="btn-group">
+ <div class="dropdown">
+ <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ End-aligned menu
+ </button>
+ <ul class="dropdown-menu dropdown-menu-end">
+ <li><h6 class="dropdown-header">Dropdown header</h6></li>
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="list-group">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>List group</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/list-group" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <ul class="list-group">
+ <li class="list-group-item disabled" aria-disabled="true">A disabled item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ <li class="list-group-item">A fourth item</li>
+ <li class="list-group-item">And a fifth one</li>
+ </ul>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <ul class="list-group list-group-flush">
+ <li class="list-group-item">An item</li>
+ <li class="list-group-item">A second item</li>
+ <li class="list-group-item">A third item</li>
+ <li class="list-group-item">A fourth item</li>
+ <li class="list-group-item">And a fifth one</li>
+ </ul>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="list-group">
+ <a href="#" class="list-group-item list-group-item-action">A simple default list group item</a>
+ {{< list.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <a href="#" class="list-group-item list-group-item-action list-group-item-{{ .name }}">A simple {{ .name }} list group item</a>
+ {{- end -}}
+ {{< /list.inline >}}
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="modal">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Modal</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/modal" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="d-flex justify-content-between flex-wrap">
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalDefault">
+ Launch demo modal
+ </button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdropLive">
+ Launch static backdrop modal
+ </button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalCenteredScrollable">
+ Vertically centered scrollable modal
+ </button>
+ <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModalFullscreen">
+ Full screen
+ </button>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="navs">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Navs</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/navs-tabs" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <nav class="nav">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link disabled">Disabled</a>
+ </nav>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <nav>
+ <div class="nav nav-tabs mb-3" id="nav-tab" role="tablist">
+ <button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Home</button>
+ <button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</button>
+ <button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</button>
+ </div>
+ </nav>
+ <div class="tab-content" id="nav-tabContent">
+ <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab">
+ <p>This is some placeholder content the <strong>Home tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab">
+ <p>This is some placeholder content the <strong>Profile tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab">
+ <p>This is some placeholder content the <strong>Contact tab's</strong> associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other <code>.nav</code>-powered navigation.</p>
+ </div>
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <ul class="nav nav-pills">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Active</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="navbar">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Navbar</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/navbar" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <nav class="navbar navbar-expand-lg bg-light">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="d-inline-block align-top" alt="Bootstrap" loading="lazy"
+ style="filter: invert(1) grayscale(100%) brightness(200%);">
+ </a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-dark" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg navbar-dark bg-primary mt-5">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">
+ <img src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" width="38" height="30" class="d-inline-block align-top" alt="Bootstrap" loading="lazy">
+ </a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent2" aria-controls="navbarSupportedContent2" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarSupportedContent2">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-light" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </nav>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="pagination">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Pagination</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/pagination" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <nav aria-label="Pagination example">
+ <ul class="pagination pagination-sm">
+ <li class="page-item"><a class="page-link" href="#">1</a></li>
+ <li class="page-item active" aria-current="page">
+ <a class="page-link" href="#">2</a>
+ </li>
+ <li class="page-item"><a class="page-link" href="#">3</a></li>
+ </ul>
+ </nav>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <nav aria-label="Standard pagination example">
+ <ul class="pagination">
+ <li class="page-item">
+ <a class="page-link" href="#" aria-label="Previous">
+ <span aria-hidden="true">&laquo;</span>
+ </a>
+ </li>
+ <li class="page-item"><a class="page-link" href="#">1</a></li>
+ <li class="page-item"><a class="page-link" href="#">2</a></li>
+ <li class="page-item"><a class="page-link" href="#">3</a></li>
+ <li class="page-item">
+ <a class="page-link" href="#" aria-label="Next">
+ <span aria-hidden="true">&raquo;</span>
+ </a>
+ </li>
+ </ul>
+ </nav>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <nav aria-label="Another pagination example">
+ <ul class="pagination pagination-lg flex-wrap">
+ <li class="page-item disabled">
+ <a class="page-link">Previous</a>
+ </li>
+ <li class="page-item"><a class="page-link" href="#">1</a></li>
+ <li class="page-item active" aria-current="page">
+ <a class="page-link" href="#">2</a>
+ </li>
+ <li class="page-item"><a class="page-link" href="#">3</a></li>
+ <li class="page-item">
+ <a class="page-link" href="#">Next</a>
+ </li>
+ </ul>
+ </nav>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="popovers">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Popovers</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/popovers" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
+ Popover on top
+ </button>
+ <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
+ Popover on end
+ </button>
+ <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
+ Popover on bottom
+ </button>
+ <button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
+ Popover on start
+ </button>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="progress">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Progress</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/progress" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ <div class="progress mb-3" role="progressbar" aria-label="Example with label" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar">0%</div>
+ </div>
+ <div class="progress mb-3" role="progressbar" aria-label="Success example with label" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar bg-success w-25">25%</div>
+ </div>
+ <div class="progress mb-3" role="progressbar" aria-label="Info example with label" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar text-bg-info w-50">50%</div>
+ </div>
+ <div class="progress mb-3" role="progressbar" aria-label="Warning example with label" aria-valuenow="75" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar text-bg-warning w-75">75%</div>
+ </div>
+ <div class="progress" role="progressbar" aria-label="Danger example with label" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar bg-danger w-100">100%</div>
+ </div>
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ <div class="progress-stacked">
+ <div class="progress" role="progressbar" aria-label="Segment one - default example" style="width: 15%" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar"></div>
+ </div>
+ <div class="progress" role="progressbar" aria-label="Segment two - animated striped success example" style="width: 40%" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar progress-bar-striped progress-bar-animated bg-success"></div>
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="scrollspy">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Scrollspy</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/scrollspy" >}}">Documentation</a>
+ </div>
+
+ <div>
+ <div class="bd-example">
+ <nav id="navbar-example2" class="navbar bg-light px-3">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <ul class="nav nav-pills">
+ <li class="nav-item">
+ <a class="nav-link active" href="#scrollspyHeading1">First</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#scrollspyHeading2">Second</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#scrollspyHeading3">Third</a></li>
+ <li><a class="dropdown-item" href="#scrollspyHeading4">Fourth</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#scrollspyHeading5">Fifth</a></li>
+ </ul>
+ </li>
+ </ul>
+ </nav>
+ <div data-bs-spy="scroll" data-bs-target="#navbar-example2" data-bs-offset="0" class="scrollspy-example position-relative mt-2 overflow-auto" tabindex="0">
+ <h4 id="scrollspyHeading1">First heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="scrollspyHeading2">Second heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="scrollspyHeading3">Third heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="scrollspyHeading4">Fourth heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ <h4 id="scrollspyHeading5">Fifth heading</h4>
+ <p>This is some placeholder content for the scrollspy page. Note that as you scroll down the page, the appropriate navigation link is highlighted. It's repeated throughout the component example. We keep adding some more example copy here to emphasize the scrolling and highlighting.</p>
+ </div>
+ </div>
+ </div>
+ </article>
+ <article class="my-3" id="spinners">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Spinners</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/spinners" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" >}}
+ {{< spinner.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <div class="spinner-border text-{{ .name }}" role="status">
+ <span class="visually-hidden">Loading...</span>
+ </div>
+ {{- end -}}
+ {{< /spinner.inline >}}
+ {{< /example >}}
+
+ {{< example show_markup="false" >}}
+ {{< spinner.inline >}}
+ {{- range (index $.Site.Data "theme-colors") }}
+ <div class="spinner-grow text-{{ .name }}" role="status">
+ <span class="visually-hidden">Loading...</span>
+ </div>
+ {{- end -}}
+ {{< /spinner.inline >}}
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="my-3" id="toasts">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Toasts</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/toasts" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" class="bg-dark p-5 align-items-center" >}}
+ <div class="toast" role="alert" aria-live="assertive" aria-atomic="true">
+ <div class="toast-header">
+ {{< placeholder width="20" height="20" background="#007aff" class="rounded me-2" text="false" title="false" >}}
+ <strong class="me-auto">Bootstrap</strong>
+ <small class="text-muted">11 mins ago</small>
+ <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>
+ </div>
+ <div class="toast-body">
+ Hello, world! This is a toast message.
+ </div>
+ </div>
+ {{< /example >}}
+ </div>
+ </article>
+ <article class="mt-3 mb-5 pb-5" id="tooltips">
+ <div class="bd-heading sticky-xl-top align-self-start mt-5 mb-3 mt-xl-0 mb-xl-2">
+ <h3>Tooltips</h3>
+ <a class="d-flex align-items-center" href="{{< docsref "/components/tooltips" >}}">Documentation</a>
+ </div>
+
+ <div>
+ {{< example show_markup="false" class="tooltip-demo" >}}
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top">Tooltip on top</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" title="Tooltip on end">Tooltip on end</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" title="Tooltip on bottom">Tooltip on bottom</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" title="Tooltip on start">Tooltip on start</button>
+ <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">Tooltip with HTML</button>
+ {{< /example >}}
+ </div>
+ </article>
+ </section>
+</div>
+
+<div class="modal fade" id="exampleModalDefault" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalLabel">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+<div class="modal fade" id="staticBackdropLive" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLiveLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="staticBackdropLiveLabel">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <p>I will not close if you click outside me. Don't even try to press escape key.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Understood</button>
+ </div>
+ </div>
+ </div>
+</div>
+<div class="modal fade" id="exampleModalCenteredScrollable" tabindex="-1" aria-labelledby="exampleModalCenteredScrollableTitle" aria-hidden="true">
+ <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-5" id="exampleModalCenteredScrollableTitle">Modal title</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <p>This is some placeholder content to show the scrolling behavior for modals. We use repeated line breaks to demonstrate how content can exceed minimum inner height, thereby showing inner scrolling. When content becomes longer than the predefined max-height of modal, content will be cropped and scrollable within the modal.</p>
+ <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
+ <p>This content should appear at the bottom after you scroll.</p>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-primary">Save changes</button>
+ </div>
+ </div>
+ </div>
+</div>
+<div class="modal fade" id="exampleModalFullscreen" tabindex="-1" aria-labelledby="exampleModalFullscreenLabel" aria-hidden="true">
+ <div class="modal-dialog modal-fullscreen">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h1 class="modal-title fs-4" id="exampleModalFullscreenLabel">Full screen modal</h1>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ ...
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout-rtl/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout-rtl/index.html
new file mode 100644
index 000000000..e2a7971c1
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout-rtl/index.html
@@ -0,0 +1,232 @@
+---
+layout: examples
+title: مثال إتمام الشراء
+direction: rtl
+extra_css:
+ - "../checkout/checkout.css"
+extra_js:
+ - src: "../checkout/checkout.js"
+body_class: "bg-light"
+---
+
+<div class="container">
+ <main>
+ <div class="py-5 text-center">
+ <img class="d-block mx-auto mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="" width="72" height="57">
+ <h2>نموذج إتمام الشراء</h2>
+ <p class="lead">فيما يلي مثال على نموذج تم إنشاؤه بالكامل باستخدام عناصر تحكم النموذج في Bootstrap. لكل مجموعة نماذج مطلوبة حالة تحقق يمكن تشغيلها بمحاولة إرسال النموذج دون استكماله.</p>
+ </div>
+
+ <div class="row g-3">
+ <div class="col-md-5 col-lg-4 order-md-last">
+ <h4 class="d-flex justify-content-between align-items-center mb-3">
+ <span class="text-muted">عربة التسوق</span>
+ <span class="badge bg-secondary rounded-pill">3</span>
+ </h4>
+ <ul class="list-group mb-3">
+ <li class="list-group-item d-flex justify-content-between lh-sm">
+ <div>
+ <h6 class="my-0">اسم المنتج</h6>
+ <small class="text-muted">وصف مختصر</small>
+ </div>
+ <span class="text-muted">$12</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between lh-sm">
+ <div>
+ <h6 class="my-0">المنتج الثاني</h6>
+ <small class="text-muted">وصف مختصر</small>
+ </div>
+ <span class="text-muted">$8</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between lh-sm">
+ <div>
+ <h6 class="my-0">البند الثالث</h6>
+ <small class="text-muted">وصف مختصر</small>
+ </div>
+ <span class="text-muted">$5</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between bg-light">
+ <div class="text-success">
+ <h6 class="my-0">رمز ترويجي</h6>
+ <small>EXAMPLECODE</small>
+ </div>
+ <span class="text-success">-$5</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between">
+ <span>مجموع (USD)</span>
+ <strong>$20</strong>
+ </li>
+ </ul>
+
+ <form class="card p-2">
+ <div class="input-group">
+ <input type="text" class="form-control" placeholder="رمز ترويجي">
+ <button type="submit" class="btn btn-secondary">تحقق</button>
+ </div>
+ </form>
+ </div>
+ <div class="col-md-7 col-lg-8">
+ <h4 class="mb-3">عنوان الفوترة</h4>
+ <form class="needs-validation" novalidate>
+ <div class="row g-3">
+ <div class="col-sm-6">
+ <label for="firstName" class="form-label">الاسم الأول</label>
+ <input type="text" class="form-control" id="firstName" placeholder="" value="" required>
+ <div class="invalid-feedback">
+ يرجى إدخال اسم أول صحيح.
+ </div>
+ </div>
+
+ <div class="col-sm-6">
+ <label for="lastName" class="form-label">اسم العائلة</label>
+ <input type="text" class="form-control" id="lastName" placeholder="" value="" required>
+ <div class="invalid-feedback">
+ يرجى إدخال اسم عائلة صحيح.
+ </div>
+ </div>
+
+ <div class="col-12">
+ <label for="username" class="form-label">اسم المستخدم</label>
+ <div class="input-group has-validation">
+ <span class="input-group-text">@</span>
+ <input type="text" class="form-control" id="username" placeholder="اسم المستخدم" required>
+ <div class="invalid-feedback">
+ اسم المستخدم الخاص بك مطلوب.
+ </div>
+ </div>
+ </div>
+
+ <div class="col-12">
+ <label for="email" class="form-label">البريد الإلكتروني <span class="text-muted">(اختياري)</span></label>
+ <input type="email" class="form-control" id="email" placeholder="you@example.com">
+ <div class="invalid-feedback">
+ يرجى إدخال عنوان بريد إلكتروني صحيح لتصلكم تحديثات الشحن.
+ </div>
+ </div>
+
+ <div class="col-12">
+ <label for="address" class="form-label">العنوان</label>
+ <input type="text" class="form-control" id="address" placeholder="1234 الشارع الأول" required>
+ <div class="invalid-feedback">
+ يرجى إدخال عنوان الشحن الخاص بك.
+ </div>
+ </div>
+
+ <div class="col-12">
+ <label for="address2" class="form-label">عنوان 2 <span class="text-muted">(اختياري)</span></label>
+ <input type="text" class="form-control" id="address2" placeholder="شقة 24">
+ </div>
+
+ <div class="col-md-5">
+ <label for="country" class="form-label">البلد</label>
+ <select class="form-select" id="country" required>
+ <option value="">اختر...</option>
+ <option>الولايات المتحدة الأمريكية</option>
+ </select>
+ <div class="invalid-feedback">
+ يرجى اختيار بلد صحيح.
+ </div>
+ </div>
+
+ <div class="col-md-4">
+ <label for="state" class="form-label">المنطقة</label>
+ <select class="form-select" id="state" required>
+ <option value="">اختر...</option>
+ <option>كاليفورنيا</option>
+ </select>
+ <div class="invalid-feedback">
+ يرجى اختيار اسم منطقة صحيح.
+ </div>
+ </div>
+
+ <div class="col-md-3">
+ <label for="zip" class="form-label">الرمز البريدي</label>
+ <input type="text" class="form-control" id="zip" placeholder="" required>
+ <div class="invalid-feedback">
+ الرمز البريدي مطلوب.
+ </div>
+ </div>
+ </div>
+
+ <hr class="my-4">
+
+ <div class="form-check">
+ <input type="checkbox" class="form-check-input" id="same-address">
+ <label class="form-check-label" for="same-address">عنوان الشحن هو نفس عنوان الفوترة الخاص بي</label>
+ </div>
+
+ <div class="form-check">
+ <input type="checkbox" class="form-check-input" id="save-info">
+ <label class="form-check-label" for="save-info">احفظ هذه المعلومات في المرة القادمة</label>
+ </div>
+
+ <hr class="my-4">
+
+ <h4 class="mb-3">طريقة الدفع</h4>
+
+ <div class="my-3">
+ <div class="form-check">
+ <input id="credit" name="paymentMethod" type="radio" class="form-check-input" checked required>
+ <label class="form-check-label" for="credit">بطاقة ائتمان</label>
+ </div>
+ <div class="form-check">
+ <input id="cash" name="paymentMethod" type="radio" class="form-check-input" required>
+ <label class="form-check-label" for="cash">نقد</label>
+ </div>
+ <div class="form-check">
+ <input id="paypal" name="paymentMethod" type="radio" class="form-check-input" required>
+ <label class="form-check-label" for="paypal">PayPal</label>
+ </div>
+ </div>
+
+ <div class="row gy-3">
+ <div class="col-md-6">
+ <label for="cc-name" class="form-label">الاسم على البطاقة</label>
+ <input type="text" class="form-control" id="cc-name" placeholder="" required>
+ <small class="text-muted">الاسم الكامل كما هو معروض على البطاقة</small>
+ <div class="invalid-feedback">
+ الاسم على البطاقة مطلوب
+ </div>
+ </div>
+
+ <div class="col-md-6">
+ <label for="cc-number" class="form-label">رقم البطاقة</label>
+ <input type="text" class="form-control" id="cc-number" placeholder="" required>
+ <div class="invalid-feedback">
+ رقم بطاقة الائتمان مطلوب
+ </div>
+ </div>
+
+ <div class="col-md-3">
+ <label for="cc-expiration" class="form-label">تاريخ انتهاء الصلاحية</label>
+ <input type="text" class="form-control" id="cc-expiration" placeholder="" required>
+ <div class="invalid-feedback">
+ تاريخ انتهاء الصلاحية مطلوب
+ </div>
+ </div>
+
+ <div class="col-md-3">
+ <label for="cc-cvv" class="form-label">الرمز الثلاثي (CVV)</label>
+ <input type="text" class="form-control" id="cc-cvv" placeholder="" required>
+ <div class="invalid-feedback">
+ رمز الحماية مطلوب
+ </div>
+ </div>
+ </div>
+
+ <hr class="my-4">
+
+ <button class="w-100 btn btn-primary btn-lg" type="submit">الاستمرار بالدفع</button>
+ </form>
+ </div>
+ </div>
+ </main>
+ <footer class="my-5 pt-5 text-muted text-center text-small">
+ <p class="mb-1">&copy; {{< year >}}-2017 اسم الشركة</p>
+ <ul class="list-inline">
+ <li class="list-inline-item"><a href="#">سياسة الخصوصية</a></li>
+ <li class="list-inline-item"><a href="#">اتفاقية الاستخدام</a></li>
+ <li class="list-inline-item"><a href="#">الدعم الفني</a></li>
+ </ul>
+ </footer>
+</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/form-validation.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/checkout.css
index e5ea31c40..e5ea31c40 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/form-validation.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/checkout.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/form-validation.js b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/checkout.js
index 30ea0aa6b..30ea0aa6b 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/checkout/form-validation.js
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/checkout.js
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/index.html
new file mode 100644
index 000000000..ba415f0d9
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/checkout/index.html
@@ -0,0 +1,232 @@
+---
+layout: examples
+title: Checkout example
+extra_css:
+ - "checkout.css"
+extra_js:
+ - src: "checkout.js"
+body_class: "bg-light"
+---
+
+<div class="container">
+ <main>
+ <div class="py-5 text-center">
+ <img class="d-block mx-auto mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="" width="72" height="57">
+ <h2>Checkout form</h2>
+ <p class="lead">Below is an example form built entirely with Bootstrap’s form controls. Each required form group has a validation state that can be triggered by attempting to submit the form without completing it.</p>
+ </div>
+
+ <div class="row g-5">
+ <div class="col-md-5 col-lg-4 order-md-last">
+ <h4 class="d-flex justify-content-between align-items-center mb-3">
+ <span class="text-primary">Your cart</span>
+ <span class="badge bg-primary rounded-pill">3</span>
+ </h4>
+ <ul class="list-group mb-3">
+ <li class="list-group-item d-flex justify-content-between lh-sm">
+ <div>
+ <h6 class="my-0">Product name</h6>
+ <small class="text-muted">Brief description</small>
+ </div>
+ <span class="text-muted">$12</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between lh-sm">
+ <div>
+ <h6 class="my-0">Second product</h6>
+ <small class="text-muted">Brief description</small>
+ </div>
+ <span class="text-muted">$8</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between lh-sm">
+ <div>
+ <h6 class="my-0">Third item</h6>
+ <small class="text-muted">Brief description</small>
+ </div>
+ <span class="text-muted">$5</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between bg-light">
+ <div class="text-success">
+ <h6 class="my-0">Promo code</h6>
+ <small>EXAMPLECODE</small>
+ </div>
+ <span class="text-success">−$5</span>
+ </li>
+ <li class="list-group-item d-flex justify-content-between">
+ <span>Total (USD)</span>
+ <strong>$20</strong>
+ </li>
+ </ul>
+
+ <form class="card p-2">
+ <div class="input-group">
+ <input type="text" class="form-control" placeholder="Promo code">
+ <button type="submit" class="btn btn-secondary">Redeem</button>
+ </div>
+ </form>
+ </div>
+ <div class="col-md-7 col-lg-8">
+ <h4 class="mb-3">Billing address</h4>
+ <form class="needs-validation" novalidate>
+ <div class="row g-3">
+ <div class="col-sm-6">
+ <label for="firstName" class="form-label">First name</label>
+ <input type="text" class="form-control" id="firstName" placeholder="" value="" required>
+ <div class="invalid-feedback">
+ Valid first name is required.
+ </div>
+ </div>
+
+ <div class="col-sm-6">
+ <label for="lastName" class="form-label">Last name</label>
+ <input type="text" class="form-control" id="lastName" placeholder="" value="" required>
+ <div class="invalid-feedback">
+ Valid last name is required.
+ </div>
+ </div>
+
+ <div class="col-12">
+ <label for="username" class="form-label">Username</label>
+ <div class="input-group has-validation">
+ <span class="input-group-text">@</span>
+ <input type="text" class="form-control" id="username" placeholder="Username" required>
+ <div class="invalid-feedback">
+ Your username is required.
+ </div>
+ </div>
+ </div>
+
+ <div class="col-12">
+ <label for="email" class="form-label">Email <span class="text-muted">(Optional)</span></label>
+ <input type="email" class="form-control" id="email" placeholder="you@example.com">
+ <div class="invalid-feedback">
+ Please enter a valid email address for shipping updates.
+ </div>
+ </div>
+
+ <div class="col-12">
+ <label for="address" class="form-label">Address</label>
+ <input type="text" class="form-control" id="address" placeholder="1234 Main St" required>
+ <div class="invalid-feedback">
+ Please enter your shipping address.
+ </div>
+ </div>
+
+ <div class="col-12">
+ <label for="address2" class="form-label">Address 2 <span class="text-muted">(Optional)</span></label>
+ <input type="text" class="form-control" id="address2" placeholder="Apartment or suite">
+ </div>
+
+ <div class="col-md-5">
+ <label for="country" class="form-label">Country</label>
+ <select class="form-select" id="country" required>
+ <option value="">Choose...</option>
+ <option>United States</option>
+ </select>
+ <div class="invalid-feedback">
+ Please select a valid country.
+ </div>
+ </div>
+
+ <div class="col-md-4">
+ <label for="state" class="form-label">State</label>
+ <select class="form-select" id="state" required>
+ <option value="">Choose...</option>
+ <option>California</option>
+ </select>
+ <div class="invalid-feedback">
+ Please provide a valid state.
+ </div>
+ </div>
+
+ <div class="col-md-3">
+ <label for="zip" class="form-label">Zip</label>
+ <input type="text" class="form-control" id="zip" placeholder="" required>
+ <div class="invalid-feedback">
+ Zip code required.
+ </div>
+ </div>
+ </div>
+
+ <hr class="my-4">
+
+ <div class="form-check">
+ <input type="checkbox" class="form-check-input" id="same-address">
+ <label class="form-check-label" for="same-address">Shipping address is the same as my billing address</label>
+ </div>
+
+ <div class="form-check">
+ <input type="checkbox" class="form-check-input" id="save-info">
+ <label class="form-check-label" for="save-info">Save this information for next time</label>
+ </div>
+
+ <hr class="my-4">
+
+ <h4 class="mb-3">Payment</h4>
+
+ <div class="my-3">
+ <div class="form-check">
+ <input id="credit" name="paymentMethod" type="radio" class="form-check-input" checked required>
+ <label class="form-check-label" for="credit">Credit card</label>
+ </div>
+ <div class="form-check">
+ <input id="debit" name="paymentMethod" type="radio" class="form-check-input" required>
+ <label class="form-check-label" for="debit">Debit card</label>
+ </div>
+ <div class="form-check">
+ <input id="paypal" name="paymentMethod" type="radio" class="form-check-input" required>
+ <label class="form-check-label" for="paypal">PayPal</label>
+ </div>
+ </div>
+
+ <div class="row gy-3">
+ <div class="col-md-6">
+ <label for="cc-name" class="form-label">Name on card</label>
+ <input type="text" class="form-control" id="cc-name" placeholder="" required>
+ <small class="text-muted">Full name as displayed on card</small>
+ <div class="invalid-feedback">
+ Name on card is required
+ </div>
+ </div>
+
+ <div class="col-md-6">
+ <label for="cc-number" class="form-label">Credit card number</label>
+ <input type="text" class="form-control" id="cc-number" placeholder="" required>
+ <div class="invalid-feedback">
+ Credit card number is required
+ </div>
+ </div>
+
+ <div class="col-md-3">
+ <label for="cc-expiration" class="form-label">Expiration</label>
+ <input type="text" class="form-control" id="cc-expiration" placeholder="" required>
+ <div class="invalid-feedback">
+ Expiration date required
+ </div>
+ </div>
+
+ <div class="col-md-3">
+ <label for="cc-cvv" class="form-label">CVV</label>
+ <input type="text" class="form-control" id="cc-cvv" placeholder="" required>
+ <div class="invalid-feedback">
+ Security code required
+ </div>
+ </div>
+ </div>
+
+ <hr class="my-4">
+
+ <button class="w-100 btn btn-primary btn-lg" type="submit">Continue to checkout</button>
+ </form>
+ </div>
+ </div>
+ </main>
+
+ <footer class="my-5 pt-5 text-muted text-center text-small">
+ <p class="mb-1">&copy; 2017–{{< year >}} Company Name</p>
+ <ul class="list-inline">
+ <li class="list-inline-item"><a href="#">Privacy</a></li>
+ <li class="list-inline-item"><a href="#">Terms</a></li>
+ <li class="list-inline-item"><a href="#">Support</a></li>
+ </ul>
+ </footer>
+</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cover/cover.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cover/cover.css
new file mode 100644
index 000000000..2e7aef8f8
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cover/cover.css
@@ -0,0 +1,50 @@
+/*
+ * Globals
+ */
+
+
+/* Custom default button */
+.btn-light,
+.btn-light:hover,
+.btn-light:focus {
+ color: #333;
+ text-shadow: none; /* Prevent inheritance from `body` */
+}
+
+
+/*
+ * Base structure
+ */
+
+body {
+ text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5);
+ box-shadow: inset 0 0 5rem rgba(0, 0, 0, .5);
+}
+
+.cover-container {
+ max-width: 42em;
+}
+
+
+/*
+ * Header
+ */
+
+.nav-masthead .nav-link {
+ color: rgba(255, 255, 255, .5);
+ border-bottom: .25rem solid transparent;
+}
+
+.nav-masthead .nav-link:hover,
+.nav-masthead .nav-link:focus {
+ border-bottom-color: rgba(255, 255, 255, .25);
+}
+
+.nav-masthead .nav-link + .nav-link {
+ margin-left: 1rem;
+}
+
+.nav-masthead .active {
+ color: #fff;
+ border-bottom-color: #fff;
+}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cover/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cover/index.html
new file mode 100644
index 000000000..80a73300d
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/cover/index.html
@@ -0,0 +1,34 @@
+---
+layout: examples
+title: Cover Template
+extra_css:
+ - "cover.css"
+html_class: "h-100"
+body_class: "d-flex h-100 text-center text-bg-dark"
+include_js: false
+---
+
+<div class="cover-container d-flex w-100 h-100 p-3 mx-auto flex-column">
+ <header class="mb-auto">
+ <div>
+ <h3 class="float-md-start mb-0">Cover</h3>
+ <nav class="nav nav-masthead justify-content-center float-md-end">
+ <a class="nav-link fw-bold py-1 px-0 active" aria-current="page" href="#">Home</a>
+ <a class="nav-link fw-bold py-1 px-0" href="#">Features</a>
+ <a class="nav-link fw-bold py-1 px-0" href="#">Contact</a>
+ </nav>
+ </div>
+ </header>
+
+ <main class="px-3">
+ <h1>Cover your page.</h1>
+ <p class="lead">Cover is a one-page template for building simple and beautiful home pages. Download, edit the text, and add your own fullscreen background photo to make it your own.</p>
+ <p class="lead">
+ <a href="#" class="btn btn-lg btn-light fw-bold border-white bg-white">Learn more</a>
+ </p>
+ </main>
+
+ <footer class="mt-auto text-white-50">
+ <p>Cover template for <a href="https://getbootstrap.com/" class="text-white">Bootstrap</a>, by <a href="https://twitter.com/mdo" class="text-white">@mdo</a>.</p>
+ </footer>
+</div>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard-rtl/dashboard.js b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard-rtl/dashboard.js
index 96e0895bf..96e0895bf 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard-rtl/dashboard.js
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard-rtl/dashboard.js
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard-rtl/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard-rtl/index.html
index bc41cc604..bc41cc604 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard-rtl/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard-rtl/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/dashboard.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/dashboard.css
index ad12048e7..ad12048e7 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/dashboard.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/dashboard.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/dashboard.js b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/dashboard.js
index e1379758b..e1379758b 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/dashboard.js
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/dashboard.js
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/dashboard.rtl.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/dashboard.rtl.css
index 31ea3cc64..31ea3cc64 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/dashboard.rtl.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/dashboard.rtl.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/index.html
index b3b40c266..b3b40c266 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dashboard/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dashboard/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dropdowns/dropdowns.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dropdowns/dropdowns.css
index 556f310a9..556f310a9 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dropdowns/dropdowns.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dropdowns/dropdowns.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dropdowns/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dropdowns/index.html
index f08f69701..f08f69701 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/dropdowns/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/dropdowns/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/features.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/features.css
index b5d658f6b..b5d658f6b 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/features.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/features.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/index.html
new file mode 100644
index 000000000..35a4ef5da
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/index.html
@@ -0,0 +1,346 @@
+---
+layout: examples
+title: Features
+extra_css:
+ - "features.css"
+body_class: ""
+---
+
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="bootstrap" viewBox="0 0 118 94">
+ <title>Bootstrap</title>
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M24.509 0c-6.733 0-11.715 5.893-11.492 12.284.214 6.14-.064 14.092-2.066 20.577C8.943 39.365 5.547 43.485 0 44.014v5.972c5.547.529 8.943 4.649 10.951 11.153 2.002 6.485 2.28 14.437 2.066 20.577C12.794 88.106 17.776 94 24.51 94H93.5c6.733 0 11.714-5.893 11.491-12.284-.214-6.14.064-14.092 2.066-20.577 2.009-6.504 5.396-10.624 10.943-11.153v-5.972c-5.547-.529-8.934-4.649-10.943-11.153-2.002-6.484-2.28-14.437-2.066-20.577C105.214 5.894 100.233 0 93.5 0H24.508zM80 57.863C80 66.663 73.436 72 62.543 72H44a2 2 0 01-2-2V24a2 2 0 012-2h18.437c9.083 0 15.044 4.92 15.044 12.474 0 5.302-4.01 10.049-9.119 10.88v.277C75.317 46.394 80 51.21 80 57.863zM60.521 28.34H49.948v14.934h8.905c6.884 0 10.68-2.772 10.68-7.727 0-4.643-3.264-7.207-9.012-7.207zM49.948 49.2v16.458H60.91c7.167 0 10.964-2.876 10.964-8.281 0-5.406-3.903-8.178-11.425-8.178H49.948z"></path>
+ </symbol>
+ <symbol id="home" viewBox="0 0 16 16">
+ <path d="M8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4.5a.5.5 0 0 0 .5-.5v-4h2v4a.5.5 0 0 0 .5.5H14a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146zM2.5 14V7.707l5.5-5.5 5.5 5.5V14H10v-4a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5v4H2.5z"/>
+ </symbol>
+ <symbol id="speedometer2" viewBox="0 0 16 16">
+ <path d="M8 4a.5.5 0 0 1 .5.5V6a.5.5 0 0 1-1 0V4.5A.5.5 0 0 1 8 4zM3.732 5.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 10a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 10zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 9.31a.91.91 0 1 0 1.302 1.258l3.434-4.297a.389.389 0 0 0-.029-.518z"/>
+ <path fill-rule="evenodd" d="M0 10a8 8 0 1 1 15.547 2.661c-.442 1.253-1.845 1.602-2.932 1.25C11.309 13.488 9.475 13 8 13c-1.474 0-3.31.488-4.615.911-1.087.352-2.49.003-2.932-1.25A7.988 7.988 0 0 1 0 10zm8-7a7 7 0 0 0-6.603 9.329c.203.575.923.876 1.68.63C4.397 12.533 6.358 12 8 12s3.604.532 4.923.96c.757.245 1.477-.056 1.68-.631A7 7 0 0 0 8 3z"/>
+ </symbol>
+ <symbol id="table" viewBox="0 0 16 16">
+ <path d="M0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm15 2h-4v3h4V4zm0 4h-4v3h4V8zm0 4h-4v3h3a1 1 0 0 0 1-1v-2zm-5 3v-3H6v3h4zm-5 0v-3H1v2a1 1 0 0 0 1 1h3zm-4-4h4V8H1v3zm0-4h4V4H1v3zm5-3v3h4V4H6zm4 4H6v3h4V8z"/>
+ </symbol>
+ <symbol id="people-circle" viewBox="0 0 16 16">
+ <path d="M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z"/>
+ <path fill-rule="evenodd" d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z"/>
+ </symbol>
+ <symbol id="grid" viewBox="0 0 16 16">
+ <path d="M1 2.5A1.5 1.5 0 0 1 2.5 1h3A1.5 1.5 0 0 1 7 2.5v3A1.5 1.5 0 0 1 5.5 7h-3A1.5 1.5 0 0 1 1 5.5v-3zM2.5 2a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3zm6.5.5A1.5 1.5 0 0 1 10.5 1h3A1.5 1.5 0 0 1 15 2.5v3A1.5 1.5 0 0 1 13.5 7h-3A1.5 1.5 0 0 1 9 5.5v-3zm1.5-.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3zM1 10.5A1.5 1.5 0 0 1 2.5 9h3A1.5 1.5 0 0 1 7 10.5v3A1.5 1.5 0 0 1 5.5 15h-3A1.5 1.5 0 0 1 1 13.5v-3zm1.5-.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3zm6.5.5A1.5 1.5 0 0 1 10.5 9h3a1.5 1.5 0 0 1 1.5 1.5v3a1.5 1.5 0 0 1-1.5 1.5h-3A1.5 1.5 0 0 1 9 13.5v-3zm1.5-.5a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3z"/>
+ </symbol>
+ <symbol id="collection" viewBox="0 0 16 16">
+ <path d="M2.5 3.5a.5.5 0 0 1 0-1h11a.5.5 0 0 1 0 1h-11zm2-2a.5.5 0 0 1 0-1h7a.5.5 0 0 1 0 1h-7zM0 13a1.5 1.5 0 0 0 1.5 1.5h13A1.5 1.5 0 0 0 16 13V6a1.5 1.5 0 0 0-1.5-1.5h-13A1.5 1.5 0 0 0 0 6v7zm1.5.5A.5.5 0 0 1 1 13V6a.5.5 0 0 1 .5-.5h13a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-.5.5h-13z"/>
+ </symbol>
+ <symbol id="calendar3" viewBox="0 0 16 16">
+ <path d="M14 0H2a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2zM1 3.857C1 3.384 1.448 3 2 3h12c.552 0 1 .384 1 .857v10.286c0 .473-.448.857-1 .857H2c-.552 0-1-.384-1-.857V3.857z"/>
+ <path d="M6.5 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm-9 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm3 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z"/>
+ </symbol>
+ <symbol id="chat-quote-fill" viewBox="0 0 16 16">
+ <path d="M16 8c0 3.866-3.582 7-8 7a9.06 9.06 0 0 1-2.347-.306c-.584.296-1.925.864-4.181 1.234-.2.032-.352-.176-.273-.362.354-.836.674-1.95.77-2.966C.744 11.37 0 9.76 0 8c0-3.866 3.582-7 8-7s8 3.134 8 7zM7.194 6.766a1.688 1.688 0 0 0-.227-.272 1.467 1.467 0 0 0-.469-.324l-.008-.004A1.785 1.785 0 0 0 5.734 6C4.776 6 4 6.746 4 7.667c0 .92.776 1.666 1.734 1.666.343 0 .662-.095.931-.26-.137.389-.39.804-.81 1.22a.405.405 0 0 0 .011.59c.173.16.447.155.614-.01 1.334-1.329 1.37-2.758.941-3.706a2.461 2.461 0 0 0-.227-.4zM11 9.073c-.136.389-.39.804-.81 1.22a.405.405 0 0 0 .012.59c.172.16.446.155.613-.01 1.334-1.329 1.37-2.758.942-3.706a2.466 2.466 0 0 0-.228-.4 1.686 1.686 0 0 0-.227-.273 1.466 1.466 0 0 0-.469-.324l-.008-.004A1.785 1.785 0 0 0 10.07 6c-.957 0-1.734.746-1.734 1.667 0 .92.777 1.666 1.734 1.666.343 0 .662-.095.931-.26z"/>
+ </symbol>
+ <symbol id="cpu-fill" viewBox="0 0 16 16">
+ <path d="M6.5 6a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3z"/>
+ <path d="M5.5.5a.5.5 0 0 0-1 0V2A2.5 2.5 0 0 0 2 4.5H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2v1H.5a.5.5 0 0 0 0 1H2A2.5 2.5 0 0 0 4.5 14v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14h1v1.5a.5.5 0 0 0 1 0V14a2.5 2.5 0 0 0 2.5-2.5h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14v-1h1.5a.5.5 0 0 0 0-1H14A2.5 2.5 0 0 0 11.5 2V.5a.5.5 0 0 0-1 0V2h-1V.5a.5.5 0 0 0-1 0V2h-1V.5a.5.5 0 0 0-1 0V2h-1V.5zm1 4.5h3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-3A1.5 1.5 0 0 1 5 9.5v-3A1.5 1.5 0 0 1 6.5 5z"/>
+ </symbol>
+ <symbol id="gear-fill" viewBox="0 0 16 16">
+ <path d="M9.405 1.05c-.413-1.4-2.397-1.4-2.81 0l-.1.34a1.464 1.464 0 0 1-2.105.872l-.31-.17c-1.283-.698-2.686.705-1.987 1.987l.169.311c.446.82.023 1.841-.872 2.105l-.34.1c-1.4.413-1.4 2.397 0 2.81l.34.1a1.464 1.464 0 0 1 .872 2.105l-.17.31c-.698 1.283.705 2.686 1.987 1.987l.311-.169a1.464 1.464 0 0 1 2.105.872l.1.34c.413 1.4 2.397 1.4 2.81 0l.1-.34a1.464 1.464 0 0 1 2.105-.872l.31.17c1.283.698 2.686-.705 1.987-1.987l-.169-.311a1.464 1.464 0 0 1 .872-2.105l.34-.1c1.4-.413 1.4-2.397 0-2.81l-.34-.1a1.464 1.464 0 0 1-.872-2.105l.17-.31c.698-1.283-.705-2.686-1.987-1.987l-.311.169a1.464 1.464 0 0 1-2.105-.872l-.1-.34zM8 10.93a2.929 2.929 0 1 1 0-5.86 2.929 2.929 0 0 1 0 5.858z"/>
+ </symbol>
+ <symbol id="speedometer" viewBox="0 0 16 16">
+ <path d="M8 2a.5.5 0 0 1 .5.5V4a.5.5 0 0 1-1 0V2.5A.5.5 0 0 1 8 2zM3.732 3.732a.5.5 0 0 1 .707 0l.915.914a.5.5 0 1 1-.708.708l-.914-.915a.5.5 0 0 1 0-.707zM2 8a.5.5 0 0 1 .5-.5h1.586a.5.5 0 0 1 0 1H2.5A.5.5 0 0 1 2 8zm9.5 0a.5.5 0 0 1 .5-.5h1.5a.5.5 0 0 1 0 1H12a.5.5 0 0 1-.5-.5zm.754-4.246a.389.389 0 0 0-.527-.02L7.547 7.31A.91.91 0 1 0 8.85 8.569l3.434-4.297a.389.389 0 0 0-.029-.518z"/>
+ <path fill-rule="evenodd" d="M6.664 15.889A8 8 0 1 1 9.336.11a8 8 0 0 1-2.672 15.78zm-4.665-4.283A11.945 11.945 0 0 1 8 10c2.186 0 4.236.585 6.001 1.606a7 7 0 1 0-12.002 0z"/>
+ </symbol>
+ <symbol id="toggles2" viewBox="0 0 16 16">
+ <path d="M9.465 10H12a2 2 0 1 1 0 4H9.465c.34-.588.535-1.271.535-2 0-.729-.195-1.412-.535-2z"/>
+ <path d="M6 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 1a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm.535-10a3.975 3.975 0 0 1-.409-1H4a1 1 0 0 1 0-2h2.126c.091-.355.23-.69.41-1H4a2 2 0 1 0 0 4h2.535z"/>
+ <path d="M14 4a4 4 0 1 1-8 0 4 4 0 0 1 8 0z"/>
+ </symbol>
+ <symbol id="tools" viewBox="0 0 16 16">
+ <path d="M1 0L0 1l2.2 3.081a1 1 0 0 0 .815.419h.07a1 1 0 0 1 .708.293l2.675 2.675-2.617 2.654A3.003 3.003 0 0 0 0 13a3 3 0 1 0 5.878-.851l2.654-2.617.968.968-.305.914a1 1 0 0 0 .242 1.023l3.356 3.356a1 1 0 0 0 1.414 0l1.586-1.586a1 1 0 0 0 0-1.414l-3.356-3.356a1 1 0 0 0-1.023-.242L10.5 9.5l-.96-.96 2.68-2.643A3.005 3.005 0 0 0 16 3c0-.269-.035-.53-.102-.777l-2.14 2.141L12 4l-.364-1.757L13.777.102a3 3 0 0 0-3.675 3.68L7.462 6.46 4.793 3.793a1 1 0 0 1-.293-.707v-.071a1 1 0 0 0-.419-.814L1 0zm9.646 10.646a.5.5 0 0 1 .708 0l3 3a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708zM3 11l.471.242.529.026.287.445.445.287.026.529L5 13l-.242.471-.026.529-.445.287-.287.445-.529.026L3 15l-.471-.242L2 14.732l-.287-.445L1.268 14l-.026-.529L1 13l.242-.471.026-.529.445-.287.287-.445.529-.026L3 11z"/>
+ </symbol>
+ <symbol id="chevron-right" viewBox="0 0 16 16">
+ <path fill-rule="evenodd" d="M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z"/>
+ </symbol>
+ <symbol id="geo-fill" viewBox="0 0 16 16">
+ <path fill-rule="evenodd" d="M4 4a4 4 0 1 1 4.5 3.969V13.5a.5.5 0 0 1-1 0V7.97A4 4 0 0 1 4 3.999zm2.493 8.574a.5.5 0 0 1-.411.575c-.712.118-1.28.295-1.655.493a1.319 1.319 0 0 0-.37.265.301.301 0 0 0-.057.09V14l.002.008a.147.147 0 0 0 .016.033.617.617 0 0 0 .145.15c.165.13.435.27.813.395.751.25 1.82.414 3.024.414s2.273-.163 3.024-.414c.378-.126.648-.265.813-.395a.619.619 0 0 0 .146-.15.148.148 0 0 0 .015-.033L12 14v-.004a.301.301 0 0 0-.057-.09 1.318 1.318 0 0 0-.37-.264c-.376-.198-.943-.375-1.655-.493a.5.5 0 1 1 .164-.986c.77.127 1.452.328 1.957.594C12.5 13 13 13.4 13 14c0 .426-.26.752-.544.977-.29.228-.68.413-1.116.558-.878.293-2.059.465-3.34.465-1.281 0-2.462-.172-3.34-.465-.436-.145-.826-.33-1.116-.558C3.26 14.752 3 14.426 3 14c0-.599.5-1 .961-1.243.505-.266 1.187-.467 1.957-.594a.5.5 0 0 1 .575.411z"/>
+ </symbol>
+</svg>
+<main>
+ <h1 class="visually-hidden">Features examples</h1>
+
+ <div class="container px-4 py-5" id="featured-3">
+ <h2 class="pb-2 border-bottom">Columns with icons</h2>
+ <div class="row g-4 py-5 row-cols-1 row-cols-lg-3">
+ <div class="feature col">
+ <div class="feature-icon d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-2 mb-3">
+ <svg class="bi" width="1em" height="1em"><use xlink:href="#collection"/></svg>
+ </div>
+ <h3 class="fs-2">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
+ <a href="#" class="icon-link d-inline-flex align-items-center">
+ Call to action
+ <svg class="bi" width="1em" height="1em"><use xlink:href="#chevron-right"/></svg>
+ </a>
+ </div>
+ <div class="feature col">
+ <div class="feature-icon d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-2 mb-3">
+ <svg class="bi" width="1em" height="1em"><use xlink:href="#people-circle"/></svg>
+ </div>
+ <h3 class="fs-2">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
+ <a href="#" class="icon-link d-inline-flex align-items-center">
+ Call to action
+ <svg class="bi" width="1em" height="1em"><use xlink:href="#chevron-right"/></svg>
+ </a>
+ </div>
+ <div class="feature col">
+ <div class="feature-icon d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-2 mb-3">
+ <svg class="bi" width="1em" height="1em"><use xlink:href="#toggles2"/></svg>
+ </div>
+ <h3 class="fs-2">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
+ <a href="#" class="icon-link d-inline-flex align-items-center">
+ Call to action
+ <svg class="bi" width="1em" height="1em"><use xlink:href="#chevron-right"/></svg>
+ </a>
+ </div>
+ </div>
+ </div>
+
+ <div class="b-example-divider"></div>
+
+ <div class="container px-4 py-5" id="hanging-icons">
+ <h2 class="pb-2 border-bottom">Hanging icons</h2>
+ <div class="row g-4 py-5 row-cols-1 row-cols-lg-3">
+ <div class="col d-flex align-items-start">
+ <div class="icon-square text-bg-light d-inline-flex align-items-center justify-content-center fs-4 flex-shrink-0 me-3">
+ <svg class="bi" width="1em" height="1em"><use xlink:href="#toggles2"/></svg>
+ </div>
+ <div>
+ <h3 class="fs-2">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
+ <a href="#" class="btn btn-primary">
+ Primary button
+ </a>
+ </div>
+ </div>
+ <div class="col d-flex align-items-start">
+ <div class="icon-square text-bg-light d-inline-flex align-items-center justify-content-center fs-4 flex-shrink-0 me-3">
+ <svg class="bi" width="1em" height="1em"><use xlink:href="#cpu-fill"/></svg>
+ </div>
+ <div>
+ <h3 class="fs-2">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
+ <a href="#" class="btn btn-primary">
+ Primary button
+ </a>
+ </div>
+ </div>
+ <div class="col d-flex align-items-start">
+ <div class="icon-square text-bg-light d-inline-flex align-items-center justify-content-center fs-4 flex-shrink-0 me-3">
+ <svg class="bi" width="1em" height="1em"><use xlink:href="#tools"/></svg>
+ </div>
+ <div>
+ <h3 class="fs-2">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
+ <a href="#" class="btn btn-primary">
+ Primary button
+ </a>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="b-example-divider"></div>
+
+ <div class="container px-4 py-5" id="custom-cards">
+ <h2 class="pb-2 border-bottom">Custom cards</h2>
+
+ <div class="row row-cols-1 row-cols-lg-3 align-items-stretch g-4 py-5">
+ <div class="col">
+ <div class="card card-cover h-100 overflow-hidden text-bg-dark rounded-4 shadow-lg" style="background-image: url('unsplash-photo-1.jpg');">
+ <div class="d-flex flex-column h-100 p-5 pb-3 text-white text-shadow-1">
+ <h3 class="pt-5 mt-5 mb-4 display-6 lh-1 fw-bold">Short title, long jacket</h3>
+ <ul class="d-flex list-unstyled mt-auto">
+ <li class="me-auto">
+ <img src="https://github.com/twbs.png" alt="Bootstrap" width="32" height="32" class="rounded-circle border border-white">
+ </li>
+ <li class="d-flex align-items-center me-3">
+ <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#geo-fill"/></svg>
+ <small>Earth</small>
+ </li>
+ <li class="d-flex align-items-center">
+ <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#calendar3"/></svg>
+ <small>3d</small>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div class="col">
+ <div class="card card-cover h-100 overflow-hidden text-bg-dark rounded-4 shadow-lg" style="background-image: url('unsplash-photo-2.jpg');">
+ <div class="d-flex flex-column h-100 p-5 pb-3 text-white text-shadow-1">
+ <h3 class="pt-5 mt-5 mb-4 display-6 lh-1 fw-bold">Much longer title that wraps to multiple lines</h3>
+ <ul class="d-flex list-unstyled mt-auto">
+ <li class="me-auto">
+ <img src="https://github.com/twbs.png" alt="Bootstrap" width="32" height="32" class="rounded-circle border border-white">
+ </li>
+ <li class="d-flex align-items-center me-3">
+ <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#geo-fill"/></svg>
+ <small>Pakistan</small>
+ </li>
+ <li class="d-flex align-items-center">
+ <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#calendar3"/></svg>
+ <small>4d</small>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div class="col">
+ <div class="card card-cover h-100 overflow-hidden text-bg-dark rounded-4 shadow-lg" style="background-image: url('unsplash-photo-3.jpg');">
+ <div class="d-flex flex-column h-100 p-5 pb-3 text-shadow-1">
+ <h3 class="pt-5 mt-5 mb-4 display-6 lh-1 fw-bold">Another longer title belongs here</h3>
+ <ul class="d-flex list-unstyled mt-auto">
+ <li class="me-auto">
+ <img src="https://github.com/twbs.png" alt="Bootstrap" width="32" height="32" class="rounded-circle border border-white">
+ </li>
+ <li class="d-flex align-items-center me-3">
+ <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#geo-fill"/></svg>
+ <small>California</small>
+ </li>
+ <li class="d-flex align-items-center">
+ <svg class="bi me-2" width="1em" height="1em"><use xlink:href="#calendar3"/></svg>
+ <small>5d</small>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="b-example-divider"></div>
+
+ <div class="container px-4 py-5" id="icon-grid">
+ <h2 class="pb-2 border-bottom">Icon grid</h2>
+
+ <div class="row row-cols-1 row-cols-sm-2 row-cols-md-3 row-cols-lg-4 g-4 py-5">
+ <div class="col d-flex align-items-start">
+ <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#bootstrap"/></svg>
+ <div>
+ <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+ </div>
+ <div class="col d-flex align-items-start">
+ <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#cpu-fill"/></svg>
+ <div>
+ <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+ </div>
+ <div class="col d-flex align-items-start">
+ <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#calendar3"/></svg>
+ <div>
+ <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+ </div>
+ <div class="col d-flex align-items-start">
+ <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#home"/></svg>
+ <div>
+ <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+ </div>
+ <div class="col d-flex align-items-start">
+ <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#speedometer2"/></svg>
+ <div>
+ <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+ </div>
+ <div class="col d-flex align-items-start">
+ <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#toggles2"/></svg>
+ <div>
+ <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+ </div>
+ <div class="col d-flex align-items-start">
+ <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#geo-fill"/></svg>
+ <div>
+ <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+ </div>
+ <div class="col d-flex align-items-start">
+ <svg class="bi text-muted flex-shrink-0 me-3" width="1.75em" height="1.75em"><use xlink:href="#tools"/></svg>
+ <div>
+ <h3 class="fw-bold mb-0 fs-4">Featured title</h3>
+ <p>Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="b-example-divider"></div>
+
+ <div class="container px-4 py-5">
+ <h2 class="pb-2 border-bottom">Features with title</h2>
+
+ <div class="row row-cols-1 row-cols-md-2 align-items-md-center g-5 py-5">
+ <div class="col d-flex flex-column align-items-start gap-2">
+ <h3 class="fw-bold">Left-aligned title explaining these awesome features</h3>
+ <p class="text-muted">Paragraph of text beneath the heading to explain the heading. We'll add onto it with another sentence and probably just keep going until we run out of words.</p>
+ <a href="#" class="btn btn-primary btn-lg">Primary button</a>
+ </div>
+
+ <div class="col">
+ <div class="row row-cols-1 row-cols-sm-2 g-4">
+ <div class="col d-flex flex-column gap-2">
+ <div class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
+ <svg class="bi" width="1em" height="1em">
+ <use xlink:href="#collection" />
+ </svg>
+ </div>
+ <h4 class="fw-semibold mb-0">Featured title</h4>
+ <p class="text-muted">Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+
+ <div class="col d-flex flex-column gap-2">
+ <div class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
+ <svg class="bi" width="1em" height="1em">
+ <use xlink:href="#gear-fill" />
+ </svg>
+ </div>
+ <h4 class="fw-semibold mb-0">Featured title</h4>
+ <p class="text-muted">Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+
+ <div class="col d-flex flex-column gap-2">
+ <div class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
+ <svg class="bi" width="1em" height="1em">
+ <use xlink:href="#speedometer" />
+ </svg>
+ </div>
+ <h4 class="fw-semibold mb-0">Featured title</h4>
+ <p class="text-muted">Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+
+ <div class="col d-flex flex-column gap-2">
+ <div class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
+ <svg class="bi" width="1em" height="1em">
+ <use xlink:href="#table" />
+ </svg>
+ </div>
+ <h4 class="fw-semibold mb-0">Featured title</h4>
+ <p class="text-muted">Paragraph of text beneath the heading to explain the heading.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/unsplash-photo-1.jpg b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/unsplash-photo-1.jpg
index ed2e36a78..ed2e36a78 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/unsplash-photo-1.jpg
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/unsplash-photo-1.jpg
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/unsplash-photo-2.jpg b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/unsplash-photo-2.jpg
index b66864a00..b66864a00 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/unsplash-photo-2.jpg
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/unsplash-photo-2.jpg
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/unsplash-photo-3.jpg b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/unsplash-photo-3.jpg
index c411b17ec..c411b17ec 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/features/unsplash-photo-3.jpg
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/features/unsplash-photo-3.jpg
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/footers/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/footers/index.html
index 827c2426a..827c2426a 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/footers/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/footers/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/grid/grid.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/grid/grid.css
index 18e3568b1..18e3568b1 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/grid/grid.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/grid/grid.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/grid/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/grid/index.html
index 7c4f1d322..7c4f1d322 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/grid/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/grid/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/headers/headers.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/headers/headers.css
index 8230c9a5f..8230c9a5f 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/headers/headers.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/headers/headers.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/headers/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/headers/index.html
index b8fc8b27b..b8fc8b27b 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/headers/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/headers/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/bootstrap-docs.png b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/bootstrap-docs.png
index 471a9eddf..471a9eddf 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/bootstrap-docs.png
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/bootstrap-docs.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/bootstrap-themes.png b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/bootstrap-themes.png
index 13c32337d..13c32337d 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/bootstrap-themes.png
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/bootstrap-themes.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/heroes.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/heroes.css
index e9deaf744..e9deaf744 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/heroes.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/heroes.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/index.html
index ef621fd50..ef621fd50 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/heroes/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/heroes/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/jumbotron/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/jumbotron/index.html
index 8131d1903..8131d1903 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/jumbotron/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/jumbotron/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/list-groups/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/list-groups/index.html
index 9599913c0..9599913c0 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/list-groups/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/list-groups/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/list-groups/list-groups.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/list-groups/list-groups.css
index 218508412..218508412 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/list-groups/list-groups.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/list-groups/list-groups.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/masonry/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/masonry/index.html
index b4aecaa17..b4aecaa17 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/masonry/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/masonry/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/modals/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/modals/index.html
index a68bd419e..a68bd419e 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/modals/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/modals/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/modals/modals.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/modals/modals.css
index 51ad2c4fb..51ad2c4fb 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/modals/modals.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/modals/modals.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-bottom/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-bottom/index.html
index c0e859ad0..c0e859ad0 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-bottom/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-bottom/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-fixed/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-fixed/index.html
new file mode 100644
index 000000000..3e2cc1085
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-fixed/index.html
@@ -0,0 +1,40 @@
+---
+layout: examples
+title: Fixed top navbar example
+extra_css:
+ - "navbar-fixed.css"
+---
+
+<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Fixed navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarCollapse">
+ <ul class="navbar-nav me-auto mb-2 mb-md-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+</nav>
+
+<main class="container">
+ <div class="bg-light p-5 rounded">
+ <h1>Navbar example</h1>
+ <p class="lead">This example is a quick exercise to illustrate how fixed to top navbar works. As you scroll, it will remain fixed to the top of your browser’s viewport.</p>
+ <a class="btn btn-lg btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
+ </div>
+</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-fixed/navbar-top-fixed.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-fixed/navbar-fixed.css
index c77c0c147..c77c0c147 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-fixed/navbar-top-fixed.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-fixed/navbar-fixed.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-static/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-static/index.html
new file mode 100644
index 000000000..040657678
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-static/index.html
@@ -0,0 +1,40 @@
+---
+layout: examples
+title: Top navbar example
+extra_css:
+ - "navbar-static.css"
+---
+
+<nav class="navbar navbar-expand-md navbar-dark bg-dark mb-4">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Top navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="collapse navbar-collapse" id="navbarCollapse">
+ <ul class="navbar-nav me-auto mb-2 mb-md-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+</nav>
+
+<main class="container">
+ <div class="bg-light p-5 rounded">
+ <h1>Navbar example</h1>
+ <p class="lead">This example is a quick exercise to illustrate how the top-aligned navbar works. As you scroll, this navbar remains in its original position and moves with the rest of the page.</p>
+ <a class="btn btn-lg btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
+ </div>
+</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-static/navbar-top.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-static/navbar-static.css
index 25bbdde09..25bbdde09 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbar-static/navbar-top.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbar-static/navbar-static.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars-offcanvas/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars-offcanvas/index.html
new file mode 100644
index 000000000..cbbaf8673
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars-offcanvas/index.html
@@ -0,0 +1,147 @@
+---
+layout: examples
+title: Navbar Template
+extra_css:
+ - "navbars-offcanvas.css"
+---
+
+<main>
+ <nav class="navbar navbar-dark bg-dark" aria-label="Dark offcanvas navbar">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Dark offcanvas navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbarDark" aria-controls="offcanvasNavbarDark">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="offcanvas offcanvas-end text-bg-dark" tabindex="-1" id="offcanvasNavbarDark" aria-labelledby="offcanvasNavbarDarkLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasNavbarDarkLabel">Offcanvas</h5>
+ <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li>
+ <hr class="dropdown-divider">
+ </li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form class="d-flex mt-3" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar bg-light" aria-label="Light offcanvas navbar">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Light offcanvas navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbarLight" aria-controls="offcanvasNavbarLight">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasNavbarLight" aria-labelledby="offcanvasNavbarLightLabel">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasNavbarLightLabel">Offcanvas</h5>
+ <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li>
+ <hr class="dropdown-divider">
+ </li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form class="d-flex mt-3" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Offcanvas navbar large">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Responsive offcanvas navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbar2" aria-controls="offcanvasNavbar2">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+ <div class="offcanvas offcanvas-end text-bg-dark" tabindex="-1" id="offcanvasNavbar2" aria-labelledby="offcanvasNavbar2Label">
+ <div class="offcanvas-header">
+ <h5 class="offcanvas-title" id="offcanvasNavbar2Label">Offcanvas</h5>
+ <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+ <div class="offcanvas-body">
+ <ul class="navbar-nav justify-content-end flex-grow-1 pe-3">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li>
+ <hr class="dropdown-divider">
+ </li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form class="d-flex mt-3 mt-lg-0" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+ </div>
+ </nav>
+
+ <div class="container my-5">
+ <div class="bg-light p-5 rounded">
+ <div class="col-sm-8 py-5 mx-auto">
+ <h1 class="display-5 fw-normal">Navbar with offcanvas examples</h1>
+ <p class="fs-5">This example shows how responsive offcanvas menus work within the navbar. For positioning of navbars, checkout the <a href="{{< docsref "/examples/navbar-static" >}}">top</a> and <a href="{{< docsref "/examples/navbar-fixed" >}}">fixed top</a> examples.</p>
+ <p>From the top down, you'll see a dark navbar, light navbar and a responsive navbar—each with offcanvases built in. Resize your browser window to the large breakpoint to see the toggle for the offcanvas.</p>
+ <p>
+ <a class="btn btn-primary" href="{{< docsref "/components/navbar#offcanvas" >}}" role="button">Learn more about offcanvas navbars &raquo;</a>
+ </p>
+ </div>
+ </div>
+ </div>
+</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars-offcanvas/navbar.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars-offcanvas/navbars-offcanvas.css
index 70d209409..70d209409 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars-offcanvas/navbar.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars-offcanvas/navbars-offcanvas.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars/index.html
new file mode 100644
index 000000000..c4d0d89e4
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars/index.html
@@ -0,0 +1,450 @@
+---
+layout: examples
+title: Navbar Template
+extra_css:
+ - "navbars.css"
+---
+
+<main>
+ <nav class="navbar navbar-dark bg-dark" aria-label="First navbar example">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Never expand</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample01" aria-controls="navbarsExample01" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExample01">
+ <ul class="navbar-nav me-auto mb-2">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand navbar-dark bg-dark" aria-label="Second navbar example">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Always expand</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample02" aria-controls="navbarsExample02" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExample02">
+ <ul class="navbar-nav me-auto">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-sm navbar-dark bg-dark" aria-label="Third navbar example">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Expand at sm</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample03" aria-controls="navbarsExample03" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExample03">
+ <ul class="navbar-nav me-auto mb-2 mb-sm-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-md navbar-dark bg-dark" aria-label="Fourth navbar example">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Expand at md</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample04" aria-controls="navbarsExample04" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExample04">
+ <ul class="navbar-nav me-auto mb-2 mb-md-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Fifth navbar example">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Expand at lg</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample05" aria-controls="navbarsExample05" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExample05">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-xl navbar-dark bg-dark" aria-label="Sixth navbar example">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Expand at xl</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample06" aria-controls="navbarsExample06" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExample06">
+ <ul class="navbar-nav me-auto mb-2 mb-xl-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-xxl navbar-dark bg-dark" aria-label="Seventh navbar example">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Expand at xxl</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExampleXxl" aria-controls="navbarsExampleXxl" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExampleXxl">
+ <ul class="navbar-nav me-auto mb-2 mb-xl-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Eighth navbar example">
+ <div class="container">
+ <a class="navbar-brand" href="#">Container</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample07" aria-controls="navbarsExample07" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExample07">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Ninth navbar example">
+ <div class="container-xl">
+ <a class="navbar-brand" href="#">Container XL</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample07XL" aria-controls="navbarsExample07XL" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExample07XL">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <div class="container-xl mb-4">
+ <p>Matching .container-xl...</p>
+ </div>
+
+ <nav class="navbar navbar-expand-lg navbar-dark bg-dark" aria-label="Tenth navbar example">
+ <div class="container-fluid">
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample08" aria-controls="navbarsExample08" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse justify-content-md-center" id="navbarsExample08">
+ <ul class="navbar-nav">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Centered nav only</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </nav>
+
+ <div class="container">
+ <nav class="navbar navbar-expand-lg bg-light rounded" aria-label="Eleventh navbar example">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Navbar</a>
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample09" aria-controls="navbarsExample09" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarsExample09">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form role="search">
+ <input class="form-control" type="search" placeholder="Search" aria-label="Search">
+ </form>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg bg-light rounded" aria-label="Twelfth navbar example">
+ <div class="container-fluid">
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample10" aria-controls="navbarsExample10" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse justify-content-md-center" id="navbarsExample10">
+ <ul class="navbar-nav">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Centered nav only</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </nav>
+
+ <nav class="navbar navbar-expand-lg bg-light rounded" aria-label="Thirteenth navbar example">
+ <div class="container-fluid">
+ <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarsExample11" aria-controls="navbarsExample11" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse d-lg-flex" id="navbarsExample11">
+ <a class="navbar-brand col-lg-3 me-0" href="#">Centered nav</a>
+ <ul class="navbar-nav col-lg-6 justify-content-lg-center">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Home</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Link</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link disabled">Disabled</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <div class="d-lg-flex col-lg-3 justify-content-lg-end">
+ <button class="btn btn-primary">Button</button>
+ </div>
+ </div>
+ </div>
+ </nav>
+
+ <div>
+ <div class="bg-light p-5 rounded">
+ <div class="col-sm-8 mx-auto">
+ <h1>Navbar examples</h1>
+ <p>This example is a quick exercise to illustrate how the navbar and its contents work. Some navbars extend the width of the viewport, others are confined within a <code>.container</code>. For positioning of navbars, checkout the <a href="{{< docsref "/examples/navbar-static" >}}">top</a> and <a href="{{< docsref "/examples/navbar-fixed" >}}">fixed top</a> examples.</p>
+ <p>At the smallest breakpoint, the collapse plugin is used to hide the links and show a menu button to toggle the collapsed content.</p>
+ <p>
+ <a class="btn btn-primary" href="{{< docsref "/components/navbar" >}}" role="button">View navbar docs &raquo;</a>
+ </p>
+ </div>
+ </div>
+ </div>
+ </div>
+</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars/navbar.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars/navbars.css
index 70d209409..70d209409 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/navbars/navbar.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/navbars/navbars.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/index.html
new file mode 100644
index 000000000..07b18d681
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/index.html
@@ -0,0 +1,140 @@
+---
+layout: examples
+title: Offcanvas navbar template
+extra_css:
+ - "offcanvas-navbar.css"
+extra_js:
+ - src: "offcanvas-navbar.js"
+body_class: "bg-light"
+aliases: "/docs/5.3/examples/offcanvas/"
+---
+
+<nav class="navbar navbar-expand-lg fixed-top navbar-dark bg-dark" aria-label="Main navigation">
+ <div class="container-fluid">
+ <a class="navbar-brand" href="#">Offcanvas navbar</a>
+ <button class="navbar-toggler p-0 border-0" type="button" id="navbarSideCollapse" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="navbar-collapse offcanvas-collapse" id="navbarsExampleDefault">
+ <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+ <li class="nav-item">
+ <a class="nav-link active" aria-current="page" href="#">Dashboard</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Notifications</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Profile</a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link" href="#">Switch account</a>
+ </li>
+ <li class="nav-item dropdown">
+ <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">Settings</a>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ </ul>
+ </li>
+ </ul>
+ <form class="d-flex" role="search">
+ <input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
+ <button class="btn btn-outline-success" type="submit">Search</button>
+ </form>
+ </div>
+ </div>
+</nav>
+
+<div class="nav-scroller bg-body shadow-sm">
+ <nav class="nav" aria-label="Secondary navigation">
+ <a class="nav-link active" aria-current="page" href="#">Dashboard</a>
+ <a class="nav-link" href="#">
+ Friends
+ <span class="badge text-bg-light rounded-pill align-text-bottom">27</span>
+ </a>
+ <a class="nav-link" href="#">Explore</a>
+ <a class="nav-link" href="#">Suggestions</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link" href="#">Link</a>
+ <a class="nav-link" href="#">Link</a>
+ </nav>
+</div>
+
+<main class="container">
+ <div class="d-flex align-items-center p-3 my-3 text-white bg-purple rounded shadow-sm">
+ <img class="me-3" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo-white.svg" alt="" width="48" height="38">
+ <div class="lh-1">
+ <h1 class="h6 mb-0 text-white lh-1">Bootstrap</h1>
+ <small>Since 2011</small>
+ </div>
+ </div>
+
+ <div class="my-3 p-3 bg-body rounded shadow-sm">
+ <h6 class="border-bottom pb-2 mb-0">Recent updates</h6>
+ <div class="d-flex text-muted pt-3">
+ {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="flex-shrink-0 me-2 rounded" >}}
+ <p class="pb-3 mb-0 small lh-sm border-bottom">
+ <strong class="d-block text-gray-dark">@username</strong>
+ Some representative placeholder content, with some information about this user. Imagine this being some sort of status update, perhaps?
+ </p>
+ </div>
+ <div class="d-flex text-muted pt-3">
+ {{< placeholder width="32" height="32" background="#e83e8c" color="#e83e8c" class="flex-shrink-0 me-2 rounded" >}}
+ <p class="pb-3 mb-0 small lh-sm border-bottom">
+ <strong class="d-block text-gray-dark">@username</strong>
+ Some more representative placeholder content, related to this other user. Another status update, perhaps.
+ </p>
+ </div>
+ <div class="d-flex text-muted pt-3">
+ {{< placeholder width="32" height="32" background="#6f42c1" color="#6f42c1" class="flex-shrink-0 me-2 rounded" >}}
+ <p class="pb-3 mb-0 small lh-sm border-bottom">
+ <strong class="d-block text-gray-dark">@username</strong>
+ This user also gets some representative placeholder content. Maybe they did something interesting, and you really want to highlight this in the recent updates.
+ </p>
+ </div>
+ <small class="d-block text-end mt-3">
+ <a href="#">All updates</a>
+ </small>
+ </div>
+
+ <div class="my-3 p-3 bg-body rounded shadow-sm">
+ <h6 class="border-bottom pb-2 mb-0">Suggestions</h6>
+ <div class="d-flex text-muted pt-3">
+ {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="flex-shrink-0 me-2 rounded" >}}
+ <div class="pb-3 mb-0 small lh-sm border-bottom w-100">
+ <div class="d-flex justify-content-between">
+ <strong class="text-gray-dark">Full Name</strong>
+ <a href="#">Follow</a>
+ </div>
+ <span class="d-block">@username</span>
+ </div>
+ </div>
+ <div class="d-flex text-muted pt-3">
+ {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="flex-shrink-0 me-2 rounded" >}}
+ <div class="pb-3 mb-0 small lh-sm border-bottom w-100">
+ <div class="d-flex justify-content-between">
+ <strong class="text-gray-dark">Full Name</strong>
+ <a href="#">Follow</a>
+ </div>
+ <span class="d-block">@username</span>
+ </div>
+ </div>
+ <div class="d-flex text-muted pt-3">
+ {{< placeholder width="32" height="32" background="#007bff" color="#007bff" class="flex-shrink-0 me-2 rounded" >}}
+ <div class="pb-3 mb-0 small lh-sm border-bottom w-100">
+ <div class="d-flex justify-content-between">
+ <strong class="text-gray-dark">Full Name</strong>
+ <a href="#">Follow</a>
+ </div>
+ <span class="d-block">@username</span>
+ </div>
+ </div>
+ <small class="d-block text-end mt-3">
+ <a href="#">All suggestions</a>
+ </small>
+ </div>
+</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/offcanvas.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/offcanvas-navbar.css
index f855b96a5..f855b96a5 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/offcanvas.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/offcanvas-navbar.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/offcanvas.js b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/offcanvas-navbar.js
index b97a17164..b97a17164 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/offcanvas-navbar/offcanvas.js
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/offcanvas-navbar/offcanvas-navbar.js
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/pricing/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/pricing/index.html
index 64b856a64..64b856a64 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/pricing/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/pricing/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/pricing/pricing.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/pricing/pricing.css
index c7304d10b..c7304d10b 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/pricing/pricing.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/pricing/pricing.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/product/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/product/index.html
index c2eb0eb2a..c2eb0eb2a 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/product/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/product/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/product/product.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/product/product.css
index 5fcb582b4..5fcb582b4 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/product/product.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/product/product.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sidebars/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sidebars/index.html
index 48889facc..48889facc 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sidebars/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sidebars/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sidebars/sidebars.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sidebars/sidebars.css
index 5dc9fbaeb..5dc9fbaeb 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sidebars/sidebars.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sidebars/sidebars.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sidebars/sidebars.js b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sidebars/sidebars.js
index 4075f1f15..4075f1f15 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sidebars/sidebars.js
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sidebars/sidebars.js
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sign-in/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sign-in/index.html
new file mode 100644
index 000000000..cdcf16994
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sign-in/index.html
@@ -0,0 +1,32 @@
+---
+layout: examples
+title: Signin Template
+extra_css:
+ - "sign-in.css"
+body_class: "text-center"
+include_js: false
+---
+
+<main class="form-signin w-100 m-auto">
+ <form>
+ <img class="mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="" width="72" height="57">
+ <h1 class="h3 mb-3 fw-normal">Please sign in</h1>
+
+ <div class="form-floating">
+ <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
+ <label for="floatingInput">Email address</label>
+ </div>
+ <div class="form-floating">
+ <input type="password" class="form-control" id="floatingPassword" placeholder="Password">
+ <label for="floatingPassword">Password</label>
+ </div>
+
+ <div class="checkbox mb-3">
+ <label>
+ <input type="checkbox" value="remember-me"> Remember me
+ </label>
+ </div>
+ <button class="w-100 btn btn-lg btn-primary" type="submit">Sign in</button>
+ <p class="mt-5 mb-3 text-muted">&copy; 2017–{{< year >}}</p>
+ </form>
+</main>
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sign-in/signin.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sign-in/sign-in.css
index 89deea44c..89deea44c 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sign-in/signin.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sign-in/sign-in.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/starter-template/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/starter-template/index.html
index 5a898a44d..5a898a44d 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/starter-template/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/starter-template/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/starter-template/starter-template.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/starter-template/starter-template.css
index 582dcbe4f..582dcbe4f 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/starter-template/starter-template.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/starter-template/starter-template.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer-navbar/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer-navbar/index.html
index 1f807a6dc..1f807a6dc 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer-navbar/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer-navbar/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer-navbar/sticky-footer-navbar.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer-navbar/sticky-footer-navbar.css
index 3087ead7d..3087ead7d 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer-navbar/sticky-footer-navbar.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer-navbar/sticky-footer-navbar.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer/index.html b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer/index.html
index 7a6e127cd..7a6e127cd 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer/index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer/index.html
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer/sticky-footer.css b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer/sticky-footer.css
index f8be43729..f8be43729 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/examples/sticky-footer/sticky-footer.css
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/examples/sticky-footer/sticky-footer.css
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/forms/checks-radios.md b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/checks-radios.md
new file mode 100644
index 000000000..99e42d92e
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/checks-radios.md
@@ -0,0 +1,313 @@
+---
+layout: docs
+title: Checks and radios
+description: Create consistent cross-browser and cross-device checkboxes and radios with our completely rewritten checks component.
+group: forms
+aliases: "/docs/5.3/forms/checks/"
+toc: true
+---
+
+## Approach
+
+Browser default checkboxes and radios are replaced with the help of `.form-check`, a series of classes for both input types that improves the layout and behavior of their HTML elements, that provide greater customization and cross browser consistency. Checkboxes are for selecting one or several options in a list, while radios are for selecting one option from many.
+
+Structurally, our `<input>`s and `<label>`s are sibling elements as opposed to an `<input>` within a `<label>`. This is slightly more verbose as you must specify `id` and `for` attributes to relate the `<input>` and `<label>`. We use the sibling selector (`~`) for all our `<input>` states, like `:checked` or `:disabled`. When combined with the `.form-check-label` class, we can easily style the text for each item based on the `<input>`'s state.
+
+Our checks use custom Bootstrap icons to indicate checked or indeterminate states.
+
+## Checks
+
+{{< example >}}
+<div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="flexCheckDefault">
+ <label class="form-check-label" for="flexCheckDefault">
+ Default checkbox
+ </label>
+</div>
+<div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="flexCheckChecked" checked>
+ <label class="form-check-label" for="flexCheckChecked">
+ Checked checkbox
+ </label>
+</div>
+{{< /example >}}
+
+### Indeterminate
+
+Checkboxes can utilize the `:indeterminate` pseudo class when manually set via JavaScript (there is no available HTML attribute for specifying it).
+
+{{< example class="bd-example-indeterminate" stackblitz_add_js="true" >}}
+<div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="flexCheckIndeterminate">
+ <label class="form-check-label" for="flexCheckIndeterminate">
+ Indeterminate checkbox
+ </label>
+</div>
+{{< /example >}}
+
+### Disabled
+
+Add the `disabled` attribute and the associated `<label>`s are automatically styled to match with a lighter color to help indicate the input's state.
+
+{{< example class="bd-example-indeterminate" stackblitz_add_js="true" >}}
+<div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="flexCheckIndeterminateDisabled" disabled>
+ <label class="form-check-label" for="flexCheckIndeterminateDisabled">
+ Disabled indeterminate checkbox
+ </label>
+</div>
+<div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="flexCheckDisabled" disabled>
+ <label class="form-check-label" for="flexCheckDisabled">
+ Disabled checkbox
+ </label>
+</div>
+<div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="flexCheckCheckedDisabled" checked disabled>
+ <label class="form-check-label" for="flexCheckCheckedDisabled">
+ Disabled checked checkbox
+ </label>
+</div>
+{{< /example >}}
+
+## Radios
+
+{{< example >}}
+<div class="form-check">
+ <input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault1">
+ <label class="form-check-label" for="flexRadioDefault1">
+ Default radio
+ </label>
+</div>
+<div class="form-check">
+ <input class="form-check-input" type="radio" name="flexRadioDefault" id="flexRadioDefault2" checked>
+ <label class="form-check-label" for="flexRadioDefault2">
+ Default checked radio
+ </label>
+</div>
+{{< /example >}}
+
+### Disabled
+
+Add the `disabled` attribute and the associated `<label>`s are automatically styled to match with a lighter color to help indicate the input's state.
+
+{{< example >}}
+<div class="form-check">
+ <input class="form-check-input" type="radio" name="flexRadioDisabled" id="flexRadioDisabled" disabled>
+ <label class="form-check-label" for="flexRadioDisabled">
+ Disabled radio
+ </label>
+</div>
+<div class="form-check">
+ <input class="form-check-input" type="radio" name="flexRadioDisabled" id="flexRadioCheckedDisabled" checked disabled>
+ <label class="form-check-label" for="flexRadioCheckedDisabled">
+ Disabled checked radio
+ </label>
+</div>
+{{< /example >}}
+
+## Switches
+
+A switch has the markup of a custom checkbox but uses the `.form-switch` class to render a toggle switch. Consider using `role="switch"` to more accurately convey the nature of the control to assistive technologies that support this role. In older assistive technologies, it will simply be announced as a regular checkbox as a fallback. Switches also support the `disabled` attribute.
+
+{{< example >}}
+<div class="form-check form-switch">
+ <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDefault">
+ <label class="form-check-label" for="flexSwitchCheckDefault">Default switch checkbox input</label>
+</div>
+<div class="form-check form-switch">
+ <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckChecked" checked>
+ <label class="form-check-label" for="flexSwitchCheckChecked">Checked switch checkbox input</label>
+</div>
+<div class="form-check form-switch">
+ <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckDisabled" disabled>
+ <label class="form-check-label" for="flexSwitchCheckDisabled">Disabled switch checkbox input</label>
+</div>
+<div class="form-check form-switch">
+ <input class="form-check-input" type="checkbox" role="switch" id="flexSwitchCheckCheckedDisabled" checked disabled>
+ <label class="form-check-label" for="flexSwitchCheckCheckedDisabled">Disabled checked switch checkbox input</label>
+</div>
+{{< /example >}}
+
+## Default (stacked)
+
+By default, any number of checkboxes and radios that are immediate sibling will be vertically stacked and appropriately spaced with `.form-check`.
+
+{{< example >}}
+<div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
+ <label class="form-check-label" for="defaultCheck1">
+ Default checkbox
+ </label>
+</div>
+<div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="defaultCheck2" disabled>
+ <label class="form-check-label" for="defaultCheck2">
+ Disabled checkbox
+ </label>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="form-check">
+ <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked>
+ <label class="form-check-label" for="exampleRadios1">
+ Default radio
+ </label>
+</div>
+<div class="form-check">
+ <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios2" value="option2">
+ <label class="form-check-label" for="exampleRadios2">
+ Second default radio
+ </label>
+</div>
+<div class="form-check">
+ <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios3" value="option3" disabled>
+ <label class="form-check-label" for="exampleRadios3">
+ Disabled radio
+ </label>
+</div>
+{{< /example >}}
+
+## Inline
+
+Group checkboxes or radios on the same horizontal row by adding `.form-check-inline` to any `.form-check`.
+
+{{< example >}}
+<div class="form-check form-check-inline">
+ <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
+ <label class="form-check-label" for="inlineCheckbox1">1</label>
+</div>
+<div class="form-check form-check-inline">
+ <input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
+ <label class="form-check-label" for="inlineCheckbox2">2</label>
+</div>
+<div class="form-check form-check-inline">
+ <input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="option3" disabled>
+ <label class="form-check-label" for="inlineCheckbox3">3 (disabled)</label>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1">
+ <label class="form-check-label" for="inlineRadio1">1</label>
+</div>
+<div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2">
+ <label class="form-check-label" for="inlineRadio2">2</label>
+</div>
+<div class="form-check form-check-inline">
+ <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3" disabled>
+ <label class="form-check-label" for="inlineRadio3">3 (disabled)</label>
+</div>
+{{< /example >}}
+
+## Reverse
+
+Put your checkboxes, radios, and switches on the opposite side with the `.form-check-reverse` modifier class.
+
+{{< example >}}
+<div class="form-check form-check-reverse">
+ <input class="form-check-input" type="checkbox" value="" id="reverseCheck1">
+ <label class="form-check-label" for="reverseCheck1">
+ Reverse checkbox
+ </label>
+</div>
+<div class="form-check form-check-reverse">
+ <input class="form-check-input" type="checkbox" value="" id="reverseCheck2" disabled>
+ <label class="form-check-label" for="reverseCheck2">
+ Disabled reverse checkbox
+ </label>
+</div>
+
+<div class="form-check form-switch form-check-reverse">
+ <input class="form-check-input" type="checkbox" id="flexSwitchCheckReverse">
+ <label class="form-check-label" for="flexSwitchCheckReverse">Reverse switch checkbox input</label>
+</div>
+{{< /example >}}
+
+## Without labels
+
+Omit the wrapping `.form-check` for checkboxes and radios that have no label text. Remember to still provide some form of accessible name for assistive technologies (for instance, using `aria-label`). See the [forms overview accessibility]({{< docsref "/forms/overview#accessibility" >}}) section for details.
+
+{{< example >}}
+<div>
+ <input class="form-check-input" type="checkbox" id="checkboxNoLabel" value="" aria-label="...">
+</div>
+
+<div>
+ <input class="form-check-input" type="radio" name="radioNoLabel" id="radioNoLabel1" value="" aria-label="...">
+</div>
+{{< /example >}}
+
+## Toggle buttons
+
+Create button-like checkboxes and radio buttons by using `.btn` styles rather than `.form-check-label` on the `<label>` elements. These toggle buttons can further be grouped in a [button group]({{< docsref "/components/button-group" >}}) if needed.
+
+### Checkbox toggle buttons
+
+{{< example >}}
+<input type="checkbox" class="btn-check" id="btn-check" autocomplete="off">
+<label class="btn btn-primary" for="btn-check">Single toggle</label>
+{{< /example >}}
+
+{{< example >}}
+<input type="checkbox" class="btn-check" id="btn-check-2" checked autocomplete="off">
+<label class="btn btn-primary" for="btn-check-2">Checked</label>
+{{< /example >}}
+
+{{< example >}}
+<input type="checkbox" class="btn-check" id="btn-check-3" autocomplete="off" disabled>
+<label class="btn btn-primary" for="btn-check-3">Disabled</label>
+{{< /example >}}
+
+{{< callout info >}}
+Visually, these checkbox toggle buttons are identical to the [button plugin toggle buttons]({{< docsref "/components/buttons#button-plugin" >}}). However, they are conveyed differently by assistive technologies: the checkbox toggles will be announced by screen readers as "checked"/"not checked" (since, despite their appearance, they are fundamentally still checkboxes), whereas the button plugin toggle buttons will be announced as "button"/"button pressed". The choice between these two approaches will depend on the type of toggle you are creating, and whether or not the toggle will make sense to users when announced as a checkbox or as an actual button.
+{{< /callout >}}
+
+### Radio toggle buttons
+
+{{< example >}}
+<input type="radio" class="btn-check" name="options" id="option1" autocomplete="off" checked>
+<label class="btn btn-secondary" for="option1">Checked</label>
+
+<input type="radio" class="btn-check" name="options" id="option2" autocomplete="off">
+<label class="btn btn-secondary" for="option2">Radio</label>
+
+<input type="radio" class="btn-check" name="options" id="option3" autocomplete="off" disabled>
+<label class="btn btn-secondary" for="option3">Disabled</label>
+
+<input type="radio" class="btn-check" name="options" id="option4" autocomplete="off">
+<label class="btn btn-secondary" for="option4">Radio</label>
+{{< /example >}}
+
+### Outlined styles
+
+Different variants of `.btn`, such at the various outlined styles, are supported.
+
+{{< example >}}
+<input type="checkbox" class="btn-check" id="btn-check-outlined" autocomplete="off">
+<label class="btn btn-outline-primary" for="btn-check-outlined">Single toggle</label><br>
+
+<input type="checkbox" class="btn-check" id="btn-check-2-outlined" checked autocomplete="off">
+<label class="btn btn-outline-secondary" for="btn-check-2-outlined">Checked</label><br>
+
+<input type="radio" class="btn-check" name="options-outlined" id="success-outlined" autocomplete="off" checked>
+<label class="btn btn-outline-success" for="success-outlined">Checked success radio</label>
+
+<input type="radio" class="btn-check" name="options-outlined" id="danger-outlined" autocomplete="off">
+<label class="btn btn-outline-danger" for="danger-outlined">Danger radio</label>
+{{< /example >}}
+
+## Sass
+
+### Variables
+
+Variables for checks:
+
+{{< scss-docs name="form-check-variables" file="scss/_variables.scss" >}}
+
+Variables for switches:
+
+{{< scss-docs name="form-switch-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/forms/floating-labels.md b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/floating-labels.md
new file mode 100644
index 000000000..6b33fb67b
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/floating-labels.md
@@ -0,0 +1,180 @@
+---
+layout: docs
+title: Floating labels
+description: Create beautifully simple form labels that float over your input fields.
+group: forms
+toc: true
+---
+
+## Example
+
+Wrap a pair of `<input class="form-control">` and `<label>` elements in `.form-floating` to enable floating labels with Bootstrap's textual form fields. A `placeholder` is required on each `<input>` as our method of CSS-only floating labels uses the `:placeholder-shown` pseudo-element. Also note that the `<input>` must come first so we can utilize a sibling selector (e.g., `~`).
+
+{{< example >}}
+<div class="form-floating mb-3">
+ <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com">
+ <label for="floatingInput">Email address</label>
+</div>
+<div class="form-floating">
+ <input type="password" class="form-control" id="floatingPassword" placeholder="Password">
+ <label for="floatingPassword">Password</label>
+</div>
+{{< /example >}}
+
+When there's a `value` already defined, `<label>`s will automatically adjust to their floated position.
+
+{{< example >}}
+<form class="form-floating">
+ <input type="email" class="form-control" id="floatingInputValue" placeholder="name@example.com" value="test@example.com">
+ <label for="floatingInputValue">Input with value</label>
+</form>
+{{< /example >}}
+
+Form validation styles also work as expected.
+
+{{< example >}}
+<form class="form-floating">
+ <input type="email" class="form-control is-invalid" id="floatingInputInvalid" placeholder="name@example.com" value="test@example.com">
+ <label for="floatingInputInvalid">Invalid input</label>
+</form>
+{{< /example >}}
+
+## Textareas
+
+By default, `<textarea>`s with `.form-control` will be the same height as `<input>`s.
+
+{{< example >}}
+<div class="form-floating">
+ <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea"></textarea>
+ <label for="floatingTextarea">Comments</label>
+</div>
+{{< /example >}}
+
+To set a custom height on your `<textarea>`, do not use the `rows` attribute. Instead, set an explicit `height` (either inline or via custom CSS).
+
+{{< example >}}
+<div class="form-floating">
+ <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea2" style="height: 100px"></textarea>
+ <label for="floatingTextarea2">Comments</label>
+</div>
+{{< /example >}}
+
+## Selects
+
+Other than `.form-control`, floating labels are only available on `.form-select`s. They work in the same way, but unlike `<input>`s, they'll always show the `<label>` in its floated state. **Selects with `size` and `multiple` are not supported.**
+
+{{< example >}}
+<div class="form-floating">
+ <select class="form-select" id="floatingSelect" aria-label="Floating label select example">
+ <option selected>Open this select menu</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+ <label for="floatingSelect">Works with selects</label>
+</div>
+{{< /example >}}
+
+## Disabled
+
+Add the `disabled` boolean attribute on an input, a textarea or a select to give it a grayed out appearance, remove pointer events, and prevent focusing.
+
+{{< example >}}
+<div class="form-floating mb-3">
+ <input type="email" class="form-control" id="floatingInputDisabled" placeholder="name@example.com" disabled>
+ <label for="floatingInputDisabled">Email address</label>
+</div>
+<div class="form-floating mb-3">
+ <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextareaDisabled" disabled></textarea>
+ <label for="floatingTextareaDisabled">Comments</label>
+</div>
+<div class="form-floating mb-3">
+ <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea2Disabled" style="height: 100px" disabled></textarea>
+ <label for="floatingTextarea2Disabled">Comments</label>
+</div>
+<div class="form-floating">
+ <select class="form-select" id="floatingSelectDisabled" aria-label="Floating label disabled select example" disabled>
+ <option selected>Open this select menu</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+ <label for="floatingSelectDisabled">Works with selects</label>
+</div>
+{{< /example >}}
+
+## Readonly plaintext
+
+Floating labels also support `.form-control-plaintext`, which can be helpful for toggling from an editable `<input>` to a plaintext value without affecting the page layout.
+
+{{< example >}}
+<div class="form-floating mb-3">
+ <input type="email" readonly class="form-control-plaintext" id="floatingEmptyPlaintextInput" placeholder="name@example.com">
+ <label for="floatingEmptyPlaintextInput">Empty input</label>
+</div>
+<div class="form-floating mb-3">
+ <input type="email" readonly class="form-control-plaintext" id="floatingPlaintextInput" placeholder="name@example.com" value="name@example.com">
+ <label for="floatingPlaintextInput">Input with value</label>
+</div>
+{{< /example >}}
+
+## Input groups
+
+Floating labels also support `.input-group`.
+
+{{< example >}}
+<div class="input-group mb-3">
+ <span class="input-group-text">@</span>
+ <div class="form-floating">
+ <input type="text" class="form-control" id="floatingInputGroup1" placeholder="Username">
+ <label for="floatingInputGroup1">Username</label>
+ </div>
+</div>
+{{< /example >}}
+
+When using `.input-group` and `.form-floating` along with form validation, the `-feedback` should be placed outside of the `.form-floating`, but inside of the `.input-group`. This means that the feedback will need to be shown using javascript.
+
+{{< example >}}
+<div class="input-group has-validation">
+ <span class="input-group-text">@</span>
+ <div class="form-floating is-invalid">
+ <input type="text" class="form-control is-invalid" id="floatingInputGroup2" placeholder="Username" required>
+ <label for="floatingInputGroup2">Username</label>
+ </div>
+ <div class="invalid-feedback">
+ Please choose a username.
+ </div>
+</div>
+{{< /example >}}
+
+## Layout
+
+When working with the Bootstrap grid system, be sure to place form elements within column classes.
+
+{{< example >}}
+<div class="row g-2">
+ <div class="col-md">
+ <div class="form-floating">
+ <input type="email" class="form-control" id="floatingInputGrid" placeholder="name@example.com" value="mdo@example.com">
+ <label for="floatingInputGrid">Email address</label>
+ </div>
+ </div>
+ <div class="col-md">
+ <div class="form-floating">
+ <select class="form-select" id="floatingSelectGrid">
+ <option selected>Open this select menu</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+ <label for="floatingSelectGrid">Works with selects</label>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Sass
+
+### Variables
+
+{{< scss-docs name="form-floating-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/forms/form-control.md b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/form-control.md
new file mode 100644
index 000000000..4df1caa2b
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/form-control.md
@@ -0,0 +1,160 @@
+---
+layout: docs
+title: Form controls
+description: Give textual form controls like `<input>`s and `<textarea>`s an upgrade with custom styles, sizing, focus states, and more.
+group: forms
+toc: true
+---
+
+## Example
+
+Form controls are styled with a mix of Sass and CSS variables, allowing them to adapt to color modes and support any customization method.
+
+{{< example >}}
+<div class="mb-3">
+ <label for="exampleFormControlInput1" class="form-label">Email address</label>
+ <input type="email" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com">
+</div>
+<div class="mb-3">
+ <label for="exampleFormControlTextarea1" class="form-label">Example textarea</label>
+ <textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
+</div>
+{{< /example >}}
+
+## Sizing
+
+Set heights using classes like `.form-control-lg` and `.form-control-sm`.
+
+{{< example >}}
+<input class="form-control form-control-lg" type="text" placeholder=".form-control-lg" aria-label=".form-control-lg example">
+<input class="form-control" type="text" placeholder="Default input" aria-label="default input example">
+<input class="form-control form-control-sm" type="text" placeholder=".form-control-sm" aria-label=".form-control-sm example">
+{{< /example >}}
+
+## Disabled
+
+Add the `disabled` boolean attribute on an input to give it a grayed out appearance, remove pointer events, and prevent focusing.
+
+{{< example >}}
+<input class="form-control" type="text" placeholder="Disabled input" aria-label="Disabled input example" disabled>
+<input class="form-control" type="text" value="Disabled readonly input" aria-label="Disabled input example" disabled readonly>
+{{< /example >}}
+
+## Readonly
+
+Add the `readonly` boolean attribute on an input to prevent modification of the input's value. `readonly` inputs can still be focused and selected, while `disabled` inputs cannot.
+
+{{< example >}}
+<input class="form-control" type="text" value="Readonly input here..." aria-label="readonly input example" readonly>
+{{< /example >}}
+
+## Readonly plain text
+
+If you want to have `<input readonly>` elements in your form styled as plain text, replace `.form-control` with `.form-control-plaintext` to remove the default form field styling and preserve the correct `margin` and `padding`.
+
+{{< example >}}
+ <div class="mb-3 row">
+ <label for="staticEmail" class="col-sm-2 col-form-label">Email</label>
+ <div class="col-sm-10">
+ <input type="text" readonly class="form-control-plaintext" id="staticEmail" value="email@example.com">
+ </div>
+ </div>
+ <div class="mb-3 row">
+ <label for="inputPassword" class="col-sm-2 col-form-label">Password</label>
+ <div class="col-sm-10">
+ <input type="password" class="form-control" id="inputPassword">
+ </div>
+ </div>
+{{< /example >}}
+
+{{< example >}}
+<form class="row g-3">
+ <div class="col-auto">
+ <label for="staticEmail2" class="visually-hidden">Email</label>
+ <input type="text" readonly class="form-control-plaintext" id="staticEmail2" value="email@example.com">
+ </div>
+ <div class="col-auto">
+ <label for="inputPassword2" class="visually-hidden">Password</label>
+ <input type="password" class="form-control" id="inputPassword2" placeholder="Password">
+ </div>
+ <div class="col-auto">
+ <button type="submit" class="btn btn-primary mb-3">Confirm identity</button>
+ </div>
+</form>
+{{< /example >}}
+
+## File input
+
+{{< example >}}
+<div class="mb-3">
+ <label for="formFile" class="form-label">Default file input example</label>
+ <input class="form-control" type="file" id="formFile">
+</div>
+<div class="mb-3">
+ <label for="formFileMultiple" class="form-label">Multiple files input example</label>
+ <input class="form-control" type="file" id="formFileMultiple" multiple>
+</div>
+<div class="mb-3">
+ <label for="formFileDisabled" class="form-label">Disabled file input example</label>
+ <input class="form-control" type="file" id="formFileDisabled" disabled>
+</div>
+<div class="mb-3">
+ <label for="formFileSm" class="form-label">Small file input example</label>
+ <input class="form-control form-control-sm" id="formFileSm" type="file">
+</div>
+<div>
+ <label for="formFileLg" class="form-label">Large file input example</label>
+ <input class="form-control form-control-lg" id="formFileLg" type="file">
+</div>
+{{< /example >}}
+
+## Color
+
+Set the `type="color"` and add `.form-control-color` to the `<input>`. We use the modifier class to set fixed `height`s and override some inconsistencies between browsers.
+
+{{< example >}}
+<label for="exampleColorInput" class="form-label">Color picker</label>
+<input type="color" class="form-control form-control-color" id="exampleColorInput" value="#563d7c" title="Choose your color">
+{{< /example >}}
+
+## Datalists
+
+Datalists allow you to create a group of `<option>`s that can be accessed (and autocompleted) from within an `<input>`. These are similar to `<select>` elements, but come with more menu styling limitations and differences. While most browsers and operating systems include some support for `<datalist>` elements, their styling is inconsistent at best.
+
+Learn more about [support for datalist elements](https://caniuse.com/datalist).
+
+{{< example >}}
+<label for="exampleDataList" class="form-label">Datalist example</label>
+<input class="form-control" list="datalistOptions" id="exampleDataList" placeholder="Type to search...">
+<datalist id="datalistOptions">
+ <option value="San Francisco">
+ <option value="New York">
+ <option value="Seattle">
+ <option value="Los Angeles">
+ <option value="Chicago">
+</datalist>
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+Form controls make use of a small amount of CSS variables to support custom styling across color modes.
+
+{{< scss-docs name="form-control-vars" file="scss/_root.scss" >}}
+
+### Sass variables
+
+`$input-*` are shared across most of our form controls (and not buttons).
+
+{{< scss-docs name="form-input-variables" file="scss/_variables.scss" >}}
+
+`$form-label-*` and `$form-text-*` are for our `<label>`s and `.form-text` component.
+
+{{< scss-docs name="form-label-variables" file="scss/_variables.scss" >}}
+
+{{< scss-docs name="form-text-variables" file="scss/_variables.scss" >}}
+
+`$form-file-*` are for file input.
+
+{{< scss-docs name="form-file-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/forms/input-group.md b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/input-group.md
new file mode 100644
index 000000000..01be5cffe
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/input-group.md
@@ -0,0 +1,319 @@
+---
+layout: docs
+title: Input group
+description: Easily extend form controls by adding text, buttons, or button groups on either side of textual inputs, custom selects, and custom file inputs.
+group: forms
+toc: true
+---
+
+## Basic example
+
+Place one add-on or button on either side of an input. You may also place one on both sides of an input. Remember to place `<label>`s outside the input group.
+
+{{< example >}}
+<div class="input-group mb-3">
+ <span class="input-group-text" id="basic-addon1">@</span>
+ <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
+</div>
+
+<div class="input-group mb-3">
+ <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="basic-addon2">
+ <span class="input-group-text" id="basic-addon2">@example.com</span>
+</div>
+
+<div class="mb-3">
+ <label for="basic-url" class="form-label">Your vanity URL</label>
+ <div class="input-group">
+ <span class="input-group-text" id="basic-addon3">https://example.com/users/</span>
+ <input type="text" class="form-control" id="basic-url" aria-describedby="basic-addon3">
+ </div>
+ <div class="form-text">Example help text goes outside the input group.</div>
+</div>
+
+<div class="input-group mb-3">
+ <span class="input-group-text">$</span>
+ <input type="text" class="form-control" aria-label="Amount (to the nearest dollar)">
+ <span class="input-group-text">.00</span>
+</div>
+
+<div class="input-group mb-3">
+ <input type="text" class="form-control" placeholder="Username" aria-label="Username">
+ <span class="input-group-text">@</span>
+ <input type="text" class="form-control" placeholder="Server" aria-label="Server">
+</div>
+
+<div class="input-group">
+ <span class="input-group-text">With textarea</span>
+ <textarea class="form-control" aria-label="With textarea"></textarea>
+</div>
+{{< /example >}}
+
+## Wrapping
+
+Input groups wrap by default via `flex-wrap: wrap` in order to accommodate custom form field validation within an input group. You may disable this with `.flex-nowrap`.
+
+{{< example >}}
+<div class="input-group flex-nowrap">
+ <span class="input-group-text" id="addon-wrapping">@</span>
+ <input type="text" class="form-control" placeholder="Username" aria-label="Username" aria-describedby="addon-wrapping">
+</div>
+{{< /example >}}
+
+## Sizing
+
+Add the relative form sizing classes to the `.input-group` itself and contents within will automatically resize—no need for repeating the form control size classes on each element.
+
+**Sizing on the individual input group elements isn't supported.**
+
+{{< example >}}
+<div class="input-group input-group-sm mb-3">
+ <span class="input-group-text" id="inputGroup-sizing-sm">Small</span>
+ <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-sm">
+</div>
+
+<div class="input-group mb-3">
+ <span class="input-group-text" id="inputGroup-sizing-default">Default</span>
+ <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-default">
+</div>
+
+<div class="input-group input-group-lg">
+ <span class="input-group-text" id="inputGroup-sizing-lg">Large</span>
+ <input type="text" class="form-control" aria-label="Sizing example input" aria-describedby="inputGroup-sizing-lg">
+</div>
+{{< /example >}}
+
+## Checkboxes and radios
+
+Place any checkbox or radio option within an input group's addon instead of text. We recommend adding `.mt-0` to the `.form-check-input` when there's no visible text next to the input.
+
+{{< example >}}
+<div class="input-group mb-3">
+ <div class="input-group-text">
+ <input class="form-check-input mt-0" type="checkbox" value="" aria-label="Checkbox for following text input">
+ </div>
+ <input type="text" class="form-control" aria-label="Text input with checkbox">
+</div>
+
+<div class="input-group">
+ <div class="input-group-text">
+ <input class="form-check-input mt-0" type="radio" value="" aria-label="Radio button for following text input">
+ </div>
+ <input type="text" class="form-control" aria-label="Text input with radio button">
+</div>
+{{< /example >}}
+
+## Multiple inputs
+
+While multiple `<input>`s are supported visually, validation styles are only available for input groups with a single `<input>`.
+
+{{< example >}}
+<div class="input-group">
+ <span class="input-group-text">First and last name</span>
+ <input type="text" aria-label="First name" class="form-control">
+ <input type="text" aria-label="Last name" class="form-control">
+</div>
+{{< /example >}}
+
+## Multiple addons
+
+Multiple add-ons are supported and can be mixed with checkbox and radio input versions.
+
+{{< example >}}
+<div class="input-group mb-3">
+ <span class="input-group-text">$</span>
+ <span class="input-group-text">0.00</span>
+ <input type="text" class="form-control" aria-label="Dollar amount (with dot and two decimal places)">
+</div>
+
+<div class="input-group">
+ <input type="text" class="form-control" aria-label="Dollar amount (with dot and two decimal places)">
+ <span class="input-group-text">$</span>
+ <span class="input-group-text">0.00</span>
+</div>
+{{< /example >}}
+
+## Button addons
+
+{{< example >}}
+<div class="input-group mb-3">
+ <button class="btn btn-outline-secondary" type="button" id="button-addon1">Button</button>
+ <input type="text" class="form-control" placeholder="" aria-label="Example text with button addon" aria-describedby="button-addon1">
+</div>
+
+<div class="input-group mb-3">
+ <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username" aria-describedby="button-addon2">
+ <button class="btn btn-outline-secondary" type="button" id="button-addon2">Button</button>
+</div>
+
+<div class="input-group mb-3">
+ <button class="btn btn-outline-secondary" type="button">Button</button>
+ <button class="btn btn-outline-secondary" type="button">Button</button>
+ <input type="text" class="form-control" placeholder="" aria-label="Example text with two button addons">
+</div>
+
+<div class="input-group">
+ <input type="text" class="form-control" placeholder="Recipient's username" aria-label="Recipient's username with two button addons">
+ <button class="btn btn-outline-secondary" type="button">Button</button>
+ <button class="btn btn-outline-secondary" type="button">Button</button>
+</div>
+{{< /example >}}
+
+## Buttons with dropdowns
+
+{{< example >}}
+<div class="input-group mb-3">
+ <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ <input type="text" class="form-control" aria-label="Text input with dropdown button">
+</div>
+
+<div class="input-group mb-3">
+ <input type="text" class="form-control" aria-label="Text input with dropdown button">
+ <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>
+ <ul class="dropdown-menu dropdown-menu-end">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+</div>
+
+<div class="input-group">
+ <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action before</a></li>
+ <li><a class="dropdown-item" href="#">Another action before</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ <input type="text" class="form-control" aria-label="Text input with 2 dropdown buttons">
+ <button class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</button>
+ <ul class="dropdown-menu dropdown-menu-end">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+## Segmented buttons
+
+{{< example >}}
+<div class="input-group mb-3">
+ <button type="button" class="btn btn-outline-secondary">Action</button>
+ <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+ <input type="text" class="form-control" aria-label="Text input with segmented dropdown button">
+</div>
+
+<div class="input-group">
+ <input type="text" class="form-control" aria-label="Text input with segmented dropdown button">
+ <button type="button" class="btn btn-outline-secondary">Action</button>
+ <button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
+ <span class="visually-hidden">Toggle Dropdown</span>
+ </button>
+ <ul class="dropdown-menu dropdown-menu-end">
+ <li><a class="dropdown-item" href="#">Action</a></li>
+ <li><a class="dropdown-item" href="#">Another action</a></li>
+ <li><a class="dropdown-item" href="#">Something else here</a></li>
+ <li><hr class="dropdown-divider"></li>
+ <li><a class="dropdown-item" href="#">Separated link</a></li>
+ </ul>
+</div>
+{{< /example >}}
+
+## Custom forms
+
+Input groups include support for custom selects and custom file inputs. Browser default versions of these are not supported.
+
+### Custom select
+
+{{< example >}}
+<div class="input-group mb-3">
+ <label class="input-group-text" for="inputGroupSelect01">Options</label>
+ <select class="form-select" id="inputGroupSelect01">
+ <option selected>Choose...</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+</div>
+
+<div class="input-group mb-3">
+ <select class="form-select" id="inputGroupSelect02">
+ <option selected>Choose...</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+ <label class="input-group-text" for="inputGroupSelect02">Options</label>
+</div>
+
+<div class="input-group mb-3">
+ <button class="btn btn-outline-secondary" type="button">Button</button>
+ <select class="form-select" id="inputGroupSelect03" aria-label="Example select with button addon">
+ <option selected>Choose...</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+</div>
+
+<div class="input-group">
+ <select class="form-select" id="inputGroupSelect04" aria-label="Example select with button addon">
+ <option selected>Choose...</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+ <button class="btn btn-outline-secondary" type="button">Button</button>
+</div>
+{{< /example >}}
+
+### Custom file input
+
+{{< example >}}
+<div class="input-group mb-3">
+ <label class="input-group-text" for="inputGroupFile01">Upload</label>
+ <input type="file" class="form-control" id="inputGroupFile01">
+</div>
+
+<div class="input-group mb-3">
+ <input type="file" class="form-control" id="inputGroupFile02">
+ <label class="input-group-text" for="inputGroupFile02">Upload</label>
+</div>
+
+<div class="input-group mb-3">
+ <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon03">Button</button>
+ <input type="file" class="form-control" id="inputGroupFile03" aria-describedby="inputGroupFileAddon03" aria-label="Upload">
+</div>
+
+<div class="input-group">
+ <input type="file" class="form-control" id="inputGroupFile04" aria-describedby="inputGroupFileAddon04" aria-label="Upload">
+ <button class="btn btn-outline-secondary" type="button" id="inputGroupFileAddon04">Button</button>
+</div>
+{{< /example >}}
+
+## Sass
+
+### Variables
+
+{{< scss-docs name="input-group-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/layout.md b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/layout.md
index 3b27e3f1c..3b27e3f1c 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/layout.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/layout.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/forms/overview.md b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/overview.md
new file mode 100644
index 000000000..9e54a08bd
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/overview.md
@@ -0,0 +1,154 @@
+---
+layout: docs
+title: Forms
+description: Examples and usage guidelines for form control styles, layout options, and custom components for creating a wide variety of forms.
+group: forms
+toc: true
+aliases: "/docs/5.3/forms/"
+sections:
+ - title: Form control
+ description: Style textual inputs and textareas with support for multiple states.
+ - title: Select
+ description: Improve browser default select elements with a custom initial appearance.
+ - title: Checks & radios
+ description: Use our custom radio buttons and checkboxes in forms for selecting input options.
+ - title: Range
+ description: Replace browser default range inputs with our custom version.
+ - title: Input group
+ description: Attach labels and buttons to your inputs for increased semantic value.
+ - title: Floating labels
+ description: Create beautifully simple form labels that float over your input fields.
+ - title: Layout
+ description: Create inline, horizontal, or complex grid-based layouts with your forms.
+ - title: Validation
+ description: Validate your forms with custom or native validation behaviors and styles.
+---
+
+## Overview
+
+Bootstrap's form controls expand on [our Rebooted form styles]({{< docsref "/content/reboot#forms" >}}) with classes. Use these classes to opt into their customized displays for a more consistent rendering across browsers and devices.
+
+Be sure to use an appropriate `type` attribute on all inputs (e.g., `email` for email address or `number` for numerical information) to take advantage of newer input controls like email verification, number selection, and more.
+
+Here's a quick example to demonstrate Bootstrap's form styles. Keep reading for documentation on required classes, form layout, and more.
+
+{{< example >}}
+<form>
+ <div class="mb-3">
+ <label for="exampleInputEmail1" class="form-label">Email address</label>
+ <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
+ <div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
+ </div>
+ <div class="mb-3">
+ <label for="exampleInputPassword1" class="form-label">Password</label>
+ <input type="password" class="form-control" id="exampleInputPassword1">
+ </div>
+ <div class="mb-3 form-check">
+ <input type="checkbox" class="form-check-input" id="exampleCheck1">
+ <label class="form-check-label" for="exampleCheck1">Check me out</label>
+ </div>
+ <button type="submit" class="btn btn-primary">Submit</button>
+</form>
+{{< /example >}}
+
+## Form text
+
+Block-level or inline-level form text can be created using `.form-text`.
+
+{{< callout warning >}}
+##### Associating form text with form controls
+
+Form text should be explicitly associated with the form control it relates to using the `aria-describedby` attribute. This will ensure that assistive technologies—such as screen readers—will announce this form text when the user focuses or enters the control.
+{{< /callout >}}
+
+Form text below inputs can be styled with `.form-text`. If a block-level element will be used, a top margin is added for easy spacing from the inputs above.
+
+{{< example >}}
+<label for="inputPassword5" class="form-label">Password</label>
+<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
+<div id="passwordHelpBlock" class="form-text">
+ Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
+</div>
+{{< /example >}}
+
+Inline text can use any typical inline HTML element (be it a `<span>`, `<small>`, or something else) with nothing more than the `.form-text` class.
+
+{{< example >}}
+<div class="row g-3 align-items-center">
+ <div class="col-auto">
+ <label for="inputPassword6" class="col-form-label">Password</label>
+ </div>
+ <div class="col-auto">
+ <input type="password" id="inputPassword6" class="form-control" aria-describedby="passwordHelpInline">
+ </div>
+ <div class="col-auto">
+ <span id="passwordHelpInline" class="form-text">
+ Must be 8-20 characters long.
+ </span>
+ </div>
+</div>
+{{< /example >}}
+
+## Disabled forms
+
+Add the `disabled` boolean attribute on an input to prevent user interactions and make it appear lighter.
+
+```html
+<input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here..." disabled>
+```
+
+Add the `disabled` attribute to a `<fieldset>` to disable all the controls within. Browsers treat all native form controls (`<input>`, `<select>`, and `<button>` elements) inside a `<fieldset disabled>` as disabled, preventing both keyboard and mouse interactions on them.
+
+However, if your form also includes custom button-like elements such as `<a class="btn btn-*">...</a>`, these will only be given a style of `pointer-events: none`, meaning they are still focusable and operable using the keyboard. In this case, you must manually modify these controls by adding `tabindex="-1"` to prevent them from receiving focus and `aria-disabled="disabled"` to signal their state to assistive technologies.
+
+{{< example >}}
+<form>
+ <fieldset disabled>
+ <legend>Disabled fieldset example</legend>
+ <div class="mb-3">
+ <label for="disabledTextInput" class="form-label">Disabled input</label>
+ <input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
+ </div>
+ <div class="mb-3">
+ <label for="disabledSelect" class="form-label">Disabled select menu</label>
+ <select id="disabledSelect" class="form-select">
+ <option>Disabled select</option>
+ </select>
+ </div>
+ <div class="mb-3">
+ <div class="form-check">
+ <input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
+ <label class="form-check-label" for="disabledFieldsetCheck">
+ Can't check this
+ </label>
+ </div>
+ </div>
+ <button type="submit" class="btn btn-primary">Submit</button>
+ </fieldset>
+</form>
+{{< /example >}}
+
+## Accessibility
+
+Ensure that all form controls have an appropriate accessible name so that their purpose can be conveyed to users of assistive technologies. The simplest way to achieve this is to use a `<label>` element, or—in the case of buttons—to include sufficiently descriptive text as part of the `<button>...</button>` content.
+
+For situations where it's not possible to include a visible `<label>` or appropriate text content, there are alternative ways of still providing an accessible name, such as:
+
+- `<label>` elements hidden using the `.visually-hidden` class
+- Pointing to an existing element that can act as a label using `aria-labelledby`
+- Providing a `title` attribute
+- Explicitly setting the accessible name on an element using `aria-label`
+
+If none of these are present, assistive technologies may resort to using the `placeholder` attribute as a fallback for the accessible name on `<input>` and `<textarea>` elements. The examples in this section provide a few suggested, case-specific approaches.
+
+While using visually hidden content (`.visually-hidden`, `aria-label`, and even `placeholder` content, which disappears once a form field has content) will benefit assistive technology users, a lack of visible label text may still be problematic for certain users. Some form of visible label is generally the best approach, both for accessibility and usability.
+
+## Sass
+
+Many form variables are set at a general level to be re-used and extended by individual form components. You'll see these most often as `$input-btn-*` and `$input-*` variables.
+
+### Variables
+
+`$input-btn-*` variables are shared global variables between our [buttons]({{< docsref "/components/buttons" >}}) and our form components. You'll find these frequently reassigned as values to other component-specific variables.
+
+{{< scss-docs name="input-btn-variables" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/range.md b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/range.md
index 5c4f02612..5c4f02612 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/range.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/range.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/select.md b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/select.md
index 7f0c255ef..7f0c255ef 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/forms/select.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/select.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/forms/validation.md b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/validation.md
new file mode 100644
index 000000000..b119cd07d
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/forms/validation.md
@@ -0,0 +1,380 @@
+---
+layout: docs
+title: Validation
+description: Provide valuable, actionable feedback to your users with HTML5 form validation, via browser default behaviors or custom styles and JavaScript.
+group: forms
+toc: true
+extra_js:
+ - src: "/docs/5.3/assets/js/validate-forms.js"
+ async: true
+---
+
+{{< callout warning >}}
+We are aware that currently the client-side custom validation styles and tooltips are not accessible, since they are not exposed to assistive technologies. While we work on a solution, we'd recommend either using the server-side option or the default browser validation method.
+{{< /callout >}}
+
+## How it works
+
+Here's how form validation works with Bootstrap:
+
+- HTML form validation is applied via CSS's two pseudo-classes, `:invalid` and `:valid`. It applies to `<input>`, `<select>`, and `<textarea>` elements.
+- Bootstrap scopes the `:invalid` and `:valid` styles to parent `.was-validated` class, usually applied to the `<form>`. Otherwise, any required field without a value shows up as invalid on page load. This way, you may choose when to activate them (typically after form submission is attempted).
+- To reset the appearance of the form (for instance, in the case of dynamic form submissions using Ajax), remove the `.was-validated` class from the `<form>` again after submission.
+- As a fallback, `.is-invalid` and `.is-valid` classes may be used instead of the pseudo-classes for [server-side validation](#server-side). They do not require a `.was-validated` parent class.
+- Due to constraints in how CSS works, we cannot (at present) apply styles to a `<label>` that comes before a form control in the DOM without the help of custom JavaScript.
+- All modern browsers support the [constraint validation API](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#the-constraint-validation-api), a series of JavaScript methods for validating form controls.
+- Feedback messages may utilize the [browser defaults](#browser-defaults) (different for each browser, and unstylable via CSS) or our custom feedback styles with additional HTML and CSS.
+- You may provide custom validity messages with `setCustomValidity` in JavaScript.
+
+With that in mind, consider the following demos for our custom form validation styles, optional server-side classes, and browser defaults.
+
+## Custom styles
+
+For custom Bootstrap form validation messages, you'll need to add the `novalidate` boolean attribute to your `<form>`. This disables the browser default feedback tooltips, but still provides access to the form validation APIs in JavaScript. Try to submit the form below; our JavaScript will intercept the submit button and relay feedback to you. When attempting to submit, you'll see the `:invalid` and `:valid` styles applied to your form controls.
+
+Custom feedback styles apply custom colors, borders, focus styles, and background icons to better communicate feedback. Background icons for `<select>`s are only available with `.form-select`, and not `.form-control`.
+
+{{< example >}}
+<form class="row g-3 needs-validation" novalidate>
+ <div class="col-md-4">
+ <label for="validationCustom01" class="form-label">First name</label>
+ <input type="text" class="form-control" id="validationCustom01" value="Mark" required>
+ <div class="valid-feedback">
+ Looks good!
+ </div>
+ </div>
+ <div class="col-md-4">
+ <label for="validationCustom02" class="form-label">Last name</label>
+ <input type="text" class="form-control" id="validationCustom02" value="Otto" required>
+ <div class="valid-feedback">
+ Looks good!
+ </div>
+ </div>
+ <div class="col-md-4">
+ <label for="validationCustomUsername" class="form-label">Username</label>
+ <div class="input-group has-validation">
+ <span class="input-group-text" id="inputGroupPrepend">@</span>
+ <input type="text" class="form-control" id="validationCustomUsername" aria-describedby="inputGroupPrepend" required>
+ <div class="invalid-feedback">
+ Please choose a username.
+ </div>
+ </div>
+ </div>
+ <div class="col-md-6">
+ <label for="validationCustom03" class="form-label">City</label>
+ <input type="text" class="form-control" id="validationCustom03" required>
+ <div class="invalid-feedback">
+ Please provide a valid city.
+ </div>
+ </div>
+ <div class="col-md-3">
+ <label for="validationCustom04" class="form-label">State</label>
+ <select class="form-select" id="validationCustom04" required>
+ <option selected disabled value="">Choose...</option>
+ <option>...</option>
+ </select>
+ <div class="invalid-feedback">
+ Please select a valid state.
+ </div>
+ </div>
+ <div class="col-md-3">
+ <label for="validationCustom05" class="form-label">Zip</label>
+ <input type="text" class="form-control" id="validationCustom05" required>
+ <div class="invalid-feedback">
+ Please provide a valid zip.
+ </div>
+ </div>
+ <div class="col-12">
+ <div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
+ <label class="form-check-label" for="invalidCheck">
+ Agree to terms and conditions
+ </label>
+ <div class="invalid-feedback">
+ You must agree before submitting.
+ </div>
+ </div>
+ </div>
+ <div class="col-12">
+ <button class="btn btn-primary" type="submit">Submit form</button>
+ </div>
+</form>
+{{< /example >}}
+
+{{< example lang="js" show_preview="false" >}}
+{{< js.inline >}}
+{{- readFile (path.Join "site/static/docs" .Site.Params.docs_version "assets/js/validate-forms.js") -}}
+{{< /js.inline >}}
+{{< /example >}}
+
+## Browser defaults
+
+Not interested in custom validation feedback messages or writing JavaScript to change form behaviors? All good, you can use the browser defaults. Try submitting the form below. Depending on your browser and OS, you'll see a slightly different style of feedback.
+
+While these feedback styles cannot be styled with CSS, you can still customize the feedback text through JavaScript.
+
+{{< example >}}
+<form class="row g-3">
+ <div class="col-md-4">
+ <label for="validationDefault01" class="form-label">First name</label>
+ <input type="text" class="form-control" id="validationDefault01" value="Mark" required>
+ </div>
+ <div class="col-md-4">
+ <label for="validationDefault02" class="form-label">Last name</label>
+ <input type="text" class="form-control" id="validationDefault02" value="Otto" required>
+ </div>
+ <div class="col-md-4">
+ <label for="validationDefaultUsername" class="form-label">Username</label>
+ <div class="input-group">
+ <span class="input-group-text" id="inputGroupPrepend2">@</span>
+ <input type="text" class="form-control" id="validationDefaultUsername" aria-describedby="inputGroupPrepend2" required>
+ </div>
+ </div>
+ <div class="col-md-6">
+ <label for="validationDefault03" class="form-label">City</label>
+ <input type="text" class="form-control" id="validationDefault03" required>
+ </div>
+ <div class="col-md-3">
+ <label for="validationDefault04" class="form-label">State</label>
+ <select class="form-select" id="validationDefault04" required>
+ <option selected disabled value="">Choose...</option>
+ <option>...</option>
+ </select>
+ </div>
+ <div class="col-md-3">
+ <label for="validationDefault05" class="form-label">Zip</label>
+ <input type="text" class="form-control" id="validationDefault05" required>
+ </div>
+ <div class="col-12">
+ <div class="form-check">
+ <input class="form-check-input" type="checkbox" value="" id="invalidCheck2" required>
+ <label class="form-check-label" for="invalidCheck2">
+ Agree to terms and conditions
+ </label>
+ </div>
+ </div>
+ <div class="col-12">
+ <button class="btn btn-primary" type="submit">Submit form</button>
+ </div>
+</form>
+{{< /example >}}
+
+## Server-side
+
+We recommend using client-side validation, but in case you require server-side validation, you can indicate invalid and valid form fields with `.is-invalid` and `.is-valid`. Note that `.invalid-feedback` is also supported with these classes.
+
+For invalid fields, ensure that the invalid feedback/error message is associated with the relevant form field using `aria-describedby` (noting that this attribute allows more than one `id` to be referenced, in case the field already points to additional form text).
+
+To fix [issues with border radius](https://github.com/twbs/bootstrap/issues/25110), input groups require an additional `.has-validation` class.
+
+{{< example >}}
+<form class="row g-3">
+ <div class="col-md-4">
+ <label for="validationServer01" class="form-label">First name</label>
+ <input type="text" class="form-control is-valid" id="validationServer01" value="Mark" required>
+ <div class="valid-feedback">
+ Looks good!
+ </div>
+ </div>
+ <div class="col-md-4">
+ <label for="validationServer02" class="form-label">Last name</label>
+ <input type="text" class="form-control is-valid" id="validationServer02" value="Otto" required>
+ <div class="valid-feedback">
+ Looks good!
+ </div>
+ </div>
+ <div class="col-md-4">
+ <label for="validationServerUsername" class="form-label">Username</label>
+ <div class="input-group has-validation">
+ <span class="input-group-text" id="inputGroupPrepend3">@</span>
+ <input type="text" class="form-control is-invalid" id="validationServerUsername" aria-describedby="inputGroupPrepend3 validationServerUsernameFeedback" required>
+ <div id="validationServerUsernameFeedback" class="invalid-feedback">
+ Please choose a username.
+ </div>
+ </div>
+ </div>
+ <div class="col-md-6">
+ <label for="validationServer03" class="form-label">City</label>
+ <input type="text" class="form-control is-invalid" id="validationServer03" aria-describedby="validationServer03Feedback" required>
+ <div id="validationServer03Feedback" class="invalid-feedback">
+ Please provide a valid city.
+ </div>
+ </div>
+ <div class="col-md-3">
+ <label for="validationServer04" class="form-label">State</label>
+ <select class="form-select is-invalid" id="validationServer04" aria-describedby="validationServer04Feedback" required>
+ <option selected disabled value="">Choose...</option>
+ <option>...</option>
+ </select>
+ <div id="validationServer04Feedback" class="invalid-feedback">
+ Please select a valid state.
+ </div>
+ </div>
+ <div class="col-md-3">
+ <label for="validationServer05" class="form-label">Zip</label>
+ <input type="text" class="form-control is-invalid" id="validationServer05" aria-describedby="validationServer05Feedback" required>
+ <div id="validationServer05Feedback" class="invalid-feedback">
+ Please provide a valid zip.
+ </div>
+ </div>
+ <div class="col-12">
+ <div class="form-check">
+ <input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" aria-describedby="invalidCheck3Feedback" required>
+ <label class="form-check-label" for="invalidCheck3">
+ Agree to terms and conditions
+ </label>
+ <div id="invalidCheck3Feedback" class="invalid-feedback">
+ You must agree before submitting.
+ </div>
+ </div>
+ </div>
+ <div class="col-12">
+ <button class="btn btn-primary" type="submit">Submit form</button>
+ </div>
+</form>
+{{< /example >}}
+
+## Supported elements
+
+Validation styles are available for the following form controls and components:
+
+- `<input>`s and `<textarea>`s with `.form-control` (including up to one `.form-control` in input groups)
+- `<select>`s with `.form-select`
+- `.form-check`s
+
+{{< example >}}
+<form class="was-validated">
+ <div class="mb-3">
+ <label for="validationTextarea" class="form-label">Textarea</label>
+ <textarea class="form-control" id="validationTextarea" placeholder="Required example textarea" required></textarea>
+ <div class="invalid-feedback">
+ Please enter a message in the textarea.
+ </div>
+ </div>
+
+ <div class="form-check mb-3">
+ <input type="checkbox" class="form-check-input" id="validationFormCheck1" required>
+ <label class="form-check-label" for="validationFormCheck1">Check this checkbox</label>
+ <div class="invalid-feedback">Example invalid feedback text</div>
+ </div>
+
+ <div class="form-check">
+ <input type="radio" class="form-check-input" id="validationFormCheck2" name="radio-stacked" required>
+ <label class="form-check-label" for="validationFormCheck2">Toggle this radio</label>
+ </div>
+ <div class="form-check mb-3">
+ <input type="radio" class="form-check-input" id="validationFormCheck3" name="radio-stacked" required>
+ <label class="form-check-label" for="validationFormCheck3">Or toggle this other radio</label>
+ <div class="invalid-feedback">More example invalid feedback text</div>
+ </div>
+
+ <div class="mb-3">
+ <select class="form-select" required aria-label="select example">
+ <option value="">Open this select menu</option>
+ <option value="1">One</option>
+ <option value="2">Two</option>
+ <option value="3">Three</option>
+ </select>
+ <div class="invalid-feedback">Example invalid select feedback</div>
+ </div>
+
+ <div class="mb-3">
+ <input type="file" class="form-control" aria-label="file example" required>
+ <div class="invalid-feedback">Example invalid form file feedback</div>
+ </div>
+
+ <div class="mb-3">
+ <button class="btn btn-primary" type="submit" disabled>Submit form</button>
+ </div>
+</form>
+{{< /example >}}
+
+## Tooltips
+
+If your form layout allows it, you can swap the `.{valid|invalid}-feedback` classes for `.{valid|invalid}-tooltip` classes to display validation feedback in a styled tooltip. Be sure to have a parent with `position: relative` on it for tooltip positioning. In the example below, our column classes have this already, but your project may require an alternative setup.
+
+{{< example >}}
+<form class="row g-3 needs-validation" novalidate>
+ <div class="col-md-4 position-relative">
+ <label for="validationTooltip01" class="form-label">First name</label>
+ <input type="text" class="form-control" id="validationTooltip01" value="Mark" required>
+ <div class="valid-tooltip">
+ Looks good!
+ </div>
+ </div>
+ <div class="col-md-4 position-relative">
+ <label for="validationTooltip02" class="form-label">Last name</label>
+ <input type="text" class="form-control" id="validationTooltip02" value="Otto" required>
+ <div class="valid-tooltip">
+ Looks good!
+ </div>
+ </div>
+ <div class="col-md-4 position-relative">
+ <label for="validationTooltipUsername" class="form-label">Username</label>
+ <div class="input-group has-validation">
+ <span class="input-group-text" id="validationTooltipUsernamePrepend">@</span>
+ <input type="text" class="form-control" id="validationTooltipUsername" aria-describedby="validationTooltipUsernamePrepend" required>
+ <div class="invalid-tooltip">
+ Please choose a unique and valid username.
+ </div>
+ </div>
+ </div>
+ <div class="col-md-6 position-relative">
+ <label for="validationTooltip03" class="form-label">City</label>
+ <input type="text" class="form-control" id="validationTooltip03" required>
+ <div class="invalid-tooltip">
+ Please provide a valid city.
+ </div>
+ </div>
+ <div class="col-md-3 position-relative">
+ <label for="validationTooltip04" class="form-label">State</label>
+ <select class="form-select" id="validationTooltip04" required>
+ <option selected disabled value="">Choose...</option>
+ <option>...</option>
+ </select>
+ <div class="invalid-tooltip">
+ Please select a valid state.
+ </div>
+ </div>
+ <div class="col-md-3 position-relative">
+ <label for="validationTooltip05" class="form-label">Zip</label>
+ <input type="text" class="form-control" id="validationTooltip05" required>
+ <div class="invalid-tooltip">
+ Please provide a valid zip.
+ </div>
+ </div>
+ <div class="col-12">
+ <button class="btn btn-primary" type="submit">Submit form</button>
+ </div>
+</form>
+{{< /example >}}
+
+## Sass
+
+### Variables
+
+{{< scss-docs name="form-feedback-variables" file="scss/_variables.scss" >}}
+
+### Mixins
+
+Two mixins are combined together, through our [loop](#loop), to generate our form validation feedback styles.
+
+{{< scss-docs name="form-validation-mixins" file="scss/mixins/_forms.scss" >}}
+
+### Map
+
+This is the validation Sass map from `_variables.scss`. Override or extend this to generate different or additional states.
+
+{{< scss-docs name="form-validation-states" file="scss/_variables.scss" >}}
+
+Maps of `$form-validation-states` can contain three optional parameters to override tooltips and focus styles.
+
+### Loop
+
+Used to iterate over `$form-validation-states` map values to generate our validation styles. Any modifications to the above Sass map will be reflected in your compiled CSS via this loop.
+
+{{< scss-docs name="form-validation-states-loop" file="scss/forms/_validation.scss" >}}
+
+### Customizing
+
+Validation states can be customized via Sass with the `$form-validation-states` map. Located in our `_variables.scss` file, this Sass map is how we generate the default `valid`/`invalid` validation states. Included is a nested map for customizing each state's color, icon, tooltip color, and focus shadow. While no other states are supported by browsers, those using custom styles can easily add more complex form feedback.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/accessibility.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/accessibility.md
index e9f1cb316..e9f1cb316 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/accessibility.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/accessibility.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/best-practices.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/best-practices.md
index 449d02a85..449d02a85 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/best-practices.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/best-practices.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/browsers-devices.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/browsers-devices.md
index dc550ecb9..dc550ecb9 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/browsers-devices.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/browsers-devices.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/contents.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/contents.md
index 88632b6d5..88632b6d5 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/contents.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/contents.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/contribute.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/contribute.md
new file mode 100644
index 000000000..4d6d405c3
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/contribute.md
@@ -0,0 +1,67 @@
+---
+layout: docs
+title: Contribute
+description: Help develop Bootstrap with our documentation build scripts and tests.
+group: getting-started
+toc: true
+aliases: "/docs/5.3/getting-started/build-tools/"
+---
+
+## Tooling setup
+
+Bootstrap uses [npm scripts](https://docs.npmjs.com/misc/scripts/) to build the documentation and compile source files. Our [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/package.json) houses these scripts for compiling code, running tests, and more. These aren't intended for use outside our repository and documentation.
+
+To use our build system and run our documentation locally, you'll need a copy of Bootstrap's source files and Node. Follow these steps and you should be ready to rock:
+
+1. [Download and install Node.js](https://nodejs.org/en/download/), which we use to manage our dependencies.
+2. Either [download Bootstrap's sources]({{< param "download.source" >}}) or fork and clone [Bootstrap's repository]({{< param repo >}}).
+3. Navigate to the root `/bootstrap` directory and run `npm install` to install our local dependencies listed in [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/package.json).
+
+When completed, you'll be able to run the various commands provided from the command line.
+
+## Using npm scripts
+
+Our [package.json]({{< param repo >}}/blob/v{{< param current_version >}}/package.json) includes numerous tasks for developing the project. Run `npm run` to see all the npm scripts in your terminal. **Primary tasks include:**
+
+{{< bs-table >}}
+| Task | Description |
+| --- | --- |
+| `npm start` | Compiles CSS and JavaScript, builds the documentation, and starts a local server. |
+| `npm run dist` | Creates the `dist/` directory with compiled files. Uses [Sass](https://sass-lang.com/), [Autoprefixer](https://github.com/postcss/autoprefixer), and [terser](https://github.com/terser/terser). |
+| `npm test` | Runs tests locally after running `npm run dist` |
+| `npm run docs-serve` | Builds and runs the documentation locally. |
+{{< /bs-table >}}
+
+{{< callout info >}}
+{{< partial "callouts/info-npm-starter.md" >}}
+{{< /callout >}}
+
+## Sass
+
+Bootstrap uses [Dart Sass](https://sass-lang.com/dart-sass) for compiling our Sass source files into CSS files (included in our build process), and we recommend you do the same if you're compiling Sass using your own asset pipeline. We previously used Node Sass for Bootstrap v4, but LibSass and packages built on top of it, including Node Sass, are now [deprecated](https://sass-lang.com/blog/libsass-is-deprecated).
+
+Dart Sass uses a rounding precision of 10 and for efficiency reasons does not allow adjustment of this value. We don't lower this precision during further processing of our generated CSS, such as during minification, but if you chose to do so we recommend maintaining a precision of at least 6 to prevent issues with browser rounding.
+
+## Autoprefixer
+
+Bootstrap uses [Autoprefixer](https://github.com/postcss/autoprefixer) (included in our build process) to automatically add vendor prefixes to some CSS properties at build time. Doing so saves us time and code by allowing us to write key parts of our CSS a single time while eliminating the need for vendor mixins like those found in v3.
+
+We maintain the list of browsers supported through Autoprefixer in a separate file within our GitHub repository. See [.browserslistrc]({{< param repo >}}/blob/v{{< param current_version >}}/.browserslistrc) for details.
+
+## RTLCSS
+
+Bootstrap uses [RTLCSS](https://rtlcss.com/) to process compiled CSS and convert them to RTL – basically replacing horizontal direction aware properties (e.g. `padding-left`) with their opposite. It allows us only write our CSS a single time and make minor tweaks using RTLCSS [control](https://rtlcss.com/learn/usage-guide/control-directives/) and [value](https://rtlcss.com/learn/usage-guide/value-directives/) directives.
+
+## Local documentation
+
+Running our documentation locally requires the use of Hugo, which gets installed via the [hugo-bin](https://www.npmjs.com/package/hugo-bin) npm package. Hugo is a blazingly fast and quite extensible static site generator that provides us: basic includes, Markdown-based files, templates, and more. Here's how to get it started:
+
+1. Run through the [tooling setup](#tooling-setup) above to install all dependencies.
+2. From the root `/bootstrap` directory, run `npm run docs-serve` in the command line.
+3. Open `http://localhost:9001/` in your browser, and voilà.
+
+Learn more about using Hugo by reading its [documentation](https://gohugo.io/documentation/).
+
+## Troubleshooting
+
+Should you encounter problems with installing dependencies, uninstall all previous dependency versions (global and local). Then, rerun `npm install`.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/download.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/download.md
new file mode 100644
index 000000000..f3965807a
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/download.md
@@ -0,0 +1,119 @@
+---
+layout: docs
+title: Download
+description: Download Bootstrap to get the compiled CSS and JavaScript, source code, or include it with your favorite package managers like npm, RubyGems, and more.
+group: getting-started
+toc: true
+---
+
+## Compiled CSS and JS
+
+Download ready-to-use compiled code for **Bootstrap v{{< param current_version >}}** to easily drop into your project, which includes:
+
+- Compiled and minified CSS bundles (see [CSS files comparison]({{< docsref "/getting-started/contents#css-files" >}}))
+- Compiled and minified JavaScript plugins (see [JS files comparison]({{< docsref "/getting-started/contents#js-files" >}}))
+
+This doesn't include documentation, source files, or any optional JavaScript dependencies like Popper.
+
+<a href="{{< param "download.dist" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download Bootstrap');">Download</a>
+
+## Source files
+
+Compile Bootstrap with your own asset pipeline by downloading our source Sass, JavaScript, and documentation files. This option requires some additional tooling:
+
+- [Sass compiler]({{< docsref "/getting-started/contribute#sass" >}}) for compiling Sass source files into CSS files
+- [Autoprefixer](https://github.com/postcss/autoprefixer) for CSS vendor prefixing
+
+Should you require our full set of [build tools]({{< docsref "/getting-started/contribute#tooling-setup" >}}), they are included for developing Bootstrap and its docs, but they're likely unsuitable for your own purposes.
+
+<a href="{{< param "download.source" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download source');">Download source</a>
+
+## Examples
+
+If you want to download and examine our [examples]({{< docsref "/examples" >}}), you can grab the already built examples:
+
+<a href="{{< param "download.dist_examples" >}}" class="btn btn-bd-primary" onclick="ga('send', 'event', 'Getting started', 'Download', 'Download Examples');">Download Examples</a>
+
+## CDN via jsDelivr
+
+Skip the download with [jsDelivr](https://www.jsdelivr.com/) to deliver cached version of Bootstrap's compiled CSS and JS to your project.
+
+```html
+<link href="{{< param "cdn.css" >}}" rel="stylesheet" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
+<script src="{{< param "cdn.js_bundle" >}}" integrity="{{< param "cdn.js_bundle_hash" >}}" crossorigin="anonymous"></script>
+```
+
+If you're using our compiled JavaScript and prefer to include Popper separately, add Popper before our JS, via a CDN preferably.
+
+```html
+<script src="{{< param "cdn.popper" >}}" integrity="{{< param "cdn.popper_hash" >}}" crossorigin="anonymous"></script>
+<script src="{{< param "cdn.js" >}}" integrity="{{< param "cdn.js_hash" >}}" crossorigin="anonymous"></script>
+```
+
+## Package managers
+
+Pull in Bootstrap's **source files** into nearly any project with some of the most popular package managers. No matter the package manager, Bootstrap will **require a [Sass compiler]({{< docsref "/getting-started/contribute#sass" >}}) and [Autoprefixer](https://github.com/postcss/autoprefixer)** for a setup that matches our official compiled versions.
+
+### npm
+
+Install Bootstrap in your Node.js powered apps with [the npm package](https://www.npmjs.com/package/bootstrap):
+
+```sh
+npm install bootstrap@{{< param "current_version" >}}
+```
+
+`const bootstrap = require('bootstrap')` or `import bootstrap from 'bootstrap'` will load all of Bootstrap's plugins onto a `bootstrap` object.
+The `bootstrap` module itself exports all of our plugins. You can manually load Bootstrap's plugins individually by loading the `/js/dist/*.js` files under the package's top-level directory.
+
+Bootstrap's `package.json` contains some additional metadata under the following keys:
+
+- `sass` - path to Bootstrap's main [Sass](https://sass-lang.com/) source file
+- `style` - path to Bootstrap's non-minified CSS that's been compiled using the default settings (no customization)
+
+{{< callout info >}}
+{{< partial "callouts/info-npm-starter.md" >}}
+{{< /callout >}}
+
+### yarn
+
+Install Bootstrap in your Node.js powered apps with [the yarn package](https://yarnpkg.com/en/package/bootstrap):
+
+```sh
+yarn add bootstrap@{{< param "current_version" >}}
+```
+
+### RubyGems
+
+Install Bootstrap in your Ruby apps using [Bundler](https://bundler.io/) (**recommended**) and [RubyGems](https://rubygems.org/) by adding the following line to your [`Gemfile`](https://bundler.io/gemfile.html):
+
+```ruby
+gem 'bootstrap', '~> {{< param current_ruby_version >}}'
+```
+
+Alternatively, if you're not using Bundler, you can install the gem by running this command:
+
+```sh
+gem install bootstrap -v {{< param current_ruby_version >}}
+```
+
+[See the gem's README](https://github.com/twbs/bootstrap-rubygem/blob/master/README.md) for further details.
+
+### Composer
+
+You can also install and manage Bootstrap's Sass and JavaScript using [Composer](https://getcomposer.org/):
+
+```sh
+composer require twbs/bootstrap:{{< param current_version >}}
+```
+
+### NuGet
+
+If you develop in .NET Framework, you can also install and manage Bootstrap's [CSS](https://www.nuget.org/packages/bootstrap/) or [Sass](https://www.nuget.org/packages/bootstrap.sass/) and JavaScript using [NuGet](https://www.nuget.org/). Newer projects should use [libman](https://docs.microsoft.com/en-us/aspnet/core/client-side/libman/) or another method as NuGet is designed for compiled code, not frontend assets.
+
+```powershell
+Install-Package bootstrap
+```
+
+```powershell
+Install-Package bootstrap.sass
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/introduction.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/introduction.md
new file mode 100644
index 000000000..a4192fb65
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/introduction.md
@@ -0,0 +1,162 @@
+---
+layout: docs
+title: Get started with Bootstrap
+description: Bootstrap is a powerful, feature-packed frontend toolkit. Build anything—from prototype to production—in minutes.
+group: getting-started
+aliases:
+ - "/docs/5.3/getting-started/"
+ - "/docs/getting-started/"
+ - "/getting-started/"
+toc: true
+---
+
+## Quick start
+
+Get started by including Bootstrap's production-ready CSS and JavaScript via CDN without the need for any build steps. See it in practice with this [Bootstrap CodePen demo](https://codepen.io/team/bootstrap/pen/qBamdLj).
+
+<br>
+
+1. **Create a new `index.html` file in your project root.** Include the `<meta name="viewport">` tag as well for [proper responsive behavior](https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag) in mobile devices.
+
+ ```html
+ <!doctype html>
+ <html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap demo</title>
+ </head>
+ <body>
+ <h1>Hello, world!</h1>
+ </body>
+ </html>
+ ```
+
+2. **Include Bootstrap's CSS and JS.** Place the `<link>` tag in the `<head>` for our CSS, and the `<script>` tag for our JavaScript bundle (including Popper for positioning dropdowns, poppers, and tooltips) before the closing `</body>`. Learn more about our [CDN links](#cdn-links).
+
+ ```html
+ <!doctype html>
+ <html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap demo</title>
+ <link href="{{< param "cdn.css" >}}" rel="stylesheet" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
+ </head>
+ <body>
+ <h1>Hello, world!</h1>
+ <script src="{{< param "cdn.js_bundle" >}}" integrity="{{< param "cdn.js_bundle_hash" >}}" crossorigin="anonymous"></script>
+ </body>
+ </html>
+ ```
+
+ You can also include [Popper](https://popper.js.org/) and our JS separately. If you don't plan to use dropdowns, popovers, or tooltips, save some kilobytes by not including Popper.
+
+ ```html
+ <script src="{{< param "cdn.popper" >}}" integrity="{{< param "cdn.popper_hash" >}}" crossorigin="anonymous"></script>
+ <script src="{{< param "cdn.js" >}}" integrity="{{< param "cdn.js_hash" >}}" crossorigin="anonymous"></script>
+ ```
+
+3. **Hello, world!** Open the page in your browser of choice to see your Bootstrapped page. Now you can start building with Bootstrap by creating your own [layout]({{< docsref "/layout/grid" >}}), adding dozens of [components]({{< docsref "/components/buttons" >}}), and utilizing [our official examples]({{< docsref "/examples" >}}).
+
+## CDN links
+
+As reference, here are our primary CDN links.
+
+{{< bs-table >}}
+| Description | URL |
+| --- | --- |
+| CSS | `{{< param "cdn.css" >}}` |
+| JS | `{{< param "cdn.js_bundle" >}}` |
+{{< /bs-table >}}
+
+You can also use the CDN to fetch any of our [additional builds listed in the Contents page]({{< docsref "/getting-started/contents" >}}).
+
+## Next steps
+
+- Read a bit more about some [important global environment settings](#important-globals) that Bootstrap utilizes.
+
+- Read about what's included in Bootstrap in our [contents section]({{< docsref "/getting-started/contents/" >}}) and the list of [components that require JavaScript](#js-components) below.
+
+- Need a little more power? Consider building with Bootstrap by [including the source files via package manager]({{< docsref "/getting-started/download#package-managers" >}}).
+
+- Looking to use Bootstrap as a module with `<script type="module">`? Please refer to our [using Bootstrap as a module]({{< docsref "/getting-started/javascript#using-bootstrap-as-a-module" >}}) section.
+
+## JS components
+
+Curious which components explicitly require our JavaScript and Popper? Click the show components link below. If you're at all unsure about the general page structure, keep reading for an example page template.
+
+<details>
+<summary class="bd-summary-link mb-3">Show components requiring JavaScript</summary>
+{{< markdown >}}
+- Alerts for dismissing
+- Buttons for toggling states and checkbox/radio functionality
+- Carousel for all slide behaviors, controls, and indicators
+- Collapse for toggling visibility of content
+- Dropdowns for displaying and positioning (also requires [Popper](https://popper.js.org/))
+- Modals for displaying, positioning, and scroll behavior
+- Navbar for extending our Collapse and Offcanvas plugins to implement responsive behaviors
+- Navs with the Tab plugin for toggling content panes
+- Offcanvases for displaying, positioning, and scroll behavior
+- Scrollspy for scroll behavior and navigation updates
+- Toasts for displaying and dismissing
+- Tooltips and popovers for displaying and positioning (also requires [Popper](https://popper.js.org/))
+{{< /markdown >}}
+</details>
+
+## Important globals
+
+Bootstrap employs a handful of important global styles and settings, all of which are almost exclusively geared towards the *normalization* of cross browser styles. Let's dive in.
+
+### HTML5 doctype
+
+Bootstrap requires the use of the HTML5 doctype. Without it, you'll see some funky and incomplete styling.
+
+```html
+<!doctype html>
+<html lang="en">
+ ...
+</html>
+```
+
+### Responsive meta tag
+
+Bootstrap is developed *mobile first*, a strategy in which we optimize code for mobile devices first and then scale up components as necessary using CSS media queries. To ensure proper rendering and touch zooming for all devices, add the responsive viewport meta tag to your `<head>`.
+
+```html
+<meta name="viewport" content="width=device-width, initial-scale=1">
+```
+
+You can see an example of this in action in the [quick start](#quick-start).
+
+### Box-sizing
+
+For more straightforward sizing in CSS, we switch the global `box-sizing` value from `content-box` to `border-box`. This ensures `padding` does not affect the final computed width of an element, but it can cause problems with some third-party software like Google Maps and Google Custom Search Engine.
+
+On the rare occasion you need to override it, use something like the following:
+
+```css
+.selector-for-some-widget {
+ box-sizing: content-box;
+}
+```
+
+With the above snippet, nested elements—including generated content via `::before` and `::after`—will all inherit the specified `box-sizing` for that `.selector-for-some-widget`.
+
+Learn more about [box model and sizing at CSS Tricks](https://css-tricks.com/box-sizing/).
+
+### Reboot
+
+For improved cross-browser rendering, we use [Reboot]({{< docsref "/content/reboot" >}}) to correct inconsistencies across browsers and devices while providing slightly more opinionated resets to common HTML elements.
+
+## Community
+
+Stay up-to-date on the development of Bootstrap and reach out to the community with these helpful resources.
+
+- Read and subscribe to [The Official Bootstrap Blog]({{< param blog >}}).
+- Ask and explore [our GitHub Discussions](https://github.com/twbs/bootstrap/discussions).
+- Chat with fellow Bootstrappers in IRC. On the `irc.libera.chat` server, in the `#bootstrap` channel.
+- Implementation help may be found at Stack Overflow (tagged [`bootstrap-5`](https://stackoverflow.com/questions/tagged/bootstrap-5)).
+- Developers should use the keyword `bootstrap` on packages that modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/search?q=keywords:bootstrap) or similar delivery mechanisms for maximum discoverability.
+
+You can also follow [@getbootstrap on Twitter](https://twitter.com/{{< param twitter >}}) for the latest gossip and awesome music videos.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/javascript.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/javascript.md
new file mode 100644
index 000000000..80eed9ce1
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/javascript.md
@@ -0,0 +1,342 @@
+---
+layout: docs
+title: JavaScript
+description: Bring Bootstrap to life with our optional JavaScript plugins. Learn about each plugin, our data and programmatic API options, and more.
+group: getting-started
+toc: true
+---
+
+## Individual or compiled
+
+Plugins can be included individually (using Bootstrap's individual `js/dist/*.js`), or all at once using `bootstrap.js` or the minified `bootstrap.min.js` (don't include both).
+
+If you use a bundler (Webpack, Parcel, Vite...), you can use `/js/dist/*.js` files which are UMD ready.
+
+## Usage with JavaScript frameworks
+
+While the Bootstrap CSS can be used with any framework, **the Bootstrap JavaScript is not fully compatible with JavaScript frameworks like React, Vue, and Angular** which assume full knowledge of the DOM. Both Bootstrap and the framework may attempt to mutate the same DOM element, resulting in bugs like dropdowns that are stuck in the "open" position.
+
+A better alternative for those using this type of frameworks is to use a framework-specific package **instead of** the Bootstrap JavaScript. Here are some of the most popular options:
+
+- React: [React Bootstrap](https://react-bootstrap.github.io/)
+- Vue: [BootstrapVue](https://bootstrap-vue.org/) (currently only supports Vue 2 and Bootstrap 4)
+- Angular: [ng-bootstrap](https://ng-bootstrap.github.io/)
+
+## Using Bootstrap as a module
+
+{{< callout >}}
+**Try it yourself!** Download the source code and working demo for using Bootstrap as an ES module from the [twbs/examples repository](https://github.com/twbs/examples/tree/main/sass-js-esm). You can also [open the example in StackBlitz](https://stackblitz.com/github/twbs/examples/tree/main/sass-js-esm?file=index.html).
+{{< /callout >}}
+
+We provide a version of Bootstrap built as `ESM` (`bootstrap.esm.js` and `bootstrap.esm.min.js`) which allows you to use Bootstrap as a module in the browser, if your [targeted browsers support it](https://caniuse.com/es6-module).
+
+```html
+<script type="module">
+ import { Toast } from 'bootstrap.esm.min.js'
+
+ Array.from(document.querySelectorAll('.toast'))
+ .forEach(toastNode => new Toast(toastNode))
+</script>
+```
+
+Compared to JS bundlers, using ESM in the browser requires you to use the full path and filename instead of the module name. [Read more about JS modules in the browser.](https://v8.dev/features/modules#specifiers) That's why we use `'bootstrap.esm.min.js'` instead of `'bootstrap'` above. However, this is further complicated by our Popper dependency, which imports Popper into our JavaScript like so:
+
+<!-- eslint-skip -->
+```js
+import * as Popper from "@popperjs/core"
+```
+
+If you try this as-is, you'll see an error in the console like the following:
+
+```text
+Uncaught TypeError: Failed to resolve module specifier "@popperjs/core". Relative references must start with either "/", "./", or "../".
+```
+
+To fix this, you can use an `importmap` to resolve the arbitrary module names to complete paths. If your [targeted browsers](https://caniuse.com/?search=importmap) do not support `importmap`, you'll need to use the [es-module-shims](https://github.com/guybedford/es-module-shims) project. Here's how it works for Bootstrap and Popper:
+
+```html
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link href="{{< param "cdn.css" >}}" rel="stylesheet" integrity="{{< param "cdn.css_hash" >}}" crossorigin="anonymous">
+ <title>Hello, modularity!</title>
+ </head>
+ <body>
+ <h1>Hello, modularity!</h1>
+ <button id="popoverButton" type="button" class="btn btn-primary btn-lg" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="ESM in Browser" data-bs-content="Bang!">Custom popover</button>
+
+ <script async src="https://cdn.jsdelivr.net/npm/es-module-shims@1/dist/es-module-shims.min.js" crossorigin="anonymous"></script>
+ <script type="importmap">
+ {
+ "imports": {
+ "@popperjs/core": "{{< param "cdn.popper" >}}",
+ "bootstrap": "https://cdn.jsdelivr.net/npm/bootstrap@{{< param "current_version" >}}/dist/js/bootstrap.esm.min.js"
+ }
+ }
+ </script>
+ <script type="module">
+ import * as bootstrap from 'bootstrap'
+
+ new bootstrap.Popover(document.getElementById('popoverButton'))
+ </script>
+ </body>
+</html>
+```
+
+## Dependencies
+
+Some plugins and CSS components depend on other plugins. If you include plugins individually, make sure to check for these dependencies in the docs.
+
+Our dropdowns, popovers, and tooltips also depend on [Popper](https://popper.js.org/).
+
+## Data attributes
+
+Nearly all Bootstrap plugins can be enabled and configured through HTML alone with data attributes (our preferred way of using JavaScript functionality). Be sure to **only use one set of data attributes on a single element** (e.g., you cannot trigger a tooltip and modal from the same button.)
+
+{{< markdown >}}
+{{< partial "js-data-attributes.md" >}}
+{{< /markdown >}}
+
+## Selectors
+
+We use the native `querySelector` and `querySelectorAll` methods to query DOM elements for performance reasons, so you must use [valid selectors](https://www.w3.org/TR/CSS21/syndata.html#value-def-identifier). If you use special selectors like `collapse:Example`, be sure to escape them.
+
+## Events
+
+Bootstrap provides custom events for most plugins' unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. `show`) is triggered at the start of an event, and its past participle form (ex. `shown`) is triggered on the completion of an action.
+
+All infinitive events provide [`preventDefault()`](https://developer.mozilla.org/en-US/docs/Web/API/Event/preventDefault) functionality. This provides the ability to stop the execution of an action before it starts. Returning false from an event handler will also automatically call `preventDefault()`.
+
+```js
+const myModal = document.querySelector('#myModal')
+
+myModal.addEventListener('show.bs.modal', event => {
+ if (!data) {
+ return event.preventDefault() // stops modal from being shown
+ }
+})
+```
+
+## Programmatic API
+
+All constructors accept an optional options object or nothing (which initiates a plugin with its default behavior):
+
+```js
+const myModalEl = document.querySelector('#myModal')
+const modal = new bootstrap.Modal(myModalEl) // initialized with defaults
+
+const configObject = { keyboard: false }
+const modal1 = new bootstrap.Modal(myModalEl, configObject) // initialized with no keyboard
+```
+
+If you'd like to get a particular plugin instance, each plugin exposes a `getInstance` method. For example, to retrieve an instance directly from an element:
+
+```js
+bootstrap.Popover.getInstance(myPopoverEl)
+```
+
+This method will return `null` if an instance is not initiated over the requested element.
+
+Alternatively, `getOrCreateInstance` can be used to get the instance associated with a DOM element, or create a new one in case it wasn't initialized.
+
+```js
+bootstrap.Popover.getOrCreateInstance(myPopoverEl, configObject)
+```
+
+In case an instance wasn't initialized, it may accept and use an optional configuration object as second argument.
+
+### CSS selectors in constructors
+
+In addition to the `getInstance` and `getOrCreateInstance` methods, all plugin constructors can accept a DOM element or a valid [CSS selector](#selectors) as the first argument. Plugin elements are found with the `querySelector` method since our plugins only support a single element.
+
+```js
+const modal = new bootstrap.Modal('#myModal')
+const dropdown = new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
+const offcanvas = bootstrap.Offcanvas.getInstance('#myOffcanvas')
+const alert = bootstrap.Alert.getOrCreateInstance('#myAlert')
+```
+
+### Asynchronous functions and transitions
+
+All programmatic API methods are **asynchronous** and return to the caller once the transition is started, but **before it ends**. In order to execute an action once the transition is complete, you can listen to the corresponding event.
+
+```js
+const myCollapseEl = document.querySelector('#myCollapse')
+
+myCollapseEl.addEventListener('shown.bs.collapse', event => {
+ // Action to execute once the collapsible area is expanded
+})
+```
+
+In addition, a method call on a **transitioning component will be ignored**.
+
+```js
+const myCarouselEl = document.querySelector('#myCarousel')
+const carousel = bootstrap.Carousel.getInstance(myCarouselEl) // Retrieve a Carousel instance
+
+myCarouselEl.addEventListener('slid.bs.carousel', event => {
+ carousel.to('2') // Will slide to the slide 2 as soon as the transition to slide 1 is finished
+})
+
+carousel.to('1') // Will start sliding to the slide 1 and returns to the caller
+carousel.to('2') // !! Will be ignored, as the transition to the slide 1 is not finished !!
+```
+
+#### `dispose` method
+
+While it may seem correct to use the `dispose` method immediately after `hide()`, it will lead to incorrect results. Here's an example of the problem use:
+
+```js
+const myModal = document.querySelector('#myModal')
+myModal.hide() // it is asynchronous
+
+myModal.addEventListener('shown.bs.hidden', event => {
+ myModal.dispose()
+})
+```
+
+### Default settings
+
+You can change the default settings for a plugin by modifying the plugin's `Constructor.Default` object:
+
+```js
+// changes default for the modal plugin's `keyboard` option to false
+bootstrap.Modal.Default.keyboard = false
+```
+
+## Methods and properties
+
+Every Bootstrap plugin exposes the following methods and static properties.
+
+{{< bs-table "table" >}}
+| Method | Description |
+| --- | --- |
+| `dispose` | Destroys an element's modal. (Removes stored data on the DOM element) |
+| `getInstance` | *Static* method which allows you to get the modal instance associated with a DOM element. |
+| `getOrCreateInstance` | *Static* method which allows you to get the modal instance associated with a DOM element, or create a new one in case it wasn't initialized. |
+{{< /bs-table >}}
+
+{{< bs-table "table" >}}
+| Static property | Description |
+| --- | --- |
+| `NAME` | Returns the plugin name. (Example: `bootstrap.Tooltip.NAME`) |
+| `VERSION` | The version of each of Bootstrap's plugins can be accessed via the `VERSION` property of the plugin's constructor (Example: `bootstrap.Tooltip.VERSION`) |
+{{< /bs-table >}}
+
+## Sanitizer
+
+Tooltips and Popovers use our built-in sanitizer to sanitize options which accept HTML.
+
+The default `allowList` value is the following:
+
+```js
+const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i
+const DefaultAllowlist = {
+ // Global attributes allowed on any supplied element below.
+ '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
+ a: ['target', 'href', 'title', 'rel'],
+ area: [],
+ b: [],
+ br: [],
+ col: [],
+ code: [],
+ div: [],
+ em: [],
+ hr: [],
+ h1: [],
+ h2: [],
+ h3: [],
+ h4: [],
+ h5: [],
+ h6: [],
+ i: [],
+ img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
+ li: [],
+ ol: [],
+ p: [],
+ pre: [],
+ s: [],
+ small: [],
+ span: [],
+ sub: [],
+ sup: [],
+ strong: [],
+ u: [],
+ ul: []
+}
+```
+
+If you want to add new values to this default `allowList` you can do the following:
+
+```js
+const myDefaultAllowList = bootstrap.Tooltip.Default.allowList
+
+// To allow table elements
+myDefaultAllowList.table = []
+
+// To allow td elements and data-bs-option attributes on td elements
+myDefaultAllowList.td = ['data-bs-option']
+
+// You can push your custom regex to validate your attributes.
+// Be careful about your regular expressions being too lax
+const myCustomRegex = /^data-my-app-[\w-]+/
+myDefaultAllowList['*'].push(myCustomRegex)
+```
+
+If you want to bypass our sanitizer because you prefer to use a dedicated library, for example [DOMPurify](https://www.npmjs.com/package/dompurify), you should do the following:
+
+```js
+const yourTooltipEl = document.querySelector('#yourTooltip')
+const tooltip = new bootstrap.Tooltip(yourTooltipEl, {
+ sanitizeFn(content) {
+ return DOMPurify.sanitize(content)
+ }
+})
+```
+
+## Optionally using jQuery
+
+**You don't need jQuery in Bootstrap 5**, but it's still possible to use our components with jQuery. If Bootstrap detects `jQuery` in the `window` object, it'll add all of our components in jQuery's plugin system. This allows you to do the following:
+
+```js
+// to enable tooltips with the default configuration
+$('[data-bs-toggle="tooltip"]').tooltip()
+
+// to initialize tooltips with given configuration
+$('[data-bs-toggle="tooltip"]').tooltip({
+ boundary: 'clippingParents',
+ customClass: 'myClass'
+})
+
+// to trigger the `show` method
+$('#myTooltip').tooltip('show')
+```
+
+The same goes for our other components.
+
+### No conflict
+
+Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call `.noConflict` on the plugin you wish to revert the value of.
+
+```js
+const bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
+$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Bootstrap functionality
+```
+
+Bootstrap does not officially support third-party JavaScript libraries like Prototype or jQuery UI. Despite `.noConflict` and namespaced events, there may be compatibility problems that you need to fix on your own.
+
+### jQuery events
+
+Bootstrap will detect jQuery if `jQuery` is present in the `window` object and there is no `data-bs-no-jquery` attribute set on `<body>`. If jQuery is found, Bootstrap will emit events thanks to jQuery's event system. So if you want to listen to Bootstrap's events, you'll have to use the jQuery methods (`.on`, `.one`) instead of `addEventListener`.
+
+```js
+$('#myTab a').on('shown.bs.tab', () => {
+ // do something...
+})
+```
+
+## Disabled JavaScript
+
+Bootstrap's plugins have no special fallback when JavaScript is disabled. If you care about the user experience in this case, use [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript) to explain the situation (and how to re-enable JavaScript) to your users, and/or add your own custom fallbacks.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/parcel.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/parcel.md
new file mode 100644
index 000000000..833b07713
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/parcel.md
@@ -0,0 +1,159 @@
+---
+layout: docs
+title: "Bootstrap & Parcel"
+description: The official guide for how to include and bundle Bootstrap's CSS and JavaScript in your project using Parcel.
+group: getting-started
+toc: true
+thumbnail: guides/bootstrap-parcel@2x.png
+---
+
+<img class="mb-4 img-fluid rounded-3" srcset="/docs/{{< param docs_version >}}/assets/img/guides/bootstrap-parcel.png, /docs/{{< param docs_version >}}/assets/img/guides/bootstrap-parcel@2x.png 2x" src="/docs/{{< param docs_version >}}/assets/img/guides/bootstrap-parcel.png" width="2000" height="1000" alt="">
+
+{{< callout >}}
+**Want to skip to the end?** Download the source code and working demo for this guide from the [twbs/examples repository](https://github.com/twbs/examples/tree/main/parcel). You can also [open the example in StackBlitz](https://stackblitz.com/github/twbs/examples/tree/main/parcel?file=index.html) but not run it because Parcel isn't currently supported there.
+{{< /callout >}}
+
+## Setup
+
+We're building a Parcel project with Bootstrap from scratch, so there are some prerequisites and up front steps before we can really get started. This guide requires you to have Node.js installed and some familiarity with the terminal.
+
+1. **Create a project folder and setup npm.** We'll create the `my-project` folder and initialize npm with the `-y` argument to avoid it asking us all the interactive questions.
+
+ ```sh
+ mkdir my-project && cd my-project
+ npm init -y
+ ```
+
+2. **Install Parcel.** Unlike our Webpack guide, there's only a single build tool dependency here. Parcel will automatically install language transformers (like Sass) as it detects them. We use `--save-dev` to signal that this dependency is only for development use and not for production.
+
+ ```sh
+ npm i --save-dev parcel
+ ```
+
+3. **Install Bootstrap.** Now we can install Bootstrap. We'll also install Popper since our dropdowns, popovers, and tooltips depend on it for their positioning. If you don't plan on using those components, you can omit Popper here.
+
+ ```sh
+ npm i --save bootstrap @popperjs/core
+ ```
+
+Now that we have all the necessary dependencies installed, we can get to work creating the project files and importing Bootstrap.
+
+## Project structure
+
+We've already created the `my-project` folder and initialized npm. Now we'll also create our `src` folder, stylesheet, and JavaScript file to round out the project structure. Run the following from `my-project`, or manually create the folder and file structure shown below.
+
+```sh
+mkdir {src,src/js,src/scss}
+touch src/index.html src/js/main.js src/scss/styles.scss
+```
+
+When you're done, your complete project should look like this:
+
+```text
+my-project/
+├── src/
+│ ├── js/
+│ │ └── main.js
+│ ├── scss/
+│ │ └── styles.scss
+│ └── index.html
+├── package-lock.json
+└── package.json
+```
+
+At this point, everything is in the right place, but Parcel needs an HTML page and npm script to start our server.
+
+## Configure Parcel
+
+With dependencies installed and our project folder ready for us to start coding, we can now configure Parcel and run our project locally. Parcel itself requires no configuration file by design, but we do need an npm script and an HTML file to start our server.
+
+1. **Fill in the `src/index.html` file.** Parcel needs a page to render, so we use our `index.html` page to set up some basic HTML, including our CSS and JavaScript files.
+
+ ```html
+ <!doctype html>
+ <html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap w/ Parcel</title>
+ <link rel="stylesheet" href="scss/styles.scss">
+ <script type="module" src="js/main.js"></script>
+ </head>
+ <body>
+ <div class="container py-4 px-3 mx-auto">
+ <h1>Hello, Bootstrap and Parcel!</h1>
+ <button class="btn btn-primary">Primary button</button>
+ </div>
+ </body>
+ </html>
+ ```
+
+ We're including a little bit of Bootstrap styling here with the `div class="container"` and `<button>` so that we see when Bootstrap's CSS is loaded by Parcel.
+
+ Parcel will automatically detect we're using Sass and install the [Sass Parcel plugin](https://parceljs.org/languages/sass/) to support it. However, if you wish, you can also manually run `npm i --save-dev @parcel/transformer-sass`.
+
+2. **Add the Parcel npm scripts.** Open the `package.json` and add the following `start` script to the `scripts` object. We'll use this script to start our Parcel development server and render the HTML file we created after it's compiled into the `dist` directory.
+
+ ```json
+ {
+ // ...
+ "scripts": {
+ "start": "parcel serve src/index.html --public-url / --dist-dir dist",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ // ...
+ }
+ ```
+
+3. **And finally, we can start Parcel.** From the `my-project` folder in your terminal, run that newly added npm script:
+
+ ```sh
+ npm start
+ ```
+
+ <img class="img-fluid" src="/docs/{{< param docs_version >}}/assets/img/guides/parcel-dev-server.png" alt="Parcel dev server running">
+
+In the next and final section to this guide, we'll import all of Bootstrap's CSS and JavaScript.
+
+## Import Bootstrap
+
+Importing Bootstrap into Parcel requires two imports, one into our `styles.scss` and one into our `main.js`.
+
+1. **Import Bootstrap's CSS.** Add the following to `src/scss/styles.scss` to import all of Bootstrap's source Sass.
+
+ ```scss
+ // Import all of Bootstrap's CSS
+ @import "~bootstrap/scss/bootstrap";
+ ```
+
+ *You can also import our stylesheets individually if you want. [Read our Sass import docs]({{< docsref "/customize/sass#importing" >}}) for details.*
+
+2. **Import Bootstrap's JS.** Add the following to `src/js/main.js` to import all of Bootstrap's JS. Popper will be imported automatically through Bootstrap.
+
+ <!-- eslint-skip -->
+ ```js
+ // Import all of Bootstrap's JS
+ import * as bootstrap from 'bootstrap'
+ ```
+
+ You can also import JavaScript plugins individually as needed to keep bundle sizes down:
+
+ <!-- eslint-skip -->
+ ```js
+ import Alert from 'bootstrap/js/dist/alert'
+
+ // or, specify which plugins you need:
+ import { Tooltip, Toast, Popover } from 'bootstrap'
+ ```
+
+ *[Read our JavaScript docs]({{< docsref "/getting-started/javascript/" >}}) for more information on how to use Bootstrap's plugins.*
+
+3. **And you're done! 🎉** With Bootstrap's source Sass and JS fully loaded, your local development server should now look like this.
+
+ <img class="img-fluid" src="/docs/{{< param docs_version >}}/assets/img/guides/parcel-dev-server-bootstrap.png" alt="Parcel dev server running with Bootstrap">
+
+ Now you can start adding any Bootstrap components you want to use. Be sure to [check out the complete Parcel example project](https://github.com/twbs/examples/tree/main/parcel) for how to include additional custom Sass and optimize your build by importing only the parts of Bootstrap's CSS and JS that you need.
+
+{{< markdown >}}
+{{< partial "guide-footer.md" >}}
+{{< /markdown >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/rfs.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/rfs.md
index 5aa6840a4..5aa6840a4 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/rfs.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/rfs.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/rtl.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/rtl.md
index f4abf050b..f4abf050b 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/rtl.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/rtl.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/vite.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/vite.md
new file mode 100644
index 000000000..4086316d3
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/vite.md
@@ -0,0 +1,199 @@
+---
+layout: docs
+title: "Bootstrap & Vite"
+description: The official guide for how to include and bundle Bootstrap's CSS and JavaScript in your project using Vite.
+group: getting-started
+toc: true
+thumbnail: guides/bootstrap-vite@2x.png
+---
+
+<img class="mb-4 img-fluid rounded-3" srcset="/docs/{{< param docs_version >}}/assets/img/guides/bootstrap-vite.png, /docs/{{< param docs_version >}}/assets/img/guides/bootstrap-vite@2x.png 2x" src="/docs/{{< param docs_version >}}/assets/img/guides/bootstrap-vite.png" width="2000" height="1000" alt="">
+
+{{< callout >}}
+**Want to skip to the end?** Download the source code and working demo for this guide from the [twbs/examples repository](https://github.com/twbs/examples/tree/main/vite). You can also [open the example in StackBlitz](https://stackblitz.com/github/twbs/examples/tree/main/vite?file=index.html) for live editing.
+{{< /callout >}}
+
+## Setup
+
+We're building a Vite project with Bootstrap from scratch, so there are some prerequisites and up front steps before we can really get started. This guide requires you to have Node.js installed and some familiarity with the terminal.
+
+1. **Create a project folder and setup npm.** We'll create the `my-project` folder and initialize npm with the `-y` argument to avoid it asking us all the interactive questions.
+
+ ```sh
+ mkdir my-project && cd my-project
+ npm init -y
+ ```
+
+2. **Install Vite.** Unlike our Webpack guide, there’s only a single build tool dependency here. We use `--save-dev` to signal that this dependency is only for development use and not for production.
+
+ ```sh
+ npm i --save-dev vite
+ ```
+
+3. **Install Bootstrap.** Now we can install Bootstrap. We'll also install Popper since our dropdowns, popovers, and tooltips depend on it for their positioning. If you don't plan on using those components, you can omit Popper here.
+
+ ```sh
+ npm i --save bootstrap @popperjs/core
+ ```
+
+4. **Install additional dependency.** In addition to Vite and Bootstrap, we need another dependency (Sass) to properly import and bundle Bootstrap's CSS.
+
+ ```sh
+ npm i --save-dev sass
+ ```
+
+Now that we have all the necessary dependencies installed and setup, we can get to work creating the project files and importing Bootstrap.
+
+## Project structure
+
+We've already created the `my-project` folder and initialized npm. Now we'll also create our `src` folder, stylesheet, and JavaScript file to round out the project structure. Run the following from `my-project`, or manually create the folder and file structure shown below.
+
+```sh
+mkdir {src,src/js,src/scss}
+touch src/index.html src/js/main.js src/scss/styles.scss vite.config.js
+```
+
+When you're done, your complete project should look like this:
+
+```text
+my-project/
+├── src/
+│ ├── js/
+│ │ └── main.js
+│ └── scss/
+│ | └── styles.scss
+| └── index.html
+├── package-lock.json
+├── package.json
+└── vite.config.js
+```
+
+At this point, everything is in the right place, but Vite won't work because we haven't filled in our `vite.config.js` yet.
+
+## Configure Vite
+
+With dependencies installed and our project folder ready for us to start coding, we can now configure Vite and run our project locally.
+
+1. **Open `vite.config.js` in your editor.** Since it's blank, we'll need to add some boilerplate config to it so we can start our server. This part of the config tells Vite where to look for our project's JavaScript and how the development server should behave (pulling from the `src` folder with hot reload).
+
+ <!-- eslint-skip -->
+ ```js
+ const path = require('path')
+
+ export default {
+ root: path.resolve(__dirname, 'src'),
+ server: {
+ port: 8080,
+ hot: true
+ }
+ }
+ ```
+
+2. **Next we fill in `src/index.html`.** This is the HTML page Vite will load in the browser to utilize the bundled CSS and JS we'll add to it in later steps.
+
+ ```html
+ <!doctype html>
+ <html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>Bootstrap w/ Vite</title>
+ </head>
+ <body>
+ <div class="container py-4 px-3 mx-auto">
+ <h1>Hello, Bootstrap and Vite!</h1>
+ <button class="btn btn-primary">Primary button</button>
+ </div>
+ <script type="module" src="./js/main.js"></script>
+ </body>
+ </html>
+ ```
+
+ We're including a little bit of Bootstrap styling here with the `div class="container"` and `<button>` so that we see when Bootstrap's CSS is loaded by Vite.
+
+3. **Now we need an npm script to run Vite.** Open `package.json` and add the `start` script shown below (you should already have the test script). We'll use this script to start our local Vite dev server.
+
+ ```json
+ {
+ // ...
+ "scripts": {
+ "start": "vite",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ // ...
+ }
+ ```
+
+4. **And finally, we can start Vite.** From the `my-project` folder in your terminal, run that newly added npm script:
+
+ ```sh
+ npm start
+ ```
+
+ <img class="img-fluid" src="/docs/{{< param docs_version >}}/assets/img/guides/vite-dev-server.png" alt="Vite dev server running">
+
+In the next and final section to this guide, we’ll import all of Bootstrap’s CSS and JavaScript.
+
+## Import Bootstrap
+
+1. **Set up Bootstrap's Sass import in `vite.config.js`.** Your configuration file is now complete and should match the snippet below. The only new part here is the `resolve` section—we use this to add an alias to our source files inside `node_modules` to keep imports as simple as possible.
+
+ <!-- eslint-skip -->
+ ```js
+ const path = require('path')
+
+ export default {
+ root: path.resolve(__dirname, 'src'),
+ resolve: {
+ alias: {
+ '~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap'),
+ }
+ },
+ server: {
+ port: 8080,
+ hot: true
+ }
+ }
+ ```
+
+2. **Now, let's import Bootstrap's CSS.** Add the following to `src/scss/styles.scss` to import all of Bootstrap's source Sass.
+
+ ```scss
+ // Import all of Bootstrap's CSS
+ @import "~bootstrap/scss/bootstrap";
+ ```
+
+ *You can also import our stylesheets individually if you want. [Read our Sass import docs]({{< docsref "/customize/sass#importing" >}}) for details.*
+
+3. **Next we load the CSS and import Bootstrap's JavaScript.** Add the following to `src/js/main.js` to load the CSS and import all of Bootstrap's JS. Popper will be imported automatically through Bootstrap.
+
+ <!-- eslint-skip -->
+ ```js
+ // Import our custom CSS
+ import '../scss/styles.scss'
+
+ // Import all of Bootstrap's JS
+ import * as bootstrap from 'bootstrap'
+ ```
+
+ You can also import JavaScript plugins individually as needed to keep bundle sizes down:
+
+ <!-- eslint-skip -->
+ ```js
+ import Alert from 'bootstrap/js/dist/alert';
+
+ // or, specify which plugins you need:
+ import { Tooltip, Toast, Popover } from 'bootstrap';
+ ```
+
+ *[Read our JavaScript docs]({{< docsref "/getting-started/javascript/" >}}) for more information on how to use Bootstrap's plugins.*
+
+4. **And you're done! 🎉** With Bootstrap's source Sass and JS fully loaded, your local development server should now look like this.
+
+ <img class="img-fluid" src="/docs/{{< param docs_version >}}/assets/img/guides/vite-dev-server-bootstrap.png" alt="Vite dev server running with Bootstrap">
+
+ Now you can start adding any Bootstrap components you want to use. Be sure to [check out the complete Vite example project](https://github.com/twbs/examples/tree/main/vite) for how to include additional custom Sass and optimize your build by importing only the parts of Bootstrap's CSS and JS that you need.
+
+{{< markdown >}}
+{{< partial "guide-footer.md" >}}
+{{< /markdown >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/webpack.md b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/webpack.md
index 870e070e3..870e070e3 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/getting-started/webpack.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/getting-started/webpack.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/clearfix.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/clearfix.md
new file mode 100644
index 000000000..3aa61876e
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/clearfix.md
@@ -0,0 +1,36 @@
+---
+layout: docs
+title: Clearfix
+description: Quickly and easily clear floated content within a container by adding a clearfix utility.
+group: helpers
+aliases: "/docs/5.3/helpers/"
+---
+
+Easily clear `float`s by adding `.clearfix` **to the parent element**. Can also be used as a mixin.
+
+Use in HTML:
+
+```html
+<div class="clearfix">...</div>
+```
+
+The mixin source code:
+
+{{< scss-docs name="clearfix" file="scss/mixins/_clearfix.scss" >}}
+
+Use the mixin in SCSS:
+
+```scss
+.element {
+ @include clearfix;
+}
+```
+
+The following example shows how the clearfix can be used. Without the clearfix the wrapping div would not span around the buttons which would cause a broken layout.
+
+{{< example >}}
+<div class="bg-info clearfix">
+ <button type="button" class="btn btn-secondary float-start">Example Button floated left</button>
+ <button type="button" class="btn btn-secondary float-end">Example Button floated right</button>
+</div>
+{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/color-background.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/color-background.md
new file mode 100644
index 000000000..aee048e0f
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/color-background.md
@@ -0,0 +1,50 @@
+---
+layout: docs
+title: Color and background
+description: Set a background color with contrasting foreground color.
+group: helpers
+toc: true
+added: "5.2"
+---
+
+## Overview
+
+Color and background helpers combine the power of our [`.text-*` utilities]({{< docsref "/utilities/colors" >}}) and [`.bg-*` utilities]({{< docsref "/utilities/background" >}}) in one class. Using our Sass `color-contrast()` function, we automatically determine a contrasting `color` for a particular `background-color`.
+
+{{< callout warning >}}
+**Heads up!** There's currently no support for a CSS-native `color-contrast` function, so we use our own via Sass. This means that customizing our theme colors via CSS variables may cause color contrast issues with these utilities.
+{{< /callout >}}
+
+{{< example >}}
+{{< text-bg.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="text-bg-{{ .name }} p-3">{{ .name | title }} with contrasting color</div>
+{{- end -}}
+{{< /text-bg.inline >}}
+{{< /example >}}
+
+## With components
+
+Use them in place of combined `.text-*` and `.bg-*` classes, like on [badges]({{< docsref "/components/badge#background-colors" >}}):
+
+{{< example >}}
+<span class="badge text-bg-primary">Primary</span>
+<span class="badge text-bg-info">Info</span>
+{{< /example >}}
+
+Or on [cards]({{< docsref "/components/card#background-and-color" >}}):
+
+{{< example >}}
+<div class="card text-bg-primary mb-3" style="max-width: 18rem;">
+ <div class="card-header">Header</div>
+ <div class="card-body">
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ </div>
+</div>
+<div class="card text-bg-info mb-3" style="max-width: 18rem;">
+ <div class="card-header">Header</div>
+ <div class="card-body">
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ </div>
+</div>
+{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/colored-links.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/colored-links.md
index e940196ff..e940196ff 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/colored-links.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/colored-links.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/position.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/position.md
index b4e1f71f9..b4e1f71f9 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/position.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/position.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/ratio.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/ratio.md
index 771bc07cb..771bc07cb 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/ratio.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/ratio.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/stacks.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/stacks.md
new file mode 100644
index 000000000..802ab4db6
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/stacks.md
@@ -0,0 +1,85 @@
+---
+layout: docs
+title: Stacks
+description: Shorthand helpers that build on top of our flexbox utilities to make component layout faster and easier than ever.
+group: helpers
+toc: true
+added: "5.1"
+---
+
+Stacks offer a shortcut for applying a number of flexbox properties to quickly and easily create layouts in Bootstrap. All credit for the concept and implementation goes to the open source [Pylon project](https://almonk.github.io/pylon/).
+
+{{< callout warning >}}
+Heads up! Support for gap utilities with flexbox was recently added to Safari, so consider verifying your intended browser support. Grid layout should have no issues. [Read more](https://caniuse.com/flexbox-gap).
+{{< /callout >}}
+
+## Vertical
+
+Use `.vstack` to create vertical layouts. Stacked items are full-width by default. Use `.gap-*` utilities to add space between items.
+
+{{< example >}}
+<div class="vstack gap-3">
+ <div class="bg-body-tertiary border">First item</div>
+ <div class="bg-body-tertiary border">Second item</div>
+ <div class="bg-body-tertiary border">Third item</div>
+</div>
+{{< /example >}}
+
+## Horizontal
+
+Use `.hstack` for horizontal layouts. Stacked items are vertically centered by default and only take up their necessary width. Use `.gap-*` utilities to add space between items.
+
+{{< example >}}
+<div class="hstack gap-3">
+ <div class="bg-body-tertiary border">First item</div>
+ <div class="bg-body-tertiary border">Second item</div>
+ <div class="bg-body-tertiary border">Third item</div>
+</div>
+{{< /example >}}
+
+Using horizontal margin utilities like `.ms-auto` as spacers:
+
+{{< example >}}
+<div class="hstack gap-3">
+ <div class="bg-body-tertiary border">First item</div>
+ <div class="bg-body-tertiary border ms-auto">Second item</div>
+ <div class="bg-body-tertiary border">Third item</div>
+</div>
+{{< /example >}}
+
+And with [vertical rules]({{< docsref "/helpers/vertical-rule" >}}):
+
+{{< example >}}
+<div class="hstack gap-3">
+ <div class="bg-body-tertiary border">First item</div>
+ <div class="bg-body-tertiary border ms-auto">Second item</div>
+ <div class="vr"></div>
+ <div class="bg-body-tertiary border">Third item</div>
+</div>
+{{< /example >}}
+
+## Examples
+
+Use `.vstack` to stack buttons and other elements:
+
+{{< example >}}
+<div class="vstack gap-2 col-md-5 mx-auto">
+ <button type="button" class="btn btn-secondary">Save changes</button>
+ <button type="button" class="btn btn-outline-secondary">Cancel</button>
+</div>
+{{< /example >}}
+
+Create an inline form with `.hstack`:
+
+{{< example >}}
+<div class="hstack gap-3">
+ <input class="form-control me-auto" type="text" placeholder="Add your item here..." aria-label="Add your item here...">
+ <button type="button" class="btn btn-secondary">Submit</button>
+ <div class="vr"></div>
+ <button type="button" class="btn btn-outline-danger">Reset</button>
+</div>
+{{< /example >}}
+
+## Sass
+
+{{< scss-docs name="stacks" file="scss/helpers/_stacks.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/stretched-link.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/stretched-link.md
new file mode 100644
index 000000000..8a13ff41c
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/stretched-link.md
@@ -0,0 +1,74 @@
+---
+layout: docs
+title: Stretched link
+description: Make any HTML element or Bootstrap component clickable by "stretching" a nested link via CSS.
+group: helpers
+---
+
+Add `.stretched-link` to a link to make its [containing block](https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block) clickable via a `::after` pseudo element. In most cases, this means that an element with `position: relative;` that contains a link with the `.stretched-link` class is clickable. Please note given [how CSS `position` works](https://www.w3.org/TR/CSS21/visuren.html#propdef-position), `.stretched-link` cannot be mixed with most table elements.
+
+Cards have `position: relative` by default in Bootstrap, so in this case you can safely add the `.stretched-link` class to a link in the card without any other HTML changes.
+
+Multiple links and tap targets are not recommended with stretched links. However, some `position` and `z-index` styles can help should this be required.
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="false" title="Card image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card with stretched link</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ <a href="#" class="btn btn-primary stretched-link">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+Most custom components do not have `position: relative` by default, so we need to add the `.position-relative` here to prevent the link from stretching outside the parent element.
+
+{{< example >}}
+<div class="d-flex position-relative">
+ {{< placeholder width="144" height="144" class="flex-shrink-0 me-3" text="false" title="Generic placeholder image" >}}
+ <div>
+ <h5 class="mt-0">Custom component with stretched link</h5>
+ <p>This is some placeholder content for the custom component. It is intended to mimic what some real-world content would look like, and we're using it here to give the component a bit of body and size.</p>
+ <a href="#" class="stretched-link">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+{{< example >}}
+<div class="row g-0 bg-body-secondary position-relative">
+ <div class="col-md-6 mb-md-0 p-md-4">
+ {{< placeholder width="100%" height="200" class="w-100" text="false" title="Generic placeholder image" >}}
+ </div>
+ <div class="col-md-6 p-4 ps-md-0">
+ <h5 class="mt-0">Columns with stretched link</h5>
+ <p>Another instance of placeholder content for this other custom component. It is intended to mimic what some real-world content would look like, and we're using it here to give the component a bit of body and size.</p>
+ <a href="#" class="stretched-link">Go somewhere</a>
+ </div>
+</div>
+{{< /example >}}
+
+## Identifying the containing block
+
+If the stretched link doesn't seem to work, the [containing block](https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#Identifying_the_containing_block) will probably be the cause. The following CSS properties will make an element the containing block:
+
+- A `position` value other than `static`
+- A `transform` or `perspective` value other than `none`
+- A `will-change` value of `transform` or `perspective`
+- A `filter` value other than `none` or a `will-change` value of `filter` (only works on Firefox)
+
+{{< example >}}
+<div class="card" style="width: 18rem;">
+ {{< placeholder width="100%" height="180" class="card-img-top" text="false" title="Card image cap" >}}
+ <div class="card-body">
+ <h5 class="card-title">Card with stretched links</h5>
+ <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
+ <p class="card-text">
+ <a href="#" class="stretched-link text-danger" style="position: relative;">Stretched link will not work here, because <code>position: relative</code> is added to the link</a>
+ </p>
+ <p class="card-text bg-light" style="transform: rotate(0);">
+ This <a href="#" class="text-warning stretched-link">stretched link</a> will only be spread over the <code>p</code>-tag, because a transform is applied to it.
+ </p>
+ </div>
+</div>
+{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/text-truncation.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/text-truncation.md
index 799f2059b..799f2059b 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/helpers/text-truncation.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/text-truncation.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/vertical-rule.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/vertical-rule.md
new file mode 100644
index 000000000..f10a16d08
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/vertical-rule.md
@@ -0,0 +1,45 @@
+---
+layout: docs
+title: Vertical rule
+description: Use the custom vertical rule helper to create vertical dividers like the `<hr>` element.
+group: helpers
+toc: true
+added: "5.1"
+---
+
+## How it works
+
+Vertical rules are inspired by the `<hr>` element, allowing you to create vertical dividers in common layouts. They're styled just like `<hr>` elements:
+
+- They're `1px` wide
+- They have `min-height` of `1em`
+- Their color is set via `currentColor` and `opacity`
+
+Customize them with additional styles as needed.
+
+## Example
+
+{{< example >}}
+<div class="vr"></div>
+{{< /example >}}
+
+Vertical rules scale their height in flex layouts:
+
+{{< example >}}
+<div class="d-flex" style="height: 200px;">
+ <div class="vr"></div>
+</div>
+{{< /example >}}
+
+## With stacks
+
+They can also be used in [stacks]({{< docsref "/helpers/stacks" >}}):
+
+{{< example >}}
+<div class="hstack gap-3">
+ <div class="bg-body-tertiary border">First item</div>
+ <div class="bg-body-tertiary border ms-auto">Second item</div>
+ <div class="vr"></div>
+ <div class="bg-body-tertiary border">Third item</div>
+</div>
+{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/visually-hidden.md b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/visually-hidden.md
new file mode 100644
index 000000000..917756034
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/helpers/visually-hidden.md
@@ -0,0 +1,29 @@
+---
+layout: docs
+title: Visually hidden
+description: Use these helpers to visually hide elements but keep them accessible to assistive technologies.
+group: helpers
+aliases: "/docs/5.3/helpers/screen-readers/"
+---
+
+Visually hide an element while still allowing it to be exposed to assistive technologies (such as screen readers) with `.visually-hidden`. Use `.visually-hidden-focusable` to visually hide an element by default, but to display it when it's focused (e.g. by a keyboard-only user). `.visually-hidden-focusable` can also be applied to a container–thanks to `:focus-within`, the container will be displayed when any child element of the container receives focus.
+
+{{< example >}}
+<h2 class="visually-hidden">Title for screen readers</h2>
+<a class="visually-hidden-focusable" href="#content">Skip to main content</a>
+<div class="visually-hidden-focusable">A container with a <a href="#">focusable element</a>.</div>
+{{< /example >}}
+
+Both `visually-hidden` and `visually-hidden-focusable` can also be used as mixins.
+
+```scss
+// Usage as a mixin
+
+.visually-hidden-title {
+ @include visually-hidden;
+}
+
+.skip-navigation {
+ @include visually-hidden-focusable;
+}
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/layout/breakpoints.md b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/breakpoints.md
new file mode 100644
index 000000000..8e3df157e
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/breakpoints.md
@@ -0,0 +1,174 @@
+---
+layout: docs
+title: Breakpoints
+description: Breakpoints are customizable widths that determine how your responsive layout behaves across device or viewport sizes in Bootstrap.
+group: layout
+aliases: "/docs/5.3/layout/"
+toc: true
+---
+
+## Core concepts
+
+- **Breakpoints are the building blocks of responsive design.** Use them to control when your layout can be adapted at a particular viewport or device size.
+
+- **Use media queries to architect your CSS by breakpoint.** Media queries are a feature of CSS that allow you to conditionally apply styles based on a set of browser and operating system parameters. We most commonly use `min-width` in our media queries.
+
+- **Mobile first, responsive design is the goal.** Bootstrap's CSS aims to apply the bare minimum of styles to make a layout work at the smallest breakpoint, and then layers on styles to adjust that design for larger devices. This optimizes your CSS, improves rendering time, and provides a great experience for your visitors.
+
+## Available breakpoints
+
+Bootstrap includes six default breakpoints, sometimes referred to as _grid tiers_, for building responsively. These breakpoints can be customized if you're using our source Sass files.
+
+{{< bs-table "table" >}}
+| Breakpoint | Class infix | Dimensions |
+| --- | --- | --- |
+| Extra small | <em>None</em> |&lt;576px |
+| Small | `sm` | &ge;576px |
+| Medium | `md` | &ge;768px |
+| Large | `lg` | &ge;992px |
+| Extra large | `xl` | &ge;1200px |
+| Extra extra large | `xxl` | &ge;1400px |
+{{< /bs-table >}}
+
+
+Each breakpoint was chosen to comfortably hold containers whose widths are multiples of 12. Breakpoints are also representative of a subset of common device sizes and viewport dimensions—they don't specifically target every use case or device. Instead, the ranges provide a strong and consistent foundation to build on for nearly any device.
+
+These breakpoints are customizable via Sass—you'll find them in a Sass map in our `_variables.scss` stylesheet.
+
+{{< scss-docs name="grid-breakpoints" file="scss/_variables.scss" >}}
+
+For more information and examples on how to modify our Sass maps and variables, please refer to [the Sass section of the Grid documentation]({{< docsref "/layout/grid#sass" >}}).
+
+## Media queries
+
+Since Bootstrap is developed to be mobile first, we use a handful of [media queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries) to create sensible breakpoints for our layouts and interfaces. These breakpoints are mostly based on minimum viewport widths and allow us to scale up elements as the viewport changes.
+
+### Min-width
+
+Bootstrap primarily uses the following media query ranges—or breakpoints—in our source Sass files for our layout, grid system, and components.
+
+```scss
+// Source mixins
+
+// No media query necessary for xs breakpoint as it's effectively `@media (min-width: 0) { ... }`
+@include media-breakpoint-up(sm) { ... }
+@include media-breakpoint-up(md) { ... }
+@include media-breakpoint-up(lg) { ... }
+@include media-breakpoint-up(xl) { ... }
+@include media-breakpoint-up(xxl) { ... }
+
+// Usage
+
+// Example: Hide starting at `min-width: 0`, and then show at the `sm` breakpoint
+.custom-class {
+ display: none;
+}
+@include media-breakpoint-up(sm) {
+ .custom-class {
+ display: block;
+ }
+}
+```
+
+These Sass mixins translate in our compiled CSS using the values declared in our Sass variables. For example:
+
+```scss
+// X-Small devices (portrait phones, less than 576px)
+// No media query for `xs` since this is the default in Bootstrap
+
+// Small devices (landscape phones, 576px and up)
+@media (min-width: 576px) { ... }
+
+// Medium devices (tablets, 768px and up)
+@media (min-width: 768px) { ... }
+
+// Large devices (desktops, 992px and up)
+@media (min-width: 992px) { ... }
+
+// X-Large devices (large desktops, 1200px and up)
+@media (min-width: 1200px) { ... }
+
+// XX-Large devices (larger desktops, 1400px and up)
+@media (min-width: 1400px) { ... }
+```
+
+### Max-width
+
+We occasionally use media queries that go in the other direction (the given screen size _or smaller_):
+
+```scss
+// No media query necessary for xs breakpoint as it's effectively `@media (max-width: 0) { ... }`
+@include media-breakpoint-down(sm) { ... }
+@include media-breakpoint-down(md) { ... }
+@include media-breakpoint-down(lg) { ... }
+@include media-breakpoint-down(xl) { ... }
+@include media-breakpoint-down(xxl) { ... }
+
+// Example: Style from medium breakpoint and down
+@include media-breakpoint-down(md) {
+ .custom-class {
+ display: block;
+ }
+}
+```
+
+These mixins take those declared breakpoints, subtract `.02px` from them, and use them as our `max-width` values. For example:
+
+```scss
+// `xs` returns only a ruleset and no media query
+// ... { ... }
+
+// `sm` applies to x-small devices (portrait phones, less than 576px)
+@media (max-width: 575.98px) { ... }
+
+// `md` applies to small devices (landscape phones, less than 768px)
+@media (max-width: 767.98px) { ... }
+
+// `lg` applies to medium devices (tablets, less than 992px)
+@media (max-width: 991.98px) { ... }
+
+// `xl` applies to large devices (desktops, less than 1200px)
+@media (max-width: 1199.98px) { ... }
+
+// `xxl` applies to x-large devices (large desktops, less than 1400px)
+@media (max-width: 1399.98px) { ... }
+```
+
+{{< callout warning >}}
+{{< partial "callouts/info-mediaqueries-breakpoints.md" >}}
+{{< /callout >}}
+
+### Single breakpoint
+
+There are also media queries and mixins for targeting a single segment of screen sizes using the minimum and maximum breakpoint widths.
+
+```scss
+@include media-breakpoint-only(xs) { ... }
+@include media-breakpoint-only(sm) { ... }
+@include media-breakpoint-only(md) { ... }
+@include media-breakpoint-only(lg) { ... }
+@include media-breakpoint-only(xl) { ... }
+@include media-breakpoint-only(xxl) { ... }
+```
+
+For example the `@include media-breakpoint-only(md) { ... }` will result in :
+
+```scss
+@media (min-width: 768px) and (max-width: 991.98px) { ... }
+```
+
+### Between breakpoints
+
+Similarly, media queries may span multiple breakpoint widths:
+
+```scss
+@include media-breakpoint-between(md, xl) { ... }
+```
+
+Which results in:
+
+```scss
+// Example
+// Apply styles starting from medium devices and up to extra large devices
+@media (min-width: 768px) and (max-width: 1199.98px) { ... }
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/layout/columns.md b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/columns.md
new file mode 100644
index 000000000..1ed14844f
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/columns.md
@@ -0,0 +1,332 @@
+---
+layout: docs
+title: Columns
+description: Learn how to modify columns with a handful of options for alignment, ordering, and offsetting thanks to our flexbox grid system. Plus, see how to use column classes to manage widths of non-grid elements.
+group: layout
+toc: true
+---
+
+{{< callout info >}}
+**Heads up!** Be sure to [read the Grid page]({{< docsref "/layout/grid" >}}) first before diving into how to modify and customize your grid columns.
+{{< /callout >}}
+
+## How they work
+
+- **Columns build on the grid's flexbox architecture.** Flexbox means we have options for changing individual columns and [modifying groups of columns at the row level]({{< docsref "/layout/grid#row-columns" >}}). You choose how columns grow, shrink, or otherwise change.
+
+- **When building grid layouts, all content goes in columns.** The hierarchy of Bootstrap's grid goes from [container]({{< docsref "/layout/containers" >}}) to row to column to your content. On rare occasions, you may combine content and column, but be aware there can be unintended consequences.
+
+- **Bootstrap includes predefined classes for creating fast, responsive layouts.** With [six breakpoints]({{< docsref "/layout/breakpoints" >}}) and a dozen columns at each grid tier, we have dozens of classes already built for you to create your desired layouts. This can be disabled via Sass if you wish.
+
+## Alignment
+
+Use flexbox alignment utilities to vertically and horizontally align columns.
+
+### Vertical alignment
+
+Change the vertical alignment with any of the responsive `align-items-*` classes.
+
+{{< example class="bd-example-row bd-example-row-flex-cols" >}}
+<div class="container text-center">
+ <div class="row align-items-start">
+ <div class="col">
+ One of three columns
+ </div>
+ <div class="col">
+ One of three columns
+ </div>
+ <div class="col">
+ One of three columns
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+{{< example class="bd-example-row bd-example-row-flex-cols" >}}
+<div class="container text-center">
+ <div class="row align-items-center">
+ <div class="col">
+ One of three columns
+ </div>
+ <div class="col">
+ One of three columns
+ </div>
+ <div class="col">
+ One of three columns
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+{{< example class="bd-example-row bd-example-row-flex-cols" >}}
+<div class="container text-center">
+ <div class="row align-items-end">
+ <div class="col">
+ One of three columns
+ </div>
+ <div class="col">
+ One of three columns
+ </div>
+ <div class="col">
+ One of three columns
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+Or, change the alignment of each column individually with any of the responsive `.align-self-*` classes.
+
+{{< example class="bd-example-row bd-example-row-flex-cols" >}}
+<div class="container text-center">
+ <div class="row">
+ <div class="col align-self-start">
+ One of three columns
+ </div>
+ <div class="col align-self-center">
+ One of three columns
+ </div>
+ <div class="col align-self-end">
+ One of three columns
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Horizontal alignment
+
+{{< example class="bd-example-row" >}}
+<div class="container text-center">
+ <div class="row justify-content-start">
+ <div class="col-4">
+ One of two columns
+ </div>
+ <div class="col-4">
+ One of two columns
+ </div>
+ </div>
+ <div class="row justify-content-center">
+ <div class="col-4">
+ One of two columns
+ </div>
+ <div class="col-4">
+ One of two columns
+ </div>
+ </div>
+ <div class="row justify-content-end">
+ <div class="col-4">
+ One of two columns
+ </div>
+ <div class="col-4">
+ One of two columns
+ </div>
+ </div>
+ <div class="row justify-content-around">
+ <div class="col-4">
+ One of two columns
+ </div>
+ <div class="col-4">
+ One of two columns
+ </div>
+ </div>
+ <div class="row justify-content-between">
+ <div class="col-4">
+ One of two columns
+ </div>
+ <div class="col-4">
+ One of two columns
+ </div>
+ </div>
+ <div class="row justify-content-evenly">
+ <div class="col-4">
+ One of two columns
+ </div>
+ <div class="col-4">
+ One of two columns
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Column wrapping
+
+If more than 12 columns are placed within a single row, each group of extra columns will, as one unit, wrap onto a new line.
+
+{{< example class="bd-example-row" >}}
+<div class="container">
+ <div class="row">
+ <div class="col-9">.col-9</div>
+ <div class="col-4">.col-4<br>Since 9 + 4 = 13 &gt; 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.</div>
+ <div class="col-6">.col-6<br>Subsequent columns continue along the new line.</div>
+ </div>
+</div>
+{{< /example >}}
+
+### Column breaks
+
+Breaking columns to a new line in flexbox requires a small hack: add an element with `width: 100%` wherever you want to wrap your columns to a new line. Normally this is accomplished with multiple `.row`s, but not every implementation method can account for this.
+
+{{< example class="bd-example-row" >}}
+<div class="container text-center">
+ <div class="row">
+ <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
+ <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
+
+ <!-- Force next columns to break to new line -->
+ <div class="w-100"></div>
+
+ <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
+ <div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
+ </div>
+</div>
+{{< /example >}}
+
+You may also apply this break at specific breakpoints with our [responsive display utilities]({{< docsref "/utilities/display" >}}).
+
+{{< example class="bd-example-row" >}}
+<div class="container text-center">
+ <div class="row">
+ <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
+ <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
+
+ <!-- Force next columns to break to new line at md breakpoint and up -->
+ <div class="w-100 d-none d-md-block"></div>
+
+ <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
+ <div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
+ </div>
+</div>
+{{< /example >}}
+
+## Reordering
+
+### Order classes
+
+Use `.order-` classes for controlling the **visual order** of your content. These classes are responsive, so you can set the `order` by breakpoint (e.g., `.order-1.order-md-2`). Includes support for `1` through `5` across all six grid tiers. If you need more `.order-*` classes, you can modify the default number via Sass variable.
+
+{{< example class="bd-example-row" >}}
+<div class="container text-center">
+ <div class="row">
+ <div class="col">
+ First in DOM, no order applied
+ </div>
+ <div class="col order-5">
+ Second in DOM, with a larger order
+ </div>
+ <div class="col order-1">
+ Third in DOM, with an order of 1
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+There are also responsive `.order-first` and `.order-last` classes that change the `order` of an element by applying `order: -1` and `order: 6`, respectively. These classes can also be intermixed with the numbered `.order-*` classes as needed.
+
+{{< example class="bd-example-row" >}}
+<div class="container text-center">
+ <div class="row">
+ <div class="col order-last">
+ First in DOM, ordered last
+ </div>
+ <div class="col">
+ Second in DOM, unordered
+ </div>
+ <div class="col order-first">
+ Third in DOM, ordered first
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+### Offsetting columns
+
+You can offset grid columns in two ways: our responsive `.offset-` grid classes and our [margin utilities]({{< docsref "/utilities/spacing" >}}). Grid classes are sized to match columns while margins are more useful for quick layouts where the width of the offset is variable.
+
+#### Offset classes
+
+Move columns to the right using `.offset-md-*` classes. These classes increase the left margin of a column by `*` columns. For example, `.offset-md-4` moves `.col-md-4` over four columns.
+
+{{< example class="bd-example-row" >}}
+<div class="container text-center">
+ <div class="row">
+ <div class="col-md-4">.col-md-4</div>
+ <div class="col-md-4 offset-md-4">.col-md-4 .offset-md-4</div>
+ </div>
+ <div class="row">
+ <div class="col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
+ <div class="col-md-3 offset-md-3">.col-md-3 .offset-md-3</div>
+ </div>
+ <div class="row">
+ <div class="col-md-6 offset-md-3">.col-md-6 .offset-md-3</div>
+ </div>
+</div>
+{{< /example >}}
+
+In addition to column clearing at responsive breakpoints, you may need to reset offsets. See this in action in [the grid example]({{< docsref "/examples/grid" >}}).
+
+{{< example class="bd-example-row" >}}
+<div class="container text-center">
+ <div class="row">
+ <div class="col-sm-5 col-md-6">.col-sm-5 .col-md-6</div>
+ <div class="col-sm-5 offset-sm-2 col-md-6 offset-md-0">.col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0</div>
+ </div>
+ <div class="row">
+ <div class="col-sm-6 col-md-5 col-lg-6">.col-sm-6 .col-md-5 .col-lg-6</div>
+ <div class="col-sm-6 col-md-5 offset-md-2 col-lg-6 offset-lg-0">.col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0</div>
+ </div>
+</div>
+{{< /example >}}
+
+#### Margin utilities
+
+With the move to flexbox in v4, you can use margin utilities like `.me-auto` to force sibling columns away from one another.
+
+{{< example class="bd-example-row" >}}
+<div class="container text-center">
+ <div class="row">
+ <div class="col-md-4">.col-md-4</div>
+ <div class="col-md-4 ms-auto">.col-md-4 .ms-auto</div>
+ </div>
+ <div class="row">
+ <div class="col-md-3 ms-md-auto">.col-md-3 .ms-md-auto</div>
+ <div class="col-md-3 ms-md-auto">.col-md-3 .ms-md-auto</div>
+ </div>
+ <div class="row">
+ <div class="col-auto me-auto">.col-auto .me-auto</div>
+ <div class="col-auto">.col-auto</div>
+ </div>
+</div>
+{{< /example >}}
+
+## Standalone column classes
+
+The `.col-*` classes can also be used outside a `.row` to give an element a specific width. Whenever column classes are used as non-direct children of a row, the paddings are omitted.
+
+{{< example class="bd-example-row" >}}
+<div class="col-3 p-3 mb-2">
+ .col-3: width of 25%
+</div>
+
+<div class="col-sm-9 p-3">
+ .col-sm-9: width of 75% above sm breakpoint
+</div>
+{{< /example >}}
+
+The classes can be used together with utilities to create responsive floated images. Make sure to wrap the content in a [`.clearfix`]({{< docsref "/helpers/clearfix" >}}) wrapper to clear the float if the text is shorter.
+
+{{< example >}}
+<div class="clearfix">
+ {{< placeholder width="100%" height="210" class="col-md-6 float-md-end mb-3 ms-md-3" text="Responsive floated image" >}}
+
+ <p>
+ A paragraph of placeholder text. We're using it here to show the use of the clearfix class. We're adding quite a few meaningless phrases here to demonstrate how the columns interact here with the floated image.
+ </p>
+
+ <p>
+ As you can see the paragraphs gracefully wrap around the floated image. Now imagine how this would look with some actual content in here, rather than just this boring placeholder text that goes on and on, but actually conveys no tangible information at. It simply takes up space and should not really be read.
+ </p>
+
+ <p>
+ And yet, here you are, still persevering in reading this placeholder text, hoping for some more insights, or some hidden easter egg of content. A joke, perhaps. Unfortunately, there's none of that here.
+ </p>
+</div>
+{{< /example >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/containers.md b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/containers.md
index 6801aca6b..6801aca6b 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/containers.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/containers.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/css-grid.md b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/css-grid.md
index 397733c8a..397733c8a 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/css-grid.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/css-grid.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/grid.md b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/grid.md
index a9d00376f..a9d00376f 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/grid.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/grid.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/layout/gutters.md b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/gutters.md
new file mode 100644
index 000000000..1eabc9211
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/gutters.md
@@ -0,0 +1,165 @@
+---
+layout: docs
+title: Gutters
+description: Gutters are the padding between your columns, used to responsively space and align content in the Bootstrap grid system.
+group: layout
+toc: true
+---
+
+## How they work
+
+- **Gutters are the gaps between column content, created by horizontal `padding`.** We set `padding-right` and `padding-left` on each column, and use negative `margin` to offset that at the start and end of each row to align content.
+
+- **Gutters start at `1.5rem` (`24px`) wide.** This allows us to match our grid to the [padding and margin spacers]({{< docsref "/utilities/spacing" >}}) scale.
+
+- **Gutters can be responsively adjusted.** Use breakpoint-specific gutter classes to modify horizontal gutters, vertical gutters, and all gutters.
+
+## Horizontal gutters
+
+`.gx-*` classes can be used to control the horizontal gutter widths. The `.container` or `.container-fluid` parent may need to be adjusted if larger gutters are used too to avoid unwanted overflow, using a matching padding utility. For example, in the following example we've increased the padding with `.px-4`:
+
+{{< example class="bd-example-cols" >}}
+<div class="container px-4 text-center">
+ <div class="row gx-5">
+ <div class="col">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+An alternative solution is to add a wrapper around the `.row` with the `.overflow-hidden` class:
+
+{{< example class="bd-example-cols" >}}
+<div class="container overflow-hidden text-center">
+ <div class="row gx-5">
+ <div class="col">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Vertical gutters
+
+`.gy-*` classes can be used to control the vertical gutter widths within a row when columns wrap to new lines. Like the horizontal gutters, the vertical gutters can cause some overflow below the `.row` at the end of a page. If this occurs, you add a wrapper around `.row` with the `.overflow-hidden` class:
+
+{{< example class="bd-example-cols" >}}
+<div class="container overflow-hidden text-center">
+ <div class="row gy-5">
+ <div class="col-6">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ <div class="col-6">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ <div class="col-6">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ <div class="col-6">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Horizontal & vertical gutters
+
+`.g-*` classes can be used to control the horizontal gutter widths, for the following example we use a smaller gutter width, so there won't be a need to add the `.overflow-hidden` wrapper class.
+
+{{< example class="bd-example-cols" >}}
+<div class="container text-center">
+ <div class="row g-2">
+ <div class="col-6">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ <div class="col-6">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ <div class="col-6">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ <div class="col-6">
+ <div class="p-3">Custom column padding</div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## Row columns gutters
+
+Gutter classes can also be added to [row columns]({{< docsref "/layout/grid#row-columns" >}}). In the following example, we use responsive row columns and responsive gutter classes.
+
+{{< example class="bd-example-cols" >}}
+<div class="container text-center">
+ <div class="row row-cols-2 row-cols-lg-5 g-2 g-lg-3">
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ <div class="col">
+ <div class="p-3">Row column</div>
+ </div>
+ </div>
+</div>
+{{< /example >}}
+
+## No gutters
+
+The gutters between columns in our predefined grid classes can be removed with `.g-0`. This removes the negative `margin`s from `.row` and the horizontal `padding` from all immediate children columns.
+
+**Need an edge-to-edge design?** Drop the parent `.container` or `.container-fluid` and add `.mx-0` to the `.row` to prevent overflow.
+
+In practice, here's how it looks. Note you can continue to use this with all other predefined grid classes (including column widths, responsive tiers, reorders, and more).
+
+{{< example class="bd-example-row" >}}
+<div class="row g-0 text-center">
+ <div class="col-sm-6 col-md-8">.col-sm-6 .col-md-8</div>
+ <div class="col-6 col-md-4">.col-6 .col-md-4</div>
+</div>
+{{< /example >}}
+
+## Change the gutters
+
+Classes are built from the `$gutters` Sass map which is inherited from the `$spacers` Sass map.
+
+```scss
+$grid-gutter-width: 1.5rem;
+$gutters: (
+ 0: 0,
+ 1: $spacer * .25,
+ 2: $spacer * .5,
+ 3: $spacer,
+ 4: $spacer * 1.5,
+ 5: $spacer * 3,
+);
+```
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/utilities.md b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/utilities.md
index 009d2416d..009d2416d 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/utilities.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/utilities.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/z-index.md b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/z-index.md
index 1870d05d2..1870d05d2 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/layout/z-index.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/layout/z-index.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/migration.md b/vendor/twbs/bootstrap/site/content/docs/5.3/migration.md
new file mode 100644
index 000000000..0b71ec3bc
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/migration.md
@@ -0,0 +1,643 @@
+---
+layout: docs
+title: Migrating to v5
+description: Track and review changes to the Bootstrap source files, documentation, and components to help you migrate from v4 to v5.
+group: migration
+aliases: "/migration/"
+toc: true
+---
+
+## v5.3.0
+
+<hr class="mb-4">
+
+### Color modes!
+
+Learn more by reading the new [color modes documentation]({{< docsref "/customize/color-modes" >}}).
+
+- **Global support for light (default) and dark color modes.** Set color mode globally on the `:root` element, on groups of elements and components with a wrapper class, or directly on components, with `data-bs-theme="light|dark"`. Also included is a new `color-mode()` mixin that can output a ruleset with the `data-bs-theme` selector or a media query, depending on your preference.
+
+ <span class="badge text-warning-emphasis bg-warning-subtle">Deprecated</span> Color modes replace dark variants for components, so `.btn-close-white`, `.carousel-dark`, `.dropdown-menu-dark`, and `.navbar-dark` are deprecated.
+
+- **New extended color system.** We've added new theme colors (but not in `$theme-colors)`) for a more nuanced, system-wide color palette with new secondary, tertiary, and emphasis colors for `color` and `background-color`. These new colors are available as Sass variables, CSS variables, and utilities.
+
+- We've also expanded our theme color Sass variables, CSS variables, and utilities to include text emphasis, subtle background colors, and subtle border colors. These are available as Sass variables, CSS variables, and utilities.
+
+- Adds new `_variables-dark.scss` stylesheet to house dark-mode specific overrides. This stylesheet should be imported immediately after the existing `_variables.scss` file in your import stack.
+
+ ```diff
+ diff --git a/scss/bootstrap.scss b/scss/bootstrap.scss
+ index 8f8296def..449d70487 100644
+ --- a/scss/bootstrap.scss
+ +++ b/scss/bootstrap.scss
+ @@ -6,6 +6,7 @@
+ // Configuration
+ @import "functions";
+ @import "variables";
+ +@import "variables-dark";
+ @import "maps";
+ @import "mixins";
+ @import "utilities";
+ ```
+
+### CSS variables
+
+- Restores CSS variables for breakpoints, though we don't use them in our media queries as they're not supported. However, these can be useful in JS-specific contexts.
+
+- Per the color modes update, we've added new utilities for new Sass CSS variables `secondary` and `tertiary` text and background colors, plus `{color}-bg-subtle`, `{color}-border-subtle`, and `{color}-text` for our theme colors. These new colors are available through Sass and CSS variables (but not our color maps) with the express goal of making it easier to customize across multiple colors modes like light and dark.
+
+- Adds additional variables for alerts, `.btn-close`, and `.offcanvas`.
+
+- The `--bs-heading-color` variable is back with an update and dark mode support. First, we now check for a `null` value on the associated Sass variable, `$headings-color`, before trying to output the CSS variable, so by default it's not present in our compiled CSS. Second, we use the CSS variable with a fallback value, `inherit`, allowing the original behavior to persist, but also allowing for overrides.
+
+- Converts links to use CSS variables for styling `color`, but not `text-decoration`. Colors are now set with `--bs-link-color-rgb` and `--bs-link-opacity` as `rgba()` color, allowing you to customize the translucency with ease. The `a:hover` pseudo-class now overrides `--bs-link-color-rgb` instead of explicitly setting the `color` property.
+
+- `--bs-border-width` is now being used in more components for greater control over default global styling.
+
+- Adds new root CSS variables for our `box-shadow`s, including `--bs-box-shadow`, `--bs-box-shadow-sm`, `--bs-box-shadow-lg`, and `--bs-box-shadow-inset`.
+
+### Components
+
+#### Alert
+
+- Alert variants are now styled via CSS variables.
+
+- <span class="badge text-warning-emphasis bg-warning-subtle">Deprecated</span> The `.alert-variant()` mixin is now deprecated. We now [use the Sass loop]({{< docsref "/components/alerts#sass-loop" >}}) directly to modify the component's default CSS variables for each variant.
+
+#### List group
+
+- List group item variants are now styled via CSS variables.
+
+- <span class="badge text-warning-emphasis bg-warning-subtle">Deprecated</span> The `.list-group-variant()` mixin is now deprecated. We now [use the Sass loop]({{< docsref "/components/list-group#sass-loop" >}}) directly to modify the component's default CSS variables for each variant.
+
+#### Close button
+
+- <span class="badge text-warning-emphasis bg-warning-subtle">Deprecated</span> The `.btn-close-white` class has been deprecated and replaced with `data-bs-theme="dark"` on the close button or any parent element. [See the docs for an example.]({{< docsref "/components/close-button#dark-variant" >}})
+
+#### Navbar
+
+- <span class="badge text-warning-emphasis bg-warning-subtle">Deprecated</span> The `.navbar-dark` class has been deprecated and replaced with `data-bs-theme="dark"` on the navbar or any parent element. [See the docs for updated examples.]({{< docsref "/components/navbar#color-schemes" >}})
+
+### Progress bars
+
+The markup for [progress bars]({{< docsref "/components/progress" >}}) has been updated in v5.3.0. Due to the placement of `role` and various `aria-` attributes on the inner `.progress-bar` element, **some screen readers were not announcing zero value progress bars**. Now, `role="progressbar"` and the relevant `aria-*` attributes are on the outer `.progress` element, leaving the `.progress-bar` purely for the visual presentation of the bar and optional label.
+
+While we recommend adopting the new markup for improved compatibility with all screen readers, note that the legacy progress bar structure will continue to work as before.
+
+```html
+<!-- Previous markup -->
+<div class="progress">
+ <div class="progress-bar" role="progressbar" aria-label="Basic example" style="width: 25%" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
+</div>
+
+<!-- New markup -->
+<div class="progress" role="progressbar" aria-label="Basic example" aria-valuenow="25" aria-valuemin="0" aria-valuemax="100">
+ <div class="progress-bar" style="width: 25%"></div>
+</div>
+```
+
+We've also introduced a new `.progress-stacked` class to more logically wrap [multiple progress bars]({{< docsref "/components/progress#multiple-bars" >}}) into a single stacked progress bar.
+
+```html
+<!-- Previous markup -->
+<div class="progress">
+ <div class="progress-bar" role="progressbar" aria-label="Segment one" style="width: 15%" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100"></div>
+ <div class="progress-bar bg-success" role="progressbar" aria-label="Segment two" style="width: 30%" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100"></div>
+ <div class="progress-bar bg-info" role="progressbar" aria-label="Segment three" style="width: 20%" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100"></div>
+</div>
+
+<!-- New markup -->
+<div class="progress-stacked">
+ <div class="progress" role="progressbar" aria-label="Segment one" aria-valuenow="15" aria-valuemin="0" aria-valuemax="100" style="width: 15%">
+ <div class="progress-bar"></div>
+ </div>
+ <div class="progress" role="progressbar" aria-label="Segment two" aria-valuenow="30" aria-valuemin="0" aria-valuemax="100" style="width: 30%">
+ <div class="progress-bar bg-success"></div>
+ </div>
+ <div class="progress" role="progressbar" aria-label="Segment three" aria-valuenow="20" aria-valuemin="0" aria-valuemax="100" style="width: 20%">
+ <div class="progress-bar bg-info"></div>
+ </div>
+</div>
+```
+
+### Forms
+
+- `.form-control` is now styled with CSS variables to support color modes. This includes the addition of two new root CSS variables for the default and disabled form control backgrounds.
+
+- `.form-check` and `.form-switch` components are now built with CSS variables for setting the `background-image`. The usage here differs from other components in that the various focus, active, etc states for each component aren't set on the base class. Instead, the states override one variable (e.g., `--bs-form-switch-bg`).
+
+- Floating form labels now have a `background-color` to fix support for `<textarea>` elements. Additional changes have been made to also support disabled states and more.
+
+- Fixed display of date and time inputs in WebKit based browsers.
+
+### Utilities
+
+- <span class="badge text-warning-emphasis bg-warning-subtle">Deprecated</span> `.text-muted` will be be replaced by `.text-body-secondary` in v6.
+
+ With the addition of the expanded theme colors and variables, the `.text-muted` variables and utility have been deprecated with v5.3.0. Its default value has also has been reassigned to the new `--bs-secondary-color` CSS variable to better support color modes. It will be removed in v6.0.0.
+
+- Adds new `.overflow-x`, `.overflow-y`, and several `.object-fit-*` utilities. _The object-fit property is used to specify how an `<img>` or `<video>` should be resized to fit its container, giving us a responsive alternative to using `background-image` for a resizable fill/fit image._
+
+- Adds new `.fw-medium` utility.
+
+- Added new [`.z-*` utilities]({{< docsref "/utilities/z-index" >}}) for `z-index`.
+
+- [Box shadow utilities]({{< docsref "/utilities/shadows" >}}) (and Sass variables) have been updated for dark mode. They now use `--bs-body-color-rgb` to generate the `rgba()` color values, allowing them to easily adapt to color modes based on the specified foreground color.
+
+For a complete list of changes, [see the v5.3.0 project on GitHub](https://github.com/twbs/bootstrap/projects/).
+
+## v5.2.0
+
+<hr class="mb-4">
+
+### Refreshed design
+
+Bootstrap v5.2.0 features a subtle design update for a handful of components and properties across the project, **most notably through refined `border-radius` values on buttons and form controls**. Our documentation also has been updated with a new homepage, simpler docs layout that no longer collapses sections of the sidebar, and more prominent examples of [Bootstrap Icons](https://icons.getbootstrap.com).
+
+### More CSS variables
+
+**We've updated all our components to use CSS variables.** While Sass still underpins everything, each component has been updated to include CSS variables on the component base classes (e.g., `.btn`), allowing for more real-time customization of Bootstrap. In subsequent releases, we'll continue to expand our use of CSS variables into our layout, forms, helpers, and utilities. Read more about CSS variables in each component on their respective documentation pages.
+
+Our CSS variable usage will be somewhat incomplete until Bootstrap 6. While we'd love to fully implement these across the board, they do run the risk of causing breaking changes. For example, setting `$alert-border-width: var(--bs-border-width)` in our source code breaks potential Sass in your own code if you were doing `$alert-border-width * 2` for some reason.
+
+As such, wherever possible, we will continue to push towards more CSS variables, but please recognize our implementation may be slightly limited in v5.
+
+### New `_maps.scss`
+
+**Bootstrap v5.2.0 introduced a new Sass file with `_maps.scss`.** It pulls out several Sass maps from `_variables.scss` to fix an issue where updates to an original map were not applied to secondary maps that extend them. For example, updates to `$theme-colors` were not being applied to other theme maps that relied on `$theme-colors`, breaking key customization workflows. In short, Sass has a limitation where once a default variable or map has been _used_, it cannot be updated. _There's a similar shortcoming with CSS variables when they're used to compose other CSS variables._
+
+This is why variable customizations in Bootstrap have to come after `@import "functions"`, but before `@import "variables"` and the rest of our import stack. The same applies to Sass maps—you must override the defaults before they get used. The following maps have been moved to the new `_maps.scss`:
+
+- `$theme-colors-rgb`
+- `$utilities-colors`
+- `$utilities-text`
+- `$utilities-text-colors`
+- `$utilities-bg`
+- `$utilities-bg-colors`
+- `$negative-spacers`
+- `$gutters`
+
+Your custom Bootstrap CSS builds should now look something like this with a separate maps import.
+
+```diff
+ // Functions come first
+ @import "functions";
+
+ // Optional variable overrides here
++ $custom-color: #df711b;
++ $custom-theme-colors: (
++ "custom": $custom-color
++ );
+
+ // Variables come next
+ @import "variables";
+
++ // Optional Sass map overrides here
++ $theme-colors: map-merge($theme-colors, $custom-theme-colors);
++
++ // Followed by our default maps
++ @import "maps";
++
+ // Rest of our imports
+ @import "mixins";
+ @import "utilities";
+ @import "root";
+ @import "reboot";
+ // etc
+```
+
+### New utilities
+
+- Expanded [`font-weight` utilities]({{< docsref "/utilities/text#font-weight-and-italics" >}}) to include `.fw-semibold` for semibold fonts.
+- Expanded [`border-radius` utilities]({{< docsref "/utilities/borders#sizes" >}}) to include two new sizes, `.rounded-4` and `.rounded-5`, for more options.
+
+### Additional changes
+
+- **Introduced new `$enable-container-classes` option. —** Now when opting into the experimental CSS Grid layout, `.container-*` classes will still be compiled, unless this option is set to `false`. Containers also now keep their gutter values.
+
+- **Offcanvas component now has [responsive variations]({{< docsref "/components/offcanvas#responsive" >}}).** The original `.offcanvas` class remains unchanged—it hides content across all viewports. To make it responsive, change that `.offcanvas` class to any `.offcanvas-{sm|md|lg|xl|xxl}` class.
+
+- **Thicker table dividers are now opt-in. —** We've removed the thicker and more difficult to override border between table groups and moved it to an optional class you can apply, `.table-group-divider`. [See the table docs for an example.]({{< docsref "/content/tables#table-group-dividers" >}})
+
+- **[Scrollspy has been rewritten](https://github.com/twbs/bootstrap/pull/33421) to use the Intersection Observer API**, which means you no longer need relative parent wrappers, deprecates `offset` config, and more. Look for your Scrollspy implementations to be more accurate and consistent in their nav highlighting.
+
+- **Popovers and tooltips now use CSS variables.** Some CSS variables have been updated from their Sass counterparts to reduce the number of variables. As a result, three variables have been deprecated in this release: `$popover-arrow-color`, `$popover-arrow-outer-color`, and `$tooltip-arrow-color`.
+
+- **Added new `.text-bg-{color}` helpers.** Instead of setting individual `.text-*` and `.bg-*` utilities, you can now use [the `.text-bg-*` helpers]({{< docsref "helpers/color-background" >}}) to set a `background-color` with contrasting foreground `color`.
+
+- Added `.form-check-reverse` modifier to flip the order of labels and associated checkboxes/radios.
+
+- Added [striped columns]({{< docsref "/content/tables#striped-columns" >}}) support to tables via the new `.table-striped-columns` class.
+
+For a complete list of changes, [see the v5.2.0 project on GitHub](https://github.com/twbs/bootstrap/projects/32).
+
+## v5.1.0
+
+<hr class="mb-4">
+
+- **Added experimental support for [CSS Grid layout]({{< docsref "/layout/css-grid" >}}). —** This is a work in progress, and is not yet ready for production use, but you can opt into the new feature via Sass. To enable it, disable the default grid, by setting `$enable-grid-classes: false` and enable the CSS Grid by setting `$enable-cssgrid: true`.
+
+- **Updated navbars to support offcanvas. —** Add [offcanvas drawers in any navbar]({{< docsref "/components/navbar#offcanvas" >}}) with the responsive `.navbar-expand-*` classes and some offcanvas markup.
+
+- **Added new [placeholder component]({{< docsref "/components/placeholders/" >}}). —** Our newest component, a way to provide temporary blocks in lieu of real content to help indicate that something is still loading in your site or app.
+
+- **Collapse plugin now supports [horizontal collapsing]({{< docsref "/components/collapse#horizontal" >}}). —** Add `.collapse-horizontal` to your `.collapse` to collapse the `width` instead of the `height`. Avoid browser repainting by setting a `min-height` or `height`.
+
+- **Added new stack and vertical rule helpers. —** Quickly apply multiple flexbox properties to quickly create custom layouts with [stacks]({{< docsref "/helpers/stacks/" >}}). Choose from horizontal (`.hstack`) and vertical (`.vstack`) stacks. Add vertical dividers similar to `<hr>` elements with the [new `.vr` helpers]({{< docsref "/helpers/vertical-rule/" >}}).
+
+- **Added new global `:root` CSS variables. —** Added several new CSS variables to the `:root` level for controlling `<body>` styles. More are in the works, including across our utilities and components, but for now read up [CSS variables in the Customize section]({{< docsref "/customize/css-variables/" >}}).
+
+- **Overhauled color and background utilities to use CSS variables, and added new [text opacity]({{< docsref "/utilities/text#opacity" >}}) and [background opacity]({{< docsref "/utilities/background#opacity" >}}) utilities. —** `.text-*` and `.bg-*` utilities are now built with CSS variables and `rgba()` color values, allowing you to easily customize any utility with new opacity utilities.
+
+- **Added new snippet examples based to show how to customize our components. —** Pull ready to use customized components and other common design patterns with our new [Snippets examples]({{< docsref "/examples#snippets" >}}). Includes [footers]({{< docsref "/examples/footers/" >}}), [dropdowns]({{< docsref "/examples/dropdowns/" >}}), [list groups]({{< docsref "/examples/list-groups/" >}}), and [modals]({{< docsref "/examples/modals/" >}}).
+
+- **Removed unused positioning styles from popovers and tooltips** as these are handled solely by Popper. `$tooltip-margin` has been deprecated and set to `null` in the process.
+
+Want more information? [Read the v5.1.0 blog post.](https://blog.getbootstrap.com/2021/08/04/bootstrap-5-1-0/)
+
+<hr class="my-5">
+
+{{< callout info >}}
+**Hey there!** Changes to our first major release of Bootstrap 5, v5.0.0, are documented below. They don't reflect the additional changes shown above.
+{{< /callout >}}
+
+## Dependencies
+
+- Dropped jQuery.
+- Upgraded from Popper v1.x to Popper v2.x.
+- Replaced Libsass with Dart Sass as our Sass compiler given Libsass was deprecated.
+- Migrated from Jekyll to Hugo for building our documentation
+
+## Browser support
+
+- Dropped Internet Explorer 10 and 11
+- Dropped Microsoft Edge < 16 (Legacy Edge)
+- Dropped Firefox < 60
+- Dropped Safari < 12
+- Dropped iOS Safari < 12
+- Dropped Chrome < 60
+
+<hr class="my-5">
+
+## Documentation changes
+
+- Redesigned homepage, docs layout, and footer.
+- Added [new Parcel guide]({{< docsref "/getting-started/parcel" >}}).
+- Added [new Customize section]({{< docsref "/customize/overview" >}}), replacing [v4's Theming page](https://getbootstrap.com/docs/4.6/getting-started/theming/), with new details on Sass, global configuration options, color schemes, CSS variables, and more.
+- Reorganized all form documentation into [new Forms section]({{< docsref "/forms/overview" >}}), breaking apart the content into more focused pages.
+- Similarly, updated [the Layout section]({{< docsref "/layout/breakpoints" >}}), to flesh out grid content more clearly.
+- Renamed "Navs" component page to "Navs & Tabs".
+- Renamed "Checks" page to "Checks & radios".
+- Redesigned the navbar and added a new subnav to make it easier to get around our sites and docs versions.
+- Added new keyboard shortcut for the search field: <kbd><kbd>Ctrl</kbd> + <kbd>/</kbd></kbd>.
+
+## Sass
+
+- We've ditched the default Sass map merges to make it easier to remove redundant values. Keep in mind you now have to define all values in the Sass maps like `$theme-colors`. Check out how to deal with [Sass maps]({{< docsref "/customize/sass#maps-and-loops" >}}).
+
+- <span class="badge bg-danger">Breaking</span> Renamed `color-yiq()` function and related variables to `color-contrast()` as it's no longer related to YIQ color space. [See #30168.](https://github.com/twbs/bootstrap/pull/30168/)
+ - `$yiq-contrasted-threshold` is renamed to `$min-contrast-ratio`.
+ - `$yiq-text-dark` and `$yiq-text-light` are respectively renamed to `$color-contrast-dark` and `$color-contrast-light`.
+
+- <span class="badge bg-danger">Breaking</span> Media query mixins parameters have changed for a more logical approach.
+ - `media-breakpoint-down()` uses the breakpoint itself instead of the next breakpoint (e.g., `media-breakpoint-down(lg)` instead of `media-breakpoint-down(md)` targets viewports smaller than `lg`).
+ - Similarly, the second parameter in `media-breakpoint-between()` also uses the breakpoint itself instead of the next breakpoint (e.g., `media-between(sm, lg)` instead of `media-breakpoint-between(sm, md)` targets viewports between `sm` and `lg`).
+
+- <span class="badge bg-danger">Breaking</span> Removed print styles and `$enable-print-styles` variable. Print display classes are still around. [See #28339](https://github.com/twbs/bootstrap/pull/28339).
+
+- <span class="badge bg-danger">Breaking</span> Dropped `color()`, `theme-color()`, and `gray()` functions in favor of variables. [See #29083](https://github.com/twbs/bootstrap/pull/29083).
+
+- <span class="badge bg-danger">Breaking</span> Renamed `theme-color-level()` function to `color-level()` and now accepts any color you want instead of only `$theme-color` colors. [See #29083](https://github.com/twbs/bootstrap/pull/29083) **Watch out:** `color-level()` was later on dropped in `v5.0.0-alpha3`.
+
+- <span class="badge bg-danger">Breaking</span> Renamed `$enable-prefers-reduced-motion-media-query` and `$enable-pointer-cursor-for-buttons` to `$enable-reduced-motion` and `$enable-button-pointers` for brevity.
+
+- <span class="badge bg-danger">Breaking</span> Removed the `bg-gradient-variant()` mixin. Use the `.bg-gradient` class to add gradients to elements instead of the generated `.bg-gradient-*` classes.
+
+- <span class="badge bg-danger">Breaking</span> **Removed previously deprecated mixins:**
+ - `hover`, `hover-focus`, `plain-hover-focus`, and `hover-focus-active`
+ - `float()`
+ - `form-control-mixin()`
+ - `nav-divider()`
+ - `retina-img()`
+ - `text-hide()` (also dropped the associated utility class, `.text-hide`)
+ - `visibility()`
+ - `form-control-focus()`
+
+- <span class="badge bg-danger">Breaking</span> Renamed `scale-color()` function to `shift-color()` to avoid collision with Sass's own color scaling function.
+
+- `box-shadow` mixins now allow `null` values and drop `none` from multiple arguments. [See #30394](https://github.com/twbs/bootstrap/pull/30394).
+
+- The `border-radius()` mixin now has a default value.
+
+## Color system
+
+- The color system which worked with `color-level()` and `$theme-color-interval` was removed in favor of a new color system. All `lighten()` and `darken()` functions in our codebase are replaced by `tint-color()` and `shade-color()`. These functions will mix the color with either white or black instead of changing its lightness by a fixed amount. The `shift-color()` will either tint or shade a color depending on whether its weight parameter is positive or negative. [See #30622](https://github.com/twbs/bootstrap/pull/30622) for more details.
+
+- Added new tints and shades for every color, providing nine separate colors for each base color, as new Sass variables.
+
+- Improved color contrast. Bumped color contrast ratio from 3:1 to 4.5:1 and updated blue, green, cyan, and pink colors to ensure WCAG 2.1 AA contrast. Also changed our color contrast color from `$gray-900` to `$black`.
+
+- To support our color system, we've added new custom `tint-color()` and `shade-color()` functions to mix our colors appropriately.
+
+## Grid updates
+
+- **New breakpoint!** Added new `xxl` breakpoint for `1400px` and up. No changes to all other breakpoints.
+
+- **Improved gutters.** Gutters are now set in rems, and are narrower than v4 (`1.5rem`, or about `24px`, down from `30px`). This aligns our grid system's gutters with our spacing utilities.
+ - Added new [gutter class]({{< docsref "/layout/gutters" >}}) (`.g-*`, `.gx-*`, and `.gy-*`) to control horizontal/vertical gutters, horizontal gutters, and vertical gutters.
+ - <span class="badge bg-danger">Breaking</span> Renamed `.no-gutters` to `.g-0` to match new gutter utilities.
+
+- Columns no longer have `position: relative` applied, so you may have to add `.position-relative` to some elements to restore that behavior.
+
+- <span class="badge bg-danger">Breaking</span> Dropped several `.order-*` classes that often went unused. We now only provide `.order-1` to `.order-5` out of the box.
+
+- <span class="badge bg-danger">Breaking</span> Dropped the `.media` component as it can be easily replicated with utilities. [See #28265](https://github.com/twbs/bootstrap/pull/28265) and the [flex utilities page for an example]({{< docsref "/utilities/flex#media-object" >}}).
+
+- <span class="badge bg-danger">Breaking</span> `bootstrap-grid.css` now only applies `box-sizing: border-box` to the column instead of resetting the global box-sizing. This way, our grid styles can be used in more places without interference.
+
+- `$enable-grid-classes` no longer disables the generation of container classes anymore. [See #29146.](https://github.com/twbs/bootstrap/pull/29146)
+
+- Updated the `make-col` mixin to default to equal columns without a specified size.
+
+## Content, Reboot, etc
+
+- **[RFS]({{< docsref "/getting-started/rfs" >}}) is now enabled by default.** Headings using the `font-size()` mixin will automatically adjust their `font-size` to scale with the viewport. _This feature was previously opt-in with v4._
+
+- <span class="badge bg-danger">Breaking</span> Overhauled our display typography to replace our `$display-*` variables and with a `$display-font-sizes` Sass map. Also removed the individual `$display-*-weight` variables for a single `$display-font-weight` and adjusted `font-size`s.
+
+- Added two new `.display-*` heading sizes, `.display-5` and `.display-6`.
+
+- **Links are underlined by default** (not just on hover), unless they're part of specific components.
+
+- **Redesigned tables** to refresh their styles and rebuild them with CSS variables for more control over styling.
+
+- <span class="badge bg-danger">Breaking</span> Nested tables do not inherit styles anymore.
+
+- <span class="badge bg-danger">Breaking</span> `.thead-light` and `.thead-dark` are dropped in favor of the `.table-*` variant classes which can be used for all table elements (`thead`, `tbody`, `tfoot`, `tr`, `th` and `td`).
+
+- <span class="badge bg-danger">Breaking</span> The `table-row-variant()` mixin is renamed to `table-variant()` and accepts only 2 parameters: `$color` (color name) and `$value` (color code). The border color and accent colors are automatically calculated based on the table factor variables.
+
+- Split table cell padding variables into `-y` and `-x`.
+
+- <span class="badge bg-danger">Breaking</span> Dropped `.pre-scrollable` class. [See #29135](https://github.com/twbs/bootstrap/pull/29135)
+
+- <span class="badge bg-danger">Breaking</span> `.text-*` utilities do not add hover and focus states to links anymore. `.link-*` helper classes can be used instead. [See #29267](https://github.com/twbs/bootstrap/pull/29267)
+
+- <span class="badge bg-danger">Breaking</span> Dropped `.text-justify` class. [See #29793](https://github.com/twbs/bootstrap/pull/29793)
+
+- <span class="badge bg-danger">Breaking</span> ~~`<hr>` elements now use `height` instead of `border` to better support the `size` attribute. This also enables use of padding utilities to create thicker dividers (e.g., `<hr class="py-1">`).~~
+
+- Reset default horizontal `padding-left` on `<ul>` and `<ol>` elements from browser default `40px` to `2rem`.
+
+- Added `$enable-smooth-scroll`, which applies `scroll-behavior: smooth` globally—except for users asking for reduced motion through `prefers-reduced-motion` media query. [See #31877](https://github.com/twbs/bootstrap/pull/31877)
+
+## RTL
+
+- Horizontal direction specific variables, utilities, and mixins have all been renamed to use logical properties like those found in flexbox layouts—e.g., `start` and `end` in lieu of `left` and `right`.
+
+## Forms
+
+- **Added new floating forms!** We've promoted the Floating labels example to fully supported form components. [See the new Floating labels page.]({{< docsref "/forms/floating-labels" >}})
+
+- <span class="badge bg-danger">Breaking</span> **Consolidated native and custom form elements.** Checkboxes, radios, selects, and other inputs that had native and custom classes in v4 have been consolidated. Now nearly all our form elements are entirely custom, most without the need for custom HTML.
+ - `.custom-control.custom-checkbox` is now `.form-check`.
+ - `.custom-control.custom-custom-radio` is now `.form-check`.
+ - `.custom-control.custom-switch` is now `.form-check.form-switch`.
+ - `.custom-select` is now `.form-select`.
+ - `.custom-file` and `.form-file` have been replaced by custom styles on top of `.form-control`.
+ - `.custom-range` is now `.form-range`.
+ - Dropped native `.form-control-file` and `.form-control-range`.
+
+- <span class="badge bg-danger">Breaking</span> Dropped `.input-group-append` and `.input-group-prepend`. You can now just add buttons and `.input-group-text` as direct children of the input groups.
+
+- The longstanding [Missing border radius on input group with validation feedback bug](https://github.com/twbs/bootstrap/issues/25110) is finally fixed by adding an additional `.has-validation` class to input groups with validation.
+
+- <span class="badge bg-danger">Breaking</span> **Dropped form-specific layout classes for our grid system.** Use our grid and utilities instead of `.form-group`, `.form-row`, or `.form-inline`.
+
+- <span class="badge bg-danger">Breaking</span> Form labels now require `.form-label`.
+
+- <span class="badge bg-danger">Breaking</span> `.form-text` no longer sets `display`, allowing you to create inline or block help text as you wish just by changing the HTML element.
+
+- Form controls no longer used fixed `height` when possible, instead deferring to `min-height` to improve customization and compatibility with other components.
+
+- Validation icons are no longer applied to `<select>`s with `multiple`.
+
+- Rearranged source Sass files under `scss/forms/`, including input group styles.
+
+<hr class="my-5">
+
+## Components
+
+- Unified `padding` values for alerts, breadcrumbs, cards, dropdowns, list groups, modals, popovers, and tooltips to be based on our `$spacer` variable. [See #30564](https://github.com/twbs/bootstrap/pull/30564).
+
+### Accordion
+
+- Added [new accordion component]({{< docsref "/components/accordion" >}}).
+
+### Alerts
+
+- Alerts now have [examples with icons]({{< docsref "/components/alerts#icons" >}}).
+
+- Removed custom styles for `<hr>`s in each alert since they already use `currentColor`.
+
+### Badges
+
+- <span class="badge bg-danger">Breaking</span> Dropped all `.badge-*` color classes for background utilities (e.g., use `.bg-primary` instead of `.badge-primary`).
+
+- <span class="badge bg-danger">Breaking</span> Dropped `.badge-pill`—use the `.rounded-pill` utility instead.
+
+- <span class="badge bg-danger">Breaking</span> Removed hover and focus styles for `<a>` and `<button>` elements.
+
+- Increased default padding for badges from `.25em`/`.5em` to `.35em`/`.65em`.
+
+### Breadcrumbs
+
+- Simplified the default appearance of breadcrumbs by removing `padding`, `background-color`, and `border-radius`.
+
+- Added new CSS custom property `--bs-breadcrumb-divider` for easy customization without needing to recompile CSS.
+
+### Buttons
+
+- <span class="badge bg-danger">Breaking</span> **[Toggle buttons]({{< docsref "/forms/checks-radios#toggle-buttons" >}}), with checkboxes or radios, no longer require JavaScript and have new markup.** We no longer require a wrapping element, add `.btn-check` to the `<input>`, and pair it with any `.btn` classes on the `<label>`. [See #30650](https://github.com/twbs/bootstrap/pull/30650). _The docs for this has moved from our Buttons page to the new Forms section._
+
+- <span class="badge bg-danger">Breaking</span> **Dropped `.btn-block` for utilities.** Instead of using `.btn-block` on the `.btn`, wrap your buttons with `.d-grid` and a `.gap-*` utility to space them as needed. Switch to responsive classes for even more control over them. [Read the docs for some examples.]({{< docsref "/components/buttons#block-buttons" >}})
+
+- Updated our `button-variant()` and `button-outline-variant()` mixins to support additional parameters.
+
+- Updated buttons to ensure increased contrast on hover and active states.
+
+- Disabled buttons now have `pointer-events: none;`.
+
+### Card
+
+- <span class="badge bg-danger">Breaking</span> Dropped `.card-deck` in favor of our grid. Wrap your cards in column classes and add a parent `.row-cols-*` container to recreate card decks (but with more control over responsive alignment).
+
+- <span class="badge bg-danger">Breaking</span> Dropped `.card-columns` in favor of Masonry. [See #28922](https://github.com/twbs/bootstrap/pull/28922).
+
+- <span class="badge bg-danger">Breaking</span> Replaced the `.card` based accordion with a [new Accordion component]({{< docsref "/components/accordion" >}}).
+
+### Carousel
+
+- Added new [`.carousel-dark` variant]({{< docsref "/components/carousel#dark-variant" >}}) for dark text, controls, and indicators (great for lighter backgrounds).
+
+- Replaced chevron icons for carousel controls with new SVGs from [Bootstrap Icons]({{< param "icons" >}}).
+
+### Close button
+
+- <span class="badge bg-danger">Breaking</span> Renamed `.close` to `.btn-close` for a less generic name.
+
+- Close buttons now use a `background-image` (embedded SVG) instead of a `&times;` in the HTML, allowing for easier customization without the need to touch your markup.
+
+- Added new `.btn-close-white` variant that uses `filter: invert(1)` to enable higher contrast dismiss icons against darker backgrounds.
+
+### Collapse
+
+- Removed scroll anchoring for accordions.
+
+### Dropdowns
+
+- Added new `.dropdown-menu-dark` variant and associated variables for on-demand dark dropdowns.
+
+- Added new variable for `$dropdown-padding-x`.
+
+- Darkened the dropdown divider for improved contrast.
+
+- <span class="badge bg-danger">Breaking</span> All the events for the dropdown are now triggered on the dropdown toggle button and then bubbled up to the parent element.
+
+- Dropdown menus now have a `data-bs-popper="static"` attribute set when the positioning of the dropdown is static, or dropdown is in the navbar. This is added by our JavaScript and helps us use custom position styles without interfering with Popper's positioning.
+
+- <span class="badge bg-danger">Breaking</span> Dropped `flip` option for dropdown plugin in favor of native Popper configuration. You can now disable the flipping behavior by passing an empty array for [`fallbackPlacements`](https://popper.js.org/docs/v2/modifiers/flip/#fallbackplacements) option in [flip](https://popper.js.org/docs/v2/modifiers/flip/) modifier.
+
+- Dropdown menus can now be clickable with a new `autoClose` option to handle the [auto close behavior]({{< docsref "/components/dropdowns#auto-close-behavior" >}}). You can use this option to accept the click inside or outside the dropdown menu to make it interactive.
+
+- Dropdowns now support `.dropdown-item`s wrapped in `<li>`s.
+
+### Jumbotron
+
+- <span class="badge bg-danger">Breaking</span> Dropped the jumbotron component as it can be replicated with utilities. [See our new Jumbotron example for a demo.]({{< docsref "/examples/jumbotron" >}})
+
+### List group
+
+- Added new [`.list-group-numbered` modifier]({{< docsref "/components/list-group#numbered" >}}) to list groups.
+
+### Navs and tabs
+
+- Added new `null` variables for `font-size`, `font-weight`, `color`, and `:hover` `color` to the `.nav-link` class.
+
+### Navbars
+
+- <span class="badge bg-danger">Breaking</span> Navbars now require a container within (to drastically simplify spacing requirements and CSS required).
+- <span class="badge bg-danger">Breaking</span> The `.active` class can no longer be applied to `.nav-item`s, it must be applied directly on `.nav-link`s.
+
+### Offcanvas
+
+- Added the new [offcanvas component]({{< docsref "/components/offcanvas" >}}).
+
+### Pagination
+
+- Pagination links now have customizable `margin-left` that are dynamically rounded on all corners when separated from one another.
+
+- Added `transition`s to pagination links.
+
+### Popovers
+
+- <span class="badge bg-danger">Breaking</span> Renamed `.arrow` to `.popover-arrow` in our default popover template.
+
+- Renamed `whiteList` option to `allowList`.
+
+### Spinners
+
+- Spinners now honor `prefers-reduced-motion: reduce` by slowing down animations. [See #31882](https://github.com/twbs/bootstrap/pull/31882).
+
+- Improved spinner vertical alignment.
+
+### Toasts
+
+- Toasts can now be [positioned]({{< docsref "/components/toasts#placement" >}}) in a `.toast-container` with the help of [positioning utilities]({{< docsref "/utilities/position" >}}).
+
+- Changed default toast duration to 5 seconds.
+
+- Removed `overflow: hidden` from toasts and replaced with proper `border-radius`s with `calc()` functions.
+
+### Tooltips
+
+- <span class="badge bg-danger">Breaking</span> Renamed `.arrow` to `.tooltip-arrow` in our default tooltip template.
+
+- <span class="badge bg-danger">Breaking</span> The default value for the `fallbackPlacements` is changed to `['top', 'right', 'bottom', 'left']` for better placement of popper elements.
+
+- <span class="badge bg-danger">Breaking</span> Renamed `whiteList` option to `allowList`.
+
+## Utilities
+
+- <span class="badge bg-danger">Breaking</span> Renamed several utilities to use logical property names instead of directional names with the addition of RTL support:
+ - Renamed `.left-*` and `.right-*` to `.start-*` and `.end-*`.
+ - Renamed `.float-left` and `.float-right` to `.float-start` and `.float-end`.
+ - Renamed `.border-left` and `.border-right` to `.border-start` and `.border-end`.
+ - Renamed `.rounded-left` and `.rounded-right` to `.rounded-start` and `.rounded-end`.
+ - Renamed `.ml-*` and `.mr-*` to `.ms-*` and `.me-*`.
+ - Renamed `.pl-*` and `.pr-*` to `.ps-*` and `.pe-*`.
+ - Renamed `.text-left` and `.text-right` to `.text-start` and `.text-end`.
+
+- <span class="badge bg-danger">Breaking</span> Disabled negative margins by default.
+
+- Added new `.bg-body` class for quickly setting the `<body>`'s background to additional elements.
+
+- Added new [position utilities]({{< docsref "/utilities/position#arrange-elements" >}}) for `top`, `right`, `bottom`, and `left`. Values include `0`, `50%`, and `100%` for each property.
+
+- Added new `.translate-middle-x` & `.translate-middle-y` utilities to horizontally or vertically center absolute/fixed positioned elements.
+
+- Added new [`border-width` utilities]({{< docsref "/utilities/borders#border-width" >}}).
+
+- <span class="badge bg-danger">Breaking</span> Renamed `.text-monospace` to `.font-monospace`.
+
+- <span class="badge bg-danger">Breaking</span> Removed `.text-hide` as it's an antiquated method for hiding text that shouldn't be used anymore.
+
+- Added `.fs-*` utilities for `font-size` utilities (with RFS enabled). These use the same scale as HTML's default headings (1-6, large to small), and can be modified via Sass map.
+
+- <span class="badge bg-danger">Breaking</span> Renamed `.font-weight-*` utilities as `.fw-*` for brevity and consistency.
+
+- <span class="badge bg-danger">Breaking</span> Renamed `.font-italic` utility to `.fst-italic` for brevity and consistency with new `.fst-normal` utility.
+
+- Added `.d-grid` to display utilities and new `gap` utilities (`.gap`) for CSS Grid and flexbox layouts.
+
+- <span class="badge bg-danger">Breaking</span> Removed `.rounded-sm` and `rounded-lg`, and introduced a new scale of classes, `.rounded-0` to `.rounded-3`. [See #31687](https://github.com/twbs/bootstrap/pull/31687).
+
+- Added new `line-height` utilities: `.lh-1`, `.lh-sm`, `.lh-base` and `.lh-lg`. See [here]({{< docsref "/utilities/text#line-height" >}}).
+
+- Moved the `.d-none` utility in our CSS to give it more weight over other display utilities.
+
+- Extended the `.visually-hidden-focusable` helper to also work on containers, using `:focus-within`.
+
+## Helpers
+
+- <span class="badge bg-danger">Breaking</span> **Responsive embed helpers have been renamed to [ratio helpers]({{< docsref "/helpers/ratio" >}})** with new class names and improved behaviors, as well as a helpful CSS variable.
+ - Classes have been renamed to change `by` to `x` in the aspect ratio. For example, `.ratio-16by9` is now `.ratio-16x9`.
+ - We've dropped the `.embed-responsive-item` and element group selector in favor of a simpler `.ratio > *` selector. No more class is needed, and the ratio helper now works with any HTML element.
+ - The `$embed-responsive-aspect-ratios` Sass map has been renamed to `$aspect-ratios` and its values have been simplified to include the class name and the percentage as the `key: value` pair.
+ - CSS variables are now generated and included for each value in the Sass map. Modify the `--bs-aspect-ratio` variable on the `.ratio` to create any [custom aspect ratio]({{< docsref "/helpers/ratio#custom-ratios" >}}).
+
+- <span class="badge bg-danger">Breaking</span> **"Screen reader" classes are now ["visually hidden" classes]({{< docsref "/helpers/visually-hidden" >}}).**
+ - Changed the Sass file from `scss/helpers/_screenreaders.scss` to `scss/helpers/_visually-hidden.scss`
+ - Renamed `.sr-only` and `.sr-only-focusable` to `.visually-hidden` and `.visually-hidden-focusable`
+ - Renamed `sr-only()` and `sr-only-focusable()` mixins to `visually-hidden()` and `visually-hidden-focusable()`.
+
+- `bootstrap-utilities.css` now also includes our helpers. Helpers don't need to be imported in custom builds anymore.
+
+## JavaScript
+
+- **Dropped jQuery dependency** and rewrote plugins to be in regular JavaScript.
+
+- <span class="badge bg-danger">Breaking</span> Data attributes for all JavaScript plugins are now namespaced to help distinguish Bootstrap functionality from third parties and your own code. For example, we use `data-bs-toggle` instead of `data-toggle`.
+
+- **All plugins can now accept a CSS selector as the first argument.** You can either pass a DOM element or any valid CSS selector to create a new instance of the plugin:
+
+ ```js
+ const modal = new bootstrap.Modal('#myModal')
+ const dropdown = new bootstrap.Dropdown('[data-bs-toggle="dropdown"]')
+ ```
+
+- `popperConfig` can be passed as a function that accepts the Bootstrap's default Popper config as an argument, so that you can merge this default configuration in your way. **Applies to dropdowns, popovers, and tooltips.**
+
+- The default value for the `fallbackPlacements` is changed to `['top', 'right', 'bottom', 'left']` for better placement of Popper elements. **Applies to dropdowns, popovers, and tooltips.**
+
+- Removed underscore from public static methods like `_getInstance()` → `getInstance()`.
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/api.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/api.md
new file mode 100644
index 000000000..a4da94224
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/api.md
@@ -0,0 +1,616 @@
+---
+layout: docs
+title: Utility API
+description: The utility API is a Sass-based tool to generate utility classes.
+group: utilities
+aliases: "/docs/5.3/utilities/"
+toc: true
+---
+
+Bootstrap utilities are generated with our utility API and can be used to modify or extend our default set of utility classes via Sass. Our utility API is based on a series of Sass maps and functions for generating families of classes with various options. If you're unfamiliar with Sass maps, read up on the [official Sass docs](https://sass-lang.com/documentation/values/maps) to get started.
+
+The `$utilities` map contains all our utilities and is later merged with your custom `$utilities` map, if present. The utility map contains a keyed list of utility groups which accept the following options:
+
+{{< bs-table "table table-utilities" >}}
+| Option | Type | Default&nbsp;value | Description |
+| --- | --- | --- | --- |
+| [`property`](#property) | **Required** | – | Name of the property, this can be a string or an array of strings (e.g., horizontal paddings or margins). |
+| [`values`](#values) | **Required** | – | List of values, or a map if you don't want the class name to be the same as the value. If `null` is used as map key, `class` is not prepended to the class name. |
+| [`class`](#class) | Optional | null | Name of the generated class. If not provided and `property` is an array of strings, `class` will default to the first element of the `property` array. If not provided and `property` is a string, the `values` keys are used for the `class` names. |
+| [`css-var`](#css-variable-utilities) | Optional | `false` | Boolean to generate CSS variables instead of CSS rules. |
+| [`css-variable-name`](#css-variable-utilities) | Optional | null | Custom un-prefixed name for the CSS variable inside the ruleset. |
+| [`local-vars`](#local-css-variables) | Optional | null | Map of local CSS variables to generate in addition to the CSS rules. |
+| [`state`](#states) | Optional | null | List of pseudo-class variants (e.g., `:hover` or `:focus`) to generate. |
+| [`responsive`](#responsive) | Optional | `false` | Boolean indicating if responsive classes should be generated. |
+| `rfs` | Optional | `false` | Boolean to enable [fluid rescaling with RFS]({{< docsref "/getting-started/rfs" >}}). |
+| [`print`](#print) | Optional | `false` | Boolean indicating if print classes need to be generated. |
+| `rtl` | Optional | `true` | Boolean indicating if utility should be kept in RTL. |
+{{< /bs-table >}}
+
+## API explained
+
+All utility variables are added to the `$utilities` variable within our `_utilities.scss` stylesheet. Each group of utilities looks something like this:
+
+```scss
+$utilities: (
+ "opacity": (
+ property: opacity,
+ values: (
+ 0: 0,
+ 25: .25,
+ 50: .5,
+ 75: .75,
+ 100: 1,
+ )
+ )
+);
+```
+
+Which outputs the following:
+
+```css
+.opacity-0 { opacity: 0; }
+.opacity-25 { opacity: .25; }
+.opacity-50 { opacity: .5; }
+.opacity-75 { opacity: .75; }
+.opacity-100 { opacity: 1; }
+```
+
+### Property
+
+The required `property` key must be set for any utility, and it must contain a valid CSS property. This property is used in the generated utility's ruleset. When the `class` key is omitted, it also serves as the default class name. Consider the `text-decoration` utility:
+
+```scss
+$utilities: (
+ "text-decoration": (
+ property: text-decoration,
+ values: none underline line-through
+ )
+);
+```
+
+Output:
+
+```css
+.text-decoration-none { text-decoration: none !important; }
+.text-decoration-underline { text-decoration: underline !important; }
+.text-decoration-line-through { text-decoration: line-through !important; }
+```
+
+### Values
+
+Use the `values` key to specify which values for the specified `property` should be used in the generated class names and rules. Can be a list or map (set in the utilities or in a Sass variable).
+
+As a list, like with [`text-decoration` utilities]({{< docsref "/utilities/text#text-decoration" >}}):
+
+```scss
+values: none underline line-through
+```
+
+As a map, like with [`opacity` utilities]({{< docsref "/utilities/opacity" >}}):
+
+```scss
+values: (
+ 0: 0,
+ 25: .25,
+ 50: .5,
+ 75: .75,
+ 100: 1,
+)
+```
+
+As a Sass variable that sets the list or map, as in our [`position` utilities]({{< docsref "/utilities/position" >}}):
+
+```scss
+values: $position-values
+```
+
+### Class
+
+Use the `class` option to change the class prefix used in the compiled CSS. For example, to change from `.opacity-*` to `.o-*`:
+
+```scss
+$utilities: (
+ "opacity": (
+ property: opacity,
+ class: o,
+ values: (
+ 0: 0,
+ 25: .25,
+ 50: .5,
+ 75: .75,
+ 100: 1,
+ )
+ )
+);
+```
+
+Output:
+
+```css
+.o-0 { opacity: 0 !important; }
+.o-25 { opacity: .25 !important; }
+.o-50 { opacity: .5 !important; }
+.o-75 { opacity: .75 !important; }
+.o-100 { opacity: 1 !important; }
+```
+
+If `class: null`, generates classes for each of the `values` keys:
+
+```scss
+$utilities: (
+ "visibility": (
+ property: visibility,
+ class: null,
+ values: (
+ visible: visible,
+ invisible: hidden,
+ )
+ )
+);
+```
+
+Output:
+
+```css
+.visible { visibility: visible !important; }
+.invisible { visibility: hidden !important; }
+```
+
+### CSS variable utilities
+
+Set the `css-var` boolean option to `true` and the API will generate local CSS variables for the given selector instead of the usual `property: value` rules. Add an optional `css-variable-name` to set a different CSS variable name than the class name.
+
+Consider our `.text-opacity-*` utilities. If we add the `css-variable-name` option, we'll get a custom output.
+
+```scss
+$utilities: (
+ "text-opacity": (
+ css-var: true,
+ css-variable-name: text-alpha,
+ class: text-opacity,
+ values: (
+ 25: .25,
+ 50: .5,
+ 75: .75,
+ 100: 1
+ )
+ ),
+);
+```
+
+Output:
+
+```css
+.text-opacity-25 { --bs-text-alpha: .25; }
+.text-opacity-50 { --bs-text-alpha: .5; }
+.text-opacity-75 { --bs-text-alpha: .75; }
+.text-opacity-100 { --bs-text-alpha: 1; }
+```
+
+### Local CSS variables
+
+Use the `local-vars` option to specify a Sass map that will generate local CSS variables within the utility class's ruleset. Please note that it may require additional work to consume those local CSS variables in the generated CSS rules. For example, consider our `.bg-*` utilities:
+
+```scss
+$utilities: (
+ "background-color": (
+ property: background-color,
+ class: bg,
+ local-vars: (
+ "bg-opacity": 1
+ ),
+ values: map-merge(
+ $utilities-bg-colors,
+ (
+ "transparent": transparent
+ )
+ )
+ )
+);
+```
+
+Output:
+
+```css
+.bg-primary {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;
+}
+```
+
+### States
+
+Use the `state` option to generate pseudo-class variations. Example pseudo-classes are `:hover` and `:focus`. When a list of states are provided, classnames are created for that pseudo-class. For example, to change opacity on hover, add `state: hover` and you'll get `.opacity-hover:hover` in your compiled CSS.
+
+Need multiple pseudo-classes? Use a space-separated list of states: `state: hover focus`.
+
+```scss
+$utilities: (
+ "opacity": (
+ property: opacity,
+ class: opacity,
+ state: hover,
+ values: (
+ 0: 0,
+ 25: .25,
+ 50: .5,
+ 75: .75,
+ 100: 1,
+ )
+ )
+);
+```
+
+Output:
+
+```css
+.opacity-0-hover:hover { opacity: 0 !important; }
+.opacity-25-hover:hover { opacity: .25 !important; }
+.opacity-50-hover:hover { opacity: .5 !important; }
+.opacity-75-hover:hover { opacity: .75 !important; }
+.opacity-100-hover:hover { opacity: 1 !important; }
+```
+
+### Responsive
+
+Add the `responsive` boolean to generate responsive utilities (e.g., `.opacity-md-25`) across [all breakpoints]({{< docsref "/layout/breakpoints" >}}).
+
+```scss
+$utilities: (
+ "opacity": (
+ property: opacity,
+ responsive: true,
+ values: (
+ 0: 0,
+ 25: .25,
+ 50: .5,
+ 75: .75,
+ 100: 1,
+ )
+ )
+);
+```
+
+Output:
+
+```css
+.opacity-0 { opacity: 0 !important; }
+.opacity-25 { opacity: .25 !important; }
+.opacity-50 { opacity: .5 !important; }
+.opacity-75 { opacity: .75 !important; }
+.opacity-100 { opacity: 1 !important; }
+
+@media (min-width: 576px) {
+ .opacity-sm-0 { opacity: 0 !important; }
+ .opacity-sm-25 { opacity: .25 !important; }
+ .opacity-sm-50 { opacity: .5 !important; }
+ .opacity-sm-75 { opacity: .75 !important; }
+ .opacity-sm-100 { opacity: 1 !important; }
+}
+
+@media (min-width: 768px) {
+ .opacity-md-0 { opacity: 0 !important; }
+ .opacity-md-25 { opacity: .25 !important; }
+ .opacity-md-50 { opacity: .5 !important; }
+ .opacity-md-75 { opacity: .75 !important; }
+ .opacity-md-100 { opacity: 1 !important; }
+}
+
+@media (min-width: 992px) {
+ .opacity-lg-0 { opacity: 0 !important; }
+ .opacity-lg-25 { opacity: .25 !important; }
+ .opacity-lg-50 { opacity: .5 !important; }
+ .opacity-lg-75 { opacity: .75 !important; }
+ .opacity-lg-100 { opacity: 1 !important; }
+}
+
+@media (min-width: 1200px) {
+ .opacity-xl-0 { opacity: 0 !important; }
+ .opacity-xl-25 { opacity: .25 !important; }
+ .opacity-xl-50 { opacity: .5 !important; }
+ .opacity-xl-75 { opacity: .75 !important; }
+ .opacity-xl-100 { opacity: 1 !important; }
+}
+
+@media (min-width: 1400px) {
+ .opacity-xxl-0 { opacity: 0 !important; }
+ .opacity-xxl-25 { opacity: .25 !important; }
+ .opacity-xxl-50 { opacity: .5 !important; }
+ .opacity-xxl-75 { opacity: .75 !important; }
+ .opacity-xxl-100 { opacity: 1 !important; }
+}
+```
+
+### Print
+
+Enabling the `print` option will **also** generate utility classes for print, which are only applied within the `@media print { ... }` media query.
+
+```scss
+$utilities: (
+ "opacity": (
+ property: opacity,
+ print: true,
+ values: (
+ 0: 0,
+ 25: .25,
+ 50: .5,
+ 75: .75,
+ 100: 1,
+ )
+ )
+);
+```
+
+Output:
+
+```css
+.opacity-0 { opacity: 0 !important; }
+.opacity-25 { opacity: .25 !important; }
+.opacity-50 { opacity: .5 !important; }
+.opacity-75 { opacity: .75 !important; }
+.opacity-100 { opacity: 1 !important; }
+
+@media print {
+ .opacity-print-0 { opacity: 0 !important; }
+ .opacity-print-25 { opacity: .25 !important; }
+ .opacity-print-50 { opacity: .5 !important; }
+ .opacity-print-75 { opacity: .75 !important; }
+ .opacity-print-100 { opacity: 1 !important; }
+}
+```
+
+## Importance
+
+All utilities generated by the API include `!important` to ensure they override components and modifier classes as intended. You can toggle this setting globally with the `$enable-important-utilities` variable (defaults to `true`).
+
+## Using the API
+
+Now that you're familiar with how the utilities API works, learn how to add your own custom classes and modify our default utilities.
+
+### Override utilities
+
+Override existing utilities by using the same key. For example, if you want additional responsive overflow utility classes, you can do this:
+
+```scss
+$utilities: (
+ "overflow": (
+ responsive: true,
+ property: overflow,
+ values: visible hidden scroll auto,
+ ),
+);
+```
+
+### Add utilities
+
+New utilities can be added to the default `$utilities` map with a `map-merge`. Make sure our required Sass files and `_utilities.scss` are imported first, then use the `map-merge` to add your additional utilities. For example, here's how to add a responsive `cursor` utility with three values.
+
+```scss
+@import "bootstrap/scss/functions";
+@import "bootstrap/scss/variables";
+@import "bootstrap/scss/maps";
+@import "bootstrap/scss/mixins";
+@import "bootstrap/scss/utilities";
+
+$utilities: map-merge(
+ $utilities,
+ (
+ "cursor": (
+ property: cursor,
+ class: cursor,
+ responsive: true,
+ values: auto pointer grab,
+ )
+ )
+);
+
+@import "bootstrap/scss/utilities/api";
+```
+
+### Modify utilities
+
+Modify existing utilities in the default `$utilities` map with `map-get` and `map-merge` functions. In the example below, we're adding an additional value to the `width` utilities. Start with an initial `map-merge` and then specify which utility you want to modify. From there, fetch the nested `"width"` map with `map-get` to access and modify the utility's options and values.
+
+```scss
+@import "bootstrap/scss/functions";
+@import "bootstrap/scss/variables";
+@import "bootstrap/scss/maps";
+@import "bootstrap/scss/mixins";
+@import "bootstrap/scss/utilities";
+
+$utilities: map-merge(
+ $utilities,
+ (
+ "width": map-merge(
+ map-get($utilities, "width"),
+ (
+ values: map-merge(
+ map-get(map-get($utilities, "width"), "values"),
+ (10: 10%),
+ ),
+ ),
+ ),
+ )
+);
+
+@import "bootstrap/scss/utilities/api";
+```
+
+#### Enable responsive
+
+You can enable responsive classes for an existing set of utilities that are not currently responsive by default. For example, to make the `border` classes responsive:
+
+```scss
+@import "bootstrap/scss/functions";
+@import "bootstrap/scss/variables";
+@import "bootstrap/scss/maps";
+@import "bootstrap/scss/mixins";
+@import "bootstrap/scss/utilities";
+
+$utilities: map-merge(
+ $utilities, (
+ "border": map-merge(
+ map-get($utilities, "border"),
+ ( responsive: true ),
+ ),
+ )
+);
+
+@import "bootstrap/scss/utilities/api";
+```
+
+This will now generate responsive variations of `.border` and `.border-0` for each breakpoint. Your generated CSS will look like this:
+
+```css
+.border { ... }
+.border-0 { ... }
+
+@media (min-width: 576px) {
+ .border-sm { ... }
+ .border-sm-0 { ... }
+}
+
+@media (min-width: 768px) {
+ .border-md { ... }
+ .border-md-0 { ... }
+}
+
+@media (min-width: 992px) {
+ .border-lg { ... }
+ .border-lg-0 { ... }
+}
+
+@media (min-width: 1200px) {
+ .border-xl { ... }
+ .border-xl-0 { ... }
+}
+
+@media (min-width: 1400px) {
+ .border-xxl { ... }
+ .border-xxl-0 { ... }
+}
+```
+
+#### Rename utilities
+
+Missing v4 utilities, or used to another naming convention? The utilities API can be used to override the resulting `class` of a given utility—for example, to rename `.ms-*` utilities to oldish `.ml-*`:
+
+```scss
+@import "bootstrap/scss/functions";
+@import "bootstrap/scss/variables";
+@import "bootstrap/scss/maps";
+@import "bootstrap/scss/mixins";
+@import "bootstrap/scss/utilities";
+
+$utilities: map-merge(
+ $utilities, (
+ "margin-start": map-merge(
+ map-get($utilities, "margin-start"),
+ ( class: ml ),
+ ),
+ )
+);
+
+@import "bootstrap/scss/utilities/api";
+```
+
+### Remove utilities
+
+Remove any of the default utilities with the [`map-remove()` Sass function](https://sass-lang.com/documentation/modules/map#remove).
+
+```scss
+@import "bootstrap/scss/functions";
+@import "bootstrap/scss/variables";
+@import "bootstrap/scss/maps";
+@import "bootstrap/scss/mixins";
+@import "bootstrap/scss/utilities";
+
+// Remove multiple utilities with a comma-separated list
+$utilities: map-remove($utilities, "width", "float");
+
+@import "bootstrap/scss/utilities/api";
+```
+
+You can also use the [`map-merge()` Sass function](https://sass-lang.com/documentation/modules/map#merge) and set the group key to `null` to remove the utility.
+
+```scss
+@import "bootstrap/scss/functions";
+@import "bootstrap/scss/variables";
+@import "bootstrap/scss/maps";
+@import "bootstrap/scss/mixins";
+@import "bootstrap/scss/utilities";
+
+$utilities: map-merge(
+ $utilities,
+ (
+ "width": null
+ )
+);
+
+@import "bootstrap/scss/utilities/api";
+```
+
+### Add, remove, modify
+
+You can add, remove, and modify many utilities all at once with the [`map-merge()` Sass function](https://sass-lang.com/documentation/modules/map#merge). Here's how you can combine the previous examples into one larger map.
+
+```scss
+@import "bootstrap/scss/functions";
+@import "bootstrap/scss/variables";
+@import "bootstrap/scss/maps";
+@import "bootstrap/scss/mixins";
+@import "bootstrap/scss/utilities";
+
+$utilities: map-merge(
+ $utilities,
+ (
+ // Remove the `width` utility
+ "width": null,
+
+ // Make an existing utility responsive
+ "border": map-merge(
+ map-get($utilities, "border"),
+ ( responsive: true ),
+ ),
+
+ // Add new utilities
+ "cursor": (
+ property: cursor,
+ class: cursor,
+ responsive: true,
+ values: auto pointer grab,
+ )
+ )
+);
+
+@import "bootstrap/scss/utilities/api";
+```
+
+#### Remove utility in RTL
+
+Some edge cases make [RTL styling difficult](https://rtlstyling.com/posts/rtl-styling#common-things-that-might-not-work-for-rtl), such as line breaks in Arabic. Thus utilities can be dropped from RTL output by setting the `rtl` option to `false`:
+
+```scss
+$utilities: (
+ "word-wrap": (
+ property: word-wrap word-break,
+ class: text,
+ values: (break: break-word),
+ rtl: false
+ ),
+);
+```
+
+Output:
+
+```css
+/* rtl:begin:remove */
+.text-break {
+ word-wrap: break-word !important;
+ word-break: break-word !important;
+}
+/* rtl:end:remove */
+```
+
+This doesn't output anything in RTL, thanks to [the RTLCSS `remove` control directive](https://rtlcss.com/learn/usage-guide/control-directives/#remove).
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/background.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/background.md
new file mode 100644
index 000000000..dad71ec37
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/background.md
@@ -0,0 +1,130 @@
+---
+layout: docs
+title: Background
+description: Convey meaning through `background-color` and add decoration with gradients.
+group: utilities
+toc: true
+---
+
+## Background color
+
+Similar to the contextual text color classes, set the background of an element to any contextual class. Background utilities **do not set `color`**, so in some cases you'll want to use `.text-*` [color utilities]({{< docsref "/utilities/colors" >}}).
+
+{{< example >}}
+{{< colors.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="p-3 mb-2 bg-{{ .name }}{{ if .contrast_color }} text-{{ .contrast_color }}{{ else }} text-white{{ end }}">.bg-{{ .name }}</div>
+<div class="p-3 mb-2 bg-{{ .name }}-subtle text-emphasis-{{ .name }}">.bg-{{ .name }}-subtle</div>
+{{- end -}}
+{{< /colors.inline >}}
+<p class="p-3 mb-2 bg-body-secondary">.bg-body-secondary</p>
+<p class="p-3 mb-2 bg-body-tertiary">.bg-body-tertiary</p>
+
+<div class="p-3 mb-2 bg-body text-body">.bg-body</div>
+<div class="p-3 mb-2 bg-black text-white">.bg-black</div>
+<div class="p-3 mb-2 bg-white text-dark">.bg-white</div>
+<div class="p-3 mb-2 bg-transparent text-body">.bg-transparent</div>
+{{< /example >}}
+
+## Background gradient
+
+By adding a `.bg-gradient` class, a linear gradient is added as background image to the backgrounds. This gradient starts with a semi-transparent white which fades out to the bottom.
+
+Do you need a gradient in your custom CSS? Just add `background-image: var(--bs-gradient);`.
+
+{{< markdown >}}
+{{< colors.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<div class="p-3 mb-2 bg-{{ .name }} bg-gradient{{ with .contrast_color }} text-{{ . }}{{ else }} text-white{{ end }}">.bg-{{ .name }}.bg-gradient</div>
+{{- end -}}
+{{< /colors.inline >}}
+<div class="p-3 mb-2 bg-black bg-gradient text-white">.bg-black.bg-gradient</div>
+{{< /markdown >}}
+
+## Opacity
+
+{{< added-in "5.1.0" >}}
+
+As of v5.1.0, `background-color` utilities are generated with Sass using CSS variables. This allows for real-time color changes without compilation and dynamic alpha transparency changes.
+
+### How it works
+
+Consider our default `.bg-success` utility.
+
+```css
+.bg-success {
+ --bs-bg-opacity: 1;
+ background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;
+}
+```
+
+We use an RGB version of our `--bs-success` (with the value of `25, 135, 84`) CSS variable and attached a second CSS variable, `--bs-bg-opacity`, for the alpha transparency (with a default value `1` thanks to a local CSS variable). That means anytime you use `.bg-success` now, your computed `color` value is `rgba(25, 135, 84, 1)`. The local CSS variable inside each `.bg-*` class avoids inheritance issues so nested instances of the utilities don't automatically have a modified alpha transparency.
+
+### Example
+
+To change that opacity, override `--bs-bg-opacity` via custom styles or inline styles.
+
+{{< example >}}
+<div class="bg-success p-2 text-white">This is default success background</div>
+<div class="bg-success p-2" style="--bs-bg-opacity: .5;">This is 50% opacity success background</div>
+{{< /example >}}
+
+Or, choose from any of the `.bg-opacity` utilities:
+
+{{< example >}}
+<div class="bg-success p-2 text-white">This is default success background</div>
+<div class="bg-success p-2 text-white bg-opacity-75">This is 75% opacity success background</div>
+<div class="bg-success p-2 text-dark bg-opacity-50">This is 50% opacity success background</div>
+<div class="bg-success p-2 text-dark bg-opacity-25">This is 25% opacity success background</div>
+<div class="bg-success p-2 text-dark bg-opacity-10">This is 10% opacity success background</div>
+{{< /example >}}
+
+## Sass
+
+In addition to the following Sass functionality, consider reading about our included [CSS custom properties]({{< docsref "/customize/css-variables" >}}) (aka CSS variables) for colors and more.
+
+### Variables
+
+Most `background-color` utilities are generated by our theme colors, reassigned from our generic color palette variables.
+
+{{< scss-docs name="color-variables" file="scss/_variables.scss" >}}
+
+{{< scss-docs name="theme-color-variables" file="scss/_variables.scss" >}}
+
+{{< scss-docs name="variable-gradient" file="scss/_variables.scss" >}}
+
+Grayscale colors are also available, but only a subset are used to generate any utilities.
+
+{{< scss-docs name="gray-color-variables" file="scss/_variables.scss" >}}
+
+### Map
+
+Theme colors are then put into a Sass map so we can loop over them to generate our utilities, component modifiers, and more.
+
+{{< scss-docs name="theme-colors-map" file="scss/_variables.scss" >}}
+
+Grayscale colors are also available as a Sass map. **This map is not used to generate any utilities.**
+
+{{< scss-docs name="gray-colors-map" file="scss/_variables.scss" >}}
+
+RGB colors are generated from a separate Sass map:
+
+{{< scss-docs name="theme-colors-rgb" file="scss/_maps.scss" >}}
+
+And background color opacities build on that with their own map that's consumed by the utilities API:
+
+{{< scss-docs name="utilities-bg-colors" file="scss/_maps.scss" >}}
+
+### Mixins
+
+**No mixins are used to generate our background utilities**, but we do have some additional mixins for other situations where you'd like to create your own gradients.
+
+{{< scss-docs name="gradient-bg-mixin" file="scss/mixins/_gradients.scss" >}}
+
+{{< scss-docs name="gradient-mixins" file="scss/mixins/_gradients.scss" >}}
+
+### Utilities API
+
+Background utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-bg-color" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/borders.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/borders.md
new file mode 100644
index 000000000..50df793f2
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/borders.md
@@ -0,0 +1,175 @@
+---
+layout: docs
+title: Borders
+description: Use border utilities to quickly style the border and border-radius of an element. Great for images, buttons, or any other element.
+group: utilities
+toc: true
+---
+
+## Border
+
+Use border utilities to add or remove an element's borders. Choose from all borders or one at a time.
+
+### Additive
+
+Add borders to custom elements:
+
+{{< example class="bd-example-border-utils" >}}
+<span class="border"></span>
+<span class="border-top"></span>
+<span class="border-end"></span>
+<span class="border-bottom"></span>
+<span class="border-start"></span>
+{{< /example >}}
+
+### Subtractive
+
+Or remove borders:
+
+{{< example class="bd-example-border-utils" >}}
+<span class="border border-0"></span>
+<span class="border border-top-0"></span>
+<span class="border border-end-0"></span>
+<span class="border border-bottom-0"></span>
+<span class="border border-start-0"></span>
+{{< /example >}}
+
+## Color
+
+Change the border color using utilities built on our theme colors.
+
+{{< example class="bd-example-border-utils" >}}
+{{< border.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<span class="border border-{{ .name }}"></span>
+<span class="border border-{{ .name }}-subtle"></span>
+{{- end -}}
+{{< /border.inline >}}
+<span class="border border-white"></span>
+{{< /example >}}
+
+Or modify the default `border-color` of a component:
+
+{{< example >}}
+<div class="mb-4">
+ <label for="exampleFormControlInput1" class="form-label">Email address</label>
+ <input type="email" class="form-control border-success" id="exampleFormControlInput1" placeholder="name@example.com">
+</div>
+
+<div class="h4 pb-2 mb-4 text-danger border-bottom border-danger">
+ Dangerous heading
+</div>
+
+<div class="p-3 bg-info bg-opacity-10 border border-info border-start-0 rounded-end">
+ Changing border color and width
+</div>
+{{< /example >}}
+
+## Opacity
+
+{{< added-in "5.2.0" >}}
+
+Bootstrap `border-{color}` utilities are generated with Sass using CSS variables. This allows for real-time color changes without compilation and dynamic alpha transparency changes.
+
+### How it works
+
+Consider our default `.border-success` utility.
+
+```css
+.border-success {
+ --bs-border-opacity: 1;
+ border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important;
+}
+```
+
+We use an RGB version of our `--bs-success` (with the value of `25, 135, 84`) CSS variable and attached a second CSS variable, `--bs-border-opacity`, for the alpha transparency (with a default value `1` thanks to a local CSS variable). That means anytime you use `.border-success` now, your computed `color` value is `rgba(25, 135, 84, 1)`. The local CSS variable inside each `.border-*` class avoids inheritance issues so nested instances of the utilities don't automatically have a modified alpha transparency.
+
+### Example
+
+To change that opacity, override `--bs-border-opacity` via custom styles or inline styles.
+
+{{< example >}}
+<div class="border border-success p-2 mb-2">This is default success border</div>
+<div class="border border-success p-2" style="--bs-border-opacity: .5;">This is 50% opacity success border</div>
+{{< /example >}}
+
+Or, choose from any of the `.border-opacity` utilities:
+
+{{< example >}}
+<div class="border border-success p-2 mb-2">This is default success border</div>
+<div class="border border-success p-2 mb-2 border-opacity-75">This is 75% opacity success border</div>
+<div class="border border-success p-2 mb-2 border-opacity-50">This is 50% opacity success border</div>
+<div class="border border-success p-2 mb-2 border-opacity-25">This is 25% opacity success border</div>
+<div class="border border-success p-2 border-opacity-10">This is 10% opacity success border</div>
+{{< /example >}}
+
+## Width
+
+{{< example class="bd-example-border-utils" >}}
+<span class="border border-1"></span>
+<span class="border border-2"></span>
+<span class="border border-3"></span>
+<span class="border border-4"></span>
+<span class="border border-5"></span>
+{{< /example >}}
+
+## Radius
+
+Add classes to an element to easily round its corners.
+
+{{< example class="bd-example-rounded-utils" >}}
+{{< placeholder width="75" height="75" class="rounded" title="Example rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-top" title="Example top rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-end" title="Example right rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-bottom" title="Example bottom rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-start" title="Example left rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-circle" title="Completely round image" >}}
+{{< placeholder width="150" height="75" class="rounded-pill" title="Rounded pill image" >}}
+{{< /example >}}
+
+### Sizes
+
+Use the scaling classes for larger or smaller rounded corners. Sizes range from `0` to `5`, and can be configured by modifying the utilities API.
+
+{{< example class="bd-example-rounded-utils" >}}
+{{< placeholder width="75" height="75" class="rounded-0" title="Example non-rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-1" title="Example small rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-2" title="Example default rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-3" title="Example large rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-4" title="Example larger rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-5" title="Example extra large rounded image" >}}
+{{< /example >}}
+
+{{< example class="bd-example-rounded-utils" >}}
+{{< placeholder width="75" height="75" class="rounded-bottom-1" title="Example small rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-start-2" title="Example default left rounded image" >}}
+{{< placeholder width="75" height="75" class="rounded-end-circle" title="Example right completely round image" >}}
+{{< placeholder width="75" height="75" class="rounded-start-pill" title="Example left rounded pill image" >}}
+{{< placeholder width="75" height="75" class="rounded-5 rounded-top-0" title="Example extra large bottom rounded image" >}}
+{{< /example >}}
+
+## CSS
+
+### Variables
+
+{{< added-in "5.2.0" >}}
+
+{{< scss-docs name="root-border-var" file="scss/_root.scss" >}}
+
+### Sass variables
+
+{{< scss-docs name="border-variables" file="scss/_variables.scss" >}}
+
+{{< scss-docs name="border-radius-variables" file="scss/_variables.scss" >}}
+
+### Sass mixins
+
+{{< scss-docs name="border-radius-mixins" file="scss/mixins/_border-radius.scss" >}}
+
+### Utilities API
+
+Border utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-borders" file="scss/_utilities.scss" >}}
+
+{{< scss-docs name="utils-border-radius" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/colors.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/colors.md
new file mode 100644
index 000000000..4b1647242
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/colors.md
@@ -0,0 +1,124 @@
+---
+layout: docs
+title: Colors
+description: Convey meaning through `color` with a handful of color utility classes. Includes support for styling links with hover states, too.
+group: utilities
+toc: true
+---
+
+## Colors
+
+Colorize text with color utilities. If you want to colorize links, you can use the [`.link-*` helper classes]({{< docsref "/helpers/colored-links" >}}) which have `:hover` and `:focus` states.
+
+{{< example >}}
+{{< colors.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+<p class="text-{{ .name }}{{ with .contrast_color }} bg-{{ . }}{{ end }}">.text-{{ .name }}</p>
+<p class="text-{{ .name }}-emphasis">.text-{{ .name }}-emphasis</p>
+{{- end -}}
+{{< /colors.inline >}}
+<p class="text-body">.text-body</p>
+<p class="text-muted">.text-muted</p>
+
+<p class="text-body-emphasis">.text-body-emphasis</p>
+<p class="text-body-secondary">.text-body-secondary</p>
+<p class="text-body-tertiary">.text-body-tertiary</p>
+
+<p class="text-black bg-white">.text-black</p>
+<p class="text-white bg-dark">.text-white</p>
+<p class="text-black-50 bg-white">.text-black-50</p>
+<p class="text-white-50 bg-dark">.text-white-50</p>
+{{< /example >}}
+
+{{< callout warning >}}
+**Deprecation:** With the addition of `.text-opacity-*` utilities and CSS variables for text utilities, `.text-black-50` and `.text-white-50` are deprecated as of v5.1.0. They'll be removed in v6.0.0.
+{{< /callout >}}
+
+{{< callout warning >}}
+**Deprecation:** With the addition of the expanded theme colors and variables, the `.text-muted` utility has been deprecated as of v5.3.0. Its default value has also has been reassigned to the new `--bs-secondary-color` CSS variable to better support color modes. It will be removed in v6.0.0.
+{{< /callout >}}
+
+{{< callout info >}}
+{{< partial "callouts/warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
+
+## Opacity
+
+{{< added-in "5.1.0" >}}
+
+As of v5.1.0, text color utilities are generated with Sass using CSS variables. This allows for real-time color changes without compilation and dynamic alpha transparency changes.
+
+### How it works
+
+Consider our default `.text-primary` utility.
+
+```css
+.text-primary {
+ --bs-text-opacity: 1;
+ color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;
+}
+```
+
+We use an RGB version of our `--bs-primary` (with the value of `13, 110, 253`) CSS variable and attached a second CSS variable, `--bs-text-opacity`, for the alpha transparency (with a default value `1` thanks to a local CSS variable). That means anytime you use `.text-primary` now, your computed `color` value is `rgba(13, 110, 253, 1)`. The local CSS variable inside each `.text-*` class avoids inheritance issues so nested instances of the utilities don't automatically have a modified alpha transparency.
+
+### Example
+
+To change that opacity, override `--bs-text-opacity` via custom styles or inline styles.
+
+{{< example >}}
+<div class="text-primary">This is default primary text</div>
+<div class="text-primary" style="--bs-text-opacity: .5;">This is 50% opacity primary text</div>
+{{< /example >}}
+
+Or, choose from any of the `.text-opacity` utilities:
+
+{{< example >}}
+<div class="text-primary">This is default primary text</div>
+<div class="text-primary text-opacity-75">This is 75% opacity primary text</div>
+<div class="text-primary text-opacity-50">This is 50% opacity primary text</div>
+<div class="text-primary text-opacity-25">This is 25% opacity primary text</div>
+{{< /example >}}
+
+## Specificity
+
+Sometimes contextual classes cannot be applied due to the specificity of another selector. In some cases, a sufficient workaround is to wrap your element's content in a `<div>` or more semantic element with the desired class.
+
+## Sass
+
+In addition to the following Sass functionality, consider reading about our included [CSS custom properties]({{< docsref "/customize/css-variables" >}}) (aka CSS variables) for colors and more.
+
+### Variables
+
+Most `color` utilities are generated by our theme colors, reassigned from our generic color palette variables.
+
+{{< scss-docs name="color-variables" file="scss/_variables.scss" >}}
+
+{{< scss-docs name="theme-color-variables" file="scss/_variables.scss" >}}
+
+Grayscale colors are also available, but only a subset are used to generate any utilities.
+
+{{< scss-docs name="gray-color-variables" file="scss/_variables.scss" >}}
+
+### Map
+
+Theme colors are then put into a Sass map so we can loop over them to generate our utilities, component modifiers, and more.
+
+{{< scss-docs name="theme-colors-map" file="scss/_variables.scss" >}}
+
+Grayscale colors are also available as a Sass map. **This map is not used to generate any utilities.**
+
+{{< scss-docs name="gray-colors-map" file="scss/_variables.scss" >}}
+
+RGB colors are generated from a separate Sass map:
+
+{{< scss-docs name="theme-colors-rgb" file="scss/_maps.scss" >}}
+
+And color opacities build on that with their own map that's consumed by the utilities API:
+
+{{< scss-docs name="utilities-text-colors" file="scss/_maps.scss" >}}
+
+### Utilities API
+
+Color utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-color" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/display.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/display.md
new file mode 100644
index 000000000..1962f4bd2
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/display.md
@@ -0,0 +1,112 @@
+---
+layout: docs
+title: Display property
+description: Quickly and responsively toggle the display value of components and more with our display utilities. Includes support for some of the more common values, as well as some extras for controlling display when printing.
+group: utilities
+toc: true
+---
+
+## How it works
+
+Change the value of the [`display` property](https://developer.mozilla.org/en-US/docs/Web/CSS/display) with our responsive display utility classes. We purposely support only a subset of all possible values for `display`. Classes can be combined for various effects as you need.
+
+## Notation
+
+Display utility classes that apply to all [breakpoints]({{< docsref "/layout/breakpoints" >}}), from `xs` to `xxl`, have no breakpoint abbreviation in them. This is because those classes are applied from `min-width: 0;` and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.
+
+As such, the classes are named using the format:
+
+- `.d-{value}` for `xs`
+- `.d-{breakpoint}-{value}` for `sm`, `md`, `lg`, `xl`, and `xxl`.
+
+Where *value* is one of:
+
+- `none`
+- `inline`
+- `inline-block`
+- `block`
+- `grid`
+- `table`
+- `table-cell`
+- `table-row`
+- `flex`
+- `inline-flex`
+
+The display values can be altered by changing the `display` values defined in `$utilities` and recompiling the SCSS.
+
+The media queries affect screen widths with the given breakpoint *or larger*. For example, `.d-lg-none` sets `display: none;` on `lg`, `xl`, and `xxl` screens.
+
+## Examples
+
+{{< example >}}
+<div class="d-inline p-2 text-bg-primary">d-inline</div>
+<div class="d-inline p-2 text-bg-dark">d-inline</div>
+{{< /example >}}
+
+{{< example >}}
+<span class="d-block p-2 text-bg-primary">d-block</span>
+<span class="d-block p-2 text-bg-dark">d-block</span>
+{{< /example >}}
+
+## Hiding elements
+
+For faster mobile-friendly development, use responsive display classes for showing and hiding elements by device. Avoid creating entirely different versions of the same site, instead hide elements responsively for each screen size.
+
+To hide elements simply use the `.d-none` class or one of the `.d-{sm,md,lg,xl,xxl}-none` classes for any responsive screen variation.
+
+To show an element only on a given interval of screen sizes you can combine one `.d-*-none` class with a `.d-*-*` class, for example `.d-none .d-md-block .d-xl-none .d-xxl-none` will hide the element for all screen sizes except on medium and large devices.
+
+{{< bs-table >}}
+| Screen size | Class |
+| --- | --- |
+| Hidden on all | `.d-none` |
+| Hidden only on xs | `.d-none .d-sm-block` |
+| Hidden only on sm | `.d-sm-none .d-md-block` |
+| Hidden only on md | `.d-md-none .d-lg-block` |
+| Hidden only on lg | `.d-lg-none .d-xl-block` |
+| Hidden only on xl | `.d-xl-none .d-xxl-block` |
+| Hidden only on xxl | `.d-xxl-none` |
+| Visible on all | `.d-block` |
+| Visible only on xs | `.d-block .d-sm-none` |
+| Visible only on sm | `.d-none .d-sm-block .d-md-none` |
+| Visible only on md | `.d-none .d-md-block .d-lg-none` |
+| Visible only on lg | `.d-none .d-lg-block .d-xl-none` |
+| Visible only on xl | `.d-none .d-xl-block .d-xxl-none` |
+| Visible only on xxl | `.d-none .d-xxl-block` |
+{{< /bs-table >}}
+
+{{< example >}}
+<div class="d-lg-none">hide on lg and wider screens</div>
+<div class="d-none d-lg-block">hide on screens smaller than lg</div>
+{{< /example >}}
+
+## Display in print
+
+Change the `display` value of elements when printing with our print display utility classes. Includes support for the same `display` values as our responsive `.d-*` utilities.
+
+- `.d-print-none`
+- `.d-print-inline`
+- `.d-print-inline-block`
+- `.d-print-block`
+- `.d-print-grid`
+- `.d-print-table`
+- `.d-print-table-row`
+- `.d-print-table-cell`
+- `.d-print-flex`
+- `.d-print-inline-flex`
+
+The print and display classes can be combined.
+
+{{< example >}}
+<div class="d-print-none">Screen Only (Hide on print only)</div>
+<div class="d-none d-print-block">Print Only (Hide on screen only)</div>
+<div class="d-none d-lg-block d-print-block">Hide up to large on screen, but always show on print</div>
+{{< /example >}}
+
+## Sass
+
+### Utilities API
+
+Display utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-display" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/flex.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/flex.md
new file mode 100644
index 000000000..e29503434
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/flex.md
@@ -0,0 +1,664 @@
+---
+layout: docs
+title: Flex
+description: Quickly manage the layout, alignment, and sizing of grid columns, navigation, components, and more with a full suite of responsive flexbox utilities. For more complex implementations, custom CSS may be necessary.
+group: utilities
+toc: true
+---
+
+## Enable flex behaviors
+
+Apply `display` utilities to create a flexbox container and transform **direct children elements** into flex items. Flex containers and items are able to be modified further with additional flex properties.
+
+{{< example class="bd-example-flex" >}}
+<div class="d-flex p-2">I'm a flexbox container!</div>
+{{< /example >}}
+
+{{< example class="bd-example-flex" >}}
+<div class="d-inline-flex p-2">I'm an inline flexbox container!</div>
+{{< /example >}}
+
+Responsive variations also exist for `.d-flex` and `.d-inline-flex`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.d{{ .abbr }}-flex`
+- `.d{{ .abbr }}-inline-flex`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Direction
+
+Set the direction of flex items in a flex container with direction utilities. In most cases you can omit the horizontal class here as the browser default is `row`. However, you may encounter situations where you needed to explicitly set this value (like responsive layouts).
+
+Use `.flex-row` to set a horizontal direction (the browser default), or `.flex-row-reverse` to start the horizontal direction from the opposite side.
+
+{{< example class="bd-example-flex" >}}
+<div class="d-flex flex-row mb-3">
+ <div class="p-2">Flex item 1</div>
+ <div class="p-2">Flex item 2</div>
+ <div class="p-2">Flex item 3</div>
+</div>
+<div class="d-flex flex-row-reverse">
+ <div class="p-2">Flex item 1</div>
+ <div class="p-2">Flex item 2</div>
+ <div class="p-2">Flex item 3</div>
+</div>
+{{< /example >}}
+
+Use `.flex-column` to set a vertical direction, or `.flex-column-reverse` to start the vertical direction from the opposite side.
+
+{{< example class="bd-example-flex" >}}
+<div class="d-flex flex-column mb-3">
+ <div class="p-2">Flex item 1</div>
+ <div class="p-2">Flex item 2</div>
+ <div class="p-2">Flex item 3</div>
+</div>
+<div class="d-flex flex-column-reverse">
+ <div class="p-2">Flex item 1</div>
+ <div class="p-2">Flex item 2</div>
+ <div class="p-2">Flex item 3</div>
+</div>
+{{< /example >}}
+
+Responsive variations also exist for `flex-direction`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.flex{{ .abbr }}-row`
+- `.flex{{ .abbr }}-row-reverse`
+- `.flex{{ .abbr }}-column`
+- `.flex{{ .abbr }}-column-reverse`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Justify content
+
+Use `justify-content` utilities on flexbox containers to change the alignment of flex items on the main axis (the x-axis to start, y-axis if `flex-direction: column`). Choose from `start` (browser default), `end`, `center`, `between`, `around`, or `evenly`.
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex justify-content-start mb-3">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex justify-content-end mb-3">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex justify-content-center mb-3">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex justify-content-between mb-3">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex justify-content-around mb-3">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex justify-content-evenly">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex justify-content-start">...</div>
+<div class="d-flex justify-content-end">...</div>
+<div class="d-flex justify-content-center">...</div>
+<div class="d-flex justify-content-between">...</div>
+<div class="d-flex justify-content-around">...</div>
+<div class="d-flex justify-content-evenly">...</div>
+```
+
+Responsive variations also exist for `justify-content`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.justify-content{{ .abbr }}-start`
+- `.justify-content{{ .abbr }}-end`
+- `.justify-content{{ .abbr }}-center`
+- `.justify-content{{ .abbr }}-between`
+- `.justify-content{{ .abbr }}-around`
+- `.justify-content{{ .abbr }}-evenly`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Align items
+
+Use `align-items` utilities on flexbox containers to change the alignment of flex items on the cross axis (the y-axis to start, x-axis if `flex-direction: column`). Choose from `start`, `end`, `center`, `baseline`, or `stretch` (browser default).
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex align-items-start mb-3" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex align-items-end mb-3" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex align-items-center mb-3" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex align-items-baseline mb-3" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex align-items-stretch" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex align-items-start">...</div>
+<div class="d-flex align-items-end">...</div>
+<div class="d-flex align-items-center">...</div>
+<div class="d-flex align-items-baseline">...</div>
+<div class="d-flex align-items-stretch">...</div>
+```
+
+Responsive variations also exist for `align-items`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.align-items{{ .abbr }}-start`
+- `.align-items{{ .abbr }}-end`
+- `.align-items{{ .abbr }}-center`
+- `.align-items{{ .abbr }}-baseline`
+- `.align-items{{ .abbr }}-stretch`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Align self
+
+Use `align-self` utilities on flexbox items to individually change their alignment on the cross axis (the y-axis to start, x-axis if `flex-direction: column`). Choose from the same options as `align-items`: `start`, `end`, `center`, `baseline`, or `stretch` (browser default).
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex mb-3" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="align-self-start p-2">Aligned flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex mb-3" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="align-self-end p-2">Aligned flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex mb-3" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="align-self-center p-2">Aligned flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex mb-3" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="align-self-baseline p-2">Aligned flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+ <div class="d-flex" style="height: 100px">
+ <div class="p-2">Flex item</div>
+ <div class="align-self-stretch p-2">Aligned flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="align-self-start">Aligned flex item</div>
+<div class="align-self-end">Aligned flex item</div>
+<div class="align-self-center">Aligned flex item</div>
+<div class="align-self-baseline">Aligned flex item</div>
+<div class="align-self-stretch">Aligned flex item</div>
+```
+
+Responsive variations also exist for `align-self`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.align-self{{ .abbr }}-start`
+- `.align-self{{ .abbr }}-end`
+- `.align-self{{ .abbr }}-center`
+- `.align-self{{ .abbr }}-baseline`
+- `.align-self{{ .abbr }}-stretch`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Fill
+
+Use the `.flex-fill` class on a series of sibling elements to force them into widths equal to their content (or equal widths if their content does not surpass their border-boxes) while taking up all available horizontal space.
+
+{{< example class="bd-example-flex" >}}
+<div class="d-flex">
+ <div class="p-2 flex-fill">Flex item with a lot of content</div>
+ <div class="p-2 flex-fill">Flex item</div>
+ <div class="p-2 flex-fill">Flex item</div>
+</div>
+{{< /example >}}
+
+Responsive variations also exist for `flex-fill`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.flex{{ .abbr }}-fill`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Grow and shrink
+
+Use `.flex-grow-*` utilities to toggle a flex item's ability to grow to fill available space. In the example below, the `.flex-grow-1` elements uses all available space it can, while allowing the remaining two flex items their necessary space.
+
+{{< example class="bd-example-flex" >}}
+<div class="d-flex">
+ <div class="p-2 flex-grow-1">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Third flex item</div>
+</div>
+{{< /example >}}
+
+Use `.flex-shrink-*` utilities to toggle a flex item's ability to shrink if necessary. In the example below, the second flex item with `.flex-shrink-1` is forced to wrap its contents to a new line, "shrinking" to allow more space for the previous flex item with `.w-100`.
+
+{{< example class="bd-example-flex" >}}
+<div class="d-flex">
+ <div class="p-2 w-100">Flex item</div>
+ <div class="p-2 flex-shrink-1">Flex item</div>
+</div>
+{{< /example >}}
+
+Responsive variations also exist for `flex-grow` and `flex-shrink`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.flex{{ .abbr }}-{grow|shrink}-0`
+- `.flex{{ .abbr }}-{grow|shrink}-1`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Auto margins
+
+Flexbox can do some pretty awesome things when you mix flex alignments with auto margins. Shown below are three examples of controlling flex items via auto margins: default (no auto margin), pushing two items to the right (`.me-auto`), and pushing two items to the left (`.ms-auto`).
+
+{{< example class="bd-example-flex" >}}
+<div class="d-flex mb-3">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+</div>
+
+<div class="d-flex mb-3">
+ <div class="me-auto p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+</div>
+
+<div class="d-flex mb-3">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="ms-auto p-2">Flex item</div>
+</div>
+{{< /example >}}
+
+### With align-items
+
+Vertically move one flex item to the top or bottom of a container by mixing `align-items`, `flex-direction: column`, and `margin-top: auto` or `margin-bottom: auto`.
+
+{{< example class="bd-example-flex" >}}
+<div class="d-flex align-items-start flex-column mb-3" style="height: 200px;">
+ <div class="mb-auto p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+</div>
+
+<div class="d-flex align-items-end flex-column mb-3" style="height: 200px;">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="mt-auto p-2">Flex item</div>
+</div>
+{{< /example >}}
+
+## Wrap
+
+Change how flex items wrap in a flex container. Choose from no wrapping at all (the browser default) with `.flex-nowrap`, wrapping with `.flex-wrap`, or reverse wrapping with `.flex-wrap-reverse`.
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex flex-nowrap" style="width: 8rem;">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex flex-nowrap">
+ ...
+</div>
+```
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex flex-wrap">
+ <div class="p-2">Flex item 1</div>
+ <div class="p-2">Flex item 2</div>
+ <div class="p-2">Flex item 3</div>
+ <div class="p-2">Flex item 4</div>
+ <div class="p-2">Flex item 5</div>
+ <div class="p-2">Flex item 6</div>
+ <div class="p-2">Flex item 7</div>
+ <div class="p-2">Flex item 8</div>
+ <div class="p-2">Flex item 9</div>
+ <div class="p-2">Flex item 10</div>
+ <div class="p-2">Flex item 11</div>
+ <div class="p-2">Flex item 12</div>
+ <div class="p-2">Flex item 13</div>
+ <div class="p-2">Flex item 14</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex flex-wrap">
+ ...
+</div>
+```
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex flex-wrap-reverse">
+ <div class="p-2">Flex item 1</div>
+ <div class="p-2">Flex item 2</div>
+ <div class="p-2">Flex item 3</div>
+ <div class="p-2">Flex item 4</div>
+ <div class="p-2">Flex item 5</div>
+ <div class="p-2">Flex item 6</div>
+ <div class="p-2">Flex item 7</div>
+ <div class="p-2">Flex item 8</div>
+ <div class="p-2">Flex item 9</div>
+ <div class="p-2">Flex item 10</div>
+ <div class="p-2">Flex item 11</div>
+ <div class="p-2">Flex item 12</div>
+ <div class="p-2">Flex item 13</div>
+ <div class="p-2">Flex item 14</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex flex-wrap-reverse">
+ ...
+</div>
+```
+
+
+Responsive variations also exist for `flex-wrap`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.flex{{ .abbr }}-nowrap`
+- `.flex{{ .abbr }}-wrap`
+- `.flex{{ .abbr }}-wrap-reverse`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Order
+
+Change the _visual_ order of specific flex items with a handful of `order` utilities. We only provide options for making an item first or last, as well as a reset to use the DOM order. As `order` takes any integer value from 0 to 5, add custom CSS for any additional values needed.
+
+{{< example class="bd-example-flex" >}}
+<div class="d-flex flex-nowrap">
+ <div class="order-3 p-2">First flex item</div>
+ <div class="order-2 p-2">Second flex item</div>
+ <div class="order-1 p-2">Third flex item</div>
+</div>
+{{< /example >}}
+
+Responsive variations also exist for `order`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $bp := $.Site.Data.breakpoints -}}
+{{- range (seq 0 5) }}
+- `.order{{ $bp.abbr }}-{{ . }}`
+{{- end -}}
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+Additionally there are also responsive `.order-first` and `.order-last` classes that change the `order` of an element by applying `order: -1` and `order: 6`, respectively.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $bp := $.Site.Data.breakpoints -}}
+{{- range (slice "first" "last") }}
+- `.order{{ $bp.abbr }}-{{ . }}`
+{{- end -}}
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Align content
+
+Use `align-content` utilities on flexbox containers to align flex items _together_ on the cross axis. Choose from `start` (browser default), `end`, `center`, `between`, `around`, or `stretch`. To demonstrate these utilities, we've enforced `flex-wrap: wrap` and increased the number of flex items.
+
+**Heads up!** This property has no effect on single rows of flex items.
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex align-content-start flex-wrap mb-3" style="height: 200px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex align-content-start flex-wrap">
+ ...
+</div>
+```
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex align-content-end flex-wrap mb-3" style="height: 200px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex align-content-end flex-wrap">...</div>
+```
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex align-content-center flex-wrap mb-3" style="height: 200px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex align-content-center flex-wrap">...</div>
+```
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex align-content-between flex-wrap mb-3" style="height: 200px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex align-content-between flex-wrap">...</div>
+```
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex align-content-around flex-wrap mb-3" style="height: 200px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex align-content-around flex-wrap">...</div>
+```
+
+<div class="bd-example bd-example-flex">
+ <div class="d-flex align-content-stretch flex-wrap mb-3" style="height: 200px">
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ <div class="p-2">Flex item</div>
+ </div>
+</div>
+
+```html
+<div class="d-flex align-content-stretch flex-wrap">...</div>
+```
+
+Responsive variations also exist for `align-content`.
+
+{{< markdown >}}
+{{< flex.inline >}}
+{{- range $.Site.Data.breakpoints }}
+- `.align-content{{ .abbr }}-start`
+- `.align-content{{ .abbr }}-end`
+- `.align-content{{ .abbr }}-center`
+- `.align-content{{ .abbr }}-between`
+- `.align-content{{ .abbr }}-around`
+- `.align-content{{ .abbr }}-stretch`
+{{- end -}}
+{{< /flex.inline >}}
+{{< /markdown >}}
+
+## Media object
+
+Looking to replicate the [media object component](https://getbootstrap.com/docs/4.6/components/media-object/) from Bootstrap 4? Recreate it in no time with a few flex utilities that allow even more flexibility and customization than before.
+
+{{< example >}}
+<div class="d-flex">
+ <div class="flex-shrink-0">
+ {{< placeholder width="100" height="100" color="#999" background="#e5e5e5" text="Image" >}}
+ </div>
+ <div class="flex-grow-1 ms-3">
+ This is some content from a media component. You can replace this with any content and adjust it as needed.
+ </div>
+</div>
+{{< /example >}}
+
+And say you want to vertically center the content next to the image:
+
+{{< example >}}
+<div class="d-flex align-items-center">
+ <div class="flex-shrink-0">
+ {{< placeholder width="100" height="100" color="#999" background="#e5e5e5" text="Image" >}}
+ </div>
+ <div class="flex-grow-1 ms-3">
+ This is some content from a media component. You can replace this with any content and adjust it as needed.
+ </div>
+</div>
+{{< /example >}}
+
+## Sass
+
+### Utilities API
+
+Flexbox utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-flex" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/float.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/float.md
index a18c21471..a18c21471 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/float.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/float.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/interactions.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/interactions.md
new file mode 100644
index 000000000..0e8ea001f
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/interactions.md
@@ -0,0 +1,42 @@
+---
+layout: docs
+title: Interactions
+description: Utility classes that change how users interact with contents of a website.
+group: utilities
+toc: false
+---
+
+## Text selection
+
+Change the way in which the content is selected when the user interacts with it.
+
+{{< example >}}
+<p class="user-select-all">This paragraph will be entirely selected when clicked by the user.</p>
+<p class="user-select-auto">This paragraph has default select behavior.</p>
+<p class="user-select-none">This paragraph will not be selectable when clicked by the user.</p>
+{{< /example >}}
+
+## Pointer events
+
+Bootstrap provides `.pe-none` and `.pe-auto` classes to prevent or add element interactions.
+
+{{< example >}}
+<p><a href="#" class="pe-none" tabindex="-1" aria-disabled="true">This link</a> can not be clicked.</p>
+<p><a href="#" class="pe-auto">This link</a> can be clicked (this is default behavior).</p>
+<p class="pe-none"><a href="#" tabindex="-1" aria-disabled="true">This link</a> can not be clicked because the <code>pointer-events</code> property is inherited from its parent. However, <a href="#" class="pe-auto">this link</a> has a <code>pe-auto</code> class and can be clicked.</p>
+{{< /example >}}
+
+The `.pe-none` class (and the `pointer-events` CSS property it sets) only prevents interactions with a pointer (mouse, stylus, touch). Links and controls with `.pe-none` are, by default, still focusable and actionable for keyboard users. To ensure that they are completely neutralized even for keyboard users, you may need to add further attributes such as `tabindex="-1"` (to prevent them from receiving keyboard focus) and `aria-disabled="true"` (to convey the fact they are effectively disabled to assistive technologies), and possibly use JavaScript to completely prevent them from being actionable.
+
+If possible, the simpler solution is:
+
+- For form controls, add the `disabled` HTML attribute.
+- For links, remove the `href` attribute, making it a non-interactive anchor or placeholder link.
+
+## Sass
+
+### Utilities API
+
+Interaction utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-interaction" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/object-fit.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/object-fit.md
new file mode 100644
index 000000000..4d6c476eb
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/object-fit.md
@@ -0,0 +1,61 @@
+---
+layout: docs
+title: Object fit
+description: Use the object fit utilities to modify how the content of a [replaced element](https://developer.mozilla.org/en-US/docs/Web/CSS/Replaced_element), such as an `<img>` or `<video>`, should be resized to fit its container.
+group: utilities
+toc: true
+---
+
+## How it works
+
+Change the value of the [`object-fit` property](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit) with our responsive `object-fit` utility classes. This property tells the content to fill the parent container in a variety of ways, such as preserving the aspect ratio or stretching to take up as much space as possible.
+
+Classes for the value of `object-fit` are named using the format `.object-fit-{value}`. Choose from the following values:
+
+- `contain`
+- `cover`
+- `fill`
+- `scale` (for scale-down)
+- `none`
+
+## Examples
+
+Add the `object-fit-{value}` class to the [replaced element](https://developer.mozilla.org/en-US/docs/Web/CSS/Replaced_element):
+
+{{< example class="d-flex overflow-auto" >}}
+{{< placeholder width="140" height="120" class="object-fit-contain border rounded" text="Object fit contain" markup="img" >}}
+{{< placeholder width="140" height="120" class="object-fit-cover border rounded" text="Object fit cover" markup="img" >}}
+{{< placeholder width="140" height="120" class="object-fit-fill border rounded" text="Object fit fill" markup="img" >}}
+{{< placeholder width="140" height="120" class="object-fit-scale border rounded" text="Object fit scale down" markup="img" >}}
+{{< placeholder width="140" height="120" class="object-fit-none border rounded" text="Object fit none" markup="img" >}}
+{{< /example >}}
+
+## Responsive
+
+Responsive variations also exist for each `object-fit` value using the format `.object-fit-{breakpoint}-{value}`, for the following breakpoint abbreviations: `sm`, `md`, `lg`, `xl`, and `xxl`. Classes can be combined for various effects as you need.
+
+{{< example class="d-flex overflow-auto" >}}
+{{< placeholder width="140" height="80" class="object-fit-sm-contain border rounded" text="Contain on sm" markup="img" >}}
+{{< placeholder width="140" height="80" class="object-fit-md-contain border rounded" text="Contain on md" markup="img" >}}
+{{< placeholder width="140" height="80" class="object-fit-lg-contain border rounded" text="Contain on lg" markup="img" >}}
+{{< placeholder width="140" height="80" class="object-fit-xl-contain border rounded" text="Contain on xl" markup="img" >}}
+{{< placeholder width="140" height="80" class="object-fit-xxl-contain border rounded" text="Contain on xxl" markup="img" >}}
+{{< /example >}}
+
+## Video
+
+The `.object-fit-{value}` and responsive `.object-fit-{breakpoint}-{value}` utilities also work on `<video>` elements.
+
+```html
+<video src="..." class="object-fit-contain" autoplay></video>
+<video src="..." class="object-fit-cover" autoplay></video>
+<video src="..." class="object-fit-fill" autoplay></video>
+<video src="..." class="object-fit-scale" autoplay></video>
+<video src="..." class="object-fit-none" autoplay></video>
+```
+
+## Utilities API
+
+Object fit utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-object-fit" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/opacity.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/opacity.md
index 5cc4c225f..5cc4c225f 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/opacity.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/opacity.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/overflow.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/overflow.md
new file mode 100644
index 000000000..c4cb0092c
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/overflow.md
@@ -0,0 +1,99 @@
+---
+layout: docs
+title: Overflow
+description: Use these shorthand utilities for quickly configuring how content overflows an element.
+group: utilities
+toc: true
+---
+
+## Overflow
+
+Adjust the `overflow` property on the fly with four default values and classes. These classes are not responsive by default.
+
+<div class="bd-example d-md-flex">
+ <div class="overflow-auto p-3 mb-3 mb-md-0 me-md-3 bg-body-tertiary" style="max-width: 260px; max-height: 100px;">
+ This is an example of using <code>.overflow-auto</code> on an element with set width and height dimensions. By design, this content will vertically scroll.
+ </div>
+ <div class="overflow-hidden p-3 mb-3 mb-md-0 me-md-3 bg-body-tertiary" style="max-width: 260px; max-height: 100px;">
+ This is an example of using <code>.overflow-hidden</code> on an element with set width and height dimensions.
+ </div>
+ <div class="overflow-visible p-3 mb-3 mb-md-0 me-md-3 bg-body-tertiary" style="max-width: 260px; max-height: 100px;">
+ This is an example of using <code>.overflow-visible</code> on an element with set width and height dimensions.
+ </div>
+ <div class="overflow-scroll p-3 bg-body-tertiary" style="max-width: 260px; max-height: 100px;">
+ This is an example of using <code>.overflow-scroll</code> on an element with set width and height dimensions.
+ </div>
+</div>
+
+```html
+<div class="overflow-auto">...</div>
+<div class="overflow-hidden">...</div>
+<div class="overflow-visible">...</div>
+<div class="overflow-scroll">...</div>
+```
+
+### `overflow-x`
+
+Adjust the `overflow-x` property to affect the overflow of content horizontally.
+
+<div class="bd-example d-md-flex">
+ <div class="overflow-x-auto p-3 mb-3 mb-md-0 me-md-3 bg-body-tertiary w-100" style="max-width: 200px; max-height: 100px; white-space: nowrap;">
+ <div><code>.overflow-x-auto</code> example on an element</div>
+ <div> with set width and height dimensions.</div>
+ </div>
+ <div class="overflow-x-hidden p-3 mb-3 mb-md-0 me-md-3 bg-body-tertiary w-100" style="max-width: 200px; max-height: 100px;white-space: nowrap;">
+ <div><code>.overflow-x-hidden</code> example</div>
+ <div>on an element with set width and height dimensions.</div>
+ </div>
+ <div class="overflow-x-visible p-3 mb-3 mb-md-0 me-md-3 bg-body-tertiary w-100" style="max-width: 200px; max-height: 100px;white-space: nowrap;">
+ <div><code>.overflow-x-visible</code> example </div>
+ <div>on an element with set width and height dimensions.</div>
+ </div>
+ <div class="overflow-x-scroll p-3 bg-body-tertiary w-100" style="max-width: 200px; max-height: 100px;white-space: nowrap;">
+ <div><code>.overflow-x-scroll</code> example on an element</div>
+ <div> with set width and height dimensions.</div>
+ </div>
+</div>
+
+```html
+<div class="overflow-x-auto">...</div>
+<div class="overflow-x-hidden">...</div>
+<div class="overflow-x-visible">...</div>
+<div class="overflow-x-scroll">...</div>
+```
+
+### `overflow-y`
+
+Adjust the `overflow-y` property to affect the overflow of content vertically.
+
+<div class="bd-example d-md-flex">
+ <div class="overflow-y-auto p-3 mb-3 mb-md-0 me-md-3 bg-body-tertiary w-100" style="max-width: 200px; max-height: 100px;">
+ <code>.overflow-y-auto</code> example on an element with set width and height dimensions.
+ </div>
+ <div class="overflow-y-hidden p-3 mb-3 mb-md-0 me-md-3 bg-body-tertiary w-100" style="max-width: 200px; max-height: 100px;">
+ <code>.overflow-y-hidden</code> example on an element with set width and height dimensions.
+ </div>
+ <div class="overflow-y-visible p-3 mb-3 mb-md-0 me-md-3 bg-body-tertiary w-100" style="max-width: 200px; max-height: 100px;">
+ <code>.overflow-y-visible</code> example on an element with set width and height dimensions.
+ </div>
+ <div class="overflow-y-scroll p-3 bg-body-tertiary w-100" style="max-width: 200px; max-height: 100px;">
+ <code>.overflow-y-scroll</code> example on an element with set width and height dimensions.
+ </div>
+</div>
+
+```html
+<div class="overflow-y-auto">...</div>
+<div class="overflow-y-hidden">...</div>
+<div class="overflow-y-visible">...</div>
+<div class="overflow-y-scroll">...</div>
+```
+
+Using Sass variables, you may customize the overflow utilities by changing the `$overflows` variable in `_variables.scss`.
+
+## Sass
+
+### Utilities API
+
+Overflow utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-overflow" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/position.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/position.md
new file mode 100644
index 000000000..0ba0dd769
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/position.md
@@ -0,0 +1,130 @@
+---
+layout: docs
+title: Position
+description: Use these shorthand utilities for quickly configuring the position of an element.
+group: utilities
+toc: true
+---
+
+## Position values
+
+Quick positioning classes are available, though they are not responsive.
+
+```html
+<div class="position-static">...</div>
+<div class="position-relative">...</div>
+<div class="position-absolute">...</div>
+<div class="position-fixed">...</div>
+<div class="position-sticky">...</div>
+```
+
+## Arrange elements
+
+Arrange elements easily with the edge positioning utilities. The format is `{property}-{position}`.
+
+Where *property* is one of:
+
+- `top` - for the vertical `top` position
+- `start` - for the horizontal `left` position (in LTR)
+- `bottom` - for the vertical `bottom` position
+- `end` - for the horizontal `right` position (in LTR)
+
+Where *position* is one of:
+
+- `0` - for `0` edge position
+- `50` - for `50%` edge position
+- `100` - for `100%` edge position
+
+(You can add more position values by adding entries to the `$position-values` Sass map variable.)
+
+{{< example class="bd-example-position-utils" >}}
+<div class="position-relative">
+ <div class="position-absolute top-0 start-0"></div>
+ <div class="position-absolute top-0 end-0"></div>
+ <div class="position-absolute top-50 start-50"></div>
+ <div class="position-absolute bottom-50 end-50"></div>
+ <div class="position-absolute bottom-0 start-0"></div>
+ <div class="position-absolute bottom-0 end-0"></div>
+</div>
+{{< /example >}}
+
+## Center elements
+
+In addition, you can also center the elements with the transform utility class `.translate-middle`.
+
+This class applies the transformations `translateX(-50%)` and `translateY(-50%)` to the element which, in combination with the edge positioning utilities, allows you to absolute center an element.
+
+{{< example class="bd-example-position-utils" >}}
+<div class="position-relative">
+ <div class="position-absolute top-0 start-0 translate-middle"></div>
+ <div class="position-absolute top-0 start-50 translate-middle"></div>
+ <div class="position-absolute top-0 start-100 translate-middle"></div>
+ <div class="position-absolute top-50 start-0 translate-middle"></div>
+ <div class="position-absolute top-50 start-50 translate-middle"></div>
+ <div class="position-absolute top-50 start-100 translate-middle"></div>
+ <div class="position-absolute top-100 start-0 translate-middle"></div>
+ <div class="position-absolute top-100 start-50 translate-middle"></div>
+ <div class="position-absolute top-100 start-100 translate-middle"></div>
+</div>
+{{< /example >}}
+
+By adding `.translate-middle-x` or `.translate-middle-y` classes, elements can be positioned only in horizontal or vertical direction.
+
+{{< example class="bd-example-position-utils" >}}
+<div class="position-relative">
+ <div class="position-absolute top-0 start-0"></div>
+ <div class="position-absolute top-0 start-50 translate-middle-x"></div>
+ <div class="position-absolute top-0 end-0"></div>
+ <div class="position-absolute top-50 start-0 translate-middle-y"></div>
+ <div class="position-absolute top-50 start-50 translate-middle"></div>
+ <div class="position-absolute top-50 end-0 translate-middle-y"></div>
+ <div class="position-absolute bottom-0 start-0"></div>
+ <div class="position-absolute bottom-0 start-50 translate-middle-x"></div>
+ <div class="position-absolute bottom-0 end-0"></div>
+</div>
+{{< /example >}}
+
+## Examples
+
+Here are some real life examples of these classes:
+
+{{< example class="bd-example-position-examples d-flex justify-content-around align-items-center" >}}
+<button type="button" class="btn btn-primary position-relative">
+ Mails <span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-secondary">+99 <span class="visually-hidden">unread messages</span></span>
+</button>
+
+<div class="position-relative py-2 px-4 text-bg-dark border border-dark rounded-pill">
+ Marker <svg width="1em" height="1em" viewBox="0 0 16 16" class="position-absolute top-100 start-50 translate-middle mt-1" fill="var(--bs-dark)" xmlns="http://www.w3.org/2000/svg"><path d="M7.247 11.14L2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z"/></svg>
+</div>
+
+<button type="button" class="btn btn-primary position-relative">
+ Alerts <span class="position-absolute top-0 start-100 translate-middle badge border border-light rounded-circle bg-danger p-2"><span class="visually-hidden">unread messages</span></span>
+</button>
+{{< /example >}}
+
+You can use these classes with existing components to create new ones. Remember that you can extend its functionality by adding entries to the `$position-values` variable.
+
+{{< example class="bd-example-position-examples" >}}
+<div class="position-relative m-4">
+ <div class="progress" role="progressbar" aria-label="Progress" aria-valuenow="50" aria-valuemin="0" aria-valuemax="100" style="height: 1px;">
+ <div class="progress-bar" style="width: 50%"></div>
+ </div>
+ <button type="button" class="position-absolute top-0 start-0 translate-middle btn btn-sm btn-primary rounded-pill" style="width: 2rem; height:2rem;">1</button>
+ <button type="button" class="position-absolute top-0 start-50 translate-middle btn btn-sm btn-primary rounded-pill" style="width: 2rem; height:2rem;">2</button>
+ <button type="button" class="position-absolute top-0 start-100 translate-middle btn btn-sm btn-secondary rounded-pill" style="width: 2rem; height:2rem;">3</button>
+</div>
+{{< /example >}}
+
+## Sass
+
+### Maps
+
+Default position utility values are declared in a Sass map, then used to generate our utilities.
+
+{{< scss-docs name="position-map" file="scss/_variables.scss" >}}
+
+### Utilities API
+
+Position utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-position" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/shadows.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/shadows.md
new file mode 100644
index 000000000..9872d4519
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/shadows.md
@@ -0,0 +1,30 @@
+---
+layout: docs
+title: Shadows
+description: Add or remove shadows to elements with box-shadow utilities.
+group: utilities
+toc: true
+---
+
+## Examples
+
+While shadows on components are disabled by default in Bootstrap and can be enabled via `$enable-shadows`, you can also quickly add or remove a shadow with our `box-shadow` utility classes. Includes support for `.shadow-none` and three default sizes (which have associated variables to match).
+
+{{< example class="overflow-hidden" >}}
+<div class="shadow-none p-3 mb-5 bg-body-tertiary rounded">No shadow</div>
+<div class="shadow-sm p-3 mb-5 bg-body-tertiary rounded">Small shadow</div>
+<div class="shadow p-3 mb-5 bg-body-tertiary rounded">Regular shadow</div>
+<div class="shadow-lg p-3 mb-5 bg-body-tertiary rounded">Larger shadow</div>
+{{< /example >}}
+
+## Sass
+
+### Variables
+
+{{< scss-docs name="box-shadow-variables" file="scss/_variables.scss" >}}
+
+### Utilities API
+
+Shadow utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-shadow" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/sizing.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/sizing.md
new file mode 100644
index 000000000..b8b58ddfd
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/sizing.md
@@ -0,0 +1,60 @@
+---
+layout: docs
+title: Sizing
+description: Easily make an element as wide or as tall with our width and height utilities.
+group: utilities
+toc: true
+---
+
+## Relative to the parent
+
+Width and height utilities are generated from the utility API in `_utilities.scss`. Includes support for `25%`, `50%`, `75%`, `100%`, and `auto` by default. Modify those values as you need to generate different utilities here.
+
+{{< example class="bd-example-flex" >}}
+<div class="w-25 p-3">Width 25%</div>
+<div class="w-50 p-3">Width 50%</div>
+<div class="w-75 p-3">Width 75%</div>
+<div class="w-100 p-3">Width 100%</div>
+<div class="w-auto p-3">Width auto</div>
+{{< /example >}}
+
+{{< example >}}
+<div style="height: 100px; background-color: rgba(255,0,0,0.1);">
+ <div class="h-25 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 25%</div>
+ <div class="h-50 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 50%</div>
+ <div class="h-75 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 75%</div>
+ <div class="h-100 d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height 100%</div>
+ <div class="h-auto d-inline-block" style="width: 120px; background-color: rgba(0,0,255,.1)">Height auto</div>
+</div>
+{{< /example >}}
+
+You can also use `max-width: 100%;` and `max-height: 100%;` utilities as needed.
+
+{{< example >}}
+{{< placeholder width="100%" height="100" class="mw-100" text="Max-width 100%" >}}
+{{< /example >}}
+
+{{< example >}}
+<div style="height: 100px; background-color: rgba(255,0,0,.1);">
+ <div class="mh-100" style="width: 100px; height: 200px; background-color: rgba(0,0,255,.1);">Max-height 100%</div>
+</div>
+{{< /example >}}
+
+## Relative to the viewport
+
+You can also use utilities to set the width and height relative to the viewport.
+
+```html
+<div class="min-vw-100">Min-width 100vw</div>
+<div class="min-vh-100">Min-height 100vh</div>
+<div class="vw-100">Width 100vw</div>
+<div class="vh-100">Height 100vh</div>
+```
+
+## Sass
+
+### Utilities API
+
+Sizing utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-sizing" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/spacing.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/spacing.md
new file mode 100644
index 000000000..3d17e081d
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/spacing.md
@@ -0,0 +1,154 @@
+---
+layout: docs
+title: Spacing
+description: Bootstrap includes a wide range of shorthand responsive margin, padding, and gap utility classes to modify an element's appearance.
+group: utilities
+toc: true
+---
+
+## Margin and padding
+
+Assign responsive-friendly `margin` or `padding` values to an element or a subset of its sides with shorthand classes. Includes support for individual properties, all properties, and vertical and horizontal properties. Classes are built from a default Sass map ranging from `.25rem` to `3rem`.
+
+{{< callout >}}
+**Using the CSS Grid layout module?** Consider using [the gap utility](#gap) instead.
+{{< /callout >}}
+
+### Notation
+
+Spacing utilities that apply to all breakpoints, from `xs` to `xxl`, have no breakpoint abbreviation in them. This is because those classes are applied from `min-width: 0` and up, and thus are not bound by a media query. The remaining breakpoints, however, do include a breakpoint abbreviation.
+
+The classes are named using the format `{property}{sides}-{size}` for `xs` and `{property}{sides}-{breakpoint}-{size}` for `sm`, `md`, `lg`, `xl`, and `xxl`.
+
+Where *property* is one of:
+
+- `m` - for classes that set `margin`
+- `p` - for classes that set `padding`
+
+Where *sides* is one of:
+
+- `t` - for classes that set `margin-top` or `padding-top`
+- `b` - for classes that set `margin-bottom` or `padding-bottom`
+- `s` - (start) for classes that set `margin-left` or `padding-left` in LTR, `margin-right` or `padding-right` in RTL
+- `e` - (end) for classes that set `margin-right` or `padding-right` in LTR, `margin-left` or `padding-left` in RTL
+- `x` - for classes that set both `*-left` and `*-right`
+- `y` - for classes that set both `*-top` and `*-bottom`
+- blank - for classes that set a `margin` or `padding` on all 4 sides of the element
+
+Where *size* is one of:
+
+- `0` - for classes that eliminate the `margin` or `padding` by setting it to `0`
+- `1` - (by default) for classes that set the `margin` or `padding` to `$spacer * .25`
+- `2` - (by default) for classes that set the `margin` or `padding` to `$spacer * .5`
+- `3` - (by default) for classes that set the `margin` or `padding` to `$spacer`
+- `4` - (by default) for classes that set the `margin` or `padding` to `$spacer * 1.5`
+- `5` - (by default) for classes that set the `margin` or `padding` to `$spacer * 3`
+- `auto` - for classes that set the `margin` to auto
+
+(You can add more sizes by adding entries to the `$spacers` Sass map variable.)
+
+### Examples
+
+Here are some representative examples of these classes:
+
+```scss
+.mt-0 {
+ margin-top: 0 !important;
+}
+
+.ms-1 {
+ margin-left: ($spacer * .25) !important;
+}
+
+.px-2 {
+ padding-left: ($spacer * .5) !important;
+ padding-right: ($spacer * .5) !important;
+}
+
+.p-3 {
+ padding: $spacer !important;
+}
+```
+
+### Horizontal centering
+
+Additionally, Bootstrap also includes an `.mx-auto` class for horizontally centering fixed-width block level content—that is, content that has `display: block` and a `width` set—by setting the horizontal margins to `auto`.
+
+<div class="bd-example">
+ <div class="mx-auto" style="width: 200px; background-color: rgba(86,61,124,.15);">
+ Centered element
+ </div>
+</div>
+
+```html
+<div class="mx-auto" style="width: 200px;">
+ Centered element
+</div>
+```
+
+## Negative margin
+
+In CSS, `margin` properties can utilize negative values (`padding` cannot). These negative margins are **disabled by default**, but can be enabled in Sass by setting `$enable-negative-margins: true`.
+
+The syntax is nearly the same as the default, positive margin utilities, but with the addition of `n` before the requested size. Here's an example class that's the opposite of `.mt-1`:
+
+```scss
+.mt-n1 {
+ margin-top: -0.25rem !important;
+}
+```
+
+## Gap
+
+When using `display: grid` or `display: flex`, you can make use of `gap` utilities on the parent element. This can save on having to add margin utilities to individual children of a grid or flex container. Gap utilities are responsive by default, and are generated via our utilities API, based on the `$spacers` Sass map.
+
+{{< example class="bd-example-cssgrid" >}}
+<div class="grid gap-3">
+ <div class="p-2 g-col-6">Grid item 1</div>
+ <div class="p-2 g-col-6">Grid item 2</div>
+ <div class="p-2 g-col-6">Grid item 3</div>
+ <div class="p-2 g-col-6">Grid item 4</div>
+</div>
+{{< /example >}}
+
+Support includes responsive options for all of Bootstrap's grid breakpoints, as well as six sizes from the `$spacers` map (`0`–`5`). There is no `.gap-auto` utility class as it's effectively the same as `.gap-0`.
+
+### row-gap
+
+`row-gap` sets the vertical space between children items in the specified container.
+
+{{< example class="bd-example-cssgrid" >}}
+<div class="grid gap-0 row-gap-3">
+ <div class="p-2 g-col-6">Grid item 1</div>
+ <div class="p-2 g-col-6">Grid item 2</div>
+ <div class="p-2 g-col-6">Grid item 3</div>
+ <div class="p-2 g-col-6">Grid item 4</div>
+</div>
+{{< /example >}}
+
+### column-gap
+
+`column-gap` sets the horizontal space between children items in the specified container.
+
+{{< example class="bd-example-cssgrid" >}}
+<div class="grid gap-0 column-gap-3">
+ <div class="p-2 g-col-6">Grid item 1</div>
+ <div class="p-2 g-col-6">Grid item 2</div>
+ <div class="p-2 g-col-6">Grid item 3</div>
+ <div class="p-2 g-col-6">Grid item 4</div>
+</div>
+{{< /example >}}
+
+## Sass
+
+### Maps
+
+Spacing utilities are declared via Sass map and then generated with our utilities API.
+
+{{< scss-docs name="spacer-variables-maps" file="scss/_variables.scss" >}}
+
+### Utilities API
+
+Spacing utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-spacing" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/text.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/text.md
new file mode 100644
index 000000000..5b3cd028b
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/text.md
@@ -0,0 +1,155 @@
+---
+layout: docs
+title: Text
+description: Documentation and examples for common text utilities to control alignment, wrapping, weight, and more.
+group: utilities
+toc: true
+---
+
+## Text alignment
+
+Easily realign text to components with text alignment classes. For start, end, and center alignment, responsive classes are available that use the same viewport width breakpoints as the grid system.
+
+{{< example >}}
+<p class="text-start">Start aligned text on all viewport sizes.</p>
+<p class="text-center">Center aligned text on all viewport sizes.</p>
+<p class="text-end">End aligned text on all viewport sizes.</p>
+
+<p class="text-sm-start">Start aligned text on viewports sized SM (small) or wider.</p>
+<p class="text-md-start">Start aligned text on viewports sized MD (medium) or wider.</p>
+<p class="text-lg-start">Start aligned text on viewports sized LG (large) or wider.</p>
+<p class="text-xl-start">Start aligned text on viewports sized XL (extra-large) or wider.</p>
+{{< /example >}}
+
+{{< callout info >}}
+Note that we don't provide utility classes for justified text. While, aesthetically, justified text might look more appealing, it does make word-spacing more random and therefore harder to read.
+{{< /callout >}}
+
+## Text wrapping and overflow
+
+Wrap text with a `.text-wrap` class.
+
+{{< example >}}
+<div class="badge bg-primary text-wrap" style="width: 6rem;">
+ This text should wrap.
+</div>
+{{< /example >}}
+
+Prevent text from wrapping with a `.text-nowrap` class.
+
+{{< example >}}
+<div class="text-nowrap bg-body-secondary border" style="width: 8rem;">
+ This text should overflow the parent.
+</div>
+{{< /example >}}
+
+## Word break
+
+Prevent long strings of text from breaking your components' layout by using `.text-break` to set `word-wrap: break-word` and `word-break: break-word`. We use `word-wrap` instead of the more common `overflow-wrap` for wider browser support, and add the deprecated `word-break: break-word` to avoid issues with flex containers.
+
+{{< example >}}
+<p class="text-break">mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm</p>
+{{< /example >}}
+
+{{< callout warning >}}
+Note that [breaking words isn't possible in Arabic](https://rtlstyling.com/posts/rtl-styling#3.-line-break), which is the most used RTL language. Therefore `.text-break` is removed from our RTL compiled CSS.
+{{< /callout >}}
+
+## Text transform
+
+Transform text in components with text capitalization classes.
+
+{{< example >}}
+<p class="text-lowercase">Lowercased text.</p>
+<p class="text-uppercase">Uppercased text.</p>
+<p class="text-capitalize">CapiTaliZed text.</p>
+{{< /example >}}
+
+Note how `.text-capitalize` only changes the first letter of each word, leaving the case of any other letters unaffected.
+
+## Font size
+
+Quickly change the `font-size` of text. While our heading classes (e.g., `.h1`–`.h6`) apply `font-size`, `font-weight`, and `line-height`, these utilities _only_ apply `font-size`. Sizing for these utilities matches HTML's heading elements, so as the number increases, their size decreases.
+
+{{< example >}}
+<p class="fs-1">.fs-1 text</p>
+<p class="fs-2">.fs-2 text</p>
+<p class="fs-3">.fs-3 text</p>
+<p class="fs-4">.fs-4 text</p>
+<p class="fs-5">.fs-5 text</p>
+<p class="fs-6">.fs-6 text</p>
+{{< /example >}}
+
+Customize your available `font-size`s by modifying the `$font-sizes` Sass map.
+
+## Font weight and italics
+
+Quickly change the `font-weight` or `font-style` of text with these utilities. `font-style` utilities are abbreviated as `.fst-*` and `font-weight` utilities are abbreviated as `.fw-*`.
+
+{{< example >}}
+<p class="fw-bold">Bold text.</p>
+<p class="fw-bolder">Bolder weight text (relative to the parent element).</p>
+<p class="fw-semibold">Semibold weight text.</p>
+<p class="fw-normal">Normal weight text.</p>
+<p class="fw-light">Light weight text.</p>
+<p class="fw-lighter">Lighter weight text (relative to the parent element).</p>
+<p class="fst-italic">Italic text.</p>
+<p class="fst-normal">Text with normal font style</p>
+{{< /example >}}
+
+## Line height
+
+Change the line height with `.lh-*` utilities.
+
+{{< example >}}
+<p class="lh-1">This is a long paragraph written to show how the line-height of an element is affected by our utilities. Classes are applied to the element itself or sometimes the parent element. These classes can be customized as needed with our utility API.</p>
+<p class="lh-sm">This is a long paragraph written to show how the line-height of an element is affected by our utilities. Classes are applied to the element itself or sometimes the parent element. These classes can be customized as needed with our utility API.</p>
+<p class="lh-base">This is a long paragraph written to show how the line-height of an element is affected by our utilities. Classes are applied to the element itself or sometimes the parent element. These classes can be customized as needed with our utility API.</p>
+<p class="lh-lg">This is a long paragraph written to show how the line-height of an element is affected by our utilities. Classes are applied to the element itself or sometimes the parent element. These classes can be customized as needed with our utility API.</p>
+{{< /example >}}
+
+## Monospace
+
+Change a selection to our monospace font stack with `.font-monospace`.
+
+{{< example >}}
+<p class="font-monospace">This is in monospace</p>
+{{< /example >}}
+
+## Reset color
+
+Reset a text or link's color with `.text-reset`, so that it inherits the color from its parent.
+
+{{< example >}}
+<p class="text-muted">
+ Muted text with a <a href="#" class="text-reset">reset link</a>.
+</p>
+{{< /example >}}
+
+## Text decoration
+
+Decorate text in components with text decoration classes.
+
+{{< example >}}
+<p class="text-decoration-underline">This text has a line underneath it.</p>
+<p class="text-decoration-line-through">This text has a line going through it.</p>
+<a href="#" class="text-decoration-none">This link has its text decoration removed</a>
+{{< /example >}}
+
+## Sass
+
+### Variables
+
+{{< scss-docs name="font-variables" file="scss/_variables.scss" >}}
+
+### Maps
+
+Font-size utilities are generated from this map, in combination with our utilities API.
+
+{{< scss-docs name="font-sizes" file="scss/_variables.scss" >}}
+
+### Utilities API
+
+Font and text utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}})
+
+{{< scss-docs name="utils-text" file="scss/_utilities.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/vertical-align.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/vertical-align.md
index 9fe0eeb93..9fe0eeb93 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/vertical-align.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/vertical-align.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/visibility.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/visibility.md
index 61eb30241..61eb30241 100644
--- a/vendor/twbs/bootstrap/site/content/docs/5.2/utilities/visibility.md
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/visibility.md
diff --git a/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/z-index.md b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/z-index.md
new file mode 100644
index 000000000..5e4fe05b0
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/content/docs/5.3/utilities/z-index.md
@@ -0,0 +1,44 @@
+---
+layout: docs
+title: Z-index
+description: Use our low-level `z-index` utilities to quickly change the stack level of an element or component.
+group: utilities
+toc: true
+added: "5.3"
+---
+
+## Example
+
+Use `z-index` utilities to stack elements on top of one another. Requires a `position` value other than `static`, which can be set with custom styles or using our [position utilities]({{< docsref "/utilities/position/" >}}).
+
+{{< callout >}}
+We call these "low-level" `z-index` utilities because of their default values of `-1` through `3`, which we use for the layout of overlapping components. High-level `z-index` values are used for overlay components like modals and tooltips.
+{{< /callout >}}
+
+{{< example class="bd-example-zindex-levels position-relative" >}}
+<div class="z-3 position-absolute p-5 rounded-3"></div>
+<div class="z-2 position-absolute p-5 rounded-3"></div>
+<div class="z-1 position-absolute p-5 rounded-3"></div>
+<div class="z-0 position-absolute p-5 rounded-3"></div>
+<div class="z-n1 position-absolute p-5 rounded-3"></div>
+{{< /example >}}
+
+## Overlays
+
+Bootstrap overlay components—dropdown, modal, offcanvas, popover, toast, and tooltip—all have their own `z-index` values to ensure a usable experience with competing "layers" of an interface.
+
+Read about them in the [`z-index` layout page]({{< docsref "/layout/z-index" >}}).
+
+## Component approach
+
+On some components, we use our low-level `z-index` values to manage repeating elements that overlap one another (like buttons in a button group or items in a list group).
+
+Learn about our [`z-index` approach]({{< docsref "/extend/approach#z-index-scales" >}}).
+
+## CSS
+
+### Sass map
+
+Customize this Sass map to change the available values and generated utilities.
+
+{{< scss-docs name="zindex-levels-map" file="scss/_variables.scss" >}}
diff --git a/vendor/twbs/bootstrap/site/content/docs/_index.html b/vendor/twbs/bootstrap/site/content/docs/_index.html
index fe65dc364..b04e391bc 100644
--- a/vendor/twbs/bootstrap/site/content/docs/_index.html
+++ b/vendor/twbs/bootstrap/site/content/docs/_index.html
@@ -1,5 +1,5 @@
---
layout: redirect
sitemap_exclude: true
-redirect: "/docs/5.2/getting-started/introduction/"
+redirect: "/docs/5.3/getting-started/introduction/"
---
diff --git a/vendor/twbs/bootstrap/site/data/core-team.yml b/vendor/twbs/bootstrap/site/data/core-team.yml
index 3552f6f38..fe6f7fbb0 100644
--- a/vendor/twbs/bootstrap/site/data/core-team.yml
+++ b/vendor/twbs/bootstrap/site/data/core-team.yml
@@ -10,17 +10,20 @@
- name: GeoSot
user: geosot
-- name: Rohit Sharma
- user: rohit2sharma95
+- name: Patrick H. Lauke
+ user: patrickhlauke
-- name: alpadev
- user: alpadev
+- name: Julien Déramond
+ user: julien-deramond
- name: Gaël Poupard
user: ffoodd
-- name: Patrick H. Lauke
- user: patrickhlauke
+- name: Rohit Sharma
+ user: rohit2sharma95
+
+- name: alpadev
+ user: alpadev
- name: Martijn Cuppens
user: martijncuppens
diff --git a/vendor/twbs/bootstrap/site/data/docs-versions.yml b/vendor/twbs/bootstrap/site/data/docs-versions.yml
index 1c98de07b..8fdf2b055 100644
--- a/vendor/twbs/bootstrap/site/data/docs-versions.yml
+++ b/vendor/twbs/bootstrap/site/data/docs-versions.yml
@@ -48,8 +48,9 @@
- group: v5.x
baseurl: "https://getbootstrap.com/docs"
- description: "Current major release. Last update was v5.2.2."
+ description: "Current major release. Last update was v5.3.0-alpha1."
versions:
- v: "5.0"
- v: "5.1"
- v: "5.2"
+ - v: "5.3"
diff --git a/vendor/twbs/bootstrap/site/data/sidebar.yml b/vendor/twbs/bootstrap/site/data/sidebar.yml
index 2b7fddfd4..4199fa535 100644
--- a/vendor/twbs/bootstrap/site/data/sidebar.yml
+++ b/vendor/twbs/bootstrap/site/data/sidebar.yml
@@ -26,6 +26,7 @@
- title: Sass
- title: Options
- title: Color
+ - title: Color modes
- title: Components
- title: CSS variables
- title: Optimize
@@ -123,6 +124,7 @@
- title: Flex
- title: Float
- title: Interactions
+ - title: Object fit
- title: Opacity
- title: Overflow
- title: Position
@@ -132,6 +134,7 @@
- title: Text
- title: Vertical align
- title: Visibility
+ - title: Z-index
- title: Extend
icon: tools
diff --git a/vendor/twbs/bootstrap/site/data/theme-colors.yml b/vendor/twbs/bootstrap/site/data/theme-colors.yml
index cca98e782..4c2ef8480 100644
--- a/vendor/twbs/bootstrap/site/data/theme-colors.yml
+++ b/vendor/twbs/bootstrap/site/data/theme-colors.yml
@@ -17,3 +17,4 @@
contrast_color: dark
- name: dark
hex: "#343a40"
+ contrast_color: white
diff --git a/vendor/twbs/bootstrap/site/layouts/_default/baseof.html b/vendor/twbs/bootstrap/site/layouts/_default/baseof.html
index fdf19b31f..0714faf3a 100644
--- a/vendor/twbs/bootstrap/site/layouts/_default/baseof.html
+++ b/vendor/twbs/bootstrap/site/layouts/_default/baseof.html
@@ -1,5 +1,5 @@
<!doctype html>
-<html lang="en">
+<html lang="en" data-bs-theme="auto">
<head>
{{ partial "header" . }}
</head>
diff --git a/vendor/twbs/bootstrap/site/layouts/_default/docs.html b/vendor/twbs/bootstrap/site/layouts/_default/docs.html
index 1a3f9c1a1..2ad46376f 100644
--- a/vendor/twbs/bootstrap/site/layouts/_default/docs.html
+++ b/vendor/twbs/bootstrap/site/layouts/_default/docs.html
@@ -16,9 +16,14 @@
<main class="bd-main order-1">
<div class="bd-intro pt-2 ps-lg-2">
<div class="d-md-flex flex-md-row-reverse align-items-center justify-content-between">
- <a class="btn btn-sm btn-bd-light mb-3 mb-md-0 rounded-2" href="{{ .Site.Params.repo }}/blob/v{{ .Site.Params.current_version }}/site/content/{{ .Page.File.Path | replaceRE `\\` "/" }}" title="View and edit this file on GitHub" target="_blank" rel="noopener">
- View on GitHub
- </a>
+ <div class="mb-3 mb-md-0 d-flex">
+ {{- if .Page.Params.added -}}
+ <small class="d-inline-flex px-2 py-1 fw-semibold text-success bg-success bg-opacity-10 border border-success border-opacity-10 rounded-2 me-2">Added in v{{ .Page.Params.added }}</small>
+ {{- end -}}
+ <a class="btn btn-sm btn-bd-light rounded-2" href="{{ .Site.Params.repo }}/blob/v{{ .Site.Params.current_version }}/site/content/{{ .Page.File.Path | replaceRE `\\` "/" }}" title="View and edit this file on GitHub" target="_blank" rel="noopener">
+ View on GitHub
+ </a>
+ </div>
<h1 class="bd-title mb-0" id="content">{{ .Title | markdownify }}</h1>
</div>
<p class="bd-lead">{{ .Page.Params.Description | markdownify }}</p>
@@ -26,8 +31,8 @@
</div>
{{ if (eq .Page.Params.toc true) }}
- <div class="bd-toc mt-3 mb-5 my-lg-0 ps-xl-3 mb-lg-5 text-muted">
- <button class="btn btn-link link-dark p-md-0 mb-2 mb-md-0 text-decoration-none bd-toc-toggle d-md-none" type="button" data-bs-toggle="collapse" data-bs-target="#tocContents" aria-expanded="false" aria-controls="tocContents">
+ <div class="bd-toc mt-3 mb-5 my-lg-0 ps-xl-3 mb-lg-5 text-body-secondary">
+ <button class="btn btn-link p-md-0 mb-2 mb-md-0 text-decoration-none bd-toc-toggle d-md-none" type="button" data-bs-toggle="collapse" data-bs-target="#tocContents" aria-expanded="false" aria-controls="tocContents">
On this page
<svg class="bi d-md-none ms-2" aria-hidden="true"><use xlink:href="#chevron-expand"></use></svg>
</button>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/callout-danger-async-methods.md b/vendor/twbs/bootstrap/site/layouts/partials/callouts/danger-async-methods.md
index c8afdc2df..c8afdc2df 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/callout-danger-async-methods.md
+++ b/vendor/twbs/bootstrap/site/layouts/partials/callouts/danger-async-methods.md
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/callout-info-mediaqueries-breakpoints.md b/vendor/twbs/bootstrap/site/layouts/partials/callouts/info-mediaqueries-breakpoints.md
index 2eea77138..2eea77138 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/callout-info-mediaqueries-breakpoints.md
+++ b/vendor/twbs/bootstrap/site/layouts/partials/callouts/info-mediaqueries-breakpoints.md
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/callout-info-npm-starter.md b/vendor/twbs/bootstrap/site/layouts/partials/callouts/info-npm-starter.md
index bbd3897b5..bbd3897b5 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/callout-info-npm-starter.md
+++ b/vendor/twbs/bootstrap/site/layouts/partials/callouts/info-npm-starter.md
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/callout-info-prefersreducedmotion.md b/vendor/twbs/bootstrap/site/layouts/partials/callouts/info-prefersreducedmotion.md
index d258fbe48..d258fbe48 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/callout-info-prefersreducedmotion.md
+++ b/vendor/twbs/bootstrap/site/layouts/partials/callouts/info-prefersreducedmotion.md
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/callout-info-sanitizer.md b/vendor/twbs/bootstrap/site/layouts/partials/callouts/info-sanitizer.md
index ee0eda48e..ee0eda48e 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/callout-info-sanitizer.md
+++ b/vendor/twbs/bootstrap/site/layouts/partials/callouts/info-sanitizer.md
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/callout-warning-color-assistive-technologies.md b/vendor/twbs/bootstrap/site/layouts/partials/callouts/warning-color-assistive-technologies.md
index 35683281d..35683281d 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/callout-warning-color-assistive-technologies.md
+++ b/vendor/twbs/bootstrap/site/layouts/partials/callouts/warning-color-assistive-technologies.md
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/callout-warning-data-bs-title-vs-title.md b/vendor/twbs/bootstrap/site/layouts/partials/callouts/warning-data-bs-title-vs-title.md
index e932f22ad..e932f22ad 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/callout-warning-data-bs-title-vs-title.md
+++ b/vendor/twbs/bootstrap/site/layouts/partials/callouts/warning-data-bs-title-vs-title.md
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/callout-warning-input-support.md b/vendor/twbs/bootstrap/site/layouts/partials/callouts/warning-input-support.md
index 7b0c8b412..7b0c8b412 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/callout-warning-input-support.md
+++ b/vendor/twbs/bootstrap/site/layouts/partials/callouts/warning-input-support.md
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/docs-navbar.html b/vendor/twbs/bootstrap/site/layouts/partials/docs-navbar.html
index 68a086e89..4b942a65e 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/docs-navbar.html
+++ b/vendor/twbs/bootstrap/site/layouts/partials/docs-navbar.html
@@ -1,4 +1,4 @@
-<header class="navbar navbar-expand-lg navbar-dark bd-navbar sticky-top">
+<header class="navbar navbar-expand-lg bd-navbar sticky-top">
<nav class="container-xxl bd-gutter flex-wrap flex-lg-nowrap" aria-label="Main navigation">
{{- if eq .Layout "docs" }}
<div class="bd-navbar-toggle">
@@ -72,11 +72,52 @@
<small class="d-lg-none ms-2">Open Collective</small>
</a>
</li>
- <li class="nav-item py-1 col-12 col-lg-auto">
+ <li class="nav-item py-2 py-lg-1 col-12 col-lg-auto">
<div class="vr d-none d-lg-flex h-100 mx-lg-2 text-white"></div>
- <hr class="d-lg-none text-white-50">
+ <hr class="d-lg-none my-2 text-white-50">
</li>
+
{{ partial "docs-versions" . }}
+
+ <li class="nav-item py-2 py-lg-1 col-12 col-lg-auto">
+ <div class="vr d-none d-lg-flex h-100 mx-lg-2 text-white"></div>
+ <hr class="d-lg-none my-2 text-white-50">
+ </li>
+
+ <li class="nav-item dropdown">
+ <button class="btn btn-link nav-link py-2 px-0 px-lg-2 dropdown-toggle d-flex align-items-center"
+ id="bd-theme"
+ type="button"
+ aria-expanded="false"
+ data-bs-toggle="dropdown"
+ data-bs-display="static">
+ <svg class="bi my-1 theme-icon-active"><use href="#circle-half"></use></svg>
+ <span class="d-lg-none ms-2">Toggle theme</span>
+ </button>
+ <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="bd-theme" style="--bs-dropdown-min-width: 8rem;">
+ <li>
+ <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="light">
+ <svg class="bi me-2 opacity-50 theme-icon"><use href="#sun-fill"></use></svg>
+ Light
+ <svg class="bi ms-auto d-none"><use href="#check2"></use></svg>
+ </button>
+ </li>
+ <li>
+ <button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="dark">
+ <svg class="bi me-2 opacity-50 theme-icon"><use href="#moon-stars-fill"></use></svg>
+ Dark
+ <svg class="bi ms-auto d-none"><use href="#check2"></use></svg>
+ </button>
+ </li>
+ <li>
+ <button type="button" class="dropdown-item d-flex align-items-center active" data-bs-theme-value="auto">
+ <svg class="bi me-2 opacity-50 theme-icon"><use href="#circle-half"></use></svg>
+ Auto
+ <svg class="bi ms-auto d-none"><use href="#check2"></use></svg>
+ </button>
+ </li>
+ </ul>
+ </li>
</ul>
</div>
</div>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/docs-versions.html b/vendor/twbs/bootstrap/site/layouts/partials/docs-versions.html
index 9b662e608..d09c6551a 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/docs-versions.html
+++ b/vendor/twbs/bootstrap/site/layouts/partials/docs-versions.html
@@ -17,19 +17,27 @@
<ul class="dropdown-menu dropdown-menu-end">
<li><h6 class="dropdown-header">v5 releases</h6></li>
<li>
- <a class="dropdown-item current" aria-current="true" href="{{ if .IsHome }}/{{ else }}/docs/{{ .Site.Params.docs_version }}/{{ $versions_link }}{{ end }}">
+ <a class="dropdown-item d-flex align-items-center justify-content-between active" aria-current="true" href="{{ if .IsHome }}/{{ else }}/docs/{{ .Site.Params.docs_version }}/{{ $versions_link }}{{ end }}">
Latest ({{ .Site.Params.docs_version }}.x)
+ <svg class="bi"><use xlink:href="#check2"></use></svg>
</a>
</li>
<li>
- {{- if (eq .Page.Params.added "5.2") }}
+ {{- if (eq .Page.Params.added "5.3") }}
+ <div class="dropdown-item disabled">v5.2.3</div>
+ {{- else }}
+ <a class="dropdown-item" href="https://getbootstrap.com/docs/5.2/{{ $versions_link }}">v5.2.3</a>
+ {{- end }}
+ </li>
+ <li>
+ {{- if or (eq .Page.Params.added "5.2") (eq .Page.Params.added "5.3") }}
<div class="dropdown-item disabled">v5.1.3</div>
{{- else }}
<a class="dropdown-item" href="https://getbootstrap.com/docs/5.1/{{ $versions_link }}">v5.1.3</a>
{{- end }}
</li>
<li>
- {{- if or (eq .Page.Params.added "5.1") (eq .Page.Params.added "5.2") }}
+ {{- if or (eq .Page.Params.added "5.1") (eq .Page.Params.added "5.2") (eq .Page.Params.added "5.3") }}
<div class="dropdown-item disabled">v5.0.2</div>
{{- else }}
<a class="dropdown-item" href="https://getbootstrap.com/docs/5.0/{{ $versions_link }}">v5.0.2</a>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/footer.html b/vendor/twbs/bootstrap/site/layouts/partials/footer.html
index 336032ab1..eda117479 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/footer.html
+++ b/vendor/twbs/bootstrap/site/layouts/partials/footer.html
@@ -1,12 +1,12 @@
-<footer class="bd-footer py-4 py-md-5 mt-5 bg-light">
- <div class="container py-4 py-md-5 px-4 px-md-3">
+<footer class="bd-footer py-4 py-md-5 mt-5 bg-body-tertiary">
+ <div class="container py-4 py-md-5 px-4 px-md-3 text-body-secondary">
<div class="row">
<div class="col-lg-3 mb-3">
- <a class="d-inline-flex align-items-center mb-2 link-dark text-decoration-none" href="/" aria-label="Bootstrap">
+ <a class="d-inline-flex align-items-center mb-2 text-body-secondary text-decoration-none" href="/" aria-label="Bootstrap">
{{ partial "icons/bootstrap-white-fill.svg" (dict "class" "d-block me-2" "width" "40" "height" "32") }}
<span class="fs-5">Bootstrap</span>
</a>
- <ul class="list-unstyled small text-muted">
+ <ul class="list-unstyled small">
<li class="mb-2">Designed and built with all the love in the world by the <a href="/docs/{{ .Site.Params.docs_version }}/about/team/">Bootstrap team</a> with the help of <a href="{{ .Site.Params.repo }}/graphs/contributors">our contributors</a>.</li>
<li class="mb-2">Code licensed <a href="{{ .Site.Params.repo }}/blob/main/LICENSE" target="_blank" rel="license noopener">MIT</a>, docs <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank" rel="license noopener">CC BY 3.0</a>.</li>
<li class="mb-2">Currently v{{ .Site.Params.current_version }}.</li>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/header.html b/vendor/twbs/bootstrap/site/layouts/partials/header.html
index ceeb8b546..22528ae47 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/header.html
+++ b/vendor/twbs/bootstrap/site/layouts/partials/header.html
@@ -19,6 +19,9 @@
<meta name="robots" content="{{ . }}">
{{- end }}
+{{- $colorModeJS := printf "/docs/%s/assets/js/color-modes.js" $.Site.Params.docs_version -}}
+<script src="{{ $colorModeJS | relURL }}"></script>
+
{{ partial "stylesheet" . }}
{{ partial "favicons" . }}
{{ partial "social" . }}
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/home/components-utilities.html b/vendor/twbs/bootstrap/site/layouts/partials/home/components-utilities.html
new file mode 100644
index 000000000..6806a24b7
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/layouts/partials/home/components-utilities.html
@@ -0,0 +1,88 @@
+<section class="pb-md-5 mb-5">
+ <div class="col-lg-8 mb-5">
+ <div class="masthead-followup-icon d-inline-block mb-3 me-2" style="--bg-rgb: var(--bs-danger-rgb);">
+ <svg class="bi fs-1"><use xlink:href="#menu-button-wide-fill"></use></svg>
+ </div>
+ <svg class="bi me-2 fs-2 text-muted"><use xlink:href="#plus"></use></svg>
+ <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-info-rgb);">
+ <svg class="bi fs-1"><use xlink:href="#braces-asterisk"></use></svg>
+ </div>
+ <h2 class="display-5 mb-3 fw-semibold lh-sm">Components, meet the Utility&nbsp;API</h2>
+ <p class="lead fw-normal">
+ New in Bootstrap 5, our utilities are now generated by our <a href="/docs/{{ .Site.Params.docs_version }}/utilities/api/">Utility API</a>. We built it as a feature-packed Sass map that can be quickly and easily customized. It's never been easier to add, remove, or modify any utility classes. Make utilities responsive, add pseudo-class variants, and give them custom names.
+ </p>
+ </div>
+ <div class="row gx-md-5">
+ <div class="col-lg-6">
+ <h3 class="fw-semibold">Quickly customize components</h3>
+ <p>Apply any of our included utility classes to our components to customize their appearance, like the navigation example below. There are hundreds of classes available—from <a href="/docs/{{ .Site.Params.docs_version }}/utilities/position/">positioning</a> and <a href="/docs/{{ .Site.Params.docs_version }}/utilities/sizing/">sizing</a> to <a href="/docs/{{ .Site.Params.docs_version }}/utilities/colors/">colors</a> and <a href="/docs/{{ .Site.Params.docs_version }}/utilities/shadows/">effects</a>. Mix them with CSS variable overrides for even more control.</p>
+ <div class="p-4 border rounded-3 mb-4">
+ <ul class="nav nav-pills mb-4" id="pillNav" role="tablist">
+ <li class="nav-item" role="presentation">
+ <button class="nav-link active" id="home-tab" data-bs-toggle="tab" type="button" role="tab" aria-selected="true">Home</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="profile-tab" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Profile</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link" id="contact-tab" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Contact</button>
+ </li>
+ </ul>
+ <ul class="nav nav-pills nav-fill gap-2 p-1 small bg-primary rounded-5 shadow-sm" id="pillNav2" role="tablist" style="--bs-nav-link-color: rgba(255, 255, 255, .75); --bs-nav-link-hover-color: #fff; --bs-nav-pills-link-active-color: var(--bs-primary); --bs-nav-pills-link-active-bg: var(--bs-white);">
+ <li class="nav-item" role="presentation">
+ <button class="nav-link active rounded-5" id="home-tab2" data-bs-toggle="tab" type="button" role="tab" aria-selected="true">Home</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link rounded-5" id="profile-tab2" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Profile</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link rounded-5" id="contact-tab2" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Contact</button>
+ </li>
+ </ul>
+ </div>
+{{ highlight (printf `<ul class="nav nav-pills nav-fill gap-2 p-1 small bg-primary rounded-5 shadow-sm" id="pillNav2" role="tablist" style="--bs-nav-link-color: var(--bs-white); --bs-nav-pills-link-active-color: var(--bs-primary); --bs-nav-pills-link-active-bg: var(--bs-white);">
+ <li class="nav-item" role="presentation">
+ <button class="nav-link active rounded-5" id="home-tab2" data-bs-toggle="tab" type="button" role="tab" aria-selected="true">Home</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link rounded-5" id="profile-tab2" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Profile</button>
+ </li>
+ <li class="nav-item" role="presentation">
+ <button class="nav-link rounded-5" id="contact-tab2" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Contact</button>
+ </li>
+</ul>
+`) "html" "" }}
+ <p class="d-flex justify-content-start mb-md-0">
+ <a href="/docs/{{ .Site.Params.docs_version }}/examples#snippets" class="icon-link fw-semibold">
+ Explore customized components
+ <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
+ </a>
+ </p>
+ </div>
+ <div class="col-lg-6">
+ <h3 class="fw-semibold">Create and extend utilities</h3>
+ <p>Use Bootstrap's utility API to modify any of our included utilities or create your own custom utilities for any project. Import Bootstrap first, then use Sass map functions to modify, add, or remove utilities.</p>
+{{ highlight (printf `@import "bootstrap/scss/bootstrap";
+
+$utilities: map-merge(
+ $utilities,
+ (
+ "cursor": (
+ property: cursor,
+ class: cursor,
+ responsive: true,
+ values: auto pointer grab,
+ )
+ )
+);
+`) "scss" "" }}
+
+ <p class="d-flex justify-content-start mb-md-0">
+ <a href="/docs/{{ .Site.Params.docs_version }}/utilities/api/" class="icon-link fw-semibold mb-3">
+ Explore the utility API
+ <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
+ </a>
+ </p>
+ </div>
+ </div>
+</section>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/home/css-variables.html b/vendor/twbs/bootstrap/site/layouts/partials/home/css-variables.html
new file mode 100644
index 000000000..300694749
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/layouts/partials/home/css-variables.html
@@ -0,0 +1,48 @@
+<section class="row g-md-5 pb-md-5 mb-5 align-items-center">
+ <div class="col-lg-8 mb-5">
+ <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-pink-rgb);">
+ <svg class="bi fs-1"><use xlink:href="#braces"></use></svg>
+ </div>
+ <h2 class="display-5 mb-3 fw-semibold lh-sm">Build and extend in real-time with CSS&nbsp;variables</h2>
+ <p class="lead fw-normal">
+ Bootstrap 5 is evolving with each release to better utilize CSS variables for global theme styles, individual components, and even utilities. We provide dozens of variables for colors, font styles, and more at a <code>:root</code> level for use anywhere. On components and utilities, CSS variables are scoped to the relevant class and can easily be modified.
+ </p>
+ <p class="d-flex align-items-start flex-column lead fw-normal mb-0">
+ <a href="/docs/{{ .Site.Params.docs_version }}/customize/css-variables/" class="icon-link fw-semibold mb-3">
+ Learn more about CSS variables
+ <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
+ </a>
+ </p>
+ </div>
+ <div class="row gx-md-5">
+ <div class="col-lg-6 mb-3">
+ <h3 class="fw-semibold">Using CSS variables</h3>
+ <p>Use any of our <a href="/docs/{{ .Site.Params.docs_version }}/customize/css-variables/#root-variables">global <code>:root</code> variables</a> to write new styles. CSS variables use the <code>var(--bs-variableName)</code> syntax and can be inherited by children elements.</p>
+ {{ highlight (printf `.component {
+ color: var(--bs-gray-800);
+ background-color: var(--bs-gray-100);
+ border: 1px solid var(--bs-gray-200);
+ border-radius: .25rem;
+}
+
+.component-header {
+ color: var(--bs-purple);
+}`) "scss" "" }}
+ </div>
+ <div class="col-lg-6 mb-3">
+ <h3 class="fw-semibold">Customizing via CSS variables</h3>
+ <p>Override global, component, or utility class variables to customize Bootstrap just how you like. No need to redeclare each rule, just a new variable value.</p>
+ {{ highlight (printf `body {
+ --bs-body-font-family: var(--bs-font-monospace);
+ --bs-body-line-height: 1.4;
+ --bs-body-bg: var(--bs-gray-100);
+}
+
+.table {
+ --bs-table-color: var(--bs-gray-600);
+ --bs-table-bg: var(--bs-gray-100);
+ --bs-table-border-color: transparent;
+}`) "scss" "" }}
+ </div>
+ </div>
+</section>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/home/customize.html b/vendor/twbs/bootstrap/site/layouts/partials/home/customize.html
new file mode 100644
index 000000000..365b524c4
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/layouts/partials/home/customize.html
@@ -0,0 +1,58 @@
+<section class="col-lg-7 mb-5">
+ <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-primary-rgb);">
+ <svg class="bi fs-1"><use xlink:href="#palette2"></use></svg>
+ </div>
+ <h2 class="display-5 mb-3 fw-semibold lh-sm">Customize everything with&nbsp;Sass</h2>
+ <p class="lead fw-normal">
+ Bootstrap utilizes Sass for a modular and customizable architecture. Import only the components you need, enable global options like gradients and shadows, and write your own CSS with our variables, maps, functions, and mixins.
+ </p>
+ <p class="d-flex justify-content-start lead fw-normal">
+ <a href="/docs/{{ .Site.Params.docs_version }}/customize/overview/" class="icon-link fw-semibold">
+ Learn more about customizing
+ <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
+ </a>
+ </p>
+</section>
+
+<section class="row g-md-5 mb-5 pb-md-5">
+ <div class="col-lg-6">
+ <h3>Include all of Bootstrap’s Sass</h3>
+ <p>Import one stylesheet and you're off to the races with every feature of our CSS.</p>
+ {{ highlight (printf `// Variable overrides first
+$primary: #900;
+$enable-shadows: true;
+$prefix: "mo-";
+
+// Then import Bootstrap
+@import "../node_modules/bootstrap/scss/bootstrap";
+`) "scss" "" }}
+ <p>Learn more about our <a href="/docs/{{ .Site.Params.docs_version }}/customize/options/">global Sass options</a>.</p>
+ </div>
+ <div class="col-lg-6">
+ <h3>Include what you need</h3>
+ <p>The easiest way to customize Bootstrap—include only the CSS you need.</p>
+{{ highlight (printf `// Functions first
+@import "../node_modules/bootstrap/scss/functions";
+
+// Variable overrides second
+$primary: #900;
+$enable-shadows: true;
+$prefix: "mo-";
+
+// Required Bootstrap imports
+@import "../node_modules/bootstrap/scss/variables";
+@import "../node_modules/bootstrap/scss/maps";
+@import "../node_modules/bootstrap/scss/mixins";
+@import "../node_modules/bootstrap/scss/root";
+
+// Optional components
+@import "../node_modules/bootstrap/scss/utilities";
+@import "../node_modules/bootstrap/scss/reboot";
+@import "../node_modules/bootstrap/scss/containers";
+@import "../node_modules/bootstrap/scss/grid";
+@import "../node_modules/bootstrap/scss/helpers";
+@import "../node_modules/bootstrap/scss/utilities/api";
+`) "scss" "" }}
+ <p>Learn more about <a href="/docs/{{ .Site.Params.docs_version }}/customize/sass/">using Bootstrap with Sass</a>.</p>
+ </div>
+</section>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/home/get-started.html b/vendor/twbs/bootstrap/site/layouts/partials/home/get-started.html
new file mode 100644
index 000000000..2c3270450
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/layouts/partials/home/get-started.html
@@ -0,0 +1,58 @@
+<div class="col-lg-7 mx-auto pb-3 mb-3 mb-md-5 text-md-center">
+ <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-violet-rgb);">
+ <svg class="bi fs-1"><use xlink:href="#code"></use></svg>
+ </div>
+ <h2 class="display-5 mb-3 fw-semibold lh-sm">Get started any way you&nbsp;want</h2>
+ <p class="lead fw-normal">
+ Jump right into building with Bootstrap—use the CDN, install it via package manager, or download the source code.
+ </p>
+ <p class="d-flex justify-content-md-start justify-content-md-center lead fw-normal">
+ <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/download/" class="icon-link fw-semibold justify-content-center ps-md-4">
+ Read installation docs
+ <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
+ </a>
+ </p>
+</div>
+
+<section class="row g-3 g-md-5 mb-5 pb-5 justify-content-center">
+ <div class="col-lg-6 py-lg-4 pe-lg-5">
+ <svg class="bi mb-2 fs-2 text-muted"><use xlink:href="#box-seam"></use></svg>
+ <h3 class="fw-semibold">Install via package manager</h3>
+ <p class="pe-lg-5">
+ Install Bootstrap’s source Sass and JavaScript files via npm, RubyGems, Composer, or Meteor. Package managed installs don’t include documentation or our full build scripts. You can also <a href="https://github.com/twbs/bootstrap-npm-starter">use our npm template repo</a> to quickly generate a Bootstrap project via npm.
+ </p>
+ {{ highlight (printf ("npm install bootstrap@%s") .Site.Params.current_version) "sh" "" }}
+ {{ highlight (printf ("gem install bootstrap -v %s") .Site.Params.current_ruby_version) "sh" "" }}
+ <p>
+ <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/download/">Read our installation docs</a> for more info and additional package managers.
+ </p>
+ </div>
+ <div class="col-lg-6 py-lg-4 ps-lg-5 border-lg-start">
+ <svg class="bi mb-2 fs-2 text-muted"><use xlink:href="#globe2"></use></svg>
+ <h3 class="fw-semibold">Include via CDN</h3>
+ <p class="pe-lg-5">
+ When you only need to include Bootstrap’s compiled CSS or JS, you can use <a href="https://www.jsdelivr.com/package/npm/bootstrap">jsDelivr</a>. See it in action with our simple <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#quick-start">quick start</a>, or <a href="/docs/{{ .Site.Params.docs_version }}/examples/">browse the examples</a> to jumpstart your next project. You can also choose to include Popper and our JS <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#separate">separately</a>.
+ </p>
+ {{ highlight (printf (`<link href="%s" rel="stylesheet" integrity=%q crossorigin="anonymous">`) .Site.Params.cdn.css (.Site.Params.cdn.css_hash | safeHTMLAttr)) "html" "" }}
+ {{ highlight (printf (`<script src="%s" integrity=%q crossorigin="anonymous"></script>`) .Site.Params.cdn.js_bundle (.Site.Params.cdn.js_bundle_hash | safeHTMLAttr)) "html" "" }}
+ </div>
+
+ <div class="col-md-8 mx-auto text-center">
+ <h4 class="fw-semibold">Read our getting started guides</h4>
+ <p>Get a jump on including Bootstrap's source files in a new project with our official guides.</p>
+ <div class="d-flex flex-wrap align-items-center justify-content-center gap-4 mt-4">
+ <a class="d-flex flex-column align-items-center text-decoration-none animate-img" href="/docs/{{ .Site.Params.docs_version }}/getting-started/webpack">
+ <img class="d-block mb-2" src="/docs/{{ .Site.Params.docs_version }}/assets/img/webpack.svg" alt="" width="72" height="72" loading="lazy">
+ <span class="text-muted">Webpack</span>
+ </a>
+ <a class="d-flex flex-column align-items-center text-decoration-none animate-img" href="/docs/{{ .Site.Params.docs_version }}/getting-started/parcel">
+ <img class="d-block mb-2" src="/docs/{{ .Site.Params.docs_version }}/assets/img/parcel.png" alt="" width="72" height="72" loading="lazy">
+ <span class="text-muted">Parcel</span>
+ </a>
+ <a class="d-flex flex-column align-items-center text-decoration-none animate-img" href="/docs/{{ .Site.Params.docs_version }}/getting-started/vite">
+ <img class="d-block mb-2" src="/docs/{{ .Site.Params.docs_version }}/assets/img/vite.svg" alt="" width="72" height="72" loading="lazy">
+ <span class="text-muted">Vite</span>
+ </a>
+ </div>
+ </div>
+</section>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/home/icons.html b/vendor/twbs/bootstrap/site/layouts/partials/home/icons.html
new file mode 100644
index 000000000..c6219b072
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/layouts/partials/home/icons.html
@@ -0,0 +1,23 @@
+<section class="row g-3 g-md-5 pb-md-5 mb-5 align-items-center">
+ <div class="col-lg-6">
+ <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-teal-rgb);">
+ {{ partial "icons/circle-square.svg" (dict "width" "32" "height" "32") }}
+ </div>
+ <h2 class="display-5 mb-3 fw-semibold lh-sm">Personalize it with Bootstrap&nbsp;Icons</h2>
+ <p class="lead fw-normal">
+ <a href="{{ .Site.Params.icons }}">Bootstrap Icons</a> is an open source SVG icon library featuring over 1,800 glyphs, with more added every release. They're designed to work in any project, whether you use Bootstrap itself or not. Use them as SVGs or icon fonts—both options give you vector scaling and easy customization via CSS.
+ </p>
+ <p class="d-flex justify-content-start lead fw-normal mb-md-0">
+ <a href="{{ .Site.Params.icons }}" class="icon-link fw-semibold">
+ Get Bootstrap Icons
+ <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
+ </a>
+ </p>
+ </div>
+ <div class="col-lg-6">
+ <img class="img-fluid mt-3 mx-auto" srcset="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-icons.png,
+ /docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-icons@2x.png 2x"
+ src="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-icons.png"
+ alt="Bootstrap Icons" width="700" height="425" loading="lazy">
+ </div>
+</section>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/home/masthead-followup.html b/vendor/twbs/bootstrap/site/layouts/partials/home/masthead-followup.html
deleted file mode 100644
index 58c9fb65f..000000000
--- a/vendor/twbs/bootstrap/site/layouts/partials/home/masthead-followup.html
+++ /dev/null
@@ -1,356 +0,0 @@
-<div class="container-xxl bd-gutter masthead-followup">
- <div class="col-lg-7 mx-auto pb-3 mb-3 mb-md-5 text-md-center">
- <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-violet-rgb);">
- <svg class="bi fs-1"><use xlink:href="#code"></use></svg>
- </div>
- <h2 class="display-5 mb-3 fw-semibold lh-sm">Get started any way you&nbsp;want</h2>
- <p class="lead fw-normal">
- Jump right into building with Bootstrap—use the CDN, install it via package manager, or download the source code.
- </p>
- <p class="d-flex justify-content-md-start justify-content-md-center lead fw-normal">
- <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/download/" class="icon-link fw-semibold justify-content-center ps-md-4">
- Read installation docs
- <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
- </a>
- </p>
- </div>
-
- <section class="row g-3 g-md-5 mb-5 pb-5 justify-content-center">
- <div class="col-lg-6 py-lg-4 pe-lg-5">
- <svg class="bi mb-2 fs-2 text-muted"><use xlink:href="#box-seam"></use></svg>
- <h3 class="fw-semibold">Install via package manager</h3>
- <p class="pe-lg-5">
- Install Bootstrap’s source Sass and JavaScript files via npm, RubyGems, Composer, or Meteor. Package managed installs don’t include documentation or our full build scripts. You can also <a href="https://github.com/twbs/bootstrap-npm-starter">use our npm template repo</a> to quickly generate a Bootstrap project via npm.
- </p>
- {{ highlight (printf ("npm install bootstrap@%s") .Site.Params.current_version) "sh" "" }}
- {{ highlight (printf ("gem install bootstrap -v %s") .Site.Params.current_ruby_version) "sh" "" }}
- <p>
- <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/download/">Read our installation docs</a> for more info and additional package managers.
- </p>
- </div>
- <div class="col-lg-6 py-lg-4 ps-lg-5 border-lg-start">
- <svg class="bi mb-2 fs-2 text-muted"><use xlink:href="#globe2"></use></svg>
- <h3 class="fw-semibold">Include via CDN</h3>
- <p class="pe-lg-5">
- When you only need to include Bootstrap’s compiled CSS or JS, you can use <a href="https://www.jsdelivr.com/package/npm/bootstrap">jsDelivr</a>. See it in action with our simple <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#quick-start">quick start</a>, or <a href="/docs/{{ .Site.Params.docs_version }}/examples/">browse the examples</a> to jumpstart your next project. You can also choose to include Popper and our JS <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#separate">separately</a>.
- </p>
- {{ highlight (printf (`<!-- CSS only -->
-<link href="%s" rel="stylesheet" integrity=%q crossorigin="anonymous">
-`) .Site.Params.cdn.css (.Site.Params.cdn.css_hash | safeHTMLAttr)) "html" "" }}
- {{ highlight (printf (`<!-- JavaScript Bundle with Popper -->
-<script src="%s" integrity=%q crossorigin="anonymous"></script>
-`) .Site.Params.cdn.js_bundle (.Site.Params.cdn.js_bundle_hash | safeHTMLAttr)) "html" "" }}
- </div>
-
- <div class="col-md-8 mx-auto text-center">
- <h4 class="fw-semibold">Read our getting started guides</h4>
- <p>Get a jump on including Bootstrap's source files in a new project with our official guides.</p>
- <div class="d-flex flex-wrap align-items-center justify-content-center gap-4 mt-4">
- <a class="d-flex flex-column align-items-center text-decoration-none" href="/docs/{{ .Site.Params.docs_version }}/getting-started/webpack">
- <img class="d-block mb-2" src="/docs/{{ .Site.Params.docs_version }}/assets/img/webpack.svg" alt="" width="72" height="72" loading="lazy">
- <span class="text-muted">Webpack</span>
- </a>
- <a class="d-flex flex-column align-items-center text-decoration-none" href="/docs/{{ .Site.Params.docs_version }}/getting-started/parcel">
- <img class="d-block mb-2" src="/docs/{{ .Site.Params.docs_version }}/assets/img/parcel.png" alt="" width="72" height="72" loading="lazy">
- <span class="text-muted">Parcel</span>
- </a>
- <a class="d-flex flex-column align-items-center text-decoration-none" href="/docs/{{ .Site.Params.docs_version }}/getting-started/vite">
- <img class="d-block mb-2" src="/docs/{{ .Site.Params.docs_version }}/assets/img/vite.svg" alt="" width="72" height="72" loading="lazy">
- <span class="text-muted">Vite</span>
- </a>
- </div>
- </div>
- </section>
-
- <section class="col-lg-7 mb-5">
- <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-primary-rgb);">
- <svg class="bi fs-1"><use xlink:href="#palette2"></use></svg>
- </div>
- <h2 class="display-5 mb-3 fw-semibold lh-sm">Customize everything with&nbsp;Sass</h2>
- <p class="lead fw-normal">
- Bootstrap utilizes Sass for a modular and customizable architecture. Import only the components you need, enable global options like gradients and shadows, and write your own CSS with our variables, maps, functions, and mixins.
- </p>
- <p class="d-flex justify-content-start lead fw-normal">
- <a href="/docs/{{ .Site.Params.docs_version }}/customize/overview/" class="icon-link fw-semibold">
- Learn more about customizing
- <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
- </a>
- </p>
- </section>
-
- <section class="row g-md-5 mb-5 pb-md-5">
- <div class="col-lg-6">
- <h3>Include all of Bootstrap’s Sass</h3>
- <p>Import one stylesheet and you're off to the races with every feature of our CSS.</p>
- {{ highlight (printf `// Variable overrides first
-$primary: #900;
-$enable-shadows: true;
-$prefix: "mo-";
-
-// Then import Bootstrap
-@import "../node_modules/bootstrap/scss/bootstrap";
-`) "scss" "" }}
- <p>Learn more about our <a href="/docs/{{ .Site.Params.docs_version }}/customize/options/">global Sass options</a>.</p>
- </div>
- <div class="col-lg-6">
- <h3>Include what you need</h3>
- <p>The easiest way to customize Bootstrap—include only the CSS you need.</p>
-{{ highlight (printf `// Functions first
-@import "../node_modules/bootstrap/scss/functions";
-
-// Variable overrides second
-$primary: #900;
-$enable-shadows: true;
-$prefix: "mo-";
-
-// Required Bootstrap imports
-@import "../node_modules/bootstrap/scss/variables";
-@import "../node_modules/bootstrap/scss/maps";
-@import "../node_modules/bootstrap/scss/mixins";
-@import "../node_modules/bootstrap/scss/root";
-
-// Optional components
-@import "../node_modules/bootstrap/scss/utilities";
-@import "../node_modules/bootstrap/scss/reboot";
-@import "../node_modules/bootstrap/scss/containers";
-@import "../node_modules/bootstrap/scss/grid";
-@import "../node_modules/bootstrap/scss/helpers";
-@import "../node_modules/bootstrap/scss/utilities/api";
-`) "scss" "" }}
- <p>Learn more about <a href="/docs/{{ .Site.Params.docs_version }}/customize/sass/">using Bootstrap with Sass</a>.</p>
- </div>
- </section>
-
- <section class="row g-md-5 pb-md-5 mb-5 align-items-center">
- <div class="col-lg-8 mb-5">
- <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-pink-rgb);">
- <svg class="bi fs-1"><use xlink:href="#braces"></use></svg>
- </div>
- <h2 class="display-5 mb-3 fw-semibold lh-sm">Build and extend in real-time with CSS&nbsp;variables</h2>
- <p class="lead fw-normal">
- Bootstrap 5 is evolving with each release to better utilize CSS variables for global theme styles, individual components, and even utilities. We provide dozens of variables for colors, font styles, and more at a <code>:root</code> level for use anywhere. On components and utilities, CSS variables are scoped to the relevant class and can easily be modified.
- </p>
- <p class="d-flex align-items-start flex-column lead fw-normal mb-0">
- <a href="/docs/{{ .Site.Params.docs_version }}/customize/css-variables/" class="icon-link fw-semibold mb-3">
- Learn more about CSS variables
- <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
- </a>
- </p>
- </div>
- <div class="row gx-md-5">
- <div class="col-lg-6 mb-3">
- <h3 class="fw-semibold">Using CSS variables</h3>
- <p>Use any of our <a href="/docs/{{ .Site.Params.docs_version }}/customize/css-variables/#root-variables">global <code>:root</code> variables</a> to write new styles. CSS variables use the <code>var(--bs-variableName)</code> syntax and can be inherited by children elements.</p>
- {{ highlight (printf `.component {
- color: var(--bs-gray-800);
- background-color: var(--bs-gray-100);
- border: 1px solid var(--bs-gray-200);
- border-radius: .25rem;
-}
-
-.component-header {
- color: var(--bs-purple);
-}`) "scss" "" }}
- </div>
- <div class="col-lg-6 mb-3">
- <h3 class="fw-semibold">Customizing via CSS variables</h3>
- <p>Override global, component, or utility class variables to customize Bootstrap just how you like. No need to redeclare each rule, just a new variable value.</p>
- {{ highlight (printf `body {
- --bs-body-font-family: var(--bs-font-monospace);
- --bs-body-line-height: 1.4;
- --bs-body-bg: var(--bs-gray-100);
-}
-
-.table {
- --bs-table-color: var(--bs-gray-600);
- --bs-table-bg: var(--bs-gray-100);
- --bs-table-border-color: transparent;
-}`) "scss" "" }}
- </div>
- </div>
- </section>
-
- <section class="row g-md-5 pb-md-5 mb-5 align-items-center">
- <div class="col-lg-6 mb-5 mb-md-0">
- <div class="masthead-followup-icon d-inline-block mb-3 me-2" style="--bg-rgb: var(--bs-danger-rgb);">
- <svg class="bi fs-1"><use xlink:href="#menu-button-wide-fill"></use></svg>
- </div>
- <svg class="bi me-2 fs-2 text-muted"><use xlink:href="#plus"></use></svg>
- <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-info-rgb);">
- <svg class="bi fs-1"><use xlink:href="#braces-asterisk"></use></svg>
- </div>
- <h2 class="display-5 mb-3 fw-semibold lh-sm">Components, meet the Utility&nbsp;API</h2>
- <p class="lead fw-normal">
- New in Bootstrap 5, our utilities are now generated by our <a href="/docs/{{ .Site.Params.docs_version }}/utilities/api/">Utility API</a>. We built it as a feature-packed Sass map that can be quickly and easily customized. It's never been easier to add, remove, or modify any utility classes. Make utilities responsive, add pseudo-class variants, and give them custom names.
- </p>
- <p class="d-flex align-items-start flex-column lead fw-normal mb-0">
- <a href="/docs/{{ .Site.Params.docs_version }}/utilities/api/" class="icon-link fw-semibold mb-3">
- Learn more about utilities
- <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
- </a>
- <a href="/docs/{{ .Site.Params.docs_version }}/examples#snippets" class="icon-link fw-semibold">
- Explore customized components
- <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
- </a>
- </p>
- </div>
- <div class="col-lg-6">
- <div class="p-4 border rounded-3 mb-4">
- <h6>Quickly customize components</h6>
- <hr class="mb-4">
- <ul class="nav nav-pills mb-4" id="pillNav" role="tablist">
- <li class="nav-item" role="presentation">
- <button class="nav-link active" id="home-tab" data-bs-toggle="tab" type="button" role="tab" aria-selected="true">Home</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="profile-tab" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Profile</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link" id="contact-tab" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Contact</button>
- </li>
- </ul>
- <ul class="nav nav-pills nav-fill gap-2 p-1 small bg-white border rounded-5 shadow-sm" id="pillNav2" role="tablist">
- <li class="nav-item" role="presentation">
- <button class="nav-link active rounded-5" id="home-tab2" data-bs-toggle="tab" type="button" role="tab" aria-selected="true">Home</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link rounded-5" id="profile-tab2" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Profile</button>
- </li>
- <li class="nav-item" role="presentation">
- <button class="nav-link rounded-5" id="contact-tab2" data-bs-toggle="tab" type="button" role="tab" aria-selected="false">Contact</button>
- </li>
- </ul>
- </div>
- {{ highlight (printf `// Create and extend utilities with the Utility API
-
-@import "bootstrap/scss/bootstrap";
-
-$utilities: map-merge(
- $utilities,
- (
- "cursor": (
- property: cursor,
- class: cursor,
- responsive: true,
- values: auto pointer grab,
- )
- )
-);
-`) "scss" "" }}
- </div>
- </section>
-
- <section class="pb-md-5 mb-5">
- <div class="col-lg-8 mb-5">
- <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-warning-rgb);">
- <svg class="bi fs-1"><use xlink:href="#plugin"></use></svg>
- </div>
- <h2 class="display-5 mb-3 fw-semibold lh-sm">Powerful JavaScript plugins without&nbsp;jQuery</h2>
- <p class="lead fw-normal">
- Easily add toggleable hidden elements, modals and offcanvas menus, popovers and tooltips, and so much more—all without jQuery. JavaScript in Bootstrap is HTML-first, which means adding plugins is as easy as adding <code>data</code> attributes. Need more control? Include individual plugins programmatically.
- </p>
- <p class="d-flex justify-content-start lead fw-normal mb-md-0">
- <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/" class="icon-link fw-semibold">
- Learn more about Bootstrap JavaScript
- <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
- </a>
- </p>
- </div>
- <div class="row gx-md-5">
- <div class="col-lg-6 mb-3">
- <h3 class="fw-semibold">Data attribute API</h3>
- <p>Why write more JavaScript when you can write HTML? Nearly all of Bootstrap's JavaScript plugins feature a first-class data API, allowing you to use JavaScript just by adding <code>data</code> attributes.</p>
- <div class="p-4 mb-3 border rounded-3">
- <div class="dropdown">
- <button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Dropdown item</a></li>
- <li><a class="dropdown-item" href="#">Dropdown item</a></li>
- <li><a class="dropdown-item" href="#">Dropdown item</a></li>
- </ul>
- </div>
- </div>
-
- {{ highlight (printf `<div class="dropdown">
- <button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
- Dropdown
- </button>
- <ul class="dropdown-menu">
- <li><a class="dropdown-item" href="#">Dropdown item</a></li>
- <li><a class="dropdown-item" href="#">Dropdown item</a></li>
- <li><a class="dropdown-item" href="#">Dropdown item</a></li>
- </ul>
-</div>
-`) "html" "" }}
- <p>Learn more about <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/#using-bootstrap-as-a-module">our JavaScript as modules</a> and <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/#programmatic-api">using the programmatic API</a>.</p>
- </div>
- <div class="col-lg-6 mb-3">
- <h3 class="fw-semibold">Comprehensive set of plugins</h3>
- <p>Bootstrap features a dozen plugins that you can drop into any project. Drop them in all at once, or choose just the ones you need.</p>
- <hr class="my-4">
- <div class="row g-3">
- {{- range $plugin := .Site.Data.plugins -}}
- {{- $href := printf "/docs/%s/%s" $.Site.Params.docs_version $plugin.link }}
- <div class="col-sm-6 mb-2">
- <a class="d-block pe-lg-4 text-decoration-none lh-sm" href="{{ $href }}">
- <h4 class="mb-0 fs-5 fw-semibold">{{ $plugin.name }}</h4>
- <small class="text-muted">{{ $plugin.description }}</small>
- </a>
- </div>
- {{- end }}
- </div>
- </div>
- </div>
-
- </section>
-
- <section class="row g-3 g-md-5 pb-md-5 mb-5 align-items-center">
- <div class="col-lg-6">
- <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-teal-rgb);">
- {{ partial "icons/circle-square.svg" (dict "width" "32" "height" "32") }}
- </div>
- <h2 class="display-5 mb-3 fw-semibold lh-sm">Personalize it with Bootstrap&nbsp;Icons</h2>
- <p class="lead fw-normal">
- <a href="{{ .Site.Params.icons }}">Bootstrap Icons</a> is an open source SVG icon library featuring over 1,500 glyphs, with more added every release. They're designed to work in any project, whether you use Bootstrap itself or not. Use them as SVGs or icon fonts—both options give you vector scaling and easy customization via CSS.
- </p>
- <p class="d-flex justify-content-start lead fw-normal mb-md-0">
- <a href="{{ .Site.Params.icons }}" class="icon-link fw-semibold">
- Get Bootstrap Icons
- <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
- </a>
- </p>
- </div>
- <div class="col-lg-6">
- <img class="img-fluid mt-3 mx-auto" srcset="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-icons.png,
- /docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-icons@2x.png 2x"
- src="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-icons.png"
- alt="Bootstrap Icons" width="700" height="425" loading="lazy">
- </div>
- </section>
-
- <section class="row g-3 g-md-5 pb-md-5 mb-5 align-items-center">
- <div class="col-lg-6">
- <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-violet-rgb);">
- {{ partial "icons/droplet-fill.svg" (dict "width" "32" "height" "32") }}
- </div>
- <h2 class="display-5 mb-3 fw-semibold lh-sm">Make it yours with official Bootstrap Themes</h2>
- <p class="lead fw-normal">
- Take Bootstrap to the next level with premium themes from the <a href="{{ .Site.Params.themes }}">official Bootstrap Themes marketplace</a>. Themes are built on Bootstrap as their own extended frameworks, rich with new components and plugins, documentation, and powerful build tools.
- </p>
- <p class="d-flex justify-content-start lead fw-normal mb-md-0">
- <a href="{{ .Site.Params.themes }}" class="icon-link fw-semibold">
- Browse Bootstrap Themes
- <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
- </a>
- </p>
- </div>
- <div class="col-lg-6">
- <img class="img-fluid mt-3 mx-auto" srcset="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes.png,
- /docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes@2x.png 2x"
- src="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes.png"
- alt="Bootstrap Themes" width="700" height="500" loading="lazy">
- </div>
- </section>
-</div>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/home/masthead.html b/vendor/twbs/bootstrap/site/layouts/partials/home/masthead.html
index ed43f5cda..4ad471e1e 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/home/masthead.html
+++ b/vendor/twbs/bootstrap/site/layouts/partials/home/masthead.html
@@ -1,12 +1,12 @@
<div class="bd-masthead mb-3" id="content">
<div class="container-xxl bd-gutter">
<div class="col-md-8 mx-auto text-center">
- <a class="d-flex flex-column flex-lg-row justify-content-center align-items-center mb-4 text-dark lh-sm text-decoration-none" href="https://blog.getbootstrap.com/2022/07/19/bootstrap-5-2-0/">
- <strong class="d-sm-inline-block p-2 me-2 mb-2 mb-lg-0 rounded-3 masthead-notice">New in v5.2</strong>
- <span class="text-muted">CSS variables, responsive offcanvas, new utilities, and more!</span>
+ <a class="d-flex flex-column flex-lg-row justify-content-center align-items-center mb-4 text-dark lh-sm text-decoration-none" href="https://blog.getbootstrap.com/">
+ <strong class="d-sm-inline-block p-2 me-2 mb-2 mb-lg-0 rounded-3 masthead-notice">New in v5.3</strong>
+ <span class="text-muted">Color mode support, expanded color palette, and more!</span>
</a>
<img src="/docs/{{ .Site.Params.docs_version }}/assets/brand/bootstrap-logo-shadow.png" width="200" height="165" alt="Bootstrap" class="d-block mx-auto mb-3">
- <h1 class="mb-3 fw-semibold">Build fast, responsive sites with&nbsp;Bootstrap</h1>
+ <h1 class="mb-3 fw-semibold lh-1">Build fast, responsive sites with&nbsp;Bootstrap</h1>
<p class="lead mb-4">
Powerful, extensible, and feature-packed frontend toolkit. Build and customize with Sass, utilize prebuilt grid system and components, and bring projects to life with powerful JavaScript plugins.
</p>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/home/plugins.html b/vendor/twbs/bootstrap/site/layouts/partials/home/plugins.html
new file mode 100644
index 000000000..b76fe6539
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/layouts/partials/home/plugins.html
@@ -0,0 +1,65 @@
+<section class="pb-md-5 mb-5">
+ <div class="col-lg-8 mb-5">
+ <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-warning-rgb);">
+ <svg class="bi fs-1"><use xlink:href="#plugin"></use></svg>
+ </div>
+ <h2 class="display-5 mb-3 fw-semibold lh-sm">Powerful JavaScript plugins without&nbsp;jQuery</h2>
+ <p class="lead fw-normal">
+ Add toggleable hidden elements, modals and offcanvas menus, popovers and tooltips, and so much more—all without jQuery. Bootstrap's JavaScript is HTML-first, meaning most plugins are added with <code>data</code> attributes in your HTML. Need more control? Include individual plugins programmatically.
+ </p>
+ <p class="d-flex justify-content-start lead fw-normal mb-md-0">
+ <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/" class="icon-link fw-semibold">
+ Learn more about Bootstrap JavaScript
+ <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
+ </a>
+ </p>
+ </div>
+ <div class="row gx-md-5">
+ <div class="col-lg-6 mb-3">
+ <h3 class="fw-semibold">Data attribute API</h3>
+ <p>Why write more JavaScript when you can write HTML? Nearly all of Bootstrap's JavaScript plugins feature a first-class data API, allowing you to use JavaScript just by adding <code>data</code> attributes.</p>
+ <div class="p-4 mb-3 border rounded-3">
+ <div class="dropdown">
+ <button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+ </button>
+ <ul class="dropdown-menu">
+ <li><button class="dropdown-item" type="button">Dropdown item</button></li>
+ <li><button class="dropdown-item" type="button">Dropdown item</button></li>
+ <li><button class="dropdown-item" type="button">Dropdown item</button></li>
+ </ul>
+ </div>
+ </div>
+
+ {{ highlight (printf `<div class="dropdown">
+<button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
+ Dropdown
+</button>
+<ul class="dropdown-menu">
+ <li><button class="dropdown-item" type="button">Dropdown item</button></li>
+ <li><button class="dropdown-item" type="button">Dropdown item</button></li>
+ <li><button class="dropdown-item" type="button">Dropdown item</button></li>
+</ul>
+</div>
+`) "html" "" }}
+ <p>Learn more about <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/#using-bootstrap-as-a-module">our JavaScript as modules</a> and <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/#programmatic-api">using the programmatic API</a>.</p>
+ </div>
+ <div class="col-lg-6 mb-3">
+ <h3 class="fw-semibold">Comprehensive set of plugins</h3>
+ <p>Bootstrap features a dozen plugins that you can drop into any project. Drop them in all at once, or choose just the ones you need.</p>
+ <hr class="my-4">
+ <div class="row g-3">
+ {{- range $plugin := .Site.Data.plugins -}}
+ {{- $href := printf "/docs/%s/%s" $.Site.Params.docs_version $plugin.link }}
+ <div class="col-sm-6 mb-2">
+ <a class="d-block pe-lg-4 text-decoration-none lh-sm" href="{{ $href }}">
+ <h4 class="mb-0 fs-5 fw-semibold">{{ $plugin.name }}</h4>
+ <small class="text-muted">{{ $plugin.description }}</small>
+ </a>
+ </div>
+ {{- end }}
+ </div>
+ </div>
+ </div>
+
+</section>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/home/themes.html b/vendor/twbs/bootstrap/site/layouts/partials/home/themes.html
new file mode 100644
index 000000000..e832f2c63
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/layouts/partials/home/themes.html
@@ -0,0 +1,23 @@
+<section class="row g-3 g-md-5 pb-md-5 mb-5 align-items-center">
+ <div class="col-lg-6">
+ <div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-violet-rgb);">
+ {{ partial "icons/droplet-fill.svg" (dict "width" "32" "height" "32") }}
+ </div>
+ <h2 class="display-5 mb-3 fw-semibold lh-sm">Make it yours with official Bootstrap Themes</h2>
+ <p class="lead fw-normal">
+ Take Bootstrap to the next level with premium themes from the <a href="{{ .Site.Params.themes }}">official Bootstrap Themes marketplace</a>. Themes are built on Bootstrap as their own extended frameworks, rich with new components and plugins, documentation, and powerful build tools.
+ </p>
+ <p class="d-flex justify-content-start lead fw-normal mb-md-0">
+ <a href="{{ .Site.Params.themes }}" class="icon-link fw-semibold">
+ Browse Bootstrap Themes
+ <svg class="bi"><use xlink:href="#arrow-right-short"></use></svg>
+ </a>
+ </p>
+ </div>
+ <div class="col-lg-6">
+ <img class="img-fluid mt-3 mx-auto" srcset="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes.png,
+ /docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes@2x.png 2x"
+ src="/docs/{{ .Site.Params.docs_version }}/assets/img/bootstrap-themes.png"
+ alt="Bootstrap Themes" width="700" height="500" loading="lazy">
+ </div>
+</section>
diff --git a/vendor/twbs/bootstrap/site/layouts/partials/icons.html b/vendor/twbs/bootstrap/site/layouts/partials/icons.html
index 9841e143a..9d078f9e7 100644
--- a/vendor/twbs/bootstrap/site/layouts/partials/icons.html
+++ b/vendor/twbs/bootstrap/site/layouts/partials/icons.html
@@ -15,12 +15,14 @@
<path fill-rule="evenodd" d="M1.114 8.063V7.9c1.005-.102 1.497-.615 1.497-1.6V4.503c0-1.094.39-1.538 1.354-1.538h.273V2h-.376C2.25 2 1.49 2.759 1.49 4.352v1.524c0 1.094-.376 1.456-1.49 1.456v1.299c1.114 0 1.49.362 1.49 1.456v1.524c0 1.593.759 2.352 2.372 2.352h.376v-.964h-.273c-.964 0-1.354-.444-1.354-1.538V9.663c0-.984-.492-1.497-1.497-1.6ZM14.886 7.9v.164c-1.005.103-1.497.616-1.497 1.6v1.798c0 1.094-.39 1.538-1.354 1.538h-.273v.964h.376c1.613 0 2.372-.759 2.372-2.352v-1.524c0-1.094.376-1.456 1.49-1.456v-1.3c-1.114 0-1.49-.362-1.49-1.456V4.352C14.51 2.759 13.75 2 12.138 2h-.376v.964h.273c.964 0 1.354.444 1.354 1.538V6.3c0 .984.492 1.497 1.497 1.6ZM7.5 11.5V9.207l-1.621 1.621-.707-.707L6.792 8.5H4.5v-1h2.293L5.172 5.879l.707-.707L7.5 6.792V4.5h1v2.293l1.621-1.621.707.707L9.208 7.5H11.5v1H9.207l1.621 1.621-.707.707L8.5 9.208V11.5h-1Z"/>
</symbol>
<symbol id="check2" viewBox="0 0 16 16">
- <title>Check</title>
<path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/>
</symbol>
<symbol id="chevron-expand" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M3.646 9.146a.5.5 0 0 1 .708 0L8 12.793l3.646-3.647a.5.5 0 0 1 .708.708l-4 4a.5.5 0 0 1-.708 0l-4-4a.5.5 0 0 1 0-.708zm0-2.292a.5.5 0 0 0 .708 0L8 3.207l3.646 3.647a.5.5 0 0 0 .708-.708l-4-4a.5.5 0 0 0-.708 0l-4 4a.5.5 0 0 0 0 .708z"/>
</symbol>
+ <symbol id="circle-half" viewBox="0 0 16 16">
+ <path d="M8 15A7 7 0 1 0 8 1v14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
+ </symbol>
<symbol id="clipboard" viewBox="0 0 16 16">
<path d="M4 1.5H3a2 2 0 0 0-2 2V14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V3.5a2 2 0 0 0-2-2h-1v1h1a1 1 0 0 1 1 1V14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V3.5a1 1 0 0 1 1-1h1v-1z"/>
<path d="M9.5 1a.5.5 0 0 1 .5.5v1a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1-.5-.5v-1a.5.5 0 0 1 .5-.5h3zm-3-1A1.5 1.5 0 0 0 5 1.5v1A1.5 1.5 0 0 0 6.5 4h3A1.5 1.5 0 0 0 11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3z"/>
@@ -50,6 +52,10 @@
<symbol id="menu-button-wide-fill" viewBox="0 0 16 16">
<path d="M1.5 0A1.5 1.5 0 0 0 0 1.5v2A1.5 1.5 0 0 0 1.5 5h13A1.5 1.5 0 0 0 16 3.5v-2A1.5 1.5 0 0 0 14.5 0h-13zm1 2h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1 0-1zm9.927.427A.25.25 0 0 1 12.604 2h.792a.25.25 0 0 1 .177.427l-.396.396a.25.25 0 0 1-.354 0l-.396-.396zM0 8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V8zm1 3v2a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-2H1zm14-1V8a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v2h14zM2 8.5a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5zm0 4a.5.5 0 0 1 .5-.5h6a.5.5 0 0 1 0 1h-6a.5.5 0 0 1-.5-.5z"/>
</symbol>
+ <symbol id="moon-stars-fill" viewBox="0 0 16 16">
+ <path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z"/>
+ <path d="M10.794 3.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387a1.734 1.734 0 0 0-1.097 1.097l-.387 1.162a.217.217 0 0 1-.412 0l-.387-1.162A1.734 1.734 0 0 0 9.31 6.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387a1.734 1.734 0 0 0 1.097-1.097l.387-1.162zM13.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732l-.774-.258a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L13.863.1z"/>
+ </symbol>
<symbol id="palette2" viewBox="0 0 16 16">
<path d="M0 .5A.5.5 0 0 1 .5 0h5a.5.5 0 0 1 .5.5v5.277l4.147-4.131a.5.5 0 0 1 .707 0l3.535 3.536a.5.5 0 0 1 0 .708L10.261 10H15.5a.5.5 0 0 1 .5.5v5a.5.5 0 0 1-.5.5H3a2.99 2.99 0 0 1-2.121-.879A2.99 2.99 0 0 1 0 13.044m6-.21 7.328-7.3-2.829-2.828L6 7.188v5.647zM4.5 13a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0zM15 15v-4H9.258l-4.015 4H15zM0 .5v12.495V.5z"/>
<path d="M0 12.995V13a3.07 3.07 0 0 0 0-.005z"/>
@@ -60,6 +66,9 @@
<symbol id="plus" viewBox="0 0 16 16">
<path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z"/>
</symbol>
+ <symbol id="sun-fill" viewBox="0 0 16 16">
+ <path d="M8 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z"/>
+ </symbol>
<symbol id="three-dots" viewBox="0 0 16 16">
<path d="M3 9.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/>
</symbol>
diff --git a/vendor/twbs/bootstrap/site/layouts/shortcodes/added-in.html b/vendor/twbs/bootstrap/site/layouts/shortcodes/added-in.html
index ca461c2e6..abd8dc4f3 100644
--- a/vendor/twbs/bootstrap/site/layouts/shortcodes/added-in.html
+++ b/vendor/twbs/bootstrap/site/layouts/shortcodes/added-in.html
@@ -2,4 +2,4 @@
{{- $version := .Get 0 -}}
-<small class="d-inline-flex mb-3 px-2 py-1 fw-semibold text-success bg-success bg-opacity-10 border border-success border-opacity-10 rounded-2">Added in v{{ $version }}</small>
+<small class="d-inline-flex mb-3 px-2 py-1 fw-semibold text-success-emphasis bg-success-subtle border border-success-subtle rounded-2">Added in v{{ $version }}</small>
diff --git a/vendor/twbs/bootstrap/site/layouts/shortcodes/callout-deprecated-dark-variants.html b/vendor/twbs/bootstrap/site/layouts/shortcodes/callout-deprecated-dark-variants.html
new file mode 100644
index 000000000..e682a7fbe
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/layouts/shortcodes/callout-deprecated-dark-variants.html
@@ -0,0 +1,9 @@
+{{- /* Outputs message about dark mode component variants being deprecated in v5.3. */ -}}
+
+{{- $component := .Get 0 -}}
+
+<div class="bd-callout bd-callout-warning">
+ <p>
+ <strong>Heads up!</strong> Dark variants for components were deprecated in v5.3.0 with the introduction of color modes. Instead of adding <code>.{{ $component }}-dark</code>, set <code>data-bs-theme="dark"</code> on the root element, a parent wrapper, or the component itself.
+ </p>
+</div>
diff --git a/vendor/twbs/bootstrap/site/layouts/shortcodes/deprecated-in.html b/vendor/twbs/bootstrap/site/layouts/shortcodes/deprecated-in.html
new file mode 100644
index 000000000..b353368df
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/layouts/shortcodes/deprecated-in.html
@@ -0,0 +1,5 @@
+{{- /* Outputs badge to identify the version something was deprecated */ -}}
+
+{{- $version := .Get 0 -}}
+
+<small class="d-inline-flex mb-3 px-2 py-1 fw-semibold text-warning-emphasis bg-warning-subtle border border-warning-subtle rounded-2">Deprecated in v{{ $version }}</small>
diff --git a/vendor/twbs/bootstrap/site/layouts/shortcodes/example.html b/vendor/twbs/bootstrap/site/layouts/shortcodes/example.html
index c6dcddbe0..8a9cdff0c 100644
--- a/vendor/twbs/bootstrap/site/layouts/shortcodes/example.html
+++ b/vendor/twbs/bootstrap/site/layouts/shortcodes/example.html
@@ -17,6 +17,7 @@
{{- $show_markup := .Get "show_markup" | default true -}}
{{- $show_preview := .Get "show_preview" | default true -}}
{{- $input := .Inner -}}
+{{- $content := .Inner -}}
<div class="bd-example-snippet bd-code-snippet">
{{- if eq $show_preview true -}}
@@ -27,20 +28,21 @@
{{- if eq $show_markup true -}}
{{- if eq $show_preview true -}}
- <div class="d-flex align-items-center highlight-toolbar bg-light ps-3 pe-2 py-1">
+ <div class="d-flex align-items-center highlight-toolbar ps-3 pe-2 py-1">
<small class="font-monospace text-muted text-uppercase">{{- $lang -}}</small>
<div class="d-flex ms-auto">
<button type="button" class="btn-edit text-nowrap"{{ with $stackblitz_add_js }} data-sb-js-snippet="{{ $stackblitz_add_js }}"{{ end }} title="Try it on StackBlitz">
- <svg class="bi" role="img" aria-label="Try it"><use xlink:href="#lightning-charge-fill"/></svg>
+ <svg class="bi" aria-hidden="true"><use xlink:href="#lightning-charge-fill"/></svg>
</button>
<button type="button" class="btn-clipboard mt-0 me-0" title="Copy to clipboard">
- <svg class="bi" role="img" aria-label="Copy"><use xlink:href="#clipboard"/></svg>
+ <svg class="bi" aria-hidden="true"><use xlink:href="#clipboard"/></svg>
</button>
</div>
</div>
{{- end -}}
- {{- $content := replaceRE `<svg class="bd-placeholder-img(?:-lg)?(?: *?bd-placeholder-img-lg)? ?(.*?)".*?<\/svg>\n` `<img src="..." class="$1" alt="...">` $input -}}
+ {{- $content = replaceRE `<svg class="bd-placeholder-img(?:-lg)?(?: *?bd-placeholder-img-lg)? ?(.*?)".*?<\/svg>` `<img src="..." class="$1" alt="...">` $content -}}
+ {{- $content = replaceRE `<img class="bd-placeholder-img(?:-lg)?(?: *?bd-placeholder-img-lg)? ?(.*?)".*?>` `<img src="..." class="$1" alt="...">` $content -}}
{{- $content = replaceRE ` (class=" *?")` "" $content -}}
{{- highlight (trim $content "\n") $lang "" -}}
{{- end -}}
diff --git a/vendor/twbs/bootstrap/site/layouts/shortcodes/placeholder.html b/vendor/twbs/bootstrap/site/layouts/shortcodes/placeholder.html
index c267bf4a7..7c65bf00b 100644
--- a/vendor/twbs/bootstrap/site/layouts/shortcodes/placeholder.html
+++ b/vendor/twbs/bootstrap/site/layouts/shortcodes/placeholder.html
@@ -4,11 +4,12 @@
`args` are all optional and can be one of the following:
* title: Used in the SVG `title` tag - default: "Placeholder"
* text: The text to show in the image - default: "width x height"
- * class: Class to add to the `svg` - default: "bd-placeholder-img"
+ * class: Class to add to the `svg` or `img` - default: "bd-placeholder-img"
* color: The text color (foreground) - default: "#dee2e6"
* background: The background color - default: "#868e96"
* width: default: "100%"
* height: default: "180px"
+ * markup: If it should render `svg` or `img` tags - default: "svg"
*/ -}}
{{- $grays := $.Site.Data.grays -}}
@@ -26,8 +27,18 @@
{{- $show_title := not (eq $title "false") -}}
{{- $show_text := not (eq $text "false") -}}
-<svg class="bd-placeholder-img{{ with $class }} {{ . }}{{ end }}" width="{{ $width }}" height="{{ $height }}" xmlns="http://www.w3.org/2000/svg"{{ if (or $show_title $show_text) }} role="img" aria-label="{{ if $show_title }}{{ $title }}{{ if $show_text }}: {{ end }}{{ end }}{{ if ($show_text) }}{{ $text }}{{ end }}"{{ else }} aria-hidden="true"{{ end }} preserveAspectRatio="xMidYMid slice" focusable="false">
- {{- if $show_title }}<title>{{ $title }}</title>{{ end -}}
- <rect width="100%" height="100%" fill="{{ $background }}"/>
- {{- if $show_text }}<text x="50%" y="50%" fill="{{ $color }}" dy=".3em">{{ $text }}</text>{{ end -}}
-</svg>
+{{- $markup := .Get "markup" | default "svg" -}}
+
+{{- if eq $markup "img" -}}
+ <img class="bd-placeholder-img{{ with $class }} {{ . }}{{ end }}" alt="{{ $title }} : {{ $text }}" width="{{ $width }}" height="{{ $height }}" src="data:image/svg+xml,%3Csvg%20style='font-size:%201.125rem;%20font-family:system-ui,-apple-system,%22Segoe%20UI%22,Roboto,%22Helvetica%20Neue%22,%22Noto%20Sans%22,%22Liberation%20Sans%22,Arial,sans-serif,%22Apple%20Color%20Emoji%22,%22Segoe%20UI%20Emoji%22,%22Segoe%20UI%20Symbol%22,%22Noto%20Color%20Emoji%22;%20-webkit-user-select:%20none;%20-moz-user-select:%20none;%20user-select:%20none;%20text-anchor:%20middle;'%20width='200'%20height='200'%20xmlns='http://www.w3.org/2000/svg'%3E
+ {{- if $show_title }}%3Ctitle%3E{{ $title }}%3C/title%3E{{ end -}}
+ %3Crect%20width='100%25'%20height='100%25'%20fill='%23dee2e6'%3E%3C/rect%3E
+ {{- if $show_text }}%3Ctext%20x='50%25'%20y='50%25'%20fill='%23868e96'%20dy='.3em'%3E{{ $text }}%3C/text%3E{{ end -}}
+ %3C/svg%3E">
+{{- else -}}
+ <svg class="bd-placeholder-img{{ with $class }} {{ . }}{{ end }}" width="{{ $width }}" height="{{ $height }}" xmlns="http://www.w3.org/2000/svg"{{ if (or $show_title $show_text) }} role="img" aria-label="{{ if $show_title }}{{ $title }}{{ if $show_text }}: {{ end }}{{ end }}{{ if ($show_text) }}{{ $text }}{{ end }}"{{ else }} aria-hidden="true"{{ end }} preserveAspectRatio="xMidYMid slice" focusable="false">
+ {{- if $show_title }}<title>{{ $title }}</title>{{ end -}}
+ <rect width="100%" height="100%" fill="{{ $background }}"/>
+ {{- if $show_text }}<text x="50%" y="50%" fill="{{ $color }}" dy=".3em">{{ $text }}</text>{{ end -}}
+ </svg>
+{{- end -}}
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo-black.svg b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo-black.svg
index 31e66e1e9..31e66e1e9 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo-black.svg
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo-black.svg
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo-shadow.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo-shadow.png
index 3643b912e..3643b912e 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo-shadow.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo-shadow.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo-white.svg b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo-white.svg
index f73d7ca2a..f73d7ca2a 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo-white.svg
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo-white.svg
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo.svg b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo.svg
index f0189652b..f0189652b 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-logo.svg
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-logo.svg
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-social-logo.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-social-logo.png
index 9dbb732a4..9dbb732a4 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-social-logo.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-social-logo.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-social.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-social.png
index ff9300f41..ff9300f41 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/brand/bootstrap-social.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/brand/bootstrap-social.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-icons.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-icons.png
index 9c418d5f3..9c418d5f3 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-icons.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-icons.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-icons@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-icons@2x.png
index 5dd660856..5dd660856 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-icons@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-icons@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes-collage.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes-collage.png
index 0a3bf5d69..0a3bf5d69 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes-collage.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes-collage.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes-collage@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes-collage@2x.png
index ad165eb19..ad165eb19 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes-collage@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes-collage@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes.png
index d43dba2a7..d43dba2a7 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes@2x.png
index 13c32337d..13c32337d 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/bootstrap-themes@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/bootstrap-themes@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album-rtl.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album-rtl.png
index 8bec58f1c..8bec58f1c 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album-rtl.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album-rtl.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album-rtl@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album-rtl@2x.png
index 47b5b9a4a..47b5b9a4a 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album-rtl@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album-rtl@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album.png
index 9f628babf..9f628babf 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album@2x.png
index 00c938df8..00c938df8 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/album@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/album@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog-rtl.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog-rtl.png
index 5d01bb092..5d01bb092 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog-rtl.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog-rtl.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog-rtl@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog-rtl@2x.png
index 56554e2bf..56554e2bf 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog-rtl@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog-rtl@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog.png
index 3ce428418..3ce428418 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog@2x.png
index f5480314b..f5480314b 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/blog@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/blog@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel-rtl.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel-rtl.png
index 1fb5ae6a8..1fb5ae6a8 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel-rtl.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel-rtl.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel-rtl@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel-rtl@2x.png
index 2beeca096..2beeca096 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel-rtl@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel-rtl@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel.png
index b8ea3ce1c..b8ea3ce1c 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel@2x.png
index 39df35930..39df35930 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/carousel@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/carousel@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet-rtl.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet-rtl.png
index 93fd59324..93fd59324 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet-rtl.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet-rtl.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet-rtl@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet-rtl@2x.png
index fa895cec0..fa895cec0 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet-rtl@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet-rtl@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet.png
index 074be0015..074be0015 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet@2x.png
index c958b6cb6..c958b6cb6 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cheatsheet@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cheatsheet@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout-rtl.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout-rtl.png
index f3cb89ea4..f3cb89ea4 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout-rtl.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout-rtl.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout-rtl@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout-rtl@2x.png
index 5d7b801cf..5d7b801cf 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout-rtl@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout-rtl@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout.png
index cb81ef2d7..cb81ef2d7 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout@2x.png
index 79c7b4bb8..79c7b4bb8 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/checkout@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/checkout@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cover.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cover.png
index 5458ff11d..5458ff11d 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cover.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cover.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cover@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cover@2x.png
index eacd82e98..eacd82e98 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/cover@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/cover@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard-rtl.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard-rtl.png
index 7f5b5bb9d..7f5b5bb9d 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard-rtl.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard-rtl.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard-rtl@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard-rtl@2x.png
index 26b031a99..26b031a99 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard-rtl@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard-rtl@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard.png
index 52988da73..52988da73 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard@2x.png
index 52b23dff6..52b23dff6 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dashboard@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dashboard@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dropdowns.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dropdowns.png
index 64fc8f2f0..64fc8f2f0 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dropdowns.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dropdowns.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dropdowns@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dropdowns@2x.png
index 35fecb49a..35fecb49a 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/dropdowns@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/dropdowns@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/features.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/features.png
index c77ed09bb..c77ed09bb 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/features.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/features.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/features@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/features@2x.png
index 88bd33012..88bd33012 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/features@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/features@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/footers.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/footers.png
index ac20b7f5d..ac20b7f5d 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/footers.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/footers.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/footers@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/footers@2x.png
index a9a07a2cf..a9a07a2cf 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/footers@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/footers@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/grid.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/grid.png
index 2c18784c2..2c18784c2 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/grid.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/grid.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/grid@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/grid@2x.png
index e95c36365..e95c36365 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/grid@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/grid@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/headers.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/headers.png
index 8ad7f6cd2..8ad7f6cd2 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/headers.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/headers.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/headers@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/headers@2x.png
index 234f9b1e6..234f9b1e6 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/headers@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/headers@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/heroes.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/heroes.png
index e9bc3e627..e9bc3e627 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/heroes.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/heroes.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/heroes@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/heroes@2x.png
index fff3a72c7..fff3a72c7 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/heroes@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/heroes@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/jumbotron.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/jumbotron.png
index 48e0c9c0e..48e0c9c0e 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/jumbotron.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/jumbotron.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/jumbotron@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/jumbotron@2x.png
index 229b63007..229b63007 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/jumbotron@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/jumbotron@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/list-groups.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/list-groups.png
index 9f49a54ad..9f49a54ad 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/list-groups.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/list-groups.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/list-groups@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/list-groups@2x.png
index 575d19818..575d19818 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/list-groups@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/list-groups@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/masonry.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/masonry.png
index 20137306f..20137306f 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/masonry.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/masonry.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/masonry@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/masonry@2x.png
index 8d9a5cf97..8d9a5cf97 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/masonry@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/masonry@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/modals.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/modals.png
index 0c8876a67..0c8876a67 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/modals.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/modals.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/modals@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/modals@2x.png
index c18990ace..c18990ace 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/modals@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/modals@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-bottom.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-bottom.png
index af47666f1..af47666f1 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-bottom.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-bottom.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-bottom@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-bottom@2x.png
index 93a7cdc49..93a7cdc49 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-bottom@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-bottom@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-fixed.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-fixed.png
index 97df67e96..97df67e96 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-fixed.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-fixed.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-fixed@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-fixed@2x.png
index 3e0f98b95..3e0f98b95 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-fixed@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-fixed@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-static.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-static.png
index 8d54f182c..8d54f182c 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-static.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-static.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-static@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-static@2x.png
index 9b057371d..9b057371d 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbar-static@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbar-static@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars-offcanvas.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars-offcanvas.png
index be2d1487c..be2d1487c 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars-offcanvas.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars-offcanvas.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars-offcanvas@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars-offcanvas@2x.png
index d2b947176..d2b947176 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars-offcanvas@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars-offcanvas@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars.png
index 0d7b44afb..0d7b44afb 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars@2x.png
index dc0cea085..dc0cea085 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/navbars@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/navbars@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/offcanvas-navbar.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/offcanvas-navbar.png
index 1e75d2663..1e75d2663 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/offcanvas-navbar.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/offcanvas-navbar.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/offcanvas-navbar@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/offcanvas-navbar@2x.png
index e5287dde8..e5287dde8 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/offcanvas-navbar@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/offcanvas-navbar@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/pricing.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/pricing.png
index ea7224615..ea7224615 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/pricing.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/pricing.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/pricing@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/pricing@2x.png
index 959d808a9..959d808a9 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/pricing@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/pricing@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/product.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/product.png
index a95eff622..a95eff622 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/product.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/product.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/product@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/product@2x.png
index 1dfe45482..1dfe45482 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/product@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/product@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sidebars.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sidebars.png
index 00efb311e..00efb311e 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sidebars.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sidebars.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sidebars@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sidebars@2x.png
index cb167e535..cb167e535 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sidebars@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sidebars@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sign-in.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sign-in.png
index 8d57f561c..8d57f561c 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sign-in.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sign-in.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sign-in@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sign-in@2x.png
index 477335984..477335984 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sign-in@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sign-in@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/starter-template.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/starter-template.png
index d4b20217a..d4b20217a 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/starter-template.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/starter-template.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/starter-template@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/starter-template@2x.png
index 9323837ca..9323837ca 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/starter-template@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/starter-template@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer-navbar.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer-navbar.png
index cc88cfb2d..cc88cfb2d 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer-navbar.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer-navbar.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer-navbar@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer-navbar@2x.png
index 9478901f6..9478901f6 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer-navbar@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer-navbar@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer.png
index 4b5246d38..4b5246d38 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer@2x.png
index 5a008a0ac..5a008a0ac 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/examples/sticky-footer@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/examples/sticky-footer@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/android-chrome-192x192.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/android-chrome-192x192.png
index 1c276a531..1c276a531 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/android-chrome-192x192.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/android-chrome-192x192.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/android-chrome-512x512.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/android-chrome-512x512.png
index 936025e1c..936025e1c 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/android-chrome-512x512.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/android-chrome-512x512.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/apple-touch-icon.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/apple-touch-icon.png
index e7053f970..e7053f970 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/apple-touch-icon.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/apple-touch-icon.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/favicon-16x16.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/favicon-16x16.png
index f4754c1a3..f4754c1a3 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/favicon-16x16.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/favicon-16x16.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/favicon-32x32.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/favicon-32x32.png
index ca0593a21..ca0593a21 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/favicon-32x32.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/favicon-32x32.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/manifest.json b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/manifest.json
index 8f2f0f76b..8f2f0f76b 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/manifest.json
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/manifest.json
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/safari-pinned-tab.svg b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/safari-pinned-tab.svg
index aa6e85cb9..aa6e85cb9 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/favicons/safari-pinned-tab.svg
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/favicons/safari-pinned-tab.svg
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-parcel.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-parcel.png
index 4cfa46cf3..4cfa46cf3 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-parcel.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-parcel.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-parcel@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-parcel@2x.png
index 4f7165879..4f7165879 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-parcel@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-parcel@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-vite.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-vite.png
index a290110e7..a290110e7 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-vite.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-vite.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-vite@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-vite@2x.png
index 5fe40c526..5fe40c526 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-vite@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-vite@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-webpack.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-webpack.png
index 189b7f494..189b7f494 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-webpack.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-webpack.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-webpack@2x.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-webpack@2x.png
index 7006386f0..7006386f0 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/bootstrap-webpack@2x.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/bootstrap-webpack@2x.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/parcel-dev-server-bootstrap.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/parcel-dev-server-bootstrap.png
index a7aa65be0..a7aa65be0 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/parcel-dev-server-bootstrap.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/parcel-dev-server-bootstrap.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/parcel-dev-server.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/parcel-dev-server.png
index 1833fb8a0..1833fb8a0 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/parcel-dev-server.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/parcel-dev-server.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/vite-dev-server-bootstrap.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/vite-dev-server-bootstrap.png
index 0c3741bd6..0c3741bd6 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/vite-dev-server-bootstrap.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/vite-dev-server-bootstrap.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/vite-dev-server.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/vite-dev-server.png
index e29729c23..e29729c23 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/vite-dev-server.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/vite-dev-server.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/webpack-dev-server-bootstrap.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/webpack-dev-server-bootstrap.png
index fc37d92d3..fc37d92d3 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/webpack-dev-server-bootstrap.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/webpack-dev-server-bootstrap.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/webpack-dev-server.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/webpack-dev-server.png
index ecba18967..ecba18967 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/guides/webpack-dev-server.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/guides/webpack-dev-server.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/parcel.png b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/parcel.png
index ff5cc3ae7..ff5cc3ae7 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/parcel.png
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/parcel.png
Binary files differ
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/vite.svg b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/vite.svg
index 831cb1610..831cb1610 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/vite.svg
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/vite.svg
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/webpack.svg b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/webpack.svg
index ed885f2fe..ed885f2fe 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/img/webpack.svg
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/img/webpack.svg
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.3/assets/js/color-modes.js b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/js/color-modes.js
new file mode 100644
index 000000000..41b6b893e
--- /dev/null
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/js/color-modes.js
@@ -0,0 +1,62 @@
+/*!
+ * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/)
+ * Copyright 2011-2022 The Bootstrap Authors
+ * Licensed under the Creative Commons Attribution 3.0 Unported License.
+ */
+
+(() => {
+ 'use strict'
+
+ const storedTheme = localStorage.getItem('theme')
+
+ const getPreferredTheme = () => {
+ if (storedTheme) {
+ return storedTheme
+ }
+
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
+ }
+
+ const setTheme = function (theme) {
+ if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
+ document.documentElement.setAttribute('data-bs-theme', 'dark')
+ } else {
+ document.documentElement.setAttribute('data-bs-theme', theme)
+ }
+ }
+
+ setTheme(getPreferredTheme())
+
+ const showActiveTheme = theme => {
+ const activeThemeIcon = document.querySelector('.theme-icon-active use')
+ const btnToActive = document.querySelector(`[data-bs-theme-value="${theme}"]`)
+ const svgOfActiveBtn = btnToActive.querySelector('svg use').getAttribute('href')
+
+ document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
+ element.classList.remove('active')
+ })
+
+ btnToActive.classList.add('active')
+ activeThemeIcon.setAttribute('href', svgOfActiveBtn)
+ }
+
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
+ if (storedTheme !== 'light' || storedTheme !== 'dark') {
+ setTheme(getPreferredTheme())
+ }
+ })
+
+ window.addEventListener('DOMContentLoaded', () => {
+ showActiveTheme(getPreferredTheme())
+
+ document.querySelectorAll('[data-bs-theme-value]')
+ .forEach(toggle => {
+ toggle.addEventListener('click', () => {
+ const theme = toggle.getAttribute('data-bs-theme-value')
+ localStorage.setItem('theme', theme)
+ setTheme(theme)
+ showActiveTheme(theme)
+ })
+ })
+ })
+})()
diff --git a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/js/validate-forms.js b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/js/validate-forms.js
index 30ea0aa6b..30ea0aa6b 100644
--- a/vendor/twbs/bootstrap/site/static/docs/5.2/assets/js/validate-forms.js
+++ b/vendor/twbs/bootstrap/site/static/docs/5.3/assets/js/validate-forms.js
diff --git a/view/css/bootstrap-red.css b/view/css/bootstrap-red.css
index f1296d7b2..57ce92c43 100644
--- a/view/css/bootstrap-red.css
+++ b/view/css/bootstrap-red.css
@@ -7,15 +7,14 @@
}
}
-/* nav overrides */
-
-nav .badge {
- position: absolute;
- font-size: 0.75rem;
+* {
+ transition: none !important;
}
-nav .dropdown-menu {
- min-width: 16rem;
+/* nav overrides */
+
+[data-bs-theme=dark] .navbar-toggler {
+ --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 1);
}
.nav-item.nav-item-hack {
@@ -42,10 +41,6 @@ nav .dropdown-menu {
}
-.navbar-dark .navbar-toggler {
- color: rgba(255,255,255,1);
-}
-
/* offcanvas */
.offcanvas,
.offcanvas-backdrop.fade {
diff --git a/view/css/cdav_calendar.css b/view/css/cdav_calendar.css
index a732452f0..702b18bff 100644
--- a/view/css/cdav_calendar.css
+++ b/view/css/cdav_calendar.css
@@ -1,38 +1,43 @@
/* fix borders */
-.fc th:first-child,
-.fc td:first-child {
- border-left-width: 0px;
+:root {
+ --fc-border-color: var(--bs-border-color) !important;
+ --fc-page-bg-color: var(--bs-tertiary-bg) !important;
+ --fc-list-event-hover-bg-color: var(--bs-tertiary-bg) !important;
+ --fc-daygrid-event-dot-width: 1em !important;
+ --fc-list-event-dot-width: 1em !important;
}
-.fc th:last-child,
-.fc td:last-child {
- border-right-width: 0px;
- border-bottom-width: 0px;
+.fc .fc-cell-shaded, .fc .fc-day-disabled {
+ background: var(--bs-tertiary-bg) !important;
}
-main.fullscreen .fc th:last-child,
-main.fullscreen .fc td:last-child {
- border-bottom-width: 1px;
+.fc-theme-standard td:last-child,
+.fc-theme-standard th:last-child {
+ border-right: 0px !important;
}
-.fc-unthemed th,
-.fc-unthemed td,
-.fc-unthemed thead,
-.fc-unthemed tbody,
-.fc-unthemed .fc-divider,
-.fc-unthemed .fc-row,
-.fc-unthemed .fc-popover {
- border-color: #ccc !important;
+.fc-theme-standard td:last-child {
+ border-bottom: 0px !important;
}
-.fc-list-view {
- border-width: 0px;
+.fc-theme-standard .fc-scrollgrid {
+ border: 0px !important;
+}
+
+.fc-theme-standard .fc-list {
+ border: 0px !important;
}
.bootstrap-tagsinput {
- width: 100%;
- padding: 6px 12px;
+ border: 1px solid var(--bs-border-color) !important;
margin-bottom: 0px !important;
+ border-radius: var(--bs-border-radius) !important;
+ background-color: var(--bs-body-bg) !important;
+ padding: 0 .75rem !important;
+
}
+.bootstrap-tagsinput input {
+ min-width: 30% !important;
+}
diff --git a/view/css/conversation.css b/view/css/conversation.css
index d6a99f853..ab6eb3c01 100644
--- a/view/css/conversation.css
+++ b/view/css/conversation.css
@@ -21,12 +21,12 @@
#jot-pagetitle-wrap,
#jot-category-wrap,
#jot-customjotheaders-wrap {
- border-bottom: 1px solid rgba(0, 0, 0, .2);
+ border-bottom: 1px solid var(--bs-border-color);
}
#jot-attachment-wrap,
#jot-poll-wrap {
- border-top: 1px solid rgba(0, 0, 0, .2);
+ border-top: 1px solid rvar(--bs-border-color);
}
#jot-title-wrap input,
@@ -89,7 +89,7 @@
}
#profile-jot-submit-wrapper {
- border-top: 1px solid rgba(0, 0, 0, .2);
+ border-top: 1px solid var(--bs-border-color);
}
/* conversation */
@@ -100,12 +100,6 @@
border-top: 0.2rem solid var(--bs-blue);
}
-.wall-item-info {
- display: block;
- float: left;
- margin-right: .75rem;
-}
-
.wall-item-wrapper {
margin-left: .75rem;
}
@@ -139,26 +133,10 @@
margin: 5px;
}
-.wall-item-lock {
- float: left;
-}
-
a.wall-item-name-link {
font-weight: bold !important;
}
-.wall-item-author {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.wall-item-ago,
-.wall-item-ago i {
- font-size: 0.75rem;
- line-height: 1.1;
-}
-
.wall-item-ago .fa-check {
cursor: pointer;
}
@@ -223,13 +201,14 @@ a.wall-item-name-link {
.comment-edit-text {
- padding: 0.5rem;
+ padding: .5rem;
width: 100%;
display: inherit;
- line-height: 1;
- height: 2rem;
+ line-height: 1.5;
+ height: 2.5rem;
resize: none;
overflow: hidden;
+ outline: none;
}
.comment-edit-text.expanded {
diff --git a/view/css/mod_cal.css b/view/css/mod_cal.css
index f0b5c0166..702b18bff 100644
--- a/view/css/mod_cal.css
+++ b/view/css/mod_cal.css
@@ -1,51 +1,43 @@
/* fix borders */
-.fc th:first-child,
-.fc td:first-child {
- border-left-width: 0px;
+:root {
+ --fc-border-color: var(--bs-border-color) !important;
+ --fc-page-bg-color: var(--bs-tertiary-bg) !important;
+ --fc-list-event-hover-bg-color: var(--bs-tertiary-bg) !important;
+ --fc-daygrid-event-dot-width: 1em !important;
+ --fc-list-event-dot-width: 1em !important;
}
-.fc th:last-child,
-.fc td:last-child {
- border-right-width: 0px;
- border-bottom-width: 0px;
+.fc .fc-cell-shaded, .fc .fc-day-disabled {
+ background: var(--bs-tertiary-bg) !important;
}
-.fc-unthemed th,
-.fc-unthemed td,
-.fc-unthemed thead,
-.fc-unthemed tbody,
-.fc-unthemed .fc-divider,
-.fc-unthemed .fc-row,
-.fc-unthemed .fc-popover {
- border-color: #ccc !important;
+.fc-theme-standard td:last-child,
+.fc-theme-standard th:last-child {
+ border-right: 0px !important;
}
-#events-spinner .spinner {
- margin-top: 9px;
- margin-bottom: -9px;
+.fc-theme-standard td:last-child {
+ border-bottom: 0px !important;
}
-.bootstrap-tagsinput {
- width: 100%;
- padding: 6px 12px;
+.fc-theme-standard .fc-scrollgrid {
+ border: 0px !important;
}
-.event-wrapper,
-.vevent {
- max-width: 700px;
+.fc-theme-standard .fc-list {
+ border: 0px !important;
}
-.event-owner {
- padding: 10px;
-}
+.bootstrap-tagsinput {
+ border: 1px solid var(--bs-border-color) !important;
+ margin-bottom: 0px !important;
+ border-radius: var(--bs-border-radius) !important;
+ background-color: var(--bs-body-bg) !important;
+ padding: 0 .75rem !important;
-.event-owner img {
- margin-right: 5px;
}
-.vevent,
-.event-buttons {
- padding: 10px;
+.bootstrap-tagsinput input {
+ min-width: 30% !important;
}
-
diff --git a/view/css/widgets.css b/view/css/widgets.css
index ebe0f47b0..6b5ef3986 100644
--- a/view/css/widgets.css
+++ b/view/css/widgets.css
@@ -213,7 +213,7 @@ a.wikilist {
top: 0px;
left: 0px;
padding: 4.5rem .5rem 1rem .5rem;
- background-color: white;
+ background-color: var(--bs-body-bg);
width: 100%;
max-width: 100%;
height: 100%;
@@ -223,6 +223,7 @@ a.wikilist {
#notifications {
margin-bottom: 1rem;
+ background-color: var(--bs-body-bg);
}
.tt-filter-active,
@@ -241,6 +242,11 @@ a.wikilist {
position: relative;
}
+/* messages (hq) */
+#messages-author-container {
+ z-index: 3 !important;
+}
+
/* hq_controls */
.hq_controls_fixed_bottom_center {
z-index: 1028;
@@ -249,3 +255,4 @@ a.wikilist {
left: 50%;
transform: translateX(-50%);
}
+
diff --git a/view/de-de/htconfig.tpl b/view/de-de/htconfig.tpl
deleted file mode 100644
index 10068a66b..000000000
--- a/view/de-de/htconfig.tpl
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-// Set the following for your MySQL installation
-// Copy or rename this file to .htconfig.php
-
-$db_host = '{{$dbhost}}';
-$db_port = '{{$dbport}}';
-$db_user = '{{$dbuser}}';
-$db_pass = '{{$dbpass}}';
-$db_data = '{{$dbdata}}';
-$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
-
-/*
- * Notice: Many of the following settings will be available in the admin panel
- * after a successful site install. Once they are set in the admin panel, they
- * are stored in the DB - and the DB setting will over-ride any corresponding
- * setting in this file
- *
- * The command-line tool util/config is able to query and set the DB items
- * directly if for some reason the admin panel is not available and a system
- * setting requires modification.
- *
- */
-
-
-// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
-// It can be changed later and only applies to timestamps for anonymous viewers.
-
-App::$config['system']['timezone'] = '{{$timezone}}';
-
-// What is your site name?
-
-App::$config['system']['baseurl'] = '{{$siteurl}}';
-App::$config['system']['sitename'] = "Hubzilla";
-App::$config['system']['location_hash'] = '{{$site_id}}';
-
-// These lines set additional security headers to be sent with all responses
-// You may wish to set transport_security_header to 0 if your server already sends
-// this header. content_security_policy may need to be disabled if you wish to
-// run the piwik analytics plugin or include other offsite resources on a page
-
-App::$config['system']['transport_security_header'] = 1;
-App::$config['system']['content_security_policy'] = 1;
-
-
-// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
-// Be certain to create your own personal account before setting
-// REGISTER_CLOSED. 'register_text' (if set) will be displayed prominently on
-// the registration page. REGISTER_APPROVE requires you set 'admin_email'
-// to the email address of an already registered person who can authorise
-// and/or approve/deny the request.
-
-App::$config['system']['register_policy'] = REGISTER_OPEN;
-App::$config['system']['register_text'] = '';
-App::$config['system']['admin_email'] = '{{$adminmail}}';
-
-// Recommend you leave this set to 1. Set to 0 to let people register without
-// proving they own the email address they register with.
-
-App::$config['system']['verify_email'] = 1;
-
-
-// Site access restrictions. By default we will create private sites.
-// Your choices are ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED, and ACCESS_FREE.
-// If you leave REGISTER_OPEN above, anybody may register on your
-// site, however your site will not be listed anywhere as an open
-// registration hub. We will use the system access policy (below)
-// to determine whether or not to list your site in the directory
-// as an open hub where anybody may create accounts. Your choice of
-// paid, tiered, or free determines how these listings will be presented.
-
-
-App::$config['system']['access_policy'] = ACCESS_PRIVATE;
-
-// If you operate a public site, you might wish that people are directed
-// to a "sellpage" where you can describe for features or policies or service plans in depth.
-// This must be an absolute URL beginning with http:// or https:// .
-
-App::$config['system']['sellpage'] = '';
-
-// Maximum size of an imported message, 0 is unlimited
-// FIXME - NOT currently implemented.
-
-App::$config['system']['max_import_size'] = 200000;
-
-// Location of PHP command line processor
-
-App::$config['system']['php_path'] = '{{$phpath}}';
-
-// Configure how we communicate with directory servers.
-// DIRECTORY_MODE_NORMAL = directory client, we will find a directory
-// DIRECTORY_MODE_SECONDARY = caching directory or mirror
-// DIRECTORY_MODE_PRIMARY = main directory server
-// DIRECTORY_MODE_STANDALONE = "off the grid" or private directory services
-
-App::$config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL;
-
-// default system theme
-
-App::$config['system']['theme'] = 'redbasic';
-
-
-// PHP error logging setup
-// Before doing this ensure that the webserver has permission
-// to create and write to php.out in the top level Red directory,
-// or change the name (below) to a file/path where this is allowed.
-
-// Uncomment the following 4 lines to turn on PHP error logging.
-//error_reporting(E_ALL & ~E_WARNING & ~E_PARSE & ~E_NOTICE & ~E_DEPRECATED);
-//ini_set('error_log','php.out');
-//ini_set('log_errors','1');
-//ini_set('display_errors', '0');
diff --git a/view/en-au/htconfig.tpl b/view/en-au/htconfig.tpl
deleted file mode 100644
index d84a14e79..000000000
--- a/view/en-au/htconfig.tpl
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-// Set the following for your MySQL installation
-// Copy or rename this file to .htconfig.php
-
-$db_host = '{{$dbhost}}';
-$db_port = '{{$dbport}}';
-$db_user = '{{$dbuser}}';
-$db_pass = '{{$dbpass}}';
-$db_data = '{{$dbdata}}';
-$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
-
-/*
- * Notice: Many of the following settings will be available in the admin panel
- * after a successful site install. Once they are set in the admin panel, they
- * are stored in the DB - and the DB setting will over-ride any corresponding
- * setting in this file
- *
- * The command-line tool util/config is able to query and set the DB items
- * directly if for some reason the admin panel is not available and a system
- * setting requires modification.
- *
- */
-
-
-// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
-// It can be changed later and only applies to timestamps for anonymous viewers.
-
-App::$config['system']['timezone'] = '{{$timezone}}';
-
-// What is your site name?
-
-App::$config['system']['baseurl'] = '{{$siteurl}}';
-App::$config['system']['sitename'] = "Hubzilla";
-App::$config['system']['location_hash'] = '{{$site_id}}';
-
-// These lines set additional security headers to be sent with all responses
-// You may wish to set transport_security_header to 0 if your server already sends
-// this header. content_security_policy may need to be disabled if you wish to
-// run the piwik analytics plugin or include other offsite resources on a page
-
-App::$config['system']['transport_security_header'] = 1;
-App::$config['system']['content_security_policy'] = 1;
-
-
-// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
-// Be certain to create your own personal account before setting
-// REGISTER_CLOSED. 'register_text' (if set) will be displayed prominently on
-// the registration page. REGISTER_APPROVE requires you set 'admin_email'
-// to the email address of an already registered person who can authorise
-// and/or approve/deny the request.
-
-App::$config['system']['register_policy'] = REGISTER_OPEN;
-App::$config['system']['register_text'] = '';
-App::$config['system']['admin_email'] = '{{$adminmail}}';
-
-
-// Site access restrictions. By default we will create private sites.
-// Your choices are ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED, and ACCESS_FREE.
-// If you leave REGISTER_OPEN above, anybody may register on your
-// site, however your site will not be listed anywhere as an open
-// registration hub. We will use the system access policy (below)
-// to determine whether or not to list your site in the directory
-// as an open hub where anybody may create accounts. Your choice of
-// paid, tiered, or free determines how these listings will be presented.
-
-
-App::$config['system']['access_policy'] = ACCESS_PRIVATE;
-
-// If you operate a public site, you might wish that people are directed
-// to a "sellpage" where you can describe for features or policies or service plans in depth.
-// This must be an absolute URL beginning with http:// or https:// .
-
-App::$config['system']['sellpage'] = '';
-
-// Maximum size of an imported message, 0 is unlimited
-// FIXME - NOT currently implemented.
-
-App::$config['system']['max_import_size'] = 200000;
-
-// Location of PHP command line processor
-
-App::$config['system']['php_path'] = '{{$phpath}}';
-
-// Configure how we communicate with directory servers.
-// DIRECTORY_MODE_NORMAL = directory client, we will find a directory
-// DIRECTORY_MODE_SECONDARY = caching directory or mirror
-// DIRECTORY_MODE_PRIMARY = main directory server
-// DIRECTORY_MODE_STANDALONE = "off the grid" or private directory services
-
-App::$config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL;
-
-// default system theme
-
-App::$config['system']['theme'] = 'redbasic';
-
-
-// PHP error logging setup
-// Before doing this ensure that the webserver has permission
-// to create and write to php.out in the top level Red directory,
-// or change the name (below) to a file/path where this is allowed.
-
-// Uncomment the following 4 lines to turn on PHP error logging.
-//error_reporting(E_ALL & ~E_WARNING & ~E_PARSE & ~E_NOTICE & ~E_DEPRECATED);
-//ini_set('error_log','php.out');
-//ini_set('log_errors','1');
-//ini_set('display_errors', '0');
diff --git a/view/en-gb/htconfig.tpl b/view/en-gb/htconfig.tpl
deleted file mode 100644
index 4cf2eab6e..000000000
--- a/view/en-gb/htconfig.tpl
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-// Set the following for your MySQL installation
-// Copy or rename this file to .htconfig.php
-
-$db_host = '{{$dbhost}}';
-$db_port = '{{$dbport}}';
-$db_user = '{{$dbuser}}';
-$db_pass = '{{$dbpass}}';
-$db_data = '{{$dbdata}}';
-$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
-
-/*
- * Notice: Many of the following settings will be available in the admin panel
- * after a successful site install. Once they are set in the admin panel, they
- * are stored in the DB - and the DB setting will over-ride any corresponding
- * setting in this file
- *
- * The command-line tool util/config is able to query and set the DB items
- * directly if for some reason the admin panel is not available and a system
- * setting requires modification.
- *
- */
-
-
-// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
-// It can be changed later and only applies to timestamps for anonymous viewers.
-
-App::$config['system']['timezone'] = '{{$timezone}}';
-
-// What is your site name?
-
-App::$config['system']['baseurl'] = '{{$siteurl}}';
-App::$config['system']['sitename'] = "Hubzilla";
-App::$config['system']['location_hash'] = '{{$site_id}}';
-
-// These lines set additional security headers to be sent with all responses
-// You may wish to set transport_security_header to 0 if your server already sends
-// this header. content_security_policy may need to be disabled if you wish to
-// run the piwik analytics plugin or include other offsite resources on a page
-
-App::$config['system']['transport_security_header'] = 1;
-App::$config['system']['content_security_policy'] = 1;
-
-// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
-// Be certain to create your own personal account before setting
-// REGISTER_CLOSED. 'register_text' (if set) will be displayed prominently on
-// the registration page. REGISTER_APPROVE requires you set 'admin_email'
-// to the email address of an already registered person who can authorise
-// and/or approve/deny the request.
-
-App::$config['system']['register_policy'] = REGISTER_OPEN;
-App::$config['system']['register_text'] = '';
-App::$config['system']['admin_email'] = '{{$adminmail}}';
-
-
-// Site access restrictions. By default we will create private sites.
-// Your choices are ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED, and ACCESS_FREE.
-// If you leave REGISTER_OPEN above, anybody may register on your
-// site, however your site will not be listed anywhere as an open
-// registration hub. We will use the system access policy (below)
-// to determine whether or not to list your site in the directory
-// as an open hub where anybody may create accounts. Your choice of
-// paid, tiered, or free determines how these listings will be presented.
-
-
-App::$config['system']['access_policy'] = ACCESS_PRIVATE;
-
-// If you operate a public site, you might wish that people are directed
-// to a "sellpage" where you can describe for features or policies or service plans in depth.
-// This must be an absolute URL beginning with http:// or https:// .
-
-App::$config['system']['sellpage'] = '';
-
-// Maximum size of an imported message, 0 is unlimited
-// FIXME - NOT currently implemented.
-
-App::$config['system']['max_import_size'] = 200000;
-
-// Location of PHP command line processor
-
-App::$config['system']['php_path'] = '{{$phpath}}';
-
-// Configure how we communicate with directory servers.
-// DIRECTORY_MODE_NORMAL = directory client, we will find a directory
-// DIRECTORY_MODE_SECONDARY = caching directory or mirror
-// DIRECTORY_MODE_PRIMARY = main directory server
-// DIRECTORY_MODE_STANDALONE = "off the grid" or private directory services
-
-App::$config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL;
-
-// default system theme
-
-App::$config['system']['theme'] = 'redbasic';
-
-
-// PHP error logging setup
-// Before doing this ensure that the webserver has permission
-// to create and write to php.out in the top level Red directory,
-// or change the name (below) to a file/path where this is allowed.
-
-// Uncomment the following 4 lines to turn on PHP error logging.
-//error_reporting(E_ALL & ~E_WARNING & ~E_PARSE & ~E_NOTICE & ~E_DEPRECATED);
-//ini_set('error_log','php.out');
-//ini_set('log_errors','1');
-//ini_set('display_errors', '0');
diff --git a/view/en/htconfig.tpl b/view/en/htconfig.tpl
index 6fa86d9ac..3973e7f9b 100644
--- a/view/en/htconfig.tpl
+++ b/view/en/htconfig.tpl
@@ -10,6 +10,12 @@ $db_pass = '{{$dbpass}}';
$db_data = '{{$dbdata}}';
$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
+// Set this to 1 if your DB backend supports skip locked.
+// This is known to be the case for
+// postgresql > 9.5, mysql > 8.0 and mariadb > 10.6
+App::$config['system']['db_skip_locked_supported'] = 0;
+
+
/*
* Notice: Many of the following settings will be available in the admin panel
* after a successful site install. Once they are set in the admin panel, they
diff --git a/view/es-es/hmessages.po b/view/es-es/hmessages.po
index 9e35cce67..fb9f218f4 100644
--- a/view/es-es/hmessages.po
+++ b/view/es-es/hmessages.po
@@ -1,12 +1,12 @@
# hubzilla
# Copyright (C) 2012-2016 hubzilla
# This file is distributed under the same license as the hubzilla package.
-#
+#
# Translators:
# Alfonso Martínez, 2015
# inboxwall <axetransit@gmail.com>, 2015
# 0019cac9045ba5ad44f6e8f0d6edc0ee_372278a, 2015
-# Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017-2022
+# Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017-2023
# Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2015-2017
# Rafael, 2015
# tony baldwin <tonybaldwin@gmx.com>, 2014
@@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: hubzilla\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-09-26 07:09+0000\n"
+"POT-Creation-Date: 2023-01-05 11:32+0100\n"
"PO-Revision-Date: 2015-09-27 06:48+0000\n"
-"Last-Translator: Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017-2022\n"
+"Last-Translator: Manuel Jiménez Friaza <mjfriaza@disroot.org>, 2017-2023\n"
"Language-Team: Spanish (Spain) (http://www.transifex.com/Friendica/hubzilla/language/es_ES/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -24,12 +24,12 @@ msgstr ""
"Language: es_ES\n"
"Plural-Forms: nplurals=2; plural=(n != 1 ? 1 : 0);\n"
-#: ../../view/theme/redbasic/php/config.php:15
+#: ../../view/theme/redbasic/php/config.php:15 ../../include/text.php:3466
#: ../../addon/cart/submodules/orderoptions.php:335
#: ../../addon/cart/submodules/orderoptions.php:359
#: ../../addon/cart/submodules/orderoptions.php:435
#: ../../addon/cart/submodules/orderoptions.php:459
-#: ../../include/text.php:3461 ../../Zotlabs/Module/Admin/Site.php:251
+#: ../../Zotlabs/Module/Admin/Site.php:251
msgid "Default"
msgstr "Predeterminado"
@@ -38,2683 +38,4161 @@ msgstr "Predeterminado"
msgid "Focus (Hubzilla default)"
msgstr "Focus (predefinido)"
-#: ../../view/theme/redbasic/php/config.php:96
+#: ../../view/theme/redbasic/php/config.php:98 ../../include/js_strings.php:23
+#: ../../addon/piwik/piwik.php:95 ../../addon/hubwall/hubwall.php:95
+#: ../../addon/pageheader/Mod_Pageheader.php:52
+#: ../../addon/twitter/Mod_Twitter.php:182
+#: ../../addon/startpage/Mod_Startpage.php:71
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:62
+#: ../../addon/libertree/Mod_Libertree.php:68
+#: ../../addon/nofed/Mod_Nofed.php:51 ../../addon/workflow/workflow.php:1466
+#: ../../addon/workflow/workflow.php:1525
+#: ../../addon/workflow/workflow.php:1644
+#: ../../addon/workflow/workflow.php:2747
+#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:94
+#: ../../addon/xmpp/Mod_Xmpp.php:70
#: ../../addon/channelreputation/channelreputation.php:143
-#: ../../addon/wiki/Widget/Wiki_pages.php:43
-#: ../../addon/wiki/Widget/Wiki_pages.php:100
-#: ../../addon/wiki/Mod_Wiki.php:218
-#: ../../addon/openclipatar/openclipatar.php:54
#: ../../addon/photocache/Mod_Photocache.php:63
+#: ../../addon/dwpost/Mod_Dwpost.php:78
+#: ../../addon/skeleton/Mod_Skeleton.php:49 ../../addon/hzfiles/hzfiles.php:86
+#: ../../addon/openstreetmap/openstreetmap.php:155
#: ../../addon/redred/Mod_Redred.php:88
+#: ../../addon/socialauth/Mod_SocialAuth.php:341
+#: ../../addon/flashcards/Mod_Flashcards.php:269 ../../addon/irc/irc.php:45
+#: ../../addon/wppost/Mod_Wppost.php:107 ../../addon/pumpio/Mod_Pumpio.php:113
+#: ../../addon/ijpost/Mod_Ijpost.php:72 ../../addon/mailtest/mailtest.php:100
+#: ../../addon/logrot/logrot.php:35 ../../addon/nsfw/Mod_Nsfw.php:59
+#: ../../addon/wiki/Mod_Wiki.php:218 ../../addon/wiki/Mod_Wiki.php:907
+#: ../../addon/wiki/Widget/Wiki_pages.php:69
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:54 ../../addon/diaspora/diaspora.php:87
+#: ../../addon/diaspora/Mod_Diaspora.php:100
+#: ../../addon/openclipatar/openclipatar.php:54
+#: ../../addon/likebanner/likebanner.php:57
#: ../../addon/redphotos/redphotos.php:136
+#: ../../addon/ljpost/Mod_Ljpost.php:80
+#: ../../addon/smileybutton/Mod_Smileybutton.php:53
#: ../../addon/statusnet/Mod_Statusnet.php:191
#: ../../addon/statusnet/Mod_Statusnet.php:249
#: ../../addon/statusnet/Mod_Statusnet.php:304
-#: ../../addon/statusnet/statusnet.php:602 ../../addon/rtof/Mod_Rtof.php:70
-#: ../../addon/wppost/Mod_Wppost.php:107
-#: ../../addon/content_import/Mod_content_import.php:141
-#: ../../addon/openstreetmap/openstreetmap.php:155
-#: ../../addon/ijpost/Mod_Ijpost.php:72
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:62
-#: ../../addon/dwpost/Mod_Dwpost.php:78
-#: ../../addon/startpage/Mod_Startpage.php:71
-#: ../../addon/twitter/Mod_Twitter.php:182
-#: ../../addon/pumpio/Mod_Pumpio.php:113
-#: ../../addon/cart/submodules/subscriptions.php:410
+#: ../../addon/statusnet/statusnet.php:602
#: ../../addon/cart/submodules/hzservices.php:645
+#: ../../addon/cart/submodules/manualcat.php:248
+#: ../../addon/cart/submodules/subscriptions.php:410
#: ../../addon/cart/submodules/orderoptions.php:312
#: ../../addon/cart/submodules/orderoptions.php:412
-#: ../../addon/cart/submodules/manualcat.php:248
-#: ../../addon/cart/Settings/Cart.php:132
-#: ../../addon/cart/Settings/Cart.php:142 ../../addon/cart/cart.php:1376
-#: ../../addon/nofed/Mod_Nofed.php:51
-#: ../../addon/smileybutton/Mod_Smileybutton.php:53
-#: ../../addon/redfiles/redfiles.php:124 ../../addon/diaspora/diaspora.php:87
-#: ../../addon/diaspora/Mod_Diaspora.php:100 ../../addon/piwik/piwik.php:95
-#: ../../addon/workflow/workflow.php:1466
-#: ../../addon/workflow/workflow.php:1525
-#: ../../addon/workflow/workflow.php:1644
-#: ../../addon/workflow/workflow.php:2747
-#: ../../addon/workflow/Settings/Mod_WorkflowSettings.php:94
-#: ../../addon/likebanner/likebanner.php:57
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:54 ../../addon/hubwall/hubwall.php:95
-#: ../../addon/flashcards/Mod_Flashcards.php:269
-#: ../../addon/libertree/Mod_Libertree.php:68 ../../addon/logrot/logrot.php:35
-#: ../../addon/skeleton/Mod_Skeleton.php:49
-#: ../../addon/socialauth/Mod_SocialAuth.php:341
-#: ../../addon/nsfw/Mod_Nsfw.php:59 ../../addon/mailtest/mailtest.php:100
-#: ../../addon/ljpost/Mod_Ljpost.php:80 ../../addon/hzfiles/hzfiles.php:86
-#: ../../addon/pageheader/Mod_Pageheader.php:52 ../../addon/irc/irc.php:45
-#: ../../addon/xmpp/Mod_Xmpp.php:70 ../../include/js_strings.php:23
-#: ../../Zotlabs/Module/Tokens.php:294
+#: ../../addon/cart/cart.php:1376 ../../addon/cart/Settings/Cart.php:132
+#: ../../addon/cart/Settings/Cart.php:142
+#: ../../addon/redfiles/redfiles.php:124 ../../addon/rtof/Mod_Rtof.php:70
+#: ../../addon/content_import/Mod_content_import.php:141
+#: ../../Zotlabs/Lib/ThreadItem.php:828 ../../Zotlabs/Module/Locs.php:125
+#: ../../Zotlabs/Module/Invite.php:563 ../../Zotlabs/Module/Poke.php:199
+#: ../../Zotlabs/Module/Xchan.php:15
+#: ../../Zotlabs/Module/Email_validation.php:40
+#: ../../Zotlabs/Module/Connect.php:107 ../../Zotlabs/Module/Oauth2.php:114
+#: ../../Zotlabs/Module/Mitem.php:259 ../../Zotlabs/Module/Appman.php:220
#: ../../Zotlabs/Module/Import_items.php:125
-#: ../../Zotlabs/Module/Import.php:611 ../../Zotlabs/Module/Setup.php:316
-#: ../../Zotlabs/Module/Setup.php:356 ../../Zotlabs/Module/Group.php:150
-#: ../../Zotlabs/Module/Group.php:159 ../../Zotlabs/Module/Oauth.php:109
-#: ../../Zotlabs/Module/Chat.php:207 ../../Zotlabs/Module/Chat.php:246
-#: ../../Zotlabs/Module/Poke.php:215 ../../Zotlabs/Module/Mitem.php:259
-#: ../../Zotlabs/Module/Filestorage.php:208
-#: ../../Zotlabs/Module/Connect.php:107 ../../Zotlabs/Module/Editpost.php:86
-#: ../../Zotlabs/Module/Admin/Themes.php:158
+#: ../../Zotlabs/Module/Oauth.php:109 ../../Zotlabs/Module/Permcats.php:257
+#: ../../Zotlabs/Module/Mood.php:156 ../../Zotlabs/Module/Import.php:611
+#: ../../Zotlabs/Module/Tokens.php:294 ../../Zotlabs/Module/Pconfig.php:117
+#: ../../Zotlabs/Module/Chat.php:208 ../../Zotlabs/Module/Chat.php:247
+#: ../../Zotlabs/Module/Affinity.php:84 ../../Zotlabs/Module/Sources.php:123
+#: ../../Zotlabs/Module/Sources.php:160 ../../Zotlabs/Module/Regate.php:407
+#: ../../Zotlabs/Module/Connedit.php:714
+#: ../../Zotlabs/Module/Admin/Channels.php:147
#: ../../Zotlabs/Module/Admin/Features.php:66
-#: ../../Zotlabs/Module/Admin/Security.php:120
+#: ../../Zotlabs/Module/Admin/Account_edit.php:73
#: ../../Zotlabs/Module/Admin/Accounts.php:309
+#: ../../Zotlabs/Module/Admin/Themes.php:158
#: ../../Zotlabs/Module/Admin/Site.php:415
-#: ../../Zotlabs/Module/Admin/Logs.php:84
-#: ../../Zotlabs/Module/Admin/Channels.php:147
-#: ../../Zotlabs/Module/Admin/Account_edit.php:73
#: ../../Zotlabs/Module/Admin/Profs.php:178
-#: ../../Zotlabs/Module/Admin/Addons.php:442
-#: ../../Zotlabs/Module/Regate.php:407 ../../Zotlabs/Module/Permcats.php:257
-#: ../../Zotlabs/Module/Mood.php:156 ../../Zotlabs/Module/Appman.php:221
+#: ../../Zotlabs/Module/Admin/Logs.php:84
+#: ../../Zotlabs/Module/Admin/Addons.php:445
+#: ../../Zotlabs/Module/Admin/Security.php:120
#: ../../Zotlabs/Module/Contactedit.php:429
#: ../../Zotlabs/Module/Contactedit.php:462
-#: ../../Zotlabs/Module/Email_validation.php:40
-#: ../../Zotlabs/Module/Photos.php:1064 ../../Zotlabs/Module/Photos.php:1104
-#: ../../Zotlabs/Module/Photos.php:1220 ../../Zotlabs/Module/Profiles.php:740
-#: ../../Zotlabs/Module/Invite.php:550 ../../Zotlabs/Module/Xchan.php:15
-#: ../../Zotlabs/Module/Affinity.php:84
-#: ../../Zotlabs/Module/Settings/Network.php:62
+#: ../../Zotlabs/Module/Settings/Directory.php:42
#: ../../Zotlabs/Module/Settings/Features.php:48
-#: ../../Zotlabs/Module/Settings/Channel.php:228
+#: ../../Zotlabs/Module/Settings/Display.php:186
+#: ../../Zotlabs/Module/Settings/Conversation.php:49
+#: ../../Zotlabs/Module/Settings/Channel_home.php:91
+#: ../../Zotlabs/Module/Settings/Connections.php:42
#: ../../Zotlabs/Module/Settings/Account.php:107
+#: ../../Zotlabs/Module/Settings/Channel.php:229
+#: ../../Zotlabs/Module/Settings/Editor.php:42
+#: ../../Zotlabs/Module/Settings/Network.php:62
#: ../../Zotlabs/Module/Settings/Events.php:42
-#: ../../Zotlabs/Module/Settings/Manage.php:43
-#: ../../Zotlabs/Module/Settings/Channel_home.php:91
#: ../../Zotlabs/Module/Settings/Calendar.php:42
-#: ../../Zotlabs/Module/Settings/Display.php:186
-#: ../../Zotlabs/Module/Settings/Directory.php:42
-#: ../../Zotlabs/Module/Settings/Editor.php:42
-#: ../../Zotlabs/Module/Settings/Connections.php:42
-#: ../../Zotlabs/Module/Settings/Photos.php:42
#: ../../Zotlabs/Module/Settings/Profiles.php:52
+#: ../../Zotlabs/Module/Settings/Photos.php:42
#: ../../Zotlabs/Module/Settings/Privacy.php:110
-#: ../../Zotlabs/Module/Settings/Conversation.php:49
-#: ../../Zotlabs/Module/Defperms.php:263 ../../Zotlabs/Module/Pconfig.php:116
-#: ../../Zotlabs/Module/Oauth2.php:114 ../../Zotlabs/Module/Thing.php:328
-#: ../../Zotlabs/Module/Thing.php:381 ../../Zotlabs/Module/Pdledit.php:106
-#: ../../Zotlabs/Module/Connedit.php:714 ../../Zotlabs/Module/Locs.php:125
-#: ../../Zotlabs/Module/Sources.php:123 ../../Zotlabs/Module/Sources.php:160
-#: ../../Zotlabs/Lib/ThreadItem.php:835 ../../Zotlabs/Storage/Browser.php:382
+#: ../../Zotlabs/Module/Settings/Manage.php:43
+#: ../../Zotlabs/Module/Profiles.php:740
+#: ../../Zotlabs/Module/Filestorage.php:208
+#: ../../Zotlabs/Module/Pdledit.php:137 ../../Zotlabs/Module/Defperms.php:262
+#: ../../Zotlabs/Module/Thing.php:328 ../../Zotlabs/Module/Thing.php:381
+#: ../../Zotlabs/Module/Setup.php:316 ../../Zotlabs/Module/Setup.php:356
+#: ../../Zotlabs/Module/Group.php:150 ../../Zotlabs/Module/Group.php:159
+#: ../../Zotlabs/Module/Editpost.php:88 ../../Zotlabs/Module/Photos.php:1053
+#: ../../Zotlabs/Module/Photos.php:1093 ../../Zotlabs/Module/Photos.php:1206
+#: ../../Zotlabs/Storage/Browser.php:385
msgid "Submit"
msgstr "Enviar"
-#: ../../view/theme/redbasic/php/config.php:100
+#: ../../view/theme/redbasic/php/config.php:102
msgid "Theme settings"
msgstr "Ajustes del tema"
-#: ../../view/theme/redbasic/php/config.php:101
+#: ../../view/theme/redbasic/php/config.php:103
msgid "Narrow navbar"
msgstr "Estrechar la barra de navegación"
-#: ../../view/theme/redbasic/php/config.php:101
-#: ../../view/theme/redbasic/php/config.php:119
+#: ../../view/theme/redbasic/php/config.php:103
+#: ../../view/theme/redbasic/php/config.php:121 ../../boot.php:1753
+#: ../../include/conversation.php:1477 ../../addon/twitter/Mod_Twitter.php:160
+#: ../../addon/twitter/Mod_Twitter.php:169
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
+#: ../../addon/libertree/Mod_Libertree.php:57
+#: ../../addon/nofed/Mod_Nofed.php:40
#: ../../addon/channelreputation/channelreputation.php:111
-#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231
+#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
#: ../../addon/redred/Mod_Redred.php:61
+#: ../../addon/socialauth/Mod_SocialAuth.php:218
+#: ../../addon/wppost/Mod_Wppost.php:84 ../../addon/wppost/Mod_Wppost.php:88
+#: ../../addon/wppost/Mod_Wppost.php:92 ../../addon/pumpio/Mod_Pumpio.php:92
+#: ../../addon/pumpio/Mod_Pumpio.php:96 ../../addon/pumpio/Mod_Pumpio.php:100
+#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/wiki/Mod_Wiki.php:230
+#: ../../addon/wiki/Mod_Wiki.php:231 ../../addon/diaspora/Mod_Diaspora.php:70
+#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
+#: ../../addon/ljpost/Mod_Ljpost.php:69
+#: ../../addon/smileybutton/Mod_Smileybutton.php:42
#: ../../addon/statusnet/Mod_Statusnet.php:258
#: ../../addon/statusnet/Mod_Statusnet.php:280
#: ../../addon/statusnet/Mod_Statusnet.php:289
-#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/wppost/Mod_Wppost.php:84
-#: ../../addon/wppost/Mod_Wppost.php:88 ../../addon/wppost/Mod_Wppost.php:92
-#: ../../addon/content_import/Mod_content_import.php:136
-#: ../../addon/content_import/Mod_content_import.php:137
-#: ../../addon/ijpost/Mod_Ijpost.php:61
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
-#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
-#: ../../addon/twitter/Mod_Twitter.php:160
-#: ../../addon/twitter/Mod_Twitter.php:169
-#: ../../addon/pumpio/Mod_Pumpio.php:92 ../../addon/pumpio/Mod_Pumpio.php:96
-#: ../../addon/pumpio/Mod_Pumpio.php:100
-#: ../../addon/cart/submodules/subscriptions.php:153
-#: ../../addon/cart/submodules/subscriptions.php:425
+#: ../../addon/cart/submodules/paypalbutton.php:87
+#: ../../addon/cart/submodules/paypalbutton.php:95
+#: ../../addon/cart/submodules/paypalbuttonV2.php:88
+#: ../../addon/cart/submodules/paypalbuttonV2.php:96
#: ../../addon/cart/submodules/hzservices.php:67
#: ../../addon/cart/submodules/hzservices.php:651
#: ../../addon/cart/submodules/hzservices.php:655
+#: ../../addon/cart/submodules/manualcat.php:63
+#: ../../addon/cart/submodules/manualcat.php:254
+#: ../../addon/cart/submodules/manualcat.php:258
+#: ../../addon/cart/submodules/subscriptions.php:153
+#: ../../addon/cart/submodules/subscriptions.php:425
#: ../../addon/cart/submodules/orderoptions.php:72
#: ../../addon/cart/submodules/orderoptions.php:338
#: ../../addon/cart/submodules/orderoptions.php:362
#: ../../addon/cart/submodules/orderoptions.php:438
#: ../../addon/cart/submodules/orderoptions.php:462
-#: ../../addon/cart/submodules/paypalbutton.php:87
-#: ../../addon/cart/submodules/paypalbutton.php:95
-#: ../../addon/cart/submodules/paypalbuttonV2.php:88
-#: ../../addon/cart/submodules/paypalbuttonV2.php:96
-#: ../../addon/cart/submodules/manualcat.php:63
-#: ../../addon/cart/submodules/manualcat.php:254
-#: ../../addon/cart/submodules/manualcat.php:258
-#: ../../addon/cart/Settings/Cart.php:61 ../../addon/cart/Settings/Cart.php:73
-#: ../../addon/cart/cart.php:1370 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
-#: ../../addon/diaspora/Mod_Diaspora.php:70
-#: ../../addon/libertree/Mod_Libertree.php:57
-#: ../../addon/socialauth/Mod_SocialAuth.php:218
-#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
-#: ../../addon/ljpost/Mod_Ljpost.php:69 ../../include/conversation.php:1475
+#: ../../addon/cart/cart.php:1370 ../../addon/cart/Settings/Cart.php:61
+#: ../../addon/cart/Settings/Cart.php:73 ../../addon/rtof/Mod_Rtof.php:47
+#: ../../addon/content_import/Mod_content_import.php:136
+#: ../../addon/content_import/Mod_content_import.php:137
+#: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Module/Register.php:512
+#: ../../Zotlabs/Module/Api.php:99 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
+#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247
+#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Register.php:512
-#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:138
-#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
-#: ../../Zotlabs/Module/Group.php:301 ../../Zotlabs/Module/Group.php:302
-#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177
-#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257
-#: ../../Zotlabs/Module/Filestorage.php:203
-#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Sources.php:122
+#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Module/Connedit.php:622
#: ../../Zotlabs/Module/Admin/Site.php:319
-#: ../../Zotlabs/Module/Permcats.php:247
#: ../../Zotlabs/Module/Contactedit.php:284
-#: ../../Zotlabs/Module/Contactedit.php:329 ../../Zotlabs/Module/Api.php:99
-#: ../../Zotlabs/Module/Photos.php:677 ../../Zotlabs/Module/Profiles.php:676
-#: ../../Zotlabs/Module/Profiles.php:686 ../../Zotlabs/Module/Profiles.php:694
-#: ../../Zotlabs/Module/Profiles.php:698
-#: ../../Zotlabs/Module/Settings/Channel.php:223
+#: ../../Zotlabs/Module/Contactedit.php:329
#: ../../Zotlabs/Module/Settings/Display.php:86
+#: ../../Zotlabs/Module/Settings/Channel.php:224
#: ../../Zotlabs/Module/Settings/Privacy.php:120
#: ../../Zotlabs/Module/Settings/Privacy.php:121
#: ../../Zotlabs/Module/Settings/Privacy.php:122
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Connedit.php:622
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-#: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166
-#: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Storage/Browser.php:310
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:312
-#: ../../Zotlabs/Storage/Browser.php:389 ../../Zotlabs/Storage/Browser.php:391
-#: ../../Zotlabs/Storage/Browser.php:552 ../../boot.php:1753
+#: ../../Zotlabs/Module/Profiles.php:676 ../../Zotlabs/Module/Profiles.php:686
+#: ../../Zotlabs/Module/Profiles.php:694 ../../Zotlabs/Module/Profiles.php:698
+#: ../../Zotlabs/Module/Filestorage.php:203
+#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Group.php:137
+#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
+#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
+#: ../../Zotlabs/Module/Group.php:302 ../../Zotlabs/Module/Photos.php:666
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
+#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:392
+#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
msgid "No"
msgstr "No"
-#: ../../view/theme/redbasic/php/config.php:101
-#: ../../view/theme/redbasic/php/config.php:119
+#: ../../view/theme/redbasic/php/config.php:103
+#: ../../view/theme/redbasic/php/config.php:121 ../../boot.php:1753
+#: ../../include/conversation.php:1477 ../../addon/twitter/Mod_Twitter.php:160
+#: ../../addon/twitter/Mod_Twitter.php:169
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
+#: ../../addon/libertree/Mod_Libertree.php:57
+#: ../../addon/nofed/Mod_Nofed.php:40
#: ../../addon/channelreputation/channelreputation.php:111
-#: ../../addon/wiki/Mod_Wiki.php:230 ../../addon/wiki/Mod_Wiki.php:231
+#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
#: ../../addon/redred/Mod_Redred.php:61
+#: ../../addon/socialauth/Mod_SocialAuth.php:218
+#: ../../addon/wppost/Mod_Wppost.php:84 ../../addon/wppost/Mod_Wppost.php:88
+#: ../../addon/wppost/Mod_Wppost.php:92 ../../addon/pumpio/Mod_Pumpio.php:92
+#: ../../addon/pumpio/Mod_Pumpio.php:96 ../../addon/pumpio/Mod_Pumpio.php:100
+#: ../../addon/ijpost/Mod_Ijpost.php:61 ../../addon/wiki/Mod_Wiki.php:230
+#: ../../addon/wiki/Mod_Wiki.php:231 ../../addon/diaspora/Mod_Diaspora.php:70
+#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
+#: ../../addon/ljpost/Mod_Ljpost.php:69
+#: ../../addon/smileybutton/Mod_Smileybutton.php:42
#: ../../addon/statusnet/Mod_Statusnet.php:258
#: ../../addon/statusnet/Mod_Statusnet.php:280
#: ../../addon/statusnet/Mod_Statusnet.php:289
-#: ../../addon/rtof/Mod_Rtof.php:47 ../../addon/wppost/Mod_Wppost.php:84
-#: ../../addon/wppost/Mod_Wppost.php:88 ../../addon/wppost/Mod_Wppost.php:92
-#: ../../addon/content_import/Mod_content_import.php:136
-#: ../../addon/content_import/Mod_content_import.php:137
-#: ../../addon/ijpost/Mod_Ijpost.php:61
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:42
-#: ../../addon/dwpost/Mod_Dwpost.php:59 ../../addon/dwpost/Mod_Dwpost.php:63
-#: ../../addon/twitter/Mod_Twitter.php:160
-#: ../../addon/twitter/Mod_Twitter.php:169
-#: ../../addon/pumpio/Mod_Pumpio.php:92 ../../addon/pumpio/Mod_Pumpio.php:96
-#: ../../addon/pumpio/Mod_Pumpio.php:100
-#: ../../addon/cart/submodules/subscriptions.php:153
-#: ../../addon/cart/submodules/subscriptions.php:425
+#: ../../addon/cart/submodules/paypalbutton.php:87
+#: ../../addon/cart/submodules/paypalbutton.php:95
+#: ../../addon/cart/submodules/paypalbuttonV2.php:88
+#: ../../addon/cart/submodules/paypalbuttonV2.php:96
#: ../../addon/cart/submodules/hzservices.php:67
#: ../../addon/cart/submodules/hzservices.php:651
#: ../../addon/cart/submodules/hzservices.php:655
+#: ../../addon/cart/submodules/manualcat.php:63
+#: ../../addon/cart/submodules/manualcat.php:254
+#: ../../addon/cart/submodules/manualcat.php:258
+#: ../../addon/cart/submodules/subscriptions.php:153
+#: ../../addon/cart/submodules/subscriptions.php:425
#: ../../addon/cart/submodules/orderoptions.php:72
#: ../../addon/cart/submodules/orderoptions.php:337
#: ../../addon/cart/submodules/orderoptions.php:361
#: ../../addon/cart/submodules/orderoptions.php:437
#: ../../addon/cart/submodules/orderoptions.php:461
-#: ../../addon/cart/submodules/paypalbutton.php:87
-#: ../../addon/cart/submodules/paypalbutton.php:95
-#: ../../addon/cart/submodules/paypalbuttonV2.php:88
-#: ../../addon/cart/submodules/paypalbuttonV2.php:96
-#: ../../addon/cart/submodules/manualcat.php:63
-#: ../../addon/cart/submodules/manualcat.php:254
-#: ../../addon/cart/submodules/manualcat.php:258
-#: ../../addon/cart/Settings/Cart.php:61 ../../addon/cart/Settings/Cart.php:73
-#: ../../addon/cart/cart.php:1370 ../../addon/nofed/Mod_Nofed.php:40
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
-#: ../../addon/diaspora/Mod_Diaspora.php:70
-#: ../../addon/libertree/Mod_Libertree.php:57
-#: ../../addon/socialauth/Mod_SocialAuth.php:218
-#: ../../addon/ljpost/Mod_Ljpost.php:61 ../../addon/ljpost/Mod_Ljpost.php:65
-#: ../../addon/ljpost/Mod_Ljpost.php:69 ../../include/conversation.php:1475
+#: ../../addon/cart/cart.php:1370 ../../addon/cart/Settings/Cart.php:61
+#: ../../addon/cart/Settings/Cart.php:73 ../../addon/rtof/Mod_Rtof.php:47
+#: ../../addon/content_import/Mod_content_import.php:136
+#: ../../addon/content_import/Mod_content_import.php:137
+#: ../../Zotlabs/Lib/Libzotdir.php:165 ../../Zotlabs/Lib/Libzotdir.php:166
+#: ../../Zotlabs/Lib/Libzotdir.php:168 ../../Zotlabs/Module/Register.php:512
+#: ../../Zotlabs/Module/Api.php:98 ../../Zotlabs/Module/Mitem.php:176
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:256
+#: ../../Zotlabs/Module/Mitem.php:257 ../../Zotlabs/Module/Permcats.php:247
+#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
#: ../../Zotlabs/Module/Import.php:600 ../../Zotlabs/Module/Import.php:604
-#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Register.php:512
-#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:138
-#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
-#: ../../Zotlabs/Module/Group.php:301 ../../Zotlabs/Module/Group.php:302
-#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:177
-#: ../../Zotlabs/Module/Mitem.php:256 ../../Zotlabs/Module/Mitem.php:257
-#: ../../Zotlabs/Module/Filestorage.php:203
-#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Module/Import.php:605 ../../Zotlabs/Module/Sources.php:122
+#: ../../Zotlabs/Module/Sources.php:157
#: ../../Zotlabs/Module/Admin/Site.php:321
-#: ../../Zotlabs/Module/Permcats.php:247
-#: ../../Zotlabs/Module/Contactedit.php:284 ../../Zotlabs/Module/Api.php:98
-#: ../../Zotlabs/Module/Photos.php:677 ../../Zotlabs/Module/Profiles.php:676
-#: ../../Zotlabs/Module/Profiles.php:686 ../../Zotlabs/Module/Profiles.php:694
-#: ../../Zotlabs/Module/Profiles.php:698
-#: ../../Zotlabs/Module/Settings/Channel.php:223
+#: ../../Zotlabs/Module/Contactedit.php:284
#: ../../Zotlabs/Module/Settings/Display.php:86
+#: ../../Zotlabs/Module/Settings/Channel.php:224
#: ../../Zotlabs/Module/Settings/Privacy.php:120
#: ../../Zotlabs/Module/Settings/Privacy.php:121
#: ../../Zotlabs/Module/Settings/Privacy.php:122
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Sources.php:122
-#: ../../Zotlabs/Module/Sources.php:157 ../../Zotlabs/Lib/Libzotdir.php:165
-#: ../../Zotlabs/Lib/Libzotdir.php:166 ../../Zotlabs/Lib/Libzotdir.php:168
+#: ../../Zotlabs/Module/Profiles.php:676 ../../Zotlabs/Module/Profiles.php:686
+#: ../../Zotlabs/Module/Profiles.php:694 ../../Zotlabs/Module/Profiles.php:698
+#: ../../Zotlabs/Module/Filestorage.php:203
+#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Module/Defperms.php:195 ../../Zotlabs/Module/Group.php:137
+#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:147
+#: ../../Zotlabs/Module/Group.php:249 ../../Zotlabs/Module/Group.php:301
+#: ../../Zotlabs/Module/Group.php:302 ../../Zotlabs/Module/Photos.php:666
#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:311
-#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:389
-#: ../../Zotlabs/Storage/Browser.php:391 ../../Zotlabs/Storage/Browser.php:552
-#: ../../boot.php:1753
+#: ../../Zotlabs/Storage/Browser.php:312 ../../Zotlabs/Storage/Browser.php:392
+#: ../../Zotlabs/Storage/Browser.php:394 ../../Zotlabs/Storage/Browser.php:558
msgid "Yes"
msgstr "Sí"
-#: ../../view/theme/redbasic/php/config.php:102
+#: ../../view/theme/redbasic/php/config.php:104
msgid "Navigation bar background color"
msgstr "Color de fondo de la barra de navegación"
-#: ../../view/theme/redbasic/php/config.php:103
+#: ../../view/theme/redbasic/php/config.php:105
msgid "Navigation bar icon color "
msgstr "Color del icono de la barra de navegación"
-#: ../../view/theme/redbasic/php/config.php:104
+#: ../../view/theme/redbasic/php/config.php:106
msgid "Navigation bar active icon color "
msgstr "Color del icono activo de la barra de navegación"
-#: ../../view/theme/redbasic/php/config.php:105
+#: ../../view/theme/redbasic/php/config.php:107
msgid "Link color"
msgstr "Color del enlace"
-#: ../../view/theme/redbasic/php/config.php:106
+#: ../../view/theme/redbasic/php/config.php:108
msgid "Link hover color"
msgstr "Color de los enlaces al pasar por encima"
-#: ../../view/theme/redbasic/php/config.php:107
+#: ../../view/theme/redbasic/php/config.php:109
msgid "Set font-color for banner"
msgstr "Ajustar el color del tipo de letra para el \"banner\""
-#: ../../view/theme/redbasic/php/config.php:108
+#: ../../view/theme/redbasic/php/config.php:110
msgid "Set the background color"
msgstr "Ajustar el color de fondo"
-#: ../../view/theme/redbasic/php/config.php:109
+#: ../../view/theme/redbasic/php/config.php:111
msgid "Set the background image"
msgstr "Ajustar la imagen de fondo"
-#: ../../view/theme/redbasic/php/config.php:110
+#: ../../view/theme/redbasic/php/config.php:112
msgid "Set the background color of items"
msgstr "Ajustar el color de los elementos de fondo"
-#: ../../view/theme/redbasic/php/config.php:111
+#: ../../view/theme/redbasic/php/config.php:113
msgid "Set the background color of comments"
msgstr "Ajustar el color de fondo de los comentarios"
-#: ../../view/theme/redbasic/php/config.php:112
+#: ../../view/theme/redbasic/php/config.php:114
msgid "Set font-size for the entire application"
msgstr "Ajustar el tamaño de letra para toda la aplicación"
-#: ../../view/theme/redbasic/php/config.php:112
+#: ../../view/theme/redbasic/php/config.php:114
msgid "Examples: 1rem, 100%, 16px"
msgstr "Ejemplos: 1rem, 100%, 16px"
-#: ../../view/theme/redbasic/php/config.php:113
+#: ../../view/theme/redbasic/php/config.php:115
msgid "Set font-color for posts and comments"
msgstr "Establecer el color de la letra para publicaciones y comentarios"
-#: ../../view/theme/redbasic/php/config.php:114
+#: ../../view/theme/redbasic/php/config.php:116
msgid "Set radius of corners"
msgstr "Establecer el radio de curvatura de las esquinas"
-#: ../../view/theme/redbasic/php/config.php:114
+#: ../../view/theme/redbasic/php/config.php:116
msgid "Example: 4px"
msgstr "Ejemplo: 4px"
-#: ../../view/theme/redbasic/php/config.php:115
+#: ../../view/theme/redbasic/php/config.php:117
msgid "Set shadow depth of photos"
msgstr "Ajustar la profundidad de sombras de las fotos"
-#: ../../view/theme/redbasic/php/config.php:116
+#: ../../view/theme/redbasic/php/config.php:118
msgid "Set maximum width of content region in rem"
msgstr "Ajustar la anchura máxima de la región de contenido, en rem"
-#: ../../view/theme/redbasic/php/config.php:116
+#: ../../view/theme/redbasic/php/config.php:118
msgid "Leave empty for default width"
msgstr "Dejar en blanco para la anchura predeterminada"
-#: ../../view/theme/redbasic/php/config.php:117
+#: ../../view/theme/redbasic/php/config.php:119
msgid "Set size of conversation author photo"
msgstr "Ajustar el tamaño de la foto del autor de la conversación"
-#: ../../view/theme/redbasic/php/config.php:118
+#: ../../view/theme/redbasic/php/config.php:120
msgid "Set size of followup author photos"
msgstr "Ajustar el tamaño de foto de los seguidores del autor"
-#: ../../view/theme/redbasic/php/config.php:119
+#: ../../view/theme/redbasic/php/config.php:121
msgid "Show advanced settings"
msgstr "Mostrar ajustes avanzados"
-#: ../../util/nconfig.php:34
-msgid "Source channel not found."
-msgstr "No se ha encontrado el canal de origen."
+#: ../../boot.php:1724
+msgid "Create an account to access services and applications"
+msgstr "Crear una cuenta para acceder a los servicios y aplicaciones"
-#: ../../addon/channelreputation/channelreputation.php:101
-#: ../../addon/channelreputation/channelreputation.php:102
-#: ../../addon/cart/myshop.php:144 ../../addon/cart/myshop.php:180
-#: ../../addon/cart/myshop.php:214 ../../addon/cart/myshop.php:261
-#: ../../addon/cart/myshop.php:296 ../../addon/cart/myshop.php:319
-msgid "Access Denied"
-msgstr "Acceso denegado"
+#: ../../boot.php:1725 ../../include/nav.php:167
+#: ../../Zotlabs/Module/Register.php:542
+msgid "Register"
+msgstr "Registrarse"
-#: ../../addon/channelreputation/channelreputation.php:109
-msgid "Enable Community Moderation"
-msgstr "Habilitar la moderación de la comunidad"
+#: ../../boot.php:1742
+msgid "Email or nickname"
+msgstr "Correo electrónico o apodo"
-#: ../../addon/channelreputation/channelreputation.php:117
-msgid "Reputation automatically given to new members"
-msgstr "La reputación se otorga automáticamente a los nuevos miembros"
+#: ../../boot.php:1742 ../../addon/redred/Mod_Redred.php:73
+#: ../../addon/openid/MysqlProvider.php:54
+msgid "Nickname"
+msgstr "Alias"
-#: ../../addon/channelreputation/channelreputation.php:118
-msgid "Reputation will never fall below this value"
-msgstr "La reputación nunca caerá por debajo de este valor"
+#: ../../boot.php:1747 ../../include/nav.php:111 ../../include/nav.php:141
+#: ../../include/nav.php:162
+msgid "Logout"
+msgstr "Finalizar sesión"
-#: ../../addon/channelreputation/channelreputation.php:119
-msgid "Minimum reputation before posting is allowed"
-msgstr "Reputación mínima antes de que se permita el envío de entradas"
+#: ../../boot.php:1748 ../../include/nav.php:126 ../../include/nav.php:130
+#: ../../Zotlabs/Lib/Apps.php:341
+msgid "Login"
+msgstr "Iniciar sesión"
-#: ../../addon/channelreputation/channelreputation.php:120
-msgid "Minimum reputation before commenting is allowed"
-msgstr "Mínima reputación antes de que se permitan los comentarios"
+#: ../../boot.php:1749 ../../include/channel.php:2609
+#: ../../Zotlabs/Module/Rmagic.php:96
+msgid "Remote Authentication"
+msgstr "Acceso desde su servidor"
-#: ../../addon/channelreputation/channelreputation.php:121
-msgid "Minimum reputation before a member is able to moderate other posts"
-msgstr "Reputación mínima antes de que un miembro sea capaz de moderar otros mensajes"
+#: ../../boot.php:1752
+msgid "Password"
+msgstr "Contraseña"
-#: ../../addon/channelreputation/channelreputation.php:122
-msgid ""
-"Max ratio of moderator's reputation that can be added to/deducted from "
-"reputation of person being moderated"
-msgstr "Proporción máxima de la reputación del moderador que puede ser añadida/descontada de la reputación de la persona que está siendo moderada."
+#: ../../boot.php:1753
+msgid "Remember me"
+msgstr "Recordarme"
-#: ../../addon/channelreputation/channelreputation.php:123
-msgid "Reputation \"cost\" to post"
-msgstr "\"Coste\" de la reputación a contabilizar"
+#: ../../boot.php:1756
+msgid "Forgot your password?"
+msgstr "¿Olvidó su contraseña?"
-#: ../../addon/channelreputation/channelreputation.php:124
-msgid "Reputation \"cost\" to comment"
-msgstr "\"Coste\" de la reputación para comentar"
+#: ../../boot.php:1757 ../../Zotlabs/Module/Lostpass.php:91
+msgid "Password Reset"
+msgstr "Restablecer la contraseña"
-#: ../../addon/channelreputation/channelreputation.php:125
-msgid ""
-"Reputation automatically recovers at this rate per hour until it reaches "
-"minimum_to_post"
-msgstr "La reputación se recupera automáticamente a esta tasa por hora hasta que alcanza el mínimo_a_post"
+#: ../../boot.php:2628
+#, php-format
+msgid "[$Projectname] Website SSL error for %s"
+msgstr "[$Projectname] Error SSL del sitio web en %s"
-#: ../../addon/channelreputation/channelreputation.php:126
-msgid ""
-"When minimum_to_moderate > reputation > minimum_to_post reputation recovers "
-"at this rate per hour"
-msgstr "Cuando el mínimo_a_moderar > reputación > mínimo_a_publicar la reputación se recupera a esta tasa por hora "
+#: ../../boot.php:2633
+msgid "Website SSL certificate is not valid. Please correct."
+msgstr "El certificado SSL del sitio web no es válido. Por favor, solucione el problema."
-#: ../../addon/channelreputation/channelreputation.php:140
-msgid "Community Moderation Settings"
-msgstr "Configuración de la moderación de la comunidad"
+#: ../../boot.php:2749
+#, php-format
+msgid "[$Projectname] Cron tasks not running on %s"
+msgstr "[$Projectname] Las tareas de Cron no están funcionando en %s"
-#: ../../addon/channelreputation/channelreputation.php:232
-msgid "Channel Reputation"
-msgstr "Reputación del canal"
+#: ../../boot.php:2754
+msgid "Cron/Scheduled tasks not running."
+msgstr "Las tareas del Planificador/Cron no están funcionando."
-#: ../../addon/channelreputation/channelreputation.php:233
-#: ../../include/acl_selectors.php:156 ../../Zotlabs/Widget/Pinned.php:161
-#: ../../Zotlabs/Module/Photos.php:1279 ../../Zotlabs/Lib/ThreadItem.php:503
-#: ../../Zotlabs/Storage/Browser.php:411
-msgid "Close"
-msgstr "Cerrar"
+#: ../../boot.php:2755 ../../include/datetime.php:238
+msgid "never"
+msgstr "nunca"
-#: ../../addon/channelreputation/channelreputation.php:236
-msgid "An Error has occurred."
-msgstr "Se ha producido un error."
+#: ../../include/contact_widgets.php:11
+#, php-format
+msgid "%d invitation available"
+msgid_plural "%d invitations available"
+msgstr[0] "%d invitación pendiente"
+msgstr[1] "%d invitaciones disponibles"
+msgstr[2] "%d invitaciones disponibles"
-#: ../../addon/channelreputation/channelreputation.php:254
-msgid "Upvote"
-msgstr "Votar a favor"
+#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145
+#: ../../Zotlabs/Module/Admin/Site.php:419
+msgid "Advanced"
+msgstr "Avanzado"
-#: ../../addon/channelreputation/channelreputation.php:255
-msgid "Downvote"
-msgstr "Votar en contra"
+#: ../../include/contact_widgets.php:19
+msgid "Find Channels"
+msgstr "Encontrar canales"
-#: ../../addon/channelreputation/channelreputation.php:414
-msgid "Can moderate reputation on my channel."
-msgstr "Se puede moderar la reputación en mi canal."
+#: ../../include/contact_widgets.php:20
+msgid "Enter name or interest"
+msgstr "Introducir nombre o interés"
-#: ../../addon/superblock/superblock.php:337
-msgid "Block Completely"
-msgstr "Bloquear completamente"
+#: ../../include/contact_widgets.php:21
+msgid "Connect/Follow"
+msgstr "Conectar/Seguir"
-#: ../../addon/superblock/Mod_Superblock.php:62
-msgid "superblock settings updated"
-msgstr "se han actualizado los ajustes de superblock"
+#: ../../include/contact_widgets.php:22
+msgid "Examples: Robert Morgenstein, Fishing"
+msgstr "Ejemplos: José Fernández, Pesca"
-#: ../../addon/superblock/Mod_Superblock.php:86
-msgid "Currently blocked"
-msgstr "Actualmente bloqueado"
+#: ../../include/contact_widgets.php:23 ../../Zotlabs/Module/Directory.php:427
+#: ../../Zotlabs/Module/Directory.php:432
+#: ../../Zotlabs/Module/Connections.php:401
+msgid "Find"
+msgstr "Encontrar"
-#: ../../addon/superblock/Mod_Superblock.php:88
-msgid "No channels currently blocked"
-msgstr "No hay canales bloqueados actualmente"
+#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Directory.php:431
+#: ../../Zotlabs/Module/Suggest.php:77
+msgid "Channel Suggestions"
+msgstr "Sugerencias de canales"
-#: ../../addon/superblock/Mod_Superblock.php:90
-#: ../../Zotlabs/Module/Tagrm.php:137
-#: ../../Zotlabs/Module/Admin/Addons.php:459
-#: ../../Zotlabs/Module/Cover_photo.php:424
-#: ../../Zotlabs/Module/Photos.php:1002
-msgid "Remove"
-msgstr "Eliminar"
+#: ../../include/contact_widgets.php:26
+msgid "Random Profile"
+msgstr "Perfil aleatorio"
-#: ../../addon/nsabait/Mod_Nsabait.php:23
-msgid "NSA Bait App"
-msgstr "App NSA Bait "
+#: ../../include/contact_widgets.php:27
+msgid "Invite Friends"
+msgstr "Invitar a amigos"
-#: ../../addon/nsabait/Mod_Nsabait.php:25
-msgid "Make yourself a political target."
-msgstr "Hazte un objetivo político."
+#: ../../include/contact_widgets.php:29
+msgid "Advanced example: name=fred and country=iceland"
+msgstr "Ejemplo avanzado: nombre=juan y país=españa"
-#: ../../addon/visage/Mod_Visage.php:23
-msgid "Recent Channel/Profile Viewers"
-msgstr "Visitantes recientes del canal o perfil"
+#: ../../include/contact_widgets.php:53 ../../include/features.php:318
+#: ../../Zotlabs/Widget/Activity_filter.php:196
+#: ../../Zotlabs/Widget/Filer.php:33
+msgid "Saved Folders"
+msgstr "Carpetas guardadas"
-#: ../../addon/visage/Mod_Visage.php:34
-msgid "No entries."
-msgstr "No hay entradas."
+#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:118
+#: ../../include/contact_widgets.php:152
+#: ../../addon/articles/Widget/Articles_categories.php:83
+#: ../../addon/cards/Widget/Cards_categories.php:83
+#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36
+msgid "Everything"
+msgstr "Todo"
-#: ../../addon/wiki/Widget/Wiki_pages.php:35
-#: ../../addon/wiki/Widget/Wiki_pages.php:92
-msgid "Add new page"
-msgstr "Añadir una nueva página"
+#: ../../include/contact_widgets.php:115 ../../include/contact_widgets.php:149
+#: ../../include/taxonomy.php:422 ../../include/taxonomy.php:504
+#: ../../include/taxonomy.php:524 ../../include/taxonomy.php:545
+#: ../../addon/articles/Widget/Articles_categories.php:80
+#: ../../addon/cards/Widget/Cards_categories.php:80
+#: ../../Zotlabs/Module/Cdav.php:1072 ../../Zotlabs/Storage/Browser.php:293
+#: ../../Zotlabs/Storage/Browser.php:391 ../../Zotlabs/Storage/Browser.php:406
+msgid "Categories"
+msgstr "Temas"
-#: ../../addon/wiki/Widget/Wiki_pages.php:39
-#: ../../addon/wiki/Widget/Wiki_pages.php:96 ../../addon/wiki/Mod_Wiki.php:220
-#: ../../addon/wiki/Mod_Wiki.php:374 ../../addon/mdpost/mdpost.php:41
-#: ../../include/text.php:2201
-msgid "Markdown"
-msgstr "Markdown"
+#: ../../include/contact_widgets.php:182
+msgid "Common Connections"
+msgstr "Conexiones comunes"
-#: ../../addon/wiki/Widget/Wiki_pages.php:39
-#: ../../addon/wiki/Widget/Wiki_pages.php:96 ../../addon/wiki/Mod_Wiki.php:220
-#: ../../addon/wiki/Mod_Wiki.php:374 ../../include/text.php:2199
-msgid "BBcode"
-msgstr "BBcode"
+#: ../../include/contact_widgets.php:186
+#, php-format
+msgid "View all %d common connections"
+msgstr "Ver todas las %d conexiones comunes"
-#: ../../addon/wiki/Widget/Wiki_pages.php:39
-#: ../../addon/wiki/Widget/Wiki_pages.php:96 ../../addon/wiki/Mod_Wiki.php:220
-#: ../../include/text.php:2202
-msgid "Text"
-msgstr "Texto"
+#: ../../include/event.php:33 ../../include/event.php:128
+msgid "l F d, Y \\@ g:i A"
+msgstr "l d de F, Y \\@ G:i"
-#: ../../addon/wiki/Widget/Wiki_pages.php:42
-#: ../../addon/wiki/Widget/Wiki_pages.php:99
-#: ../../Zotlabs/Module/Dreport.php:130
-msgid "Options"
-msgstr "Opciones"
+#: ../../include/event.php:41
+msgid "Starts:"
+msgstr "Comienza:"
-#: ../../addon/wiki/Widget/Wiki_pages.php:86
-msgid "Wiki Pages"
-msgstr "Páginas del wiki"
+#: ../../include/event.php:51
+msgid "Finishes:"
+msgstr "Finaliza:"
-#: ../../addon/wiki/Widget/Wiki_pages.php:97
-msgid "Page name"
-msgstr "Nombre de la página"
+#: ../../include/event.php:63 ../../include/event.php:153
+#: ../../include/channel.php:1627 ../../Zotlabs/Module/Directory.php:350
+msgid "Location:"
+msgstr "Ubicación:"
-#: ../../addon/wiki/Widget/Wiki_list.php:20 ../../addon/wiki/Mod_Wiki.php:209
-#: ../../addon/wiki/wiki.php:70 ../../include/nav.php:515
-msgid "Wikis"
-msgstr "Wikis"
+#: ../../include/event.php:128
+msgid "l F d, Y"
+msgstr "l F d, Y"
-#: ../../addon/wiki/Widget/Wiki_page_history.php:28
-#: ../../addon/wiki/Lib/NativeWikiPage.php:588
-#: ../../addon/wiki/Mod_Wiki.php:221 ../../addon/rendezvous/rendezvous.php:172
-#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth.php:137
-#: ../../Zotlabs/Module/Chat.php:255 ../../Zotlabs/Module/Cdav.php:1372
-#: ../../Zotlabs/Module/Sharedwithme.php:106
-#: ../../Zotlabs/Module/Admin/Channels.php:159
-#: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Oauth2.php:144
-#: ../../Zotlabs/Module/Connedit.php:732 ../../Zotlabs/Storage/Browser.php:377
-msgid "Name"
-msgstr "Nombre"
+#: ../../include/event.php:132
+msgid "Start:"
+msgstr "Iniciar: "
-#: ../../addon/wiki/Widget/Wiki_page_history.php:29
-#: ../../addon/wiki/Lib/NativeWikiPage.php:589
-msgctxt "wiki_history"
-msgid "Message"
-msgstr "Mensaje"
+#: ../../include/event.php:136
+msgid "End:"
+msgstr "Finalizar: "
-#: ../../addon/wiki/Widget/Wiki_page_history.php:30
-#: ../../addon/wiki/Lib/NativeWikiPage.php:590
-msgid "Date"
-msgstr "Fecha"
+#: ../../include/event.php:141 ../../addon/openid/MysqlProvider.php:67
+msgid "Timezone"
+msgstr "Zona horaria"
-#: ../../addon/wiki/Widget/Wiki_page_history.php:31
-#: ../../addon/wiki/Lib/NativeWikiPage.php:591
-#: ../../addon/wiki/Mod_Wiki.php:370
-msgid "Revert"
-msgstr "Revertir"
+#: ../../include/event.php:1202
+msgid "This event has been added to your calendar."
+msgstr "Este evento ha sido añadido a su calendario."
-#: ../../addon/wiki/Widget/Wiki_page_history.php:32
-#: ../../addon/wiki/Lib/NativeWikiPage.php:592
-msgid "Compare"
-msgstr "Comparar"
+#: ../../include/event.php:1356 ../../include/conversation.php:142
+#: ../../include/text.php:2345 ../../Zotlabs/Module/Like.php:447
+#: ../../Zotlabs/Module/Tagger.php:75
+#: ../../Zotlabs/Module/Channel_calendar.php:221
+msgid "event"
+msgstr "el/su evento"
-#: ../../addon/wiki/Lib/NativeWiki.php:144
-msgid "Wiki updated successfully"
-msgstr "El wiki se ha actualizado con éxito"
+#: ../../include/event.php:1435
+msgid "Not specified"
+msgstr "Sin especificar"
-#: ../../addon/wiki/Lib/NativeWiki.php:204
-msgid "Wiki files deleted successfully"
-msgstr "Se han borrado con éxito los ficheros del wiki"
+#: ../../include/event.php:1436
+msgid "Needs Action"
+msgstr "Necesita de una intervención"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:41
-#: ../../addon/wiki/Lib/NativeWikiPage.php:109
-msgid "(No Title)"
-msgstr "(Sin título)"
+#: ../../include/event.php:1437
+msgid "Completed"
+msgstr "Completado/a"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:123
-msgid "Wiki page create failed."
-msgstr "Se ha producido un error en la creación de la página wiki."
+#: ../../include/event.php:1438
+msgid "In Process"
+msgstr "En proceso"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:137
-msgid "Wiki not found."
-msgstr "No se ha encontrado el wiki."
+#: ../../include/event.php:1439
+msgid "Cancelled"
+msgstr "Cancelado/a"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:148
-msgid "Destination name already exists"
-msgstr "El nombre de destino ya existe"
+#: ../../include/event.php:1520 ../../include/connections.php:752
+#: ../../Zotlabs/Module/Connedit.php:741 ../../Zotlabs/Module/Cdav.php:1383
+msgid "Mobile"
+msgstr "Móvil"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:181
-#: ../../addon/wiki/Lib/NativeWikiPage.php:376
-msgid "Page not found"
-msgstr "No se ha encontrado la página"
+#: ../../include/event.php:1521 ../../include/connections.php:753
+#: ../../Zotlabs/Module/Connedit.php:742 ../../Zotlabs/Module/Cdav.php:1384
+#: ../../Zotlabs/Widget/Notifications.php:43
+msgid "Home"
+msgstr "Inicio"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:211
-msgid "Error reading page content"
-msgstr "Se ha producido un error al leer el contenido de la página"
+#: ../../include/event.php:1522 ../../include/connections.php:754
+msgid "Home, Voice"
+msgstr "Llamadas particulares"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:367
-#: ../../addon/wiki/Lib/NativeWikiPage.php:425
-#: ../../addon/wiki/Lib/NativeWikiPage.php:493
-#: ../../addon/wiki/Lib/NativeWikiPage.php:534
-msgid "Error reading wiki"
-msgstr "Se ha producido un error al leer el wiki"
+#: ../../include/event.php:1523 ../../include/connections.php:755
+msgid "Home, Fax"
+msgstr "Fax particular"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:411
-msgid "Page update failed."
-msgstr "Se ha producido un error al actualizar la página."
+#: ../../include/event.php:1524 ../../include/connections.php:756
+#: ../../Zotlabs/Module/Connedit.php:743 ../../Zotlabs/Module/Cdav.php:1385
+msgid "Work"
+msgstr "Trabajo"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:447
-msgid "Nothing deleted"
-msgstr "No se ha eliminado nada"
+#: ../../include/event.php:1525 ../../include/connections.php:757
+msgid "Work, Voice"
+msgstr "Llamadas de trabajo"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:514
-msgid "Compare: object not found."
-msgstr "No se ha encontrado un objeto para comparar."
+#: ../../include/event.php:1526 ../../include/connections.php:758
+msgid "Work, Fax"
+msgstr "Fax de trabajo"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:521
-msgid "Page updated"
-msgstr "Se ha actualizado la página"
+#: ../../include/event.php:1527 ../../include/event.php:1534
+#: ../../include/connections.php:759 ../../include/connections.php:766
+#: ../../include/selectors.php:64 ../../include/selectors.php:81
+#: ../../include/selectors.php:119 ../../include/selectors.php:155
+#: ../../Zotlabs/Module/Connedit.php:744 ../../Zotlabs/Module/Cdav.php:1386
+#: ../../Zotlabs/Access/PermissionRoles.php:360
+msgid "Other"
+msgstr "Otro"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:529
-msgid "Wiki resource_id required for git commit"
-msgstr "Se necesita Wiki resource_id para el git commit"
+#: ../../include/js_strings.php:5
+msgid "Delete this item?"
+msgstr "¿Borrar este elemento?"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:545 ../../addon/cards/cards.php:103
-#: ../../addon/articles/articles.php:105 ../../include/help.php:133
-#: ../../Zotlabs/Module/Display.php:142 ../../Zotlabs/Module/Page.php:136
-#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Web/Router.php:186
-msgid "Page not found."
-msgstr "Página no encontrada."
+#: ../../include/js_strings.php:6
+msgid "Item deleted"
+msgstr "Elemento eliminado"
-#: ../../addon/wiki/Lib/NativeWikiPage.php:630 ../../include/bbcode.php:1059
-#: ../../include/bbcode.php:1244
-msgid "Different viewers will see this text differently"
-msgstr "Visitantes diferentes verán este texto de forma distinta"
+#: ../../include/js_strings.php:7 ../../Zotlabs/Lib/ThreadItem.php:827
+#: ../../Zotlabs/Module/Photos.php:1092 ../../Zotlabs/Module/Photos.php:1205
+msgid "Comment"
+msgstr "Comentar"
-#: ../../addon/wiki/Mod_Wiki.php:36 ../../addon/cart/cart.php:1410
-#: ../../addon/flashcards/Mod_Flashcards.php:52
-msgid "Profile Unavailable."
-msgstr "Perfil no disponible"
+#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:536
+#, php-format
+msgid "%s show all"
+msgstr "%s mostrar todo"
-#: ../../addon/wiki/Mod_Wiki.php:63 ../../addon/wiki/Mod_Wiki.php:288
-#: ../../addon/wiki/Mod_Wiki.php:431 ../../addon/openid/Mod_Id.php:53
-#: ../../addon/pumpio/pumpio.php:44 ../../addon/keepout/keepout.php:36
-#: ../../addon/cards/Mod_Card_edit.php:51 ../../addon/cards/Mod_Cards.php:89
-#: ../../addon/articles/Mod_Article_edit.php:51
-#: ../../addon/articles/Mod_Articles.php:94 ../../include/photos.php:30
-#: ../../include/items.php:3894 ../../include/attach.php:156
-#: ../../include/attach.php:205 ../../include/attach.php:278
-#: ../../include/attach.php:329 ../../include/attach.php:424
-#: ../../include/attach.php:438 ../../include/attach.php:445
-#: ../../include/attach.php:527 ../../include/attach.php:1096
-#: ../../include/attach.php:1169 ../../include/attach.php:1332
-#: ../../Zotlabs/Module/Attach_edit.php:90
-#: ../../Zotlabs/Module/Attach_edit.php:99
-#: ../../Zotlabs/Module/Attach_edit.php:106
-#: ../../Zotlabs/Module/Network.php:18 ../../Zotlabs/Module/Register.php:200
-#: ../../Zotlabs/Module/Setup.php:218
-#: ../../Zotlabs/Module/Viewconnections.php:28
-#: ../../Zotlabs/Module/Viewconnections.php:33
-#: ../../Zotlabs/Module/Channel.php:220 ../../Zotlabs/Module/Channel.php:377
-#: ../../Zotlabs/Module/Channel.php:416 ../../Zotlabs/Module/Group.php:14
-#: ../../Zotlabs/Module/Group.php:30 ../../Zotlabs/Module/Editwebpage.php:68
-#: ../../Zotlabs/Module/Editwebpage.php:89
-#: ../../Zotlabs/Module/Editwebpage.php:107
-#: ../../Zotlabs/Module/Editwebpage.php:121 ../../Zotlabs/Module/Chat.php:111
-#: ../../Zotlabs/Module/Chat.php:116
-#: ../../Zotlabs/Module/Channel_calendar.php:232
-#: ../../Zotlabs/Module/Like.php:248 ../../Zotlabs/Module/Poke.php:157
-#: ../../Zotlabs/Module/Item.php:501 ../../Zotlabs/Module/Item.php:520
-#: ../../Zotlabs/Module/Item.php:530 ../../Zotlabs/Module/Item.php:1410
-#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Profile.php:99
-#: ../../Zotlabs/Module/Profile.php:114
-#: ../../Zotlabs/Module/Sharedwithme.php:19
-#: ../../Zotlabs/Module/Webpages.php:131
-#: ../../Zotlabs/Module/Filestorage.php:20
-#: ../../Zotlabs/Module/Filestorage.php:78
-#: ../../Zotlabs/Module/Filestorage.php:96
-#: ../../Zotlabs/Module/Filestorage.php:119
-#: ../../Zotlabs/Module/Filestorage.php:165
-#: ../../Zotlabs/Module/Editpost.php:17
-#: ../../Zotlabs/Module/Achievements.php:34 ../../Zotlabs/Module/Manage.php:10
-#: ../../Zotlabs/Module/Authtest.php:13 ../../Zotlabs/Module/Viewsrc.php:19
-#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Display.php:384
-#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/New_channel.php:105
-#: ../../Zotlabs/Module/New_channel.php:130
-#: ../../Zotlabs/Module/Service_limits.php:11
-#: ../../Zotlabs/Module/Mood.php:126 ../../Zotlabs/Module/Appman.php:153
-#: ../../Zotlabs/Module/Api.php:24 ../../Zotlabs/Module/Regmod.php:20
-#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
-#: ../../Zotlabs/Module/Vote.php:19 ../../Zotlabs/Module/Profile_photo.php:390
-#: ../../Zotlabs/Module/Profile_photo.php:421
-#: ../../Zotlabs/Module/Editblock.php:67 ../../Zotlabs/Module/Settings.php:58
-#: ../../Zotlabs/Module/Editlayout.php:67
-#: ../../Zotlabs/Module/Editlayout.php:90
-#: ../../Zotlabs/Module/Connections.php:32
-#: ../../Zotlabs/Module/Cover_photo.php:341
-#: ../../Zotlabs/Module/Cover_photo.php:354 ../../Zotlabs/Module/Photos.php:71
-#: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133
-#: ../../Zotlabs/Module/Profiles.php:171 ../../Zotlabs/Module/Profiles.php:615
-#: ../../Zotlabs/Module/Bookmarks.php:70 ../../Zotlabs/Module/Invite.php:51
-#: ../../Zotlabs/Module/Invite.php:302 ../../Zotlabs/Module/Block.php:24
-#: ../../Zotlabs/Module/Block.php:74 ../../Zotlabs/Module/Menu.php:130
-#: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Defperms.php:181
-#: ../../Zotlabs/Module/Thing.php:282 ../../Zotlabs/Module/Thing.php:302
-#: ../../Zotlabs/Module/Thing.php:343 ../../Zotlabs/Module/Pdledit.php:35
-#: ../../Zotlabs/Module/Suggest.php:32 ../../Zotlabs/Module/Connedit.php:299
-#: ../../Zotlabs/Module/Layouts.php:71 ../../Zotlabs/Module/Layouts.php:78
-#: ../../Zotlabs/Module/Layouts.php:89 ../../Zotlabs/Module/Locs.php:98
-#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Lib/Chatroom.php:135
-#: ../../Zotlabs/Web/WebServer.php:117
-msgid "Permission denied."
-msgstr "Acceso denegado."
+#: ../../include/js_strings.php:9
+#, php-format
+msgid "%s show less"
+msgstr "%s mostrar menos"
-#: ../../addon/wiki/Mod_Wiki.php:81 ../../addon/cart/manual_payments.php:93
-#: ../../addon/cart/submodules/paypalbutton.php:456
-#: ../../addon/cart/submodules/paypalbuttonV2.php:478
-#: ../../addon/cart/myshop.php:37 ../../addon/cart/cart.php:1558
-msgid "Invalid channel"
-msgstr "Canal no válido"
+#: ../../include/js_strings.php:10
+#, php-format
+msgid "%s expand"
+msgstr "%s expandir"
-#: ../../addon/wiki/Mod_Wiki.php:136
-msgid "Error retrieving wiki"
-msgstr "Error al recuperar el wiki"
+#: ../../include/js_strings.php:11
+#, php-format
+msgid "%s collapse"
+msgstr "%s contraer"
-#: ../../addon/wiki/Mod_Wiki.php:143
-msgid "Error creating zip file export folder"
-msgstr "Error al crear el fichero comprimido zip de la carpeta a exportar"
+#: ../../include/js_strings.php:12
+msgid "Password too short"
+msgstr "Contraseña demasiado corta"
-#: ../../addon/wiki/Mod_Wiki.php:194
-msgid "Error downloading wiki: "
-msgstr "Error al descargar el wiki: "
+#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:161
+msgid "Passwords do not match"
+msgstr "Las contraseñas no coinciden"
-#: ../../addon/wiki/Mod_Wiki.php:214 ../../addon/wiki/Mod_Wiki.php:387
-#: ../../addon/cards/Mod_Card_edit.php:99 ../../addon/cards/cards.php:73
-#: ../../addon/articles/Mod_Article_edit.php:97
-#: ../../addon/articles/articles.php:75 ../../include/menu.php:120
-#: ../../include/channel.php:1530 ../../include/channel.php:1534
-#: ../../Zotlabs/Widget/Cdav.php:142 ../../Zotlabs/Widget/Cdav.php:179
-#: ../../Zotlabs/Module/Group.php:245 ../../Zotlabs/Module/Oauth.php:171
-#: ../../Zotlabs/Module/Editwebpage.php:142
-#: ../../Zotlabs/Module/Webpages.php:252
-#: ../../Zotlabs/Module/Admin/Profs.php:175
-#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Editblock.php:114
-#: ../../Zotlabs/Module/Editlayout.php:114
-#: ../../Zotlabs/Module/Connections.php:329
-#: ../../Zotlabs/Module/Connections.php:378
-#: ../../Zotlabs/Module/Connections.php:399 ../../Zotlabs/Module/Menu.php:176
-#: ../../Zotlabs/Module/Oauth2.php:192 ../../Zotlabs/Module/Thing.php:268
-#: ../../Zotlabs/Module/Layouts.php:193 ../../Zotlabs/Lib/Apps.php:600
-#: ../../Zotlabs/Lib/ThreadItem.php:166
-msgid "Edit"
-msgstr "Editar"
+#: ../../include/js_strings.php:14
+msgid "everybody"
+msgstr "cualquiera"
-#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:404
-msgid "Download"
-msgstr "Descargar"
+#: ../../include/js_strings.php:15
+msgid "Secret Passphrase"
+msgstr "Contraseña secreta"
-#: ../../addon/wiki/Mod_Wiki.php:216 ../../addon/wiki/Mod_Wiki.php:412
-#: ../../Zotlabs/Module/Pubsites.php:60 ../../Zotlabs/Module/Webpages.php:258
-#: ../../Zotlabs/Module/Blocks.php:166 ../../Zotlabs/Module/Layouts.php:198
-msgid "View"
-msgstr "Ver"
+#: ../../include/js_strings.php:16
+msgid "Passphrase hint"
+msgstr "Pista de contraseña"
-#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Manage.php:137
-#: ../../Zotlabs/Module/Profiles.php:853
-msgid "Create New"
-msgstr "Crear"
+#: ../../include/js_strings.php:17
+msgid "Notice: Permissions have changed but have not yet been submitted."
+msgstr "Aviso: los permisos han cambiado pero aún no han sido enviados."
-#: ../../addon/wiki/Mod_Wiki.php:219
-msgid "Wiki name"
-msgstr "Nombre del wiki"
+#: ../../include/js_strings.php:18
+msgid "close all"
+msgstr "cerrar todo"
-#: ../../addon/wiki/Mod_Wiki.php:220
-msgid "Content type"
-msgstr "Tipo de contenido"
+#: ../../include/js_strings.php:19
+msgid "Nothing new here"
+msgstr "Nada nuevo por aquí"
-#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:378
-msgid "Type"
-msgstr "Tipo"
+#: ../../include/js_strings.php:20
+msgid "Rate This Channel (this is public)"
+msgstr "Valorar este canal (esto es público)"
-#: ../../addon/wiki/Mod_Wiki.php:223
-msgid "Any&nbsp;type"
-msgstr "Cualquier&nbsp;tipo"
+#: ../../include/js_strings.php:21
+msgid "Rating"
+msgstr "Valoración"
-#: ../../addon/wiki/Mod_Wiki.php:230
-msgid "Lock content type"
-msgstr "Tipo de contenido bloqueado"
+#: ../../include/js_strings.php:22
+msgid "Describe (optional)"
+msgstr "Describir (opcional)"
-#: ../../addon/wiki/Mod_Wiki.php:231
-msgid "Create a status post for this wiki"
-msgstr "Crear un mensaje de estado para este wiki"
+#: ../../include/js_strings.php:24
+msgid "Please enter a link URL"
+msgstr "Por favor, introduzca una dirección de enlace"
-#: ../../addon/wiki/Mod_Wiki.php:232
-msgid "Edit Wiki Name"
-msgstr "Editar el nombre del wiki"
+#: ../../include/js_strings.php:25
+msgid "Unsaved changes. Are you sure you wish to leave this page?"
+msgstr "Cambios no guardados. ¿Está seguro de que desea abandonar la página?"
-#: ../../addon/wiki/Mod_Wiki.php:277
-msgid "Wiki not found"
-msgstr "Wiki no encontrado"
+#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Locs.php:121
+#: ../../Zotlabs/Module/Cdav.php:1016 ../../Zotlabs/Module/Profiles.php:480
+#: ../../Zotlabs/Module/Profiles.php:751 ../../Zotlabs/Module/Pubsites.php:54
+msgid "Location"
+msgstr "Ubicación"
-#: ../../addon/wiki/Mod_Wiki.php:303
-msgid "Rename page"
-msgstr "Renombrar la página"
+#: ../../include/js_strings.php:27
+msgid "lovely"
+msgstr "encantador"
-#: ../../addon/wiki/Mod_Wiki.php:304 ../../addon/hsse/hsse.php:186
-#: ../../include/conversation.php:1444 ../../Zotlabs/Widget/Cdav.php:140
-#: ../../Zotlabs/Module/Webpages.php:253 ../../Zotlabs/Module/Blocks.php:161
-#: ../../Zotlabs/Module/Photos.php:1084 ../../Zotlabs/Module/Layouts.php:194
-msgid "Share"
-msgstr "Compartir"
+#: ../../include/js_strings.php:28
+msgid "wonderful"
+msgstr "fabuloso"
-#: ../../addon/wiki/Mod_Wiki.php:324
-msgid "Error retrieving page content"
-msgstr "Error al recuperar el contenido de la página"
+#: ../../include/js_strings.php:29
+msgid "fantastic"
+msgstr "fantástico"
-#: ../../addon/wiki/Mod_Wiki.php:332 ../../addon/wiki/Mod_Wiki.php:334
-msgid "New page"
-msgstr "Nueva página"
+#: ../../include/js_strings.php:30
+msgid "great"
+msgstr "grandioso"
-#: ../../addon/wiki/Mod_Wiki.php:369
-msgid "Revision Comparison"
-msgstr "Comparación de revisiones"
+#: ../../include/js_strings.php:31
+msgid ""
+"Your chosen nickname was either already taken or not valid. Please use our "
+"suggestion ("
+msgstr "El nombre de usuario elegido ya está en uso o no es válido. Por favor, utilice nuestra sugerencia ("
-#: ../../addon/wiki/Mod_Wiki.php:371 ../../addon/wiki/Mod_Wiki.php:404
-#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258
-#: ../../addon/cards/Mod_Card_edit.php:132
-#: ../../addon/articles/Mod_Article_edit.php:130
-#: ../../include/conversation.php:1467 ../../include/conversation.php:1522
-#: ../../Zotlabs/Module/Fbrowser.php:66 ../../Zotlabs/Module/Fbrowser.php:88
-#: ../../Zotlabs/Module/Oauth.php:110 ../../Zotlabs/Module/Oauth.php:136
-#: ../../Zotlabs/Module/Editwebpage.php:169 ../../Zotlabs/Module/Cdav.php:1057
-#: ../../Zotlabs/Module/Cdav.php:1390 ../../Zotlabs/Module/Tagrm.php:15
-#: ../../Zotlabs/Module/Tagrm.php:138 ../../Zotlabs/Module/Editpost.php:111
-#: ../../Zotlabs/Module/Admin/Addons.php:427
-#: ../../Zotlabs/Module/Profile_photo.php:553
-#: ../../Zotlabs/Module/Editblock.php:141 ../../Zotlabs/Module/Filer.php:56
-#: ../../Zotlabs/Module/Editlayout.php:140
-#: ../../Zotlabs/Module/Cover_photo.php:428
-#: ../../Zotlabs/Module/Oauth2.php:115 ../../Zotlabs/Module/Oauth2.php:143
-#: ../../Zotlabs/Module/Connedit.php:750 ../../Zotlabs/Storage/Browser.php:383
-msgid "Cancel"
-msgstr "Cancelar"
+#: ../../include/js_strings.php:32
+msgid ") or enter a new one."
+msgstr ") o introduzca uno nuevo."
-#: ../../addon/wiki/Mod_Wiki.php:377
-msgid "Short description of your changes (optional)"
-msgstr "Breve descripción de sus cambios (opcional)"
+#: ../../include/js_strings.php:33
+msgid "Thank you, this nickname is valid."
+msgstr "Gracias, este alias es válido."
-#: ../../addon/wiki/Mod_Wiki.php:387 ../../addon/wppost/wppost.php:174
-#: ../../addon/wppost/Mod_Wppost.php:96 ../../addon/dwpost/Mod_Dwpost.php:67
-#: ../../addon/dwpost/dwpost.php:134 ../../addon/ljpost/ljpost.php:134
-msgid "Source"
-msgstr "Fuente"
+#: ../../include/js_strings.php:34
+msgid "A channel name is required."
+msgstr "Se requiere un nombre de canal"
-#: ../../addon/wiki/Mod_Wiki.php:397
-msgid "New page name"
-msgstr "Nombre de la nueva página"
+#: ../../include/js_strings.php:35
+msgid "This is a "
+msgstr "Esto es un "
-#: ../../addon/wiki/Mod_Wiki.php:402
-msgid "Embed image from photo albums"
-msgstr "Incluir una imagen de los álbumes de fotos"
+#: ../../include/js_strings.php:36
+msgid " channel name"
+msgstr "nombre de canal"
-#: ../../addon/wiki/Mod_Wiki.php:403 ../../addon/hsse/hsse.php:208
-#: ../../include/conversation.php:1466
-msgid "Embed an image from your albums"
-msgstr "Incluir una imagen de sus álbumes"
+#: ../../include/js_strings.php:37
+msgid "Back to reply"
+msgstr "Volver a la respuesta"
-#: ../../addon/wiki/Mod_Wiki.php:405 ../../addon/hsse/hsse.php:210
-#: ../../addon/hsse/hsse.php:257 ../../include/conversation.php:1468
-#: ../../include/conversation.php:1521
-#: ../../Zotlabs/Module/Profile_photo.php:554
-#: ../../Zotlabs/Module/Cover_photo.php:429
-msgid "OK"
-msgstr "OK"
+#: ../../include/js_strings.php:38
+msgid "Pinned"
+msgstr "Anclado/a"
-#: ../../addon/wiki/Mod_Wiki.php:406 ../../addon/hsse/hsse.php:139
-#: ../../include/conversation.php:1387
-#: ../../Zotlabs/Module/Profile_photo.php:555
-#: ../../Zotlabs/Module/Cover_photo.php:430
-msgid "Choose images to embed"
-msgstr "Elegir imágenes para incluir"
+#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:473
+msgid "Pin to the top"
+msgstr "Anclar en la parte superior"
-#: ../../addon/wiki/Mod_Wiki.php:407 ../../addon/hsse/hsse.php:140
-#: ../../include/conversation.php:1388
-#: ../../Zotlabs/Module/Profile_photo.php:556
-#: ../../Zotlabs/Module/Cover_photo.php:431
-msgid "Choose an album"
-msgstr "Elegir un álbum"
+#: ../../include/js_strings.php:40 ../../Zotlabs/Lib/ThreadItem.php:473
+#: ../../Zotlabs/Widget/Pinned.php:158
+msgid "Unpin from the top"
+msgstr "Desanclar de la parte superior"
-#: ../../addon/wiki/Mod_Wiki.php:408
-#: ../../Zotlabs/Module/Profile_photo.php:557
-#: ../../Zotlabs/Module/Cover_photo.php:432
-msgid "Choose a different album"
-msgstr "Elegir un álbum diferente..."
+#: ../../include/js_strings.php:46
+#, php-format
+msgid "%d minutes"
+msgid_plural "%d minutes"
+msgstr[0] "%d minutos"
+msgstr[1] "%d minutos"
+msgstr[2] "%d minutos"
-#: ../../addon/wiki/Mod_Wiki.php:409 ../../addon/hsse/hsse.php:142
-#: ../../include/conversation.php:1390
-#: ../../Zotlabs/Module/Profile_photo.php:558
-#: ../../Zotlabs/Module/Cover_photo.php:433
-msgid "Error getting album list"
-msgstr "Error al obtener la lista de álbumes"
+#: ../../include/js_strings.php:47
+#, php-format
+msgid "about %d hours"
+msgid_plural "about %d hours"
+msgstr[0] "alrededor de %d horas"
+msgstr[1] "alrededor de %d horas"
+msgstr[2] "alrededor de %d horas"
-#: ../../addon/wiki/Mod_Wiki.php:410 ../../addon/hsse/hsse.php:143
-#: ../../include/conversation.php:1391
-#: ../../Zotlabs/Module/Profile_photo.php:559
-#: ../../Zotlabs/Module/Cover_photo.php:434
-msgid "Error getting photo link"
-msgstr "Error al obtener el enlace de la foto"
+#: ../../include/js_strings.php:48
+#, php-format
+msgid "%d days"
+msgid_plural "%d days"
+msgstr[0] "%d días"
+msgstr[1] "%d días"
+msgstr[2] "%d días"
-#: ../../addon/wiki/Mod_Wiki.php:411 ../../addon/hsse/hsse.php:144
-#: ../../include/conversation.php:1392
-#: ../../Zotlabs/Module/Profile_photo.php:560
-#: ../../Zotlabs/Module/Cover_photo.php:435
-msgid "Error getting album"
-msgstr "Error al obtener el álbum"
+#: ../../include/js_strings.php:49
+#, php-format
+msgid "%d months"
+msgid_plural "%d months"
+msgstr[0] "%d meses"
+msgstr[1] "%d meses"
+msgstr[2] "%d meses"
-#: ../../addon/wiki/Mod_Wiki.php:413
-msgid "History"
-msgstr "Historial"
+#: ../../include/js_strings.php:50
+#, php-format
+msgid "%d years"
+msgid_plural "%d years"
+msgstr[0] "%d años"
+msgstr[1] "%d años"
+msgstr[2] "%d años"
-#: ../../addon/wiki/Mod_Wiki.php:491
-msgid "Error creating wiki. Invalid name."
-msgstr "Error al crear el wiki: el nombre no es válido."
+#: ../../include/js_strings.php:55
+msgid "timeago.prefixAgo"
+msgstr "hace "
-#: ../../addon/wiki/Mod_Wiki.php:498
-msgid "A wiki with this name already exists."
-msgstr "Ya hay un wiki con este nombre."
+#: ../../include/js_strings.php:56
+msgid "timeago.prefixFromNow"
+msgstr "en "
-#: ../../addon/wiki/Mod_Wiki.php:511
-msgid "Wiki created, but error creating Home page."
-msgstr "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio."
+#: ../../include/js_strings.php:57
+msgid "timeago.suffixAgo"
+msgstr "NONE"
-#: ../../addon/wiki/Mod_Wiki.php:518
-msgid "Error creating wiki"
-msgstr "Error al crear el wiki"
+#: ../../include/js_strings.php:58
+msgid "timeago.suffixFromNow"
+msgstr "NONE"
-#: ../../addon/wiki/Mod_Wiki.php:542
-msgid "Error updating wiki. Invalid name."
-msgstr "Error al actualizar el wiki. Nombre no válido."
+#: ../../include/js_strings.php:61
+msgid "less than a minute"
+msgstr "menos de un minuto"
-#: ../../addon/wiki/Mod_Wiki.php:561
-msgid "Error updating wiki"
-msgstr "Error al actualizar el wiki"
+#: ../../include/js_strings.php:62
+msgid "about a minute"
+msgstr "alrededor de un minuto"
-#: ../../addon/wiki/Mod_Wiki.php:576
-msgid "Wiki delete permission denied."
-msgstr "Se ha denegado el permiso para eliminar el wiki."
+#: ../../include/js_strings.php:64
+msgid "about an hour"
+msgstr "alrededor de una hora"
-#: ../../addon/wiki/Mod_Wiki.php:586
-msgid "Error deleting wiki"
-msgstr "Se ha producido un error al eliminar el wiki"
+#: ../../include/js_strings.php:66
+msgid "a day"
+msgstr "un día"
-#: ../../addon/wiki/Mod_Wiki.php:619
-msgid "New page created"
-msgstr "Se ha creado la nueva página"
+#: ../../include/js_strings.php:68
+msgid "about a month"
+msgstr "alrededor de un mes"
-#: ../../addon/wiki/Mod_Wiki.php:745
-msgid "Cannot delete Home"
-msgstr "No se puede eliminar la página principal"
+#: ../../include/js_strings.php:70
+msgid "about a year"
+msgstr "alrededor de un año"
-#: ../../addon/wiki/Mod_Wiki.php:821
-msgid "Current Revision"
-msgstr "Revisión actual"
+#: ../../include/js_strings.php:72
+msgid " "
+msgstr " "
-#: ../../addon/wiki/Mod_Wiki.php:821
-msgid "Selected Revision"
-msgstr "Revisión seleccionada"
+#: ../../include/js_strings.php:73
+msgid "timeago.numbers"
+msgstr "timeago.numbers"
-#: ../../addon/wiki/Mod_Wiki.php:876
-msgid "You must be authenticated."
-msgstr "Debe estar autenticado."
+#: ../../include/js_strings.php:75 ../../include/text.php:1502
+msgid "January"
+msgstr "enero"
-#: ../../addon/openclipatar/openclipatar.php:51
-#: ../../addon/openclipatar/openclipatar.php:129
-msgid "System defaults:"
-msgstr "Valores predeterminados del sistema: "
+#: ../../include/js_strings.php:76 ../../include/text.php:1502
+msgid "February"
+msgstr "febrero"
-#: ../../addon/openclipatar/openclipatar.php:55
-msgid "Preferred Clipart IDs"
-msgstr "IDs de las imágenes clipart preferidas"
+#: ../../include/js_strings.php:77 ../../include/text.php:1502
+msgid "March"
+msgstr "marzo"
-#: ../../addon/openclipatar/openclipatar.php:55
-msgid "List of preferred clipart ids. These will be shown first."
-msgstr "Lista de ids de imágenes de clipart preferidas. Se verán en primer lugar."
+#: ../../include/js_strings.php:78 ../../include/text.php:1502
+msgid "April"
+msgstr "abril"
-#: ../../addon/openclipatar/openclipatar.php:56
-msgid "Default Search Term"
-msgstr "Términos de búsqueda predeterminados"
+#: ../../include/js_strings.php:79
+msgctxt "long"
+msgid "May"
+msgstr "mayo"
-#: ../../addon/openclipatar/openclipatar.php:56
-msgid "The default search term. These will be shown second."
-msgstr "Los términos de búsqueda predeterminados. Estos se mostrarán en segundo lugar."
+#: ../../include/js_strings.php:80 ../../include/text.php:1502
+msgid "June"
+msgstr "junio"
-#: ../../addon/openclipatar/openclipatar.php:57
-msgid "Return After"
-msgstr "Regresar después"
+#: ../../include/js_strings.php:81 ../../include/text.php:1502
+msgid "July"
+msgstr "julio"
-#: ../../addon/openclipatar/openclipatar.php:57
-msgid "Page to load after image selection."
-msgstr "Página para cargar después de la selección de imágenes."
+#: ../../include/js_strings.php:82 ../../include/text.php:1502
+msgid "August"
+msgstr "agosto"
+
+#: ../../include/js_strings.php:83 ../../include/text.php:1502
+msgid "September"
+msgstr "septiembre"
+
+#: ../../include/js_strings.php:84 ../../include/text.php:1502
+msgid "October"
+msgstr "octubre"
+
+#: ../../include/js_strings.php:85 ../../include/text.php:1502
+msgid "November"
+msgstr "noviembre"
+
+#: ../../include/js_strings.php:86 ../../include/text.php:1502
+msgid "December"
+msgstr "diciembre"
+
+#: ../../include/js_strings.php:87
+msgid "Jan"
+msgstr "ene"
+
+#: ../../include/js_strings.php:88
+msgid "Feb"
+msgstr "feb"
+
+#: ../../include/js_strings.php:89
+msgid "Mar"
+msgstr "mar"
+
+#: ../../include/js_strings.php:90
+msgid "Apr"
+msgstr "abr"
+
+#: ../../include/js_strings.php:91
+msgctxt "short"
+msgid "May"
+msgstr "may"
+
+#: ../../include/js_strings.php:92
+msgid "Jun"
+msgstr "jun"
+
+#: ../../include/js_strings.php:93
+msgid "Jul"
+msgstr "jul"
+
+#: ../../include/js_strings.php:94
+msgid "Aug"
+msgstr "ago"
+
+#: ../../include/js_strings.php:95
+msgid "Sep"
+msgstr "sep"
+
+#: ../../include/js_strings.php:96
+msgid "Oct"
+msgstr "oct"
+
+#: ../../include/js_strings.php:97
+msgid "Nov"
+msgstr "nov"
+
+#: ../../include/js_strings.php:98
+msgid "Dec"
+msgstr "dic"
+
+#: ../../include/js_strings.php:99 ../../include/text.php:1498
+msgid "Sunday"
+msgstr "domingo"
+
+#: ../../include/js_strings.php:100 ../../include/text.php:1498
+msgid "Monday"
+msgstr "lunes"
+
+#: ../../include/js_strings.php:101 ../../include/text.php:1498
+msgid "Tuesday"
+msgstr "martes"
+
+#: ../../include/js_strings.php:102 ../../include/text.php:1498
+msgid "Wednesday"
+msgstr "miércoles"
+
+#: ../../include/js_strings.php:103 ../../include/text.php:1498
+msgid "Thursday"
+msgstr "jueves"
+
+#: ../../include/js_strings.php:104 ../../include/text.php:1498
+msgid "Friday"
+msgstr "viernes"
+
+#: ../../include/js_strings.php:105 ../../include/text.php:1498
+msgid "Saturday"
+msgstr "sábado"
+
+#: ../../include/js_strings.php:106
+msgid "Sun"
+msgstr "dom"
+
+#: ../../include/js_strings.php:107
+msgid "Mon"
+msgstr "lun"
+
+#: ../../include/js_strings.php:108
+msgid "Tue"
+msgstr "mar"
+
+#: ../../include/js_strings.php:109
+msgid "Wed"
+msgstr "mié"
+
+#: ../../include/js_strings.php:110
+msgid "Thu"
+msgstr "jue"
+
+#: ../../include/js_strings.php:111
+msgid "Fri"
+msgstr "vie"
+
+#: ../../include/js_strings.php:112
+msgid "Sat"
+msgstr "sáb"
+
+#: ../../include/js_strings.php:113
+msgctxt "calendar"
+msgid "today"
+msgstr "hoy"
+
+#: ../../include/js_strings.php:114
+msgctxt "calendar"
+msgid "month"
+msgstr "mes"
+
+#: ../../include/js_strings.php:115
+msgctxt "calendar"
+msgid "week"
+msgstr "semana"
+
+#: ../../include/js_strings.php:116
+msgctxt "calendar"
+msgid "day"
+msgstr "día"
+
+#: ../../include/js_strings.php:117
+msgctxt "calendar"
+msgid "All day"
+msgstr "Todos los días"
+
+#: ../../include/js_strings.php:120
+msgid "Please stand by while your download is being prepared."
+msgstr "Por favor, espere mientras se prepara la descarga."
+
+#: ../../include/js_strings.php:123
+msgid "Email address not valid"
+msgstr "Dirección de correo electrónica no válida"
+
+#: ../../include/js_strings.php:124 ../../include/datetime.php:211
+#: ../../addon/cart/submodules/orderoptions.php:334
+#: ../../addon/cart/submodules/orderoptions.php:358
+#: ../../addon/cart/submodules/orderoptions.php:434
+#: ../../addon/cart/submodules/orderoptions.php:458
+#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Appman.php:208
+#: ../../Zotlabs/Module/Appman.php:209 ../../Zotlabs/Module/Profiles.php:762
+#: ../../Zotlabs/Module/Profiles.php:766
+msgid "Required"
+msgstr "Obligatorio"
+
+#: ../../include/photo/photo_driver.php:450
+#: ../../Zotlabs/Module/Profile_photo.php:167
+#: ../../Zotlabs/Module/Profile_photo.php:337
+msgid "Profile Photos"
+msgstr "Fotos del perfil"
-#: ../../addon/openclipatar/openclipatar.php:58 ../../include/nav.php:113
-#: ../../include/conversation.php:1093 ../../Zotlabs/Module/Connedit.php:480
-#: ../../Zotlabs/Lib/Apps.php:348
+#: ../../include/nav.php:96
+msgid "Remote authentication"
+msgstr "Acceder desde su servidor"
+
+#: ../../include/nav.php:96
+msgid "Click to authenticate to your home hub"
+msgstr "Pulsar para identificarse en su servidor de inicio"
+
+#: ../../include/nav.php:102 ../../Zotlabs/Module/Admin/Channels.php:146
+#: ../../Zotlabs/Module/Admin.php:116 ../../Zotlabs/Module/Manage.php:162
+#: ../../Zotlabs/Widget/Channel_activities.php:239
+#: ../../Zotlabs/Widget/Admin.php:29
+msgid "Channels"
+msgstr "Canales"
+
+#: ../../include/nav.php:102
+msgid "Manage your channels"
+msgstr "Gestionar sus canales"
+
+#: ../../include/nav.php:105 ../../Zotlabs/Lib/Apps.php:344
+#: ../../Zotlabs/Module/Admin/Themes.php:125
+#: ../../Zotlabs/Module/Admin/Addons.php:348
+#: ../../Zotlabs/Widget/Settings_menu.php:71
+#: ../../Zotlabs/Widget/Newmember.php:58
+msgid "Settings"
+msgstr "Ajustes"
+
+#: ../../include/nav.php:105
+msgid "Account/Channel Settings"
+msgstr "Ajustes de cuenta/canales"
+
+#: ../../include/nav.php:111 ../../include/nav.php:141
+msgid "End this session"
+msgstr "Finalizar esta sesión"
+
+#: ../../include/nav.php:114 ../../include/conversation.php:1095
+#: ../../addon/openclipatar/openclipatar.php:58 ../../Zotlabs/Lib/Apps.php:349
+#: ../../Zotlabs/Module/Connedit.php:480
msgid "View Profile"
msgstr "Ver el perfil"
-#: ../../addon/openclipatar/openclipatar.php:59 ../../include/nav.php:118
-#: ../../include/channel.php:1534
+#: ../../include/nav.php:114
+msgid "Your profile page"
+msgstr "Su página del perfil"
+
+#: ../../include/nav.php:117 ../../include/channel.php:1530
+#: ../../Zotlabs/Module/Profiles.php:852
+msgid "Edit Profiles"
+msgstr "Editar perfiles"
+
+#: ../../include/nav.php:117
+msgid "Manage/Edit profiles"
+msgstr "Administrar/editar perfiles"
+
+#: ../../include/nav.php:119 ../../include/channel.php:1534
+#: ../../addon/openclipatar/openclipatar.php:59
msgid "Edit Profile"
msgstr "Editar el perfil"
-#: ../../addon/openclipatar/openclipatar.php:60
-msgid "Profile List"
-msgstr "Lista de perfiles"
+#: ../../include/nav.php:119 ../../Zotlabs/Widget/Newmember.php:40
+msgid "Edit your profile"
+msgstr "Editar su perfil"
-#: ../../addon/openclipatar/openclipatar.php:62
-msgid "Order of Preferred"
-msgstr "Orden de preferencia"
+#: ../../include/nav.php:126 ../../include/nav.php:130
+msgid "Sign in"
+msgstr "Acceder"
-#: ../../addon/openclipatar/openclipatar.php:62
-msgid "Sort order of preferred clipart ids."
-msgstr "Orden de clasificación de los identificadores de imágenes clipart preferidas."
+#: ../../include/nav.php:160
+msgid "Take me home"
+msgstr "Volver a la página principal"
-#: ../../addon/openclipatar/openclipatar.php:63
-#: ../../addon/openclipatar/openclipatar.php:69
-msgid "Newest first"
-msgstr "Las más nuevas en primer lugar"
+#: ../../include/nav.php:162
+msgid "Log me out of this site"
+msgstr "Salir de este sitio"
-#: ../../addon/openclipatar/openclipatar.php:66
-msgid "As entered"
-msgstr "Tal como se ingresaron"
+#: ../../include/nav.php:167
+msgid "Create an account"
+msgstr "Crear una cuenta"
-#: ../../addon/openclipatar/openclipatar.php:68
-msgid "Order of other"
-msgstr "Orden de los demás"
+#: ../../include/nav.php:181 ../../include/nav.php:320
+#: ../../include/help.php:118 ../../include/help.php:126
+#: ../../Zotlabs/Lib/Apps.php:353 ../../Zotlabs/Module/Layouts.php:184
+msgid "Help"
+msgstr "Ayuda"
-#: ../../addon/openclipatar/openclipatar.php:68
-msgid "Sort order of other clipart ids."
-msgstr "Orden de clasificación de otros ids de imágenes clipart."
+#: ../../include/nav.php:181
+msgid "Help and documentation"
+msgstr "Ayuda y documentación"
-#: ../../addon/openclipatar/openclipatar.php:70
-msgid "Most downloaded first"
-msgstr "Las más descargadas en primer lugar"
+#: ../../include/nav.php:195 ../../include/acl_selectors.php:149
+#: ../../include/text.php:1168 ../../include/text.php:1180
+#: ../../Zotlabs/Lib/Apps.php:358 ../../Zotlabs/Module/Search.php:46
+#: ../../Zotlabs/Module/Connections.php:397
+#: ../../Zotlabs/Widget/Sitesearch.php:37
+#: ../../Zotlabs/Widget/Activity_filter.php:210
+msgid "Search"
+msgstr "Buscar"
-#: ../../addon/openclipatar/openclipatar.php:71
-msgid "Most liked first"
-msgstr "Las más apreciadas en primer lugar"
+#: ../../include/nav.php:195
+msgid "Search site @name, !forum, #tag, ?docs, content"
+msgstr "Buscar en el sitio @nombre, !foro, #tag, ?docs, contenido"
-#: ../../addon/openclipatar/openclipatar.php:73
-msgid "Preferred IDs Message"
-msgstr "Mensaje de IDs preferido"
+#: ../../include/nav.php:201 ../../Zotlabs/Widget/Admin.php:61
+msgid "Admin"
+msgstr "Administrador"
-#: ../../addon/openclipatar/openclipatar.php:73
-msgid "Message to display above preferred results."
-msgstr "Mensaje para mostrar sobre los resultados preferidos."
+#: ../../include/nav.php:201
+msgid "Site Setup and Configuration"
+msgstr "Ajustes y configuración del sitio"
-#: ../../addon/openclipatar/openclipatar.php:79
-msgid "Uploaded by: "
-msgstr "Subida por: "
+#: ../../include/nav.php:324 ../../Zotlabs/Module/Defperms.php:254
+#: ../../Zotlabs/Module/New_channel.php:157
+#: ../../Zotlabs/Module/New_channel.php:164
+#: ../../Zotlabs/Widget/Notifications.php:173
+#: ../../Zotlabs/Widget/Messages.php:36
+msgid "Loading"
+msgstr "Cargando"
-#: ../../addon/openclipatar/openclipatar.php:79
-msgid "Drawn by: "
-msgstr "Creada por: "
+#: ../../include/nav.php:329
+msgid "@name, #tag, ?doc, content"
+msgstr "@nombre, #etiqueta, ?ayuda, contenido"
-#: ../../addon/openclipatar/openclipatar.php:183
-#: ../../addon/openclipatar/openclipatar.php:195
-msgid "Use this image"
-msgstr "Usar esta imagen"
+#: ../../include/nav.php:330
+msgid "Please wait..."
+msgstr "Espere por favor…"
-#: ../../addon/openclipatar/openclipatar.php:193
-msgid "Or select from a free OpenClipart.org image:"
-msgstr "O seleccionar una imagen gratuita de OpenClipart.org: "
+#: ../../include/nav.php:336 ../../Zotlabs/Lib/Apps.php:328
+msgid "Apps"
+msgstr "Aplicaciones (apps)"
-#: ../../addon/openclipatar/openclipatar.php:196
-msgid "Search Term"
-msgstr "Término de búsqueda"
+#: ../../include/nav.php:337
+msgid "Channel Apps"
+msgstr "Apps del canal "
-#: ../../addon/openclipatar/openclipatar.php:233
-msgid "Unknown error. Please try again later."
-msgstr "Error desconocido. Por favor, inténtelo otra vez."
+#: ../../include/nav.php:338
+msgid "System Apps"
+msgstr "Apps del sistema "
-#: ../../addon/openclipatar/openclipatar.php:299
-#: ../../Zotlabs/Module/Profile_photo.php:268
-msgid ""
-"Shift-reload the page or clear browser cache if the new photo does not "
-"display immediately."
-msgstr "Recargue la página o limpie el caché del navegador si la nueva foto no se muestra inmediatamente."
+#: ../../include/nav.php:339
+msgid "Pinned Apps"
+msgstr "Apps ancladas "
-#: ../../addon/openclipatar/openclipatar.php:309
-msgid "Profile photo updated successfully."
-msgstr "Se ha actualizado con éxito la foto de perfil."
+#: ../../include/nav.php:340
+msgid "Featured Apps"
+msgstr "Apps destacadas "
-#: ../../addon/bookmarker/bookmarker.php:38
-#: ../../Zotlabs/Lib/ThreadItem.php:481
-msgid "Save Bookmarks"
-msgstr "Guardar en Marcadores"
+#: ../../include/nav.php:426 ../../Zotlabs/Lib/Apps.php:348
+#: ../../Zotlabs/Module/Admin/Channels.php:154
+msgid "Channel"
+msgstr "Canal"
-#: ../../addon/queueworker/Mod_Queueworker.php:77
-msgid "Max queueworker threads"
-msgstr "Máximo de hilos en la cola"
+#: ../../include/nav.php:429
+msgid "Status Messages and Posts"
+msgstr "Mensajes de estado y publicaciones"
-#: ../../addon/queueworker/Mod_Queueworker.php:79
-msgid "Minimum 4, default 4"
-msgstr "Mínimo 4, por defecto 4"
+#: ../../include/nav.php:439 ../../Zotlabs/Module/Help.php:85
+msgid "About"
+msgstr "Mi perfil"
-#: ../../addon/queueworker/Mod_Queueworker.php:90
-msgid "Assume workers dead after"
-msgstr "Asumir que los procesos han muerto después de "
+#: ../../include/nav.php:442
+msgid "Profile Details"
+msgstr "Detalles del perfil"
-#: ../../addon/queueworker/Mod_Queueworker.php:92
-msgid "Minimum 120, default 300 seconds"
-msgstr "Mínimo de 120 segundos, por defecto, 300"
+#: ../../include/nav.php:449 ../../include/features.php:368
+#: ../../Zotlabs/Lib/Apps.php:350 ../../Zotlabs/Module/Fbrowser.php:29
+#: ../../Zotlabs/Widget/Channel_activities.php:93
+msgid "Photos"
+msgstr "Fotos"
-#: ../../addon/queueworker/Mod_Queueworker.php:103
-msgid "Pause before starting next task"
-msgstr "Pausa antes de comenzar la siguiente tarea"
+#: ../../include/nav.php:452 ../../include/photos.php:722
+msgid "Photo Albums"
+msgstr "Álbumes de fotos"
-#: ../../addon/queueworker/Mod_Queueworker.php:105
-msgid "Minimum 100, default 100 microseconds"
-msgstr "Mínimo 100, por defecto 100 microsegundos"
+#: ../../include/nav.php:457 ../../Zotlabs/Lib/Apps.php:345
+#: ../../Zotlabs/Module/Fbrowser.php:85
+#: ../../Zotlabs/Widget/Channel_activities.php:125
+#: ../../Zotlabs/Widget/Notifications.php:108
+#: ../../Zotlabs/Storage/Browser.php:351
+msgid "Files"
+msgstr "Ficheros"
-#: ../../addon/queueworker/Mod_Queueworker.php:113
-msgid "Queueworker Settings"
-msgstr "Configuración del gestor de procesos de trabajo en cola"
+#: ../../include/nav.php:460
+msgid "Files and Storage"
+msgstr "Ficheros y repositorio"
-#: ../../addon/queueworker/Mod_Queueworker.php:116
-#: ../../addon/cards/Mod_Cards.php:116
-#: ../../addon/articles/Mod_Articles.php:120 ../../include/text.php:1168
-#: ../../include/text.php:1180 ../../Zotlabs/Module/Admin/Profs.php:94
-#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Filer.php:54
-#: ../../Zotlabs/Module/Rbmark.php:31 ../../Zotlabs/Module/Rbmark.php:103
-msgid "Save"
-msgstr "Guardar"
+#: ../../include/nav.php:468 ../../include/nav.php:471
+#: ../../include/features.php:82 ../../Zotlabs/Lib/Apps.php:351
+msgid "Calendar"
+msgstr "Calendario"
-#: ../../addon/rainbowtag/Mod_Rainbowtag.php:22
-msgid "Rainbow Tag App"
-msgstr "App Etiqueta Arcoiris"
+#: ../../include/nav.php:482 ../../include/nav.php:485
+#: ../../Zotlabs/Lib/Apps.php:335 ../../Zotlabs/Widget/Chatroom_list.php:22
+msgid "Chatrooms"
+msgstr "Salas de chat"
-#: ../../addon/rainbowtag/Mod_Rainbowtag.php:23
-msgid "Add some colour to tag clouds"
-msgstr "Añadir color a las nubes de etiquetas"
+#: ../../include/nav.php:495 ../../Zotlabs/Lib/Apps.php:334
+#: ../../Zotlabs/Module/Bookmarks.php:90
+msgid "Bookmarks"
+msgstr "Marcadores"
-#: ../../addon/rainbowtag/Mod_Rainbowtag.php:30
-msgid "Rainbow Tag"
-msgstr "Etiqueta Arcoiris"
+#: ../../include/nav.php:498
+msgid "Saved Bookmarks"
+msgstr "Marcadores guardados"
-#: ../../addon/photocache/Mod_Photocache.php:27
-msgid "Photo Cache settings saved."
-msgstr "Se ha guardado la configuración de la caché de fotos."
+#: ../../include/nav.php:506 ../../Zotlabs/Lib/Apps.php:346
+#: ../../Zotlabs/Module/Webpages.php:247
+#: ../../Zotlabs/Widget/Channel_activities.php:168
+msgid "Webpages"
+msgstr "Páginas web"
-#: ../../addon/photocache/Mod_Photocache.php:43
-msgid ""
-"Saves a copy of images from external sites locally to increase your "
-"anonymity in the web."
-msgstr "Guarde una copia de las imágenes de sitios externos localmente para aumentar su anonimato en la web."
+#: ../../include/nav.php:509
+msgid "View Webpages"
+msgstr "Ver páginas web"
-#: ../../addon/photocache/Mod_Photocache.php:49
-msgid "Minimal photo size for caching"
-msgstr "Tamaño mínimo de la foto para el almacenamiento en caché"
+#: ../../include/nav.php:517 ../../addon/wiki/Mod_Wiki.php:209
+#: ../../addon/wiki/wiki.php:70 ../../addon/wiki/Widget/Wiki_list.php:20
+msgid "Wikis"
+msgstr "Wikis"
-#: ../../addon/photocache/Mod_Photocache.php:51
-msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default."
-msgstr "En píxeles. Desde 1 hasta 1024, 0 será reemplazado por el predeterminado del sistema."
+#: ../../include/nav.php:520 ../../Zotlabs/Lib/Apps.php:347
+msgid "Wiki"
+msgstr "Wiki"
-#: ../../addon/photocache/Mod_Photocache.php:60
-msgid "Photo Cache"
-msgstr "Photo Cache"
+#: ../../include/datetime.php:58 ../../Zotlabs/Module/Profiles.php:753
+#: ../../Zotlabs/Widget/Newmember.php:56
+msgid "Miscellaneous"
+msgstr "Varios"
-#: ../../addon/gallery/gallery.php:43 ../../addon/gallery/Mod_Gallery.php:134
-msgid "Gallery"
-msgstr "Galería"
+#: ../../include/datetime.php:140
+msgid "Birthday"
+msgstr "Cumpleaños"
-#: ../../addon/gallery/gallery.php:46
-msgid "Photo Gallery"
-msgstr "Galería de fotos"
+#: ../../include/datetime.php:140
+msgid "Age: "
+msgstr "Edad:"
-#: ../../addon/gallery/Mod_Gallery.php:49 ../../addon/cards/Mod_Cards.php:42
-#: ../../addon/articles/Mod_Articles.php:46 ../../include/channel.php:1427
-#: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Editwebpage.php:32
-#: ../../Zotlabs/Module/Profile.php:27 ../../Zotlabs/Module/Webpages.php:39
-#: ../../Zotlabs/Module/Filestorage.php:59 ../../Zotlabs/Module/Connect.php:17
-#: ../../Zotlabs/Module/Achievements.php:15 ../../Zotlabs/Module/Blocks.php:33
-#: ../../Zotlabs/Module/Editblock.php:31
-#: ../../Zotlabs/Module/Editlayout.php:31 ../../Zotlabs/Module/Menu.php:92
-#: ../../Zotlabs/Module/Layouts.php:31
-msgid "Requested profile is not available."
-msgstr "El perfil solicitado no está disponible."
+#: ../../include/datetime.php:140
+msgid "YYYY-MM-DD or MM-DD"
+msgstr "AAAA-MM-DD o MM-DD"
-#: ../../addon/planets/Mod_Planets.php:23
-msgid "Random Planet App"
-msgstr "App Random Planet"
+#: ../../include/datetime.php:244
+msgid "less than a second ago"
+msgstr "hace un instante"
-#: ../../addon/planets/Mod_Planets.php:25
-msgid ""
-"Set a random planet from the Star Wars Empire as your location when posting"
-msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias como su ubicación cuando publique."
+#: ../../include/datetime.php:262
+#, php-format
+msgctxt "e.g. 22 hours ago, 1 minute ago"
+msgid "%1$d %2$s ago"
+msgstr "hace %1$d %2$s"
-#: ../../addon/openid/Mod_Id.php:85 ../../include/selectors.php:64
-#: ../../include/selectors.php:81 ../../include/channel.php:1712
-msgid "Male"
-msgstr "Hombre"
+#: ../../include/datetime.php:273
+msgctxt "relative_date"
+msgid "year"
+msgid_plural "years"
+msgstr[0] "año"
+msgstr[1] "años"
+msgstr[2] "años"
-#: ../../addon/openid/Mod_Id.php:87 ../../include/selectors.php:64
-#: ../../include/selectors.php:81 ../../include/channel.php:1710
-msgid "Female"
-msgstr "Mujer"
+#: ../../include/datetime.php:276
+msgctxt "relative_date"
+msgid "month"
+msgid_plural "months"
+msgstr[0] "mes"
+msgstr[1] "meses"
+msgstr[2] "meses"
-#: ../../addon/openid/Mod_Openid.php:32
-msgid "OpenID protocol error. No ID returned."
-msgstr "Error de protocolo OpenID. No se recuperó ninguna ID."
+#: ../../include/datetime.php:279
+msgctxt "relative_date"
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "semana"
+msgstr[1] "semanas"
+msgstr[2] "semanas"
-#: ../../addon/openid/Mod_Openid.php:78 ../../addon/openid/Mod_Openid.php:179
+#: ../../include/datetime.php:282
+msgctxt "relative_date"
+msgid "day"
+msgid_plural "days"
+msgstr[0] "día"
+msgstr[1] "días"
+msgstr[2] "días"
+
+#: ../../include/datetime.php:285
+msgctxt "relative_date"
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "hora"
+msgstr[1] "horas"
+msgstr[2] "horas"
+
+#: ../../include/datetime.php:288
+msgctxt "relative_date"
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minuto"
+msgstr[1] "minutos"
+msgstr[2] "minutos"
+
+#: ../../include/datetime.php:291
+msgctxt "relative_date"
+msgid "second"
+msgid_plural "seconds"
+msgstr[0] "segundo"
+msgstr[1] "segundos"
+msgstr[2] "segundos"
+
+#: ../../include/datetime.php:520
#, php-format
-msgid "Welcome %s. Remote authentication successful."
-msgstr "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo correctamente."
+msgid "%1$s's birthday"
+msgstr "Cumpleaños de %1$s"
-#: ../../addon/openid/Mod_Openid.php:189 ../../include/auth.php:323
-msgid "Login failed."
-msgstr "El acceso ha fallado."
+#: ../../include/datetime.php:521
+#, php-format
+msgid "Happy Birthday %1$s"
+msgstr "Feliz cumpleaños %1$s"
-#: ../../addon/openid/openid.php:49
-msgid ""
-"We encountered a problem while logging in with the OpenID you provided. "
-"Please check the correct spelling of the ID."
-msgstr "Encontramos un problema al iniciar sesión con el OpenID que proporcionó. Compruebe si el ID está correctamente escrito."
+#: ../../include/language.php:433 ../../include/text.php:2183
+msgid "default"
+msgstr "por defecto"
-#: ../../addon/openid/openid.php:49
-msgid "The error message was:"
-msgstr "El mensaje de error ha sido: "
+#: ../../include/language.php:446
+msgid "Select an alternate language"
+msgstr "Seleccionar un idioma alternativo"
-#: ../../addon/openid/MysqlProvider.php:52
-msgid "First Name"
-msgstr "Nombre"
+#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../Zotlabs/Module/Admin/Features.php:56
+#: ../../Zotlabs/Module/Settings/Features.php:38
+msgid "Off"
+msgstr "Desactivado"
-#: ../../addon/openid/MysqlProvider.php:53
-msgid "Last Name"
-msgstr "Apellido"
+#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
+#: ../../Zotlabs/Module/Admin/Features.php:56
+#: ../../Zotlabs/Module/Settings/Features.php:38
+msgid "On"
+msgstr "Activado"
-#: ../../addon/openid/MysqlProvider.php:54
-#: ../../addon/redred/Mod_Redred.php:73 ../../boot.php:1742
-msgid "Nickname"
-msgstr "Alias"
+#: ../../include/features.php:86
+msgid "Start calendar week on Monday"
+msgstr "Comenzar el calendario semanal por el lunes"
-#: ../../addon/openid/MysqlProvider.php:55
-msgid "Full Name"
-msgstr "Nombre completo"
+#: ../../include/features.php:87
+msgid "Default is Sunday"
+msgstr "Por defecto es domingo"
-#: ../../addon/openid/MysqlProvider.php:56
-#: ../../addon/openid/MysqlProvider.php:57
-#: ../../addon/redred/Mod_Redred.php:69 ../../addon/rtof/Mod_Rtof.php:55
-#: ../../include/network.php:1768 ../../Zotlabs/Module/Cdav.php:1376
-#: ../../Zotlabs/Module/Admin/Accounts.php:316
-#: ../../Zotlabs/Module/Admin/Accounts.php:330
-#: ../../Zotlabs/Module/Connedit.php:736
-msgid "Email"
-msgstr "Correo electrónico"
+#: ../../include/features.php:94
+msgid "Event Timezone Selection"
+msgstr "Selección del huso horario del evento"
-#: ../../addon/openid/MysqlProvider.php:58
-#: ../../addon/openid/MysqlProvider.php:59
-#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:365
-msgid "Profile Photo"
-msgstr "Foto del perfil"
+#: ../../include/features.php:95
+msgid "Allow event creation in timezones other than your own."
+msgstr "Permitir la creación de eventos en husos horarios distintos del suyo."
-#: ../../addon/openid/MysqlProvider.php:61
-msgid "Profile Photo 16px"
-msgstr "Foto del perfil 16px"
+#: ../../include/features.php:104
+msgid "Channel Home"
+msgstr "Mi canal"
-#: ../../addon/openid/MysqlProvider.php:62
-msgid "Profile Photo 32px"
-msgstr "Foto del perfil 32px"
+#: ../../include/features.php:108
+msgid "Search by Date"
+msgstr "Buscar por fecha"
-#: ../../addon/openid/MysqlProvider.php:63
-msgid "Profile Photo 48px"
-msgstr "Foto del perfil 48px"
+#: ../../include/features.php:109
+msgid "Ability to select posts by date ranges"
+msgstr "Capacidad de seleccionar entradas por rango de fechas"
-#: ../../addon/openid/MysqlProvider.php:64
-msgid "Profile Photo 64px"
-msgstr "Foto del perfil 64px"
+#: ../../include/features.php:116
+msgid "Tag Cloud"
+msgstr "Nube de etiquetas"
-#: ../../addon/openid/MysqlProvider.php:65
-msgid "Profile Photo 80px"
-msgstr "Foto del perfil 80px"
+#: ../../include/features.php:117
+msgid "Provide a personal tag cloud on your channel page"
+msgstr "Proveer nube de etiquetas personal en su página de canal"
-#: ../../addon/openid/MysqlProvider.php:66
-msgid "Profile Photo 128px"
-msgstr "Foto del perfil 128px"
+#: ../../include/features.php:124 ../../include/features.php:358
+msgid "Use blog/list mode"
+msgstr "Usar el modo blog/lista"
-#: ../../addon/openid/MysqlProvider.php:67 ../../include/event.php:141
-msgid "Timezone"
-msgstr "Zona horaria"
+#: ../../include/features.php:125 ../../include/features.php:359
+msgid "Comments will be displayed separately"
+msgstr "Los comentarios se mostrarán por separado"
-#: ../../addon/openid/MysqlProvider.php:68
-#: ../../Zotlabs/Module/Profiles.php:784
-msgid "Homepage URL"
-msgstr "Dirección de la página personal"
+#: ../../include/features.php:133 ../../include/text.php:1056
+#: ../../Zotlabs/Lib/Apps.php:338 ../../Zotlabs/Module/Connections.php:393
+msgid "Connections"
+msgstr "Conexiones"
-#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:363
-msgid "Language"
-msgstr "Idioma"
+#: ../../include/features.php:137
+msgid "Connection Filtering"
+msgstr "Filtrado de conexiones"
-#: ../../addon/openid/MysqlProvider.php:70
-msgid "Birth Year"
-msgstr "Año de nacimiento"
+#: ../../include/features.php:138
+msgid "Filter incoming posts from connections based on keywords/content"
+msgstr "Filtrar publicaciones entrantes de conexiones por palabras clave o contenido"
-#: ../../addon/openid/MysqlProvider.php:71
-msgid "Birth Month"
-msgstr "Mes de nacimiento"
+#: ../../include/features.php:146
+msgid "Conversation"
+msgstr "Conversación"
-#: ../../addon/openid/MysqlProvider.php:72
-msgid "Birth Day"
-msgstr "Día de nacimiento"
+#: ../../include/features.php:158
+msgid "Emoji Reactions"
+msgstr "Emoticonos \"emoji\""
-#: ../../addon/openid/MysqlProvider.php:73
-msgid "Birthdate"
-msgstr "Fecha de nacimiento"
+#: ../../include/features.php:159
+msgid "Add emoji reaction ability to posts"
+msgstr "Activar la capacidad de añadir un emoticono \"emoji\" a las entradas"
-#: ../../addon/openid/MysqlProvider.php:74
-#: ../../Zotlabs/Module/Profiles.php:457
-msgid "Gender"
-msgstr "Género"
+#: ../../include/features.php:166
+msgid "Dislike Posts"
+msgstr "Desagrado de publicaciones"
-#: ../../addon/moremoods/moremoods.php:19
-msgid "lonely"
-msgstr "Solo/a"
+#: ../../include/features.php:167
+msgid "Ability to dislike posts/comments"
+msgstr "Capacidad de mostrar desacuerdo con el contenido de entradas y comentarios"
-#: ../../addon/moremoods/moremoods.php:20
-msgid "drunk"
-msgstr "ebrio/a"
+#: ../../include/features.php:174
+msgid "Star Posts"
+msgstr "Entradas destacadas"
-#: ../../addon/moremoods/moremoods.php:21
-msgid "horny"
-msgstr "caliente"
+#: ../../include/features.php:175
+msgid "Ability to mark special posts with a star indicator"
+msgstr "Capacidad de marcar entradas destacadas con un indicador de estrella"
-#: ../../addon/moremoods/moremoods.php:22
-msgid "stoned"
-msgstr "drogado/a"
+#: ../../include/features.php:182
+msgid "Reply on comment"
+msgstr "Responder a los comentarios"
-#: ../../addon/moremoods/moremoods.php:23
-msgid "fucked up"
-msgstr "jodido/a"
+#: ../../include/features.php:183
+msgid "Ability to reply on selected comment"
+msgstr "Posibilidad de responder a los comentarios seleccionados"
-#: ../../addon/moremoods/moremoods.php:24
-msgid "clusterfucked"
-msgstr "hecho/a polvo"
+#: ../../include/features.php:192 ../../Zotlabs/Lib/Apps.php:352
+msgid "Directory"
+msgstr "Directorio"
-#: ../../addon/moremoods/moremoods.php:25
-msgid "crazy"
-msgstr "loco/a"
+#: ../../include/features.php:196
+msgid "Advanced Directory Search"
+msgstr "Búsqueda avanzada en el directorio"
-#: ../../addon/moremoods/moremoods.php:26
-msgid "hurt"
-msgstr "ofendido/a"
+#: ../../include/features.php:197
+msgid "Allows creation of complex directory search queries"
+msgstr "Permitir la creación de consultas complejas en las búsquedas en el directorio"
-#: ../../addon/moremoods/moremoods.php:27
-msgid "sleepy"
-msgstr "soñoliento/a"
+#: ../../include/features.php:206
+msgid "Editor"
+msgstr "Editor"
-#: ../../addon/moremoods/moremoods.php:28
-msgid "grumpy"
-msgstr "gruñón/ona"
+#: ../../include/features.php:210
+msgid "Post Categories"
+msgstr "Temas de las entradas"
-#: ../../addon/moremoods/moremoods.php:29
-msgid "high"
-msgstr "superior"
+#: ../../include/features.php:211
+msgid "Add categories to your posts"
+msgstr "Añadir temas a sus publicaciones"
-#: ../../addon/moremoods/moremoods.php:30
-msgid "semi-conscious"
-msgstr "semiconsciente"
+#: ../../include/features.php:218
+msgid "Large Photos"
+msgstr "Fotos de gran tamaño"
-#: ../../addon/moremoods/moremoods.php:31
-msgid "in love"
-msgstr "enamorado/a"
+#: ../../include/features.php:219
+msgid ""
+"Include large (1024px) photo thumbnails in posts. If not enabled, use small "
+"(640px) photo thumbnails"
+msgstr "Incluir miniaturas de fotos grandes (1024px) en publicaciones. Si no está habilitado, usar miniaturas pequeñas (640px)"
-#: ../../addon/moremoods/moremoods.php:32
-msgid "in lust"
-msgstr "lujurioso/a"
+#: ../../include/features.php:226
+msgid "Even More Encryption"
+msgstr "Más cifrado todavía"
-#: ../../addon/moremoods/moremoods.php:33
-msgid "naked"
-msgstr "desnudo/a"
+#: ../../include/features.php:227
+msgid ""
+"Allow optional encryption of content end-to-end with a shared secret key"
+msgstr "Permitir cifrado adicional de contenido \"punto-a-punto\" con una clave secreta compartida."
-#: ../../addon/moremoods/moremoods.php:34
-msgid "stinky"
-msgstr "apestoso/a"
+#: ../../include/features.php:234
+msgid "Disable Comments"
+msgstr "Deshabilitar comentarios"
-#: ../../addon/moremoods/moremoods.php:35
-msgid "sweaty"
-msgstr "sudoroso/a"
+#: ../../include/features.php:235
+msgid "Provide the option to disable comments for a post"
+msgstr "Proporcionar la opción de desactivar los comentarios para una entrada"
-#: ../../addon/moremoods/moremoods.php:36
-msgid "bleeding out"
-msgstr "exánime"
+#: ../../include/features.php:242
+msgid "Delayed Posting"
+msgstr "Publicación aplazada"
-#: ../../addon/moremoods/moremoods.php:37
-msgid "victorious"
-msgstr "victorioso/a"
+#: ../../include/features.php:243
+msgid "Allow posts to be published at a later date"
+msgstr "Permitir mensajes que se publicarán en una fecha posterior"
-#: ../../addon/moremoods/moremoods.php:38
-msgid "defeated"
-msgstr "derrotado/a"
+#: ../../include/features.php:250
+msgid "Content Expiration"
+msgstr "Caducidad del contenido"
-#: ../../addon/moremoods/moremoods.php:39
-msgid "envious"
-msgstr "envidioso/a"
+#: ../../include/features.php:251
+msgid "Remove posts/comments and/or private messages at a future time"
+msgstr "Eliminar publicaciones/comentarios y/o mensajes privados más adelante"
-#: ../../addon/moremoods/moremoods.php:40
-msgid "jealous"
-msgstr "celoso/a"
+#: ../../include/features.php:258
+msgid "Suppress Duplicate Posts/Comments"
+msgstr "Prevenir entradas o comentarios duplicados"
-#: ../../addon/dirstats/dirstats.php:94
-msgid "Hubzilla Directory Stats"
-msgstr "Estadísticas de directorio de Hubzilla"
+#: ../../include/features.php:259
+msgid ""
+"Prevent posts with identical content to be published with less than two "
+"minutes in between submissions."
+msgstr "Prevenir que entradas con contenido idéntico se publiquen con menos de dos minutos de intervalo."
-#: ../../addon/dirstats/dirstats.php:95
-msgid "Total Hubs"
-msgstr "Número total de servidores"
+#: ../../include/features.php:266
+msgid "Auto-save drafts of posts and comments"
+msgstr "Guardar automáticamente borradores de entradas y comentarios"
-#: ../../addon/dirstats/dirstats.php:97
-msgid "Hubzilla Hubs"
-msgstr "Servidores (hubs) de Hubzilla"
+#: ../../include/features.php:267
+msgid ""
+"Automatically saves post and comment drafts in local browser storage to help"
+" prevent accidental loss of compositions"
+msgstr "Guarda automáticamente los borradores de comentarios y publicaciones en el almacenamiento del navegador local para ayudar a evitar la pérdida accidental de composiciones."
-#: ../../addon/dirstats/dirstats.php:99
-msgid "Friendica Hubs"
-msgstr "Servidores (hubs) de Friendica"
+#: ../../include/features.php:276
+msgid "Manage"
+msgstr "Gestionar"
-#: ../../addon/dirstats/dirstats.php:101
-msgid "Diaspora Pods"
-msgstr "Servidores (pods) de Diaspora"
+#: ../../include/features.php:280
+msgid "Navigation Channel Select"
+msgstr "Navegación por el selector de canales"
-#: ../../addon/dirstats/dirstats.php:103
-msgid "Hubzilla Channels"
-msgstr "Canales de Hubzilla"
+#: ../../include/features.php:281
+msgid "Change channels directly from within the navigation dropdown menu"
+msgstr "Cambiar de canales directamente desde el menú de navegación desplegable"
-#: ../../addon/dirstats/dirstats.php:105
-msgid "Friendica Channels"
-msgstr "Canales de Friendica"
+#: ../../include/features.php:290 ../../Zotlabs/Module/Connections.php:341
+#: ../../Zotlabs/Widget/Notifications.php:23
+msgid "Network"
+msgstr "Red"
-#: ../../addon/dirstats/dirstats.php:107
-msgid "Diaspora Channels"
-msgstr "Canales de Diaspora"
+#: ../../include/features.php:294
+msgid "Events Filter"
+msgstr "Filtro de eventos"
-#: ../../addon/dirstats/dirstats.php:109
-msgid "Aged 35 and above"
-msgstr "De 35 años de edad en adelante"
+#: ../../include/features.php:295
+msgid "Ability to display only events"
+msgstr "Capacidad para mostrar solo eventos"
-#: ../../addon/dirstats/dirstats.php:111
-msgid "Aged 34 and under"
-msgstr "De 34 o menos años de edad"
+#: ../../include/features.php:302
+msgid "Polls Filter"
+msgstr "Filtro de encuestas"
-#: ../../addon/dirstats/dirstats.php:113
-msgid "Average Age"
-msgstr "Promedio de edad"
+#: ../../include/features.php:303
+msgid "Ability to display only polls"
+msgstr "Capacidad para mostrar solo encuestas"
-#: ../../addon/dirstats/dirstats.php:115
-msgid "Known Chatrooms"
-msgstr "Salas de chat conocidas"
+#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:89
+msgid "Saved Searches"
+msgstr "Búsquedas guardadas"
-#: ../../addon/dirstats/dirstats.php:117
-msgid "Known Tags"
-msgstr "Etiquetas conocidas"
+#: ../../include/features.php:311
+msgid "Save search terms for re-use"
+msgstr "Guardar términos de búsqueda para su reutilización"
-#: ../../addon/dirstats/dirstats.php:119
+#: ../../include/features.php:319
+msgid "Ability to file posts under folders"
+msgstr "Capacidad de archivar entradas en carpetas"
+
+#: ../../include/features.php:326
+msgid "Alternate Stream Order"
+msgstr "Orden de stream alternativo"
+
+#: ../../include/features.php:327
msgid ""
-"Please note Diaspora and Friendica statistics are merely those **this "
-"directory** is aware of, and not all those known in the network. This also "
-"applies to chatrooms,"
-msgstr "Tenga en cuenta que las estadísticas de Diaspora y Friendica se refieren únicamente a aquellas de las que **este directorio** es consciente, y no a todos los conocidos en la red. Esto también es aplicable a las salas de chat,"
+"Ability to order the stream by last post date, last comment date or "
+"unthreaded activities"
+msgstr "Posibilidad de ordenar el stream por última fecha de publicación, última fecha de comentario o actividades sin hilo"
-#: ../../addon/redred/Mod_Redred.php:24
-msgid "Channel is required."
-msgstr "Se requiere un canal."
+#: ../../include/features.php:334
+msgid "Contact Filter"
+msgstr "Filtro de contactos"
-#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:331
-msgid "Invalid channel."
-msgstr "El canal no es válido."
+#: ../../include/features.php:335
+msgid "Ability to display only posts of a selected contact"
+msgstr "Posibilidad de mostrar sólo los mensajes de un contacto seleccionado"
-#: ../../addon/redred/Mod_Redred.php:38
-msgid "Hubzilla Crosspost Connector Settings saved."
-msgstr "Se han guardado los ajustes de Hubzilla Crosspost Connector"
+#: ../../include/features.php:342
+msgid "Forum Filter"
+msgstr "Filtro de foro"
-#: ../../addon/redred/Mod_Redred.php:61
-msgid "Send public postings to Hubzilla channel by default"
-msgstr "Enviar entradas públicas al canal Hubzilla por defecto"
+#: ../../include/features.php:343
+msgid "Ability to display only posts of a specific forum"
+msgstr "Posibilidad de mostrar sólo los mensajes de un foro específico"
-#: ../../addon/redred/Mod_Redred.php:65
-msgid "Hubzilla API Path"
-msgstr "Ruta de la API de Hubzilla"
+#: ../../include/features.php:350
+msgid "Personal Posts Filter"
+msgstr "Filtro de entradas personales"
-#: ../../addon/redred/Mod_Redred.php:65 ../../addon/rtof/Mod_Rtof.php:51
-msgid "https://{sitename}/api"
-msgstr "https://{sitename}/api"
+#: ../../include/features.php:351
+msgid "Ability to display only posts that you've interacted on"
+msgstr "Posibilidad de mostrar sólo los mensajes en los que usted haya interactuado"
-#: ../../addon/redred/Mod_Redred.php:69
-msgid "Hubzilla login name"
-msgstr "Nombre de inicio de sesión en Hubzilla"
+#: ../../include/features.php:372
+msgid "Photo Location"
+msgstr "Ubicación de las fotos"
-#: ../../addon/redred/Mod_Redred.php:73
-msgid "Hubzilla channel name"
-msgstr "Nombre del canal de Hubzilla"
+#: ../../include/features.php:373
+msgid "If location data is available on uploaded photos, link this to a map."
+msgstr "Si los datos de ubicación están disponibles en las fotos subidas, enlazar estas a un mapa."
-#: ../../addon/redred/Mod_Redred.php:77
-msgid "Hubzilla password"
-msgstr "Contraseña de Hubzilla"
+#: ../../include/features.php:380
+msgid "Flag Adult Photos"
+msgstr "Indicador (\"flag\") de fotos de adultos"
-#: ../../addon/redred/Mod_Redred.php:85
-msgid "Hubzilla Crosspost Connector"
-msgstr "Hubzilla Crosspost Connector"
+#: ../../include/features.php:381
+msgid ""
+"Provide photo edit option to hide inappropriate photos from default album "
+"view"
+msgstr "Proporcionar una opción de edición de fotos para ocultar las fotos inapropiadas de la vista de álbum predeterminada"
-#: ../../addon/redred/redred.php:50
-msgid "Post to Hubzilla"
-msgstr "Publicar en Hubzilla"
+#: ../../include/features.php:390 ../../Zotlabs/Lib/Apps.php:368
+#: ../../Zotlabs/Module/Contactedit.php:444
+msgid "Profiles"
+msgstr "Perfiles"
-#: ../../addon/redphotos/redphotos.php:106
-msgid "Photos imported"
-msgstr "Se han importado las fotos"
+#: ../../include/features.php:394
+msgid "Advanced Profiles"
+msgstr "Perfiles avanzados"
+
+#: ../../include/features.php:395
+msgid "Additional profile sections and selections"
+msgstr "Secciones y selecciones de perfil adicionales"
+
+#: ../../include/features.php:402
+msgid "Profile Import/Export"
+msgstr "Importar/Exportar perfil"
+
+#: ../../include/features.php:403
+msgid "Save and load profile details across sites/channels"
+msgstr "Guardar y cargar detalles del perfil a través de sitios/canales"
+
+#: ../../include/features.php:410
+msgid "Multiple Profiles"
+msgstr "Múltiples perfiles"
+
+#: ../../include/features.php:411
+msgid "Ability to create multiple profiles"
+msgstr "Capacidad de crear múltiples perfiles"
+
+#: ../../include/feedutils.php:871 ../../include/text.php:1570
+msgid "unknown"
+msgstr "desconocido"
+
+#: ../../include/oembed.php:154
+msgid "View PDF"
+msgstr "Ver PDF"
+
+#: ../../include/oembed.php:386
+msgid " by "
+msgstr "por"
+
+#: ../../include/oembed.php:387
+msgid " on "
+msgstr "en"
+
+#: ../../include/oembed.php:416
+msgid "Embedded content"
+msgstr "Contenido incorporado"
+
+#: ../../include/oembed.php:425
+msgid "Embedding disabled"
+msgstr "Incrustación deshabilitada"
+
+#: ../../include/markdown.php:206 ../../include/bbcode.php:568
+#, php-format
+msgid "%1$s wrote the following %2$s %3$s"
+msgstr "%1$s escribió %2$s siguiente %3$s"
+
+#: ../../include/markdown.php:208 ../../include/bbcode.php:564
+#: ../../include/conversation.php:168 ../../include/text.php:2348
+#: ../../Zotlabs/Lib/Activity.php:3563 ../../Zotlabs/Module/Tagger.php:79
+msgid "post"
+msgstr "la entrada"
+
+#: ../../include/markdown.php:259 ../../include/bbcode.php:653
+msgid "spoiler"
+msgstr "spoiler"
+
+#: ../../include/opengraph.php:56
+#, php-format
+msgid "This is the home page of %s."
+msgstr "Esta es la página personal de %s."
+
+#: ../../include/group.php:23
+msgid ""
+"A deleted group with this name was revived. Existing item permissions "
+"<strong>may</strong> apply to this group and any future members. If this is "
+"not what you intended, please create another group with a different name."
+msgstr "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente."
+
+#: ../../include/group.php:271
+msgid "Add new connections to this privacy group"
+msgstr "Añadir conexiones nuevas a este grupo de canales"
+
+#: ../../include/group.php:305
+msgid "edit"
+msgstr "editar"
+
+#: ../../include/group.php:327 ../../include/acl_selectors.php:87
+#: ../../Zotlabs/Lib/Apps.php:369 ../../Zotlabs/Module/Group.php:143
+#: ../../Zotlabs/Widget/Activity_filter.php:95
+msgid "Privacy Groups"
+msgstr "Grupos de canales"
+
+#: ../../include/group.php:328
+msgid "Edit group"
+msgstr "Editar grupo"
+
+#: ../../include/group.php:329
+msgid "Manage privacy groups"
+msgstr "Gestionar grupos de privacidad"
+
+#: ../../include/group.php:330
+msgid "Channels not in any privacy group"
+msgstr "Sin canales en ningún grupo"
+
+#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90
+msgid "add"
+msgstr "añadir"
+
+#: ../../include/connections.php:112 ../../include/conversation.php:1119
+#: ../../include/channel.php:1612 ../../Zotlabs/Module/Directory.php:363
+#: ../../Zotlabs/Module/Connections.php:359
+#: ../../Zotlabs/Module/Suggest.php:69 ../../Zotlabs/Widget/Suggestions.php:51
+#: ../../Zotlabs/Widget/Follow.php:37
+msgid "Connect"
+msgstr "Conectar"
+
+#: ../../include/connections.php:136
+msgid "New window"
+msgstr "Nueva ventana"
+
+#: ../../include/connections.php:137
+msgid "Open the selected location in a different window or browser tab"
+msgstr "Abrir la dirección seleccionada en una ventana o pestaña aparte"
+#: ../../include/items.php:441 ../../addon/hzfiles/hzfiles.php:75
#: ../../addon/redphotos/redphotos.php:119
-#: ../../addon/redfiles/redfiles.php:109 ../../addon/hzfiles/hzfiles.php:75
-#: ../../include/items.php:441 ../../Zotlabs/Module/Import_items.php:116
-#: ../../Zotlabs/Module/Profperm.php:28 ../../Zotlabs/Module/Group.php:108
-#: ../../Zotlabs/Module/Like.php:348 ../../Zotlabs/Module/Cloud.php:123
-#: ../../Zotlabs/Module/Share.php:72 ../../Zotlabs/Module/Subthread.php:89
+#: ../../addon/redfiles/redfiles.php:109 ../../Zotlabs/Web/WebServer.php:118
+#: ../../Zotlabs/Module/Like.php:348 ../../Zotlabs/Module/Share.php:72
+#: ../../Zotlabs/Module/Import_items.php:116
#: ../../Zotlabs/Module/Dreport.php:10 ../../Zotlabs/Module/Dreport.php:55
-#: ../../Zotlabs/Web/WebServer.php:116
+#: ../../Zotlabs/Module/Subthread.php:89 ../../Zotlabs/Module/Group.php:108
+#: ../../Zotlabs/Module/Profperm.php:28
msgid "Permission denied"
msgstr "Permiso denegado"
-#: ../../addon/redphotos/redphotos.php:129
-msgid "Redmatrix Photo Album Import"
-msgstr "Importar un álbum de fotos de Redmatrix"
+#: ../../include/items.php:1228
+msgid "Visible to anybody on the internet."
+msgstr "Visible para cualquiera en internet."
-#: ../../addon/redphotos/redphotos.php:130
-msgid "This will import all your Redmatrix photo albums to this channel."
-msgstr "Esto importará todos sus álbumes de fotos de Redmatrix a este canal."
+#: ../../include/items.php:1230
+msgid "Visible to you only."
+msgstr "Visible sólo para usted."
-#: ../../addon/redphotos/redphotos.php:131
-#: ../../addon/redfiles/redfiles.php:121
-msgid "Redmatrix Server base URL"
-msgstr "URL base del servidor Redmatrix"
+#: ../../include/items.php:1232
+msgid "Visible to anybody in this network."
+msgstr "Visible para cualquiera en esta red."
-#: ../../addon/redphotos/redphotos.php:132
-#: ../../addon/redfiles/redfiles.php:122
-msgid "Redmatrix Login Username"
-msgstr "Nombre de inicio de sesión en Redmatrix"
+#: ../../include/items.php:1234
+msgid "Visible to anybody authenticated."
+msgstr "Visible para cualquiera que esté autenticado."
-#: ../../addon/redphotos/redphotos.php:133
-#: ../../addon/redfiles/redfiles.php:123
-msgid "Redmatrix Login Password"
-msgstr "Contraseña de inicio de sesión en Redmatrix"
+#: ../../include/items.php:1236
+#, php-format
+msgid "Visible to anybody on %s."
+msgstr "Visible para cualquiera en %s."
-#: ../../addon/redphotos/redphotos.php:134
-msgid "Import just this album"
-msgstr "Importar solo este álbum"
+#: ../../include/items.php:1238
+msgid "Visible to all connections."
+msgstr "Visible para todas las conexiones."
-#: ../../addon/redphotos/redphotos.php:134
-msgid "Leave blank to import all albums"
-msgstr "Dejar en blanco para importar todos los álbumes"
+#: ../../include/items.php:1240
+msgid "Visible to approved connections."
+msgstr "Visible para las conexiones permitidas."
-#: ../../addon/redphotos/redphotos.php:135
-msgid "Maximum count to import"
-msgstr "Límite máximo de importación"
+#: ../../include/items.php:1242
+msgid "Visible to specific connections."
+msgstr "Visible para conexiones específicas."
-#: ../../addon/redphotos/redphotos.php:135
-msgid "0 or blank to import all available"
-msgstr "0 o en blanco para importar todos los disponibles"
+#: ../../include/items.php:3296 ../../Zotlabs/Module/Share.php:104
+#, php-format
+msgid "&#x1f501; Repeated %1$s's %2$s"
+msgstr "&#x1f501; Repetidos %2$sde %1$s"
-#: ../../addon/redphotos/redphotohelper.php:71
-#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1647
-#: ../../include/text.php:2337 ../../include/conversation.php:138
-#: ../../Zotlabs/Module/Like.php:445 ../../Zotlabs/Module/Tagger.php:71
-#: ../../Zotlabs/Module/Subthread.php:115 ../../Zotlabs/Lib/Activity.php:3546
-msgid "photo"
-msgstr "foto"
+#: ../../include/items.php:3810 ../../addon/flashcards/Mod_Flashcards.php:291
+#: ../../addon/flashcards/Mod_Flashcards.php:292
+#: ../../Zotlabs/Module/Display.php:53 ../../Zotlabs/Module/Display.php:114
+#: ../../Zotlabs/Module/Display.php:392
+#: ../../Zotlabs/Module/Admin/Themes.php:72
+#: ../../Zotlabs/Module/Admin/Addons.php:263
+#: ../../Zotlabs/Module/Filestorage.php:29 ../../Zotlabs/Module/Thing.php:96
+#: ../../Zotlabs/Module/Admin.php:61 ../../Zotlabs/Module/Viewsrc.php:25
+msgid "Item not found."
+msgstr "Elemento no encontrado."
-#: ../../addon/statusnet/Mod_Statusnet.php:61
+#: ../../include/items.php:3887 ../../include/photos.php:30
+#: ../../include/attach.php:156 ../../include/attach.php:205
+#: ../../include/attach.php:278 ../../include/attach.php:329
+#: ../../include/attach.php:424 ../../include/attach.php:438
+#: ../../include/attach.php:445 ../../include/attach.php:527
+#: ../../include/attach.php:1098 ../../include/attach.php:1171
+#: ../../include/attach.php:1336 ../../addon/articles/Mod_Article_edit.php:51
+#: ../../addon/articles/Mod_Articles.php:94 ../../addon/pumpio/pumpio.php:44
+#: ../../addon/keepout/keepout.php:36 ../../addon/cards/Mod_Cards.php:89
+#: ../../addon/cards/Mod_Card_edit.php:51 ../../addon/wiki/Mod_Wiki.php:63
+#: ../../addon/wiki/Mod_Wiki.php:288 ../../addon/wiki/Mod_Wiki.php:425
+#: ../../addon/openid/Mod_Id.php:53 ../../Zotlabs/Lib/Chatroom.php:135
+#: ../../Zotlabs/Web/WebServer.php:119
+#: ../../Zotlabs/Module/Service_limits.php:11 ../../Zotlabs/Module/Locs.php:98
+#: ../../Zotlabs/Module/Item.php:516 ../../Zotlabs/Module/Item.php:535
+#: ../../Zotlabs/Module/Item.php:545 ../../Zotlabs/Module/Item.php:1422
+#: ../../Zotlabs/Module/Cover_photo.php:341
+#: ../../Zotlabs/Module/Cover_photo.php:354
+#: ../../Zotlabs/Module/Register.php:200 ../../Zotlabs/Module/Api.php:24
+#: ../../Zotlabs/Module/Page.php:34 ../../Zotlabs/Module/Page.php:133
+#: ../../Zotlabs/Module/Profile_photo.php:390
+#: ../../Zotlabs/Module/Profile_photo.php:421
+#: ../../Zotlabs/Module/Invite.php:64 ../../Zotlabs/Module/Invite.php:315
+#: ../../Zotlabs/Module/Poke.php:141 ../../Zotlabs/Module/Block.php:24
+#: ../../Zotlabs/Module/Block.php:74 ../../Zotlabs/Module/Like.php:248
+#: ../../Zotlabs/Module/Vote.php:19 ../../Zotlabs/Module/Profile.php:99
+#: ../../Zotlabs/Module/Profile.php:114 ../../Zotlabs/Module/Display.php:388
+#: ../../Zotlabs/Module/Mitem.php:129 ../../Zotlabs/Module/Settings.php:59
+#: ../../Zotlabs/Module/Appman.php:153 ../../Zotlabs/Module/Layouts.php:71
+#: ../../Zotlabs/Module/Layouts.php:78 ../../Zotlabs/Module/Layouts.php:89
+#: ../../Zotlabs/Module/Blocks.php:73 ../../Zotlabs/Module/Blocks.php:80
+#: ../../Zotlabs/Module/Connections.php:32
+#: ../../Zotlabs/Module/Bookmarks.php:70
+#: ../../Zotlabs/Module/Editlayout.php:67
+#: ../../Zotlabs/Module/Editlayout.php:90 ../../Zotlabs/Module/Menu.php:130
+#: ../../Zotlabs/Module/Menu.php:141 ../../Zotlabs/Module/Mood.php:126
+#: ../../Zotlabs/Module/Channel.php:222 ../../Zotlabs/Module/Channel.php:379
+#: ../../Zotlabs/Module/Channel.php:418
+#: ../../Zotlabs/Module/Viewconnections.php:28
+#: ../../Zotlabs/Module/Viewconnections.php:33
+#: ../../Zotlabs/Module/Attach_edit.php:90
+#: ../../Zotlabs/Module/Attach_edit.php:99
+#: ../../Zotlabs/Module/Attach_edit.php:106 ../../Zotlabs/Module/Chat.php:111
+#: ../../Zotlabs/Module/Chat.php:116 ../../Zotlabs/Module/Network.php:18
+#: ../../Zotlabs/Module/Sources.php:80 ../../Zotlabs/Module/Suggest.php:32
+#: ../../Zotlabs/Module/Authtest.php:13 ../../Zotlabs/Module/Connedit.php:299
+#: ../../Zotlabs/Module/Profiles.php:171 ../../Zotlabs/Module/Profiles.php:615
+#: ../../Zotlabs/Module/Webpages.php:131
+#: ../../Zotlabs/Module/Filestorage.php:20
+#: ../../Zotlabs/Module/Filestorage.php:78
+#: ../../Zotlabs/Module/Filestorage.php:96
+#: ../../Zotlabs/Module/Filestorage.php:119
+#: ../../Zotlabs/Module/Filestorage.php:165
+#: ../../Zotlabs/Module/Moderate.php:15 ../../Zotlabs/Module/Pdledit.php:35
+#: ../../Zotlabs/Module/Channel_calendar.php:232
+#: ../../Zotlabs/Module/Regmod.php:20 ../../Zotlabs/Module/Defperms.php:181
+#: ../../Zotlabs/Module/Thing.php:282 ../../Zotlabs/Module/Thing.php:302
+#: ../../Zotlabs/Module/Thing.php:343 ../../Zotlabs/Module/Editblock.php:67
+#: ../../Zotlabs/Module/Sharedwithme.php:19 ../../Zotlabs/Module/Setup.php:218
+#: ../../Zotlabs/Module/Viewsrc.php:19 ../../Zotlabs/Module/Group.php:14
+#: ../../Zotlabs/Module/Group.php:30 ../../Zotlabs/Module/Editpost.php:17
+#: ../../Zotlabs/Module/Achievements.php:34
+#: ../../Zotlabs/Module/New_channel.php:105
+#: ../../Zotlabs/Module/New_channel.php:130 ../../Zotlabs/Module/Photos.php:71
+#: ../../Zotlabs/Module/Common.php:38 ../../Zotlabs/Module/Manage.php:10
+#: ../../Zotlabs/Module/Editwebpage.php:68
+#: ../../Zotlabs/Module/Editwebpage.php:89
+#: ../../Zotlabs/Module/Editwebpage.php:107
+#: ../../Zotlabs/Module/Editwebpage.php:121
+msgid "Permission denied."
+msgstr "Acceso denegado."
+
+#: ../../include/items.php:4389 ../../Zotlabs/Module/Group.php:62
+#: ../../Zotlabs/Module/Group.php:206
+msgid "Privacy group not found."
+msgstr "Grupo de canales no encontrado."
+
+#: ../../include/items.php:4405
+msgid "Privacy group is empty."
+msgstr "El grupo de canales está vacío."
+
+#: ../../include/items.php:4412
+#, php-format
+msgid "Privacy group: %s"
+msgstr "Grupo de canales: %s"
+
+#: ../../include/items.php:4422
+#, php-format
+msgid "Connection: %s"
+msgstr "Conexión: %s"
+
+#: ../../include/items.php:4424
+msgid "Connection not found."
+msgstr "Conexión no encontrada"
+
+#: ../../include/items.php:4771 ../../Zotlabs/Module/Cover_photo.php:297
+msgid "female"
+msgstr "mujer"
+
+#: ../../include/items.php:4772 ../../Zotlabs/Module/Cover_photo.php:298
+#, php-format
+msgid "%1$s updated her %2$s"
+msgstr "%1$s ha actualizado su %2$s"
+
+#: ../../include/items.php:4773 ../../Zotlabs/Module/Cover_photo.php:299
+msgid "male"
+msgstr "hombre"
+
+#: ../../include/items.php:4774 ../../Zotlabs/Module/Cover_photo.php:300
+#, php-format
+msgid "%1$s updated his %2$s"
+msgstr "%1$s ha actualizado su %2$s"
+
+#: ../../include/items.php:4776 ../../Zotlabs/Module/Cover_photo.php:302
+#, php-format
+msgid "%1$s updated their %2$s"
+msgstr "%1$s ha actualizado su %2$s"
+
+#: ../../include/items.php:4778
+msgid "profile photo"
+msgstr "foto del perfil"
+
+#: ../../include/items.php:4975
+#, php-format
+msgid "[Edited %s]"
+msgstr "[se ha editado %s]"
+
+#: ../../include/items.php:4975
+msgctxt "edit_activity"
+msgid "Post"
+msgstr "Publicar"
+
+#: ../../include/items.php:4975
+msgctxt "edit_activity"
+msgid "Comment"
+msgstr "Comentar"
+
+#: ../../include/cdav.php:157
+msgid "INVALID EVENT DISMISSED!"
+msgstr "¡EVENTO NO VÁLIDO RECHAZADO!"
+
+#: ../../include/cdav.php:158
+msgid "Summary: "
+msgstr "Resumen: "
+
+#: ../../include/cdav.php:158 ../../include/cdav.php:159
+#: ../../include/cdav.php:167 ../../include/conversation.php:1216
+#: ../../Zotlabs/Lib/Apps.php:1152 ../../Zotlabs/Lib/Apps.php:1236
+#: ../../Zotlabs/Lib/Activity.php:1615
+#: ../../Zotlabs/Module/Embedphotos.php:177
+#: ../../Zotlabs/Module/Photos.php:788 ../../Zotlabs/Module/Photos.php:1245
+#: ../../Zotlabs/Widget/Pinned.php:271 ../../Zotlabs/Widget/Portfolio.php:99
+#: ../../Zotlabs/Widget/Album.php:90
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: ../../include/cdav.php:159
+msgid "Date: "
+msgstr "Fecha: "
+
+#: ../../include/cdav.php:160 ../../include/cdav.php:168
+msgid "Reason: "
+msgstr "Razón: "
+
+#: ../../include/cdav.php:166
+msgid "INVALID CARD DISMISSED!"
+msgstr "¡TARJETA NO VÁLIDA RECHAZADA!"
+
+#: ../../include/cdav.php:167
+msgid "Name: "
+msgstr "Nombre: "
+
+#: ../../include/account.php:38
+msgid "The provided email address is not valid"
+msgstr "La dirección de correo electrónico proporcionada no es válida"
+
+#: ../../include/account.php:41
+msgid "The provided email domain is not among those allowed on this site"
+msgstr "El dominio de correo electrónico proporcionado no está entre los permitidos en este sitio"
+
+#: ../../include/account.php:48
+msgid "The provided email address is already registered at this site"
+msgstr "La dirección de correo electrónico proporcionada ya está registrada en este sitio"
+
+#: ../../include/account.php:55
msgid ""
-"Please contact your site administrator.<br />The provided API URL is not "
-"valid."
-msgstr "Por favor, contacte con el administrador de su sitio.<br />La URL de la API proporcionada no es válida."
+"There is a pending registration for this address - click \"Register\" to "
+"continue verification"
+msgstr "Hay un registro pendiente para esta dirección - haga clic en \"Registro\" para continuar la verificación"
-#: ../../addon/statusnet/Mod_Statusnet.php:98
-msgid "We could not contact the GNU social API with the Path you entered."
-msgstr "No podemos conectar con la API de GNU social con la ruta que ha proporcionado."
+#: ../../include/account.php:94
+msgid "An invitation is required."
+msgstr "Es obligatorio que le inviten."
-#: ../../addon/statusnet/Mod_Statusnet.php:130
-msgid "GNU social settings updated."
-msgstr "Se han guardado los ajustes de GNU social."
+#: ../../include/account.php:103
+msgid "Invitation could not be verified."
+msgstr "No se ha podido verificar su invitación."
-#: ../../addon/statusnet/Mod_Statusnet.php:179
-msgid "Globally Available GNU social OAuthKeys"
-msgstr "OAuthKeys globales de GNU social disponibles"
+#: ../../include/account.php:191
+msgid "Please enter the required information."
+msgstr "Por favor introduzca la información requerida."
-#: ../../addon/statusnet/Mod_Statusnet.php:181
+#: ../../include/account.php:258 ../../include/account.php:366
+msgid "Failed to store account information."
+msgstr "La información de la cuenta no se ha podido guardar."
+
+#: ../../include/account.php:435 ../../include/account.php:503
+#: ../../Zotlabs/Module/Register.php:328
+#, php-format
+msgid "Registration confirmation for %s"
+msgstr "Confirmación de registro para %s"
+
+#: ../../include/account.php:578
+#, php-format
+msgid "Registration request at %s"
+msgstr "Solicitud de registro en %s"
+
+#: ../../include/account.php:600
+msgid "your registration password"
+msgstr "su contraseña de registro"
+
+#: ../../include/account.php:606 ../../include/account.php:695
+#, php-format
+msgid "Registration details for %s"
+msgstr "Detalles del registro de %s"
+
+#: ../../include/account.php:706
+msgid "Account approved."
+msgstr "Cuenta aprobada."
+
+#: ../../include/account.php:762
+#, php-format
+msgid "Registration revoked for %s"
+msgstr "Registro revocado para %s"
+
+#: ../../include/account.php:769
+#, php-format
+msgid "Could not revoke registration for %s"
+msgstr "No se ha podido revocar el registro de %s"
+
+#: ../../include/account.php:1185 ../../include/account.php:1187
+msgid "Click here to upgrade."
+msgstr "Pulse aquí para actualizar"
+
+#: ../../include/account.php:1193
+msgid "This action exceeds the limits set by your subscription plan."
+msgstr "Esta acción supera los límites establecidos por su plan de suscripción "
+
+#: ../../include/account.php:1198
+msgid "This action is not available under your subscription plan."
+msgstr "Esta acción no está disponible en su plan de suscripción."
+
+#: ../../include/account.php:1258
+msgid "open"
+msgstr "abierto"
+
+#: ../../include/account.php:1258
+msgid "closed"
+msgstr "cerrado"
+
+#: ../../include/account.php:1265
+msgid "Registration is currently"
+msgstr "El registro está actualmente "
+
+#: ../../include/account.php:1274
+msgid "please come back"
+msgstr "por favor, vuelva"
+
+#: ../../include/help.php:81
+msgid "Help:"
+msgstr "Ayuda:"
+
+#: ../../include/help.php:130
+msgid "Not Found"
+msgstr "No encontrado"
+
+#: ../../include/help.php:133 ../../addon/articles/articles.php:105
+#: ../../addon/cards/cards.php:104 ../../addon/wiki/Lib/NativeWikiPage.php:545
+#: ../../Zotlabs/Web/Router.php:186 ../../Zotlabs/Module/Page.php:136
+#: ../../Zotlabs/Module/Block.php:77 ../../Zotlabs/Module/Display.php:149
+msgid "Page not found."
+msgstr "Página no encontrada."
+
+#: ../../include/taxonomy.php:323
+msgid "Trending"
+msgstr "Etiquetas populares"
+
+#: ../../include/taxonomy.php:323 ../../include/taxonomy.php:462
+#: ../../include/taxonomy.php:483 ../../Zotlabs/Widget/Tagcloud.php:27
+msgid "Tags"
+msgstr "Etiquetas"
+
+#: ../../include/taxonomy.php:563
+msgid "Keywords"
+msgstr "Palabras clave"
+
+#: ../../include/taxonomy.php:584
+msgid "have"
+msgstr "tener"
+
+#: ../../include/taxonomy.php:584
+msgid "has"
+msgstr "tiene"
+
+#: ../../include/taxonomy.php:585
+msgid "want"
+msgstr "quiero"
+
+#: ../../include/taxonomy.php:585
+msgid "wants"
+msgstr "quiere"
+
+#: ../../include/taxonomy.php:586 ../../Zotlabs/Lib/ThreadItem.php:310
+msgid "like"
+msgstr "me gusta"
+
+#: ../../include/taxonomy.php:586
+msgid "likes"
+msgstr "gusta de"
+
+#: ../../include/taxonomy.php:587 ../../Zotlabs/Lib/ThreadItem.php:311
+msgid "dislike"
+msgstr "no me gusta"
+
+#: ../../include/taxonomy.php:587
+msgid "dislikes"
+msgstr "no gusta de"
+
+#: ../../include/taxonomy.php:674 ../../include/conversation.php:1762
+#: ../../include/channel.php:1773 ../../Zotlabs/Lib/ThreadItem.php:233
+#: ../../Zotlabs/Module/Photos.php:1128
+msgctxt "noun"
+msgid "Like"
+msgid_plural "Likes"
+msgstr[0] "Me gusta"
+msgstr[1] "Me gusta"
+msgstr[2] "Me gusta"
+
+#: ../../include/photos.php:153
+#, php-format
+msgid "Image exceeds website size limit of %lu bytes"
+msgstr "La imagen excede el límite de %lu bytes del sitio"
+
+#: ../../include/photos.php:164
+msgid "Image file is empty."
+msgstr "El fichero de imagen está vacío. "
+
+#: ../../include/photos.php:198 ../../Zotlabs/Module/Cover_photo.php:241
+#: ../../Zotlabs/Module/Profile_photo.php:275
+msgid "Unable to process image"
+msgstr "No ha sido posible procesar la imagen"
+
+#: ../../include/photos.php:324
+msgid "Photo storage failed."
+msgstr "La foto no ha podido ser guardada."
+
+#: ../../include/photos.php:373
+msgid "a new photo"
+msgstr "una nueva foto"
+
+#: ../../include/photos.php:377
+#, php-format
+msgctxt "photo_upload"
+msgid "%1$s posted %2$s to %3$s"
+msgstr "%1$s ha publicado %2$s en %3$s"
+
+#: ../../include/photos.php:723 ../../Zotlabs/Module/Photos.php:1338
+#: ../../Zotlabs/Module/Photos.php:1351 ../../Zotlabs/Module/Photos.php:1352
+msgid "Recent Photos"
+msgstr "Fotos recientes"
+
+#: ../../include/photos.php:727
+msgid "Upload New Photos"
+msgstr "Subir nuevas fotos"
+
+#: ../../include/security.php:630
msgid ""
-"There are preconfigured OAuth key pairs for some GNU social servers "
-"available. If you are using one of them, please use these credentials.<br "
-"/>If not feel free to connect to any other GNU social instance (see below)."
-msgstr "Existen pares de claves OAuth preconfiguradas disponibles para algunos servidores libres de GNU social. Si está usando uno de ellos, utilice estas credenciales.<br />Si no se siente libre de conectarse a cualquier otra instancia de GNU social (vea a continuación)."
+"The form security token was not correct. This probably happened because the "
+"form has been opened for too long (>3 hours) before submitting it."
+msgstr "El \"token\" de seguridad del formulario no es correcto. Esto ha ocurrido probablemente porque el formulario ha estado abierto demasiado tiempo (>3 horas) antes de ser enviado"
-#: ../../addon/statusnet/Mod_Statusnet.php:196
-msgid "Provide your own OAuth Credentials"
-msgstr "Proporcione sus propias credenciales de OAuth"
+#: ../../include/bbcode.php:233 ../../include/bbcode.php:937
+#: ../../include/bbcode.php:1558 ../../include/bbcode.php:1566
+msgid "Image/photo"
+msgstr "Imagen/foto"
-#: ../../addon/statusnet/Mod_Statusnet.php:198
+#: ../../include/bbcode.php:280 ../../include/bbcode.php:1583
+msgid "Encrypted content"
+msgstr "Contenido cifrado"
+
+#: ../../include/bbcode.php:334
+#, php-format
+msgid "Install %1$s element %2$s"
+msgstr "Instalar el elemento de%1$s%2$s"
+
+#: ../../include/bbcode.php:338
+#, php-format
msgid ""
-"No consumer key pair for GNU social found. Register your Hubzilla Account as"
-" an desktop client on your GNU social account, copy the consumer key pair "
-"here and enter the API base root.<br />Before you register your own OAuth "
-"key pair ask the administrator if there is already a key pair for this "
-"Hubzilla installation at your favourite GNU social installation."
-msgstr "No se ha encontrado un par de claves de consumidor para GNU social. Registre su cuenta de Hubzilla como un cliente de escritorio en su cuenta social GNU, copie el par de claves de consumidor aquí y escriba la dirección raíz de la API.<br />Antes de registrar su propio par de claves OAuth, pregunte al administrador si ya hay un par de claves para esta instalación de Hubzilla en su instalación GNU social favorita."
+"This post contains an installable %s element, however you lack permissions "
+"to install it on this site."
+msgstr "Esta entrada contiene el elemento instalable %s, sin embargo le faltan permisos para instalarlo en este sitio."
-#: ../../addon/statusnet/Mod_Statusnet.php:202
-msgid "OAuth Consumer Key"
-msgstr "OAuth Consumer Key"
+#: ../../include/bbcode.php:348 ../../Zotlabs/Module/Impel.php:47
+msgid "webpage"
+msgstr "página web"
-#: ../../addon/statusnet/Mod_Statusnet.php:206
-msgid "OAuth Consumer Secret"
-msgstr "OAuth Consumer Secret"
+#: ../../include/bbcode.php:351 ../../Zotlabs/Module/Impel.php:57
+msgid "layout"
+msgstr "plantilla"
-#: ../../addon/statusnet/Mod_Statusnet.php:210
-msgid "Base API Path"
-msgstr "Ruta base de la API"
+#: ../../include/bbcode.php:354 ../../Zotlabs/Module/Impel.php:52
+msgid "block"
+msgstr "bloque"
-#: ../../addon/statusnet/Mod_Statusnet.php:210
-msgid "Remember the trailing /"
-msgstr "Recuerde la barra /"
+#: ../../include/bbcode.php:357 ../../Zotlabs/Module/Impel.php:64
+msgid "menu"
+msgstr "menú"
-#: ../../addon/statusnet/Mod_Statusnet.php:214
-msgid "GNU social application name"
-msgstr "Nombre de la aplicación de GNU social"
+#: ../../include/bbcode.php:560
+msgid "card"
+msgstr "ficha"
-#: ../../addon/statusnet/Mod_Statusnet.php:237
-msgid ""
-"To connect to your GNU social account click the button below to get a "
-"security code from GNU social which you have to copy into the input box "
-"below and submit the form. Only your <strong>public</strong> posts will be "
-"posted to GNU social."
-msgstr "Para conectarse a su cuenta de GNU social, haga clic en el botón de abajo para obtener un código de seguridad de GNU social que tiene que copiar en el cuadro de entrada a continuación y envíe el formulario. Solo sus <strong>entradas</strong> públicas aparecerán en GNU social."
+#: ../../include/bbcode.php:562
+msgid "article"
+msgstr "el artículo"
-#: ../../addon/statusnet/Mod_Statusnet.php:239
-msgid "Log in with GNU social"
-msgstr "Inicio de sesión en GNU social"
+#: ../../include/bbcode.php:645 ../../include/bbcode.php:653
+msgid "Click to open/close"
+msgstr "Pulsar para abrir/cerrar"
-#: ../../addon/statusnet/Mod_Statusnet.php:242
-msgid "Copy the security code from GNU social here"
-msgstr "Copiar aquí el código de seguridad de GNU social"
+#: ../../include/bbcode.php:666
+msgid "View article"
+msgstr "Ver el artículo"
-#: ../../addon/statusnet/Mod_Statusnet.php:252
-msgid "Cancel Connection Process"
-msgstr "Cancelar el proceso de conexión"
+#: ../../include/bbcode.php:666
+msgid "View summary"
+msgstr "Ver sumario"
-#: ../../addon/statusnet/Mod_Statusnet.php:254
-msgid "Current GNU social API is"
-msgstr "La API actual de GNU social es "
+#: ../../include/bbcode.php:1059 ../../include/bbcode.php:1244
+#: ../../addon/wiki/Lib/NativeWikiPage.php:630
+msgid "Different viewers will see this text differently"
+msgstr "Visitantes diferentes verán este texto de forma distinta"
-#: ../../addon/statusnet/Mod_Statusnet.php:258
-msgid "Cancel GNU social Connection"
-msgstr "Cancelar la conexión de GNU social"
+#: ../../include/bbcode.php:1534
+msgid "$1 wrote:"
+msgstr "$1 escribió:"
-#: ../../addon/statusnet/Mod_Statusnet.php:270
-#: ../../addon/twitter/Mod_Twitter.php:145
-msgid "Currently connected to: "
-msgstr "Actualmente está conectado a: "
+#: ../../include/menu.php:120 ../../include/channel.php:1530
+#: ../../include/channel.php:1534 ../../addon/articles/Mod_Article_edit.php:97
+#: ../../addon/articles/articles.php:75 ../../addon/cards/cards.php:74
+#: ../../addon/cards/Mod_Card_edit.php:99 ../../addon/wiki/Mod_Wiki.php:214
+#: ../../addon/wiki/Mod_Wiki.php:381 ../../Zotlabs/Lib/Apps.php:601
+#: ../../Zotlabs/Lib/ThreadItem.php:158 ../../Zotlabs/Module/Oauth2.php:192
+#: ../../Zotlabs/Module/Layouts.php:191 ../../Zotlabs/Module/Blocks.php:158
+#: ../../Zotlabs/Module/Connections.php:332
+#: ../../Zotlabs/Module/Connections.php:381
+#: ../../Zotlabs/Module/Connections.php:402
+#: ../../Zotlabs/Module/Editlayout.php:114 ../../Zotlabs/Module/Oauth.php:171
+#: ../../Zotlabs/Module/Menu.php:176 ../../Zotlabs/Module/Admin/Profs.php:175
+#: ../../Zotlabs/Module/Webpages.php:250 ../../Zotlabs/Module/Thing.php:268
+#: ../../Zotlabs/Module/Editblock.php:114 ../../Zotlabs/Module/Group.php:245
+#: ../../Zotlabs/Module/Editwebpage.php:142 ../../Zotlabs/Widget/Cdav.php:144
+#: ../../Zotlabs/Widget/Cdav.php:181
+msgid "Edit"
+msgstr "Editar"
-#: ../../addon/statusnet/Mod_Statusnet.php:275
+#: ../../include/attach.php:273 ../../include/attach.php:324
+#: ../../include/attach.php:419
+msgid "Item was not found."
+msgstr "Elemento no encontrado."
+
+#: ../../include/attach.php:290
+msgid "Unknown error."
+msgstr "Error desconocido"
+
+#: ../../include/attach.php:614
+msgid "No source file."
+msgstr "Ningún fichero de origen"
+
+#: ../../include/attach.php:636
+msgid "Cannot locate file to replace"
+msgstr "No se puede localizar el fichero que va a ser sustituido."
+
+#: ../../include/attach.php:655
+msgid "Cannot locate file to revise/update"
+msgstr "No se puede localizar el fichero para revisar/actualizar"
+
+#: ../../include/attach.php:801
+#, php-format
+msgid "File exceeds size limit of %d"
+msgstr "El fichero supera el limite de tamaño de %d"
+
+#: ../../include/attach.php:822
+#, php-format
+msgid "You have reached your limit of %1$.0f Mbytes attachment storage."
+msgstr "Ha alcanzado su límite de %1$.0f Mbytes de almacenamiento de adjuntos."
+
+#: ../../include/attach.php:1011
+msgid "File upload failed. Possible system limit or action terminated."
+msgstr "Error de carga, posiblemente por limite del sistema o porque la acción ha finalizado."
+
+#: ../../include/attach.php:1040
+msgid "Stored file could not be verified. Upload failed."
+msgstr "El fichero almacenado no ha podido ser verificado. El envío ha fallado."
+
+#: ../../include/attach.php:1112 ../../include/attach.php:1128
+msgid "Path not available."
+msgstr "Ruta no disponible."
+
+#: ../../include/attach.php:1176 ../../include/attach.php:1341
+msgid "Empty pathname"
+msgstr "Ruta vacía"
+
+#: ../../include/attach.php:1202
+msgid "duplicate filename or path"
+msgstr "Nombre duplicado de ruta o fichero"
+
+#: ../../include/attach.php:1230
+msgid "Path not found."
+msgstr "Ruta no encontrada"
+
+#: ../../include/attach.php:1297
+msgid "mkdir failed."
+msgstr "mkdir ha fallado."
+
+#: ../../include/attach.php:1301
+msgid "database storage failed."
+msgstr "el almacenamiento en la base de datos ha fallado."
+
+#: ../../include/attach.php:1347
+msgid "Empty path"
+msgstr "Ruta vacía"
+
+#: ../../include/attach.php:2122
+#, php-format
+msgid "%s shared an %s with you"
+msgstr "%s ha compartido un/una %s con usted"
+
+#: ../../include/attach.php:2122
+#, php-format
+msgid "%s shared a %s with you"
+msgstr "%s ha compartido un/una %s con usted"
+
+#: ../../include/attach.php:2122
+msgid "image"
+msgstr "Imagen"
+
+#: ../../include/attach.php:2122 ../../addon/redfiles/redfilehelper.php:64
+msgid "file"
+msgstr "fichero"
+
+#: ../../include/auth.php:195
+msgid "Delegation session ended."
+msgstr "Finalizó la sesión de la delegación."
+
+#: ../../include/auth.php:199
+msgid "Logged out."
+msgstr "Desconectado/a."
+
+#: ../../include/auth.php:298
+msgid "Email validation is incomplete. Please check your email."
+msgstr "La validación del correo electrónico está incompleta. Por favor, compruebe su correo electrónico."
+
+#: ../../include/auth.php:314
+msgid "Failed authentication"
+msgstr "Autenticación fallida."
+
+#: ../../include/auth.php:324 ../../addon/openid/Mod_Openid.php:189
+msgid "Login failed."
+msgstr "El acceso ha fallado."
+
+#: ../../include/zid.php:410
+#, php-format
+msgid "OpenWebAuth: %1$s welcomes %2$s"
+msgstr "OpenWebAuth: %1$s da la bienvenida a %2$s"
+
+#: ../../include/activities.php:42
+msgid " and "
+msgstr " y "
+
+#: ../../include/activities.php:50
+msgid "public profile"
+msgstr "el perfil público"
+
+#: ../../include/activities.php:59
+#, php-format
+msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
+msgstr "%1$s ha cambiado %2$s a &ldquo;%3$s&rdquo;"
+
+#: ../../include/activities.php:60
+#, php-format
+msgid "Visit %1$s's %2$s"
+msgstr "Visitar %2$s de %1$s"
+
+#: ../../include/activities.php:63
+#, php-format
+msgid "%1$s has an updated %2$s, changing %3$s."
+msgstr "%1$s ha actualizado %2$s, cambiando %3$s."
+
+#: ../../include/acl_selectors.php:33
+#: ../../Zotlabs/Lib/PermissionDescription.php:34
+msgid "Visible to your default audience"
+msgstr "Visible para su público predeterminado."
+
+#: ../../include/acl_selectors.php:100
+msgid "Profile-Based Privacy Groups"
+msgstr "Grupos de privacidad basados en perfiles"
+
+#: ../../include/acl_selectors.php:119
+msgid "Private Forum"
+msgstr "Foro privado"
+
+#: ../../include/acl_selectors.php:125
+#: ../../Zotlabs/Widget/Notifications.php:131
+#: ../../Zotlabs/Widget/Notifications.php:132
+#: ../../Zotlabs/Widget/Activity_filter.php:130
+#: ../../Zotlabs/Widget/Forums.php:77
+msgid "Forums"
+msgstr "Foros"
+
+#: ../../include/acl_selectors.php:136
+#: ../../Zotlabs/Lib/PermissionDescription.php:107
+#: ../../Zotlabs/Module/Settings/Privacy.php:56
+msgid "Only me"
+msgstr "Sólo yo"
+
+#: ../../include/acl_selectors.php:143
+msgid "Share with"
+msgstr "Compartir con "
+
+#: ../../include/acl_selectors.php:144
+msgid "Custom selection"
+msgstr "Selección personalizada"
+
+#: ../../include/acl_selectors.php:146
msgid ""
-"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile "
-"details from unknown viewers?</em>) the link potentially included in public "
-"postings relayed to GNU social will lead the visitor to a blank page "
-"informing the visitor that the access to your profile has been restricted."
-msgstr "<strong>Aviso</strong>: Debido a su configuración de privacidad (<em>Ocultar los detalles de su perfil a los visitantes desconocidos?</em>) el vínculo potencialmente incluido en las entradas públicas retransmitidas a GNU social llevará al visitante a una página en blanco que le informará de que el acceso a su perfil ha sido restringido."
+"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and "
+"limit the scope of \"Allow\"."
+msgstr "Seleccione \"Permitir\" para permitir la visualización. \"No permitir\" le permite anular y limitar el alcance de \"Permitir\"."
-#: ../../addon/statusnet/Mod_Statusnet.php:280
-msgid "Post to GNU social by default"
-msgstr "Publicar en GNU social por defecto"
+#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32
+msgid "Allow"
+msgstr "Permitir"
-#: ../../addon/statusnet/Mod_Statusnet.php:280
+#: ../../include/acl_selectors.php:148
+msgid "Don't allow"
+msgstr "No permitir"
+
+#: ../../include/acl_selectors.php:154
+#: ../../addon/flashcards/Mod_Flashcards.php:261
+#: ../../Zotlabs/Module/Chat.php:240 ../../Zotlabs/Module/Filestorage.php:195
+#: ../../Zotlabs/Module/Thing.php:321 ../../Zotlabs/Module/Thing.php:374
+#: ../../Zotlabs/Module/Photos.php:671 ../../Zotlabs/Module/Photos.php:1042
+msgid "Permissions"
+msgstr "Permisos"
+
+#: ../../include/acl_selectors.php:156
+#: ../../addon/channelreputation/channelreputation.php:233
+#: ../../Zotlabs/Lib/ThreadItem.php:496 ../../Zotlabs/Module/Photos.php:1265
+#: ../../Zotlabs/Widget/Pinned.php:161 ../../Zotlabs/Storage/Browser.php:414
+msgid "Close"
+msgstr "Cerrar"
+
+#: ../../include/acl_selectors.php:181
+#, php-format
msgid ""
-"If enabled your public postings will be posted to the associated GNU-social "
-"account by default"
-msgstr "Si está activado, sus entradas públicas se publicarán en la cuenta GNU-social asociada de forma predeterminada"
+"Post permissions %s cannot be changed %s after a post is shared.</br />These"
+" permissions set who is allowed to view the post."
+msgstr "Los permisos de la entrada %s no se pueden cambiar %s una vez que se ha compartido.</br /> Estos permisos establecen quién está autorizado para ver el mensaje."
-#: ../../addon/statusnet/Mod_Statusnet.php:289
-#: ../../addon/twitter/Mod_Twitter.php:169
-msgid "Clear OAuth configuration"
-msgstr "Limpiar la configuración de OAuth"
+#: ../../include/network.php:412
+msgid "url: "
+msgstr "url: "
-#: ../../addon/statusnet/Mod_Statusnet.php:301
-msgid "GNU-Social Crosspost Connector"
-msgstr "GNU-Social Crosspost Connector"
+#: ../../include/network.php:413
+msgid "error_code: "
+msgstr "código_de_error: "
-#: ../../addon/statusnet/statusnet.php:145
-msgid "Post to GNU social"
-msgstr "Publicar en GNU social"
+#: ../../include/network.php:414
+msgid "error_string: "
+msgstr "cadena_de_error: "
-#: ../../addon/statusnet/statusnet.php:593
-#: ../../Zotlabs/Module/Admin/Site.php:423
-msgid "Site name"
-msgstr "Nombre del sitio"
+#: ../../include/network.php:415
+msgid "content-type: "
+msgstr "tipo de contenido: "
-#: ../../addon/statusnet/statusnet.php:594
-msgid "API URL"
-msgstr "URL de la API"
+#: ../../include/network.php:1765 ../../include/network.php:1766
+msgid "Friendica"
+msgstr "Friendica"
-#: ../../addon/statusnet/statusnet.php:595 ../../addon/twitter/twitter.php:505
-#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:139
-#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
-msgid "Consumer Secret"
-msgstr "Consumer Secret"
+#: ../../include/network.php:1767
+msgid "OStatus"
+msgstr "OStatus"
-#: ../../addon/statusnet/statusnet.php:596 ../../addon/twitter/twitter.php:504
-#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:138
-msgid "Consumer Key"
-msgstr "Consumer Key"
+#: ../../include/network.php:1768
+msgid "GNU-Social"
+msgstr "GNU Social"
-#: ../../addon/statusnet/statusnet.php:597
-msgid "Application name"
-msgstr "Nombre de la aplicación"
+#: ../../include/network.php:1769
+msgid "RSS/Atom"
+msgstr "RSS/Atom"
-#: ../../addon/rtof/Mod_Rtof.php:24
-msgid "Friendica Crosspost Connector Settings saved."
-msgstr "Se han guardado los ajustes del conector de publicación cruzada con Friendica."
+#: ../../include/network.php:1770 ../../addon/pubcrawl/as.php:1332
+#: ../../addon/pubcrawl/as.php:2002 ../../Zotlabs/Lib/Activity.php:3605
+msgid "ActivityPub"
+msgstr "ActivityPub"
-#: ../../addon/rtof/Mod_Rtof.php:47
-msgid "Send public postings to Friendica by default"
-msgstr "Enviar entradas públicas a Friendica por defecto"
+#: ../../include/network.php:1771 ../../addon/redred/Mod_Redred.php:69
+#: ../../addon/openid/MysqlProvider.php:56
+#: ../../addon/openid/MysqlProvider.php:57 ../../addon/rtof/Mod_Rtof.php:55
+#: ../../Zotlabs/Module/Connedit.php:736
+#: ../../Zotlabs/Module/Admin/Accounts.php:316
+#: ../../Zotlabs/Module/Admin/Accounts.php:330
+#: ../../Zotlabs/Module/Cdav.php:1378
+msgid "Email"
+msgstr "Correo electrónico"
-#: ../../addon/rtof/Mod_Rtof.php:51
-msgid "Friendica API Path"
-msgstr "Ruta a la API de Friendica"
+#: ../../include/network.php:1772
+msgid "Diaspora"
+msgstr "Diaspora"
-#: ../../addon/rtof/Mod_Rtof.php:55
-msgid "Friendica login name"
-msgstr "Nombre de inicio de sesión en Friendica"
+#: ../../include/network.php:1773
+msgid "Facebook"
+msgstr "Facebook"
-#: ../../addon/rtof/Mod_Rtof.php:59
-msgid "Friendica password"
-msgstr "Contraseña de Friendica"
+#: ../../include/network.php:1774
+msgid "Zot"
+msgstr "Zot"
-#: ../../addon/rtof/Mod_Rtof.php:67
-msgid "Friendica Crosspost Connector"
-msgstr "Friendica Crosspost Connector"
+#: ../../include/network.php:1775
+msgid "LinkedIn"
+msgstr "LinkedIn"
-#: ../../addon/rtof/rtof.php:51
-msgid "Post to Friendica"
-msgstr "Publicar en Friendica"
+#: ../../include/network.php:1776
+msgid "XMPP/IM"
+msgstr "XMPP/IM"
-#: ../../addon/wppost/wppost.php:47
-msgid "Post to WordPress"
-msgstr "Publicar en WordPress"
+#: ../../include/network.php:1777
+msgid "MySpace"
+msgstr "MySpace"
-#: ../../addon/wppost/Mod_Wppost.php:30
-msgid "Wordpress Settings saved."
-msgstr "Se han guardado los ajustes de WordPress."
+#: ../../include/conversation.php:138 ../../include/text.php:2342
+#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1647
+#: ../../addon/redphotos/redphotohelper.php:71
+#: ../../Zotlabs/Lib/Activity.php:3563 ../../Zotlabs/Module/Like.php:445
+#: ../../Zotlabs/Module/Subthread.php:115 ../../Zotlabs/Module/Tagger.php:71
+msgid "photo"
+msgstr "foto"
-#: ../../addon/wppost/Mod_Wppost.php:67
-msgid "WordPress username"
-msgstr "Nombre de usuario de WordPress"
+#: ../../include/conversation.php:145 ../../Zotlabs/Module/Like.php:184
+msgid "channel"
+msgstr "el canal"
-#: ../../addon/wppost/Mod_Wppost.php:71
-msgid "WordPress password"
-msgstr "Contraseña de WordPress"
+#: ../../include/conversation.php:170 ../../include/text.php:2350
+#: ../../Zotlabs/Module/Tagger.php:81
+msgid "comment"
+msgstr "el comentario"
-#: ../../addon/wppost/Mod_Wppost.php:75
-msgid "WordPress API URL"
-msgstr "URL de la API de WordPress"
+#: ../../include/conversation.php:184 ../../addon/pubcrawl/as.php:1993
+#: ../../addon/diaspora/Receiver.php:1591 ../../Zotlabs/Lib/Activity.php:3596
+#: ../../Zotlabs/Module/Like.php:477
+#, php-format
+msgid "%1$s likes %2$s's %3$s"
+msgstr "A %1$s le gusta %3$s de %2$s"
-#: ../../addon/wppost/Mod_Wppost.php:76
-msgid "Typically https://your-blog.tld/xmlrpc.php"
-msgstr "Habitualmente https://your-blog.tld/xmlrpc.php"
+#: ../../include/conversation.php:187 ../../addon/pubcrawl/as.php:1995
+#: ../../Zotlabs/Lib/Activity.php:3598 ../../Zotlabs/Module/Like.php:479
+#, php-format
+msgid "%1$s doesn't like %2$s's %3$s"
+msgstr "A %1$s no le gusta %3$s de %2$s"
-#: ../../addon/wppost/Mod_Wppost.php:79
-msgid "WordPress blogid"
-msgstr "Blog de WordPress"
+#: ../../include/conversation.php:193
+#, php-format
+msgid "likes %1$s's %2$s"
+msgstr "gusta de %2$s de %1$s"
-#: ../../addon/wppost/Mod_Wppost.php:80
-msgid "For multi-user sites such as wordpress.com, otherwise leave blank"
-msgstr "Para sitios multiusuario como wordpress.com, de lo contrario, dejar en blanco"
+#: ../../include/conversation.php:196
+#, php-format
+msgid "doesn't like %1$s's %2$s"
+msgstr "no gusta de %2$s de %1$s"
-#: ../../addon/wppost/Mod_Wppost.php:84
-msgid "Post to WordPress by default"
-msgstr "Publicar en WordPress por defecto"
+#: ../../include/conversation.php:236 ../../include/conversation.php:238
+#, php-format
+msgid "%1$s is now connected with %2$s"
+msgstr "%1$s ahora está conectado/a con %2$s"
-#: ../../addon/wppost/Mod_Wppost.php:88
-msgid "Forward comments (requires hubzilla_wp plugin)"
-msgstr "Reenviar comentarios (requerido por el plugin hubzilla_wp)"
+#: ../../include/conversation.php:273
+#, php-format
+msgid "%1$s poked %2$s"
+msgstr "%1$s ha dado un toque a %2$s"
-#: ../../addon/wppost/Mod_Wppost.php:92 ../../addon/dwpost/Mod_Dwpost.php:63
-#: ../../addon/ljpost/Mod_Ljpost.php:69
-msgid "Add link to original post"
-msgstr "Añadir enlace a la entrada original"
+#: ../../include/conversation.php:277 ../../include/text.php:1260
+msgid "poked"
+msgstr "ha dado un toque a"
-#: ../../addon/wppost/Mod_Wppost.php:96 ../../addon/dwpost/Mod_Dwpost.php:67
-msgid "Link description (default:"
-msgstr "Descripción del enlace (por defecto: "
+#: ../../include/conversation.php:296 ../../Zotlabs/Module/Mood.php:76
+#, php-format
+msgctxt "mood"
+msgid "%1$s is %2$s"
+msgstr "%1$s está %2$s"
-#: ../../addon/wppost/Mod_Wppost.php:104
-msgid "Wordpress Post"
-msgstr "Publicar en Wordpress"
+#: ../../include/conversation.php:526 ../../Zotlabs/Lib/ThreadItem.php:501
+msgid "This is an unsaved preview"
+msgstr "Esta es una previsualización sin guardar"
-#: ../../addon/content_import/Mod_content_import.php:27
-msgid "No server specified"
-msgstr "No se ha especificado ningún servidor"
+#: ../../include/conversation.php:658 ../../Zotlabs/Module/Photos.php:1108
+msgctxt "title"
+msgid "Likes"
+msgstr "Me gusta"
-#: ../../addon/content_import/Mod_content_import.php:73
-msgid "Posts imported"
-msgstr "Entradas importadas"
+#: ../../include/conversation.php:659 ../../Zotlabs/Module/Photos.php:1108
+msgctxt "title"
+msgid "Dislikes"
+msgstr "No me gusta"
-#: ../../addon/content_import/Mod_content_import.php:113
-msgid "Files imported"
-msgstr "Ficheros importados"
+#: ../../include/conversation.php:660 ../../Zotlabs/Module/Photos.php:1109
+#: ../../Zotlabs/Widget/Pinned.php:80
+msgctxt "title"
+msgid "Agree"
+msgstr "De acuerdo"
-#: ../../addon/content_import/Mod_content_import.php:134
-#: ../../Zotlabs/Lib/Apps.php:336
-msgid "Content Import"
-msgstr "Importación de contenidos"
+#: ../../include/conversation.php:661 ../../Zotlabs/Module/Photos.php:1109
+#: ../../Zotlabs/Widget/Pinned.php:81
+msgctxt "title"
+msgid "Disagree"
+msgstr "En desacuerdo"
-#: ../../addon/content_import/Mod_content_import.php:135
-msgid ""
-"This will import all your conversations and cloud files from a cloned "
-"channel on another server. This may take a while if you have lots of posts "
-"and or files."
-msgstr "Esto importará todas sus conversaciones y archivos de nube de un canal clonado en otro servidor. El proceso puede tardar un poco si tiene muchos mensajes y/o ficheros."
+#: ../../include/conversation.php:662 ../../Zotlabs/Module/Photos.php:1109
+#: ../../Zotlabs/Widget/Pinned.php:82
+msgctxt "title"
+msgid "Abstain"
+msgstr "Abstención"
-#: ../../addon/content_import/Mod_content_import.php:136
-msgid "Include posts"
-msgstr "Incluir entradas"
+#: ../../include/conversation.php:663 ../../Zotlabs/Module/Photos.php:1110
+#: ../../Zotlabs/Widget/Pinned.php:69
+msgctxt "title"
+msgid "Attending"
+msgstr "Participaré"
-#: ../../addon/content_import/Mod_content_import.php:136
-msgid "Conversations, Articles, Cards, and other posted content"
-msgstr "Conversaciones, artículos, fichas y otros contenidos publicados"
+#: ../../include/conversation.php:664 ../../Zotlabs/Module/Photos.php:1110
+#: ../../Zotlabs/Widget/Pinned.php:70
+msgctxt "title"
+msgid "Not attending"
+msgstr "No participaré"
-#: ../../addon/content_import/Mod_content_import.php:137
-msgid "Include files"
-msgstr "Incluir ficheros"
+#: ../../include/conversation.php:665 ../../Zotlabs/Module/Photos.php:1110
+#: ../../Zotlabs/Widget/Pinned.php:71
+msgctxt "title"
+msgid "Might attend"
+msgstr "Quizá participe"
-#: ../../addon/content_import/Mod_content_import.php:137
-msgid "Files, Photos and other cloud storage"
-msgstr "Archivos, fotos y otro tipo de almacenamiento en la nube"
+#: ../../include/conversation.php:735
+msgid "Select"
+msgstr "Seleccionar"
-#: ../../addon/content_import/Mod_content_import.php:138
-msgid "Original Server base URL"
-msgstr "URL base del servidor original"
+#: ../../include/conversation.php:736 ../../include/conversation.php:799
+#: ../../addon/articles/Mod_Article_edit.php:128
+#: ../../addon/cards/Mod_Card_edit.php:130 ../../Zotlabs/Lib/Apps.php:602
+#: ../../Zotlabs/Lib/ThreadItem.php:179 ../../Zotlabs/Module/Oauth2.php:193
+#: ../../Zotlabs/Module/Blocks.php:160 ../../Zotlabs/Module/Editlayout.php:138
+#: ../../Zotlabs/Module/Oauth.php:172 ../../Zotlabs/Module/Permcats.php:261
+#: ../../Zotlabs/Module/Tokens.php:295 ../../Zotlabs/Module/Connedit.php:540
+#: ../../Zotlabs/Module/Connedit.php:749
+#: ../../Zotlabs/Module/Admin/Channels.php:149
+#: ../../Zotlabs/Module/Admin/Accounts.php:320
+#: ../../Zotlabs/Module/Admin/Profs.php:176
+#: ../../Zotlabs/Module/Contactedit.php:667 ../../Zotlabs/Module/Cdav.php:1057
+#: ../../Zotlabs/Module/Cdav.php:1391 ../../Zotlabs/Module/Webpages.php:252
+#: ../../Zotlabs/Module/Thing.php:269 ../../Zotlabs/Module/Editblock.php:139
+#: ../../Zotlabs/Module/Group.php:251 ../../Zotlabs/Module/Photos.php:1171
+#: ../../Zotlabs/Module/Editwebpage.php:167
+#: ../../Zotlabs/Storage/Browser.php:387
+msgid "Delete"
+msgstr "Eliminar"
-#: ../../addon/content_import/Mod_content_import.php:139
-#: ../../addon/hzfiles/hzfiles.php:84
-msgid "Since modified date yyyy-mm-dd"
-msgstr "Modificado desde la fecha yyyy-mm-dd"
+#: ../../include/conversation.php:742 ../../Zotlabs/Lib/ThreadItem.php:263
+msgid "Toggle Star Status"
+msgstr "Activar o desactivar el estado de entrada preferida"
-#: ../../addon/content_import/Mod_content_import.php:140
-#: ../../addon/hzfiles/hzfiles.php:85
-msgid "Until modified date yyyy-mm-dd"
-msgstr "Modificado hasta la fecha yyyy-mm-dd"
+#: ../../include/conversation.php:748
+msgid "Private Message"
+msgstr "Mensaje Privado"
+
+#: ../../include/conversation.php:757 ../../Zotlabs/Lib/ThreadItem.php:273
+#: ../../Zotlabs/Widget/Pinned.php:91
+msgid "Message signature validated"
+msgstr "Firma de mensaje validada"
+
+#: ../../include/conversation.php:758 ../../Zotlabs/Lib/ThreadItem.php:274
+#: ../../Zotlabs/Widget/Pinned.php:92
+msgid "Message signature incorrect"
+msgstr "Firma de mensaje incorrecta"
+
+#: ../../include/conversation.php:798 ../../Zotlabs/Module/Connections.php:352
+#: ../../Zotlabs/Module/Connections.php:403
+#: ../../Zotlabs/Module/Admin/Accounts.php:318
+msgid "Approve"
+msgstr "Aprobar"
+
+#: ../../include/conversation.php:804
+#, php-format
+msgid "View %s's profile @ %s"
+msgstr "Ver el perfil @ %s de %s"
+
+#: ../../include/conversation.php:825
+msgid "Categories:"
+msgstr "Temas:"
+
+#: ../../include/conversation.php:826
+msgid "Filed under:"
+msgstr "Archivado bajo:"
+
+#: ../../include/conversation.php:832 ../../Zotlabs/Lib/ThreadItem.php:430
+#: ../../Zotlabs/Widget/Pinned.php:135
+#, php-format
+msgid "from %s"
+msgstr "desde %s"
+
+#: ../../include/conversation.php:835 ../../Zotlabs/Lib/ThreadItem.php:433
+#: ../../Zotlabs/Widget/Pinned.php:138
+#, php-format
+msgid "last edited: %s"
+msgstr "último cambio: %s"
+
+#: ../../include/conversation.php:836 ../../Zotlabs/Lib/ThreadItem.php:434
+#: ../../Zotlabs/Widget/Pinned.php:139
+#, php-format
+msgid "Expires: %s"
+msgstr "Caduca: %s"
+
+#: ../../include/conversation.php:851 ../../addon/articles/articles.php:83
+#: ../../addon/cards/cards.php:82
+msgid "View in context"
+msgstr "Mostrar en su contexto"
+
+#: ../../include/conversation.php:853 ../../Zotlabs/Lib/ThreadItem.php:502
+#: ../../Zotlabs/Module/Photos.php:1074
+msgid "Please wait"
+msgstr "Espere por favor"
+
+#: ../../include/conversation.php:954
+msgid "remove"
+msgstr "eliminar"
+
+#: ../../include/conversation.php:958
+msgid "Loading..."
+msgstr "Cargando..."
+
+#: ../../include/conversation.php:959 ../../Zotlabs/Lib/ThreadItem.php:290
+msgid "Conversation Features"
+msgstr "Funciones de conversación "
+
+#: ../../include/conversation.php:960
+msgid "Delete Selected Items"
+msgstr "Eliminar elementos seleccionados"
-#: ../../addon/hsse/hsse.php:82 ../../include/conversation.php:1332
+#: ../../include/conversation.php:996
+msgid "View Source"
+msgstr "Ver el código fuente de la entrada"
+
+#: ../../include/conversation.php:1006
+msgid "Follow Thread"
+msgstr "Seguir este hilo"
+
+#: ../../include/conversation.php:1015
+msgid "Unfollow Thread"
+msgstr "Dejar de seguir este hilo"
+
+#: ../../include/conversation.php:1107 ../../Zotlabs/Module/Connedit.php:501
+msgid "Recent Activity"
+msgstr "Actividad reciente"
+
+#: ../../include/conversation.php:1131
+msgid "Edit Connection"
+msgstr "Editar conexión"
+
+#: ../../include/conversation.php:1143 ../../Zotlabs/Lib/Apps.php:356
+#: ../../Zotlabs/Module/Poke.php:181 ../../Zotlabs/Module/Poke.php:185
+msgid "Poke"
+msgstr "Toques y otras cosas"
+
+#: ../../include/conversation.php:1267
+#, php-format
+msgid "%s likes this."
+msgstr "A %s le gusta esto."
+
+#: ../../include/conversation.php:1267
+#, php-format
+msgid "%s doesn't like this."
+msgstr "A %s no le gusta esto."
+
+#: ../../include/conversation.php:1271
+#, php-format
+msgid "<span %1$s>%2$d people</span> like this."
+msgid_plural "<span %1$s>%2$d people</span> like this."
+msgstr[0] "a <span %1$s>%2$d personas</span> le gusta esto."
+msgstr[1] "A <span %1$s>%2$d personas</span> les gusta esto."
+msgstr[2] "A <span %1$s>%2$d personas</span> les gusta esto."
+
+#: ../../include/conversation.php:1273
+#, php-format
+msgid "<span %1$s>%2$d people</span> don't like this."
+msgid_plural "<span %1$s>%2$d people</span> don't like this."
+msgstr[0] "a <span %1$s>%2$d personas</span> no les gusta esto."
+msgstr[1] "A <span %1$s>%2$d personas</span> no les gusta esto."
+msgstr[2] "A <span %1$s>%2$d personas</span> no les gusta esto."
+
+#: ../../include/conversation.php:1279
+msgid "and"
+msgstr "y"
+
+#: ../../include/conversation.php:1282
+#, php-format
+msgid ", and %d other people"
+msgid_plural ", and %d other people"
+msgstr[0] ", y %d persona más"
+msgstr[1] ", y %d personas más"
+msgstr[2] ", y %d personas más"
+
+#: ../../include/conversation.php:1283
+#, php-format
+msgid "%s like this."
+msgstr "A %s le gusta esto."
+
+#: ../../include/conversation.php:1283
+#, php-format
+msgid "%s don't like this."
+msgstr "A %s no le gusta esto."
+
+#: ../../include/conversation.php:1334 ../../addon/hsse/hsse.php:82
msgid "Set your location"
msgstr "Establecer su ubicación"
-#: ../../addon/hsse/hsse.php:83 ../../include/conversation.php:1333
+#: ../../include/conversation.php:1335 ../../addon/hsse/hsse.php:83
msgid "Clear browser location"
msgstr "Eliminar los datos de localización geográfica del navegador"
-#: ../../addon/hsse/hsse.php:95 ../../addon/cards/Mod_Card_edit.php:101
+#: ../../include/conversation.php:1347 ../../addon/hsse/hsse.php:95
#: ../../addon/articles/Mod_Article_edit.php:99
-#: ../../include/conversation.php:1345
-#: ../../Zotlabs/Module/Editwebpage.php:143 ../../Zotlabs/Module/Chat.php:218
+#: ../../addon/cards/Mod_Card_edit.php:101 ../../Zotlabs/Module/Chat.php:219
#: ../../Zotlabs/Module/Editblock.php:116
+#: ../../Zotlabs/Module/Editwebpage.php:143
msgid "Insert web link"
msgstr "Insertar enlace web"
-#: ../../addon/hsse/hsse.php:99 ../../include/conversation.php:1349
+#: ../../include/conversation.php:1351 ../../addon/hsse/hsse.php:99
msgid "Embed (existing) photo from your photo albums"
msgstr "Insertar una foto de sus álbumes"
-#: ../../addon/hsse/hsse.php:134 ../../include/conversation.php:1382
-#: ../../Zotlabs/Module/Chat.php:216
+#: ../../include/conversation.php:1384 ../../addon/hsse/hsse.php:134
+#: ../../Zotlabs/Module/Chat.php:217
msgid "Please enter a link URL:"
msgstr "Por favor, introduzca la dirección del enlace:"
-#: ../../addon/hsse/hsse.php:135 ../../include/conversation.php:1383
+#: ../../include/conversation.php:1385 ../../addon/hsse/hsse.php:135
msgid "Tag term:"
msgstr "Término de la etiqueta:"
-#: ../../addon/hsse/hsse.php:136 ../../include/conversation.php:1384
+#: ../../include/conversation.php:1386 ../../addon/hsse/hsse.php:136
msgid "Where are you right now?"
msgstr "¿Donde está ahora?"
-#: ../../addon/hsse/hsse.php:141 ../../include/conversation.php:1389
+#: ../../include/conversation.php:1389 ../../addon/hsse/hsse.php:139
+#: ../../addon/wiki/Mod_Wiki.php:400 ../../Zotlabs/Module/Cover_photo.php:430
+#: ../../Zotlabs/Module/Profile_photo.php:555
+msgid "Choose images to embed"
+msgstr "Elegir imágenes para incluir"
+
+#: ../../include/conversation.php:1390 ../../addon/hsse/hsse.php:140
+#: ../../addon/wiki/Mod_Wiki.php:401 ../../Zotlabs/Module/Cover_photo.php:431
+#: ../../Zotlabs/Module/Profile_photo.php:556
+msgid "Choose an album"
+msgstr "Elegir un álbum"
+
+#: ../../include/conversation.php:1391 ../../addon/hsse/hsse.php:141
msgid "Choose a different album..."
msgstr "Elegir un álbum diferente..."
-#: ../../addon/hsse/hsse.php:145 ../../include/conversation.php:1393
+#: ../../include/conversation.php:1392 ../../addon/hsse/hsse.php:142
+#: ../../addon/wiki/Mod_Wiki.php:403 ../../Zotlabs/Module/Cover_photo.php:433
+#: ../../Zotlabs/Module/Profile_photo.php:558
+msgid "Error getting album list"
+msgstr "Error al obtener la lista de álbumes"
+
+#: ../../include/conversation.php:1393 ../../addon/hsse/hsse.php:143
+#: ../../addon/wiki/Mod_Wiki.php:404 ../../Zotlabs/Module/Cover_photo.php:434
+#: ../../Zotlabs/Module/Profile_photo.php:559
+msgid "Error getting photo link"
+msgstr "Error al obtener el enlace de la foto"
+
+#: ../../include/conversation.php:1394 ../../addon/hsse/hsse.php:144
+#: ../../addon/wiki/Mod_Wiki.php:405 ../../Zotlabs/Module/Cover_photo.php:435
+#: ../../Zotlabs/Module/Profile_photo.php:560
+msgid "Error getting album"
+msgstr "Error al obtener el álbum"
+
+#: ../../include/conversation.php:1395 ../../addon/hsse/hsse.php:145
msgid "Comments enabled"
msgstr "Comentarios habilitados"
-#: ../../addon/hsse/hsse.php:146 ../../include/conversation.php:1394
+#: ../../include/conversation.php:1396 ../../addon/hsse/hsse.php:146
msgid "Comments disabled"
msgstr "Comentarios deshabilitados"
-#: ../../addon/hsse/hsse.php:153 ../../include/conversation.php:1411
-#: ../../Zotlabs/Module/Webpages.php:259 ../../Zotlabs/Module/Photos.php:1105
-#: ../../Zotlabs/Lib/ThreadItem.php:845
+#: ../../include/conversation.php:1413 ../../addon/hsse/hsse.php:153
+#: ../../Zotlabs/Lib/ThreadItem.php:838 ../../Zotlabs/Module/Webpages.php:257
+#: ../../Zotlabs/Module/Photos.php:1094
msgid "Preview"
msgstr "Previsualizar"
-#: ../../addon/hsse/hsse.php:195 ../../include/conversation.php:1453
+#: ../../include/conversation.php:1446 ../../addon/hsse/hsse.php:186
+#: ../../addon/wiki/Mod_Wiki.php:304 ../../Zotlabs/Module/Layouts.php:192
+#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Webpages.php:251
+#: ../../Zotlabs/Module/Photos.php:1073 ../../Zotlabs/Widget/Cdav.php:142
+msgid "Share"
+msgstr "Compartir"
+
+#: ../../include/conversation.php:1455 ../../addon/hsse/hsse.php:195
msgid "Page link name"
msgstr "Nombre del enlace de la página"
-#: ../../addon/hsse/hsse.php:198 ../../include/conversation.php:1456
+#: ../../include/conversation.php:1458 ../../addon/hsse/hsse.php:198
msgid "Post as"
msgstr "Publicar como"
-#: ../../addon/hsse/hsse.php:200 ../../include/conversation.php:1458
-#: ../../Zotlabs/Lib/ThreadItem.php:836
+#: ../../include/conversation.php:1460 ../../addon/hsse/hsse.php:200
+#: ../../Zotlabs/Lib/ThreadItem.php:829
msgid "Bold"
msgstr "Negrita"
-#: ../../addon/hsse/hsse.php:201 ../../include/conversation.php:1459
-#: ../../Zotlabs/Lib/ThreadItem.php:837
+#: ../../include/conversation.php:1461 ../../addon/hsse/hsse.php:201
+#: ../../Zotlabs/Lib/ThreadItem.php:830
msgid "Italic"
msgstr "Itálico "
-#: ../../addon/hsse/hsse.php:202 ../../include/conversation.php:1460
-#: ../../Zotlabs/Lib/ThreadItem.php:838
+#: ../../include/conversation.php:1462 ../../addon/hsse/hsse.php:202
+#: ../../Zotlabs/Lib/ThreadItem.php:831
msgid "Underline"
msgstr "Subrayar"
-#: ../../addon/hsse/hsse.php:203 ../../include/conversation.php:1461
-#: ../../Zotlabs/Lib/ThreadItem.php:839
+#: ../../include/conversation.php:1463 ../../addon/hsse/hsse.php:203
+#: ../../Zotlabs/Lib/ThreadItem.php:832
msgid "Quote"
msgstr "Citar"
-#: ../../addon/hsse/hsse.php:204 ../../include/conversation.php:1462
-#: ../../Zotlabs/Lib/ThreadItem.php:840
+#: ../../include/conversation.php:1464 ../../addon/hsse/hsse.php:204
+#: ../../Zotlabs/Lib/ThreadItem.php:833
msgid "Code"
msgstr "Código"
-#: ../../addon/hsse/hsse.php:205 ../../include/conversation.php:1463
-#: ../../Zotlabs/Lib/ThreadItem.php:842
+#: ../../include/conversation.php:1465 ../../addon/hsse/hsse.php:205
+#: ../../Zotlabs/Lib/ThreadItem.php:835
msgid "Attach/Upload file"
msgstr "Adjuntar/cargar fichero"
-#: ../../addon/hsse/hsse.php:212 ../../include/conversation.php:1470
+#: ../../include/conversation.php:1468 ../../addon/hsse/hsse.php:208
+#: ../../addon/wiki/Mod_Wiki.php:397
+msgid "Embed an image from your albums"
+msgstr "Incluir una imagen de sus álbumes"
+
+#: ../../include/conversation.php:1469 ../../include/conversation.php:1524
+#: ../../addon/hsse/hsse.php:209 ../../addon/hsse/hsse.php:258
+#: ../../addon/articles/Mod_Article_edit.php:130
+#: ../../addon/cards/Mod_Card_edit.php:132 ../../addon/wiki/Mod_Wiki.php:365
+#: ../../addon/wiki/Mod_Wiki.php:398 ../../Zotlabs/Module/Cover_photo.php:428
+#: ../../Zotlabs/Module/Profile_photo.php:553
+#: ../../Zotlabs/Module/Oauth2.php:115 ../../Zotlabs/Module/Oauth2.php:143
+#: ../../Zotlabs/Module/Editlayout.php:140 ../../Zotlabs/Module/Oauth.php:110
+#: ../../Zotlabs/Module/Oauth.php:136 ../../Zotlabs/Module/Connedit.php:750
+#: ../../Zotlabs/Module/Admin/Addons.php:430
+#: ../../Zotlabs/Module/Cdav.php:1059 ../../Zotlabs/Module/Cdav.php:1392
+#: ../../Zotlabs/Module/Filer.php:56 ../../Zotlabs/Module/Fbrowser.php:66
+#: ../../Zotlabs/Module/Fbrowser.php:88 ../../Zotlabs/Module/Editblock.php:141
+#: ../../Zotlabs/Module/Tagrm.php:15 ../../Zotlabs/Module/Tagrm.php:138
+#: ../../Zotlabs/Module/Editpost.php:114
+#: ../../Zotlabs/Module/Editwebpage.php:169
+#: ../../Zotlabs/Storage/Browser.php:386
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: ../../include/conversation.php:1470 ../../include/conversation.php:1523
+#: ../../addon/hsse/hsse.php:210 ../../addon/hsse/hsse.php:257
+#: ../../addon/wiki/Mod_Wiki.php:399 ../../Zotlabs/Module/Cover_photo.php:429
+#: ../../Zotlabs/Module/Profile_photo.php:554
+msgid "OK"
+msgstr "OK"
+
+#: ../../include/conversation.php:1472 ../../addon/hsse/hsse.php:212
msgid "Toggle voting"
msgstr "Cambiar votación"
-#: ../../addon/hsse/hsse.php:215 ../../include/conversation.php:1477
+#: ../../include/conversation.php:1473
+msgid "Toggle poll"
+msgstr "Activar o desactivar encuestas"
+
+#: ../../include/conversation.php:1474
+msgid "Option"
+msgstr "Opción"
+
+#: ../../include/conversation.php:1475
+msgid "Add option"
+msgstr "Añadir una opción"
+
+#: ../../include/conversation.php:1476
+msgid "Minutes"
+msgstr "Minutos "
+
+#: ../../include/conversation.php:1476
+msgid "Hours"
+msgstr "Horas "
+
+#: ../../include/conversation.php:1476
+msgid "Days"
+msgstr "Días "
+
+#: ../../include/conversation.php:1477
+msgid "Allow multiple answers"
+msgstr "Permitir respuestas múltiples"
+
+#: ../../include/conversation.php:1479 ../../addon/hsse/hsse.php:215
msgid "Disable comments"
msgstr "Dehabilitar los comentarios"
-#: ../../addon/hsse/hsse.php:216 ../../include/conversation.php:1478
+#: ../../include/conversation.php:1480 ../../addon/hsse/hsse.php:216
msgid "Toggle comments"
msgstr "Activar o desactivar los comentarios"
-#: ../../addon/hsse/hsse.php:221 ../../addon/cards/Mod_Card_edit.php:118
+#: ../../include/conversation.php:1486 ../../addon/hsse/hsse.php:221
#: ../../addon/articles/Mod_Article_edit.php:116
-#: ../../include/conversation.php:1484 ../../Zotlabs/Module/Editblock.php:129
-#: ../../Zotlabs/Module/Photos.php:678 ../../Zotlabs/Module/Photos.php:1050
+#: ../../addon/cards/Mod_Card_edit.php:118
+#: ../../Zotlabs/Module/Editblock.php:129 ../../Zotlabs/Module/Photos.php:667
+#: ../../Zotlabs/Module/Photos.php:1039
msgid "Title (optional)"
msgstr "Título (opcional)"
-#: ../../addon/hsse/hsse.php:224 ../../include/conversation.php:1488
+#: ../../include/conversation.php:1487
+msgid "Summary (optional)"
+msgstr "Sumario (opcional)"
+
+#: ../../include/conversation.php:1490 ../../addon/hsse/hsse.php:224
msgid "Categories (optional, comma-separated list)"
msgstr "Temas (opcional, lista separada por comas)"
-#: ../../addon/hsse/hsse.php:225 ../../include/conversation.php:1489
+#: ../../include/conversation.php:1491 ../../addon/hsse/hsse.php:225
msgid "Permission settings"
msgstr "Configuración de permisos"
-#: ../../addon/hsse/hsse.php:247 ../../include/conversation.php:1511
+#: ../../include/conversation.php:1513 ../../addon/hsse/hsse.php:247
msgid "Other networks and post services"
msgstr "Otras redes y servicios de publicación"
-#: ../../addon/hsse/hsse.php:250 ../../include/conversation.php:1514
+#: ../../include/conversation.php:1516 ../../addon/hsse/hsse.php:250
msgid "Set expiration date"
msgstr "Configurar fecha de caducidad"
-#: ../../addon/hsse/hsse.php:253 ../../include/conversation.php:1517
+#: ../../include/conversation.php:1519 ../../addon/hsse/hsse.php:253
msgid "Set publish date"
msgstr "Establecer la fecha de publicación"
-#: ../../addon/hsse/hsse.php:255 ../../include/conversation.php:1519
-#: ../../Zotlabs/Module/Chat.php:217 ../../Zotlabs/Lib/ThreadItem.php:848
+#: ../../include/conversation.php:1521 ../../addon/hsse/hsse.php:255
+#: ../../Zotlabs/Lib/ThreadItem.php:841 ../../Zotlabs/Module/Chat.php:218
msgid "Encrypt text"
msgstr "Cifrar texto"
-#: ../../addon/hsse/Mod_Hsse.php:15
-msgid "WYSIWYG status editor"
-msgstr "Editor de estado de WYSIWYG"
+#: ../../include/conversation.php:1765 ../../Zotlabs/Lib/ThreadItem.php:239
+#: ../../Zotlabs/Module/Photos.php:1133
+msgctxt "noun"
+msgid "Dislike"
+msgid_plural "Dislikes"
+msgstr[0] "No me gusta"
+msgstr[1] "No me gusta"
+msgstr[2] "No me gusta"
-#: ../../addon/hsse/Mod_Hsse.php:24
-msgid "WYSIWYG Status App"
-msgstr "App WYSIWYG Status"
+#: ../../include/conversation.php:1768
+msgctxt "noun"
+msgid "Attending"
+msgid_plural "Attending"
+msgstr[0] "Participaré"
+msgstr[1] "Participaré"
+msgstr[2] "Participaré"
-#: ../../addon/hsse/Mod_Hsse.php:32
-msgid "WYSIWYG Status"
-msgstr "Estado de WYSIWYG"
+#: ../../include/conversation.php:1771
+msgctxt "noun"
+msgid "Not Attending"
+msgid_plural "Not Attending"
+msgstr[0] "No participaré"
+msgstr[1] "No participaré"
+msgstr[2] "No participaré"
-#: ../../addon/openstreetmap/openstreetmap.php:133
-msgid "View Larger"
-msgstr "Ver más grande"
+#: ../../include/conversation.php:1774
+msgctxt "noun"
+msgid "Undecided"
+msgid_plural "Undecided"
+msgstr[0] "Indeciso/a"
+msgstr[1] "Indecisos/as"
+msgstr[2] "Indecisos/as"
-#: ../../addon/openstreetmap/openstreetmap.php:156
-msgid "Tile Server URL"
-msgstr "URL del servidor de mosaicos de imágenes "
+#: ../../include/conversation.php:1777
+msgctxt "noun"
+msgid "Agree"
+msgid_plural "Agrees"
+msgstr[0] "De acuerdo"
+msgstr[1] "De acuerdo"
+msgstr[2] "De acuerdo"
-#: ../../addon/openstreetmap/openstreetmap.php:156
-msgid ""
-"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
-"target=\"_blank\">public tile servers</a>"
-msgstr "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">servidores públicos de mosaicos de imágenes</a>"
+#: ../../include/conversation.php:1780
+msgctxt "noun"
+msgid "Disagree"
+msgid_plural "Disagrees"
+msgstr[0] "En desacuerdo"
+msgstr[1] "En desacuerdo"
+msgstr[2] "En desacuerdo"
-#: ../../addon/openstreetmap/openstreetmap.php:157
-msgid "Nominatim (reverse geocoding) Server URL"
-msgstr "URL del servidor nominatim (geocodificación inversa)"
+#: ../../include/conversation.php:1783
+msgctxt "noun"
+msgid "Abstain"
+msgid_plural "Abstains"
+msgstr[0] "se abstiene"
+msgstr[1] "Se abstienen"
+msgstr[2] "Se abstienen"
-#: ../../addon/openstreetmap/openstreetmap.php:157
-msgid ""
-"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
-"target=\"_blank\">Nominatim servers</a>"
-msgstr "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" target=\"_blank\">servidores nominatim</a>"
+#: ../../include/bookmarks.php:34
+#, php-format
+msgid "%1$s's bookmarks"
+msgstr "Marcadores de %1$s"
-#: ../../addon/openstreetmap/openstreetmap.php:158
-msgid "Default zoom"
-msgstr "Zoom predeterminado"
+#: ../../include/text.php:547
+msgid "prev"
+msgstr "anterior"
-#: ../../addon/openstreetmap/openstreetmap.php:158
-msgid ""
-"The default zoom level. (1:world, 18:highest, also depends on tile server)"
-msgstr "El nivel de zoom predeterminado. (1: mundo, 18: el más alto, también depende del servidor del mosaico de imágenes)"
+#: ../../include/text.php:549
+msgid "first"
+msgstr "primera"
-#: ../../addon/openstreetmap/openstreetmap.php:159
-msgid "Include marker on map"
-msgstr "Incluir un marcador en el mapa"
+#: ../../include/text.php:578
+msgid "last"
+msgstr "última"
-#: ../../addon/openstreetmap/openstreetmap.php:159
-msgid "Include a marker on the map."
-msgstr "Incluir un marcador en el mapa."
+#: ../../include/text.php:581
+msgid "next"
+msgstr "próxima"
-#: ../../addon/openstreetmap/openstreetmap.php:171
-#: ../../addon/rendezvous/rendezvous.php:82
-#: ../../addon/twitter/twitter.php:493 ../../addon/msgfooter/msgfooter.php:54
-#: ../../addon/diaspora/diaspora.php:105 ../../addon/piwik/piwik.php:116
-#: ../../addon/logrot/logrot.php:54 ../../addon/xmpp/xmpp.php:54
-#: ../../Zotlabs/Module/Settings/Channel.php:150
-#: ../../Zotlabs/Module/Defperms.php:111
-msgid "Settings updated."
-msgstr "Ajustes actualizados."
+#: ../../include/text.php:599
+msgid "older"
+msgstr "más antiguas"
-#: ../../addon/ijpost/Mod_Ijpost.php:23
-msgid "Insane Journal Crosspost Connector Settings saved."
-msgstr "Se han guardado los ajustes del Conector de publicación cruzada de InsaneJournal."
+#: ../../include/text.php:601
+msgid "newer"
+msgstr "más recientes"
-#: ../../addon/ijpost/Mod_Ijpost.php:35
-msgid "Insane Journal Crosspost Connector App"
-msgstr "App Ajustes del Conector de publicación cruzada de InsaneJournal"
+#: ../../include/text.php:1064 ../../Zotlabs/Module/Connections.php:300
+#: ../../Zotlabs/Module/Viewconnections.php:80
+msgid "Accepts"
+msgstr "Se acepta"
-#: ../../addon/ijpost/Mod_Ijpost.php:35 ../../addon/xmpp/Mod_Xmpp.php:35
-#: ../../Zotlabs/Module/Lang.php:20 ../../Zotlabs/Module/Invite.php:56
-msgid "Not Installed"
-msgstr "No instalado/a"
+#: ../../include/text.php:1067 ../../Zotlabs/Module/Connections.php:303
+#: ../../Zotlabs/Module/Viewconnections.php:83
+msgid "Comments"
+msgstr "Comentarios"
-#: ../../addon/ijpost/Mod_Ijpost.php:36
-msgid "Relay public postings to Insane Journal"
-msgstr "Retransmisión de entradas públicas a Insane Journal"
+#: ../../include/text.php:1072 ../../Zotlabs/Module/Connections.php:308
+#: ../../Zotlabs/Module/Viewconnections.php:88
+msgid "Stream items"
+msgstr "Elementos del stream"
-#: ../../addon/ijpost/Mod_Ijpost.php:53
-msgid "InsaneJournal username"
-msgstr "Nombre de usuario en InsaneJournal"
+#: ../../include/text.php:1077 ../../Zotlabs/Module/Connections.php:313
+#: ../../Zotlabs/Module/Viewconnections.php:93
+msgid "Wall posts"
+msgstr "Entradas del Muro"
-#: ../../addon/ijpost/Mod_Ijpost.php:57
-msgid "InsaneJournal password"
-msgstr "Contraseña en InsaneJournal"
+#: ../../include/text.php:1081 ../../Zotlabs/Module/Connections.php:317
+#: ../../Zotlabs/Module/Viewconnections.php:97
+msgid "Nothing"
+msgstr "Nada"
-#: ../../addon/ijpost/Mod_Ijpost.php:61
-msgid "Post to InsaneJournal by default"
-msgstr "Publicar por defecto en InsaneJournal"
+#: ../../include/text.php:1094
+#, php-format
+msgid "View all %s connections"
+msgstr "Ver todas las %s conexiones"
-#: ../../addon/ijpost/Mod_Ijpost.php:69
-msgid "Insane Journal Crosspost Connector"
-msgstr "Conector de publicación cruzada de InsaneJournal"
+#: ../../include/text.php:1157
+#, php-format
+msgid "Network: %s"
+msgstr "Red %s"
-#: ../../addon/ijpost/ijpost.php:44
-msgid "Post to Insane Journal"
-msgstr "Publicar en Insane Journal"
+#: ../../include/text.php:1169 ../../include/text.php:1181
+#: ../../addon/articles/Mod_Articles.php:120
+#: ../../addon/cards/Mod_Cards.php:116
+#: ../../Zotlabs/Module/Admin/Queueworker.php:114
+#: ../../Zotlabs/Module/Admin/Profs.php:94
+#: ../../Zotlabs/Module/Admin/Profs.php:114 ../../Zotlabs/Module/Filer.php:54
+#: ../../Zotlabs/Module/Rbmark.php:31 ../../Zotlabs/Module/Rbmark.php:103
+msgid "Save"
+msgstr "Guardar"
-#: ../../addon/wholikesme/wholikesme.php:29
-msgid "Who likes me?"
-msgstr "¿Quién me ha puesto \"Me gusta\"?"
+#: ../../include/text.php:1260
+msgid "poke"
+msgstr "un toque"
-#: ../../addon/qrator/qrator.php:48
-msgid "QR code"
-msgstr "Código QR"
+#: ../../include/text.php:1261
+msgid "ping"
+msgstr "un \"ping\""
-#: ../../addon/qrator/qrator.php:63
-msgid "QR Generator"
-msgstr "Generador QR"
+#: ../../include/text.php:1261
+msgid "pinged"
+msgstr "ha enviado un \"ping\" a"
-#: ../../addon/qrator/qrator.php:64
-msgid "Enter some text"
-msgstr "Escribir algún texto"
+#: ../../include/text.php:1290
+msgid "happy"
+msgstr "feliz "
-#: ../../addon/pubcrawl/as.php:1332 ../../addon/pubcrawl/as.php:2002
-#: ../../include/network.php:1767 ../../Zotlabs/Lib/Activity.php:3588
-msgid "ActivityPub"
-msgstr "ActivityPub"
+#: ../../include/text.php:1291
+msgid "sad"
+msgstr "triste "
-#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1647
-#: ../../Zotlabs/Module/Like.php:445 ../../Zotlabs/Module/Subthread.php:115
-msgid "status"
-msgstr "el mensaje de estado "
+#: ../../include/text.php:1292
+msgid "mellow"
+msgstr "tranquilo/a"
+
+#: ../../include/text.php:1293
+msgid "tired"
+msgstr "cansado/a "
+
+#: ../../include/text.php:1294
+msgid "perky"
+msgstr "vivaz"
+
+#: ../../include/text.php:1295
+msgid "angry"
+msgstr "enfadado/a"
+
+#: ../../include/text.php:1296
+msgid "stupefied"
+msgstr "asombrado/a"
+
+#: ../../include/text.php:1297
+msgid "puzzled"
+msgstr "perplejo/a"
+
+#: ../../include/text.php:1298
+msgid "interested"
+msgstr "interesado/a"
+
+#: ../../include/text.php:1299
+msgid "bitter"
+msgstr "amargado/a"
+
+#: ../../include/text.php:1300
+msgid "cheerful"
+msgstr "alegre"
+
+#: ../../include/text.php:1301
+msgid "alive"
+msgstr "animado/a"
+
+#: ../../include/text.php:1302
+msgid "annoyed"
+msgstr "molesto/a"
+
+#: ../../include/text.php:1303
+msgid "anxious"
+msgstr "ansioso/a"
+
+#: ../../include/text.php:1304
+msgid "cranky"
+msgstr "de mal humor"
+
+#: ../../include/text.php:1305
+msgid "disturbed"
+msgstr "perturbado/a"
+
+#: ../../include/text.php:1306
+msgid "frustrated"
+msgstr "frustrado/a"
+
+#: ../../include/text.php:1307
+msgid "depressed"
+msgstr "deprimido/a"
+
+#: ../../include/text.php:1308
+msgid "motivated"
+msgstr "motivado/a"
+
+#: ../../include/text.php:1309
+msgid "relaxed"
+msgstr "relajado/a"
+
+#: ../../include/text.php:1310
+msgid "surprised"
+msgstr "sorprendido/a"
+
+#: ../../include/text.php:1502
+msgid "May"
+msgstr "mayo"
+
+#: ../../include/text.php:1568
+msgid "Unknown Attachment"
+msgstr "Adjunto no reconocido"
+
+#: ../../include/text.php:1570 ../../Zotlabs/Module/Sharedwithme.php:109
+#: ../../Zotlabs/Storage/Browser.php:382
+msgid "Size"
+msgstr "Tamaño"
+
+#: ../../include/text.php:1613
+msgid "remove category"
+msgstr "eliminar el tema"
+
+#: ../../include/text.php:1690
+msgid "remove from file"
+msgstr "eliminar del fichero"
-#: ../../addon/pubcrawl/as.php:1993 ../../addon/diaspora/Receiver.php:1591
-#: ../../include/conversation.php:184 ../../Zotlabs/Module/Like.php:477
-#: ../../Zotlabs/Lib/Activity.php:3579
+#: ../../include/text.php:1877
+msgid "Download binary/encrypted content"
+msgstr "Descargar contenido binario o cifrado"
+
+#: ../../include/text.php:1935 ../../include/text.php:1944
+#: ../../include/text.php:1971 ../../include/text.php:1980
#, php-format
-msgid "%1$s likes %2$s's %3$s"
-msgstr "A %1$s le gusta %3$s de %2$s"
+msgctxt "noun"
+msgid "%d Vote"
+msgid_plural "%d Votes"
+msgstr[0] "%dVoto"
+msgstr[1] "%dVotos"
+msgstr[2] "%dVotos"
-#: ../../addon/pubcrawl/as.php:1995 ../../include/conversation.php:187
-#: ../../Zotlabs/Module/Like.php:479 ../../Zotlabs/Lib/Activity.php:3581
+#: ../../include/text.php:1987
#, php-format
-msgid "%1$s doesn't like %2$s's %3$s"
-msgstr "A %1$s no le gusta %3$s de %2$s"
+msgctxt "noun"
+msgid "%d Vote in total"
+msgid_plural "%d Votes in total"
+msgstr[0] "%dVoto en total"
+msgstr[1] "%dVotos en total"
+msgstr[2] "%dVotos en total"
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:25
-msgid "ActivityPub Protocol Settings updated."
-msgstr "Se han actualizado los ajustes del protocolo ActivityPub."
+#: ../../include/text.php:1993
+msgid "Poll has ended"
+msgstr "La encuesta ha terminado"
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:41
-msgid ""
-"The activitypub protocol does not support location independence. Connections"
-" you make within that network may be unreachable from alternate channel "
-"locations."
-msgstr "El protocolo ActivityPub no soporta la independencia de ubicación. Las conexiones que realice dentro de esa red pueden no ser accesibles desde ubicaciones de canales alternativos."
+#: ../../include/text.php:1996
+#, php-format
+msgid "Poll ends in %s"
+msgstr "La encuesta termina en %s"
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
-msgid "Deliver to ActivityPub recipients in privacy groups"
-msgstr "Entregar a los destinatarios de ActivityPub en grupos de canales"
+#: ../../include/text.php:2003 ../../Zotlabs/Lib/ThreadItem.php:446
+msgid "Vote"
+msgstr "Votar"
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
-msgid ""
-"May result in a large number of mentions and expose all the members of your "
-"privacy group"
-msgstr "Puede resultar en un gran número de menciones y exponer a todos los miembros de su grupo de canales"
+#: ../../include/text.php:2158
+msgid "Link to Source"
+msgstr "Enlazar con la entrada en su ubicación original"
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
-msgid "Send multi-media HTML articles"
-msgstr "Enviar artículos multimedia en HTML"
+#: ../../include/text.php:2191
+msgid "Page layout"
+msgstr "Plantilla de la página"
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
-msgid "Not supported by some microblog services such as Mastodon"
-msgstr "No soportado por algunos servicios de microblog como Mastodon"
+#: ../../include/text.php:2191
+msgid "You can create your own with the layouts tool"
+msgstr "Puede crear su propia disposición gráfica con la herramienta de plantillas"
-#: ../../addon/pubcrawl/Mod_Pubcrawl.php:59
-msgid "Activitypub Protocol"
-msgstr "Protocolo Activitypub"
+#: ../../include/text.php:2201 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../addon/wiki/Mod_Wiki.php:368 ../../addon/wiki/Mod_Wiki.php:903
+#: ../../addon/wiki/Widget/Wiki_pages.php:65
+msgid "BBcode"
+msgstr "BBcode"
-#: ../../addon/fediwordle/fediwordle.php:211
-msgid "ERROR: word length is not correct!"
-msgstr "ERROR: ¡la longitud de la palabra no es correcta!"
+#: ../../include/text.php:2202
+msgid "HTML"
+msgstr "HTML"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:22
-msgid "Fediwordle App"
-msgstr "App Fediwordle"
+#: ../../include/text.php:2203 ../../addon/mdpost/mdpost.php:41
+#: ../../addon/wiki/Mod_Wiki.php:220 ../../addon/wiki/Mod_Wiki.php:368
+#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:65
+msgid "Markdown"
+msgstr "Markdown"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:23
-msgid "A distributed word game inspired by wordle."
-msgstr "Un juego de palabras distribuido inspirado en el wordle."
+#: ../../include/text.php:2204 ../../addon/wiki/Mod_Wiki.php:220
+#: ../../addon/wiki/Mod_Wiki.php:903 ../../addon/wiki/Widget/Wiki_pages.php:65
+msgid "Text"
+msgstr "Texto"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:24
-msgid ""
-"To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel "
-"post."
-msgstr "Para empezar una partida, introduzca [wordle]mi_palabra[/wordle] en algún lugar de un post de nivel superior."
+#: ../../include/text.php:2205
+msgid "Comanche Layout"
+msgstr "Plantilla de Comanche"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:25
-msgid "Your contacts can post their guess in the comments."
-msgstr "Sus contactos pueden publicar sus conjeturas en los comentarios."
+#: ../../include/text.php:2210
+msgid "PHP"
+msgstr "PHP"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:26
-msgid ""
-"Your channel will evaluate the guess and automatically post the response."
-msgstr "Su canal evaluará la conjetura y publicará automáticamente la respuesta."
+#: ../../include/text.php:2222
+msgid "Page content type"
+msgstr "Tipo de contenido de la página"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:28
-msgid "Correct letters"
-msgstr "Letras correctas"
+#: ../../include/text.php:2355
+msgid "activity"
+msgstr "la/su actividad"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:29
-msgid "Letters contained in the word but at the wrong spot"
-msgstr "Letras contenidas en la palabra pero en el lugar equivocado"
+#: ../../include/text.php:2358
+msgid "poll"
+msgstr "encuesta"
-#: ../../addon/fediwordle/Mod_Fediwordle.php:30
-msgid "Letters not contained in the word"
-msgstr "Letras no contenidas en la palabra"
+#: ../../include/text.php:2471
+msgid "a-z, 0-9, -, and _ only"
+msgstr "a-z, 0-9, -, and _ only"
-#: ../../addon/ldapauth/ldapauth.php:101
-msgid "An account has been created for you."
-msgstr "Se ha creado una cuenta para usted."
+#: ../../include/text.php:2776
+msgid "Design Tools"
+msgstr "Herramientas de diseño web"
-#: ../../addon/ldapauth/ldapauth.php:108
-msgid "Authentication successful but rejected: account creation is disabled."
-msgstr "Autenticación correcta pero rechazada: la creación de cuentas está deshabilitada."
+#: ../../include/text.php:2779 ../../Zotlabs/Module/Blocks.php:152
+msgid "Blocks"
+msgstr "Bloques"
-#: ../../addon/dwpost/Mod_Dwpost.php:26
-msgid "Dreamwidth Crosspost Connector Settings saved."
-msgstr "Se han guardado los ajustes del conector de publicación cruzada Dreamwidth."
+#: ../../include/text.php:2780 ../../Zotlabs/Module/Menu.php:171
+msgid "Menus"
+msgstr "Menús"
-#: ../../addon/dwpost/Mod_Dwpost.php:51
-msgid "Dreamwidth username"
-msgstr "Nombre de usuario en Dreamwidth"
+#: ../../include/text.php:2781 ../../Zotlabs/Module/Layouts.php:182
+msgid "Layouts"
+msgstr "Plantillas"
-#: ../../addon/dwpost/Mod_Dwpost.php:55
-msgid "Dreamwidth password"
-msgstr "Contraseña en Dreamwidth"
+#: ../../include/text.php:2782
+msgid "Pages"
+msgstr "Páginas"
-#: ../../addon/dwpost/Mod_Dwpost.php:59
-msgid "Post to Dreamwidth by default"
-msgstr "Publicar en Dreamwidth de forma predeterminada"
+#: ../../include/text.php:2794
+msgid "Import"
+msgstr "Importar"
-#: ../../addon/dwpost/Mod_Dwpost.php:75
-msgid "Dreamwidth Crosspost Connector"
-msgstr "Dreamwidth Crosspost Connector"
+#: ../../include/text.php:2795
+msgid "Import website..."
+msgstr "Importar un sitio web..."
-#: ../../addon/dwpost/dwpost.php:49
-msgid "Post to Dreamwidth"
-msgstr "Publicar en Dreamwidth"
+#: ../../include/text.php:2796
+msgid "Select folder to import"
+msgstr "Seleccionar la carpeta que se va a importar"
-#: ../../addon/morepokes/morepokes.php:19
-msgid "bitchslap"
-msgstr "una bofetada humillante"
+#: ../../include/text.php:2797
+msgid "Import from a zipped folder:"
+msgstr "Importar desde una carpeta comprimida: "
-#: ../../addon/morepokes/morepokes.php:19
-msgid "bitchslapped"
-msgstr "ha abofeteado de forma humillante a"
+#: ../../include/text.php:2798
+msgid "Import from cloud files:"
+msgstr "Importar desde los ficheros en la nube: "
-#: ../../addon/morepokes/morepokes.php:20
-msgid "shag"
-msgstr "un polvo"
+#: ../../include/text.php:2799
+msgid "/cloud/channel/path/to/folder"
+msgstr "/cloud/canal/ruta/a la/carpeta"
-#: ../../addon/morepokes/morepokes.php:20
-msgid "shagged"
-msgstr "ha dejado exhausto/a a"
+#: ../../include/text.php:2800
+msgid "Enter path to website files"
+msgstr "Ruta a los ficheros del sitio web"
-#: ../../addon/morepokes/morepokes.php:21
-msgid "patent"
-msgstr "una patente"
+#: ../../include/text.php:2801
+msgid "Select folder"
+msgstr "Seleccionar la carpeta"
-#: ../../addon/morepokes/morepokes.php:21
-msgid "patented"
-msgstr "ha patentado a"
+#: ../../include/text.php:2802
+msgid "Export website..."
+msgstr "Exportar un sitio web..."
-#: ../../addon/morepokes/morepokes.php:22
-msgid "hug"
-msgstr "un abrazo"
+#: ../../include/text.php:2803
+msgid "Export to a zip file"
+msgstr "Exportar a un fichero comprimido .zip"
-#: ../../addon/morepokes/morepokes.php:22
-msgid "hugged"
-msgstr "ha abrazado a"
+#: ../../include/text.php:2804
+msgid "website.zip"
+msgstr "sitio_web.zip"
-#: ../../addon/morepokes/morepokes.php:23
-msgid "murder"
-msgstr "un asesinato"
+#: ../../include/text.php:2805
+msgid "Enter a name for the zip file."
+msgstr "Escriba un nombre para el fichero zip."
-#: ../../addon/morepokes/morepokes.php:23
-msgid "murdered"
-msgstr "ha asesinado a"
+#: ../../include/text.php:2806
+msgid "Export to cloud files"
+msgstr "Exportar a la nube de ficheros"
-#: ../../addon/morepokes/morepokes.php:24
-msgid "worship"
-msgstr "una alabanza"
+#: ../../include/text.php:2807
+msgid "/path/to/export/folder"
+msgstr "/ruta/para/exportar/carpeta"
-#: ../../addon/morepokes/morepokes.php:24
-msgid "worshipped"
-msgstr "ha elogiado a"
+#: ../../include/text.php:2808
+msgid "Enter a path to a cloud files destination."
+msgstr "Escriba una ruta de destino a la nube de ficheros."
-#: ../../addon/morepokes/morepokes.php:25
-msgid "kiss"
-msgstr "un beso"
+#: ../../include/text.php:2809
+msgid "Specify folder"
+msgstr "Especificar una carpeta"
-#: ../../addon/morepokes/morepokes.php:25
-msgid "kissed"
-msgstr "ha besado a"
+#: ../../include/selectors.php:17
+msgid "Select a profile to assign to this contact"
+msgstr "Seleccione un perfil para asignar a este contacto"
-#: ../../addon/morepokes/morepokes.php:26
-msgid "tempt"
-msgstr "una tentación"
+#: ../../include/selectors.php:45
+msgid "Frequently"
+msgstr "Frecuentemente"
-#: ../../addon/morepokes/morepokes.php:26
-msgid "tempted"
-msgstr "ha tentado a"
+#: ../../include/selectors.php:46
+msgid "Hourly"
+msgstr "Cada hora"
-#: ../../addon/morepokes/morepokes.php:27
-msgid "raise eyebrows at"
-msgstr "un levantamiento de cejas"
+#: ../../include/selectors.php:47
+msgid "Twice daily"
+msgstr "Dos veces al día"
-#: ../../addon/morepokes/morepokes.php:27
-msgid "raised their eyebrows at"
-msgstr "ha levantado las cejas a"
+#: ../../include/selectors.php:48
+msgid "Daily"
+msgstr "Diariamente"
-#: ../../addon/morepokes/morepokes.php:28
-msgid "insult"
-msgstr "un insulto"
+#: ../../include/selectors.php:49
+msgid "Weekly"
+msgstr "Semanalmente"
-#: ../../addon/morepokes/morepokes.php:28
-msgid "insulted"
-msgstr "ha insultado a"
+#: ../../include/selectors.php:50
+msgid "Monthly"
+msgstr "Mensualmente"
-#: ../../addon/morepokes/morepokes.php:29
-msgid "praise"
-msgstr "un elogio"
+#: ../../include/selectors.php:64 ../../include/selectors.php:81
+#: ../../include/channel.php:1714 ../../addon/openid/Mod_Id.php:85
+msgid "Male"
+msgstr "Hombre"
-#: ../../addon/morepokes/morepokes.php:29
-msgid "praised"
-msgstr "ha elogiado a"
+#: ../../include/selectors.php:64 ../../include/selectors.php:81
+#: ../../include/channel.php:1712 ../../addon/openid/Mod_Id.php:87
+msgid "Female"
+msgstr "Mujer"
-#: ../../addon/morepokes/morepokes.php:30
-msgid "be dubious of"
-msgstr "una indecisión"
+#: ../../include/selectors.php:64
+msgid "Currently Male"
+msgstr "Actualmente hombre"
-#: ../../addon/morepokes/morepokes.php:30
-msgid "was dubious of"
-msgstr "estaba dudoso de"
+#: ../../include/selectors.php:64
+msgid "Currently Female"
+msgstr "Actualmente mujer"
-#: ../../addon/morepokes/morepokes.php:31
-msgid "eat"
-msgstr "una comida"
+#: ../../include/selectors.php:64
+msgid "Mostly Male"
+msgstr "Generalmente hombre"
-#: ../../addon/morepokes/morepokes.php:31
-msgid "ate"
-msgstr "ha comido"
+#: ../../include/selectors.php:64
+msgid "Mostly Female"
+msgstr "Generalmente mujer"
-#: ../../addon/morepokes/morepokes.php:32
-msgid "giggle and fawn at"
-msgstr "una sonrisa aduladora"
+#: ../../include/selectors.php:64
+msgid "Transgender"
+msgstr "Transgénero"
-#: ../../addon/morepokes/morepokes.php:32
-msgid "giggled and fawned at"
-msgstr "ha sonreído y adulado a"
+#: ../../include/selectors.php:64
+msgid "Intersex"
+msgstr "Intersexual"
-#: ../../addon/morepokes/morepokes.php:33
-msgid "doubt"
-msgstr "una duda"
+#: ../../include/selectors.php:64
+msgid "Transsexual"
+msgstr "Transexual"
-#: ../../addon/morepokes/morepokes.php:33
-msgid "doubted"
-msgstr "ha dudado de"
+#: ../../include/selectors.php:64
+msgid "Hermaphrodite"
+msgstr "Hermafrodita"
-#: ../../addon/morepokes/morepokes.php:34
-msgid "glare"
-msgstr "una mirada furiosa"
+#: ../../include/selectors.php:64 ../../include/channel.php:1718
+msgid "Neuter"
+msgstr "Neutral"
-#: ../../addon/morepokes/morepokes.php:34
-msgid "glared at"
-msgstr "ha mirado con furia"
+#: ../../include/selectors.php:64 ../../include/channel.php:1720
+msgid "Non-specific"
+msgstr "No especificado"
-#: ../../addon/morepokes/morepokes.php:35
-msgid "fuck"
-msgstr "una mierda"
+#: ../../include/selectors.php:64
+msgid "Undecided"
+msgstr "Indeciso/a"
-#: ../../addon/morepokes/morepokes.php:35
-msgid "fucked"
-msgstr "ha mandado a la mierda a"
+#: ../../include/selectors.php:100 ../../include/selectors.php:119
+msgid "Males"
+msgstr "Hombres"
-#: ../../addon/morepokes/morepokes.php:36
-msgid "bonk"
-msgstr "un golpe"
+#: ../../include/selectors.php:100 ../../include/selectors.php:119
+msgid "Females"
+msgstr "Mujeres"
-#: ../../addon/morepokes/morepokes.php:36
-msgid "bonked"
-msgstr "ha golpeado a"
+#: ../../include/selectors.php:100
+msgid "Gay"
+msgstr "Homosexual"
-#: ../../addon/morepokes/morepokes.php:37
-msgid "declare undying love for"
-msgstr "una declaración de amor eterno"
+#: ../../include/selectors.php:100
+msgid "Lesbian"
+msgstr "Lesbiana"
-#: ../../addon/morepokes/morepokes.php:37
-msgid "declared undying love for"
-msgstr "ha declarado amor eterno a"
+#: ../../include/selectors.php:100
+msgid "No Preference"
+msgstr "Sin preferencias"
-#: ../../addon/rendezvous/rendezvous.php:57
-msgid "Errors encountered deleting database table "
-msgstr "Errores encontrados al eliminar la tabla de la base de datos"
+#: ../../include/selectors.php:100
+msgid "Bisexual"
+msgstr "Bisexual"
-#: ../../addon/rendezvous/rendezvous.php:95
-#: ../../addon/twitter/twitter.php:502
-msgid "Submit Settings"
-msgstr "Enviar los ajustes"
+#: ../../include/selectors.php:100
+msgid "Autosexual"
+msgstr "Autosexual"
-#: ../../addon/rendezvous/rendezvous.php:96
-msgid "Drop tables when uninstalling?"
-msgstr "¿Eliminar tablas al desinstalar?"
+#: ../../include/selectors.php:100
+msgid "Abstinent"
+msgstr "Casto/a"
-#: ../../addon/rendezvous/rendezvous.php:96
-msgid ""
-"If checked, the Rendezvous database tables will be deleted when the plugin "
-"is uninstalled."
-msgstr "Si se selecciona, las tablas de la base de datos Rendezvous se eliminarán cuando se desinstale el plugin."
+#: ../../include/selectors.php:100
+msgid "Virgin"
+msgstr "Virgen"
-#: ../../addon/rendezvous/rendezvous.php:97
-msgid "Mapbox Access Token"
-msgstr "Token de acceso de Mapbox"
+#: ../../include/selectors.php:100
+msgid "Deviant"
+msgstr "Fuera de lo común"
-#: ../../addon/rendezvous/rendezvous.php:97
-msgid ""
-"If you enter a Mapbox access token, it will be used to retrieve map tiles "
-"from Mapbox instead of the default OpenStreetMap tile server."
-msgstr "Si introduce un token de acceso a Mapbox, se utilizará para recuperar los mapas de mosaicos de imágenes de Mapbox en lugar del servidor de mosaico de imágenes OpenStreetMap predeterminado."
+#: ../../include/selectors.php:100
+msgid "Fetish"
+msgstr "Fetichista"
-#: ../../addon/rendezvous/rendezvous.php:162
-msgid "Rendezvous"
-msgstr "Rendezvous"
+#: ../../include/selectors.php:100
+msgid "Oodles"
+msgstr "Orgías"
-#: ../../addon/rendezvous/rendezvous.php:167
-msgid ""
-"This identity has been deleted by another member due to inactivity. Please "
-"press the \"New identity\" button or refresh the page to register a new "
-"identity. You may use the same name."
-msgstr "Esta identidad ha sido eliminada por otro miembro debido a su inactividad. Pulse el botón \"Nueva identidad\" o actualice la página para registrar una nueva identidad. Puede usar el mismo nombre."
+#: ../../include/selectors.php:100
+msgid "Nonsexual"
+msgstr "Asexual"
-#: ../../addon/rendezvous/rendezvous.php:168
-msgid "Welcome to Rendezvous!"
-msgstr "¡Bienvenido/a a Rendevous!"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Single"
+msgstr "Soltero/a"
-#: ../../addon/rendezvous/rendezvous.php:169
-msgid ""
-"Enter your name to join this rendezvous. To begin sharing your location with"
-" the other members, tap the GPS control. When your location is discovered, a"
-" red dot will appear and others will be able to see you on the map."
-msgstr "Introduzca tu nombre para unirse a esta cita. Para comenzar a compartir su ubicación con los demás miembros, pulse en el control GPS. Cuando se descubra su ubicación, aparecerá un punto rojo y otros podrán verlo en el mapa."
+#: ../../include/selectors.php:138
+msgid "Lonely"
+msgstr "Solo/a"
-#: ../../addon/rendezvous/rendezvous.php:171
-msgid "Let's meet here"
-msgstr "Reunámonos aquí"
+#: ../../include/selectors.php:138
+msgid "Available"
+msgstr "Disponible"
-#: ../../addon/rendezvous/rendezvous.php:173
-#: ../../addon/cart/submodules/hzservices.php:657
-#: ../../addon/cart/submodules/manualcat.php:260
-#: ../../Zotlabs/Module/Cdav.php:1013 ../../Zotlabs/Module/Appman.php:211
-#: ../../Zotlabs/Module/Rbmark.php:100
-msgid "Description"
-msgstr "Descripción"
+#: ../../include/selectors.php:138
+msgid "Unavailable"
+msgstr "No disponible"
-#: ../../addon/rendezvous/rendezvous.php:174
-msgid "New marker"
-msgstr "Nuevo marcador"
+#: ../../include/selectors.php:138
+msgid "Has crush"
+msgstr "Enamorado/a"
-#: ../../addon/rendezvous/rendezvous.php:175
-msgid "Edit marker"
-msgstr "Editar un marcador"
+#: ../../include/selectors.php:138
+msgid "Infatuated"
+msgstr "Apasionado/a"
-#: ../../addon/rendezvous/rendezvous.php:176
-msgid "New identity"
-msgstr "Nueva identidad"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Dating"
+msgstr "Saliendo con alguien"
-#: ../../addon/rendezvous/rendezvous.php:177
-msgid "Delete marker"
-msgstr "Eliminar un marcador"
+#: ../../include/selectors.php:138
+msgid "Unfaithful"
+msgstr "Infiel"
-#: ../../addon/rendezvous/rendezvous.php:178
-msgid "Delete member"
-msgstr "Eliminar un miembro"
+#: ../../include/selectors.php:138
+msgid "Sex Addict"
+msgstr "Con adicción al sexo"
-#: ../../addon/rendezvous/rendezvous.php:179
-msgid "Edit proximity alert"
-msgstr "Editar alerta de proximidad"
+#: ../../include/selectors.php:138 ../../include/channel.php:456
+#: ../../include/channel.php:459 ../../Zotlabs/Module/Connedit.php:581
+#: ../../Zotlabs/Module/Contactedit.php:297
+#: ../../Zotlabs/Widget/Affinity.php:38
+msgid "Friends"
+msgstr "Amigos/as"
-#: ../../addon/rendezvous/rendezvous.php:180
-msgid ""
-"A proximity alert will be issued when this member is within a certain radius"
-" of you.<br><br>Enter a radius in meters (0 to disable):"
-msgstr "Se emitirá una alerta de proximidad cuando este miembro esté dentro de un radio determinado respecto a usted.<br><br> Ingrese el radio en metros (0 para deshabilitar):"
+#: ../../include/selectors.php:138
+msgid "Friends/Benefits"
+msgstr "Amigos con algo extra"
-#: ../../addon/rendezvous/rendezvous.php:180
-#: ../../addon/rendezvous/rendezvous.php:185
-msgid "distance"
-msgstr "distancia"
+#: ../../include/selectors.php:138
+msgid "Casual"
+msgstr "Casual"
-#: ../../addon/rendezvous/rendezvous.php:181
-msgid "Proximity alert distance (meters)"
-msgstr "Distancia (en metros) para la alerta de proximidad"
+#: ../../include/selectors.php:138
+msgid "Engaged"
+msgstr "Prometido/a"
-#: ../../addon/rendezvous/rendezvous.php:182
-#: ../../addon/rendezvous/rendezvous.php:184
-msgid ""
-"A proximity alert will be issued when you are within a certain radius of the"
-" marker location.<br><br>Enter a radius in meters (0 to disable):"
-msgstr "Se emitirá una alerta de proximidad cuando usted esté dentro de un radio determinado respecto al marcador de localización.<br><br> Ingrese el radio en metros (0 para deshabilitar):"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Married"
+msgstr "Casado/a"
-#: ../../addon/rendezvous/rendezvous.php:183
-msgid "Marker proximity alert"
-msgstr "Marcador de alerta de proximidad"
+#: ../../include/selectors.php:138
+msgid "Imaginarily married"
+msgstr "Casado/a en sueños"
-#: ../../addon/rendezvous/rendezvous.php:186
-msgid "Reminder note"
-msgstr "Recordatorio"
+#: ../../include/selectors.php:138
+msgid "Partners"
+msgstr "Pareja"
-#: ../../addon/rendezvous/rendezvous.php:187
-msgid ""
-"Enter a note to be displayed when you are within the specified proximity..."
-msgstr "Introduzca una nota que se mostrará cuando esté dentro de la proximidad especificada..."
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Cohabiting"
+msgstr "Cohabitando"
-#: ../../addon/rendezvous/rendezvous.php:199
-msgid "Add new rendezvous"
-msgstr "Añadir una nueva cita"
+#: ../../include/selectors.php:138
+msgid "Common law"
+msgstr "Matrimonio tradicional"
-#: ../../addon/rendezvous/rendezvous.php:200
-msgid ""
-"Create a new rendezvous and share the access link with those you wish to "
-"invite to the group. Those who open the link become members of the "
-"rendezvous. They can view other member locations, add markers to the map, or"
-" share their own locations with the group."
-msgstr "Cree una nueva cita y comparta los enlaces de acceso con los que desea invitar al grupo. Aquellos que abran el enlace se convertirán en miembros de la cita. Pueden ver otras ubicaciones de miembros, añadir marcadores al mapa o compartir sus propias ubicaciones con el grupo."
+#: ../../include/selectors.php:138
+msgid "Happy"
+msgstr "Felíz"
-#: ../../addon/rendezvous/rendezvous.php:232
-msgid "You have no rendezvous. Press the button above to create a rendezvous!"
-msgstr "No tiene ninguna cita. ¡Presione el botón de arriba para crear una!"
+#: ../../include/selectors.php:138
+msgid "Not looking"
+msgstr "No estoy buscando"
-#: ../../addon/rendezvous/rendezvous.php:401
-#: ../../Zotlabs/Module/Setup.php:730
-msgid "Errors encountered creating database tables."
-msgstr "Se han encontrado errores al crear las tablas de la base de datos."
+#: ../../include/selectors.php:138
+msgid "Swinger"
+msgstr "Libertino"
-#: ../../addon/startpage/Mod_Startpage.php:60
-msgid "Page to load after login"
-msgstr "Página para cargar tras el inicio de sesión"
+#: ../../include/selectors.php:138
+msgid "Betrayed"
+msgstr "Engañado/a"
-#: ../../addon/startpage/Mod_Startpage.php:60
-msgid ""
-"Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy "
-"collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave "
-"blank for default network page (grid)."
-msgstr "Ejemplos: &quot;aplicaciones&quot;, &quot;mi red?f=&gid=37&quot; (grupo de canales), &quot;mi canal&quot; or &quot;notificaciones del sistema&quot; (dejar en blanco para la página de mi red por defecto (grid)."
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Separated"
+msgstr "Separado/a"
-#: ../../addon/startpage/Mod_Startpage.php:68
-msgid "Startpage"
-msgstr "Startpage"
+#: ../../include/selectors.php:138
+msgid "Unstable"
+msgstr "Inestable"
-#: ../../addon/upgrade_info/upgrade_info.php:48
-msgid "Your channel has been upgraded to $Projectname version"
-msgstr "Su canal ha sido actualizado a la versión $Projectname"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Divorced"
+msgstr "Divorciado/a"
-#: ../../addon/upgrade_info/upgrade_info.php:50
-msgid "Please have a look at the"
-msgstr "Por favor, eche un vistazo a la "
+#: ../../include/selectors.php:138
+msgid "Imaginarily divorced"
+msgstr "Divorciado/a en sueños"
-#: ../../addon/upgrade_info/upgrade_info.php:52
-msgid "git history"
-msgstr "historial del git"
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "Widowed"
+msgstr "Viudo/a"
-#: ../../addon/upgrade_info/upgrade_info.php:54
-msgid "change log"
-msgstr "lista de cambios"
+#: ../../include/selectors.php:138
+msgid "Uncertain"
+msgstr "Indeterminado"
-#: ../../addon/upgrade_info/upgrade_info.php:55
-msgid "for further info."
-msgstr "para más información."
+#: ../../include/selectors.php:138 ../../include/selectors.php:155
+msgid "It's complicated"
+msgstr "Es complicado"
-#: ../../addon/upgrade_info/upgrade_info.php:60
-msgid "Upgrade Info"
-msgstr "Información de actualización"
+#: ../../include/selectors.php:138
+msgid "Don't care"
+msgstr "No me importa"
-#: ../../addon/upgrade_info/upgrade_info.php:64
-msgid "Do not show this again"
-msgstr "No mostrar esto de nuevo"
+#: ../../include/selectors.php:138
+msgid "Ask me"
+msgstr "Pregúnteme"
-#: ../../addon/twitter/Mod_Twitter.php:65
-msgid "Twitter settings updated."
-msgstr "Se han actualizado los ajustes de Twitter."
+#: ../../include/channel.php:48
+msgid "Unable to obtain identity information from database"
+msgstr "No ha sido posible obtener información sobre la identidad desde la base de datos"
-#: ../../addon/twitter/Mod_Twitter.php:101
-msgid ""
-"No consumer key pair for Twitter found. Please contact your site "
-"administrator."
-msgstr "No se encontró ningún par de \"consumer key\" para Twitter. Póngase en contacto con el administrador del sitio."
+#: ../../include/channel.php:81
+msgid "Empty name"
+msgstr "Nombre vacío"
-#: ../../addon/twitter/Mod_Twitter.php:123
+#: ../../include/channel.php:84
+msgid "Name too long"
+msgstr "Nombre demasiado largo"
+
+#: ../../include/channel.php:201
+msgid "No account identifier"
+msgstr "Ningún identificador de la cuenta"
+
+#: ../../include/channel.php:213 ../../Zotlabs/Module/Register.php:95
+msgid "Nickname is required."
+msgstr "Se requiere un sobrenombre (alias)."
+
+#: ../../include/channel.php:227 ../../include/channel.php:659
+#: ../../Zotlabs/Module/Register.php:100
+#: ../../Zotlabs/Module/Changeaddr.php:46
+msgid "Reserved nickname. Please choose another."
+msgstr "Sobrenombre en uso. Por favor, elija otro."
+
+#: ../../include/channel.php:232 ../../include/channel.php:664
+#: ../../Zotlabs/Module/Register.php:105
+#: ../../Zotlabs/Module/Changeaddr.php:51
msgid ""
-"At this Hubzilla instance the Twitter plugin was enabled but you have not "
-"yet connected your account to your Twitter account. To do so click the "
-"button below to get a PIN from Twitter which you have to copy into the input"
-" box below and submit the form. Only your <strong>public</strong> posts will"
-" be posted to Twitter."
-msgstr "En esta instancia de Hubzilla, el complemento de Twitter estaba habilitado pero aún no ha conectado su cuenta a la cuenta de Twitter. Para ello, haga clic en el botón de abajo, para obtener un PIN de Twitter que debe copiar en el cuadro de entrada a continuación y enviar el formulario. Solo sus entradas <strong>públicas</ strong> se publicarán en Twitter."
+"Nickname has unsupported characters or is already being used on this site."
+msgstr "El alias contiene caracteres no admitidos o está ya en uso por otros miembros de este sitio."
-#: ../../addon/twitter/Mod_Twitter.php:125
-msgid "Log in with Twitter"
-msgstr "Iniciar sesión en Twitter"
+#: ../../include/channel.php:292
+msgid "Unable to retrieve created identity"
+msgstr "No ha sido posible recuperar la identidad creada"
-#: ../../addon/twitter/Mod_Twitter.php:128
-msgid "Copy the PIN from Twitter here"
-msgstr "Copiar aquí el PIN de Twitter"
+#: ../../include/channel.php:402
+msgid "Default Profile"
+msgstr "Perfil principal"
-#: ../../addon/twitter/Mod_Twitter.php:150
+#: ../../include/channel.php:592 ../../include/channel.php:681
+msgid "Unable to retrieve modified identity"
+msgstr "No se puede recuperar la identidad modficada"
+
+#: ../../include/channel.php:1373
+msgid "Requested channel is not available"
+msgstr "El canal solicitado no está disponible"
+
+#: ../../include/channel.php:1427 ../../addon/articles/Mod_Articles.php:46
+#: ../../addon/cards/Mod_Cards.php:42 ../../addon/gallery/Mod_Gallery.php:49
+#: ../../Zotlabs/Module/Profile.php:27 ../../Zotlabs/Module/Connect.php:17
+#: ../../Zotlabs/Module/Layouts.php:31 ../../Zotlabs/Module/Blocks.php:33
+#: ../../Zotlabs/Module/Editlayout.php:31 ../../Zotlabs/Module/Menu.php:92
+#: ../../Zotlabs/Module/Hcard.php:12 ../../Zotlabs/Module/Webpages.php:39
+#: ../../Zotlabs/Module/Filestorage.php:59
+#: ../../Zotlabs/Module/Editblock.php:31
+#: ../../Zotlabs/Module/Achievements.php:15
+#: ../../Zotlabs/Module/Editwebpage.php:32
+msgid "Requested profile is not available."
+msgstr "El perfil solicitado no está disponible."
+
+#: ../../include/channel.php:1523 ../../Zotlabs/Module/Profiles.php:745
+msgid "Change profile photo"
+msgstr "Cambiar la foto del perfil"
+
+#: ../../include/channel.php:1531
+msgid "Create New Profile"
+msgstr "Crear un nuevo perfil"
+
+#: ../../include/channel.php:1549 ../../Zotlabs/Module/Profiles.php:842
+msgid "Profile Image"
+msgstr "Imagen del perfil"
+
+#: ../../include/channel.php:1552
+msgid "Visible to everybody"
+msgstr "Visible para todos"
+
+#: ../../include/channel.php:1553 ../../Zotlabs/Module/Profiles.php:742
+#: ../../Zotlabs/Module/Profiles.php:846
+msgid "Edit visibility"
+msgstr "Editar visibilidad"
+
+#: ../../include/channel.php:1631 ../../include/channel.php:1757
+msgid "Gender:"
+msgstr "Género:"
+
+#: ../../include/channel.php:1632 ../../include/channel.php:1801
+msgid "Status:"
+msgstr "Estado:"
+
+#: ../../include/channel.php:1633 ../../include/channel.php:1825
+msgid "Homepage:"
+msgstr "Página personal:"
+
+#: ../../include/channel.php:1634 ../../include/channel.php:1827
+#: ../../Zotlabs/Module/Directory.php:360
+msgid "Hometown:"
+msgstr "Lugar de nacimiento:"
+
+#: ../../include/channel.php:1635
+msgid "Online Now"
+msgstr "Ahora en línea"
+
+#: ../../include/channel.php:1685
+msgid "Change your profile photo"
+msgstr "Cambiar su foto del perfil"
+
+#: ../../include/channel.php:1716
+msgid "Trans"
+msgstr "Trans"
+
+#: ../../include/channel.php:1755
+msgid "Full Name:"
+msgstr "Nombre completo:"
+
+#: ../../include/channel.php:1762
+msgid "Like this channel"
+msgstr "Me gusta este canal"
+
+#: ../../include/channel.php:1786
+msgid "j F, Y"
+msgstr "j F Y"
+
+#: ../../include/channel.php:1787
+msgid "j F"
+msgstr "j F"
+
+#: ../../include/channel.php:1794
+msgid "Birthday:"
+msgstr "Cumpleaños:"
+
+#: ../../include/channel.php:1798 ../../Zotlabs/Module/Directory.php:345
+msgid "Age:"
+msgstr "Edad:"
+
+#: ../../include/channel.php:1807
+#, php-format
+msgid "for %1$d %2$s"
+msgstr "por %1$d %2$s"
+
+#: ../../include/channel.php:1819
+msgid "Tags:"
+msgstr "Etiquetas:"
+
+#: ../../include/channel.php:1823
+msgid "Sexual Preference:"
+msgstr "Orientación sexual:"
+
+#: ../../include/channel.php:1829
+msgid "Political Views:"
+msgstr "Posición política:"
+
+#: ../../include/channel.php:1831
+msgid "Religion:"
+msgstr "Religión:"
+
+#: ../../include/channel.php:1833 ../../Zotlabs/Module/Directory.php:362
+msgid "About:"
+msgstr "Sobre mí:"
+
+#: ../../include/channel.php:1835
+msgid "Hobbies/Interests:"
+msgstr "Aficciones o intereses:"
+
+#: ../../include/channel.php:1837
+msgid "Likes:"
+msgstr "Me gusta:"
+
+#: ../../include/channel.php:1839
+msgid "Dislikes:"
+msgstr "No me gusta:"
+
+#: ../../include/channel.php:1841
+msgid "Contact information and Social Networks:"
+msgstr "Información de contacto y redes sociales:"
+
+#: ../../include/channel.php:1843
+msgid "My other channels:"
+msgstr "Mis otros canales:"
+
+#: ../../include/channel.php:1845
+msgid "Musical interests:"
+msgstr "Preferencias musicales:"
+
+#: ../../include/channel.php:1847
+msgid "Books, literature:"
+msgstr "Libros, literatura:"
+
+#: ../../include/channel.php:1849
+msgid "Television:"
+msgstr "Televisión:"
+
+#: ../../include/channel.php:1851
+msgid "Film/dance/culture/entertainment:"
+msgstr "Cine, danza, cultura, entretenimiento:"
+
+#: ../../include/channel.php:1853
+msgid "Love/Romance:"
+msgstr "Vida sentimental o amorosa:"
+
+#: ../../include/channel.php:1855
+msgid "Work/employment:"
+msgstr "Trabajo:"
+
+#: ../../include/channel.php:1857
+msgid "School/education:"
+msgstr "Estudios:"
+
+#: ../../include/channel.php:1878 ../../Zotlabs/Lib/Apps.php:367
+#: ../../Zotlabs/Module/Profperm.php:113
+msgid "Profile"
+msgstr "Perfil"
+
+#: ../../include/channel.php:1880
+msgid "Like this thing"
+msgstr "Me gusta esto"
+
+#: ../../include/channel.php:1881
+msgid "Export"
+msgstr "Exportar"
+
+#: ../../include/channel.php:2334 ../../Zotlabs/Module/Cover_photo.php:304
+msgid "cover photo"
+msgstr "Imagen de portada del perfil"
+
+#: ../../include/channel.php:2610 ../../Zotlabs/Module/Rmagic.php:97
+msgid "Enter your channel address (e.g. channel@example.com)"
+msgstr "Introduzca la dirección del canal (p.ej. canal@ejemplo.com)"
+
+#: ../../include/channel.php:2611 ../../Zotlabs/Module/Rmagic.php:98
+msgid "Authenticate"
+msgstr "Acceder"
+
+#: ../../include/channel.php:2769 ../../Zotlabs/Module/Admin/Accounts.php:184
+#, php-format
+msgid "Account '%s' deleted"
+msgstr "La cuenta '%s' ha sido eliminada"
+
+#: ../../include/import.php:30
+msgid "Unable to import a removed channel."
+msgstr "No se puede importar un canal eliminado."
+
+#: ../../include/import.php:56
msgid ""
-"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile "
-"details from unknown viewers?</em>) the link potentially included in public "
-"postings relayed to Twitter will lead the visitor to a blank page informing "
-"the visitor that the access to your profile has been restricted."
-msgstr "<strong>Aviso:</strong> Debido a su configuración de privacidad (<em>Ocultar los detalles de su perfil a los visitantes desconocidos?</em>), el enlace potencialmente incluido en las entradas públicas retransmitidas a Twitter llevará al visitante a una página en blanco informándolo de que el acceso a su perfil ha sido restringido."
+"Cannot create a duplicate channel identifier on this system. Import failed."
+msgstr "No se ha podido crear un canal con un identificador que ya existe en este sistema. La importación ha fallado."
-#: ../../addon/twitter/Mod_Twitter.php:155
-msgid "Twitter post length"
-msgstr "Longitud del mensaje en Twitter"
+#: ../../include/import.php:77 ../../addon/diaspora/import_diaspora.php:43
+msgid "Unable to create a unique channel address. Import failed."
+msgstr "No se ha podido crear una dirección de canal única. Ha fallado la importación."
-#: ../../addon/twitter/Mod_Twitter.php:155
-msgid "Maximum tweet length"
-msgstr "Longitud máxima del tweet"
+#: ../../include/import.php:122
+msgid "Cloned channel not found. Import failed."
+msgstr "No se ha podido importar el canal porque el canal clonado no se ha encontrado."
-#: ../../addon/twitter/Mod_Twitter.php:160
-msgid "Send public postings to Twitter by default"
-msgstr "Enviar mensajes públicos a Twitter de forma predeterminada"
+#: ../../addon/qrator/qrator.php:48
+msgid "QR code"
+msgstr "Código QR"
-#: ../../addon/twitter/Mod_Twitter.php:160
+#: ../../addon/qrator/qrator.php:63
+msgid "QR Generator"
+msgstr "Generador QR"
+
+#: ../../addon/qrator/qrator.php:64
+msgid "Enter some text"
+msgstr "Escribir algún texto"
+
+#: ../../addon/piwik/piwik.php:85
msgid ""
-"If enabled your public postings will be posted to the associated Twitter "
-"account by default"
-msgstr "Si está activado, sus entradas públicas se publicarán en la cuenta de Twitter asociada de forma predeterminada."
+"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> "
+"analytics tool."
+msgstr "Este sitio es rastreado mediante la herramienta analítica <a href='http://www.piwik.org'>Piwik</a>."
-#: ../../addon/twitter/Mod_Twitter.php:179
-msgid "Twitter Crosspost Connector"
-msgstr "Twitter Crosspost Connector"
+#: ../../addon/piwik/piwik.php:88
+#, php-format
+msgid ""
+"If you do not want that your visits are logged this way you <a href='%s'>can"
+" set a cookie to prevent Piwik from tracking further visits of the site</a> "
+"(opt-out)."
+msgstr "Si usted no quiere que sus visitas se registren de esta manera <a href='%s'>puede establecer una cookie para evitar que Piwik rastree otras visitas del sitio</a> (opt-out)."
-#: ../../addon/twitter/twitter.php:109
-msgid "Post to Twitter"
-msgstr "Publicar en Twitter"
+#: ../../addon/piwik/piwik.php:96
+msgid "Piwik Base URL"
+msgstr "URL base de Piwik"
-#: ../../addon/pumpio/pumpio.php:152
-msgid "You are now authenticated to pumpio."
-msgstr "Ahora está autenticado en pump.io."
+#: ../../addon/piwik/piwik.php:96
+msgid ""
+"Absolute path to your Piwik installation. (without protocol (http/s), with "
+"trailing slash)"
+msgstr "Ruta absoluta a la instalación de Piwik. (Sin protocolo (http/s), con barra diagonal)"
-#: ../../addon/pumpio/pumpio.php:153
-msgid "return to the featured settings page"
-msgstr "Volver a la página de configuración destacada"
+#: ../../addon/piwik/piwik.php:97
+msgid "Site ID"
+msgstr "ID del sitio"
-#: ../../addon/pumpio/pumpio.php:168
-msgid "Post to Pump.io"
-msgstr "Publicar en Pump.io"
+#: ../../addon/piwik/piwik.php:98
+msgid "Show opt-out cookie link?"
+msgstr "Mostrar el enlace de la cookie opt-out?"
-#: ../../addon/pumpio/Mod_Pumpio.php:40
-msgid "Pump.io Settings saved."
-msgstr "Se han guardado los ajustes de Pump.io"
+#: ../../addon/piwik/piwik.php:99
+msgid "Asynchronous tracking"
+msgstr "Rastreo asíncrono"
-#: ../../addon/pumpio/Mod_Pumpio.php:71
-msgid "Pump.io servername"
-msgstr "Nombre del servidor de Pump.io"
+#: ../../addon/piwik/piwik.php:100
+msgid "Enable frontend JavaScript error tracking"
+msgstr "Habilitar la interfaz JavaScript de seguimiento de errores"
-#: ../../addon/pumpio/Mod_Pumpio.php:71
-msgid "Without \"http://\" or \"https://\""
-msgstr "Sin \"http://\" or \"https://\""
+#: ../../addon/piwik/piwik.php:100
+msgid "This feature requires Piwik >= 2.2.0"
+msgstr "Esta funcionalidad requiere Piwik >= 2.2.0"
-#: ../../addon/pumpio/Mod_Pumpio.php:75
-msgid "Pump.io username"
-msgstr "Nombre de usuario en Pump.io"
+#: ../../addon/piwik/piwik.php:116 ../../addon/twitter/twitter.php:493
+#: ../../addon/xmpp/xmpp.php:54 ../../addon/rendezvous/rendezvous.php:82
+#: ../../addon/openstreetmap/openstreetmap.php:171
+#: ../../addon/logrot/logrot.php:54 ../../addon/msgfooter/msgfooter.php:54
+#: ../../addon/diaspora/diaspora.php:105
+#: ../../Zotlabs/Module/Settings/Channel.php:150
+#: ../../Zotlabs/Module/Defperms.php:111
+msgid "Settings updated."
+msgstr "Ajustes actualizados."
-#: ../../addon/pumpio/Mod_Pumpio.php:75
-msgid "Without the servername"
-msgstr "Sin el nombre del servidor"
+#: ../../addon/hubwall/hubwall.php:19
+msgid "Send email to all members"
+msgstr "Enviar un correo electrónico a todos los miembros"
-#: ../../addon/pumpio/Mod_Pumpio.php:86
-msgid "You are not authenticated to pumpio"
-msgstr "No está autenticado en pump.io"
+#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:65
+#, php-format
+msgid "%s Administrator"
+msgstr "%s Administrador"
-#: ../../addon/pumpio/Mod_Pumpio.php:88
-msgid "(Re-)Authenticate your pump.io connection"
-msgstr "(Re-)Autenticar su conexión en pump.io"
+#: ../../addon/hubwall/hubwall.php:50 ../../addon/mailtest/mailtest.php:50
+msgid "No recipients found."
+msgstr "No se han encontrado destinatarios."
-#: ../../addon/pumpio/Mod_Pumpio.php:92
-msgid "Post to pump.io by default"
-msgstr "Publicar por defecto en pump.io"
+#: ../../addon/hubwall/hubwall.php:73
+#, php-format
+msgid "%1$d of %2$d messages sent."
+msgstr "%1$d de %2$d mensajes enviados."
-#: ../../addon/pumpio/Mod_Pumpio.php:96
-msgid "Should posts be public"
-msgstr "¿Las entradas deben ser públicas?"
+#: ../../addon/hubwall/hubwall.php:81
+msgid "Send email to all hub members."
+msgstr "Enviar un correo electrónico a todos los miembros del hub."
-#: ../../addon/pumpio/Mod_Pumpio.php:100
-msgid "Mirror all public posts"
-msgstr "Reflejar todos los mensajes públicos"
+#: ../../addon/hubwall/hubwall.php:92 ../../addon/mailtest/mailtest.php:96
+msgid "Message subject"
+msgstr "Asunto del mensaje"
-#: ../../addon/pumpio/Mod_Pumpio.php:110
-msgid "Pump.io Crosspost Connector"
-msgstr "Pump.io Crosspost Connector"
+#: ../../addon/hubwall/hubwall.php:93
+msgid "Sender Email address"
+msgstr "Dirección de correo electrónico del remitente"
+
+#: ../../addon/hubwall/hubwall.php:94
+msgid "Test mode (only send to hub administrator)"
+msgstr "Modo de prueba (enviar sólo al administrador del hub)"
+
+#: ../../addon/testdrive/testdrive.php:104
+#, php-format
+msgid "Your account on %s will expire in a few days."
+msgstr "Su cuenta en %s caducará en unos pocos días."
+
+#: ../../addon/testdrive/testdrive.php:105
+msgid "Your test account is about to expire."
+msgstr "Su cuenta de prueba está a punto de expirar."
#: ../../addon/gravatar/gravatar.php:123
msgid "generic profile image"
@@ -2751,8 +4229,8 @@ msgid ""
"nothing was found at Libravatar."
msgstr "El addon Libravatar también está instalado. Por favor deshabilite el addon de Libravatar o este addon de Gravatar.<br> El addon de Libravatar volverá a Gravatar si no se encuentra nada en Libravatar."
-#: ../../addon/gravatar/gravatar.php:150
-#: ../../addon/msgfooter/msgfooter.php:46 ../../addon/xmpp/xmpp.php:43
+#: ../../addon/gravatar/gravatar.php:150 ../../addon/xmpp/xmpp.php:43
+#: ../../addon/msgfooter/msgfooter.php:46
msgid "Save Settings"
msgstr "Guardar ajustes"
@@ -2776,315 +4254,268 @@ msgstr "Seleccione la valoración adecuada del avatar para su sitio. Ver README"
msgid "Gravatar settings updated."
msgstr "Se han actualizado los ajustes de Gravatar."
-#: ../../addon/msgfooter/msgfooter.php:47
-msgid "text to include in all outgoing posts from this site"
-msgstr "texto a incluir en todos los mensajes salientes de este sitio"
-
-#: ../../addon/sendzid/Mod_Sendzid.php:21
-msgid "Send your identity to all websites"
-msgstr "Enviar su identidad a todos los sitios web"
-
-#: ../../addon/sendzid/Mod_Sendzid.php:29
-msgid "Send ZID"
-msgstr "Enviar ZID"
+#: ../../addon/pageheader/Mod_Pageheader.php:22
+msgid "pageheader Settings saved."
+msgstr "Se han guardado los ajustes del encabezado de página."
-#: ../../addon/cart/widgets/catalogitem.php:57
-#: ../../addon/cart/submodules/hzservices.php:660
-#: ../../addon/cart/submodules/manualcat.php:263
-msgid "Price"
-msgstr "Precio"
+#: ../../addon/pageheader/Mod_Pageheader.php:41
+msgid "Message to display on every page on this server"
+msgstr "Mensaje para mostrar en todas las páginas de este servidor"
-#: ../../addon/cart/manual_payments.php:7
-msgid "Error: order mismatch. Please try again."
-msgstr "Error: desajuste de pedidos. Por favor, inténtelo de nuevo."
+#: ../../addon/pageheader/Mod_Pageheader.php:49
+msgid "Page Header"
+msgstr "Page Header"
-#: ../../addon/cart/manual_payments.php:61
-msgid "Manual payments are not enabled."
-msgstr "Los pagos manuales no están habilitados."
+#: ../../addon/mdpost/mdpost.php:42
+msgid "Use markdown for editing posts"
+msgstr "Usar markdown para editar las entradas"
-#: ../../addon/cart/manual_payments.php:68
-#: ../../addon/cart/submodules/paypalbutton.php:392
-#: ../../addon/cart/submodules/paypalbuttonV2.php:409
-#: ../../addon/cart/cart.php:1580
-msgid "Order not found."
-msgstr "El pedido no se ha encontrado."
+#: ../../addon/ldapauth/ldapauth.php:101
+msgid "An account has been created for you."
+msgstr "Se ha creado una cuenta para usted."
-#: ../../addon/cart/manual_payments.php:77
-msgid "Finished"
-msgstr "Terminado"
+#: ../../addon/ldapauth/ldapauth.php:108
+msgid "Authentication successful but rejected: account creation is disabled."
+msgstr "Autenticación correcta pero rechazada: la creación de cuentas está deshabilitada."
-#: ../../addon/cart/submodules/subscriptions.php:151
-msgid "Enable Subscription Management Module"
-msgstr "Habilitar el módulo de gestión de suscripciones"
+#: ../../addon/twitter/Mod_Twitter.php:65
+msgid "Twitter settings updated."
+msgstr "Se han actualizado los ajustes de Twitter."
-#: ../../addon/cart/submodules/subscriptions.php:223
+#: ../../addon/twitter/Mod_Twitter.php:101
msgid ""
-"Cannot include subscription items with different terms in the same order."
-msgstr "No se pueden incluir artículos de suscripción con términos diferentes en el mismo orden."
-
-#: ../../addon/cart/submodules/subscriptions.php:372
-msgid "Select Subscription to Edit"
-msgstr "Seleccione suscripción a editar"
-
-#: ../../addon/cart/submodules/subscriptions.php:380
-msgid "Edit Subscriptions"
-msgstr "Editar suscripciones"
-
-#: ../../addon/cart/submodules/subscriptions.php:414
-msgid "Subscription SKU"
-msgstr "SKU de la suscripción"
-
-#: ../../addon/cart/submodules/subscriptions.php:419
-msgid "Catalog Description"
-msgstr "Descripción del catálogo"
-
-#: ../../addon/cart/submodules/subscriptions.php:423
-msgid "Subscription available for purchase."
-msgstr "Suscripción disponible para la compra."
-
-#: ../../addon/cart/submodules/subscriptions.php:428
-msgid "Maximum active subscriptions to this item per account."
-msgstr "Máximo de suscripciones activas a este artículo por cuenta."
-
-#: ../../addon/cart/submodules/subscriptions.php:431
-msgid "Subscription price."
-msgstr "Precio de la suscripción."
-
-#: ../../addon/cart/submodules/subscriptions.php:435
-msgid "Quantity"
-msgstr "Cuantía"
+"No consumer key pair for Twitter found. Please contact your site "
+"administrator."
+msgstr "No se encontró ningún par de \"consumer key\" para Twitter. Póngase en contacto con el administrador del sitio."
-#: ../../addon/cart/submodules/subscriptions.php:439
-msgid "Term"
-msgstr "Condición"
+#: ../../addon/twitter/Mod_Twitter.php:123
+msgid ""
+"At this Hubzilla instance the Twitter plugin was enabled but you have not "
+"yet connected your account to your Twitter account. To do so click the "
+"button below to get a PIN from Twitter which you have to copy into the input"
+" box below and submit the form. Only your <strong>public</strong> posts will"
+" be posted to Twitter."
+msgstr "En esta instancia de Hubzilla, el complemento de Twitter estaba habilitado pero aún no ha conectado su cuenta a la cuenta de Twitter. Para ello, haga clic en el botón de abajo, para obtener un PIN de Twitter que debe copiar en el cuadro de entrada a continuación y enviar el formulario. Solo sus entradas <strong>públicas</ strong> se publicarán en Twitter."
-#: ../../addon/cart/submodules/hzservices.php:65
-msgid "Enable Hubzilla Services Module"
-msgstr "Habilitar el Módulo de Servicios de Hubzilla"
+#: ../../addon/twitter/Mod_Twitter.php:125
+msgid "Log in with Twitter"
+msgstr "Iniciar sesión en Twitter"
-#: ../../addon/cart/submodules/hzservices.php:164
-#: ../../addon/cart/submodules/manualcat.php:172
-msgid "New Sku"
-msgstr "Nuevo SKU (número de referencia)"
+#: ../../addon/twitter/Mod_Twitter.php:128
+msgid "Copy the PIN from Twitter here"
+msgstr "Copiar aquí el PIN de Twitter"
-#: ../../addon/cart/submodules/hzservices.php:199
-#: ../../addon/cart/submodules/manualcat.php:208
-msgid "Cannot save edits to locked item."
-msgstr "No se pueden guardar las ediciones en el elemento bloqueado."
+#: ../../addon/twitter/Mod_Twitter.php:145
+#: ../../addon/statusnet/Mod_Statusnet.php:270
+msgid "Currently connected to: "
+msgstr "Actualmente está conectado a: "
-#: ../../addon/cart/submodules/hzservices.php:248
-#: ../../addon/cart/submodules/hzservices.php:335
-msgid "SKU not found."
-msgstr "No se ha encontrado el SKU"
+#: ../../addon/twitter/Mod_Twitter.php:150
+msgid ""
+"<strong>Note:</strong> Due your privacy settings (<em>Hide your profile "
+"details from unknown viewers?</em>) the link potentially included in public "
+"postings relayed to Twitter will lead the visitor to a blank page informing "
+"the visitor that the access to your profile has been restricted."
+msgstr "<strong>Aviso:</strong> Debido a su configuración de privacidad (<em>Ocultar los detalles de su perfil a los visitantes desconocidos?</em>), el enlace potencialmente incluido en las entradas públicas retransmitidas a Twitter llevará al visitante a una página en blanco informándolo de que el acceso a su perfil ha sido restringido."
-#: ../../addon/cart/submodules/hzservices.php:301
-#: ../../addon/cart/submodules/hzservices.php:305
-msgid "Invalid Activation Directive."
-msgstr "Directiva de activación no válida."
+#: ../../addon/twitter/Mod_Twitter.php:155
+msgid "Twitter post length"
+msgstr "Longitud del mensaje en Twitter"
-#: ../../addon/cart/submodules/hzservices.php:376
-#: ../../addon/cart/submodules/hzservices.php:380
-msgid "Invalid Deactivation Directive."
-msgstr "Directiva de desactivación no válida"
+#: ../../addon/twitter/Mod_Twitter.php:155
+msgid "Maximum tweet length"
+msgstr "Longitud máxima del tweet"
-#: ../../addon/cart/submodules/hzservices.php:566
-msgid "Add to this privacy group"
-msgstr "Añadir a este grupo de canales"
+#: ../../addon/twitter/Mod_Twitter.php:160
+msgid "Send public postings to Twitter by default"
+msgstr "Enviar mensajes públicos a Twitter de forma predeterminada"
-#: ../../addon/cart/submodules/hzservices.php:582
-msgid "Set user service class"
-msgstr "Configurar la clase de servicio al usuario"
+#: ../../addon/twitter/Mod_Twitter.php:160
+msgid ""
+"If enabled your public postings will be posted to the associated Twitter "
+"account by default"
+msgstr "Si está activado, sus entradas públicas se publicarán en la cuenta de Twitter asociada de forma predeterminada."
-#: ../../addon/cart/submodules/hzservices.php:609
-msgid "You must be using a local account to purchase this service."
-msgstr "Usted debe estar usando una cuenta local para comprar este servicio."
+#: ../../addon/twitter/Mod_Twitter.php:169
+#: ../../addon/statusnet/Mod_Statusnet.php:289
+msgid "Clear OAuth configuration"
+msgstr "Limpiar la configuración de OAuth"
-#: ../../addon/cart/submodules/hzservices.php:649
-#: ../../addon/cart/submodules/manualcat.php:252
-msgid "Changes Locked"
-msgstr "Cambios bloqueados"
+#: ../../addon/twitter/Mod_Twitter.php:179
+msgid "Twitter Crosspost Connector"
+msgstr "Twitter Crosspost Connector"
-#: ../../addon/cart/submodules/hzservices.php:653
-#: ../../addon/cart/submodules/manualcat.php:256
-msgid "Item available for purchase."
-msgstr "Artículo disponible para la compra."
+#: ../../addon/twitter/twitter.php:109
+msgid "Post to Twitter"
+msgstr "Publicar en Twitter"
-#: ../../addon/cart/submodules/hzservices.php:663
-#: ../../addon/cart/submodules/manualcat.php:266
-msgid "Photo URL"
-msgstr "URL de la foto"
+#: ../../addon/twitter/twitter.php:502
+#: ../../addon/rendezvous/rendezvous.php:95
+msgid "Submit Settings"
+msgstr "Enviar los ajustes"
-#: ../../addon/cart/submodules/hzservices.php:667
-msgid "Add buyer to privacy group"
-msgstr "Agregar comprador al grupo de canales"
+#: ../../addon/twitter/twitter.php:504 ../../addon/statusnet/statusnet.php:596
+#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:138
+msgid "Consumer Key"
+msgstr "Consumer Key"
-#: ../../addon/cart/submodules/hzservices.php:672
-msgid "Add buyer as connection"
-msgstr "Añadir comprador como conexión"
+#: ../../addon/twitter/twitter.php:505 ../../addon/statusnet/statusnet.php:595
+#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
+#: ../../Zotlabs/Module/Oauth.php:113 ../../Zotlabs/Module/Oauth.php:139
+msgid "Consumer Secret"
+msgstr "Consumer Secret"
-#: ../../addon/cart/submodules/hzservices.php:680
-#: ../../addon/cart/submodules/hzservices.php:722
-msgid "Set Service Class"
-msgstr "Establecer clase de servicio"
+#: ../../addon/planets/Mod_Planets.php:23
+msgid "Random Planet App"
+msgstr "App Random Planet"
-#: ../../addon/cart/submodules/orderoptions.php:70
-msgid "Enable Order/Item Options"
-msgstr "Habilitar las opciones de pedido/artículo"
+#: ../../addon/planets/Mod_Planets.php:25
+msgid ""
+"Set a random planet from the Star Wars Empire as your location when posting"
+msgstr "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias como su ubicación cuando publique."
-#: ../../addon/cart/submodules/orderoptions.php:333
-#: ../../addon/cart/submodules/orderoptions.php:357
-#: ../../addon/cart/submodules/orderoptions.php:433
-#: ../../addon/cart/submodules/orderoptions.php:457
-msgid "Label"
-msgstr "Etiqueta"
+#: ../../addon/startpage/Mod_Startpage.php:60
+msgid "Page to load after login"
+msgstr "Página para cargar tras el inicio de sesión"
-#: ../../addon/cart/submodules/orderoptions.php:334
-#: ../../addon/cart/submodules/orderoptions.php:358
-#: ../../addon/cart/submodules/orderoptions.php:434
-#: ../../addon/cart/submodules/orderoptions.php:458
-#: ../../include/js_strings.php:124 ../../include/datetime.php:211
-#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Appman.php:209
-#: ../../Zotlabs/Module/Appman.php:210 ../../Zotlabs/Module/Profiles.php:762
-#: ../../Zotlabs/Module/Profiles.php:766
-msgid "Required"
-msgstr "Obligatorio"
+#: ../../addon/startpage/Mod_Startpage.php:60
+msgid ""
+"Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy "
+"collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave "
+"blank for default network page (grid)."
+msgstr "Ejemplos: &quot;aplicaciones&quot;, &quot;mi red?f=&gid=37&quot; (grupo de canales), &quot;mi canal&quot; or &quot;notificaciones del sistema&quot; (dejar en blanco para la página de mi red por defecto (grid)."
-#: ../../addon/cart/submodules/orderoptions.php:336
-#: ../../addon/cart/submodules/orderoptions.php:360
-#: ../../addon/cart/submodules/orderoptions.php:436
-#: ../../addon/cart/submodules/orderoptions.php:460
-msgid "Instructions"
-msgstr "Instrucciones"
+#: ../../addon/startpage/Mod_Startpage.php:68
+msgid "Startpage"
+msgstr "Startpage"
-#: ../../addon/cart/submodules/paypalbutton.php:85
-msgid "Enable Paypal Button Module"
-msgstr "Habilitar el módulo del botón de Paypal"
+#: ../../addon/hsse/Mod_Hsse.php:15
+msgid "WYSIWYG status editor"
+msgstr "Editor de estado de WYSIWYG"
-#: ../../addon/cart/submodules/paypalbutton.php:93
-#: ../../addon/cart/submodules/paypalbuttonV2.php:94
-msgid "Use Production Key"
-msgstr "Utilizar clave en entorno de producción"
+#: ../../addon/hsse/Mod_Hsse.php:24
+msgid "WYSIWYG Status App"
+msgstr "App WYSIWYG Status"
-#: ../../addon/cart/submodules/paypalbutton.php:100
-#: ../../addon/cart/submodules/paypalbuttonV2.php:101
-msgid "Paypal Sandbox Client Key"
-msgstr "Clave de cliente en el entorno de pruebas de Paypal"
+#: ../../addon/hsse/Mod_Hsse.php:32
+msgid "WYSIWYG Status"
+msgstr "Estado de WYSIWYG"
-#: ../../addon/cart/submodules/paypalbutton.php:107
-#: ../../addon/cart/submodules/paypalbuttonV2.php:108
-msgid "Paypal Sandbox Secret Key"
-msgstr "Clave secreta en el entorno de pruebas de Paypal"
+#: ../../addon/pubcrawl/as.php:1958 ../../addon/diaspora/Receiver.php:1647
+#: ../../Zotlabs/Module/Like.php:445 ../../Zotlabs/Module/Subthread.php:115
+msgid "status"
+msgstr "el mensaje de estado "
-#: ../../addon/cart/submodules/paypalbutton.php:113
-#: ../../addon/cart/submodules/paypalbuttonV2.php:114
-msgid "Paypal Production Client Key"
-msgstr "Clave de cliente en el entorno de producción de Paypal"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:25
+msgid "ActivityPub Protocol Settings updated."
+msgstr "Se han actualizado los ajustes del protocolo ActivityPub."
-#: ../../addon/cart/submodules/paypalbutton.php:120
-#: ../../addon/cart/submodules/paypalbuttonV2.php:121
-msgid "Paypal Production Secret Key"
-msgstr "Clave secreta en el entorno de producción de Paypal"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:41
+msgid ""
+"The activitypub protocol does not support location independence. Connections"
+" you make within that network may be unreachable from alternate channel "
+"locations."
+msgstr "El protocolo ActivityPub no soporta la independencia de ubicación. Las conexiones que realice dentro de esa red pueden no ser accesibles desde ubicaciones de canales alternativos."
-#: ../../addon/cart/submodules/paypalbutton.php:252
-#: ../../addon/cart/submodules/paypalbuttonV2.php:264
-msgid "Paypal button payments are not enabled."
-msgstr "Los pagos con el botón de Paypal no están habilitados."
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
+msgid "Deliver to ActivityPub recipients in privacy groups"
+msgstr "Entregar a los destinatarios de ActivityPub en grupos de canales"
-#: ../../addon/cart/submodules/paypalbutton.php:270
-#: ../../addon/cart/submodules/paypalbuttonV2.php:282
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:47
msgid ""
-"Paypal button payments are not properly configured. Please choose another "
-"payment option."
-msgstr "Los pagos con el botón de Paypal no están configurados correctamente. Por favor, elija otra opción de pago."
-
-#: ../../addon/cart/submodules/paypalbuttonV2.php:86
-msgid "Enable Paypal Button Module (API-v2)"
-msgstr "Habilitar el módulo de botones de Paypal (API-v2)"
+"May result in a large number of mentions and expose all the members of your "
+"privacy group"
+msgstr "Puede resultar en un gran número de menciones y exponer a todos los miembros de su grupo de canales"
-#: ../../addon/cart/submodules/manualcat.php:61
-msgid "Enable Manual Cart Module"
-msgstr "Habilitar el módulo de carro manual"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
+msgid "Send multi-media HTML articles"
+msgstr "Enviar artículos multimedia en HTML"
-#: ../../addon/cart/myshop.php:30
-msgid "Access Denied."
-msgstr "Acceso denegado"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:51
+msgid "Not supported by some microblog services such as Mastodon"
+msgstr "No soportado por algunos servicios de microblog como Mastodon"
-#: ../../addon/cart/myshop.php:112 ../../addon/cart/cart.php:1446
-msgid "Order Not Found"
-msgstr "No se ha encontrado el pedido"
+#: ../../addon/pubcrawl/Mod_Pubcrawl.php:59
+msgid "Activitypub Protocol"
+msgstr "Protocolo Activitypub"
-#: ../../addon/cart/myshop.php:189 ../../addon/cart/myshop.php:223
-#: ../../addon/cart/myshop.php:271 ../../addon/cart/myshop.php:329
-msgid "Invalid Item"
-msgstr "Elemento no válido"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:22
+msgid "Fediwordle App"
+msgstr "App Fediwordle"
-#: ../../addon/cart/Settings/Cart.php:58
-msgid "Enable Test Catalog"
-msgstr "Habilitar el catálogo de pruebas"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:23
+msgid "A distributed word game inspired by wordle."
+msgstr "Un juego de palabras distribuido inspirado en el wordle."
-#: ../../addon/cart/Settings/Cart.php:70
-msgid "Enable Manual Payments"
-msgstr "Permitir pagos manuales"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:24
+msgid ""
+"To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel "
+"post."
+msgstr "Para empezar una partida, introduzca [wordle]mi_palabra[/wordle] en algún lugar de un post de nivel superior."
-#: ../../addon/cart/Settings/Cart.php:90
-msgid "Base Merchant Currency"
-msgstr "Divida base del vendedor"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:25
+msgid "Your contacts can post their guess in the comments."
+msgstr "Sus contactos pueden publicar sus conjeturas en los comentarios."
-#: ../../addon/cart/Settings/Cart.php:129 ../../addon/cart/cart.php:1375
-msgid "Cart Settings"
-msgstr "Configuración del carro de la compra"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:26
+msgid ""
+"Your channel will evaluate the guess and automatically post the response."
+msgstr "Su canal evaluará la conjetura y publicará automáticamente la respuesta."
-#: ../../addon/cart/cart.php:252
-msgid "DB Cleanup Failure"
-msgstr "Fallo de limpieza de la base de datos"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:28
+msgid "Correct letters"
+msgstr "Letras correctas"
-#: ../../addon/cart/cart.php:674
-msgid "[cart] Item Added"
-msgstr "[cesta] Artículo añadido"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:29
+msgid "Letters contained in the word but at the wrong spot"
+msgstr "Letras contenidas en la palabra pero en el lugar equivocado"
-#: ../../addon/cart/cart.php:1063
-msgid "Order already checked out."
-msgstr "El pedido ya ha sido revisado"
+#: ../../addon/fediwordle/Mod_Fediwordle.php:30
+msgid "Letters not contained in the word"
+msgstr "Letras no contenidas en la palabra"
-#: ../../addon/cart/cart.php:1368
-msgid "Drop database tables when uninstalling."
-msgstr "Eliminar tablas de la base de datos al desinstalar."
+#: ../../addon/fediwordle/fediwordle.php:211
+msgid "ERROR: word length is not correct!"
+msgstr "ERROR: ¡la longitud de la palabra no es correcta!"
-#: ../../addon/cart/cart.php:1387 ../../addon/cart/cart.php:1390
-msgid "Shop"
-msgstr "Comprar"
+#: ../../addon/notifyadmin/notifyadmin.php:34
+msgid "New registration"
+msgstr "Nuevo registro"
-#: ../../addon/cart/cart.php:1547
-msgid "You must be logged into the Grid to shop."
-msgstr "Debe iniciar sesión en la red para comprar."
+#: ../../addon/notifyadmin/notifyadmin.php:40
+#: ../../Zotlabs/Module/Invite.php:265
+#, php-format
+msgid "%s : Message delivery failed."
+msgstr "%s : Falló el envío del mensaje."
-#: ../../addon/cart/cart.php:1594
-msgid "Access denied."
-msgstr "Acceso denegado"
+#: ../../addon/notifyadmin/notifyadmin.php:42
+#, php-format
+msgid "Message sent to %s. New account registration: %s"
+msgstr "Mensaje enviado a %s. Registro de una nueva cuenta: %s"
-#: ../../addon/cart/cart.php:1646 ../../addon/cart/cart.php:1789
-msgid "No Order Found"
-msgstr "No se ha encontrado ningún pedido"
+#: ../../addon/libertree/Mod_Libertree.php:25
+msgid "Libertree Crosspost Connector Settings saved."
+msgstr "Se han guardado los ajustes del conector de publicación cruzada con Libertree."
-#: ../../addon/cart/cart.php:1655
-msgid "An unknown error has occurred Please start again."
-msgstr "Se ha producido un error desconocido Vuelva a empezar."
+#: ../../addon/libertree/Mod_Libertree.php:49
+msgid "Libertree API token"
+msgstr "Token de la API de Libertree"
-#: ../../addon/cart/cart.php:1798
-msgid "Requirements not met."
-msgstr "No se cumplen los requisitos."
+#: ../../addon/libertree/Mod_Libertree.php:53
+msgid "Libertree site URL"
+msgstr "URL del servidor de Libertree"
-#: ../../addon/cart/cart.php:1798
-msgid "Review your order and complete any needed requirements."
-msgstr "Revise su pedido y complete los requisitos necesarios."
+#: ../../addon/libertree/Mod_Libertree.php:57
+msgid "Post to Libertree by default"
+msgstr "Publicar en Libertree por defecto"
-#: ../../addon/cart/cart.php:1824
-msgid "Invalid Payment Type. Please start again."
-msgstr "Tipo de pago no válido. Por favor, empiece de nuevo."
+#: ../../addon/libertree/Mod_Libertree.php:65
+msgid "Libertree Crosspost Connector"
+msgstr "Libertree Crosspost Connector"
-#: ../../addon/cart/cart.php:1831
-msgid "Order not found"
-msgstr "El pedido no se ha encontrado"
+#: ../../addon/libertree/libertree.php:43
+msgid "Post to Libertree"
+msgstr "Publicar en Libertree"
#: ../../addon/nofed/Mod_Nofed.php:21
msgid "nofed Settings saved."
@@ -3102,165 +4533,21 @@ msgstr "No Federation"
msgid "Federate"
msgstr "Federar"
-#: ../../addon/smileybutton/Mod_Smileybutton.php:42
-msgid "Hide the button and show the smilies directly."
-msgstr "Ocultar el botón y mostrar los smilies directamente."
-
-#: ../../addon/smileybutton/Mod_Smileybutton.php:50
-msgid "Smileybutton Settings"
-msgstr "Ajustes de Smileybutton"
-
-#: ../../addon/redfiles/redfilehelper.php:64 ../../include/attach.php:2104
-msgid "file"
-msgstr "fichero"
-
-#: ../../addon/redfiles/redfiles.php:119
-msgid "Redmatrix File Storage Import"
-msgstr "Importar repositorio de ficheros de Redmatrix"
-
-#: ../../addon/redfiles/redfiles.php:120
-msgid "This will import all your Redmatrix cloud files to this channel."
-msgstr "Esto importará todos sus ficheros de la nube de Redmatrix a este canal."
-
-#: ../../addon/diaspora/diaspora.php:78
-msgid ""
-"Please install the statistics addon to be able to configure a diaspora relay"
-msgstr "Por favor, instale el complemento de estadísticas para poder configurar el reenvío de diaspora"
-
-#: ../../addon/diaspora/diaspora.php:88
-msgid "Diaspora Relay Handle"
-msgstr "Gestionar el reenvío de Diaspora"
-
-#: ../../addon/diaspora/diaspora.php:88
-msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld"
-msgstr "La dirección de una transmisión de diaspora. Ejemplo: relay@diasporarelay.tld"
-
-#: ../../addon/diaspora/diaspora.php:108
-msgid "Diaspora relay could not be imported"
-msgstr "El reenvío de Diaspora no ha podido ser importado"
-
-#: ../../addon/diaspora/diaspora.php:1068
-msgid "No subject"
-msgstr "Sin tema"
-
-#: ../../addon/diaspora/p.php:48 ../../addon/diaspora/util.php:337
-#: ../../addon/diaspora/util.php:350 ../../Zotlabs/Lib/Enotify.php:61
-msgid "$projectname"
-msgstr "$projectname"
-
-#: ../../addon/diaspora/import_diaspora.php:18
-msgid "No username found in import file."
-msgstr "No se ha encontrado el nombre de usuario en el fichero de importación."
-
-#: ../../addon/diaspora/import_diaspora.php:43 ../../include/import.php:77
-msgid "Unable to create a unique channel address. Import failed."
-msgstr "No se ha podido crear una dirección de canal única. Ha fallado la importación."
-
-#: ../../addon/diaspora/import_diaspora.php:140
-msgid "Import completed."
-msgstr "Importación completada."
-
-#: ../../addon/diaspora/Mod_Diaspora.php:43
-msgid "Diaspora Protocol Settings updated."
-msgstr "Los ajustes del protocolo de Diaspora se han actualizado."
-
-#: ../../addon/diaspora/Mod_Diaspora.php:52
-msgid ""
-"The diaspora protocol does not support location independence. Connections "
-"you make within that network may be unreachable from alternate channel "
-"locations."
-msgstr "El protocolo de Diaspora no admite la independencia de la ubicación. Las conexiones que realice dentro de esa red pueden ser inaccesibles desde ubicaciones de canales alternativos."
-
-#: ../../addon/diaspora/Mod_Diaspora.php:75
-msgid "Allow any Diaspora member to comment or like your public posts"
-msgstr "Permitir que cualquier miembro de Diaspora comente o ponga un like en sus entradas públicas"
-
-#: ../../addon/diaspora/Mod_Diaspora.php:75
-msgid ""
-"If this setting is disabled only your contacts will be able to comment or "
-"like your public posts"
-msgstr "Si esta configuración está desactivada, sólo sus contactos podrán comentar o dar a \"me gusta\" en sus publicaciones públicas"
-
-#: ../../addon/diaspora/Mod_Diaspora.php:79
-msgid "Prevent your hashtags from being redirected to other sites"
-msgstr "Impedir que sus \"hashtags\" sean redirigidos a otros sitios "
-
-#: ../../addon/diaspora/Mod_Diaspora.php:83
-msgid ""
-"Sign and forward posts and comments with no existing Diaspora signature"
-msgstr "Firmar y enviar entradas y comentarios sin firma de Diaspora"
-
-#: ../../addon/diaspora/Mod_Diaspora.php:88
-msgid "Followed hashtags (comma separated, do not include the #)"
-msgstr "\"Hashtags\" seguidos (separados por comas, sin incluir #)"
-
-#: ../../addon/diaspora/Mod_Diaspora.php:97
-msgid "Diaspora Protocol"
-msgstr "Protocolo Diaspora"
-
-#: ../../addon/diaspora/Receiver.php:1595
-#, php-format
-msgid "%1$s dislikes %2$s's %3$s"
-msgstr "a %1$s no le gusta el %3$s de %2$s"
-
-#: ../../addon/diaspora/Receiver.php:2206 ../../Zotlabs/Module/Like.php:487
-#, php-format
-msgid "%1$s is attending %2$s's %3$s"
-msgstr "%3$s de %2$s: %1$s participa"
-
-#: ../../addon/diaspora/Receiver.php:2208 ../../Zotlabs/Module/Like.php:489
-#, php-format
-msgid "%1$s is not attending %2$s's %3$s"
-msgstr "%3$s de %2$s: %1$s no participa"
-
-#: ../../addon/diaspora/Receiver.php:2210 ../../Zotlabs/Module/Like.php:491
-#, php-format
-msgid "%1$s may attend %2$s's %3$s"
-msgstr "%3$s de %2$s: %1$s quizá participe"
-
-#: ../../addon/piwik/piwik.php:85
-msgid ""
-"This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> "
-"analytics tool."
-msgstr "Este sitio es rastreado mediante la herramienta analítica <a href='http://www.piwik.org'>Piwik</a>."
-
-#: ../../addon/piwik/piwik.php:88
-#, php-format
-msgid ""
-"If you do not want that your visits are logged this way you <a href='%s'>can"
-" set a cookie to prevent Piwik from tracking further visits of the site</a> "
-"(opt-out)."
-msgstr "Si usted no quiere que sus visitas se registren de esta manera <a href='%s'>puede establecer una cookie para evitar que Piwik rastree otras visitas del sitio</a> (opt-out)."
-
-#: ../../addon/piwik/piwik.php:96
-msgid "Piwik Base URL"
-msgstr "URL base de Piwik"
-
-#: ../../addon/piwik/piwik.php:96
-msgid ""
-"Absolute path to your Piwik installation. (without protocol (http/s), with "
-"trailing slash)"
-msgstr "Ruta absoluta a la instalación de Piwik. (Sin protocolo (http/s), con barra diagonal)"
-
-#: ../../addon/piwik/piwik.php:97
-msgid "Site ID"
-msgstr "ID del sitio"
-
-#: ../../addon/piwik/piwik.php:98
-msgid "Show opt-out cookie link?"
-msgstr "Mostrar el enlace de la cookie opt-out?"
+#: ../../addon/wholikesme/wholikesme.php:29
+msgid "Who likes me?"
+msgstr "¿Quién me ha puesto \"Me gusta\"?"
-#: ../../addon/piwik/piwik.php:99
-msgid "Asynchronous tracking"
-msgstr "Rastreo asíncrono"
+#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:333
+msgid "Report Bug"
+msgstr "Informe de errores"
-#: ../../addon/piwik/piwik.php:100
-msgid "Enable frontend JavaScript error tracking"
-msgstr "Habilitar la interfaz JavaScript de seguimiento de errores"
+#: ../../addon/sendzid/Mod_Sendzid.php:21
+msgid "Send your identity to all websites"
+msgstr "Enviar su identidad a todos los sitios web"
-#: ../../addon/piwik/piwik.php:100
-msgid "This feature requires Piwik >= 2.2.0"
-msgstr "Esta funcionalidad requiere Piwik >= 2.2.0"
+#: ../../addon/sendzid/Mod_Sendzid.php:29
+msgid "Send ZID"
+msgstr "Enviar ZID"
#: ../../addon/workflow/workflow.php:222
msgid "Workflow user."
@@ -3306,8 +4593,8 @@ msgid "Web link."
msgstr "Enlace Web."
#: ../../addon/workflow/workflow.php:2622
-#: ../../addon/workflow/workflow.php:2683 ../../Zotlabs/Module/Cdav.php:1374
-#: ../../Zotlabs/Module/Connedit.php:734
+#: ../../addon/workflow/workflow.php:2683
+#: ../../Zotlabs/Module/Connedit.php:734 ../../Zotlabs/Module/Cdav.php:1376
msgid "Title"
msgstr "Título"
@@ -3316,8 +4603,8 @@ msgstr "Título"
msgid "Brief description or title"
msgstr "Breve descripción o título"
-#: ../../addon/workflow/workflow.php:2630 ../../Zotlabs/Widget/Notes.php:38
-#: ../../Zotlabs/Lib/Apps.php:374
+#: ../../addon/workflow/workflow.php:2630 ../../Zotlabs/Lib/Apps.php:375
+#: ../../Zotlabs/Widget/Notes.php:38
msgid "Notes"
msgstr "Notas"
@@ -3334,6 +4621,304 @@ msgstr "Cuerpo"
msgid "Workflow Settings"
msgstr "Ajustes de Workflow"
+#: ../../addon/hideaside/Mod_Hideaside.php:28
+msgid "Hide Aside App"
+msgstr "App de ocultamiento del panel lateral"
+
+#: ../../addon/hideaside/Mod_Hideaside.php:29
+msgid "Fade out aside areas after a while when using endless scroll"
+msgstr "Se desvanecen las áreas laterales cuando se usa un scroll sin fin"
+
+#: ../../addon/xmpp/xmpp.php:44
+msgid "Jabber BOSH host"
+msgstr "BOSH de Jabber"
+
+#: ../../addon/xmpp/xmpp.php:45
+msgid "Use central userbase"
+msgstr "Usar la base de usuarios central"
+
+#: ../../addon/xmpp/xmpp.php:45
+msgid ""
+"If enabled, members will automatically login to an ejabberd server that has "
+"to be installed on this machine with synchronized credentials via the "
+"\"auth_ejabberd.php\" script."
+msgstr "Si está habilitado, los miembros se conectarán automáticamente a un servidor ejabberd que debe instalarse en esta máquina con credenciales sincronizadas a través del script \"auth ejabberd.php\"."
+
+#: ../../addon/xmpp/Mod_Xmpp.php:23
+msgid "XMPP settings updated."
+msgstr "Se han actualizado los ajustes de XMPP."
+
+#: ../../addon/xmpp/Mod_Xmpp.php:35
+msgid "XMPP App"
+msgstr "App XMPP"
+
+#: ../../addon/xmpp/Mod_Xmpp.php:35 ../../addon/ijpost/Mod_Ijpost.php:35
+#: ../../Zotlabs/Module/Lang.php:20 ../../Zotlabs/Module/Invite.php:69
+msgid "Not Installed"
+msgstr "No instalado/a"
+
+#: ../../addon/xmpp/Mod_Xmpp.php:36
+msgid "Embedded XMPP (Jabber) client"
+msgstr "Cliente XMPP (Jabber) integrado"
+
+#: ../../addon/xmpp/Mod_Xmpp.php:52
+msgid "Individual credentials"
+msgstr "Credenciales individuales"
+
+#: ../../addon/xmpp/Mod_Xmpp.php:58
+msgid "Jabber BOSH server"
+msgstr "Servidor BOSH de Jabber"
+
+#: ../../addon/xmpp/Mod_Xmpp.php:67
+msgid "XMPP Settings"
+msgstr "Ajustes de XMPP"
+
+#: ../../addon/visage/Mod_Visage.php:23
+msgid "Recent Channel/Profile Viewers"
+msgstr "Visitantes recientes del canal o perfil"
+
+#: ../../addon/visage/Mod_Visage.php:34
+msgid "No entries."
+msgstr "No hay entradas."
+
+#: ../../addon/rendezvous/rendezvous.php:57
+msgid "Errors encountered deleting database table "
+msgstr "Errores encontrados al eliminar la tabla de la base de datos"
+
+#: ../../addon/rendezvous/rendezvous.php:96
+msgid "Drop tables when uninstalling?"
+msgstr "¿Eliminar tablas al desinstalar?"
+
+#: ../../addon/rendezvous/rendezvous.php:96
+msgid ""
+"If checked, the Rendezvous database tables will be deleted when the plugin "
+"is uninstalled."
+msgstr "Si se selecciona, las tablas de la base de datos Rendezvous se eliminarán cuando se desinstale el plugin."
+
+#: ../../addon/rendezvous/rendezvous.php:97
+msgid "Mapbox Access Token"
+msgstr "Token de acceso de Mapbox"
+
+#: ../../addon/rendezvous/rendezvous.php:97
+msgid ""
+"If you enter a Mapbox access token, it will be used to retrieve map tiles "
+"from Mapbox instead of the default OpenStreetMap tile server."
+msgstr "Si introduce un token de acceso a Mapbox, se utilizará para recuperar los mapas de mosaicos de imágenes de Mapbox en lugar del servidor de mosaico de imágenes OpenStreetMap predeterminado."
+
+#: ../../addon/rendezvous/rendezvous.php:162
+msgid "Rendezvous"
+msgstr "Rendezvous"
+
+#: ../../addon/rendezvous/rendezvous.php:167
+msgid ""
+"This identity has been deleted by another member due to inactivity. Please "
+"press the \"New identity\" button or refresh the page to register a new "
+"identity. You may use the same name."
+msgstr "Esta identidad ha sido eliminada por otro miembro debido a su inactividad. Pulse el botón \"Nueva identidad\" o actualice la página para registrar una nueva identidad. Puede usar el mismo nombre."
+
+#: ../../addon/rendezvous/rendezvous.php:168
+msgid "Welcome to Rendezvous!"
+msgstr "¡Bienvenido/a a Rendevous!"
+
+#: ../../addon/rendezvous/rendezvous.php:169
+msgid ""
+"Enter your name to join this rendezvous. To begin sharing your location with"
+" the other members, tap the GPS control. When your location is discovered, a"
+" red dot will appear and others will be able to see you on the map."
+msgstr "Introduzca tu nombre para unirse a esta cita. Para comenzar a compartir su ubicación con los demás miembros, pulse en el control GPS. Cuando se descubra su ubicación, aparecerá un punto rojo y otros podrán verlo en el mapa."
+
+#: ../../addon/rendezvous/rendezvous.php:171
+msgid "Let's meet here"
+msgstr "Reunámonos aquí"
+
+#: ../../addon/rendezvous/rendezvous.php:172 ../../addon/wiki/Mod_Wiki.php:221
+#: ../../addon/wiki/Lib/NativeWikiPage.php:588
+#: ../../addon/wiki/Widget/Wiki_page_history.php:28
+#: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Oauth2.php:144
+#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth.php:137
+#: ../../Zotlabs/Module/Chat.php:256 ../../Zotlabs/Module/Connedit.php:732
+#: ../../Zotlabs/Module/Admin/Channels.php:159
+#: ../../Zotlabs/Module/Cdav.php:1374
+#: ../../Zotlabs/Module/Sharedwithme.php:107
+#: ../../Zotlabs/Storage/Browser.php:380
+msgid "Name"
+msgstr "Nombre"
+
+#: ../../addon/rendezvous/rendezvous.php:173
+#: ../../addon/cart/submodules/hzservices.php:657
+#: ../../addon/cart/submodules/manualcat.php:260
+#: ../../Zotlabs/Module/Appman.php:210 ../../Zotlabs/Module/Cdav.php:1015
+#: ../../Zotlabs/Module/Rbmark.php:100
+msgid "Description"
+msgstr "Descripción"
+
+#: ../../addon/rendezvous/rendezvous.php:174
+msgid "New marker"
+msgstr "Nuevo marcador"
+
+#: ../../addon/rendezvous/rendezvous.php:175
+msgid "Edit marker"
+msgstr "Editar un marcador"
+
+#: ../../addon/rendezvous/rendezvous.php:176
+msgid "New identity"
+msgstr "Nueva identidad"
+
+#: ../../addon/rendezvous/rendezvous.php:177
+msgid "Delete marker"
+msgstr "Eliminar un marcador"
+
+#: ../../addon/rendezvous/rendezvous.php:178
+msgid "Delete member"
+msgstr "Eliminar un miembro"
+
+#: ../../addon/rendezvous/rendezvous.php:179
+msgid "Edit proximity alert"
+msgstr "Editar alerta de proximidad"
+
+#: ../../addon/rendezvous/rendezvous.php:180
+msgid ""
+"A proximity alert will be issued when this member is within a certain radius"
+" of you.<br><br>Enter a radius in meters (0 to disable):"
+msgstr "Se emitirá una alerta de proximidad cuando este miembro esté dentro de un radio determinado respecto a usted.<br><br> Ingrese el radio en metros (0 para deshabilitar):"
+
+#: ../../addon/rendezvous/rendezvous.php:180
+#: ../../addon/rendezvous/rendezvous.php:185
+msgid "distance"
+msgstr "distancia"
+
+#: ../../addon/rendezvous/rendezvous.php:181
+msgid "Proximity alert distance (meters)"
+msgstr "Distancia (en metros) para la alerta de proximidad"
+
+#: ../../addon/rendezvous/rendezvous.php:182
+#: ../../addon/rendezvous/rendezvous.php:184
+msgid ""
+"A proximity alert will be issued when you are within a certain radius of the"
+" marker location.<br><br>Enter a radius in meters (0 to disable):"
+msgstr "Se emitirá una alerta de proximidad cuando usted esté dentro de un radio determinado respecto al marcador de localización.<br><br> Ingrese el radio en metros (0 para deshabilitar):"
+
+#: ../../addon/rendezvous/rendezvous.php:183
+msgid "Marker proximity alert"
+msgstr "Marcador de alerta de proximidad"
+
+#: ../../addon/rendezvous/rendezvous.php:186
+msgid "Reminder note"
+msgstr "Recordatorio"
+
+#: ../../addon/rendezvous/rendezvous.php:187
+msgid ""
+"Enter a note to be displayed when you are within the specified proximity..."
+msgstr "Introduzca una nota que se mostrará cuando esté dentro de la proximidad especificada..."
+
+#: ../../addon/rendezvous/rendezvous.php:199
+msgid "Add new rendezvous"
+msgstr "Añadir una nueva cita"
+
+#: ../../addon/rendezvous/rendezvous.php:200
+msgid ""
+"Create a new rendezvous and share the access link with those you wish to "
+"invite to the group. Those who open the link become members of the "
+"rendezvous. They can view other member locations, add markers to the map, or"
+" share their own locations with the group."
+msgstr "Cree una nueva cita y comparta los enlaces de acceso con los que desea invitar al grupo. Aquellos que abran el enlace se convertirán en miembros de la cita. Pueden ver otras ubicaciones de miembros, añadir marcadores al mapa o compartir sus propias ubicaciones con el grupo."
+
+#: ../../addon/rendezvous/rendezvous.php:232
+msgid "You have no rendezvous. Press the button above to create a rendezvous!"
+msgstr "No tiene ninguna cita. ¡Presione el botón de arriba para crear una!"
+
+#: ../../addon/rendezvous/rendezvous.php:401
+#: ../../Zotlabs/Module/Setup.php:730
+msgid "Errors encountered creating database tables."
+msgstr "Se han encontrado errores al crear las tablas de la base de datos."
+
+#: ../../addon/channelreputation/channelreputation.php:101
+#: ../../addon/channelreputation/channelreputation.php:102
+#: ../../addon/cart/myshop.php:144 ../../addon/cart/myshop.php:180
+#: ../../addon/cart/myshop.php:214 ../../addon/cart/myshop.php:261
+#: ../../addon/cart/myshop.php:296 ../../addon/cart/myshop.php:319
+msgid "Access Denied"
+msgstr "Acceso denegado"
+
+#: ../../addon/channelreputation/channelreputation.php:109
+msgid "Enable Community Moderation"
+msgstr "Habilitar la moderación de la comunidad"
+
+#: ../../addon/channelreputation/channelreputation.php:117
+msgid "Reputation automatically given to new members"
+msgstr "La reputación se otorga automáticamente a los nuevos miembros"
+
+#: ../../addon/channelreputation/channelreputation.php:118
+msgid "Reputation will never fall below this value"
+msgstr "La reputación nunca caerá por debajo de este valor"
+
+#: ../../addon/channelreputation/channelreputation.php:119
+msgid "Minimum reputation before posting is allowed"
+msgstr "Reputación mínima antes de que se permita el envío de entradas"
+
+#: ../../addon/channelreputation/channelreputation.php:120
+msgid "Minimum reputation before commenting is allowed"
+msgstr "Mínima reputación antes de que se permitan los comentarios"
+
+#: ../../addon/channelreputation/channelreputation.php:121
+msgid "Minimum reputation before a member is able to moderate other posts"
+msgstr "Reputación mínima antes de que un miembro sea capaz de moderar otros mensajes"
+
+#: ../../addon/channelreputation/channelreputation.php:122
+msgid ""
+"Max ratio of moderator's reputation that can be added to/deducted from "
+"reputation of person being moderated"
+msgstr "Proporción máxima de la reputación del moderador que puede ser añadida/descontada de la reputación de la persona que está siendo moderada."
+
+#: ../../addon/channelreputation/channelreputation.php:123
+msgid "Reputation \"cost\" to post"
+msgstr "\"Coste\" de la reputación a contabilizar"
+
+#: ../../addon/channelreputation/channelreputation.php:124
+msgid "Reputation \"cost\" to comment"
+msgstr "\"Coste\" de la reputación para comentar"
+
+#: ../../addon/channelreputation/channelreputation.php:125
+msgid ""
+"Reputation automatically recovers at this rate per hour until it reaches "
+"minimum_to_post"
+msgstr "La reputación se recupera automáticamente a esta tasa por hora hasta que alcanza el mínimo_a_post"
+
+#: ../../addon/channelreputation/channelreputation.php:126
+msgid ""
+"When minimum_to_moderate > reputation > minimum_to_post reputation recovers "
+"at this rate per hour"
+msgstr "Cuando el mínimo_a_moderar > reputación > mínimo_a_publicar la reputación se recupera a esta tasa por hora "
+
+#: ../../addon/channelreputation/channelreputation.php:140
+msgid "Community Moderation Settings"
+msgstr "Configuración de la moderación de la comunidad"
+
+#: ../../addon/channelreputation/channelreputation.php:232
+msgid "Channel Reputation"
+msgstr "Reputación del canal"
+
+#: ../../addon/channelreputation/channelreputation.php:236
+msgid "An Error has occurred."
+msgstr "Se ha producido un error."
+
+#: ../../addon/channelreputation/channelreputation.php:254
+msgid "Upvote"
+msgstr "Votar a favor"
+
+#: ../../addon/channelreputation/channelreputation.php:255
+msgid "Downvote"
+msgstr "Votar en contra"
+
+#: ../../addon/channelreputation/channelreputation.php:414
+msgid "Can moderate reputation on my channel."
+msgstr "Se puede moderar la reputación en mi canal."
+
+#: ../../addon/bookmarker/bookmarker.php:38
+#: ../../Zotlabs/Lib/ThreadItem.php:474
+msgid "Save Bookmarks"
+msgstr "Guardar en Marcadores"
+
#: ../../addon/donate/donate.php:21
msgid "Project Servers and Resources"
msgstr "Servidores y recursos del proyecto"
@@ -3408,393 +4993,365 @@ msgstr "Patrocinador"
msgid "Special thanks to: "
msgstr "Agradecimiento especial a: "
-#: ../../addon/likebanner/likebanner.php:51
-msgid "Your Webbie:"
-msgstr "Su webbie: "
+#: ../../addon/photocache/Mod_Photocache.php:27
+msgid "Photo Cache settings saved."
+msgstr "Se ha guardado la configuración de la caché de fotos."
-#: ../../addon/likebanner/likebanner.php:54
-msgid "Fontsize (px):"
-msgstr "Tamaño de fuente (px): "
+#: ../../addon/photocache/Mod_Photocache.php:43
+msgid ""
+"Saves a copy of images from external sites locally to increase your "
+"anonymity in the web."
+msgstr "Guarde una copia de las imágenes de sitios externos localmente para aumentar su anonimato en la web."
-#: ../../addon/likebanner/likebanner.php:68
-msgid "Link:"
-msgstr "Enlace: "
+#: ../../addon/photocache/Mod_Photocache.php:49
+msgid "Minimal photo size for caching"
+msgstr "Tamaño mínimo de la foto para el almacenamiento en caché"
-#: ../../addon/likebanner/likebanner.php:70
-msgid "Like us on Hubzilla"
-msgstr "Múestrenos su agrado en Hubzilla"
+#: ../../addon/photocache/Mod_Photocache.php:51
+msgid "In pixels. From 1 up to 1024, 0 will be replaced with system default."
+msgstr "En píxeles. Desde 1 hasta 1024, 0 será reemplazado por el predeterminado del sistema."
-#: ../../addon/likebanner/likebanner.php:72
-msgid "Embed:"
-msgstr "Incorporado: "
+#: ../../addon/photocache/Mod_Photocache.php:60
+msgid "Photo Cache"
+msgstr "Photo Cache"
-#: ../../addon/opensearch/opensearch.php:26
-#, php-format
-msgctxt "opensearch"
-msgid "Search %1$s (%2$s)"
-msgstr "Buscar %1$s (%2$s)"
+#: ../../addon/morepokes/morepokes.php:19
+msgid "bitchslap"
+msgstr "una bofetada humillante"
-#: ../../addon/opensearch/opensearch.php:28
-msgctxt "opensearch"
-msgid "$Projectname"
-msgstr "$Projectname"
+#: ../../addon/morepokes/morepokes.php:19
+msgid "bitchslapped"
+msgstr "ha abofeteado de forma humillante a"
-#: ../../addon/opensearch/opensearch.php:42
-#: ../../Zotlabs/Module/Invite.php:225 ../../Zotlabs/Module/Invite.php:494
-#: ../../Zotlabs/Module/Invite.php:508 ../../Zotlabs/Module/Home.php:87
-#: ../../Zotlabs/Module/Home.php:95 ../../Zotlabs/Lib/Enotify.php:66
-msgid "$Projectname"
-msgstr "$Projectname"
+#: ../../addon/morepokes/morepokes.php:20
+msgid "shag"
+msgstr "un polvo"
-#: ../../addon/opensearch/opensearch.php:43
-msgid "Search $Projectname"
-msgstr "Buscar $Projectname"
+#: ../../addon/morepokes/morepokes.php:20
+msgid "shagged"
+msgstr "ha dejado exhausto/a a"
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:22
-msgid "Fuzzloc Settings updated."
-msgstr "Los ajustes de Fuzzloc se han actualizado."
+#: ../../addon/morepokes/morepokes.php:21
+msgid "patent"
+msgstr "una patente"
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:38
-msgid "Minimum offset in meters"
-msgstr "Offset mínimo en metros"
+#: ../../addon/morepokes/morepokes.php:21
+msgid "patented"
+msgstr "ha patentado a"
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:42
-msgid "Maximum offset in meters"
-msgstr "Offset máximo en metros"
+#: ../../addon/morepokes/morepokes.php:22
+msgid "hug"
+msgstr "un abrazo"
-#: ../../addon/fuzzloc/Mod_Fuzzloc.php:51
-msgid "Fuzzy Location"
-msgstr "Fuzzy Location"
+#: ../../addon/morepokes/morepokes.php:22
+msgid "hugged"
+msgstr "ha abrazado a"
-#: ../../addon/hubwall/hubwall.php:19
-msgid "Send email to all members"
-msgstr "Enviar un correo electrónico a todos los miembros"
+#: ../../addon/morepokes/morepokes.php:23
+msgid "murder"
+msgstr "un asesinato"
-#: ../../addon/hubwall/hubwall.php:33 ../../Zotlabs/Lib/Enotify.php:65
-#, php-format
-msgid "%s Administrator"
-msgstr "%s Administrador"
+#: ../../addon/morepokes/morepokes.php:23
+msgid "murdered"
+msgstr "ha asesinado a"
-#: ../../addon/hubwall/hubwall.php:50 ../../addon/mailtest/mailtest.php:50
-msgid "No recipients found."
-msgstr "No se han encontrado destinatarios."
+#: ../../addon/morepokes/morepokes.php:24
+msgid "worship"
+msgstr "una alabanza"
-#: ../../addon/hubwall/hubwall.php:73
-#, php-format
-msgid "%1$d of %2$d messages sent."
-msgstr "%1$d de %2$d mensajes enviados."
+#: ../../addon/morepokes/morepokes.php:24
+msgid "worshipped"
+msgstr "ha elogiado a"
-#: ../../addon/hubwall/hubwall.php:81
-msgid "Send email to all hub members."
-msgstr "Enviar un correo electrónico a todos los miembros del hub."
+#: ../../addon/morepokes/morepokes.php:25
+msgid "kiss"
+msgstr "un beso"
-#: ../../addon/hubwall/hubwall.php:92 ../../addon/mailtest/mailtest.php:96
-msgid "Message subject"
-msgstr "Asunto del mensaje"
+#: ../../addon/morepokes/morepokes.php:25
+msgid "kissed"
+msgstr "ha besado a"
-#: ../../addon/hubwall/hubwall.php:93
-msgid "Sender Email address"
-msgstr "Dirección de correo electrónico del remitente"
+#: ../../addon/morepokes/morepokes.php:26
+msgid "tempt"
+msgstr "una tentación"
-#: ../../addon/hubwall/hubwall.php:94
-msgid "Test mode (only send to hub administrator)"
-msgstr "Modo de prueba (enviar sólo al administrador del hub)"
+#: ../../addon/morepokes/morepokes.php:26
+msgid "tempted"
+msgstr "ha tentado a"
-#: ../../addon/cards/Widget/Cards_categories.php:74
-#: ../../addon/articles/Widget/Articles_categories.php:74
-#: ../../include/contact_widgets.php:115 ../../include/contact_widgets.php:149
-#: ../../include/taxonomy.php:420 ../../include/taxonomy.php:502
-#: ../../include/taxonomy.php:522 ../../include/taxonomy.php:543
-#: ../../Zotlabs/Module/Cdav.php:1070 ../../Zotlabs/Storage/Browser.php:293
-#: ../../Zotlabs/Storage/Browser.php:388 ../../Zotlabs/Storage/Browser.php:403
-msgid "Categories"
-msgstr "Temas"
+#: ../../addon/morepokes/morepokes.php:27
+msgid "raise eyebrows at"
+msgstr "un levantamiento de cejas"
-#: ../../addon/cards/Widget/Cards_categories.php:77
-#: ../../addon/articles/Widget/Articles_categories.php:77
-#: ../../include/contact_widgets.php:56 ../../include/contact_widgets.php:118
-#: ../../include/contact_widgets.php:152
-#: ../../Zotlabs/Widget/Appcategories.php:52 ../../Zotlabs/Widget/Filer.php:36
-msgid "Everything"
-msgstr "Todo"
+#: ../../addon/morepokes/morepokes.php:27
+msgid "raised their eyebrows at"
+msgstr "ha levantado las cejas a"
-#: ../../addon/cards/Mod_Card_edit.php:17
-#: ../../addon/cards/Mod_Card_edit.php:33
-#: ../../addon/articles/Mod_Article_edit.php:17
-#: ../../addon/articles/Mod_Article_edit.php:33
-#: ../../Zotlabs/Module/Editwebpage.php:80
-#: ../../Zotlabs/Module/Editpost.php:24 ../../Zotlabs/Module/Editblock.php:79
-#: ../../Zotlabs/Module/Editblock.php:95
-#: ../../Zotlabs/Module/Editlayout.php:79
-msgid "Item not found"
-msgstr "Elemento no encontrado"
+#: ../../addon/morepokes/morepokes.php:28
+msgid "insult"
+msgstr "un insulto"
-#: ../../addon/cards/Mod_Card_edit.php:44
-#: ../../addon/articles/Mod_Article_edit.php:44
-#: ../../Zotlabs/Module/Attach_edit.php:52
-#: ../../Zotlabs/Module/Wall_upload.php:31
-#: ../../Zotlabs/Module/Chanview.php:95 ../../Zotlabs/Module/Cal.php:31
-#: ../../Zotlabs/Module/Attach.php:22 ../../Zotlabs/Module/Page.php:75
-#: ../../Zotlabs/Module/Block.php:41
-msgid "Channel not found."
-msgstr "Canal no encontrado."
+#: ../../addon/morepokes/morepokes.php:28
+msgid "insulted"
+msgstr "ha insultado a"
-#: ../../addon/cards/Mod_Card_edit.php:129
-msgid "Edit Card"
-msgstr "Editar la ficha"
+#: ../../addon/morepokes/morepokes.php:29
+msgid "praise"
+msgstr "un elogio"
-#: ../../addon/cards/Mod_Card_edit.php:130
-#: ../../addon/articles/Mod_Article_edit.php:128
-#: ../../include/conversation.php:737 ../../include/conversation.php:797
-#: ../../Zotlabs/Module/Tokens.php:295 ../../Zotlabs/Module/Group.php:251
-#: ../../Zotlabs/Module/Oauth.php:172 ../../Zotlabs/Module/Editwebpage.php:167
-#: ../../Zotlabs/Module/Cdav.php:1055 ../../Zotlabs/Module/Cdav.php:1389
-#: ../../Zotlabs/Module/Webpages.php:254
-#: ../../Zotlabs/Module/Admin/Accounts.php:320
-#: ../../Zotlabs/Module/Admin/Channels.php:149
-#: ../../Zotlabs/Module/Admin/Profs.php:176
-#: ../../Zotlabs/Module/Permcats.php:261
-#: ../../Zotlabs/Module/Contactedit.php:667
-#: ../../Zotlabs/Module/Blocks.php:162 ../../Zotlabs/Module/Editblock.php:139
-#: ../../Zotlabs/Module/Editlayout.php:138
-#: ../../Zotlabs/Module/Photos.php:1185 ../../Zotlabs/Module/Oauth2.php:193
-#: ../../Zotlabs/Module/Thing.php:269 ../../Zotlabs/Module/Connedit.php:540
-#: ../../Zotlabs/Module/Connedit.php:749 ../../Zotlabs/Lib/Apps.php:601
-#: ../../Zotlabs/Lib/ThreadItem.php:187 ../../Zotlabs/Storage/Browser.php:384
-msgid "Delete"
-msgstr "Eliminar"
+#: ../../addon/morepokes/morepokes.php:29
+msgid "praised"
+msgstr "ha elogiado a"
-#: ../../addon/cards/cards.php:47 ../../addon/cards/cards.php:159
-#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:330
-msgid "Cards"
-msgstr "Fichas"
+#: ../../addon/morepokes/morepokes.php:30
+msgid "be dubious of"
+msgstr "una indecisión"
-#: ../../addon/cards/cards.php:50
-msgid "View Cards"
-msgstr "Ver las fichas"
+#: ../../addon/morepokes/morepokes.php:30
+msgid "was dubious of"
+msgstr "estaba dudoso de"
-#: ../../addon/cards/cards.php:81 ../../addon/articles/articles.php:83
-#: ../../include/conversation.php:849
-msgid "View in context"
-msgstr "Mostrar en su contexto"
+#: ../../addon/morepokes/morepokes.php:31
+msgid "eat"
+msgstr "una comida"
-#: ../../addon/cards/Mod_Cards.php:115
-msgid "Add Card"
-msgstr "Añadir una ficha"
+#: ../../addon/morepokes/morepokes.php:31
+msgid "ate"
+msgstr "ha comido"
-#: ../../addon/notifyadmin/notifyadmin.php:34
-msgid "New registration"
-msgstr "Nuevo registro"
+#: ../../addon/morepokes/morepokes.php:32
+msgid "giggle and fawn at"
+msgstr "una sonrisa aduladora"
-#: ../../addon/notifyadmin/notifyadmin.php:40
-#: ../../Zotlabs/Module/Invite.php:252
-#, php-format
-msgid "%s : Message delivery failed."
-msgstr "%s : Falló el envío del mensaje."
+#: ../../addon/morepokes/morepokes.php:32
+msgid "giggled and fawned at"
+msgstr "ha sonreído y adulado a"
-#: ../../addon/notifyadmin/notifyadmin.php:42
-#, php-format
-msgid "Message sent to %s. New account registration: %s"
-msgstr "Mensaje enviado a %s. Registro de una nueva cuenta: %s"
+#: ../../addon/morepokes/morepokes.php:33
+msgid "doubt"
+msgstr "una duda"
-#: ../../addon/flashcards/Mod_Flashcards.php:225
-msgid "Not allowed."
-msgstr "No permitido/a."
+#: ../../addon/morepokes/morepokes.php:33
+msgid "doubted"
+msgstr "ha dudado de"
-#: ../../addon/flashcards/Mod_Flashcards.php:261
-#: ../../include/acl_selectors.php:154 ../../Zotlabs/Module/Chat.php:239
-#: ../../Zotlabs/Module/Filestorage.php:195
-#: ../../Zotlabs/Module/Photos.php:682 ../../Zotlabs/Module/Photos.php:1053
-#: ../../Zotlabs/Module/Thing.php:321 ../../Zotlabs/Module/Thing.php:374
-msgid "Permissions"
-msgstr "Permisos"
+#: ../../addon/morepokes/morepokes.php:34
+msgid "glare"
+msgstr "una mirada furiosa"
-#: ../../addon/flashcards/Mod_Flashcards.php:268
-#: ../../Zotlabs/Module/Filestorage.php:202
-msgid "Set/edit permissions"
-msgstr "Establecer/editar los permisos"
+#: ../../addon/morepokes/morepokes.php:34
+msgid "glared at"
+msgstr "ha mirado con furia"
-#: ../../addon/flashcards/Mod_Flashcards.php:291
-#: ../../addon/flashcards/Mod_Flashcards.php:292 ../../include/items.php:3817
-#: ../../Zotlabs/Module/Filestorage.php:29
-#: ../../Zotlabs/Module/Admin/Themes.php:72
-#: ../../Zotlabs/Module/Admin/Addons.php:260
-#: ../../Zotlabs/Module/Viewsrc.php:25 ../../Zotlabs/Module/Display.php:53
-#: ../../Zotlabs/Module/Display.php:388 ../../Zotlabs/Module/Admin.php:61
-#: ../../Zotlabs/Module/Thing.php:96
-msgid "Item not found."
-msgstr "Elemento no encontrado."
+#: ../../addon/morepokes/morepokes.php:35
+msgid "fuck"
+msgstr "una mierda"
-#: ../../addon/libertree/libertree.php:43
-msgid "Post to Libertree"
-msgstr "Publicar en Libertree"
+#: ../../addon/morepokes/morepokes.php:35
+msgid "fucked"
+msgstr "ha mandado a la mierda a"
-#: ../../addon/libertree/Mod_Libertree.php:25
-msgid "Libertree Crosspost Connector Settings saved."
-msgstr "Se han guardado los ajustes del conector de publicación cruzada con Libertree."
+#: ../../addon/morepokes/morepokes.php:36
+msgid "bonk"
+msgstr "un golpe"
-#: ../../addon/libertree/Mod_Libertree.php:49
-msgid "Libertree API token"
-msgstr "Token de la API de Libertree"
+#: ../../addon/morepokes/morepokes.php:36
+msgid "bonked"
+msgstr "ha golpeado a"
-#: ../../addon/libertree/Mod_Libertree.php:53
-msgid "Libertree site URL"
-msgstr "URL del servidor de Libertree"
+#: ../../addon/morepokes/morepokes.php:37
+msgid "declare undying love for"
+msgstr "una declaración de amor eterno"
-#: ../../addon/libertree/Mod_Libertree.php:57
-msgid "Post to Libertree by default"
-msgstr "Publicar en Libertree por defecto"
+#: ../../addon/morepokes/morepokes.php:37
+msgid "declared undying love for"
+msgstr "ha declarado amor eterno a"
-#: ../../addon/libertree/Mod_Libertree.php:65
-msgid "Libertree Crosspost Connector"
-msgstr "Libertree Crosspost Connector"
+#: ../../addon/dwpost/dwpost.php:49
+msgid "Post to Dreamwidth"
+msgstr "Publicar en Dreamwidth"
-#: ../../addon/randpost/randpost.php:99
-msgid "You're welcome."
-msgstr "Bienvenido."
+#: ../../addon/dwpost/dwpost.php:134 ../../addon/dwpost/Mod_Dwpost.php:67
+#: ../../addon/wppost/Mod_Wppost.php:96 ../../addon/wppost/wppost.php:174
+#: ../../addon/wiki/Mod_Wiki.php:381 ../../addon/ljpost/ljpost.php:134
+msgid "Source"
+msgstr "Fuente"
-#: ../../addon/randpost/randpost.php:100
-msgid "Ah shucks..."
-msgstr "Ah, joder..."
+#: ../../addon/dwpost/Mod_Dwpost.php:26
+msgid "Dreamwidth Crosspost Connector Settings saved."
+msgstr "Se han guardado los ajustes del conector de publicación cruzada Dreamwidth."
-#: ../../addon/randpost/randpost.php:101
-msgid "Don't mention it."
-msgstr "No lo menciones."
+#: ../../addon/dwpost/Mod_Dwpost.php:51
+msgid "Dreamwidth username"
+msgstr "Nombre de usuario en Dreamwidth"
-#: ../../addon/randpost/randpost.php:102
-msgid "&lt;blush&gt;"
-msgstr "&lt;sonrojo&gt;"
+#: ../../addon/dwpost/Mod_Dwpost.php:55
+msgid "Dreamwidth password"
+msgstr "Contraseña en Dreamwidth"
-#: ../../addon/buglink/buglink.php:16 ../../Zotlabs/Lib/Apps.php:332
-msgid "Report Bug"
-msgstr "Informe de errores"
+#: ../../addon/dwpost/Mod_Dwpost.php:59
+msgid "Post to Dreamwidth by default"
+msgstr "Publicar en Dreamwidth de forma predeterminada"
-#: ../../addon/totp/Mod_Totp.php:32
-msgid "TOTP Two-Step Verification"
-msgstr "Verificación en dos pasos de TOTP"
+#: ../../addon/dwpost/Mod_Dwpost.php:63 ../../addon/wppost/Mod_Wppost.php:92
+#: ../../addon/ljpost/Mod_Ljpost.php:69
+msgid "Add link to original post"
+msgstr "Añadir enlace a la entrada original"
-#: ../../addon/totp/Mod_Totp.php:33
-msgid "Enter the 2-step verification generated by your authenticator app:"
-msgstr "Introduzca la verificación en 2 pasos generada por su app de autenticación: "
+#: ../../addon/dwpost/Mod_Dwpost.php:67 ../../addon/wppost/Mod_Wppost.php:96
+msgid "Link description (default:"
+msgstr "Descripción del enlace (por defecto: "
-#: ../../addon/totp/Mod_Totp.php:34
-msgid "Success!"
-msgstr "¡Éxito!"
+#: ../../addon/dwpost/Mod_Dwpost.php:75
+msgid "Dreamwidth Crosspost Connector"
+msgstr "Dreamwidth Crosspost Connector"
-#: ../../addon/totp/Mod_Totp.php:35
-msgid "Invalid code, please try again."
-msgstr "Código inválido, por favor inténtelo de nuevo."
+#: ../../addon/skeleton/Mod_Skeleton.php:38
+msgid "Some setting"
+msgstr "Algunos ajustes"
-#: ../../addon/totp/Mod_Totp.php:36
-msgid "Too many invalid codes..."
-msgstr "Demasiados códigos no válidos..."
+#: ../../addon/skeleton/Mod_Skeleton.php:38
+msgid "A setting"
+msgstr "Un ajuste"
-#: ../../addon/totp/Mod_Totp.php:37
-msgid "Verify"
-msgstr "Verficar"
+#: ../../addon/skeleton/Mod_Skeleton.php:46
+msgid "Skeleton Settings"
+msgstr "Ajustes de Skeleton"
-#: ../../addon/totp/Settings/Totp.php:92
+#: ../../addon/hzfiles/hzfiles.php:81
+msgid "Hubzilla File Storage Import"
+msgstr "Importar del depósito de ficheros de Hubzilla"
+
+#: ../../addon/hzfiles/hzfiles.php:82
+msgid "This will import all your cloud files from another server."
+msgstr "Esto importará todos sus ficheros en la nube desde otro servidor."
+
+#: ../../addon/hzfiles/hzfiles.php:83
+msgid "Hubzilla Server base URL"
+msgstr "URL base del servidor Hubzilla"
+
+#: ../../addon/hzfiles/hzfiles.php:84
+#: ../../addon/content_import/Mod_content_import.php:139
+msgid "Since modified date yyyy-mm-dd"
+msgstr "Modificado desde la fecha yyyy-mm-dd"
+
+#: ../../addon/hzfiles/hzfiles.php:85
+#: ../../addon/content_import/Mod_content_import.php:140
+msgid "Until modified date yyyy-mm-dd"
+msgstr "Modificado hasta la fecha yyyy-mm-dd"
+
+#: ../../addon/openstreetmap/openstreetmap.php:133
+msgid "View Larger"
+msgstr "Ver más grande"
+
+#: ../../addon/openstreetmap/openstreetmap.php:156
+msgid "Tile Server URL"
+msgstr "URL del servidor de mosaicos de imágenes "
+
+#: ../../addon/openstreetmap/openstreetmap.php:156
msgid ""
-"You haven't set a TOTP secret yet.\n"
-"Please click the button below to generate one and register this site\n"
-"with your preferred authenticator app."
-msgstr "Aún no ha establecido un TOTP secret.\nPor favor, haga clic en el botón de abajo para generar uno y registrar este sitio\ncon su aplicación de autenticación preferida."
+"A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" "
+"target=\"_blank\">public tile servers</a>"
+msgstr "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">servidores públicos de mosaicos de imágenes</a>"
-#: ../../addon/totp/Settings/Totp.php:95
-msgid "Your TOTP secret is"
-msgstr "Su TOTP secret es "
+#: ../../addon/openstreetmap/openstreetmap.php:157
+msgid "Nominatim (reverse geocoding) Server URL"
+msgstr "URL del servidor nominatim (geocodificación inversa)"
-#: ../../addon/totp/Settings/Totp.php:96
+#: ../../addon/openstreetmap/openstreetmap.php:157
msgid ""
-"Be sure to save it somewhere in case you lose or replace your mobile device.\n"
-"Use your mobile device to scan the QR code below to register this site\n"
-"with your preferred authenticator app."
-msgstr "Asegúrese de guardarlo en algún lugar en caso de que pierda o reemplace su dispositivo móvil.\nUtilice su dispositivo móvil para escanear el código QR a continuación para registrar este sitio\ncon su aplicación de autenticación preferida."
+"A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" "
+"target=\"_blank\">Nominatim servers</a>"
+msgstr "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" target=\"_blank\">servidores nominatim</a>"
-#: ../../addon/totp/Settings/Totp.php:101
-msgid "Test"
-msgstr "Test"
+#: ../../addon/openstreetmap/openstreetmap.php:158
+msgid "Default zoom"
+msgstr "Zoom predeterminado"
-#: ../../addon/totp/Settings/Totp.php:102
-msgid "Generate New Secret"
-msgstr "Generar un nuevo Secret"
+#: ../../addon/openstreetmap/openstreetmap.php:158
+msgid ""
+"The default zoom level. (1:world, 18:highest, also depends on tile server)"
+msgstr "El nivel de zoom predeterminado. (1: mundo, 18: el más alto, también depende del servidor del mosaico de imágenes)"
-#: ../../addon/totp/Settings/Totp.php:103
-msgid "Go"
-msgstr "Ir"
+#: ../../addon/openstreetmap/openstreetmap.php:159
+msgid "Include marker on map"
+msgstr "Incluir un marcador en el mapa"
-#: ../../addon/totp/Settings/Totp.php:104
-msgid "Enter your password"
-msgstr "Introduzca su contraseña"
+#: ../../addon/openstreetmap/openstreetmap.php:159
+msgid "Include a marker on the map."
+msgstr "Incluir un marcador en el mapa."
-#: ../../addon/totp/Settings/Totp.php:105
-msgid "enter TOTP code from your device"
-msgstr "introduzca el código TOTP desde su dispositivo"
+#: ../../addon/redred/redred.php:50
+msgid "Post to Hubzilla"
+msgstr "Publicar en Hubzilla"
-#: ../../addon/totp/Settings/Totp.php:106
-msgid "Pass!"
-msgstr "¡Pase!"
+#: ../../addon/redred/Mod_Redred.php:24
+msgid "Channel is required."
+msgstr "Se requiere un canal."
-#: ../../addon/totp/Settings/Totp.php:107
-msgid "Fail"
-msgstr "Fallo"
+#: ../../addon/redred/Mod_Redred.php:29 ../../Zotlabs/Module/Network.php:331
+msgid "Invalid channel."
+msgstr "El canal no es válido."
-#: ../../addon/totp/Settings/Totp.php:108
-msgid "Incorrect password, try again."
-msgstr "Contraseña incorrecta, inténtelo de nuevo."
+#: ../../addon/redred/Mod_Redred.php:38
+msgid "Hubzilla Crosspost Connector Settings saved."
+msgstr "Se han guardado los ajustes de Hubzilla Crosspost Connector"
-#: ../../addon/totp/Settings/Totp.php:109
-msgid "Record your new TOTP secret and rescan the QR code above."
-msgstr "Registre su nuevo TOTP secret y vuelva a escanear el código QR de arriba"
+#: ../../addon/redred/Mod_Redred.php:61
+msgid "Send public postings to Hubzilla channel by default"
+msgstr "Enviar entradas públicas al canal Hubzilla por defecto"
-#: ../../addon/totp/Settings/Totp.php:117
-msgid "TOTP Settings"
-msgstr "Ajustes de TOTP"
+#: ../../addon/redred/Mod_Redred.php:65
+msgid "Hubzilla API Path"
+msgstr "Ruta de la API de Hubzilla"
-#: ../../addon/logrot/logrot.php:36
-msgid "Logfile archive directory"
-msgstr "Directorio de los ficheros de informe"
+#: ../../addon/redred/Mod_Redred.php:65 ../../addon/rtof/Mod_Rtof.php:51
+msgid "https://{sitename}/api"
+msgstr "https://{sitename}/api"
-#: ../../addon/logrot/logrot.php:36
-msgid "Directory to store rotated logs"
-msgstr "Directorio para almacenar los informes rotados"
+#: ../../addon/redred/Mod_Redred.php:69
+msgid "Hubzilla login name"
+msgstr "Nombre de inicio de sesión en Hubzilla"
-#: ../../addon/logrot/logrot.php:37
-msgid "Logfile size in bytes before rotating"
-msgstr "Tamaño del fichero de informe en bytes antes de rotarlo"
+#: ../../addon/redred/Mod_Redred.php:73
+msgid "Hubzilla channel name"
+msgstr "Nombre del canal de Hubzilla"
-#: ../../addon/logrot/logrot.php:38
-msgid "Number of logfiles to retain"
-msgstr "Número de ficheros de informe que se deben retener"
+#: ../../addon/redred/Mod_Redred.php:77
+msgid "Hubzilla password"
+msgstr "Contraseña de Hubzilla"
-#: ../../addon/testdrive/testdrive.php:104
-#, php-format
-msgid "Your account on %s will expire in a few days."
-msgstr "Su cuenta en %s caducará en unos pocos días."
+#: ../../addon/redred/Mod_Redred.php:85
+msgid "Hubzilla Crosspost Connector"
+msgstr "Hubzilla Crosspost Connector"
-#: ../../addon/testdrive/testdrive.php:105
-msgid "Your test account is about to expire."
-msgstr "Su cuenta de prueba está a punto de expirar."
+#: ../../addon/upgrade_info/upgrade_info.php:48
+msgid "Your channel has been upgraded to $Projectname version"
+msgstr "Su canal ha sido actualizado a la versión $Projectname"
-#: ../../addon/hideaside/Mod_Hideaside.php:28
-msgid "Hide Aside App"
-msgstr "App de ocultamiento del panel lateral"
+#: ../../addon/upgrade_info/upgrade_info.php:50
+msgid "Please have a look at the"
+msgstr "Por favor, eche un vistazo a la "
-#: ../../addon/hideaside/Mod_Hideaside.php:29
-msgid "Fade out aside areas after a while when using endless scroll"
-msgstr "Se desvanecen las áreas laterales cuando se usa un scroll sin fin"
+#: ../../addon/upgrade_info/upgrade_info.php:52
+msgid "git history"
+msgstr "historial del git"
-#: ../../addon/skeleton/Mod_Skeleton.php:38
-msgid "Some setting"
-msgstr "Algunos ajustes"
+#: ../../addon/upgrade_info/upgrade_info.php:54
+msgid "change log"
+msgstr "lista de cambios"
-#: ../../addon/skeleton/Mod_Skeleton.php:38
-msgid "A setting"
-msgstr "Un ajuste"
+#: ../../addon/upgrade_info/upgrade_info.php:55
+msgid "for further info."
+msgstr "para más información."
-#: ../../addon/skeleton/Mod_Skeleton.php:46
-msgid "Skeleton Settings"
-msgstr "Ajustes de Skeleton"
+#: ../../addon/upgrade_info/upgrade_info.php:60
+msgid "Upgrade Info"
+msgstr "Información de actualización"
+
+#: ../../addon/upgrade_info/upgrade_info.php:64
+msgid "Do not show this again"
+msgstr "No mostrar esto de nuevo"
#: ../../addon/socialauth/Mod_SocialAuth.php:106
#: ../../addon/socialauth/Mod_SocialAuth.php:179
@@ -3877,56 +5434,206 @@ msgstr "Ya existe un proveedor personalizado"
msgid "Social authentication settings saved."
msgstr "Se han guardado los ajustes de la autenticación social."
-#: ../../addon/nsfw/nsfw.php:152
-msgid "Possible adult content"
-msgstr "Posible contenido para adultos"
+#: ../../addon/dirstats/dirstats.php:94
+msgid "Hubzilla Directory Stats"
+msgstr "Estadísticas de directorio de Hubzilla"
-#: ../../addon/nsfw/nsfw.php:167
-#, php-format
-msgid "%s - view"
-msgstr "ver - %s"
+#: ../../addon/dirstats/dirstats.php:95
+msgid "Total Hubs"
+msgstr "Número total de servidores"
-#: ../../addon/nsfw/Mod_Nsfw.php:22
-msgid "NSFW Settings saved."
-msgstr "Se han guardado los ajustes de NSFW."
+#: ../../addon/dirstats/dirstats.php:97
+msgid "Hubzilla Hubs"
+msgstr "Servidores (hubs) de Hubzilla"
-#: ../../addon/nsfw/Mod_Nsfw.php:42
+#: ../../addon/dirstats/dirstats.php:99
+msgid "Friendica Hubs"
+msgstr "Servidores (hubs) de Friendica"
+
+#: ../../addon/dirstats/dirstats.php:101
+msgid "Diaspora Pods"
+msgstr "Servidores (pods) de Diaspora"
+
+#: ../../addon/dirstats/dirstats.php:103
+msgid "Hubzilla Channels"
+msgstr "Canales de Hubzilla"
+
+#: ../../addon/dirstats/dirstats.php:105
+msgid "Friendica Channels"
+msgstr "Canales de Friendica"
+
+#: ../../addon/dirstats/dirstats.php:107
+msgid "Diaspora Channels"
+msgstr "Canales de Diaspora"
+
+#: ../../addon/dirstats/dirstats.php:109
+msgid "Aged 35 and above"
+msgstr "De 35 años de edad en adelante"
+
+#: ../../addon/dirstats/dirstats.php:111
+msgid "Aged 34 and under"
+msgstr "De 34 o menos años de edad"
+
+#: ../../addon/dirstats/dirstats.php:113
+msgid "Average Age"
+msgstr "Promedio de edad"
+
+#: ../../addon/dirstats/dirstats.php:115
+msgid "Known Chatrooms"
+msgstr "Salas de chat conocidas"
+
+#: ../../addon/dirstats/dirstats.php:117
+msgid "Known Tags"
+msgstr "Etiquetas conocidas"
+
+#: ../../addon/dirstats/dirstats.php:119
msgid ""
-"This app looks in posts for the words/text you specify below, and collapses "
-"any content containing those keywords so it is not displayed at "
-"inappropriate times, such as sexual innuendo that may be improper in a work "
-"setting. It is polite and recommended to tag any content containing nudity "
-"with #NSFW. This filter can also match any other word/text you specify, and"
-" can thereby be used as a general purpose content filter."
-msgstr "Esta aplicación busca en los mensajes las palabras o texto que especifique a continuación, y oculta cualquier contenido que contenga esas palabras clave, para que no se muestren en momentos inapropiados, como insinuaciones sexuales que puedan ser inapropiadas en un entorno laboral. Es cortés y recomendable etiquetar cualquier contenido que contenga desnudos con #NSFW. Este filtro también puede coincidir con cualquier otra palabra o texto que especifique y, por lo tanto, puede utilizarse como filtro de contenido de propósito general."
+"Please note Diaspora and Friendica statistics are merely those **this "
+"directory** is aware of, and not all those known in the network. This also "
+"applies to chatrooms,"
+msgstr "Tenga en cuenta que las estadísticas de Diaspora y Friendica se refieren únicamente a aquellas de las que **este directorio** es consciente, y no a todos los conocidos en la red. Esto también es aplicable a las salas de chat,"
-#: ../../addon/nsfw/Mod_Nsfw.php:47
-msgid "Comma separated list of keywords to hide"
-msgstr "Lista separada por comas de palabras clave para ocultar"
+#: ../../addon/flashcards/Mod_Flashcards.php:52
+#: ../../addon/wiki/Mod_Wiki.php:36 ../../addon/cart/cart.php:1410
+msgid "Profile Unavailable."
+msgstr "Perfil no disponible"
-#: ../../addon/nsfw/Mod_Nsfw.php:47
-msgid "Word, /regular-expression/, lang=xx, lang!=xx"
-msgstr "Palabra, /expresión regular/, lang=xx, lang!=xx"
+#: ../../addon/flashcards/Mod_Flashcards.php:225
+msgid "Not allowed."
+msgstr "No permitido/a."
-#: ../../addon/nsfw/Mod_Nsfw.php:56
-msgid "NSFW"
-msgstr "NSFW"
+#: ../../addon/flashcards/Mod_Flashcards.php:268
+#: ../../Zotlabs/Module/Filestorage.php:202
+msgid "Set/edit permissions"
+msgstr "Establecer/editar los permisos"
-#: ../../addon/upload_limits/upload_limits.php:25
-msgid "Show Upload Limits"
-msgstr "Mostrar los límites de subida"
+#: ../../addon/totp/Mod_Totp.php:32
+msgid "TOTP Two-Step Verification"
+msgstr "Verificación en dos pasos de TOTP"
-#: ../../addon/upload_limits/upload_limits.php:27
-msgid "Hubzilla configured maximum size: "
-msgstr "Tamaño máximo configurado por Hubzilla: "
+#: ../../addon/totp/Mod_Totp.php:33
+msgid "Enter the 2-step verification generated by your authenticator app:"
+msgstr "Introduzca la verificación en 2 pasos generada por su app de autenticación: "
-#: ../../addon/upload_limits/upload_limits.php:28
-msgid "PHP upload_max_filesize: "
-msgstr "PHP upload_max_filesize: "
+#: ../../addon/totp/Mod_Totp.php:34
+msgid "Success!"
+msgstr "¡Éxito!"
-#: ../../addon/upload_limits/upload_limits.php:29
-msgid "PHP post_max_size (must be larger than upload_max_filesize): "
-msgstr "PHP post_max_size (debe ser mayor que upload_max_filesize): "
+#: ../../addon/totp/Mod_Totp.php:35
+msgid "Invalid code, please try again."
+msgstr "Código inválido, por favor inténtelo de nuevo."
+
+#: ../../addon/totp/Mod_Totp.php:36
+msgid "Too many invalid codes..."
+msgstr "Demasiados códigos no válidos..."
+
+#: ../../addon/totp/Mod_Totp.php:37
+msgid "Verify"
+msgstr "Verficar"
+
+#: ../../addon/totp/Settings/Totp.php:92
+msgid ""
+"You haven't set a TOTP secret yet.\n"
+"Please click the button below to generate one and register this site\n"
+"with your preferred authenticator app."
+msgstr "Aún no ha establecido un TOTP secret.\nPor favor, haga clic en el botón de abajo para generar uno y registrar este sitio\ncon su aplicación de autenticación preferida."
+
+#: ../../addon/totp/Settings/Totp.php:95
+msgid "Your TOTP secret is"
+msgstr "Su TOTP secret es "
+
+#: ../../addon/totp/Settings/Totp.php:96
+msgid ""
+"Be sure to save it somewhere in case you lose or replace your mobile device.\n"
+"Use your mobile device to scan the QR code below to register this site\n"
+"with your preferred authenticator app."
+msgstr "Asegúrese de guardarlo en algún lugar en caso de que pierda o reemplace su dispositivo móvil.\nUtilice su dispositivo móvil para escanear el código QR a continuación para registrar este sitio\ncon su aplicación de autenticación preferida."
+
+#: ../../addon/totp/Settings/Totp.php:101
+msgid "Test"
+msgstr "Test"
+
+#: ../../addon/totp/Settings/Totp.php:102
+msgid "Generate New Secret"
+msgstr "Generar un nuevo Secret"
+
+#: ../../addon/totp/Settings/Totp.php:103
+msgid "Go"
+msgstr "Ir"
+
+#: ../../addon/totp/Settings/Totp.php:104
+msgid "Enter your password"
+msgstr "Introduzca su contraseña"
+
+#: ../../addon/totp/Settings/Totp.php:105
+msgid "enter TOTP code from your device"
+msgstr "introduzca el código TOTP desde su dispositivo"
+
+#: ../../addon/totp/Settings/Totp.php:106
+msgid "Pass!"
+msgstr "¡Pase!"
+
+#: ../../addon/totp/Settings/Totp.php:107
+msgid "Fail"
+msgstr "Fallo"
+
+#: ../../addon/totp/Settings/Totp.php:108
+msgid "Incorrect password, try again."
+msgstr "Contraseña incorrecta, inténtelo de nuevo."
+
+#: ../../addon/totp/Settings/Totp.php:109
+msgid "Record your new TOTP secret and rescan the QR code above."
+msgstr "Registre su nuevo TOTP secret y vuelva a escanear el código QR de arriba"
+
+#: ../../addon/totp/Settings/Totp.php:117
+msgid "TOTP Settings"
+msgstr "Ajustes de TOTP"
+
+#: ../../addon/opensearch/opensearch.php:26
+#, php-format
+msgctxt "opensearch"
+msgid "Search %1$s (%2$s)"
+msgstr "Buscar %1$s (%2$s)"
+
+#: ../../addon/opensearch/opensearch.php:28
+msgctxt "opensearch"
+msgid "$Projectname"
+msgstr "$Projectname"
+
+#: ../../addon/opensearch/opensearch.php:42 ../../Zotlabs/Lib/Enotify.php:66
+#: ../../Zotlabs/Module/Home.php:87 ../../Zotlabs/Module/Home.php:95
+#: ../../Zotlabs/Module/Invite.php:238 ../../Zotlabs/Module/Invite.php:507
+#: ../../Zotlabs/Module/Invite.php:521
+msgid "$Projectname"
+msgstr "$Projectname"
+
+#: ../../addon/opensearch/opensearch.php:43
+msgid "Search $Projectname"
+msgstr "Buscar $Projectname"
+
+#: ../../addon/irc/Mod_Irc.php:23 ../../addon/irc/irc.php:41
+msgid "Popular Channels"
+msgstr "Canales populares"
+
+#: ../../addon/irc/irc.php:37
+msgid "Channels to auto connect"
+msgstr "Canales para conexión automática"
+
+#: ../../addon/irc/irc.php:37 ../../addon/irc/irc.php:41
+msgid "Comma separated list"
+msgstr "Lista separada por comas"
+
+#: ../../addon/irc/irc.php:45
+msgid "IRC Settings"
+msgstr "Ajustes de IRC"
+
+#: ../../addon/irc/irc.php:54
+msgid "IRC settings saved."
+msgstr "Se han guardado los ajustes de IRC."
+
+#: ../../addon/irc/irc.php:58
+msgid "IRC Chatroom"
+msgstr "Sala de chat IRC"
#: ../../addon/tictac/tictac.php:21
msgid "Three Dimensional Tic-Tac-Toe"
@@ -3982,60 +5689,81 @@ msgstr "¡El juego del \"gato\"!"
msgid "I won!"
msgstr "¡He ganado yo!"
-#: ../../addon/mailtest/mailtest.php:19
-msgid "Send test email"
-msgstr "Enviar un correo electrónico de prueba"
+#: ../../addon/wppost/Mod_Wppost.php:30
+msgid "Wordpress Settings saved."
+msgstr "Se han guardado los ajustes de WordPress."
-#: ../../addon/mailtest/mailtest.php:66
-msgid "Mail sent."
-msgstr "El correo electrónico ha sido enviado."
+#: ../../addon/wppost/Mod_Wppost.php:67
+msgid "WordPress username"
+msgstr "Nombre de usuario de WordPress"
-#: ../../addon/mailtest/mailtest.php:68
-msgid "Sending of mail failed."
-msgstr "No se pudo enviar el correo."
+#: ../../addon/wppost/Mod_Wppost.php:71
+msgid "WordPress password"
+msgstr "Contraseña de WordPress"
-#: ../../addon/mailtest/mailtest.php:77
-msgid "Mail Test"
-msgstr "Prueba de correo"
+#: ../../addon/wppost/Mod_Wppost.php:75
+msgid "WordPress API URL"
+msgstr "URL de la API de WordPress"
-#: ../../addon/ljpost/Mod_Ljpost.php:53
-msgid "Livejournal username"
-msgstr "Nombre de usuario en Livejournal"
+#: ../../addon/wppost/Mod_Wppost.php:76
+msgid "Typically https://your-blog.tld/xmlrpc.php"
+msgstr "Habitualmente https://your-blog.tld/xmlrpc.php"
-#: ../../addon/ljpost/Mod_Ljpost.php:57
-msgid "Livejournal password"
-msgstr "Contraseña en Livejournal"
+#: ../../addon/wppost/Mod_Wppost.php:79
+msgid "WordPress blogid"
+msgstr "Blog de WordPress"
-#: ../../addon/ljpost/Mod_Ljpost.php:61
-msgid "Post to Livejournal by default"
-msgstr "Publicar en Livejournal por defecto"
+#: ../../addon/wppost/Mod_Wppost.php:80
+msgid "For multi-user sites such as wordpress.com, otherwise leave blank"
+msgstr "Para sitios multiusuario como wordpress.com, de lo contrario, dejar en blanco"
-#: ../../addon/ljpost/Mod_Ljpost.php:65
-msgid "Send wall-to-wall posts to Livejournal"
-msgstr "Enviar entradas de Muro-Muro a Livejournal"
+#: ../../addon/wppost/Mod_Wppost.php:84
+msgid "Post to WordPress by default"
+msgstr "Publicar en WordPress por defecto"
-#: ../../addon/ljpost/Mod_Ljpost.php:77
-msgid "Livejournal Crosspost Connector"
-msgstr "Livejournal Crosspost Connector"
+#: ../../addon/wppost/Mod_Wppost.php:88
+msgid "Forward comments (requires hubzilla_wp plugin)"
+msgstr "Reenviar comentarios (requerido por el plugin hubzilla_wp)"
-#: ../../addon/ljpost/ljpost.php:49
-msgid "Post to Livejournal"
-msgstr "Publicar en Livejournal"
+#: ../../addon/wppost/Mod_Wppost.php:104
+msgid "Wordpress Post"
+msgstr "Publicar en Wordpress"
-#: ../../addon/ljpost/ljpost.php:127
-msgid "Posted by"
-msgstr "Publicado por "
+#: ../../addon/wppost/wppost.php:47
+msgid "Post to WordPress"
+msgstr "Publicar en WordPress"
-#: ../../addon/mdpost/mdpost.php:42
-msgid "Use markdown for editing posts"
-msgstr "Usar markdown para editar las entradas"
+#: ../../addon/articles/Mod_Article_edit.php:17
+#: ../../addon/articles/Mod_Article_edit.php:33
+#: ../../addon/cards/Mod_Card_edit.php:17
+#: ../../addon/cards/Mod_Card_edit.php:33
+#: ../../Zotlabs/Module/Editlayout.php:79
+#: ../../Zotlabs/Module/Editblock.php:79 ../../Zotlabs/Module/Editblock.php:95
+#: ../../Zotlabs/Module/Editpost.php:24
+#: ../../Zotlabs/Module/Editwebpage.php:80
+msgid "Item not found"
+msgstr "Elemento no encontrado"
+
+#: ../../addon/articles/Mod_Article_edit.php:44
+#: ../../addon/cards/Mod_Card_edit.php:44 ../../Zotlabs/Module/Page.php:75
+#: ../../Zotlabs/Module/Block.php:41 ../../Zotlabs/Module/Cal.php:31
+#: ../../Zotlabs/Module/Attach_edit.php:52
+#: ../../Zotlabs/Module/Wall_upload.php:31
+#: ../../Zotlabs/Module/Chanview.php:95 ../../Zotlabs/Module/Attach.php:22
+msgid "Channel not found."
+msgstr "Canal no encontrado."
#: ../../addon/articles/Mod_Article_edit.php:127
msgid "Edit Article"
msgstr "Editar el artículo"
+#: ../../addon/articles/Mod_Articles.php:119
+msgid "Add Article"
+msgstr "Añadir un artículo"
+
+#: ../../addon/articles/Mod_Articles.php:228
#: ../../addon/articles/articles.php:48 ../../addon/articles/articles.php:160
-#: ../../addon/articles/Mod_Articles.php:228 ../../Zotlabs/Lib/Apps.php:329
+#: ../../Zotlabs/Lib/Apps.php:330
msgid "Articles"
msgstr "Artículos"
@@ -4043,4125 +5771,3874 @@ msgstr "Artículos"
msgid "View Articles"
msgstr "Ver los artículos"
-#: ../../addon/articles/Mod_Articles.php:119
-msgid "Add Article"
-msgstr "Añadir un artículo"
+#: ../../addon/pumpio/pumpio.php:152
+msgid "You are now authenticated to pumpio."
+msgstr "Ahora está autenticado en pump.io."
-#: ../../addon/hzfiles/hzfiles.php:81
-msgid "Hubzilla File Storage Import"
-msgstr "Importar del depósito de ficheros de Hubzilla"
+#: ../../addon/pumpio/pumpio.php:153
+msgid "return to the featured settings page"
+msgstr "Volver a la página de configuración destacada"
-#: ../../addon/hzfiles/hzfiles.php:82
-msgid "This will import all your cloud files from another server."
-msgstr "Esto importará todos sus ficheros en la nube desde otro servidor."
+#: ../../addon/pumpio/pumpio.php:168
+msgid "Post to Pump.io"
+msgstr "Publicar en Pump.io"
-#: ../../addon/hzfiles/hzfiles.php:83
-msgid "Hubzilla Server base URL"
-msgstr "URL base del servidor Hubzilla"
+#: ../../addon/pumpio/Mod_Pumpio.php:40
+msgid "Pump.io Settings saved."
+msgstr "Se han guardado los ajustes de Pump.io"
-#: ../../addon/authchoose/Mod_Authchoose.php:30
-msgid ""
-"Allow magic authentication only to websites of your immediate connections"
-msgstr "Permitir la autenticación mágica sólo a los sitios web de sus conexiones próximas"
+#: ../../addon/pumpio/Mod_Pumpio.php:71
+msgid "Pump.io servername"
+msgstr "Nombre del servidor de Pump.io"
-#: ../../addon/authchoose/Mod_Authchoose.php:36
-msgid "Authchoose"
-msgstr "Autoseleccionar"
+#: ../../addon/pumpio/Mod_Pumpio.php:71
+msgid "Without \"http://\" or \"https://\""
+msgstr "Sin \"http://\" or \"https://\""
-#: ../../addon/pageheader/Mod_Pageheader.php:22
-msgid "pageheader Settings saved."
-msgstr "Se han guardado los ajustes del encabezado de página."
+#: ../../addon/pumpio/Mod_Pumpio.php:75
+msgid "Pump.io username"
+msgstr "Nombre de usuario en Pump.io"
-#: ../../addon/pageheader/Mod_Pageheader.php:41
-msgid "Message to display on every page on this server"
-msgstr "Mensaje para mostrar en todas las páginas de este servidor"
+#: ../../addon/pumpio/Mod_Pumpio.php:75
+msgid "Without the servername"
+msgstr "Sin el nombre del servidor"
-#: ../../addon/pageheader/Mod_Pageheader.php:49
-msgid "Page Header"
-msgstr "Page Header"
+#: ../../addon/pumpio/Mod_Pumpio.php:86
+msgid "You are not authenticated to pumpio"
+msgstr "No está autenticado en pump.io"
-#: ../../addon/irc/Mod_Irc.php:23 ../../addon/irc/irc.php:41
-msgid "Popular Channels"
-msgstr "Canales populares"
+#: ../../addon/pumpio/Mod_Pumpio.php:88
+msgid "(Re-)Authenticate your pump.io connection"
+msgstr "(Re-)Autenticar su conexión en pump.io"
-#: ../../addon/irc/irc.php:37
-msgid "Channels to auto connect"
-msgstr "Canales para conexión automática"
+#: ../../addon/pumpio/Mod_Pumpio.php:92
+msgid "Post to pump.io by default"
+msgstr "Publicar por defecto en pump.io"
-#: ../../addon/irc/irc.php:37 ../../addon/irc/irc.php:41
-msgid "Comma separated list"
-msgstr "Lista separada por comas"
+#: ../../addon/pumpio/Mod_Pumpio.php:96
+msgid "Should posts be public"
+msgstr "¿Las entradas deben ser públicas?"
-#: ../../addon/irc/irc.php:45
-msgid "IRC Settings"
-msgstr "Ajustes de IRC"
+#: ../../addon/pumpio/Mod_Pumpio.php:100
+msgid "Mirror all public posts"
+msgstr "Reflejar todos los mensajes públicos"
-#: ../../addon/irc/irc.php:54
-msgid "IRC settings saved."
-msgstr "Se han guardado los ajustes de IRC."
+#: ../../addon/pumpio/Mod_Pumpio.php:110
+msgid "Pump.io Crosspost Connector"
+msgstr "Pump.io Crosspost Connector"
-#: ../../addon/irc/irc.php:58
-msgid "IRC Chatroom"
-msgstr "Sala de chat IRC"
+#: ../../addon/ijpost/ijpost.php:44
+msgid "Post to Insane Journal"
+msgstr "Publicar en Insane Journal"
-#: ../../addon/xmpp/xmpp.php:44
-msgid "Jabber BOSH host"
-msgstr "BOSH de Jabber"
+#: ../../addon/ijpost/Mod_Ijpost.php:23
+msgid "Insane Journal Crosspost Connector Settings saved."
+msgstr "Se han guardado los ajustes del Conector de publicación cruzada de InsaneJournal."
-#: ../../addon/xmpp/xmpp.php:45
-msgid "Use central userbase"
-msgstr "Usar la base de usuarios central"
+#: ../../addon/ijpost/Mod_Ijpost.php:35
+msgid "Insane Journal Crosspost Connector App"
+msgstr "App Ajustes del Conector de publicación cruzada de InsaneJournal"
-#: ../../addon/xmpp/xmpp.php:45
-msgid ""
-"If enabled, members will automatically login to an ejabberd server that has "
-"to be installed on this machine with synchronized credentials via the "
-"\"auth_ejabberd.php\" script."
-msgstr "Si está habilitado, los miembros se conectarán automáticamente a un servidor ejabberd que debe instalarse en esta máquina con credenciales sincronizadas a través del script \"auth ejabberd.php\"."
+#: ../../addon/ijpost/Mod_Ijpost.php:36
+msgid "Relay public postings to Insane Journal"
+msgstr "Retransmisión de entradas públicas a Insane Journal"
-#: ../../addon/xmpp/Mod_Xmpp.php:23
-msgid "XMPP settings updated."
-msgstr "Se han actualizado los ajustes de XMPP."
+#: ../../addon/ijpost/Mod_Ijpost.php:53
+msgid "InsaneJournal username"
+msgstr "Nombre de usuario en InsaneJournal"
-#: ../../addon/xmpp/Mod_Xmpp.php:35
-msgid "XMPP App"
-msgstr "App XMPP"
+#: ../../addon/ijpost/Mod_Ijpost.php:57
+msgid "InsaneJournal password"
+msgstr "Contraseña en InsaneJournal"
-#: ../../addon/xmpp/Mod_Xmpp.php:36
-msgid "Embedded XMPP (Jabber) client"
-msgstr "Cliente XMPP (Jabber) integrado"
+#: ../../addon/ijpost/Mod_Ijpost.php:61
+msgid "Post to InsaneJournal by default"
+msgstr "Publicar por defecto en InsaneJournal"
-#: ../../addon/xmpp/Mod_Xmpp.php:52
-msgid "Individual credentials"
-msgstr "Credenciales individuales"
+#: ../../addon/ijpost/Mod_Ijpost.php:69
+msgid "Insane Journal Crosspost Connector"
+msgstr "Conector de publicación cruzada de InsaneJournal"
-#: ../../addon/xmpp/Mod_Xmpp.php:58
-msgid "Jabber BOSH server"
-msgstr "Servidor BOSH de Jabber"
+#: ../../addon/mailtest/mailtest.php:19
+msgid "Send test email"
+msgstr "Enviar un correo electrónico de prueba"
-#: ../../addon/xmpp/Mod_Xmpp.php:67
-msgid "XMPP Settings"
-msgstr "Ajustes de XMPP"
+#: ../../addon/mailtest/mailtest.php:66
+msgid "Mail sent."
+msgstr "El correo electrónico ha sido enviado."
-#: ../../include/text.php:546
-msgid "prev"
-msgstr "anterior"
+#: ../../addon/mailtest/mailtest.php:68
+msgid "Sending of mail failed."
+msgstr "No se pudo enviar el correo."
-#: ../../include/text.php:548
-msgid "first"
-msgstr "primera"
+#: ../../addon/mailtest/mailtest.php:77
+msgid "Mail Test"
+msgstr "Prueba de correo"
-#: ../../include/text.php:577
-msgid "last"
-msgstr "última"
+#: ../../addon/logrot/logrot.php:36
+msgid "Logfile archive directory"
+msgstr "Directorio de los ficheros de informe"
-#: ../../include/text.php:580
-msgid "next"
-msgstr "próxima"
+#: ../../addon/logrot/logrot.php:36
+msgid "Directory to store rotated logs"
+msgstr "Directorio para almacenar los informes rotados"
-#: ../../include/text.php:598
-msgid "older"
-msgstr "más antiguas"
+#: ../../addon/logrot/logrot.php:37
+msgid "Logfile size in bytes before rotating"
+msgstr "Tamaño del fichero de informe en bytes antes de rotarlo"
-#: ../../include/text.php:600
-msgid "newer"
-msgstr "más recientes"
+#: ../../addon/logrot/logrot.php:38
+msgid "Number of logfiles to retain"
+msgstr "Número de ficheros de informe que se deben retener"
-#: ../../include/text.php:1055 ../../include/features.php:133
-#: ../../Zotlabs/Module/Connections.php:390 ../../Zotlabs/Lib/Apps.php:337
-msgid "Connections"
-msgstr "Conexiones"
+#: ../../addon/superblock/superblock.php:355
+msgid "Block Completely"
+msgstr "Bloquear completamente"
-#: ../../include/text.php:1063 ../../Zotlabs/Module/Viewconnections.php:80
-#: ../../Zotlabs/Module/Connections.php:297
-msgid "Accepts"
-msgstr "Se acepta"
+#: ../../addon/superblock/Mod_Superblock.php:62
+msgid "superblock settings updated"
+msgstr "se han actualizado los ajustes de superblock"
-#: ../../include/text.php:1066 ../../Zotlabs/Module/Viewconnections.php:83
-#: ../../Zotlabs/Module/Connections.php:300
-msgid "Comments"
-msgstr "Comentarios"
+#: ../../addon/superblock/Mod_Superblock.php:86
+msgid "Currently blocked"
+msgstr "Actualmente bloqueado"
-#: ../../include/text.php:1071 ../../Zotlabs/Module/Viewconnections.php:88
-#: ../../Zotlabs/Module/Connections.php:305
-msgid "Stream items"
-msgstr "Elementos del stream"
+#: ../../addon/superblock/Mod_Superblock.php:88
+msgid "No channels currently blocked"
+msgstr "No hay canales bloqueados actualmente"
-#: ../../include/text.php:1076 ../../Zotlabs/Module/Viewconnections.php:93
-#: ../../Zotlabs/Module/Connections.php:310
-msgid "Wall posts"
-msgstr "Entradas del Muro"
+#: ../../addon/superblock/Mod_Superblock.php:90
+#: ../../Zotlabs/Module/Cover_photo.php:424
+#: ../../Zotlabs/Module/Admin/Addons.php:462
+#: ../../Zotlabs/Module/Tagrm.php:137 ../../Zotlabs/Module/Photos.php:991
+msgid "Remove"
+msgstr "Eliminar"
-#: ../../include/text.php:1080 ../../Zotlabs/Module/Viewconnections.php:97
-#: ../../Zotlabs/Module/Connections.php:314
-msgid "Nothing"
-msgstr "Nada"
+#: ../../addon/msgfooter/msgfooter.php:47
+msgid "text to include in all outgoing posts from this site"
+msgstr "texto a incluir en todos los mensajes salientes de este sitio"
-#: ../../include/text.php:1093
-#, php-format
-msgid "View all %s connections"
-msgstr "Ver todas las %s conexiones"
+#: ../../addon/nsfw/nsfw.php:153
+msgid "Possible adult content"
+msgstr "Posible contenido para adultos"
-#: ../../include/text.php:1156
+#: ../../addon/nsfw/nsfw.php:168
#, php-format
-msgid "Network: %s"
-msgstr "Red %s"
-
-#: ../../include/text.php:1167 ../../include/text.php:1179
-#: ../../include/nav.php:193 ../../include/acl_selectors.php:149
-#: ../../Zotlabs/Widget/Sitesearch.php:37
-#: ../../Zotlabs/Widget/Activity_filter.php:210
-#: ../../Zotlabs/Module/Search.php:46 ../../Zotlabs/Module/Connections.php:394
-#: ../../Zotlabs/Lib/Apps.php:357
-msgid "Search"
-msgstr "Buscar"
-
-#: ../../include/text.php:1259 ../../include/text.php:1263
-msgid "poke"
-msgstr "un toque"
-
-#: ../../include/text.php:1259 ../../include/text.php:1263
-#: ../../include/conversation.php:277
-msgid "poked"
-msgstr "ha dado un toque a"
-
-#: ../../include/text.php:1264
-msgid "ping"
-msgstr "un \"ping\""
+msgid "%s - view"
+msgstr "ver - %s"
-#: ../../include/text.php:1264
-msgid "pinged"
-msgstr "ha enviado un \"ping\" a"
+#: ../../addon/nsfw/Mod_Nsfw.php:22
+msgid "NSFW Settings saved."
+msgstr "Se han guardado los ajustes de NSFW."
-#: ../../include/text.php:1265
-msgid "prod"
-msgstr "una incitación "
+#: ../../addon/nsfw/Mod_Nsfw.php:42
+msgid ""
+"This app looks in posts for the words/text you specify below, and collapses "
+"any content containing those keywords so it is not displayed at "
+"inappropriate times, such as sexual innuendo that may be improper in a work "
+"setting. It is polite and recommended to tag any content containing nudity "
+"with #NSFW. This filter can also match any other word/text you specify, and"
+" can thereby be used as a general purpose content filter."
+msgstr "Esta aplicación busca en los mensajes las palabras o texto que especifique a continuación, y oculta cualquier contenido que contenga esas palabras clave, para que no se muestren en momentos inapropiados, como insinuaciones sexuales que puedan ser inapropiadas en un entorno laboral. Es cortés y recomendable etiquetar cualquier contenido que contenga desnudos con #NSFW. Este filtro también puede coincidir con cualquier otra palabra o texto que especifique y, por lo tanto, puede utilizarse como filtro de contenido de propósito general."
-#: ../../include/text.php:1265
-msgid "prodded"
-msgstr "ha incitado a "
+#: ../../addon/nsfw/Mod_Nsfw.php:47
+msgid "Comma separated list of keywords to hide"
+msgstr "Lista separada por comas de palabras clave para ocultar"
-#: ../../include/text.php:1266
-msgid "slap"
-msgstr "una bofetada "
+#: ../../addon/nsfw/Mod_Nsfw.php:47
+msgid "Word, /regular-expression/, lang=xx, lang!=xx"
+msgstr "Palabra, /expresión regular/, lang=xx, lang!=xx"
-#: ../../include/text.php:1266
-msgid "slapped"
-msgstr "ha abofeteado a "
+#: ../../addon/nsfw/Mod_Nsfw.php:56
+msgid "NSFW"
+msgstr "NSFW"
-#: ../../include/text.php:1267
-msgid "finger"
-msgstr "un \"finger\" "
+#: ../../addon/cards/cards.php:48 ../../addon/cards/cards.php:160
+#: ../../addon/cards/Mod_Cards.php:209 ../../Zotlabs/Lib/Apps.php:331
+msgid "Cards"
+msgstr "Fichas"
-#: ../../include/text.php:1267
-msgid "fingered"
-msgstr "envió un \"finger\" a"
+#: ../../addon/cards/cards.php:51
+msgid "View Cards"
+msgstr "Ver las fichas"
-#: ../../include/text.php:1268
-msgid "rebuff"
-msgstr "un reproche"
+#: ../../addon/cards/Mod_Cards.php:115
+msgid "Add Card"
+msgstr "Añadir una ficha"
-#: ../../include/text.php:1268
-msgid "rebuffed"
-msgstr "ha hecho un reproche a "
+#: ../../addon/cards/Mod_Card_edit.php:129
+msgid "Edit Card"
+msgstr "Editar la ficha"
-#: ../../include/text.php:1291
-msgid "happy"
-msgstr "feliz "
+#: ../../addon/gallery/gallery.php:43 ../../addon/gallery/Mod_Gallery.php:134
+msgid "Gallery"
+msgstr "Galería"
-#: ../../include/text.php:1292
-msgid "sad"
-msgstr "triste "
+#: ../../addon/gallery/gallery.php:46
+msgid "Photo Gallery"
+msgstr "Galería de fotos"
-#: ../../include/text.php:1293
-msgid "mellow"
-msgstr "tranquilo/a"
+#: ../../addon/wiki/Mod_Wiki.php:81
+#: ../../addon/cart/submodules/paypalbutton.php:456
+#: ../../addon/cart/submodules/paypalbuttonV2.php:478
+#: ../../addon/cart/manual_payments.php:93 ../../addon/cart/cart.php:1558
+#: ../../addon/cart/myshop.php:37
+msgid "Invalid channel"
+msgstr "Canal no válido"
-#: ../../include/text.php:1294
-msgid "tired"
-msgstr "cansado/a "
+#: ../../addon/wiki/Mod_Wiki.php:136
+msgid "Error retrieving wiki"
+msgstr "Error al recuperar el wiki"
-#: ../../include/text.php:1295
-msgid "perky"
-msgstr "vivaz"
+#: ../../addon/wiki/Mod_Wiki.php:143
+msgid "Error creating zip file export folder"
+msgstr "Error al crear el fichero comprimido zip de la carpeta a exportar"
-#: ../../include/text.php:1296
-msgid "angry"
-msgstr "enfadado/a"
+#: ../../addon/wiki/Mod_Wiki.php:194
+msgid "Error downloading wiki: "
+msgstr "Error al descargar el wiki: "
-#: ../../include/text.php:1297
-msgid "stupefied"
-msgstr "asombrado/a"
+#: ../../addon/wiki/Mod_Wiki.php:215 ../../Zotlabs/Storage/Browser.php:407
+msgid "Download"
+msgstr "Descargar"
-#: ../../include/text.php:1298
-msgid "puzzled"
-msgstr "perplejo/a"
+#: ../../addon/wiki/Mod_Wiki.php:216 ../../addon/wiki/Mod_Wiki.php:406
+#: ../../Zotlabs/Module/Layouts.php:196 ../../Zotlabs/Module/Blocks.php:164
+#: ../../Zotlabs/Module/Webpages.php:256 ../../Zotlabs/Module/Pubsites.php:62
+msgid "View"
+msgstr "Ver"
-#: ../../include/text.php:1299
-msgid "interested"
-msgstr "interesado/a"
+#: ../../addon/wiki/Mod_Wiki.php:217 ../../Zotlabs/Module/Profiles.php:853
+#: ../../Zotlabs/Module/Manage.php:137
+msgid "Create New"
+msgstr "Crear"
-#: ../../include/text.php:1300
-msgid "bitter"
-msgstr "amargado/a"
+#: ../../addon/wiki/Mod_Wiki.php:219
+msgid "Wiki name"
+msgstr "Nombre del wiki"
-#: ../../include/text.php:1301
-msgid "cheerful"
-msgstr "alegre"
+#: ../../addon/wiki/Mod_Wiki.php:220
+msgid "Content type"
+msgstr "Tipo de contenido"
-#: ../../include/text.php:1302
-msgid "alive"
-msgstr "animado/a"
+#: ../../addon/wiki/Mod_Wiki.php:222 ../../Zotlabs/Storage/Browser.php:381
+msgid "Type"
+msgstr "Tipo"
-#: ../../include/text.php:1303
-msgid "annoyed"
-msgstr "molesto/a"
+#: ../../addon/wiki/Mod_Wiki.php:223
+msgid "Any&nbsp;type"
+msgstr "Cualquier&nbsp;tipo"
-#: ../../include/text.php:1304
-msgid "anxious"
-msgstr "ansioso/a"
+#: ../../addon/wiki/Mod_Wiki.php:230
+msgid "Lock content type"
+msgstr "Tipo de contenido bloqueado"
-#: ../../include/text.php:1305
-msgid "cranky"
-msgstr "de mal humor"
+#: ../../addon/wiki/Mod_Wiki.php:231
+msgid "Create a status post for this wiki"
+msgstr "Crear un mensaje de estado para este wiki"
-#: ../../include/text.php:1306
-msgid "disturbed"
-msgstr "perturbado/a"
+#: ../../addon/wiki/Mod_Wiki.php:232
+msgid "Edit Wiki Name"
+msgstr "Editar el nombre del wiki"
-#: ../../include/text.php:1307
-msgid "frustrated"
-msgstr "frustrado/a"
+#: ../../addon/wiki/Mod_Wiki.php:277
+msgid "Wiki not found"
+msgstr "Wiki no encontrado"
-#: ../../include/text.php:1308
-msgid "depressed"
-msgstr "deprimido/a"
+#: ../../addon/wiki/Mod_Wiki.php:303
+msgid "Rename page"
+msgstr "Renombrar la página"
-#: ../../include/text.php:1309
-msgid "motivated"
-msgstr "motivado/a"
+#: ../../addon/wiki/Mod_Wiki.php:318
+msgid "Error retrieving page content"
+msgstr "Error al recuperar el contenido de la página"
-#: ../../include/text.php:1310
-msgid "relaxed"
-msgstr "relajado/a"
+#: ../../addon/wiki/Mod_Wiki.php:326 ../../addon/wiki/Mod_Wiki.php:328
+msgid "New page"
+msgstr "Nueva página"
-#: ../../include/text.php:1311
-msgid "surprised"
-msgstr "sorprendido/a"
+#: ../../addon/wiki/Mod_Wiki.php:363
+msgid "Revision Comparison"
+msgstr "Comparación de revisiones"
-#: ../../include/text.php:1499 ../../include/js_strings.php:100
-msgid "Monday"
-msgstr "lunes"
+#: ../../addon/wiki/Mod_Wiki.php:364
+#: ../../addon/wiki/Lib/NativeWikiPage.php:591
+#: ../../addon/wiki/Widget/Wiki_page_history.php:31
+msgid "Revert"
+msgstr "Revertir"
-#: ../../include/text.php:1499 ../../include/js_strings.php:101
-msgid "Tuesday"
-msgstr "martes"
+#: ../../addon/wiki/Mod_Wiki.php:371
+msgid "Short description of your changes (optional)"
+msgstr "Breve descripción de sus cambios (opcional)"
-#: ../../include/text.php:1499 ../../include/js_strings.php:102
-msgid "Wednesday"
-msgstr "miércoles"
+#: ../../addon/wiki/Mod_Wiki.php:391
+msgid "New page name"
+msgstr "Nombre de la nueva página"
-#: ../../include/text.php:1499 ../../include/js_strings.php:103
-msgid "Thursday"
-msgstr "jueves"
+#: ../../addon/wiki/Mod_Wiki.php:396
+msgid "Embed image from photo albums"
+msgstr "Incluir una imagen de los álbumes de fotos"
-#: ../../include/text.php:1499 ../../include/js_strings.php:104
-msgid "Friday"
-msgstr "viernes"
+#: ../../addon/wiki/Mod_Wiki.php:402 ../../Zotlabs/Module/Cover_photo.php:432
+#: ../../Zotlabs/Module/Profile_photo.php:557
+msgid "Choose a different album"
+msgstr "Elegir un álbum diferente..."
-#: ../../include/text.php:1499 ../../include/js_strings.php:105
-msgid "Saturday"
-msgstr "sábado"
+#: ../../addon/wiki/Mod_Wiki.php:407
+msgid "History"
+msgstr "Historial"
-#: ../../include/text.php:1499 ../../include/js_strings.php:99
-msgid "Sunday"
-msgstr "domingo"
+#: ../../addon/wiki/Mod_Wiki.php:485
+msgid "Error creating wiki. Invalid name."
+msgstr "Error al crear el wiki: el nombre no es válido."
-#: ../../include/text.php:1503 ../../include/js_strings.php:75
-msgid "January"
-msgstr "enero"
+#: ../../addon/wiki/Mod_Wiki.php:492
+msgid "A wiki with this name already exists."
+msgstr "Ya hay un wiki con este nombre."
-#: ../../include/text.php:1503 ../../include/js_strings.php:76
-msgid "February"
-msgstr "febrero"
+#: ../../addon/wiki/Mod_Wiki.php:505
+msgid "Wiki created, but error creating Home page."
+msgstr "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio."
-#: ../../include/text.php:1503 ../../include/js_strings.php:77
-msgid "March"
-msgstr "marzo"
+#: ../../addon/wiki/Mod_Wiki.php:512
+msgid "Error creating wiki"
+msgstr "Error al crear el wiki"
-#: ../../include/text.php:1503 ../../include/js_strings.php:78
-msgid "April"
-msgstr "abril"
+#: ../../addon/wiki/Mod_Wiki.php:536
+msgid "Error updating wiki. Invalid name."
+msgstr "Error al actualizar el wiki. Nombre no válido."
-#: ../../include/text.php:1503
-msgid "May"
-msgstr "mayo"
+#: ../../addon/wiki/Mod_Wiki.php:555
+msgid "Error updating wiki"
+msgstr "Error al actualizar el wiki"
-#: ../../include/text.php:1503 ../../include/js_strings.php:80
-msgid "June"
-msgstr "junio"
+#: ../../addon/wiki/Mod_Wiki.php:570
+msgid "Wiki delete permission denied."
+msgstr "Se ha denegado el permiso para eliminar el wiki."
-#: ../../include/text.php:1503 ../../include/js_strings.php:81
-msgid "July"
-msgstr "julio"
+#: ../../addon/wiki/Mod_Wiki.php:580
+msgid "Error deleting wiki"
+msgstr "Se ha producido un error al eliminar el wiki"
-#: ../../include/text.php:1503 ../../include/js_strings.php:82
-msgid "August"
-msgstr "agosto"
+#: ../../addon/wiki/Mod_Wiki.php:613
+msgid "New page created"
+msgstr "Se ha creado la nueva página"
-#: ../../include/text.php:1503 ../../include/js_strings.php:83
-msgid "September"
-msgstr "septiembre"
+#: ../../addon/wiki/Mod_Wiki.php:739
+msgid "Cannot delete Home"
+msgstr "No se puede eliminar la página principal"
-#: ../../include/text.php:1503 ../../include/js_strings.php:84
-msgid "October"
-msgstr "octubre"
+#: ../../addon/wiki/Mod_Wiki.php:815
+msgid "Current Revision"
+msgstr "Revisión actual"
-#: ../../include/text.php:1503 ../../include/js_strings.php:85
-msgid "November"
-msgstr "noviembre"
+#: ../../addon/wiki/Mod_Wiki.php:815
+msgid "Selected Revision"
+msgstr "Revisión seleccionada"
-#: ../../include/text.php:1503 ../../include/js_strings.php:86
-msgid "December"
-msgstr "diciembre"
+#: ../../addon/wiki/Mod_Wiki.php:870
+msgid "You must be authenticated."
+msgstr "Debe estar autenticado."
-#: ../../include/text.php:1569
-msgid "Unknown Attachment"
-msgstr "Adjunto no reconocido"
+#: ../../addon/wiki/Mod_Wiki.php:899 ../../addon/wiki/Widget/Wiki_pages.php:61
+msgid "Add new page"
+msgstr "Añadir una nueva página"
-#: ../../include/text.php:1571 ../../Zotlabs/Module/Sharedwithme.php:108
-#: ../../Zotlabs/Storage/Browser.php:379
-msgid "Size"
-msgstr "Tamaño"
+#: ../../addon/wiki/Mod_Wiki.php:906 ../../addon/wiki/Widget/Wiki_pages.php:68
+#: ../../Zotlabs/Module/Dreport.php:133
+msgid "Options"
+msgstr "Opciones"
-#: ../../include/text.php:1571 ../../include/feedutils.php:871
-msgid "unknown"
-msgstr "desconocido"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:41
+#: ../../addon/wiki/Lib/NativeWikiPage.php:109
+msgid "(No Title)"
+msgstr "(Sin título)"
-#: ../../include/text.php:1614
-msgid "remove category"
-msgstr "eliminar el tema"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:123
+msgid "Wiki page create failed."
+msgstr "Se ha producido un error en la creación de la página wiki."
-#: ../../include/text.php:1691
-msgid "remove from file"
-msgstr "eliminar del fichero"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:137
+msgid "Wiki not found."
+msgstr "No se ha encontrado el wiki."
-#: ../../include/text.php:1878
-msgid "Download binary/encrypted content"
-msgstr "Descargar contenido binario o cifrado"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:148
+msgid "Destination name already exists"
+msgstr "El nombre de destino ya existe"
-#: ../../include/text.php:1936 ../../include/text.php:1945
-#: ../../include/text.php:1972 ../../include/text.php:1981
-#, php-format
-msgctxt "noun"
-msgid "%d Vote"
-msgid_plural "%d Votes"
-msgstr[0] "%dVoto"
-msgstr[1] "%dVotos"
-msgstr[2] "%dVotos"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:181
+#: ../../addon/wiki/Lib/NativeWikiPage.php:376
+msgid "Page not found"
+msgstr "No se ha encontrado la página"
-#: ../../include/text.php:1988
-#, php-format
-msgctxt "noun"
-msgid "%d Vote in total"
-msgid_plural "%d Votes in total"
-msgstr[0] "%dVoto en total"
-msgstr[1] "%dVotos en total"
-msgstr[2] "%dVotos en total"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:211
+msgid "Error reading page content"
+msgstr "Se ha producido un error al leer el contenido de la página"
-#: ../../include/text.php:1994
-msgid "Poll has ended"
-msgstr "La encuesta ha terminado"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:367
+#: ../../addon/wiki/Lib/NativeWikiPage.php:425
+#: ../../addon/wiki/Lib/NativeWikiPage.php:493
+#: ../../addon/wiki/Lib/NativeWikiPage.php:534
+msgid "Error reading wiki"
+msgstr "Se ha producido un error al leer el wiki"
-#: ../../include/text.php:1997
-#, php-format
-msgid "Poll ends in %s"
-msgstr "La encuesta termina en %s"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:411
+msgid "Page update failed."
+msgstr "Se ha producido un error al actualizar la página."
-#: ../../include/text.php:2004 ../../Zotlabs/Lib/ThreadItem.php:453
-msgid "Vote"
-msgstr "Votar"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:447
+msgid "Nothing deleted"
+msgstr "No se ha eliminado nada"
-#: ../../include/text.php:2159
-msgid "Link to Source"
-msgstr "Enlazar con la entrada en su ubicación original"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:514
+msgid "Compare: object not found."
+msgstr "No se ha encontrado un objeto para comparar."
-#: ../../include/text.php:2181 ../../include/language.php:433
-msgid "default"
-msgstr "por defecto"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:521
+msgid "Page updated"
+msgstr "Se ha actualizado la página"
-#: ../../include/text.php:2189
-msgid "Page layout"
-msgstr "Plantilla de la página"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:529
+msgid "Wiki resource_id required for git commit"
+msgstr "Se necesita Wiki resource_id para el git commit"
-#: ../../include/text.php:2189
-msgid "You can create your own with the layouts tool"
-msgstr "Puede crear su propia disposición gráfica con la herramienta de plantillas"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:589
+#: ../../addon/wiki/Widget/Wiki_page_history.php:29
+msgctxt "wiki_history"
+msgid "Message"
+msgstr "Mensaje"
-#: ../../include/text.php:2200
-msgid "HTML"
-msgstr "HTML"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:590
+#: ../../addon/wiki/Widget/Wiki_page_history.php:30
+msgid "Date"
+msgstr "Fecha"
-#: ../../include/text.php:2203
-msgid "Comanche Layout"
-msgstr "Plantilla de Comanche"
+#: ../../addon/wiki/Lib/NativeWikiPage.php:592
+#: ../../addon/wiki/Widget/Wiki_page_history.php:32
+msgid "Compare"
+msgstr "Comparar"
-#: ../../include/text.php:2208
-msgid "PHP"
-msgstr "PHP"
+#: ../../addon/wiki/Lib/NativeWiki.php:144
+msgid "Wiki updated successfully"
+msgstr "El wiki se ha actualizado con éxito"
-#: ../../include/text.php:2217
-msgid "Page content type"
-msgstr "Tipo de contenido de la página"
+#: ../../addon/wiki/Lib/NativeWiki.php:204
+msgid "Wiki files deleted successfully"
+msgstr "Se han borrado con éxito los ficheros del wiki"
-#: ../../include/text.php:2340 ../../include/event.php:1347
-#: ../../include/conversation.php:142
-#: ../../Zotlabs/Module/Channel_calendar.php:221
-#: ../../Zotlabs/Module/Like.php:447 ../../Zotlabs/Module/Tagger.php:75
-msgid "event"
-msgstr "el/su evento"
+#: ../../addon/wiki/Widget/Wiki_pages.php:55
+msgid "Wiki Pages"
+msgstr "Páginas del wiki"
-#: ../../include/text.php:2343 ../../include/conversation.php:168
-#: ../../include/bbcode.php:564 ../../include/markdown.php:205
-#: ../../Zotlabs/Module/Tagger.php:79 ../../Zotlabs/Lib/Activity.php:3546
-msgid "post"
-msgstr "la entrada"
+#: ../../addon/wiki/Widget/Wiki_pages.php:66
+msgid "Page name"
+msgstr "Nombre de la página"
-#: ../../include/text.php:2345 ../../include/conversation.php:170
-#: ../../Zotlabs/Module/Tagger.php:81
-msgid "comment"
-msgstr "el comentario"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:22
+msgid "Fuzzloc Settings updated."
+msgstr "Los ajustes de Fuzzloc se han actualizado."
-#: ../../include/text.php:2350
-msgid "activity"
-msgstr "la/su actividad"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:38
+msgid "Minimum offset in meters"
+msgstr "Offset mínimo en metros"
-#: ../../include/text.php:2353
-msgid "poll"
-msgstr "encuesta"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:42
+msgid "Maximum offset in meters"
+msgstr "Offset máximo en metros"
-#: ../../include/text.php:2466
-msgid "a-z, 0-9, -, and _ only"
-msgstr "a-z, 0-9, -, and _ only"
+#: ../../addon/fuzzloc/Mod_Fuzzloc.php:51
+msgid "Fuzzy Location"
+msgstr "Fuzzy Location"
-#: ../../include/text.php:2771
-msgid "Design Tools"
-msgstr "Herramientas de diseño web"
+#: ../../addon/diaspora/diaspora.php:78
+msgid ""
+"Please install the statistics addon to be able to configure a diaspora relay"
+msgstr "Por favor, instale el complemento de estadísticas para poder configurar el reenvío de diaspora"
-#: ../../include/text.php:2774 ../../Zotlabs/Module/Blocks.php:154
-msgid "Blocks"
-msgstr "Bloques"
+#: ../../addon/diaspora/diaspora.php:88
+msgid "Diaspora Relay Handle"
+msgstr "Gestionar el reenvío de Diaspora"
-#: ../../include/text.php:2775 ../../Zotlabs/Module/Menu.php:171
-msgid "Menus"
-msgstr "Menús"
+#: ../../addon/diaspora/diaspora.php:88
+msgid "Address of a diaspora relay. Example: relay@diasporarelay.tld"
+msgstr "La dirección de una transmisión de diaspora. Ejemplo: relay@diasporarelay.tld"
-#: ../../include/text.php:2776 ../../Zotlabs/Module/Layouts.php:184
-msgid "Layouts"
-msgstr "Plantillas"
+#: ../../addon/diaspora/diaspora.php:108
+msgid "Diaspora relay could not be imported"
+msgstr "El reenvío de Diaspora no ha podido ser importado"
-#: ../../include/text.php:2777
-msgid "Pages"
-msgstr "Páginas"
+#: ../../addon/diaspora/diaspora.php:1068
+msgid "No subject"
+msgstr "Sin tema"
-#: ../../include/text.php:2789
-msgid "Import"
-msgstr "Importar"
+#: ../../addon/diaspora/util.php:337 ../../addon/diaspora/util.php:350
+#: ../../addon/diaspora/p.php:48 ../../Zotlabs/Lib/Enotify.php:61
+msgid "$projectname"
+msgstr "$projectname"
-#: ../../include/text.php:2790
-msgid "Import website..."
-msgstr "Importar un sitio web..."
+#: ../../addon/diaspora/import_diaspora.php:18
+msgid "No username found in import file."
+msgstr "No se ha encontrado el nombre de usuario en el fichero de importación."
-#: ../../include/text.php:2791
-msgid "Select folder to import"
-msgstr "Seleccionar la carpeta que se va a importar"
+#: ../../addon/diaspora/import_diaspora.php:140
+msgid "Import completed."
+msgstr "Importación completada."
-#: ../../include/text.php:2792
-msgid "Import from a zipped folder:"
-msgstr "Importar desde una carpeta comprimida: "
+#: ../../addon/diaspora/Mod_Diaspora.php:43
+msgid "Diaspora Protocol Settings updated."
+msgstr "Los ajustes del protocolo de Diaspora se han actualizado."
-#: ../../include/text.php:2793
-msgid "Import from cloud files:"
-msgstr "Importar desde los ficheros en la nube: "
+#: ../../addon/diaspora/Mod_Diaspora.php:52
+msgid ""
+"The diaspora protocol does not support location independence. Connections "
+"you make within that network may be unreachable from alternate channel "
+"locations."
+msgstr "El protocolo de Diaspora no admite la independencia de la ubicación. Las conexiones que realice dentro de esa red pueden ser inaccesibles desde ubicaciones de canales alternativos."
-#: ../../include/text.php:2794
-msgid "/cloud/channel/path/to/folder"
-msgstr "/cloud/canal/ruta/a la/carpeta"
+#: ../../addon/diaspora/Mod_Diaspora.php:75
+msgid "Allow any Diaspora member to comment or like your public posts"
+msgstr "Permitir que cualquier miembro de Diaspora comente o ponga un like en sus entradas públicas"
-#: ../../include/text.php:2795
-msgid "Enter path to website files"
-msgstr "Ruta a los ficheros del sitio web"
+#: ../../addon/diaspora/Mod_Diaspora.php:75
+msgid ""
+"If this setting is disabled only your contacts will be able to comment or "
+"like your public posts"
+msgstr "Si esta configuración está desactivada, sólo sus contactos podrán comentar o dar a \"me gusta\" en sus publicaciones públicas"
-#: ../../include/text.php:2796
-msgid "Select folder"
-msgstr "Seleccionar la carpeta"
+#: ../../addon/diaspora/Mod_Diaspora.php:79
+msgid "Prevent your hashtags from being redirected to other sites"
+msgstr "Impedir que sus \"hashtags\" sean redirigidos a otros sitios "
-#: ../../include/text.php:2797
-msgid "Export website..."
-msgstr "Exportar un sitio web..."
+#: ../../addon/diaspora/Mod_Diaspora.php:83
+msgid ""
+"Sign and forward posts and comments with no existing Diaspora signature"
+msgstr "Firmar y enviar entradas y comentarios sin firma de Diaspora"
-#: ../../include/text.php:2798
-msgid "Export to a zip file"
-msgstr "Exportar a un fichero comprimido .zip"
+#: ../../addon/diaspora/Mod_Diaspora.php:88
+msgid "Followed hashtags (comma separated, do not include the #)"
+msgstr "\"Hashtags\" seguidos (separados por comas, sin incluir #)"
-#: ../../include/text.php:2799
-msgid "website.zip"
-msgstr "sitio_web.zip"
+#: ../../addon/diaspora/Mod_Diaspora.php:97
+msgid "Diaspora Protocol"
+msgstr "Protocolo Diaspora"
-#: ../../include/text.php:2800
-msgid "Enter a name for the zip file."
-msgstr "Escriba un nombre para el fichero zip."
+#: ../../addon/diaspora/Receiver.php:1595
+#, php-format
+msgid "%1$s dislikes %2$s's %3$s"
+msgstr "a %1$s no le gusta el %3$s de %2$s"
-#: ../../include/text.php:2801
-msgid "Export to cloud files"
-msgstr "Exportar a la nube de ficheros"
+#: ../../addon/diaspora/Receiver.php:2206 ../../Zotlabs/Module/Like.php:487
+#, php-format
+msgid "%1$s is attending %2$s's %3$s"
+msgstr "%3$s de %2$s: %1$s participa"
-#: ../../include/text.php:2802
-msgid "/path/to/export/folder"
-msgstr "/ruta/para/exportar/carpeta"
+#: ../../addon/diaspora/Receiver.php:2208 ../../Zotlabs/Module/Like.php:489
+#, php-format
+msgid "%1$s is not attending %2$s's %3$s"
+msgstr "%3$s de %2$s: %1$s no participa"
-#: ../../include/text.php:2803
-msgid "Enter a path to a cloud files destination."
-msgstr "Escriba una ruta de destino a la nube de ficheros."
+#: ../../addon/diaspora/Receiver.php:2210 ../../Zotlabs/Module/Like.php:491
+#, php-format
+msgid "%1$s may attend %2$s's %3$s"
+msgstr "%3$s de %2$s: %1$s quizá participe"
-#: ../../include/text.php:2804
-msgid "Specify folder"
-msgstr "Especificar una carpeta"
+#: ../../addon/openid/Mod_Openid.php:32
+msgid "OpenID protocol error. No ID returned."
+msgstr "Error de protocolo OpenID. No se recuperó ninguna ID."
-#: ../../include/opengraph.php:56
+#: ../../addon/openid/Mod_Openid.php:78 ../../addon/openid/Mod_Openid.php:179
#, php-format
-msgid "This is the home page of %s."
-msgstr "Esta es la página personal de %s."
-
-#: ../../include/event.php:33 ../../include/event.php:128
-msgid "l F d, Y \\@ g:i A"
-msgstr "l d de F, Y \\@ G:i"
+msgid "Welcome %s. Remote authentication successful."
+msgstr "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo correctamente."
-#: ../../include/event.php:41
-msgid "Starts:"
-msgstr "Comienza:"
+#: ../../addon/openid/MysqlProvider.php:52
+msgid "First Name"
+msgstr "Nombre"
-#: ../../include/event.php:51
-msgid "Finishes:"
-msgstr "Finaliza:"
+#: ../../addon/openid/MysqlProvider.php:53
+msgid "Last Name"
+msgstr "Apellido"
-#: ../../include/event.php:63 ../../include/event.php:153
-#: ../../include/channel.php:1625 ../../Zotlabs/Module/Directory.php:353
-msgid "Location:"
-msgstr "Ubicación:"
+#: ../../addon/openid/MysqlProvider.php:55
+msgid "Full Name"
+msgstr "Nombre completo"
-#: ../../include/event.php:128
-msgid "l F d, Y"
-msgstr "l F d, Y"
+#: ../../addon/openid/MysqlProvider.php:58
+#: ../../addon/openid/MysqlProvider.php:59
+#: ../../addon/openid/MysqlProvider.php:60 ../../Zotlabs/Lib/Apps.php:366
+msgid "Profile Photo"
+msgstr "Foto del perfil"
-#: ../../include/event.php:132
-msgid "Start:"
-msgstr "Iniciar: "
+#: ../../addon/openid/MysqlProvider.php:61
+msgid "Profile Photo 16px"
+msgstr "Foto del perfil 16px"
-#: ../../include/event.php:136
-msgid "End:"
-msgstr "Finalizar: "
+#: ../../addon/openid/MysqlProvider.php:62
+msgid "Profile Photo 32px"
+msgstr "Foto del perfil 32px"
-#: ../../include/event.php:1193
-msgid "This event has been added to your calendar."
-msgstr "Este evento ha sido añadido a su calendario."
+#: ../../addon/openid/MysqlProvider.php:63
+msgid "Profile Photo 48px"
+msgstr "Foto del perfil 48px"
-#: ../../include/event.php:1426
-msgid "Not specified"
-msgstr "Sin especificar"
+#: ../../addon/openid/MysqlProvider.php:64
+msgid "Profile Photo 64px"
+msgstr "Foto del perfil 64px"
-#: ../../include/event.php:1427
-msgid "Needs Action"
-msgstr "Necesita de una intervención"
+#: ../../addon/openid/MysqlProvider.php:65
+msgid "Profile Photo 80px"
+msgstr "Foto del perfil 80px"
-#: ../../include/event.php:1428
-msgid "Completed"
-msgstr "Completado/a"
+#: ../../addon/openid/MysqlProvider.php:66
+msgid "Profile Photo 128px"
+msgstr "Foto del perfil 128px"
-#: ../../include/event.php:1429
-msgid "In Process"
-msgstr "En proceso"
+#: ../../addon/openid/MysqlProvider.php:68
+#: ../../Zotlabs/Module/Profiles.php:784
+msgid "Homepage URL"
+msgstr "Dirección de la página personal"
-#: ../../include/event.php:1430
-msgid "Cancelled"
-msgstr "Cancelado/a"
+#: ../../addon/openid/MysqlProvider.php:69 ../../Zotlabs/Lib/Apps.php:364
+msgid "Language"
+msgstr "Idioma"
-#: ../../include/event.php:1511 ../../include/connections.php:752
-#: ../../Zotlabs/Module/Cdav.php:1381 ../../Zotlabs/Module/Connedit.php:741
-msgid "Mobile"
-msgstr "Móvil"
+#: ../../addon/openid/MysqlProvider.php:70
+msgid "Birth Year"
+msgstr "Año de nacimiento"
-#: ../../include/event.php:1512 ../../include/connections.php:753
-#: ../../Zotlabs/Widget/Notifications.php:43
-#: ../../Zotlabs/Module/Cdav.php:1382 ../../Zotlabs/Module/Connedit.php:742
-msgid "Home"
-msgstr "Inicio"
+#: ../../addon/openid/MysqlProvider.php:71
+msgid "Birth Month"
+msgstr "Mes de nacimiento"
-#: ../../include/event.php:1513 ../../include/connections.php:754
-msgid "Home, Voice"
-msgstr "Llamadas particulares"
+#: ../../addon/openid/MysqlProvider.php:72
+msgid "Birth Day"
+msgstr "Día de nacimiento"
-#: ../../include/event.php:1514 ../../include/connections.php:755
-msgid "Home, Fax"
-msgstr "Fax particular"
+#: ../../addon/openid/MysqlProvider.php:73
+msgid "Birthdate"
+msgstr "Fecha de nacimiento"
-#: ../../include/event.php:1515 ../../include/connections.php:756
-#: ../../Zotlabs/Module/Cdav.php:1383 ../../Zotlabs/Module/Connedit.php:743
-msgid "Work"
-msgstr "Trabajo"
+#: ../../addon/openid/MysqlProvider.php:74
+#: ../../Zotlabs/Module/Profiles.php:457
+msgid "Gender"
+msgstr "Género"
-#: ../../include/event.php:1516 ../../include/connections.php:757
-msgid "Work, Voice"
-msgstr "Llamadas de trabajo"
+#: ../../addon/openid/openid.php:49
+msgid ""
+"We encountered a problem while logging in with the OpenID you provided. "
+"Please check the correct spelling of the ID."
+msgstr "Encontramos un problema al iniciar sesión con el OpenID que proporcionó. Compruebe si el ID está correctamente escrito."
-#: ../../include/event.php:1517 ../../include/connections.php:758
-msgid "Work, Fax"
-msgstr "Fax de trabajo"
+#: ../../addon/openid/openid.php:49
+msgid "The error message was:"
+msgstr "El mensaje de error ha sido: "
-#: ../../include/event.php:1518 ../../include/event.php:1525
-#: ../../include/selectors.php:64 ../../include/selectors.php:81
-#: ../../include/selectors.php:119 ../../include/selectors.php:155
-#: ../../include/connections.php:759 ../../include/connections.php:766
-#: ../../Zotlabs/Module/Cdav.php:1384 ../../Zotlabs/Module/Connedit.php:744
-#: ../../Zotlabs/Access/PermissionRoles.php:360
-msgid "Other"
-msgstr "Otro"
+#: ../../addon/openclipatar/openclipatar.php:51
+#: ../../addon/openclipatar/openclipatar.php:129
+msgid "System defaults:"
+msgstr "Valores predeterminados del sistema: "
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
-#: ../../Zotlabs/Module/Admin/Features.php:56
-#: ../../Zotlabs/Module/Settings/Features.php:38
-msgid "Off"
-msgstr "Desactivado"
+#: ../../addon/openclipatar/openclipatar.php:55
+msgid "Preferred Clipart IDs"
+msgstr "IDs de las imágenes clipart preferidas"
-#: ../../include/features.php:55 ../../Zotlabs/Module/Admin/Features.php:55
-#: ../../Zotlabs/Module/Admin/Features.php:56
-#: ../../Zotlabs/Module/Settings/Features.php:38
-msgid "On"
-msgstr "Activado"
+#: ../../addon/openclipatar/openclipatar.php:55
+msgid "List of preferred clipart ids. These will be shown first."
+msgstr "Lista de ids de imágenes de clipart preferidas. Se verán en primer lugar."
-#: ../../include/features.php:82 ../../include/nav.php:466
-#: ../../include/nav.php:469 ../../Zotlabs/Lib/Apps.php:350
-msgid "Calendar"
-msgstr "Calendario"
+#: ../../addon/openclipatar/openclipatar.php:56
+msgid "Default Search Term"
+msgstr "Términos de búsqueda predeterminados"
-#: ../../include/features.php:86
-msgid "Start calendar week on Monday"
-msgstr "Comenzar el calendario semanal por el lunes"
+#: ../../addon/openclipatar/openclipatar.php:56
+msgid "The default search term. These will be shown second."
+msgstr "Los términos de búsqueda predeterminados. Estos se mostrarán en segundo lugar."
-#: ../../include/features.php:87
-msgid "Default is Sunday"
-msgstr "Por defecto es domingo"
+#: ../../addon/openclipatar/openclipatar.php:57
+msgid "Return After"
+msgstr "Regresar después"
-#: ../../include/features.php:94
-msgid "Event Timezone Selection"
-msgstr "Selección del huso horario del evento"
+#: ../../addon/openclipatar/openclipatar.php:57
+msgid "Page to load after image selection."
+msgstr "Página para cargar después de la selección de imágenes."
-#: ../../include/features.php:95
-msgid "Allow event creation in timezones other than your own."
-msgstr "Permitir la creación de eventos en husos horarios distintos del suyo."
+#: ../../addon/openclipatar/openclipatar.php:60
+msgid "Profile List"
+msgstr "Lista de perfiles"
-#: ../../include/features.php:104
-msgid "Channel Home"
-msgstr "Mi canal"
+#: ../../addon/openclipatar/openclipatar.php:62
+msgid "Order of Preferred"
+msgstr "Orden de preferencia"
-#: ../../include/features.php:108
-msgid "Search by Date"
-msgstr "Buscar por fecha"
+#: ../../addon/openclipatar/openclipatar.php:62
+msgid "Sort order of preferred clipart ids."
+msgstr "Orden de clasificación de los identificadores de imágenes clipart preferidas."
-#: ../../include/features.php:109
-msgid "Ability to select posts by date ranges"
-msgstr "Capacidad de seleccionar entradas por rango de fechas"
+#: ../../addon/openclipatar/openclipatar.php:63
+#: ../../addon/openclipatar/openclipatar.php:69
+msgid "Newest first"
+msgstr "Las más nuevas en primer lugar"
-#: ../../include/features.php:116
-msgid "Tag Cloud"
-msgstr "Nube de etiquetas"
+#: ../../addon/openclipatar/openclipatar.php:66
+msgid "As entered"
+msgstr "Tal como se ingresaron"
-#: ../../include/features.php:117
-msgid "Provide a personal tag cloud on your channel page"
-msgstr "Proveer nube de etiquetas personal en su página de canal"
+#: ../../addon/openclipatar/openclipatar.php:68
+msgid "Order of other"
+msgstr "Orden de los demás"
-#: ../../include/features.php:124 ../../include/features.php:358
-msgid "Use blog/list mode"
-msgstr "Usar el modo blog/lista"
+#: ../../addon/openclipatar/openclipatar.php:68
+msgid "Sort order of other clipart ids."
+msgstr "Orden de clasificación de otros ids de imágenes clipart."
-#: ../../include/features.php:125 ../../include/features.php:359
-msgid "Comments will be displayed separately"
-msgstr "Los comentarios se mostrarán por separado"
+#: ../../addon/openclipatar/openclipatar.php:70
+msgid "Most downloaded first"
+msgstr "Las más descargadas en primer lugar"
-#: ../../include/features.php:137
-msgid "Connection Filtering"
-msgstr "Filtrado de conexiones"
+#: ../../addon/openclipatar/openclipatar.php:71
+msgid "Most liked first"
+msgstr "Las más apreciadas en primer lugar"
-#: ../../include/features.php:138
-msgid "Filter incoming posts from connections based on keywords/content"
-msgstr "Filtrar publicaciones entrantes de conexiones por palabras clave o contenido"
+#: ../../addon/openclipatar/openclipatar.php:73
+msgid "Preferred IDs Message"
+msgstr "Mensaje de IDs preferido"
-#: ../../include/features.php:146
-msgid "Conversation"
-msgstr "Conversación"
+#: ../../addon/openclipatar/openclipatar.php:73
+msgid "Message to display above preferred results."
+msgstr "Mensaje para mostrar sobre los resultados preferidos."
-#: ../../include/features.php:158
-msgid "Emoji Reactions"
-msgstr "Emoticonos \"emoji\""
+#: ../../addon/openclipatar/openclipatar.php:79
+msgid "Uploaded by: "
+msgstr "Subida por: "
-#: ../../include/features.php:159
-msgid "Add emoji reaction ability to posts"
-msgstr "Activar la capacidad de añadir un emoticono \"emoji\" a las entradas"
+#: ../../addon/openclipatar/openclipatar.php:79
+msgid "Drawn by: "
+msgstr "Creada por: "
-#: ../../include/features.php:166
-msgid "Dislike Posts"
-msgstr "Desagrado de publicaciones"
+#: ../../addon/openclipatar/openclipatar.php:183
+#: ../../addon/openclipatar/openclipatar.php:195
+msgid "Use this image"
+msgstr "Usar esta imagen"
-#: ../../include/features.php:167
-msgid "Ability to dislike posts/comments"
-msgstr "Capacidad de mostrar desacuerdo con el contenido de entradas y comentarios"
+#: ../../addon/openclipatar/openclipatar.php:193
+msgid "Or select from a free OpenClipart.org image:"
+msgstr "O seleccionar una imagen gratuita de OpenClipart.org: "
-#: ../../include/features.php:174
-msgid "Star Posts"
-msgstr "Entradas destacadas"
+#: ../../addon/openclipatar/openclipatar.php:196
+msgid "Search Term"
+msgstr "Término de búsqueda"
-#: ../../include/features.php:175
-msgid "Ability to mark special posts with a star indicator"
-msgstr "Capacidad de marcar entradas destacadas con un indicador de estrella"
+#: ../../addon/openclipatar/openclipatar.php:233
+msgid "Unknown error. Please try again later."
+msgstr "Error desconocido. Por favor, inténtelo otra vez."
-#: ../../include/features.php:182
-msgid "Reply on comment"
-msgstr "Responder a los comentarios"
+#: ../../addon/openclipatar/openclipatar.php:299
+#: ../../Zotlabs/Module/Profile_photo.php:268
+msgid ""
+"Shift-reload the page or clear browser cache if the new photo does not "
+"display immediately."
+msgstr "Recargue la página o limpie el caché del navegador si la nueva foto no se muestra inmediatamente."
-#: ../../include/features.php:183
-msgid "Ability to reply on selected comment"
-msgstr "Posibilidad de responder a los comentarios seleccionados"
+#: ../../addon/openclipatar/openclipatar.php:309
+msgid "Profile photo updated successfully."
+msgstr "Se ha actualizado con éxito la foto de perfil."
-#: ../../include/features.php:192 ../../Zotlabs/Lib/Apps.php:351
-msgid "Directory"
-msgstr "Directorio"
+#: ../../addon/likebanner/likebanner.php:51
+msgid "Your Webbie:"
+msgstr "Su webbie: "
-#: ../../include/features.php:196
-msgid "Advanced Directory Search"
-msgstr "Búsqueda avanzada en el directorio"
+#: ../../addon/likebanner/likebanner.php:54
+msgid "Fontsize (px):"
+msgstr "Tamaño de fuente (px): "
-#: ../../include/features.php:197
-msgid "Allows creation of complex directory search queries"
-msgstr "Permitir la creación de consultas complejas en las búsquedas en el directorio"
+#: ../../addon/likebanner/likebanner.php:68
+msgid "Link:"
+msgstr "Enlace: "
-#: ../../include/features.php:206
-msgid "Editor"
-msgstr "Editor"
+#: ../../addon/likebanner/likebanner.php:70
+msgid "Like us on Hubzilla"
+msgstr "Múestrenos su agrado en Hubzilla"
-#: ../../include/features.php:210
-msgid "Post Categories"
-msgstr "Temas de las entradas"
+#: ../../addon/likebanner/likebanner.php:72
+msgid "Embed:"
+msgstr "Incorporado: "
-#: ../../include/features.php:211
-msgid "Add categories to your posts"
-msgstr "Añadir temas a sus publicaciones"
+#: ../../addon/redphotos/redphotos.php:106
+msgid "Photos imported"
+msgstr "Se han importado las fotos"
-#: ../../include/features.php:218
-msgid "Large Photos"
-msgstr "Fotos de gran tamaño"
+#: ../../addon/redphotos/redphotos.php:129
+msgid "Redmatrix Photo Album Import"
+msgstr "Importar un álbum de fotos de Redmatrix"
-#: ../../include/features.php:219
-msgid ""
-"Include large (1024px) photo thumbnails in posts. If not enabled, use small "
-"(640px) photo thumbnails"
-msgstr "Incluir miniaturas de fotos grandes (1024px) en publicaciones. Si no está habilitado, usar miniaturas pequeñas (640px)"
+#: ../../addon/redphotos/redphotos.php:130
+msgid "This will import all your Redmatrix photo albums to this channel."
+msgstr "Esto importará todos sus álbumes de fotos de Redmatrix a este canal."
-#: ../../include/features.php:226
-msgid "Even More Encryption"
-msgstr "Más cifrado todavía"
+#: ../../addon/redphotos/redphotos.php:131
+#: ../../addon/redfiles/redfiles.php:121
+msgid "Redmatrix Server base URL"
+msgstr "URL base del servidor Redmatrix"
-#: ../../include/features.php:227
-msgid ""
-"Allow optional encryption of content end-to-end with a shared secret key"
-msgstr "Permitir cifrado adicional de contenido \"punto-a-punto\" con una clave secreta compartida."
+#: ../../addon/redphotos/redphotos.php:132
+#: ../../addon/redfiles/redfiles.php:122
+msgid "Redmatrix Login Username"
+msgstr "Nombre de inicio de sesión en Redmatrix"
-#: ../../include/features.php:234
-msgid "Disable Comments"
-msgstr "Deshabilitar comentarios"
+#: ../../addon/redphotos/redphotos.php:133
+#: ../../addon/redfiles/redfiles.php:123
+msgid "Redmatrix Login Password"
+msgstr "Contraseña de inicio de sesión en Redmatrix"
-#: ../../include/features.php:235
-msgid "Provide the option to disable comments for a post"
-msgstr "Proporcionar la opción de desactivar los comentarios para una entrada"
+#: ../../addon/redphotos/redphotos.php:134
+msgid "Import just this album"
+msgstr "Importar solo este álbum"
-#: ../../include/features.php:242
-msgid "Delayed Posting"
-msgstr "Publicación aplazada"
+#: ../../addon/redphotos/redphotos.php:134
+msgid "Leave blank to import all albums"
+msgstr "Dejar en blanco para importar todos los álbumes"
-#: ../../include/features.php:243
-msgid "Allow posts to be published at a later date"
-msgstr "Permitir mensajes que se publicarán en una fecha posterior"
+#: ../../addon/redphotos/redphotos.php:135
+msgid "Maximum count to import"
+msgstr "Límite máximo de importación"
-#: ../../include/features.php:250
-msgid "Content Expiration"
-msgstr "Caducidad del contenido"
+#: ../../addon/redphotos/redphotos.php:135
+msgid "0 or blank to import all available"
+msgstr "0 o en blanco para importar todos los disponibles"
-#: ../../include/features.php:251
-msgid "Remove posts/comments and/or private messages at a future time"
-msgstr "Eliminar publicaciones/comentarios y/o mensajes privados más adelante"
+#: ../../addon/moremoods/moremoods.php:19
+msgid "lonely"
+msgstr "Solo/a"
-#: ../../include/features.php:258
-msgid "Suppress Duplicate Posts/Comments"
-msgstr "Prevenir entradas o comentarios duplicados"
+#: ../../addon/moremoods/moremoods.php:20
+msgid "drunk"
+msgstr "ebrio/a"
-#: ../../include/features.php:259
-msgid ""
-"Prevent posts with identical content to be published with less than two "
-"minutes in between submissions."
-msgstr "Prevenir que entradas con contenido idéntico se publiquen con menos de dos minutos de intervalo."
+#: ../../addon/moremoods/moremoods.php:21
+msgid "horny"
+msgstr "caliente"
-#: ../../include/features.php:266
-msgid "Auto-save drafts of posts and comments"
-msgstr "Guardar automáticamente borradores de entradas y comentarios"
+#: ../../addon/moremoods/moremoods.php:22
+msgid "stoned"
+msgstr "drogado/a"
-#: ../../include/features.php:267
-msgid ""
-"Automatically saves post and comment drafts in local browser storage to help"
-" prevent accidental loss of compositions"
-msgstr "Guarda automáticamente los borradores de comentarios y publicaciones en el almacenamiento del navegador local para ayudar a evitar la pérdida accidental de composiciones."
+#: ../../addon/moremoods/moremoods.php:23
+msgid "fucked up"
+msgstr "jodido/a"
-#: ../../include/features.php:276
-msgid "Manage"
-msgstr "Gestionar"
+#: ../../addon/moremoods/moremoods.php:24
+msgid "clusterfucked"
+msgstr "hecho/a polvo"
-#: ../../include/features.php:280
-msgid "Navigation Channel Select"
-msgstr "Navegación por el selector de canales"
+#: ../../addon/moremoods/moremoods.php:25
+msgid "crazy"
+msgstr "loco/a"
-#: ../../include/features.php:281
-msgid "Change channels directly from within the navigation dropdown menu"
-msgstr "Cambiar de canales directamente desde el menú de navegación desplegable"
+#: ../../addon/moremoods/moremoods.php:26
+msgid "hurt"
+msgstr "ofendido/a"
-#: ../../include/features.php:290 ../../Zotlabs/Widget/Notifications.php:23
-#: ../../Zotlabs/Module/Connections.php:338
-msgid "Network"
-msgstr "Red"
+#: ../../addon/moremoods/moremoods.php:27
+msgid "sleepy"
+msgstr "soñoliento/a"
-#: ../../include/features.php:294
-msgid "Events Filter"
-msgstr "Filtro de eventos"
+#: ../../addon/moremoods/moremoods.php:28
+msgid "grumpy"
+msgstr "gruñón/ona"
-#: ../../include/features.php:295
-msgid "Ability to display only events"
-msgstr "Capacidad para mostrar solo eventos"
+#: ../../addon/moremoods/moremoods.php:29
+msgid "high"
+msgstr "superior"
-#: ../../include/features.php:302
-msgid "Polls Filter"
-msgstr "Filtro de encuestas"
+#: ../../addon/moremoods/moremoods.php:30
+msgid "semi-conscious"
+msgstr "semiconsciente"
-#: ../../include/features.php:303
-msgid "Ability to display only polls"
-msgstr "Capacidad para mostrar solo encuestas"
+#: ../../addon/moremoods/moremoods.php:31
+msgid "in love"
+msgstr "enamorado/a"
-#: ../../include/features.php:310 ../../Zotlabs/Widget/Savedsearch.php:89
-msgid "Saved Searches"
-msgstr "Búsquedas guardadas"
+#: ../../addon/moremoods/moremoods.php:32
+msgid "in lust"
+msgstr "lujurioso/a"
-#: ../../include/features.php:311
-msgid "Save search terms for re-use"
-msgstr "Guardar términos de búsqueda para su reutilización"
+#: ../../addon/moremoods/moremoods.php:33
+msgid "naked"
+msgstr "desnudo/a"
-#: ../../include/features.php:318 ../../include/contact_widgets.php:53
-#: ../../Zotlabs/Widget/Activity_filter.php:196
-#: ../../Zotlabs/Widget/Filer.php:33
-msgid "Saved Folders"
-msgstr "Carpetas guardadas"
+#: ../../addon/moremoods/moremoods.php:34
+msgid "stinky"
+msgstr "apestoso/a"
-#: ../../include/features.php:319
-msgid "Ability to file posts under folders"
-msgstr "Capacidad de archivar entradas en carpetas"
+#: ../../addon/moremoods/moremoods.php:35
+msgid "sweaty"
+msgstr "sudoroso/a"
-#: ../../include/features.php:326
-msgid "Alternate Stream Order"
-msgstr "Orden de stream alternativo"
+#: ../../addon/moremoods/moremoods.php:36
+msgid "bleeding out"
+msgstr "exánime"
-#: ../../include/features.php:327
-msgid ""
-"Ability to order the stream by last post date, last comment date or "
-"unthreaded activities"
-msgstr "Posibilidad de ordenar el stream por última fecha de publicación, última fecha de comentario o actividades sin hilo"
+#: ../../addon/moremoods/moremoods.php:37
+msgid "victorious"
+msgstr "victorioso/a"
-#: ../../include/features.php:334
-msgid "Contact Filter"
-msgstr "Filtro de contactos"
+#: ../../addon/moremoods/moremoods.php:38
+msgid "defeated"
+msgstr "derrotado/a"
-#: ../../include/features.php:335
-msgid "Ability to display only posts of a selected contact"
-msgstr "Posibilidad de mostrar sólo los mensajes de un contacto seleccionado"
+#: ../../addon/moremoods/moremoods.php:39
+msgid "envious"
+msgstr "envidioso/a"
-#: ../../include/features.php:342
-msgid "Forum Filter"
-msgstr "Filtro de foro"
+#: ../../addon/moremoods/moremoods.php:40
+msgid "jealous"
+msgstr "celoso/a"
-#: ../../include/features.php:343
-msgid "Ability to display only posts of a specific forum"
-msgstr "Posibilidad de mostrar sólo los mensajes de un foro específico"
+#: ../../addon/ljpost/Mod_Ljpost.php:53
+msgid "Livejournal username"
+msgstr "Nombre de usuario en Livejournal"
-#: ../../include/features.php:350
-msgid "Personal Posts Filter"
-msgstr "Filtro de entradas personales"
+#: ../../addon/ljpost/Mod_Ljpost.php:57
+msgid "Livejournal password"
+msgstr "Contraseña en Livejournal"
-#: ../../include/features.php:351
-msgid "Ability to display only posts that you've interacted on"
-msgstr "Posibilidad de mostrar sólo los mensajes en los que usted haya interactuado"
+#: ../../addon/ljpost/Mod_Ljpost.php:61
+msgid "Post to Livejournal by default"
+msgstr "Publicar en Livejournal por defecto"
-#: ../../include/features.php:368 ../../include/nav.php:447
-#: ../../Zotlabs/Widget/Channel_activities.php:93
-#: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:349
-msgid "Photos"
-msgstr "Fotos"
+#: ../../addon/ljpost/Mod_Ljpost.php:65
+msgid "Send wall-to-wall posts to Livejournal"
+msgstr "Enviar entradas de Muro-Muro a Livejournal"
-#: ../../include/features.php:372
-msgid "Photo Location"
-msgstr "Ubicación de las fotos"
+#: ../../addon/ljpost/Mod_Ljpost.php:77
+msgid "Livejournal Crosspost Connector"
+msgstr "Livejournal Crosspost Connector"
-#: ../../include/features.php:373
-msgid "If location data is available on uploaded photos, link this to a map."
-msgstr "Si los datos de ubicación están disponibles en las fotos subidas, enlazar estas a un mapa."
+#: ../../addon/ljpost/ljpost.php:49
+msgid "Post to Livejournal"
+msgstr "Publicar en Livejournal"
-#: ../../include/features.php:380
-msgid "Flag Adult Photos"
-msgstr "Indicador (\"flag\") de fotos de adultos"
+#: ../../addon/ljpost/ljpost.php:127
+msgid "Posted by"
+msgstr "Publicado por "
-#: ../../include/features.php:381
-msgid ""
-"Provide photo edit option to hide inappropriate photos from default album "
-"view"
-msgstr "Proporcionar una opción de edición de fotos para ocultar las fotos inapropiadas de la vista de álbum predeterminada"
+#: ../../addon/smileybutton/Mod_Smileybutton.php:42
+msgid "Hide the button and show the smilies directly."
+msgstr "Ocultar el botón y mostrar los smilies directamente."
-#: ../../include/features.php:390 ../../Zotlabs/Module/Contactedit.php:444
-#: ../../Zotlabs/Lib/Apps.php:367
-msgid "Profiles"
-msgstr "Perfiles"
+#: ../../addon/smileybutton/Mod_Smileybutton.php:50
+msgid "Smileybutton Settings"
+msgstr "Ajustes de Smileybutton"
-#: ../../include/features.php:394
-msgid "Advanced Profiles"
-msgstr "Perfiles avanzados"
+#: ../../addon/nsabait/Mod_Nsabait.php:23
+msgid "NSA Bait App"
+msgstr "App NSA Bait "
-#: ../../include/features.php:395
-msgid "Additional profile sections and selections"
-msgstr "Secciones y selecciones de perfil adicionales"
+#: ../../addon/nsabait/Mod_Nsabait.php:25
+msgid "Make yourself a political target."
+msgstr "Hazte un objetivo político."
-#: ../../include/features.php:402
-msgid "Profile Import/Export"
-msgstr "Importar/Exportar perfil"
+#: ../../addon/randpost/randpost.php:99
+msgid "You're welcome."
+msgstr "Bienvenido."
-#: ../../include/features.php:403
-msgid "Save and load profile details across sites/channels"
-msgstr "Guardar y cargar detalles del perfil a través de sitios/canales"
+#: ../../addon/randpost/randpost.php:100
+msgid "Ah shucks..."
+msgstr "Ah, joder..."
-#: ../../include/features.php:410
-msgid "Multiple Profiles"
-msgstr "Múltiples perfiles"
+#: ../../addon/randpost/randpost.php:101
+msgid "Don't mention it."
+msgstr "No lo menciones."
-#: ../../include/features.php:411
-msgid "Ability to create multiple profiles"
-msgstr "Capacidad de crear múltiples perfiles"
+#: ../../addon/randpost/randpost.php:102
+msgid "&lt;blush&gt;"
+msgstr "&lt;sonrojo&gt;"
-#: ../../include/security.php:630
+#: ../../addon/statusnet/Mod_Statusnet.php:61
msgid ""
-"The form security token was not correct. This probably happened because the "
-"form has been opened for too long (>3 hours) before submitting it."
-msgstr "El \"token\" de seguridad del formulario no es correcto. Esto ha ocurrido probablemente porque el formulario ha estado abierto demasiado tiempo (>3 horas) antes de ser enviado"
-
-#: ../../include/js_strings.php:5
-msgid "Delete this item?"
-msgstr "¿Borrar este elemento?"
-
-#: ../../include/js_strings.php:6
-msgid "Item deleted"
-msgstr "Elemento eliminado"
-
-#: ../../include/js_strings.php:7 ../../Zotlabs/Module/Photos.php:1103
-#: ../../Zotlabs/Module/Photos.php:1219 ../../Zotlabs/Lib/ThreadItem.php:834
-msgid "Comment"
-msgstr "Comentar"
-
-#: ../../include/js_strings.php:8 ../../Zotlabs/Lib/ThreadItem.php:543
-#, php-format
-msgid "%s show all"
-msgstr "%s mostrar todo"
-
-#: ../../include/js_strings.php:9
-#, php-format
-msgid "%s show less"
-msgstr "%s mostrar menos"
-
-#: ../../include/js_strings.php:10
-#, php-format
-msgid "%s expand"
-msgstr "%s expandir"
+"Please contact your site administrator.<br />The provided API URL is not "
+"valid."
+msgstr "Por favor, contacte con el administrador de su sitio.<br />La URL de la API proporcionada no es válida."
-#: ../../include/js_strings.php:11
-#, php-format
-msgid "%s collapse"
-msgstr "%s contraer"
+#: ../../addon/statusnet/Mod_Statusnet.php:98
+msgid "We could not contact the GNU social API with the Path you entered."
+msgstr "No podemos conectar con la API de GNU social con la ruta que ha proporcionado."
-#: ../../include/js_strings.php:12
-msgid "Password too short"
-msgstr "Contraseña demasiado corta"
+#: ../../addon/statusnet/Mod_Statusnet.php:130
+msgid "GNU social settings updated."
+msgstr "Se han guardado los ajustes de GNU social."
-#: ../../include/js_strings.php:13 ../../Zotlabs/Module/Register.php:161
-msgid "Passwords do not match"
-msgstr "Las contraseñas no coinciden"
+#: ../../addon/statusnet/Mod_Statusnet.php:179
+msgid "Globally Available GNU social OAuthKeys"
+msgstr "OAuthKeys globales de GNU social disponibles"
-#: ../../include/js_strings.php:14
-msgid "everybody"
-msgstr "cualquiera"
+#: ../../addon/statusnet/Mod_Statusnet.php:181
+msgid ""
+"There are preconfigured OAuth key pairs for some GNU social servers "
+"available. If you are using one of them, please use these credentials.<br "
+"/>If not feel free to connect to any other GNU social instance (see below)."
+msgstr "Existen pares de claves OAuth preconfiguradas disponibles para algunos servidores libres de GNU social. Si está usando uno de ellos, utilice estas credenciales.<br />Si no se siente libre de conectarse a cualquier otra instancia de GNU social (vea a continuación)."
-#: ../../include/js_strings.php:15
-msgid "Secret Passphrase"
-msgstr "Contraseña secreta"
+#: ../../addon/statusnet/Mod_Statusnet.php:196
+msgid "Provide your own OAuth Credentials"
+msgstr "Proporcione sus propias credenciales de OAuth"
-#: ../../include/js_strings.php:16
-msgid "Passphrase hint"
-msgstr "Pista de contraseña"
+#: ../../addon/statusnet/Mod_Statusnet.php:198
+msgid ""
+"No consumer key pair for GNU social found. Register your Hubzilla Account as"
+" an desktop client on your GNU social account, copy the consumer key pair "
+"here and enter the API base root.<br />Before you register your own OAuth "
+"key pair ask the administrator if there is already a key pair for this "
+"Hubzilla installation at your favourite GNU social installation."
+msgstr "No se ha encontrado un par de claves de consumidor para GNU social. Registre su cuenta de Hubzilla como un cliente de escritorio en su cuenta social GNU, copie el par de claves de consumidor aquí y escriba la dirección raíz de la API.<br />Antes de registrar su propio par de claves OAuth, pregunte al administrador si ya hay un par de claves para esta instalación de Hubzilla en su instalación GNU social favorita."
-#: ../../include/js_strings.php:17
-msgid "Notice: Permissions have changed but have not yet been submitted."
-msgstr "Aviso: los permisos han cambiado pero aún no han sido enviados."
+#: ../../addon/statusnet/Mod_Statusnet.php:202
+msgid "OAuth Consumer Key"
+msgstr "OAuth Consumer Key"
-#: ../../include/js_strings.php:18
-msgid "close all"
-msgstr "cerrar todo"
+#: ../../addon/statusnet/Mod_Statusnet.php:206
+msgid "OAuth Consumer Secret"
+msgstr "OAuth Consumer Secret"
-#: ../../include/js_strings.php:19
-msgid "Nothing new here"
-msgstr "Nada nuevo por aquí"
+#: ../../addon/statusnet/Mod_Statusnet.php:210
+msgid "Base API Path"
+msgstr "Ruta base de la API"
-#: ../../include/js_strings.php:20
-msgid "Rate This Channel (this is public)"
-msgstr "Valorar este canal (esto es público)"
+#: ../../addon/statusnet/Mod_Statusnet.php:210
+msgid "Remember the trailing /"
+msgstr "Recuerde la barra /"
-#: ../../include/js_strings.php:21
-msgid "Rating"
-msgstr "Valoración"
+#: ../../addon/statusnet/Mod_Statusnet.php:214
+msgid "GNU social application name"
+msgstr "Nombre de la aplicación de GNU social"
-#: ../../include/js_strings.php:22
-msgid "Describe (optional)"
-msgstr "Describir (opcional)"
+#: ../../addon/statusnet/Mod_Statusnet.php:237
+msgid ""
+"To connect to your GNU social account click the button below to get a "
+"security code from GNU social which you have to copy into the input box "
+"below and submit the form. Only your <strong>public</strong> posts will be "
+"posted to GNU social."
+msgstr "Para conectarse a su cuenta de GNU social, haga clic en el botón de abajo para obtener un código de seguridad de GNU social que tiene que copiar en el cuadro de entrada a continuación y envíe el formulario. Solo sus <strong>entradas</strong> públicas aparecerán en GNU social."
-#: ../../include/js_strings.php:24
-msgid "Please enter a link URL"
-msgstr "Por favor, introduzca una dirección de enlace"
+#: ../../addon/statusnet/Mod_Statusnet.php:239
+msgid "Log in with GNU social"
+msgstr "Inicio de sesión en GNU social"
-#: ../../include/js_strings.php:25
-msgid "Unsaved changes. Are you sure you wish to leave this page?"
-msgstr "Cambios no guardados. ¿Está seguro de que desea abandonar la página?"
+#: ../../addon/statusnet/Mod_Statusnet.php:242
+msgid "Copy the security code from GNU social here"
+msgstr "Copiar aquí el código de seguridad de GNU social"
-#: ../../include/js_strings.php:26 ../../Zotlabs/Module/Pubsites.php:52
-#: ../../Zotlabs/Module/Cdav.php:1014 ../../Zotlabs/Module/Profiles.php:480
-#: ../../Zotlabs/Module/Profiles.php:751 ../../Zotlabs/Module/Locs.php:121
-msgid "Location"
-msgstr "Ubicación"
+#: ../../addon/statusnet/Mod_Statusnet.php:252
+msgid "Cancel Connection Process"
+msgstr "Cancelar el proceso de conexión"
-#: ../../include/js_strings.php:27
-msgid "lovely"
-msgstr "encantador"
+#: ../../addon/statusnet/Mod_Statusnet.php:254
+msgid "Current GNU social API is"
+msgstr "La API actual de GNU social es "
-#: ../../include/js_strings.php:28
-msgid "wonderful"
-msgstr "fabuloso"
+#: ../../addon/statusnet/Mod_Statusnet.php:258
+msgid "Cancel GNU social Connection"
+msgstr "Cancelar la conexión de GNU social"
-#: ../../include/js_strings.php:29
-msgid "fantastic"
-msgstr "fantástico"
+#: ../../addon/statusnet/Mod_Statusnet.php:275
+msgid ""
+"<strong>Note</strong>: Due your privacy settings (<em>Hide your profile "
+"details from unknown viewers?</em>) the link potentially included in public "
+"postings relayed to GNU social will lead the visitor to a blank page "
+"informing the visitor that the access to your profile has been restricted."
+msgstr "<strong>Aviso</strong>: Debido a su configuración de privacidad (<em>Ocultar los detalles de su perfil a los visitantes desconocidos?</em>) el vínculo potencialmente incluido en las entradas públicas retransmitidas a GNU social llevará al visitante a una página en blanco que le informará de que el acceso a su perfil ha sido restringido."
-#: ../../include/js_strings.php:30
-msgid "great"
-msgstr "grandioso"
+#: ../../addon/statusnet/Mod_Statusnet.php:280
+msgid "Post to GNU social by default"
+msgstr "Publicar en GNU social por defecto"
-#: ../../include/js_strings.php:31
+#: ../../addon/statusnet/Mod_Statusnet.php:280
msgid ""
-"Your chosen nickname was either already taken or not valid. Please use our "
-"suggestion ("
-msgstr "El nombre de usuario elegido ya está en uso o no es válido. Por favor, utilice nuestra sugerencia ("
+"If enabled your public postings will be posted to the associated GNU-social "
+"account by default"
+msgstr "Si está activado, sus entradas públicas se publicarán en la cuenta GNU-social asociada de forma predeterminada"
-#: ../../include/js_strings.php:32
-msgid ") or enter a new one."
-msgstr ") o introduzca uno nuevo."
+#: ../../addon/statusnet/Mod_Statusnet.php:301
+msgid "GNU-Social Crosspost Connector"
+msgstr "GNU-Social Crosspost Connector"
-#: ../../include/js_strings.php:33
-msgid "Thank you, this nickname is valid."
-msgstr "Gracias, este alias es válido."
+#: ../../addon/statusnet/statusnet.php:145
+msgid "Post to GNU social"
+msgstr "Publicar en GNU social"
-#: ../../include/js_strings.php:34
-msgid "A channel name is required."
-msgstr "Se requiere un nombre de canal"
+#: ../../addon/statusnet/statusnet.php:593
+#: ../../Zotlabs/Module/Admin/Site.php:423
+msgid "Site name"
+msgstr "Nombre del sitio"
-#: ../../include/js_strings.php:35
-msgid "This is a "
-msgstr "Esto es un "
+#: ../../addon/statusnet/statusnet.php:594
+msgid "API URL"
+msgstr "URL de la API"
-#: ../../include/js_strings.php:36
-msgid " channel name"
-msgstr "nombre de canal"
+#: ../../addon/statusnet/statusnet.php:597
+msgid "Application name"
+msgstr "Nombre de la aplicación"
-#: ../../include/js_strings.php:37
-msgid "Back to reply"
-msgstr "Volver a la respuesta"
+#: ../../addon/cart/submodules/paypalbutton.php:85
+msgid "Enable Paypal Button Module"
+msgstr "Habilitar el módulo del botón de Paypal"
-#: ../../include/js_strings.php:38
-msgid "Pinned"
-msgstr "Anclado/a"
+#: ../../addon/cart/submodules/paypalbutton.php:93
+#: ../../addon/cart/submodules/paypalbuttonV2.php:94
+msgid "Use Production Key"
+msgstr "Utilizar clave en entorno de producción"
-#: ../../include/js_strings.php:39 ../../Zotlabs/Lib/ThreadItem.php:480
-msgid "Pin to the top"
-msgstr "Anclar en la parte superior"
+#: ../../addon/cart/submodules/paypalbutton.php:100
+#: ../../addon/cart/submodules/paypalbuttonV2.php:101
+msgid "Paypal Sandbox Client Key"
+msgstr "Clave de cliente en el entorno de pruebas de Paypal"
-#: ../../include/js_strings.php:40 ../../Zotlabs/Widget/Pinned.php:158
-#: ../../Zotlabs/Lib/ThreadItem.php:480
-msgid "Unpin from the top"
-msgstr "Desanclar de la parte superior"
+#: ../../addon/cart/submodules/paypalbutton.php:107
+#: ../../addon/cart/submodules/paypalbuttonV2.php:108
+msgid "Paypal Sandbox Secret Key"
+msgstr "Clave secreta en el entorno de pruebas de Paypal"
-#: ../../include/js_strings.php:46
-#, php-format
-msgid "%d minutes"
-msgid_plural "%d minutes"
-msgstr[0] "%d minutos"
-msgstr[1] "%d minutos"
-msgstr[2] "%d minutos"
+#: ../../addon/cart/submodules/paypalbutton.php:113
+#: ../../addon/cart/submodules/paypalbuttonV2.php:114
+msgid "Paypal Production Client Key"
+msgstr "Clave de cliente en el entorno de producción de Paypal"
-#: ../../include/js_strings.php:47
-#, php-format
-msgid "about %d hours"
-msgid_plural "about %d hours"
-msgstr[0] "alrededor de %d horas"
-msgstr[1] "alrededor de %d horas"
-msgstr[2] "alrededor de %d horas"
+#: ../../addon/cart/submodules/paypalbutton.php:120
+#: ../../addon/cart/submodules/paypalbuttonV2.php:121
+msgid "Paypal Production Secret Key"
+msgstr "Clave secreta en el entorno de producción de Paypal"
-#: ../../include/js_strings.php:48
-#, php-format
-msgid "%d days"
-msgid_plural "%d days"
-msgstr[0] "%d días"
-msgstr[1] "%d días"
-msgstr[2] "%d días"
+#: ../../addon/cart/submodules/paypalbutton.php:252
+#: ../../addon/cart/submodules/paypalbuttonV2.php:264
+msgid "Paypal button payments are not enabled."
+msgstr "Los pagos con el botón de Paypal no están habilitados."
-#: ../../include/js_strings.php:49
-#, php-format
-msgid "%d months"
-msgid_plural "%d months"
-msgstr[0] "%d meses"
-msgstr[1] "%d meses"
-msgstr[2] "%d meses"
+#: ../../addon/cart/submodules/paypalbutton.php:270
+#: ../../addon/cart/submodules/paypalbuttonV2.php:282
+msgid ""
+"Paypal button payments are not properly configured. Please choose another "
+"payment option."
+msgstr "Los pagos con el botón de Paypal no están configurados correctamente. Por favor, elija otra opción de pago."
-#: ../../include/js_strings.php:50
-#, php-format
-msgid "%d years"
-msgid_plural "%d years"
-msgstr[0] "%d años"
-msgstr[1] "%d años"
-msgstr[2] "%d años"
+#: ../../addon/cart/submodules/paypalbutton.php:392
+#: ../../addon/cart/submodules/paypalbuttonV2.php:409
+#: ../../addon/cart/manual_payments.php:68 ../../addon/cart/cart.php:1580
+msgid "Order not found."
+msgstr "El pedido no se ha encontrado."
-#: ../../include/js_strings.php:55
-msgid "timeago.prefixAgo"
-msgstr "hace "
+#: ../../addon/cart/submodules/paypalbuttonV2.php:86
+msgid "Enable Paypal Button Module (API-v2)"
+msgstr "Habilitar el módulo de botones de Paypal (API-v2)"
-#: ../../include/js_strings.php:56
-msgid "timeago.prefixFromNow"
-msgstr "en "
+#: ../../addon/cart/submodules/hzservices.php:65
+msgid "Enable Hubzilla Services Module"
+msgstr "Habilitar el Módulo de Servicios de Hubzilla"
-#: ../../include/js_strings.php:57
-msgid "timeago.suffixAgo"
-msgstr "NONE"
+#: ../../addon/cart/submodules/hzservices.php:164
+#: ../../addon/cart/submodules/manualcat.php:172
+msgid "New Sku"
+msgstr "Nuevo SKU (número de referencia)"
-#: ../../include/js_strings.php:58
-msgid "timeago.suffixFromNow"
-msgstr "NONE"
+#: ../../addon/cart/submodules/hzservices.php:199
+#: ../../addon/cart/submodules/manualcat.php:208
+msgid "Cannot save edits to locked item."
+msgstr "No se pueden guardar las ediciones en el elemento bloqueado."
-#: ../../include/js_strings.php:61
-msgid "less than a minute"
-msgstr "menos de un minuto"
+#: ../../addon/cart/submodules/hzservices.php:248
+#: ../../addon/cart/submodules/hzservices.php:335
+msgid "SKU not found."
+msgstr "No se ha encontrado el SKU"
-#: ../../include/js_strings.php:62
-msgid "about a minute"
-msgstr "alrededor de un minuto"
+#: ../../addon/cart/submodules/hzservices.php:301
+#: ../../addon/cart/submodules/hzservices.php:305
+msgid "Invalid Activation Directive."
+msgstr "Directiva de activación no válida."
-#: ../../include/js_strings.php:64
-msgid "about an hour"
-msgstr "alrededor de una hora"
+#: ../../addon/cart/submodules/hzservices.php:376
+#: ../../addon/cart/submodules/hzservices.php:380
+msgid "Invalid Deactivation Directive."
+msgstr "Directiva de desactivación no válida"
-#: ../../include/js_strings.php:66
-msgid "a day"
-msgstr "un día"
+#: ../../addon/cart/submodules/hzservices.php:566
+msgid "Add to this privacy group"
+msgstr "Añadir a este grupo de canales"
-#: ../../include/js_strings.php:68
-msgid "about a month"
-msgstr "alrededor de un mes"
+#: ../../addon/cart/submodules/hzservices.php:582
+msgid "Set user service class"
+msgstr "Configurar la clase de servicio al usuario"
-#: ../../include/js_strings.php:70
-msgid "about a year"
-msgstr "alrededor de un año"
+#: ../../addon/cart/submodules/hzservices.php:609
+msgid "You must be using a local account to purchase this service."
+msgstr "Usted debe estar usando una cuenta local para comprar este servicio."
-#: ../../include/js_strings.php:72
-msgid " "
-msgstr " "
+#: ../../addon/cart/submodules/hzservices.php:649
+#: ../../addon/cart/submodules/manualcat.php:252
+msgid "Changes Locked"
+msgstr "Cambios bloqueados"
-#: ../../include/js_strings.php:73
-msgid "timeago.numbers"
-msgstr "timeago.numbers"
+#: ../../addon/cart/submodules/hzservices.php:653
+#: ../../addon/cart/submodules/manualcat.php:256
+msgid "Item available for purchase."
+msgstr "Artículo disponible para la compra."
-#: ../../include/js_strings.php:79
-msgctxt "long"
-msgid "May"
-msgstr "mayo"
+#: ../../addon/cart/submodules/hzservices.php:660
+#: ../../addon/cart/submodules/manualcat.php:263
+#: ../../addon/cart/widgets/catalogitem.php:57
+msgid "Price"
+msgstr "Precio"
-#: ../../include/js_strings.php:87
-msgid "Jan"
-msgstr "ene"
+#: ../../addon/cart/submodules/hzservices.php:663
+#: ../../addon/cart/submodules/manualcat.php:266
+msgid "Photo URL"
+msgstr "URL de la foto"
-#: ../../include/js_strings.php:88
-msgid "Feb"
-msgstr "feb"
+#: ../../addon/cart/submodules/hzservices.php:667
+msgid "Add buyer to privacy group"
+msgstr "Agregar comprador al grupo de canales"
-#: ../../include/js_strings.php:89
-msgid "Mar"
-msgstr "mar"
+#: ../../addon/cart/submodules/hzservices.php:672
+msgid "Add buyer as connection"
+msgstr "Añadir comprador como conexión"
-#: ../../include/js_strings.php:90
-msgid "Apr"
-msgstr "abr"
+#: ../../addon/cart/submodules/hzservices.php:680
+#: ../../addon/cart/submodules/hzservices.php:722
+msgid "Set Service Class"
+msgstr "Establecer clase de servicio"
-#: ../../include/js_strings.php:91
-msgctxt "short"
-msgid "May"
-msgstr "may"
+#: ../../addon/cart/submodules/manualcat.php:61
+msgid "Enable Manual Cart Module"
+msgstr "Habilitar el módulo de carro manual"
-#: ../../include/js_strings.php:92
-msgid "Jun"
-msgstr "jun"
+#: ../../addon/cart/submodules/subscriptions.php:151
+msgid "Enable Subscription Management Module"
+msgstr "Habilitar el módulo de gestión de suscripciones"
-#: ../../include/js_strings.php:93
-msgid "Jul"
-msgstr "jul"
+#: ../../addon/cart/submodules/subscriptions.php:223
+msgid ""
+"Cannot include subscription items with different terms in the same order."
+msgstr "No se pueden incluir artículos de suscripción con términos diferentes en el mismo orden."
-#: ../../include/js_strings.php:94
-msgid "Aug"
-msgstr "ago"
+#: ../../addon/cart/submodules/subscriptions.php:372
+msgid "Select Subscription to Edit"
+msgstr "Seleccione suscripción a editar"
-#: ../../include/js_strings.php:95
-msgid "Sep"
-msgstr "sep"
+#: ../../addon/cart/submodules/subscriptions.php:380
+msgid "Edit Subscriptions"
+msgstr "Editar suscripciones"
-#: ../../include/js_strings.php:96
-msgid "Oct"
-msgstr "oct"
+#: ../../addon/cart/submodules/subscriptions.php:414
+msgid "Subscription SKU"
+msgstr "SKU de la suscripción"
-#: ../../include/js_strings.php:97
-msgid "Nov"
-msgstr "nov"
+#: ../../addon/cart/submodules/subscriptions.php:419
+msgid "Catalog Description"
+msgstr "Descripción del catálogo"
-#: ../../include/js_strings.php:98
-msgid "Dec"
-msgstr "dic"
+#: ../../addon/cart/submodules/subscriptions.php:423
+msgid "Subscription available for purchase."
+msgstr "Suscripción disponible para la compra."
-#: ../../include/js_strings.php:106
-msgid "Sun"
-msgstr "dom"
+#: ../../addon/cart/submodules/subscriptions.php:428
+msgid "Maximum active subscriptions to this item per account."
+msgstr "Máximo de suscripciones activas a este artículo por cuenta."
-#: ../../include/js_strings.php:107
-msgid "Mon"
-msgstr "lun"
+#: ../../addon/cart/submodules/subscriptions.php:431
+msgid "Subscription price."
+msgstr "Precio de la suscripción."
-#: ../../include/js_strings.php:108
-msgid "Tue"
-msgstr "mar"
+#: ../../addon/cart/submodules/subscriptions.php:435
+msgid "Quantity"
+msgstr "Cuantía"
-#: ../../include/js_strings.php:109
-msgid "Wed"
-msgstr "mié"
+#: ../../addon/cart/submodules/subscriptions.php:439
+msgid "Term"
+msgstr "Condición"
-#: ../../include/js_strings.php:110
-msgid "Thu"
-msgstr "jue"
+#: ../../addon/cart/submodules/orderoptions.php:70
+msgid "Enable Order/Item Options"
+msgstr "Habilitar las opciones de pedido/artículo"
-#: ../../include/js_strings.php:111
-msgid "Fri"
-msgstr "vie"
+#: ../../addon/cart/submodules/orderoptions.php:333
+#: ../../addon/cart/submodules/orderoptions.php:357
+#: ../../addon/cart/submodules/orderoptions.php:433
+#: ../../addon/cart/submodules/orderoptions.php:457
+msgid "Label"
+msgstr "Etiqueta"
-#: ../../include/js_strings.php:112
-msgid "Sat"
-msgstr "sáb"
+#: ../../addon/cart/submodules/orderoptions.php:336
+#: ../../addon/cart/submodules/orderoptions.php:360
+#: ../../addon/cart/submodules/orderoptions.php:436
+#: ../../addon/cart/submodules/orderoptions.php:460
+msgid "Instructions"
+msgstr "Instrucciones"
-#: ../../include/js_strings.php:113
-msgctxt "calendar"
-msgid "today"
-msgstr "hoy"
+#: ../../addon/cart/manual_payments.php:7
+msgid "Error: order mismatch. Please try again."
+msgstr "Error: desajuste de pedidos. Por favor, inténtelo de nuevo."
-#: ../../include/js_strings.php:114
-msgctxt "calendar"
-msgid "month"
-msgstr "mes"
+#: ../../addon/cart/manual_payments.php:61
+msgid "Manual payments are not enabled."
+msgstr "Los pagos manuales no están habilitados."
-#: ../../include/js_strings.php:115
-msgctxt "calendar"
-msgid "week"
-msgstr "semana"
+#: ../../addon/cart/manual_payments.php:77
+msgid "Finished"
+msgstr "Terminado"
-#: ../../include/js_strings.php:116
-msgctxt "calendar"
-msgid "day"
-msgstr "día"
+#: ../../addon/cart/cart.php:252
+msgid "DB Cleanup Failure"
+msgstr "Fallo de limpieza de la base de datos"
-#: ../../include/js_strings.php:117
-msgctxt "calendar"
-msgid "All day"
-msgstr "Todos los días"
+#: ../../addon/cart/cart.php:674
+msgid "[cart] Item Added"
+msgstr "[cesta] Artículo añadido"
-#: ../../include/js_strings.php:120
-msgid "Please stand by while your download is being prepared."
-msgstr "Por favor, espere mientras se prepara la descarga."
+#: ../../addon/cart/cart.php:1063
+msgid "Order already checked out."
+msgstr "El pedido ya ha sido revisado"
-#: ../../include/js_strings.php:123
-msgid "Email address not valid"
-msgstr "Dirección de correo electrónica no válida"
+#: ../../addon/cart/cart.php:1368
+msgid "Drop database tables when uninstalling."
+msgstr "Eliminar tablas de la base de datos al desinstalar."
-#: ../../include/help.php:81
-msgid "Help:"
-msgstr "Ayuda:"
+#: ../../addon/cart/cart.php:1375 ../../addon/cart/Settings/Cart.php:129
+msgid "Cart Settings"
+msgstr "Configuración del carro de la compra"
-#: ../../include/help.php:118 ../../include/help.php:126
-#: ../../include/nav.php:179 ../../include/nav.php:318
-#: ../../Zotlabs/Module/Layouts.php:186 ../../Zotlabs/Lib/Apps.php:352
-msgid "Help"
-msgstr "Ayuda"
+#: ../../addon/cart/cart.php:1387 ../../addon/cart/cart.php:1390
+msgid "Shop"
+msgstr "Comprar"
-#: ../../include/help.php:130
-msgid "Not Found"
-msgstr "No encontrado"
+#: ../../addon/cart/cart.php:1446 ../../addon/cart/myshop.php:112
+msgid "Order Not Found"
+msgstr "No se ha encontrado el pedido"
-#: ../../include/photos.php:153
-#, php-format
-msgid "Image exceeds website size limit of %lu bytes"
-msgstr "La imagen excede el límite de %lu bytes del sitio"
+#: ../../addon/cart/cart.php:1547
+msgid "You must be logged into the Grid to shop."
+msgstr "Debe iniciar sesión en la red para comprar."
-#: ../../include/photos.php:164
-msgid "Image file is empty."
-msgstr "El fichero de imagen está vacío. "
+#: ../../addon/cart/cart.php:1594
+msgid "Access denied."
+msgstr "Acceso denegado"
-#: ../../include/photos.php:198 ../../Zotlabs/Module/Profile_photo.php:275
-#: ../../Zotlabs/Module/Cover_photo.php:241
-msgid "Unable to process image"
-msgstr "No ha sido posible procesar la imagen"
+#: ../../addon/cart/cart.php:1646 ../../addon/cart/cart.php:1789
+msgid "No Order Found"
+msgstr "No se ha encontrado ningún pedido"
-#: ../../include/photos.php:324
-msgid "Photo storage failed."
-msgstr "La foto no ha podido ser guardada."
+#: ../../addon/cart/cart.php:1655
+msgid "An unknown error has occurred Please start again."
+msgstr "Se ha producido un error desconocido Vuelva a empezar."
-#: ../../include/photos.php:373
-msgid "a new photo"
-msgstr "una nueva foto"
+#: ../../addon/cart/cart.php:1798
+msgid "Requirements not met."
+msgstr "No se cumplen los requisitos."
-#: ../../include/photos.php:377
-#, php-format
-msgctxt "photo_upload"
-msgid "%1$s posted %2$s to %3$s"
-msgstr "%1$s ha publicado %2$s en %3$s"
+#: ../../addon/cart/cart.php:1798
+msgid "Review your order and complete any needed requirements."
+msgstr "Revise su pedido y complete los requisitos necesarios."
-#: ../../include/photos.php:722 ../../include/nav.php:450
-msgid "Photo Albums"
-msgstr "Álbumes de fotos"
+#: ../../addon/cart/cart.php:1824
+msgid "Invalid Payment Type. Please start again."
+msgstr "Tipo de pago no válido. Por favor, empiece de nuevo."
-#: ../../include/photos.php:723 ../../Zotlabs/Module/Photos.php:1352
-#: ../../Zotlabs/Module/Photos.php:1365 ../../Zotlabs/Module/Photos.php:1366
-msgid "Recent Photos"
-msgstr "Fotos recientes"
+#: ../../addon/cart/cart.php:1831
+msgid "Order not found"
+msgstr "El pedido no se ha encontrado"
-#: ../../include/photos.php:727
-msgid "Upload New Photos"
-msgstr "Subir nuevas fotos"
+#: ../../addon/cart/Settings/Cart.php:58
+msgid "Enable Test Catalog"
+msgstr "Habilitar el catálogo de pruebas"
-#: ../../include/network.php:412
-msgid "url: "
-msgstr "url: "
+#: ../../addon/cart/Settings/Cart.php:70
+msgid "Enable Manual Payments"
+msgstr "Permitir pagos manuales"
-#: ../../include/network.php:413
-msgid "error_code: "
-msgstr "código_de_error: "
+#: ../../addon/cart/Settings/Cart.php:90
+msgid "Base Merchant Currency"
+msgstr "Divida base del vendedor"
-#: ../../include/network.php:414
-msgid "error_string: "
-msgstr "cadena_de_error: "
+#: ../../addon/cart/myshop.php:30
+msgid "Access Denied."
+msgstr "Acceso denegado"
-#: ../../include/network.php:415
-msgid "content-type: "
-msgstr "tipo de contenido: "
+#: ../../addon/cart/myshop.php:189 ../../addon/cart/myshop.php:223
+#: ../../addon/cart/myshop.php:271 ../../addon/cart/myshop.php:329
+msgid "Invalid Item"
+msgstr "Elemento no válido"
-#: ../../include/network.php:1762 ../../include/network.php:1763
-msgid "Friendica"
-msgstr "Friendica"
+#: ../../addon/redfiles/redfiles.php:119
+msgid "Redmatrix File Storage Import"
+msgstr "Importar repositorio de ficheros de Redmatrix"
-#: ../../include/network.php:1764
-msgid "OStatus"
-msgstr "OStatus"
+#: ../../addon/redfiles/redfiles.php:120
+msgid "This will import all your Redmatrix cloud files to this channel."
+msgstr "Esto importará todos sus ficheros de la nube de Redmatrix a este canal."
-#: ../../include/network.php:1765
-msgid "GNU-Social"
-msgstr "GNU Social"
+#: ../../addon/upload_limits/upload_limits.php:25
+msgid "Show Upload Limits"
+msgstr "Mostrar los límites de subida"
-#: ../../include/network.php:1766
-msgid "RSS/Atom"
-msgstr "RSS/Atom"
+#: ../../addon/upload_limits/upload_limits.php:27
+msgid "Hubzilla configured maximum size: "
+msgstr "Tamaño máximo configurado por Hubzilla: "
-#: ../../include/network.php:1769
-msgid "Diaspora"
-msgstr "Diaspora"
+#: ../../addon/upload_limits/upload_limits.php:28
+msgid "PHP upload_max_filesize: "
+msgstr "PHP upload_max_filesize: "
-#: ../../include/network.php:1770
-msgid "Facebook"
-msgstr "Facebook"
+#: ../../addon/upload_limits/upload_limits.php:29
+msgid "PHP post_max_size (must be larger than upload_max_filesize): "
+msgstr "PHP post_max_size (debe ser mayor que upload_max_filesize): "
-#: ../../include/network.php:1771
-msgid "Zot"
-msgstr "Zot"
+#: ../../addon/rtof/Mod_Rtof.php:24
+msgid "Friendica Crosspost Connector Settings saved."
+msgstr "Se han guardado los ajustes del conector de publicación cruzada con Friendica."
-#: ../../include/network.php:1772
-msgid "LinkedIn"
-msgstr "LinkedIn"
+#: ../../addon/rtof/Mod_Rtof.php:47
+msgid "Send public postings to Friendica by default"
+msgstr "Enviar entradas públicas a Friendica por defecto"
-#: ../../include/network.php:1773
-msgid "XMPP/IM"
-msgstr "XMPP/IM"
+#: ../../addon/rtof/Mod_Rtof.php:51
+msgid "Friendica API Path"
+msgstr "Ruta a la API de Friendica"
-#: ../../include/network.php:1774
-msgid "MySpace"
-msgstr "MySpace"
+#: ../../addon/rtof/Mod_Rtof.php:55
+msgid "Friendica login name"
+msgstr "Nombre de inicio de sesión en Friendica"
-#: ../../include/activities.php:42
-msgid " and "
-msgstr " y "
+#: ../../addon/rtof/Mod_Rtof.php:59
+msgid "Friendica password"
+msgstr "Contraseña de Friendica"
-#: ../../include/activities.php:50
-msgid "public profile"
-msgstr "el perfil público"
+#: ../../addon/rtof/Mod_Rtof.php:67
+msgid "Friendica Crosspost Connector"
+msgstr "Friendica Crosspost Connector"
-#: ../../include/activities.php:59
-#, php-format
-msgid "%1$s changed %2$s to &ldquo;%3$s&rdquo;"
-msgstr "%1$s ha cambiado %2$s a &ldquo;%3$s&rdquo;"
+#: ../../addon/rtof/rtof.php:51
+msgid "Post to Friendica"
+msgstr "Publicar en Friendica"
-#: ../../include/activities.php:60
-#, php-format
-msgid "Visit %1$s's %2$s"
-msgstr "Visitar %2$s de %1$s"
+#: ../../addon/rainbowtag/Mod_Rainbowtag.php:22
+msgid "Rainbow Tag App"
+msgstr "App Etiqueta Arcoiris"
-#: ../../include/activities.php:63
-#, php-format
-msgid "%1$s has an updated %2$s, changing %3$s."
-msgstr "%1$s ha actualizado %2$s, cambiando %3$s."
+#: ../../addon/rainbowtag/Mod_Rainbowtag.php:23
+msgid "Add some colour to tag clouds"
+msgstr "Añadir color a las nubes de etiquetas"
-#: ../../include/contact_widgets.php:11
-#, php-format
-msgid "%d invitation available"
-msgid_plural "%d invitations available"
-msgstr[0] "%d invitación pendiente"
-msgstr[1] "%d invitaciones disponibles"
-msgstr[2] "%d invitaciones disponibles"
+#: ../../addon/rainbowtag/Mod_Rainbowtag.php:30
+msgid "Rainbow Tag"
+msgstr "Etiqueta Arcoiris"
-#: ../../include/contact_widgets.php:16 ../../include/acl_selectors.php:145
-#: ../../Zotlabs/Module/Admin/Site.php:419
-msgid "Advanced"
-msgstr "Avanzado"
+#: ../../addon/authchoose/Mod_Authchoose.php:30
+msgid ""
+"Allow magic authentication only to websites of your immediate connections"
+msgstr "Permitir la autenticación mágica sólo a los sitios web de sus conexiones próximas"
-#: ../../include/contact_widgets.php:19
-msgid "Find Channels"
-msgstr "Encontrar canales"
+#: ../../addon/authchoose/Mod_Authchoose.php:36
+msgid "Authchoose"
+msgstr "Autoseleccionar"
-#: ../../include/contact_widgets.php:20
-msgid "Enter name or interest"
-msgstr "Introducir nombre o interés"
+#: ../../addon/content_import/Mod_content_import.php:27
+msgid "No server specified"
+msgstr "No se ha especificado ningún servidor"
-#: ../../include/contact_widgets.php:21
-msgid "Connect/Follow"
-msgstr "Conectar/Seguir"
+#: ../../addon/content_import/Mod_content_import.php:73
+msgid "Posts imported"
+msgstr "Entradas importadas"
-#: ../../include/contact_widgets.php:22
-msgid "Examples: Robert Morgenstein, Fishing"
-msgstr "Ejemplos: José Fernández, Pesca"
+#: ../../addon/content_import/Mod_content_import.php:113
+msgid "Files imported"
+msgstr "Ficheros importados"
-#: ../../include/contact_widgets.php:23 ../../Zotlabs/Module/Directory.php:432
-#: ../../Zotlabs/Module/Directory.php:437
-#: ../../Zotlabs/Module/Connections.php:398
-msgid "Find"
-msgstr "Encontrar"
+#: ../../addon/content_import/Mod_content_import.php:134
+#: ../../Zotlabs/Lib/Apps.php:337
+msgid "Content Import"
+msgstr "Importación de contenidos"
-#: ../../include/contact_widgets.php:24 ../../Zotlabs/Module/Directory.php:436
-#: ../../Zotlabs/Module/Suggest.php:77
-msgid "Channel Suggestions"
-msgstr "Sugerencias de canales"
+#: ../../addon/content_import/Mod_content_import.php:135
+msgid ""
+"This will import all your conversations and cloud files from a cloned "
+"channel on another server. This may take a while if you have lots of posts "
+"and or files."
+msgstr "Esto importará todas sus conversaciones y archivos de nube de un canal clonado en otro servidor. El proceso puede tardar un poco si tiene muchos mensajes y/o ficheros."
-#: ../../include/contact_widgets.php:26
-msgid "Random Profile"
-msgstr "Perfil aleatorio"
+#: ../../addon/content_import/Mod_content_import.php:136
+msgid "Include posts"
+msgstr "Incluir entradas"
-#: ../../include/contact_widgets.php:27
-msgid "Invite Friends"
-msgstr "Invitar a amigos"
+#: ../../addon/content_import/Mod_content_import.php:136
+msgid "Conversations, Articles, Cards, and other posted content"
+msgstr "Conversaciones, artículos, fichas y otros contenidos publicados"
-#: ../../include/contact_widgets.php:29
-msgid "Advanced example: name=fred and country=iceland"
-msgstr "Ejemplo avanzado: nombre=juan y país=españa"
+#: ../../addon/content_import/Mod_content_import.php:137
+msgid "Include files"
+msgstr "Incluir ficheros"
-#: ../../include/contact_widgets.php:182
-msgid "Common Connections"
-msgstr "Conexiones comunes"
+#: ../../addon/content_import/Mod_content_import.php:137
+msgid "Files, Photos and other cloud storage"
+msgstr "Archivos, fotos y otro tipo de almacenamiento en la nube"
-#: ../../include/contact_widgets.php:186
-#, php-format
-msgid "View all %d common connections"
-msgstr "Ver todas las %d conexiones comunes"
+#: ../../addon/content_import/Mod_content_import.php:138
+msgid "Original Server base URL"
+msgstr "URL base del servidor original"
-#: ../../include/language.php:446
-msgid "Select an alternate language"
-msgstr "Seleccionar un idioma alternativo"
+#: ../../Zotlabs/Lib/PermissionDescription.php:108
+#: ../../Zotlabs/Access/PermissionRoles.php:384
+msgid "Public"
+msgstr "Público"
-#: ../../include/import.php:30
-msgid "Unable to import a removed channel."
-msgstr "No se puede importar un canal eliminado."
+#: ../../Zotlabs/Lib/PermissionDescription.php:109
+msgid "Anybody in the $Projectname network"
+msgstr "Cualquiera en la red $Projectname"
-#: ../../include/import.php:56
-msgid ""
-"Cannot create a duplicate channel identifier on this system. Import failed."
-msgstr "No se ha podido crear un canal con un identificador que ya existe en este sistema. La importación ha fallado."
+#: ../../Zotlabs/Lib/PermissionDescription.php:110
+#, php-format
+msgid "Any account on %s"
+msgstr "Cualquier cuenta en %s"
-#: ../../include/import.php:122
-msgid "Cloned channel not found. Import failed."
-msgstr "No se ha podido importar el canal porque el canal clonado no se ha encontrado."
+#: ../../Zotlabs/Lib/PermissionDescription.php:111
+msgid "Any of my connections"
+msgstr "Cualquiera de mis conexiones"
-#: ../../include/nav.php:95
-msgid "Remote authentication"
-msgstr "Acceder desde su servidor"
+#: ../../Zotlabs/Lib/PermissionDescription.php:112
+msgid "Only connections I specifically allow"
+msgstr "Sólo las conexiones que yo permita de forma explícita"
-#: ../../include/nav.php:95
-msgid "Click to authenticate to your home hub"
-msgstr "Pulsar para identificarse en su servidor de inicio"
+#: ../../Zotlabs/Lib/PermissionDescription.php:113
+msgid "Anybody authenticated (could include visitors from other networks)"
+msgstr "Cualquiera que esté autenticado (podría incluir a los visitantes de otras redes)"
-#: ../../include/nav.php:101 ../../Zotlabs/Widget/Channel_activities.php:239
-#: ../../Zotlabs/Widget/Admin.php:29
-#: ../../Zotlabs/Module/Admin/Channels.php:146
-#: ../../Zotlabs/Module/Manage.php:162 ../../Zotlabs/Module/Admin.php:116
-msgid "Channels"
-msgstr "Canales"
+#: ../../Zotlabs/Lib/PermissionDescription.php:114
+msgid "Any connections including those who haven't yet been approved"
+msgstr "Cualquier conexión incluyendo aquellas que aún no han sido aprobadas"
-#: ../../include/nav.php:101
-msgid "Manage your channels"
-msgstr "Gestionar sus canales"
+#: ../../Zotlabs/Lib/PermissionDescription.php:150
+msgid ""
+"This is your default setting for the audience of your normal stream, and "
+"posts."
+msgstr "Esta es la configuración predeterminada para su flujo (stream) habitual de publicaciones."
-#: ../../include/nav.php:104 ../../Zotlabs/Widget/Settings_menu.php:71
-#: ../../Zotlabs/Widget/Newmember.php:58
-#: ../../Zotlabs/Module/Admin/Themes.php:125
-#: ../../Zotlabs/Module/Admin/Addons.php:345 ../../Zotlabs/Lib/Apps.php:343
-msgid "Settings"
-msgstr "Ajustes"
+#: ../../Zotlabs/Lib/PermissionDescription.php:151
+msgid ""
+"This is your default setting for who can view your default channel profile"
+msgstr "Esta es su configuración por defecto para establecer quién puede ver su perfil del canal predeterminado"
-#: ../../include/nav.php:104
-msgid "Account/Channel Settings"
-msgstr "Ajustes de cuenta/canales"
+#: ../../Zotlabs/Lib/PermissionDescription.php:152
+msgid "This is your default setting for who can view your connections"
+msgstr "Este es su ajuste predeterminado para establecer quién puede ver sus conexiones"
-#: ../../include/nav.php:110 ../../include/nav.php:140
-#: ../../include/nav.php:161 ../../boot.php:1747
-msgid "Logout"
-msgstr "Finalizar sesión"
+#: ../../Zotlabs/Lib/PermissionDescription.php:153
+msgid ""
+"This is your default setting for who can view your file storage and photos"
+msgstr "Este es su ajuste predeterminado para establecer quién puede ver su repositorio de ficheros y sus fotos"
-#: ../../include/nav.php:110 ../../include/nav.php:140
-msgid "End this session"
-msgstr "Finalizar esta sesión"
+#: ../../Zotlabs/Lib/PermissionDescription.php:154
+msgid "This is your default setting for the audience of your webpages"
+msgstr "Este es el ajuste predeterminado para establecer la audiencia de sus páginas web"
-#: ../../include/nav.php:113
-msgid "Your profile page"
-msgstr "Su página del perfil"
+#: ../../Zotlabs/Lib/Apps.php:329
+msgid "Affinity Tool"
+msgstr "Herramienta de afinidad"
-#: ../../include/nav.php:116 ../../include/channel.php:1530
-#: ../../Zotlabs/Module/Profiles.php:852
-msgid "Edit Profiles"
-msgstr "Editar perfiles"
+#: ../../Zotlabs/Lib/Apps.php:332
+msgid "Site Admin"
+msgstr "Administrador del sitio"
-#: ../../include/nav.php:116
-msgid "Manage/Edit profiles"
-msgstr "Administrar/editar perfiles"
+#: ../../Zotlabs/Lib/Apps.php:336
+msgid "Content Filter"
+msgstr "Filtro de contenido"
-#: ../../include/nav.php:118 ../../Zotlabs/Widget/Newmember.php:40
-msgid "Edit your profile"
-msgstr "Editar su perfil"
+#: ../../Zotlabs/Lib/Apps.php:339
+msgid "Remote Diagnostics"
+msgstr "Diagnóstico remoto"
-#: ../../include/nav.php:125 ../../include/nav.php:129
-#: ../../Zotlabs/Lib/Apps.php:340 ../../boot.php:1748
-msgid "Login"
-msgstr "Iniciar sesión"
+#: ../../Zotlabs/Lib/Apps.php:340
+msgid "Suggest Channels"
+msgstr "Sugerir canales"
-#: ../../include/nav.php:125 ../../include/nav.php:129
-msgid "Sign in"
-msgstr "Acceder"
+#: ../../Zotlabs/Lib/Apps.php:342
+msgid "Channel Manager"
+msgstr "Administración de canales"
-#: ../../include/nav.php:159
-msgid "Take me home"
-msgstr "Volver a la página principal"
+#: ../../Zotlabs/Lib/Apps.php:343
+msgid "Stream"
+msgstr "Stream"
-#: ../../include/nav.php:161
-msgid "Log me out of this site"
-msgstr "Salir de este sitio"
+#: ../../Zotlabs/Lib/Apps.php:354
+msgid "Mail"
+msgstr "Correo"
-#: ../../include/nav.php:166 ../../Zotlabs/Module/Register.php:542
-#: ../../boot.php:1725
-msgid "Register"
-msgstr "Registrarse"
+#: ../../Zotlabs/Lib/Apps.php:355 ../../Zotlabs/Module/Mood.php:152
+msgid "Mood"
+msgstr "Estado de ánimo"
-#: ../../include/nav.php:166
-msgid "Create an account"
-msgstr "Crear una cuenta"
+#: ../../Zotlabs/Lib/Apps.php:357
+msgid "Chat"
+msgstr "Chat"
-#: ../../include/nav.php:179
-msgid "Help and documentation"
-msgstr "Ayuda y documentación"
+#: ../../Zotlabs/Lib/Apps.php:359
+msgid "Probe"
+msgstr "Probar"
-#: ../../include/nav.php:193
-msgid "Search site @name, !forum, #tag, ?docs, content"
-msgstr "Buscar en el sitio @nombre, !foro, #tag, ?docs, contenido"
+#: ../../Zotlabs/Lib/Apps.php:360
+msgid "Suggest"
+msgstr "Sugerir"
-#: ../../include/nav.php:199 ../../Zotlabs/Widget/Admin.php:60
-msgid "Admin"
-msgstr "Administrador"
+#: ../../Zotlabs/Lib/Apps.php:361
+msgid "Random Channel"
+msgstr "Canal aleatorio"
-#: ../../include/nav.php:199
-msgid "Site Setup and Configuration"
-msgstr "Ajustes y configuración del sitio"
+#: ../../Zotlabs/Lib/Apps.php:362
+msgid "Invite"
+msgstr "Invitar"
-#: ../../include/nav.php:322 ../../Zotlabs/Widget/Messages.php:36
-#: ../../Zotlabs/Widget/Notifications.php:173
-#: ../../Zotlabs/Module/New_channel.php:157
-#: ../../Zotlabs/Module/New_channel.php:164
-#: ../../Zotlabs/Module/Defperms.php:254
-msgid "Loading"
-msgstr "Cargando"
+#: ../../Zotlabs/Lib/Apps.php:363 ../../Zotlabs/Widget/Admin.php:31
+msgid "Features"
+msgstr "Funcionalidades"
-#: ../../include/nav.php:327
-msgid "@name, #tag, ?doc, content"
-msgstr "@nombre, #etiqueta, ?ayuda, contenido"
+#: ../../Zotlabs/Lib/Apps.php:365 ../../Zotlabs/Storage/Browser.php:410
+msgid "Post"
+msgstr "Publicación"
-#: ../../include/nav.php:328
-msgid "Please wait..."
-msgstr "Espere por favor…"
+#: ../../Zotlabs/Lib/Apps.php:370
+msgid "Notifications"
+msgstr "Notificaciones"
-#: ../../include/nav.php:334 ../../Zotlabs/Lib/Apps.php:327
-msgid "Apps"
-msgstr "Aplicaciones (apps)"
+#: ../../Zotlabs/Lib/Apps.php:371
+msgid "Order Apps"
+msgstr "Ordenar las apps"
-#: ../../include/nav.php:335
-msgid "Channel Apps"
-msgstr "Apps del canal "
+#: ../../Zotlabs/Lib/Apps.php:372
+msgid "CardDAV"
+msgstr "CardDAV"
-#: ../../include/nav.php:336
-msgid "System Apps"
-msgstr "Apps del sistema "
+#: ../../Zotlabs/Lib/Apps.php:373 ../../Zotlabs/Module/Sources.php:105
+msgid "Channel Sources"
+msgstr "Orígenes de los contenidos del canal"
-#: ../../include/nav.php:337
-msgid "Pinned Apps"
-msgstr "Apps ancladas "
+#: ../../Zotlabs/Lib/Apps.php:374 ../../Zotlabs/Module/Tokens.php:288
+msgid "Guest Access"
+msgstr "Acceso para invitados"
-#: ../../include/nav.php:338
-msgid "Featured Apps"
-msgstr "Apps destacadas "
+#: ../../Zotlabs/Lib/Apps.php:376
+msgid "OAuth Apps Manager"
+msgstr "Administrador de apps OAuth"
-#: ../../include/nav.php:424 ../../Zotlabs/Module/Admin/Channels.php:154
-#: ../../Zotlabs/Lib/Apps.php:347
-msgid "Channel"
-msgstr "Canal"
+#: ../../Zotlabs/Lib/Apps.php:377
+msgid "OAuth2 Apps Manager"
+msgstr "Administrador de apps OAuth2"
-#: ../../include/nav.php:427
-msgid "Status Messages and Posts"
-msgstr "Mensajes de estado y publicaciones"
+#: ../../Zotlabs/Lib/Apps.php:378
+msgid "PDL Editor"
+msgstr "Editor PDL"
-#: ../../include/nav.php:437 ../../Zotlabs/Module/Help.php:83
-msgid "About"
-msgstr "Mi perfil"
+#: ../../Zotlabs/Lib/Apps.php:379 ../../Zotlabs/Module/Permcats.php:248
+msgid "Contact Roles"
+msgstr "Roles de contacto"
-#: ../../include/nav.php:440
-msgid "Profile Details"
-msgstr "Detalles del perfil"
+#: ../../Zotlabs/Lib/Apps.php:380 ../../Zotlabs/Module/Pubstream.php:100
+#: ../../Zotlabs/Widget/Notifications.php:154
+msgid "Public Stream"
+msgstr "\"Stream\" público"
-#: ../../include/nav.php:455 ../../Zotlabs/Widget/Channel_activities.php:125
-#: ../../Zotlabs/Widget/Notifications.php:108
-#: ../../Zotlabs/Module/Fbrowser.php:85 ../../Zotlabs/Lib/Apps.php:344
-#: ../../Zotlabs/Storage/Browser.php:351
-msgid "Files"
-msgstr "Ficheros"
+#: ../../Zotlabs/Lib/Apps.php:381
+msgid "My Chatrooms"
+msgstr "Mis salas de chat"
-#: ../../include/nav.php:458
-msgid "Files and Storage"
-msgstr "Ficheros y repositorio"
+#: ../../Zotlabs/Lib/Apps.php:382
+msgid "Channel Export"
+msgstr "Exportar canal"
-#: ../../include/nav.php:480 ../../include/nav.php:483
-#: ../../Zotlabs/Widget/Chatroom_list.php:22 ../../Zotlabs/Lib/Apps.php:334
-msgid "Chatrooms"
-msgstr "Salas de chat"
+#: ../../Zotlabs/Lib/Apps.php:546 ../../Zotlabs/Module/Oauth2.php:58
+#: ../../Zotlabs/Module/Oauth2.php:142 ../../Zotlabs/Module/Oauth.php:53
+#: ../../Zotlabs/Module/Oauth.php:135 ../../Zotlabs/Module/Connedit.php:748
+#: ../../Zotlabs/Module/Admin/Addons.php:460
+#: ../../Zotlabs/Module/Cdav.php:1054 ../../Zotlabs/Module/Cdav.php:1390
+msgid "Update"
+msgstr "Actualizar"
-#: ../../include/nav.php:493 ../../Zotlabs/Module/Bookmarks.php:90
-#: ../../Zotlabs/Lib/Apps.php:333
-msgid "Bookmarks"
-msgstr "Marcadores"
+#: ../../Zotlabs/Lib/Apps.php:546 ../../Zotlabs/Module/Admin/Addons.php:429
+msgid "Install"
+msgstr "Instalar"
-#: ../../include/nav.php:496
-msgid "Saved Bookmarks"
-msgstr "Marcadores guardados"
+#: ../../Zotlabs/Lib/Apps.php:576 ../../Zotlabs/Lib/Apps.php:598
+msgid "Purchase"
+msgstr "Comprar"
-#: ../../include/nav.php:504 ../../Zotlabs/Widget/Channel_activities.php:168
-#: ../../Zotlabs/Module/Webpages.php:249 ../../Zotlabs/Lib/Apps.php:345
-msgid "Webpages"
-msgstr "Páginas web"
+#: ../../Zotlabs/Lib/Apps.php:603
+msgid "Undelete"
+msgstr "Recuperar"
-#: ../../include/nav.php:507
-msgid "View Webpages"
-msgstr "Ver páginas web"
+#: ../../Zotlabs/Lib/Apps.php:611
+msgid "Add to app-tray"
+msgstr "Añadir a la bandeja de aplicaciones"
-#: ../../include/nav.php:518 ../../Zotlabs/Lib/Apps.php:346
-msgid "Wiki"
-msgstr "Wiki"
+#: ../../Zotlabs/Lib/Apps.php:612
+msgid "Remove from app-tray"
+msgstr "Quitar de la bandeja de aplicaciones"
-#: ../../include/auth.php:194
-msgid "Delegation session ended."
-msgstr "Finalizó la sesión de la delegación."
+#: ../../Zotlabs/Lib/Apps.php:613
+msgid "Pin to navbar"
+msgstr "Fijar en la barra de navegación"
-#: ../../include/auth.php:198
-msgid "Logged out."
-msgstr "Desconectado/a."
+#: ../../Zotlabs/Lib/Apps.php:614
+msgid "Unpin from navbar"
+msgstr "Quitar de la barra de navegación"
-#: ../../include/auth.php:297
-msgid "Email validation is incomplete. Please check your email."
-msgstr "La validación del correo electrónico está incompleta. Por favor, compruebe su correo electrónico."
+#: ../../Zotlabs/Lib/Permcat.php:83
+msgctxt "permcat"
+msgid "Default"
+msgstr "Predeterminado"
-#: ../../include/auth.php:313
-msgid "Failed authentication"
-msgstr "Autenticación fallida."
+#: ../../Zotlabs/Lib/Connect.php:46 ../../Zotlabs/Lib/Connect.php:146
+msgid "Channel is blocked on this site."
+msgstr "El canal está bloqueado en este sitio."
-#: ../../include/datetime.php:58 ../../Zotlabs/Widget/Newmember.php:56
-#: ../../Zotlabs/Module/Profiles.php:753
-msgid "Miscellaneous"
-msgstr "Varios"
+#: ../../Zotlabs/Lib/Connect.php:51
+msgid "Channel location missing."
+msgstr "Falta la dirección del canal."
-#: ../../include/datetime.php:140
-msgid "Birthday"
-msgstr "Cumpleaños"
+#: ../../Zotlabs/Lib/Connect.php:104
+msgid "Remote channel or protocol unavailable."
+msgstr "Canal remoto o protocolo no disponible."
-#: ../../include/datetime.php:140
-msgid "Age: "
-msgstr "Edad:"
+#: ../../Zotlabs/Lib/Connect.php:140
+msgid "Channel discovery failed."
+msgstr "El intento de acceder al canal ha fallado."
-#: ../../include/datetime.php:140
-msgid "YYYY-MM-DD or MM-DD"
-msgstr "AAAA-MM-DD o MM-DD"
+#: ../../Zotlabs/Lib/Connect.php:158
+msgid "Protocol disabled."
+msgstr "Protocolo deshabilitado."
-#: ../../include/datetime.php:238 ../../boot.php:2764
-msgid "never"
-msgstr "nunca"
+#: ../../Zotlabs/Lib/Connect.php:170
+msgid "Cannot connect to yourself."
+msgstr "No puede conectarse consigo mismo."
-#: ../../include/datetime.php:244
-msgid "less than a second ago"
-msgstr "hace un instante"
+#: ../../Zotlabs/Lib/Connect.php:275
+msgid "error saving data"
+msgstr "error guardando los datos"
-#: ../../include/datetime.php:262
+#: ../../Zotlabs/Lib/Libsync.php:818
#, php-format
-msgctxt "e.g. 22 hours ago, 1 minute ago"
-msgid "%1$d %2$s ago"
-msgstr "hace %1$d %2$s"
-
-#: ../../include/datetime.php:273
-msgctxt "relative_date"
-msgid "year"
-msgid_plural "years"
-msgstr[0] "año"
-msgstr[1] "años"
-msgstr[2] "años"
+msgid "Unable to verify site signature for %s"
+msgstr "No ha sido posible de verificar la firma del sitio para %s"
-#: ../../include/datetime.php:276
-msgctxt "relative_date"
-msgid "month"
-msgid_plural "months"
-msgstr[0] "mes"
-msgstr[1] "meses"
-msgstr[2] "meses"
+#: ../../Zotlabs/Lib/Enotify.php:60
+msgid "$Projectname Notification"
+msgstr "Notificación de $Projectname"
-#: ../../include/datetime.php:279
-msgctxt "relative_date"
-msgid "week"
-msgid_plural "weeks"
-msgstr[0] "semana"
-msgstr[1] "semanas"
-msgstr[2] "semanas"
+#: ../../Zotlabs/Lib/Enotify.php:63
+msgid "Thank You,"
+msgstr "Gracias,"
-#: ../../include/datetime.php:282
-msgctxt "relative_date"
-msgid "day"
-msgid_plural "days"
-msgstr[0] "día"
-msgstr[1] "días"
-msgstr[2] "días"
+#: ../../Zotlabs/Lib/Enotify.php:66
+#, php-format
+msgid "This email was sent by %1$s at %2$s."
+msgstr "Este email ha sido enviado por %1$s a %2$s."
-#: ../../include/datetime.php:285
-msgctxt "relative_date"
-msgid "hour"
-msgid_plural "hours"
-msgstr[0] "hora"
-msgstr[1] "horas"
-msgstr[2] "horas"
+#: ../../Zotlabs/Lib/Enotify.php:67
+#, php-format
+msgid ""
+"To stop receiving these messages, please adjust your Notification Settings "
+"at %s"
+msgstr "Para dejar de recibir estos mensajes, por favor ajuste la configuración de notificación en %s"
-#: ../../include/datetime.php:288
-msgctxt "relative_date"
-msgid "minute"
-msgid_plural "minutes"
-msgstr[0] "minuto"
-msgstr[1] "minutos"
-msgstr[2] "minutos"
+#: ../../Zotlabs/Lib/Enotify.php:68
+#, php-format
+msgid "To stop receiving these messages, please adjust your %s."
+msgstr "Para dejar de recibir estos mensajes, por favor, ajuste su %s"
-#: ../../include/datetime.php:291
-msgctxt "relative_date"
-msgid "second"
-msgid_plural "seconds"
-msgstr[0] "segundo"
-msgstr[1] "segundos"
-msgstr[2] "segundos"
+#: ../../Zotlabs/Lib/Enotify.php:68
+#: ../../Zotlabs/Module/Settings/Channel.php:241
+msgid "Notification Settings"
+msgstr "Configuración de las notificaciones"
-#: ../../include/datetime.php:520
+#: ../../Zotlabs/Lib/Enotify.php:123
#, php-format
-msgid "%1$s's birthday"
-msgstr "Cumpleaños de %1$s"
+msgid "%s <!item_type!>"
+msgstr "%s <!item_type!>"
-#: ../../include/datetime.php:521
+#: ../../Zotlabs/Lib/Enotify.php:131
#, php-format
-msgid "Happy Birthday %1$s"
-msgstr "Feliz cumpleaños %1$s"
+msgid "[$Projectname:Notify] New direct message received at %s"
+msgstr "[$Projectname:Aviso] Nuevo mensaje directo recibido en %s"
-#: ../../include/cdav.php:157
-msgid "INVALID EVENT DISMISSED!"
-msgstr "¡EVENTO NO VÁLIDO RECHAZADO!"
+#: ../../Zotlabs/Lib/Enotify.php:133
+#, php-format
+msgid "%1$s sent you a new direct message at %2$s"
+msgstr "%1$s le ha enviado un nuevo mensaje directo en %2$s."
-#: ../../include/cdav.php:158
-msgid "Summary: "
-msgstr "Resumen: "
+#: ../../Zotlabs/Lib/Enotify.php:134
+#, php-format
+msgid "%1$s sent you %2$s."
+msgstr "%1$s le ha enviado %2$s."
-#: ../../include/cdav.php:158 ../../include/cdav.php:159
-#: ../../include/cdav.php:167 ../../include/conversation.php:1214
-#: ../../Zotlabs/Widget/Album.php:90 ../../Zotlabs/Widget/Pinned.php:271
-#: ../../Zotlabs/Widget/Portfolio.php:99
-#: ../../Zotlabs/Module/Embedphotos.php:177
-#: ../../Zotlabs/Module/Photos.php:799 ../../Zotlabs/Module/Photos.php:1259
-#: ../../Zotlabs/Lib/Activity.php:1604 ../../Zotlabs/Lib/Apps.php:1151
-#: ../../Zotlabs/Lib/Apps.php:1235
-msgid "Unknown"
-msgstr "Desconocido"
+#: ../../Zotlabs/Lib/Enotify.php:134
+msgid "a direct message"
+msgstr "un mensaje directo"
-#: ../../include/cdav.php:159
-msgid "Date: "
-msgstr "Fecha: "
+#: ../../Zotlabs/Lib/Enotify.php:135
+#, php-format
+msgid "Please visit %s to view and/or reply to your direct messages."
+msgstr "Por favor visite %s para ver y/o responder a su mensaje directo."
-#: ../../include/cdav.php:160 ../../include/cdav.php:168
-msgid "Reason: "
-msgstr "Razón: "
+#: ../../Zotlabs/Lib/Enotify.php:148
+msgid "commented on"
+msgstr "ha comentado sobre "
-#: ../../include/cdav.php:166
-msgid "INVALID CARD DISMISSED!"
-msgstr "¡TARJETA NO VÁLIDA RECHAZADA!"
+#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:310
+msgid "liked"
+msgstr "ha gustado de "
-#: ../../include/cdav.php:167
-msgid "Name: "
-msgstr "Nombre: "
+#: ../../Zotlabs/Lib/Enotify.php:164 ../../Zotlabs/Lib/Enotify.php:310
+msgid "disliked"
+msgstr "no ha gustado de "
-#: ../../include/conversation.php:145 ../../Zotlabs/Module/Like.php:184
-msgid "channel"
-msgstr "el canal"
+#: ../../Zotlabs/Lib/Enotify.php:169
+msgid "voted on"
+msgstr "votado en "
-#: ../../include/conversation.php:193
+#: ../../Zotlabs/Lib/Enotify.php:212
#, php-format
-msgid "likes %1$s's %2$s"
-msgstr "gusta de %2$s de %1$s"
+msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
+msgstr "%1$s%2$s [zrl=%3$s ]un %4$s[/zrl]"
-#: ../../include/conversation.php:196
+#: ../../Zotlabs/Lib/Enotify.php:220
#, php-format
-msgid "doesn't like %1$s's %2$s"
-msgstr "no gusta de %2$s de %1$s"
+msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
+msgstr "%1$s %2$s[zrl=%3$s]%5$s de %4$s[/zrl]"
-#: ../../include/conversation.php:236 ../../include/conversation.php:238
+#: ../../Zotlabs/Lib/Enotify.php:229 ../../Zotlabs/Lib/Enotify.php:314
#, php-format
-msgid "%1$s is now connected with %2$s"
-msgstr "%1$s ahora está conectado/a con %2$s"
+msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
+msgstr "%1$s %2$s [zrl=%3$s]su %4$s[/zrl]"
-#: ../../include/conversation.php:273
+#: ../../Zotlabs/Lib/Enotify.php:241
#, php-format
-msgid "%1$s poked %2$s"
-msgstr "%1$s ha dado un toque a %2$s"
+msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
+msgstr "[$Projectname:Aviso] Comentario moderado en la conversación #%1$d por %2$s"
-#: ../../include/conversation.php:296 ../../Zotlabs/Module/Mood.php:76
+#: ../../Zotlabs/Lib/Enotify.php:243
#, php-format
-msgctxt "mood"
-msgid "%1$s is %2$s"
-msgstr "%1$s está %2$s"
+msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
+msgstr "[$Projectname:Aviso] Nuevo comentario de %2$s en la conversación #%1$d"
-#: ../../include/conversation.php:526 ../../Zotlabs/Lib/ThreadItem.php:508
-msgid "This is an unsaved preview"
-msgstr "Esta es una previsualización sin guardar"
+#: ../../Zotlabs/Lib/Enotify.php:244
+#, php-format
+msgid "%1$s commented on an item/conversation you have been following"
+msgstr "%1$sha comentado un elemento/conversación que ha estado siguiendo."
-#: ../../include/conversation.php:659 ../../Zotlabs/Module/Photos.php:1119
-msgctxt "title"
-msgid "Likes"
-msgstr "Me gusta"
+#: ../../Zotlabs/Lib/Enotify.php:247 ../../Zotlabs/Lib/Enotify.php:334
+#: ../../Zotlabs/Lib/Enotify.php:350 ../../Zotlabs/Lib/Enotify.php:374
+#: ../../Zotlabs/Lib/Enotify.php:391 ../../Zotlabs/Lib/Enotify.php:404
+#, php-format
+msgid "Please visit %s to view and/or reply to the conversation."
+msgstr "Para ver o comentar la conversación, visite %s"
-#: ../../include/conversation.php:660 ../../Zotlabs/Module/Photos.php:1119
-msgctxt "title"
-msgid "Dislikes"
-msgstr "No me gusta"
+#: ../../Zotlabs/Lib/Enotify.php:251 ../../Zotlabs/Lib/Enotify.php:252
+#, php-format
+msgid "Please visit %s to approve or reject this comment."
+msgstr "Por favor, visite %s para aprobar o rechazar este comentario."
-#: ../../include/conversation.php:661 ../../Zotlabs/Widget/Pinned.php:80
-#: ../../Zotlabs/Module/Photos.php:1120
-msgctxt "title"
-msgid "Agree"
-msgstr "De acuerdo"
+#: ../../Zotlabs/Lib/Enotify.php:330
+#, php-format
+msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
+msgstr "[$Projectname:Aviso] \"Me gusta\" de %2$s en la conversación #%1$d"
-#: ../../include/conversation.php:662 ../../Zotlabs/Widget/Pinned.php:81
-#: ../../Zotlabs/Module/Photos.php:1120
-msgctxt "title"
-msgid "Disagree"
-msgstr "En desacuerdo"
+#: ../../Zotlabs/Lib/Enotify.php:331
+#, php-format
+msgid "%1$s liked an item/conversation you created"
+msgstr "A %1$s le ha gustado un elemento o conversación que ha creado usted."
-#: ../../include/conversation.php:663 ../../Zotlabs/Widget/Pinned.php:82
-#: ../../Zotlabs/Module/Photos.php:1120
-msgctxt "title"
-msgid "Abstain"
-msgstr "Abstención"
+#: ../../Zotlabs/Lib/Enotify.php:342
+#, php-format
+msgid "[$Projectname:Notify] %s posted to your profile wall"
+msgstr "[$Projectname:Aviso] %s ha publicado una entrada en su página de inicio del perfil (\"muro\")"
-#: ../../include/conversation.php:664 ../../Zotlabs/Widget/Pinned.php:69
-#: ../../Zotlabs/Module/Photos.php:1121
-msgctxt "title"
-msgid "Attending"
-msgstr "Participaré"
+#: ../../Zotlabs/Lib/Enotify.php:344
+#, php-format
+msgid "%1$s posted to your profile wall at %2$s"
+msgstr "%1$s ha publicado en su muro en %2$s"
-#: ../../include/conversation.php:665 ../../Zotlabs/Widget/Pinned.php:70
-#: ../../Zotlabs/Module/Photos.php:1121
-msgctxt "title"
-msgid "Not attending"
-msgstr "No participaré"
+#: ../../Zotlabs/Lib/Enotify.php:346
+#, php-format
+msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
+msgstr "%1$sha publicado en [zrl=%2$s]su muro[/zrl]"
-#: ../../include/conversation.php:666 ../../Zotlabs/Widget/Pinned.php:71
-#: ../../Zotlabs/Module/Photos.php:1121
-msgctxt "title"
-msgid "Might attend"
-msgstr "Quizá participe"
+#: ../../Zotlabs/Lib/Enotify.php:368
+#, php-format
+msgid "[$Projectname:Notify] %s tagged you"
+msgstr "[$Projectname:Aviso] %s le ha etiquetado"
-#: ../../include/conversation.php:736
-msgid "Select"
-msgstr "Seleccionar"
+#: ../../Zotlabs/Lib/Enotify.php:369
+#, php-format
+msgid "%1$s tagged you at %2$s"
+msgstr "%1$sle ha etiquetado en %2$s"
-#: ../../include/conversation.php:743 ../../Zotlabs/Lib/ThreadItem.php:270
-msgid "Toggle Star Status"
-msgstr "Activar o desactivar el estado de entrada preferida"
+#: ../../Zotlabs/Lib/Enotify.php:370
+#, php-format
+msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
+msgstr "%1$s [zrl=%2$s]le ha etiquetado[/zrl]."
-#: ../../include/conversation.php:749
-msgid "Private Message"
-msgstr "Mensaje Privado"
+#: ../../Zotlabs/Lib/Enotify.php:381
+#, php-format
+msgid "[$Projectname:Notify] %1$s poked you"
+msgstr "[$Projectname:Aviso] %1$s le ha dado un toque"
-#: ../../include/conversation.php:758 ../../Zotlabs/Widget/Pinned.php:91
-#: ../../Zotlabs/Lib/ThreadItem.php:280
-msgid "Message signature validated"
-msgstr "Firma de mensaje validada"
+#: ../../Zotlabs/Lib/Enotify.php:382
+#, php-format
+msgid "%1$s poked you at %2$s"
+msgstr "%1$sle ha dado un toque en %2$s"
-#: ../../include/conversation.php:759 ../../Zotlabs/Widget/Pinned.php:92
-#: ../../Zotlabs/Lib/ThreadItem.php:281
-msgid "Message signature incorrect"
-msgstr "Firma de mensaje incorrecta"
+#: ../../Zotlabs/Lib/Enotify.php:383
+#, php-format
+msgid "%1$s [zrl=%2$s]poked you[/zrl]."
+msgstr "%1$s [zrl=%2$s] le ha dado un toque[/zrl]."
-#: ../../include/conversation.php:796
-#: ../../Zotlabs/Module/Admin/Accounts.php:318
-#: ../../Zotlabs/Module/Connections.php:349
-#: ../../Zotlabs/Module/Connections.php:400
-msgid "Approve"
-msgstr "Aprobar"
+#: ../../Zotlabs/Lib/Enotify.php:398
+#, php-format
+msgid "[$Projectname:Notify] %s tagged your post"
+msgstr "[$Projectname:Aviso] %s ha etiquetado su entrada"
-#: ../../include/conversation.php:802
+#: ../../Zotlabs/Lib/Enotify.php:399
#, php-format
-msgid "View %s's profile @ %s"
-msgstr "Ver el perfil @ %s de %s"
+msgid "%1$s tagged your post at %2$s"
+msgstr "%1$sha etiquetado su entrada en %2$s"
-#: ../../include/conversation.php:823
-msgid "Categories:"
-msgstr "Temas:"
+#: ../../Zotlabs/Lib/Enotify.php:400
+#, php-format
+msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
+msgstr "%1$s ha etiquetado [zrl=%2$s]su entrada[/zrl]"
-#: ../../include/conversation.php:824
-msgid "Filed under:"
-msgstr "Archivado bajo:"
+#: ../../Zotlabs/Lib/Enotify.php:411
+msgid "[$Projectname:Notify] Introduction received"
+msgstr "[$Projectname:Aviso] Ha recibido una solicitud de conexión"
-#: ../../include/conversation.php:830 ../../Zotlabs/Widget/Pinned.php:135
-#: ../../Zotlabs/Lib/ThreadItem.php:437
+#: ../../Zotlabs/Lib/Enotify.php:412
#, php-format
-msgid "from %s"
-msgstr "desde %s"
+msgid "You've received an new connection request from '%1$s' at %2$s"
+msgstr "Ha recibido una nueva solicitud de conexión de '%1$s' en %2$s"
-#: ../../include/conversation.php:833 ../../Zotlabs/Widget/Pinned.php:138
-#: ../../Zotlabs/Lib/ThreadItem.php:440
+#: ../../Zotlabs/Lib/Enotify.php:413
#, php-format
-msgid "last edited: %s"
-msgstr "último cambio: %s"
+msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
+msgstr "Ha recibido [zrl=%1$s]una nueva solicitud de conexión[/zrl] de %2$s."
-#: ../../include/conversation.php:834 ../../Zotlabs/Widget/Pinned.php:139
-#: ../../Zotlabs/Lib/ThreadItem.php:441
+#: ../../Zotlabs/Lib/Enotify.php:416 ../../Zotlabs/Lib/Enotify.php:434
#, php-format
-msgid "Expires: %s"
-msgstr "Caduca: %s"
-
-#: ../../include/conversation.php:851 ../../Zotlabs/Module/Photos.php:1085
-#: ../../Zotlabs/Lib/ThreadItem.php:509
-msgid "Please wait"
-msgstr "Espere por favor"
-
-#: ../../include/conversation.php:952
-msgid "remove"
-msgstr "eliminar"
+msgid "You may visit their profile at %s"
+msgstr "Puede visitar su perfil en %s"
-#: ../../include/conversation.php:956
-msgid "Loading..."
-msgstr "Cargando..."
+#: ../../Zotlabs/Lib/Enotify.php:418
+#, php-format
+msgid "Please visit %s to approve or reject the connection request."
+msgstr "Por favor, visite %s para permitir o rechazar la solicitad de conexión."
-#: ../../include/conversation.php:957 ../../Zotlabs/Lib/ThreadItem.php:297
-msgid "Conversation Features"
-msgstr "Funciones de conversación "
+#: ../../Zotlabs/Lib/Enotify.php:425
+msgid "[$Projectname:Notify] Friend suggestion received"
+msgstr "[$Projectname:Aviso] Ha recibido una sugerencia de conexión"
-#: ../../include/conversation.php:958
-msgid "Delete Selected Items"
-msgstr "Eliminar elementos seleccionados"
+#: ../../Zotlabs/Lib/Enotify.php:426
+#, php-format
+msgid "You've received a friend suggestion from '%1$s' at %2$s"
+msgstr "Ha recibido una sugerencia de amistad de '%1$s' en %2$s"
-#: ../../include/conversation.php:994
-msgid "View Source"
-msgstr "Ver el código fuente de la entrada"
+#: ../../Zotlabs/Lib/Enotify.php:427
+#, php-format
+msgid ""
+"You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
+msgstr "Ha recibido [zrl=%1$s]una sugerencia de amistad[/zrl] para %2$s de %3$s."
-#: ../../include/conversation.php:1004
-msgid "Follow Thread"
-msgstr "Seguir este hilo"
+#: ../../Zotlabs/Lib/Enotify.php:432
+msgid "Name:"
+msgstr "Nombre:"
-#: ../../include/conversation.php:1013
-msgid "Unfollow Thread"
-msgstr "Dejar de seguir este hilo"
+#: ../../Zotlabs/Lib/Enotify.php:433
+msgid "Photo:"
+msgstr "Foto:"
-#: ../../include/conversation.php:1105 ../../Zotlabs/Module/Connedit.php:501
-msgid "Recent Activity"
-msgstr "Actividad reciente"
+#: ../../Zotlabs/Lib/Enotify.php:436
+#, php-format
+msgid "Please visit %s to approve or reject the suggestion."
+msgstr "Por favor, visite %s para aprobar o rechazar la sugerencia."
-#: ../../include/conversation.php:1117 ../../include/connections.php:112
-#: ../../include/channel.php:1610 ../../Zotlabs/Widget/Suggestions.php:51
-#: ../../Zotlabs/Widget/Follow.php:37 ../../Zotlabs/Module/Directory.php:369
-#: ../../Zotlabs/Module/Connections.php:356
-#: ../../Zotlabs/Module/Suggest.php:69
-msgid "Connect"
-msgstr "Conectar"
+#: ../../Zotlabs/Lib/Enotify.php:661
+msgid "[$Projectname:Notify]"
+msgstr "[$Projectname:Aviso]"
-#: ../../include/conversation.php:1129
-msgid "Edit Connection"
-msgstr "Editar conexión"
+#: ../../Zotlabs/Lib/Enotify.php:827
+msgid "created a new poll"
+msgstr "se ha creado una nueva encuesta"
-#: ../../include/conversation.php:1141 ../../Zotlabs/Module/Poke.php:197
-#: ../../Zotlabs/Lib/Apps.php:355
-msgid "Poke"
-msgstr "Toques y otras cosas"
+#: ../../Zotlabs/Lib/Enotify.php:827
+msgid "created a new post"
+msgstr "ha creado una nueva entrada"
-#: ../../include/conversation.php:1265
+#: ../../Zotlabs/Lib/Enotify.php:828
#, php-format
-msgid "%s likes this."
-msgstr "A %s le gusta esto."
+msgid "voted on %s's poll"
+msgstr "votado en la encuesta de %s"
-#: ../../include/conversation.php:1265
+#: ../../Zotlabs/Lib/Enotify.php:828
#, php-format
-msgid "%s doesn't like this."
-msgstr "A %s no le gusta esto."
+msgid "commented on %s's post"
+msgstr "ha comentado la entrada de %s"
-#: ../../include/conversation.php:1269
+#: ../../Zotlabs/Lib/Enotify.php:832
#, php-format
-msgid "<span %1$s>%2$d people</span> like this."
-msgid_plural "<span %1$s>%2$d people</span> like this."
-msgstr[0] "a <span %1$s>%2$d personas</span> le gusta esto."
-msgstr[1] "A <span %1$s>%2$d personas</span> les gusta esto."
-msgstr[2] "A <span %1$s>%2$d personas</span> les gusta esto."
+msgid "repeated %s's post"
+msgstr "repetida la entrada de %s"
-#: ../../include/conversation.php:1271
+#: ../../Zotlabs/Lib/Enotify.php:836
#, php-format
-msgid "<span %1$s>%2$d people</span> don't like this."
-msgid_plural "<span %1$s>%2$d people</span> don't like this."
-msgstr[0] "a <span %1$s>%2$d personas</span> no les gusta esto."
-msgstr[1] "A <span %1$s>%2$d personas</span> no les gusta esto."
-msgstr[2] "A <span %1$s>%2$d personas</span> no les gusta esto."
-
-#: ../../include/conversation.php:1277
-msgid "and"
-msgstr "y"
+msgid "liked %s's post"
+msgstr "Le ha gustado la entrada de %s"
-#: ../../include/conversation.php:1280
+#: ../../Zotlabs/Lib/Enotify.php:840
#, php-format
-msgid ", and %d other people"
-msgid_plural ", and %d other people"
-msgstr[0] ", y %d persona más"
-msgstr[1] ", y %d personas más"
-msgstr[2] ", y %d personas más"
+msgid "disliked %s's post"
+msgstr "No le ha gustado la entrada de %s"
-#: ../../include/conversation.php:1281
-#, php-format
-msgid "%s like this."
-msgstr "A %s le gusta esto."
+#: ../../Zotlabs/Lib/Enotify.php:844 ../../Zotlabs/Lib/Enotify.php:947
+msgid "shared a file with you"
+msgstr "compartió un archivo con usted"
-#: ../../include/conversation.php:1281
+#: ../../Zotlabs/Lib/Enotify.php:853
#, php-format
-msgid "%s don't like this."
-msgstr "A %s no le gusta esto."
-
-#: ../../include/conversation.php:1471
-msgid "Toggle poll"
-msgstr "Activar o desactivar encuestas"
-
-#: ../../include/conversation.php:1472
-msgid "Option"
-msgstr "Opción"
-
-#: ../../include/conversation.php:1473
-msgid "Add option"
-msgstr "Añadir una opción"
-
-#: ../../include/conversation.php:1474
-msgid "Minutes"
-msgstr "Minutos "
-
-#: ../../include/conversation.php:1474
-msgid "Hours"
-msgstr "Horas "
-
-#: ../../include/conversation.php:1474
-msgid "Days"
-msgstr "Días "
-
-#: ../../include/conversation.php:1475
-msgid "Allow multiple answers"
-msgstr "Permitir respuestas múltiples"
+msgid "edited a post dated %s"
+msgstr "ha editado una entrada %s"
-#: ../../include/conversation.php:1485
-msgid "Summary (optional)"
-msgstr "Sumario (opcional)"
+#: ../../Zotlabs/Lib/Enotify.php:856
+#, php-format
+msgid "edited a comment dated %s"
+msgstr "ha editado un comentario %s"
-#: ../../include/conversation.php:1760 ../../include/taxonomy.php:672
-#: ../../include/channel.php:1771 ../../Zotlabs/Module/Photos.php:1142
-#: ../../Zotlabs/Lib/ThreadItem.php:241
-msgctxt "noun"
-msgid "Like"
-msgid_plural "Likes"
-msgstr[0] "Me gusta"
-msgstr[1] "Me gusta"
-msgstr[2] "Me gusta"
+#: ../../Zotlabs/Lib/Enotify.php:932
+msgid "added your channel"
+msgstr "añadió este canal a sus conexiones"
-#: ../../include/conversation.php:1763 ../../Zotlabs/Module/Photos.php:1147
-#: ../../Zotlabs/Lib/ThreadItem.php:246
-msgctxt "noun"
-msgid "Dislike"
-msgid_plural "Dislikes"
-msgstr[0] "No me gusta"
-msgstr[1] "No me gusta"
-msgstr[2] "No me gusta"
+#: ../../Zotlabs/Lib/Enotify.php:962
+msgid "sent you a direct message"
+msgstr "enviarle un mensaje directo"
-#: ../../include/conversation.php:1766
-msgctxt "noun"
-msgid "Attending"
-msgid_plural "Attending"
-msgstr[0] "Participaré"
-msgstr[1] "Participaré"
-msgstr[2] "Participaré"
+#: ../../Zotlabs/Lib/Enotify.php:969
+msgid "g A l F d"
+msgstr "g A l d F"
-#: ../../include/conversation.php:1769
-msgctxt "noun"
-msgid "Not Attending"
-msgid_plural "Not Attending"
-msgstr[0] "No participaré"
-msgstr[1] "No participaré"
-msgstr[2] "No participaré"
+#: ../../Zotlabs/Lib/Enotify.php:972
+msgid "[today]"
+msgstr "[hoy]"
-#: ../../include/conversation.php:1772
-msgctxt "noun"
-msgid "Undecided"
-msgid_plural "Undecided"
-msgstr[0] "Indeciso/a"
-msgstr[1] "Indecisos/as"
-msgstr[2] "Indecisos/as"
+#: ../../Zotlabs/Lib/Enotify.php:982
+msgid "created an event"
+msgstr "se creó un evento"
-#: ../../include/conversation.php:1775
-msgctxt "noun"
-msgid "Agree"
-msgid_plural "Agrees"
-msgstr[0] "De acuerdo"
-msgstr[1] "De acuerdo"
-msgstr[2] "De acuerdo"
+#: ../../Zotlabs/Lib/Enotify.php:997
+msgid "status verified"
+msgstr "estado verificado"
-#: ../../include/conversation.php:1778
-msgctxt "noun"
-msgid "Disagree"
-msgid_plural "Disagrees"
-msgstr[0] "En desacuerdo"
-msgstr[1] "En desacuerdo"
-msgstr[2] "En desacuerdo"
+#: ../../Zotlabs/Lib/Libzotdir.php:163
+msgid "Directory Options"
+msgstr "Opciones del directorio"
-#: ../../include/conversation.php:1781
-msgctxt "noun"
-msgid "Abstain"
-msgid_plural "Abstains"
-msgstr[0] "se abstiene"
-msgstr[1] "Se abstienen"
-msgstr[2] "Se abstienen"
+#: ../../Zotlabs/Lib/Libzotdir.php:165
+msgid "Safe Mode"
+msgstr "Modo seguro"
-#: ../../include/selectors.php:17
-msgid "Select a profile to assign to this contact"
-msgstr "Seleccione un perfil para asignar a este contacto"
+#: ../../Zotlabs/Lib/Libzotdir.php:166
+msgid "Public Forums Only"
+msgstr "Solo foros públicos"
-#: ../../include/selectors.php:45
-msgid "Frequently"
-msgstr "Frecuentemente"
+#: ../../Zotlabs/Lib/Libzotdir.php:168
+msgid "This Website Only"
+msgstr "Solo este sitio web"
-#: ../../include/selectors.php:46
-msgid "Hourly"
-msgstr "Cada hora"
+#: ../../Zotlabs/Lib/Techlevels.php:10
+msgid "0. Beginner/Basic"
+msgstr "0. Principiante/Básico"
-#: ../../include/selectors.php:47
-msgid "Twice daily"
-msgstr "Dos veces al día"
+#: ../../Zotlabs/Lib/Techlevels.php:11
+msgid "1. Novice - not skilled but willing to learn"
+msgstr "1. Novato: no cualificado, pero dispuesto a aprender"
-#: ../../include/selectors.php:48
-msgid "Daily"
-msgstr "Diariamente"
+#: ../../Zotlabs/Lib/Techlevels.php:12
+msgid "2. Intermediate - somewhat comfortable"
+msgstr "2. Intermedio - algo cómodo"
-#: ../../include/selectors.php:49
-msgid "Weekly"
-msgstr "Semanalmente"
+#: ../../Zotlabs/Lib/Techlevels.php:13
+msgid "3. Advanced - very comfortable"
+msgstr "3. Avanzado - muy cómodo"
-#: ../../include/selectors.php:50
-msgid "Monthly"
-msgstr "Mensualmente"
+#: ../../Zotlabs/Lib/Techlevels.php:14
+msgid "4. Expert - I can write computer code"
+msgstr "4. Experto - Puedo escribir código informático"
-#: ../../include/selectors.php:64
-msgid "Currently Male"
-msgstr "Actualmente hombre"
+#: ../../Zotlabs/Lib/Techlevels.php:15
+msgid "5. Wizard - I probably know more than you do"
+msgstr "5. Colaborador - probablemente sé más que tú"
-#: ../../include/selectors.php:64
-msgid "Currently Female"
-msgstr "Actualmente mujer"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:67
+msgid "Source code of failed update: "
+msgstr "Código fuente de la actualización fallida: "
-#: ../../include/selectors.php:64
-msgid "Mostly Male"
-msgstr "Generalmente hombre"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:88
+#, php-format
+msgid "Update Error at %s"
+msgstr "Error de actualización en %s"
-#: ../../include/selectors.php:64
-msgid "Mostly Female"
-msgstr "Generalmente mujer"
+#: ../../Zotlabs/Lib/DB_Upgrade.php:94
+#, php-format
+msgid "Update %s failed. See error logs."
+msgstr "La actualización %s ha fallado. Mire el informe de errores."
-#: ../../include/selectors.php:64
-msgid "Transgender"
-msgstr "Transgénero"
+#: ../../Zotlabs/Lib/ThreadItem.php:108
+msgid "Restricted message"
+msgstr "Mensaje restringido"
-#: ../../include/selectors.php:64
-msgid "Intersex"
-msgstr "Intersexual"
+#: ../../Zotlabs/Lib/ThreadItem.php:115
+msgid "Direct message"
+msgstr "Mensaje directo"
-#: ../../include/selectors.php:64
-msgid "Transsexual"
-msgstr "Transexual"
+#: ../../Zotlabs/Lib/ThreadItem.php:120
+msgid "Public Policy"
+msgstr "Política pública"
-#: ../../include/selectors.php:64
-msgid "Hermaphrodite"
-msgstr "Hermafrodita"
+#: ../../Zotlabs/Lib/ThreadItem.php:152
+msgid "Privacy conflict. Discretion advised."
+msgstr "Conflicto de privacidad. Se aconseja discreción."
-#: ../../include/selectors.php:64 ../../include/channel.php:1716
-msgid "Neuter"
-msgstr "Neutral"
+#: ../../Zotlabs/Lib/ThreadItem.php:183 ../../Zotlabs/Storage/Browser.php:372
+msgid "Admin Delete"
+msgstr "Eliminar admin"
-#: ../../include/selectors.php:64 ../../include/channel.php:1718
-msgid "Non-specific"
-msgstr "No especificado"
+#: ../../Zotlabs/Lib/ThreadItem.php:186 ../../Zotlabs/Module/Filer.php:55
+msgid "Save to Folder"
+msgstr "Guardar en carpeta"
-#: ../../include/selectors.php:64
-msgid "Undecided"
-msgstr "Indeciso/a"
+#: ../../Zotlabs/Lib/ThreadItem.php:206 ../../Zotlabs/Widget/Pinned.php:73
+msgid "I will attend"
+msgstr "Participaré"
-#: ../../include/selectors.php:100 ../../include/selectors.php:119
-msgid "Males"
-msgstr "Hombres"
+#: ../../Zotlabs/Lib/ThreadItem.php:206 ../../Zotlabs/Widget/Pinned.php:73
+msgid "I will not attend"
+msgstr "No participaré"
-#: ../../include/selectors.php:100 ../../include/selectors.php:119
-msgid "Females"
-msgstr "Mujeres"
+#: ../../Zotlabs/Lib/ThreadItem.php:206 ../../Zotlabs/Widget/Pinned.php:73
+msgid "I might attend"
+msgstr "Quizá participe"
-#: ../../include/selectors.php:100
-msgid "Gay"
-msgstr "Homosexual"
+#: ../../Zotlabs/Lib/ThreadItem.php:229 ../../Zotlabs/Lib/ThreadItem.php:242
+#: ../../Zotlabs/Module/Photos.php:1124 ../../Zotlabs/Module/Photos.php:1136
+msgid "View all"
+msgstr "Ver todo"
-#: ../../include/selectors.php:100
-msgid "Lesbian"
-msgstr "Lesbiana"
+#: ../../Zotlabs/Lib/ThreadItem.php:310 ../../Zotlabs/Module/Photos.php:1071
+msgid "I like this (toggle)"
+msgstr "Me gusta (cambiar)"
-#: ../../include/selectors.php:100
-msgid "No Preference"
-msgstr "Sin preferencias"
+#: ../../Zotlabs/Lib/ThreadItem.php:311 ../../Zotlabs/Module/Photos.php:1072
+msgid "I don't like this (toggle)"
+msgstr "No me gusta esto (cambiar)"
-#: ../../include/selectors.php:100
-msgid "Bisexual"
-msgstr "Bisexual"
+#: ../../Zotlabs/Lib/ThreadItem.php:312
+msgid "Reply on this comment"
+msgstr "Responder a este comentario"
-#: ../../include/selectors.php:100
-msgid "Autosexual"
-msgstr "Autosexual"
+#: ../../Zotlabs/Lib/ThreadItem.php:312
+msgid "reply"
+msgstr "responder"
-#: ../../include/selectors.php:100
-msgid "Abstinent"
-msgstr "Casto/a"
+#: ../../Zotlabs/Lib/ThreadItem.php:312
+msgid "Reply to"
+msgstr "Responder a "
-#: ../../include/selectors.php:100
-msgid "Virgin"
-msgstr "Virgen"
+#: ../../Zotlabs/Lib/ThreadItem.php:324 ../../Zotlabs/Widget/Pinned.php:102
+msgid "Share This"
+msgstr "Compartir esto"
-#: ../../include/selectors.php:100
-msgid "Deviant"
-msgstr "Fuera de lo común"
+#: ../../Zotlabs/Lib/ThreadItem.php:324 ../../Zotlabs/Widget/Pinned.php:102
+msgid "share"
+msgstr "compartir"
-#: ../../include/selectors.php:100
-msgid "Fetish"
-msgstr "Fetichista"
+#: ../../Zotlabs/Lib/ThreadItem.php:335
+msgid "Delivery Report"
+msgstr "Informe de transmisión"
-#: ../../include/selectors.php:100
-msgid "Oodles"
-msgstr "Orgías"
+#: ../../Zotlabs/Lib/ThreadItem.php:355
+#, php-format
+msgid "%d Comment"
+msgid_plural "%d Comments"
+msgstr[0] "%d comentario"
+msgstr[1] "%d comentarios"
+msgstr[2] "%d comentarios"
-#: ../../include/selectors.php:100
-msgid "Nonsexual"
-msgstr "Asexual"
+#: ../../Zotlabs/Lib/ThreadItem.php:356
+#, php-format
+msgid "%d unseen"
+msgstr "%dno visto/a vistos/as"
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Single"
-msgstr "Soltero/a"
+#: ../../Zotlabs/Lib/ThreadItem.php:406
+msgid "Forum"
+msgstr "Foro"
-#: ../../include/selectors.php:138
-msgid "Lonely"
-msgstr "Solo/a"
+#: ../../Zotlabs/Lib/ThreadItem.php:413
+msgid "to"
+msgstr "a"
-#: ../../include/selectors.php:138
-msgid "Available"
-msgstr "Disponible"
+#: ../../Zotlabs/Lib/ThreadItem.php:414 ../../Zotlabs/Widget/Pinned.php:130
+#: ../../Zotlabs/Widget/Messages.php:137
+msgid "via"
+msgstr "mediante"
-#: ../../include/selectors.php:138
-msgid "Unavailable"
-msgstr "No disponible"
+#: ../../Zotlabs/Lib/ThreadItem.php:415
+msgid "Wall-to-Wall"
+msgstr "De página del perfil a página del perfil (de \"muro\" a \"muro\")"
-#: ../../include/selectors.php:138
-msgid "Has crush"
-msgstr "Enamorado/a"
+#: ../../Zotlabs/Lib/ThreadItem.php:416
+msgid "via Wall-To-Wall:"
+msgstr "Mediante el procedimiento página del perfil a página del perfil (de \"muro\" a \"muro\")"
-#: ../../include/selectors.php:138
-msgid "Infatuated"
-msgstr "Apasionado/a"
+#: ../../Zotlabs/Lib/ThreadItem.php:444
+msgid "Attend"
+msgstr "Participar o asistir"
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Dating"
-msgstr "Saliendo con alguien"
+#: ../../Zotlabs/Lib/ThreadItem.php:445 ../../Zotlabs/Widget/Pinned.php:144
+msgid "Attendance Options"
+msgstr "Opciones de participación o asistencia"
-#: ../../include/selectors.php:138
-msgid "Unfaithful"
-msgstr "Infiel"
+#: ../../Zotlabs/Lib/ThreadItem.php:447 ../../Zotlabs/Widget/Pinned.php:145
+msgid "Voting Options"
+msgstr "Opciones de votación"
-#: ../../include/selectors.php:138
-msgid "Sex Addict"
-msgstr "Con adicción al sexo"
+#: ../../Zotlabs/Lib/ThreadItem.php:462
+msgid "Go to previous comment"
+msgstr "Ir al comentario anterior"
-#: ../../include/selectors.php:138 ../../include/channel.php:456
-#: ../../include/channel.php:459 ../../Zotlabs/Widget/Affinity.php:38
-#: ../../Zotlabs/Module/Contactedit.php:297
-#: ../../Zotlabs/Module/Connedit.php:581
-msgid "Friends"
-msgstr "Amigos/as"
+#: ../../Zotlabs/Lib/ThreadItem.php:471 ../../Zotlabs/Widget/Pinned.php:157
+msgid "Pinned post"
+msgstr "Entradas ancladas"
-#: ../../include/selectors.php:138
-msgid "Friends/Benefits"
-msgstr "Amigos con algo extra"
+#: ../../Zotlabs/Lib/ThreadItem.php:475
+msgid "Add to Calendar"
+msgstr "Añadir al calendario"
-#: ../../include/selectors.php:138
-msgid "Casual"
-msgstr "Casual"
+#: ../../Zotlabs/Lib/ThreadItem.php:483
+#: ../../Zotlabs/Module/Notifications.php:111
+msgid "Mark all seen"
+msgstr "Marcar todo como visto"
-#: ../../include/selectors.php:138
-msgid "Engaged"
-msgstr "Prometido/a"
+#: ../../Zotlabs/Lib/ThreadItem.php:490 ../../Zotlabs/Module/Photos.php:1259
+msgctxt "noun"
+msgid "Likes"
+msgstr "Me gusta"
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Married"
-msgstr "Casado/a"
+#: ../../Zotlabs/Lib/ThreadItem.php:491 ../../Zotlabs/Module/Photos.php:1260
+msgctxt "noun"
+msgid "Dislikes"
+msgstr "No me gusta"
-#: ../../include/selectors.php:138
-msgid "Imaginarily married"
-msgstr "Casado/a en sueños"
+#: ../../Zotlabs/Lib/ThreadItem.php:825 ../../Zotlabs/Module/Photos.php:1090
+#: ../../Zotlabs/Module/Photos.php:1203
+msgid "This is you"
+msgstr "Este es usted"
-#: ../../include/selectors.php:138
-msgid "Partners"
-msgstr "Pareja"
+#: ../../Zotlabs/Lib/ThreadItem.php:834
+msgid "Image"
+msgstr "Imagen"
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Cohabiting"
-msgstr "Cohabitando"
+#: ../../Zotlabs/Lib/ThreadItem.php:836
+msgid "Insert Link"
+msgstr "Insertar enlace"
-#: ../../include/selectors.php:138
-msgid "Common law"
-msgstr "Matrimonio tradicional"
+#: ../../Zotlabs/Lib/ThreadItem.php:837
+msgid "Video"
+msgstr "Vídeo"
-#: ../../include/selectors.php:138
-msgid "Happy"
-msgstr "Felíz"
+#: ../../Zotlabs/Lib/ThreadItem.php:846
+msgid "Your full name (required)"
+msgstr "Su nombre completo (requerido)"
-#: ../../include/selectors.php:138
-msgid "Not looking"
-msgstr "No estoy buscando"
+#: ../../Zotlabs/Lib/ThreadItem.php:847
+msgid "Your email address (required)"
+msgstr "Su dirección de correo electrónico (requerido)"
-#: ../../include/selectors.php:138
-msgid "Swinger"
-msgstr "Libertino"
+#: ../../Zotlabs/Lib/ThreadItem.php:848
+msgid "Your website URL (optional)"
+msgstr "La URL de su sitio web (opcional)"
-#: ../../include/selectors.php:138
-msgid "Betrayed"
-msgstr "Engañado/a"
+#: ../../Zotlabs/Lib/Activity.php:2289
+#, php-format
+msgid "Likes %1$s's %2$s"
+msgstr "Gusta de %2$sde %1$s"
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Separated"
-msgstr "Separado/a"
+#: ../../Zotlabs/Lib/Activity.php:2292
+#, php-format
+msgid "Doesn't like %1$s's %2$s"
+msgstr "No le gusta %2$sde %1$s"
-#: ../../include/selectors.php:138
-msgid "Unstable"
-msgstr "Inestable"
+#: ../../Zotlabs/Lib/Activity.php:2298
+#, php-format
+msgid "Will attend %s's event"
+msgstr "Asistirá al evento de %s"
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Divorced"
-msgstr "Divorciado/a"
+#: ../../Zotlabs/Lib/Activity.php:2301
+#, php-format
+msgid "Will not attend %s's event"
+msgstr "No asistirá al evento de %s"
-#: ../../include/selectors.php:138
-msgid "Imaginarily divorced"
-msgstr "Divorciado/a en sueños"
+#: ../../Zotlabs/Lib/Activity.php:2304
+#, php-format
+msgid "May attend %s's event"
+msgstr "Puede asistir al evento de %s"
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "Widowed"
-msgstr "Viudo/a"
+#: ../../Zotlabs/Lib/Activity.php:2307
+#, php-format
+msgid "May not attend %s's event"
+msgstr "Puede no asistir al evento de %s"
-#: ../../include/selectors.php:138
-msgid "Uncertain"
-msgstr "Indeterminado"
+#: ../../Zotlabs/Lib/Chatroom.php:25
+msgid "Missing room name"
+msgstr "Sala de chat sin nombre"
-#: ../../include/selectors.php:138 ../../include/selectors.php:155
-msgid "It's complicated"
-msgstr "Es complicado"
+#: ../../Zotlabs/Lib/Chatroom.php:34
+msgid "Duplicate room name"
+msgstr "Nombre de sala duplicado."
-#: ../../include/selectors.php:138
-msgid "Don't care"
-msgstr "No me importa"
+#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92
+msgid "Invalid room specifier."
+msgstr "Especificador de sala no válido."
-#: ../../include/selectors.php:138
-msgid "Ask me"
-msgstr "Pregúnteme"
+#: ../../Zotlabs/Lib/Chatroom.php:124
+msgid "Room not found."
+msgstr "Sala no encontrada."
-#: ../../include/connections.php:136
-msgid "New window"
-msgstr "Nueva ventana"
+#: ../../Zotlabs/Lib/Chatroom.php:145
+msgid "Room is full"
+msgstr "La sala está llena."
-#: ../../include/connections.php:137
-msgid "Open the selected location in a different window or browser tab"
-msgstr "Abrir la dirección seleccionada en una ventana o pestaña aparte"
+#: ../../Zotlabs/Lib/Libzot.php:696
+msgid "Unable to verify channel signature"
+msgstr "No ha sido posible de verificar la firma del canal"
-#: ../../include/group.php:23
+#: ../../Zotlabs/Lib/AccessList.php:26
msgid ""
-"A deleted group with this name was revived. Existing item permissions "
-"<strong>may</strong> apply to this group and any future members. If this is "
-"not what you intended, please create another group with a different name."
+"A deleted privacy group with this name was revived. Existing item "
+"permissions <strong>may</strong> apply to this privacy group and any future "
+"members. If this is not what you intended, please create another privacy "
+"group with a different name."
msgstr "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente."
-#: ../../include/group.php:271
-msgid "Add new connections to this privacy group"
-msgstr "Añadir conexiones nuevas a este grupo de canales"
+#: ../../Zotlabs/Lib/AccessList.php:268
+msgid "Select a privacy group"
+msgstr "Seleccionar un grupo privado de canales"
-#: ../../include/group.php:305
-msgid "edit"
-msgstr "editar"
+#: ../../Zotlabs/Module/Service_limits.php:23
+msgid "No service class restrictions found."
+msgstr "No se han encontrado restricciones sobre esta clase de servicio."
-#: ../../include/group.php:327 ../../include/acl_selectors.php:87
-#: ../../Zotlabs/Widget/Activity_filter.php:95
-#: ../../Zotlabs/Module/Group.php:143 ../../Zotlabs/Lib/Apps.php:368
-msgid "Privacy Groups"
-msgstr "Grupos de canales"
+#: ../../Zotlabs/Module/Search.php:23 ../../Zotlabs/Module/Directory.php:72
+#: ../../Zotlabs/Module/Directory.php:77 ../../Zotlabs/Module/Display.php:28
+#: ../../Zotlabs/Module/Viewconnections.php:23
+#: ../../Zotlabs/Module/Photos.php:511
+msgid "Public access denied."
+msgstr "Acceso público denegado."
-#: ../../include/group.php:328
-msgid "Edit group"
-msgstr "Editar grupo"
+#: ../../Zotlabs/Module/Search.php:250
+#, php-format
+msgid "Items tagged with: %s"
+msgstr "elementos etiquetados con: %s"
-#: ../../include/group.php:329
-msgid "Manage privacy groups"
-msgstr "Gestionar grupos de privacidad"
+#: ../../Zotlabs/Module/Search.php:252
+#, php-format
+msgid "Search results for: %s"
+msgstr "Resultados de la búsqueda para: %s"
-#: ../../include/group.php:330
-msgid "Channels not in any privacy group"
-msgstr "Sin canales en ningún grupo"
+#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65
+msgid "Location not found."
+msgstr "Dirección no encontrada."
-#: ../../include/group.php:332 ../../Zotlabs/Widget/Savedsearch.php:90
-msgid "add"
-msgstr "añadir"
+#: ../../Zotlabs/Module/Locs.php:74
+msgid "Location lookup failed."
+msgstr "Ha fallado la búsqueda de la dirección."
-#: ../../include/taxonomy.php:323
-msgid "Trending"
-msgstr "Etiquetas populares"
+#: ../../Zotlabs/Module/Locs.php:78
+msgid ""
+"Please select another location to become primary before removing the primary"
+" location."
+msgstr "Por favor, seleccione una copia de su canal (un clon) para convertirlo en primario antes de eliminar su canal principal."
-#: ../../include/taxonomy.php:323 ../../include/taxonomy.php:460
-#: ../../include/taxonomy.php:481 ../../Zotlabs/Widget/Tagcloud.php:27
-msgid "Tags"
-msgstr "Etiquetas"
+#: ../../Zotlabs/Module/Locs.php:106
+msgid "Syncing locations"
+msgstr "Sincronizando ubicaciones"
-#: ../../include/taxonomy.php:561
-msgid "Keywords"
-msgstr "Palabras clave"
+#: ../../Zotlabs/Module/Locs.php:115
+msgid "No locations found."
+msgstr "No encontrada ninguna dirección."
-#: ../../include/taxonomy.php:582
-msgid "have"
-msgstr "tener"
+#: ../../Zotlabs/Module/Locs.php:120
+msgid "Manage Channel Locations"
+msgstr "Gestionar las direcciones del canal"
-#: ../../include/taxonomy.php:582
-msgid "has"
-msgstr "tiene"
+#: ../../Zotlabs/Module/Locs.php:122 ../../Zotlabs/Module/Connedit.php:739
+#: ../../Zotlabs/Module/Admin/Channels.php:160
+#: ../../Zotlabs/Module/Cdav.php:1381 ../../Zotlabs/Module/Profiles.php:473
+msgid "Address"
+msgstr "Dirección"
-#: ../../include/taxonomy.php:583
-msgid "want"
-msgstr "quiero"
+#: ../../Zotlabs/Module/Locs.php:124 ../../Zotlabs/Module/Menu.php:177
+msgid "Drop"
+msgstr "Eliminar"
-#: ../../include/taxonomy.php:583
-msgid "wants"
-msgstr "quiere"
+#: ../../Zotlabs/Module/Locs.php:126
+msgid "Sync Now"
+msgstr "Sincronizar ahora"
-#: ../../include/taxonomy.php:584 ../../Zotlabs/Lib/ThreadItem.php:317
-msgid "like"
-msgstr "me gusta"
+#: ../../Zotlabs/Module/Locs.php:127
+msgid "Please wait several minutes between consecutive operations."
+msgstr "Por favor, espere algunos minutos entre operaciones consecutivas."
-#: ../../include/taxonomy.php:584
-msgid "likes"
-msgstr "gusta de"
+#: ../../Zotlabs/Module/Locs.php:128
+msgid ""
+"When possible, drop a location by logging into that website/hub and removing"
+" your channel."
+msgstr "Cuando sea posible, elimine una ubicación iniciando sesión en el sitio web o \"hub\" y borrando su canal."
-#: ../../include/taxonomy.php:585 ../../Zotlabs/Lib/ThreadItem.php:318
-msgid "dislike"
-msgstr "no me gusta"
+#: ../../Zotlabs/Module/Locs.php:129
+msgid "Use this form to drop the location if the hub is no longer operating."
+msgstr "Utilice este formulario para eliminar la dirección si el \"hub\" no está funcionando desde hace tiempo."
-#: ../../include/taxonomy.php:585
-msgid "dislikes"
-msgstr "no gusta de"
+#: ../../Zotlabs/Module/Item.php:481 ../../Zotlabs/Module/Pin.php:36
+msgid "Unable to locate original post."
+msgstr "No ha sido posible encontrar la entrada original."
-#: ../../include/items.php:1040
-msgid "(Unknown)"
-msgstr "(Desconocido)"
+#: ../../Zotlabs/Module/Item.php:767
+msgid "Empty post discarded."
+msgstr "La entrada vacía ha sido desechada."
-#: ../../include/items.php:1228
-msgid "Visible to anybody on the internet."
-msgstr "Visible para cualquiera en internet."
+#: ../../Zotlabs/Module/Item.php:1165
+msgid "Duplicate post suppressed."
+msgstr "Se ha suprimido la entrada duplicada."
-#: ../../include/items.php:1230
-msgid "Visible to you only."
-msgstr "Visible sólo para usted."
+#: ../../Zotlabs/Module/Item.php:1308
+msgid "System error. Post not saved."
+msgstr "Error del sistema. La entrada no se ha podido salvar."
-#: ../../include/items.php:1232
-msgid "Visible to anybody in this network."
-msgstr "Visible para cualquiera en esta red."
+#: ../../Zotlabs/Module/Item.php:1342
+msgid "Your comment is awaiting approval."
+msgstr "Su comentario está pendiente de aprobación."
-#: ../../include/items.php:1234
-msgid "Visible to anybody authenticated."
-msgstr "Visible para cualquiera que esté autenticado."
+#: ../../Zotlabs/Module/Item.php:1479
+msgid "Unable to obtain post information from database."
+msgstr "No ha sido posible obtener información de la entrada en la base de datos."
-#: ../../include/items.php:1236
+#: ../../Zotlabs/Module/Item.php:1486
#, php-format
-msgid "Visible to anybody on %s."
-msgstr "Visible para cualquiera en %s."
-
-#: ../../include/items.php:1238
-msgid "Visible to all connections."
-msgstr "Visible para todas las conexiones."
-
-#: ../../include/items.php:1240
-msgid "Visible to approved connections."
-msgstr "Visible para las conexiones permitidas."
-
-#: ../../include/items.php:1242
-msgid "Visible to specific connections."
-msgstr "Visible para conexiones específicas."
+msgid "You have reached your limit of %1$.0f top level posts."
+msgstr "Ha alcanzado su límite de %1$.0f entradas en la página principal."
-#: ../../include/items.php:3302 ../../Zotlabs/Module/Share.php:104
+#: ../../Zotlabs/Module/Item.php:1493
#, php-format
-msgid "&#x1f501; Repeated %1$s's %2$s"
-msgstr "&#x1f501; Repetidos %2$sde %1$s"
-
-#: ../../include/items.php:4394 ../../Zotlabs/Module/Group.php:62
-#: ../../Zotlabs/Module/Group.php:206
-msgid "Privacy group not found."
-msgstr "Grupo de canales no encontrado."
-
-#: ../../include/items.php:4410
-msgid "Privacy group is empty."
-msgstr "El grupo de canales está vacío."
+msgid "You have reached your limit of %1$.0f webpages."
+msgstr "Ha alcanzado su límite de %1$.0f páginas web."
-#: ../../include/items.php:4417
-#, php-format
-msgid "Privacy group: %s"
-msgstr "Grupo de canales: %s"
+#: ../../Zotlabs/Module/Directory.php:124
+msgid "No default suggestions were found."
+msgstr "No se encontraron sugerencias por defecto."
-#: ../../include/items.php:4427
-#, php-format
-msgid "Connection: %s"
-msgstr "Conexión: %s"
+#: ../../Zotlabs/Module/Directory.php:289
+msgid "Gender: "
+msgstr "Género:"
-#: ../../include/items.php:4429
-msgid "Connection not found."
-msgstr "Conexión no encontrada"
+#: ../../Zotlabs/Module/Directory.php:291
+msgid "Status: "
+msgstr "Estado:"
-#: ../../include/items.php:4775 ../../Zotlabs/Module/Cover_photo.php:297
-msgid "female"
-msgstr "mujer"
+#: ../../Zotlabs/Module/Directory.php:293
+msgid "Homepage: "
+msgstr "Página personal:"
-#: ../../include/items.php:4776 ../../Zotlabs/Module/Cover_photo.php:298
-#, php-format
-msgid "%1$s updated her %2$s"
-msgstr "%1$s ha actualizado su %2$s"
+#: ../../Zotlabs/Module/Directory.php:353
+msgid "Description:"
+msgstr "Descripción:"
-#: ../../include/items.php:4777 ../../Zotlabs/Module/Cover_photo.php:299
-msgid "male"
-msgstr "hombre"
+#: ../../Zotlabs/Module/Directory.php:355
+#: ../../Zotlabs/Module/Admin/Channels.php:151
+msgid "Uncensor"
+msgstr "No censurar"
-#: ../../include/items.php:4778 ../../Zotlabs/Module/Cover_photo.php:300
-#, php-format
-msgid "%1$s updated his %2$s"
-msgstr "%1$s ha actualizado su %2$s"
+#: ../../Zotlabs/Module/Directory.php:355
+#: ../../Zotlabs/Module/Admin/Channels.php:150
+msgid "Censor"
+msgstr "Censurar"
-#: ../../include/items.php:4780 ../../Zotlabs/Module/Cover_photo.php:302
-#, php-format
-msgid "%1$s updated their %2$s"
-msgstr "%1$s ha actualizado su %2$s"
+#: ../../Zotlabs/Module/Directory.php:364
+msgid "Public Forum:"
+msgstr "Foro público:"
-#: ../../include/items.php:4782
-msgid "profile photo"
-msgstr "foto del perfil"
+#: ../../Zotlabs/Module/Directory.php:367
+msgid "Keywords: "
+msgstr "Palabras clave:"
-#: ../../include/items.php:4979
-#, php-format
-msgid "[Edited %s]"
-msgstr "[se ha editado %s]"
+#: ../../Zotlabs/Module/Directory.php:370
+msgid "Don't suggest"
+msgstr "No sugerir:"
-#: ../../include/items.php:4979
-msgctxt "edit_activity"
-msgid "Post"
-msgstr "Publicar"
+#: ../../Zotlabs/Module/Directory.php:372
+msgid "Common connections (estimated):"
+msgstr "Conexiones comunes (estimadas): "
-#: ../../include/items.php:4979
-msgctxt "edit_activity"
-msgid "Comment"
-msgstr "Comentar"
+#: ../../Zotlabs/Module/Directory.php:422
+msgid "Global Directory"
+msgstr "Directorio global:"
-#: ../../include/account.php:38
-msgid "The provided email address is not valid"
-msgstr "La dirección de correo electrónico proporcionada no es válida"
+#: ../../Zotlabs/Module/Directory.php:422
+msgid "Local Directory"
+msgstr "Directorio local:"
-#: ../../include/account.php:41
-msgid "The provided email domain is not among those allowed on this site"
-msgstr "El dominio de correo electrónico proporcionado no está entre los permitidos en este sitio"
+#: ../../Zotlabs/Module/Directory.php:428
+msgid "Finding:"
+msgstr "Encontrar:"
-#: ../../include/account.php:48
-msgid "The provided email address is already registered at this site"
-msgstr "La dirección de correo electrónico proporcionada ya está registrada en este sitio"
+#: ../../Zotlabs/Module/Directory.php:433
+msgid "next page"
+msgstr "siguiente página"
-#: ../../include/account.php:55
-msgid ""
-"There is a pending registration for this address - click \"Register\" to "
-"continue verification"
-msgstr "Hay un registro pendiente para esta dirección - haga clic en \"Registro\" para continuar la verificación"
+#: ../../Zotlabs/Module/Directory.php:433
+msgid "previous page"
+msgstr "página anterior"
-#: ../../include/account.php:94
-msgid "An invitation is required."
-msgstr "Es obligatorio que le inviten."
+#: ../../Zotlabs/Module/Directory.php:434
+msgid "Sort options"
+msgstr "Ordenar opciones"
-#: ../../include/account.php:103
-msgid "Invitation could not be verified."
-msgstr "No se ha podido verificar su invitación."
+#: ../../Zotlabs/Module/Directory.php:435
+msgid "Alphabetic"
+msgstr "Alfabético"
-#: ../../include/account.php:191
-msgid "Please enter the required information."
-msgstr "Por favor introduzca la información requerida."
+#: ../../Zotlabs/Module/Directory.php:436
+msgid "Reverse Alphabetic"
+msgstr "Alfabético inverso"
-#: ../../include/account.php:258 ../../include/account.php:366
-msgid "Failed to store account information."
-msgstr "La información de la cuenta no se ha podido guardar."
+#: ../../Zotlabs/Module/Directory.php:437
+msgid "Newest to Oldest"
+msgstr "De más nuevo a más antiguo"
-#: ../../include/account.php:435 ../../include/account.php:503
-#: ../../Zotlabs/Module/Register.php:328
-#, php-format
-msgid "Registration confirmation for %s"
-msgstr "Confirmación de registro para %s"
+#: ../../Zotlabs/Module/Directory.php:438
+msgid "Oldest to Newest"
+msgstr "De más antiguo a más nuevo"
-#: ../../include/account.php:578
-#, php-format
-msgid "Registration request at %s"
-msgstr "Solicitud de registro en %s"
+#: ../../Zotlabs/Module/Directory.php:455
+msgid "No entries (some entries may be hidden)."
+msgstr "Sin entradas (algunas entradas pueden estar ocultas)."
-#: ../../include/account.php:600
-msgid "your registration password"
-msgstr "su contraseña de registro"
+#: ../../Zotlabs/Module/Cover_photo.php:85
+#: ../../Zotlabs/Module/Profile_photo.php:128
+msgid "Image uploaded but image cropping failed."
+msgstr "Imagen actualizada, pero el recorte de la imagen ha fallado. "
-#: ../../include/account.php:606 ../../include/account.php:695
-#, php-format
-msgid "Registration details for %s"
-msgstr "Detalles del registro de %s"
+#: ../../Zotlabs/Module/Cover_photo.php:196
+#: ../../Zotlabs/Module/Cover_photo.php:254
+msgid "Cover Photos"
+msgstr "Imágenes de portada del perfil"
-#: ../../include/account.php:706
-msgid "Account approved."
-msgstr "Cuenta aprobada."
+#: ../../Zotlabs/Module/Cover_photo.php:212
+#: ../../Zotlabs/Module/Profile_photo.php:184
+msgid "Image resize failed."
+msgstr "El ajuste del tamaño de la imagen ha fallado."
-#: ../../include/account.php:762
-#, php-format
-msgid "Registration revoked for %s"
-msgstr "Registro revocado para %s"
+#: ../../Zotlabs/Module/Cover_photo.php:265
+#: ../../Zotlabs/Module/Profile_photo.php:350
+msgid "Image upload failed."
+msgstr "La carga de la imagen ha fallado."
-#: ../../include/account.php:769
-#, php-format
-msgid "Could not revoke registration for %s"
-msgstr "No se ha podido revocar el registro de %s"
+#: ../../Zotlabs/Module/Cover_photo.php:282
+#: ../../Zotlabs/Module/Profile_photo.php:370
+msgid "Unable to process image."
+msgstr "No ha sido posible procesar la imagen."
-#: ../../include/account.php:1185 ../../include/account.php:1187
-msgid "Click here to upgrade."
-msgstr "Pulse aquí para actualizar"
+#: ../../Zotlabs/Module/Cover_photo.php:367
+#: ../../Zotlabs/Module/Cover_photo.php:382
+#: ../../Zotlabs/Module/Profile_photo.php:432
+#: ../../Zotlabs/Module/Profile_photo.php:497
+msgid "Photo not available."
+msgstr "Foto no disponible."
-#: ../../include/account.php:1193
-msgid "This action exceeds the limits set by your subscription plan."
-msgstr "Esta acción supera los límites establecidos por su plan de suscripción "
+#: ../../Zotlabs/Module/Cover_photo.php:418
+msgid "Your cover photo may be visible to anybody on the internet"
+msgstr "La foto de la portada puede ser visible para cualquiera en Internet"
-#: ../../include/account.php:1198
-msgid "This action is not available under your subscription plan."
-msgstr "Esta acción no está disponible en su plan de suscripción."
+#: ../../Zotlabs/Module/Cover_photo.php:420
+msgid "Upload File:"
+msgstr "Subir fichero:"
-#: ../../include/account.php:1258
-msgid "open"
-msgstr "abierto"
+#: ../../Zotlabs/Module/Cover_photo.php:421
+msgid "Select a profile:"
+msgstr "Seleccionar un perfil:"
-#: ../../include/account.php:1258
-msgid "closed"
-msgstr "cerrado"
+#: ../../Zotlabs/Module/Cover_photo.php:422
+msgid "Change Cover Photo"
+msgstr "Cambiar la foto de portada del perfil"
-#: ../../include/account.php:1265
-msgid "Registration is currently"
-msgstr "El registro está actualmente "
+#: ../../Zotlabs/Module/Cover_photo.php:423
+#: ../../Zotlabs/Module/Profile_photo.php:547
+#: ../../Zotlabs/Module/Embedphotos.php:189
+#: ../../Zotlabs/Module/Photos.php:681 ../../Zotlabs/Widget/Portfolio.php:114
+#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Cdav.php:152
+#: ../../Zotlabs/Widget/Cdav.php:188 ../../Zotlabs/Storage/Browser.php:546
+msgid "Upload"
+msgstr "Subir"
-#: ../../include/account.php:1274
-msgid "please come back"
-msgstr "por favor, vuelva"
+#: ../../Zotlabs/Module/Cover_photo.php:426
+#: ../../Zotlabs/Module/Cover_photo.php:427
+#: ../../Zotlabs/Module/Profile_photo.php:551
+#: ../../Zotlabs/Module/Profile_photo.php:552
+msgid "Use a photo from your albums"
+msgstr "Usar una foto de sus álbumes"
-#: ../../include/photo/photo_driver.php:449
-#: ../../Zotlabs/Module/Profile_photo.php:167
-#: ../../Zotlabs/Module/Profile_photo.php:337
-msgid "Profile Photos"
-msgstr "Fotos del perfil"
+#: ../../Zotlabs/Module/Cover_photo.php:438
+msgid "Select existing photo"
+msgstr "Seleccionar una foto"
-#: ../../include/attach.php:273 ../../include/attach.php:324
-#: ../../include/attach.php:419
-msgid "Item was not found."
-msgstr "Elemento no encontrado."
+#: ../../Zotlabs/Module/Cover_photo.php:455
+#: ../../Zotlabs/Module/Profile_photo.php:581
+msgid "Crop Image"
+msgstr "Recortar imagen"
-#: ../../include/attach.php:290
-msgid "Unknown error."
-msgstr "Error desconocido"
+#: ../../Zotlabs/Module/Cover_photo.php:456
+#: ../../Zotlabs/Module/Profile_photo.php:582
+msgid "Please adjust the image cropping for optimum viewing."
+msgstr "Por favor ajuste el recorte de la imagen para una visión óptima."
-#: ../../include/attach.php:612
-msgid "No source file."
-msgstr "Ningún fichero de origen"
+#: ../../Zotlabs/Module/Cover_photo.php:458
+msgid "Done Editing"
+msgstr "Edición completada"
-#: ../../include/attach.php:634
-msgid "Cannot locate file to replace"
-msgstr "No se puede localizar el fichero que va a ser sustituido."
+#: ../../Zotlabs/Module/Register.php:112
+msgid "Email address required"
+msgstr "Dirección de correo electrónico requerida"
-#: ../../include/attach.php:653
-msgid "Cannot locate file to revise/update"
-msgstr "No se puede localizar el fichero para revisar/actualizar"
+#: ../../Zotlabs/Module/Register.php:156
+msgid "No password provided"
+msgstr "No se ha proporcionado la contraseña"
-#: ../../include/attach.php:800
-#, php-format
-msgid "File exceeds size limit of %d"
-msgstr "El fichero supera el limite de tamaño de %d"
+#: ../../Zotlabs/Module/Register.php:179
+msgid "Terms of Service not accepted"
+msgstr "No se han aceptado los Términos del servicio"
-#: ../../include/attach.php:821
-#, php-format
-msgid "You have reached your limit of %1$.0f Mbytes attachment storage."
-msgstr "Ha alcanzado su límite de %1$.0f Mbytes de almacenamiento de adjuntos."
+#: ../../Zotlabs/Module/Register.php:241
+msgid "Invitation code succesfully applied"
+msgstr "El código de invitación se ha aplicado con éxito"
-#: ../../include/attach.php:1009
-msgid "File upload failed. Possible system limit or action terminated."
-msgstr "Error de carga, posiblemente por limite del sistema o porque la acción ha finalizado."
+#: ../../Zotlabs/Module/Register.php:261
+msgid "Invitation not in time or too late"
+msgstr "La invitación no llega a tiempo o llega demasiado tarde"
-#: ../../include/attach.php:1038
-msgid "Stored file could not be verified. Upload failed."
-msgstr "El fichero almacenado no ha podido ser verificado. El envío ha fallado."
+#: ../../Zotlabs/Module/Register.php:267
+msgid "Invitation email failed"
+msgstr "Error en el correo electrónico de invitación"
-#: ../../include/attach.php:1110 ../../include/attach.php:1126
-msgid "Path not available."
-msgstr "Ruta no disponible."
+#: ../../Zotlabs/Module/Register.php:275
+msgid "Invitation code failed"
+msgstr "Código de invitación fallido"
-#: ../../include/attach.php:1174 ../../include/attach.php:1337
-msgid "Empty pathname"
-msgstr "Ruta vacía"
+#: ../../Zotlabs/Module/Register.php:282
+msgid "Invitations are not available"
+msgstr "No hay invitaciones disponibles"
-#: ../../include/attach.php:1200
-msgid "duplicate filename or path"
-msgstr "Nombre duplicado de ruta o fichero"
+#: ../../Zotlabs/Module/Register.php:292
+msgid "Registration on this hub is by invitation only"
+msgstr "El registro en este hub solo es posible por invitación"
-#: ../../include/attach.php:1225
-msgid "Path not found."
-msgstr "Ruta no encontrada"
+#: ../../Zotlabs/Module/Register.php:399
+msgid "New register request"
+msgstr "Nueva solicitud de registro"
-#: ../../include/attach.php:1293
-msgid "mkdir failed."
-msgstr "mkdir ha fallado."
+#: ../../Zotlabs/Module/Register.php:417
+msgid "Error creating dId A"
+msgstr "Error al crear dId A"
-#: ../../include/attach.php:1297
-msgid "database storage failed."
-msgstr "el almacenamiento en la base de datos ha fallado."
+#: ../../Zotlabs/Module/Register.php:435
+msgid "Registration on this hub is disabled."
+msgstr "El registro está deshabilitado en este sitio."
-#: ../../include/attach.php:1343
-msgid "Empty path"
-msgstr "Ruta vacía"
+#: ../../Zotlabs/Module/Register.php:444
+msgid "Registration on this hub is by approval only."
+msgstr "El registro en este hub está sometido a aprobación previa."
-#: ../../include/attach.php:2104
-#, php-format
-msgid "%s shared a %s with you"
-msgstr "%sha compartido un/una %scon usted"
+#: ../../Zotlabs/Module/Register.php:445
+msgid "Register at another affiliated hub in case when prefered"
+msgstr "Regístrese en otro hub afiliado en caso de que lo prefiera"
-#: ../../include/bookmarks.php:34
-#, php-format
-msgid "%1$s's bookmarks"
-msgstr "Marcadores de %1$s"
+#: ../../Zotlabs/Module/Register.php:458
+msgid "Registration on this hub is by invitation only."
+msgstr "La inscripción en este hub es sólo posible por invitación."
-#: ../../include/bbcode.php:233 ../../include/bbcode.php:937
-#: ../../include/bbcode.php:1558 ../../include/bbcode.php:1566
-msgid "Image/photo"
-msgstr "Imagen/foto"
+#: ../../Zotlabs/Module/Register.php:459
+msgid "Register at another affiliated hub"
+msgstr "Regístrese en otro hub afiliado"
-#: ../../include/bbcode.php:280 ../../include/bbcode.php:1583
-msgid "Encrypted content"
-msgstr "Contenido cifrado"
+#: ../../Zotlabs/Module/Register.php:473 ../../Zotlabs/Module/Siteinfo.php:28
+msgid "Terms of Service"
+msgstr "Términos del servicio"
-#: ../../include/bbcode.php:334
+#: ../../Zotlabs/Module/Register.php:479
#, php-format
-msgid "Install %1$s element %2$s"
-msgstr "Instalar el elemento de%1$s%2$s"
+msgid "I accept the %s for this website"
+msgstr "Acepto los %s de este sitio"
-#: ../../include/bbcode.php:338
+#: ../../Zotlabs/Module/Register.php:486
#, php-format
-msgid ""
-"This post contains an installable %s element, however you lack permissions "
-"to install it on this site."
-msgstr "Esta entrada contiene el elemento instalable %s, sin embargo le faltan permisos para instalarlo en este sitio."
-
-#: ../../include/bbcode.php:348 ../../Zotlabs/Module/Impel.php:47
-msgid "webpage"
-msgstr "página web"
-
-#: ../../include/bbcode.php:351 ../../Zotlabs/Module/Impel.php:57
-msgid "layout"
-msgstr "plantilla"
-
-#: ../../include/bbcode.php:354 ../../Zotlabs/Module/Impel.php:52
-msgid "block"
-msgstr "bloque"
-
-#: ../../include/bbcode.php:357 ../../Zotlabs/Module/Impel.php:64
-msgid "menu"
-msgstr "menú"
-
-#: ../../include/bbcode.php:560
-msgid "card"
-msgstr "ficha"
+msgid "I am over %s years of age and accept the %s for this website"
+msgstr "Tengo más de %s años de edad y acepto los %s de este sitio web"
-#: ../../include/bbcode.php:562
-msgid "article"
-msgstr "el artículo"
+#: ../../Zotlabs/Module/Register.php:496
+msgid "Your email address"
+msgstr "Su dirección de correo electrónico"
-#: ../../include/bbcode.php:568 ../../include/markdown.php:203
-#, php-format
-msgid "%1$s wrote the following %2$s %3$s"
-msgstr "%1$s escribió %2$s siguiente %3$s"
+#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Oauth.php:115
+#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
+msgid "Optional"
+msgstr "Opcional"
-#: ../../include/bbcode.php:645 ../../include/bbcode.php:653
-msgid "Click to open/close"
-msgstr "Pulsar para abrir/cerrar"
+#: ../../Zotlabs/Module/Register.php:503
+msgid "Choose a password"
+msgstr "Elija una contraseña"
-#: ../../include/bbcode.php:653 ../../include/markdown.php:256
-msgid "spoiler"
-msgstr "spoiler"
+#: ../../Zotlabs/Module/Register.php:504
+msgid "Please re-enter your password"
+msgstr "Por favor, vuelva a escribir su contraseña"
-#: ../../include/bbcode.php:666
-msgid "View article"
-msgstr "Ver el artículo"
+#: ../../Zotlabs/Module/Register.php:506
+msgid "Please enter your invitation code"
+msgstr "Por favor, introduzca el código de su invitación"
-#: ../../include/bbcode.php:666
-msgid "View summary"
-msgstr "Ver sumario"
+#: ../../Zotlabs/Module/Register.php:508
+msgid "Your name"
+msgstr "Su nombre"
-#: ../../include/bbcode.php:1534
-msgid "$1 wrote:"
-msgstr "$1 escribió:"
+#: ../../Zotlabs/Module/Register.php:508
+msgid "Real name is preferred"
+msgstr "Se prefiere el nombre real"
-#: ../../include/channel.php:48
-msgid "Unable to obtain identity information from database"
-msgstr "No ha sido posible obtener información sobre la identidad desde la base de datos"
+#: ../../Zotlabs/Module/Register.php:510
+#: ../../Zotlabs/Module/New_channel.php:177
+msgid "Choose a short nickname"
+msgstr "Elija un alias corto"
-#: ../../include/channel.php:81
-msgid "Empty name"
-msgstr "Nombre vacío"
+#: ../../Zotlabs/Module/Register.php:510
+msgid ""
+"Your nickname will be used to create an easy to remember channel address"
+msgstr "Tu alias se utilizará para crear una dirección de canal fácil de recordar"
-#: ../../include/channel.php:84
-msgid "Name too long"
-msgstr "Nombre demasiado largo"
+#: ../../Zotlabs/Module/Register.php:514
+msgid "Why do you want to join this hub?"
+msgstr "¿Por qué quiere unirse a este hub?"
-#: ../../include/channel.php:201
-msgid "No account identifier"
-msgstr "Ningún identificador de la cuenta"
+#: ../../Zotlabs/Module/Register.php:514
+msgid "This will help to review your registration"
+msgstr "Esto ayudará a revisar su registro"
-#: ../../include/channel.php:213 ../../Zotlabs/Module/Register.php:95
-msgid "Nickname is required."
-msgstr "Se requiere un sobrenombre (alias)."
+#: ../../Zotlabs/Module/Register.php:520
+#: ../../Zotlabs/Module/Admin/Site.php:416
+msgid "Registration"
+msgstr "Registro"
-#: ../../include/channel.php:227 ../../include/channel.php:659
-#: ../../Zotlabs/Module/Register.php:100
-#: ../../Zotlabs/Module/Changeaddr.php:46
-msgid "Reserved nickname. Please choose another."
-msgstr "Sobrenombre en uso. Por favor, elija otro."
+#: ../../Zotlabs/Module/Register.php:528
+msgid "I have an invite code"
+msgstr "Tengo un código de invitación"
-#: ../../include/channel.php:232 ../../include/channel.php:664
-#: ../../Zotlabs/Module/Register.php:105
-#: ../../Zotlabs/Module/Changeaddr.php:51
+#: ../../Zotlabs/Module/Register.php:575
msgid ""
-"Nickname has unsupported characters or is already being used on this site."
-msgstr "El alias contiene caracteres no admitidos o está ya en uso por otros miembros de este sitio."
+"This site has exceeded the number of allowed daily account registrations."
+msgstr "Este sitio ha superado el número permitido de registros diarios de cuentas."
-#: ../../include/channel.php:292
-msgid "Unable to retrieve created identity"
-msgstr "No ha sido posible recuperar la identidad creada"
+#: ../../Zotlabs/Module/Oexchange.php:27
+msgid "Unable to find your hub."
+msgstr "No se puede encontrar su servidor."
-#: ../../include/channel.php:402
-msgid "Default Profile"
-msgstr "Perfil principal"
+#: ../../Zotlabs/Module/Oexchange.php:41
+msgid "Post successful."
+msgstr "Enviado con éxito."
-#: ../../include/channel.php:592 ../../include/channel.php:681
-msgid "Unable to retrieve modified identity"
-msgstr "No se puede recuperar la identidad modficada"
+#: ../../Zotlabs/Module/Api.php:74 ../../Zotlabs/Module/Api.php:95
+msgid "Authorize application connection"
+msgstr "Autorizar una conexión de aplicación"
-#: ../../include/channel.php:1373
-msgid "Requested channel is not available"
-msgstr "El canal solicitado no está disponible"
+#: ../../Zotlabs/Module/Api.php:75
+msgid "Return to your app and insert this Security Code:"
+msgstr "Vuelva a su aplicación e introduzca este código de seguridad: "
-#: ../../include/channel.php:1523 ../../Zotlabs/Module/Profiles.php:745
-msgid "Change profile photo"
-msgstr "Cambiar la foto del perfil"
+#: ../../Zotlabs/Module/Api.php:85
+msgid "Please login to continue."
+msgstr "Por favor inicie sesión para continuar."
-#: ../../include/channel.php:1531
-msgid "Create New Profile"
-msgstr "Crear un nuevo perfil"
+#: ../../Zotlabs/Module/Api.php:97
+msgid ""
+"Do you want to authorize this application to access your posts and contacts,"
+" and/or create new posts for you?"
+msgstr "¿Desea autorizar a esta aplicación a acceder a sus publicaciones y contactos, y/o crear nuevas publicaciones por usted?"
-#: ../../include/channel.php:1549 ../../Zotlabs/Module/Profiles.php:842
-msgid "Profile Image"
-msgstr "Imagen del perfil"
+#: ../../Zotlabs/Module/Page.php:39 ../../Zotlabs/Module/Block.php:29
+msgid "Invalid item."
+msgstr "Elemento no válido."
-#: ../../include/channel.php:1552
-msgid "Visible to everybody"
-msgstr "Visible para todos"
+#: ../../Zotlabs/Module/Page.php:174
+msgid ""
+"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
+"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,"
+" quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
+"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
+"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
+"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+msgstr "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
-#: ../../include/channel.php:1553 ../../Zotlabs/Module/Profiles.php:742
-#: ../../Zotlabs/Module/Profiles.php:846
-msgid "Edit visibility"
-msgstr "Editar visibilidad"
+#: ../../Zotlabs/Module/Chatsvc.php:131
+msgid "Away"
+msgstr "Ausente"
-#: ../../include/channel.php:1629 ../../include/channel.php:1755
-msgid "Gender:"
-msgstr "Género:"
+#: ../../Zotlabs/Module/Chatsvc.php:136
+msgid "Online"
+msgstr "Conectado/a"
-#: ../../include/channel.php:1630 ../../include/channel.php:1799
-msgid "Status:"
-msgstr "Estado:"
+#: ../../Zotlabs/Module/Apps.php:51 ../../Zotlabs/Widget/Appstore.php:19
+msgid "Available Apps"
+msgstr "Aplicaciones disponibles"
-#: ../../include/channel.php:1631 ../../include/channel.php:1823
-msgid "Homepage:"
-msgstr "Página personal:"
+#: ../../Zotlabs/Module/Apps.php:51
+msgid "Installed Apps"
+msgstr "Apps instaladas"
-#: ../../include/channel.php:1632 ../../include/channel.php:1825
-#: ../../Zotlabs/Module/Directory.php:366
-msgid "Hometown:"
-msgstr "Lugar de nacimiento:"
+#: ../../Zotlabs/Module/Apps.php:54
+msgid "Manage Apps"
+msgstr "Administrar apps"
-#: ../../include/channel.php:1633
-msgid "Online Now"
-msgstr "Ahora en línea"
+#: ../../Zotlabs/Module/Apps.php:55
+msgid "Create Custom App"
+msgstr "Crear una app personalizada"
-#: ../../include/channel.php:1683
-msgid "Change your profile photo"
-msgstr "Cambiar su foto del perfil"
+#: ../../Zotlabs/Module/Profile_photo.php:544
+msgid ""
+"This profile photo will be visible to anybody on the internet and may be "
+"distributed to other websites."
+msgstr "Esta foto de perfil será visible para cualquier persona en Internet y podrá ser distribuida a otros sitios web."
-#: ../../include/channel.php:1714
-msgid "Trans"
-msgstr "Trans"
+#: ../../Zotlabs/Module/Profile_photo.php:544
+msgid ""
+"This profile photo will be visible only to channels with permission to view "
+"this profile."
+msgstr "Esta foto de perfil sólo será visible para los canales con permiso para ver este perfil."
-#: ../../include/channel.php:1753
-msgid "Full Name:"
-msgstr "Nombre completo:"
+#: ../../Zotlabs/Module/Profile_photo.php:546
+msgid "Use Photo for Profile"
+msgstr "Usar la fotografía para el perfil"
-#: ../../include/channel.php:1760
-msgid "Like this channel"
-msgstr "Me gusta este canal"
+#: ../../Zotlabs/Module/Profile_photo.php:546
+msgid "Change Profile Photo"
+msgstr "Cambiar la foto del perfil"
-#: ../../include/channel.php:1784
-msgid "j F, Y"
-msgstr "j F Y"
+#: ../../Zotlabs/Module/Profile_photo.php:548
+msgid "Reset to default"
+msgstr "Restablecer los valores por defecto"
-#: ../../include/channel.php:1785
-msgid "j F"
-msgstr "j F"
+#: ../../Zotlabs/Module/Profile_photo.php:562
+msgid "Select existing"
+msgstr "Seleccione lo que hay"
-#: ../../include/channel.php:1792
-msgid "Birthday:"
-msgstr "Cumpleaños:"
+#: ../../Zotlabs/Module/Profile_photo.php:584
+msgid "Done editing"
+msgstr "Edición completada"
-#: ../../include/channel.php:1796 ../../Zotlabs/Module/Directory.php:348
-msgid "Age:"
-msgstr "Edad:"
+#: ../../Zotlabs/Module/Lang.php:20
+msgid "Language App"
+msgstr "App idioma"
-#: ../../include/channel.php:1805
+#: ../../Zotlabs/Module/Home.php:104
#, php-format
-msgid "for %1$d %2$s"
-msgstr "por %1$d %2$s"
+msgid "Welcome to %s"
+msgstr "Bienvenido a %s"
-#: ../../include/channel.php:1817
-msgid "Tags:"
-msgstr "Etiquetas:"
+#: ../../Zotlabs/Module/Invite.php:69
+msgid "Invite App"
+msgstr "Solicitar una app"
-#: ../../include/channel.php:1821
-msgid "Sexual Preference:"
-msgstr "Orientación sexual:"
+#: ../../Zotlabs/Module/Invite.php:81
+msgid "Register is closed"
+msgstr "El registro está cerrado"
-#: ../../include/channel.php:1827
-msgid "Political Views:"
-msgstr "Posición política:"
+#: ../../Zotlabs/Module/Invite.php:115 ../../Zotlabs/Module/Invite.php:562
+msgid "Note, the invitation code is valid up to"
+msgstr "Tenga en cuenta que el código de invitación es válido hasta "
-#: ../../include/channel.php:1829
-msgid "Religion:"
-msgstr "Religión:"
+#: ../../Zotlabs/Module/Invite.php:128
+#, php-format
+msgid "Too many recipients for one invitation (max %d)"
+msgstr "Demasiados destinatarios para una invitación (máx %d)"
-#: ../../include/channel.php:1831 ../../Zotlabs/Module/Directory.php:368
-msgid "About:"
-msgstr "Sobre mí:"
+#: ../../Zotlabs/Module/Invite.php:132
+msgid "No recipients for this invitation"
+msgstr "No hay destinatarios para esta invitación"
-#: ../../include/channel.php:1833
-msgid "Hobbies/Interests:"
-msgstr "Aficciones o intereses:"
+#: ../../Zotlabs/Module/Invite.php:151
+#, php-format
+msgid "(%s) : Not a real email address"
+msgstr "(%s) : No es una dirección de correo electrónica real"
-#: ../../include/channel.php:1835
-msgid "Likes:"
-msgstr "Me gusta:"
+#: ../../Zotlabs/Module/Invite.php:158
+#, php-format
+msgid "(%s) : Not allowed email address"
+msgstr "(%s) : Dirección de correo electrónico no permitida"
-#: ../../include/channel.php:1837
-msgid "Dislikes:"
-msgstr "No me gusta:"
+#: ../../Zotlabs/Module/Invite.php:171
+#, php-format
+msgid "(%s) : email address already in use"
+msgstr "(%s) : La dirección de correo electrónico ya está en uso"
-#: ../../include/channel.php:1839
-msgid "Contact information and Social Networks:"
-msgstr "Información de contacto y redes sociales:"
+#: ../../Zotlabs/Module/Invite.php:178
+#, php-format
+msgid "(%s) : Accepted email address"
+msgstr "(%s) : Dirección de correo electrónico aceptada"
-#: ../../include/channel.php:1841
-msgid "My other channels:"
-msgstr "Mis otros canales:"
+#: ../../Zotlabs/Module/Invite.php:270
+#, php-format
+msgid "To %s : Message delivery success."
+msgstr "To %s : Entrega exitosa del mensaje."
-#: ../../include/channel.php:1843
-msgid "Musical interests:"
-msgstr "Preferencias musicales:"
+#: ../../Zotlabs/Module/Invite.php:302
+#, php-format
+msgid "%1$d mail(s) sent, %2$d mail error(s)"
+msgstr "%1$d correo(s) enviado, %2$d error(es) de correo"
-#: ../../include/channel.php:1845
-msgid "Books, literature:"
-msgstr "Libros, literatura:"
+#: ../../Zotlabs/Module/Invite.php:327
+msgid "Invites not proposed by configuration"
+msgstr "Invitaciones no propuestas por la configuración"
-#: ../../include/channel.php:1847
-msgid "Television:"
-msgstr "Televisión:"
+#: ../../Zotlabs/Module/Invite.php:328
+msgid "Contact the site admin"
+msgstr "Contactar con el administrador del sitio"
-#: ../../include/channel.php:1849
-msgid "Film/dance/culture/entertainment:"
-msgstr "Cine, danza, cultura, entretenimiento:"
+#: ../../Zotlabs/Module/Invite.php:344
+msgid "Invites by users not enabled"
+msgstr "Invitaciones de usuarios no habilitadas"
-#: ../../include/channel.php:1851
-msgid "Love/Romance:"
-msgstr "Vida sentimental o amorosa:"
+#: ../../Zotlabs/Module/Invite.php:349
+msgid "You have no more invitations available"
+msgstr "No tiene más invitaciones disponibles"
-#: ../../include/channel.php:1853
-msgid "Work/employment:"
-msgstr "Trabajo:"
+#: ../../Zotlabs/Module/Invite.php:365
+msgid "Not on xchan"
+msgstr "No en xchan"
-#: ../../include/channel.php:1855
-msgid "School/education:"
-msgstr "Estudios:"
+#: ../../Zotlabs/Module/Invite.php:398
+msgid "All users invitation limit exceeded."
+msgstr "Se ha superado el límite de invitaciones a todos los usuarios."
-#: ../../include/channel.php:1876 ../../Zotlabs/Module/Profperm.php:113
-#: ../../Zotlabs/Lib/Apps.php:366
-msgid "Profile"
-msgstr "Perfil"
+#: ../../Zotlabs/Module/Invite.php:410 ../../Zotlabs/Module/Admin/Site.php:356
+msgid "Minute(s)"
+msgstr "Minuto(s)"
-#: ../../include/channel.php:1878
-msgid "Like this thing"
-msgstr "Me gusta esto"
+#: ../../Zotlabs/Module/Invite.php:411 ../../Zotlabs/Module/Admin/Site.php:357
+msgid "Hour(s)"
+msgstr "Hora(s)"
-#: ../../include/channel.php:1879
-msgid "Export"
-msgstr "Exportar"
+#: ../../Zotlabs/Module/Invite.php:412 ../../Zotlabs/Module/Admin/Site.php:358
+msgid "Day(s)"
+msgstr "Día(s)"
-#: ../../include/channel.php:2332 ../../Zotlabs/Module/Cover_photo.php:304
-msgid "cover photo"
-msgstr "Imagen de portada del perfil"
+#: ../../Zotlabs/Module/Invite.php:416
+msgid "Invitation expires after"
+msgstr "La invitación expira después de "
-#: ../../include/channel.php:2607 ../../Zotlabs/Module/Rmagic.php:96
-#: ../../boot.php:1749
-msgid "Remote Authentication"
-msgstr "Acceso desde su servidor"
+#: ../../Zotlabs/Module/Invite.php:421 ../../Zotlabs/Module/Admin/Site.php:375
+#: ../../Zotlabs/Module/Admin/Site.php:397
+msgid "duration up from now"
+msgstr "duración a partir de ahora "
-#: ../../include/channel.php:2608 ../../Zotlabs/Module/Rmagic.php:97
-msgid "Enter your channel address (e.g. channel@example.com)"
-msgstr "Introduzca la dirección del canal (p.ej. canal@ejemplo.com)"
+#: ../../Zotlabs/Module/Invite.php:517 ../../Zotlabs/Module/Invite.php:556
+msgid "Invitation"
+msgstr "Invitación"
-#: ../../include/channel.php:2609 ../../Zotlabs/Module/Rmagic.php:98
-msgid "Authenticate"
-msgstr "Acceder"
+#: ../../Zotlabs/Module/Invite.php:547
+msgid "Send invitations"
+msgstr "Enviar invitaciones"
-#: ../../include/channel.php:2767 ../../Zotlabs/Module/Admin/Accounts.php:184
-#, php-format
-msgid "Account '%s' deleted"
-msgstr "La cuenta '%s' ha sido eliminada"
+#: ../../Zotlabs/Module/Invite.php:548
+msgid "Invitations I am using"
+msgstr "Invitaciones que estoy utilizando "
-#: ../../include/acl_selectors.php:33
-#: ../../Zotlabs/Lib/PermissionDescription.php:34
-msgid "Visible to your default audience"
-msgstr "Visible para su público predeterminado."
+#: ../../Zotlabs/Module/Invite.php:549
+msgid "Invitations we are using"
+msgstr "Invitaciones que usamos "
-#: ../../include/acl_selectors.php:100
-msgid "Profile-Based Privacy Groups"
-msgstr "Grupos de privacidad basados en perfiles"
+#: ../../Zotlabs/Module/Invite.php:550
+msgid "§ Note, the email(s) sent will be recorded in the system logs"
+msgstr "§ Nota: el/los correo(s) electrónicos enviados quedarán registrados en los registros del sistema"
-#: ../../include/acl_selectors.php:119
-msgid "Private Forum"
-msgstr "Foro privado"
+#: ../../Zotlabs/Module/Invite.php:551
+msgid "Enter email addresses, one per line:"
+msgstr "Introduzca las direcciones de correo electrónico, una por línea:"
-#: ../../include/acl_selectors.php:125 ../../Zotlabs/Widget/Forums.php:77
-#: ../../Zotlabs/Widget/Activity_filter.php:130
-#: ../../Zotlabs/Widget/Notifications.php:131
-#: ../../Zotlabs/Widget/Notifications.php:132
-msgid "Forums"
-msgstr "Foros"
+#: ../../Zotlabs/Module/Invite.php:552
+msgid "Your message:"
+msgstr "Su mensaje:"
-#: ../../include/acl_selectors.php:136
-#: ../../Zotlabs/Module/Settings/Privacy.php:56
-#: ../../Zotlabs/Lib/PermissionDescription.php:107
-msgid "Only me"
-msgstr "Sólo yo"
+#: ../../Zotlabs/Module/Invite.php:553
+msgid "Invite template"
+msgstr "Plantilla de invitación"
-#: ../../include/acl_selectors.php:143
-msgid "Share with"
-msgstr "Compartir con "
+#: ../../Zotlabs/Module/Invite.php:555
+msgid "Subject:"
+msgstr "Asunto:"
-#: ../../include/acl_selectors.php:144
-msgid "Custom selection"
-msgstr "Selección personalizada"
+#: ../../Zotlabs/Module/Invite.php:561
+msgid "Here you may enter personal notes to the recipient(s)"
+msgstr "Aquí puede introducir notas personales para el/los destinatario(s)"
-#: ../../include/acl_selectors.php:146
+#: ../../Zotlabs/Module/Removeaccount.php:35
msgid ""
-"Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and "
-"limit the scope of \"Allow\"."
-msgstr "Seleccione \"Permitir\" para permitir la visualización. \"No permitir\" le permite anular y limitar el alcance de \"Permitir\"."
+"Account removals are not allowed within 48 hours of changing the account "
+"password."
+msgstr "La eliminación de cuentas no está permitida hasta después de que hayan transcurrido 48 horas desde el último cambio de contraseña."
-#: ../../include/acl_selectors.php:147 ../../Zotlabs/Module/Authorize.php:32
-msgid "Allow"
-msgstr "Permitir"
+#: ../../Zotlabs/Module/Removeaccount.php:57
+msgid "Remove This Account"
+msgstr "Eliminar esta cuenta"
-#: ../../include/acl_selectors.php:148
-msgid "Don't allow"
-msgstr "No permitir"
+#: ../../Zotlabs/Module/Removeaccount.php:58
+#: ../../Zotlabs/Module/Changeaddr.php:78 ../../Zotlabs/Module/Removeme.php:61
+msgid "WARNING: "
+msgstr "ATENCIÓN:"
-#: ../../include/acl_selectors.php:181
-#, php-format
+#: ../../Zotlabs/Module/Removeaccount.php:58
msgid ""
-"Post permissions %s cannot be changed %s after a post is shared.</br />These"
-" permissions set who is allowed to view the post."
-msgstr "Los permisos de la entrada %s no se pueden cambiar %s una vez que se ha compartido.</br /> Estos permisos establecen quién está autorizado para ver el mensaje."
-
-#: ../../include/oembed.php:154
-msgid "View PDF"
-msgstr "Ver PDF"
-
-#: ../../include/oembed.php:386
-msgid " by "
-msgstr "por"
-
-#: ../../include/oembed.php:387
-msgid " on "
-msgstr "en"
-
-#: ../../include/oembed.php:416
-msgid "Embedded content"
-msgstr "Contenido incorporado"
-
-#: ../../include/oembed.php:425
-msgid "Embedding disabled"
-msgstr "Incrustación deshabilitada"
+"This account and all its channels will be completely removed from the "
+"network. "
+msgstr "Esta cuenta y todos sus canales van a ser eliminados de la red."
-#: ../../include/zid.php:408
-#, php-format
-msgid "OpenWebAuth: %1$s welcomes %2$s"
-msgstr "OpenWebAuth: %1$s da la bienvenida a %2$s"
+#: ../../Zotlabs/Module/Removeaccount.php:58
+msgid "This action is permanent and can not be undone!"
+msgstr "¡Esta acción tiene carácter definitivo y no se puede deshacer!"
-#: ../../Zotlabs/Widget/Activity_order.php:96
-msgid "Commented Date"
-msgstr "Fecha de los comentarios"
+#: ../../Zotlabs/Module/Removeaccount.php:59
+#: ../../Zotlabs/Module/Changeaddr.php:79 ../../Zotlabs/Module/Removeme.php:62
+msgid "Please enter your password for verification:"
+msgstr "Por favor, introduzca su contraseña para su verificación:"
-#: ../../Zotlabs/Widget/Activity_order.php:100
-msgid "Order by last commented date"
-msgstr "Ordenar por la última fecha de los comentarios"
+#: ../../Zotlabs/Module/Removeaccount.php:61
+#: ../../Zotlabs/Module/Settings/Account.php:110
+msgid "Remove Account"
+msgstr "Eliminar cuenta"
-#: ../../Zotlabs/Widget/Activity_order.php:103
-msgid "Posted Date"
-msgstr "Fecha de publicación"
+#: ../../Zotlabs/Module/Poke.php:182
+msgid "Poke somebody"
+msgstr "Dar un toque a alguien"
-#: ../../Zotlabs/Widget/Activity_order.php:107
-msgid "Order by last posted date"
-msgstr "Ordenar por la ultima fecha de publicación"
+#: ../../Zotlabs/Module/Poke.php:186
+msgid "Poke or ping somebody"
+msgstr "Dar un toque o hacer ping a alguien"
-#: ../../Zotlabs/Widget/Activity_order.php:110
-msgid "Date Unthreaded"
-msgstr "Sin enhebrar por fecha"
+#: ../../Zotlabs/Module/Poke.php:193
+msgid "Recipient"
+msgstr "Destinatario"
-#: ../../Zotlabs/Widget/Activity_order.php:114
-msgid "Order unthreaded by date"
-msgstr "Ordenar sin enhebrar por fecha"
+#: ../../Zotlabs/Module/Poke.php:194
+msgid "Choose action"
+msgstr "Elegir una acción"
-#: ../../Zotlabs/Widget/Activity_order.php:129
-msgid "Stream Order"
-msgstr "Orden del stream"
+#: ../../Zotlabs/Module/Poke.php:197 ../../Zotlabs/Module/Poke.php:198
+msgid "Make this post private"
+msgstr "Convertir en privado este envío"
-#: ../../Zotlabs/Widget/Tokens.php:41
-msgid "Add new guest"
-msgstr "Añadir un nuevo invitado"
+#: ../../Zotlabs/Module/Hq.php:41 ../../Zotlabs/Module/Display.php:47
+#: ../../Zotlabs/Module/Oep.php:83 ../../Zotlabs/Module/Channel.php:161
+#: ../../Zotlabs/Module/Channel.php:183 ../../Zotlabs/Module/Pubstream.php:46
+msgid "Malformed message id."
+msgstr "ID de mensaje malformado."
-#: ../../Zotlabs/Widget/Tokens.php:49 ../../Zotlabs/Module/Lockview.php:226
-msgid "Guest access"
-msgstr "Acceso para invitados"
+#: ../../Zotlabs/Module/Hq.php:101 ../../Zotlabs/Module/Display.php:89
+#: ../../Zotlabs/Module/Channel.php:269 ../../Zotlabs/Module/Network.php:211
+#: ../../Zotlabs/Module/Pubstream.php:89
+msgid "Reset form"
+msgstr "Reiniciar el formulario"
-#: ../../Zotlabs/Widget/Archive.php:49
-msgid "Archives"
-msgstr "Hemeroteca"
+#: ../../Zotlabs/Module/Regdir.php:52 ../../Zotlabs/Module/Dirsearch.php:24
+msgid "This site is not a directory server"
+msgstr "Este sitio no es un servidor de directorio"
-#: ../../Zotlabs/Widget/Album.php:84 ../../Zotlabs/Widget/Portfolio.php:91
-#: ../../Zotlabs/Module/Embedphotos.php:171
-#: ../../Zotlabs/Module/Photos.php:793 ../../Zotlabs/Module/Photos.php:1337
-msgid "View Photo"
-msgstr "Ver foto"
+#: ../../Zotlabs/Module/Dirsearch.php:33
+msgid "This directory server requires an access token"
+msgstr "El servidor de este directorio necesita un \"token\" de acceso"
-#: ../../Zotlabs/Widget/Album.php:101 ../../Zotlabs/Widget/Portfolio.php:112
-#: ../../Zotlabs/Module/Embedphotos.php:187
-#: ../../Zotlabs/Module/Photos.php:824
-msgid "Edit Album"
-msgstr "Editar álbum"
+#: ../../Zotlabs/Module/Like.php:112
+msgid "Like/Dislike"
+msgstr "Me gusta/No me gusta"
-#: ../../Zotlabs/Widget/Album.php:103 ../../Zotlabs/Widget/Cdav.php:150
-#: ../../Zotlabs/Widget/Cdav.php:186 ../../Zotlabs/Widget/Portfolio.php:114
-#: ../../Zotlabs/Module/Embedphotos.php:189
-#: ../../Zotlabs/Module/Profile_photo.php:547
-#: ../../Zotlabs/Module/Cover_photo.php:423
-#: ../../Zotlabs/Module/Photos.php:692 ../../Zotlabs/Storage/Browser.php:540
-msgid "Upload"
-msgstr "Subir"
+#: ../../Zotlabs/Module/Like.php:118
+msgid "This action is restricted to members."
+msgstr "Esta acción está restringida solo para miembros."
-#: ../../Zotlabs/Widget/Tasklist.php:31
-msgid "Tasks"
-msgstr "Tareas"
+#: ../../Zotlabs/Module/Like.php:119
+msgid ""
+"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a "
+"href=\"register\">register as a new $Projectname member</a> to continue."
+msgstr "Por favor, <a href=\"rmagic\">identifíquese con su $Projectname ID</a> o <a href=\"register\">rregístrese como un nuevo $Projectname member</a> para continuar."
-#: ../../Zotlabs/Widget/Chatroom_members.php:17
-msgid "Chat Members"
-msgstr "Miembros del chat"
+#: ../../Zotlabs/Module/Like.php:172 ../../Zotlabs/Module/Like.php:198
+#: ../../Zotlabs/Module/Like.php:236
+msgid "Invalid request."
+msgstr "Solicitud incorrecta."
-#: ../../Zotlabs/Widget/Channel_activities.php:214
-msgctxt "noun"
-msgid "new connection"
-msgid_plural "new connections"
-msgstr[0] "Nueva conexión"
-msgstr[1] "Nuevas conexiones"
-msgstr[2] "nuevas conexiones"
+#: ../../Zotlabs/Module/Like.php:213
+msgid "thing"
+msgstr "elemento"
-#: ../../Zotlabs/Widget/Channel_activities.php:220
-msgctxt "noun"
-msgid "notice"
-msgid_plural "notices"
-msgstr[0] "aviso"
-msgstr[1] "avisos"
-msgstr[2] "avisos"
+#: ../../Zotlabs/Module/Like.php:259
+msgid "Channel unavailable."
+msgstr "Canal no disponible."
-#: ../../Zotlabs/Widget/Pinned.php:73 ../../Zotlabs/Lib/ThreadItem.php:214
-msgid "I will attend"
-msgstr "Participaré"
+#: ../../Zotlabs/Module/Like.php:295
+msgid "Previous action reversed."
+msgstr "Acción anterior revocada."
-#: ../../Zotlabs/Widget/Pinned.php:73 ../../Zotlabs/Lib/ThreadItem.php:214
-msgid "I will not attend"
-msgstr "No participaré"
+#: ../../Zotlabs/Module/Like.php:481
+#, php-format
+msgid "%1$s agrees with %2$s's %3$s"
+msgstr "%3$s de %2$s: %1$s está de acuerdo"
-#: ../../Zotlabs/Widget/Pinned.php:73 ../../Zotlabs/Lib/ThreadItem.php:214
-msgid "I might attend"
-msgstr "Quizá participe"
+#: ../../Zotlabs/Module/Like.php:483
+#, php-format
+msgid "%1$s doesn't agree with %2$s's %3$s"
+msgstr "%3$s de %2$s: %1$s no está de acuerdo"
-#: ../../Zotlabs/Widget/Pinned.php:84
-msgid "I agree"
-msgstr "Estoy de acuerdo"
+#: ../../Zotlabs/Module/Like.php:485
+#, php-format
+msgid "%1$s abstains from a decision on %2$s's %3$s"
+msgstr "%3$s de %2$s: %1$s se abstiene"
-#: ../../Zotlabs/Widget/Pinned.php:84
-msgid "I disagree"
-msgstr "No estoy de acuerdo"
+#: ../../Zotlabs/Module/Like.php:592
+msgid "Action completed."
+msgstr "Acción completada."
-#: ../../Zotlabs/Widget/Pinned.php:84
-msgid "I abstain"
-msgstr "Me abstengo"
+#: ../../Zotlabs/Module/Like.php:593
+msgid "Thank you."
+msgstr "Gracias."
-#: ../../Zotlabs/Widget/Pinned.php:102 ../../Zotlabs/Lib/ThreadItem.php:331
-msgid "Share This"
-msgstr "Compartir esto"
+#: ../../Zotlabs/Module/Vote.php:40
+msgid "Poll not found."
+msgstr "Encuesta no encontrada."
-#: ../../Zotlabs/Widget/Pinned.php:102 ../../Zotlabs/Lib/ThreadItem.php:331
-msgid "share"
-msgstr "compartir"
+#: ../../Zotlabs/Module/Vote.php:69
+msgid "Invalid response."
+msgstr "respuesta no válida."
-#: ../../Zotlabs/Widget/Pinned.php:125 ../../Zotlabs/Widget/Pinned.php:126
-#, php-format
-msgid "View %s's profile - %s"
-msgstr "Ver el perfil de %s - %s"
+#: ../../Zotlabs/Module/Vote.php:125
+msgid "Response submitted. Updates may not appear instantly."
+msgstr "Respuesta enviada. Las actualizaciones pueden no aparecer al instante."
-#: ../../Zotlabs/Widget/Pinned.php:130 ../../Zotlabs/Widget/Messages.php:104
-#: ../../Zotlabs/Lib/ThreadItem.php:421
-msgid "via"
-msgstr "mediante"
+#: ../../Zotlabs/Module/Xchan.php:10
+msgid "Xchan Lookup"
+msgstr "Búsqueda de canales"
-#: ../../Zotlabs/Widget/Pinned.php:144 ../../Zotlabs/Lib/ThreadItem.php:452
-msgid "Attendance Options"
-msgstr "Opciones de participación o asistencia"
+#: ../../Zotlabs/Module/Xchan.php:13
+msgid "Lookup xchan beginning with (or webbie): "
+msgstr "Buscar un canal (o un \"webbie\") que comience por:"
-#: ../../Zotlabs/Widget/Pinned.php:145 ../../Zotlabs/Lib/ThreadItem.php:454
-msgid "Voting Options"
-msgstr "Opciones de votación"
+#: ../../Zotlabs/Module/Xchan.php:41 ../../Zotlabs/Module/Mitem.php:134
+#: ../../Zotlabs/Module/Menu.php:232
+msgid "Not found."
+msgstr "No encontrado."
-#: ../../Zotlabs/Widget/Pinned.php:157 ../../Zotlabs/Lib/ThreadItem.php:478
-msgid "Pinned post"
-msgstr "Entradas ancladas"
+#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Chat.php:29
+msgid "You must be logged in to see this page."
+msgstr "Debe haber iniciado sesión para poder ver esta página."
-#: ../../Zotlabs/Widget/Pinned.php:159
-msgid "Don't show"
-msgstr "No mostrar"
+#: ../../Zotlabs/Module/Email_validation.php:24
+#: ../../Zotlabs/Module/Email_resend.php:12
+msgid "Token verification failed."
+msgstr "Ha fallado el token de verificación."
-#: ../../Zotlabs/Widget/Activity.php:55
-msgctxt "widget"
-msgid "Activity"
-msgstr "Actividad"
+#: ../../Zotlabs/Module/Email_validation.php:36
+msgid "Email Verification Required"
+msgstr "Verificación obligatoria del correo electrónico"
-#: ../../Zotlabs/Widget/Cdav.php:41
-msgid "Select Channel"
-msgstr "Seleccionar un canal"
+#: ../../Zotlabs/Module/Email_validation.php:37
+#, php-format
+msgid ""
+"A verification token was sent to your email address [%s]. Enter that token "
+"here to complete the account verification step. Please allow a few minutes "
+"for delivery, and check your spam folder if you do not see the message."
+msgstr "Se ha enviado un token de verificación a su dirección de correo electrónico [%s]. Ingrese ese símbolo aquí para completar el paso de verificación de cuenta. Por favor, espere unos minutos para el envío, y revise su carpeta de spam si no ve el mensaje."
-#: ../../Zotlabs/Widget/Cdav.php:46
-msgid "Read-write"
-msgstr "Lectura y escritura"
+#: ../../Zotlabs/Module/Email_validation.php:38
+msgid "Resend Email"
+msgstr "Reenvío de correo electrónico"
-#: ../../Zotlabs/Widget/Cdav.php:47
-msgid "Read-only"
-msgstr "Sólo lectura"
+#: ../../Zotlabs/Module/Email_validation.php:41
+msgid "Validation token"
+msgstr "Token de validación"
-#: ../../Zotlabs/Widget/Cdav.php:131
-msgid "Channel Calendar"
-msgstr "Calendario del canal"
+#: ../../Zotlabs/Module/Profile.php:62 ../../Zotlabs/Module/Channel.php:141
+#: ../../Zotlabs/Module/Hcard.php:37
+msgid "Posts and comments"
+msgstr "Publicaciones y comentarios"
-#: ../../Zotlabs/Widget/Cdav.php:133 ../../Zotlabs/Widget/Cdav.php:147
-#: ../../Zotlabs/Module/Cdav.php:1054
-msgid "CalDAV Calendars"
-msgstr "Calendarios CalDAV"
+#: ../../Zotlabs/Module/Profile.php:69 ../../Zotlabs/Module/Channel.php:148
+#: ../../Zotlabs/Module/Hcard.php:44
+msgid "Only posts"
+msgstr "Solo publicaciones"
-#: ../../Zotlabs/Widget/Cdav.php:135
-msgid "Shared CalDAV Calendars"
-msgstr "Calendarios CalDAV compartidos"
+#: ../../Zotlabs/Module/Profile.php:106
+msgid "vcard"
+msgstr "vcard"
-#: ../../Zotlabs/Widget/Cdav.php:139
-msgid "Share this calendar"
-msgstr "Compartir este calendario"
+#: ../../Zotlabs/Module/Display.php:321 ../../Zotlabs/Module/Channel.php:497
+msgid ""
+"You must enable javascript for your browser to be able to view this content."
+msgstr "Debe habilitar javascript para poder ver este contenido en su navegador."
-#: ../../Zotlabs/Widget/Cdav.php:141
-msgid "Calendar name and color"
-msgstr "Nombre y color del calendario"
+#: ../../Zotlabs/Module/Display.php:341
+msgid "Article"
+msgstr "Artículo"
-#: ../../Zotlabs/Widget/Cdav.php:143
-msgid "Create new CalDAV calendar"
-msgstr "Crear un nuevo calendario CalDAV"
+#: ../../Zotlabs/Module/Display.php:385
+msgid "Item has been removed."
+msgstr "Se ha eliminado el elemento."
-#: ../../Zotlabs/Widget/Cdav.php:144 ../../Zotlabs/Widget/Cdav.php:182
-#: ../../Zotlabs/Module/Cdav.php:1058 ../../Zotlabs/Module/Cdav.php:1387
-#: ../../Zotlabs/Module/Webpages.php:251
-#: ../../Zotlabs/Module/New_channel.php:189
-#: ../../Zotlabs/Module/Blocks.php:159 ../../Zotlabs/Module/Menu.php:182
-#: ../../Zotlabs/Module/Connedit.php:747 ../../Zotlabs/Module/Layouts.php:185
-#: ../../Zotlabs/Storage/Browser.php:365 ../../Zotlabs/Storage/Browser.php:538
-msgid "Create"
-msgstr "Crear"
+#: ../../Zotlabs/Module/Connect.php:65 ../../Zotlabs/Module/Connect.php:118
+msgid "Continue"
+msgstr "Continuar"
-#: ../../Zotlabs/Widget/Cdav.php:145
-msgid "Calendar Name"
-msgstr "Nombre del calendario"
+#: ../../Zotlabs/Module/Connect.php:99
+msgid "Premium Channel Setup"
+msgstr "Configuración del canal premium"
-#: ../../Zotlabs/Widget/Cdav.php:146
-msgid "Calendar Tools"
-msgstr "Gestión de calendarios"
+#: ../../Zotlabs/Module/Connect.php:101
+msgid "Enable premium channel connection restrictions"
+msgstr "Habilitar restricciones de conexión del canal premium"
-#: ../../Zotlabs/Widget/Cdav.php:147 ../../Zotlabs/Module/Cdav.php:1054
-msgid "Channel Calendars"
-msgstr "Calendarios del canal"
+#: ../../Zotlabs/Module/Connect.php:102
+msgid ""
+"Please enter your restrictions or conditions, such as paypal receipt, usage "
+"guidelines, etc."
+msgstr "Por favor introduzca sus restricciones o condiciones, como recibo de paypal, normas de uso, etc."
-#: ../../Zotlabs/Widget/Cdav.php:148
-msgid "Import calendar"
-msgstr "Importar un calendario"
+#: ../../Zotlabs/Module/Connect.php:104 ../../Zotlabs/Module/Connect.php:124
+msgid ""
+"This channel may require additional steps or acknowledgement of the "
+"following conditions prior to connecting:"
+msgstr "Este canal puede requerir antes de conectar unos pasos adicionales o el conocimiento de las siguientes condiciones:"
-#: ../../Zotlabs/Widget/Cdav.php:149
-msgid "Select a calendar to import to"
-msgstr "Seleccionar un calendario para importarlo"
+#: ../../Zotlabs/Module/Connect.php:105
+msgid ""
+"Potential connections will then see the following text before proceeding:"
+msgstr "Las posibles conexiones verán, por tanto, el siguiente texto antes de proceder:"
-#: ../../Zotlabs/Widget/Cdav.php:176
-msgid "Addressbooks"
-msgstr "Agenda de direcciones"
+#: ../../Zotlabs/Module/Connect.php:106 ../../Zotlabs/Module/Connect.php:127
+msgid ""
+"By continuing, I certify that I have complied with any instructions provided"
+" on this page."
+msgstr "Al continuar, certifico que he cumplido con todas las instrucciones proporcionadas en esta página."
-#: ../../Zotlabs/Widget/Cdav.php:178
-msgid "Addressbook name"
-msgstr "Nombre de la agenda"
+#: ../../Zotlabs/Module/Connect.php:115
+msgid "(No specific instructions have been provided by the channel owner.)"
+msgstr "(No ha sido proporcionada ninguna instrucción específica por el propietario del canal.)"
-#: ../../Zotlabs/Widget/Cdav.php:180
-msgid "Create new addressbook"
-msgstr "Crear una nueva agenda de direcciones"
+#: ../../Zotlabs/Module/Connect.php:123
+msgid "Restricted or Premium Channel"
+msgstr "Canal premium o restringido"
-#: ../../Zotlabs/Widget/Cdav.php:181
-msgid "Addressbook Name"
-msgstr "Nombre de la agenda"
+#: ../../Zotlabs/Module/Oauth2.php:54
+msgid "Name and Secret are required"
+msgstr "\"Key\" y \"Secret\" son obligatorios"
-#: ../../Zotlabs/Widget/Cdav.php:183
-msgid "Addressbook Tools"
-msgstr "Gestión de agendas de direcciones"
+#: ../../Zotlabs/Module/Oauth2.php:113
+msgid "Add OAuth2 application"
+msgstr "Añadir aplicación OAuth2"
-#: ../../Zotlabs/Widget/Cdav.php:184
-msgid "Import addressbook"
-msgstr "Importar una agenda de direcciones"
+#: ../../Zotlabs/Module/Oauth2.php:116 ../../Zotlabs/Module/Oauth2.php:144
+#: ../../Zotlabs/Module/Oauth.php:111
+msgid "Name of application"
+msgstr "Nombre de la aplicación"
-#: ../../Zotlabs/Widget/Cdav.php:185
-msgid "Select an addressbook to import to"
-msgstr "Seleccionar una agenda para importarla"
+#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
+#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:113
+msgid "Automatically generated - change if desired. Max length 20"
+msgstr "Generado automáticamente - si lo desea, cámbielo. Longitud máxima: 20"
-#: ../../Zotlabs/Widget/Savedsearch.php:81
-msgid "Remove term"
-msgstr "Eliminar término"
+#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146
+#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:140
+msgid "Redirect"
+msgstr "Redirigir"
-#: ../../Zotlabs/Widget/Suggestedchats.php:36
-msgid "Suggested Chatrooms"
-msgstr "Salas de chat sugeridas"
+#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146
+#: ../../Zotlabs/Module/Oauth.php:114
+msgid ""
+"Redirect URI - leave blank unless your application specifically requires "
+"this"
+msgstr "URI de redirección - dejar en blanco a menos que su aplicación específicamente lo requiera"
-#: ../../Zotlabs/Widget/Settings_menu.php:37
-msgid "Account settings"
-msgstr "Configuración de la cuenta"
+#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:147
+msgid "Grant Types"
+msgstr "Tipos de permisos"
-#: ../../Zotlabs/Widget/Settings_menu.php:43
-msgid "Channel settings"
-msgstr "Configuración del canal"
+#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:120
+msgid "leave blank unless your application sepcifically requires this"
+msgstr "Dejar en blanco a menos que su aplicación lo requiera específicamente"
-#: ../../Zotlabs/Widget/Settings_menu.php:49
-msgid "Privacy settings"
-msgstr "Ajustes de privacidad"
+#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:148
+msgid "Authorization scope"
+msgstr "Alcance de la autorización"
-#: ../../Zotlabs/Widget/Settings_menu.php:56
-msgid "Display settings"
-msgstr "Ajustes de visualización"
+#: ../../Zotlabs/Module/Oauth2.php:132
+msgid "OAuth2 Application not found."
+msgstr "No se ha encontrado la aplicación OAuth2."
-#: ../../Zotlabs/Widget/Settings_menu.php:63
-msgid "Manage locations"
-msgstr "Gestión de ubicaciones (clones) del canal"
+#: ../../Zotlabs/Module/Oauth2.php:141 ../../Zotlabs/Module/Oauth2.php:191
+#: ../../Zotlabs/Module/Oauth.php:108 ../../Zotlabs/Module/Oauth.php:134
+#: ../../Zotlabs/Module/Oauth.php:170
+msgid "Add application"
+msgstr "Añadir aplicación"
-#: ../../Zotlabs/Widget/Chatroom_list.php:26
-msgid "Overview"
-msgstr "Resumen"
+#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148
+msgid "leave blank unless your application specifically requires this"
+msgstr "dejar en blanco a menos que su aplicación lo requiera específicamente"
-#: ../../Zotlabs/Widget/Suggestions.php:53 ../../Zotlabs/Module/Suggest.php:71
-msgid "Ignore/Hide"
-msgstr "Ignorar/Ocultar"
+#: ../../Zotlabs/Module/Oauth2.php:190
+msgid "Connected OAuth2 Apps"
+msgstr "Aplicaciones OAuth2 conectadas"
-#: ../../Zotlabs/Widget/Suggestions.php:58
-msgid "Suggestions"
-msgstr "Sugerencias"
+#: ../../Zotlabs/Module/Oauth2.php:194 ../../Zotlabs/Module/Oauth.php:173
+msgid "Client key starts with"
+msgstr "La \"client key\" empieza por"
-#: ../../Zotlabs/Widget/Suggestions.php:59
-msgid "See more..."
-msgstr "Ver más..."
+#: ../../Zotlabs/Module/Oauth2.php:195 ../../Zotlabs/Module/Oauth.php:174
+msgid "No name"
+msgstr "Sin nombre"
-#: ../../Zotlabs/Widget/Bookmarkedchats.php:25
-msgid "Bookmarked Chatrooms"
-msgstr "Salas de chat preferidas"
+#: ../../Zotlabs/Module/Oauth2.php:196 ../../Zotlabs/Module/Oauth.php:175
+msgid "Remove authorization"
+msgstr "Eliminar autorización"
-#: ../../Zotlabs/Widget/Appcategories.php:49
-msgid "App Categories"
-msgstr "Categorías de aplicaciones"
+#: ../../Zotlabs/Module/Uexport.php:108
+msgid "No content available for year"
+msgstr "No hay contenido disponible para el año"
-#: ../../Zotlabs/Widget/Hq_controls.php:23
-msgid "Toggle post editor"
-msgstr "Alternar editor de entradas"
+#: ../../Zotlabs/Module/Uexport.php:171
+msgid "Export Channel"
+msgstr "Exportar el canal"
-#: ../../Zotlabs/Widget/Hq_controls.php:33
-msgid "Toggle personal notes"
-msgstr "Alternar notas personales"
+#: ../../Zotlabs/Module/Uexport.php:173
+msgid "Export channel"
+msgstr "Exportar canal"
-#: ../../Zotlabs/Widget/Hq_controls.php:43
-msgid "Channel activities"
-msgstr "Actividades del canal"
+#: ../../Zotlabs/Module/Uexport.php:174
+msgid ""
+"This will export your identity and social graph into a file which can be "
+"used to import your channel to a new hub."
+msgstr "Esto exportará su identidad y su gráfico social a un archivo que puede utilizarse para importar su canal a un nuevo hub."
-#: ../../Zotlabs/Widget/Permcats.php:42
-msgid "Add new role"
-msgstr "Añadir nuevo rol"
+#: ../../Zotlabs/Module/Uexport.php:177
+msgid "Export content"
+msgstr "Exportar contenidos"
-#: ../../Zotlabs/Widget/Permcats.php:93
-#: ../../Zotlabs/Module/Contactedit.php:409
-msgid "Contact roles"
-msgstr "Roles del contacto"
+#: ../../Zotlabs/Module/Uexport.php:178
+msgid ""
+"This will export your posts, direct messages, articles and cards per month "
+"stored into a zip file per year. Months with no posts will be dismissed."
+msgstr "Esto exportará sus posts, mensajes directos, artículos y fichas por mes almacenados en un archivo zip por año. Los meses sin publicaciones serán descartados."
-#: ../../Zotlabs/Widget/Permcats.php:94
-msgid "Role members"
-msgstr "Miembros del rol"
+#: ../../Zotlabs/Module/Uexport.php:180
+msgid "Export wikis"
+msgstr "Exportar wikis"
-#: ../../Zotlabs/Widget/Photo.php:54 ../../Zotlabs/Widget/Photo_rand.php:63
-msgid "photo/image"
-msgstr "foto/imagen"
+#: ../../Zotlabs/Module/Uexport.php:181
+msgid "This will export your wikis and wiki pages."
+msgstr "Esto exportará sus wikis y páginas wiki."
-#: ../../Zotlabs/Widget/Admin.php:27 ../../Zotlabs/Module/Admin/Site.php:414
-msgid "Site"
-msgstr "Sitio"
+#: ../../Zotlabs/Module/Uexport.php:183
+msgid "Export webpages"
+msgstr "Exportar páginas web"
-#: ../../Zotlabs/Widget/Admin.php:28
-#: ../../Zotlabs/Module/Admin/Accounts.php:308
-#: ../../Zotlabs/Module/Admin/Accounts.php:327
-#: ../../Zotlabs/Module/Admin.php:95
-msgid "Accounts"
-msgstr "Cuentas"
+#: ../../Zotlabs/Module/Uexport.php:184
+msgid "This will export your webpages and menus."
+msgstr "Esto exportará sus páginas web y menús."
-#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:65
-msgid "Member registrations waiting for confirmation"
-msgstr "Inscripciones de nuevos miembros pendientes de aprobación"
+#: ../../Zotlabs/Module/Uexport.php:186
+msgid "Export channel calendar"
+msgstr "Exportar el calendario del canal"
-#: ../../Zotlabs/Widget/Admin.php:30
-#: ../../Zotlabs/Module/Admin/Security.php:99
-msgid "Security"
-msgstr "Seguridad"
+#: ../../Zotlabs/Module/Uexport.php:187
+msgid ""
+"This will export your channel calendar events and associated items. CalDAV "
+"calendars are not included."
+msgstr "Esto exportará los eventos del calendario de su canal y los elementos asociados. Los calendarios CalDAV no están incluidos."
-#: ../../Zotlabs/Widget/Admin.php:31 ../../Zotlabs/Lib/Apps.php:362
-msgid "Features"
-msgstr "Funcionalidades"
+#: ../../Zotlabs/Module/Uexport.php:189
+msgid "Export chatrooms"
+msgstr "Exportar salas de chat"
-#: ../../Zotlabs/Widget/Admin.php:32 ../../Zotlabs/Module/Admin/Addons.php:343
-#: ../../Zotlabs/Module/Admin/Addons.php:441
-msgid "Addons"
-msgstr "Addons"
+#: ../../Zotlabs/Module/Uexport.php:190
+msgid "This will export your chatrooms. Chat history is dismissed."
+msgstr "Esto exportará sus chats. Se descarta el historial de chats."
-#: ../../Zotlabs/Widget/Admin.php:33 ../../Zotlabs/Module/Admin/Themes.php:123
-#: ../../Zotlabs/Module/Admin/Themes.php:157
-msgid "Themes"
-msgstr "Temas"
+#: ../../Zotlabs/Module/Uexport.php:192
+#, php-format
+msgid ""
+"This export can be imported or restored by visiting <a "
+"href=\"%1$s\">%2$s</a> on any site containing your channel."
+msgstr "Esta exportación puede ser importada o restaurada visitando <a href=\"%1$s\">%2$s</a> cualquier sitio que contenga su canal."
-#: ../../Zotlabs/Widget/Admin.php:34
-msgid "Inspect queue"
-msgstr "Examinar la cola"
+#: ../../Zotlabs/Module/Mitem.php:31 ../../Zotlabs/Module/Menu.php:209
+msgid "Menu not found."
+msgstr "Menú no encontrado"
-#: ../../Zotlabs/Widget/Admin.php:35 ../../Zotlabs/Module/Admin/Profs.php:168
-msgid "Profile Fields"
-msgstr "Campos del perfil"
+#: ../../Zotlabs/Module/Mitem.php:63
+msgid "Unable to create element."
+msgstr "No se puede crear el elemento."
-#: ../../Zotlabs/Widget/Admin.php:36
-msgid "DB updates"
-msgstr "Actualizaciones de la base de datos"
+#: ../../Zotlabs/Module/Mitem.php:87
+msgid "Unable to update menu element."
+msgstr "No es posible actualizar el elemento del menú."
-#: ../../Zotlabs/Widget/Admin.php:53 ../../Zotlabs/Widget/Admin.php:63
-#: ../../Zotlabs/Module/Admin/Logs.php:83
-msgid "Logs"
-msgstr "Informes"
+#: ../../Zotlabs/Module/Mitem.php:103
+msgid "Unable to add menu element."
+msgstr "No es posible añadir el elemento al menú"
-#: ../../Zotlabs/Widget/Admin.php:61
-msgid "Addon Features"
-msgstr "Características del addon"
+#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246
+msgid "Menu Item Permissions"
+msgstr "Permisos del elemento del menú"
-#: ../../Zotlabs/Widget/Activity_filter.php:44
-#: ../../Zotlabs/Widget/Notifications.php:62
-msgid "Direct Messages"
-msgstr "Mensajes directos"
+#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247
+msgid "(click to open/close)"
+msgstr "(pulsar para abrir o cerrar)"
-#: ../../Zotlabs/Widget/Activity_filter.php:48
-msgid "Show direct (private) messages"
-msgstr "Mostrar mensajes (privados) directos"
+#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191
+msgid "Link Name"
+msgstr "Nombre del enlace"
-#: ../../Zotlabs/Widget/Activity_filter.php:53
-#: ../../Zotlabs/Widget/Notifications.php:81
-msgid "Events"
-msgstr "Eventos"
+#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255
+msgid "Link or Submenu Target"
+msgstr "Destino del enlace o submenú"
-#: ../../Zotlabs/Widget/Activity_filter.php:57
-msgid "Show posts that include events"
-msgstr "Mostrar entradas que incluyan eventos"
+#: ../../Zotlabs/Module/Mitem.php:175
+msgid "Enter URL of the link or select a menu name to create a submenu"
+msgstr "Introducir la dirección del enlace o seleccionar el nombre de un submenú"
-#: ../../Zotlabs/Widget/Activity_filter.php:63
-msgid "Polls"
-msgstr "Encuestas"
+#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256
+msgid "Use magic-auth if available"
+msgstr "Usar la autenticación mágica si está disponible"
-#: ../../Zotlabs/Widget/Activity_filter.php:67
-msgid "Show posts that include polls"
-msgstr "Mostrar entradas que incluyan encuestas"
+#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257
+msgid "Open link in new window"
+msgstr "Abrir el enlace en una nueva ventana"
-#: ../../Zotlabs/Widget/Activity_filter.php:90
-#, php-format
-msgid "Show posts related to the %s privacy group"
-msgstr "Mostrar entradas relacionadas con el grupo %s"
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
+msgid "Order in list"
+msgstr "Orden en la lista"
-#: ../../Zotlabs/Widget/Activity_filter.php:99
-msgid "Show my privacy groups"
-msgstr "Mostrar mis grupos de canales"
+#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
+msgid "Higher numbers will sink to bottom of listing"
+msgstr "Los números más altos irán al final de la lista"
-#: ../../Zotlabs/Widget/Activity_filter.php:123
-msgid "Show posts to this forum"
-msgstr "Mostrar las entradas en este foro"
+#: ../../Zotlabs/Module/Mitem.php:179
+msgid "Submit and finish"
+msgstr "Enviar y terminar"
-#: ../../Zotlabs/Widget/Activity_filter.php:134
-msgid "Show forums"
-msgstr "Mostrar los foros"
+#: ../../Zotlabs/Module/Mitem.php:180
+msgid "Submit and continue"
+msgstr "Enviar y continuar"
-#: ../../Zotlabs/Widget/Activity_filter.php:148
-msgid "Starred Posts"
-msgstr "Entradas preferidas"
+#: ../../Zotlabs/Module/Mitem.php:189
+msgid "Menu:"
+msgstr "Menú:"
-#: ../../Zotlabs/Widget/Activity_filter.php:152
-msgid "Show posts that I have starred"
-msgstr "Mostrar entradas que he señalado como preferidas"
+#: ../../Zotlabs/Module/Mitem.php:192
+msgid "Link Target"
+msgstr "Destino del enlace"
-#: ../../Zotlabs/Widget/Activity_filter.php:163
-msgid "Personal Posts"
-msgstr "Entradas personales"
+#: ../../Zotlabs/Module/Mitem.php:195
+msgid "Edit menu"
+msgstr "Editar menú"
-#: ../../Zotlabs/Widget/Activity_filter.php:167
-msgid "Show posts that mention or involve me"
-msgstr "Mostrar entradas que me mencionen o involucren"
+#: ../../Zotlabs/Module/Mitem.php:198
+msgid "Edit element"
+msgstr "Editar el elemento"
-#: ../../Zotlabs/Widget/Activity_filter.php:190
-#, php-format
-msgid "Show posts that I have filed to %s"
-msgstr "Mostrar las entradas que he enviado a %s"
+#: ../../Zotlabs/Module/Mitem.php:199
+msgid "Drop element"
+msgstr "Eliminar el elemento"
-#: ../../Zotlabs/Widget/Activity_filter.php:200
-msgid "Show filed post categories"
-msgstr "Mostrar los temas de las entradas archivadas"
+#: ../../Zotlabs/Module/Mitem.php:200
+msgid "New element"
+msgstr "Nuevo elemento"
-#: ../../Zotlabs/Widget/Activity_filter.php:214
-msgid "Panel search"
-msgstr "Panel de búsqueda"
+#: ../../Zotlabs/Module/Mitem.php:201
+msgid "Edit this menu container"
+msgstr "Modificar el contenedor del menú"
-#: ../../Zotlabs/Widget/Activity_filter.php:224
-msgid "Filter by name"
-msgstr "Filtrar por nombre"
+#: ../../Zotlabs/Module/Mitem.php:202
+msgid "Add menu element"
+msgstr "Añadir un elemento al menú"
-#: ../../Zotlabs/Widget/Activity_filter.php:239
-msgid "Remove active filter"
-msgstr "Eliminar el filtro activo"
+#: ../../Zotlabs/Module/Mitem.php:203
+msgid "Delete this menu item"
+msgstr "Eliminar este elemento del menú"
-#: ../../Zotlabs/Widget/Activity_filter.php:255
-msgid "Stream Filters"
-msgstr "Filtros del stream"
+#: ../../Zotlabs/Module/Mitem.php:204
+msgid "Edit this menu item"
+msgstr "Modificar este elemento del menú"
-#: ../../Zotlabs/Widget/Appstore.php:16
-msgid "App Collections"
-msgstr "Colección de aplicaciones"
+#: ../../Zotlabs/Module/Mitem.php:222
+msgid "Menu item not found."
+msgstr "Este elemento del menú no se ha encontrado"
-#: ../../Zotlabs/Widget/Appstore.php:18
-msgid "Installed apps"
-msgstr "Aplicaciones instaladas"
+#: ../../Zotlabs/Module/Mitem.php:235
+msgid "Menu item deleted."
+msgstr "Este elemento del menú ha sido borrado"
-#: ../../Zotlabs/Widget/Appstore.php:19 ../../Zotlabs/Module/Apps.php:50
-msgid "Available Apps"
-msgstr "Aplicaciones disponibles"
+#: ../../Zotlabs/Module/Mitem.php:237
+msgid "Menu item could not be deleted."
+msgstr "Este elemento del menú no puede ser borrado."
-#: ../../Zotlabs/Widget/Privacygroups.php:45
-msgid "Add new group"
-msgstr "Añadir nuevo grupo"
+#: ../../Zotlabs/Module/Mitem.php:244
+msgid "Edit Menu Element"
+msgstr "Editar elemento del menú"
-#: ../../Zotlabs/Widget/Privacygroups.php:54
-#: ../../Zotlabs/Module/Contactedit.php:443
-msgid "Privacy groups"
-msgstr "Grupos de canales"
+#: ../../Zotlabs/Module/Mitem.php:254
+msgid "Link text"
+msgstr "Texto del enlace"
-#: ../../Zotlabs/Widget/Rating.php:57
-msgid "Rating Tools"
-msgstr "Valoraciones"
+#: ../../Zotlabs/Module/Notify.php:85
+#: ../../Zotlabs/Module/Notifications.php:106
+msgid "No more system notifications."
+msgstr "No hay más notificaciones del sistema"
-#: ../../Zotlabs/Widget/Rating.php:61 ../../Zotlabs/Widget/Rating.php:63
-msgid "Rate Me"
-msgstr "Valorar este canal"
+#: ../../Zotlabs/Module/Notify.php:89
+#: ../../Zotlabs/Module/Notifications.php:110
+msgid "System Notifications"
+msgstr "Notificaciones del sistema"
-#: ../../Zotlabs/Widget/Rating.php:66
-msgid "View Ratings"
-msgstr "Mostrar las valoraciones"
+#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56
+msgid "App installed."
+msgstr "Aplicación instalada."
-#: ../../Zotlabs/Widget/Cover_photo.php:71
-msgid "Click to show more"
-msgstr "Hacer clic para ver más"
+#: ../../Zotlabs/Module/Appman.php:49
+msgid "Malformed app."
+msgstr "Aplicación con errores"
-#: ../../Zotlabs/Widget/Follow.php:27 ../../Zotlabs/Module/Connections.php:368
-#, php-format
-msgid "You have %1$.0f of %2$.0f allowed connections."
-msgstr "Tiene %1$.0f de %2$.0f conexiones permitidas."
+#: ../../Zotlabs/Module/Appman.php:198
+msgid "Embed code"
+msgstr "Código incorporado"
-#: ../../Zotlabs/Widget/Follow.php:34
-msgid "Add New Connection"
-msgstr "Añadir nueva conexión"
+#: ../../Zotlabs/Module/Appman.php:203
+msgid "Edit App"
+msgstr "Modificar la aplicación"
-#: ../../Zotlabs/Widget/Follow.php:35
-msgid "Enter channel address"
-msgstr "Dirección del canal"
+#: ../../Zotlabs/Module/Appman.php:203
+msgid "Create App"
+msgstr "Crear una aplicación"
-#: ../../Zotlabs/Widget/Follow.php:36
-msgid "Examples: bob@example.com, https://example.com/barbara"
-msgstr "Ejemplos: manuel@ejemplo.com, https://ejemplo.com/carmen"
+#: ../../Zotlabs/Module/Appman.php:208
+msgid "Name of app"
+msgstr "Nombre de la aplicación"
-#: ../../Zotlabs/Widget/Messages.php:32
-msgid "Public and restricted messages"
-msgstr "Mensajes públicos y restringidos"
+#: ../../Zotlabs/Module/Appman.php:209
+msgid "Location (URL) of app"
+msgstr "Dirección (URL) de la aplicación"
-#: ../../Zotlabs/Widget/Messages.php:33
-msgid "Direct messages"
-msgstr "Mensajes directos"
+#: ../../Zotlabs/Module/Appman.php:211
+msgid "Photo icon URL"
+msgstr "Dirección del icono"
-#: ../../Zotlabs/Widget/Messages.php:34
-msgid "Starred messages"
-msgstr "Entradas preferidas"
+#: ../../Zotlabs/Module/Appman.php:211
+msgid "80 x 80 pixels - optional"
+msgstr "80 x 80 pixels - opcional"
-#: ../../Zotlabs/Widget/Messages.php:35
-#: ../../Zotlabs/Widget/Notifications.php:116
-#: ../../Zotlabs/Widget/Notifications.php:117
-msgid "Notices"
-msgstr "Avisos"
+#: ../../Zotlabs/Module/Appman.php:212
+msgid "Categories (optional, comma separated list)"
+msgstr "Temas (opcional, lista separada por comas)"
-#: ../../Zotlabs/Widget/Messages.php:37
-msgid "No messages"
-msgstr "Sin mensajes"
+#: ../../Zotlabs/Module/Appman.php:213
+msgid "Version ID"
+msgstr "Versión"
-#: ../../Zotlabs/Widget/Newmember.php:36
-msgid "Profile Creation"
-msgstr "Creación de perfiles"
+#: ../../Zotlabs/Module/Appman.php:214
+msgid "Price of app"
+msgstr "Precio de la aplicación"
-#: ../../Zotlabs/Widget/Newmember.php:38
-msgid "Upload profile photo"
-msgstr "Cargar la foto del perfil"
+#: ../../Zotlabs/Module/Appman.php:215
+msgid "Location (URL) to purchase app"
+msgstr "Dirección (URL) donde adquirir la aplicación"
-#: ../../Zotlabs/Widget/Newmember.php:39
-msgid "Upload cover photo"
-msgstr "Cargar la foto de portada del perfil"
+#: ../../Zotlabs/Module/Layouts.php:129 ../../Zotlabs/Module/Layouts.php:187
+#: ../../Zotlabs/Module/Editlayout.php:128
+msgid "Layout Name"
+msgstr "Nombre de la plantilla"
-#: ../../Zotlabs/Widget/Newmember.php:43
-msgid "Find and Connect with others"
-msgstr "Encontrar y conectarse con otros"
+#: ../../Zotlabs/Module/Layouts.php:132
+#: ../../Zotlabs/Module/Editlayout.php:129
+msgid "Layout Description (Optional)"
+msgstr "Descripción de la plantilla (opcional)"
-#: ../../Zotlabs/Widget/Newmember.php:45
-msgid "View the directory"
-msgstr "Ver el directorio"
+#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Module/Blocks.php:157
+#: ../../Zotlabs/Module/Menu.php:182 ../../Zotlabs/Module/Connedit.php:747
+#: ../../Zotlabs/Module/Cdav.php:1060 ../../Zotlabs/Module/Cdav.php:1389
+#: ../../Zotlabs/Module/Webpages.php:249
+#: ../../Zotlabs/Module/New_channel.php:189 ../../Zotlabs/Widget/Cdav.php:146
+#: ../../Zotlabs/Widget/Cdav.php:184 ../../Zotlabs/Storage/Browser.php:368
+#: ../../Zotlabs/Storage/Browser.php:544
+msgid "Create"
+msgstr "Crear"
-#: ../../Zotlabs/Widget/Newmember.php:46 ../../Zotlabs/Module/Go.php:38
-msgid "View friend suggestions"
-msgstr "Ver sugerencias de amistad"
+#: ../../Zotlabs/Module/Layouts.php:184
+msgid "Comanche page description language help"
+msgstr "Página de ayuda del lenguaje de descripción de páginas (PDL) Comanche"
-#: ../../Zotlabs/Widget/Newmember.php:47
-msgid "Manage your connections"
-msgstr "Gestionar sus conexiones"
+#: ../../Zotlabs/Module/Layouts.php:188
+msgid "Layout Description"
+msgstr "Descripción de la plantilla"
-#: ../../Zotlabs/Widget/Newmember.php:50
-msgid "Communicate"
-msgstr "Comunicarse"
+#: ../../Zotlabs/Module/Layouts.php:189 ../../Zotlabs/Module/Blocks.php:155
+#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Webpages.php:261
+msgid "Created"
+msgstr "Creado"
-#: ../../Zotlabs/Widget/Newmember.php:52
-msgid "View your channel homepage"
-msgstr "Ver la página principal de su canal"
+#: ../../Zotlabs/Module/Layouts.php:190 ../../Zotlabs/Module/Blocks.php:156
+#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Webpages.php:262
+msgid "Edited"
+msgstr "Editado"
-#: ../../Zotlabs/Widget/Newmember.php:53
-msgid "View your network stream"
-msgstr "Ver el \"stream\" de su red"
+#: ../../Zotlabs/Module/Layouts.php:193
+msgid "Download PDL file"
+msgstr "Descargar el fichero PDL"
-#: ../../Zotlabs/Widget/Newmember.php:59
-msgid "Documentation"
-msgstr "Documentación"
+#: ../../Zotlabs/Module/Share.php:120
+msgid "Post repeated"
+msgstr "Entrada repetida"
-#: ../../Zotlabs/Widget/Newmember.php:62
-msgid "Missing Features?"
-msgstr "¿Faltan Características?"
+#: ../../Zotlabs/Module/Blocks.php:97 ../../Zotlabs/Module/Blocks.php:153
+#: ../../Zotlabs/Module/Editblock.php:113
+msgid "Block Name"
+msgstr "Nombre del bloque"
-#: ../../Zotlabs/Widget/Newmember.php:64
-msgid "Pin apps to navigation bar"
-msgstr "Fijar apps a la barra de navegación"
+#: ../../Zotlabs/Module/Blocks.php:154
+msgid "Block Title"
+msgstr "Título del bloque"
-#: ../../Zotlabs/Widget/Newmember.php:65
-msgid "Install more apps"
-msgstr "Instalar más apps"
+#: ../../Zotlabs/Module/Authorize.php:17
+msgid "Unknown App"
+msgstr "Aplicación desconocida"
-#: ../../Zotlabs/Widget/Newmember.php:76
-msgid "View public stream"
-msgstr "Ver el \"stream\" público"
+#: ../../Zotlabs/Module/Authorize.php:29
+msgid "Authorize"
+msgstr "Autorizar"
-#: ../../Zotlabs/Widget/Newmember.php:80
-#: ../../Zotlabs/Module/Settings/Display.php:200
-msgid "New Member Links"
-msgstr "Enlaces para nuevos miembros"
+#: ../../Zotlabs/Module/Authorize.php:30
+#, php-format
+msgid "Do you authorize the app %s to access your channel data?"
+msgstr "¿Autoriza a la aplicación %s a acceder a los datos de su canal?"
-#: ../../Zotlabs/Widget/Notes.php:39
-msgid "Read mode"
-msgstr "Modo lectura"
+#: ../../Zotlabs/Module/Authorize.php:33
+#: ../../Zotlabs/Module/Admin/Accounts.php:319
+msgid "Deny"
+msgstr "Rechazar"
-#: ../../Zotlabs/Widget/Notes.php:40
-msgid "Edit mode"
-msgstr "Modo edición"
+#: ../../Zotlabs/Module/Follow.php:92
+msgid "Connection added."
+msgstr "Se ha incorporado una conexión."
-#: ../../Zotlabs/Widget/Notes.php:41
-msgid "Editing"
-msgstr "Editar"
+#: ../../Zotlabs/Module/Connections.php:58
+#: ../../Zotlabs/Module/Connections.php:116
+msgid "Active"
+msgstr "Activo/a"
-#: ../../Zotlabs/Widget/Notes.php:42
-msgid "Saving"
-msgstr "Guardar"
+#: ../../Zotlabs/Module/Connections.php:63
+#: ../../Zotlabs/Module/Connections.php:184
+#: ../../Zotlabs/Module/Connections.php:290
+msgid "Blocked"
+msgstr "Bloqueadas"
-#: ../../Zotlabs/Widget/Notes.php:43
-msgid "Saved"
-msgstr "Guardado"
+#: ../../Zotlabs/Module/Connections.php:68
+#: ../../Zotlabs/Module/Connections.php:191
+#: ../../Zotlabs/Module/Connections.php:289
+msgid "Ignored"
+msgstr "Ignoradas"
-#: ../../Zotlabs/Widget/Affinity.php:36
-#: ../../Zotlabs/Module/Contactedit.php:295
-#: ../../Zotlabs/Module/Connedit.php:579
-msgid "Me"
-msgstr "Yo"
+#: ../../Zotlabs/Module/Connections.php:73
+#: ../../Zotlabs/Module/Connections.php:205
+#: ../../Zotlabs/Module/Connections.php:288
+msgid "Hidden"
+msgstr "Ocultas"
-#: ../../Zotlabs/Widget/Affinity.php:37
-#: ../../Zotlabs/Module/Contactedit.php:296
-#: ../../Zotlabs/Module/Connedit.php:580
-msgid "Family"
-msgstr "Familia"
+#: ../../Zotlabs/Module/Connections.php:78
+#: ../../Zotlabs/Module/Connections.php:198
+msgid "Archived/Unreachable"
+msgstr "Archivadas o inaccesibles"
-#: ../../Zotlabs/Widget/Affinity.php:39
-#: ../../Zotlabs/Module/Contactedit.php:298
-#: ../../Zotlabs/Module/Connedit.php:582
-msgid "Acquaintances"
-msgstr "Conocidos/as"
+#: ../../Zotlabs/Module/Connections.php:83
+#: ../../Zotlabs/Module/Connections.php:92 ../../Zotlabs/Module/Menu.php:180
+#: ../../Zotlabs/Module/Notifications.php:101
+msgid "New"
+msgstr "Nuevas"
-#: ../../Zotlabs/Widget/Affinity.php:40
-#: ../../Zotlabs/Module/Contactedit.php:299
#: ../../Zotlabs/Module/Connections.php:97
#: ../../Zotlabs/Module/Connections.php:111
#: ../../Zotlabs/Module/Connedit.php:583
+#: ../../Zotlabs/Module/Contactedit.php:299
+#: ../../Zotlabs/Widget/Affinity.php:40
msgid "All"
msgstr "Todos/as"
-#: ../../Zotlabs/Widget/Affinity.php:60
-msgid "Refresh"
-msgstr "Recargar"
-
-#: ../../Zotlabs/Widget/Notifications.php:24
-msgid "New network activity notifications"
-msgstr "Avisos de nueva actividad en la red"
-
-#: ../../Zotlabs/Widget/Notifications.php:27
-msgid "Network stream"
-msgstr "Stream de la red"
-
-#: ../../Zotlabs/Widget/Notifications.php:30
-#: ../../Zotlabs/Widget/Notifications.php:69
-msgid "Mark all notifications read"
-msgstr "Marcar todas las notificaciones como leídas"
-
-#: ../../Zotlabs/Widget/Notifications.php:33
-#: ../../Zotlabs/Widget/Notifications.php:53
-#: ../../Zotlabs/Widget/Notifications.php:72
-#: ../../Zotlabs/Widget/Notifications.php:164
-msgid "Show new posts only"
-msgstr "Mostrar solo las entradas nuevas"
-
-#: ../../Zotlabs/Widget/Notifications.php:34
-#: ../../Zotlabs/Widget/Notifications.php:54
-#: ../../Zotlabs/Widget/Notifications.php:73
-#: ../../Zotlabs/Widget/Notifications.php:134
-#: ../../Zotlabs/Widget/Notifications.php:165
-msgid "Filter by name or address"
-msgstr "Filtrar por nombre o dirección"
-
-#: ../../Zotlabs/Widget/Notifications.php:44
-msgid "New home activity notifications"
-msgstr "Avisos de nueva actividad en su página principal"
-
-#: ../../Zotlabs/Widget/Notifications.php:47
-msgid "Home stream"
-msgstr "Stream de su página principal"
-
-#: ../../Zotlabs/Widget/Notifications.php:50
-#: ../../Zotlabs/Widget/Notifications.php:161
-msgid "Mark all notifications seen"
-msgstr "Marcar todas las notificaciones como vistas"
-
-#: ../../Zotlabs/Widget/Notifications.php:63
-msgid "New direct messages notifications"
-msgstr "Nuevas notificaciones de mensajes directos"
-
-#: ../../Zotlabs/Widget/Notifications.php:66
-msgid "Direct messages stream"
-msgstr "Stream de mensajes directos"
-
-#: ../../Zotlabs/Widget/Notifications.php:82
-msgid "New events notifications"
-msgstr "Avisos de nuevos eventos"
-
-#: ../../Zotlabs/Widget/Notifications.php:85
-msgid "View events"
-msgstr "Ver los eventos"
+#: ../../Zotlabs/Module/Connections.php:160
+msgid "Active Connections"
+msgstr "Conexiones activas"
-#: ../../Zotlabs/Widget/Notifications.php:88
-msgid "Mark all events seen"
-msgstr "Marcar todos los eventos como leidos"
+#: ../../Zotlabs/Module/Connections.php:163
+msgid "Show active connections"
+msgstr "Mostrar las conexiones activas"
+#: ../../Zotlabs/Module/Connections.php:167
#: ../../Zotlabs/Widget/Notifications.php:96
-#: ../../Zotlabs/Module/Connections.php:165
msgid "New Connections"
msgstr "Nuevas conexiones"
-#: ../../Zotlabs/Widget/Notifications.php:97
-msgid "New connections notifications"
-msgstr "Avisos de nuevas conexiones"
-
-#: ../../Zotlabs/Widget/Notifications.php:100
-msgid "View all connections"
-msgstr "Ver todas las conexiones"
+#: ../../Zotlabs/Module/Connections.php:170
+msgid "Show pending (new) connections"
+msgstr "Mostrar conexiones (nuevas) pendientes"
-#: ../../Zotlabs/Widget/Notifications.php:109
-msgid "New files notifications"
-msgstr "Avisos de nuevos ficheros"
+#: ../../Zotlabs/Module/Connections.php:187
+msgid "Only show blocked connections"
+msgstr "Mostrar solo las conexiones bloqueadas"
-#: ../../Zotlabs/Widget/Notifications.php:120
-msgid "View all notices"
-msgstr "Ver todos los avisos"
+#: ../../Zotlabs/Module/Connections.php:194
+msgid "Only show ignored connections"
+msgstr "Mostrar solo conexiones ignoradas"
-#: ../../Zotlabs/Widget/Notifications.php:123
-msgid "Mark all notices seen"
-msgstr "Marcar como leídos todos los avisos"
+#: ../../Zotlabs/Module/Connections.php:201
+msgid "Only show archived/unreachable connections"
+msgstr "Mostrar solo las conexiones archivadas o no localizables"
-#: ../../Zotlabs/Widget/Notifications.php:144
-msgid "Registrations"
-msgstr "Registros"
+#: ../../Zotlabs/Module/Connections.php:208
+msgid "Only show hidden connections"
+msgstr "Mostrar solo las conexiones ocultas"
-#: ../../Zotlabs/Widget/Notifications.php:145
-msgid "New registrations notifications"
-msgstr "Notificaciones de nuevos registros"
+#: ../../Zotlabs/Module/Connections.php:220
+#: ../../Zotlabs/Module/Profperm.php:140
+msgid "All Connections"
+msgstr "Todas las conexiones"
-#: ../../Zotlabs/Widget/Notifications.php:154
-#: ../../Zotlabs/Module/Pubstream.php:100 ../../Zotlabs/Lib/Apps.php:379
-msgid "Public Stream"
-msgstr "\"Stream\" público"
+#: ../../Zotlabs/Module/Connections.php:223
+msgid "Show all connections"
+msgstr "Mostrar todas las conexiones"
-#: ../../Zotlabs/Widget/Notifications.php:155
-msgid "New public stream notifications"
-msgstr "Nuevos avisos del stream público"
+#: ../../Zotlabs/Module/Connections.php:286
+msgid "Pending approval"
+msgstr "Pendiente de aprobación"
-#: ../../Zotlabs/Widget/Notifications.php:158
-msgid "Public stream"
-msgstr "\"Stream\" público"
+#: ../../Zotlabs/Module/Connections.php:287
+msgid "Archived"
+msgstr "Archivadas"
-#: ../../Zotlabs/Widget/Notifications.php:172
-msgid "Sorry, you have got no notifications at the moment"
-msgstr "Lo sentimos, por el momento no ha recibido ninguna notificación"
+#: ../../Zotlabs/Module/Connections.php:291
+msgid "Not connected at this location"
+msgstr "No está conectado/a en esta ubicación"
-#: ../../Zotlabs/Module/Tokens.php:94
+#: ../../Zotlabs/Module/Connections.php:330
#, php-format
-msgid "This channel is limited to %d tokens"
-msgstr "Este canal tiene un límite de %d tokens"
+msgid "%1$s [%2$s]"
+msgstr "%1$s [%2$s]"
-#: ../../Zotlabs/Module/Tokens.php:100
-msgid "Name and Password are required."
-msgstr "Se requiere el nombre y la contraseña."
+#: ../../Zotlabs/Module/Connections.php:331
+msgid "Edit connection"
+msgstr "Editar conexión"
-#: ../../Zotlabs/Module/Tokens.php:215
-msgid "Token saved."
-msgstr "Token salvado."
+#: ../../Zotlabs/Module/Connections.php:333
+msgid "Delete connection"
+msgstr "Eliminar conexión"
-#: ../../Zotlabs/Module/Tokens.php:261
-msgid ""
-"Use this form to create temporary access identifiers to share things with "
-"non-members. These identities may be used in privacy groups and visitors may"
-" login using these credentials to access private content."
-msgstr "Utilice este formulario para crear identificadores de acceso temporal para compartir cosas con los no miembros. Estas identidades se pueden usar en los grupos de canales y así los visitantes pueden iniciar sesión, utilizando estas credenciales, para acceder a su contenido privado."
+#: ../../Zotlabs/Module/Connections.php:339
+msgid "Channel address"
+msgstr "Dirección del canal"
-#: ../../Zotlabs/Module/Tokens.php:274
-msgid "Please select a role for this guest!"
-msgstr "Por favor, seleccione un rol para este invitado"
+#: ../../Zotlabs/Module/Connections.php:344
+msgid "Call"
+msgstr "Llamar"
-#: ../../Zotlabs/Module/Tokens.php:287
-msgid "Select a role for this guest"
-msgstr "Seleccione un rol para este invitado"
+#: ../../Zotlabs/Module/Connections.php:346
+msgid "Status"
+msgstr "Estado"
-#: ../../Zotlabs/Module/Tokens.php:288 ../../Zotlabs/Lib/Apps.php:373
-msgid "Guest Access"
-msgstr "Acceso para invitados"
+#: ../../Zotlabs/Module/Connections.php:349
+msgid "Connected"
+msgstr "Conectado/a"
-#: ../../Zotlabs/Module/Tokens.php:291
-msgid "Login Name"
-msgstr "Nombre de inicio de sesión"
+#: ../../Zotlabs/Module/Connections.php:351
+#: ../../Zotlabs/Module/Contactedit.php:462
+msgid "Approve connection"
+msgstr "Aprobar esta conexión"
-#: ../../Zotlabs/Module/Tokens.php:292
-msgid "Login Password"
-msgstr "Contraseña de inicio de sesión"
+#: ../../Zotlabs/Module/Connections.php:353
+msgid "Ignore connection"
+msgstr "Ignorar esta conexión"
-#: ../../Zotlabs/Module/Tokens.php:293
-msgid "Expires (yyyy-mm-dd)"
-msgstr "Expira (aaaa-mm-dd)"
+#: ../../Zotlabs/Module/Connections.php:354
+#: ../../Zotlabs/Module/Connedit.php:516
+#: ../../Zotlabs/Module/Contactedit.php:646
+msgid "Ignore"
+msgstr "Ignorar"
-#: ../../Zotlabs/Module/Attach_edit.php:69
-#: ../../Zotlabs/Module/Filestorage.php:109
-msgid "File not found."
-msgstr "Fichero no encontrado."
+#: ../../Zotlabs/Module/Connections.php:355
+msgid "Recent activity"
+msgstr "Actividad reciente"
-#: ../../Zotlabs/Module/Attach_edit.php:118
-msgid "Can not copy folder into itself."
-msgstr "No se puede copiar la carpeta en sí misma."
+#: ../../Zotlabs/Module/Connections.php:361
+msgid "Connect at this location"
+msgstr "Conectar en esta ubicación "
-#: ../../Zotlabs/Module/Attach_edit.php:131
+#: ../../Zotlabs/Module/Connections.php:371 ../../Zotlabs/Widget/Follow.php:27
#, php-format
-msgid "Can not move folder \"%s\" into itself."
-msgstr "No se puede mover la carpeta\"%s\" en sí misma."
+msgid "You have %1$.0f of %2$.0f allowed connections."
+msgstr "Tiene %1$.0f de %2$.0f conexiones permitidas."
-#: ../../Zotlabs/Module/Network.php:106
-msgid "No such group"
-msgstr "No se encuentra el grupo"
+#: ../../Zotlabs/Module/Connections.php:398
+#: ../../Zotlabs/Module/Connedit.php:686
+msgid "Contact role"
+msgstr "Rol del contacto"
-#: ../../Zotlabs/Module/Network.php:158
-msgid "No such channel"
-msgstr "No se encuentra el canal"
+#: ../../Zotlabs/Module/Connections.php:399
+msgid "Search your connections"
+msgstr "Buscar sus conexiones"
-#: ../../Zotlabs/Module/Network.php:170 ../../Zotlabs/Module/Channel.php:232
-msgid "Search Results For:"
-msgstr "Buscar resultados para:"
+#: ../../Zotlabs/Module/Connections.php:400
+msgid "Contact search"
+msgstr "Buscar contacto"
-#: ../../Zotlabs/Module/Network.php:211 ../../Zotlabs/Module/Channel.php:267
-#: ../../Zotlabs/Module/Hq.php:101 ../../Zotlabs/Module/Pubstream.php:90
-#: ../../Zotlabs/Module/Display.php:87
-msgid "Reset form"
-msgstr "Reiniciar el formulario"
+#: ../../Zotlabs/Module/Connections.php:408
+#: ../../Zotlabs/Module/Contactedit.php:397
+msgid "This is a group/forum channel"
+msgstr "Este es un canal de grupo/foro"
-#: ../../Zotlabs/Module/Network.php:246
-msgid "Privacy group is empty"
-msgstr "El grupo de canales está vacío"
+#: ../../Zotlabs/Module/Cal.php:62
+msgid "Permissions denied."
+msgstr "Permisos denegados."
-#: ../../Zotlabs/Module/Network.php:256
-msgid "Privacy group: "
-msgstr "Grupo de canales: "
+#: ../../Zotlabs/Module/Cal.php:165 ../../Zotlabs/Module/Cdav.php:945
+#: ../../Zotlabs/Module/Channel_calendar.php:392
+msgid "Link to source"
+msgstr "Enlace a la fuente"
+
+#: ../../Zotlabs/Module/Cal.php:203 ../../Zotlabs/Module/Cdav.php:1036
+#: ../../Zotlabs/Module/Photos.php:942
+msgid "Previous"
+msgstr "Anterior"
+
+#: ../../Zotlabs/Module/Cal.php:204 ../../Zotlabs/Module/Cdav.php:1037
+#: ../../Zotlabs/Module/Setup.php:272 ../../Zotlabs/Module/Photos.php:951
+msgid "Next"
+msgstr "Siguiente"
+
+#: ../../Zotlabs/Module/Cal.php:205 ../../Zotlabs/Module/Cdav.php:1038
+msgid "Today"
+msgstr "Hoy"
#: ../../Zotlabs/Module/Import_items.php:50
msgid "Not a zip file or zip file corrupted."
@@ -8214,719 +9691,433 @@ msgstr "Importación de wikis completada"
msgid "Webpages import completed"
msgstr "Importación de páginas web completada"
-#: ../../Zotlabs/Module/Import.php:70
-msgid "Nothing to import."
-msgstr "No hay nada para importar."
-
-#: ../../Zotlabs/Module/Import.php:86 ../../Zotlabs/Module/Import.php:100
-msgid "Unable to download data from old server"
-msgstr "No se han podido descargar datos de su antiguo servidor"
-
-#: ../../Zotlabs/Module/Import.php:163
-#, php-format
-msgid "Your service plan only allows %d channels."
-msgstr "Su paquete de servicios solo permite %d canales."
-
-#: ../../Zotlabs/Module/Import.php:190
-msgid "No channel. Import failed."
-msgstr "No hay canal. La importación ha fallado"
-
-#: ../../Zotlabs/Module/Import.php:557
-msgid ""
-"Automatic content and files import was not possible due to API version "
-"incompatiblity. Please import content and files manually!"
-msgstr "La importación automática de contenidos y archivos no fue posible debido a la incompatibilidad de la versión de la API. Por favor, importe el contenido y los archivos manualmente."
-
-#: ../../Zotlabs/Module/Import.php:585
-msgid "You must be logged in to use this feature."
-msgstr "Debe estar registrado para poder usar esta funcionalidad."
-
-#: ../../Zotlabs/Module/Import.php:592
-msgid "Channel Import"
-msgstr "Importar canal"
-
-#: ../../Zotlabs/Module/Import.php:593
-msgid ""
-"Use this form to import an existing channel from a different server/hub. You"
-" may retrieve the channel identity from the old server/hub via the network "
-"or provide an export file."
-msgstr "Emplee este formulario para importar un canal desde un servidor/hub diferente. Puede recuperar el canal desde el antiguo servidor/hub a través de la red o proporcionando un fichero de exportación."
-
-#: ../../Zotlabs/Module/Import.php:595
-msgid "Or provide the old server/hub details"
-msgstr "O proporcione los detalles de su antiguo servidor/hub"
-
-#: ../../Zotlabs/Module/Import.php:597
-msgid "Your old identity address (xyz@example.com)"
-msgstr "Su identidad en el antiguo servidor (canal@ejemplo.com)"
-
-#: ../../Zotlabs/Module/Import.php:598
-msgid "Your old login email address"
-msgstr "Su antigua dirección de correo electrónico"
-
-#: ../../Zotlabs/Module/Import.php:599
-msgid "Your old login password"
-msgstr "Su antigua contraseña"
-
-#: ../../Zotlabs/Module/Import.php:600
-msgid "Import your items and files (limited by available memory)"
-msgstr "Importar sus artículos y archivos (limitado por la memoria disponible)"
-
-#: ../../Zotlabs/Module/Import.php:602
-msgid ""
-"For either option, please choose whether to make this hub your new primary "
-"address, or whether your old location should continue this role. You will be"
-" able to post from either location, but only one can be marked as the "
-"primary location for files, photos, and media."
-msgstr "Para cualquiera de las opciones, elija si hacer de este servidor su nueva dirección primaria, o si su antigua dirección debe continuar con este papel. Usted podrá publicar desde cualquier ubicación, pero sólo una puede estar marcada como la ubicación principal para los ficheros, fotos y otras imágenes o vídeos."
-
-#: ../../Zotlabs/Module/Import.php:604
-msgid "Make this hub my primary location"
-msgstr "Convertir este servidor en mi ubicación primaria"
-
-#: ../../Zotlabs/Module/Import.php:605
-msgid "Move this channel (disable all previous locations)"
-msgstr "Mover este canal (desactivar todas las ubicaciones anteriores)"
-
-#: ../../Zotlabs/Module/Import.php:606
-msgid "Use this channel nickname instead of the one provided"
-msgstr "Usa este alias de canal en lugar del que se proporciona"
-
-#: ../../Zotlabs/Module/Import.php:606
-msgid ""
-"Leave blank to keep your existing channel nickname. You will be randomly "
-"assigned a similar nickname if either name is already allocated on this "
-"site."
-msgstr "Dejar en blanco para mantener su alias de canal . Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio."
-
-#: ../../Zotlabs/Module/Import.php:608
-msgid ""
-"This process may take several minutes to complete. Please submit the form "
-"only once and leave this page open until finished."
-msgstr "Este proceso puede tardar varios minutos en completarse. Por favor envíe el formulario una sola vez y mantenga esta página abierta hasta que termine."
-
-#: ../../Zotlabs/Module/Ochannel.php:32 ../../Zotlabs/Module/Channel.php:44
-#: ../../Zotlabs/Module/Chat.php:29
-msgid "You must be logged in to see this page."
-msgstr "Debe haber iniciado sesión para poder ver esta página."
-
-#: ../../Zotlabs/Module/Z6trans.php:19
-msgid "Update to Hubzilla 5.0 step 2"
-msgstr "Actualizar a Hubzilla 5.0. Paso 2"
-
-#: ../../Zotlabs/Module/Z6trans.php:21
-msgid "To complete the update please run"
-msgstr "Para completar la actualización, ejecutar "
-
-#: ../../Zotlabs/Module/Z6trans.php:23
-msgid "php util/z6convert.php"
-msgstr "php util/z6convert.php"
-
-#: ../../Zotlabs/Module/Z6trans.php:25
-msgid "from the terminal."
-msgstr "desde la terminal."
-
-#: ../../Zotlabs/Module/Register.php:112
-msgid "Email address required"
-msgstr "Dirección de correo electrónico requerida"
-
-#: ../../Zotlabs/Module/Register.php:156
-msgid "No password provided"
-msgstr "No se ha proporcionado la contraseña"
-
-#: ../../Zotlabs/Module/Register.php:179
-msgid "Terms of Service not accepted"
-msgstr "No se han aceptado los Términos del servicio"
-
-#: ../../Zotlabs/Module/Register.php:241
-msgid "Invitation code succesfully applied"
-msgstr "El código de invitación se ha aplicado con éxito"
-
-#: ../../Zotlabs/Module/Register.php:261
-msgid "Invitation not in time or too late"
-msgstr "La invitación no llega a tiempo o llega demasiado tarde"
-
-#: ../../Zotlabs/Module/Register.php:267
-msgid "Invitation email failed"
-msgstr "Error en el correo electrónico de invitación"
-
-#: ../../Zotlabs/Module/Register.php:275
-msgid "Invitation code failed"
-msgstr "Código de invitación fallido"
+#: ../../Zotlabs/Module/Bookmarks.php:62
+msgid "Bookmark added"
+msgstr "Marcador añadido"
-#: ../../Zotlabs/Module/Register.php:282
-msgid "Invitations are not available"
-msgstr "No hay invitaciones disponibles"
+#: ../../Zotlabs/Module/Bookmarks.php:101
+msgid "My Connections Bookmarks"
+msgstr "Marcadores de mis conexiones"
-#: ../../Zotlabs/Module/Register.php:292
-msgid "Registration on this hub is by invitation only"
-msgstr "El registro en este hub solo es posible por invitación"
+#: ../../Zotlabs/Module/Editlayout.php:137
+msgid "Edit Layout"
+msgstr "Modificar la plantilla"
-#: ../../Zotlabs/Module/Register.php:399
-msgid "New register request"
-msgstr "Nueva solicitud de registro"
+#: ../../Zotlabs/Module/Oauth.php:45
+msgid "Name is required"
+msgstr "El nombre es obligatorio"
-#: ../../Zotlabs/Module/Register.php:417
-msgid "Error creating dId A"
-msgstr "Error al crear dId A"
+#: ../../Zotlabs/Module/Oauth.php:49
+msgid "Key and Secret are required"
+msgstr "\"Key\" y \"Secret\" son obligatorios"
-#: ../../Zotlabs/Module/Register.php:435
-msgid "Registration on this hub is disabled."
-msgstr "El registro está deshabilitado en este sitio."
+#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:141
+msgid "Icon url"
+msgstr "Dirección del icono"
-#: ../../Zotlabs/Module/Register.php:444
-msgid "Registration on this hub is by approval only."
-msgstr "El registro en este hub está sometido a aprobación previa."
+#: ../../Zotlabs/Module/Oauth.php:126
+msgid "Application not found."
+msgstr "Aplicación no encontrada."
-#: ../../Zotlabs/Module/Register.php:445
-msgid "Register at another affiliated hub in case when prefered"
-msgstr "Regístrese en otro hub afiliado en caso de que lo prefiera"
+#: ../../Zotlabs/Module/Oauth.php:169
+msgid "Connected OAuth Apps"
+msgstr "Apps OAuth conectadas"
-#: ../../Zotlabs/Module/Register.php:458
-msgid "Registration on this hub is by invitation only."
-msgstr "La inscripción en este hub es sólo posible por invitación."
+#: ../../Zotlabs/Module/Permcats.php:59
+msgid "Contact role deleted."
+msgstr "Rol de contacto eliminado."
-#: ../../Zotlabs/Module/Register.php:459
-msgid "Register at another affiliated hub"
-msgstr "Regístrese en otro hub afiliado"
+#: ../../Zotlabs/Module/Permcats.php:86
+msgid "Permission category name is required."
+msgstr "El nombre de la categoría de permiso es obligatorio."
-#: ../../Zotlabs/Module/Register.php:473 ../../Zotlabs/Module/Siteinfo.php:28
-msgid "Terms of Service"
-msgstr "Términos del servicio"
+#: ../../Zotlabs/Module/Permcats.php:102 ../../Zotlabs/Module/Permcats.php:154
+msgid "Contact role saved."
+msgstr "Rol de contacto guardado."
-#: ../../Zotlabs/Module/Register.php:479
-#, php-format
-msgid "I accept the %s for this website"
-msgstr "Acepto los %s de este sitio"
+#: ../../Zotlabs/Module/Permcats.php:204
+msgid "Role to assign affected contacts and default role to"
+msgstr "Rol a asignar a los contactos afectados y rol por defecto"
-#: ../../Zotlabs/Module/Register.php:486
-#, php-format
-msgid "I am over %s years of age and accept the %s for this website"
-msgstr "Tengo más de %s años de edad y acepto los %s de este sitio web"
+#: ../../Zotlabs/Module/Permcats.php:204
+msgid "Role to assign affected contacts to"
+msgstr "Rol al que asignar los contactos afectados"
-#: ../../Zotlabs/Module/Register.php:496
-msgid "Your email address"
-msgstr "Su dirección de correo electrónico"
+#: ../../Zotlabs/Module/Permcats.php:234
+msgid "Assign this role to"
+msgstr "Asigne este rol a "
-#: ../../Zotlabs/Module/Register.php:498 ../../Zotlabs/Module/Oauth.php:115
-#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
-msgid "Optional"
-msgstr "Opcional"
+#: ../../Zotlabs/Module/Permcats.php:236
+msgid "All my contacts"
+msgstr "Todos mis contactos"
-#: ../../Zotlabs/Module/Register.php:503
-msgid "Choose a password"
-msgstr "Elija una contraseña"
+#: ../../Zotlabs/Module/Permcats.php:247
+msgid "Automatically assign this role to new contacts"
+msgstr "Asignar automáticamente este rol a los nuevos contactos"
-#: ../../Zotlabs/Module/Register.php:504
-msgid "Please re-enter your password"
-msgstr "Por favor, vuelva a escribir su contraseña"
+#: ../../Zotlabs/Module/Permcats.php:249
+msgid "Role name"
+msgstr "Nombre del rol "
-#: ../../Zotlabs/Module/Register.php:506
-msgid "Please enter your invitation code"
-msgstr "Por favor, introduzca el código de su invitación"
+#: ../../Zotlabs/Module/Permcats.php:249
+msgid "System role - not editable"
+msgstr "Rol de sistema - no editable"
-#: ../../Zotlabs/Module/Register.php:508
-msgid "Your name"
-msgstr "Su nombre"
+#: ../../Zotlabs/Module/Permcats.php:250
+msgid "Deleting"
+msgstr "Eliminación"
-#: ../../Zotlabs/Module/Register.php:508
-msgid "Real name is preferred"
-msgstr "Se prefiere el nombre real"
+#: ../../Zotlabs/Module/Permcats.php:253 ../../Zotlabs/Module/Connedit.php:713
+#: ../../Zotlabs/Module/Defperms.php:261
+msgid "inherited"
+msgstr "heredado"
-#: ../../Zotlabs/Module/Register.php:510
-#: ../../Zotlabs/Module/New_channel.php:177
-msgid "Choose a short nickname"
-msgstr "Elija un alias corto"
+#: ../../Zotlabs/Module/Permcats.php:255
+msgid "Role Permissions"
+msgstr "Permisos de rol"
-#: ../../Zotlabs/Module/Register.php:510
+#: ../../Zotlabs/Module/Permcats.php:256
msgid ""
-"Your nickname will be used to create an easy to remember channel address"
-msgstr "Tu alias se utilizará para crear una dirección de canal fácil de recordar"
-
-#: ../../Zotlabs/Module/Register.php:514
-msgid "Why do you want to join this hub?"
-msgstr "¿Por qué quiere unirse a este hub?"
-
-#: ../../Zotlabs/Module/Register.php:514
-msgid "This will help to review your registration"
-msgstr "Esto ayudará a revisar su registro"
-
-#: ../../Zotlabs/Module/Register.php:520
-#: ../../Zotlabs/Module/Admin/Site.php:416
-msgid "Registration"
-msgstr "Registro"
+"Some permissions may be inherited from your <a href=\"settings\">channel "
+"role</a>, which have higher priority than contact role settings."
+msgstr "Algunos permisos pueden ser heredados de su <a href=\"settings\">rol de canal</a>, que tienen mayor prioridad que la configuración del rol de contacto."
-#: ../../Zotlabs/Module/Register.php:528
-msgid "I have an invite code"
-msgstr "Tengo un código de invitación"
+#: ../../Zotlabs/Module/Menu.php:68
+msgid "Unable to update menu."
+msgstr "No se puede actualizar el menú."
-#: ../../Zotlabs/Module/Register.php:575
-msgid ""
-"This site has exceeded the number of allowed daily account registrations."
-msgstr "Este sitio ha superado el número permitido de registros diarios de cuentas."
+#: ../../Zotlabs/Module/Menu.php:79
+msgid "Unable to create menu."
+msgstr "No se puede crear el menú."
-#: ../../Zotlabs/Module/Search.php:23
-#: ../../Zotlabs/Module/Viewconnections.php:23
-#: ../../Zotlabs/Module/Display.php:28 ../../Zotlabs/Module/Directory.php:72
-#: ../../Zotlabs/Module/Directory.php:77 ../../Zotlabs/Module/Photos.php:523
-msgid "Public access denied."
-msgstr "Acceso público denegado."
+#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174
+msgid "Menu Name"
+msgstr "Nombre del menú"
-#: ../../Zotlabs/Module/Search.php:255
-#, php-format
-msgid "Items tagged with: %s"
-msgstr "elementos etiquetados con: %s"
+#: ../../Zotlabs/Module/Menu.php:161
+msgid "Unique name (not visible on webpage) - required"
+msgstr "Nombre único (no será visible en la página web) - requerido"
-#: ../../Zotlabs/Module/Search.php:257
-#, php-format
-msgid "Search results for: %s"
-msgstr "Resultados de la búsqueda para: %s"
+#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175
+msgid "Menu Title"
+msgstr "Título del menú"
-#: ../../Zotlabs/Module/Setup.php:179
-msgid "$Projectname Server - Setup"
-msgstr "Servidor $Projectname - Instalación"
+#: ../../Zotlabs/Module/Menu.php:162
+msgid "Visible on webpage - leave empty for no title"
+msgstr "Visible en la página web - no ponga nada si no desea un título"
-#: ../../Zotlabs/Module/Setup.php:183
-msgid "Could not connect to database."
-msgstr "No se ha podido conectar a la base de datos."
+#: ../../Zotlabs/Module/Menu.php:163
+msgid "Allow Bookmarks"
+msgstr "Permitir marcadores"
-#: ../../Zotlabs/Module/Setup.php:187
-msgid ""
-"Could not connect to specified site URL. Possible SSL certificate or DNS "
-"issue."
-msgstr "No se puede conectar con la dirección del sitio indicada. Podría tratarse de un problema de SSL o DNS."
+#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
+msgid "Menu may be used to store saved bookmarks"
+msgstr "El menú se puede usar para guardar marcadores"
-#: ../../Zotlabs/Module/Setup.php:194
-msgid "Could not create table."
-msgstr "No se puede crear la tabla."
+#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225
+msgid "Submit and proceed"
+msgstr "Enviar y proceder"
-#: ../../Zotlabs/Module/Setup.php:200
-msgid "Your site database has been installed."
-msgstr "La base de datos del sitio ha sido instalada."
+#: ../../Zotlabs/Module/Menu.php:181
+msgid "Bookmarks allowed"
+msgstr "Marcadores permitidos"
-#: ../../Zotlabs/Module/Setup.php:206
-msgid ""
-"You may need to import the file \"install/schema_xxx.sql\" manually using a "
-"database client."
-msgstr "Podría tener que importar manualmente el fichero \"install/schema_xxx.sql\" usando un cliente de base de datos."
+#: ../../Zotlabs/Module/Menu.php:183
+msgid "Delete this menu"
+msgstr "Borrar este menú"
-#: ../../Zotlabs/Module/Setup.php:207 ../../Zotlabs/Module/Setup.php:271
-#: ../../Zotlabs/Module/Setup.php:778
-msgid "Please see the file \"install/INSTALL.txt\"."
-msgstr "Por favor, lea el fichero \"install/INSTALL.txt\"."
+#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219
+msgid "Edit menu contents"
+msgstr "Editar los contenidos del menú"
-#: ../../Zotlabs/Module/Setup.php:268
-msgid "System check"
-msgstr "Verificación del sistema"
+#: ../../Zotlabs/Module/Menu.php:185
+msgid "Edit this menu"
+msgstr "Modificar este menú"
-#: ../../Zotlabs/Module/Setup.php:272 ../../Zotlabs/Module/Cdav.php:1035
-#: ../../Zotlabs/Module/Cal.php:204 ../../Zotlabs/Module/Photos.php:962
-msgid "Next"
-msgstr "Siguiente"
+#: ../../Zotlabs/Module/Menu.php:201
+msgid "Menu could not be deleted."
+msgstr "El menú no puede ser eliminado."
-#: ../../Zotlabs/Module/Setup.php:273
-msgid "Check again"
-msgstr "Verificar de nuevo"
+#: ../../Zotlabs/Module/Menu.php:214
+msgid "Edit Menu"
+msgstr "Modificar el menú"
-#: ../../Zotlabs/Module/Setup.php:294
-msgid "Database connection"
-msgstr "Conexión a la base de datos"
+#: ../../Zotlabs/Module/Menu.php:218
+msgid "Add or remove entries to this menu"
+msgstr "Añadir o quitar entradas en este menú"
-#: ../../Zotlabs/Module/Setup.php:295
-msgid ""
-"In order to install $Projectname we need to know how to connect to your "
-"database."
-msgstr "Para instalar $Projectname es necesario saber cómo conectar con su base de datos."
+#: ../../Zotlabs/Module/Menu.php:220
+msgid "Menu name"
+msgstr "Nombre del menú"
-#: ../../Zotlabs/Module/Setup.php:296
-msgid ""
-"Please contact your hosting provider or site administrator if you have "
-"questions about these settings."
-msgstr "Por favor, contacte con el proveedor de servicios o el administrador del sitio si tiene dudas sobre estos ajustes."
+#: ../../Zotlabs/Module/Menu.php:220
+msgid "Must be unique, only seen by you"
+msgstr "Debe ser único, solo será visible para usted"
-#: ../../Zotlabs/Module/Setup.php:297
-msgid ""
-"The database you specify below should already exist. If it does not, please "
-"create it before continuing."
-msgstr "La base de datos que especifique a continuación debe existir ya. Si no es así, por favor, créela antes de seguir."
+#: ../../Zotlabs/Module/Menu.php:221
+msgid "Menu title"
+msgstr "Título del menú"
-#: ../../Zotlabs/Module/Setup.php:301
-msgid "Database Server Name"
-msgstr "Nombre del servidor de base de datos"
+#: ../../Zotlabs/Module/Menu.php:221
+msgid "Menu title as seen by others"
+msgstr "El título del menú tal como será visto por los demás"
-#: ../../Zotlabs/Module/Setup.php:301
-msgid "Default is 127.0.0.1"
-msgstr "De forma predeterminada es 127.0.0.1"
+#: ../../Zotlabs/Module/Menu.php:222
+msgid "Allow bookmarks"
+msgstr "Permitir marcadores"
-#: ../../Zotlabs/Module/Setup.php:302
-msgid "Database Port"
-msgstr "Puerto de la base de datos"
+#: ../../Zotlabs/Module/Mood.php:153
+msgid "Set your current mood and tell your friends"
+msgstr "Describir su estado de ánimo para comunicárselo a sus amigos"
-#: ../../Zotlabs/Module/Setup.php:302
-msgid "Communication port number - use 0 for default"
-msgstr "Número del puerto de comunicaciones - use 0 como valor por defecto"
+#: ../../Zotlabs/Module/Embedphotos.php:171
+#: ../../Zotlabs/Module/Photos.php:782 ../../Zotlabs/Module/Photos.php:1323
+#: ../../Zotlabs/Widget/Portfolio.php:91 ../../Zotlabs/Widget/Album.php:84
+msgid "View Photo"
+msgstr "Ver foto"
-#: ../../Zotlabs/Module/Setup.php:303
-msgid "Database Login Name"
-msgstr "Usuario de la base de datos"
+#: ../../Zotlabs/Module/Embedphotos.php:187
+#: ../../Zotlabs/Module/Photos.php:813 ../../Zotlabs/Widget/Portfolio.php:112
+#: ../../Zotlabs/Widget/Album.php:101
+msgid "Edit Album"
+msgstr "Editar álbum"
-#: ../../Zotlabs/Module/Setup.php:304
-msgid "Database Login Password"
-msgstr "Contraseña de acceso a la base de datos"
+#: ../../Zotlabs/Module/Rmagic.php:46
+msgid "Authentication failed."
+msgstr "Falló la autenticación."
-#: ../../Zotlabs/Module/Setup.php:305
-msgid "Database Name"
-msgstr "Nombre de la base de datos"
+#: ../../Zotlabs/Module/Go.php:21
+msgid "This page is available only to site members"
+msgstr "Esta página está disponible sólo para los miembros del sitio"
-#: ../../Zotlabs/Module/Setup.php:306
-msgid "Database Type"
-msgstr "Tipo de base de datos"
+#: ../../Zotlabs/Module/Go.php:27
+#: ../../Zotlabs/Widget/Channel_activities.php:29
+msgid "Welcome"
+msgstr "Bienvenido/a"
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
-msgid "Site administrator email address"
-msgstr "Dirección de correo electrónico del administrador del sitio"
+#: ../../Zotlabs/Module/Go.php:29
+msgid "What would you like to do?"
+msgstr "¿Qué le gustaría hacer?"
-#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+#: ../../Zotlabs/Module/Go.php:31
msgid ""
-"Your account email address must match this in order to use the web admin "
-"panel."
-msgstr "Su cuenta deberá usar la misma dirección de correo electrónico para poder utilizar el panel de administración web."
-
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
-msgid "Website URL"
-msgstr "Dirección del sitio web"
-
-#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
-msgid "Please use SSL (https) URL if available."
-msgstr "Por favor, use SSL (https) si está disponible."
-
-#: ../../Zotlabs/Module/Setup.php:310 ../../Zotlabs/Module/Setup.php:352
-msgid "Please select a default timezone for your website"
-msgstr "Por favor, selecciones el huso horario por defecto de su sitio web"
+"Please bookmark this page if you would like to return to it in the future"
+msgstr "Por favor añada esta página a sus marcadores si desea volver a ella en el futuro."
-#: ../../Zotlabs/Module/Setup.php:337
-msgid "Site settings"
-msgstr "Ajustes del sitio"
+#: ../../Zotlabs/Module/Go.php:35
+msgid "Upload a profile photo"
+msgstr "Subir una foto de perfil"
-#: ../../Zotlabs/Module/Setup.php:391
-msgid "PHP version 8.0 or greater is required."
-msgstr "Se requiere la versión 8.0 o superior de PHP."
+#: ../../Zotlabs/Module/Go.php:36
+msgid "Upload a cover photo"
+msgstr "Subir una foto de portada del perfil"
-#: ../../Zotlabs/Module/Setup.php:392
-msgid "PHP version"
-msgstr "Versión de PHP"
+#: ../../Zotlabs/Module/Go.php:37
+msgid "Edit your default profile"
+msgstr "Editar su perfil por defecto"
-#: ../../Zotlabs/Module/Setup.php:408
-msgid "Could not find a command line version of PHP in the web server PATH."
-msgstr "No se puede encontrar una versión en línea de comandos de PHP en la ruta del servidor web."
+#: ../../Zotlabs/Module/Go.php:38 ../../Zotlabs/Widget/Newmember.php:46
+msgid "View friend suggestions"
+msgstr "Ver sugerencias de amistad"
-#: ../../Zotlabs/Module/Setup.php:409
-msgid ""
-"If you don't have a command line version of PHP installed on server, you "
-"will not be able to run background polling via cron."
-msgstr "Si no tiene instalada la versión de línea de comandos de PHP en su servidor, no podrá realizar envíos en segundo plano mediante cron."
+#: ../../Zotlabs/Module/Go.php:39
+msgid "View the channel directory"
+msgstr "Ver el directorio de canales"
-#: ../../Zotlabs/Module/Setup.php:413
-msgid "PHP executable path"
-msgstr "Ruta del ejecutable PHP"
+#: ../../Zotlabs/Module/Go.php:40
+msgid "View/edit your channel settings"
+msgstr "Ver o modificar los ajustes de su canal"
-#: ../../Zotlabs/Module/Setup.php:413
-msgid ""
-"Enter full path to php executable. You can leave this blank to continue the "
-"installation."
-msgstr "Introducir la ruta completa del ejecutable PHP. Puede dejar la línea en blanco para continuar la instalación."
+#: ../../Zotlabs/Module/Go.php:41
+msgid "View the site or project documentation"
+msgstr "Ver el sitio o la documentación del proyecto"
-#: ../../Zotlabs/Module/Setup.php:418
-msgid "Command line PHP"
-msgstr "PHP en línea de comandos"
+#: ../../Zotlabs/Module/Go.php:42
+msgid "Visit your channel homepage"
+msgstr "Visitar la página principal de su canal"
-#: ../../Zotlabs/Module/Setup.php:428
+#: ../../Zotlabs/Module/Go.php:43
msgid ""
-"Unable to check command line PHP, as shell_exec() is disabled. This is "
-"required."
-msgstr "No se puede comprobar la línea de comandos PHP, ya que shell_exec() está deshabilitado. Es necesario que esté activado."
+"View your connections and/or add somebody whose address you already know"
+msgstr "Vea sus conexiones y/o agregue a alguien cuya dirección ya conozca"
-#: ../../Zotlabs/Module/Setup.php:432
+#: ../../Zotlabs/Module/Go.php:44
msgid ""
-"The command line version of PHP on your system does not have "
-"\"register_argc_argv\" enabled."
-msgstr "La línea de comandos PHP de su sistema no tiene activado \"register_argc_argv\"."
+"View your personal stream (this may be empty until you add some connections)"
+msgstr "Ver su \"stream\" personal (puede que esté vacío hasta que agregue algunas conexiones)"
-#: ../../Zotlabs/Module/Setup.php:433
-msgid "This is required for message delivery to work."
-msgstr "Esto es necesario para que funcione la transmisión de mensajes."
+#: ../../Zotlabs/Module/Go.php:52
+msgid "View the public stream. Warning: this content is not moderated"
+msgstr "Ver el \"stream\" público. Advertencia: este contenido no está moderado"
-#: ../../Zotlabs/Module/Setup.php:436
-msgid "PHP register_argc_argv"
-msgstr "PHP register_argc_argv"
+#: ../../Zotlabs/Module/Channel.php:219
+msgid "Insufficient permissions. Request redirected to profile page."
+msgstr "Permisos insuficientes. Petición redirigida a la página del perfil."
-#: ../../Zotlabs/Module/Setup.php:456
-msgid ""
-"This is not sufficient to upload larger images or files. You should be able "
-"to upload at least 4 MB at once."
-msgstr "Esto no es suficiente para subir imágenes o archivos más grandes. Usted debe ser capaz de subir al menos 4 MB a la vez."
+#: ../../Zotlabs/Module/Channel.php:234 ../../Zotlabs/Module/Network.php:170
+msgid "Search Results For:"
+msgstr "Buscar resultados para:"
-#: ../../Zotlabs/Module/Setup.php:458
-#, php-format
-msgid ""
-"Your max allowed total upload size is set to %s. Maximum size of one file to"
-" upload is set to %s. You are allowed to upload up to %d files at once."
-msgstr "La carga máxima que se le permite subir está establecida en %s. El tamaño máximo de un fichero está establecido en %s. Está permitido subir hasta un máximo de %d ficheros de una sola vez."
+#: ../../Zotlabs/Module/Lostpass.php:19
+msgid "No valid account found."
+msgstr "No se ha encontrado una cuenta válida."
-#: ../../Zotlabs/Module/Setup.php:464
-msgid "You can adjust these settings in the server php.ini file."
-msgstr "Puede ajustar estos valores en el fichero php.ini de su servidor."
+#: ../../Zotlabs/Module/Lostpass.php:33
+msgid "Password reset request issued. Check your email."
+msgstr "Se ha recibido una solicitud de restablecimiento de contraseña. Consulte su correo electrónico."
-#: ../../Zotlabs/Module/Setup.php:466
-msgid "PHP upload limits"
-msgstr "Límites PHP de subida"
+#: ../../Zotlabs/Module/Lostpass.php:39 ../../Zotlabs/Module/Lostpass.php:108
+#, php-format
+msgid "Site Member (%s)"
+msgstr "Usuario del sitio (%s)"
-#: ../../Zotlabs/Module/Setup.php:489
-msgid ""
-"Error: the \"openssl_pkey_new\" function on this system is not able to "
-"generate encryption keys"
-msgstr "Error: La función \"openssl_pkey_new\" en este sistema no es capaz de general claves de cifrado."
+#: ../../Zotlabs/Module/Lostpass.php:44 ../../Zotlabs/Module/Lostpass.php:49
+#, php-format
+msgid "Password reset requested at %s"
+msgstr "Se ha solicitado restablecer la contraseña en %s"
-#: ../../Zotlabs/Module/Setup.php:490
+#: ../../Zotlabs/Module/Lostpass.php:68
msgid ""
-"If running under Windows, please see "
-"\"http://www.php.net/manual/en/openssl.installation.php\"."
-msgstr "Si está en un servidor Windows, por favor, lea \"http://www.php.net/manual/en/openssl.installation.php\"."
-
-#: ../../Zotlabs/Module/Setup.php:493
-msgid "Generate encryption keys"
-msgstr "Generar claves de cifrado"
-
-#: ../../Zotlabs/Module/Setup.php:510
-msgid "libCurl PHP module"
-msgstr "módulo libCurl PHP"
-
-#: ../../Zotlabs/Module/Setup.php:511
-msgid "GD graphics PHP module"
-msgstr "módulo PHP GD graphics"
-
-#: ../../Zotlabs/Module/Setup.php:512
-msgid "OpenSSL PHP module"
-msgstr "módulo PHP OpenSSL"
-
-#: ../../Zotlabs/Module/Setup.php:513
-msgid "PDO database PHP module"
-msgstr "Módulo PHP de la base de datos PDO "
-
-#: ../../Zotlabs/Module/Setup.php:514
-msgid "mb_string PHP module"
-msgstr "módulo PHP mb_string"
-
-#: ../../Zotlabs/Module/Setup.php:515
-msgid "xml PHP module"
-msgstr "módulo PHP xml"
-
-#: ../../Zotlabs/Module/Setup.php:516
-msgid "zip PHP module"
-msgstr "Módulo zip PHP"
-
-#: ../../Zotlabs/Module/Setup.php:520 ../../Zotlabs/Module/Setup.php:522
-msgid "Apache mod_rewrite module"
-msgstr "módulo Apache mod_rewrite "
+"Request could not be verified. (You may have previously submitted it.) "
+"Password reset failed."
+msgstr "La solicitud no ha podido ser verificada. (Puede que la haya enviado con anterioridad) El restablecimiento de la contraseña ha fallado."
-#: ../../Zotlabs/Module/Setup.php:520
-msgid ""
-"Error: Apache webserver mod-rewrite module is required but not installed."
-msgstr "Error: se necesita el módulo del servidor web Apache mod-rewrite pero no está instalado."
+#: ../../Zotlabs/Module/Lostpass.php:92
+msgid "Your password has been reset as requested."
+msgstr "Su contraseña ha sido restablecida según lo solicitó."
-#: ../../Zotlabs/Module/Setup.php:526 ../../Zotlabs/Module/Setup.php:529
-msgid "exec"
-msgstr "ejecutable"
+#: ../../Zotlabs/Module/Lostpass.php:93
+msgid "Your new password is"
+msgstr "Su nueva contraseña es"
-#: ../../Zotlabs/Module/Setup.php:526
-msgid ""
-"Error: exec is required but is either not installed or has been disabled in "
-"php.ini"
-msgstr "Error: se necesita un ejecutable pero o no se instaló o está deshabilitado en php.ini"
+#: ../../Zotlabs/Module/Lostpass.php:94
+msgid "Save or copy your new password - and then"
+msgstr "Guarde o copie su nueva contraseña - y después"
-#: ../../Zotlabs/Module/Setup.php:532 ../../Zotlabs/Module/Setup.php:535
-msgid "shell_exec"
-msgstr "shell_exec"
+#: ../../Zotlabs/Module/Lostpass.php:95
+msgid "click here to login"
+msgstr "pulse aquí para conectarse"
-#: ../../Zotlabs/Module/Setup.php:532
+#: ../../Zotlabs/Module/Lostpass.php:96
msgid ""
-"Error: shell_exec is required but is either not installed or has been "
-"disabled in php.ini"
-msgstr "Error: se necesita shell_exec pero o no se instaló o está deshabilitado en php.ini"
-
-#: ../../Zotlabs/Module/Setup.php:540
-msgid "Error: libCURL PHP module required but not installed."
-msgstr "Error: se necesita el módulo PHP libCURL pero no está instalado."
+"Your password may be changed from the <em>Settings</em> page after "
+"successful login."
+msgstr "Puede cambiar la contraseña en la página <em>Ajustes</em> una vez iniciada la sesión."
-#: ../../Zotlabs/Module/Setup.php:544
-msgid ""
-"Error: GD PHP module with JPEG support or ImageMagick graphics library "
-"required but not installed."
-msgstr "Error: Se requiere el módulo GD PHP con soporte para JPEG o la biblioteca de gráficos ImageMagick, pero no está instalado."
+#: ../../Zotlabs/Module/Lostpass.php:117
+#, php-format
+msgid "Your password has changed at %s"
+msgstr "Su contraseña en %s ha sido cambiada"
-#: ../../Zotlabs/Module/Setup.php:548
-msgid "Error: openssl PHP module required but not installed."
-msgstr "Error: el módulo PHP openssl es necesario, pero no está instalado."
+#: ../../Zotlabs/Module/Lostpass.php:130
+msgid "Forgot your Password?"
+msgstr "¿Ha olvidado su contraseña?"
-#: ../../Zotlabs/Module/Setup.php:554
+#: ../../Zotlabs/Module/Lostpass.php:131
msgid ""
-"Error: PDO database PHP module missing a driver for either mysql or pgsql."
-msgstr "Error: El módulo PHP de la base de datos PDO carece de un controlador para mysql o pgsql."
-
-#: ../../Zotlabs/Module/Setup.php:559
-msgid "Error: PDO database PHP module required but not installed."
-msgstr "Error: se necesita el módulo PHP de la base de datos PDO, pero no está instalado."
-
-#: ../../Zotlabs/Module/Setup.php:563
-msgid "Error: mb_string PHP module required but not installed."
-msgstr "Error: el módulo PHP mb_string es necesario, pero no está instalado."
-
-#: ../../Zotlabs/Module/Setup.php:567
-msgid "Error: xml PHP module required for DAV but not installed."
-msgstr "Error: el módulo PHP xml es necesario para DAV, pero no está instalado."
-
-#: ../../Zotlabs/Module/Setup.php:571
-msgid "Error: zip PHP module required but not installed."
-msgstr "Error: se requiere el módulo zip PHP pero no está instalado."
-
-#: ../../Zotlabs/Module/Setup.php:590 ../../Zotlabs/Module/Setup.php:599
-msgid ".htconfig.php is writable"
-msgstr ".htconfig.php tiene permisos de escritura"
+"Enter your email address and submit to have your password reset. Then check "
+"your email for further instructions."
+msgstr "Introduzca y envíe su dirección de correo electrónico para el restablecimiento de su contraseña. Luego revise su correo para obtener más instrucciones."
-#: ../../Zotlabs/Module/Setup.php:595
-msgid ""
-"The web installer needs to be able to create a file called \".htconfig.php\""
-" in the top folder of your web server and it is unable to do so."
-msgstr "El instalador web no ha podido crear un fichero llamado “.htconfig.php” en la carpeta base de su servidor."
+#: ../../Zotlabs/Module/Lostpass.php:132
+msgid "Email Address"
+msgstr "Dirección de correo electrónico"
-#: ../../Zotlabs/Module/Setup.php:596
-msgid ""
-"This is most often a permission setting, as the web server may not be able "
-"to write files in your folder - even if you can."
-msgstr "Esto está generalmente ligado a un problema de permisos, a causa del cual el servidor web tiene prohibido modificar ficheros en su carpeta - incluso si usted mismo tiene esos permisos."
+#: ../../Zotlabs/Module/Lostpass.php:133 ../../Zotlabs/Module/Pdledit.php:76
+#: ../../Zotlabs/Module/Pdledit.php:93
+msgid "Reset"
+msgstr "Reiniciar"
-#: ../../Zotlabs/Module/Setup.php:597
-msgid "Please see install/INSTALL.txt for additional information."
-msgstr "Por favor, consulte install/INSTALL.txt para más información."
+#: ../../Zotlabs/Module/Import.php:70
+msgid "Nothing to import."
+msgstr "No hay nada para importar."
-#: ../../Zotlabs/Module/Setup.php:613
-msgid ""
-"This software uses the Smarty3 template engine to render its web views. "
-"Smarty3 compiles templates to PHP to speed up rendering."
-msgstr "Este software hace uso del motor de plantillas Smarty3 para diseñar sus plantillas gráficas. Smarty3 compila las plantillas a PHP para acelerar la renderización."
+#: ../../Zotlabs/Module/Import.php:86 ../../Zotlabs/Module/Import.php:100
+msgid "Unable to download data from old server"
+msgstr "No se han podido descargar datos de su antiguo servidor"
-#: ../../Zotlabs/Module/Setup.php:614
+#: ../../Zotlabs/Module/Import.php:163
#, php-format
-msgid ""
-"In order to store these compiled templates, the web server needs to have "
-"write access to the directory %s under the top level web folder."
-msgstr "Para poder guardar las plantillas compiladas, el servidor web necesita permisos para acceder al directorio %s en la carpeta web principal."
+msgid "Your service plan only allows %d channels."
+msgstr "Su paquete de servicios solo permite %d canales."
-#: ../../Zotlabs/Module/Setup.php:615 ../../Zotlabs/Module/Setup.php:636
-msgid ""
-"Please ensure that the user that your web server runs as (e.g. www-data) has"
-" write access to this folder."
-msgstr "Por favor, asegúrese de que el servidor web está siendo ejecutado por un usuario que tenga permisos de escritura sobre esta carpeta (por ejemplo, www-data)."
+#: ../../Zotlabs/Module/Import.php:190
+msgid "No channel. Import failed."
+msgstr "No hay canal. La importación ha fallado"
-#: ../../Zotlabs/Module/Setup.php:616
-#, php-format
+#: ../../Zotlabs/Module/Import.php:557
msgid ""
-"Note: as a security measure, you should give the web server write access to "
-"%s only--not the template files (.tpl) that it contains."
-msgstr "Nota: como medida de seguridad, debe dar al servidor web permisos de escritura solo sobre %s - no sobre el fichero de plantilla (.tpl) que contiene."
-
-#: ../../Zotlabs/Module/Setup.php:619
-#, php-format
-msgid "%s is writable"
-msgstr "%s tiene permisos de escritura"
+"Automatic content and files import was not possible due to API version "
+"incompatiblity. Please import content and files manually!"
+msgstr "La importación automática de contenidos y archivos no fue posible debido a la incompatibilidad de la versión de la API. Por favor, importe el contenido y los archivos manualmente."
-#: ../../Zotlabs/Module/Setup.php:635
-msgid ""
-"This software uses the store directory to save uploaded files. The web "
-"server needs to have write access to the store directory under the top level"
-" web folder"
-msgstr "Este software utiliza el directorio de almacenamiento para guardar los ficheros subidos. El servidor web debe tener acceso de escritura a este directorio en la carpeta de nivel superior"
+#: ../../Zotlabs/Module/Import.php:585
+msgid "You must be logged in to use this feature."
+msgstr "Debe estar registrado para poder usar esta funcionalidad."
-#: ../../Zotlabs/Module/Setup.php:639
-msgid "store is writable"
-msgstr "\"store\" tiene permisos de escritura"
+#: ../../Zotlabs/Module/Import.php:592
+msgid "Channel Import"
+msgstr "Importar canal"
-#: ../../Zotlabs/Module/Setup.php:671
+#: ../../Zotlabs/Module/Import.php:593
msgid ""
-"SSL certificate cannot be validated. Fix certificate or disable https access"
-" to this site."
-msgstr "El certificado SSL no ha podido ser validado. Corrija este problema o desactive el acceso https a este sitio."
+"Use this form to import an existing channel from a different server/hub. You"
+" may retrieve the channel identity from the old server/hub via the network "
+"or provide an export file."
+msgstr "Emplee este formulario para importar un canal desde un servidor/hub diferente. Puede recuperar el canal desde el antiguo servidor/hub a través de la red o proporcionando un fichero de exportación."
-#: ../../Zotlabs/Module/Setup.php:672
-msgid ""
-"If you have https access to your website or allow connections to TCP port "
-"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
-"NOT use self-signed certificates!"
-msgstr "Si su servidor soporta conexiones cifradas SSL o si permite conexiones al puerto TCP 443 (el puerto usado por el protocolo https), debe utilizar un certificado válido. No debe usar un certificado firmado por usted mismo."
+#: ../../Zotlabs/Module/Import.php:595
+msgid "Or provide the old server/hub details"
+msgstr "O proporcione los detalles de su antiguo servidor/hub"
-#: ../../Zotlabs/Module/Setup.php:673
-msgid ""
-"This restriction is incorporated because public posts from you may for "
-"example contain references to images on your own hub."
-msgstr "Se ha incorporado esta restricción para evitar que sus entradas públicas hagan referencia a imágenes en su propio servidor."
+#: ../../Zotlabs/Module/Import.php:597
+msgid "Your old identity address (xyz@example.com)"
+msgstr "Su identidad en el antiguo servidor (canal@ejemplo.com)"
-#: ../../Zotlabs/Module/Setup.php:674
-msgid ""
-"If your certificate is not recognized, members of other sites (who may "
-"themselves have valid certificates) will get a warning message on their own "
-"site complaining about security issues."
-msgstr "Si su certificado no ha sido reconocido, los miembros de otros sitios (con certificados válidos) recibirán mensajes de aviso en sus propios sitios web."
+#: ../../Zotlabs/Module/Import.php:598
+msgid "Your old login email address"
+msgstr "Su antigua dirección de correo electrónico"
-#: ../../Zotlabs/Module/Setup.php:675
-msgid ""
-"This can cause usability issues elsewhere (not just on your own site) so we "
-"must insist on this requirement."
-msgstr "Por razones de compatibilidad (sobre el conjunto de la red, no solo sobre su propio sitio), debemos insistir en estos requisitos."
+#: ../../Zotlabs/Module/Import.php:599
+msgid "Your old login password"
+msgstr "Su antigua contraseña"
-#: ../../Zotlabs/Module/Setup.php:676
-msgid ""
-"Providers are available that issue free certificates which are browser-"
-"valid."
-msgstr "Existen varias Autoridades de Certificación que le pueden proporcionar certificados válidos."
+#: ../../Zotlabs/Module/Import.php:600
+msgid "Import your items and files (limited by available memory)"
+msgstr "Importar sus artículos y archivos (limitado por la memoria disponible)"
-#: ../../Zotlabs/Module/Setup.php:677
+#: ../../Zotlabs/Module/Import.php:602
msgid ""
-"If you are confident that the certificate is valid and signed by a trusted "
-"authority, check to see if you have failed to install an intermediate cert. "
-"These are not normally required by browsers, but are required for server-to-"
-"server communications."
-msgstr "Si se tiene la certeza de que el certificado es válido y está firmado por una autoridad de confianza, comprobar para ver si hubo un error al instalar un certificado intermedio. Estos no son normalmente requeridos por los navegadores, pero son necesarios para las comunicaciones de servidor a servidor."
+"For either option, please choose whether to make this hub your new primary "
+"address, or whether your old location should continue this role. You will be"
+" able to post from either location, but only one can be marked as the "
+"primary location for files, photos, and media."
+msgstr "Para cualquiera de las opciones, elija si hacer de este servidor su nueva dirección primaria, o si su antigua dirección debe continuar con este papel. Usted podrá publicar desde cualquier ubicación, pero sólo una puede estar marcada como la ubicación principal para los ficheros, fotos y otras imágenes o vídeos."
-#: ../../Zotlabs/Module/Setup.php:679
-msgid "SSL certificate validation"
-msgstr "validación del certificado SSL"
+#: ../../Zotlabs/Module/Import.php:604
+msgid "Make this hub my primary location"
+msgstr "Convertir este servidor en mi ubicación primaria"
-#: ../../Zotlabs/Module/Setup.php:685
-msgid ""
-"Url rewrite in .htaccess is not working. Check your server "
-"configuration.Test: "
-msgstr "No se pueden reescribir las direcciones web en .htaccess. Compruebe la configuración de su servidor:"
+#: ../../Zotlabs/Module/Import.php:605
+msgid "Move this channel (disable all previous locations)"
+msgstr "Mover este canal (desactivar todas las ubicaciones anteriores)"
-#: ../../Zotlabs/Module/Setup.php:688
-msgid "Url rewrite is working"
-msgstr "La reescritura de las direcciones funciona correctamente"
+#: ../../Zotlabs/Module/Import.php:606
+msgid "Use this channel nickname instead of the one provided"
+msgstr "Usa este alias de canal en lugar del que se proporciona"
-#: ../../Zotlabs/Module/Setup.php:701
+#: ../../Zotlabs/Module/Import.php:606
msgid ""
-"The database configuration file \".htconfig.php\" could not be written. "
-"Please use the enclosed text to create a configuration file in your web "
-"server root."
-msgstr "El fichero de configuración de la base de datos .htconfig.php no se ha podido modificar. Por favor, copie el texto generado en un fichero con ese nombre en el directorio raíz de su servidor."
-
-#: ../../Zotlabs/Module/Setup.php:776
-msgid "<h1>What next?</h1>"
-msgstr "<h1>¿Qué sigue?</h1>"
+"Leave blank to keep your existing channel nickname. You will be randomly "
+"assigned a similar nickname if either name is already allocated on this "
+"site."
+msgstr "Dejar en blanco para mantener su alias de canal . Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio."
-#: ../../Zotlabs/Module/Setup.php:777
+#: ../../Zotlabs/Module/Import.php:608
msgid ""
-"IMPORTANT: You will need to [manually] setup a scheduled task for the "
-"poller."
-msgstr "IMPORTANTE: Debe crear [manualmente] una tarea programada para el \"poller\"."
+"This process may take several minutes to complete. Please submit the form "
+"only once and leave this page open until finished."
+msgstr "Este proceso puede tardar varios minutos en completarse. Por favor envíe el formulario una sola vez y mantenga esta página abierta hasta que termine."
#: ../../Zotlabs/Module/Viewconnections.php:65
msgid "No connections."
@@ -8941,1158 +10132,1030 @@ msgstr "Visitar el perfil de %s [%s]"
msgid "View Connections"
msgstr "Ver conexiones"
-#: ../../Zotlabs/Module/Pubsites.php:24
-msgid "Public Hubs"
-msgstr "Servidores públicos"
-
-#: ../../Zotlabs/Module/Pubsites.php:27
-msgid ""
-"The listed hubs allow public registration for the $Projectname network. All "
-"hubs in the network are interlinked so membership on any of them conveys "
-"membership in the network as a whole. Some hubs may require subscription or "
-"provide tiered service plans. The hub itself <strong>may</strong> provide "
-"additional details."
-msgstr "Los sitios listados permiten el registro público en la red $Projectname. Todos los sitios de la red están vinculados entre sí, por lo que sus miembros, en ninguno de ellos, indican la pertenencia a la red en su conjunto. Algunos sitios pueden requerir suscripción o proporcionar planes de servicio por niveles. Los mismos hubs <strong>pueden</strong> proporcionar detalles adicionales."
-
-#: ../../Zotlabs/Module/Pubsites.php:33
-msgid "Hub URL"
-msgstr "Dirección del hub"
-
-#: ../../Zotlabs/Module/Pubsites.php:33
-msgid "Access Type"
-msgstr "Tipo de acceso"
-
-#: ../../Zotlabs/Module/Pubsites.php:33
-msgid "Registration Policy"
-msgstr "Normas de registro"
-
-#: ../../Zotlabs/Module/Pubsites.php:33
-msgid "Stats"
-msgstr "Estadísticas"
-
-#: ../../Zotlabs/Module/Pubsites.php:33
-msgid "Software"
-msgstr "Software"
-
-#: ../../Zotlabs/Module/Pubsites.php:35
-msgid "Ratings"
-msgstr "Valoraciones"
-
-#: ../../Zotlabs/Module/Pubsites.php:49
-msgid "Rate"
-msgstr "Valorar"
-
-#: ../../Zotlabs/Module/Channel.php:139 ../../Zotlabs/Module/Hcard.php:37
-#: ../../Zotlabs/Module/Profile.php:62
-msgid "Posts and comments"
-msgstr "Publicaciones y comentarios"
-
-#: ../../Zotlabs/Module/Channel.php:146 ../../Zotlabs/Module/Hcard.php:44
-#: ../../Zotlabs/Module/Profile.php:69
-msgid "Only posts"
-msgstr "Solo publicaciones"
-
-#: ../../Zotlabs/Module/Channel.php:159 ../../Zotlabs/Module/Channel.php:181
-#: ../../Zotlabs/Module/Hq.php:41 ../../Zotlabs/Module/Pubstream.php:47
-#: ../../Zotlabs/Module/Display.php:47 ../../Zotlabs/Module/Oep.php:83
-msgid "Malformed message id."
-msgstr "ID de mensaje malformado."
-
-#: ../../Zotlabs/Module/Channel.php:217
-msgid "Insufficient permissions. Request redirected to profile page."
-msgstr "Permisos insuficientes. Petición redirigida a la página del perfil."
-
-#: ../../Zotlabs/Module/Channel.php:495 ../../Zotlabs/Module/Display.php:318
-msgid ""
-"You must enable javascript for your browser to be able to view this content."
-msgstr "Debe habilitar javascript para poder ver este contenido en su navegador."
-
-#: ../../Zotlabs/Module/Profperm.php:34 ../../Zotlabs/Module/Profperm.php:63
-msgid "Invalid profile identifier."
-msgstr "Identificador del perfil no válido"
-
-#: ../../Zotlabs/Module/Profperm.php:111
-msgid "Profile Visibility Editor"
-msgstr "Editor de visibilidad del perfil"
-
-#: ../../Zotlabs/Module/Profperm.php:115
-msgid "Click on a contact to add or remove."
-msgstr "Pulsar en un contacto para añadirlo o eliminarlo."
-
-#: ../../Zotlabs/Module/Profperm.php:124
-msgid "Visible To"
-msgstr "Visible para"
-
-#: ../../Zotlabs/Module/Profperm.php:140
-#: ../../Zotlabs/Module/Connections.php:218
-msgid "All Connections"
-msgstr "Todas las conexiones"
-
-#: ../../Zotlabs/Module/Group.php:47
-msgid "Privacy group created."
-msgstr "El grupo de canales ha sido creado."
-
-#: ../../Zotlabs/Module/Group.php:50
-msgid "Could not create privacy group."
-msgstr "No se puede crear el grupo de canales"
-
-#: ../../Zotlabs/Module/Group.php:82
-msgid "Privacy group updated."
-msgstr "Grupo de canales actualizado."
-
-#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:301
-msgid "Post to this group by default"
-msgstr "Publicar en este grupo por defecto"
-
-#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
-msgid "Add new contacts to this group by default"
-msgstr "Añadir nuevos contactos a este grupo por defecto"
-
-#: ../../Zotlabs/Module/Group.php:146
-msgid "Privacy group name"
-msgstr "Nombre del grupo"
-
-#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
-msgid "Members are visible to other channels"
-msgstr "Los miembros son visibles para otros canales"
-
-#: ../../Zotlabs/Module/Group.php:175
-msgid "Privacy group removed."
-msgstr "Grupo de canales eliminado."
-
-#: ../../Zotlabs/Module/Group.php:178
-msgid "Unable to remove privacy group."
-msgstr "No se puede eliminar el grupo de canales."
+#: ../../Zotlabs/Module/Rpost.php:219 ../../Zotlabs/Module/Editpost.php:113
+msgid "Edit post"
+msgstr "Editar la entrada"
-#: ../../Zotlabs/Module/Group.php:244
+#: ../../Zotlabs/Module/Tokens.php:94
#, php-format
-msgid "Privacy Group: %s"
-msgstr "Grupo privado %s"
-
-#: ../../Zotlabs/Module/Group.php:246
-msgid "Privacy group name: "
-msgstr "Nombre del grupo de canales:"
-
-#: ../../Zotlabs/Module/Group.php:262
-msgid "Group members"
-msgstr "Miembros del grupo"
-
-#: ../../Zotlabs/Module/Group.php:264
-msgid "Not in this group"
-msgstr "No en este grupo"
-
-#: ../../Zotlabs/Module/Group.php:296
-msgid "Click a channel to toggle membership"
-msgstr "Haga clic en un canal para cambiar los miembros"
-
-#: ../../Zotlabs/Module/Go.php:21
-msgid "This page is available only to site members"
-msgstr "Esta página está disponible sólo para los miembros del sitio"
+msgid "This channel is limited to %d tokens"
+msgstr "Este canal tiene un límite de %d tokens"
-#: ../../Zotlabs/Module/Go.php:27
-msgid "Welcome"
-msgstr "Bienvenido/a"
+#: ../../Zotlabs/Module/Tokens.php:100
+msgid "Name and Password are required."
+msgstr "Se requiere el nombre y la contraseña."
-#: ../../Zotlabs/Module/Go.php:29
-msgid "What would you like to do?"
-msgstr "¿Qué le gustaría hacer?"
+#: ../../Zotlabs/Module/Tokens.php:215
+msgid "Token saved."
+msgstr "Token salvado."
-#: ../../Zotlabs/Module/Go.php:31
+#: ../../Zotlabs/Module/Tokens.php:261
msgid ""
-"Please bookmark this page if you would like to return to it in the future"
-msgstr "Por favor añada esta página a sus marcadores si desea volver a ella en el futuro."
+"Use this form to create temporary access identifiers to share things with "
+"non-members. These identities may be used in privacy groups and visitors may"
+" login using these credentials to access private content."
+msgstr "Utilice este formulario para crear identificadores de acceso temporal para compartir cosas con los no miembros. Estas identidades se pueden usar en los grupos de canales y así los visitantes pueden iniciar sesión, utilizando estas credenciales, para acceder a su contenido privado."
-#: ../../Zotlabs/Module/Go.php:35
-msgid "Upload a profile photo"
-msgstr "Subir una foto de perfil"
+#: ../../Zotlabs/Module/Tokens.php:274
+msgid "Please select a role for this guest!"
+msgstr "Por favor, seleccione un rol para este invitado"
-#: ../../Zotlabs/Module/Go.php:36
-msgid "Upload a cover photo"
-msgstr "Subir una foto de portada del perfil"
+#: ../../Zotlabs/Module/Tokens.php:287
+msgid "Select a role for this guest"
+msgstr "Seleccione un rol para este invitado"
-#: ../../Zotlabs/Module/Go.php:37
-msgid "Edit your default profile"
-msgstr "Editar su perfil por defecto"
+#: ../../Zotlabs/Module/Tokens.php:291
+msgid "Login Name"
+msgstr "Nombre de inicio de sesión"
-#: ../../Zotlabs/Module/Go.php:39
-msgid "View the channel directory"
-msgstr "Ver el directorio de canales"
+#: ../../Zotlabs/Module/Tokens.php:292
+msgid "Login Password"
+msgstr "Contraseña de inicio de sesión"
-#: ../../Zotlabs/Module/Go.php:40
-msgid "View/edit your channel settings"
-msgstr "Ver o modificar los ajustes de su canal"
+#: ../../Zotlabs/Module/Tokens.php:293
+msgid "Expires (yyyy-mm-dd)"
+msgstr "Expira (aaaa-mm-dd)"
-#: ../../Zotlabs/Module/Go.php:41
-msgid "View the site or project documentation"
-msgstr "Ver el sitio o la documentación del proyecto"
+#: ../../Zotlabs/Module/Attach_edit.php:69
+#: ../../Zotlabs/Module/Filestorage.php:109
+msgid "File not found."
+msgstr "Fichero no encontrado."
-#: ../../Zotlabs/Module/Go.php:42
-msgid "Visit your channel homepage"
-msgstr "Visitar la página principal de su canal"
+#: ../../Zotlabs/Module/Attach_edit.php:118
+msgid "Can not copy folder into itself."
+msgstr "No se puede copiar la carpeta en sí misma."
-#: ../../Zotlabs/Module/Go.php:43
-msgid ""
-"View your connections and/or add somebody whose address you already know"
-msgstr "Vea sus conexiones y/o agregue a alguien cuya dirección ya conozca"
+#: ../../Zotlabs/Module/Attach_edit.php:131
+#, php-format
+msgid "Can not move folder \"%s\" into itself."
+msgstr "No se puede mover la carpeta\"%s\" en sí misma."
-#: ../../Zotlabs/Module/Go.php:44
-msgid ""
-"View your personal stream (this may be empty until you add some connections)"
-msgstr "Ver su \"stream\" personal (puede que esté vacío hasta que agregue algunas conexiones)"
+#: ../../Zotlabs/Module/Help.php:25
+msgid "Documentation Search"
+msgstr "Búsqueda de Documentación"
-#: ../../Zotlabs/Module/Go.php:52
-msgid "View the public stream. Warning: this content is not moderated"
-msgstr "Ver el \"stream\" público. Advertencia: este contenido no está moderado"
+#: ../../Zotlabs/Module/Help.php:86
+msgid "Members"
+msgstr "Miembros"
-#: ../../Zotlabs/Module/Oauth.php:45
-msgid "Name is required"
-msgstr "El nombre es obligatorio"
+#: ../../Zotlabs/Module/Help.php:87
+msgid "Administrators"
+msgstr "Administradores"
-#: ../../Zotlabs/Module/Oauth.php:49
-msgid "Key and Secret are required"
-msgstr "\"Key\" y \"Secret\" son obligatorios"
+#: ../../Zotlabs/Module/Help.php:88
+msgid "Developers"
+msgstr "Desarrolladores"
-#: ../../Zotlabs/Module/Oauth.php:53 ../../Zotlabs/Module/Oauth.php:135
-#: ../../Zotlabs/Module/Cdav.php:1052 ../../Zotlabs/Module/Cdav.php:1388
-#: ../../Zotlabs/Module/Admin/Addons.php:457
-#: ../../Zotlabs/Module/Oauth2.php:58 ../../Zotlabs/Module/Oauth2.php:142
-#: ../../Zotlabs/Module/Connedit.php:748 ../../Zotlabs/Lib/Apps.php:545
-msgid "Update"
-msgstr "Actualizar"
+#: ../../Zotlabs/Module/Help.php:89
+msgid "Tutorials"
+msgstr "Tutoriales"
-#: ../../Zotlabs/Module/Oauth.php:108 ../../Zotlabs/Module/Oauth.php:134
-#: ../../Zotlabs/Module/Oauth.php:170 ../../Zotlabs/Module/Oauth2.php:141
-#: ../../Zotlabs/Module/Oauth2.php:191
-msgid "Add application"
-msgstr "Añadir aplicación"
+#: ../../Zotlabs/Module/Help.php:101
+msgid "$Projectname Documentation"
+msgstr "Documentación de $Projectname"
-#: ../../Zotlabs/Module/Oauth.php:111 ../../Zotlabs/Module/Oauth2.php:116
-#: ../../Zotlabs/Module/Oauth2.php:144
-msgid "Name of application"
-msgstr "Nombre de la aplicación"
+#: ../../Zotlabs/Module/Help.php:102
+msgid "Contents"
+msgstr "Contenidos"
-#: ../../Zotlabs/Module/Oauth.php:112 ../../Zotlabs/Module/Oauth.php:113
-#: ../../Zotlabs/Module/Oauth2.php:117 ../../Zotlabs/Module/Oauth2.php:145
-msgid "Automatically generated - change if desired. Max length 20"
-msgstr "Generado automáticamente - si lo desea, cámbielo. Longitud máxima: 20"
+#: ../../Zotlabs/Module/Pconfig.php:33 ../../Zotlabs/Module/Pconfig.php:69
+msgid "This setting requires special processing and editing has been blocked."
+msgstr "Este ajuste necesita de un proceso especial y la edición ha sido bloqueada."
-#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth.php:140
-#: ../../Zotlabs/Module/Oauth2.php:118 ../../Zotlabs/Module/Oauth2.php:146
-msgid "Redirect"
-msgstr "Redirigir"
+#: ../../Zotlabs/Module/Pconfig.php:58
+msgid "Configuration Editor"
+msgstr "Editor de configuración"
-#: ../../Zotlabs/Module/Oauth.php:114 ../../Zotlabs/Module/Oauth2.php:118
-#: ../../Zotlabs/Module/Oauth2.php:146
+#: ../../Zotlabs/Module/Pconfig.php:59
msgid ""
-"Redirect URI - leave blank unless your application specifically requires "
-"this"
-msgstr "URI de redirección - dejar en blanco a menos que su aplicación específicamente lo requiera"
-
-#: ../../Zotlabs/Module/Oauth.php:115 ../../Zotlabs/Module/Oauth.php:141
-msgid "Icon url"
-msgstr "Dirección del icono"
-
-#: ../../Zotlabs/Module/Oauth.php:126
-msgid "Application not found."
-msgstr "Aplicación no encontrada."
-
-#: ../../Zotlabs/Module/Oauth.php:169
-msgid "Connected OAuth Apps"
-msgstr "Apps OAuth conectadas"
-
-#: ../../Zotlabs/Module/Oauth.php:173 ../../Zotlabs/Module/Oauth2.php:194
-msgid "Client key starts with"
-msgstr "La \"client key\" empieza por"
-
-#: ../../Zotlabs/Module/Oauth.php:174 ../../Zotlabs/Module/Oauth2.php:195
-msgid "No name"
-msgstr "Sin nombre"
-
-#: ../../Zotlabs/Module/Oauth.php:175 ../../Zotlabs/Module/Oauth2.php:196
-msgid "Remove authorization"
-msgstr "Eliminar autorización"
-
-#: ../../Zotlabs/Module/Editwebpage.php:139
-msgid "Page link"
-msgstr "Enlace de la página"
-
-#: ../../Zotlabs/Module/Editwebpage.php:166
-msgid "Edit Webpage"
-msgstr "Editar la página web"
-
-#: ../../Zotlabs/Module/Dirsearch.php:24 ../../Zotlabs/Module/Regdir.php:52
-msgid "This site is not a directory server"
-msgstr "Este sitio no es un servidor de directorio"
-
-#: ../../Zotlabs/Module/Dirsearch.php:33
-msgid "This directory server requires an access token"
-msgstr "El servidor de este directorio necesita un \"token\" de acceso"
-
-#: ../../Zotlabs/Module/Pin.php:36 ../../Zotlabs/Module/Item.php:466
-msgid "Unable to locate original post."
-msgstr "No ha sido posible encontrar la entrada original."
+"Warning: Changing some settings could render your channel inoperable. Please"
+" leave this page unless you are comfortable with and knowledgeable about how"
+" to correctly use this feature."
+msgstr "Atención: El cambio de algunos ajustes puede volver inutilizable su canal. Por favor, abandone la página excepto que esté seguro y sepa cómo usar correctamente esta característica."
-#: ../../Zotlabs/Module/Chat.php:192
+#: ../../Zotlabs/Module/Chat.php:193
msgid "Room not found"
msgstr "Sala no encontrada"
-#: ../../Zotlabs/Module/Chat.php:208
+#: ../../Zotlabs/Module/Chat.php:209
msgid "Leave Room"
msgstr "Abandonar la sala"
-#: ../../Zotlabs/Module/Chat.php:209
+#: ../../Zotlabs/Module/Chat.php:210
msgid "Delete Room"
msgstr "Eliminar esta sala"
-#: ../../Zotlabs/Module/Chat.php:210
+#: ../../Zotlabs/Module/Chat.php:211
msgid "I am away right now"
msgstr "Estoy ausente momentáneamente"
-#: ../../Zotlabs/Module/Chat.php:211
+#: ../../Zotlabs/Module/Chat.php:212
msgid "I am online"
msgstr "Estoy conectado/a"
-#: ../../Zotlabs/Module/Chat.php:213
+#: ../../Zotlabs/Module/Chat.php:214
msgid "Bookmark this room"
msgstr "Añadir esta sala a Marcadores"
-#: ../../Zotlabs/Module/Chat.php:236
+#: ../../Zotlabs/Module/Chat.php:237
msgid "New Chatroom"
msgstr "Nueva sala de chat"
-#: ../../Zotlabs/Module/Chat.php:237
+#: ../../Zotlabs/Module/Chat.php:238
msgid "Chatroom name"
msgstr "Nombre de la sala de chat"
-#: ../../Zotlabs/Module/Chat.php:238
+#: ../../Zotlabs/Module/Chat.php:239
msgid "Expiration of chats (minutes)"
msgstr "Caducidad de los mensajes en los chats (en minutos)"
-#: ../../Zotlabs/Module/Chat.php:254
+#: ../../Zotlabs/Module/Chat.php:255
#, php-format
msgid "%1$s's Chatrooms"
msgstr "Salas de chat de %1$s"
-#: ../../Zotlabs/Module/Chat.php:259
+#: ../../Zotlabs/Module/Chat.php:260
msgid "No chatrooms available"
msgstr "No hay salas de chat disponibles"
-#: ../../Zotlabs/Module/Chat.php:260
+#: ../../Zotlabs/Module/Chat.php:261
msgid "Add Room"
msgstr "Añadir una sala de chat"
-#: ../../Zotlabs/Module/Chat.php:263
+#: ../../Zotlabs/Module/Chat.php:264
msgid "Expiration"
msgstr "Caducidad"
-#: ../../Zotlabs/Module/Chat.php:264
+#: ../../Zotlabs/Module/Chat.php:265
msgid "min"
msgstr "min"
-#: ../../Zotlabs/Module/Channel_calendar.php:62
-msgid "Event can not end before it has started."
-msgstr "Un evento no puede terminar antes de que haya comenzado."
-
-#: ../../Zotlabs/Module/Channel_calendar.php:64
-#: ../../Zotlabs/Module/Channel_calendar.php:72
-#: ../../Zotlabs/Module/Channel_calendar.php:87
-msgid "Unable to generate preview."
-msgstr "No se puede crear la vista previa."
-
-#: ../../Zotlabs/Module/Channel_calendar.php:70
-msgid "Event title and start time are required."
-msgstr "Se requieren el título del evento y su hora de inicio."
-
-#: ../../Zotlabs/Module/Channel_calendar.php:85
-#: ../../Zotlabs/Module/Channel_calendar.php:226
-msgid "Event not found."
-msgstr "Evento no encontrado."
+#: ../../Zotlabs/Module/Network.php:106
+msgid "No such group"
+msgstr "No se encuentra el grupo"
-#: ../../Zotlabs/Module/Channel_calendar.php:370
-msgid "Edit event"
-msgstr "Editar evento"
+#: ../../Zotlabs/Module/Network.php:158
+msgid "No such channel"
+msgstr "No se encuentra el canal"
-#: ../../Zotlabs/Module/Channel_calendar.php:372
-msgid "Delete event"
-msgstr "Borrar evento"
+#: ../../Zotlabs/Module/Network.php:246
+msgid "Privacy group is empty"
+msgstr "El grupo de canales está vacío"
-#: ../../Zotlabs/Module/Channel_calendar.php:392
-#: ../../Zotlabs/Module/Cdav.php:942 ../../Zotlabs/Module/Cal.php:165
-msgid "Link to source"
-msgstr "Enlace a la fuente"
+#: ../../Zotlabs/Module/Network.php:256
+msgid "Privacy group: "
+msgstr "Grupo de canales: "
-#: ../../Zotlabs/Module/Channel_calendar.php:406
-msgid "calendar"
-msgstr "calendario"
+#: ../../Zotlabs/Module/Dreport.php:38
+msgid "Invalid message"
+msgstr "Mensaje no válido"
-#: ../../Zotlabs/Module/Channel_calendar.php:493
-msgid "Failed to remove event"
-msgstr "Error al eliminar el evento"
+#: ../../Zotlabs/Module/Dreport.php:68
+msgid "no results"
+msgstr "sin resultados"
-#: ../../Zotlabs/Module/Like.php:112
-msgid "Like/Dislike"
-msgstr "Me gusta/No me gusta"
+#: ../../Zotlabs/Module/Dreport.php:82
+msgid "channel sync processed"
+msgstr "se ha realizado la sincronización del canal"
-#: ../../Zotlabs/Module/Like.php:118
-msgid "This action is restricted to members."
-msgstr "Esta acción está restringida solo para miembros."
+#: ../../Zotlabs/Module/Dreport.php:86
+msgid "queued"
+msgstr "encolado"
-#: ../../Zotlabs/Module/Like.php:119
-msgid ""
-"Please <a href=\"rmagic\">login with your $Projectname ID</a> or <a "
-"href=\"register\">register as a new $Projectname member</a> to continue."
-msgstr "Por favor, <a href=\"rmagic\">identifíquese con su $Projectname ID</a> o <a href=\"register\">rregístrese como un nuevo $Projectname member</a> para continuar."
+#: ../../Zotlabs/Module/Dreport.php:90
+msgid "posted"
+msgstr "enviado"
-#: ../../Zotlabs/Module/Like.php:172 ../../Zotlabs/Module/Like.php:198
-#: ../../Zotlabs/Module/Like.php:236
-msgid "Invalid request."
-msgstr "Solicitud incorrecta."
+#: ../../Zotlabs/Module/Dreport.php:94
+msgid "accepted for delivery"
+msgstr "aceptado para el envío"
-#: ../../Zotlabs/Module/Like.php:213
-msgid "thing"
-msgstr "elemento"
+#: ../../Zotlabs/Module/Dreport.php:98
+msgid "updated"
+msgstr "actualizado"
-#: ../../Zotlabs/Module/Like.php:259
-msgid "Channel unavailable."
-msgstr "Canal no disponible."
+#: ../../Zotlabs/Module/Dreport.php:102
+msgid "update ignored"
+msgstr "actualización ignorada"
-#: ../../Zotlabs/Module/Like.php:295
-msgid "Previous action reversed."
-msgstr "Acción anterior revocada."
+#: ../../Zotlabs/Module/Dreport.php:105
+msgid "permission denied"
+msgstr "permiso denegado"
-#: ../../Zotlabs/Module/Like.php:481
-#, php-format
-msgid "%1$s agrees with %2$s's %3$s"
-msgstr "%3$s de %2$s: %1$s está de acuerdo"
+#: ../../Zotlabs/Module/Dreport.php:109
+msgid "recipient not found"
+msgstr "destinatario no encontrado"
-#: ../../Zotlabs/Module/Like.php:483
+#: ../../Zotlabs/Module/Dreport.php:129
#, php-format
-msgid "%1$s doesn't agree with %2$s's %3$s"
-msgstr "%3$s de %2$s: %1$s no está de acuerdo"
+msgid "Delivery report for %1$s"
+msgstr "Informe de entrega para %1$s"
-#: ../../Zotlabs/Module/Like.php:485
-#, php-format
-msgid "%1$s abstains from a decision on %2$s's %3$s"
-msgstr "%3$s de %2$s: %1$s se abstiene"
+#: ../../Zotlabs/Module/Dreport.php:134
+msgid "Redeliver"
+msgstr "Volver a enviar"
-#: ../../Zotlabs/Module/Like.php:592
-msgid "Action completed."
-msgstr "Acción completada."
+#: ../../Zotlabs/Module/Affinity.php:35
+msgid "Affinity Tool settings updated."
+msgstr "Actualización de los ajustes de Affinity Tool."
-#: ../../Zotlabs/Module/Like.php:593
-msgid "Thank you."
-msgstr "Gracias."
+#: ../../Zotlabs/Module/Affinity.php:54
+msgid ""
+"The numbers below represent the minimum and maximum slider default positions"
+" for your network/stream page as a percentage."
+msgstr "Los números que aparecen a continuación representan las posiciones predeterminadas mínimas y máximas de los controles deslizantes para su red/stream en forma de porcentaje."
-#: ../../Zotlabs/Module/Poke.php:198
-msgid "Poke somebody"
-msgstr "Dar un toque a alguien"
+#: ../../Zotlabs/Module/Affinity.php:61
+msgid "Default maximum affinity level"
+msgstr "Nivel máximo de afinidad por defecto"
-#: ../../Zotlabs/Module/Poke.php:201
-msgid "Poke/Prod"
-msgstr "Toque/Incitación"
+#: ../../Zotlabs/Module/Affinity.php:61
+msgid "0-99 default 99"
+msgstr "0-99 por defecto 99"
-#: ../../Zotlabs/Module/Poke.php:202
-msgid "Poke, prod or do other things to somebody"
-msgstr "Dar un toque, incitar o hacer otras cosas a alguien"
+#: ../../Zotlabs/Module/Affinity.php:67
+msgid "Default minimum affinity level"
+msgstr "Nivel mínimo de afinidad por defecto"
-#: ../../Zotlabs/Module/Poke.php:209
-msgid "Recipient"
-msgstr "Destinatario"
+#: ../../Zotlabs/Module/Affinity.php:67
+msgid "0-99 - default 0"
+msgstr "0-99 - por defecto 0"
-#: ../../Zotlabs/Module/Poke.php:210
-msgid "Choose what you wish to do to recipient"
-msgstr "Elegir qué desea enviar al destinatario"
+#: ../../Zotlabs/Module/Affinity.php:73
+msgid "Persistent affinity levels"
+msgstr "Niveles de afinidad persistentes"
-#: ../../Zotlabs/Module/Poke.php:213 ../../Zotlabs/Module/Poke.php:214
-msgid "Make this post private"
-msgstr "Convertir en privado este envío"
+#: ../../Zotlabs/Module/Affinity.php:73
+msgid ""
+"If disabled the max and min levels will be reset to default after page "
+"reload"
+msgstr "Si está desactivado, los niveles máximo y mínimo se restablecerán a los valores predeterminados después de recargar la página."
-#: ../../Zotlabs/Module/Cdav.php:819
-msgid "Calendar entries imported."
-msgstr "Entradas de calendario importadas."
+#: ../../Zotlabs/Module/Affinity.php:81
+msgid "Affinity Tool Settings"
+msgstr "Ajustes de Affinity Tool"
-#: ../../Zotlabs/Module/Cdav.php:821
-msgid "No calendar entries found."
-msgstr "No se han encontrado entradas de calendario."
+#: ../../Zotlabs/Module/Dircensor.php:42
+msgid "Entry censored"
+msgstr "Entrada censurada"
-#: ../../Zotlabs/Module/Cdav.php:1008
-msgid "Event title"
-msgstr "Título del evento"
+#: ../../Zotlabs/Module/Dircensor.php:45
+msgid "Entry uncensored"
+msgstr "Entrada sin censurar"
-#: ../../Zotlabs/Module/Cdav.php:1009
-msgid "Start date and time"
-msgstr "Fecha y hora de comienzo"
+#: ../../Zotlabs/Module/Subthread.php:128
+#, php-format
+msgid "%1$s is following %2$s's %3$s"
+msgstr "%1$s está siguiendo %3$s de %2$s"
-#: ../../Zotlabs/Module/Cdav.php:1010
-msgid "End date and time"
-msgstr "Fecha y hora de finalización"
+#: ../../Zotlabs/Module/Subthread.php:130
+#, php-format
+msgid "%1$s stopped following %2$s's %3$s"
+msgstr "%1$s ha dejado de seguir %3$s de %2$s"
-#: ../../Zotlabs/Module/Cdav.php:1011
-msgid "Timezone:"
-msgstr "Zona horaria: "
+#: ../../Zotlabs/Module/Sources.php:41
+msgid "Failed to create source. No channel selected."
+msgstr "No se ha podido crear el origen de los contenidos. No ha sido seleccionado ningún canal."
-#: ../../Zotlabs/Module/Cdav.php:1034 ../../Zotlabs/Module/Cal.php:203
-#: ../../Zotlabs/Module/Photos.php:953
-msgid "Previous"
-msgstr "Anterior"
+#: ../../Zotlabs/Module/Sources.php:57
+msgid "Source created."
+msgstr "Fuente creada."
-#: ../../Zotlabs/Module/Cdav.php:1036 ../../Zotlabs/Module/Cal.php:205
-msgid "Today"
-msgstr "Hoy"
+#: ../../Zotlabs/Module/Sources.php:70
+msgid "Source updated."
+msgstr "Fuente actualizada."
-#: ../../Zotlabs/Module/Cdav.php:1037
-msgid "Month"
-msgstr "Mes"
+#: ../../Zotlabs/Module/Sources.php:99
+msgid "*"
+msgstr "*"
-#: ../../Zotlabs/Module/Cdav.php:1038
-msgid "Week"
-msgstr "Semana"
+#: ../../Zotlabs/Module/Sources.php:106
+msgid "Manage remote sources of content for your channel."
+msgstr "Gestionar contenido de origen remoto para su canal."
-#: ../../Zotlabs/Module/Cdav.php:1039
-msgid "Day"
-msgstr "Día"
+#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117
+msgid "New Source"
+msgstr "Nueva fuente"
-#: ../../Zotlabs/Module/Cdav.php:1040
-msgid "List month"
-msgstr "Lista mensual"
+#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152
+msgid ""
+"Import all or selected content from the following channel into this channel "
+"and distribute it according to your channel settings."
+msgstr "Importar todo el contenido o una selección de los siguientes canales en este canal y distribuirlo de acuerdo con sus ajustes."
-#: ../../Zotlabs/Module/Cdav.php:1041
-msgid "List week"
-msgstr "Lista semanal"
+#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
+msgid "Only import content with these words (one per line)"
+msgstr "Importar solo contenido que contenga estas palabras (una por línea)"
-#: ../../Zotlabs/Module/Cdav.php:1042
-msgid "List day"
-msgstr "Lista diaria"
+#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
+msgid "Leave blank to import all public content"
+msgstr "Dejar en blanco para importar todo el contenido público"
-#: ../../Zotlabs/Module/Cdav.php:1050
-msgid "More"
-msgstr "Más"
+#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159
+msgid "Channel Name"
+msgstr "Nombre del canal"
-#: ../../Zotlabs/Module/Cdav.php:1051
-msgid "Less"
-msgstr "Menos"
+#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
+msgid ""
+"Add the following categories to posts imported from this source (comma "
+"separated)"
+msgstr "Añadir los temas siguientes a las entradas importadas de esta fuente (separadas por comas)"
-#: ../../Zotlabs/Module/Cdav.php:1053
-msgid "Select calendar"
-msgstr "Seleccionar un calendario"
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+msgid "Resend posts with this channel as author"
+msgstr "Reenviar mensajes con este canal como autor"
-#: ../../Zotlabs/Module/Cdav.php:1056
-msgid "Delete all"
-msgstr "Eliminar todos"
+#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
+msgid "Copyrights may apply"
+msgstr "Se pueden aplicar los derechos de autor"
-#: ../../Zotlabs/Module/Cdav.php:1059
-msgid "Sorry! Editing of recurrent events is not yet implemented."
-msgstr "¡Disculpas! La edición de eventos recurrentes aún no se ha implementado."
+#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172
+msgid "Source not found."
+msgstr "Fuente no encontrada"
-#: ../../Zotlabs/Module/Cdav.php:1060
-msgid ""
-"Could not fetch calendar resource. The selected calendar might be disabled."
-msgstr "No se ha podido obtener el recurso del calendario. Es posible que el calendario seleccionado esté desactivado."
+#: ../../Zotlabs/Module/Sources.php:149
+msgid "Edit Source"
+msgstr "Editar fuente"
-#: ../../Zotlabs/Module/Cdav.php:1373 ../../Zotlabs/Module/Connedit.php:733
-msgid "Organisation"
-msgstr "Organización"
+#: ../../Zotlabs/Module/Sources.php:150
+msgid "Delete Source"
+msgstr "Eliminar fuente"
-#: ../../Zotlabs/Module/Cdav.php:1375 ../../Zotlabs/Module/Connedit.php:735
-msgid "Phone"
-msgstr "Teléfono"
+#: ../../Zotlabs/Module/Sources.php:180
+msgid "Source removed"
+msgstr "Fuente eliminada"
-#: ../../Zotlabs/Module/Cdav.php:1377 ../../Zotlabs/Module/Connedit.php:737
-msgid "Instant messenger"
-msgstr "Mensajería instantánea"
+#: ../../Zotlabs/Module/Sources.php:182
+msgid "Unable to remove source."
+msgstr "No se puede eliminar la fuente."
-#: ../../Zotlabs/Module/Cdav.php:1378 ../../Zotlabs/Module/Connedit.php:738
-msgid "Website"
-msgstr "Sitio web"
+#: ../../Zotlabs/Module/Suggest.php:52
+msgid ""
+"No suggestions available. If this is a new site, please try again in 24 "
+"hours."
+msgstr "No hay sugerencias disponibles. Si es un sitio nuevo, espere 24 horas y pruebe de nuevo."
-#: ../../Zotlabs/Module/Cdav.php:1379
-#: ../../Zotlabs/Module/Admin/Channels.php:160
-#: ../../Zotlabs/Module/Profiles.php:473 ../../Zotlabs/Module/Connedit.php:739
-#: ../../Zotlabs/Module/Locs.php:122
-msgid "Address"
-msgstr "Dirección"
+#: ../../Zotlabs/Module/Suggest.php:71 ../../Zotlabs/Widget/Suggestions.php:53
+msgid "Ignore/Hide"
+msgstr "Ignorar/Ocultar"
-#: ../../Zotlabs/Module/Cdav.php:1380 ../../Zotlabs/Module/Connedit.php:740
-msgid "Note"
-msgstr "Nota"
+#: ../../Zotlabs/Module/Changeaddr.php:35
+msgid ""
+"Channel name changes are not allowed within 48 hours of changing the account"
+" password."
+msgstr "Los cambios en el nombre de un canal no está permitida hasta pasadas 48 horas desde el cambio de contraseña de la cuenta."
-#: ../../Zotlabs/Module/Cdav.php:1385 ../../Zotlabs/Module/Connedit.php:745
-msgid "Add Contact"
-msgstr "Añadir un contacto"
+#: ../../Zotlabs/Module/Changeaddr.php:77
+msgid "Change channel nickname/address"
+msgstr "Cambiar el alias o la dirección del canal"
-#: ../../Zotlabs/Module/Cdav.php:1386 ../../Zotlabs/Module/Connedit.php:746
-msgid "Add Field"
-msgstr "Añadir un campo"
+#: ../../Zotlabs/Module/Changeaddr.php:78
+msgid "Any/all connections on other networks will be lost!"
+msgstr "¡Cualquier/todas las conexiones en otras redes se perderán!"
-#: ../../Zotlabs/Module/Cdav.php:1391 ../../Zotlabs/Module/Connedit.php:751
-msgid "P.O. Box"
-msgstr "Buzón de correos"
+#: ../../Zotlabs/Module/Changeaddr.php:80
+msgid "New channel address"
+msgstr "Nueva dirección del canal"
-#: ../../Zotlabs/Module/Cdav.php:1392 ../../Zotlabs/Module/Connedit.php:752
-msgid "Additional"
-msgstr "Adicional"
+#: ../../Zotlabs/Module/Changeaddr.php:81
+msgid "Rename Channel"
+msgstr "Renombrar el canal"
-#: ../../Zotlabs/Module/Cdav.php:1393 ../../Zotlabs/Module/Connedit.php:753
-msgid "Street"
-msgstr "Calle"
+#: ../../Zotlabs/Module/Regate.php:84
+msgid "Email resent"
+msgstr "Correo electrónico reenviado"
-#: ../../Zotlabs/Module/Cdav.php:1394 ../../Zotlabs/Module/Connedit.php:754
-msgid "Locality"
-msgstr "Localidad"
+#: ../../Zotlabs/Module/Regate.php:84
+msgid "Email resend failed"
+msgstr "Fallo en el reenvío del correo electrónico"
-#: ../../Zotlabs/Module/Cdav.php:1395 ../../Zotlabs/Module/Connedit.php:755
-msgid "Region"
-msgstr "Provincia, región o estado"
+#: ../../Zotlabs/Module/Regate.php:109
+msgid "Verification successful"
+msgstr "¡Verificación exitosa!"
-#: ../../Zotlabs/Module/Cdav.php:1396 ../../Zotlabs/Module/Connedit.php:756
-msgid "ZIP Code"
-msgstr "Código postal"
+#: ../../Zotlabs/Module/Regate.php:153
+msgid "Account successfull created"
+msgstr "Cuenta creada con éxito"
-#: ../../Zotlabs/Module/Cdav.php:1397 ../../Zotlabs/Module/Profiles.php:774
-#: ../../Zotlabs/Module/Connedit.php:757
-msgid "Country"
-msgstr "País"
+#: ../../Zotlabs/Module/Regate.php:211
+msgid "Channel successfull created"
+msgstr "Canal creado con éxito"
-#: ../../Zotlabs/Module/Cdav.php:1456
-msgid "Default Calendar"
-msgstr "Calendario por defecto"
+#: ../../Zotlabs/Module/Regate.php:217
+msgid "Automatic channel creation failed. Please create a channel."
+msgstr "La creación automática de canales ha fallado. Por favor, cree un canal."
-#: ../../Zotlabs/Module/Cdav.php:1467
-msgid "Default Addressbook"
-msgstr "Agenda de direcciones por defecto"
+#: ../../Zotlabs/Module/Regate.php:229
+msgid "Account creation error"
+msgstr "Error en la creación de la cuenta"
-#: ../../Zotlabs/Module/Lockview.php:100
-msgid "Remote privacy information not available"
-msgstr "La información sobre privacidad remota no está disponible"
+#: ../../Zotlabs/Module/Regate.php:241
+msgid "Verify failed"
+msgstr "Verificación fallida"
-#: ../../Zotlabs/Module/Lockview.php:143 ../../Zotlabs/Module/Lockview.php:184
-#: ../../Zotlabs/Module/Acl.php:123
-msgctxt "acl"
-msgid "Profile"
-msgstr "Perfil"
+#: ../../Zotlabs/Module/Regate.php:246
+msgid "Token verification failed"
+msgstr "Ha fallado el token de verificación."
-#: ../../Zotlabs/Module/Lockview.php:154 ../../Zotlabs/Module/Lockview.php:193
-msgid "Privacy group"
-msgstr "Grupo de canales"
+#: ../../Zotlabs/Module/Regate.php:251
+msgid "Request not inside time frame"
+msgstr "Solicitud fuera de plazo"
-#: ../../Zotlabs/Module/Lockview.php:214
-#, php-format
-msgid "Click to copy link to this ressource for guest %s to clipboard"
-msgstr "Haga clic para copiar el enlace a este recurso para invitados %sen el portapapeles"
+#: ../../Zotlabs/Module/Regate.php:257 ../../Zotlabs/Module/Regate.php:287
+msgid "Identity unknown"
+msgstr "Identidad desconocida"
-#: ../../Zotlabs/Module/Lockview.php:214
-msgid "Link copied"
-msgstr "Enlace copiado"
+#: ../../Zotlabs/Module/Regate.php:263
+msgid "dId2 mistaken"
+msgstr "did2 equivocado/a"
-#: ../../Zotlabs/Module/Lockview.php:221
-msgid "Access"
-msgstr "Acceso"
+#: ../../Zotlabs/Module/Regate.php:291
+msgid "Your Registration ID"
+msgstr "Su ID de registro"
-#: ../../Zotlabs/Module/Item.php:751
-msgid "Empty post discarded."
-msgstr "La entrada vacía ha sido desechada."
+#: ../../Zotlabs/Module/Regate.php:304 ../../Zotlabs/Module/Regate.php:396
+#: ../../Zotlabs/Module/Regate.php:428
+msgid "Registration verification"
+msgstr "Verificación del registro"
-#: ../../Zotlabs/Module/Item.php:1153
-msgid "Duplicate post suppressed."
-msgstr "Se ha suprimido la entrada duplicada."
+#: ../../Zotlabs/Module/Regate.php:311 ../../Zotlabs/Module/Regate.php:433
+msgid "Hold on, you can start verification in"
+msgstr "Espere, puede empezar la verificación en "
-#: ../../Zotlabs/Module/Item.php:1296
-msgid "System error. Post not saved."
-msgstr "Error del sistema. La entrada no se ha podido salvar."
+#: ../../Zotlabs/Module/Regate.php:312
+msgid "Please remember your verification token for ID"
+msgstr "Por favor, recuerde su token de verificación para la identificación"
-#: ../../Zotlabs/Module/Item.php:1330
-msgid "Your comment is awaiting approval."
-msgstr "Su comentario está pendiente de aprobación."
+#: ../../Zotlabs/Module/Regate.php:314
+msgid "Token validity"
+msgstr "Validez del token"
-#: ../../Zotlabs/Module/Item.php:1463
-msgid "Unable to obtain post information from database."
-msgstr "No ha sido posible obtener información de la entrada en la base de datos."
+#: ../../Zotlabs/Module/Regate.php:350
+msgid "Resend email"
+msgstr "Reenvío de correo electrónico"
-#: ../../Zotlabs/Module/Item.php:1470
-#, php-format
-msgid "You have reached your limit of %1$.0f top level posts."
-msgstr "Ha alcanzado su límite de %1$.0f entradas en la página principal."
+#: ../../Zotlabs/Module/Regate.php:355
+msgid "Registration status"
+msgstr "Estado del registro"
-#: ../../Zotlabs/Module/Item.php:1477
-#, php-format
-msgid "You have reached your limit of %1$.0f webpages."
-msgstr "Ha alcanzado su límite de %1$.0f páginas web."
+#: ../../Zotlabs/Module/Regate.php:358
+msgid "Verification successful!"
+msgstr "¡Verificación exitosa!"
-#: ../../Zotlabs/Module/Mitem.php:31 ../../Zotlabs/Module/Menu.php:209
-msgid "Menu not found."
-msgstr "Menú no encontrado"
+#: ../../Zotlabs/Module/Regate.php:359
+msgid "Your login ID is"
+msgstr "Su ID de acceso es"
-#: ../../Zotlabs/Module/Mitem.php:63
-msgid "Unable to create element."
-msgstr "No se puede crear el elemento."
+#: ../../Zotlabs/Module/Regate.php:360
+msgid ""
+"After your account has been approved by our administrator you will be able "
+"to login with your login ID and your provided password."
+msgstr "Una vez que su cuenta haya sido aprobada por nuestro administrador, podrá iniciar sesión con su ID de acceso y la contraseña proporcionada."
-#: ../../Zotlabs/Module/Mitem.php:87
-msgid "Unable to update menu element."
-msgstr "No es posible actualizar el elemento del menú."
+#: ../../Zotlabs/Module/Regate.php:372
+msgid "Registration request revoked"
+msgstr "Solicitud de registro anulada"
-#: ../../Zotlabs/Module/Mitem.php:103
-msgid "Unable to add menu element."
-msgstr "No es posible añadir el elemento al menú"
+#: ../../Zotlabs/Module/Regate.php:373
+msgid "Sorry for any inconvience. Thank you for your response."
+msgstr "Disculpe las molestias. Gracias por su respuesta."
-#: ../../Zotlabs/Module/Mitem.php:134 ../../Zotlabs/Module/Xchan.php:41
-#: ../../Zotlabs/Module/Menu.php:232
-msgid "Not found."
-msgstr "No encontrado."
+#: ../../Zotlabs/Module/Regate.php:397
+msgid "Please enter your verification token for ID"
+msgstr "Por favor, introduzca su token de verificación para la identificación"
-#: ../../Zotlabs/Module/Mitem.php:167 ../../Zotlabs/Module/Mitem.php:246
-msgid "Menu Item Permissions"
-msgstr "Permisos del elemento del menú"
+#: ../../Zotlabs/Module/Regate.php:398 ../../Zotlabs/Module/Regate.php:425
+msgid "Please check your email!"
+msgstr "¡Por favor, compruebe su correo electrónico!"
-#: ../../Zotlabs/Module/Mitem.php:168 ../../Zotlabs/Module/Mitem.php:247
-msgid "(click to open/close)"
-msgstr "(pulsar para abrir o cerrar)"
+#: ../../Zotlabs/Module/Regate.php:408
+msgid "Verification token"
+msgstr "Token de verificación "
-#: ../../Zotlabs/Module/Mitem.php:174 ../../Zotlabs/Module/Mitem.php:191
-msgid "Link Name"
-msgstr "Nombre del enlace"
+#: ../../Zotlabs/Module/Regate.php:419
+msgid "ID expired"
+msgstr "ID caducada"
-#: ../../Zotlabs/Module/Mitem.php:175 ../../Zotlabs/Module/Mitem.php:255
-msgid "Link or Submenu Target"
-msgstr "Destino del enlace o submenú"
+#: ../../Zotlabs/Module/Regate.php:434
+msgid "You will require the verification token for ID"
+msgstr "Necesitará el token de verificación para identificarse"
-#: ../../Zotlabs/Module/Mitem.php:175
-msgid "Enter URL of the link or select a menu name to create a submenu"
-msgstr "Introducir la dirección del enlace o seleccionar el nombre de un submenú"
+#: ../../Zotlabs/Module/Regate.php:443
+msgid "Unknown or expired ID"
+msgstr "ID desconocida o caducada"
-#: ../../Zotlabs/Module/Mitem.php:176 ../../Zotlabs/Module/Mitem.php:256
-msgid "Use magic-auth if available"
-msgstr "Usar la autenticación mágica si está disponible"
+#: ../../Zotlabs/Module/Regate.php:454
+msgid "dId2 malformed"
+msgstr "did2 malformado/a"
-#: ../../Zotlabs/Module/Mitem.php:177 ../../Zotlabs/Module/Mitem.php:257
-msgid "Open link in new window"
-msgstr "Abrir el enlace en una nueva ventana"
+#: ../../Zotlabs/Module/Chanview.php:132
+msgid "toggle full screen mode"
+msgstr "cambiar al modo de pantalla completa"
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
-msgid "Order in list"
-msgstr "Orden en la lista"
+#: ../../Zotlabs/Module/Connedit.php:80
+#: ../../Zotlabs/Module/Contactedit.php:78
+#: ../../Zotlabs/Module/Defperms.php:67
+msgid "Could not access contact record."
+msgstr "No se ha podido acceder al registro de contacto."
-#: ../../Zotlabs/Module/Mitem.php:178 ../../Zotlabs/Module/Mitem.php:258
-msgid "Higher numbers will sink to bottom of listing"
-msgstr "Los números más altos irán al final de la lista"
+#: ../../Zotlabs/Module/Connedit.php:101
+#: ../../Zotlabs/Module/Contactedit.php:107
+msgid "Could not locate selected profile."
+msgstr "No se ha podido localizar el perfil seleccionado."
-#: ../../Zotlabs/Module/Mitem.php:179
-msgid "Submit and finish"
-msgstr "Enviar y terminar"
+#: ../../Zotlabs/Module/Connedit.php:171
+msgid "Connection updated."
+msgstr "Conexión actualizada."
-#: ../../Zotlabs/Module/Mitem.php:180
-msgid "Submit and continue"
-msgstr "Enviar y continuar"
+#: ../../Zotlabs/Module/Connedit.php:173
+msgid "Failed to update connection record."
+msgstr "Error al actualizar el registro de la conexión."
-#: ../../Zotlabs/Module/Mitem.php:189
-msgid "Menu:"
-msgstr "Menú:"
+#: ../../Zotlabs/Module/Connedit.php:215
+#: ../../Zotlabs/Module/Contactedit.php:192
+msgid "is now connected to"
+msgstr "ahora está conectado/a"
-#: ../../Zotlabs/Module/Mitem.php:192
-msgid "Link Target"
-msgstr "Destino del enlace"
+#: ../../Zotlabs/Module/Connedit.php:320
+msgid "Could not access address book record."
+msgstr "No se pudo acceder al registro en su libreta de direcciones."
-#: ../../Zotlabs/Module/Mitem.php:195
-msgid "Edit menu"
-msgstr "Editar menú"
+#: ../../Zotlabs/Module/Connedit.php:368
+msgid "Refresh failed - channel is currently unavailable."
+msgstr "Recarga fallida - no se puede encontrar el canal en este momento."
-#: ../../Zotlabs/Module/Mitem.php:198
-msgid "Edit element"
-msgstr "Editar el elemento"
+#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391
+#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409
+#: ../../Zotlabs/Module/Connedit.php:422
+msgid "Unable to set address book parameters."
+msgstr "No ha sido posible establecer los parámetros de la libreta de direcciones."
-#: ../../Zotlabs/Module/Mitem.php:199
-msgid "Drop element"
-msgstr "Eliminar el elemento"
+#: ../../Zotlabs/Module/Connedit.php:441
+msgid "Connection has been removed."
+msgstr "La conexión ha sido eliminada."
-#: ../../Zotlabs/Module/Mitem.php:200
-msgid "New element"
-msgstr "Nuevo elemento"
+#: ../../Zotlabs/Module/Connedit.php:483
+#, php-format
+msgid "View %s's profile"
+msgstr "Ver el perfil de %s"
-#: ../../Zotlabs/Module/Mitem.php:201
-msgid "Edit this menu container"
-msgstr "Modificar el contenedor del menú"
+#: ../../Zotlabs/Module/Connedit.php:487
+#: ../../Zotlabs/Module/Contactedit.php:628
+msgid "Refresh Permissions"
+msgstr "Recargar los permisos"
-#: ../../Zotlabs/Module/Mitem.php:202
-msgid "Add menu element"
-msgstr "Añadir un elemento al menú"
+#: ../../Zotlabs/Module/Connedit.php:490
+#: ../../Zotlabs/Module/Contactedit.php:629
+msgid "Fetch updated permissions"
+msgstr "Obtener los permisos actualizados"
-#: ../../Zotlabs/Module/Mitem.php:203
-msgid "Delete this menu item"
-msgstr "Eliminar este elemento del menú"
+#: ../../Zotlabs/Module/Connedit.php:494
+#: ../../Zotlabs/Module/Contactedit.php:633
+msgid "Refresh Photo"
+msgstr "Actualizar la foto"
-#: ../../Zotlabs/Module/Mitem.php:204
-msgid "Edit this menu item"
-msgstr "Modificar este elemento del menú"
+#: ../../Zotlabs/Module/Connedit.php:497
+#: ../../Zotlabs/Module/Contactedit.php:634
+msgid "Fetch updated photo"
+msgstr "Obtener una foto actualizada"
-#: ../../Zotlabs/Module/Mitem.php:222
-msgid "Menu item not found."
-msgstr "Este elemento del menú no se ha encontrado"
+#: ../../Zotlabs/Module/Connedit.php:504
+msgid "View recent posts and comments"
+msgstr "Ver publicaciones y comentarios recientes"
-#: ../../Zotlabs/Module/Mitem.php:235
-msgid "Menu item deleted."
-msgstr "Este elemento del menú ha sido borrado"
+#: ../../Zotlabs/Module/Connedit.php:508
+#: ../../Zotlabs/Module/Admin/Accounts.php:322
+#: ../../Zotlabs/Module/Contactedit.php:639
+msgid "Unblock"
+msgstr "Desbloquear"
-#: ../../Zotlabs/Module/Mitem.php:237
-msgid "Menu item could not be deleted."
-msgstr "Este elemento del menú no puede ser borrado."
+#: ../../Zotlabs/Module/Connedit.php:508
+#: ../../Zotlabs/Module/Admin/Accounts.php:321
+#: ../../Zotlabs/Module/Contactedit.php:639
+msgid "Block"
+msgstr "Bloquear"
-#: ../../Zotlabs/Module/Mitem.php:244
-msgid "Edit Menu Element"
-msgstr "Editar elemento del menú"
+#: ../../Zotlabs/Module/Connedit.php:511
+#: ../../Zotlabs/Module/Contactedit.php:641
+msgid "Block (or Unblock) all communications with this connection"
+msgstr "Bloquear (o desbloquear) todas las comunicaciones con esta conexión"
-#: ../../Zotlabs/Module/Mitem.php:254
-msgid "Link text"
-msgstr "Texto del enlace"
+#: ../../Zotlabs/Module/Connedit.php:512
+#: ../../Zotlabs/Module/Contactedit.php:642
+msgid "This connection is blocked!"
+msgstr "¡Esta conexión está bloqueada!"
-#: ../../Zotlabs/Module/Profile.php:106
-msgid "vcard"
-msgstr "vcard"
+#: ../../Zotlabs/Module/Connedit.php:516
+#: ../../Zotlabs/Module/Contactedit.php:646
+msgid "Unignore"
+msgstr "Dejar de ignorar"
-#: ../../Zotlabs/Module/Sharedwithme.php:105
-msgid "Files: shared with me"
-msgstr "Ficheros: compartidos conmigo"
+#: ../../Zotlabs/Module/Connedit.php:519
+#: ../../Zotlabs/Module/Contactedit.php:648
+msgid "Ignore (or Unignore) all inbound communications from this connection"
+msgstr "Ignorar (o dejar de ignorar) todas las comunicaciones entrantes de esta conexión"
-#: ../../Zotlabs/Module/Sharedwithme.php:107
-msgid "NEW"
-msgstr "NUEVO"
+#: ../../Zotlabs/Module/Connedit.php:520
+#: ../../Zotlabs/Module/Contactedit.php:649
+msgid "This connection is ignored!"
+msgstr "¡Esta conexión es ignorada!"
-#: ../../Zotlabs/Module/Sharedwithme.php:109
-#: ../../Zotlabs/Storage/Browser.php:380
-msgid "Last Modified"
-msgstr "Última modificación"
+#: ../../Zotlabs/Module/Connedit.php:524
+#: ../../Zotlabs/Module/Contactedit.php:653
+msgid "Unarchive"
+msgstr "Desarchivar"
-#: ../../Zotlabs/Module/Sharedwithme.php:110
-msgid "Remove all files"
-msgstr "Eliminar todos los ficheros"
+#: ../../Zotlabs/Module/Connedit.php:524
+#: ../../Zotlabs/Module/Contactedit.php:653
+msgid "Archive"
+msgstr "Archivar"
-#: ../../Zotlabs/Module/Sharedwithme.php:111
-msgid "Remove this file"
-msgstr "Eliminar este fichero"
+#: ../../Zotlabs/Module/Connedit.php:527
+#: ../../Zotlabs/Module/Contactedit.php:655
+msgid ""
+"Archive (or Unarchive) this connection - mark channel dead but keep content"
+msgstr "Archiva (o desarchiva) esta conexión - marca el canal como muerto aunque mantiene sus contenidos"
-#: ../../Zotlabs/Module/Help.php:23
-msgid "Documentation Search"
-msgstr "Búsqueda de Documentación"
+#: ../../Zotlabs/Module/Connedit.php:528
+#: ../../Zotlabs/Module/Contactedit.php:656
+msgid "This connection is archived!"
+msgstr "¡Esta conexión esta archivada!"
-#: ../../Zotlabs/Module/Help.php:84
-msgid "Members"
-msgstr "Miembros"
+#: ../../Zotlabs/Module/Connedit.php:532
+#: ../../Zotlabs/Module/Contactedit.php:660
+msgid "Unhide"
+msgstr "Mostrar"
-#: ../../Zotlabs/Module/Help.php:85
-msgid "Administrators"
-msgstr "Administradores"
+#: ../../Zotlabs/Module/Connedit.php:532
+#: ../../Zotlabs/Module/Contactedit.php:660
+msgid "Hide"
+msgstr "Ocultar"
-#: ../../Zotlabs/Module/Help.php:86
-msgid "Developers"
-msgstr "Desarrolladores"
+#: ../../Zotlabs/Module/Connedit.php:535
+#: ../../Zotlabs/Module/Contactedit.php:662
+msgid "Hide or Unhide this connection from your other connections"
+msgstr "Ocultar o mostrar esta conexión a sus otras conexiones"
-#: ../../Zotlabs/Module/Help.php:87
-msgid "Tutorials"
-msgstr "Tutoriales"
+#: ../../Zotlabs/Module/Connedit.php:536
+#: ../../Zotlabs/Module/Contactedit.php:663
+msgid "This connection is hidden!"
+msgstr "¡Esta conexión está oculta!"
-#: ../../Zotlabs/Module/Help.php:98
-msgid "$Projectname Documentation"
-msgstr "Documentación de $Projectname"
+#: ../../Zotlabs/Module/Connedit.php:543
+#: ../../Zotlabs/Module/Contactedit.php:669
+msgid "Delete this connection"
+msgstr "Eliminar esta conexión"
-#: ../../Zotlabs/Module/Help.php:99
-msgid "Contents"
-msgstr "Contenidos"
+#: ../../Zotlabs/Module/Connedit.php:550
+msgid "Fetch Vcard"
+msgstr "Obtener una vcard"
-#: ../../Zotlabs/Module/Webpages.php:67
-msgid "Import Webpage Elements"
-msgstr "Importar elementos de una página web"
+#: ../../Zotlabs/Module/Connedit.php:553
+msgid "Fetch electronic calling card for this connection"
+msgstr "Obtener una tarjeta de llamada electrónica para esta conexión"
-#: ../../Zotlabs/Module/Webpages.php:68
-msgid "Import selected"
-msgstr "Importar elementos seleccionados"
+#: ../../Zotlabs/Module/Connedit.php:572
+#: ../../Zotlabs/Module/Contactedit.php:445
+msgid "Affinity"
+msgstr "Afinidad"
-#: ../../Zotlabs/Module/Webpages.php:91
-msgid "Export Webpage Elements"
-msgstr "Exportar elementos de una página web"
+#: ../../Zotlabs/Module/Connedit.php:575
+msgid "Open Set Affinity section by default"
+msgstr "Abrir por defecto la sección para definir la afinidad"
-#: ../../Zotlabs/Module/Webpages.php:92
-msgid "Export selected"
-msgstr "Exportar los elementos seleccionados"
+#: ../../Zotlabs/Module/Connedit.php:579
+#: ../../Zotlabs/Module/Contactedit.php:295
+#: ../../Zotlabs/Widget/Affinity.php:36
+msgid "Me"
+msgstr "Yo"
-#: ../../Zotlabs/Module/Webpages.php:260
-msgid "Actions"
-msgstr "Acciones"
+#: ../../Zotlabs/Module/Connedit.php:580
+#: ../../Zotlabs/Module/Contactedit.php:296
+#: ../../Zotlabs/Widget/Affinity.php:37
+msgid "Family"
+msgstr "Familia"
-#: ../../Zotlabs/Module/Webpages.php:261
-msgid "Page Link"
-msgstr "Vínculo de la página"
+#: ../../Zotlabs/Module/Connedit.php:582
+#: ../../Zotlabs/Module/Contactedit.php:298
+#: ../../Zotlabs/Widget/Affinity.php:39
+msgid "Acquaintances"
+msgstr "Conocidos/as"
-#: ../../Zotlabs/Module/Webpages.php:262
-msgid "Page Title"
-msgstr "Título de página"
+#: ../../Zotlabs/Module/Connedit.php:612
+msgid "Filter"
+msgstr "Filtrar"
-#: ../../Zotlabs/Module/Webpages.php:263 ../../Zotlabs/Module/Blocks.php:157
-#: ../../Zotlabs/Module/Menu.php:178 ../../Zotlabs/Module/Layouts.php:191
-msgid "Created"
-msgstr "Creado"
+#: ../../Zotlabs/Module/Connedit.php:615
+msgid "Open Custom Filter section by default"
+msgstr "Abrir por defecto la sección de personalización de filtros"
-#: ../../Zotlabs/Module/Webpages.php:264 ../../Zotlabs/Module/Blocks.php:158
-#: ../../Zotlabs/Module/Menu.php:179 ../../Zotlabs/Module/Layouts.php:192
-msgid "Edited"
-msgstr "Editado"
+#: ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Contactedit.php:329
+msgid "Approve this contact"
+msgstr "Aprobar este contacto"
-#: ../../Zotlabs/Module/Webpages.php:292
-msgid "Invalid file type."
-msgstr "Tipo de fichero no válido."
+#: ../../Zotlabs/Module/Connedit.php:622
+#: ../../Zotlabs/Module/Contactedit.php:329
+msgid "Accept contact to allow communication"
+msgstr "Aceptar el contacto para permitir la comunicación"
-#: ../../Zotlabs/Module/Webpages.php:304
-msgid "Error opening zip file"
-msgstr "Error al abrir el fichero comprimido zip"
+#: ../../Zotlabs/Module/Connedit.php:626
+msgid "Set Affinity"
+msgstr "Ajustar la afinidad"
-#: ../../Zotlabs/Module/Webpages.php:315
-msgid "Invalid folder path."
-msgstr "La ruta de la carpeta no es válida."
+#: ../../Zotlabs/Module/Connedit.php:629
+msgid "Set Profile"
+msgstr "Ajustar el perfil"
-#: ../../Zotlabs/Module/Webpages.php:342
-msgid "No webpage elements detected."
-msgstr "No se han detectado elementos de ninguna página web."
+#: ../../Zotlabs/Module/Connedit.php:632
+msgid "Set Affinity & Profile"
+msgstr "Ajustar la afinidad y el perfil"
-#: ../../Zotlabs/Module/Webpages.php:417
-msgid "Import complete."
-msgstr "Importación completada."
+#: ../../Zotlabs/Module/Connedit.php:658
+#: ../../Zotlabs/Module/Contactedit.php:362
+msgid "Please select a role for this contact!"
+msgstr "¡Por favor, seleccione un rol para este contacto!"
-#: ../../Zotlabs/Module/Filestorage.php:14
-#: ../../Zotlabs/Module/Filestorage.php:53
-msgid "Deprecated!"
-msgstr "¡Obsoleto!"
+#: ../../Zotlabs/Module/Connedit.php:678
+#: ../../Zotlabs/Module/Contactedit.php:382
+msgid "This contact is unreachable from this location."
+msgstr "Este contacto es inaccesible desde esta ubicación."
-#: ../../Zotlabs/Module/Filestorage.php:157
-msgid "Permission Denied."
-msgstr "Permiso denegado"
+#: ../../Zotlabs/Module/Connedit.php:679
+#: ../../Zotlabs/Module/Contactedit.php:383
+msgid "This contact may be unreachable from other channel locations."
+msgstr "Este contacto puede ser inaccesible desde otras ubicaciones del canal."
-#: ../../Zotlabs/Module/Filestorage.php:190
-msgid "Edit file permissions"
-msgstr "Modificar los permisos del fichero"
+#: ../../Zotlabs/Module/Connedit.php:681
+#: ../../Zotlabs/Module/Contactedit.php:385
+msgid "Location independence is not supported by their network."
+msgstr "La independencia de ubicación no es compatible con su red."
-#: ../../Zotlabs/Module/Filestorage.php:203
-msgid "Include all files and sub folders"
-msgstr "Incluir todos los ficheros y subcarpetas"
+#: ../../Zotlabs/Module/Connedit.php:685
+#, php-format
+msgid "Contact: %s"
+msgstr "Contacto: %s"
-#: ../../Zotlabs/Module/Filestorage.php:204
-msgid "Return to file list"
-msgstr "Volver a la lista de ficheros"
+#: ../../Zotlabs/Module/Connedit.php:687
+msgid "Manage contact roles"
+msgstr "Gestionar roles de contactos"
-#: ../../Zotlabs/Module/Filestorage.php:206
-#: ../../Zotlabs/Storage/Browser.php:386
-msgid "Copy/paste this code to attach file to a post"
-msgstr "Copiar/pegar este código para adjuntar el fichero al envío"
+#: ../../Zotlabs/Module/Connedit.php:694
+msgid "This contacts's primary address is"
+msgstr "La dirección principal de este contactos es "
-#: ../../Zotlabs/Module/Filestorage.php:207
-#: ../../Zotlabs/Storage/Browser.php:387
-msgid "Copy/paste this URL to link file from a web page"
-msgstr "Copiar/pegar esta dirección para enlazar el fichero desde una página web"
+#: ../../Zotlabs/Module/Connedit.php:695
+msgid "Available locations:"
+msgstr "Ubicaciones disponibles:"
-#: ../../Zotlabs/Module/Filestorage.php:209
-msgid "Share this file"
-msgstr "Compartir este fichero"
+#: ../../Zotlabs/Module/Connedit.php:700 ../../Zotlabs/Module/Defperms.php:259
+msgid ""
+"The permissions indicated on this page will be applied to all new "
+"connections."
+msgstr "Los permisos indicados en esta página serán aplicados en todas las nuevas conexiones."
-#: ../../Zotlabs/Module/Filestorage.php:210
-msgid "Show URL to this file"
-msgstr "Mostrar la dirección de este fichero"
+#: ../../Zotlabs/Module/Connedit.php:701
+#: ../../Zotlabs/Module/Contactedit.php:252
+#: ../../Zotlabs/Module/Contactedit.php:401
+msgid "Contact Tools"
+msgstr "Gestión de contactos"
-#: ../../Zotlabs/Module/Filestorage.php:211
-#: ../../Zotlabs/Storage/Browser.php:552
-msgid "Show in your contacts shared folder"
-msgstr "Mostrar en la carpeta compartida con sus contactos"
+#: ../../Zotlabs/Module/Connedit.php:703
+#: ../../Zotlabs/Module/Contactedit.php:420
+msgid "Slide to adjust your degree of friendship"
+msgstr "Deslizar para ajustar el grado de amistad"
-#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98
-msgid "Tag removed"
-msgstr "Etiqueta eliminada."
+#: ../../Zotlabs/Module/Connedit.php:705
+#: ../../Zotlabs/Module/Contactedit.php:422
+msgid "Custom Filter"
+msgstr "Filtro personalizado"
-#: ../../Zotlabs/Module/Tagrm.php:123
-msgid "Remove Item Tag"
-msgstr "Eliminar etiqueta del elemento."
+#: ../../Zotlabs/Module/Connedit.php:706
+#: ../../Zotlabs/Module/Contactedit.php:423
+#: ../../Zotlabs/Module/Settings/Channel.php:286
+msgid "Only import posts with this text"
+msgstr "Importar solo entradas que contengan este texto"
-#: ../../Zotlabs/Module/Tagrm.php:125
-msgid "Select a tag to remove: "
-msgstr "Seleccionar una etiqueta para eliminar:"
+#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
+#: ../../Zotlabs/Module/Admin/Site.php:515
+#: ../../Zotlabs/Module/Admin/Site.php:516
+#: ../../Zotlabs/Module/Contactedit.php:423
+#: ../../Zotlabs/Module/Contactedit.php:424
+msgid ""
+"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
+"all posts"
+msgstr "Una sola opción por línea: palabras, #etiquetas, /patrones/ o lang=xx. Dejar en blanco para importarlo todo"
-#: ../../Zotlabs/Module/Connect.php:65 ../../Zotlabs/Module/Connect.php:118
-msgid "Continue"
-msgstr "Continuar"
+#: ../../Zotlabs/Module/Connedit.php:707
+#: ../../Zotlabs/Module/Contactedit.php:424
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+msgid "Do not import posts with this text"
+msgstr "No importar entradas que contengan este texto"
-#: ../../Zotlabs/Module/Connect.php:99
-msgid "Premium Channel Setup"
-msgstr "Configuración del canal premium"
+#: ../../Zotlabs/Module/Connedit.php:710
+msgid "Contact Pending Approval"
+msgstr "Contacto pendiente de aprobación"
-#: ../../Zotlabs/Module/Connect.php:101
-msgid "Enable premium channel connection restrictions"
-msgstr "Habilitar restricciones de conexión del canal premium"
+#: ../../Zotlabs/Module/Connedit.php:714
+#: ../../Zotlabs/Module/Contactedit.php:429
+msgid "Approve contact"
+msgstr "Aprobar contacto"
-#: ../../Zotlabs/Module/Connect.php:102
+#: ../../Zotlabs/Module/Connedit.php:715
+#, php-format
msgid ""
-"Please enter your restrictions or conditions, such as paypal receipt, usage "
-"guidelines, etc."
-msgstr "Por favor introduzca sus restricciones o condiciones, como recibo de paypal, normas de uso, etc."
+"Please choose the profile you would like to display to %s when viewing your "
+"profile securely."
+msgstr "Por favor, escoja el perfil que quiere mostrar a %s cuando esté viendo su perfil de forma segura."
-#: ../../Zotlabs/Module/Connect.php:104 ../../Zotlabs/Module/Connect.php:124
-msgid ""
-"This channel may require additional steps or acknowledgement of the "
-"following conditions prior to connecting:"
-msgstr "Este canal puede requerir antes de conectar unos pasos adicionales o el conocimiento de las siguientes condiciones:"
+#: ../../Zotlabs/Module/Connedit.php:717
+#: ../../Zotlabs/Module/Contactedit.php:431
+msgid "Their"
+msgstr "Su"
-#: ../../Zotlabs/Module/Connect.php:105
-msgid ""
-"Potential connections will then see the following text before proceeding:"
-msgstr "Las posibles conexiones verán, por tanto, el siguiente texto antes de proceder:"
+#: ../../Zotlabs/Module/Connedit.php:718
+#: ../../Zotlabs/Module/Contactedit.php:432
+msgid "My"
+msgstr "Mi"
-#: ../../Zotlabs/Module/Connect.php:106 ../../Zotlabs/Module/Connect.php:127
-msgid ""
-"By continuing, I certify that I have complied with any instructions provided"
-" on this page."
-msgstr "Al continuar, certifico que he cumplido con todas las instrucciones proporcionadas en esta página."
+#: ../../Zotlabs/Module/Connedit.php:720 ../../Zotlabs/Module/Defperms.php:266
+msgid "Individual Permissions"
+msgstr "Permisos individuales"
-#: ../../Zotlabs/Module/Connect.php:115
-msgid "(No specific instructions have been provided by the channel owner.)"
-msgstr "(No ha sido proporcionada ninguna instrucción específica por el propietario del canal.)"
+#: ../../Zotlabs/Module/Connedit.php:721
+msgid ""
+"Some permissions may be inherited from your channel's <a "
+"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
+"priority than individual settings. You can <strong>not</strong> change those"
+" settings here."
+msgstr "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. <strong>No</strong> puede cambiar estos ajustes aquí."
-#: ../../Zotlabs/Module/Connect.php:123
-msgid "Restricted or Premium Channel"
-msgstr "Canal premium o restringido"
+#: ../../Zotlabs/Module/Connedit.php:722
+msgid ""
+"Some permissions may be inherited from your channel's <a "
+"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
+"priority than individual settings. You can change those settings here but "
+"they wont have any impact unless the inherited setting changes."
+msgstr "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. Puede cambiar estos ajustes aquí, pero no tendrán ningún consecuencia hasta que cambie los ajustes heredados."
-#: ../../Zotlabs/Module/Cloud.php:120
-msgid "Not found"
-msgstr "No encontrado"
+#: ../../Zotlabs/Module/Connedit.php:723
+msgid "Last update:"
+msgstr "Última actualización:"
-#: ../../Zotlabs/Module/Cloud.php:130
-msgid "Unknown error"
-msgstr "Error desconocido"
+#: ../../Zotlabs/Module/Connedit.php:731
+msgid "Details"
+msgstr "Detalles"
-#: ../../Zotlabs/Module/Share.php:120
-msgid "Post repeated"
-msgstr "Entrada repetida"
+#: ../../Zotlabs/Module/Connedit.php:733 ../../Zotlabs/Module/Cdav.php:1375
+msgid "Organisation"
+msgstr "Organización"
-#: ../../Zotlabs/Module/Acl.php:370
-msgid "network"
-msgstr "red"
+#: ../../Zotlabs/Module/Connedit.php:735 ../../Zotlabs/Module/Cdav.php:1377
+msgid "Phone"
+msgstr "Teléfono"
-#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43
-msgid "Item is not editable"
-msgstr "El elemento no es editable"
+#: ../../Zotlabs/Module/Connedit.php:737 ../../Zotlabs/Module/Cdav.php:1379
+msgid "Instant messenger"
+msgstr "Mensajería instantánea"
-#: ../../Zotlabs/Module/Editpost.php:110 ../../Zotlabs/Module/Rpost.php:218
-msgid "Edit post"
-msgstr "Editar la entrada"
+#: ../../Zotlabs/Module/Connedit.php:738 ../../Zotlabs/Module/Cdav.php:1380
+msgid "Website"
+msgstr "Sitio web"
-#: ../../Zotlabs/Module/Tagger.php:50
-msgid "Post not found."
-msgstr "Mensaje no encontrado."
+#: ../../Zotlabs/Module/Connedit.php:740 ../../Zotlabs/Module/Cdav.php:1382
+msgid "Note"
+msgstr "Nota"
-#: ../../Zotlabs/Module/Tagger.php:121
-#, php-format
-msgid "%1$s tagged %2$s's %3$s with %4$s"
-msgstr "%1$s ha etiquetado %3$s de %2$s con %4$s"
+#: ../../Zotlabs/Module/Connedit.php:745 ../../Zotlabs/Module/Cdav.php:1387
+msgid "Add Contact"
+msgstr "Añadir un contacto"
-#: ../../Zotlabs/Module/Authorize.php:17
-msgid "Unknown App"
-msgstr "Aplicación desconocida"
+#: ../../Zotlabs/Module/Connedit.php:746 ../../Zotlabs/Module/Cdav.php:1388
+msgid "Add Field"
+msgstr "Añadir un campo"
-#: ../../Zotlabs/Module/Authorize.php:29
-msgid "Authorize"
-msgstr "Autorizar"
+#: ../../Zotlabs/Module/Connedit.php:751 ../../Zotlabs/Module/Cdav.php:1393
+msgid "P.O. Box"
+msgstr "Buzón de correos"
-#: ../../Zotlabs/Module/Authorize.php:30
-#, php-format
-msgid "Do you authorize the app %s to access your channel data?"
-msgstr "¿Autoriza a la aplicación %s a acceder a los datos de su canal?"
+#: ../../Zotlabs/Module/Connedit.php:752 ../../Zotlabs/Module/Cdav.php:1394
+msgid "Additional"
+msgstr "Adicional"
-#: ../../Zotlabs/Module/Authorize.php:33
-#: ../../Zotlabs/Module/Admin/Accounts.php:319
-msgid "Deny"
-msgstr "Rechazar"
+#: ../../Zotlabs/Module/Connedit.php:753 ../../Zotlabs/Module/Cdav.php:1395
+msgid "Street"
+msgstr "Calle"
-#: ../../Zotlabs/Module/Admin/Queue.php:45
-msgid "Queue Statistics"
-msgstr "Estadísticas de la cola"
+#: ../../Zotlabs/Module/Connedit.php:754 ../../Zotlabs/Module/Cdav.php:1396
+msgid "Locality"
+msgstr "Localidad"
-#: ../../Zotlabs/Module/Admin/Queue.php:46
-msgid "Total Entries"
-msgstr "Total de entradas"
+#: ../../Zotlabs/Module/Connedit.php:755 ../../Zotlabs/Module/Cdav.php:1397
+msgid "Region"
+msgstr "Provincia, región o estado"
-#: ../../Zotlabs/Module/Admin/Queue.php:47
-msgid "Priority"
-msgstr "Prioridad"
+#: ../../Zotlabs/Module/Connedit.php:756 ../../Zotlabs/Module/Cdav.php:1398
+msgid "ZIP Code"
+msgstr "Código postal"
-#: ../../Zotlabs/Module/Admin/Queue.php:48
-msgid "Destination URL"
-msgstr "Dirección de destino"
+#: ../../Zotlabs/Module/Connedit.php:757 ../../Zotlabs/Module/Cdav.php:1399
+#: ../../Zotlabs/Module/Profiles.php:774
+msgid "Country"
+msgstr "País"
-#: ../../Zotlabs/Module/Admin/Queue.php:49
-msgid "Mark hub permanently offline"
-msgstr "Marcar el servidor como permanentemente fuera de línea"
+#: ../../Zotlabs/Module/Admin/Channels.php:31
+#, php-format
+msgid "%s channel censored/uncensored"
+msgid_plural "%s channels censored/uncensored"
+msgstr[0] "%s canales censurados/no censurados"
+msgstr[1] "%s canales censurados/no censurados"
+msgstr[2] "%s canales censurados/no censurados"
-#: ../../Zotlabs/Module/Admin/Queue.php:50
-msgid "Retry delivery to this hub"
-msgstr "Reintentar la entrega a este hub"
+#: ../../Zotlabs/Module/Admin/Channels.php:40
+#, php-format
+msgid "%s channel code allowed/disallowed"
+msgid_plural "%s channels code allowed/disallowed"
+msgstr[0] "%s código permitido/no permitido al canal"
+msgstr[1] "%s código permitido/no permitido al canal"
+msgstr[2] "%s código permitido/no permitido al canal"
-#: ../../Zotlabs/Module/Admin/Queue.php:51
-msgid "Empty queue for this hub"
-msgstr "Vaciar la cola para este servidor"
+#: ../../Zotlabs/Module/Admin/Channels.php:46
+#, php-format
+msgid "%s channel deleted"
+msgid_plural "%s channels deleted"
+msgstr[0] "%s canales eliminados"
+msgstr[1] "%s canales eliminados"
+msgstr[2] "%s canales eliminados"
-#: ../../Zotlabs/Module/Admin/Queue.php:52
-msgid "Last known contact"
-msgstr "Último contacto conocido"
+#: ../../Zotlabs/Module/Admin/Channels.php:65
+msgid "Channel not found"
+msgstr "Canal no encontrado"
-#: ../../Zotlabs/Module/Admin/Themes.php:26
-msgid "Theme settings updated."
-msgstr "Ajustes del tema actualizados."
+#: ../../Zotlabs/Module/Admin/Channels.php:75
+#, php-format
+msgid "Channel '%s' deleted"
+msgstr "Canal '%s' eliminado"
-#: ../../Zotlabs/Module/Admin/Themes.php:61
-msgid "No themes found."
-msgstr "No se han encontrado temas."
+#: ../../Zotlabs/Module/Admin/Channels.php:87
+#, php-format
+msgid "Channel '%s' censored"
+msgstr "Canal '%s' censurado"
-#: ../../Zotlabs/Module/Admin/Themes.php:95
-#: ../../Zotlabs/Module/Admin/Addons.php:311
-msgid "Disable"
-msgstr "Desactivar"
+#: ../../Zotlabs/Module/Admin/Channels.php:87
+#, php-format
+msgid "Channel '%s' uncensored"
+msgstr "Canal '%s' no censurado"
-#: ../../Zotlabs/Module/Admin/Themes.php:97
-#: ../../Zotlabs/Module/Admin/Addons.php:314
-msgid "Enable"
-msgstr "Activar"
+#: ../../Zotlabs/Module/Admin/Channels.php:98
+#, php-format
+msgid "Channel '%s' code allowed"
+msgstr "Código permitido al canal '%s'"
-#: ../../Zotlabs/Module/Admin/Themes.php:116
-msgid "Screenshot"
-msgstr "Instantánea de pantalla"
+#: ../../Zotlabs/Module/Admin/Channels.php:98
+#, php-format
+msgid "Channel '%s' code disallowed"
+msgstr "Código no permitido al canal '%s'"
+#: ../../Zotlabs/Module/Admin/Channels.php:145
+#: ../../Zotlabs/Module/Admin/Accounts.php:307
#: ../../Zotlabs/Module/Admin/Themes.php:122
#: ../../Zotlabs/Module/Admin/Themes.php:156
-#: ../../Zotlabs/Module/Admin/Security.php:98
-#: ../../Zotlabs/Module/Admin/Accounts.php:307
#: ../../Zotlabs/Module/Admin/Site.php:411
#: ../../Zotlabs/Module/Admin/Logs.php:82
-#: ../../Zotlabs/Module/Admin/Channels.php:145
-#: ../../Zotlabs/Module/Admin/Addons.php:342
-#: ../../Zotlabs/Module/Admin/Addons.php:440
+#: ../../Zotlabs/Module/Admin/Addons.php:345
+#: ../../Zotlabs/Module/Admin/Addons.php:443
+#: ../../Zotlabs/Module/Admin/Security.php:98
#: ../../Zotlabs/Module/Admin.php:140
msgid "Administration"
msgstr "Administración"
-#: ../../Zotlabs/Module/Admin/Themes.php:124
-#: ../../Zotlabs/Module/Admin/Addons.php:344
-msgid "Toggle"
-msgstr "Cambiar"
+#: ../../Zotlabs/Module/Admin/Channels.php:148
+msgid "select all"
+msgstr "seleccionar todo"
-#: ../../Zotlabs/Module/Admin/Themes.php:134
-#: ../../Zotlabs/Module/Admin/Addons.php:352
-msgid "Author: "
-msgstr "Autor:"
+#: ../../Zotlabs/Module/Admin/Channels.php:152
+msgid "Allow Code"
+msgstr "Permitir código"
-#: ../../Zotlabs/Module/Admin/Themes.php:135
-#: ../../Zotlabs/Module/Admin/Addons.php:353
-msgid "Maintainer: "
-msgstr "Mantenedor:"
+#: ../../Zotlabs/Module/Admin/Channels.php:153
+msgid "Disallow Code"
+msgstr "No permitir código"
-#: ../../Zotlabs/Module/Admin/Themes.php:162
-msgid "[Experimental]"
-msgstr "[Experimental]"
+#: ../../Zotlabs/Module/Admin/Channels.php:158
+msgid "UID"
+msgstr "UID"
-#: ../../Zotlabs/Module/Admin/Themes.php:163
-msgid "[Unsupported]"
-msgstr "[No soportado]"
+#: ../../Zotlabs/Module/Admin/Channels.php:162
+msgid ""
+"Selected channels will be deleted!\\n\\nEverything that was posted in these "
+"channels on this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "Los canales seleccionados se eliminarán!\\n\\nTodo lo publicado por estos canales en este sitio se borrarán definitivamente!\\n\\n¿Está seguro de querer hacerlo?"
+
+#: ../../Zotlabs/Module/Admin/Channels.php:163
+msgid ""
+"The channel {0} will be deleted!\\n\\nEverything that was posted in this "
+"channel on this site will be permanently deleted!\\n\\nAre you sure?"
+msgstr "El canal {0} va a ser eliminado!\\n\\nTodo lo publicado por el canal en este sitio se borrará definitivamente!\\n\\n¿Está seguro de querer hacerlo?"
#: ../../Zotlabs/Module/Admin/Features.php:56
#, php-format
@@ -10103,138 +11166,39 @@ msgstr "Bloquear la funcionalidad %s"
msgid "Manage Additional Features"
msgstr "Gestionar las funcionalidades"
-#: ../../Zotlabs/Module/Admin/Security.php:89
-msgid ""
-"By default, unfiltered HTML is allowed in embedded media. This is inherently"
-" insecure."
-msgstr "De forma predeterminada, el HTML sin filtrar está permitido en el contenido multimedia incorporado en una publicación. Esto es siempre inseguro."
-
-#: ../../Zotlabs/Module/Admin/Security.php:92
-msgid ""
-"The recommended setting is to only allow unfiltered HTML from the following "
-"sites:"
-msgstr "La configuración recomendada es que sólo se permita HTML sin filtrar desde los siguientes sitios: "
-
-#: ../../Zotlabs/Module/Admin/Security.php:93
-msgid ""
-"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br"
-" />https://vimeo.com/<br />https://soundcloud.com/<br />"
-msgstr "https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
-
-#: ../../Zotlabs/Module/Admin/Security.php:94
-msgid ""
-"All other embedded content will be filtered, <strong>unless</strong> "
-"embedded content from that site is explicitly blocked."
-msgstr "El resto del contenido incrustado se filtrará, <strong>excepto</ strong> si el contenido incorporado desde ese sitio está bloqueado de forma explícita."
-
-#: ../../Zotlabs/Module/Admin/Security.php:101
-msgid "Block public"
-msgstr "Bloquear páginas públicas"
-
-#: ../../Zotlabs/Module/Admin/Security.php:101
-msgid ""
-"Check to block public access to all otherwise public personal pages on this "
-"site unless you are currently authenticated."
-msgstr "Habilitar para impedir ver las páginas personales de este sitio a quien no esté actualmente autenticado."
-
-#: ../../Zotlabs/Module/Admin/Security.php:102
-msgid "Provide a cloud root directory"
-msgstr "Proporcionar un directorio raíz de la nube"
-
-#: ../../Zotlabs/Module/Admin/Security.php:102
-msgid ""
-"The cloud root directory lists all channel names which provide public files"
-msgstr "El directorio raíz de la nube lista todos los nombres de canales que proporcionan archivos públicos"
-
-#: ../../Zotlabs/Module/Admin/Security.php:103
-msgid "Show total disk space available to cloud uploads"
-msgstr "Mostrar el espacio total disponible en el disco para las cargas en la nube"
-
-#: ../../Zotlabs/Module/Admin/Security.php:104
-msgid "Set \"Transport Security\" HTTP header"
-msgstr "Habilitar \"Seguridad de transporte\" (\"Transport Security\") en la cabecera HTTP"
-
-#: ../../Zotlabs/Module/Admin/Security.php:105
-msgid "Set \"Content Security Policy\" HTTP header"
-msgstr "Habilitar la \"Política de seguridad del contenido\" (\"Content Security Policy\") en la cabecera HTTP"
-
-#: ../../Zotlabs/Module/Admin/Security.php:106
-msgid "Allowed email domains"
-msgstr "Se aceptan dominios de correo electrónico"
-
-#: ../../Zotlabs/Module/Admin/Security.php:106
-msgid ""
-"Comma separated list of domains which are allowed in email addresses for "
-"registrations to this site. Wildcards are accepted. Empty to allow any "
-"domains"
-msgstr "Lista separada por comas de los dominios de los que se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio. "
-
-#: ../../Zotlabs/Module/Admin/Security.php:107
-msgid "Not allowed email domains"
-msgstr "No se permiten dominios de correo electrónico"
-
-#: ../../Zotlabs/Module/Admin/Security.php:107
-msgid ""
-"Comma separated list of domains which are not allowed in email addresses for"
-" registrations to this site. Wildcards are accepted. Empty to allow any "
-"domains, unless allowed domains have been defined."
-msgstr "Lista separada por comas de los dominios de los que no se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para no aceptar cualquier dominio, excepto los que se hayan autorizado."
-
-#: ../../Zotlabs/Module/Admin/Security.php:108
-msgid "Allow communications only from these sites"
-msgstr "Permitir la comunicación solo desde estos sitios"
-
-#: ../../Zotlabs/Module/Admin/Security.php:108
-msgid ""
-"One site per line. Leave empty to allow communication from anywhere by "
-"default"
-msgstr "Un sitio por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera"
-
-#: ../../Zotlabs/Module/Admin/Security.php:109
-msgid "Block communications from these sites"
-msgstr "Bloquear la comunicación desde estos sitios"
-
-#: ../../Zotlabs/Module/Admin/Security.php:110
-msgid "Allow communications only from these channels"
-msgstr "Permitir la comunicación solo desde estos canales"
-
-#: ../../Zotlabs/Module/Admin/Security.php:110
-msgid ""
-"One channel (hash) per line. Leave empty to allow from any channel by "
-"default"
-msgstr "Un canal (hash) por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera"
-
-#: ../../Zotlabs/Module/Admin/Security.php:111
-msgid "Block communications from these channels"
-msgstr "Bloquear la comunicación desde estos canales"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:29
+#, php-format
+msgid "Password changed for account %d."
+msgstr "Ha cambiado la contraseña para la cuenta %d."
-#: ../../Zotlabs/Module/Admin/Security.php:112
-msgid "Only allow embeds from secure (SSL) websites and links."
-msgstr "Sólo se permite contenido multimedia incorporado desde sitios y enlaces seguros (SSL)."
+#: ../../Zotlabs/Module/Admin/Account_edit.php:46
+msgid "Account settings updated."
+msgstr "Se han actualizado los ajustes de la cuenta."
-#: ../../Zotlabs/Module/Admin/Security.php:113
-msgid "Allow unfiltered embedded HTML content only from these domains"
-msgstr "Permitir contenido HTML sin filtrar sólo desde estos dominios "
+#: ../../Zotlabs/Module/Admin/Account_edit.php:61
+msgid "Account not found."
+msgstr "No se ha encontrado la cuenta."
-#: ../../Zotlabs/Module/Admin/Security.php:113
-msgid "One site per line. By default embedded content is filtered."
-msgstr "Un sitio por línea. El contenido incorporado se filtra de forma predeterminada."
+#: ../../Zotlabs/Module/Admin/Account_edit.php:68
+msgid "Account Edit"
+msgstr "Editar la cuenta"
-#: ../../Zotlabs/Module/Admin/Security.php:114
-msgid "Block embedded HTML from these domains"
-msgstr "Bloquear contenido con HTML incorporado desde estos dominios"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:69
+msgid "New Password"
+msgstr "Nueva contraseña"
-#: ../../Zotlabs/Module/Admin/Security.php:115
-msgid "Allow SVG thumbnails in file browser"
-msgstr "Permitir miniaturas SVG en el navegador de archivos"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:70
+msgid "New Password again"
+msgstr "Nueva contraseña otra vez"
-#: ../../Zotlabs/Module/Admin/Security.php:115
-msgid "WARNING: SVG images may contain malicious code."
-msgstr "ADVERTENCIA: Las imágenes SVG pueden contener código malicioso."
+#: ../../Zotlabs/Module/Admin/Account_edit.php:71
+msgid "Account language (for emails)"
+msgstr "Idioma de la cuenta (para los correos electrónicos)"
-#: ../../Zotlabs/Module/Admin/Security.php:116
-msgid "Allow embedded (inline) PDF files"
-msgstr "Permitir ficheros PDF incrustados (en línea)"
+#: ../../Zotlabs/Module/Admin/Account_edit.php:72
+#: ../../Zotlabs/Module/Admin/Accounts.php:335
+msgid "Service class"
+msgstr "Clase de servicio"
#: ../../Zotlabs/Module/Admin/Accounts.php:128
#, php-format
@@ -10274,6 +11238,12 @@ msgstr "Sin verificar"
msgid "Expired"
msgstr "Caducado/a"
+#: ../../Zotlabs/Module/Admin/Accounts.php:308
+#: ../../Zotlabs/Module/Admin/Accounts.php:327
+#: ../../Zotlabs/Module/Admin.php:95 ../../Zotlabs/Widget/Admin.php:28
+msgid "Accounts"
+msgstr "Cuentas"
+
#: ../../Zotlabs/Module/Admin/Accounts.php:310
msgid "Show verified registrations"
msgstr "Mostrar registros verificados"
@@ -10318,18 +11288,6 @@ msgstr "No hay registros disponibles"
msgid "No verified registrations available"
msgstr "No hay registros verificados disponibles"
-#: ../../Zotlabs/Module/Admin/Accounts.php:321
-#: ../../Zotlabs/Module/Contactedit.php:639
-#: ../../Zotlabs/Module/Connedit.php:508
-msgid "Block"
-msgstr "Bloquear"
-
-#: ../../Zotlabs/Module/Admin/Accounts.php:322
-#: ../../Zotlabs/Module/Contactedit.php:639
-#: ../../Zotlabs/Module/Connedit.php:508
-msgid "Unblock"
-msgstr "Desbloquear"
-
#: ../../Zotlabs/Module/Admin/Accounts.php:323
msgid "Verified"
msgstr "Verificado/a"
@@ -10358,11 +11316,6 @@ msgstr "Último acceso"
msgid "Expires"
msgstr "Caduca"
-#: ../../Zotlabs/Module/Admin/Accounts.php:335
-#: ../../Zotlabs/Module/Admin/Account_edit.php:72
-msgid "Service class"
-msgstr "Clase de servicio"
-
#: ../../Zotlabs/Module/Admin/Accounts.php:337
msgid ""
"Selected accounts will be deleted!\\n\\nEverything these accounts had posted"
@@ -10379,6 +11332,88 @@ msgstr "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha pu
msgid "Message"
msgstr "Mensaje"
+#: ../../Zotlabs/Module/Admin/Queueworker.php:65
+msgid "Max queueworker threads"
+msgstr "Máximo de hilos en la cola"
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:67
+msgid "Minimum 4, default 4"
+msgstr "Mínimo 4, por defecto 4"
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:77
+msgid "Assume workers dead after"
+msgstr "Asumir que los procesos han muerto después de "
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:79
+msgid "Minimum 120, default 300 seconds"
+msgstr "Mínimo de 120 segundos, por defecto, 300"
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:91
+msgid "Pause before starting next task"
+msgstr "Pausa antes de comenzar la siguiente tarea"
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:93
+msgid "Minimum 100, default 100 microseconds"
+msgstr "Mínimo 100, por defecto 100 microsegundos"
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:102
+msgid "Automatically adjust pause before starting next task"
+msgstr "Ajustar automáticamente una pausa antes de comenzar la siguiente tarea"
+
+#: ../../Zotlabs/Module/Admin/Queueworker.php:111
+msgid "Queueworker Settings"
+msgstr "Configuración del gestor de procesos de trabajo en cola"
+
+#: ../../Zotlabs/Module/Admin/Themes.php:26
+msgid "Theme settings updated."
+msgstr "Ajustes del tema actualizados."
+
+#: ../../Zotlabs/Module/Admin/Themes.php:61
+msgid "No themes found."
+msgstr "No se han encontrado temas."
+
+#: ../../Zotlabs/Module/Admin/Themes.php:95
+#: ../../Zotlabs/Module/Admin/Addons.php:314
+msgid "Disable"
+msgstr "Desactivar"
+
+#: ../../Zotlabs/Module/Admin/Themes.php:97
+#: ../../Zotlabs/Module/Admin/Addons.php:317
+msgid "Enable"
+msgstr "Activar"
+
+#: ../../Zotlabs/Module/Admin/Themes.php:116
+msgid "Screenshot"
+msgstr "Instantánea de pantalla"
+
+#: ../../Zotlabs/Module/Admin/Themes.php:123
+#: ../../Zotlabs/Module/Admin/Themes.php:157 ../../Zotlabs/Widget/Admin.php:33
+msgid "Themes"
+msgstr "Temas"
+
+#: ../../Zotlabs/Module/Admin/Themes.php:124
+#: ../../Zotlabs/Module/Admin/Addons.php:347
+msgid "Toggle"
+msgstr "Cambiar"
+
+#: ../../Zotlabs/Module/Admin/Themes.php:134
+#: ../../Zotlabs/Module/Admin/Addons.php:355
+msgid "Author: "
+msgstr "Autor:"
+
+#: ../../Zotlabs/Module/Admin/Themes.php:135
+#: ../../Zotlabs/Module/Admin/Addons.php:356
+msgid "Maintainer: "
+msgstr "Mantenedor:"
+
+#: ../../Zotlabs/Module/Admin/Themes.php:162
+msgid "[Experimental]"
+msgstr "[Experimental]"
+
+#: ../../Zotlabs/Module/Admin/Themes.php:163
+msgid "[Unsupported]"
+msgstr "[No soportado]"
+
#: ../../Zotlabs/Module/Admin/Site.php:112
msgid "Invalid input"
msgstr "Entrada no válida"
@@ -10438,18 +11473,6 @@ msgid ""
"This role will be used for the first channel created after registration."
msgstr "Este rol se utilizará para el primer canal creado después del registro."
-#: ../../Zotlabs/Module/Admin/Site.php:356 ../../Zotlabs/Module/Invite.php:397
-msgid "Minute(s)"
-msgstr "Minuto(s)"
-
-#: ../../Zotlabs/Module/Admin/Site.php:357 ../../Zotlabs/Module/Invite.php:398
-msgid "Hour(s)"
-msgstr "Hora(s)"
-
-#: ../../Zotlabs/Module/Admin/Site.php:358 ../../Zotlabs/Module/Invite.php:399
-msgid "Day(s)"
-msgstr "Día(s)"
-
#: ../../Zotlabs/Module/Admin/Site.php:359
msgid "Week(s)"
msgstr "Semana(s)"
@@ -10470,11 +11493,6 @@ msgstr "Retraso en la verificación del registro"
msgid "Time to wait before a registration can be verified"
msgstr "Tiempo de espera para verificar un registro "
-#: ../../Zotlabs/Module/Admin/Site.php:375
-#: ../../Zotlabs/Module/Admin/Site.php:397 ../../Zotlabs/Module/Invite.php:408
-msgid "duration up from now"
-msgstr "duración a partir de ahora "
-
#: ../../Zotlabs/Module/Admin/Site.php:391
msgid "Register verification expiration time"
msgstr "Tiempo de caducidad de la verificación del registro "
@@ -10483,6 +11501,10 @@ msgstr "Tiempo de caducidad de la verificación del registro "
msgid "Time before an unverified registration will expire"
msgstr "Tiempo antes de que caduque un registro no verificado "
+#: ../../Zotlabs/Module/Admin/Site.php:414 ../../Zotlabs/Widget/Admin.php:27
+msgid "Site"
+msgstr "Sitio"
+
#: ../../Zotlabs/Module/Admin/Site.php:417
msgid "File upload"
msgstr "Subir fichero"
@@ -10611,7 +11633,7 @@ msgid "Advanced examples:"
msgstr "Ejemplos avanzados: "
#: ../../Zotlabs/Module/Admin/Site.php:460
-#: ../../Zotlabs/Module/Settings/Channel.php:182
+#: ../../Zotlabs/Module/Settings/Channel.php:183
msgid "or"
msgstr "o"
@@ -10707,53 +11729,37 @@ msgstr "Forzar la publicación"
#: ../../Zotlabs/Module/Admin/Site.php:511
msgid ""
-"Check to force all profiles on this site to be listed in the site directory."
+"Check to force all profiles on this site to be listed in the site directory"
msgstr "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio."
#: ../../Zotlabs/Module/Admin/Site.php:512
-msgid "Import Public Streams"
-msgstr "Importar contenido público"
+msgid "Enable public stream"
+msgstr "Habilitar el \"stream\" público"
#: ../../Zotlabs/Module/Admin/Site.php:512
-msgid ""
-"Import and allow access to public content pulled from other sites. Warning: "
-"this content is unmoderated."
-msgstr "Importar y permitir acceso al contenido público sacado de otros sitios. Advertencia: este contenido no está moderado, por lo que podría encontrar cosas inapropiadas u ofensivas."
+msgid "Enable the public stream. Warning: this content is unmoderated"
+msgstr "Habilitar el \"stream\" público. Advertencia: este contenido no está moderado"
#: ../../Zotlabs/Module/Admin/Site.php:513
-msgid "Site only Public Streams"
+msgid "Site only public stream"
msgstr "Solo contenido público en este sitio"
#: ../../Zotlabs/Module/Admin/Site.php:513
-msgid ""
-"Allow access to public content originating only from this site if Imported "
-"Public Streams are disabled."
-msgstr "Permitir el acceso al contenido público originado sólo desde este sitio si los \"streams\" públicos Importados están deshabilitados."
+msgid "Restrict the public stream to content originating at this site"
+msgstr "Restringir el \"stream\" público a los contenidos originados en este sitio"
#: ../../Zotlabs/Module/Admin/Site.php:514
-msgid "Allow anybody on the internet to access the Public streams"
+msgid "Allow anybody on the internet to access the public streams"
msgstr "Permitir que cualquiera en Internet pueda acceder a los \"streams\" públicos"
#: ../../Zotlabs/Module/Admin/Site.php:514
-msgid ""
-"Disable to require authentication before viewing. Warning: this content is "
-"unmoderated."
-msgstr "Desactivar para requerir autenticación antes de la visualización. Advertencia: este contenido no está moderado."
+msgid "Disable to require authentication before viewing"
+msgstr "Desactivar para requerir autenticación antes de ver"
#: ../../Zotlabs/Module/Admin/Site.php:515
msgid "Only import Public stream posts with this text"
msgstr "Importar solo entradas del stream púlbico con este texto "
-#: ../../Zotlabs/Module/Admin/Site.php:515
-#: ../../Zotlabs/Module/Admin/Site.php:516
-#: ../../Zotlabs/Module/Contactedit.php:423
-#: ../../Zotlabs/Module/Contactedit.php:424
-#: ../../Zotlabs/Module/Connedit.php:706 ../../Zotlabs/Module/Connedit.php:707
-msgid ""
-"words one per line or #tags or /patterns/ or lang=xx, leave blank to import "
-"all posts"
-msgstr "Una sola opción por línea: palabras, #etiquetas, /patrones/ o lang=xx. Dejar en blanco para importarlo todo"
-
#: ../../Zotlabs/Module/Admin/Site.php:516
msgid "Do not import Public stream posts with this text"
msgstr "No importar entradas del stream público con este texto "
@@ -10845,16 +11851,6 @@ msgid ""
" if necessary to tune system performance. Recommend: 1-5."
msgstr "Numero de envíos a intentar en un único proceso del sistema operativo. Ajustar si es necesario mejorar el rendimiento. Se recomienda: 1-5."
-#: ../../Zotlabs/Module/Admin/Site.php:535
-msgid "Queue Threshold"
-msgstr "Umbral de la cola de espera"
-
-#: ../../Zotlabs/Module/Admin/Site.php:535
-msgid ""
-"Always defer immediate delivery if queue contains more than this number of "
-"entries."
-msgstr "Aplazar siempre la entrega inmediata si la cola contiene más de este número de entradas."
-
#: ../../Zotlabs/Module/Admin/Site.php:536
msgid "Poll interval"
msgstr "Intervalo máximo de tiempo entre dos mensajes sucesivos"
@@ -10930,151 +11926,37 @@ msgstr "Región o país"
msgid "Invalid 24h time value (hhmm/hmm)"
msgstr "Valor de tiempo de 24h no válido (hhmm/hmm)"
-#: ../../Zotlabs/Module/Admin/Logs.php:28
-msgid "Log settings updated."
-msgstr "Actualizado el informe de configuraciones."
-
-#: ../../Zotlabs/Module/Admin/Logs.php:85
-msgid "Clear"
-msgstr "Vaciar"
-
-#: ../../Zotlabs/Module/Admin/Logs.php:91
-msgid "Debugging"
-msgstr "Depuración"
-
-#: ../../Zotlabs/Module/Admin/Logs.php:92
-msgid "Log file"
-msgstr "Fichero de informe"
-
-#: ../../Zotlabs/Module/Admin/Logs.php:92
-msgid ""
-"Must be writable by web server. Relative to your top-level webserver "
-"directory."
-msgstr "Debe tener permisos de escritura por el servidor web. La ruta es relativa al directorio web principal."
-
-#: ../../Zotlabs/Module/Admin/Logs.php:93
-msgid "Log level"
-msgstr "Nivel de depuración"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:31
-#, php-format
-msgid "%s channel censored/uncensored"
-msgid_plural "%s channels censored/uncensored"
-msgstr[0] "%s canales censurados/no censurados"
-msgstr[1] "%s canales censurados/no censurados"
-msgstr[2] "%s canales censurados/no censurados"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:40
-#, php-format
-msgid "%s channel code allowed/disallowed"
-msgid_plural "%s channels code allowed/disallowed"
-msgstr[0] "%s código permitido/no permitido al canal"
-msgstr[1] "%s código permitido/no permitido al canal"
-msgstr[2] "%s código permitido/no permitido al canal"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:46
-#, php-format
-msgid "%s channel deleted"
-msgid_plural "%s channels deleted"
-msgstr[0] "%s canales eliminados"
-msgstr[1] "%s canales eliminados"
-msgstr[2] "%s canales eliminados"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:65
-msgid "Channel not found"
-msgstr "Canal no encontrado"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:75
-#, php-format
-msgid "Channel '%s' deleted"
-msgstr "Canal '%s' eliminado"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:87
-#, php-format
-msgid "Channel '%s' censored"
-msgstr "Canal '%s' censurado"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:87
-#, php-format
-msgid "Channel '%s' uncensored"
-msgstr "Canal '%s' no censurado"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:98
-#, php-format
-msgid "Channel '%s' code allowed"
-msgstr "Código permitido al canal '%s'"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:98
-#, php-format
-msgid "Channel '%s' code disallowed"
-msgstr "Código no permitido al canal '%s'"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:148
-msgid "select all"
-msgstr "seleccionar todo"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:150
-#: ../../Zotlabs/Module/Directory.php:361
-msgid "Censor"
-msgstr "Censurar"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:151
-#: ../../Zotlabs/Module/Directory.php:361
-msgid "Uncensor"
-msgstr "No censurar"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:152
-msgid "Allow Code"
-msgstr "Permitir código"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:153
-msgid "Disallow Code"
-msgstr "No permitir código"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:158
-msgid "UID"
-msgstr "UID"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:162
-msgid ""
-"Selected channels will be deleted!\\n\\nEverything that was posted in these "
-"channels on this site will be permanently deleted!\\n\\nAre you sure?"
-msgstr "Los canales seleccionados se eliminarán!\\n\\nTodo lo publicado por estos canales en este sitio se borrarán definitivamente!\\n\\n¿Está seguro de querer hacerlo?"
-
-#: ../../Zotlabs/Module/Admin/Channels.php:163
-msgid ""
-"The channel {0} will be deleted!\\n\\nEverything that was posted in this "
-"channel on this site will be permanently deleted!\\n\\nAre you sure?"
-msgstr "El canal {0} va a ser eliminado!\\n\\nTodo lo publicado por el canal en este sitio se borrará definitivamente!\\n\\n¿Está seguro de querer hacerlo?"
+#: ../../Zotlabs/Module/Admin/Queue.php:45
+msgid "Queue Statistics"
+msgstr "Estadísticas de la cola"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:29
-#, php-format
-msgid "Password changed for account %d."
-msgstr "Ha cambiado la contraseña para la cuenta %d."
+#: ../../Zotlabs/Module/Admin/Queue.php:46
+msgid "Total Entries"
+msgstr "Total de entradas"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:46
-msgid "Account settings updated."
-msgstr "Se han actualizado los ajustes de la cuenta."
+#: ../../Zotlabs/Module/Admin/Queue.php:47
+msgid "Priority"
+msgstr "Prioridad"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:61
-msgid "Account not found."
-msgstr "No se ha encontrado la cuenta."
+#: ../../Zotlabs/Module/Admin/Queue.php:48
+msgid "Destination URL"
+msgstr "Dirección de destino"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:68
-msgid "Account Edit"
-msgstr "Editar la cuenta"
+#: ../../Zotlabs/Module/Admin/Queue.php:49
+msgid "Mark hub permanently offline"
+msgstr "Marcar el servidor como permanentemente fuera de línea"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:69
-msgid "New Password"
-msgstr "Nueva contraseña"
+#: ../../Zotlabs/Module/Admin/Queue.php:50
+msgid "Retry delivery to this hub"
+msgstr "Reintentar la entrega a este hub"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:70
-msgid "New Password again"
-msgstr "Nueva contraseña otra vez"
+#: ../../Zotlabs/Module/Admin/Queue.php:51
+msgid "Empty queue for this hub"
+msgstr "Vaciar la cola para este servidor"
-#: ../../Zotlabs/Module/Admin/Account_edit.php:71
-msgid "Account language (for emails)"
-msgstr "Idioma de la cuenta (para los correos electrónicos)"
+#: ../../Zotlabs/Module/Admin/Queue.php:52
+msgid "Last known contact"
+msgstr "Último contacto conocido"
#: ../../Zotlabs/Module/Admin/Profs.php:89
msgid "New Profile Field"
@@ -11123,6 +12005,10 @@ msgstr "Definición del campo no encontrada"
msgid "Edit Profile Field"
msgstr "Modificar el campo del perfil"
+#: ../../Zotlabs/Module/Admin/Profs.php:168 ../../Zotlabs/Widget/Admin.php:36
+msgid "Profile Fields"
+msgstr "Campos del perfil"
+
#: ../../Zotlabs/Module/Admin/Profs.php:169
msgid "Basic Profile Fields"
msgstr "Campos básicos del perfil"
@@ -11147,949 +12033,334 @@ msgstr "Campos personalizados"
msgid "Create Custom Field"
msgstr "Crear un campo personalizado"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:19
-#: ../../Zotlabs/Module/Admin/Dbsync.php:59
-msgid "Update has been marked successful"
-msgstr "La actualización ha sido marcada como exitosa"
-
-#: ../../Zotlabs/Module/Admin/Dbsync.php:32
-#, php-format
-msgid "Verification of update %s failed. Check system logs."
-msgstr "Error en la verificación de la actualización %s. Compruebe los registros del sistema."
-
-#: ../../Zotlabs/Module/Admin/Dbsync.php:35
-#: ../../Zotlabs/Module/Admin/Dbsync.php:74
-#, php-format
-msgid "Update %s was successfully applied."
-msgstr "La actualización de %s se ha realizado exitosamente."
+#: ../../Zotlabs/Module/Admin/Logs.php:28
+msgid "Log settings updated."
+msgstr "Actualizado el informe de configuraciones."
-#: ../../Zotlabs/Module/Admin/Dbsync.php:39
-#, php-format
-msgid "Verifying update %s did not return a status. Unknown if it succeeded."
-msgstr "La verificación de la actualización %s no devuelve un estado. Desconocido si tuvo éxito."
+#: ../../Zotlabs/Module/Admin/Logs.php:83 ../../Zotlabs/Widget/Admin.php:54
+#: ../../Zotlabs/Widget/Admin.php:64
+msgid "Logs"
+msgstr "Informes"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:42
-#, php-format
-msgid "Update %s does not contain a verification function."
-msgstr "La actualización %s no contiene una función de verificación."
+#: ../../Zotlabs/Module/Admin/Logs.php:85
+msgid "Clear"
+msgstr "Vaciar"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:46
-#: ../../Zotlabs/Module/Admin/Dbsync.php:81
-#, php-format
-msgid "Update function %s could not be found."
-msgstr "No se encuentra la función de actualización de %s."
+#: ../../Zotlabs/Module/Admin/Logs.php:91
+msgid "Debugging"
+msgstr "Depuración"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:71
-#, php-format
-msgid "Executing update procedure %s failed. Check system logs."
-msgstr "Error al ejecutar el procedimiento de actualización %s. Compruebe los registros del sistema."
+#: ../../Zotlabs/Module/Admin/Logs.php:92
+msgid "Log file"
+msgstr "Fichero de informe"
-#: ../../Zotlabs/Module/Admin/Dbsync.php:78
-#, php-format
+#: ../../Zotlabs/Module/Admin/Logs.php:92
msgid ""
-"Update %s did not return a status. It cannot be determined if it was "
-"successful."
-msgstr "La actualización %s no devuelve un estado. No se puede determinar si tuvo éxito."
-
-#: ../../Zotlabs/Module/Admin/Dbsync.php:99
-msgid "Failed Updates"
-msgstr "Han fallado las actualizaciones"
-
-#: ../../Zotlabs/Module/Admin/Dbsync.php:101
-msgid "Mark success (if update was manually applied)"
-msgstr "Marcar como exitosa (si la actualización se ha hecho manualmente)"
-
-#: ../../Zotlabs/Module/Admin/Dbsync.php:102
-msgid "Attempt to verify this update if a verification procedure exists"
-msgstr "Intentar verificar esta actualización si existe un procedimiento de verificación."
-
-#: ../../Zotlabs/Module/Admin/Dbsync.php:103
-msgid "Attempt to execute this update step automatically"
-msgstr "Intentar ejecutar este paso de actualización automáticamente"
+"Must be writable by web server. Relative to your top-level webserver "
+"directory."
+msgstr "Debe tener permisos de escritura por el servidor web. La ruta es relativa al directorio web principal."
-#: ../../Zotlabs/Module/Admin/Dbsync.php:108
-msgid "No failed updates."
-msgstr "No ha fallado ninguna actualización."
+#: ../../Zotlabs/Module/Admin/Logs.php:93
+msgid "Log level"
+msgstr "Nivel de depuración"
-#: ../../Zotlabs/Module/Admin/Addons.php:290
+#: ../../Zotlabs/Module/Admin/Addons.php:293
#, php-format
msgid "Plugin %s disabled."
msgstr "Extensión %s desactivada."
-#: ../../Zotlabs/Module/Admin/Addons.php:295
+#: ../../Zotlabs/Module/Admin/Addons.php:298
#, php-format
msgid "Plugin %s enabled."
msgstr "Extensión %s activada."
-#: ../../Zotlabs/Module/Admin/Addons.php:354
+#: ../../Zotlabs/Module/Admin/Addons.php:346
+#: ../../Zotlabs/Module/Admin/Addons.php:444 ../../Zotlabs/Widget/Admin.php:32
+msgid "Addons"
+msgstr "Addons"
+
+#: ../../Zotlabs/Module/Admin/Addons.php:357
msgid "Minimum project version: "
msgstr "Versión mínima del proyecto:"
-#: ../../Zotlabs/Module/Admin/Addons.php:355
+#: ../../Zotlabs/Module/Admin/Addons.php:358
msgid "Maximum project version: "
msgstr "Versión máxima del proyecto:"
-#: ../../Zotlabs/Module/Admin/Addons.php:356
+#: ../../Zotlabs/Module/Admin/Addons.php:359
msgid "Minimum PHP version: "
msgstr "Versión mínima de PHP:"
-#: ../../Zotlabs/Module/Admin/Addons.php:357
+#: ../../Zotlabs/Module/Admin/Addons.php:360
msgid "Compatible Server Roles: "
msgstr "Configuraciones compatibles con este servidor:"
-#: ../../Zotlabs/Module/Admin/Addons.php:358
+#: ../../Zotlabs/Module/Admin/Addons.php:361
msgid "Requires: "
msgstr "Se requiere:"
-#: ../../Zotlabs/Module/Admin/Addons.php:359
-#: ../../Zotlabs/Module/Admin/Addons.php:446
+#: ../../Zotlabs/Module/Admin/Addons.php:362
+#: ../../Zotlabs/Module/Admin/Addons.php:449
msgid "Disabled - version incompatibility"
msgstr "Deshabilitado - versiones incompatibles"
-#: ../../Zotlabs/Module/Admin/Addons.php:415
+#: ../../Zotlabs/Module/Admin/Addons.php:418
msgid "Enter the public git repository URL of the addon repo."
msgstr "Introduzca la URL del repositorio público de git del addon repo."
-#: ../../Zotlabs/Module/Admin/Addons.php:416
+#: ../../Zotlabs/Module/Admin/Addons.php:419
msgid "Addon repo git URL"
msgstr "URL del repositorio git del addon"
-#: ../../Zotlabs/Module/Admin/Addons.php:417
+#: ../../Zotlabs/Module/Admin/Addons.php:420
msgid "Custom repo name"
msgstr "Nombre personalizado del repositorio"
-#: ../../Zotlabs/Module/Admin/Addons.php:417
+#: ../../Zotlabs/Module/Admin/Addons.php:420
msgid "(optional)"
msgstr "(opcional)"
-#: ../../Zotlabs/Module/Admin/Addons.php:418
+#: ../../Zotlabs/Module/Admin/Addons.php:421
msgid "Download Addon Repo"
msgstr "Descargar el repositorio"
-#: ../../Zotlabs/Module/Admin/Addons.php:425
+#: ../../Zotlabs/Module/Admin/Addons.php:428
msgid "Install new repo"
msgstr "Instalar un nuevo repositorio"
-#: ../../Zotlabs/Module/Admin/Addons.php:426 ../../Zotlabs/Lib/Apps.php:545
-msgid "Install"
-msgstr "Instalar"
-
-#: ../../Zotlabs/Module/Admin/Addons.php:449
+#: ../../Zotlabs/Module/Admin/Addons.php:452
msgid "Manage Repos"
msgstr "Gestionar los repositorios"
-#: ../../Zotlabs/Module/Admin/Addons.php:450
+#: ../../Zotlabs/Module/Admin/Addons.php:453
msgid "Installed Addon Repositories"
msgstr "Repositorioe de addons instalados"
-#: ../../Zotlabs/Module/Admin/Addons.php:451
+#: ../../Zotlabs/Module/Admin/Addons.php:454
msgid "Install a New Addon Repository"
msgstr "Instalar un nuevo repositorio de addons"
-#: ../../Zotlabs/Module/Admin/Addons.php:458
+#: ../../Zotlabs/Module/Admin/Addons.php:461
msgid "Switch branch"
msgstr "Cambiar la rama"
-#: ../../Zotlabs/Module/Apps.php:50
-msgid "Installed Apps"
-msgstr "Apps instaladas"
-
-#: ../../Zotlabs/Module/Apps.php:53
-msgid "Manage Apps"
-msgstr "Administrar apps"
-
-#: ../../Zotlabs/Module/Apps.php:54
-msgid "Create Custom App"
-msgstr "Crear una app personalizada"
-
-#: ../../Zotlabs/Module/Achievements.php:38
-msgid "Some blurb about what to do when you're new here"
-msgstr "Algunas propuestas para el nuevo usuario sobre qué se puede hacer aquí"
-
-#: ../../Zotlabs/Module/Removeme.php:35
-msgid ""
-"Channel removals are not allowed within 48 hours of changing the account "
-"password."
-msgstr "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña."
-
-#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
-#: ../../Zotlabs/Module/Settings/Channel.php:281
-msgid "Remove Channel"
-msgstr "Eliminar el canal"
-
-#: ../../Zotlabs/Module/Removeme.php:61
-#: ../../Zotlabs/Module/Removeaccount.php:58
-#: ../../Zotlabs/Module/Changeaddr.php:78
-msgid "WARNING: "
-msgstr "ATENCIÓN:"
-
-#: ../../Zotlabs/Module/Removeme.php:61
-msgid "This channel will be permanently removed. "
-msgstr "Este canal será eliminado permanentemente. "
-
-#: ../../Zotlabs/Module/Removeme.php:61
-msgid "This action can not be undone!"
-msgstr "¡Esta acción no se puede deshacer!"
-
-#: ../../Zotlabs/Module/Removeme.php:62
-#: ../../Zotlabs/Module/Removeaccount.php:59
-#: ../../Zotlabs/Module/Changeaddr.php:79
-msgid "Please enter your password for verification:"
-msgstr "Por favor, introduzca su contraseña para su verificación:"
-
-#: ../../Zotlabs/Module/Regate.php:84
-msgid "Email resent"
-msgstr "Correo electrónico reenviado"
-
-#: ../../Zotlabs/Module/Regate.php:84
-msgid "Email resend failed"
-msgstr "Fallo en el reenvío del correo electrónico"
-
-#: ../../Zotlabs/Module/Regate.php:109
-msgid "Verification successful"
-msgstr "¡Verificación exitosa!"
-
-#: ../../Zotlabs/Module/Regate.php:153
-msgid "Account successfull created"
-msgstr "Cuenta creada con éxito"
-
-#: ../../Zotlabs/Module/Regate.php:211
-msgid "Channel successfull created"
-msgstr "Canal creado con éxito"
-
-#: ../../Zotlabs/Module/Regate.php:217
-msgid "Automatic channel creation failed. Please create a channel."
-msgstr "La creación automática de canales ha fallado. Por favor, cree un canal."
-
-#: ../../Zotlabs/Module/Regate.php:229
-msgid "Account creation error"
-msgstr "Error en la creación de la cuenta"
-
-#: ../../Zotlabs/Module/Regate.php:241
-msgid "Verify failed"
-msgstr "Verificación fallida"
-
-#: ../../Zotlabs/Module/Regate.php:246
-msgid "Token verification failed"
-msgstr "Ha fallado el token de verificación."
-
-#: ../../Zotlabs/Module/Regate.php:251
-msgid "Request not inside time frame"
-msgstr "Solicitud fuera de plazo"
-
-#: ../../Zotlabs/Module/Regate.php:257 ../../Zotlabs/Module/Regate.php:287
-msgid "Identity unknown"
-msgstr "Identidad desconocida"
-
-#: ../../Zotlabs/Module/Regate.php:263
-msgid "dId2 mistaken"
-msgstr "did2 equivocado/a"
-
-#: ../../Zotlabs/Module/Regate.php:291
-msgid "Your Registration ID"
-msgstr "Su ID de registro"
-
-#: ../../Zotlabs/Module/Regate.php:304 ../../Zotlabs/Module/Regate.php:396
-#: ../../Zotlabs/Module/Regate.php:428
-msgid "Registration verification"
-msgstr "Verificación del registro"
-
-#: ../../Zotlabs/Module/Regate.php:311 ../../Zotlabs/Module/Regate.php:433
-msgid "Hold on, you can start verification in"
-msgstr "Espere, puede empezar la verificación en "
-
-#: ../../Zotlabs/Module/Regate.php:312
-msgid "Please remember your verification token for ID"
-msgstr "Por favor, recuerde su token de verificación para la identificación"
-
-#: ../../Zotlabs/Module/Regate.php:314
-msgid "Token validity"
-msgstr "Validez del token"
-
-#: ../../Zotlabs/Module/Regate.php:350
-msgid "Resend email"
-msgstr "Reenvío de correo electrónico"
-
-#: ../../Zotlabs/Module/Regate.php:355
-msgid "Registration status"
-msgstr "Estado del registro"
-
-#: ../../Zotlabs/Module/Regate.php:358
-msgid "Verification successful!"
-msgstr "¡Verificación exitosa!"
-
-#: ../../Zotlabs/Module/Regate.php:359
-msgid "Your login ID is"
-msgstr "Su ID de acceso es"
-
-#: ../../Zotlabs/Module/Regate.php:360
-msgid ""
-"After your account has been approved by our administrator you will be able "
-"to login with your login ID and your provided password."
-msgstr "Una vez que su cuenta haya sido aprobada por nuestro administrador, podrá iniciar sesión con su ID de acceso y la contraseña proporcionada."
-
-#: ../../Zotlabs/Module/Regate.php:372
-msgid "Registration request revoked"
-msgstr "Solicitud de registro anulada"
-
-#: ../../Zotlabs/Module/Regate.php:373
-msgid "Sorry for any inconvience. Thank you for your response."
-msgstr "Disculpe las molestias. Gracias por su respuesta."
-
-#: ../../Zotlabs/Module/Regate.php:397
-msgid "Please enter your verification token for ID"
-msgstr "Por favor, introduzca su token de verificación para la identificación"
-
-#: ../../Zotlabs/Module/Regate.php:398 ../../Zotlabs/Module/Regate.php:425
-msgid "Please check your email!"
-msgstr "¡Por favor, compruebe su correo electrónico!"
-
-#: ../../Zotlabs/Module/Regate.php:408
-msgid "Verification token"
-msgstr "Token de verificación "
-
-#: ../../Zotlabs/Module/Regate.php:419
-msgid "ID expired"
-msgstr "ID caducada"
-
-#: ../../Zotlabs/Module/Regate.php:434
-msgid "You will require the verification token for ID"
-msgstr "Necesitará el token de verificación para identificarse"
-
-#: ../../Zotlabs/Module/Regate.php:443
-msgid "Unknown or expired ID"
-msgstr "ID desconocida o caducada"
-
-#: ../../Zotlabs/Module/Regate.php:454
-msgid "dId2 malformed"
-msgstr "did2 malformado/a"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:19
+msgid "Update has been marked successful"
+msgstr "La actualización ha sido marcada como exitosa"
-#: ../../Zotlabs/Module/Manage.php:130
-#: ../../Zotlabs/Module/New_channel.php:147
+#: ../../Zotlabs/Module/Admin/Dbsync.php:32
#, php-format
-msgid "You have created %1$.0f of %2$.0f allowed channels."
-msgstr "Ha creado %1$.0f de %2$.0f canales permitidos."
-
-#: ../../Zotlabs/Module/Manage.php:137
-msgid "Create a new channel"
-msgstr "Crear un nuevo canal"
-
-#: ../../Zotlabs/Module/Manage.php:163
-msgid "Current Channel"
-msgstr "Canal actual"
-
-#: ../../Zotlabs/Module/Manage.php:165
-msgid "Switch to one of your channels by selecting it."
-msgstr "Cambiar a uno de sus canales seleccionándolo."
-
-#: ../../Zotlabs/Module/Manage.php:166
-msgid "Default Channel"
-msgstr "Canal principal"
-
-#: ../../Zotlabs/Module/Manage.php:167
-msgid "Make Default"
-msgstr "Convertir en predeterminado"
+msgid "Verification of update %s failed. Check system logs."
+msgstr "Error en la verificación de la actualización %s. Compruebe los registros del sistema."
-#: ../../Zotlabs/Module/Manage.php:170
+#: ../../Zotlabs/Module/Admin/Dbsync.php:35
+#: ../../Zotlabs/Module/Admin/Dbsync.php:62
#, php-format
-msgid "%d new introductions"
-msgstr "%d nuevas solicitudes de conexión"
-
-#: ../../Zotlabs/Module/Manage.php:172
-msgid "Delegated Channel"
-msgstr "Canal delegado"
-
-#: ../../Zotlabs/Module/Pdledit_gui.php:118
-msgid "Layout not found"
-msgstr "Diseño no encontrado"
-
-#: ../../Zotlabs/Module/Pdledit_gui.php:126
-msgid "This template does not support pdledi_gui (no content regions defined)"
-msgstr "Esta plantilla no es compatible con pdledi_gui (no hay regiones de contenido definidas)"
-
-#: ../../Zotlabs/Module/Pdledit_gui.php:361
-msgid "Main page content"
-msgstr "Contenido de la página principal"
-
-#: ../../Zotlabs/Module/Pdledit_gui.php:362
-msgid "The main page content can not be edited!"
-msgstr "El contenido de la página principal no se puede editar."
-
-#: ../../Zotlabs/Module/Chanview.php:132
-msgid "toggle full screen mode"
-msgstr "cambiar al modo de pantalla completa"
-
-#: ../../Zotlabs/Module/Chatsvc.php:131
-msgid "Away"
-msgstr "Ausente"
-
-#: ../../Zotlabs/Module/Chatsvc.php:136
-msgid "Online"
-msgstr "Conectado/a"
-
-#: ../../Zotlabs/Module/Permcats.php:59
-msgid "Contact role deleted."
-msgstr "Rol de contacto eliminado."
-
-#: ../../Zotlabs/Module/Permcats.php:86
-msgid "Permission category name is required."
-msgstr "El nombre de la categoría de permiso es obligatorio."
-
-#: ../../Zotlabs/Module/Permcats.php:102 ../../Zotlabs/Module/Permcats.php:154
-msgid "Contact role saved."
-msgstr "Rol de contacto guardado."
-
-#: ../../Zotlabs/Module/Permcats.php:204
-msgid "Role to assign affected contacts and default role to"
-msgstr "Rol a asignar a los contactos afectados y rol por defecto"
-
-#: ../../Zotlabs/Module/Permcats.php:204
-msgid "Role to assign affected contacts to"
-msgstr "Rol al que asignar los contactos afectados"
-
-#: ../../Zotlabs/Module/Permcats.php:234
-msgid "Assign this role to"
-msgstr "Asigne este rol a "
-
-#: ../../Zotlabs/Module/Permcats.php:236
-msgid "All my contacts"
-msgstr "Todos mis contactos"
-
-#: ../../Zotlabs/Module/Permcats.php:247
-msgid "Automatically assign this role to new contacts"
-msgstr "Asignar automáticamente este rol a los nuevos contactos"
-
-#: ../../Zotlabs/Module/Permcats.php:248 ../../Zotlabs/Lib/Apps.php:378
-msgid "Contact Roles"
-msgstr "Roles de contacto"
-
-#: ../../Zotlabs/Module/Permcats.php:249
-msgid "Role name"
-msgstr "Nombre del rol "
-
-#: ../../Zotlabs/Module/Permcats.php:249
-msgid "System role - not editable"
-msgstr "Rol de sistema - no editable"
-
-#: ../../Zotlabs/Module/Permcats.php:250
-msgid "Deleting"
-msgstr "Eliminación"
-
-#: ../../Zotlabs/Module/Permcats.php:253 ../../Zotlabs/Module/Defperms.php:262
-#: ../../Zotlabs/Module/Connedit.php:713
-msgid "inherited"
-msgstr "heredado"
-
-#: ../../Zotlabs/Module/Permcats.php:255
-msgid "Role Permissions"
-msgstr "Permisos de rol"
-
-#: ../../Zotlabs/Module/Permcats.php:256
-msgid ""
-"Some permissions may be inherited from your <a href=\"settings\">channel "
-"role</a>, which have higher priority than contact role settings."
-msgstr "Algunos permisos pueden ser heredados de su <a href=\"settings\">rol de canal</a>, que tienen mayor prioridad que la configuración del rol de contacto."
-
-#: ../../Zotlabs/Module/Email_resend.php:12
-#: ../../Zotlabs/Module/Email_validation.php:24
-msgid "Token verification failed."
-msgstr "Ha fallado el token de verificación."
-
-#: ../../Zotlabs/Module/Email_resend.php:30
-msgid "Email verification resent"
-msgstr "Reenvío del email de verificación"
-
-#: ../../Zotlabs/Module/Email_resend.php:33
-msgid "Unable to resend email verification message."
-msgstr "No se puede reenviar el mensaje de verificación por correo electrónico."
+msgid "Update %s was successfully applied."
+msgstr "La actualización de %s se ha realizado exitosamente."
-#: ../../Zotlabs/Module/Cal.php:62
-msgid "Permissions denied."
-msgstr "Permisos denegados."
+#: ../../Zotlabs/Module/Admin/Dbsync.php:39
+#, php-format
+msgid "Verifying update %s did not return a status. Unknown if it succeeded."
+msgstr "La verificación de la actualización %s no devuelve un estado. Desconocido si tuvo éxito."
-#: ../../Zotlabs/Module/Viewsrc.php:43
-msgid "item"
-msgstr "elemento"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:42
+#, php-format
+msgid "Update %s does not contain a verification function."
+msgstr "La actualización %s no contiene una función de verificación."
-#: ../../Zotlabs/Module/Apporder.php:47
-msgid "Change Order of Pinned Navbar Apps"
-msgstr "Cambiar el orden de las aplicaciones fijas en la barra de navegación"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:46
+#: ../../Zotlabs/Module/Admin/Dbsync.php:69
+#, php-format
+msgid "Update function %s could not be found."
+msgstr "No se encuentra la función de actualización de %s."
-#: ../../Zotlabs/Module/Apporder.php:47
-msgid "Change Order of App Tray Apps"
-msgstr "Cambiar el orden de las aplicaciones de la bandeja de aplicaciones"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:59
+#, php-format
+msgid "Executing update procedure %s failed. Check system logs."
+msgstr "Error al ejecutar el procedimiento de actualización %s. Compruebe los registros del sistema."
-#: ../../Zotlabs/Module/Apporder.php:48
+#: ../../Zotlabs/Module/Admin/Dbsync.php:66
+#, php-format
msgid ""
-"Use arrows to move the corresponding app left (top) or right (bottom) in the"
-" navbar"
-msgstr "Use las flechas para mover la aplicación correspondiente a la izquierda (arriba) o derecha (abajo) en la barra de navegación."
+"Update %s did not return a status. It cannot be determined if it was "
+"successful."
+msgstr "La actualización %s no devuelve un estado. No se puede determinar si tuvo éxito."
-#: ../../Zotlabs/Module/Apporder.php:48
-msgid "Use arrows to move the corresponding app up or down in the app tray"
-msgstr "Use las flechas para mover la aplicación correspondiente hacia arriba o hacia abajo en la bandeja de aplicaciones."
+#: ../../Zotlabs/Module/Admin/Dbsync.php:87
+msgid "Failed Updates"
+msgstr "Han fallado las actualizaciones"
-#: ../../Zotlabs/Module/Oexchange.php:27
-msgid "Unable to find your hub."
-msgstr "No se puede encontrar su servidor."
+#: ../../Zotlabs/Module/Admin/Dbsync.php:89
+msgid "Mark success (if update was manually applied)"
+msgstr "Marcar como exitosa (si la actualización se ha hecho manualmente)"
-#: ../../Zotlabs/Module/Oexchange.php:41
-msgid "Post successful."
-msgstr "Enviado con éxito."
+#: ../../Zotlabs/Module/Admin/Dbsync.php:90
+msgid "Attempt to verify this update if a verification procedure exists"
+msgstr "Intentar verificar esta actualización si existe un procedimiento de verificación."
-#: ../../Zotlabs/Module/Moderate.php:67
-msgid "Comment approved"
-msgstr "El comentario ha sido aprobado"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:91
+msgid "Attempt to execute this update step automatically"
+msgstr "Intentar ejecutar este paso de actualización automáticamente"
-#: ../../Zotlabs/Module/Moderate.php:71
-msgid "Comment deleted"
-msgstr "Se ha eliminado el comentario"
+#: ../../Zotlabs/Module/Admin/Dbsync.php:96
+msgid "No failed updates."
+msgstr "No ha fallado ninguna actualización."
-#: ../../Zotlabs/Module/Removeaccount.php:35
+#: ../../Zotlabs/Module/Admin/Security.php:89
msgid ""
-"Account removals are not allowed within 48 hours of changing the account "
-"password."
-msgstr "La eliminación de cuentas no está permitida hasta después de que hayan transcurrido 48 horas desde el último cambio de contraseña."
-
-#: ../../Zotlabs/Module/Removeaccount.php:57
-msgid "Remove This Account"
-msgstr "Eliminar esta cuenta"
+"By default, unfiltered HTML is allowed in embedded media. This is inherently"
+" insecure."
+msgstr "De forma predeterminada, el HTML sin filtrar está permitido en el contenido multimedia incorporado en una publicación. Esto es siempre inseguro."
-#: ../../Zotlabs/Module/Removeaccount.php:58
+#: ../../Zotlabs/Module/Admin/Security.php:92
msgid ""
-"This account and all its channels will be completely removed from the "
-"network. "
-msgstr "Esta cuenta y todos sus canales van a ser eliminados de la red."
-
-#: ../../Zotlabs/Module/Removeaccount.php:58
-msgid "This action is permanent and can not be undone!"
-msgstr "¡Esta acción tiene carácter definitivo y no se puede deshacer!"
-
-#: ../../Zotlabs/Module/Removeaccount.php:61
-#: ../../Zotlabs/Module/Settings/Account.php:109
-msgid "Remove Account"
-msgstr "Eliminar cuenta"
-
-#: ../../Zotlabs/Module/Lang.php:20
-msgid "Language App"
-msgstr "App idioma"
-
-#: ../../Zotlabs/Module/Uexport.php:108
-msgid "No content available for year"
-msgstr "No hay contenido disponible para el año"
-
-#: ../../Zotlabs/Module/Uexport.php:171
-msgid "Export Channel"
-msgstr "Exportar el canal"
-
-#: ../../Zotlabs/Module/Uexport.php:173
-msgid "Export channel"
-msgstr "Exportar canal"
+"The recommended setting is to only allow unfiltered HTML from the following "
+"sites:"
+msgstr "La configuración recomendada es que sólo se permita HTML sin filtrar desde los siguientes sitios: "
-#: ../../Zotlabs/Module/Uexport.php:174
+#: ../../Zotlabs/Module/Admin/Security.php:93
msgid ""
-"This will export your identity and social graph into a file which can be "
-"used to import your channel to a new hub."
-msgstr "Esto exportará su identidad y su gráfico social a un archivo que puede utilizarse para importar su canal a un nuevo hub."
-
-#: ../../Zotlabs/Module/Uexport.php:177
-msgid "Export content"
-msgstr "Exportar contenidos"
+"https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br"
+" />https://vimeo.com/<br />https://soundcloud.com/<br />"
+msgstr "https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />"
-#: ../../Zotlabs/Module/Uexport.php:178
+#: ../../Zotlabs/Module/Admin/Security.php:94
msgid ""
-"This will export your posts, direct messages, articles and cards per month "
-"stored into a zip file per year. Months with no posts will be dismissed."
-msgstr "Esto exportará sus posts, mensajes directos, artículos y fichas por mes almacenados en un archivo zip por año. Los meses sin publicaciones serán descartados."
-
-#: ../../Zotlabs/Module/Uexport.php:180
-msgid "Export wikis"
-msgstr "Exportar wikis"
-
-#: ../../Zotlabs/Module/Uexport.php:181
-msgid "This will export your wikis and wiki pages."
-msgstr "Esto exportará sus wikis y páginas wiki."
-
-#: ../../Zotlabs/Module/Uexport.php:183
-msgid "Export webpages"
-msgstr "Exportar páginas web"
+"All other embedded content will be filtered, <strong>unless</strong> "
+"embedded content from that site is explicitly blocked."
+msgstr "El resto del contenido incrustado se filtrará, <strong>excepto</ strong> si el contenido incorporado desde ese sitio está bloqueado de forma explícita."
-#: ../../Zotlabs/Module/Uexport.php:184
-msgid "This will export your webpages and menus."
-msgstr "Esto exportará sus páginas web y menús."
+#: ../../Zotlabs/Module/Admin/Security.php:99
+#: ../../Zotlabs/Widget/Admin.php:30
+msgid "Security"
+msgstr "Seguridad"
-#: ../../Zotlabs/Module/Uexport.php:186
-msgid "Export channel calendar"
-msgstr "Exportar el calendario del canal"
+#: ../../Zotlabs/Module/Admin/Security.php:101
+msgid "Block public"
+msgstr "Bloquear páginas públicas"
-#: ../../Zotlabs/Module/Uexport.php:187
+#: ../../Zotlabs/Module/Admin/Security.php:101
msgid ""
-"This will export your channel calendar events and associated items. CalDAV "
-"calendars are not included."
-msgstr "Esto exportará los eventos del calendario de su canal y los elementos asociados. Los calendarios CalDAV no están incluidos."
-
-#: ../../Zotlabs/Module/Uexport.php:189
-msgid "Export chatrooms"
-msgstr "Exportar salas de chat"
+"Check to block public access to all otherwise public personal pages on this "
+"site unless you are currently authenticated."
+msgstr "Habilitar para impedir ver las páginas personales de este sitio a quien no esté actualmente autenticado."
-#: ../../Zotlabs/Module/Uexport.php:190
-msgid "This will export your chatrooms. Chat history is dismissed."
-msgstr "Esto exportará sus chats. Se descarta el historial de chats."
+#: ../../Zotlabs/Module/Admin/Security.php:102
+msgid "Provide a cloud root directory"
+msgstr "Proporcionar un directorio raíz de la nube"
-#: ../../Zotlabs/Module/Uexport.php:192
-#, php-format
+#: ../../Zotlabs/Module/Admin/Security.php:102
msgid ""
-"This export can be imported or restored by visiting <a "
-"href=\"%1$s\">%2$s</a> on any site containing your channel."
-msgstr "Esta exportación puede ser importada o restaurada visitando <a href=\"%1$s\">%2$s</a> cualquier sitio que contenga su canal."
-
-#: ../../Zotlabs/Module/Display.php:336
-msgid "Article"
-msgstr "Artículo"
-
-#: ../../Zotlabs/Module/Display.php:381
-msgid "Item has been removed."
-msgstr "Se ha eliminado el elemento."
-
-#: ../../Zotlabs/Module/Common.php:14
-msgid "No channel."
-msgstr "Ningún canal."
-
-#: ../../Zotlabs/Module/Common.php:45
-msgid "No connections in common."
-msgstr "Ninguna conexión en común."
-
-#: ../../Zotlabs/Module/Common.php:65
-msgid "View Common Connections"
-msgstr "Ver las conexiones comunes"
+"The cloud root directory lists all channel names which provide public files"
+msgstr "El directorio raíz de la nube lista todos los nombres de canales que proporcionan archivos públicos"
-#: ../../Zotlabs/Module/Impel.php:188
-#, php-format
-msgid "%s element installed"
-msgstr "%s elemento instalado"
+#: ../../Zotlabs/Module/Admin/Security.php:103
+msgid "Show total disk space available to cloud uploads"
+msgstr "Mostrar el espacio total disponible en el disco para las cargas en la nube"
-#: ../../Zotlabs/Module/Impel.php:191
-#, php-format
-msgid "%s element installation failed"
-msgstr "Elemento con instalación fallida: %s"
+#: ../../Zotlabs/Module/Admin/Security.php:104
+msgid "Set \"Transport Security\" HTTP header"
+msgstr "Habilitar \"Seguridad de transporte\" (\"Transport Security\") en la cabecera HTTP"
-#: ../../Zotlabs/Module/New_channel.php:159
-msgid "Your real name is recommended."
-msgstr "Se recomienda su nombre real."
+#: ../../Zotlabs/Module/Admin/Security.php:105
+msgid "Set \"Content Security Policy\" HTTP header"
+msgstr "Habilitar la \"Política de seguridad del contenido\" (\"Content Security Policy\") en la cabecera HTTP"
-#: ../../Zotlabs/Module/New_channel.php:160
-msgid "Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""
-msgstr "Ejemplos: \"Juan García\", \"Luisa y sus caballos\", \"Fútbol\", \"Grupo de aviación\""
+#: ../../Zotlabs/Module/Admin/Security.php:106
+msgid "Allowed email domains"
+msgstr "Se aceptan dominios de correo electrónico"
-#: ../../Zotlabs/Module/New_channel.php:165
+#: ../../Zotlabs/Module/Admin/Security.php:106
msgid ""
-"This will be used to create a unique network address (like an email "
-"address)."
-msgstr "Esto se utilizará para crear una dirección de red única (como una dirección de correo electrónico)."
-
-#: ../../Zotlabs/Module/New_channel.php:167
-msgid "Allowed characters are a-z 0-9, - and _"
-msgstr "Los caracteres permitidos son a-z 0-9, - and _"
-
-#: ../../Zotlabs/Module/New_channel.php:175
-msgid "Channel name"
-msgstr "Nombre del canal"
-
-#: ../../Zotlabs/Module/New_channel.php:178
-#: ../../Zotlabs/Module/Settings/Channel.php:232
-msgid "Channel role"
-msgstr "Rol del canal"
-
-#: ../../Zotlabs/Module/New_channel.php:181
-msgid "Create a Channel"
-msgstr "Crear un canal"
+"Comma separated list of domains which are allowed in email addresses for "
+"registrations to this site. Wildcards are accepted. Empty to allow any "
+"domains"
+msgstr "Lista separada por comas de los dominios de los que se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio. "
-#: ../../Zotlabs/Module/New_channel.php:182
-msgid ""
-"A channel is a unique network identity. It can represent a person (social "
-"network profile), a forum (group), a business or celebrity page, a newsfeed,"
-" and many other things."
-msgstr "Un canal es una identidad única en la red. Puede representar a una persona (un perfil de una red social), un foro o grupo, un negocio o una página de una celebridad, un \"feed\" de noticias, y muchas otras cosas."
+#: ../../Zotlabs/Module/Admin/Security.php:107
+msgid "Not allowed email domains"
+msgstr "No se permiten dominios de correo electrónico"
-#: ../../Zotlabs/Module/New_channel.php:183
+#: ../../Zotlabs/Module/Admin/Security.php:107
msgid ""
-"or <a href=\"import\">import an existing channel</a> from another location."
-msgstr "O <a href=\"import\">importar un canal </a> desde otro lugar."
-
-#: ../../Zotlabs/Module/New_channel.php:188
-msgid "Validate"
-msgstr "Validar"
-
-#: ../../Zotlabs/Module/Dircensor.php:42
-msgid "Entry censored"
-msgstr "Entrada censurada"
-
-#: ../../Zotlabs/Module/Dircensor.php:45
-msgid "Entry uncensored"
-msgstr "Entrada sin censurar"
-
-#: ../../Zotlabs/Module/Service_limits.php:23
-msgid "No service class restrictions found."
-msgstr "No se han encontrado restricciones sobre esta clase de servicio."
-
-#: ../../Zotlabs/Module/Mood.php:152 ../../Zotlabs/Lib/Apps.php:354
-msgid "Mood"
-msgstr "Estado de ánimo"
-
-#: ../../Zotlabs/Module/Mood.php:153
-msgid "Set your current mood and tell your friends"
-msgstr "Describir su estado de ánimo para comunicárselo a sus amigos"
-
-#: ../../Zotlabs/Module/Siteinfo.php:21
-msgid "About this site"
-msgstr "Acerca de este sitio"
-
-#: ../../Zotlabs/Module/Siteinfo.php:22
-msgid "Site Name"
-msgstr "Nombre del sitio"
-
-#: ../../Zotlabs/Module/Siteinfo.php:26
-msgid "Administrator"
-msgstr "Administrador"
-
-#: ../../Zotlabs/Module/Siteinfo.php:29
-msgid "Software and Project information"
-msgstr "Información sobre el software y el proyecto"
+"Comma separated list of domains which are not allowed in email addresses for"
+" registrations to this site. Wildcards are accepted. Empty to allow any "
+"domains, unless allowed domains have been defined."
+msgstr "Lista separada por comas de los dominios de los que no se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para no aceptar cualquier dominio, excepto los que se hayan autorizado."
-#: ../../Zotlabs/Module/Siteinfo.php:30
-msgid "This site is powered by $Projectname"
-msgstr "Este sitio funciona con $Projectname"
+#: ../../Zotlabs/Module/Admin/Security.php:108
+msgid "Allow communications only from these sites"
+msgstr "Permitir la comunicación solo desde estos sitios"
-#: ../../Zotlabs/Module/Siteinfo.php:31
+#: ../../Zotlabs/Module/Admin/Security.php:108
msgid ""
-"Federated and decentralised networking and identity services provided by Zot"
-msgstr "Servicios federados y descentralizados de identidad y redes proporcionados por Zot"
-
-#: ../../Zotlabs/Module/Siteinfo.php:34
-msgid "Additional federated transport protocols:"
-msgstr "Protocolos adicionales de transporte federado: "
-
-#: ../../Zotlabs/Module/Siteinfo.php:36
-#, php-format
-msgid "Version %s"
-msgstr "Versión %s"
-
-#: ../../Zotlabs/Module/Siteinfo.php:37
-msgid "Project homepage"
-msgstr "Página principal del proyecto"
-
-#: ../../Zotlabs/Module/Siteinfo.php:38
-msgid "Developer homepage"
-msgstr "Página principal del desarrollador"
-
-#: ../../Zotlabs/Module/Appman.php:39 ../../Zotlabs/Module/Appman.php:56
-msgid "App installed."
-msgstr "Aplicación instalada."
-
-#: ../../Zotlabs/Module/Appman.php:49
-msgid "Malformed app."
-msgstr "Aplicación con errores"
-
-#: ../../Zotlabs/Module/Appman.php:198
-msgid "Embed code"
-msgstr "Código incorporado"
-
-#: ../../Zotlabs/Module/Appman.php:204
-msgid "Edit App"
-msgstr "Modificar la aplicación"
-
-#: ../../Zotlabs/Module/Appman.php:204
-msgid "Create App"
-msgstr "Crear una aplicación"
-
-#: ../../Zotlabs/Module/Appman.php:209
-msgid "Name of app"
-msgstr "Nombre de la aplicación"
-
-#: ../../Zotlabs/Module/Appman.php:210
-msgid "Location (URL) of app"
-msgstr "Dirección (URL) de la aplicación"
-
-#: ../../Zotlabs/Module/Appman.php:212
-msgid "Photo icon URL"
-msgstr "Dirección del icono"
-
-#: ../../Zotlabs/Module/Appman.php:212
-msgid "80 x 80 pixels - optional"
-msgstr "80 x 80 pixels - opcional"
-
-#: ../../Zotlabs/Module/Appman.php:213
-msgid "Categories (optional, comma separated list)"
-msgstr "Temas (opcional, lista separada por comas)"
-
-#: ../../Zotlabs/Module/Appman.php:214
-msgid "Version ID"
-msgstr "Versión"
-
-#: ../../Zotlabs/Module/Appman.php:215
-msgid "Price of app"
-msgstr "Precio de la aplicación"
-
-#: ../../Zotlabs/Module/Appman.php:216
-msgid "Location (URL) to purchase app"
-msgstr "Dirección (URL) donde adquirir la aplicación"
-
-#: ../../Zotlabs/Module/Admin.php:96
-msgid "Blocked accounts"
-msgstr "Cuentas bloqueadas"
-
-#: ../../Zotlabs/Module/Admin.php:97
-msgid "Expired accounts"
-msgstr "Cuentas caducadas"
+"One site per line. Leave empty to allow communication from anywhere by "
+"default"
+msgstr "Un sitio por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera"
-#: ../../Zotlabs/Module/Admin.php:98
-msgid "Expiring accounts"
-msgstr "Cuentas que caducan"
+#: ../../Zotlabs/Module/Admin/Security.php:109
+msgid "Block communications from these sites"
+msgstr "Bloquear la comunicación desde estos sitios"
-#: ../../Zotlabs/Module/Admin.php:122
-msgid "Message queues"
-msgstr "Mensajes en cola"
+#: ../../Zotlabs/Module/Admin/Security.php:110
+msgid "Allow communications only from these channels"
+msgstr "Permitir la comunicación solo desde estos canales"
-#: ../../Zotlabs/Module/Admin.php:136
-msgid "Your software should be updated"
-msgstr "Debe actualizar su software"
+#: ../../Zotlabs/Module/Admin/Security.php:110
+msgid ""
+"One channel (hash) per line. Leave empty to allow from any channel by "
+"default"
+msgstr "Un canal (hash) por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera"
-#: ../../Zotlabs/Module/Admin.php:141
-msgid "Summary"
-msgstr "Sumario"
+#: ../../Zotlabs/Module/Admin/Security.php:111
+msgid "Block communications from these channels"
+msgstr "Bloquear la comunicación desde estos canales"
-#: ../../Zotlabs/Module/Admin.php:144
-msgid "Registered accounts"
-msgstr "Cuentas registradas"
+#: ../../Zotlabs/Module/Admin/Security.php:112
+msgid "Only allow embeds from secure (SSL) websites and links."
+msgstr "Sólo se permite contenido multimedia incorporado desde sitios y enlaces seguros (SSL)."
-#: ../../Zotlabs/Module/Admin.php:145
-msgid "Pending registrations"
-msgstr "Registros pendientes"
+#: ../../Zotlabs/Module/Admin/Security.php:113
+msgid "Allow unfiltered embedded HTML content only from these domains"
+msgstr "Permitir contenido HTML sin filtrar sólo desde estos dominios "
-#: ../../Zotlabs/Module/Admin.php:146
-msgid "Registered channels"
-msgstr "Canales registrados"
+#: ../../Zotlabs/Module/Admin/Security.php:113
+msgid "One site per line. By default embedded content is filtered."
+msgstr "Un sitio por línea. El contenido incorporado se filtra de forma predeterminada."
-#: ../../Zotlabs/Module/Admin.php:147
-msgid "Active addons"
-msgstr "Addons acivos"
+#: ../../Zotlabs/Module/Admin/Security.php:114
+msgid "Block embedded HTML from these domains"
+msgstr "Bloquear contenido con HTML incorporado desde estos dominios"
-#: ../../Zotlabs/Module/Admin.php:148
-msgid "Version"
-msgstr "Versión"
+#: ../../Zotlabs/Module/Admin/Security.php:115
+msgid "Allow SVG thumbnails in file browser"
+msgstr "Permitir miniaturas SVG en el navegador de archivos"
-#: ../../Zotlabs/Module/Admin.php:149
-msgid "Repository version (master)"
-msgstr "Versión del repositorio (master)"
+#: ../../Zotlabs/Module/Admin/Security.php:115
+msgid "WARNING: SVG images may contain malicious code."
+msgstr "ADVERTENCIA: Las imágenes SVG pueden contener código malicioso."
-#: ../../Zotlabs/Module/Admin.php:150
-msgid "Repository version (dev)"
-msgstr "Versión del repositorio (dev)"
+#: ../../Zotlabs/Module/Admin/Security.php:116
+msgid "Allow embedded (inline) PDF files"
+msgstr "Permitir ficheros PDF incrustados (en línea)"
#: ../../Zotlabs/Module/Contactedit.php:50
msgid "Invalid abook_id"
msgstr "Abook_id no válido"
-#: ../../Zotlabs/Module/Contactedit.php:78
-#: ../../Zotlabs/Module/Defperms.php:67 ../../Zotlabs/Module/Connedit.php:80
-msgid "Could not access contact record."
-msgstr "No se ha podido acceder al registro de contacto."
-
-#: ../../Zotlabs/Module/Contactedit.php:107
-#: ../../Zotlabs/Module/Connedit.php:101
-msgid "Could not locate selected profile."
-msgstr "No se ha podido localizar el perfil seleccionado."
-
-#: ../../Zotlabs/Module/Contactedit.php:192
-#: ../../Zotlabs/Module/Connedit.php:215
-msgid "is now connected to"
-msgstr "ahora está conectado/a"
-
-#: ../../Zotlabs/Module/Contactedit.php:252
-#: ../../Zotlabs/Module/Contactedit.php:401
-#: ../../Zotlabs/Module/Connedit.php:701
-msgid "Contact Tools"
-msgstr "Gestión de contactos"
-
-#: ../../Zotlabs/Module/Contactedit.php:329
-#: ../../Zotlabs/Module/Connedit.php:622
-msgid "Approve this contact"
-msgstr "Aprobar este contacto"
-
-#: ../../Zotlabs/Module/Contactedit.php:329
-#: ../../Zotlabs/Module/Connedit.php:622
-msgid "Accept contact to allow communication"
-msgstr "Aceptar el contacto para permitir la comunicación"
-
-#: ../../Zotlabs/Module/Contactedit.php:362
-#: ../../Zotlabs/Module/Connedit.php:658
-msgid "Please select a role for this contact!"
-msgstr "¡Por favor, seleccione un rol para este contacto!"
-
-#: ../../Zotlabs/Module/Contactedit.php:382
-#: ../../Zotlabs/Module/Connedit.php:678
-msgid "This contact is unreachable from this location."
-msgstr "Este contacto es inaccesible desde esta ubicación."
-
-#: ../../Zotlabs/Module/Contactedit.php:383
-#: ../../Zotlabs/Module/Connedit.php:679
-msgid "This contact may be unreachable from other channel locations."
-msgstr "Este contacto puede ser inaccesible desde otras ubicaciones del canal."
-
-#: ../../Zotlabs/Module/Contactedit.php:385
-#: ../../Zotlabs/Module/Connedit.php:681
-msgid "Location independence is not supported by their network."
-msgstr "La independencia de ubicación no es compatible con su red."
-
#: ../../Zotlabs/Module/Contactedit.php:395
msgid "View profile"
msgstr "Ver el perfil"
-#: ../../Zotlabs/Module/Contactedit.php:397
-#: ../../Zotlabs/Module/Connections.php:405
-msgid "This is a group/forum channel"
-msgstr "Este es un canal de grupo/foro"
-
#: ../../Zotlabs/Module/Contactedit.php:408
msgid "Select a role for this contact"
msgstr "Selecciones un rol para este contacto"
-#: ../../Zotlabs/Module/Contactedit.php:420
-#: ../../Zotlabs/Module/Connedit.php:703
-msgid "Slide to adjust your degree of friendship"
-msgstr "Deslizar para ajustar el grado de amistad"
-
-#: ../../Zotlabs/Module/Contactedit.php:422
-#: ../../Zotlabs/Module/Connedit.php:705
-msgid "Custom Filter"
-msgstr "Filtro personalizado"
-
-#: ../../Zotlabs/Module/Contactedit.php:423
-#: ../../Zotlabs/Module/Settings/Channel.php:285
-#: ../../Zotlabs/Module/Connedit.php:706
-msgid "Only import posts with this text"
-msgstr "Importar solo entradas que contengan este texto"
-
-#: ../../Zotlabs/Module/Contactedit.php:424
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-#: ../../Zotlabs/Module/Connedit.php:707
-msgid "Do not import posts with this text"
-msgstr "No importar entradas que contengan este texto"
-
-#: ../../Zotlabs/Module/Contactedit.php:429
-#: ../../Zotlabs/Module/Connedit.php:714
-msgid "Approve contact"
-msgstr "Aprobar contacto"
-
-#: ../../Zotlabs/Module/Contactedit.php:431
-#: ../../Zotlabs/Module/Connedit.php:717
-msgid "Their"
-msgstr "Su"
-
-#: ../../Zotlabs/Module/Contactedit.php:432
-#: ../../Zotlabs/Module/Connedit.php:718
-msgid "My"
-msgstr "Mi"
+#: ../../Zotlabs/Module/Contactedit.php:409
+#: ../../Zotlabs/Widget/Permcats.php:92
+msgid "Contact roles"
+msgstr "Roles del contacto"
#: ../../Zotlabs/Module/Contactedit.php:440
msgid "Roles"
@@ -12103,10 +12374,10 @@ msgstr "Comparar permisos"
msgid "Permission"
msgstr "Permiso "
-#: ../../Zotlabs/Module/Contactedit.php:445
-#: ../../Zotlabs/Module/Connedit.php:572
-msgid "Affinity"
-msgstr "Afinidad"
+#: ../../Zotlabs/Module/Contactedit.php:443
+#: ../../Zotlabs/Widget/Privacygroups.php:54
+msgid "Privacy groups"
+msgstr "Grupos de canales"
#: ../../Zotlabs/Module/Contactedit.php:446
msgid "Content filter"
@@ -12120,11 +12391,6 @@ msgstr "Contacto actualizado"
msgid "Contact update failed"
msgstr "Fallo en la actualización del contacto"
-#: ../../Zotlabs/Module/Contactedit.php:462
-#: ../../Zotlabs/Module/Connections.php:348
-msgid "Approve connection"
-msgstr "Aprobar esta conexión"
-
#: ../../Zotlabs/Module/Contactedit.php:508
#: ../../Zotlabs/Module/Contactedit.php:518
msgid "Refresh succeeded"
@@ -12174,782 +12440,681 @@ msgstr "Contacto eliminado"
msgid "Delete failed"
msgstr "Eliminar falló"
-#: ../../Zotlabs/Module/Contactedit.php:628
-#: ../../Zotlabs/Module/Connedit.php:487
-msgid "Refresh Permissions"
-msgstr "Recargar los permisos"
-
-#: ../../Zotlabs/Module/Contactedit.php:629
-#: ../../Zotlabs/Module/Connedit.php:490
-msgid "Fetch updated permissions"
-msgstr "Obtener los permisos actualizados"
-
-#: ../../Zotlabs/Module/Contactedit.php:633
-#: ../../Zotlabs/Module/Connedit.php:494
-msgid "Refresh Photo"
-msgstr "Actualizar la foto"
+#: ../../Zotlabs/Module/Settings/Directory.php:40
+msgid "Directory Settings"
+msgstr "Configuración del directorio"
-#: ../../Zotlabs/Module/Contactedit.php:634
-#: ../../Zotlabs/Module/Connedit.php:497
-msgid "Fetch updated photo"
-msgstr "Obtener una foto actualizada"
+#: ../../Zotlabs/Module/Settings/Features.php:45
+msgid "Additional Features"
+msgstr "Funcionalidades"
-#: ../../Zotlabs/Module/Contactedit.php:641
-#: ../../Zotlabs/Module/Connedit.php:511
-msgid "Block (or Unblock) all communications with this connection"
-msgstr "Bloquear (o desbloquear) todas las comunicaciones con esta conexión"
+#: ../../Zotlabs/Module/Settings/Display.php:125
+#, php-format
+msgid "%s - (Experimental)"
+msgstr "%s - (Experimental)"
-#: ../../Zotlabs/Module/Contactedit.php:642
-#: ../../Zotlabs/Module/Connedit.php:512
-msgid "This connection is blocked!"
-msgstr "¡Esta conexión está bloqueada!"
+#: ../../Zotlabs/Module/Settings/Display.php:181
+msgid "Display Settings"
+msgstr "Ajustes de visualización"
-#: ../../Zotlabs/Module/Contactedit.php:646
-#: ../../Zotlabs/Module/Connedit.php:516
-msgid "Unignore"
-msgstr "Dejar de ignorar"
+#: ../../Zotlabs/Module/Settings/Display.php:182
+msgid "Theme Settings"
+msgstr "Ajustes del tema"
-#: ../../Zotlabs/Module/Contactedit.php:646
-#: ../../Zotlabs/Module/Connections.php:351
-#: ../../Zotlabs/Module/Connedit.php:516
-msgid "Ignore"
-msgstr "Ignorar"
+#: ../../Zotlabs/Module/Settings/Display.php:183
+msgid "Custom Theme Settings"
+msgstr "Ajustes personalizados del tema"
-#: ../../Zotlabs/Module/Contactedit.php:648
-#: ../../Zotlabs/Module/Connedit.php:519
-msgid "Ignore (or Unignore) all inbound communications from this connection"
-msgstr "Ignorar (o dejar de ignorar) todas las comunicaciones entrantes de esta conexión"
+#: ../../Zotlabs/Module/Settings/Display.php:184
+msgid "Content Settings"
+msgstr "Ajustes del contenido"
-#: ../../Zotlabs/Module/Contactedit.php:649
-#: ../../Zotlabs/Module/Connedit.php:520
-msgid "This connection is ignored!"
-msgstr "¡Esta conexión es ignorada!"
+#: ../../Zotlabs/Module/Settings/Display.php:190
+msgid "Display Theme:"
+msgstr "Tema gráfico del perfil:"
-#: ../../Zotlabs/Module/Contactedit.php:653
-#: ../../Zotlabs/Module/Connedit.php:524
-msgid "Unarchive"
-msgstr "Desarchivar"
+#: ../../Zotlabs/Module/Settings/Display.php:191
+msgid "Select scheme"
+msgstr "Elegir un esquema"
-#: ../../Zotlabs/Module/Contactedit.php:653
-#: ../../Zotlabs/Module/Connedit.php:524
-msgid "Archive"
-msgstr "Archivar"
+#: ../../Zotlabs/Module/Settings/Display.php:193
+msgid "Preload images before rendering the page"
+msgstr "Carga previa de las imágenes antes de generar la página"
-#: ../../Zotlabs/Module/Contactedit.php:655
-#: ../../Zotlabs/Module/Connedit.php:527
+#: ../../Zotlabs/Module/Settings/Display.php:193
msgid ""
-"Archive (or Unarchive) this connection - mark channel dead but keep content"
-msgstr "Archiva (o desarchiva) esta conexión - marca el canal como muerto aunque mantiene sus contenidos"
-
-#: ../../Zotlabs/Module/Contactedit.php:656
-#: ../../Zotlabs/Module/Connedit.php:528
-msgid "This connection is archived!"
-msgstr "¡Esta conexión esta archivada!"
-
-#: ../../Zotlabs/Module/Contactedit.php:660
-#: ../../Zotlabs/Module/Connedit.php:532
-msgid "Unhide"
-msgstr "Mostrar"
-
-#: ../../Zotlabs/Module/Contactedit.php:660
-#: ../../Zotlabs/Module/Connedit.php:532
-msgid "Hide"
-msgstr "Ocultar"
-
-#: ../../Zotlabs/Module/Contactedit.php:662
-#: ../../Zotlabs/Module/Connedit.php:535
-msgid "Hide or Unhide this connection from your other connections"
-msgstr "Ocultar o mostrar esta conexión a sus otras conexiones"
-
-#: ../../Zotlabs/Module/Contactedit.php:663
-#: ../../Zotlabs/Module/Connedit.php:536
-msgid "This connection is hidden!"
-msgstr "¡Esta conexión está oculta!"
-
-#: ../../Zotlabs/Module/Contactedit.php:669
-#: ../../Zotlabs/Module/Connedit.php:543
-msgid "Delete this connection"
-msgstr "Eliminar esta conexión"
+"The subjective page load time will be longer but the page will be ready when"
+" displayed"
+msgstr "El tiempo subjetivo de carga de la página será más largo, pero la página estará lista cuando se muestre."
-#: ../../Zotlabs/Module/Directory.php:121
-msgid "No default suggestions were found."
-msgstr "No se encontraron sugerencias por defecto."
+#: ../../Zotlabs/Module/Settings/Display.php:194
+msgid "Enable user zoom on mobile devices"
+msgstr "Habilitar zoom de usuario en dispositivos móviles"
-#: ../../Zotlabs/Module/Directory.php:281
-#, php-format
-msgid "%d rating"
-msgid_plural "%d ratings"
-msgstr[0] "%d valoración"
-msgstr[1] "%d valoraciones"
-msgstr[2] "%d valoraciones"
+#: ../../Zotlabs/Module/Settings/Display.php:195
+msgid "Update browser every xx seconds"
+msgstr "Actualizar navegador cada xx segundos"
-#: ../../Zotlabs/Module/Directory.php:292
-msgid "Gender: "
-msgstr "Género:"
+#: ../../Zotlabs/Module/Settings/Display.php:195
+msgid "Minimum of 10 seconds, no maximum"
+msgstr "Mínimo de 10 segundos, sin máximo"
-#: ../../Zotlabs/Module/Directory.php:294
-msgid "Status: "
-msgstr "Estado:"
+#: ../../Zotlabs/Module/Settings/Display.php:196
+msgid "Maximum number of conversations to load at any time:"
+msgstr "Máximo número de conversaciones a cargar en cualquier momento:"
-#: ../../Zotlabs/Module/Directory.php:296
-msgid "Homepage: "
-msgstr "Página personal:"
+#: ../../Zotlabs/Module/Settings/Display.php:196
+msgid "Maximum of 30 items"
+msgstr "Máximo de 30 elementos"
-#: ../../Zotlabs/Module/Directory.php:359
-msgid "Description:"
-msgstr "Descripción:"
+#: ../../Zotlabs/Module/Settings/Display.php:197
+msgid "Show emoticons (smilies) as images"
+msgstr "Mostrar emoticonos (smilies) como imágenes"
-#: ../../Zotlabs/Module/Directory.php:370
-msgid "Public Forum:"
-msgstr "Foro público:"
+#: ../../Zotlabs/Module/Settings/Display.php:198
+msgid "Link post titles to source"
+msgstr "Enlazar título de la publicación a la fuente original"
-#: ../../Zotlabs/Module/Directory.php:373
-msgid "Keywords: "
-msgstr "Palabras clave:"
+#: ../../Zotlabs/Module/Settings/Display.php:200
+#: ../../Zotlabs/Widget/Newmember.php:80
+msgid "New Member Links"
+msgstr "Enlaces para nuevos miembros"
-#: ../../Zotlabs/Module/Directory.php:376
-msgid "Don't suggest"
-msgstr "No sugerir:"
+#: ../../Zotlabs/Module/Settings/Display.php:200
+msgid "Display new member quick links menu"
+msgstr "Mostrar el menú de enlaces rápidos para nuevos miembros"
-#: ../../Zotlabs/Module/Directory.php:378
-msgid "Common connections (estimated):"
-msgstr "Conexiones comunes (estimadas): "
+#: ../../Zotlabs/Module/Settings/Conversation.php:23
+msgid "Settings saved."
+msgstr "Configuración guardada."
-#: ../../Zotlabs/Module/Directory.php:427
-msgid "Global Directory"
-msgstr "Directorio global:"
+#: ../../Zotlabs/Module/Settings/Conversation.php:25
+msgid "Settings saved. Reload page please."
+msgstr "Ajustes guardados. Recargue la página, por favor."
-#: ../../Zotlabs/Module/Directory.php:427
-msgid "Local Directory"
-msgstr "Directorio local:"
+#: ../../Zotlabs/Module/Settings/Conversation.php:47
+msgid "Conversation Settings"
+msgstr "Ajustes de conversación"
-#: ../../Zotlabs/Module/Directory.php:433
-msgid "Finding:"
-msgstr "Encontrar:"
+#: ../../Zotlabs/Module/Settings/Channel_home.php:46
+#: ../../Zotlabs/Module/Settings/Network.php:42
+msgid "Max height of content (in pixels)"
+msgstr "Altura máxima del contenido (en píxeles)"
-#: ../../Zotlabs/Module/Directory.php:438
-msgid "next page"
-msgstr "siguiente página"
+#: ../../Zotlabs/Module/Settings/Channel_home.php:48
+#: ../../Zotlabs/Module/Settings/Network.php:44
+msgid "Click to expand content exceeding this height"
+msgstr "Haga clic para expandir el contenido que exceda esta altura"
-#: ../../Zotlabs/Module/Directory.php:438
-msgid "previous page"
-msgstr "página anterior"
+#: ../../Zotlabs/Module/Settings/Channel_home.php:61
+msgid "Personal menu to display in your channel pages"
+msgstr "Menú personal que debe mostrarse en las páginas de su canal"
-#: ../../Zotlabs/Module/Directory.php:439
-msgid "Sort options"
-msgstr "Ordenar opciones"
+#: ../../Zotlabs/Module/Settings/Channel_home.php:88
+msgid "Channel Home Settings"
+msgstr "Ajustes del canal"
-#: ../../Zotlabs/Module/Directory.php:440
-msgid "Alphabetic"
-msgstr "Alfabético"
+#: ../../Zotlabs/Module/Settings/Connections.php:40
+msgid "Connections Settings"
+msgstr "Gestión de las conexiones"
-#: ../../Zotlabs/Module/Directory.php:441
-msgid "Reverse Alphabetic"
-msgstr "Alfabético inverso"
+#: ../../Zotlabs/Module/Settings/Account.php:21
+msgid "Not valid email."
+msgstr "Correo electrónico no válido."
-#: ../../Zotlabs/Module/Directory.php:442
-msgid "Newest to Oldest"
-msgstr "De más nuevo a más antiguo"
+#: ../../Zotlabs/Module/Settings/Account.php:24
+msgid "Protected email address. Cannot change to that email."
+msgstr "Dirección de correo electrónico protegida. No se puede cambiar a ella."
-#: ../../Zotlabs/Module/Directory.php:443
-msgid "Oldest to Newest"
-msgstr "De más antiguo a más nuevo"
+#: ../../Zotlabs/Module/Settings/Account.php:33
+msgid "System failure storing new email. Please try again."
+msgstr "Fallo de sistema al guardar el nuevo correo electrónico. Por favor, inténtelo de nuevo."
-#: ../../Zotlabs/Module/Directory.php:460
-msgid "No entries (some entries may be hidden)."
-msgstr "Sin entradas (algunas entradas pueden estar ocultas)."
+#: ../../Zotlabs/Module/Settings/Account.php:51
+msgid "Password verification failed."
+msgstr "La comprobación de la contraseña ha fallado."
-#: ../../Zotlabs/Module/Api.php:74 ../../Zotlabs/Module/Api.php:95
-msgid "Authorize application connection"
-msgstr "Autorizar una conexión de aplicación"
+#: ../../Zotlabs/Module/Settings/Account.php:58
+msgid "Passwords do not match. Password unchanged."
+msgstr "Las contraseñas no coinciden. La contraseña no se ha cambiado."
-#: ../../Zotlabs/Module/Api.php:75
-msgid "Return to your app and insert this Security Code:"
-msgstr "Vuelva a su aplicación e introduzca este código de seguridad: "
+#: ../../Zotlabs/Module/Settings/Account.php:62
+msgid "Empty passwords are not allowed. Password unchanged."
+msgstr "No se permiten contraseñas vacías. La contraseña no se ha cambiado."
-#: ../../Zotlabs/Module/Api.php:85
-msgid "Please login to continue."
-msgstr "Por favor inicie sesión para continuar."
+#: ../../Zotlabs/Module/Settings/Account.php:76
+msgid "Password changed."
+msgstr "Contraseña cambiada."
-#: ../../Zotlabs/Module/Api.php:97
-msgid ""
-"Do you want to authorize this application to access your posts and contacts,"
-" and/or create new posts for you?"
-msgstr "¿Desea autorizar a esta aplicación a acceder a sus publicaciones y contactos, y/o crear nuevas publicaciones por usted?"
+#: ../../Zotlabs/Module/Settings/Account.php:78
+msgid "Password update failed. Please try again."
+msgstr "La actualización de la contraseña ha fallado. Por favor, inténtalo de nuevo."
-#: ../../Zotlabs/Module/Regmod.php:15
-msgid "Please login."
-msgstr "Por favor, inicie sesión."
+#: ../../Zotlabs/Module/Settings/Account.php:103
+msgid "Account Settings"
+msgstr "Configuración de la cuenta"
-#: ../../Zotlabs/Module/Blocks.php:97 ../../Zotlabs/Module/Blocks.php:155
-#: ../../Zotlabs/Module/Editblock.php:113
-msgid "Block Name"
-msgstr "Nombre del bloque"
+#: ../../Zotlabs/Module/Settings/Account.php:104
+msgid "Current Password"
+msgstr "Contraseña actual"
-#: ../../Zotlabs/Module/Blocks.php:156
-msgid "Block Title"
-msgstr "Título del bloque"
+#: ../../Zotlabs/Module/Settings/Account.php:105
+msgid "Enter New Password"
+msgstr "Escribir una nueva contraseña"
-#: ../../Zotlabs/Module/Email_validation.php:36
-msgid "Email Verification Required"
-msgstr "Verificación obligatoria del correo electrónico"
+#: ../../Zotlabs/Module/Settings/Account.php:106
+msgid "Confirm New Password"
+msgstr "Confirmar la nueva contraseña"
-#: ../../Zotlabs/Module/Email_validation.php:37
-#, php-format
-msgid ""
-"A verification token was sent to your email address [%s]. Enter that token "
-"here to complete the account verification step. Please allow a few minutes "
-"for delivery, and check your spam folder if you do not see the message."
-msgstr "Se ha enviado un token de verificación a su dirección de correo electrónico [%s]. Ingrese ese símbolo aquí para completar el paso de verificación de cuenta. Por favor, espere unos minutos para el envío, y revise su carpeta de spam si no ve el mensaje."
+#: ../../Zotlabs/Module/Settings/Account.php:106
+msgid "Leave password fields blank unless changing"
+msgstr "Dejar en blanco la contraseña a menos que desee cambiarla."
-#: ../../Zotlabs/Module/Email_validation.php:38
-msgid "Resend Email"
-msgstr "Reenvío de correo electrónico"
+#: ../../Zotlabs/Module/Settings/Account.php:108
+msgid "DId2 or Email Address:"
+msgstr "Did2 o dirección de correo electrónico: "
-#: ../../Zotlabs/Module/Email_validation.php:41
-msgid "Validation token"
-msgstr "Token de validación"
+#: ../../Zotlabs/Module/Settings/Account.php:111
+msgid "Remove this account including all its channels"
+msgstr "Eliminar esta cuenta incluyendo todos sus canales"
-#: ../../Zotlabs/Module/Attach.php:68
-msgid "Item not available."
-msgstr "Elemento no disponible"
+#: ../../Zotlabs/Module/Settings/Featured.php:25
+msgid "No feature settings configured"
+msgstr "No se ha establecido la configuración de los complementos"
-#: ../../Zotlabs/Module/Vote.php:40
-msgid "Poll not found."
-msgstr "Encuesta no encontrada."
+#: ../../Zotlabs/Module/Settings/Featured.php:34
+msgid "Addon Settings"
+msgstr "Ajustes de los complementos"
-#: ../../Zotlabs/Module/Vote.php:71
-msgid "Invalid response."
-msgstr "respuesta no válida."
+#: ../../Zotlabs/Module/Settings/Featured.php:35
+msgid "Please save/submit changes to any panel before opening another."
+msgstr "Guarde o envíe los cambios a cualquier panel antes de abrir otro."
-#: ../../Zotlabs/Module/Vote.php:127
-msgid "Response submitted. Updates may not appear instantly."
-msgstr "Respuesta enviada. Las actualizaciones pueden no aparecer al instante."
+#: ../../Zotlabs/Module/Settings/Channel.php:105
+#: ../../Zotlabs/Module/Settings/Channel.php:217
+msgid "Please select a channel role"
+msgstr "Por favor, seleccione un rol de canal"
-#: ../../Zotlabs/Module/Profile_photo.php:128
-#: ../../Zotlabs/Module/Cover_photo.php:85
-msgid "Image uploaded but image cropping failed."
-msgstr "Imagen actualizada, pero el recorte de la imagen ha fallado. "
+#: ../../Zotlabs/Module/Settings/Channel.php:194
+msgid "Your channel address is"
+msgstr "Su dirección de canal es"
-#: ../../Zotlabs/Module/Profile_photo.php:184
-#: ../../Zotlabs/Module/Cover_photo.php:212
-msgid "Image resize failed."
-msgstr "El ajuste del tamaño de la imagen ha fallado."
+#: ../../Zotlabs/Module/Settings/Channel.php:197
+msgid "Your files/photos are accessible via WebDAV at"
+msgstr "Sus archivos y fotos son accesibles a través de WebDAV en "
-#: ../../Zotlabs/Module/Profile_photo.php:350
-#: ../../Zotlabs/Module/Cover_photo.php:265
-msgid "Image upload failed."
-msgstr "La carga de la imagen ha fallado."
+#: ../../Zotlabs/Module/Settings/Channel.php:228
+msgid "Channel Settings"
+msgstr "Ajustes del canal"
-#: ../../Zotlabs/Module/Profile_photo.php:370
-#: ../../Zotlabs/Module/Cover_photo.php:282
-msgid "Unable to process image."
-msgstr "No ha sido posible procesar la imagen."
+#: ../../Zotlabs/Module/Settings/Channel.php:233
+#: ../../Zotlabs/Module/New_channel.php:178
+msgid "Channel role"
+msgstr "Rol del canal"
-#: ../../Zotlabs/Module/Profile_photo.php:432
-#: ../../Zotlabs/Module/Profile_photo.php:497
-#: ../../Zotlabs/Module/Cover_photo.php:367
-#: ../../Zotlabs/Module/Cover_photo.php:382
-msgid "Photo not available."
-msgstr "Foto no disponible."
+#: ../../Zotlabs/Module/Settings/Channel.php:235
+msgid "Basic Settings"
+msgstr "Configuración básica"
-#: ../../Zotlabs/Module/Profile_photo.php:544
-msgid ""
-"This profile photo will be visible to anybody on the internet and may be "
-"distributed to other websites."
-msgstr "Esta foto de perfil será visible para cualquier persona en Internet y podrá ser distribuida a otros sitios web."
+#: ../../Zotlabs/Module/Settings/Channel.php:236
+msgid "Channel timezone:"
+msgstr "Zona horaria del canal: "
-#: ../../Zotlabs/Module/Profile_photo.php:544
-msgid ""
-"This profile photo will be visible only to channels with permission to view "
-"this profile."
-msgstr "Esta foto de perfil sólo será visible para los canales con permiso para ver este perfil."
+#: ../../Zotlabs/Module/Settings/Channel.php:237
+msgid "Default post location:"
+msgstr "Ubicación de publicación predeterminada: "
-#: ../../Zotlabs/Module/Profile_photo.php:546
-msgid "Use Photo for Profile"
-msgstr "Usar la fotografía para el perfil"
+#: ../../Zotlabs/Module/Settings/Channel.php:237
+msgid "Geographical location to display on your posts"
+msgstr "Localización geográfica que debe mostrarse en sus publicaciones"
-#: ../../Zotlabs/Module/Profile_photo.php:546
-msgid "Change Profile Photo"
-msgstr "Cambiar la foto del perfil"
+#: ../../Zotlabs/Module/Settings/Channel.php:238
+msgid "Use browser location"
+msgstr "Usar la localización del navegador: "
-#: ../../Zotlabs/Module/Profile_photo.php:548
-msgid "Reset to default"
-msgstr "Restablecer los valores por defecto"
+#: ../../Zotlabs/Module/Settings/Channel.php:239
+msgid "Adult content"
+msgstr "Contenido solo para adultos"
-#: ../../Zotlabs/Module/Profile_photo.php:551
-#: ../../Zotlabs/Module/Profile_photo.php:552
-#: ../../Zotlabs/Module/Cover_photo.php:426
-#: ../../Zotlabs/Module/Cover_photo.php:427
-msgid "Use a photo from your albums"
-msgstr "Usar una foto de sus álbumes"
+#: ../../Zotlabs/Module/Settings/Channel.php:239
+msgid "This channel frequently or regularly publishes adult content"
+msgstr "Este canal publica con frecuencia o regularmente contenidos para adultos"
-#: ../../Zotlabs/Module/Profile_photo.php:562
-msgid "Select existing"
-msgstr "Seleccione lo que hay"
+#: ../../Zotlabs/Module/Settings/Channel.php:240
+msgid "Maximum Friend Requests/Day:"
+msgstr "Máximo de solicitudes de amistad por día:"
-#: ../../Zotlabs/Module/Profile_photo.php:581
-#: ../../Zotlabs/Module/Cover_photo.php:455
-msgid "Crop Image"
-msgstr "Recortar imagen"
+#: ../../Zotlabs/Module/Settings/Channel.php:240
+msgid "May reduce spam activity"
+msgstr "Podría reducir la actividad de spam"
-#: ../../Zotlabs/Module/Profile_photo.php:582
-#: ../../Zotlabs/Module/Cover_photo.php:456
-msgid "Please adjust the image cropping for optimum viewing."
-msgstr "Por favor ajuste el recorte de la imagen para una visión óptima."
+#: ../../Zotlabs/Module/Settings/Channel.php:242
+msgid "By default post a status message when:"
+msgstr "Por defecto, enviar un mensaje de estado cuando:"
-#: ../../Zotlabs/Module/Profile_photo.php:584
-msgid "Done editing"
-msgstr "Edición completada"
+#: ../../Zotlabs/Module/Settings/Channel.php:243
+msgid "accepting a friend request"
+msgstr "Acepte una solicitud de amistad"
-#: ../../Zotlabs/Module/Editblock.php:138
-msgid "Edit Block"
-msgstr "Modificar este bloque"
+#: ../../Zotlabs/Module/Settings/Channel.php:244
+msgid "joining a forum/community"
+msgstr "al unirse a un foro o comunidad"
-#: ../../Zotlabs/Module/Filer.php:53
-msgid "Enter a folder name"
-msgstr "Escriba un nombre de carpeta"
+#: ../../Zotlabs/Module/Settings/Channel.php:245
+msgid "making an <em>interesting</em> profile change"
+msgstr "Realice un cambio <em>interesante</em> en su perfil"
-#: ../../Zotlabs/Module/Filer.php:53
-msgid "or select an existing folder (doubleclick)"
-msgstr "o seleccione una (con un doble click)"
+#: ../../Zotlabs/Module/Settings/Channel.php:246
+msgid "Send a notification email when:"
+msgstr "Enviar una notificación por correo electrónico cuando:"
-#: ../../Zotlabs/Module/Filer.php:55 ../../Zotlabs/Lib/ThreadItem.php:194
-msgid "Save to Folder"
-msgstr "Guardar en carpeta"
+#: ../../Zotlabs/Module/Settings/Channel.php:247
+msgid "You receive a connection request"
+msgstr "Reciba una solicitud de conexión"
-#: ../../Zotlabs/Module/Editlayout.php:128
-#: ../../Zotlabs/Module/Layouts.php:129 ../../Zotlabs/Module/Layouts.php:189
-msgid "Layout Name"
-msgstr "Nombre de la plantilla"
+#: ../../Zotlabs/Module/Settings/Channel.php:248
+msgid "Your connections are confirmed"
+msgstr "Sus conexiones hayan sido confirmadas"
-#: ../../Zotlabs/Module/Editlayout.php:129
-#: ../../Zotlabs/Module/Layouts.php:132
-msgid "Layout Description (Optional)"
-msgstr "Descripción de la plantilla (opcional)"
+#: ../../Zotlabs/Module/Settings/Channel.php:249
+msgid "Someone writes on your profile wall"
+msgstr "Alguien escriba en la página de su perfil (\"muro\")"
-#: ../../Zotlabs/Module/Editlayout.php:137
-msgid "Edit Layout"
-msgstr "Modificar la plantilla"
+#: ../../Zotlabs/Module/Settings/Channel.php:250
+msgid "Someone writes a followup comment"
+msgstr "Alguien escriba un comentario sobre sus publicaciones"
-#: ../../Zotlabs/Module/Connections.php:58
-#: ../../Zotlabs/Module/Connections.php:116
-#: ../../Zotlabs/Module/Connections.php:282
-msgid "Active"
-msgstr "Activo/a"
+#: ../../Zotlabs/Module/Settings/Channel.php:251
+msgid "You receive a private message"
+msgstr "Reciba un mensaje privado"
-#: ../../Zotlabs/Module/Connections.php:63
-#: ../../Zotlabs/Module/Connections.php:182
-#: ../../Zotlabs/Module/Connections.php:287
-msgid "Blocked"
-msgstr "Bloqueadas"
+#: ../../Zotlabs/Module/Settings/Channel.php:252
+msgid "You receive a friend suggestion"
+msgstr "Reciba una sugerencia de amistad"
-#: ../../Zotlabs/Module/Connections.php:68
-#: ../../Zotlabs/Module/Connections.php:189
-#: ../../Zotlabs/Module/Connections.php:286
-msgid "Ignored"
-msgstr "Ignoradas"
+#: ../../Zotlabs/Module/Settings/Channel.php:253
+msgid "You are tagged in a post"
+msgstr "Usted sea etiquetado en una publicación"
-#: ../../Zotlabs/Module/Connections.php:73
-#: ../../Zotlabs/Module/Connections.php:203
-#: ../../Zotlabs/Module/Connections.php:285
-msgid "Hidden"
-msgstr "Ocultas"
+#: ../../Zotlabs/Module/Settings/Channel.php:254
+msgid "You are poked/prodded/etc. in a post"
+msgstr "Reciba un toque o incitación en una publicación"
-#: ../../Zotlabs/Module/Connections.php:78
-#: ../../Zotlabs/Module/Connections.php:196
-msgid "Archived/Unreachable"
-msgstr "Archivadas o inaccesibles"
+#: ../../Zotlabs/Module/Settings/Channel.php:255
+msgid "Someone likes your post/comment"
+msgstr "Alguien muestre agrado por su entrada o comentario"
-#: ../../Zotlabs/Module/Connections.php:83
-#: ../../Zotlabs/Module/Connections.php:92 ../../Zotlabs/Module/Menu.php:180
-#: ../../Zotlabs/Module/Notifications.php:101
-msgid "New"
-msgstr "Nuevas"
+#: ../../Zotlabs/Module/Settings/Channel.php:256
+msgid "Show visual notifications including:"
+msgstr "Mostrar notificaciones visuales que incluyan:"
-#: ../../Zotlabs/Module/Connections.php:158
-msgid "Active Connections"
-msgstr "Conexiones activas"
+#: ../../Zotlabs/Module/Settings/Channel.php:257
+msgid "Unseen stream activity"
+msgstr "Actividad del stream no vista"
-#: ../../Zotlabs/Module/Connections.php:161
-msgid "Show active connections"
-msgstr "Mostrar las conexiones activas"
+#: ../../Zotlabs/Module/Settings/Channel.php:258
+msgid "Unseen channel activity"
+msgstr "Actividad no vista en el canal"
-#: ../../Zotlabs/Module/Connections.php:168
-msgid "Show pending (new) connections"
-msgstr "Mostrar conexiones (nuevas) pendientes"
+#: ../../Zotlabs/Module/Settings/Channel.php:259
+msgid "Unseen private messages"
+msgstr "Mensajes privados no leídos"
-#: ../../Zotlabs/Module/Connections.php:185
-msgid "Only show blocked connections"
-msgstr "Mostrar solo las conexiones bloqueadas"
+#: ../../Zotlabs/Module/Settings/Channel.php:259
+#: ../../Zotlabs/Module/Settings/Channel.php:264
+#: ../../Zotlabs/Module/Settings/Channel.php:265
+#: ../../Zotlabs/Module/Settings/Channel.php:266
+msgid "Recommended"
+msgstr "Recomendado"
-#: ../../Zotlabs/Module/Connections.php:192
-msgid "Only show ignored connections"
-msgstr "Mostrar solo conexiones ignoradas"
+#: ../../Zotlabs/Module/Settings/Channel.php:260
+msgid "Upcoming events"
+msgstr "Próximos eventos"
-#: ../../Zotlabs/Module/Connections.php:199
-msgid "Only show archived/unreachable connections"
-msgstr "Mostrar solo las conexiones archivadas o no localizables"
+#: ../../Zotlabs/Module/Settings/Channel.php:261
+msgid "Events today"
+msgstr "Eventos de hoy"
-#: ../../Zotlabs/Module/Connections.php:206
-msgid "Only show hidden connections"
-msgstr "Mostrar solo las conexiones ocultas"
+#: ../../Zotlabs/Module/Settings/Channel.php:262
+msgid "Upcoming birthdays"
+msgstr "Próximos cumpleaños"
-#: ../../Zotlabs/Module/Connections.php:221
-msgid "Show all connections"
-msgstr "Mostrar todas las conexiones"
+#: ../../Zotlabs/Module/Settings/Channel.php:262
+msgid "Not available in all themes"
+msgstr "No disponible en todos los temas"
-#: ../../Zotlabs/Module/Connections.php:283
-msgid "Pending approval"
-msgstr "Pendiente de aprobación"
+#: ../../Zotlabs/Module/Settings/Channel.php:263
+msgid "System (personal) notifications"
+msgstr "Notificaciones del sistema (personales)"
-#: ../../Zotlabs/Module/Connections.php:284
-msgid "Archived"
-msgstr "Archivadas"
+#: ../../Zotlabs/Module/Settings/Channel.php:264
+msgid "System info messages"
+msgstr "Mensajes de información del sistema"
-#: ../../Zotlabs/Module/Connections.php:288
-msgid "Not connected at this location"
-msgstr "No está conectado/a en esta ubicación"
+#: ../../Zotlabs/Module/Settings/Channel.php:265
+msgid "System critical alerts"
+msgstr "Alertas críticas del sistema"
-#: ../../Zotlabs/Module/Connections.php:327
-#, php-format
-msgid "%1$s [%2$s]"
-msgstr "%1$s [%2$s]"
+#: ../../Zotlabs/Module/Settings/Channel.php:266
+msgid "New connections"
+msgstr "Nuevas conexiones"
-#: ../../Zotlabs/Module/Connections.php:328
-msgid "Edit connection"
-msgstr "Editar conexión"
+#: ../../Zotlabs/Module/Settings/Channel.php:267
+msgid "System Registrations"
+msgstr "Registros del sistema"
-#: ../../Zotlabs/Module/Connections.php:330
-msgid "Delete connection"
-msgstr "Eliminar conexión"
+#: ../../Zotlabs/Module/Settings/Channel.php:268
+msgid "Unseen shared files"
+msgstr "Ficheros compartidos no vistos"
-#: ../../Zotlabs/Module/Connections.php:336
-msgid "Channel address"
-msgstr "Dirección del canal"
+#: ../../Zotlabs/Module/Settings/Channel.php:269
+msgid "Unseen public stream activity"
+msgstr "Actividad del stream público no vista"
-#: ../../Zotlabs/Module/Connections.php:341
-msgid "Call"
-msgstr "Llamar"
+#: ../../Zotlabs/Module/Settings/Channel.php:270
+msgid "Unseen likes and dislikes"
+msgstr "Los \"me gusta\" y \"no me gusta\" no vistos"
-#: ../../Zotlabs/Module/Connections.php:343
-msgid "Status"
-msgstr "Estado"
+#: ../../Zotlabs/Module/Settings/Channel.php:271
+msgid "Unseen forum posts"
+msgstr "Entradas no vistas en el foro"
-#: ../../Zotlabs/Module/Connections.php:346
-msgid "Connected"
-msgstr "Conectado/a"
+#: ../../Zotlabs/Module/Settings/Channel.php:272
+msgid "Email notification hub (hostname)"
+msgstr "Email de notificación del hub (nombre del host)"
-#: ../../Zotlabs/Module/Connections.php:350
-msgid "Ignore connection"
-msgstr "Ignorar esta conexión"
+#: ../../Zotlabs/Module/Settings/Channel.php:272
+#, php-format
+msgid ""
+"If your channel is mirrored to multiple hubs, set this to your preferred "
+"location. This will prevent duplicate email notifications. Example: %s"
+msgstr "Si su canal está replicado en múltiples hubs, colóquelo en su ubicación preferida. Esto evitará la duplicación de notificaciones por correo electrónico. Ejemplo: %s"
-#: ../../Zotlabs/Module/Connections.php:352
-msgid "Recent activity"
-msgstr "Actividad reciente"
+#: ../../Zotlabs/Module/Settings/Channel.php:273
+msgid "Show new wall posts, private messages and connections under Notices"
+msgstr "Mostrar nuevos mensajes en el muro, mensajes privados y conexiones en Avisos"
-#: ../../Zotlabs/Module/Connections.php:358
-msgid "Connect at this location"
-msgstr "Conectar en esta ubicación "
+#: ../../Zotlabs/Module/Settings/Channel.php:274
+msgid "Mark all notices of the thread read if a notice is clicked"
+msgstr "Marcar todos los avisos del hilo como leídos si se hace clic en un aviso"
-#: ../../Zotlabs/Module/Connections.php:395
-#: ../../Zotlabs/Module/Connedit.php:686
-msgid "Contact role"
-msgstr "Rol del contacto"
+#: ../../Zotlabs/Module/Settings/Channel.php:274
+msgid "If no, only the clicked notice will be marked read"
+msgstr "Si no, sólo se marcará como leída la notificación en la que se haya hecho clic"
-#: ../../Zotlabs/Module/Connections.php:396
-msgid "Search your connections"
-msgstr "Buscar sus conexiones"
+#: ../../Zotlabs/Module/Settings/Channel.php:275
+msgid ""
+"Desktop notifications are unavailable because the required browser "
+"permission has not been granted"
+msgstr "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso necesario al navegador"
-#: ../../Zotlabs/Module/Connections.php:397
-msgid "Contact search"
-msgstr "Buscar contacto"
+#: ../../Zotlabs/Module/Settings/Channel.php:276
+msgid "Grant permission"
+msgstr "Permiso concedido"
-#: ../../Zotlabs/Module/Cover_photo.php:196
-#: ../../Zotlabs/Module/Cover_photo.php:254
-msgid "Cover Photos"
-msgstr "Imágenes de portada del perfil"
+#: ../../Zotlabs/Module/Settings/Channel.php:277
+msgid "Notify me of events this many days in advance"
+msgstr "Avisarme de los eventos con algunos días de antelación"
-#: ../../Zotlabs/Module/Cover_photo.php:418
-msgid "Your cover photo may be visible to anybody on the internet"
-msgstr "La foto de la portada puede ser visible para cualquiera en Internet"
+#: ../../Zotlabs/Module/Settings/Channel.php:277
+msgid "Must be greater than 0"
+msgstr "Debe ser mayor que 0"
-#: ../../Zotlabs/Module/Cover_photo.php:420
-msgid "Upload File:"
-msgstr "Subir fichero:"
+#: ../../Zotlabs/Module/Settings/Channel.php:280
+msgid "Default photo upload folder"
+msgstr "Carpeta por defecto de las fotos subidas"
-#: ../../Zotlabs/Module/Cover_photo.php:421
-msgid "Select a profile:"
-msgstr "Seleccionar un perfil:"
+#: ../../Zotlabs/Module/Settings/Channel.php:280
+#: ../../Zotlabs/Module/Settings/Channel.php:281
+msgid "%Y - current year, %m - current month"
+msgstr "%Y - año en curso, %m - mes actual"
-#: ../../Zotlabs/Module/Cover_photo.php:422
-msgid "Change Cover Photo"
-msgstr "Cambiar la foto de portada del perfil"
+#: ../../Zotlabs/Module/Settings/Channel.php:281
+msgid "Default file upload folder"
+msgstr "Carpeta por defecto de los ficheros subidos"
-#: ../../Zotlabs/Module/Cover_photo.php:438
-msgid "Select existing photo"
-msgstr "Seleccionar una foto"
+#: ../../Zotlabs/Module/Settings/Channel.php:282
+#: ../../Zotlabs/Module/Removeme.php:60 ../../Zotlabs/Module/Removeme.php:64
+msgid "Remove Channel"
+msgstr "Eliminar el canal"
-#: ../../Zotlabs/Module/Cover_photo.php:458
-msgid "Done Editing"
-msgstr "Edición completada"
+#: ../../Zotlabs/Module/Settings/Channel.php:283
+msgid "Remove this channel."
+msgstr "Eliminar este canal."
-#: ../../Zotlabs/Module/Photos.php:80
-msgid "Page owner information could not be retrieved."
-msgstr "La información del propietario de la página no pudo ser recuperada."
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "Expire other channel content after this many days"
+msgstr "Caducar contenido de otros canales después de este número de días"
-#: ../../Zotlabs/Module/Photos.php:96 ../../Zotlabs/Module/Photos.php:115
-msgid "Album not found."
-msgstr "Álbum no encontrado."
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "0 or blank to use the website limit."
+msgstr "0 o en blanco para usar el límite del sitio web."
-#: ../../Zotlabs/Module/Photos.php:105
-msgid "Delete Album"
-msgstr "Borrar álbum"
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+#, php-format
+msgid "This website expires after %d days."
+msgstr "Este sitio web caduca después de %d días."
-#: ../../Zotlabs/Module/Photos.php:177 ../../Zotlabs/Module/Photos.php:1065
-msgid "Delete Photo"
-msgstr "Borrar foto"
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "This website does not expire imported content."
+msgstr "Este sitio web no caduca el contenido importado."
-#: ../../Zotlabs/Module/Photos.php:534
-msgid "No photos selected"
-msgstr "No hay fotos seleccionadas"
+#: ../../Zotlabs/Module/Settings/Channel.php:284
+msgid "The website limit takes precedence if lower than your limit."
+msgstr "El límite del sitio web tiene prioridad si es inferior a su propio límite."
-#: ../../Zotlabs/Module/Photos.php:583
-msgid "Access to this item is restricted."
-msgstr "El acceso a este elemento está restringido."
+#: ../../Zotlabs/Module/Settings/Channel.php:285
+#: ../../Zotlabs/Module/Settings/Channel.php:286
+msgid ""
+"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
+"leave blank to import all posts"
+msgstr "Palabras una por línea o #tags, $categories, /patterns/, lang=xx, lang!=xx - dejar en blanco para importar todas las entradas"
-#: ../../Zotlabs/Module/Photos.php:626
-#, php-format
-msgid "%1$.2f MB of %2$.2f MB photo storage used."
-msgstr "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado."
+#: ../../Zotlabs/Module/Settings/Editor.php:40
+msgid "Editor Settings"
+msgstr "Ajustes del editor"
-#: ../../Zotlabs/Module/Photos.php:629
-#, php-format
-msgid "%1$.2f MB photo storage used."
-msgstr "%1$.2f MB de almacenamiento de fotos utilizado."
+#: ../../Zotlabs/Module/Settings/Network.php:59
+msgid "Stream Settings"
+msgstr "Ajustes del stream"
-#: ../../Zotlabs/Module/Photos.php:671
-msgid "Upload Photos"
-msgstr "Subir fotos"
+#: ../../Zotlabs/Module/Settings/Events.php:40
+msgid "Events Settings"
+msgstr "Gestión de eventos"
-#: ../../Zotlabs/Module/Photos.php:675
-msgid "Enter an album name"
-msgstr "Introducir un nombre de álbum"
+#: ../../Zotlabs/Module/Settings/Calendar.php:40
+msgid "Calendar Settings"
+msgstr "Ajustes del calendario"
-#: ../../Zotlabs/Module/Photos.php:676
-msgid "or select an existing album (doubleclick)"
-msgstr "o seleccionar un álbum (con un doble click)"
+#: ../../Zotlabs/Module/Settings/Profiles.php:41
+msgid "Default profile for new contacts"
+msgstr "Perfil predeterminado para nuevos contactos"
-#: ../../Zotlabs/Module/Photos.php:677
-msgid "Create a status post for this upload"
-msgstr "Crear un mensaje de estado para esta subida"
+#: ../../Zotlabs/Module/Settings/Profiles.php:49
+msgid "Profiles Settings"
+msgstr "Gestión de los perfiles"
-#: ../../Zotlabs/Module/Photos.php:679
-msgid "Description (optional)"
-msgstr "Descripción (opcional)"
+#: ../../Zotlabs/Module/Settings/Photos.php:40
+msgid "Photos Settings"
+msgstr "Gestión de las fotos"
-#: ../../Zotlabs/Module/Photos.php:767
-msgid "Show Newest First"
-msgstr "Mostrar lo más reciente primero"
+#: ../../Zotlabs/Module/Settings/Privacy.php:39
+msgid "Privacy settings updated."
+msgstr "Se ha actualizado la configuración de la privacidad."
-#: ../../Zotlabs/Module/Photos.php:769
-msgid "Show Oldest First"
-msgstr "Mostrar lo más antiguo primero"
+#: ../../Zotlabs/Module/Settings/Privacy.php:57
+msgid "Only those you specifically allow"
+msgstr "Solo aquellos a los que usted permita explícitamente"
-#: ../../Zotlabs/Module/Photos.php:826 ../../Zotlabs/Module/Photos.php:1368
-msgid "Add Photos"
-msgstr "Añadir fotos"
+#: ../../Zotlabs/Module/Settings/Privacy.php:58
+msgid "Approved connections"
+msgstr "Conexiones aprobadas"
-#: ../../Zotlabs/Module/Photos.php:874
-msgid "Permission denied. Access to this item may be restricted."
-msgstr "Permiso denegado. El acceso a este elemento puede estar restringido."
+#: ../../Zotlabs/Module/Settings/Privacy.php:59
+msgid "Any connections"
+msgstr "Cualquier conexión"
-#: ../../Zotlabs/Module/Photos.php:876
-msgid "Photo not available"
-msgstr "Foto no disponible"
+#: ../../Zotlabs/Module/Settings/Privacy.php:60
+msgid "Anybody on this website"
+msgstr "Cualquiera en este sitio web"
-#: ../../Zotlabs/Module/Photos.php:934
-msgid "Use as profile photo"
-msgstr "Usar como foto del perfil"
+#: ../../Zotlabs/Module/Settings/Privacy.php:61
+msgid "Anybody in this network"
+msgstr "Cualquiera en esta red"
-#: ../../Zotlabs/Module/Photos.php:935
-msgid "Use as cover photo"
-msgstr "Usar como imagen de portada del perfil"
+#: ../../Zotlabs/Module/Settings/Privacy.php:62
+msgid "Anybody authenticated"
+msgstr "Cualquiera que esté autenticado"
-#: ../../Zotlabs/Module/Photos.php:942
-msgid "Private Photo"
-msgstr "Foto privada"
+#: ../../Zotlabs/Module/Settings/Privacy.php:63
+msgid "Anybody on the internet"
+msgstr "Cualquiera en internet"
-#: ../../Zotlabs/Module/Photos.php:957
-msgid "View Full Size"
-msgstr "Ver tamaño completo"
+#: ../../Zotlabs/Module/Settings/Privacy.php:73
+msgid ""
+"Advise: set to \"Anybody on the internet\" and use privacy groups to "
+"restrict access"
+msgstr "Consejo: establezca la opción \"Cualquiera en Internet\" y utilice los grupos de privacidad para restringir el acceso"
-#: ../../Zotlabs/Module/Photos.php:1039
-msgid "Edit photo"
-msgstr "Editar foto"
+#: ../../Zotlabs/Module/Settings/Privacy.php:109
+msgid "Privacy Settings"
+msgstr "Ajustes de privacidad"
-#: ../../Zotlabs/Module/Photos.php:1041
-msgid "Rotate CW (right)"
-msgstr "Girar CW (a la derecha)"
+#: ../../Zotlabs/Module/Settings/Privacy.php:114
+msgid "Advanced configuration"
+msgstr "Ajustes avanzados"
-#: ../../Zotlabs/Module/Photos.php:1042
-msgid "Rotate CCW (left)"
-msgstr "Girar CCW (a la izquierda)"
+#: ../../Zotlabs/Module/Settings/Privacy.php:116
+msgid "Proceed with caution"
+msgstr "Proceda con precaución"
-#: ../../Zotlabs/Module/Photos.php:1045
-msgid "Move photo to album"
-msgstr "Mover la foto a un álbum"
+#: ../../Zotlabs/Module/Settings/Privacy.php:117
+msgid ""
+"Changing advanced configuration settings can impact your, and your contacts "
+"channels functionality and security."
+msgstr "El cambio de los ajustes de configuración avanzada puede afectar a la funcionalidad y seguridad de sus canales y contactos."
-#: ../../Zotlabs/Module/Photos.php:1046
-msgid "Enter a new album name"
-msgstr "Introducir un nuevo nombre de álbum"
+#: ../../Zotlabs/Module/Settings/Privacy.php:118
+msgid "Accept the risk and continue"
+msgstr "Aceptar el riesgo y continuar"
-#: ../../Zotlabs/Module/Photos.php:1047
-msgid "or select an existing one (doubleclick)"
-msgstr "o seleccionar un álbum (con un doble click)"
+#: ../../Zotlabs/Module/Settings/Privacy.php:120
+msgid "Automatically approve new contacts"
+msgstr "Aprobar automáticamente nuevos contactos"
-#: ../../Zotlabs/Module/Photos.php:1052
-msgid "Add a Tag"
-msgstr "Añadir una etiqueta"
+#: ../../Zotlabs/Module/Settings/Privacy.php:121
+msgid "Opt-out of search engine indexing"
+msgstr "Exclusión de la indexación en los motores de búsqueda"
-#: ../../Zotlabs/Module/Photos.php:1060
-msgid "Example: @bob, @Barbara_Jensen, @jim@example.com"
-msgstr "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com"
+#: ../../Zotlabs/Module/Settings/Privacy.php:122
+msgid "Group actor"
+msgstr "Grupo de actores"
-#: ../../Zotlabs/Module/Photos.php:1063
-msgid "Flag as adult in album view"
-msgstr "Marcar como \"solo para adultos\" en el álbum"
+#: ../../Zotlabs/Module/Settings/Privacy.php:122
+msgid "Allow this channel to act as a forum"
+msgstr "Permitir que este canal actúe como un foro"
-#: ../../Zotlabs/Module/Photos.php:1082 ../../Zotlabs/Lib/ThreadItem.php:317
-msgid "I like this (toggle)"
-msgstr "Me gusta (cambiar)"
+#: ../../Zotlabs/Module/Settings/Manage.php:41
+msgid "Channel Manager Settings"
+msgstr "Ajustes del administrador de canales"
-#: ../../Zotlabs/Module/Photos.php:1083 ../../Zotlabs/Lib/ThreadItem.php:318
-msgid "I don't like this (toggle)"
-msgstr "No me gusta esto (cambiar)"
+#: ../../Zotlabs/Module/Sse_bs.php:610
+msgid "Private forum"
+msgstr "Foro privado"
-#: ../../Zotlabs/Module/Photos.php:1101 ../../Zotlabs/Module/Photos.php:1217
-#: ../../Zotlabs/Lib/ThreadItem.php:832
-msgid "This is you"
-msgstr "Este es usted"
+#: ../../Zotlabs/Module/Sse_bs.php:610
+msgid "Public forum"
+msgstr "Foro público"
-#: ../../Zotlabs/Module/Photos.php:1138 ../../Zotlabs/Module/Photos.php:1150
-#: ../../Zotlabs/Lib/ThreadItem.php:237 ../../Zotlabs/Lib/ThreadItem.php:249
-msgid "View all"
-msgstr "Ver todo"
+#: ../../Zotlabs/Module/Cdav.php:819
+msgid "Calendar entries imported."
+msgstr "Entradas de calendario importadas."
-#: ../../Zotlabs/Module/Photos.php:1251
-msgid "Photo Tools"
-msgstr "Gestión de las fotos"
+#: ../../Zotlabs/Module/Cdav.php:821
+msgid "No calendar entries found."
+msgstr "No se han encontrado entradas de calendario."
-#: ../../Zotlabs/Module/Photos.php:1260
-msgid "In This Photo:"
-msgstr "En esta foto:"
+#: ../../Zotlabs/Module/Cdav.php:1010
+msgid "Event title"
+msgstr "Título del evento"
-#: ../../Zotlabs/Module/Photos.php:1265
-msgid "Map"
-msgstr "Mapa"
+#: ../../Zotlabs/Module/Cdav.php:1011
+msgid "Start date and time"
+msgstr "Fecha y hora de comienzo"
-#: ../../Zotlabs/Module/Photos.php:1273 ../../Zotlabs/Lib/ThreadItem.php:497
-msgctxt "noun"
-msgid "Likes"
-msgstr "Me gusta"
+#: ../../Zotlabs/Module/Cdav.php:1012
+msgid "End date and time"
+msgstr "Fecha y hora de finalización"
-#: ../../Zotlabs/Module/Photos.php:1274 ../../Zotlabs/Lib/ThreadItem.php:498
-msgctxt "noun"
-msgid "Dislikes"
-msgstr "No me gusta"
+#: ../../Zotlabs/Module/Cdav.php:1013
+msgid "Timezone:"
+msgstr "Zona horaria: "
-#: ../../Zotlabs/Module/Lostpass.php:19
-msgid "No valid account found."
-msgstr "No se ha encontrado una cuenta válida."
+#: ../../Zotlabs/Module/Cdav.php:1039
+msgid "Month"
+msgstr "Mes"
-#: ../../Zotlabs/Module/Lostpass.php:33
-msgid "Password reset request issued. Check your email."
-msgstr "Se ha recibido una solicitud de restablecimiento de contraseña. Consulte su correo electrónico."
+#: ../../Zotlabs/Module/Cdav.php:1040
+msgid "Week"
+msgstr "Semana"
-#: ../../Zotlabs/Module/Lostpass.php:39 ../../Zotlabs/Module/Lostpass.php:108
-#, php-format
-msgid "Site Member (%s)"
-msgstr "Usuario del sitio (%s)"
+#: ../../Zotlabs/Module/Cdav.php:1041
+msgid "Day"
+msgstr "Día"
-#: ../../Zotlabs/Module/Lostpass.php:44 ../../Zotlabs/Module/Lostpass.php:49
-#, php-format
-msgid "Password reset requested at %s"
-msgstr "Se ha solicitado restablecer la contraseña en %s"
+#: ../../Zotlabs/Module/Cdav.php:1042
+msgid "List month"
+msgstr "Lista mensual"
-#: ../../Zotlabs/Module/Lostpass.php:68
-msgid ""
-"Request could not be verified. (You may have previously submitted it.) "
-"Password reset failed."
-msgstr "La solicitud no ha podido ser verificada. (Puede que la haya enviado con anterioridad) El restablecimiento de la contraseña ha fallado."
+#: ../../Zotlabs/Module/Cdav.php:1043
+msgid "List week"
+msgstr "Lista semanal"
-#: ../../Zotlabs/Module/Lostpass.php:91 ../../boot.php:1757
-msgid "Password Reset"
-msgstr "Restablecer la contraseña"
+#: ../../Zotlabs/Module/Cdav.php:1044
+msgid "List day"
+msgstr "Lista diaria"
-#: ../../Zotlabs/Module/Lostpass.php:92
-msgid "Your password has been reset as requested."
-msgstr "Su contraseña ha sido restablecida según lo solicitó."
+#: ../../Zotlabs/Module/Cdav.php:1052
+msgid "More"
+msgstr "Más"
-#: ../../Zotlabs/Module/Lostpass.php:93
-msgid "Your new password is"
-msgstr "Su nueva contraseña es"
+#: ../../Zotlabs/Module/Cdav.php:1053
+msgid "Less"
+msgstr "Menos"
-#: ../../Zotlabs/Module/Lostpass.php:94
-msgid "Save or copy your new password - and then"
-msgstr "Guarde o copie su nueva contraseña - y después"
+#: ../../Zotlabs/Module/Cdav.php:1055
+msgid "Select calendar"
+msgstr "Seleccionar un calendario"
-#: ../../Zotlabs/Module/Lostpass.php:95
-msgid "click here to login"
-msgstr "pulse aquí para conectarse"
+#: ../../Zotlabs/Module/Cdav.php:1056 ../../Zotlabs/Widget/Cdav.php:149
+msgid "Channel Calendars"
+msgstr "Calendarios del canal"
-#: ../../Zotlabs/Module/Lostpass.php:96
-msgid ""
-"Your password may be changed from the <em>Settings</em> page after "
-"successful login."
-msgstr "Puede cambiar la contraseña en la página <em>Ajustes</em> una vez iniciada la sesión."
+#: ../../Zotlabs/Module/Cdav.php:1056 ../../Zotlabs/Widget/Cdav.php:135
+#: ../../Zotlabs/Widget/Cdav.php:149
+msgid "CalDAV Calendars"
+msgstr "Calendarios CalDAV"
-#: ../../Zotlabs/Module/Lostpass.php:117
-#, php-format
-msgid "Your password has changed at %s"
-msgstr "Su contraseña en %s ha sido cambiada"
+#: ../../Zotlabs/Module/Cdav.php:1058
+msgid "Delete all"
+msgstr "Eliminar todos"
-#: ../../Zotlabs/Module/Lostpass.php:130
-msgid "Forgot your Password?"
-msgstr "¿Ha olvidado su contraseña?"
+#: ../../Zotlabs/Module/Cdav.php:1061
+msgid "Sorry! Editing of recurrent events is not yet implemented."
+msgstr "¡Disculpas! La edición de eventos recurrentes aún no se ha implementado."
-#: ../../Zotlabs/Module/Lostpass.php:131
+#: ../../Zotlabs/Module/Cdav.php:1062
msgid ""
-"Enter your email address and submit to have your password reset. Then check "
-"your email for further instructions."
-msgstr "Introduzca y envíe su dirección de correo electrónico para el restablecimiento de su contraseña. Luego revise su correo para obtener más instrucciones."
-
-#: ../../Zotlabs/Module/Lostpass.php:132
-msgid "Email Address"
-msgstr "Dirección de correo electrónico"
-
-#: ../../Zotlabs/Module/Lostpass.php:133 ../../Zotlabs/Module/Pdledit.php:76
-msgid "Reset"
-msgstr "Reiniciar"
-
-#: ../../Zotlabs/Module/Follow.php:93
-msgid "Connection added."
-msgstr "Se ha incorporado una conexión."
+"Could not fetch calendar resource. The selected calendar might be disabled."
+msgstr "No se ha podido obtener el recurso del calendario. Es posible que el calendario seleccionado esté desactivado."
-#: ../../Zotlabs/Module/Page.php:39 ../../Zotlabs/Module/Block.php:29
-msgid "Invalid item."
-msgstr "Elemento no válido."
+#: ../../Zotlabs/Module/Cdav.php:1458
+msgid "Default Calendar"
+msgstr "Calendario por defecto"
-#: ../../Zotlabs/Module/Page.php:174
-msgid ""
-"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod "
-"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,"
-" quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo "
-"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse "
-"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat "
-"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
-msgstr "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
+#: ../../Zotlabs/Module/Cdav.php:1469
+msgid "Default Addressbook"
+msgstr "Agenda de direcciones por defecto"
#: ../../Zotlabs/Module/Profiles.php:26 ../../Zotlabs/Module/Profiles.php:214
#: ../../Zotlabs/Module/Profiles.php:643
@@ -13208,1431 +13373,1268 @@ msgstr "Información de contacto y redes sociales"
msgid "My other channels"
msgstr "Mis otros canales"
-#: ../../Zotlabs/Module/Subthread.php:128
-#, php-format
-msgid "%1$s is following %2$s's %3$s"
-msgstr "%1$s está siguiendo %3$s de %2$s"
-
-#: ../../Zotlabs/Module/Subthread.php:130
-#, php-format
-msgid "%1$s stopped following %2$s's %3$s"
-msgstr "%1$s ha dejado de seguir %3$s de %2$s"
+#: ../../Zotlabs/Module/Lockview.php:100
+msgid "Remote privacy information not available"
+msgstr "La información sobre privacidad remota no está disponible"
-#: ../../Zotlabs/Module/Bookmarks.php:62
-msgid "Bookmark added"
-msgstr "Marcador añadido"
+#: ../../Zotlabs/Module/Lockview.php:143 ../../Zotlabs/Module/Lockview.php:184
+#: ../../Zotlabs/Module/Acl.php:123
+msgctxt "acl"
+msgid "Profile"
+msgstr "Perfil"
-#: ../../Zotlabs/Module/Bookmarks.php:101
-msgid "My Connections Bookmarks"
-msgstr "Marcadores de mis conexiones"
+#: ../../Zotlabs/Module/Lockview.php:154 ../../Zotlabs/Module/Lockview.php:193
+msgid "Privacy group"
+msgstr "Grupo de canales"
-#: ../../Zotlabs/Module/Changeaddr.php:35
-msgid ""
-"Channel name changes are not allowed within 48 hours of changing the account"
-" password."
-msgstr "Los cambios en el nombre de un canal no está permitida hasta pasadas 48 horas desde el cambio de contraseña de la cuenta."
+#: ../../Zotlabs/Module/Lockview.php:214
+#, php-format
+msgid "Click to copy link to this ressource for guest %s to clipboard"
+msgstr "Haga clic para copiar el enlace a este recurso para invitados %sen el portapapeles"
-#: ../../Zotlabs/Module/Changeaddr.php:77
-msgid "Change channel nickname/address"
-msgstr "Cambiar el alias o la dirección del canal"
+#: ../../Zotlabs/Module/Lockview.php:214
+msgid "Link copied"
+msgstr "Enlace copiado"
-#: ../../Zotlabs/Module/Changeaddr.php:78
-msgid "Any/all connections on other networks will be lost!"
-msgstr "¡Cualquier/todas las conexiones en otras redes se perderán!"
+#: ../../Zotlabs/Module/Lockview.php:221
+msgid "Access"
+msgstr "Acceso"
-#: ../../Zotlabs/Module/Changeaddr.php:80
-msgid "New channel address"
-msgstr "Nueva dirección del canal"
+#: ../../Zotlabs/Module/Lockview.php:226 ../../Zotlabs/Widget/Tokens.php:49
+msgid "Guest access"
+msgstr "Acceso para invitados"
-#: ../../Zotlabs/Module/Changeaddr.php:81
-msgid "Rename Channel"
-msgstr "Renombrar el canal"
+#: ../../Zotlabs/Module/Webpages.php:67
+msgid "Import Webpage Elements"
+msgstr "Importar elementos de una página web"
-#: ../../Zotlabs/Module/Invite.php:56
-msgid "Invite App"
-msgstr "Solicitar una app"
+#: ../../Zotlabs/Module/Webpages.php:68
+msgid "Import selected"
+msgstr "Importar elementos seleccionados"
-#: ../../Zotlabs/Module/Invite.php:68
-msgid "Register is closed"
-msgstr "El registro está cerrado"
+#: ../../Zotlabs/Module/Webpages.php:91
+msgid "Export Webpage Elements"
+msgstr "Exportar elementos de una página web"
-#: ../../Zotlabs/Module/Invite.php:102 ../../Zotlabs/Module/Invite.php:549
-msgid "Note, the invitation code is valid up to"
-msgstr "Tenga en cuenta que el código de invitación es válido hasta "
+#: ../../Zotlabs/Module/Webpages.php:92
+msgid "Export selected"
+msgstr "Exportar los elementos seleccionados"
-#: ../../Zotlabs/Module/Invite.php:115
-#, php-format
-msgid "Too many recipients for one invitation (max %d)"
-msgstr "Demasiados destinatarios para una invitación (máx %d)"
+#: ../../Zotlabs/Module/Webpages.php:258
+msgid "Actions"
+msgstr "Acciones"
-#: ../../Zotlabs/Module/Invite.php:119
-msgid "No recipients for this invitation"
-msgstr "No hay destinatarios para esta invitación"
+#: ../../Zotlabs/Module/Webpages.php:259
+msgid "Page Link"
+msgstr "Vínculo de la página"
-#: ../../Zotlabs/Module/Invite.php:138
-#, php-format
-msgid "(%s) : Not a real email address"
-msgstr "(%s) : No es una dirección de correo electrónica real"
+#: ../../Zotlabs/Module/Webpages.php:260
+msgid "Page Title"
+msgstr "Título de página"
-#: ../../Zotlabs/Module/Invite.php:145
-#, php-format
-msgid "(%s) : Not allowed email address"
-msgstr "(%s) : Dirección de correo electrónico no permitida"
+#: ../../Zotlabs/Module/Webpages.php:290
+msgid "Invalid file type."
+msgstr "Tipo de fichero no válido."
-#: ../../Zotlabs/Module/Invite.php:158
-#, php-format
-msgid "(%s) : email address already in use"
-msgstr "(%s) : La dirección de correo electrónico ya está en uso"
+#: ../../Zotlabs/Module/Webpages.php:302
+msgid "Error opening zip file"
+msgstr "Error al abrir el fichero comprimido zip"
-#: ../../Zotlabs/Module/Invite.php:165
-#, php-format
-msgid "(%s) : Accepted email address"
-msgstr "(%s) : Dirección de correo electrónico aceptada"
+#: ../../Zotlabs/Module/Webpages.php:313
+msgid "Invalid folder path."
+msgstr "La ruta de la carpeta no es válida."
-#: ../../Zotlabs/Module/Invite.php:257
-#, php-format
-msgid "To %s : Message delivery success."
-msgstr "To %s : Entrega exitosa del mensaje."
+#: ../../Zotlabs/Module/Webpages.php:340
+msgid "No webpage elements detected."
+msgstr "No se han detectado elementos de ninguna página web."
-#: ../../Zotlabs/Module/Invite.php:289
-#, php-format
-msgid "%1$d mail(s) sent, %2$d mail error(s)"
-msgstr "%1$d correo(s) enviado, %2$d error(es) de correo"
+#: ../../Zotlabs/Module/Webpages.php:415
+msgid "Import complete."
+msgstr "Importación completada."
-#: ../../Zotlabs/Module/Invite.php:314
-msgid "Invites not proposed by configuration"
-msgstr "Invitaciones no propuestas por la configuración"
+#: ../../Zotlabs/Module/Filestorage.php:14
+#: ../../Zotlabs/Module/Filestorage.php:53
+msgid "Deprecated!"
+msgstr "¡Obsoleto!"
-#: ../../Zotlabs/Module/Invite.php:315
-msgid "Contact the site admin"
-msgstr "Contactar con el administrador del sitio"
+#: ../../Zotlabs/Module/Filestorage.php:157
+msgid "Permission Denied."
+msgstr "Permiso denegado"
-#: ../../Zotlabs/Module/Invite.php:331
-msgid "Invites by users not enabled"
-msgstr "Invitaciones de usuarios no habilitadas"
+#: ../../Zotlabs/Module/Filestorage.php:190
+msgid "Edit file permissions"
+msgstr "Modificar los permisos del fichero"
-#: ../../Zotlabs/Module/Invite.php:336
-msgid "You have no more invitations available"
-msgstr "No tiene más invitaciones disponibles"
+#: ../../Zotlabs/Module/Filestorage.php:203
+msgid "Include all files and sub folders"
+msgstr "Incluir todos los ficheros y subcarpetas"
-#: ../../Zotlabs/Module/Invite.php:352
-msgid "Not on xchan"
-msgstr "No en xchan"
+#: ../../Zotlabs/Module/Filestorage.php:204
+msgid "Return to file list"
+msgstr "Volver a la lista de ficheros"
-#: ../../Zotlabs/Module/Invite.php:385
-msgid "All users invitation limit exceeded."
-msgstr "Se ha superado el límite de invitaciones a todos los usuarios."
+#: ../../Zotlabs/Module/Filestorage.php:206
+#: ../../Zotlabs/Storage/Browser.php:389
+msgid "Copy/paste this code to attach file to a post"
+msgstr "Copiar/pegar este código para adjuntar el fichero al envío"
-#: ../../Zotlabs/Module/Invite.php:403
-msgid "Invitation expires after"
-msgstr "La invitación expira después de "
+#: ../../Zotlabs/Module/Filestorage.php:207
+#: ../../Zotlabs/Storage/Browser.php:390
+msgid "Copy/paste this URL to link file from a web page"
+msgstr "Copiar/pegar esta dirección para enlazar el fichero desde una página web"
-#: ../../Zotlabs/Module/Invite.php:504 ../../Zotlabs/Module/Invite.php:543
-msgid "Invitation"
-msgstr "Invitación"
+#: ../../Zotlabs/Module/Filestorage.php:209
+msgid "Share this file"
+msgstr "Compartir este fichero"
-#: ../../Zotlabs/Module/Invite.php:534
-msgid "Send invitations"
-msgstr "Enviar invitaciones"
+#: ../../Zotlabs/Module/Filestorage.php:210
+msgid "Show URL to this file"
+msgstr "Mostrar la dirección de este fichero"
-#: ../../Zotlabs/Module/Invite.php:535
-msgid "Invitations I am using"
-msgstr "Invitaciones que estoy utilizando "
+#: ../../Zotlabs/Module/Filestorage.php:211
+#: ../../Zotlabs/Storage/Browser.php:558
+msgid "Show in your contacts shared folder"
+msgstr "Mostrar en la carpeta compartida con sus contactos"
-#: ../../Zotlabs/Module/Invite.php:536
-msgid "Invitations we are using"
-msgstr "Invitaciones que usamos "
+#: ../../Zotlabs/Module/Filer.php:53
+msgid "Enter a folder name"
+msgstr "Escriba un nombre de carpeta"
-#: ../../Zotlabs/Module/Invite.php:537
-msgid "§ Note, the email(s) sent will be recorded in the system logs"
-msgstr "§ Nota: el/los correo(s) electrónicos enviados quedarán registrados en los registros del sistema"
+#: ../../Zotlabs/Module/Filer.php:53
+msgid "or select an existing folder (doubleclick)"
+msgstr "o seleccione una (con un doble click)"
-#: ../../Zotlabs/Module/Invite.php:538
-msgid "Enter email addresses, one per line:"
-msgstr "Introduzca las direcciones de correo electrónico, una por línea:"
+#: ../../Zotlabs/Module/Moderate.php:67
+msgid "Comment approved"
+msgstr "El comentario ha sido aprobado"
-#: ../../Zotlabs/Module/Invite.php:539
-msgid "Your message:"
-msgstr "Su mensaje:"
+#: ../../Zotlabs/Module/Moderate.php:71
+msgid "Comment deleted"
+msgstr "Se ha eliminado el comentario"
-#: ../../Zotlabs/Module/Invite.php:540
-msgid "Invite template"
-msgstr "Plantilla de invitación"
+#: ../../Zotlabs/Module/Pdledit.php:27
+msgid "Layout updated."
+msgstr "Plantilla actualizada."
-#: ../../Zotlabs/Module/Invite.php:542
-msgid "Subject:"
-msgstr "Asunto:"
+#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:129
+msgid "Edit System Page Description"
+msgstr "Editor del Sistema de Descripción de Páginas"
-#: ../../Zotlabs/Module/Invite.php:548
-msgid "Here you may enter personal notes to the recipient(s)"
-msgstr "Aquí puede introducir notas personales para el/los destinatario(s)"
+#: ../../Zotlabs/Module/Pdledit.php:76 ../../Zotlabs/Module/Pdledit.php:93
+msgid "(modified)"
+msgstr "(modificado)"
-#: ../../Zotlabs/Module/Sse_bs.php:588
-msgid "Private forum"
-msgstr "Foro privado"
+#: ../../Zotlabs/Module/Pdledit.php:124
+msgid "Layout not found."
+msgstr "Plantilla no encontrada"
-#: ../../Zotlabs/Module/Sse_bs.php:588
-msgid "Public forum"
-msgstr "Foro público"
+#: ../../Zotlabs/Module/Pdledit.php:130
+msgid "Module Name:"
+msgstr "Nombre del módulo:"
-#: ../../Zotlabs/Module/Xchan.php:10
-msgid "Xchan Lookup"
-msgstr "Búsqueda de canales"
+#: ../../Zotlabs/Module/Pdledit.php:131
+msgid "Layout Help"
+msgstr "Ayuda para el diseño de plantillas de página"
-#: ../../Zotlabs/Module/Xchan.php:13
-msgid "Lookup xchan beginning with (or webbie): "
-msgstr "Buscar un canal (o un \"webbie\") que comience por:"
+#: ../../Zotlabs/Module/Pdledit.php:132
+msgid "Edit another layout"
+msgstr "Editar otro diseño"
-#: ../../Zotlabs/Module/Affinity.php:35
-msgid "Affinity Tool settings updated."
-msgstr "Actualización de los ajustes de Affinity Tool."
+#: ../../Zotlabs/Module/Pdledit.php:133
+msgid "System layout"
+msgstr "Diseño del sistema"
-#: ../../Zotlabs/Module/Affinity.php:54
-msgid ""
-"The numbers below represent the minimum and maximum slider default positions"
-" for your network/stream page as a percentage."
-msgstr "Los números que aparecen a continuación representan las posiciones predeterminadas mínimas y máximas de los controles deslizantes para su red/stream en forma de porcentaje."
+#: ../../Zotlabs/Module/Acl.php:370
+msgid "network"
+msgstr "red"
-#: ../../Zotlabs/Module/Affinity.php:61
-msgid "Default maximum affinity level"
-msgstr "Nivel máximo de afinidad por defecto"
+#: ../../Zotlabs/Module/Siteinfo.php:21
+msgid "About this site"
+msgstr "Acerca de este sitio"
-#: ../../Zotlabs/Module/Affinity.php:61
-msgid "0-99 default 99"
-msgstr "0-99 por defecto 99"
+#: ../../Zotlabs/Module/Siteinfo.php:22
+msgid "Site Name"
+msgstr "Nombre del sitio"
-#: ../../Zotlabs/Module/Affinity.php:67
-msgid "Default minimum affinity level"
-msgstr "Nivel mínimo de afinidad por defecto"
+#: ../../Zotlabs/Module/Siteinfo.php:26
+msgid "Administrator"
+msgstr "Administrador"
-#: ../../Zotlabs/Module/Affinity.php:67
-msgid "0-99 - default 0"
-msgstr "0-99 - por defecto 0"
+#: ../../Zotlabs/Module/Siteinfo.php:29
+msgid "Software and Project information"
+msgstr "Información sobre el software y el proyecto"
-#: ../../Zotlabs/Module/Affinity.php:73
-msgid "Persistent affinity levels"
-msgstr "Niveles de afinidad persistentes"
+#: ../../Zotlabs/Module/Siteinfo.php:30
+msgid "This site is powered by $Projectname"
+msgstr "Este sitio funciona con $Projectname"
-#: ../../Zotlabs/Module/Affinity.php:73
+#: ../../Zotlabs/Module/Siteinfo.php:31
msgid ""
-"If disabled the max and min levels will be reset to default after page "
-"reload"
-msgstr "Si está desactivado, los niveles máximo y mínimo se restablecerán a los valores predeterminados después de recargar la página."
-
-#: ../../Zotlabs/Module/Affinity.php:81
-msgid "Affinity Tool Settings"
-msgstr "Ajustes de Affinity Tool"
-
-#: ../../Zotlabs/Module/Settings/Network.php:42
-#: ../../Zotlabs/Module/Settings/Channel_home.php:46
-msgid "Max height of content (in pixels)"
-msgstr "Altura máxima del contenido (en píxeles)"
-
-#: ../../Zotlabs/Module/Settings/Network.php:44
-#: ../../Zotlabs/Module/Settings/Channel_home.php:48
-msgid "Click to expand content exceeding this height"
-msgstr "Haga clic para expandir el contenido que exceda esta altura"
-
-#: ../../Zotlabs/Module/Settings/Network.php:59
-msgid "Stream Settings"
-msgstr "Ajustes del stream"
-
-#: ../../Zotlabs/Module/Settings/Features.php:45
-msgid "Additional Features"
-msgstr "Funcionalidades"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:105
-#: ../../Zotlabs/Module/Settings/Channel.php:216
-msgid "Please select a channel role"
-msgstr "Por favor, seleccione un rol de canal"
+"Federated and decentralised networking and identity services provided by Zot"
+msgstr "Servicios federados y descentralizados de identidad y redes proporcionados por Zot"
-#: ../../Zotlabs/Module/Settings/Channel.php:193
-msgid "Your channel address is"
-msgstr "Su dirección de canal es"
+#: ../../Zotlabs/Module/Siteinfo.php:34
+msgid "Additional federated transport protocols:"
+msgstr "Protocolos adicionales de transporte federado: "
-#: ../../Zotlabs/Module/Settings/Channel.php:196
-msgid "Your files/photos are accessible via WebDAV at"
-msgstr "Sus archivos y fotos son accesibles a través de WebDAV en "
+#: ../../Zotlabs/Module/Siteinfo.php:36
+#, php-format
+msgid "Version %s"
+msgstr "Versión %s"
-#: ../../Zotlabs/Module/Settings/Channel.php:227
-msgid "Channel Settings"
-msgstr "Ajustes del canal"
+#: ../../Zotlabs/Module/Siteinfo.php:37
+msgid "Project homepage"
+msgstr "Página principal del proyecto"
-#: ../../Zotlabs/Module/Settings/Channel.php:234
-msgid "Basic Settings"
-msgstr "Configuración básica"
+#: ../../Zotlabs/Module/Siteinfo.php:38
+msgid "Developer homepage"
+msgstr "Página principal del desarrollador"
-#: ../../Zotlabs/Module/Settings/Channel.php:235
-msgid "Channel timezone:"
-msgstr "Zona horaria del canal: "
+#: ../../Zotlabs/Module/Attach.php:68
+msgid "Item not available."
+msgstr "Elemento no disponible"
-#: ../../Zotlabs/Module/Settings/Channel.php:236
-msgid "Default post location:"
-msgstr "Ubicación de publicación predeterminada: "
+#: ../../Zotlabs/Module/Tagger.php:50
+msgid "Post not found."
+msgstr "Mensaje no encontrado."
-#: ../../Zotlabs/Module/Settings/Channel.php:236
-msgid "Geographical location to display on your posts"
-msgstr "Localización geográfica que debe mostrarse en sus publicaciones"
+#: ../../Zotlabs/Module/Tagger.php:121
+#, php-format
+msgid "%1$s tagged %2$s's %3$s with %4$s"
+msgstr "%1$s ha etiquetado %3$s de %2$s con %4$s"
-#: ../../Zotlabs/Module/Settings/Channel.php:237
-msgid "Use browser location"
-msgstr "Usar la localización del navegador: "
+#: ../../Zotlabs/Module/Channel_calendar.php:62
+msgid "Event can not end before it has started."
+msgstr "Un evento no puede terminar antes de que haya comenzado."
-#: ../../Zotlabs/Module/Settings/Channel.php:238
-msgid "Adult content"
-msgstr "Contenido solo para adultos"
+#: ../../Zotlabs/Module/Channel_calendar.php:64
+#: ../../Zotlabs/Module/Channel_calendar.php:72
+#: ../../Zotlabs/Module/Channel_calendar.php:87
+msgid "Unable to generate preview."
+msgstr "No se puede crear la vista previa."
-#: ../../Zotlabs/Module/Settings/Channel.php:238
-msgid "This channel frequently or regularly publishes adult content"
-msgstr "Este canal publica con frecuencia o regularmente contenidos para adultos"
+#: ../../Zotlabs/Module/Channel_calendar.php:70
+msgid "Event title and start time are required."
+msgstr "Se requieren el título del evento y su hora de inicio."
-#: ../../Zotlabs/Module/Settings/Channel.php:239
-msgid "Maximum Friend Requests/Day:"
-msgstr "Máximo de solicitudes de amistad por día:"
+#: ../../Zotlabs/Module/Channel_calendar.php:85
+#: ../../Zotlabs/Module/Channel_calendar.php:226
+msgid "Event not found."
+msgstr "Evento no encontrado."
-#: ../../Zotlabs/Module/Settings/Channel.php:239
-msgid "May reduce spam activity"
-msgstr "Podría reducir la actividad de spam"
+#: ../../Zotlabs/Module/Channel_calendar.php:370
+msgid "Edit event"
+msgstr "Editar evento"
-#: ../../Zotlabs/Module/Settings/Channel.php:240
-#: ../../Zotlabs/Lib/Enotify.php:68
-msgid "Notification Settings"
-msgstr "Configuración de las notificaciones"
+#: ../../Zotlabs/Module/Channel_calendar.php:372
+msgid "Delete event"
+msgstr "Borrar evento"
-#: ../../Zotlabs/Module/Settings/Channel.php:241
-msgid "By default post a status message when:"
-msgstr "Por defecto, enviar un mensaje de estado cuando:"
+#: ../../Zotlabs/Module/Channel_calendar.php:406
+msgid "calendar"
+msgstr "calendario"
-#: ../../Zotlabs/Module/Settings/Channel.php:242
-msgid "accepting a friend request"
-msgstr "Acepte una solicitud de amistad"
+#: ../../Zotlabs/Module/Channel_calendar.php:493
+msgid "Failed to remove event"
+msgstr "Error al eliminar el evento"
-#: ../../Zotlabs/Module/Settings/Channel.php:243
-msgid "joining a forum/community"
-msgstr "al unirse a un foro o comunidad"
+#: ../../Zotlabs/Module/Regmod.php:15
+msgid "Please login."
+msgstr "Por favor, inicie sesión."
-#: ../../Zotlabs/Module/Settings/Channel.php:244
-msgid "making an <em>interesting</em> profile change"
-msgstr "Realice un cambio <em>interesante</em> en su perfil"
+#: ../../Zotlabs/Module/Defperms.php:252
+msgid "Connection Default Permissions"
+msgstr "Permisos predeterminados de conexión"
-#: ../../Zotlabs/Module/Settings/Channel.php:245
-msgid "Send a notification email when:"
-msgstr "Enviar una notificación por correo electrónico cuando:"
+#: ../../Zotlabs/Module/Defperms.php:253
+msgid "Apply these permissions automatically"
+msgstr "Aplicar estos permisos automaticamente"
-#: ../../Zotlabs/Module/Settings/Channel.php:246
-msgid "You receive a connection request"
-msgstr "Reciba una solicitud de conexión"
+#: ../../Zotlabs/Module/Defperms.php:253
+msgid ""
+"If enabled, connection requests will be approved without your interaction"
+msgstr "Si está habilitado, las solicitudes de conexión serán aprobadas sin su intervención."
-#: ../../Zotlabs/Module/Settings/Channel.php:247
-msgid "Your connections are confirmed"
-msgstr "Sus conexiones hayan sido confirmadas"
+#: ../../Zotlabs/Module/Defperms.php:254
+msgid "Permission role"
+msgstr "Permisos de rol"
-#: ../../Zotlabs/Module/Settings/Channel.php:248
-msgid "Someone writes on your profile wall"
-msgstr "Alguien escriba en la página de su perfil (\"muro\")"
+#: ../../Zotlabs/Module/Defperms.php:255
+msgid "Add permission role"
+msgstr "Añadir permisos de rol"
-#: ../../Zotlabs/Module/Settings/Channel.php:249
-msgid "Someone writes a followup comment"
-msgstr "Alguien escriba un comentario sobre sus publicaciones"
+#: ../../Zotlabs/Module/Defperms.php:260
+msgid "Automatic approval settings"
+msgstr "Opciones de autorización automática"
-#: ../../Zotlabs/Module/Settings/Channel.php:250
-msgid "You receive a private message"
-msgstr "Reciba un mensaje privado"
+#: ../../Zotlabs/Module/Defperms.php:263
+msgid "My Settings"
+msgstr "Mis ajustes"
-#: ../../Zotlabs/Module/Settings/Channel.php:251
-msgid "You receive a friend suggestion"
-msgstr "Reciba una sugerencia de amistad"
+#: ../../Zotlabs/Module/Defperms.php:267
+msgid ""
+"Some individual permissions may have been preset or locked based on your "
+"channel type and privacy settings."
+msgstr "Es posible que se hayan preestablecido o bloqueado algunos permisos individuales según el tipo de canal y la configuración de privacidad."
-#: ../../Zotlabs/Module/Settings/Channel.php:252
-msgid "You are tagged in a post"
-msgstr "Usted sea etiquetado en una publicación"
+#: ../../Zotlabs/Module/Thing.php:122
+msgid "Thing updated"
+msgstr "Elemento actualizado."
-#: ../../Zotlabs/Module/Settings/Channel.php:253
-msgid "You are poked/prodded/etc. in a post"
-msgstr "Reciba un toque o incitación en una publicación"
+#: ../../Zotlabs/Module/Thing.php:174
+msgid "Object store: failed"
+msgstr "Guardar objeto: ha fallado"
-#: ../../Zotlabs/Module/Settings/Channel.php:254
-msgid "Someone likes your post/comment"
-msgstr "Alguien muestre agrado por su entrada o comentario"
+#: ../../Zotlabs/Module/Thing.php:178
+msgid "Thing added"
+msgstr "Elemento añadido"
-#: ../../Zotlabs/Module/Settings/Channel.php:255
-msgid "Show visual notifications including:"
-msgstr "Mostrar notificaciones visuales que incluyan:"
+#: ../../Zotlabs/Module/Thing.php:204
+#, php-format
+msgid "OBJ: %1$s %2$s %3$s"
+msgstr "OBJ: %1$s %2$s %3$s"
-#: ../../Zotlabs/Module/Settings/Channel.php:256
-msgid "Unseen stream activity"
-msgstr "Actividad del stream no vista"
+#: ../../Zotlabs/Module/Thing.php:267
+msgid "Show Thing"
+msgstr "Mostrar elemento"
-#: ../../Zotlabs/Module/Settings/Channel.php:257
-msgid "Unseen channel activity"
-msgstr "Actividad no vista en el canal"
+#: ../../Zotlabs/Module/Thing.php:274
+msgid "item not found."
+msgstr "elemento no encontrado."
-#: ../../Zotlabs/Module/Settings/Channel.php:258
-msgid "Unseen private messages"
-msgstr "Mensajes privados no leídos"
+#: ../../Zotlabs/Module/Thing.php:307
+msgid "Edit Thing"
+msgstr "Editar elemento"
-#: ../../Zotlabs/Module/Settings/Channel.php:258
-#: ../../Zotlabs/Module/Settings/Channel.php:263
-#: ../../Zotlabs/Module/Settings/Channel.php:264
-#: ../../Zotlabs/Module/Settings/Channel.php:265
-msgid "Recommended"
-msgstr "Recomendado"
+#: ../../Zotlabs/Module/Thing.php:309 ../../Zotlabs/Module/Thing.php:366
+msgid "Select a profile"
+msgstr "Seleccionar un perfil"
-#: ../../Zotlabs/Module/Settings/Channel.php:259
-msgid "Upcoming events"
-msgstr "Próximos eventos"
+#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
+msgid "Post an activity"
+msgstr "Publicar una actividad"
-#: ../../Zotlabs/Module/Settings/Channel.php:260
-msgid "Events today"
-msgstr "Eventos de hoy"
+#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
+msgid "Only sends to viewers of the applicable profile"
+msgstr "Sólo enviar a espectadores del perfil pertinente."
-#: ../../Zotlabs/Module/Settings/Channel.php:261
-msgid "Upcoming birthdays"
-msgstr "Próximos cumpleaños"
+#: ../../Zotlabs/Module/Thing.php:315 ../../Zotlabs/Module/Thing.php:371
+msgid "Name of thing e.g. something"
+msgstr "Nombre del elemento, p. ej.:. \"algo\""
-#: ../../Zotlabs/Module/Settings/Channel.php:261
-msgid "Not available in all themes"
-msgstr "No disponible en todos los temas"
+#: ../../Zotlabs/Module/Thing.php:317 ../../Zotlabs/Module/Thing.php:372
+msgid "URL of thing (optional)"
+msgstr "Dirección del elemento (opcional)"
-#: ../../Zotlabs/Module/Settings/Channel.php:262
-msgid "System (personal) notifications"
-msgstr "Notificaciones del sistema (personales)"
+#: ../../Zotlabs/Module/Thing.php:319 ../../Zotlabs/Module/Thing.php:373
+msgid "URL for photo of thing (optional)"
+msgstr "Dirección para la foto o elemento (opcional)"
-#: ../../Zotlabs/Module/Settings/Channel.php:263
-msgid "System info messages"
-msgstr "Mensajes de información del sistema"
+#: ../../Zotlabs/Module/Thing.php:364
+msgid "Add Thing to your Profile"
+msgstr "Añadir alguna cosa a su perfil"
-#: ../../Zotlabs/Module/Settings/Channel.php:264
-msgid "System critical alerts"
-msgstr "Alertas críticas del sistema"
+#: ../../Zotlabs/Module/Editblock.php:138
+msgid "Edit Block"
+msgstr "Modificar este bloque"
-#: ../../Zotlabs/Module/Settings/Channel.php:265
-msgid "New connections"
-msgstr "Nuevas conexiones"
+#: ../../Zotlabs/Module/Sharedwithme.php:106
+msgid "Files: shared with me"
+msgstr "Ficheros: compartidos conmigo"
-#: ../../Zotlabs/Module/Settings/Channel.php:266
-msgid "System Registrations"
-msgstr "Registros del sistema"
+#: ../../Zotlabs/Module/Sharedwithme.php:108
+msgid "NEW"
+msgstr "NUEVO"
-#: ../../Zotlabs/Module/Settings/Channel.php:267
-msgid "Unseen shared files"
-msgstr "Ficheros compartidos no vistos"
+#: ../../Zotlabs/Module/Sharedwithme.php:110
+#: ../../Zotlabs/Storage/Browser.php:383
+msgid "Last Modified"
+msgstr "Última modificación"
-#: ../../Zotlabs/Module/Settings/Channel.php:268
-msgid "Unseen public stream activity"
-msgstr "Actividad del stream público no vista"
+#: ../../Zotlabs/Module/Sharedwithme.php:111
+msgid "Remove all files"
+msgstr "Eliminar todos los ficheros"
-#: ../../Zotlabs/Module/Settings/Channel.php:269
-msgid "Unseen likes and dislikes"
-msgstr "Los \"me gusta\" y \"no me gusta\" no vistos"
+#: ../../Zotlabs/Module/Sharedwithme.php:112
+msgid "Remove this file"
+msgstr "Eliminar este fichero"
-#: ../../Zotlabs/Module/Settings/Channel.php:270
-msgid "Unseen forum posts"
-msgstr "Entradas no vistas en el foro"
+#: ../../Zotlabs/Module/Setup.php:179
+msgid "$Projectname Server - Setup"
+msgstr "Servidor $Projectname - Instalación"
-#: ../../Zotlabs/Module/Settings/Channel.php:271
-msgid "Email notification hub (hostname)"
-msgstr "Email de notificación del hub (nombre del host)"
+#: ../../Zotlabs/Module/Setup.php:183
+msgid "Could not connect to database."
+msgstr "No se ha podido conectar a la base de datos."
-#: ../../Zotlabs/Module/Settings/Channel.php:271
-#, php-format
+#: ../../Zotlabs/Module/Setup.php:187
msgid ""
-"If your channel is mirrored to multiple hubs, set this to your preferred "
-"location. This will prevent duplicate email notifications. Example: %s"
-msgstr "Si su canal está replicado en múltiples hubs, colóquelo en su ubicación preferida. Esto evitará la duplicación de notificaciones por correo electrónico. Ejemplo: %s"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:272
-msgid "Show new wall posts, private messages and connections under Notices"
-msgstr "Mostrar nuevos mensajes en el muro, mensajes privados y conexiones en Avisos"
+"Could not connect to specified site URL. Possible SSL certificate or DNS "
+"issue."
+msgstr "No se puede conectar con la dirección del sitio indicada. Podría tratarse de un problema de SSL o DNS."
-#: ../../Zotlabs/Module/Settings/Channel.php:273
-msgid "Mark all notices of the thread read if a notice is clicked"
-msgstr "Marcar todos los avisos del hilo como leídos si se hace clic en un aviso"
+#: ../../Zotlabs/Module/Setup.php:194
+msgid "Could not create table."
+msgstr "No se puede crear la tabla."
-#: ../../Zotlabs/Module/Settings/Channel.php:273
-msgid "If no, only the clicked notice will be marked read"
-msgstr "Si no, sólo se marcará como leída la notificación en la que se haya hecho clic"
+#: ../../Zotlabs/Module/Setup.php:200
+msgid "Your site database has been installed."
+msgstr "La base de datos del sitio ha sido instalada."
-#: ../../Zotlabs/Module/Settings/Channel.php:274
+#: ../../Zotlabs/Module/Setup.php:206
msgid ""
-"Desktop notifications are unavailable because the required browser "
-"permission has not been granted"
-msgstr "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso necesario al navegador"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:275
-msgid "Grant permission"
-msgstr "Permiso concedido"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:276
-msgid "Notify me of events this many days in advance"
-msgstr "Avisarme de los eventos con algunos días de antelación"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:276
-msgid "Must be greater than 0"
-msgstr "Debe ser mayor que 0"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:279
-msgid "Default photo upload folder"
-msgstr "Carpeta por defecto de las fotos subidas"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:279
-#: ../../Zotlabs/Module/Settings/Channel.php:280
-msgid "%Y - current year, %m - current month"
-msgstr "%Y - año en curso, %m - mes actual"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:280
-msgid "Default file upload folder"
-msgstr "Carpeta por defecto de los ficheros subidos"
-
-#: ../../Zotlabs/Module/Settings/Channel.php:282
-msgid "Remove this channel."
-msgstr "Eliminar este canal."
-
-#: ../../Zotlabs/Module/Settings/Channel.php:283
-msgid "Expire other channel content after this many days"
-msgstr "Caducar contenido de otros canales después de este número de días"
+"You may need to import the file \"install/schema_xxx.sql\" manually using a "
+"database client."
+msgstr "Podría tener que importar manualmente el fichero \"install/schema_xxx.sql\" usando un cliente de base de datos."
-#: ../../Zotlabs/Module/Settings/Channel.php:283
-msgid "0 or blank to use the website limit."
-msgstr "0 o en blanco para usar el límite del sitio web."
+#: ../../Zotlabs/Module/Setup.php:207 ../../Zotlabs/Module/Setup.php:271
+#: ../../Zotlabs/Module/Setup.php:778
+msgid "Please see the file \"install/INSTALL.txt\"."
+msgstr "Por favor, lea el fichero \"install/INSTALL.txt\"."
-#: ../../Zotlabs/Module/Settings/Channel.php:283
-#, php-format
-msgid "This website expires after %d days."
-msgstr "Este sitio web caduca después de %d días."
+#: ../../Zotlabs/Module/Setup.php:268
+msgid "System check"
+msgstr "Verificación del sistema"
-#: ../../Zotlabs/Module/Settings/Channel.php:283
-msgid "This website does not expire imported content."
-msgstr "Este sitio web no caduca el contenido importado."
+#: ../../Zotlabs/Module/Setup.php:273
+msgid "Check again"
+msgstr "Verificar de nuevo"
-#: ../../Zotlabs/Module/Settings/Channel.php:283
-msgid "The website limit takes precedence if lower than your limit."
-msgstr "El límite del sitio web tiene prioridad si es inferior a su propio límite."
+#: ../../Zotlabs/Module/Setup.php:294
+msgid "Database connection"
+msgstr "Conexión a la base de datos"
-#: ../../Zotlabs/Module/Settings/Channel.php:284
-#: ../../Zotlabs/Module/Settings/Channel.php:285
+#: ../../Zotlabs/Module/Setup.php:295
msgid ""
-"Words one per line or #tags, $categories, /patterns/, lang=xx, lang!=xx - "
-"leave blank to import all posts"
-msgstr "Palabras una por línea o #tags, $categories, /patterns/, lang=xx, lang!=xx - dejar en blanco para importar todas las entradas"
-
-#: ../../Zotlabs/Module/Settings/Account.php:21
-msgid "Not valid email."
-msgstr "Correo electrónico no válido."
-
-#: ../../Zotlabs/Module/Settings/Account.php:24
-msgid "Protected email address. Cannot change to that email."
-msgstr "Dirección de correo electrónico protegida. No se puede cambiar a ella."
-
-#: ../../Zotlabs/Module/Settings/Account.php:33
-msgid "System failure storing new email. Please try again."
-msgstr "Fallo de sistema al guardar el nuevo correo electrónico. Por favor, inténtelo de nuevo."
-
-#: ../../Zotlabs/Module/Settings/Account.php:51
-msgid "Password verification failed."
-msgstr "La comprobación de la contraseña ha fallado."
-
-#: ../../Zotlabs/Module/Settings/Account.php:58
-msgid "Passwords do not match. Password unchanged."
-msgstr "Las contraseñas no coinciden. La contraseña no se ha cambiado."
-
-#: ../../Zotlabs/Module/Settings/Account.php:62
-msgid "Empty passwords are not allowed. Password unchanged."
-msgstr "No se permiten contraseñas vacías. La contraseña no se ha cambiado."
-
-#: ../../Zotlabs/Module/Settings/Account.php:76
-msgid "Password changed."
-msgstr "Contraseña cambiada."
-
-#: ../../Zotlabs/Module/Settings/Account.php:78
-msgid "Password update failed. Please try again."
-msgstr "La actualización de la contraseña ha fallado. Por favor, inténtalo de nuevo."
-
-#: ../../Zotlabs/Module/Settings/Account.php:103
-msgid "Account Settings"
-msgstr "Configuración de la cuenta"
-
-#: ../../Zotlabs/Module/Settings/Account.php:104
-msgid "Current Password"
-msgstr "Contraseña actual"
-
-#: ../../Zotlabs/Module/Settings/Account.php:105
-msgid "Enter New Password"
-msgstr "Escribir una nueva contraseña"
-
-#: ../../Zotlabs/Module/Settings/Account.php:106
-msgid "Confirm New Password"
-msgstr "Confirmar la nueva contraseña"
-
-#: ../../Zotlabs/Module/Settings/Account.php:106
-msgid "Leave password fields blank unless changing"
-msgstr "Dejar en blanco la contraseña a menos que desee cambiarla."
-
-#: ../../Zotlabs/Module/Settings/Account.php:108
-msgid "DId2 or Email Address:"
-msgstr "Did2 o dirección de correo electrónico: "
-
-#: ../../Zotlabs/Module/Settings/Account.php:110
-msgid "Remove this account including all its channels"
-msgstr "Eliminar esta cuenta incluyendo todos sus canales"
-
-#: ../../Zotlabs/Module/Settings/Featured.php:25
-msgid "No feature settings configured"
-msgstr "No se ha establecido la configuración de los complementos"
-
-#: ../../Zotlabs/Module/Settings/Featured.php:34
-msgid "Addon Settings"
-msgstr "Ajustes de los complementos"
-
-#: ../../Zotlabs/Module/Settings/Featured.php:35
-msgid "Please save/submit changes to any panel before opening another."
-msgstr "Guarde o envíe los cambios a cualquier panel antes de abrir otro."
-
-#: ../../Zotlabs/Module/Settings/Events.php:40
-msgid "Events Settings"
-msgstr "Gestión de eventos"
-
-#: ../../Zotlabs/Module/Settings/Manage.php:41
-msgid "Channel Manager Settings"
-msgstr "Ajustes del administrador de canales"
+"In order to install $Projectname we need to know how to connect to your "
+"database."
+msgstr "Para instalar $Projectname es necesario saber cómo conectar con su base de datos."
-#: ../../Zotlabs/Module/Settings/Channel_home.php:61
-msgid "Personal menu to display in your channel pages"
-msgstr "Menú personal que debe mostrarse en las páginas de su canal"
+#: ../../Zotlabs/Module/Setup.php:296
+msgid ""
+"Please contact your hosting provider or site administrator if you have "
+"questions about these settings."
+msgstr "Por favor, contacte con el proveedor de servicios o el administrador del sitio si tiene dudas sobre estos ajustes."
-#: ../../Zotlabs/Module/Settings/Channel_home.php:88
-msgid "Channel Home Settings"
-msgstr "Ajustes del canal"
+#: ../../Zotlabs/Module/Setup.php:297
+msgid ""
+"The database you specify below should already exist. If it does not, please "
+"create it before continuing."
+msgstr "La base de datos que especifique a continuación debe existir ya. Si no es así, por favor, créela antes de seguir."
-#: ../../Zotlabs/Module/Settings/Calendar.php:40
-msgid "Calendar Settings"
-msgstr "Ajustes del calendario"
+#: ../../Zotlabs/Module/Setup.php:301
+msgid "Database Server Name"
+msgstr "Nombre del servidor de base de datos"
-#: ../../Zotlabs/Module/Settings/Display.php:125
-#, php-format
-msgid "%s - (Experimental)"
-msgstr "%s - (Experimental)"
+#: ../../Zotlabs/Module/Setup.php:301
+msgid "Default is 127.0.0.1"
+msgstr "De forma predeterminada es 127.0.0.1"
-#: ../../Zotlabs/Module/Settings/Display.php:181
-msgid "Display Settings"
-msgstr "Ajustes de visualización"
+#: ../../Zotlabs/Module/Setup.php:302
+msgid "Database Port"
+msgstr "Puerto de la base de datos"
-#: ../../Zotlabs/Module/Settings/Display.php:182
-msgid "Theme Settings"
-msgstr "Ajustes del tema"
+#: ../../Zotlabs/Module/Setup.php:302
+msgid "Communication port number - use 0 for default"
+msgstr "Número del puerto de comunicaciones - use 0 como valor por defecto"
-#: ../../Zotlabs/Module/Settings/Display.php:183
-msgid "Custom Theme Settings"
-msgstr "Ajustes personalizados del tema"
+#: ../../Zotlabs/Module/Setup.php:303
+msgid "Database Login Name"
+msgstr "Usuario de la base de datos"
-#: ../../Zotlabs/Module/Settings/Display.php:184
-msgid "Content Settings"
-msgstr "Ajustes del contenido"
+#: ../../Zotlabs/Module/Setup.php:304
+msgid "Database Login Password"
+msgstr "Contraseña de acceso a la base de datos"
-#: ../../Zotlabs/Module/Settings/Display.php:190
-msgid "Display Theme:"
-msgstr "Tema gráfico del perfil:"
+#: ../../Zotlabs/Module/Setup.php:305
+msgid "Database Name"
+msgstr "Nombre de la base de datos"
-#: ../../Zotlabs/Module/Settings/Display.php:191
-msgid "Select scheme"
-msgstr "Elegir un esquema"
+#: ../../Zotlabs/Module/Setup.php:306
+msgid "Database Type"
+msgstr "Tipo de base de datos"
-#: ../../Zotlabs/Module/Settings/Display.php:193
-msgid "Preload images before rendering the page"
-msgstr "Carga previa de las imágenes antes de generar la página"
+#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
+msgid "Site administrator email address"
+msgstr "Dirección de correo electrónico del administrador del sitio"
-#: ../../Zotlabs/Module/Settings/Display.php:193
+#: ../../Zotlabs/Module/Setup.php:308 ../../Zotlabs/Module/Setup.php:348
msgid ""
-"The subjective page load time will be longer but the page will be ready when"
-" displayed"
-msgstr "El tiempo subjetivo de carga de la página será más largo, pero la página estará lista cuando se muestre."
-
-#: ../../Zotlabs/Module/Settings/Display.php:194
-msgid "Enable user zoom on mobile devices"
-msgstr "Habilitar zoom de usuario en dispositivos móviles"
-
-#: ../../Zotlabs/Module/Settings/Display.php:195
-msgid "Update browser every xx seconds"
-msgstr "Actualizar navegador cada xx segundos"
-
-#: ../../Zotlabs/Module/Settings/Display.php:195
-msgid "Minimum of 10 seconds, no maximum"
-msgstr "Mínimo de 10 segundos, sin máximo"
-
-#: ../../Zotlabs/Module/Settings/Display.php:196
-msgid "Maximum number of conversations to load at any time:"
-msgstr "Máximo número de conversaciones a cargar en cualquier momento:"
-
-#: ../../Zotlabs/Module/Settings/Display.php:196
-msgid "Maximum of 30 items"
-msgstr "Máximo de 30 elementos"
-
-#: ../../Zotlabs/Module/Settings/Display.php:197
-msgid "Show emoticons (smilies) as images"
-msgstr "Mostrar emoticonos (smilies) como imágenes"
-
-#: ../../Zotlabs/Module/Settings/Display.php:198
-msgid "Link post titles to source"
-msgstr "Enlazar título de la publicación a la fuente original"
+"Your account email address must match this in order to use the web admin "
+"panel."
+msgstr "Su cuenta deberá usar la misma dirección de correo electrónico para poder utilizar el panel de administración web."
-#: ../../Zotlabs/Module/Settings/Display.php:200
-msgid "Display new member quick links menu"
-msgstr "Mostrar el menú de enlaces rápidos para nuevos miembros"
+#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+msgid "Website URL"
+msgstr "Dirección del sitio web"
-#: ../../Zotlabs/Module/Settings/Directory.php:40
-msgid "Directory Settings"
-msgstr "Configuración del directorio"
+#: ../../Zotlabs/Module/Setup.php:309 ../../Zotlabs/Module/Setup.php:350
+msgid "Please use SSL (https) URL if available."
+msgstr "Por favor, use SSL (https) si está disponible."
-#: ../../Zotlabs/Module/Settings/Editor.php:40
-msgid "Editor Settings"
-msgstr "Ajustes del editor"
+#: ../../Zotlabs/Module/Setup.php:310 ../../Zotlabs/Module/Setup.php:352
+msgid "Please select a default timezone for your website"
+msgstr "Por favor, selecciones el huso horario por defecto de su sitio web"
-#: ../../Zotlabs/Module/Settings/Connections.php:40
-msgid "Connections Settings"
-msgstr "Gestión de las conexiones"
+#: ../../Zotlabs/Module/Setup.php:337
+msgid "Site settings"
+msgstr "Ajustes del sitio"
-#: ../../Zotlabs/Module/Settings/Photos.php:40
-msgid "Photos Settings"
-msgstr "Gestión de las fotos"
+#: ../../Zotlabs/Module/Setup.php:391
+msgid "PHP version 8.0 or greater is required."
+msgstr "Se requiere la versión 8.0 o superior de PHP."
-#: ../../Zotlabs/Module/Settings/Profiles.php:41
-msgid "Default profile for new contacts"
-msgstr "Perfil predeterminado para nuevos contactos"
+#: ../../Zotlabs/Module/Setup.php:392
+msgid "PHP version"
+msgstr "Versión de PHP"
-#: ../../Zotlabs/Module/Settings/Profiles.php:49
-msgid "Profiles Settings"
-msgstr "Gestión de los perfiles"
+#: ../../Zotlabs/Module/Setup.php:408
+msgid "Could not find a command line version of PHP in the web server PATH."
+msgstr "No se puede encontrar una versión en línea de comandos de PHP en la ruta del servidor web."
-#: ../../Zotlabs/Module/Settings/Privacy.php:39
-msgid "Privacy settings updated."
-msgstr "Se ha actualizado la configuración de la privacidad."
+#: ../../Zotlabs/Module/Setup.php:409
+msgid ""
+"If you don't have a command line version of PHP installed on server, you "
+"will not be able to run background polling via cron."
+msgstr "Si no tiene instalada la versión de línea de comandos de PHP en su servidor, no podrá realizar envíos en segundo plano mediante cron."
-#: ../../Zotlabs/Module/Settings/Privacy.php:57
-msgid "Only those you specifically allow"
-msgstr "Solo aquellos a los que usted permita explícitamente"
+#: ../../Zotlabs/Module/Setup.php:413
+msgid "PHP executable path"
+msgstr "Ruta del ejecutable PHP"
-#: ../../Zotlabs/Module/Settings/Privacy.php:58
-msgid "Approved connections"
-msgstr "Conexiones aprobadas"
+#: ../../Zotlabs/Module/Setup.php:413
+msgid ""
+"Enter full path to php executable. You can leave this blank to continue the "
+"installation."
+msgstr "Introducir la ruta completa del ejecutable PHP. Puede dejar la línea en blanco para continuar la instalación."
-#: ../../Zotlabs/Module/Settings/Privacy.php:59
-msgid "Any connections"
-msgstr "Cualquier conexión"
+#: ../../Zotlabs/Module/Setup.php:418
+msgid "Command line PHP"
+msgstr "PHP en línea de comandos"
-#: ../../Zotlabs/Module/Settings/Privacy.php:60
-msgid "Anybody on this website"
-msgstr "Cualquiera en este sitio web"
+#: ../../Zotlabs/Module/Setup.php:428
+msgid ""
+"Unable to check command line PHP, as shell_exec() is disabled. This is "
+"required."
+msgstr "No se puede comprobar la línea de comandos PHP, ya que shell_exec() está deshabilitado. Es necesario que esté activado."
-#: ../../Zotlabs/Module/Settings/Privacy.php:61
-msgid "Anybody in this network"
-msgstr "Cualquiera en esta red"
+#: ../../Zotlabs/Module/Setup.php:432
+msgid ""
+"The command line version of PHP on your system does not have "
+"\"register_argc_argv\" enabled."
+msgstr "La línea de comandos PHP de su sistema no tiene activado \"register_argc_argv\"."
-#: ../../Zotlabs/Module/Settings/Privacy.php:62
-msgid "Anybody authenticated"
-msgstr "Cualquiera que esté autenticado"
+#: ../../Zotlabs/Module/Setup.php:433
+msgid "This is required for message delivery to work."
+msgstr "Esto es necesario para que funcione la transmisión de mensajes."
-#: ../../Zotlabs/Module/Settings/Privacy.php:63
-msgid "Anybody on the internet"
-msgstr "Cualquiera en internet"
+#: ../../Zotlabs/Module/Setup.php:436
+msgid "PHP register_argc_argv"
+msgstr "PHP register_argc_argv"
-#: ../../Zotlabs/Module/Settings/Privacy.php:73
+#: ../../Zotlabs/Module/Setup.php:456
msgid ""
-"Advise: set to \"Anybody on the internet\" and use privacy groups to "
-"restrict access"
-msgstr "Consejo: establezca la opción \"Cualquiera en Internet\" y utilice los grupos de privacidad para restringir el acceso"
+"This is not sufficient to upload larger images or files. You should be able "
+"to upload at least 4 MB at once."
+msgstr "Esto no es suficiente para subir imágenes o archivos más grandes. Usted debe ser capaz de subir al menos 4 MB a la vez."
-#: ../../Zotlabs/Module/Settings/Privacy.php:109
-msgid "Privacy Settings"
-msgstr "Ajustes de privacidad"
+#: ../../Zotlabs/Module/Setup.php:458
+#, php-format
+msgid ""
+"Your max allowed total upload size is set to %s. Maximum size of one file to"
+" upload is set to %s. You are allowed to upload up to %d files at once."
+msgstr "La carga máxima que se le permite subir está establecida en %s. El tamaño máximo de un fichero está establecido en %s. Está permitido subir hasta un máximo de %d ficheros de una sola vez."
-#: ../../Zotlabs/Module/Settings/Privacy.php:114
-msgid "Advanced configuration"
-msgstr "Ajustes avanzados"
+#: ../../Zotlabs/Module/Setup.php:464
+msgid "You can adjust these settings in the server php.ini file."
+msgstr "Puede ajustar estos valores en el fichero php.ini de su servidor."
-#: ../../Zotlabs/Module/Settings/Privacy.php:116
-msgid "Proceed with caution"
-msgstr "Proceda con precaución"
+#: ../../Zotlabs/Module/Setup.php:466
+msgid "PHP upload limits"
+msgstr "Límites PHP de subida"
-#: ../../Zotlabs/Module/Settings/Privacy.php:117
+#: ../../Zotlabs/Module/Setup.php:489
msgid ""
-"Changing advanced configuration settings can impact your, and your contacts "
-"channels functionality and security."
-msgstr "El cambio de los ajustes de configuración avanzada puede afectar a la funcionalidad y seguridad de sus canales y contactos."
+"Error: the \"openssl_pkey_new\" function on this system is not able to "
+"generate encryption keys"
+msgstr "Error: La función \"openssl_pkey_new\" en este sistema no es capaz de general claves de cifrado."
-#: ../../Zotlabs/Module/Settings/Privacy.php:118
-msgid "Accept the risk and continue"
-msgstr "Aceptar el riesgo y continuar"
+#: ../../Zotlabs/Module/Setup.php:490
+msgid ""
+"If running under Windows, please see "
+"\"http://www.php.net/manual/en/openssl.installation.php\"."
+msgstr "Si está en un servidor Windows, por favor, lea \"http://www.php.net/manual/en/openssl.installation.php\"."
-#: ../../Zotlabs/Module/Settings/Privacy.php:120
-msgid "Automatically approve new contacts"
-msgstr "Aprobar automáticamente nuevos contactos"
+#: ../../Zotlabs/Module/Setup.php:493
+msgid "Generate encryption keys"
+msgstr "Generar claves de cifrado"
-#: ../../Zotlabs/Module/Settings/Privacy.php:121
-msgid "Opt-out of search engine indexing"
-msgstr "Exclusión de la indexación en los motores de búsqueda"
+#: ../../Zotlabs/Module/Setup.php:510
+msgid "libCurl PHP module"
+msgstr "módulo libCurl PHP"
-#: ../../Zotlabs/Module/Settings/Privacy.php:122
-msgid "Group actor"
-msgstr "Grupo de actores"
+#: ../../Zotlabs/Module/Setup.php:511
+msgid "GD graphics PHP module"
+msgstr "módulo PHP GD graphics"
-#: ../../Zotlabs/Module/Settings/Privacy.php:122
-msgid "Allow this channel to act as a forum"
-msgstr "Permitir que este canal actúe como un foro"
+#: ../../Zotlabs/Module/Setup.php:512
+msgid "OpenSSL PHP module"
+msgstr "módulo PHP OpenSSL"
-#: ../../Zotlabs/Module/Settings/Conversation.php:23
-msgid "Settings saved."
-msgstr "Configuración guardada."
+#: ../../Zotlabs/Module/Setup.php:513
+msgid "PDO database PHP module"
+msgstr "Módulo PHP de la base de datos PDO "
-#: ../../Zotlabs/Module/Settings/Conversation.php:25
-msgid "Settings saved. Reload page please."
-msgstr "Ajustes guardados. Recargue la página, por favor."
+#: ../../Zotlabs/Module/Setup.php:514
+msgid "mb_string PHP module"
+msgstr "módulo PHP mb_string"
-#: ../../Zotlabs/Module/Settings/Conversation.php:47
-msgid "Conversation Settings"
-msgstr "Ajustes de conversación"
+#: ../../Zotlabs/Module/Setup.php:515
+msgid "xml PHP module"
+msgstr "módulo PHP xml"
-#: ../../Zotlabs/Module/Menu.php:68
-msgid "Unable to update menu."
-msgstr "No se puede actualizar el menú."
+#: ../../Zotlabs/Module/Setup.php:516
+msgid "zip PHP module"
+msgstr "Módulo zip PHP"
-#: ../../Zotlabs/Module/Menu.php:79
-msgid "Unable to create menu."
-msgstr "No se puede crear el menú."
+#: ../../Zotlabs/Module/Setup.php:520 ../../Zotlabs/Module/Setup.php:522
+msgid "Apache mod_rewrite module"
+msgstr "módulo Apache mod_rewrite "
-#: ../../Zotlabs/Module/Menu.php:161 ../../Zotlabs/Module/Menu.php:174
-msgid "Menu Name"
-msgstr "Nombre del menú"
+#: ../../Zotlabs/Module/Setup.php:520
+msgid ""
+"Error: Apache webserver mod-rewrite module is required but not installed."
+msgstr "Error: se necesita el módulo del servidor web Apache mod-rewrite pero no está instalado."
-#: ../../Zotlabs/Module/Menu.php:161
-msgid "Unique name (not visible on webpage) - required"
-msgstr "Nombre único (no será visible en la página web) - requerido"
+#: ../../Zotlabs/Module/Setup.php:526 ../../Zotlabs/Module/Setup.php:529
+msgid "exec"
+msgstr "ejecutable"
-#: ../../Zotlabs/Module/Menu.php:162 ../../Zotlabs/Module/Menu.php:175
-msgid "Menu Title"
-msgstr "Título del menú"
+#: ../../Zotlabs/Module/Setup.php:526
+msgid ""
+"Error: exec is required but is either not installed or has been disabled in "
+"php.ini"
+msgstr "Error: se necesita un ejecutable pero o no se instaló o está deshabilitado en php.ini"
-#: ../../Zotlabs/Module/Menu.php:162
-msgid "Visible on webpage - leave empty for no title"
-msgstr "Visible en la página web - no ponga nada si no desea un título"
+#: ../../Zotlabs/Module/Setup.php:532 ../../Zotlabs/Module/Setup.php:535
+msgid "shell_exec"
+msgstr "shell_exec"
-#: ../../Zotlabs/Module/Menu.php:163
-msgid "Allow Bookmarks"
-msgstr "Permitir marcadores"
+#: ../../Zotlabs/Module/Setup.php:532
+msgid ""
+"Error: shell_exec is required but is either not installed or has been "
+"disabled in php.ini"
+msgstr "Error: se necesita shell_exec pero o no se instaló o está deshabilitado en php.ini"
-#: ../../Zotlabs/Module/Menu.php:163 ../../Zotlabs/Module/Menu.php:222
-msgid "Menu may be used to store saved bookmarks"
-msgstr "El menú se puede usar para guardar marcadores"
+#: ../../Zotlabs/Module/Setup.php:540
+msgid "Error: libCURL PHP module required but not installed."
+msgstr "Error: se necesita el módulo PHP libCURL pero no está instalado."
-#: ../../Zotlabs/Module/Menu.php:164 ../../Zotlabs/Module/Menu.php:225
-msgid "Submit and proceed"
-msgstr "Enviar y proceder"
+#: ../../Zotlabs/Module/Setup.php:544
+msgid ""
+"Error: GD PHP module with JPEG support or ImageMagick graphics library "
+"required but not installed."
+msgstr "Error: Se requiere el módulo GD PHP con soporte para JPEG o la biblioteca de gráficos ImageMagick, pero no está instalado."
-#: ../../Zotlabs/Module/Menu.php:177 ../../Zotlabs/Module/Locs.php:124
-msgid "Drop"
-msgstr "Eliminar"
+#: ../../Zotlabs/Module/Setup.php:548
+msgid "Error: openssl PHP module required but not installed."
+msgstr "Error: el módulo PHP openssl es necesario, pero no está instalado."
-#: ../../Zotlabs/Module/Menu.php:181
-msgid "Bookmarks allowed"
-msgstr "Marcadores permitidos"
+#: ../../Zotlabs/Module/Setup.php:554
+msgid ""
+"Error: PDO database PHP module missing a driver for either mysql or pgsql."
+msgstr "Error: El módulo PHP de la base de datos PDO carece de un controlador para mysql o pgsql."
-#: ../../Zotlabs/Module/Menu.php:183
-msgid "Delete this menu"
-msgstr "Borrar este menú"
+#: ../../Zotlabs/Module/Setup.php:559
+msgid "Error: PDO database PHP module required but not installed."
+msgstr "Error: se necesita el módulo PHP de la base de datos PDO, pero no está instalado."
-#: ../../Zotlabs/Module/Menu.php:184 ../../Zotlabs/Module/Menu.php:219
-msgid "Edit menu contents"
-msgstr "Editar los contenidos del menú"
+#: ../../Zotlabs/Module/Setup.php:563
+msgid "Error: mb_string PHP module required but not installed."
+msgstr "Error: el módulo PHP mb_string es necesario, pero no está instalado."
-#: ../../Zotlabs/Module/Menu.php:185
-msgid "Edit this menu"
-msgstr "Modificar este menú"
+#: ../../Zotlabs/Module/Setup.php:567
+msgid "Error: xml PHP module required for DAV but not installed."
+msgstr "Error: el módulo PHP xml es necesario para DAV, pero no está instalado."
-#: ../../Zotlabs/Module/Menu.php:201
-msgid "Menu could not be deleted."
-msgstr "El menú no puede ser eliminado."
+#: ../../Zotlabs/Module/Setup.php:571
+msgid "Error: zip PHP module required but not installed."
+msgstr "Error: se requiere el módulo zip PHP pero no está instalado."
-#: ../../Zotlabs/Module/Menu.php:214
-msgid "Edit Menu"
-msgstr "Modificar el menú"
+#: ../../Zotlabs/Module/Setup.php:590 ../../Zotlabs/Module/Setup.php:599
+msgid ".htconfig.php is writable"
+msgstr ".htconfig.php tiene permisos de escritura"
-#: ../../Zotlabs/Module/Menu.php:218
-msgid "Add or remove entries to this menu"
-msgstr "Añadir o quitar entradas en este menú"
+#: ../../Zotlabs/Module/Setup.php:595
+msgid ""
+"The web installer needs to be able to create a file called \".htconfig.php\""
+" in the top folder of your web server and it is unable to do so."
+msgstr "El instalador web no ha podido crear un fichero llamado “.htconfig.php” en la carpeta base de su servidor."
-#: ../../Zotlabs/Module/Menu.php:220
-msgid "Menu name"
-msgstr "Nombre del menú"
+#: ../../Zotlabs/Module/Setup.php:596
+msgid ""
+"This is most often a permission setting, as the web server may not be able "
+"to write files in your folder - even if you can."
+msgstr "Esto está generalmente ligado a un problema de permisos, a causa del cual el servidor web tiene prohibido modificar ficheros en su carpeta - incluso si usted mismo tiene esos permisos."
-#: ../../Zotlabs/Module/Menu.php:220
-msgid "Must be unique, only seen by you"
-msgstr "Debe ser único, solo será visible para usted"
+#: ../../Zotlabs/Module/Setup.php:597
+msgid "Please see install/INSTALL.txt for additional information."
+msgstr "Por favor, consulte install/INSTALL.txt para más información."
-#: ../../Zotlabs/Module/Menu.php:221
-msgid "Menu title"
-msgstr "Título del menú"
+#: ../../Zotlabs/Module/Setup.php:613
+msgid ""
+"This software uses the Smarty3 template engine to render its web views. "
+"Smarty3 compiles templates to PHP to speed up rendering."
+msgstr "Este software hace uso del motor de plantillas Smarty3 para diseñar sus plantillas gráficas. Smarty3 compila las plantillas a PHP para acelerar la renderización."
-#: ../../Zotlabs/Module/Menu.php:221
-msgid "Menu title as seen by others"
-msgstr "El título del menú tal como será visto por los demás"
+#: ../../Zotlabs/Module/Setup.php:614
+#, php-format
+msgid ""
+"In order to store these compiled templates, the web server needs to have "
+"write access to the directory %s under the top level web folder."
+msgstr "Para poder guardar las plantillas compiladas, el servidor web necesita permisos para acceder al directorio %s en la carpeta web principal."
-#: ../../Zotlabs/Module/Menu.php:222
-msgid "Allow bookmarks"
-msgstr "Permitir marcadores"
+#: ../../Zotlabs/Module/Setup.php:615 ../../Zotlabs/Module/Setup.php:636
+msgid ""
+"Please ensure that the user that your web server runs as (e.g. www-data) has"
+" write access to this folder."
+msgstr "Por favor, asegúrese de que el servidor web está siendo ejecutado por un usuario que tenga permisos de escritura sobre esta carpeta (por ejemplo, www-data)."
-#: ../../Zotlabs/Module/Defperms.php:252
-msgid "Connection Default Permissions"
-msgstr "Permisos predeterminados de conexión"
+#: ../../Zotlabs/Module/Setup.php:616
+#, php-format
+msgid ""
+"Note: as a security measure, you should give the web server write access to "
+"%s only--not the template files (.tpl) that it contains."
+msgstr "Nota: como medida de seguridad, debe dar al servidor web permisos de escritura solo sobre %s - no sobre el fichero de plantilla (.tpl) que contiene."
-#: ../../Zotlabs/Module/Defperms.php:253
-msgid "Apply these permissions automatically"
-msgstr "Aplicar estos permisos automaticamente"
+#: ../../Zotlabs/Module/Setup.php:619
+#, php-format
+msgid "%s is writable"
+msgstr "%s tiene permisos de escritura"
-#: ../../Zotlabs/Module/Defperms.php:253
+#: ../../Zotlabs/Module/Setup.php:635
msgid ""
-"If enabled, connection requests will be approved without your interaction"
-msgstr "Si está habilitado, las solicitudes de conexión serán aprobadas sin su intervención."
+"This software uses the store directory to save uploaded files. The web "
+"server needs to have write access to the store directory under the top level"
+" web folder"
+msgstr "Este software utiliza el directorio de almacenamiento para guardar los ficheros subidos. El servidor web debe tener acceso de escritura a este directorio en la carpeta de nivel superior"
-#: ../../Zotlabs/Module/Defperms.php:254
-msgid "Permission role"
-msgstr "Permisos de rol"
+#: ../../Zotlabs/Module/Setup.php:639
+msgid "store is writable"
+msgstr "\"store\" tiene permisos de escritura"
-#: ../../Zotlabs/Module/Defperms.php:255
-msgid "Add permission role"
-msgstr "Añadir permisos de rol"
+#: ../../Zotlabs/Module/Setup.php:671
+msgid ""
+"SSL certificate cannot be validated. Fix certificate or disable https access"
+" to this site."
+msgstr "El certificado SSL no ha podido ser validado. Corrija este problema o desactive el acceso https a este sitio."
-#: ../../Zotlabs/Module/Defperms.php:259 ../../Zotlabs/Module/Connedit.php:700
+#: ../../Zotlabs/Module/Setup.php:672
msgid ""
-"The permissions indicated on this page will be applied to all new "
-"connections."
-msgstr "Los permisos indicados en esta página serán aplicados en todas las nuevas conexiones."
+"If you have https access to your website or allow connections to TCP port "
+"443 (the https: port), you MUST use a browser-valid certificate. You MUST "
+"NOT use self-signed certificates!"
+msgstr "Si su servidor soporta conexiones cifradas SSL o si permite conexiones al puerto TCP 443 (el puerto usado por el protocolo https), debe utilizar un certificado válido. No debe usar un certificado firmado por usted mismo."
-#: ../../Zotlabs/Module/Defperms.php:260
-msgid "Automatic approval settings"
-msgstr "Opciones de autorización automática"
+#: ../../Zotlabs/Module/Setup.php:673
+msgid ""
+"This restriction is incorporated because public posts from you may for "
+"example contain references to images on your own hub."
+msgstr "Se ha incorporado esta restricción para evitar que sus entradas públicas hagan referencia a imágenes en su propio servidor."
-#: ../../Zotlabs/Module/Defperms.php:264
-msgid "My Settings"
-msgstr "Mis ajustes"
+#: ../../Zotlabs/Module/Setup.php:674
+msgid ""
+"If your certificate is not recognized, members of other sites (who may "
+"themselves have valid certificates) will get a warning message on their own "
+"site complaining about security issues."
+msgstr "Si su certificado no ha sido reconocido, los miembros de otros sitios (con certificados válidos) recibirán mensajes de aviso en sus propios sitios web."
-#: ../../Zotlabs/Module/Defperms.php:267 ../../Zotlabs/Module/Connedit.php:720
-msgid "Individual Permissions"
-msgstr "Permisos individuales"
+#: ../../Zotlabs/Module/Setup.php:675
+msgid ""
+"This can cause usability issues elsewhere (not just on your own site) so we "
+"must insist on this requirement."
+msgstr "Por razones de compatibilidad (sobre el conjunto de la red, no solo sobre su propio sitio), debemos insistir en estos requisitos."
-#: ../../Zotlabs/Module/Defperms.php:268
+#: ../../Zotlabs/Module/Setup.php:676
msgid ""
-"Some individual permissions may have been preset or locked based on your "
-"channel type and privacy settings."
-msgstr "Es posible que se hayan preestablecido o bloqueado algunos permisos individuales según el tipo de canal y la configuración de privacidad."
+"Providers are available that issue free certificates which are browser-"
+"valid."
+msgstr "Existen varias Autoridades de Certificación que le pueden proporcionar certificados válidos."
-#: ../../Zotlabs/Module/Pconfig.php:32 ../../Zotlabs/Module/Pconfig.php:68
-msgid "This setting requires special processing and editing has been blocked."
-msgstr "Este ajuste necesita de un proceso especial y la edición ha sido bloqueada."
+#: ../../Zotlabs/Module/Setup.php:677
+msgid ""
+"If you are confident that the certificate is valid and signed by a trusted "
+"authority, check to see if you have failed to install an intermediate cert. "
+"These are not normally required by browsers, but are required for server-to-"
+"server communications."
+msgstr "Si se tiene la certeza de que el certificado es válido y está firmado por una autoridad de confianza, comprobar para ver si hubo un error al instalar un certificado intermedio. Estos no son normalmente requeridos por los navegadores, pero son necesarios para las comunicaciones de servidor a servidor."
-#: ../../Zotlabs/Module/Pconfig.php:57
-msgid "Configuration Editor"
-msgstr "Editor de configuración"
+#: ../../Zotlabs/Module/Setup.php:679
+msgid "SSL certificate validation"
+msgstr "validación del certificado SSL"
-#: ../../Zotlabs/Module/Pconfig.php:58
+#: ../../Zotlabs/Module/Setup.php:685
msgid ""
-"Warning: Changing some settings could render your channel inoperable. Please"
-" leave this page unless you are comfortable with and knowledgeable about how"
-" to correctly use this feature."
-msgstr "Atención: El cambio de algunos ajustes puede volver inutilizable su canal. Por favor, abandone la página excepto que esté seguro y sepa cómo usar correctamente esta característica."
+"Url rewrite in .htaccess is not working. Check your server "
+"configuration.Test: "
+msgstr "No se pueden reescribir las direcciones web en .htaccess. Compruebe la configuración de su servidor:"
-#: ../../Zotlabs/Module/Oauth2.php:54
-msgid "Name and Secret are required"
-msgstr "\"Key\" y \"Secret\" son obligatorios"
+#: ../../Zotlabs/Module/Setup.php:688
+msgid "Url rewrite is working"
+msgstr "La reescritura de las direcciones funciona correctamente"
-#: ../../Zotlabs/Module/Oauth2.php:113
-msgid "Add OAuth2 application"
-msgstr "Añadir aplicación OAuth2"
+#: ../../Zotlabs/Module/Setup.php:701
+msgid ""
+"The database configuration file \".htconfig.php\" could not be written. "
+"Please use the enclosed text to create a configuration file in your web "
+"server root."
+msgstr "El fichero de configuración de la base de datos .htconfig.php no se ha podido modificar. Por favor, copie el texto generado en un fichero con ese nombre en el directorio raíz de su servidor."
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:147
-msgid "Grant Types"
-msgstr "Tipos de permisos"
+#: ../../Zotlabs/Module/Setup.php:776
+msgid "<h1>What next?</h1>"
+msgstr "<h1>¿Qué sigue?</h1>"
-#: ../../Zotlabs/Module/Oauth2.php:119 ../../Zotlabs/Module/Oauth2.php:120
-msgid "leave blank unless your application sepcifically requires this"
-msgstr "Dejar en blanco a menos que su aplicación lo requiera específicamente"
+#: ../../Zotlabs/Module/Setup.php:777
+msgid ""
+"IMPORTANT: You will need to [manually] setup a scheduled task for the "
+"poller."
+msgstr "IMPORTANTE: Debe crear [manualmente] una tarea programada para el \"poller\"."
-#: ../../Zotlabs/Module/Oauth2.php:120 ../../Zotlabs/Module/Oauth2.php:148
-msgid "Authorization scope"
-msgstr "Alcance de la autorización"
+#: ../../Zotlabs/Module/Apporder.php:47
+msgid "Change Order of Pinned Navbar Apps"
+msgstr "Cambiar el orden de las aplicaciones fijas en la barra de navegación"
-#: ../../Zotlabs/Module/Oauth2.php:132
-msgid "OAuth2 Application not found."
-msgstr "No se ha encontrado la aplicación OAuth2."
+#: ../../Zotlabs/Module/Apporder.php:47
+msgid "Change Order of App Tray Apps"
+msgstr "Cambiar el orden de las aplicaciones de la bandeja de aplicaciones"
-#: ../../Zotlabs/Module/Oauth2.php:147 ../../Zotlabs/Module/Oauth2.php:148
-msgid "leave blank unless your application specifically requires this"
-msgstr "dejar en blanco a menos que su aplicación lo requiera específicamente"
+#: ../../Zotlabs/Module/Apporder.php:48
+msgid ""
+"Use arrows to move the corresponding app left (top) or right (bottom) in the"
+" navbar"
+msgstr "Use las flechas para mover la aplicación correspondiente a la izquierda (arriba) o derecha (abajo) en la barra de navegación."
-#: ../../Zotlabs/Module/Oauth2.php:190
-msgid "Connected OAuth2 Apps"
-msgstr "Aplicaciones OAuth2 conectadas"
+#: ../../Zotlabs/Module/Apporder.php:48
+msgid "Use arrows to move the corresponding app up or down in the app tray"
+msgstr "Use las flechas para mover la aplicación correspondiente hacia arriba o hacia abajo en la bandeja de aplicaciones."
-#: ../../Zotlabs/Module/Dreport.php:38
-msgid "Invalid message"
-msgstr "Mensaje no válido"
+#: ../../Zotlabs/Module/Admin.php:96
+msgid "Blocked accounts"
+msgstr "Cuentas bloqueadas"
-#: ../../Zotlabs/Module/Dreport.php:66
-msgid "no results"
-msgstr "sin resultados"
+#: ../../Zotlabs/Module/Admin.php:97
+msgid "Expired accounts"
+msgstr "Cuentas caducadas"
-#: ../../Zotlabs/Module/Dreport.php:80
-msgid "channel sync processed"
-msgstr "se ha realizado la sincronización del canal"
+#: ../../Zotlabs/Module/Admin.php:98
+msgid "Expiring accounts"
+msgstr "Cuentas que caducan"
-#: ../../Zotlabs/Module/Dreport.php:84
-msgid "queued"
-msgstr "encolado"
+#: ../../Zotlabs/Module/Admin.php:122
+msgid "Message queues"
+msgstr "Mensajes en cola"
-#: ../../Zotlabs/Module/Dreport.php:88
-msgid "posted"
-msgstr "enviado"
+#: ../../Zotlabs/Module/Admin.php:136
+msgid "Your software should be updated"
+msgstr "Debe actualizar su software"
-#: ../../Zotlabs/Module/Dreport.php:92
-msgid "accepted for delivery"
-msgstr "aceptado para el envío"
+#: ../../Zotlabs/Module/Admin.php:141
+msgid "Summary"
+msgstr "Sumario"
-#: ../../Zotlabs/Module/Dreport.php:96
-msgid "updated"
-msgstr "actualizado"
+#: ../../Zotlabs/Module/Admin.php:144
+msgid "Registered accounts"
+msgstr "Cuentas registradas"
-#: ../../Zotlabs/Module/Dreport.php:99
-msgid "update ignored"
-msgstr "actualización ignorada"
+#: ../../Zotlabs/Module/Admin.php:145
+msgid "Pending registrations"
+msgstr "Registros pendientes"
-#: ../../Zotlabs/Module/Dreport.php:102
-msgid "permission denied"
-msgstr "permiso denegado"
+#: ../../Zotlabs/Module/Admin.php:146
+msgid "Registered channels"
+msgstr "Canales registrados"
-#: ../../Zotlabs/Module/Dreport.php:106
-msgid "recipient not found"
-msgstr "destinatario no encontrado"
+#: ../../Zotlabs/Module/Admin.php:147
+msgid "Active addons"
+msgstr "Addons acivos"
-#: ../../Zotlabs/Module/Dreport.php:126
-#, php-format
-msgid "Delivery report for %1$s"
-msgstr "Informe de entrega para %1$s"
+#: ../../Zotlabs/Module/Admin.php:148
+msgid "Version"
+msgstr "Versión"
-#: ../../Zotlabs/Module/Dreport.php:131
-msgid "Redeliver"
-msgstr "Volver a enviar"
+#: ../../Zotlabs/Module/Admin.php:149
+msgid "Repository version (master)"
+msgstr "Versión del repositorio (master)"
-#: ../../Zotlabs/Module/Thing.php:122
-msgid "Thing updated"
-msgstr "Elemento actualizado."
+#: ../../Zotlabs/Module/Admin.php:150
+msgid "Repository version (dev)"
+msgstr "Versión del repositorio (dev)"
-#: ../../Zotlabs/Module/Thing.php:174
-msgid "Object store: failed"
-msgstr "Guardar objeto: ha fallado"
+#: ../../Zotlabs/Module/Tagrm.php:48 ../../Zotlabs/Module/Tagrm.php:98
+msgid "Tag removed"
+msgstr "Etiqueta eliminada."
-#: ../../Zotlabs/Module/Thing.php:178
-msgid "Thing added"
-msgstr "Elemento añadido"
+#: ../../Zotlabs/Module/Tagrm.php:123
+msgid "Remove Item Tag"
+msgstr "Eliminar etiqueta del elemento."
-#: ../../Zotlabs/Module/Thing.php:204
-#, php-format
-msgid "OBJ: %1$s %2$s %3$s"
-msgstr "OBJ: %1$s %2$s %3$s"
+#: ../../Zotlabs/Module/Tagrm.php:125
+msgid "Select a tag to remove: "
+msgstr "Seleccionar una etiqueta para eliminar:"
-#: ../../Zotlabs/Module/Thing.php:267
-msgid "Show Thing"
-msgstr "Mostrar elemento"
+#: ../../Zotlabs/Module/Viewsrc.php:43
+msgid "item"
+msgstr "elemento"
-#: ../../Zotlabs/Module/Thing.php:274
-msgid "item not found."
-msgstr "elemento no encontrado."
+#: ../../Zotlabs/Module/Email_resend.php:30
+msgid "Email verification resent"
+msgstr "Reenvío del email de verificación"
-#: ../../Zotlabs/Module/Thing.php:307
-msgid "Edit Thing"
-msgstr "Editar elemento"
+#: ../../Zotlabs/Module/Email_resend.php:33
+msgid "Unable to resend email verification message."
+msgstr "No se puede reenviar el mensaje de verificación por correo electrónico."
-#: ../../Zotlabs/Module/Thing.php:309 ../../Zotlabs/Module/Thing.php:366
-msgid "Select a profile"
-msgstr "Seleccionar un perfil"
+#: ../../Zotlabs/Module/Group.php:47
+msgid "Privacy group created."
+msgstr "El grupo de canales ha sido creado."
-#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
-msgid "Post an activity"
-msgstr "Publicar una actividad"
+#: ../../Zotlabs/Module/Group.php:50
+msgid "Could not create privacy group."
+msgstr "No se puede crear el grupo de canales"
-#: ../../Zotlabs/Module/Thing.php:313 ../../Zotlabs/Module/Thing.php:369
-msgid "Only sends to viewers of the applicable profile"
-msgstr "Sólo enviar a espectadores del perfil pertinente."
+#: ../../Zotlabs/Module/Group.php:82
+msgid "Privacy group updated."
+msgstr "Grupo de canales actualizado."
-#: ../../Zotlabs/Module/Thing.php:315 ../../Zotlabs/Module/Thing.php:371
-msgid "Name of thing e.g. something"
-msgstr "Nombre del elemento, p. ej.:. \"algo\""
+#: ../../Zotlabs/Module/Group.php:137 ../../Zotlabs/Module/Group.php:301
+msgid "Post to this group by default"
+msgstr "Publicar en este grupo por defecto"
-#: ../../Zotlabs/Module/Thing.php:317 ../../Zotlabs/Module/Thing.php:372
-msgid "URL of thing (optional)"
-msgstr "Dirección del elemento (opcional)"
+#: ../../Zotlabs/Module/Group.php:138 ../../Zotlabs/Module/Group.php:302
+msgid "Add new contacts to this group by default"
+msgstr "Añadir nuevos contactos a este grupo por defecto"
-#: ../../Zotlabs/Module/Thing.php:319 ../../Zotlabs/Module/Thing.php:373
-msgid "URL for photo of thing (optional)"
-msgstr "Dirección para la foto o elemento (opcional)"
+#: ../../Zotlabs/Module/Group.php:146
+msgid "Privacy group name"
+msgstr "Nombre del grupo"
-#: ../../Zotlabs/Module/Thing.php:364
-msgid "Add Thing to your Profile"
-msgstr "Añadir alguna cosa a su perfil"
+#: ../../Zotlabs/Module/Group.php:147 ../../Zotlabs/Module/Group.php:249
+msgid "Members are visible to other channels"
+msgstr "Los miembros son visibles para otros canales"
-#: ../../Zotlabs/Module/Rmagic.php:46
-msgid "Authentication failed."
-msgstr "Falló la autenticación."
+#: ../../Zotlabs/Module/Group.php:175
+msgid "Privacy group removed."
+msgstr "Grupo de canales eliminado."
-#: ../../Zotlabs/Module/Import_progress.php:36
-msgid "Item sync completed!"
-msgstr "¡Sincronización de artículos completada!"
+#: ../../Zotlabs/Module/Group.php:178
+msgid "Unable to remove privacy group."
+msgstr "No se puede eliminar el grupo de canales."
-#: ../../Zotlabs/Module/Import_progress.php:51
-msgid "Item sync completed but no items were found!"
-msgstr "¡Sincronización de artículos completada pero no se ha encontrado ningún artículo!"
+#: ../../Zotlabs/Module/Group.php:244
+#, php-format
+msgid "Privacy Group: %s"
+msgstr "Grupo privado %s"
-#: ../../Zotlabs/Module/Import_progress.php:68
-msgid "File sync completed!"
-msgstr "¡Sincronización de archivos completada!"
+#: ../../Zotlabs/Module/Group.php:246
+msgid "Privacy group name: "
+msgstr "Nombre del grupo de canales:"
-#: ../../Zotlabs/Module/Import_progress.php:83
-msgid "File sync completed but no files were found!"
-msgstr "¡La sincronización de archivos se ha completado pero no se ha encontrado ningún archivo!"
+#: ../../Zotlabs/Module/Group.php:262
+msgid "Group members"
+msgstr "Miembros del grupo"
-#: ../../Zotlabs/Module/Import_progress.php:98
-msgid "Channel clone status"
-msgstr "Estado de clonación del canal"
+#: ../../Zotlabs/Module/Group.php:264
+msgid "Not in this group"
+msgstr "No en este grupo"
-#: ../../Zotlabs/Module/Import_progress.php:99
-msgid "Item sync status"
-msgstr "Estado de sincronización de artículos"
+#: ../../Zotlabs/Module/Group.php:296
+msgid "Click a channel to toggle membership"
+msgstr "Haga clic en un canal para cambiar los miembros"
-#: ../../Zotlabs/Module/Import_progress.php:100
-msgid "File sync status"
-msgstr "Estado de sincronización de archivos"
+#: ../../Zotlabs/Module/Editpost.php:38 ../../Zotlabs/Module/Editpost.php:43
+msgid "Item is not editable"
+msgstr "El elemento no es editable"
-#: ../../Zotlabs/Module/Import_progress.php:107
-msgid "Channel cloning completed!"
-msgstr "Clonación del canal completada."
+#: ../../Zotlabs/Module/Achievements.php:38
+msgid "Some blurb about what to do when you're new here"
+msgstr "Algunas propuestas para el nuevo usuario sobre qué se puede hacer aquí"
-#: ../../Zotlabs/Module/Import_progress.php:108
-msgid "Resume"
-msgstr "Reanudar"
+#: ../../Zotlabs/Module/Pdledit_gui.php:119
+msgid "Layout not found"
+msgstr "Diseño no encontrado"
-#: ../../Zotlabs/Module/Import_progress.php:109
-msgid "Only resume if sync stalled!"
-msgstr "Sólo se reanuda si la sincronización se estanca."
+#: ../../Zotlabs/Module/Pdledit_gui.php:127
+msgid "This template does not support pdledi_gui (no content regions defined)"
+msgstr "Esta plantilla no es compatible con pdledi_gui (no hay regiones de contenido definidas)"
-#: ../../Zotlabs/Module/Pdledit.php:27
-msgid "Layout updated."
-msgstr "Plantilla actualizada."
+#: ../../Zotlabs/Module/Pdledit_gui.php:403
+msgid "Main page content"
+msgstr "Contenido de la página principal"
-#: ../../Zotlabs/Module/Pdledit.php:55 ../../Zotlabs/Module/Pdledit.php:98
-msgid "Edit System Page Description"
-msgstr "Editor del Sistema de Descripción de Páginas"
+#: ../../Zotlabs/Module/Pdledit_gui.php:404
+msgid "The main page content can not be edited!"
+msgstr "El contenido de la página principal no se puede editar."
-#: ../../Zotlabs/Module/Pdledit.php:76
-msgid "(modified)"
-msgstr "(modificado)"
+#: ../../Zotlabs/Module/New_channel.php:147
+#: ../../Zotlabs/Module/Manage.php:130
+#, php-format
+msgid "You have created %1$.0f of %2$.0f allowed channels."
+msgstr "Ha creado %1$.0f de %2$.0f canales permitidos."
-#: ../../Zotlabs/Module/Pdledit.php:93
-msgid "Layout not found."
-msgstr "Plantilla no encontrada"
+#: ../../Zotlabs/Module/New_channel.php:159
+msgid "Your real name is recommended."
+msgstr "Se recomienda su nombre real."
-#: ../../Zotlabs/Module/Pdledit.php:99
-msgid "Module Name:"
-msgstr "Nombre del módulo:"
+#: ../../Zotlabs/Module/New_channel.php:160
+msgid "Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""
+msgstr "Ejemplos: \"Juan García\", \"Luisa y sus caballos\", \"Fútbol\", \"Grupo de aviación\""
-#: ../../Zotlabs/Module/Pdledit.php:100
-msgid "Layout Help"
-msgstr "Ayuda para el diseño de plantillas de página"
+#: ../../Zotlabs/Module/New_channel.php:165
+msgid ""
+"This will be used to create a unique network address (like an email "
+"address)."
+msgstr "Esto se utilizará para crear una dirección de red única (como una dirección de correo electrónico)."
-#: ../../Zotlabs/Module/Pdledit.php:101
-msgid "Edit another layout"
-msgstr "Editar otro diseño"
+#: ../../Zotlabs/Module/New_channel.php:167
+msgid "Allowed characters are a-z 0-9, - and _"
+msgstr "Los caracteres permitidos son a-z 0-9, - and _"
-#: ../../Zotlabs/Module/Pdledit.php:102
-msgid "System layout"
-msgstr "Diseño del sistema"
+#: ../../Zotlabs/Module/New_channel.php:175
+msgid "Channel name"
+msgstr "Nombre del canal"
-#: ../../Zotlabs/Module/Home.php:104
-#, php-format
-msgid "Welcome to %s"
-msgstr "Bienvenido a %s"
+#: ../../Zotlabs/Module/New_channel.php:181
+msgid "Create a Channel"
+msgstr "Crear un canal"
-#: ../../Zotlabs/Module/Suggest.php:52
+#: ../../Zotlabs/Module/New_channel.php:182
msgid ""
-"No suggestions available. If this is a new site, please try again in 24 "
-"hours."
-msgstr "No hay sugerencias disponibles. Si es un sitio nuevo, espere 24 horas y pruebe de nuevo."
-
-#: ../../Zotlabs/Module/Connedit.php:171
-msgid "Connection updated."
-msgstr "Conexión actualizada."
+"A channel is a unique network identity. It can represent a person (social "
+"network profile), a forum (group), a business or celebrity page, a newsfeed,"
+" and many other things."
+msgstr "Un canal es una identidad única en la red. Puede representar a una persona (un perfil de una red social), un foro o grupo, un negocio o una página de una celebridad, un \"feed\" de noticias, y muchas otras cosas."
-#: ../../Zotlabs/Module/Connedit.php:173
-msgid "Failed to update connection record."
-msgstr "Error al actualizar el registro de la conexión."
+#: ../../Zotlabs/Module/New_channel.php:183
+msgid ""
+"or <a href=\"import\">import an existing channel</a> from another location."
+msgstr "O <a href=\"import\">importar un canal </a> desde otro lugar."
-#: ../../Zotlabs/Module/Connedit.php:320
-msgid "Could not access address book record."
-msgstr "No se pudo acceder al registro en su libreta de direcciones."
+#: ../../Zotlabs/Module/New_channel.php:188
+msgid "Validate"
+msgstr "Validar"
-#: ../../Zotlabs/Module/Connedit.php:368
-msgid "Refresh failed - channel is currently unavailable."
-msgstr "Recarga fallida - no se puede encontrar el canal en este momento."
+#: ../../Zotlabs/Module/Z6trans.php:19
+msgid "Update to Hubzilla 5.0 step 2"
+msgstr "Actualizar a Hubzilla 5.0. Paso 2"
-#: ../../Zotlabs/Module/Connedit.php:382 ../../Zotlabs/Module/Connedit.php:391
-#: ../../Zotlabs/Module/Connedit.php:400 ../../Zotlabs/Module/Connedit.php:409
-#: ../../Zotlabs/Module/Connedit.php:422
-msgid "Unable to set address book parameters."
-msgstr "No ha sido posible establecer los parámetros de la libreta de direcciones."
+#: ../../Zotlabs/Module/Z6trans.php:21
+msgid "To complete the update please run"
+msgstr "Para completar la actualización, ejecutar "
-#: ../../Zotlabs/Module/Connedit.php:441
-msgid "Connection has been removed."
-msgstr "La conexión ha sido eliminada."
+#: ../../Zotlabs/Module/Z6trans.php:23
+msgid "php util/z6convert.php"
+msgstr "php util/z6convert.php"
-#: ../../Zotlabs/Module/Connedit.php:483
-#, php-format
-msgid "View %s's profile"
-msgstr "Ver el perfil de %s"
+#: ../../Zotlabs/Module/Z6trans.php:25
+msgid "from the terminal."
+msgstr "desde la terminal."
-#: ../../Zotlabs/Module/Connedit.php:504
-msgid "View recent posts and comments"
-msgstr "Ver publicaciones y comentarios recientes"
+#: ../../Zotlabs/Module/Pubsites.php:26
+msgid "Public Hubs"
+msgstr "Servidores públicos"
-#: ../../Zotlabs/Module/Connedit.php:550
-msgid "Fetch Vcard"
-msgstr "Obtener una vcard"
+#: ../../Zotlabs/Module/Pubsites.php:29
+msgid ""
+"The listed hubs allow public registration for the $Projectname network. All "
+"hubs in the network are interlinked so membership on any of them conveys "
+"membership in the network as a whole. Some hubs may require subscription or "
+"provide tiered service plans. The hub itself <strong>may</strong> provide "
+"additional details."
+msgstr "Los sitios listados permiten el registro público en la red $Projectname. Todos los sitios de la red están vinculados entre sí, por lo que sus miembros, en ninguno de ellos, indican la pertenencia a la red en su conjunto. Algunos sitios pueden requerir suscripción o proporcionar planes de servicio por niveles. Los mismos hubs <strong>pueden</strong> proporcionar detalles adicionales."
-#: ../../Zotlabs/Module/Connedit.php:553
-msgid "Fetch electronic calling card for this connection"
-msgstr "Obtener una tarjeta de llamada electrónica para esta conexión"
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Hub URL"
+msgstr "Dirección del hub"
-#: ../../Zotlabs/Module/Connedit.php:575
-msgid "Open Set Affinity section by default"
-msgstr "Abrir por defecto la sección para definir la afinidad"
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Access Type"
+msgstr "Tipo de acceso"
-#: ../../Zotlabs/Module/Connedit.php:612
-msgid "Filter"
-msgstr "Filtrar"
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Registration Policy"
+msgstr "Normas de registro"
-#: ../../Zotlabs/Module/Connedit.php:615
-msgid "Open Custom Filter section by default"
-msgstr "Abrir por defecto la sección de personalización de filtros"
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Stats"
+msgstr "Estadísticas"
-#: ../../Zotlabs/Module/Connedit.php:626
-msgid "Set Affinity"
-msgstr "Ajustar la afinidad"
+#: ../../Zotlabs/Module/Pubsites.php:35
+msgid "Software"
+msgstr "Software"
-#: ../../Zotlabs/Module/Connedit.php:629
-msgid "Set Profile"
-msgstr "Ajustar el perfil"
+#: ../../Zotlabs/Module/Pubsites.php:37
+msgid "Ratings"
+msgstr "Valoraciones"
-#: ../../Zotlabs/Module/Connedit.php:632
-msgid "Set Affinity & Profile"
-msgstr "Ajustar la afinidad y el perfil"
+#: ../../Zotlabs/Module/Pubsites.php:51
+msgid "Rate"
+msgstr "Valorar"
-#: ../../Zotlabs/Module/Connedit.php:685
-#, php-format
-msgid "Contact: %s"
-msgstr "Contacto: %s"
+#: ../../Zotlabs/Module/Photos.php:84 ../../Zotlabs/Module/Photos.php:103
+msgid "Album not found."
+msgstr "Álbum no encontrado."
-#: ../../Zotlabs/Module/Connedit.php:687
-msgid "Manage contact roles"
-msgstr "Gestionar roles de contactos"
+#: ../../Zotlabs/Module/Photos.php:93
+msgid "Delete Album"
+msgstr "Borrar álbum"
-#: ../../Zotlabs/Module/Connedit.php:694
-msgid "This contacts's primary address is"
-msgstr "La dirección principal de este contactos es "
+#: ../../Zotlabs/Module/Photos.php:165 ../../Zotlabs/Module/Photos.php:1054
+msgid "Delete Photo"
+msgstr "Borrar foto"
-#: ../../Zotlabs/Module/Connedit.php:695
-msgid "Available locations:"
-msgstr "Ubicaciones disponibles:"
+#: ../../Zotlabs/Module/Photos.php:522
+msgid "No photos selected"
+msgstr "No hay fotos seleccionadas"
-#: ../../Zotlabs/Module/Connedit.php:710
-msgid "Contact Pending Approval"
-msgstr "Contacto pendiente de aprobación"
+#: ../../Zotlabs/Module/Photos.php:571
+msgid "Access to this item is restricted."
+msgstr "El acceso a este elemento está restringido."
-#: ../../Zotlabs/Module/Connedit.php:715
+#: ../../Zotlabs/Module/Photos.php:614
#, php-format
-msgid ""
-"Please choose the profile you would like to display to %s when viewing your "
-"profile securely."
-msgstr "Por favor, escoja el perfil que quiere mostrar a %s cuando esté viendo su perfil de forma segura."
-
-#: ../../Zotlabs/Module/Connedit.php:721
-msgid ""
-"Some permissions may be inherited from your channel's <a "
-"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
-"priority than individual settings. You can <strong>not</strong> change those"
-" settings here."
-msgstr "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. <strong>No</strong> puede cambiar estos ajustes aquí."
-
-#: ../../Zotlabs/Module/Connedit.php:722
-msgid ""
-"Some permissions may be inherited from your channel's <a "
-"href=\"settings\"><strong>privacy settings</strong></a>, which have higher "
-"priority than individual settings. You can change those settings here but "
-"they wont have any impact unless the inherited setting changes."
-msgstr "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. Puede cambiar estos ajustes aquí, pero no tendrán ningún consecuencia hasta que cambie los ajustes heredados."
-
-#: ../../Zotlabs/Module/Connedit.php:723
-msgid "Last update:"
-msgstr "Última actualización:"
-
-#: ../../Zotlabs/Module/Connedit.php:731
-msgid "Details"
-msgstr "Detalles"
-
-#: ../../Zotlabs/Module/Notifications.php:106
-#: ../../Zotlabs/Module/Notify.php:85
-msgid "No more system notifications."
-msgstr "No hay más notificaciones del sistema"
-
-#: ../../Zotlabs/Module/Notifications.php:110
-#: ../../Zotlabs/Module/Notify.php:89
-msgid "System Notifications"
-msgstr "Notificaciones del sistema"
-
-#: ../../Zotlabs/Module/Notifications.php:111
-#: ../../Zotlabs/Lib/ThreadItem.php:490
-msgid "Mark all seen"
-msgstr "Marcar todo como visto"
+msgid "%1$.2f MB photo storage used."
+msgstr "%1$.2f MB de almacenamiento de fotos utilizado."
-#: ../../Zotlabs/Module/Layouts.php:186
-msgid "Comanche page description language help"
-msgstr "Página de ayuda del lenguaje de descripción de páginas (PDL) Comanche"
+#: ../../Zotlabs/Module/Photos.php:618
+#, php-format
+msgid "%1$.2f MB of %2$.2f MB photo storage used."
+msgstr "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado."
-#: ../../Zotlabs/Module/Layouts.php:190
-msgid "Layout Description"
-msgstr "Descripción de la plantilla"
+#: ../../Zotlabs/Module/Photos.php:660
+msgid "Upload Photos"
+msgstr "Subir fotos"
-#: ../../Zotlabs/Module/Layouts.php:195
-msgid "Download PDL file"
-msgstr "Descargar el fichero PDL"
+#: ../../Zotlabs/Module/Photos.php:664
+msgid "Enter an album name"
+msgstr "Introducir un nombre de álbum"
-#: ../../Zotlabs/Module/Locs.php:27 ../../Zotlabs/Module/Locs.php:65
-msgid "Location not found."
-msgstr "Dirección no encontrada."
+#: ../../Zotlabs/Module/Photos.php:665
+msgid "or select an existing album (doubleclick)"
+msgstr "o seleccionar un álbum (con un doble click)"
-#: ../../Zotlabs/Module/Locs.php:74
-msgid "Location lookup failed."
-msgstr "Ha fallado la búsqueda de la dirección."
+#: ../../Zotlabs/Module/Photos.php:666
+msgid "Create a status post for this upload"
+msgstr "Crear un mensaje de estado para esta subida"
-#: ../../Zotlabs/Module/Locs.php:78
-msgid ""
-"Please select another location to become primary before removing the primary"
-" location."
-msgstr "Por favor, seleccione una copia de su canal (un clon) para convertirlo en primario antes de eliminar su canal principal."
+#: ../../Zotlabs/Module/Photos.php:668
+msgid "Description (optional)"
+msgstr "Descripción (opcional)"
-#: ../../Zotlabs/Module/Locs.php:106
-msgid "Syncing locations"
-msgstr "Sincronizando ubicaciones"
+#: ../../Zotlabs/Module/Photos.php:756
+msgid "Show Newest First"
+msgstr "Mostrar lo más reciente primero"
-#: ../../Zotlabs/Module/Locs.php:115
-msgid "No locations found."
-msgstr "No encontrada ninguna dirección."
+#: ../../Zotlabs/Module/Photos.php:758
+msgid "Show Oldest First"
+msgstr "Mostrar lo más antiguo primero"
-#: ../../Zotlabs/Module/Locs.php:120
-msgid "Manage Channel Locations"
-msgstr "Gestionar las direcciones del canal"
+#: ../../Zotlabs/Module/Photos.php:815 ../../Zotlabs/Module/Photos.php:1354
+msgid "Add Photos"
+msgstr "Añadir fotos"
-#: ../../Zotlabs/Module/Locs.php:126
-msgid "Sync Now"
-msgstr "Sincronizar ahora"
+#: ../../Zotlabs/Module/Photos.php:863
+msgid "Permission denied. Access to this item may be restricted."
+msgstr "Permiso denegado. El acceso a este elemento puede estar restringido."
-#: ../../Zotlabs/Module/Locs.php:127
-msgid "Please wait several minutes between consecutive operations."
-msgstr "Por favor, espere algunos minutos entre operaciones consecutivas."
+#: ../../Zotlabs/Module/Photos.php:865
+msgid "Photo not available"
+msgstr "Foto no disponible"
-#: ../../Zotlabs/Module/Locs.php:128
-msgid ""
-"When possible, drop a location by logging into that website/hub and removing"
-" your channel."
-msgstr "Cuando sea posible, elimine una ubicación iniciando sesión en el sitio web o \"hub\" y borrando su canal."
+#: ../../Zotlabs/Module/Photos.php:923
+msgid "Use as profile photo"
+msgstr "Usar como foto del perfil"
-#: ../../Zotlabs/Module/Locs.php:129
-msgid "Use this form to drop the location if the hub is no longer operating."
-msgstr "Utilice este formulario para eliminar la dirección si el \"hub\" no está funcionando desde hace tiempo."
+#: ../../Zotlabs/Module/Photos.php:924
+msgid "Use as cover photo"
+msgstr "Usar como imagen de portada del perfil"
-#: ../../Zotlabs/Module/Sources.php:41
-msgid "Failed to create source. No channel selected."
-msgstr "No se ha podido crear el origen de los contenidos. No ha sido seleccionado ningún canal."
+#: ../../Zotlabs/Module/Photos.php:931
+msgid "Private Photo"
+msgstr "Foto privada"
-#: ../../Zotlabs/Module/Sources.php:57
-msgid "Source created."
-msgstr "Fuente creada."
+#: ../../Zotlabs/Module/Photos.php:946
+msgid "View Full Size"
+msgstr "Ver tamaño completo"
-#: ../../Zotlabs/Module/Sources.php:70
-msgid "Source updated."
-msgstr "Fuente actualizada."
+#: ../../Zotlabs/Module/Photos.php:1028
+msgid "Edit photo"
+msgstr "Editar foto"
-#: ../../Zotlabs/Module/Sources.php:99
-msgid "*"
-msgstr "*"
+#: ../../Zotlabs/Module/Photos.php:1030
+msgid "Rotate CW (right)"
+msgstr "Girar CW (a la derecha)"
-#: ../../Zotlabs/Module/Sources.php:105 ../../Zotlabs/Lib/Apps.php:372
-msgid "Channel Sources"
-msgstr "Orígenes de los contenidos del canal"
+#: ../../Zotlabs/Module/Photos.php:1031
+msgid "Rotate CCW (left)"
+msgstr "Girar CCW (a la izquierda)"
-#: ../../Zotlabs/Module/Sources.php:106
-msgid "Manage remote sources of content for your channel."
-msgstr "Gestionar contenido de origen remoto para su canal."
+#: ../../Zotlabs/Module/Photos.php:1034
+msgid "Move photo to album"
+msgstr "Mover la foto a un álbum"
-#: ../../Zotlabs/Module/Sources.php:107 ../../Zotlabs/Module/Sources.php:117
-msgid "New Source"
-msgstr "Nueva fuente"
+#: ../../Zotlabs/Module/Photos.php:1035
+msgid "Enter a new album name"
+msgstr "Introducir un nuevo nombre de álbum"
-#: ../../Zotlabs/Module/Sources.php:118 ../../Zotlabs/Module/Sources.php:152
-msgid ""
-"Import all or selected content from the following channel into this channel "
-"and distribute it according to your channel settings."
-msgstr "Importar todo el contenido o una selección de los siguientes canales en este canal y distribuirlo de acuerdo con sus ajustes."
+#: ../../Zotlabs/Module/Photos.php:1036
+msgid "or select an existing one (doubleclick)"
+msgstr "o seleccionar un álbum (con un doble click)"
-#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
-msgid "Only import content with these words (one per line)"
-msgstr "Importar solo contenido que contenga estas palabras (una por línea)"
+#: ../../Zotlabs/Module/Photos.php:1041
+msgid "Add a Tag"
+msgstr "Añadir una etiqueta"
-#: ../../Zotlabs/Module/Sources.php:119 ../../Zotlabs/Module/Sources.php:153
-msgid "Leave blank to import all public content"
-msgstr "Dejar en blanco para importar todo el contenido público"
+#: ../../Zotlabs/Module/Photos.php:1049
+msgid "Example: @bob, @Barbara_Jensen, @jim@example.com"
+msgstr "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com"
-#: ../../Zotlabs/Module/Sources.php:120 ../../Zotlabs/Module/Sources.php:159
-msgid "Channel Name"
-msgstr "Nombre del canal"
+#: ../../Zotlabs/Module/Photos.php:1052
+msgid "Flag as adult in album view"
+msgstr "Marcar como \"solo para adultos\" en el álbum"
-#: ../../Zotlabs/Module/Sources.php:121 ../../Zotlabs/Module/Sources.php:156
-msgid ""
-"Add the following categories to posts imported from this source (comma "
-"separated)"
-msgstr "Añadir los temas siguientes a las entradas importadas de esta fuente (separadas por comas)"
+#: ../../Zotlabs/Module/Photos.php:1237
+msgid "Photo Tools"
+msgstr "Gestión de las fotos"
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-msgid "Resend posts with this channel as author"
-msgstr "Reenviar mensajes con este canal como autor"
+#: ../../Zotlabs/Module/Photos.php:1246
+msgid "In This Photo:"
+msgstr "En esta foto:"
-#: ../../Zotlabs/Module/Sources.php:122 ../../Zotlabs/Module/Sources.php:157
-msgid "Copyrights may apply"
-msgstr "Se pueden aplicar los derechos de autor"
+#: ../../Zotlabs/Module/Photos.php:1251
+msgid "Map"
+msgstr "Mapa"
-#: ../../Zotlabs/Module/Sources.php:142 ../../Zotlabs/Module/Sources.php:172
-msgid "Source not found."
-msgstr "Fuente no encontrada"
+#: ../../Zotlabs/Module/Impel.php:188
+#, php-format
+msgid "%s element installed"
+msgstr "%s elemento instalado"
-#: ../../Zotlabs/Module/Sources.php:149
-msgid "Edit Source"
-msgstr "Editar fuente"
+#: ../../Zotlabs/Module/Impel.php:191
+#, php-format
+msgid "%s element installation failed"
+msgstr "Elemento con instalación fallida: %s"
-#: ../../Zotlabs/Module/Sources.php:150
-msgid "Delete Source"
-msgstr "Eliminar fuente"
+#: ../../Zotlabs/Module/Common.php:14
+msgid "No channel."
+msgstr "Ningún canal."
-#: ../../Zotlabs/Module/Sources.php:180
-msgid "Source removed"
-msgstr "Fuente eliminada"
+#: ../../Zotlabs/Module/Common.php:45
+msgid "No connections in common."
+msgstr "Ninguna conexión en común."
-#: ../../Zotlabs/Module/Sources.php:182
-msgid "Unable to remove source."
-msgstr "No se puede eliminar la fuente."
+#: ../../Zotlabs/Module/Common.php:65
+msgid "View Common Connections"
+msgstr "Ver las conexiones comunes"
#: ../../Zotlabs/Module/Rbmark.php:93
msgid "Select a bookmark folder"
@@ -14650,739 +14652,701 @@ msgstr "Dirección del marcador"
msgid "Or enter new bookmark folder name"
msgstr "O introduzca un nuevo nombre para la carpeta de marcadores"
-#: ../../Zotlabs/Lib/AccessList.php:26
-msgid ""
-"A deleted privacy group with this name was revived. Existing item "
-"permissions <strong>may</strong> apply to this privacy group and any future "
-"members. If this is not what you intended, please create another privacy "
-"group with a different name."
-msgstr "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente."
+#: ../../Zotlabs/Module/Profperm.php:34 ../../Zotlabs/Module/Profperm.php:63
+msgid "Invalid profile identifier."
+msgstr "Identificador del perfil no válido"
-#: ../../Zotlabs/Lib/AccessList.php:268
-msgid "Select a privacy group"
-msgstr "Seleccionar un grupo privado de canales"
+#: ../../Zotlabs/Module/Profperm.php:111
+msgid "Profile Visibility Editor"
+msgstr "Editor de visibilidad del perfil"
-#: ../../Zotlabs/Lib/Permcat.php:83
-msgctxt "permcat"
-msgid "Default"
-msgstr "Predeterminado"
+#: ../../Zotlabs/Module/Profperm.php:115
+msgid "Click on a contact to add or remove."
+msgstr "Pulsar en un contacto para añadirlo o eliminarlo."
-#: ../../Zotlabs/Lib/Activity.php:2271
-#, php-format
-msgid "Likes %1$s's %2$s"
-msgstr "Gusta de %2$sde %1$s"
+#: ../../Zotlabs/Module/Profperm.php:124
+msgid "Visible To"
+msgstr "Visible para"
-#: ../../Zotlabs/Lib/Activity.php:2274
-#, php-format
-msgid "Doesn't like %1$s's %2$s"
-msgstr "No le gusta %2$sde %1$s"
+#: ../../Zotlabs/Module/Removeme.php:35
+msgid ""
+"Channel removals are not allowed within 48 hours of changing the account "
+"password."
+msgstr "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña."
-#: ../../Zotlabs/Lib/Activity.php:2280
-#, php-format
-msgid "Will attend %s's event"
-msgstr "Asistirá al evento de %s"
+#: ../../Zotlabs/Module/Removeme.php:61
+msgid "This channel will be permanently removed. "
+msgstr "Este canal será eliminado permanentemente. "
-#: ../../Zotlabs/Lib/Activity.php:2283
-#, php-format
-msgid "Will not attend %s's event"
-msgstr "No asistirá al evento de %s"
+#: ../../Zotlabs/Module/Removeme.php:61
+msgid "This action can not be undone!"
+msgstr "¡Esta acción no se puede deshacer!"
-#: ../../Zotlabs/Lib/Activity.php:2286
-#, php-format
-msgid "May attend %s's event"
-msgstr "Puede asistir al evento de %s"
+#: ../../Zotlabs/Module/Import_progress.php:36
+msgid "Item sync completed!"
+msgstr "¡Sincronización de artículos completada!"
-#: ../../Zotlabs/Lib/Activity.php:2289
-#, php-format
-msgid "May not attend %s's event"
-msgstr "Puede no asistir al evento de %s"
+#: ../../Zotlabs/Module/Import_progress.php:51
+msgid "Item sync completed but no items were found!"
+msgstr "¡Sincronización de artículos completada pero no se ha encontrado ningún artículo!"
-#: ../../Zotlabs/Lib/Enotify.php:60
-msgid "$Projectname Notification"
-msgstr "Notificación de $Projectname"
+#: ../../Zotlabs/Module/Import_progress.php:68
+msgid "File sync completed!"
+msgstr "¡Sincronización de archivos completada!"
-#: ../../Zotlabs/Lib/Enotify.php:63
-msgid "Thank You,"
-msgstr "Gracias,"
+#: ../../Zotlabs/Module/Import_progress.php:83
+msgid "File sync completed but no files were found!"
+msgstr "¡La sincronización de archivos se ha completado pero no se ha encontrado ningún archivo!"
-#: ../../Zotlabs/Lib/Enotify.php:66
-#, php-format
-msgid "This email was sent by %1$s at %2$s."
-msgstr "Este email ha sido enviado por %1$s a %2$s."
+#: ../../Zotlabs/Module/Import_progress.php:98
+msgid "Channel clone status"
+msgstr "Estado de clonación del canal"
-#: ../../Zotlabs/Lib/Enotify.php:67
-#, php-format
-msgid ""
-"To stop receiving these messages, please adjust your Notification Settings "
-"at %s"
-msgstr "Para dejar de recibir estos mensajes, por favor ajuste la configuración de notificación en %s"
+#: ../../Zotlabs/Module/Import_progress.php:99
+msgid "Item sync status"
+msgstr "Estado de sincronización de artículos"
-#: ../../Zotlabs/Lib/Enotify.php:68
-#, php-format
-msgid "To stop receiving these messages, please adjust your %s."
-msgstr "Para dejar de recibir estos mensajes, por favor, ajuste su %s"
+#: ../../Zotlabs/Module/Import_progress.php:100
+msgid "File sync status"
+msgstr "Estado de sincronización de archivos"
-#: ../../Zotlabs/Lib/Enotify.php:123
-#, php-format
-msgid "%s <!item_type!>"
-msgstr "%s <!item_type!>"
+#: ../../Zotlabs/Module/Import_progress.php:107
+msgid "Channel cloning completed!"
+msgstr "Clonación del canal completada."
-#: ../../Zotlabs/Lib/Enotify.php:128
-#, php-format
-msgid "[$Projectname:Notify] New direct message received at %s"
-msgstr "[$Projectname:Aviso] Nuevo mensaje directo recibido en %s"
+#: ../../Zotlabs/Module/Import_progress.php:108
+msgid "Resume"
+msgstr "Reanudar"
-#: ../../Zotlabs/Lib/Enotify.php:130
-#, php-format
-msgid "%1$s sent you a new direct message at %2$s"
-msgstr "%1$s le ha enviado un nuevo mensaje directo en %2$s."
+#: ../../Zotlabs/Module/Import_progress.php:109
+msgid "Only resume if sync stalled!"
+msgstr "Sólo se reanuda si la sincronización se estanca."
-#: ../../Zotlabs/Lib/Enotify.php:131
-#, php-format
-msgid "%1$s sent you %2$s."
-msgstr "%1$s le ha enviado %2$s."
+#: ../../Zotlabs/Module/Manage.php:137
+msgid "Create a new channel"
+msgstr "Crear un nuevo canal"
-#: ../../Zotlabs/Lib/Enotify.php:131
-msgid "a direct message"
-msgstr "un mensaje directo"
+#: ../../Zotlabs/Module/Manage.php:163
+msgid "Current Channel"
+msgstr "Canal actual"
-#: ../../Zotlabs/Lib/Enotify.php:132
-#, php-format
-msgid "Please visit %s to view and/or reply to your direct messages."
-msgstr "Por favor visite %s para ver y/o responder a su mensaje directo."
+#: ../../Zotlabs/Module/Manage.php:165
+msgid "Switch to one of your channels by selecting it."
+msgstr "Cambiar a uno de sus canales seleccionándolo."
-#: ../../Zotlabs/Lib/Enotify.php:145
-msgid "commented on"
-msgstr "ha comentado sobre "
+#: ../../Zotlabs/Module/Manage.php:166
+msgid "Default Channel"
+msgstr "Canal principal"
-#: ../../Zotlabs/Lib/Enotify.php:158 ../../Zotlabs/Lib/Enotify.php:307
-msgid "liked"
-msgstr "ha gustado de "
+#: ../../Zotlabs/Module/Manage.php:167
+msgid "Make Default"
+msgstr "Convertir en predeterminado"
-#: ../../Zotlabs/Lib/Enotify.php:161 ../../Zotlabs/Lib/Enotify.php:307
-msgid "disliked"
-msgstr "no ha gustado de "
+#: ../../Zotlabs/Module/Manage.php:170
+#, php-format
+msgid "%d new introductions"
+msgstr "%d nuevas solicitudes de conexión"
-#: ../../Zotlabs/Lib/Enotify.php:166
-msgid "voted on"
-msgstr "votado en "
+#: ../../Zotlabs/Module/Manage.php:172
+msgid "Delegated Channel"
+msgstr "Canal delegado"
-#: ../../Zotlabs/Lib/Enotify.php:209
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]a %4$s[/zrl]"
-msgstr "%1$s%2$s [zrl=%3$s ]un %4$s[/zrl]"
+#: ../../Zotlabs/Module/Editwebpage.php:139
+msgid "Page link"
+msgstr "Enlace de la página"
-#: ../../Zotlabs/Lib/Enotify.php:217
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]%4$s's %5$s[/zrl]"
-msgstr "%1$s %2$s[zrl=%3$s]%5$s de %4$s[/zrl]"
+#: ../../Zotlabs/Module/Editwebpage.php:166
+msgid "Edit Webpage"
+msgstr "Editar la página web"
-#: ../../Zotlabs/Lib/Enotify.php:226 ../../Zotlabs/Lib/Enotify.php:311
-#, php-format
-msgid "%1$s %2$s [zrl=%3$s]your %4$s[/zrl]"
-msgstr "%1$s %2$s [zrl=%3$s]su %4$s[/zrl]"
+#: ../../Zotlabs/Widget/Cover_photo.php:74
+msgid "Click to show more"
+msgstr "Hacer clic para ver más"
-#: ../../Zotlabs/Lib/Enotify.php:238
-#, php-format
-msgid "[$Projectname:Notify] Moderated Comment to conversation #%1$d by %2$s"
-msgstr "[$Projectname:Aviso] Comentario moderado en la conversación #%1$d por %2$s"
+#: ../../Zotlabs/Widget/Appcategories.php:49
+msgid "App Categories"
+msgstr "Categorías de aplicaciones"
-#: ../../Zotlabs/Lib/Enotify.php:240
-#, php-format
-msgid "[$Projectname:Notify] Comment to conversation #%1$d by %2$s"
-msgstr "[$Projectname:Aviso] Nuevo comentario de %2$s en la conversación #%1$d"
+#: ../../Zotlabs/Widget/Bookmarkedchats.php:25
+msgid "Bookmarked Chatrooms"
+msgstr "Salas de chat preferidas"
-#: ../../Zotlabs/Lib/Enotify.php:241
-#, php-format
-msgid "%1$s commented on an item/conversation you have been following"
-msgstr "%1$sha comentado un elemento/conversación que ha estado siguiendo."
+#: ../../Zotlabs/Widget/Suggestions.php:58
+msgid "Suggestions"
+msgstr "Sugerencias"
-#: ../../Zotlabs/Lib/Enotify.php:244 ../../Zotlabs/Lib/Enotify.php:331
-#: ../../Zotlabs/Lib/Enotify.php:347 ../../Zotlabs/Lib/Enotify.php:371
-#: ../../Zotlabs/Lib/Enotify.php:388 ../../Zotlabs/Lib/Enotify.php:401
-#, php-format
-msgid "Please visit %s to view and/or reply to the conversation."
-msgstr "Para ver o comentar la conversación, visite %s"
+#: ../../Zotlabs/Widget/Suggestions.php:59
+msgid "See more..."
+msgstr "Ver más..."
-#: ../../Zotlabs/Lib/Enotify.php:248 ../../Zotlabs/Lib/Enotify.php:249
-#, php-format
-msgid "Please visit %s to approve or reject this comment."
-msgstr "Por favor, visite %s para aprobar o rechazar este comentario."
+#: ../../Zotlabs/Widget/Chatroom_list.php:26
+msgid "Overview"
+msgstr "Resumen"
-#: ../../Zotlabs/Lib/Enotify.php:327
-#, php-format
-msgid "[$Projectname:Notify] Like received to conversation #%1$d by %2$s"
-msgstr "[$Projectname:Aviso] \"Me gusta\" de %2$s en la conversación #%1$d"
+#: ../../Zotlabs/Widget/Channel_activities.php:46
+msgid "No recent activities"
+msgstr "No hay actividades recientes"
-#: ../../Zotlabs/Lib/Enotify.php:328
-#, php-format
-msgid "%1$s liked an item/conversation you created"
-msgstr "A %1$s le ha gustado un elemento o conversación que ha creado usted."
+#: ../../Zotlabs/Widget/Channel_activities.php:214
+msgctxt "noun"
+msgid "new connection"
+msgid_plural "new connections"
+msgstr[0] "Nueva conexión"
+msgstr[1] "Nuevas conexiones"
+msgstr[2] "nuevas conexiones"
-#: ../../Zotlabs/Lib/Enotify.php:339
-#, php-format
-msgid "[$Projectname:Notify] %s posted to your profile wall"
-msgstr "[$Projectname:Aviso] %s ha publicado una entrada en su página de inicio del perfil (\"muro\")"
+#: ../../Zotlabs/Widget/Channel_activities.php:220
+msgctxt "noun"
+msgid "notice"
+msgid_plural "notices"
+msgstr[0] "aviso"
+msgstr[1] "avisos"
+msgstr[2] "avisos"
-#: ../../Zotlabs/Lib/Enotify.php:341
-#, php-format
-msgid "%1$s posted to your profile wall at %2$s"
-msgstr "%1$s ha publicado en su muro en %2$s"
+#: ../../Zotlabs/Widget/Suggestedchats.php:36
+msgid "Suggested Chatrooms"
+msgstr "Salas de chat sugeridas"
-#: ../../Zotlabs/Lib/Enotify.php:343
-#, php-format
-msgid "%1$s posted to [zrl=%2$s]your wall[/zrl]"
-msgstr "%1$sha publicado en [zrl=%2$s]su muro[/zrl]"
+#: ../../Zotlabs/Widget/Privacygroups.php:45
+msgid "Add new group"
+msgstr "Añadir nuevo grupo"
-#: ../../Zotlabs/Lib/Enotify.php:365
-#, php-format
-msgid "[$Projectname:Notify] %s tagged you"
-msgstr "[$Projectname:Aviso] %s le ha etiquetado"
+#: ../../Zotlabs/Widget/Pinned.php:84
+msgid "I agree"
+msgstr "Estoy de acuerdo"
-#: ../../Zotlabs/Lib/Enotify.php:366
-#, php-format
-msgid "%1$s tagged you at %2$s"
-msgstr "%1$sle ha etiquetado en %2$s"
+#: ../../Zotlabs/Widget/Pinned.php:84
+msgid "I disagree"
+msgstr "No estoy de acuerdo"
-#: ../../Zotlabs/Lib/Enotify.php:367
-#, php-format
-msgid "%1$s [zrl=%2$s]tagged you[/zrl]."
-msgstr "%1$s [zrl=%2$s]le ha etiquetado[/zrl]."
+#: ../../Zotlabs/Widget/Pinned.php:84
+msgid "I abstain"
+msgstr "Me abstengo"
-#: ../../Zotlabs/Lib/Enotify.php:378
+#: ../../Zotlabs/Widget/Pinned.php:125 ../../Zotlabs/Widget/Pinned.php:126
#, php-format
-msgid "[$Projectname:Notify] %1$s poked you"
-msgstr "[$Projectname:Aviso] %1$s le ha dado un toque"
+msgid "View %s's profile - %s"
+msgstr "Ver el perfil de %s - %s"
-#: ../../Zotlabs/Lib/Enotify.php:379
-#, php-format
-msgid "%1$s poked you at %2$s"
-msgstr "%1$sle ha dado un toque en %2$s"
+#: ../../Zotlabs/Widget/Pinned.php:159
+msgid "Don't show"
+msgstr "No mostrar"
-#: ../../Zotlabs/Lib/Enotify.php:380
-#, php-format
-msgid "%1$s [zrl=%2$s]poked you[/zrl]."
-msgstr "%1$s [zrl=%2$s] le ha dado un toque[/zrl]."
+#: ../../Zotlabs/Widget/Notes.php:39
+msgid "Read mode"
+msgstr "Modo lectura"
-#: ../../Zotlabs/Lib/Enotify.php:395
-#, php-format
-msgid "[$Projectname:Notify] %s tagged your post"
-msgstr "[$Projectname:Aviso] %s ha etiquetado su entrada"
+#: ../../Zotlabs/Widget/Notes.php:40
+msgid "Edit mode"
+msgstr "Modo edición"
-#: ../../Zotlabs/Lib/Enotify.php:396
-#, php-format
-msgid "%1$s tagged your post at %2$s"
-msgstr "%1$sha etiquetado su entrada en %2$s"
+#: ../../Zotlabs/Widget/Notes.php:41
+msgid "Editing"
+msgstr "Editar"
-#: ../../Zotlabs/Lib/Enotify.php:397
-#, php-format
-msgid "%1$s tagged [zrl=%2$s]your post[/zrl]"
-msgstr "%1$s ha etiquetado [zrl=%2$s]su entrada[/zrl]"
+#: ../../Zotlabs/Widget/Notes.php:42
+msgid "Saving"
+msgstr "Guardar"
-#: ../../Zotlabs/Lib/Enotify.php:408
-msgid "[$Projectname:Notify] Introduction received"
-msgstr "[$Projectname:Aviso] Ha recibido una solicitud de conexión"
+#: ../../Zotlabs/Widget/Notes.php:43
+msgid "Saved"
+msgstr "Guardado"
-#: ../../Zotlabs/Lib/Enotify.php:409
-#, php-format
-msgid "You've received an new connection request from '%1$s' at %2$s"
-msgstr "Ha recibido una nueva solicitud de conexión de '%1$s' en %2$s"
+#: ../../Zotlabs/Widget/Follow.php:34
+msgid "Add New Connection"
+msgstr "Añadir nueva conexión"
-#: ../../Zotlabs/Lib/Enotify.php:410
-#, php-format
-msgid "You've received [zrl=%1$s]a new connection request[/zrl] from %2$s."
-msgstr "Ha recibido [zrl=%1$s]una nueva solicitud de conexión[/zrl] de %2$s."
+#: ../../Zotlabs/Widget/Follow.php:35
+msgid "Enter channel address"
+msgstr "Dirección del canal"
-#: ../../Zotlabs/Lib/Enotify.php:413 ../../Zotlabs/Lib/Enotify.php:431
-#, php-format
-msgid "You may visit their profile at %s"
-msgstr "Puede visitar su perfil en %s"
+#: ../../Zotlabs/Widget/Follow.php:36
+msgid "Examples: bob@example.com, https://example.com/barbara"
+msgstr "Ejemplos: manuel@ejemplo.com, https://ejemplo.com/carmen"
-#: ../../Zotlabs/Lib/Enotify.php:415
-#, php-format
-msgid "Please visit %s to approve or reject the connection request."
-msgstr "Por favor, visite %s para permitir o rechazar la solicitad de conexión."
+#: ../../Zotlabs/Widget/Archive.php:49
+msgid "Archives"
+msgstr "Hemeroteca"
-#: ../../Zotlabs/Lib/Enotify.php:422
-msgid "[$Projectname:Notify] Friend suggestion received"
-msgstr "[$Projectname:Aviso] Ha recibido una sugerencia de conexión"
+#: ../../Zotlabs/Widget/Permcats.php:43
+msgid "Add new role"
+msgstr "Añadir nuevo rol"
-#: ../../Zotlabs/Lib/Enotify.php:423
-#, php-format
-msgid "You've received a friend suggestion from '%1$s' at %2$s"
-msgstr "Ha recibido una sugerencia de amistad de '%1$s' en %2$s"
+#: ../../Zotlabs/Widget/Permcats.php:93
+msgid "Role members"
+msgstr "Miembros del rol"
-#: ../../Zotlabs/Lib/Enotify.php:424
-#, php-format
-msgid ""
-"You've received [zrl=%1$s]a friend suggestion[/zrl] for %2$s from %3$s."
-msgstr "Ha recibido [zrl=%1$s]una sugerencia de amistad[/zrl] para %2$s de %3$s."
+#: ../../Zotlabs/Widget/Notifications.php:24
+msgid "New network activity notifications"
+msgstr "Avisos de nueva actividad en la red"
-#: ../../Zotlabs/Lib/Enotify.php:429
-msgid "Name:"
-msgstr "Nombre:"
+#: ../../Zotlabs/Widget/Notifications.php:27
+msgid "Network stream"
+msgstr "Stream de la red"
-#: ../../Zotlabs/Lib/Enotify.php:430
-msgid "Photo:"
-msgstr "Foto:"
+#: ../../Zotlabs/Widget/Notifications.php:30
+#: ../../Zotlabs/Widget/Notifications.php:69
+msgid "Mark all notifications read"
+msgstr "Marcar todas las notificaciones como leídas"
-#: ../../Zotlabs/Lib/Enotify.php:433
-#, php-format
-msgid "Please visit %s to approve or reject the suggestion."
-msgstr "Por favor, visite %s para aprobar o rechazar la sugerencia."
+#: ../../Zotlabs/Widget/Notifications.php:33
+#: ../../Zotlabs/Widget/Notifications.php:53
+#: ../../Zotlabs/Widget/Notifications.php:72
+#: ../../Zotlabs/Widget/Notifications.php:164
+msgid "Show new posts only"
+msgstr "Mostrar solo las entradas nuevas"
-#: ../../Zotlabs/Lib/Enotify.php:658
-msgid "[$Projectname:Notify]"
-msgstr "[$Projectname:Aviso]"
+#: ../../Zotlabs/Widget/Notifications.php:34
+#: ../../Zotlabs/Widget/Notifications.php:54
+#: ../../Zotlabs/Widget/Notifications.php:73
+#: ../../Zotlabs/Widget/Notifications.php:134
+#: ../../Zotlabs/Widget/Notifications.php:165
+msgid "Filter by name or address"
+msgstr "Filtrar por nombre o dirección"
-#: ../../Zotlabs/Lib/Enotify.php:826
-msgid "created a new poll"
-msgstr "se ha creado una nueva encuesta"
+#: ../../Zotlabs/Widget/Notifications.php:44
+msgid "New home activity notifications"
+msgstr "Avisos de nueva actividad en su página principal"
-#: ../../Zotlabs/Lib/Enotify.php:826
-msgid "created a new post"
-msgstr "ha creado una nueva entrada"
+#: ../../Zotlabs/Widget/Notifications.php:47
+msgid "Home stream"
+msgstr "Stream de su página principal"
-#: ../../Zotlabs/Lib/Enotify.php:827
-#, php-format
-msgid "voted on %s's poll"
-msgstr "votado en la encuesta de %s"
+#: ../../Zotlabs/Widget/Notifications.php:50
+#: ../../Zotlabs/Widget/Notifications.php:161
+msgid "Mark all notifications seen"
+msgstr "Marcar todas las notificaciones como vistas"
-#: ../../Zotlabs/Lib/Enotify.php:827
-#, php-format
-msgid "commented on %s's post"
-msgstr "ha comentado la entrada de %s"
+#: ../../Zotlabs/Widget/Notifications.php:62
+#: ../../Zotlabs/Widget/Activity_filter.php:44
+msgid "Direct Messages"
+msgstr "Mensajes directos"
-#: ../../Zotlabs/Lib/Enotify.php:831
-#, php-format
-msgid "repeated %s's post"
-msgstr "repetida la entrada de %s"
+#: ../../Zotlabs/Widget/Notifications.php:63
+msgid "New direct messages notifications"
+msgstr "Nuevas notificaciones de mensajes directos"
-#: ../../Zotlabs/Lib/Enotify.php:835
-#, php-format
-msgid "liked %s's post"
-msgstr "Le ha gustado la entrada de %s"
+#: ../../Zotlabs/Widget/Notifications.php:66
+msgid "Direct messages stream"
+msgstr "Stream de mensajes directos"
-#: ../../Zotlabs/Lib/Enotify.php:839
-#, php-format
-msgid "disliked %s's post"
-msgstr "No le ha gustado la entrada de %s"
+#: ../../Zotlabs/Widget/Notifications.php:81
+#: ../../Zotlabs/Widget/Activity_filter.php:53
+msgid "Events"
+msgstr "Eventos"
-#: ../../Zotlabs/Lib/Enotify.php:843 ../../Zotlabs/Lib/Enotify.php:946
-msgid "shared a file with you"
-msgstr "compartió un archivo con usted"
+#: ../../Zotlabs/Widget/Notifications.php:82
+msgid "New events notifications"
+msgstr "Avisos de nuevos eventos"
-#: ../../Zotlabs/Lib/Enotify.php:852
-#, php-format
-msgid "edited a post dated %s"
-msgstr "ha editado una entrada %s"
+#: ../../Zotlabs/Widget/Notifications.php:85
+msgid "View events"
+msgstr "Ver los eventos"
-#: ../../Zotlabs/Lib/Enotify.php:855
-#, php-format
-msgid "edited a comment dated %s"
-msgstr "ha editado un comentario %s"
+#: ../../Zotlabs/Widget/Notifications.php:88
+msgid "Mark all events seen"
+msgstr "Marcar todos los eventos como leidos"
-#: ../../Zotlabs/Lib/Enotify.php:931
-msgid "added your channel"
-msgstr "añadió este canal a sus conexiones"
+#: ../../Zotlabs/Widget/Notifications.php:97
+msgid "New connections notifications"
+msgstr "Avisos de nuevas conexiones"
-#: ../../Zotlabs/Lib/Enotify.php:961
-msgid "sent you a direct message"
-msgstr "enviarle un mensaje directo"
+#: ../../Zotlabs/Widget/Notifications.php:100
+msgid "View all connections"
+msgstr "Ver todas las conexiones"
-#: ../../Zotlabs/Lib/Enotify.php:968
-msgid "g A l F d"
-msgstr "g A l d F"
+#: ../../Zotlabs/Widget/Notifications.php:109
+msgid "New files notifications"
+msgstr "Avisos de nuevos ficheros"
-#: ../../Zotlabs/Lib/Enotify.php:971
-msgid "[today]"
-msgstr "[hoy]"
+#: ../../Zotlabs/Widget/Notifications.php:116
+#: ../../Zotlabs/Widget/Notifications.php:117
+#: ../../Zotlabs/Widget/Messages.php:35
+msgid "Notices"
+msgstr "Avisos"
-#: ../../Zotlabs/Lib/Enotify.php:981
-msgid "created an event"
-msgstr "se creó un evento"
+#: ../../Zotlabs/Widget/Notifications.php:120
+msgid "View all notices"
+msgstr "Ver todos los avisos"
-#: ../../Zotlabs/Lib/Enotify.php:996
-msgid "status verified"
-msgstr "estado verificado"
+#: ../../Zotlabs/Widget/Notifications.php:123
+msgid "Mark all notices seen"
+msgstr "Marcar como leídos todos los avisos"
-#: ../../Zotlabs/Lib/Connect.php:46 ../../Zotlabs/Lib/Connect.php:143
-msgid "Channel is blocked on this site."
-msgstr "El canal está bloqueado en este sitio."
+#: ../../Zotlabs/Widget/Notifications.php:144
+msgid "Registrations"
+msgstr "Registros"
-#: ../../Zotlabs/Lib/Connect.php:51
-msgid "Channel location missing."
-msgstr "Falta la dirección del canal."
+#: ../../Zotlabs/Widget/Notifications.php:145
+msgid "New registrations notifications"
+msgstr "Notificaciones de nuevos registros"
-#: ../../Zotlabs/Lib/Connect.php:103
-msgid "Remote channel or protocol unavailable."
-msgstr "Canal remoto o protocolo no disponible."
+#: ../../Zotlabs/Widget/Notifications.php:155
+msgid "New public stream notifications"
+msgstr "Nuevos avisos del stream público"
-#: ../../Zotlabs/Lib/Connect.php:137
-msgid "Channel discovery failed."
-msgstr "El intento de acceder al canal ha fallado."
+#: ../../Zotlabs/Widget/Notifications.php:158
+msgid "Public stream"
+msgstr "\"Stream\" público"
-#: ../../Zotlabs/Lib/Connect.php:155
-msgid "Protocol disabled."
-msgstr "Protocolo deshabilitado."
+#: ../../Zotlabs/Widget/Notifications.php:172
+msgid "Sorry, you have got no notifications at the moment"
+msgstr "Lo sentimos, por el momento no ha recibido ninguna notificación"
-#: ../../Zotlabs/Lib/Connect.php:167
-msgid "Cannot connect to yourself."
-msgstr "No puede conectarse consigo mismo."
+#: ../../Zotlabs/Widget/Settings_menu.php:37
+msgid "Account settings"
+msgstr "Configuración de la cuenta"
-#: ../../Zotlabs/Lib/Connect.php:272
-msgid "error saving data"
-msgstr "error guardando los datos"
+#: ../../Zotlabs/Widget/Settings_menu.php:43
+msgid "Channel settings"
+msgstr "Configuración del canal"
-#: ../../Zotlabs/Lib/Chatroom.php:25
-msgid "Missing room name"
-msgstr "Sala de chat sin nombre"
+#: ../../Zotlabs/Widget/Settings_menu.php:49
+msgid "Privacy settings"
+msgstr "Ajustes de privacidad"
-#: ../../Zotlabs/Lib/Chatroom.php:34
-msgid "Duplicate room name"
-msgstr "Nombre de sala duplicado."
+#: ../../Zotlabs/Widget/Settings_menu.php:56
+msgid "Display settings"
+msgstr "Ajustes de visualización"
-#: ../../Zotlabs/Lib/Chatroom.php:84 ../../Zotlabs/Lib/Chatroom.php:92
-msgid "Invalid room specifier."
-msgstr "Especificador de sala no válido."
+#: ../../Zotlabs/Widget/Settings_menu.php:63
+msgid "Manage locations"
+msgstr "Gestión de ubicaciones (clones) del canal"
-#: ../../Zotlabs/Lib/Chatroom.php:124
-msgid "Room not found."
-msgstr "Sala no encontrada."
+#: ../../Zotlabs/Widget/Tokens.php:41
+msgid "Add new guest"
+msgstr "Añadir un nuevo invitado"
-#: ../../Zotlabs/Lib/Chatroom.php:145
-msgid "Room is full"
-msgstr "La sala está llena."
+#: ../../Zotlabs/Widget/Rating.php:57
+msgid "Rating Tools"
+msgstr "Valoraciones"
-#: ../../Zotlabs/Lib/Apps.php:328
-msgid "Affinity Tool"
-msgstr "Herramienta de afinidad"
+#: ../../Zotlabs/Widget/Rating.php:61 ../../Zotlabs/Widget/Rating.php:63
+msgid "Rate Me"
+msgstr "Valorar este canal"
-#: ../../Zotlabs/Lib/Apps.php:331
-msgid "Site Admin"
-msgstr "Administrador del sitio"
+#: ../../Zotlabs/Widget/Rating.php:66
+msgid "View Ratings"
+msgstr "Mostrar las valoraciones"
-#: ../../Zotlabs/Lib/Apps.php:335
-msgid "Content Filter"
-msgstr "Filtro de contenido"
+#: ../../Zotlabs/Widget/Affinity.php:60
+msgid "Refresh"
+msgstr "Recargar"
-#: ../../Zotlabs/Lib/Apps.php:338
-msgid "Remote Diagnostics"
-msgstr "Diagnóstico remoto"
+#: ../../Zotlabs/Widget/Savedsearch.php:81
+msgid "Remove term"
+msgstr "Eliminar término"
-#: ../../Zotlabs/Lib/Apps.php:339
-msgid "Suggest Channels"
-msgstr "Sugerir canales"
+#: ../../Zotlabs/Widget/Photo_rand.php:63 ../../Zotlabs/Widget/Photo.php:54
+msgid "photo/image"
+msgstr "foto/imagen"
-#: ../../Zotlabs/Lib/Apps.php:341
-msgid "Channel Manager"
-msgstr "Administración de canales"
+#: ../../Zotlabs/Widget/Hq_controls.php:23
+msgid "Toggle post editor"
+msgstr "Alternar editor de entradas"
-#: ../../Zotlabs/Lib/Apps.php:342
-msgid "Stream"
-msgstr "Stream"
+#: ../../Zotlabs/Widget/Hq_controls.php:33
+msgid "Toggle personal notes"
+msgstr "Alternar notas personales"
-#: ../../Zotlabs/Lib/Apps.php:353
-msgid "Mail"
-msgstr "Correo"
+#: ../../Zotlabs/Widget/Hq_controls.php:43
+msgid "Channel activities"
+msgstr "Actividades del canal"
-#: ../../Zotlabs/Lib/Apps.php:356
-msgid "Chat"
-msgstr "Chat"
+#: ../../Zotlabs/Widget/Activity_filter.php:48
+msgid "Show direct (private) messages"
+msgstr "Mostrar mensajes (privados) directos"
-#: ../../Zotlabs/Lib/Apps.php:358
-msgid "Probe"
-msgstr "Probar"
+#: ../../Zotlabs/Widget/Activity_filter.php:57
+msgid "Show posts that include events"
+msgstr "Mostrar entradas que incluyan eventos"
-#: ../../Zotlabs/Lib/Apps.php:359
-msgid "Suggest"
-msgstr "Sugerir"
+#: ../../Zotlabs/Widget/Activity_filter.php:63
+msgid "Polls"
+msgstr "Encuestas"
-#: ../../Zotlabs/Lib/Apps.php:360
-msgid "Random Channel"
-msgstr "Canal aleatorio"
+#: ../../Zotlabs/Widget/Activity_filter.php:67
+msgid "Show posts that include polls"
+msgstr "Mostrar entradas que incluyan encuestas"
-#: ../../Zotlabs/Lib/Apps.php:361
-msgid "Invite"
-msgstr "Invitar"
+#: ../../Zotlabs/Widget/Activity_filter.php:90
+#, php-format
+msgid "Show posts related to the %s privacy group"
+msgstr "Mostrar entradas relacionadas con el grupo %s"
-#: ../../Zotlabs/Lib/Apps.php:364 ../../Zotlabs/Storage/Browser.php:407
-msgid "Post"
-msgstr "Publicación"
+#: ../../Zotlabs/Widget/Activity_filter.php:99
+msgid "Show my privacy groups"
+msgstr "Mostrar mis grupos de canales"
-#: ../../Zotlabs/Lib/Apps.php:369
-msgid "Notifications"
-msgstr "Notificaciones"
+#: ../../Zotlabs/Widget/Activity_filter.php:123
+msgid "Show posts to this forum"
+msgstr "Mostrar las entradas en este foro"
-#: ../../Zotlabs/Lib/Apps.php:370
-msgid "Order Apps"
-msgstr "Ordenar las apps"
+#: ../../Zotlabs/Widget/Activity_filter.php:134
+msgid "Show forums"
+msgstr "Mostrar los foros"
-#: ../../Zotlabs/Lib/Apps.php:371
-msgid "CardDAV"
-msgstr "CardDAV"
+#: ../../Zotlabs/Widget/Activity_filter.php:148
+msgid "Starred Posts"
+msgstr "Entradas preferidas"
-#: ../../Zotlabs/Lib/Apps.php:375
-msgid "OAuth Apps Manager"
-msgstr "Administrador de apps OAuth"
+#: ../../Zotlabs/Widget/Activity_filter.php:152
+msgid "Show posts that I have starred"
+msgstr "Mostrar entradas que he señalado como preferidas"
-#: ../../Zotlabs/Lib/Apps.php:376
-msgid "OAuth2 Apps Manager"
-msgstr "Administrador de apps OAuth2"
+#: ../../Zotlabs/Widget/Activity_filter.php:163
+msgid "Personal Posts"
+msgstr "Entradas personales"
-#: ../../Zotlabs/Lib/Apps.php:377
-msgid "PDL Editor"
-msgstr "Editor PDL"
+#: ../../Zotlabs/Widget/Activity_filter.php:167
+msgid "Show posts that mention or involve me"
+msgstr "Mostrar entradas que me mencionen o involucren"
-#: ../../Zotlabs/Lib/Apps.php:380
-msgid "My Chatrooms"
-msgstr "Mis salas de chat"
+#: ../../Zotlabs/Widget/Activity_filter.php:190
+#, php-format
+msgid "Show posts that I have filed to %s"
+msgstr "Mostrar las entradas que he enviado a %s"
-#: ../../Zotlabs/Lib/Apps.php:381
-msgid "Channel Export"
-msgstr "Exportar canal"
+#: ../../Zotlabs/Widget/Activity_filter.php:200
+msgid "Show filed post categories"
+msgstr "Mostrar los temas de las entradas archivadas"
-#: ../../Zotlabs/Lib/Apps.php:575 ../../Zotlabs/Lib/Apps.php:597
-msgid "Purchase"
-msgstr "Comprar"
+#: ../../Zotlabs/Widget/Activity_filter.php:214
+msgid "Panel search"
+msgstr "Panel de búsqueda"
-#: ../../Zotlabs/Lib/Apps.php:602
-msgid "Undelete"
-msgstr "Recuperar"
+#: ../../Zotlabs/Widget/Activity_filter.php:224
+msgid "Filter by name"
+msgstr "Filtrar por nombre"
-#: ../../Zotlabs/Lib/Apps.php:610
-msgid "Add to app-tray"
-msgstr "Añadir a la bandeja de aplicaciones"
+#: ../../Zotlabs/Widget/Activity_filter.php:239
+msgid "Remove active filter"
+msgstr "Eliminar el filtro activo"
-#: ../../Zotlabs/Lib/Apps.php:611
-msgid "Remove from app-tray"
-msgstr "Quitar de la bandeja de aplicaciones"
+#: ../../Zotlabs/Widget/Activity_filter.php:255
+msgid "Stream Filters"
+msgstr "Filtros del stream"
-#: ../../Zotlabs/Lib/Apps.php:612
-msgid "Pin to navbar"
-msgstr "Fijar en la barra de navegación"
+#: ../../Zotlabs/Widget/Cdav.php:41
+msgid "Select Channel"
+msgstr "Seleccionar un canal"
-#: ../../Zotlabs/Lib/Apps.php:613
-msgid "Unpin from navbar"
-msgstr "Quitar de la barra de navegación"
+#: ../../Zotlabs/Widget/Cdav.php:46
+msgid "Read-write"
+msgstr "Lectura y escritura"
-#: ../../Zotlabs/Lib/Techlevels.php:10
-msgid "0. Beginner/Basic"
-msgstr "0. Principiante/Básico"
+#: ../../Zotlabs/Widget/Cdav.php:47
+msgid "Read-only"
+msgstr "Sólo lectura"
-#: ../../Zotlabs/Lib/Techlevels.php:11
-msgid "1. Novice - not skilled but willing to learn"
-msgstr "1. Novato: no cualificado, pero dispuesto a aprender"
+#: ../../Zotlabs/Widget/Cdav.php:133
+msgid "Channel Calendar"
+msgstr "Calendario del canal"
-#: ../../Zotlabs/Lib/Techlevels.php:12
-msgid "2. Intermediate - somewhat comfortable"
-msgstr "2. Intermedio - algo cómodo"
+#: ../../Zotlabs/Widget/Cdav.php:137
+msgid "Shared CalDAV Calendars"
+msgstr "Calendarios CalDAV compartidos"
-#: ../../Zotlabs/Lib/Techlevels.php:13
-msgid "3. Advanced - very comfortable"
-msgstr "3. Avanzado - muy cómodo"
+#: ../../Zotlabs/Widget/Cdav.php:141
+msgid "Share this calendar"
+msgstr "Compartir este calendario"
-#: ../../Zotlabs/Lib/Techlevels.php:14
-msgid "4. Expert - I can write computer code"
-msgstr "4. Experto - Puedo escribir código informático"
+#: ../../Zotlabs/Widget/Cdav.php:143
+msgid "Calendar name and color"
+msgstr "Nombre y color del calendario"
-#: ../../Zotlabs/Lib/Techlevels.php:15
-msgid "5. Wizard - I probably know more than you do"
-msgstr "5. Colaborador - probablemente sé más que tú"
+#: ../../Zotlabs/Widget/Cdav.php:145
+msgid "Create new CalDAV calendar"
+msgstr "Crear un nuevo calendario CalDAV"
-#: ../../Zotlabs/Lib/Libzotdir.php:163
-msgid "Directory Options"
-msgstr "Opciones del directorio"
+#: ../../Zotlabs/Widget/Cdav.php:147
+msgid "Calendar Name"
+msgstr "Nombre del calendario"
-#: ../../Zotlabs/Lib/Libzotdir.php:165
-msgid "Safe Mode"
-msgstr "Modo seguro"
+#: ../../Zotlabs/Widget/Cdav.php:148
+msgid "Calendar Tools"
+msgstr "Gestión de calendarios"
-#: ../../Zotlabs/Lib/Libzotdir.php:166
-msgid "Public Forums Only"
-msgstr "Solo foros públicos"
+#: ../../Zotlabs/Widget/Cdav.php:150
+msgid "Import calendar"
+msgstr "Importar un calendario"
-#: ../../Zotlabs/Lib/Libzotdir.php:168
-msgid "This Website Only"
-msgstr "Solo este sitio web"
+#: ../../Zotlabs/Widget/Cdav.php:151
+msgid "Select a calendar to import to"
+msgstr "Seleccionar un calendario para importarlo"
-#: ../../Zotlabs/Lib/Libzot.php:679
-msgid "Unable to verify channel signature"
-msgstr "No ha sido posible de verificar la firma del canal"
+#: ../../Zotlabs/Widget/Cdav.php:178
+msgid "Addressbooks"
+msgstr "Agenda de direcciones"
-#: ../../Zotlabs/Lib/ThreadItem.php:110
-msgid "Restricted message"
-msgstr "Mensaje restringido"
+#: ../../Zotlabs/Widget/Cdav.php:180
+msgid "Addressbook name"
+msgstr "Nombre de la agenda"
-#: ../../Zotlabs/Lib/ThreadItem.php:117
-msgid "Direct message"
-msgstr "Mensaje directo"
+#: ../../Zotlabs/Widget/Cdav.php:182
+msgid "Create new addressbook"
+msgstr "Crear una nueva agenda de direcciones"
-#: ../../Zotlabs/Lib/ThreadItem.php:122
-msgid "Public Policy"
-msgstr "Política pública"
+#: ../../Zotlabs/Widget/Cdav.php:183
+msgid "Addressbook Name"
+msgstr "Nombre de la agenda"
-#: ../../Zotlabs/Lib/ThreadItem.php:160
-msgid "Privacy conflict. Discretion advised."
-msgstr "Conflicto de privacidad. Se aconseja discreción."
+#: ../../Zotlabs/Widget/Cdav.php:185
+msgid "Addressbook Tools"
+msgstr "Gestión de agendas de direcciones"
-#: ../../Zotlabs/Lib/ThreadItem.php:191 ../../Zotlabs/Storage/Browser.php:369
-msgid "Admin Delete"
-msgstr "Eliminar admin"
+#: ../../Zotlabs/Widget/Cdav.php:186
+msgid "Import addressbook"
+msgstr "Importar una agenda de direcciones"
-#: ../../Zotlabs/Lib/ThreadItem.php:319
-msgid "Reply on this comment"
-msgstr "Responder a este comentario"
+#: ../../Zotlabs/Widget/Cdav.php:187
+msgid "Select an addressbook to import to"
+msgstr "Seleccionar una agenda para importarla"
-#: ../../Zotlabs/Lib/ThreadItem.php:319
-msgid "reply"
-msgstr "responder"
+#: ../../Zotlabs/Widget/Appstore.php:16
+msgid "App Collections"
+msgstr "Colección de aplicaciones"
-#: ../../Zotlabs/Lib/ThreadItem.php:319
-msgid "Reply to"
-msgstr "Responder a "
+#: ../../Zotlabs/Widget/Appstore.php:18
+msgid "Installed apps"
+msgstr "Aplicaciones instaladas"
-#: ../../Zotlabs/Lib/ThreadItem.php:342
-msgid "Delivery Report"
-msgstr "Informe de transmisión"
+#: ../../Zotlabs/Widget/Newmember.php:36
+msgid "Profile Creation"
+msgstr "Creación de perfiles"
-#: ../../Zotlabs/Lib/ThreadItem.php:362
-#, php-format
-msgid "%d comment"
-msgid_plural "%d comments"
-msgstr[0] "%d comentario"
-msgstr[1] "%d comentarios"
-msgstr[2] "%d comentarios"
+#: ../../Zotlabs/Widget/Newmember.php:38
+msgid "Upload profile photo"
+msgstr "Cargar la foto del perfil"
-#: ../../Zotlabs/Lib/ThreadItem.php:363
-#, php-format
-msgid "%d unseen"
-msgstr "%dno visto/a vistos/as"
+#: ../../Zotlabs/Widget/Newmember.php:39
+msgid "Upload cover photo"
+msgstr "Cargar la foto de portada del perfil"
-#: ../../Zotlabs/Lib/ThreadItem.php:413
-msgid "Forum"
-msgstr "Foro"
+#: ../../Zotlabs/Widget/Newmember.php:43
+msgid "Find and Connect with others"
+msgstr "Encontrar y conectarse con otros"
-#: ../../Zotlabs/Lib/ThreadItem.php:420
-msgid "to"
-msgstr "a"
+#: ../../Zotlabs/Widget/Newmember.php:45
+msgid "View the directory"
+msgstr "Ver el directorio"
-#: ../../Zotlabs/Lib/ThreadItem.php:422
-msgid "Wall-to-Wall"
-msgstr "De página del perfil a página del perfil (de \"muro\" a \"muro\")"
+#: ../../Zotlabs/Widget/Newmember.php:47
+msgid "Manage your connections"
+msgstr "Gestionar sus conexiones"
-#: ../../Zotlabs/Lib/ThreadItem.php:423
-msgid "via Wall-To-Wall:"
-msgstr "Mediante el procedimiento página del perfil a página del perfil (de \"muro\" a \"muro\")"
+#: ../../Zotlabs/Widget/Newmember.php:50
+msgid "Communicate"
+msgstr "Comunicarse"
-#: ../../Zotlabs/Lib/ThreadItem.php:451
-msgid "Attend"
-msgstr "Participar o asistir"
+#: ../../Zotlabs/Widget/Newmember.php:52
+msgid "View your channel homepage"
+msgstr "Ver la página principal de su canal"
-#: ../../Zotlabs/Lib/ThreadItem.php:469
-msgid "Go to previous comment"
-msgstr "Ir al comentario anterior"
+#: ../../Zotlabs/Widget/Newmember.php:53
+msgid "View your network stream"
+msgstr "Ver el \"stream\" de su red"
-#: ../../Zotlabs/Lib/ThreadItem.php:482
-msgid "Add to Calendar"
-msgstr "Añadir al calendario"
+#: ../../Zotlabs/Widget/Newmember.php:59
+msgid "Documentation"
+msgstr "Documentación"
-#: ../../Zotlabs/Lib/ThreadItem.php:841
-msgid "Image"
-msgstr "Imagen"
+#: ../../Zotlabs/Widget/Newmember.php:62
+msgid "Missing Features?"
+msgstr "¿Faltan Características?"
-#: ../../Zotlabs/Lib/ThreadItem.php:843
-msgid "Insert Link"
-msgstr "Insertar enlace"
+#: ../../Zotlabs/Widget/Newmember.php:64
+msgid "Pin apps to navigation bar"
+msgstr "Fijar apps a la barra de navegación"
-#: ../../Zotlabs/Lib/ThreadItem.php:844
-msgid "Video"
-msgstr "Vídeo"
+#: ../../Zotlabs/Widget/Newmember.php:65
+msgid "Install more apps"
+msgstr "Instalar más apps"
-#: ../../Zotlabs/Lib/ThreadItem.php:853
-msgid "Your full name (required)"
-msgstr "Su nombre completo (requerido)"
+#: ../../Zotlabs/Widget/Newmember.php:76
+msgid "View public stream"
+msgstr "Ver el \"stream\" público"
-#: ../../Zotlabs/Lib/ThreadItem.php:854
-msgid "Your email address (required)"
-msgstr "Su dirección de correo electrónico (requerido)"
+#: ../../Zotlabs/Widget/Activity_order.php:96
+msgid "Commented Date"
+msgstr "Fecha de los comentarios"
-#: ../../Zotlabs/Lib/ThreadItem.php:855
-msgid "Your website URL (optional)"
-msgstr "La URL de su sitio web (opcional)"
+#: ../../Zotlabs/Widget/Activity_order.php:100
+msgid "Order by last commented date"
+msgstr "Ordenar por la última fecha de los comentarios"
-#: ../../Zotlabs/Lib/DB_Upgrade.php:67
-msgid "Source code of failed update: "
-msgstr "Código fuente de la actualización fallida: "
+#: ../../Zotlabs/Widget/Activity_order.php:103
+msgid "Posted Date"
+msgstr "Fecha de publicación"
-#: ../../Zotlabs/Lib/DB_Upgrade.php:88
-#, php-format
-msgid "Update Error at %s"
-msgstr "Error de actualización en %s"
+#: ../../Zotlabs/Widget/Activity_order.php:107
+msgid "Order by last posted date"
+msgstr "Ordenar por la ultima fecha de publicación"
-#: ../../Zotlabs/Lib/DB_Upgrade.php:94
-#, php-format
-msgid "Update %s failed. See error logs."
-msgstr "La actualización %s ha fallado. Mire el informe de errores."
+#: ../../Zotlabs/Widget/Activity_order.php:110
+msgid "Date Unthreaded"
+msgstr "Sin enhebrar por fecha"
-#: ../../Zotlabs/Lib/PermissionDescription.php:108
-#: ../../Zotlabs/Access/PermissionRoles.php:384
-msgid "Public"
-msgstr "Público"
+#: ../../Zotlabs/Widget/Activity_order.php:114
+msgid "Order unthreaded by date"
+msgstr "Ordenar sin enhebrar por fecha"
-#: ../../Zotlabs/Lib/PermissionDescription.php:109
-msgid "Anybody in the $Projectname network"
-msgstr "Cualquiera en la red $Projectname"
+#: ../../Zotlabs/Widget/Activity_order.php:129
+msgid "Stream Order"
+msgstr "Orden del stream"
-#: ../../Zotlabs/Lib/PermissionDescription.php:110
-#, php-format
-msgid "Any account on %s"
-msgstr "Cualquier cuenta en %s"
+#: ../../Zotlabs/Widget/Activity.php:55
+msgctxt "widget"
+msgid "Activity"
+msgstr "Actividad"
-#: ../../Zotlabs/Lib/PermissionDescription.php:111
-msgid "Any of my connections"
-msgstr "Cualquiera de mis conexiones"
+#: ../../Zotlabs/Widget/Tasklist.php:31
+msgid "Tasks"
+msgstr "Tareas"
-#: ../../Zotlabs/Lib/PermissionDescription.php:112
-msgid "Only connections I specifically allow"
-msgstr "Sólo las conexiones que yo permita de forma explícita"
+#: ../../Zotlabs/Widget/Admin.php:28 ../../Zotlabs/Widget/Admin.php:66
+msgid "Member registrations waiting for confirmation"
+msgstr "Inscripciones de nuevos miembros pendientes de aprobación"
-#: ../../Zotlabs/Lib/PermissionDescription.php:113
-msgid "Anybody authenticated (could include visitors from other networks)"
-msgstr "Cualquiera que esté autenticado (podría incluir a los visitantes de otras redes)"
+#: ../../Zotlabs/Widget/Admin.php:34
+msgid "Inspect queue"
+msgstr "Examinar la cola"
-#: ../../Zotlabs/Lib/PermissionDescription.php:114
-msgid "Any connections including those who haven't yet been approved"
-msgstr "Cualquier conexión incluyendo aquellas que aún no han sido aprobadas"
+#: ../../Zotlabs/Widget/Admin.php:35
+msgid "Queueworker"
+msgstr "Queueworker - Trabajador de cola"
-#: ../../Zotlabs/Lib/PermissionDescription.php:150
-msgid ""
-"This is your default setting for the audience of your normal stream, and "
-"posts."
-msgstr "Esta es la configuración predeterminada para su flujo (stream) habitual de publicaciones."
+#: ../../Zotlabs/Widget/Admin.php:37
+msgid "DB updates"
+msgstr "Actualizaciones de la base de datos"
-#: ../../Zotlabs/Lib/PermissionDescription.php:151
-msgid ""
-"This is your default setting for who can view your default channel profile"
-msgstr "Esta es su configuración por defecto para establecer quién puede ver su perfil del canal predeterminado"
+#: ../../Zotlabs/Widget/Admin.php:62
+msgid "Addon Features"
+msgstr "Características del addon"
-#: ../../Zotlabs/Lib/PermissionDescription.php:152
-msgid "This is your default setting for who can view your connections"
-msgstr "Este es su ajuste predeterminado para establecer quién puede ver sus conexiones"
+#: ../../Zotlabs/Widget/Messages.php:32
+msgid "Public and restricted messages"
+msgstr "Mensajes públicos y restringidos"
-#: ../../Zotlabs/Lib/PermissionDescription.php:153
-msgid ""
-"This is your default setting for who can view your file storage and photos"
-msgstr "Este es su ajuste predeterminado para establecer quién puede ver su repositorio de ficheros y sus fotos"
+#: ../../Zotlabs/Widget/Messages.php:33
+msgid "Direct messages"
+msgstr "Mensajes directos"
-#: ../../Zotlabs/Lib/PermissionDescription.php:154
-msgid "This is your default setting for the audience of your webpages"
-msgstr "Este es el ajuste predeterminado para establecer la audiencia de sus páginas web"
+#: ../../Zotlabs/Widget/Messages.php:34
+msgid "Starred messages"
+msgstr "Entradas preferidas"
-#: ../../Zotlabs/Lib/Libsync.php:805
-#, php-format
-msgid "Unable to verify site signature for %s"
-msgstr "No ha sido posible de verificar la firma del sitio para %s"
+#: ../../Zotlabs/Widget/Messages.php:37
+msgid "No messages"
+msgstr "Sin mensajes"
+
+#: ../../Zotlabs/Widget/Messages.php:38
+msgid "Unseen"
+msgstr "No visto"
+
+#: ../../Zotlabs/Widget/Chatroom_members.php:17
+msgid "Chat Members"
+msgstr "Miembros del chat"
#: ../../Zotlabs/Access/PermissionRoles.php:337
msgid "Social Networking"
@@ -15532,15 +15496,15 @@ msgstr "Se puede administrar mi canal"
msgid "Change filename to"
msgstr "Cambiar el nombre de archivo a "
-#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:390
+#: ../../Zotlabs/Storage/Browser.php:309 ../../Zotlabs/Storage/Browser.php:393
msgid "Select a target location"
msgstr "Seleccionar un lugar de destino "
-#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:391
+#: ../../Zotlabs/Storage/Browser.php:310 ../../Zotlabs/Storage/Browser.php:394
msgid "Copy to target location"
msgstr "Copiar a la ubicación de destino"
-#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:389
+#: ../../Zotlabs/Storage/Browser.php:311 ../../Zotlabs/Storage/Browser.php:392
msgid "Set permissions for all files and sub folders"
msgstr "Establecer los permisos para todos los ficheros y subcarpetas"
@@ -15552,124 +15516,90 @@ msgstr "Advertir a sus contactos sobre este archivo"
msgid "File category"
msgstr "Categoría del fichero"
-#: ../../Zotlabs/Storage/Browser.php:362
+#: ../../Zotlabs/Storage/Browser.php:365
msgid "Total"
msgstr "Total"
-#: ../../Zotlabs/Storage/Browser.php:364
+#: ../../Zotlabs/Storage/Browser.php:367
msgid "Shared"
msgstr "Compartido"
-#: ../../Zotlabs/Storage/Browser.php:366
+#: ../../Zotlabs/Storage/Browser.php:369
msgid "Add Files"
msgstr "Añadir ficheros"
-#: ../../Zotlabs/Storage/Browser.php:381
+#: ../../Zotlabs/Storage/Browser.php:384
msgid "parent"
msgstr "padre"
-#: ../../Zotlabs/Storage/Browser.php:399
+#: ../../Zotlabs/Storage/Browser.php:402
msgid "Select All"
msgstr "Seleccionar todo"
-#: ../../Zotlabs/Storage/Browser.php:400
+#: ../../Zotlabs/Storage/Browser.php:403
msgid "Bulk Actions"
msgstr "Acciones a gran escala"
-#: ../../Zotlabs/Storage/Browser.php:401
+#: ../../Zotlabs/Storage/Browser.php:404
msgid "Adjust Permissions"
msgstr "Ajustar permisos"
-#: ../../Zotlabs/Storage/Browser.php:402
+#: ../../Zotlabs/Storage/Browser.php:405
msgid "Move or Copy"
msgstr "Mover o copiar"
-#: ../../Zotlabs/Storage/Browser.php:405
+#: ../../Zotlabs/Storage/Browser.php:408
msgid "Info"
msgstr "Información"
-#: ../../Zotlabs/Storage/Browser.php:406
+#: ../../Zotlabs/Storage/Browser.php:409
msgid "Rename"
msgstr "Renombrar"
-#: ../../Zotlabs/Storage/Browser.php:408
+#: ../../Zotlabs/Storage/Browser.php:411
msgid "Attachment BBcode"
msgstr "Adjuntar código BBcode"
-#: ../../Zotlabs/Storage/Browser.php:409
+#: ../../Zotlabs/Storage/Browser.php:412
msgid "Embed BBcode"
msgstr "Código BBcode incorporado"
-#: ../../Zotlabs/Storage/Browser.php:410
+#: ../../Zotlabs/Storage/Browser.php:413
msgid "Link BBcode"
msgstr "Enlace BBcode"
-#: ../../Zotlabs/Storage/Browser.php:480
+#: ../../Zotlabs/Storage/Browser.php:486
#, php-format
msgid "You are using %1$s of your available file storage."
msgstr "Está usando %1$s de su espacio disponible para ficheros."
-#: ../../Zotlabs/Storage/Browser.php:485
+#: ../../Zotlabs/Storage/Browser.php:491
#, php-format
msgid "You are using %1$s of %2$s available file storage. (%3$s&#37;)"
msgstr "Está usando %1$s de %2$s que tiene a su disposición para ficheros. (%3$s&#37;)"
-#: ../../Zotlabs/Storage/Browser.php:496
+#: ../../Zotlabs/Storage/Browser.php:502
msgid "WARNING:"
msgstr "ATENCIÓN: "
-#: ../../Zotlabs/Storage/Browser.php:537
+#: ../../Zotlabs/Storage/Browser.php:543
msgid "Create new folder"
msgstr "Crear nueva carpeta"
-#: ../../Zotlabs/Storage/Browser.php:539
+#: ../../Zotlabs/Storage/Browser.php:545
msgid "Upload file"
msgstr "Subir fichero"
-#: ../../Zotlabs/Storage/Browser.php:551
+#: ../../Zotlabs/Storage/Browser.php:557
msgid "Drop files here to immediately upload"
msgstr "Arrastre los ficheros aquí para subirlos de forma inmediata"
-#: ../../Zotlabs/Storage/Browser.php:554
+#: ../../Zotlabs/Storage/Browser.php:560
msgid ""
"You can select files via the upload button or drop them right here or into "
"an existing folder."
msgstr "Puede seleccionar los archivos a través del botón de subir o soltarlos aquí mismo o en una carpeta existente."
-#: ../../boot.php:1724
-msgid "Create an account to access services and applications"
-msgstr "Crear una cuenta para acceder a los servicios y aplicaciones"
-
-#: ../../boot.php:1742
-msgid "Email or nickname"
-msgstr "Correo electrónico o apodo"
-
-#: ../../boot.php:1752
-msgid "Password"
-msgstr "Contraseña"
-
-#: ../../boot.php:1753
-msgid "Remember me"
-msgstr "Recordarme"
-
-#: ../../boot.php:1756
-msgid "Forgot your password?"
-msgstr "¿Olvidó su contraseña?"
-
-#: ../../boot.php:2637
-#, php-format
-msgid "[$Projectname] Website SSL error for %s"
-msgstr "[$Projectname] Error SSL del sitio web en %s"
-
-#: ../../boot.php:2642
-msgid "Website SSL certificate is not valid. Please correct."
-msgstr "El certificado SSL del sitio web no es válido. Por favor, solucione el problema."
-
-#: ../../boot.php:2758
-#, php-format
-msgid "[$Projectname] Cron tasks not running on %s"
-msgstr "[$Projectname] Las tareas de Cron no están funcionando en %s"
-
-#: ../../boot.php:2763
-msgid "Cron/Scheduled tasks not running."
-msgstr "Las tareas del Planificador/Cron no están funcionando."
+#: ../../util/nconfig.php:34
+msgid "Source channel not found."
+msgstr "No se ha encontrado el canal de origen."
diff --git a/view/es-es/hstrings.php b/view/es-es/hstrings.php
index 840c3961b..0320586d9 100644
--- a/view/es-es/hstrings.php
+++ b/view/es-es/hstrings.php
@@ -2,7 +2,7 @@
if(! function_exists("string_plural_select_es_es")) {
function string_plural_select_es_es($n){
- return ($n != 1 ? 1 : 0);
+ return ($n != 1 ? 1 : 0);
}}
App::$rtl = 0;
App::$strings["plural_function_code"] = "(n != 1 ? 1 : 0)";
@@ -34,930 +34,42 @@ App::$strings["Leave empty for default width"] = "Dejar en blanco para la anchur
App::$strings["Set size of conversation author photo"] = "Ajustar el tamaño de la foto del autor de la conversación";
App::$strings["Set size of followup author photos"] = "Ajustar el tamaño de foto de los seguidores del autor";
App::$strings["Show advanced settings"] = "Mostrar ajustes avanzados";
-App::$strings["Source channel not found."] = "No se ha encontrado el canal de origen.";
-App::$strings["Access Denied"] = "Acceso denegado";
-App::$strings["Enable Community Moderation"] = "Habilitar la moderación de la comunidad";
-App::$strings["Reputation automatically given to new members"] = "La reputación se otorga automáticamente a los nuevos miembros";
-App::$strings["Reputation will never fall below this value"] = "La reputación nunca caerá por debajo de este valor";
-App::$strings["Minimum reputation before posting is allowed"] = "Reputación mínima antes de que se permita el envío de entradas";
-App::$strings["Minimum reputation before commenting is allowed"] = "Mínima reputación antes de que se permitan los comentarios";
-App::$strings["Minimum reputation before a member is able to moderate other posts"] = "Reputación mínima antes de que un miembro sea capaz de moderar otros mensajes";
-App::$strings["Max ratio of moderator's reputation that can be added to/deducted from reputation of person being moderated"] = "Proporción máxima de la reputación del moderador que puede ser añadida/descontada de la reputación de la persona que está siendo moderada.";
-App::$strings["Reputation \"cost\" to post"] = "\"Coste\" de la reputación a contabilizar";
-App::$strings["Reputation \"cost\" to comment"] = "\"Coste\" de la reputación para comentar";
-App::$strings["Reputation automatically recovers at this rate per hour until it reaches minimum_to_post"] = "La reputación se recupera automáticamente a esta tasa por hora hasta que alcanza el mínimo_a_post";
-App::$strings["When minimum_to_moderate > reputation > minimum_to_post reputation recovers at this rate per hour"] = "Cuando el mínimo_a_moderar > reputación > mínimo_a_publicar la reputación se recupera a esta tasa por hora ";
-App::$strings["Community Moderation Settings"] = "Configuración de la moderación de la comunidad";
-App::$strings["Channel Reputation"] = "Reputación del canal";
-App::$strings["Close"] = "Cerrar";
-App::$strings["An Error has occurred."] = "Se ha producido un error.";
-App::$strings["Upvote"] = "Votar a favor";
-App::$strings["Downvote"] = "Votar en contra";
-App::$strings["Can moderate reputation on my channel."] = "Se puede moderar la reputación en mi canal.";
-App::$strings["Block Completely"] = "Bloquear completamente";
-App::$strings["superblock settings updated"] = "se han actualizado los ajustes de superblock";
-App::$strings["Currently blocked"] = "Actualmente bloqueado";
-App::$strings["No channels currently blocked"] = "No hay canales bloqueados actualmente";
-App::$strings["Remove"] = "Eliminar";
-App::$strings["NSA Bait App"] = "App NSA Bait ";
-App::$strings["Make yourself a political target."] = "Hazte un objetivo político.";
-App::$strings["Recent Channel/Profile Viewers"] = "Visitantes recientes del canal o perfil";
-App::$strings["No entries."] = "No hay entradas.";
-App::$strings["Add new page"] = "Añadir una nueva página";
-App::$strings["Markdown"] = "Markdown";
-App::$strings["BBcode"] = "BBcode";
-App::$strings["Text"] = "Texto";
-App::$strings["Options"] = "Opciones";
-App::$strings["Wiki Pages"] = "Páginas del wiki";
-App::$strings["Page name"] = "Nombre de la página";
-App::$strings["Wikis"] = "Wikis";
-App::$strings["Name"] = "Nombre";
-App::$strings["__ctx:wiki_history__ Message"] = "Mensaje";
-App::$strings["Date"] = "Fecha";
-App::$strings["Revert"] = "Revertir";
-App::$strings["Compare"] = "Comparar";
-App::$strings["Wiki updated successfully"] = "El wiki se ha actualizado con éxito";
-App::$strings["Wiki files deleted successfully"] = "Se han borrado con éxito los ficheros del wiki";
-App::$strings["(No Title)"] = "(Sin título)";
-App::$strings["Wiki page create failed."] = "Se ha producido un error en la creación de la página wiki.";
-App::$strings["Wiki not found."] = "No se ha encontrado el wiki.";
-App::$strings["Destination name already exists"] = "El nombre de destino ya existe";
-App::$strings["Page not found"] = "No se ha encontrado la página";
-App::$strings["Error reading page content"] = "Se ha producido un error al leer el contenido de la página";
-App::$strings["Error reading wiki"] = "Se ha producido un error al leer el wiki";
-App::$strings["Page update failed."] = "Se ha producido un error al actualizar la página.";
-App::$strings["Nothing deleted"] = "No se ha eliminado nada";
-App::$strings["Compare: object not found."] = "No se ha encontrado un objeto para comparar.";
-App::$strings["Page updated"] = "Se ha actualizado la página";
-App::$strings["Wiki resource_id required for git commit"] = "Se necesita Wiki resource_id para el git commit";
-App::$strings["Page not found."] = "Página no encontrada.";
-App::$strings["Different viewers will see this text differently"] = "Visitantes diferentes verán este texto de forma distinta";
-App::$strings["Profile Unavailable."] = "Perfil no disponible";
-App::$strings["Permission denied."] = "Acceso denegado.";
-App::$strings["Invalid channel"] = "Canal no válido";
-App::$strings["Error retrieving wiki"] = "Error al recuperar el wiki";
-App::$strings["Error creating zip file export folder"] = "Error al crear el fichero comprimido zip de la carpeta a exportar";
-App::$strings["Error downloading wiki: "] = "Error al descargar el wiki: ";
-App::$strings["Edit"] = "Editar";
-App::$strings["Download"] = "Descargar";
-App::$strings["View"] = "Ver";
-App::$strings["Create New"] = "Crear";
-App::$strings["Wiki name"] = "Nombre del wiki";
-App::$strings["Content type"] = "Tipo de contenido";
-App::$strings["Type"] = "Tipo";
-App::$strings["Any&nbsp;type"] = "Cualquier&nbsp;tipo";
-App::$strings["Lock content type"] = "Tipo de contenido bloqueado";
-App::$strings["Create a status post for this wiki"] = "Crear un mensaje de estado para este wiki";
-App::$strings["Edit Wiki Name"] = "Editar el nombre del wiki";
-App::$strings["Wiki not found"] = "Wiki no encontrado";
-App::$strings["Rename page"] = "Renombrar la página";
-App::$strings["Share"] = "Compartir";
-App::$strings["Error retrieving page content"] = "Error al recuperar el contenido de la página";
-App::$strings["New page"] = "Nueva página";
-App::$strings["Revision Comparison"] = "Comparación de revisiones";
-App::$strings["Cancel"] = "Cancelar";
-App::$strings["Short description of your changes (optional)"] = "Breve descripción de sus cambios (opcional)";
-App::$strings["Source"] = "Fuente";
-App::$strings["New page name"] = "Nombre de la nueva página";
-App::$strings["Embed image from photo albums"] = "Incluir una imagen de los álbumes de fotos";
-App::$strings["Embed an image from your albums"] = "Incluir una imagen de sus álbumes";
-App::$strings["OK"] = "OK";
-App::$strings["Choose images to embed"] = "Elegir imágenes para incluir";
-App::$strings["Choose an album"] = "Elegir un álbum";
-App::$strings["Choose a different album"] = "Elegir un álbum diferente...";
-App::$strings["Error getting album list"] = "Error al obtener la lista de álbumes";
-App::$strings["Error getting photo link"] = "Error al obtener el enlace de la foto";
-App::$strings["Error getting album"] = "Error al obtener el álbum";
-App::$strings["History"] = "Historial";
-App::$strings["Error creating wiki. Invalid name."] = "Error al crear el wiki: el nombre no es válido.";
-App::$strings["A wiki with this name already exists."] = "Ya hay un wiki con este nombre.";
-App::$strings["Wiki created, but error creating Home page."] = "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio.";
-App::$strings["Error creating wiki"] = "Error al crear el wiki";
-App::$strings["Error updating wiki. Invalid name."] = "Error al actualizar el wiki. Nombre no válido.";
-App::$strings["Error updating wiki"] = "Error al actualizar el wiki";
-App::$strings["Wiki delete permission denied."] = "Se ha denegado el permiso para eliminar el wiki.";
-App::$strings["Error deleting wiki"] = "Se ha producido un error al eliminar el wiki";
-App::$strings["New page created"] = "Se ha creado la nueva página";
-App::$strings["Cannot delete Home"] = "No se puede eliminar la página principal";
-App::$strings["Current Revision"] = "Revisión actual";
-App::$strings["Selected Revision"] = "Revisión seleccionada";
-App::$strings["You must be authenticated."] = "Debe estar autenticado.";
-App::$strings["System defaults:"] = "Valores predeterminados del sistema: ";
-App::$strings["Preferred Clipart IDs"] = "IDs de las imágenes clipart preferidas";
-App::$strings["List of preferred clipart ids. These will be shown first."] = "Lista de ids de imágenes de clipart preferidas. Se verán en primer lugar.";
-App::$strings["Default Search Term"] = "Términos de búsqueda predeterminados";
-App::$strings["The default search term. These will be shown second."] = "Los términos de búsqueda predeterminados. Estos se mostrarán en segundo lugar.";
-App::$strings["Return After"] = "Regresar después";
-App::$strings["Page to load after image selection."] = "Página para cargar después de la selección de imágenes.";
-App::$strings["View Profile"] = "Ver el perfil";
-App::$strings["Edit Profile"] = "Editar el perfil";
-App::$strings["Profile List"] = "Lista de perfiles";
-App::$strings["Order of Preferred"] = "Orden de preferencia";
-App::$strings["Sort order of preferred clipart ids."] = "Orden de clasificación de los identificadores de imágenes clipart preferidas.";
-App::$strings["Newest first"] = "Las más nuevas en primer lugar";
-App::$strings["As entered"] = "Tal como se ingresaron";
-App::$strings["Order of other"] = "Orden de los demás";
-App::$strings["Sort order of other clipart ids."] = "Orden de clasificación de otros ids de imágenes clipart.";
-App::$strings["Most downloaded first"] = "Las más descargadas en primer lugar";
-App::$strings["Most liked first"] = "Las más apreciadas en primer lugar";
-App::$strings["Preferred IDs Message"] = "Mensaje de IDs preferido";
-App::$strings["Message to display above preferred results."] = "Mensaje para mostrar sobre los resultados preferidos.";
-App::$strings["Uploaded by: "] = "Subida por: ";
-App::$strings["Drawn by: "] = "Creada por: ";
-App::$strings["Use this image"] = "Usar esta imagen";
-App::$strings["Or select from a free OpenClipart.org image:"] = "O seleccionar una imagen gratuita de OpenClipart.org: ";
-App::$strings["Search Term"] = "Término de búsqueda";
-App::$strings["Unknown error. Please try again later."] = "Error desconocido. Por favor, inténtelo otra vez.";
-App::$strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Recargue la página o limpie el caché del navegador si la nueva foto no se muestra inmediatamente.";
-App::$strings["Profile photo updated successfully."] = "Se ha actualizado con éxito la foto de perfil.";
-App::$strings["Save Bookmarks"] = "Guardar en Marcadores";
-App::$strings["Max queueworker threads"] = "Máximo de hilos en la cola";
-App::$strings["Minimum 4, default 4"] = "Mínimo 4, por defecto 4";
-App::$strings["Assume workers dead after"] = "Asumir que los procesos han muerto después de ";
-App::$strings["Minimum 120, default 300 seconds"] = "Mínimo de 120 segundos, por defecto, 300";
-App::$strings["Pause before starting next task"] = "Pausa antes de comenzar la siguiente tarea";
-App::$strings["Minimum 100, default 100 microseconds"] = "Mínimo 100, por defecto 100 microsegundos";
-App::$strings["Queueworker Settings"] = "Configuración del gestor de procesos de trabajo en cola";
-App::$strings["Save"] = "Guardar";
-App::$strings["Rainbow Tag App"] = "App Etiqueta Arcoiris";
-App::$strings["Add some colour to tag clouds"] = "Añadir color a las nubes de etiquetas";
-App::$strings["Rainbow Tag"] = "Etiqueta Arcoiris";
-App::$strings["Photo Cache settings saved."] = "Se ha guardado la configuración de la caché de fotos.";
-App::$strings["Saves a copy of images from external sites locally to increase your anonymity in the web."] = "Guarde una copia de las imágenes de sitios externos localmente para aumentar su anonimato en la web.";
-App::$strings["Minimal photo size for caching"] = "Tamaño mínimo de la foto para el almacenamiento en caché";
-App::$strings["In pixels. From 1 up to 1024, 0 will be replaced with system default."] = "En píxeles. Desde 1 hasta 1024, 0 será reemplazado por el predeterminado del sistema.";
-App::$strings["Photo Cache"] = "Photo Cache";
-App::$strings["Gallery"] = "Galería";
-App::$strings["Photo Gallery"] = "Galería de fotos";
-App::$strings["Requested profile is not available."] = "El perfil solicitado no está disponible.";
-App::$strings["Random Planet App"] = "App Random Planet";
-App::$strings["Set a random planet from the Star Wars Empire as your location when posting"] = "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias como su ubicación cuando publique.";
-App::$strings["Male"] = "Hombre";
-App::$strings["Female"] = "Mujer";
-App::$strings["OpenID protocol error. No ID returned."] = "Error de protocolo OpenID. No se recuperó ninguna ID.";
-App::$strings["Welcome %s. Remote authentication successful."] = "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo correctamente.";
-App::$strings["Login failed."] = "El acceso ha fallado.";
-App::$strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Encontramos un problema al iniciar sesión con el OpenID que proporcionó. Compruebe si el ID está correctamente escrito.";
-App::$strings["The error message was:"] = "El mensaje de error ha sido: ";
-App::$strings["First Name"] = "Nombre";
-App::$strings["Last Name"] = "Apellido";
+App::$strings["Create an account to access services and applications"] = "Crear una cuenta para acceder a los servicios y aplicaciones";
+App::$strings["Register"] = "Registrarse";
+App::$strings["Email or nickname"] = "Correo electrónico o apodo";
App::$strings["Nickname"] = "Alias";
-App::$strings["Full Name"] = "Nombre completo";
-App::$strings["Email"] = "Correo electrónico";
-App::$strings["Profile Photo"] = "Foto del perfil";
-App::$strings["Profile Photo 16px"] = "Foto del perfil 16px";
-App::$strings["Profile Photo 32px"] = "Foto del perfil 32px";
-App::$strings["Profile Photo 48px"] = "Foto del perfil 48px";
-App::$strings["Profile Photo 64px"] = "Foto del perfil 64px";
-App::$strings["Profile Photo 80px"] = "Foto del perfil 80px";
-App::$strings["Profile Photo 128px"] = "Foto del perfil 128px";
-App::$strings["Timezone"] = "Zona horaria";
-App::$strings["Homepage URL"] = "Dirección de la página personal";
-App::$strings["Language"] = "Idioma";
-App::$strings["Birth Year"] = "Año de nacimiento";
-App::$strings["Birth Month"] = "Mes de nacimiento";
-App::$strings["Birth Day"] = "Día de nacimiento";
-App::$strings["Birthdate"] = "Fecha de nacimiento";
-App::$strings["Gender"] = "Género";
-App::$strings["lonely"] = "Solo/a";
-App::$strings["drunk"] = "ebrio/a";
-App::$strings["horny"] = "caliente";
-App::$strings["stoned"] = "drogado/a";
-App::$strings["fucked up"] = "jodido/a";
-App::$strings["clusterfucked"] = "hecho/a polvo";
-App::$strings["crazy"] = "loco/a";
-App::$strings["hurt"] = "ofendido/a";
-App::$strings["sleepy"] = "soñoliento/a";
-App::$strings["grumpy"] = "gruñón/ona";
-App::$strings["high"] = "superior";
-App::$strings["semi-conscious"] = "semiconsciente";
-App::$strings["in love"] = "enamorado/a";
-App::$strings["in lust"] = "lujurioso/a";
-App::$strings["naked"] = "desnudo/a";
-App::$strings["stinky"] = "apestoso/a";
-App::$strings["sweaty"] = "sudoroso/a";
-App::$strings["bleeding out"] = "exánime";
-App::$strings["victorious"] = "victorioso/a";
-App::$strings["defeated"] = "derrotado/a";
-App::$strings["envious"] = "envidioso/a";
-App::$strings["jealous"] = "celoso/a";
-App::$strings["Hubzilla Directory Stats"] = "Estadísticas de directorio de Hubzilla";
-App::$strings["Total Hubs"] = "Número total de servidores";
-App::$strings["Hubzilla Hubs"] = "Servidores (hubs) de Hubzilla";
-App::$strings["Friendica Hubs"] = "Servidores (hubs) de Friendica";
-App::$strings["Diaspora Pods"] = "Servidores (pods) de Diaspora";
-App::$strings["Hubzilla Channels"] = "Canales de Hubzilla";
-App::$strings["Friendica Channels"] = "Canales de Friendica";
-App::$strings["Diaspora Channels"] = "Canales de Diaspora";
-App::$strings["Aged 35 and above"] = "De 35 años de edad en adelante";
-App::$strings["Aged 34 and under"] = "De 34 o menos años de edad";
-App::$strings["Average Age"] = "Promedio de edad";
-App::$strings["Known Chatrooms"] = "Salas de chat conocidas";
-App::$strings["Known Tags"] = "Etiquetas conocidas";
-App::$strings["Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,"] = "Tenga en cuenta que las estadísticas de Diaspora y Friendica se refieren únicamente a aquellas de las que **este directorio** es consciente, y no a todos los conocidos en la red. Esto también es aplicable a las salas de chat,";
-App::$strings["Channel is required."] = "Se requiere un canal.";
-App::$strings["Invalid channel."] = "El canal no es válido.";
-App::$strings["Hubzilla Crosspost Connector Settings saved."] = "Se han guardado los ajustes de Hubzilla Crosspost Connector";
-App::$strings["Send public postings to Hubzilla channel by default"] = "Enviar entradas públicas al canal Hubzilla por defecto";
-App::$strings["Hubzilla API Path"] = "Ruta de la API de Hubzilla";
-App::$strings["https://{sitename}/api"] = "https://{sitename}/api";
-App::$strings["Hubzilla login name"] = "Nombre de inicio de sesión en Hubzilla";
-App::$strings["Hubzilla channel name"] = "Nombre del canal de Hubzilla";
-App::$strings["Hubzilla password"] = "Contraseña de Hubzilla";
-App::$strings["Hubzilla Crosspost Connector"] = "Hubzilla Crosspost Connector";
-App::$strings["Post to Hubzilla"] = "Publicar en Hubzilla";
-App::$strings["Photos imported"] = "Se han importado las fotos";
-App::$strings["Permission denied"] = "Permiso denegado";
-App::$strings["Redmatrix Photo Album Import"] = "Importar un álbum de fotos de Redmatrix";
-App::$strings["This will import all your Redmatrix photo albums to this channel."] = "Esto importará todos sus álbumes de fotos de Redmatrix a este canal.";
-App::$strings["Redmatrix Server base URL"] = "URL base del servidor Redmatrix";
-App::$strings["Redmatrix Login Username"] = "Nombre de inicio de sesión en Redmatrix";
-App::$strings["Redmatrix Login Password"] = "Contraseña de inicio de sesión en Redmatrix";
-App::$strings["Import just this album"] = "Importar solo este álbum";
-App::$strings["Leave blank to import all albums"] = "Dejar en blanco para importar todos los álbumes";
-App::$strings["Maximum count to import"] = "Límite máximo de importación";
-App::$strings["0 or blank to import all available"] = "0 o en blanco para importar todos los disponibles";
-App::$strings["photo"] = "foto";
-App::$strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Por favor, contacte con el administrador de su sitio.<br />La URL de la API proporcionada no es válida.";
-App::$strings["We could not contact the GNU social API with the Path you entered."] = "No podemos conectar con la API de GNU social con la ruta que ha proporcionado.";
-App::$strings["GNU social settings updated."] = "Se han guardado los ajustes de GNU social.";
-App::$strings["Globally Available GNU social OAuthKeys"] = "OAuthKeys globales de GNU social disponibles";
-App::$strings["There are preconfigured OAuth key pairs for some GNU social servers available. If you are using one of them, please use these credentials.<br />If not feel free to connect to any other GNU social instance (see below)."] = "Existen pares de claves OAuth preconfiguradas disponibles para algunos servidores libres de GNU social. Si está usando uno de ellos, utilice estas credenciales.<br />Si no se siente libre de conectarse a cualquier otra instancia de GNU social (vea a continuación).";
-App::$strings["Provide your own OAuth Credentials"] = "Proporcione sus propias credenciales de OAuth";
-App::$strings["No consumer key pair for GNU social found. Register your Hubzilla Account as an desktop client on your GNU social account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Hubzilla installation at your favourite GNU social installation."] = "No se ha encontrado un par de claves de consumidor para GNU social. Registre su cuenta de Hubzilla como un cliente de escritorio en su cuenta social GNU, copie el par de claves de consumidor aquí y escriba la dirección raíz de la API.<br />Antes de registrar su propio par de claves OAuth, pregunte al administrador si ya hay un par de claves para esta instalación de Hubzilla en su instalación GNU social favorita.";
-App::$strings["OAuth Consumer Key"] = "OAuth Consumer Key";
-App::$strings["OAuth Consumer Secret"] = "OAuth Consumer Secret";
-App::$strings["Base API Path"] = "Ruta base de la API";
-App::$strings["Remember the trailing /"] = "Recuerde la barra /";
-App::$strings["GNU social application name"] = "Nombre de la aplicación de GNU social";
-App::$strings["To connect to your GNU social account click the button below to get a security code from GNU social which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to GNU social."] = "Para conectarse a su cuenta de GNU social, haga clic en el botón de abajo para obtener un código de seguridad de GNU social que tiene que copiar en el cuadro de entrada a continuación y envíe el formulario. Solo sus <strong>entradas</strong> públicas aparecerán en GNU social.";
-App::$strings["Log in with GNU social"] = "Inicio de sesión en GNU social";
-App::$strings["Copy the security code from GNU social here"] = "Copiar aquí el código de seguridad de GNU social";
-App::$strings["Cancel Connection Process"] = "Cancelar el proceso de conexión";
-App::$strings["Current GNU social API is"] = "La API actual de GNU social es ";
-App::$strings["Cancel GNU social Connection"] = "Cancelar la conexión de GNU social";
-App::$strings["Currently connected to: "] = "Actualmente está conectado a: ";
-App::$strings["<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to GNU social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "<strong>Aviso</strong>: Debido a su configuración de privacidad (<em>Ocultar los detalles de su perfil a los visitantes desconocidos?</em>) el vínculo potencialmente incluido en las entradas públicas retransmitidas a GNU social llevará al visitante a una página en blanco que le informará de que el acceso a su perfil ha sido restringido.";
-App::$strings["Post to GNU social by default"] = "Publicar en GNU social por defecto";
-App::$strings["If enabled your public postings will be posted to the associated GNU-social account by default"] = "Si está activado, sus entradas públicas se publicarán en la cuenta GNU-social asociada de forma predeterminada";
-App::$strings["Clear OAuth configuration"] = "Limpiar la configuración de OAuth";
-App::$strings["GNU-Social Crosspost Connector"] = "GNU-Social Crosspost Connector";
-App::$strings["Post to GNU social"] = "Publicar en GNU social";
-App::$strings["Site name"] = "Nombre del sitio";
-App::$strings["API URL"] = "URL de la API";
-App::$strings["Consumer Secret"] = "Consumer Secret";
-App::$strings["Consumer Key"] = "Consumer Key";
-App::$strings["Application name"] = "Nombre de la aplicación";
-App::$strings["Friendica Crosspost Connector Settings saved."] = "Se han guardado los ajustes del conector de publicación cruzada con Friendica.";
-App::$strings["Send public postings to Friendica by default"] = "Enviar entradas públicas a Friendica por defecto";
-App::$strings["Friendica API Path"] = "Ruta a la API de Friendica";
-App::$strings["Friendica login name"] = "Nombre de inicio de sesión en Friendica";
-App::$strings["Friendica password"] = "Contraseña de Friendica";
-App::$strings["Friendica Crosspost Connector"] = "Friendica Crosspost Connector";
-App::$strings["Post to Friendica"] = "Publicar en Friendica";
-App::$strings["Post to WordPress"] = "Publicar en WordPress";
-App::$strings["Wordpress Settings saved."] = "Se han guardado los ajustes de WordPress.";
-App::$strings["WordPress username"] = "Nombre de usuario de WordPress";
-App::$strings["WordPress password"] = "Contraseña de WordPress";
-App::$strings["WordPress API URL"] = "URL de la API de WordPress";
-App::$strings["Typically https://your-blog.tld/xmlrpc.php"] = "Habitualmente https://your-blog.tld/xmlrpc.php";
-App::$strings["WordPress blogid"] = "Blog de WordPress";
-App::$strings["For multi-user sites such as wordpress.com, otherwise leave blank"] = "Para sitios multiusuario como wordpress.com, de lo contrario, dejar en blanco";
-App::$strings["Post to WordPress by default"] = "Publicar en WordPress por defecto";
-App::$strings["Forward comments (requires hubzilla_wp plugin)"] = "Reenviar comentarios (requerido por el plugin hubzilla_wp)";
-App::$strings["Add link to original post"] = "Añadir enlace a la entrada original";
-App::$strings["Link description (default:"] = "Descripción del enlace (por defecto: ";
-App::$strings["Wordpress Post"] = "Publicar en Wordpress";
-App::$strings["No server specified"] = "No se ha especificado ningún servidor";
-App::$strings["Posts imported"] = "Entradas importadas";
-App::$strings["Files imported"] = "Ficheros importados";
-App::$strings["Content Import"] = "Importación de contenidos";
-App::$strings["This will import all your conversations and cloud files from a cloned channel on another server. This may take a while if you have lots of posts and or files."] = "Esto importará todas sus conversaciones y archivos de nube de un canal clonado en otro servidor. El proceso puede tardar un poco si tiene muchos mensajes y/o ficheros.";
-App::$strings["Include posts"] = "Incluir entradas";
-App::$strings["Conversations, Articles, Cards, and other posted content"] = "Conversaciones, artículos, fichas y otros contenidos publicados";
-App::$strings["Include files"] = "Incluir ficheros";
-App::$strings["Files, Photos and other cloud storage"] = "Archivos, fotos y otro tipo de almacenamiento en la nube";
-App::$strings["Original Server base URL"] = "URL base del servidor original";
-App::$strings["Since modified date yyyy-mm-dd"] = "Modificado desde la fecha yyyy-mm-dd";
-App::$strings["Until modified date yyyy-mm-dd"] = "Modificado hasta la fecha yyyy-mm-dd";
-App::$strings["Set your location"] = "Establecer su ubicación";
-App::$strings["Clear browser location"] = "Eliminar los datos de localización geográfica del navegador";
-App::$strings["Insert web link"] = "Insertar enlace web";
-App::$strings["Embed (existing) photo from your photo albums"] = "Insertar una foto de sus álbumes";
-App::$strings["Please enter a link URL:"] = "Por favor, introduzca la dirección del enlace:";
-App::$strings["Tag term:"] = "Término de la etiqueta:";
-App::$strings["Where are you right now?"] = "¿Donde está ahora?";
-App::$strings["Choose a different album..."] = "Elegir un álbum diferente...";
-App::$strings["Comments enabled"] = "Comentarios habilitados";
-App::$strings["Comments disabled"] = "Comentarios deshabilitados";
-App::$strings["Preview"] = "Previsualizar";
-App::$strings["Page link name"] = "Nombre del enlace de la página";
-App::$strings["Post as"] = "Publicar como";
-App::$strings["Bold"] = "Negrita";
-App::$strings["Italic"] = "Itálico ";
-App::$strings["Underline"] = "Subrayar";
-App::$strings["Quote"] = "Citar";
-App::$strings["Code"] = "Código";
-App::$strings["Attach/Upload file"] = "Adjuntar/cargar fichero";
-App::$strings["Toggle voting"] = "Cambiar votación";
-App::$strings["Disable comments"] = "Dehabilitar los comentarios";
-App::$strings["Toggle comments"] = "Activar o desactivar los comentarios";
-App::$strings["Title (optional)"] = "Título (opcional)";
-App::$strings["Categories (optional, comma-separated list)"] = "Temas (opcional, lista separada por comas)";
-App::$strings["Permission settings"] = "Configuración de permisos";
-App::$strings["Other networks and post services"] = "Otras redes y servicios de publicación";
-App::$strings["Set expiration date"] = "Configurar fecha de caducidad";
-App::$strings["Set publish date"] = "Establecer la fecha de publicación";
-App::$strings["Encrypt text"] = "Cifrar texto";
-App::$strings["WYSIWYG status editor"] = "Editor de estado de WYSIWYG";
-App::$strings["WYSIWYG Status App"] = "App WYSIWYG Status";
-App::$strings["WYSIWYG Status"] = "Estado de WYSIWYG";
-App::$strings["View Larger"] = "Ver más grande";
-App::$strings["Tile Server URL"] = "URL del servidor de mosaicos de imágenes ";
-App::$strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">public tile servers</a>"] = "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">servidores públicos de mosaicos de imágenes</a>";
-App::$strings["Nominatim (reverse geocoding) Server URL"] = "URL del servidor nominatim (geocodificación inversa)";
-App::$strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" target=\"_blank\">Nominatim servers</a>"] = "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" target=\"_blank\">servidores nominatim</a>";
-App::$strings["Default zoom"] = "Zoom predeterminado";
-App::$strings["The default zoom level. (1:world, 18:highest, also depends on tile server)"] = "El nivel de zoom predeterminado. (1: mundo, 18: el más alto, también depende del servidor del mosaico de imágenes)";
-App::$strings["Include marker on map"] = "Incluir un marcador en el mapa";
-App::$strings["Include a marker on the map."] = "Incluir un marcador en el mapa.";
-App::$strings["Settings updated."] = "Ajustes actualizados.";
-App::$strings["Insane Journal Crosspost Connector Settings saved."] = "Se han guardado los ajustes del Conector de publicación cruzada de InsaneJournal.";
-App::$strings["Insane Journal Crosspost Connector App"] = "App Ajustes del Conector de publicación cruzada de InsaneJournal";
-App::$strings["Not Installed"] = "No instalado/a";
-App::$strings["Relay public postings to Insane Journal"] = "Retransmisión de entradas públicas a Insane Journal";
-App::$strings["InsaneJournal username"] = "Nombre de usuario en InsaneJournal";
-App::$strings["InsaneJournal password"] = "Contraseña en InsaneJournal";
-App::$strings["Post to InsaneJournal by default"] = "Publicar por defecto en InsaneJournal";
-App::$strings["Insane Journal Crosspost Connector"] = "Conector de publicación cruzada de InsaneJournal";
-App::$strings["Post to Insane Journal"] = "Publicar en Insane Journal";
-App::$strings["Who likes me?"] = "¿Quién me ha puesto \"Me gusta\"?";
-App::$strings["QR code"] = "Código QR";
-App::$strings["QR Generator"] = "Generador QR";
-App::$strings["Enter some text"] = "Escribir algún texto";
-App::$strings["ActivityPub"] = "ActivityPub";
-App::$strings["status"] = "el mensaje de estado ";
-App::$strings["%1\$s likes %2\$s's %3\$s"] = "A %1\$s le gusta %3\$s de %2\$s";
-App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "A %1\$s no le gusta %3\$s de %2\$s";
-App::$strings["ActivityPub Protocol Settings updated."] = "Se han actualizado los ajustes del protocolo ActivityPub.";
-App::$strings["The activitypub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "El protocolo ActivityPub no soporta la independencia de ubicación. Las conexiones que realice dentro de esa red pueden no ser accesibles desde ubicaciones de canales alternativos.";
-App::$strings["Deliver to ActivityPub recipients in privacy groups"] = "Entregar a los destinatarios de ActivityPub en grupos de canales";
-App::$strings["May result in a large number of mentions and expose all the members of your privacy group"] = "Puede resultar en un gran número de menciones y exponer a todos los miembros de su grupo de canales";
-App::$strings["Send multi-media HTML articles"] = "Enviar artículos multimedia en HTML";
-App::$strings["Not supported by some microblog services such as Mastodon"] = "No soportado por algunos servicios de microblog como Mastodon";
-App::$strings["Activitypub Protocol"] = "Protocolo Activitypub";
-App::$strings["ERROR: word length is not correct!"] = "ERROR: ¡la longitud de la palabra no es correcta!";
-App::$strings["Fediwordle App"] = "App Fediwordle";
-App::$strings["A distributed word game inspired by wordle."] = "Un juego de palabras distribuido inspirado en el wordle.";
-App::$strings["To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel post."] = "Para empezar una partida, introduzca [wordle]mi_palabra[/wordle] en algún lugar de un post de nivel superior.";
-App::$strings["Your contacts can post their guess in the comments."] = "Sus contactos pueden publicar sus conjeturas en los comentarios.";
-App::$strings["Your channel will evaluate the guess and automatically post the response."] = "Su canal evaluará la conjetura y publicará automáticamente la respuesta.";
-App::$strings["Correct letters"] = "Letras correctas";
-App::$strings["Letters contained in the word but at the wrong spot"] = "Letras contenidas en la palabra pero en el lugar equivocado";
-App::$strings["Letters not contained in the word"] = "Letras no contenidas en la palabra";
-App::$strings["An account has been created for you."] = "Se ha creado una cuenta para usted.";
-App::$strings["Authentication successful but rejected: account creation is disabled."] = "Autenticación correcta pero rechazada: la creación de cuentas está deshabilitada.";
-App::$strings["Dreamwidth Crosspost Connector Settings saved."] = "Se han guardado los ajustes del conector de publicación cruzada Dreamwidth.";
-App::$strings["Dreamwidth username"] = "Nombre de usuario en Dreamwidth";
-App::$strings["Dreamwidth password"] = "Contraseña en Dreamwidth";
-App::$strings["Post to Dreamwidth by default"] = "Publicar en Dreamwidth de forma predeterminada";
-App::$strings["Dreamwidth Crosspost Connector"] = "Dreamwidth Crosspost Connector";
-App::$strings["Post to Dreamwidth"] = "Publicar en Dreamwidth";
-App::$strings["bitchslap"] = "una bofetada humillante";
-App::$strings["bitchslapped"] = "ha abofeteado de forma humillante a";
-App::$strings["shag"] = "un polvo";
-App::$strings["shagged"] = "ha dejado exhausto/a a";
-App::$strings["patent"] = "una patente";
-App::$strings["patented"] = "ha patentado a";
-App::$strings["hug"] = "un abrazo";
-App::$strings["hugged"] = "ha abrazado a";
-App::$strings["murder"] = "un asesinato";
-App::$strings["murdered"] = "ha asesinado a";
-App::$strings["worship"] = "una alabanza";
-App::$strings["worshipped"] = "ha elogiado a";
-App::$strings["kiss"] = "un beso";
-App::$strings["kissed"] = "ha besado a";
-App::$strings["tempt"] = "una tentación";
-App::$strings["tempted"] = "ha tentado a";
-App::$strings["raise eyebrows at"] = "un levantamiento de cejas";
-App::$strings["raised their eyebrows at"] = "ha levantado las cejas a";
-App::$strings["insult"] = "un insulto";
-App::$strings["insulted"] = "ha insultado a";
-App::$strings["praise"] = "un elogio";
-App::$strings["praised"] = "ha elogiado a";
-App::$strings["be dubious of"] = "una indecisión";
-App::$strings["was dubious of"] = "estaba dudoso de";
-App::$strings["eat"] = "una comida";
-App::$strings["ate"] = "ha comido";
-App::$strings["giggle and fawn at"] = "una sonrisa aduladora";
-App::$strings["giggled and fawned at"] = "ha sonreído y adulado a";
-App::$strings["doubt"] = "una duda";
-App::$strings["doubted"] = "ha dudado de";
-App::$strings["glare"] = "una mirada furiosa";
-App::$strings["glared at"] = "ha mirado con furia";
-App::$strings["fuck"] = "una mierda";
-App::$strings["fucked"] = "ha mandado a la mierda a";
-App::$strings["bonk"] = "un golpe";
-App::$strings["bonked"] = "ha golpeado a";
-App::$strings["declare undying love for"] = "una declaración de amor eterno";
-App::$strings["declared undying love for"] = "ha declarado amor eterno a";
-App::$strings["Errors encountered deleting database table "] = "Errores encontrados al eliminar la tabla de la base de datos";
-App::$strings["Submit Settings"] = "Enviar los ajustes";
-App::$strings["Drop tables when uninstalling?"] = "¿Eliminar tablas al desinstalar?";
-App::$strings["If checked, the Rendezvous database tables will be deleted when the plugin is uninstalled."] = "Si se selecciona, las tablas de la base de datos Rendezvous se eliminarán cuando se desinstale el plugin.";
-App::$strings["Mapbox Access Token"] = "Token de acceso de Mapbox";
-App::$strings["If you enter a Mapbox access token, it will be used to retrieve map tiles from Mapbox instead of the default OpenStreetMap tile server."] = "Si introduce un token de acceso a Mapbox, se utilizará para recuperar los mapas de mosaicos de imágenes de Mapbox en lugar del servidor de mosaico de imágenes OpenStreetMap predeterminado.";
-App::$strings["Rendezvous"] = "Rendezvous";
-App::$strings["This identity has been deleted by another member due to inactivity. Please press the \"New identity\" button or refresh the page to register a new identity. You may use the same name."] = "Esta identidad ha sido eliminada por otro miembro debido a su inactividad. Pulse el botón \"Nueva identidad\" o actualice la página para registrar una nueva identidad. Puede usar el mismo nombre.";
-App::$strings["Welcome to Rendezvous!"] = "¡Bienvenido/a a Rendevous!";
-App::$strings["Enter your name to join this rendezvous. To begin sharing your location with the other members, tap the GPS control. When your location is discovered, a red dot will appear and others will be able to see you on the map."] = "Introduzca tu nombre para unirse a esta cita. Para comenzar a compartir su ubicación con los demás miembros, pulse en el control GPS. Cuando se descubra su ubicación, aparecerá un punto rojo y otros podrán verlo en el mapa.";
-App::$strings["Let's meet here"] = "Reunámonos aquí";
-App::$strings["Description"] = "Descripción";
-App::$strings["New marker"] = "Nuevo marcador";
-App::$strings["Edit marker"] = "Editar un marcador";
-App::$strings["New identity"] = "Nueva identidad";
-App::$strings["Delete marker"] = "Eliminar un marcador";
-App::$strings["Delete member"] = "Eliminar un miembro";
-App::$strings["Edit proximity alert"] = "Editar alerta de proximidad";
-App::$strings["A proximity alert will be issued when this member is within a certain radius of you.<br><br>Enter a radius in meters (0 to disable):"] = "Se emitirá una alerta de proximidad cuando este miembro esté dentro de un radio determinado respecto a usted.<br><br> Ingrese el radio en metros (0 para deshabilitar):";
-App::$strings["distance"] = "distancia";
-App::$strings["Proximity alert distance (meters)"] = "Distancia (en metros) para la alerta de proximidad";
-App::$strings["A proximity alert will be issued when you are within a certain radius of the marker location.<br><br>Enter a radius in meters (0 to disable):"] = "Se emitirá una alerta de proximidad cuando usted esté dentro de un radio determinado respecto al marcador de localización.<br><br> Ingrese el radio en metros (0 para deshabilitar):";
-App::$strings["Marker proximity alert"] = "Marcador de alerta de proximidad";
-App::$strings["Reminder note"] = "Recordatorio";
-App::$strings["Enter a note to be displayed when you are within the specified proximity..."] = "Introduzca una nota que se mostrará cuando esté dentro de la proximidad especificada...";
-App::$strings["Add new rendezvous"] = "Añadir una nueva cita";
-App::$strings["Create a new rendezvous and share the access link with those you wish to invite to the group. Those who open the link become members of the rendezvous. They can view other member locations, add markers to the map, or share their own locations with the group."] = "Cree una nueva cita y comparta los enlaces de acceso con los que desea invitar al grupo. Aquellos que abran el enlace se convertirán en miembros de la cita. Pueden ver otras ubicaciones de miembros, añadir marcadores al mapa o compartir sus propias ubicaciones con el grupo.";
-App::$strings["You have no rendezvous. Press the button above to create a rendezvous!"] = "No tiene ninguna cita. ¡Presione el botón de arriba para crear una!";
-App::$strings["Errors encountered creating database tables."] = "Se han encontrado errores al crear las tablas de la base de datos.";
-App::$strings["Page to load after login"] = "Página para cargar tras el inicio de sesión";
-App::$strings["Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave blank for default network page (grid)."] = "Ejemplos: &quot;aplicaciones&quot;, &quot;mi red?f=&gid=37&quot; (grupo de canales), &quot;mi canal&quot; or &quot;notificaciones del sistema&quot; (dejar en blanco para la página de mi red por defecto (grid).";
-App::$strings["Startpage"] = "Startpage";
-App::$strings["Your channel has been upgraded to \$Projectname version"] = "Su canal ha sido actualizado a la versión \$Projectname";
-App::$strings["Please have a look at the"] = "Por favor, eche un vistazo a la ";
-App::$strings["git history"] = "historial del git";
-App::$strings["change log"] = "lista de cambios";
-App::$strings["for further info."] = "para más información.";
-App::$strings["Upgrade Info"] = "Información de actualización";
-App::$strings["Do not show this again"] = "No mostrar esto de nuevo";
-App::$strings["Twitter settings updated."] = "Se han actualizado los ajustes de Twitter.";
-App::$strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "No se encontró ningún par de \"consumer key\" para Twitter. Póngase en contacto con el administrador del sitio.";
-App::$strings["At this Hubzilla instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter."] = "En esta instancia de Hubzilla, el complemento de Twitter estaba habilitado pero aún no ha conectado su cuenta a la cuenta de Twitter. Para ello, haga clic en el botón de abajo, para obtener un PIN de Twitter que debe copiar en el cuadro de entrada a continuación y enviar el formulario. Solo sus entradas <strong>públicas</ strong> se publicarán en Twitter.";
-App::$strings["Log in with Twitter"] = "Iniciar sesión en Twitter";
-App::$strings["Copy the PIN from Twitter here"] = "Copiar aquí el PIN de Twitter";
-App::$strings["<strong>Note:</strong> Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "<strong>Aviso:</strong> Debido a su configuración de privacidad (<em>Ocultar los detalles de su perfil a los visitantes desconocidos?</em>), el enlace potencialmente incluido en las entradas públicas retransmitidas a Twitter llevará al visitante a una página en blanco informándolo de que el acceso a su perfil ha sido restringido.";
-App::$strings["Twitter post length"] = "Longitud del mensaje en Twitter";
-App::$strings["Maximum tweet length"] = "Longitud máxima del tweet";
-App::$strings["Send public postings to Twitter by default"] = "Enviar mensajes públicos a Twitter de forma predeterminada";
-App::$strings["If enabled your public postings will be posted to the associated Twitter account by default"] = "Si está activado, sus entradas públicas se publicarán en la cuenta de Twitter asociada de forma predeterminada.";
-App::$strings["Twitter Crosspost Connector"] = "Twitter Crosspost Connector";
-App::$strings["Post to Twitter"] = "Publicar en Twitter";
-App::$strings["You are now authenticated to pumpio."] = "Ahora está autenticado en pump.io.";
-App::$strings["return to the featured settings page"] = "Volver a la página de configuración destacada";
-App::$strings["Post to Pump.io"] = "Publicar en Pump.io";
-App::$strings["Pump.io Settings saved."] = "Se han guardado los ajustes de Pump.io";
-App::$strings["Pump.io servername"] = "Nombre del servidor de Pump.io";
-App::$strings["Without \"http://\" or \"https://\""] = "Sin \"http://\" or \"https://\"";
-App::$strings["Pump.io username"] = "Nombre de usuario en Pump.io";
-App::$strings["Without the servername"] = "Sin el nombre del servidor";
-App::$strings["You are not authenticated to pumpio"] = "No está autenticado en pump.io";
-App::$strings["(Re-)Authenticate your pump.io connection"] = "(Re-)Autenticar su conexión en pump.io";
-App::$strings["Post to pump.io by default"] = "Publicar por defecto en pump.io";
-App::$strings["Should posts be public"] = "¿Las entradas deben ser públicas?";
-App::$strings["Mirror all public posts"] = "Reflejar todos los mensajes públicos";
-App::$strings["Pump.io Crosspost Connector"] = "Pump.io Crosspost Connector";
-App::$strings["generic profile image"] = "imagen del perfil general";
-App::$strings["random geometric pattern"] = "patrón geométrico aleatorio";
-App::$strings["monster face"] = "cara de monstruo";
-App::$strings["computer generated face"] = "cara generada por ordenador";
-App::$strings["retro arcade style face"] = "cara de estilo retro arcade";
-App::$strings["Hub default profile photo"] = "Foto del perfil por defecto del hub";
-App::$strings["Information"] = "Información";
-App::$strings["Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar."] = "El addon Libravatar también está instalado. Por favor deshabilite el addon de Libravatar o este addon de Gravatar.<br> El addon de Libravatar volverá a Gravatar si no se encuentra nada en Libravatar.";
-App::$strings["Save Settings"] = "Guardar ajustes";
-App::$strings["Default avatar image"] = "Imagen del avatar por defecto";
-App::$strings["Select default avatar image if none was found at Gravatar. See README"] = "Selecciona la imagen de avatar predeterminada si no se encontró ninguna en Gravatar. Ver README";
-App::$strings["Rating of images"] = "Valoración de las imágenes";
-App::$strings["Select the appropriate avatar rating for your site. See README"] = "Seleccione la valoración adecuada del avatar para su sitio. Ver README";
-App::$strings["Gravatar settings updated."] = "Se han actualizado los ajustes de Gravatar.";
-App::$strings["text to include in all outgoing posts from this site"] = "texto a incluir en todos los mensajes salientes de este sitio";
-App::$strings["Send your identity to all websites"] = "Enviar su identidad a todos los sitios web";
-App::$strings["Send ZID"] = "Enviar ZID";
-App::$strings["Price"] = "Precio";
-App::$strings["Error: order mismatch. Please try again."] = "Error: desajuste de pedidos. Por favor, inténtelo de nuevo.";
-App::$strings["Manual payments are not enabled."] = "Los pagos manuales no están habilitados.";
-App::$strings["Order not found."] = "El pedido no se ha encontrado.";
-App::$strings["Finished"] = "Terminado";
-App::$strings["Enable Subscription Management Module"] = "Habilitar el módulo de gestión de suscripciones";
-App::$strings["Cannot include subscription items with different terms in the same order."] = "No se pueden incluir artículos de suscripción con términos diferentes en el mismo orden.";
-App::$strings["Select Subscription to Edit"] = "Seleccione suscripción a editar";
-App::$strings["Edit Subscriptions"] = "Editar suscripciones";
-App::$strings["Subscription SKU"] = "SKU de la suscripción";
-App::$strings["Catalog Description"] = "Descripción del catálogo";
-App::$strings["Subscription available for purchase."] = "Suscripción disponible para la compra.";
-App::$strings["Maximum active subscriptions to this item per account."] = "Máximo de suscripciones activas a este artículo por cuenta.";
-App::$strings["Subscription price."] = "Precio de la suscripción.";
-App::$strings["Quantity"] = "Cuantía";
-App::$strings["Term"] = "Condición";
-App::$strings["Enable Hubzilla Services Module"] = "Habilitar el Módulo de Servicios de Hubzilla";
-App::$strings["New Sku"] = "Nuevo SKU (número de referencia)";
-App::$strings["Cannot save edits to locked item."] = "No se pueden guardar las ediciones en el elemento bloqueado.";
-App::$strings["SKU not found."] = "No se ha encontrado el SKU";
-App::$strings["Invalid Activation Directive."] = "Directiva de activación no válida.";
-App::$strings["Invalid Deactivation Directive."] = "Directiva de desactivación no válida";
-App::$strings["Add to this privacy group"] = "Añadir a este grupo de canales";
-App::$strings["Set user service class"] = "Configurar la clase de servicio al usuario";
-App::$strings["You must be using a local account to purchase this service."] = "Usted debe estar usando una cuenta local para comprar este servicio.";
-App::$strings["Changes Locked"] = "Cambios bloqueados";
-App::$strings["Item available for purchase."] = "Artículo disponible para la compra.";
-App::$strings["Photo URL"] = "URL de la foto";
-App::$strings["Add buyer to privacy group"] = "Agregar comprador al grupo de canales";
-App::$strings["Add buyer as connection"] = "Añadir comprador como conexión";
-App::$strings["Set Service Class"] = "Establecer clase de servicio";
-App::$strings["Enable Order/Item Options"] = "Habilitar las opciones de pedido/artículo";
-App::$strings["Label"] = "Etiqueta";
-App::$strings["Required"] = "Obligatorio";
-App::$strings["Instructions"] = "Instrucciones";
-App::$strings["Enable Paypal Button Module"] = "Habilitar el módulo del botón de Paypal";
-App::$strings["Use Production Key"] = "Utilizar clave en entorno de producción";
-App::$strings["Paypal Sandbox Client Key"] = "Clave de cliente en el entorno de pruebas de Paypal";
-App::$strings["Paypal Sandbox Secret Key"] = "Clave secreta en el entorno de pruebas de Paypal";
-App::$strings["Paypal Production Client Key"] = "Clave de cliente en el entorno de producción de Paypal";
-App::$strings["Paypal Production Secret Key"] = "Clave secreta en el entorno de producción de Paypal";
-App::$strings["Paypal button payments are not enabled."] = "Los pagos con el botón de Paypal no están habilitados.";
-App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "Los pagos con el botón de Paypal no están configurados correctamente. Por favor, elija otra opción de pago.";
-App::$strings["Enable Paypal Button Module (API-v2)"] = "Habilitar el módulo de botones de Paypal (API-v2)";
-App::$strings["Enable Manual Cart Module"] = "Habilitar el módulo de carro manual";
-App::$strings["Access Denied."] = "Acceso denegado";
-App::$strings["Order Not Found"] = "No se ha encontrado el pedido";
-App::$strings["Invalid Item"] = "Elemento no válido";
-App::$strings["Enable Test Catalog"] = "Habilitar el catálogo de pruebas";
-App::$strings["Enable Manual Payments"] = "Permitir pagos manuales";
-App::$strings["Base Merchant Currency"] = "Divida base del vendedor";
-App::$strings["Cart Settings"] = "Configuración del carro de la compra";
-App::$strings["DB Cleanup Failure"] = "Fallo de limpieza de la base de datos";
-App::$strings["[cart] Item Added"] = "[cesta] Artículo añadido";
-App::$strings["Order already checked out."] = "El pedido ya ha sido revisado";
-App::$strings["Drop database tables when uninstalling."] = "Eliminar tablas de la base de datos al desinstalar.";
-App::$strings["Shop"] = "Comprar";
-App::$strings["You must be logged into the Grid to shop."] = "Debe iniciar sesión en la red para comprar.";
-App::$strings["Access denied."] = "Acceso denegado";
-App::$strings["No Order Found"] = "No se ha encontrado ningún pedido";
-App::$strings["An unknown error has occurred Please start again."] = "Se ha producido un error desconocido Vuelva a empezar.";
-App::$strings["Requirements not met."] = "No se cumplen los requisitos.";
-App::$strings["Review your order and complete any needed requirements."] = "Revise su pedido y complete los requisitos necesarios.";
-App::$strings["Invalid Payment Type. Please start again."] = "Tipo de pago no válido. Por favor, empiece de nuevo.";
-App::$strings["Order not found"] = "El pedido no se ha encontrado";
-App::$strings["nofed Settings saved."] = "Se han guardado los ajustes de nofed.";
-App::$strings["Federate posts by default"] = "Federar las publicaciones por defecto";
-App::$strings["No Federation"] = "No Federation";
-App::$strings["Federate"] = "Federar";
-App::$strings["Hide the button and show the smilies directly."] = "Ocultar el botón y mostrar los smilies directamente.";
-App::$strings["Smileybutton Settings"] = "Ajustes de Smileybutton";
-App::$strings["file"] = "fichero";
-App::$strings["Redmatrix File Storage Import"] = "Importar repositorio de ficheros de Redmatrix";
-App::$strings["This will import all your Redmatrix cloud files to this channel."] = "Esto importará todos sus ficheros de la nube de Redmatrix a este canal.";
-App::$strings["Please install the statistics addon to be able to configure a diaspora relay"] = "Por favor, instale el complemento de estadísticas para poder configurar el reenvío de diaspora";
-App::$strings["Diaspora Relay Handle"] = "Gestionar el reenvío de Diaspora";
-App::$strings["Address of a diaspora relay. Example: relay@diasporarelay.tld"] = "La dirección de una transmisión de diaspora. Ejemplo: relay@diasporarelay.tld";
-App::$strings["Diaspora relay could not be imported"] = "El reenvío de Diaspora no ha podido ser importado";
-App::$strings["No subject"] = "Sin tema";
-App::$strings["\$projectname"] = "\$projectname";
-App::$strings["No username found in import file."] = "No se ha encontrado el nombre de usuario en el fichero de importación.";
-App::$strings["Unable to create a unique channel address. Import failed."] = "No se ha podido crear una dirección de canal única. Ha fallado la importación.";
-App::$strings["Import completed."] = "Importación completada.";
-App::$strings["Diaspora Protocol Settings updated."] = "Los ajustes del protocolo de Diaspora se han actualizado.";
-App::$strings["The diaspora protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "El protocolo de Diaspora no admite la independencia de la ubicación. Las conexiones que realice dentro de esa red pueden ser inaccesibles desde ubicaciones de canales alternativos.";
-App::$strings["Allow any Diaspora member to comment or like your public posts"] = "Permitir que cualquier miembro de Diaspora comente o ponga un like en sus entradas públicas";
-App::$strings["If this setting is disabled only your contacts will be able to comment or like your public posts"] = "Si esta configuración está desactivada, sólo sus contactos podrán comentar o dar a \"me gusta\" en sus publicaciones públicas";
-App::$strings["Prevent your hashtags from being redirected to other sites"] = "Impedir que sus \"hashtags\" sean redirigidos a otros sitios ";
-App::$strings["Sign and forward posts and comments with no existing Diaspora signature"] = "Firmar y enviar entradas y comentarios sin firma de Diaspora";
-App::$strings["Followed hashtags (comma separated, do not include the #)"] = "\"Hashtags\" seguidos (separados por comas, sin incluir #)";
-App::$strings["Diaspora Protocol"] = "Protocolo Diaspora";
-App::$strings["%1\$s dislikes %2\$s's %3\$s"] = "a %1\$s no le gusta el %3\$s de %2\$s";
-App::$strings["%1\$s is attending %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s participa";
-App::$strings["%1\$s is not attending %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s no participa";
-App::$strings["%1\$s may attend %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s quizá participe";
-App::$strings["This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."] = "Este sitio es rastreado mediante la herramienta analítica <a href='http://www.piwik.org'>Piwik</a>.";
-App::$strings["If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."] = "Si usted no quiere que sus visitas se registren de esta manera <a href='%s'>puede establecer una cookie para evitar que Piwik rastree otras visitas del sitio</a> (opt-out).";
-App::$strings["Piwik Base URL"] = "URL base de Piwik";
-App::$strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = "Ruta absoluta a la instalación de Piwik. (Sin protocolo (http/s), con barra diagonal)";
-App::$strings["Site ID"] = "ID del sitio";
-App::$strings["Show opt-out cookie link?"] = "Mostrar el enlace de la cookie opt-out?";
-App::$strings["Asynchronous tracking"] = "Rastreo asíncrono";
-App::$strings["Enable frontend JavaScript error tracking"] = "Habilitar la interfaz JavaScript de seguimiento de errores";
-App::$strings["This feature requires Piwik >= 2.2.0"] = "Esta funcionalidad requiere Piwik >= 2.2.0";
-App::$strings["Workflow user."] = "Usuario de Workflow.";
-App::$strings["This channel"] = "Este canal";
-App::$strings["Primary"] = "Primario";
-App::$strings["Create New Workflow Item"] = "Crear un nuevo elemento de flujo de trabajo";
-App::$strings["Workflow"] = "Workflow";
-App::$strings["No Workflows Available"] = "No hay flujos de trabajo disponibles";
-App::$strings["Add item to which workflow"] = "A qué Workflow añadir un elemento";
-App::$strings["Create Workflow Item"] = "Crear elemento de Workflow";
-App::$strings["Link"] = "Enlazar";
-App::$strings["Web link."] = "Enlace Web.";
-App::$strings["Title"] = "Título";
-App::$strings["Brief description or title"] = "Breve descripción o título";
-App::$strings["Notes"] = "Notas";
-App::$strings["Notes and Info"] = "Notas e información";
-App::$strings["Body"] = "Cuerpo";
-App::$strings["Workflow Settings"] = "Ajustes de Workflow";
-App::$strings["Project Servers and Resources"] = "Servidores y recursos del proyecto";
-App::$strings["Project Creator and Tech Lead"] = "Creador del proyecto y director técnico";
-App::$strings["And the hundreds of other people and organisations who helped make the Hubzilla possible."] = "Y los cientos de personas y organizaciones más que ayudaron a hacer posible Hubzilla.";
-App::$strings["The Redmatrix/Hubzilla projects are provided primarily by volunteers giving their time and expertise - and often paying out of pocket for services they share with others."] = "Los proyectos Redmatrix / Hubzilla están proporcionados principalmente por voluntarios que les prestan su tiempo y experiencia, pagando a menudo de su bolsillo por los servicios que comparten con otros.";
-App::$strings["There is no corporate funding and no ads, and we do not collect and sell your personal information. (We don't control your personal information - <strong>you do</strong>.)"] = "No hay financiación corporativa ni publicidad y no recogemos ni vendemos su información personal. (De hecho, no tenemos control sobre sus datos privados. <Strong>Usted lo tiene</strong>.)";
-App::$strings["Help support our ground-breaking work in decentralisation, web identity, and privacy."] = "Ayude apoyando nuestro trabajo pionero en la descentralización, la identidad web, y la privacidad.";
-App::$strings["Your donations keep servers and services running and also helps us to provide innovative new features and continued development."] = "Sus donaciones mantienen servidores y servicios en ejecución y también nos ayudan a proporcionar nuevas características innovadoras y a mantener el desarrollo de forma continuada.";
-App::$strings["Donate"] = "Donar";
-App::$strings["Choose a project, developer, or public hub to support with a one-time donation"] = "Elija un proyecto, desarrollador, o \"hub\" público para apoyar con una donación de una sola vez";
-App::$strings["Donate Now"] = "Donar ahora";
-App::$strings["<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"] = "<strong><em>O</em></strong> convertirse en un patrocinador del proyecto (sólo del proyecto Hubzilla)";
-App::$strings["Please indicate if you would like your first name or full name (or nothing) to appear in our sponsor listing"] = "Por favor, indique si desea que su nombre de pila o el nombre completo (o nada) aparezca en nuestra lista de patrocinadores";
-App::$strings["Sponsor"] = "Patrocinador";
-App::$strings["Special thanks to: "] = "Agradecimiento especial a: ";
-App::$strings["Your Webbie:"] = "Su webbie: ";
-App::$strings["Fontsize (px):"] = "Tamaño de fuente (px): ";
-App::$strings["Link:"] = "Enlace: ";
-App::$strings["Like us on Hubzilla"] = "Múestrenos su agrado en Hubzilla";
-App::$strings["Embed:"] = "Incorporado: ";
-App::$strings["__ctx:opensearch__ Search %1\$s (%2\$s)"] = "Buscar %1\$s (%2\$s)";
-App::$strings["__ctx:opensearch__ \$Projectname"] = "\$Projectname";
-App::$strings["\$Projectname"] = "\$Projectname";
-App::$strings["Search \$Projectname"] = "Buscar \$Projectname";
-App::$strings["Fuzzloc Settings updated."] = "Los ajustes de Fuzzloc se han actualizado.";
-App::$strings["Minimum offset in meters"] = "Offset mínimo en metros";
-App::$strings["Maximum offset in meters"] = "Offset máximo en metros";
-App::$strings["Fuzzy Location"] = "Fuzzy Location";
-App::$strings["Send email to all members"] = "Enviar un correo electrónico a todos los miembros";
-App::$strings["%s Administrator"] = "%s Administrador";
-App::$strings["No recipients found."] = "No se han encontrado destinatarios.";
-App::$strings["%1\$d of %2\$d messages sent."] = "%1\$d de %2\$d mensajes enviados.";
-App::$strings["Send email to all hub members."] = "Enviar un correo electrónico a todos los miembros del hub.";
-App::$strings["Message subject"] = "Asunto del mensaje";
-App::$strings["Sender Email address"] = "Dirección de correo electrónico del remitente";
-App::$strings["Test mode (only send to hub administrator)"] = "Modo de prueba (enviar sólo al administrador del hub)";
-App::$strings["Categories"] = "Temas";
-App::$strings["Everything"] = "Todo";
-App::$strings["Item not found"] = "Elemento no encontrado";
-App::$strings["Channel not found."] = "Canal no encontrado.";
-App::$strings["Edit Card"] = "Editar la ficha";
-App::$strings["Delete"] = "Eliminar";
-App::$strings["Cards"] = "Fichas";
-App::$strings["View Cards"] = "Ver las fichas";
-App::$strings["View in context"] = "Mostrar en su contexto";
-App::$strings["Add Card"] = "Añadir una ficha";
-App::$strings["New registration"] = "Nuevo registro";
-App::$strings["%s : Message delivery failed."] = "%s : Falló el envío del mensaje.";
-App::$strings["Message sent to %s. New account registration: %s"] = "Mensaje enviado a %s. Registro de una nueva cuenta: %s";
-App::$strings["Not allowed."] = "No permitido/a.";
-App::$strings["Permissions"] = "Permisos";
-App::$strings["Set/edit permissions"] = "Establecer/editar los permisos";
-App::$strings["Item not found."] = "Elemento no encontrado.";
-App::$strings["Post to Libertree"] = "Publicar en Libertree";
-App::$strings["Libertree Crosspost Connector Settings saved."] = "Se han guardado los ajustes del conector de publicación cruzada con Libertree.";
-App::$strings["Libertree API token"] = "Token de la API de Libertree";
-App::$strings["Libertree site URL"] = "URL del servidor de Libertree";
-App::$strings["Post to Libertree by default"] = "Publicar en Libertree por defecto";
-App::$strings["Libertree Crosspost Connector"] = "Libertree Crosspost Connector";
-App::$strings["You're welcome."] = "Bienvenido.";
-App::$strings["Ah shucks..."] = "Ah, joder...";
-App::$strings["Don't mention it."] = "No lo menciones.";
-App::$strings["&lt;blush&gt;"] = "&lt;sonrojo&gt;";
-App::$strings["Report Bug"] = "Informe de errores";
-App::$strings["TOTP Two-Step Verification"] = "Verificación en dos pasos de TOTP";
-App::$strings["Enter the 2-step verification generated by your authenticator app:"] = "Introduzca la verificación en 2 pasos generada por su app de autenticación: ";
-App::$strings["Success!"] = "¡Éxito!";
-App::$strings["Invalid code, please try again."] = "Código inválido, por favor inténtelo de nuevo.";
-App::$strings["Too many invalid codes..."] = "Demasiados códigos no válidos...";
-App::$strings["Verify"] = "Verficar";
-App::$strings["You haven't set a TOTP secret yet.\nPlease click the button below to generate one and register this site\nwith your preferred authenticator app."] = "Aún no ha establecido un TOTP secret.\nPor favor, haga clic en el botón de abajo para generar uno y registrar este sitio\ncon su aplicación de autenticación preferida.";
-App::$strings["Your TOTP secret is"] = "Su TOTP secret es ";
-App::$strings["Be sure to save it somewhere in case you lose or replace your mobile device.\nUse your mobile device to scan the QR code below to register this site\nwith your preferred authenticator app."] = "Asegúrese de guardarlo en algún lugar en caso de que pierda o reemplace su dispositivo móvil.\nUtilice su dispositivo móvil para escanear el código QR a continuación para registrar este sitio\ncon su aplicación de autenticación preferida.";
-App::$strings["Test"] = "Test";
-App::$strings["Generate New Secret"] = "Generar un nuevo Secret";
-App::$strings["Go"] = "Ir";
-App::$strings["Enter your password"] = "Introduzca su contraseña";
-App::$strings["enter TOTP code from your device"] = "introduzca el código TOTP desde su dispositivo";
-App::$strings["Pass!"] = "¡Pase!";
-App::$strings["Fail"] = "Fallo";
-App::$strings["Incorrect password, try again."] = "Contraseña incorrecta, inténtelo de nuevo.";
-App::$strings["Record your new TOTP secret and rescan the QR code above."] = "Registre su nuevo TOTP secret y vuelva a escanear el código QR de arriba";
-App::$strings["TOTP Settings"] = "Ajustes de TOTP";
-App::$strings["Logfile archive directory"] = "Directorio de los ficheros de informe";
-App::$strings["Directory to store rotated logs"] = "Directorio para almacenar los informes rotados";
-App::$strings["Logfile size in bytes before rotating"] = "Tamaño del fichero de informe en bytes antes de rotarlo";
-App::$strings["Number of logfiles to retain"] = "Número de ficheros de informe que se deben retener";
-App::$strings["Your account on %s will expire in a few days."] = "Su cuenta en %s caducará en unos pocos días.";
-App::$strings["Your test account is about to expire."] = "Su cuenta de prueba está a punto de expirar.";
-App::$strings["Hide Aside App"] = "App de ocultamiento del panel lateral";
-App::$strings["Fade out aside areas after a while when using endless scroll"] = "Se desvanecen las áreas laterales cuando se usa un scroll sin fin";
-App::$strings["Some setting"] = "Algunos ajustes";
-App::$strings["A setting"] = "Un ajuste";
-App::$strings["Skeleton Settings"] = "Ajustes de Skeleton";
-App::$strings["Network error"] = "Error de red";
-App::$strings["API error"] = "Error de API";
-App::$strings["Unknown issue"] = "Problema desconocido";
-App::$strings["Unable to retrieve email address from remote identity provider"] = "No se puede recuperar la dirección de correo electrónico del proveedor de identidad remota";
-App::$strings["Unable to login using email address "] = "Imposible iniciar sesión usando la dirección de correo electrónico";
-App::$strings["Social Authentication using your social media account"] = "Autenticación usando su cuenta de medios sociales";
-App::$strings["This app enables one or more social provider sign-in buttons on the login page."] = "Esta aplicación habilita uno o más botones de inicio de sesión de proveedores sociales en la página de inicio de sesión.";
-App::$strings["Add an identity provider"] = "Añadir un proveedor de identidad";
-App::$strings["Enable "] = "Habilitar";
-App::$strings["Key"] = "Clave";
-App::$strings["Word"] = "Palabra";
-App::$strings["Secret"] = "Secret";
-App::$strings["Add a custom provider"] = "Añadir un proveedor personalizado";
-App::$strings["Remove an identity provider"] = "Eliminar un proveedor de identidad";
-App::$strings["Social authentication"] = "Autenticación social";
-App::$strings["Error while saving provider settings"] = "Se ha producido un error mientras se guardaban los ajustes";
-App::$strings["Custom provider already exists"] = "Ya existe un proveedor personalizado";
-App::$strings["Social authentication settings saved."] = "Se han guardado los ajustes de la autenticación social.";
-App::$strings["Possible adult content"] = "Posible contenido para adultos";
-App::$strings["%s - view"] = "ver - %s";
-App::$strings["NSFW Settings saved."] = "Se han guardado los ajustes de NSFW.";
-App::$strings["This app looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Esta aplicación busca en los mensajes las palabras o texto que especifique a continuación, y oculta cualquier contenido que contenga esas palabras clave, para que no se muestren en momentos inapropiados, como insinuaciones sexuales que puedan ser inapropiadas en un entorno laboral. Es cortés y recomendable etiquetar cualquier contenido que contenga desnudos con #NSFW. Este filtro también puede coincidir con cualquier otra palabra o texto que especifique y, por lo tanto, puede utilizarse como filtro de contenido de propósito general.";
-App::$strings["Comma separated list of keywords to hide"] = "Lista separada por comas de palabras clave para ocultar";
-App::$strings["Word, /regular-expression/, lang=xx, lang!=xx"] = "Palabra, /expresión regular/, lang=xx, lang!=xx";
-App::$strings["NSFW"] = "NSFW";
-App::$strings["Show Upload Limits"] = "Mostrar los límites de subida";
-App::$strings["Hubzilla configured maximum size: "] = "Tamaño máximo configurado por Hubzilla: ";
-App::$strings["PHP upload_max_filesize: "] = "PHP upload_max_filesize: ";
-App::$strings["PHP post_max_size (must be larger than upload_max_filesize): "] = "PHP post_max_size (debe ser mayor que upload_max_filesize): ";
-App::$strings["Three Dimensional Tic-Tac-Toe"] = "Juego en 3D Tic-Tac-Toe";
-App::$strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe";
-App::$strings["New game"] = "Nuevo juego";
-App::$strings["New game with handicap"] = "Nuevo juego con hándicap";
-App::$strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "El juego en 3D tic-tac-toe es como el juego tradicional, excepto que se juega en varios niveles simultáneamente.";
-App::$strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = "En este caso hay tres niveles. Usted gana al conseguir tres en una fila en cualquier nivel, así como arriba, abajo, y en diagonal a través de los diferentes niveles.";
-App::$strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = "El juego con hándicap deshabilita la posición central en el nivel medio porque el jugador que reclama este cuadrado a menudo tiene una ventaja injusta.";
-App::$strings["You go first..."] = "Usted va primero...";
-App::$strings["I'm going first this time..."] = "Yo voy primero esta vez...";
-App::$strings["You won!"] = "¡Usted ha ganado!";
-App::$strings["\"Cat\" game!"] = "¡El juego del \"gato\"!";
-App::$strings["I won!"] = "¡He ganado yo!";
-App::$strings["Send test email"] = "Enviar un correo electrónico de prueba";
-App::$strings["Mail sent."] = "El correo electrónico ha sido enviado.";
-App::$strings["Sending of mail failed."] = "No se pudo enviar el correo.";
-App::$strings["Mail Test"] = "Prueba de correo";
-App::$strings["Livejournal username"] = "Nombre de usuario en Livejournal";
-App::$strings["Livejournal password"] = "Contraseña en Livejournal";
-App::$strings["Post to Livejournal by default"] = "Publicar en Livejournal por defecto";
-App::$strings["Send wall-to-wall posts to Livejournal"] = "Enviar entradas de Muro-Muro a Livejournal";
-App::$strings["Livejournal Crosspost Connector"] = "Livejournal Crosspost Connector";
-App::$strings["Post to Livejournal"] = "Publicar en Livejournal";
-App::$strings["Posted by"] = "Publicado por ";
-App::$strings["Use markdown for editing posts"] = "Usar markdown para editar las entradas";
-App::$strings["Edit Article"] = "Editar el artículo";
-App::$strings["Articles"] = "Artículos";
-App::$strings["View Articles"] = "Ver los artículos";
-App::$strings["Add Article"] = "Añadir un artículo";
-App::$strings["Hubzilla File Storage Import"] = "Importar del depósito de ficheros de Hubzilla";
-App::$strings["This will import all your cloud files from another server."] = "Esto importará todos sus ficheros en la nube desde otro servidor.";
-App::$strings["Hubzilla Server base URL"] = "URL base del servidor Hubzilla";
-App::$strings["Allow magic authentication only to websites of your immediate connections"] = "Permitir la autenticación mágica sólo a los sitios web de sus conexiones próximas";
-App::$strings["Authchoose"] = "Autoseleccionar";
-App::$strings["pageheader Settings saved."] = "Se han guardado los ajustes del encabezado de página.";
-App::$strings["Message to display on every page on this server"] = "Mensaje para mostrar en todas las páginas de este servidor";
-App::$strings["Page Header"] = "Page Header";
-App::$strings["Popular Channels"] = "Canales populares";
-App::$strings["Channels to auto connect"] = "Canales para conexión automática";
-App::$strings["Comma separated list"] = "Lista separada por comas";
-App::$strings["IRC Settings"] = "Ajustes de IRC";
-App::$strings["IRC settings saved."] = "Se han guardado los ajustes de IRC.";
-App::$strings["IRC Chatroom"] = "Sala de chat IRC";
-App::$strings["Jabber BOSH host"] = "BOSH de Jabber";
-App::$strings["Use central userbase"] = "Usar la base de usuarios central";
-App::$strings["If enabled, members will automatically login to an ejabberd server that has to be installed on this machine with synchronized credentials via the \"auth_ejabberd.php\" script."] = "Si está habilitado, los miembros se conectarán automáticamente a un servidor ejabberd que debe instalarse en esta máquina con credenciales sincronizadas a través del script \"auth ejabberd.php\".";
-App::$strings["XMPP settings updated."] = "Se han actualizado los ajustes de XMPP.";
-App::$strings["XMPP App"] = "App XMPP";
-App::$strings["Embedded XMPP (Jabber) client"] = "Cliente XMPP (Jabber) integrado";
-App::$strings["Individual credentials"] = "Credenciales individuales";
-App::$strings["Jabber BOSH server"] = "Servidor BOSH de Jabber";
-App::$strings["XMPP Settings"] = "Ajustes de XMPP";
-App::$strings["prev"] = "anterior";
-App::$strings["first"] = "primera";
-App::$strings["last"] = "última";
-App::$strings["next"] = "próxima";
-App::$strings["older"] = "más antiguas";
-App::$strings["newer"] = "más recientes";
-App::$strings["Connections"] = "Conexiones";
-App::$strings["Accepts"] = "Se acepta";
-App::$strings["Comments"] = "Comentarios";
-App::$strings["Stream items"] = "Elementos del stream";
-App::$strings["Wall posts"] = "Entradas del Muro";
-App::$strings["Nothing"] = "Nada";
-App::$strings["View all %s connections"] = "Ver todas las %s conexiones";
-App::$strings["Network: %s"] = "Red %s";
-App::$strings["Search"] = "Buscar";
-App::$strings["poke"] = "un toque";
-App::$strings["poked"] = "ha dado un toque a";
-App::$strings["ping"] = "un \"ping\"";
-App::$strings["pinged"] = "ha enviado un \"ping\" a";
-App::$strings["prod"] = "una incitación ";
-App::$strings["prodded"] = "ha incitado a ";
-App::$strings["slap"] = "una bofetada ";
-App::$strings["slapped"] = "ha abofeteado a ";
-App::$strings["finger"] = "un \"finger\" ";
-App::$strings["fingered"] = "envió un \"finger\" a";
-App::$strings["rebuff"] = "un reproche";
-App::$strings["rebuffed"] = "ha hecho un reproche a ";
-App::$strings["happy"] = "feliz ";
-App::$strings["sad"] = "triste ";
-App::$strings["mellow"] = "tranquilo/a";
-App::$strings["tired"] = "cansado/a ";
-App::$strings["perky"] = "vivaz";
-App::$strings["angry"] = "enfadado/a";
-App::$strings["stupefied"] = "asombrado/a";
-App::$strings["puzzled"] = "perplejo/a";
-App::$strings["interested"] = "interesado/a";
-App::$strings["bitter"] = "amargado/a";
-App::$strings["cheerful"] = "alegre";
-App::$strings["alive"] = "animado/a";
-App::$strings["annoyed"] = "molesto/a";
-App::$strings["anxious"] = "ansioso/a";
-App::$strings["cranky"] = "de mal humor";
-App::$strings["disturbed"] = "perturbado/a";
-App::$strings["frustrated"] = "frustrado/a";
-App::$strings["depressed"] = "deprimido/a";
-App::$strings["motivated"] = "motivado/a";
-App::$strings["relaxed"] = "relajado/a";
-App::$strings["surprised"] = "sorprendido/a";
-App::$strings["Monday"] = "lunes";
-App::$strings["Tuesday"] = "martes";
-App::$strings["Wednesday"] = "miércoles";
-App::$strings["Thursday"] = "jueves";
-App::$strings["Friday"] = "viernes";
-App::$strings["Saturday"] = "sábado";
-App::$strings["Sunday"] = "domingo";
-App::$strings["January"] = "enero";
-App::$strings["February"] = "febrero";
-App::$strings["March"] = "marzo";
-App::$strings["April"] = "abril";
-App::$strings["May"] = "mayo";
-App::$strings["June"] = "junio";
-App::$strings["July"] = "julio";
-App::$strings["August"] = "agosto";
-App::$strings["September"] = "septiembre";
-App::$strings["October"] = "octubre";
-App::$strings["November"] = "noviembre";
-App::$strings["December"] = "diciembre";
-App::$strings["Unknown Attachment"] = "Adjunto no reconocido";
-App::$strings["Size"] = "Tamaño";
-App::$strings["unknown"] = "desconocido";
-App::$strings["remove category"] = "eliminar el tema";
-App::$strings["remove from file"] = "eliminar del fichero";
-App::$strings["Download binary/encrypted content"] = "Descargar contenido binario o cifrado";
-App::$strings["__ctx:noun__ %d Vote"] = array(
- 0 => "%dVoto",
- 1 => "%dVotos",
- 2 => "%dVotos",
-);
-App::$strings["__ctx:noun__ %d Vote in total"] = array(
- 0 => "%dVoto en total",
- 1 => "%dVotos en total",
- 2 => "%dVotos en total",
+App::$strings["Logout"] = "Finalizar sesión";
+App::$strings["Login"] = "Iniciar sesión";
+App::$strings["Remote Authentication"] = "Acceso desde su servidor";
+App::$strings["Password"] = "Contraseña";
+App::$strings["Remember me"] = "Recordarme";
+App::$strings["Forgot your password?"] = "¿Olvidó su contraseña?";
+App::$strings["Password Reset"] = "Restablecer la contraseña";
+App::$strings["[\$Projectname] Website SSL error for %s"] = "[\$Projectname] Error SSL del sitio web en %s";
+App::$strings["Website SSL certificate is not valid. Please correct."] = "El certificado SSL del sitio web no es válido. Por favor, solucione el problema.";
+App::$strings["[\$Projectname] Cron tasks not running on %s"] = "[\$Projectname] Las tareas de Cron no están funcionando en %s";
+App::$strings["Cron/Scheduled tasks not running."] = "Las tareas del Planificador/Cron no están funcionando.";
+App::$strings["never"] = "nunca";
+App::$strings["%d invitation available"] = array(
+ 0 => "%d invitación pendiente",
+ 1 => "%d invitaciones disponibles",
+ 2 => "%d invitaciones disponibles",
);
-App::$strings["Poll has ended"] = "La encuesta ha terminado";
-App::$strings["Poll ends in %s"] = "La encuesta termina en %s";
-App::$strings["Vote"] = "Votar";
-App::$strings["Link to Source"] = "Enlazar con la entrada en su ubicación original";
-App::$strings["default"] = "por defecto";
-App::$strings["Page layout"] = "Plantilla de la página";
-App::$strings["You can create your own with the layouts tool"] = "Puede crear su propia disposición gráfica con la herramienta de plantillas";
-App::$strings["HTML"] = "HTML";
-App::$strings["Comanche Layout"] = "Plantilla de Comanche";
-App::$strings["PHP"] = "PHP";
-App::$strings["Page content type"] = "Tipo de contenido de la página";
-App::$strings["event"] = "el/su evento";
-App::$strings["post"] = "la entrada";
-App::$strings["comment"] = "el comentario";
-App::$strings["activity"] = "la/su actividad";
-App::$strings["poll"] = "encuesta";
-App::$strings["a-z, 0-9, -, and _ only"] = "a-z, 0-9, -, and _ only";
-App::$strings["Design Tools"] = "Herramientas de diseño web";
-App::$strings["Blocks"] = "Bloques";
-App::$strings["Menus"] = "Menús";
-App::$strings["Layouts"] = "Plantillas";
-App::$strings["Pages"] = "Páginas";
-App::$strings["Import"] = "Importar";
-App::$strings["Import website..."] = "Importar un sitio web...";
-App::$strings["Select folder to import"] = "Seleccionar la carpeta que se va a importar";
-App::$strings["Import from a zipped folder:"] = "Importar desde una carpeta comprimida: ";
-App::$strings["Import from cloud files:"] = "Importar desde los ficheros en la nube: ";
-App::$strings["/cloud/channel/path/to/folder"] = "/cloud/canal/ruta/a la/carpeta";
-App::$strings["Enter path to website files"] = "Ruta a los ficheros del sitio web";
-App::$strings["Select folder"] = "Seleccionar la carpeta";
-App::$strings["Export website..."] = "Exportar un sitio web...";
-App::$strings["Export to a zip file"] = "Exportar a un fichero comprimido .zip";
-App::$strings["website.zip"] = "sitio_web.zip";
-App::$strings["Enter a name for the zip file."] = "Escriba un nombre para el fichero zip.";
-App::$strings["Export to cloud files"] = "Exportar a la nube de ficheros";
-App::$strings["/path/to/export/folder"] = "/ruta/para/exportar/carpeta";
-App::$strings["Enter a path to a cloud files destination."] = "Escriba una ruta de destino a la nube de ficheros.";
-App::$strings["Specify folder"] = "Especificar una carpeta";
-App::$strings["This is the home page of %s."] = "Esta es la página personal de %s.";
+App::$strings["Advanced"] = "Avanzado";
+App::$strings["Find Channels"] = "Encontrar canales";
+App::$strings["Enter name or interest"] = "Introducir nombre o interés";
+App::$strings["Connect/Follow"] = "Conectar/Seguir";
+App::$strings["Examples: Robert Morgenstein, Fishing"] = "Ejemplos: José Fernández, Pesca";
+App::$strings["Find"] = "Encontrar";
+App::$strings["Channel Suggestions"] = "Sugerencias de canales";
+App::$strings["Random Profile"] = "Perfil aleatorio";
+App::$strings["Invite Friends"] = "Invitar a amigos";
+App::$strings["Advanced example: name=fred and country=iceland"] = "Ejemplo avanzado: nombre=juan y país=españa";
+App::$strings["Saved Folders"] = "Carpetas guardadas";
+App::$strings["Everything"] = "Todo";
+App::$strings["Categories"] = "Temas";
+App::$strings["Common Connections"] = "Conexiones comunes";
+App::$strings["View all %d common connections"] = "Ver todas las %d conexiones comunes";
App::$strings["l F d, Y \\@ g:i A"] = "l d de F, Y \\@ G:i";
App::$strings["Starts:"] = "Comienza:";
App::$strings["Finishes:"] = "Finaliza:";
@@ -965,7 +77,9 @@ App::$strings["Location:"] = "Ubicación:";
App::$strings["l F d, Y"] = "l F d, Y";
App::$strings["Start:"] = "Iniciar: ";
App::$strings["End:"] = "Finalizar: ";
+App::$strings["Timezone"] = "Zona horaria";
App::$strings["This event has been added to your calendar."] = "Este evento ha sido añadido a su calendario.";
+App::$strings["event"] = "el/su evento";
App::$strings["Not specified"] = "Sin especificar";
App::$strings["Needs Action"] = "Necesita de una intervención";
App::$strings["Completed"] = "Completado/a";
@@ -979,84 +93,6 @@ App::$strings["Work"] = "Trabajo";
App::$strings["Work, Voice"] = "Llamadas de trabajo";
App::$strings["Work, Fax"] = "Fax de trabajo";
App::$strings["Other"] = "Otro";
-App::$strings["Off"] = "Desactivado";
-App::$strings["On"] = "Activado";
-App::$strings["Calendar"] = "Calendario";
-App::$strings["Start calendar week on Monday"] = "Comenzar el calendario semanal por el lunes";
-App::$strings["Default is Sunday"] = "Por defecto es domingo";
-App::$strings["Event Timezone Selection"] = "Selección del huso horario del evento";
-App::$strings["Allow event creation in timezones other than your own."] = "Permitir la creación de eventos en husos horarios distintos del suyo.";
-App::$strings["Channel Home"] = "Mi canal";
-App::$strings["Search by Date"] = "Buscar por fecha";
-App::$strings["Ability to select posts by date ranges"] = "Capacidad de seleccionar entradas por rango de fechas";
-App::$strings["Tag Cloud"] = "Nube de etiquetas";
-App::$strings["Provide a personal tag cloud on your channel page"] = "Proveer nube de etiquetas personal en su página de canal";
-App::$strings["Use blog/list mode"] = "Usar el modo blog/lista";
-App::$strings["Comments will be displayed separately"] = "Los comentarios se mostrarán por separado";
-App::$strings["Connection Filtering"] = "Filtrado de conexiones";
-App::$strings["Filter incoming posts from connections based on keywords/content"] = "Filtrar publicaciones entrantes de conexiones por palabras clave o contenido";
-App::$strings["Conversation"] = "Conversación";
-App::$strings["Emoji Reactions"] = "Emoticonos \"emoji\"";
-App::$strings["Add emoji reaction ability to posts"] = "Activar la capacidad de añadir un emoticono \"emoji\" a las entradas";
-App::$strings["Dislike Posts"] = "Desagrado de publicaciones";
-App::$strings["Ability to dislike posts/comments"] = "Capacidad de mostrar desacuerdo con el contenido de entradas y comentarios";
-App::$strings["Star Posts"] = "Entradas destacadas";
-App::$strings["Ability to mark special posts with a star indicator"] = "Capacidad de marcar entradas destacadas con un indicador de estrella";
-App::$strings["Reply on comment"] = "Responder a los comentarios";
-App::$strings["Ability to reply on selected comment"] = "Posibilidad de responder a los comentarios seleccionados";
-App::$strings["Directory"] = "Directorio";
-App::$strings["Advanced Directory Search"] = "Búsqueda avanzada en el directorio";
-App::$strings["Allows creation of complex directory search queries"] = "Permitir la creación de consultas complejas en las búsquedas en el directorio";
-App::$strings["Editor"] = "Editor";
-App::$strings["Post Categories"] = "Temas de las entradas";
-App::$strings["Add categories to your posts"] = "Añadir temas a sus publicaciones";
-App::$strings["Large Photos"] = "Fotos de gran tamaño";
-App::$strings["Include large (1024px) photo thumbnails in posts. If not enabled, use small (640px) photo thumbnails"] = "Incluir miniaturas de fotos grandes (1024px) en publicaciones. Si no está habilitado, usar miniaturas pequeñas (640px)";
-App::$strings["Even More Encryption"] = "Más cifrado todavía";
-App::$strings["Allow optional encryption of content end-to-end with a shared secret key"] = "Permitir cifrado adicional de contenido \"punto-a-punto\" con una clave secreta compartida.";
-App::$strings["Disable Comments"] = "Deshabilitar comentarios";
-App::$strings["Provide the option to disable comments for a post"] = "Proporcionar la opción de desactivar los comentarios para una entrada";
-App::$strings["Delayed Posting"] = "Publicación aplazada";
-App::$strings["Allow posts to be published at a later date"] = "Permitir mensajes que se publicarán en una fecha posterior";
-App::$strings["Content Expiration"] = "Caducidad del contenido";
-App::$strings["Remove posts/comments and/or private messages at a future time"] = "Eliminar publicaciones/comentarios y/o mensajes privados más adelante";
-App::$strings["Suppress Duplicate Posts/Comments"] = "Prevenir entradas o comentarios duplicados";
-App::$strings["Prevent posts with identical content to be published with less than two minutes in between submissions."] = "Prevenir que entradas con contenido idéntico se publiquen con menos de dos minutos de intervalo.";
-App::$strings["Auto-save drafts of posts and comments"] = "Guardar automáticamente borradores de entradas y comentarios";
-App::$strings["Automatically saves post and comment drafts in local browser storage to help prevent accidental loss of compositions"] = "Guarda automáticamente los borradores de comentarios y publicaciones en el almacenamiento del navegador local para ayudar a evitar la pérdida accidental de composiciones.";
-App::$strings["Manage"] = "Gestionar";
-App::$strings["Navigation Channel Select"] = "Navegación por el selector de canales";
-App::$strings["Change channels directly from within the navigation dropdown menu"] = "Cambiar de canales directamente desde el menú de navegación desplegable";
-App::$strings["Network"] = "Red";
-App::$strings["Events Filter"] = "Filtro de eventos";
-App::$strings["Ability to display only events"] = "Capacidad para mostrar solo eventos";
-App::$strings["Polls Filter"] = "Filtro de encuestas";
-App::$strings["Ability to display only polls"] = "Capacidad para mostrar solo encuestas";
-App::$strings["Saved Searches"] = "Búsquedas guardadas";
-App::$strings["Save search terms for re-use"] = "Guardar términos de búsqueda para su reutilización";
-App::$strings["Saved Folders"] = "Carpetas guardadas";
-App::$strings["Ability to file posts under folders"] = "Capacidad de archivar entradas en carpetas";
-App::$strings["Alternate Stream Order"] = "Orden de stream alternativo";
-App::$strings["Ability to order the stream by last post date, last comment date or unthreaded activities"] = "Posibilidad de ordenar el stream por última fecha de publicación, última fecha de comentario o actividades sin hilo";
-App::$strings["Contact Filter"] = "Filtro de contactos";
-App::$strings["Ability to display only posts of a selected contact"] = "Posibilidad de mostrar sólo los mensajes de un contacto seleccionado";
-App::$strings["Forum Filter"] = "Filtro de foro";
-App::$strings["Ability to display only posts of a specific forum"] = "Posibilidad de mostrar sólo los mensajes de un foro específico";
-App::$strings["Personal Posts Filter"] = "Filtro de entradas personales";
-App::$strings["Ability to display only posts that you've interacted on"] = "Posibilidad de mostrar sólo los mensajes en los que usted haya interactuado";
-App::$strings["Photos"] = "Fotos";
-App::$strings["Photo Location"] = "Ubicación de las fotos";
-App::$strings["If location data is available on uploaded photos, link this to a map."] = "Si los datos de ubicación están disponibles en las fotos subidas, enlazar estas a un mapa.";
-App::$strings["Flag Adult Photos"] = "Indicador (\"flag\") de fotos de adultos";
-App::$strings["Provide photo edit option to hide inappropriate photos from default album view"] = "Proporcionar una opción de edición de fotos para ocultar las fotos inapropiadas de la vista de álbum predeterminada";
-App::$strings["Profiles"] = "Perfiles";
-App::$strings["Advanced Profiles"] = "Perfiles avanzados";
-App::$strings["Additional profile sections and selections"] = "Secciones y selecciones de perfil adicionales";
-App::$strings["Profile Import/Export"] = "Importar/Exportar perfil";
-App::$strings["Save and load profile details across sites/channels"] = "Guardar y cargar detalles del perfil a través de sitios/canales";
-App::$strings["Multiple Profiles"] = "Múltiples perfiles";
-App::$strings["Ability to create multiple profiles"] = "Capacidad de crear múltiples perfiles";
-App::$strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "El \"token\" de seguridad del formulario no es correcto. Esto ha ocurrido probablemente porque el formulario ha estado abierto demasiado tiempo (>3 horas) antes de ser enviado";
App::$strings["Delete this item?"] = "¿Borrar este elemento?";
App::$strings["Item deleted"] = "Elemento eliminado";
App::$strings["Comment"] = "Comentar";
@@ -1129,7 +165,18 @@ App::$strings["about a month"] = "alrededor de un mes";
App::$strings["about a year"] = "alrededor de un año";
App::$strings[" "] = " ";
App::$strings["timeago.numbers"] = "timeago.numbers";
+App::$strings["January"] = "enero";
+App::$strings["February"] = "febrero";
+App::$strings["March"] = "marzo";
+App::$strings["April"] = "abril";
App::$strings["__ctx:long__ May"] = "mayo";
+App::$strings["June"] = "junio";
+App::$strings["July"] = "julio";
+App::$strings["August"] = "agosto";
+App::$strings["September"] = "septiembre";
+App::$strings["October"] = "octubre";
+App::$strings["November"] = "noviembre";
+App::$strings["December"] = "diciembre";
App::$strings["Jan"] = "ene";
App::$strings["Feb"] = "feb";
App::$strings["Mar"] = "mar";
@@ -1142,6 +189,13 @@ App::$strings["Sep"] = "sep";
App::$strings["Oct"] = "oct";
App::$strings["Nov"] = "nov";
App::$strings["Dec"] = "dic";
+App::$strings["Sunday"] = "domingo";
+App::$strings["Monday"] = "lunes";
+App::$strings["Tuesday"] = "martes";
+App::$strings["Wednesday"] = "miércoles";
+App::$strings["Thursday"] = "jueves";
+App::$strings["Friday"] = "viernes";
+App::$strings["Saturday"] = "sábado";
App::$strings["Sun"] = "dom";
App::$strings["Mon"] = "lun";
App::$strings["Tue"] = "mar";
@@ -1156,77 +210,28 @@ App::$strings["__ctx:calendar__ day"] = "día";
App::$strings["__ctx:calendar__ All day"] = "Todos los días";
App::$strings["Please stand by while your download is being prepared."] = "Por favor, espere mientras se prepara la descarga.";
App::$strings["Email address not valid"] = "Dirección de correo electrónica no válida";
-App::$strings["Help:"] = "Ayuda:";
-App::$strings["Help"] = "Ayuda";
-App::$strings["Not Found"] = "No encontrado";
-App::$strings["Image exceeds website size limit of %lu bytes"] = "La imagen excede el límite de %lu bytes del sitio";
-App::$strings["Image file is empty."] = "El fichero de imagen está vacío. ";
-App::$strings["Unable to process image"] = "No ha sido posible procesar la imagen";
-App::$strings["Photo storage failed."] = "La foto no ha podido ser guardada.";
-App::$strings["a new photo"] = "una nueva foto";
-App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s ha publicado %2\$s en %3\$s";
-App::$strings["Photo Albums"] = "Álbumes de fotos";
-App::$strings["Recent Photos"] = "Fotos recientes";
-App::$strings["Upload New Photos"] = "Subir nuevas fotos";
-App::$strings["url: "] = "url: ";
-App::$strings["error_code: "] = "código_de_error: ";
-App::$strings["error_string: "] = "cadena_de_error: ";
-App::$strings["content-type: "] = "tipo de contenido: ";
-App::$strings["Friendica"] = "Friendica";
-App::$strings["OStatus"] = "OStatus";
-App::$strings["GNU-Social"] = "GNU Social";
-App::$strings["RSS/Atom"] = "RSS/Atom";
-App::$strings["Diaspora"] = "Diaspora";
-App::$strings["Facebook"] = "Facebook";
-App::$strings["Zot"] = "Zot";
-App::$strings["LinkedIn"] = "LinkedIn";
-App::$strings["XMPP/IM"] = "XMPP/IM";
-App::$strings["MySpace"] = "MySpace";
-App::$strings[" and "] = " y ";
-App::$strings["public profile"] = "el perfil público";
-App::$strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s ha cambiado %2\$s a &ldquo;%3\$s&rdquo;";
-App::$strings["Visit %1\$s's %2\$s"] = "Visitar %2\$s de %1\$s";
-App::$strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s ha actualizado %2\$s, cambiando %3\$s.";
-App::$strings["%d invitation available"] = array(
- 0 => "%d invitación pendiente",
- 1 => "%d invitaciones disponibles",
- 2 => "%d invitaciones disponibles",
-);
-App::$strings["Advanced"] = "Avanzado";
-App::$strings["Find Channels"] = "Encontrar canales";
-App::$strings["Enter name or interest"] = "Introducir nombre o interés";
-App::$strings["Connect/Follow"] = "Conectar/Seguir";
-App::$strings["Examples: Robert Morgenstein, Fishing"] = "Ejemplos: José Fernández, Pesca";
-App::$strings["Find"] = "Encontrar";
-App::$strings["Channel Suggestions"] = "Sugerencias de canales";
-App::$strings["Random Profile"] = "Perfil aleatorio";
-App::$strings["Invite Friends"] = "Invitar a amigos";
-App::$strings["Advanced example: name=fred and country=iceland"] = "Ejemplo avanzado: nombre=juan y país=españa";
-App::$strings["Common Connections"] = "Conexiones comunes";
-App::$strings["View all %d common connections"] = "Ver todas las %d conexiones comunes";
-App::$strings["Select an alternate language"] = "Seleccionar un idioma alternativo";
-App::$strings["Unable to import a removed channel."] = "No se puede importar un canal eliminado.";
-App::$strings["Cannot create a duplicate channel identifier on this system. Import failed."] = "No se ha podido crear un canal con un identificador que ya existe en este sistema. La importación ha fallado.";
-App::$strings["Cloned channel not found. Import failed."] = "No se ha podido importar el canal porque el canal clonado no se ha encontrado.";
+App::$strings["Required"] = "Obligatorio";
+App::$strings["Profile Photos"] = "Fotos del perfil";
App::$strings["Remote authentication"] = "Acceder desde su servidor";
App::$strings["Click to authenticate to your home hub"] = "Pulsar para identificarse en su servidor de inicio";
App::$strings["Channels"] = "Canales";
App::$strings["Manage your channels"] = "Gestionar sus canales";
App::$strings["Settings"] = "Ajustes";
App::$strings["Account/Channel Settings"] = "Ajustes de cuenta/canales";
-App::$strings["Logout"] = "Finalizar sesión";
App::$strings["End this session"] = "Finalizar esta sesión";
+App::$strings["View Profile"] = "Ver el perfil";
App::$strings["Your profile page"] = "Su página del perfil";
App::$strings["Edit Profiles"] = "Editar perfiles";
App::$strings["Manage/Edit profiles"] = "Administrar/editar perfiles";
+App::$strings["Edit Profile"] = "Editar el perfil";
App::$strings["Edit your profile"] = "Editar su perfil";
-App::$strings["Login"] = "Iniciar sesión";
App::$strings["Sign in"] = "Acceder";
App::$strings["Take me home"] = "Volver a la página principal";
App::$strings["Log me out of this site"] = "Salir de este sitio";
-App::$strings["Register"] = "Registrarse";
App::$strings["Create an account"] = "Crear una cuenta";
+App::$strings["Help"] = "Ayuda";
App::$strings["Help and documentation"] = "Ayuda y documentación";
+App::$strings["Search"] = "Buscar";
App::$strings["Search site @name, !forum, #tag, ?docs, content"] = "Buscar en el sitio @nombre, !foro, #tag, ?docs, contenido";
App::$strings["Admin"] = "Administrador";
App::$strings["Site Setup and Configuration"] = "Ajustes y configuración del sitio";
@@ -1242,23 +247,22 @@ App::$strings["Channel"] = "Canal";
App::$strings["Status Messages and Posts"] = "Mensajes de estado y publicaciones";
App::$strings["About"] = "Mi perfil";
App::$strings["Profile Details"] = "Detalles del perfil";
+App::$strings["Photos"] = "Fotos";
+App::$strings["Photo Albums"] = "Álbumes de fotos";
App::$strings["Files"] = "Ficheros";
App::$strings["Files and Storage"] = "Ficheros y repositorio";
+App::$strings["Calendar"] = "Calendario";
App::$strings["Chatrooms"] = "Salas de chat";
App::$strings["Bookmarks"] = "Marcadores";
App::$strings["Saved Bookmarks"] = "Marcadores guardados";
App::$strings["Webpages"] = "Páginas web";
App::$strings["View Webpages"] = "Ver páginas web";
+App::$strings["Wikis"] = "Wikis";
App::$strings["Wiki"] = "Wiki";
-App::$strings["Delegation session ended."] = "Finalizó la sesión de la delegación.";
-App::$strings["Logged out."] = "Desconectado/a.";
-App::$strings["Email validation is incomplete. Please check your email."] = "La validación del correo electrónico está incompleta. Por favor, compruebe su correo electrónico.";
-App::$strings["Failed authentication"] = "Autenticación fallida.";
App::$strings["Miscellaneous"] = "Varios";
App::$strings["Birthday"] = "Cumpleaños";
App::$strings["Age: "] = "Edad:";
App::$strings["YYYY-MM-DD or MM-DD"] = "AAAA-MM-DD o MM-DD";
-App::$strings["never"] = "nunca";
App::$strings["less than a second ago"] = "hace un instante";
App::$strings["__ctx:e.g. 22 hours ago, 1 minute ago__ %1\$d %2\$s ago"] = "hace %1\$d %2\$s";
App::$strings["__ctx:relative_date__ year"] = array(
@@ -1298,6 +302,130 @@ App::$strings["__ctx:relative_date__ second"] = array(
);
App::$strings["%1\$s's birthday"] = "Cumpleaños de %1\$s";
App::$strings["Happy Birthday %1\$s"] = "Feliz cumpleaños %1\$s";
+App::$strings["default"] = "por defecto";
+App::$strings["Select an alternate language"] = "Seleccionar un idioma alternativo";
+App::$strings["Off"] = "Desactivado";
+App::$strings["On"] = "Activado";
+App::$strings["Start calendar week on Monday"] = "Comenzar el calendario semanal por el lunes";
+App::$strings["Default is Sunday"] = "Por defecto es domingo";
+App::$strings["Event Timezone Selection"] = "Selección del huso horario del evento";
+App::$strings["Allow event creation in timezones other than your own."] = "Permitir la creación de eventos en husos horarios distintos del suyo.";
+App::$strings["Channel Home"] = "Mi canal";
+App::$strings["Search by Date"] = "Buscar por fecha";
+App::$strings["Ability to select posts by date ranges"] = "Capacidad de seleccionar entradas por rango de fechas";
+App::$strings["Tag Cloud"] = "Nube de etiquetas";
+App::$strings["Provide a personal tag cloud on your channel page"] = "Proveer nube de etiquetas personal en su página de canal";
+App::$strings["Use blog/list mode"] = "Usar el modo blog/lista";
+App::$strings["Comments will be displayed separately"] = "Los comentarios se mostrarán por separado";
+App::$strings["Connections"] = "Conexiones";
+App::$strings["Connection Filtering"] = "Filtrado de conexiones";
+App::$strings["Filter incoming posts from connections based on keywords/content"] = "Filtrar publicaciones entrantes de conexiones por palabras clave o contenido";
+App::$strings["Conversation"] = "Conversación";
+App::$strings["Emoji Reactions"] = "Emoticonos \"emoji\"";
+App::$strings["Add emoji reaction ability to posts"] = "Activar la capacidad de añadir un emoticono \"emoji\" a las entradas";
+App::$strings["Dislike Posts"] = "Desagrado de publicaciones";
+App::$strings["Ability to dislike posts/comments"] = "Capacidad de mostrar desacuerdo con el contenido de entradas y comentarios";
+App::$strings["Star Posts"] = "Entradas destacadas";
+App::$strings["Ability to mark special posts with a star indicator"] = "Capacidad de marcar entradas destacadas con un indicador de estrella";
+App::$strings["Reply on comment"] = "Responder a los comentarios";
+App::$strings["Ability to reply on selected comment"] = "Posibilidad de responder a los comentarios seleccionados";
+App::$strings["Directory"] = "Directorio";
+App::$strings["Advanced Directory Search"] = "Búsqueda avanzada en el directorio";
+App::$strings["Allows creation of complex directory search queries"] = "Permitir la creación de consultas complejas en las búsquedas en el directorio";
+App::$strings["Editor"] = "Editor";
+App::$strings["Post Categories"] = "Temas de las entradas";
+App::$strings["Add categories to your posts"] = "Añadir temas a sus publicaciones";
+App::$strings["Large Photos"] = "Fotos de gran tamaño";
+App::$strings["Include large (1024px) photo thumbnails in posts. If not enabled, use small (640px) photo thumbnails"] = "Incluir miniaturas de fotos grandes (1024px) en publicaciones. Si no está habilitado, usar miniaturas pequeñas (640px)";
+App::$strings["Even More Encryption"] = "Más cifrado todavía";
+App::$strings["Allow optional encryption of content end-to-end with a shared secret key"] = "Permitir cifrado adicional de contenido \"punto-a-punto\" con una clave secreta compartida.";
+App::$strings["Disable Comments"] = "Deshabilitar comentarios";
+App::$strings["Provide the option to disable comments for a post"] = "Proporcionar la opción de desactivar los comentarios para una entrada";
+App::$strings["Delayed Posting"] = "Publicación aplazada";
+App::$strings["Allow posts to be published at a later date"] = "Permitir mensajes que se publicarán en una fecha posterior";
+App::$strings["Content Expiration"] = "Caducidad del contenido";
+App::$strings["Remove posts/comments and/or private messages at a future time"] = "Eliminar publicaciones/comentarios y/o mensajes privados más adelante";
+App::$strings["Suppress Duplicate Posts/Comments"] = "Prevenir entradas o comentarios duplicados";
+App::$strings["Prevent posts with identical content to be published with less than two minutes in between submissions."] = "Prevenir que entradas con contenido idéntico se publiquen con menos de dos minutos de intervalo.";
+App::$strings["Auto-save drafts of posts and comments"] = "Guardar automáticamente borradores de entradas y comentarios";
+App::$strings["Automatically saves post and comment drafts in local browser storage to help prevent accidental loss of compositions"] = "Guarda automáticamente los borradores de comentarios y publicaciones en el almacenamiento del navegador local para ayudar a evitar la pérdida accidental de composiciones.";
+App::$strings["Manage"] = "Gestionar";
+App::$strings["Navigation Channel Select"] = "Navegación por el selector de canales";
+App::$strings["Change channels directly from within the navigation dropdown menu"] = "Cambiar de canales directamente desde el menú de navegación desplegable";
+App::$strings["Network"] = "Red";
+App::$strings["Events Filter"] = "Filtro de eventos";
+App::$strings["Ability to display only events"] = "Capacidad para mostrar solo eventos";
+App::$strings["Polls Filter"] = "Filtro de encuestas";
+App::$strings["Ability to display only polls"] = "Capacidad para mostrar solo encuestas";
+App::$strings["Saved Searches"] = "Búsquedas guardadas";
+App::$strings["Save search terms for re-use"] = "Guardar términos de búsqueda para su reutilización";
+App::$strings["Ability to file posts under folders"] = "Capacidad de archivar entradas en carpetas";
+App::$strings["Alternate Stream Order"] = "Orden de stream alternativo";
+App::$strings["Ability to order the stream by last post date, last comment date or unthreaded activities"] = "Posibilidad de ordenar el stream por última fecha de publicación, última fecha de comentario o actividades sin hilo";
+App::$strings["Contact Filter"] = "Filtro de contactos";
+App::$strings["Ability to display only posts of a selected contact"] = "Posibilidad de mostrar sólo los mensajes de un contacto seleccionado";
+App::$strings["Forum Filter"] = "Filtro de foro";
+App::$strings["Ability to display only posts of a specific forum"] = "Posibilidad de mostrar sólo los mensajes de un foro específico";
+App::$strings["Personal Posts Filter"] = "Filtro de entradas personales";
+App::$strings["Ability to display only posts that you've interacted on"] = "Posibilidad de mostrar sólo los mensajes en los que usted haya interactuado";
+App::$strings["Photo Location"] = "Ubicación de las fotos";
+App::$strings["If location data is available on uploaded photos, link this to a map."] = "Si los datos de ubicación están disponibles en las fotos subidas, enlazar estas a un mapa.";
+App::$strings["Flag Adult Photos"] = "Indicador (\"flag\") de fotos de adultos";
+App::$strings["Provide photo edit option to hide inappropriate photos from default album view"] = "Proporcionar una opción de edición de fotos para ocultar las fotos inapropiadas de la vista de álbum predeterminada";
+App::$strings["Profiles"] = "Perfiles";
+App::$strings["Advanced Profiles"] = "Perfiles avanzados";
+App::$strings["Additional profile sections and selections"] = "Secciones y selecciones de perfil adicionales";
+App::$strings["Profile Import/Export"] = "Importar/Exportar perfil";
+App::$strings["Save and load profile details across sites/channels"] = "Guardar y cargar detalles del perfil a través de sitios/canales";
+App::$strings["Multiple Profiles"] = "Múltiples perfiles";
+App::$strings["Ability to create multiple profiles"] = "Capacidad de crear múltiples perfiles";
+App::$strings["unknown"] = "desconocido";
+App::$strings["View PDF"] = "Ver PDF";
+App::$strings[" by "] = "por";
+App::$strings[" on "] = "en";
+App::$strings["Embedded content"] = "Contenido incorporado";
+App::$strings["Embedding disabled"] = "Incrustación deshabilitada";
+App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s escribió %2\$s siguiente %3\$s";
+App::$strings["post"] = "la entrada";
+App::$strings["spoiler"] = "spoiler";
+App::$strings["This is the home page of %s."] = "Esta es la página personal de %s.";
+App::$strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente.";
+App::$strings["Add new connections to this privacy group"] = "Añadir conexiones nuevas a este grupo de canales";
+App::$strings["edit"] = "editar";
+App::$strings["Privacy Groups"] = "Grupos de canales";
+App::$strings["Edit group"] = "Editar grupo";
+App::$strings["Manage privacy groups"] = "Gestionar grupos de privacidad";
+App::$strings["Channels not in any privacy group"] = "Sin canales en ningún grupo";
+App::$strings["add"] = "añadir";
+App::$strings["Connect"] = "Conectar";
+App::$strings["New window"] = "Nueva ventana";
+App::$strings["Open the selected location in a different window or browser tab"] = "Abrir la dirección seleccionada en una ventana o pestaña aparte";
+App::$strings["Permission denied"] = "Permiso denegado";
+App::$strings["Visible to anybody on the internet."] = "Visible para cualquiera en internet.";
+App::$strings["Visible to you only."] = "Visible sólo para usted.";
+App::$strings["Visible to anybody in this network."] = "Visible para cualquiera en esta red.";
+App::$strings["Visible to anybody authenticated."] = "Visible para cualquiera que esté autenticado.";
+App::$strings["Visible to anybody on %s."] = "Visible para cualquiera en %s.";
+App::$strings["Visible to all connections."] = "Visible para todas las conexiones.";
+App::$strings["Visible to approved connections."] = "Visible para las conexiones permitidas.";
+App::$strings["Visible to specific connections."] = "Visible para conexiones específicas.";
+App::$strings["&#x1f501; Repeated %1\$s's %2\$s"] = "&#x1f501; Repetidos %2\$sde %1\$s";
+App::$strings["Item not found."] = "Elemento no encontrado.";
+App::$strings["Permission denied."] = "Acceso denegado.";
+App::$strings["Privacy group not found."] = "Grupo de canales no encontrado.";
+App::$strings["Privacy group is empty."] = "El grupo de canales está vacío.";
+App::$strings["Privacy group: %s"] = "Grupo de canales: %s";
+App::$strings["Connection: %s"] = "Conexión: %s";
+App::$strings["Connection not found."] = "Conexión no encontrada";
+App::$strings["female"] = "mujer";
+App::$strings["%1\$s updated her %2\$s"] = "%1\$s ha actualizado su %2\$s";
+App::$strings["male"] = "hombre";
+App::$strings["%1\$s updated his %2\$s"] = "%1\$s ha actualizado su %2\$s";
+App::$strings["%1\$s updated their %2\$s"] = "%1\$s ha actualizado su %2\$s";
+App::$strings["profile photo"] = "foto del perfil";
+App::$strings["[Edited %s]"] = "[se ha editado %s]";
+App::$strings["__ctx:edit_activity__ Post"] = "Publicar";
+App::$strings["__ctx:edit_activity__ Comment"] = "Comentar";
App::$strings["INVALID EVENT DISMISSED!"] = "¡EVENTO NO VÁLIDO RECHAZADO!";
App::$strings["Summary: "] = "Resumen: ";
App::$strings["Unknown"] = "Desconocido";
@@ -1305,11 +433,142 @@ App::$strings["Date: "] = "Fecha: ";
App::$strings["Reason: "] = "Razón: ";
App::$strings["INVALID CARD DISMISSED!"] = "¡TARJETA NO VÁLIDA RECHAZADA!";
App::$strings["Name: "] = "Nombre: ";
+App::$strings["The provided email address is not valid"] = "La dirección de correo electrónico proporcionada no es válida";
+App::$strings["The provided email domain is not among those allowed on this site"] = "El dominio de correo electrónico proporcionado no está entre los permitidos en este sitio";
+App::$strings["The provided email address is already registered at this site"] = "La dirección de correo electrónico proporcionada ya está registrada en este sitio";
+App::$strings["There is a pending registration for this address - click \"Register\" to continue verification"] = "Hay un registro pendiente para esta dirección - haga clic en \"Registro\" para continuar la verificación";
+App::$strings["An invitation is required."] = "Es obligatorio que le inviten.";
+App::$strings["Invitation could not be verified."] = "No se ha podido verificar su invitación.";
+App::$strings["Please enter the required information."] = "Por favor introduzca la información requerida.";
+App::$strings["Failed to store account information."] = "La información de la cuenta no se ha podido guardar.";
+App::$strings["Registration confirmation for %s"] = "Confirmación de registro para %s";
+App::$strings["Registration request at %s"] = "Solicitud de registro en %s";
+App::$strings["your registration password"] = "su contraseña de registro";
+App::$strings["Registration details for %s"] = "Detalles del registro de %s";
+App::$strings["Account approved."] = "Cuenta aprobada.";
+App::$strings["Registration revoked for %s"] = "Registro revocado para %s";
+App::$strings["Could not revoke registration for %s"] = "No se ha podido revocar el registro de %s";
+App::$strings["Click here to upgrade."] = "Pulse aquí para actualizar";
+App::$strings["This action exceeds the limits set by your subscription plan."] = "Esta acción supera los límites establecidos por su plan de suscripción ";
+App::$strings["This action is not available under your subscription plan."] = "Esta acción no está disponible en su plan de suscripción.";
+App::$strings["open"] = "abierto";
+App::$strings["closed"] = "cerrado";
+App::$strings["Registration is currently"] = "El registro está actualmente ";
+App::$strings["please come back"] = "por favor, vuelva";
+App::$strings["Help:"] = "Ayuda:";
+App::$strings["Not Found"] = "No encontrado";
+App::$strings["Page not found."] = "Página no encontrada.";
+App::$strings["Trending"] = "Etiquetas populares";
+App::$strings["Tags"] = "Etiquetas";
+App::$strings["Keywords"] = "Palabras clave";
+App::$strings["have"] = "tener";
+App::$strings["has"] = "tiene";
+App::$strings["want"] = "quiero";
+App::$strings["wants"] = "quiere";
+App::$strings["like"] = "me gusta";
+App::$strings["likes"] = "gusta de";
+App::$strings["dislike"] = "no me gusta";
+App::$strings["dislikes"] = "no gusta de";
+App::$strings["__ctx:noun__ Like"] = array(
+ 0 => "Me gusta",
+ 1 => "Me gusta",
+ 2 => "Me gusta",
+);
+App::$strings["Image exceeds website size limit of %lu bytes"] = "La imagen excede el límite de %lu bytes del sitio";
+App::$strings["Image file is empty."] = "El fichero de imagen está vacío. ";
+App::$strings["Unable to process image"] = "No ha sido posible procesar la imagen";
+App::$strings["Photo storage failed."] = "La foto no ha podido ser guardada.";
+App::$strings["a new photo"] = "una nueva foto";
+App::$strings["__ctx:photo_upload__ %1\$s posted %2\$s to %3\$s"] = "%1\$s ha publicado %2\$s en %3\$s";
+App::$strings["Recent Photos"] = "Fotos recientes";
+App::$strings["Upload New Photos"] = "Subir nuevas fotos";
+App::$strings["The form security token was not correct. This probably happened because the form has been opened for too long (>3 hours) before submitting it."] = "El \"token\" de seguridad del formulario no es correcto. Esto ha ocurrido probablemente porque el formulario ha estado abierto demasiado tiempo (>3 horas) antes de ser enviado";
+App::$strings["Image/photo"] = "Imagen/foto";
+App::$strings["Encrypted content"] = "Contenido cifrado";
+App::$strings["Install %1\$s element %2\$s"] = "Instalar el elemento de%1\$s%2\$s";
+App::$strings["This post contains an installable %s element, however you lack permissions to install it on this site."] = "Esta entrada contiene el elemento instalable %s, sin embargo le faltan permisos para instalarlo en este sitio.";
+App::$strings["webpage"] = "página web";
+App::$strings["layout"] = "plantilla";
+App::$strings["block"] = "bloque";
+App::$strings["menu"] = "menú";
+App::$strings["card"] = "ficha";
+App::$strings["article"] = "el artículo";
+App::$strings["Click to open/close"] = "Pulsar para abrir/cerrar";
+App::$strings["View article"] = "Ver el artículo";
+App::$strings["View summary"] = "Ver sumario";
+App::$strings["Different viewers will see this text differently"] = "Visitantes diferentes verán este texto de forma distinta";
+App::$strings["$1 wrote:"] = "$1 escribió:";
+App::$strings["Edit"] = "Editar";
+App::$strings["Item was not found."] = "Elemento no encontrado.";
+App::$strings["Unknown error."] = "Error desconocido";
+App::$strings["No source file."] = "Ningún fichero de origen";
+App::$strings["Cannot locate file to replace"] = "No se puede localizar el fichero que va a ser sustituido.";
+App::$strings["Cannot locate file to revise/update"] = "No se puede localizar el fichero para revisar/actualizar";
+App::$strings["File exceeds size limit of %d"] = "El fichero supera el limite de tamaño de %d";
+App::$strings["You have reached your limit of %1$.0f Mbytes attachment storage."] = "Ha alcanzado su límite de %1$.0f Mbytes de almacenamiento de adjuntos.";
+App::$strings["File upload failed. Possible system limit or action terminated."] = "Error de carga, posiblemente por limite del sistema o porque la acción ha finalizado.";
+App::$strings["Stored file could not be verified. Upload failed."] = "El fichero almacenado no ha podido ser verificado. El envío ha fallado.";
+App::$strings["Path not available."] = "Ruta no disponible.";
+App::$strings["Empty pathname"] = "Ruta vacía";
+App::$strings["duplicate filename or path"] = "Nombre duplicado de ruta o fichero";
+App::$strings["Path not found."] = "Ruta no encontrada";
+App::$strings["mkdir failed."] = "mkdir ha fallado.";
+App::$strings["database storage failed."] = "el almacenamiento en la base de datos ha fallado.";
+App::$strings["Empty path"] = "Ruta vacía";
+App::$strings["%s shared an %s with you"] = "%s ha compartido un/una %s con usted";
+App::$strings["%s shared a %s with you"] = "%s ha compartido un/una %s con usted";
+App::$strings["image"] = "Imagen";
+App::$strings["file"] = "fichero";
+App::$strings["Delegation session ended."] = "Finalizó la sesión de la delegación.";
+App::$strings["Logged out."] = "Desconectado/a.";
+App::$strings["Email validation is incomplete. Please check your email."] = "La validación del correo electrónico está incompleta. Por favor, compruebe su correo electrónico.";
+App::$strings["Failed authentication"] = "Autenticación fallida.";
+App::$strings["Login failed."] = "El acceso ha fallado.";
+App::$strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s da la bienvenida a %2\$s";
+App::$strings[" and "] = " y ";
+App::$strings["public profile"] = "el perfil público";
+App::$strings["%1\$s changed %2\$s to &ldquo;%3\$s&rdquo;"] = "%1\$s ha cambiado %2\$s a &ldquo;%3\$s&rdquo;";
+App::$strings["Visit %1\$s's %2\$s"] = "Visitar %2\$s de %1\$s";
+App::$strings["%1\$s has an updated %2\$s, changing %3\$s."] = "%1\$s ha actualizado %2\$s, cambiando %3\$s.";
+App::$strings["Visible to your default audience"] = "Visible para su público predeterminado.";
+App::$strings["Profile-Based Privacy Groups"] = "Grupos de privacidad basados en perfiles";
+App::$strings["Private Forum"] = "Foro privado";
+App::$strings["Forums"] = "Foros";
+App::$strings["Only me"] = "Sólo yo";
+App::$strings["Share with"] = "Compartir con ";
+App::$strings["Custom selection"] = "Selección personalizada";
+App::$strings["Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and limit the scope of \"Allow\"."] = "Seleccione \"Permitir\" para permitir la visualización. \"No permitir\" le permite anular y limitar el alcance de \"Permitir\".";
+App::$strings["Allow"] = "Permitir";
+App::$strings["Don't allow"] = "No permitir";
+App::$strings["Permissions"] = "Permisos";
+App::$strings["Close"] = "Cerrar";
+App::$strings["Post permissions %s cannot be changed %s after a post is shared.</br />These permissions set who is allowed to view the post."] = "Los permisos de la entrada %s no se pueden cambiar %s una vez que se ha compartido.</br /> Estos permisos establecen quién está autorizado para ver el mensaje.";
+App::$strings["url: "] = "url: ";
+App::$strings["error_code: "] = "código_de_error: ";
+App::$strings["error_string: "] = "cadena_de_error: ";
+App::$strings["content-type: "] = "tipo de contenido: ";
+App::$strings["Friendica"] = "Friendica";
+App::$strings["OStatus"] = "OStatus";
+App::$strings["GNU-Social"] = "GNU Social";
+App::$strings["RSS/Atom"] = "RSS/Atom";
+App::$strings["ActivityPub"] = "ActivityPub";
+App::$strings["Email"] = "Correo electrónico";
+App::$strings["Diaspora"] = "Diaspora";
+App::$strings["Facebook"] = "Facebook";
+App::$strings["Zot"] = "Zot";
+App::$strings["LinkedIn"] = "LinkedIn";
+App::$strings["XMPP/IM"] = "XMPP/IM";
+App::$strings["MySpace"] = "MySpace";
+App::$strings["photo"] = "foto";
App::$strings["channel"] = "el canal";
+App::$strings["comment"] = "el comentario";
+App::$strings["%1\$s likes %2\$s's %3\$s"] = "A %1\$s le gusta %3\$s de %2\$s";
+App::$strings["%1\$s doesn't like %2\$s's %3\$s"] = "A %1\$s no le gusta %3\$s de %2\$s";
App::$strings["likes %1\$s's %2\$s"] = "gusta de %2\$s de %1\$s";
App::$strings["doesn't like %1\$s's %2\$s"] = "no gusta de %2\$s de %1\$s";
App::$strings["%1\$s is now connected with %2\$s"] = "%1\$s ahora está conectado/a con %2\$s";
App::$strings["%1\$s poked %2\$s"] = "%1\$s ha dado un toque a %2\$s";
+App::$strings["poked"] = "ha dado un toque a";
App::$strings["__ctx:mood__ %1\$s is %2\$s"] = "%1\$s está %2\$s";
App::$strings["This is an unsaved preview"] = "Esta es una previsualización sin guardar";
App::$strings["__ctx:title__ Likes"] = "Me gusta";
@@ -1321,6 +580,7 @@ App::$strings["__ctx:title__ Attending"] = "Participaré";
App::$strings["__ctx:title__ Not attending"] = "No participaré";
App::$strings["__ctx:title__ Might attend"] = "Quizá participe";
App::$strings["Select"] = "Seleccionar";
+App::$strings["Delete"] = "Eliminar";
App::$strings["Toggle Star Status"] = "Activar o desactivar el estado de entrada preferida";
App::$strings["Private Message"] = "Mensaje Privado";
App::$strings["Message signature validated"] = "Firma de mensaje validada";
@@ -1332,6 +592,7 @@ App::$strings["Filed under:"] = "Archivado bajo:";
App::$strings["from %s"] = "desde %s";
App::$strings["last edited: %s"] = "último cambio: %s";
App::$strings["Expires: %s"] = "Caduca: %s";
+App::$strings["View in context"] = "Mostrar en su contexto";
App::$strings["Please wait"] = "Espere por favor";
App::$strings["remove"] = "eliminar";
App::$strings["Loading..."] = "Cargando...";
@@ -1341,7 +602,6 @@ App::$strings["View Source"] = "Ver el código fuente de la entrada";
App::$strings["Follow Thread"] = "Seguir este hilo";
App::$strings["Unfollow Thread"] = "Dejar de seguir este hilo";
App::$strings["Recent Activity"] = "Actividad reciente";
-App::$strings["Connect"] = "Conectar";
App::$strings["Edit Connection"] = "Editar conexión";
App::$strings["Poke"] = "Toques y otras cosas";
App::$strings["%s likes this."] = "A %s le gusta esto.";
@@ -1364,6 +624,35 @@ App::$strings[", and %d other people"] = array(
);
App::$strings["%s like this."] = "A %s le gusta esto.";
App::$strings["%s don't like this."] = "A %s no le gusta esto.";
+App::$strings["Set your location"] = "Establecer su ubicación";
+App::$strings["Clear browser location"] = "Eliminar los datos de localización geográfica del navegador";
+App::$strings["Insert web link"] = "Insertar enlace web";
+App::$strings["Embed (existing) photo from your photo albums"] = "Insertar una foto de sus álbumes";
+App::$strings["Please enter a link URL:"] = "Por favor, introduzca la dirección del enlace:";
+App::$strings["Tag term:"] = "Término de la etiqueta:";
+App::$strings["Where are you right now?"] = "¿Donde está ahora?";
+App::$strings["Choose images to embed"] = "Elegir imágenes para incluir";
+App::$strings["Choose an album"] = "Elegir un álbum";
+App::$strings["Choose a different album..."] = "Elegir un álbum diferente...";
+App::$strings["Error getting album list"] = "Error al obtener la lista de álbumes";
+App::$strings["Error getting photo link"] = "Error al obtener el enlace de la foto";
+App::$strings["Error getting album"] = "Error al obtener el álbum";
+App::$strings["Comments enabled"] = "Comentarios habilitados";
+App::$strings["Comments disabled"] = "Comentarios deshabilitados";
+App::$strings["Preview"] = "Previsualizar";
+App::$strings["Share"] = "Compartir";
+App::$strings["Page link name"] = "Nombre del enlace de la página";
+App::$strings["Post as"] = "Publicar como";
+App::$strings["Bold"] = "Negrita";
+App::$strings["Italic"] = "Itálico ";
+App::$strings["Underline"] = "Subrayar";
+App::$strings["Quote"] = "Citar";
+App::$strings["Code"] = "Código";
+App::$strings["Attach/Upload file"] = "Adjuntar/cargar fichero";
+App::$strings["Embed an image from your albums"] = "Incluir una imagen de sus álbumes";
+App::$strings["Cancel"] = "Cancelar";
+App::$strings["OK"] = "OK";
+App::$strings["Toggle voting"] = "Cambiar votación";
App::$strings["Toggle poll"] = "Activar o desactivar encuestas";
App::$strings["Option"] = "Opción";
App::$strings["Add option"] = "Añadir una opción";
@@ -1371,12 +660,16 @@ App::$strings["Minutes"] = "Minutos ";
App::$strings["Hours"] = "Horas ";
App::$strings["Days"] = "Días ";
App::$strings["Allow multiple answers"] = "Permitir respuestas múltiples";
+App::$strings["Disable comments"] = "Dehabilitar los comentarios";
+App::$strings["Toggle comments"] = "Activar o desactivar los comentarios";
+App::$strings["Title (optional)"] = "Título (opcional)";
App::$strings["Summary (optional)"] = "Sumario (opcional)";
-App::$strings["__ctx:noun__ Like"] = array(
- 0 => "Me gusta",
- 1 => "Me gusta",
- 2 => "Me gusta",
-);
+App::$strings["Categories (optional, comma-separated list)"] = "Temas (opcional, lista separada por comas)";
+App::$strings["Permission settings"] = "Configuración de permisos";
+App::$strings["Other networks and post services"] = "Otras redes y servicios de publicación";
+App::$strings["Set expiration date"] = "Configurar fecha de caducidad";
+App::$strings["Set publish date"] = "Establecer la fecha de publicación";
+App::$strings["Encrypt text"] = "Cifrar texto";
App::$strings["__ctx:noun__ Dislike"] = array(
0 => "No me gusta",
1 => "No me gusta",
@@ -1412,6 +705,98 @@ App::$strings["__ctx:noun__ Abstain"] = array(
1 => "Se abstienen",
2 => "Se abstienen",
);
+App::$strings["%1\$s's bookmarks"] = "Marcadores de %1\$s";
+App::$strings["prev"] = "anterior";
+App::$strings["first"] = "primera";
+App::$strings["last"] = "última";
+App::$strings["next"] = "próxima";
+App::$strings["older"] = "más antiguas";
+App::$strings["newer"] = "más recientes";
+App::$strings["Accepts"] = "Se acepta";
+App::$strings["Comments"] = "Comentarios";
+App::$strings["Stream items"] = "Elementos del stream";
+App::$strings["Wall posts"] = "Entradas del Muro";
+App::$strings["Nothing"] = "Nada";
+App::$strings["View all %s connections"] = "Ver todas las %s conexiones";
+App::$strings["Network: %s"] = "Red %s";
+App::$strings["Save"] = "Guardar";
+App::$strings["poke"] = "un toque";
+App::$strings["ping"] = "un \"ping\"";
+App::$strings["pinged"] = "ha enviado un \"ping\" a";
+App::$strings["happy"] = "feliz ";
+App::$strings["sad"] = "triste ";
+App::$strings["mellow"] = "tranquilo/a";
+App::$strings["tired"] = "cansado/a ";
+App::$strings["perky"] = "vivaz";
+App::$strings["angry"] = "enfadado/a";
+App::$strings["stupefied"] = "asombrado/a";
+App::$strings["puzzled"] = "perplejo/a";
+App::$strings["interested"] = "interesado/a";
+App::$strings["bitter"] = "amargado/a";
+App::$strings["cheerful"] = "alegre";
+App::$strings["alive"] = "animado/a";
+App::$strings["annoyed"] = "molesto/a";
+App::$strings["anxious"] = "ansioso/a";
+App::$strings["cranky"] = "de mal humor";
+App::$strings["disturbed"] = "perturbado/a";
+App::$strings["frustrated"] = "frustrado/a";
+App::$strings["depressed"] = "deprimido/a";
+App::$strings["motivated"] = "motivado/a";
+App::$strings["relaxed"] = "relajado/a";
+App::$strings["surprised"] = "sorprendido/a";
+App::$strings["May"] = "mayo";
+App::$strings["Unknown Attachment"] = "Adjunto no reconocido";
+App::$strings["Size"] = "Tamaño";
+App::$strings["remove category"] = "eliminar el tema";
+App::$strings["remove from file"] = "eliminar del fichero";
+App::$strings["Download binary/encrypted content"] = "Descargar contenido binario o cifrado";
+App::$strings["__ctx:noun__ %d Vote"] = array(
+ 0 => "%dVoto",
+ 1 => "%dVotos",
+ 2 => "%dVotos",
+);
+App::$strings["__ctx:noun__ %d Vote in total"] = array(
+ 0 => "%dVoto en total",
+ 1 => "%dVotos en total",
+ 2 => "%dVotos en total",
+);
+App::$strings["Poll has ended"] = "La encuesta ha terminado";
+App::$strings["Poll ends in %s"] = "La encuesta termina en %s";
+App::$strings["Vote"] = "Votar";
+App::$strings["Link to Source"] = "Enlazar con la entrada en su ubicación original";
+App::$strings["Page layout"] = "Plantilla de la página";
+App::$strings["You can create your own with the layouts tool"] = "Puede crear su propia disposición gráfica con la herramienta de plantillas";
+App::$strings["BBcode"] = "BBcode";
+App::$strings["HTML"] = "HTML";
+App::$strings["Markdown"] = "Markdown";
+App::$strings["Text"] = "Texto";
+App::$strings["Comanche Layout"] = "Plantilla de Comanche";
+App::$strings["PHP"] = "PHP";
+App::$strings["Page content type"] = "Tipo de contenido de la página";
+App::$strings["activity"] = "la/su actividad";
+App::$strings["poll"] = "encuesta";
+App::$strings["a-z, 0-9, -, and _ only"] = "a-z, 0-9, -, and _ only";
+App::$strings["Design Tools"] = "Herramientas de diseño web";
+App::$strings["Blocks"] = "Bloques";
+App::$strings["Menus"] = "Menús";
+App::$strings["Layouts"] = "Plantillas";
+App::$strings["Pages"] = "Páginas";
+App::$strings["Import"] = "Importar";
+App::$strings["Import website..."] = "Importar un sitio web...";
+App::$strings["Select folder to import"] = "Seleccionar la carpeta que se va a importar";
+App::$strings["Import from a zipped folder:"] = "Importar desde una carpeta comprimida: ";
+App::$strings["Import from cloud files:"] = "Importar desde los ficheros en la nube: ";
+App::$strings["/cloud/channel/path/to/folder"] = "/cloud/canal/ruta/a la/carpeta";
+App::$strings["Enter path to website files"] = "Ruta a los ficheros del sitio web";
+App::$strings["Select folder"] = "Seleccionar la carpeta";
+App::$strings["Export website..."] = "Exportar un sitio web...";
+App::$strings["Export to a zip file"] = "Exportar a un fichero comprimido .zip";
+App::$strings["website.zip"] = "sitio_web.zip";
+App::$strings["Enter a name for the zip file."] = "Escriba un nombre para el fichero zip.";
+App::$strings["Export to cloud files"] = "Exportar a la nube de ficheros";
+App::$strings["/path/to/export/folder"] = "/ruta/para/exportar/carpeta";
+App::$strings["Enter a path to a cloud files destination."] = "Escriba una ruta de destino a la nube de ficheros.";
+App::$strings["Specify folder"] = "Especificar una carpeta";
App::$strings["Select a profile to assign to this contact"] = "Seleccione un perfil para asignar a este contacto";
App::$strings["Frequently"] = "Frecuentemente";
App::$strings["Hourly"] = "Cada hora";
@@ -1419,6 +804,8 @@ App::$strings["Twice daily"] = "Dos veces al día";
App::$strings["Daily"] = "Diariamente";
App::$strings["Weekly"] = "Semanalmente";
App::$strings["Monthly"] = "Mensualmente";
+App::$strings["Male"] = "Hombre";
+App::$strings["Female"] = "Mujer";
App::$strings["Currently Male"] = "Actualmente hombre";
App::$strings["Currently Female"] = "Actualmente mujer";
App::$strings["Mostly Male"] = "Generalmente hombre";
@@ -1474,108 +861,6 @@ App::$strings["Uncertain"] = "Indeterminado";
App::$strings["It's complicated"] = "Es complicado";
App::$strings["Don't care"] = "No me importa";
App::$strings["Ask me"] = "Pregúnteme";
-App::$strings["New window"] = "Nueva ventana";
-App::$strings["Open the selected location in a different window or browser tab"] = "Abrir la dirección seleccionada en una ventana o pestaña aparte";
-App::$strings["A deleted group with this name was revived. Existing item permissions <strong>may</strong> apply to this group and any future members. If this is not what you intended, please create another group with a different name."] = "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente.";
-App::$strings["Add new connections to this privacy group"] = "Añadir conexiones nuevas a este grupo de canales";
-App::$strings["edit"] = "editar";
-App::$strings["Privacy Groups"] = "Grupos de canales";
-App::$strings["Edit group"] = "Editar grupo";
-App::$strings["Manage privacy groups"] = "Gestionar grupos de privacidad";
-App::$strings["Channels not in any privacy group"] = "Sin canales en ningún grupo";
-App::$strings["add"] = "añadir";
-App::$strings["Trending"] = "Etiquetas populares";
-App::$strings["Tags"] = "Etiquetas";
-App::$strings["Keywords"] = "Palabras clave";
-App::$strings["have"] = "tener";
-App::$strings["has"] = "tiene";
-App::$strings["want"] = "quiero";
-App::$strings["wants"] = "quiere";
-App::$strings["like"] = "me gusta";
-App::$strings["likes"] = "gusta de";
-App::$strings["dislike"] = "no me gusta";
-App::$strings["dislikes"] = "no gusta de";
-App::$strings["(Unknown)"] = "(Desconocido)";
-App::$strings["Visible to anybody on the internet."] = "Visible para cualquiera en internet.";
-App::$strings["Visible to you only."] = "Visible sólo para usted.";
-App::$strings["Visible to anybody in this network."] = "Visible para cualquiera en esta red.";
-App::$strings["Visible to anybody authenticated."] = "Visible para cualquiera que esté autenticado.";
-App::$strings["Visible to anybody on %s."] = "Visible para cualquiera en %s.";
-App::$strings["Visible to all connections."] = "Visible para todas las conexiones.";
-App::$strings["Visible to approved connections."] = "Visible para las conexiones permitidas.";
-App::$strings["Visible to specific connections."] = "Visible para conexiones específicas.";
-App::$strings["&#x1f501; Repeated %1\$s's %2\$s"] = "&#x1f501; Repetidos %2\$sde %1\$s";
-App::$strings["Privacy group not found."] = "Grupo de canales no encontrado.";
-App::$strings["Privacy group is empty."] = "El grupo de canales está vacío.";
-App::$strings["Privacy group: %s"] = "Grupo de canales: %s";
-App::$strings["Connection: %s"] = "Conexión: %s";
-App::$strings["Connection not found."] = "Conexión no encontrada";
-App::$strings["female"] = "mujer";
-App::$strings["%1\$s updated her %2\$s"] = "%1\$s ha actualizado su %2\$s";
-App::$strings["male"] = "hombre";
-App::$strings["%1\$s updated his %2\$s"] = "%1\$s ha actualizado su %2\$s";
-App::$strings["%1\$s updated their %2\$s"] = "%1\$s ha actualizado su %2\$s";
-App::$strings["profile photo"] = "foto del perfil";
-App::$strings["[Edited %s]"] = "[se ha editado %s]";
-App::$strings["__ctx:edit_activity__ Post"] = "Publicar";
-App::$strings["__ctx:edit_activity__ Comment"] = "Comentar";
-App::$strings["The provided email address is not valid"] = "La dirección de correo electrónico proporcionada no es válida";
-App::$strings["The provided email domain is not among those allowed on this site"] = "El dominio de correo electrónico proporcionado no está entre los permitidos en este sitio";
-App::$strings["The provided email address is already registered at this site"] = "La dirección de correo electrónico proporcionada ya está registrada en este sitio";
-App::$strings["There is a pending registration for this address - click \"Register\" to continue verification"] = "Hay un registro pendiente para esta dirección - haga clic en \"Registro\" para continuar la verificación";
-App::$strings["An invitation is required."] = "Es obligatorio que le inviten.";
-App::$strings["Invitation could not be verified."] = "No se ha podido verificar su invitación.";
-App::$strings["Please enter the required information."] = "Por favor introduzca la información requerida.";
-App::$strings["Failed to store account information."] = "La información de la cuenta no se ha podido guardar.";
-App::$strings["Registration confirmation for %s"] = "Confirmación de registro para %s";
-App::$strings["Registration request at %s"] = "Solicitud de registro en %s";
-App::$strings["your registration password"] = "su contraseña de registro";
-App::$strings["Registration details for %s"] = "Detalles del registro de %s";
-App::$strings["Account approved."] = "Cuenta aprobada.";
-App::$strings["Registration revoked for %s"] = "Registro revocado para %s";
-App::$strings["Could not revoke registration for %s"] = "No se ha podido revocar el registro de %s";
-App::$strings["Click here to upgrade."] = "Pulse aquí para actualizar";
-App::$strings["This action exceeds the limits set by your subscription plan."] = "Esta acción supera los límites establecidos por su plan de suscripción ";
-App::$strings["This action is not available under your subscription plan."] = "Esta acción no está disponible en su plan de suscripción.";
-App::$strings["open"] = "abierto";
-App::$strings["closed"] = "cerrado";
-App::$strings["Registration is currently"] = "El registro está actualmente ";
-App::$strings["please come back"] = "por favor, vuelva";
-App::$strings["Profile Photos"] = "Fotos del perfil";
-App::$strings["Item was not found."] = "Elemento no encontrado.";
-App::$strings["Unknown error."] = "Error desconocido";
-App::$strings["No source file."] = "Ningún fichero de origen";
-App::$strings["Cannot locate file to replace"] = "No se puede localizar el fichero que va a ser sustituido.";
-App::$strings["Cannot locate file to revise/update"] = "No se puede localizar el fichero para revisar/actualizar";
-App::$strings["File exceeds size limit of %d"] = "El fichero supera el limite de tamaño de %d";
-App::$strings["You have reached your limit of %1$.0f Mbytes attachment storage."] = "Ha alcanzado su límite de %1$.0f Mbytes de almacenamiento de adjuntos.";
-App::$strings["File upload failed. Possible system limit or action terminated."] = "Error de carga, posiblemente por limite del sistema o porque la acción ha finalizado.";
-App::$strings["Stored file could not be verified. Upload failed."] = "El fichero almacenado no ha podido ser verificado. El envío ha fallado.";
-App::$strings["Path not available."] = "Ruta no disponible.";
-App::$strings["Empty pathname"] = "Ruta vacía";
-App::$strings["duplicate filename or path"] = "Nombre duplicado de ruta o fichero";
-App::$strings["Path not found."] = "Ruta no encontrada";
-App::$strings["mkdir failed."] = "mkdir ha fallado.";
-App::$strings["database storage failed."] = "el almacenamiento en la base de datos ha fallado.";
-App::$strings["Empty path"] = "Ruta vacía";
-App::$strings["%s shared a %s with you"] = "%sha compartido un/una %scon usted";
-App::$strings["%1\$s's bookmarks"] = "Marcadores de %1\$s";
-App::$strings["Image/photo"] = "Imagen/foto";
-App::$strings["Encrypted content"] = "Contenido cifrado";
-App::$strings["Install %1\$s element %2\$s"] = "Instalar el elemento de%1\$s%2\$s";
-App::$strings["This post contains an installable %s element, however you lack permissions to install it on this site."] = "Esta entrada contiene el elemento instalable %s, sin embargo le faltan permisos para instalarlo en este sitio.";
-App::$strings["webpage"] = "página web";
-App::$strings["layout"] = "plantilla";
-App::$strings["block"] = "bloque";
-App::$strings["menu"] = "menú";
-App::$strings["card"] = "ficha";
-App::$strings["article"] = "el artículo";
-App::$strings["%1\$s wrote the following %2\$s %3\$s"] = "%1\$s escribió %2\$s siguiente %3\$s";
-App::$strings["Click to open/close"] = "Pulsar para abrir/cerrar";
-App::$strings["spoiler"] = "spoiler";
-App::$strings["View article"] = "Ver el artículo";
-App::$strings["View summary"] = "Ver sumario";
-App::$strings["$1 wrote:"] = "$1 escribió:";
App::$strings["Unable to obtain identity information from database"] = "No ha sido posible obtener información sobre la identidad desde la base de datos";
App::$strings["Empty name"] = "Nombre vacío";
App::$strings["Name too long"] = "Nombre demasiado largo";
@@ -1587,6 +872,7 @@ App::$strings["Unable to retrieve created identity"] = "No ha sido posible recup
App::$strings["Default Profile"] = "Perfil principal";
App::$strings["Unable to retrieve modified identity"] = "No se puede recuperar la identidad modficada";
App::$strings["Requested channel is not available"] = "El canal solicitado no está disponible";
+App::$strings["Requested profile is not available."] = "El perfil solicitado no está disponible.";
App::$strings["Change profile photo"] = "Cambiar la foto del perfil";
App::$strings["Create New Profile"] = "Crear un nuevo perfil";
App::$strings["Profile Image"] = "Imagen del perfil";
@@ -1627,265 +913,993 @@ App::$strings["Profile"] = "Perfil";
App::$strings["Like this thing"] = "Me gusta esto";
App::$strings["Export"] = "Exportar";
App::$strings["cover photo"] = "Imagen de portada del perfil";
-App::$strings["Remote Authentication"] = "Acceso desde su servidor";
App::$strings["Enter your channel address (e.g. channel@example.com)"] = "Introduzca la dirección del canal (p.ej. canal@ejemplo.com)";
App::$strings["Authenticate"] = "Acceder";
App::$strings["Account '%s' deleted"] = "La cuenta '%s' ha sido eliminada";
-App::$strings["Visible to your default audience"] = "Visible para su público predeterminado.";
-App::$strings["Profile-Based Privacy Groups"] = "Grupos de privacidad basados en perfiles";
-App::$strings["Private Forum"] = "Foro privado";
-App::$strings["Forums"] = "Foros";
-App::$strings["Only me"] = "Sólo yo";
-App::$strings["Share with"] = "Compartir con ";
-App::$strings["Custom selection"] = "Selección personalizada";
-App::$strings["Select \"Allow\" to allow viewing. \"Don't allow\" lets you override and limit the scope of \"Allow\"."] = "Seleccione \"Permitir\" para permitir la visualización. \"No permitir\" le permite anular y limitar el alcance de \"Permitir\".";
-App::$strings["Allow"] = "Permitir";
-App::$strings["Don't allow"] = "No permitir";
-App::$strings["Post permissions %s cannot be changed %s after a post is shared.</br />These permissions set who is allowed to view the post."] = "Los permisos de la entrada %s no se pueden cambiar %s una vez que se ha compartido.</br /> Estos permisos establecen quién está autorizado para ver el mensaje.";
-App::$strings["View PDF"] = "Ver PDF";
-App::$strings[" by "] = "por";
-App::$strings[" on "] = "en";
-App::$strings["Embedded content"] = "Contenido incorporado";
-App::$strings["Embedding disabled"] = "Incrustación deshabilitada";
-App::$strings["OpenWebAuth: %1\$s welcomes %2\$s"] = "OpenWebAuth: %1\$s da la bienvenida a %2\$s";
-App::$strings["Commented Date"] = "Fecha de los comentarios";
-App::$strings["Order by last commented date"] = "Ordenar por la última fecha de los comentarios";
-App::$strings["Posted Date"] = "Fecha de publicación";
-App::$strings["Order by last posted date"] = "Ordenar por la ultima fecha de publicación";
-App::$strings["Date Unthreaded"] = "Sin enhebrar por fecha";
-App::$strings["Order unthreaded by date"] = "Ordenar sin enhebrar por fecha";
-App::$strings["Stream Order"] = "Orden del stream";
-App::$strings["Add new guest"] = "Añadir un nuevo invitado";
-App::$strings["Guest access"] = "Acceso para invitados";
-App::$strings["Archives"] = "Hemeroteca";
-App::$strings["View Photo"] = "Ver foto";
-App::$strings["Edit Album"] = "Editar álbum";
-App::$strings["Upload"] = "Subir";
-App::$strings["Tasks"] = "Tareas";
-App::$strings["Chat Members"] = "Miembros del chat";
-App::$strings["__ctx:noun__ new connection"] = array(
- 0 => "Nueva conexión",
- 1 => "Nuevas conexiones",
- 2 => "nuevas conexiones",
-);
-App::$strings["__ctx:noun__ notice"] = array(
- 0 => "aviso",
- 1 => "avisos",
- 2 => "avisos",
-);
+App::$strings["Unable to import a removed channel."] = "No se puede importar un canal eliminado.";
+App::$strings["Cannot create a duplicate channel identifier on this system. Import failed."] = "No se ha podido crear un canal con un identificador que ya existe en este sistema. La importación ha fallado.";
+App::$strings["Unable to create a unique channel address. Import failed."] = "No se ha podido crear una dirección de canal única. Ha fallado la importación.";
+App::$strings["Cloned channel not found. Import failed."] = "No se ha podido importar el canal porque el canal clonado no se ha encontrado.";
+App::$strings["QR code"] = "Código QR";
+App::$strings["QR Generator"] = "Generador QR";
+App::$strings["Enter some text"] = "Escribir algún texto";
+App::$strings["This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool."] = "Este sitio es rastreado mediante la herramienta analítica <a href='http://www.piwik.org'>Piwik</a>.";
+App::$strings["If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."] = "Si usted no quiere que sus visitas se registren de esta manera <a href='%s'>puede establecer una cookie para evitar que Piwik rastree otras visitas del sitio</a> (opt-out).";
+App::$strings["Piwik Base URL"] = "URL base de Piwik";
+App::$strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = "Ruta absoluta a la instalación de Piwik. (Sin protocolo (http/s), con barra diagonal)";
+App::$strings["Site ID"] = "ID del sitio";
+App::$strings["Show opt-out cookie link?"] = "Mostrar el enlace de la cookie opt-out?";
+App::$strings["Asynchronous tracking"] = "Rastreo asíncrono";
+App::$strings["Enable frontend JavaScript error tracking"] = "Habilitar la interfaz JavaScript de seguimiento de errores";
+App::$strings["This feature requires Piwik >= 2.2.0"] = "Esta funcionalidad requiere Piwik >= 2.2.0";
+App::$strings["Settings updated."] = "Ajustes actualizados.";
+App::$strings["Send email to all members"] = "Enviar un correo electrónico a todos los miembros";
+App::$strings["%s Administrator"] = "%s Administrador";
+App::$strings["No recipients found."] = "No se han encontrado destinatarios.";
+App::$strings["%1\$d of %2\$d messages sent."] = "%1\$d de %2\$d mensajes enviados.";
+App::$strings["Send email to all hub members."] = "Enviar un correo electrónico a todos los miembros del hub.";
+App::$strings["Message subject"] = "Asunto del mensaje";
+App::$strings["Sender Email address"] = "Dirección de correo electrónico del remitente";
+App::$strings["Test mode (only send to hub administrator)"] = "Modo de prueba (enviar sólo al administrador del hub)";
+App::$strings["Your account on %s will expire in a few days."] = "Su cuenta en %s caducará en unos pocos días.";
+App::$strings["Your test account is about to expire."] = "Su cuenta de prueba está a punto de expirar.";
+App::$strings["generic profile image"] = "imagen del perfil general";
+App::$strings["random geometric pattern"] = "patrón geométrico aleatorio";
+App::$strings["monster face"] = "cara de monstruo";
+App::$strings["computer generated face"] = "cara generada por ordenador";
+App::$strings["retro arcade style face"] = "cara de estilo retro arcade";
+App::$strings["Hub default profile photo"] = "Foto del perfil por defecto del hub";
+App::$strings["Information"] = "Información";
+App::$strings["Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar."] = "El addon Libravatar también está instalado. Por favor deshabilite el addon de Libravatar o este addon de Gravatar.<br> El addon de Libravatar volverá a Gravatar si no se encuentra nada en Libravatar.";
+App::$strings["Save Settings"] = "Guardar ajustes";
+App::$strings["Default avatar image"] = "Imagen del avatar por defecto";
+App::$strings["Select default avatar image if none was found at Gravatar. See README"] = "Selecciona la imagen de avatar predeterminada si no se encontró ninguna en Gravatar. Ver README";
+App::$strings["Rating of images"] = "Valoración de las imágenes";
+App::$strings["Select the appropriate avatar rating for your site. See README"] = "Seleccione la valoración adecuada del avatar para su sitio. Ver README";
+App::$strings["Gravatar settings updated."] = "Se han actualizado los ajustes de Gravatar.";
+App::$strings["pageheader Settings saved."] = "Se han guardado los ajustes del encabezado de página.";
+App::$strings["Message to display on every page on this server"] = "Mensaje para mostrar en todas las páginas de este servidor";
+App::$strings["Page Header"] = "Page Header";
+App::$strings["Use markdown for editing posts"] = "Usar markdown para editar las entradas";
+App::$strings["An account has been created for you."] = "Se ha creado una cuenta para usted.";
+App::$strings["Authentication successful but rejected: account creation is disabled."] = "Autenticación correcta pero rechazada: la creación de cuentas está deshabilitada.";
+App::$strings["Twitter settings updated."] = "Se han actualizado los ajustes de Twitter.";
+App::$strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "No se encontró ningún par de \"consumer key\" para Twitter. Póngase en contacto con el administrador del sitio.";
+App::$strings["At this Hubzilla instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to Twitter."] = "En esta instancia de Hubzilla, el complemento de Twitter estaba habilitado pero aún no ha conectado su cuenta a la cuenta de Twitter. Para ello, haga clic en el botón de abajo, para obtener un PIN de Twitter que debe copiar en el cuadro de entrada a continuación y enviar el formulario. Solo sus entradas <strong>públicas</ strong> se publicarán en Twitter.";
+App::$strings["Log in with Twitter"] = "Iniciar sesión en Twitter";
+App::$strings["Copy the PIN from Twitter here"] = "Copiar aquí el PIN de Twitter";
+App::$strings["Currently connected to: "] = "Actualmente está conectado a: ";
+App::$strings["<strong>Note:</strong> Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "<strong>Aviso:</strong> Debido a su configuración de privacidad (<em>Ocultar los detalles de su perfil a los visitantes desconocidos?</em>), el enlace potencialmente incluido en las entradas públicas retransmitidas a Twitter llevará al visitante a una página en blanco informándolo de que el acceso a su perfil ha sido restringido.";
+App::$strings["Twitter post length"] = "Longitud del mensaje en Twitter";
+App::$strings["Maximum tweet length"] = "Longitud máxima del tweet";
+App::$strings["Send public postings to Twitter by default"] = "Enviar mensajes públicos a Twitter de forma predeterminada";
+App::$strings["If enabled your public postings will be posted to the associated Twitter account by default"] = "Si está activado, sus entradas públicas se publicarán en la cuenta de Twitter asociada de forma predeterminada.";
+App::$strings["Clear OAuth configuration"] = "Limpiar la configuración de OAuth";
+App::$strings["Twitter Crosspost Connector"] = "Twitter Crosspost Connector";
+App::$strings["Post to Twitter"] = "Publicar en Twitter";
+App::$strings["Submit Settings"] = "Enviar los ajustes";
+App::$strings["Consumer Key"] = "Consumer Key";
+App::$strings["Consumer Secret"] = "Consumer Secret";
+App::$strings["Random Planet App"] = "App Random Planet";
+App::$strings["Set a random planet from the Star Wars Empire as your location when posting"] = "Establecer un planeta aleatorio del Imperio de la Guerra de las Galaxias como su ubicación cuando publique.";
+App::$strings["Page to load after login"] = "Página para cargar tras el inicio de sesión";
+App::$strings["Examples: &quot;apps&quot;, &quot;network?f=&gid=37&quot; (privacy collection), &quot;channel&quot; or &quot;notifications/system&quot; (leave blank for default network page (grid)."] = "Ejemplos: &quot;aplicaciones&quot;, &quot;mi red?f=&gid=37&quot; (grupo de canales), &quot;mi canal&quot; or &quot;notificaciones del sistema&quot; (dejar en blanco para la página de mi red por defecto (grid).";
+App::$strings["Startpage"] = "Startpage";
+App::$strings["WYSIWYG status editor"] = "Editor de estado de WYSIWYG";
+App::$strings["WYSIWYG Status App"] = "App WYSIWYG Status";
+App::$strings["WYSIWYG Status"] = "Estado de WYSIWYG";
+App::$strings["status"] = "el mensaje de estado ";
+App::$strings["ActivityPub Protocol Settings updated."] = "Se han actualizado los ajustes del protocolo ActivityPub.";
+App::$strings["The activitypub protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "El protocolo ActivityPub no soporta la independencia de ubicación. Las conexiones que realice dentro de esa red pueden no ser accesibles desde ubicaciones de canales alternativos.";
+App::$strings["Deliver to ActivityPub recipients in privacy groups"] = "Entregar a los destinatarios de ActivityPub en grupos de canales";
+App::$strings["May result in a large number of mentions and expose all the members of your privacy group"] = "Puede resultar en un gran número de menciones y exponer a todos los miembros de su grupo de canales";
+App::$strings["Send multi-media HTML articles"] = "Enviar artículos multimedia en HTML";
+App::$strings["Not supported by some microblog services such as Mastodon"] = "No soportado por algunos servicios de microblog como Mastodon";
+App::$strings["Activitypub Protocol"] = "Protocolo Activitypub";
+App::$strings["Fediwordle App"] = "App Fediwordle";
+App::$strings["A distributed word game inspired by wordle."] = "Un juego de palabras distribuido inspirado en el wordle.";
+App::$strings["To start a game, enter [wordle]your_word[/wordle] somewhere in a toplevel post."] = "Para empezar una partida, introduzca [wordle]mi_palabra[/wordle] en algún lugar de un post de nivel superior.";
+App::$strings["Your contacts can post their guess in the comments."] = "Sus contactos pueden publicar sus conjeturas en los comentarios.";
+App::$strings["Your channel will evaluate the guess and automatically post the response."] = "Su canal evaluará la conjetura y publicará automáticamente la respuesta.";
+App::$strings["Correct letters"] = "Letras correctas";
+App::$strings["Letters contained in the word but at the wrong spot"] = "Letras contenidas en la palabra pero en el lugar equivocado";
+App::$strings["Letters not contained in the word"] = "Letras no contenidas en la palabra";
+App::$strings["ERROR: word length is not correct!"] = "ERROR: ¡la longitud de la palabra no es correcta!";
+App::$strings["New registration"] = "Nuevo registro";
+App::$strings["%s : Message delivery failed."] = "%s : Falló el envío del mensaje.";
+App::$strings["Message sent to %s. New account registration: %s"] = "Mensaje enviado a %s. Registro de una nueva cuenta: %s";
+App::$strings["Libertree Crosspost Connector Settings saved."] = "Se han guardado los ajustes del conector de publicación cruzada con Libertree.";
+App::$strings["Libertree API token"] = "Token de la API de Libertree";
+App::$strings["Libertree site URL"] = "URL del servidor de Libertree";
+App::$strings["Post to Libertree by default"] = "Publicar en Libertree por defecto";
+App::$strings["Libertree Crosspost Connector"] = "Libertree Crosspost Connector";
+App::$strings["Post to Libertree"] = "Publicar en Libertree";
+App::$strings["nofed Settings saved."] = "Se han guardado los ajustes de nofed.";
+App::$strings["Federate posts by default"] = "Federar las publicaciones por defecto";
+App::$strings["No Federation"] = "No Federation";
+App::$strings["Federate"] = "Federar";
+App::$strings["Who likes me?"] = "¿Quién me ha puesto \"Me gusta\"?";
+App::$strings["Report Bug"] = "Informe de errores";
+App::$strings["Send your identity to all websites"] = "Enviar su identidad a todos los sitios web";
+App::$strings["Send ZID"] = "Enviar ZID";
+App::$strings["Workflow user."] = "Usuario de Workflow.";
+App::$strings["This channel"] = "Este canal";
+App::$strings["Primary"] = "Primario";
+App::$strings["Create New Workflow Item"] = "Crear un nuevo elemento de flujo de trabajo";
+App::$strings["Workflow"] = "Workflow";
+App::$strings["No Workflows Available"] = "No hay flujos de trabajo disponibles";
+App::$strings["Add item to which workflow"] = "A qué Workflow añadir un elemento";
+App::$strings["Create Workflow Item"] = "Crear elemento de Workflow";
+App::$strings["Link"] = "Enlazar";
+App::$strings["Web link."] = "Enlace Web.";
+App::$strings["Title"] = "Título";
+App::$strings["Brief description or title"] = "Breve descripción o título";
+App::$strings["Notes"] = "Notas";
+App::$strings["Notes and Info"] = "Notas e información";
+App::$strings["Body"] = "Cuerpo";
+App::$strings["Workflow Settings"] = "Ajustes de Workflow";
+App::$strings["Hide Aside App"] = "App de ocultamiento del panel lateral";
+App::$strings["Fade out aside areas after a while when using endless scroll"] = "Se desvanecen las áreas laterales cuando se usa un scroll sin fin";
+App::$strings["Jabber BOSH host"] = "BOSH de Jabber";
+App::$strings["Use central userbase"] = "Usar la base de usuarios central";
+App::$strings["If enabled, members will automatically login to an ejabberd server that has to be installed on this machine with synchronized credentials via the \"auth_ejabberd.php\" script."] = "Si está habilitado, los miembros se conectarán automáticamente a un servidor ejabberd que debe instalarse en esta máquina con credenciales sincronizadas a través del script \"auth ejabberd.php\".";
+App::$strings["XMPP settings updated."] = "Se han actualizado los ajustes de XMPP.";
+App::$strings["XMPP App"] = "App XMPP";
+App::$strings["Not Installed"] = "No instalado/a";
+App::$strings["Embedded XMPP (Jabber) client"] = "Cliente XMPP (Jabber) integrado";
+App::$strings["Individual credentials"] = "Credenciales individuales";
+App::$strings["Jabber BOSH server"] = "Servidor BOSH de Jabber";
+App::$strings["XMPP Settings"] = "Ajustes de XMPP";
+App::$strings["Recent Channel/Profile Viewers"] = "Visitantes recientes del canal o perfil";
+App::$strings["No entries."] = "No hay entradas.";
+App::$strings["Errors encountered deleting database table "] = "Errores encontrados al eliminar la tabla de la base de datos";
+App::$strings["Drop tables when uninstalling?"] = "¿Eliminar tablas al desinstalar?";
+App::$strings["If checked, the Rendezvous database tables will be deleted when the plugin is uninstalled."] = "Si se selecciona, las tablas de la base de datos Rendezvous se eliminarán cuando se desinstale el plugin.";
+App::$strings["Mapbox Access Token"] = "Token de acceso de Mapbox";
+App::$strings["If you enter a Mapbox access token, it will be used to retrieve map tiles from Mapbox instead of the default OpenStreetMap tile server."] = "Si introduce un token de acceso a Mapbox, se utilizará para recuperar los mapas de mosaicos de imágenes de Mapbox en lugar del servidor de mosaico de imágenes OpenStreetMap predeterminado.";
+App::$strings["Rendezvous"] = "Rendezvous";
+App::$strings["This identity has been deleted by another member due to inactivity. Please press the \"New identity\" button or refresh the page to register a new identity. You may use the same name."] = "Esta identidad ha sido eliminada por otro miembro debido a su inactividad. Pulse el botón \"Nueva identidad\" o actualice la página para registrar una nueva identidad. Puede usar el mismo nombre.";
+App::$strings["Welcome to Rendezvous!"] = "¡Bienvenido/a a Rendevous!";
+App::$strings["Enter your name to join this rendezvous. To begin sharing your location with the other members, tap the GPS control. When your location is discovered, a red dot will appear and others will be able to see you on the map."] = "Introduzca tu nombre para unirse a esta cita. Para comenzar a compartir su ubicación con los demás miembros, pulse en el control GPS. Cuando se descubra su ubicación, aparecerá un punto rojo y otros podrán verlo en el mapa.";
+App::$strings["Let's meet here"] = "Reunámonos aquí";
+App::$strings["Name"] = "Nombre";
+App::$strings["Description"] = "Descripción";
+App::$strings["New marker"] = "Nuevo marcador";
+App::$strings["Edit marker"] = "Editar un marcador";
+App::$strings["New identity"] = "Nueva identidad";
+App::$strings["Delete marker"] = "Eliminar un marcador";
+App::$strings["Delete member"] = "Eliminar un miembro";
+App::$strings["Edit proximity alert"] = "Editar alerta de proximidad";
+App::$strings["A proximity alert will be issued when this member is within a certain radius of you.<br><br>Enter a radius in meters (0 to disable):"] = "Se emitirá una alerta de proximidad cuando este miembro esté dentro de un radio determinado respecto a usted.<br><br> Ingrese el radio en metros (0 para deshabilitar):";
+App::$strings["distance"] = "distancia";
+App::$strings["Proximity alert distance (meters)"] = "Distancia (en metros) para la alerta de proximidad";
+App::$strings["A proximity alert will be issued when you are within a certain radius of the marker location.<br><br>Enter a radius in meters (0 to disable):"] = "Se emitirá una alerta de proximidad cuando usted esté dentro de un radio determinado respecto al marcador de localización.<br><br> Ingrese el radio en metros (0 para deshabilitar):";
+App::$strings["Marker proximity alert"] = "Marcador de alerta de proximidad";
+App::$strings["Reminder note"] = "Recordatorio";
+App::$strings["Enter a note to be displayed when you are within the specified proximity..."] = "Introduzca una nota que se mostrará cuando esté dentro de la proximidad especificada...";
+App::$strings["Add new rendezvous"] = "Añadir una nueva cita";
+App::$strings["Create a new rendezvous and share the access link with those you wish to invite to the group. Those who open the link become members of the rendezvous. They can view other member locations, add markers to the map, or share their own locations with the group."] = "Cree una nueva cita y comparta los enlaces de acceso con los que desea invitar al grupo. Aquellos que abran el enlace se convertirán en miembros de la cita. Pueden ver otras ubicaciones de miembros, añadir marcadores al mapa o compartir sus propias ubicaciones con el grupo.";
+App::$strings["You have no rendezvous. Press the button above to create a rendezvous!"] = "No tiene ninguna cita. ¡Presione el botón de arriba para crear una!";
+App::$strings["Errors encountered creating database tables."] = "Se han encontrado errores al crear las tablas de la base de datos.";
+App::$strings["Access Denied"] = "Acceso denegado";
+App::$strings["Enable Community Moderation"] = "Habilitar la moderación de la comunidad";
+App::$strings["Reputation automatically given to new members"] = "La reputación se otorga automáticamente a los nuevos miembros";
+App::$strings["Reputation will never fall below this value"] = "La reputación nunca caerá por debajo de este valor";
+App::$strings["Minimum reputation before posting is allowed"] = "Reputación mínima antes de que se permita el envío de entradas";
+App::$strings["Minimum reputation before commenting is allowed"] = "Mínima reputación antes de que se permitan los comentarios";
+App::$strings["Minimum reputation before a member is able to moderate other posts"] = "Reputación mínima antes de que un miembro sea capaz de moderar otros mensajes";
+App::$strings["Max ratio of moderator's reputation that can be added to/deducted from reputation of person being moderated"] = "Proporción máxima de la reputación del moderador que puede ser añadida/descontada de la reputación de la persona que está siendo moderada.";
+App::$strings["Reputation \"cost\" to post"] = "\"Coste\" de la reputación a contabilizar";
+App::$strings["Reputation \"cost\" to comment"] = "\"Coste\" de la reputación para comentar";
+App::$strings["Reputation automatically recovers at this rate per hour until it reaches minimum_to_post"] = "La reputación se recupera automáticamente a esta tasa por hora hasta que alcanza el mínimo_a_post";
+App::$strings["When minimum_to_moderate > reputation > minimum_to_post reputation recovers at this rate per hour"] = "Cuando el mínimo_a_moderar > reputación > mínimo_a_publicar la reputación se recupera a esta tasa por hora ";
+App::$strings["Community Moderation Settings"] = "Configuración de la moderación de la comunidad";
+App::$strings["Channel Reputation"] = "Reputación del canal";
+App::$strings["An Error has occurred."] = "Se ha producido un error.";
+App::$strings["Upvote"] = "Votar a favor";
+App::$strings["Downvote"] = "Votar en contra";
+App::$strings["Can moderate reputation on my channel."] = "Se puede moderar la reputación en mi canal.";
+App::$strings["Save Bookmarks"] = "Guardar en Marcadores";
+App::$strings["Project Servers and Resources"] = "Servidores y recursos del proyecto";
+App::$strings["Project Creator and Tech Lead"] = "Creador del proyecto y director técnico";
+App::$strings["And the hundreds of other people and organisations who helped make the Hubzilla possible."] = "Y los cientos de personas y organizaciones más que ayudaron a hacer posible Hubzilla.";
+App::$strings["The Redmatrix/Hubzilla projects are provided primarily by volunteers giving their time and expertise - and often paying out of pocket for services they share with others."] = "Los proyectos Redmatrix / Hubzilla están proporcionados principalmente por voluntarios que les prestan su tiempo y experiencia, pagando a menudo de su bolsillo por los servicios que comparten con otros.";
+App::$strings["There is no corporate funding and no ads, and we do not collect and sell your personal information. (We don't control your personal information - <strong>you do</strong>.)"] = "No hay financiación corporativa ni publicidad y no recogemos ni vendemos su información personal. (De hecho, no tenemos control sobre sus datos privados. <Strong>Usted lo tiene</strong>.)";
+App::$strings["Help support our ground-breaking work in decentralisation, web identity, and privacy."] = "Ayude apoyando nuestro trabajo pionero en la descentralización, la identidad web, y la privacidad.";
+App::$strings["Your donations keep servers and services running and also helps us to provide innovative new features and continued development."] = "Sus donaciones mantienen servidores y servicios en ejecución y también nos ayudan a proporcionar nuevas características innovadoras y a mantener el desarrollo de forma continuada.";
+App::$strings["Donate"] = "Donar";
+App::$strings["Choose a project, developer, or public hub to support with a one-time donation"] = "Elija un proyecto, desarrollador, o \"hub\" público para apoyar con una donación de una sola vez";
+App::$strings["Donate Now"] = "Donar ahora";
+App::$strings["<strong><em>Or</em></strong> become a project sponsor (Hubzilla Project only)"] = "<strong><em>O</em></strong> convertirse en un patrocinador del proyecto (sólo del proyecto Hubzilla)";
+App::$strings["Please indicate if you would like your first name or full name (or nothing) to appear in our sponsor listing"] = "Por favor, indique si desea que su nombre de pila o el nombre completo (o nada) aparezca en nuestra lista de patrocinadores";
+App::$strings["Sponsor"] = "Patrocinador";
+App::$strings["Special thanks to: "] = "Agradecimiento especial a: ";
+App::$strings["Photo Cache settings saved."] = "Se ha guardado la configuración de la caché de fotos.";
+App::$strings["Saves a copy of images from external sites locally to increase your anonymity in the web."] = "Guarde una copia de las imágenes de sitios externos localmente para aumentar su anonimato en la web.";
+App::$strings["Minimal photo size for caching"] = "Tamaño mínimo de la foto para el almacenamiento en caché";
+App::$strings["In pixels. From 1 up to 1024, 0 will be replaced with system default."] = "En píxeles. Desde 1 hasta 1024, 0 será reemplazado por el predeterminado del sistema.";
+App::$strings["Photo Cache"] = "Photo Cache";
+App::$strings["bitchslap"] = "una bofetada humillante";
+App::$strings["bitchslapped"] = "ha abofeteado de forma humillante a";
+App::$strings["shag"] = "un polvo";
+App::$strings["shagged"] = "ha dejado exhausto/a a";
+App::$strings["patent"] = "una patente";
+App::$strings["patented"] = "ha patentado a";
+App::$strings["hug"] = "un abrazo";
+App::$strings["hugged"] = "ha abrazado a";
+App::$strings["murder"] = "un asesinato";
+App::$strings["murdered"] = "ha asesinado a";
+App::$strings["worship"] = "una alabanza";
+App::$strings["worshipped"] = "ha elogiado a";
+App::$strings["kiss"] = "un beso";
+App::$strings["kissed"] = "ha besado a";
+App::$strings["tempt"] = "una tentación";
+App::$strings["tempted"] = "ha tentado a";
+App::$strings["raise eyebrows at"] = "un levantamiento de cejas";
+App::$strings["raised their eyebrows at"] = "ha levantado las cejas a";
+App::$strings["insult"] = "un insulto";
+App::$strings["insulted"] = "ha insultado a";
+App::$strings["praise"] = "un elogio";
+App::$strings["praised"] = "ha elogiado a";
+App::$strings["be dubious of"] = "una indecisión";
+App::$strings["was dubious of"] = "estaba dudoso de";
+App::$strings["eat"] = "una comida";
+App::$strings["ate"] = "ha comido";
+App::$strings["giggle and fawn at"] = "una sonrisa aduladora";
+App::$strings["giggled and fawned at"] = "ha sonreído y adulado a";
+App::$strings["doubt"] = "una duda";
+App::$strings["doubted"] = "ha dudado de";
+App::$strings["glare"] = "una mirada furiosa";
+App::$strings["glared at"] = "ha mirado con furia";
+App::$strings["fuck"] = "una mierda";
+App::$strings["fucked"] = "ha mandado a la mierda a";
+App::$strings["bonk"] = "un golpe";
+App::$strings["bonked"] = "ha golpeado a";
+App::$strings["declare undying love for"] = "una declaración de amor eterno";
+App::$strings["declared undying love for"] = "ha declarado amor eterno a";
+App::$strings["Post to Dreamwidth"] = "Publicar en Dreamwidth";
+App::$strings["Source"] = "Fuente";
+App::$strings["Dreamwidth Crosspost Connector Settings saved."] = "Se han guardado los ajustes del conector de publicación cruzada Dreamwidth.";
+App::$strings["Dreamwidth username"] = "Nombre de usuario en Dreamwidth";
+App::$strings["Dreamwidth password"] = "Contraseña en Dreamwidth";
+App::$strings["Post to Dreamwidth by default"] = "Publicar en Dreamwidth de forma predeterminada";
+App::$strings["Add link to original post"] = "Añadir enlace a la entrada original";
+App::$strings["Link description (default:"] = "Descripción del enlace (por defecto: ";
+App::$strings["Dreamwidth Crosspost Connector"] = "Dreamwidth Crosspost Connector";
+App::$strings["Some setting"] = "Algunos ajustes";
+App::$strings["A setting"] = "Un ajuste";
+App::$strings["Skeleton Settings"] = "Ajustes de Skeleton";
+App::$strings["Hubzilla File Storage Import"] = "Importar del depósito de ficheros de Hubzilla";
+App::$strings["This will import all your cloud files from another server."] = "Esto importará todos sus ficheros en la nube desde otro servidor.";
+App::$strings["Hubzilla Server base URL"] = "URL base del servidor Hubzilla";
+App::$strings["Since modified date yyyy-mm-dd"] = "Modificado desde la fecha yyyy-mm-dd";
+App::$strings["Until modified date yyyy-mm-dd"] = "Modificado hasta la fecha yyyy-mm-dd";
+App::$strings["View Larger"] = "Ver más grande";
+App::$strings["Tile Server URL"] = "URL del servidor de mosaicos de imágenes ";
+App::$strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">public tile servers</a>"] = "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/TMS\" target=\"_blank\">servidores públicos de mosaicos de imágenes</a>";
+App::$strings["Nominatim (reverse geocoding) Server URL"] = "URL del servidor nominatim (geocodificación inversa)";
+App::$strings["A list of <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" target=\"_blank\">Nominatim servers</a>"] = "Una lista de <a href=\"http://wiki.openstreetmap.org/wiki/Nominatim\" target=\"_blank\">servidores nominatim</a>";
+App::$strings["Default zoom"] = "Zoom predeterminado";
+App::$strings["The default zoom level. (1:world, 18:highest, also depends on tile server)"] = "El nivel de zoom predeterminado. (1: mundo, 18: el más alto, también depende del servidor del mosaico de imágenes)";
+App::$strings["Include marker on map"] = "Incluir un marcador en el mapa";
+App::$strings["Include a marker on the map."] = "Incluir un marcador en el mapa.";
+App::$strings["Post to Hubzilla"] = "Publicar en Hubzilla";
+App::$strings["Channel is required."] = "Se requiere un canal.";
+App::$strings["Invalid channel."] = "El canal no es válido.";
+App::$strings["Hubzilla Crosspost Connector Settings saved."] = "Se han guardado los ajustes de Hubzilla Crosspost Connector";
+App::$strings["Send public postings to Hubzilla channel by default"] = "Enviar entradas públicas al canal Hubzilla por defecto";
+App::$strings["Hubzilla API Path"] = "Ruta de la API de Hubzilla";
+App::$strings["https://{sitename}/api"] = "https://{sitename}/api";
+App::$strings["Hubzilla login name"] = "Nombre de inicio de sesión en Hubzilla";
+App::$strings["Hubzilla channel name"] = "Nombre del canal de Hubzilla";
+App::$strings["Hubzilla password"] = "Contraseña de Hubzilla";
+App::$strings["Hubzilla Crosspost Connector"] = "Hubzilla Crosspost Connector";
+App::$strings["Your channel has been upgraded to \$Projectname version"] = "Su canal ha sido actualizado a la versión \$Projectname";
+App::$strings["Please have a look at the"] = "Por favor, eche un vistazo a la ";
+App::$strings["git history"] = "historial del git";
+App::$strings["change log"] = "lista de cambios";
+App::$strings["for further info."] = "para más información.";
+App::$strings["Upgrade Info"] = "Información de actualización";
+App::$strings["Do not show this again"] = "No mostrar esto de nuevo";
+App::$strings["Network error"] = "Error de red";
+App::$strings["API error"] = "Error de API";
+App::$strings["Unknown issue"] = "Problema desconocido";
+App::$strings["Unable to retrieve email address from remote identity provider"] = "No se puede recuperar la dirección de correo electrónico del proveedor de identidad remota";
+App::$strings["Unable to login using email address "] = "Imposible iniciar sesión usando la dirección de correo electrónico";
+App::$strings["Social Authentication using your social media account"] = "Autenticación usando su cuenta de medios sociales";
+App::$strings["This app enables one or more social provider sign-in buttons on the login page."] = "Esta aplicación habilita uno o más botones de inicio de sesión de proveedores sociales en la página de inicio de sesión.";
+App::$strings["Add an identity provider"] = "Añadir un proveedor de identidad";
+App::$strings["Enable "] = "Habilitar";
+App::$strings["Key"] = "Clave";
+App::$strings["Word"] = "Palabra";
+App::$strings["Secret"] = "Secret";
+App::$strings["Add a custom provider"] = "Añadir un proveedor personalizado";
+App::$strings["Remove an identity provider"] = "Eliminar un proveedor de identidad";
+App::$strings["Social authentication"] = "Autenticación social";
+App::$strings["Error while saving provider settings"] = "Se ha producido un error mientras se guardaban los ajustes";
+App::$strings["Custom provider already exists"] = "Ya existe un proveedor personalizado";
+App::$strings["Social authentication settings saved."] = "Se han guardado los ajustes de la autenticación social.";
+App::$strings["Hubzilla Directory Stats"] = "Estadísticas de directorio de Hubzilla";
+App::$strings["Total Hubs"] = "Número total de servidores";
+App::$strings["Hubzilla Hubs"] = "Servidores (hubs) de Hubzilla";
+App::$strings["Friendica Hubs"] = "Servidores (hubs) de Friendica";
+App::$strings["Diaspora Pods"] = "Servidores (pods) de Diaspora";
+App::$strings["Hubzilla Channels"] = "Canales de Hubzilla";
+App::$strings["Friendica Channels"] = "Canales de Friendica";
+App::$strings["Diaspora Channels"] = "Canales de Diaspora";
+App::$strings["Aged 35 and above"] = "De 35 años de edad en adelante";
+App::$strings["Aged 34 and under"] = "De 34 o menos años de edad";
+App::$strings["Average Age"] = "Promedio de edad";
+App::$strings["Known Chatrooms"] = "Salas de chat conocidas";
+App::$strings["Known Tags"] = "Etiquetas conocidas";
+App::$strings["Please note Diaspora and Friendica statistics are merely those **this directory** is aware of, and not all those known in the network. This also applies to chatrooms,"] = "Tenga en cuenta que las estadísticas de Diaspora y Friendica se refieren únicamente a aquellas de las que **este directorio** es consciente, y no a todos los conocidos en la red. Esto también es aplicable a las salas de chat,";
+App::$strings["Profile Unavailable."] = "Perfil no disponible";
+App::$strings["Not allowed."] = "No permitido/a.";
+App::$strings["Set/edit permissions"] = "Establecer/editar los permisos";
+App::$strings["TOTP Two-Step Verification"] = "Verificación en dos pasos de TOTP";
+App::$strings["Enter the 2-step verification generated by your authenticator app:"] = "Introduzca la verificación en 2 pasos generada por su app de autenticación: ";
+App::$strings["Success!"] = "¡Éxito!";
+App::$strings["Invalid code, please try again."] = "Código inválido, por favor inténtelo de nuevo.";
+App::$strings["Too many invalid codes..."] = "Demasiados códigos no válidos...";
+App::$strings["Verify"] = "Verficar";
+App::$strings["You haven't set a TOTP secret yet.\nPlease click the button below to generate one and register this site\nwith your preferred authenticator app."] = "Aún no ha establecido un TOTP secret.\nPor favor, haga clic en el botón de abajo para generar uno y registrar este sitio\ncon su aplicación de autenticación preferida.";
+App::$strings["Your TOTP secret is"] = "Su TOTP secret es ";
+App::$strings["Be sure to save it somewhere in case you lose or replace your mobile device.\nUse your mobile device to scan the QR code below to register this site\nwith your preferred authenticator app."] = "Asegúrese de guardarlo en algún lugar en caso de que pierda o reemplace su dispositivo móvil.\nUtilice su dispositivo móvil para escanear el código QR a continuación para registrar este sitio\ncon su aplicación de autenticación preferida.";
+App::$strings["Test"] = "Test";
+App::$strings["Generate New Secret"] = "Generar un nuevo Secret";
+App::$strings["Go"] = "Ir";
+App::$strings["Enter your password"] = "Introduzca su contraseña";
+App::$strings["enter TOTP code from your device"] = "introduzca el código TOTP desde su dispositivo";
+App::$strings["Pass!"] = "¡Pase!";
+App::$strings["Fail"] = "Fallo";
+App::$strings["Incorrect password, try again."] = "Contraseña incorrecta, inténtelo de nuevo.";
+App::$strings["Record your new TOTP secret and rescan the QR code above."] = "Registre su nuevo TOTP secret y vuelva a escanear el código QR de arriba";
+App::$strings["TOTP Settings"] = "Ajustes de TOTP";
+App::$strings["__ctx:opensearch__ Search %1\$s (%2\$s)"] = "Buscar %1\$s (%2\$s)";
+App::$strings["__ctx:opensearch__ \$Projectname"] = "\$Projectname";
+App::$strings["\$Projectname"] = "\$Projectname";
+App::$strings["Search \$Projectname"] = "Buscar \$Projectname";
+App::$strings["Popular Channels"] = "Canales populares";
+App::$strings["Channels to auto connect"] = "Canales para conexión automática";
+App::$strings["Comma separated list"] = "Lista separada por comas";
+App::$strings["IRC Settings"] = "Ajustes de IRC";
+App::$strings["IRC settings saved."] = "Se han guardado los ajustes de IRC.";
+App::$strings["IRC Chatroom"] = "Sala de chat IRC";
+App::$strings["Three Dimensional Tic-Tac-Toe"] = "Juego en 3D Tic-Tac-Toe";
+App::$strings["3D Tic-Tac-Toe"] = "3D Tic-Tac-Toe";
+App::$strings["New game"] = "Nuevo juego";
+App::$strings["New game with handicap"] = "Nuevo juego con hándicap";
+App::$strings["Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. "] = "El juego en 3D tic-tac-toe es como el juego tradicional, excepto que se juega en varios niveles simultáneamente.";
+App::$strings["In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels."] = "En este caso hay tres niveles. Usted gana al conseguir tres en una fila en cualquier nivel, así como arriba, abajo, y en diagonal a través de los diferentes niveles.";
+App::$strings["The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage."] = "El juego con hándicap deshabilita la posición central en el nivel medio porque el jugador que reclama este cuadrado a menudo tiene una ventaja injusta.";
+App::$strings["You go first..."] = "Usted va primero...";
+App::$strings["I'm going first this time..."] = "Yo voy primero esta vez...";
+App::$strings["You won!"] = "¡Usted ha ganado!";
+App::$strings["\"Cat\" game!"] = "¡El juego del \"gato\"!";
+App::$strings["I won!"] = "¡He ganado yo!";
+App::$strings["Wordpress Settings saved."] = "Se han guardado los ajustes de WordPress.";
+App::$strings["WordPress username"] = "Nombre de usuario de WordPress";
+App::$strings["WordPress password"] = "Contraseña de WordPress";
+App::$strings["WordPress API URL"] = "URL de la API de WordPress";
+App::$strings["Typically https://your-blog.tld/xmlrpc.php"] = "Habitualmente https://your-blog.tld/xmlrpc.php";
+App::$strings["WordPress blogid"] = "Blog de WordPress";
+App::$strings["For multi-user sites such as wordpress.com, otherwise leave blank"] = "Para sitios multiusuario como wordpress.com, de lo contrario, dejar en blanco";
+App::$strings["Post to WordPress by default"] = "Publicar en WordPress por defecto";
+App::$strings["Forward comments (requires hubzilla_wp plugin)"] = "Reenviar comentarios (requerido por el plugin hubzilla_wp)";
+App::$strings["Wordpress Post"] = "Publicar en Wordpress";
+App::$strings["Post to WordPress"] = "Publicar en WordPress";
+App::$strings["Item not found"] = "Elemento no encontrado";
+App::$strings["Channel not found."] = "Canal no encontrado.";
+App::$strings["Edit Article"] = "Editar el artículo";
+App::$strings["Add Article"] = "Añadir un artículo";
+App::$strings["Articles"] = "Artículos";
+App::$strings["View Articles"] = "Ver los artículos";
+App::$strings["You are now authenticated to pumpio."] = "Ahora está autenticado en pump.io.";
+App::$strings["return to the featured settings page"] = "Volver a la página de configuración destacada";
+App::$strings["Post to Pump.io"] = "Publicar en Pump.io";
+App::$strings["Pump.io Settings saved."] = "Se han guardado los ajustes de Pump.io";
+App::$strings["Pump.io servername"] = "Nombre del servidor de Pump.io";
+App::$strings["Without \"http://\" or \"https://\""] = "Sin \"http://\" or \"https://\"";
+App::$strings["Pump.io username"] = "Nombre de usuario en Pump.io";
+App::$strings["Without the servername"] = "Sin el nombre del servidor";
+App::$strings["You are not authenticated to pumpio"] = "No está autenticado en pump.io";
+App::$strings["(Re-)Authenticate your pump.io connection"] = "(Re-)Autenticar su conexión en pump.io";
+App::$strings["Post to pump.io by default"] = "Publicar por defecto en pump.io";
+App::$strings["Should posts be public"] = "¿Las entradas deben ser públicas?";
+App::$strings["Mirror all public posts"] = "Reflejar todos los mensajes públicos";
+App::$strings["Pump.io Crosspost Connector"] = "Pump.io Crosspost Connector";
+App::$strings["Post to Insane Journal"] = "Publicar en Insane Journal";
+App::$strings["Insane Journal Crosspost Connector Settings saved."] = "Se han guardado los ajustes del Conector de publicación cruzada de InsaneJournal.";
+App::$strings["Insane Journal Crosspost Connector App"] = "App Ajustes del Conector de publicación cruzada de InsaneJournal";
+App::$strings["Relay public postings to Insane Journal"] = "Retransmisión de entradas públicas a Insane Journal";
+App::$strings["InsaneJournal username"] = "Nombre de usuario en InsaneJournal";
+App::$strings["InsaneJournal password"] = "Contraseña en InsaneJournal";
+App::$strings["Post to InsaneJournal by default"] = "Publicar por defecto en InsaneJournal";
+App::$strings["Insane Journal Crosspost Connector"] = "Conector de publicación cruzada de InsaneJournal";
+App::$strings["Send test email"] = "Enviar un correo electrónico de prueba";
+App::$strings["Mail sent."] = "El correo electrónico ha sido enviado.";
+App::$strings["Sending of mail failed."] = "No se pudo enviar el correo.";
+App::$strings["Mail Test"] = "Prueba de correo";
+App::$strings["Logfile archive directory"] = "Directorio de los ficheros de informe";
+App::$strings["Directory to store rotated logs"] = "Directorio para almacenar los informes rotados";
+App::$strings["Logfile size in bytes before rotating"] = "Tamaño del fichero de informe en bytes antes de rotarlo";
+App::$strings["Number of logfiles to retain"] = "Número de ficheros de informe que se deben retener";
+App::$strings["Block Completely"] = "Bloquear completamente";
+App::$strings["superblock settings updated"] = "se han actualizado los ajustes de superblock";
+App::$strings["Currently blocked"] = "Actualmente bloqueado";
+App::$strings["No channels currently blocked"] = "No hay canales bloqueados actualmente";
+App::$strings["Remove"] = "Eliminar";
+App::$strings["text to include in all outgoing posts from this site"] = "texto a incluir en todos los mensajes salientes de este sitio";
+App::$strings["Possible adult content"] = "Posible contenido para adultos";
+App::$strings["%s - view"] = "ver - %s";
+App::$strings["NSFW Settings saved."] = "Se han guardado los ajustes de NSFW.";
+App::$strings["This app looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter."] = "Esta aplicación busca en los mensajes las palabras o texto que especifique a continuación, y oculta cualquier contenido que contenga esas palabras clave, para que no se muestren en momentos inapropiados, como insinuaciones sexuales que puedan ser inapropiadas en un entorno laboral. Es cortés y recomendable etiquetar cualquier contenido que contenga desnudos con #NSFW. Este filtro también puede coincidir con cualquier otra palabra o texto que especifique y, por lo tanto, puede utilizarse como filtro de contenido de propósito general.";
+App::$strings["Comma separated list of keywords to hide"] = "Lista separada por comas de palabras clave para ocultar";
+App::$strings["Word, /regular-expression/, lang=xx, lang!=xx"] = "Palabra, /expresión regular/, lang=xx, lang!=xx";
+App::$strings["NSFW"] = "NSFW";
+App::$strings["Cards"] = "Fichas";
+App::$strings["View Cards"] = "Ver las fichas";
+App::$strings["Add Card"] = "Añadir una ficha";
+App::$strings["Edit Card"] = "Editar la ficha";
+App::$strings["Gallery"] = "Galería";
+App::$strings["Photo Gallery"] = "Galería de fotos";
+App::$strings["Invalid channel"] = "Canal no válido";
+App::$strings["Error retrieving wiki"] = "Error al recuperar el wiki";
+App::$strings["Error creating zip file export folder"] = "Error al crear el fichero comprimido zip de la carpeta a exportar";
+App::$strings["Error downloading wiki: "] = "Error al descargar el wiki: ";
+App::$strings["Download"] = "Descargar";
+App::$strings["View"] = "Ver";
+App::$strings["Create New"] = "Crear";
+App::$strings["Wiki name"] = "Nombre del wiki";
+App::$strings["Content type"] = "Tipo de contenido";
+App::$strings["Type"] = "Tipo";
+App::$strings["Any&nbsp;type"] = "Cualquier&nbsp;tipo";
+App::$strings["Lock content type"] = "Tipo de contenido bloqueado";
+App::$strings["Create a status post for this wiki"] = "Crear un mensaje de estado para este wiki";
+App::$strings["Edit Wiki Name"] = "Editar el nombre del wiki";
+App::$strings["Wiki not found"] = "Wiki no encontrado";
+App::$strings["Rename page"] = "Renombrar la página";
+App::$strings["Error retrieving page content"] = "Error al recuperar el contenido de la página";
+App::$strings["New page"] = "Nueva página";
+App::$strings["Revision Comparison"] = "Comparación de revisiones";
+App::$strings["Revert"] = "Revertir";
+App::$strings["Short description of your changes (optional)"] = "Breve descripción de sus cambios (opcional)";
+App::$strings["New page name"] = "Nombre de la nueva página";
+App::$strings["Embed image from photo albums"] = "Incluir una imagen de los álbumes de fotos";
+App::$strings["Choose a different album"] = "Elegir un álbum diferente...";
+App::$strings["History"] = "Historial";
+App::$strings["Error creating wiki. Invalid name."] = "Error al crear el wiki: el nombre no es válido.";
+App::$strings["A wiki with this name already exists."] = "Ya hay un wiki con este nombre.";
+App::$strings["Wiki created, but error creating Home page."] = "Se ha creado el wiki, pero se ha producido un error al crear la página de inicio.";
+App::$strings["Error creating wiki"] = "Error al crear el wiki";
+App::$strings["Error updating wiki. Invalid name."] = "Error al actualizar el wiki. Nombre no válido.";
+App::$strings["Error updating wiki"] = "Error al actualizar el wiki";
+App::$strings["Wiki delete permission denied."] = "Se ha denegado el permiso para eliminar el wiki.";
+App::$strings["Error deleting wiki"] = "Se ha producido un error al eliminar el wiki";
+App::$strings["New page created"] = "Se ha creado la nueva página";
+App::$strings["Cannot delete Home"] = "No se puede eliminar la página principal";
+App::$strings["Current Revision"] = "Revisión actual";
+App::$strings["Selected Revision"] = "Revisión seleccionada";
+App::$strings["You must be authenticated."] = "Debe estar autenticado.";
+App::$strings["Add new page"] = "Añadir una nueva página";
+App::$strings["Options"] = "Opciones";
+App::$strings["(No Title)"] = "(Sin título)";
+App::$strings["Wiki page create failed."] = "Se ha producido un error en la creación de la página wiki.";
+App::$strings["Wiki not found."] = "No se ha encontrado el wiki.";
+App::$strings["Destination name already exists"] = "El nombre de destino ya existe";
+App::$strings["Page not found"] = "No se ha encontrado la página";
+App::$strings["Error reading page content"] = "Se ha producido un error al leer el contenido de la página";
+App::$strings["Error reading wiki"] = "Se ha producido un error al leer el wiki";
+App::$strings["Page update failed."] = "Se ha producido un error al actualizar la página.";
+App::$strings["Nothing deleted"] = "No se ha eliminado nada";
+App::$strings["Compare: object not found."] = "No se ha encontrado un objeto para comparar.";
+App::$strings["Page updated"] = "Se ha actualizado la página";
+App::$strings["Wiki resource_id required for git commit"] = "Se necesita Wiki resource_id para el git commit";
+App::$strings["__ctx:wiki_history__ Message"] = "Mensaje";
+App::$strings["Date"] = "Fecha";
+App::$strings["Compare"] = "Comparar";
+App::$strings["Wiki updated successfully"] = "El wiki se ha actualizado con éxito";
+App::$strings["Wiki files deleted successfully"] = "Se han borrado con éxito los ficheros del wiki";
+App::$strings["Wiki Pages"] = "Páginas del wiki";
+App::$strings["Page name"] = "Nombre de la página";
+App::$strings["Fuzzloc Settings updated."] = "Los ajustes de Fuzzloc se han actualizado.";
+App::$strings["Minimum offset in meters"] = "Offset mínimo en metros";
+App::$strings["Maximum offset in meters"] = "Offset máximo en metros";
+App::$strings["Fuzzy Location"] = "Fuzzy Location";
+App::$strings["Please install the statistics addon to be able to configure a diaspora relay"] = "Por favor, instale el complemento de estadísticas para poder configurar el reenvío de diaspora";
+App::$strings["Diaspora Relay Handle"] = "Gestionar el reenvío de Diaspora";
+App::$strings["Address of a diaspora relay. Example: relay@diasporarelay.tld"] = "La dirección de una transmisión de diaspora. Ejemplo: relay@diasporarelay.tld";
+App::$strings["Diaspora relay could not be imported"] = "El reenvío de Diaspora no ha podido ser importado";
+App::$strings["No subject"] = "Sin tema";
+App::$strings["\$projectname"] = "\$projectname";
+App::$strings["No username found in import file."] = "No se ha encontrado el nombre de usuario en el fichero de importación.";
+App::$strings["Import completed."] = "Importación completada.";
+App::$strings["Diaspora Protocol Settings updated."] = "Los ajustes del protocolo de Diaspora se han actualizado.";
+App::$strings["The diaspora protocol does not support location independence. Connections you make within that network may be unreachable from alternate channel locations."] = "El protocolo de Diaspora no admite la independencia de la ubicación. Las conexiones que realice dentro de esa red pueden ser inaccesibles desde ubicaciones de canales alternativos.";
+App::$strings["Allow any Diaspora member to comment or like your public posts"] = "Permitir que cualquier miembro de Diaspora comente o ponga un like en sus entradas públicas";
+App::$strings["If this setting is disabled only your contacts will be able to comment or like your public posts"] = "Si esta configuración está desactivada, sólo sus contactos podrán comentar o dar a \"me gusta\" en sus publicaciones públicas";
+App::$strings["Prevent your hashtags from being redirected to other sites"] = "Impedir que sus \"hashtags\" sean redirigidos a otros sitios ";
+App::$strings["Sign and forward posts and comments with no existing Diaspora signature"] = "Firmar y enviar entradas y comentarios sin firma de Diaspora";
+App::$strings["Followed hashtags (comma separated, do not include the #)"] = "\"Hashtags\" seguidos (separados por comas, sin incluir #)";
+App::$strings["Diaspora Protocol"] = "Protocolo Diaspora";
+App::$strings["%1\$s dislikes %2\$s's %3\$s"] = "a %1\$s no le gusta el %3\$s de %2\$s";
+App::$strings["%1\$s is attending %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s participa";
+App::$strings["%1\$s is not attending %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s no participa";
+App::$strings["%1\$s may attend %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s quizá participe";
+App::$strings["OpenID protocol error. No ID returned."] = "Error de protocolo OpenID. No se recuperó ninguna ID.";
+App::$strings["Welcome %s. Remote authentication successful."] = "Bienvenido %s. La identificación desde su servidor se ha llevado a cabo correctamente.";
+App::$strings["First Name"] = "Nombre";
+App::$strings["Last Name"] = "Apellido";
+App::$strings["Full Name"] = "Nombre completo";
+App::$strings["Profile Photo"] = "Foto del perfil";
+App::$strings["Profile Photo 16px"] = "Foto del perfil 16px";
+App::$strings["Profile Photo 32px"] = "Foto del perfil 32px";
+App::$strings["Profile Photo 48px"] = "Foto del perfil 48px";
+App::$strings["Profile Photo 64px"] = "Foto del perfil 64px";
+App::$strings["Profile Photo 80px"] = "Foto del perfil 80px";
+App::$strings["Profile Photo 128px"] = "Foto del perfil 128px";
+App::$strings["Homepage URL"] = "Dirección de la página personal";
+App::$strings["Language"] = "Idioma";
+App::$strings["Birth Year"] = "Año de nacimiento";
+App::$strings["Birth Month"] = "Mes de nacimiento";
+App::$strings["Birth Day"] = "Día de nacimiento";
+App::$strings["Birthdate"] = "Fecha de nacimiento";
+App::$strings["Gender"] = "Género";
+App::$strings["We encountered a problem while logging in with the OpenID you provided. Please check the correct spelling of the ID."] = "Encontramos un problema al iniciar sesión con el OpenID que proporcionó. Compruebe si el ID está correctamente escrito.";
+App::$strings["The error message was:"] = "El mensaje de error ha sido: ";
+App::$strings["System defaults:"] = "Valores predeterminados del sistema: ";
+App::$strings["Preferred Clipart IDs"] = "IDs de las imágenes clipart preferidas";
+App::$strings["List of preferred clipart ids. These will be shown first."] = "Lista de ids de imágenes de clipart preferidas. Se verán en primer lugar.";
+App::$strings["Default Search Term"] = "Términos de búsqueda predeterminados";
+App::$strings["The default search term. These will be shown second."] = "Los términos de búsqueda predeterminados. Estos se mostrarán en segundo lugar.";
+App::$strings["Return After"] = "Regresar después";
+App::$strings["Page to load after image selection."] = "Página para cargar después de la selección de imágenes.";
+App::$strings["Profile List"] = "Lista de perfiles";
+App::$strings["Order of Preferred"] = "Orden de preferencia";
+App::$strings["Sort order of preferred clipart ids."] = "Orden de clasificación de los identificadores de imágenes clipart preferidas.";
+App::$strings["Newest first"] = "Las más nuevas en primer lugar";
+App::$strings["As entered"] = "Tal como se ingresaron";
+App::$strings["Order of other"] = "Orden de los demás";
+App::$strings["Sort order of other clipart ids."] = "Orden de clasificación de otros ids de imágenes clipart.";
+App::$strings["Most downloaded first"] = "Las más descargadas en primer lugar";
+App::$strings["Most liked first"] = "Las más apreciadas en primer lugar";
+App::$strings["Preferred IDs Message"] = "Mensaje de IDs preferido";
+App::$strings["Message to display above preferred results."] = "Mensaje para mostrar sobre los resultados preferidos.";
+App::$strings["Uploaded by: "] = "Subida por: ";
+App::$strings["Drawn by: "] = "Creada por: ";
+App::$strings["Use this image"] = "Usar esta imagen";
+App::$strings["Or select from a free OpenClipart.org image:"] = "O seleccionar una imagen gratuita de OpenClipart.org: ";
+App::$strings["Search Term"] = "Término de búsqueda";
+App::$strings["Unknown error. Please try again later."] = "Error desconocido. Por favor, inténtelo otra vez.";
+App::$strings["Shift-reload the page or clear browser cache if the new photo does not display immediately."] = "Recargue la página o limpie el caché del navegador si la nueva foto no se muestra inmediatamente.";
+App::$strings["Profile photo updated successfully."] = "Se ha actualizado con éxito la foto de perfil.";
+App::$strings["Your Webbie:"] = "Su webbie: ";
+App::$strings["Fontsize (px):"] = "Tamaño de fuente (px): ";
+App::$strings["Link:"] = "Enlace: ";
+App::$strings["Like us on Hubzilla"] = "Múestrenos su agrado en Hubzilla";
+App::$strings["Embed:"] = "Incorporado: ";
+App::$strings["Photos imported"] = "Se han importado las fotos";
+App::$strings["Redmatrix Photo Album Import"] = "Importar un álbum de fotos de Redmatrix";
+App::$strings["This will import all your Redmatrix photo albums to this channel."] = "Esto importará todos sus álbumes de fotos de Redmatrix a este canal.";
+App::$strings["Redmatrix Server base URL"] = "URL base del servidor Redmatrix";
+App::$strings["Redmatrix Login Username"] = "Nombre de inicio de sesión en Redmatrix";
+App::$strings["Redmatrix Login Password"] = "Contraseña de inicio de sesión en Redmatrix";
+App::$strings["Import just this album"] = "Importar solo este álbum";
+App::$strings["Leave blank to import all albums"] = "Dejar en blanco para importar todos los álbumes";
+App::$strings["Maximum count to import"] = "Límite máximo de importación";
+App::$strings["0 or blank to import all available"] = "0 o en blanco para importar todos los disponibles";
+App::$strings["lonely"] = "Solo/a";
+App::$strings["drunk"] = "ebrio/a";
+App::$strings["horny"] = "caliente";
+App::$strings["stoned"] = "drogado/a";
+App::$strings["fucked up"] = "jodido/a";
+App::$strings["clusterfucked"] = "hecho/a polvo";
+App::$strings["crazy"] = "loco/a";
+App::$strings["hurt"] = "ofendido/a";
+App::$strings["sleepy"] = "soñoliento/a";
+App::$strings["grumpy"] = "gruñón/ona";
+App::$strings["high"] = "superior";
+App::$strings["semi-conscious"] = "semiconsciente";
+App::$strings["in love"] = "enamorado/a";
+App::$strings["in lust"] = "lujurioso/a";
+App::$strings["naked"] = "desnudo/a";
+App::$strings["stinky"] = "apestoso/a";
+App::$strings["sweaty"] = "sudoroso/a";
+App::$strings["bleeding out"] = "exánime";
+App::$strings["victorious"] = "victorioso/a";
+App::$strings["defeated"] = "derrotado/a";
+App::$strings["envious"] = "envidioso/a";
+App::$strings["jealous"] = "celoso/a";
+App::$strings["Livejournal username"] = "Nombre de usuario en Livejournal";
+App::$strings["Livejournal password"] = "Contraseña en Livejournal";
+App::$strings["Post to Livejournal by default"] = "Publicar en Livejournal por defecto";
+App::$strings["Send wall-to-wall posts to Livejournal"] = "Enviar entradas de Muro-Muro a Livejournal";
+App::$strings["Livejournal Crosspost Connector"] = "Livejournal Crosspost Connector";
+App::$strings["Post to Livejournal"] = "Publicar en Livejournal";
+App::$strings["Posted by"] = "Publicado por ";
+App::$strings["Hide the button and show the smilies directly."] = "Ocultar el botón y mostrar los smilies directamente.";
+App::$strings["Smileybutton Settings"] = "Ajustes de Smileybutton";
+App::$strings["NSA Bait App"] = "App NSA Bait ";
+App::$strings["Make yourself a political target."] = "Hazte un objetivo político.";
+App::$strings["You're welcome."] = "Bienvenido.";
+App::$strings["Ah shucks..."] = "Ah, joder...";
+App::$strings["Don't mention it."] = "No lo menciones.";
+App::$strings["&lt;blush&gt;"] = "&lt;sonrojo&gt;";
+App::$strings["Please contact your site administrator.<br />The provided API URL is not valid."] = "Por favor, contacte con el administrador de su sitio.<br />La URL de la API proporcionada no es válida.";
+App::$strings["We could not contact the GNU social API with the Path you entered."] = "No podemos conectar con la API de GNU social con la ruta que ha proporcionado.";
+App::$strings["GNU social settings updated."] = "Se han guardado los ajustes de GNU social.";
+App::$strings["Globally Available GNU social OAuthKeys"] = "OAuthKeys globales de GNU social disponibles";
+App::$strings["There are preconfigured OAuth key pairs for some GNU social servers available. If you are using one of them, please use these credentials.<br />If not feel free to connect to any other GNU social instance (see below)."] = "Existen pares de claves OAuth preconfiguradas disponibles para algunos servidores libres de GNU social. Si está usando uno de ellos, utilice estas credenciales.<br />Si no se siente libre de conectarse a cualquier otra instancia de GNU social (vea a continuación).";
+App::$strings["Provide your own OAuth Credentials"] = "Proporcione sus propias credenciales de OAuth";
+App::$strings["No consumer key pair for GNU social found. Register your Hubzilla Account as an desktop client on your GNU social account, copy the consumer key pair here and enter the API base root.<br />Before you register your own OAuth key pair ask the administrator if there is already a key pair for this Hubzilla installation at your favourite GNU social installation."] = "No se ha encontrado un par de claves de consumidor para GNU social. Registre su cuenta de Hubzilla como un cliente de escritorio en su cuenta social GNU, copie el par de claves de consumidor aquí y escriba la dirección raíz de la API.<br />Antes de registrar su propio par de claves OAuth, pregunte al administrador si ya hay un par de claves para esta instalación de Hubzilla en su instalación GNU social favorita.";
+App::$strings["OAuth Consumer Key"] = "OAuth Consumer Key";
+App::$strings["OAuth Consumer Secret"] = "OAuth Consumer Secret";
+App::$strings["Base API Path"] = "Ruta base de la API";
+App::$strings["Remember the trailing /"] = "Recuerde la barra /";
+App::$strings["GNU social application name"] = "Nombre de la aplicación de GNU social";
+App::$strings["To connect to your GNU social account click the button below to get a security code from GNU social which you have to copy into the input box below and submit the form. Only your <strong>public</strong> posts will be posted to GNU social."] = "Para conectarse a su cuenta de GNU social, haga clic en el botón de abajo para obtener un código de seguridad de GNU social que tiene que copiar en el cuadro de entrada a continuación y envíe el formulario. Solo sus <strong>entradas</strong> públicas aparecerán en GNU social.";
+App::$strings["Log in with GNU social"] = "Inicio de sesión en GNU social";
+App::$strings["Copy the security code from GNU social here"] = "Copiar aquí el código de seguridad de GNU social";
+App::$strings["Cancel Connection Process"] = "Cancelar el proceso de conexión";
+App::$strings["Current GNU social API is"] = "La API actual de GNU social es ";
+App::$strings["Cancel GNU social Connection"] = "Cancelar la conexión de GNU social";
+App::$strings["<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to GNU social will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "<strong>Aviso</strong>: Debido a su configuración de privacidad (<em>Ocultar los detalles de su perfil a los visitantes desconocidos?</em>) el vínculo potencialmente incluido en las entradas públicas retransmitidas a GNU social llevará al visitante a una página en blanco que le informará de que el acceso a su perfil ha sido restringido.";
+App::$strings["Post to GNU social by default"] = "Publicar en GNU social por defecto";
+App::$strings["If enabled your public postings will be posted to the associated GNU-social account by default"] = "Si está activado, sus entradas públicas se publicarán en la cuenta GNU-social asociada de forma predeterminada";
+App::$strings["GNU-Social Crosspost Connector"] = "GNU-Social Crosspost Connector";
+App::$strings["Post to GNU social"] = "Publicar en GNU social";
+App::$strings["Site name"] = "Nombre del sitio";
+App::$strings["API URL"] = "URL de la API";
+App::$strings["Application name"] = "Nombre de la aplicación";
+App::$strings["Enable Paypal Button Module"] = "Habilitar el módulo del botón de Paypal";
+App::$strings["Use Production Key"] = "Utilizar clave en entorno de producción";
+App::$strings["Paypal Sandbox Client Key"] = "Clave de cliente en el entorno de pruebas de Paypal";
+App::$strings["Paypal Sandbox Secret Key"] = "Clave secreta en el entorno de pruebas de Paypal";
+App::$strings["Paypal Production Client Key"] = "Clave de cliente en el entorno de producción de Paypal";
+App::$strings["Paypal Production Secret Key"] = "Clave secreta en el entorno de producción de Paypal";
+App::$strings["Paypal button payments are not enabled."] = "Los pagos con el botón de Paypal no están habilitados.";
+App::$strings["Paypal button payments are not properly configured. Please choose another payment option."] = "Los pagos con el botón de Paypal no están configurados correctamente. Por favor, elija otra opción de pago.";
+App::$strings["Order not found."] = "El pedido no se ha encontrado.";
+App::$strings["Enable Paypal Button Module (API-v2)"] = "Habilitar el módulo de botones de Paypal (API-v2)";
+App::$strings["Enable Hubzilla Services Module"] = "Habilitar el Módulo de Servicios de Hubzilla";
+App::$strings["New Sku"] = "Nuevo SKU (número de referencia)";
+App::$strings["Cannot save edits to locked item."] = "No se pueden guardar las ediciones en el elemento bloqueado.";
+App::$strings["SKU not found."] = "No se ha encontrado el SKU";
+App::$strings["Invalid Activation Directive."] = "Directiva de activación no válida.";
+App::$strings["Invalid Deactivation Directive."] = "Directiva de desactivación no válida";
+App::$strings["Add to this privacy group"] = "Añadir a este grupo de canales";
+App::$strings["Set user service class"] = "Configurar la clase de servicio al usuario";
+App::$strings["You must be using a local account to purchase this service."] = "Usted debe estar usando una cuenta local para comprar este servicio.";
+App::$strings["Changes Locked"] = "Cambios bloqueados";
+App::$strings["Item available for purchase."] = "Artículo disponible para la compra.";
+App::$strings["Price"] = "Precio";
+App::$strings["Photo URL"] = "URL de la foto";
+App::$strings["Add buyer to privacy group"] = "Agregar comprador al grupo de canales";
+App::$strings["Add buyer as connection"] = "Añadir comprador como conexión";
+App::$strings["Set Service Class"] = "Establecer clase de servicio";
+App::$strings["Enable Manual Cart Module"] = "Habilitar el módulo de carro manual";
+App::$strings["Enable Subscription Management Module"] = "Habilitar el módulo de gestión de suscripciones";
+App::$strings["Cannot include subscription items with different terms in the same order."] = "No se pueden incluir artículos de suscripción con términos diferentes en el mismo orden.";
+App::$strings["Select Subscription to Edit"] = "Seleccione suscripción a editar";
+App::$strings["Edit Subscriptions"] = "Editar suscripciones";
+App::$strings["Subscription SKU"] = "SKU de la suscripción";
+App::$strings["Catalog Description"] = "Descripción del catálogo";
+App::$strings["Subscription available for purchase."] = "Suscripción disponible para la compra.";
+App::$strings["Maximum active subscriptions to this item per account."] = "Máximo de suscripciones activas a este artículo por cuenta.";
+App::$strings["Subscription price."] = "Precio de la suscripción.";
+App::$strings["Quantity"] = "Cuantía";
+App::$strings["Term"] = "Condición";
+App::$strings["Enable Order/Item Options"] = "Habilitar las opciones de pedido/artículo";
+App::$strings["Label"] = "Etiqueta";
+App::$strings["Instructions"] = "Instrucciones";
+App::$strings["Error: order mismatch. Please try again."] = "Error: desajuste de pedidos. Por favor, inténtelo de nuevo.";
+App::$strings["Manual payments are not enabled."] = "Los pagos manuales no están habilitados.";
+App::$strings["Finished"] = "Terminado";
+App::$strings["DB Cleanup Failure"] = "Fallo de limpieza de la base de datos";
+App::$strings["[cart] Item Added"] = "[cesta] Artículo añadido";
+App::$strings["Order already checked out."] = "El pedido ya ha sido revisado";
+App::$strings["Drop database tables when uninstalling."] = "Eliminar tablas de la base de datos al desinstalar.";
+App::$strings["Cart Settings"] = "Configuración del carro de la compra";
+App::$strings["Shop"] = "Comprar";
+App::$strings["Order Not Found"] = "No se ha encontrado el pedido";
+App::$strings["You must be logged into the Grid to shop."] = "Debe iniciar sesión en la red para comprar.";
+App::$strings["Access denied."] = "Acceso denegado";
+App::$strings["No Order Found"] = "No se ha encontrado ningún pedido";
+App::$strings["An unknown error has occurred Please start again."] = "Se ha producido un error desconocido Vuelva a empezar.";
+App::$strings["Requirements not met."] = "No se cumplen los requisitos.";
+App::$strings["Review your order and complete any needed requirements."] = "Revise su pedido y complete los requisitos necesarios.";
+App::$strings["Invalid Payment Type. Please start again."] = "Tipo de pago no válido. Por favor, empiece de nuevo.";
+App::$strings["Order not found"] = "El pedido no se ha encontrado";
+App::$strings["Enable Test Catalog"] = "Habilitar el catálogo de pruebas";
+App::$strings["Enable Manual Payments"] = "Permitir pagos manuales";
+App::$strings["Base Merchant Currency"] = "Divida base del vendedor";
+App::$strings["Access Denied."] = "Acceso denegado";
+App::$strings["Invalid Item"] = "Elemento no válido";
+App::$strings["Redmatrix File Storage Import"] = "Importar repositorio de ficheros de Redmatrix";
+App::$strings["This will import all your Redmatrix cloud files to this channel."] = "Esto importará todos sus ficheros de la nube de Redmatrix a este canal.";
+App::$strings["Show Upload Limits"] = "Mostrar los límites de subida";
+App::$strings["Hubzilla configured maximum size: "] = "Tamaño máximo configurado por Hubzilla: ";
+App::$strings["PHP upload_max_filesize: "] = "PHP upload_max_filesize: ";
+App::$strings["PHP post_max_size (must be larger than upload_max_filesize): "] = "PHP post_max_size (debe ser mayor que upload_max_filesize): ";
+App::$strings["Friendica Crosspost Connector Settings saved."] = "Se han guardado los ajustes del conector de publicación cruzada con Friendica.";
+App::$strings["Send public postings to Friendica by default"] = "Enviar entradas públicas a Friendica por defecto";
+App::$strings["Friendica API Path"] = "Ruta a la API de Friendica";
+App::$strings["Friendica login name"] = "Nombre de inicio de sesión en Friendica";
+App::$strings["Friendica password"] = "Contraseña de Friendica";
+App::$strings["Friendica Crosspost Connector"] = "Friendica Crosspost Connector";
+App::$strings["Post to Friendica"] = "Publicar en Friendica";
+App::$strings["Rainbow Tag App"] = "App Etiqueta Arcoiris";
+App::$strings["Add some colour to tag clouds"] = "Añadir color a las nubes de etiquetas";
+App::$strings["Rainbow Tag"] = "Etiqueta Arcoiris";
+App::$strings["Allow magic authentication only to websites of your immediate connections"] = "Permitir la autenticación mágica sólo a los sitios web de sus conexiones próximas";
+App::$strings["Authchoose"] = "Autoseleccionar";
+App::$strings["No server specified"] = "No se ha especificado ningún servidor";
+App::$strings["Posts imported"] = "Entradas importadas";
+App::$strings["Files imported"] = "Ficheros importados";
+App::$strings["Content Import"] = "Importación de contenidos";
+App::$strings["This will import all your conversations and cloud files from a cloned channel on another server. This may take a while if you have lots of posts and or files."] = "Esto importará todas sus conversaciones y archivos de nube de un canal clonado en otro servidor. El proceso puede tardar un poco si tiene muchos mensajes y/o ficheros.";
+App::$strings["Include posts"] = "Incluir entradas";
+App::$strings["Conversations, Articles, Cards, and other posted content"] = "Conversaciones, artículos, fichas y otros contenidos publicados";
+App::$strings["Include files"] = "Incluir ficheros";
+App::$strings["Files, Photos and other cloud storage"] = "Archivos, fotos y otro tipo de almacenamiento en la nube";
+App::$strings["Original Server base URL"] = "URL base del servidor original";
+App::$strings["Public"] = "Público";
+App::$strings["Anybody in the \$Projectname network"] = "Cualquiera en la red \$Projectname";
+App::$strings["Any account on %s"] = "Cualquier cuenta en %s";
+App::$strings["Any of my connections"] = "Cualquiera de mis conexiones";
+App::$strings["Only connections I specifically allow"] = "Sólo las conexiones que yo permita de forma explícita";
+App::$strings["Anybody authenticated (could include visitors from other networks)"] = "Cualquiera que esté autenticado (podría incluir a los visitantes de otras redes)";
+App::$strings["Any connections including those who haven't yet been approved"] = "Cualquier conexión incluyendo aquellas que aún no han sido aprobadas";
+App::$strings["This is your default setting for the audience of your normal stream, and posts."] = "Esta es la configuración predeterminada para su flujo (stream) habitual de publicaciones.";
+App::$strings["This is your default setting for who can view your default channel profile"] = "Esta es su configuración por defecto para establecer quién puede ver su perfil del canal predeterminado";
+App::$strings["This is your default setting for who can view your connections"] = "Este es su ajuste predeterminado para establecer quién puede ver sus conexiones";
+App::$strings["This is your default setting for who can view your file storage and photos"] = "Este es su ajuste predeterminado para establecer quién puede ver su repositorio de ficheros y sus fotos";
+App::$strings["This is your default setting for the audience of your webpages"] = "Este es el ajuste predeterminado para establecer la audiencia de sus páginas web";
+App::$strings["Affinity Tool"] = "Herramienta de afinidad";
+App::$strings["Site Admin"] = "Administrador del sitio";
+App::$strings["Content Filter"] = "Filtro de contenido";
+App::$strings["Remote Diagnostics"] = "Diagnóstico remoto";
+App::$strings["Suggest Channels"] = "Sugerir canales";
+App::$strings["Channel Manager"] = "Administración de canales";
+App::$strings["Stream"] = "Stream";
+App::$strings["Mail"] = "Correo";
+App::$strings["Mood"] = "Estado de ánimo";
+App::$strings["Chat"] = "Chat";
+App::$strings["Probe"] = "Probar";
+App::$strings["Suggest"] = "Sugerir";
+App::$strings["Random Channel"] = "Canal aleatorio";
+App::$strings["Invite"] = "Invitar";
+App::$strings["Features"] = "Funcionalidades";
+App::$strings["Post"] = "Publicación";
+App::$strings["Notifications"] = "Notificaciones";
+App::$strings["Order Apps"] = "Ordenar las apps";
+App::$strings["CardDAV"] = "CardDAV";
+App::$strings["Channel Sources"] = "Orígenes de los contenidos del canal";
+App::$strings["Guest Access"] = "Acceso para invitados";
+App::$strings["OAuth Apps Manager"] = "Administrador de apps OAuth";
+App::$strings["OAuth2 Apps Manager"] = "Administrador de apps OAuth2";
+App::$strings["PDL Editor"] = "Editor PDL";
+App::$strings["Contact Roles"] = "Roles de contacto";
+App::$strings["Public Stream"] = "\"Stream\" público";
+App::$strings["My Chatrooms"] = "Mis salas de chat";
+App::$strings["Channel Export"] = "Exportar canal";
+App::$strings["Update"] = "Actualizar";
+App::$strings["Install"] = "Instalar";
+App::$strings["Purchase"] = "Comprar";
+App::$strings["Undelete"] = "Recuperar";
+App::$strings["Add to app-tray"] = "Añadir a la bandeja de aplicaciones";
+App::$strings["Remove from app-tray"] = "Quitar de la bandeja de aplicaciones";
+App::$strings["Pin to navbar"] = "Fijar en la barra de navegación";
+App::$strings["Unpin from navbar"] = "Quitar de la barra de navegación";
+App::$strings["__ctx:permcat__ Default"] = "Predeterminado";
+App::$strings["Channel is blocked on this site."] = "El canal está bloqueado en este sitio.";
+App::$strings["Channel location missing."] = "Falta la dirección del canal.";
+App::$strings["Remote channel or protocol unavailable."] = "Canal remoto o protocolo no disponible.";
+App::$strings["Channel discovery failed."] = "El intento de acceder al canal ha fallado.";
+App::$strings["Protocol disabled."] = "Protocolo deshabilitado.";
+App::$strings["Cannot connect to yourself."] = "No puede conectarse consigo mismo.";
+App::$strings["error saving data"] = "error guardando los datos";
+App::$strings["Unable to verify site signature for %s"] = "No ha sido posible de verificar la firma del sitio para %s";
+App::$strings["\$Projectname Notification"] = "Notificación de \$Projectname";
+App::$strings["Thank You,"] = "Gracias,";
+App::$strings["This email was sent by %1\$s at %2\$s."] = "Este email ha sido enviado por %1\$s a %2\$s.";
+App::$strings["To stop receiving these messages, please adjust your Notification Settings at %s"] = "Para dejar de recibir estos mensajes, por favor ajuste la configuración de notificación en %s";
+App::$strings["To stop receiving these messages, please adjust your %s."] = "Para dejar de recibir estos mensajes, por favor, ajuste su %s";
+App::$strings["Notification Settings"] = "Configuración de las notificaciones";
+App::$strings["%s <!item_type!>"] = "%s <!item_type!>";
+App::$strings["[\$Projectname:Notify] New direct message received at %s"] = "[\$Projectname:Aviso] Nuevo mensaje directo recibido en %s";
+App::$strings["%1\$s sent you a new direct message at %2\$s"] = "%1\$s le ha enviado un nuevo mensaje directo en %2\$s.";
+App::$strings["%1\$s sent you %2\$s."] = "%1\$s le ha enviado %2\$s.";
+App::$strings["a direct message"] = "un mensaje directo";
+App::$strings["Please visit %s to view and/or reply to your direct messages."] = "Por favor visite %s para ver y/o responder a su mensaje directo.";
+App::$strings["commented on"] = "ha comentado sobre ";
+App::$strings["liked"] = "ha gustado de ";
+App::$strings["disliked"] = "no ha gustado de ";
+App::$strings["voted on"] = "votado en ";
+App::$strings["%1\$s %2\$s [zrl=%3\$s]a %4\$s[/zrl]"] = "%1\$s%2\$s [zrl=%3\$s ]un %4\$s[/zrl]";
+App::$strings["%1\$s %2\$s [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "%1\$s %2\$s[zrl=%3\$s]%5\$s de %4\$s[/zrl]";
+App::$strings["%1\$s %2\$s [zrl=%3\$s]your %4\$s[/zrl]"] = "%1\$s %2\$s [zrl=%3\$s]su %4\$s[/zrl]";
+App::$strings["[\$Projectname:Notify] Moderated Comment to conversation #%1\$d by %2\$s"] = "[\$Projectname:Aviso] Comentario moderado en la conversación #%1\$d por %2\$s";
+App::$strings["[\$Projectname:Notify] Comment to conversation #%1\$d by %2\$s"] = "[\$Projectname:Aviso] Nuevo comentario de %2\$s en la conversación #%1\$d";
+App::$strings["%1\$s commented on an item/conversation you have been following"] = "%1\$sha comentado un elemento/conversación que ha estado siguiendo.";
+App::$strings["Please visit %s to view and/or reply to the conversation."] = "Para ver o comentar la conversación, visite %s";
+App::$strings["Please visit %s to approve or reject this comment."] = "Por favor, visite %s para aprobar o rechazar este comentario.";
+App::$strings["[\$Projectname:Notify] Like received to conversation #%1\$d by %2\$s"] = "[\$Projectname:Aviso] \"Me gusta\" de %2\$s en la conversación #%1\$d";
+App::$strings["%1\$s liked an item/conversation you created"] = "A %1\$s le ha gustado un elemento o conversación que ha creado usted.";
+App::$strings["[\$Projectname:Notify] %s posted to your profile wall"] = "[\$Projectname:Aviso] %s ha publicado una entrada en su página de inicio del perfil (\"muro\")";
+App::$strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$s ha publicado en su muro en %2\$s";
+App::$strings["%1\$s posted to [zrl=%2\$s]your wall[/zrl]"] = "%1\$sha publicado en [zrl=%2\$s]su muro[/zrl]";
+App::$strings["[\$Projectname:Notify] %s tagged you"] = "[\$Projectname:Aviso] %s le ha etiquetado";
+App::$strings["%1\$s tagged you at %2\$s"] = "%1\$sle ha etiquetado en %2\$s";
+App::$strings["%1\$s [zrl=%2\$s]tagged you[/zrl]."] = "%1\$s [zrl=%2\$s]le ha etiquetado[/zrl].";
+App::$strings["[\$Projectname:Notify] %1\$s poked you"] = "[\$Projectname:Aviso] %1\$s le ha dado un toque";
+App::$strings["%1\$s poked you at %2\$s"] = "%1\$sle ha dado un toque en %2\$s";
+App::$strings["%1\$s [zrl=%2\$s]poked you[/zrl]."] = "%1\$s [zrl=%2\$s] le ha dado un toque[/zrl].";
+App::$strings["[\$Projectname:Notify] %s tagged your post"] = "[\$Projectname:Aviso] %s ha etiquetado su entrada";
+App::$strings["%1\$s tagged your post at %2\$s"] = "%1\$sha etiquetado su entrada en %2\$s";
+App::$strings["%1\$s tagged [zrl=%2\$s]your post[/zrl]"] = "%1\$s ha etiquetado [zrl=%2\$s]su entrada[/zrl]";
+App::$strings["[\$Projectname:Notify] Introduction received"] = "[\$Projectname:Aviso] Ha recibido una solicitud de conexión";
+App::$strings["You've received an new connection request from '%1\$s' at %2\$s"] = "Ha recibido una nueva solicitud de conexión de '%1\$s' en %2\$s";
+App::$strings["You've received [zrl=%1\$s]a new connection request[/zrl] from %2\$s."] = "Ha recibido [zrl=%1\$s]una nueva solicitud de conexión[/zrl] de %2\$s.";
+App::$strings["You may visit their profile at %s"] = "Puede visitar su perfil en %s";
+App::$strings["Please visit %s to approve or reject the connection request."] = "Por favor, visite %s para permitir o rechazar la solicitad de conexión.";
+App::$strings["[\$Projectname:Notify] Friend suggestion received"] = "[\$Projectname:Aviso] Ha recibido una sugerencia de conexión";
+App::$strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "Ha recibido una sugerencia de amistad de '%1\$s' en %2\$s";
+App::$strings["You've received [zrl=%1\$s]a friend suggestion[/zrl] for %2\$s from %3\$s."] = "Ha recibido [zrl=%1\$s]una sugerencia de amistad[/zrl] para %2\$s de %3\$s.";
+App::$strings["Name:"] = "Nombre:";
+App::$strings["Photo:"] = "Foto:";
+App::$strings["Please visit %s to approve or reject the suggestion."] = "Por favor, visite %s para aprobar o rechazar la sugerencia.";
+App::$strings["[\$Projectname:Notify]"] = "[\$Projectname:Aviso]";
+App::$strings["created a new poll"] = "se ha creado una nueva encuesta";
+App::$strings["created a new post"] = "ha creado una nueva entrada";
+App::$strings["voted on %s's poll"] = "votado en la encuesta de %s";
+App::$strings["commented on %s's post"] = "ha comentado la entrada de %s";
+App::$strings["repeated %s's post"] = "repetida la entrada de %s";
+App::$strings["liked %s's post"] = "Le ha gustado la entrada de %s";
+App::$strings["disliked %s's post"] = "No le ha gustado la entrada de %s";
+App::$strings["shared a file with you"] = "compartió un archivo con usted";
+App::$strings["edited a post dated %s"] = "ha editado una entrada %s";
+App::$strings["edited a comment dated %s"] = "ha editado un comentario %s";
+App::$strings["added your channel"] = "añadió este canal a sus conexiones";
+App::$strings["sent you a direct message"] = "enviarle un mensaje directo";
+App::$strings["g A l F d"] = "g A l d F";
+App::$strings["[today]"] = "[hoy]";
+App::$strings["created an event"] = "se creó un evento";
+App::$strings["status verified"] = "estado verificado";
+App::$strings["Directory Options"] = "Opciones del directorio";
+App::$strings["Safe Mode"] = "Modo seguro";
+App::$strings["Public Forums Only"] = "Solo foros públicos";
+App::$strings["This Website Only"] = "Solo este sitio web";
+App::$strings["0. Beginner/Basic"] = "0. Principiante/Básico";
+App::$strings["1. Novice - not skilled but willing to learn"] = "1. Novato: no cualificado, pero dispuesto a aprender";
+App::$strings["2. Intermediate - somewhat comfortable"] = "2. Intermedio - algo cómodo";
+App::$strings["3. Advanced - very comfortable"] = "3. Avanzado - muy cómodo";
+App::$strings["4. Expert - I can write computer code"] = "4. Experto - Puedo escribir código informático";
+App::$strings["5. Wizard - I probably know more than you do"] = "5. Colaborador - probablemente sé más que tú";
+App::$strings["Source code of failed update: "] = "Código fuente de la actualización fallida: ";
+App::$strings["Update Error at %s"] = "Error de actualización en %s";
+App::$strings["Update %s failed. See error logs."] = "La actualización %s ha fallado. Mire el informe de errores.";
+App::$strings["Restricted message"] = "Mensaje restringido";
+App::$strings["Direct message"] = "Mensaje directo";
+App::$strings["Public Policy"] = "Política pública";
+App::$strings["Privacy conflict. Discretion advised."] = "Conflicto de privacidad. Se aconseja discreción.";
+App::$strings["Admin Delete"] = "Eliminar admin";
+App::$strings["Save to Folder"] = "Guardar en carpeta";
App::$strings["I will attend"] = "Participaré";
App::$strings["I will not attend"] = "No participaré";
App::$strings["I might attend"] = "Quizá participe";
-App::$strings["I agree"] = "Estoy de acuerdo";
-App::$strings["I disagree"] = "No estoy de acuerdo";
-App::$strings["I abstain"] = "Me abstengo";
+App::$strings["View all"] = "Ver todo";
+App::$strings["I like this (toggle)"] = "Me gusta (cambiar)";
+App::$strings["I don't like this (toggle)"] = "No me gusta esto (cambiar)";
+App::$strings["Reply on this comment"] = "Responder a este comentario";
+App::$strings["reply"] = "responder";
+App::$strings["Reply to"] = "Responder a ";
App::$strings["Share This"] = "Compartir esto";
App::$strings["share"] = "compartir";
-App::$strings["View %s's profile - %s"] = "Ver el perfil de %s - %s";
+App::$strings["Delivery Report"] = "Informe de transmisión";
+App::$strings["%d Comment"] = array(
+ 0 => "%d comentario",
+ 1 => "%d comentarios",
+ 2 => "%d comentarios",
+);
+App::$strings["%d unseen"] = "%dno visto/a vistos/as";
+App::$strings["Forum"] = "Foro";
+App::$strings["to"] = "a";
App::$strings["via"] = "mediante";
+App::$strings["Wall-to-Wall"] = "De página del perfil a página del perfil (de \"muro\" a \"muro\")";
+App::$strings["via Wall-To-Wall:"] = "Mediante el procedimiento página del perfil a página del perfil (de \"muro\" a \"muro\")";
+App::$strings["Attend"] = "Participar o asistir";
App::$strings["Attendance Options"] = "Opciones de participación o asistencia";
App::$strings["Voting Options"] = "Opciones de votación";
+App::$strings["Go to previous comment"] = "Ir al comentario anterior";
App::$strings["Pinned post"] = "Entradas ancladas";
-App::$strings["Don't show"] = "No mostrar";
-App::$strings["__ctx:widget__ Activity"] = "Actividad";
-App::$strings["Select Channel"] = "Seleccionar un canal";
-App::$strings["Read-write"] = "Lectura y escritura";
-App::$strings["Read-only"] = "Sólo lectura";
-App::$strings["Channel Calendar"] = "Calendario del canal";
-App::$strings["CalDAV Calendars"] = "Calendarios CalDAV";
-App::$strings["Shared CalDAV Calendars"] = "Calendarios CalDAV compartidos";
-App::$strings["Share this calendar"] = "Compartir este calendario";
-App::$strings["Calendar name and color"] = "Nombre y color del calendario";
-App::$strings["Create new CalDAV calendar"] = "Crear un nuevo calendario CalDAV";
-App::$strings["Create"] = "Crear";
-App::$strings["Calendar Name"] = "Nombre del calendario";
-App::$strings["Calendar Tools"] = "Gestión de calendarios";
-App::$strings["Channel Calendars"] = "Calendarios del canal";
-App::$strings["Import calendar"] = "Importar un calendario";
-App::$strings["Select a calendar to import to"] = "Seleccionar un calendario para importarlo";
-App::$strings["Addressbooks"] = "Agenda de direcciones";
-App::$strings["Addressbook name"] = "Nombre de la agenda";
-App::$strings["Create new addressbook"] = "Crear una nueva agenda de direcciones";
-App::$strings["Addressbook Name"] = "Nombre de la agenda";
-App::$strings["Addressbook Tools"] = "Gestión de agendas de direcciones";
-App::$strings["Import addressbook"] = "Importar una agenda de direcciones";
-App::$strings["Select an addressbook to import to"] = "Seleccionar una agenda para importarla";
-App::$strings["Remove term"] = "Eliminar término";
-App::$strings["Suggested Chatrooms"] = "Salas de chat sugeridas";
-App::$strings["Account settings"] = "Configuración de la cuenta";
-App::$strings["Channel settings"] = "Configuración del canal";
-App::$strings["Privacy settings"] = "Ajustes de privacidad";
-App::$strings["Display settings"] = "Ajustes de visualización";
-App::$strings["Manage locations"] = "Gestión de ubicaciones (clones) del canal";
-App::$strings["Overview"] = "Resumen";
-App::$strings["Ignore/Hide"] = "Ignorar/Ocultar";
-App::$strings["Suggestions"] = "Sugerencias";
-App::$strings["See more..."] = "Ver más...";
-App::$strings["Bookmarked Chatrooms"] = "Salas de chat preferidas";
-App::$strings["App Categories"] = "Categorías de aplicaciones";
-App::$strings["Toggle post editor"] = "Alternar editor de entradas";
-App::$strings["Toggle personal notes"] = "Alternar notas personales";
-App::$strings["Channel activities"] = "Actividades del canal";
-App::$strings["Add new role"] = "Añadir nuevo rol";
-App::$strings["Contact roles"] = "Roles del contacto";
-App::$strings["Role members"] = "Miembros del rol";
-App::$strings["photo/image"] = "foto/imagen";
-App::$strings["Site"] = "Sitio";
-App::$strings["Accounts"] = "Cuentas";
-App::$strings["Member registrations waiting for confirmation"] = "Inscripciones de nuevos miembros pendientes de aprobación";
-App::$strings["Security"] = "Seguridad";
-App::$strings["Features"] = "Funcionalidades";
-App::$strings["Addons"] = "Addons";
-App::$strings["Themes"] = "Temas";
-App::$strings["Inspect queue"] = "Examinar la cola";
-App::$strings["Profile Fields"] = "Campos del perfil";
-App::$strings["DB updates"] = "Actualizaciones de la base de datos";
-App::$strings["Logs"] = "Informes";
-App::$strings["Addon Features"] = "Características del addon";
-App::$strings["Direct Messages"] = "Mensajes directos";
-App::$strings["Show direct (private) messages"] = "Mostrar mensajes (privados) directos";
-App::$strings["Events"] = "Eventos";
-App::$strings["Show posts that include events"] = "Mostrar entradas que incluyan eventos";
-App::$strings["Polls"] = "Encuestas";
-App::$strings["Show posts that include polls"] = "Mostrar entradas que incluyan encuestas";
-App::$strings["Show posts related to the %s privacy group"] = "Mostrar entradas relacionadas con el grupo %s";
-App::$strings["Show my privacy groups"] = "Mostrar mis grupos de canales";
-App::$strings["Show posts to this forum"] = "Mostrar las entradas en este foro";
-App::$strings["Show forums"] = "Mostrar los foros";
-App::$strings["Starred Posts"] = "Entradas preferidas";
-App::$strings["Show posts that I have starred"] = "Mostrar entradas que he señalado como preferidas";
-App::$strings["Personal Posts"] = "Entradas personales";
-App::$strings["Show posts that mention or involve me"] = "Mostrar entradas que me mencionen o involucren";
-App::$strings["Show posts that I have filed to %s"] = "Mostrar las entradas que he enviado a %s";
-App::$strings["Show filed post categories"] = "Mostrar los temas de las entradas archivadas";
-App::$strings["Panel search"] = "Panel de búsqueda";
-App::$strings["Filter by name"] = "Filtrar por nombre";
-App::$strings["Remove active filter"] = "Eliminar el filtro activo";
-App::$strings["Stream Filters"] = "Filtros del stream";
-App::$strings["App Collections"] = "Colección de aplicaciones";
-App::$strings["Installed apps"] = "Aplicaciones instaladas";
-App::$strings["Available Apps"] = "Aplicaciones disponibles";
-App::$strings["Add new group"] = "Añadir nuevo grupo";
-App::$strings["Privacy groups"] = "Grupos de canales";
-App::$strings["Rating Tools"] = "Valoraciones";
-App::$strings["Rate Me"] = "Valorar este canal";
-App::$strings["View Ratings"] = "Mostrar las valoraciones";
-App::$strings["Click to show more"] = "Hacer clic para ver más";
-App::$strings["You have %1$.0f of %2$.0f allowed connections."] = "Tiene %1$.0f de %2$.0f conexiones permitidas.";
-App::$strings["Add New Connection"] = "Añadir nueva conexión";
-App::$strings["Enter channel address"] = "Dirección del canal";
-App::$strings["Examples: bob@example.com, https://example.com/barbara"] = "Ejemplos: manuel@ejemplo.com, https://ejemplo.com/carmen";
-App::$strings["Public and restricted messages"] = "Mensajes públicos y restringidos";
-App::$strings["Direct messages"] = "Mensajes directos";
-App::$strings["Starred messages"] = "Entradas preferidas";
-App::$strings["Notices"] = "Avisos";
-App::$strings["No messages"] = "Sin mensajes";
-App::$strings["Profile Creation"] = "Creación de perfiles";
-App::$strings["Upload profile photo"] = "Cargar la foto del perfil";
-App::$strings["Upload cover photo"] = "Cargar la foto de portada del perfil";
-App::$strings["Find and Connect with others"] = "Encontrar y conectarse con otros";
-App::$strings["View the directory"] = "Ver el directorio";
-App::$strings["View friend suggestions"] = "Ver sugerencias de amistad";
-App::$strings["Manage your connections"] = "Gestionar sus conexiones";
-App::$strings["Communicate"] = "Comunicarse";
-App::$strings["View your channel homepage"] = "Ver la página principal de su canal";
-App::$strings["View your network stream"] = "Ver el \"stream\" de su red";
-App::$strings["Documentation"] = "Documentación";
-App::$strings["Missing Features?"] = "¿Faltan Características?";
-App::$strings["Pin apps to navigation bar"] = "Fijar apps a la barra de navegación";
-App::$strings["Install more apps"] = "Instalar más apps";
-App::$strings["View public stream"] = "Ver el \"stream\" público";
-App::$strings["New Member Links"] = "Enlaces para nuevos miembros";
-App::$strings["Read mode"] = "Modo lectura";
-App::$strings["Edit mode"] = "Modo edición";
-App::$strings["Editing"] = "Editar";
-App::$strings["Saving"] = "Guardar";
-App::$strings["Saved"] = "Guardado";
-App::$strings["Me"] = "Yo";
-App::$strings["Family"] = "Familia";
-App::$strings["Acquaintances"] = "Conocidos/as";
-App::$strings["All"] = "Todos/as";
-App::$strings["Refresh"] = "Recargar";
-App::$strings["New network activity notifications"] = "Avisos de nueva actividad en la red";
-App::$strings["Network stream"] = "Stream de la red";
-App::$strings["Mark all notifications read"] = "Marcar todas las notificaciones como leídas";
-App::$strings["Show new posts only"] = "Mostrar solo las entradas nuevas";
-App::$strings["Filter by name or address"] = "Filtrar por nombre o dirección";
-App::$strings["New home activity notifications"] = "Avisos de nueva actividad en su página principal";
-App::$strings["Home stream"] = "Stream de su página principal";
-App::$strings["Mark all notifications seen"] = "Marcar todas las notificaciones como vistas";
-App::$strings["New direct messages notifications"] = "Nuevas notificaciones de mensajes directos";
-App::$strings["Direct messages stream"] = "Stream de mensajes directos";
-App::$strings["New events notifications"] = "Avisos de nuevos eventos";
-App::$strings["View events"] = "Ver los eventos";
-App::$strings["Mark all events seen"] = "Marcar todos los eventos como leidos";
-App::$strings["New Connections"] = "Nuevas conexiones";
-App::$strings["New connections notifications"] = "Avisos de nuevas conexiones";
-App::$strings["View all connections"] = "Ver todas las conexiones";
-App::$strings["New files notifications"] = "Avisos de nuevos ficheros";
-App::$strings["View all notices"] = "Ver todos los avisos";
-App::$strings["Mark all notices seen"] = "Marcar como leídos todos los avisos";
-App::$strings["Registrations"] = "Registros";
-App::$strings["New registrations notifications"] = "Notificaciones de nuevos registros";
-App::$strings["Public Stream"] = "\"Stream\" público";
-App::$strings["New public stream notifications"] = "Nuevos avisos del stream público";
-App::$strings["Public stream"] = "\"Stream\" público";
-App::$strings["Sorry, you have got no notifications at the moment"] = "Lo sentimos, por el momento no ha recibido ninguna notificación";
-App::$strings["This channel is limited to %d tokens"] = "Este canal tiene un límite de %d tokens";
-App::$strings["Name and Password are required."] = "Se requiere el nombre y la contraseña.";
-App::$strings["Token saved."] = "Token salvado.";
-App::$strings["Use this form to create temporary access identifiers to share things with non-members. These identities may be used in privacy groups and visitors may login using these credentials to access private content."] = "Utilice este formulario para crear identificadores de acceso temporal para compartir cosas con los no miembros. Estas identidades se pueden usar en los grupos de canales y así los visitantes pueden iniciar sesión, utilizando estas credenciales, para acceder a su contenido privado.";
-App::$strings["Please select a role for this guest!"] = "Por favor, seleccione un rol para este invitado";
-App::$strings["Select a role for this guest"] = "Seleccione un rol para este invitado";
-App::$strings["Guest Access"] = "Acceso para invitados";
-App::$strings["Login Name"] = "Nombre de inicio de sesión";
-App::$strings["Login Password"] = "Contraseña de inicio de sesión";
-App::$strings["Expires (yyyy-mm-dd)"] = "Expira (aaaa-mm-dd)";
-App::$strings["File not found."] = "Fichero no encontrado.";
-App::$strings["Can not copy folder into itself."] = "No se puede copiar la carpeta en sí misma.";
-App::$strings["Can not move folder \"%s\" into itself."] = "No se puede mover la carpeta\"%s\" en sí misma.";
-App::$strings["No such group"] = "No se encuentra el grupo";
-App::$strings["No such channel"] = "No se encuentra el canal";
-App::$strings["Search Results For:"] = "Buscar resultados para:";
-App::$strings["Reset form"] = "Reiniciar el formulario";
-App::$strings["Privacy group is empty"] = "El grupo de canales está vacío";
-App::$strings["Privacy group: "] = "Grupo de canales: ";
-App::$strings["Not a zip file or zip file corrupted."] = "No es un archivo zip o un archivo zip corrupto.";
-App::$strings["Import Items"] = "Importar elementos";
-App::$strings["Use this form to import existing posts and content from an export file."] = "Utilice este formulario para importar entradas y contenido desde un archivo de exportación.";
-App::$strings["File to Upload"] = "Fichero para subir";
-App::$strings["Imported file is empty."] = "El fichero importado está vacío.";
-App::$strings["Content import completed"] = "Importación de contenidos completada";
-App::$strings["Chatroom import completed"] = "Importación de salas de chat completada";
-App::$strings["Channel calendar import 1/2 completed"] = "Importación del calendario del canal 1/2 completada";
-App::$strings["Channel calendar import 2/2 completed"] = "Importación del calendario del canal 2/2 completada";
-App::$strings["Menu import completed"] = "Importación de menús completada";
-App::$strings["Wiki import completed"] = "Importación de wikis completada";
-App::$strings["Webpages import completed"] = "Importación de páginas web completada";
-App::$strings["Nothing to import."] = "No hay nada para importar.";
-App::$strings["Unable to download data from old server"] = "No se han podido descargar datos de su antiguo servidor";
-App::$strings["Your service plan only allows %d channels."] = "Su paquete de servicios solo permite %d canales.";
-App::$strings["No channel. Import failed."] = "No hay canal. La importación ha fallado";
-App::$strings["Automatic content and files import was not possible due to API version incompatiblity. Please import content and files manually!"] = "La importación automática de contenidos y archivos no fue posible debido a la incompatibilidad de la versión de la API. Por favor, importe el contenido y los archivos manualmente.";
-App::$strings["You must be logged in to use this feature."] = "Debe estar registrado para poder usar esta funcionalidad.";
-App::$strings["Channel Import"] = "Importar canal";
-App::$strings["Use this form to import an existing channel from a different server/hub. You may retrieve the channel identity from the old server/hub via the network or provide an export file."] = "Emplee este formulario para importar un canal desde un servidor/hub diferente. Puede recuperar el canal desde el antiguo servidor/hub a través de la red o proporcionando un fichero de exportación.";
-App::$strings["Or provide the old server/hub details"] = "O proporcione los detalles de su antiguo servidor/hub";
-App::$strings["Your old identity address (xyz@example.com)"] = "Su identidad en el antiguo servidor (canal@ejemplo.com)";
-App::$strings["Your old login email address"] = "Su antigua dirección de correo electrónico";
-App::$strings["Your old login password"] = "Su antigua contraseña";
-App::$strings["Import your items and files (limited by available memory)"] = "Importar sus artículos y archivos (limitado por la memoria disponible)";
-App::$strings["For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media."] = "Para cualquiera de las opciones, elija si hacer de este servidor su nueva dirección primaria, o si su antigua dirección debe continuar con este papel. Usted podrá publicar desde cualquier ubicación, pero sólo una puede estar marcada como la ubicación principal para los ficheros, fotos y otras imágenes o vídeos.";
-App::$strings["Make this hub my primary location"] = "Convertir este servidor en mi ubicación primaria";
-App::$strings["Move this channel (disable all previous locations)"] = "Mover este canal (desactivar todas las ubicaciones anteriores)";
-App::$strings["Use this channel nickname instead of the one provided"] = "Usa este alias de canal en lugar del que se proporciona";
-App::$strings["Leave blank to keep your existing channel nickname. You will be randomly assigned a similar nickname if either name is already allocated on this site."] = "Dejar en blanco para mantener su alias de canal . Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio.";
-App::$strings["This process may take several minutes to complete. Please submit the form only once and leave this page open until finished."] = "Este proceso puede tardar varios minutos en completarse. Por favor envíe el formulario una sola vez y mantenga esta página abierta hasta que termine.";
-App::$strings["You must be logged in to see this page."] = "Debe haber iniciado sesión para poder ver esta página.";
-App::$strings["Update to Hubzilla 5.0 step 2"] = "Actualizar a Hubzilla 5.0. Paso 2";
-App::$strings["To complete the update please run"] = "Para completar la actualización, ejecutar ";
-App::$strings["php util/z6convert.php"] = "php util/z6convert.php";
-App::$strings["from the terminal."] = "desde la terminal.";
+App::$strings["Add to Calendar"] = "Añadir al calendario";
+App::$strings["Mark all seen"] = "Marcar todo como visto";
+App::$strings["__ctx:noun__ Likes"] = "Me gusta";
+App::$strings["__ctx:noun__ Dislikes"] = "No me gusta";
+App::$strings["This is you"] = "Este es usted";
+App::$strings["Image"] = "Imagen";
+App::$strings["Insert Link"] = "Insertar enlace";
+App::$strings["Video"] = "Vídeo";
+App::$strings["Your full name (required)"] = "Su nombre completo (requerido)";
+App::$strings["Your email address (required)"] = "Su dirección de correo electrónico (requerido)";
+App::$strings["Your website URL (optional)"] = "La URL de su sitio web (opcional)";
+App::$strings["Likes %1\$s's %2\$s"] = "Gusta de %2\$sde %1\$s";
+App::$strings["Doesn't like %1\$s's %2\$s"] = "No le gusta %2\$sde %1\$s";
+App::$strings["Will attend %s's event"] = "Asistirá al evento de %s";
+App::$strings["Will not attend %s's event"] = "No asistirá al evento de %s";
+App::$strings["May attend %s's event"] = "Puede asistir al evento de %s";
+App::$strings["May not attend %s's event"] = "Puede no asistir al evento de %s";
+App::$strings["Missing room name"] = "Sala de chat sin nombre";
+App::$strings["Duplicate room name"] = "Nombre de sala duplicado.";
+App::$strings["Invalid room specifier."] = "Especificador de sala no válido.";
+App::$strings["Room not found."] = "Sala no encontrada.";
+App::$strings["Room is full"] = "La sala está llena.";
+App::$strings["Unable to verify channel signature"] = "No ha sido posible de verificar la firma del canal";
+App::$strings["A deleted privacy group with this name was revived. Existing item permissions <strong>may</strong> apply to this privacy group and any future members. If this is not what you intended, please create another privacy group with a different name."] = "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente.";
+App::$strings["Select a privacy group"] = "Seleccionar un grupo privado de canales";
+App::$strings["No service class restrictions found."] = "No se han encontrado restricciones sobre esta clase de servicio.";
+App::$strings["Public access denied."] = "Acceso público denegado.";
+App::$strings["Items tagged with: %s"] = "elementos etiquetados con: %s";
+App::$strings["Search results for: %s"] = "Resultados de la búsqueda para: %s";
+App::$strings["Location not found."] = "Dirección no encontrada.";
+App::$strings["Location lookup failed."] = "Ha fallado la búsqueda de la dirección.";
+App::$strings["Please select another location to become primary before removing the primary location."] = "Por favor, seleccione una copia de su canal (un clon) para convertirlo en primario antes de eliminar su canal principal.";
+App::$strings["Syncing locations"] = "Sincronizando ubicaciones";
+App::$strings["No locations found."] = "No encontrada ninguna dirección.";
+App::$strings["Manage Channel Locations"] = "Gestionar las direcciones del canal";
+App::$strings["Address"] = "Dirección";
+App::$strings["Drop"] = "Eliminar";
+App::$strings["Sync Now"] = "Sincronizar ahora";
+App::$strings["Please wait several minutes between consecutive operations."] = "Por favor, espere algunos minutos entre operaciones consecutivas.";
+App::$strings["When possible, drop a location by logging into that website/hub and removing your channel."] = "Cuando sea posible, elimine una ubicación iniciando sesión en el sitio web o \"hub\" y borrando su canal.";
+App::$strings["Use this form to drop the location if the hub is no longer operating."] = "Utilice este formulario para eliminar la dirección si el \"hub\" no está funcionando desde hace tiempo.";
+App::$strings["Unable to locate original post."] = "No ha sido posible encontrar la entrada original.";
+App::$strings["Empty post discarded."] = "La entrada vacía ha sido desechada.";
+App::$strings["Duplicate post suppressed."] = "Se ha suprimido la entrada duplicada.";
+App::$strings["System error. Post not saved."] = "Error del sistema. La entrada no se ha podido salvar.";
+App::$strings["Your comment is awaiting approval."] = "Su comentario está pendiente de aprobación.";
+App::$strings["Unable to obtain post information from database."] = "No ha sido posible obtener información de la entrada en la base de datos.";
+App::$strings["You have reached your limit of %1$.0f top level posts."] = "Ha alcanzado su límite de %1$.0f entradas en la página principal.";
+App::$strings["You have reached your limit of %1$.0f webpages."] = "Ha alcanzado su límite de %1$.0f páginas web.";
+App::$strings["No default suggestions were found."] = "No se encontraron sugerencias por defecto.";
+App::$strings["Gender: "] = "Género:";
+App::$strings["Status: "] = "Estado:";
+App::$strings["Homepage: "] = "Página personal:";
+App::$strings["Description:"] = "Descripción:";
+App::$strings["Uncensor"] = "No censurar";
+App::$strings["Censor"] = "Censurar";
+App::$strings["Public Forum:"] = "Foro público:";
+App::$strings["Keywords: "] = "Palabras clave:";
+App::$strings["Don't suggest"] = "No sugerir:";
+App::$strings["Common connections (estimated):"] = "Conexiones comunes (estimadas): ";
+App::$strings["Global Directory"] = "Directorio global:";
+App::$strings["Local Directory"] = "Directorio local:";
+App::$strings["Finding:"] = "Encontrar:";
+App::$strings["next page"] = "siguiente página";
+App::$strings["previous page"] = "página anterior";
+App::$strings["Sort options"] = "Ordenar opciones";
+App::$strings["Alphabetic"] = "Alfabético";
+App::$strings["Reverse Alphabetic"] = "Alfabético inverso";
+App::$strings["Newest to Oldest"] = "De más nuevo a más antiguo";
+App::$strings["Oldest to Newest"] = "De más antiguo a más nuevo";
+App::$strings["No entries (some entries may be hidden)."] = "Sin entradas (algunas entradas pueden estar ocultas).";
+App::$strings["Image uploaded but image cropping failed."] = "Imagen actualizada, pero el recorte de la imagen ha fallado. ";
+App::$strings["Cover Photos"] = "Imágenes de portada del perfil";
+App::$strings["Image resize failed."] = "El ajuste del tamaño de la imagen ha fallado.";
+App::$strings["Image upload failed."] = "La carga de la imagen ha fallado.";
+App::$strings["Unable to process image."] = "No ha sido posible procesar la imagen.";
+App::$strings["Photo not available."] = "Foto no disponible.";
+App::$strings["Your cover photo may be visible to anybody on the internet"] = "La foto de la portada puede ser visible para cualquiera en Internet";
+App::$strings["Upload File:"] = "Subir fichero:";
+App::$strings["Select a profile:"] = "Seleccionar un perfil:";
+App::$strings["Change Cover Photo"] = "Cambiar la foto de portada del perfil";
+App::$strings["Upload"] = "Subir";
+App::$strings["Use a photo from your albums"] = "Usar una foto de sus álbumes";
+App::$strings["Select existing photo"] = "Seleccionar una foto";
+App::$strings["Crop Image"] = "Recortar imagen";
+App::$strings["Please adjust the image cropping for optimum viewing."] = "Por favor ajuste el recorte de la imagen para una visión óptima.";
+App::$strings["Done Editing"] = "Edición completada";
App::$strings["Email address required"] = "Dirección de correo electrónico requerida";
App::$strings["No password provided"] = "No se ha proporcionado la contraseña";
App::$strings["Terms of Service not accepted"] = "No se han aceptado los Términos del servicio";
@@ -1919,192 +1933,77 @@ App::$strings["This will help to review your registration"] = "Esto ayudará a r
App::$strings["Registration"] = "Registro";
App::$strings["I have an invite code"] = "Tengo un código de invitación";
App::$strings["This site has exceeded the number of allowed daily account registrations."] = "Este sitio ha superado el número permitido de registros diarios de cuentas.";
-App::$strings["Public access denied."] = "Acceso público denegado.";
-App::$strings["Items tagged with: %s"] = "elementos etiquetados con: %s";
-App::$strings["Search results for: %s"] = "Resultados de la búsqueda para: %s";
-App::$strings["\$Projectname Server - Setup"] = "Servidor \$Projectname - Instalación";
-App::$strings["Could not connect to database."] = "No se ha podido conectar a la base de datos.";
-App::$strings["Could not connect to specified site URL. Possible SSL certificate or DNS issue."] = "No se puede conectar con la dirección del sitio indicada. Podría tratarse de un problema de SSL o DNS.";
-App::$strings["Could not create table."] = "No se puede crear la tabla.";
-App::$strings["Your site database has been installed."] = "La base de datos del sitio ha sido instalada.";
-App::$strings["You may need to import the file \"install/schema_xxx.sql\" manually using a database client."] = "Podría tener que importar manualmente el fichero \"install/schema_xxx.sql\" usando un cliente de base de datos.";
-App::$strings["Please see the file \"install/INSTALL.txt\"."] = "Por favor, lea el fichero \"install/INSTALL.txt\".";
-App::$strings["System check"] = "Verificación del sistema";
-App::$strings["Next"] = "Siguiente";
-App::$strings["Check again"] = "Verificar de nuevo";
-App::$strings["Database connection"] = "Conexión a la base de datos";
-App::$strings["In order to install \$Projectname we need to know how to connect to your database."] = "Para instalar \$Projectname es necesario saber cómo conectar con su base de datos.";
-App::$strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Por favor, contacte con el proveedor de servicios o el administrador del sitio si tiene dudas sobre estos ajustes.";
-App::$strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "La base de datos que especifique a continuación debe existir ya. Si no es así, por favor, créela antes de seguir.";
-App::$strings["Database Server Name"] = "Nombre del servidor de base de datos";
-App::$strings["Default is 127.0.0.1"] = "De forma predeterminada es 127.0.0.1";
-App::$strings["Database Port"] = "Puerto de la base de datos";
-App::$strings["Communication port number - use 0 for default"] = "Número del puerto de comunicaciones - use 0 como valor por defecto";
-App::$strings["Database Login Name"] = "Usuario de la base de datos";
-App::$strings["Database Login Password"] = "Contraseña de acceso a la base de datos";
-App::$strings["Database Name"] = "Nombre de la base de datos";
-App::$strings["Database Type"] = "Tipo de base de datos";
-App::$strings["Site administrator email address"] = "Dirección de correo electrónico del administrador del sitio";
-App::$strings["Your account email address must match this in order to use the web admin panel."] = "Su cuenta deberá usar la misma dirección de correo electrónico para poder utilizar el panel de administración web.";
-App::$strings["Website URL"] = "Dirección del sitio web";
-App::$strings["Please use SSL (https) URL if available."] = "Por favor, use SSL (https) si está disponible.";
-App::$strings["Please select a default timezone for your website"] = "Por favor, selecciones el huso horario por defecto de su sitio web";
-App::$strings["Site settings"] = "Ajustes del sitio";
-App::$strings["PHP version 8.0 or greater is required."] = "Se requiere la versión 8.0 o superior de PHP.";
-App::$strings["PHP version"] = "Versión de PHP";
-App::$strings["Could not find a command line version of PHP in the web server PATH."] = "No se puede encontrar una versión en línea de comandos de PHP en la ruta del servidor web.";
-App::$strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron."] = "Si no tiene instalada la versión de línea de comandos de PHP en su servidor, no podrá realizar envíos en segundo plano mediante cron.";
-App::$strings["PHP executable path"] = "Ruta del ejecutable PHP";
-App::$strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Introducir la ruta completa del ejecutable PHP. Puede dejar la línea en blanco para continuar la instalación.";
-App::$strings["Command line PHP"] = "PHP en línea de comandos";
-App::$strings["Unable to check command line PHP, as shell_exec() is disabled. This is required."] = "No se puede comprobar la línea de comandos PHP, ya que shell_exec() está deshabilitado. Es necesario que esté activado.";
-App::$strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "La línea de comandos PHP de su sistema no tiene activado \"register_argc_argv\".";
-App::$strings["This is required for message delivery to work."] = "Esto es necesario para que funcione la transmisión de mensajes.";
-App::$strings["PHP register_argc_argv"] = "PHP register_argc_argv";
-App::$strings["This is not sufficient to upload larger images or files. You should be able to upload at least 4 MB at once."] = "Esto no es suficiente para subir imágenes o archivos más grandes. Usted debe ser capaz de subir al menos 4 MB a la vez.";
-App::$strings["Your max allowed total upload size is set to %s. Maximum size of one file to upload is set to %s. You are allowed to upload up to %d files at once."] = "La carga máxima que se le permite subir está establecida en %s. El tamaño máximo de un fichero está establecido en %s. Está permitido subir hasta un máximo de %d ficheros de una sola vez.";
-App::$strings["You can adjust these settings in the server php.ini file."] = "Puede ajustar estos valores en el fichero php.ini de su servidor.";
-App::$strings["PHP upload limits"] = "Límites PHP de subida";
-App::$strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Error: La función \"openssl_pkey_new\" en este sistema no es capaz de general claves de cifrado.";
-App::$strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Si está en un servidor Windows, por favor, lea \"http://www.php.net/manual/en/openssl.installation.php\".";
-App::$strings["Generate encryption keys"] = "Generar claves de cifrado";
-App::$strings["libCurl PHP module"] = "módulo libCurl PHP";
-App::$strings["GD graphics PHP module"] = "módulo PHP GD graphics";
-App::$strings["OpenSSL PHP module"] = "módulo PHP OpenSSL";
-App::$strings["PDO database PHP module"] = "Módulo PHP de la base de datos PDO ";
-App::$strings["mb_string PHP module"] = "módulo PHP mb_string";
-App::$strings["xml PHP module"] = "módulo PHP xml";
-App::$strings["zip PHP module"] = "Módulo zip PHP";
-App::$strings["Apache mod_rewrite module"] = "módulo Apache mod_rewrite ";
-App::$strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Error: se necesita el módulo del servidor web Apache mod-rewrite pero no está instalado.";
-App::$strings["exec"] = "ejecutable";
-App::$strings["Error: exec is required but is either not installed or has been disabled in php.ini"] = "Error: se necesita un ejecutable pero o no se instaló o está deshabilitado en php.ini";
-App::$strings["shell_exec"] = "shell_exec";
-App::$strings["Error: shell_exec is required but is either not installed or has been disabled in php.ini"] = "Error: se necesita shell_exec pero o no se instaló o está deshabilitado en php.ini";
-App::$strings["Error: libCURL PHP module required but not installed."] = "Error: se necesita el módulo PHP libCURL pero no está instalado.";
-App::$strings["Error: GD PHP module with JPEG support or ImageMagick graphics library required but not installed."] = "Error: Se requiere el módulo GD PHP con soporte para JPEG o la biblioteca de gráficos ImageMagick, pero no está instalado.";
-App::$strings["Error: openssl PHP module required but not installed."] = "Error: el módulo PHP openssl es necesario, pero no está instalado.";
-App::$strings["Error: PDO database PHP module missing a driver for either mysql or pgsql."] = "Error: El módulo PHP de la base de datos PDO carece de un controlador para mysql o pgsql.";
-App::$strings["Error: PDO database PHP module required but not installed."] = "Error: se necesita el módulo PHP de la base de datos PDO, pero no está instalado.";
-App::$strings["Error: mb_string PHP module required but not installed."] = "Error: el módulo PHP mb_string es necesario, pero no está instalado.";
-App::$strings["Error: xml PHP module required for DAV but not installed."] = "Error: el módulo PHP xml es necesario para DAV, pero no está instalado.";
-App::$strings["Error: zip PHP module required but not installed."] = "Error: se requiere el módulo zip PHP pero no está instalado.";
-App::$strings[".htconfig.php is writable"] = ".htconfig.php tiene permisos de escritura";
-App::$strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = "El instalador web no ha podido crear un fichero llamado “.htconfig.php” en la carpeta base de su servidor.";
-App::$strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "Esto está generalmente ligado a un problema de permisos, a causa del cual el servidor web tiene prohibido modificar ficheros en su carpeta - incluso si usted mismo tiene esos permisos.";
-App::$strings["Please see install/INSTALL.txt for additional information."] = "Por favor, consulte install/INSTALL.txt para más información.";
-App::$strings["This software uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Este software hace uso del motor de plantillas Smarty3 para diseñar sus plantillas gráficas. Smarty3 compila las plantillas a PHP para acelerar la renderización.";
-App::$strings["In order to store these compiled templates, the web server needs to have write access to the directory %s under the top level web folder."] = "Para poder guardar las plantillas compiladas, el servidor web necesita permisos para acceder al directorio %s en la carpeta web principal.";
-App::$strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "Por favor, asegúrese de que el servidor web está siendo ejecutado por un usuario que tenga permisos de escritura sobre esta carpeta (por ejemplo, www-data).";
-App::$strings["Note: as a security measure, you should give the web server write access to %s only--not the template files (.tpl) that it contains."] = "Nota: como medida de seguridad, debe dar al servidor web permisos de escritura solo sobre %s - no sobre el fichero de plantilla (.tpl) que contiene.";
-App::$strings["%s is writable"] = "%s tiene permisos de escritura";
-App::$strings["This software uses the store directory to save uploaded files. The web server needs to have write access to the store directory under the top level web folder"] = "Este software utiliza el directorio de almacenamiento para guardar los ficheros subidos. El servidor web debe tener acceso de escritura a este directorio en la carpeta de nivel superior";
-App::$strings["store is writable"] = "\"store\" tiene permisos de escritura";
-App::$strings["SSL certificate cannot be validated. Fix certificate or disable https access to this site."] = "El certificado SSL no ha podido ser validado. Corrija este problema o desactive el acceso https a este sitio.";
-App::$strings["If you have https access to your website or allow connections to TCP port 443 (the https: port), you MUST use a browser-valid certificate. You MUST NOT use self-signed certificates!"] = "Si su servidor soporta conexiones cifradas SSL o si permite conexiones al puerto TCP 443 (el puerto usado por el protocolo https), debe utilizar un certificado válido. No debe usar un certificado firmado por usted mismo.";
-App::$strings["This restriction is incorporated because public posts from you may for example contain references to images on your own hub."] = "Se ha incorporado esta restricción para evitar que sus entradas públicas hagan referencia a imágenes en su propio servidor.";
-App::$strings["If your certificate is not recognized, members of other sites (who may themselves have valid certificates) will get a warning message on their own site complaining about security issues."] = "Si su certificado no ha sido reconocido, los miembros de otros sitios (con certificados válidos) recibirán mensajes de aviso en sus propios sitios web.";
-App::$strings["This can cause usability issues elsewhere (not just on your own site) so we must insist on this requirement."] = "Por razones de compatibilidad (sobre el conjunto de la red, no solo sobre su propio sitio), debemos insistir en estos requisitos.";
-App::$strings["Providers are available that issue free certificates which are browser-valid."] = "Existen varias Autoridades de Certificación que le pueden proporcionar certificados válidos.";
-App::$strings["If you are confident that the certificate is valid and signed by a trusted authority, check to see if you have failed to install an intermediate cert. These are not normally required by browsers, but are required for server-to-server communications."] = "Si se tiene la certeza de que el certificado es válido y está firmado por una autoridad de confianza, comprobar para ver si hubo un error al instalar un certificado intermedio. Estos no son normalmente requeridos por los navegadores, pero son necesarios para las comunicaciones de servidor a servidor.";
-App::$strings["SSL certificate validation"] = "validación del certificado SSL";
-App::$strings["Url rewrite in .htaccess is not working. Check your server configuration.Test: "] = "No se pueden reescribir las direcciones web en .htaccess. Compruebe la configuración de su servidor:";
-App::$strings["Url rewrite is working"] = "La reescritura de las direcciones funciona correctamente";
-App::$strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "El fichero de configuración de la base de datos .htconfig.php no se ha podido modificar. Por favor, copie el texto generado en un fichero con ese nombre en el directorio raíz de su servidor.";
-App::$strings["<h1>What next?</h1>"] = "<h1>¿Qué sigue?</h1>";
-App::$strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "IMPORTANTE: Debe crear [manualmente] una tarea programada para el \"poller\".";
-App::$strings["No connections."] = "Sin conexiones.";
-App::$strings["Visit %s's profile [%s]"] = "Visitar el perfil de %s [%s]";
-App::$strings["View Connections"] = "Ver conexiones";
-App::$strings["Public Hubs"] = "Servidores públicos";
-App::$strings["The listed hubs allow public registration for the \$Projectname network. All hubs in the network are interlinked so membership on any of them conveys membership in the network as a whole. Some hubs may require subscription or provide tiered service plans. The hub itself <strong>may</strong> provide additional details."] = "Los sitios listados permiten el registro público en la red \$Projectname. Todos los sitios de la red están vinculados entre sí, por lo que sus miembros, en ninguno de ellos, indican la pertenencia a la red en su conjunto. Algunos sitios pueden requerir suscripción o proporcionar planes de servicio por niveles. Los mismos hubs <strong>pueden</strong> proporcionar detalles adicionales.";
-App::$strings["Hub URL"] = "Dirección del hub";
-App::$strings["Access Type"] = "Tipo de acceso";
-App::$strings["Registration Policy"] = "Normas de registro";
-App::$strings["Stats"] = "Estadísticas";
-App::$strings["Software"] = "Software";
-App::$strings["Ratings"] = "Valoraciones";
-App::$strings["Rate"] = "Valorar";
-App::$strings["Posts and comments"] = "Publicaciones y comentarios";
-App::$strings["Only posts"] = "Solo publicaciones";
+App::$strings["Unable to find your hub."] = "No se puede encontrar su servidor.";
+App::$strings["Post successful."] = "Enviado con éxito.";
+App::$strings["Authorize application connection"] = "Autorizar una conexión de aplicación";
+App::$strings["Return to your app and insert this Security Code:"] = "Vuelva a su aplicación e introduzca este código de seguridad: ";
+App::$strings["Please login to continue."] = "Por favor inicie sesión para continuar.";
+App::$strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "¿Desea autorizar a esta aplicación a acceder a sus publicaciones y contactos, y/o crear nuevas publicaciones por usted?";
+App::$strings["Invalid item."] = "Elemento no válido.";
+App::$strings["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
+App::$strings["Away"] = "Ausente";
+App::$strings["Online"] = "Conectado/a";
+App::$strings["Available Apps"] = "Aplicaciones disponibles";
+App::$strings["Installed Apps"] = "Apps instaladas";
+App::$strings["Manage Apps"] = "Administrar apps";
+App::$strings["Create Custom App"] = "Crear una app personalizada";
+App::$strings["This profile photo will be visible to anybody on the internet and may be distributed to other websites."] = "Esta foto de perfil será visible para cualquier persona en Internet y podrá ser distribuida a otros sitios web.";
+App::$strings["This profile photo will be visible only to channels with permission to view this profile."] = "Esta foto de perfil sólo será visible para los canales con permiso para ver este perfil.";
+App::$strings["Use Photo for Profile"] = "Usar la fotografía para el perfil";
+App::$strings["Change Profile Photo"] = "Cambiar la foto del perfil";
+App::$strings["Reset to default"] = "Restablecer los valores por defecto";
+App::$strings["Select existing"] = "Seleccione lo que hay";
+App::$strings["Done editing"] = "Edición completada";
+App::$strings["Language App"] = "App idioma";
+App::$strings["Welcome to %s"] = "Bienvenido a %s";
+App::$strings["Invite App"] = "Solicitar una app";
+App::$strings["Register is closed"] = "El registro está cerrado";
+App::$strings["Note, the invitation code is valid up to"] = "Tenga en cuenta que el código de invitación es válido hasta ";
+App::$strings["Too many recipients for one invitation (max %d)"] = "Demasiados destinatarios para una invitación (máx %d)";
+App::$strings["No recipients for this invitation"] = "No hay destinatarios para esta invitación";
+App::$strings["(%s) : Not a real email address"] = "(%s) : No es una dirección de correo electrónica real";
+App::$strings["(%s) : Not allowed email address"] = "(%s) : Dirección de correo electrónico no permitida";
+App::$strings["(%s) : email address already in use"] = "(%s) : La dirección de correo electrónico ya está en uso";
+App::$strings["(%s) : Accepted email address"] = "(%s) : Dirección de correo electrónico aceptada";
+App::$strings["To %s : Message delivery success."] = "To %s : Entrega exitosa del mensaje.";
+App::$strings["%1\$d mail(s) sent, %2\$d mail error(s)"] = "%1\$d correo(s) enviado, %2\$d error(es) de correo";
+App::$strings["Invites not proposed by configuration"] = "Invitaciones no propuestas por la configuración";
+App::$strings["Contact the site admin"] = "Contactar con el administrador del sitio";
+App::$strings["Invites by users not enabled"] = "Invitaciones de usuarios no habilitadas";
+App::$strings["You have no more invitations available"] = "No tiene más invitaciones disponibles";
+App::$strings["Not on xchan"] = "No en xchan";
+App::$strings["All users invitation limit exceeded."] = "Se ha superado el límite de invitaciones a todos los usuarios.";
+App::$strings["Minute(s)"] = "Minuto(s)";
+App::$strings["Hour(s)"] = "Hora(s)";
+App::$strings["Day(s)"] = "Día(s)";
+App::$strings["Invitation expires after"] = "La invitación expira después de ";
+App::$strings["duration up from now"] = "duración a partir de ahora ";
+App::$strings["Invitation"] = "Invitación";
+App::$strings["Send invitations"] = "Enviar invitaciones";
+App::$strings["Invitations I am using"] = "Invitaciones que estoy utilizando ";
+App::$strings["Invitations we are using"] = "Invitaciones que usamos ";
+App::$strings["§ Note, the email(s) sent will be recorded in the system logs"] = "§ Nota: el/los correo(s) electrónicos enviados quedarán registrados en los registros del sistema";
+App::$strings["Enter email addresses, one per line:"] = "Introduzca las direcciones de correo electrónico, una por línea:";
+App::$strings["Your message:"] = "Su mensaje:";
+App::$strings["Invite template"] = "Plantilla de invitación";
+App::$strings["Subject:"] = "Asunto:";
+App::$strings["Here you may enter personal notes to the recipient(s)"] = "Aquí puede introducir notas personales para el/los destinatario(s)";
+App::$strings["Account removals are not allowed within 48 hours of changing the account password."] = "La eliminación de cuentas no está permitida hasta después de que hayan transcurrido 48 horas desde el último cambio de contraseña.";
+App::$strings["Remove This Account"] = "Eliminar esta cuenta";
+App::$strings["WARNING: "] = "ATENCIÓN:";
+App::$strings["This account and all its channels will be completely removed from the network. "] = "Esta cuenta y todos sus canales van a ser eliminados de la red.";
+App::$strings["This action is permanent and can not be undone!"] = "¡Esta acción tiene carácter definitivo y no se puede deshacer!";
+App::$strings["Please enter your password for verification:"] = "Por favor, introduzca su contraseña para su verificación:";
+App::$strings["Remove Account"] = "Eliminar cuenta";
+App::$strings["Poke somebody"] = "Dar un toque a alguien";
+App::$strings["Poke or ping somebody"] = "Dar un toque o hacer ping a alguien";
+App::$strings["Recipient"] = "Destinatario";
+App::$strings["Choose action"] = "Elegir una acción";
+App::$strings["Make this post private"] = "Convertir en privado este envío";
App::$strings["Malformed message id."] = "ID de mensaje malformado.";
-App::$strings["Insufficient permissions. Request redirected to profile page."] = "Permisos insuficientes. Petición redirigida a la página del perfil.";
-App::$strings["You must enable javascript for your browser to be able to view this content."] = "Debe habilitar javascript para poder ver este contenido en su navegador.";
-App::$strings["Invalid profile identifier."] = "Identificador del perfil no válido";
-App::$strings["Profile Visibility Editor"] = "Editor de visibilidad del perfil";
-App::$strings["Click on a contact to add or remove."] = "Pulsar en un contacto para añadirlo o eliminarlo.";
-App::$strings["Visible To"] = "Visible para";
-App::$strings["All Connections"] = "Todas las conexiones";
-App::$strings["Privacy group created."] = "El grupo de canales ha sido creado.";
-App::$strings["Could not create privacy group."] = "No se puede crear el grupo de canales";
-App::$strings["Privacy group updated."] = "Grupo de canales actualizado.";
-App::$strings["Post to this group by default"] = "Publicar en este grupo por defecto";
-App::$strings["Add new contacts to this group by default"] = "Añadir nuevos contactos a este grupo por defecto";
-App::$strings["Privacy group name"] = "Nombre del grupo";
-App::$strings["Members are visible to other channels"] = "Los miembros son visibles para otros canales";
-App::$strings["Privacy group removed."] = "Grupo de canales eliminado.";
-App::$strings["Unable to remove privacy group."] = "No se puede eliminar el grupo de canales.";
-App::$strings["Privacy Group: %s"] = "Grupo privado %s";
-App::$strings["Privacy group name: "] = "Nombre del grupo de canales:";
-App::$strings["Group members"] = "Miembros del grupo";
-App::$strings["Not in this group"] = "No en este grupo";
-App::$strings["Click a channel to toggle membership"] = "Haga clic en un canal para cambiar los miembros";
-App::$strings["This page is available only to site members"] = "Esta página está disponible sólo para los miembros del sitio";
-App::$strings["Welcome"] = "Bienvenido/a";
-App::$strings["What would you like to do?"] = "¿Qué le gustaría hacer?";
-App::$strings["Please bookmark this page if you would like to return to it in the future"] = "Por favor añada esta página a sus marcadores si desea volver a ella en el futuro.";
-App::$strings["Upload a profile photo"] = "Subir una foto de perfil";
-App::$strings["Upload a cover photo"] = "Subir una foto de portada del perfil";
-App::$strings["Edit your default profile"] = "Editar su perfil por defecto";
-App::$strings["View the channel directory"] = "Ver el directorio de canales";
-App::$strings["View/edit your channel settings"] = "Ver o modificar los ajustes de su canal";
-App::$strings["View the site or project documentation"] = "Ver el sitio o la documentación del proyecto";
-App::$strings["Visit your channel homepage"] = "Visitar la página principal de su canal";
-App::$strings["View your connections and/or add somebody whose address you already know"] = "Vea sus conexiones y/o agregue a alguien cuya dirección ya conozca";
-App::$strings["View your personal stream (this may be empty until you add some connections)"] = "Ver su \"stream\" personal (puede que esté vacío hasta que agregue algunas conexiones)";
-App::$strings["View the public stream. Warning: this content is not moderated"] = "Ver el \"stream\" público. Advertencia: este contenido no está moderado";
-App::$strings["Name is required"] = "El nombre es obligatorio";
-App::$strings["Key and Secret are required"] = "\"Key\" y \"Secret\" son obligatorios";
-App::$strings["Update"] = "Actualizar";
-App::$strings["Add application"] = "Añadir aplicación";
-App::$strings["Name of application"] = "Nombre de la aplicación";
-App::$strings["Automatically generated - change if desired. Max length 20"] = "Generado automáticamente - si lo desea, cámbielo. Longitud máxima: 20";
-App::$strings["Redirect"] = "Redirigir";
-App::$strings["Redirect URI - leave blank unless your application specifically requires this"] = "URI de redirección - dejar en blanco a menos que su aplicación específicamente lo requiera";
-App::$strings["Icon url"] = "Dirección del icono";
-App::$strings["Application not found."] = "Aplicación no encontrada.";
-App::$strings["Connected OAuth Apps"] = "Apps OAuth conectadas";
-App::$strings["Client key starts with"] = "La \"client key\" empieza por";
-App::$strings["No name"] = "Sin nombre";
-App::$strings["Remove authorization"] = "Eliminar autorización";
-App::$strings["Page link"] = "Enlace de la página";
-App::$strings["Edit Webpage"] = "Editar la página web";
+App::$strings["Reset form"] = "Reiniciar el formulario";
App::$strings["This site is not a directory server"] = "Este sitio no es un servidor de directorio";
App::$strings["This directory server requires an access token"] = "El servidor de este directorio necesita un \"token\" de acceso";
-App::$strings["Unable to locate original post."] = "No ha sido posible encontrar la entrada original.";
-App::$strings["Room not found"] = "Sala no encontrada";
-App::$strings["Leave Room"] = "Abandonar la sala";
-App::$strings["Delete Room"] = "Eliminar esta sala";
-App::$strings["I am away right now"] = "Estoy ausente momentáneamente";
-App::$strings["I am online"] = "Estoy conectado/a";
-App::$strings["Bookmark this room"] = "Añadir esta sala a Marcadores";
-App::$strings["New Chatroom"] = "Nueva sala de chat";
-App::$strings["Chatroom name"] = "Nombre de la sala de chat";
-App::$strings["Expiration of chats (minutes)"] = "Caducidad de los mensajes en los chats (en minutos)";
-App::$strings["%1\$s's Chatrooms"] = "Salas de chat de %1\$s";
-App::$strings["No chatrooms available"] = "No hay salas de chat disponibles";
-App::$strings["Add Room"] = "Añadir una sala de chat";
-App::$strings["Expiration"] = "Caducidad";
-App::$strings["min"] = "min";
-App::$strings["Event can not end before it has started."] = "Un evento no puede terminar antes de que haya comenzado.";
-App::$strings["Unable to generate preview."] = "No se puede crear la vista previa.";
-App::$strings["Event title and start time are required."] = "Se requieren el título del evento y su hora de inicio.";
-App::$strings["Event not found."] = "Evento no encontrado.";
-App::$strings["Edit event"] = "Editar evento";
-App::$strings["Delete event"] = "Borrar evento";
-App::$strings["Link to source"] = "Enlace a la fuente";
-App::$strings["calendar"] = "calendario";
-App::$strings["Failed to remove event"] = "Error al eliminar el evento";
App::$strings["Like/Dislike"] = "Me gusta/No me gusta";
App::$strings["This action is restricted to members."] = "Esta acción está restringida solo para miembros.";
App::$strings["Please <a href=\"rmagic\">login with your \$Projectname ID</a> or <a href=\"register\">register as a new \$Projectname member</a> to continue."] = "Por favor, <a href=\"rmagic\">identifíquese con su \$Projectname ID</a> o <a href=\"register\">rregístrese como un nuevo \$Projectname member</a> para continuar.";
@@ -2117,67 +2016,68 @@ App::$strings["%1\$s doesn't agree with %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s
App::$strings["%1\$s abstains from a decision on %2\$s's %3\$s"] = "%3\$s de %2\$s: %1\$s se abstiene";
App::$strings["Action completed."] = "Acción completada.";
App::$strings["Thank you."] = "Gracias.";
-App::$strings["Poke somebody"] = "Dar un toque a alguien";
-App::$strings["Poke/Prod"] = "Toque/Incitación";
-App::$strings["Poke, prod or do other things to somebody"] = "Dar un toque, incitar o hacer otras cosas a alguien";
-App::$strings["Recipient"] = "Destinatario";
-App::$strings["Choose what you wish to do to recipient"] = "Elegir qué desea enviar al destinatario";
-App::$strings["Make this post private"] = "Convertir en privado este envío";
-App::$strings["Calendar entries imported."] = "Entradas de calendario importadas.";
-App::$strings["No calendar entries found."] = "No se han encontrado entradas de calendario.";
-App::$strings["Event title"] = "Título del evento";
-App::$strings["Start date and time"] = "Fecha y hora de comienzo";
-App::$strings["End date and time"] = "Fecha y hora de finalización";
-App::$strings["Timezone:"] = "Zona horaria: ";
-App::$strings["Previous"] = "Anterior";
-App::$strings["Today"] = "Hoy";
-App::$strings["Month"] = "Mes";
-App::$strings["Week"] = "Semana";
-App::$strings["Day"] = "Día";
-App::$strings["List month"] = "Lista mensual";
-App::$strings["List week"] = "Lista semanal";
-App::$strings["List day"] = "Lista diaria";
-App::$strings["More"] = "Más";
-App::$strings["Less"] = "Menos";
-App::$strings["Select calendar"] = "Seleccionar un calendario";
-App::$strings["Delete all"] = "Eliminar todos";
-App::$strings["Sorry! Editing of recurrent events is not yet implemented."] = "¡Disculpas! La edición de eventos recurrentes aún no se ha implementado.";
-App::$strings["Could not fetch calendar resource. The selected calendar might be disabled."] = "No se ha podido obtener el recurso del calendario. Es posible que el calendario seleccionado esté desactivado.";
-App::$strings["Organisation"] = "Organización";
-App::$strings["Phone"] = "Teléfono";
-App::$strings["Instant messenger"] = "Mensajería instantánea";
-App::$strings["Website"] = "Sitio web";
-App::$strings["Address"] = "Dirección";
-App::$strings["Note"] = "Nota";
-App::$strings["Add Contact"] = "Añadir un contacto";
-App::$strings["Add Field"] = "Añadir un campo";
-App::$strings["P.O. Box"] = "Buzón de correos";
-App::$strings["Additional"] = "Adicional";
-App::$strings["Street"] = "Calle";
-App::$strings["Locality"] = "Localidad";
-App::$strings["Region"] = "Provincia, región o estado";
-App::$strings["ZIP Code"] = "Código postal";
-App::$strings["Country"] = "País";
-App::$strings["Default Calendar"] = "Calendario por defecto";
-App::$strings["Default Addressbook"] = "Agenda de direcciones por defecto";
-App::$strings["Remote privacy information not available"] = "La información sobre privacidad remota no está disponible";
-App::$strings["__ctx:acl__ Profile"] = "Perfil";
-App::$strings["Privacy group"] = "Grupo de canales";
-App::$strings["Click to copy link to this ressource for guest %s to clipboard"] = "Haga clic para copiar el enlace a este recurso para invitados %sen el portapapeles";
-App::$strings["Link copied"] = "Enlace copiado";
-App::$strings["Access"] = "Acceso";
-App::$strings["Empty post discarded."] = "La entrada vacía ha sido desechada.";
-App::$strings["Duplicate post suppressed."] = "Se ha suprimido la entrada duplicada.";
-App::$strings["System error. Post not saved."] = "Error del sistema. La entrada no se ha podido salvar.";
-App::$strings["Your comment is awaiting approval."] = "Su comentario está pendiente de aprobación.";
-App::$strings["Unable to obtain post information from database."] = "No ha sido posible obtener información de la entrada en la base de datos.";
-App::$strings["You have reached your limit of %1$.0f top level posts."] = "Ha alcanzado su límite de %1$.0f entradas en la página principal.";
-App::$strings["You have reached your limit of %1$.0f webpages."] = "Ha alcanzado su límite de %1$.0f páginas web.";
+App::$strings["Poll not found."] = "Encuesta no encontrada.";
+App::$strings["Invalid response."] = "respuesta no válida.";
+App::$strings["Response submitted. Updates may not appear instantly."] = "Respuesta enviada. Las actualizaciones pueden no aparecer al instante.";
+App::$strings["Xchan Lookup"] = "Búsqueda de canales";
+App::$strings["Lookup xchan beginning with (or webbie): "] = "Buscar un canal (o un \"webbie\") que comience por:";
+App::$strings["Not found."] = "No encontrado.";
+App::$strings["You must be logged in to see this page."] = "Debe haber iniciado sesión para poder ver esta página.";
+App::$strings["Token verification failed."] = "Ha fallado el token de verificación.";
+App::$strings["Email Verification Required"] = "Verificación obligatoria del correo electrónico";
+App::$strings["A verification token was sent to your email address [%s]. Enter that token here to complete the account verification step. Please allow a few minutes for delivery, and check your spam folder if you do not see the message."] = "Se ha enviado un token de verificación a su dirección de correo electrónico [%s]. Ingrese ese símbolo aquí para completar el paso de verificación de cuenta. Por favor, espere unos minutos para el envío, y revise su carpeta de spam si no ve el mensaje.";
+App::$strings["Resend Email"] = "Reenvío de correo electrónico";
+App::$strings["Validation token"] = "Token de validación";
+App::$strings["Posts and comments"] = "Publicaciones y comentarios";
+App::$strings["Only posts"] = "Solo publicaciones";
+App::$strings["vcard"] = "vcard";
+App::$strings["You must enable javascript for your browser to be able to view this content."] = "Debe habilitar javascript para poder ver este contenido en su navegador.";
+App::$strings["Article"] = "Artículo";
+App::$strings["Item has been removed."] = "Se ha eliminado el elemento.";
+App::$strings["Continue"] = "Continuar";
+App::$strings["Premium Channel Setup"] = "Configuración del canal premium";
+App::$strings["Enable premium channel connection restrictions"] = "Habilitar restricciones de conexión del canal premium";
+App::$strings["Please enter your restrictions or conditions, such as paypal receipt, usage guidelines, etc."] = "Por favor introduzca sus restricciones o condiciones, como recibo de paypal, normas de uso, etc.";
+App::$strings["This channel may require additional steps or acknowledgement of the following conditions prior to connecting:"] = "Este canal puede requerir antes de conectar unos pasos adicionales o el conocimiento de las siguientes condiciones:";
+App::$strings["Potential connections will then see the following text before proceeding:"] = "Las posibles conexiones verán, por tanto, el siguiente texto antes de proceder:";
+App::$strings["By continuing, I certify that I have complied with any instructions provided on this page."] = "Al continuar, certifico que he cumplido con todas las instrucciones proporcionadas en esta página.";
+App::$strings["(No specific instructions have been provided by the channel owner.)"] = "(No ha sido proporcionada ninguna instrucción específica por el propietario del canal.)";
+App::$strings["Restricted or Premium Channel"] = "Canal premium o restringido";
+App::$strings["Name and Secret are required"] = "\"Key\" y \"Secret\" son obligatorios";
+App::$strings["Add OAuth2 application"] = "Añadir aplicación OAuth2";
+App::$strings["Name of application"] = "Nombre de la aplicación";
+App::$strings["Automatically generated - change if desired. Max length 20"] = "Generado automáticamente - si lo desea, cámbielo. Longitud máxima: 20";
+App::$strings["Redirect"] = "Redirigir";
+App::$strings["Redirect URI - leave blank unless your application specifically requires this"] = "URI de redirección - dejar en blanco a menos que su aplicación específicamente lo requiera";
+App::$strings["Grant Types"] = "Tipos de permisos";
+App::$strings["leave blank unless your application sepcifically requires this"] = "Dejar en blanco a menos que su aplicación lo requiera específicamente";
+App::$strings["Authorization scope"] = "Alcance de la autorización";
+App::$strings["OAuth2 Application not found."] = "No se ha encontrado la aplicación OAuth2.";
+App::$strings["Add application"] = "Añadir aplicación";
+App::$strings["leave blank unless your application specifically requires this"] = "dejar en blanco a menos que su aplicación lo requiera específicamente";
+App::$strings["Connected OAuth2 Apps"] = "Aplicaciones OAuth2 conectadas";
+App::$strings["Client key starts with"] = "La \"client key\" empieza por";
+App::$strings["No name"] = "Sin nombre";
+App::$strings["Remove authorization"] = "Eliminar autorización";
+App::$strings["No content available for year"] = "No hay contenido disponible para el año";
+App::$strings["Export Channel"] = "Exportar el canal";
+App::$strings["Export channel"] = "Exportar canal";
+App::$strings["This will export your identity and social graph into a file which can be used to import your channel to a new hub."] = "Esto exportará su identidad y su gráfico social a un archivo que puede utilizarse para importar su canal a un nuevo hub.";
+App::$strings["Export content"] = "Exportar contenidos";
+App::$strings["This will export your posts, direct messages, articles and cards per month stored into a zip file per year. Months with no posts will be dismissed."] = "Esto exportará sus posts, mensajes directos, artículos y fichas por mes almacenados en un archivo zip por año. Los meses sin publicaciones serán descartados.";
+App::$strings["Export wikis"] = "Exportar wikis";
+App::$strings["This will export your wikis and wiki pages."] = "Esto exportará sus wikis y páginas wiki.";
+App::$strings["Export webpages"] = "Exportar páginas web";
+App::$strings["This will export your webpages and menus."] = "Esto exportará sus páginas web y menús.";
+App::$strings["Export channel calendar"] = "Exportar el calendario del canal";
+App::$strings["This will export your channel calendar events and associated items. CalDAV calendars are not included."] = "Esto exportará los eventos del calendario de su canal y los elementos asociados. Los calendarios CalDAV no están incluidos.";
+App::$strings["Export chatrooms"] = "Exportar salas de chat";
+App::$strings["This will export your chatrooms. Chat history is dismissed."] = "Esto exportará sus chats. Se descarta el historial de chats.";
+App::$strings["This export can be imported or restored by visiting <a href=\"%1\$s\">%2\$s</a> on any site containing your channel."] = "Esta exportación puede ser importada o restaurada visitando <a href=\"%1\$s\">%2\$s</a> cualquier sitio que contenga su canal.";
App::$strings["Menu not found."] = "Menú no encontrado";
App::$strings["Unable to create element."] = "No se puede crear el elemento.";
App::$strings["Unable to update menu element."] = "No es posible actualizar el elemento del menú.";
App::$strings["Unable to add menu element."] = "No es posible añadir el elemento al menú";
-App::$strings["Not found."] = "No encontrado.";
App::$strings["Menu Item Permissions"] = "Permisos del elemento del menú";
App::$strings["(click to open/close)"] = "(pulsar para abrir o cerrar)";
App::$strings["Link Name"] = "Nombre del enlace";
@@ -2204,116 +2104,437 @@ App::$strings["Menu item deleted."] = "Este elemento del menú ha sido borrado";
App::$strings["Menu item could not be deleted."] = "Este elemento del menú no puede ser borrado.";
App::$strings["Edit Menu Element"] = "Editar elemento del menú";
App::$strings["Link text"] = "Texto del enlace";
-App::$strings["vcard"] = "vcard";
-App::$strings["Files: shared with me"] = "Ficheros: compartidos conmigo";
-App::$strings["NEW"] = "NUEVO";
-App::$strings["Last Modified"] = "Última modificación";
-App::$strings["Remove all files"] = "Eliminar todos los ficheros";
-App::$strings["Remove this file"] = "Eliminar este fichero";
-App::$strings["Documentation Search"] = "Búsqueda de Documentación";
-App::$strings["Members"] = "Miembros";
-App::$strings["Administrators"] = "Administradores";
-App::$strings["Developers"] = "Desarrolladores";
-App::$strings["Tutorials"] = "Tutoriales";
-App::$strings["\$Projectname Documentation"] = "Documentación de \$Projectname";
-App::$strings["Contents"] = "Contenidos";
-App::$strings["Import Webpage Elements"] = "Importar elementos de una página web";
-App::$strings["Import selected"] = "Importar elementos seleccionados";
-App::$strings["Export Webpage Elements"] = "Exportar elementos de una página web";
-App::$strings["Export selected"] = "Exportar los elementos seleccionados";
-App::$strings["Actions"] = "Acciones";
-App::$strings["Page Link"] = "Vínculo de la página";
-App::$strings["Page Title"] = "Título de página";
+App::$strings["No more system notifications."] = "No hay más notificaciones del sistema";
+App::$strings["System Notifications"] = "Notificaciones del sistema";
+App::$strings["App installed."] = "Aplicación instalada.";
+App::$strings["Malformed app."] = "Aplicación con errores";
+App::$strings["Embed code"] = "Código incorporado";
+App::$strings["Edit App"] = "Modificar la aplicación";
+App::$strings["Create App"] = "Crear una aplicación";
+App::$strings["Name of app"] = "Nombre de la aplicación";
+App::$strings["Location (URL) of app"] = "Dirección (URL) de la aplicación";
+App::$strings["Photo icon URL"] = "Dirección del icono";
+App::$strings["80 x 80 pixels - optional"] = "80 x 80 pixels - opcional";
+App::$strings["Categories (optional, comma separated list)"] = "Temas (opcional, lista separada por comas)";
+App::$strings["Version ID"] = "Versión";
+App::$strings["Price of app"] = "Precio de la aplicación";
+App::$strings["Location (URL) to purchase app"] = "Dirección (URL) donde adquirir la aplicación";
+App::$strings["Layout Name"] = "Nombre de la plantilla";
+App::$strings["Layout Description (Optional)"] = "Descripción de la plantilla (opcional)";
+App::$strings["Create"] = "Crear";
+App::$strings["Comanche page description language help"] = "Página de ayuda del lenguaje de descripción de páginas (PDL) Comanche";
+App::$strings["Layout Description"] = "Descripción de la plantilla";
App::$strings["Created"] = "Creado";
App::$strings["Edited"] = "Editado";
-App::$strings["Invalid file type."] = "Tipo de fichero no válido.";
-App::$strings["Error opening zip file"] = "Error al abrir el fichero comprimido zip";
-App::$strings["Invalid folder path."] = "La ruta de la carpeta no es válida.";
-App::$strings["No webpage elements detected."] = "No se han detectado elementos de ninguna página web.";
-App::$strings["Import complete."] = "Importación completada.";
-App::$strings["Deprecated!"] = "¡Obsoleto!";
-App::$strings["Permission Denied."] = "Permiso denegado";
-App::$strings["Edit file permissions"] = "Modificar los permisos del fichero";
-App::$strings["Include all files and sub folders"] = "Incluir todos los ficheros y subcarpetas";
-App::$strings["Return to file list"] = "Volver a la lista de ficheros";
-App::$strings["Copy/paste this code to attach file to a post"] = "Copiar/pegar este código para adjuntar el fichero al envío";
-App::$strings["Copy/paste this URL to link file from a web page"] = "Copiar/pegar esta dirección para enlazar el fichero desde una página web";
-App::$strings["Share this file"] = "Compartir este fichero";
-App::$strings["Show URL to this file"] = "Mostrar la dirección de este fichero";
-App::$strings["Show in your contacts shared folder"] = "Mostrar en la carpeta compartida con sus contactos";
-App::$strings["Tag removed"] = "Etiqueta eliminada.";
-App::$strings["Remove Item Tag"] = "Eliminar etiqueta del elemento.";
-App::$strings["Select a tag to remove: "] = "Seleccionar una etiqueta para eliminar:";
-App::$strings["Continue"] = "Continuar";
-App::$strings["Premium Channel Setup"] = "Configuración del canal premium";
-App::$strings["Enable premium channel connection restrictions"] = "Habilitar restricciones de conexión del canal premium";
-App::$strings["Please enter your restrictions or conditions, such as paypal receipt, usage guidelines, etc."] = "Por favor introduzca sus restricciones o condiciones, como recibo de paypal, normas de uso, etc.";
-App::$strings["This channel may require additional steps or acknowledgement of the following conditions prior to connecting:"] = "Este canal puede requerir antes de conectar unos pasos adicionales o el conocimiento de las siguientes condiciones:";
-App::$strings["Potential connections will then see the following text before proceeding:"] = "Las posibles conexiones verán, por tanto, el siguiente texto antes de proceder:";
-App::$strings["By continuing, I certify that I have complied with any instructions provided on this page."] = "Al continuar, certifico que he cumplido con todas las instrucciones proporcionadas en esta página.";
-App::$strings["(No specific instructions have been provided by the channel owner.)"] = "(No ha sido proporcionada ninguna instrucción específica por el propietario del canal.)";
-App::$strings["Restricted or Premium Channel"] = "Canal premium o restringido";
-App::$strings["Not found"] = "No encontrado";
-App::$strings["Unknown error"] = "Error desconocido";
+App::$strings["Download PDL file"] = "Descargar el fichero PDL";
App::$strings["Post repeated"] = "Entrada repetida";
-App::$strings["network"] = "red";
-App::$strings["Item is not editable"] = "El elemento no es editable";
-App::$strings["Edit post"] = "Editar la entrada";
-App::$strings["Post not found."] = "Mensaje no encontrado.";
-App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s ha etiquetado %3\$s de %2\$s con %4\$s";
+App::$strings["Block Name"] = "Nombre del bloque";
+App::$strings["Block Title"] = "Título del bloque";
App::$strings["Unknown App"] = "Aplicación desconocida";
App::$strings["Authorize"] = "Autorizar";
App::$strings["Do you authorize the app %s to access your channel data?"] = "¿Autoriza a la aplicación %s a acceder a los datos de su canal?";
App::$strings["Deny"] = "Rechazar";
-App::$strings["Queue Statistics"] = "Estadísticas de la cola";
-App::$strings["Total Entries"] = "Total de entradas";
-App::$strings["Priority"] = "Prioridad";
-App::$strings["Destination URL"] = "Dirección de destino";
-App::$strings["Mark hub permanently offline"] = "Marcar el servidor como permanentemente fuera de línea";
-App::$strings["Retry delivery to this hub"] = "Reintentar la entrega a este hub";
-App::$strings["Empty queue for this hub"] = "Vaciar la cola para este servidor";
-App::$strings["Last known contact"] = "Último contacto conocido";
-App::$strings["Theme settings updated."] = "Ajustes del tema actualizados.";
-App::$strings["No themes found."] = "No se han encontrado temas.";
-App::$strings["Disable"] = "Desactivar";
-App::$strings["Enable"] = "Activar";
-App::$strings["Screenshot"] = "Instantánea de pantalla";
+App::$strings["Connection added."] = "Se ha incorporado una conexión.";
+App::$strings["Active"] = "Activo/a";
+App::$strings["Blocked"] = "Bloqueadas";
+App::$strings["Ignored"] = "Ignoradas";
+App::$strings["Hidden"] = "Ocultas";
+App::$strings["Archived/Unreachable"] = "Archivadas o inaccesibles";
+App::$strings["New"] = "Nuevas";
+App::$strings["All"] = "Todos/as";
+App::$strings["Active Connections"] = "Conexiones activas";
+App::$strings["Show active connections"] = "Mostrar las conexiones activas";
+App::$strings["New Connections"] = "Nuevas conexiones";
+App::$strings["Show pending (new) connections"] = "Mostrar conexiones (nuevas) pendientes";
+App::$strings["Only show blocked connections"] = "Mostrar solo las conexiones bloqueadas";
+App::$strings["Only show ignored connections"] = "Mostrar solo conexiones ignoradas";
+App::$strings["Only show archived/unreachable connections"] = "Mostrar solo las conexiones archivadas o no localizables";
+App::$strings["Only show hidden connections"] = "Mostrar solo las conexiones ocultas";
+App::$strings["All Connections"] = "Todas las conexiones";
+App::$strings["Show all connections"] = "Mostrar todas las conexiones";
+App::$strings["Pending approval"] = "Pendiente de aprobación";
+App::$strings["Archived"] = "Archivadas";
+App::$strings["Not connected at this location"] = "No está conectado/a en esta ubicación";
+App::$strings["%1\$s [%2\$s]"] = "%1\$s [%2\$s]";
+App::$strings["Edit connection"] = "Editar conexión";
+App::$strings["Delete connection"] = "Eliminar conexión";
+App::$strings["Channel address"] = "Dirección del canal";
+App::$strings["Call"] = "Llamar";
+App::$strings["Status"] = "Estado";
+App::$strings["Connected"] = "Conectado/a";
+App::$strings["Approve connection"] = "Aprobar esta conexión";
+App::$strings["Ignore connection"] = "Ignorar esta conexión";
+App::$strings["Ignore"] = "Ignorar";
+App::$strings["Recent activity"] = "Actividad reciente";
+App::$strings["Connect at this location"] = "Conectar en esta ubicación ";
+App::$strings["You have %1$.0f of %2$.0f allowed connections."] = "Tiene %1$.0f de %2$.0f conexiones permitidas.";
+App::$strings["Contact role"] = "Rol del contacto";
+App::$strings["Search your connections"] = "Buscar sus conexiones";
+App::$strings["Contact search"] = "Buscar contacto";
+App::$strings["This is a group/forum channel"] = "Este es un canal de grupo/foro";
+App::$strings["Permissions denied."] = "Permisos denegados.";
+App::$strings["Link to source"] = "Enlace a la fuente";
+App::$strings["Previous"] = "Anterior";
+App::$strings["Next"] = "Siguiente";
+App::$strings["Today"] = "Hoy";
+App::$strings["Not a zip file or zip file corrupted."] = "No es un archivo zip o un archivo zip corrupto.";
+App::$strings["Import Items"] = "Importar elementos";
+App::$strings["Use this form to import existing posts and content from an export file."] = "Utilice este formulario para importar entradas y contenido desde un archivo de exportación.";
+App::$strings["File to Upload"] = "Fichero para subir";
+App::$strings["Imported file is empty."] = "El fichero importado está vacío.";
+App::$strings["Content import completed"] = "Importación de contenidos completada";
+App::$strings["Chatroom import completed"] = "Importación de salas de chat completada";
+App::$strings["Channel calendar import 1/2 completed"] = "Importación del calendario del canal 1/2 completada";
+App::$strings["Channel calendar import 2/2 completed"] = "Importación del calendario del canal 2/2 completada";
+App::$strings["Menu import completed"] = "Importación de menús completada";
+App::$strings["Wiki import completed"] = "Importación de wikis completada";
+App::$strings["Webpages import completed"] = "Importación de páginas web completada";
+App::$strings["Bookmark added"] = "Marcador añadido";
+App::$strings["My Connections Bookmarks"] = "Marcadores de mis conexiones";
+App::$strings["Edit Layout"] = "Modificar la plantilla";
+App::$strings["Name is required"] = "El nombre es obligatorio";
+App::$strings["Key and Secret are required"] = "\"Key\" y \"Secret\" son obligatorios";
+App::$strings["Icon url"] = "Dirección del icono";
+App::$strings["Application not found."] = "Aplicación no encontrada.";
+App::$strings["Connected OAuth Apps"] = "Apps OAuth conectadas";
+App::$strings["Contact role deleted."] = "Rol de contacto eliminado.";
+App::$strings["Permission category name is required."] = "El nombre de la categoría de permiso es obligatorio.";
+App::$strings["Contact role saved."] = "Rol de contacto guardado.";
+App::$strings["Role to assign affected contacts and default role to"] = "Rol a asignar a los contactos afectados y rol por defecto";
+App::$strings["Role to assign affected contacts to"] = "Rol al que asignar los contactos afectados";
+App::$strings["Assign this role to"] = "Asigne este rol a ";
+App::$strings["All my contacts"] = "Todos mis contactos";
+App::$strings["Automatically assign this role to new contacts"] = "Asignar automáticamente este rol a los nuevos contactos";
+App::$strings["Role name"] = "Nombre del rol ";
+App::$strings["System role - not editable"] = "Rol de sistema - no editable";
+App::$strings["Deleting"] = "Eliminación";
+App::$strings["inherited"] = "heredado";
+App::$strings["Role Permissions"] = "Permisos de rol";
+App::$strings["Some permissions may be inherited from your <a href=\"settings\">channel role</a>, which have higher priority than contact role settings."] = "Algunos permisos pueden ser heredados de su <a href=\"settings\">rol de canal</a>, que tienen mayor prioridad que la configuración del rol de contacto.";
+App::$strings["Unable to update menu."] = "No se puede actualizar el menú.";
+App::$strings["Unable to create menu."] = "No se puede crear el menú.";
+App::$strings["Menu Name"] = "Nombre del menú";
+App::$strings["Unique name (not visible on webpage) - required"] = "Nombre único (no será visible en la página web) - requerido";
+App::$strings["Menu Title"] = "Título del menú";
+App::$strings["Visible on webpage - leave empty for no title"] = "Visible en la página web - no ponga nada si no desea un título";
+App::$strings["Allow Bookmarks"] = "Permitir marcadores";
+App::$strings["Menu may be used to store saved bookmarks"] = "El menú se puede usar para guardar marcadores";
+App::$strings["Submit and proceed"] = "Enviar y proceder";
+App::$strings["Bookmarks allowed"] = "Marcadores permitidos";
+App::$strings["Delete this menu"] = "Borrar este menú";
+App::$strings["Edit menu contents"] = "Editar los contenidos del menú";
+App::$strings["Edit this menu"] = "Modificar este menú";
+App::$strings["Menu could not be deleted."] = "El menú no puede ser eliminado.";
+App::$strings["Edit Menu"] = "Modificar el menú";
+App::$strings["Add or remove entries to this menu"] = "Añadir o quitar entradas en este menú";
+App::$strings["Menu name"] = "Nombre del menú";
+App::$strings["Must be unique, only seen by you"] = "Debe ser único, solo será visible para usted";
+App::$strings["Menu title"] = "Título del menú";
+App::$strings["Menu title as seen by others"] = "El título del menú tal como será visto por los demás";
+App::$strings["Allow bookmarks"] = "Permitir marcadores";
+App::$strings["Set your current mood and tell your friends"] = "Describir su estado de ánimo para comunicárselo a sus amigos";
+App::$strings["View Photo"] = "Ver foto";
+App::$strings["Edit Album"] = "Editar álbum";
+App::$strings["Authentication failed."] = "Falló la autenticación.";
+App::$strings["This page is available only to site members"] = "Esta página está disponible sólo para los miembros del sitio";
+App::$strings["Welcome"] = "Bienvenido/a";
+App::$strings["What would you like to do?"] = "¿Qué le gustaría hacer?";
+App::$strings["Please bookmark this page if you would like to return to it in the future"] = "Por favor añada esta página a sus marcadores si desea volver a ella en el futuro.";
+App::$strings["Upload a profile photo"] = "Subir una foto de perfil";
+App::$strings["Upload a cover photo"] = "Subir una foto de portada del perfil";
+App::$strings["Edit your default profile"] = "Editar su perfil por defecto";
+App::$strings["View friend suggestions"] = "Ver sugerencias de amistad";
+App::$strings["View the channel directory"] = "Ver el directorio de canales";
+App::$strings["View/edit your channel settings"] = "Ver o modificar los ajustes de su canal";
+App::$strings["View the site or project documentation"] = "Ver el sitio o la documentación del proyecto";
+App::$strings["Visit your channel homepage"] = "Visitar la página principal de su canal";
+App::$strings["View your connections and/or add somebody whose address you already know"] = "Vea sus conexiones y/o agregue a alguien cuya dirección ya conozca";
+App::$strings["View your personal stream (this may be empty until you add some connections)"] = "Ver su \"stream\" personal (puede que esté vacío hasta que agregue algunas conexiones)";
+App::$strings["View the public stream. Warning: this content is not moderated"] = "Ver el \"stream\" público. Advertencia: este contenido no está moderado";
+App::$strings["Insufficient permissions. Request redirected to profile page."] = "Permisos insuficientes. Petición redirigida a la página del perfil.";
+App::$strings["Search Results For:"] = "Buscar resultados para:";
+App::$strings["No valid account found."] = "No se ha encontrado una cuenta válida.";
+App::$strings["Password reset request issued. Check your email."] = "Se ha recibido una solicitud de restablecimiento de contraseña. Consulte su correo electrónico.";
+App::$strings["Site Member (%s)"] = "Usuario del sitio (%s)";
+App::$strings["Password reset requested at %s"] = "Se ha solicitado restablecer la contraseña en %s";
+App::$strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "La solicitud no ha podido ser verificada. (Puede que la haya enviado con anterioridad) El restablecimiento de la contraseña ha fallado.";
+App::$strings["Your password has been reset as requested."] = "Su contraseña ha sido restablecida según lo solicitó.";
+App::$strings["Your new password is"] = "Su nueva contraseña es";
+App::$strings["Save or copy your new password - and then"] = "Guarde o copie su nueva contraseña - y después";
+App::$strings["click here to login"] = "pulse aquí para conectarse";
+App::$strings["Your password may be changed from the <em>Settings</em> page after successful login."] = "Puede cambiar la contraseña en la página <em>Ajustes</em> una vez iniciada la sesión.";
+App::$strings["Your password has changed at %s"] = "Su contraseña en %s ha sido cambiada";
+App::$strings["Forgot your Password?"] = "¿Ha olvidado su contraseña?";
+App::$strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Introduzca y envíe su dirección de correo electrónico para el restablecimiento de su contraseña. Luego revise su correo para obtener más instrucciones.";
+App::$strings["Email Address"] = "Dirección de correo electrónico";
+App::$strings["Reset"] = "Reiniciar";
+App::$strings["Nothing to import."] = "No hay nada para importar.";
+App::$strings["Unable to download data from old server"] = "No se han podido descargar datos de su antiguo servidor";
+App::$strings["Your service plan only allows %d channels."] = "Su paquete de servicios solo permite %d canales.";
+App::$strings["No channel. Import failed."] = "No hay canal. La importación ha fallado";
+App::$strings["Automatic content and files import was not possible due to API version incompatiblity. Please import content and files manually!"] = "La importación automática de contenidos y archivos no fue posible debido a la incompatibilidad de la versión de la API. Por favor, importe el contenido y los archivos manualmente.";
+App::$strings["You must be logged in to use this feature."] = "Debe estar registrado para poder usar esta funcionalidad.";
+App::$strings["Channel Import"] = "Importar canal";
+App::$strings["Use this form to import an existing channel from a different server/hub. You may retrieve the channel identity from the old server/hub via the network or provide an export file."] = "Emplee este formulario para importar un canal desde un servidor/hub diferente. Puede recuperar el canal desde el antiguo servidor/hub a través de la red o proporcionando un fichero de exportación.";
+App::$strings["Or provide the old server/hub details"] = "O proporcione los detalles de su antiguo servidor/hub";
+App::$strings["Your old identity address (xyz@example.com)"] = "Su identidad en el antiguo servidor (canal@ejemplo.com)";
+App::$strings["Your old login email address"] = "Su antigua dirección de correo electrónico";
+App::$strings["Your old login password"] = "Su antigua contraseña";
+App::$strings["Import your items and files (limited by available memory)"] = "Importar sus artículos y archivos (limitado por la memoria disponible)";
+App::$strings["For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media."] = "Para cualquiera de las opciones, elija si hacer de este servidor su nueva dirección primaria, o si su antigua dirección debe continuar con este papel. Usted podrá publicar desde cualquier ubicación, pero sólo una puede estar marcada como la ubicación principal para los ficheros, fotos y otras imágenes o vídeos.";
+App::$strings["Make this hub my primary location"] = "Convertir este servidor en mi ubicación primaria";
+App::$strings["Move this channel (disable all previous locations)"] = "Mover este canal (desactivar todas las ubicaciones anteriores)";
+App::$strings["Use this channel nickname instead of the one provided"] = "Usa este alias de canal en lugar del que se proporciona";
+App::$strings["Leave blank to keep your existing channel nickname. You will be randomly assigned a similar nickname if either name is already allocated on this site."] = "Dejar en blanco para mantener su alias de canal . Se le asignará aleatoriamente uno similar si cualquiera de los dos nombres ya está asignado en este sitio.";
+App::$strings["This process may take several minutes to complete. Please submit the form only once and leave this page open until finished."] = "Este proceso puede tardar varios minutos en completarse. Por favor envíe el formulario una sola vez y mantenga esta página abierta hasta que termine.";
+App::$strings["No connections."] = "Sin conexiones.";
+App::$strings["Visit %s's profile [%s]"] = "Visitar el perfil de %s [%s]";
+App::$strings["View Connections"] = "Ver conexiones";
+App::$strings["Edit post"] = "Editar la entrada";
+App::$strings["This channel is limited to %d tokens"] = "Este canal tiene un límite de %d tokens";
+App::$strings["Name and Password are required."] = "Se requiere el nombre y la contraseña.";
+App::$strings["Token saved."] = "Token salvado.";
+App::$strings["Use this form to create temporary access identifiers to share things with non-members. These identities may be used in privacy groups and visitors may login using these credentials to access private content."] = "Utilice este formulario para crear identificadores de acceso temporal para compartir cosas con los no miembros. Estas identidades se pueden usar en los grupos de canales y así los visitantes pueden iniciar sesión, utilizando estas credenciales, para acceder a su contenido privado.";
+App::$strings["Please select a role for this guest!"] = "Por favor, seleccione un rol para este invitado";
+App::$strings["Select a role for this guest"] = "Seleccione un rol para este invitado";
+App::$strings["Login Name"] = "Nombre de inicio de sesión";
+App::$strings["Login Password"] = "Contraseña de inicio de sesión";
+App::$strings["Expires (yyyy-mm-dd)"] = "Expira (aaaa-mm-dd)";
+App::$strings["File not found."] = "Fichero no encontrado.";
+App::$strings["Can not copy folder into itself."] = "No se puede copiar la carpeta en sí misma.";
+App::$strings["Can not move folder \"%s\" into itself."] = "No se puede mover la carpeta\"%s\" en sí misma.";
+App::$strings["Documentation Search"] = "Búsqueda de Documentación";
+App::$strings["Members"] = "Miembros";
+App::$strings["Administrators"] = "Administradores";
+App::$strings["Developers"] = "Desarrolladores";
+App::$strings["Tutorials"] = "Tutoriales";
+App::$strings["\$Projectname Documentation"] = "Documentación de \$Projectname";
+App::$strings["Contents"] = "Contenidos";
+App::$strings["This setting requires special processing and editing has been blocked."] = "Este ajuste necesita de un proceso especial y la edición ha sido bloqueada.";
+App::$strings["Configuration Editor"] = "Editor de configuración";
+App::$strings["Warning: Changing some settings could render your channel inoperable. Please leave this page unless you are comfortable with and knowledgeable about how to correctly use this feature."] = "Atención: El cambio de algunos ajustes puede volver inutilizable su canal. Por favor, abandone la página excepto que esté seguro y sepa cómo usar correctamente esta característica.";
+App::$strings["Room not found"] = "Sala no encontrada";
+App::$strings["Leave Room"] = "Abandonar la sala";
+App::$strings["Delete Room"] = "Eliminar esta sala";
+App::$strings["I am away right now"] = "Estoy ausente momentáneamente";
+App::$strings["I am online"] = "Estoy conectado/a";
+App::$strings["Bookmark this room"] = "Añadir esta sala a Marcadores";
+App::$strings["New Chatroom"] = "Nueva sala de chat";
+App::$strings["Chatroom name"] = "Nombre de la sala de chat";
+App::$strings["Expiration of chats (minutes)"] = "Caducidad de los mensajes en los chats (en minutos)";
+App::$strings["%1\$s's Chatrooms"] = "Salas de chat de %1\$s";
+App::$strings["No chatrooms available"] = "No hay salas de chat disponibles";
+App::$strings["Add Room"] = "Añadir una sala de chat";
+App::$strings["Expiration"] = "Caducidad";
+App::$strings["min"] = "min";
+App::$strings["No such group"] = "No se encuentra el grupo";
+App::$strings["No such channel"] = "No se encuentra el canal";
+App::$strings["Privacy group is empty"] = "El grupo de canales está vacío";
+App::$strings["Privacy group: "] = "Grupo de canales: ";
+App::$strings["Invalid message"] = "Mensaje no válido";
+App::$strings["no results"] = "sin resultados";
+App::$strings["channel sync processed"] = "se ha realizado la sincronización del canal";
+App::$strings["queued"] = "encolado";
+App::$strings["posted"] = "enviado";
+App::$strings["accepted for delivery"] = "aceptado para el envío";
+App::$strings["updated"] = "actualizado";
+App::$strings["update ignored"] = "actualización ignorada";
+App::$strings["permission denied"] = "permiso denegado";
+App::$strings["recipient not found"] = "destinatario no encontrado";
+App::$strings["Delivery report for %1\$s"] = "Informe de entrega para %1\$s";
+App::$strings["Redeliver"] = "Volver a enviar";
+App::$strings["Affinity Tool settings updated."] = "Actualización de los ajustes de Affinity Tool.";
+App::$strings["The numbers below represent the minimum and maximum slider default positions for your network/stream page as a percentage."] = "Los números que aparecen a continuación representan las posiciones predeterminadas mínimas y máximas de los controles deslizantes para su red/stream en forma de porcentaje.";
+App::$strings["Default maximum affinity level"] = "Nivel máximo de afinidad por defecto";
+App::$strings["0-99 default 99"] = "0-99 por defecto 99";
+App::$strings["Default minimum affinity level"] = "Nivel mínimo de afinidad por defecto";
+App::$strings["0-99 - default 0"] = "0-99 - por defecto 0";
+App::$strings["Persistent affinity levels"] = "Niveles de afinidad persistentes";
+App::$strings["If disabled the max and min levels will be reset to default after page reload"] = "Si está desactivado, los niveles máximo y mínimo se restablecerán a los valores predeterminados después de recargar la página.";
+App::$strings["Affinity Tool Settings"] = "Ajustes de Affinity Tool";
+App::$strings["Entry censored"] = "Entrada censurada";
+App::$strings["Entry uncensored"] = "Entrada sin censurar";
+App::$strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s está siguiendo %3\$s de %2\$s";
+App::$strings["%1\$s stopped following %2\$s's %3\$s"] = "%1\$s ha dejado de seguir %3\$s de %2\$s";
+App::$strings["Failed to create source. No channel selected."] = "No se ha podido crear el origen de los contenidos. No ha sido seleccionado ningún canal.";
+App::$strings["Source created."] = "Fuente creada.";
+App::$strings["Source updated."] = "Fuente actualizada.";
+App::$strings["*"] = "*";
+App::$strings["Manage remote sources of content for your channel."] = "Gestionar contenido de origen remoto para su canal.";
+App::$strings["New Source"] = "Nueva fuente";
+App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importar todo el contenido o una selección de los siguientes canales en este canal y distribuirlo de acuerdo con sus ajustes.";
+App::$strings["Only import content with these words (one per line)"] = "Importar solo contenido que contenga estas palabras (una por línea)";
+App::$strings["Leave blank to import all public content"] = "Dejar en blanco para importar todo el contenido público";
+App::$strings["Channel Name"] = "Nombre del canal";
+App::$strings["Add the following categories to posts imported from this source (comma separated)"] = "Añadir los temas siguientes a las entradas importadas de esta fuente (separadas por comas)";
+App::$strings["Resend posts with this channel as author"] = "Reenviar mensajes con este canal como autor";
+App::$strings["Copyrights may apply"] = "Se pueden aplicar los derechos de autor";
+App::$strings["Source not found."] = "Fuente no encontrada";
+App::$strings["Edit Source"] = "Editar fuente";
+App::$strings["Delete Source"] = "Eliminar fuente";
+App::$strings["Source removed"] = "Fuente eliminada";
+App::$strings["Unable to remove source."] = "No se puede eliminar la fuente.";
+App::$strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "No hay sugerencias disponibles. Si es un sitio nuevo, espere 24 horas y pruebe de nuevo.";
+App::$strings["Ignore/Hide"] = "Ignorar/Ocultar";
+App::$strings["Channel name changes are not allowed within 48 hours of changing the account password."] = "Los cambios en el nombre de un canal no está permitida hasta pasadas 48 horas desde el cambio de contraseña de la cuenta.";
+App::$strings["Change channel nickname/address"] = "Cambiar el alias o la dirección del canal";
+App::$strings["Any/all connections on other networks will be lost!"] = "¡Cualquier/todas las conexiones en otras redes se perderán!";
+App::$strings["New channel address"] = "Nueva dirección del canal";
+App::$strings["Rename Channel"] = "Renombrar el canal";
+App::$strings["Email resent"] = "Correo electrónico reenviado";
+App::$strings["Email resend failed"] = "Fallo en el reenvío del correo electrónico";
+App::$strings["Verification successful"] = "¡Verificación exitosa!";
+App::$strings["Account successfull created"] = "Cuenta creada con éxito";
+App::$strings["Channel successfull created"] = "Canal creado con éxito";
+App::$strings["Automatic channel creation failed. Please create a channel."] = "La creación automática de canales ha fallado. Por favor, cree un canal.";
+App::$strings["Account creation error"] = "Error en la creación de la cuenta";
+App::$strings["Verify failed"] = "Verificación fallida";
+App::$strings["Token verification failed"] = "Ha fallado el token de verificación.";
+App::$strings["Request not inside time frame"] = "Solicitud fuera de plazo";
+App::$strings["Identity unknown"] = "Identidad desconocida";
+App::$strings["dId2 mistaken"] = "did2 equivocado/a";
+App::$strings["Your Registration ID"] = "Su ID de registro";
+App::$strings["Registration verification"] = "Verificación del registro";
+App::$strings["Hold on, you can start verification in"] = "Espere, puede empezar la verificación en ";
+App::$strings["Please remember your verification token for ID"] = "Por favor, recuerde su token de verificación para la identificación";
+App::$strings["Token validity"] = "Validez del token";
+App::$strings["Resend email"] = "Reenvío de correo electrónico";
+App::$strings["Registration status"] = "Estado del registro";
+App::$strings["Verification successful!"] = "¡Verificación exitosa!";
+App::$strings["Your login ID is"] = "Su ID de acceso es";
+App::$strings["After your account has been approved by our administrator you will be able to login with your login ID and your provided password."] = "Una vez que su cuenta haya sido aprobada por nuestro administrador, podrá iniciar sesión con su ID de acceso y la contraseña proporcionada.";
+App::$strings["Registration request revoked"] = "Solicitud de registro anulada";
+App::$strings["Sorry for any inconvience. Thank you for your response."] = "Disculpe las molestias. Gracias por su respuesta.";
+App::$strings["Please enter your verification token for ID"] = "Por favor, introduzca su token de verificación para la identificación";
+App::$strings["Please check your email!"] = "¡Por favor, compruebe su correo electrónico!";
+App::$strings["Verification token"] = "Token de verificación ";
+App::$strings["ID expired"] = "ID caducada";
+App::$strings["You will require the verification token for ID"] = "Necesitará el token de verificación para identificarse";
+App::$strings["Unknown or expired ID"] = "ID desconocida o caducada";
+App::$strings["dId2 malformed"] = "did2 malformado/a";
+App::$strings["toggle full screen mode"] = "cambiar al modo de pantalla completa";
+App::$strings["Could not access contact record."] = "No se ha podido acceder al registro de contacto.";
+App::$strings["Could not locate selected profile."] = "No se ha podido localizar el perfil seleccionado.";
+App::$strings["Connection updated."] = "Conexión actualizada.";
+App::$strings["Failed to update connection record."] = "Error al actualizar el registro de la conexión.";
+App::$strings["is now connected to"] = "ahora está conectado/a";
+App::$strings["Could not access address book record."] = "No se pudo acceder al registro en su libreta de direcciones.";
+App::$strings["Refresh failed - channel is currently unavailable."] = "Recarga fallida - no se puede encontrar el canal en este momento.";
+App::$strings["Unable to set address book parameters."] = "No ha sido posible establecer los parámetros de la libreta de direcciones.";
+App::$strings["Connection has been removed."] = "La conexión ha sido eliminada.";
+App::$strings["View %s's profile"] = "Ver el perfil de %s";
+App::$strings["Refresh Permissions"] = "Recargar los permisos";
+App::$strings["Fetch updated permissions"] = "Obtener los permisos actualizados";
+App::$strings["Refresh Photo"] = "Actualizar la foto";
+App::$strings["Fetch updated photo"] = "Obtener una foto actualizada";
+App::$strings["View recent posts and comments"] = "Ver publicaciones y comentarios recientes";
+App::$strings["Unblock"] = "Desbloquear";
+App::$strings["Block"] = "Bloquear";
+App::$strings["Block (or Unblock) all communications with this connection"] = "Bloquear (o desbloquear) todas las comunicaciones con esta conexión";
+App::$strings["This connection is blocked!"] = "¡Esta conexión está bloqueada!";
+App::$strings["Unignore"] = "Dejar de ignorar";
+App::$strings["Ignore (or Unignore) all inbound communications from this connection"] = "Ignorar (o dejar de ignorar) todas las comunicaciones entrantes de esta conexión";
+App::$strings["This connection is ignored!"] = "¡Esta conexión es ignorada!";
+App::$strings["Unarchive"] = "Desarchivar";
+App::$strings["Archive"] = "Archivar";
+App::$strings["Archive (or Unarchive) this connection - mark channel dead but keep content"] = "Archiva (o desarchiva) esta conexión - marca el canal como muerto aunque mantiene sus contenidos";
+App::$strings["This connection is archived!"] = "¡Esta conexión esta archivada!";
+App::$strings["Unhide"] = "Mostrar";
+App::$strings["Hide"] = "Ocultar";
+App::$strings["Hide or Unhide this connection from your other connections"] = "Ocultar o mostrar esta conexión a sus otras conexiones";
+App::$strings["This connection is hidden!"] = "¡Esta conexión está oculta!";
+App::$strings["Delete this connection"] = "Eliminar esta conexión";
+App::$strings["Fetch Vcard"] = "Obtener una vcard";
+App::$strings["Fetch electronic calling card for this connection"] = "Obtener una tarjeta de llamada electrónica para esta conexión";
+App::$strings["Affinity"] = "Afinidad";
+App::$strings["Open Set Affinity section by default"] = "Abrir por defecto la sección para definir la afinidad";
+App::$strings["Me"] = "Yo";
+App::$strings["Family"] = "Familia";
+App::$strings["Acquaintances"] = "Conocidos/as";
+App::$strings["Filter"] = "Filtrar";
+App::$strings["Open Custom Filter section by default"] = "Abrir por defecto la sección de personalización de filtros";
+App::$strings["Approve this contact"] = "Aprobar este contacto";
+App::$strings["Accept contact to allow communication"] = "Aceptar el contacto para permitir la comunicación";
+App::$strings["Set Affinity"] = "Ajustar la afinidad";
+App::$strings["Set Profile"] = "Ajustar el perfil";
+App::$strings["Set Affinity & Profile"] = "Ajustar la afinidad y el perfil";
+App::$strings["Please select a role for this contact!"] = "¡Por favor, seleccione un rol para este contacto!";
+App::$strings["This contact is unreachable from this location."] = "Este contacto es inaccesible desde esta ubicación.";
+App::$strings["This contact may be unreachable from other channel locations."] = "Este contacto puede ser inaccesible desde otras ubicaciones del canal.";
+App::$strings["Location independence is not supported by their network."] = "La independencia de ubicación no es compatible con su red.";
+App::$strings["Contact: %s"] = "Contacto: %s";
+App::$strings["Manage contact roles"] = "Gestionar roles de contactos";
+App::$strings["This contacts's primary address is"] = "La dirección principal de este contactos es ";
+App::$strings["Available locations:"] = "Ubicaciones disponibles:";
+App::$strings["The permissions indicated on this page will be applied to all new connections."] = "Los permisos indicados en esta página serán aplicados en todas las nuevas conexiones.";
+App::$strings["Contact Tools"] = "Gestión de contactos";
+App::$strings["Slide to adjust your degree of friendship"] = "Deslizar para ajustar el grado de amistad";
+App::$strings["Custom Filter"] = "Filtro personalizado";
+App::$strings["Only import posts with this text"] = "Importar solo entradas que contengan este texto";
+App::$strings["words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts"] = "Una sola opción por línea: palabras, #etiquetas, /patrones/ o lang=xx. Dejar en blanco para importarlo todo";
+App::$strings["Do not import posts with this text"] = "No importar entradas que contengan este texto";
+App::$strings["Contact Pending Approval"] = "Contacto pendiente de aprobación";
+App::$strings["Approve contact"] = "Aprobar contacto";
+App::$strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Por favor, escoja el perfil que quiere mostrar a %s cuando esté viendo su perfil de forma segura.";
+App::$strings["Their"] = "Su";
+App::$strings["My"] = "Mi";
+App::$strings["Individual Permissions"] = "Permisos individuales";
+App::$strings["Some permissions may be inherited from your channel's <a href=\"settings\"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can <strong>not</strong> change those settings here."] = "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. <strong>No</strong> puede cambiar estos ajustes aquí.";
+App::$strings["Some permissions may be inherited from your channel's <a href=\"settings\"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can change those settings here but they wont have any impact unless the inherited setting changes."] = "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. Puede cambiar estos ajustes aquí, pero no tendrán ningún consecuencia hasta que cambie los ajustes heredados.";
+App::$strings["Last update:"] = "Última actualización:";
+App::$strings["Details"] = "Detalles";
+App::$strings["Organisation"] = "Organización";
+App::$strings["Phone"] = "Teléfono";
+App::$strings["Instant messenger"] = "Mensajería instantánea";
+App::$strings["Website"] = "Sitio web";
+App::$strings["Note"] = "Nota";
+App::$strings["Add Contact"] = "Añadir un contacto";
+App::$strings["Add Field"] = "Añadir un campo";
+App::$strings["P.O. Box"] = "Buzón de correos";
+App::$strings["Additional"] = "Adicional";
+App::$strings["Street"] = "Calle";
+App::$strings["Locality"] = "Localidad";
+App::$strings["Region"] = "Provincia, región o estado";
+App::$strings["ZIP Code"] = "Código postal";
+App::$strings["Country"] = "País";
+App::$strings["%s channel censored/uncensored"] = array(
+ 0 => "%s canales censurados/no censurados",
+ 1 => "%s canales censurados/no censurados",
+ 2 => "%s canales censurados/no censurados",
+);
+App::$strings["%s channel code allowed/disallowed"] = array(
+ 0 => "%s código permitido/no permitido al canal",
+ 1 => "%s código permitido/no permitido al canal",
+ 2 => "%s código permitido/no permitido al canal",
+);
+App::$strings["%s channel deleted"] = array(
+ 0 => "%s canales eliminados",
+ 1 => "%s canales eliminados",
+ 2 => "%s canales eliminados",
+);
+App::$strings["Channel not found"] = "Canal no encontrado";
+App::$strings["Channel '%s' deleted"] = "Canal '%s' eliminado";
+App::$strings["Channel '%s' censored"] = "Canal '%s' censurado";
+App::$strings["Channel '%s' uncensored"] = "Canal '%s' no censurado";
+App::$strings["Channel '%s' code allowed"] = "Código permitido al canal '%s'";
+App::$strings["Channel '%s' code disallowed"] = "Código no permitido al canal '%s'";
App::$strings["Administration"] = "Administración";
-App::$strings["Toggle"] = "Cambiar";
-App::$strings["Author: "] = "Autor:";
-App::$strings["Maintainer: "] = "Mantenedor:";
-App::$strings["[Experimental]"] = "[Experimental]";
-App::$strings["[Unsupported]"] = "[No soportado]";
+App::$strings["select all"] = "seleccionar todo";
+App::$strings["Allow Code"] = "Permitir código";
+App::$strings["Disallow Code"] = "No permitir código";
+App::$strings["UID"] = "UID";
+App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Los canales seleccionados se eliminarán!\\n\\nTodo lo publicado por estos canales en este sitio se borrarán definitivamente!\\n\\n¿Está seguro de querer hacerlo?";
+App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "El canal {0} va a ser eliminado!\\n\\nTodo lo publicado por el canal en este sitio se borrará definitivamente!\\n\\n¿Está seguro de querer hacerlo?";
App::$strings["Lock feature %s"] = "Bloquear la funcionalidad %s";
App::$strings["Manage Additional Features"] = "Gestionar las funcionalidades";
-App::$strings["By default, unfiltered HTML is allowed in embedded media. This is inherently insecure."] = "De forma predeterminada, el HTML sin filtrar está permitido en el contenido multimedia incorporado en una publicación. Esto es siempre inseguro.";
-App::$strings["The recommended setting is to only allow unfiltered HTML from the following sites:"] = "La configuración recomendada es que sólo se permita HTML sin filtrar desde los siguientes sitios: ";
-App::$strings["https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />"] = "https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />";
-App::$strings["All other embedded content will be filtered, <strong>unless</strong> embedded content from that site is explicitly blocked."] = "El resto del contenido incrustado se filtrará, <strong>excepto</ strong> si el contenido incorporado desde ese sitio está bloqueado de forma explícita.";
-App::$strings["Block public"] = "Bloquear páginas públicas";
-App::$strings["Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated."] = "Habilitar para impedir ver las páginas personales de este sitio a quien no esté actualmente autenticado.";
-App::$strings["Provide a cloud root directory"] = "Proporcionar un directorio raíz de la nube";
-App::$strings["The cloud root directory lists all channel names which provide public files"] = "El directorio raíz de la nube lista todos los nombres de canales que proporcionan archivos públicos";
-App::$strings["Show total disk space available to cloud uploads"] = "Mostrar el espacio total disponible en el disco para las cargas en la nube";
-App::$strings["Set \"Transport Security\" HTTP header"] = "Habilitar \"Seguridad de transporte\" (\"Transport Security\") en la cabecera HTTP";
-App::$strings["Set \"Content Security Policy\" HTTP header"] = "Habilitar la \"Política de seguridad del contenido\" (\"Content Security Policy\") en la cabecera HTTP";
-App::$strings["Allowed email domains"] = "Se aceptan dominios de correo electrónico";
-App::$strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Lista separada por comas de los dominios de los que se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio. ";
-App::$strings["Not allowed email domains"] = "No se permiten dominios de correo electrónico";
-App::$strings["Comma separated list of domains which are not allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains, unless allowed domains have been defined."] = "Lista separada por comas de los dominios de los que no se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para no aceptar cualquier dominio, excepto los que se hayan autorizado.";
-App::$strings["Allow communications only from these sites"] = "Permitir la comunicación solo desde estos sitios";
-App::$strings["One site per line. Leave empty to allow communication from anywhere by default"] = "Un sitio por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera";
-App::$strings["Block communications from these sites"] = "Bloquear la comunicación desde estos sitios";
-App::$strings["Allow communications only from these channels"] = "Permitir la comunicación solo desde estos canales";
-App::$strings["One channel (hash) per line. Leave empty to allow from any channel by default"] = "Un canal (hash) por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera";
-App::$strings["Block communications from these channels"] = "Bloquear la comunicación desde estos canales";
-App::$strings["Only allow embeds from secure (SSL) websites and links."] = "Sólo se permite contenido multimedia incorporado desde sitios y enlaces seguros (SSL).";
-App::$strings["Allow unfiltered embedded HTML content only from these domains"] = "Permitir contenido HTML sin filtrar sólo desde estos dominios ";
-App::$strings["One site per line. By default embedded content is filtered."] = "Un sitio por línea. El contenido incorporado se filtra de forma predeterminada.";
-App::$strings["Block embedded HTML from these domains"] = "Bloquear contenido con HTML incorporado desde estos dominios";
-App::$strings["Allow SVG thumbnails in file browser"] = "Permitir miniaturas SVG en el navegador de archivos";
-App::$strings["WARNING: SVG images may contain malicious code."] = "ADVERTENCIA: Las imágenes SVG pueden contener código malicioso.";
-App::$strings["Allow embedded (inline) PDF files"] = "Permitir ficheros PDF incrustados (en línea)";
+App::$strings["Password changed for account %d."] = "Ha cambiado la contraseña para la cuenta %d.";
+App::$strings["Account settings updated."] = "Se han actualizado los ajustes de la cuenta.";
+App::$strings["Account not found."] = "No se ha encontrado la cuenta.";
+App::$strings["Account Edit"] = "Editar la cuenta";
+App::$strings["New Password"] = "Nueva contraseña";
+App::$strings["New Password again"] = "Nueva contraseña otra vez";
+App::$strings["Account language (for emails)"] = "Idioma de la cuenta (para los correos electrónicos)";
+App::$strings["Service class"] = "Clase de servicio";
App::$strings["%s account blocked/unblocked"] = array(
0 => "%s cuenta bloqueada/desbloqueada",
1 => "%s cuenta bloqueada/desbloqueada",
@@ -2329,6 +2550,7 @@ App::$strings["Account '%s' blocked"] = "La cuenta '%s' ha sido bloqueada";
App::$strings["Account '%s' unblocked"] = "La cuenta '%s' ha sido desbloqueada";
App::$strings["Unverified"] = "Sin verificar";
App::$strings["Expired"] = "Caducado/a";
+App::$strings["Accounts"] = "Cuentas";
App::$strings["Show verified registrations"] = "Mostrar registros verificados";
App::$strings["Show all registrations"] = "Mostrar todos los registros";
App::$strings["Select toggle"] = "Seleccionar alternar";
@@ -2340,8 +2562,6 @@ App::$strings["Request date"] = "Fecha de solicitud";
App::$strings["Requests"] = "Solicitudes";
App::$strings["No registrations available"] = "No hay registros disponibles";
App::$strings["No verified registrations available"] = "No hay registros verificados disponibles";
-App::$strings["Block"] = "Bloquear";
-App::$strings["Unblock"] = "Desbloquear";
App::$strings["Verified"] = "Verificado/a";
App::$strings["Not yet verified"] = "Aún no se ha verificado";
App::$strings["ID"] = "ID";
@@ -2349,10 +2569,28 @@ App::$strings["All channels"] = "Todos los canales";
App::$strings["Register date"] = "Fecha de registro";
App::$strings["Last login"] = "Último acceso";
App::$strings["Expires"] = "Caduca";
-App::$strings["Service class"] = "Clase de servicio";
App::$strings["Selected accounts will be deleted!\\n\\nEverything these accounts had posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡Las cuentas seleccionadas van a ser eliminadas!\\n\\n¡Todo lo que estas cuentas han publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?";
App::$strings["The account {0} will be deleted!\\n\\nEverything this account has posted on this site will be permanently deleted!\\n\\nAre you sure?"] = "¡La cuenta {0} va a ser eliminada!\\n\\n¡Todo lo que esta cuenta ha publicado en este sitio será borrado de forma permanente!\\n\\n¿Está seguro de querer hacerlo?";
App::$strings["Message"] = "Mensaje";
+App::$strings["Max queueworker threads"] = "Máximo de hilos en la cola";
+App::$strings["Minimum 4, default 4"] = "Mínimo 4, por defecto 4";
+App::$strings["Assume workers dead after"] = "Asumir que los procesos han muerto después de ";
+App::$strings["Minimum 120, default 300 seconds"] = "Mínimo de 120 segundos, por defecto, 300";
+App::$strings["Pause before starting next task"] = "Pausa antes de comenzar la siguiente tarea";
+App::$strings["Minimum 100, default 100 microseconds"] = "Mínimo 100, por defecto 100 microsegundos";
+App::$strings["Automatically adjust pause before starting next task"] = "Ajustar automáticamente una pausa antes de comenzar la siguiente tarea";
+App::$strings["Queueworker Settings"] = "Configuración del gestor de procesos de trabajo en cola";
+App::$strings["Theme settings updated."] = "Ajustes del tema actualizados.";
+App::$strings["No themes found."] = "No se han encontrado temas.";
+App::$strings["Disable"] = "Desactivar";
+App::$strings["Enable"] = "Activar";
+App::$strings["Screenshot"] = "Instantánea de pantalla";
+App::$strings["Themes"] = "Temas";
+App::$strings["Toggle"] = "Cambiar";
+App::$strings["Author: "] = "Autor:";
+App::$strings["Maintainer: "] = "Mantenedor:";
+App::$strings["[Experimental]"] = "[Experimental]";
+App::$strings["[Unsupported]"] = "[No soportado]";
App::$strings["Invalid input"] = "Entrada no válida";
App::$strings["Errors"] = "Errores";
App::$strings["Site settings updated."] = "Ajustes del sitio actualizados.";
@@ -2367,17 +2605,14 @@ App::$strings["My site has free access only"] = "Mi sitio es un servicio gratuit
App::$strings["My site offers free accounts with optional paid upgrades"] = "Mi sitio ofrece cuentas gratuitas con opciones extra de pago";
App::$strings["Default permission role for new accounts"] = "Permisos de rol por defecto para las nuevas cuentas";
App::$strings["This role will be used for the first channel created after registration."] = "Este rol se utilizará para el primer canal creado después del registro.";
-App::$strings["Minute(s)"] = "Minuto(s)";
-App::$strings["Hour(s)"] = "Hora(s)";
-App::$strings["Day(s)"] = "Día(s)";
App::$strings["Week(s)"] = "Semana(s)";
App::$strings["Month(s)"] = "Mes(Meses)";
App::$strings["Year(s)"] = "Año(s)";
App::$strings["Register verification delay"] = "Retraso en la verificación del registro";
App::$strings["Time to wait before a registration can be verified"] = "Tiempo de espera para verificar un registro ";
-App::$strings["duration up from now"] = "duración a partir de ahora ";
App::$strings["Register verification expiration time"] = "Tiempo de caducidad de la verificación del registro ";
App::$strings["Time before an unverified registration will expire"] = "Tiempo antes de que caduque un registro no verificado ";
+App::$strings["Site"] = "Sitio";
App::$strings["File upload"] = "Subir fichero";
App::$strings["Policies"] = "Políticas";
App::$strings["Banner/Logo"] = "Banner/Logo";
@@ -2427,15 +2662,14 @@ App::$strings["Present the site homepage in a frame at the original location ins
App::$strings["Allowed friend domains"] = "Dominios amigos permitidos";
App::$strings["Comma separated list of domains which are allowed to establish friendships with this site. Wildcards are accepted. Empty to allow any domains"] = "Lista separada por comas de dominios a los que está permitido establecer relaciones de amistad con este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio.";
App::$strings["Force publish"] = "Forzar la publicación";
-App::$strings["Check to force all profiles on this site to be listed in the site directory."] = "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio.";
-App::$strings["Import Public Streams"] = "Importar contenido público";
-App::$strings["Import and allow access to public content pulled from other sites. Warning: this content is unmoderated."] = "Importar y permitir acceso al contenido público sacado de otros sitios. Advertencia: este contenido no está moderado, por lo que podría encontrar cosas inapropiadas u ofensivas.";
-App::$strings["Site only Public Streams"] = "Solo contenido público en este sitio";
-App::$strings["Allow access to public content originating only from this site if Imported Public Streams are disabled."] = "Permitir el acceso al contenido público originado sólo desde este sitio si los \"streams\" públicos Importados están deshabilitados.";
-App::$strings["Allow anybody on the internet to access the Public streams"] = "Permitir que cualquiera en Internet pueda acceder a los \"streams\" públicos";
-App::$strings["Disable to require authentication before viewing. Warning: this content is unmoderated."] = "Desactivar para requerir autenticación antes de la visualización. Advertencia: este contenido no está moderado.";
+App::$strings["Check to force all profiles on this site to be listed in the site directory"] = "Intentar forzar todos los perfiles para que sean listados en el directorio de este sitio.";
+App::$strings["Enable public stream"] = "Habilitar el \"stream\" público";
+App::$strings["Enable the public stream. Warning: this content is unmoderated"] = "Habilitar el \"stream\" público. Advertencia: este contenido no está moderado";
+App::$strings["Site only public stream"] = "Solo contenido público en este sitio";
+App::$strings["Restrict the public stream to content originating at this site"] = "Restringir el \"stream\" público a los contenidos originados en este sitio";
+App::$strings["Allow anybody on the internet to access the public streams"] = "Permitir que cualquiera en Internet pueda acceder a los \"streams\" públicos";
+App::$strings["Disable to require authentication before viewing"] = "Desactivar para requerir autenticación antes de ver";
App::$strings["Only import Public stream posts with this text"] = "Importar solo entradas del stream púlbico con este texto ";
-App::$strings["words one per line or #tags or /patterns/ or lang=xx, leave blank to import all posts"] = "Una sola opción por línea: palabras, #etiquetas, /patrones/ o lang=xx. Dejar en blanco para importarlo todo";
App::$strings["Do not import Public stream posts with this text"] = "No importar entradas del stream público con este texto ";
App::$strings["Login on Homepage"] = "Iniciar sesión en la página personal";
App::$strings["Present a login box to visitors on the home page if no other content has been configured."] = "Presentar a los visitantes una casilla de identificación en la página de inicio, si no se ha configurado otro tipo de contenido.";
@@ -2456,8 +2690,6 @@ App::$strings["Delivery interval"] = "Intervalo de entrega";
App::$strings["Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers."] = "Retrasar los procesos de transmisión en segundo plano por esta cantidad de segundos para reducir la carga del sistema. Recomendado: 4-5 para sitios compartidos, 2-3 para servidores virtuales privados, 0-1 para grandes servidores dedicados.";
App::$strings["Deliveries per process"] = "Intentos de envío por proceso";
App::$strings["Number of deliveries to attempt in a single operating system process. Adjust if necessary to tune system performance. Recommend: 1-5."] = "Numero de envíos a intentar en un único proceso del sistema operativo. Ajustar si es necesario mejorar el rendimiento. Se recomienda: 1-5.";
-App::$strings["Queue Threshold"] = "Umbral de la cola de espera";
-App::$strings["Always defer immediate delivery if queue contains more than this number of entries."] = "Aplazar siempre la entrega inmediata si la cola contiene más de este número de entradas.";
App::$strings["Poll interval"] = "Intervalo máximo de tiempo entre dos mensajes sucesivos";
App::$strings["Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval."] = "Retrasar el intervalo de envío en segundo plano, en esta cantidad de segundos, para reducir la carga del sistema. Si es 0, usar el intervalo de entrega.";
App::$strings["Path to ImageMagick convert program"] = "Ruta al programa de conversión de ImageMagick";
@@ -2474,48 +2706,14 @@ App::$strings["Default: profiles"] = "Perfiles predeterminados";
App::$strings["Optional: site location"] = "Opcional: ubicación del sitio";
App::$strings["Region or country"] = "Región o país";
App::$strings["Invalid 24h time value (hhmm/hmm)"] = "Valor de tiempo de 24h no válido (hhmm/hmm)";
-App::$strings["Log settings updated."] = "Actualizado el informe de configuraciones.";
-App::$strings["Clear"] = "Vaciar";
-App::$strings["Debugging"] = "Depuración";
-App::$strings["Log file"] = "Fichero de informe";
-App::$strings["Must be writable by web server. Relative to your top-level webserver directory."] = "Debe tener permisos de escritura por el servidor web. La ruta es relativa al directorio web principal.";
-App::$strings["Log level"] = "Nivel de depuración";
-App::$strings["%s channel censored/uncensored"] = array(
- 0 => "%s canales censurados/no censurados",
- 1 => "%s canales censurados/no censurados",
- 2 => "%s canales censurados/no censurados",
-);
-App::$strings["%s channel code allowed/disallowed"] = array(
- 0 => "%s código permitido/no permitido al canal",
- 1 => "%s código permitido/no permitido al canal",
- 2 => "%s código permitido/no permitido al canal",
-);
-App::$strings["%s channel deleted"] = array(
- 0 => "%s canales eliminados",
- 1 => "%s canales eliminados",
- 2 => "%s canales eliminados",
-);
-App::$strings["Channel not found"] = "Canal no encontrado";
-App::$strings["Channel '%s' deleted"] = "Canal '%s' eliminado";
-App::$strings["Channel '%s' censored"] = "Canal '%s' censurado";
-App::$strings["Channel '%s' uncensored"] = "Canal '%s' no censurado";
-App::$strings["Channel '%s' code allowed"] = "Código permitido al canal '%s'";
-App::$strings["Channel '%s' code disallowed"] = "Código no permitido al canal '%s'";
-App::$strings["select all"] = "seleccionar todo";
-App::$strings["Censor"] = "Censurar";
-App::$strings["Uncensor"] = "No censurar";
-App::$strings["Allow Code"] = "Permitir código";
-App::$strings["Disallow Code"] = "No permitir código";
-App::$strings["UID"] = "UID";
-App::$strings["Selected channels will be deleted!\\n\\nEverything that was posted in these channels on this site will be permanently deleted!\\n\\nAre you sure?"] = "Los canales seleccionados se eliminarán!\\n\\nTodo lo publicado por estos canales en este sitio se borrarán definitivamente!\\n\\n¿Está seguro de querer hacerlo?";
-App::$strings["The channel {0} will be deleted!\\n\\nEverything that was posted in this channel on this site will be permanently deleted!\\n\\nAre you sure?"] = "El canal {0} va a ser eliminado!\\n\\nTodo lo publicado por el canal en este sitio se borrará definitivamente!\\n\\n¿Está seguro de querer hacerlo?";
-App::$strings["Password changed for account %d."] = "Ha cambiado la contraseña para la cuenta %d.";
-App::$strings["Account settings updated."] = "Se han actualizado los ajustes de la cuenta.";
-App::$strings["Account not found."] = "No se ha encontrado la cuenta.";
-App::$strings["Account Edit"] = "Editar la cuenta";
-App::$strings["New Password"] = "Nueva contraseña";
-App::$strings["New Password again"] = "Nueva contraseña otra vez";
-App::$strings["Account language (for emails)"] = "Idioma de la cuenta (para los correos electrónicos)";
+App::$strings["Queue Statistics"] = "Estadísticas de la cola";
+App::$strings["Total Entries"] = "Total de entradas";
+App::$strings["Priority"] = "Prioridad";
+App::$strings["Destination URL"] = "Dirección de destino";
+App::$strings["Mark hub permanently offline"] = "Marcar el servidor como permanentemente fuera de línea";
+App::$strings["Retry delivery to this hub"] = "Reintentar la entrega a este hub";
+App::$strings["Empty queue for this hub"] = "Vaciar la cola para este servidor";
+App::$strings["Last known contact"] = "Último contacto conocido";
App::$strings["New Profile Field"] = "Nuevo campo en el perfil";
App::$strings["Field nickname"] = "Alias del campo";
App::$strings["System name of field"] = "Nombre del campo en el sistema";
@@ -2526,27 +2724,23 @@ App::$strings["Help text"] = "Texto de ayuda";
App::$strings["Additional info (optional)"] = "Información adicional (opcional)";
App::$strings["Field definition not found"] = "Definición del campo no encontrada";
App::$strings["Edit Profile Field"] = "Modificar el campo del perfil";
+App::$strings["Profile Fields"] = "Campos del perfil";
App::$strings["Basic Profile Fields"] = "Campos básicos del perfil";
App::$strings["Advanced Profile Fields"] = "Campos avanzados del perfil";
App::$strings["(In addition to basic fields)"] = "(Además de los campos básicos)";
App::$strings["All available fields"] = "Todos los campos disponibles";
App::$strings["Custom Fields"] = "Campos personalizados";
App::$strings["Create Custom Field"] = "Crear un campo personalizado";
-App::$strings["Update has been marked successful"] = "La actualización ha sido marcada como exitosa";
-App::$strings["Verification of update %s failed. Check system logs."] = "Error en la verificación de la actualización %s. Compruebe los registros del sistema.";
-App::$strings["Update %s was successfully applied."] = "La actualización de %s se ha realizado exitosamente.";
-App::$strings["Verifying update %s did not return a status. Unknown if it succeeded."] = "La verificación de la actualización %s no devuelve un estado. Desconocido si tuvo éxito.";
-App::$strings["Update %s does not contain a verification function."] = "La actualización %s no contiene una función de verificación.";
-App::$strings["Update function %s could not be found."] = "No se encuentra la función de actualización de %s.";
-App::$strings["Executing update procedure %s failed. Check system logs."] = "Error al ejecutar el procedimiento de actualización %s. Compruebe los registros del sistema.";
-App::$strings["Update %s did not return a status. It cannot be determined if it was successful."] = "La actualización %s no devuelve un estado. No se puede determinar si tuvo éxito.";
-App::$strings["Failed Updates"] = "Han fallado las actualizaciones";
-App::$strings["Mark success (if update was manually applied)"] = "Marcar como exitosa (si la actualización se ha hecho manualmente)";
-App::$strings["Attempt to verify this update if a verification procedure exists"] = "Intentar verificar esta actualización si existe un procedimiento de verificación.";
-App::$strings["Attempt to execute this update step automatically"] = "Intentar ejecutar este paso de actualización automáticamente";
-App::$strings["No failed updates."] = "No ha fallado ninguna actualización.";
+App::$strings["Log settings updated."] = "Actualizado el informe de configuraciones.";
+App::$strings["Logs"] = "Informes";
+App::$strings["Clear"] = "Vaciar";
+App::$strings["Debugging"] = "Depuración";
+App::$strings["Log file"] = "Fichero de informe";
+App::$strings["Must be writable by web server. Relative to your top-level webserver directory."] = "Debe tener permisos de escritura por el servidor web. La ruta es relativa al directorio web principal.";
+App::$strings["Log level"] = "Nivel de depuración";
App::$strings["Plugin %s disabled."] = "Extensión %s desactivada.";
App::$strings["Plugin %s enabled."] = "Extensión %s activada.";
+App::$strings["Addons"] = "Addons";
App::$strings["Minimum project version: "] = "Versión mínima del proyecto:";
App::$strings["Maximum project version: "] = "Versión máxima del proyecto:";
App::$strings["Minimum PHP version: "] = "Versión mínima de PHP:";
@@ -2559,203 +2753,63 @@ App::$strings["Custom repo name"] = "Nombre personalizado del repositorio";
App::$strings["(optional)"] = "(opcional)";
App::$strings["Download Addon Repo"] = "Descargar el repositorio";
App::$strings["Install new repo"] = "Instalar un nuevo repositorio";
-App::$strings["Install"] = "Instalar";
App::$strings["Manage Repos"] = "Gestionar los repositorios";
App::$strings["Installed Addon Repositories"] = "Repositorioe de addons instalados";
App::$strings["Install a New Addon Repository"] = "Instalar un nuevo repositorio de addons";
App::$strings["Switch branch"] = "Cambiar la rama";
-App::$strings["Installed Apps"] = "Apps instaladas";
-App::$strings["Manage Apps"] = "Administrar apps";
-App::$strings["Create Custom App"] = "Crear una app personalizada";
-App::$strings["Some blurb about what to do when you're new here"] = "Algunas propuestas para el nuevo usuario sobre qué se puede hacer aquí";
-App::$strings["Channel removals are not allowed within 48 hours of changing the account password."] = "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña.";
-App::$strings["Remove Channel"] = "Eliminar el canal";
-App::$strings["WARNING: "] = "ATENCIÓN:";
-App::$strings["This channel will be permanently removed. "] = "Este canal será eliminado permanentemente. ";
-App::$strings["This action can not be undone!"] = "¡Esta acción no se puede deshacer!";
-App::$strings["Please enter your password for verification:"] = "Por favor, introduzca su contraseña para su verificación:";
-App::$strings["Email resent"] = "Correo electrónico reenviado";
-App::$strings["Email resend failed"] = "Fallo en el reenvío del correo electrónico";
-App::$strings["Verification successful"] = "¡Verificación exitosa!";
-App::$strings["Account successfull created"] = "Cuenta creada con éxito";
-App::$strings["Channel successfull created"] = "Canal creado con éxito";
-App::$strings["Automatic channel creation failed. Please create a channel."] = "La creación automática de canales ha fallado. Por favor, cree un canal.";
-App::$strings["Account creation error"] = "Error en la creación de la cuenta";
-App::$strings["Verify failed"] = "Verificación fallida";
-App::$strings["Token verification failed"] = "Ha fallado el token de verificación.";
-App::$strings["Request not inside time frame"] = "Solicitud fuera de plazo";
-App::$strings["Identity unknown"] = "Identidad desconocida";
-App::$strings["dId2 mistaken"] = "did2 equivocado/a";
-App::$strings["Your Registration ID"] = "Su ID de registro";
-App::$strings["Registration verification"] = "Verificación del registro";
-App::$strings["Hold on, you can start verification in"] = "Espere, puede empezar la verificación en ";
-App::$strings["Please remember your verification token for ID"] = "Por favor, recuerde su token de verificación para la identificación";
-App::$strings["Token validity"] = "Validez del token";
-App::$strings["Resend email"] = "Reenvío de correo electrónico";
-App::$strings["Registration status"] = "Estado del registro";
-App::$strings["Verification successful!"] = "¡Verificación exitosa!";
-App::$strings["Your login ID is"] = "Su ID de acceso es";
-App::$strings["After your account has been approved by our administrator you will be able to login with your login ID and your provided password."] = "Una vez que su cuenta haya sido aprobada por nuestro administrador, podrá iniciar sesión con su ID de acceso y la contraseña proporcionada.";
-App::$strings["Registration request revoked"] = "Solicitud de registro anulada";
-App::$strings["Sorry for any inconvience. Thank you for your response."] = "Disculpe las molestias. Gracias por su respuesta.";
-App::$strings["Please enter your verification token for ID"] = "Por favor, introduzca su token de verificación para la identificación";
-App::$strings["Please check your email!"] = "¡Por favor, compruebe su correo electrónico!";
-App::$strings["Verification token"] = "Token de verificación ";
-App::$strings["ID expired"] = "ID caducada";
-App::$strings["You will require the verification token for ID"] = "Necesitará el token de verificación para identificarse";
-App::$strings["Unknown or expired ID"] = "ID desconocida o caducada";
-App::$strings["dId2 malformed"] = "did2 malformado/a";
-App::$strings["You have created %1$.0f of %2$.0f allowed channels."] = "Ha creado %1$.0f de %2$.0f canales permitidos.";
-App::$strings["Create a new channel"] = "Crear un nuevo canal";
-App::$strings["Current Channel"] = "Canal actual";
-App::$strings["Switch to one of your channels by selecting it."] = "Cambiar a uno de sus canales seleccionándolo.";
-App::$strings["Default Channel"] = "Canal principal";
-App::$strings["Make Default"] = "Convertir en predeterminado";
-App::$strings["%d new introductions"] = "%d nuevas solicitudes de conexión";
-App::$strings["Delegated Channel"] = "Canal delegado";
-App::$strings["Layout not found"] = "Diseño no encontrado";
-App::$strings["This template does not support pdledi_gui (no content regions defined)"] = "Esta plantilla no es compatible con pdledi_gui (no hay regiones de contenido definidas)";
-App::$strings["Main page content"] = "Contenido de la página principal";
-App::$strings["The main page content can not be edited!"] = "El contenido de la página principal no se puede editar.";
-App::$strings["toggle full screen mode"] = "cambiar al modo de pantalla completa";
-App::$strings["Away"] = "Ausente";
-App::$strings["Online"] = "Conectado/a";
-App::$strings["Contact role deleted."] = "Rol de contacto eliminado.";
-App::$strings["Permission category name is required."] = "El nombre de la categoría de permiso es obligatorio.";
-App::$strings["Contact role saved."] = "Rol de contacto guardado.";
-App::$strings["Role to assign affected contacts and default role to"] = "Rol a asignar a los contactos afectados y rol por defecto";
-App::$strings["Role to assign affected contacts to"] = "Rol al que asignar los contactos afectados";
-App::$strings["Assign this role to"] = "Asigne este rol a ";
-App::$strings["All my contacts"] = "Todos mis contactos";
-App::$strings["Automatically assign this role to new contacts"] = "Asignar automáticamente este rol a los nuevos contactos";
-App::$strings["Contact Roles"] = "Roles de contacto";
-App::$strings["Role name"] = "Nombre del rol ";
-App::$strings["System role - not editable"] = "Rol de sistema - no editable";
-App::$strings["Deleting"] = "Eliminación";
-App::$strings["inherited"] = "heredado";
-App::$strings["Role Permissions"] = "Permisos de rol";
-App::$strings["Some permissions may be inherited from your <a href=\"settings\">channel role</a>, which have higher priority than contact role settings."] = "Algunos permisos pueden ser heredados de su <a href=\"settings\">rol de canal</a>, que tienen mayor prioridad que la configuración del rol de contacto.";
-App::$strings["Token verification failed."] = "Ha fallado el token de verificación.";
-App::$strings["Email verification resent"] = "Reenvío del email de verificación";
-App::$strings["Unable to resend email verification message."] = "No se puede reenviar el mensaje de verificación por correo electrónico.";
-App::$strings["Permissions denied."] = "Permisos denegados.";
-App::$strings["item"] = "elemento";
-App::$strings["Change Order of Pinned Navbar Apps"] = "Cambiar el orden de las aplicaciones fijas en la barra de navegación";
-App::$strings["Change Order of App Tray Apps"] = "Cambiar el orden de las aplicaciones de la bandeja de aplicaciones";
-App::$strings["Use arrows to move the corresponding app left (top) or right (bottom) in the navbar"] = "Use las flechas para mover la aplicación correspondiente a la izquierda (arriba) o derecha (abajo) en la barra de navegación.";
-App::$strings["Use arrows to move the corresponding app up or down in the app tray"] = "Use las flechas para mover la aplicación correspondiente hacia arriba o hacia abajo en la bandeja de aplicaciones.";
-App::$strings["Unable to find your hub."] = "No se puede encontrar su servidor.";
-App::$strings["Post successful."] = "Enviado con éxito.";
-App::$strings["Comment approved"] = "El comentario ha sido aprobado";
-App::$strings["Comment deleted"] = "Se ha eliminado el comentario";
-App::$strings["Account removals are not allowed within 48 hours of changing the account password."] = "La eliminación de cuentas no está permitida hasta después de que hayan transcurrido 48 horas desde el último cambio de contraseña.";
-App::$strings["Remove This Account"] = "Eliminar esta cuenta";
-App::$strings["This account and all its channels will be completely removed from the network. "] = "Esta cuenta y todos sus canales van a ser eliminados de la red.";
-App::$strings["This action is permanent and can not be undone!"] = "¡Esta acción tiene carácter definitivo y no se puede deshacer!";
-App::$strings["Remove Account"] = "Eliminar cuenta";
-App::$strings["Language App"] = "App idioma";
-App::$strings["No content available for year"] = "No hay contenido disponible para el año";
-App::$strings["Export Channel"] = "Exportar el canal";
-App::$strings["Export channel"] = "Exportar canal";
-App::$strings["This will export your identity and social graph into a file which can be used to import your channel to a new hub."] = "Esto exportará su identidad y su gráfico social a un archivo que puede utilizarse para importar su canal a un nuevo hub.";
-App::$strings["Export content"] = "Exportar contenidos";
-App::$strings["This will export your posts, direct messages, articles and cards per month stored into a zip file per year. Months with no posts will be dismissed."] = "Esto exportará sus posts, mensajes directos, artículos y fichas por mes almacenados en un archivo zip por año. Los meses sin publicaciones serán descartados.";
-App::$strings["Export wikis"] = "Exportar wikis";
-App::$strings["This will export your wikis and wiki pages."] = "Esto exportará sus wikis y páginas wiki.";
-App::$strings["Export webpages"] = "Exportar páginas web";
-App::$strings["This will export your webpages and menus."] = "Esto exportará sus páginas web y menús.";
-App::$strings["Export channel calendar"] = "Exportar el calendario del canal";
-App::$strings["This will export your channel calendar events and associated items. CalDAV calendars are not included."] = "Esto exportará los eventos del calendario de su canal y los elementos asociados. Los calendarios CalDAV no están incluidos.";
-App::$strings["Export chatrooms"] = "Exportar salas de chat";
-App::$strings["This will export your chatrooms. Chat history is dismissed."] = "Esto exportará sus chats. Se descarta el historial de chats.";
-App::$strings["This export can be imported or restored by visiting <a href=\"%1\$s\">%2\$s</a> on any site containing your channel."] = "Esta exportación puede ser importada o restaurada visitando <a href=\"%1\$s\">%2\$s</a> cualquier sitio que contenga su canal.";
-App::$strings["Article"] = "Artículo";
-App::$strings["Item has been removed."] = "Se ha eliminado el elemento.";
-App::$strings["No channel."] = "Ningún canal.";
-App::$strings["No connections in common."] = "Ninguna conexión en común.";
-App::$strings["View Common Connections"] = "Ver las conexiones comunes";
-App::$strings["%s element installed"] = "%s elemento instalado";
-App::$strings["%s element installation failed"] = "Elemento con instalación fallida: %s";
-App::$strings["Your real name is recommended."] = "Se recomienda su nombre real.";
-App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Ejemplos: \"Juan García\", \"Luisa y sus caballos\", \"Fútbol\", \"Grupo de aviación\"";
-App::$strings["This will be used to create a unique network address (like an email address)."] = "Esto se utilizará para crear una dirección de red única (como una dirección de correo electrónico).";
-App::$strings["Allowed characters are a-z 0-9, - and _"] = "Los caracteres permitidos son a-z 0-9, - and _";
-App::$strings["Channel name"] = "Nombre del canal";
-App::$strings["Channel role"] = "Rol del canal";
-App::$strings["Create a Channel"] = "Crear un canal";
-App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = "Un canal es una identidad única en la red. Puede representar a una persona (un perfil de una red social), un foro o grupo, un negocio o una página de una celebridad, un \"feed\" de noticias, y muchas otras cosas.";
-App::$strings["or <a href=\"import\">import an existing channel</a> from another location."] = "O <a href=\"import\">importar un canal </a> desde otro lugar.";
-App::$strings["Validate"] = "Validar";
-App::$strings["Entry censored"] = "Entrada censurada";
-App::$strings["Entry uncensored"] = "Entrada sin censurar";
-App::$strings["No service class restrictions found."] = "No se han encontrado restricciones sobre esta clase de servicio.";
-App::$strings["Mood"] = "Estado de ánimo";
-App::$strings["Set your current mood and tell your friends"] = "Describir su estado de ánimo para comunicárselo a sus amigos";
-App::$strings["About this site"] = "Acerca de este sitio";
-App::$strings["Site Name"] = "Nombre del sitio";
-App::$strings["Administrator"] = "Administrador";
-App::$strings["Software and Project information"] = "Información sobre el software y el proyecto";
-App::$strings["This site is powered by \$Projectname"] = "Este sitio funciona con \$Projectname";
-App::$strings["Federated and decentralised networking and identity services provided by Zot"] = "Servicios federados y descentralizados de identidad y redes proporcionados por Zot";
-App::$strings["Additional federated transport protocols:"] = "Protocolos adicionales de transporte federado: ";
-App::$strings["Version %s"] = "Versión %s";
-App::$strings["Project homepage"] = "Página principal del proyecto";
-App::$strings["Developer homepage"] = "Página principal del desarrollador";
-App::$strings["App installed."] = "Aplicación instalada.";
-App::$strings["Malformed app."] = "Aplicación con errores";
-App::$strings["Embed code"] = "Código incorporado";
-App::$strings["Edit App"] = "Modificar la aplicación";
-App::$strings["Create App"] = "Crear una aplicación";
-App::$strings["Name of app"] = "Nombre de la aplicación";
-App::$strings["Location (URL) of app"] = "Dirección (URL) de la aplicación";
-App::$strings["Photo icon URL"] = "Dirección del icono";
-App::$strings["80 x 80 pixels - optional"] = "80 x 80 pixels - opcional";
-App::$strings["Categories (optional, comma separated list)"] = "Temas (opcional, lista separada por comas)";
-App::$strings["Version ID"] = "Versión";
-App::$strings["Price of app"] = "Precio de la aplicación";
-App::$strings["Location (URL) to purchase app"] = "Dirección (URL) donde adquirir la aplicación";
-App::$strings["Blocked accounts"] = "Cuentas bloqueadas";
-App::$strings["Expired accounts"] = "Cuentas caducadas";
-App::$strings["Expiring accounts"] = "Cuentas que caducan";
-App::$strings["Message queues"] = "Mensajes en cola";
-App::$strings["Your software should be updated"] = "Debe actualizar su software";
-App::$strings["Summary"] = "Sumario";
-App::$strings["Registered accounts"] = "Cuentas registradas";
-App::$strings["Pending registrations"] = "Registros pendientes";
-App::$strings["Registered channels"] = "Canales registrados";
-App::$strings["Active addons"] = "Addons acivos";
-App::$strings["Version"] = "Versión";
-App::$strings["Repository version (master)"] = "Versión del repositorio (master)";
-App::$strings["Repository version (dev)"] = "Versión del repositorio (dev)";
+App::$strings["Update has been marked successful"] = "La actualización ha sido marcada como exitosa";
+App::$strings["Verification of update %s failed. Check system logs."] = "Error en la verificación de la actualización %s. Compruebe los registros del sistema.";
+App::$strings["Update %s was successfully applied."] = "La actualización de %s se ha realizado exitosamente.";
+App::$strings["Verifying update %s did not return a status. Unknown if it succeeded."] = "La verificación de la actualización %s no devuelve un estado. Desconocido si tuvo éxito.";
+App::$strings["Update %s does not contain a verification function."] = "La actualización %s no contiene una función de verificación.";
+App::$strings["Update function %s could not be found."] = "No se encuentra la función de actualización de %s.";
+App::$strings["Executing update procedure %s failed. Check system logs."] = "Error al ejecutar el procedimiento de actualización %s. Compruebe los registros del sistema.";
+App::$strings["Update %s did not return a status. It cannot be determined if it was successful."] = "La actualización %s no devuelve un estado. No se puede determinar si tuvo éxito.";
+App::$strings["Failed Updates"] = "Han fallado las actualizaciones";
+App::$strings["Mark success (if update was manually applied)"] = "Marcar como exitosa (si la actualización se ha hecho manualmente)";
+App::$strings["Attempt to verify this update if a verification procedure exists"] = "Intentar verificar esta actualización si existe un procedimiento de verificación.";
+App::$strings["Attempt to execute this update step automatically"] = "Intentar ejecutar este paso de actualización automáticamente";
+App::$strings["No failed updates."] = "No ha fallado ninguna actualización.";
+App::$strings["By default, unfiltered HTML is allowed in embedded media. This is inherently insecure."] = "De forma predeterminada, el HTML sin filtrar está permitido en el contenido multimedia incorporado en una publicación. Esto es siempre inseguro.";
+App::$strings["The recommended setting is to only allow unfiltered HTML from the following sites:"] = "La configuración recomendada es que sólo se permita HTML sin filtrar desde los siguientes sitios: ";
+App::$strings["https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />"] = "https://youtube.com/<br />https://www.youtube.com/<br />https://youtu.be/<br />https://vimeo.com/<br />https://soundcloud.com/<br />";
+App::$strings["All other embedded content will be filtered, <strong>unless</strong> embedded content from that site is explicitly blocked."] = "El resto del contenido incrustado se filtrará, <strong>excepto</ strong> si el contenido incorporado desde ese sitio está bloqueado de forma explícita.";
+App::$strings["Security"] = "Seguridad";
+App::$strings["Block public"] = "Bloquear páginas públicas";
+App::$strings["Check to block public access to all otherwise public personal pages on this site unless you are currently authenticated."] = "Habilitar para impedir ver las páginas personales de este sitio a quien no esté actualmente autenticado.";
+App::$strings["Provide a cloud root directory"] = "Proporcionar un directorio raíz de la nube";
+App::$strings["The cloud root directory lists all channel names which provide public files"] = "El directorio raíz de la nube lista todos los nombres de canales que proporcionan archivos públicos";
+App::$strings["Show total disk space available to cloud uploads"] = "Mostrar el espacio total disponible en el disco para las cargas en la nube";
+App::$strings["Set \"Transport Security\" HTTP header"] = "Habilitar \"Seguridad de transporte\" (\"Transport Security\") en la cabecera HTTP";
+App::$strings["Set \"Content Security Policy\" HTTP header"] = "Habilitar la \"Política de seguridad del contenido\" (\"Content Security Policy\") en la cabecera HTTP";
+App::$strings["Allowed email domains"] = "Se aceptan dominios de correo electrónico";
+App::$strings["Comma separated list of domains which are allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains"] = "Lista separada por comas de los dominios de los que se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para aceptar cualquier dominio. ";
+App::$strings["Not allowed email domains"] = "No se permiten dominios de correo electrónico";
+App::$strings["Comma separated list of domains which are not allowed in email addresses for registrations to this site. Wildcards are accepted. Empty to allow any domains, unless allowed domains have been defined."] = "Lista separada por comas de los dominios de los que no se acepta una dirección de correo electrónico para registros en este sitio. Se permiten comodines. Dejar en claro para no aceptar cualquier dominio, excepto los que se hayan autorizado.";
+App::$strings["Allow communications only from these sites"] = "Permitir la comunicación solo desde estos sitios";
+App::$strings["One site per line. Leave empty to allow communication from anywhere by default"] = "Un sitio por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera";
+App::$strings["Block communications from these sites"] = "Bloquear la comunicación desde estos sitios";
+App::$strings["Allow communications only from these channels"] = "Permitir la comunicación solo desde estos canales";
+App::$strings["One channel (hash) per line. Leave empty to allow from any channel by default"] = "Un canal (hash) por línea. Dejar en blanco para permitir por defecto la comunicación desde cualquiera";
+App::$strings["Block communications from these channels"] = "Bloquear la comunicación desde estos canales";
+App::$strings["Only allow embeds from secure (SSL) websites and links."] = "Sólo se permite contenido multimedia incorporado desde sitios y enlaces seguros (SSL).";
+App::$strings["Allow unfiltered embedded HTML content only from these domains"] = "Permitir contenido HTML sin filtrar sólo desde estos dominios ";
+App::$strings["One site per line. By default embedded content is filtered."] = "Un sitio por línea. El contenido incorporado se filtra de forma predeterminada.";
+App::$strings["Block embedded HTML from these domains"] = "Bloquear contenido con HTML incorporado desde estos dominios";
+App::$strings["Allow SVG thumbnails in file browser"] = "Permitir miniaturas SVG en el navegador de archivos";
+App::$strings["WARNING: SVG images may contain malicious code."] = "ADVERTENCIA: Las imágenes SVG pueden contener código malicioso.";
+App::$strings["Allow embedded (inline) PDF files"] = "Permitir ficheros PDF incrustados (en línea)";
App::$strings["Invalid abook_id"] = "Abook_id no válido";
-App::$strings["Could not access contact record."] = "No se ha podido acceder al registro de contacto.";
-App::$strings["Could not locate selected profile."] = "No se ha podido localizar el perfil seleccionado.";
-App::$strings["is now connected to"] = "ahora está conectado/a";
-App::$strings["Contact Tools"] = "Gestión de contactos";
-App::$strings["Approve this contact"] = "Aprobar este contacto";
-App::$strings["Accept contact to allow communication"] = "Aceptar el contacto para permitir la comunicación";
-App::$strings["Please select a role for this contact!"] = "¡Por favor, seleccione un rol para este contacto!";
-App::$strings["This contact is unreachable from this location."] = "Este contacto es inaccesible desde esta ubicación.";
-App::$strings["This contact may be unreachable from other channel locations."] = "Este contacto puede ser inaccesible desde otras ubicaciones del canal.";
-App::$strings["Location independence is not supported by their network."] = "La independencia de ubicación no es compatible con su red.";
App::$strings["View profile"] = "Ver el perfil";
-App::$strings["This is a group/forum channel"] = "Este es un canal de grupo/foro";
App::$strings["Select a role for this contact"] = "Selecciones un rol para este contacto";
-App::$strings["Slide to adjust your degree of friendship"] = "Deslizar para ajustar el grado de amistad";
-App::$strings["Custom Filter"] = "Filtro personalizado";
-App::$strings["Only import posts with this text"] = "Importar solo entradas que contengan este texto";
-App::$strings["Do not import posts with this text"] = "No importar entradas que contengan este texto";
-App::$strings["Approve contact"] = "Aprobar contacto";
-App::$strings["Their"] = "Su";
-App::$strings["My"] = "Mi";
+App::$strings["Contact roles"] = "Roles del contacto";
App::$strings["Roles"] = "Roles";
App::$strings["Compare permissions"] = "Comparar permisos";
App::$strings["Permission"] = "Permiso ";
-App::$strings["Affinity"] = "Afinidad";
+App::$strings["Privacy groups"] = "Grupos de canales";
App::$strings["Content filter"] = "Filtro de contenidos";
App::$strings["Contact updated"] = "Contacto actualizado";
App::$strings["Contact update failed"] = "Fallo en la actualización del contacto";
-App::$strings["Approve connection"] = "Aprobar esta conexión";
App::$strings["Refresh succeeded"] = "Actualización con éxito";
App::$strings["Refresh failed - channel is currently unavailable"] = "Error de actualización: el canal no está disponible en este momento";
App::$strings["Block status updated"] = "Estado del bloqueo actualizado";
@@ -2768,305 +2822,57 @@ App::$strings["Hide status updated"] = "Estado de ocultación actualizado";
App::$strings["Hide failed"] = "Ocultar falló";
App::$strings["Contact removed"] = "Contacto eliminado";
App::$strings["Delete failed"] = "Eliminar falló";
-App::$strings["Refresh Permissions"] = "Recargar los permisos";
-App::$strings["Fetch updated permissions"] = "Obtener los permisos actualizados";
-App::$strings["Refresh Photo"] = "Actualizar la foto";
-App::$strings["Fetch updated photo"] = "Obtener una foto actualizada";
-App::$strings["Block (or Unblock) all communications with this connection"] = "Bloquear (o desbloquear) todas las comunicaciones con esta conexión";
-App::$strings["This connection is blocked!"] = "¡Esta conexión está bloqueada!";
-App::$strings["Unignore"] = "Dejar de ignorar";
-App::$strings["Ignore"] = "Ignorar";
-App::$strings["Ignore (or Unignore) all inbound communications from this connection"] = "Ignorar (o dejar de ignorar) todas las comunicaciones entrantes de esta conexión";
-App::$strings["This connection is ignored!"] = "¡Esta conexión es ignorada!";
-App::$strings["Unarchive"] = "Desarchivar";
-App::$strings["Archive"] = "Archivar";
-App::$strings["Archive (or Unarchive) this connection - mark channel dead but keep content"] = "Archiva (o desarchiva) esta conexión - marca el canal como muerto aunque mantiene sus contenidos";
-App::$strings["This connection is archived!"] = "¡Esta conexión esta archivada!";
-App::$strings["Unhide"] = "Mostrar";
-App::$strings["Hide"] = "Ocultar";
-App::$strings["Hide or Unhide this connection from your other connections"] = "Ocultar o mostrar esta conexión a sus otras conexiones";
-App::$strings["This connection is hidden!"] = "¡Esta conexión está oculta!";
-App::$strings["Delete this connection"] = "Eliminar esta conexión";
-App::$strings["No default suggestions were found."] = "No se encontraron sugerencias por defecto.";
-App::$strings["%d rating"] = array(
- 0 => "%d valoración",
- 1 => "%d valoraciones",
- 2 => "%d valoraciones",
-);
-App::$strings["Gender: "] = "Género:";
-App::$strings["Status: "] = "Estado:";
-App::$strings["Homepage: "] = "Página personal:";
-App::$strings["Description:"] = "Descripción:";
-App::$strings["Public Forum:"] = "Foro público:";
-App::$strings["Keywords: "] = "Palabras clave:";
-App::$strings["Don't suggest"] = "No sugerir:";
-App::$strings["Common connections (estimated):"] = "Conexiones comunes (estimadas): ";
-App::$strings["Global Directory"] = "Directorio global:";
-App::$strings["Local Directory"] = "Directorio local:";
-App::$strings["Finding:"] = "Encontrar:";
-App::$strings["next page"] = "siguiente página";
-App::$strings["previous page"] = "página anterior";
-App::$strings["Sort options"] = "Ordenar opciones";
-App::$strings["Alphabetic"] = "Alfabético";
-App::$strings["Reverse Alphabetic"] = "Alfabético inverso";
-App::$strings["Newest to Oldest"] = "De más nuevo a más antiguo";
-App::$strings["Oldest to Newest"] = "De más antiguo a más nuevo";
-App::$strings["No entries (some entries may be hidden)."] = "Sin entradas (algunas entradas pueden estar ocultas).";
-App::$strings["Authorize application connection"] = "Autorizar una conexión de aplicación";
-App::$strings["Return to your app and insert this Security Code:"] = "Vuelva a su aplicación e introduzca este código de seguridad: ";
-App::$strings["Please login to continue."] = "Por favor inicie sesión para continuar.";
-App::$strings["Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?"] = "¿Desea autorizar a esta aplicación a acceder a sus publicaciones y contactos, y/o crear nuevas publicaciones por usted?";
-App::$strings["Please login."] = "Por favor, inicie sesión.";
-App::$strings["Block Name"] = "Nombre del bloque";
-App::$strings["Block Title"] = "Título del bloque";
-App::$strings["Email Verification Required"] = "Verificación obligatoria del correo electrónico";
-App::$strings["A verification token was sent to your email address [%s]. Enter that token here to complete the account verification step. Please allow a few minutes for delivery, and check your spam folder if you do not see the message."] = "Se ha enviado un token de verificación a su dirección de correo electrónico [%s]. Ingrese ese símbolo aquí para completar el paso de verificación de cuenta. Por favor, espere unos minutos para el envío, y revise su carpeta de spam si no ve el mensaje.";
-App::$strings["Resend Email"] = "Reenvío de correo electrónico";
-App::$strings["Validation token"] = "Token de validación";
-App::$strings["Item not available."] = "Elemento no disponible";
-App::$strings["Poll not found."] = "Encuesta no encontrada.";
-App::$strings["Invalid response."] = "respuesta no válida.";
-App::$strings["Response submitted. Updates may not appear instantly."] = "Respuesta enviada. Las actualizaciones pueden no aparecer al instante.";
-App::$strings["Image uploaded but image cropping failed."] = "Imagen actualizada, pero el recorte de la imagen ha fallado. ";
-App::$strings["Image resize failed."] = "El ajuste del tamaño de la imagen ha fallado.";
-App::$strings["Image upload failed."] = "La carga de la imagen ha fallado.";
-App::$strings["Unable to process image."] = "No ha sido posible procesar la imagen.";
-App::$strings["Photo not available."] = "Foto no disponible.";
-App::$strings["This profile photo will be visible to anybody on the internet and may be distributed to other websites."] = "Esta foto de perfil será visible para cualquier persona en Internet y podrá ser distribuida a otros sitios web.";
-App::$strings["This profile photo will be visible only to channels with permission to view this profile."] = "Esta foto de perfil sólo será visible para los canales con permiso para ver este perfil.";
-App::$strings["Use Photo for Profile"] = "Usar la fotografía para el perfil";
-App::$strings["Change Profile Photo"] = "Cambiar la foto del perfil";
-App::$strings["Reset to default"] = "Restablecer los valores por defecto";
-App::$strings["Use a photo from your albums"] = "Usar una foto de sus álbumes";
-App::$strings["Select existing"] = "Seleccione lo que hay";
-App::$strings["Crop Image"] = "Recortar imagen";
-App::$strings["Please adjust the image cropping for optimum viewing."] = "Por favor ajuste el recorte de la imagen para una visión óptima.";
-App::$strings["Done editing"] = "Edición completada";
-App::$strings["Edit Block"] = "Modificar este bloque";
-App::$strings["Enter a folder name"] = "Escriba un nombre de carpeta";
-App::$strings["or select an existing folder (doubleclick)"] = "o seleccione una (con un doble click)";
-App::$strings["Save to Folder"] = "Guardar en carpeta";
-App::$strings["Layout Name"] = "Nombre de la plantilla";
-App::$strings["Layout Description (Optional)"] = "Descripción de la plantilla (opcional)";
-App::$strings["Edit Layout"] = "Modificar la plantilla";
-App::$strings["Active"] = "Activo/a";
-App::$strings["Blocked"] = "Bloqueadas";
-App::$strings["Ignored"] = "Ignoradas";
-App::$strings["Hidden"] = "Ocultas";
-App::$strings["Archived/Unreachable"] = "Archivadas o inaccesibles";
-App::$strings["New"] = "Nuevas";
-App::$strings["Active Connections"] = "Conexiones activas";
-App::$strings["Show active connections"] = "Mostrar las conexiones activas";
-App::$strings["Show pending (new) connections"] = "Mostrar conexiones (nuevas) pendientes";
-App::$strings["Only show blocked connections"] = "Mostrar solo las conexiones bloqueadas";
-App::$strings["Only show ignored connections"] = "Mostrar solo conexiones ignoradas";
-App::$strings["Only show archived/unreachable connections"] = "Mostrar solo las conexiones archivadas o no localizables";
-App::$strings["Only show hidden connections"] = "Mostrar solo las conexiones ocultas";
-App::$strings["Show all connections"] = "Mostrar todas las conexiones";
-App::$strings["Pending approval"] = "Pendiente de aprobación";
-App::$strings["Archived"] = "Archivadas";
-App::$strings["Not connected at this location"] = "No está conectado/a en esta ubicación";
-App::$strings["%1\$s [%2\$s]"] = "%1\$s [%2\$s]";
-App::$strings["Edit connection"] = "Editar conexión";
-App::$strings["Delete connection"] = "Eliminar conexión";
-App::$strings["Channel address"] = "Dirección del canal";
-App::$strings["Call"] = "Llamar";
-App::$strings["Status"] = "Estado";
-App::$strings["Connected"] = "Conectado/a";
-App::$strings["Ignore connection"] = "Ignorar esta conexión";
-App::$strings["Recent activity"] = "Actividad reciente";
-App::$strings["Connect at this location"] = "Conectar en esta ubicación ";
-App::$strings["Contact role"] = "Rol del contacto";
-App::$strings["Search your connections"] = "Buscar sus conexiones";
-App::$strings["Contact search"] = "Buscar contacto";
-App::$strings["Cover Photos"] = "Imágenes de portada del perfil";
-App::$strings["Your cover photo may be visible to anybody on the internet"] = "La foto de la portada puede ser visible para cualquiera en Internet";
-App::$strings["Upload File:"] = "Subir fichero:";
-App::$strings["Select a profile:"] = "Seleccionar un perfil:";
-App::$strings["Change Cover Photo"] = "Cambiar la foto de portada del perfil";
-App::$strings["Select existing photo"] = "Seleccionar una foto";
-App::$strings["Done Editing"] = "Edición completada";
-App::$strings["Page owner information could not be retrieved."] = "La información del propietario de la página no pudo ser recuperada.";
-App::$strings["Album not found."] = "Álbum no encontrado.";
-App::$strings["Delete Album"] = "Borrar álbum";
-App::$strings["Delete Photo"] = "Borrar foto";
-App::$strings["No photos selected"] = "No hay fotos seleccionadas";
-App::$strings["Access to this item is restricted."] = "El acceso a este elemento está restringido.";
-App::$strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado.";
-App::$strings["%1$.2f MB photo storage used."] = "%1$.2f MB de almacenamiento de fotos utilizado.";
-App::$strings["Upload Photos"] = "Subir fotos";
-App::$strings["Enter an album name"] = "Introducir un nombre de álbum";
-App::$strings["or select an existing album (doubleclick)"] = "o seleccionar un álbum (con un doble click)";
-App::$strings["Create a status post for this upload"] = "Crear un mensaje de estado para esta subida";
-App::$strings["Description (optional)"] = "Descripción (opcional)";
-App::$strings["Show Newest First"] = "Mostrar lo más reciente primero";
-App::$strings["Show Oldest First"] = "Mostrar lo más antiguo primero";
-App::$strings["Add Photos"] = "Añadir fotos";
-App::$strings["Permission denied. Access to this item may be restricted."] = "Permiso denegado. El acceso a este elemento puede estar restringido.";
-App::$strings["Photo not available"] = "Foto no disponible";
-App::$strings["Use as profile photo"] = "Usar como foto del perfil";
-App::$strings["Use as cover photo"] = "Usar como imagen de portada del perfil";
-App::$strings["Private Photo"] = "Foto privada";
-App::$strings["View Full Size"] = "Ver tamaño completo";
-App::$strings["Edit photo"] = "Editar foto";
-App::$strings["Rotate CW (right)"] = "Girar CW (a la derecha)";
-App::$strings["Rotate CCW (left)"] = "Girar CCW (a la izquierda)";
-App::$strings["Move photo to album"] = "Mover la foto a un álbum";
-App::$strings["Enter a new album name"] = "Introducir un nuevo nombre de álbum";
-App::$strings["or select an existing one (doubleclick)"] = "o seleccionar un álbum (con un doble click)";
-App::$strings["Add a Tag"] = "Añadir una etiqueta";
-App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com";
-App::$strings["Flag as adult in album view"] = "Marcar como \"solo para adultos\" en el álbum";
-App::$strings["I like this (toggle)"] = "Me gusta (cambiar)";
-App::$strings["I don't like this (toggle)"] = "No me gusta esto (cambiar)";
-App::$strings["This is you"] = "Este es usted";
-App::$strings["View all"] = "Ver todo";
-App::$strings["Photo Tools"] = "Gestión de las fotos";
-App::$strings["In This Photo:"] = "En esta foto:";
-App::$strings["Map"] = "Mapa";
-App::$strings["__ctx:noun__ Likes"] = "Me gusta";
-App::$strings["__ctx:noun__ Dislikes"] = "No me gusta";
-App::$strings["No valid account found."] = "No se ha encontrado una cuenta válida.";
-App::$strings["Password reset request issued. Check your email."] = "Se ha recibido una solicitud de restablecimiento de contraseña. Consulte su correo electrónico.";
-App::$strings["Site Member (%s)"] = "Usuario del sitio (%s)";
-App::$strings["Password reset requested at %s"] = "Se ha solicitado restablecer la contraseña en %s";
-App::$strings["Request could not be verified. (You may have previously submitted it.) Password reset failed."] = "La solicitud no ha podido ser verificada. (Puede que la haya enviado con anterioridad) El restablecimiento de la contraseña ha fallado.";
-App::$strings["Password Reset"] = "Restablecer la contraseña";
-App::$strings["Your password has been reset as requested."] = "Su contraseña ha sido restablecida según lo solicitó.";
-App::$strings["Your new password is"] = "Su nueva contraseña es";
-App::$strings["Save or copy your new password - and then"] = "Guarde o copie su nueva contraseña - y después";
-App::$strings["click here to login"] = "pulse aquí para conectarse";
-App::$strings["Your password may be changed from the <em>Settings</em> page after successful login."] = "Puede cambiar la contraseña en la página <em>Ajustes</em> una vez iniciada la sesión.";
-App::$strings["Your password has changed at %s"] = "Su contraseña en %s ha sido cambiada";
-App::$strings["Forgot your Password?"] = "¿Ha olvidado su contraseña?";
-App::$strings["Enter your email address and submit to have your password reset. Then check your email for further instructions."] = "Introduzca y envíe su dirección de correo electrónico para el restablecimiento de su contraseña. Luego revise su correo para obtener más instrucciones.";
-App::$strings["Email Address"] = "Dirección de correo electrónico";
-App::$strings["Reset"] = "Reiniciar";
-App::$strings["Connection added."] = "Se ha incorporado una conexión.";
-App::$strings["Invalid item."] = "Elemento no válido.";
-App::$strings["Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
-App::$strings["Profile not found."] = "Perfil no encontrado.";
-App::$strings["Profile deleted."] = "Perfil eliminado.";
-App::$strings["Profile-"] = "Perfil-";
-App::$strings["New profile created."] = "El nuevo perfil ha sido creado.";
-App::$strings["Profile unavailable to clone."] = "Perfil no disponible para clonar.";
-App::$strings["Profile unavailable to export."] = "Perfil no disponible para exportar.";
-App::$strings["Profile Name is required."] = "Se necesita el nombre del perfil.";
-App::$strings["Marital Status"] = "Estado civil";
-App::$strings["Romantic Partner"] = "Pareja sentimental";
-App::$strings["Likes"] = "Me gusta";
-App::$strings["Dislikes"] = "No me gusta";
-App::$strings["Work/Employment"] = "Trabajo:";
-App::$strings["Religion"] = "Religión";
-App::$strings["Political Views"] = "Ideas políticas";
-App::$strings["Sexual Preference"] = "Preferencia sexual";
-App::$strings["Homepage"] = "Página personal";
-App::$strings["Interests"] = "Intereses";
-App::$strings["Profile updated."] = "Perfil actualizado.";
-App::$strings["Hide my connections from viewers of this profile"] = "Ocultar mis conexiones a los espectadores de este perfil";
-App::$strings["Publish my default profile in the network directory"] = "Publicar mi perfil por defecto en el directorio de la red";
-App::$strings["Suggest me as a potential contact to new members"] = "Sugerirme como contacto potencial a los nuevos miembros";
-App::$strings["Reveal my online status"] = "Revelar mi estado en línea";
-App::$strings["Edit Profile Details"] = "Modificar los detalles de este perfil";
-App::$strings["View this profile"] = "Ver este perfil";
-App::$strings["Profile Tools"] = "Gestión del perfil";
-App::$strings["Change cover photo"] = "Cambiar la imagen de portada del perfil";
-App::$strings["Create a new profile using these settings"] = "Crear un nuevo perfil usando estos ajustes";
-App::$strings["Clone this profile"] = "Clonar este perfil";
-App::$strings["Delete this profile"] = "Eliminar este perfil";
-App::$strings["Add profile things"] = "Añadir cosas al perfil";
-App::$strings["Basic"] = "Básico";
-App::$strings["Relationship"] = "Relación";
-App::$strings["Import profile from file"] = "Importar perfil desde un fichero";
-App::$strings["Export profile to file"] = "Exportar perfil a un fichero";
-App::$strings["Your gender"] = "Género";
-App::$strings["Marital status"] = "Estado civil";
-App::$strings["Sexual preference"] = "Preferencia sexual";
-App::$strings["Profile name"] = "Nombre del perfil";
-App::$strings["This is your default profile."] = "Este es su perfil principal.";
-App::$strings["Your full name"] = "Nombre completo";
-App::$strings["Short title/description"] = "Breve título y descripción";
-App::$strings["Maximal 190 characters"] = "Máximo de 190 caracteres";
-App::$strings["Street address"] = "Dirección";
-App::$strings["Locality/City"] = "Ciudad";
-App::$strings["Region/State"] = "Región o Estado";
-App::$strings["Postal/Zip code"] = "Código postal";
-App::$strings["Who (if applicable)"] = "Quién (si es pertinente)";
-App::$strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Por ejemplo: ana123, María González, sara@ejemplo.com";
-App::$strings["Since (date)"] = "Desde (fecha)";
-App::$strings["Tell us about yourself"] = "Háblenos de usted";
-App::$strings["Hometown"] = "Lugar de nacimiento";
-App::$strings["Political views"] = "Ideas políticas";
-App::$strings["Religious views"] = "Creencias religiosas";
-App::$strings["Keywords used in directory listings"] = "Palabras clave utilizadas en los listados de directorios";
-App::$strings["Example: fishing photography software"] = "Por ejemplo: software de fotografía submarina";
-App::$strings["Musical interests"] = "Preferencias musicales";
-App::$strings["Books, literature"] = "Libros, literatura";
-App::$strings["Television"] = "Televisión";
-App::$strings["Film/Dance/Culture/Entertainment"] = "Cine, danza, cultura, entretenimiento";
-App::$strings["Hobbies/Interests"] = "Aficiones o intereses";
-App::$strings["Love/Romance"] = "Vida sentimental o amorosa";
-App::$strings["School/Education"] = "Estudios";
-App::$strings["Contact information and social networks"] = "Información de contacto y redes sociales";
-App::$strings["My other channels"] = "Mis otros canales";
-App::$strings["%1\$s is following %2\$s's %3\$s"] = "%1\$s está siguiendo %3\$s de %2\$s";
-App::$strings["%1\$s stopped following %2\$s's %3\$s"] = "%1\$s ha dejado de seguir %3\$s de %2\$s";
-App::$strings["Bookmark added"] = "Marcador añadido";
-App::$strings["My Connections Bookmarks"] = "Marcadores de mis conexiones";
-App::$strings["Channel name changes are not allowed within 48 hours of changing the account password."] = "Los cambios en el nombre de un canal no está permitida hasta pasadas 48 horas desde el cambio de contraseña de la cuenta.";
-App::$strings["Change channel nickname/address"] = "Cambiar el alias o la dirección del canal";
-App::$strings["Any/all connections on other networks will be lost!"] = "¡Cualquier/todas las conexiones en otras redes se perderán!";
-App::$strings["New channel address"] = "Nueva dirección del canal";
-App::$strings["Rename Channel"] = "Renombrar el canal";
-App::$strings["Invite App"] = "Solicitar una app";
-App::$strings["Register is closed"] = "El registro está cerrado";
-App::$strings["Note, the invitation code is valid up to"] = "Tenga en cuenta que el código de invitación es válido hasta ";
-App::$strings["Too many recipients for one invitation (max %d)"] = "Demasiados destinatarios para una invitación (máx %d)";
-App::$strings["No recipients for this invitation"] = "No hay destinatarios para esta invitación";
-App::$strings["(%s) : Not a real email address"] = "(%s) : No es una dirección de correo electrónica real";
-App::$strings["(%s) : Not allowed email address"] = "(%s) : Dirección de correo electrónico no permitida";
-App::$strings["(%s) : email address already in use"] = "(%s) : La dirección de correo electrónico ya está en uso";
-App::$strings["(%s) : Accepted email address"] = "(%s) : Dirección de correo electrónico aceptada";
-App::$strings["To %s : Message delivery success."] = "To %s : Entrega exitosa del mensaje.";
-App::$strings["%1\$d mail(s) sent, %2\$d mail error(s)"] = "%1\$d correo(s) enviado, %2\$d error(es) de correo";
-App::$strings["Invites not proposed by configuration"] = "Invitaciones no propuestas por la configuración";
-App::$strings["Contact the site admin"] = "Contactar con el administrador del sitio";
-App::$strings["Invites by users not enabled"] = "Invitaciones de usuarios no habilitadas";
-App::$strings["You have no more invitations available"] = "No tiene más invitaciones disponibles";
-App::$strings["Not on xchan"] = "No en xchan";
-App::$strings["All users invitation limit exceeded."] = "Se ha superado el límite de invitaciones a todos los usuarios.";
-App::$strings["Invitation expires after"] = "La invitación expira después de ";
-App::$strings["Invitation"] = "Invitación";
-App::$strings["Send invitations"] = "Enviar invitaciones";
-App::$strings["Invitations I am using"] = "Invitaciones que estoy utilizando ";
-App::$strings["Invitations we are using"] = "Invitaciones que usamos ";
-App::$strings["§ Note, the email(s) sent will be recorded in the system logs"] = "§ Nota: el/los correo(s) electrónicos enviados quedarán registrados en los registros del sistema";
-App::$strings["Enter email addresses, one per line:"] = "Introduzca las direcciones de correo electrónico, una por línea:";
-App::$strings["Your message:"] = "Su mensaje:";
-App::$strings["Invite template"] = "Plantilla de invitación";
-App::$strings["Subject:"] = "Asunto:";
-App::$strings["Here you may enter personal notes to the recipient(s)"] = "Aquí puede introducir notas personales para el/los destinatario(s)";
-App::$strings["Private forum"] = "Foro privado";
-App::$strings["Public forum"] = "Foro público";
-App::$strings["Xchan Lookup"] = "Búsqueda de canales";
-App::$strings["Lookup xchan beginning with (or webbie): "] = "Buscar un canal (o un \"webbie\") que comience por:";
-App::$strings["Affinity Tool settings updated."] = "Actualización de los ajustes de Affinity Tool.";
-App::$strings["The numbers below represent the minimum and maximum slider default positions for your network/stream page as a percentage."] = "Los números que aparecen a continuación representan las posiciones predeterminadas mínimas y máximas de los controles deslizantes para su red/stream en forma de porcentaje.";
-App::$strings["Default maximum affinity level"] = "Nivel máximo de afinidad por defecto";
-App::$strings["0-99 default 99"] = "0-99 por defecto 99";
-App::$strings["Default minimum affinity level"] = "Nivel mínimo de afinidad por defecto";
-App::$strings["0-99 - default 0"] = "0-99 - por defecto 0";
-App::$strings["Persistent affinity levels"] = "Niveles de afinidad persistentes";
-App::$strings["If disabled the max and min levels will be reset to default after page reload"] = "Si está desactivado, los niveles máximo y mínimo se restablecerán a los valores predeterminados después de recargar la página.";
-App::$strings["Affinity Tool Settings"] = "Ajustes de Affinity Tool";
+App::$strings["Directory Settings"] = "Configuración del directorio";
+App::$strings["Additional Features"] = "Funcionalidades";
+App::$strings["%s - (Experimental)"] = "%s - (Experimental)";
+App::$strings["Display Settings"] = "Ajustes de visualización";
+App::$strings["Theme Settings"] = "Ajustes del tema";
+App::$strings["Custom Theme Settings"] = "Ajustes personalizados del tema";
+App::$strings["Content Settings"] = "Ajustes del contenido";
+App::$strings["Display Theme:"] = "Tema gráfico del perfil:";
+App::$strings["Select scheme"] = "Elegir un esquema";
+App::$strings["Preload images before rendering the page"] = "Carga previa de las imágenes antes de generar la página";
+App::$strings["The subjective page load time will be longer but the page will be ready when displayed"] = "El tiempo subjetivo de carga de la página será más largo, pero la página estará lista cuando se muestre.";
+App::$strings["Enable user zoom on mobile devices"] = "Habilitar zoom de usuario en dispositivos móviles";
+App::$strings["Update browser every xx seconds"] = "Actualizar navegador cada xx segundos";
+App::$strings["Minimum of 10 seconds, no maximum"] = "Mínimo de 10 segundos, sin máximo";
+App::$strings["Maximum number of conversations to load at any time:"] = "Máximo número de conversaciones a cargar en cualquier momento:";
+App::$strings["Maximum of 30 items"] = "Máximo de 30 elementos";
+App::$strings["Show emoticons (smilies) as images"] = "Mostrar emoticonos (smilies) como imágenes";
+App::$strings["Link post titles to source"] = "Enlazar título de la publicación a la fuente original";
+App::$strings["New Member Links"] = "Enlaces para nuevos miembros";
+App::$strings["Display new member quick links menu"] = "Mostrar el menú de enlaces rápidos para nuevos miembros";
+App::$strings["Settings saved."] = "Configuración guardada.";
+App::$strings["Settings saved. Reload page please."] = "Ajustes guardados. Recargue la página, por favor.";
+App::$strings["Conversation Settings"] = "Ajustes de conversación";
App::$strings["Max height of content (in pixels)"] = "Altura máxima del contenido (en píxeles)";
App::$strings["Click to expand content exceeding this height"] = "Haga clic para expandir el contenido que exceda esta altura";
-App::$strings["Stream Settings"] = "Ajustes del stream";
-App::$strings["Additional Features"] = "Funcionalidades";
+App::$strings["Personal menu to display in your channel pages"] = "Menú personal que debe mostrarse en las páginas de su canal";
+App::$strings["Channel Home Settings"] = "Ajustes del canal";
+App::$strings["Connections Settings"] = "Gestión de las conexiones";
+App::$strings["Not valid email."] = "Correo electrónico no válido.";
+App::$strings["Protected email address. Cannot change to that email."] = "Dirección de correo electrónico protegida. No se puede cambiar a ella.";
+App::$strings["System failure storing new email. Please try again."] = "Fallo de sistema al guardar el nuevo correo electrónico. Por favor, inténtelo de nuevo.";
+App::$strings["Password verification failed."] = "La comprobación de la contraseña ha fallado.";
+App::$strings["Passwords do not match. Password unchanged."] = "Las contraseñas no coinciden. La contraseña no se ha cambiado.";
+App::$strings["Empty passwords are not allowed. Password unchanged."] = "No se permiten contraseñas vacías. La contraseña no se ha cambiado.";
+App::$strings["Password changed."] = "Contraseña cambiada.";
+App::$strings["Password update failed. Please try again."] = "La actualización de la contraseña ha fallado. Por favor, inténtalo de nuevo.";
+App::$strings["Account Settings"] = "Configuración de la cuenta";
+App::$strings["Current Password"] = "Contraseña actual";
+App::$strings["Enter New Password"] = "Escribir una nueva contraseña";
+App::$strings["Confirm New Password"] = "Confirmar la nueva contraseña";
+App::$strings["Leave password fields blank unless changing"] = "Dejar en blanco la contraseña a menos que desee cambiarla.";
+App::$strings["DId2 or Email Address:"] = "Did2 o dirección de correo electrónico: ";
+App::$strings["Remove this account including all its channels"] = "Eliminar esta cuenta incluyendo todos sus canales";
+App::$strings["No feature settings configured"] = "No se ha establecido la configuración de los complementos";
+App::$strings["Addon Settings"] = "Ajustes de los complementos";
+App::$strings["Please save/submit changes to any panel before opening another."] = "Guarde o envíe los cambios a cualquier panel antes de abrir otro.";
App::$strings["Please select a channel role"] = "Por favor, seleccione un rol de canal";
App::$strings["Your channel address is"] = "Su dirección de canal es";
App::$strings["Your files/photos are accessible via WebDAV at"] = "Sus archivos y fotos son accesibles a través de WebDAV en ";
App::$strings["Channel Settings"] = "Ajustes del canal";
+App::$strings["Channel role"] = "Rol del canal";
App::$strings["Basic Settings"] = "Configuración básica";
App::$strings["Channel timezone:"] = "Zona horaria del canal: ";
App::$strings["Default post location:"] = "Ubicación de publicación predeterminada: ";
@@ -3076,7 +2882,6 @@ App::$strings["Adult content"] = "Contenido solo para adultos";
App::$strings["This channel frequently or regularly publishes adult content"] = "Este canal publica con frecuencia o regularmente contenidos para adultos";
App::$strings["Maximum Friend Requests/Day:"] = "Máximo de solicitudes de amistad por día:";
App::$strings["May reduce spam activity"] = "Podría reducir la actividad de spam";
-App::$strings["Notification Settings"] = "Configuración de las notificaciones";
App::$strings["By default post a status message when:"] = "Por defecto, enviar un mensaje de estado cuando:";
App::$strings["accepting a friend request"] = "Acepte una solicitud de amistad";
App::$strings["joining a forum/community"] = "al unirse a un foro o comunidad";
@@ -3121,6 +2926,7 @@ App::$strings["Must be greater than 0"] = "Debe ser mayor que 0";
App::$strings["Default photo upload folder"] = "Carpeta por defecto de las fotos subidas";
App::$strings["%Y - current year, %m - current month"] = "%Y - año en curso, %m - mes actual";
App::$strings["Default file upload folder"] = "Carpeta por defecto de los ficheros subidos";
+App::$strings["Remove Channel"] = "Eliminar el canal";
App::$strings["Remove this channel."] = "Eliminar este canal.";
App::$strings["Expire other channel content after this many days"] = "Caducar contenido de otros canales después de este número de días";
App::$strings["0 or blank to use the website limit."] = "0 o en blanco para usar el límite del sitio web.";
@@ -3128,52 +2934,13 @@ App::$strings["This website expires after %d days."] = "Este sitio web caduca de
App::$strings["This website does not expire imported content."] = "Este sitio web no caduca el contenido importado.";
App::$strings["The website limit takes precedence if lower than your limit."] = "El límite del sitio web tiene prioridad si es inferior a su propio límite.";
App::$strings["Words one per line or #tags, \$categories, /patterns/, lang=xx, lang!=xx - leave blank to import all posts"] = "Palabras una por línea o #tags, \$categories, /patterns/, lang=xx, lang!=xx - dejar en blanco para importar todas las entradas";
-App::$strings["Not valid email."] = "Correo electrónico no válido.";
-App::$strings["Protected email address. Cannot change to that email."] = "Dirección de correo electrónico protegida. No se puede cambiar a ella.";
-App::$strings["System failure storing new email. Please try again."] = "Fallo de sistema al guardar el nuevo correo electrónico. Por favor, inténtelo de nuevo.";
-App::$strings["Password verification failed."] = "La comprobación de la contraseña ha fallado.";
-App::$strings["Passwords do not match. Password unchanged."] = "Las contraseñas no coinciden. La contraseña no se ha cambiado.";
-App::$strings["Empty passwords are not allowed. Password unchanged."] = "No se permiten contraseñas vacías. La contraseña no se ha cambiado.";
-App::$strings["Password changed."] = "Contraseña cambiada.";
-App::$strings["Password update failed. Please try again."] = "La actualización de la contraseña ha fallado. Por favor, inténtalo de nuevo.";
-App::$strings["Account Settings"] = "Configuración de la cuenta";
-App::$strings["Current Password"] = "Contraseña actual";
-App::$strings["Enter New Password"] = "Escribir una nueva contraseña";
-App::$strings["Confirm New Password"] = "Confirmar la nueva contraseña";
-App::$strings["Leave password fields blank unless changing"] = "Dejar en blanco la contraseña a menos que desee cambiarla.";
-App::$strings["DId2 or Email Address:"] = "Did2 o dirección de correo electrónico: ";
-App::$strings["Remove this account including all its channels"] = "Eliminar esta cuenta incluyendo todos sus canales";
-App::$strings["No feature settings configured"] = "No se ha establecido la configuración de los complementos";
-App::$strings["Addon Settings"] = "Ajustes de los complementos";
-App::$strings["Please save/submit changes to any panel before opening another."] = "Guarde o envíe los cambios a cualquier panel antes de abrir otro.";
+App::$strings["Editor Settings"] = "Ajustes del editor";
+App::$strings["Stream Settings"] = "Ajustes del stream";
App::$strings["Events Settings"] = "Gestión de eventos";
-App::$strings["Channel Manager Settings"] = "Ajustes del administrador de canales";
-App::$strings["Personal menu to display in your channel pages"] = "Menú personal que debe mostrarse en las páginas de su canal";
-App::$strings["Channel Home Settings"] = "Ajustes del canal";
App::$strings["Calendar Settings"] = "Ajustes del calendario";
-App::$strings["%s - (Experimental)"] = "%s - (Experimental)";
-App::$strings["Display Settings"] = "Ajustes de visualización";
-App::$strings["Theme Settings"] = "Ajustes del tema";
-App::$strings["Custom Theme Settings"] = "Ajustes personalizados del tema";
-App::$strings["Content Settings"] = "Ajustes del contenido";
-App::$strings["Display Theme:"] = "Tema gráfico del perfil:";
-App::$strings["Select scheme"] = "Elegir un esquema";
-App::$strings["Preload images before rendering the page"] = "Carga previa de las imágenes antes de generar la página";
-App::$strings["The subjective page load time will be longer but the page will be ready when displayed"] = "El tiempo subjetivo de carga de la página será más largo, pero la página estará lista cuando se muestre.";
-App::$strings["Enable user zoom on mobile devices"] = "Habilitar zoom de usuario en dispositivos móviles";
-App::$strings["Update browser every xx seconds"] = "Actualizar navegador cada xx segundos";
-App::$strings["Minimum of 10 seconds, no maximum"] = "Mínimo de 10 segundos, sin máximo";
-App::$strings["Maximum number of conversations to load at any time:"] = "Máximo número de conversaciones a cargar en cualquier momento:";
-App::$strings["Maximum of 30 items"] = "Máximo de 30 elementos";
-App::$strings["Show emoticons (smilies) as images"] = "Mostrar emoticonos (smilies) como imágenes";
-App::$strings["Link post titles to source"] = "Enlazar título de la publicación a la fuente original";
-App::$strings["Display new member quick links menu"] = "Mostrar el menú de enlaces rápidos para nuevos miembros";
-App::$strings["Directory Settings"] = "Configuración del directorio";
-App::$strings["Editor Settings"] = "Ajustes del editor";
-App::$strings["Connections Settings"] = "Gestión de las conexiones";
-App::$strings["Photos Settings"] = "Gestión de las fotos";
App::$strings["Default profile for new contacts"] = "Perfil predeterminado para nuevos contactos";
App::$strings["Profiles Settings"] = "Gestión de los perfiles";
+App::$strings["Photos Settings"] = "Gestión de las fotos";
App::$strings["Privacy settings updated."] = "Se ha actualizado la configuración de la privacidad.";
App::$strings["Only those you specifically allow"] = "Solo aquellos a los que usted permita explícitamente";
App::$strings["Approved connections"] = "Conexiones aprobadas";
@@ -3192,64 +2959,167 @@ App::$strings["Automatically approve new contacts"] = "Aprobar automáticamente
App::$strings["Opt-out of search engine indexing"] = "Exclusión de la indexación en los motores de búsqueda";
App::$strings["Group actor"] = "Grupo de actores";
App::$strings["Allow this channel to act as a forum"] = "Permitir que este canal actúe como un foro";
-App::$strings["Settings saved."] = "Configuración guardada.";
-App::$strings["Settings saved. Reload page please."] = "Ajustes guardados. Recargue la página, por favor.";
-App::$strings["Conversation Settings"] = "Ajustes de conversación";
-App::$strings["Unable to update menu."] = "No se puede actualizar el menú.";
-App::$strings["Unable to create menu."] = "No se puede crear el menú.";
-App::$strings["Menu Name"] = "Nombre del menú";
-App::$strings["Unique name (not visible on webpage) - required"] = "Nombre único (no será visible en la página web) - requerido";
-App::$strings["Menu Title"] = "Título del menú";
-App::$strings["Visible on webpage - leave empty for no title"] = "Visible en la página web - no ponga nada si no desea un título";
-App::$strings["Allow Bookmarks"] = "Permitir marcadores";
-App::$strings["Menu may be used to store saved bookmarks"] = "El menú se puede usar para guardar marcadores";
-App::$strings["Submit and proceed"] = "Enviar y proceder";
-App::$strings["Drop"] = "Eliminar";
-App::$strings["Bookmarks allowed"] = "Marcadores permitidos";
-App::$strings["Delete this menu"] = "Borrar este menú";
-App::$strings["Edit menu contents"] = "Editar los contenidos del menú";
-App::$strings["Edit this menu"] = "Modificar este menú";
-App::$strings["Menu could not be deleted."] = "El menú no puede ser eliminado.";
-App::$strings["Edit Menu"] = "Modificar el menú";
-App::$strings["Add or remove entries to this menu"] = "Añadir o quitar entradas en este menú";
-App::$strings["Menu name"] = "Nombre del menú";
-App::$strings["Must be unique, only seen by you"] = "Debe ser único, solo será visible para usted";
-App::$strings["Menu title"] = "Título del menú";
-App::$strings["Menu title as seen by others"] = "El título del menú tal como será visto por los demás";
-App::$strings["Allow bookmarks"] = "Permitir marcadores";
+App::$strings["Channel Manager Settings"] = "Ajustes del administrador de canales";
+App::$strings["Private forum"] = "Foro privado";
+App::$strings["Public forum"] = "Foro público";
+App::$strings["Calendar entries imported."] = "Entradas de calendario importadas.";
+App::$strings["No calendar entries found."] = "No se han encontrado entradas de calendario.";
+App::$strings["Event title"] = "Título del evento";
+App::$strings["Start date and time"] = "Fecha y hora de comienzo";
+App::$strings["End date and time"] = "Fecha y hora de finalización";
+App::$strings["Timezone:"] = "Zona horaria: ";
+App::$strings["Month"] = "Mes";
+App::$strings["Week"] = "Semana";
+App::$strings["Day"] = "Día";
+App::$strings["List month"] = "Lista mensual";
+App::$strings["List week"] = "Lista semanal";
+App::$strings["List day"] = "Lista diaria";
+App::$strings["More"] = "Más";
+App::$strings["Less"] = "Menos";
+App::$strings["Select calendar"] = "Seleccionar un calendario";
+App::$strings["Channel Calendars"] = "Calendarios del canal";
+App::$strings["CalDAV Calendars"] = "Calendarios CalDAV";
+App::$strings["Delete all"] = "Eliminar todos";
+App::$strings["Sorry! Editing of recurrent events is not yet implemented."] = "¡Disculpas! La edición de eventos recurrentes aún no se ha implementado.";
+App::$strings["Could not fetch calendar resource. The selected calendar might be disabled."] = "No se ha podido obtener el recurso del calendario. Es posible que el calendario seleccionado esté desactivado.";
+App::$strings["Default Calendar"] = "Calendario por defecto";
+App::$strings["Default Addressbook"] = "Agenda de direcciones por defecto";
+App::$strings["Profile not found."] = "Perfil no encontrado.";
+App::$strings["Profile deleted."] = "Perfil eliminado.";
+App::$strings["Profile-"] = "Perfil-";
+App::$strings["New profile created."] = "El nuevo perfil ha sido creado.";
+App::$strings["Profile unavailable to clone."] = "Perfil no disponible para clonar.";
+App::$strings["Profile unavailable to export."] = "Perfil no disponible para exportar.";
+App::$strings["Profile Name is required."] = "Se necesita el nombre del perfil.";
+App::$strings["Marital Status"] = "Estado civil";
+App::$strings["Romantic Partner"] = "Pareja sentimental";
+App::$strings["Likes"] = "Me gusta";
+App::$strings["Dislikes"] = "No me gusta";
+App::$strings["Work/Employment"] = "Trabajo:";
+App::$strings["Religion"] = "Religión";
+App::$strings["Political Views"] = "Ideas políticas";
+App::$strings["Sexual Preference"] = "Preferencia sexual";
+App::$strings["Homepage"] = "Página personal";
+App::$strings["Interests"] = "Intereses";
+App::$strings["Profile updated."] = "Perfil actualizado.";
+App::$strings["Hide my connections from viewers of this profile"] = "Ocultar mis conexiones a los espectadores de este perfil";
+App::$strings["Publish my default profile in the network directory"] = "Publicar mi perfil por defecto en el directorio de la red";
+App::$strings["Suggest me as a potential contact to new members"] = "Sugerirme como contacto potencial a los nuevos miembros";
+App::$strings["Reveal my online status"] = "Revelar mi estado en línea";
+App::$strings["Edit Profile Details"] = "Modificar los detalles de este perfil";
+App::$strings["View this profile"] = "Ver este perfil";
+App::$strings["Profile Tools"] = "Gestión del perfil";
+App::$strings["Change cover photo"] = "Cambiar la imagen de portada del perfil";
+App::$strings["Create a new profile using these settings"] = "Crear un nuevo perfil usando estos ajustes";
+App::$strings["Clone this profile"] = "Clonar este perfil";
+App::$strings["Delete this profile"] = "Eliminar este perfil";
+App::$strings["Add profile things"] = "Añadir cosas al perfil";
+App::$strings["Basic"] = "Básico";
+App::$strings["Relationship"] = "Relación";
+App::$strings["Import profile from file"] = "Importar perfil desde un fichero";
+App::$strings["Export profile to file"] = "Exportar perfil a un fichero";
+App::$strings["Your gender"] = "Género";
+App::$strings["Marital status"] = "Estado civil";
+App::$strings["Sexual preference"] = "Preferencia sexual";
+App::$strings["Profile name"] = "Nombre del perfil";
+App::$strings["This is your default profile."] = "Este es su perfil principal.";
+App::$strings["Your full name"] = "Nombre completo";
+App::$strings["Short title/description"] = "Breve título y descripción";
+App::$strings["Maximal 190 characters"] = "Máximo de 190 caracteres";
+App::$strings["Street address"] = "Dirección";
+App::$strings["Locality/City"] = "Ciudad";
+App::$strings["Region/State"] = "Región o Estado";
+App::$strings["Postal/Zip code"] = "Código postal";
+App::$strings["Who (if applicable)"] = "Quién (si es pertinente)";
+App::$strings["Examples: cathy123, Cathy Williams, cathy@example.com"] = "Por ejemplo: ana123, María González, sara@ejemplo.com";
+App::$strings["Since (date)"] = "Desde (fecha)";
+App::$strings["Tell us about yourself"] = "Háblenos de usted";
+App::$strings["Hometown"] = "Lugar de nacimiento";
+App::$strings["Political views"] = "Ideas políticas";
+App::$strings["Religious views"] = "Creencias religiosas";
+App::$strings["Keywords used in directory listings"] = "Palabras clave utilizadas en los listados de directorios";
+App::$strings["Example: fishing photography software"] = "Por ejemplo: software de fotografía submarina";
+App::$strings["Musical interests"] = "Preferencias musicales";
+App::$strings["Books, literature"] = "Libros, literatura";
+App::$strings["Television"] = "Televisión";
+App::$strings["Film/Dance/Culture/Entertainment"] = "Cine, danza, cultura, entretenimiento";
+App::$strings["Hobbies/Interests"] = "Aficiones o intereses";
+App::$strings["Love/Romance"] = "Vida sentimental o amorosa";
+App::$strings["School/Education"] = "Estudios";
+App::$strings["Contact information and social networks"] = "Información de contacto y redes sociales";
+App::$strings["My other channels"] = "Mis otros canales";
+App::$strings["Remote privacy information not available"] = "La información sobre privacidad remota no está disponible";
+App::$strings["__ctx:acl__ Profile"] = "Perfil";
+App::$strings["Privacy group"] = "Grupo de canales";
+App::$strings["Click to copy link to this ressource for guest %s to clipboard"] = "Haga clic para copiar el enlace a este recurso para invitados %sen el portapapeles";
+App::$strings["Link copied"] = "Enlace copiado";
+App::$strings["Access"] = "Acceso";
+App::$strings["Guest access"] = "Acceso para invitados";
+App::$strings["Import Webpage Elements"] = "Importar elementos de una página web";
+App::$strings["Import selected"] = "Importar elementos seleccionados";
+App::$strings["Export Webpage Elements"] = "Exportar elementos de una página web";
+App::$strings["Export selected"] = "Exportar los elementos seleccionados";
+App::$strings["Actions"] = "Acciones";
+App::$strings["Page Link"] = "Vínculo de la página";
+App::$strings["Page Title"] = "Título de página";
+App::$strings["Invalid file type."] = "Tipo de fichero no válido.";
+App::$strings["Error opening zip file"] = "Error al abrir el fichero comprimido zip";
+App::$strings["Invalid folder path."] = "La ruta de la carpeta no es válida.";
+App::$strings["No webpage elements detected."] = "No se han detectado elementos de ninguna página web.";
+App::$strings["Import complete."] = "Importación completada.";
+App::$strings["Deprecated!"] = "¡Obsoleto!";
+App::$strings["Permission Denied."] = "Permiso denegado";
+App::$strings["Edit file permissions"] = "Modificar los permisos del fichero";
+App::$strings["Include all files and sub folders"] = "Incluir todos los ficheros y subcarpetas";
+App::$strings["Return to file list"] = "Volver a la lista de ficheros";
+App::$strings["Copy/paste this code to attach file to a post"] = "Copiar/pegar este código para adjuntar el fichero al envío";
+App::$strings["Copy/paste this URL to link file from a web page"] = "Copiar/pegar esta dirección para enlazar el fichero desde una página web";
+App::$strings["Share this file"] = "Compartir este fichero";
+App::$strings["Show URL to this file"] = "Mostrar la dirección de este fichero";
+App::$strings["Show in your contacts shared folder"] = "Mostrar en la carpeta compartida con sus contactos";
+App::$strings["Enter a folder name"] = "Escriba un nombre de carpeta";
+App::$strings["or select an existing folder (doubleclick)"] = "o seleccione una (con un doble click)";
+App::$strings["Comment approved"] = "El comentario ha sido aprobado";
+App::$strings["Comment deleted"] = "Se ha eliminado el comentario";
+App::$strings["Layout updated."] = "Plantilla actualizada.";
+App::$strings["Edit System Page Description"] = "Editor del Sistema de Descripción de Páginas";
+App::$strings["(modified)"] = "(modificado)";
+App::$strings["Layout not found."] = "Plantilla no encontrada";
+App::$strings["Module Name:"] = "Nombre del módulo:";
+App::$strings["Layout Help"] = "Ayuda para el diseño de plantillas de página";
+App::$strings["Edit another layout"] = "Editar otro diseño";
+App::$strings["System layout"] = "Diseño del sistema";
+App::$strings["network"] = "red";
+App::$strings["About this site"] = "Acerca de este sitio";
+App::$strings["Site Name"] = "Nombre del sitio";
+App::$strings["Administrator"] = "Administrador";
+App::$strings["Software and Project information"] = "Información sobre el software y el proyecto";
+App::$strings["This site is powered by \$Projectname"] = "Este sitio funciona con \$Projectname";
+App::$strings["Federated and decentralised networking and identity services provided by Zot"] = "Servicios federados y descentralizados de identidad y redes proporcionados por Zot";
+App::$strings["Additional federated transport protocols:"] = "Protocolos adicionales de transporte federado: ";
+App::$strings["Version %s"] = "Versión %s";
+App::$strings["Project homepage"] = "Página principal del proyecto";
+App::$strings["Developer homepage"] = "Página principal del desarrollador";
+App::$strings["Item not available."] = "Elemento no disponible";
+App::$strings["Post not found."] = "Mensaje no encontrado.";
+App::$strings["%1\$s tagged %2\$s's %3\$s with %4\$s"] = "%1\$s ha etiquetado %3\$s de %2\$s con %4\$s";
+App::$strings["Event can not end before it has started."] = "Un evento no puede terminar antes de que haya comenzado.";
+App::$strings["Unable to generate preview."] = "No se puede crear la vista previa.";
+App::$strings["Event title and start time are required."] = "Se requieren el título del evento y su hora de inicio.";
+App::$strings["Event not found."] = "Evento no encontrado.";
+App::$strings["Edit event"] = "Editar evento";
+App::$strings["Delete event"] = "Borrar evento";
+App::$strings["calendar"] = "calendario";
+App::$strings["Failed to remove event"] = "Error al eliminar el evento";
+App::$strings["Please login."] = "Por favor, inicie sesión.";
App::$strings["Connection Default Permissions"] = "Permisos predeterminados de conexión";
App::$strings["Apply these permissions automatically"] = "Aplicar estos permisos automaticamente";
App::$strings["If enabled, connection requests will be approved without your interaction"] = "Si está habilitado, las solicitudes de conexión serán aprobadas sin su intervención.";
App::$strings["Permission role"] = "Permisos de rol";
App::$strings["Add permission role"] = "Añadir permisos de rol";
-App::$strings["The permissions indicated on this page will be applied to all new connections."] = "Los permisos indicados en esta página serán aplicados en todas las nuevas conexiones.";
App::$strings["Automatic approval settings"] = "Opciones de autorización automática";
App::$strings["My Settings"] = "Mis ajustes";
-App::$strings["Individual Permissions"] = "Permisos individuales";
App::$strings["Some individual permissions may have been preset or locked based on your channel type and privacy settings."] = "Es posible que se hayan preestablecido o bloqueado algunos permisos individuales según el tipo de canal y la configuración de privacidad.";
-App::$strings["This setting requires special processing and editing has been blocked."] = "Este ajuste necesita de un proceso especial y la edición ha sido bloqueada.";
-App::$strings["Configuration Editor"] = "Editor de configuración";
-App::$strings["Warning: Changing some settings could render your channel inoperable. Please leave this page unless you are comfortable with and knowledgeable about how to correctly use this feature."] = "Atención: El cambio de algunos ajustes puede volver inutilizable su canal. Por favor, abandone la página excepto que esté seguro y sepa cómo usar correctamente esta característica.";
-App::$strings["Name and Secret are required"] = "\"Key\" y \"Secret\" son obligatorios";
-App::$strings["Add OAuth2 application"] = "Añadir aplicación OAuth2";
-App::$strings["Grant Types"] = "Tipos de permisos";
-App::$strings["leave blank unless your application sepcifically requires this"] = "Dejar en blanco a menos que su aplicación lo requiera específicamente";
-App::$strings["Authorization scope"] = "Alcance de la autorización";
-App::$strings["OAuth2 Application not found."] = "No se ha encontrado la aplicación OAuth2.";
-App::$strings["leave blank unless your application specifically requires this"] = "dejar en blanco a menos que su aplicación lo requiera específicamente";
-App::$strings["Connected OAuth2 Apps"] = "Aplicaciones OAuth2 conectadas";
-App::$strings["Invalid message"] = "Mensaje no válido";
-App::$strings["no results"] = "sin resultados";
-App::$strings["channel sync processed"] = "se ha realizado la sincronización del canal";
-App::$strings["queued"] = "encolado";
-App::$strings["posted"] = "enviado";
-App::$strings["accepted for delivery"] = "aceptado para el envío";
-App::$strings["updated"] = "actualizado";
-App::$strings["update ignored"] = "actualización ignorada";
-App::$strings["permission denied"] = "permiso denegado";
-App::$strings["recipient not found"] = "destinatario no encontrado";
-App::$strings["Delivery report for %1\$s"] = "Informe de entrega para %1\$s";
-App::$strings["Redeliver"] = "Volver a enviar";
App::$strings["Thing updated"] = "Elemento actualizado.";
App::$strings["Object store: failed"] = "Guardar objeto: ha fallado";
App::$strings["Thing added"] = "Elemento añadido";
@@ -3264,7 +3134,217 @@ App::$strings["Name of thing e.g. something"] = "Nombre del elemento, p. ej.:. \
App::$strings["URL of thing (optional)"] = "Dirección del elemento (opcional)";
App::$strings["URL for photo of thing (optional)"] = "Dirección para la foto o elemento (opcional)";
App::$strings["Add Thing to your Profile"] = "Añadir alguna cosa a su perfil";
-App::$strings["Authentication failed."] = "Falló la autenticación.";
+App::$strings["Edit Block"] = "Modificar este bloque";
+App::$strings["Files: shared with me"] = "Ficheros: compartidos conmigo";
+App::$strings["NEW"] = "NUEVO";
+App::$strings["Last Modified"] = "Última modificación";
+App::$strings["Remove all files"] = "Eliminar todos los ficheros";
+App::$strings["Remove this file"] = "Eliminar este fichero";
+App::$strings["\$Projectname Server - Setup"] = "Servidor \$Projectname - Instalación";
+App::$strings["Could not connect to database."] = "No se ha podido conectar a la base de datos.";
+App::$strings["Could not connect to specified site URL. Possible SSL certificate or DNS issue."] = "No se puede conectar con la dirección del sitio indicada. Podría tratarse de un problema de SSL o DNS.";
+App::$strings["Could not create table."] = "No se puede crear la tabla.";
+App::$strings["Your site database has been installed."] = "La base de datos del sitio ha sido instalada.";
+App::$strings["You may need to import the file \"install/schema_xxx.sql\" manually using a database client."] = "Podría tener que importar manualmente el fichero \"install/schema_xxx.sql\" usando un cliente de base de datos.";
+App::$strings["Please see the file \"install/INSTALL.txt\"."] = "Por favor, lea el fichero \"install/INSTALL.txt\".";
+App::$strings["System check"] = "Verificación del sistema";
+App::$strings["Check again"] = "Verificar de nuevo";
+App::$strings["Database connection"] = "Conexión a la base de datos";
+App::$strings["In order to install \$Projectname we need to know how to connect to your database."] = "Para instalar \$Projectname es necesario saber cómo conectar con su base de datos.";
+App::$strings["Please contact your hosting provider or site administrator if you have questions about these settings."] = "Por favor, contacte con el proveedor de servicios o el administrador del sitio si tiene dudas sobre estos ajustes.";
+App::$strings["The database you specify below should already exist. If it does not, please create it before continuing."] = "La base de datos que especifique a continuación debe existir ya. Si no es así, por favor, créela antes de seguir.";
+App::$strings["Database Server Name"] = "Nombre del servidor de base de datos";
+App::$strings["Default is 127.0.0.1"] = "De forma predeterminada es 127.0.0.1";
+App::$strings["Database Port"] = "Puerto de la base de datos";
+App::$strings["Communication port number - use 0 for default"] = "Número del puerto de comunicaciones - use 0 como valor por defecto";
+App::$strings["Database Login Name"] = "Usuario de la base de datos";
+App::$strings["Database Login Password"] = "Contraseña de acceso a la base de datos";
+App::$strings["Database Name"] = "Nombre de la base de datos";
+App::$strings["Database Type"] = "Tipo de base de datos";
+App::$strings["Site administrator email address"] = "Dirección de correo electrónico del administrador del sitio";
+App::$strings["Your account email address must match this in order to use the web admin panel."] = "Su cuenta deberá usar la misma dirección de correo electrónico para poder utilizar el panel de administración web.";
+App::$strings["Website URL"] = "Dirección del sitio web";
+App::$strings["Please use SSL (https) URL if available."] = "Por favor, use SSL (https) si está disponible.";
+App::$strings["Please select a default timezone for your website"] = "Por favor, selecciones el huso horario por defecto de su sitio web";
+App::$strings["Site settings"] = "Ajustes del sitio";
+App::$strings["PHP version 8.0 or greater is required."] = "Se requiere la versión 8.0 o superior de PHP.";
+App::$strings["PHP version"] = "Versión de PHP";
+App::$strings["Could not find a command line version of PHP in the web server PATH."] = "No se puede encontrar una versión en línea de comandos de PHP en la ruta del servidor web.";
+App::$strings["If you don't have a command line version of PHP installed on server, you will not be able to run background polling via cron."] = "Si no tiene instalada la versión de línea de comandos de PHP en su servidor, no podrá realizar envíos en segundo plano mediante cron.";
+App::$strings["PHP executable path"] = "Ruta del ejecutable PHP";
+App::$strings["Enter full path to php executable. You can leave this blank to continue the installation."] = "Introducir la ruta completa del ejecutable PHP. Puede dejar la línea en blanco para continuar la instalación.";
+App::$strings["Command line PHP"] = "PHP en línea de comandos";
+App::$strings["Unable to check command line PHP, as shell_exec() is disabled. This is required."] = "No se puede comprobar la línea de comandos PHP, ya que shell_exec() está deshabilitado. Es necesario que esté activado.";
+App::$strings["The command line version of PHP on your system does not have \"register_argc_argv\" enabled."] = "La línea de comandos PHP de su sistema no tiene activado \"register_argc_argv\".";
+App::$strings["This is required for message delivery to work."] = "Esto es necesario para que funcione la transmisión de mensajes.";
+App::$strings["PHP register_argc_argv"] = "PHP register_argc_argv";
+App::$strings["This is not sufficient to upload larger images or files. You should be able to upload at least 4 MB at once."] = "Esto no es suficiente para subir imágenes o archivos más grandes. Usted debe ser capaz de subir al menos 4 MB a la vez.";
+App::$strings["Your max allowed total upload size is set to %s. Maximum size of one file to upload is set to %s. You are allowed to upload up to %d files at once."] = "La carga máxima que se le permite subir está establecida en %s. El tamaño máximo de un fichero está establecido en %s. Está permitido subir hasta un máximo de %d ficheros de una sola vez.";
+App::$strings["You can adjust these settings in the server php.ini file."] = "Puede ajustar estos valores en el fichero php.ini de su servidor.";
+App::$strings["PHP upload limits"] = "Límites PHP de subida";
+App::$strings["Error: the \"openssl_pkey_new\" function on this system is not able to generate encryption keys"] = "Error: La función \"openssl_pkey_new\" en este sistema no es capaz de general claves de cifrado.";
+App::$strings["If running under Windows, please see \"http://www.php.net/manual/en/openssl.installation.php\"."] = "Si está en un servidor Windows, por favor, lea \"http://www.php.net/manual/en/openssl.installation.php\".";
+App::$strings["Generate encryption keys"] = "Generar claves de cifrado";
+App::$strings["libCurl PHP module"] = "módulo libCurl PHP";
+App::$strings["GD graphics PHP module"] = "módulo PHP GD graphics";
+App::$strings["OpenSSL PHP module"] = "módulo PHP OpenSSL";
+App::$strings["PDO database PHP module"] = "Módulo PHP de la base de datos PDO ";
+App::$strings["mb_string PHP module"] = "módulo PHP mb_string";
+App::$strings["xml PHP module"] = "módulo PHP xml";
+App::$strings["zip PHP module"] = "Módulo zip PHP";
+App::$strings["Apache mod_rewrite module"] = "módulo Apache mod_rewrite ";
+App::$strings["Error: Apache webserver mod-rewrite module is required but not installed."] = "Error: se necesita el módulo del servidor web Apache mod-rewrite pero no está instalado.";
+App::$strings["exec"] = "ejecutable";
+App::$strings["Error: exec is required but is either not installed or has been disabled in php.ini"] = "Error: se necesita un ejecutable pero o no se instaló o está deshabilitado en php.ini";
+App::$strings["shell_exec"] = "shell_exec";
+App::$strings["Error: shell_exec is required but is either not installed or has been disabled in php.ini"] = "Error: se necesita shell_exec pero o no se instaló o está deshabilitado en php.ini";
+App::$strings["Error: libCURL PHP module required but not installed."] = "Error: se necesita el módulo PHP libCURL pero no está instalado.";
+App::$strings["Error: GD PHP module with JPEG support or ImageMagick graphics library required but not installed."] = "Error: Se requiere el módulo GD PHP con soporte para JPEG o la biblioteca de gráficos ImageMagick, pero no está instalado.";
+App::$strings["Error: openssl PHP module required but not installed."] = "Error: el módulo PHP openssl es necesario, pero no está instalado.";
+App::$strings["Error: PDO database PHP module missing a driver for either mysql or pgsql."] = "Error: El módulo PHP de la base de datos PDO carece de un controlador para mysql o pgsql.";
+App::$strings["Error: PDO database PHP module required but not installed."] = "Error: se necesita el módulo PHP de la base de datos PDO, pero no está instalado.";
+App::$strings["Error: mb_string PHP module required but not installed."] = "Error: el módulo PHP mb_string es necesario, pero no está instalado.";
+App::$strings["Error: xml PHP module required for DAV but not installed."] = "Error: el módulo PHP xml es necesario para DAV, pero no está instalado.";
+App::$strings["Error: zip PHP module required but not installed."] = "Error: se requiere el módulo zip PHP pero no está instalado.";
+App::$strings[".htconfig.php is writable"] = ".htconfig.php tiene permisos de escritura";
+App::$strings["The web installer needs to be able to create a file called \".htconfig.php\" in the top folder of your web server and it is unable to do so."] = "El instalador web no ha podido crear un fichero llamado “.htconfig.php” en la carpeta base de su servidor.";
+App::$strings["This is most often a permission setting, as the web server may not be able to write files in your folder - even if you can."] = "Esto está generalmente ligado a un problema de permisos, a causa del cual el servidor web tiene prohibido modificar ficheros en su carpeta - incluso si usted mismo tiene esos permisos.";
+App::$strings["Please see install/INSTALL.txt for additional information."] = "Por favor, consulte install/INSTALL.txt para más información.";
+App::$strings["This software uses the Smarty3 template engine to render its web views. Smarty3 compiles templates to PHP to speed up rendering."] = "Este software hace uso del motor de plantillas Smarty3 para diseñar sus plantillas gráficas. Smarty3 compila las plantillas a PHP para acelerar la renderización.";
+App::$strings["In order to store these compiled templates, the web server needs to have write access to the directory %s under the top level web folder."] = "Para poder guardar las plantillas compiladas, el servidor web necesita permisos para acceder al directorio %s en la carpeta web principal.";
+App::$strings["Please ensure that the user that your web server runs as (e.g. www-data) has write access to this folder."] = "Por favor, asegúrese de que el servidor web está siendo ejecutado por un usuario que tenga permisos de escritura sobre esta carpeta (por ejemplo, www-data).";
+App::$strings["Note: as a security measure, you should give the web server write access to %s only--not the template files (.tpl) that it contains."] = "Nota: como medida de seguridad, debe dar al servidor web permisos de escritura solo sobre %s - no sobre el fichero de plantilla (.tpl) que contiene.";
+App::$strings["%s is writable"] = "%s tiene permisos de escritura";
+App::$strings["This software uses the store directory to save uploaded files. The web server needs to have write access to the store directory under the top level web folder"] = "Este software utiliza el directorio de almacenamiento para guardar los ficheros subidos. El servidor web debe tener acceso de escritura a este directorio en la carpeta de nivel superior";
+App::$strings["store is writable"] = "\"store\" tiene permisos de escritura";
+App::$strings["SSL certificate cannot be validated. Fix certificate or disable https access to this site."] = "El certificado SSL no ha podido ser validado. Corrija este problema o desactive el acceso https a este sitio.";
+App::$strings["If you have https access to your website or allow connections to TCP port 443 (the https: port), you MUST use a browser-valid certificate. You MUST NOT use self-signed certificates!"] = "Si su servidor soporta conexiones cifradas SSL o si permite conexiones al puerto TCP 443 (el puerto usado por el protocolo https), debe utilizar un certificado válido. No debe usar un certificado firmado por usted mismo.";
+App::$strings["This restriction is incorporated because public posts from you may for example contain references to images on your own hub."] = "Se ha incorporado esta restricción para evitar que sus entradas públicas hagan referencia a imágenes en su propio servidor.";
+App::$strings["If your certificate is not recognized, members of other sites (who may themselves have valid certificates) will get a warning message on their own site complaining about security issues."] = "Si su certificado no ha sido reconocido, los miembros de otros sitios (con certificados válidos) recibirán mensajes de aviso en sus propios sitios web.";
+App::$strings["This can cause usability issues elsewhere (not just on your own site) so we must insist on this requirement."] = "Por razones de compatibilidad (sobre el conjunto de la red, no solo sobre su propio sitio), debemos insistir en estos requisitos.";
+App::$strings["Providers are available that issue free certificates which are browser-valid."] = "Existen varias Autoridades de Certificación que le pueden proporcionar certificados válidos.";
+App::$strings["If you are confident that the certificate is valid and signed by a trusted authority, check to see if you have failed to install an intermediate cert. These are not normally required by browsers, but are required for server-to-server communications."] = "Si se tiene la certeza de que el certificado es válido y está firmado por una autoridad de confianza, comprobar para ver si hubo un error al instalar un certificado intermedio. Estos no son normalmente requeridos por los navegadores, pero son necesarios para las comunicaciones de servidor a servidor.";
+App::$strings["SSL certificate validation"] = "validación del certificado SSL";
+App::$strings["Url rewrite in .htaccess is not working. Check your server configuration.Test: "] = "No se pueden reescribir las direcciones web en .htaccess. Compruebe la configuración de su servidor:";
+App::$strings["Url rewrite is working"] = "La reescritura de las direcciones funciona correctamente";
+App::$strings["The database configuration file \".htconfig.php\" could not be written. Please use the enclosed text to create a configuration file in your web server root."] = "El fichero de configuración de la base de datos .htconfig.php no se ha podido modificar. Por favor, copie el texto generado en un fichero con ese nombre en el directorio raíz de su servidor.";
+App::$strings["<h1>What next?</h1>"] = "<h1>¿Qué sigue?</h1>";
+App::$strings["IMPORTANT: You will need to [manually] setup a scheduled task for the poller."] = "IMPORTANTE: Debe crear [manualmente] una tarea programada para el \"poller\".";
+App::$strings["Change Order of Pinned Navbar Apps"] = "Cambiar el orden de las aplicaciones fijas en la barra de navegación";
+App::$strings["Change Order of App Tray Apps"] = "Cambiar el orden de las aplicaciones de la bandeja de aplicaciones";
+App::$strings["Use arrows to move the corresponding app left (top) or right (bottom) in the navbar"] = "Use las flechas para mover la aplicación correspondiente a la izquierda (arriba) o derecha (abajo) en la barra de navegación.";
+App::$strings["Use arrows to move the corresponding app up or down in the app tray"] = "Use las flechas para mover la aplicación correspondiente hacia arriba o hacia abajo en la bandeja de aplicaciones.";
+App::$strings["Blocked accounts"] = "Cuentas bloqueadas";
+App::$strings["Expired accounts"] = "Cuentas caducadas";
+App::$strings["Expiring accounts"] = "Cuentas que caducan";
+App::$strings["Message queues"] = "Mensajes en cola";
+App::$strings["Your software should be updated"] = "Debe actualizar su software";
+App::$strings["Summary"] = "Sumario";
+App::$strings["Registered accounts"] = "Cuentas registradas";
+App::$strings["Pending registrations"] = "Registros pendientes";
+App::$strings["Registered channels"] = "Canales registrados";
+App::$strings["Active addons"] = "Addons acivos";
+App::$strings["Version"] = "Versión";
+App::$strings["Repository version (master)"] = "Versión del repositorio (master)";
+App::$strings["Repository version (dev)"] = "Versión del repositorio (dev)";
+App::$strings["Tag removed"] = "Etiqueta eliminada.";
+App::$strings["Remove Item Tag"] = "Eliminar etiqueta del elemento.";
+App::$strings["Select a tag to remove: "] = "Seleccionar una etiqueta para eliminar:";
+App::$strings["item"] = "elemento";
+App::$strings["Email verification resent"] = "Reenvío del email de verificación";
+App::$strings["Unable to resend email verification message."] = "No se puede reenviar el mensaje de verificación por correo electrónico.";
+App::$strings["Privacy group created."] = "El grupo de canales ha sido creado.";
+App::$strings["Could not create privacy group."] = "No se puede crear el grupo de canales";
+App::$strings["Privacy group updated."] = "Grupo de canales actualizado.";
+App::$strings["Post to this group by default"] = "Publicar en este grupo por defecto";
+App::$strings["Add new contacts to this group by default"] = "Añadir nuevos contactos a este grupo por defecto";
+App::$strings["Privacy group name"] = "Nombre del grupo";
+App::$strings["Members are visible to other channels"] = "Los miembros son visibles para otros canales";
+App::$strings["Privacy group removed."] = "Grupo de canales eliminado.";
+App::$strings["Unable to remove privacy group."] = "No se puede eliminar el grupo de canales.";
+App::$strings["Privacy Group: %s"] = "Grupo privado %s";
+App::$strings["Privacy group name: "] = "Nombre del grupo de canales:";
+App::$strings["Group members"] = "Miembros del grupo";
+App::$strings["Not in this group"] = "No en este grupo";
+App::$strings["Click a channel to toggle membership"] = "Haga clic en un canal para cambiar los miembros";
+App::$strings["Item is not editable"] = "El elemento no es editable";
+App::$strings["Some blurb about what to do when you're new here"] = "Algunas propuestas para el nuevo usuario sobre qué se puede hacer aquí";
+App::$strings["Layout not found"] = "Diseño no encontrado";
+App::$strings["This template does not support pdledi_gui (no content regions defined)"] = "Esta plantilla no es compatible con pdledi_gui (no hay regiones de contenido definidas)";
+App::$strings["Main page content"] = "Contenido de la página principal";
+App::$strings["The main page content can not be edited!"] = "El contenido de la página principal no se puede editar.";
+App::$strings["You have created %1$.0f of %2$.0f allowed channels."] = "Ha creado %1$.0f de %2$.0f canales permitidos.";
+App::$strings["Your real name is recommended."] = "Se recomienda su nombre real.";
+App::$strings["Examples: \"Bob Jameson\", \"Lisa and her Horses\", \"Soccer\", \"Aviation Group\""] = "Ejemplos: \"Juan García\", \"Luisa y sus caballos\", \"Fútbol\", \"Grupo de aviación\"";
+App::$strings["This will be used to create a unique network address (like an email address)."] = "Esto se utilizará para crear una dirección de red única (como una dirección de correo electrónico).";
+App::$strings["Allowed characters are a-z 0-9, - and _"] = "Los caracteres permitidos son a-z 0-9, - and _";
+App::$strings["Channel name"] = "Nombre del canal";
+App::$strings["Create a Channel"] = "Crear un canal";
+App::$strings["A channel is a unique network identity. It can represent a person (social network profile), a forum (group), a business or celebrity page, a newsfeed, and many other things."] = "Un canal es una identidad única en la red. Puede representar a una persona (un perfil de una red social), un foro o grupo, un negocio o una página de una celebridad, un \"feed\" de noticias, y muchas otras cosas.";
+App::$strings["or <a href=\"import\">import an existing channel</a> from another location."] = "O <a href=\"import\">importar un canal </a> desde otro lugar.";
+App::$strings["Validate"] = "Validar";
+App::$strings["Update to Hubzilla 5.0 step 2"] = "Actualizar a Hubzilla 5.0. Paso 2";
+App::$strings["To complete the update please run"] = "Para completar la actualización, ejecutar ";
+App::$strings["php util/z6convert.php"] = "php util/z6convert.php";
+App::$strings["from the terminal."] = "desde la terminal.";
+App::$strings["Public Hubs"] = "Servidores públicos";
+App::$strings["The listed hubs allow public registration for the \$Projectname network. All hubs in the network are interlinked so membership on any of them conveys membership in the network as a whole. Some hubs may require subscription or provide tiered service plans. The hub itself <strong>may</strong> provide additional details."] = "Los sitios listados permiten el registro público en la red \$Projectname. Todos los sitios de la red están vinculados entre sí, por lo que sus miembros, en ninguno de ellos, indican la pertenencia a la red en su conjunto. Algunos sitios pueden requerir suscripción o proporcionar planes de servicio por niveles. Los mismos hubs <strong>pueden</strong> proporcionar detalles adicionales.";
+App::$strings["Hub URL"] = "Dirección del hub";
+App::$strings["Access Type"] = "Tipo de acceso";
+App::$strings["Registration Policy"] = "Normas de registro";
+App::$strings["Stats"] = "Estadísticas";
+App::$strings["Software"] = "Software";
+App::$strings["Ratings"] = "Valoraciones";
+App::$strings["Rate"] = "Valorar";
+App::$strings["Album not found."] = "Álbum no encontrado.";
+App::$strings["Delete Album"] = "Borrar álbum";
+App::$strings["Delete Photo"] = "Borrar foto";
+App::$strings["No photos selected"] = "No hay fotos seleccionadas";
+App::$strings["Access to this item is restricted."] = "El acceso a este elemento está restringido.";
+App::$strings["%1$.2f MB photo storage used."] = "%1$.2f MB de almacenamiento de fotos utilizado.";
+App::$strings["%1$.2f MB of %2$.2f MB photo storage used."] = "%1$.2f MB de %2$.2f MB de almacenamiento de fotos utilizado.";
+App::$strings["Upload Photos"] = "Subir fotos";
+App::$strings["Enter an album name"] = "Introducir un nombre de álbum";
+App::$strings["or select an existing album (doubleclick)"] = "o seleccionar un álbum (con un doble click)";
+App::$strings["Create a status post for this upload"] = "Crear un mensaje de estado para esta subida";
+App::$strings["Description (optional)"] = "Descripción (opcional)";
+App::$strings["Show Newest First"] = "Mostrar lo más reciente primero";
+App::$strings["Show Oldest First"] = "Mostrar lo más antiguo primero";
+App::$strings["Add Photos"] = "Añadir fotos";
+App::$strings["Permission denied. Access to this item may be restricted."] = "Permiso denegado. El acceso a este elemento puede estar restringido.";
+App::$strings["Photo not available"] = "Foto no disponible";
+App::$strings["Use as profile photo"] = "Usar como foto del perfil";
+App::$strings["Use as cover photo"] = "Usar como imagen de portada del perfil";
+App::$strings["Private Photo"] = "Foto privada";
+App::$strings["View Full Size"] = "Ver tamaño completo";
+App::$strings["Edit photo"] = "Editar foto";
+App::$strings["Rotate CW (right)"] = "Girar CW (a la derecha)";
+App::$strings["Rotate CCW (left)"] = "Girar CCW (a la izquierda)";
+App::$strings["Move photo to album"] = "Mover la foto a un álbum";
+App::$strings["Enter a new album name"] = "Introducir un nuevo nombre de álbum";
+App::$strings["or select an existing one (doubleclick)"] = "o seleccionar un álbum (con un doble click)";
+App::$strings["Add a Tag"] = "Añadir una etiqueta";
+App::$strings["Example: @bob, @Barbara_Jensen, @jim@example.com"] = "Ejemplos: @eva, @Carmen_Osuna, @jaime@ejemplo.com";
+App::$strings["Flag as adult in album view"] = "Marcar como \"solo para adultos\" en el álbum";
+App::$strings["Photo Tools"] = "Gestión de las fotos";
+App::$strings["In This Photo:"] = "En esta foto:";
+App::$strings["Map"] = "Mapa";
+App::$strings["%s element installed"] = "%s elemento instalado";
+App::$strings["%s element installation failed"] = "Elemento con instalación fallida: %s";
+App::$strings["No channel."] = "Ningún canal.";
+App::$strings["No connections in common."] = "Ninguna conexión en común.";
+App::$strings["View Common Connections"] = "Ver las conexiones comunes";
+App::$strings["Select a bookmark folder"] = "Seleccionar una carpeta de marcadores";
+App::$strings["Save Bookmark"] = "Guardar marcador";
+App::$strings["URL of bookmark"] = "Dirección del marcador";
+App::$strings["Or enter new bookmark folder name"] = "O introduzca un nuevo nombre para la carpeta de marcadores";
+App::$strings["Invalid profile identifier."] = "Identificador del perfil no válido";
+App::$strings["Profile Visibility Editor"] = "Editor de visibilidad del perfil";
+App::$strings["Click on a contact to add or remove."] = "Pulsar en un contacto para añadirlo o eliminarlo.";
+App::$strings["Visible To"] = "Visible para";
+App::$strings["Channel removals are not allowed within 48 hours of changing the account password."] = "La eliminación de canales no está permitida hasta pasadas 48 horas desde el último cambio de contraseña.";
+App::$strings["This channel will be permanently removed. "] = "Este canal será eliminado permanentemente. ";
+App::$strings["This action can not be undone!"] = "¡Esta acción no se puede deshacer!";
App::$strings["Item sync completed!"] = "¡Sincronización de artículos completada!";
App::$strings["Item sync completed but no items were found!"] = "¡Sincronización de artículos completada pero no se ha encontrado ningún artículo!";
App::$strings["File sync completed!"] = "¡Sincronización de archivos completada!";
@@ -3275,250 +3355,164 @@ App::$strings["File sync status"] = "Estado de sincronización de archivos";
App::$strings["Channel cloning completed!"] = "Clonación del canal completada.";
App::$strings["Resume"] = "Reanudar";
App::$strings["Only resume if sync stalled!"] = "Sólo se reanuda si la sincronización se estanca.";
-App::$strings["Layout updated."] = "Plantilla actualizada.";
-App::$strings["Edit System Page Description"] = "Editor del Sistema de Descripción de Páginas";
-App::$strings["(modified)"] = "(modificado)";
-App::$strings["Layout not found."] = "Plantilla no encontrada";
-App::$strings["Module Name:"] = "Nombre del módulo:";
-App::$strings["Layout Help"] = "Ayuda para el diseño de plantillas de página";
-App::$strings["Edit another layout"] = "Editar otro diseño";
-App::$strings["System layout"] = "Diseño del sistema";
-App::$strings["Welcome to %s"] = "Bienvenido a %s";
-App::$strings["No suggestions available. If this is a new site, please try again in 24 hours."] = "No hay sugerencias disponibles. Si es un sitio nuevo, espere 24 horas y pruebe de nuevo.";
-App::$strings["Connection updated."] = "Conexión actualizada.";
-App::$strings["Failed to update connection record."] = "Error al actualizar el registro de la conexión.";
-App::$strings["Could not access address book record."] = "No se pudo acceder al registro en su libreta de direcciones.";
-App::$strings["Refresh failed - channel is currently unavailable."] = "Recarga fallida - no se puede encontrar el canal en este momento.";
-App::$strings["Unable to set address book parameters."] = "No ha sido posible establecer los parámetros de la libreta de direcciones.";
-App::$strings["Connection has been removed."] = "La conexión ha sido eliminada.";
-App::$strings["View %s's profile"] = "Ver el perfil de %s";
-App::$strings["View recent posts and comments"] = "Ver publicaciones y comentarios recientes";
-App::$strings["Fetch Vcard"] = "Obtener una vcard";
-App::$strings["Fetch electronic calling card for this connection"] = "Obtener una tarjeta de llamada electrónica para esta conexión";
-App::$strings["Open Set Affinity section by default"] = "Abrir por defecto la sección para definir la afinidad";
-App::$strings["Filter"] = "Filtrar";
-App::$strings["Open Custom Filter section by default"] = "Abrir por defecto la sección de personalización de filtros";
-App::$strings["Set Affinity"] = "Ajustar la afinidad";
-App::$strings["Set Profile"] = "Ajustar el perfil";
-App::$strings["Set Affinity & Profile"] = "Ajustar la afinidad y el perfil";
-App::$strings["Contact: %s"] = "Contacto: %s";
-App::$strings["Manage contact roles"] = "Gestionar roles de contactos";
-App::$strings["This contacts's primary address is"] = "La dirección principal de este contactos es ";
-App::$strings["Available locations:"] = "Ubicaciones disponibles:";
-App::$strings["Contact Pending Approval"] = "Contacto pendiente de aprobación";
-App::$strings["Please choose the profile you would like to display to %s when viewing your profile securely."] = "Por favor, escoja el perfil que quiere mostrar a %s cuando esté viendo su perfil de forma segura.";
-App::$strings["Some permissions may be inherited from your channel's <a href=\"settings\"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can <strong>not</strong> change those settings here."] = "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. <strong>No</strong> puede cambiar estos ajustes aquí.";
-App::$strings["Some permissions may be inherited from your channel's <a href=\"settings\"><strong>privacy settings</strong></a>, which have higher priority than individual settings. You can change those settings here but they wont have any impact unless the inherited setting changes."] = "Algunos permisos pueden ser heredados de los <a href=\"settings\"><strong>ajustes de privacidad</strong></a> de sus canales, los cuales tienen una prioridad más alta que los ajustes individuales. Puede cambiar estos ajustes aquí, pero no tendrán ningún consecuencia hasta que cambie los ajustes heredados.";
-App::$strings["Last update:"] = "Última actualización:";
-App::$strings["Details"] = "Detalles";
-App::$strings["No more system notifications."] = "No hay más notificaciones del sistema";
-App::$strings["System Notifications"] = "Notificaciones del sistema";
-App::$strings["Mark all seen"] = "Marcar todo como visto";
-App::$strings["Comanche page description language help"] = "Página de ayuda del lenguaje de descripción de páginas (PDL) Comanche";
-App::$strings["Layout Description"] = "Descripción de la plantilla";
-App::$strings["Download PDL file"] = "Descargar el fichero PDL";
-App::$strings["Location not found."] = "Dirección no encontrada.";
-App::$strings["Location lookup failed."] = "Ha fallado la búsqueda de la dirección.";
-App::$strings["Please select another location to become primary before removing the primary location."] = "Por favor, seleccione una copia de su canal (un clon) para convertirlo en primario antes de eliminar su canal principal.";
-App::$strings["Syncing locations"] = "Sincronizando ubicaciones";
-App::$strings["No locations found."] = "No encontrada ninguna dirección.";
-App::$strings["Manage Channel Locations"] = "Gestionar las direcciones del canal";
-App::$strings["Sync Now"] = "Sincronizar ahora";
-App::$strings["Please wait several minutes between consecutive operations."] = "Por favor, espere algunos minutos entre operaciones consecutivas.";
-App::$strings["When possible, drop a location by logging into that website/hub and removing your channel."] = "Cuando sea posible, elimine una ubicación iniciando sesión en el sitio web o \"hub\" y borrando su canal.";
-App::$strings["Use this form to drop the location if the hub is no longer operating."] = "Utilice este formulario para eliminar la dirección si el \"hub\" no está funcionando desde hace tiempo.";
-App::$strings["Failed to create source. No channel selected."] = "No se ha podido crear el origen de los contenidos. No ha sido seleccionado ningún canal.";
-App::$strings["Source created."] = "Fuente creada.";
-App::$strings["Source updated."] = "Fuente actualizada.";
-App::$strings["*"] = "*";
-App::$strings["Channel Sources"] = "Orígenes de los contenidos del canal";
-App::$strings["Manage remote sources of content for your channel."] = "Gestionar contenido de origen remoto para su canal.";
-App::$strings["New Source"] = "Nueva fuente";
-App::$strings["Import all or selected content from the following channel into this channel and distribute it according to your channel settings."] = "Importar todo el contenido o una selección de los siguientes canales en este canal y distribuirlo de acuerdo con sus ajustes.";
-App::$strings["Only import content with these words (one per line)"] = "Importar solo contenido que contenga estas palabras (una por línea)";
-App::$strings["Leave blank to import all public content"] = "Dejar en blanco para importar todo el contenido público";
-App::$strings["Channel Name"] = "Nombre del canal";
-App::$strings["Add the following categories to posts imported from this source (comma separated)"] = "Añadir los temas siguientes a las entradas importadas de esta fuente (separadas por comas)";
-App::$strings["Resend posts with this channel as author"] = "Reenviar mensajes con este canal como autor";
-App::$strings["Copyrights may apply"] = "Se pueden aplicar los derechos de autor";
-App::$strings["Source not found."] = "Fuente no encontrada";
-App::$strings["Edit Source"] = "Editar fuente";
-App::$strings["Delete Source"] = "Eliminar fuente";
-App::$strings["Source removed"] = "Fuente eliminada";
-App::$strings["Unable to remove source."] = "No se puede eliminar la fuente.";
-App::$strings["Select a bookmark folder"] = "Seleccionar una carpeta de marcadores";
-App::$strings["Save Bookmark"] = "Guardar marcador";
-App::$strings["URL of bookmark"] = "Dirección del marcador";
-App::$strings["Or enter new bookmark folder name"] = "O introduzca un nuevo nombre para la carpeta de marcadores";
-App::$strings["A deleted privacy group with this name was revived. Existing item permissions <strong>may</strong> apply to this privacy group and any future members. If this is not what you intended, please create another privacy group with a different name."] = "Un grupo suprimido con este nombre ha sido restablecido. <strong>Es posible</strong> que los permisos que ya existen sean aplicados a este grupo y sus futuros miembros. Si no quiere esto, por favor cree otro grupo con un nombre diferente.";
-App::$strings["Select a privacy group"] = "Seleccionar un grupo privado de canales";
-App::$strings["__ctx:permcat__ Default"] = "Predeterminado";
-App::$strings["Likes %1\$s's %2\$s"] = "Gusta de %2\$sde %1\$s";
-App::$strings["Doesn't like %1\$s's %2\$s"] = "No le gusta %2\$sde %1\$s";
-App::$strings["Will attend %s's event"] = "Asistirá al evento de %s";
-App::$strings["Will not attend %s's event"] = "No asistirá al evento de %s";
-App::$strings["May attend %s's event"] = "Puede asistir al evento de %s";
-App::$strings["May not attend %s's event"] = "Puede no asistir al evento de %s";
-App::$strings["\$Projectname Notification"] = "Notificación de \$Projectname";
-App::$strings["Thank You,"] = "Gracias,";
-App::$strings["This email was sent by %1\$s at %2\$s."] = "Este email ha sido enviado por %1\$s a %2\$s.";
-App::$strings["To stop receiving these messages, please adjust your Notification Settings at %s"] = "Para dejar de recibir estos mensajes, por favor ajuste la configuración de notificación en %s";
-App::$strings["To stop receiving these messages, please adjust your %s."] = "Para dejar de recibir estos mensajes, por favor, ajuste su %s";
-App::$strings["%s <!item_type!>"] = "%s <!item_type!>";
-App::$strings["[\$Projectname:Notify] New direct message received at %s"] = "[\$Projectname:Aviso] Nuevo mensaje directo recibido en %s";
-App::$strings["%1\$s sent you a new direct message at %2\$s"] = "%1\$s le ha enviado un nuevo mensaje directo en %2\$s.";
-App::$strings["%1\$s sent you %2\$s."] = "%1\$s le ha enviado %2\$s.";
-App::$strings["a direct message"] = "un mensaje directo";
-App::$strings["Please visit %s to view and/or reply to your direct messages."] = "Por favor visite %s para ver y/o responder a su mensaje directo.";
-App::$strings["commented on"] = "ha comentado sobre ";
-App::$strings["liked"] = "ha gustado de ";
-App::$strings["disliked"] = "no ha gustado de ";
-App::$strings["voted on"] = "votado en ";
-App::$strings["%1\$s %2\$s [zrl=%3\$s]a %4\$s[/zrl]"] = "%1\$s%2\$s [zrl=%3\$s ]un %4\$s[/zrl]";
-App::$strings["%1\$s %2\$s [zrl=%3\$s]%4\$s's %5\$s[/zrl]"] = "%1\$s %2\$s[zrl=%3\$s]%5\$s de %4\$s[/zrl]";
-App::$strings["%1\$s %2\$s [zrl=%3\$s]your %4\$s[/zrl]"] = "%1\$s %2\$s [zrl=%3\$s]su %4\$s[/zrl]";
-App::$strings["[\$Projectname:Notify] Moderated Comment to conversation #%1\$d by %2\$s"] = "[\$Projectname:Aviso] Comentario moderado en la conversación #%1\$d por %2\$s";
-App::$strings["[\$Projectname:Notify] Comment to conversation #%1\$d by %2\$s"] = "[\$Projectname:Aviso] Nuevo comentario de %2\$s en la conversación #%1\$d";
-App::$strings["%1\$s commented on an item/conversation you have been following"] = "%1\$sha comentado un elemento/conversación que ha estado siguiendo.";
-App::$strings["Please visit %s to view and/or reply to the conversation."] = "Para ver o comentar la conversación, visite %s";
-App::$strings["Please visit %s to approve or reject this comment."] = "Por favor, visite %s para aprobar o rechazar este comentario.";
-App::$strings["[\$Projectname:Notify] Like received to conversation #%1\$d by %2\$s"] = "[\$Projectname:Aviso] \"Me gusta\" de %2\$s en la conversación #%1\$d";
-App::$strings["%1\$s liked an item/conversation you created"] = "A %1\$s le ha gustado un elemento o conversación que ha creado usted.";
-App::$strings["[\$Projectname:Notify] %s posted to your profile wall"] = "[\$Projectname:Aviso] %s ha publicado una entrada en su página de inicio del perfil (\"muro\")";
-App::$strings["%1\$s posted to your profile wall at %2\$s"] = "%1\$s ha publicado en su muro en %2\$s";
-App::$strings["%1\$s posted to [zrl=%2\$s]your wall[/zrl]"] = "%1\$sha publicado en [zrl=%2\$s]su muro[/zrl]";
-App::$strings["[\$Projectname:Notify] %s tagged you"] = "[\$Projectname:Aviso] %s le ha etiquetado";
-App::$strings["%1\$s tagged you at %2\$s"] = "%1\$sle ha etiquetado en %2\$s";
-App::$strings["%1\$s [zrl=%2\$s]tagged you[/zrl]."] = "%1\$s [zrl=%2\$s]le ha etiquetado[/zrl].";
-App::$strings["[\$Projectname:Notify] %1\$s poked you"] = "[\$Projectname:Aviso] %1\$s le ha dado un toque";
-App::$strings["%1\$s poked you at %2\$s"] = "%1\$sle ha dado un toque en %2\$s";
-App::$strings["%1\$s [zrl=%2\$s]poked you[/zrl]."] = "%1\$s [zrl=%2\$s] le ha dado un toque[/zrl].";
-App::$strings["[\$Projectname:Notify] %s tagged your post"] = "[\$Projectname:Aviso] %s ha etiquetado su entrada";
-App::$strings["%1\$s tagged your post at %2\$s"] = "%1\$sha etiquetado su entrada en %2\$s";
-App::$strings["%1\$s tagged [zrl=%2\$s]your post[/zrl]"] = "%1\$s ha etiquetado [zrl=%2\$s]su entrada[/zrl]";
-App::$strings["[\$Projectname:Notify] Introduction received"] = "[\$Projectname:Aviso] Ha recibido una solicitud de conexión";
-App::$strings["You've received an new connection request from '%1\$s' at %2\$s"] = "Ha recibido una nueva solicitud de conexión de '%1\$s' en %2\$s";
-App::$strings["You've received [zrl=%1\$s]a new connection request[/zrl] from %2\$s."] = "Ha recibido [zrl=%1\$s]una nueva solicitud de conexión[/zrl] de %2\$s.";
-App::$strings["You may visit their profile at %s"] = "Puede visitar su perfil en %s";
-App::$strings["Please visit %s to approve or reject the connection request."] = "Por favor, visite %s para permitir o rechazar la solicitad de conexión.";
-App::$strings["[\$Projectname:Notify] Friend suggestion received"] = "[\$Projectname:Aviso] Ha recibido una sugerencia de conexión";
-App::$strings["You've received a friend suggestion from '%1\$s' at %2\$s"] = "Ha recibido una sugerencia de amistad de '%1\$s' en %2\$s";
-App::$strings["You've received [zrl=%1\$s]a friend suggestion[/zrl] for %2\$s from %3\$s."] = "Ha recibido [zrl=%1\$s]una sugerencia de amistad[/zrl] para %2\$s de %3\$s.";
-App::$strings["Name:"] = "Nombre:";
-App::$strings["Photo:"] = "Foto:";
-App::$strings["Please visit %s to approve or reject the suggestion."] = "Por favor, visite %s para aprobar o rechazar la sugerencia.";
-App::$strings["[\$Projectname:Notify]"] = "[\$Projectname:Aviso]";
-App::$strings["created a new poll"] = "se ha creado una nueva encuesta";
-App::$strings["created a new post"] = "ha creado una nueva entrada";
-App::$strings["voted on %s's poll"] = "votado en la encuesta de %s";
-App::$strings["commented on %s's post"] = "ha comentado la entrada de %s";
-App::$strings["repeated %s's post"] = "repetida la entrada de %s";
-App::$strings["liked %s's post"] = "Le ha gustado la entrada de %s";
-App::$strings["disliked %s's post"] = "No le ha gustado la entrada de %s";
-App::$strings["shared a file with you"] = "compartió un archivo con usted";
-App::$strings["edited a post dated %s"] = "ha editado una entrada %s";
-App::$strings["edited a comment dated %s"] = "ha editado un comentario %s";
-App::$strings["added your channel"] = "añadió este canal a sus conexiones";
-App::$strings["sent you a direct message"] = "enviarle un mensaje directo";
-App::$strings["g A l F d"] = "g A l d F";
-App::$strings["[today]"] = "[hoy]";
-App::$strings["created an event"] = "se creó un evento";
-App::$strings["status verified"] = "estado verificado";
-App::$strings["Channel is blocked on this site."] = "El canal está bloqueado en este sitio.";
-App::$strings["Channel location missing."] = "Falta la dirección del canal.";
-App::$strings["Remote channel or protocol unavailable."] = "Canal remoto o protocolo no disponible.";
-App::$strings["Channel discovery failed."] = "El intento de acceder al canal ha fallado.";
-App::$strings["Protocol disabled."] = "Protocolo deshabilitado.";
-App::$strings["Cannot connect to yourself."] = "No puede conectarse consigo mismo.";
-App::$strings["error saving data"] = "error guardando los datos";
-App::$strings["Missing room name"] = "Sala de chat sin nombre";
-App::$strings["Duplicate room name"] = "Nombre de sala duplicado.";
-App::$strings["Invalid room specifier."] = "Especificador de sala no válido.";
-App::$strings["Room not found."] = "Sala no encontrada.";
-App::$strings["Room is full"] = "La sala está llena.";
-App::$strings["Affinity Tool"] = "Herramienta de afinidad";
-App::$strings["Site Admin"] = "Administrador del sitio";
-App::$strings["Content Filter"] = "Filtro de contenido";
-App::$strings["Remote Diagnostics"] = "Diagnóstico remoto";
-App::$strings["Suggest Channels"] = "Sugerir canales";
-App::$strings["Channel Manager"] = "Administración de canales";
-App::$strings["Stream"] = "Stream";
-App::$strings["Mail"] = "Correo";
-App::$strings["Chat"] = "Chat";
-App::$strings["Probe"] = "Probar";
-App::$strings["Suggest"] = "Sugerir";
-App::$strings["Random Channel"] = "Canal aleatorio";
-App::$strings["Invite"] = "Invitar";
-App::$strings["Post"] = "Publicación";
-App::$strings["Notifications"] = "Notificaciones";
-App::$strings["Order Apps"] = "Ordenar las apps";
-App::$strings["CardDAV"] = "CardDAV";
-App::$strings["OAuth Apps Manager"] = "Administrador de apps OAuth";
-App::$strings["OAuth2 Apps Manager"] = "Administrador de apps OAuth2";
-App::$strings["PDL Editor"] = "Editor PDL";
-App::$strings["My Chatrooms"] = "Mis salas de chat";
-App::$strings["Channel Export"] = "Exportar canal";
-App::$strings["Purchase"] = "Comprar";
-App::$strings["Undelete"] = "Recuperar";
-App::$strings["Add to app-tray"] = "Añadir a la bandeja de aplicaciones";
-App::$strings["Remove from app-tray"] = "Quitar de la bandeja de aplicaciones";
-App::$strings["Pin to navbar"] = "Fijar en la barra de navegación";
-App::$strings["Unpin from navbar"] = "Quitar de la barra de navegación";
-App::$strings["0. Beginner/Basic"] = "0. Principiante/Básico";
-App::$strings["1. Novice - not skilled but willing to learn"] = "1. Novato: no cualificado, pero dispuesto a aprender";
-App::$strings["2. Intermediate - somewhat comfortable"] = "2. Intermedio - algo cómodo";
-App::$strings["3. Advanced - very comfortable"] = "3. Avanzado - muy cómodo";
-App::$strings["4. Expert - I can write computer code"] = "4. Experto - Puedo escribir código informático";
-App::$strings["5. Wizard - I probably know more than you do"] = "5. Colaborador - probablemente sé más que tú";
-App::$strings["Directory Options"] = "Opciones del directorio";
-App::$strings["Safe Mode"] = "Modo seguro";
-App::$strings["Public Forums Only"] = "Solo foros públicos";
-App::$strings["This Website Only"] = "Solo este sitio web";
-App::$strings["Unable to verify channel signature"] = "No ha sido posible de verificar la firma del canal";
-App::$strings["Restricted message"] = "Mensaje restringido";
-App::$strings["Direct message"] = "Mensaje directo";
-App::$strings["Public Policy"] = "Política pública";
-App::$strings["Privacy conflict. Discretion advised."] = "Conflicto de privacidad. Se aconseja discreción.";
-App::$strings["Admin Delete"] = "Eliminar admin";
-App::$strings["Reply on this comment"] = "Responder a este comentario";
-App::$strings["reply"] = "responder";
-App::$strings["Reply to"] = "Responder a ";
-App::$strings["Delivery Report"] = "Informe de transmisión";
-App::$strings["%d comment"] = array(
- 0 => "%d comentario",
- 1 => "%d comentarios",
- 2 => "%d comentarios",
+App::$strings["Create a new channel"] = "Crear un nuevo canal";
+App::$strings["Current Channel"] = "Canal actual";
+App::$strings["Switch to one of your channels by selecting it."] = "Cambiar a uno de sus canales seleccionándolo.";
+App::$strings["Default Channel"] = "Canal principal";
+App::$strings["Make Default"] = "Convertir en predeterminado";
+App::$strings["%d new introductions"] = "%d nuevas solicitudes de conexión";
+App::$strings["Delegated Channel"] = "Canal delegado";
+App::$strings["Page link"] = "Enlace de la página";
+App::$strings["Edit Webpage"] = "Editar la página web";
+App::$strings["Click to show more"] = "Hacer clic para ver más";
+App::$strings["App Categories"] = "Categorías de aplicaciones";
+App::$strings["Bookmarked Chatrooms"] = "Salas de chat preferidas";
+App::$strings["Suggestions"] = "Sugerencias";
+App::$strings["See more..."] = "Ver más...";
+App::$strings["Overview"] = "Resumen";
+App::$strings["No recent activities"] = "No hay actividades recientes";
+App::$strings["__ctx:noun__ new connection"] = array(
+ 0 => "Nueva conexión",
+ 1 => "Nuevas conexiones",
+ 2 => "nuevas conexiones",
);
-App::$strings["%d unseen"] = "%dno visto/a vistos/as";
-App::$strings["Forum"] = "Foro";
-App::$strings["to"] = "a";
-App::$strings["Wall-to-Wall"] = "De página del perfil a página del perfil (de \"muro\" a \"muro\")";
-App::$strings["via Wall-To-Wall:"] = "Mediante el procedimiento página del perfil a página del perfil (de \"muro\" a \"muro\")";
-App::$strings["Attend"] = "Participar o asistir";
-App::$strings["Go to previous comment"] = "Ir al comentario anterior";
-App::$strings["Add to Calendar"] = "Añadir al calendario";
-App::$strings["Image"] = "Imagen";
-App::$strings["Insert Link"] = "Insertar enlace";
-App::$strings["Video"] = "Vídeo";
-App::$strings["Your full name (required)"] = "Su nombre completo (requerido)";
-App::$strings["Your email address (required)"] = "Su dirección de correo electrónico (requerido)";
-App::$strings["Your website URL (optional)"] = "La URL de su sitio web (opcional)";
-App::$strings["Source code of failed update: "] = "Código fuente de la actualización fallida: ";
-App::$strings["Update Error at %s"] = "Error de actualización en %s";
-App::$strings["Update %s failed. See error logs."] = "La actualización %s ha fallado. Mire el informe de errores.";
-App::$strings["Public"] = "Público";
-App::$strings["Anybody in the \$Projectname network"] = "Cualquiera en la red \$Projectname";
-App::$strings["Any account on %s"] = "Cualquier cuenta en %s";
-App::$strings["Any of my connections"] = "Cualquiera de mis conexiones";
-App::$strings["Only connections I specifically allow"] = "Sólo las conexiones que yo permita de forma explícita";
-App::$strings["Anybody authenticated (could include visitors from other networks)"] = "Cualquiera que esté autenticado (podría incluir a los visitantes de otras redes)";
-App::$strings["Any connections including those who haven't yet been approved"] = "Cualquier conexión incluyendo aquellas que aún no han sido aprobadas";
-App::$strings["This is your default setting for the audience of your normal stream, and posts."] = "Esta es la configuración predeterminada para su flujo (stream) habitual de publicaciones.";
-App::$strings["This is your default setting for who can view your default channel profile"] = "Esta es su configuración por defecto para establecer quién puede ver su perfil del canal predeterminado";
-App::$strings["This is your default setting for who can view your connections"] = "Este es su ajuste predeterminado para establecer quién puede ver sus conexiones";
-App::$strings["This is your default setting for who can view your file storage and photos"] = "Este es su ajuste predeterminado para establecer quién puede ver su repositorio de ficheros y sus fotos";
-App::$strings["This is your default setting for the audience of your webpages"] = "Este es el ajuste predeterminado para establecer la audiencia de sus páginas web";
-App::$strings["Unable to verify site signature for %s"] = "No ha sido posible de verificar la firma del sitio para %s";
+App::$strings["__ctx:noun__ notice"] = array(
+ 0 => "aviso",
+ 1 => "avisos",
+ 2 => "avisos",
+);
+App::$strings["Suggested Chatrooms"] = "Salas de chat sugeridas";
+App::$strings["Add new group"] = "Añadir nuevo grupo";
+App::$strings["I agree"] = "Estoy de acuerdo";
+App::$strings["I disagree"] = "No estoy de acuerdo";
+App::$strings["I abstain"] = "Me abstengo";
+App::$strings["View %s's profile - %s"] = "Ver el perfil de %s - %s";
+App::$strings["Don't show"] = "No mostrar";
+App::$strings["Read mode"] = "Modo lectura";
+App::$strings["Edit mode"] = "Modo edición";
+App::$strings["Editing"] = "Editar";
+App::$strings["Saving"] = "Guardar";
+App::$strings["Saved"] = "Guardado";
+App::$strings["Add New Connection"] = "Añadir nueva conexión";
+App::$strings["Enter channel address"] = "Dirección del canal";
+App::$strings["Examples: bob@example.com, https://example.com/barbara"] = "Ejemplos: manuel@ejemplo.com, https://ejemplo.com/carmen";
+App::$strings["Archives"] = "Hemeroteca";
+App::$strings["Add new role"] = "Añadir nuevo rol";
+App::$strings["Role members"] = "Miembros del rol";
+App::$strings["New network activity notifications"] = "Avisos de nueva actividad en la red";
+App::$strings["Network stream"] = "Stream de la red";
+App::$strings["Mark all notifications read"] = "Marcar todas las notificaciones como leídas";
+App::$strings["Show new posts only"] = "Mostrar solo las entradas nuevas";
+App::$strings["Filter by name or address"] = "Filtrar por nombre o dirección";
+App::$strings["New home activity notifications"] = "Avisos de nueva actividad en su página principal";
+App::$strings["Home stream"] = "Stream de su página principal";
+App::$strings["Mark all notifications seen"] = "Marcar todas las notificaciones como vistas";
+App::$strings["Direct Messages"] = "Mensajes directos";
+App::$strings["New direct messages notifications"] = "Nuevas notificaciones de mensajes directos";
+App::$strings["Direct messages stream"] = "Stream de mensajes directos";
+App::$strings["Events"] = "Eventos";
+App::$strings["New events notifications"] = "Avisos de nuevos eventos";
+App::$strings["View events"] = "Ver los eventos";
+App::$strings["Mark all events seen"] = "Marcar todos los eventos como leidos";
+App::$strings["New connections notifications"] = "Avisos de nuevas conexiones";
+App::$strings["View all connections"] = "Ver todas las conexiones";
+App::$strings["New files notifications"] = "Avisos de nuevos ficheros";
+App::$strings["Notices"] = "Avisos";
+App::$strings["View all notices"] = "Ver todos los avisos";
+App::$strings["Mark all notices seen"] = "Marcar como leídos todos los avisos";
+App::$strings["Registrations"] = "Registros";
+App::$strings["New registrations notifications"] = "Notificaciones de nuevos registros";
+App::$strings["New public stream notifications"] = "Nuevos avisos del stream público";
+App::$strings["Public stream"] = "\"Stream\" público";
+App::$strings["Sorry, you have got no notifications at the moment"] = "Lo sentimos, por el momento no ha recibido ninguna notificación";
+App::$strings["Account settings"] = "Configuración de la cuenta";
+App::$strings["Channel settings"] = "Configuración del canal";
+App::$strings["Privacy settings"] = "Ajustes de privacidad";
+App::$strings["Display settings"] = "Ajustes de visualización";
+App::$strings["Manage locations"] = "Gestión de ubicaciones (clones) del canal";
+App::$strings["Add new guest"] = "Añadir un nuevo invitado";
+App::$strings["Rating Tools"] = "Valoraciones";
+App::$strings["Rate Me"] = "Valorar este canal";
+App::$strings["View Ratings"] = "Mostrar las valoraciones";
+App::$strings["Refresh"] = "Recargar";
+App::$strings["Remove term"] = "Eliminar término";
+App::$strings["photo/image"] = "foto/imagen";
+App::$strings["Toggle post editor"] = "Alternar editor de entradas";
+App::$strings["Toggle personal notes"] = "Alternar notas personales";
+App::$strings["Channel activities"] = "Actividades del canal";
+App::$strings["Show direct (private) messages"] = "Mostrar mensajes (privados) directos";
+App::$strings["Show posts that include events"] = "Mostrar entradas que incluyan eventos";
+App::$strings["Polls"] = "Encuestas";
+App::$strings["Show posts that include polls"] = "Mostrar entradas que incluyan encuestas";
+App::$strings["Show posts related to the %s privacy group"] = "Mostrar entradas relacionadas con el grupo %s";
+App::$strings["Show my privacy groups"] = "Mostrar mis grupos de canales";
+App::$strings["Show posts to this forum"] = "Mostrar las entradas en este foro";
+App::$strings["Show forums"] = "Mostrar los foros";
+App::$strings["Starred Posts"] = "Entradas preferidas";
+App::$strings["Show posts that I have starred"] = "Mostrar entradas que he señalado como preferidas";
+App::$strings["Personal Posts"] = "Entradas personales";
+App::$strings["Show posts that mention or involve me"] = "Mostrar entradas que me mencionen o involucren";
+App::$strings["Show posts that I have filed to %s"] = "Mostrar las entradas que he enviado a %s";
+App::$strings["Show filed post categories"] = "Mostrar los temas de las entradas archivadas";
+App::$strings["Panel search"] = "Panel de búsqueda";
+App::$strings["Filter by name"] = "Filtrar por nombre";
+App::$strings["Remove active filter"] = "Eliminar el filtro activo";
+App::$strings["Stream Filters"] = "Filtros del stream";
+App::$strings["Select Channel"] = "Seleccionar un canal";
+App::$strings["Read-write"] = "Lectura y escritura";
+App::$strings["Read-only"] = "Sólo lectura";
+App::$strings["Channel Calendar"] = "Calendario del canal";
+App::$strings["Shared CalDAV Calendars"] = "Calendarios CalDAV compartidos";
+App::$strings["Share this calendar"] = "Compartir este calendario";
+App::$strings["Calendar name and color"] = "Nombre y color del calendario";
+App::$strings["Create new CalDAV calendar"] = "Crear un nuevo calendario CalDAV";
+App::$strings["Calendar Name"] = "Nombre del calendario";
+App::$strings["Calendar Tools"] = "Gestión de calendarios";
+App::$strings["Import calendar"] = "Importar un calendario";
+App::$strings["Select a calendar to import to"] = "Seleccionar un calendario para importarlo";
+App::$strings["Addressbooks"] = "Agenda de direcciones";
+App::$strings["Addressbook name"] = "Nombre de la agenda";
+App::$strings["Create new addressbook"] = "Crear una nueva agenda de direcciones";
+App::$strings["Addressbook Name"] = "Nombre de la agenda";
+App::$strings["Addressbook Tools"] = "Gestión de agendas de direcciones";
+App::$strings["Import addressbook"] = "Importar una agenda de direcciones";
+App::$strings["Select an addressbook to import to"] = "Seleccionar una agenda para importarla";
+App::$strings["App Collections"] = "Colección de aplicaciones";
+App::$strings["Installed apps"] = "Aplicaciones instaladas";
+App::$strings["Profile Creation"] = "Creación de perfiles";
+App::$strings["Upload profile photo"] = "Cargar la foto del perfil";
+App::$strings["Upload cover photo"] = "Cargar la foto de portada del perfil";
+App::$strings["Find and Connect with others"] = "Encontrar y conectarse con otros";
+App::$strings["View the directory"] = "Ver el directorio";
+App::$strings["Manage your connections"] = "Gestionar sus conexiones";
+App::$strings["Communicate"] = "Comunicarse";
+App::$strings["View your channel homepage"] = "Ver la página principal de su canal";
+App::$strings["View your network stream"] = "Ver el \"stream\" de su red";
+App::$strings["Documentation"] = "Documentación";
+App::$strings["Missing Features?"] = "¿Faltan Características?";
+App::$strings["Pin apps to navigation bar"] = "Fijar apps a la barra de navegación";
+App::$strings["Install more apps"] = "Instalar más apps";
+App::$strings["View public stream"] = "Ver el \"stream\" público";
+App::$strings["Commented Date"] = "Fecha de los comentarios";
+App::$strings["Order by last commented date"] = "Ordenar por la última fecha de los comentarios";
+App::$strings["Posted Date"] = "Fecha de publicación";
+App::$strings["Order by last posted date"] = "Ordenar por la ultima fecha de publicación";
+App::$strings["Date Unthreaded"] = "Sin enhebrar por fecha";
+App::$strings["Order unthreaded by date"] = "Ordenar sin enhebrar por fecha";
+App::$strings["Stream Order"] = "Orden del stream";
+App::$strings["__ctx:widget__ Activity"] = "Actividad";
+App::$strings["Tasks"] = "Tareas";
+App::$strings["Member registrations waiting for confirmation"] = "Inscripciones de nuevos miembros pendientes de aprobación";
+App::$strings["Inspect queue"] = "Examinar la cola";
+App::$strings["Queueworker"] = "Queueworker - Trabajador de cola";
+App::$strings["DB updates"] = "Actualizaciones de la base de datos";
+App::$strings["Addon Features"] = "Características del addon";
+App::$strings["Public and restricted messages"] = "Mensajes públicos y restringidos";
+App::$strings["Direct messages"] = "Mensajes directos";
+App::$strings["Starred messages"] = "Entradas preferidas";
+App::$strings["No messages"] = "Sin mensajes";
+App::$strings["Unseen"] = "No visto";
+App::$strings["Chat Members"] = "Miembros del chat";
App::$strings["Social Networking"] = "Redes sociales";
App::$strings["Social - Federation"] = "Social - Federación";
App::$strings["Social - Mostly Public"] = "Social - Público en su mayor parte";
@@ -3581,12 +3575,4 @@ App::$strings["Create new folder"] = "Crear nueva carpeta";
App::$strings["Upload file"] = "Subir fichero";
App::$strings["Drop files here to immediately upload"] = "Arrastre los ficheros aquí para subirlos de forma inmediata";
App::$strings["You can select files via the upload button or drop them right here or into an existing folder."] = "Puede seleccionar los archivos a través del botón de subir o soltarlos aquí mismo o en una carpeta existente.";
-App::$strings["Create an account to access services and applications"] = "Crear una cuenta para acceder a los servicios y aplicaciones";
-App::$strings["Email or nickname"] = "Correo electrónico o apodo";
-App::$strings["Password"] = "Contraseña";
-App::$strings["Remember me"] = "Recordarme";
-App::$strings["Forgot your password?"] = "¿Olvidó su contraseña?";
-App::$strings["[\$Projectname] Website SSL error for %s"] = "[\$Projectname] Error SSL del sitio web en %s";
-App::$strings["Website SSL certificate is not valid. Please correct."] = "El certificado SSL del sitio web no es válido. Por favor, solucione el problema.";
-App::$strings["[\$Projectname] Cron tasks not running on %s"] = "[\$Projectname] Las tareas de Cron no están funcionando en %s";
-App::$strings["Cron/Scheduled tasks not running."] = "Las tareas del Planificador/Cron no están funcionando.";
+App::$strings["Source channel not found."] = "No se ha encontrado el canal de origen.";
diff --git a/view/fr/htconfig.tpl b/view/fr/htconfig.tpl
index d33a955f0..b9f011f73 100644
--- a/view/fr/htconfig.tpl
+++ b/view/fr/htconfig.tpl
@@ -11,6 +11,12 @@ $db_pass = '{{$dbpass}}';
$db_data = '{{$dbdata}}';
$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
+// Set this to 1 if your DB backend supports skip locked.
+// This is known to be the case for
+// postgresql > 9.5, mysql > 8.0 and mariadb > 10.6
+App::$config['system']['db_skip_locked_supported'] = 0;
+
+
/*
* Note: Plusieurs de ces réglages seront disponibles via le panneau d'administration
* après l'installation. Lorsque des modifications sont apportés à travers le panneau d'administration
diff --git a/view/it/htconfig.tpl b/view/it/htconfig.tpl
deleted file mode 100644
index 6fa86d9ac..000000000
--- a/view/it/htconfig.tpl
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-// Set the following for your database installation
-// Copy or rename this file to .htconfig.php
-
-$db_host = '{{$dbhost}}';
-$db_port = '{{$dbport}}';
-$db_user = '{{$dbuser}}';
-$db_pass = '{{$dbpass}}';
-$db_data = '{{$dbdata}}';
-$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
-
-/*
- * Notice: Many of the following settings will be available in the admin panel
- * after a successful site install. Once they are set in the admin panel, they
- * are stored in the DB - and the DB setting will over-ride any corresponding
- * setting in this file
- *
- * The command-line tool util/config is able to query and set the DB items
- * directly if for some reason the admin panel is not available and a system
- * setting requires modification.
- *
- */
-
-
-// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
-// It can be changed later and only applies to timestamps for anonymous viewers.
-
-App::$config['system']['timezone'] = '{{$timezone}}';
-
-// What is your site url? DO NOT ADD A TRAILING SLASH!
-
-App::$config['system']['baseurl'] = '{{$siteurl}}';
-App::$config['system']['sitename'] = "Hubzilla";
-App::$config['system']['location_hash'] = '{{$site_id}}';
-
-// These lines set additional security headers to be sent with all responses
-// You may wish to set transport_security_header to 0 if your server already sends
-// this header. content_security_policy may need to be disabled if you wish to
-// run the piwik analytics plugin or include other offsite resources on a page
-
-App::$config['system']['transport_security_header'] = 1;
-App::$config['system']['content_security_policy'] = 1;
-App::$config['system']['ssl_cookie_protection'] = 1;
-
-// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
-// Be certain to create your own personal account before setting
-// REGISTER_CLOSED. 'register_text' (if set) will be displayed prominently on
-// the registration page. REGISTER_APPROVE requires you set 'admin_email'
-// to the email address of an already registered person who can authorise
-// and/or approve/deny the request.
-
-App::$config['system']['register_policy'] = REGISTER_OPEN;
-App::$config['system']['register_text'] = '';
-App::$config['system']['admin_email'] = '{{$adminmail}}';
-
-// Recommend you leave this set to 1. Set to 0 to let people register without
-// proving they own the email address they register with.
-
-App::$config['system']['verify_email'] = 1;
-
-
-// Site access restrictions. By default we will create private sites.
-// Your choices are ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED, and ACCESS_FREE.
-// If you leave REGISTER_OPEN above, anybody may register on your
-// site, however your site will not be listed anywhere as an open
-// registration hub. We will use the system access policy (below)
-// to determine whether or not to list your site in the directory
-// as an open hub where anybody may create accounts. Your choice of
-// paid, tiered, or free determines how these listings will be presented.
-
-
-App::$config['system']['access_policy'] = ACCESS_PRIVATE;
-
-// If you operate a public site, you might wish that people are directed
-// to a "sellpage" where you can describe for features or policies or service plans in depth.
-// This must be an absolute URL beginning with http:// or https:// .
-
-App::$config['system']['sellpage'] = '';
-
-// Maximum size of an imported message, 0 is unlimited
-
-App::$config['system']['max_import_size'] = 200000;
-
-// Location of PHP command line processor
-
-App::$config['system']['php_path'] = '{{$phpath}}';
-
-// Configure how we communicate with directory servers.
-// DIRECTORY_MODE_NORMAL = directory client, we will find a directory
-// DIRECTORY_MODE_SECONDARY = caching directory or mirror
-// DIRECTORY_MODE_PRIMARY = master directory server - one per realm
-// DIRECTORY_MODE_STANDALONE = "off the grid" or private directory services
-
-App::$config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL;
-
-// default system theme
-
-App::$config['system']['theme'] = 'redbasic';
-
-
-// PHP error logging setup
-// Before doing this ensure that the webserver has permission
-// to create and write to php.out in the top level web directory,
-// or change the name (below) to a file/path where this is allowed.
-
-// Uncomment the following 4 lines to turn on PHP error logging.
-//error_reporting(E_ALL & ~E_WARNING & ~E_PARSE & ~E_NOTICE & ~E_DEPRECATED);
-//ini_set('error_log','php.out');
-//ini_set('log_errors','1');
-//ini_set('display_errors', '0');
diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js
index d6893073d..8edd8dafa 100644
--- a/view/js/autocomplete.js
+++ b/view/js/autocomplete.js
@@ -31,8 +31,6 @@ function contact_search(term, callback, backend_url, type, extra_channels, spine
},
}).fail(function () {callback([]); }); // Callback must be invoked even if something went wrong.
}
-contact_search.cache = {};
-
function contact_format(item) {
// Show contact information if not explicitly told to show something else
@@ -40,10 +38,10 @@ function contact_format(item) {
var desc = ((item.label) ? item.nick + ' ' + item.label : item.nick);
if(typeof desc === 'undefined') desc = '';
if(desc) desc = ' ('+desc+')';
- return "<div class='{0} dropdown-item dropdown-notification clearfix' title='{4}'><img class='menu-img-2' src='{1}' loading='lazy'><span class='font-weight-bold contactname'>{2}</span><span class='dropdown-sub-text'>{4}</span></div>".format(item.taggable, item.photo, item.name, desc, typeof(item.link) !== 'undefined' ? item.link : desc.replace('(','').replace(')',''));
+ return "<div class='dropdown-item dropdown-notification lh-sm text-truncate' title='{4}'><img class='menu-img-2' src='{1}' loading='lazy'><strong>{2}</strong><br><small class='opacity-75'>{4}</small></div>".format(item.taggable, item.photo, item.name, desc, typeof(item.link) !== 'undefined' ? item.link : desc.replace('(','').replace(')',''));
}
else
- return "<div>" + item.text + "</div>";
+ return "";
}
function smiley_format(item) {
@@ -247,7 +245,7 @@ function string2bb(element) {
template: tag_format
};
- this.attr('autocomplete', 'off');
+ //this.attr('autocomplete', 'off');
var textcomplete;
var Textarea = Textcomplete.editors.Textarea;
@@ -296,6 +294,7 @@ function string2bb(element) {
textcomplete = new Textcomplete(editor, {
dropdown: {
maxCount: 100
+
}
});
textcomplete.register([contacts]);
@@ -305,7 +304,8 @@ function string2bb(element) {
textcomplete.on('selected', function() { this.editor.el.form.submit(); });
if(typeof onselect !== 'undefined')
- textcomplete.on('select', function() { var item = this.dropdown.getActiveItem(); onselect(item.searchResult.data); });
+ textcomplete.on('select', function() { var item = this.dropdown.getActiveItem(); onselect(item.searchResult.data);});
+
};
})( jQuery );
@@ -331,11 +331,11 @@ function string2bb(element) {
//this.attr('autocomplete','off');
- var textcomplete;
- var Textarea = Textcomplete.editors.Textarea;
+ let textcomplete;
+ let Textarea = Textcomplete.editors.Textarea;
$(this).each(function() {
- var editor = new Textarea(this);
+ let editor = new Textarea(this);
textcomplete = new Textcomplete(editor, {
dropdown: {
maxCount: 100
@@ -344,11 +344,12 @@ function string2bb(element) {
textcomplete.register([names]);
});
+
if(autosubmit)
textcomplete.on('selected', function() { this.editor.el.form.submit(); });
if(typeof onselect !== 'undefined')
- textcomplete.on('select', function() { var item = this.dropdown.getActiveItem(); onselect(item.searchResult.data); });
+ textcomplete.on('select', function() { let item = this.dropdown.getActiveItem(); onselect(item.searchResult.data); });
};
})( jQuery );
diff --git a/view/js/main.js b/view/js/main.js
index fdebb5faa..dcdf58396 100644
--- a/view/js/main.js
+++ b/view/js/main.js
@@ -1234,7 +1234,7 @@ function doscroll(parent, hidden) {
});
$('html, body').animate({scrollTop:(id.offset().top) - 50}, 'slow');
- $('<a href="javascript:doscrollback(' + pos + ');" id="back-to-reply" class="float-end" title="' + aStr['to_reply'] + '"><i class="fa fa-angle-double-down">&nbsp;&nbsp;&nbsp;</i></a>').insertBefore('#wall-item-info-' + id.attr('id').replace(/\D/g,''));
+ $('<a href="javascript:doscrollback(' + pos + ');" id="back-to-reply" title="' + aStr['to_reply'] + '"><i class="fa fa-angle-double-down"></i></a>').insertAfter('#wall-item-ago-' + id.attr('id').replace(/\D/g,''));
}
function doscrollback(pos) {
@@ -1259,7 +1259,7 @@ function dopin(id) {
$('.dropdown-item-pinnable').html($('.dropdown-item-pinnable').html().replace(aStr['unpin_item'],aStr['pin_item']));
$('.wall-item-pinned').remove()
if(i.length == 0) {
- $('<span class="float-end wall-item-pinned" title="' + aStr['pinned'] + '" id="wall-item-pinned-' + id + '"><i class="fa fa-thumb-tack">&nbsp;</i></span>').insertBefore('#wall-item-info-' + id);
+ $('<span class="wall-item-pinned" title="' + aStr['pinned'] + '" id="wall-item-pinned-' + id + '"><i class="fa fa-thumb-tack">&nbsp;</i></span>').insertAfter('#wall-item-ago-' + id);
me.html(me.html().replace(aStr['pin_item'],aStr['unpin_item']));
};
})
diff --git a/view/js/mod_cal.js b/view/js/mod_cal.js
deleted file mode 100644
index 5867f676e..000000000
--- a/view/js/mod_cal.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * JavaScript for mod/cal
- */
-
-$(document).ready( function() {
- $(document).on('click','#fullscreen-btn', on_fullscreen);
- $(document).on('click','#inline-btn', on_inline);
-});
-
-function on_fullscreen() {
- var view = $('#events-calendar').fullCalendar('getView');
- if(view.type === 'month') {
- $('#events-calendar').fullCalendar('option', 'height', $(window).height() - $('.section-title-wrapper').outerHeight(true) - 2); // -2 is for border width (top and bottom) of .generic-content-wrapper
- }
-}
-
-function on_inline() {
- var view = $('#events-calendar').fullCalendar('getView');
- if(view.type === 'month') {
- $('#events-calendar').fullCalendar('option', 'height', '');
- }
-}
diff --git a/view/js/mod_connections.js b/view/js/mod_connections.js
index 848e9ed9f..cb3ecc922 100644
--- a/view/js/mod_connections.js
+++ b/view/js/mod_connections.js
@@ -1,5 +1,7 @@
$(document).ready(function() {
- $("#contacts-search").contact_autocomplete(baseurl + '/acl', 'a', true);
+ $("#contacts-search").name_autocomplete(baseurl + '/acl', 'a', true, function(data) {
+ $("#contacts-search-xchan").val(data.xid);
+ });
$(".autotime").timeago();
});
diff --git a/view/js/mod_poke.js b/view/js/mod_poke.js
index 221cbbb31..88fa9f7c2 100644
--- a/view/js/mod_poke.js
+++ b/view/js/mod_poke.js
@@ -1,5 +1,5 @@
-$(document).ready(function() {
- $("#poke-recip").name_autocomplete(baseurl + '/acl', 'a', false, function(data) {
+$(document).ready(function() {
+ $("#poke-recip").contact_autocomplete(baseurl + '/acl', 'a', false, function(data) {
$("#poke-recip-complete").val(data.id);
});
-});
+});
diff --git a/view/nb-no/htconfig.tpl b/view/nb-no/htconfig.tpl
deleted file mode 100644
index 6fa86d9ac..000000000
--- a/view/nb-no/htconfig.tpl
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-
-// Set the following for your database installation
-// Copy or rename this file to .htconfig.php
-
-$db_host = '{{$dbhost}}';
-$db_port = '{{$dbport}}';
-$db_user = '{{$dbuser}}';
-$db_pass = '{{$dbpass}}';
-$db_data = '{{$dbdata}}';
-$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
-
-/*
- * Notice: Many of the following settings will be available in the admin panel
- * after a successful site install. Once they are set in the admin panel, they
- * are stored in the DB - and the DB setting will over-ride any corresponding
- * setting in this file
- *
- * The command-line tool util/config is able to query and set the DB items
- * directly if for some reason the admin panel is not available and a system
- * setting requires modification.
- *
- */
-
-
-// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
-// It can be changed later and only applies to timestamps for anonymous viewers.
-
-App::$config['system']['timezone'] = '{{$timezone}}';
-
-// What is your site url? DO NOT ADD A TRAILING SLASH!
-
-App::$config['system']['baseurl'] = '{{$siteurl}}';
-App::$config['system']['sitename'] = "Hubzilla";
-App::$config['system']['location_hash'] = '{{$site_id}}';
-
-// These lines set additional security headers to be sent with all responses
-// You may wish to set transport_security_header to 0 if your server already sends
-// this header. content_security_policy may need to be disabled if you wish to
-// run the piwik analytics plugin or include other offsite resources on a page
-
-App::$config['system']['transport_security_header'] = 1;
-App::$config['system']['content_security_policy'] = 1;
-App::$config['system']['ssl_cookie_protection'] = 1;
-
-// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
-// Be certain to create your own personal account before setting
-// REGISTER_CLOSED. 'register_text' (if set) will be displayed prominently on
-// the registration page. REGISTER_APPROVE requires you set 'admin_email'
-// to the email address of an already registered person who can authorise
-// and/or approve/deny the request.
-
-App::$config['system']['register_policy'] = REGISTER_OPEN;
-App::$config['system']['register_text'] = '';
-App::$config['system']['admin_email'] = '{{$adminmail}}';
-
-// Recommend you leave this set to 1. Set to 0 to let people register without
-// proving they own the email address they register with.
-
-App::$config['system']['verify_email'] = 1;
-
-
-// Site access restrictions. By default we will create private sites.
-// Your choices are ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED, and ACCESS_FREE.
-// If you leave REGISTER_OPEN above, anybody may register on your
-// site, however your site will not be listed anywhere as an open
-// registration hub. We will use the system access policy (below)
-// to determine whether or not to list your site in the directory
-// as an open hub where anybody may create accounts. Your choice of
-// paid, tiered, or free determines how these listings will be presented.
-
-
-App::$config['system']['access_policy'] = ACCESS_PRIVATE;
-
-// If you operate a public site, you might wish that people are directed
-// to a "sellpage" where you can describe for features or policies or service plans in depth.
-// This must be an absolute URL beginning with http:// or https:// .
-
-App::$config['system']['sellpage'] = '';
-
-// Maximum size of an imported message, 0 is unlimited
-
-App::$config['system']['max_import_size'] = 200000;
-
-// Location of PHP command line processor
-
-App::$config['system']['php_path'] = '{{$phpath}}';
-
-// Configure how we communicate with directory servers.
-// DIRECTORY_MODE_NORMAL = directory client, we will find a directory
-// DIRECTORY_MODE_SECONDARY = caching directory or mirror
-// DIRECTORY_MODE_PRIMARY = master directory server - one per realm
-// DIRECTORY_MODE_STANDALONE = "off the grid" or private directory services
-
-App::$config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL;
-
-// default system theme
-
-App::$config['system']['theme'] = 'redbasic';
-
-
-// PHP error logging setup
-// Before doing this ensure that the webserver has permission
-// to create and write to php.out in the top level web directory,
-// or change the name (below) to a file/path where this is allowed.
-
-// Uncomment the following 4 lines to turn on PHP error logging.
-//error_reporting(E_ALL & ~E_WARNING & ~E_PARSE & ~E_NOTICE & ~E_DEPRECATED);
-//ini_set('error_log','php.out');
-//ini_set('log_errors','1');
-//ini_set('display_errors', '0');
diff --git a/view/php/default.php b/view/php/default.php
index 10e150906..f0699090a 100644
--- a/view/php/default.php
+++ b/view/php/default.php
@@ -11,7 +11,7 @@
*/
?>
<!DOCTYPE html >
-<html prefix="og: http://ogp.me/ns#">
+<html prefix="og: http://ogp.me/ns#" <?php if(x($page,'color_mode')) echo $page['color_mode'] ?>>
<head>
<title><?php if(x($page,'title')) echo $page['title'] ?></title>
<script>var baseurl="<?php echo z_root() ?>";</script>
diff --git a/view/pl/htconfig.tpl b/view/pl/htconfig.tpl
index 4a0289fad..be6a65d92 100644
--- a/view/pl/htconfig.tpl
+++ b/view/pl/htconfig.tpl
@@ -10,6 +10,12 @@ $db_pass = '{{$dbpass}}';
$db_data = '{{$dbdata}}';
$db_type = '{{$dbtype}}'; // liczba całkowita. 0 lub nieustawienie dla mysql, 1 dla postgres
+// Set this to 1 if your DB backend supports skip locked.
+// This is known to be the case for
+// postgresql > 9.5, mysql > 8.0 and mariadb > 10.6
+App::$config['system']['db_skip_locked_supported'] = 0;
+
+
/*
* Uwaga: wiele z poniższych ustawień będzie dostępnych w panelu administracyjnym
* po pomyślnej instalacji portalu. Po ustawieniu w panelu administracyjnym, opcje
diff --git a/view/pt-br/htconfig.tpl b/view/pt-br/htconfig.tpl
deleted file mode 100644
index 10068a66b..000000000
--- a/view/pt-br/htconfig.tpl
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-// Set the following for your MySQL installation
-// Copy or rename this file to .htconfig.php
-
-$db_host = '{{$dbhost}}';
-$db_port = '{{$dbport}}';
-$db_user = '{{$dbuser}}';
-$db_pass = '{{$dbpass}}';
-$db_data = '{{$dbdata}}';
-$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
-
-/*
- * Notice: Many of the following settings will be available in the admin panel
- * after a successful site install. Once they are set in the admin panel, they
- * are stored in the DB - and the DB setting will over-ride any corresponding
- * setting in this file
- *
- * The command-line tool util/config is able to query and set the DB items
- * directly if for some reason the admin panel is not available and a system
- * setting requires modification.
- *
- */
-
-
-// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
-// It can be changed later and only applies to timestamps for anonymous viewers.
-
-App::$config['system']['timezone'] = '{{$timezone}}';
-
-// What is your site name?
-
-App::$config['system']['baseurl'] = '{{$siteurl}}';
-App::$config['system']['sitename'] = "Hubzilla";
-App::$config['system']['location_hash'] = '{{$site_id}}';
-
-// These lines set additional security headers to be sent with all responses
-// You may wish to set transport_security_header to 0 if your server already sends
-// this header. content_security_policy may need to be disabled if you wish to
-// run the piwik analytics plugin or include other offsite resources on a page
-
-App::$config['system']['transport_security_header'] = 1;
-App::$config['system']['content_security_policy'] = 1;
-
-
-// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
-// Be certain to create your own personal account before setting
-// REGISTER_CLOSED. 'register_text' (if set) will be displayed prominently on
-// the registration page. REGISTER_APPROVE requires you set 'admin_email'
-// to the email address of an already registered person who can authorise
-// and/or approve/deny the request.
-
-App::$config['system']['register_policy'] = REGISTER_OPEN;
-App::$config['system']['register_text'] = '';
-App::$config['system']['admin_email'] = '{{$adminmail}}';
-
-// Recommend you leave this set to 1. Set to 0 to let people register without
-// proving they own the email address they register with.
-
-App::$config['system']['verify_email'] = 1;
-
-
-// Site access restrictions. By default we will create private sites.
-// Your choices are ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED, and ACCESS_FREE.
-// If you leave REGISTER_OPEN above, anybody may register on your
-// site, however your site will not be listed anywhere as an open
-// registration hub. We will use the system access policy (below)
-// to determine whether or not to list your site in the directory
-// as an open hub where anybody may create accounts. Your choice of
-// paid, tiered, or free determines how these listings will be presented.
-
-
-App::$config['system']['access_policy'] = ACCESS_PRIVATE;
-
-// If you operate a public site, you might wish that people are directed
-// to a "sellpage" where you can describe for features or policies or service plans in depth.
-// This must be an absolute URL beginning with http:// or https:// .
-
-App::$config['system']['sellpage'] = '';
-
-// Maximum size of an imported message, 0 is unlimited
-// FIXME - NOT currently implemented.
-
-App::$config['system']['max_import_size'] = 200000;
-
-// Location of PHP command line processor
-
-App::$config['system']['php_path'] = '{{$phpath}}';
-
-// Configure how we communicate with directory servers.
-// DIRECTORY_MODE_NORMAL = directory client, we will find a directory
-// DIRECTORY_MODE_SECONDARY = caching directory or mirror
-// DIRECTORY_MODE_PRIMARY = main directory server
-// DIRECTORY_MODE_STANDALONE = "off the grid" or private directory services
-
-App::$config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL;
-
-// default system theme
-
-App::$config['system']['theme'] = 'redbasic';
-
-
-// PHP error logging setup
-// Before doing this ensure that the webserver has permission
-// to create and write to php.out in the top level Red directory,
-// or change the name (below) to a file/path where this is allowed.
-
-// Uncomment the following 4 lines to turn on PHP error logging.
-//error_reporting(E_ALL & ~E_WARNING & ~E_PARSE & ~E_NOTICE & ~E_DEPRECATED);
-//ini_set('error_log','php.out');
-//ini_set('log_errors','1');
-//ini_set('display_errors', '0');
diff --git a/view/ru/htconfig.tpl b/view/ru/htconfig.tpl
deleted file mode 100644
index 10068a66b..000000000
--- a/view/ru/htconfig.tpl
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-// Set the following for your MySQL installation
-// Copy or rename this file to .htconfig.php
-
-$db_host = '{{$dbhost}}';
-$db_port = '{{$dbport}}';
-$db_user = '{{$dbuser}}';
-$db_pass = '{{$dbpass}}';
-$db_data = '{{$dbdata}}';
-$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
-
-/*
- * Notice: Many of the following settings will be available in the admin panel
- * after a successful site install. Once they are set in the admin panel, they
- * are stored in the DB - and the DB setting will over-ride any corresponding
- * setting in this file
- *
- * The command-line tool util/config is able to query and set the DB items
- * directly if for some reason the admin panel is not available and a system
- * setting requires modification.
- *
- */
-
-
-// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
-// It can be changed later and only applies to timestamps for anonymous viewers.
-
-App::$config['system']['timezone'] = '{{$timezone}}';
-
-// What is your site name?
-
-App::$config['system']['baseurl'] = '{{$siteurl}}';
-App::$config['system']['sitename'] = "Hubzilla";
-App::$config['system']['location_hash'] = '{{$site_id}}';
-
-// These lines set additional security headers to be sent with all responses
-// You may wish to set transport_security_header to 0 if your server already sends
-// this header. content_security_policy may need to be disabled if you wish to
-// run the piwik analytics plugin or include other offsite resources on a page
-
-App::$config['system']['transport_security_header'] = 1;
-App::$config['system']['content_security_policy'] = 1;
-
-
-// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
-// Be certain to create your own personal account before setting
-// REGISTER_CLOSED. 'register_text' (if set) will be displayed prominently on
-// the registration page. REGISTER_APPROVE requires you set 'admin_email'
-// to the email address of an already registered person who can authorise
-// and/or approve/deny the request.
-
-App::$config['system']['register_policy'] = REGISTER_OPEN;
-App::$config['system']['register_text'] = '';
-App::$config['system']['admin_email'] = '{{$adminmail}}';
-
-// Recommend you leave this set to 1. Set to 0 to let people register without
-// proving they own the email address they register with.
-
-App::$config['system']['verify_email'] = 1;
-
-
-// Site access restrictions. By default we will create private sites.
-// Your choices are ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED, and ACCESS_FREE.
-// If you leave REGISTER_OPEN above, anybody may register on your
-// site, however your site will not be listed anywhere as an open
-// registration hub. We will use the system access policy (below)
-// to determine whether or not to list your site in the directory
-// as an open hub where anybody may create accounts. Your choice of
-// paid, tiered, or free determines how these listings will be presented.
-
-
-App::$config['system']['access_policy'] = ACCESS_PRIVATE;
-
-// If you operate a public site, you might wish that people are directed
-// to a "sellpage" where you can describe for features or policies or service plans in depth.
-// This must be an absolute URL beginning with http:// or https:// .
-
-App::$config['system']['sellpage'] = '';
-
-// Maximum size of an imported message, 0 is unlimited
-// FIXME - NOT currently implemented.
-
-App::$config['system']['max_import_size'] = 200000;
-
-// Location of PHP command line processor
-
-App::$config['system']['php_path'] = '{{$phpath}}';
-
-// Configure how we communicate with directory servers.
-// DIRECTORY_MODE_NORMAL = directory client, we will find a directory
-// DIRECTORY_MODE_SECONDARY = caching directory or mirror
-// DIRECTORY_MODE_PRIMARY = main directory server
-// DIRECTORY_MODE_STANDALONE = "off the grid" or private directory services
-
-App::$config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL;
-
-// default system theme
-
-App::$config['system']['theme'] = 'redbasic';
-
-
-// PHP error logging setup
-// Before doing this ensure that the webserver has permission
-// to create and write to php.out in the top level Red directory,
-// or change the name (below) to a file/path where this is allowed.
-
-// Uncomment the following 4 lines to turn on PHP error logging.
-//error_reporting(E_ALL & ~E_WARNING & ~E_PARSE & ~E_NOTICE & ~E_DEPRECATED);
-//ini_set('error_log','php.out');
-//ini_set('log_errors','1');
-//ini_set('display_errors', '0');
diff --git a/view/sv/htconfig.tpl b/view/sv/htconfig.tpl
deleted file mode 100644
index 10068a66b..000000000
--- a/view/sv/htconfig.tpl
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-// Set the following for your MySQL installation
-// Copy or rename this file to .htconfig.php
-
-$db_host = '{{$dbhost}}';
-$db_port = '{{$dbport}}';
-$db_user = '{{$dbuser}}';
-$db_pass = '{{$dbpass}}';
-$db_data = '{{$dbdata}}';
-$db_type = '{{$dbtype}}'; // an integer. 0 or unset for mysql, 1 for postgres
-
-/*
- * Notice: Many of the following settings will be available in the admin panel
- * after a successful site install. Once they are set in the admin panel, they
- * are stored in the DB - and the DB setting will over-ride any corresponding
- * setting in this file
- *
- * The command-line tool util/config is able to query and set the DB items
- * directly if for some reason the admin panel is not available and a system
- * setting requires modification.
- *
- */
-
-
-// Choose a legal default timezone. If you are unsure, use "America/Los_Angeles".
-// It can be changed later and only applies to timestamps for anonymous viewers.
-
-App::$config['system']['timezone'] = '{{$timezone}}';
-
-// What is your site name?
-
-App::$config['system']['baseurl'] = '{{$siteurl}}';
-App::$config['system']['sitename'] = "Hubzilla";
-App::$config['system']['location_hash'] = '{{$site_id}}';
-
-// These lines set additional security headers to be sent with all responses
-// You may wish to set transport_security_header to 0 if your server already sends
-// this header. content_security_policy may need to be disabled if you wish to
-// run the piwik analytics plugin or include other offsite resources on a page
-
-App::$config['system']['transport_security_header'] = 1;
-App::$config['system']['content_security_policy'] = 1;
-
-
-// Your choices are REGISTER_OPEN, REGISTER_APPROVE, or REGISTER_CLOSED.
-// Be certain to create your own personal account before setting
-// REGISTER_CLOSED. 'register_text' (if set) will be displayed prominently on
-// the registration page. REGISTER_APPROVE requires you set 'admin_email'
-// to the email address of an already registered person who can authorise
-// and/or approve/deny the request.
-
-App::$config['system']['register_policy'] = REGISTER_OPEN;
-App::$config['system']['register_text'] = '';
-App::$config['system']['admin_email'] = '{{$adminmail}}';
-
-// Recommend you leave this set to 1. Set to 0 to let people register without
-// proving they own the email address they register with.
-
-App::$config['system']['verify_email'] = 1;
-
-
-// Site access restrictions. By default we will create private sites.
-// Your choices are ACCESS_PRIVATE, ACCESS_PAID, ACCESS_TIERED, and ACCESS_FREE.
-// If you leave REGISTER_OPEN above, anybody may register on your
-// site, however your site will not be listed anywhere as an open
-// registration hub. We will use the system access policy (below)
-// to determine whether or not to list your site in the directory
-// as an open hub where anybody may create accounts. Your choice of
-// paid, tiered, or free determines how these listings will be presented.
-
-
-App::$config['system']['access_policy'] = ACCESS_PRIVATE;
-
-// If you operate a public site, you might wish that people are directed
-// to a "sellpage" where you can describe for features or policies or service plans in depth.
-// This must be an absolute URL beginning with http:// or https:// .
-
-App::$config['system']['sellpage'] = '';
-
-// Maximum size of an imported message, 0 is unlimited
-// FIXME - NOT currently implemented.
-
-App::$config['system']['max_import_size'] = 200000;
-
-// Location of PHP command line processor
-
-App::$config['system']['php_path'] = '{{$phpath}}';
-
-// Configure how we communicate with directory servers.
-// DIRECTORY_MODE_NORMAL = directory client, we will find a directory
-// DIRECTORY_MODE_SECONDARY = caching directory or mirror
-// DIRECTORY_MODE_PRIMARY = main directory server
-// DIRECTORY_MODE_STANDALONE = "off the grid" or private directory services
-
-App::$config['system']['directory_mode'] = DIRECTORY_MODE_NORMAL;
-
-// default system theme
-
-App::$config['system']['theme'] = 'redbasic';
-
-
-// PHP error logging setup
-// Before doing this ensure that the webserver has permission
-// to create and write to php.out in the top level Red directory,
-// or change the name (below) to a file/path where this is allowed.
-
-// Uncomment the following 4 lines to turn on PHP error logging.
-//error_reporting(E_ALL & ~E_WARNING & ~E_PARSE & ~E_NOTICE & ~E_DEPRECATED);
-//ini_set('error_log','php.out');
-//ini_set('log_errors','1');
-//ini_set('display_errors', '0');
diff --git a/view/theme/redbasic/css/narrow_navbar.css b/view/theme/redbasic/css/narrow_navbar.css
index 99f083638..7a48fc71e 100644
--- a/view/theme/redbasic/css/narrow_navbar.css
+++ b/view/theme/redbasic/css/narrow_navbar.css
@@ -1,24 +1,16 @@
@media screen and (min-width: 767px) {
- nav.navbar {
- padding-top: 1px;
- padding-bottom: 1px
- }
-
- nav .badge {
- top: 0px;
- left: -0.25rem;
+ .navbar {
+ --bs-navbar-padding-y: 1px;
}
.contextual-help-content-open {
top: 2.5rem;
}
- aside {
- padding-top: 3.5rem;
- }
-
- section {
+ #region_1,
+ #region_2,
+ #region_3 {
padding-top: 3.5rem;
}
diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css
index 9069500d9..480e951a9 100644
--- a/view/theme/redbasic/css/style.css
+++ b/view/theme/redbasic/css/style.css
@@ -5,31 +5,37 @@
* Originally by Fabio Comuni <fabrix.xm@gmail.com>
*/
-
-/* bootstrap variable */
+/* bootstrap variables */
:root {
--bs-border-radius: $radius;
- --bs-link-color: $link_colour;
- --bs-link-hover-color: $link_hover_colour;
- --bs-body-bg: $bgcolour;
- --bs-highlight-bg: yellow;
+ --bs-highlight-bg: var(--bs-warning);
}
-.nav-tabs {
- --bs-nav-tabs-border-radius: $radius;
+[data-bs-theme=light] {
+ --bs-link-color: $link_color;
+ --bs-link-hover-color: $link_hover_color;
+ --hz-body-bg: $bgcolor;
+ --hz-body-bg-image: url('$background_image');
}
-.nav-pills {
- --bs-nav-pills-border-radius: $radius;
+[data-bs-theme=dark] {
+ --bs-link-color: $link_color_dark;
+ --bs-link-hover-color: $link_hover_color_dark;
+ --hz-body-bg: $bgcolor_dark;
+ --hz-body-bg-image: url('$background_image_dark');
}
-.btn {
- --bs-btn-border-radius: $radius;
+[data-bs-theme=light] .navbar.bg-body-tertiary {
+ background-color: $nav_bg !important;
}
-.card {
- --bs-card-border-radius: $radius;
+[data-bs-theme=dark] .navbar.bg-body-tertiary {
+ background-color: $nav_bg_dark !important;
+}
+
+.btn {
+ --bs-btn-border-radius: $radius;
}
@@ -41,12 +47,12 @@ html {
body {
font-size: 0.9rem;
- background-color: var(--bs-body-bg);
- background-image: url('$background_image');
+ background-color: var(--hz-body-bg);
+ background-image: var(--hz-body-bg-image);
background-attachment: fixed;
background-size: cover;
- color: $font_colour;
- margin: 0px;
+ color: var(--bs-body-color);
+ margin: 0;
}
aside#region_1 {
@@ -58,7 +64,7 @@ aside#region_1 {
aside#region_3 {
width: $right_aside_widthrem;
- min-width: $left_aside_widthrem;
+ min-width: $right_aside_widthrem;
max-width: $right_aside_widthrem;
}
@@ -107,15 +113,15 @@ h6, .h6 {
font-size: 0.75rem;
}
-#banner {
- color: $banner_colour;
+.navbar-banner {
font-weight: bold;
+ color: var(--bs-emphasis-color);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
-#banner img {
+.navbar-banner img {
max-height: 1.35rem;
width: auto;
}
@@ -154,8 +160,8 @@ input, optgroup, select, textarea {
input[type=text], textarea {
resize: vertical;
- background-color: $comment_item_colour;
- color: $font_colour;
+ background-color: var(--bs-body-bg);
+ color: var(--bs-body-color);
}
.selected-doco-nav {
@@ -176,11 +182,6 @@ input[type=text], textarea {
color: #FF0000;
}
-nav {
- opacity: $nav_float_min_opacity;
- filter:alpha(opacity=$nav_percent_min_opacity);
-}
-
#powered-by {
font-size: 0.5rem;
position: absolute;
@@ -217,7 +218,7 @@ nav {
left: 0px;
width: 100%;
max-height: 50%;
- background: $comment_item_colour;
+ background: var(--bs-body-bg);
padding: 1rem;
border-bottom: #e0e0e0 1px solid;
overflow: auto;
@@ -243,7 +244,6 @@ nav {
}
.contextual-help-tool i {
- color: $font_colour;
font-size: 1.05rem;
}
@@ -279,10 +279,10 @@ nav {
-moz-animation: rotation 1s infinite linear;
-o-animation: rotation 1s infinite linear;
animation: rotation 1s infinite linear;
- border-left: .2rem solid rgba(77, 77, 77, .15);
- border-right: .2rem solid rgba(77, 77, 77, .15);
- border-bottom: .2rem solid rgba(77, 77, 77, .15);
- border-top: .2rem solid rgba(77, 77, 77, .5);
+ border-left: .2rem solid var(--bs-border-color);
+ border-right: .2rem solid var(--bs-border-color);
+ border-bottom: .2rem solid var(--bs-border-color);
+ border-top: .2rem solid var(--bs-tertiary-color);
border-radius: 100%;
}
@@ -410,7 +410,7 @@ footer {
}
.vcard-card {
- background-color: rgba(254,254,254,0.5);
+ background-color: rgba(var(--bs-body-bg-rgb), .7);
}
.vcard {
@@ -465,7 +465,7 @@ footer {
.pager-prev,
.pager-next,
.pager_n {
- border: 1px solid #e0e0e0;
+ border: 1px solid var(--bs-border-color);
background: transparent;
padding: 4px;
}
@@ -479,7 +479,6 @@ footer {
.photo,
.contact-block-img {
border-radius: $radius;
- box-shadow: $shadowpx $shadowpx $shadowpx 0 #444444;
}
#side-bar-photos-albums {
@@ -493,7 +492,6 @@ footer {
.profile-match-photo img,
.directory-photo-img {
border-radius: $radius;
- box-shadow: $shadowpx $shadowpx $shadowpx 0 #444444;
}
.profile-match-photo img {
@@ -502,7 +500,7 @@ footer {
}
#photo-view-wrapper {
- background-color: $item_colour;
+ background-color: var(--bs-tertiary-bg);
}
.pmenu.horizontal {
@@ -573,10 +571,6 @@ footer {
margin-left: 15px;
}
-.wall-item-conv {
- background-color: $comment_item_colour;
-}
-
#nav-notifications-template,
#nav-notifications-forums-template {
display: none;
@@ -631,7 +625,7 @@ nav .acpopup {
#cboxContent {
padding: 3px;
- border: 0px solid #fff;
+ border: 0px solid var(--bs-border-color);
border-radius: var(--bs-border-radius);
background-color: #fff;
z-index: 1052;
@@ -682,7 +676,7 @@ nav .acpopup {
padding: 10px;
height: 250px;
overflow: auto;
- border: 1px solid #ddd;
+ border: 1px solid var(--bs-border-color);
}
#prof-separator {
@@ -694,7 +688,7 @@ nav .acpopup {
padding: 10px;
height: 450px;
overflow: auto;
- border: 1px solid #ddd;
+ border: 1px solid var(--bs-border-color);
}
#prof-edit-desc {
@@ -774,32 +768,12 @@ div.jGrowl div.jGrowl-notification {
text-align: center;
}
-.conv-participants {
- color: $font_colour;
-}
-
.contactname {
display: block;
overflow: hidden;
text-overflow: ellipsis;
}
-.dropdown-notification,
-.notification,
-.member-item {
- line-height: 1.2em;
- font-size: 0.75rem;
- overflow: hidden;
- text-overflow: ellipsis;
- display: block;
- white-space: nowrap;
-}
-
-.notification.notification-forum {
- font-size: 0.9rem;
- color: $font_colour;
-}
-
#acl-search::-webkit-input-placeholder {
/* non-fontawesome fonts set a fallback for text parts of the placeholder*/
font-family: ForkAwesome, sans-serif, arial, freesans;
@@ -920,20 +894,11 @@ margin-right: 50px;
a .generic-icons {
font-size: 1rem;
margin-right: 0.5rem;
- color: $font_colour;
}
.generic-icons-right {
font-size: 1rem;
margin-left: 0.5rem;
- color: $font_colour;
-}
-
-.generic-icons:hover,
-a .generic-icons:hover,
-.generic-icons-right:hover,
-a .generic-icons-right:hover {
- color: $font_colour;
}
.generic-icons-nav {
@@ -949,7 +914,6 @@ a .generic-icons-right:hover {
.drop-icons,
a .drop-icons {
font-size: 1rem;
- color: $font_colour;
text-decoration: none;
cursor: pointer;
}
@@ -1018,8 +982,8 @@ img.mail-conv-sender-photo {
}
#profile-jot-wrapper {
- background-color: rgba(254, 254, 254, 1);
- border: 1px solid rgba(0, 0, 0, .2);
+ background-color: var(--bs-body-bg);
+ border: 1px solid var(--bs-border-color);
border-radius: var(--bs-border-radius);
}
@@ -1053,12 +1017,6 @@ img.mail-conv-sender-photo {
/* conversation */
-
-.top-radius {
- border-top-right-radius: var(--bs-border-radius);
- border-top-left-radius: var(--bs-border-radius);
-}
-
.wall-event-item {
padding: 10px;
color: #fff;
@@ -1079,19 +1037,19 @@ img.mail-conv-sender-photo {
}
.wall-item-content-wrapper {
- background-color: $item_colour;
+ background-color: var(--bs-tertiary-bg);
border-top-right-radius: var(--bs-border-radius);
border-top-left-radius: var(--bs-border-radius);
}
.wall-item-content-wrapper.comment {
- background-color: $comment_item_colour;
+ background-color: var(--bs-body-bg);
border-top-right-radius: 0px;
border-top-left-radius: 0px;
}
.hide-comments-outer {
- background-color: $comment_item_colour;
+ background-color: var(--bs-body-bg);
border-top-color: #e0e0e0;
border-style: solid;
border-top-style: dashed;
@@ -1106,15 +1064,15 @@ img.mail-conv-sender-photo {
.wall-item-comment-wrapper {
padding: 7px 10px;
- background-color: $item_colour;
+ background-color: var(--bs-tertiary-bg);
border-radius: 0px;
border-bottom-right-radius: var(--bs-border-radius);
border-bottom-left-radius: var(--bs-border-radius);
- border-top: 3px solid $comment_item_colour;
+ border-top: 3px solid var(--bs-body-bg);
}
.wall-item-comment-wrapper-wc {
- border-top: 0px solid $comment_item_colour;
+ border-top: 0px solid var(--bs-body-bg);
}
@@ -1123,7 +1081,6 @@ img.mail-conv-sender-photo {
height: $top_photo;
border: none;
border-radius: var(--bs-border-radius);
- box-shadow: $shadowpx $shadowpx $shadowpx 0 #444444;
}
.comment .wall-item-photo {
@@ -1131,11 +1088,6 @@ img.mail-conv-sender-photo {
height: $reply_photo;
}
-.wall-item-ago,
-.dropdown-sub-text {
- color: #777;
-}
-
.wall-item-content,
.mail-conv-body,
.page-body,
@@ -1144,9 +1096,8 @@ img.mail-conv-sender-photo {
font-size: 1rem;
}
-
.comment-edit-text {
- border: 1px solid #e0e0e0;
+ border: 1px solid var(--bs-border-color);
border-radius: var(--bs-border-radius);
}
@@ -1161,13 +1112,13 @@ img.mail-conv-sender-photo {
}
.directory-item .divgrow-showmore {
- background-color: $comment_item_colour;
+ background-color: var(--bs-body-bg);
}
/* widgets */
.widget {
- background-color: rgba(254,254,254,.5);
+ background-color: rgba(var(--bs-body-bg-rgb), .7);
border-radius: var(--bs-border-radius);
}
@@ -1186,7 +1137,7 @@ img.mail-conv-sender-photo {
}
#datebrowse-sidebar select {
- border: 1px solid #e0e0e0;
+ border: 1px solid var(--bs-border-color);
border-radius: var(--bs-border-radius);
}
@@ -1215,7 +1166,7 @@ img.mail-conv-sender-photo {
.chat-item-title,
.chat-item-title-self {
border-radius: var(--bs-border-radius);
- background-color: $item_colour;
+ background-color: var(--bs-tertiary-bg);
}
#chatMembers img {
@@ -1223,17 +1174,17 @@ img.mail-conv-sender-photo {
}
.menu-img-3 {
- width: 2.7rem;
- height: 2.7rem;
- margin-right: 5px;
+ width: 3rem;
+ height: 3rem;
+ margin-right: .5rem;
border-radius: var(--bs-border-radius);
float: left;
}
.menu-img-2 {
- height: 1.8rem;
- width: 1.8rem;
- margin-right: 5px;
+ height: 2.3rem;
+ width: 2.3rem;
+ margin-right: .5rem;
border-radius: var(--bs-border-radius);
float: left;
}
@@ -1271,17 +1222,17 @@ img.mail-conv-sender-photo {
}
.generic-content-wrapper {
- border: 1px solid #e0e0e0;
+ border: 1px solid var(--bs-border-color);
border-radius: var(--bs-border-radius);
margin-bottom: 1.5rem;
}
.section-title-wrapper {
padding: 7px 10px;
- background-color: $item_colour;
+ background-color: var(--bs-tertiary-bg);
border-top-left-radius: var(--bs-border-radius);
border-top-right-radius: var(--bs-border-radius);
- border-bottom: 3px solid $comment_item_colour;
+ border-bottom: 3px solid var(--bs-body-bg);
}
.section-title-wrapper h2,
@@ -1299,21 +1250,21 @@ img.mail-conv-sender-photo {
.section-subtitle-wrapper {
padding: 4px 10px;
- background-color: $item_colour;
- border-bottom: 3px solid $comment_item_colour;
+ background-color: var(--bs-tertiary-bg);
+ border-bottom: 3px solid var(--bs-body-bg);
}
.section-content-tools-wrapper {
padding: 7px 10px;
- background-color: $comment_item_colour;
- border-bottom: 3px solid $comment_item_colour;
+ background-color: var(--bs-body-bg);
+ border-bottom: 3px solid var(--bs-body-bg);
}
.section-content-success-wrapper {
padding: 21px 10px;
color: #155724;
background-color: #d4edda;
- border-bottom: 3px solid $comment_item_colour;
+ border-bottom: 3px solid var(--bs-body-bg);
text-align: center;
}
@@ -1321,7 +1272,7 @@ img.mail-conv-sender-photo {
padding: 21px 10px;
color: #0c5460;
background-color: #d1ecf1;
- border-bottom: 3px solid $comment_item_colour;
+ border-bottom: 3px solid var(--bs-body-bg);
text-align: center;
}
@@ -1329,7 +1280,7 @@ img.mail-conv-sender-photo {
padding: 21px 10px;
color: #856404;
background-color: #fff3cd;
- border-bottom: 3px solid $comment_item_colour;
+ border-bottom: 3px solid var(--bs-body-bg);
text-align: center;
}
@@ -1337,7 +1288,7 @@ img.mail-conv-sender-photo {
padding: 21px 10px;
color: #721c24;
background-color: #f8d7da;
- border-bottom: 3px solid $comment_item_colour;
+ border-bottom: 3px solid var(--bs-body-bg);
text-align: center;
}
.section-content-tools-wrapper .section-content-success-wrapper,
@@ -1356,14 +1307,14 @@ img.mail-conv-sender-photo {
.section-content-wrapper {
padding: 7px 10px;
- background-color: $comment_item_colour;
+ background-color: var(--bs-body-bg);
border-bottom-left-radius: var(--bs-border-radius);
border-bottom-right-radius: var(--bs-border-radius);
word-wrap: break-word;
}
.section-content-wrapper-np {
- background-color: $comment_item_colour;
+ background-color: var(--bs-body-bg);
border-bottom-left-radius: var(--bs-border-radius);
border-bottom-right-radius: var(--bs-border-radius);
word-wrap: break-word;
@@ -1408,7 +1359,7 @@ main.fullscreen .section-content-wrapper-np {
.locs-index-row:hover td,
[id^="cloud-index-"]:hover td,
.cloud-index-active {
- background-color: $item_colour;
+ background-color: var(--bs-tertiary-bg);
}
[id^="webpage-list-item-"]:hover td,
@@ -1416,15 +1367,15 @@ main.fullscreen .section-content-wrapper-np {
[id^="layout-list-item-"]:hover td,
[id^="menu-list-item-"]:hover td,
[id^="mitem-list-item-"]:hover td {
- background-color: $item_colour;
+ background-color: var(--bs-tertiary-bg);
}
#perms-tool-table .highlight:hover {
- background-color: $item_colour;
+ background-color: var(--bs-tertiary-bg);
}
.notify-seen {
- background-color: $item_colour;
+ background-color: var(--bs-tertiary-bg);
}
/* bootstrap overrides */
@@ -1436,67 +1387,32 @@ main.fullscreen .section-content-wrapper-np {
blockquote {
font-size: 1rem;
font-style: italic;
- border-left: 3px solid #e0e0e0;
+ border-left: 3px solid var(--bs-border-color);
padding: 1em 0px 1em 1.5em;
margin: 0px;
}
-.dropdown-menu {
- color: $font_colour;
-}
-
-.dropdown-item {
- color: $font_colour;
-}
-
-.dropdown-item:active,
-.dropdown-item:focus,
-.dropdown-item:hover,
-.textcomplete-item:focus .dropdown-item,
-.textcomplete-item:hover .dropdown-item,
-.textcomplete-item.active .dropdown-item,
-.textcomplete-item:active .dropdown-item {
- color: $font_colour;
- background-color: $item_colour;
-}
-
.textcomplete-dropdown {
- max-height: 300px;
- max-width: 250px;
+ max-height: 20rem;
+ max-width: 17rem;
+ min-width: 15rem;
overflow: auto;
}
-.dropdown-item.active {
+.dropdown-item.active,
+.textcomplete-item.active {
color: #fff;
- background-color: #007bff;
-}
-
-.bg-dark {
- background-color: $nav_bg !important;
+ background-color: var(--bs-tertiary-bg);
}
.navbar {
z-index:1030;
}
-.navbar-dark .navbar-nav .nav-link,
-.usermenu i {
- color: $nav_icon_colour;
-}
-.navbar-dark .navbar-nav .nav-link:focus,
-.navbar-dark .navbar-nav .nav-link:hover,
-.usermenu:focus i,
-.usermenu:hover i {
- color: $nav_active_icon_colour;
-}
@media screen and (max-width: 992px) {
- aside#region_1 {
- border-right: 1px solid $nav_bd;
- }
-
main {
left: -$left_aside_widthrem;
width: calc( 100% + $left_aside_widthrem );
@@ -1578,8 +1494,9 @@ dl.bb-dl > dd > li {
display: inline-block;
border-radius: var(--bs-border-radius);
cursor: text;
- padding: 0px 10px;
- width: 100%;
+ border-radius: 0px;
+ background-color: var(--bs-body-bg);
+
}
.bootstrap-tagsinput .label {
@@ -1588,6 +1505,13 @@ dl.bb-dl > dd > li {
.bootstrap-tagsinput input {
height: 2.5rem;
+ margin: 0;
+ max-width: 30%;
+}
+
+.bootstrap-tagsinput {
+ width: 100%;
+ padding: 0 .5rem;
}
/* Abusing theme-green is less work than makeing a new new one */
@@ -1599,23 +1523,20 @@ dl.bb-dl > dd > li {
/* Turn checkboxes into switches */
.onoffswitch.checkbox > div {
- position: relative; width: 60px;
- -webkit-user-select:none; -moz-user-select:none; -ms-user-select: none;
- display:inline-block;
+ position: relative; width: 60px;
+ -webkit-user-select:none; -moz-user-select:none; -ms-user-select: none;
+ display:inline-block;
}
.onoffswitch.checkbox input {
- display: none;
+ display: none;
}
.onoffswitch.checkbox > div label {
display: block; overflow: hidden; cursor: pointer;
- border: 1px solid #e0e0e0;
+ border: 1px solid var(--bs-border-color);
border-radius: 12px;
margin:0px;
- -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
font-weight: normal;
}
@@ -1628,47 +1549,45 @@ dl.bb-dl > dd > li {
}
.onoffswitch-inner {
- display: block; width: 200%; margin-left: -100%;
- -moz-transition: margin 0.3s ease-in 0s; -webkit-transition: margin 0.3s ease-in 0s;
- -o-transition: margin 0.3s ease-in 0s; transition: margin 0.3s ease-in 0s;
+ display: block; width: 200%; margin-left: -100%;
+ transition: margin 0.19s ease-in-out;
}
.onoffswitch-inner:before, .onoffswitch-inner:after {
- display: block; float: left; width: 50%; height: 20px; padding: 0; line-height:20px;
- -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
+ display: block; float: left; width: 50%; height: 20px; padding: 0; line-height:20px;
+ -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
}
.onoffswitch-inner:before {
- content: attr(data-on);
- padding-right: 21px;
- background-color: $item_colour;
- color: $font_colour;
- text-align: right;
+ content: attr(data-on);
+ padding-right: 21px;
+ background-color: rgba(var(--bs-body-color-rgb), 0);
+ text-align: right;
}
.onoffswitch-inner:after {
- content: attr(data-off);
- padding-left: 21px;
- background-color: $item_colour; color: #e0e0e0;
- text-align: left;
+ content: attr(data-off);
+ padding-left: 21px;
+ background-color: rgba(var(--bs-body-color-rgb), 0);
+ color: var(--bs-border-color);
+ text-align: left;
}
.onoffswitch-switch {
- display: block; width: 15px; margin:4px;
- background: #e0e0e0;
- border-radius: 10px;
- position: absolute; top: 0; bottom: 0; right: 36px;
- -moz-transition: all 0.3s ease-in 0s; -webkit-transition: all 0.3s ease-in 0s;
- -o-transition: all 0.3s ease-in 0s; transition: all 0.3s ease-in 0s;
+ display: block; width: 15px; margin:4px;
+ background: var(--bs-secondary-bg);
+ border-radius: 10px;
+ position: absolute; top: 0; bottom: 0; right: 36px;
+ transition: right 0.2s ease-in-out;
}
.onoffswitch.checkbox > div > input:checked + label .onoffswitch-inner {
- margin-left: 0px;
+ margin-left: 0px;
}
.onoffswitch.checkbox > div > input:checked + label .onoffswitch-switch {
- right: 0px;
- background-color: var(--bs-link-color);
+ right: 0px;
+ background-color: var(--bs-link-color);
}
@@ -1747,7 +1666,7 @@ dl.bb-dl > dd > li {
.cloud-icon-container {
width: 64px;
height: 64px;
- border: 1px solid #eee;
+ border: 1px solid var(--bs-border-color);
border-radius: var(--bs-border-radius);
}
@@ -1791,10 +1710,29 @@ dl.bb-dl > dd > li {
opacity: 1;
}
-.bootstrap-tagsinput {
- width: 100%;
-}
-
.jg-entry img {
border-radius: var(--bs-border-radius);
}
+
+.disable-transition {
+ transition: none !important;
+}
+
+.page-loader {
+ z-index: 10000;
+ width: 20vw;
+ height: 3px;
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ animation: pageloader_move 2s ease-out infinite;
+}
+
+@keyframes pageloader_move {
+ 0% {
+ transform: translateX(0px);
+ }
+ 50% {
+ transform: translateX(80vw);
+ }
+}
diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js
index 04469cb85..706bf2808 100644
--- a/view/theme/redbasic/js/redbasic.js
+++ b/view/theme/redbasic/js/redbasic.js
@@ -2,7 +2,50 @@
* redbasic theme specific JavaScript
*/
+let redbasic_dark_mode = localStorage.getItem('redbasic_dark_mode');
+let redbasic_theme_color = localStorage.getItem('redbasic_theme_color');
+
+if (redbasic_dark_mode == 1) {
+ $('html').attr('data-bs-theme', 'dark');
+}
+if (redbasic_dark_mode == 0) {
+ $('html').attr('data-bs-theme', 'light');
+}
+
+
+
+
+
+if (redbasic_theme_color) {
+ $('meta[name=theme-color]').attr('content', redbasic_theme_color);
+}
+
+
+
$(document).ready(function() {
+ // provide a fake progress bar for pwa standalone mode
+ if (window.matchMedia('(display-mode: standalone)').matches) {
+ $(window).on('beforeunload', function(){
+ if ($('.page-loader').length) {
+ return;
+ }
+ $('<div class="bg-primary page-loader"></div>').prependTo('body');
+ });
+ }
+
+ if (redbasic_dark_mode == 1) {
+ $('#theme-switch-icon').removeClass('fa-moon-o').addClass('fa-sun-o');
+ $('[data-bs-theme="light"]').attr('data-bs-theme', 'dark');
+ }
+ if (redbasic_dark_mode == 0) {
+ $('#theme-switch-icon').removeClass('fa-sun-o').addClass('fa-moon-o');
+ $('[data-bs-theme="dark"]:not(nav)').attr('data-bs-theme', 'light');
+ }
+
+ if (redbasic_theme_color != $('nav').css('background-color')) {
+ $('meta[name=theme-color]').attr('content', $('nav').css('background-color'));
+ localStorage.setItem('redbasic_theme_color', $('nav').css('background-color'));
+ }
// CSS3 calc() fallback (for unsupported browsers)
$('body').append('<div id="css3-calc" style="width: 10px; width: calc(10px + 10px); display: none;"></div>');
@@ -17,6 +60,7 @@ $(document).ready(function() {
}
$('#css3-calc').remove(); // Remove the test element
+
if (document.querySelector('#region_1')) {
stickyScroll('.aside_spacer_left', '.aside_spacer_top_left', '.content', parseFloat(window.getComputedStyle(document.querySelector('#region_1')).getPropertyValue('padding-top')), 0);
}
@@ -40,6 +84,27 @@ $(document).ready(function() {
}
});
+ $('#theme-switch').click(function() {
+ if ($('html').attr('data-bs-theme') === 'dark') {
+ if ($('nav').data('bs-theme') === 'dark') {
+ $('[data-bs-theme="dark"]:not(nav)').attr('data-bs-theme', 'light');
+ }
+ else {
+ $('[data-bs-theme="dark"]').attr('data-bs-theme', 'light');
+ }
+ localStorage.setItem('redbasic_dark_mode', 0);
+ $('#theme-switch-icon').removeClass('fa-sun-o').addClass('fa-moon-o');
+ }
+ else {
+ $('[data-bs-theme="light"]').attr('data-bs-theme', 'dark');
+ localStorage.setItem('redbasic_dark_mode', 1);
+ $('#theme-switch-icon').removeClass('fa-moon-o').addClass('fa-sun-o');
+ }
+ $('meta[name=theme-color]').attr('content', $('nav').css('background-color'));
+ localStorage.setItem('redbasic_theme_color', $('nav').css('background-color'));
+ });
+
+
$('#menu-btn').click(function() {
if($('#navbar-collapse-1').hasClass('show')){
$('#navbar-collapse-1').removeClass('show');
diff --git a/view/theme/redbasic/php/config.php b/view/theme/redbasic/php/config.php
index 65834526d..b4cb281b9 100644
--- a/view/theme/redbasic/php/config.php
+++ b/view/theme/redbasic/php/config.php
@@ -37,21 +37,21 @@ class RedbasicConfig {
}
$arr = array();
+ $arr['dark_mode'] = get_pconfig(local_channel(),'redbasic', 'dark_mode');
+ $arr['navbar_dark_mode'] = get_pconfig(local_channel(),'redbasic', 'navbar_dark_mode');
$arr['narrow_navbar'] = get_pconfig(local_channel(),'redbasic', 'narrow_navbar' );
$arr['nav_bg'] = get_pconfig(local_channel(),'redbasic', 'nav_bg' );
- $arr['nav_icon_colour'] = get_pconfig(local_channel(),'redbasic', 'nav_icon_colour' );
- $arr['nav_active_icon_colour'] = get_pconfig(local_channel(),'redbasic', 'nav_active_icon_colour' );
- $arr['link_colour'] = get_pconfig(local_channel(),'redbasic', 'link_colour' );
- $arr['link_hover_colour'] = get_pconfig(local_channel(),'redbasic', 'link_hover_colour' );
- $arr['banner_colour'] = get_pconfig(local_channel(),'redbasic', 'banner_colour' );
- $arr['bgcolour'] = get_pconfig(local_channel(),'redbasic', 'background_colour' );
+ $arr['nav_bg_dark'] = get_pconfig(local_channel(),'redbasic', 'nav_bg_dark' );
+ $arr['link_color'] = get_pconfig(local_channel(),'redbasic', 'link_color' );
+ $arr['link_color_dark'] = get_pconfig(local_channel(),'redbasic', 'link_color_dark' );
+ $arr['link_hover_color'] = get_pconfig(local_channel(),'redbasic', 'link_hover_color' );
+ $arr['link_hover_color_dark'] = get_pconfig(local_channel(),'redbasic', 'link_hover_color_dark' );
+ $arr['bgcolor'] = get_pconfig(local_channel(),'redbasic', 'background_color' );
+ $arr['bgcolor_dark'] = get_pconfig(local_channel(),'redbasic', 'background_color_dark' );
$arr['background_image'] = get_pconfig(local_channel(),'redbasic', 'background_image' );
- $arr['item_colour'] = get_pconfig(local_channel(),'redbasic', 'item_colour' );
- $arr['comment_item_colour'] = get_pconfig(local_channel(),'redbasic', 'comment_item_colour' );
+ $arr['background_image_dark'] = get_pconfig(local_channel(),'redbasic', 'background_image_dark' );
$arr['font_size'] = get_pconfig(local_channel(),'redbasic', 'font_size' );
- $arr['font_colour'] = get_pconfig(local_channel(),'redbasic', 'font_colour' );
$arr['radius'] = get_pconfig(local_channel(),'redbasic', 'radius' );
- $arr['shadow'] = get_pconfig(local_channel(),'redbasic', 'photo_shadow' );
$arr['converse_width']=get_pconfig(local_channel(),"redbasic","converse_width");
$arr['top_photo']=get_pconfig(local_channel(),"redbasic","top_photo");
$arr['reply_photo']=get_pconfig(local_channel(),"redbasic","reply_photo");
@@ -66,20 +66,20 @@ class RedbasicConfig {
if (isset($_POST['redbasic-settings-submit'])) {
set_pconfig(local_channel(), 'redbasic', 'narrow_navbar', $_POST['redbasic_narrow_navbar']);
+ set_pconfig(local_channel(), 'redbasic', 'navbar_dark_mode', $_POST['redbasic_navbar_dark_mode']);
+ set_pconfig(local_channel(), 'redbasic', 'dark_mode', $_POST['redbasic_dark_mode']);
set_pconfig(local_channel(), 'redbasic', 'nav_bg', $_POST['redbasic_nav_bg']);
- set_pconfig(local_channel(), 'redbasic', 'nav_icon_colour', $_POST['redbasic_nav_icon_colour']);
- set_pconfig(local_channel(), 'redbasic', 'nav_active_icon_colour', $_POST['redbasic_nav_active_icon_colour']);
- set_pconfig(local_channel(), 'redbasic', 'link_colour', $_POST['redbasic_link_colour']);
- set_pconfig(local_channel(), 'redbasic', 'link_hover_colour', $_POST['redbasic_link_hover_colour']);
- set_pconfig(local_channel(), 'redbasic', 'background_colour', $_POST['redbasic_background_colour']);
- set_pconfig(local_channel(), 'redbasic', 'banner_colour', $_POST['redbasic_banner_colour']);
+ set_pconfig(local_channel(), 'redbasic', 'nav_bg_dark', $_POST['redbasic_nav_bg_dark']);
+ set_pconfig(local_channel(), 'redbasic', 'link_color', $_POST['redbasic_link_color']);
+ set_pconfig(local_channel(), 'redbasic', 'link_color_dark', $_POST['redbasic_link_color_dark']);
+ set_pconfig(local_channel(), 'redbasic', 'link_hover_color', $_POST['redbasic_link_hover_color']);
+ set_pconfig(local_channel(), 'redbasic', 'link_hover_color_dark', $_POST['redbasic_link_hover_color_dark']);
+ set_pconfig(local_channel(), 'redbasic', 'background_color', $_POST['redbasic_background_color']);
+ set_pconfig(local_channel(), 'redbasic', 'background_color_dark', $_POST['redbasic_background_color_dark']);
set_pconfig(local_channel(), 'redbasic', 'background_image', $_POST['redbasic_background_image']);
- set_pconfig(local_channel(), 'redbasic', 'item_colour', $_POST['redbasic_item_colour']);
- set_pconfig(local_channel(), 'redbasic', 'comment_item_colour', $_POST['redbasic_comment_item_colour']);
+ set_pconfig(local_channel(), 'redbasic', 'background_image_dark', $_POST['redbasic_background_image_dark']);
set_pconfig(local_channel(), 'redbasic', 'font_size', $_POST['redbasic_font_size']);
- set_pconfig(local_channel(), 'redbasic', 'font_colour', $_POST['redbasic_font_colour']);
set_pconfig(local_channel(), 'redbasic', 'radius', $_POST['redbasic_radius']);
- set_pconfig(local_channel(), 'redbasic', 'photo_shadow', $_POST['redbasic_shadow']);
set_pconfig(local_channel(), 'redbasic', 'converse_width', $_POST['redbasic_converse_width']);
set_pconfig(local_channel(), 'redbasic', 'top_photo', $_POST['redbasic_top_photo']);
set_pconfig(local_channel(), 'redbasic', 'reply_photo', $_POST['redbasic_reply_photo']);
@@ -100,21 +100,24 @@ class RedbasicConfig {
'$theme' => \App::$channel['channel_theme'],
'$expert' => $expert,
'$title' => t("Theme settings"),
+ '$dark' => t('Dark style'),
+ '$light' => t('Light style'),
+ '$common' => t('Common settings'),
+ '$dark_mode' => array('redbasic_dark_mode',t('Default to dark mode'),$arr['dark_mode'], '', array(t('No'),t('Yes'))),
+ '$navbar_dark_mode' => array('redbasic_navbar_dark_mode',t('Always use light icons for navbar'),$arr['navbar_dark_mode'], t('Enable this option if you use a dark navbar color in light mode'), array(t('No'),t('Yes'))),
'$narrow_navbar' => array('redbasic_narrow_navbar',t('Narrow navbar'),$arr['narrow_navbar'], '', array(t('No'),t('Yes'))),
'$nav_bg' => array('redbasic_nav_bg', t('Navigation bar background color'), $arr['nav_bg']),
- '$nav_icon_colour' => array('redbasic_nav_icon_colour', t('Navigation bar icon color '), $arr['nav_icon_colour']),
- '$nav_active_icon_colour' => array('redbasic_nav_active_icon_colour', t('Navigation bar active icon color '), $arr['nav_active_icon_colour']),
- '$link_colour' => array('redbasic_link_colour', t('Link color'), $arr['link_colour']),
- '$link_hover_colour' => array('redbasic_link_hover_colour', t('Link hover color'), $arr['link_hover_colour']),
- '$banner_colour' => array('redbasic_banner_colour', t('Set font-color for banner'), $arr['banner_colour']),
- '$bgcolour' => array('redbasic_background_colour', t('Set the background color'), $arr['bgcolour']),
+ '$nav_bg_dark' => array('redbasic_nav_bg_dark', t('Dark navigation bar background color'), $arr['nav_bg_dark']),
+ '$link_color' => array('redbasic_link_color', t('Link color'), $arr['link_color']),
+ '$link_color_dark' => array('redbasic_link_color_dark', t('Dark link color'), $arr['link_color_dark']),
+ '$link_hover_color' => array('redbasic_link_hover_color', t('Link hover color'), $arr['link_hover_color']),
+ '$link_hover_color_dark' => array('redbasic_link_hover_color_dark', t('Dark link hover color'), $arr['link_hover_color_dark']),
+ '$bgcolor' => array('redbasic_background_color', t('Set the background color'), $arr['bgcolor']),
+ '$bgcolor_dark' => array('redbasic_background_color_dark', t('Set the dark background color'), $arr['bgcolor_dark']),
'$background_image' => array('redbasic_background_image', t('Set the background image'), $arr['background_image']),
- '$item_colour' => array('redbasic_item_colour', t('Set the background color of items'), $arr['item_colour']),
- '$comment_item_colour' => array('redbasic_comment_item_colour', t('Set the background color of comments'), $arr['comment_item_colour']),
+ '$background_image_dark' => array('redbasic_background_image_dark', t('Set the dark background image'), $arr['background_image_dark']),
'$font_size' => array('redbasic_font_size', t('Set font-size for the entire application'), $arr['font_size'], t('Examples: 1rem, 100%, 16px')),
- '$font_colour' => array('redbasic_font_colour', t('Set font-color for posts and comments'), $arr['font_colour']),
'$radius' => array('redbasic_radius', t('Set radius of corners'), $arr['radius'], t('Example: 4px')),
- '$shadow' => array('redbasic_shadow', t('Set shadow depth of photos'), $arr['shadow']),
'$converse_width' => array('redbasic_converse_width',t('Set maximum width of content region in rem'),$arr['converse_width'], t('Leave empty for default width')),
'$top_photo' => array('redbasic_top_photo', t('Set size of conversation author photo'), $arr['top_photo']),
'$reply_photo' => array('redbasic_reply_photo', t('Set size of followup author photos'), $arr['reply_photo']),
diff --git a/view/theme/redbasic/php/style.php b/view/theme/redbasic/php/style.php
index 667377838..d29de1b15 100644
--- a/view/theme/redbasic/php/style.php
+++ b/view/theme/redbasic/php/style.php
@@ -11,22 +11,19 @@ if(! App::$install) {
// Load the owners pconfig
$nav_bg = get_pconfig($uid, 'redbasic', 'nav_bg');
- $nav_icon_colour = get_pconfig($uid, 'redbasic', 'nav_icon_colour');
- $nav_active_icon_colour = get_pconfig($uid, 'redbasic', 'nav_active_icon_colour');
- $banner_colour = get_pconfig($uid,'redbasic','banner_colour');
+ $nav_bg_dark = get_pconfig($uid, 'redbasic', 'nav_bg_dark');
$narrow_navbar = get_pconfig($uid,'redbasic','narrow_navbar');
- $link_colour = get_pconfig($uid, 'redbasic', 'link_colour');
- $link_hover_colour = get_pconfig($uid, 'redbasic', 'link_hover_colour');
+ $link_color = get_pconfig($uid, 'redbasic', 'link_color');
+ $link_color_dark = get_pconfig($uid, 'redbasic', 'link_color_dark');
+ $link_hover_color = get_pconfig($uid, 'redbasic', 'link_hover_color');
+ $link_hover_color_dark = get_pconfig($uid, 'redbasic', 'link_hover_color_dark');
+ $bgcolor = get_pconfig($uid, 'redbasic', 'background_color');
+ $bgcolor_dark = get_pconfig($uid, 'redbasic', 'background_color_dark');
$schema = get_pconfig($uid,'redbasic','schema');
- $bgcolour = get_pconfig($uid, 'redbasic', 'background_colour');
$background_image = get_pconfig($uid, 'redbasic', 'background_image');
- $item_colour = get_pconfig($uid, 'redbasic', 'item_colour');
- $comment_item_colour = get_pconfig($uid, 'redbasic', 'comment_item_colour');
- $item_opacity = get_pconfig($uid, 'redbasic', 'item_opacity');
+ $background_image_dark = get_pconfig($uid, 'redbasic', 'background_image_dark');
$font_size = get_pconfig($uid, 'redbasic', 'font_size');
- $font_colour = get_pconfig($uid, 'redbasic', 'font_colour');
$radius = get_pconfig($uid, 'redbasic', 'radius');
- $shadow = get_pconfig($uid,'redbasic','photo_shadow');
$converse_width=get_pconfig($uid,'redbasic','converse_width');
$top_photo=get_pconfig($uid,'redbasic','top_photo');
$reply_photo=get_pconfig($uid,'redbasic','reply_photo');
@@ -75,39 +72,47 @@ if ((!$schema) || ($schema == '---')) {
//Set some defaults - we have to do this after pulling owner settings, and we have to check for each setting
//individually. If we don't, we'll have problems if a user has set one, but not all options.
if (! $nav_bg)
- $nav_bg = '#343a40';
-if (! $nav_icon_colour)
- $nav_icon_colour = 'rgba(255, 255, 255, 0.55)';
-if (! $nav_active_icon_colour)
- $nav_active_icon_colour = 'rgba(255, 255, 255, 0.75)';
-if (! $link_colour)
- $link_colour = '#0d6efd';
-if (! $link_hover_colour)
- $link_hover_colour = '#0a58ca;';
-if (! $banner_colour)
- $banner_colour = '#efefef';
-if (! $bgcolour)
- $bgcolour = 'rgb(254,254,254)';
+ $nav_bg = 'rgba(248, 249, 250, 1)';
+
+if (! $nav_bg_dark)
+ $nav_bg_dark = 'rgba(43, 48, 53, 1)';
+
+if (! $link_color)
+ $link_color = '#0d6efd';
+
+if (! $link_color_dark)
+ $link_color_dark = '#6ea8fe';
+
+if (! $link_hover_color)
+ $link_hover_color = '#0a58ca';
+
+if (! $link_hover_color_dark)
+ $link_hover_color_dark = '#9ec5fe';
+
+if (! $bgcolor)
+ $bgcolor = '#fff';
+
+if (! $bgcolor_dark)
+ $bgcolor_dark = '#212529';
+
if (! $background_image)
- $background_image ='';
-if (! $item_colour)
- $item_colour = '#f6f6f6';
-if (! $comment_item_colour)
- $comment_item_colour = 'rgb(255,255,255)';
-if (! $item_opacity)
- $item_opacity = '1';
+ $background_image = '';
+
+if (! $background_image_dark)
+ $background_image_dark = '';
+
if (! $font_size)
$font_size = '0.875rem';
-if (! $font_colour)
- $font_colour = '#4d4d4d';
+
if (! $radius)
$radius = '0.375rem';
-if (! $shadow)
- $shadow = '0';
+
if (! $converse_width)
$converse_width = '52'; //unit: rem
+
if(! $top_photo)
$top_photo = '2.3rem';
+
if(! $reply_photo)
$reply_photo = '2.3rem';
@@ -116,10 +121,6 @@ if(file_exists('view/theme/redbasic/css/style.css')) {
$x = file_get_contents('view/theme/redbasic/css/style.css');
- if($schema === 'dark' && file_exists('view/theme/redbasic/schema/bootstrap-nightfall.css')) {
- $x .= file_get_contents('view/theme/redbasic/schema/bootstrap-nightfall.css');
- }
-
if($narrow_navbar && file_exists('view/theme/redbasic/css/narrow_navbar.css')) {
$x .= file_get_contents('view/theme/redbasic/css/narrow_navbar.css');
}
@@ -128,8 +129,8 @@ if(file_exists('view/theme/redbasic/css/style.css')) {
$x .= $schemecss;
}
- $left_aside_width = 21; //unit: rem
- $right_aside_width = 21; //unit: rem
+ $left_aside_width = 22; //unit: rem
+ $right_aside_width = 22; //unit: rem
$main_width = $left_aside_width + $right_aside_width + intval($converse_width);
@@ -138,19 +139,17 @@ if(file_exists('view/theme/redbasic/css/style.css')) {
$options = array (
'$nav_bg' => $nav_bg,
- '$nav_icon_colour' => $nav_icon_colour,
- '$nav_active_icon_colour' => $nav_active_icon_colour,
- '$link_colour' => $link_colour,
- '$link_hover_colour' => $link_hover_colour,
- '$banner_colour' => $banner_colour,
- '$bgcolour' => $bgcolour,
+ '$nav_bg_dark' => $nav_bg_dark,
+ '$link_color' => $link_color,
+ '$link_color_dark' => $link_color_dark,
+ '$link_hover_color' => $link_hover_color,
+ '$link_hover_color_dark' => $link_hover_color_dark,
+ '$bgcolor' => $bgcolor,
+ '$bgcolor_dark' => $bgcolor_dark,
'$background_image' => $background_image,
- '$item_colour' => $item_colour,
- '$comment_item_colour' => $comment_item_colour,
+ '$background_image_dark' => $background_image_dark,
'$font_size' => $font_size,
- '$font_colour' => $font_colour,
'$radius' => $radius,
- '$shadow' => $shadow,
'$converse_width' => $converse_width,
'$top_photo' => $top_photo,
'$reply_photo' => $reply_photo,
@@ -159,7 +158,7 @@ if(file_exists('view/theme/redbasic/css/style.css')) {
'$right_aside_width' => $right_aside_width
);
- echo str_replace(array_keys($options), array_values($options), $x);
+ echo strtr($x, $options);
}
diff --git a/view/theme/redbasic/php/theme.php b/view/theme/redbasic/php/theme.php
index fefd7d26c..b7e08705c 100644
--- a/view/theme/redbasic/php/theme.php
+++ b/view/theme/redbasic/php/theme.php
@@ -9,10 +9,31 @@
* * Author: Fabrixxm
* * Maintainer: Mike Macgirvin
* * Maintainer: Mario Vavti
- * * Theme_Color: #343a40
+ * * Theme_Color: rgb(248, 249, 250)
* * Background_Color: rgb(254,254,254)
*/
+
function redbasic_init(&$a) {
+ $mode = '';
+ $navbar_mode = '';
+
+ if (local_channel()) {
+ $mode = ((get_pconfig(local_channel(), 'redbasic', 'dark_mode')) ? 'dark' : 'light');
+ $navbar_mode = ((get_pconfig(local_channel(), 'redbasic', 'navbar_dark_mode')) ? 'dark' : 'light');
+ }
+
+ if (App::$profile_uid) {
+ $mode = ((get_pconfig(App::$profile_uid, 'redbasic', 'dark_mode')) ? 'dark' : 'light');
+ $navbar_mode = ((get_pconfig(App::$profile_uid, 'redbasic', 'navbar_dark_mode')) ? 'dark' : 'light');
+ }
+
+ if (!$mode) {
+ $mode = ((get_config('redbasic', 'dark_mode')) ? 'dark' : 'light');
+ $navbar_mode = ((get_config('redbasic', 'navbar_dark_mode')) ? 'dark' : 'light');
+ }
+
+ App::$page['color_mode'] = 'data-bs-theme="' . $mode . '"';
+ App::$page['navbar_color_mode'] = (($navbar_mode === 'dark') ? 'data-bs-theme="' . $navbar_mode . '"' : '');
}
diff --git a/view/theme/redbasic/schema/Focus-Boxy.css b/view/theme/redbasic/schema/Focus-Boxy.css
index 1b09137a9..e9fa0381d 100644
--- a/view/theme/redbasic/schema/Focus-Boxy.css
+++ b/view/theme/redbasic/schema/Focus-Boxy.css
@@ -2,8 +2,8 @@
padding-left: 3rem;
}
-.wall-item-content-wrapper {
- border-bottom: 1px solid rgba(0,0,0,.125);
+.wall-item-content-wrapper.comment {
+ border-bottom: 1px solid var(--bs-border-color);
}
.hide-comments-outer,
@@ -12,7 +12,7 @@
}
.widget {
- border: 1px solid rgba(0,0,0,.125);
+ border: 1px solid var(--bs-border-color);
}
#note-text {
@@ -20,7 +20,7 @@
}
.vcard-card {
- border: 1px solid rgba(0,0,0,.125);
+ border: 1px solid var(--bs-border-color);
border-bottom: 0;
}
@@ -31,7 +31,7 @@
}
.vcard-card .vcard {
- border: 1px solid rgba(0,0,0,.125);
+ border: 1px solid var(--bs-border-color);
border-top: 0;
border-right: 0;
border-left: 0;
diff --git a/view/theme/redbasic/schema/Focus-Light.css b/view/theme/redbasic/schema/Focus-Light.css
deleted file mode 100644
index 7289acffe..000000000
--- a/view/theme/redbasic/schema/Focus-Light.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.dropdown-header.text-white-50,
-.navbar-dark .navbar-toggler,
-.navbar-dark .nav-link.active {
- color: rgba(0,0,0,0.7) !important;
-}
diff --git a/view/theme/redbasic/schema/Focus-Light.php b/view/theme/redbasic/schema/Focus-Light.php
deleted file mode 100644
index 8a542d1b8..000000000
--- a/view/theme/redbasic/schema/Focus-Light.php
+++ /dev/null
@@ -1,13 +0,0 @@
-<?php
-
- if (! $nav_bg)
- $nav_bg = "#f8f9fa";
- if (! $nav_icon_colour)
- $nav_icon_colour = "rgba(0, 0, 0, 0.5)";
- if (! $nav_active_icon_colour)
- $nav_active_icon_colour = "rgba(0, 0, 0, 0.7)";
- if (! $radius)
- $radius = "4px";
- if (! $banner_colour)
- $banner_colour = "rgba(0, 0, 0, 0.7)";
-
diff --git a/view/theme/redbasic/schema/dark.css b/view/theme/redbasic/schema/dark.css
deleted file mode 100644
index bc1a84ec8..000000000
--- a/view/theme/redbasic/schema/dark.css
+++ /dev/null
@@ -1,51 +0,0 @@
-
-:root {
- color-scheme: dark;
- --bs-dark-rgb: #e1e1e1;
- --bs-border-color: rgba(250, 250, 250, 0.125);
- --bs-body-bg: #111;
-}
-
-.widget,
-.vcard-card {
- background-color: unset;
-}
-
-.comment-edit-text {
- border: 1px solid var(--bs-border-color);
-}
-
-.generic-content-wrapper {
- border: 1px solid var(--bs-border-color);
-}
-
-#profile-jot-wrapper {
- background-color: unset;
- border: 1px solid var(--bs-border-color);
-}
-
-.bootstrap-tagsinput {
- background-color: unset;
-}
-
-a,
-.fakelink {
- color: var(--bs-link-color);
-}
-.item-category {
- background-color: #293a4f !important;
-}
-#cboxContent {
- background-color: #273039;
-}
-#jot-title-wrap,
-#jot-summary-wrap,
-#jot-pagetitle-wrap,
-#jot-category-wrap,
-#jot-customjotheaders-wrap {
- border-bottom: 1px solid var(--bs-border-color);
-}
-#adminpage table tr:hover {
- background-color: #2E3136;
-}
-
diff --git a/view/theme/redbasic/schema/dark.php b/view/theme/redbasic/schema/dark.php
deleted file mode 100644
index cd9653a23..000000000
--- a/view/theme/redbasic/schema/dark.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
- if (! $nav_bg)
- $nav_bg = "#000";
- if (! $nav_gradient_top)
- $nav_gradient_top = "#000";
- if (! $nav_gradient_bottom)
- $nav_gradient_bottom = "#000";
- if (! $nav_active_gradient_top)
- $nav_active_gradient_top = "#333";
- if (! $nav_active_gradient_bottom)
- $nav_active_gradient_bottom = "#111";
- if (! $nav_bd)
- $nav_bd = "#111";
- if (! $nav_icon_colour)
- $nav_icon_colour = "#999";
- if (! $nav_active_icon_colour)
- $nav_active_icon_colour = "#fff";
- if (! $link_colour)
- $link_colour = "#5f7b99;";
- if (! $link_hover_colour)
- $link_hover_colour = "#4b6b8c";
- if (! $banner_colour)
- $banner_colour = "#999";
- if (! $bgcolour)
- $bgcolour = "#111";
- if (! $item_colour)
- $item_colour = "rgba(28,28,28,0.8)";
- if (! $comment_item_colour)
- $comment_item_colour = "rgba(18,18,18,0.4)";
- if (! $comment_border_colour)
- $comment_border_colour = "rgba(28,28,28,0.8)";
- if (! $toolicon_colour)
- $toolicon_colour = '#999';
- if (! $toolicon_activecolour)
- $toolicon_activecolour = '#fff';
- if (! $font_colour)
- $font_colour = "#ccc";
- if (! $converse_width)
- $converse_width = '52'; //unit: rem;
-
-
-
diff --git a/view/theme/redbasic/tpl/theme_settings.tpl b/view/theme/redbasic/tpl/theme_settings.tpl
index 65b3a7883..6bf1666ed 100644
--- a/view/theme/redbasic/tpl/theme_settings.tpl
+++ b/view/theme/redbasic/tpl/theme_settings.tpl
@@ -1,32 +1,33 @@
+{{include file="field_checkbox.tpl" field=$dark_mode}}
{{include file="field_checkbox.tpl" field=$narrow_navbar}}
{{include file="field_input.tpl" field=$converse_width}}
{{include file="field_input.tpl" field=$font_size}}
{{include file="field_checkbox.tpl" field=$advanced_theming}}
+
{{if $expert}}
+ <h3>{{$light}}</h3>
+ {{include file="field_checkbox.tpl" field=$navbar_dark_mode}}
{{include file="field_colorinput.tpl" field=$nav_bg}}
- {{include file="field_colorinput.tpl" field=$nav_icon_colour}}
- {{include file="field_colorinput.tpl" field=$nav_active_icon_colour}}
- {{include file="field_colorinput.tpl" field=$banner_colour}}
- {{include file="field_colorinput.tpl" field=$bgcolour}}
+ {{include file="field_colorinput.tpl" field=$bgcolor}}
{{include file="field_colorinput.tpl" field=$background_image}}
- {{include file="field_colorinput.tpl" field=$item_colour}}
- {{include file="field_colorinput.tpl" field=$comment_item_colour}}
- {{*include file="field_colorinput.tpl" field=$comment_border_colour*}}
- {{*include file="field_input.tpl" field=$comment_indent*}}
- {{include file="field_colorinput.tpl" field=$font_colour}}
- {{include file="field_colorinput.tpl" field=$link_colour}}
- {{include file="field_colorinput.tpl" field=$link_hover_colour}}
+ {{include file="field_colorinput.tpl" field=$link_color}}
+ {{include file="field_colorinput.tpl" field=$link_hover_color}}
+
+ <h3>{{$dark}}</h3>
+ {{include file="field_colorinput.tpl" field=$nav_bg_dark}}
+ {{include file="field_colorinput.tpl" field=$bgcolor_dark}}
+ {{include file="field_colorinput.tpl" field=$background_image_dark}}
+ {{include file="field_colorinput.tpl" field=$link_color_dark}}
+ {{include file="field_colorinput.tpl" field=$link_hover_color_dark}}
+
+ <h3>{{$common}}</h3>
{{include file="field_input.tpl" field=$radius}}
- {{include file="field_input.tpl" field=$shadow}}
{{include file="field_input.tpl" field=$top_photo}}
{{include file="field_input.tpl" field=$reply_photo}}
<script>
$(function(){
- $('#id_redbasic_nav_bg, #id_redbasic_nav_icon_colour, #id_redbasic_nav_active_icon_colour, #id_redbasic_banner_colour').colorpicker({format: 'rgba'});
- $('#id_redbasic_link_colour,#id_redbasic_link_hover_colour,#id_redbasic_background_colour').colorpicker();
- $('#id_redbasic_toolicon_colour,#id_redbasic_toolicon_activecolour,#id_redbasic_font_colour').colorpicker();
- $('#id_redbasic_item_colour,#id_redbasic_comment_item_colour,#id_redbasic_comment_border_colour').colorpicker({format: 'rgba'});
+ $('#id_redbasic_link_color, #id_redbasic_link_color_dark, #id_redbasic_link_hover_color, #id_redbasic_link_hover_color_dark, #id_redbasic_background_color, #id_redbasic_background_color_dark, #id_redbasic_nav_bg, #id_redbasic_nav_bg_dark').colorpicker({format: 'rgba'});
});
</script>
{{/if}}
diff --git a/view/tpl/cal_calendar.tpl b/view/tpl/cal_calendar.tpl
index a928e98f6..68ec318bd 100644
--- a/view/tpl/cal_calendar.tpl
+++ b/view/tpl/cal_calendar.tpl
@@ -4,7 +4,7 @@ var calendar;
$(document).ready(function() {
var calendarEl = document.getElementById('calendar');
calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'dayGrid' ],
+
eventSources: [ {{$sources}} ],
timeZone: '{{$timezone}}',
@@ -12,16 +12,12 @@ $(document).ready(function() {
locale: '{{$lang}}',
eventTextColor: 'white',
- header: false,
+ headerToolbar: false,
height: 'auto',
firstDay: {{$first_day}},
- monthNames: aStr['monthNames'],
- monthNamesShort: aStr['monthNamesShort'],
- dayNames: aStr['dayNames'],
- dayNamesShort: aStr['dayNamesShort'],
allDayText: aStr['allday'],
eventClick: function(info) {
diff --git a/view/tpl/cdav_calendar.tpl b/view/tpl/cdav_calendar.tpl
index 2d6853513..edfa2a422 100644
--- a/view/tpl/cdav_calendar.tpl
+++ b/view/tpl/cdav_calendar.tpl
@@ -14,15 +14,12 @@ var contact_deny = [];
var group_deny = [];
var resource = {{$resource}};
-var default_view = resource !== null ? 'timeGridDay' : 'dayGridMonth';
-var default_date = resource !== null ? new Date(resource.dtstart) : new Date();
-
var allday;
$(document).ready(function() {
var calendarEl = document.getElementById('calendar');
calendar = new FullCalendar.Calendar(calendarEl, {
- plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
+
eventSources: [ {{$sources}} ],
timeZone: '{{$timezone}}',
@@ -30,15 +27,12 @@ $(document).ready(function() {
locale: '{{$lang}}',
eventTextColor: 'white',
- header: false,
+ headerToolbar: false,
height: 'auto',
firstDay: {{$first_day}},
- defaultView: default_view,
- defaultDate: default_date,
-
weekNumbers: true,
navLinks: true,
@@ -52,10 +46,6 @@ $(document).ready(function() {
changeView('timeGridWeek');
},
- monthNames: aStr['monthNames'],
- monthNamesShort: aStr['monthNamesShort'],
- dayNames: aStr['dayNames'],
- dayNamesShort: aStr['dayNamesShort'],
allDayText: aStr['allday'],
snapDuration: '00:05:00',
@@ -380,11 +370,8 @@ $(document).ready(function() {
$('#event_submit').html('{{$update}}');
}
- if(default_view === 'dayGridMonth');
- $('#id_dtstart_wrapper, #id_dtend_wrapper, #id_timezone_select_wrapper').hide();
});
-
function changeView(viewName) {
calendar.changeView(viewName);
diff --git a/view/tpl/cdav_widget_calendar.tpl b/view/tpl/cdav_widget_calendar.tpl
index c27f4789e..b076a3320 100644
--- a/view/tpl/cdav_widget_calendar.tpl
+++ b/view/tpl/cdav_widget_calendar.tpl
@@ -3,9 +3,9 @@
{{foreach $channel_calendars as $channel_calendar}}
<div id="calendar-{{$channel_calendar.calendarid}}">
<div class="ml-3{{if !$channel_calendar@last}} mb-3{{/if}}">
- <i id="calendar-btn-{{$channel_calendar.calendarid}}" class="fa {{if $channel_calendar.switch}}fa-calendar-check-o{{else}}fa-calendar-o{{/if}} generic-icons fakelink" onclick="add_remove_json_source('{{$channel_calendar.json_source}}', '{{$channel_calendar.color}}', {{$channel_calendar.editable}})" style="color: {{$channel_calendar.color}};"></i>{{$channel_calendar.displayname}}
+ <i id="calendar-btn-{{$channel_calendar.calendarid}}" class="fa {{if $channel_calendar.switch}}fa-calendar-check-o{{else}}fa-calendar-o{{/if}} generic-icons cursor-pointer" onclick="add_remove_json_source('{{$channel_calendar.json_source}}', '{{$channel_calendar.color}}', {{$channel_calendar.editable}})" style="color: {{$channel_calendar.color}};"></i>{{$channel_calendar.displayname}}
<div class="float-end">
- <a href="#" onclick="exportDate(); return false;"><i id="download-icon" class="fa fa-cloud-download fakelink generic-icons-right"></i></a>
+ <a class="text-reset" href="#" onclick="exportDate(); return false;"><i id="download-icon" class="fa fa-cloud-download cursor-pointer generic-icons-right"></i></a>
</div>
</div>
</div>
@@ -18,12 +18,12 @@
{{foreach $my_calendars as $calendar}}
<div id="calendar-{{$calendar.calendarid}}">
<div class="ml-3{{if !$calendar@last}} mb-3{{/if}}">
- <i id="calendar-btn-{{$calendar.calendarid}}" class="fa {{if $calendar.switch}}fa-calendar-check-o{{else}}fa-calendar-o{{/if}} generic-icons fakelink" onclick="add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}})" style="color: {{$calendar.color}};"></i>{{$calendar.displayname}}
+ <i id="calendar-btn-{{$calendar.calendarid}}" class="fa {{if $calendar.switch}}fa-calendar-check-o{{else}}fa-calendar-o{{/if}} generic-icons cursor-pointer" onclick="add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}})" style="color: {{$calendar.color}};"></i>{{$calendar.displayname}}
<div class="float-end">
- <i id="edit-icon" class="fa fa-pencil fakelink generic-icons" onclick="openClose('edit-calendar-{{$calendar.calendarid}}')"></i>
- <a href="/cdav/calendars/{{$calendar.ownernick}}/{{$calendar.uri}}/?export"><i id="download-icon" class="fa fa-cloud-download fakelink generic-icons"></i></a>
- <i id="share-icon" class="fa fa-share-alt fakelink generic-icons" onclick="openClose('share-calendar-{{$calendar.calendarid}}')"></i>
- <a href="#" onclick="var drop = dropItem('/cdav/calendar/drop/{{$calendar.calendarid}}/{{$calendar.instanceid}}', '#calendar-{{$calendar.calendarid}}'); if(drop) { add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}}, 'drop'); } return false;"><i class="fa fa-trash-o drop-icons"></i></a>
+ <i id="edit-icon" class="fa fa-pencil cursor-pointer generic-icons" onclick="openClose('edit-calendar-{{$calendar.calendarid}}')"></i>
+ <a class="text-reset" href="/cdav/calendars/{{$calendar.ownernick}}/{{$calendar.uri}}/?export"><i id="download-icon" class="fa fa-cloud-download cursor-pointer generic-icons"></i></a>
+ <i id="share-icon" class="fa fa-share-alt cursor-pointer generic-icons" onclick="openClose('share-calendar-{{$calendar.calendarid}}')"></i>
+ <a class="text-reset" href="#" onclick="var drop = dropItem('/cdav/calendar/drop/{{$calendar.calendarid}}/{{$calendar.instanceid}}', '#calendar-{{$calendar.calendarid}}'); if(drop) { add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}}, 'drop'); } return false;"><i class="fa fa-trash-o drop-icons"></i></a>
</div>
<div id="share-calendar-{{$calendar.calendarid}}" class="sub-menu" style="display: none; border-color: {{$calendar.color}};">
{{if $calendar.sharees}}
@@ -31,7 +31,7 @@
<div id="sharee-{{$calendar.calendarid}}-{{$sharee@iteration}}" class="mb-3">
<i class="fa fa-share generic-icons"></i>{{$sharee.name}}&nbsp;{{$sharee.access}}
<div class="float-end">
- <a href="#" onclick="dropItem('/cdav/calendar/dropsharee/{{$calendar.calendarid}}/{{$calendar.instanceid}}/{{$sharee.hash}}', '#sharee-{{$calendar.calendarid}}-{{$sharee@iteration}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a>
+ <a class="text-reset" href="#" onclick="dropItem('/cdav/calendar/dropsharee/{{$calendar.calendarid}}/{{$calendar.instanceid}}/{{$sharee.hash}}', '#sharee-{{$calendar.calendarid}}-{{$sharee@iteration}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a>
</div>
</div>
{{/foreach}}
@@ -80,10 +80,10 @@
<h3>{{$shared_calendars_label}}</h3>
{{foreach $shared_calendars as $calendar}}
<div id="shared-calendar-{{$calendar.calendarid}}" class="ml-3{{if !$calendar@last}} mb-3{{/if}}">
- <i id="calendar-btn-{{$calendar.calendarid}}" class="fa {{if $calendar.switch}}{{if $calendar.access == 'read-write'}}fa-calendar-check-o{{else}}fa-calendar-times-o{{/if}}{{else}}fa-calendar-o{{/if}} generic-icons fakelink" onclick="add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}}, {{if $calendar.access == 'read-write'}}'fa-calendar-check-o'{{else}}'fa-calendar-times-o'{{/if}})" style="color: {{$calendar.color}};"></i>{{$calendar.displayname}} ({{$calendar.sharer}})
+ <i id="calendar-btn-{{$calendar.calendarid}}" class="fa {{if $calendar.switch}}{{if $calendar.access == 'read-write'}}fa-calendar-check-o{{else}}fa-calendar-times-o{{/if}}{{else}}fa-calendar-o{{/if}} generic-icons cursor-pointer" onclick="add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}}, {{if $calendar.access == 'read-write'}}'fa-calendar-check-o'{{else}}'fa-calendar-times-o'{{/if}})" style="color: {{$calendar.color}};"></i>{{$calendar.displayname}} ({{$calendar.sharer}})
<div class="float-end">
- <a href="/cdav/calendars/{{$calendar.ownernick}}/{{$calendar.uri}}/?export"><i id="download-icon" class="fa fa-cloud-download fakelink generic-icons"></i></a>
- <a href="#" onclick="var drop = dropItem('/cdav/calendar/drop/{{$calendar.calendarid}}/{{$calendar.instanceid}}', '#shared-calendar-{{$calendar.calendarid}}'); if(drop) { add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}}, 'drop'); } return false;"><i class="fa fa-trash-o drop-icons"></i></a>
+ <a class="text-reset" href="/cdav/calendars/{{$calendar.ownernick}}/{{$calendar.uri}}/?export"><i id="download-icon" class="fa fa-cloud-download cursor-pointer generic-icons"></i></a>
+ <a class="text-reset" href="#" onclick="var drop = dropItem('/cdav/calendar/drop/{{$calendar.calendarid}}/{{$calendar.instanceid}}', '#shared-calendar-{{$calendar.calendarid}}'); if(drop) { add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}}, 'drop'); } return false;"><i class="fa fa-trash-o drop-icons"></i></a>
</div>
</div>
{{/foreach}}
@@ -94,7 +94,7 @@
<h3>{{$tools_label}}</h3>
<div class="nav nav-pills flex-column">
<li class="nav-item">
- <a class="nav-link" href="#" onclick="openClose('create-calendar'); return false;"><i class="fa fa-calendar-plus-o generic-icons"></i> {{$create_label}}</a>
+ <a class="nav-link text-reset" href="#" onclick="openClose('create-calendar'); return false;"><i class="fa fa-calendar-plus-o generic-icons"></i> {{$create_label}}</a>
</li>
<div id="create-calendar" class="sub-menu-wrapper">
<div class="sub-menu">
@@ -111,7 +111,7 @@
</div>
</div>
<li class="nav-item">
- <a class="nav-link" href="#" onclick="openClose('upload-form'); return false;"><i class="fa fa-cloud-upload generic-icons"></i> {{$import_label}}</a>
+ <a class="nav-link text-reset" href="#" onclick="openClose('upload-form'); return false;"><i class="fa fa-cloud-upload generic-icons"></i> {{$import_label}}</a>
</li>
<div id="upload-form" class="sub-menu-wrapper">
<div class="sub-menu">
diff --git a/view/tpl/channel_activities.tpl b/view/tpl/channel_activities.tpl
index 242fc519a..3ec37e235 100644
--- a/view/tpl/channel_activities.tpl
+++ b/view/tpl/channel_activities.tpl
@@ -5,8 +5,8 @@
{{foreach $items as $i}}
<div class="col">
<div class="card">
- <a href="{{$i.url}}" class="text-dark">
- <div class="card-body">
+ <a href="{{$i.url}}" class="text-reset">
+ <div class="card-body clearfix">
{{if $i.title}}
<strong>{{$i.title}}</strong>
<hr>
diff --git a/view/tpl/cloud_directory.tpl b/view/tpl/cloud_directory.tpl
index a851eb203..587adaeea 100644
--- a/view/tpl/cloud_directory.tpl
+++ b/view/tpl/cloud_directory.tpl
@@ -175,7 +175,7 @@
{{if $is_owner}}
<a id="cloud-tool-share-btn-{{$item.attach_id}}" class="dropdown-item cloud-tool-share-btn" href="/rpost?attachment=[attachment]{{$item.resource}},{{$item.revision}}[/attachment]&acl[allow_cid]={{$item.raw_allow_cid}}&acl[allow_gid]={{$item.raw_allow_gid}}&acl[deny_cid]={{$item.raw_deny_cid}}&acl[deny_gid]={{$item.raw_deny_gid}}" data-id="{{$item.attach_id}}"><i class="fa fa-fw fa-share-square-o"></i> {{$post_label}}</a>
{{/if}}
- <a id="cloud-tool-download-btn-{{$item.attach_id}}" class="dropdown-item cloud-tool-download-btn" href="/attach/{{$item.resource}}" data-id="{{$item.attach_id}}"><i class="fa fa-fw fa-cloud-download"></i> {{$download_label}}</a>
+ <a download="{{$item.name}}" id="cloud-tool-download-btn-{{$item.attach_id}}" class="dropdown-item cloud-tool-download-btn" href="/attach/{{$item.resource}}" data-id="{{$item.attach_id}}"><i class="fa fa-fw fa-cloud-download"></i> {{$download_label}}</a>
{{/if}}
<a id="cloud-tool-delete-btn-{{$item.attach_id}}" class="dropdown-item cloud-tool-delete-btn" href="#" data-id="{{$item.attach_id}}"><i class="fa fa-fw fa-trash-o"></i> {{$delete_label}}</a>
</div>
diff --git a/view/tpl/connections.tpl b/view/tpl/connections.tpl
index 5fec38a84..5fb6b0007 100644
--- a/view/tpl/connections.tpl
+++ b/view/tpl/connections.tpl
@@ -22,6 +22,7 @@
<form action="{{$cmd}}" method="get" name="contacts-search-form">
<div class="input-group mb-3">
<input type="text" name="search" id="contacts-search" class="form-control" onfocus="this.select();" value="{{$search}}" placeholder="{{$desc}}" />
+ <input type="hidden" name="search_xchan" id="contacts-search-xchan" value=""/>
<button id="contacts-search-submit" class="btn btn-primary" type="submit"><i class="fa fa-fw fa-search"></i></button>
</div>
</form>
diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl
index 47261d070..3f760998d 100644
--- a/view/tpl/conv_item.tpl
+++ b/view/tpl/conv_item.tpl
@@ -26,14 +26,33 @@
<hr class="m-0">
{{/if}}
{{/if}}
- <div class="p-2 clearfix wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}}" >
- {{if $item.thr_parent}}
- <a href="javascript:doscroll('{{$item.thr_parent}}',{{$item.parent}});" title="{{$item.top_hint}}" class="float-end"><i class="fa fa-angle-double-up">&nbsp;&nbsp;&nbsp;</i></a>
- {{/if}}
- {{if $item.pinned}}
- <span class="float-end wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="fa fa-thumb-tack">&nbsp;</i></span>
- {{/if}}
- <div class="wall-item-info" id="wall-item-info-{{$item.id}}" >
+ <div class="p-2 wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}}" >
+ <div class="text-end float-end">
+ <div class="wall-item-ago opacity-75" id="wall-item-ago-{{$item.id}}">
+ {{if $item.editedtime}}
+ <i class="fa fa-pencil"></i>
+ {{/if}}
+ {{if $item.delayed}}
+ <i class="fa fa-clock-o"></i>
+ {{/if}}
+ {{if $item.location}}
+ <small class="wall-item-location p-location" id="wall-item-location-{{$item.id}}">{{$item.location}}</small>
+ {{/if}}
+ {{if $item.verified}}
+ <i class="fa fa-check text-success" title="{{$item.verified}}"></i>
+ {{elseif $item.forged}}
+ <i class="fa fa-exclamation text-danger" title="{{$item.forged}}"></i>
+ {{/if}}
+ <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</small>
+ </div>
+ {{if $item.thr_parent}}
+ <a href="javascript:doscroll('{{$item.thr_parent}}',{{$item.parent}});" class="ms-3" title="{{$item.top_hint}}"><i class="fa fa-angle-double-up"></i></a>
+ {{/if}}
+ {{if $item.pinned}}
+ <div class="wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="fa fa-thumb-tack"></i></div>
+ {{/if}}
+ </div>
+ <div class="float-start wall-item-info pe-2" id="wall-item-info-{{$item.id}}" >
<div class="wall-item-photo-wrapper{{if $item.owner_url}} wwfrom{{/if}} h-card p-author" id="wall-item-photo-wrapper-{{$item.id}}">
{{if $item.contact_id}}
<div class="spinner-wrapper contact-edit-rotator contact-edit-rotator-{{$item.contact_id}}"><div class="spinner s"></div></div>
@@ -52,18 +71,17 @@
{{/if}}
</div>
</div>
- {{if $item.lock}}
- <div class="wall-item-lock dropdown">
- <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else if $item.locktype == 1}}fa-lock{{else}}fa-unlock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-bs-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
- <div id="panel-{{$item.id}}" class="dropdown-menu"></div>
- </div>
- {{/if}}
<div class="wall-item-author">
- {{if $item.previewing}}<span class="preview-indicator"><i class="fa fa-eye" title="{{$item.preview_lbl}}"></i></span>&nbsp;{{/if}}
- <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link u-url"><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" ><bdi>{{$item.name}}</bdi></span></a>{{if $item.owner_url}}&nbsp;{{$item.via}}&nbsp;<a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}"><bdi>{{$item.owner_name}}</bdi></span></a>{{/if}}
- </div>
- <div class="wall-item-ago" id="wall-item-ago-{{$item.id}}">
- {{if $item.verified}}<i class="fa fa-check item-verified" title="{{$item.verified}}"></i>&nbsp;{{elseif $item.forged}}<i class="fa fa-exclamation item-forged" title="{{$item.forged}}"></i>&nbsp;{{/if}}{{if $item.location}}<span class="wall-item-location p-location" id="wall-item-location-{{$item.id}}">{{$item.location}},&nbsp;</span>{{/if}}<span class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</span>&nbsp;{{if $item.delayed}}<i class="fa fa-clock-o"></i>{{/if}}{{if $item.editedtime}}&nbsp;<i class="fa fa-pencil"></i>{{/if}}&nbsp;{{if $item.app}}<span class="item.app">{{$item.str_app}}</span>{{/if}}
+ {{if $item.lock}}
+ <div class="float-start dropdown wall-item-lock">
+ <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else if $item.locktype == 1}}fa-lock{{else}}fa-unlock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-bs-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
+ <div id="panel-{{$item.id}}" class="dropdown-menu"></div>
+ </div>
+ {{/if}}
+ <div class="text-truncate">
+ <a href="{{$item.profile_url}}" class="lh-sm wall-item-name-link u-url"{{if $item.app}} title="{{$item.str_app}}"{{/if}}><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" ><bdi>{{$item.name}}</bdi></span></a>{{if $item.owner_url}}&nbsp;{{$item.via}}&nbsp;<a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}"><bdi>{{$item.owner_name}}</bdi></span></a>{{/if}}
+ </div>
+ <small class="lh-sm text-truncate d-block wall-item-addr opacity-75">{{$item.author_id}}</small>
</div>
</div>
{{if $item.divider}}
diff --git a/view/tpl/conv_list.tpl b/view/tpl/conv_list.tpl
index fde78e71e..0024ec382 100644
--- a/view/tpl/conv_list.tpl
+++ b/view/tpl/conv_list.tpl
@@ -26,13 +26,38 @@
<hr class="m-0">
{{/if}}
{{/if}}
- <div class="p-2 clearfix wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}}">
- <div class="wall-item-info" id="wall-item-info-{{$item.id}}" >
+ <div class="p-2 wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}}" >
+ <div class="text-end float-end">
+ <div class="wall-item-ago opacity-75" id="wall-item-ago-{{$item.id}}">
+ {{if $item.editedtime}}
+ <i class="fa fa-pencil"></i>
+ {{/if}}
+ {{if $item.delayed}}
+ <i class="fa fa-clock-o"></i>
+ {{/if}}
+ {{if $item.location}}
+ <small class="wall-item-location p-location" id="wall-item-location-{{$item.id}}">{{$item.location}}</small>
+ {{/if}}
+ {{if $item.verified}}
+ <i class="fa fa-check text-success" title="{{$item.verified}}"></i>
+ {{elseif $item.forged}}
+ <i class="fa fa-exclamation text-danger" title="{{$item.forged}}"></i>
+ {{/if}}
+ <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</small>
+ </div>
+ {{if $item.thr_parent}}
+ <a href="javascript:doscroll('{{$item.thr_parent}}',{{$item.parent}});" class="ms-3" title="{{$item.top_hint}}"><i class="fa fa-angle-double-up"></i></a>
+ {{/if}}
+ {{if $item.pinned}}
+ <div class="wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="fa fa-thumb-tack"></i></div>
+ {{/if}}
+ </div>
+ <div class="float-start wall-item-info pe-2" id="wall-item-info-{{$item.id}}" >
<div class="wall-item-photo-wrapper{{if $item.owner_url}} wwfrom{{/if}} h-card p-author" id="wall-item-photo-wrapper-{{$item.id}}">
{{if $item.contact_id}}
<div class="spinner-wrapper contact-edit-rotator contact-edit-rotator-{{$item.contact_id}}"><div class="spinner s"></div></div>
{{/if}}
- <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" data-bs-toggle="dropdown" loading="lazy" /></a>
+ <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" loading="lazy" data-bs-toggle="dropdown" />
{{if $item.author_is_group_actor}}
<i class="fa fa-comments-o wall-item-photo-group-actor" title="{{$item.author_is_group_actor}}"></i>
{{/if}}
@@ -40,27 +65,28 @@
<i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-bs-toggle="dropdown"></i>
<div class="dropdown-menu">
{{foreach $item.thread_author_menu as $mitem}}
- <a class="dropdown-item" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}} >{{$mitem.title}}</a>
+ <a class="dropdown-item{{if $mitem.class}} {{$mitem.class}}{{/if}}" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}}{{if $mitem.data}} {{$mitem.data}}{{/if}}>{{$mitem.title}}</a>
{{/foreach}}
-
</div>
{{/if}}
</div>
</div>
- {{if $item.lock}}
- <div class="wall-item-lock dropdown">
- <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else if $item.locktype == 1}}fa-lock{{else}}fa-unlock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-bs-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
- <div id="panel-{{$item.id}}" class="dropdown-menu"></div>
- </div>
- {{/if}}
<div class="wall-item-author">
- <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link u-url"><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" ><bdi>{{$item.name}}</bdi></span></a>{{if $item.owner_url}}&nbsp;{{$item.via}}&nbsp;<a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}"><bdi>{{$item.owner_name}}</bdi></span></a>{{/if}}
- </div>
- <div class="wall-item-ago" id="wall-item-ago-{{$item.id}}">
- {{if $item.verified}}<i class="fa fa-check item-verified" title="{{$item.verified}}"></i>&nbsp;{{elseif $item.forged}}<i class="fa fa-exclamation item-forged" title="{{$item.forged}}"></i>&nbsp;{{/if}}{{if $item.location}}<span class="wall-item-location p-location" id="wall-item-location-{{$item.id}}">{{$item.location}},&nbsp;</span>{{/if}}<span class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</span>{{if $item.editedtime}}&nbsp;<i class="fa fa-pencil"></i>{{/if}}&nbsp;{{if $item.app}}<span class="item.app">{{$item.str_app}}</span>{{/if}}
+ {{if $item.lock}}
+ <div class="float-start dropdown wall-item-lock">
+ <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else if $item.locktype == 1}}fa-lock{{else}}fa-unlock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-bs-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
+ <div id="panel-{{$item.id}}" class="dropdown-menu"></div>
+ </div>
+ {{/if}}
+ <div class="text-truncate">
+ <a href="{{$item.profile_url}}" class="lh-sm wall-item-name-link u-url"{{if $item.app}} title="{{$item.str_app}}"{{/if}}><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" ><bdi>{{$item.name}}</bdi></span></a>{{if $item.owner_url}}&nbsp;{{$item.via}}&nbsp;<a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}"><bdi>{{$item.owner_name}}</bdi></span></a>{{/if}}
+ </div>
+ <small class="lh-sm text-truncate d-block wall-item-addr opacity-75">{{$item.author_id}}</small>
</div>
</div>
-
+ {{if $item.divider}}
+ <hr class="wall-item-divider">
+ {{/if}}
{{if $item.body}}
<div class="p-2 wall-item-content clearfix" id="wall-item-content-{{$item.id}}">
<div class="wall-item-body e-content" id="wall-item-body-{{$item.id}}" >
diff --git a/view/tpl/messages_widget.tpl b/view/tpl/messages_widget.tpl
index ee933b392..5770abffc 100644
--- a/view/tpl/messages_widget.tpl
+++ b/view/tpl/messages_widget.tpl
@@ -25,34 +25,55 @@
<div id="messages-widget" class="border-start border-end border-bottom overflow-auto mb-3 clearfix" style="height: 70vh;">
<div id="messages-template" rel="template" class="d-none">
<a href="{6}" class="list-group-item list-group-item-action message" data-b64mid="{0}">
- <div class="d-flex w-100 justify-content-between">
- <div class="mb-1 text-truncate" title="{5}">
- {7}
- <strong>{4}</strong>
+ <div class="mb-2">
+ <img src="{9}" loading="lazy" class="rounded menu-img-2">
+ <div class="text-nowrap">
+ <div class="d-flex justify-content-between align-items-center lh-sm">
+ <div class="text-truncate pe-1">
+ {7}
+ <strong title="{4}">{4}</strong>
+ </div>
+ <small class="messages-timeago opacity-75" title="{1}"></small>
+ </div>
+ <div class="text-truncate">
+ <small class="opacity-75" title="{5}">{5}</small>
+ </div>
</div>
- <small class="messages-timeago text-nowrap" title="{1}"></small>
</div>
- <div class="mb-1">
+ <div class="mb-2">
<div class="text-break">{2}</div>
</div>
- <small>{3}</small>
+ <small class="opacity-75">{3}</small>
{8}
</a>
</div>
- <div id="dm-container" class="list-group list-group-flush" data-offset="10">
+ <div id="messages-container" class="list-group list-group-flush" data-offset="10">
+ <div id="messages-author-container" class="list-group-item notifications-textinput">
+ <div class="text-muted notifications-textinput-filter"><i class="fa fa-fw fa-filter"></i></div>
+ <input id="messages-author" type="text" class="form-control form-control-sm" placeholder="{{$strings.filter}}">
+ <div id="messages-author-input-clear" class="text-muted notifications-textinput-clear d-none"><i class="fa fa-times"></i></div>
+ </div>
{{foreach $entries as $e}}
<a href="{{$e.href}}" class="list-group-item list-group-item-action message" data-b64mid="{{$e.b64mid}}">
- <div class="d-flex w-100 justify-content-between">
- <div class="mb-1 text-truncate" title="{{$e.author_addr}}">
- {{$e.icon}}
- <strong>{{$e.author_name}}</strong>
+ <div class="mb-2">
+ <img src="{{$e.author_img}}" loading="lazy" class="rounded menu-img-2">
+ <div class="text-nowrap">
+ <div class="d-flex justify-content-between align-items-center lh-sm">
+ <div class="text-truncate pe-1">
+ {{$e.icon}}
+ <strong title="{{$e.author_name}}">{{$e.author_name}}</strong>
+ </div>
+ <small class="messages-timeago opacity-75" title="{{$e.created}}"></small>
+ </div>
+ <div class="text-truncate">
+ <small class="opacity-75" title="{{$e.author_addr}}">{{$e.author_addr}}</small>
+ </div>
</div>
- <small class="messages-timeago text-nowrap" title="{{$e.created}}"></small>
</div>
- <div class="mb-1">
+ <div class="mb-2">
<div class="text-break">{{$e.summary}}</div>
</div>
- <small>{{$e.info}}</small>
+ <small class="opacity-75">{{$e.info}}</small>
{{if $e.unseen_count}}
<span class="badge bg-transparent border border-{{$e.unseen_class}} text-{{$e.unseen_class}} rounded-pill position-absolute bottom-0 end-0 m-2" title="{{$strings.unseen_count}}">{{$e.unseen_count}}</span>
{{/if}}
@@ -67,15 +88,48 @@
</div>
</div>
<script>
- var messages_offset = {{$offset}};
- var get_messages_page_active = false;
- var messages_type;
+ let messages_offset = {{$offset}};
+ let get_messages_page_active = false;
+ let messages_type;
+ let author_hash;
+ let author_url;
+ let author;
$(document).ready(function () {
$('.messages-timeago').timeago();
if (bParam_mid) {
$('.message[data-b64mid=\'' + bParam_mid + '\']').addClass('active');
}
+
+ $("#messages-author").name_autocomplete(baseurl + '/acl', 'a', false, function(data) {
+ // a workaround to not re-trigger autocomplete after initial click
+ $("#messages-author").val('').attr('placeholder', data.name);
+ $('#textcomplete-dropdown').hide();
+
+ $('#messages-container .message').remove();
+ $('#messages-author-container').addClass('active sticky-top');
+ $('#messages-author-input-clear').removeClass('d-none');
+ author_hash = data.xid;
+ author_url = data.url;
+ author = messages_type === 'notification' ? author_url : author_hash;
+ messages_offset = 0;
+ get_messages_page();
+ });
+
+ $(document).on('click', '#messages-author-input-clear', function() {
+ $('#messages-author').val('');
+ $("#messages-author").attr('placeholder', '{{$strings.filter}}');
+
+ $('#messages-author-container').removeClass('active sticky-top');
+ $('#messages-author-input-clear').addClass('d-none');
+ $('#messages-container .message').remove();
+ author = '';
+ author_hash = '';
+ author_url = '';
+ messages_offset = 0;
+ get_messages_page();
+ });
+
});
$('#messages-widget').on('scroll', function() {
@@ -90,7 +144,8 @@
$(this).addClass('active');
messages_offset = 0;
messages_type = $(this).data('messages_type');
- $('#dm-container .message').remove();
+ author = messages_type === 'notification' ? author_url : author_hash;
+ $('#messages-container .message').remove();
get_messages_page();
});
@@ -111,7 +166,8 @@
url: 'hq',
data: {
offset: messages_offset,
- type: messages_type
+ type: messages_type,
+ author: author
}
}).done(function(obj) {
get_messages_page_active = false;
@@ -129,7 +185,8 @@
e.author_addr,
e.href,
e.icon,
- e.unseen_count ? '<span class="badge bg-transparent border border-' + e.unseen_class + ' text-' + e.unseen_class + ' rounded-pill position-absolute bottom-0 end-0 m-2" title="{{$strings.unseen_count}}">' + e.unseen_count + '</span>' : ''
+ e.unseen_count ? '<span class="badge bg-transparent border border-' + e.unseen_class + ' text-' + e.unseen_class + ' rounded-pill position-absolute bottom-0 end-0 m-2" title="{{$strings.unseen_count}}">' + e.unseen_count + '</span>' : '',
+ e.author_img
);
$('#messages-loading').before(html);
});
@@ -144,5 +201,6 @@
$('.messages-timeago').timeago();
});
+
}
</script>
diff --git a/view/tpl/navbar_default.tpl b/view/tpl/navbar_default.tpl
index 4861c196f..ca61bcb8e 100644
--- a/view/tpl/navbar_default.tpl
+++ b/view/tpl/navbar_default.tpl
@@ -1,14 +1,14 @@
-<nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark">
+<nav class="navbar fixed-top navbar-expand-lg bg-body-tertiary" {{$navbar_color_mode}}>
<div class="container-fluid flex-nowrap">
{{if $userinfo}}
<div class="d-flex" style="max-width: 50%">
<div class="dropdown">
- <div class="fakelink usermenu" data-bs-toggle="dropdown">
+ <div class="cursor-pointer usermenu" data-bs-toggle="dropdown">
<img id="avatar" src="{{$userinfo.icon}}" alt="{{$userinfo.name}}">
- <i class="fa fa-caret-down"></i>
+ <i class="navbar-text fa fa-caret-down"></i>
</div>
{{if $is_owner}}
- <div class="dropdown-menu">
+ <div class="dropdown-menu" {{$color_mode}}>
{{foreach $nav.usermenu as $usermenu}}
<a class="dropdown-item{{if $usermenu.2}} active{{/if}}" href="{{$usermenu.0}}" title="{{$usermenu.3}}" role="menuitem" id="{{$usermenu.4}}">{{$usermenu.1}}</a>
{{/foreach}}
@@ -41,7 +41,7 @@
</div>
{{/if}}
{{if ! $is_owner}}
- <div class="dropdown-menu" role="menu" aria-labelledby="avatar">
+ <div class="dropdown-menu" role="menu" aria-labelledby="avatar" {{$color_mode}}>
<a class="dropdown-item" href="{{$nav.rusermenu.0}}" role="menuitem">{{$nav.rusermenu.1}}</a>
<a class="dropdown-item" href="{{$nav.rusermenu.2}}" role="menuitem">{{$nav.rusermenu.3}}</a>
</div>
@@ -66,7 +66,7 @@
{{/if}}
</div>
{{else}}
- <div id="banner" class="navbar-text d-lg-none">{{$banner}}</div>
+ <div class="navbar-text d-lg-none navbar-banner">{{$banner}}</div>
{{/if}}
<div class="navbar-toggler-right">
{{if $nav.help.6}}
@@ -91,7 +91,7 @@
{{if $nav.login && !$userinfo}}
<li class="nav-item d-lg-flex">
{{if $nav.loginmenu.1.4}}
- <a class="nav-link" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}" data-bs-toggle="modal" data-bs-target="#nav-login">
+ <a class="nav-link" href="#" title="{{$nav.loginmenu.1.3}}" data-bs-toggle="modal" data-bs-target="#nav-login">
{{$nav.loginmenu.1.1}}
</a>
{{else}}
@@ -103,7 +103,7 @@
{{/if}}
{{if $nav.register}}
<li class="nav-item {{$nav.register.2}} d-lg-flex">
- <a class="nav-link" href="{{$nav.register.0}}" title="{{$nav.register.3}}" id="{{$nav.register.4}}">{{$nav.register.1}}</a>
+ <a class="nav-link" href="{{$nav.register.0}}" title="{{$nav.register.3}}">{{$nav.register.1}}</a>
</li>
{{/if}}
{{if $nav.alogout}}
@@ -113,10 +113,10 @@
{{/if}}
</ul>
- <div id="banner" class="navbar-text">{{$banner}}</div>
+ <div class="navbar-text navbar-banner">{{$banner}}</div>
<ul id="nav-right" class="navbar-nav">
- <li class="nav-item collapse clearfix" id="nav-search">
+ <li class="nav-item collapse clearfix" id="nav-search" {{$color_mode}}>
<form class="form-inline" method="get" action="{{$nav.search.4}}" role="search">
<input class="form-control form-control-sm mt-1 me-2" id="nav-search-text" type="text" value="" placeholder="{{$help}}" name="search" title="{{$nav.search.3}}" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/>
</form>
@@ -134,7 +134,7 @@
{{/if}}
{{if $localuser || $nav.pubs}}
<li id="notifications-btn" class="nav-item d-xl-none">
- <a class="nav-link text-white notifications-btn" href="#"><i id="notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a>
+ <a class="nav-link notifications-btn" href="#"><i id="notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a>
</li>
{{/if}}
{{if $navbar_apps}}
@@ -162,10 +162,11 @@
</nav>
<div class="offcanvas offcanvas-end" tabindex="-1" id="app-bin" aria-labelledby="app-bin-label">
<div class="offcanvas-header">
+
{{if $nav.login && !$userinfo}}
- <div class="d-lg-none pt-1 pb-1">
+ <div class="hstack gap-1 d-lg-none pt-1 pb-1">
{{if $nav.loginmenu.1.4}}
- <a class="btn btn-primary btn-sm text-white" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}_collapse" data-bs-toggle="modal" data-bs-target="#nav-login">
+ <a class="btn btn-primary btn-sm text-white" href="#" title="{{$nav.loginmenu.1.3}}" data-bs-toggle="modal" data-bs-target="#nav-login">
{{$nav.loginmenu.1.1}}
</a>
{{else}}
@@ -174,12 +175,13 @@
</a>
{{/if}}
{{if $nav.register}}
- <a class="btn btn-warning btn-sm text-dark" href="{{$nav.register.0}}" title="{{$nav.register.3}}" id="{{$nav.register.4}}" >
+ <a class="btn btn-warning btn-sm text-dark" href="{{$nav.register.0}}" title="{{$nav.register.3}}">
{{$nav.register.1}}
</a>
{{/if}}
+
</div>
- <div class="nav d-lg-flex"></div>
+ <div class="nav d-lg-flex w-100"></div>
{{else}}
<div class="lh-sm w-100" id="app-bin-label">
{{if $name}}
@@ -192,8 +194,10 @@
</div>
<i id="app-bin-trash" class="fa fa-2x fa-fw fa-trash-o d-none"></i>
{{/if}}
-
- <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ <div class="hstack gap-1">
+ <button id="theme-switch" type="button" class="btn btn-outline-secondary border-0"><i id="theme-switch-icon" class="fa fa-{{$theme_switch_icon}}-o"></i></button>
+ <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
</div>
<div class="offcanvas-body">
diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl
index 7a4e909c7..bae1c1469 100644
--- a/view/tpl/notifications_widget.tpl
+++ b/view/tpl/notifications_widget.tpl
@@ -357,10 +357,10 @@
function sse_handleNotificationsItems(notifyType, data, replace, followup) {
- var notifications_tpl = ((notifyType == 'forums') ? decodeURIComponent($("#nav-notifications-forums-template[rel=template]").html().replace('data-src', 'src')) : decodeURIComponent($("#nav-notifications-template[rel=template]").html().replace('data-src', 'src')));
- var notify_menu = $("#nav-" + notifyType + "-menu");
- var notify_loading = $("#nav-" + notifyType + "-loading");
- var notify_count = $("." + notifyType + "-update");
+ let notifications_tpl = ((notifyType == 'forums') ? decodeURIComponent($("#nav-notifications-forums-template[rel=template]").html().replace('data-src', 'src')) : decodeURIComponent($("#nav-notifications-template[rel=template]").html().replace('data-src', 'src')));
+ let notify_menu = $("#nav-" + notifyType + "-menu");
+ let notify_loading = $("#nav-" + notifyType + "-loading");
+ let notify_count = $("." + notifyType + "-update");
if(replace && !followup) {
notify_menu.html('');
@@ -370,14 +370,17 @@
$(data).each(function() {
// do not add a notification if it is already present
- if($('#nav-' + notifyType + '-menu .notification[data-b64mid=\'' + this.b64mid + '\']').length)
- return true;
+
+ // TODO: this is questionable because at least in 'notify' notification type an item can have more than one notifications
+ // e.g. one for the mention and one for the item itself.
+ //if($('#nav-' + notifyType + '-menu .notification[data-b64mid=\'' + this.b64mid + '\']').length)
+ // return true;
if(!replace && !followup && (this.thread_top && notifyType === 'network')) {
$(document).trigger('hz:handleNetworkNotificationsItems', this);
}
- html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.addr,this.message,this.when,this.hclass,this.b64mid,this.notify_id,this.thread_top,this.unseen,this.private_forum, encodeURIComponent(this.mids), this.body);
+ let html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.addr,this.message,this.when,this.hclass,this.b64mid,this.notify_id,this.thread_top,this.unseen,this.private_forum, encodeURIComponent(this.mids), this.body);
notify_menu.append(html);
});
@@ -395,13 +398,13 @@
$('#nav-' + notifyType + '-menu [data-thread_top=false]').addClass('tt-filter-active');
if($('#cn-' + notifyType + '-input').length) {
- var filter = $('#cn-' + notifyType + '-input').val().toString().toLowerCase();
+ let filter = $('#cn-' + notifyType + '-input').val().toString().toLowerCase();
if(filter) {
filter = filter.indexOf('%') == 0 ? filter.substring(1) : filter;
$('#nav-' + notifyType + '-menu .notification').each(function(i, el) {
- var cn = $(el).data('contact_name').toString().toLowerCase();
- var ca = $(el).data('contact_addr').toString().toLowerCase();
+ let cn = $(el).data('contact_name').toString().toLowerCase();
+ let ca = $(el).data('contact_addr').toString().toLowerCase();
if(cn.indexOf(filter) === -1 && ca.indexOf(filter) === -1)
$(el).addClass('cn-filter-active');
else
@@ -531,43 +534,53 @@
{{$no_notifications}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
</div>
<div id="nav-notifications-template" rel="template">
- <a class="list-group-item text-decoration-none text-dark clearfix notification {6}" href="{0}" title="{13}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}" data-when="{5}">
- <img class="menu-img-3" data-src="{1}" loading="lazy">
- <div class="contactname"><span class="text-dark fw-bold">{2}</span> <span class="text-muted">{3}</span></div>
- <span class="text-muted">{4}</span><br>
- <span class="text-muted notifications-autotime" title="{5}">{5}</span>
+ <a class="list-group-item list-group-item-action notification {6}" href="{0}" title="{13}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}" data-when="{5}">
+ <img data-src="{1}" loading="lazy" class="rounded menu-img-2">
+ <div class="text-nowrap">
+ <div class="d-flex justify-content-between align-items-center lh-sm">
+ <div class="text-truncate pe-1">
+ <strong title="{2} - {3}">{2}</strong>
+ </div>
+ <small class="notifications-autotime opacity-75" title="{5}"></small>
+ </div>
+ <div class="text-truncate">{4}</div>
+ </div>
</a>
</div>
<div id="nav-notifications-forums-template" rel="template">
- <a class="list-group-item text-decoration-none clearfix notification notification-forum" href="{0}" title="{4} - {3}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}" data-b64mids='{12}'>
- <span class="float-end badge bg-secondary">{10}</span>
- <img class="menu-img-1" data-src="{1}" loading="lazy">
- <span class="">{2}</span>
- <i class="fa fa-{11} text-muted"></i>
+ <a class="list-group-item list-group-item-action justify-content-between align-items-center d-flex notification notification-forum" href="{0}" title="{4} - {3}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}" data-b64mids='{12}'>
+ <div>
+ <img class="menu-img-1" data-src="{1}" loading="lazy">
+ <span>{2}</span>
+ </div>
+ <span class="badge bg-secondary">{10}</span>
</a>
</div>
<div id="notifications" class="border border-top-0 rounded navbar-nav collapse">
{{foreach $notifications as $notification}}
<div class="rounded-top rounded-bottom border border-start-0 border-end-0 border-bottom-0 list-group list-group-flush collapse {{$notification.type}}-button">
- <a id="notification-link-{{$notification.type}}" class="collapsed list-group-item fakelink notification-link" href="#" title="{{$notification.title}}" data-bs-target="#nav-{{$notification.type}}-sub" data-bs-toggle="collapse" data-sse_type="{{$notification.type}}">
- <i class="fa fa-fw fa-{{$notification.icon}}"></i> {{$notification.label}}
- <span class="float-end badge bg-{{$notification.severity}} {{$notification.type}}-update"></span>
+ <a id="notification-link-{{$notification.type}}" class="collapsed list-group-item justify-content-between align-items-center d-flex fakelink stretched-link notification-link" href="#" title="{{$notification.title}}" data-bs-target="#nav-{{$notification.type}}-sub" data-bs-toggle="collapse" data-sse_type="{{$notification.type}}">
+ <div>
+ <i class="fa fa-fw fa-{{$notification.icon}}"></i>
+ {{$notification.label}}
+ </div>
+ <span class="badge bg-{{$notification.severity}} {{$notification.type}}-update"></span>
</a>
</div>
<div id="nav-{{$notification.type}}-sub" class="rounded-bottom border border-start-0 border-end-0 border-bottom-0 list-group list-group-flush collapse notification-content" data-bs-parent="#notifications" data-sse_type="{{$notification.type}}">
{{if $notification.viewall}}
- <a class="list-group-item text-decoration-none text-dark" id="nav-{{$notification.type}}-see-all" href="{{$notification.viewall.url}}">
+ <a class="list-group-item list-group-item-action text-decoration-none" id="nav-{{$notification.type}}-see-all" href="{{$notification.viewall.url}}">
<i class="fa fa-fw fa-external-link"></i> {{$notification.viewall.label}}
</a>
{{/if}}
{{if $notification.markall}}
- <div class="list-group-item cursor-pointer" id="nav-{{$notification.type}}-mark-all" onclick="markRead('{{$notification.type}}'); return false;">
+ <div class="list-group-item list-group-item-action cursor-pointer" id="nav-{{$notification.type}}-mark-all" onclick="markRead('{{$notification.type}}'); return false;">
<i class="fa fa-fw fa-check"></i> {{$notification.markall.label}}
</div>
{{/if}}
{{if $notification.filter}}
{{if $notification.filter.posts_label}}
- <div class="list-group-item cursor-pointer" id="tt-{{$notification.type}}-only">
+ <div class="list-group-item list-group-item-action cursor-pointer" id="tt-{{$notification.type}}-only">
<i class="fa fa-fw fa-filter"></i> {{$notification.filter.posts_label}}
</div>
{{/if}}
diff --git a/view/tpl/pinned_item.tpl b/view/tpl/pinned_item.tpl
index 4d059e0a4..ece386b72 100644
--- a/view/tpl/pinned_item.tpl
+++ b/view/tpl/pinned_item.tpl
@@ -1,15 +1,4 @@
-{{if $hide}}
-<script>
- function dopinhide(id) {
- id = id.toString();
- if($('#pinned-wrapper-' + id).length) {
- $('#pinned-wrapper-' + id).fadeTo('fast', 0.33, function() { this.remove(); });
- $.post('pin/hide', { 'id' : id });
- }
- }
-</script>
-{{/if}}
-<div id="pinned-wrapper-{{$id}}" class="pinned-item thread-wrapper toplevel_item generic-content-wrapper h-entry" data-b64mids='{{$mids}}'>
+<div id="pinned-wrapper-{{$id}}" class="pinned-item toplevel_item generic-content-wrapper h-entry" data-b64mids='{{$mids}}'>
<div class="wall-item-outside-wrapper" id="pinned-item-outside-wrapper-{{$id}}">
<div class="clearfix wall-item-content-wrapper" id="pinned-item-content-wrapper-{{$id}}">
{{if $photo}}
@@ -40,26 +29,43 @@
<hr class="m-0">
{{/if}}
{{/if}}
- <div class="p-2 clearfix wall-item-head{{if !$title && !$event && !$photo}} rounded-top{{/if}}{{if $is_new && !$event}} wall-item-head-new{{/if}}">
- <span class="float-end" title="{{$pinned}}"><i class="fa fa-thumb-tack">&nbsp;</i></span>
- <div class="wall-item-info" id="pinned-item-info-{{$id}}" >
- <div class="wall-item-photo-wrapper{{if $owner_url}} wwfrom{{/if}} h-card p-author" id="pinned-item-photo-wrapper-{{$id}}">
- <img src="{{$thumb}}" class="fakelink wall-item-photo u-photo p-name" id="pinned-item-photo-{{$id}}" alt="{{$name}}" data-bs-toggle="dropdown" />
+ <div class="p-2 lh-sm d-flex wall-item-head{{if !$title && !$event && !$photo}} rounded-top{{/if}}{{if $is_new && !$event}} wall-item-head-new{{/if}}" >
+ <div class="wall-item-info pe-2" id="wall-item-info-{{$id}}" >
+ <div class="wall-item-photo-wrapper{{if $owner_url}} wwfrom{{/if}} h-card p-author" id="wall-item-photo-wrapper-{{$id}}">
+ <img src="{{$thumb}}" class="fakelink wall-item-photo{{$sparkle}} u-photo p-name" id="wall-item-photo-{{$id}}" alt="{{$name}}" loading="lazy" data-bs-toggle="dropdown" />
{{if $thread_author_menu}}
- <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-bs-toggle="dropdown"></i>
- <div class="dropdown-menu">
- {{foreach $thread_author_menu as $mitem}}
- <a class="dropdown-item" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}} >{{$mitem.title}}</a>
- {{/foreach}}
- </div>
+ <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-bs-toggle="dropdown"></i>
+ <div class="dropdown-menu">
+ {{foreach $thread_author_menu as $mitem}}
+ <a class="dropdown-item{{if $mitem.class}} {{$mitem.class}}{{/if}}" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}}{{if $mitem.data}} {{$mitem.data}}{{/if}}>{{$mitem.title}}</a>
+ {{/foreach}}
+ </div>
{{/if}}
</div>
</div>
- <div class="wall-item-author">
- <a href="{{$profile_url}}" title="{{$linktitle}}" class="wall-item-name-link u-url"><span class="wall-item-name" id="pinned-item-name-{{$id}}" >{{$name}}</span></a>{{if $owner_url}}&nbsp;{{$via}}&nbsp;<a href="{{$owner_url}}" title="{{$olinktitle}}" class="wall-item-name-link"><span class="wall-item-name" id="pinned-item-ownername-{{$id}}">{{$owner_name}}</span></a>{{/if}}
+ <div class="wall-item-author text-truncate">
+ <a href="{{$profile_url}}" title="{{$linktitle}}" class="wall-item-name-link u-url"><span class="wall-item-name" id="pinned-item-name-{{$id}}" >{{$name}}</span></a>{{if $owner_url}}&nbsp;{{$via}}&nbsp;<a href="{{$owner_url}}" title="{{$olinktitle}}" class="wall-item-name-link"><span class="wall-item-name" id="pinned-item-ownername-{{$id}}">{{$owner_name}}</span></a>{{/if}}<br>
+ <small class="wall-item-addr opacity-75">{{$author_id}}</small>
</div>
- <div class="wall-item-ago" id="pinned-item-ago-{{$id}}">
- {{if $verified}}<i class="fa fa-check item-verified" title="{{$verified}}"></i>&nbsp;{{elseif $forged}}<i class="fa fa-exclamation item-forged" title="{{$forged}}"></i>&nbsp;{{/if}}{{if $location}}<span class="wall-item-location p-location" id="pinned-item-location-{{$id}}">{{$location}},&nbsp;</span>{{/if}}<span class="autotime" title="{{$isotime}}"><time class="dt-published" datetime="{{$isotime}}">{{$localtime}}</time>{{if $editedtime}}&nbsp;{{$editedtime}}{{/if}}{{if $expiretime}}&nbsp;{{$expiretime}}{{/if}}</span>{{if $editedtime}}&nbsp;<i class="fa fa-pencil"></i>{{/if}}&nbsp;{{if $app}}<span class="item.app">{{$str_app}}</span>{{/if}}
+ <div class="text-end ms-auto">
+ <div class="wall-item-ago text-nowrap opacity-75" id="wall-item-ago-{{$id}}">
+ {{if $editedtime}}
+ <i class="fa fa-pencil"></i>
+ {{/if}}
+ {{if $delayed}}
+ <i class="fa fa-clock-o"></i>
+ {{/if}}
+ {{if $location}}
+ <small class="wall-item-location p-location" id="wall-item-location-{{$id}}">{{$location}}</small>
+ {{/if}}
+ {{if $verified}}
+ <i class="fa fa-check text-success" title="{{$verified}}"></i>
+ {{elseif $forged}}
+ <i class="fa fa-exclamation text-danger" title="{{$forged}}"></i>
+ {{/if}}
+ <small class="autotime" title="{{$isotime}}"><time class="dt-published" datetime="{{$isotime}}">{{$localtime}}</time>{{if $editedtime}}&nbsp;{{$editedtime}}{{/if}}{{if $expiretime}}&nbsp;{{$expiretime}}{{/if}}</small>
+ </div>
+ <div class="wall-item-pinned" title="{{$pinned}}" id="wall-item-pinned-{{$id}}"><i class="fa fa-thumb-tack"></i></div>
</div>
</div>
{{if $divider}}
@@ -196,3 +202,17 @@
</div>
</div>
</div>
+{{if $hide}}
+<script>
+ function dopinhide(id) {
+ id = id.toString();
+ if($('#pinned-wrapper-' + id).length) {
+ $('#pinned-wrapper-' + id).fadeTo('fast', 0.33, function() { this.remove(); });
+ $.post('pin/hide', { 'id' : id });
+ }
+ }
+</script>
+{{/if}}
+<script>
+ $(".pinned-item .autotime").timeago();
+</script>
diff --git a/view/tpl/search_item.tpl b/view/tpl/search_item.tpl
index 7b63d83b8..b2a99b64a 100644
--- a/view/tpl/search_item.tpl
+++ b/view/tpl/search_item.tpl
@@ -20,13 +20,38 @@
<hr class="m-0">
{{/if}}
{{/if}}
- <div class="p-2 clearfix wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}}" >
- <div class="wall-item-info" id="wall-item-info-{{$item.id}}" >
- <div class="wall-item-photo-wrapper{{if $item.owner_url}} wwfrom{{/if}}" id="wall-item-photo-wrapper-{{$item.id}}">
+ <div class="p-2 wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}}" >
+ <div class="text-end float-end">
+ <div class="wall-item-ago opacity-75" id="wall-item-ago-{{$item.id}}">
+ {{if $item.editedtime}}
+ <i class="fa fa-pencil"></i>
+ {{/if}}
+ {{if $item.delayed}}
+ <i class="fa fa-clock-o"></i>
+ {{/if}}
+ {{if $item.location}}
+ <small class="wall-item-location p-location" id="wall-item-location-{{$item.id}}">{{$item.location}}</small>
+ {{/if}}
+ {{if $item.verified}}
+ <i class="fa fa-check text-success" title="{{$item.verified}}"></i>
+ {{elseif $item.forged}}
+ <i class="fa fa-exclamation text-danger" title="{{$item.forged}}"></i>
+ {{/if}}
+ <small class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</small>
+ </div>
+ {{if $item.thr_parent}}
+ <a href="javascript:doscroll('{{$item.thr_parent}}',{{$item.parent}});" class="ms-3" title="{{$item.top_hint}}"><i class="fa fa-angle-double-up"></i></a>
+ {{/if}}
+ {{if $item.pinned}}
+ <div class="wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="fa fa-thumb-tack"></i></div>
+ {{/if}}
+ </div>
+ <div class="float-start wall-item-info pe-2" id="wall-item-info-{{$item.id}}" >
+ <div class="wall-item-photo-wrapper{{if $item.owner_url}} wwfrom{{/if}} h-card p-author" id="wall-item-photo-wrapper-{{$item.id}}">
{{if $item.contact_id}}
<div class="spinner-wrapper contact-edit-rotator contact-edit-rotator-{{$item.contact_id}}"><div class="spinner s"></div></div>
{{/if}}
- <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" data-bs-toggle="dropdown" loading="lazy" />
+ <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" loading="lazy" data-bs-toggle="dropdown" />
{{if $item.author_is_group_actor}}
<i class="fa fa-comments-o wall-item-photo-group-actor" title="{{$item.author_is_group_actor}}"></i>
{{/if}}
@@ -40,17 +65,22 @@
{{/if}}
</div>
</div>
- {{if $item.lock}}
- <div class="wall-item-lock dropdown">
- <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else if $item.locktype == 1}}fa-lock{{else}}fa-unlock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-bs-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
- </div>
- {{/if}}
<div class="wall-item-author">
- {{if $item.previewing}}<span class="preview-indicator"><i class="fa fa-eye" title="{{$item.preview_lbl}}"></i></span>&nbsp;{{/if}}
- <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" ><bdi>{{$item.name}}</bdi></span></a>{{if $item.owner_url}}&nbsp;{{$item.via}}&nbsp;<a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}"><bdi>{{$item.owner_name}}</bdi></span></a>{{/if}}
- </div>
- <div class="wall-item-ago" id="wall-item-ago-{{$item.id}}">
- {{if $item.verified}}<i class="fa fa-check item-verified" title="{{$item.verified}}"></i>&nbsp;{{elseif $item.forged}}<i class="fa fa-exclamation item-forged" title="{{$item.forged}}"></i>&nbsp;{{/if}}{{if $item.location}}<span class="wall-item-location" id="wall-item-location-{{$item.id}}">{{$item.location}},&nbsp;</span>{{/if}}<span class="autotime" title="{{$item.isotime}}">{{$item.localtime}}{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</span>{{if $item.editedtime}}&nbsp;<i class="fa fa-pencil"></i>{{/if}}&nbsp;{{if $item.app}}<span class="item.app">{{$item.str_app}}</span>{{/if}}
+ {{if $item.previewing}}
+ <div class="float-start me-1 preview-indicator">
+ <i class="fa fa-eye" title="{{$item.preview_lbl}}"></i>
+ </div>
+ {{/if}}
+ {{if $item.lock}}
+ <div class="float-start dropdown wall-item-lock">
+ <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else if $item.locktype == 1}}fa-lock{{else}}fa-unlock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-bs-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
+ <div id="panel-{{$item.id}}" class="dropdown-menu"></div>
+ </div>
+ {{/if}}
+ <div class="text-truncate">
+ <a href="{{$item.profile_url}}" class="lh-sm wall-item-name-link u-url"{{if $item.app}} title="{{$item.str_app}}"{{/if}}><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" ><bdi>{{$item.name}}</bdi></span></a>{{if $item.owner_url}}&nbsp;{{$item.via}}&nbsp;<a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}"><bdi>{{$item.owner_name}}</bdi></span></a>{{/if}}
+ </div>
+ <small class="lh-sm text-truncate d-block wall-item-addr opacity-75">{{$item.author_id}}</small>
</div>
</div>
{{if $item.divider}}
diff --git a/view/tpl/settings_account.tpl b/view/tpl/settings_account.tpl
index 2b942d694..0280b2962 100644
--- a/view/tpl/settings_account.tpl
+++ b/view/tpl/settings_account.tpl
@@ -17,6 +17,7 @@
<div class="settings-submit-wrapper" >
<button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ <a href="/settings/multifactor" class="btn btn-outline-success">{{$mfa}}</a>
</div>
{{$account_settings}}
</div>
diff --git a/view/tpl/totp.tpl b/view/tpl/totp.tpl
new file mode 100644
index 000000000..1f3b1cfc7
--- /dev/null
+++ b/view/tpl/totp.tpl
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html data-bs-theme="light">
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
+ <head>
+ <link rel="stylesheet" href="/vendor/twbs/bootstrap/dist/css/bootstrap.min.css" type="text/css" media="screen">
+ <link rel="stylesheet" href="/library/fork-awesome/css/fork-awesome.min.css" type="text/css" media="screen">
+ </head>
+ <body>
+ <nav class="navbar bg-body-tertiary">
+ <div class="container-sm">
+ <span class="navbar-brand"><i class="fa fa-fw fa-hubzilla"></i>{{$header}}</span>
+ </div>
+ </nav>
+ <main class="container-sm mt-4">
+ <h5>{{$id}}</h5>
+ <form action="totp_check" method="post">
+ <input type="hidden" class="form-control" name="totp_code_static" value="1"/>
+ <div class="mb-3">
+ <label for="totp-input" class="form-label">{{$desc}}</label>
+ <input id="totp-input" type="text" class="form-control" name="totp_code" value=""/>
+ </div>
+ <input type="submit" value="{{$submit}}" class="btn btn-primary">
+ </form>
+ </main>
+ </body>
+</html>
diff --git a/view/tpl/totp_setup.tpl b/view/tpl/totp_setup.tpl
new file mode 100644
index 000000000..6f995edf1
--- /dev/null
+++ b/view/tpl/totp_setup.tpl
@@ -0,0 +1,64 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-tools-wrapper">
+ {{if $secret}}
+ <div class="section-content-info-wrapper">
+ <div>{{$secret_text}}</div>
+ <div><strong class="text-break">{{$secret}}</strong></div>
+ </div>
+ {{/if}}
+ <img src="{{$qrcode}}" alt="{{$uri}}" title="{{$uri}}">
+ <div id="mfa-test-wrapper" class="mb-3">
+ <form action="" id="totp-test-form" method="post" autocomplete="off" >
+ <div class="mb-3">
+ <label for="totp_test">{{$test_title}}</label>
+ <input type="text" id="totp_test" class="form-control" onfocus="totp_clear_code()"/>
+ <small class="text-muted">{{$test_title_sub}}</small>
+ </div>
+ <button id="otp-test-submit" type="submit" name="submit" class="btn btn-outline-primary" onclick="totp_test_code(); return false;">
+ {{$test}}
+ </button>
+ </form>
+ </div>
+ <div id="mfa-submit-wrapper" class="{{if !$enable_mfa.2}}d-none{{/if}}">
+ <form action="settings/multifactor" method="post">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+ {{include file="field_password.tpl" field=$password}}
+ {{include file="field_checkbox.tpl" field=$enable_mfa}}
+ <div class="settings-submit-wrapper" >
+ <button id="otp-enable-submit" type="b" name="submit" class="btn btn-primary">
+ {{$submit}}
+ </button>
+ </div>
+ </form>
+ </div>
+ </div>
+</div>
+
+<script>
+ function totp_clear_code() {
+ let box = document.getElementById('totp_test');
+ box.value = '';
+ box.focus();
+ }
+
+ function totp_test_code() {
+ $.post(
+ 'totp_check',
+ {totp_code: document.getElementById('totp_test').value},
+ function(data) {
+ if (data['status']) {
+ $.jGrowl('{{$test_pass}}', { sticky: false, theme: 'info', life: 10000 });
+ let e = document.getElementById('mfa-submit-wrapper');
+ e.classList.remove('d-none');
+ return;
+ }
+ $.jGrowl('{{$test_fail}}', { sticky: false, theme: 'notice', life: 10000 });
+ }
+ );
+ }
+</script>
+
+